<?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>87283</bug_id>
          
          <creation_ts>2012-05-23 10:40:42 -0700</creation_ts>
          <short_desc>[GTK] run-file-chooser signal for WebKit1</short_desc>
          <delta_ts>2012-06-21 05:09:00 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKitGTK</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>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>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Daniel Drake">dsd</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>cgarcia</cc>
    
    <cc>gustavo</cc>
    
    <cc>mario</cc>
    
    <cc>mrobinson</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>631781</commentid>
    <comment_count>0</comment_count>
    <who name="Daniel Drake">dsd</who>
    <bug_when>2012-05-23 10:40:42 -0700</bug_when>
    <thetext>Bug #78491 adds a run-file-chooser interface for WebKit2. OLPC/Sugar will move to WebKit2 shortly, but a temporary solution is needed for WebKit1.

I have backported the basics to WebKit1 and tested, Mario Sanchez Prada has added some missing bits. The patch (attached) just needs unit tests.

Adding unit tests looks quite time consuming, and this is my first time in the webkit code. I&apos;ll try to find some time to work on it soon, but help/direction would be much appreciated.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>631783</commentid>
    <comment_count>1</comment_count>
      <attachid>143594</attachid>
    <who name="Daniel Drake">dsd</who>
    <bug_when>2012-05-23 10:41:57 -0700</bug_when>
    <thetext>Created attachment 143594
Work in progress

A combination of my initial backport and Mario&apos;s additions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>632039</commentid>
    <comment_count>2</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-05-23 14:05:51 -0700</bug_when>
    <thetext>(In reply to comment #0)
&gt; [...]
&gt; Adding unit tests looks quite time consuming, and this is my first time
&gt; in the webkit code. I&apos;ll try to find some time to work on it soon, but 
&gt; help/direction would be much appreciated.

You basically need to implement a new unit test in Source/WebKit/gtk/tests/testwebview.c, so you actually check that the run-file-chooser gets emitted when clicking on the button and that the new API work as expected in different cases.

For a baseline to start writing a new unit test in that file, I think test_webkit_web_view_fullscreen() could be a good thing to check, as it already connects to some signals in from the WebView and check stuff there.

To get ideas on how to actually implement this specific unit test, which HTML code you could use for testing this new API and so on, you can check testWebViewFileChooserRequest() inside Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitWebView.cpp. Implementation of unit tests is slightly different there (as we use a C++ wrapper on top of GTest, instead of using plain C), but the underlying idea is basically the same: connect to the run-file-chooser signal and check different things depending on the HTML used.

Hope this helps, and thanks for your effort on this front.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>633317</commentid>
    <comment_count>3</comment_count>
      <attachid>143909</attachid>
    <who name="Daniel Drake">dsd</who>
    <bug_when>2012-05-24 15:49:36 -0700</bug_when>
    <thetext>Created attachment 143909
new patch

Here&apos;s the latest patch with unit tests ported from WebKit2.
One test fails :(

Mario, would you be able to spend a few mins looking at this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>633487</commentid>
    <comment_count>4</comment_count>
      <attachid>143953</attachid>
    <who name="Daniel Drake">dsd</who>
    <bug_when>2012-05-24 19:59:19 -0700</bug_when>
    <thetext>Created attachment 143953
Attempting to solve test failure

Tricky, I think.
webkit_file_chooser_request_get_selected_files() calls into request-&gt;priv-&gt;chooser-&gt;settings().selectedFiles. However, this doesn&apos;t seem to be updated when a new selection is made.

So I moved to caching the selected files in webkit_file_chooser_request_select_files() in the attached incremental patch. This fixes the test failure but then fails on a later test, where we select some files then click the button again and check that the selection was retained. This creates a new ChooserRequest object which has forgotten the selection of the first one.

I then tried caching the initially selected files by reading the settings from webkit_file_chooser_request_create() but this segfaults upon access to chooser-&gt;settings(), not sure why.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>633695</commentid>
    <comment_count>5</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-05-25 01:32:33 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; Created an attachment (id=143953) [details]
&gt; Attempting to solve test failure
&gt; 
&gt; Tricky, I think.

Yes, it&apos;s indeed tricky :-)

&gt; webkit_file_chooser_request_get_selected_files() calls into request-&gt;priv-
&gt; chooser-&gt;settings().selectedFiles. However, this doesn&apos;t seem to be updated 
&gt; when a new selection is made.

This is the expected behavior, although I agree with you that it&apos;s confusing to say the least, as I had the same doubts when working on this.

The reason why this happens is that the list of selected files in the filechooser is generated when the user initiates the logic, by pressing in a &apos;upload&apos; button, and won&apos;t change during the whole lifecycle of the &apos;file chooser request&apos;, I think.

To make it clear, this is a list of the steps that happen in a typical workflow like this:

  1. User clicks on a &apos;upload&apos; &lt;input type=&apos;file&apos;&gt; button
  2. The runOpenPanel stuff is triggered from WebCore, resulting on calling to wkgtk&apos;s implementation of ChromeClient::runOpenPanel
  3. The signal &apos;run-file-chooser&apos; signal is emitted from the WebView, with an instance of WebKitFileChooserRequest with the details of the event (selected files that might be already present _from previous times the user opened the dialog_, mime type filters to be applied)
  4. The application handles the signal, showing a dialog to the user so (s)he can select local files. The application might take into account, when creating that dialog the following info:
         - selected files in the request (they could pre-select them in the dialog)
         - accepted mime types (they could decide to filter other mime types out)
         - allows multiple selection (so that more than one file could be selected)
  5. The user makes a choice and closes the dialog, which would result on a call to webkit_file_chooser_request_choose_files(), or just cancels it (webkit_file_chooser_request_cancel()).
  6. The whole process finishes at this point, and nobody should care anymore about that WebKitFileChooserRequest object, that should get disposed from this point on.

So, the thing is that if you open the file chooser request for the first time, selectedFiles in WebCore will be an empty list (since it&apos;s the first time) and it will keep being an empty list even after selecting some files (let&apos;s say &quot;A&quot; and &quot;B&quot;) in the dialog, since it&apos;s associated to the current request the user is dealing with.

Then, if you open the dialog for the second time, selectedFiles will be filled now with the list of files previously selected (&quot;A&quot; and &quot;B&quot;), so the application will see them with the request in case it wants to do something with them (like pre-selecting them in the dialog). If now the user selects file &quot;C&quot; selectedFiles will internally keep containing &quot;A&quot; and &quot;B&quot;, as won&apos;t be different until the next request, if that ever happens.

So this is precisely one of the reasons why we added the caching of selectedFiles at the level of the API (I mean, inside of WebKitFileChooserRequest, not in WebCore::FileChooser), so we could update the list of selected files at that level for the hypothetical case of the application calling to _get_selected_files() right after _select_files(), so we would return the list of files _currently_ selected even before disposing the current request, which would still be the old list in WebCore at that point.

Not sure if I managed to explain it properly. It&apos;s messy, I know... so feel free to ask again if you want some further clarification.

&gt; So I moved to caching the selected files in 
&gt; webkit_file_chooser_request_select_files() in the attached incremental
&gt; patch. This fixes the test failure but then fails on a later test,
&gt; where we select some files then click the button again and check that
&gt; the selection was retained. This creates a new ChooserRequest object
&gt; which has forgotten the selection of the first one.

It&apos;s ok to cache in the _select_files() method (so we can return the new list if the app calls _get_selected() right after making a new selection _and_ before disposing the current WebKitFileChooserRequest  object), but you should keep the cache in _get_selected_files() too, since you typically call it before opening the file chooser, so you know if you need to preselect some files in case there was a previous selection made.

&gt; I then tried caching the initially selected files by reading the settings from
&gt; webkit_file_chooser_request_create() but this segfaults upon access to
&gt; chooser-&gt;settings(), not sure why.

I&apos;m not sure either why this fails, nor why the previous tests you did fail too, but I&apos;ll take a look if possible today to it.

Btw, sorry for the late reply, but yesterday and today I&apos;m attending to long meetings in the afternoon, so that&apos;s why I can&apos;t check this as promptly as I would like to.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>633860</commentid>
    <comment_count>6</comment_count>
      <attachid>144053</attachid>
    <who name="Daniel Drake">dsd</who>
    <bug_when>2012-05-25 06:00:22 -0700</bug_when>
    <thetext>Created attachment 144053
run-file-chooser ready for review

Thanks for the clear explanation, now I understand it better. The test case failure can be fixed by moving to the same logic used in WebKit2, which is as you describe. Here&apos;s an updated patch with all test cases working. Whats next?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>633979</commentid>
    <comment_count>7</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-05-25 09:16:54 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; Created an attachment (id=144053) [details]
&gt; run-file-chooser ready for review
&gt; 
&gt; Thanks for the clear explanation, now I understand it better.

Glad to hear that.

&gt; The test case failure can be fixed by moving to the same logic used in WebKit2, 
&gt; which is as you describe. Here&apos;s an updated patch with all test cases working.

Thanks! Good to see you figured out the problem.

&gt; Whats next?

I haven&apos;t time to checked the patch (last meeting this afternoon) and have to run now out of the office, but off the top of my head the next step would be to ask a  WebKit reviewer[1] (which I&apos;m not yet) to review it by setting the r? flag in the &quot;Details&quot; link for the patch [2].

Still, I could make an informally review but I&apos;m afraid that will have to wait until Monday, since I&apos;m now already in a hurry. Hope it&apos;s fine

[1] http://www.webkit.org/coding/commit-review-policy.html
[2] http://www.webkit.org/coding/contributing.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>635776</commentid>
    <comment_count>8</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-05-29 02:28:23 -0700</bug_when>
    <thetext>I will do an informal review myself now, but as I&apos;m not a reviewer I&apos;m adding Carlos to CC so he is aware of this bug and can make an official review later.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>635815</commentid>
    <comment_count>9</comment_count>
      <attachid>144053</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-05-29 03:12:49 -0700</bug_when>
    <thetext>Comment on attachment 144053
run-file-chooser ready for review

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

Informally reviewing the patch, which overall looks good to me. I&apos;ve mostly commented on he need of keeping the webkit_file_chooser_request_cancel() function in the API and some coding style issues. Hope this helps.

See my comments below...

&gt; WebKit-r118336/Source/WebKit/gtk/webkit/webkitfilechooserrequest.cpp:365
&gt; +     */

I&apos;m not sure whether it&apos;s useful to keep this webkit_file_chooser_request_cancel() function in WebKit1 if we don&apos;t need it after all. For WebKit2 is needed in order to tell the Web process that the request have been cancelled so it does not keep waiting forever, but that&apos;s not an issue in WK1 (and the reason, I think, why is not needed).

So, I think I would remove this function from the API in WK1, even if that&apos;s not consistent with WK2 API. After all, both APIs are similar but not identical anyway.

&gt; WebKit-r118336/Source/WebKit/gtk/webkit/webkitfilechooserrequest.h:70
&gt; +webkit_file_chooser_request_cancel                (WebKitFileChooserRequest *request);

Same here. I would remove this one, although I&apos;d appreciate others&apos; opinion on this topic, too.

Carlos, what do you think?

&gt; WebKit-r118336/Source/WebKit/gtk/webkit/webkitwebview.cpp:1315
&gt; +        webkit_file_chooser_request_cancel(adoptedRequest.get());

Make sure to remove this else branch if we finally agree on removing webkit_file_chooser_request_cancel() from the API

&gt; WebKit-r118336/Source/WebKit/gtk/webkit/webkitwebview.cpp:1338
&gt; +    gtk_file_chooser_set_select_multiple(GTK_FILE_CHOOSER(dialog), allowsMultipleSelection);

This line seems to be duplicated.

Also, I think this is a good place to ask the WebKitFileChooserRequest object whether it already has a non-empty list of files selected that we can use to pre-select them in the file chooser dialog when opening (actually we just can pre-select one file). This is what we do in WK2:

    if (const gchar* const* selectedFiles = webkit_file_chooser_request_get_selected_files(request))
        gtk_file_chooser_select_filename(GTK_FILE_CHOOSER(dialog), selectedFiles[0]);

Hence, I would do the same here.

&gt; WebKit-r118336/Source/WebKit/gtk/tests/testwebview.c:509
&gt; +static gboolean checkMimeTypeForFilter(GtkFileFilter* filter, const gchar* mimeType)

Coding style issue: in the diff for this file you seem to use sometimes thisKindOfNamingStyle for functions, local variables and parameters, and some times this_other_naming_style, and that is wrong as you should be consistent.

In theory the former (camel case) is the commonly agreed coding style for newly introduced code in WK *but*, as (1) unit tests are an exception in some ways to coding style, as (2) 99% of this file seems to be already written using this_other_naming_style and as (3) we don&apos;t expect much more changes in this file from now on... I&apos;d say that these are good reasons to stick to this_other_naming_style here.

Which is a long way of saying that you should be consistent with the code introduced in this patch and that you should rename this function name and parameters to something like this:

   static gboolean check_mime_type_for_filter(GtkFileFilter* filter, const gchar* mime_type)

Others might disagree (and I would also if we were thinking of adding many more changes in the future to this file), but I think that it&apos;s pretty reasonable to do it this time according to reasons (1), (2) and (3).

&gt; WebKit-r118336/Source/WebKit/gtk/tests/testwebview.c:511
&gt; +    GtkFileFilterInfo filterInfo;

Don&apos;t use camel case style here: filterInfo -&gt; filter_info

&gt; WebKit-r118336/Source/WebKit/gtk/tests/testwebview.c:520
&gt; +    const gchar* const* selectedFiles;

Don&apos;t use camel case style here

&gt; WebKit-r118336/Source/WebKit/gtk/tests/testwebview.c:521
&gt; +    GtkFileFilter *filter;

Coding style issue: Misplaced &apos;*&apos;. It should be &apos;GtkFileFilter* filter;&apos;

&gt; WebKit-r118336/Source/WebKit/gtk/tests/testwebview.c:531
&gt; +    webkit_file_chooser_request_cancel(request);

Same than before: remove this line if we agree on removing the _cancel() function from the API

&gt; WebKit-r118336/Source/WebKit/gtk/tests/testwebview.c:540
&gt; +    const gchar* const* selectedFiles;

Don&apos;t use camel case style here

&gt; WebKit-r118336/Source/WebKit/gtk/tests/testwebview.c:541
&gt; +    GtkFileFilter *filter;

Misplaced &apos;*&apos;.

&gt; WebKit-r118336/Source/WebKit/gtk/tests/testwebview.c:570
&gt; +    const gchar* const* selectedFiles;

Don&apos;t use camel case style here

&gt; WebKit-r118336/Source/WebKit/gtk/tests/testwebview.c:578
&gt; +    webkit_file_chooser_request_cancel(request);

Remove this line if agreed

&gt; WebKit-r118336/Source/WebKit/gtk/tests/testwebview.c:588
&gt; +    GtkFileFilter *filter;

Misplaced &apos;*&apos;.

&gt; WebKit-r118336/Source/WebKit/gtk/tests/testwebview.c:607
&gt; +    webkit_file_chooser_request_cancel(request);

Put my &quot;usual comment&quot; here :)

&gt; WebKit-r118336/Source/WebKit/gtk/tests/testwebview.c:613
&gt; +void doMouseButtonEvent(GtkWidget *widget, GdkEventType event_type, int x, int y, unsigned int button, unsigned int modifiers)

Don&apos;t use camel case style here: doMouseButtonEvent -&gt; do_mouse_button_event

Also, misplaced &apos;*&apos; for widget.

&gt; WebKit-r118336/Source/WebKit/gtk/tests/testwebview.c:619
&gt; +    GdkEvent *event = gdk_event_new(event_type);

Misplaced &apos;*&apos;.

&gt; WebKit-r118336/Source/WebKit/gtk/tests/testwebview.c:638
&gt; +static void clickMouseButton(GtkWidget *widget, int x, int y, unsigned int button, unsigned int modifiers)

Don&apos;t use camel case style here. Misplaced &apos;*&apos; for widget

&gt; WebKit-r118336/Source/WebKit/gtk/tests/testwebview.c:644
&gt; +static gboolean clickMouseButtonAndWaitForFileChooserRequest(WebKitWebView* webView)

Don&apos;t use camel case style here

&gt; WebKit-r118336/Source/WebKit/gtk/tests/testwebview.c:655
&gt; +    gchar *html_format;

Misplaced &apos;*&apos;.in these two variables: html_format_base and html_format.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>636004</commentid>
    <comment_count>10</comment_count>
      <attachid>144555</attachid>
    <who name="Daniel Drake">dsd</who>
    <bug_when>2012-05-29 07:35:47 -0700</bug_when>
    <thetext>Created attachment 144555
updated patch for review

Thanks! Here&apos;s a new patch addressing those comments.

If there is not much focus on making WebKit1 and WebKit2 gobject APIs similar, I agree with removing the cancel method (done in the patch).

The one remaining issue I have here is that it complains during build:

/home/dsd/projects/WebKit-r118336/Source/WebKit/gtk/webkit/webkitfilechooserrequest.cpp:56: warning: Section WebKitFileChooserRequest is not defined in the webkitgtk-section.txt file.

Does it mean webkitgtk-sections.txt (with an &apos;s&apos;)? I do have an entry there, and I can&apos;t see what I&apos;m doing differently compared to other classes. Either way it does not seem to affect the functionality.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>636033</commentid>
    <comment_count>11</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-05-29 08:07:51 -0700</bug_when>
    <thetext>The patch looks great. So great it looks that I can&apos;t do much more on my side other than making some final comments (see below). From now on an official reviewer should take the lead and give the final approval (or not).

In the meanwhile, I&apos;d recommend you to prepare the ChangeLog entry. It&apos;s the only thing missing I can spot (and sorry not to have spotted it before).

(In reply to comment #10)
&gt; Created an attachment (id=144555) [details]
&gt; updated patch for review
&gt; 
&gt; Thanks! Here&apos;s a new patch addressing those comments.

Great. I think now you only need to run the prepareChangeLog script and provide a properly formatted entry in Source/WebKit/gtk/ChangeLog.

You can do it manually too, but if so make sure you format it properly, avoid tabs (only spaces) and that you include a line like the following one:

  Reviewed by NOBODY (OOPS!).

(This line will get changed with the name of the reviewe on it once it gets r+ and while pushing it to the repository)

&gt; If there is not much focus on making WebKit1 and WebKit2 gobject APIs 
&gt; similar, I agree with removing the cancel method (done in the patch).

The idea is to make them similar, but not necessarily identical. In this case I think it makes sense to leave that function out of the game.

&gt; The one remaining issue I have here is that it complains during build:
&gt; 
&gt; /home/dsd/projects/WebKit-r118336/Source/WebKit/gtk/webkit/webkitfilechooserrequest.cpp:56:
&gt; warning: Section WebKitFileChooserRequest is not defined in the webkitgtk-section.txt file.
&gt; 
&gt; Does it mean webkitgtk-sections.txt (with an &apos;s&apos;)? I do have an entry there, and I can&apos;t
&gt; see what I&apos;m doing differently compared to other classes. Either way it does not seem to
&gt; affect the functionality.

I&apos;ve seen this problem going away after forcing a full clean rebuild. Not sure if it&apos;s the case here, though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>636039</commentid>
    <comment_count>12</comment_count>
    <who name="Daniel Drake">dsd</who>
    <bug_when>2012-05-29 08:12:02 -0700</bug_when>
    <thetext>Would you mind running the prepare-ChangeLog script for me? I haven&apos;t succeeded in checking out the webkit repository (my internet connection isn&apos;t very good).

I&apos;ve been developing on top of the nightly snapshots, however prepare-ChangeLog doesn&apos;t work there:

$ ./Tools/Scripts/prepare-ChangeLog 
Couldn&apos;t determine your version control system. at ./Tools/Scripts/prepare-ChangeLog line 166.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>636051</commentid>
    <comment_count>13</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-05-29 08:25:08 -0700</bug_when>
    <thetext>(In reply to comment #12)

&gt; $ ./Tools/Scripts/prepare-ChangeLog 
&gt; Couldn&apos;t determine your version control system. at ./Tools/Scripts/prepare-ChangeLog line 166.

The dump at http://nightly.webkit.org/files/WebKit-SVN-source.tar.bz2 should theoretically work with prepare-ChangeLog.  Is that the one you are using?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>636501</commentid>
    <comment_count>14</comment_count>
      <attachid>144635</attachid>
    <who name="Daniel Drake">dsd</who>
    <bug_when>2012-05-29 15:33:43 -0700</bug_when>
    <thetext>Created attachment 144635
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>636502</commentid>
    <comment_count>15</comment_count>
    <who name="Daniel Drake">dsd</who>
    <bug_when>2012-05-29 15:35:39 -0700</bug_when>
    <thetext>Thanks Martin, I was using a snapshot without the .svn database. That helped a lot.

Above patch fixes the gtk-doc warning mentioned above. I think that addresses everything raised so far - hopefully ready for final review now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>639698</commentid>
    <comment_count>16</comment_count>
    <who name="Daniel Drake">dsd</who>
    <bug_when>2012-06-01 13:52:38 -0700</bug_when>
    <thetext>I&apos;m finding this is crashing when calling file_chooser_request.select_files() from Python. Will update when I know more.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>640735</commentid>
    <comment_count>17</comment_count>
    <who name="Daniel Drake">dsd</who>
    <bug_when>2012-06-04 12:14:06 -0700</bug_when>
    <thetext>That crash was something local/unrelated. The patch is fine. Please go ahead with review (and commit? :))</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>644376</commentid>
    <comment_count>18</comment_count>
      <attachid>144635</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-06-07 23:28:49 -0700</bug_when>
    <thetext>Comment on attachment 144635
Patch

(In reply to comment #17)
&gt; That crash was something local/unrelated. The patch is fine.

Good

&gt; Please go ahead with review (and commit? :))

I&apos;m now setting the cq? flag so reviewers can set it to cq+ in case the patch got approved, in order to get it in automatically through the commit-queue.

Thanks</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>645090</commentid>
    <comment_count>19</comment_count>
      <attachid>144635</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-06-08 15:51:10 -0700</bug_when>
    <thetext>Comment on attachment 144635
Patch

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

Thanks for writing this patch. It actually looks very much like it&apos;s ready to go. There are a few stylistic things that I think should be changed before that though. I always feel a bit bad giving a good patch an r- for mostly stylistic reasons, but it&apos;s important that we follow the rules that the community agreed on (otherwise chaos would ensue, undoubtedly). 

&gt; Source/WebKit/gtk/tests/testwebview.c:509
&gt; +static gboolean check_mime_type_for_filter(GtkFileFilter* filter, const gchar* mime_type)

Please use WebKit coding style when writing C files. See the style rules here: http://www.webkit.org/coding/coding-style.html Many of the existing tests were written before we followed these rules as well as we do now. We try to ensure that all new code follows the style rules though.

Note that C files have the bizarre requirement of putting the asterisk next to the variable name, unlike C++ files. Variable names should be like mimeType instead of mime_type.

&gt; Source/WebKit/gtk/tests/testwebview.c:517
&gt; +static gboolean run_file_chooser_cb_1(WebKitWebView* webview, WebKitFileChooserRequest* request, gpointer data)

This names run_file_chooser_cb_1 and run_file_chooser_cb_2 don&apos;t really say much about what these callbacks actually do. Consider using names that better describe the what each callback does.

&gt; Source/WebKit/gtk/tests/testwebview.c:522
&gt; +    const gchar* const* mime_types;
&gt; +    const gchar* const* selected_files;
&gt; +    GtkFileFilter* filter;
&gt; +

We don&apos;t typically declare variable before we use them like this in WebKit. Please make this change throughout your patch.

&gt; Source/WebKit/gtk/tests/testwebview.c:670
&gt; +    webkit_web_view_load_string(WEBKIT_WEB_VIEW(web_view), html_format, NULL, NULL, NULL);
&gt; +    g_free(html_format);
&gt; +
&gt; +    g_timeout_add(100, (GSourceFunc) click_mouse_button_and_wait_for_file_chooser_request, WEBKIT_WEB_VIEW(web_view));

Instead of using a timeout here it would be better to run the main loop and wait until loading it complete.

&gt; Source/WebKit/gtk/tests/testwebview.c:694
&gt; +    // Multiple selections not allowed, only accept images, audio and video files..

Nit: I think you have an extra period here.

&gt; Source/WebKit/gtk/webkit/webkitfilechooserrequest.cpp:45
&gt; + * some cases, which could prefer to use their own file chooser

&quot;cases , which could prefer&quot; sounds a bit odd here. Perhaps cases, such as when an embedding applications prefers to use its own&quot;

&gt; Source/WebKit/gtk/webkit/webkitfilechooserrequest.cpp:144
&gt; +                                                      WEBKIT_PARAM_READABLE));    /**

Your comment seems to joined to the previous line here. Are you a vim user? :)

&gt; Source/WebKit/gtk/webkit/webkitwebview.cpp:1318
&gt; +static gboolean webkit_web_view_real_run_file_chooser(WebKitWebView* webView, WebKitFileChooserRequest* request)

You should use camelCase for this method name since it isn&apos;t exposed in the public API.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>645657</commentid>
    <comment_count>20</comment_count>
      <attachid>146762</attachid>
    <who name="Daniel Drake">dsd</who>
    <bug_when>2012-06-10 18:29:18 -0700</bug_when>
    <thetext>Created attachment 146762
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>645658</commentid>
    <comment_count>21</comment_count>
    <who name="Daniel Drake">dsd</who>
    <bug_when>2012-06-10 18:35:29 -0700</bug_when>
    <thetext>Thanks. I&apos;ve addressed all comments in the new patch, with one exception: the g_timeout_add.

While I can make it listen for the load-status FINISHED signal, I can&apos;t get the mouse-click simulation working from such context. Nothing happens, as if no click has happened. I hope this will be acceptable anyway given that the same file uses this technique in various other places.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>647113</commentid>
    <comment_count>22</comment_count>
      <attachid>146762</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-06-12 11:26:15 -0700</bug_when>
    <thetext>Comment on attachment 146762
Patch

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

Okay. This looks pretty reasonable to me. We need one more reviewer to approve the API. I&apos;d also like to clean up a few tiny details before landing this one.

&gt; Source/WebKit/gtk/ChangeLog:9
&gt; +rada&apos;s

Looks like an accidental newline here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>648676</commentid>
    <comment_count>23</comment_count>
      <attachid>147465</attachid>
    <who name="Daniel Drake">dsd</who>
    <bug_when>2012-06-13 18:55:08 -0700</bug_when>
    <thetext>Created attachment 147465
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>649392</commentid>
    <comment_count>24</comment_count>
      <attachid>147465</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2012-06-14 12:52:59 -0700</bug_when>
    <thetext>Comment on attachment 147465
Patch

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

Thanks for your work! Looks good to me, but have a few comments, probably needs a new patch uploaded since you&apos;re not a committer, I guess?

&gt; Source/WebKit/gtk/webkit/webkitwebview.cpp:2605
&gt; +     * This signal is emitted when the user interacts with a &amp;lt;input
&gt; +     * type=&apos;file&apos; /&amp;gt; HTML element, requesting from WebKit to show
&gt; +     * a dialog to select one or more files to be uploaded. To let the
&gt; +     * application know the details of the file chooser, as well as to
&gt; +     * allow the client application to either cancel the request or
&gt; +     * perform an actual selection of files, the signal will pass an
&gt; +     * instance of the #WebKitFileChooserRequest in the @request
&gt; +     * argument.

I miss a comment about the lifecycle of the FileChooserRequest object and how to handle this async. If I want to handle this signal asynchronously, do I ref the request, return TRUE and then call its select_files() method when I have the chosen files? If that&apos;s the case (and it seems to be from my quick inspection of the default handler), then I think the API looks good, but having this spelled out here would help =).

&gt; Source/WebKit/gtk/webkit/webkitwebview.h:170
&gt; +    gboolean                   (* run_file_chooser)       (WebKitWebView            *web_view,
&gt; +                                                           WebKitFileChooserRequest *request);

Should go at the bottom and consume the padding.

&gt; Source/WebKit/gtk/webkit/webkitwebviewprivate.h:140
&gt; +void webkit_web_view_run_file_chooser_request(WebKitWebView*, WebKitFileChooserRequest*);

This function should use camelCase like the other internal non-public ones.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>649399</commentid>
    <comment_count>25</comment_count>
    <who name="Daniel Drake">dsd</who>
    <bug_when>2012-06-14 12:58:29 -0700</bug_when>
    <thetext>Thanks for the review. Yes, I&apos;ll post a new patch.

(In reply to comment #24)
&gt; &gt; Source/WebKit/gtk/webkit/webkitwebview.cpp:2605
&gt; &gt; +     * This signal is emitted when the user interacts with a &amp;lt;input
&gt; &gt; +     * type=&apos;file&apos; /&amp;gt; HTML element, requesting from WebKit to show
&gt; &gt; +     * a dialog to select one or more files to be uploaded. To let the
&gt; &gt; +     * application know the details of the file chooser, as well as to
&gt; &gt; +     * allow the client application to either cancel the request or
&gt; &gt; +     * perform an actual selection of files, the signal will pass an
&gt; &gt; +     * instance of the #WebKitFileChooserRequest in the @request
&gt; &gt; +     * argument.
&gt; 
&gt; I miss a comment about the lifecycle of the FileChooserRequest object and how to handle this async. If I want to handle this signal asynchronously, do I ref the request, return TRUE and then call its select_files() method when I have the chosen files? If that&apos;s the case (and it seems to be from my quick inspection of the default handler), then I think the API looks good, but having this spelled out here would help =).

This was just a copy/paste from the WebKit2 gobject API. Mario, can you help me answer this? Is Gustavo&apos;s interpretation correct?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>649971</commentid>
    <comment_count>26</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-06-15 00:34:24 -0700</bug_when>
    <thetext>(In reply to comment #25)
&gt; [...]
&gt; &gt; I miss a comment about the lifecycle of the FileChooserRequest object and how 
&gt; &gt; to handle this async. If I want to handle this signal asynchronously, do I 
&gt; &gt; ref the request, return TRUE and then call its select_files() method when I 
&gt; &gt; have the chosen files? If that&apos;s the case (and it seems to be from my quick 
&gt; &gt; inspection of the default handler), then I think the API looks good, but 
&gt; &gt; having this spelled out here would help =).
&gt; 
&gt; This was just a copy/paste from the WebKit2 gobject API. Mario, can you help
&gt; me answer this? Is Gustavo&apos;s interpretation correct?

I think Gustavo means adding an extra comment to the run-file-chooser signal, in a similar fashion to what it&apos;s done for geolocation-policy-decision-requested:

    /**
     * WebKitWebView::geolocation-policy-decision-requested:
     * @web_view: the object on which the signal is emitted
     * @frame: the frame that requests permission
     * @policy_decision: a WebKitGeolocationPolicyDecision
     *
     * This signal is emitted when a @frame wants to obtain the user&apos;s
     * location. The decision can be made asynchronously, but you must
     * call g_object_ref() the @policy_decision, and return %TRUE if
     * you are going to handle the request. To actually make the
     * decision you need to call webkit_geolocation_policy_allow() or
     * webkit_geolocation_policy_deny() on @policy_decision.
     *
     * Since: 1.1.23
     */

Is this my interpretation correct, Gustavo?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>650461</commentid>
    <comment_count>27</comment_count>
      <attachid>147888</attachid>
    <who name="Daniel Drake">dsd</who>
    <bug_when>2012-06-15 13:39:48 -0700</bug_when>
    <thetext>Created attachment 147888
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>653590</commentid>
    <comment_count>28</comment_count>
      <attachid>147888</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2012-06-20 10:16:15 -0700</bug_when>
    <thetext>Comment on attachment 147888
Patch

Looks good, we forgot the Since tags though, will land when a new patch carrying them is uploaded.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>653918</commentid>
    <comment_count>29</comment_count>
      <attachid>148661</attachid>
    <who name="Daniel Drake">dsd</who>
    <bug_when>2012-06-20 15:02:25 -0700</bug_when>
    <thetext>Created attachment 148661
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>654393</commentid>
    <comment_count>30</comment_count>
      <attachid>148661</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-06-21 05:08:53 -0700</bug_when>
    <thetext>Comment on attachment 148661
Patch

Clearing flags on attachment: 148661

Committed r120918: &lt;http://trac.webkit.org/changeset/120918&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>654394</commentid>
    <comment_count>31</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-06-21 05:09:00 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>143594</attachid>
            <date>2012-05-23 10:41:57 -0700</date>
            <delta_ts>2012-05-24 15:49:36 -0700</delta_ts>
            <desc>Work in progress</desc>
            <filename>0001-run-file-chooser.patch</filename>
            <type>text/plain</type>
            <size>35072</size>
            <attacher name="Daniel Drake">dsd</attacher>
            
              <data encoding="base64">RnJvbSA1NmY5YWVkZWVjZjg5ZmNjNTY4Y2Y0YzYwOWY0NjE4OWE3YWRmODQ0IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBEYW5pZWwgRHJha2UgPGRzZEBsYXB0b3Aub3JnPgpEYXRlOiBU
dWUsIDIyIE1heSAyMDEyIDE4OjE5OjE3IC0wNDAwClN1YmplY3Q6IFtQQVRDSF0gcnVuLWZpbGUt
Y2hvb3NlcgoKLS0tCiBTb3VyY2UvV2ViS2l0L2d0ay9HTlVtYWtlZmlsZS5hbSAgICAgICAgICAg
ICAgICAgICB8ICAgIDQgKwogLi4uL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xp
ZW50R3RrLmNwcCAgfCAgIDM3ICstLQogU291cmNlL1dlYktpdC9ndGsvZG9jcy93ZWJraXRndGst
ZG9jcy5zZ21sICAgICAgICAgfCAgICAxICsKIFNvdXJjZS9XZWJLaXQvZ3RrL2RvY3Mvd2Via2l0
Z3RrLXNlY3Rpb25zLnR4dCAgICAgIHwgICAyMSArKwogU291cmNlL1dlYktpdC9ndGsvZG9jcy93
ZWJraXRndGsudHlwZXMgICAgICAgICAgICAgfCAgICAxICsKIC4uLi9XZWJLaXQvZ3RrL3dlYmtp
dC93ZWJraXRmaWxlY2hvb3NlcnJlcXVlc3QuY3BwIHwgIDM2MSArKysrKysrKysrKysrKysrKysr
KwogLi4uL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGZpbGVjaG9vc2VycmVxdWVzdC5oICAgfCAg
IDc0ICsrKysKIC4uLi9ndGsvd2Via2l0L3dlYmtpdGZpbGVjaG9vc2VycmVxdWVzdHByaXZhdGUu
aCAgIHwgICAzMCArKwogU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3Bw
ICAgICAgICAgfCAgIDgwICsrKysrCiBTb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vi
dmlldy5oICAgICAgICAgICB8ICAgIDMgKwogU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtp
dHdlYnZpZXdwcml2YXRlLmggICAgfCAgICAyICsKIDExIGZpbGVzIGNoYW5nZWQsIDU4MCBpbnNl
cnRpb25zKCspLCAzNCBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2Vi
S2l0L2d0ay93ZWJraXQvd2Via2l0ZmlsZWNob29zZXJyZXF1ZXN0LmNwcAogY3JlYXRlIG1vZGUg
MTAwNjQ0IFNvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRmaWxlY2hvb3NlcnJlcXVlc3Qu
aAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRmaWxl
Y2hvb3NlcnJlcXVlc3Rwcml2YXRlLmgKCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay9H
TlVtYWtlZmlsZS5hbSBiL1NvdXJjZS9XZWJLaXQvZ3RrL0dOVW1ha2VmaWxlLmFtCmluZGV4IDJk
NWFkMGEuLmZmMjhkZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL0dOVW1ha2VmaWxl
LmFtCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL0dOVW1ha2VmaWxlLmFtCkBAIC0xMTQsNiArMTE0
LDcgQEAgd2Via2l0Z3RrX3N0YXRpY19oX2FwaSArPSBcCiAJJChzcmNkaXIpL1NvdXJjZS9XZWJL
aXQvZ3RrL3dlYmtpdC93ZWJraXRkb3dubG9hZC5oIFwKIAkkKHNyY2RpcikvU291cmNlL1dlYktp
dC9ndGsvd2Via2l0L3dlYmtpdGVycm9yLmggXAogCSQoc3JjZGlyKS9Tb3VyY2UvV2ViS2l0L2d0
ay93ZWJraXQvd2Via2l0ZmF2aWNvbmRhdGFiYXNlLmggXAorCSQoc3JjZGlyKS9Tb3VyY2UvV2Vi
S2l0L2d0ay93ZWJraXQvd2Via2l0ZmlsZWNob29zZXJyZXF1ZXN0LmggXAogCSQoc3JjZGlyKS9T
b3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0Z2VvbG9jYXRpb25wb2xpY3lkZWNpc2lvbi5o
IFwKIAkkKHNyY2RpcikvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGdsb2JhbHMuaCBc
CiAJJChzcmNkaXIpL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRoaXR0ZXN0cmVzdWx0
LmggXApAQCAtMjIwLDYgKzIyMSw5IEBAIHdlYmtpdGd0a19zb3VyY2VzICs9IFwKIAlTb3VyY2Uv
V2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZXJyb3IuY3BwIFwKIAlTb3VyY2UvV2ViS2l0L2d0ay93
ZWJraXQvd2Via2l0ZmF2aWNvbmRhdGFiYXNlLmNwcCBcCiAJU291cmNlL1dlYktpdC9ndGsvd2Vi
a2l0L3dlYmtpdGZhdmljb25kYXRhYmFzZXByaXZhdGUuaCBcCisJU291cmNlL1dlYktpdC9ndGsv
d2Via2l0L3dlYmtpdGZpbGVjaG9vc2VycmVxdWVzdC5jcHAgXAorCVNvdXJjZS9XZWJLaXQvZ3Rr
L3dlYmtpdC93ZWJraXRmaWxlY2hvb3NlcnJlcXVlc3QuaCBcCisJU291cmNlL1dlYktpdC9ndGsv
d2Via2l0L3dlYmtpdGZpbGVjaG9vc2VycmVxdWVzdHByaXZhdGUuaCBcCiAJU291cmNlL1dlYktp
dC9ndGsvd2Via2l0L3dlYmtpdGdlb2xvY2F0aW9ucG9saWN5ZGVjaXNpb24uY3BwIFwKIAlTb3Vy
Y2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0Z2VvbG9jYXRpb25wb2xpY3lkZWNpc2lvbnByaXZh
dGUuaCBcCiAJU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGdsb2JhbHMuY3BwIFwKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0
ay5jcHAgYi9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRHdGsu
Y3BwCmluZGV4IDY1NWJmNzguLjNkYzUwMTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZ3Rr
L1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0ay5jcHAKKysrIGIvU291cmNlL1dlYktpdC9n
dGsvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmNwcApAQCAtNTUsNiArNTUsNyBAQAog
I2luY2x1ZGUgIldlYktpdERPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJXZWJLaXRET01IVE1MRWxl
bWVudFByaXZhdGUuaCIKICNpbmNsdWRlICJXaW5kb3dGZWF0dXJlcy5oIgorI2luY2x1ZGUgIndl
YmtpdGZpbGVjaG9vc2VycmVxdWVzdHByaXZhdGUuaCIKICNpbmNsdWRlICJ3ZWJraXRnZW9sb2Nh
dGlvbnBvbGljeWRlY2lzaW9uLmgiCiAjaW5jbHVkZSAid2Via2l0Z2VvbG9jYXRpb25wb2xpY3lk
ZWNpc2lvbnByaXZhdGUuaCIKICNpbmNsdWRlICJ3ZWJraXRuZXR3b3JrcmVxdWVzdC5oIgpAQCAt
ODE0LDQwICs4MTUsOCBAQCB2b2lkIENocm9tZUNsaWVudDo6cmVhY2hlZEFwcGxpY2F0aW9uQ2Fj
aGVPcmlnaW5RdW90YShTZWN1cml0eU9yaWdpbiosIGludDY0X3QpCiAKIHZvaWQgQ2hyb21lQ2xp
ZW50OjpydW5PcGVuUGFuZWwoRnJhbWUqLCBQYXNzUmVmUHRyPEZpbGVDaG9vc2VyPiBwcnBGaWxl
Q2hvb3NlcikKIHsKLSAgICBSZWZQdHI8RmlsZUNob29zZXI+IGNob29zZXIgPSBwcnBGaWxlQ2hv
b3NlcjsKLQotICAgIEd0a1dpZGdldCogdG9wbGV2ZWwgPSBndGtfd2lkZ2V0X2dldF90b3BsZXZl
bChHVEtfV0lER0VUKG1fd2ViVmlldykpOwotICAgIGlmICghd2lkZ2V0SXNPbnNjcmVlblRvcGxl
dmVsV2luZG93KHRvcGxldmVsKSkKLSAgICAgICAgdG9wbGV2ZWwgPSAwOwotCi0gICAgR3RrV2lk
Z2V0KiBkaWFsb2cgPSBndGtfZmlsZV9jaG9vc2VyX2RpYWxvZ19uZXcoXygiVXBsb2FkIEZpbGUi
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
b3BsZXZlbCA/IEdUS19XSU5ET1codG9wbGV2ZWwpIDogMCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHVEtfRklMRV9DSE9PU0VSX0FDVElPTl9P
UEVOLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdUS19TVE9DS19DQU5DRUwsIEdUS19SRVNQT05TRV9DQU5DRUwsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1RLX1NUT0NLX09QRU4sIEdUS19S
RVNQT05TRV9BQ0NFUFQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgTlVMTCk7Ci0KLSAgICBndGtfZmlsZV9jaG9vc2VyX3NldF9zZWxlY3RfbXVs
dGlwbGUoR1RLX0ZJTEVfQ0hPT1NFUihkaWFsb2cpLCBjaG9vc2VyLT5zZXR0aW5ncygpLmFsbG93
c011bHRpcGxlRmlsZXMpOwotCi0gICAgaWYgKGd0a19kaWFsb2dfcnVuKEdUS19ESUFMT0coZGlh
bG9nKSkgPT0gR1RLX1JFU1BPTlNFX0FDQ0VQVCkgewotICAgICAgICBpZiAoZ3RrX2ZpbGVfY2hv
b3Nlcl9nZXRfc2VsZWN0X211bHRpcGxlKEdUS19GSUxFX0NIT09TRVIoZGlhbG9nKSkpIHsKLSAg
ICAgICAgICAgIEdPd25QdHI8R1NMaXN0PiBmaWxlbmFtZXMoZ3RrX2ZpbGVfY2hvb3Nlcl9nZXRf
ZmlsZW5hbWVzKEdUS19GSUxFX0NIT09TRVIoZGlhbG9nKSkpOwotICAgICAgICAgICAgVmVjdG9y
PFN0cmluZz4gbmFtZXM7Ci0gICAgICAgICAgICBmb3IgKEdTTGlzdCogaXRlbSA9IGZpbGVuYW1l
cy5nZXQoKSA7IGl0ZW0gOyBpdGVtID0gaXRlbS0+bmV4dCkgewotICAgICAgICAgICAgICAgIGlm
ICghaXRlbS0+ZGF0YSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAg
ICAgICAgbmFtZXMuYXBwZW5kKGZpbGVuYW1lVG9TdHJpbmcoc3RhdGljX2Nhc3Q8Y2hhcio+KGl0
ZW0tPmRhdGEpKSk7Ci0gICAgICAgICAgICAgICAgZ19mcmVlKGl0ZW0tPmRhdGEpOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgY2hvb3Nlci0+Y2hvb3NlRmlsZXMobmFtZXMpOwotICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgZ2NoYXIqIGZpbGVuYW1lID0gZ3RrX2ZpbGVfY2hvb3Nl
cl9nZXRfZmlsZW5hbWUoR1RLX0ZJTEVfQ0hPT1NFUihkaWFsb2cpKTsKLSAgICAgICAgICAgIGlm
IChmaWxlbmFtZSkKLSAgICAgICAgICAgICAgICBjaG9vc2VyLT5jaG9vc2VGaWxlKGZpbGVuYW1l
VG9TdHJpbmcoZmlsZW5hbWUpKTsKLSAgICAgICAgICAgIGdfZnJlZShmaWxlbmFtZSk7Ci0gICAg
ICAgIH0KLSAgICB9Ci0gICAgZ3RrX3dpZGdldF9kZXN0cm95KGRpYWxvZyk7CisgICAgR1JlZlB0
cjxXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3Q+IHJlcXVlc3QgPSBhZG9wdEdSZWYod2Via2l0X2Zp
bGVfY2hvb3Nlcl9yZXF1ZXN0X2NyZWF0ZShwcnBGaWxlQ2hvb3NlcikpOworICAgIHdlYmtpdF93
ZWJfdmlld19ydW5fZmlsZV9jaG9vc2VyX3JlcXVlc3QobV93ZWJWaWV3LCByZXF1ZXN0LmdldCgp
KTsKIH0KIAogdm9pZCBDaHJvbWVDbGllbnQ6OmxvYWRJY29uRm9yRmlsZXMoY29uc3QgVmVjdG9y
PFdURjo6U3RyaW5nPiYgZmlsZW5hbWVzLCBXZWJDb3JlOjpGaWxlSWNvbkxvYWRlciogbG9hZGVy
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvZG9jcy93ZWJraXRndGstZG9jcy5zZ21s
IGIvU291cmNlL1dlYktpdC9ndGsvZG9jcy93ZWJraXRndGstZG9jcy5zZ21sCmluZGV4IGI0ZWIy
NmQuLjcyMTA2NTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL2RvY3Mvd2Via2l0Z3Rr
LWRvY3Muc2dtbAorKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay9kb2NzL3dlYmtpdGd0ay1kb2NzLnNn
bWwKQEAgLTQxLDYgKzQxLDcgQEAKICAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvd2Via2l0aWNv
bmRhdGFiYXNlLnhtbCIvPgogICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC93ZWJraXRzcGVsbGNo
ZWNrZXIueG1sIi8+CiAgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL3dlYmtpdGZhdmljb25kYXRh
YmFzZS54bWwiLz4KKyAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvd2Via2l0ZmlsZWNob29zZXJy
ZXF1ZXN0LnhtbCIvPgogICA8L2NoYXB0ZXI+CiAKICAgPGNoYXB0ZXI+CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2d0ay9kb2NzL3dlYmtpdGd0ay1zZWN0aW9ucy50eHQgYi9Tb3VyY2UvV2Vi
S2l0L2d0ay9kb2NzL3dlYmtpdGd0ay1zZWN0aW9ucy50eHQKaW5kZXggYzk3NDg5Yi4uM2NjN2U0
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvZG9jcy93ZWJraXRndGstc2VjdGlvbnMu
dHh0CisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL2RvY3Mvd2Via2l0Z3RrLXNlY3Rpb25zLnR4dApA
QCAtNzAzLDYgKzcwMywyNyBAQCBXZWJLaXRGYXZpY29uRGF0YWJhc2VQcml2YXRlCiA8L1NFQ1RJ
T04+CiAKIDxTRUNUSU9OPgorPEZJTEU+d2Via2l0ZmlsZWNob29zZXJyZXF1ZXN0PC9GSUxFPgor
V2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0Cit3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0
X3NlbGVjdF9tdWx0aXBsZQord2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X3NlbGVjdF9maWxl
cword2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2NhbmNlbAorCis8U1VCU0VDVElPTiBTdGFu
ZGFyZD4KK1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdENsYXNzCitXRUJLSVRfVFlQRV9GSUxFX0NI
T09TRVJfUkVRVUVTVAorV0VCS0lUX0ZJTEVfQ0hPT1NFUl9SRVFVRVNUCitXRUJLSVRfSVNfRklM
RV9DSE9PU0VSX1JFUVVFU1QKK1dFQktJVF9GSUxFX0NIT09TRVJfUkVRVUVTVF9DTEFTUworV0VC
S0lUX0lTX0ZJTEVfQ0hPT1NFUl9SRVFVRVNUX0NMQVNTCitXRUJLSVRfRklMRV9DSE9PU0VSX1JF
UVVFU1RfR0VUX0NMQVNTCisKKzxTVUJTRUNUSU9OIFByaXZhdGU+CitXZWJLaXRGaWxlQ2hvb3Nl
clJlcXVlc3RQcml2YXRlCit3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X3R5cGUKKzwv
U0VDVElPTj4KKworPFNFQ1RJT04+CiA8RklMRT53ZWJraXRkZWZpbmVzPC9GSUxFPgogV0VCS0lU
X0FQSQogV0VCS0lUR1RLX0FQSV9WRVJTSU9OCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0
ay9kb2NzL3dlYmtpdGd0ay50eXBlcyBiL1NvdXJjZS9XZWJLaXQvZ3RrL2RvY3Mvd2Via2l0Z3Rr
LnR5cGVzCmluZGV4IDJiZTFhOGMuLjgwNDliNWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
Z3RrL2RvY3Mvd2Via2l0Z3RrLnR5cGVzCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL2RvY3Mvd2Vi
a2l0Z3RrLnR5cGVzCkBAIC0xLDYgKzEsNyBAQAogI2luY2x1ZGUgPHdlYmtpdC93ZWJraXQuaD4K
IHdlYmtpdF9kb3dubG9hZF9nZXRfdHlwZQogd2Via2l0X2Zhdmljb25fZGF0YWJhc2VfZ2V0X3R5
cGUKK3dlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfdHlwZQogd2Via2l0X2dlb2xvY2F0
aW9uX3BvbGljeV9kZWNpc2lvbl9nZXRfdHlwZQogd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9nZXRf
dHlwZQogd2Via2l0X2ljb25fZGF0YWJhc2VfZ2V0X3R5cGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRmaWxlY2hvb3NlcnJlcXVlc3QuY3BwIGIvU291cmNlL1dl
YktpdC9ndGsvd2Via2l0L3dlYmtpdGZpbGVjaG9vc2VycmVxdWVzdC5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWUyOWE5YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRmaWxlY2hvb3NlcnJlcXVlc3QuY3BwCkBAIC0wLDAg
KzEsMzYxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJ3ZWJraXRmaWxlY2hvb3NlcnJlcXVlc3QuaCIKKworI2lu
Y2x1ZGUgIkZpbGVDaG9vc2VyLmgiCisjaW5jbHVkZSAiRmlsZVN5c3RlbS5oIgorI2luY2x1ZGUg
IndlYmtpdGZpbGVjaG9vc2VycmVxdWVzdHByaXZhdGUuaCIKKyNpbmNsdWRlICJ3ZWJraXRnbG9i
YWxzcHJpdmF0ZS5oIgorI2luY2x1ZGUgPGdsaWIvZ2kxOG4tbGliLmg+CisjaW5jbHVkZSA8d3Rm
L2dvYmplY3QvR093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KKyNp
bmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwor
CisvKioKKyAqIFNFQ1RJT046IFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdAorICogQFNob3J0X2Rl
c2NyaXB0aW9uOiBBIHJlcXVlc3QgdG8gb3BlbiBhIGZpbGUgY2hvb3NlcgorICogQFRpdGxlOiBX
ZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QKKyAqIEBTZWVfYWxzbzogI1dlYktpdFdlYlZpZXcKKyAq
CisgKiBXaGVuZXZlciB0aGUgdXNlciBpbnRlcmFjdHMgd2l0aCBhbiAmbHQ7aW5wdXQgdHlwZT0n
ZmlsZScgLyZndDsKKyAqIEhUTUwgZWxlbWVudCwgV2ViS2l0IHdpbGwgbmVlZCB0byBzaG93IGEg
ZGlhbG9nIHRvIGNob29zZSBvbmUgb3IKKyAqIG1vcmUgZmlsZXMgdG8gYmUgdXBsb2FkZWQgdG8g
dGhlIHNlcnZlciBhbG9uZyB3aXRoIHRoZSByZXN0IG9mIHRoZQorICogZm9ybSBkYXRhLiBGb3Ig
dGhhdCB0byBoYXBwZW4gaW4gYSBnZW5lcmFsIHdheSwgaW5zdGVhZCBvZiBqdXN0CisgKiBvcGVu
aW5nIGEgI0d0a0ZpbGVDaG9vc2VyRGlhbG9nICh3aGljaCBtaWdodCBiZSBub3QgZGVzaXJhYmxl
IGluCisgKiBzb21lIGNhc2VzLCB3aGljaCBjb3VsZCBwcmVmZXIgdG8gdXNlIHRoZWlyIG93biBm
aWxlIGNob29zZXIKKyAqIGRpYWxvZyksIFdlYktpdCB3aWxsIGZpcmUgdGhlICNXZWJLaXRXZWJW
aWV3OjpydW4tZmlsZS1jaG9vc2VyCisgKiBzaWduYWwgd2l0aCBhICNXZWJLaXRGaWxlQ2hvb3Nl
clJlcXVlc3Qgb2JqZWN0LCB3aGljaCB3aWxsIGFsbG93CisgKiB0aGUgY2xpZW50IGFwcGxpY2F0
aW9uIHRvIHNwZWNpZnkgdGhlIGZpbGVzIHRvIGJlIHNlbGVjdGVkLCB0bworICogaW5zcGVjdCB0
aGUgZGV0YWlscyBvZiB0aGUgcmVxdWVzdCAoZS5nLiBpZiBtdWx0aXBsZSBzZWxlY3Rpb24KKyAq
IHNob3VsZCBiZSBhbGxvd2VkKSBhbmQgdG8gY2FuY2VsIHRoZSByZXF1ZXN0LCBpbiBjYXNlIG5v
dGhpbmcgd2FzCisgKiBzZWxlY3RlZC4KKyAqCisgKiBJbiBjYXNlIHRoZSBjbGllbnQgYXBwbGlj
YXRpb24gZG9lcyBub3Qgd2lzaCB0byBoYW5kbGUgdGhpcyBzaWduYWwsCisgKiBXZWJLaXQgd2ls
bCBwcm92aWRlIGEgZGVmYXVsdCBoYW5kbGVyIHdoaWNoIHdpbGwgYXN5bmNocm9ub3VzbHkgcnVu
CisgKiBhIHJlZ3VsYXIgI0d0a0ZpbGVDaG9vc2VyRGlhbG9nIGZvciB0aGUgdXNlciB0byBpbnRl
cmFjdCB3aXRoLgorICovCitHX0RFRklORV9UWVBFKFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCwg
d2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0LCBHX1RZUEVfT0JKRUNUKQorCitzdHJ1Y3QgX1dl
YktpdEZpbGVDaG9vc2VyUmVxdWVzdFByaXZhdGUgeworICAgIFJlZlB0cjxGaWxlQ2hvb3Nlcj4g
Y2hvb3NlcjsKKyAgICBHUmVmUHRyPEd0a0ZpbGVGaWx0ZXI+IGZpbHRlcjsKKyAgICBHUmVmUHRy
PEdQdHJBcnJheT4gbWltZVR5cGVzOworICAgIEdSZWZQdHI8R1B0ckFycmF5PiBzZWxlY3RlZEZp
bGVzOworfTsKKworZW51bSB7CisgICAgUFJPUF8wLAorICAgIFBST1BfRklMVEVSLAorICAgIFBS
T1BfTUlNRV9UWVBFUywKKyAgICBQUk9QX1NFTEVDVF9NVUxUSVBMRSwKKyAgICBQUk9QX1NFTEVD
VEVEX0ZJTEVTLAorfTsKKworc3RhdGljIHZvaWQgd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0
X2luaXQoV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0KiByZXF1ZXN0KQoreworICAgIHJlcXVlc3Qt
PnByaXYgPSBHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUocmVxdWVzdCwgV0VCS0lUX1RZUEVf
RklMRV9DSE9PU0VSX1JFUVVFU1QsIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdFByaXZhdGUpOwor
ICAgIG5ldyAocmVxdWVzdC0+cHJpdikgV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0UHJpdmF0ZSgp
OworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZmluYWxpemUo
R09iamVjdCogb2JqZWN0KQoreworICAgIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCogcmVxdWVz
dCA9IFdFQktJVF9GSUxFX0NIT09TRVJfUkVRVUVTVChvYmplY3QpOworCisgICAgcmVxdWVzdC0+
cHJpdi0+fldlYktpdEZpbGVDaG9vc2VyUmVxdWVzdFByaXZhdGUoKTsKKyAgICBHX09CSkVDVF9D
TEFTUyh3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfcGFyZW50X2NsYXNzKS0+ZmluYWxpemUo
b2JqZWN0KTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dl
dF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BJZCwgR1ZhbHVlKiB2YWx1ZSwg
R1BhcmFtU3BlYyogcGFyYW1TcGVjKQoreworICAgIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCog
cmVxdWVzdCA9IFdFQktJVF9GSUxFX0NIT09TRVJfUkVRVUVTVChvYmplY3QpOworICAgIHN3aXRj
aCAocHJvcElkKSB7CisgICAgY2FzZSBQUk9QX0ZJTFRFUjoKKyAgICAgICAgZ192YWx1ZV9zZXRf
b2JqZWN0KHZhbHVlLCB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X21pbWVfdHlwZXNf
ZmlsdGVyKHJlcXVlc3QpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX01JTUVfVFlQ
RVM6CisgICAgICAgIGdfdmFsdWVfc2V0X2JveGVkKHZhbHVlLCB3ZWJraXRfZmlsZV9jaG9vc2Vy
X3JlcXVlc3RfZ2V0X21pbWVfdHlwZXMocmVxdWVzdCkpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIFBST1BfU0VMRUNUX01VTFRJUExFOgorICAgICAgICBnX3ZhbHVlX3NldF9ib29sZWFuKHZh
bHVlLCB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X3NlbGVjdF9tdWx0aXBsZShyZXF1
ZXN0KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9TRUxFQ1RFRF9GSUxFUzoKKyAg
ICAgICAgZ192YWx1ZV9zZXRfYm94ZWQodmFsdWUsIHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVz
dF9nZXRfc2VsZWN0ZWRfZmlsZXMocmVxdWVzdCkpOworICAgICAgICBicmVhazsKKyAgICBkZWZh
dWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBw
cm9wSWQsIHBhcmFtU3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIHZv
aWQgd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2NsYXNzX2luaXQoV2ViS2l0RmlsZUNob29z
ZXJSZXF1ZXN0Q2xhc3MqIHJlcXVlc3RDbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3MqIG9iamVj
dENsYXNzID0gR19PQkpFQ1RfQ0xBU1MocmVxdWVzdENsYXNzKTsKKyAgICBvYmplY3RDbGFzcy0+
ZmluYWxpemUgPSB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZmluYWxpemU7CisgICAgb2Jq
ZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRf
cHJvcGVydHk7CisgICAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlKHJlcXVlc3RDbGFzcywgc2l6
ZW9mKFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdFByaXZhdGUpKTsKKworICAgIC8qKgorICAgICAq
IFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdDpmaWx0ZXI6CisgICAgICoKKyAgICAgKiBUaGUgZmls
dGVyIGN1cnJlbnRseSBhc3NvY2lhdGVkIHdpdGggdGhlIHJlcXVlc3QuIFNlZQorICAgICAqIHdl
YmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfbWltZV90eXBlc19maWx0ZXIoKSBmb3IgbW9y
ZQorICAgICAqIGRldGFpbHMuCisgICAgICovCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9w
cm9wZXJ0eShvYmplY3RDbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFBST1BfRklMVEVSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19wYXJh
bV9zcGVjX29iamVjdCgiZmlsdGVyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF8oIk1JTUUgdHlwZXMgZmlsdGVyIiksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJUaGUgZmlsdGVy
IGN1cnJlbnRseSBhc3NvY2lhdGVkIHdpdGggdGhlIHJlcXVlc3QiKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdUS19UWVBFX0ZJTEVfRklM
VEVSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisgICAgLyoqCisgICAgICogV2ViS2l0RmlsZUNo
b29zZXJSZXF1ZXN0Om1pbWUtdHlwZXM6CisgICAgICoKKyAgICAgKiBBICVOVUxMLXRlcm1pbmF0
ZWQgYXJyYXkgb2Ygc3RyaW5ncyBjb250YWluaW5nIHRoZSBsaXN0IG9mIE1JTUUKKyAgICAgKiB0
eXBlcyB0aGUgZmlsZSBjaG9vc2VyIGRpYWxvZyBzaG91bGQgaGFuZGxlLiBTZWUKKyAgICAgKiB3
ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X21pbWVfdHlwZXMoKSBmb3IgbW9yZSBkZXRh
aWxzLgorICAgICAqLworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkob2JqZWN0
Q2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9QX01JTUVfVFlQ
RVMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3BhcmFtX3NwZWNfYm94
ZWQoIm1pbWUtdHlwZXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXygiTUlNRSB0eXBlcyIpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiVGhlIGxpc3Qgb2YgTUlNRSB0eXBlcyBh
c3NvY2lhdGVkIHdpdGggdGhlIHJlcXVlc3QiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdfVFlQRV9TVFJWLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURB
QkxFKSk7ICAgIC8qKgorICAgICAqIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdDpzZWxlY3QtbXVs
dGlwbGU6CisgICAgICoKKyAgICAgKiBXaGV0aGVyIHRoZSBmaWxlIGNob29zZXIgc2hvdWxkIGFs
bG93IHNlbGVjdGluZyBtdWx0aXBsZQorICAgICAqIGZpbGVzLiBTZWUKKyAgICAgKiB3ZWJraXRf
ZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X3NlbGVjdF9tdWx0aXBsZSgpIGZvcgorICAgICAqIG1v
cmUgZGV0YWlscy4KKyAgICAgKi8KKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5
KG9iamVjdENsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPUF9T
RUxFQ1RfTVVMVElQTEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3Bh
cmFtX3NwZWNfYm9vbGVhbigic2VsZWN0LW11bHRpcGxlIiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJTZWxlY3QgbXVsdGlwbGUgZmls
ZXMiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfKCJXaGV0aGVyIHRoZSBmaWxlIGNob29zZXIgc2hvdWxkIGFsbG93IHNlbGVjdGluZyBt
dWx0aXBsZSBmaWxlcyIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEZBTFNFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworICAgIC8qKgor
ICAgICAqIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdDpzZWxlY3RlZC1maWxlczoKKyAgICAgKgor
ICAgICAqIEEgJU5VTEwtdGVybWluYXRlZCBhcnJheSBvZiBzdHJpbmdzIGNvbnRhaW5pbmcgdGhl
IGxpc3Qgb2YKKyAgICAgKiBzZWxlY3RlZCBmaWxlcyBhc3NvY2lhdGVkIHRvIHRoZSBjdXJyZW50
IHJlcXVlc3QuIFNlZQorICAgICAqIHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfc2Vs
ZWN0ZWRfZmlsZXMoKSBmb3IgbW9yZSBkZXRhaWxzLgorICAgICAqLworICAgIGdfb2JqZWN0X2Ns
YXNzX2luc3RhbGxfcHJvcGVydHkob2JqZWN0Q2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBQUk9QX1NFTEVDVEVEX0ZJTEVTLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVjX2JveGVkKCJzZWxlY3RlZC1maWxlcyIsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJTZWxl
Y3RlZCBmaWxlcyIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXygiVGhlIGxpc3Qgb2Ygc2VsZWN0ZWQgZmlsZXMgYXNzb2NpYXRlZCB3aXRo
IHRoZSByZXF1ZXN0IiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBHX1RZUEVfU1RSViwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworfQorCitX
ZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QqIHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9jcmVh
dGUoUGFzc1JlZlB0cjxGaWxlQ2hvb3Nlcj4gY2hvb3NlcikKK3sKKyAgICBXZWJLaXRGaWxlQ2hv
b3NlclJlcXVlc3QqIHJlcXVlc3QgPSBXRUJLSVRfRklMRV9DSE9PU0VSX1JFUVVFU1QoZ19vYmpl
Y3RfbmV3KFdFQktJVF9UWVBFX0ZJTEVfQ0hPT1NFUl9SRVFVRVNULCBOVUxMKSk7CisgICAgcmVx
dWVzdC0+cHJpdi0+Y2hvb3NlciA9IGNob29zZXI7CisgICAgcmV0dXJuIHJlcXVlc3Q7Cit9CisK
Ky8qKgorICogd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9taW1lX3R5cGVzOgorICog
QHJlcXVlc3Q6IGEgI1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdAorICoKKyAqIEdldCB0aGUgbGlz
dCBvZiBNSU1FIHR5cGVzIHRoZSBmaWxlIGNob29zZXIgZGlhbG9nIHNob3VsZCBoYW5kbGUsCisg
KiBpbiB0aGUgZm9ybWF0IHNwZWNpZmllZCBpbiBSRkMgMjA0NiBmb3IgIm1lZGlhIHR5cGVzIi4g
SXRzIGNvbnRlbnRzCisgKiBkZXBlbmQgb24gdGhlIHZhbHVlIG9mIHRoZSAnYWNjZXB0JyBhdHRy
aWJ1dGUgZm9yIEhUTUwgaW5wdXQKKyAqIGVsZW1lbnRzLiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBu
b3JtYWxseSBiZSBjYWxsZWQgYmVmb3JlIHByZXNlbnRpbmcKKyAqIHRoZSBmaWxlIGNob29zZXIg
ZGlhbG9nIHRvIHRoZSB1c2VyLCB0byBkZWNpZGUgd2hldGhlciB0byBhbGxvdyB0aGUKKyAqIHVz
ZXIgdG8gc2VsZWN0IG11bHRpcGxlIGZpbGVzIGF0IG9uY2Ugb3Igb25seSBvbmUuCisgKgorICog
UmV0dXJuczogKGFycmF5IHplcm8tdGVybWluYXRlZD0xKSAodHJhbnNmZXIgbm9uZSk6IGEKKyAq
ICVOVUxMLXRlcm1pbmF0ZWQgYXJyYXkgb2Ygc3RyaW5ncyBpZiBhIGxpc3Qgb2YgYWNjZXB0ZWQg
TUlNRSB0eXBlcworICogaXMgZGVmaW5lZCBvciAlTlVMTCBvdGhlcndpc2UsIG1lYW5pbmcgdGhh
dCBhbnkgTUlNRSB0eXBlIHNob3VsZCBiZQorICogYWNjZXB0ZWQuIFRoaXMgYXJyYXkgYW5kIGl0
cyBjb250ZW50cyBhcmUgb3duZWQgYnkgV2ViS2l0R1RLKyBhbmQKKyAqIHNob3VsZCBub3QgYmUg
bW9kaWZpZWQgb3IgZnJlZWQuCisgKi8KK2NvbnN0IGdjaGFyKiBjb25zdCogd2Via2l0X2ZpbGVf
Y2hvb3Nlcl9yZXF1ZXN0X2dldF9taW1lX3R5cGVzKFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCog
cmVxdWVzdCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfRklMRV9DSE9P
U0VSX1JFUVVFU1QocmVxdWVzdCksIDApOworICAgIGlmIChyZXF1ZXN0LT5wcml2LT5taW1lVHlw
ZXMpCisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGdjaGFyKio+KHJlcXVlc3QtPnBy
aXYtPm1pbWVUeXBlcy0+cGRhdGEpOworCisgICAgRmlsZUNob29zZXJTZXR0aW5ncyBzZXR0aW5n
cyA9IHJlcXVlc3QtPnByaXYtPmNob29zZXItPnNldHRpbmdzKCk7CisgICAgc2l6ZV90IG51bU9m
TWltZVR5cGVzID0gc2V0dGluZ3MuYWNjZXB0TUlNRVR5cGVzLnNpemUoKTsKKyAgICBpZiAoIW51
bU9mTWltZVR5cGVzKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJlcXVlc3QtPnByaXYtPm1p
bWVUeXBlcyA9IGFkb3B0R1JlZihnX3B0cl9hcnJheV9uZXdfd2l0aF9mcmVlX2Z1bmMoZ19mcmVl
KSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1PZk1pbWVUeXBlczsgKytpKSB7Cisg
ICAgICAgIFN0cmluZyBtaW1lVHlwZVN0cmluZyA9IHNldHRpbmdzLmFjY2VwdE1JTUVUeXBlc1tp
XTsKKyAgICAgICAgaWYgKG1pbWVUeXBlU3RyaW5nLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICBnX3B0cl9hcnJheV9hZGQocmVxdWVzdC0+cHJpdi0+bWltZVR5cGVz
LmdldCgpLCBnX3N0cmR1cChtaW1lVHlwZVN0cmluZy51dGY4KCkuZGF0YSgpKSk7CisgICAgfQor
ICAgIGdfcHRyX2FycmF5X2FkZChyZXF1ZXN0LT5wcml2LT5taW1lVHlwZXMuZ2V0KCksIDApOwor
CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Z2NoYXIqKj4ocmVxdWVzdC0+cHJpdi0+bWlt
ZVR5cGVzLT5wZGF0YSk7Cit9CisKKy8qKgorICogd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0
X2dldF9taW1lX3R5cGVzX2ZpbHRlcjoKKyAqIEByZXF1ZXN0OiBhICNXZWJLaXRGaWxlQ2hvb3Nl
clJlcXVlc3QKKyAqCisgKiBHZXQgdGhlIGZpbHRlciBjdXJyZW50bHkgYXNzb2NpYXRlZCB3aXRo
IHRoZSByZXF1ZXN0LCByZWFkeSB0byBiZQorICogdXNlZCBieSAjR3RrRmlsZUNob29zZXIuIFRo
aXMgZnVuY3Rpb24gc2hvdWxkIG5vcm1hbGx5IGJlIGNhbGxlZAorICogYmVmb3JlIHByZXNlbnRp
bmcgdGhlIGZpbGUgY2hvb3NlciBkaWFsb2cgdG8gdGhlIHVzZXIsIHRvIGRlY2lkZQorICogd2hl
dGhlciB0byBhcHBseSBhIGZpbHRlciBzbyB0aGUgdXNlciB3b3VsZCBub3QgYmUgYWxsb3dlZCB0
bworICogc2VsZWN0IGZpbGVzIHdpdGggb3RoZXIgTUlNRSB0eXBlcy4KKyAqCisgKiBTZWUgd2Vi
a2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9taW1lX3R5cGVzKCkgaWYgeW91IGFyZQorICog
aW50ZXJlc3RlZCBpbiBnZXR0aW5nIHRoZSBsaXN0IG9mIGFjY2VwdGVkIE1JTUUgdHlwZXMuCisg
KgorICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiBhICNHdGtGaWxlRmlsdGVyIGlmIGEgbGlz
dCBvZiBhY2NlcHRlZAorICogTUlNRSB0eXBlcyBpcyBkZWZpbmVkIG9yICVOVUxMIG90aGVyd2lz
ZS4gVGhlIHJldHVybmVkIG9iamVjdCBpcworICogb3duZWQgYnkgV2ViS2l0R1RLKyBzaG91bGQg
bm90IGJlIG1vZGlmaWVkIG9yIGZyZWVkLgorICovCitHdGtGaWxlRmlsdGVyKiB3ZWJraXRfZmls
ZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X21pbWVfdHlwZXNfZmlsdGVyKFdlYktpdEZpbGVDaG9vc2Vy
UmVxdWVzdCogcmVxdWVzdCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNf
RklMRV9DSE9PU0VSX1JFUVVFU1QocmVxdWVzdCksIDApOworICAgIGlmIChyZXF1ZXN0LT5wcml2
LT5maWx0ZXIpCisgICAgICAgIHJldHVybiByZXF1ZXN0LT5wcml2LT5maWx0ZXIuZ2V0KCk7CisK
KyAgICBGaWxlQ2hvb3NlclNldHRpbmdzIHNldHRpbmdzID0gcmVxdWVzdC0+cHJpdi0+Y2hvb3Nl
ci0+c2V0dGluZ3MoKTsKKyAgICBzaXplX3QgbnVtT2ZNaW1lVHlwZXMgPSBzZXR0aW5ncy5hY2Nl
cHRNSU1FVHlwZXMuc2l6ZSgpOworICAgIGlmICghbnVtT2ZNaW1lVHlwZXMpCisgICAgICAgIHJl
dHVybiAwOworCisgICAgLy8gRG8gbm90IHVzZSBhZG9wdEdSZWYgaGVyZSwgc2luY2Ugd2Ugd2Fu
dCB0byBzaW5rIHRoZSBmbG9hdGluZworICAgIC8vIHJlZmVyZW5jZSBmb3IgdGhlIG5ldyBpbnN0
YW5jZSBvZiBHdGtGaWxlRmlsdGVyLCBzbyB3ZSBtYWtlCisgICAgLy8gc3VyZSB3ZSBrZWVwIHRo
ZSBvd25lcnNoaXAgZHVyaW5nIHRoZSBsaWZldGltZSBvZiB0aGUgcmVxdWVzdC4KKyAgICByZXF1
ZXN0LT5wcml2LT5maWx0ZXIgPSBndGtfZmlsZV9maWx0ZXJfbmV3KCk7CisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBudW1PZk1pbWVUeXBlczsgKytpKSB7CisgICAgICAgIFN0cmluZyBtaW1l
VHlwZVN0cmluZyA9IHNldHRpbmdzLmFjY2VwdE1JTUVUeXBlc1tpXTsKKyAgICAgICAgaWYgKG1p
bWVUeXBlU3RyaW5nLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBn
dGtfZmlsZV9maWx0ZXJfYWRkX21pbWVfdHlwZShyZXF1ZXN0LT5wcml2LT5maWx0ZXIuZ2V0KCks
IG1pbWVUeXBlU3RyaW5nLnV0ZjgoKS5kYXRhKCkpOworICAgIH0KKworICAgIHJldHVybiByZXF1
ZXN0LT5wcml2LT5maWx0ZXIuZ2V0KCk7Cit9CisKKy8qKgorICogd2Via2l0X2ZpbGVfY2hvb3Nl
cl9yZXF1ZXN0X2dldF9zZWxlY3RfbXVsdGlwbGU6CisgKiBAcmVxdWVzdDogYSAjV2ViS2l0Rmls
ZUNob29zZXJSZXF1ZXN0CisgKgorICogRGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGZpbGUgY2hvb3Nl
ciBhc3NvY2lhdGVkIHRvIHRoaXMKKyAqICNXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3Qgc2hvdWxk
IGFsbG93IHNlbGVjdGluZyBtdWx0aXBsZSBmaWxlcywKKyAqIHdoaWNoIGRlcGVuZHMgb24gdGhl
IEhUTUwgaW5wdXQgZWxlbWVudCBoYXZpbmcgYSAnbXVsdGlwbGUnCisgKiBhdHRyaWJ1dGUgZGVm
aW5lZC4KKyAqCisgKiBSZXR1cm5zOiAlVFJVRSBpZiB0aGUgZmlsZSBjaG9vc2VyIHNob3VsZCBh
bGxvdyBzZWxlY3RpbmcgbXVsdGlwbGUgZmlsZXMgb3IgJUZBTFNFIG90aGVyd2lzZS4KKyAqLwor
Z2Jvb2xlYW4gd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9zZWxlY3RfbXVsdGlwbGUo
V2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0KiByZXF1ZXN0KQoreworICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKFdFQktJVF9JU19GSUxFX0NIT09TRVJfUkVRVUVTVChyZXF1ZXN0KSwgRkFMU0UpOwor
ICAgIHJldHVybiByZXF1ZXN0LT5wcml2LT5jaG9vc2VyLT5zZXR0aW5ncygpLmFsbG93c011bHRp
cGxlRmlsZXM7Cit9CisKKy8qKgorICogd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X3NlbGVj
dF9maWxlczoKKyAqIEByZXF1ZXN0OiBhICNXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QKKyAqIEBm
aWxlczogKGFycmF5IHplcm8tdGVybWluYXRlZD0xKSAodHJhbnNmZXIgbm9uZSk6IGEKKyAqICVO
VUxMLXRlcm1pbmF0ZWQgYXJyYXkgb2Ygc3RyaW5ncywgY29udGFpbmluZyBwYXRocyB0byBsb2Nh
bCBmaWxlcy4KKyAqCisgKiBBc2sgV2ViS2l0IHRvIHNlbGVjdCBsb2NhbCBmaWxlcyBmb3IgdXBs
b2FkIGFuZCBjb21wbGV0ZSB0aGUKKyAqIHJlcXVlc3QuCisgKi8KK3ZvaWQgd2Via2l0X2ZpbGVf
Y2hvb3Nlcl9yZXF1ZXN0X3NlbGVjdF9maWxlcyhXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QqIHJl
cXVlc3QsIGNvbnN0IGdjaGFyKiBjb25zdCogZmlsZXMpCit7CisgICAgZ19yZXR1cm5faWZfZmFp
bChXRUJLSVRfSVNfRklMRV9DSE9PU0VSX1JFUVVFU1QocmVxdWVzdCkpOworICAgIGdfcmV0dXJu
X2lmX2ZhaWwoZmlsZXMpOworCisgICAgVmVjdG9yPFN0cmluZz4gbmFtZXM7CisKKyAgICBmb3Ig
KGludCBpID0gMDsgZmlsZXNbaV07IGkrKykKKyAgICAgICAgbmFtZXMuYXBwZW5kKGZpbGVuYW1l
VG9TdHJpbmcoZmlsZXNbaV0pKTsKKworICAgIHJlcXVlc3QtPnByaXYtPmNob29zZXItPmNob29z
ZUZpbGVzKG5hbWVzKTsKK30KKworLyoqCisgKiB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3Rf
Z2V0X3NlbGVjdGVkX2ZpbGVzOgorICogQHJlcXVlc3Q6IGEgI1dlYktpdEZpbGVDaG9vc2VyUmVx
dWVzdAorICoKKyAqIEdldCB0aGUgbGlzdCBvZiBzZWxlY3RlZCBmaWxlcyBjdXJyZW50bHkgYXNz
b2NpYXRlZCB0byB0aGUKKyAqIHJlcXVlc3QuIEluaXRpYWxseSwgdGhlIHJldHVybiB2YWx1ZSBv
ZiB0aGlzIG1ldGhvZCBjb250YWlucyBhbnkKKyAqIGZpbGVzIHNlbGVjdGVkIGluIHByZXZpb3Vz
IGZpbGUgY2hvb3NlciByZXF1ZXN0cyBmb3IgdGhpcyBIVE1MCisgKiBpbnB1dCBlbGVtZW50LiBP
bmNlIHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9zZWxlY3RfZmlsZXMsIHRoZQorICogdmFs
dWUgd2lsbCByZWZsZWN0IHdoYXRldmVyIGZpbGVzIGFyZSBnaXZlbi4KKyAqCisgKiBUaGlzIGZ1
bmN0aW9uIHNob3VsZCBub3JtYWxseSBiZSBjYWxsZWQgb25seSBiZWZvcmUgcHJlc2VudGluZyB0
aGUKKyAqIGZpbGUgY2hvb3NlciBkaWFsb2cgdG8gdGhlIHVzZXIsIHRvIGRlY2lkZSB3aGV0aGVy
IHRvIHBlcmZvcm0gc29tZQorICogZXh0cmEgYWN0aW9uLCBsaWtlIHByZS1zZWxlY3RpbmcgdGhl
IGZpbGVzIGZyb20gYSBwcmV2aW91cyByZXF1ZXN0LgorICoKKyAqIFJldHVybnM6IChhcnJheSB6
ZXJvLXRlcm1pbmF0ZWQ9MSkgKHRyYW5zZmVyIG5vbmUpOiBhCisgKiAlTlVMTC10ZXJtaW5hdGVk
IGFycmF5IG9mIHN0cmluZ3MgaWYgdGhlcmUgYXJlIHNlbGVjdGVkIGZpbGVzCisgKiBhc3NvY2lh
dGVkIHdpdGggdGhlIHJlcXVlc3Qgb3IgJU5VTEwgb3RoZXJ3aXNlLiBUaGlzIGFycmF5IGFuZCBp
dHMKKyAqIGNvbnRlbnRzIGFyZSBvd25lZCBieSBXZWJLaXRHVEsrIGFuZCBzaG91bGQgbm90IGJl
IG1vZGlmaWVkIG9yCisgKiBmcmVlZC4KKyAqLworY29uc3QgZ2NoYXIqIGNvbnN0KiB3ZWJraXRf
ZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X3NlbGVjdGVkX2ZpbGVzKFdlYktpdEZpbGVDaG9vc2Vy
UmVxdWVzdCogcmVxdWVzdCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNf
RklMRV9DSE9PU0VSX1JFUVVFU1QocmVxdWVzdCksIDApOworICAgIGlmIChyZXF1ZXN0LT5wcml2
LT5zZWxlY3RlZEZpbGVzKQorICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxnY2hhcioq
PihyZXF1ZXN0LT5wcml2LT5zZWxlY3RlZEZpbGVzLT5wZGF0YSk7CisKKyAgICBGaWxlQ2hvb3Nl
clNldHRpbmdzIHNldHRpbmdzID0gcmVxdWVzdC0+cHJpdi0+Y2hvb3Nlci0+c2V0dGluZ3MoKTsK
KyAgICBzaXplX3QgbnVtT2ZGaWxlcyA9IHNldHRpbmdzLnNlbGVjdGVkRmlsZXMuc2l6ZSgpOwor
ICAgIGlmICghbnVtT2ZGaWxlcykKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXF1ZXN0LT5w
cml2LT5zZWxlY3RlZEZpbGVzID0gYWRvcHRHUmVmKGdfcHRyX2FycmF5X25ld193aXRoX2ZyZWVf
ZnVuYyhnX2ZyZWUpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bU9mRmlsZXM7ICsr
aSkgeworICAgICAgICBpZiAoc2V0dGluZ3Muc2VsZWN0ZWRGaWxlc1tpXS5pc0VtcHR5KCkpCisg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgQ1N0cmluZyBmaWxlbmFtZSA9IGZpbGVTeXN0
ZW1SZXByZXNlbnRhdGlvbihzZXR0aW5ncy5zZWxlY3RlZEZpbGVzW2ldKTsKKyAgICAgICAgZ19w
dHJfYXJyYXlfYWRkKHJlcXVlc3QtPnByaXYtPnNlbGVjdGVkRmlsZXMuZ2V0KCksIGdfc3RyZHVw
KGZpbGVuYW1lLmRhdGEoKSkpOworICAgIH0KKyAgICBnX3B0cl9hcnJheV9hZGQocmVxdWVzdC0+
cHJpdi0+c2VsZWN0ZWRGaWxlcy5nZXQoKSwgMCk7CisKKyAgICByZXR1cm4gcmVpbnRlcnByZXRf
Y2FzdDxnY2hhcioqPihyZXF1ZXN0LT5wcml2LT5zZWxlY3RlZEZpbGVzLT5wZGF0YSk7Cit9CisK
Ky8qKgorICogd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2NhbmNlbDoKKyAqIEByZXF1ZXN0
OiBhICNXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QKKyAqCisgKiBBc2sgV2ViS2l0IHRvIGNhbmNl
bCB0aGUgcmVxdWVzdC4gSXQncyBpbXBvcnRhbnQgdG8gZG8gdGhpcyBpbiBjYXNlCisgKiBubyBz
ZWxlY3Rpb24gaGFzIGJlZW4gbWFkZSBpbiB0aGUgY2xpZW50LCBvdGhlcndpc2UgdGhlIHJlcXVl
c3QKKyAqIHdvbid0IGJlIHByb3Blcmx5IGNvbXBsZXRlZCBhbmQgdGhlIGJyb3dzZXIgd2lsbCBr
ZWVwIHRoZSByZXF1ZXN0CisgKiBwZW5kaW5nIGZvcmV2ZXIsIHdoaWNoIG1pZ2h0IGNhdXNlIHRo
ZSBicm93c2VyIHRvIGhhbmcuCisgKi8KK3ZvaWQgd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0
X2NhbmNlbChXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QqIHJlcXVlc3QpCit7CisgICAgLyoKKyAg
ICAgKiBTdHViIG9ubHk7IGZvciBBUEkgY29tcGF0aWJpbGl0eSB3aXRoIFdlYktpdDIncyBnb2Jq
ZWN0IGJpbmRpbmdzLgorICAgICAqIE5vdCBuZWVkZWQgZm9yIFdlYktpdDEuCisgICAgICovCit9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZmlsZWNob29zZXJy
ZXF1ZXN0LmggYi9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZmlsZWNob29zZXJyZXF1
ZXN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzM5YjlkYgotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRmaWxlY2hvb3NlcnJl
cXVlc3QuaApAQCAtMCwwICsxLDc0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxp
YSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
ICovCisKKyNpZm5kZWYgd2Via2l0ZmlsZWNob29zZXJyZXF1ZXN0X2gKKyNkZWZpbmUgd2Via2l0
ZmlsZWNob29zZXJyZXF1ZXN0X2gKKworI2luY2x1ZGUgPGd0ay9ndGsuaD4KKyNpbmNsdWRlIDx3
ZWJraXQvd2Via2l0ZGVmaW5lcy5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lU
X1RZUEVfRklMRV9DSE9PU0VSX1JFUVVFU1QgICAgICAgICAgICAod2Via2l0X2ZpbGVfY2hvb3Nl
cl9yZXF1ZXN0X2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9GSUxFX0NIT09TRVJfUkVRVUVT
VChvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJL
SVRfVFlQRV9GSUxFX0NIT09TRVJfUkVRVUVTVCwgV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0KSkK
KyNkZWZpbmUgV0VCS0lUX0ZJTEVfQ0hPT1NFUl9SRVFVRVNUX0NMQVNTKGtsYXNzKSAgICAoR19U
WVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9UWVBFX0ZJTEVfQ0hPT1NFUl9S
RVFVRVNULCBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3RDbGFzcykpCisjZGVmaW5lIFdFQktJVF9J
U19GSUxFX0NIT09TRVJfUkVRVUVTVChvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5D
RV9UWVBFKChvYmopLCBXRUJLSVRfVFlQRV9GSUxFX0NIT09TRVJfUkVRVUVTVCkpCisjZGVmaW5l
IFdFQktJVF9JU19GSUxFX0NIT09TRVJfUkVRVUVTVF9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVD
S19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfVFlQRV9GSUxFX0NIT09TRVJfUkVRVUVTVCkp
CisjZGVmaW5lIFdFQktJVF9GSUxFX0NIT09TRVJfUkVRVUVTVF9HRVRfQ0xBU1Mob2JqKSAgKEdf
VFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfVFlQRV9GSUxFX0NIT09TRVJf
UkVRVUVTVCwgV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0Q2xhc3MpKQorCit0eXBlZGVmIHN0cnVj
dCBfV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0ICAgICAgICBXZWJLaXRGaWxlQ2hvb3NlclJlcXVl
c3Q7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0Q2xhc3MgICBXZWJL
aXRGaWxlQ2hvb3NlclJlcXVlc3RDbGFzczsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRGaWxlQ2hv
b3NlclJlcXVlc3RQcml2YXRlIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdFByaXZhdGU7CisKK3N0
cnVjdCBfV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0IHsKKyAgICBHT2JqZWN0IHBhcmVudDsKKwor
ICAgIC8qPCBwcml2YXRlID4qLworICAgIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdFByaXZhdGUg
KnByaXY7Cit9OworCitzdHJ1Y3QgX1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdENsYXNzIHsKKyAg
ICBHT2JqZWN0Q2xhc3MgcGFyZW50X2NsYXNzOworfTsKKworV0VCS0lUX0FQSSBHVHlwZQord2Vi
a2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF90eXBlICAgICAgICAgICAgICAgICAgKHZvaWQp
OworCitXRUJLSVRfQVBJIGNvbnN0IGdjaGFyICogY29uc3QgKgord2Via2l0X2ZpbGVfY2hvb3Nl
cl9yZXF1ZXN0X2dldF9taW1lX3R5cGVzICAgICAgICAoV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0
ICpyZXF1ZXN0KTsKKworV0VCS0lUX0FQSSBHdGtGaWxlRmlsdGVyICoKK3dlYmtpdF9maWxlX2No
b29zZXJfcmVxdWVzdF9nZXRfbWltZV90eXBlc19maWx0ZXIgKFdlYktpdEZpbGVDaG9vc2VyUmVx
dWVzdCAqcmVxdWVzdCk7CisKK1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF9maWxlX2Nob29z
ZXJfcmVxdWVzdF9nZXRfc2VsZWN0X211bHRpcGxlICAgKFdlYktpdEZpbGVDaG9vc2VyUmVxdWVz
dCAqcmVxdWVzdCk7CisKK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1
ZXN0X3NlbGVjdF9maWxlcyAgICAgICAgICAoV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0ICpyZXF1
ZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgZ2NoYXIgKiBjb25zdCAgICAgICpmaWxlcyk7CisKK1dFQktJVF9BUEkgY29uc3QgZ2No
YXIgKiBjb25zdCAqCit3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X3NlbGVjdGVkX2Zp
bGVzICAgIChXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QgKnJlcXVlc3QpOworCitXRUJLSVRfQVBJ
IHZvaWQKK3dlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9jYW5jZWwgICAgICAgICAgICAgICAg
KFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCAqcmVxdWVzdCk7CisKK0dfRU5EX0RFQ0xTCisKKyNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGZpbGVjaG9v
c2VycmVxdWVzdHByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRmaWxl
Y2hvb3NlcnJlcXVlc3Rwcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uYTQxY2M3OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93
ZWJraXRmaWxlY2hvb3NlcnJlcXVlc3Rwcml2YXRlLmgKQEAgLTAsMCArMSwzMCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIHdlYmtpdGZpbGVjaG9vc2Vy
cmVxdWVzdHByaXZhdGVfaAorI2RlZmluZSB3ZWJraXRmaWxlY2hvb3NlcnJlcXVlc3Rwcml2YXRl
X2gKKworI2luY2x1ZGUgIkZpbGVDaG9vc2VyLmgiCisjaW5jbHVkZSAid2Via2l0ZmlsZWNob29z
ZXJyZXF1ZXN0LmgiCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitXZWJLaXRGaWxlQ2hv
b3NlclJlcXVlc3QqIHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9jcmVhdGUoUGFzc1JlZlB0
cjxGaWxlQ2hvb3Nlcj4gY2hvb3Nlcik7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwIGIvU291cmNlL1dlYktpdC9ndGsvd2Vi
a2l0L3dlYmtpdHdlYnZpZXcuY3BwCmluZGV4IDMwMGVhOGMuLjI1ZjRhZDggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5jcHAKQEAgLTIyMSw2ICsyMjEsNyBAQCBl
bnVtIHsKICAgICBFTlRFUklOR19GVUxMU0NSRUVOLAogICAgIExFQVZJTkdfRlVMTFNDUkVFTiwK
ICAgICBDT05URVhUX01FTlUsCisgICAgUlVOX0ZJTEVfQ0hPT1NFUiwKIAogICAgIExBU1RfU0lH
TkFMCiB9OwpAQCAtMTMwMCw2ICsxMzAxLDQ3IEBAIHN0YXRpYyBnYm9vbGVhbiB3ZWJraXRfd2Vi
X3ZpZXdfcmVhbF9sZWF2aW5nX2Z1bGxzY3JlZW4oV2ViS2l0V2ViVmlldyogd2ViVmlldykKICAg
ICByZXR1cm4gRkFMU0U7CiB9CiAKK3N0YXRpYyB2b2lkIGZpbGVDaG9vc2VyRGlhbG9nUmVzcG9u
c2VDYWxsYmFjayhHdGtEaWFsb2cqIGRpYWxvZywgZ2ludCByZXNwb25zZUlELCBXZWJLaXRGaWxl
Q2hvb3NlclJlcXVlc3QqIHJlcXVlc3QpCit7CisgICAgR1JlZlB0cjxXZWJLaXRGaWxlQ2hvb3Nl
clJlcXVlc3Q+IGFkb3B0ZWRSZXF1ZXN0ID0gYWRvcHRHUmVmKHJlcXVlc3QpOworICAgIGlmIChy
ZXNwb25zZUlEID09IEdUS19SRVNQT05TRV9BQ0NFUFQpIHsKKyAgICAgICAgR093blB0cjxHU0xp
c3Q+IGZpbGVzTGlzdChndGtfZmlsZV9jaG9vc2VyX2dldF9maWxlbmFtZXMoR1RLX0ZJTEVfQ0hP
T1NFUihkaWFsb2cpKSk7CisgICAgICAgIEdSZWZQdHI8R1B0ckFycmF5PiBmaWxlc0FycmF5ID0g
YWRvcHRHUmVmKGdfcHRyX2FycmF5X25ldygpKTsKKyAgICAgICAgZm9yIChHU0xpc3QqIGZpbGUg
PSBmaWxlc0xpc3QuZ2V0KCk7IGZpbGU7IGZpbGUgPSBnX3NsaXN0X25leHQoZmlsZSkpCisgICAg
ICAgICAgICBnX3B0cl9hcnJheV9hZGQoZmlsZXNBcnJheS5nZXQoKSwgZmlsZS0+ZGF0YSk7Cisg
ICAgICAgIGdfcHRyX2FycmF5X2FkZChmaWxlc0FycmF5LmdldCgpLCAwKTsKKyAgICAgICAgd2Vi
a2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X3NlbGVjdF9maWxlcyhhZG9wdGVkUmVxdWVzdC5nZXQo
KSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBnY2hhciogY29uc3QqPihmaWxlc0FycmF5LT5wZGF0
YSkpOworICAgIH0gZWxzZQorICAgICAgICB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfY2Fu
Y2VsKGFkb3B0ZWRSZXF1ZXN0LmdldCgpKTsKKworICAgIGd0a193aWRnZXRfZGVzdHJveShHVEtf
V0lER0VUKGRpYWxvZykpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X3dlYl92aWV3X3Jl
YWxfcnVuX2ZpbGVfY2hvb3NlcihXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBXZWJLaXRGaWxlQ2hv
b3NlclJlcXVlc3QqIHJlcXVlc3QpCit7CisgICAgR3RrV2lkZ2V0KiB0b3BsZXZlbCA9IGd0a193
aWRnZXRfZ2V0X3RvcGxldmVsKEdUS19XSURHRVQod2ViVmlldykpOworICAgIGlmICghd2lkZ2V0
SXNPbnNjcmVlblRvcGxldmVsV2luZG93KHRvcGxldmVsKSkKKyAgICAgICAgdG9wbGV2ZWwgPSAw
OworCisgICAgZ2Jvb2xlYW4gYWxsb3dzTXVsdGlwbGVTZWxlY3Rpb24gPSB3ZWJraXRfZmlsZV9j
aG9vc2VyX3JlcXVlc3RfZ2V0X3NlbGVjdF9tdWx0aXBsZShyZXF1ZXN0KTsKKyAgICBHdGtXaWRn
ZXQqIGRpYWxvZyA9IGd0a19maWxlX2Nob29zZXJfZGlhbG9nX25ldyhhbGxvd3NNdWx0aXBsZVNl
bGVjdGlvbiA/IF8oIlNlbGVjdCBGaWxlcyIpIDogXygiU2VsZWN0IEZpbGUiKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3BsZXZlbCA/IEdU
S19XSU5ET1codG9wbGV2ZWwpIDogMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBHVEtfRklMRV9DSE9PU0VSX0FDVElPTl9PUEVOLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdUS19TVE9DS19D
QU5DRUwsIEdUS19SRVNQT05TRV9DQU5DRUwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR1RLX1NUT0NLX09QRU4sIEdUS19SRVNQT05TRV9BQ0NF
UFQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
TlVMTCk7CisKKyAgICBpZiAoR3RrRmlsZUZpbHRlciogZmlsdGVyID0gd2Via2l0X2ZpbGVfY2hv
b3Nlcl9yZXF1ZXN0X2dldF9taW1lX3R5cGVzX2ZpbHRlcihyZXF1ZXN0KSkKKyAgICAgICAgZ3Rr
X2ZpbGVfY2hvb3Nlcl9zZXRfZmlsdGVyKEdUS19GSUxFX0NIT09TRVIoZGlhbG9nKSwgZmlsdGVy
KTsKKyAgICBndGtfZmlsZV9jaG9vc2VyX3NldF9zZWxlY3RfbXVsdGlwbGUoR1RLX0ZJTEVfQ0hP
T1NFUihkaWFsb2cpLCBhbGxvd3NNdWx0aXBsZVNlbGVjdGlvbik7CisKKyAgICBndGtfZmlsZV9j
aG9vc2VyX3NldF9zZWxlY3RfbXVsdGlwbGUoR1RLX0ZJTEVfQ0hPT1NFUihkaWFsb2cpLCBhbGxv
d3NNdWx0aXBsZVNlbGVjdGlvbik7CisgICAgZ19zaWduYWxfY29ubmVjdChkaWFsb2csICJyZXNw
b25zZSIsIEdfQ0FMTEJBQ0soZmlsZUNob29zZXJEaWFsb2dSZXNwb25zZUNhbGxiYWNrKSwgZ19v
YmplY3RfcmVmKHJlcXVlc3QpKTsKKyAgICBndGtfd2lkZ2V0X3Nob3coZGlhbG9nKTsKKworICAg
IHJldHVybiBUUlVFOworfQorCiBzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfZGlzcG9zZShH
T2JqZWN0KiBvYmplY3QpCiB7CiAgICAgV2ViS2l0V2ViVmlldyogd2ViVmlldyA9IFdFQktJVF9X
RUJfVklFVyhvYmplY3QpOwpAQCAtMjU1Myw2ICsyNTk1LDM3IEBAIHN0YXRpYyB2b2lkIHdlYmtp
dF93ZWJfdmlld19jbGFzc19pbml0KFdlYktpdFdlYlZpZXdDbGFzcyogd2ViVmlld0NsYXNzKQog
ICAgICAgICAgICAgR19UWVBFX05PTkUsIDEsCiAgICAgICAgICAgICBXRUJLSVRfVFlQRV9XRUJf
RlJBTUUpOwogCisgICAgIC8qKgorICAgICAqIFdlYktpdFdlYlZpZXc6OnJ1bi1maWxlLWNob29z
ZXI6CisgICAgICogQHdlYl92aWV3OiB0aGUgI1dlYktpdFdlYlZpZXcgb24gd2hpY2ggdGhlIHNp
Z25hbCBpcyBlbWl0dGVkCisgICAgICogQHJlcXVlc3Q6IGEgI1dlYktpdEZpbGVDaG9vc2VyUmVx
dWVzdAorICAgICAqCisgICAgICogVGhpcyBzaWduYWwgaXMgZW1pdHRlZCB3aGVuIHRoZSB1c2Vy
IGludGVyYWN0cyB3aXRoIGEgJmx0O2lucHV0CisgICAgICogdHlwZT0nZmlsZScgLyZndDsgSFRN
TCBlbGVtZW50LCByZXF1ZXN0aW5nIGZyb20gV2ViS2l0IHRvIHNob3cKKyAgICAgKiBhIGRpYWxv
ZyB0byBzZWxlY3Qgb25lIG9yIG1vcmUgZmlsZXMgdG8gYmUgdXBsb2FkZWQuIFRvIGxldCB0aGUK
KyAgICAgKiBhcHBsaWNhdGlvbiBrbm93IHRoZSBkZXRhaWxzIG9mIHRoZSBmaWxlIGNob29zZXIs
IGFzIHdlbGwgYXMgdG8KKyAgICAgKiBhbGxvdyB0aGUgY2xpZW50IGFwcGxpY2F0aW9uIHRvIGVp
dGhlciBjYW5jZWwgdGhlIHJlcXVlc3Qgb3IKKyAgICAgKiBwZXJmb3JtIGFuIGFjdHVhbCBzZWxl
Y3Rpb24gb2YgZmlsZXMsIHRoZSBzaWduYWwgd2lsbCBwYXNzIGFuCisgICAgICogaW5zdGFuY2Ug
b2YgdGhlICNXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QgaW4gdGhlIEByZXF1ZXN0CisgICAgICog
YXJndW1lbnQuCisgICAgICoKKyAgICAgKiBUaGUgZGVmYXVsdCBzaWduYWwgaGFuZGxlciB3aWxs
IGFzeW5jaHJvbm91c2x5IHJ1biBhIHJlZ3VsYXIKKyAgICAgKiAjR3RrRmlsZUNob29zZXJEaWFs
b2cgZm9yIHRoZSB1c2VyIHRvIGludGVyYWN0IHdpdGguCisgICAgICoKKyAgICAgKiBSZXR1cm5z
OiAlVFJVRSB0byBzdG9wIG90aGVyIGhhbmRsZXJzIGZyb20gYmVpbmcgaW52b2tlZCBmb3IgdGhl
IGV2ZW50LgorICAgICAqICAgJUZBTFNFIHRvIHByb3BhZ2F0ZSB0aGUgZXZlbnQgZnVydGhlci4K
KyAgICAgKgorICAgICAqLworICAgIHdlYmtpdF93ZWJfdmlld19zaWduYWxzW1JVTl9GSUxFX0NI
T09TRVJdID0KKyAgICAgICAgZ19zaWduYWxfbmV3KCJydW4tZmlsZS1jaG9vc2VyIiwKKyAgICAg
ICAgICAgICAgICAgICAgIEdfVFlQRV9GUk9NX0NMQVNTKHdlYlZpZXdDbGFzcyksCisgICAgICAg
ICAgICAgICAgICAgICBHX1NJR05BTF9SVU5fTEFTVCwKKyAgICAgICAgICAgICAgICAgICAgIEdf
U1RSVUNUX09GRlNFVChXZWJLaXRXZWJWaWV3Q2xhc3MsIHJ1bl9maWxlX2Nob29zZXIpLAorICAg
ICAgICAgICAgICAgICAgICAgZ19zaWduYWxfYWNjdW11bGF0b3JfdHJ1ZV9oYW5kbGVkLCAwIC8q
IGFjY3VtdWxhdG9yIGRhdGEgKi8sCisgICAgICAgICAgICAgICAgICAgICB3ZWJraXRfbWFyc2hh
bF9CT09MRUFOX19PQkpFQ1QsCisgICAgICAgICAgICAgICAgICAgICBHX1RZUEVfQk9PTEVBTiwg
MSwgLyogbnVtYmVyIG9mIHBhcmFtZXRlcnMgKi8KKyAgICAgICAgICAgICAgICAgICAgIFdFQktJ
VF9UWVBFX0ZJTEVfQ0hPT1NFUl9SRVFVRVNUKTsKKwogICAgIHdlYmtpdF93ZWJfdmlld19zaWdu
YWxzW1NIT1VMRF9CRUdJTl9FRElUSU5HXSA9IGdfc2lnbmFsX25ldygic2hvdWxkLWJlZ2luLWVk
aXRpbmciLAogICAgICAgICBHX1RZUEVfRlJPTV9DTEFTUyh3ZWJWaWV3Q2xhc3MpLCBzdGF0aWNf
Y2FzdDxHU2lnbmFsRmxhZ3M+KEdfU0lHTkFMX1JVTl9MQVNUIHwgR19TSUdOQUxfQUNUSU9OKSwK
ICAgICAgICAgR19TVFJVQ1RfT0ZGU0VUKFdlYktpdFdlYlZpZXdDbGFzcywgc2hvdWxkX2FsbG93
X2VkaXRpbmdfYWN0aW9uKSwgZ19zaWduYWxfYWNjdW11bGF0b3JfZmlyc3Rfd2lucywgMCwKQEAg
LTI4NjIsNiArMjkzNSw3IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJfdmlld19jbGFzc19pbml0
KFdlYktpdFdlYlZpZXdDbGFzcyogd2ViVmlld0NsYXNzKQogICAgIHdlYlZpZXdDbGFzcy0+c2hv
dWxkX2FsbG93X2VkaXRpbmdfYWN0aW9uID0gd2Via2l0X3dlYl92aWV3X3JlYWxfc2hvdWxkX2Fs
bG93X2VkaXRpbmdfYWN0aW9uOwogICAgIHdlYlZpZXdDbGFzcy0+ZW50ZXJpbmdfZnVsbHNjcmVl
biA9IHdlYmtpdF93ZWJfdmlld19yZWFsX2VudGVyaW5nX2Z1bGxzY3JlZW47CiAgICAgd2ViVmll
d0NsYXNzLT5sZWF2aW5nX2Z1bGxzY3JlZW4gPSB3ZWJraXRfd2ViX3ZpZXdfcmVhbF9sZWF2aW5n
X2Z1bGxzY3JlZW47CisgICAgd2ViVmlld0NsYXNzLT5ydW5fZmlsZV9jaG9vc2VyID0gd2Via2l0
X3dlYl92aWV3X3JlYWxfcnVuX2ZpbGVfY2hvb3NlcjsKIAogICAgIEdPYmplY3RDbGFzcyogb2Jq
ZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyh3ZWJWaWV3Q2xhc3MpOwogICAgIG9iamVjdENsYXNz
LT5kaXNwb3NlID0gd2Via2l0X3dlYl92aWV3X2Rpc3Bvc2U7CkBAIC0zNjE1LDYgKzM2ODksMTIg
QEAgR3RrV2lkZ2V0KiB3ZWJraXRfd2ViX3ZpZXdfbmV3KHZvaWQpCiAgICAgcmV0dXJuIEdUS19X
SURHRVQod2ViVmlldyk7CiB9CiAKK3ZvaWQgd2Via2l0X3dlYl92aWV3X3J1bl9maWxlX2Nob29z
ZXJfcmVxdWVzdChXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBXZWJLaXRGaWxlQ2hvb3NlclJlcXVl
c3QqIHJlcXVlc3QpCit7CisgICAgZ2Jvb2xlYW4gcmV0dXJuVmFsdWU7CisgICAgZ19zaWduYWxf
ZW1pdCh3ZWJWaWV3LCB3ZWJraXRfd2ViX3ZpZXdfc2lnbmFsc1tSVU5fRklMRV9DSE9PU0VSXSwg
MCwgcmVxdWVzdCwgJnJldHVyblZhbHVlKTsKK30KKwogLy8gZm9yIGludGVybmFsIHVzZSBvbmx5
CiB2b2lkIHdlYmtpdF93ZWJfdmlld19ub3RpZnlfcmVhZHkoV2ViS2l0V2ViVmlldyogd2ViVmll
dykKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3
LmggYi9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5oCmluZGV4IGRjNTc4
ZDUuLmZjZjcwYzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3
ZWJ2aWV3LmgKKysrIGIvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuaApA
QCAtMjgsNiArMjgsNyBAQAogCiAjaW5jbHVkZSA8d2Via2l0L3dlYmtpdGRlZmluZXMuaD4KICNp
bmNsdWRlIDx3ZWJraXQvd2Via2l0ZG9tLmg+CisjaW5jbHVkZSA8d2Via2l0L3dlYmtpdGZpbGVj
aG9vc2VycmVxdWVzdC5oPgogI2luY2x1ZGUgPHdlYmtpdC93ZWJraXR3ZWJiYWNrZm9yd2FyZGxp
c3QuaD4KICNpbmNsdWRlIDx3ZWJraXQvd2Via2l0d2ViZnJhbWUuaD4KICNpbmNsdWRlIDx3ZWJr
aXQvd2Via2l0d2ViaGlzdG9yeWl0ZW0uaD4KQEAgLTE2NSw2ICsxNjYsOCBAQCBzdHJ1Y3QgX1dl
YktpdFdlYlZpZXdDbGFzcyB7CiAgICAgZ2Jvb2xlYW4gICAgICAgICAgICAgICAgICAgKCogbW92
ZV9jdXJzb3IpICAgICAgICAgICAgKFdlYktpdFdlYlZpZXcgICAgICAgICp3ZWJfdmlldywKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
R3RrTW92ZW1lbnRTdGVwICAgICAgIHN0ZXAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQgICAgICAgICAgICAgICAgICBjb3Vu
dCk7CisgICAgZ2Jvb2xlYW4gICAgICAgICAgICAgICAgICAgKCogcnVuX2ZpbGVfY2hvb3Nlcikg
ICAgICAgKFdlYktpdFdlYlZpZXcgICAgICAgICAgICAqd2ViX3ZpZXcsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYktpdEZpbGVD
aG9vc2VyUmVxdWVzdCAqcmVxdWVzdCk7CiAKICAgICAvKgogICAgICAqIGludGVybmFsCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlld3ByaXZhdGUuaCBi
L1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3cHJpdmF0ZS5oCmluZGV4IDBi
YzVhNTYuLjZhOGQ5M2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJr
aXR3ZWJ2aWV3cHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3
ZWJ2aWV3cHJpdmF0ZS5oCkBAIC0xMjQsNiArMTI0LDggQEAgR3RrTWVudSogd2Via2l0X3dlYl92
aWV3X2dldF9jb250ZXh0X21lbnUoV2ViS2l0V2ViVmlldyopOwogdm9pZCB3ZWJWaWV3RW50ZXJG
dWxsc2NyZWVuKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIFdlYkNvcmU6Ok5vZGUqKTsKIHZvaWQg
d2ViVmlld0V4aXRGdWxsc2NyZWVuKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpOwogCit2b2lkIHdl
YmtpdF93ZWJfdmlld19ydW5fZmlsZV9jaG9vc2VyX3JlcXVlc3QoV2ViS2l0V2ViVmlldyosIFdl
YktpdEZpbGVDaG9vc2VyUmVxdWVzdCopOworCiAjaWYgRU5BQkxFKElDT05EQVRBQkFTRSkKIHZv
aWQgd2Via2l0V2ViVmlld1JlZ2lzdGVyRm9ySWNvbk5vdGlmaWNhdGlvbihXZWJLaXRXZWJWaWV3
KiwgYm9vbCBzaG91bGRSZWdpc3Rlcik7CiB2b2lkIHdlYmtpdFdlYlZpZXdJY29uTG9hZGVkKFdl
YktpdEZhdmljb25EYXRhYmFzZSosIGNvbnN0IGNoYXIqIGZyYW1lVVJJLCBXZWJLaXRXZWJWaWV3
Kik7Ci0tIAoxLjUuMy44Cgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>143909</attachid>
            <date>2012-05-24 15:49:36 -0700</date>
            <delta_ts>2012-05-25 06:00:22 -0700</delta_ts>
            <desc>new patch</desc>
            <filename>filechooser.patch</filename>
            <type>text/plain</type>
            <size>44107</size>
            <attacher name="Daniel Drake">dsd</attacher>
            
              <data encoding="base64">RnJvbSA1NmY5YWVkZWVjZjg5ZmNjNTY4Y2Y0YzYwOWY0NjE4OWE3YWRmODQ0IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBEYW5pZWwgRHJha2UgPGRzZEBsYXB0b3Aub3JnPgpEYXRlOiBU
dWUsIDIyIE1heSAyMDEyIDE4OjE5OjE3IC0wNDAwClN1YmplY3Q6IFtQQVRDSF0gcnVuLWZpbGUt
Y2hvb3NlcgoKLS0tCiBTb3VyY2UvV2ViS2l0L2d0ay9HTlVtYWtlZmlsZS5hbSAgICAgICAgICAg
ICAgICAgICB8ICAgIDQgKwogLi4uL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xp
ZW50R3RrLmNwcCAgfCAgIDM3ICstLQogU291cmNlL1dlYktpdC9ndGsvZG9jcy93ZWJraXRndGst
ZG9jcy5zZ21sICAgICAgICAgfCAgICAxICsKIFNvdXJjZS9XZWJLaXQvZ3RrL2RvY3Mvd2Via2l0
Z3RrLXNlY3Rpb25zLnR4dCAgICAgIHwgICAyMSArKwogU291cmNlL1dlYktpdC9ndGsvZG9jcy93
ZWJraXRndGsudHlwZXMgICAgICAgICAgICAgfCAgICAxICsKIC4uLi9XZWJLaXQvZ3RrL3dlYmtp
dC93ZWJraXRmaWxlY2hvb3NlcnJlcXVlc3QuY3BwIHwgIDM2MSArKysrKysrKysrKysrKysrKysr
KwogLi4uL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGZpbGVjaG9vc2VycmVxdWVzdC5oICAgfCAg
IDc0ICsrKysKIC4uLi9ndGsvd2Via2l0L3dlYmtpdGZpbGVjaG9vc2VycmVxdWVzdHByaXZhdGUu
aCAgIHwgICAzMCArKwogU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3Bw
ICAgICAgICAgfCAgIDgwICsrKysrCiBTb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vi
dmlldy5oICAgICAgICAgICB8ICAgIDMgKwogU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtp
dHdlYnZpZXdwcml2YXRlLmggICAgfCAgICAyICsKIDExIGZpbGVzIGNoYW5nZWQsIDU4MCBpbnNl
cnRpb25zKCspLCAzNCBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2Vi
S2l0L2d0ay93ZWJraXQvd2Via2l0ZmlsZWNob29zZXJyZXF1ZXN0LmNwcAogY3JlYXRlIG1vZGUg
MTAwNjQ0IFNvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRmaWxlY2hvb3NlcnJlcXVlc3Qu
aAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRmaWxl
Y2hvb3NlcnJlcXVlc3Rwcml2YXRlLmgKCkluZGV4OiBXZWJLaXQtcjExODMzNi9Tb3VyY2UvV2Vi
S2l0L2d0ay9HTlVtYWtlZmlsZS5hbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQtcjExODMzNi5vcmln
L1NvdXJjZS9XZWJLaXQvZ3RrL0dOVW1ha2VmaWxlLmFtCisrKyBXZWJLaXQtcjExODMzNi9Tb3Vy
Y2UvV2ViS2l0L2d0ay9HTlVtYWtlZmlsZS5hbQpAQCAtMTE0LDYgKzExNCw3IEBAIHdlYmtpdGd0
a19zdGF0aWNfaF9hcGkgKz0gXAogCSQoc3JjZGlyKS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQv
d2Via2l0ZG93bmxvYWQuaCBcCiAJJChzcmNkaXIpL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93
ZWJraXRlcnJvci5oIFwKIAkkKHNyY2RpcikvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtp
dGZhdmljb25kYXRhYmFzZS5oIFwKKwkkKHNyY2RpcikvU291cmNlL1dlYktpdC9ndGsvd2Via2l0
L3dlYmtpdGZpbGVjaG9vc2VycmVxdWVzdC5oIFwKIAkkKHNyY2RpcikvU291cmNlL1dlYktpdC9n
dGsvd2Via2l0L3dlYmtpdGdlb2xvY2F0aW9ucG9saWN5ZGVjaXNpb24uaCBcCiAJJChzcmNkaXIp
L1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRnbG9iYWxzLmggXAogCSQoc3JjZGlyKS9T
b3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0aGl0dGVzdHJlc3VsdC5oIFwKQEAgLTIyMCw2
ICsyMjEsOSBAQCB3ZWJraXRndGtfc291cmNlcyArPSBcCiAJU291cmNlL1dlYktpdC9ndGsvd2Vi
a2l0L3dlYmtpdGVycm9yLmNwcCBcCiAJU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGZh
dmljb25kYXRhYmFzZS5jcHAgXAogCVNvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRmYXZp
Y29uZGF0YWJhc2Vwcml2YXRlLmggXAorCVNvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRm
aWxlY2hvb3NlcnJlcXVlc3QuY3BwIFwKKwlTb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0
ZmlsZWNob29zZXJyZXF1ZXN0LmggXAorCVNvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRm
aWxlY2hvb3NlcnJlcXVlc3Rwcml2YXRlLmggXAogCVNvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93
ZWJraXRnZW9sb2NhdGlvbnBvbGljeWRlY2lzaW9uLmNwcCBcCiAJU291cmNlL1dlYktpdC9ndGsv
d2Via2l0L3dlYmtpdGdlb2xvY2F0aW9ucG9saWN5ZGVjaXNpb25wcml2YXRlLmggXAogCVNvdXJj
ZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRnbG9iYWxzLmNwcCBcCkluZGV4OiBXZWJLaXQtcjEx
ODMzNi9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRHdGsuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYktpdC1yMTE4MzM2Lm9yaWcvU291cmNlL1dlYktpdC9ndGsvV2Vi
Q29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmNwcAorKysgV2ViS2l0LXIxMTgzMzYvU291cmNl
L1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmNwcApAQCAtNTUsNiAr
NTUsNyBAQAogI2luY2x1ZGUgIldlYktpdERPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJXZWJLaXRE
T01IVE1MRWxlbWVudFByaXZhdGUuaCIKICNpbmNsdWRlICJXaW5kb3dGZWF0dXJlcy5oIgorI2lu
Y2x1ZGUgIndlYmtpdGZpbGVjaG9vc2VycmVxdWVzdHByaXZhdGUuaCIKICNpbmNsdWRlICJ3ZWJr
aXRnZW9sb2NhdGlvbnBvbGljeWRlY2lzaW9uLmgiCiAjaW5jbHVkZSAid2Via2l0Z2VvbG9jYXRp
b25wb2xpY3lkZWNpc2lvbnByaXZhdGUuaCIKICNpbmNsdWRlICJ3ZWJraXRuZXR3b3JrcmVxdWVz
dC5oIgpAQCAtODE0LDQwICs4MTUsOCBAQCB2b2lkIENocm9tZUNsaWVudDo6cmVhY2hlZEFwcGxp
Y2F0aW9uQ2FjCiAKIHZvaWQgQ2hyb21lQ2xpZW50OjpydW5PcGVuUGFuZWwoRnJhbWUqLCBQYXNz
UmVmUHRyPEZpbGVDaG9vc2VyPiBwcnBGaWxlQ2hvb3NlcikKIHsKLSAgICBSZWZQdHI8RmlsZUNo
b29zZXI+IGNob29zZXIgPSBwcnBGaWxlQ2hvb3NlcjsKLQotICAgIEd0a1dpZGdldCogdG9wbGV2
ZWwgPSBndGtfd2lkZ2V0X2dldF90b3BsZXZlbChHVEtfV0lER0VUKG1fd2ViVmlldykpOwotICAg
IGlmICghd2lkZ2V0SXNPbnNjcmVlblRvcGxldmVsV2luZG93KHRvcGxldmVsKSkKLSAgICAgICAg
dG9wbGV2ZWwgPSAwOwotCi0gICAgR3RrV2lkZ2V0KiBkaWFsb2cgPSBndGtfZmlsZV9jaG9vc2Vy
X2RpYWxvZ19uZXcoXygiVXBsb2FkIEZpbGUiKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0b3BsZXZlbCA/IEdUS19XSU5ET1codG9wbGV2ZWwp
IDogMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBHVEtfRklMRV9DSE9PU0VSX0FDVElPTl9PUEVOLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdUS19TVE9DS19DQU5DRUwsIEdUS19SRVNQT05T
RV9DQU5DRUwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgR1RLX1NUT0NLX09QRU4sIEdUS19SRVNQT05TRV9BQ0NFUFQsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7Ci0KLSAgICBndGtf
ZmlsZV9jaG9vc2VyX3NldF9zZWxlY3RfbXVsdGlwbGUoR1RLX0ZJTEVfQ0hPT1NFUihkaWFsb2cp
LCBjaG9vc2VyLT5zZXR0aW5ncygpLmFsbG93c011bHRpcGxlRmlsZXMpOwotCi0gICAgaWYgKGd0
a19kaWFsb2dfcnVuKEdUS19ESUFMT0coZGlhbG9nKSkgPT0gR1RLX1JFU1BPTlNFX0FDQ0VQVCkg
ewotICAgICAgICBpZiAoZ3RrX2ZpbGVfY2hvb3Nlcl9nZXRfc2VsZWN0X211bHRpcGxlKEdUS19G
SUxFX0NIT09TRVIoZGlhbG9nKSkpIHsKLSAgICAgICAgICAgIEdPd25QdHI8R1NMaXN0PiBmaWxl
bmFtZXMoZ3RrX2ZpbGVfY2hvb3Nlcl9nZXRfZmlsZW5hbWVzKEdUS19GSUxFX0NIT09TRVIoZGlh
bG9nKSkpOwotICAgICAgICAgICAgVmVjdG9yPFN0cmluZz4gbmFtZXM7Ci0gICAgICAgICAgICBm
b3IgKEdTTGlzdCogaXRlbSA9IGZpbGVuYW1lcy5nZXQoKSA7IGl0ZW0gOyBpdGVtID0gaXRlbS0+
bmV4dCkgewotICAgICAgICAgICAgICAgIGlmICghaXRlbS0+ZGF0YSkKLSAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgbmFtZXMuYXBwZW5kKGZpbGVuYW1lVG9T
dHJpbmcoc3RhdGljX2Nhc3Q8Y2hhcio+KGl0ZW0tPmRhdGEpKSk7Ci0gICAgICAgICAgICAgICAg
Z19mcmVlKGl0ZW0tPmRhdGEpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2hvb3Nlci0+
Y2hvb3NlRmlsZXMobmFtZXMpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZ2NoYXIq
IGZpbGVuYW1lID0gZ3RrX2ZpbGVfY2hvb3Nlcl9nZXRfZmlsZW5hbWUoR1RLX0ZJTEVfQ0hPT1NF
UihkaWFsb2cpKTsKLSAgICAgICAgICAgIGlmIChmaWxlbmFtZSkKLSAgICAgICAgICAgICAgICBj
aG9vc2VyLT5jaG9vc2VGaWxlKGZpbGVuYW1lVG9TdHJpbmcoZmlsZW5hbWUpKTsKLSAgICAgICAg
ICAgIGdfZnJlZShmaWxlbmFtZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZ3RrX3dpZGdldF9k
ZXN0cm95KGRpYWxvZyk7CisgICAgR1JlZlB0cjxXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3Q+IHJl
cXVlc3QgPSBhZG9wdEdSZWYod2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2NyZWF0ZShwcnBG
aWxlQ2hvb3NlcikpOworICAgIHdlYmtpdF93ZWJfdmlld19ydW5fZmlsZV9jaG9vc2VyX3JlcXVl
c3QobV93ZWJWaWV3LCByZXF1ZXN0LmdldCgpKTsKIH0KIAogdm9pZCBDaHJvbWVDbGllbnQ6Omxv
YWRJY29uRm9yRmlsZXMoY29uc3QgVmVjdG9yPFdURjo6U3RyaW5nPiYgZmlsZW5hbWVzLCBXZWJD
b3JlOjpGaWxlSWNvbkxvYWRlciogbG9hZGVyKQpJbmRleDogV2ViS2l0LXIxMTgzMzYvU291cmNl
L1dlYktpdC9ndGsvZG9jcy93ZWJraXRndGstZG9jcy5zZ21sCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktp
dC1yMTE4MzM2Lm9yaWcvU291cmNlL1dlYktpdC9ndGsvZG9jcy93ZWJraXRndGstZG9jcy5zZ21s
CisrKyBXZWJLaXQtcjExODMzNi9Tb3VyY2UvV2ViS2l0L2d0ay9kb2NzL3dlYmtpdGd0ay1kb2Nz
LnNnbWwKQEAgLTQxLDYgKzQxLDcgQEAKICAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvd2Via2l0
aWNvbmRhdGFiYXNlLnhtbCIvPgogICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC93ZWJraXRzcGVs
bGNoZWNrZXIueG1sIi8+CiAgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL3dlYmtpdGZhdmljb25k
YXRhYmFzZS54bWwiLz4KKyAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvd2Via2l0ZmlsZWNob29z
ZXJyZXF1ZXN0LnhtbCIvPgogICA8L2NoYXB0ZXI+CiAKICAgPGNoYXB0ZXI+CkluZGV4OiBXZWJL
aXQtcjExODMzNi9Tb3VyY2UvV2ViS2l0L2d0ay9kb2NzL3dlYmtpdGd0ay1zZWN0aW9ucy50eHQK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViS2l0LXIxMTgzMzYub3JpZy9Tb3VyY2UvV2ViS2l0L2d0ay9kb2Nz
L3dlYmtpdGd0ay1zZWN0aW9ucy50eHQKKysrIFdlYktpdC1yMTE4MzM2L1NvdXJjZS9XZWJLaXQv
Z3RrL2RvY3Mvd2Via2l0Z3RrLXNlY3Rpb25zLnR4dApAQCAtNzAzLDYgKzcwMywzMCBAQCBXZWJL
aXRGYXZpY29uRGF0YWJhc2VQcml2YXRlCiA8L1NFQ1RJT04+CiAKIDxTRUNUSU9OPgorPEZJTEU+
d2Via2l0ZmlsZWNob29zZXJyZXF1ZXN0PC9GSUxFPgorV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0
Cit3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X3NlbGVjdF9tdWx0aXBsZQord2Via2l0
X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9taW1lX3R5cGVzCit3ZWJraXRfZmlsZV9jaG9vc2Vy
X3JlcXVlc3RfZ2V0X21pbWVfdHlwZXNfZmlsdGVyCit3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVl
c3RfZ2V0X3NlbGVjdGVkX2ZpbGVzCit3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3Rfc2VsZWN0
X2ZpbGVzCit3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfY2FuY2VsCisKKzxTVUJTRUNUSU9O
IFN0YW5kYXJkPgorV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0Q2xhc3MKK1dFQktJVF9UWVBFX0ZJ
TEVfQ0hPT1NFUl9SRVFVRVNUCitXRUJLSVRfRklMRV9DSE9PU0VSX1JFUVVFU1QKK1dFQktJVF9J
U19GSUxFX0NIT09TRVJfUkVRVUVTVAorV0VCS0lUX0ZJTEVfQ0hPT1NFUl9SRVFVRVNUX0NMQVNT
CitXRUJLSVRfSVNfRklMRV9DSE9PU0VSX1JFUVVFU1RfQ0xBU1MKK1dFQktJVF9GSUxFX0NIT09T
RVJfUkVRVUVTVF9HRVRfQ0xBU1MKKworPFNVQlNFQ1RJT04gUHJpdmF0ZT4KK1dlYktpdEZpbGVD
aG9vc2VyUmVxdWVzdFByaXZhdGUKK3dlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfdHlw
ZQorPC9TRUNUSU9OPgorCis8U0VDVElPTj4KIDxGSUxFPndlYmtpdGRlZmluZXM8L0ZJTEU+CiBX
RUJLSVRfQVBJCiBXRUJLSVRHVEtfQVBJX1ZFUlNJT04KSW5kZXg6IFdlYktpdC1yMTE4MzM2L1Nv
dXJjZS9XZWJLaXQvZ3RrL2RvY3Mvd2Via2l0Z3RrLnR5cGVzCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktp
dC1yMTE4MzM2Lm9yaWcvU291cmNlL1dlYktpdC9ndGsvZG9jcy93ZWJraXRndGsudHlwZXMKKysr
IFdlYktpdC1yMTE4MzM2L1NvdXJjZS9XZWJLaXQvZ3RrL2RvY3Mvd2Via2l0Z3RrLnR5cGVzCkBA
IC0xLDYgKzEsNyBAQAogI2luY2x1ZGUgPHdlYmtpdC93ZWJraXQuaD4KIHdlYmtpdF9kb3dubG9h
ZF9nZXRfdHlwZQogd2Via2l0X2Zhdmljb25fZGF0YWJhc2VfZ2V0X3R5cGUKK3dlYmtpdF9maWxl
X2Nob29zZXJfcmVxdWVzdF9nZXRfdHlwZQogd2Via2l0X2dlb2xvY2F0aW9uX3BvbGljeV9kZWNp
c2lvbl9nZXRfdHlwZQogd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9nZXRfdHlwZQogd2Via2l0X2lj
b25fZGF0YWJhc2VfZ2V0X3R5cGUKSW5kZXg6IFdlYktpdC1yMTE4MzM2L1NvdXJjZS9XZWJLaXQv
Z3RrL3dlYmtpdC93ZWJraXRmaWxlY2hvb3NlcnJlcXVlc3QuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIC9k
ZXYvbnVsbAorKysgV2ViS2l0LXIxMTgzMzYvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtp
dGZpbGVjaG9vc2VycmVxdWVzdC5jcHAKQEAgLTAsMCArMSwzNjEgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIndl
YmtpdGZpbGVjaG9vc2VycmVxdWVzdC5oIgorCisjaW5jbHVkZSAiRmlsZUNob29zZXIuaCIKKyNp
bmNsdWRlICJGaWxlU3lzdGVtLmgiCisjaW5jbHVkZSAid2Via2l0ZmlsZWNob29zZXJyZXF1ZXN0
cHJpdmF0ZS5oIgorI2luY2x1ZGUgIndlYmtpdGdsb2JhbHNwcml2YXRlLmgiCisjaW5jbHVkZSA8
Z2xpYi9naTE4bi1saWIuaD4KKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HT3duUHRyLmg+CisjaW5j
bHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcu
aD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKKy8qKgorICogU0VDVElPTjogV2ViS2l0
RmlsZUNob29zZXJSZXF1ZXN0CisgKiBAU2hvcnRfZGVzY3JpcHRpb246IEEgcmVxdWVzdCB0byBv
cGVuIGEgZmlsZSBjaG9vc2VyCisgKiBAVGl0bGU6IFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdAor
ICogQFNlZV9hbHNvOiAjV2ViS2l0V2ViVmlldworICoKKyAqIFdoZW5ldmVyIHRoZSB1c2VyIGlu
dGVyYWN0cyB3aXRoIGFuICZsdDtpbnB1dCB0eXBlPSdmaWxlJyAvJmd0OworICogSFRNTCBlbGVt
ZW50LCBXZWJLaXQgd2lsbCBuZWVkIHRvIHNob3cgYSBkaWFsb2cgdG8gY2hvb3NlIG9uZSBvcgor
ICogbW9yZSBmaWxlcyB0byBiZSB1cGxvYWRlZCB0byB0aGUgc2VydmVyIGFsb25nIHdpdGggdGhl
IHJlc3Qgb2YgdGhlCisgKiBmb3JtIGRhdGEuIEZvciB0aGF0IHRvIGhhcHBlbiBpbiBhIGdlbmVy
YWwgd2F5LCBpbnN0ZWFkIG9mIGp1c3QKKyAqIG9wZW5pbmcgYSAjR3RrRmlsZUNob29zZXJEaWFs
b2cgKHdoaWNoIG1pZ2h0IGJlIG5vdCBkZXNpcmFibGUgaW4KKyAqIHNvbWUgY2FzZXMsIHdoaWNo
IGNvdWxkIHByZWZlciB0byB1c2UgdGhlaXIgb3duIGZpbGUgY2hvb3NlcgorICogZGlhbG9nKSwg
V2ViS2l0IHdpbGwgZmlyZSB0aGUgI1dlYktpdFdlYlZpZXc6OnJ1bi1maWxlLWNob29zZXIKKyAq
IHNpZ25hbCB3aXRoIGEgI1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCBvYmplY3QsIHdoaWNoIHdp
bGwgYWxsb3cKKyAqIHRoZSBjbGllbnQgYXBwbGljYXRpb24gdG8gc3BlY2lmeSB0aGUgZmlsZXMg
dG8gYmUgc2VsZWN0ZWQsIHRvCisgKiBpbnNwZWN0IHRoZSBkZXRhaWxzIG9mIHRoZSByZXF1ZXN0
IChlLmcuIGlmIG11bHRpcGxlIHNlbGVjdGlvbgorICogc2hvdWxkIGJlIGFsbG93ZWQpIGFuZCB0
byBjYW5jZWwgdGhlIHJlcXVlc3QsIGluIGNhc2Ugbm90aGluZyB3YXMKKyAqIHNlbGVjdGVkLgor
ICoKKyAqIEluIGNhc2UgdGhlIGNsaWVudCBhcHBsaWNhdGlvbiBkb2VzIG5vdCB3aXNoIHRvIGhh
bmRsZSB0aGlzIHNpZ25hbCwKKyAqIFdlYktpdCB3aWxsIHByb3ZpZGUgYSBkZWZhdWx0IGhhbmRs
ZXIgd2hpY2ggd2lsbCBhc3luY2hyb25vdXNseSBydW4KKyAqIGEgcmVndWxhciAjR3RrRmlsZUNo
b29zZXJEaWFsb2cgZm9yIHRoZSB1c2VyIHRvIGludGVyYWN0IHdpdGguCisgKi8KK0dfREVGSU5F
X1RZUEUoV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0LCB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVl
c3QsIEdfVFlQRV9PQkpFQ1QpCisKK3N0cnVjdCBfV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0UHJp
dmF0ZSB7CisgICAgUmVmUHRyPEZpbGVDaG9vc2VyPiBjaG9vc2VyOworICAgIEdSZWZQdHI8R3Rr
RmlsZUZpbHRlcj4gZmlsdGVyOworICAgIEdSZWZQdHI8R1B0ckFycmF5PiBtaW1lVHlwZXM7Cisg
ICAgR1JlZlB0cjxHUHRyQXJyYXk+IHNlbGVjdGVkRmlsZXM7Cit9OworCitlbnVtIHsKKyAgICBQ
Uk9QXzAsCisgICAgUFJPUF9GSUxURVIsCisgICAgUFJPUF9NSU1FX1RZUEVTLAorICAgIFBST1Bf
U0VMRUNUX01VTFRJUExFLAorICAgIFBST1BfU0VMRUNURURfRklMRVMsCit9OworCitzdGF0aWMg
dm9pZCB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfaW5pdChXZWJLaXRGaWxlQ2hvb3NlclJl
cXVlc3QqIHJlcXVlc3QpCit7CisgICAgcmVxdWVzdC0+cHJpdiA9IEdfVFlQRV9JTlNUQU5DRV9H
RVRfUFJJVkFURShyZXF1ZXN0LCBXRUJLSVRfVFlQRV9GSUxFX0NIT09TRVJfUkVRVUVTVCwgV2Vi
S2l0RmlsZUNob29zZXJSZXF1ZXN0UHJpdmF0ZSk7CisgICAgbmV3IChyZXF1ZXN0LT5wcml2KSBX
ZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3RQcml2YXRlKCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtp
dF9maWxlX2Nob29zZXJfcmVxdWVzdF9maW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCit7CisgICAg
V2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0KiByZXF1ZXN0ID0gV0VCS0lUX0ZJTEVfQ0hPT1NFUl9S
RVFVRVNUKG9iamVjdCk7CisKKyAgICByZXF1ZXN0LT5wcml2LT5+V2ViS2l0RmlsZUNob29zZXJS
ZXF1ZXN0UHJpdmF0ZSgpOworICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9maWxlX2Nob29zZXJf
cmVxdWVzdF9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShvYmplY3QpOworfQorCitzdGF0aWMgdm9p
ZCB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVj
dCwgZ3VpbnQgcHJvcElkLCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwYXJhbVNwZWMpCit7
CisgICAgV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0KiByZXF1ZXN0ID0gV0VCS0lUX0ZJTEVfQ0hP
T1NFUl9SRVFVRVNUKG9iamVjdCk7CisgICAgc3dpdGNoIChwcm9wSWQpIHsKKyAgICBjYXNlIFBS
T1BfRklMVEVSOgorICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIHdlYmtpdF9maWxl
X2Nob29zZXJfcmVxdWVzdF9nZXRfbWltZV90eXBlc19maWx0ZXIocmVxdWVzdCkpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIFBST1BfTUlNRV9UWVBFUzoKKyAgICAgICAgZ192YWx1ZV9zZXRf
Ym94ZWQodmFsdWUsIHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfbWltZV90eXBlcyhy
ZXF1ZXN0KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9TRUxFQ1RfTVVMVElQTEU6
CisgICAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4odmFsdWUsIHdlYmtpdF9maWxlX2Nob29zZXJf
cmVxdWVzdF9nZXRfc2VsZWN0X211bHRpcGxlKHJlcXVlc3QpKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBQUk9QX1NFTEVDVEVEX0ZJTEVTOgorICAgICAgICBnX3ZhbHVlX3NldF9ib3hlZCh2
YWx1ZSwgd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9zZWxlY3RlZF9maWxlcyhyZXF1
ZXN0KSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dB
Uk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BJZCwgcGFyYW1TcGVjKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZmlsZV9jaG9vc2VyX3Jl
cXVlc3RfY2xhc3NfaW5pdChXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3RDbGFzcyogcmVxdWVzdENs
YXNzKQoreworICAgIEdPYmplY3RDbGFzcyogb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhy
ZXF1ZXN0Q2xhc3MpOworICAgIG9iamVjdENsYXNzLT5maW5hbGl6ZSA9IHdlYmtpdF9maWxlX2No
b29zZXJfcmVxdWVzdF9maW5hbGl6ZTsKKyAgICBvYmplY3RDbGFzcy0+Z2V0X3Byb3BlcnR5ID0g
d2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9wcm9wZXJ0eTsKKyAgICBnX3R5cGVfY2xh
c3NfYWRkX3ByaXZhdGUocmVxdWVzdENsYXNzLCBzaXplb2YoV2ViS2l0RmlsZUNob29zZXJSZXF1
ZXN0UHJpdmF0ZSkpOworCisgICAgLyoqCisgICAgICogV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0
OmZpbHRlcjoKKyAgICAgKgorICAgICAqIFRoZSBmaWx0ZXIgY3VycmVudGx5IGFzc29jaWF0ZWQg
d2l0aCB0aGUgcmVxdWVzdC4gU2VlCisgICAgICogd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0
X2dldF9taW1lX3R5cGVzX2ZpbHRlcigpIGZvciBtb3JlCisgICAgICogZGV0YWlscy4KKyAgICAg
Ki8KKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KG9iamVjdENsYXNzLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPUF9GSUxURVIsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KCJmaWx0ZXIiLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXygi
TUlNRSB0eXBlcyBmaWx0ZXIiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF8oIlRoZSBmaWx0ZXIgY3VycmVudGx5IGFzc29jaWF0ZWQgd2l0
aCB0aGUgcmVxdWVzdCIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgR1RLX1RZUEVfRklMRV9GSUxURVIsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUp
KTsKKyAgICAvKioKKyAgICAgKiBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3Q6bWltZS10eXBlczoK
KyAgICAgKgorICAgICAqIEEgJU5VTEwtdGVybWluYXRlZCBhcnJheSBvZiBzdHJpbmdzIGNvbnRh
aW5pbmcgdGhlIGxpc3Qgb2YgTUlNRQorICAgICAqIHR5cGVzIHRoZSBmaWxlIGNob29zZXIgZGlh
bG9nIHNob3VsZCBoYW5kbGUuIFNlZQorICAgICAqIHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVz
dF9nZXRfbWltZV90eXBlcygpIGZvciBtb3JlIGRldGFpbHMuCisgICAgICovCisgICAgZ19vYmpl
Y3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShvYmplY3RDbGFzcywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFBST1BfTUlNRV9UWVBFUywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGdfcGFyYW1fc3BlY19ib3hlZCgibWltZS10eXBlcyIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJNSU1FIHR5
cGVzIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfKCJUaGUgbGlzdCBvZiBNSU1FIHR5cGVzIGFzc29jaWF0ZWQgd2l0aCB0aGUgcmVxdWVz
dCIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgR19UWVBFX1NUUlYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsgICAgLyoqCisgICAgICogV2Vi
S2l0RmlsZUNob29zZXJSZXF1ZXN0OnNlbGVjdC1tdWx0aXBsZToKKyAgICAgKgorICAgICAqIFdo
ZXRoZXIgdGhlIGZpbGUgY2hvb3NlciBzaG91bGQgYWxsb3cgc2VsZWN0aW5nIG11bHRpcGxlCisg
ICAgICogZmlsZXMuIFNlZQorICAgICAqIHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRf
c2VsZWN0X211bHRpcGxlKCkgZm9yCisgICAgICogbW9yZSBkZXRhaWxzLgorICAgICAqLworICAg
IGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkob2JqZWN0Q2xhc3MsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9QX1NFTEVDVF9NVUxUSVBMRSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuKCJzZWxlY3Qt
bXVsdGlwbGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF8oIlNlbGVjdCBtdWx0aXBsZSBmaWxlcyIpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIldoZXRoZXIgdGhlIGZpbGUg
Y2hvb3NlciBzaG91bGQgYWxsb3cgc2VsZWN0aW5nIG11bHRpcGxlIGZpbGVzIiksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkFMU0UsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VC
S0lUX1BBUkFNX1JFQURBQkxFKSk7CisgICAgLyoqCisgICAgICogV2ViS2l0RmlsZUNob29zZXJS
ZXF1ZXN0OnNlbGVjdGVkLWZpbGVzOgorICAgICAqCisgICAgICogQSAlTlVMTC10ZXJtaW5hdGVk
IGFycmF5IG9mIHN0cmluZ3MgY29udGFpbmluZyB0aGUgbGlzdCBvZgorICAgICAqIHNlbGVjdGVk
IGZpbGVzIGFzc29jaWF0ZWQgdG8gdGhlIGN1cnJlbnQgcmVxdWVzdC4gU2VlCisgICAgICogd2Vi
a2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9zZWxlY3RlZF9maWxlcygpIGZvciBtb3JlIGRl
dGFpbHMuCisgICAgICovCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShvYmpl
Y3RDbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBST1BfU0VMRUNU
RURfRklMRVMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3BhcmFtX3Nw
ZWNfYm94ZWQoInNlbGVjdGVkLWZpbGVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF8oIlNlbGVjdGVkIGZpbGVzIiksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJUaGUgbGlzdCBv
ZiBzZWxlY3RlZCBmaWxlcyBhc3NvY2lhdGVkIHdpdGggdGhlIHJlcXVlc3QiKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdfVFlQRV9TVFJW
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
V0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7Cit9CisKK1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCog
d2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2NyZWF0ZShQYXNzUmVmUHRyPEZpbGVDaG9vc2Vy
PiBjaG9vc2VyKQoreworICAgIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCogcmVxdWVzdCA9IFdF
QktJVF9GSUxFX0NIT09TRVJfUkVRVUVTVChnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfRklMRV9D
SE9PU0VSX1JFUVVFU1QsIE5VTEwpKTsKKyAgICByZXF1ZXN0LT5wcml2LT5jaG9vc2VyID0gY2hv
b3NlcjsKKyAgICByZXR1cm4gcmVxdWVzdDsKK30KKworLyoqCisgKiB3ZWJraXRfZmlsZV9jaG9v
c2VyX3JlcXVlc3RfZ2V0X21pbWVfdHlwZXM6CisgKiBAcmVxdWVzdDogYSAjV2ViS2l0RmlsZUNo
b29zZXJSZXF1ZXN0CisgKgorICogR2V0IHRoZSBsaXN0IG9mIE1JTUUgdHlwZXMgdGhlIGZpbGUg
Y2hvb3NlciBkaWFsb2cgc2hvdWxkIGhhbmRsZSwKKyAqIGluIHRoZSBmb3JtYXQgc3BlY2lmaWVk
IGluIFJGQyAyMDQ2IGZvciAibWVkaWEgdHlwZXMiLiBJdHMgY29udGVudHMKKyAqIGRlcGVuZCBv
biB0aGUgdmFsdWUgb2YgdGhlICdhY2NlcHQnIGF0dHJpYnV0ZSBmb3IgSFRNTCBpbnB1dAorICog
ZWxlbWVudHMuIFRoaXMgZnVuY3Rpb24gc2hvdWxkIG5vcm1hbGx5IGJlIGNhbGxlZCBiZWZvcmUg
cHJlc2VudGluZworICogdGhlIGZpbGUgY2hvb3NlciBkaWFsb2cgdG8gdGhlIHVzZXIsIHRvIGRl
Y2lkZSB3aGV0aGVyIHRvIGFsbG93IHRoZQorICogdXNlciB0byBzZWxlY3QgbXVsdGlwbGUgZmls
ZXMgYXQgb25jZSBvciBvbmx5IG9uZS4KKyAqCisgKiBSZXR1cm5zOiAoYXJyYXkgemVyby10ZXJt
aW5hdGVkPTEpICh0cmFuc2ZlciBub25lKTogYQorICogJU5VTEwtdGVybWluYXRlZCBhcnJheSBv
ZiBzdHJpbmdzIGlmIGEgbGlzdCBvZiBhY2NlcHRlZCBNSU1FIHR5cGVzCisgKiBpcyBkZWZpbmVk
IG9yICVOVUxMIG90aGVyd2lzZSwgbWVhbmluZyB0aGF0IGFueSBNSU1FIHR5cGUgc2hvdWxkIGJl
CisgKiBhY2NlcHRlZC4gVGhpcyBhcnJheSBhbmQgaXRzIGNvbnRlbnRzIGFyZSBvd25lZCBieSBX
ZWJLaXRHVEsrIGFuZAorICogc2hvdWxkIG5vdCBiZSBtb2RpZmllZCBvciBmcmVlZC4KKyAqLwor
Y29uc3QgZ2NoYXIqIGNvbnN0KiB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X21pbWVf
dHlwZXMoV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0KiByZXF1ZXN0KQoreworICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKFdFQktJVF9JU19GSUxFX0NIT09TRVJfUkVRVUVTVChyZXF1ZXN0KSwgMCk7
CisgICAgaWYgKHJlcXVlc3QtPnByaXYtPm1pbWVUeXBlcykKKyAgICAgICAgcmV0dXJuIHJlaW50
ZXJwcmV0X2Nhc3Q8Z2NoYXIqKj4ocmVxdWVzdC0+cHJpdi0+bWltZVR5cGVzLT5wZGF0YSk7CisK
KyAgICBGaWxlQ2hvb3NlclNldHRpbmdzIHNldHRpbmdzID0gcmVxdWVzdC0+cHJpdi0+Y2hvb3Nl
ci0+c2V0dGluZ3MoKTsKKyAgICBzaXplX3QgbnVtT2ZNaW1lVHlwZXMgPSBzZXR0aW5ncy5hY2Nl
cHRNSU1FVHlwZXMuc2l6ZSgpOworICAgIGlmICghbnVtT2ZNaW1lVHlwZXMpCisgICAgICAgIHJl
dHVybiAwOworCisgICAgcmVxdWVzdC0+cHJpdi0+bWltZVR5cGVzID0gYWRvcHRHUmVmKGdfcHRy
X2FycmF5X25ld193aXRoX2ZyZWVfZnVuYyhnX2ZyZWUpKTsKKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG51bU9mTWltZVR5cGVzOyArK2kpIHsKKyAgICAgICAgU3RyaW5nIG1pbWVUeXBlU3Ry
aW5nID0gc2V0dGluZ3MuYWNjZXB0TUlNRVR5cGVzW2ldOworICAgICAgICBpZiAobWltZVR5cGVT
dHJpbmcuaXNFbXB0eSgpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGdfcHRyX2Fy
cmF5X2FkZChyZXF1ZXN0LT5wcml2LT5taW1lVHlwZXMuZ2V0KCksIGdfc3RyZHVwKG1pbWVUeXBl
U3RyaW5nLnV0ZjgoKS5kYXRhKCkpKTsKKyAgICB9CisgICAgZ19wdHJfYXJyYXlfYWRkKHJlcXVl
c3QtPnByaXYtPm1pbWVUeXBlcy5nZXQoKSwgMCk7CisKKyAgICByZXR1cm4gcmVpbnRlcnByZXRf
Y2FzdDxnY2hhcioqPihyZXF1ZXN0LT5wcml2LT5taW1lVHlwZXMtPnBkYXRhKTsKK30KKworLyoq
CisgKiB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X21pbWVfdHlwZXNfZmlsdGVyOgor
ICogQHJlcXVlc3Q6IGEgI1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdAorICoKKyAqIEdldCB0aGUg
ZmlsdGVyIGN1cnJlbnRseSBhc3NvY2lhdGVkIHdpdGggdGhlIHJlcXVlc3QsIHJlYWR5IHRvIGJl
CisgKiB1c2VkIGJ5ICNHdGtGaWxlQ2hvb3Nlci4gVGhpcyBmdW5jdGlvbiBzaG91bGQgbm9ybWFs
bHkgYmUgY2FsbGVkCisgKiBiZWZvcmUgcHJlc2VudGluZyB0aGUgZmlsZSBjaG9vc2VyIGRpYWxv
ZyB0byB0aGUgdXNlciwgdG8gZGVjaWRlCisgKiB3aGV0aGVyIHRvIGFwcGx5IGEgZmlsdGVyIHNv
IHRoZSB1c2VyIHdvdWxkIG5vdCBiZSBhbGxvd2VkIHRvCisgKiBzZWxlY3QgZmlsZXMgd2l0aCBv
dGhlciBNSU1FIHR5cGVzLgorICoKKyAqIFNlZSB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3Rf
Z2V0X21pbWVfdHlwZXMoKSBpZiB5b3UgYXJlCisgKiBpbnRlcmVzdGVkIGluIGdldHRpbmcgdGhl
IGxpc3Qgb2YgYWNjZXB0ZWQgTUlNRSB0eXBlcy4KKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIg
bm9uZSk6IGEgI0d0a0ZpbGVGaWx0ZXIgaWYgYSBsaXN0IG9mIGFjY2VwdGVkCisgKiBNSU1FIHR5
cGVzIGlzIGRlZmluZWQgb3IgJU5VTEwgb3RoZXJ3aXNlLiBUaGUgcmV0dXJuZWQgb2JqZWN0IGlz
CisgKiBvd25lZCBieSBXZWJLaXRHVEsrIHNob3VsZCBub3QgYmUgbW9kaWZpZWQgb3IgZnJlZWQu
CisgKi8KK0d0a0ZpbGVGaWx0ZXIqIHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfbWlt
ZV90eXBlc19maWx0ZXIoV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0KiByZXF1ZXN0KQoreworICAg
IGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19GSUxFX0NIT09TRVJfUkVRVUVTVChyZXF1
ZXN0KSwgMCk7CisgICAgaWYgKHJlcXVlc3QtPnByaXYtPmZpbHRlcikKKyAgICAgICAgcmV0dXJu
IHJlcXVlc3QtPnByaXYtPmZpbHRlci5nZXQoKTsKKworICAgIEZpbGVDaG9vc2VyU2V0dGluZ3Mg
c2V0dGluZ3MgPSByZXF1ZXN0LT5wcml2LT5jaG9vc2VyLT5zZXR0aW5ncygpOworICAgIHNpemVf
dCBudW1PZk1pbWVUeXBlcyA9IHNldHRpbmdzLmFjY2VwdE1JTUVUeXBlcy5zaXplKCk7CisgICAg
aWYgKCFudW1PZk1pbWVUeXBlcykKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICAvLyBEbyBub3Qg
dXNlIGFkb3B0R1JlZiBoZXJlLCBzaW5jZSB3ZSB3YW50IHRvIHNpbmsgdGhlIGZsb2F0aW5nCisg
ICAgLy8gcmVmZXJlbmNlIGZvciB0aGUgbmV3IGluc3RhbmNlIG9mIEd0a0ZpbGVGaWx0ZXIsIHNv
IHdlIG1ha2UKKyAgICAvLyBzdXJlIHdlIGtlZXAgdGhlIG93bmVyc2hpcCBkdXJpbmcgdGhlIGxp
ZmV0aW1lIG9mIHRoZSByZXF1ZXN0LgorICAgIHJlcXVlc3QtPnByaXYtPmZpbHRlciA9IGd0a19m
aWxlX2ZpbHRlcl9uZXcoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bU9mTWltZVR5
cGVzOyArK2kpIHsKKyAgICAgICAgU3RyaW5nIG1pbWVUeXBlU3RyaW5nID0gc2V0dGluZ3MuYWNj
ZXB0TUlNRVR5cGVzW2ldOworICAgICAgICBpZiAobWltZVR5cGVTdHJpbmcuaXNFbXB0eSgpKQor
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGd0a19maWxlX2ZpbHRlcl9hZGRfbWltZV90
eXBlKHJlcXVlc3QtPnByaXYtPmZpbHRlci5nZXQoKSwgbWltZVR5cGVTdHJpbmcudXRmOCgpLmRh
dGEoKSk7CisgICAgfQorCisgICAgcmV0dXJuIHJlcXVlc3QtPnByaXYtPmZpbHRlci5nZXQoKTsK
K30KKworLyoqCisgKiB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X3NlbGVjdF9tdWx0
aXBsZToKKyAqIEByZXF1ZXN0OiBhICNXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QKKyAqCisgKiBE
ZXRlcm1pbmUgd2hldGhlciB0aGUgZmlsZSBjaG9vc2VyIGFzc29jaWF0ZWQgdG8gdGhpcworICog
I1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCBzaG91bGQgYWxsb3cgc2VsZWN0aW5nIG11bHRpcGxl
IGZpbGVzLAorICogd2hpY2ggZGVwZW5kcyBvbiB0aGUgSFRNTCBpbnB1dCBlbGVtZW50IGhhdmlu
ZyBhICdtdWx0aXBsZScKKyAqIGF0dHJpYnV0ZSBkZWZpbmVkLgorICoKKyAqIFJldHVybnM6ICVU
UlVFIGlmIHRoZSBmaWxlIGNob29zZXIgc2hvdWxkIGFsbG93IHNlbGVjdGluZyBtdWx0aXBsZSBm
aWxlcyBvciAlRkFMU0Ugb3RoZXJ3aXNlLgorICovCitnYm9vbGVhbiB3ZWJraXRfZmlsZV9jaG9v
c2VyX3JlcXVlc3RfZ2V0X3NlbGVjdF9tdWx0aXBsZShXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3Qq
IHJlcXVlc3QpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX0ZJTEVfQ0hP
T1NFUl9SRVFVRVNUKHJlcXVlc3QpLCBGQUxTRSk7CisgICAgcmV0dXJuIHJlcXVlc3QtPnByaXYt
PmNob29zZXItPnNldHRpbmdzKCkuYWxsb3dzTXVsdGlwbGVGaWxlczsKK30KKworLyoqCisgKiB3
ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3Rfc2VsZWN0X2ZpbGVzOgorICogQHJlcXVlc3Q6IGEg
I1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdAorICogQGZpbGVzOiAoYXJyYXkgemVyby10ZXJtaW5h
dGVkPTEpICh0cmFuc2ZlciBub25lKTogYQorICogJU5VTEwtdGVybWluYXRlZCBhcnJheSBvZiBz
dHJpbmdzLCBjb250YWluaW5nIHBhdGhzIHRvIGxvY2FsIGZpbGVzLgorICoKKyAqIEFzayBXZWJL
aXQgdG8gc2VsZWN0IGxvY2FsIGZpbGVzIGZvciB1cGxvYWQgYW5kIGNvbXBsZXRlIHRoZQorICog
cmVxdWVzdC4KKyAqLwordm9pZCB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3Rfc2VsZWN0X2Zp
bGVzKFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCogcmVxdWVzdCwgY29uc3QgZ2NoYXIqIGNvbnN0
KiBmaWxlcykKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19GSUxFX0NIT09TRVJf
UkVRVUVTVChyZXF1ZXN0KSk7CisgICAgZ19yZXR1cm5faWZfZmFpbChmaWxlcyk7CisKKyAgICBW
ZWN0b3I8U3RyaW5nPiBuYW1lczsKKworICAgIGZvciAoaW50IGkgPSAwOyBmaWxlc1tpXTsgaSsr
KQorICAgICAgICBuYW1lcy5hcHBlbmQoZmlsZW5hbWVUb1N0cmluZyhmaWxlc1tpXSkpOworCisg
ICAgcmVxdWVzdC0+cHJpdi0+Y2hvb3Nlci0+Y2hvb3NlRmlsZXMobmFtZXMpOworfQorCisvKioK
KyAqIHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfc2VsZWN0ZWRfZmlsZXM6CisgKiBA
cmVxdWVzdDogYSAjV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0CisgKgorICogR2V0IHRoZSBsaXN0
IG9mIHNlbGVjdGVkIGZpbGVzIGN1cnJlbnRseSBhc3NvY2lhdGVkIHRvIHRoZQorICogcmVxdWVz
dC4gSW5pdGlhbGx5LCB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoaXMgbWV0aG9kIGNvbnRhaW5zIGFu
eQorICogZmlsZXMgc2VsZWN0ZWQgaW4gcHJldmlvdXMgZmlsZSBjaG9vc2VyIHJlcXVlc3RzIGZv
ciB0aGlzIEhUTUwKKyAqIGlucHV0IGVsZW1lbnQuIE9uY2Ugd2Via2l0X2ZpbGVfY2hvb3Nlcl9y
ZXF1ZXN0X3NlbGVjdF9maWxlcywgdGhlCisgKiB2YWx1ZSB3aWxsIHJlZmxlY3Qgd2hhdGV2ZXIg
ZmlsZXMgYXJlIGdpdmVuLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gc2hvdWxkIG5vcm1hbGx5IGJl
IGNhbGxlZCBvbmx5IGJlZm9yZSBwcmVzZW50aW5nIHRoZQorICogZmlsZSBjaG9vc2VyIGRpYWxv
ZyB0byB0aGUgdXNlciwgdG8gZGVjaWRlIHdoZXRoZXIgdG8gcGVyZm9ybSBzb21lCisgKiBleHRy
YSBhY3Rpb24sIGxpa2UgcHJlLXNlbGVjdGluZyB0aGUgZmlsZXMgZnJvbSBhIHByZXZpb3VzIHJl
cXVlc3QuCisgKgorICogUmV0dXJuczogKGFycmF5IHplcm8tdGVybWluYXRlZD0xKSAodHJhbnNm
ZXIgbm9uZSk6IGEKKyAqICVOVUxMLXRlcm1pbmF0ZWQgYXJyYXkgb2Ygc3RyaW5ncyBpZiB0aGVy
ZSBhcmUgc2VsZWN0ZWQgZmlsZXMKKyAqIGFzc29jaWF0ZWQgd2l0aCB0aGUgcmVxdWVzdCBvciAl
TlVMTCBvdGhlcndpc2UuIFRoaXMgYXJyYXkgYW5kIGl0cworICogY29udGVudHMgYXJlIG93bmVk
IGJ5IFdlYktpdEdUSysgYW5kIHNob3VsZCBub3QgYmUgbW9kaWZpZWQgb3IKKyAqIGZyZWVkLgor
ICovCitjb25zdCBnY2hhciogY29uc3QqIHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRf
c2VsZWN0ZWRfZmlsZXMoV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0KiByZXF1ZXN0KQoreworICAg
IGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19GSUxFX0NIT09TRVJfUkVRVUVTVChyZXF1
ZXN0KSwgMCk7CisgICAgaWYgKHJlcXVlc3QtPnByaXYtPnNlbGVjdGVkRmlsZXMpCisgICAgICAg
IHJldHVybiByZWludGVycHJldF9jYXN0PGdjaGFyKio+KHJlcXVlc3QtPnByaXYtPnNlbGVjdGVk
RmlsZXMtPnBkYXRhKTsKKworICAgIEZpbGVDaG9vc2VyU2V0dGluZ3Mgc2V0dGluZ3MgPSByZXF1
ZXN0LT5wcml2LT5jaG9vc2VyLT5zZXR0aW5ncygpOworICAgIHNpemVfdCBudW1PZkZpbGVzID0g
c2V0dGluZ3Muc2VsZWN0ZWRGaWxlcy5zaXplKCk7CisgICAgaWYgKCFudW1PZkZpbGVzKQorICAg
ICAgICByZXR1cm4gMDsKKworICAgIHJlcXVlc3QtPnByaXYtPnNlbGVjdGVkRmlsZXMgPSBhZG9w
dEdSZWYoZ19wdHJfYXJyYXlfbmV3X3dpdGhfZnJlZV9mdW5jKGdfZnJlZSkpOworICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbnVtT2ZGaWxlczsgKytpKSB7CisgICAgICAgIGlmIChzZXR0aW5n
cy5zZWxlY3RlZEZpbGVzW2ldLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICBDU3RyaW5nIGZpbGVuYW1lID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHNldHRpbmdz
LnNlbGVjdGVkRmlsZXNbaV0pOworICAgICAgICBnX3B0cl9hcnJheV9hZGQocmVxdWVzdC0+cHJp
di0+c2VsZWN0ZWRGaWxlcy5nZXQoKSwgZ19zdHJkdXAoZmlsZW5hbWUuZGF0YSgpKSk7CisgICAg
fQorICAgIGdfcHRyX2FycmF5X2FkZChyZXF1ZXN0LT5wcml2LT5zZWxlY3RlZEZpbGVzLmdldCgp
LCAwKTsKKworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGdjaGFyKio+KHJlcXVlc3QtPnBy
aXYtPnNlbGVjdGVkRmlsZXMtPnBkYXRhKTsKK30KKworLyoqCisgKiB3ZWJraXRfZmlsZV9jaG9v
c2VyX3JlcXVlc3RfY2FuY2VsOgorICogQHJlcXVlc3Q6IGEgI1dlYktpdEZpbGVDaG9vc2VyUmVx
dWVzdAorICoKKyAqIEFzayBXZWJLaXQgdG8gY2FuY2VsIHRoZSByZXF1ZXN0LiBJdCdzIGltcG9y
dGFudCB0byBkbyB0aGlzIGluIGNhc2UKKyAqIG5vIHNlbGVjdGlvbiBoYXMgYmVlbiBtYWRlIGlu
IHRoZSBjbGllbnQsIG90aGVyd2lzZSB0aGUgcmVxdWVzdAorICogd29uJ3QgYmUgcHJvcGVybHkg
Y29tcGxldGVkIGFuZCB0aGUgYnJvd3NlciB3aWxsIGtlZXAgdGhlIHJlcXVlc3QKKyAqIHBlbmRp
bmcgZm9yZXZlciwgd2hpY2ggbWlnaHQgY2F1c2UgdGhlIGJyb3dzZXIgdG8gaGFuZy4KKyAqLwor
dm9pZCB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfY2FuY2VsKFdlYktpdEZpbGVDaG9vc2Vy
UmVxdWVzdCogcmVxdWVzdCkKK3sKKyAgICAvKgorICAgICAqIFN0dWIgb25seTsgZm9yIEFQSSBj
b21wYXRpYmlsaXR5IHdpdGggV2ViS2l0MidzIGdvYmplY3QgYmluZGluZ3MuCisgICAgICogTm90
IG5lZWRlZCBmb3IgV2ViS2l0MS4KKyAgICAgKi8KK30KSW5kZXg6IFdlYktpdC1yMTE4MzM2L1Nv
dXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRmaWxlY2hvb3NlcnJlcXVlc3QuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSAvZGV2L251bGwKKysrIFdlYktpdC1yMTE4MzM2L1NvdXJjZS9XZWJLaXQvZ3RrL3dl
YmtpdC93ZWJraXRmaWxlY2hvb3NlcnJlcXVlc3QuaApAQCAtMCwwICsxLDc0IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgd2Via2l0ZmlsZWNob29zZXJy
ZXF1ZXN0X2gKKyNkZWZpbmUgd2Via2l0ZmlsZWNob29zZXJyZXF1ZXN0X2gKKworI2luY2x1ZGUg
PGd0ay9ndGsuaD4KKyNpbmNsdWRlIDx3ZWJraXQvd2Via2l0ZGVmaW5lcy5oPgorCitHX0JFR0lO
X0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX1RZUEVfRklMRV9DSE9PU0VSX1JFUVVFU1QgICAgICAg
ICAgICAod2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF90eXBlKCkpCisjZGVmaW5lIFdF
QktJVF9GSUxFX0NIT09TRVJfUkVRVUVTVChvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19J
TlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfVFlQRV9GSUxFX0NIT09TRVJfUkVRVUVTVCwgV2Vi
S2l0RmlsZUNob29zZXJSZXF1ZXN0KSkKKyNkZWZpbmUgV0VCS0lUX0ZJTEVfQ0hPT1NFUl9SRVFV
RVNUX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdF
QktJVF9UWVBFX0ZJTEVfQ0hPT1NFUl9SRVFVRVNULCBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3RD
bGFzcykpCisjZGVmaW5lIFdFQktJVF9JU19GSUxFX0NIT09TRVJfUkVRVUVTVChvYmopICAgICAg
ICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfVFlQRV9GSUxFX0NI
T09TRVJfUkVRVUVTVCkpCisjZGVmaW5lIFdFQktJVF9JU19GSUxFX0NIT09TRVJfUkVRVUVTVF9D
TEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfVFlQ
RV9GSUxFX0NIT09TRVJfUkVRVUVTVCkpCisjZGVmaW5lIFdFQktJVF9GSUxFX0NIT09TRVJfUkVR
VUVTVF9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBX
RUJLSVRfVFlQRV9GSUxFX0NIT09TRVJfUkVRVUVTVCwgV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0
Q2xhc3MpKQorCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0ICAgICAg
ICBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3Q7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RmlsZUNo
b29zZXJSZXF1ZXN0Q2xhc3MgICBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3RDbGFzczsKK3R5cGVk
ZWYgc3RydWN0IF9XZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3RQcml2YXRlIFdlYktpdEZpbGVDaG9v
c2VyUmVxdWVzdFByaXZhdGU7CisKK3N0cnVjdCBfV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0IHsK
KyAgICBHT2JqZWN0IHBhcmVudDsKKworICAgIC8qPCBwcml2YXRlID4qLworICAgIFdlYktpdEZp
bGVDaG9vc2VyUmVxdWVzdFByaXZhdGUgKnByaXY7Cit9OworCitzdHJ1Y3QgX1dlYktpdEZpbGVD
aG9vc2VyUmVxdWVzdENsYXNzIHsKKyAgICBHT2JqZWN0Q2xhc3MgcGFyZW50X2NsYXNzOworfTsK
KworV0VCS0lUX0FQSSBHVHlwZQord2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF90eXBl
ICAgICAgICAgICAgICAgICAgKHZvaWQpOworCitXRUJLSVRfQVBJIGNvbnN0IGdjaGFyICogY29u
c3QgKgord2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9taW1lX3R5cGVzICAgICAgICAo
V2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0ICpyZXF1ZXN0KTsKKworV0VCS0lUX0FQSSBHdGtGaWxl
RmlsdGVyICoKK3dlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfbWltZV90eXBlc19maWx0
ZXIgKFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCAqcmVxdWVzdCk7CisKK1dFQktJVF9BUEkgZ2Jv
b2xlYW4KK3dlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfc2VsZWN0X211bHRpcGxlICAg
KFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCAqcmVxdWVzdCk7CisKK1dFQktJVF9BUEkgdm9pZAor
d2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X3NlbGVjdF9maWxlcyAgICAgICAgICAoV2ViS2l0
RmlsZUNob29zZXJSZXF1ZXN0ICpyZXF1ZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgKiBjb25zdCAgICAgICpmaWxlcyk7
CisKK1dFQktJVF9BUEkgY29uc3QgZ2NoYXIgKiBjb25zdCAqCit3ZWJraXRfZmlsZV9jaG9vc2Vy
X3JlcXVlc3RfZ2V0X3NlbGVjdGVkX2ZpbGVzICAgIChXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3Qg
KnJlcXVlc3QpOworCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVz
dF9jYW5jZWwgICAgICAgICAgICAgICAgKFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCAqcmVxdWVz
dCk7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZgpJbmRleDogV2ViS2l0LXIxMTgzMzYvU291cmNl
L1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGZpbGVjaG9vc2VycmVxdWVzdHByaXZhdGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSAvZGV2L251bGwKKysrIFdlYktpdC1yMTE4MzM2L1NvdXJjZS9XZWJLaXQvZ3Rr
L3dlYmtpdC93ZWJraXRmaWxlY2hvb3NlcnJlcXVlc3Rwcml2YXRlLmgKQEAgLTAsMCArMSwzMCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIHdlYmtpdGZp
bGVjaG9vc2VycmVxdWVzdHByaXZhdGVfaAorI2RlZmluZSB3ZWJraXRmaWxlY2hvb3NlcnJlcXVl
c3Rwcml2YXRlX2gKKworI2luY2x1ZGUgIkZpbGVDaG9vc2VyLmgiCisjaW5jbHVkZSAid2Via2l0
ZmlsZWNob29zZXJyZXF1ZXN0LmgiCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitXZWJL
aXRGaWxlQ2hvb3NlclJlcXVlc3QqIHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9jcmVhdGUo
UGFzc1JlZlB0cjxGaWxlQ2hvb3Nlcj4gY2hvb3Nlcik7CisKKyNlbmRpZgpJbmRleDogV2ViS2l0
LXIxMTgzMzYvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYktpdC1yMTE4MzM2Lm9yaWcvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dl
YmtpdHdlYnZpZXcuY3BwCisrKyBXZWJLaXQtcjExODMzNi9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJr
aXQvd2Via2l0d2Vidmlldy5jcHAKQEAgLTIyMSw2ICsyMjEsNyBAQCBlbnVtIHsKICAgICBFTlRF
UklOR19GVUxMU0NSRUVOLAogICAgIExFQVZJTkdfRlVMTFNDUkVFTiwKICAgICBDT05URVhUX01F
TlUsCisgICAgUlVOX0ZJTEVfQ0hPT1NFUiwKIAogICAgIExBU1RfU0lHTkFMCiB9OwpAQCAtMTMw
MCw2ICsxMzAxLDQ3IEBAIHN0YXRpYyBnYm9vbGVhbiB3ZWJraXRfd2ViX3ZpZXdfcmVhbF9sZWEK
ICAgICByZXR1cm4gRkFMU0U7CiB9CiAKK3N0YXRpYyB2b2lkIGZpbGVDaG9vc2VyRGlhbG9nUmVz
cG9uc2VDYWxsYmFjayhHdGtEaWFsb2cqIGRpYWxvZywgZ2ludCByZXNwb25zZUlELCBXZWJLaXRG
aWxlQ2hvb3NlclJlcXVlc3QqIHJlcXVlc3QpCit7CisgICAgR1JlZlB0cjxXZWJLaXRGaWxlQ2hv
b3NlclJlcXVlc3Q+IGFkb3B0ZWRSZXF1ZXN0ID0gYWRvcHRHUmVmKHJlcXVlc3QpOworICAgIGlm
IChyZXNwb25zZUlEID09IEdUS19SRVNQT05TRV9BQ0NFUFQpIHsKKyAgICAgICAgR093blB0cjxH
U0xpc3Q+IGZpbGVzTGlzdChndGtfZmlsZV9jaG9vc2VyX2dldF9maWxlbmFtZXMoR1RLX0ZJTEVf
Q0hPT1NFUihkaWFsb2cpKSk7CisgICAgICAgIEdSZWZQdHI8R1B0ckFycmF5PiBmaWxlc0FycmF5
ID0gYWRvcHRHUmVmKGdfcHRyX2FycmF5X25ldygpKTsKKyAgICAgICAgZm9yIChHU0xpc3QqIGZp
bGUgPSBmaWxlc0xpc3QuZ2V0KCk7IGZpbGU7IGZpbGUgPSBnX3NsaXN0X25leHQoZmlsZSkpCisg
ICAgICAgICAgICBnX3B0cl9hcnJheV9hZGQoZmlsZXNBcnJheS5nZXQoKSwgZmlsZS0+ZGF0YSk7
CisgICAgICAgIGdfcHRyX2FycmF5X2FkZChmaWxlc0FycmF5LmdldCgpLCAwKTsKKyAgICAgICAg
d2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X3NlbGVjdF9maWxlcyhhZG9wdGVkUmVxdWVzdC5n
ZXQoKSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBnY2hhciogY29uc3QqPihmaWxlc0FycmF5LT5w
ZGF0YSkpOworICAgIH0gZWxzZQorICAgICAgICB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3Rf
Y2FuY2VsKGFkb3B0ZWRSZXF1ZXN0LmdldCgpKTsKKworICAgIGd0a193aWRnZXRfZGVzdHJveShH
VEtfV0lER0VUKGRpYWxvZykpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X3dlYl92aWV3
X3JlYWxfcnVuX2ZpbGVfY2hvb3NlcihXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBXZWJLaXRGaWxl
Q2hvb3NlclJlcXVlc3QqIHJlcXVlc3QpCit7CisgICAgR3RrV2lkZ2V0KiB0b3BsZXZlbCA9IGd0
a193aWRnZXRfZ2V0X3RvcGxldmVsKEdUS19XSURHRVQod2ViVmlldykpOworICAgIGlmICghd2lk
Z2V0SXNPbnNjcmVlblRvcGxldmVsV2luZG93KHRvcGxldmVsKSkKKyAgICAgICAgdG9wbGV2ZWwg
PSAwOworCisgICAgZ2Jvb2xlYW4gYWxsb3dzTXVsdGlwbGVTZWxlY3Rpb24gPSB3ZWJraXRfZmls
ZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X3NlbGVjdF9tdWx0aXBsZShyZXF1ZXN0KTsKKyAgICBHdGtX
aWRnZXQqIGRpYWxvZyA9IGd0a19maWxlX2Nob29zZXJfZGlhbG9nX25ldyhhbGxvd3NNdWx0aXBs
ZVNlbGVjdGlvbiA/IF8oIlNlbGVjdCBGaWxlcyIpIDogXygiU2VsZWN0IEZpbGUiKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3BsZXZlbCA/
IEdUS19XSU5ET1codG9wbGV2ZWwpIDogMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHVEtfRklMRV9DSE9PU0VSX0FDVElPTl9PUEVOLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdUS19TVE9D
S19DQU5DRUwsIEdUS19SRVNQT05TRV9DQU5DRUwsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgR1RLX1NUT0NLX09QRU4sIEdUS19SRVNQT05TRV9B
Q0NFUFQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgTlVMTCk7CisKKyAgICBpZiAoR3RrRmlsZUZpbHRlciogZmlsdGVyID0gd2Via2l0X2ZpbGVf
Y2hvb3Nlcl9yZXF1ZXN0X2dldF9taW1lX3R5cGVzX2ZpbHRlcihyZXF1ZXN0KSkKKyAgICAgICAg
Z3RrX2ZpbGVfY2hvb3Nlcl9zZXRfZmlsdGVyKEdUS19GSUxFX0NIT09TRVIoZGlhbG9nKSwgZmls
dGVyKTsKKyAgICBndGtfZmlsZV9jaG9vc2VyX3NldF9zZWxlY3RfbXVsdGlwbGUoR1RLX0ZJTEVf
Q0hPT1NFUihkaWFsb2cpLCBhbGxvd3NNdWx0aXBsZVNlbGVjdGlvbik7CisKKyAgICBndGtfZmls
ZV9jaG9vc2VyX3NldF9zZWxlY3RfbXVsdGlwbGUoR1RLX0ZJTEVfQ0hPT1NFUihkaWFsb2cpLCBh
bGxvd3NNdWx0aXBsZVNlbGVjdGlvbik7CisgICAgZ19zaWduYWxfY29ubmVjdChkaWFsb2csICJy
ZXNwb25zZSIsIEdfQ0FMTEJBQ0soZmlsZUNob29zZXJEaWFsb2dSZXNwb25zZUNhbGxiYWNrKSwg
Z19vYmplY3RfcmVmKHJlcXVlc3QpKTsKKyAgICBndGtfd2lkZ2V0X3Nob3coZGlhbG9nKTsKKwor
ICAgIHJldHVybiBUUlVFOworfQorCiBzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfZGlzcG9z
ZShHT2JqZWN0KiBvYmplY3QpCiB7CiAgICAgV2ViS2l0V2ViVmlldyogd2ViVmlldyA9IFdFQktJ
VF9XRUJfVklFVyhvYmplY3QpOwpAQCAtMjU1Myw2ICsyNTk1LDM3IEBAIHN0YXRpYyB2b2lkIHdl
YmtpdF93ZWJfdmlld19jbGFzc19pbml0KFcKICAgICAgICAgICAgIEdfVFlQRV9OT05FLCAxLAog
ICAgICAgICAgICAgV0VCS0lUX1RZUEVfV0VCX0ZSQU1FKTsKIAorICAgICAvKioKKyAgICAgKiBX
ZWJLaXRXZWJWaWV3OjpydW4tZmlsZS1jaG9vc2VyOgorICAgICAqIEB3ZWJfdmlldzogdGhlICNX
ZWJLaXRXZWJWaWV3IG9uIHdoaWNoIHRoZSBzaWduYWwgaXMgZW1pdHRlZAorICAgICAqIEByZXF1
ZXN0OiBhICNXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QKKyAgICAgKgorICAgICAqIFRoaXMgc2ln
bmFsIGlzIGVtaXR0ZWQgd2hlbiB0aGUgdXNlciBpbnRlcmFjdHMgd2l0aCBhICZsdDtpbnB1dAor
ICAgICAqIHR5cGU9J2ZpbGUnIC8mZ3Q7IEhUTUwgZWxlbWVudCwgcmVxdWVzdGluZyBmcm9tIFdl
YktpdCB0byBzaG93CisgICAgICogYSBkaWFsb2cgdG8gc2VsZWN0IG9uZSBvciBtb3JlIGZpbGVz
IHRvIGJlIHVwbG9hZGVkLiBUbyBsZXQgdGhlCisgICAgICogYXBwbGljYXRpb24ga25vdyB0aGUg
ZGV0YWlscyBvZiB0aGUgZmlsZSBjaG9vc2VyLCBhcyB3ZWxsIGFzIHRvCisgICAgICogYWxsb3cg
dGhlIGNsaWVudCBhcHBsaWNhdGlvbiB0byBlaXRoZXIgY2FuY2VsIHRoZSByZXF1ZXN0IG9yCisg
ICAgICogcGVyZm9ybSBhbiBhY3R1YWwgc2VsZWN0aW9uIG9mIGZpbGVzLCB0aGUgc2lnbmFsIHdp
bGwgcGFzcyBhbgorICAgICAqIGluc3RhbmNlIG9mIHRoZSAjV2ViS2l0RmlsZUNob29zZXJSZXF1
ZXN0IGluIHRoZSBAcmVxdWVzdAorICAgICAqIGFyZ3VtZW50LgorICAgICAqCisgICAgICogVGhl
IGRlZmF1bHQgc2lnbmFsIGhhbmRsZXIgd2lsbCBhc3luY2hyb25vdXNseSBydW4gYSByZWd1bGFy
CisgICAgICogI0d0a0ZpbGVDaG9vc2VyRGlhbG9nIGZvciB0aGUgdXNlciB0byBpbnRlcmFjdCB3
aXRoLgorICAgICAqCisgICAgICogUmV0dXJuczogJVRSVUUgdG8gc3RvcCBvdGhlciBoYW5kbGVy
cyBmcm9tIGJlaW5nIGludm9rZWQgZm9yIHRoZSBldmVudC4KKyAgICAgKiAgICVGQUxTRSB0byBw
cm9wYWdhdGUgdGhlIGV2ZW50IGZ1cnRoZXIuCisgICAgICoKKyAgICAgKi8KKyAgICB3ZWJraXRf
d2ViX3ZpZXdfc2lnbmFsc1tSVU5fRklMRV9DSE9PU0VSXSA9CisgICAgICAgIGdfc2lnbmFsX25l
dygicnVuLWZpbGUtY2hvb3NlciIsCisgICAgICAgICAgICAgICAgICAgICBHX1RZUEVfRlJPTV9D
TEFTUyh3ZWJWaWV3Q2xhc3MpLAorICAgICAgICAgICAgICAgICAgICAgR19TSUdOQUxfUlVOX0xB
U1QsCisgICAgICAgICAgICAgICAgICAgICBHX1NUUlVDVF9PRkZTRVQoV2ViS2l0V2ViVmlld0Ns
YXNzLCBydW5fZmlsZV9jaG9vc2VyKSwKKyAgICAgICAgICAgICAgICAgICAgIGdfc2lnbmFsX2Fj
Y3VtdWxhdG9yX3RydWVfaGFuZGxlZCwgMCAvKiBhY2N1bXVsYXRvciBkYXRhICovLAorICAgICAg
ICAgICAgICAgICAgICAgd2Via2l0X21hcnNoYWxfQk9PTEVBTl9fT0JKRUNULAorICAgICAgICAg
ICAgICAgICAgICAgR19UWVBFX0JPT0xFQU4sIDEsIC8qIG51bWJlciBvZiBwYXJhbWV0ZXJzICov
CisgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfVFlQRV9GSUxFX0NIT09TRVJfUkVRVUVTVCk7
CisKICAgICB3ZWJraXRfd2ViX3ZpZXdfc2lnbmFsc1tTSE9VTERfQkVHSU5fRURJVElOR10gPSBn
X3NpZ25hbF9uZXcoInNob3VsZC1iZWdpbi1lZGl0aW5nIiwKICAgICAgICAgR19UWVBFX0ZST01f
Q0xBU1Mod2ViVmlld0NsYXNzKSwgc3RhdGljX2Nhc3Q8R1NpZ25hbEZsYWdzPihHX1NJR05BTF9S
VU5fTEFTVCB8IEdfU0lHTkFMX0FDVElPTiksCiAgICAgICAgIEdfU1RSVUNUX09GRlNFVChXZWJL
aXRXZWJWaWV3Q2xhc3MsIHNob3VsZF9hbGxvd19lZGl0aW5nX2FjdGlvbiksIGdfc2lnbmFsX2Fj
Y3VtdWxhdG9yX2ZpcnN0X3dpbnMsIDAsCkBAIC0yODYyLDYgKzI5MzUsNyBAQCBzdGF0aWMgdm9p
ZCB3ZWJraXRfd2ViX3ZpZXdfY2xhc3NfaW5pdChXCiAgICAgd2ViVmlld0NsYXNzLT5zaG91bGRf
YWxsb3dfZWRpdGluZ19hY3Rpb24gPSB3ZWJraXRfd2ViX3ZpZXdfcmVhbF9zaG91bGRfYWxsb3df
ZWRpdGluZ19hY3Rpb247CiAgICAgd2ViVmlld0NsYXNzLT5lbnRlcmluZ19mdWxsc2NyZWVuID0g
d2Via2l0X3dlYl92aWV3X3JlYWxfZW50ZXJpbmdfZnVsbHNjcmVlbjsKICAgICB3ZWJWaWV3Q2xh
c3MtPmxlYXZpbmdfZnVsbHNjcmVlbiA9IHdlYmtpdF93ZWJfdmlld19yZWFsX2xlYXZpbmdfZnVs
bHNjcmVlbjsKKyAgICB3ZWJWaWV3Q2xhc3MtPnJ1bl9maWxlX2Nob29zZXIgPSB3ZWJraXRfd2Vi
X3ZpZXdfcmVhbF9ydW5fZmlsZV9jaG9vc2VyOwogCiAgICAgR09iamVjdENsYXNzKiBvYmplY3RD
bGFzcyA9IEdfT0JKRUNUX0NMQVNTKHdlYlZpZXdDbGFzcyk7CiAgICAgb2JqZWN0Q2xhc3MtPmRp
c3Bvc2UgPSB3ZWJraXRfd2ViX3ZpZXdfZGlzcG9zZTsKQEAgLTM2MTUsNiArMzY4OSwxMiBAQCBH
dGtXaWRnZXQqIHdlYmtpdF93ZWJfdmlld19uZXcodm9pZCkKICAgICByZXR1cm4gR1RLX1dJREdF
VCh3ZWJWaWV3KTsKIH0KIAordm9pZCB3ZWJraXRfd2ViX3ZpZXdfcnVuX2ZpbGVfY2hvb3Nlcl9y
ZXF1ZXN0KFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCog
cmVxdWVzdCkKK3sKKyAgICBnYm9vbGVhbiByZXR1cm5WYWx1ZTsKKyAgICBnX3NpZ25hbF9lbWl0
KHdlYlZpZXcsIHdlYmtpdF93ZWJfdmlld19zaWduYWxzW1JVTl9GSUxFX0NIT09TRVJdLCAwLCBy
ZXF1ZXN0LCAmcmV0dXJuVmFsdWUpOworfQorCiAvLyBmb3IgaW50ZXJuYWwgdXNlIG9ubHkKIHZv
aWQgd2Via2l0X3dlYl92aWV3X25vdGlmeV9yZWFkeShXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQog
ewpJbmRleDogV2ViS2l0LXIxMTgzMzYvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdl
YnZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQtcjExODMzNi5vcmlnL1NvdXJjZS9XZWJLaXQv
Z3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmgKKysrIFdlYktpdC1yMTE4MzM2L1NvdXJjZS9XZWJL
aXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmgKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2luY2x1
ZGUgPHdlYmtpdC93ZWJraXRkZWZpbmVzLmg+CiAjaW5jbHVkZSA8d2Via2l0L3dlYmtpdGRvbS5o
PgorI2luY2x1ZGUgPHdlYmtpdC93ZWJraXRmaWxlY2hvb3NlcnJlcXVlc3QuaD4KICNpbmNsdWRl
IDx3ZWJraXQvd2Via2l0d2ViYmFja2ZvcndhcmRsaXN0Lmg+CiAjaW5jbHVkZSA8d2Via2l0L3dl
YmtpdHdlYmZyYW1lLmg+CiAjaW5jbHVkZSA8d2Via2l0L3dlYmtpdHdlYmhpc3RvcnlpdGVtLmg+
CkBAIC0xNjUsNiArMTY2LDggQEAgc3RydWN0IF9XZWJLaXRXZWJWaWV3Q2xhc3MgewogICAgIGdi
b29sZWFuICAgICAgICAgICAgICAgICAgICgqIG1vdmVfY3Vyc29yKSAgICAgICAgICAgIChXZWJL
aXRXZWJWaWV3ICAgICAgICAqd2ViX3ZpZXcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEd0a01vdmVtZW50U3RlcCAgICAgICBzdGVw
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBnaW50ICAgICAgICAgICAgICAgICAgY291bnQpOworICAgIGdib29sZWFuICAgICAgICAg
ICAgICAgICAgICgqIHJ1bl9maWxlX2Nob29zZXIpICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAg
ICAgICAgKndlYl92aWV3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QgKnJlcXVlc3QpOwog
CiAgICAgLyoKICAgICAgKiBpbnRlcm5hbApJbmRleDogV2ViS2l0LXIxMTgzMzYvU291cmNlL1dl
YktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXdwcml2YXRlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
S2l0LXIxMTgzMzYub3JpZy9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlld3By
aXZhdGUuaAorKysgV2ViS2l0LXIxMTgzMzYvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtp
dHdlYnZpZXdwcml2YXRlLmgKQEAgLTEyNCw2ICsxMjQsOCBAQCBHdGtNZW51KiB3ZWJraXRfd2Vi
X3ZpZXdfZ2V0X2NvbnRleHRfbWVuCiB2b2lkIHdlYlZpZXdFbnRlckZ1bGxzY3JlZW4oV2ViS2l0
V2ViVmlldyogd2ViVmlldywgV2ViQ29yZTo6Tm9kZSopOwogdm9pZCB3ZWJWaWV3RXhpdEZ1bGxz
Y3JlZW4oV2ViS2l0V2ViVmlldyogd2ViVmlldyk7CiAKK3ZvaWQgd2Via2l0X3dlYl92aWV3X3J1
bl9maWxlX2Nob29zZXJfcmVxdWVzdChXZWJLaXRXZWJWaWV3KiwgV2ViS2l0RmlsZUNob29zZXJS
ZXF1ZXN0Kik7CisKICNpZiBFTkFCTEUoSUNPTkRBVEFCQVNFKQogdm9pZCB3ZWJraXRXZWJWaWV3
UmVnaXN0ZXJGb3JJY29uTm90aWZpY2F0aW9uKFdlYktpdFdlYlZpZXcqLCBib29sIHNob3VsZFJl
Z2lzdGVyKTsKIHZvaWQgd2Via2l0V2ViVmlld0ljb25Mb2FkZWQoV2ViS2l0RmF2aWNvbkRhdGFi
YXNlKiwgY29uc3QgY2hhciogZnJhbWVVUkksIFdlYktpdFdlYlZpZXcqKTsKSW5kZXg6IFdlYktp
dC1yMTE4MzM2L1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3R3ZWJ2aWV3LmMKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViS2l0LXIxMTgzMzYub3JpZy9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0d2Vi
dmlldy5jCisrKyBXZWJLaXQtcjExODMzNi9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0d2Vi
dmlldy5jCkBAIC01MDYsNiArNTA2LDIwNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF93ZWJf
dmlld19mdWxsc2NyCiAgICAgZ3RrX3dpZGdldF9kZXN0cm95KHdpbmRvdyk7CiB9CiAKK3N0YXRp
YyBnYm9vbGVhbiBjaGVja01pbWVUeXBlRm9yRmlsdGVyKEd0a0ZpbGVGaWx0ZXIqIGZpbHRlciwg
Y29uc3QgZ2NoYXIqIG1pbWVUeXBlKQoreworICAgIEd0a0ZpbGVGaWx0ZXJJbmZvIGZpbHRlcklu
Zm87CisgICAgZmlsdGVySW5mby5jb250YWlucyA9IEdUS19GSUxFX0ZJTFRFUl9NSU1FX1RZUEU7
CisgICAgZmlsdGVySW5mby5taW1lX3R5cGUgPSBtaW1lVHlwZTsKKyAgICByZXR1cm4gZ3RrX2Zp
bGVfZmlsdGVyX2ZpbHRlcihmaWx0ZXIsICZmaWx0ZXJJbmZvKTsKK30KKworc3RhdGljIGdib29s
ZWFuIHJ1bl9maWxlX2Nob29zZXJfY2JfMShXZWJLaXRXZWJWaWV3KiB3ZWJ2aWV3LCBXZWJLaXRG
aWxlQ2hvb3NlclJlcXVlc3QqIHJlcXVlc3QsIGdwb2ludGVyIGRhdGEpCit7CisgICAgY29uc3Qg
Z2NoYXIqIGNvbnN0KiBtaW1lVHlwZXM7CisgICAgY29uc3QgZ2NoYXIqIGNvbnN0KiBzZWxlY3Rl
ZEZpbGVzOworICAgIEd0a0ZpbGVGaWx0ZXIgKmZpbHRlcjsKKworICAgIGdfYXNzZXJ0KCF3ZWJr
aXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X3NlbGVjdF9tdWx0aXBsZShyZXF1ZXN0KSk7CisK
KyAgICBtaW1lVHlwZXMgPSB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X21pbWVfdHlw
ZXMocmVxdWVzdCk7CisgICAgZ19hc3NlcnQoIW1pbWVUeXBlcyk7CisgICAgZmlsdGVyID0gd2Vi
a2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9taW1lX3R5cGVzX2ZpbHRlcihyZXF1ZXN0KTsK
KyAgICBnX2Fzc2VydCghZmlsdGVyKTsKKyAgICBzZWxlY3RlZEZpbGVzID0gd2Via2l0X2ZpbGVf
Y2hvb3Nlcl9yZXF1ZXN0X2dldF9zZWxlY3RlZF9maWxlcyhyZXF1ZXN0KTsKKyAgICBnX2Fzc2Vy
dCghc2VsZWN0ZWRGaWxlcyk7CisgICAgd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2NhbmNl
bChyZXF1ZXN0KTsKKworICAgIGdfbWFpbl9sb29wX3F1aXQobG9vcCk7CisgICAgcmV0dXJuIFRS
VUU7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiBydW5fZmlsZV9jaG9vc2VyX2NiXzIoV2ViS2l0V2Vi
Vmlldyogd2VidmlldywgV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0KiByZXF1ZXN0LCBncG9pbnRl
ciBkYXRhKQoreworICAgIGNvbnN0IGdjaGFyKiBjb25zdCogbWltZVR5cGVzOworICAgIGNvbnN0
IGdjaGFyKiBjb25zdCogc2VsZWN0ZWRGaWxlczsKKyAgICBHdGtGaWxlRmlsdGVyICpmaWx0ZXI7
CisKKyAgICBnX2Fzc2VydCh3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X3NlbGVjdF9t
dWx0aXBsZShyZXF1ZXN0KSk7CisKKyAgICBtaW1lVHlwZXMgPSB3ZWJraXRfZmlsZV9jaG9vc2Vy
X3JlcXVlc3RfZ2V0X21pbWVfdHlwZXMocmVxdWVzdCk7CisgICAgZ19hc3NlcnQoIW1pbWVUeXBl
cyk7CisgICAgZmlsdGVyID0gd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9taW1lX3R5
cGVzX2ZpbHRlcihyZXF1ZXN0KTsKKyAgICBnX2Fzc2VydCghZmlsdGVyKTsKKyAgICBzZWxlY3Rl
ZEZpbGVzID0gd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9zZWxlY3RlZF9maWxlcyhy
ZXF1ZXN0KTsKKyAgICBnX2Fzc2VydCghc2VsZWN0ZWRGaWxlcyk7CisKKyAgICAvLyBTZWxlY3Qg
c29tZSBmaWxlcy4KKyAgICBjb25zdCBnY2hhciogZmlsZXNUb1NlbGVjdFs0XSA9IHsgIi9mb28i
LCAiL2Zvby9iYXIiLCAiL2Zvby9iYXIvYmF6IiwgMCB9OworICAgIHdlYmtpdF9maWxlX2Nob29z
ZXJfcmVxdWVzdF9zZWxlY3RfZmlsZXMocmVxdWVzdCwgZmlsZXNUb1NlbGVjdCk7CisKKyAgICAv
LyBDaGVjayB0aGUgZmlsZXMgdGhhdCBoYXZlIGJlZW4ganVzdCBzZWxlY3RlZC4KKyAgICBzZWxl
Y3RlZEZpbGVzID0gd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9zZWxlY3RlZF9maWxl
cyhyZXF1ZXN0KTsKKyAgICBnX2Fzc2VydChzZWxlY3RlZEZpbGVzKTsKKyAgICBnX2Fzc2VydF9j
bXBzdHIoc2VsZWN0ZWRGaWxlc1swXSwgPT0sICIvZm9vIik7CisgICAgZ19hc3NlcnRfY21wc3Ry
KHNlbGVjdGVkRmlsZXNbMV0sID09LCAiL2Zvby9iYXIiKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIo
c2VsZWN0ZWRGaWxlc1syXSwgPT0sICIvZm9vL2Jhci9iYXoiKTsKKyAgICBnX2Fzc2VydCghc2Vs
ZWN0ZWRGaWxlc1szXSk7CisKKyAgICBnX21haW5fbG9vcF9xdWl0KGxvb3ApOworICAgIHJldHVy
biBUUlVFOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gcnVuX2ZpbGVfY2hvb3Nlcl9jYl8zKFdlYktp
dFdlYlZpZXcqIHdlYnZpZXcsIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCogcmVxdWVzdCwgZ3Bv
aW50ZXIgZGF0YSkKK3sKKyAgICBjb25zdCBnY2hhciogY29uc3QqIHNlbGVjdGVkRmlsZXM7CisK
KyAgICBzZWxlY3RlZEZpbGVzID0gd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9zZWxl
Y3RlZF9maWxlcyhyZXF1ZXN0KTsKKyAgICBnX2Fzc2VydChzZWxlY3RlZEZpbGVzKTsKKyAgICBn
X2Fzc2VydF9jbXBzdHIoc2VsZWN0ZWRGaWxlc1swXSwgPT0sICIvZm9vIik7CisgICAgZ19hc3Nl
cnRfY21wc3RyKHNlbGVjdGVkRmlsZXNbMV0sID09LCAiL2Zvby9iYXIiKTsKKyAgICBnX2Fzc2Vy
dF9jbXBzdHIoc2VsZWN0ZWRGaWxlc1syXSwgPT0sICIvZm9vL2Jhci9iYXoiKTsKKyAgICBnX2Fz
c2VydCghc2VsZWN0ZWRGaWxlc1szXSk7CisgICAgd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0
X2NhbmNlbChyZXF1ZXN0KTsKKworICAgIGdfbWFpbl9sb29wX3F1aXQobG9vcCk7CisgICAgcmV0
dXJuIFRSVUU7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiBydW5fZmlsZV9jaG9vc2VyX2NiXzQoV2Vi
S2l0V2ViVmlldyogd2VidmlldywgV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0KiByZXF1ZXN0LCBn
cG9pbnRlciBkYXRhKQoreworICAgIGNvbnN0IGdjaGFyKiBjb25zdCogbWltZVR5cGVzOworICAg
IGNvbnN0IGdjaGFyKiBjb25zdCogc2VsZWN0ZWRGaWxlczsKKyAgICBHdGtGaWxlRmlsdGVyICpm
aWx0ZXI7CisKKyAgICBnX2Fzc2VydCghd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9z
ZWxlY3RfbXVsdGlwbGUocmVxdWVzdCkpOworCisgICAgbWltZVR5cGVzID0gd2Via2l0X2ZpbGVf
Y2hvb3Nlcl9yZXF1ZXN0X2dldF9taW1lX3R5cGVzKHJlcXVlc3QpOworICAgIGdfYXNzZXJ0KG1p
bWVUeXBlcyk7CisgICAgZ19hc3NlcnRfY21wc3RyKG1pbWVUeXBlc1swXSwgPT0sICJhdWRpby8q
Iik7CisgICAgZ19hc3NlcnRfY21wc3RyKG1pbWVUeXBlc1sxXSwgPT0sICJ2aWRlby8qIik7Cisg
ICAgZ19hc3NlcnRfY21wc3RyKG1pbWVUeXBlc1syXSwgPT0sICJpbWFnZS8qIik7CisgICAgZ19h
c3NlcnQoIW1pbWVUeXBlc1szXSk7CisKKyAgICBmaWx0ZXIgPSB3ZWJraXRfZmlsZV9jaG9vc2Vy
X3JlcXVlc3RfZ2V0X21pbWVfdHlwZXNfZmlsdGVyKHJlcXVlc3QpOworICAgIGdfYXNzZXJ0KEdU
S19JU19GSUxFX0ZJTFRFUihmaWx0ZXIpKTsKKyAgICBnX2Fzc2VydChjaGVja01pbWVUeXBlRm9y
RmlsdGVyKGZpbHRlciwgImF1ZGlvLyoiKSk7CisgICAgZ19hc3NlcnQoY2hlY2tNaW1lVHlwZUZv
ckZpbHRlcihmaWx0ZXIsICJ2aWRlby8qIikpOworICAgIGdfYXNzZXJ0KGNoZWNrTWltZVR5cGVG
b3JGaWx0ZXIoZmlsdGVyLCAiaW1hZ2UvKiIpKTsKKworICAgIHNlbGVjdGVkRmlsZXMgPSB3ZWJr
aXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X3NlbGVjdGVkX2ZpbGVzKHJlcXVlc3QpOworICAg
IGdfYXNzZXJ0KCFzZWxlY3RlZEZpbGVzKTsKKyAgICB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVl
c3RfY2FuY2VsKHJlcXVlc3QpOworCisgICAgZ19tYWluX2xvb3BfcXVpdChsb29wKTsKKyAgICBy
ZXR1cm4gVFJVRTsKK30KKwordm9pZCBkb01vdXNlQnV0dG9uRXZlbnQoR3RrV2lkZ2V0ICp3aWRn
ZXQsIEdka0V2ZW50VHlwZSBldmVudF90eXBlLCBpbnQgeCwgaW50IHksIHVuc2lnbmVkIGludCBi
dXR0b24sIHVuc2lnbmVkIGludCBtb2RpZmllcnMpCit7CisgICAgaW50IHhfcm9vdCwgeV9yb290
OworCisgICAgZ19hc3NlcnQoZ3RrX3dpZGdldF9nZXRfcmVhbGl6ZWQod2lkZ2V0KSk7CisKKyAg
ICBHZGtFdmVudCAqZXZlbnQgPSBnZGtfZXZlbnRfbmV3KGV2ZW50X3R5cGUpOworICAgIGV2ZW50
LT5idXR0b24ud2luZG93ID0gZ3RrX3dpZGdldF9nZXRfd2luZG93KHdpZGdldCk7CisgICAgZ19v
YmplY3RfcmVmKGV2ZW50LT5idXR0b24ud2luZG93KTsKKworICAgIGV2ZW50LT5idXR0b24udGlt
ZSA9IEdES19DVVJSRU5UX1RJTUU7CisgICAgZXZlbnQtPmJ1dHRvbi54ID0geDsKKyAgICBldmVu
dC0+YnV0dG9uLnkgPSB5OworICAgIGV2ZW50LT5idXR0b24uYXhlcyA9IDA7CisgICAgZXZlbnQt
PmJ1dHRvbi5zdGF0ZSA9IG1vZGlmaWVyczsKKyAgICBldmVudC0+YnV0dG9uLmJ1dHRvbiA9IGJ1
dHRvbjsKKworICAgIGV2ZW50LT5idXR0b24uZGV2aWNlID0gZ2RrX2RldmljZV9tYW5hZ2VyX2dl
dF9jbGllbnRfcG9pbnRlcihnZGtfZGlzcGxheV9nZXRfZGV2aWNlX21hbmFnZXIoZ3RrX3dpZGdl
dF9nZXRfZGlzcGxheSh3aWRnZXQpKSk7CisKKyAgICBnZGtfd2luZG93X2dldF9yb290X2Nvb3Jk
cyhndGtfd2lkZ2V0X2dldF93aW5kb3cod2lkZ2V0KSwgeCwgeSwgJnhfcm9vdCwgJnlfcm9vdCk7
CisgICAgZXZlbnQtPmJ1dHRvbi54X3Jvb3QgPSB4X3Jvb3Q7CisgICAgZXZlbnQtPmJ1dHRvbi55
X3Jvb3QgPSB5X3Jvb3Q7CisgICAgZ3RrX21haW5fZG9fZXZlbnQoZXZlbnQpOworfQorCitzdGF0
aWMgdm9pZCBjbGlja01vdXNlQnV0dG9uKEd0a1dpZGdldCAqd2lkZ2V0LCBpbnQgeCwgaW50IHks
IHVuc2lnbmVkIGludCBidXR0b24sIHVuc2lnbmVkIGludCBtb2RpZmllcnMpCit7CisgICAgZG9N
b3VzZUJ1dHRvbkV2ZW50KHdpZGdldCwgR0RLX0JVVFRPTl9QUkVTUywgeCwgeSwgYnV0dG9uLCBt
b2RpZmllcnMpOworICAgIGRvTW91c2VCdXR0b25FdmVudCh3aWRnZXQsIEdES19CVVRUT05fUkVM
RUFTRSwgeCwgeSwgYnV0dG9uLCBtb2RpZmllcnMpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gY2xp
Y2tNb3VzZUJ1dHRvbkFuZFdhaXRGb3JGaWxlQ2hvb3NlclJlcXVlc3QoV2ViS2l0V2ViVmlldyog
d2ViVmlldykKK3sKKyAgICBjbGlja01vdXNlQnV0dG9uKEdUS19XSURHRVQod2ViVmlldyksIDUs
IDUsIDEsIDApOworICAgIHJldHVybiBUUlVFOworfQorCitzdGF0aWMgdm9pZCB0ZXN0X3dlYmtp
dF93ZWJfdmlld19maWxlX2Nob29zZXIoKQoreworICAgIGNvbnN0IGdjaGFyICpodG1sX2Zvcm1h
dF9iYXNlID0gIjxodG1sPjxib2R5PiIKKyAgICAgICAgICAgICI8aW5wdXQgc3R5bGU9J3Bvc2l0
aW9uOmFic29sdXRlO2xlZnQ6MDt0b3A6MDttYXJnaW46MDtwYWRkaW5nOjAnIHR5cGU9J2ZpbGUn
ICVzLz4iCisgICAgICAgICAgICAiPC9ib2R5PjwvaHRtbD4iOworICAgIGdjaGFyICpodG1sX2Zv
cm1hdDsKKyAgICBHdGtXaWRnZXQqIHdpbmRvdzsKKyAgICBHdGtXaWRnZXQqIHdlYl92aWV3Owor
ICAgIGd1bG9uZyBoYW5kbGVyOworCisgICAgd2luZG93ID0gZ3RrX3dpbmRvd19uZXcoR1RLX1dJ
TkRPV19UT1BMRVZFTCk7CisgICAgd2ViX3ZpZXcgPSB3ZWJraXRfd2ViX3ZpZXdfbmV3KCk7Cisg
ICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUih3aW5kb3cpLCB3ZWJfdmlldyk7Cisg
ICAgZ3RrX3dpZGdldF9zaG93X2FsbCh3aW5kb3cpOworCisgICAgbG9vcCA9IGdfbWFpbl9sb29w
X25ldyhOVUxMLCBUUlVFKTsKKworICAgIC8vIE11bHRpcGxlIHNlbGVjdGlvbnMgbm90IGFsbG93
ZWQsIG5vIE1JTUUgZmlsdGVyaW5nLgorICAgIGhhbmRsZXIgPSBnX3NpZ25hbF9jb25uZWN0KHdl
Yl92aWV3LCAicnVuLWZpbGUtY2hvb3NlciIsIEdfQ0FMTEJBQ0socnVuX2ZpbGVfY2hvb3Nlcl9j
Yl8xKSwgTlVMTCk7CisgICAgaHRtbF9mb3JtYXQgPSBnX3N0cmR1cF9wcmludGYoaHRtbF9mb3Jt
YXRfYmFzZSwgIiIpOworICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3N0cmluZyhXRUJLSVRfV0VC
X1ZJRVcod2ViX3ZpZXcpLCBodG1sX2Zvcm1hdCwgTlVMTCwgTlVMTCwgTlVMTCk7CisgICAgZ19m
cmVlKGh0bWxfZm9ybWF0KTsKKworICAgIGdfdGltZW91dF9hZGQoMTAwLCAoR1NvdXJjZUZ1bmMp
IGNsaWNrTW91c2VCdXR0b25BbmRXYWl0Rm9yRmlsZUNob29zZXJSZXF1ZXN0LCBXRUJLSVRfV0VC
X1ZJRVcod2ViX3ZpZXcpKTsKKyAgICBnX21haW5fbG9vcF9ydW4obG9vcCk7CisKKyAgICBnX3Np
Z25hbF9oYW5kbGVyX2Rpc2Nvbm5lY3Qod2ViX3ZpZXcsIGhhbmRsZXIpOworCisgICAgLy8gTXVs
dGlwbGUgc2VsZWN0aW9ucyBhbGxvd2VkLCBubyBNSU1FIGZpbHRlcmluZywgc29tZSBwcmUtc2Vs
ZWN0ZWQgZmlsZXMuCisgICAgaGFuZGxlciA9IGdfc2lnbmFsX2Nvbm5lY3Qod2ViX3ZpZXcsICJy
dW4tZmlsZS1jaG9vc2VyIiwgR19DQUxMQkFDSyhydW5fZmlsZV9jaG9vc2VyX2NiXzIpLCBOVUxM
KTsKKyAgICBodG1sX2Zvcm1hdCA9IGdfc3RyZHVwX3ByaW50ZihodG1sX2Zvcm1hdF9iYXNlLCAi
bXVsdGlwbGUiKTsKKyAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9zdHJpbmcoV0VCS0lUX1dFQl9W
SUVXKHdlYl92aWV3KSwgaHRtbF9mb3JtYXQsIE5VTEwsIE5VTEwsIE5VTEwpOworICAgIGdfZnJl
ZShodG1sX2Zvcm1hdCk7CisKKyAgICBnX3RpbWVvdXRfYWRkKDEwMCwgKEdTb3VyY2VGdW5jKSBj
bGlja01vdXNlQnV0dG9uQW5kV2FpdEZvckZpbGVDaG9vc2VyUmVxdWVzdCwgV0VCS0lUX1dFQl9W
SUVXKHdlYl92aWV3KSk7CisgICAgZ19tYWluX2xvb3BfcnVuKGxvb3ApOworCisgICAgZ19zaWdu
YWxfaGFuZGxlcl9kaXNjb25uZWN0KHdlYl92aWV3LCBoYW5kbGVyKTsKKworICAgIC8vIFBlcmZv
cm0gYW5vdGhlciByZXF1ZXN0IHRvIGNoZWNrIGlmIHRoZSBsaXN0IG9mIGZpbGVzIHNlbGVjdGVk
CisgICAgLy8gaW4gdGhlIHByZXZpb3VzIHN0ZXAgYXBwZWFycyBub3cgYXMgcGFydCBvZiB0aGUg
bmV3IHJlcXVlc3QuCisgICAgaGFuZGxlciA9IGdfc2lnbmFsX2Nvbm5lY3Qod2ViX3ZpZXcsICJy
dW4tZmlsZS1jaG9vc2VyIiwgR19DQUxMQkFDSyhydW5fZmlsZV9jaG9vc2VyX2NiXzMpLCBOVUxM
KTsKKyAgICBnX3RpbWVvdXRfYWRkKDEwMCwgKEdTb3VyY2VGdW5jKSBjbGlja01vdXNlQnV0dG9u
QW5kV2FpdEZvckZpbGVDaG9vc2VyUmVxdWVzdCwgV0VCS0lUX1dFQl9WSUVXKHdlYl92aWV3KSk7
CisgICAgZ19tYWluX2xvb3BfcnVuKGxvb3ApOworCisgICAgZ19zaWduYWxfaGFuZGxlcl9kaXNj
b25uZWN0KHdlYl92aWV3LCBoYW5kbGVyKTsKKworICAgIC8vIE11bHRpcGxlIHNlbGVjdGlvbnMg
bm90IGFsbG93ZWQsIG9ubHkgYWNjZXB0IGltYWdlcywgYXVkaW8gYW5kIHZpZGVvIGZpbGVzLi4K
KyAgICBoYW5kbGVyID0gZ19zaWduYWxfY29ubmVjdCh3ZWJfdmlldywgInJ1bi1maWxlLWNob29z
ZXIiLCBHX0NBTExCQUNLKHJ1bl9maWxlX2Nob29zZXJfY2JfNCksIE5VTEwpOworICAgIGh0bWxf
Zm9ybWF0ID0gZ19zdHJkdXBfcHJpbnRmKGh0bWxfZm9ybWF0X2Jhc2UsICJhY2NlcHQ9J2F1ZGlv
LyosdmlkZW8vKixpbWFnZS8qJyIpOworICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3N0cmluZyhX
RUJLSVRfV0VCX1ZJRVcod2ViX3ZpZXcpLCBodG1sX2Zvcm1hdCwgTlVMTCwgTlVMTCwgTlVMTCk7
CisgICAgZ19mcmVlKGh0bWxfZm9ybWF0KTsKKworICAgIGdfdGltZW91dF9hZGQoMTAwLCAoR1Nv
dXJjZUZ1bmMpIGNsaWNrTW91c2VCdXR0b25BbmRXYWl0Rm9yRmlsZUNob29zZXJSZXF1ZXN0LCBX
RUJLSVRfV0VCX1ZJRVcod2ViX3ZpZXcpKTsKKyAgICBnX21haW5fbG9vcF9ydW4obG9vcCk7CisK
KyAgICBnX3NpZ25hbF9oYW5kbGVyX2Rpc2Nvbm5lY3Qod2ViX3ZpZXcsIGhhbmRsZXIpOworICAg
IGd0a193aWRnZXRfZGVzdHJveSh3aW5kb3cpOworfQorCiBpbnQgbWFpbihpbnQgYXJnYywgY2hh
cioqIGFyZ3YpCiB7CiAgICAgU291cFNlcnZlciogc2VydmVyOwpAQCAtNTM3LDYgKzczOCw3IEBA
IGludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKICAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93
ZWJraXQvd2Vidmlldy93ZWJ2aWV3LWRvZXMtbm90LXN0ZWFsLWZvY3VzIiwgdGVzdF93ZWJraXRf
d2ViX3ZpZXdfZG9lc19ub3Rfc3RlYWxfZm9jdXMpOwogICAgIGdfdGVzdF9hZGRfZGF0YV9mdW5j
KCIvd2Via2l0L3dlYnZpZXcvZnVsbHNjcmVlbiIsIEdJTlRfVE9fUE9JTlRFUihGQUxTRSksIHRl
c3Rfd2Via2l0X3dlYl92aWV3X2Z1bGxzY3JlZW4pOwogICAgIGdfdGVzdF9hZGRfZGF0YV9mdW5j
KCIvd2Via2l0L3dlYnZpZXcvZnVsbHNjcmVlbi1ibG9ja2VkIiwgR0lOVF9UT19QT0lOVEVSKFRS
VUUpLCB0ZXN0X3dlYmtpdF93ZWJfdmlld19mdWxsc2NyZWVuKTsKKyAgICBnX3Rlc3RfYWRkX2Z1
bmMoIi93ZWJraXQvd2Vidmlldy9maWxlLWNob29zZXIiLCB0ZXN0X3dlYmtpdF93ZWJfdmlld19m
aWxlX2Nob29zZXIpOwogCiAgICAgcmV0dXJuIGdfdGVzdF9ydW4gKCk7CiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>143953</attachid>
            <date>2012-05-24 19:59:19 -0700</date>
            <delta_ts>2012-05-25 06:00:22 -0700</delta_ts>
            <desc>Attempting to solve test failure</desc>
            <filename>foo</filename>
            <type>text/plain</type>
            <size>2035</size>
            <attacher name="Daniel Drake">dsd</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdC1yMTE4MzM2L1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRmaWxl
Y2hvb3NlcnJlcXVlc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC1yMTE4MzM2Lm9yaWcvU291
cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGZpbGVjaG9vc2VycmVxdWVzdC5jcHAKKysrIFdl
YktpdC1yMTE4MzM2L1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRmaWxlY2hvb3NlcnJl
cXVlc3QuY3BwCkBAIC0yOTMsMTEgKzI5MywxNiBAQCB2b2lkIHdlYmtpdF9maWxlX2Nob29zZXJf
cmVxdWVzdF9zZWxlY3RfCiAgICAgZ19yZXR1cm5faWZfZmFpbChmaWxlcyk7CiAKICAgICBWZWN0
b3I8U3RyaW5nPiBuYW1lczsKKyAgICBHUmVmUHRyPEdQdHJBcnJheT4gc2VsZWN0ZWRGaWxlcyA9
IGFkb3B0R1JlZihnX3B0cl9hcnJheV9uZXdfd2l0aF9mcmVlX2Z1bmMoZ19mcmVlKSk7CiAKLSAg
ICBmb3IgKGludCBpID0gMDsgZmlsZXNbaV07IGkrKykKKyAgICBmb3IgKGludCBpID0gMDsgZmls
ZXNbaV07IGkrKykgewogICAgICAgICBuYW1lcy5hcHBlbmQoZmlsZW5hbWVUb1N0cmluZyhmaWxl
c1tpXSkpOworICAgICAgICBnX3B0cl9hcnJheV9hZGQoc2VsZWN0ZWRGaWxlcy5nZXQoKSwgZ19z
dHJkdXAoZmlsZXNbaV0pKTsKKyAgICB9CiAKKyAgICBnX3B0cl9hcnJheV9hZGQoc2VsZWN0ZWRG
aWxlcy5nZXQoKSwgMCk7CiAgICAgcmVxdWVzdC0+cHJpdi0+Y2hvb3Nlci0+Y2hvb3NlRmlsZXMo
bmFtZXMpOworICAgIHJlcXVlc3QtPnByaXYtPnNlbGVjdGVkRmlsZXMgPSBzZWxlY3RlZEZpbGVz
OwogfQogCiAvKioKQEAgLTMyMiwyNSArMzI3LDEyIEBAIHZvaWQgd2Via2l0X2ZpbGVfY2hvb3Nl
cl9yZXF1ZXN0X3NlbGVjdF8KICAqLwogY29uc3QgZ2NoYXIqIGNvbnN0KiB3ZWJraXRfZmlsZV9j
aG9vc2VyX3JlcXVlc3RfZ2V0X3NlbGVjdGVkX2ZpbGVzKFdlYktpdEZpbGVDaG9vc2VyUmVxdWVz
dCogcmVxdWVzdCkKIHsKKyAgICBnX3ByaW50KCJ3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3Rf
Z2V0X3NlbGVjdGVkX2ZpbGVzXG4iKTsKICAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRf
SVNfRklMRV9DSE9PU0VSX1JFUVVFU1QocmVxdWVzdCksIDApOwogICAgIGlmIChyZXF1ZXN0LT5w
cml2LT5zZWxlY3RlZEZpbGVzKQogICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxnY2hh
cioqPihyZXF1ZXN0LT5wcml2LT5zZWxlY3RlZEZpbGVzLT5wZGF0YSk7Ci0KLSAgICBGaWxlQ2hv
b3NlclNldHRpbmdzIHNldHRpbmdzID0gcmVxdWVzdC0+cHJpdi0+Y2hvb3Nlci0+c2V0dGluZ3Mo
KTsKLSAgICBzaXplX3QgbnVtT2ZGaWxlcyA9IHNldHRpbmdzLnNlbGVjdGVkRmlsZXMuc2l6ZSgp
OwotICAgIGlmICghbnVtT2ZGaWxlcykKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXF1ZXN0
LT5wcml2LT5zZWxlY3RlZEZpbGVzID0gYWRvcHRHUmVmKGdfcHRyX2FycmF5X25ld193aXRoX2Zy
ZWVfZnVuYyhnX2ZyZWUpKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bU9mRmlsZXM7
ICsraSkgewotICAgICAgICBpZiAoc2V0dGluZ3Muc2VsZWN0ZWRGaWxlc1tpXS5pc0VtcHR5KCkp
Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgQ1N0cmluZyBmaWxlbmFtZSA9IGZpbGVT
eXN0ZW1SZXByZXNlbnRhdGlvbihzZXR0aW5ncy5zZWxlY3RlZEZpbGVzW2ldKTsKLSAgICAgICAg
Z19wdHJfYXJyYXlfYWRkKHJlcXVlc3QtPnByaXYtPnNlbGVjdGVkRmlsZXMuZ2V0KCksIGdfc3Ry
ZHVwKGZpbGVuYW1lLmRhdGEoKSkpOwotICAgIH0KLSAgICBnX3B0cl9hcnJheV9hZGQocmVxdWVz
dC0+cHJpdi0+c2VsZWN0ZWRGaWxlcy5nZXQoKSwgMCk7Ci0KLSAgICByZXR1cm4gcmVpbnRlcnBy
ZXRfY2FzdDxnY2hhcioqPihyZXF1ZXN0LT5wcml2LT5zZWxlY3RlZEZpbGVzLT5wZGF0YSk7Cisg
ICAgZWxzZQorICAgICAgICByZXR1cm4gTlVMTDsKIH0KIAogLyoqCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>144053</attachid>
            <date>2012-05-25 06:00:22 -0700</date>
            <delta_ts>2012-05-29 07:35:47 -0700</delta_ts>
            <desc>run-file-chooser ready for review</desc>
            <filename>filechooser.patch</filename>
            <type>text/plain</type>
            <size>43206</size>
            <attacher name="Daniel Drake">dsd</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdC1yMTE4MzM2L1NvdXJjZS9XZWJLaXQvZ3RrL0dOVW1ha2VmaWxlLmFtCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYktpdC1yMTE4MzM2Lm9yaWcvU291cmNlL1dlYktpdC9ndGsvR05VbWFr
ZWZpbGUuYW0KKysrIFdlYktpdC1yMTE4MzM2L1NvdXJjZS9XZWJLaXQvZ3RrL0dOVW1ha2VmaWxl
LmFtCkBAIC0xMTQsNiArMTE0LDcgQEAgd2Via2l0Z3RrX3N0YXRpY19oX2FwaSArPSBcCiAJJChz
cmNkaXIpL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRkb3dubG9hZC5oIFwKIAkkKHNy
Y2RpcikvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGVycm9yLmggXAogCSQoc3JjZGly
KS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZmF2aWNvbmRhdGFiYXNlLmggXAorCSQo
c3JjZGlyKS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZmlsZWNob29zZXJyZXF1ZXN0
LmggXAogCSQoc3JjZGlyKS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0Z2VvbG9jYXRp
b25wb2xpY3lkZWNpc2lvbi5oIFwKIAkkKHNyY2RpcikvU291cmNlL1dlYktpdC9ndGsvd2Via2l0
L3dlYmtpdGdsb2JhbHMuaCBcCiAJJChzcmNkaXIpL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93
ZWJraXRoaXR0ZXN0cmVzdWx0LmggXApAQCAtMjIwLDYgKzIyMSw5IEBAIHdlYmtpdGd0a19zb3Vy
Y2VzICs9IFwKIAlTb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZXJyb3IuY3BwIFwKIAlT
b3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZmF2aWNvbmRhdGFiYXNlLmNwcCBcCiAJU291
cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGZhdmljb25kYXRhYmFzZXByaXZhdGUuaCBcCisJ
U291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGZpbGVjaG9vc2VycmVxdWVzdC5jcHAgXAor
CVNvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRmaWxlY2hvb3NlcnJlcXVlc3QuaCBcCisJ
U291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGZpbGVjaG9vc2VycmVxdWVzdHByaXZhdGUu
aCBcCiAJU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGdlb2xvY2F0aW9ucG9saWN5ZGVj
aXNpb24uY3BwIFwKIAlTb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0Z2VvbG9jYXRpb25w
b2xpY3lkZWNpc2lvbnByaXZhdGUuaCBcCiAJU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtp
dGdsb2JhbHMuY3BwIFwKSW5kZXg6IFdlYktpdC1yMTE4MzM2L1NvdXJjZS9XZWJLaXQvZ3RrL1dl
YkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0LXIx
MTgzMzYub3JpZy9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRH
dGsuY3BwCisrKyBXZWJLaXQtcjExODMzNi9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9y
dC9DaHJvbWVDbGllbnRHdGsuY3BwCkBAIC01NSw2ICs1NSw3IEBACiAjaW5jbHVkZSAiV2ViS2l0
RE9NQmluZGluZy5oIgogI2luY2x1ZGUgIldlYktpdERPTUhUTUxFbGVtZW50UHJpdmF0ZS5oIgog
I2luY2x1ZGUgIldpbmRvd0ZlYXR1cmVzLmgiCisjaW5jbHVkZSAid2Via2l0ZmlsZWNob29zZXJy
ZXF1ZXN0cHJpdmF0ZS5oIgogI2luY2x1ZGUgIndlYmtpdGdlb2xvY2F0aW9ucG9saWN5ZGVjaXNp
b24uaCIKICNpbmNsdWRlICJ3ZWJraXRnZW9sb2NhdGlvbnBvbGljeWRlY2lzaW9ucHJpdmF0ZS5o
IgogI2luY2x1ZGUgIndlYmtpdG5ldHdvcmtyZXF1ZXN0LmgiCkBAIC04MTQsNDAgKzgxNSw4IEBA
IHZvaWQgQ2hyb21lQ2xpZW50OjpyZWFjaGVkQXBwbGljYXRpb25DYWMKIAogdm9pZCBDaHJvbWVD
bGllbnQ6OnJ1bk9wZW5QYW5lbChGcmFtZSosIFBhc3NSZWZQdHI8RmlsZUNob29zZXI+IHBycEZp
bGVDaG9vc2VyKQogewotICAgIFJlZlB0cjxGaWxlQ2hvb3Nlcj4gY2hvb3NlciA9IHBycEZpbGVD
aG9vc2VyOwotCi0gICAgR3RrV2lkZ2V0KiB0b3BsZXZlbCA9IGd0a193aWRnZXRfZ2V0X3RvcGxl
dmVsKEdUS19XSURHRVQobV93ZWJWaWV3KSk7Ci0gICAgaWYgKCF3aWRnZXRJc09uc2NyZWVuVG9w
bGV2ZWxXaW5kb3codG9wbGV2ZWwpKQotICAgICAgICB0b3BsZXZlbCA9IDA7Ci0KLSAgICBHdGtX
aWRnZXQqIGRpYWxvZyA9IGd0a19maWxlX2Nob29zZXJfZGlhbG9nX25ldyhfKCJVcGxvYWQgRmls
ZSIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHRvcGxldmVsID8gR1RLX1dJTkRPVyh0b3BsZXZlbCkgOiAwLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdUS19GSUxFX0NIT09TRVJfQUNUSU9O
X09QRU4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgR1RLX1NUT0NLX0NBTkNFTCwgR1RLX1JFU1BPTlNFX0NBTkNFTCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHVEtfU1RPQ0tfT1BFTiwgR1RL
X1JFU1BPTlNFX0FDQ0VQVCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBOVUxMKTsKLQotICAgIGd0a19maWxlX2Nob29zZXJfc2V0X3NlbGVjdF9t
dWx0aXBsZShHVEtfRklMRV9DSE9PU0VSKGRpYWxvZyksIGNob29zZXItPnNldHRpbmdzKCkuYWxs
b3dzTXVsdGlwbGVGaWxlcyk7Ci0KLSAgICBpZiAoZ3RrX2RpYWxvZ19ydW4oR1RLX0RJQUxPRyhk
aWFsb2cpKSA9PSBHVEtfUkVTUE9OU0VfQUNDRVBUKSB7Ci0gICAgICAgIGlmIChndGtfZmlsZV9j
aG9vc2VyX2dldF9zZWxlY3RfbXVsdGlwbGUoR1RLX0ZJTEVfQ0hPT1NFUihkaWFsb2cpKSkgewot
ICAgICAgICAgICAgR093blB0cjxHU0xpc3Q+IGZpbGVuYW1lcyhndGtfZmlsZV9jaG9vc2VyX2dl
dF9maWxlbmFtZXMoR1RLX0ZJTEVfQ0hPT1NFUihkaWFsb2cpKSk7Ci0gICAgICAgICAgICBWZWN0
b3I8U3RyaW5nPiBuYW1lczsKLSAgICAgICAgICAgIGZvciAoR1NMaXN0KiBpdGVtID0gZmlsZW5h
bWVzLmdldCgpIDsgaXRlbSA7IGl0ZW0gPSBpdGVtLT5uZXh0KSB7Ci0gICAgICAgICAgICAgICAg
aWYgKCFpdGVtLT5kYXRhKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
ICAgICAgICBuYW1lcy5hcHBlbmQoZmlsZW5hbWVUb1N0cmluZyhzdGF0aWNfY2FzdDxjaGFyKj4o
aXRlbS0+ZGF0YSkpKTsKLSAgICAgICAgICAgICAgICBnX2ZyZWUoaXRlbS0+ZGF0YSk7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBjaG9vc2VyLT5jaG9vc2VGaWxlcyhuYW1lcyk7Ci0gICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBnY2hhciogZmlsZW5hbWUgPSBndGtfZmlsZV9jaG9v
c2VyX2dldF9maWxlbmFtZShHVEtfRklMRV9DSE9PU0VSKGRpYWxvZykpOwotICAgICAgICAgICAg
aWYgKGZpbGVuYW1lKQotICAgICAgICAgICAgICAgIGNob29zZXItPmNob29zZUZpbGUoZmlsZW5h
bWVUb1N0cmluZyhmaWxlbmFtZSkpOwotICAgICAgICAgICAgZ19mcmVlKGZpbGVuYW1lKTsKLSAg
ICAgICAgfQotICAgIH0KLSAgICBndGtfd2lkZ2V0X2Rlc3Ryb3koZGlhbG9nKTsKKyAgICBHUmVm
UHRyPFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdD4gcmVxdWVzdCA9IGFkb3B0R1JlZih3ZWJraXRf
ZmlsZV9jaG9vc2VyX3JlcXVlc3RfY3JlYXRlKHBycEZpbGVDaG9vc2VyKSk7CisgICAgd2Via2l0
X3dlYl92aWV3X3J1bl9maWxlX2Nob29zZXJfcmVxdWVzdChtX3dlYlZpZXcsIHJlcXVlc3QuZ2V0
KCkpOwogfQogCiB2b2lkIENocm9tZUNsaWVudDo6bG9hZEljb25Gb3JGaWxlcyhjb25zdCBWZWN0
b3I8V1RGOjpTdHJpbmc+JiBmaWxlbmFtZXMsIFdlYkNvcmU6OkZpbGVJY29uTG9hZGVyKiBsb2Fk
ZXIpCkluZGV4OiBXZWJLaXQtcjExODMzNi9Tb3VyY2UvV2ViS2l0L2d0ay9kb2NzL3dlYmtpdGd0
ay1kb2NzLnNnbWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0LXIxMTgzMzYub3JpZy9Tb3VyY2UvV2Vi
S2l0L2d0ay9kb2NzL3dlYmtpdGd0ay1kb2NzLnNnbWwKKysrIFdlYktpdC1yMTE4MzM2L1NvdXJj
ZS9XZWJLaXQvZ3RrL2RvY3Mvd2Via2l0Z3RrLWRvY3Muc2dtbApAQCAtNDEsNiArNDEsNyBAQAog
ICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC93ZWJraXRpY29uZGF0YWJhc2UueG1sIi8+CiAgICAg
PHhpOmluY2x1ZGUgaHJlZj0ieG1sL3dlYmtpdHNwZWxsY2hlY2tlci54bWwiLz4KICAgICA8eGk6
aW5jbHVkZSBocmVmPSJ4bWwvd2Via2l0ZmF2aWNvbmRhdGFiYXNlLnhtbCIvPgorICAgIDx4aTpp
bmNsdWRlIGhyZWY9InhtbC93ZWJraXRmaWxlY2hvb3NlcnJlcXVlc3QueG1sIi8+CiAgIDwvY2hh
cHRlcj4KIAogICA8Y2hhcHRlcj4KSW5kZXg6IFdlYktpdC1yMTE4MzM2L1NvdXJjZS9XZWJLaXQv
Z3RrL2RvY3Mvd2Via2l0Z3RrLXNlY3Rpb25zLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQtcjEx
ODMzNi5vcmlnL1NvdXJjZS9XZWJLaXQvZ3RrL2RvY3Mvd2Via2l0Z3RrLXNlY3Rpb25zLnR4dAor
KysgV2ViS2l0LXIxMTgzMzYvU291cmNlL1dlYktpdC9ndGsvZG9jcy93ZWJraXRndGstc2VjdGlv
bnMudHh0CkBAIC03MDMsNiArNzAzLDMwIEBAIFdlYktpdEZhdmljb25EYXRhYmFzZVByaXZhdGUK
IDwvU0VDVElPTj4KIAogPFNFQ1RJT04+Cis8RklMRT53ZWJraXRmaWxlY2hvb3NlcnJlcXVlc3Q8
L0ZJTEU+CitXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QKK3dlYmtpdF9maWxlX2Nob29zZXJfcmVx
dWVzdF9nZXRfc2VsZWN0X211bHRpcGxlCit3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0
X21pbWVfdHlwZXMKK3dlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfbWltZV90eXBlc19m
aWx0ZXIKK3dlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfc2VsZWN0ZWRfZmlsZXMKK3dl
YmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9zZWxlY3RfZmlsZXMKK3dlYmtpdF9maWxlX2Nob29z
ZXJfcmVxdWVzdF9jYW5jZWwKKworPFNVQlNFQ1RJT04gU3RhbmRhcmQ+CitXZWJLaXRGaWxlQ2hv
b3NlclJlcXVlc3RDbGFzcworV0VCS0lUX1RZUEVfRklMRV9DSE9PU0VSX1JFUVVFU1QKK1dFQktJ
VF9GSUxFX0NIT09TRVJfUkVRVUVTVAorV0VCS0lUX0lTX0ZJTEVfQ0hPT1NFUl9SRVFVRVNUCitX
RUJLSVRfRklMRV9DSE9PU0VSX1JFUVVFU1RfQ0xBU1MKK1dFQktJVF9JU19GSUxFX0NIT09TRVJf
UkVRVUVTVF9DTEFTUworV0VCS0lUX0ZJTEVfQ0hPT1NFUl9SRVFVRVNUX0dFVF9DTEFTUworCis8
U1VCU0VDVElPTiBQcml2YXRlPgorV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0UHJpdmF0ZQord2Vi
a2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF90eXBlCis8L1NFQ1RJT04+CisKKzxTRUNUSU9O
PgogPEZJTEU+d2Via2l0ZGVmaW5lczwvRklMRT4KIFdFQktJVF9BUEkKIFdFQktJVEdUS19BUElf
VkVSU0lPTgpJbmRleDogV2ViS2l0LXIxMTgzMzYvU291cmNlL1dlYktpdC9ndGsvZG9jcy93ZWJr
aXRndGsudHlwZXMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0LXIxMTgzMzYub3JpZy9Tb3VyY2UvV2Vi
S2l0L2d0ay9kb2NzL3dlYmtpdGd0ay50eXBlcworKysgV2ViS2l0LXIxMTgzMzYvU291cmNlL1dl
YktpdC9ndGsvZG9jcy93ZWJraXRndGsudHlwZXMKQEAgLTEsNiArMSw3IEBACiAjaW5jbHVkZSA8
d2Via2l0L3dlYmtpdC5oPgogd2Via2l0X2Rvd25sb2FkX2dldF90eXBlCiB3ZWJraXRfZmF2aWNv
bl9kYXRhYmFzZV9nZXRfdHlwZQord2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF90eXBl
CiB3ZWJraXRfZ2VvbG9jYXRpb25fcG9saWN5X2RlY2lzaW9uX2dldF90eXBlCiB3ZWJraXRfaGl0
X3Rlc3RfcmVzdWx0X2dldF90eXBlCiB3ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfdHlwZQpJbmRl
eDogV2ViS2l0LXIxMTgzMzYvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGZpbGVjaG9v
c2VycmVxdWVzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gL2Rldi9udWxsCisrKyBXZWJLaXQtcjExODMz
Ni9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZmlsZWNob29zZXJyZXF1ZXN0LmNwcApA
QCAtMCwwICsxLDM2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
KyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAid2Via2l0ZmlsZWNob29zZXJyZXF1ZXN0Lmgi
CisKKyNpbmNsdWRlICJGaWxlQ2hvb3Nlci5oIgorI2luY2x1ZGUgIkZpbGVTeXN0ZW0uaCIKKyNp
bmNsdWRlICJ3ZWJraXRmaWxlY2hvb3NlcnJlcXVlc3Rwcml2YXRlLmgiCisjaW5jbHVkZSAid2Vi
a2l0Z2xvYmFsc3ByaXZhdGUuaCIKKyNpbmNsdWRlIDxnbGliL2dpMThuLWxpYi5oPgorI2luY2x1
ZGUgPHd0Zi9nb2JqZWN0L0dPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRy
Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCit1c2luZyBuYW1lc3BhY2UgV2Vi
Q29yZTsKKworLyoqCisgKiBTRUNUSU9OOiBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QKKyAqIEBT
aG9ydF9kZXNjcmlwdGlvbjogQSByZXF1ZXN0IHRvIG9wZW4gYSBmaWxlIGNob29zZXIKKyAqIEBU
aXRsZTogV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0CisgKiBAU2VlX2Fsc286ICNXZWJLaXRXZWJW
aWV3CisgKgorICogV2hlbmV2ZXIgdGhlIHVzZXIgaW50ZXJhY3RzIHdpdGggYW4gJmx0O2lucHV0
IHR5cGU9J2ZpbGUnIC8mZ3Q7CisgKiBIVE1MIGVsZW1lbnQsIFdlYktpdCB3aWxsIG5lZWQgdG8g
c2hvdyBhIGRpYWxvZyB0byBjaG9vc2Ugb25lIG9yCisgKiBtb3JlIGZpbGVzIHRvIGJlIHVwbG9h
ZGVkIHRvIHRoZSBzZXJ2ZXIgYWxvbmcgd2l0aCB0aGUgcmVzdCBvZiB0aGUKKyAqIGZvcm0gZGF0
YS4gRm9yIHRoYXQgdG8gaGFwcGVuIGluIGEgZ2VuZXJhbCB3YXksIGluc3RlYWQgb2YganVzdAor
ICogb3BlbmluZyBhICNHdGtGaWxlQ2hvb3NlckRpYWxvZyAod2hpY2ggbWlnaHQgYmUgbm90IGRl
c2lyYWJsZSBpbgorICogc29tZSBjYXNlcywgd2hpY2ggY291bGQgcHJlZmVyIHRvIHVzZSB0aGVp
ciBvd24gZmlsZSBjaG9vc2VyCisgKiBkaWFsb2cpLCBXZWJLaXQgd2lsbCBmaXJlIHRoZSAjV2Vi
S2l0V2ViVmlldzo6cnVuLWZpbGUtY2hvb3NlcgorICogc2lnbmFsIHdpdGggYSAjV2ViS2l0Rmls
ZUNob29zZXJSZXF1ZXN0IG9iamVjdCwgd2hpY2ggd2lsbCBhbGxvdworICogdGhlIGNsaWVudCBh
cHBsaWNhdGlvbiB0byBzcGVjaWZ5IHRoZSBmaWxlcyB0byBiZSBzZWxlY3RlZCwgdG8KKyAqIGlu
c3BlY3QgdGhlIGRldGFpbHMgb2YgdGhlIHJlcXVlc3QgKGUuZy4gaWYgbXVsdGlwbGUgc2VsZWN0
aW9uCisgKiBzaG91bGQgYmUgYWxsb3dlZCkgYW5kIHRvIGNhbmNlbCB0aGUgcmVxdWVzdCwgaW4g
Y2FzZSBub3RoaW5nIHdhcworICogc2VsZWN0ZWQuCisgKgorICogSW4gY2FzZSB0aGUgY2xpZW50
IGFwcGxpY2F0aW9uIGRvZXMgbm90IHdpc2ggdG8gaGFuZGxlIHRoaXMgc2lnbmFsLAorICogV2Vi
S2l0IHdpbGwgcHJvdmlkZSBhIGRlZmF1bHQgaGFuZGxlciB3aGljaCB3aWxsIGFzeW5jaHJvbm91
c2x5IHJ1bgorICogYSByZWd1bGFyICNHdGtGaWxlQ2hvb3NlckRpYWxvZyBmb3IgdGhlIHVzZXIg
dG8gaW50ZXJhY3Qgd2l0aC4KKyAqLworR19ERUZJTkVfVFlQRShXZWJLaXRGaWxlQ2hvb3NlclJl
cXVlc3QsIHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdCwgR19UWVBFX09CSkVDVCkKKworc3Ry
dWN0IF9XZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3RQcml2YXRlIHsKKyAgICBSZWZQdHI8RmlsZUNo
b29zZXI+IGNob29zZXI7CisgICAgR1JlZlB0cjxHdGtGaWxlRmlsdGVyPiBmaWx0ZXI7CisgICAg
R1JlZlB0cjxHUHRyQXJyYXk+IG1pbWVUeXBlczsKKyAgICBHUmVmUHRyPEdQdHJBcnJheT4gc2Vs
ZWN0ZWRGaWxlczsKK307CisKK2VudW0geworICAgIFBST1BfMCwKKyAgICBQUk9QX0ZJTFRFUiwK
KyAgICBQUk9QX01JTUVfVFlQRVMsCisgICAgUFJPUF9TRUxFQ1RfTVVMVElQTEUsCisgICAgUFJP
UF9TRUxFQ1RFRF9GSUxFUywKK307CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9maWxlX2Nob29zZXJf
cmVxdWVzdF9pbml0KFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCogcmVxdWVzdCkKK3sKKyAgICBy
ZXF1ZXN0LT5wcml2ID0gR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFKHJlcXVlc3QsIFdFQktJ
VF9UWVBFX0ZJTEVfQ0hPT1NFUl9SRVFVRVNULCBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3RQcml2
YXRlKTsKKyAgICBuZXcgKHJlcXVlc3QtPnByaXYpIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdFBy
aXZhdGUoKTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2Zp
bmFsaXplKEdPYmplY3QqIG9iamVjdCkKK3sKKyAgICBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3Qq
IHJlcXVlc3QgPSBXRUJLSVRfRklMRV9DSE9PU0VSX1JFUVVFU1Qob2JqZWN0KTsKKworICAgIHJl
cXVlc3QtPnByaXYtPn5XZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3RQcml2YXRlKCk7CisgICAgR19P
QkpFQ1RfQ0xBU1Mod2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X3BhcmVudF9jbGFzcyktPmZp
bmFsaXplKG9iamVjdCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9maWxlX2Nob29zZXJfcmVx
dWVzdF9nZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wSWQsIEdWYWx1ZSog
dmFsdWUsIEdQYXJhbVNwZWMqIHBhcmFtU3BlYykKK3sKKyAgICBXZWJLaXRGaWxlQ2hvb3NlclJl
cXVlc3QqIHJlcXVlc3QgPSBXRUJLSVRfRklMRV9DSE9PU0VSX1JFUVVFU1Qob2JqZWN0KTsKKyAg
ICBzd2l0Y2ggKHByb3BJZCkgeworICAgIGNhc2UgUFJPUF9GSUxURVI6CisgICAgICAgIGdfdmFs
dWVfc2V0X29iamVjdCh2YWx1ZSwgd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9taW1l
X3R5cGVzX2ZpbHRlcihyZXF1ZXN0KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9N
SU1FX1RZUEVTOgorICAgICAgICBnX3ZhbHVlX3NldF9ib3hlZCh2YWx1ZSwgd2Via2l0X2ZpbGVf
Y2hvb3Nlcl9yZXF1ZXN0X2dldF9taW1lX3R5cGVzKHJlcXVlc3QpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBQUk9QX1NFTEVDVF9NVUxUSVBMRToKKyAgICAgICAgZ192YWx1ZV9zZXRfYm9v
bGVhbih2YWx1ZSwgd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9zZWxlY3RfbXVsdGlw
bGUocmVxdWVzdCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfU0VMRUNURURfRklM
RVM6CisgICAgICAgIGdfdmFsdWVfc2V0X2JveGVkKHZhbHVlLCB3ZWJraXRfZmlsZV9jaG9vc2Vy
X3JlcXVlc3RfZ2V0X3NlbGVjdGVkX2ZpbGVzKHJlcXVlc3QpKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9i
amVjdCwgcHJvcElkLCBwYXJhbVNwZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0
YXRpYyB2b2lkIHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9jbGFzc19pbml0KFdlYktpdEZp
bGVDaG9vc2VyUmVxdWVzdENsYXNzKiByZXF1ZXN0Q2xhc3MpCit7CisgICAgR09iamVjdENsYXNz
KiBvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RDbGFzcyk7CisgICAgb2JqZWN0
Q2xhc3MtPmZpbmFsaXplID0gd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2ZpbmFsaXplOwor
ICAgIG9iamVjdENsYXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVl
c3RfZ2V0X3Byb3BlcnR5OworICAgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZShyZXF1ZXN0Q2xh
c3MsIHNpemVvZihXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3RQcml2YXRlKSk7CisKKyAgICAvKioK
KyAgICAgKiBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3Q6ZmlsdGVyOgorICAgICAqCisgICAgICog
VGhlIGZpbHRlciBjdXJyZW50bHkgYXNzb2NpYXRlZCB3aXRoIHRoZSByZXF1ZXN0LiBTZWUKKyAg
ICAgKiB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X21pbWVfdHlwZXNfZmlsdGVyKCkg
Zm9yIG1vcmUKKyAgICAgKiBkZXRhaWxzLgorICAgICAqLworICAgIGdfb2JqZWN0X2NsYXNzX2lu
c3RhbGxfcHJvcGVydHkob2JqZWN0Q2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBQUk9QX0ZJTFRFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGdfcGFyYW1fc3BlY19vYmplY3QoImZpbHRlciIsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJNSU1FIHR5cGVzIGZpbHRlciIpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiVGhl
IGZpbHRlciBjdXJyZW50bHkgYXNzb2NpYXRlZCB3aXRoIHRoZSByZXF1ZXN0IiksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHVEtfVFlQRV9G
SUxFX0ZJTFRFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworICAgIC8qKgorICAgICAqIFdlYktp
dEZpbGVDaG9vc2VyUmVxdWVzdDptaW1lLXR5cGVzOgorICAgICAqCisgICAgICogQSAlTlVMTC10
ZXJtaW5hdGVkIGFycmF5IG9mIHN0cmluZ3MgY29udGFpbmluZyB0aGUgbGlzdCBvZiBNSU1FCisg
ICAgICogdHlwZXMgdGhlIGZpbGUgY2hvb3NlciBkaWFsb2cgc2hvdWxkIGhhbmRsZS4gU2VlCisg
ICAgICogd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9taW1lX3R5cGVzKCkgZm9yIG1v
cmUgZGV0YWlscy4KKyAgICAgKi8KKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5
KG9iamVjdENsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPUF9N
SU1FX1RZUEVTLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9z
cGVjX2JveGVkKCJtaW1lLXR5cGVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF8oIk1JTUUgdHlwZXMiKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIlRoZSBsaXN0IG9mIE1JTUUg
dHlwZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSByZXF1ZXN0IiksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHX1RZUEVfU1RSViwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9QQVJB
TV9SRUFEQUJMRSkpOyAgICAvKioKKyAgICAgKiBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3Q6c2Vs
ZWN0LW11bHRpcGxlOgorICAgICAqCisgICAgICogV2hldGhlciB0aGUgZmlsZSBjaG9vc2VyIHNo
b3VsZCBhbGxvdyBzZWxlY3RpbmcgbXVsdGlwbGUKKyAgICAgKiBmaWxlcy4gU2VlCisgICAgICog
d2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9zZWxlY3RfbXVsdGlwbGUoKSBmb3IKKyAg
ICAgKiBtb3JlIGRldGFpbHMuCisgICAgICovCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9w
cm9wZXJ0eShvYmplY3RDbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFBST1BfU0VMRUNUX01VTFRJUExFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4oInNlbGVjdC1tdWx0aXBsZSIsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiU2VsZWN0IG11bHRp
cGxlIGZpbGVzIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXygiV2hldGhlciB0aGUgZmlsZSBjaG9vc2VyIHNob3VsZCBhbGxvdyBzZWxl
Y3RpbmcgbXVsdGlwbGUgZmlsZXMiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBGQUxTRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKyAg
ICAvKioKKyAgICAgKiBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3Q6c2VsZWN0ZWQtZmlsZXM6Cisg
ICAgICoKKyAgICAgKiBBICVOVUxMLXRlcm1pbmF0ZWQgYXJyYXkgb2Ygc3RyaW5ncyBjb250YWlu
aW5nIHRoZSBsaXN0IG9mCisgICAgICogc2VsZWN0ZWQgZmlsZXMgYXNzb2NpYXRlZCB0byB0aGUg
Y3VycmVudCByZXF1ZXN0LiBTZWUKKyAgICAgKiB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3Rf
Z2V0X3NlbGVjdGVkX2ZpbGVzKCkgZm9yIG1vcmUgZGV0YWlscy4KKyAgICAgKi8KKyAgICBnX29i
amVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KG9iamVjdENsYXNzLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgUFJPUF9TRUxFQ1RFRF9GSUxFUywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGdfcGFyYW1fc3BlY19ib3hlZCgic2VsZWN0ZWQtZmlsZXMi
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XygiU2VsZWN0ZWQgZmlsZXMiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF8oIlRoZSBsaXN0IG9mIHNlbGVjdGVkIGZpbGVzIGFzc29jaWF0
ZWQgd2l0aCB0aGUgcmVxdWVzdCIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgR19UWVBFX1NUUlYsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsK
K30KKworV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0KiB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVl
c3RfY3JlYXRlKFBhc3NSZWZQdHI8RmlsZUNob29zZXI+IGNob29zZXIpCit7CisgICAgV2ViS2l0
RmlsZUNob29zZXJSZXF1ZXN0KiByZXF1ZXN0ID0gV0VCS0lUX0ZJTEVfQ0hPT1NFUl9SRVFVRVNU
KGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9GSUxFX0NIT09TRVJfUkVRVUVTVCwgTlVMTCkpOwor
ICAgIHJlcXVlc3QtPnByaXYtPmNob29zZXIgPSBjaG9vc2VyOworICAgIHJldHVybiByZXF1ZXN0
OworfQorCisvKioKKyAqIHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfbWltZV90eXBl
czoKKyAqIEByZXF1ZXN0OiBhICNXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QKKyAqCisgKiBHZXQg
dGhlIGxpc3Qgb2YgTUlNRSB0eXBlcyB0aGUgZmlsZSBjaG9vc2VyIGRpYWxvZyBzaG91bGQgaGFu
ZGxlLAorICogaW4gdGhlIGZvcm1hdCBzcGVjaWZpZWQgaW4gUkZDIDIwNDYgZm9yICJtZWRpYSB0
eXBlcyIuIEl0cyBjb250ZW50cworICogZGVwZW5kIG9uIHRoZSB2YWx1ZSBvZiB0aGUgJ2FjY2Vw
dCcgYXR0cmlidXRlIGZvciBIVE1MIGlucHV0CisgKiBlbGVtZW50cy4gVGhpcyBmdW5jdGlvbiBz
aG91bGQgbm9ybWFsbHkgYmUgY2FsbGVkIGJlZm9yZSBwcmVzZW50aW5nCisgKiB0aGUgZmlsZSBj
aG9vc2VyIGRpYWxvZyB0byB0aGUgdXNlciwgdG8gZGVjaWRlIHdoZXRoZXIgdG8gYWxsb3cgdGhl
CisgKiB1c2VyIHRvIHNlbGVjdCBtdWx0aXBsZSBmaWxlcyBhdCBvbmNlIG9yIG9ubHkgb25lLgor
ICoKKyAqIFJldHVybnM6IChhcnJheSB6ZXJvLXRlcm1pbmF0ZWQ9MSkgKHRyYW5zZmVyIG5vbmUp
OiBhCisgKiAlTlVMTC10ZXJtaW5hdGVkIGFycmF5IG9mIHN0cmluZ3MgaWYgYSBsaXN0IG9mIGFj
Y2VwdGVkIE1JTUUgdHlwZXMKKyAqIGlzIGRlZmluZWQgb3IgJU5VTEwgb3RoZXJ3aXNlLCBtZWFu
aW5nIHRoYXQgYW55IE1JTUUgdHlwZSBzaG91bGQgYmUKKyAqIGFjY2VwdGVkLiBUaGlzIGFycmF5
IGFuZCBpdHMgY29udGVudHMgYXJlIG93bmVkIGJ5IFdlYktpdEdUSysgYW5kCisgKiBzaG91bGQg
bm90IGJlIG1vZGlmaWVkIG9yIGZyZWVkLgorICovCitjb25zdCBnY2hhciogY29uc3QqIHdlYmtp
dF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfbWltZV90eXBlcyhXZWJLaXRGaWxlQ2hvb3NlclJl
cXVlc3QqIHJlcXVlc3QpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX0ZJ
TEVfQ0hPT1NFUl9SRVFVRVNUKHJlcXVlc3QpLCAwKTsKKyAgICBpZiAocmVxdWVzdC0+cHJpdi0+
bWltZVR5cGVzKQorICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxnY2hhcioqPihyZXF1
ZXN0LT5wcml2LT5taW1lVHlwZXMtPnBkYXRhKTsKKworICAgIEZpbGVDaG9vc2VyU2V0dGluZ3Mg
c2V0dGluZ3MgPSByZXF1ZXN0LT5wcml2LT5jaG9vc2VyLT5zZXR0aW5ncygpOworICAgIHNpemVf
dCBudW1PZk1pbWVUeXBlcyA9IHNldHRpbmdzLmFjY2VwdE1JTUVUeXBlcy5zaXplKCk7CisgICAg
aWYgKCFudW1PZk1pbWVUeXBlcykKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXF1ZXN0LT5w
cml2LT5taW1lVHlwZXMgPSBhZG9wdEdSZWYoZ19wdHJfYXJyYXlfbmV3X3dpdGhfZnJlZV9mdW5j
KGdfZnJlZSkpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtT2ZNaW1lVHlwZXM7ICsr
aSkgeworICAgICAgICBTdHJpbmcgbWltZVR5cGVTdHJpbmcgPSBzZXR0aW5ncy5hY2NlcHRNSU1F
VHlwZXNbaV07CisgICAgICAgIGlmIChtaW1lVHlwZVN0cmluZy5pc0VtcHR5KCkpCisgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgZ19wdHJfYXJyYXlfYWRkKHJlcXVlc3QtPnByaXYtPm1p
bWVUeXBlcy5nZXQoKSwgZ19zdHJkdXAobWltZVR5cGVTdHJpbmcudXRmOCgpLmRhdGEoKSkpOwor
ICAgIH0KKyAgICBnX3B0cl9hcnJheV9hZGQocmVxdWVzdC0+cHJpdi0+bWltZVR5cGVzLmdldCgp
LCAwKTsKKworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGdjaGFyKio+KHJlcXVlc3QtPnBy
aXYtPm1pbWVUeXBlcy0+cGRhdGEpOworfQorCisvKioKKyAqIHdlYmtpdF9maWxlX2Nob29zZXJf
cmVxdWVzdF9nZXRfbWltZV90eXBlc19maWx0ZXI6CisgKiBAcmVxdWVzdDogYSAjV2ViS2l0Rmls
ZUNob29zZXJSZXF1ZXN0CisgKgorICogR2V0IHRoZSBmaWx0ZXIgY3VycmVudGx5IGFzc29jaWF0
ZWQgd2l0aCB0aGUgcmVxdWVzdCwgcmVhZHkgdG8gYmUKKyAqIHVzZWQgYnkgI0d0a0ZpbGVDaG9v
c2VyLiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBub3JtYWxseSBiZSBjYWxsZWQKKyAqIGJlZm9yZSBw
cmVzZW50aW5nIHRoZSBmaWxlIGNob29zZXIgZGlhbG9nIHRvIHRoZSB1c2VyLCB0byBkZWNpZGUK
KyAqIHdoZXRoZXIgdG8gYXBwbHkgYSBmaWx0ZXIgc28gdGhlIHVzZXIgd291bGQgbm90IGJlIGFs
bG93ZWQgdG8KKyAqIHNlbGVjdCBmaWxlcyB3aXRoIG90aGVyIE1JTUUgdHlwZXMuCisgKgorICog
U2VlIHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfbWltZV90eXBlcygpIGlmIHlvdSBh
cmUKKyAqIGludGVyZXN0ZWQgaW4gZ2V0dGluZyB0aGUgbGlzdCBvZiBhY2NlcHRlZCBNSU1FIHR5
cGVzLgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKTogYSAjR3RrRmlsZUZpbHRlciBp
ZiBhIGxpc3Qgb2YgYWNjZXB0ZWQKKyAqIE1JTUUgdHlwZXMgaXMgZGVmaW5lZCBvciAlTlVMTCBv
dGhlcndpc2UuIFRoZSByZXR1cm5lZCBvYmplY3QgaXMKKyAqIG93bmVkIGJ5IFdlYktpdEdUSysg
c2hvdWxkIG5vdCBiZSBtb2RpZmllZCBvciBmcmVlZC4KKyAqLworR3RrRmlsZUZpbHRlciogd2Vi
a2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9taW1lX3R5cGVzX2ZpbHRlcihXZWJLaXRGaWxl
Q2hvb3NlclJlcXVlc3QqIHJlcXVlc3QpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VC
S0lUX0lTX0ZJTEVfQ0hPT1NFUl9SRVFVRVNUKHJlcXVlc3QpLCAwKTsKKyAgICBpZiAocmVxdWVz
dC0+cHJpdi0+ZmlsdGVyKQorICAgICAgICByZXR1cm4gcmVxdWVzdC0+cHJpdi0+ZmlsdGVyLmdl
dCgpOworCisgICAgRmlsZUNob29zZXJTZXR0aW5ncyBzZXR0aW5ncyA9IHJlcXVlc3QtPnByaXYt
PmNob29zZXItPnNldHRpbmdzKCk7CisgICAgc2l6ZV90IG51bU9mTWltZVR5cGVzID0gc2V0dGlu
Z3MuYWNjZXB0TUlNRVR5cGVzLnNpemUoKTsKKyAgICBpZiAoIW51bU9mTWltZVR5cGVzKQorICAg
ICAgICByZXR1cm4gMDsKKworICAgIC8vIERvIG5vdCB1c2UgYWRvcHRHUmVmIGhlcmUsIHNpbmNl
IHdlIHdhbnQgdG8gc2luayB0aGUgZmxvYXRpbmcKKyAgICAvLyByZWZlcmVuY2UgZm9yIHRoZSBu
ZXcgaW5zdGFuY2Ugb2YgR3RrRmlsZUZpbHRlciwgc28gd2UgbWFrZQorICAgIC8vIHN1cmUgd2Ug
a2VlcCB0aGUgb3duZXJzaGlwIGR1cmluZyB0aGUgbGlmZXRpbWUgb2YgdGhlIHJlcXVlc3QuCisg
ICAgcmVxdWVzdC0+cHJpdi0+ZmlsdGVyID0gZ3RrX2ZpbGVfZmlsdGVyX25ldygpOworICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtT2ZNaW1lVHlwZXM7ICsraSkgeworICAgICAgICBTdHJp
bmcgbWltZVR5cGVTdHJpbmcgPSBzZXR0aW5ncy5hY2NlcHRNSU1FVHlwZXNbaV07CisgICAgICAg
IGlmIChtaW1lVHlwZVN0cmluZy5pc0VtcHR5KCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgZ3RrX2ZpbGVfZmlsdGVyX2FkZF9taW1lX3R5cGUocmVxdWVzdC0+cHJpdi0+ZmlsdGVy
LmdldCgpLCBtaW1lVHlwZVN0cmluZy51dGY4KCkuZGF0YSgpKTsKKyAgICB9CisKKyAgICByZXR1
cm4gcmVxdWVzdC0+cHJpdi0+ZmlsdGVyLmdldCgpOworfQorCisvKioKKyAqIHdlYmtpdF9maWxl
X2Nob29zZXJfcmVxdWVzdF9nZXRfc2VsZWN0X211bHRpcGxlOgorICogQHJlcXVlc3Q6IGEgI1dl
YktpdEZpbGVDaG9vc2VyUmVxdWVzdAorICoKKyAqIERldGVybWluZSB3aGV0aGVyIHRoZSBmaWxl
IGNob29zZXIgYXNzb2NpYXRlZCB0byB0aGlzCisgKiAjV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0
IHNob3VsZCBhbGxvdyBzZWxlY3RpbmcgbXVsdGlwbGUgZmlsZXMsCisgKiB3aGljaCBkZXBlbmRz
IG9uIHRoZSBIVE1MIGlucHV0IGVsZW1lbnQgaGF2aW5nIGEgJ211bHRpcGxlJworICogYXR0cmli
dXRlIGRlZmluZWQuCisgKgorICogUmV0dXJuczogJVRSVUUgaWYgdGhlIGZpbGUgY2hvb3NlciBz
aG91bGQgYWxsb3cgc2VsZWN0aW5nIG11bHRpcGxlIGZpbGVzIG9yICVGQUxTRSBvdGhlcndpc2Uu
CisgKi8KK2dib29sZWFuIHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfc2VsZWN0X211
bHRpcGxlKFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCogcmVxdWVzdCkKK3sKKyAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChXRUJLSVRfSVNfRklMRV9DSE9PU0VSX1JFUVVFU1QocmVxdWVzdCksIEZB
TFNFKTsKKyAgICByZXR1cm4gcmVxdWVzdC0+cHJpdi0+Y2hvb3Nlci0+c2V0dGluZ3MoKS5hbGxv
d3NNdWx0aXBsZUZpbGVzOworfQorCisvKioKKyAqIHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVz
dF9zZWxlY3RfZmlsZXM6CisgKiBAcmVxdWVzdDogYSAjV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0
CisgKiBAZmlsZXM6IChhcnJheSB6ZXJvLXRlcm1pbmF0ZWQ9MSkgKHRyYW5zZmVyIG5vbmUpOiBh
CisgKiAlTlVMTC10ZXJtaW5hdGVkIGFycmF5IG9mIHN0cmluZ3MsIGNvbnRhaW5pbmcgcGF0aHMg
dG8gbG9jYWwgZmlsZXMuCisgKgorICogQXNrIFdlYktpdCB0byBzZWxlY3QgbG9jYWwgZmlsZXMg
Zm9yIHVwbG9hZCBhbmQgY29tcGxldGUgdGhlCisgKiByZXF1ZXN0LgorICovCit2b2lkIHdlYmtp
dF9maWxlX2Nob29zZXJfcmVxdWVzdF9zZWxlY3RfZmlsZXMoV2ViS2l0RmlsZUNob29zZXJSZXF1
ZXN0KiByZXF1ZXN0LCBjb25zdCBnY2hhciogY29uc3QqIGZpbGVzKQoreworICAgIGdfcmV0dXJu
X2lmX2ZhaWwoV0VCS0lUX0lTX0ZJTEVfQ0hPT1NFUl9SRVFVRVNUKHJlcXVlc3QpKTsKKyAgICBn
X3JldHVybl9pZl9mYWlsKGZpbGVzKTsKKworICAgIFZlY3RvcjxTdHJpbmc+IG5hbWVzOworICAg
IEdSZWZQdHI8R1B0ckFycmF5PiBzZWxlY3RlZEZpbGVzID0gYWRvcHRHUmVmKGdfcHRyX2FycmF5
X25ld193aXRoX2ZyZWVfZnVuYyhnX2ZyZWUpKTsKKworICAgIGZvciAoaW50IGkgPSAwOyBmaWxl
c1tpXTsgaSsrKSB7CisgICAgICAgIG5hbWVzLmFwcGVuZChmaWxlbmFtZVRvU3RyaW5nKGZpbGVz
W2ldKSk7CisgICAgICAgIGdfcHRyX2FycmF5X2FkZChzZWxlY3RlZEZpbGVzLmdldCgpLCBnX3N0
cmR1cChmaWxlc1tpXSkpOworICAgIH0KKworICAgIGdfcHRyX2FycmF5X2FkZChzZWxlY3RlZEZp
bGVzLmdldCgpLCAwKTsKKyAgICByZXF1ZXN0LT5wcml2LT5jaG9vc2VyLT5jaG9vc2VGaWxlcyhu
YW1lcyk7CisgICAgcmVxdWVzdC0+cHJpdi0+c2VsZWN0ZWRGaWxlcyA9IHNlbGVjdGVkRmlsZXM7
Cit9CisKKy8qKgorICogd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9zZWxlY3RlZF9m
aWxlczoKKyAqIEByZXF1ZXN0OiBhICNXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QKKyAqCisgKiBH
ZXQgdGhlIGxpc3Qgb2Ygc2VsZWN0ZWQgZmlsZXMgY3VycmVudGx5IGFzc29jaWF0ZWQgdG8gdGhl
CisgKiByZXF1ZXN0LiBJbml0aWFsbHksIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhpcyBtZXRob2Qg
Y29udGFpbnMgYW55CisgKiBmaWxlcyBzZWxlY3RlZCBpbiBwcmV2aW91cyBmaWxlIGNob29zZXIg
cmVxdWVzdHMgZm9yIHRoaXMgSFRNTAorICogaW5wdXQgZWxlbWVudC4gT25jZSB3ZWJraXRfZmls
ZV9jaG9vc2VyX3JlcXVlc3Rfc2VsZWN0X2ZpbGVzLCB0aGUKKyAqIHZhbHVlIHdpbGwgcmVmbGVj
dCB3aGF0ZXZlciBmaWxlcyBhcmUgZ2l2ZW4uCisgKgorICogVGhpcyBmdW5jdGlvbiBzaG91bGQg
bm9ybWFsbHkgYmUgY2FsbGVkIG9ubHkgYmVmb3JlIHByZXNlbnRpbmcgdGhlCisgKiBmaWxlIGNo
b29zZXIgZGlhbG9nIHRvIHRoZSB1c2VyLCB0byBkZWNpZGUgd2hldGhlciB0byBwZXJmb3JtIHNv
bWUKKyAqIGV4dHJhIGFjdGlvbiwgbGlrZSBwcmUtc2VsZWN0aW5nIHRoZSBmaWxlcyBmcm9tIGEg
cHJldmlvdXMgcmVxdWVzdC4KKyAqCisgKiBSZXR1cm5zOiAoYXJyYXkgemVyby10ZXJtaW5hdGVk
PTEpICh0cmFuc2ZlciBub25lKTogYQorICogJU5VTEwtdGVybWluYXRlZCBhcnJheSBvZiBzdHJp
bmdzIGlmIHRoZXJlIGFyZSBzZWxlY3RlZCBmaWxlcworICogYXNzb2NpYXRlZCB3aXRoIHRoZSBy
ZXF1ZXN0IG9yICVOVUxMIG90aGVyd2lzZS4gVGhpcyBhcnJheSBhbmQgaXRzCisgKiBjb250ZW50
cyBhcmUgb3duZWQgYnkgV2ViS2l0R1RLKyBhbmQgc2hvdWxkIG5vdCBiZSBtb2RpZmllZCBvcgor
ICogZnJlZWQuCisgKi8KK2NvbnN0IGdjaGFyKiBjb25zdCogd2Via2l0X2ZpbGVfY2hvb3Nlcl9y
ZXF1ZXN0X2dldF9zZWxlY3RlZF9maWxlcyhXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QqIHJlcXVl
c3QpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX0ZJTEVfQ0hPT1NFUl9S
RVFVRVNUKHJlcXVlc3QpLCAwKTsKKyAgICBpZiAocmVxdWVzdC0+cHJpdi0+c2VsZWN0ZWRGaWxl
cykKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Z2NoYXIqKj4ocmVxdWVzdC0+cHJp
di0+c2VsZWN0ZWRGaWxlcy0+cGRhdGEpOworCisgICAgRmlsZUNob29zZXJTZXR0aW5ncyBzZXR0
aW5ncyA9IHJlcXVlc3QtPnByaXYtPmNob29zZXItPnNldHRpbmdzKCk7CisgICAgc2l6ZV90IG51
bU9mRmlsZXMgPSBzZXR0aW5ncy5zZWxlY3RlZEZpbGVzLnNpemUoKTsKKyAgICBpZiAoIW51bU9m
RmlsZXMpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmVxdWVzdC0+cHJpdi0+c2VsZWN0ZWRG
aWxlcyA9IGFkb3B0R1JlZihnX3B0cl9hcnJheV9uZXdfd2l0aF9mcmVlX2Z1bmMoZ19mcmVlKSk7
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1PZkZpbGVzOyArK2kpIHsKKyAgICAgICAg
aWYgKHNldHRpbmdzLnNlbGVjdGVkRmlsZXNbaV0uaXNFbXB0eSgpKQorICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgIENTdHJpbmcgZmlsZW5hbWUgPSBmaWxlU3lzdGVtUmVwcmVzZW50YXRp
b24oc2V0dGluZ3Muc2VsZWN0ZWRGaWxlc1tpXSk7CisgICAgICAgIGdfcHRyX2FycmF5X2FkZChy
ZXF1ZXN0LT5wcml2LT5zZWxlY3RlZEZpbGVzLmdldCgpLCBnX3N0cmR1cChmaWxlbmFtZS5kYXRh
KCkpKTsKKyAgICB9CisgICAgZ19wdHJfYXJyYXlfYWRkKHJlcXVlc3QtPnByaXYtPnNlbGVjdGVk
RmlsZXMuZ2V0KCksIDApOworCisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Z2NoYXIqKj4o
cmVxdWVzdC0+cHJpdi0+c2VsZWN0ZWRGaWxlcy0+cGRhdGEpOworfQorCisvKioKKyAqIHdlYmtp
dF9maWxlX2Nob29zZXJfcmVxdWVzdF9jYW5jZWw6CisgKiBAcmVxdWVzdDogYSAjV2ViS2l0Rmls
ZUNob29zZXJSZXF1ZXN0CisgKgorICogQXNrIFdlYktpdCB0byBjYW5jZWwgdGhlIHJlcXVlc3Qu
IEl0J3MgaW1wb3J0YW50IHRvIGRvIHRoaXMgaW4gY2FzZQorICogbm8gc2VsZWN0aW9uIGhhcyBi
ZWVuIG1hZGUgaW4gdGhlIGNsaWVudCwgb3RoZXJ3aXNlIHRoZSByZXF1ZXN0CisgKiB3b24ndCBi
ZSBwcm9wZXJseSBjb21wbGV0ZWQgYW5kIHRoZSBicm93c2VyIHdpbGwga2VlcCB0aGUgcmVxdWVz
dAorICogcGVuZGluZyBmb3JldmVyLCB3aGljaCBtaWdodCBjYXVzZSB0aGUgYnJvd3NlciB0byBo
YW5nLgorICovCit2b2lkIHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9jYW5jZWwoV2ViS2l0
RmlsZUNob29zZXJSZXF1ZXN0KiByZXF1ZXN0KQoreworICAgIC8qCisgICAgICogU3R1YiBvbmx5
OyBmb3IgQVBJIGNvbXBhdGliaWxpdHkgd2l0aCBXZWJLaXQyJ3MgZ29iamVjdCBiaW5kaW5ncy4K
KyAgICAgKiBOb3QgbmVlZGVkIGZvciBXZWJLaXQxLgorICAgICAqLworfQpJbmRleDogV2ViS2l0
LXIxMTgzMzYvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGZpbGVjaG9vc2VycmVxdWVz
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIC9kZXYvbnVsbAorKysgV2ViS2l0LXIxMTgzMzYvU291cmNlL1dl
YktpdC9ndGsvd2Via2l0L3dlYmtpdGZpbGVjaG9vc2VycmVxdWVzdC5oCkBAIC0wLDAgKzEsNzQg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiB3ZWJraXRm
aWxlY2hvb3NlcnJlcXVlc3RfaAorI2RlZmluZSB3ZWJraXRmaWxlY2hvb3NlcnJlcXVlc3RfaAor
CisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUgPHdlYmtpdC93ZWJraXRkZWZpbmVzLmg+
CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfVFlQRV9GSUxFX0NIT09TRVJfUkVR
VUVTVCAgICAgICAgICAgICh3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X3R5cGUoKSkK
KyNkZWZpbmUgV0VCS0lUX0ZJTEVfQ0hPT1NFUl9SRVFVRVNUKG9iaikgICAgICAgICAgICAoR19U
WVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9UWVBFX0ZJTEVfQ0hPT1NFUl9S
RVFVRVNULCBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QpKQorI2RlZmluZSBXRUJLSVRfRklMRV9D
SE9PU0VSX1JFUVVFU1RfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgo
a2xhc3MpLCAgV0VCS0lUX1RZUEVfRklMRV9DSE9PU0VSX1JFUVVFU1QsIFdlYktpdEZpbGVDaG9v
c2VyUmVxdWVzdENsYXNzKSkKKyNkZWZpbmUgV0VCS0lUX0lTX0ZJTEVfQ0hPT1NFUl9SRVFVRVNU
KG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9U
WVBFX0ZJTEVfQ0hPT1NFUl9SRVFVRVNUKSkKKyNkZWZpbmUgV0VCS0lUX0lTX0ZJTEVfQ0hPT1NF
Ul9SRVFVRVNUX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwg
IFdFQktJVF9UWVBFX0ZJTEVfQ0hPT1NFUl9SRVFVRVNUKSkKKyNkZWZpbmUgV0VCS0lUX0ZJTEVf
Q0hPT1NFUl9SRVFVRVNUX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFT
Uygob2JqKSwgIFdFQktJVF9UWVBFX0ZJTEVfQ0hPT1NFUl9SRVFVRVNULCBXZWJLaXRGaWxlQ2hv
b3NlclJlcXVlc3RDbGFzcykpCisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRGaWxlQ2hvb3NlclJl
cXVlc3QgICAgICAgIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdDsKK3R5cGVkZWYgc3RydWN0IF9X
ZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3RDbGFzcyAgIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdENs
YXNzOwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdFByaXZhdGUgV2Vi
S2l0RmlsZUNob29zZXJSZXF1ZXN0UHJpdmF0ZTsKKworc3RydWN0IF9XZWJLaXRGaWxlQ2hvb3Nl
clJlcXVlc3QgeworICAgIEdPYmplY3QgcGFyZW50OworCisgICAgLyo8IHByaXZhdGUgPiovCisg
ICAgV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0UHJpdmF0ZSAqcHJpdjsKK307CisKK3N0cnVjdCBf
V2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0Q2xhc3MgeworICAgIEdPYmplY3RDbGFzcyBwYXJlbnRf
Y2xhc3M7Cit9OworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVl
c3RfZ2V0X3R5cGUgICAgICAgICAgICAgICAgICAodm9pZCk7CisKK1dFQktJVF9BUEkgY29uc3Qg
Z2NoYXIgKiBjb25zdCAqCit3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X21pbWVfdHlw
ZXMgICAgICAgIChXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QgKnJlcXVlc3QpOworCitXRUJLSVRf
QVBJIEd0a0ZpbGVGaWx0ZXIgKgord2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9taW1l
X3R5cGVzX2ZpbHRlciAoV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0ICpyZXF1ZXN0KTsKKworV0VC
S0lUX0FQSSBnYm9vbGVhbgord2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9zZWxlY3Rf
bXVsdGlwbGUgICAoV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0ICpyZXF1ZXN0KTsKKworV0VCS0lU
X0FQSSB2b2lkCit3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3Rfc2VsZWN0X2ZpbGVzICAgICAg
ICAgIChXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QgKnJlcXVlc3QsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAqIGNvbnN0ICAg
ICAgKmZpbGVzKTsKKworV0VCS0lUX0FQSSBjb25zdCBnY2hhciAqIGNvbnN0ICoKK3dlYmtpdF9m
aWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfc2VsZWN0ZWRfZmlsZXMgICAgKFdlYktpdEZpbGVDaG9v
c2VyUmVxdWVzdCAqcmVxdWVzdCk7CisKK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2ZpbGVfY2hv
b3Nlcl9yZXF1ZXN0X2NhbmNlbCAgICAgICAgICAgICAgICAoV2ViS2l0RmlsZUNob29zZXJSZXF1
ZXN0ICpyZXF1ZXN0KTsKKworR19FTkRfREVDTFMKKworI2VuZGlmCkluZGV4OiBXZWJLaXQtcjEx
ODMzNi9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZmlsZWNob29zZXJyZXF1ZXN0cHJp
dmF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIC9kZXYvbnVsbAorKysgV2ViS2l0LXIxMTgzMzYvU291cmNl
L1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGZpbGVjaG9vc2VycmVxdWVzdHByaXZhdGUuaApAQCAt
MCwwICsxLDMwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICog
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5k
ZWYgd2Via2l0ZmlsZWNob29zZXJyZXF1ZXN0cHJpdmF0ZV9oCisjZGVmaW5lIHdlYmtpdGZpbGVj
aG9vc2VycmVxdWVzdHByaXZhdGVfaAorCisjaW5jbHVkZSAiRmlsZUNob29zZXIuaCIKKyNpbmNs
dWRlICJ3ZWJraXRmaWxlY2hvb3NlcnJlcXVlc3QuaCIKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNv
cmU7CisKK1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCogd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1
ZXN0X2NyZWF0ZShQYXNzUmVmUHRyPEZpbGVDaG9vc2VyPiBjaG9vc2VyKTsKKworI2VuZGlmCklu
ZGV4OiBXZWJLaXQtcjExODMzNi9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmll
dy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0LXIxMTgzMzYub3JpZy9Tb3VyY2UvV2ViS2l0L2d0
ay93ZWJraXQvd2Via2l0d2Vidmlldy5jcHAKKysrIFdlYktpdC1yMTE4MzM2L1NvdXJjZS9XZWJL
aXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcApAQCAtMjIxLDYgKzIyMSw3IEBAIGVudW0g
ewogICAgIEVOVEVSSU5HX0ZVTExTQ1JFRU4sCiAgICAgTEVBVklOR19GVUxMU0NSRUVOLAogICAg
IENPTlRFWFRfTUVOVSwKKyAgICBSVU5fRklMRV9DSE9PU0VSLAogCiAgICAgTEFTVF9TSUdOQUwK
IH07CkBAIC0xMzAwLDYgKzEzMDEsNDcgQEAgc3RhdGljIGdib29sZWFuIHdlYmtpdF93ZWJfdmll
d19yZWFsX2xlYQogICAgIHJldHVybiBGQUxTRTsKIH0KIAorc3RhdGljIHZvaWQgZmlsZUNob29z
ZXJEaWFsb2dSZXNwb25zZUNhbGxiYWNrKEd0a0RpYWxvZyogZGlhbG9nLCBnaW50IHJlc3BvbnNl
SUQsIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCogcmVxdWVzdCkKK3sKKyAgICBHUmVmUHRyPFdl
YktpdEZpbGVDaG9vc2VyUmVxdWVzdD4gYWRvcHRlZFJlcXVlc3QgPSBhZG9wdEdSZWYocmVxdWVz
dCk7CisgICAgaWYgKHJlc3BvbnNlSUQgPT0gR1RLX1JFU1BPTlNFX0FDQ0VQVCkgeworICAgICAg
ICBHT3duUHRyPEdTTGlzdD4gZmlsZXNMaXN0KGd0a19maWxlX2Nob29zZXJfZ2V0X2ZpbGVuYW1l
cyhHVEtfRklMRV9DSE9PU0VSKGRpYWxvZykpKTsKKyAgICAgICAgR1JlZlB0cjxHUHRyQXJyYXk+
IGZpbGVzQXJyYXkgPSBhZG9wdEdSZWYoZ19wdHJfYXJyYXlfbmV3KCkpOworICAgICAgICBmb3Ig
KEdTTGlzdCogZmlsZSA9IGZpbGVzTGlzdC5nZXQoKTsgZmlsZTsgZmlsZSA9IGdfc2xpc3RfbmV4
dChmaWxlKSkKKyAgICAgICAgICAgIGdfcHRyX2FycmF5X2FkZChmaWxlc0FycmF5LmdldCgpLCBm
aWxlLT5kYXRhKTsKKyAgICAgICAgZ19wdHJfYXJyYXlfYWRkKGZpbGVzQXJyYXkuZ2V0KCksIDAp
OworICAgICAgICB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3Rfc2VsZWN0X2ZpbGVzKGFkb3B0
ZWRSZXF1ZXN0LmdldCgpLCByZWludGVycHJldF9jYXN0PGNvbnN0IGdjaGFyKiBjb25zdCo+KGZp
bGVzQXJyYXktPnBkYXRhKSk7CisgICAgfSBlbHNlCisgICAgICAgIHdlYmtpdF9maWxlX2Nob29z
ZXJfcmVxdWVzdF9jYW5jZWwoYWRvcHRlZFJlcXVlc3QuZ2V0KCkpOworCisgICAgZ3RrX3dpZGdl
dF9kZXN0cm95KEdUS19XSURHRVQoZGlhbG9nKSk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJr
aXRfd2ViX3ZpZXdfcmVhbF9ydW5fZmlsZV9jaG9vc2VyKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcs
IFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCogcmVxdWVzdCkKK3sKKyAgICBHdGtXaWRnZXQqIHRv
cGxldmVsID0gZ3RrX3dpZGdldF9nZXRfdG9wbGV2ZWwoR1RLX1dJREdFVCh3ZWJWaWV3KSk7Cisg
ICAgaWYgKCF3aWRnZXRJc09uc2NyZWVuVG9wbGV2ZWxXaW5kb3codG9wbGV2ZWwpKQorICAgICAg
ICB0b3BsZXZlbCA9IDA7CisKKyAgICBnYm9vbGVhbiBhbGxvd3NNdWx0aXBsZVNlbGVjdGlvbiA9
IHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfc2VsZWN0X211bHRpcGxlKHJlcXVlc3Qp
OworICAgIEd0a1dpZGdldCogZGlhbG9nID0gZ3RrX2ZpbGVfY2hvb3Nlcl9kaWFsb2dfbmV3KGFs
bG93c011bHRpcGxlU2VsZWN0aW9uID8gXygiU2VsZWN0IEZpbGVzIikgOiBfKCJTZWxlY3QgRmls
ZSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHRvcGxldmVsID8gR1RLX1dJTkRPVyh0b3BsZXZlbCkgOiAwLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdUS19GSUxFX0NIT09TRVJfQUNUSU9O
X09QRU4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgR1RLX1NUT0NLX0NBTkNFTCwgR1RLX1JFU1BPTlNFX0NBTkNFTCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHVEtfU1RPQ0tfT1BFTiwgR1RL
X1JFU1BPTlNFX0FDQ0VQVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBOVUxMKTsKKworICAgIGlmIChHdGtGaWxlRmlsdGVyKiBmaWx0ZXIgPSB3
ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X21pbWVfdHlwZXNfZmlsdGVyKHJlcXVlc3Qp
KQorICAgICAgICBndGtfZmlsZV9jaG9vc2VyX3NldF9maWx0ZXIoR1RLX0ZJTEVfQ0hPT1NFUihk
aWFsb2cpLCBmaWx0ZXIpOworICAgIGd0a19maWxlX2Nob29zZXJfc2V0X3NlbGVjdF9tdWx0aXBs
ZShHVEtfRklMRV9DSE9PU0VSKGRpYWxvZyksIGFsbG93c011bHRpcGxlU2VsZWN0aW9uKTsKKwor
ICAgIGd0a19maWxlX2Nob29zZXJfc2V0X3NlbGVjdF9tdWx0aXBsZShHVEtfRklMRV9DSE9PU0VS
KGRpYWxvZyksIGFsbG93c011bHRpcGxlU2VsZWN0aW9uKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0
KGRpYWxvZywgInJlc3BvbnNlIiwgR19DQUxMQkFDSyhmaWxlQ2hvb3NlckRpYWxvZ1Jlc3BvbnNl
Q2FsbGJhY2spLCBnX29iamVjdF9yZWYocmVxdWVzdCkpOworICAgIGd0a193aWRnZXRfc2hvdyhk
aWFsb2cpOworCisgICAgcmV0dXJuIFRSVUU7Cit9CisKIHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJf
dmlld19kaXNwb3NlKEdPYmplY3QqIG9iamVjdCkKIHsKICAgICBXZWJLaXRXZWJWaWV3KiB3ZWJW
aWV3ID0gV0VCS0lUX1dFQl9WSUVXKG9iamVjdCk7CkBAIC0yNTUzLDYgKzI1OTUsMzcgQEAgc3Rh
dGljIHZvaWQgd2Via2l0X3dlYl92aWV3X2NsYXNzX2luaXQoVwogICAgICAgICAgICAgR19UWVBF
X05PTkUsIDEsCiAgICAgICAgICAgICBXRUJLSVRfVFlQRV9XRUJfRlJBTUUpOwogCisgICAgIC8q
KgorICAgICAqIFdlYktpdFdlYlZpZXc6OnJ1bi1maWxlLWNob29zZXI6CisgICAgICogQHdlYl92
aWV3OiB0aGUgI1dlYktpdFdlYlZpZXcgb24gd2hpY2ggdGhlIHNpZ25hbCBpcyBlbWl0dGVkCisg
ICAgICogQHJlcXVlc3Q6IGEgI1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdAorICAgICAqCisgICAg
ICogVGhpcyBzaWduYWwgaXMgZW1pdHRlZCB3aGVuIHRoZSB1c2VyIGludGVyYWN0cyB3aXRoIGEg
Jmx0O2lucHV0CisgICAgICogdHlwZT0nZmlsZScgLyZndDsgSFRNTCBlbGVtZW50LCByZXF1ZXN0
aW5nIGZyb20gV2ViS2l0IHRvIHNob3cKKyAgICAgKiBhIGRpYWxvZyB0byBzZWxlY3Qgb25lIG9y
IG1vcmUgZmlsZXMgdG8gYmUgdXBsb2FkZWQuIFRvIGxldCB0aGUKKyAgICAgKiBhcHBsaWNhdGlv
biBrbm93IHRoZSBkZXRhaWxzIG9mIHRoZSBmaWxlIGNob29zZXIsIGFzIHdlbGwgYXMgdG8KKyAg
ICAgKiBhbGxvdyB0aGUgY2xpZW50IGFwcGxpY2F0aW9uIHRvIGVpdGhlciBjYW5jZWwgdGhlIHJl
cXVlc3Qgb3IKKyAgICAgKiBwZXJmb3JtIGFuIGFjdHVhbCBzZWxlY3Rpb24gb2YgZmlsZXMsIHRo
ZSBzaWduYWwgd2lsbCBwYXNzIGFuCisgICAgICogaW5zdGFuY2Ugb2YgdGhlICNXZWJLaXRGaWxl
Q2hvb3NlclJlcXVlc3QgaW4gdGhlIEByZXF1ZXN0CisgICAgICogYXJndW1lbnQuCisgICAgICoK
KyAgICAgKiBUaGUgZGVmYXVsdCBzaWduYWwgaGFuZGxlciB3aWxsIGFzeW5jaHJvbm91c2x5IHJ1
biBhIHJlZ3VsYXIKKyAgICAgKiAjR3RrRmlsZUNob29zZXJEaWFsb2cgZm9yIHRoZSB1c2VyIHRv
IGludGVyYWN0IHdpdGguCisgICAgICoKKyAgICAgKiBSZXR1cm5zOiAlVFJVRSB0byBzdG9wIG90
aGVyIGhhbmRsZXJzIGZyb20gYmVpbmcgaW52b2tlZCBmb3IgdGhlIGV2ZW50LgorICAgICAqICAg
JUZBTFNFIHRvIHByb3BhZ2F0ZSB0aGUgZXZlbnQgZnVydGhlci4KKyAgICAgKgorICAgICAqLwor
ICAgIHdlYmtpdF93ZWJfdmlld19zaWduYWxzW1JVTl9GSUxFX0NIT09TRVJdID0KKyAgICAgICAg
Z19zaWduYWxfbmV3KCJydW4tZmlsZS1jaG9vc2VyIiwKKyAgICAgICAgICAgICAgICAgICAgIEdf
VFlQRV9GUk9NX0NMQVNTKHdlYlZpZXdDbGFzcyksCisgICAgICAgICAgICAgICAgICAgICBHX1NJ
R05BTF9SVU5fTEFTVCwKKyAgICAgICAgICAgICAgICAgICAgIEdfU1RSVUNUX09GRlNFVChXZWJL
aXRXZWJWaWV3Q2xhc3MsIHJ1bl9maWxlX2Nob29zZXIpLAorICAgICAgICAgICAgICAgICAgICAg
Z19zaWduYWxfYWNjdW11bGF0b3JfdHJ1ZV9oYW5kbGVkLCAwIC8qIGFjY3VtdWxhdG9yIGRhdGEg
Ki8sCisgICAgICAgICAgICAgICAgICAgICB3ZWJraXRfbWFyc2hhbF9CT09MRUFOX19PQkpFQ1Qs
CisgICAgICAgICAgICAgICAgICAgICBHX1RZUEVfQk9PTEVBTiwgMSwgLyogbnVtYmVyIG9mIHBh
cmFtZXRlcnMgKi8KKyAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9UWVBFX0ZJTEVfQ0hPT1NF
Ul9SRVFVRVNUKTsKKwogICAgIHdlYmtpdF93ZWJfdmlld19zaWduYWxzW1NIT1VMRF9CRUdJTl9F
RElUSU5HXSA9IGdfc2lnbmFsX25ldygic2hvdWxkLWJlZ2luLWVkaXRpbmciLAogICAgICAgICBH
X1RZUEVfRlJPTV9DTEFTUyh3ZWJWaWV3Q2xhc3MpLCBzdGF0aWNfY2FzdDxHU2lnbmFsRmxhZ3M+
KEdfU0lHTkFMX1JVTl9MQVNUIHwgR19TSUdOQUxfQUNUSU9OKSwKICAgICAgICAgR19TVFJVQ1Rf
T0ZGU0VUKFdlYktpdFdlYlZpZXdDbGFzcywgc2hvdWxkX2FsbG93X2VkaXRpbmdfYWN0aW9uKSwg
Z19zaWduYWxfYWNjdW11bGF0b3JfZmlyc3Rfd2lucywgMCwKQEAgLTI4NjIsNiArMjkzNSw3IEBA
IHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJfdmlld19jbGFzc19pbml0KFcKICAgICB3ZWJWaWV3Q2xh
c3MtPnNob3VsZF9hbGxvd19lZGl0aW5nX2FjdGlvbiA9IHdlYmtpdF93ZWJfdmlld19yZWFsX3No
b3VsZF9hbGxvd19lZGl0aW5nX2FjdGlvbjsKICAgICB3ZWJWaWV3Q2xhc3MtPmVudGVyaW5nX2Z1
bGxzY3JlZW4gPSB3ZWJraXRfd2ViX3ZpZXdfcmVhbF9lbnRlcmluZ19mdWxsc2NyZWVuOwogICAg
IHdlYlZpZXdDbGFzcy0+bGVhdmluZ19mdWxsc2NyZWVuID0gd2Via2l0X3dlYl92aWV3X3JlYWxf
bGVhdmluZ19mdWxsc2NyZWVuOworICAgIHdlYlZpZXdDbGFzcy0+cnVuX2ZpbGVfY2hvb3NlciA9
IHdlYmtpdF93ZWJfdmlld19yZWFsX3J1bl9maWxlX2Nob29zZXI7CiAKICAgICBHT2JqZWN0Q2xh
c3MqIG9iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1Mod2ViVmlld0NsYXNzKTsKICAgICBvYmpl
Y3RDbGFzcy0+ZGlzcG9zZSA9IHdlYmtpdF93ZWJfdmlld19kaXNwb3NlOwpAQCAtMzYxNSw2ICsz
Njg5LDEyIEBAIEd0a1dpZGdldCogd2Via2l0X3dlYl92aWV3X25ldyh2b2lkKQogICAgIHJldHVy
biBHVEtfV0lER0VUKHdlYlZpZXcpOwogfQogCit2b2lkIHdlYmtpdF93ZWJfdmlld19ydW5fZmls
ZV9jaG9vc2VyX3JlcXVlc3QoV2ViS2l0V2ViVmlldyogd2ViVmlldywgV2ViS2l0RmlsZUNob29z
ZXJSZXF1ZXN0KiByZXF1ZXN0KQoreworICAgIGdib29sZWFuIHJldHVyblZhbHVlOworICAgIGdf
c2lnbmFsX2VtaXQod2ViVmlldywgd2Via2l0X3dlYl92aWV3X3NpZ25hbHNbUlVOX0ZJTEVfQ0hP
T1NFUl0sIDAsIHJlcXVlc3QsICZyZXR1cm5WYWx1ZSk7Cit9CisKIC8vIGZvciBpbnRlcm5hbCB1
c2Ugb25seQogdm9pZCB3ZWJraXRfd2ViX3ZpZXdfbm90aWZ5X3JlYWR5KFdlYktpdFdlYlZpZXcq
IHdlYlZpZXcpCiB7CkluZGV4OiBXZWJLaXQtcjExODMzNi9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJr
aXQvd2Via2l0d2Vidmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC1yMTE4MzM2Lm9yaWcvU291
cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuaAorKysgV2ViS2l0LXIxMTgzMzYv
U291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuaApAQCAtMjgsNiArMjgsNyBA
QAogCiAjaW5jbHVkZSA8d2Via2l0L3dlYmtpdGRlZmluZXMuaD4KICNpbmNsdWRlIDx3ZWJraXQv
d2Via2l0ZG9tLmg+CisjaW5jbHVkZSA8d2Via2l0L3dlYmtpdGZpbGVjaG9vc2VycmVxdWVzdC5o
PgogI2luY2x1ZGUgPHdlYmtpdC93ZWJraXR3ZWJiYWNrZm9yd2FyZGxpc3QuaD4KICNpbmNsdWRl
IDx3ZWJraXQvd2Via2l0d2ViZnJhbWUuaD4KICNpbmNsdWRlIDx3ZWJraXQvd2Via2l0d2ViaGlz
dG9yeWl0ZW0uaD4KQEAgLTE2NSw2ICsxNjYsOCBAQCBzdHJ1Y3QgX1dlYktpdFdlYlZpZXdDbGFz
cyB7CiAgICAgZ2Jvb2xlYW4gICAgICAgICAgICAgICAgICAgKCogbW92ZV9jdXJzb3IpICAgICAg
ICAgICAgKFdlYktpdFdlYlZpZXcgICAgICAgICp3ZWJfdmlldywKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3RrTW92ZW1lbnRTdGVw
ICAgICAgIHN0ZXAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGdpbnQgICAgICAgICAgICAgICAgICBjb3VudCk7CisgICAgZ2Jvb2xl
YW4gICAgICAgICAgICAgICAgICAgKCogcnVuX2ZpbGVfY2hvb3NlcikgICAgICAgKFdlYktpdFdl
YlZpZXcgICAgICAgICAgICAqd2ViX3ZpZXcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCAq
cmVxdWVzdCk7CiAKICAgICAvKgogICAgICAqIGludGVybmFsCkluZGV4OiBXZWJLaXQtcjExODMz
Ni9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlld3ByaXZhdGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJLaXQtcjExODMzNi5vcmlnL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJr
aXR3ZWJ2aWV3cHJpdmF0ZS5oCisrKyBXZWJLaXQtcjExODMzNi9Tb3VyY2UvV2ViS2l0L2d0ay93
ZWJraXQvd2Via2l0d2Vidmlld3ByaXZhdGUuaApAQCAtMTI0LDYgKzEyNCw4IEBAIEd0a01lbnUq
IHdlYmtpdF93ZWJfdmlld19nZXRfY29udGV4dF9tZW4KIHZvaWQgd2ViVmlld0VudGVyRnVsbHNj
cmVlbihXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBXZWJDb3JlOjpOb2RlKik7CiB2b2lkIHdlYlZp
ZXdFeGl0RnVsbHNjcmVlbihXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KTsKIAordm9pZCB3ZWJraXRf
d2ViX3ZpZXdfcnVuX2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0KFdlYktpdFdlYlZpZXcqLCBXZWJLaXRG
aWxlQ2hvb3NlclJlcXVlc3QqKTsKKwogI2lmIEVOQUJMRShJQ09OREFUQUJBU0UpCiB2b2lkIHdl
YmtpdFdlYlZpZXdSZWdpc3RlckZvckljb25Ob3RpZmljYXRpb24oV2ViS2l0V2ViVmlldyosIGJv
b2wgc2hvdWxkUmVnaXN0ZXIpOwogdm9pZCB3ZWJraXRXZWJWaWV3SWNvbkxvYWRlZChXZWJLaXRG
YXZpY29uRGF0YWJhc2UqLCBjb25zdCBjaGFyKiBmcmFtZVVSSSwgV2ViS2l0V2ViVmlldyopOwpJ
bmRleDogV2ViS2l0LXIxMTgzMzYvU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdHdlYnZpZXcu
Ywo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJLaXQtcjExODMzNi5vcmlnL1NvdXJjZS9XZWJLaXQvZ3RrL3Rl
c3RzL3Rlc3R3ZWJ2aWV3LmMKKysrIFdlYktpdC1yMTE4MzM2L1NvdXJjZS9XZWJLaXQvZ3RrL3Rl
c3RzL3Rlc3R3ZWJ2aWV3LmMKQEAgLTUwNiw2ICs1MDYsMjA3IEBAIHN0YXRpYyB2b2lkIHRlc3Rf
d2Via2l0X3dlYl92aWV3X2Z1bGxzY3IKICAgICBndGtfd2lkZ2V0X2Rlc3Ryb3kod2luZG93KTsK
IH0KIAorc3RhdGljIGdib29sZWFuIGNoZWNrTWltZVR5cGVGb3JGaWx0ZXIoR3RrRmlsZUZpbHRl
ciogZmlsdGVyLCBjb25zdCBnY2hhciogbWltZVR5cGUpCit7CisgICAgR3RrRmlsZUZpbHRlcklu
Zm8gZmlsdGVySW5mbzsKKyAgICBmaWx0ZXJJbmZvLmNvbnRhaW5zID0gR1RLX0ZJTEVfRklMVEVS
X01JTUVfVFlQRTsKKyAgICBmaWx0ZXJJbmZvLm1pbWVfdHlwZSA9IG1pbWVUeXBlOworICAgIHJl
dHVybiBndGtfZmlsZV9maWx0ZXJfZmlsdGVyKGZpbHRlciwgJmZpbHRlckluZm8pOworfQorCitz
dGF0aWMgZ2Jvb2xlYW4gcnVuX2ZpbGVfY2hvb3Nlcl9jYl8xKFdlYktpdFdlYlZpZXcqIHdlYnZp
ZXcsIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCogcmVxdWVzdCwgZ3BvaW50ZXIgZGF0YSkKK3sK
KyAgICBjb25zdCBnY2hhciogY29uc3QqIG1pbWVUeXBlczsKKyAgICBjb25zdCBnY2hhciogY29u
c3QqIHNlbGVjdGVkRmlsZXM7CisgICAgR3RrRmlsZUZpbHRlciAqZmlsdGVyOworCisgICAgZ19h
c3NlcnQoIXdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfc2VsZWN0X211bHRpcGxlKHJl
cXVlc3QpKTsKKworICAgIG1pbWVUeXBlcyA9IHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9n
ZXRfbWltZV90eXBlcyhyZXF1ZXN0KTsKKyAgICBnX2Fzc2VydCghbWltZVR5cGVzKTsKKyAgICBm
aWx0ZXIgPSB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X21pbWVfdHlwZXNfZmlsdGVy
KHJlcXVlc3QpOworICAgIGdfYXNzZXJ0KCFmaWx0ZXIpOworICAgIHNlbGVjdGVkRmlsZXMgPSB3
ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X3NlbGVjdGVkX2ZpbGVzKHJlcXVlc3QpOwor
ICAgIGdfYXNzZXJ0KCFzZWxlY3RlZEZpbGVzKTsKKyAgICB3ZWJraXRfZmlsZV9jaG9vc2VyX3Jl
cXVlc3RfY2FuY2VsKHJlcXVlc3QpOworCisgICAgZ19tYWluX2xvb3BfcXVpdChsb29wKTsKKyAg
ICByZXR1cm4gVFJVRTsKK30KKworc3RhdGljIGdib29sZWFuIHJ1bl9maWxlX2Nob29zZXJfY2Jf
MihXZWJLaXRXZWJWaWV3KiB3ZWJ2aWV3LCBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QqIHJlcXVl
c3QsIGdwb2ludGVyIGRhdGEpCit7CisgICAgY29uc3QgZ2NoYXIqIGNvbnN0KiBtaW1lVHlwZXM7
CisgICAgY29uc3QgZ2NoYXIqIGNvbnN0KiBzZWxlY3RlZEZpbGVzOworICAgIEd0a0ZpbGVGaWx0
ZXIgKmZpbHRlcjsKKworICAgIGdfYXNzZXJ0KHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9n
ZXRfc2VsZWN0X211bHRpcGxlKHJlcXVlc3QpKTsKKworICAgIG1pbWVUeXBlcyA9IHdlYmtpdF9m
aWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfbWltZV90eXBlcyhyZXF1ZXN0KTsKKyAgICBnX2Fzc2Vy
dCghbWltZVR5cGVzKTsKKyAgICBmaWx0ZXIgPSB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3Rf
Z2V0X21pbWVfdHlwZXNfZmlsdGVyKHJlcXVlc3QpOworICAgIGdfYXNzZXJ0KCFmaWx0ZXIpOwor
ICAgIHNlbGVjdGVkRmlsZXMgPSB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X3NlbGVj
dGVkX2ZpbGVzKHJlcXVlc3QpOworICAgIGdfYXNzZXJ0KCFzZWxlY3RlZEZpbGVzKTsKKworICAg
IC8vIFNlbGVjdCBzb21lIGZpbGVzLgorICAgIGNvbnN0IGdjaGFyKiBmaWxlc1RvU2VsZWN0WzRd
ID0geyAiL2ZvbyIsICIvZm9vL2JhciIsICIvZm9vL2Jhci9iYXoiLCAwIH07CisgICAgd2Via2l0
X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X3NlbGVjdF9maWxlcyhyZXF1ZXN0LCBmaWxlc1RvU2VsZWN0
KTsKKworICAgIC8vIENoZWNrIHRoZSBmaWxlcyB0aGF0IGhhdmUgYmVlbiBqdXN0IHNlbGVjdGVk
LgorICAgIHNlbGVjdGVkRmlsZXMgPSB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X3Nl
bGVjdGVkX2ZpbGVzKHJlcXVlc3QpOworICAgIGdfYXNzZXJ0KHNlbGVjdGVkRmlsZXMpOworICAg
IGdfYXNzZXJ0X2NtcHN0cihzZWxlY3RlZEZpbGVzWzBdLCA9PSwgIi9mb28iKTsKKyAgICBnX2Fz
c2VydF9jbXBzdHIoc2VsZWN0ZWRGaWxlc1sxXSwgPT0sICIvZm9vL2JhciIpOworICAgIGdfYXNz
ZXJ0X2NtcHN0cihzZWxlY3RlZEZpbGVzWzJdLCA9PSwgIi9mb28vYmFyL2JheiIpOworICAgIGdf
YXNzZXJ0KCFzZWxlY3RlZEZpbGVzWzNdKTsKKworICAgIGdfbWFpbl9sb29wX3F1aXQobG9vcCk7
CisgICAgcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiBydW5fZmlsZV9jaG9vc2Vy
X2NiXzMoV2ViS2l0V2ViVmlldyogd2VidmlldywgV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0KiBy
ZXF1ZXN0LCBncG9pbnRlciBkYXRhKQoreworICAgIGNvbnN0IGdjaGFyKiBjb25zdCogc2VsZWN0
ZWRGaWxlczsKKworICAgIHNlbGVjdGVkRmlsZXMgPSB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVl
c3RfZ2V0X3NlbGVjdGVkX2ZpbGVzKHJlcXVlc3QpOworICAgIGdfYXNzZXJ0KHNlbGVjdGVkRmls
ZXMpOworICAgIGdfYXNzZXJ0X2NtcHN0cihzZWxlY3RlZEZpbGVzWzBdLCA9PSwgIi9mb28iKTsK
KyAgICBnX2Fzc2VydF9jbXBzdHIoc2VsZWN0ZWRGaWxlc1sxXSwgPT0sICIvZm9vL2JhciIpOwor
ICAgIGdfYXNzZXJ0X2NtcHN0cihzZWxlY3RlZEZpbGVzWzJdLCA9PSwgIi9mb28vYmFyL2JheiIp
OworICAgIGdfYXNzZXJ0KCFzZWxlY3RlZEZpbGVzWzNdKTsKKyAgICB3ZWJraXRfZmlsZV9jaG9v
c2VyX3JlcXVlc3RfY2FuY2VsKHJlcXVlc3QpOworCisgICAgZ19tYWluX2xvb3BfcXVpdChsb29w
KTsKKyAgICByZXR1cm4gVFJVRTsKK30KKworc3RhdGljIGdib29sZWFuIHJ1bl9maWxlX2Nob29z
ZXJfY2JfNChXZWJLaXRXZWJWaWV3KiB3ZWJ2aWV3LCBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3Qq
IHJlcXVlc3QsIGdwb2ludGVyIGRhdGEpCit7CisgICAgY29uc3QgZ2NoYXIqIGNvbnN0KiBtaW1l
VHlwZXM7CisgICAgY29uc3QgZ2NoYXIqIGNvbnN0KiBzZWxlY3RlZEZpbGVzOworICAgIEd0a0Zp
bGVGaWx0ZXIgKmZpbHRlcjsKKworICAgIGdfYXNzZXJ0KCF3ZWJraXRfZmlsZV9jaG9vc2VyX3Jl
cXVlc3RfZ2V0X3NlbGVjdF9tdWx0aXBsZShyZXF1ZXN0KSk7CisKKyAgICBtaW1lVHlwZXMgPSB3
ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X21pbWVfdHlwZXMocmVxdWVzdCk7CisgICAg
Z19hc3NlcnQobWltZVR5cGVzKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIobWltZVR5cGVzWzBdLCA9
PSwgImF1ZGlvLyoiKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIobWltZVR5cGVzWzFdLCA9PSwgInZp
ZGVvLyoiKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIobWltZVR5cGVzWzJdLCA9PSwgImltYWdlLyoi
KTsKKyAgICBnX2Fzc2VydCghbWltZVR5cGVzWzNdKTsKKworICAgIGZpbHRlciA9IHdlYmtpdF9m
aWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfbWltZV90eXBlc19maWx0ZXIocmVxdWVzdCk7CisgICAg
Z19hc3NlcnQoR1RLX0lTX0ZJTEVfRklMVEVSKGZpbHRlcikpOworICAgIGdfYXNzZXJ0KGNoZWNr
TWltZVR5cGVGb3JGaWx0ZXIoZmlsdGVyLCAiYXVkaW8vKiIpKTsKKyAgICBnX2Fzc2VydChjaGVj
a01pbWVUeXBlRm9yRmlsdGVyKGZpbHRlciwgInZpZGVvLyoiKSk7CisgICAgZ19hc3NlcnQoY2hl
Y2tNaW1lVHlwZUZvckZpbHRlcihmaWx0ZXIsICJpbWFnZS8qIikpOworCisgICAgc2VsZWN0ZWRG
aWxlcyA9IHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfc2VsZWN0ZWRfZmlsZXMocmVx
dWVzdCk7CisgICAgZ19hc3NlcnQoIXNlbGVjdGVkRmlsZXMpOworICAgIHdlYmtpdF9maWxlX2No
b29zZXJfcmVxdWVzdF9jYW5jZWwocmVxdWVzdCk7CisKKyAgICBnX21haW5fbG9vcF9xdWl0KGxv
b3ApOworICAgIHJldHVybiBUUlVFOworfQorCit2b2lkIGRvTW91c2VCdXR0b25FdmVudChHdGtX
aWRnZXQgKndpZGdldCwgR2RrRXZlbnRUeXBlIGV2ZW50X3R5cGUsIGludCB4LCBpbnQgeSwgdW5z
aWduZWQgaW50IGJ1dHRvbiwgdW5zaWduZWQgaW50IG1vZGlmaWVycykKK3sKKyAgICBpbnQgeF9y
b290LCB5X3Jvb3Q7CisKKyAgICBnX2Fzc2VydChndGtfd2lkZ2V0X2dldF9yZWFsaXplZCh3aWRn
ZXQpKTsKKworICAgIEdka0V2ZW50ICpldmVudCA9IGdka19ldmVudF9uZXcoZXZlbnRfdHlwZSk7
CisgICAgZXZlbnQtPmJ1dHRvbi53aW5kb3cgPSBndGtfd2lkZ2V0X2dldF93aW5kb3cod2lkZ2V0
KTsKKyAgICBnX29iamVjdF9yZWYoZXZlbnQtPmJ1dHRvbi53aW5kb3cpOworCisgICAgZXZlbnQt
PmJ1dHRvbi50aW1lID0gR0RLX0NVUlJFTlRfVElNRTsKKyAgICBldmVudC0+YnV0dG9uLnggPSB4
OworICAgIGV2ZW50LT5idXR0b24ueSA9IHk7CisgICAgZXZlbnQtPmJ1dHRvbi5heGVzID0gMDsK
KyAgICBldmVudC0+YnV0dG9uLnN0YXRlID0gbW9kaWZpZXJzOworICAgIGV2ZW50LT5idXR0b24u
YnV0dG9uID0gYnV0dG9uOworCisgICAgZXZlbnQtPmJ1dHRvbi5kZXZpY2UgPSBnZGtfZGV2aWNl
X21hbmFnZXJfZ2V0X2NsaWVudF9wb2ludGVyKGdka19kaXNwbGF5X2dldF9kZXZpY2VfbWFuYWdl
cihndGtfd2lkZ2V0X2dldF9kaXNwbGF5KHdpZGdldCkpKTsKKworICAgIGdka193aW5kb3dfZ2V0
X3Jvb3RfY29vcmRzKGd0a193aWRnZXRfZ2V0X3dpbmRvdyh3aWRnZXQpLCB4LCB5LCAmeF9yb290
LCAmeV9yb290KTsKKyAgICBldmVudC0+YnV0dG9uLnhfcm9vdCA9IHhfcm9vdDsKKyAgICBldmVu
dC0+YnV0dG9uLnlfcm9vdCA9IHlfcm9vdDsKKyAgICBndGtfbWFpbl9kb19ldmVudChldmVudCk7
Cit9CisKK3N0YXRpYyB2b2lkIGNsaWNrTW91c2VCdXR0b24oR3RrV2lkZ2V0ICp3aWRnZXQsIGlu
dCB4LCBpbnQgeSwgdW5zaWduZWQgaW50IGJ1dHRvbiwgdW5zaWduZWQgaW50IG1vZGlmaWVycykK
K3sKKyAgICBkb01vdXNlQnV0dG9uRXZlbnQod2lkZ2V0LCBHREtfQlVUVE9OX1BSRVNTLCB4LCB5
LCBidXR0b24sIG1vZGlmaWVycyk7CisgICAgZG9Nb3VzZUJ1dHRvbkV2ZW50KHdpZGdldCwgR0RL
X0JVVFRPTl9SRUxFQVNFLCB4LCB5LCBidXR0b24sIG1vZGlmaWVycyk7Cit9CisKK3N0YXRpYyBn
Ym9vbGVhbiBjbGlja01vdXNlQnV0dG9uQW5kV2FpdEZvckZpbGVDaG9vc2VyUmVxdWVzdChXZWJL
aXRXZWJWaWV3KiB3ZWJWaWV3KQoreworICAgIGNsaWNrTW91c2VCdXR0b24oR1RLX1dJREdFVCh3
ZWJWaWV3KSwgNSwgNSwgMSwgMCk7CisgICAgcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyB2b2lk
IHRlc3Rfd2Via2l0X3dlYl92aWV3X2ZpbGVfY2hvb3NlcigpCit7CisgICAgY29uc3QgZ2NoYXIg
Kmh0bWxfZm9ybWF0X2Jhc2UgPSAiPGh0bWw+PGJvZHk+IgorICAgICAgICAgICAgIjxpbnB1dCBz
dHlsZT0ncG9zaXRpb246YWJzb2x1dGU7bGVmdDowO3RvcDowO21hcmdpbjowO3BhZGRpbmc6MCcg
dHlwZT0nZmlsZScgJXMvPiIKKyAgICAgICAgICAgICI8L2JvZHk+PC9odG1sPiI7CisgICAgZ2No
YXIgKmh0bWxfZm9ybWF0OworICAgIEd0a1dpZGdldCogd2luZG93OworICAgIEd0a1dpZGdldCog
d2ViX3ZpZXc7CisgICAgZ3Vsb25nIGhhbmRsZXI7CisKKyAgICB3aW5kb3cgPSBndGtfd2luZG93
X25ldyhHVEtfV0lORE9XX1RPUExFVkVMKTsKKyAgICB3ZWJfdmlldyA9IHdlYmtpdF93ZWJfdmll
d19uZXcoKTsKKyAgICBndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKHdpbmRvdyksIHdl
Yl92aWV3KTsKKyAgICBndGtfd2lkZ2V0X3Nob3dfYWxsKHdpbmRvdyk7CisKKyAgICBsb29wID0g
Z19tYWluX2xvb3BfbmV3KE5VTEwsIFRSVUUpOworCisgICAgLy8gTXVsdGlwbGUgc2VsZWN0aW9u
cyBub3QgYWxsb3dlZCwgbm8gTUlNRSBmaWx0ZXJpbmcuCisgICAgaGFuZGxlciA9IGdfc2lnbmFs
X2Nvbm5lY3Qod2ViX3ZpZXcsICJydW4tZmlsZS1jaG9vc2VyIiwgR19DQUxMQkFDSyhydW5fZmls
ZV9jaG9vc2VyX2NiXzEpLCBOVUxMKTsKKyAgICBodG1sX2Zvcm1hdCA9IGdfc3RyZHVwX3ByaW50
ZihodG1sX2Zvcm1hdF9iYXNlLCAiIik7CisgICAgd2Via2l0X3dlYl92aWV3X2xvYWRfc3RyaW5n
KFdFQktJVF9XRUJfVklFVyh3ZWJfdmlldyksIGh0bWxfZm9ybWF0LCBOVUxMLCBOVUxMLCBOVUxM
KTsKKyAgICBnX2ZyZWUoaHRtbF9mb3JtYXQpOworCisgICAgZ190aW1lb3V0X2FkZCgxMDAsIChH
U291cmNlRnVuYykgY2xpY2tNb3VzZUJ1dHRvbkFuZFdhaXRGb3JGaWxlQ2hvb3NlclJlcXVlc3Qs
IFdFQktJVF9XRUJfVklFVyh3ZWJfdmlldykpOworICAgIGdfbWFpbl9sb29wX3J1bihsb29wKTsK
KworICAgIGdfc2lnbmFsX2hhbmRsZXJfZGlzY29ubmVjdCh3ZWJfdmlldywgaGFuZGxlcik7CisK
KyAgICAvLyBNdWx0aXBsZSBzZWxlY3Rpb25zIGFsbG93ZWQsIG5vIE1JTUUgZmlsdGVyaW5nLCBz
b21lIHByZS1zZWxlY3RlZCBmaWxlcy4KKyAgICBoYW5kbGVyID0gZ19zaWduYWxfY29ubmVjdCh3
ZWJfdmlldywgInJ1bi1maWxlLWNob29zZXIiLCBHX0NBTExCQUNLKHJ1bl9maWxlX2Nob29zZXJf
Y2JfMiksIE5VTEwpOworICAgIGh0bWxfZm9ybWF0ID0gZ19zdHJkdXBfcHJpbnRmKGh0bWxfZm9y
bWF0X2Jhc2UsICJtdWx0aXBsZSIpOworICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3N0cmluZyhX
RUJLSVRfV0VCX1ZJRVcod2ViX3ZpZXcpLCBodG1sX2Zvcm1hdCwgTlVMTCwgTlVMTCwgTlVMTCk7
CisgICAgZ19mcmVlKGh0bWxfZm9ybWF0KTsKKworICAgIGdfdGltZW91dF9hZGQoMTAwLCAoR1Nv
dXJjZUZ1bmMpIGNsaWNrTW91c2VCdXR0b25BbmRXYWl0Rm9yRmlsZUNob29zZXJSZXF1ZXN0LCBX
RUJLSVRfV0VCX1ZJRVcod2ViX3ZpZXcpKTsKKyAgICBnX21haW5fbG9vcF9ydW4obG9vcCk7CisK
KyAgICBnX3NpZ25hbF9oYW5kbGVyX2Rpc2Nvbm5lY3Qod2ViX3ZpZXcsIGhhbmRsZXIpOworCisg
ICAgLy8gUGVyZm9ybSBhbm90aGVyIHJlcXVlc3QgdG8gY2hlY2sgaWYgdGhlIGxpc3Qgb2YgZmls
ZXMgc2VsZWN0ZWQKKyAgICAvLyBpbiB0aGUgcHJldmlvdXMgc3RlcCBhcHBlYXJzIG5vdyBhcyBw
YXJ0IG9mIHRoZSBuZXcgcmVxdWVzdC4KKyAgICBoYW5kbGVyID0gZ19zaWduYWxfY29ubmVjdCh3
ZWJfdmlldywgInJ1bi1maWxlLWNob29zZXIiLCBHX0NBTExCQUNLKHJ1bl9maWxlX2Nob29zZXJf
Y2JfMyksIE5VTEwpOworICAgIGdfdGltZW91dF9hZGQoMTAwLCAoR1NvdXJjZUZ1bmMpIGNsaWNr
TW91c2VCdXR0b25BbmRXYWl0Rm9yRmlsZUNob29zZXJSZXF1ZXN0LCBXRUJLSVRfV0VCX1ZJRVco
d2ViX3ZpZXcpKTsKKyAgICBnX21haW5fbG9vcF9ydW4obG9vcCk7CisKKyAgICBnX3NpZ25hbF9o
YW5kbGVyX2Rpc2Nvbm5lY3Qod2ViX3ZpZXcsIGhhbmRsZXIpOworCisgICAgLy8gTXVsdGlwbGUg
c2VsZWN0aW9ucyBub3QgYWxsb3dlZCwgb25seSBhY2NlcHQgaW1hZ2VzLCBhdWRpbyBhbmQgdmlk
ZW8gZmlsZXMuLgorICAgIGhhbmRsZXIgPSBnX3NpZ25hbF9jb25uZWN0KHdlYl92aWV3LCAicnVu
LWZpbGUtY2hvb3NlciIsIEdfQ0FMTEJBQ0socnVuX2ZpbGVfY2hvb3Nlcl9jYl80KSwgTlVMTCk7
CisgICAgaHRtbF9mb3JtYXQgPSBnX3N0cmR1cF9wcmludGYoaHRtbF9mb3JtYXRfYmFzZSwgImFj
Y2VwdD0nYXVkaW8vKix2aWRlby8qLGltYWdlLyonIik7CisgICAgd2Via2l0X3dlYl92aWV3X2xv
YWRfc3RyaW5nKFdFQktJVF9XRUJfVklFVyh3ZWJfdmlldyksIGh0bWxfZm9ybWF0LCBOVUxMLCBO
VUxMLCBOVUxMKTsKKyAgICBnX2ZyZWUoaHRtbF9mb3JtYXQpOworCisgICAgZ190aW1lb3V0X2Fk
ZCgxMDAsIChHU291cmNlRnVuYykgY2xpY2tNb3VzZUJ1dHRvbkFuZFdhaXRGb3JGaWxlQ2hvb3Nl
clJlcXVlc3QsIFdFQktJVF9XRUJfVklFVyh3ZWJfdmlldykpOworICAgIGdfbWFpbl9sb29wX3J1
bihsb29wKTsKKworICAgIGdfc2lnbmFsX2hhbmRsZXJfZGlzY29ubmVjdCh3ZWJfdmlldywgaGFu
ZGxlcik7CisgICAgZ3RrX3dpZGdldF9kZXN0cm95KHdpbmRvdyk7Cit9CisKIGludCBtYWluKGlu
dCBhcmdjLCBjaGFyKiogYXJndikKIHsKICAgICBTb3VwU2VydmVyKiBzZXJ2ZXI7CkBAIC01Mzcs
NiArNzM4LDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQogICAgIGdfdGVzdF9h
ZGRfZnVuYygiL3dlYmtpdC93ZWJ2aWV3L3dlYnZpZXctZG9lcy1ub3Qtc3RlYWwtZm9jdXMiLCB0
ZXN0X3dlYmtpdF93ZWJfdmlld19kb2VzX25vdF9zdGVhbF9mb2N1cyk7CiAgICAgZ190ZXN0X2Fk
ZF9kYXRhX2Z1bmMoIi93ZWJraXQvd2Vidmlldy9mdWxsc2NyZWVuIiwgR0lOVF9UT19QT0lOVEVS
KEZBTFNFKSwgdGVzdF93ZWJraXRfd2ViX3ZpZXdfZnVsbHNjcmVlbik7CiAgICAgZ190ZXN0X2Fk
ZF9kYXRhX2Z1bmMoIi93ZWJraXQvd2Vidmlldy9mdWxsc2NyZWVuLWJsb2NrZWQiLCBHSU5UX1RP
X1BPSU5URVIoVFJVRSksIHRlc3Rfd2Via2l0X3dlYl92aWV3X2Z1bGxzY3JlZW4pOworICAgIGdf
dGVzdF9hZGRfZnVuYygiL3dlYmtpdC93ZWJ2aWV3L2ZpbGUtY2hvb3NlciIsIHRlc3Rfd2Via2l0
X3dlYl92aWV3X2ZpbGVfY2hvb3Nlcik7CiAKICAgICByZXR1cm4gZ190ZXN0X3J1biAoKTsKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>144555</attachid>
            <date>2012-05-29 07:35:47 -0700</date>
            <delta_ts>2012-05-29 15:33:36 -0700</delta_ts>
            <desc>updated patch for review</desc>
            <filename>filechooser.patch</filename>
            <type>text/plain</type>
            <size>42518</size>
            <attacher name="Daniel Drake">dsd</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdC1yMTE4MzM2L1NvdXJjZS9XZWJLaXQvZ3RrL0dOVW1ha2VmaWxlLmFtCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYktpdC1yMTE4MzM2Lm9yaWcvU291cmNlL1dlYktpdC9ndGsvR05VbWFr
ZWZpbGUuYW0KKysrIFdlYktpdC1yMTE4MzM2L1NvdXJjZS9XZWJLaXQvZ3RrL0dOVW1ha2VmaWxl
LmFtCkBAIC0xMTQsNiArMTE0LDcgQEAgd2Via2l0Z3RrX3N0YXRpY19oX2FwaSArPSBcCiAJJChz
cmNkaXIpL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRkb3dubG9hZC5oIFwKIAkkKHNy
Y2RpcikvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGVycm9yLmggXAogCSQoc3JjZGly
KS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZmF2aWNvbmRhdGFiYXNlLmggXAorCSQo
c3JjZGlyKS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZmlsZWNob29zZXJyZXF1ZXN0
LmggXAogCSQoc3JjZGlyKS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0Z2VvbG9jYXRp
b25wb2xpY3lkZWNpc2lvbi5oIFwKIAkkKHNyY2RpcikvU291cmNlL1dlYktpdC9ndGsvd2Via2l0
L3dlYmtpdGdsb2JhbHMuaCBcCiAJJChzcmNkaXIpL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93
ZWJraXRoaXR0ZXN0cmVzdWx0LmggXApAQCAtMjIwLDYgKzIyMSw5IEBAIHdlYmtpdGd0a19zb3Vy
Y2VzICs9IFwKIAlTb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZXJyb3IuY3BwIFwKIAlT
b3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZmF2aWNvbmRhdGFiYXNlLmNwcCBcCiAJU291
cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGZhdmljb25kYXRhYmFzZXByaXZhdGUuaCBcCisJ
U291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGZpbGVjaG9vc2VycmVxdWVzdC5jcHAgXAor
CVNvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRmaWxlY2hvb3NlcnJlcXVlc3QuaCBcCisJ
U291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGZpbGVjaG9vc2VycmVxdWVzdHByaXZhdGUu
aCBcCiAJU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGdlb2xvY2F0aW9ucG9saWN5ZGVj
aXNpb24uY3BwIFwKIAlTb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0Z2VvbG9jYXRpb25w
b2xpY3lkZWNpc2lvbnByaXZhdGUuaCBcCiAJU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtp
dGdsb2JhbHMuY3BwIFwKSW5kZXg6IFdlYktpdC1yMTE4MzM2L1NvdXJjZS9XZWJLaXQvZ3RrL1dl
YkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0LXIx
MTgzMzYub3JpZy9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRH
dGsuY3BwCisrKyBXZWJLaXQtcjExODMzNi9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9y
dC9DaHJvbWVDbGllbnRHdGsuY3BwCkBAIC01NSw2ICs1NSw3IEBACiAjaW5jbHVkZSAiV2ViS2l0
RE9NQmluZGluZy5oIgogI2luY2x1ZGUgIldlYktpdERPTUhUTUxFbGVtZW50UHJpdmF0ZS5oIgog
I2luY2x1ZGUgIldpbmRvd0ZlYXR1cmVzLmgiCisjaW5jbHVkZSAid2Via2l0ZmlsZWNob29zZXJy
ZXF1ZXN0cHJpdmF0ZS5oIgogI2luY2x1ZGUgIndlYmtpdGdlb2xvY2F0aW9ucG9saWN5ZGVjaXNp
b24uaCIKICNpbmNsdWRlICJ3ZWJraXRnZW9sb2NhdGlvbnBvbGljeWRlY2lzaW9ucHJpdmF0ZS5o
IgogI2luY2x1ZGUgIndlYmtpdG5ldHdvcmtyZXF1ZXN0LmgiCkBAIC04MTQsNDAgKzgxNSw4IEBA
IHZvaWQgQ2hyb21lQ2xpZW50OjpyZWFjaGVkQXBwbGljYXRpb25DYWMKIAogdm9pZCBDaHJvbWVD
bGllbnQ6OnJ1bk9wZW5QYW5lbChGcmFtZSosIFBhc3NSZWZQdHI8RmlsZUNob29zZXI+IHBycEZp
bGVDaG9vc2VyKQogewotICAgIFJlZlB0cjxGaWxlQ2hvb3Nlcj4gY2hvb3NlciA9IHBycEZpbGVD
aG9vc2VyOwotCi0gICAgR3RrV2lkZ2V0KiB0b3BsZXZlbCA9IGd0a193aWRnZXRfZ2V0X3RvcGxl
dmVsKEdUS19XSURHRVQobV93ZWJWaWV3KSk7Ci0gICAgaWYgKCF3aWRnZXRJc09uc2NyZWVuVG9w
bGV2ZWxXaW5kb3codG9wbGV2ZWwpKQotICAgICAgICB0b3BsZXZlbCA9IDA7Ci0KLSAgICBHdGtX
aWRnZXQqIGRpYWxvZyA9IGd0a19maWxlX2Nob29zZXJfZGlhbG9nX25ldyhfKCJVcGxvYWQgRmls
ZSIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHRvcGxldmVsID8gR1RLX1dJTkRPVyh0b3BsZXZlbCkgOiAwLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdUS19GSUxFX0NIT09TRVJfQUNUSU9O
X09QRU4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgR1RLX1NUT0NLX0NBTkNFTCwgR1RLX1JFU1BPTlNFX0NBTkNFTCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHVEtfU1RPQ0tfT1BFTiwgR1RL
X1JFU1BPTlNFX0FDQ0VQVCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBOVUxMKTsKLQotICAgIGd0a19maWxlX2Nob29zZXJfc2V0X3NlbGVjdF9t
dWx0aXBsZShHVEtfRklMRV9DSE9PU0VSKGRpYWxvZyksIGNob29zZXItPnNldHRpbmdzKCkuYWxs
b3dzTXVsdGlwbGVGaWxlcyk7Ci0KLSAgICBpZiAoZ3RrX2RpYWxvZ19ydW4oR1RLX0RJQUxPRyhk
aWFsb2cpKSA9PSBHVEtfUkVTUE9OU0VfQUNDRVBUKSB7Ci0gICAgICAgIGlmIChndGtfZmlsZV9j
aG9vc2VyX2dldF9zZWxlY3RfbXVsdGlwbGUoR1RLX0ZJTEVfQ0hPT1NFUihkaWFsb2cpKSkgewot
ICAgICAgICAgICAgR093blB0cjxHU0xpc3Q+IGZpbGVuYW1lcyhndGtfZmlsZV9jaG9vc2VyX2dl
dF9maWxlbmFtZXMoR1RLX0ZJTEVfQ0hPT1NFUihkaWFsb2cpKSk7Ci0gICAgICAgICAgICBWZWN0
b3I8U3RyaW5nPiBuYW1lczsKLSAgICAgICAgICAgIGZvciAoR1NMaXN0KiBpdGVtID0gZmlsZW5h
bWVzLmdldCgpIDsgaXRlbSA7IGl0ZW0gPSBpdGVtLT5uZXh0KSB7Ci0gICAgICAgICAgICAgICAg
aWYgKCFpdGVtLT5kYXRhKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
ICAgICAgICBuYW1lcy5hcHBlbmQoZmlsZW5hbWVUb1N0cmluZyhzdGF0aWNfY2FzdDxjaGFyKj4o
aXRlbS0+ZGF0YSkpKTsKLSAgICAgICAgICAgICAgICBnX2ZyZWUoaXRlbS0+ZGF0YSk7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBjaG9vc2VyLT5jaG9vc2VGaWxlcyhuYW1lcyk7Ci0gICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBnY2hhciogZmlsZW5hbWUgPSBndGtfZmlsZV9jaG9v
c2VyX2dldF9maWxlbmFtZShHVEtfRklMRV9DSE9PU0VSKGRpYWxvZykpOwotICAgICAgICAgICAg
aWYgKGZpbGVuYW1lKQotICAgICAgICAgICAgICAgIGNob29zZXItPmNob29zZUZpbGUoZmlsZW5h
bWVUb1N0cmluZyhmaWxlbmFtZSkpOwotICAgICAgICAgICAgZ19mcmVlKGZpbGVuYW1lKTsKLSAg
ICAgICAgfQotICAgIH0KLSAgICBndGtfd2lkZ2V0X2Rlc3Ryb3koZGlhbG9nKTsKKyAgICBHUmVm
UHRyPFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdD4gcmVxdWVzdCA9IGFkb3B0R1JlZih3ZWJraXRf
ZmlsZV9jaG9vc2VyX3JlcXVlc3RfY3JlYXRlKHBycEZpbGVDaG9vc2VyKSk7CisgICAgd2Via2l0
X3dlYl92aWV3X3J1bl9maWxlX2Nob29zZXJfcmVxdWVzdChtX3dlYlZpZXcsIHJlcXVlc3QuZ2V0
KCkpOwogfQogCiB2b2lkIENocm9tZUNsaWVudDo6bG9hZEljb25Gb3JGaWxlcyhjb25zdCBWZWN0
b3I8V1RGOjpTdHJpbmc+JiBmaWxlbmFtZXMsIFdlYkNvcmU6OkZpbGVJY29uTG9hZGVyKiBsb2Fk
ZXIpCkluZGV4OiBXZWJLaXQtcjExODMzNi9Tb3VyY2UvV2ViS2l0L2d0ay9kb2NzL3dlYmtpdGd0
ay1kb2NzLnNnbWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0LXIxMTgzMzYub3JpZy9Tb3VyY2UvV2Vi
S2l0L2d0ay9kb2NzL3dlYmtpdGd0ay1kb2NzLnNnbWwKKysrIFdlYktpdC1yMTE4MzM2L1NvdXJj
ZS9XZWJLaXQvZ3RrL2RvY3Mvd2Via2l0Z3RrLWRvY3Muc2dtbApAQCAtNDEsNiArNDEsNyBAQAog
ICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC93ZWJraXRpY29uZGF0YWJhc2UueG1sIi8+CiAgICAg
PHhpOmluY2x1ZGUgaHJlZj0ieG1sL3dlYmtpdHNwZWxsY2hlY2tlci54bWwiLz4KICAgICA8eGk6
aW5jbHVkZSBocmVmPSJ4bWwvd2Via2l0ZmF2aWNvbmRhdGFiYXNlLnhtbCIvPgorICAgIDx4aTpp
bmNsdWRlIGhyZWY9InhtbC93ZWJraXRmaWxlY2hvb3NlcnJlcXVlc3QueG1sIi8+CiAgIDwvY2hh
cHRlcj4KIAogICA8Y2hhcHRlcj4KSW5kZXg6IFdlYktpdC1yMTE4MzM2L1NvdXJjZS9XZWJLaXQv
Z3RrL2RvY3Mvd2Via2l0Z3RrLXNlY3Rpb25zLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQtcjEx
ODMzNi5vcmlnL1NvdXJjZS9XZWJLaXQvZ3RrL2RvY3Mvd2Via2l0Z3RrLXNlY3Rpb25zLnR4dAor
KysgV2ViS2l0LXIxMTgzMzYvU291cmNlL1dlYktpdC9ndGsvZG9jcy93ZWJraXRndGstc2VjdGlv
bnMudHh0CkBAIC03MDMsNiArNzAzLDMwIEBAIFdlYktpdEZhdmljb25EYXRhYmFzZVByaXZhdGUK
IDwvU0VDVElPTj4KIAogPFNFQ1RJT04+Cis8RklMRT53ZWJraXRmaWxlY2hvb3NlcnJlcXVlc3Q8
L0ZJTEU+Cis8VElUTEU+V2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0PC9USVRMRT4KK1dlYktpdEZp
bGVDaG9vc2VyUmVxdWVzdAord2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9zZWxlY3Rf
bXVsdGlwbGUKK3dlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfbWltZV90eXBlcword2Vi
a2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9taW1lX3R5cGVzX2ZpbHRlcgord2Via2l0X2Zp
bGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9zZWxlY3RlZF9maWxlcword2Via2l0X2ZpbGVfY2hvb3Nl
cl9yZXF1ZXN0X3NlbGVjdF9maWxlcworCis8U1VCU0VDVElPTiBTdGFuZGFyZD4KK1dFQktJVF9U
WVBFX0ZJTEVfQ0hPT1NFUl9SRVFVRVNUCitXRUJLSVRfRklMRV9DSE9PU0VSX1JFUVVFU1QKK1dF
QktJVF9JU19GSUxFX0NIT09TRVJfUkVRVUVTVAorV0VCS0lUX0ZJTEVfQ0hPT1NFUl9SRVFVRVNU
X0NMQVNTCitXRUJLSVRfSVNfRklMRV9DSE9PU0VSX1JFUVVFU1RfQ0xBU1MKK1dFQktJVF9GSUxF
X0NIT09TRVJfUkVRVUVTVF9HRVRfQ0xBU1MKKworPFNVQlNFQ1RJT04gUHJpdmF0ZT4KK1dlYktp
dEZpbGVDaG9vc2VyUmVxdWVzdENsYXNzCitXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3RQcml2YXRl
Cit3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X3R5cGUKKzwvU0VDVElPTj4KKworPFNF
Q1RJT04+CiA8RklMRT53ZWJraXRkZWZpbmVzPC9GSUxFPgogV0VCS0lUX0FQSQogV0VCS0lUR1RL
X0FQSV9WRVJTSU9OCkluZGV4OiBXZWJLaXQtcjExODMzNi9Tb3VyY2UvV2ViS2l0L2d0ay9kb2Nz
L3dlYmtpdGd0ay50eXBlcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQtcjExODMzNi5vcmlnL1NvdXJj
ZS9XZWJLaXQvZ3RrL2RvY3Mvd2Via2l0Z3RrLnR5cGVzCisrKyBXZWJLaXQtcjExODMzNi9Tb3Vy
Y2UvV2ViS2l0L2d0ay9kb2NzL3dlYmtpdGd0ay50eXBlcwpAQCAtMSw2ICsxLDcgQEAKICNpbmNs
dWRlIDx3ZWJraXQvd2Via2l0Lmg+CiB3ZWJraXRfZG93bmxvYWRfZ2V0X3R5cGUKIHdlYmtpdF9m
YXZpY29uX2RhdGFiYXNlX2dldF90eXBlCit3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0
X3R5cGUKIHdlYmtpdF9nZW9sb2NhdGlvbl9wb2xpY3lfZGVjaXNpb25fZ2V0X3R5cGUKIHdlYmtp
dF9oaXRfdGVzdF9yZXN1bHRfZ2V0X3R5cGUKIHdlYmtpdF9pY29uX2RhdGFiYXNlX2dldF90eXBl
CkluZGV4OiBXZWJLaXQtcjExODMzNi9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0Zmls
ZWNob29zZXJyZXF1ZXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSAvZGV2L251bGwKKysrIFdlYktpdC1y
MTE4MzM2L1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRmaWxlY2hvb3NlcnJlcXVlc3Qu
Y3BwCkBAIC0wLDAgKzEsMzQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBT
LkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJ3ZWJraXRmaWxlY2hvb3NlcnJlcXVl
c3QuaCIKKworI2luY2x1ZGUgIkZpbGVDaG9vc2VyLmgiCisjaW5jbHVkZSAiRmlsZVN5c3RlbS5o
IgorI2luY2x1ZGUgIndlYmtpdGZpbGVjaG9vc2VycmVxdWVzdHByaXZhdGUuaCIKKyNpbmNsdWRl
ICJ3ZWJraXRnbG9iYWxzcHJpdmF0ZS5oIgorI2luY2x1ZGUgPGdsaWIvZ2kxOG4tbGliLmg+Cisj
aW5jbHVkZSA8d3RmL2dvYmplY3QvR093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dS
ZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK3VzaW5nIG5hbWVzcGFj
ZSBXZWJDb3JlOworCisvKioKKyAqIFNFQ1RJT046IFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdAor
ICogQFNob3J0X2Rlc2NyaXB0aW9uOiBBIHJlcXVlc3QgdG8gb3BlbiBhIGZpbGUgY2hvb3Nlcgor
ICogQFRpdGxlOiBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QKKyAqIEBTZWVfYWxzbzogI1dlYktp
dFdlYlZpZXcKKyAqCisgKiBXaGVuZXZlciB0aGUgdXNlciBpbnRlcmFjdHMgd2l0aCBhbiAmbHQ7
aW5wdXQgdHlwZT0nZmlsZScgLyZndDsKKyAqIEhUTUwgZWxlbWVudCwgV2ViS2l0IHdpbGwgbmVl
ZCB0byBzaG93IGEgZGlhbG9nIHRvIGNob29zZSBvbmUgb3IKKyAqIG1vcmUgZmlsZXMgdG8gYmUg
dXBsb2FkZWQgdG8gdGhlIHNlcnZlciBhbG9uZyB3aXRoIHRoZSByZXN0IG9mIHRoZQorICogZm9y
bSBkYXRhLiBGb3IgdGhhdCB0byBoYXBwZW4gaW4gYSBnZW5lcmFsIHdheSwgaW5zdGVhZCBvZiBq
dXN0CisgKiBvcGVuaW5nIGEgI0d0a0ZpbGVDaG9vc2VyRGlhbG9nICh3aGljaCBtaWdodCBiZSBu
b3QgZGVzaXJhYmxlIGluCisgKiBzb21lIGNhc2VzLCB3aGljaCBjb3VsZCBwcmVmZXIgdG8gdXNl
IHRoZWlyIG93biBmaWxlIGNob29zZXIKKyAqIGRpYWxvZyksIFdlYktpdCB3aWxsIGZpcmUgdGhl
ICNXZWJLaXRXZWJWaWV3OjpydW4tZmlsZS1jaG9vc2VyCisgKiBzaWduYWwgd2l0aCBhICNXZWJL
aXRGaWxlQ2hvb3NlclJlcXVlc3Qgb2JqZWN0LCB3aGljaCB3aWxsIGFsbG93CisgKiB0aGUgY2xp
ZW50IGFwcGxpY2F0aW9uIHRvIHNwZWNpZnkgdGhlIGZpbGVzIHRvIGJlIHNlbGVjdGVkLCB0bwor
ICogaW5zcGVjdCB0aGUgZGV0YWlscyBvZiB0aGUgcmVxdWVzdCAoZS5nLiBpZiBtdWx0aXBsZSBz
ZWxlY3Rpb24KKyAqIHNob3VsZCBiZSBhbGxvd2VkKSBhbmQgdG8gY2FuY2VsIHRoZSByZXF1ZXN0
LCBpbiBjYXNlIG5vdGhpbmcgd2FzCisgKiBzZWxlY3RlZC4KKyAqCisgKiBJbiBjYXNlIHRoZSBj
bGllbnQgYXBwbGljYXRpb24gZG9lcyBub3Qgd2lzaCB0byBoYW5kbGUgdGhpcyBzaWduYWwsCisg
KiBXZWJLaXQgd2lsbCBwcm92aWRlIGEgZGVmYXVsdCBoYW5kbGVyIHdoaWNoIHdpbGwgYXN5bmNo
cm9ub3VzbHkgcnVuCisgKiBhIHJlZ3VsYXIgI0d0a0ZpbGVDaG9vc2VyRGlhbG9nIGZvciB0aGUg
dXNlciB0byBpbnRlcmFjdCB3aXRoLgorICovCitHX0RFRklORV9UWVBFKFdlYktpdEZpbGVDaG9v
c2VyUmVxdWVzdCwgd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0LCBHX1RZUEVfT0JKRUNUKQor
CitzdHJ1Y3QgX1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdFByaXZhdGUgeworICAgIFJlZlB0cjxG
aWxlQ2hvb3Nlcj4gY2hvb3NlcjsKKyAgICBHUmVmUHRyPEd0a0ZpbGVGaWx0ZXI+IGZpbHRlcjsK
KyAgICBHUmVmUHRyPEdQdHJBcnJheT4gbWltZVR5cGVzOworICAgIEdSZWZQdHI8R1B0ckFycmF5
PiBzZWxlY3RlZEZpbGVzOworfTsKKworZW51bSB7CisgICAgUFJPUF8wLAorICAgIFBST1BfRklM
VEVSLAorICAgIFBST1BfTUlNRV9UWVBFUywKKyAgICBQUk9QX1NFTEVDVF9NVUxUSVBMRSwKKyAg
ICBQUk9QX1NFTEVDVEVEX0ZJTEVTLAorfTsKKworc3RhdGljIHZvaWQgd2Via2l0X2ZpbGVfY2hv
b3Nlcl9yZXF1ZXN0X2luaXQoV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0KiByZXF1ZXN0KQorewor
ICAgIHJlcXVlc3QtPnByaXYgPSBHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUocmVxdWVzdCwg
V0VCS0lUX1RZUEVfRklMRV9DSE9PU0VSX1JFUVVFU1QsIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVz
dFByaXZhdGUpOworICAgIG5ldyAocmVxdWVzdC0+cHJpdikgV2ViS2l0RmlsZUNob29zZXJSZXF1
ZXN0UHJpdmF0ZSgpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVl
c3RfZmluYWxpemUoR09iamVjdCogb2JqZWN0KQoreworICAgIFdlYktpdEZpbGVDaG9vc2VyUmVx
dWVzdCogcmVxdWVzdCA9IFdFQktJVF9GSUxFX0NIT09TRVJfUkVRVUVTVChvYmplY3QpOworCisg
ICAgcmVxdWVzdC0+cHJpdi0+fldlYktpdEZpbGVDaG9vc2VyUmVxdWVzdFByaXZhdGUoKTsKKyAg
ICBHX09CSkVDVF9DTEFTUyh3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfcGFyZW50X2NsYXNz
KS0+ZmluYWxpemUob2JqZWN0KTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2ZpbGVfY2hvb3Nl
cl9yZXF1ZXN0X2dldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BJZCwgR1Zh
bHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcGFyYW1TcGVjKQoreworICAgIFdlYktpdEZpbGVDaG9v
c2VyUmVxdWVzdCogcmVxdWVzdCA9IFdFQktJVF9GSUxFX0NIT09TRVJfUkVRVUVTVChvYmplY3Qp
OworICAgIHN3aXRjaCAocHJvcElkKSB7CisgICAgY2FzZSBQUk9QX0ZJTFRFUjoKKyAgICAgICAg
Z192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0
X21pbWVfdHlwZXNfZmlsdGVyKHJlcXVlc3QpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQ
Uk9QX01JTUVfVFlQRVM6CisgICAgICAgIGdfdmFsdWVfc2V0X2JveGVkKHZhbHVlLCB3ZWJraXRf
ZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X21pbWVfdHlwZXMocmVxdWVzdCkpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIFBST1BfU0VMRUNUX01VTFRJUExFOgorICAgICAgICBnX3ZhbHVlX3Nl
dF9ib29sZWFuKHZhbHVlLCB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X3NlbGVjdF9t
dWx0aXBsZShyZXF1ZXN0KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9TRUxFQ1RF
RF9GSUxFUzoKKyAgICAgICAgZ192YWx1ZV9zZXRfYm94ZWQodmFsdWUsIHdlYmtpdF9maWxlX2No
b29zZXJfcmVxdWVzdF9nZXRfc2VsZWN0ZWRfZmlsZXMocmVxdWVzdCkpOworICAgICAgICBicmVh
azsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlf
SUQob2JqZWN0LCBwcm9wSWQsIHBhcmFtU3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30K
Kworc3RhdGljIHZvaWQgd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2NsYXNzX2luaXQoV2Vi
S2l0RmlsZUNob29zZXJSZXF1ZXN0Q2xhc3MqIHJlcXVlc3RDbGFzcykKK3sKKyAgICBHT2JqZWN0
Q2xhc3MqIG9iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1MocmVxdWVzdENsYXNzKTsKKyAgICBv
YmplY3RDbGFzcy0+ZmluYWxpemUgPSB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZmluYWxp
emU7CisgICAgb2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtpdF9maWxlX2Nob29zZXJf
cmVxdWVzdF9nZXRfcHJvcGVydHk7CisgICAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlKHJlcXVl
c3RDbGFzcywgc2l6ZW9mKFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdFByaXZhdGUpKTsKKworICAg
IC8qKgorICAgICAqIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdDpmaWx0ZXI6CisgICAgICoKKyAg
ICAgKiBUaGUgZmlsdGVyIGN1cnJlbnRseSBhc3NvY2lhdGVkIHdpdGggdGhlIHJlcXVlc3QuIFNl
ZQorICAgICAqIHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfbWltZV90eXBlc19maWx0
ZXIoKSBmb3IgbW9yZQorICAgICAqIGRldGFpbHMuCisgICAgICovCisgICAgZ19vYmplY3RfY2xh
c3NfaW5zdGFsbF9wcm9wZXJ0eShvYmplY3RDbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFBST1BfRklMVEVSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCgiZmlsdGVyIiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIk1JTUUgdHlwZXMgZmlsdGVyIiks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
KCJUaGUgZmlsdGVyIGN1cnJlbnRseSBhc3NvY2lhdGVkIHdpdGggdGhlIHJlcXVlc3QiKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdUS19U
WVBFX0ZJTEVfRklMVEVSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisgICAgLyoqCisgICAgICog
V2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0Om1pbWUtdHlwZXM6CisgICAgICoKKyAgICAgKiBBICVO
VUxMLXRlcm1pbmF0ZWQgYXJyYXkgb2Ygc3RyaW5ncyBjb250YWluaW5nIHRoZSBsaXN0IG9mIE1J
TUUKKyAgICAgKiB0eXBlcyB0aGUgZmlsZSBjaG9vc2VyIGRpYWxvZyBzaG91bGQgaGFuZGxlLiBT
ZWUKKyAgICAgKiB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X21pbWVfdHlwZXMoKSBm
b3IgbW9yZSBkZXRhaWxzLgorICAgICAqLworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJv
cGVydHkob2JqZWN0Q2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQ
Uk9QX01JTUVfVFlQRVMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3Bh
cmFtX3NwZWNfYm94ZWQoIm1pbWUtdHlwZXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiTUlNRSB0eXBlcyIpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiVGhlIGxpc3Qgb2Yg
TUlNRSB0eXBlcyBhc3NvY2lhdGVkIHdpdGggdGhlIHJlcXVlc3QiKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdfVFlQRV9TVFJWLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lU
X1BBUkFNX1JFQURBQkxFKSk7ICAgIC8qKgorICAgICAqIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVz
dDpzZWxlY3QtbXVsdGlwbGU6CisgICAgICoKKyAgICAgKiBXaGV0aGVyIHRoZSBmaWxlIGNob29z
ZXIgc2hvdWxkIGFsbG93IHNlbGVjdGluZyBtdWx0aXBsZQorICAgICAqIGZpbGVzLiBTZWUKKyAg
ICAgKiB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X3NlbGVjdF9tdWx0aXBsZSgpIGZv
cgorICAgICAqIG1vcmUgZGV0YWlscy4KKyAgICAgKi8KKyAgICBnX29iamVjdF9jbGFzc19pbnN0
YWxsX3Byb3BlcnR5KG9iamVjdENsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgUFJPUF9TRUxFQ1RfTVVMVElQTEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbigic2VsZWN0LW11bHRpcGxlIiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJTZWxlY3Qg
bXVsdGlwbGUgZmlsZXMiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfKCJXaGV0aGVyIHRoZSBmaWxlIGNob29zZXIgc2hvdWxkIGFsbG93
IHNlbGVjdGluZyBtdWx0aXBsZSBmaWxlcyIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZBTFNFLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkp
OworICAgIC8qKgorICAgICAqIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdDpzZWxlY3RlZC1maWxl
czoKKyAgICAgKgorICAgICAqIEEgJU5VTEwtdGVybWluYXRlZCBhcnJheSBvZiBzdHJpbmdzIGNv
bnRhaW5pbmcgdGhlIGxpc3Qgb2YKKyAgICAgKiBzZWxlY3RlZCBmaWxlcyBhc3NvY2lhdGVkIHRv
IHRoZSBjdXJyZW50IHJlcXVlc3QuIFNlZQorICAgICAqIHdlYmtpdF9maWxlX2Nob29zZXJfcmVx
dWVzdF9nZXRfc2VsZWN0ZWRfZmlsZXMoKSBmb3IgbW9yZSBkZXRhaWxzLgorICAgICAqLworICAg
IGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkob2JqZWN0Q2xhc3MsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9QX1NFTEVDVEVEX0ZJTEVTLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVjX2JveGVkKCJzZWxlY3RlZC1m
aWxlcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfKCJTZWxlY3RlZCBmaWxlcyIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXygiVGhlIGxpc3Qgb2Ygc2VsZWN0ZWQgZmlsZXMgYXNz
b2NpYXRlZCB3aXRoIHRoZSByZXF1ZXN0IiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBHX1RZUEVfU1RSViwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJM
RSkpOworfQorCitXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QqIHdlYmtpdF9maWxlX2Nob29zZXJf
cmVxdWVzdF9jcmVhdGUoUGFzc1JlZlB0cjxGaWxlQ2hvb3Nlcj4gY2hvb3NlcikKK3sKKyAgICBX
ZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QqIHJlcXVlc3QgPSBXRUJLSVRfRklMRV9DSE9PU0VSX1JF
UVVFU1QoZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX0ZJTEVfQ0hPT1NFUl9SRVFVRVNULCBOVUxM
KSk7CisgICAgcmVxdWVzdC0+cHJpdi0+Y2hvb3NlciA9IGNob29zZXI7CisgICAgcmV0dXJuIHJl
cXVlc3Q7Cit9CisKKy8qKgorICogd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9taW1l
X3R5cGVzOgorICogQHJlcXVlc3Q6IGEgI1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdAorICoKKyAq
IEdldCB0aGUgbGlzdCBvZiBNSU1FIHR5cGVzIHRoZSBmaWxlIGNob29zZXIgZGlhbG9nIHNob3Vs
ZCBoYW5kbGUsCisgKiBpbiB0aGUgZm9ybWF0IHNwZWNpZmllZCBpbiBSRkMgMjA0NiBmb3IgIm1l
ZGlhIHR5cGVzIi4gSXRzIGNvbnRlbnRzCisgKiBkZXBlbmQgb24gdGhlIHZhbHVlIG9mIHRoZSAn
YWNjZXB0JyBhdHRyaWJ1dGUgZm9yIEhUTUwgaW5wdXQKKyAqIGVsZW1lbnRzLiBUaGlzIGZ1bmN0
aW9uIHNob3VsZCBub3JtYWxseSBiZSBjYWxsZWQgYmVmb3JlIHByZXNlbnRpbmcKKyAqIHRoZSBm
aWxlIGNob29zZXIgZGlhbG9nIHRvIHRoZSB1c2VyLCB0byBkZWNpZGUgd2hldGhlciB0byBhbGxv
dyB0aGUKKyAqIHVzZXIgdG8gc2VsZWN0IG11bHRpcGxlIGZpbGVzIGF0IG9uY2Ugb3Igb25seSBv
bmUuCisgKgorICogUmV0dXJuczogKGFycmF5IHplcm8tdGVybWluYXRlZD0xKSAodHJhbnNmZXIg
bm9uZSk6IGEKKyAqICVOVUxMLXRlcm1pbmF0ZWQgYXJyYXkgb2Ygc3RyaW5ncyBpZiBhIGxpc3Qg
b2YgYWNjZXB0ZWQgTUlNRSB0eXBlcworICogaXMgZGVmaW5lZCBvciAlTlVMTCBvdGhlcndpc2Us
IG1lYW5pbmcgdGhhdCBhbnkgTUlNRSB0eXBlIHNob3VsZCBiZQorICogYWNjZXB0ZWQuIFRoaXMg
YXJyYXkgYW5kIGl0cyBjb250ZW50cyBhcmUgb3duZWQgYnkgV2ViS2l0R1RLKyBhbmQKKyAqIHNo
b3VsZCBub3QgYmUgbW9kaWZpZWQgb3IgZnJlZWQuCisgKi8KK2NvbnN0IGdjaGFyKiBjb25zdCog
d2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9taW1lX3R5cGVzKFdlYktpdEZpbGVDaG9v
c2VyUmVxdWVzdCogcmVxdWVzdCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRf
SVNfRklMRV9DSE9PU0VSX1JFUVVFU1QocmVxdWVzdCksIDApOworICAgIGlmIChyZXF1ZXN0LT5w
cml2LT5taW1lVHlwZXMpCisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGdjaGFyKio+
KHJlcXVlc3QtPnByaXYtPm1pbWVUeXBlcy0+cGRhdGEpOworCisgICAgRmlsZUNob29zZXJTZXR0
aW5ncyBzZXR0aW5ncyA9IHJlcXVlc3QtPnByaXYtPmNob29zZXItPnNldHRpbmdzKCk7CisgICAg
c2l6ZV90IG51bU9mTWltZVR5cGVzID0gc2V0dGluZ3MuYWNjZXB0TUlNRVR5cGVzLnNpemUoKTsK
KyAgICBpZiAoIW51bU9mTWltZVR5cGVzKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJlcXVl
c3QtPnByaXYtPm1pbWVUeXBlcyA9IGFkb3B0R1JlZihnX3B0cl9hcnJheV9uZXdfd2l0aF9mcmVl
X2Z1bmMoZ19mcmVlKSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1PZk1pbWVUeXBl
czsgKytpKSB7CisgICAgICAgIFN0cmluZyBtaW1lVHlwZVN0cmluZyA9IHNldHRpbmdzLmFjY2Vw
dE1JTUVUeXBlc1tpXTsKKyAgICAgICAgaWYgKG1pbWVUeXBlU3RyaW5nLmlzRW1wdHkoKSkKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBnX3B0cl9hcnJheV9hZGQocmVxdWVzdC0+cHJp
di0+bWltZVR5cGVzLmdldCgpLCBnX3N0cmR1cChtaW1lVHlwZVN0cmluZy51dGY4KCkuZGF0YSgp
KSk7CisgICAgfQorICAgIGdfcHRyX2FycmF5X2FkZChyZXF1ZXN0LT5wcml2LT5taW1lVHlwZXMu
Z2V0KCksIDApOworCisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Z2NoYXIqKj4ocmVxdWVz
dC0+cHJpdi0+bWltZVR5cGVzLT5wZGF0YSk7Cit9CisKKy8qKgorICogd2Via2l0X2ZpbGVfY2hv
b3Nlcl9yZXF1ZXN0X2dldF9taW1lX3R5cGVzX2ZpbHRlcjoKKyAqIEByZXF1ZXN0OiBhICNXZWJL
aXRGaWxlQ2hvb3NlclJlcXVlc3QKKyAqCisgKiBHZXQgdGhlIGZpbHRlciBjdXJyZW50bHkgYXNz
b2NpYXRlZCB3aXRoIHRoZSByZXF1ZXN0LCByZWFkeSB0byBiZQorICogdXNlZCBieSAjR3RrRmls
ZUNob29zZXIuIFRoaXMgZnVuY3Rpb24gc2hvdWxkIG5vcm1hbGx5IGJlIGNhbGxlZAorICogYmVm
b3JlIHByZXNlbnRpbmcgdGhlIGZpbGUgY2hvb3NlciBkaWFsb2cgdG8gdGhlIHVzZXIsIHRvIGRl
Y2lkZQorICogd2hldGhlciB0byBhcHBseSBhIGZpbHRlciBzbyB0aGUgdXNlciB3b3VsZCBub3Qg
YmUgYWxsb3dlZCB0bworICogc2VsZWN0IGZpbGVzIHdpdGggb3RoZXIgTUlNRSB0eXBlcy4KKyAq
CisgKiBTZWUgd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9taW1lX3R5cGVzKCkgaWYg
eW91IGFyZQorICogaW50ZXJlc3RlZCBpbiBnZXR0aW5nIHRoZSBsaXN0IG9mIGFjY2VwdGVkIE1J
TUUgdHlwZXMuCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiBhICNHdGtGaWxlRmls
dGVyIGlmIGEgbGlzdCBvZiBhY2NlcHRlZAorICogTUlNRSB0eXBlcyBpcyBkZWZpbmVkIG9yICVO
VUxMIG90aGVyd2lzZS4gVGhlIHJldHVybmVkIG9iamVjdCBpcworICogb3duZWQgYnkgV2ViS2l0
R1RLKyBzaG91bGQgbm90IGJlIG1vZGlmaWVkIG9yIGZyZWVkLgorICovCitHdGtGaWxlRmlsdGVy
KiB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X21pbWVfdHlwZXNfZmlsdGVyKFdlYktp
dEZpbGVDaG9vc2VyUmVxdWVzdCogcmVxdWVzdCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFp
bChXRUJLSVRfSVNfRklMRV9DSE9PU0VSX1JFUVVFU1QocmVxdWVzdCksIDApOworICAgIGlmIChy
ZXF1ZXN0LT5wcml2LT5maWx0ZXIpCisgICAgICAgIHJldHVybiByZXF1ZXN0LT5wcml2LT5maWx0
ZXIuZ2V0KCk7CisKKyAgICBGaWxlQ2hvb3NlclNldHRpbmdzIHNldHRpbmdzID0gcmVxdWVzdC0+
cHJpdi0+Y2hvb3Nlci0+c2V0dGluZ3MoKTsKKyAgICBzaXplX3QgbnVtT2ZNaW1lVHlwZXMgPSBz
ZXR0aW5ncy5hY2NlcHRNSU1FVHlwZXMuc2l6ZSgpOworICAgIGlmICghbnVtT2ZNaW1lVHlwZXMp
CisgICAgICAgIHJldHVybiAwOworCisgICAgLy8gRG8gbm90IHVzZSBhZG9wdEdSZWYgaGVyZSwg
c2luY2Ugd2Ugd2FudCB0byBzaW5rIHRoZSBmbG9hdGluZworICAgIC8vIHJlZmVyZW5jZSBmb3Ig
dGhlIG5ldyBpbnN0YW5jZSBvZiBHdGtGaWxlRmlsdGVyLCBzbyB3ZSBtYWtlCisgICAgLy8gc3Vy
ZSB3ZSBrZWVwIHRoZSBvd25lcnNoaXAgZHVyaW5nIHRoZSBsaWZldGltZSBvZiB0aGUgcmVxdWVz
dC4KKyAgICByZXF1ZXN0LT5wcml2LT5maWx0ZXIgPSBndGtfZmlsZV9maWx0ZXJfbmV3KCk7Cisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1PZk1pbWVUeXBlczsgKytpKSB7CisgICAgICAg
IFN0cmluZyBtaW1lVHlwZVN0cmluZyA9IHNldHRpbmdzLmFjY2VwdE1JTUVUeXBlc1tpXTsKKyAg
ICAgICAgaWYgKG1pbWVUeXBlU3RyaW5nLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICBndGtfZmlsZV9maWx0ZXJfYWRkX21pbWVfdHlwZShyZXF1ZXN0LT5wcml2LT5m
aWx0ZXIuZ2V0KCksIG1pbWVUeXBlU3RyaW5nLnV0ZjgoKS5kYXRhKCkpOworICAgIH0KKworICAg
IHJldHVybiByZXF1ZXN0LT5wcml2LT5maWx0ZXIuZ2V0KCk7Cit9CisKKy8qKgorICogd2Via2l0
X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9zZWxlY3RfbXVsdGlwbGU6CisgKiBAcmVxdWVzdDog
YSAjV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0CisgKgorICogRGV0ZXJtaW5lIHdoZXRoZXIgdGhl
IGZpbGUgY2hvb3NlciBhc3NvY2lhdGVkIHRvIHRoaXMKKyAqICNXZWJLaXRGaWxlQ2hvb3NlclJl
cXVlc3Qgc2hvdWxkIGFsbG93IHNlbGVjdGluZyBtdWx0aXBsZSBmaWxlcywKKyAqIHdoaWNoIGRl
cGVuZHMgb24gdGhlIEhUTUwgaW5wdXQgZWxlbWVudCBoYXZpbmcgYSAnbXVsdGlwbGUnCisgKiBh
dHRyaWJ1dGUgZGVmaW5lZC4KKyAqCisgKiBSZXR1cm5zOiAlVFJVRSBpZiB0aGUgZmlsZSBjaG9v
c2VyIHNob3VsZCBhbGxvdyBzZWxlY3RpbmcgbXVsdGlwbGUgZmlsZXMgb3IgJUZBTFNFIG90aGVy
d2lzZS4KKyAqLworZ2Jvb2xlYW4gd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9zZWxl
Y3RfbXVsdGlwbGUoV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0KiByZXF1ZXN0KQoreworICAgIGdf
cmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19GSUxFX0NIT09TRVJfUkVRVUVTVChyZXF1ZXN0
KSwgRkFMU0UpOworICAgIHJldHVybiByZXF1ZXN0LT5wcml2LT5jaG9vc2VyLT5zZXR0aW5ncygp
LmFsbG93c011bHRpcGxlRmlsZXM7Cit9CisKKy8qKgorICogd2Via2l0X2ZpbGVfY2hvb3Nlcl9y
ZXF1ZXN0X3NlbGVjdF9maWxlczoKKyAqIEByZXF1ZXN0OiBhICNXZWJLaXRGaWxlQ2hvb3NlclJl
cXVlc3QKKyAqIEBmaWxlczogKGFycmF5IHplcm8tdGVybWluYXRlZD0xKSAodHJhbnNmZXIgbm9u
ZSk6IGEKKyAqICVOVUxMLXRlcm1pbmF0ZWQgYXJyYXkgb2Ygc3RyaW5ncywgY29udGFpbmluZyBw
YXRocyB0byBsb2NhbCBmaWxlcy4KKyAqCisgKiBBc2sgV2ViS2l0IHRvIHNlbGVjdCBsb2NhbCBm
aWxlcyBmb3IgdXBsb2FkIGFuZCBjb21wbGV0ZSB0aGUKKyAqIHJlcXVlc3QuCisgKi8KK3ZvaWQg
d2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X3NlbGVjdF9maWxlcyhXZWJLaXRGaWxlQ2hvb3Nl
clJlcXVlc3QqIHJlcXVlc3QsIGNvbnN0IGdjaGFyKiBjb25zdCogZmlsZXMpCit7CisgICAgZ19y
ZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfRklMRV9DSE9PU0VSX1JFUVVFU1QocmVxdWVzdCkpOwor
ICAgIGdfcmV0dXJuX2lmX2ZhaWwoZmlsZXMpOworCisgICAgVmVjdG9yPFN0cmluZz4gbmFtZXM7
CisgICAgR1JlZlB0cjxHUHRyQXJyYXk+IHNlbGVjdGVkRmlsZXMgPSBhZG9wdEdSZWYoZ19wdHJf
YXJyYXlfbmV3X3dpdGhfZnJlZV9mdW5jKGdfZnJlZSkpOworCisgICAgZm9yIChpbnQgaSA9IDA7
IGZpbGVzW2ldOyBpKyspIHsKKyAgICAgICAgbmFtZXMuYXBwZW5kKGZpbGVuYW1lVG9TdHJpbmco
ZmlsZXNbaV0pKTsKKyAgICAgICAgZ19wdHJfYXJyYXlfYWRkKHNlbGVjdGVkRmlsZXMuZ2V0KCks
IGdfc3RyZHVwKGZpbGVzW2ldKSk7CisgICAgfQorCisgICAgZ19wdHJfYXJyYXlfYWRkKHNlbGVj
dGVkRmlsZXMuZ2V0KCksIDApOworICAgIHJlcXVlc3QtPnByaXYtPmNob29zZXItPmNob29zZUZp
bGVzKG5hbWVzKTsKKyAgICByZXF1ZXN0LT5wcml2LT5zZWxlY3RlZEZpbGVzID0gc2VsZWN0ZWRG
aWxlczsKK30KKworLyoqCisgKiB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X3NlbGVj
dGVkX2ZpbGVzOgorICogQHJlcXVlc3Q6IGEgI1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdAorICoK
KyAqIEdldCB0aGUgbGlzdCBvZiBzZWxlY3RlZCBmaWxlcyBjdXJyZW50bHkgYXNzb2NpYXRlZCB0
byB0aGUKKyAqIHJlcXVlc3QuIEluaXRpYWxseSwgdGhlIHJldHVybiB2YWx1ZSBvZiB0aGlzIG1l
dGhvZCBjb250YWlucyBhbnkKKyAqIGZpbGVzIHNlbGVjdGVkIGluIHByZXZpb3VzIGZpbGUgY2hv
b3NlciByZXF1ZXN0cyBmb3IgdGhpcyBIVE1MCisgKiBpbnB1dCBlbGVtZW50LiBPbmNlIHdlYmtp
dF9maWxlX2Nob29zZXJfcmVxdWVzdF9zZWxlY3RfZmlsZXMsIHRoZQorICogdmFsdWUgd2lsbCBy
ZWZsZWN0IHdoYXRldmVyIGZpbGVzIGFyZSBnaXZlbi4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHNo
b3VsZCBub3JtYWxseSBiZSBjYWxsZWQgb25seSBiZWZvcmUgcHJlc2VudGluZyB0aGUKKyAqIGZp
bGUgY2hvb3NlciBkaWFsb2cgdG8gdGhlIHVzZXIsIHRvIGRlY2lkZSB3aGV0aGVyIHRvIHBlcmZv
cm0gc29tZQorICogZXh0cmEgYWN0aW9uLCBsaWtlIHByZS1zZWxlY3RpbmcgdGhlIGZpbGVzIGZy
b20gYSBwcmV2aW91cyByZXF1ZXN0LgorICoKKyAqIFJldHVybnM6IChhcnJheSB6ZXJvLXRlcm1p
bmF0ZWQ9MSkgKHRyYW5zZmVyIG5vbmUpOiBhCisgKiAlTlVMTC10ZXJtaW5hdGVkIGFycmF5IG9m
IHN0cmluZ3MgaWYgdGhlcmUgYXJlIHNlbGVjdGVkIGZpbGVzCisgKiBhc3NvY2lhdGVkIHdpdGgg
dGhlIHJlcXVlc3Qgb3IgJU5VTEwgb3RoZXJ3aXNlLiBUaGlzIGFycmF5IGFuZCBpdHMKKyAqIGNv
bnRlbnRzIGFyZSBvd25lZCBieSBXZWJLaXRHVEsrIGFuZCBzaG91bGQgbm90IGJlIG1vZGlmaWVk
IG9yCisgKiBmcmVlZC4KKyAqLworY29uc3QgZ2NoYXIqIGNvbnN0KiB3ZWJraXRfZmlsZV9jaG9v
c2VyX3JlcXVlc3RfZ2V0X3NlbGVjdGVkX2ZpbGVzKFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCog
cmVxdWVzdCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfRklMRV9DSE9P
U0VSX1JFUVVFU1QocmVxdWVzdCksIDApOworICAgIGlmIChyZXF1ZXN0LT5wcml2LT5zZWxlY3Rl
ZEZpbGVzKQorICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxnY2hhcioqPihyZXF1ZXN0
LT5wcml2LT5zZWxlY3RlZEZpbGVzLT5wZGF0YSk7CisKKyAgICBGaWxlQ2hvb3NlclNldHRpbmdz
IHNldHRpbmdzID0gcmVxdWVzdC0+cHJpdi0+Y2hvb3Nlci0+c2V0dGluZ3MoKTsKKyAgICBzaXpl
X3QgbnVtT2ZGaWxlcyA9IHNldHRpbmdzLnNlbGVjdGVkRmlsZXMuc2l6ZSgpOworICAgIGlmICgh
bnVtT2ZGaWxlcykKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXF1ZXN0LT5wcml2LT5zZWxl
Y3RlZEZpbGVzID0gYWRvcHRHUmVmKGdfcHRyX2FycmF5X25ld193aXRoX2ZyZWVfZnVuYyhnX2Zy
ZWUpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bU9mRmlsZXM7ICsraSkgeworICAg
ICAgICBpZiAoc2V0dGluZ3Muc2VsZWN0ZWRGaWxlc1tpXS5pc0VtcHR5KCkpCisgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgQ1N0cmluZyBmaWxlbmFtZSA9IGZpbGVTeXN0ZW1SZXByZXNl
bnRhdGlvbihzZXR0aW5ncy5zZWxlY3RlZEZpbGVzW2ldKTsKKyAgICAgICAgZ19wdHJfYXJyYXlf
YWRkKHJlcXVlc3QtPnByaXYtPnNlbGVjdGVkRmlsZXMuZ2V0KCksIGdfc3RyZHVwKGZpbGVuYW1l
LmRhdGEoKSkpOworICAgIH0KKyAgICBnX3B0cl9hcnJheV9hZGQocmVxdWVzdC0+cHJpdi0+c2Vs
ZWN0ZWRGaWxlcy5nZXQoKSwgMCk7CisKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxnY2hh
cioqPihyZXF1ZXN0LT5wcml2LT5zZWxlY3RlZEZpbGVzLT5wZGF0YSk7Cit9CkluZGV4OiBXZWJL
aXQtcjExODMzNi9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZmlsZWNob29zZXJyZXF1
ZXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gL2Rldi9udWxsCisrKyBXZWJLaXQtcjExODMzNi9Tb3VyY2Uv
V2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZmlsZWNob29zZXJyZXF1ZXN0LmgKQEAgLTAsMCArMSw3
MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIHdlYmtp
dGZpbGVjaG9vc2VycmVxdWVzdF9oCisjZGVmaW5lIHdlYmtpdGZpbGVjaG9vc2VycmVxdWVzdF9o
CisKKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisjaW5jbHVkZSA8d2Via2l0L3dlYmtpdGRlZmluZXMu
aD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9UWVBFX0ZJTEVfQ0hPT1NFUl9S
RVFVRVNUICAgICAgICAgICAgKHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfdHlwZSgp
KQorI2RlZmluZSBXRUJLSVRfRklMRV9DSE9PU0VSX1JFUVVFU1Qob2JqKSAgICAgICAgICAgIChH
X1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX1RZUEVfRklMRV9DSE9PU0VS
X1JFUVVFU1QsIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCkpCisjZGVmaW5lIFdFQktJVF9GSUxF
X0NIT09TRVJfUkVRVUVTVF9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNU
KChrbGFzcyksICBXRUJLSVRfVFlQRV9GSUxFX0NIT09TRVJfUkVRVUVTVCwgV2ViS2l0RmlsZUNo
b29zZXJSZXF1ZXN0Q2xhc3MpKQorI2RlZmluZSBXRUJLSVRfSVNfRklMRV9DSE9PU0VSX1JFUVVF
U1Qob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lU
X1RZUEVfRklMRV9DSE9PU0VSX1JFUVVFU1QpKQorI2RlZmluZSBXRUJLSVRfSVNfRklMRV9DSE9P
U0VSX1JFUVVFU1RfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3Mp
LCAgV0VCS0lUX1RZUEVfRklMRV9DSE9PU0VSX1JFUVVFU1QpKQorI2RlZmluZSBXRUJLSVRfRklM
RV9DSE9PU0VSX1JFUVVFU1RfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NM
QVNTKChvYmopLCAgV0VCS0lUX1RZUEVfRklMRV9DSE9PU0VSX1JFUVVFU1QsIFdlYktpdEZpbGVD
aG9vc2VyUmVxdWVzdENsYXNzKSkKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdEZpbGVDaG9vc2Vy
UmVxdWVzdCAgICAgICAgV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0OwordHlwZWRlZiBzdHJ1Y3Qg
X1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdENsYXNzICAgV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0
Q2xhc3M7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0UHJpdmF0ZSBX
ZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3RQcml2YXRlOworCitzdHJ1Y3QgX1dlYktpdEZpbGVDaG9v
c2VyUmVxdWVzdCB7CisgICAgR09iamVjdCBwYXJlbnQ7CisKKyAgICAvKjwgcHJpdmF0ZSA+Ki8K
KyAgICBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3RQcml2YXRlICpwcml2OworfTsKKworc3RydWN0
IF9XZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3RDbGFzcyB7CisgICAgR09iamVjdENsYXNzIHBhcmVu
dF9jbGFzczsKK307CisKK1dFQktJVF9BUEkgR1R5cGUKK3dlYmtpdF9maWxlX2Nob29zZXJfcmVx
dWVzdF9nZXRfdHlwZSAgICAgICAgICAgICAgICAgICh2b2lkKTsKKworV0VCS0lUX0FQSSBjb25z
dCBnY2hhciAqIGNvbnN0ICoKK3dlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfbWltZV90
eXBlcyAgICAgICAgKFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCAqcmVxdWVzdCk7CisKK1dFQktJ
VF9BUEkgR3RrRmlsZUZpbHRlciAqCit3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X21p
bWVfdHlwZXNfZmlsdGVyIChXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QgKnJlcXVlc3QpOworCitX
RUJLSVRfQVBJIGdib29sZWFuCit3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X3NlbGVj
dF9tdWx0aXBsZSAgIChXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QgKnJlcXVlc3QpOworCitXRUJL
SVRfQVBJIHZvaWQKK3dlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9zZWxlY3RfZmlsZXMgICAg
ICAgICAgKFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCAqcmVxdWVzdCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICogY29uc3Qg
ICAgICAqZmlsZXMpOworCitXRUJLSVRfQVBJIGNvbnN0IGdjaGFyICogY29uc3QgKgord2Via2l0
X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9zZWxlY3RlZF9maWxlcyAgICAoV2ViS2l0RmlsZUNo
b29zZXJSZXF1ZXN0ICpyZXF1ZXN0KTsKKworR19FTkRfREVDTFMKKworI2VuZGlmCkluZGV4OiBX
ZWJLaXQtcjExODMzNi9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZmlsZWNob29zZXJy
ZXF1ZXN0cHJpdmF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIC9kZXYvbnVsbAorKysgV2ViS2l0LXIxMTgz
MzYvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGZpbGVjaG9vc2VycmVxdWVzdHByaXZh
dGUuaApAQCAtMCwwICsxLDMwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBT
LkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICov
CisKKyNpZm5kZWYgd2Via2l0ZmlsZWNob29zZXJyZXF1ZXN0cHJpdmF0ZV9oCisjZGVmaW5lIHdl
YmtpdGZpbGVjaG9vc2VycmVxdWVzdHByaXZhdGVfaAorCisjaW5jbHVkZSAiRmlsZUNob29zZXIu
aCIKKyNpbmNsdWRlICJ3ZWJraXRmaWxlY2hvb3NlcnJlcXVlc3QuaCIKKwordXNpbmcgbmFtZXNw
YWNlIFdlYkNvcmU7CisKK1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCogd2Via2l0X2ZpbGVfY2hv
b3Nlcl9yZXF1ZXN0X2NyZWF0ZShQYXNzUmVmUHRyPEZpbGVDaG9vc2VyPiBjaG9vc2VyKTsKKwor
I2VuZGlmCkluZGV4OiBXZWJLaXQtcjExODMzNi9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Vi
a2l0d2Vidmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0LXIxMTgzMzYub3JpZy9Tb3VyY2Uv
V2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5jcHAKKysrIFdlYktpdC1yMTE4MzM2L1Nv
dXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcApAQCAtMjIxLDYgKzIyMSw3
IEBAIGVudW0gewogICAgIEVOVEVSSU5HX0ZVTExTQ1JFRU4sCiAgICAgTEVBVklOR19GVUxMU0NS
RUVOLAogICAgIENPTlRFWFRfTUVOVSwKKyAgICBSVU5fRklMRV9DSE9PU0VSLAogCiAgICAgTEFT
VF9TSUdOQUwKIH07CkBAIC0xMzAwLDYgKzEzMDEsNDggQEAgc3RhdGljIGdib29sZWFuIHdlYmtp
dF93ZWJfdmlld19yZWFsX2xlYQogICAgIHJldHVybiBGQUxTRTsKIH0KIAorc3RhdGljIHZvaWQg
ZmlsZUNob29zZXJEaWFsb2dSZXNwb25zZUNhbGxiYWNrKEd0a0RpYWxvZyogZGlhbG9nLCBnaW50
IHJlc3BvbnNlSUQsIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCogcmVxdWVzdCkKK3sKKyAgICBH
UmVmUHRyPFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdD4gYWRvcHRlZFJlcXVlc3QgPSBhZG9wdEdS
ZWYocmVxdWVzdCk7CisgICAgaWYgKHJlc3BvbnNlSUQgPT0gR1RLX1JFU1BPTlNFX0FDQ0VQVCkg
eworICAgICAgICBHT3duUHRyPEdTTGlzdD4gZmlsZXNMaXN0KGd0a19maWxlX2Nob29zZXJfZ2V0
X2ZpbGVuYW1lcyhHVEtfRklMRV9DSE9PU0VSKGRpYWxvZykpKTsKKyAgICAgICAgR1JlZlB0cjxH
UHRyQXJyYXk+IGZpbGVzQXJyYXkgPSBhZG9wdEdSZWYoZ19wdHJfYXJyYXlfbmV3KCkpOworICAg
ICAgICBmb3IgKEdTTGlzdCogZmlsZSA9IGZpbGVzTGlzdC5nZXQoKTsgZmlsZTsgZmlsZSA9IGdf
c2xpc3RfbmV4dChmaWxlKSkKKyAgICAgICAgICAgIGdfcHRyX2FycmF5X2FkZChmaWxlc0FycmF5
LmdldCgpLCBmaWxlLT5kYXRhKTsKKyAgICAgICAgZ19wdHJfYXJyYXlfYWRkKGZpbGVzQXJyYXku
Z2V0KCksIDApOworICAgICAgICB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3Rfc2VsZWN0X2Zp
bGVzKGFkb3B0ZWRSZXF1ZXN0LmdldCgpLCByZWludGVycHJldF9jYXN0PGNvbnN0IGdjaGFyKiBj
b25zdCo+KGZpbGVzQXJyYXktPnBkYXRhKSk7CisgICAgfQorCisgICAgZ3RrX3dpZGdldF9kZXN0
cm95KEdUS19XSURHRVQoZGlhbG9nKSk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfd2Vi
X3ZpZXdfcmVhbF9ydW5fZmlsZV9jaG9vc2VyKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIFdlYktp
dEZpbGVDaG9vc2VyUmVxdWVzdCogcmVxdWVzdCkKK3sKKyAgICBHdGtXaWRnZXQqIHRvcGxldmVs
ID0gZ3RrX3dpZGdldF9nZXRfdG9wbGV2ZWwoR1RLX1dJREdFVCh3ZWJWaWV3KSk7CisgICAgaWYg
KCF3aWRnZXRJc09uc2NyZWVuVG9wbGV2ZWxXaW5kb3codG9wbGV2ZWwpKQorICAgICAgICB0b3Bs
ZXZlbCA9IDA7CisKKyAgICBnYm9vbGVhbiBhbGxvd3NNdWx0aXBsZVNlbGVjdGlvbiA9IHdlYmtp
dF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfc2VsZWN0X211bHRpcGxlKHJlcXVlc3QpOworICAg
IEd0a1dpZGdldCogZGlhbG9nID0gZ3RrX2ZpbGVfY2hvb3Nlcl9kaWFsb2dfbmV3KGFsbG93c011
bHRpcGxlU2VsZWN0aW9uID8gXygiU2VsZWN0IEZpbGVzIikgOiBfKCJTZWxlY3QgRmlsZSIpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcGxl
dmVsID8gR1RLX1dJTkRPVyh0b3BsZXZlbCkgOiAwLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdUS19GSUxFX0NIT09TRVJfQUNUSU9OX09QRU4s
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1RL
X1NUT0NLX0NBTkNFTCwgR1RLX1JFU1BPTlNFX0NBTkNFTCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHVEtfU1RPQ0tfT1BFTiwgR1RLX1JFU1BP
TlNFX0FDQ0VQVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBOVUxMKTsKKworICAgIGlmIChHdGtGaWxlRmlsdGVyKiBmaWx0ZXIgPSB3ZWJraXRf
ZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X21pbWVfdHlwZXNfZmlsdGVyKHJlcXVlc3QpKQorICAg
ICAgICBndGtfZmlsZV9jaG9vc2VyX3NldF9maWx0ZXIoR1RLX0ZJTEVfQ0hPT1NFUihkaWFsb2cp
LCBmaWx0ZXIpOworICAgIGd0a19maWxlX2Nob29zZXJfc2V0X3NlbGVjdF9tdWx0aXBsZShHVEtf
RklMRV9DSE9PU0VSKGRpYWxvZyksIGFsbG93c011bHRpcGxlU2VsZWN0aW9uKTsKKworICAgIGlm
IChjb25zdCBnY2hhciogY29uc3QqIHNlbGVjdGVkRmlsZXMgPSB3ZWJraXRfZmlsZV9jaG9vc2Vy
X3JlcXVlc3RfZ2V0X3NlbGVjdGVkX2ZpbGVzKHJlcXVlc3QpKQorICAgICAgICBndGtfZmlsZV9j
aG9vc2VyX3NlbGVjdF9maWxlbmFtZShHVEtfRklMRV9DSE9PU0VSKGRpYWxvZyksIHNlbGVjdGVk
RmlsZXNbMF0pOworCisgICAgZ19zaWduYWxfY29ubmVjdChkaWFsb2csICJyZXNwb25zZSIsIEdf
Q0FMTEJBQ0soZmlsZUNob29zZXJEaWFsb2dSZXNwb25zZUNhbGxiYWNrKSwgZ19vYmplY3RfcmVm
KHJlcXVlc3QpKTsKKyAgICBndGtfd2lkZ2V0X3Nob3coZGlhbG9nKTsKKworICAgIHJldHVybiBU
UlVFOworfQorCiBzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfZGlzcG9zZShHT2JqZWN0KiBv
YmplY3QpCiB7CiAgICAgV2ViS2l0V2ViVmlldyogd2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyhv
YmplY3QpOwpAQCAtMjU1Myw2ICsyNTk2LDM3IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJfdmll
d19jbGFzc19pbml0KFcKICAgICAgICAgICAgIEdfVFlQRV9OT05FLCAxLAogICAgICAgICAgICAg
V0VCS0lUX1RZUEVfV0VCX0ZSQU1FKTsKIAorICAgICAvKioKKyAgICAgKiBXZWJLaXRXZWJWaWV3
OjpydW4tZmlsZS1jaG9vc2VyOgorICAgICAqIEB3ZWJfdmlldzogdGhlICNXZWJLaXRXZWJWaWV3
IG9uIHdoaWNoIHRoZSBzaWduYWwgaXMgZW1pdHRlZAorICAgICAqIEByZXF1ZXN0OiBhICNXZWJL
aXRGaWxlQ2hvb3NlclJlcXVlc3QKKyAgICAgKgorICAgICAqIFRoaXMgc2lnbmFsIGlzIGVtaXR0
ZWQgd2hlbiB0aGUgdXNlciBpbnRlcmFjdHMgd2l0aCBhICZsdDtpbnB1dAorICAgICAqIHR5cGU9
J2ZpbGUnIC8mZ3Q7IEhUTUwgZWxlbWVudCwgcmVxdWVzdGluZyBmcm9tIFdlYktpdCB0byBzaG93
CisgICAgICogYSBkaWFsb2cgdG8gc2VsZWN0IG9uZSBvciBtb3JlIGZpbGVzIHRvIGJlIHVwbG9h
ZGVkLiBUbyBsZXQgdGhlCisgICAgICogYXBwbGljYXRpb24ga25vdyB0aGUgZGV0YWlscyBvZiB0
aGUgZmlsZSBjaG9vc2VyLCBhcyB3ZWxsIGFzIHRvCisgICAgICogYWxsb3cgdGhlIGNsaWVudCBh
cHBsaWNhdGlvbiB0byBlaXRoZXIgY2FuY2VsIHRoZSByZXF1ZXN0IG9yCisgICAgICogcGVyZm9y
bSBhbiBhY3R1YWwgc2VsZWN0aW9uIG9mIGZpbGVzLCB0aGUgc2lnbmFsIHdpbGwgcGFzcyBhbgor
ICAgICAqIGluc3RhbmNlIG9mIHRoZSAjV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0IGluIHRoZSBA
cmVxdWVzdAorICAgICAqIGFyZ3VtZW50LgorICAgICAqCisgICAgICogVGhlIGRlZmF1bHQgc2ln
bmFsIGhhbmRsZXIgd2lsbCBhc3luY2hyb25vdXNseSBydW4gYSByZWd1bGFyCisgICAgICogI0d0
a0ZpbGVDaG9vc2VyRGlhbG9nIGZvciB0aGUgdXNlciB0byBpbnRlcmFjdCB3aXRoLgorICAgICAq
CisgICAgICogUmV0dXJuczogJVRSVUUgdG8gc3RvcCBvdGhlciBoYW5kbGVycyBmcm9tIGJlaW5n
IGludm9rZWQgZm9yIHRoZSBldmVudC4KKyAgICAgKiAgICVGQUxTRSB0byBwcm9wYWdhdGUgdGhl
IGV2ZW50IGZ1cnRoZXIuCisgICAgICoKKyAgICAgKi8KKyAgICB3ZWJraXRfd2ViX3ZpZXdfc2ln
bmFsc1tSVU5fRklMRV9DSE9PU0VSXSA9CisgICAgICAgIGdfc2lnbmFsX25ldygicnVuLWZpbGUt
Y2hvb3NlciIsCisgICAgICAgICAgICAgICAgICAgICBHX1RZUEVfRlJPTV9DTEFTUyh3ZWJWaWV3
Q2xhc3MpLAorICAgICAgICAgICAgICAgICAgICAgR19TSUdOQUxfUlVOX0xBU1QsCisgICAgICAg
ICAgICAgICAgICAgICBHX1NUUlVDVF9PRkZTRVQoV2ViS2l0V2ViVmlld0NsYXNzLCBydW5fZmls
ZV9jaG9vc2VyKSwKKyAgICAgICAgICAgICAgICAgICAgIGdfc2lnbmFsX2FjY3VtdWxhdG9yX3Ry
dWVfaGFuZGxlZCwgMCAvKiBhY2N1bXVsYXRvciBkYXRhICovLAorICAgICAgICAgICAgICAgICAg
ICAgd2Via2l0X21hcnNoYWxfQk9PTEVBTl9fT0JKRUNULAorICAgICAgICAgICAgICAgICAgICAg
R19UWVBFX0JPT0xFQU4sIDEsIC8qIG51bWJlciBvZiBwYXJhbWV0ZXJzICovCisgICAgICAgICAg
ICAgICAgICAgICBXRUJLSVRfVFlQRV9GSUxFX0NIT09TRVJfUkVRVUVTVCk7CisKICAgICB3ZWJr
aXRfd2ViX3ZpZXdfc2lnbmFsc1tTSE9VTERfQkVHSU5fRURJVElOR10gPSBnX3NpZ25hbF9uZXco
InNob3VsZC1iZWdpbi1lZGl0aW5nIiwKICAgICAgICAgR19UWVBFX0ZST01fQ0xBU1Mod2ViVmll
d0NsYXNzKSwgc3RhdGljX2Nhc3Q8R1NpZ25hbEZsYWdzPihHX1NJR05BTF9SVU5fTEFTVCB8IEdf
U0lHTkFMX0FDVElPTiksCiAgICAgICAgIEdfU1RSVUNUX09GRlNFVChXZWJLaXRXZWJWaWV3Q2xh
c3MsIHNob3VsZF9hbGxvd19lZGl0aW5nX2FjdGlvbiksIGdfc2lnbmFsX2FjY3VtdWxhdG9yX2Zp
cnN0X3dpbnMsIDAsCkBAIC0yODYyLDYgKzI5MzYsNyBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfd2Vi
X3ZpZXdfY2xhc3NfaW5pdChXCiAgICAgd2ViVmlld0NsYXNzLT5zaG91bGRfYWxsb3dfZWRpdGlu
Z19hY3Rpb24gPSB3ZWJraXRfd2ViX3ZpZXdfcmVhbF9zaG91bGRfYWxsb3dfZWRpdGluZ19hY3Rp
b247CiAgICAgd2ViVmlld0NsYXNzLT5lbnRlcmluZ19mdWxsc2NyZWVuID0gd2Via2l0X3dlYl92
aWV3X3JlYWxfZW50ZXJpbmdfZnVsbHNjcmVlbjsKICAgICB3ZWJWaWV3Q2xhc3MtPmxlYXZpbmdf
ZnVsbHNjcmVlbiA9IHdlYmtpdF93ZWJfdmlld19yZWFsX2xlYXZpbmdfZnVsbHNjcmVlbjsKKyAg
ICB3ZWJWaWV3Q2xhc3MtPnJ1bl9maWxlX2Nob29zZXIgPSB3ZWJraXRfd2ViX3ZpZXdfcmVhbF9y
dW5fZmlsZV9jaG9vc2VyOwogCiAgICAgR09iamVjdENsYXNzKiBvYmplY3RDbGFzcyA9IEdfT0JK
RUNUX0NMQVNTKHdlYlZpZXdDbGFzcyk7CiAgICAgb2JqZWN0Q2xhc3MtPmRpc3Bvc2UgPSB3ZWJr
aXRfd2ViX3ZpZXdfZGlzcG9zZTsKQEAgLTM2MTUsNiArMzY5MCwxMiBAQCBHdGtXaWRnZXQqIHdl
YmtpdF93ZWJfdmlld19uZXcodm9pZCkKICAgICByZXR1cm4gR1RLX1dJREdFVCh3ZWJWaWV3KTsK
IH0KIAordm9pZCB3ZWJraXRfd2ViX3ZpZXdfcnVuX2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0KFdlYktp
dFdlYlZpZXcqIHdlYlZpZXcsIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCogcmVxdWVzdCkKK3sK
KyAgICBnYm9vbGVhbiByZXR1cm5WYWx1ZTsKKyAgICBnX3NpZ25hbF9lbWl0KHdlYlZpZXcsIHdl
YmtpdF93ZWJfdmlld19zaWduYWxzW1JVTl9GSUxFX0NIT09TRVJdLCAwLCByZXF1ZXN0LCAmcmV0
dXJuVmFsdWUpOworfQorCiAvLyBmb3IgaW50ZXJuYWwgdXNlIG9ubHkKIHZvaWQgd2Via2l0X3dl
Yl92aWV3X25vdGlmeV9yZWFkeShXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQogewpJbmRleDogV2Vi
S2l0LXIxMTgzMzYvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJLaXQtcjExODMzNi5vcmlnL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93
ZWJraXR3ZWJ2aWV3LmgKKysrIFdlYktpdC1yMTE4MzM2L1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtp
dC93ZWJraXR3ZWJ2aWV3LmgKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUgPHdlYmtpdC93
ZWJraXRkZWZpbmVzLmg+CiAjaW5jbHVkZSA8d2Via2l0L3dlYmtpdGRvbS5oPgorI2luY2x1ZGUg
PHdlYmtpdC93ZWJraXRmaWxlY2hvb3NlcnJlcXVlc3QuaD4KICNpbmNsdWRlIDx3ZWJraXQvd2Vi
a2l0d2ViYmFja2ZvcndhcmRsaXN0Lmg+CiAjaW5jbHVkZSA8d2Via2l0L3dlYmtpdHdlYmZyYW1l
Lmg+CiAjaW5jbHVkZSA8d2Via2l0L3dlYmtpdHdlYmhpc3RvcnlpdGVtLmg+CkBAIC0xNjUsNiAr
MTY2LDggQEAgc3RydWN0IF9XZWJLaXRXZWJWaWV3Q2xhc3MgewogICAgIGdib29sZWFuICAgICAg
ICAgICAgICAgICAgICgqIG1vdmVfY3Vyc29yKSAgICAgICAgICAgIChXZWJLaXRXZWJWaWV3ICAg
ICAgICAqd2ViX3ZpZXcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEd0a01vdmVtZW50U3RlcCAgICAgICBzdGVwLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaW50ICAg
ICAgICAgICAgICAgICAgY291bnQpOworICAgIGdib29sZWFuICAgICAgICAgICAgICAgICAgICgq
IHJ1bl9maWxlX2Nob29zZXIpICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAgICAgKndlYl92
aWV3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QgKnJlcXVlc3QpOwogCiAgICAgLyoKICAg
ICAgKiBpbnRlcm5hbApJbmRleDogV2ViS2l0LXIxMTgzMzYvU291cmNlL1dlYktpdC9ndGsvd2Vi
a2l0L3dlYmtpdHdlYnZpZXdwcml2YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0LXIxMTgzMzYu
b3JpZy9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlld3ByaXZhdGUuaAorKysg
V2ViS2l0LXIxMTgzMzYvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXdwcml2
YXRlLmgKQEAgLTEyNCw2ICsxMjQsOCBAQCBHdGtNZW51KiB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2Nv
bnRleHRfbWVuCiB2b2lkIHdlYlZpZXdFbnRlckZ1bGxzY3JlZW4oV2ViS2l0V2ViVmlldyogd2Vi
VmlldywgV2ViQ29yZTo6Tm9kZSopOwogdm9pZCB3ZWJWaWV3RXhpdEZ1bGxzY3JlZW4oV2ViS2l0
V2ViVmlldyogd2ViVmlldyk7CiAKK3ZvaWQgd2Via2l0X3dlYl92aWV3X3J1bl9maWxlX2Nob29z
ZXJfcmVxdWVzdChXZWJLaXRXZWJWaWV3KiwgV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0Kik7CisK
ICNpZiBFTkFCTEUoSUNPTkRBVEFCQVNFKQogdm9pZCB3ZWJraXRXZWJWaWV3UmVnaXN0ZXJGb3JJ
Y29uTm90aWZpY2F0aW9uKFdlYktpdFdlYlZpZXcqLCBib29sIHNob3VsZFJlZ2lzdGVyKTsKIHZv
aWQgd2Via2l0V2ViVmlld0ljb25Mb2FkZWQoV2ViS2l0RmF2aWNvbkRhdGFiYXNlKiwgY29uc3Qg
Y2hhciogZnJhbWVVUkksIFdlYktpdFdlYlZpZXcqKTsKSW5kZXg6IFdlYktpdC1yMTE4MzM2L1Nv
dXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3R3ZWJ2aWV3LmMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0
LXIxMTgzMzYub3JpZy9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0d2Vidmlldy5jCisrKyBX
ZWJLaXQtcjExODMzNi9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0d2Vidmlldy5jCkBAIC01
MDYsNiArNTA2LDIwNCBAQCBzdGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF93ZWJfdmlld19mdWxsc2Ny
CiAgICAgZ3RrX3dpZGdldF9kZXN0cm95KHdpbmRvdyk7CiB9CiAKK3N0YXRpYyBnYm9vbGVhbiBj
aGVja19taW1lX3R5cGVfZm9yX2ZpbHRlcihHdGtGaWxlRmlsdGVyKiBmaWx0ZXIsIGNvbnN0IGdj
aGFyKiBtaW1lX3R5cGUpCit7CisgICAgR3RrRmlsZUZpbHRlckluZm8gZmlsdGVyX2luZm87Cisg
ICAgZmlsdGVyX2luZm8uY29udGFpbnMgPSBHVEtfRklMRV9GSUxURVJfTUlNRV9UWVBFOworICAg
IGZpbHRlcl9pbmZvLm1pbWVfdHlwZSA9IG1pbWVfdHlwZTsKKyAgICByZXR1cm4gZ3RrX2ZpbGVf
ZmlsdGVyX2ZpbHRlcihmaWx0ZXIsICZmaWx0ZXJfaW5mbyk7Cit9CisKK3N0YXRpYyBnYm9vbGVh
biBydW5fZmlsZV9jaG9vc2VyX2NiXzEoV2ViS2l0V2ViVmlldyogd2VidmlldywgV2ViS2l0Rmls
ZUNob29zZXJSZXF1ZXN0KiByZXF1ZXN0LCBncG9pbnRlciBkYXRhKQoreworICAgIGNvbnN0IGdj
aGFyKiBjb25zdCogbWltZV90eXBlczsKKyAgICBjb25zdCBnY2hhciogY29uc3QqIHNlbGVjdGVk
X2ZpbGVzOworICAgIEd0a0ZpbGVGaWx0ZXIqIGZpbHRlcjsKKworICAgIGdfYXNzZXJ0KCF3ZWJr
aXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X3NlbGVjdF9tdWx0aXBsZShyZXF1ZXN0KSk7CisK
KyAgICBtaW1lX3R5cGVzID0gd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9taW1lX3R5
cGVzKHJlcXVlc3QpOworICAgIGdfYXNzZXJ0KCFtaW1lX3R5cGVzKTsKKyAgICBmaWx0ZXIgPSB3
ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X21pbWVfdHlwZXNfZmlsdGVyKHJlcXVlc3Qp
OworICAgIGdfYXNzZXJ0KCFmaWx0ZXIpOworICAgIHNlbGVjdGVkX2ZpbGVzID0gd2Via2l0X2Zp
bGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9zZWxlY3RlZF9maWxlcyhyZXF1ZXN0KTsKKyAgICBnX2Fz
c2VydCghc2VsZWN0ZWRfZmlsZXMpOworCisgICAgZ19tYWluX2xvb3BfcXVpdChsb29wKTsKKyAg
ICByZXR1cm4gVFJVRTsKK30KKworc3RhdGljIGdib29sZWFuIHJ1bl9maWxlX2Nob29zZXJfY2Jf
MihXZWJLaXRXZWJWaWV3KiB3ZWJ2aWV3LCBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QqIHJlcXVl
c3QsIGdwb2ludGVyIGRhdGEpCit7CisgICAgY29uc3QgZ2NoYXIqIGNvbnN0KiBtaW1lX3R5cGVz
OworICAgIGNvbnN0IGdjaGFyKiBjb25zdCogc2VsZWN0ZWRfZmlsZXM7CisgICAgR3RrRmlsZUZp
bHRlciogZmlsdGVyOworCisgICAgZ19hc3NlcnQod2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0
X2dldF9zZWxlY3RfbXVsdGlwbGUocmVxdWVzdCkpOworCisgICAgbWltZV90eXBlcyA9IHdlYmtp
dF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfbWltZV90eXBlcyhyZXF1ZXN0KTsKKyAgICBnX2Fz
c2VydCghbWltZV90eXBlcyk7CisgICAgZmlsdGVyID0gd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1
ZXN0X2dldF9taW1lX3R5cGVzX2ZpbHRlcihyZXF1ZXN0KTsKKyAgICBnX2Fzc2VydCghZmlsdGVy
KTsKKyAgICBzZWxlY3RlZF9maWxlcyA9IHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRf
c2VsZWN0ZWRfZmlsZXMocmVxdWVzdCk7CisgICAgZ19hc3NlcnQoIXNlbGVjdGVkX2ZpbGVzKTsK
KworICAgIC8vIFNlbGVjdCBzb21lIGZpbGVzLgorICAgIGNvbnN0IGdjaGFyKiBmaWxlc1RvU2Vs
ZWN0WzRdID0geyAiL2ZvbyIsICIvZm9vL2JhciIsICIvZm9vL2Jhci9iYXoiLCAwIH07CisgICAg
d2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X3NlbGVjdF9maWxlcyhyZXF1ZXN0LCBmaWxlc1Rv
U2VsZWN0KTsKKworICAgIC8vIENoZWNrIHRoZSBmaWxlcyB0aGF0IGhhdmUgYmVlbiBqdXN0IHNl
bGVjdGVkLgorICAgIHNlbGVjdGVkX2ZpbGVzID0gd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0
X2dldF9zZWxlY3RlZF9maWxlcyhyZXF1ZXN0KTsKKyAgICBnX2Fzc2VydChzZWxlY3RlZF9maWxl
cyk7CisgICAgZ19hc3NlcnRfY21wc3RyKHNlbGVjdGVkX2ZpbGVzWzBdLCA9PSwgIi9mb28iKTsK
KyAgICBnX2Fzc2VydF9jbXBzdHIoc2VsZWN0ZWRfZmlsZXNbMV0sID09LCAiL2Zvby9iYXIiKTsK
KyAgICBnX2Fzc2VydF9jbXBzdHIoc2VsZWN0ZWRfZmlsZXNbMl0sID09LCAiL2Zvby9iYXIvYmF6
Iik7CisgICAgZ19hc3NlcnQoIXNlbGVjdGVkX2ZpbGVzWzNdKTsKKworICAgIGdfbWFpbl9sb29w
X3F1aXQobG9vcCk7CisgICAgcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiBydW5f
ZmlsZV9jaG9vc2VyX2NiXzMoV2ViS2l0V2ViVmlldyogd2VidmlldywgV2ViS2l0RmlsZUNob29z
ZXJSZXF1ZXN0KiByZXF1ZXN0LCBncG9pbnRlciBkYXRhKQoreworICAgIGNvbnN0IGdjaGFyKiBj
b25zdCogc2VsZWN0ZWRfZmlsZXM7CisKKyAgICBzZWxlY3RlZF9maWxlcyA9IHdlYmtpdF9maWxl
X2Nob29zZXJfcmVxdWVzdF9nZXRfc2VsZWN0ZWRfZmlsZXMocmVxdWVzdCk7CisgICAgZ19hc3Nl
cnQoc2VsZWN0ZWRfZmlsZXMpOworICAgIGdfYXNzZXJ0X2NtcHN0cihzZWxlY3RlZF9maWxlc1sw
XSwgPT0sICIvZm9vIik7CisgICAgZ19hc3NlcnRfY21wc3RyKHNlbGVjdGVkX2ZpbGVzWzFdLCA9
PSwgIi9mb28vYmFyIik7CisgICAgZ19hc3NlcnRfY21wc3RyKHNlbGVjdGVkX2ZpbGVzWzJdLCA9
PSwgIi9mb28vYmFyL2JheiIpOworICAgIGdfYXNzZXJ0KCFzZWxlY3RlZF9maWxlc1szXSk7CisK
KyAgICBnX21haW5fbG9vcF9xdWl0KGxvb3ApOworICAgIHJldHVybiBUUlVFOworfQorCitzdGF0
aWMgZ2Jvb2xlYW4gcnVuX2ZpbGVfY2hvb3Nlcl9jYl80KFdlYktpdFdlYlZpZXcqIHdlYnZpZXcs
IFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCogcmVxdWVzdCwgZ3BvaW50ZXIgZGF0YSkKK3sKKyAg
ICBjb25zdCBnY2hhciogY29uc3QqIG1pbWVfdHlwZXM7CisgICAgY29uc3QgZ2NoYXIqIGNvbnN0
KiBzZWxlY3RlZF9maWxlczsKKyAgICBHdGtGaWxlRmlsdGVyKiBmaWx0ZXI7CisKKyAgICBnX2Fz
c2VydCghd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9zZWxlY3RfbXVsdGlwbGUocmVx
dWVzdCkpOworCisgICAgbWltZV90eXBlcyA9IHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9n
ZXRfbWltZV90eXBlcyhyZXF1ZXN0KTsKKyAgICBnX2Fzc2VydChtaW1lX3R5cGVzKTsKKyAgICBn
X2Fzc2VydF9jbXBzdHIobWltZV90eXBlc1swXSwgPT0sICJhdWRpby8qIik7CisgICAgZ19hc3Nl
cnRfY21wc3RyKG1pbWVfdHlwZXNbMV0sID09LCAidmlkZW8vKiIpOworICAgIGdfYXNzZXJ0X2Nt
cHN0cihtaW1lX3R5cGVzWzJdLCA9PSwgImltYWdlLyoiKTsKKyAgICBnX2Fzc2VydCghbWltZV90
eXBlc1szXSk7CisKKyAgICBmaWx0ZXIgPSB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0
X21pbWVfdHlwZXNfZmlsdGVyKHJlcXVlc3QpOworICAgIGdfYXNzZXJ0KEdUS19JU19GSUxFX0ZJ
TFRFUihmaWx0ZXIpKTsKKyAgICBnX2Fzc2VydChjaGVja19taW1lX3R5cGVfZm9yX2ZpbHRlcihm
aWx0ZXIsICJhdWRpby8qIikpOworICAgIGdfYXNzZXJ0KGNoZWNrX21pbWVfdHlwZV9mb3JfZmls
dGVyKGZpbHRlciwgInZpZGVvLyoiKSk7CisgICAgZ19hc3NlcnQoY2hlY2tfbWltZV90eXBlX2Zv
cl9maWx0ZXIoZmlsdGVyLCAiaW1hZ2UvKiIpKTsKKworICAgIHNlbGVjdGVkX2ZpbGVzID0gd2Vi
a2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9zZWxlY3RlZF9maWxlcyhyZXF1ZXN0KTsKKyAg
ICBnX2Fzc2VydCghc2VsZWN0ZWRfZmlsZXMpOworCisgICAgZ19tYWluX2xvb3BfcXVpdChsb29w
KTsKKyAgICByZXR1cm4gVFJVRTsKK30KKwordm9pZCBkb19tb3VzZV9idXR0b25fZXZlbnQoR3Rr
V2lkZ2V0KiB3aWRnZXQsIEdka0V2ZW50VHlwZSBldmVudF90eXBlLCBpbnQgeCwgaW50IHksIHVu
c2lnbmVkIGludCBidXR0b24sIHVuc2lnbmVkIGludCBtb2RpZmllcnMpCit7CisgICAgaW50IHhf
cm9vdCwgeV9yb290OworCisgICAgZ19hc3NlcnQoZ3RrX3dpZGdldF9nZXRfcmVhbGl6ZWQod2lk
Z2V0KSk7CisKKyAgICBHZGtFdmVudCogZXZlbnQgPSBnZGtfZXZlbnRfbmV3KGV2ZW50X3R5cGUp
OworICAgIGV2ZW50LT5idXR0b24ud2luZG93ID0gZ3RrX3dpZGdldF9nZXRfd2luZG93KHdpZGdl
dCk7CisgICAgZ19vYmplY3RfcmVmKGV2ZW50LT5idXR0b24ud2luZG93KTsKKworICAgIGV2ZW50
LT5idXR0b24udGltZSA9IEdES19DVVJSRU5UX1RJTUU7CisgICAgZXZlbnQtPmJ1dHRvbi54ID0g
eDsKKyAgICBldmVudC0+YnV0dG9uLnkgPSB5OworICAgIGV2ZW50LT5idXR0b24uYXhlcyA9IDA7
CisgICAgZXZlbnQtPmJ1dHRvbi5zdGF0ZSA9IG1vZGlmaWVyczsKKyAgICBldmVudC0+YnV0dG9u
LmJ1dHRvbiA9IGJ1dHRvbjsKKworICAgIGV2ZW50LT5idXR0b24uZGV2aWNlID0gZ2RrX2Rldmlj
ZV9tYW5hZ2VyX2dldF9jbGllbnRfcG9pbnRlcihnZGtfZGlzcGxheV9nZXRfZGV2aWNlX21hbmFn
ZXIoZ3RrX3dpZGdldF9nZXRfZGlzcGxheSh3aWRnZXQpKSk7CisKKyAgICBnZGtfd2luZG93X2dl
dF9yb290X2Nvb3JkcyhndGtfd2lkZ2V0X2dldF93aW5kb3cod2lkZ2V0KSwgeCwgeSwgJnhfcm9v
dCwgJnlfcm9vdCk7CisgICAgZXZlbnQtPmJ1dHRvbi54X3Jvb3QgPSB4X3Jvb3Q7CisgICAgZXZl
bnQtPmJ1dHRvbi55X3Jvb3QgPSB5X3Jvb3Q7CisgICAgZ3RrX21haW5fZG9fZXZlbnQoZXZlbnQp
OworfQorCitzdGF0aWMgdm9pZCBjbGlja19tb3VzZV9idXR0b24oR3RrV2lkZ2V0KiB3aWRnZXQs
IGludCB4LCBpbnQgeSwgdW5zaWduZWQgaW50IGJ1dHRvbiwgdW5zaWduZWQgaW50IG1vZGlmaWVy
cykKK3sKKyAgICBkb19tb3VzZV9idXR0b25fZXZlbnQod2lkZ2V0LCBHREtfQlVUVE9OX1BSRVNT
LCB4LCB5LCBidXR0b24sIG1vZGlmaWVycyk7CisgICAgZG9fbW91c2VfYnV0dG9uX2V2ZW50KHdp
ZGdldCwgR0RLX0JVVFRPTl9SRUxFQVNFLCB4LCB5LCBidXR0b24sIG1vZGlmaWVycyk7Cit9CisK
K3N0YXRpYyBnYm9vbGVhbiBjbGlja19tb3VzZV9idXR0b25fYW5kX3dhaXRfZm9yX2ZpbGVfY2hv
b3Nlcl9yZXF1ZXN0KFdlYktpdFdlYlZpZXcqIHdlYl92aWV3KQoreworICAgIGNsaWNrX21vdXNl
X2J1dHRvbihHVEtfV0lER0VUKHdlYl92aWV3KSwgNSwgNSwgMSwgMCk7CisgICAgcmV0dXJuIFRS
VUU7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3Rfd2Via2l0X3dlYl92aWV3X2ZpbGVfY2hvb3Nlcigp
Cit7CisgICAgY29uc3QgZ2NoYXIqIGh0bWxfZm9ybWF0X2Jhc2UgPSAiPGh0bWw+PGJvZHk+Igor
ICAgICAgICAgICAgIjxpbnB1dCBzdHlsZT0ncG9zaXRpb246YWJzb2x1dGU7bGVmdDowO3RvcDow
O21hcmdpbjowO3BhZGRpbmc6MCcgdHlwZT0nZmlsZScgJXMvPiIKKyAgICAgICAgICAgICI8L2Jv
ZHk+PC9odG1sPiI7CisgICAgZ2NoYXIqIGh0bWxfZm9ybWF0OworICAgIEd0a1dpZGdldCogd2lu
ZG93OworICAgIEd0a1dpZGdldCogd2ViX3ZpZXc7CisgICAgZ3Vsb25nIGhhbmRsZXI7CisKKyAg
ICB3aW5kb3cgPSBndGtfd2luZG93X25ldyhHVEtfV0lORE9XX1RPUExFVkVMKTsKKyAgICB3ZWJf
dmlldyA9IHdlYmtpdF93ZWJfdmlld19uZXcoKTsKKyAgICBndGtfY29udGFpbmVyX2FkZChHVEtf
Q09OVEFJTkVSKHdpbmRvdyksIHdlYl92aWV3KTsKKyAgICBndGtfd2lkZ2V0X3Nob3dfYWxsKHdp
bmRvdyk7CisKKyAgICBsb29wID0gZ19tYWluX2xvb3BfbmV3KE5VTEwsIFRSVUUpOworCisgICAg
Ly8gTXVsdGlwbGUgc2VsZWN0aW9ucyBub3QgYWxsb3dlZCwgbm8gTUlNRSBmaWx0ZXJpbmcuCisg
ICAgaGFuZGxlciA9IGdfc2lnbmFsX2Nvbm5lY3Qod2ViX3ZpZXcsICJydW4tZmlsZS1jaG9vc2Vy
IiwgR19DQUxMQkFDSyhydW5fZmlsZV9jaG9vc2VyX2NiXzEpLCBOVUxMKTsKKyAgICBodG1sX2Zv
cm1hdCA9IGdfc3RyZHVwX3ByaW50ZihodG1sX2Zvcm1hdF9iYXNlLCAiIik7CisgICAgd2Via2l0
X3dlYl92aWV3X2xvYWRfc3RyaW5nKFdFQktJVF9XRUJfVklFVyh3ZWJfdmlldyksIGh0bWxfZm9y
bWF0LCBOVUxMLCBOVUxMLCBOVUxMKTsKKyAgICBnX2ZyZWUoaHRtbF9mb3JtYXQpOworCisgICAg
Z190aW1lb3V0X2FkZCgxMDAsIChHU291cmNlRnVuYykgY2xpY2tfbW91c2VfYnV0dG9uX2FuZF93
YWl0X2Zvcl9maWxlX2Nob29zZXJfcmVxdWVzdCwgV0VCS0lUX1dFQl9WSUVXKHdlYl92aWV3KSk7
CisgICAgZ19tYWluX2xvb3BfcnVuKGxvb3ApOworCisgICAgZ19zaWduYWxfaGFuZGxlcl9kaXNj
b25uZWN0KHdlYl92aWV3LCBoYW5kbGVyKTsKKworICAgIC8vIE11bHRpcGxlIHNlbGVjdGlvbnMg
YWxsb3dlZCwgbm8gTUlNRSBmaWx0ZXJpbmcsIHNvbWUgcHJlLXNlbGVjdGVkIGZpbGVzLgorICAg
IGhhbmRsZXIgPSBnX3NpZ25hbF9jb25uZWN0KHdlYl92aWV3LCAicnVuLWZpbGUtY2hvb3NlciIs
IEdfQ0FMTEJBQ0socnVuX2ZpbGVfY2hvb3Nlcl9jYl8yKSwgTlVMTCk7CisgICAgaHRtbF9mb3Jt
YXQgPSBnX3N0cmR1cF9wcmludGYoaHRtbF9mb3JtYXRfYmFzZSwgIm11bHRpcGxlIik7CisgICAg
d2Via2l0X3dlYl92aWV3X2xvYWRfc3RyaW5nKFdFQktJVF9XRUJfVklFVyh3ZWJfdmlldyksIGh0
bWxfZm9ybWF0LCBOVUxMLCBOVUxMLCBOVUxMKTsKKyAgICBnX2ZyZWUoaHRtbF9mb3JtYXQpOwor
CisgICAgZ190aW1lb3V0X2FkZCgxMDAsIChHU291cmNlRnVuYykgY2xpY2tfbW91c2VfYnV0dG9u
X2FuZF93YWl0X2Zvcl9maWxlX2Nob29zZXJfcmVxdWVzdCwgV0VCS0lUX1dFQl9WSUVXKHdlYl92
aWV3KSk7CisgICAgZ19tYWluX2xvb3BfcnVuKGxvb3ApOworCisgICAgZ19zaWduYWxfaGFuZGxl
cl9kaXNjb25uZWN0KHdlYl92aWV3LCBoYW5kbGVyKTsKKworICAgIC8vIFBlcmZvcm0gYW5vdGhl
ciByZXF1ZXN0IHRvIGNoZWNrIGlmIHRoZSBsaXN0IG9mIGZpbGVzIHNlbGVjdGVkCisgICAgLy8g
aW4gdGhlIHByZXZpb3VzIHN0ZXAgYXBwZWFycyBub3cgYXMgcGFydCBvZiB0aGUgbmV3IHJlcXVl
c3QuCisgICAgaGFuZGxlciA9IGdfc2lnbmFsX2Nvbm5lY3Qod2ViX3ZpZXcsICJydW4tZmlsZS1j
aG9vc2VyIiwgR19DQUxMQkFDSyhydW5fZmlsZV9jaG9vc2VyX2NiXzMpLCBOVUxMKTsKKyAgICBn
X3RpbWVvdXRfYWRkKDEwMCwgKEdTb3VyY2VGdW5jKSBjbGlja19tb3VzZV9idXR0b25fYW5kX3dh
aXRfZm9yX2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0LCBXRUJLSVRfV0VCX1ZJRVcod2ViX3ZpZXcpKTsK
KyAgICBnX21haW5fbG9vcF9ydW4obG9vcCk7CisKKyAgICBnX3NpZ25hbF9oYW5kbGVyX2Rpc2Nv
bm5lY3Qod2ViX3ZpZXcsIGhhbmRsZXIpOworCisgICAgLy8gTXVsdGlwbGUgc2VsZWN0aW9ucyBu
b3QgYWxsb3dlZCwgb25seSBhY2NlcHQgaW1hZ2VzLCBhdWRpbyBhbmQgdmlkZW8gZmlsZXMuLgor
ICAgIGhhbmRsZXIgPSBnX3NpZ25hbF9jb25uZWN0KHdlYl92aWV3LCAicnVuLWZpbGUtY2hvb3Nl
ciIsIEdfQ0FMTEJBQ0socnVuX2ZpbGVfY2hvb3Nlcl9jYl80KSwgTlVMTCk7CisgICAgaHRtbF9m
b3JtYXQgPSBnX3N0cmR1cF9wcmludGYoaHRtbF9mb3JtYXRfYmFzZSwgImFjY2VwdD0nYXVkaW8v
Kix2aWRlby8qLGltYWdlLyonIik7CisgICAgd2Via2l0X3dlYl92aWV3X2xvYWRfc3RyaW5nKFdF
QktJVF9XRUJfVklFVyh3ZWJfdmlldyksIGh0bWxfZm9ybWF0LCBOVUxMLCBOVUxMLCBOVUxMKTsK
KyAgICBnX2ZyZWUoaHRtbF9mb3JtYXQpOworCisgICAgZ190aW1lb3V0X2FkZCgxMDAsIChHU291
cmNlRnVuYykgY2xpY2tfbW91c2VfYnV0dG9uX2FuZF93YWl0X2Zvcl9maWxlX2Nob29zZXJfcmVx
dWVzdCwgV0VCS0lUX1dFQl9WSUVXKHdlYl92aWV3KSk7CisgICAgZ19tYWluX2xvb3BfcnVuKGxv
b3ApOworCisgICAgZ19zaWduYWxfaGFuZGxlcl9kaXNjb25uZWN0KHdlYl92aWV3LCBoYW5kbGVy
KTsKKyAgICBndGtfd2lkZ2V0X2Rlc3Ryb3kod2luZG93KTsKK30KKwogaW50IG1haW4oaW50IGFy
Z2MsIGNoYXIqKiBhcmd2KQogewogICAgIFNvdXBTZXJ2ZXIqIHNlcnZlcjsKQEAgLTUzNyw2ICs3
MzUsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCiAgICAgZ190ZXN0X2FkZF9m
dW5jKCIvd2Via2l0L3dlYnZpZXcvd2Vidmlldy1kb2VzLW5vdC1zdGVhbC1mb2N1cyIsIHRlc3Rf
d2Via2l0X3dlYl92aWV3X2RvZXNfbm90X3N0ZWFsX2ZvY3VzKTsKICAgICBnX3Rlc3RfYWRkX2Rh
dGFfZnVuYygiL3dlYmtpdC93ZWJ2aWV3L2Z1bGxzY3JlZW4iLCBHSU5UX1RPX1BPSU5URVIoRkFM
U0UpLCB0ZXN0X3dlYmtpdF93ZWJfdmlld19mdWxsc2NyZWVuKTsKICAgICBnX3Rlc3RfYWRkX2Rh
dGFfZnVuYygiL3dlYmtpdC93ZWJ2aWV3L2Z1bGxzY3JlZW4tYmxvY2tlZCIsIEdJTlRfVE9fUE9J
TlRFUihUUlVFKSwgdGVzdF93ZWJraXRfd2ViX3ZpZXdfZnVsbHNjcmVlbik7CisgICAgZ190ZXN0
X2FkZF9mdW5jKCIvd2Via2l0L3dlYnZpZXcvZmlsZS1jaG9vc2VyIiwgdGVzdF93ZWJraXRfd2Vi
X3ZpZXdfZmlsZV9jaG9vc2VyKTsKIAogICAgIHJldHVybiBnX3Rlc3RfcnVuICgpOwogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>144635</attachid>
            <date>2012-05-29 15:33:43 -0700</date>
            <delta_ts>2012-06-10 18:29:11 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-87283-20120529183341.patch</filename>
            <type>text/plain</type>
            <size>47147</size>
            <attacher name="Daniel Drake">dsd</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L2d0ay9DaGFuZ2VMb2cJKHJldmlzaW9uIDExODgzOCkKKysrIFNvdXJjZS9XZWJLaXQv
Z3RrL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDgyIEBACisyMDEyLTA1LTI5
ICBEYW5pZWwgRHJha2UgIDxkc2RAbGFwdG9wLm9yZz4KKworICAgICAgICBbR1RLXSBCYWNrcG9y
dCBydW4tZmlsZS1jaG9vc2VyIHRvIFdlYktpdDEKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTg3MjgzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgVGhpcyBpcyBhIHJlbGF0aXZlbHkgc3RyYWlnaHRmb3J3YXJk
IGJhY2twb3J0IG9mIE1hcmlvIFNhbmNoZXogUHJhZGEncworICAgICAgICBXZWJLaXQyIHJ1bi1m
aWxlLWNob29zZXIgc2lnbmFsIHdvcmssIGludGVuZGVkIGZvciB1c2UgYnkgT0xQQyBhbmQKKyAg
ICAgICAgb3RoZXJzIHdobyBhcmUgbm90IHF1aXRlIHJlYWR5IHRvIG1vdmUgdG8gV2ViS2l0Mi4K
KworICAgICAgICBBZGQgYSBuZXcgcHVibGljIGNsYXNzIHRvIHRoZSBBUEksIFdlYktpdEZpbGVD
aG9vc2VyUmVxdWVzdCwgdG8gYmUKKyAgICAgICAgZW1pdHRlZCBhbG9uZyB3aXRoIGEgbmV3IFdl
YktpdFdlYlZpZXc6OnJ1bi1maWxlLWNob29zZXIgc2lnbmFsIHRvCisgICAgICAgIGxldCBjbGll
bnQgYXBwbGljYXRpb25zIHRvIHByb3ZpZGUgdGhlaXIgb3duIGZpbGUgY2hvb3NlciBkaWFsb2cK
KyAgICAgICAgd2hlbiB0aGUgdXNlIGludGVyYWN0cyB3aXRoIEhUTUwgSW5wdXQgZWxlbWVudHMg
b2YgdHlwZSAnZmlsZScuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbTogQWRkZWQgbmV3IHNv
dXJjZSBmaWxlcyBhbmQgaGVhZGVycy4KKyAgICAgICAgKiB3ZWJraXQvd2Via2l0ZmlsZWNob29z
ZXJyZXF1ZXN0LmNwcDogQWRkZWQuCisgICAgICAgIChfV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0
UHJpdmF0ZSk6CisgICAgICAgICh3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfaW5pdCk6Cisg
ICAgICAgICh3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZmluYWxpemUpOgorICAgICAgICAo
d2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9wcm9wZXJ0eSk6CisgICAgICAgICh3ZWJr
aXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfY2xhc3NfaW5pdCk6CisgICAgICAgICh3ZWJraXRfZmls
ZV9jaG9vc2VyX3JlcXVlc3RfY3JlYXRlKToKKyAgICAgICAgKHdlYmtpdF9maWxlX2Nob29zZXJf
cmVxdWVzdF9nZXRfbWltZV90eXBlcyk6CisgICAgICAgICh3ZWJraXRfZmlsZV9jaG9vc2VyX3Jl
cXVlc3RfZ2V0X21pbWVfdHlwZXNfZmlsdGVyKToKKyAgICAgICAgKHdlYmtpdF9maWxlX2Nob29z
ZXJfcmVxdWVzdF9nZXRfc2VsZWN0X211bHRpcGxlKToKKyAgICAgICAgKHdlYmtpdF9maWxlX2No
b29zZXJfcmVxdWVzdF9zZWxlY3RfZmlsZXMpOgorICAgICAgICAod2Via2l0X2ZpbGVfY2hvb3Nl
cl9yZXF1ZXN0X2dldF9zZWxlY3RlZF9maWxlcyk6CisgICAgICAgICogd2Via2l0L3dlYmtpdGZp
bGVjaG9vc2VycmVxdWVzdC5oOiBBZGRlZC4KKyAgICAgICAgKF9XZWJLaXRGaWxlQ2hvb3NlclJl
cXVlc3QpOgorICAgICAgICAoX1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdENsYXNzKToKKyAgICAg
ICAgKiB3ZWJraXQvd2Via2l0ZmlsZWNob29zZXJyZXF1ZXN0cHJpdmF0ZS5oOiBBZGRlZCwgCisg
ICAgICAgIGNvbnRhaW5pbmcgdGhlIHByb3RvdHlwZSBvZiB3ZWJraXRfZmlsZV9jaG9vc2VyX3Jl
cXVlc3RfY3JlYXRlLgorCisgICAgICAgIFByb3ZpZGUgcHJpdmF0ZSBBUEkgdG8gbWFrZSBhIGZp
bGUgY2hvb3NlciByZXF1ZXN0IGZyb20gdGhlCisgICAgICAgIFdlYlZpZXcsIGFuZCBwcm92aWRl
IGEgZGVmYXVsdCBoYW5kbGVyIGZvciBpdC4KKworICAgICAgICAqIHdlYmtpdC93ZWJraXR3ZWJ2
aWV3LmNwcDoKKyAgICAgICAgKGZpbGVDaG9vc2VyRGlhbG9nUmVzcG9uc2VDYWxsYmFjayk6IEhh
bmRsZXIgZm9yIHRoZSAncmVzcG9uc2UnCisgICAgICAgIHNpZ25hbCBmb3IgdGhlIEd0a0ZpbGVD
aG9vc2VyRGlhbG9nIHVzZWQgaW4gdGhlIGRlZmF1bHQKKyAgICAgICAgaGFuZGxlci4gSXQgd2ls
bCBjYWxsIHRvIHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9zZWxlY3RfZmlsZXMKKyAgICAg
ICAgb3Igd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2NhbmNlbCBhcyBuZWVkZWQuCisgICAg
ICAgICh3ZWJraXRfd2ViX3ZpZXdfcmVhbF9ydW5fZmlsZV9jaG9vc2VyKTogRGVmYXVsdCBoYW5k
bGVyIGZvciB0aGUgbmV3CisgICAgICAgICdydW4tZmlsZS1jaG9vc2VyJyBzaWduYWwuIEl0IHdp
bGwgY3JlYXRlIGEgR3RrRmlsZUNob29zZXJEaWFsb2csCisgICAgICAgIGNvbm5lY3QgdG8gdGhl
ICdyZXNwb25zZScgc2lnbmFsIGFuZCBzaG93IGl0LgorICAgICAgICAod2Via2l0X3dlYl92aWV3
X2NsYXNzX2luaXQpOiBDb25uZWN0IHRoZSAncnVuLWZpbGUtY2hvb3NlcicKKyAgICAgICAgc2ln
bmFsIHRvIHRoZSBkZWZhdWx0IGhhbmRsZXIsIHdlYmtpdFdlYlZpZXdSdW5GaWxlQ2hvb3Nlci4K
KyAgICAgICAgKHdlYmtpdF93ZWJfdmlld19uZXcpOgorICAgICAgICAod2Via2l0X3dlYl92aWV3
X3J1bl9maWxlX2Nob29zZXJfcmVxdWVzdCk6CisgICAgICAgICogd2Via2l0L3dlYmtpdHdlYnZp
ZXcuaDoKKyAgICAgICAgKF9XZWJLaXRXZWJWaWV3Q2xhc3MpOiBBZGRlZCBwcm90b3R5cGUgZm9y
IHRoZSBoYW5kbGVyIG9mIHRoZSBuZXcKKyAgICAgICAgJ3J1bi1maWxlLWNob29zZXInIHNpZ25h
bC4KKyAgICAgICAgKiB3ZWJraXQvd2Via2l0d2Vidmlld3ByaXZhdGUuaDogQWRkZWQgcHJvdG90
eXBlIGZvcgorICAgICAgICBwcml2YXRlIG5ldyBmdW5jdGlvbiB3ZWJraXRXZWJWaWV3UnVuRmls
ZUNob29zZXJSZXF1ZXN0LgorCisgICAgICAgIFVwZGF0ZSBydW5PcGVuUGFuZWwgdG8gdXNlIHRo
ZSBuZXcgQVBJLCBpbmNsdWRpbmcgYSBkZWZhdWx0IGhhbmRsZXIKKyAgICAgICAgd2l0aCBzaW1p
bGFyIGJlaGF2aW91ciB0byBiZWZvcmUuCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9DaHJv
bWVDbGllbnRHdGsuY3BwOgorICAgICAgICAoV2ViS2l0OjpDaHJvbWVDbGllbnQ6OnJ1bk9wZW5Q
YW5lbCk6IE5vdyBjcmVhdGVzIGFuIGluc3RhbmNlIG9mCisgICAgICAgIFdlYktpdEZpbGVDaG9v
c2VyUmVxdWVzdCBhbmQgYXNrcyB0aGUgV2ViVmlldyB0byBlbWl0IHRoZQorICAgICAgICBuZXcg
J3J1bi1maWxlLWNob29zZXInIHNpZ25hbCB3aXRoIGl0LgorCisgICAgICAgIEFkZGVkIHRoZSBu
ZXcgcHVibGljIGhlYWRlciB0byB0aGUgbWFpbiBoZWFkZXIuCisKKyAgICAgICAgKiB3ZWJraXQv
d2Via2l0Lmg6IEFkZGVkIHdlYmtpdGZpbGVjaG9vc2VycmVxdWVzdC5oCisKKyAgICAgICAgTmV3
IHVuaXQgdGVzdHMgZm9yIHRoZSBuZXcgV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0IEFQSS4KKwor
ICAgICAgICAqIHRlc3RzL3Rlc3R3ZWJ2aWV3LmM6IFZhcmlvdXMgV2ViS2l0RmlsZUNob29zZXJS
ZXF1ZXN0IHRlc3RzLAorICAgICAgICBpbmNsdWRpbmcgTUlNRSB0eXBlIGZpbHRlcmluZyBhbmQg
c2VsZWN0aW9uIGhhbmRsaW5nLgorCisgICAgICAgIFVwZGF0ZWQgZG9jdW1lbnRhdGlvbiByZWxh
dGVkIGZpbGVzIHdpdGggdGhlIG5ldyBBUEkuCisKKyAgICAgICAgKiBkb2NzL3dlYmtpdGd0ay1k
b2NzLnNnbWw6IEFkZGVkIG5ldyBzZWN0aW9uLgorICAgICAgICAqIGRvY3Mvd2Via2l0Z3RrLXNl
Y3Rpb25zLnR4dDogQWRkZWQgbmV3IEFQSS4KKyAgICAgICAgKiBkb2NzL3dlYmtpdGd0ay50eXBl
czogQWRkZWQgZ2V0X3R5cGUgZnVuY3Rpb24uCisKIDIwMTItMDUtMjUgIEplc3VzIFNhbmNoZXot
UGFsZW5jaWEgIDxqZXN1cy5wYWxlbmNpYUBvcGVuYm9zc2Eub3JnPgogCiAgICAgICAgIFdlYktp
dFRlc3RSdW5uZXIgbmVlZHMgdG8gc3VwcG9ydCBsYXlvdXRUZXN0Q29udHJvbGxlci5zZXRKYXZh
U2NyaXB0UHJvZmlsaW5nRW5hYmxlZApJbmRleDogU291cmNlL1dlYktpdC9ndGsvR05VbWFrZWZp
bGUuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9ndGsvR05VbWFrZWZpbGUuYW0JKHJl
dmlzaW9uIDExODgzOCkKKysrIFNvdXJjZS9XZWJLaXQvZ3RrL0dOVW1ha2VmaWxlLmFtCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMTQsNiArMTE0LDcgQEAgd2Via2l0Z3RrX3N0YXRpY19oX2FwaSArPSBc
CiAJJChzcmNkaXIpL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRkb3dubG9hZC5oIFwK
IAkkKHNyY2RpcikvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGVycm9yLmggXAogCSQo
c3JjZGlyKS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZmF2aWNvbmRhdGFiYXNlLmgg
XAorCSQoc3JjZGlyKS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZmlsZWNob29zZXJy
ZXF1ZXN0LmggXAogCSQoc3JjZGlyKS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0Z2Vv
bG9jYXRpb25wb2xpY3lkZWNpc2lvbi5oIFwKIAkkKHNyY2RpcikvU291cmNlL1dlYktpdC9ndGsv
d2Via2l0L3dlYmtpdGdsb2JhbHMuaCBcCiAJJChzcmNkaXIpL1NvdXJjZS9XZWJLaXQvZ3RrL3dl
YmtpdC93ZWJraXRoaXR0ZXN0cmVzdWx0LmggXApAQCAtMjIwLDYgKzIyMSw5IEBAIHdlYmtpdGd0
a19zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZXJyb3IuY3Bw
IFwKIAlTb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZmF2aWNvbmRhdGFiYXNlLmNwcCBc
CiAJU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGZhdmljb25kYXRhYmFzZXByaXZhdGUu
aCBcCisJU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGZpbGVjaG9vc2VycmVxdWVzdC5j
cHAgXAorCVNvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRmaWxlY2hvb3NlcnJlcXVlc3Qu
aCBcCisJU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGZpbGVjaG9vc2VycmVxdWVzdHBy
aXZhdGUuaCBcCiAJU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGdlb2xvY2F0aW9ucG9s
aWN5ZGVjaXNpb24uY3BwIFwKIAlTb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0Z2VvbG9j
YXRpb25wb2xpY3lkZWNpc2lvbnByaXZhdGUuaCBcCiAJU291cmNlL1dlYktpdC9ndGsvd2Via2l0
L3dlYmtpdGdsb2JhbHMuY3BwIFwKSW5kZXg6IFNvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBw
b3J0L0Nocm9tZUNsaWVudEd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9ndGsv
V2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmNwcAkocmV2aXNpb24gMTE4ODM4KQorKysg
U291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTUsNiArNTUsNyBAQAogI2luY2x1ZGUgIldlYktpdERPTUJpbmRpbmcu
aCIKICNpbmNsdWRlICJXZWJLaXRET01IVE1MRWxlbWVudFByaXZhdGUuaCIKICNpbmNsdWRlICJX
aW5kb3dGZWF0dXJlcy5oIgorI2luY2x1ZGUgIndlYmtpdGZpbGVjaG9vc2VycmVxdWVzdHByaXZh
dGUuaCIKICNpbmNsdWRlICJ3ZWJraXRnZW9sb2NhdGlvbnBvbGljeWRlY2lzaW9uLmgiCiAjaW5j
bHVkZSAid2Via2l0Z2VvbG9jYXRpb25wb2xpY3lkZWNpc2lvbnByaXZhdGUuaCIKICNpbmNsdWRl
ICJ3ZWJraXRuZXR3b3JrcmVxdWVzdC5oIgpAQCAtODE0LDQwICs4MTUsOCBAQCB2b2lkIENocm9t
ZUNsaWVudDo6cmVhY2hlZEFwcGxpY2F0aW9uQ2FjCiAKIHZvaWQgQ2hyb21lQ2xpZW50OjpydW5P
cGVuUGFuZWwoRnJhbWUqLCBQYXNzUmVmUHRyPEZpbGVDaG9vc2VyPiBwcnBGaWxlQ2hvb3NlcikK
IHsKLSAgICBSZWZQdHI8RmlsZUNob29zZXI+IGNob29zZXIgPSBwcnBGaWxlQ2hvb3NlcjsKLQot
ICAgIEd0a1dpZGdldCogdG9wbGV2ZWwgPSBndGtfd2lkZ2V0X2dldF90b3BsZXZlbChHVEtfV0lE
R0VUKG1fd2ViVmlldykpOwotICAgIGlmICghd2lkZ2V0SXNPbnNjcmVlblRvcGxldmVsV2luZG93
KHRvcGxldmVsKSkKLSAgICAgICAgdG9wbGV2ZWwgPSAwOwotCi0gICAgR3RrV2lkZ2V0KiBkaWFs
b2cgPSBndGtfZmlsZV9jaG9vc2VyX2RpYWxvZ19uZXcoXygiVXBsb2FkIEZpbGUiKSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3BsZXZlbCA/
IEdUS19XSU5ET1codG9wbGV2ZWwpIDogMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHVEtfRklMRV9DSE9PU0VSX0FDVElPTl9PUEVOLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdUS19TVE9D
S19DQU5DRUwsIEdUS19SRVNQT05TRV9DQU5DRUwsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgR1RLX1NUT0NLX09QRU4sIEdUS19SRVNQT05TRV9B
Q0NFUFQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgTlVMTCk7Ci0KLSAgICBndGtfZmlsZV9jaG9vc2VyX3NldF9zZWxlY3RfbXVsdGlwbGUoR1RL
X0ZJTEVfQ0hPT1NFUihkaWFsb2cpLCBjaG9vc2VyLT5zZXR0aW5ncygpLmFsbG93c011bHRpcGxl
RmlsZXMpOwotCi0gICAgaWYgKGd0a19kaWFsb2dfcnVuKEdUS19ESUFMT0coZGlhbG9nKSkgPT0g
R1RLX1JFU1BPTlNFX0FDQ0VQVCkgewotICAgICAgICBpZiAoZ3RrX2ZpbGVfY2hvb3Nlcl9nZXRf
c2VsZWN0X211bHRpcGxlKEdUS19GSUxFX0NIT09TRVIoZGlhbG9nKSkpIHsKLSAgICAgICAgICAg
IEdPd25QdHI8R1NMaXN0PiBmaWxlbmFtZXMoZ3RrX2ZpbGVfY2hvb3Nlcl9nZXRfZmlsZW5hbWVz
KEdUS19GSUxFX0NIT09TRVIoZGlhbG9nKSkpOwotICAgICAgICAgICAgVmVjdG9yPFN0cmluZz4g
bmFtZXM7Ci0gICAgICAgICAgICBmb3IgKEdTTGlzdCogaXRlbSA9IGZpbGVuYW1lcy5nZXQoKSA7
IGl0ZW0gOyBpdGVtID0gaXRlbS0+bmV4dCkgewotICAgICAgICAgICAgICAgIGlmICghaXRlbS0+
ZGF0YSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgbmFt
ZXMuYXBwZW5kKGZpbGVuYW1lVG9TdHJpbmcoc3RhdGljX2Nhc3Q8Y2hhcio+KGl0ZW0tPmRhdGEp
KSk7Ci0gICAgICAgICAgICAgICAgZ19mcmVlKGl0ZW0tPmRhdGEpOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgY2hvb3Nlci0+Y2hvb3NlRmlsZXMobmFtZXMpOwotICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgZ2NoYXIqIGZpbGVuYW1lID0gZ3RrX2ZpbGVfY2hvb3Nlcl9nZXRfZmls
ZW5hbWUoR1RLX0ZJTEVfQ0hPT1NFUihkaWFsb2cpKTsKLSAgICAgICAgICAgIGlmIChmaWxlbmFt
ZSkKLSAgICAgICAgICAgICAgICBjaG9vc2VyLT5jaG9vc2VGaWxlKGZpbGVuYW1lVG9TdHJpbmco
ZmlsZW5hbWUpKTsKLSAgICAgICAgICAgIGdfZnJlZShmaWxlbmFtZSk7Ci0gICAgICAgIH0KLSAg
ICB9Ci0gICAgZ3RrX3dpZGdldF9kZXN0cm95KGRpYWxvZyk7CisgICAgR1JlZlB0cjxXZWJLaXRG
aWxlQ2hvb3NlclJlcXVlc3Q+IHJlcXVlc3QgPSBhZG9wdEdSZWYod2Via2l0X2ZpbGVfY2hvb3Nl
cl9yZXF1ZXN0X2NyZWF0ZShwcnBGaWxlQ2hvb3NlcikpOworICAgIHdlYmtpdF93ZWJfdmlld19y
dW5fZmlsZV9jaG9vc2VyX3JlcXVlc3QobV93ZWJWaWV3LCByZXF1ZXN0LmdldCgpKTsKIH0KIAog
dm9pZCBDaHJvbWVDbGllbnQ6OmxvYWRJY29uRm9yRmlsZXMoY29uc3QgVmVjdG9yPFdURjo6U3Ry
aW5nPiYgZmlsZW5hbWVzLCBXZWJDb3JlOjpGaWxlSWNvbkxvYWRlciogbG9hZGVyKQpJbmRleDog
U291cmNlL1dlYktpdC9ndGsvZG9jcy93ZWJraXRndGstZG9jcy5zZ21sCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvZ3RrL2RvY3Mvd2Via2l0Z3RrLWRvY3Muc2dtbAkocmV2aXNpb24gMTE4
ODM4KQorKysgU291cmNlL1dlYktpdC9ndGsvZG9jcy93ZWJraXRndGstZG9jcy5zZ21sCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MSw2ICs0MSw3IEBACiAgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL3dl
YmtpdGljb25kYXRhYmFzZS54bWwiLz4KICAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvd2Via2l0
c3BlbGxjaGVja2VyLnhtbCIvPgogICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC93ZWJraXRmYXZp
Y29uZGF0YWJhc2UueG1sIi8+CisgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL3dlYmtpdGZpbGVj
aG9vc2VycmVxdWVzdC54bWwiLz4KICAgPC9jaGFwdGVyPgogCiAgIDxjaGFwdGVyPgpJbmRleDog
U291cmNlL1dlYktpdC9ndGsvZG9jcy93ZWJraXRndGstc2VjdGlvbnMudHh0Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvZ3RrL2RvY3Mvd2Via2l0Z3RrLXNlY3Rpb25zLnR4dAkocmV2aXNp
b24gMTE4ODM4KQorKysgU291cmNlL1dlYktpdC9ndGsvZG9jcy93ZWJraXRndGstc2VjdGlvbnMu
dHh0CSh3b3JraW5nIGNvcHkpCkBAIC03MDMsNiArNzAzLDMwIEBAIFdlYktpdEZhdmljb25EYXRh
YmFzZVByaXZhdGUKIDwvU0VDVElPTj4KIAogPFNFQ1RJT04+Cis8RklMRT53ZWJraXRmaWxlY2hv
b3NlcnJlcXVlc3Q8L0ZJTEU+Cis8VElUTEU+V2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0PC9USVRM
RT4KK1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdAord2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0
X2dldF9zZWxlY3RfbXVsdGlwbGUKK3dlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfbWlt
ZV90eXBlcword2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9taW1lX3R5cGVzX2ZpbHRl
cgord2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9zZWxlY3RlZF9maWxlcword2Via2l0
X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X3NlbGVjdF9maWxlcworCis8U1VCU0VDVElPTiBTdGFuZGFy
ZD4KK1dFQktJVF9UWVBFX0ZJTEVfQ0hPT1NFUl9SRVFVRVNUCitXRUJLSVRfRklMRV9DSE9PU0VS
X1JFUVVFU1QKK1dFQktJVF9JU19GSUxFX0NIT09TRVJfUkVRVUVTVAorV0VCS0lUX0ZJTEVfQ0hP
T1NFUl9SRVFVRVNUX0NMQVNTCitXRUJLSVRfSVNfRklMRV9DSE9PU0VSX1JFUVVFU1RfQ0xBU1MK
K1dFQktJVF9GSUxFX0NIT09TRVJfUkVRVUVTVF9HRVRfQ0xBU1MKKworPFNVQlNFQ1RJT04gUHJp
dmF0ZT4KK1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdENsYXNzCitXZWJLaXRGaWxlQ2hvb3NlclJl
cXVlc3RQcml2YXRlCit3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X3R5cGUKKzwvU0VD
VElPTj4KKworPFNFQ1RJT04+CiA8RklMRT53ZWJraXRkZWZpbmVzPC9GSUxFPgogV0VCS0lUX0FQ
SQogV0VCS0lUR1RLX0FQSV9WRVJTSU9OCkluZGV4OiBTb3VyY2UvV2ViS2l0L2d0ay9kb2NzL3dl
YmtpdGd0ay50eXBlcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2d0ay9kb2NzL3dlYmtp
dGd0ay50eXBlcwkocmV2aXNpb24gMTE4ODM4KQorKysgU291cmNlL1dlYktpdC9ndGsvZG9jcy93
ZWJraXRndGsudHlwZXMJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw3IEBACiAjaW5jbHVkZSA8
d2Via2l0L3dlYmtpdC5oPgogd2Via2l0X2Rvd25sb2FkX2dldF90eXBlCiB3ZWJraXRfZmF2aWNv
bl9kYXRhYmFzZV9nZXRfdHlwZQord2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF90eXBl
CiB3ZWJraXRfZ2VvbG9jYXRpb25fcG9saWN5X2RlY2lzaW9uX2dldF90eXBlCiB3ZWJraXRfaGl0
X3Rlc3RfcmVzdWx0X2dldF90eXBlCiB3ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfdHlwZQpJbmRl
eDogU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdHdlYnZpZXcuYwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0d2Vidmlldy5jCShyZXZpc2lvbiAxMTg4MzgpCisr
KyBTb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0d2Vidmlldy5jCSh3b3JraW5nIGNvcHkpCkBA
IC01MDYsNiArNTA2LDIwNCBAQCBzdGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF93ZWJfdmlld19mdWxs
c2NyCiAgICAgZ3RrX3dpZGdldF9kZXN0cm95KHdpbmRvdyk7CiB9CiAKK3N0YXRpYyBnYm9vbGVh
biBjaGVja19taW1lX3R5cGVfZm9yX2ZpbHRlcihHdGtGaWxlRmlsdGVyKiBmaWx0ZXIsIGNvbnN0
IGdjaGFyKiBtaW1lX3R5cGUpCit7CisgICAgR3RrRmlsZUZpbHRlckluZm8gZmlsdGVyX2luZm87
CisgICAgZmlsdGVyX2luZm8uY29udGFpbnMgPSBHVEtfRklMRV9GSUxURVJfTUlNRV9UWVBFOwor
ICAgIGZpbHRlcl9pbmZvLm1pbWVfdHlwZSA9IG1pbWVfdHlwZTsKKyAgICByZXR1cm4gZ3RrX2Zp
bGVfZmlsdGVyX2ZpbHRlcihmaWx0ZXIsICZmaWx0ZXJfaW5mbyk7Cit9CisKK3N0YXRpYyBnYm9v
bGVhbiBydW5fZmlsZV9jaG9vc2VyX2NiXzEoV2ViS2l0V2ViVmlldyogd2VidmlldywgV2ViS2l0
RmlsZUNob29zZXJSZXF1ZXN0KiByZXF1ZXN0LCBncG9pbnRlciBkYXRhKQoreworICAgIGNvbnN0
IGdjaGFyKiBjb25zdCogbWltZV90eXBlczsKKyAgICBjb25zdCBnY2hhciogY29uc3QqIHNlbGVj
dGVkX2ZpbGVzOworICAgIEd0a0ZpbGVGaWx0ZXIqIGZpbHRlcjsKKworICAgIGdfYXNzZXJ0KCF3
ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X3NlbGVjdF9tdWx0aXBsZShyZXF1ZXN0KSk7
CisKKyAgICBtaW1lX3R5cGVzID0gd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9taW1l
X3R5cGVzKHJlcXVlc3QpOworICAgIGdfYXNzZXJ0KCFtaW1lX3R5cGVzKTsKKyAgICBmaWx0ZXIg
PSB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X21pbWVfdHlwZXNfZmlsdGVyKHJlcXVl
c3QpOworICAgIGdfYXNzZXJ0KCFmaWx0ZXIpOworICAgIHNlbGVjdGVkX2ZpbGVzID0gd2Via2l0
X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9zZWxlY3RlZF9maWxlcyhyZXF1ZXN0KTsKKyAgICBn
X2Fzc2VydCghc2VsZWN0ZWRfZmlsZXMpOworCisgICAgZ19tYWluX2xvb3BfcXVpdChsb29wKTsK
KyAgICByZXR1cm4gVFJVRTsKK30KKworc3RhdGljIGdib29sZWFuIHJ1bl9maWxlX2Nob29zZXJf
Y2JfMihXZWJLaXRXZWJWaWV3KiB3ZWJ2aWV3LCBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QqIHJl
cXVlc3QsIGdwb2ludGVyIGRhdGEpCit7CisgICAgY29uc3QgZ2NoYXIqIGNvbnN0KiBtaW1lX3R5
cGVzOworICAgIGNvbnN0IGdjaGFyKiBjb25zdCogc2VsZWN0ZWRfZmlsZXM7CisgICAgR3RrRmls
ZUZpbHRlciogZmlsdGVyOworCisgICAgZ19hc3NlcnQod2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1
ZXN0X2dldF9zZWxlY3RfbXVsdGlwbGUocmVxdWVzdCkpOworCisgICAgbWltZV90eXBlcyA9IHdl
YmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfbWltZV90eXBlcyhyZXF1ZXN0KTsKKyAgICBn
X2Fzc2VydCghbWltZV90eXBlcyk7CisgICAgZmlsdGVyID0gd2Via2l0X2ZpbGVfY2hvb3Nlcl9y
ZXF1ZXN0X2dldF9taW1lX3R5cGVzX2ZpbHRlcihyZXF1ZXN0KTsKKyAgICBnX2Fzc2VydCghZmls
dGVyKTsKKyAgICBzZWxlY3RlZF9maWxlcyA9IHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9n
ZXRfc2VsZWN0ZWRfZmlsZXMocmVxdWVzdCk7CisgICAgZ19hc3NlcnQoIXNlbGVjdGVkX2ZpbGVz
KTsKKworICAgIC8vIFNlbGVjdCBzb21lIGZpbGVzLgorICAgIGNvbnN0IGdjaGFyKiBmaWxlc1Rv
U2VsZWN0WzRdID0geyAiL2ZvbyIsICIvZm9vL2JhciIsICIvZm9vL2Jhci9iYXoiLCAwIH07Cisg
ICAgd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X3NlbGVjdF9maWxlcyhyZXF1ZXN0LCBmaWxl
c1RvU2VsZWN0KTsKKworICAgIC8vIENoZWNrIHRoZSBmaWxlcyB0aGF0IGhhdmUgYmVlbiBqdXN0
IHNlbGVjdGVkLgorICAgIHNlbGVjdGVkX2ZpbGVzID0gd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1
ZXN0X2dldF9zZWxlY3RlZF9maWxlcyhyZXF1ZXN0KTsKKyAgICBnX2Fzc2VydChzZWxlY3RlZF9m
aWxlcyk7CisgICAgZ19hc3NlcnRfY21wc3RyKHNlbGVjdGVkX2ZpbGVzWzBdLCA9PSwgIi9mb28i
KTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoc2VsZWN0ZWRfZmlsZXNbMV0sID09LCAiL2Zvby9iYXIi
KTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoc2VsZWN0ZWRfZmlsZXNbMl0sID09LCAiL2Zvby9iYXIv
YmF6Iik7CisgICAgZ19hc3NlcnQoIXNlbGVjdGVkX2ZpbGVzWzNdKTsKKworICAgIGdfbWFpbl9s
b29wX3F1aXQobG9vcCk7CisgICAgcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiBy
dW5fZmlsZV9jaG9vc2VyX2NiXzMoV2ViS2l0V2ViVmlldyogd2VidmlldywgV2ViS2l0RmlsZUNo
b29zZXJSZXF1ZXN0KiByZXF1ZXN0LCBncG9pbnRlciBkYXRhKQoreworICAgIGNvbnN0IGdjaGFy
KiBjb25zdCogc2VsZWN0ZWRfZmlsZXM7CisKKyAgICBzZWxlY3RlZF9maWxlcyA9IHdlYmtpdF9m
aWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfc2VsZWN0ZWRfZmlsZXMocmVxdWVzdCk7CisgICAgZ19h
c3NlcnQoc2VsZWN0ZWRfZmlsZXMpOworICAgIGdfYXNzZXJ0X2NtcHN0cihzZWxlY3RlZF9maWxl
c1swXSwgPT0sICIvZm9vIik7CisgICAgZ19hc3NlcnRfY21wc3RyKHNlbGVjdGVkX2ZpbGVzWzFd
LCA9PSwgIi9mb28vYmFyIik7CisgICAgZ19hc3NlcnRfY21wc3RyKHNlbGVjdGVkX2ZpbGVzWzJd
LCA9PSwgIi9mb28vYmFyL2JheiIpOworICAgIGdfYXNzZXJ0KCFzZWxlY3RlZF9maWxlc1szXSk7
CisKKyAgICBnX21haW5fbG9vcF9xdWl0KGxvb3ApOworICAgIHJldHVybiBUUlVFOworfQorCitz
dGF0aWMgZ2Jvb2xlYW4gcnVuX2ZpbGVfY2hvb3Nlcl9jYl80KFdlYktpdFdlYlZpZXcqIHdlYnZp
ZXcsIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCogcmVxdWVzdCwgZ3BvaW50ZXIgZGF0YSkKK3sK
KyAgICBjb25zdCBnY2hhciogY29uc3QqIG1pbWVfdHlwZXM7CisgICAgY29uc3QgZ2NoYXIqIGNv
bnN0KiBzZWxlY3RlZF9maWxlczsKKyAgICBHdGtGaWxlRmlsdGVyKiBmaWx0ZXI7CisKKyAgICBn
X2Fzc2VydCghd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9zZWxlY3RfbXVsdGlwbGUo
cmVxdWVzdCkpOworCisgICAgbWltZV90eXBlcyA9IHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVz
dF9nZXRfbWltZV90eXBlcyhyZXF1ZXN0KTsKKyAgICBnX2Fzc2VydChtaW1lX3R5cGVzKTsKKyAg
ICBnX2Fzc2VydF9jbXBzdHIobWltZV90eXBlc1swXSwgPT0sICJhdWRpby8qIik7CisgICAgZ19h
c3NlcnRfY21wc3RyKG1pbWVfdHlwZXNbMV0sID09LCAidmlkZW8vKiIpOworICAgIGdfYXNzZXJ0
X2NtcHN0cihtaW1lX3R5cGVzWzJdLCA9PSwgImltYWdlLyoiKTsKKyAgICBnX2Fzc2VydCghbWlt
ZV90eXBlc1szXSk7CisKKyAgICBmaWx0ZXIgPSB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3Rf
Z2V0X21pbWVfdHlwZXNfZmlsdGVyKHJlcXVlc3QpOworICAgIGdfYXNzZXJ0KEdUS19JU19GSUxF
X0ZJTFRFUihmaWx0ZXIpKTsKKyAgICBnX2Fzc2VydChjaGVja19taW1lX3R5cGVfZm9yX2ZpbHRl
cihmaWx0ZXIsICJhdWRpby8qIikpOworICAgIGdfYXNzZXJ0KGNoZWNrX21pbWVfdHlwZV9mb3Jf
ZmlsdGVyKGZpbHRlciwgInZpZGVvLyoiKSk7CisgICAgZ19hc3NlcnQoY2hlY2tfbWltZV90eXBl
X2Zvcl9maWx0ZXIoZmlsdGVyLCAiaW1hZ2UvKiIpKTsKKworICAgIHNlbGVjdGVkX2ZpbGVzID0g
d2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9zZWxlY3RlZF9maWxlcyhyZXF1ZXN0KTsK
KyAgICBnX2Fzc2VydCghc2VsZWN0ZWRfZmlsZXMpOworCisgICAgZ19tYWluX2xvb3BfcXVpdChs
b29wKTsKKyAgICByZXR1cm4gVFJVRTsKK30KKwordm9pZCBkb19tb3VzZV9idXR0b25fZXZlbnQo
R3RrV2lkZ2V0KiB3aWRnZXQsIEdka0V2ZW50VHlwZSBldmVudF90eXBlLCBpbnQgeCwgaW50IHks
IHVuc2lnbmVkIGludCBidXR0b24sIHVuc2lnbmVkIGludCBtb2RpZmllcnMpCit7CisgICAgaW50
IHhfcm9vdCwgeV9yb290OworCisgICAgZ19hc3NlcnQoZ3RrX3dpZGdldF9nZXRfcmVhbGl6ZWQo
d2lkZ2V0KSk7CisKKyAgICBHZGtFdmVudCogZXZlbnQgPSBnZGtfZXZlbnRfbmV3KGV2ZW50X3R5
cGUpOworICAgIGV2ZW50LT5idXR0b24ud2luZG93ID0gZ3RrX3dpZGdldF9nZXRfd2luZG93KHdp
ZGdldCk7CisgICAgZ19vYmplY3RfcmVmKGV2ZW50LT5idXR0b24ud2luZG93KTsKKworICAgIGV2
ZW50LT5idXR0b24udGltZSA9IEdES19DVVJSRU5UX1RJTUU7CisgICAgZXZlbnQtPmJ1dHRvbi54
ID0geDsKKyAgICBldmVudC0+YnV0dG9uLnkgPSB5OworICAgIGV2ZW50LT5idXR0b24uYXhlcyA9
IDA7CisgICAgZXZlbnQtPmJ1dHRvbi5zdGF0ZSA9IG1vZGlmaWVyczsKKyAgICBldmVudC0+YnV0
dG9uLmJ1dHRvbiA9IGJ1dHRvbjsKKworICAgIGV2ZW50LT5idXR0b24uZGV2aWNlID0gZ2RrX2Rl
dmljZV9tYW5hZ2VyX2dldF9jbGllbnRfcG9pbnRlcihnZGtfZGlzcGxheV9nZXRfZGV2aWNlX21h
bmFnZXIoZ3RrX3dpZGdldF9nZXRfZGlzcGxheSh3aWRnZXQpKSk7CisKKyAgICBnZGtfd2luZG93
X2dldF9yb290X2Nvb3JkcyhndGtfd2lkZ2V0X2dldF93aW5kb3cod2lkZ2V0KSwgeCwgeSwgJnhf
cm9vdCwgJnlfcm9vdCk7CisgICAgZXZlbnQtPmJ1dHRvbi54X3Jvb3QgPSB4X3Jvb3Q7CisgICAg
ZXZlbnQtPmJ1dHRvbi55X3Jvb3QgPSB5X3Jvb3Q7CisgICAgZ3RrX21haW5fZG9fZXZlbnQoZXZl
bnQpOworfQorCitzdGF0aWMgdm9pZCBjbGlja19tb3VzZV9idXR0b24oR3RrV2lkZ2V0KiB3aWRn
ZXQsIGludCB4LCBpbnQgeSwgdW5zaWduZWQgaW50IGJ1dHRvbiwgdW5zaWduZWQgaW50IG1vZGlm
aWVycykKK3sKKyAgICBkb19tb3VzZV9idXR0b25fZXZlbnQod2lkZ2V0LCBHREtfQlVUVE9OX1BS
RVNTLCB4LCB5LCBidXR0b24sIG1vZGlmaWVycyk7CisgICAgZG9fbW91c2VfYnV0dG9uX2V2ZW50
KHdpZGdldCwgR0RLX0JVVFRPTl9SRUxFQVNFLCB4LCB5LCBidXR0b24sIG1vZGlmaWVycyk7Cit9
CisKK3N0YXRpYyBnYm9vbGVhbiBjbGlja19tb3VzZV9idXR0b25fYW5kX3dhaXRfZm9yX2ZpbGVf
Y2hvb3Nlcl9yZXF1ZXN0KFdlYktpdFdlYlZpZXcqIHdlYl92aWV3KQoreworICAgIGNsaWNrX21v
dXNlX2J1dHRvbihHVEtfV0lER0VUKHdlYl92aWV3KSwgNSwgNSwgMSwgMCk7CisgICAgcmV0dXJu
IFRSVUU7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3Rfd2Via2l0X3dlYl92aWV3X2ZpbGVfY2hvb3Nl
cigpCit7CisgICAgY29uc3QgZ2NoYXIqIGh0bWxfZm9ybWF0X2Jhc2UgPSAiPGh0bWw+PGJvZHk+
IgorICAgICAgICAgICAgIjxpbnB1dCBzdHlsZT0ncG9zaXRpb246YWJzb2x1dGU7bGVmdDowO3Rv
cDowO21hcmdpbjowO3BhZGRpbmc6MCcgdHlwZT0nZmlsZScgJXMvPiIKKyAgICAgICAgICAgICI8
L2JvZHk+PC9odG1sPiI7CisgICAgZ2NoYXIqIGh0bWxfZm9ybWF0OworICAgIEd0a1dpZGdldCog
d2luZG93OworICAgIEd0a1dpZGdldCogd2ViX3ZpZXc7CisgICAgZ3Vsb25nIGhhbmRsZXI7CisK
KyAgICB3aW5kb3cgPSBndGtfd2luZG93X25ldyhHVEtfV0lORE9XX1RPUExFVkVMKTsKKyAgICB3
ZWJfdmlldyA9IHdlYmtpdF93ZWJfdmlld19uZXcoKTsKKyAgICBndGtfY29udGFpbmVyX2FkZChH
VEtfQ09OVEFJTkVSKHdpbmRvdyksIHdlYl92aWV3KTsKKyAgICBndGtfd2lkZ2V0X3Nob3dfYWxs
KHdpbmRvdyk7CisKKyAgICBsb29wID0gZ19tYWluX2xvb3BfbmV3KE5VTEwsIFRSVUUpOworCisg
ICAgLy8gTXVsdGlwbGUgc2VsZWN0aW9ucyBub3QgYWxsb3dlZCwgbm8gTUlNRSBmaWx0ZXJpbmcu
CisgICAgaGFuZGxlciA9IGdfc2lnbmFsX2Nvbm5lY3Qod2ViX3ZpZXcsICJydW4tZmlsZS1jaG9v
c2VyIiwgR19DQUxMQkFDSyhydW5fZmlsZV9jaG9vc2VyX2NiXzEpLCBOVUxMKTsKKyAgICBodG1s
X2Zvcm1hdCA9IGdfc3RyZHVwX3ByaW50ZihodG1sX2Zvcm1hdF9iYXNlLCAiIik7CisgICAgd2Vi
a2l0X3dlYl92aWV3X2xvYWRfc3RyaW5nKFdFQktJVF9XRUJfVklFVyh3ZWJfdmlldyksIGh0bWxf
Zm9ybWF0LCBOVUxMLCBOVUxMLCBOVUxMKTsKKyAgICBnX2ZyZWUoaHRtbF9mb3JtYXQpOworCisg
ICAgZ190aW1lb3V0X2FkZCgxMDAsIChHU291cmNlRnVuYykgY2xpY2tfbW91c2VfYnV0dG9uX2Fu
ZF93YWl0X2Zvcl9maWxlX2Nob29zZXJfcmVxdWVzdCwgV0VCS0lUX1dFQl9WSUVXKHdlYl92aWV3
KSk7CisgICAgZ19tYWluX2xvb3BfcnVuKGxvb3ApOworCisgICAgZ19zaWduYWxfaGFuZGxlcl9k
aXNjb25uZWN0KHdlYl92aWV3LCBoYW5kbGVyKTsKKworICAgIC8vIE11bHRpcGxlIHNlbGVjdGlv
bnMgYWxsb3dlZCwgbm8gTUlNRSBmaWx0ZXJpbmcsIHNvbWUgcHJlLXNlbGVjdGVkIGZpbGVzLgor
ICAgIGhhbmRsZXIgPSBnX3NpZ25hbF9jb25uZWN0KHdlYl92aWV3LCAicnVuLWZpbGUtY2hvb3Nl
ciIsIEdfQ0FMTEJBQ0socnVuX2ZpbGVfY2hvb3Nlcl9jYl8yKSwgTlVMTCk7CisgICAgaHRtbF9m
b3JtYXQgPSBnX3N0cmR1cF9wcmludGYoaHRtbF9mb3JtYXRfYmFzZSwgIm11bHRpcGxlIik7Cisg
ICAgd2Via2l0X3dlYl92aWV3X2xvYWRfc3RyaW5nKFdFQktJVF9XRUJfVklFVyh3ZWJfdmlldyks
IGh0bWxfZm9ybWF0LCBOVUxMLCBOVUxMLCBOVUxMKTsKKyAgICBnX2ZyZWUoaHRtbF9mb3JtYXQp
OworCisgICAgZ190aW1lb3V0X2FkZCgxMDAsIChHU291cmNlRnVuYykgY2xpY2tfbW91c2VfYnV0
dG9uX2FuZF93YWl0X2Zvcl9maWxlX2Nob29zZXJfcmVxdWVzdCwgV0VCS0lUX1dFQl9WSUVXKHdl
Yl92aWV3KSk7CisgICAgZ19tYWluX2xvb3BfcnVuKGxvb3ApOworCisgICAgZ19zaWduYWxfaGFu
ZGxlcl9kaXNjb25uZWN0KHdlYl92aWV3LCBoYW5kbGVyKTsKKworICAgIC8vIFBlcmZvcm0gYW5v
dGhlciByZXF1ZXN0IHRvIGNoZWNrIGlmIHRoZSBsaXN0IG9mIGZpbGVzIHNlbGVjdGVkCisgICAg
Ly8gaW4gdGhlIHByZXZpb3VzIHN0ZXAgYXBwZWFycyBub3cgYXMgcGFydCBvZiB0aGUgbmV3IHJl
cXVlc3QuCisgICAgaGFuZGxlciA9IGdfc2lnbmFsX2Nvbm5lY3Qod2ViX3ZpZXcsICJydW4tZmls
ZS1jaG9vc2VyIiwgR19DQUxMQkFDSyhydW5fZmlsZV9jaG9vc2VyX2NiXzMpLCBOVUxMKTsKKyAg
ICBnX3RpbWVvdXRfYWRkKDEwMCwgKEdTb3VyY2VGdW5jKSBjbGlja19tb3VzZV9idXR0b25fYW5k
X3dhaXRfZm9yX2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0LCBXRUJLSVRfV0VCX1ZJRVcod2ViX3ZpZXcp
KTsKKyAgICBnX21haW5fbG9vcF9ydW4obG9vcCk7CisKKyAgICBnX3NpZ25hbF9oYW5kbGVyX2Rp
c2Nvbm5lY3Qod2ViX3ZpZXcsIGhhbmRsZXIpOworCisgICAgLy8gTXVsdGlwbGUgc2VsZWN0aW9u
cyBub3QgYWxsb3dlZCwgb25seSBhY2NlcHQgaW1hZ2VzLCBhdWRpbyBhbmQgdmlkZW8gZmlsZXMu
LgorICAgIGhhbmRsZXIgPSBnX3NpZ25hbF9jb25uZWN0KHdlYl92aWV3LCAicnVuLWZpbGUtY2hv
b3NlciIsIEdfQ0FMTEJBQ0socnVuX2ZpbGVfY2hvb3Nlcl9jYl80KSwgTlVMTCk7CisgICAgaHRt
bF9mb3JtYXQgPSBnX3N0cmR1cF9wcmludGYoaHRtbF9mb3JtYXRfYmFzZSwgImFjY2VwdD0nYXVk
aW8vKix2aWRlby8qLGltYWdlLyonIik7CisgICAgd2Via2l0X3dlYl92aWV3X2xvYWRfc3RyaW5n
KFdFQktJVF9XRUJfVklFVyh3ZWJfdmlldyksIGh0bWxfZm9ybWF0LCBOVUxMLCBOVUxMLCBOVUxM
KTsKKyAgICBnX2ZyZWUoaHRtbF9mb3JtYXQpOworCisgICAgZ190aW1lb3V0X2FkZCgxMDAsIChH
U291cmNlRnVuYykgY2xpY2tfbW91c2VfYnV0dG9uX2FuZF93YWl0X2Zvcl9maWxlX2Nob29zZXJf
cmVxdWVzdCwgV0VCS0lUX1dFQl9WSUVXKHdlYl92aWV3KSk7CisgICAgZ19tYWluX2xvb3BfcnVu
KGxvb3ApOworCisgICAgZ19zaWduYWxfaGFuZGxlcl9kaXNjb25uZWN0KHdlYl92aWV3LCBoYW5k
bGVyKTsKKyAgICBndGtfd2lkZ2V0X2Rlc3Ryb3kod2luZG93KTsKK30KKwogaW50IG1haW4oaW50
IGFyZ2MsIGNoYXIqKiBhcmd2KQogewogICAgIFNvdXBTZXJ2ZXIqIHNlcnZlcjsKQEAgLTUzNyw2
ICs3MzUsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCiAgICAgZ190ZXN0X2Fk
ZF9mdW5jKCIvd2Via2l0L3dlYnZpZXcvd2Vidmlldy1kb2VzLW5vdC1zdGVhbC1mb2N1cyIsIHRl
c3Rfd2Via2l0X3dlYl92aWV3X2RvZXNfbm90X3N0ZWFsX2ZvY3VzKTsKICAgICBnX3Rlc3RfYWRk
X2RhdGFfZnVuYygiL3dlYmtpdC93ZWJ2aWV3L2Z1bGxzY3JlZW4iLCBHSU5UX1RPX1BPSU5URVIo
RkFMU0UpLCB0ZXN0X3dlYmtpdF93ZWJfdmlld19mdWxsc2NyZWVuKTsKICAgICBnX3Rlc3RfYWRk
X2RhdGFfZnVuYygiL3dlYmtpdC93ZWJ2aWV3L2Z1bGxzY3JlZW4tYmxvY2tlZCIsIEdJTlRfVE9f
UE9JTlRFUihUUlVFKSwgdGVzdF93ZWJraXRfd2ViX3ZpZXdfZnVsbHNjcmVlbik7CisgICAgZ190
ZXN0X2FkZF9mdW5jKCIvd2Via2l0L3dlYnZpZXcvZmlsZS1jaG9vc2VyIiwgdGVzdF93ZWJraXRf
d2ViX3ZpZXdfZmlsZV9jaG9vc2VyKTsKIAogICAgIHJldHVybiBnX3Rlc3RfcnVuICgpOwogfQpJ
bmRleDogU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXQuaAkocmV2aXNpb24gMTE4ODM4KQorKysgU291
cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsy
OCw3IEBACiAjaW5jbHVkZSA8d2Via2l0L3dlYmtpdGRvd25sb2FkLmg+CiAjaW5jbHVkZSA8d2Vi
a2l0L3dlYmtpdGVudW10eXBlcy5oPgogI2luY2x1ZGUgPHdlYmtpdC93ZWJraXRmYXZpY29uZGF0
YWJhc2UuaD4KKyNpbmNsdWRlIDx3ZWJraXQvd2Via2l0ZmlsZWNob29zZXJyZXF1ZXN0Lmg+CiAj
aW5jbHVkZSA8d2Via2l0L3dlYmtpdGdlb2xvY2F0aW9ucG9saWN5ZGVjaXNpb24uaD4KICNpbmNs
dWRlIDx3ZWJraXQvd2Via2l0Z2xvYmFscy5oPgogI2luY2x1ZGUgPHdlYmtpdC93ZWJraXRoaXR0
ZXN0cmVzdWx0Lmg+CkluZGV4OiBTb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZmlsZWNo
b29zZXJyZXF1ZXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQv
d2Via2l0ZmlsZWNob29zZXJyZXF1ZXN0LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJL
aXQvZ3RrL3dlYmtpdC93ZWJraXRmaWxlY2hvb3NlcnJlcXVlc3QuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMzQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwu
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJ3ZWJraXRmaWxlY2hvb3NlcnJlcXVlc3Qu
aCIKKworI2luY2x1ZGUgIkZpbGVDaG9vc2VyLmgiCisjaW5jbHVkZSAiRmlsZVN5c3RlbS5oIgor
I2luY2x1ZGUgIndlYmtpdGZpbGVjaG9vc2VycmVxdWVzdHByaXZhdGUuaCIKKyNpbmNsdWRlICJ3
ZWJraXRnbG9iYWxzcHJpdmF0ZS5oIgorI2luY2x1ZGUgPGdsaWIvZ2kxOG4tbGliLmg+CisjaW5j
bHVkZSA8d3RmL2dvYmplY3QvR093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQ
dHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBX
ZWJDb3JlOworCisvKioKKyAqIFNFQ1RJT046d2Via2l0ZmlsZWNob29zZXJyZXF1ZXN0CisgKiBA
U2hvcnRfZGVzY3JpcHRpb246IEEgcmVxdWVzdCB0byBvcGVuIGEgZmlsZSBjaG9vc2VyCisgKiBA
VGl0bGU6IFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdAorICogQFNlZV9hbHNvOiAjV2ViS2l0V2Vi
VmlldworICoKKyAqIFdoZW5ldmVyIHRoZSB1c2VyIGludGVyYWN0cyB3aXRoIGFuICZsdDtpbnB1
dCB0eXBlPSdmaWxlJyAvJmd0OworICogSFRNTCBlbGVtZW50LCBXZWJLaXQgd2lsbCBuZWVkIHRv
IHNob3cgYSBkaWFsb2cgdG8gY2hvb3NlIG9uZSBvcgorICogbW9yZSBmaWxlcyB0byBiZSB1cGxv
YWRlZCB0byB0aGUgc2VydmVyIGFsb25nIHdpdGggdGhlIHJlc3Qgb2YgdGhlCisgKiBmb3JtIGRh
dGEuIEZvciB0aGF0IHRvIGhhcHBlbiBpbiBhIGdlbmVyYWwgd2F5LCBpbnN0ZWFkIG9mIGp1c3QK
KyAqIG9wZW5pbmcgYSAjR3RrRmlsZUNob29zZXJEaWFsb2cgKHdoaWNoIG1pZ2h0IGJlIG5vdCBk
ZXNpcmFibGUgaW4KKyAqIHNvbWUgY2FzZXMsIHdoaWNoIGNvdWxkIHByZWZlciB0byB1c2UgdGhl
aXIgb3duIGZpbGUgY2hvb3NlcgorICogZGlhbG9nKSwgV2ViS2l0IHdpbGwgZmlyZSB0aGUgI1dl
YktpdFdlYlZpZXc6OnJ1bi1maWxlLWNob29zZXIKKyAqIHNpZ25hbCB3aXRoIGEgI1dlYktpdEZp
bGVDaG9vc2VyUmVxdWVzdCBvYmplY3QsIHdoaWNoIHdpbGwgYWxsb3cKKyAqIHRoZSBjbGllbnQg
YXBwbGljYXRpb24gdG8gc3BlY2lmeSB0aGUgZmlsZXMgdG8gYmUgc2VsZWN0ZWQsIHRvCisgKiBp
bnNwZWN0IHRoZSBkZXRhaWxzIG9mIHRoZSByZXF1ZXN0IChlLmcuIGlmIG11bHRpcGxlIHNlbGVj
dGlvbgorICogc2hvdWxkIGJlIGFsbG93ZWQpIGFuZCB0byBjYW5jZWwgdGhlIHJlcXVlc3QsIGlu
IGNhc2Ugbm90aGluZyB3YXMKKyAqIHNlbGVjdGVkLgorICoKKyAqIEluIGNhc2UgdGhlIGNsaWVu
dCBhcHBsaWNhdGlvbiBkb2VzIG5vdCB3aXNoIHRvIGhhbmRsZSB0aGlzIHNpZ25hbCwKKyAqIFdl
YktpdCB3aWxsIHByb3ZpZGUgYSBkZWZhdWx0IGhhbmRsZXIgd2hpY2ggd2lsbCBhc3luY2hyb25v
dXNseSBydW4KKyAqIGEgcmVndWxhciAjR3RrRmlsZUNob29zZXJEaWFsb2cgZm9yIHRoZSB1c2Vy
IHRvIGludGVyYWN0IHdpdGguCisgKi8KK0dfREVGSU5FX1RZUEUoV2ViS2l0RmlsZUNob29zZXJS
ZXF1ZXN0LCB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3QsIEdfVFlQRV9PQkpFQ1QpCisKK3N0
cnVjdCBfV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0UHJpdmF0ZSB7CisgICAgUmVmUHRyPEZpbGVD
aG9vc2VyPiBjaG9vc2VyOworICAgIEdSZWZQdHI8R3RrRmlsZUZpbHRlcj4gZmlsdGVyOworICAg
IEdSZWZQdHI8R1B0ckFycmF5PiBtaW1lVHlwZXM7CisgICAgR1JlZlB0cjxHUHRyQXJyYXk+IHNl
bGVjdGVkRmlsZXM7Cit9OworCitlbnVtIHsKKyAgICBQUk9QXzAsCisgICAgUFJPUF9GSUxURVIs
CisgICAgUFJPUF9NSU1FX1RZUEVTLAorICAgIFBST1BfU0VMRUNUX01VTFRJUExFLAorICAgIFBS
T1BfU0VMRUNURURfRklMRVMsCit9OworCitzdGF0aWMgdm9pZCB3ZWJraXRfZmlsZV9jaG9vc2Vy
X3JlcXVlc3RfaW5pdChXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QqIHJlcXVlc3QpCit7CisgICAg
cmVxdWVzdC0+cHJpdiA9IEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURShyZXF1ZXN0LCBXRUJL
SVRfVFlQRV9GSUxFX0NIT09TRVJfUkVRVUVTVCwgV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0UHJp
dmF0ZSk7CisgICAgbmV3IChyZXF1ZXN0LT5wcml2KSBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3RQ
cml2YXRlKCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9m
aW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCit7CisgICAgV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0
KiByZXF1ZXN0ID0gV0VCS0lUX0ZJTEVfQ0hPT1NFUl9SRVFVRVNUKG9iamVjdCk7CisKKyAgICBy
ZXF1ZXN0LT5wcml2LT5+V2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0UHJpdmF0ZSgpOworICAgIEdf
T0JKRUNUX0NMQVNTKHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9wYXJlbnRfY2xhc3MpLT5m
aW5hbGl6ZShvYmplY3QpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZmlsZV9jaG9vc2VyX3Jl
cXVlc3RfZ2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcElkLCBHVmFsdWUq
IHZhbHVlLCBHUGFyYW1TcGVjKiBwYXJhbVNwZWMpCit7CisgICAgV2ViS2l0RmlsZUNob29zZXJS
ZXF1ZXN0KiByZXF1ZXN0ID0gV0VCS0lUX0ZJTEVfQ0hPT1NFUl9SRVFVRVNUKG9iamVjdCk7Cisg
ICAgc3dpdGNoIChwcm9wSWQpIHsKKyAgICBjYXNlIFBST1BfRklMVEVSOgorICAgICAgICBnX3Zh
bHVlX3NldF9vYmplY3QodmFsdWUsIHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfbWlt
ZV90eXBlc19maWx0ZXIocmVxdWVzdCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1Bf
TUlNRV9UWVBFUzoKKyAgICAgICAgZ192YWx1ZV9zZXRfYm94ZWQodmFsdWUsIHdlYmtpdF9maWxl
X2Nob29zZXJfcmVxdWVzdF9nZXRfbWltZV90eXBlcyhyZXF1ZXN0KSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgUFJPUF9TRUxFQ1RfTVVMVElQTEU6CisgICAgICAgIGdfdmFsdWVfc2V0X2Jv
b2xlYW4odmFsdWUsIHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfc2VsZWN0X211bHRp
cGxlKHJlcXVlc3QpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1NFTEVDVEVEX0ZJ
TEVTOgorICAgICAgICBnX3ZhbHVlX3NldF9ib3hlZCh2YWx1ZSwgd2Via2l0X2ZpbGVfY2hvb3Nl
cl9yZXF1ZXN0X2dldF9zZWxlY3RlZF9maWxlcyhyZXF1ZXN0KSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChv
YmplY3QsIHByb3BJZCwgcGFyYW1TcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitz
dGF0aWMgdm9pZCB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfY2xhc3NfaW5pdChXZWJLaXRG
aWxlQ2hvb3NlclJlcXVlc3RDbGFzcyogcmVxdWVzdENsYXNzKQoreworICAgIEdPYmplY3RDbGFz
cyogb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhyZXF1ZXN0Q2xhc3MpOworICAgIG9iamVj
dENsYXNzLT5maW5hbGl6ZSA9IHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9maW5hbGl6ZTsK
KyAgICBvYmplY3RDbGFzcy0+Z2V0X3Byb3BlcnR5ID0gd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1
ZXN0X2dldF9wcm9wZXJ0eTsKKyAgICBnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUocmVxdWVzdENs
YXNzLCBzaXplb2YoV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0UHJpdmF0ZSkpOworCisgICAgLyoq
CisgICAgICogV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0OmZpbHRlcjoKKyAgICAgKgorICAgICAq
IFRoZSBmaWx0ZXIgY3VycmVudGx5IGFzc29jaWF0ZWQgd2l0aCB0aGUgcmVxdWVzdC4gU2VlCisg
ICAgICogd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9taW1lX3R5cGVzX2ZpbHRlcigp
IGZvciBtb3JlCisgICAgICogZGV0YWlscy4KKyAgICAgKi8KKyAgICBnX29iamVjdF9jbGFzc19p
bnN0YWxsX3Byb3BlcnR5KG9iamVjdENsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgUFJPUF9GSUxURVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBnX3BhcmFtX3NwZWNfb2JqZWN0KCJmaWx0ZXIiLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiTUlNRSB0eXBlcyBmaWx0ZXIiKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIlRo
ZSBmaWx0ZXIgY3VycmVudGx5IGFzc29jaWF0ZWQgd2l0aCB0aGUgcmVxdWVzdCIpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1RLX1RZUEVf
RklMRV9GSUxURVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKyAgICAvKioKKyAgICAgKiBXZWJL
aXRGaWxlQ2hvb3NlclJlcXVlc3Q6bWltZS10eXBlczoKKyAgICAgKgorICAgICAqIEEgJU5VTEwt
dGVybWluYXRlZCBhcnJheSBvZiBzdHJpbmdzIGNvbnRhaW5pbmcgdGhlIGxpc3Qgb2YgTUlNRQor
ICAgICAqIHR5cGVzIHRoZSBmaWxlIGNob29zZXIgZGlhbG9nIHNob3VsZCBoYW5kbGUuIFNlZQor
ICAgICAqIHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfbWltZV90eXBlcygpIGZvciBt
b3JlIGRldGFpbHMuCisgICAgICovCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0
eShvYmplY3RDbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBST1Bf
TUlNRV9UWVBFUywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfcGFyYW1f
c3BlY19ib3hlZCgibWltZS10eXBlcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfKCJNSU1FIHR5cGVzIiksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJUaGUgbGlzdCBvZiBNSU1F
IHR5cGVzIGFzc29jaWF0ZWQgd2l0aCB0aGUgcmVxdWVzdCIpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR19UWVBFX1NUUlYsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfUEFS
QU1fUkVBREFCTEUpKTsgICAgLyoqCisgICAgICogV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0OnNl
bGVjdC1tdWx0aXBsZToKKyAgICAgKgorICAgICAqIFdoZXRoZXIgdGhlIGZpbGUgY2hvb3NlciBz
aG91bGQgYWxsb3cgc2VsZWN0aW5nIG11bHRpcGxlCisgICAgICogZmlsZXMuIFNlZQorICAgICAq
IHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfc2VsZWN0X211bHRpcGxlKCkgZm9yCisg
ICAgICogbW9yZSBkZXRhaWxzLgorICAgICAqLworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxf
cHJvcGVydHkob2JqZWN0Q2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBQUk9QX1NFTEVDVF9NVUxUSVBMRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGdfcGFyYW1fc3BlY19ib29sZWFuKCJzZWxlY3QtbXVsdGlwbGUiLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIlNlbGVjdCBtdWx0
aXBsZSBmaWxlcyIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF8oIldoZXRoZXIgdGhlIGZpbGUgY2hvb3NlciBzaG91bGQgYWxsb3cgc2Vs
ZWN0aW5nIG11bHRpcGxlIGZpbGVzIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgRkFMU0UsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7Cisg
ICAgLyoqCisgICAgICogV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0OnNlbGVjdGVkLWZpbGVzOgor
ICAgICAqCisgICAgICogQSAlTlVMTC10ZXJtaW5hdGVkIGFycmF5IG9mIHN0cmluZ3MgY29udGFp
bmluZyB0aGUgbGlzdCBvZgorICAgICAqIHNlbGVjdGVkIGZpbGVzIGFzc29jaWF0ZWQgdG8gdGhl
IGN1cnJlbnQgcmVxdWVzdC4gU2VlCisgICAgICogd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0
X2dldF9zZWxlY3RlZF9maWxlcygpIGZvciBtb3JlIGRldGFpbHMuCisgICAgICovCisgICAgZ19v
YmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShvYmplY3RDbGFzcywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFBST1BfU0VMRUNURURfRklMRVMsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBnX3BhcmFtX3NwZWNfYm94ZWQoInNlbGVjdGVkLWZpbGVz
IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF8oIlNlbGVjdGVkIGZpbGVzIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfKCJUaGUgbGlzdCBvZiBzZWxlY3RlZCBmaWxlcyBhc3NvY2lh
dGVkIHdpdGggdGhlIHJlcXVlc3QiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEdfVFlQRV9TVFJWLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7
Cit9CisKK1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCogd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1
ZXN0X2NyZWF0ZShQYXNzUmVmUHRyPEZpbGVDaG9vc2VyPiBjaG9vc2VyKQoreworICAgIFdlYktp
dEZpbGVDaG9vc2VyUmVxdWVzdCogcmVxdWVzdCA9IFdFQktJVF9GSUxFX0NIT09TRVJfUkVRVUVT
VChnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfRklMRV9DSE9PU0VSX1JFUVVFU1QsIE5VTEwpKTsK
KyAgICByZXF1ZXN0LT5wcml2LT5jaG9vc2VyID0gY2hvb3NlcjsKKyAgICByZXR1cm4gcmVxdWVz
dDsKK30KKworLyoqCisgKiB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X21pbWVfdHlw
ZXM6CisgKiBAcmVxdWVzdDogYSAjV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0CisgKgorICogR2V0
IHRoZSBsaXN0IG9mIE1JTUUgdHlwZXMgdGhlIGZpbGUgY2hvb3NlciBkaWFsb2cgc2hvdWxkIGhh
bmRsZSwKKyAqIGluIHRoZSBmb3JtYXQgc3BlY2lmaWVkIGluIFJGQyAyMDQ2IGZvciAibWVkaWEg
dHlwZXMiLiBJdHMgY29udGVudHMKKyAqIGRlcGVuZCBvbiB0aGUgdmFsdWUgb2YgdGhlICdhY2Nl
cHQnIGF0dHJpYnV0ZSBmb3IgSFRNTCBpbnB1dAorICogZWxlbWVudHMuIFRoaXMgZnVuY3Rpb24g
c2hvdWxkIG5vcm1hbGx5IGJlIGNhbGxlZCBiZWZvcmUgcHJlc2VudGluZworICogdGhlIGZpbGUg
Y2hvb3NlciBkaWFsb2cgdG8gdGhlIHVzZXIsIHRvIGRlY2lkZSB3aGV0aGVyIHRvIGFsbG93IHRo
ZQorICogdXNlciB0byBzZWxlY3QgbXVsdGlwbGUgZmlsZXMgYXQgb25jZSBvciBvbmx5IG9uZS4K
KyAqCisgKiBSZXR1cm5zOiAoYXJyYXkgemVyby10ZXJtaW5hdGVkPTEpICh0cmFuc2ZlciBub25l
KTogYQorICogJU5VTEwtdGVybWluYXRlZCBhcnJheSBvZiBzdHJpbmdzIGlmIGEgbGlzdCBvZiBh
Y2NlcHRlZCBNSU1FIHR5cGVzCisgKiBpcyBkZWZpbmVkIG9yICVOVUxMIG90aGVyd2lzZSwgbWVh
bmluZyB0aGF0IGFueSBNSU1FIHR5cGUgc2hvdWxkIGJlCisgKiBhY2NlcHRlZC4gVGhpcyBhcnJh
eSBhbmQgaXRzIGNvbnRlbnRzIGFyZSBvd25lZCBieSBXZWJLaXRHVEsrIGFuZAorICogc2hvdWxk
IG5vdCBiZSBtb2RpZmllZCBvciBmcmVlZC4KKyAqLworY29uc3QgZ2NoYXIqIGNvbnN0KiB3ZWJr
aXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X21pbWVfdHlwZXMoV2ViS2l0RmlsZUNob29zZXJS
ZXF1ZXN0KiByZXF1ZXN0KQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19G
SUxFX0NIT09TRVJfUkVRVUVTVChyZXF1ZXN0KSwgMCk7CisgICAgaWYgKHJlcXVlc3QtPnByaXYt
Pm1pbWVUeXBlcykKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Z2NoYXIqKj4ocmVx
dWVzdC0+cHJpdi0+bWltZVR5cGVzLT5wZGF0YSk7CisKKyAgICBGaWxlQ2hvb3NlclNldHRpbmdz
IHNldHRpbmdzID0gcmVxdWVzdC0+cHJpdi0+Y2hvb3Nlci0+c2V0dGluZ3MoKTsKKyAgICBzaXpl
X3QgbnVtT2ZNaW1lVHlwZXMgPSBzZXR0aW5ncy5hY2NlcHRNSU1FVHlwZXMuc2l6ZSgpOworICAg
IGlmICghbnVtT2ZNaW1lVHlwZXMpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmVxdWVzdC0+
cHJpdi0+bWltZVR5cGVzID0gYWRvcHRHUmVmKGdfcHRyX2FycmF5X25ld193aXRoX2ZyZWVfZnVu
YyhnX2ZyZWUpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bU9mTWltZVR5cGVzOyAr
K2kpIHsKKyAgICAgICAgU3RyaW5nIG1pbWVUeXBlU3RyaW5nID0gc2V0dGluZ3MuYWNjZXB0TUlN
RVR5cGVzW2ldOworICAgICAgICBpZiAobWltZVR5cGVTdHJpbmcuaXNFbXB0eSgpKQorICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgIGdfcHRyX2FycmF5X2FkZChyZXF1ZXN0LT5wcml2LT5t
aW1lVHlwZXMuZ2V0KCksIGdfc3RyZHVwKG1pbWVUeXBlU3RyaW5nLnV0ZjgoKS5kYXRhKCkpKTsK
KyAgICB9CisgICAgZ19wdHJfYXJyYXlfYWRkKHJlcXVlc3QtPnByaXYtPm1pbWVUeXBlcy5nZXQo
KSwgMCk7CisKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxnY2hhcioqPihyZXF1ZXN0LT5w
cml2LT5taW1lVHlwZXMtPnBkYXRhKTsKK30KKworLyoqCisgKiB3ZWJraXRfZmlsZV9jaG9vc2Vy
X3JlcXVlc3RfZ2V0X21pbWVfdHlwZXNfZmlsdGVyOgorICogQHJlcXVlc3Q6IGEgI1dlYktpdEZp
bGVDaG9vc2VyUmVxdWVzdAorICoKKyAqIEdldCB0aGUgZmlsdGVyIGN1cnJlbnRseSBhc3NvY2lh
dGVkIHdpdGggdGhlIHJlcXVlc3QsIHJlYWR5IHRvIGJlCisgKiB1c2VkIGJ5ICNHdGtGaWxlQ2hv
b3Nlci4gVGhpcyBmdW5jdGlvbiBzaG91bGQgbm9ybWFsbHkgYmUgY2FsbGVkCisgKiBiZWZvcmUg
cHJlc2VudGluZyB0aGUgZmlsZSBjaG9vc2VyIGRpYWxvZyB0byB0aGUgdXNlciwgdG8gZGVjaWRl
CisgKiB3aGV0aGVyIHRvIGFwcGx5IGEgZmlsdGVyIHNvIHRoZSB1c2VyIHdvdWxkIG5vdCBiZSBh
bGxvd2VkIHRvCisgKiBzZWxlY3QgZmlsZXMgd2l0aCBvdGhlciBNSU1FIHR5cGVzLgorICoKKyAq
IFNlZSB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X21pbWVfdHlwZXMoKSBpZiB5b3Ug
YXJlCisgKiBpbnRlcmVzdGVkIGluIGdldHRpbmcgdGhlIGxpc3Qgb2YgYWNjZXB0ZWQgTUlNRSB0
eXBlcy4KKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6IGEgI0d0a0ZpbGVGaWx0ZXIg
aWYgYSBsaXN0IG9mIGFjY2VwdGVkCisgKiBNSU1FIHR5cGVzIGlzIGRlZmluZWQgb3IgJU5VTEwg
b3RoZXJ3aXNlLiBUaGUgcmV0dXJuZWQgb2JqZWN0IGlzCisgKiBvd25lZCBieSBXZWJLaXRHVEsr
IHNob3VsZCBub3QgYmUgbW9kaWZpZWQgb3IgZnJlZWQuCisgKi8KK0d0a0ZpbGVGaWx0ZXIqIHdl
YmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfbWltZV90eXBlc19maWx0ZXIoV2ViS2l0Rmls
ZUNob29zZXJSZXF1ZXN0KiByZXF1ZXN0KQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdF
QktJVF9JU19GSUxFX0NIT09TRVJfUkVRVUVTVChyZXF1ZXN0KSwgMCk7CisgICAgaWYgKHJlcXVl
c3QtPnByaXYtPmZpbHRlcikKKyAgICAgICAgcmV0dXJuIHJlcXVlc3QtPnByaXYtPmZpbHRlci5n
ZXQoKTsKKworICAgIEZpbGVDaG9vc2VyU2V0dGluZ3Mgc2V0dGluZ3MgPSByZXF1ZXN0LT5wcml2
LT5jaG9vc2VyLT5zZXR0aW5ncygpOworICAgIHNpemVfdCBudW1PZk1pbWVUeXBlcyA9IHNldHRp
bmdzLmFjY2VwdE1JTUVUeXBlcy5zaXplKCk7CisgICAgaWYgKCFudW1PZk1pbWVUeXBlcykKKyAg
ICAgICAgcmV0dXJuIDA7CisKKyAgICAvLyBEbyBub3QgdXNlIGFkb3B0R1JlZiBoZXJlLCBzaW5j
ZSB3ZSB3YW50IHRvIHNpbmsgdGhlIGZsb2F0aW5nCisgICAgLy8gcmVmZXJlbmNlIGZvciB0aGUg
bmV3IGluc3RhbmNlIG9mIEd0a0ZpbGVGaWx0ZXIsIHNvIHdlIG1ha2UKKyAgICAvLyBzdXJlIHdl
IGtlZXAgdGhlIG93bmVyc2hpcCBkdXJpbmcgdGhlIGxpZmV0aW1lIG9mIHRoZSByZXF1ZXN0Lgor
ICAgIHJlcXVlc3QtPnByaXYtPmZpbHRlciA9IGd0a19maWxlX2ZpbHRlcl9uZXcoKTsKKyAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IG51bU9mTWltZVR5cGVzOyArK2kpIHsKKyAgICAgICAgU3Ry
aW5nIG1pbWVUeXBlU3RyaW5nID0gc2V0dGluZ3MuYWNjZXB0TUlNRVR5cGVzW2ldOworICAgICAg
ICBpZiAobWltZVR5cGVTdHJpbmcuaXNFbXB0eSgpKQorICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgIGd0a19maWxlX2ZpbHRlcl9hZGRfbWltZV90eXBlKHJlcXVlc3QtPnByaXYtPmZpbHRl
ci5nZXQoKSwgbWltZVR5cGVTdHJpbmcudXRmOCgpLmRhdGEoKSk7CisgICAgfQorCisgICAgcmV0
dXJuIHJlcXVlc3QtPnByaXYtPmZpbHRlci5nZXQoKTsKK30KKworLyoqCisgKiB3ZWJraXRfZmls
ZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X3NlbGVjdF9tdWx0aXBsZToKKyAqIEByZXF1ZXN0OiBhICNX
ZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QKKyAqCisgKiBEZXRlcm1pbmUgd2hldGhlciB0aGUgZmls
ZSBjaG9vc2VyIGFzc29jaWF0ZWQgdG8gdGhpcworICogI1dlYktpdEZpbGVDaG9vc2VyUmVxdWVz
dCBzaG91bGQgYWxsb3cgc2VsZWN0aW5nIG11bHRpcGxlIGZpbGVzLAorICogd2hpY2ggZGVwZW5k
cyBvbiB0aGUgSFRNTCBpbnB1dCBlbGVtZW50IGhhdmluZyBhICdtdWx0aXBsZScKKyAqIGF0dHJp
YnV0ZSBkZWZpbmVkLgorICoKKyAqIFJldHVybnM6ICVUUlVFIGlmIHRoZSBmaWxlIGNob29zZXIg
c2hvdWxkIGFsbG93IHNlbGVjdGluZyBtdWx0aXBsZSBmaWxlcyBvciAlRkFMU0Ugb3RoZXJ3aXNl
LgorICovCitnYm9vbGVhbiB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X3NlbGVjdF9t
dWx0aXBsZShXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QqIHJlcXVlc3QpCit7CisgICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX0ZJTEVfQ0hPT1NFUl9SRVFVRVNUKHJlcXVlc3QpLCBG
QUxTRSk7CisgICAgcmV0dXJuIHJlcXVlc3QtPnByaXYtPmNob29zZXItPnNldHRpbmdzKCkuYWxs
b3dzTXVsdGlwbGVGaWxlczsKK30KKworLyoqCisgKiB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVl
c3Rfc2VsZWN0X2ZpbGVzOgorICogQHJlcXVlc3Q6IGEgI1dlYktpdEZpbGVDaG9vc2VyUmVxdWVz
dAorICogQGZpbGVzOiAoYXJyYXkgemVyby10ZXJtaW5hdGVkPTEpICh0cmFuc2ZlciBub25lKTog
YQorICogJU5VTEwtdGVybWluYXRlZCBhcnJheSBvZiBzdHJpbmdzLCBjb250YWluaW5nIHBhdGhz
IHRvIGxvY2FsIGZpbGVzLgorICoKKyAqIEFzayBXZWJLaXQgdG8gc2VsZWN0IGxvY2FsIGZpbGVz
IGZvciB1cGxvYWQgYW5kIGNvbXBsZXRlIHRoZQorICogcmVxdWVzdC4KKyAqLwordm9pZCB3ZWJr
aXRfZmlsZV9jaG9vc2VyX3JlcXVlc3Rfc2VsZWN0X2ZpbGVzKFdlYktpdEZpbGVDaG9vc2VyUmVx
dWVzdCogcmVxdWVzdCwgY29uc3QgZ2NoYXIqIGNvbnN0KiBmaWxlcykKK3sKKyAgICBnX3JldHVy
bl9pZl9mYWlsKFdFQktJVF9JU19GSUxFX0NIT09TRVJfUkVRVUVTVChyZXF1ZXN0KSk7CisgICAg
Z19yZXR1cm5faWZfZmFpbChmaWxlcyk7CisKKyAgICBWZWN0b3I8U3RyaW5nPiBuYW1lczsKKyAg
ICBHUmVmUHRyPEdQdHJBcnJheT4gc2VsZWN0ZWRGaWxlcyA9IGFkb3B0R1JlZihnX3B0cl9hcnJh
eV9uZXdfd2l0aF9mcmVlX2Z1bmMoZ19mcmVlKSk7CisKKyAgICBmb3IgKGludCBpID0gMDsgZmls
ZXNbaV07IGkrKykgeworICAgICAgICBuYW1lcy5hcHBlbmQoZmlsZW5hbWVUb1N0cmluZyhmaWxl
c1tpXSkpOworICAgICAgICBnX3B0cl9hcnJheV9hZGQoc2VsZWN0ZWRGaWxlcy5nZXQoKSwgZ19z
dHJkdXAoZmlsZXNbaV0pKTsKKyAgICB9CisKKyAgICBnX3B0cl9hcnJheV9hZGQoc2VsZWN0ZWRG
aWxlcy5nZXQoKSwgMCk7CisgICAgcmVxdWVzdC0+cHJpdi0+Y2hvb3Nlci0+Y2hvb3NlRmlsZXMo
bmFtZXMpOworICAgIHJlcXVlc3QtPnByaXYtPnNlbGVjdGVkRmlsZXMgPSBzZWxlY3RlZEZpbGVz
OworfQorCisvKioKKyAqIHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfc2VsZWN0ZWRf
ZmlsZXM6CisgKiBAcmVxdWVzdDogYSAjV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0CisgKgorICog
R2V0IHRoZSBsaXN0IG9mIHNlbGVjdGVkIGZpbGVzIGN1cnJlbnRseSBhc3NvY2lhdGVkIHRvIHRo
ZQorICogcmVxdWVzdC4gSW5pdGlhbGx5LCB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoaXMgbWV0aG9k
IGNvbnRhaW5zIGFueQorICogZmlsZXMgc2VsZWN0ZWQgaW4gcHJldmlvdXMgZmlsZSBjaG9vc2Vy
IHJlcXVlc3RzIGZvciB0aGlzIEhUTUwKKyAqIGlucHV0IGVsZW1lbnQuIE9uY2Ugd2Via2l0X2Zp
bGVfY2hvb3Nlcl9yZXF1ZXN0X3NlbGVjdF9maWxlcywgdGhlCisgKiB2YWx1ZSB3aWxsIHJlZmxl
Y3Qgd2hhdGV2ZXIgZmlsZXMgYXJlIGdpdmVuLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gc2hvdWxk
IG5vcm1hbGx5IGJlIGNhbGxlZCBvbmx5IGJlZm9yZSBwcmVzZW50aW5nIHRoZQorICogZmlsZSBj
aG9vc2VyIGRpYWxvZyB0byB0aGUgdXNlciwgdG8gZGVjaWRlIHdoZXRoZXIgdG8gcGVyZm9ybSBz
b21lCisgKiBleHRyYSBhY3Rpb24sIGxpa2UgcHJlLXNlbGVjdGluZyB0aGUgZmlsZXMgZnJvbSBh
IHByZXZpb3VzIHJlcXVlc3QuCisgKgorICogUmV0dXJuczogKGFycmF5IHplcm8tdGVybWluYXRl
ZD0xKSAodHJhbnNmZXIgbm9uZSk6IGEKKyAqICVOVUxMLXRlcm1pbmF0ZWQgYXJyYXkgb2Ygc3Ry
aW5ncyBpZiB0aGVyZSBhcmUgc2VsZWN0ZWQgZmlsZXMKKyAqIGFzc29jaWF0ZWQgd2l0aCB0aGUg
cmVxdWVzdCBvciAlTlVMTCBvdGhlcndpc2UuIFRoaXMgYXJyYXkgYW5kIGl0cworICogY29udGVu
dHMgYXJlIG93bmVkIGJ5IFdlYktpdEdUSysgYW5kIHNob3VsZCBub3QgYmUgbW9kaWZpZWQgb3IK
KyAqIGZyZWVkLgorICovCitjb25zdCBnY2hhciogY29uc3QqIHdlYmtpdF9maWxlX2Nob29zZXJf
cmVxdWVzdF9nZXRfc2VsZWN0ZWRfZmlsZXMoV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0KiByZXF1
ZXN0KQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19GSUxFX0NIT09TRVJf
UkVRVUVTVChyZXF1ZXN0KSwgMCk7CisgICAgaWYgKHJlcXVlc3QtPnByaXYtPnNlbGVjdGVkRmls
ZXMpCisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGdjaGFyKio+KHJlcXVlc3QtPnBy
aXYtPnNlbGVjdGVkRmlsZXMtPnBkYXRhKTsKKworICAgIEZpbGVDaG9vc2VyU2V0dGluZ3Mgc2V0
dGluZ3MgPSByZXF1ZXN0LT5wcml2LT5jaG9vc2VyLT5zZXR0aW5ncygpOworICAgIHNpemVfdCBu
dW1PZkZpbGVzID0gc2V0dGluZ3Muc2VsZWN0ZWRGaWxlcy5zaXplKCk7CisgICAgaWYgKCFudW1P
ZkZpbGVzKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJlcXVlc3QtPnByaXYtPnNlbGVjdGVk
RmlsZXMgPSBhZG9wdEdSZWYoZ19wdHJfYXJyYXlfbmV3X3dpdGhfZnJlZV9mdW5jKGdfZnJlZSkp
OworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtT2ZGaWxlczsgKytpKSB7CisgICAgICAg
IGlmIChzZXR0aW5ncy5zZWxlY3RlZEZpbGVzW2ldLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICBDU3RyaW5nIGZpbGVuYW1lID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0
aW9uKHNldHRpbmdzLnNlbGVjdGVkRmlsZXNbaV0pOworICAgICAgICBnX3B0cl9hcnJheV9hZGQo
cmVxdWVzdC0+cHJpdi0+c2VsZWN0ZWRGaWxlcy5nZXQoKSwgZ19zdHJkdXAoZmlsZW5hbWUuZGF0
YSgpKSk7CisgICAgfQorICAgIGdfcHRyX2FycmF5X2FkZChyZXF1ZXN0LT5wcml2LT5zZWxlY3Rl
ZEZpbGVzLmdldCgpLCAwKTsKKworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGdjaGFyKio+
KHJlcXVlc3QtPnByaXYtPnNlbGVjdGVkRmlsZXMtPnBkYXRhKTsKK30KSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRmaWxlY2hvb3NlcnJlcXVlc3QuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZmlsZWNob29zZXJyZXF1ZXN0LmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZmlsZWNob29zZXJy
ZXF1ZXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3MSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMiBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIHdlYmtpdGZpbGVjaG9vc2VycmVxdWVzdF9o
CisjZGVmaW5lIHdlYmtpdGZpbGVjaG9vc2VycmVxdWVzdF9oCisKKyNpbmNsdWRlIDxndGsvZ3Rr
Lmg+CisjaW5jbHVkZSA8d2Via2l0L3dlYmtpdGRlZmluZXMuaD4KKworR19CRUdJTl9ERUNMUwor
CisjZGVmaW5lIFdFQktJVF9UWVBFX0ZJTEVfQ0hPT1NFUl9SRVFVRVNUICAgICAgICAgICAgKHdl
YmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfRklM
RV9DSE9PU0VSX1JFUVVFU1Qob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0Vf
Q0FTVCgob2JqKSwgV0VCS0lUX1RZUEVfRklMRV9DSE9PU0VSX1JFUVVFU1QsIFdlYktpdEZpbGVD
aG9vc2VyUmVxdWVzdCkpCisjZGVmaW5lIFdFQktJVF9GSUxFX0NIT09TRVJfUkVRVUVTVF9DTEFT
UyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfVFlQ
RV9GSUxFX0NIT09TRVJfUkVRVUVTVCwgV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0Q2xhc3MpKQor
I2RlZmluZSBXRUJLSVRfSVNfRklMRV9DSE9PU0VSX1JFUVVFU1Qob2JqKSAgICAgICAgIChHX1RZ
UEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX1RZUEVfRklMRV9DSE9PU0VSX1JF
UVVFU1QpKQorI2RlZmluZSBXRUJLSVRfSVNfRklMRV9DSE9PU0VSX1JFUVVFU1RfQ0xBU1Moa2xh
c3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX1RZUEVfRklMRV9D
SE9PU0VSX1JFUVVFU1QpKQorI2RlZmluZSBXRUJLSVRfRklMRV9DSE9PU0VSX1JFUVVFU1RfR0VU
X0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX1RZ
UEVfRklMRV9DSE9PU0VSX1JFUVVFU1QsIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdENsYXNzKSkK
KwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCAgICAgICAgV2ViS2l0
RmlsZUNob29zZXJSZXF1ZXN0OwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdEZpbGVDaG9vc2VyUmVx
dWVzdENsYXNzICAgV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0Q2xhc3M7Cit0eXBlZGVmIHN0cnVj
dCBfV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0UHJpdmF0ZSBXZWJLaXRGaWxlQ2hvb3NlclJlcXVl
c3RQcml2YXRlOworCitzdHJ1Y3QgX1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCB7CisgICAgR09i
amVjdCBwYXJlbnQ7CisKKyAgICAvKjwgcHJpdmF0ZSA+Ki8KKyAgICBXZWJLaXRGaWxlQ2hvb3Nl
clJlcXVlc3RQcml2YXRlICpwcml2OworfTsKKworc3RydWN0IF9XZWJLaXRGaWxlQ2hvb3NlclJl
cXVlc3RDbGFzcyB7CisgICAgR09iamVjdENsYXNzIHBhcmVudF9jbGFzczsKK307CisKK1dFQktJ
VF9BUEkgR1R5cGUKK3dlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfdHlwZSAgICAgICAg
ICAgICAgICAgICh2b2lkKTsKKworV0VCS0lUX0FQSSBjb25zdCBnY2hhciAqIGNvbnN0ICoKK3dl
YmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfbWltZV90eXBlcyAgICAgICAgKFdlYktpdEZp
bGVDaG9vc2VyUmVxdWVzdCAqcmVxdWVzdCk7CisKK1dFQktJVF9BUEkgR3RrRmlsZUZpbHRlciAq
Cit3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X21pbWVfdHlwZXNfZmlsdGVyIChXZWJL
aXRGaWxlQ2hvb3NlclJlcXVlc3QgKnJlcXVlc3QpOworCitXRUJLSVRfQVBJIGdib29sZWFuCit3
ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X3NlbGVjdF9tdWx0aXBsZSAgIChXZWJLaXRG
aWxlQ2hvb3NlclJlcXVlc3QgKnJlcXVlc3QpOworCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9m
aWxlX2Nob29zZXJfcmVxdWVzdF9zZWxlY3RfZmlsZXMgICAgICAgICAgKFdlYktpdEZpbGVDaG9v
c2VyUmVxdWVzdCAqcmVxdWVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICogY29uc3QgICAgICAqZmlsZXMpOworCitXRUJL
SVRfQVBJIGNvbnN0IGdjaGFyICogY29uc3QgKgord2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0
X2dldF9zZWxlY3RlZF9maWxlcyAgICAoV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0ICpyZXF1ZXN0
KTsKKworR19FTkRfREVDTFMKKworI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViS2l0L2d0ay93ZWJr
aXQvd2Via2l0ZmlsZWNob29zZXJyZXF1ZXN0cHJpdmF0ZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRmaWxlY2hvb3NlcnJlcXVlc3Rwcml2YXRlLmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZmlsZWNob29zZXJy
ZXF1ZXN0cHJpdmF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzAgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiB3ZWJraXRmaWxlY2hvb3NlcnJl
cXVlc3Rwcml2YXRlX2gKKyNkZWZpbmUgd2Via2l0ZmlsZWNob29zZXJyZXF1ZXN0cHJpdmF0ZV9o
CisKKyNpbmNsdWRlICJGaWxlQ2hvb3Nlci5oIgorI2luY2x1ZGUgIndlYmtpdGZpbGVjaG9vc2Vy
cmVxdWVzdC5oIgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworV2ViS2l0RmlsZUNob29z
ZXJSZXF1ZXN0KiB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfY3JlYXRlKFBhc3NSZWZQdHI8
RmlsZUNob29zZXI+IGNob29zZXIpOworCisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJLaXQvZ3Rr
L3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2d0
ay93ZWJraXQvd2Via2l0d2Vidmlldy5jcHAJKHJldmlzaW9uIDExODgzOCkKKysrIFNvdXJjZS9X
ZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIx
LDYgKzIyMSw3IEBAIGVudW0gewogICAgIEVOVEVSSU5HX0ZVTExTQ1JFRU4sCiAgICAgTEVBVklO
R19GVUxMU0NSRUVOLAogICAgIENPTlRFWFRfTUVOVSwKKyAgICBSVU5fRklMRV9DSE9PU0VSLAog
CiAgICAgTEFTVF9TSUdOQUwKIH07CkBAIC0xMjk5LDYgKzEzMDAsNDggQEAgc3RhdGljIGdib29s
ZWFuIHdlYmtpdF93ZWJfdmlld19yZWFsX2xlYQogICAgIHJldHVybiBGQUxTRTsKIH0KIAorc3Rh
dGljIHZvaWQgZmlsZUNob29zZXJEaWFsb2dSZXNwb25zZUNhbGxiYWNrKEd0a0RpYWxvZyogZGlh
bG9nLCBnaW50IHJlc3BvbnNlSUQsIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCogcmVxdWVzdCkK
K3sKKyAgICBHUmVmUHRyPFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdD4gYWRvcHRlZFJlcXVlc3Qg
PSBhZG9wdEdSZWYocmVxdWVzdCk7CisgICAgaWYgKHJlc3BvbnNlSUQgPT0gR1RLX1JFU1BPTlNF
X0FDQ0VQVCkgeworICAgICAgICBHT3duUHRyPEdTTGlzdD4gZmlsZXNMaXN0KGd0a19maWxlX2No
b29zZXJfZ2V0X2ZpbGVuYW1lcyhHVEtfRklMRV9DSE9PU0VSKGRpYWxvZykpKTsKKyAgICAgICAg
R1JlZlB0cjxHUHRyQXJyYXk+IGZpbGVzQXJyYXkgPSBhZG9wdEdSZWYoZ19wdHJfYXJyYXlfbmV3
KCkpOworICAgICAgICBmb3IgKEdTTGlzdCogZmlsZSA9IGZpbGVzTGlzdC5nZXQoKTsgZmlsZTsg
ZmlsZSA9IGdfc2xpc3RfbmV4dChmaWxlKSkKKyAgICAgICAgICAgIGdfcHRyX2FycmF5X2FkZChm
aWxlc0FycmF5LmdldCgpLCBmaWxlLT5kYXRhKTsKKyAgICAgICAgZ19wdHJfYXJyYXlfYWRkKGZp
bGVzQXJyYXkuZ2V0KCksIDApOworICAgICAgICB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3Rf
c2VsZWN0X2ZpbGVzKGFkb3B0ZWRSZXF1ZXN0LmdldCgpLCByZWludGVycHJldF9jYXN0PGNvbnN0
IGdjaGFyKiBjb25zdCo+KGZpbGVzQXJyYXktPnBkYXRhKSk7CisgICAgfQorCisgICAgZ3RrX3dp
ZGdldF9kZXN0cm95KEdUS19XSURHRVQoZGlhbG9nKSk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3
ZWJraXRfd2ViX3ZpZXdfcmVhbF9ydW5fZmlsZV9jaG9vc2VyKFdlYktpdFdlYlZpZXcqIHdlYlZp
ZXcsIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCogcmVxdWVzdCkKK3sKKyAgICBHdGtXaWRnZXQq
IHRvcGxldmVsID0gZ3RrX3dpZGdldF9nZXRfdG9wbGV2ZWwoR1RLX1dJREdFVCh3ZWJWaWV3KSk7
CisgICAgaWYgKCF3aWRnZXRJc09uc2NyZWVuVG9wbGV2ZWxXaW5kb3codG9wbGV2ZWwpKQorICAg
ICAgICB0b3BsZXZlbCA9IDA7CisKKyAgICBnYm9vbGVhbiBhbGxvd3NNdWx0aXBsZVNlbGVjdGlv
biA9IHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfc2VsZWN0X211bHRpcGxlKHJlcXVl
c3QpOworICAgIEd0a1dpZGdldCogZGlhbG9nID0gZ3RrX2ZpbGVfY2hvb3Nlcl9kaWFsb2dfbmV3
KGFsbG93c011bHRpcGxlU2VsZWN0aW9uID8gXygiU2VsZWN0IEZpbGVzIikgOiBfKCJTZWxlY3Qg
RmlsZSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRvcGxldmVsID8gR1RLX1dJTkRPVyh0b3BsZXZlbCkgOiAwLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdUS19GSUxFX0NIT09TRVJfQUNU
SU9OX09QRU4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgR1RLX1NUT0NLX0NBTkNFTCwgR1RLX1JFU1BPTlNFX0NBTkNFTCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHVEtfU1RPQ0tfT1BFTiwg
R1RLX1JFU1BPTlNFX0FDQ0VQVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBOVUxMKTsKKworICAgIGlmIChHdGtGaWxlRmlsdGVyKiBmaWx0ZXIg
PSB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X21pbWVfdHlwZXNfZmlsdGVyKHJlcXVl
c3QpKQorICAgICAgICBndGtfZmlsZV9jaG9vc2VyX3NldF9maWx0ZXIoR1RLX0ZJTEVfQ0hPT1NF
UihkaWFsb2cpLCBmaWx0ZXIpOworICAgIGd0a19maWxlX2Nob29zZXJfc2V0X3NlbGVjdF9tdWx0
aXBsZShHVEtfRklMRV9DSE9PU0VSKGRpYWxvZyksIGFsbG93c011bHRpcGxlU2VsZWN0aW9uKTsK
KworICAgIGlmIChjb25zdCBnY2hhciogY29uc3QqIHNlbGVjdGVkRmlsZXMgPSB3ZWJraXRfZmls
ZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X3NlbGVjdGVkX2ZpbGVzKHJlcXVlc3QpKQorICAgICAgICBn
dGtfZmlsZV9jaG9vc2VyX3NlbGVjdF9maWxlbmFtZShHVEtfRklMRV9DSE9PU0VSKGRpYWxvZyks
IHNlbGVjdGVkRmlsZXNbMF0pOworCisgICAgZ19zaWduYWxfY29ubmVjdChkaWFsb2csICJyZXNw
b25zZSIsIEdfQ0FMTEJBQ0soZmlsZUNob29zZXJEaWFsb2dSZXNwb25zZUNhbGxiYWNrKSwgZ19v
YmplY3RfcmVmKHJlcXVlc3QpKTsKKyAgICBndGtfd2lkZ2V0X3Nob3coZGlhbG9nKTsKKworICAg
IHJldHVybiBUUlVFOworfQorCiBzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfZGlzcG9zZShH
T2JqZWN0KiBvYmplY3QpCiB7CiAgICAgV2ViS2l0V2ViVmlldyogd2ViVmlldyA9IFdFQktJVF9X
RUJfVklFVyhvYmplY3QpOwpAQCAtMjU1Miw2ICsyNTk1LDM3IEBAIHN0YXRpYyB2b2lkIHdlYmtp
dF93ZWJfdmlld19jbGFzc19pbml0KFcKICAgICAgICAgICAgIEdfVFlQRV9OT05FLCAxLAogICAg
ICAgICAgICAgV0VCS0lUX1RZUEVfV0VCX0ZSQU1FKTsKIAorICAgICAvKioKKyAgICAgKiBXZWJL
aXRXZWJWaWV3OjpydW4tZmlsZS1jaG9vc2VyOgorICAgICAqIEB3ZWJfdmlldzogdGhlICNXZWJL
aXRXZWJWaWV3IG9uIHdoaWNoIHRoZSBzaWduYWwgaXMgZW1pdHRlZAorICAgICAqIEByZXF1ZXN0
OiBhICNXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QKKyAgICAgKgorICAgICAqIFRoaXMgc2lnbmFs
IGlzIGVtaXR0ZWQgd2hlbiB0aGUgdXNlciBpbnRlcmFjdHMgd2l0aCBhICZsdDtpbnB1dAorICAg
ICAqIHR5cGU9J2ZpbGUnIC8mZ3Q7IEhUTUwgZWxlbWVudCwgcmVxdWVzdGluZyBmcm9tIFdlYktp
dCB0byBzaG93CisgICAgICogYSBkaWFsb2cgdG8gc2VsZWN0IG9uZSBvciBtb3JlIGZpbGVzIHRv
IGJlIHVwbG9hZGVkLiBUbyBsZXQgdGhlCisgICAgICogYXBwbGljYXRpb24ga25vdyB0aGUgZGV0
YWlscyBvZiB0aGUgZmlsZSBjaG9vc2VyLCBhcyB3ZWxsIGFzIHRvCisgICAgICogYWxsb3cgdGhl
IGNsaWVudCBhcHBsaWNhdGlvbiB0byBlaXRoZXIgY2FuY2VsIHRoZSByZXF1ZXN0IG9yCisgICAg
ICogcGVyZm9ybSBhbiBhY3R1YWwgc2VsZWN0aW9uIG9mIGZpbGVzLCB0aGUgc2lnbmFsIHdpbGwg
cGFzcyBhbgorICAgICAqIGluc3RhbmNlIG9mIHRoZSAjV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0
IGluIHRoZSBAcmVxdWVzdAorICAgICAqIGFyZ3VtZW50LgorICAgICAqCisgICAgICogVGhlIGRl
ZmF1bHQgc2lnbmFsIGhhbmRsZXIgd2lsbCBhc3luY2hyb25vdXNseSBydW4gYSByZWd1bGFyCisg
ICAgICogI0d0a0ZpbGVDaG9vc2VyRGlhbG9nIGZvciB0aGUgdXNlciB0byBpbnRlcmFjdCB3aXRo
LgorICAgICAqCisgICAgICogUmV0dXJuczogJVRSVUUgdG8gc3RvcCBvdGhlciBoYW5kbGVycyBm
cm9tIGJlaW5nIGludm9rZWQgZm9yIHRoZSBldmVudC4KKyAgICAgKiAgICVGQUxTRSB0byBwcm9w
YWdhdGUgdGhlIGV2ZW50IGZ1cnRoZXIuCisgICAgICoKKyAgICAgKi8KKyAgICB3ZWJraXRfd2Vi
X3ZpZXdfc2lnbmFsc1tSVU5fRklMRV9DSE9PU0VSXSA9CisgICAgICAgIGdfc2lnbmFsX25ldygi
cnVuLWZpbGUtY2hvb3NlciIsCisgICAgICAgICAgICAgICAgICAgICBHX1RZUEVfRlJPTV9DTEFT
Uyh3ZWJWaWV3Q2xhc3MpLAorICAgICAgICAgICAgICAgICAgICAgR19TSUdOQUxfUlVOX0xBU1Qs
CisgICAgICAgICAgICAgICAgICAgICBHX1NUUlVDVF9PRkZTRVQoV2ViS2l0V2ViVmlld0NsYXNz
LCBydW5fZmlsZV9jaG9vc2VyKSwKKyAgICAgICAgICAgICAgICAgICAgIGdfc2lnbmFsX2FjY3Vt
dWxhdG9yX3RydWVfaGFuZGxlZCwgMCAvKiBhY2N1bXVsYXRvciBkYXRhICovLAorICAgICAgICAg
ICAgICAgICAgICAgd2Via2l0X21hcnNoYWxfQk9PTEVBTl9fT0JKRUNULAorICAgICAgICAgICAg
ICAgICAgICAgR19UWVBFX0JPT0xFQU4sIDEsIC8qIG51bWJlciBvZiBwYXJhbWV0ZXJzICovCisg
ICAgICAgICAgICAgICAgICAgICBXRUJLSVRfVFlQRV9GSUxFX0NIT09TRVJfUkVRVUVTVCk7CisK
ICAgICB3ZWJraXRfd2ViX3ZpZXdfc2lnbmFsc1tTSE9VTERfQkVHSU5fRURJVElOR10gPSBnX3Np
Z25hbF9uZXcoInNob3VsZC1iZWdpbi1lZGl0aW5nIiwKICAgICAgICAgR19UWVBFX0ZST01fQ0xB
U1Mod2ViVmlld0NsYXNzKSwgc3RhdGljX2Nhc3Q8R1NpZ25hbEZsYWdzPihHX1NJR05BTF9SVU5f
TEFTVCB8IEdfU0lHTkFMX0FDVElPTiksCiAgICAgICAgIEdfU1RSVUNUX09GRlNFVChXZWJLaXRX
ZWJWaWV3Q2xhc3MsIHNob3VsZF9hbGxvd19lZGl0aW5nX2FjdGlvbiksIGdfc2lnbmFsX2FjY3Vt
dWxhdG9yX2ZpcnN0X3dpbnMsIDAsCkBAIC0yODYxLDYgKzI5MzUsNyBAQCBzdGF0aWMgdm9pZCB3
ZWJraXRfd2ViX3ZpZXdfY2xhc3NfaW5pdChXCiAgICAgd2ViVmlld0NsYXNzLT5zaG91bGRfYWxs
b3dfZWRpdGluZ19hY3Rpb24gPSB3ZWJraXRfd2ViX3ZpZXdfcmVhbF9zaG91bGRfYWxsb3dfZWRp
dGluZ19hY3Rpb247CiAgICAgd2ViVmlld0NsYXNzLT5lbnRlcmluZ19mdWxsc2NyZWVuID0gd2Vi
a2l0X3dlYl92aWV3X3JlYWxfZW50ZXJpbmdfZnVsbHNjcmVlbjsKICAgICB3ZWJWaWV3Q2xhc3Mt
PmxlYXZpbmdfZnVsbHNjcmVlbiA9IHdlYmtpdF93ZWJfdmlld19yZWFsX2xlYXZpbmdfZnVsbHNj
cmVlbjsKKyAgICB3ZWJWaWV3Q2xhc3MtPnJ1bl9maWxlX2Nob29zZXIgPSB3ZWJraXRfd2ViX3Zp
ZXdfcmVhbF9ydW5fZmlsZV9jaG9vc2VyOwogCiAgICAgR09iamVjdENsYXNzKiBvYmplY3RDbGFz
cyA9IEdfT0JKRUNUX0NMQVNTKHdlYlZpZXdDbGFzcyk7CiAgICAgb2JqZWN0Q2xhc3MtPmRpc3Bv
c2UgPSB3ZWJraXRfd2ViX3ZpZXdfZGlzcG9zZTsKQEAgLTM2MTQsNiArMzY4OSwxMiBAQCBHdGtX
aWRnZXQqIHdlYmtpdF93ZWJfdmlld19uZXcodm9pZCkKICAgICByZXR1cm4gR1RLX1dJREdFVCh3
ZWJWaWV3KTsKIH0KIAordm9pZCB3ZWJraXRfd2ViX3ZpZXdfcnVuX2ZpbGVfY2hvb3Nlcl9yZXF1
ZXN0KFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCogcmVx
dWVzdCkKK3sKKyAgICBnYm9vbGVhbiByZXR1cm5WYWx1ZTsKKyAgICBnX3NpZ25hbF9lbWl0KHdl
YlZpZXcsIHdlYmtpdF93ZWJfdmlld19zaWduYWxzW1JVTl9GSUxFX0NIT09TRVJdLCAwLCByZXF1
ZXN0LCAmcmV0dXJuVmFsdWUpOworfQorCiAvLyBmb3IgaW50ZXJuYWwgdXNlIG9ubHkKIHZvaWQg
d2Via2l0X3dlYl92aWV3X25vdGlmeV9yZWFkeShXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQogewpJ
bmRleDogU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5oCShyZXZpc2lvbiAx
MTg4MzgpCisrKyBTb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpbmNsdWRlIDx3ZWJraXQvd2Via2l0ZGVm
aW5lcy5oPgogI2luY2x1ZGUgPHdlYmtpdC93ZWJraXRkb20uaD4KKyNpbmNsdWRlIDx3ZWJraXQv
d2Via2l0ZmlsZWNob29zZXJyZXF1ZXN0Lmg+CiAjaW5jbHVkZSA8d2Via2l0L3dlYmtpdHdlYmJh
Y2tmb3J3YXJkbGlzdC5oPgogI2luY2x1ZGUgPHdlYmtpdC93ZWJraXR3ZWJmcmFtZS5oPgogI2lu
Y2x1ZGUgPHdlYmtpdC93ZWJraXR3ZWJoaXN0b3J5aXRlbS5oPgpAQCAtMTY1LDYgKzE2Niw4IEBA
IHN0cnVjdCBfV2ViS2l0V2ViVmlld0NsYXNzIHsKICAgICBnYm9vbGVhbiAgICAgICAgICAgICAg
ICAgICAoKiBtb3ZlX2N1cnNvcikgICAgICAgICAgICAoV2ViS2l0V2ViVmlldyAgICAgICAgKndl
Yl92aWV3LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBHdGtNb3ZlbWVudFN0ZXAgICAgICAgc3RlcCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludCAgICAgICAgICAg
ICAgICAgIGNvdW50KTsKKyAgICBnYm9vbGVhbiAgICAgICAgICAgICAgICAgICAoKiBydW5fZmls
ZV9jaG9vc2VyKSAgICAgICAoV2ViS2l0V2ViVmlldyAgICAgICAgICAgICp3ZWJfdmlldywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
V2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0ICpyZXF1ZXN0KTsKIAogICAgIC8qCiAgICAgICogaW50
ZXJuYWwKSW5kZXg6IFNvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3cHJpdmF0
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3
cHJpdmF0ZS5oCShyZXZpc2lvbiAxMTg4MzgpCisrKyBTb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQv
d2Via2l0d2Vidmlld3ByaXZhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTI0LDYgKzEyNCw4IEBA
IEd0a01lbnUqIHdlYmtpdF93ZWJfdmlld19nZXRfY29udGV4dF9tZW4KIHZvaWQgd2ViVmlld0Vu
dGVyRnVsbHNjcmVlbihXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBXZWJDb3JlOjpOb2RlKik7CiB2
b2lkIHdlYlZpZXdFeGl0RnVsbHNjcmVlbihXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KTsKIAordm9p
ZCB3ZWJraXRfd2ViX3ZpZXdfcnVuX2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0KFdlYktpdFdlYlZpZXcq
LCBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QqKTsKKwogI2lmIEVOQUJMRShJQ09OREFUQUJBU0Up
CiB2b2lkIHdlYmtpdFdlYlZpZXdSZWdpc3RlckZvckljb25Ob3RpZmljYXRpb24oV2ViS2l0V2Vi
VmlldyosIGJvb2wgc2hvdWxkUmVnaXN0ZXIpOwogdm9pZCB3ZWJraXRXZWJWaWV3SWNvbkxvYWRl
ZChXZWJLaXRGYXZpY29uRGF0YWJhc2UqLCBjb25zdCBjaGFyKiBmcmFtZVVSSSwgV2ViS2l0V2Vi
VmlldyopOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>146762</attachid>
            <date>2012-06-10 18:29:18 -0700</date>
            <delta_ts>2012-06-13 18:55:00 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-87283-20120610212917.patch</filename>
            <type>text/plain</type>
            <size>46803</size>
            <attacher name="Daniel Drake">dsd</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L2d0ay9DaGFuZ2VMb2cJKHJldmlzaW9uIDExOTk0NikKKysrIFNvdXJjZS9XZWJLaXQv
Z3RrL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDgzIEBACisyMDEyLTA2LTEw
ICBEYW5pZWwgRHJha2UgIDxkc2RAbGFwdG9wLm9yZz4KKworICAgICAgICBbR1RLXSBCYWNrcG9y
dCBydW4tZmlsZS1jaG9vc2VyIHRvIFdlYktpdDEKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTg3MjgzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgVGhpcyBpcyBhIHJlbGF0aXZlbHkgc3RyYWlnaHRmb3J3YXJk
IGJhY2twb3J0IG9mIE1hcmlvIFNhbmNoZXoKK3JhZGEncworICAgICAgICBXZWJLaXQyIHJ1bi1m
aWxlLWNob29zZXIgc2lnbmFsIHdvcmssIGludGVuZGVkIGZvciB1c2UgYnkgT0xQQyBhbmQKKyAg
ICAgICAgb3RoZXJzIHdobyBhcmUgbm90IHF1aXRlIHJlYWR5IHRvIG1vdmUgdG8gV2ViS2l0Mi4K
KworICAgICAgICBBZGQgYSBuZXcgcHVibGljIGNsYXNzIHRvIHRoZSBBUEksIFdlYktpdEZpbGVD
aG9vc2VyUmVxdWVzdCwgdG8gYmUKKyAgICAgICAgZW1pdHRlZCBhbG9uZyB3aXRoIGEgbmV3IFdl
YktpdFdlYlZpZXc6OnJ1bi1maWxlLWNob29zZXIgc2lnbmFsIHRvCisgICAgICAgIGxldCBjbGll
bnQgYXBwbGljYXRpb25zIHRvIHByb3ZpZGUgdGhlaXIgb3duIGZpbGUgY2hvb3NlciBkaWFsb2cK
KyAgICAgICAgd2hlbiB0aGUgdXNlIGludGVyYWN0cyB3aXRoIEhUTUwgSW5wdXQgZWxlbWVudHMg
b2YgdHlwZSAnZmlsZScuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbTogQWRkZWQgbmV3IHNv
dXJjZSBmaWxlcyBhbmQgaGVhZGVycy4KKyAgICAgICAgKiB3ZWJraXQvd2Via2l0ZmlsZWNob29z
ZXJyZXF1ZXN0LmNwcDogQWRkZWQuCisgICAgICAgIChfV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0
UHJpdmF0ZSk6CisgICAgICAgICh3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfaW5pdCk6Cisg
ICAgICAgICh3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZmluYWxpemUpOgorICAgICAgICAo
d2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9wcm9wZXJ0eSk6CisgICAgICAgICh3ZWJr
aXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfY2xhc3NfaW5pdCk6CisgICAgICAgICh3ZWJraXRfZmls
ZV9jaG9vc2VyX3JlcXVlc3RfY3JlYXRlKToKKyAgICAgICAgKHdlYmtpdF9maWxlX2Nob29zZXJf
cmVxdWVzdF9nZXRfbWltZV90eXBlcyk6CisgICAgICAgICh3ZWJraXRfZmlsZV9jaG9vc2VyX3Jl
cXVlc3RfZ2V0X21pbWVfdHlwZXNfZmlsdGVyKToKKyAgICAgICAgKHdlYmtpdF9maWxlX2Nob29z
ZXJfcmVxdWVzdF9nZXRfc2VsZWN0X211bHRpcGxlKToKKyAgICAgICAgKHdlYmtpdF9maWxlX2No
b29zZXJfcmVxdWVzdF9zZWxlY3RfZmlsZXMpOgorICAgICAgICAod2Via2l0X2ZpbGVfY2hvb3Nl
cl9yZXF1ZXN0X2dldF9zZWxlY3RlZF9maWxlcyk6CisgICAgICAgICogd2Via2l0L3dlYmtpdGZp
bGVjaG9vc2VycmVxdWVzdC5oOiBBZGRlZC4KKyAgICAgICAgKF9XZWJLaXRGaWxlQ2hvb3NlclJl
cXVlc3QpOgorICAgICAgICAoX1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdENsYXNzKToKKyAgICAg
ICAgKiB3ZWJraXQvd2Via2l0ZmlsZWNob29zZXJyZXF1ZXN0cHJpdmF0ZS5oOiBBZGRlZCwgCisg
ICAgICAgIGNvbnRhaW5pbmcgdGhlIHByb3RvdHlwZSBvZiB3ZWJraXRfZmlsZV9jaG9vc2VyX3Jl
cXVlc3RfY3JlYXRlLgorCisgICAgICAgIFByb3ZpZGUgcHJpdmF0ZSBBUEkgdG8gbWFrZSBhIGZp
bGUgY2hvb3NlciByZXF1ZXN0IGZyb20gdGhlCisgICAgICAgIFdlYlZpZXcsIGFuZCBwcm92aWRl
IGEgZGVmYXVsdCBoYW5kbGVyIGZvciBpdC4KKworICAgICAgICAqIHdlYmtpdC93ZWJraXR3ZWJ2
aWV3LmNwcDoKKyAgICAgICAgKGZpbGVDaG9vc2VyRGlhbG9nUmVzcG9uc2VDYWxsYmFjayk6IEhh
bmRsZXIgZm9yIHRoZSAncmVzcG9uc2UnCisgICAgICAgIHNpZ25hbCBmb3IgdGhlIEd0a0ZpbGVD
aG9vc2VyRGlhbG9nIHVzZWQgaW4gdGhlIGRlZmF1bHQKKyAgICAgICAgaGFuZGxlci4gSXQgd2ls
bCBjYWxsIHRvIHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9zZWxlY3RfZmlsZXMKKyAgICAg
ICAgb3Igd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2NhbmNlbCBhcyBuZWVkZWQuCisgICAg
ICAgICh3ZWJraXRXZWJWaWV3UmVhbFJ1bkZpbGVDaG9vc2VyKTogRGVmYXVsdCBoYW5kbGVyIGZv
ciB0aGUgbmV3CisgICAgICAgICdydW4tZmlsZS1jaG9vc2VyJyBzaWduYWwuIEl0IHdpbGwgY3Jl
YXRlIGEgR3RrRmlsZUNob29zZXJEaWFsb2csCisgICAgICAgIGNvbm5lY3QgdG8gdGhlICdyZXNw
b25zZScgc2lnbmFsIGFuZCBzaG93IGl0LgorICAgICAgICAod2Via2l0X3dlYl92aWV3X2NsYXNz
X2luaXQpOiBDb25uZWN0IHRoZSAncnVuLWZpbGUtY2hvb3NlcicKKyAgICAgICAgc2lnbmFsIHRv
IHRoZSBkZWZhdWx0IGhhbmRsZXIsIHdlYmtpdFdlYlZpZXdSdW5GaWxlQ2hvb3Nlci4KKyAgICAg
ICAgKHdlYmtpdF93ZWJfdmlld19uZXcpOgorICAgICAgICAod2Via2l0X3dlYl92aWV3X3J1bl9m
aWxlX2Nob29zZXJfcmVxdWVzdCk6CisgICAgICAgICogd2Via2l0L3dlYmtpdHdlYnZpZXcuaDoK
KyAgICAgICAgKF9XZWJLaXRXZWJWaWV3Q2xhc3MpOiBBZGRlZCBwcm90b3R5cGUgZm9yIHRoZSBo
YW5kbGVyIG9mIHRoZSBuZXcKKyAgICAgICAgJ3J1bi1maWxlLWNob29zZXInIHNpZ25hbC4KKyAg
ICAgICAgKiB3ZWJraXQvd2Via2l0d2Vidmlld3ByaXZhdGUuaDogQWRkZWQgcHJvdG90eXBlIGZv
cgorICAgICAgICBwcml2YXRlIG5ldyBmdW5jdGlvbiB3ZWJraXRXZWJWaWV3UnVuRmlsZUNob29z
ZXJSZXF1ZXN0LgorCisgICAgICAgIFVwZGF0ZSBydW5PcGVuUGFuZWwgdG8gdXNlIHRoZSBuZXcg
QVBJLCBpbmNsdWRpbmcgYSBkZWZhdWx0IGhhbmRsZXIKKyAgICAgICAgd2l0aCBzaW1pbGFyIGJl
aGF2aW91ciB0byBiZWZvcmUuCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGll
bnRHdGsuY3BwOgorICAgICAgICAoV2ViS2l0OjpDaHJvbWVDbGllbnQ6OnJ1bk9wZW5QYW5lbCk6
IE5vdyBjcmVhdGVzIGFuIGluc3RhbmNlIG9mCisgICAgICAgIFdlYktpdEZpbGVDaG9vc2VyUmVx
dWVzdCBhbmQgYXNrcyB0aGUgV2ViVmlldyB0byBlbWl0IHRoZQorICAgICAgICBuZXcgJ3J1bi1m
aWxlLWNob29zZXInIHNpZ25hbCB3aXRoIGl0LgorCisgICAgICAgIEFkZGVkIHRoZSBuZXcgcHVi
bGljIGhlYWRlciB0byB0aGUgbWFpbiBoZWFkZXIuCisKKyAgICAgICAgKiB3ZWJraXQvd2Via2l0
Lmg6IEFkZGVkIHdlYmtpdGZpbGVjaG9vc2VycmVxdWVzdC5oCisKKyAgICAgICAgTmV3IHVuaXQg
dGVzdHMgZm9yIHRoZSBuZXcgV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0IEFQSS4KKworICAgICAg
ICAqIHRlc3RzL3Rlc3R3ZWJ2aWV3LmM6IFZhcmlvdXMgV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0
IHRlc3RzLAorICAgICAgICBpbmNsdWRpbmcgTUlNRSB0eXBlIGZpbHRlcmluZyBhbmQgc2VsZWN0
aW9uIGhhbmRsaW5nLgorCisgICAgICAgIFVwZGF0ZWQgZG9jdW1lbnRhdGlvbiByZWxhdGVkIGZp
bGVzIHdpdGggdGhlIG5ldyBBUEkuCisKKyAgICAgICAgKiBkb2NzL3dlYmtpdGd0ay1kb2NzLnNn
bWw6IEFkZGVkIG5ldyBzZWN0aW9uLgorICAgICAgICAqIGRvY3Mvd2Via2l0Z3RrLXNlY3Rpb25z
LnR4dDogQWRkZWQgbmV3IEFQSS4KKyAgICAgICAgKiBkb2NzL3dlYmtpdGd0ay50eXBlczogQWRk
ZWQgZ2V0X3R5cGUgZnVuY3Rpb24uCisKIDIwMTItMDYtMDcgIFNpbW9uIFBlbmEgIDxzcGVuYUBp
Z2FsaWEuY29tPgogCiAgICAgICAgIFtHVEtdIGRldmljZVNjYWxlRmFjdG9yIHNldHRpbmcgaXMg
bm90IGhvbm9yZWQKSW5kZXg6IFNvdXJjZS9XZWJLaXQvZ3RrL0dOVW1ha2VmaWxlLmFtCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvZ3RrL0dOVW1ha2VmaWxlLmFtCShyZXZpc2lvbiAxMTk5
NDYpCisrKyBTb3VyY2UvV2ViS2l0L2d0ay9HTlVtYWtlZmlsZS5hbQkod29ya2luZyBjb3B5KQpA
QCAtMTE0LDYgKzExNCw3IEBAIHdlYmtpdGd0a19zdGF0aWNfaF9hcGkgKz0gXAogCSQoc3JjZGly
KS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZG93bmxvYWQuaCBcCiAJJChzcmNkaXIp
L1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRlcnJvci5oIFwKIAkkKHNyY2RpcikvU291
cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGZhdmljb25kYXRhYmFzZS5oIFwKKwkkKHNyY2Rp
cikvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGZpbGVjaG9vc2VycmVxdWVzdC5oIFwK
IAkkKHNyY2RpcikvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGdlb2xvY2F0aW9ucG9s
aWN5ZGVjaXNpb24uaCBcCiAJJChzcmNkaXIpL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJr
aXRnbG9iYWxzLmggXAogCSQoc3JjZGlyKS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0
aGl0dGVzdHJlc3VsdC5oIFwKQEAgLTIyMCw2ICsyMjEsOSBAQCB3ZWJraXRndGtfc291cmNlcyAr
PSBcCiAJU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGVycm9yLmNwcCBcCiAJU291cmNl
L1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGZhdmljb25kYXRhYmFzZS5jcHAgXAogCVNvdXJjZS9X
ZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRmYXZpY29uZGF0YWJhc2Vwcml2YXRlLmggXAorCVNvdXJj
ZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRmaWxlY2hvb3NlcnJlcXVlc3QuY3BwIFwKKwlTb3Vy
Y2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZmlsZWNob29zZXJyZXF1ZXN0LmggXAorCVNvdXJj
ZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRmaWxlY2hvb3NlcnJlcXVlc3Rwcml2YXRlLmggXAog
CVNvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRnZW9sb2NhdGlvbnBvbGljeWRlY2lzaW9u
LmNwcCBcCiAJU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGdlb2xvY2F0aW9ucG9saWN5
ZGVjaXNpb25wcml2YXRlLmggXAogCVNvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRnbG9i
YWxzLmNwcCBcCkluZGV4OiBTb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9DaHJvbWVD
bGllbnRHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBw
b3J0L0Nocm9tZUNsaWVudEd0ay5jcHAJKHJldmlzaW9uIDExOTk0NikKKysrIFNvdXJjZS9XZWJL
aXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0ay5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTU1LDYgKzU1LDcgQEAKICNpbmNsdWRlICJXZWJLaXRET01CaW5kaW5nLmgiCiAjaW5jbHVk
ZSAiV2ViS2l0RE9NSFRNTEVsZW1lbnRQcml2YXRlLmgiCiAjaW5jbHVkZSAiV2luZG93RmVhdHVy
ZXMuaCIKKyNpbmNsdWRlICJ3ZWJraXRmaWxlY2hvb3NlcnJlcXVlc3Rwcml2YXRlLmgiCiAjaW5j
bHVkZSAid2Via2l0Z2VvbG9jYXRpb25wb2xpY3lkZWNpc2lvbi5oIgogI2luY2x1ZGUgIndlYmtp
dGdlb2xvY2F0aW9ucG9saWN5ZGVjaXNpb25wcml2YXRlLmgiCiAjaW5jbHVkZSAid2Via2l0bmV0
d29ya3JlcXVlc3QuaCIKQEAgLTgxNSw0MCArODE2LDggQEAgdm9pZCBDaHJvbWVDbGllbnQ6OnJl
YWNoZWRBcHBsaWNhdGlvbkNhYwogCiB2b2lkIENocm9tZUNsaWVudDo6cnVuT3BlblBhbmVsKEZy
YW1lKiwgUGFzc1JlZlB0cjxGaWxlQ2hvb3Nlcj4gcHJwRmlsZUNob29zZXIpCiB7Ci0gICAgUmVm
UHRyPEZpbGVDaG9vc2VyPiBjaG9vc2VyID0gcHJwRmlsZUNob29zZXI7Ci0KLSAgICBHdGtXaWRn
ZXQqIHRvcGxldmVsID0gZ3RrX3dpZGdldF9nZXRfdG9wbGV2ZWwoR1RLX1dJREdFVChtX3dlYlZp
ZXcpKTsKLSAgICBpZiAoIXdpZGdldElzT25zY3JlZW5Ub3BsZXZlbFdpbmRvdyh0b3BsZXZlbCkp
Ci0gICAgICAgIHRvcGxldmVsID0gMDsKLQotICAgIEd0a1dpZGdldCogZGlhbG9nID0gZ3RrX2Zp
bGVfY2hvb3Nlcl9kaWFsb2dfbmV3KF8oIlVwbG9hZCBGaWxlIiksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9wbGV2ZWwgPyBHVEtfV0lORE9X
KHRvcGxldmVsKSA6IDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgR1RLX0ZJTEVfQ0hPT1NFUl9BQ1RJT05fT1BFTiwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHVEtfU1RPQ0tfQ0FOQ0VMLCBH
VEtfUkVTUE9OU0VfQ0FOQ0VMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEdUS19TVE9DS19PUEVOLCBHVEtfUkVTUE9OU0VfQUNDRVBULAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOwot
Ci0gICAgZ3RrX2ZpbGVfY2hvb3Nlcl9zZXRfc2VsZWN0X211bHRpcGxlKEdUS19GSUxFX0NIT09T
RVIoZGlhbG9nKSwgY2hvb3Nlci0+c2V0dGluZ3MoKS5hbGxvd3NNdWx0aXBsZUZpbGVzKTsKLQot
ICAgIGlmIChndGtfZGlhbG9nX3J1bihHVEtfRElBTE9HKGRpYWxvZykpID09IEdUS19SRVNQT05T
RV9BQ0NFUFQpIHsKLSAgICAgICAgaWYgKGd0a19maWxlX2Nob29zZXJfZ2V0X3NlbGVjdF9tdWx0
aXBsZShHVEtfRklMRV9DSE9PU0VSKGRpYWxvZykpKSB7Ci0gICAgICAgICAgICBHT3duUHRyPEdT
TGlzdD4gZmlsZW5hbWVzKGd0a19maWxlX2Nob29zZXJfZ2V0X2ZpbGVuYW1lcyhHVEtfRklMRV9D
SE9PU0VSKGRpYWxvZykpKTsKLSAgICAgICAgICAgIFZlY3RvcjxTdHJpbmc+IG5hbWVzOwotICAg
ICAgICAgICAgZm9yIChHU0xpc3QqIGl0ZW0gPSBmaWxlbmFtZXMuZ2V0KCkgOyBpdGVtIDsgaXRl
bSA9IGl0ZW0tPm5leHQpIHsKLSAgICAgICAgICAgICAgICBpZiAoIWl0ZW0tPmRhdGEpCi0gICAg
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIG5hbWVzLmFwcGVuZChm
aWxlbmFtZVRvU3RyaW5nKHN0YXRpY19jYXN0PGNoYXIqPihpdGVtLT5kYXRhKSkpOwotICAgICAg
ICAgICAgICAgIGdfZnJlZShpdGVtLT5kYXRhKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGNob29zZXItPmNob29zZUZpbGVzKG5hbWVzKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgIGdjaGFyKiBmaWxlbmFtZSA9IGd0a19maWxlX2Nob29zZXJfZ2V0X2ZpbGVuYW1lKEdUS19G
SUxFX0NIT09TRVIoZGlhbG9nKSk7Ci0gICAgICAgICAgICBpZiAoZmlsZW5hbWUpCi0gICAgICAg
ICAgICAgICAgY2hvb3Nlci0+Y2hvb3NlRmlsZShmaWxlbmFtZVRvU3RyaW5nKGZpbGVuYW1lKSk7
Ci0gICAgICAgICAgICBnX2ZyZWUoZmlsZW5hbWUpOwotICAgICAgICB9Ci0gICAgfQotICAgIGd0
a193aWRnZXRfZGVzdHJveShkaWFsb2cpOworICAgIEdSZWZQdHI8V2ViS2l0RmlsZUNob29zZXJS
ZXF1ZXN0PiByZXF1ZXN0ID0gYWRvcHRHUmVmKHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9j
cmVhdGUocHJwRmlsZUNob29zZXIpKTsKKyAgICB3ZWJraXRfd2ViX3ZpZXdfcnVuX2ZpbGVfY2hv
b3Nlcl9yZXF1ZXN0KG1fd2ViVmlldywgcmVxdWVzdC5nZXQoKSk7CiB9CiAKIHZvaWQgQ2hyb21l
Q2xpZW50Ojpsb2FkSWNvbkZvckZpbGVzKGNvbnN0IFZlY3RvcjxXVEY6OlN0cmluZz4mIGZpbGVu
YW1lcywgV2ViQ29yZTo6RmlsZUljb25Mb2FkZXIqIGxvYWRlcikKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvZ3RrL2RvY3Mvd2Via2l0Z3RrLWRvY3Muc2dtbAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L2d0ay9kb2NzL3dlYmtpdGd0ay1kb2NzLnNnbWwJKHJldmlzaW9uIDExOTk0NikKKysrIFNv
dXJjZS9XZWJLaXQvZ3RrL2RvY3Mvd2Via2l0Z3RrLWRvY3Muc2dtbAkod29ya2luZyBjb3B5KQpA
QCAtNDEsNiArNDEsNyBAQAogICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC93ZWJraXRpY29uZGF0
YWJhc2UueG1sIi8+CiAgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL3dlYmtpdHNwZWxsY2hlY2tl
ci54bWwiLz4KICAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvd2Via2l0ZmF2aWNvbmRhdGFiYXNl
LnhtbCIvPgorICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC93ZWJraXRmaWxlY2hvb3NlcnJlcXVl
c3QueG1sIi8+CiAgIDwvY2hhcHRlcj4KIAogICA8Y2hhcHRlcj4KSW5kZXg6IFNvdXJjZS9XZWJL
aXQvZ3RrL2RvY3Mvd2Via2l0Z3RrLXNlY3Rpb25zLnR4dAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L2d0ay9kb2NzL3dlYmtpdGd0ay1zZWN0aW9ucy50eHQJKHJldmlzaW9uIDExOTk0NikK
KysrIFNvdXJjZS9XZWJLaXQvZ3RrL2RvY3Mvd2Via2l0Z3RrLXNlY3Rpb25zLnR4dAkod29ya2lu
ZyBjb3B5KQpAQCAtNzAzLDYgKzcwMywzMCBAQCBXZWJLaXRGYXZpY29uRGF0YWJhc2VQcml2YXRl
CiA8L1NFQ1RJT04+CiAKIDxTRUNUSU9OPgorPEZJTEU+d2Via2l0ZmlsZWNob29zZXJyZXF1ZXN0
PC9GSUxFPgorPFRJVExFPldlYktpdEZpbGVDaG9vc2VyUmVxdWVzdDwvVElUTEU+CitXZWJLaXRG
aWxlQ2hvb3NlclJlcXVlc3QKK3dlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfc2VsZWN0
X211bHRpcGxlCit3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X21pbWVfdHlwZXMKK3dl
YmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfbWltZV90eXBlc19maWx0ZXIKK3dlYmtpdF9m
aWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfc2VsZWN0ZWRfZmlsZXMKK3dlYmtpdF9maWxlX2Nob29z
ZXJfcmVxdWVzdF9zZWxlY3RfZmlsZXMKKworPFNVQlNFQ1RJT04gU3RhbmRhcmQ+CitXRUJLSVRf
VFlQRV9GSUxFX0NIT09TRVJfUkVRVUVTVAorV0VCS0lUX0ZJTEVfQ0hPT1NFUl9SRVFVRVNUCitX
RUJLSVRfSVNfRklMRV9DSE9PU0VSX1JFUVVFU1QKK1dFQktJVF9GSUxFX0NIT09TRVJfUkVRVUVT
VF9DTEFTUworV0VCS0lUX0lTX0ZJTEVfQ0hPT1NFUl9SRVFVRVNUX0NMQVNTCitXRUJLSVRfRklM
RV9DSE9PU0VSX1JFUVVFU1RfR0VUX0NMQVNTCisKKzxTVUJTRUNUSU9OIFByaXZhdGU+CitXZWJL
aXRGaWxlQ2hvb3NlclJlcXVlc3RDbGFzcworV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0UHJpdmF0
ZQord2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF90eXBlCis8L1NFQ1RJT04+CisKKzxT
RUNUSU9OPgogPEZJTEU+d2Via2l0ZGVmaW5lczwvRklMRT4KIFdFQktJVF9BUEkKIFdFQktJVEdU
S19BUElfVkVSU0lPTgpJbmRleDogU291cmNlL1dlYktpdC9ndGsvZG9jcy93ZWJraXRndGsudHlw
ZXMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9ndGsvZG9jcy93ZWJraXRndGsudHlwZXMJ
KHJldmlzaW9uIDExOTk0NikKKysrIFNvdXJjZS9XZWJLaXQvZ3RrL2RvY3Mvd2Via2l0Z3RrLnR5
cGVzCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNyBAQAogI2luY2x1ZGUgPHdlYmtpdC93ZWJr
aXQuaD4KIHdlYmtpdF9kb3dubG9hZF9nZXRfdHlwZQogd2Via2l0X2Zhdmljb25fZGF0YWJhc2Vf
Z2V0X3R5cGUKK3dlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfdHlwZQogd2Via2l0X2dl
b2xvY2F0aW9uX3BvbGljeV9kZWNpc2lvbl9nZXRfdHlwZQogd2Via2l0X2hpdF90ZXN0X3Jlc3Vs
dF9nZXRfdHlwZQogd2Via2l0X2ljb25fZGF0YWJhc2VfZ2V0X3R5cGUKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvZ3RrL3Rlc3RzL3Rlc3R3ZWJ2aWV3LmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9ndGsvdGVzdHMvdGVzdHdlYnZpZXcuYwkocmV2aXNpb24gMTE5OTQ2KQorKysgU291cmNlL1dl
YktpdC9ndGsvdGVzdHMvdGVzdHdlYnZpZXcuYwkod29ya2luZyBjb3B5KQpAQCAtNTA2LDYgKzUw
NiwxODYgQEAgc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfd2ViX3ZpZXdfZnVsbHNjcgogICAgIGd0
a193aWRnZXRfZGVzdHJveSh3aW5kb3cpOwogfQogCitzdGF0aWMgZ2Jvb2xlYW4gY2hlY2tNaW1l
VHlwZUZvckZpbHRlcihHdGtGaWxlRmlsdGVyKiBmaWx0ZXIsIGNvbnN0IGdjaGFyKiBtaW1lVHlw
ZSkKK3sKKyAgICBHdGtGaWxlRmlsdGVySW5mbyBmaWx0ZXJfaW5mbzsKKyAgICBmaWx0ZXJfaW5m
by5jb250YWlucyA9IEdUS19GSUxFX0ZJTFRFUl9NSU1FX1RZUEU7CisgICAgZmlsdGVyX2luZm8u
bWltZV90eXBlID0gbWltZVR5cGU7CisgICAgcmV0dXJuIGd0a19maWxlX2ZpbHRlcl9maWx0ZXIo
ZmlsdGVyLCAmZmlsdGVyX2luZm8pOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gcnVuRmlsZUNob29z
ZXJDYk5vTXVsdGlzZWxOb01pbWUoV2ViS2l0V2ViVmlldyogd2VidmlldywgV2ViS2l0RmlsZUNo
b29zZXJSZXF1ZXN0KiByZXF1ZXN0LCBncG9pbnRlciBkYXRhKQoreworICAgIGdfYXNzZXJ0KCF3
ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X3NlbGVjdF9tdWx0aXBsZShyZXF1ZXN0KSk7
CisKKyAgICBjb25zdCBnY2hhciogY29uc3QqIG1pbWVUeXBlcyA9IHdlYmtpdF9maWxlX2Nob29z
ZXJfcmVxdWVzdF9nZXRfbWltZV90eXBlcyhyZXF1ZXN0KTsKKyAgICBnX2Fzc2VydCghbWltZVR5
cGVzKTsKKyAgICBHdGtGaWxlRmlsdGVyKiBmaWx0ZXIgPSB3ZWJraXRfZmlsZV9jaG9vc2VyX3Jl
cXVlc3RfZ2V0X21pbWVfdHlwZXNfZmlsdGVyKHJlcXVlc3QpOworICAgIGdfYXNzZXJ0KCFmaWx0
ZXIpOworCisgICAgY29uc3QgZ2NoYXIqIGNvbnN0KiBzZWxlY3RlZEZpbGVzID0gd2Via2l0X2Zp
bGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9zZWxlY3RlZF9maWxlcyhyZXF1ZXN0KTsKKyAgICBnX2Fz
c2VydCghc2VsZWN0ZWRGaWxlcyk7CisKKyAgICBnX21haW5fbG9vcF9xdWl0KGxvb3ApOworICAg
IHJldHVybiBUUlVFOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gcnVuRmlsZUNob29zZXJDYk11bHRp
c2VsTm9NaW1lKFdlYktpdFdlYlZpZXcqIHdlYnZpZXcsIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVz
dCogcmVxdWVzdCwgZ3BvaW50ZXIgZGF0YSkKK3sKKyAgICBnX2Fzc2VydCh3ZWJraXRfZmlsZV9j
aG9vc2VyX3JlcXVlc3RfZ2V0X3NlbGVjdF9tdWx0aXBsZShyZXF1ZXN0KSk7CisKKyAgICBjb25z
dCBnY2hhciogY29uc3QqIG1pbWVUeXBlcyA9IHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9n
ZXRfbWltZV90eXBlcyhyZXF1ZXN0KTsKKyAgICBnX2Fzc2VydCghbWltZVR5cGVzKTsKKyAgICBH
dGtGaWxlRmlsdGVyKiBmaWx0ZXIgPSB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X21p
bWVfdHlwZXNfZmlsdGVyKHJlcXVlc3QpOworICAgIGdfYXNzZXJ0KCFmaWx0ZXIpOworICAgIGNv
bnN0IGdjaGFyKiBjb25zdCogc2VsZWN0ZWRGaWxlcyA9IHdlYmtpdF9maWxlX2Nob29zZXJfcmVx
dWVzdF9nZXRfc2VsZWN0ZWRfZmlsZXMocmVxdWVzdCk7CisgICAgZ19hc3NlcnQoIXNlbGVjdGVk
RmlsZXMpOworCisgICAgLy8gU2VsZWN0IHNvbWUgZmlsZXMuCisgICAgY29uc3QgZ2NoYXIqIGZp
bGVzVG9TZWxlY3RbNF0gPSB7ICIvZm9vIiwgIi9mb28vYmFyIiwgIi9mb28vYmFyL2JheiIsIDAg
fTsKKyAgICB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3Rfc2VsZWN0X2ZpbGVzKHJlcXVlc3Qs
IGZpbGVzVG9TZWxlY3QpOworCisgICAgLy8gQ2hlY2sgdGhlIGZpbGVzIHRoYXQgaGF2ZSBiZWVu
IGp1c3Qgc2VsZWN0ZWQuCisgICAgc2VsZWN0ZWRGaWxlcyA9IHdlYmtpdF9maWxlX2Nob29zZXJf
cmVxdWVzdF9nZXRfc2VsZWN0ZWRfZmlsZXMocmVxdWVzdCk7CisgICAgZ19hc3NlcnQoc2VsZWN0
ZWRGaWxlcyk7CisgICAgZ19hc3NlcnRfY21wc3RyKHNlbGVjdGVkRmlsZXNbMF0sID09LCAiL2Zv
byIpOworICAgIGdfYXNzZXJ0X2NtcHN0cihzZWxlY3RlZEZpbGVzWzFdLCA9PSwgIi9mb28vYmFy
Iik7CisgICAgZ19hc3NlcnRfY21wc3RyKHNlbGVjdGVkRmlsZXNbMl0sID09LCAiL2Zvby9iYXIv
YmF6Iik7CisgICAgZ19hc3NlcnQoIXNlbGVjdGVkRmlsZXNbM10pOworCisgICAgZ19tYWluX2xv
b3BfcXVpdChsb29wKTsKKyAgICByZXR1cm4gVFJVRTsKK30KKworc3RhdGljIGdib29sZWFuIHJ1
bkZpbGVDaG9vc2VyQ2JTZWxlY3Rpb25SZXRhaW5lZChXZWJLaXRXZWJWaWV3KiB3ZWJ2aWV3LCBX
ZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QqIHJlcXVlc3QsIGdwb2ludGVyIGRhdGEpCit7CisgICAg
Y29uc3QgZ2NoYXIqIGNvbnN0KiBzZWxlY3RlZEZpbGVzID0gd2Via2l0X2ZpbGVfY2hvb3Nlcl9y
ZXF1ZXN0X2dldF9zZWxlY3RlZF9maWxlcyhyZXF1ZXN0KTsKKyAgICBnX2Fzc2VydChzZWxlY3Rl
ZEZpbGVzKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoc2VsZWN0ZWRGaWxlc1swXSwgPT0sICIvZm9v
Iik7CisgICAgZ19hc3NlcnRfY21wc3RyKHNlbGVjdGVkRmlsZXNbMV0sID09LCAiL2Zvby9iYXIi
KTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoc2VsZWN0ZWRGaWxlc1syXSwgPT0sICIvZm9vL2Jhci9i
YXoiKTsKKyAgICBnX2Fzc2VydCghc2VsZWN0ZWRGaWxlc1szXSk7CisKKyAgICBnX21haW5fbG9v
cF9xdWl0KGxvb3ApOworICAgIHJldHVybiBUUlVFOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gcnVu
RmlsZUNob29zZXJDYk5vTXVsdGlzZWxBY2NlcHRUeXBlcyhXZWJLaXRXZWJWaWV3KiB3ZWJ2aWV3
LCBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QqIHJlcXVlc3QsIGdwb2ludGVyIGRhdGEpCit7Cisg
ICAgZ19hc3NlcnQoIXdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfc2VsZWN0X211bHRp
cGxlKHJlcXVlc3QpKTsKKworICAgIGNvbnN0IGdjaGFyKiBjb25zdCogbWltZVR5cGVzID0gd2Vi
a2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9taW1lX3R5cGVzKHJlcXVlc3QpOworICAgIGdf
YXNzZXJ0KG1pbWVUeXBlcyk7CisgICAgZ19hc3NlcnRfY21wc3RyKG1pbWVUeXBlc1swXSwgPT0s
ICJhdWRpby8qIik7CisgICAgZ19hc3NlcnRfY21wc3RyKG1pbWVUeXBlc1sxXSwgPT0sICJ2aWRl
by8qIik7CisgICAgZ19hc3NlcnRfY21wc3RyKG1pbWVUeXBlc1syXSwgPT0sICJpbWFnZS8qIik7
CisgICAgZ19hc3NlcnQoIW1pbWVUeXBlc1szXSk7CisKKyAgICBHdGtGaWxlRmlsdGVyKiBmaWx0
ZXIgPSB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X21pbWVfdHlwZXNfZmlsdGVyKHJl
cXVlc3QpOworICAgIGdfYXNzZXJ0KEdUS19JU19GSUxFX0ZJTFRFUihmaWx0ZXIpKTsKKyAgICBn
X2Fzc2VydChjaGVja01pbWVUeXBlRm9yRmlsdGVyKGZpbHRlciwgImF1ZGlvLyoiKSk7CisgICAg
Z19hc3NlcnQoY2hlY2tNaW1lVHlwZUZvckZpbHRlcihmaWx0ZXIsICJ2aWRlby8qIikpOworICAg
IGdfYXNzZXJ0KGNoZWNrTWltZVR5cGVGb3JGaWx0ZXIoZmlsdGVyLCAiaW1hZ2UvKiIpKTsKKwor
ICAgIGNvbnN0IGdjaGFyKiBjb25zdCogc2VsZWN0ZWRGaWxlcyA9IHdlYmtpdF9maWxlX2Nob29z
ZXJfcmVxdWVzdF9nZXRfc2VsZWN0ZWRfZmlsZXMocmVxdWVzdCk7CisgICAgZ19hc3NlcnQoIXNl
bGVjdGVkRmlsZXMpOworCisgICAgZ19tYWluX2xvb3BfcXVpdChsb29wKTsKKyAgICByZXR1cm4g
VFJVRTsKK30KKwordm9pZCBkb01vdXNlQnV0dG9uRXZlbnQoR3RrV2lkZ2V0KiB3aWRnZXQsIEdk
a0V2ZW50VHlwZSBldmVudFR5cGUsIGludCB4LCBpbnQgeSwgdW5zaWduZWQgaW50IGJ1dHRvbiwg
dW5zaWduZWQgaW50IG1vZGlmaWVycykKK3sKKyAgICBnX2Fzc2VydChndGtfd2lkZ2V0X2dldF9y
ZWFsaXplZCh3aWRnZXQpKTsKKworICAgIEdka0V2ZW50KiBldmVudCA9IGdka19ldmVudF9uZXco
ZXZlbnRUeXBlKTsKKyAgICBldmVudC0+YnV0dG9uLndpbmRvdyA9IGd0a193aWRnZXRfZ2V0X3dp
bmRvdyh3aWRnZXQpOworICAgIGdfb2JqZWN0X3JlZihldmVudC0+YnV0dG9uLndpbmRvdyk7CisK
KyAgICBldmVudC0+YnV0dG9uLnRpbWUgPSBHREtfQ1VSUkVOVF9USU1FOworICAgIGV2ZW50LT5i
dXR0b24ueCA9IHg7CisgICAgZXZlbnQtPmJ1dHRvbi55ID0geTsKKyAgICBldmVudC0+YnV0dG9u
LmF4ZXMgPSAwOworICAgIGV2ZW50LT5idXR0b24uc3RhdGUgPSBtb2RpZmllcnM7CisgICAgZXZl
bnQtPmJ1dHRvbi5idXR0b24gPSBidXR0b247CisKKyAgICBldmVudC0+YnV0dG9uLmRldmljZSA9
IGdka19kZXZpY2VfbWFuYWdlcl9nZXRfY2xpZW50X3BvaW50ZXIoZ2RrX2Rpc3BsYXlfZ2V0X2Rl
dmljZV9tYW5hZ2VyKGd0a193aWRnZXRfZ2V0X2Rpc3BsYXkod2lkZ2V0KSkpOworCisgICAgaW50
IHhSb290LCB5Um9vdDsKKyAgICBnZGtfd2luZG93X2dldF9yb290X2Nvb3JkcyhndGtfd2lkZ2V0
X2dldF93aW5kb3cod2lkZ2V0KSwgeCwgeSwgJnhSb290LCAmeVJvb3QpOworICAgIGV2ZW50LT5i
dXR0b24ueF9yb290ID0geFJvb3Q7CisgICAgZXZlbnQtPmJ1dHRvbi55X3Jvb3QgPSB5Um9vdDsK
KyAgICBndGtfbWFpbl9kb19ldmVudChldmVudCk7Cit9CisKK3N0YXRpYyB2b2lkIGNsaWNrTW91
c2VCdXR0b24oR3RrV2lkZ2V0KiB3aWRnZXQsIGludCB4LCBpbnQgeSwgdW5zaWduZWQgaW50IGJ1
dHRvbiwgdW5zaWduZWQgaW50IG1vZGlmaWVycykKK3sKKyAgICBkb01vdXNlQnV0dG9uRXZlbnQo
d2lkZ2V0LCBHREtfQlVUVE9OX1BSRVNTLCB4LCB5LCBidXR0b24sIG1vZGlmaWVycyk7CisgICAg
ZG9Nb3VzZUJ1dHRvbkV2ZW50KHdpZGdldCwgR0RLX0JVVFRPTl9SRUxFQVNFLCB4LCB5LCBidXR0
b24sIG1vZGlmaWVycyk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiBjbGlja01vdXNlQnV0dG9uQW5k
V2FpdEZvckZpbGVDaG9vc2VyUmVxdWVzdChXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQoreworICAg
IGNsaWNrTW91c2VCdXR0b24oR1RLX1dJREdFVCh3ZWJWaWV3KSwgNSwgNSwgMSwgMCk7CisgICAg
cmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3Rfd2Via2l0X3dlYl92aWV3X2ZpbGVf
Y2hvb3NlcigpCit7CisgICAgY29uc3QgZ2NoYXIqIGh0bWxGb3JtYXRCYXNlID0gIjxodG1sPjxi
b2R5PiIKKyAgICAgICAgICAgICI8aW5wdXQgc3R5bGU9J3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6
MDt0b3A6MDttYXJnaW46MDtwYWRkaW5nOjAnIHR5cGU9J2ZpbGUnICVzLz4iCisgICAgICAgICAg
ICAiPC9ib2R5PjwvaHRtbD4iOworCisgICAgR3RrV2lkZ2V0KiB3aW5kb3cgPSBndGtfd2luZG93
X25ldyhHVEtfV0lORE9XX1RPUExFVkVMKTsKKyAgICBHdGtXaWRnZXQqIHdlYlZpZXcgPSB3ZWJr
aXRfd2ViX3ZpZXdfbmV3KCk7CisgICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUih3
aW5kb3cpLCB3ZWJWaWV3KTsKKyAgICBndGtfd2lkZ2V0X3Nob3dfYWxsKHdpbmRvdyk7CisKKyAg
ICBsb29wID0gZ19tYWluX2xvb3BfbmV3KE5VTEwsIFRSVUUpOworCisgICAgLy8gTXVsdGlwbGUg
c2VsZWN0aW9ucyBub3QgYWxsb3dlZCwgbm8gTUlNRSBmaWx0ZXJpbmcuCisgICAgZ3Vsb25nIGhh
bmRsZXIgPSBnX3NpZ25hbF9jb25uZWN0KHdlYlZpZXcsICJydW4tZmlsZS1jaG9vc2VyIiwgR19D
QUxMQkFDSyhydW5GaWxlQ2hvb3NlckNiTm9NdWx0aXNlbE5vTWltZSksIE5VTEwpOworICAgIGdj
aGFyKiBodG1sRm9ybWF0ID0gZ19zdHJkdXBfcHJpbnRmKGh0bWxGb3JtYXRCYXNlLCAiIik7Cisg
ICAgd2Via2l0X3dlYl92aWV3X2xvYWRfc3RyaW5nKFdFQktJVF9XRUJfVklFVyh3ZWJWaWV3KSwg
aHRtbEZvcm1hdCwgTlVMTCwgTlVMTCwgTlVMTCk7CisgICAgZ19mcmVlKGh0bWxGb3JtYXQpOwor
CisgICAgZ190aW1lb3V0X2FkZCgxMDAsIChHU291cmNlRnVuYykgY2xpY2tNb3VzZUJ1dHRvbkFu
ZFdhaXRGb3JGaWxlQ2hvb3NlclJlcXVlc3QsIFdFQktJVF9XRUJfVklFVyh3ZWJWaWV3KSk7Cisg
ICAgZ19tYWluX2xvb3BfcnVuKGxvb3ApOworCisgICAgZ19zaWduYWxfaGFuZGxlcl9kaXNjb25u
ZWN0KHdlYlZpZXcsIGhhbmRsZXIpOworCisgICAgLy8gTXVsdGlwbGUgc2VsZWN0aW9ucyBhbGxv
d2VkLCBubyBNSU1FIGZpbHRlcmluZywgc29tZSBwcmUtc2VsZWN0ZWQgZmlsZXMuCisgICAgaGFu
ZGxlciA9IGdfc2lnbmFsX2Nvbm5lY3Qod2ViVmlldywgInJ1bi1maWxlLWNob29zZXIiLCBHX0NB
TExCQUNLKHJ1bkZpbGVDaG9vc2VyQ2JNdWx0aXNlbE5vTWltZSksIE5VTEwpOworICAgIGh0bWxG
b3JtYXQgPSBnX3N0cmR1cF9wcmludGYoaHRtbEZvcm1hdEJhc2UsICJtdWx0aXBsZSIpOworICAg
IHdlYmtpdF93ZWJfdmlld19sb2FkX3N0cmluZyhXRUJLSVRfV0VCX1ZJRVcod2ViVmlldyksIGh0
bWxGb3JtYXQsIE5VTEwsIE5VTEwsIE5VTEwpOworICAgIGdfZnJlZShodG1sRm9ybWF0KTsKKwor
ICAgIGdfdGltZW91dF9hZGQoMTAwLCAoR1NvdXJjZUZ1bmMpIGNsaWNrTW91c2VCdXR0b25BbmRX
YWl0Rm9yRmlsZUNob29zZXJSZXF1ZXN0LCBXRUJLSVRfV0VCX1ZJRVcod2ViVmlldykpOworICAg
IGdfbWFpbl9sb29wX3J1bihsb29wKTsKKworICAgIGdfc2lnbmFsX2hhbmRsZXJfZGlzY29ubmVj
dCh3ZWJWaWV3LCBoYW5kbGVyKTsKKworICAgIC8vIFBlcmZvcm0gYW5vdGhlciByZXF1ZXN0IHRv
IGNoZWNrIGlmIHRoZSBsaXN0IG9mIGZpbGVzIHNlbGVjdGVkCisgICAgLy8gaW4gdGhlIHByZXZp
b3VzIHN0ZXAgYXBwZWFycyBub3cgYXMgcGFydCBvZiB0aGUgbmV3IHJlcXVlc3QuCisgICAgaGFu
ZGxlciA9IGdfc2lnbmFsX2Nvbm5lY3Qod2ViVmlldywgInJ1bi1maWxlLWNob29zZXIiLCBHX0NB
TExCQUNLKHJ1bkZpbGVDaG9vc2VyQ2JTZWxlY3Rpb25SZXRhaW5lZCksIE5VTEwpOworICAgIGdf
dGltZW91dF9hZGQoMTAwLCAoR1NvdXJjZUZ1bmMpIGNsaWNrTW91c2VCdXR0b25BbmRXYWl0Rm9y
RmlsZUNob29zZXJSZXF1ZXN0LCBXRUJLSVRfV0VCX1ZJRVcod2ViVmlldykpOworICAgIGdfbWFp
bl9sb29wX3J1bihsb29wKTsKKworICAgIGdfc2lnbmFsX2hhbmRsZXJfZGlzY29ubmVjdCh3ZWJW
aWV3LCBoYW5kbGVyKTsKKworICAgIC8vIE11bHRpcGxlIHNlbGVjdGlvbnMgbm90IGFsbG93ZWQs
IG9ubHkgYWNjZXB0IGltYWdlcywgYXVkaW8gYW5kIHZpZGVvIGZpbGVzLgorICAgIGhhbmRsZXIg
PSBnX3NpZ25hbF9jb25uZWN0KHdlYlZpZXcsICJydW4tZmlsZS1jaG9vc2VyIiwgR19DQUxMQkFD
SyhydW5GaWxlQ2hvb3NlckNiTm9NdWx0aXNlbEFjY2VwdFR5cGVzKSwgTlVMTCk7CisgICAgaHRt
bEZvcm1hdCA9IGdfc3RyZHVwX3ByaW50ZihodG1sRm9ybWF0QmFzZSwgImFjY2VwdD0nYXVkaW8v
Kix2aWRlby8qLGltYWdlLyonIik7CisgICAgd2Via2l0X3dlYl92aWV3X2xvYWRfc3RyaW5nKFdF
QktJVF9XRUJfVklFVyh3ZWJWaWV3KSwgaHRtbEZvcm1hdCwgTlVMTCwgTlVMTCwgTlVMTCk7Cisg
ICAgZ19mcmVlKGh0bWxGb3JtYXQpOworCisgICAgZ190aW1lb3V0X2FkZCgxMDAsIChHU291cmNl
RnVuYykgY2xpY2tNb3VzZUJ1dHRvbkFuZFdhaXRGb3JGaWxlQ2hvb3NlclJlcXVlc3QsIFdFQktJ
VF9XRUJfVklFVyh3ZWJWaWV3KSk7CisgICAgZ19tYWluX2xvb3BfcnVuKGxvb3ApOworCisgICAg
Z19zaWduYWxfaGFuZGxlcl9kaXNjb25uZWN0KHdlYlZpZXcsIGhhbmRsZXIpOworICAgIGd0a193
aWRnZXRfZGVzdHJveSh3aW5kb3cpOworfQorCiBpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFy
Z3YpCiB7CiAgICAgU291cFNlcnZlciogc2VydmVyOwpAQCAtNTM3LDYgKzcxNyw3IEBAIGludCBt
YWluKGludCBhcmdjLCBjaGFyKiogYXJndikKICAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQv
d2Vidmlldy93ZWJ2aWV3LWRvZXMtbm90LXN0ZWFsLWZvY3VzIiwgdGVzdF93ZWJraXRfd2ViX3Zp
ZXdfZG9lc19ub3Rfc3RlYWxfZm9jdXMpOwogICAgIGdfdGVzdF9hZGRfZGF0YV9mdW5jKCIvd2Vi
a2l0L3dlYnZpZXcvZnVsbHNjcmVlbiIsIEdJTlRfVE9fUE9JTlRFUihGQUxTRSksIHRlc3Rfd2Vi
a2l0X3dlYl92aWV3X2Z1bGxzY3JlZW4pOwogICAgIGdfdGVzdF9hZGRfZGF0YV9mdW5jKCIvd2Vi
a2l0L3dlYnZpZXcvZnVsbHNjcmVlbi1ibG9ja2VkIiwgR0lOVF9UT19QT0lOVEVSKFRSVUUpLCB0
ZXN0X3dlYmtpdF93ZWJfdmlld19mdWxsc2NyZWVuKTsKKyAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93
ZWJraXQvd2Vidmlldy9maWxlLWNob29zZXIiLCB0ZXN0X3dlYmtpdF93ZWJfdmlld19maWxlX2No
b29zZXIpOwogCiAgICAgcmV0dXJuIGdfdGVzdF9ydW4gKCk7CiB9CkluZGV4OiBTb3VyY2UvV2Vi
S2l0L2d0ay93ZWJraXQvd2Via2l0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9ndGsv
d2Via2l0L3dlYmtpdC5oCShyZXZpc2lvbiAxMTk5NDYpCisrKyBTb3VyY2UvV2ViS2l0L2d0ay93
ZWJraXQvd2Via2l0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRl
IDx3ZWJraXQvd2Via2l0ZG93bmxvYWQuaD4KICNpbmNsdWRlIDx3ZWJraXQvd2Via2l0ZW51bXR5
cGVzLmg+CiAjaW5jbHVkZSA8d2Via2l0L3dlYmtpdGZhdmljb25kYXRhYmFzZS5oPgorI2luY2x1
ZGUgPHdlYmtpdC93ZWJraXRmaWxlY2hvb3NlcnJlcXVlc3QuaD4KICNpbmNsdWRlIDx3ZWJraXQv
d2Via2l0Z2VvbG9jYXRpb25wb2xpY3lkZWNpc2lvbi5oPgogI2luY2x1ZGUgPHdlYmtpdC93ZWJr
aXRnbG9iYWxzLmg+CiAjaW5jbHVkZSA8d2Via2l0L3dlYmtpdGhpdHRlc3RyZXN1bHQuaD4KSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRmaWxlY2hvb3NlcnJlcXVlc3QuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRmaWxlY2hvb3Nl
cnJlcXVlc3QuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dl
YmtpdGZpbGVjaG9vc2VycmVxdWVzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzNDkg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIndlYmtpdGZpbGVjaG9vc2VycmVxdWVzdC5oIgorCisjaW5jbHVkZSAi
RmlsZUNob29zZXIuaCIKKyNpbmNsdWRlICJGaWxlU3lzdGVtLmgiCisjaW5jbHVkZSAid2Via2l0
ZmlsZWNob29zZXJyZXF1ZXN0cHJpdmF0ZS5oIgorI2luY2x1ZGUgIndlYmtpdGdsb2JhbHNwcml2
YXRlLmgiCisjaW5jbHVkZSA8Z2xpYi9naTE4bi1saWIuaD4KKyNpbmNsdWRlIDx3dGYvZ29iamVj
dC9HT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L0NTdHJpbmcuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKKy8qKgor
ICogU0VDVElPTjp3ZWJraXRmaWxlY2hvb3NlcnJlcXVlc3QKKyAqIEBTaG9ydF9kZXNjcmlwdGlv
bjogQSByZXF1ZXN0IHRvIG9wZW4gYSBmaWxlIGNob29zZXIKKyAqIEBUaXRsZTogV2ViS2l0Rmls
ZUNob29zZXJSZXF1ZXN0CisgKiBAU2VlX2Fsc286ICNXZWJLaXRXZWJWaWV3CisgKgorICogV2hl
bmV2ZXIgdGhlIHVzZXIgaW50ZXJhY3RzIHdpdGggYW4gJmx0O2lucHV0IHR5cGU9J2ZpbGUnIC8m
Z3Q7CisgKiBIVE1MIGVsZW1lbnQsIFdlYktpdCB3aWxsIG5lZWQgdG8gc2hvdyBhIGRpYWxvZyB0
byBjaG9vc2Ugb25lIG9yCisgKiBtb3JlIGZpbGVzIHRvIGJlIHVwbG9hZGVkIHRvIHRoZSBzZXJ2
ZXIgYWxvbmcgd2l0aCB0aGUgcmVzdCBvZiB0aGUKKyAqIGZvcm0gZGF0YS4gRm9yIHRoYXQgdG8g
aGFwcGVuIGluIGEgZ2VuZXJhbCB3YXksIGluc3RlYWQgb2YganVzdAorICogb3BlbmluZyBhICNH
dGtGaWxlQ2hvb3NlckRpYWxvZyAod2hpY2ggbWlnaHQgYmUgbm90IGRlc2lyYWJsZSBpbgorICog
c29tZSBjYXNlcywgc3VjaCBhcyB3aGVuIGFuIGVtYmVkZGluZyBhcHBsaWNhdGlvbnMgcHJlZmVy
cyB0byB1c2UKKyAqIGl0cyBvd24gZmlsZSBjaG9vc2VyIGRpYWxvZyksIFdlYktpdCB3aWxsIGZp
cmUgdGhlCisgKiAjV2ViS2l0V2ViVmlldzo6cnVuLWZpbGUtY2hvb3NlciBzaWduYWwgd2l0aCBh
CisgKiAjV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0IG9iamVjdCwgd2hpY2ggd2lsbCBhbGxvdyB0
aGUgY2xpZW50CisgKiBhcHBsaWNhdGlvbiB0byBzcGVjaWZ5IHRoZSBmaWxlcyB0byBiZSBzZWxl
Y3RlZCwgdG8gaW5zcGVjdCB0aGUKKyAqIGRldGFpbHMgb2YgdGhlIHJlcXVlc3QgKGUuZy4gaWYg
bXVsdGlwbGUgc2VsZWN0aW9uIHNob3VsZCBiZQorICogYWxsb3dlZCkgYW5kIHRvIGNhbmNlbCB0
aGUgcmVxdWVzdCwgaW4gY2FzZSBub3RoaW5nIHdhcyBzZWxlY3RlZC4KKyAqCisgKiBJbiBjYXNl
IHRoZSBjbGllbnQgYXBwbGljYXRpb24gZG9lcyBub3Qgd2lzaCB0byBoYW5kbGUgdGhpcyBzaWdu
YWwsCisgKiBXZWJLaXQgd2lsbCBwcm92aWRlIGEgZGVmYXVsdCBoYW5kbGVyIHdoaWNoIHdpbGwg
YXN5bmNocm9ub3VzbHkgcnVuCisgKiBhIHJlZ3VsYXIgI0d0a0ZpbGVDaG9vc2VyRGlhbG9nIGZv
ciB0aGUgdXNlciB0byBpbnRlcmFjdCB3aXRoLgorICovCitHX0RFRklORV9UWVBFKFdlYktpdEZp
bGVDaG9vc2VyUmVxdWVzdCwgd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0LCBHX1RZUEVfT0JK
RUNUKQorCitzdHJ1Y3QgX1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdFByaXZhdGUgeworICAgIFJl
ZlB0cjxGaWxlQ2hvb3Nlcj4gY2hvb3NlcjsKKyAgICBHUmVmUHRyPEd0a0ZpbGVGaWx0ZXI+IGZp
bHRlcjsKKyAgICBHUmVmUHRyPEdQdHJBcnJheT4gbWltZVR5cGVzOworICAgIEdSZWZQdHI8R1B0
ckFycmF5PiBzZWxlY3RlZEZpbGVzOworfTsKKworZW51bSB7CisgICAgUFJPUF8wLAorICAgIFBS
T1BfRklMVEVSLAorICAgIFBST1BfTUlNRV9UWVBFUywKKyAgICBQUk9QX1NFTEVDVF9NVUxUSVBM
RSwKKyAgICBQUk9QX1NFTEVDVEVEX0ZJTEVTLAorfTsKKworc3RhdGljIHZvaWQgd2Via2l0X2Zp
bGVfY2hvb3Nlcl9yZXF1ZXN0X2luaXQoV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0KiByZXF1ZXN0
KQoreworICAgIHJlcXVlc3QtPnByaXYgPSBHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUocmVx
dWVzdCwgV0VCS0lUX1RZUEVfRklMRV9DSE9PU0VSX1JFUVVFU1QsIFdlYktpdEZpbGVDaG9vc2Vy
UmVxdWVzdFByaXZhdGUpOworICAgIG5ldyAocmVxdWVzdC0+cHJpdikgV2ViS2l0RmlsZUNob29z
ZXJSZXF1ZXN0UHJpdmF0ZSgpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZmlsZV9jaG9vc2Vy
X3JlcXVlc3RfZmluYWxpemUoR09iamVjdCogb2JqZWN0KQoreworICAgIFdlYktpdEZpbGVDaG9v
c2VyUmVxdWVzdCogcmVxdWVzdCA9IFdFQktJVF9GSUxFX0NIT09TRVJfUkVRVUVTVChvYmplY3Qp
OworCisgICAgcmVxdWVzdC0+cHJpdi0+fldlYktpdEZpbGVDaG9vc2VyUmVxdWVzdFByaXZhdGUo
KTsKKyAgICBHX09CSkVDVF9DTEFTUyh3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfcGFyZW50
X2NsYXNzKS0+ZmluYWxpemUob2JqZWN0KTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2ZpbGVf
Y2hvb3Nlcl9yZXF1ZXN0X2dldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BJ
ZCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcGFyYW1TcGVjKQoreworICAgIFdlYktpdEZp
bGVDaG9vc2VyUmVxdWVzdCogcmVxdWVzdCA9IFdFQktJVF9GSUxFX0NIT09TRVJfUkVRVUVTVChv
YmplY3QpOworICAgIHN3aXRjaCAocHJvcElkKSB7CisgICAgY2FzZSBQUk9QX0ZJTFRFUjoKKyAg
ICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVl
c3RfZ2V0X21pbWVfdHlwZXNfZmlsdGVyKHJlcXVlc3QpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBQUk9QX01JTUVfVFlQRVM6CisgICAgICAgIGdfdmFsdWVfc2V0X2JveGVkKHZhbHVlLCB3
ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X21pbWVfdHlwZXMocmVxdWVzdCkpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfU0VMRUNUX01VTFRJUExFOgorICAgICAgICBnX3Zh
bHVlX3NldF9ib29sZWFuKHZhbHVlLCB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X3Nl
bGVjdF9tdWx0aXBsZShyZXF1ZXN0KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9T
RUxFQ1RFRF9GSUxFUzoKKyAgICAgICAgZ192YWx1ZV9zZXRfYm94ZWQodmFsdWUsIHdlYmtpdF9m
aWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfc2VsZWN0ZWRfZmlsZXMocmVxdWVzdCkpOworICAgICAg
ICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJP
UEVSVFlfSUQob2JqZWN0LCBwcm9wSWQsIHBhcmFtU3BlYyk7CisgICAgICAgIGJyZWFrOworICAg
IH0KK30KKworc3RhdGljIHZvaWQgd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2NsYXNzX2lu
aXQoV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0Q2xhc3MqIHJlcXVlc3RDbGFzcykKK3sKKyAgICBH
T2JqZWN0Q2xhc3MqIG9iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1MocmVxdWVzdENsYXNzKTsK
KyAgICBvYmplY3RDbGFzcy0+ZmluYWxpemUgPSB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3Rf
ZmluYWxpemU7CisgICAgb2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtpdF9maWxlX2No
b29zZXJfcmVxdWVzdF9nZXRfcHJvcGVydHk7CisgICAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRl
KHJlcXVlc3RDbGFzcywgc2l6ZW9mKFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdFByaXZhdGUpKTsK
KworICAgIC8qKgorICAgICAqIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdDpmaWx0ZXI6CisgICAg
ICoKKyAgICAgKiBUaGUgZmlsdGVyIGN1cnJlbnRseSBhc3NvY2lhdGVkIHdpdGggdGhlIHJlcXVl
c3QuIFNlZQorICAgICAqIHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfbWltZV90eXBl
c19maWx0ZXIoKSBmb3IgbW9yZQorICAgICAqIGRldGFpbHMuCisgICAgICovCisgICAgZ19vYmpl
Y3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShvYmplY3RDbGFzcywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFBST1BfRklMVEVSLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCgiZmlsdGVyIiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIk1JTUUgdHlwZXMgZmls
dGVyIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfKCJUaGUgZmlsdGVyIGN1cnJlbnRseSBhc3NvY2lhdGVkIHdpdGggdGhlIHJlcXVlc3Qi
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdUS19UWVBFX0ZJTEVfRklMVEVSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisgICAgLyoqCisg
ICAgICogV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0Om1pbWUtdHlwZXM6CisgICAgICoKKyAgICAg
KiBBICVOVUxMLXRlcm1pbmF0ZWQgYXJyYXkgb2Ygc3RyaW5ncyBjb250YWluaW5nIHRoZSBsaXN0
IG9mIE1JTUUKKyAgICAgKiB0eXBlcyB0aGUgZmlsZSBjaG9vc2VyIGRpYWxvZyBzaG91bGQgaGFu
ZGxlLiBTZWUKKyAgICAgKiB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X21pbWVfdHlw
ZXMoKSBmb3IgbW9yZSBkZXRhaWxzLgorICAgICAqLworICAgIGdfb2JqZWN0X2NsYXNzX2luc3Rh
bGxfcHJvcGVydHkob2JqZWN0Q2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBQUk9QX01JTUVfVFlQRVMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBnX3BhcmFtX3NwZWNfYm94ZWQoIm1pbWUtdHlwZXMiLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiTUlNRSB0eXBlcyIpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiVGhlIGxp
c3Qgb2YgTUlNRSB0eXBlcyBhc3NvY2lhdGVkIHdpdGggdGhlIHJlcXVlc3QiKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdfVFlQRV9TVFJW
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
V0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7ICAgIC8qKgorICAgICAqIFdlYktpdEZpbGVDaG9vc2Vy
UmVxdWVzdDpzZWxlY3QtbXVsdGlwbGU6CisgICAgICoKKyAgICAgKiBXaGV0aGVyIHRoZSBmaWxl
IGNob29zZXIgc2hvdWxkIGFsbG93IHNlbGVjdGluZyBtdWx0aXBsZQorICAgICAqIGZpbGVzLiBT
ZWUKKyAgICAgKiB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X3NlbGVjdF9tdWx0aXBs
ZSgpIGZvcgorICAgICAqIG1vcmUgZGV0YWlscy4KKyAgICAgKi8KKyAgICBnX29iamVjdF9jbGFz
c19pbnN0YWxsX3Byb3BlcnR5KG9iamVjdENsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgUFJPUF9TRUxFQ1RfTVVMVElQTEUsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbigic2VsZWN0LW11bHRpcGxlIiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJT
ZWxlY3QgbXVsdGlwbGUgZmlsZXMiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfKCJXaGV0aGVyIHRoZSBmaWxlIGNob29zZXIgc2hvdWxk
IGFsbG93IHNlbGVjdGluZyBtdWx0aXBsZSBmaWxlcyIpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZBTFNFLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFE
QUJMRSkpOworICAgIC8qKgorICAgICAqIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdDpzZWxlY3Rl
ZC1maWxlczoKKyAgICAgKgorICAgICAqIEEgJU5VTEwtdGVybWluYXRlZCBhcnJheSBvZiBzdHJp
bmdzIGNvbnRhaW5pbmcgdGhlIGxpc3Qgb2YKKyAgICAgKiBzZWxlY3RlZCBmaWxlcyBhc3NvY2lh
dGVkIHRvIHRoZSBjdXJyZW50IHJlcXVlc3QuIFNlZQorICAgICAqIHdlYmtpdF9maWxlX2Nob29z
ZXJfcmVxdWVzdF9nZXRfc2VsZWN0ZWRfZmlsZXMoKSBmb3IgbW9yZSBkZXRhaWxzLgorICAgICAq
LworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkob2JqZWN0Q2xhc3MsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9QX1NFTEVDVEVEX0ZJTEVTLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVjX2JveGVkKCJzZWxl
Y3RlZC1maWxlcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfKCJTZWxlY3RlZCBmaWxlcyIpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiVGhlIGxpc3Qgb2Ygc2VsZWN0ZWQgZmls
ZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSByZXF1ZXN0IiksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHX1RZUEVfU1RSViwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9QQVJBTV9S
RUFEQUJMRSkpOworfQorCitXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QqIHdlYmtpdF9maWxlX2No
b29zZXJfcmVxdWVzdF9jcmVhdGUoUGFzc1JlZlB0cjxGaWxlQ2hvb3Nlcj4gY2hvb3NlcikKK3sK
KyAgICBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QqIHJlcXVlc3QgPSBXRUJLSVRfRklMRV9DSE9P
U0VSX1JFUVVFU1QoZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX0ZJTEVfQ0hPT1NFUl9SRVFVRVNU
LCBOVUxMKSk7CisgICAgcmVxdWVzdC0+cHJpdi0+Y2hvb3NlciA9IGNob29zZXI7CisgICAgcmV0
dXJuIHJlcXVlc3Q7Cit9CisKKy8qKgorICogd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dl
dF9taW1lX3R5cGVzOgorICogQHJlcXVlc3Q6IGEgI1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdAor
ICoKKyAqIEdldCB0aGUgbGlzdCBvZiBNSU1FIHR5cGVzIHRoZSBmaWxlIGNob29zZXIgZGlhbG9n
IHNob3VsZCBoYW5kbGUsCisgKiBpbiB0aGUgZm9ybWF0IHNwZWNpZmllZCBpbiBSRkMgMjA0NiBm
b3IgIm1lZGlhIHR5cGVzIi4gSXRzIGNvbnRlbnRzCisgKiBkZXBlbmQgb24gdGhlIHZhbHVlIG9m
IHRoZSAnYWNjZXB0JyBhdHRyaWJ1dGUgZm9yIEhUTUwgaW5wdXQKKyAqIGVsZW1lbnRzLiBUaGlz
IGZ1bmN0aW9uIHNob3VsZCBub3JtYWxseSBiZSBjYWxsZWQgYmVmb3JlIHByZXNlbnRpbmcKKyAq
IHRoZSBmaWxlIGNob29zZXIgZGlhbG9nIHRvIHRoZSB1c2VyLCB0byBkZWNpZGUgd2hldGhlciB0
byBhbGxvdyB0aGUKKyAqIHVzZXIgdG8gc2VsZWN0IG11bHRpcGxlIGZpbGVzIGF0IG9uY2Ugb3Ig
b25seSBvbmUuCisgKgorICogUmV0dXJuczogKGFycmF5IHplcm8tdGVybWluYXRlZD0xKSAodHJh
bnNmZXIgbm9uZSk6IGEKKyAqICVOVUxMLXRlcm1pbmF0ZWQgYXJyYXkgb2Ygc3RyaW5ncyBpZiBh
IGxpc3Qgb2YgYWNjZXB0ZWQgTUlNRSB0eXBlcworICogaXMgZGVmaW5lZCBvciAlTlVMTCBvdGhl
cndpc2UsIG1lYW5pbmcgdGhhdCBhbnkgTUlNRSB0eXBlIHNob3VsZCBiZQorICogYWNjZXB0ZWQu
IFRoaXMgYXJyYXkgYW5kIGl0cyBjb250ZW50cyBhcmUgb3duZWQgYnkgV2ViS2l0R1RLKyBhbmQK
KyAqIHNob3VsZCBub3QgYmUgbW9kaWZpZWQgb3IgZnJlZWQuCisgKi8KK2NvbnN0IGdjaGFyKiBj
b25zdCogd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9taW1lX3R5cGVzKFdlYktpdEZp
bGVDaG9vc2VyUmVxdWVzdCogcmVxdWVzdCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChX
RUJLSVRfSVNfRklMRV9DSE9PU0VSX1JFUVVFU1QocmVxdWVzdCksIDApOworICAgIGlmIChyZXF1
ZXN0LT5wcml2LT5taW1lVHlwZXMpCisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGdj
aGFyKio+KHJlcXVlc3QtPnByaXYtPm1pbWVUeXBlcy0+cGRhdGEpOworCisgICAgRmlsZUNob29z
ZXJTZXR0aW5ncyBzZXR0aW5ncyA9IHJlcXVlc3QtPnByaXYtPmNob29zZXItPnNldHRpbmdzKCk7
CisgICAgc2l6ZV90IG51bU9mTWltZVR5cGVzID0gc2V0dGluZ3MuYWNjZXB0TUlNRVR5cGVzLnNp
emUoKTsKKyAgICBpZiAoIW51bU9mTWltZVR5cGVzKQorICAgICAgICByZXR1cm4gMDsKKworICAg
IHJlcXVlc3QtPnByaXYtPm1pbWVUeXBlcyA9IGFkb3B0R1JlZihnX3B0cl9hcnJheV9uZXdfd2l0
aF9mcmVlX2Z1bmMoZ19mcmVlKSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1PZk1p
bWVUeXBlczsgKytpKSB7CisgICAgICAgIFN0cmluZyBtaW1lVHlwZVN0cmluZyA9IHNldHRpbmdz
LmFjY2VwdE1JTUVUeXBlc1tpXTsKKyAgICAgICAgaWYgKG1pbWVUeXBlU3RyaW5nLmlzRW1wdHko
KSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBnX3B0cl9hcnJheV9hZGQocmVxdWVz
dC0+cHJpdi0+bWltZVR5cGVzLmdldCgpLCBnX3N0cmR1cChtaW1lVHlwZVN0cmluZy51dGY4KCku
ZGF0YSgpKSk7CisgICAgfQorICAgIGdfcHRyX2FycmF5X2FkZChyZXF1ZXN0LT5wcml2LT5taW1l
VHlwZXMuZ2V0KCksIDApOworCisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Z2NoYXIqKj4o
cmVxdWVzdC0+cHJpdi0+bWltZVR5cGVzLT5wZGF0YSk7Cit9CisKKy8qKgorICogd2Via2l0X2Zp
bGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9taW1lX3R5cGVzX2ZpbHRlcjoKKyAqIEByZXF1ZXN0OiBh
ICNXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QKKyAqCisgKiBHZXQgdGhlIGZpbHRlciBjdXJyZW50
bHkgYXNzb2NpYXRlZCB3aXRoIHRoZSByZXF1ZXN0LCByZWFkeSB0byBiZQorICogdXNlZCBieSAj
R3RrRmlsZUNob29zZXIuIFRoaXMgZnVuY3Rpb24gc2hvdWxkIG5vcm1hbGx5IGJlIGNhbGxlZAor
ICogYmVmb3JlIHByZXNlbnRpbmcgdGhlIGZpbGUgY2hvb3NlciBkaWFsb2cgdG8gdGhlIHVzZXIs
IHRvIGRlY2lkZQorICogd2hldGhlciB0byBhcHBseSBhIGZpbHRlciBzbyB0aGUgdXNlciB3b3Vs
ZCBub3QgYmUgYWxsb3dlZCB0bworICogc2VsZWN0IGZpbGVzIHdpdGggb3RoZXIgTUlNRSB0eXBl
cy4KKyAqCisgKiBTZWUgd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9taW1lX3R5cGVz
KCkgaWYgeW91IGFyZQorICogaW50ZXJlc3RlZCBpbiBnZXR0aW5nIHRoZSBsaXN0IG9mIGFjY2Vw
dGVkIE1JTUUgdHlwZXMuCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiBhICNHdGtG
aWxlRmlsdGVyIGlmIGEgbGlzdCBvZiBhY2NlcHRlZAorICogTUlNRSB0eXBlcyBpcyBkZWZpbmVk
IG9yICVOVUxMIG90aGVyd2lzZS4gVGhlIHJldHVybmVkIG9iamVjdCBpcworICogb3duZWQgYnkg
V2ViS2l0R1RLKyBzaG91bGQgbm90IGJlIG1vZGlmaWVkIG9yIGZyZWVkLgorICovCitHdGtGaWxl
RmlsdGVyKiB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X21pbWVfdHlwZXNfZmlsdGVy
KFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCogcmVxdWVzdCkKK3sKKyAgICBnX3JldHVybl92YWxf
aWZfZmFpbChXRUJLSVRfSVNfRklMRV9DSE9PU0VSX1JFUVVFU1QocmVxdWVzdCksIDApOworICAg
IGlmIChyZXF1ZXN0LT5wcml2LT5maWx0ZXIpCisgICAgICAgIHJldHVybiByZXF1ZXN0LT5wcml2
LT5maWx0ZXIuZ2V0KCk7CisKKyAgICBGaWxlQ2hvb3NlclNldHRpbmdzIHNldHRpbmdzID0gcmVx
dWVzdC0+cHJpdi0+Y2hvb3Nlci0+c2V0dGluZ3MoKTsKKyAgICBzaXplX3QgbnVtT2ZNaW1lVHlw
ZXMgPSBzZXR0aW5ncy5hY2NlcHRNSU1FVHlwZXMuc2l6ZSgpOworICAgIGlmICghbnVtT2ZNaW1l
VHlwZXMpCisgICAgICAgIHJldHVybiAwOworCisgICAgLy8gRG8gbm90IHVzZSBhZG9wdEdSZWYg
aGVyZSwgc2luY2Ugd2Ugd2FudCB0byBzaW5rIHRoZSBmbG9hdGluZworICAgIC8vIHJlZmVyZW5j
ZSBmb3IgdGhlIG5ldyBpbnN0YW5jZSBvZiBHdGtGaWxlRmlsdGVyLCBzbyB3ZSBtYWtlCisgICAg
Ly8gc3VyZSB3ZSBrZWVwIHRoZSBvd25lcnNoaXAgZHVyaW5nIHRoZSBsaWZldGltZSBvZiB0aGUg
cmVxdWVzdC4KKyAgICByZXF1ZXN0LT5wcml2LT5maWx0ZXIgPSBndGtfZmlsZV9maWx0ZXJfbmV3
KCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1PZk1pbWVUeXBlczsgKytpKSB7Cisg
ICAgICAgIFN0cmluZyBtaW1lVHlwZVN0cmluZyA9IHNldHRpbmdzLmFjY2VwdE1JTUVUeXBlc1tp
XTsKKyAgICAgICAgaWYgKG1pbWVUeXBlU3RyaW5nLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICBndGtfZmlsZV9maWx0ZXJfYWRkX21pbWVfdHlwZShyZXF1ZXN0LT5w
cml2LT5maWx0ZXIuZ2V0KCksIG1pbWVUeXBlU3RyaW5nLnV0ZjgoKS5kYXRhKCkpOworICAgIH0K
KworICAgIHJldHVybiByZXF1ZXN0LT5wcml2LT5maWx0ZXIuZ2V0KCk7Cit9CisKKy8qKgorICog
d2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9zZWxlY3RfbXVsdGlwbGU6CisgKiBAcmVx
dWVzdDogYSAjV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0CisgKgorICogRGV0ZXJtaW5lIHdoZXRo
ZXIgdGhlIGZpbGUgY2hvb3NlciBhc3NvY2lhdGVkIHRvIHRoaXMKKyAqICNXZWJLaXRGaWxlQ2hv
b3NlclJlcXVlc3Qgc2hvdWxkIGFsbG93IHNlbGVjdGluZyBtdWx0aXBsZSBmaWxlcywKKyAqIHdo
aWNoIGRlcGVuZHMgb24gdGhlIEhUTUwgaW5wdXQgZWxlbWVudCBoYXZpbmcgYSAnbXVsdGlwbGUn
CisgKiBhdHRyaWJ1dGUgZGVmaW5lZC4KKyAqCisgKiBSZXR1cm5zOiAlVFJVRSBpZiB0aGUgZmls
ZSBjaG9vc2VyIHNob3VsZCBhbGxvdyBzZWxlY3RpbmcgbXVsdGlwbGUgZmlsZXMgb3IgJUZBTFNF
IG90aGVyd2lzZS4KKyAqLworZ2Jvb2xlYW4gd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dl
dF9zZWxlY3RfbXVsdGlwbGUoV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0KiByZXF1ZXN0KQorewor
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19GSUxFX0NIT09TRVJfUkVRVUVTVChy
ZXF1ZXN0KSwgRkFMU0UpOworICAgIHJldHVybiByZXF1ZXN0LT5wcml2LT5jaG9vc2VyLT5zZXR0
aW5ncygpLmFsbG93c011bHRpcGxlRmlsZXM7Cit9CisKKy8qKgorICogd2Via2l0X2ZpbGVfY2hv
b3Nlcl9yZXF1ZXN0X3NlbGVjdF9maWxlczoKKyAqIEByZXF1ZXN0OiBhICNXZWJLaXRGaWxlQ2hv
b3NlclJlcXVlc3QKKyAqIEBmaWxlczogKGFycmF5IHplcm8tdGVybWluYXRlZD0xKSAodHJhbnNm
ZXIgbm9uZSk6IGEKKyAqICVOVUxMLXRlcm1pbmF0ZWQgYXJyYXkgb2Ygc3RyaW5ncywgY29udGFp
bmluZyBwYXRocyB0byBsb2NhbCBmaWxlcy4KKyAqCisgKiBBc2sgV2ViS2l0IHRvIHNlbGVjdCBs
b2NhbCBmaWxlcyBmb3IgdXBsb2FkIGFuZCBjb21wbGV0ZSB0aGUKKyAqIHJlcXVlc3QuCisgKi8K
K3ZvaWQgd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X3NlbGVjdF9maWxlcyhXZWJLaXRGaWxl
Q2hvb3NlclJlcXVlc3QqIHJlcXVlc3QsIGNvbnN0IGdjaGFyKiBjb25zdCogZmlsZXMpCit7Cisg
ICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfRklMRV9DSE9PU0VSX1JFUVVFU1QocmVxdWVz
dCkpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoZmlsZXMpOworCisgICAgVmVjdG9yPFN0cmluZz4g
bmFtZXM7CisgICAgR1JlZlB0cjxHUHRyQXJyYXk+IHNlbGVjdGVkRmlsZXMgPSBhZG9wdEdSZWYo
Z19wdHJfYXJyYXlfbmV3X3dpdGhfZnJlZV9mdW5jKGdfZnJlZSkpOworCisgICAgZm9yIChpbnQg
aSA9IDA7IGZpbGVzW2ldOyBpKyspIHsKKyAgICAgICAgbmFtZXMuYXBwZW5kKGZpbGVuYW1lVG9T
dHJpbmcoZmlsZXNbaV0pKTsKKyAgICAgICAgZ19wdHJfYXJyYXlfYWRkKHNlbGVjdGVkRmlsZXMu
Z2V0KCksIGdfc3RyZHVwKGZpbGVzW2ldKSk7CisgICAgfQorCisgICAgZ19wdHJfYXJyYXlfYWRk
KHNlbGVjdGVkRmlsZXMuZ2V0KCksIDApOworICAgIHJlcXVlc3QtPnByaXYtPmNob29zZXItPmNo
b29zZUZpbGVzKG5hbWVzKTsKKyAgICByZXF1ZXN0LT5wcml2LT5zZWxlY3RlZEZpbGVzID0gc2Vs
ZWN0ZWRGaWxlczsKK30KKworLyoqCisgKiB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0
X3NlbGVjdGVkX2ZpbGVzOgorICogQHJlcXVlc3Q6IGEgI1dlYktpdEZpbGVDaG9vc2VyUmVxdWVz
dAorICoKKyAqIEdldCB0aGUgbGlzdCBvZiBzZWxlY3RlZCBmaWxlcyBjdXJyZW50bHkgYXNzb2Np
YXRlZCB0byB0aGUKKyAqIHJlcXVlc3QuIEluaXRpYWxseSwgdGhlIHJldHVybiB2YWx1ZSBvZiB0
aGlzIG1ldGhvZCBjb250YWlucyBhbnkKKyAqIGZpbGVzIHNlbGVjdGVkIGluIHByZXZpb3VzIGZp
bGUgY2hvb3NlciByZXF1ZXN0cyBmb3IgdGhpcyBIVE1MCisgKiBpbnB1dCBlbGVtZW50LiBPbmNl
IHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9zZWxlY3RfZmlsZXMsIHRoZQorICogdmFsdWUg
d2lsbCByZWZsZWN0IHdoYXRldmVyIGZpbGVzIGFyZSBnaXZlbi4KKyAqCisgKiBUaGlzIGZ1bmN0
aW9uIHNob3VsZCBub3JtYWxseSBiZSBjYWxsZWQgb25seSBiZWZvcmUgcHJlc2VudGluZyB0aGUK
KyAqIGZpbGUgY2hvb3NlciBkaWFsb2cgdG8gdGhlIHVzZXIsIHRvIGRlY2lkZSB3aGV0aGVyIHRv
IHBlcmZvcm0gc29tZQorICogZXh0cmEgYWN0aW9uLCBsaWtlIHByZS1zZWxlY3RpbmcgdGhlIGZp
bGVzIGZyb20gYSBwcmV2aW91cyByZXF1ZXN0LgorICoKKyAqIFJldHVybnM6IChhcnJheSB6ZXJv
LXRlcm1pbmF0ZWQ9MSkgKHRyYW5zZmVyIG5vbmUpOiBhCisgKiAlTlVMTC10ZXJtaW5hdGVkIGFy
cmF5IG9mIHN0cmluZ3MgaWYgdGhlcmUgYXJlIHNlbGVjdGVkIGZpbGVzCisgKiBhc3NvY2lhdGVk
IHdpdGggdGhlIHJlcXVlc3Qgb3IgJU5VTEwgb3RoZXJ3aXNlLiBUaGlzIGFycmF5IGFuZCBpdHMK
KyAqIGNvbnRlbnRzIGFyZSBvd25lZCBieSBXZWJLaXRHVEsrIGFuZCBzaG91bGQgbm90IGJlIG1v
ZGlmaWVkIG9yCisgKiBmcmVlZC4KKyAqLworY29uc3QgZ2NoYXIqIGNvbnN0KiB3ZWJraXRfZmls
ZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X3NlbGVjdGVkX2ZpbGVzKFdlYktpdEZpbGVDaG9vc2VyUmVx
dWVzdCogcmVxdWVzdCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfRklM
RV9DSE9PU0VSX1JFUVVFU1QocmVxdWVzdCksIDApOworICAgIGlmIChyZXF1ZXN0LT5wcml2LT5z
ZWxlY3RlZEZpbGVzKQorICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxnY2hhcioqPihy
ZXF1ZXN0LT5wcml2LT5zZWxlY3RlZEZpbGVzLT5wZGF0YSk7CisKKyAgICBGaWxlQ2hvb3NlclNl
dHRpbmdzIHNldHRpbmdzID0gcmVxdWVzdC0+cHJpdi0+Y2hvb3Nlci0+c2V0dGluZ3MoKTsKKyAg
ICBzaXplX3QgbnVtT2ZGaWxlcyA9IHNldHRpbmdzLnNlbGVjdGVkRmlsZXMuc2l6ZSgpOworICAg
IGlmICghbnVtT2ZGaWxlcykKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXF1ZXN0LT5wcml2
LT5zZWxlY3RlZEZpbGVzID0gYWRvcHRHUmVmKGdfcHRyX2FycmF5X25ld193aXRoX2ZyZWVfZnVu
YyhnX2ZyZWUpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bU9mRmlsZXM7ICsraSkg
eworICAgICAgICBpZiAoc2V0dGluZ3Muc2VsZWN0ZWRGaWxlc1tpXS5pc0VtcHR5KCkpCisgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgQ1N0cmluZyBmaWxlbmFtZSA9IGZpbGVTeXN0ZW1S
ZXByZXNlbnRhdGlvbihzZXR0aW5ncy5zZWxlY3RlZEZpbGVzW2ldKTsKKyAgICAgICAgZ19wdHJf
YXJyYXlfYWRkKHJlcXVlc3QtPnByaXYtPnNlbGVjdGVkRmlsZXMuZ2V0KCksIGdfc3RyZHVwKGZp
bGVuYW1lLmRhdGEoKSkpOworICAgIH0KKyAgICBnX3B0cl9hcnJheV9hZGQocmVxdWVzdC0+cHJp
di0+c2VsZWN0ZWRGaWxlcy5nZXQoKSwgMCk7CisKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2Fz
dDxnY2hhcioqPihyZXF1ZXN0LT5wcml2LT5zZWxlY3RlZEZpbGVzLT5wZGF0YSk7Cit9CkluZGV4
OiBTb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZmlsZWNob29zZXJyZXF1ZXN0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGZpbGVjaG9vc2VycmVx
dWVzdC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGZp
bGVjaG9vc2VycmVxdWVzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzEgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiB3ZWJraXRmaWxlY2hvb3Nl
cnJlcXVlc3RfaAorI2RlZmluZSB3ZWJraXRmaWxlY2hvb3NlcnJlcXVlc3RfaAorCisjaW5jbHVk
ZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUgPHdlYmtpdC93ZWJraXRkZWZpbmVzLmg+CisKK0dfQkVH
SU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfVFlQRV9GSUxFX0NIT09TRVJfUkVRVUVTVCAgICAg
ICAgICAgICh3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X3R5cGUoKSkKKyNkZWZpbmUg
V0VCS0lUX0ZJTEVfQ0hPT1NFUl9SRVFVRVNUKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNL
X0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9UWVBFX0ZJTEVfQ0hPT1NFUl9SRVFVRVNULCBX
ZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QpKQorI2RlZmluZSBXRUJLSVRfRklMRV9DSE9PU0VSX1JF
UVVFU1RfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAg
V0VCS0lUX1RZUEVfRklMRV9DSE9PU0VSX1JFUVVFU1QsIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVz
dENsYXNzKSkKKyNkZWZpbmUgV0VCS0lUX0lTX0ZJTEVfQ0hPT1NFUl9SRVFVRVNUKG9iaikgICAg
ICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9UWVBFX0ZJTEVf
Q0hPT1NFUl9SRVFVRVNUKSkKKyNkZWZpbmUgV0VCS0lUX0lTX0ZJTEVfQ0hPT1NFUl9SRVFVRVNU
X0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9U
WVBFX0ZJTEVfQ0hPT1NFUl9SRVFVRVNUKSkKKyNkZWZpbmUgV0VCS0lUX0ZJTEVfQ0hPT1NFUl9S
RVFVRVNUX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwg
IFdFQktJVF9UWVBFX0ZJTEVfQ0hPT1NFUl9SRVFVRVNULCBXZWJLaXRGaWxlQ2hvb3NlclJlcXVl
c3RDbGFzcykpCisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QgICAg
ICAgIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdDsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRGaWxl
Q2hvb3NlclJlcXVlc3RDbGFzcyAgIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdENsYXNzOwordHlw
ZWRlZiBzdHJ1Y3QgX1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdFByaXZhdGUgV2ViS2l0RmlsZUNo
b29zZXJSZXF1ZXN0UHJpdmF0ZTsKKworc3RydWN0IF9XZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3Qg
eworICAgIEdPYmplY3QgcGFyZW50OworCisgICAgLyo8IHByaXZhdGUgPiovCisgICAgV2ViS2l0
RmlsZUNob29zZXJSZXF1ZXN0UHJpdmF0ZSAqcHJpdjsKK307CisKK3N0cnVjdCBfV2ViS2l0Rmls
ZUNob29zZXJSZXF1ZXN0Q2xhc3MgeworICAgIEdPYmplY3RDbGFzcyBwYXJlbnRfY2xhc3M7Cit9
OworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X3R5
cGUgICAgICAgICAgICAgICAgICAodm9pZCk7CisKK1dFQktJVF9BUEkgY29uc3QgZ2NoYXIgKiBj
b25zdCAqCit3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X21pbWVfdHlwZXMgICAgICAg
IChXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QgKnJlcXVlc3QpOworCitXRUJLSVRfQVBJIEd0a0Zp
bGVGaWx0ZXIgKgord2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9taW1lX3R5cGVzX2Zp
bHRlciAoV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0ICpyZXF1ZXN0KTsKKworV0VCS0lUX0FQSSBn
Ym9vbGVhbgord2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9zZWxlY3RfbXVsdGlwbGUg
ICAoV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0ICpyZXF1ZXN0KTsKKworV0VCS0lUX0FQSSB2b2lk
Cit3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3Rfc2VsZWN0X2ZpbGVzICAgICAgICAgIChXZWJL
aXRGaWxlQ2hvb3NlclJlcXVlc3QgKnJlcXVlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAqIGNvbnN0ICAgICAgKmZpbGVz
KTsKKworV0VCS0lUX0FQSSBjb25zdCBnY2hhciAqIGNvbnN0ICoKK3dlYmtpdF9maWxlX2Nob29z
ZXJfcmVxdWVzdF9nZXRfc2VsZWN0ZWRfZmlsZXMgICAgKFdlYktpdEZpbGVDaG9vc2VyUmVxdWVz
dCAqcmVxdWVzdCk7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZgpJbmRleDogU291cmNlL1dlYktp
dC9ndGsvd2Via2l0L3dlYmtpdGZpbGVjaG9vc2VycmVxdWVzdHByaXZhdGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZmlsZWNob29zZXJyZXF1ZXN0cHJp
dmF0ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGZp
bGVjaG9vc2VycmVxdWVzdHByaXZhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMwIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgd2Via2l0Zmls
ZWNob29zZXJyZXF1ZXN0cHJpdmF0ZV9oCisjZGVmaW5lIHdlYmtpdGZpbGVjaG9vc2VycmVxdWVz
dHByaXZhdGVfaAorCisjaW5jbHVkZSAiRmlsZUNob29zZXIuaCIKKyNpbmNsdWRlICJ3ZWJraXRm
aWxlY2hvb3NlcnJlcXVlc3QuaCIKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK1dlYktp
dEZpbGVDaG9vc2VyUmVxdWVzdCogd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2NyZWF0ZShQ
YXNzUmVmUHRyPEZpbGVDaG9vc2VyPiBjaG9vc2VyKTsKKworI2VuZGlmCkluZGV4OiBTb3VyY2Uv
V2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwCShyZXZpc2lvbiAxMTk5NDYpCisr
KyBTb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTIxNiw2ICsyMTYsNyBAQCBlbnVtIHsKICAgICBFTlRFUklOR19GVUxMU0NSRUVOLAog
ICAgIExFQVZJTkdfRlVMTFNDUkVFTiwKICAgICBDT05URVhUX01FTlUsCisgICAgUlVOX0ZJTEVf
Q0hPT1NFUiwKIAogICAgIExBU1RfU0lHTkFMCiB9OwpAQCAtMTI5NCw2ICsxMjk1LDQ4IEBAIHN0
YXRpYyBnYm9vbGVhbiB3ZWJraXRfd2ViX3ZpZXdfcmVhbF9sZWEKICAgICByZXR1cm4gRkFMU0U7
CiB9CiAKK3N0YXRpYyB2b2lkIGZpbGVDaG9vc2VyRGlhbG9nUmVzcG9uc2VDYWxsYmFjayhHdGtE
aWFsb2cqIGRpYWxvZywgZ2ludCByZXNwb25zZUlELCBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3Qq
IHJlcXVlc3QpCit7CisgICAgR1JlZlB0cjxXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3Q+IGFkb3B0
ZWRSZXF1ZXN0ID0gYWRvcHRHUmVmKHJlcXVlc3QpOworICAgIGlmIChyZXNwb25zZUlEID09IEdU
S19SRVNQT05TRV9BQ0NFUFQpIHsKKyAgICAgICAgR093blB0cjxHU0xpc3Q+IGZpbGVzTGlzdChn
dGtfZmlsZV9jaG9vc2VyX2dldF9maWxlbmFtZXMoR1RLX0ZJTEVfQ0hPT1NFUihkaWFsb2cpKSk7
CisgICAgICAgIEdSZWZQdHI8R1B0ckFycmF5PiBmaWxlc0FycmF5ID0gYWRvcHRHUmVmKGdfcHRy
X2FycmF5X25ldygpKTsKKyAgICAgICAgZm9yIChHU0xpc3QqIGZpbGUgPSBmaWxlc0xpc3QuZ2V0
KCk7IGZpbGU7IGZpbGUgPSBnX3NsaXN0X25leHQoZmlsZSkpCisgICAgICAgICAgICBnX3B0cl9h
cnJheV9hZGQoZmlsZXNBcnJheS5nZXQoKSwgZmlsZS0+ZGF0YSk7CisgICAgICAgIGdfcHRyX2Fy
cmF5X2FkZChmaWxlc0FycmF5LmdldCgpLCAwKTsKKyAgICAgICAgd2Via2l0X2ZpbGVfY2hvb3Nl
cl9yZXF1ZXN0X3NlbGVjdF9maWxlcyhhZG9wdGVkUmVxdWVzdC5nZXQoKSwgcmVpbnRlcnByZXRf
Y2FzdDxjb25zdCBnY2hhciogY29uc3QqPihmaWxlc0FycmF5LT5wZGF0YSkpOworICAgIH0KKwor
ICAgIGd0a193aWRnZXRfZGVzdHJveShHVEtfV0lER0VUKGRpYWxvZykpOworfQorCitzdGF0aWMg
Z2Jvb2xlYW4gd2Via2l0V2ViVmlld1JlYWxSdW5GaWxlQ2hvb3NlcihXZWJLaXRXZWJWaWV3KiB3
ZWJWaWV3LCBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QqIHJlcXVlc3QpCit7CisgICAgR3RrV2lk
Z2V0KiB0b3BsZXZlbCA9IGd0a193aWRnZXRfZ2V0X3RvcGxldmVsKEdUS19XSURHRVQod2ViVmll
dykpOworICAgIGlmICghd2lkZ2V0SXNPbnNjcmVlblRvcGxldmVsV2luZG93KHRvcGxldmVsKSkK
KyAgICAgICAgdG9wbGV2ZWwgPSAwOworCisgICAgZ2Jvb2xlYW4gYWxsb3dzTXVsdGlwbGVTZWxl
Y3Rpb24gPSB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X3NlbGVjdF9tdWx0aXBsZShy
ZXF1ZXN0KTsKKyAgICBHdGtXaWRnZXQqIGRpYWxvZyA9IGd0a19maWxlX2Nob29zZXJfZGlhbG9n
X25ldyhhbGxvd3NNdWx0aXBsZVNlbGVjdGlvbiA/IF8oIlNlbGVjdCBGaWxlcyIpIDogXygiU2Vs
ZWN0IEZpbGUiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0b3BsZXZlbCA/IEdUS19XSU5ET1codG9wbGV2ZWwpIDogMCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHVEtfRklMRV9DSE9PU0VS
X0FDVElPTl9PUEVOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEdUS19TVE9DS19DQU5DRUwsIEdUS19SRVNQT05TRV9DQU5DRUwsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1RLX1NUT0NLX09Q
RU4sIEdUS19SRVNQT05TRV9BQ0NFUFQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CisKKyAgICBpZiAoR3RrRmlsZUZpbHRlciogZmls
dGVyID0gd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9taW1lX3R5cGVzX2ZpbHRlcihy
ZXF1ZXN0KSkKKyAgICAgICAgZ3RrX2ZpbGVfY2hvb3Nlcl9zZXRfZmlsdGVyKEdUS19GSUxFX0NI
T09TRVIoZGlhbG9nKSwgZmlsdGVyKTsKKyAgICBndGtfZmlsZV9jaG9vc2VyX3NldF9zZWxlY3Rf
bXVsdGlwbGUoR1RLX0ZJTEVfQ0hPT1NFUihkaWFsb2cpLCBhbGxvd3NNdWx0aXBsZVNlbGVjdGlv
bik7CisKKyAgICBpZiAoY29uc3QgZ2NoYXIqIGNvbnN0KiBzZWxlY3RlZEZpbGVzID0gd2Via2l0
X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9zZWxlY3RlZF9maWxlcyhyZXF1ZXN0KSkKKyAgICAg
ICAgZ3RrX2ZpbGVfY2hvb3Nlcl9zZWxlY3RfZmlsZW5hbWUoR1RLX0ZJTEVfQ0hPT1NFUihkaWFs
b2cpLCBzZWxlY3RlZEZpbGVzWzBdKTsKKworICAgIGdfc2lnbmFsX2Nvbm5lY3QoZGlhbG9nLCAi
cmVzcG9uc2UiLCBHX0NBTExCQUNLKGZpbGVDaG9vc2VyRGlhbG9nUmVzcG9uc2VDYWxsYmFjayks
IGdfb2JqZWN0X3JlZihyZXF1ZXN0KSk7CisgICAgZ3RrX3dpZGdldF9zaG93KGRpYWxvZyk7CisK
KyAgICByZXR1cm4gVFJVRTsKK30KKwogc3RhdGljIHZvaWQgd2Via2l0X3dlYl92aWV3X2Rpc3Bv
c2UoR09iamVjdCogb2JqZWN0KQogewogICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcgPSBXRUJL
SVRfV0VCX1ZJRVcob2JqZWN0KTsKQEAgLTI1NDcsNiArMjU5MCwzNyBAQCBzdGF0aWMgdm9pZCB3
ZWJraXRfd2ViX3ZpZXdfY2xhc3NfaW5pdChXCiAgICAgICAgICAgICBHX1RZUEVfTk9ORSwgMSwK
ICAgICAgICAgICAgIFdFQktJVF9UWVBFX1dFQl9GUkFNRSk7CiAKKyAgICAgLyoqCisgICAgICog
V2ViS2l0V2ViVmlldzo6cnVuLWZpbGUtY2hvb3NlcjoKKyAgICAgKiBAd2ViX3ZpZXc6IHRoZSAj
V2ViS2l0V2ViVmlldyBvbiB3aGljaCB0aGUgc2lnbmFsIGlzIGVtaXR0ZWQKKyAgICAgKiBAcmVx
dWVzdDogYSAjV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0CisgICAgICoKKyAgICAgKiBUaGlzIHNp
Z25hbCBpcyBlbWl0dGVkIHdoZW4gdGhlIHVzZXIgaW50ZXJhY3RzIHdpdGggYSAmbHQ7aW5wdXQK
KyAgICAgKiB0eXBlPSdmaWxlJyAvJmd0OyBIVE1MIGVsZW1lbnQsIHJlcXVlc3RpbmcgZnJvbSBX
ZWJLaXQgdG8gc2hvdworICAgICAqIGEgZGlhbG9nIHRvIHNlbGVjdCBvbmUgb3IgbW9yZSBmaWxl
cyB0byBiZSB1cGxvYWRlZC4gVG8gbGV0IHRoZQorICAgICAqIGFwcGxpY2F0aW9uIGtub3cgdGhl
IGRldGFpbHMgb2YgdGhlIGZpbGUgY2hvb3NlciwgYXMgd2VsbCBhcyB0bworICAgICAqIGFsbG93
IHRoZSBjbGllbnQgYXBwbGljYXRpb24gdG8gZWl0aGVyIGNhbmNlbCB0aGUgcmVxdWVzdCBvcgor
ICAgICAqIHBlcmZvcm0gYW4gYWN0dWFsIHNlbGVjdGlvbiBvZiBmaWxlcywgdGhlIHNpZ25hbCB3
aWxsIHBhc3MgYW4KKyAgICAgKiBpbnN0YW5jZSBvZiB0aGUgI1dlYktpdEZpbGVDaG9vc2VyUmVx
dWVzdCBpbiB0aGUgQHJlcXVlc3QKKyAgICAgKiBhcmd1bWVudC4KKyAgICAgKgorICAgICAqIFRo
ZSBkZWZhdWx0IHNpZ25hbCBoYW5kbGVyIHdpbGwgYXN5bmNocm9ub3VzbHkgcnVuIGEgcmVndWxh
cgorICAgICAqICNHdGtGaWxlQ2hvb3NlckRpYWxvZyBmb3IgdGhlIHVzZXIgdG8gaW50ZXJhY3Qg
d2l0aC4KKyAgICAgKgorICAgICAqIFJldHVybnM6ICVUUlVFIHRvIHN0b3Agb3RoZXIgaGFuZGxl
cnMgZnJvbSBiZWluZyBpbnZva2VkIGZvciB0aGUgZXZlbnQuCisgICAgICogICAlRkFMU0UgdG8g
cHJvcGFnYXRlIHRoZSBldmVudCBmdXJ0aGVyLgorICAgICAqCisgICAgICovCisgICAgd2Via2l0
X3dlYl92aWV3X3NpZ25hbHNbUlVOX0ZJTEVfQ0hPT1NFUl0gPQorICAgICAgICBnX3NpZ25hbF9u
ZXcoInJ1bi1maWxlLWNob29zZXIiLAorICAgICAgICAgICAgICAgICAgICAgR19UWVBFX0ZST01f
Q0xBU1Mod2ViVmlld0NsYXNzKSwKKyAgICAgICAgICAgICAgICAgICAgIEdfU0lHTkFMX1JVTl9M
QVNULAorICAgICAgICAgICAgICAgICAgICAgR19TVFJVQ1RfT0ZGU0VUKFdlYktpdFdlYlZpZXdD
bGFzcywgcnVuX2ZpbGVfY2hvb3NlciksCisgICAgICAgICAgICAgICAgICAgICBnX3NpZ25hbF9h
Y2N1bXVsYXRvcl90cnVlX2hhbmRsZWQsIDAgLyogYWNjdW11bGF0b3IgZGF0YSAqLywKKyAgICAg
ICAgICAgICAgICAgICAgIHdlYmtpdF9tYXJzaGFsX0JPT0xFQU5fX09CSkVDVCwKKyAgICAgICAg
ICAgICAgICAgICAgIEdfVFlQRV9CT09MRUFOLCAxLCAvKiBudW1iZXIgb2YgcGFyYW1ldGVycyAq
LworICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX1RZUEVfRklMRV9DSE9PU0VSX1JFUVVFU1Qp
OworCiAgICAgd2Via2l0X3dlYl92aWV3X3NpZ25hbHNbU0hPVUxEX0JFR0lOX0VESVRJTkddID0g
Z19zaWduYWxfbmV3KCJzaG91bGQtYmVnaW4tZWRpdGluZyIsCiAgICAgICAgIEdfVFlQRV9GUk9N
X0NMQVNTKHdlYlZpZXdDbGFzcyksIHN0YXRpY19jYXN0PEdTaWduYWxGbGFncz4oR19TSUdOQUxf
UlVOX0xBU1QgfCBHX1NJR05BTF9BQ1RJT04pLAogICAgICAgICBHX1NUUlVDVF9PRkZTRVQoV2Vi
S2l0V2ViVmlld0NsYXNzLCBzaG91bGRfYWxsb3dfZWRpdGluZ19hY3Rpb24pLCBnX3NpZ25hbF9h
Y2N1bXVsYXRvcl9maXJzdF93aW5zLCAwLApAQCAtMjg1Niw2ICsyOTMwLDcgQEAgc3RhdGljIHZv
aWQgd2Via2l0X3dlYl92aWV3X2NsYXNzX2luaXQoVwogICAgIHdlYlZpZXdDbGFzcy0+c2hvdWxk
X2FsbG93X2VkaXRpbmdfYWN0aW9uID0gd2Via2l0X3dlYl92aWV3X3JlYWxfc2hvdWxkX2FsbG93
X2VkaXRpbmdfYWN0aW9uOwogICAgIHdlYlZpZXdDbGFzcy0+ZW50ZXJpbmdfZnVsbHNjcmVlbiA9
IHdlYmtpdF93ZWJfdmlld19yZWFsX2VudGVyaW5nX2Z1bGxzY3JlZW47CiAgICAgd2ViVmlld0Ns
YXNzLT5sZWF2aW5nX2Z1bGxzY3JlZW4gPSB3ZWJraXRfd2ViX3ZpZXdfcmVhbF9sZWF2aW5nX2Z1
bGxzY3JlZW47CisgICAgd2ViVmlld0NsYXNzLT5ydW5fZmlsZV9jaG9vc2VyID0gd2Via2l0V2Vi
Vmlld1JlYWxSdW5GaWxlQ2hvb3NlcjsKIAogICAgIEdPYmplY3RDbGFzcyogb2JqZWN0Q2xhc3Mg
PSBHX09CSkVDVF9DTEFTUyh3ZWJWaWV3Q2xhc3MpOwogICAgIG9iamVjdENsYXNzLT5kaXNwb3Nl
ID0gd2Via2l0X3dlYl92aWV3X2Rpc3Bvc2U7CkBAIC0zNjEwLDYgKzM2ODUsMTIgQEAgR3RrV2lk
Z2V0KiB3ZWJraXRfd2ViX3ZpZXdfbmV3KHZvaWQpCiAgICAgcmV0dXJuIEdUS19XSURHRVQod2Vi
Vmlldyk7CiB9CiAKK3ZvaWQgd2Via2l0X3dlYl92aWV3X3J1bl9maWxlX2Nob29zZXJfcmVxdWVz
dChXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QqIHJlcXVl
c3QpCit7CisgICAgZ2Jvb2xlYW4gcmV0dXJuVmFsdWU7CisgICAgZ19zaWduYWxfZW1pdCh3ZWJW
aWV3LCB3ZWJraXRfd2ViX3ZpZXdfc2lnbmFsc1tSVU5fRklMRV9DSE9PU0VSXSwgMCwgcmVxdWVz
dCwgJnJldHVyblZhbHVlKTsKK30KKwogLy8gZm9yIGludGVybmFsIHVzZSBvbmx5CiB2b2lkIHdl
YmtpdF93ZWJfdmlld19ub3RpZnlfcmVhZHkoV2ViS2l0V2ViVmlldyogd2ViVmlldykKIHsKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuaAkocmV2aXNpb24gMTE5
OTQ2KQorKysgU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogCiAjaW5jbHVkZSA8d2Via2l0L3dlYmtpdGRlZmlu
ZXMuaD4KICNpbmNsdWRlIDx3ZWJraXQvd2Via2l0ZG9tLmg+CisjaW5jbHVkZSA8d2Via2l0L3dl
YmtpdGZpbGVjaG9vc2VycmVxdWVzdC5oPgogI2luY2x1ZGUgPHdlYmtpdC93ZWJraXR3ZWJiYWNr
Zm9yd2FyZGxpc3QuaD4KICNpbmNsdWRlIDx3ZWJraXQvd2Via2l0d2ViZnJhbWUuaD4KICNpbmNs
dWRlIDx3ZWJraXQvd2Via2l0d2ViaGlzdG9yeWl0ZW0uaD4KQEAgLTE2NSw2ICsxNjYsOCBAQCBz
dHJ1Y3QgX1dlYktpdFdlYlZpZXdDbGFzcyB7CiAgICAgZ2Jvb2xlYW4gICAgICAgICAgICAgICAg
ICAgKCogbW92ZV9jdXJzb3IpICAgICAgICAgICAgKFdlYktpdFdlYlZpZXcgICAgICAgICp3ZWJf
dmlldywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR3RrTW92ZW1lbnRTdGVwICAgICAgIHN0ZXAsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQgICAgICAgICAgICAg
ICAgICBjb3VudCk7CisgICAgZ2Jvb2xlYW4gICAgICAgICAgICAgICAgICAgKCogcnVuX2ZpbGVf
Y2hvb3NlcikgICAgICAgKFdlYktpdFdlYlZpZXcgICAgICAgICAgICAqd2ViX3ZpZXcsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdl
YktpdEZpbGVDaG9vc2VyUmVxdWVzdCAqcmVxdWVzdCk7CiAKICAgICAvKgogICAgICAqIGludGVy
bmFsCkluZGV4OiBTb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlld3ByaXZhdGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlld3By
aXZhdGUuaAkocmV2aXNpb24gMTE5OTQ2KQorKysgU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dl
YmtpdHdlYnZpZXdwcml2YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEzNyw2ICsxMzcsOCBAQCBH
dGtNZW51KiB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2NvbnRleHRfbWVuCiB2b2lkIHdlYlZpZXdFbnRl
ckZ1bGxzY3JlZW4oV2ViS2l0V2ViVmlldyogd2ViVmlldywgV2ViQ29yZTo6Tm9kZSopOwogdm9p
ZCB3ZWJWaWV3RXhpdEZ1bGxzY3JlZW4oV2ViS2l0V2ViVmlldyogd2ViVmlldyk7CiAKK3ZvaWQg
d2Via2l0X3dlYl92aWV3X3J1bl9maWxlX2Nob29zZXJfcmVxdWVzdChXZWJLaXRXZWJWaWV3Kiwg
V2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0Kik7CisKICNpZiBFTkFCTEUoSUNPTkRBVEFCQVNFKQog
dm9pZCB3ZWJraXRXZWJWaWV3UmVnaXN0ZXJGb3JJY29uTm90aWZpY2F0aW9uKFdlYktpdFdlYlZp
ZXcqLCBib29sIHNob3VsZFJlZ2lzdGVyKTsKIHZvaWQgd2Via2l0V2ViVmlld0ljb25Mb2FkZWQo
V2ViS2l0RmF2aWNvbkRhdGFiYXNlKiwgY29uc3QgY2hhciogZnJhbWVVUkksIFdlYktpdFdlYlZp
ZXcqKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>147465</attachid>
            <date>2012-06-13 18:55:08 -0700</date>
            <delta_ts>2012-06-15 13:39:39 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-87283-20120613215507.patch</filename>
            <type>text/plain</type>
            <size>46803</size>
            <attacher name="Daniel Drake">dsd</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L2d0ay9DaGFuZ2VMb2cJKHJldmlzaW9uIDExOTk0NikKKysrIFNvdXJjZS9XZWJLaXQv
Z3RrL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDgyIEBACisyMDEyLTA2LTEw
ICBEYW5pZWwgRHJha2UgIDxkc2RAbGFwdG9wLm9yZz4KKworICAgICAgICBbR1RLXSBCYWNrcG9y
dCBydW4tZmlsZS1jaG9vc2VyIHRvIFdlYktpdDEKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTg3MjgzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgVGhpcyBpcyBhIHJlbGF0aXZlbHkgc3RyYWlnaHRmb3J3YXJk
IGJhY2twb3J0IG9mIE1hcmlvIFNhbmNoZXoKKyAgICAgICAgUHJhZGEncyBXZWJLaXQyIHJ1bi1m
aWxlLWNob29zZXIgc2lnbmFsIHdvcmssIGludGVuZGVkIGZvciB1c2UgYnkKKyAgICAgICAgT0xQ
QyBhbmQgb3RoZXJzIHdobyBhcmUgbm90IHF1aXRlIHJlYWR5IHRvIG1vdmUgdG8gV2ViS2l0Mi4K
KworICAgICAgICBBZGQgYSBuZXcgcHVibGljIGNsYXNzIHRvIHRoZSBBUEksIFdlYktpdEZpbGVD
aG9vc2VyUmVxdWVzdCwgdG8gYmUKKyAgICAgICAgZW1pdHRlZCBhbG9uZyB3aXRoIGEgbmV3IFdl
YktpdFdlYlZpZXc6OnJ1bi1maWxlLWNob29zZXIgc2lnbmFsIHRvCisgICAgICAgIGxldCBjbGll
bnQgYXBwbGljYXRpb25zIHRvIHByb3ZpZGUgdGhlaXIgb3duIGZpbGUgY2hvb3NlciBkaWFsb2cK
KyAgICAgICAgd2hlbiB0aGUgdXNlIGludGVyYWN0cyB3aXRoIEhUTUwgSW5wdXQgZWxlbWVudHMg
b2YgdHlwZSAnZmlsZScuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbTogQWRkZWQgbmV3IHNv
dXJjZSBmaWxlcyBhbmQgaGVhZGVycy4KKyAgICAgICAgKiB3ZWJraXQvd2Via2l0ZmlsZWNob29z
ZXJyZXF1ZXN0LmNwcDogQWRkZWQuCisgICAgICAgIChfV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0
UHJpdmF0ZSk6CisgICAgICAgICh3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfaW5pdCk6Cisg
ICAgICAgICh3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZmluYWxpemUpOgorICAgICAgICAo
d2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9wcm9wZXJ0eSk6CisgICAgICAgICh3ZWJr
aXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfY2xhc3NfaW5pdCk6CisgICAgICAgICh3ZWJraXRfZmls
ZV9jaG9vc2VyX3JlcXVlc3RfY3JlYXRlKToKKyAgICAgICAgKHdlYmtpdF9maWxlX2Nob29zZXJf
cmVxdWVzdF9nZXRfbWltZV90eXBlcyk6CisgICAgICAgICh3ZWJraXRfZmlsZV9jaG9vc2VyX3Jl
cXVlc3RfZ2V0X21pbWVfdHlwZXNfZmlsdGVyKToKKyAgICAgICAgKHdlYmtpdF9maWxlX2Nob29z
ZXJfcmVxdWVzdF9nZXRfc2VsZWN0X211bHRpcGxlKToKKyAgICAgICAgKHdlYmtpdF9maWxlX2No
b29zZXJfcmVxdWVzdF9zZWxlY3RfZmlsZXMpOgorICAgICAgICAod2Via2l0X2ZpbGVfY2hvb3Nl
cl9yZXF1ZXN0X2dldF9zZWxlY3RlZF9maWxlcyk6CisgICAgICAgICogd2Via2l0L3dlYmtpdGZp
bGVjaG9vc2VycmVxdWVzdC5oOiBBZGRlZC4KKyAgICAgICAgKF9XZWJLaXRGaWxlQ2hvb3NlclJl
cXVlc3QpOgorICAgICAgICAoX1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdENsYXNzKToKKyAgICAg
ICAgKiB3ZWJraXQvd2Via2l0ZmlsZWNob29zZXJyZXF1ZXN0cHJpdmF0ZS5oOiBBZGRlZCwgCisg
ICAgICAgIGNvbnRhaW5pbmcgdGhlIHByb3RvdHlwZSBvZiB3ZWJraXRfZmlsZV9jaG9vc2VyX3Jl
cXVlc3RfY3JlYXRlLgorCisgICAgICAgIFByb3ZpZGUgcHJpdmF0ZSBBUEkgdG8gbWFrZSBhIGZp
bGUgY2hvb3NlciByZXF1ZXN0IGZyb20gdGhlCisgICAgICAgIFdlYlZpZXcsIGFuZCBwcm92aWRl
IGEgZGVmYXVsdCBoYW5kbGVyIGZvciBpdC4KKworICAgICAgICAqIHdlYmtpdC93ZWJraXR3ZWJ2
aWV3LmNwcDoKKyAgICAgICAgKGZpbGVDaG9vc2VyRGlhbG9nUmVzcG9uc2VDYWxsYmFjayk6IEhh
bmRsZXIgZm9yIHRoZSAncmVzcG9uc2UnCisgICAgICAgIHNpZ25hbCBmb3IgdGhlIEd0a0ZpbGVD
aG9vc2VyRGlhbG9nIHVzZWQgaW4gdGhlIGRlZmF1bHQKKyAgICAgICAgaGFuZGxlci4gSXQgd2ls
bCBjYWxsIHRvIHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9zZWxlY3RfZmlsZXMKKyAgICAg
ICAgb3Igd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2NhbmNlbCBhcyBuZWVkZWQuCisgICAg
ICAgICh3ZWJraXRXZWJWaWV3UmVhbFJ1bkZpbGVDaG9vc2VyKTogRGVmYXVsdCBoYW5kbGVyIGZv
ciB0aGUgbmV3CisgICAgICAgICdydW4tZmlsZS1jaG9vc2VyJyBzaWduYWwuIEl0IHdpbGwgY3Jl
YXRlIGEgR3RrRmlsZUNob29zZXJEaWFsb2csCisgICAgICAgIGNvbm5lY3QgdG8gdGhlICdyZXNw
b25zZScgc2lnbmFsIGFuZCBzaG93IGl0LgorICAgICAgICAod2Via2l0X3dlYl92aWV3X2NsYXNz
X2luaXQpOiBDb25uZWN0IHRoZSAncnVuLWZpbGUtY2hvb3NlcicKKyAgICAgICAgc2lnbmFsIHRv
IHRoZSBkZWZhdWx0IGhhbmRsZXIsIHdlYmtpdFdlYlZpZXdSdW5GaWxlQ2hvb3Nlci4KKyAgICAg
ICAgKHdlYmtpdF93ZWJfdmlld19uZXcpOgorICAgICAgICAod2Via2l0X3dlYl92aWV3X3J1bl9m
aWxlX2Nob29zZXJfcmVxdWVzdCk6CisgICAgICAgICogd2Via2l0L3dlYmtpdHdlYnZpZXcuaDoK
KyAgICAgICAgKF9XZWJLaXRXZWJWaWV3Q2xhc3MpOiBBZGRlZCBwcm90b3R5cGUgZm9yIHRoZSBo
YW5kbGVyIG9mIHRoZSBuZXcKKyAgICAgICAgJ3J1bi1maWxlLWNob29zZXInIHNpZ25hbC4KKyAg
ICAgICAgKiB3ZWJraXQvd2Via2l0d2Vidmlld3ByaXZhdGUuaDogQWRkZWQgcHJvdG90eXBlIGZv
cgorICAgICAgICBwcml2YXRlIG5ldyBmdW5jdGlvbiB3ZWJraXRXZWJWaWV3UnVuRmlsZUNob29z
ZXJSZXF1ZXN0LgorCisgICAgICAgIFVwZGF0ZSBydW5PcGVuUGFuZWwgdG8gdXNlIHRoZSBuZXcg
QVBJLCBpbmNsdWRpbmcgYSBkZWZhdWx0IGhhbmRsZXIKKyAgICAgICAgd2l0aCBzaW1pbGFyIGJl
aGF2aW91ciB0byBiZWZvcmUuCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGll
bnRHdGsuY3BwOgorICAgICAgICAoV2ViS2l0OjpDaHJvbWVDbGllbnQ6OnJ1bk9wZW5QYW5lbCk6
IE5vdyBjcmVhdGVzIGFuIGluc3RhbmNlIG9mCisgICAgICAgIFdlYktpdEZpbGVDaG9vc2VyUmVx
dWVzdCBhbmQgYXNrcyB0aGUgV2ViVmlldyB0byBlbWl0IHRoZQorICAgICAgICBuZXcgJ3J1bi1m
aWxlLWNob29zZXInIHNpZ25hbCB3aXRoIGl0LgorCisgICAgICAgIEFkZGVkIHRoZSBuZXcgcHVi
bGljIGhlYWRlciB0byB0aGUgbWFpbiBoZWFkZXIuCisKKyAgICAgICAgKiB3ZWJraXQvd2Via2l0
Lmg6IEFkZGVkIHdlYmtpdGZpbGVjaG9vc2VycmVxdWVzdC5oCisKKyAgICAgICAgTmV3IHVuaXQg
dGVzdHMgZm9yIHRoZSBuZXcgV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0IEFQSS4KKworICAgICAg
ICAqIHRlc3RzL3Rlc3R3ZWJ2aWV3LmM6IFZhcmlvdXMgV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0
IHRlc3RzLAorICAgICAgICBpbmNsdWRpbmcgTUlNRSB0eXBlIGZpbHRlcmluZyBhbmQgc2VsZWN0
aW9uIGhhbmRsaW5nLgorCisgICAgICAgIFVwZGF0ZWQgZG9jdW1lbnRhdGlvbiByZWxhdGVkIGZp
bGVzIHdpdGggdGhlIG5ldyBBUEkuCisKKyAgICAgICAgKiBkb2NzL3dlYmtpdGd0ay1kb2NzLnNn
bWw6IEFkZGVkIG5ldyBzZWN0aW9uLgorICAgICAgICAqIGRvY3Mvd2Via2l0Z3RrLXNlY3Rpb25z
LnR4dDogQWRkZWQgbmV3IEFQSS4KKyAgICAgICAgKiBkb2NzL3dlYmtpdGd0ay50eXBlczogQWRk
ZWQgZ2V0X3R5cGUgZnVuY3Rpb24uCisKIDIwMTItMDYtMDcgIFNpbW9uIFBlbmEgIDxzcGVuYUBp
Z2FsaWEuY29tPgogCiAgICAgICAgIFtHVEtdIGRldmljZVNjYWxlRmFjdG9yIHNldHRpbmcgaXMg
bm90IGhvbm9yZWQKSW5kZXg6IFNvdXJjZS9XZWJLaXQvZ3RrL0dOVW1ha2VmaWxlLmFtCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvZ3RrL0dOVW1ha2VmaWxlLmFtCShyZXZpc2lvbiAxMTk5
NDYpCisrKyBTb3VyY2UvV2ViS2l0L2d0ay9HTlVtYWtlZmlsZS5hbQkod29ya2luZyBjb3B5KQpA
QCAtMTE0LDYgKzExNCw3IEBAIHdlYmtpdGd0a19zdGF0aWNfaF9hcGkgKz0gXAogCSQoc3JjZGly
KS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZG93bmxvYWQuaCBcCiAJJChzcmNkaXIp
L1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRlcnJvci5oIFwKIAkkKHNyY2RpcikvU291
cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGZhdmljb25kYXRhYmFzZS5oIFwKKwkkKHNyY2Rp
cikvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGZpbGVjaG9vc2VycmVxdWVzdC5oIFwK
IAkkKHNyY2RpcikvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGdlb2xvY2F0aW9ucG9s
aWN5ZGVjaXNpb24uaCBcCiAJJChzcmNkaXIpL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJr
aXRnbG9iYWxzLmggXAogCSQoc3JjZGlyKS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0
aGl0dGVzdHJlc3VsdC5oIFwKQEAgLTIyMCw2ICsyMjEsOSBAQCB3ZWJraXRndGtfc291cmNlcyAr
PSBcCiAJU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGVycm9yLmNwcCBcCiAJU291cmNl
L1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGZhdmljb25kYXRhYmFzZS5jcHAgXAogCVNvdXJjZS9X
ZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRmYXZpY29uZGF0YWJhc2Vwcml2YXRlLmggXAorCVNvdXJj
ZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRmaWxlY2hvb3NlcnJlcXVlc3QuY3BwIFwKKwlTb3Vy
Y2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZmlsZWNob29zZXJyZXF1ZXN0LmggXAorCVNvdXJj
ZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRmaWxlY2hvb3NlcnJlcXVlc3Rwcml2YXRlLmggXAog
CVNvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRnZW9sb2NhdGlvbnBvbGljeWRlY2lzaW9u
LmNwcCBcCiAJU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGdlb2xvY2F0aW9ucG9saWN5
ZGVjaXNpb25wcml2YXRlLmggXAogCVNvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRnbG9i
YWxzLmNwcCBcCkluZGV4OiBTb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9DaHJvbWVD
bGllbnRHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBw
b3J0L0Nocm9tZUNsaWVudEd0ay5jcHAJKHJldmlzaW9uIDExOTk0NikKKysrIFNvdXJjZS9XZWJL
aXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0ay5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTU1LDYgKzU1LDcgQEAKICNpbmNsdWRlICJXZWJLaXRET01CaW5kaW5nLmgiCiAjaW5jbHVk
ZSAiV2ViS2l0RE9NSFRNTEVsZW1lbnRQcml2YXRlLmgiCiAjaW5jbHVkZSAiV2luZG93RmVhdHVy
ZXMuaCIKKyNpbmNsdWRlICJ3ZWJraXRmaWxlY2hvb3NlcnJlcXVlc3Rwcml2YXRlLmgiCiAjaW5j
bHVkZSAid2Via2l0Z2VvbG9jYXRpb25wb2xpY3lkZWNpc2lvbi5oIgogI2luY2x1ZGUgIndlYmtp
dGdlb2xvY2F0aW9ucG9saWN5ZGVjaXNpb25wcml2YXRlLmgiCiAjaW5jbHVkZSAid2Via2l0bmV0
d29ya3JlcXVlc3QuaCIKQEAgLTgxNSw0MCArODE2LDggQEAgdm9pZCBDaHJvbWVDbGllbnQ6OnJl
YWNoZWRBcHBsaWNhdGlvbkNhYwogCiB2b2lkIENocm9tZUNsaWVudDo6cnVuT3BlblBhbmVsKEZy
YW1lKiwgUGFzc1JlZlB0cjxGaWxlQ2hvb3Nlcj4gcHJwRmlsZUNob29zZXIpCiB7Ci0gICAgUmVm
UHRyPEZpbGVDaG9vc2VyPiBjaG9vc2VyID0gcHJwRmlsZUNob29zZXI7Ci0KLSAgICBHdGtXaWRn
ZXQqIHRvcGxldmVsID0gZ3RrX3dpZGdldF9nZXRfdG9wbGV2ZWwoR1RLX1dJREdFVChtX3dlYlZp
ZXcpKTsKLSAgICBpZiAoIXdpZGdldElzT25zY3JlZW5Ub3BsZXZlbFdpbmRvdyh0b3BsZXZlbCkp
Ci0gICAgICAgIHRvcGxldmVsID0gMDsKLQotICAgIEd0a1dpZGdldCogZGlhbG9nID0gZ3RrX2Zp
bGVfY2hvb3Nlcl9kaWFsb2dfbmV3KF8oIlVwbG9hZCBGaWxlIiksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9wbGV2ZWwgPyBHVEtfV0lORE9X
KHRvcGxldmVsKSA6IDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgR1RLX0ZJTEVfQ0hPT1NFUl9BQ1RJT05fT1BFTiwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHVEtfU1RPQ0tfQ0FOQ0VMLCBH
VEtfUkVTUE9OU0VfQ0FOQ0VMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEdUS19TVE9DS19PUEVOLCBHVEtfUkVTUE9OU0VfQUNDRVBULAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOwot
Ci0gICAgZ3RrX2ZpbGVfY2hvb3Nlcl9zZXRfc2VsZWN0X211bHRpcGxlKEdUS19GSUxFX0NIT09T
RVIoZGlhbG9nKSwgY2hvb3Nlci0+c2V0dGluZ3MoKS5hbGxvd3NNdWx0aXBsZUZpbGVzKTsKLQot
ICAgIGlmIChndGtfZGlhbG9nX3J1bihHVEtfRElBTE9HKGRpYWxvZykpID09IEdUS19SRVNQT05T
RV9BQ0NFUFQpIHsKLSAgICAgICAgaWYgKGd0a19maWxlX2Nob29zZXJfZ2V0X3NlbGVjdF9tdWx0
aXBsZShHVEtfRklMRV9DSE9PU0VSKGRpYWxvZykpKSB7Ci0gICAgICAgICAgICBHT3duUHRyPEdT
TGlzdD4gZmlsZW5hbWVzKGd0a19maWxlX2Nob29zZXJfZ2V0X2ZpbGVuYW1lcyhHVEtfRklMRV9D
SE9PU0VSKGRpYWxvZykpKTsKLSAgICAgICAgICAgIFZlY3RvcjxTdHJpbmc+IG5hbWVzOwotICAg
ICAgICAgICAgZm9yIChHU0xpc3QqIGl0ZW0gPSBmaWxlbmFtZXMuZ2V0KCkgOyBpdGVtIDsgaXRl
bSA9IGl0ZW0tPm5leHQpIHsKLSAgICAgICAgICAgICAgICBpZiAoIWl0ZW0tPmRhdGEpCi0gICAg
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIG5hbWVzLmFwcGVuZChm
aWxlbmFtZVRvU3RyaW5nKHN0YXRpY19jYXN0PGNoYXIqPihpdGVtLT5kYXRhKSkpOwotICAgICAg
ICAgICAgICAgIGdfZnJlZShpdGVtLT5kYXRhKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGNob29zZXItPmNob29zZUZpbGVzKG5hbWVzKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgIGdjaGFyKiBmaWxlbmFtZSA9IGd0a19maWxlX2Nob29zZXJfZ2V0X2ZpbGVuYW1lKEdUS19G
SUxFX0NIT09TRVIoZGlhbG9nKSk7Ci0gICAgICAgICAgICBpZiAoZmlsZW5hbWUpCi0gICAgICAg
ICAgICAgICAgY2hvb3Nlci0+Y2hvb3NlRmlsZShmaWxlbmFtZVRvU3RyaW5nKGZpbGVuYW1lKSk7
Ci0gICAgICAgICAgICBnX2ZyZWUoZmlsZW5hbWUpOwotICAgICAgICB9Ci0gICAgfQotICAgIGd0
a193aWRnZXRfZGVzdHJveShkaWFsb2cpOworICAgIEdSZWZQdHI8V2ViS2l0RmlsZUNob29zZXJS
ZXF1ZXN0PiByZXF1ZXN0ID0gYWRvcHRHUmVmKHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9j
cmVhdGUocHJwRmlsZUNob29zZXIpKTsKKyAgICB3ZWJraXRfd2ViX3ZpZXdfcnVuX2ZpbGVfY2hv
b3Nlcl9yZXF1ZXN0KG1fd2ViVmlldywgcmVxdWVzdC5nZXQoKSk7CiB9CiAKIHZvaWQgQ2hyb21l
Q2xpZW50Ojpsb2FkSWNvbkZvckZpbGVzKGNvbnN0IFZlY3RvcjxXVEY6OlN0cmluZz4mIGZpbGVu
YW1lcywgV2ViQ29yZTo6RmlsZUljb25Mb2FkZXIqIGxvYWRlcikKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvZ3RrL2RvY3Mvd2Via2l0Z3RrLWRvY3Muc2dtbAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L2d0ay9kb2NzL3dlYmtpdGd0ay1kb2NzLnNnbWwJKHJldmlzaW9uIDExOTk0NikKKysrIFNv
dXJjZS9XZWJLaXQvZ3RrL2RvY3Mvd2Via2l0Z3RrLWRvY3Muc2dtbAkod29ya2luZyBjb3B5KQpA
QCAtNDEsNiArNDEsNyBAQAogICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC93ZWJraXRpY29uZGF0
YWJhc2UueG1sIi8+CiAgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL3dlYmtpdHNwZWxsY2hlY2tl
ci54bWwiLz4KICAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvd2Via2l0ZmF2aWNvbmRhdGFiYXNl
LnhtbCIvPgorICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC93ZWJraXRmaWxlY2hvb3NlcnJlcXVl
c3QueG1sIi8+CiAgIDwvY2hhcHRlcj4KIAogICA8Y2hhcHRlcj4KSW5kZXg6IFNvdXJjZS9XZWJL
aXQvZ3RrL2RvY3Mvd2Via2l0Z3RrLXNlY3Rpb25zLnR4dAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L2d0ay9kb2NzL3dlYmtpdGd0ay1zZWN0aW9ucy50eHQJKHJldmlzaW9uIDExOTk0NikK
KysrIFNvdXJjZS9XZWJLaXQvZ3RrL2RvY3Mvd2Via2l0Z3RrLXNlY3Rpb25zLnR4dAkod29ya2lu
ZyBjb3B5KQpAQCAtNzAzLDYgKzcwMywzMCBAQCBXZWJLaXRGYXZpY29uRGF0YWJhc2VQcml2YXRl
CiA8L1NFQ1RJT04+CiAKIDxTRUNUSU9OPgorPEZJTEU+d2Via2l0ZmlsZWNob29zZXJyZXF1ZXN0
PC9GSUxFPgorPFRJVExFPldlYktpdEZpbGVDaG9vc2VyUmVxdWVzdDwvVElUTEU+CitXZWJLaXRG
aWxlQ2hvb3NlclJlcXVlc3QKK3dlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfc2VsZWN0
X211bHRpcGxlCit3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X21pbWVfdHlwZXMKK3dl
YmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfbWltZV90eXBlc19maWx0ZXIKK3dlYmtpdF9m
aWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfc2VsZWN0ZWRfZmlsZXMKK3dlYmtpdF9maWxlX2Nob29z
ZXJfcmVxdWVzdF9zZWxlY3RfZmlsZXMKKworPFNVQlNFQ1RJT04gU3RhbmRhcmQ+CitXRUJLSVRf
VFlQRV9GSUxFX0NIT09TRVJfUkVRVUVTVAorV0VCS0lUX0ZJTEVfQ0hPT1NFUl9SRVFVRVNUCitX
RUJLSVRfSVNfRklMRV9DSE9PU0VSX1JFUVVFU1QKK1dFQktJVF9GSUxFX0NIT09TRVJfUkVRVUVT
VF9DTEFTUworV0VCS0lUX0lTX0ZJTEVfQ0hPT1NFUl9SRVFVRVNUX0NMQVNTCitXRUJLSVRfRklM
RV9DSE9PU0VSX1JFUVVFU1RfR0VUX0NMQVNTCisKKzxTVUJTRUNUSU9OIFByaXZhdGU+CitXZWJL
aXRGaWxlQ2hvb3NlclJlcXVlc3RDbGFzcworV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0UHJpdmF0
ZQord2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF90eXBlCis8L1NFQ1RJT04+CisKKzxT
RUNUSU9OPgogPEZJTEU+d2Via2l0ZGVmaW5lczwvRklMRT4KIFdFQktJVF9BUEkKIFdFQktJVEdU
S19BUElfVkVSU0lPTgpJbmRleDogU291cmNlL1dlYktpdC9ndGsvZG9jcy93ZWJraXRndGsudHlw
ZXMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9ndGsvZG9jcy93ZWJraXRndGsudHlwZXMJ
KHJldmlzaW9uIDExOTk0NikKKysrIFNvdXJjZS9XZWJLaXQvZ3RrL2RvY3Mvd2Via2l0Z3RrLnR5
cGVzCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNyBAQAogI2luY2x1ZGUgPHdlYmtpdC93ZWJr
aXQuaD4KIHdlYmtpdF9kb3dubG9hZF9nZXRfdHlwZQogd2Via2l0X2Zhdmljb25fZGF0YWJhc2Vf
Z2V0X3R5cGUKK3dlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfdHlwZQogd2Via2l0X2dl
b2xvY2F0aW9uX3BvbGljeV9kZWNpc2lvbl9nZXRfdHlwZQogd2Via2l0X2hpdF90ZXN0X3Jlc3Vs
dF9nZXRfdHlwZQogd2Via2l0X2ljb25fZGF0YWJhc2VfZ2V0X3R5cGUKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvZ3RrL3Rlc3RzL3Rlc3R3ZWJ2aWV3LmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9ndGsvdGVzdHMvdGVzdHdlYnZpZXcuYwkocmV2aXNpb24gMTE5OTQ2KQorKysgU291cmNlL1dl
YktpdC9ndGsvdGVzdHMvdGVzdHdlYnZpZXcuYwkod29ya2luZyBjb3B5KQpAQCAtNTA2LDYgKzUw
NiwxODYgQEAgc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfd2ViX3ZpZXdfZnVsbHNjcgogICAgIGd0
a193aWRnZXRfZGVzdHJveSh3aW5kb3cpOwogfQogCitzdGF0aWMgZ2Jvb2xlYW4gY2hlY2tNaW1l
VHlwZUZvckZpbHRlcihHdGtGaWxlRmlsdGVyKiBmaWx0ZXIsIGNvbnN0IGdjaGFyKiBtaW1lVHlw
ZSkKK3sKKyAgICBHdGtGaWxlRmlsdGVySW5mbyBmaWx0ZXJfaW5mbzsKKyAgICBmaWx0ZXJfaW5m
by5jb250YWlucyA9IEdUS19GSUxFX0ZJTFRFUl9NSU1FX1RZUEU7CisgICAgZmlsdGVyX2luZm8u
bWltZV90eXBlID0gbWltZVR5cGU7CisgICAgcmV0dXJuIGd0a19maWxlX2ZpbHRlcl9maWx0ZXIo
ZmlsdGVyLCAmZmlsdGVyX2luZm8pOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gcnVuRmlsZUNob29z
ZXJDYk5vTXVsdGlzZWxOb01pbWUoV2ViS2l0V2ViVmlldyogd2VidmlldywgV2ViS2l0RmlsZUNo
b29zZXJSZXF1ZXN0KiByZXF1ZXN0LCBncG9pbnRlciBkYXRhKQoreworICAgIGdfYXNzZXJ0KCF3
ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X3NlbGVjdF9tdWx0aXBsZShyZXF1ZXN0KSk7
CisKKyAgICBjb25zdCBnY2hhciogY29uc3QqIG1pbWVUeXBlcyA9IHdlYmtpdF9maWxlX2Nob29z
ZXJfcmVxdWVzdF9nZXRfbWltZV90eXBlcyhyZXF1ZXN0KTsKKyAgICBnX2Fzc2VydCghbWltZVR5
cGVzKTsKKyAgICBHdGtGaWxlRmlsdGVyKiBmaWx0ZXIgPSB3ZWJraXRfZmlsZV9jaG9vc2VyX3Jl
cXVlc3RfZ2V0X21pbWVfdHlwZXNfZmlsdGVyKHJlcXVlc3QpOworICAgIGdfYXNzZXJ0KCFmaWx0
ZXIpOworCisgICAgY29uc3QgZ2NoYXIqIGNvbnN0KiBzZWxlY3RlZEZpbGVzID0gd2Via2l0X2Zp
bGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9zZWxlY3RlZF9maWxlcyhyZXF1ZXN0KTsKKyAgICBnX2Fz
c2VydCghc2VsZWN0ZWRGaWxlcyk7CisKKyAgICBnX21haW5fbG9vcF9xdWl0KGxvb3ApOworICAg
IHJldHVybiBUUlVFOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gcnVuRmlsZUNob29zZXJDYk11bHRp
c2VsTm9NaW1lKFdlYktpdFdlYlZpZXcqIHdlYnZpZXcsIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVz
dCogcmVxdWVzdCwgZ3BvaW50ZXIgZGF0YSkKK3sKKyAgICBnX2Fzc2VydCh3ZWJraXRfZmlsZV9j
aG9vc2VyX3JlcXVlc3RfZ2V0X3NlbGVjdF9tdWx0aXBsZShyZXF1ZXN0KSk7CisKKyAgICBjb25z
dCBnY2hhciogY29uc3QqIG1pbWVUeXBlcyA9IHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9n
ZXRfbWltZV90eXBlcyhyZXF1ZXN0KTsKKyAgICBnX2Fzc2VydCghbWltZVR5cGVzKTsKKyAgICBH
dGtGaWxlRmlsdGVyKiBmaWx0ZXIgPSB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X21p
bWVfdHlwZXNfZmlsdGVyKHJlcXVlc3QpOworICAgIGdfYXNzZXJ0KCFmaWx0ZXIpOworICAgIGNv
bnN0IGdjaGFyKiBjb25zdCogc2VsZWN0ZWRGaWxlcyA9IHdlYmtpdF9maWxlX2Nob29zZXJfcmVx
dWVzdF9nZXRfc2VsZWN0ZWRfZmlsZXMocmVxdWVzdCk7CisgICAgZ19hc3NlcnQoIXNlbGVjdGVk
RmlsZXMpOworCisgICAgLy8gU2VsZWN0IHNvbWUgZmlsZXMuCisgICAgY29uc3QgZ2NoYXIqIGZp
bGVzVG9TZWxlY3RbNF0gPSB7ICIvZm9vIiwgIi9mb28vYmFyIiwgIi9mb28vYmFyL2JheiIsIDAg
fTsKKyAgICB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3Rfc2VsZWN0X2ZpbGVzKHJlcXVlc3Qs
IGZpbGVzVG9TZWxlY3QpOworCisgICAgLy8gQ2hlY2sgdGhlIGZpbGVzIHRoYXQgaGF2ZSBiZWVu
IGp1c3Qgc2VsZWN0ZWQuCisgICAgc2VsZWN0ZWRGaWxlcyA9IHdlYmtpdF9maWxlX2Nob29zZXJf
cmVxdWVzdF9nZXRfc2VsZWN0ZWRfZmlsZXMocmVxdWVzdCk7CisgICAgZ19hc3NlcnQoc2VsZWN0
ZWRGaWxlcyk7CisgICAgZ19hc3NlcnRfY21wc3RyKHNlbGVjdGVkRmlsZXNbMF0sID09LCAiL2Zv
byIpOworICAgIGdfYXNzZXJ0X2NtcHN0cihzZWxlY3RlZEZpbGVzWzFdLCA9PSwgIi9mb28vYmFy
Iik7CisgICAgZ19hc3NlcnRfY21wc3RyKHNlbGVjdGVkRmlsZXNbMl0sID09LCAiL2Zvby9iYXIv
YmF6Iik7CisgICAgZ19hc3NlcnQoIXNlbGVjdGVkRmlsZXNbM10pOworCisgICAgZ19tYWluX2xv
b3BfcXVpdChsb29wKTsKKyAgICByZXR1cm4gVFJVRTsKK30KKworc3RhdGljIGdib29sZWFuIHJ1
bkZpbGVDaG9vc2VyQ2JTZWxlY3Rpb25SZXRhaW5lZChXZWJLaXRXZWJWaWV3KiB3ZWJ2aWV3LCBX
ZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QqIHJlcXVlc3QsIGdwb2ludGVyIGRhdGEpCit7CisgICAg
Y29uc3QgZ2NoYXIqIGNvbnN0KiBzZWxlY3RlZEZpbGVzID0gd2Via2l0X2ZpbGVfY2hvb3Nlcl9y
ZXF1ZXN0X2dldF9zZWxlY3RlZF9maWxlcyhyZXF1ZXN0KTsKKyAgICBnX2Fzc2VydChzZWxlY3Rl
ZEZpbGVzKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoc2VsZWN0ZWRGaWxlc1swXSwgPT0sICIvZm9v
Iik7CisgICAgZ19hc3NlcnRfY21wc3RyKHNlbGVjdGVkRmlsZXNbMV0sID09LCAiL2Zvby9iYXIi
KTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoc2VsZWN0ZWRGaWxlc1syXSwgPT0sICIvZm9vL2Jhci9i
YXoiKTsKKyAgICBnX2Fzc2VydCghc2VsZWN0ZWRGaWxlc1szXSk7CisKKyAgICBnX21haW5fbG9v
cF9xdWl0KGxvb3ApOworICAgIHJldHVybiBUUlVFOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gcnVu
RmlsZUNob29zZXJDYk5vTXVsdGlzZWxBY2NlcHRUeXBlcyhXZWJLaXRXZWJWaWV3KiB3ZWJ2aWV3
LCBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QqIHJlcXVlc3QsIGdwb2ludGVyIGRhdGEpCit7Cisg
ICAgZ19hc3NlcnQoIXdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfc2VsZWN0X211bHRp
cGxlKHJlcXVlc3QpKTsKKworICAgIGNvbnN0IGdjaGFyKiBjb25zdCogbWltZVR5cGVzID0gd2Vi
a2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9taW1lX3R5cGVzKHJlcXVlc3QpOworICAgIGdf
YXNzZXJ0KG1pbWVUeXBlcyk7CisgICAgZ19hc3NlcnRfY21wc3RyKG1pbWVUeXBlc1swXSwgPT0s
ICJhdWRpby8qIik7CisgICAgZ19hc3NlcnRfY21wc3RyKG1pbWVUeXBlc1sxXSwgPT0sICJ2aWRl
by8qIik7CisgICAgZ19hc3NlcnRfY21wc3RyKG1pbWVUeXBlc1syXSwgPT0sICJpbWFnZS8qIik7
CisgICAgZ19hc3NlcnQoIW1pbWVUeXBlc1szXSk7CisKKyAgICBHdGtGaWxlRmlsdGVyKiBmaWx0
ZXIgPSB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X21pbWVfdHlwZXNfZmlsdGVyKHJl
cXVlc3QpOworICAgIGdfYXNzZXJ0KEdUS19JU19GSUxFX0ZJTFRFUihmaWx0ZXIpKTsKKyAgICBn
X2Fzc2VydChjaGVja01pbWVUeXBlRm9yRmlsdGVyKGZpbHRlciwgImF1ZGlvLyoiKSk7CisgICAg
Z19hc3NlcnQoY2hlY2tNaW1lVHlwZUZvckZpbHRlcihmaWx0ZXIsICJ2aWRlby8qIikpOworICAg
IGdfYXNzZXJ0KGNoZWNrTWltZVR5cGVGb3JGaWx0ZXIoZmlsdGVyLCAiaW1hZ2UvKiIpKTsKKwor
ICAgIGNvbnN0IGdjaGFyKiBjb25zdCogc2VsZWN0ZWRGaWxlcyA9IHdlYmtpdF9maWxlX2Nob29z
ZXJfcmVxdWVzdF9nZXRfc2VsZWN0ZWRfZmlsZXMocmVxdWVzdCk7CisgICAgZ19hc3NlcnQoIXNl
bGVjdGVkRmlsZXMpOworCisgICAgZ19tYWluX2xvb3BfcXVpdChsb29wKTsKKyAgICByZXR1cm4g
VFJVRTsKK30KKwordm9pZCBkb01vdXNlQnV0dG9uRXZlbnQoR3RrV2lkZ2V0KiB3aWRnZXQsIEdk
a0V2ZW50VHlwZSBldmVudFR5cGUsIGludCB4LCBpbnQgeSwgdW5zaWduZWQgaW50IGJ1dHRvbiwg
dW5zaWduZWQgaW50IG1vZGlmaWVycykKK3sKKyAgICBnX2Fzc2VydChndGtfd2lkZ2V0X2dldF9y
ZWFsaXplZCh3aWRnZXQpKTsKKworICAgIEdka0V2ZW50KiBldmVudCA9IGdka19ldmVudF9uZXco
ZXZlbnRUeXBlKTsKKyAgICBldmVudC0+YnV0dG9uLndpbmRvdyA9IGd0a193aWRnZXRfZ2V0X3dp
bmRvdyh3aWRnZXQpOworICAgIGdfb2JqZWN0X3JlZihldmVudC0+YnV0dG9uLndpbmRvdyk7CisK
KyAgICBldmVudC0+YnV0dG9uLnRpbWUgPSBHREtfQ1VSUkVOVF9USU1FOworICAgIGV2ZW50LT5i
dXR0b24ueCA9IHg7CisgICAgZXZlbnQtPmJ1dHRvbi55ID0geTsKKyAgICBldmVudC0+YnV0dG9u
LmF4ZXMgPSAwOworICAgIGV2ZW50LT5idXR0b24uc3RhdGUgPSBtb2RpZmllcnM7CisgICAgZXZl
bnQtPmJ1dHRvbi5idXR0b24gPSBidXR0b247CisKKyAgICBldmVudC0+YnV0dG9uLmRldmljZSA9
IGdka19kZXZpY2VfbWFuYWdlcl9nZXRfY2xpZW50X3BvaW50ZXIoZ2RrX2Rpc3BsYXlfZ2V0X2Rl
dmljZV9tYW5hZ2VyKGd0a193aWRnZXRfZ2V0X2Rpc3BsYXkod2lkZ2V0KSkpOworCisgICAgaW50
IHhSb290LCB5Um9vdDsKKyAgICBnZGtfd2luZG93X2dldF9yb290X2Nvb3JkcyhndGtfd2lkZ2V0
X2dldF93aW5kb3cod2lkZ2V0KSwgeCwgeSwgJnhSb290LCAmeVJvb3QpOworICAgIGV2ZW50LT5i
dXR0b24ueF9yb290ID0geFJvb3Q7CisgICAgZXZlbnQtPmJ1dHRvbi55X3Jvb3QgPSB5Um9vdDsK
KyAgICBndGtfbWFpbl9kb19ldmVudChldmVudCk7Cit9CisKK3N0YXRpYyB2b2lkIGNsaWNrTW91
c2VCdXR0b24oR3RrV2lkZ2V0KiB3aWRnZXQsIGludCB4LCBpbnQgeSwgdW5zaWduZWQgaW50IGJ1
dHRvbiwgdW5zaWduZWQgaW50IG1vZGlmaWVycykKK3sKKyAgICBkb01vdXNlQnV0dG9uRXZlbnQo
d2lkZ2V0LCBHREtfQlVUVE9OX1BSRVNTLCB4LCB5LCBidXR0b24sIG1vZGlmaWVycyk7CisgICAg
ZG9Nb3VzZUJ1dHRvbkV2ZW50KHdpZGdldCwgR0RLX0JVVFRPTl9SRUxFQVNFLCB4LCB5LCBidXR0
b24sIG1vZGlmaWVycyk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiBjbGlja01vdXNlQnV0dG9uQW5k
V2FpdEZvckZpbGVDaG9vc2VyUmVxdWVzdChXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQoreworICAg
IGNsaWNrTW91c2VCdXR0b24oR1RLX1dJREdFVCh3ZWJWaWV3KSwgNSwgNSwgMSwgMCk7CisgICAg
cmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3Rfd2Via2l0X3dlYl92aWV3X2ZpbGVf
Y2hvb3NlcigpCit7CisgICAgY29uc3QgZ2NoYXIqIGh0bWxGb3JtYXRCYXNlID0gIjxodG1sPjxi
b2R5PiIKKyAgICAgICAgICAgICI8aW5wdXQgc3R5bGU9J3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6
MDt0b3A6MDttYXJnaW46MDtwYWRkaW5nOjAnIHR5cGU9J2ZpbGUnICVzLz4iCisgICAgICAgICAg
ICAiPC9ib2R5PjwvaHRtbD4iOworCisgICAgR3RrV2lkZ2V0KiB3aW5kb3cgPSBndGtfd2luZG93
X25ldyhHVEtfV0lORE9XX1RPUExFVkVMKTsKKyAgICBHdGtXaWRnZXQqIHdlYlZpZXcgPSB3ZWJr
aXRfd2ViX3ZpZXdfbmV3KCk7CisgICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUih3
aW5kb3cpLCB3ZWJWaWV3KTsKKyAgICBndGtfd2lkZ2V0X3Nob3dfYWxsKHdpbmRvdyk7CisKKyAg
ICBsb29wID0gZ19tYWluX2xvb3BfbmV3KE5VTEwsIFRSVUUpOworCisgICAgLy8gTXVsdGlwbGUg
c2VsZWN0aW9ucyBub3QgYWxsb3dlZCwgbm8gTUlNRSBmaWx0ZXJpbmcuCisgICAgZ3Vsb25nIGhh
bmRsZXIgPSBnX3NpZ25hbF9jb25uZWN0KHdlYlZpZXcsICJydW4tZmlsZS1jaG9vc2VyIiwgR19D
QUxMQkFDSyhydW5GaWxlQ2hvb3NlckNiTm9NdWx0aXNlbE5vTWltZSksIE5VTEwpOworICAgIGdj
aGFyKiBodG1sRm9ybWF0ID0gZ19zdHJkdXBfcHJpbnRmKGh0bWxGb3JtYXRCYXNlLCAiIik7Cisg
ICAgd2Via2l0X3dlYl92aWV3X2xvYWRfc3RyaW5nKFdFQktJVF9XRUJfVklFVyh3ZWJWaWV3KSwg
aHRtbEZvcm1hdCwgTlVMTCwgTlVMTCwgTlVMTCk7CisgICAgZ19mcmVlKGh0bWxGb3JtYXQpOwor
CisgICAgZ190aW1lb3V0X2FkZCgxMDAsIChHU291cmNlRnVuYykgY2xpY2tNb3VzZUJ1dHRvbkFu
ZFdhaXRGb3JGaWxlQ2hvb3NlclJlcXVlc3QsIFdFQktJVF9XRUJfVklFVyh3ZWJWaWV3KSk7Cisg
ICAgZ19tYWluX2xvb3BfcnVuKGxvb3ApOworCisgICAgZ19zaWduYWxfaGFuZGxlcl9kaXNjb25u
ZWN0KHdlYlZpZXcsIGhhbmRsZXIpOworCisgICAgLy8gTXVsdGlwbGUgc2VsZWN0aW9ucyBhbGxv
d2VkLCBubyBNSU1FIGZpbHRlcmluZywgc29tZSBwcmUtc2VsZWN0ZWQgZmlsZXMuCisgICAgaGFu
ZGxlciA9IGdfc2lnbmFsX2Nvbm5lY3Qod2ViVmlldywgInJ1bi1maWxlLWNob29zZXIiLCBHX0NB
TExCQUNLKHJ1bkZpbGVDaG9vc2VyQ2JNdWx0aXNlbE5vTWltZSksIE5VTEwpOworICAgIGh0bWxG
b3JtYXQgPSBnX3N0cmR1cF9wcmludGYoaHRtbEZvcm1hdEJhc2UsICJtdWx0aXBsZSIpOworICAg
IHdlYmtpdF93ZWJfdmlld19sb2FkX3N0cmluZyhXRUJLSVRfV0VCX1ZJRVcod2ViVmlldyksIGh0
bWxGb3JtYXQsIE5VTEwsIE5VTEwsIE5VTEwpOworICAgIGdfZnJlZShodG1sRm9ybWF0KTsKKwor
ICAgIGdfdGltZW91dF9hZGQoMTAwLCAoR1NvdXJjZUZ1bmMpIGNsaWNrTW91c2VCdXR0b25BbmRX
YWl0Rm9yRmlsZUNob29zZXJSZXF1ZXN0LCBXRUJLSVRfV0VCX1ZJRVcod2ViVmlldykpOworICAg
IGdfbWFpbl9sb29wX3J1bihsb29wKTsKKworICAgIGdfc2lnbmFsX2hhbmRsZXJfZGlzY29ubmVj
dCh3ZWJWaWV3LCBoYW5kbGVyKTsKKworICAgIC8vIFBlcmZvcm0gYW5vdGhlciByZXF1ZXN0IHRv
IGNoZWNrIGlmIHRoZSBsaXN0IG9mIGZpbGVzIHNlbGVjdGVkCisgICAgLy8gaW4gdGhlIHByZXZp
b3VzIHN0ZXAgYXBwZWFycyBub3cgYXMgcGFydCBvZiB0aGUgbmV3IHJlcXVlc3QuCisgICAgaGFu
ZGxlciA9IGdfc2lnbmFsX2Nvbm5lY3Qod2ViVmlldywgInJ1bi1maWxlLWNob29zZXIiLCBHX0NB
TExCQUNLKHJ1bkZpbGVDaG9vc2VyQ2JTZWxlY3Rpb25SZXRhaW5lZCksIE5VTEwpOworICAgIGdf
dGltZW91dF9hZGQoMTAwLCAoR1NvdXJjZUZ1bmMpIGNsaWNrTW91c2VCdXR0b25BbmRXYWl0Rm9y
RmlsZUNob29zZXJSZXF1ZXN0LCBXRUJLSVRfV0VCX1ZJRVcod2ViVmlldykpOworICAgIGdfbWFp
bl9sb29wX3J1bihsb29wKTsKKworICAgIGdfc2lnbmFsX2hhbmRsZXJfZGlzY29ubmVjdCh3ZWJW
aWV3LCBoYW5kbGVyKTsKKworICAgIC8vIE11bHRpcGxlIHNlbGVjdGlvbnMgbm90IGFsbG93ZWQs
IG9ubHkgYWNjZXB0IGltYWdlcywgYXVkaW8gYW5kIHZpZGVvIGZpbGVzLgorICAgIGhhbmRsZXIg
PSBnX3NpZ25hbF9jb25uZWN0KHdlYlZpZXcsICJydW4tZmlsZS1jaG9vc2VyIiwgR19DQUxMQkFD
SyhydW5GaWxlQ2hvb3NlckNiTm9NdWx0aXNlbEFjY2VwdFR5cGVzKSwgTlVMTCk7CisgICAgaHRt
bEZvcm1hdCA9IGdfc3RyZHVwX3ByaW50ZihodG1sRm9ybWF0QmFzZSwgImFjY2VwdD0nYXVkaW8v
Kix2aWRlby8qLGltYWdlLyonIik7CisgICAgd2Via2l0X3dlYl92aWV3X2xvYWRfc3RyaW5nKFdF
QktJVF9XRUJfVklFVyh3ZWJWaWV3KSwgaHRtbEZvcm1hdCwgTlVMTCwgTlVMTCwgTlVMTCk7Cisg
ICAgZ19mcmVlKGh0bWxGb3JtYXQpOworCisgICAgZ190aW1lb3V0X2FkZCgxMDAsIChHU291cmNl
RnVuYykgY2xpY2tNb3VzZUJ1dHRvbkFuZFdhaXRGb3JGaWxlQ2hvb3NlclJlcXVlc3QsIFdFQktJ
VF9XRUJfVklFVyh3ZWJWaWV3KSk7CisgICAgZ19tYWluX2xvb3BfcnVuKGxvb3ApOworCisgICAg
Z19zaWduYWxfaGFuZGxlcl9kaXNjb25uZWN0KHdlYlZpZXcsIGhhbmRsZXIpOworICAgIGd0a193
aWRnZXRfZGVzdHJveSh3aW5kb3cpOworfQorCiBpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFy
Z3YpCiB7CiAgICAgU291cFNlcnZlciogc2VydmVyOwpAQCAtNTM3LDYgKzcxNyw3IEBAIGludCBt
YWluKGludCBhcmdjLCBjaGFyKiogYXJndikKICAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQv
d2Vidmlldy93ZWJ2aWV3LWRvZXMtbm90LXN0ZWFsLWZvY3VzIiwgdGVzdF93ZWJraXRfd2ViX3Zp
ZXdfZG9lc19ub3Rfc3RlYWxfZm9jdXMpOwogICAgIGdfdGVzdF9hZGRfZGF0YV9mdW5jKCIvd2Vi
a2l0L3dlYnZpZXcvZnVsbHNjcmVlbiIsIEdJTlRfVE9fUE9JTlRFUihGQUxTRSksIHRlc3Rfd2Vi
a2l0X3dlYl92aWV3X2Z1bGxzY3JlZW4pOwogICAgIGdfdGVzdF9hZGRfZGF0YV9mdW5jKCIvd2Vi
a2l0L3dlYnZpZXcvZnVsbHNjcmVlbi1ibG9ja2VkIiwgR0lOVF9UT19QT0lOVEVSKFRSVUUpLCB0
ZXN0X3dlYmtpdF93ZWJfdmlld19mdWxsc2NyZWVuKTsKKyAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93
ZWJraXQvd2Vidmlldy9maWxlLWNob29zZXIiLCB0ZXN0X3dlYmtpdF93ZWJfdmlld19maWxlX2No
b29zZXIpOwogCiAgICAgcmV0dXJuIGdfdGVzdF9ydW4gKCk7CiB9CkluZGV4OiBTb3VyY2UvV2Vi
S2l0L2d0ay93ZWJraXQvd2Via2l0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9ndGsv
d2Via2l0L3dlYmtpdC5oCShyZXZpc2lvbiAxMTk5NDYpCisrKyBTb3VyY2UvV2ViS2l0L2d0ay93
ZWJraXQvd2Via2l0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRl
IDx3ZWJraXQvd2Via2l0ZG93bmxvYWQuaD4KICNpbmNsdWRlIDx3ZWJraXQvd2Via2l0ZW51bXR5
cGVzLmg+CiAjaW5jbHVkZSA8d2Via2l0L3dlYmtpdGZhdmljb25kYXRhYmFzZS5oPgorI2luY2x1
ZGUgPHdlYmtpdC93ZWJraXRmaWxlY2hvb3NlcnJlcXVlc3QuaD4KICNpbmNsdWRlIDx3ZWJraXQv
d2Via2l0Z2VvbG9jYXRpb25wb2xpY3lkZWNpc2lvbi5oPgogI2luY2x1ZGUgPHdlYmtpdC93ZWJr
aXRnbG9iYWxzLmg+CiAjaW5jbHVkZSA8d2Via2l0L3dlYmtpdGhpdHRlc3RyZXN1bHQuaD4KSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRmaWxlY2hvb3NlcnJlcXVlc3QuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRmaWxlY2hvb3Nl
cnJlcXVlc3QuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dl
YmtpdGZpbGVjaG9vc2VycmVxdWVzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzNDkg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIndlYmtpdGZpbGVjaG9vc2VycmVxdWVzdC5oIgorCisjaW5jbHVkZSAi
RmlsZUNob29zZXIuaCIKKyNpbmNsdWRlICJGaWxlU3lzdGVtLmgiCisjaW5jbHVkZSAid2Via2l0
ZmlsZWNob29zZXJyZXF1ZXN0cHJpdmF0ZS5oIgorI2luY2x1ZGUgIndlYmtpdGdsb2JhbHNwcml2
YXRlLmgiCisjaW5jbHVkZSA8Z2xpYi9naTE4bi1saWIuaD4KKyNpbmNsdWRlIDx3dGYvZ29iamVj
dC9HT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L0NTdHJpbmcuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKKy8qKgor
ICogU0VDVElPTjp3ZWJraXRmaWxlY2hvb3NlcnJlcXVlc3QKKyAqIEBTaG9ydF9kZXNjcmlwdGlv
bjogQSByZXF1ZXN0IHRvIG9wZW4gYSBmaWxlIGNob29zZXIKKyAqIEBUaXRsZTogV2ViS2l0Rmls
ZUNob29zZXJSZXF1ZXN0CisgKiBAU2VlX2Fsc286ICNXZWJLaXRXZWJWaWV3CisgKgorICogV2hl
bmV2ZXIgdGhlIHVzZXIgaW50ZXJhY3RzIHdpdGggYW4gJmx0O2lucHV0IHR5cGU9J2ZpbGUnIC8m
Z3Q7CisgKiBIVE1MIGVsZW1lbnQsIFdlYktpdCB3aWxsIG5lZWQgdG8gc2hvdyBhIGRpYWxvZyB0
byBjaG9vc2Ugb25lIG9yCisgKiBtb3JlIGZpbGVzIHRvIGJlIHVwbG9hZGVkIHRvIHRoZSBzZXJ2
ZXIgYWxvbmcgd2l0aCB0aGUgcmVzdCBvZiB0aGUKKyAqIGZvcm0gZGF0YS4gRm9yIHRoYXQgdG8g
aGFwcGVuIGluIGEgZ2VuZXJhbCB3YXksIGluc3RlYWQgb2YganVzdAorICogb3BlbmluZyBhICNH
dGtGaWxlQ2hvb3NlckRpYWxvZyAod2hpY2ggbWlnaHQgYmUgbm90IGRlc2lyYWJsZSBpbgorICog
c29tZSBjYXNlcywgc3VjaCBhcyB3aGVuIGFuIGVtYmVkZGluZyBhcHBsaWNhdGlvbnMgcHJlZmVy
cyB0byB1c2UKKyAqIGl0cyBvd24gZmlsZSBjaG9vc2VyIGRpYWxvZyksIFdlYktpdCB3aWxsIGZp
cmUgdGhlCisgKiAjV2ViS2l0V2ViVmlldzo6cnVuLWZpbGUtY2hvb3NlciBzaWduYWwgd2l0aCBh
CisgKiAjV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0IG9iamVjdCwgd2hpY2ggd2lsbCBhbGxvdyB0
aGUgY2xpZW50CisgKiBhcHBsaWNhdGlvbiB0byBzcGVjaWZ5IHRoZSBmaWxlcyB0byBiZSBzZWxl
Y3RlZCwgdG8gaW5zcGVjdCB0aGUKKyAqIGRldGFpbHMgb2YgdGhlIHJlcXVlc3QgKGUuZy4gaWYg
bXVsdGlwbGUgc2VsZWN0aW9uIHNob3VsZCBiZQorICogYWxsb3dlZCkgYW5kIHRvIGNhbmNlbCB0
aGUgcmVxdWVzdCwgaW4gY2FzZSBub3RoaW5nIHdhcyBzZWxlY3RlZC4KKyAqCisgKiBJbiBjYXNl
IHRoZSBjbGllbnQgYXBwbGljYXRpb24gZG9lcyBub3Qgd2lzaCB0byBoYW5kbGUgdGhpcyBzaWdu
YWwsCisgKiBXZWJLaXQgd2lsbCBwcm92aWRlIGEgZGVmYXVsdCBoYW5kbGVyIHdoaWNoIHdpbGwg
YXN5bmNocm9ub3VzbHkgcnVuCisgKiBhIHJlZ3VsYXIgI0d0a0ZpbGVDaG9vc2VyRGlhbG9nIGZv
ciB0aGUgdXNlciB0byBpbnRlcmFjdCB3aXRoLgorICovCitHX0RFRklORV9UWVBFKFdlYktpdEZp
bGVDaG9vc2VyUmVxdWVzdCwgd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0LCBHX1RZUEVfT0JK
RUNUKQorCitzdHJ1Y3QgX1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdFByaXZhdGUgeworICAgIFJl
ZlB0cjxGaWxlQ2hvb3Nlcj4gY2hvb3NlcjsKKyAgICBHUmVmUHRyPEd0a0ZpbGVGaWx0ZXI+IGZp
bHRlcjsKKyAgICBHUmVmUHRyPEdQdHJBcnJheT4gbWltZVR5cGVzOworICAgIEdSZWZQdHI8R1B0
ckFycmF5PiBzZWxlY3RlZEZpbGVzOworfTsKKworZW51bSB7CisgICAgUFJPUF8wLAorICAgIFBS
T1BfRklMVEVSLAorICAgIFBST1BfTUlNRV9UWVBFUywKKyAgICBQUk9QX1NFTEVDVF9NVUxUSVBM
RSwKKyAgICBQUk9QX1NFTEVDVEVEX0ZJTEVTLAorfTsKKworc3RhdGljIHZvaWQgd2Via2l0X2Zp
bGVfY2hvb3Nlcl9yZXF1ZXN0X2luaXQoV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0KiByZXF1ZXN0
KQoreworICAgIHJlcXVlc3QtPnByaXYgPSBHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUocmVx
dWVzdCwgV0VCS0lUX1RZUEVfRklMRV9DSE9PU0VSX1JFUVVFU1QsIFdlYktpdEZpbGVDaG9vc2Vy
UmVxdWVzdFByaXZhdGUpOworICAgIG5ldyAocmVxdWVzdC0+cHJpdikgV2ViS2l0RmlsZUNob29z
ZXJSZXF1ZXN0UHJpdmF0ZSgpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZmlsZV9jaG9vc2Vy
X3JlcXVlc3RfZmluYWxpemUoR09iamVjdCogb2JqZWN0KQoreworICAgIFdlYktpdEZpbGVDaG9v
c2VyUmVxdWVzdCogcmVxdWVzdCA9IFdFQktJVF9GSUxFX0NIT09TRVJfUkVRVUVTVChvYmplY3Qp
OworCisgICAgcmVxdWVzdC0+cHJpdi0+fldlYktpdEZpbGVDaG9vc2VyUmVxdWVzdFByaXZhdGUo
KTsKKyAgICBHX09CSkVDVF9DTEFTUyh3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfcGFyZW50
X2NsYXNzKS0+ZmluYWxpemUob2JqZWN0KTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2ZpbGVf
Y2hvb3Nlcl9yZXF1ZXN0X2dldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BJ
ZCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcGFyYW1TcGVjKQoreworICAgIFdlYktpdEZp
bGVDaG9vc2VyUmVxdWVzdCogcmVxdWVzdCA9IFdFQktJVF9GSUxFX0NIT09TRVJfUkVRVUVTVChv
YmplY3QpOworICAgIHN3aXRjaCAocHJvcElkKSB7CisgICAgY2FzZSBQUk9QX0ZJTFRFUjoKKyAg
ICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVl
c3RfZ2V0X21pbWVfdHlwZXNfZmlsdGVyKHJlcXVlc3QpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBQUk9QX01JTUVfVFlQRVM6CisgICAgICAgIGdfdmFsdWVfc2V0X2JveGVkKHZhbHVlLCB3
ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X21pbWVfdHlwZXMocmVxdWVzdCkpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfU0VMRUNUX01VTFRJUExFOgorICAgICAgICBnX3Zh
bHVlX3NldF9ib29sZWFuKHZhbHVlLCB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X3Nl
bGVjdF9tdWx0aXBsZShyZXF1ZXN0KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9T
RUxFQ1RFRF9GSUxFUzoKKyAgICAgICAgZ192YWx1ZV9zZXRfYm94ZWQodmFsdWUsIHdlYmtpdF9m
aWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfc2VsZWN0ZWRfZmlsZXMocmVxdWVzdCkpOworICAgICAg
ICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJP
UEVSVFlfSUQob2JqZWN0LCBwcm9wSWQsIHBhcmFtU3BlYyk7CisgICAgICAgIGJyZWFrOworICAg
IH0KK30KKworc3RhdGljIHZvaWQgd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2NsYXNzX2lu
aXQoV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0Q2xhc3MqIHJlcXVlc3RDbGFzcykKK3sKKyAgICBH
T2JqZWN0Q2xhc3MqIG9iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1MocmVxdWVzdENsYXNzKTsK
KyAgICBvYmplY3RDbGFzcy0+ZmluYWxpemUgPSB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3Rf
ZmluYWxpemU7CisgICAgb2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtpdF9maWxlX2No
b29zZXJfcmVxdWVzdF9nZXRfcHJvcGVydHk7CisgICAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRl
KHJlcXVlc3RDbGFzcywgc2l6ZW9mKFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdFByaXZhdGUpKTsK
KworICAgIC8qKgorICAgICAqIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdDpmaWx0ZXI6CisgICAg
ICoKKyAgICAgKiBUaGUgZmlsdGVyIGN1cnJlbnRseSBhc3NvY2lhdGVkIHdpdGggdGhlIHJlcXVl
c3QuIFNlZQorICAgICAqIHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfbWltZV90eXBl
c19maWx0ZXIoKSBmb3IgbW9yZQorICAgICAqIGRldGFpbHMuCisgICAgICovCisgICAgZ19vYmpl
Y3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShvYmplY3RDbGFzcywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFBST1BfRklMVEVSLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCgiZmlsdGVyIiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIk1JTUUgdHlwZXMgZmls
dGVyIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfKCJUaGUgZmlsdGVyIGN1cnJlbnRseSBhc3NvY2lhdGVkIHdpdGggdGhlIHJlcXVlc3Qi
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdUS19UWVBFX0ZJTEVfRklMVEVSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisgICAgLyoqCisg
ICAgICogV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0Om1pbWUtdHlwZXM6CisgICAgICoKKyAgICAg
KiBBICVOVUxMLXRlcm1pbmF0ZWQgYXJyYXkgb2Ygc3RyaW5ncyBjb250YWluaW5nIHRoZSBsaXN0
IG9mIE1JTUUKKyAgICAgKiB0eXBlcyB0aGUgZmlsZSBjaG9vc2VyIGRpYWxvZyBzaG91bGQgaGFu
ZGxlLiBTZWUKKyAgICAgKiB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X21pbWVfdHlw
ZXMoKSBmb3IgbW9yZSBkZXRhaWxzLgorICAgICAqLworICAgIGdfb2JqZWN0X2NsYXNzX2luc3Rh
bGxfcHJvcGVydHkob2JqZWN0Q2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBQUk9QX01JTUVfVFlQRVMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBnX3BhcmFtX3NwZWNfYm94ZWQoIm1pbWUtdHlwZXMiLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiTUlNRSB0eXBlcyIpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiVGhlIGxp
c3Qgb2YgTUlNRSB0eXBlcyBhc3NvY2lhdGVkIHdpdGggdGhlIHJlcXVlc3QiKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdfVFlQRV9TVFJW
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
V0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7ICAgIC8qKgorICAgICAqIFdlYktpdEZpbGVDaG9vc2Vy
UmVxdWVzdDpzZWxlY3QtbXVsdGlwbGU6CisgICAgICoKKyAgICAgKiBXaGV0aGVyIHRoZSBmaWxl
IGNob29zZXIgc2hvdWxkIGFsbG93IHNlbGVjdGluZyBtdWx0aXBsZQorICAgICAqIGZpbGVzLiBT
ZWUKKyAgICAgKiB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X3NlbGVjdF9tdWx0aXBs
ZSgpIGZvcgorICAgICAqIG1vcmUgZGV0YWlscy4KKyAgICAgKi8KKyAgICBnX29iamVjdF9jbGFz
c19pbnN0YWxsX3Byb3BlcnR5KG9iamVjdENsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgUFJPUF9TRUxFQ1RfTVVMVElQTEUsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbigic2VsZWN0LW11bHRpcGxlIiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJT
ZWxlY3QgbXVsdGlwbGUgZmlsZXMiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfKCJXaGV0aGVyIHRoZSBmaWxlIGNob29zZXIgc2hvdWxk
IGFsbG93IHNlbGVjdGluZyBtdWx0aXBsZSBmaWxlcyIpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZBTFNFLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFE
QUJMRSkpOworICAgIC8qKgorICAgICAqIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdDpzZWxlY3Rl
ZC1maWxlczoKKyAgICAgKgorICAgICAqIEEgJU5VTEwtdGVybWluYXRlZCBhcnJheSBvZiBzdHJp
bmdzIGNvbnRhaW5pbmcgdGhlIGxpc3Qgb2YKKyAgICAgKiBzZWxlY3RlZCBmaWxlcyBhc3NvY2lh
dGVkIHRvIHRoZSBjdXJyZW50IHJlcXVlc3QuIFNlZQorICAgICAqIHdlYmtpdF9maWxlX2Nob29z
ZXJfcmVxdWVzdF9nZXRfc2VsZWN0ZWRfZmlsZXMoKSBmb3IgbW9yZSBkZXRhaWxzLgorICAgICAq
LworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkob2JqZWN0Q2xhc3MsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9QX1NFTEVDVEVEX0ZJTEVTLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVjX2JveGVkKCJzZWxl
Y3RlZC1maWxlcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfKCJTZWxlY3RlZCBmaWxlcyIpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiVGhlIGxpc3Qgb2Ygc2VsZWN0ZWQgZmls
ZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSByZXF1ZXN0IiksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHX1RZUEVfU1RSViwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9QQVJBTV9S
RUFEQUJMRSkpOworfQorCitXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QqIHdlYmtpdF9maWxlX2No
b29zZXJfcmVxdWVzdF9jcmVhdGUoUGFzc1JlZlB0cjxGaWxlQ2hvb3Nlcj4gY2hvb3NlcikKK3sK
KyAgICBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QqIHJlcXVlc3QgPSBXRUJLSVRfRklMRV9DSE9P
U0VSX1JFUVVFU1QoZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX0ZJTEVfQ0hPT1NFUl9SRVFVRVNU
LCBOVUxMKSk7CisgICAgcmVxdWVzdC0+cHJpdi0+Y2hvb3NlciA9IGNob29zZXI7CisgICAgcmV0
dXJuIHJlcXVlc3Q7Cit9CisKKy8qKgorICogd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dl
dF9taW1lX3R5cGVzOgorICogQHJlcXVlc3Q6IGEgI1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdAor
ICoKKyAqIEdldCB0aGUgbGlzdCBvZiBNSU1FIHR5cGVzIHRoZSBmaWxlIGNob29zZXIgZGlhbG9n
IHNob3VsZCBoYW5kbGUsCisgKiBpbiB0aGUgZm9ybWF0IHNwZWNpZmllZCBpbiBSRkMgMjA0NiBm
b3IgIm1lZGlhIHR5cGVzIi4gSXRzIGNvbnRlbnRzCisgKiBkZXBlbmQgb24gdGhlIHZhbHVlIG9m
IHRoZSAnYWNjZXB0JyBhdHRyaWJ1dGUgZm9yIEhUTUwgaW5wdXQKKyAqIGVsZW1lbnRzLiBUaGlz
IGZ1bmN0aW9uIHNob3VsZCBub3JtYWxseSBiZSBjYWxsZWQgYmVmb3JlIHByZXNlbnRpbmcKKyAq
IHRoZSBmaWxlIGNob29zZXIgZGlhbG9nIHRvIHRoZSB1c2VyLCB0byBkZWNpZGUgd2hldGhlciB0
byBhbGxvdyB0aGUKKyAqIHVzZXIgdG8gc2VsZWN0IG11bHRpcGxlIGZpbGVzIGF0IG9uY2Ugb3Ig
b25seSBvbmUuCisgKgorICogUmV0dXJuczogKGFycmF5IHplcm8tdGVybWluYXRlZD0xKSAodHJh
bnNmZXIgbm9uZSk6IGEKKyAqICVOVUxMLXRlcm1pbmF0ZWQgYXJyYXkgb2Ygc3RyaW5ncyBpZiBh
IGxpc3Qgb2YgYWNjZXB0ZWQgTUlNRSB0eXBlcworICogaXMgZGVmaW5lZCBvciAlTlVMTCBvdGhl
cndpc2UsIG1lYW5pbmcgdGhhdCBhbnkgTUlNRSB0eXBlIHNob3VsZCBiZQorICogYWNjZXB0ZWQu
IFRoaXMgYXJyYXkgYW5kIGl0cyBjb250ZW50cyBhcmUgb3duZWQgYnkgV2ViS2l0R1RLKyBhbmQK
KyAqIHNob3VsZCBub3QgYmUgbW9kaWZpZWQgb3IgZnJlZWQuCisgKi8KK2NvbnN0IGdjaGFyKiBj
b25zdCogd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9taW1lX3R5cGVzKFdlYktpdEZp
bGVDaG9vc2VyUmVxdWVzdCogcmVxdWVzdCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChX
RUJLSVRfSVNfRklMRV9DSE9PU0VSX1JFUVVFU1QocmVxdWVzdCksIDApOworICAgIGlmIChyZXF1
ZXN0LT5wcml2LT5taW1lVHlwZXMpCisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGdj
aGFyKio+KHJlcXVlc3QtPnByaXYtPm1pbWVUeXBlcy0+cGRhdGEpOworCisgICAgRmlsZUNob29z
ZXJTZXR0aW5ncyBzZXR0aW5ncyA9IHJlcXVlc3QtPnByaXYtPmNob29zZXItPnNldHRpbmdzKCk7
CisgICAgc2l6ZV90IG51bU9mTWltZVR5cGVzID0gc2V0dGluZ3MuYWNjZXB0TUlNRVR5cGVzLnNp
emUoKTsKKyAgICBpZiAoIW51bU9mTWltZVR5cGVzKQorICAgICAgICByZXR1cm4gMDsKKworICAg
IHJlcXVlc3QtPnByaXYtPm1pbWVUeXBlcyA9IGFkb3B0R1JlZihnX3B0cl9hcnJheV9uZXdfd2l0
aF9mcmVlX2Z1bmMoZ19mcmVlKSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1PZk1p
bWVUeXBlczsgKytpKSB7CisgICAgICAgIFN0cmluZyBtaW1lVHlwZVN0cmluZyA9IHNldHRpbmdz
LmFjY2VwdE1JTUVUeXBlc1tpXTsKKyAgICAgICAgaWYgKG1pbWVUeXBlU3RyaW5nLmlzRW1wdHko
KSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBnX3B0cl9hcnJheV9hZGQocmVxdWVz
dC0+cHJpdi0+bWltZVR5cGVzLmdldCgpLCBnX3N0cmR1cChtaW1lVHlwZVN0cmluZy51dGY4KCku
ZGF0YSgpKSk7CisgICAgfQorICAgIGdfcHRyX2FycmF5X2FkZChyZXF1ZXN0LT5wcml2LT5taW1l
VHlwZXMuZ2V0KCksIDApOworCisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Z2NoYXIqKj4o
cmVxdWVzdC0+cHJpdi0+bWltZVR5cGVzLT5wZGF0YSk7Cit9CisKKy8qKgorICogd2Via2l0X2Zp
bGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9taW1lX3R5cGVzX2ZpbHRlcjoKKyAqIEByZXF1ZXN0OiBh
ICNXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QKKyAqCisgKiBHZXQgdGhlIGZpbHRlciBjdXJyZW50
bHkgYXNzb2NpYXRlZCB3aXRoIHRoZSByZXF1ZXN0LCByZWFkeSB0byBiZQorICogdXNlZCBieSAj
R3RrRmlsZUNob29zZXIuIFRoaXMgZnVuY3Rpb24gc2hvdWxkIG5vcm1hbGx5IGJlIGNhbGxlZAor
ICogYmVmb3JlIHByZXNlbnRpbmcgdGhlIGZpbGUgY2hvb3NlciBkaWFsb2cgdG8gdGhlIHVzZXIs
IHRvIGRlY2lkZQorICogd2hldGhlciB0byBhcHBseSBhIGZpbHRlciBzbyB0aGUgdXNlciB3b3Vs
ZCBub3QgYmUgYWxsb3dlZCB0bworICogc2VsZWN0IGZpbGVzIHdpdGggb3RoZXIgTUlNRSB0eXBl
cy4KKyAqCisgKiBTZWUgd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9taW1lX3R5cGVz
KCkgaWYgeW91IGFyZQorICogaW50ZXJlc3RlZCBpbiBnZXR0aW5nIHRoZSBsaXN0IG9mIGFjY2Vw
dGVkIE1JTUUgdHlwZXMuCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiBhICNHdGtG
aWxlRmlsdGVyIGlmIGEgbGlzdCBvZiBhY2NlcHRlZAorICogTUlNRSB0eXBlcyBpcyBkZWZpbmVk
IG9yICVOVUxMIG90aGVyd2lzZS4gVGhlIHJldHVybmVkIG9iamVjdCBpcworICogb3duZWQgYnkg
V2ViS2l0R1RLKyBzaG91bGQgbm90IGJlIG1vZGlmaWVkIG9yIGZyZWVkLgorICovCitHdGtGaWxl
RmlsdGVyKiB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X21pbWVfdHlwZXNfZmlsdGVy
KFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCogcmVxdWVzdCkKK3sKKyAgICBnX3JldHVybl92YWxf
aWZfZmFpbChXRUJLSVRfSVNfRklMRV9DSE9PU0VSX1JFUVVFU1QocmVxdWVzdCksIDApOworICAg
IGlmIChyZXF1ZXN0LT5wcml2LT5maWx0ZXIpCisgICAgICAgIHJldHVybiByZXF1ZXN0LT5wcml2
LT5maWx0ZXIuZ2V0KCk7CisKKyAgICBGaWxlQ2hvb3NlclNldHRpbmdzIHNldHRpbmdzID0gcmVx
dWVzdC0+cHJpdi0+Y2hvb3Nlci0+c2V0dGluZ3MoKTsKKyAgICBzaXplX3QgbnVtT2ZNaW1lVHlw
ZXMgPSBzZXR0aW5ncy5hY2NlcHRNSU1FVHlwZXMuc2l6ZSgpOworICAgIGlmICghbnVtT2ZNaW1l
VHlwZXMpCisgICAgICAgIHJldHVybiAwOworCisgICAgLy8gRG8gbm90IHVzZSBhZG9wdEdSZWYg
aGVyZSwgc2luY2Ugd2Ugd2FudCB0byBzaW5rIHRoZSBmbG9hdGluZworICAgIC8vIHJlZmVyZW5j
ZSBmb3IgdGhlIG5ldyBpbnN0YW5jZSBvZiBHdGtGaWxlRmlsdGVyLCBzbyB3ZSBtYWtlCisgICAg
Ly8gc3VyZSB3ZSBrZWVwIHRoZSBvd25lcnNoaXAgZHVyaW5nIHRoZSBsaWZldGltZSBvZiB0aGUg
cmVxdWVzdC4KKyAgICByZXF1ZXN0LT5wcml2LT5maWx0ZXIgPSBndGtfZmlsZV9maWx0ZXJfbmV3
KCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1PZk1pbWVUeXBlczsgKytpKSB7Cisg
ICAgICAgIFN0cmluZyBtaW1lVHlwZVN0cmluZyA9IHNldHRpbmdzLmFjY2VwdE1JTUVUeXBlc1tp
XTsKKyAgICAgICAgaWYgKG1pbWVUeXBlU3RyaW5nLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICBndGtfZmlsZV9maWx0ZXJfYWRkX21pbWVfdHlwZShyZXF1ZXN0LT5w
cml2LT5maWx0ZXIuZ2V0KCksIG1pbWVUeXBlU3RyaW5nLnV0ZjgoKS5kYXRhKCkpOworICAgIH0K
KworICAgIHJldHVybiByZXF1ZXN0LT5wcml2LT5maWx0ZXIuZ2V0KCk7Cit9CisKKy8qKgorICog
d2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9zZWxlY3RfbXVsdGlwbGU6CisgKiBAcmVx
dWVzdDogYSAjV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0CisgKgorICogRGV0ZXJtaW5lIHdoZXRo
ZXIgdGhlIGZpbGUgY2hvb3NlciBhc3NvY2lhdGVkIHRvIHRoaXMKKyAqICNXZWJLaXRGaWxlQ2hv
b3NlclJlcXVlc3Qgc2hvdWxkIGFsbG93IHNlbGVjdGluZyBtdWx0aXBsZSBmaWxlcywKKyAqIHdo
aWNoIGRlcGVuZHMgb24gdGhlIEhUTUwgaW5wdXQgZWxlbWVudCBoYXZpbmcgYSAnbXVsdGlwbGUn
CisgKiBhdHRyaWJ1dGUgZGVmaW5lZC4KKyAqCisgKiBSZXR1cm5zOiAlVFJVRSBpZiB0aGUgZmls
ZSBjaG9vc2VyIHNob3VsZCBhbGxvdyBzZWxlY3RpbmcgbXVsdGlwbGUgZmlsZXMgb3IgJUZBTFNF
IG90aGVyd2lzZS4KKyAqLworZ2Jvb2xlYW4gd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dl
dF9zZWxlY3RfbXVsdGlwbGUoV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0KiByZXF1ZXN0KQorewor
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19GSUxFX0NIT09TRVJfUkVRVUVTVChy
ZXF1ZXN0KSwgRkFMU0UpOworICAgIHJldHVybiByZXF1ZXN0LT5wcml2LT5jaG9vc2VyLT5zZXR0
aW5ncygpLmFsbG93c011bHRpcGxlRmlsZXM7Cit9CisKKy8qKgorICogd2Via2l0X2ZpbGVfY2hv
b3Nlcl9yZXF1ZXN0X3NlbGVjdF9maWxlczoKKyAqIEByZXF1ZXN0OiBhICNXZWJLaXRGaWxlQ2hv
b3NlclJlcXVlc3QKKyAqIEBmaWxlczogKGFycmF5IHplcm8tdGVybWluYXRlZD0xKSAodHJhbnNm
ZXIgbm9uZSk6IGEKKyAqICVOVUxMLXRlcm1pbmF0ZWQgYXJyYXkgb2Ygc3RyaW5ncywgY29udGFp
bmluZyBwYXRocyB0byBsb2NhbCBmaWxlcy4KKyAqCisgKiBBc2sgV2ViS2l0IHRvIHNlbGVjdCBs
b2NhbCBmaWxlcyBmb3IgdXBsb2FkIGFuZCBjb21wbGV0ZSB0aGUKKyAqIHJlcXVlc3QuCisgKi8K
K3ZvaWQgd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X3NlbGVjdF9maWxlcyhXZWJLaXRGaWxl
Q2hvb3NlclJlcXVlc3QqIHJlcXVlc3QsIGNvbnN0IGdjaGFyKiBjb25zdCogZmlsZXMpCit7Cisg
ICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfRklMRV9DSE9PU0VSX1JFUVVFU1QocmVxdWVz
dCkpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoZmlsZXMpOworCisgICAgVmVjdG9yPFN0cmluZz4g
bmFtZXM7CisgICAgR1JlZlB0cjxHUHRyQXJyYXk+IHNlbGVjdGVkRmlsZXMgPSBhZG9wdEdSZWYo
Z19wdHJfYXJyYXlfbmV3X3dpdGhfZnJlZV9mdW5jKGdfZnJlZSkpOworCisgICAgZm9yIChpbnQg
aSA9IDA7IGZpbGVzW2ldOyBpKyspIHsKKyAgICAgICAgbmFtZXMuYXBwZW5kKGZpbGVuYW1lVG9T
dHJpbmcoZmlsZXNbaV0pKTsKKyAgICAgICAgZ19wdHJfYXJyYXlfYWRkKHNlbGVjdGVkRmlsZXMu
Z2V0KCksIGdfc3RyZHVwKGZpbGVzW2ldKSk7CisgICAgfQorCisgICAgZ19wdHJfYXJyYXlfYWRk
KHNlbGVjdGVkRmlsZXMuZ2V0KCksIDApOworICAgIHJlcXVlc3QtPnByaXYtPmNob29zZXItPmNo
b29zZUZpbGVzKG5hbWVzKTsKKyAgICByZXF1ZXN0LT5wcml2LT5zZWxlY3RlZEZpbGVzID0gc2Vs
ZWN0ZWRGaWxlczsKK30KKworLyoqCisgKiB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0
X3NlbGVjdGVkX2ZpbGVzOgorICogQHJlcXVlc3Q6IGEgI1dlYktpdEZpbGVDaG9vc2VyUmVxdWVz
dAorICoKKyAqIEdldCB0aGUgbGlzdCBvZiBzZWxlY3RlZCBmaWxlcyBjdXJyZW50bHkgYXNzb2Np
YXRlZCB0byB0aGUKKyAqIHJlcXVlc3QuIEluaXRpYWxseSwgdGhlIHJldHVybiB2YWx1ZSBvZiB0
aGlzIG1ldGhvZCBjb250YWlucyBhbnkKKyAqIGZpbGVzIHNlbGVjdGVkIGluIHByZXZpb3VzIGZp
bGUgY2hvb3NlciByZXF1ZXN0cyBmb3IgdGhpcyBIVE1MCisgKiBpbnB1dCBlbGVtZW50LiBPbmNl
IHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9zZWxlY3RfZmlsZXMsIHRoZQorICogdmFsdWUg
d2lsbCByZWZsZWN0IHdoYXRldmVyIGZpbGVzIGFyZSBnaXZlbi4KKyAqCisgKiBUaGlzIGZ1bmN0
aW9uIHNob3VsZCBub3JtYWxseSBiZSBjYWxsZWQgb25seSBiZWZvcmUgcHJlc2VudGluZyB0aGUK
KyAqIGZpbGUgY2hvb3NlciBkaWFsb2cgdG8gdGhlIHVzZXIsIHRvIGRlY2lkZSB3aGV0aGVyIHRv
IHBlcmZvcm0gc29tZQorICogZXh0cmEgYWN0aW9uLCBsaWtlIHByZS1zZWxlY3RpbmcgdGhlIGZp
bGVzIGZyb20gYSBwcmV2aW91cyByZXF1ZXN0LgorICoKKyAqIFJldHVybnM6IChhcnJheSB6ZXJv
LXRlcm1pbmF0ZWQ9MSkgKHRyYW5zZmVyIG5vbmUpOiBhCisgKiAlTlVMTC10ZXJtaW5hdGVkIGFy
cmF5IG9mIHN0cmluZ3MgaWYgdGhlcmUgYXJlIHNlbGVjdGVkIGZpbGVzCisgKiBhc3NvY2lhdGVk
IHdpdGggdGhlIHJlcXVlc3Qgb3IgJU5VTEwgb3RoZXJ3aXNlLiBUaGlzIGFycmF5IGFuZCBpdHMK
KyAqIGNvbnRlbnRzIGFyZSBvd25lZCBieSBXZWJLaXRHVEsrIGFuZCBzaG91bGQgbm90IGJlIG1v
ZGlmaWVkIG9yCisgKiBmcmVlZC4KKyAqLworY29uc3QgZ2NoYXIqIGNvbnN0KiB3ZWJraXRfZmls
ZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X3NlbGVjdGVkX2ZpbGVzKFdlYktpdEZpbGVDaG9vc2VyUmVx
dWVzdCogcmVxdWVzdCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfRklM
RV9DSE9PU0VSX1JFUVVFU1QocmVxdWVzdCksIDApOworICAgIGlmIChyZXF1ZXN0LT5wcml2LT5z
ZWxlY3RlZEZpbGVzKQorICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxnY2hhcioqPihy
ZXF1ZXN0LT5wcml2LT5zZWxlY3RlZEZpbGVzLT5wZGF0YSk7CisKKyAgICBGaWxlQ2hvb3NlclNl
dHRpbmdzIHNldHRpbmdzID0gcmVxdWVzdC0+cHJpdi0+Y2hvb3Nlci0+c2V0dGluZ3MoKTsKKyAg
ICBzaXplX3QgbnVtT2ZGaWxlcyA9IHNldHRpbmdzLnNlbGVjdGVkRmlsZXMuc2l6ZSgpOworICAg
IGlmICghbnVtT2ZGaWxlcykKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXF1ZXN0LT5wcml2
LT5zZWxlY3RlZEZpbGVzID0gYWRvcHRHUmVmKGdfcHRyX2FycmF5X25ld193aXRoX2ZyZWVfZnVu
YyhnX2ZyZWUpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bU9mRmlsZXM7ICsraSkg
eworICAgICAgICBpZiAoc2V0dGluZ3Muc2VsZWN0ZWRGaWxlc1tpXS5pc0VtcHR5KCkpCisgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgQ1N0cmluZyBmaWxlbmFtZSA9IGZpbGVTeXN0ZW1S
ZXByZXNlbnRhdGlvbihzZXR0aW5ncy5zZWxlY3RlZEZpbGVzW2ldKTsKKyAgICAgICAgZ19wdHJf
YXJyYXlfYWRkKHJlcXVlc3QtPnByaXYtPnNlbGVjdGVkRmlsZXMuZ2V0KCksIGdfc3RyZHVwKGZp
bGVuYW1lLmRhdGEoKSkpOworICAgIH0KKyAgICBnX3B0cl9hcnJheV9hZGQocmVxdWVzdC0+cHJp
di0+c2VsZWN0ZWRGaWxlcy5nZXQoKSwgMCk7CisKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2Fz
dDxnY2hhcioqPihyZXF1ZXN0LT5wcml2LT5zZWxlY3RlZEZpbGVzLT5wZGF0YSk7Cit9CkluZGV4
OiBTb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZmlsZWNob29zZXJyZXF1ZXN0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGZpbGVjaG9vc2VycmVx
dWVzdC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGZp
bGVjaG9vc2VycmVxdWVzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzEgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiB3ZWJraXRmaWxlY2hvb3Nl
cnJlcXVlc3RfaAorI2RlZmluZSB3ZWJraXRmaWxlY2hvb3NlcnJlcXVlc3RfaAorCisjaW5jbHVk
ZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUgPHdlYmtpdC93ZWJraXRkZWZpbmVzLmg+CisKK0dfQkVH
SU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfVFlQRV9GSUxFX0NIT09TRVJfUkVRVUVTVCAgICAg
ICAgICAgICh3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X3R5cGUoKSkKKyNkZWZpbmUg
V0VCS0lUX0ZJTEVfQ0hPT1NFUl9SRVFVRVNUKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNL
X0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9UWVBFX0ZJTEVfQ0hPT1NFUl9SRVFVRVNULCBX
ZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QpKQorI2RlZmluZSBXRUJLSVRfRklMRV9DSE9PU0VSX1JF
UVVFU1RfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAg
V0VCS0lUX1RZUEVfRklMRV9DSE9PU0VSX1JFUVVFU1QsIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVz
dENsYXNzKSkKKyNkZWZpbmUgV0VCS0lUX0lTX0ZJTEVfQ0hPT1NFUl9SRVFVRVNUKG9iaikgICAg
ICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9UWVBFX0ZJTEVf
Q0hPT1NFUl9SRVFVRVNUKSkKKyNkZWZpbmUgV0VCS0lUX0lTX0ZJTEVfQ0hPT1NFUl9SRVFVRVNU
X0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9U
WVBFX0ZJTEVfQ0hPT1NFUl9SRVFVRVNUKSkKKyNkZWZpbmUgV0VCS0lUX0ZJTEVfQ0hPT1NFUl9S
RVFVRVNUX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwg
IFdFQktJVF9UWVBFX0ZJTEVfQ0hPT1NFUl9SRVFVRVNULCBXZWJLaXRGaWxlQ2hvb3NlclJlcXVl
c3RDbGFzcykpCisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QgICAg
ICAgIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdDsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRGaWxl
Q2hvb3NlclJlcXVlc3RDbGFzcyAgIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdENsYXNzOwordHlw
ZWRlZiBzdHJ1Y3QgX1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdFByaXZhdGUgV2ViS2l0RmlsZUNo
b29zZXJSZXF1ZXN0UHJpdmF0ZTsKKworc3RydWN0IF9XZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3Qg
eworICAgIEdPYmplY3QgcGFyZW50OworCisgICAgLyo8IHByaXZhdGUgPiovCisgICAgV2ViS2l0
RmlsZUNob29zZXJSZXF1ZXN0UHJpdmF0ZSAqcHJpdjsKK307CisKK3N0cnVjdCBfV2ViS2l0Rmls
ZUNob29zZXJSZXF1ZXN0Q2xhc3MgeworICAgIEdPYmplY3RDbGFzcyBwYXJlbnRfY2xhc3M7Cit9
OworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X3R5
cGUgICAgICAgICAgICAgICAgICAodm9pZCk7CisKK1dFQktJVF9BUEkgY29uc3QgZ2NoYXIgKiBj
b25zdCAqCit3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X21pbWVfdHlwZXMgICAgICAg
IChXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QgKnJlcXVlc3QpOworCitXRUJLSVRfQVBJIEd0a0Zp
bGVGaWx0ZXIgKgord2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9taW1lX3R5cGVzX2Zp
bHRlciAoV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0ICpyZXF1ZXN0KTsKKworV0VCS0lUX0FQSSBn
Ym9vbGVhbgord2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9zZWxlY3RfbXVsdGlwbGUg
ICAoV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0ICpyZXF1ZXN0KTsKKworV0VCS0lUX0FQSSB2b2lk
Cit3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3Rfc2VsZWN0X2ZpbGVzICAgICAgICAgIChXZWJL
aXRGaWxlQ2hvb3NlclJlcXVlc3QgKnJlcXVlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAqIGNvbnN0ICAgICAgKmZpbGVz
KTsKKworV0VCS0lUX0FQSSBjb25zdCBnY2hhciAqIGNvbnN0ICoKK3dlYmtpdF9maWxlX2Nob29z
ZXJfcmVxdWVzdF9nZXRfc2VsZWN0ZWRfZmlsZXMgICAgKFdlYktpdEZpbGVDaG9vc2VyUmVxdWVz
dCAqcmVxdWVzdCk7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZgpJbmRleDogU291cmNlL1dlYktp
dC9ndGsvd2Via2l0L3dlYmtpdGZpbGVjaG9vc2VycmVxdWVzdHByaXZhdGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZmlsZWNob29zZXJyZXF1ZXN0cHJp
dmF0ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGZp
bGVjaG9vc2VycmVxdWVzdHByaXZhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMwIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgd2Via2l0Zmls
ZWNob29zZXJyZXF1ZXN0cHJpdmF0ZV9oCisjZGVmaW5lIHdlYmtpdGZpbGVjaG9vc2VycmVxdWVz
dHByaXZhdGVfaAorCisjaW5jbHVkZSAiRmlsZUNob29zZXIuaCIKKyNpbmNsdWRlICJ3ZWJraXRm
aWxlY2hvb3NlcnJlcXVlc3QuaCIKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK1dlYktp
dEZpbGVDaG9vc2VyUmVxdWVzdCogd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2NyZWF0ZShQ
YXNzUmVmUHRyPEZpbGVDaG9vc2VyPiBjaG9vc2VyKTsKKworI2VuZGlmCkluZGV4OiBTb3VyY2Uv
V2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwCShyZXZpc2lvbiAxMTk5NDYpCisr
KyBTb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTIxNiw2ICsyMTYsNyBAQCBlbnVtIHsKICAgICBFTlRFUklOR19GVUxMU0NSRUVOLAog
ICAgIExFQVZJTkdfRlVMTFNDUkVFTiwKICAgICBDT05URVhUX01FTlUsCisgICAgUlVOX0ZJTEVf
Q0hPT1NFUiwKIAogICAgIExBU1RfU0lHTkFMCiB9OwpAQCAtMTI5NCw2ICsxMjk1LDQ4IEBAIHN0
YXRpYyBnYm9vbGVhbiB3ZWJraXRfd2ViX3ZpZXdfcmVhbF9sZWEKICAgICByZXR1cm4gRkFMU0U7
CiB9CiAKK3N0YXRpYyB2b2lkIGZpbGVDaG9vc2VyRGlhbG9nUmVzcG9uc2VDYWxsYmFjayhHdGtE
aWFsb2cqIGRpYWxvZywgZ2ludCByZXNwb25zZUlELCBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3Qq
IHJlcXVlc3QpCit7CisgICAgR1JlZlB0cjxXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3Q+IGFkb3B0
ZWRSZXF1ZXN0ID0gYWRvcHRHUmVmKHJlcXVlc3QpOworICAgIGlmIChyZXNwb25zZUlEID09IEdU
S19SRVNQT05TRV9BQ0NFUFQpIHsKKyAgICAgICAgR093blB0cjxHU0xpc3Q+IGZpbGVzTGlzdChn
dGtfZmlsZV9jaG9vc2VyX2dldF9maWxlbmFtZXMoR1RLX0ZJTEVfQ0hPT1NFUihkaWFsb2cpKSk7
CisgICAgICAgIEdSZWZQdHI8R1B0ckFycmF5PiBmaWxlc0FycmF5ID0gYWRvcHRHUmVmKGdfcHRy
X2FycmF5X25ldygpKTsKKyAgICAgICAgZm9yIChHU0xpc3QqIGZpbGUgPSBmaWxlc0xpc3QuZ2V0
KCk7IGZpbGU7IGZpbGUgPSBnX3NsaXN0X25leHQoZmlsZSkpCisgICAgICAgICAgICBnX3B0cl9h
cnJheV9hZGQoZmlsZXNBcnJheS5nZXQoKSwgZmlsZS0+ZGF0YSk7CisgICAgICAgIGdfcHRyX2Fy
cmF5X2FkZChmaWxlc0FycmF5LmdldCgpLCAwKTsKKyAgICAgICAgd2Via2l0X2ZpbGVfY2hvb3Nl
cl9yZXF1ZXN0X3NlbGVjdF9maWxlcyhhZG9wdGVkUmVxdWVzdC5nZXQoKSwgcmVpbnRlcnByZXRf
Y2FzdDxjb25zdCBnY2hhciogY29uc3QqPihmaWxlc0FycmF5LT5wZGF0YSkpOworICAgIH0KKwor
ICAgIGd0a193aWRnZXRfZGVzdHJveShHVEtfV0lER0VUKGRpYWxvZykpOworfQorCitzdGF0aWMg
Z2Jvb2xlYW4gd2Via2l0V2ViVmlld1JlYWxSdW5GaWxlQ2hvb3NlcihXZWJLaXRXZWJWaWV3KiB3
ZWJWaWV3LCBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QqIHJlcXVlc3QpCit7CisgICAgR3RrV2lk
Z2V0KiB0b3BsZXZlbCA9IGd0a193aWRnZXRfZ2V0X3RvcGxldmVsKEdUS19XSURHRVQod2ViVmll
dykpOworICAgIGlmICghd2lkZ2V0SXNPbnNjcmVlblRvcGxldmVsV2luZG93KHRvcGxldmVsKSkK
KyAgICAgICAgdG9wbGV2ZWwgPSAwOworCisgICAgZ2Jvb2xlYW4gYWxsb3dzTXVsdGlwbGVTZWxl
Y3Rpb24gPSB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X3NlbGVjdF9tdWx0aXBsZShy
ZXF1ZXN0KTsKKyAgICBHdGtXaWRnZXQqIGRpYWxvZyA9IGd0a19maWxlX2Nob29zZXJfZGlhbG9n
X25ldyhhbGxvd3NNdWx0aXBsZVNlbGVjdGlvbiA/IF8oIlNlbGVjdCBGaWxlcyIpIDogXygiU2Vs
ZWN0IEZpbGUiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0b3BsZXZlbCA/IEdUS19XSU5ET1codG9wbGV2ZWwpIDogMCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHVEtfRklMRV9DSE9PU0VS
X0FDVElPTl9PUEVOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEdUS19TVE9DS19DQU5DRUwsIEdUS19SRVNQT05TRV9DQU5DRUwsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1RLX1NUT0NLX09Q
RU4sIEdUS19SRVNQT05TRV9BQ0NFUFQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CisKKyAgICBpZiAoR3RrRmlsZUZpbHRlciogZmls
dGVyID0gd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9taW1lX3R5cGVzX2ZpbHRlcihy
ZXF1ZXN0KSkKKyAgICAgICAgZ3RrX2ZpbGVfY2hvb3Nlcl9zZXRfZmlsdGVyKEdUS19GSUxFX0NI
T09TRVIoZGlhbG9nKSwgZmlsdGVyKTsKKyAgICBndGtfZmlsZV9jaG9vc2VyX3NldF9zZWxlY3Rf
bXVsdGlwbGUoR1RLX0ZJTEVfQ0hPT1NFUihkaWFsb2cpLCBhbGxvd3NNdWx0aXBsZVNlbGVjdGlv
bik7CisKKyAgICBpZiAoY29uc3QgZ2NoYXIqIGNvbnN0KiBzZWxlY3RlZEZpbGVzID0gd2Via2l0
X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9zZWxlY3RlZF9maWxlcyhyZXF1ZXN0KSkKKyAgICAg
ICAgZ3RrX2ZpbGVfY2hvb3Nlcl9zZWxlY3RfZmlsZW5hbWUoR1RLX0ZJTEVfQ0hPT1NFUihkaWFs
b2cpLCBzZWxlY3RlZEZpbGVzWzBdKTsKKworICAgIGdfc2lnbmFsX2Nvbm5lY3QoZGlhbG9nLCAi
cmVzcG9uc2UiLCBHX0NBTExCQUNLKGZpbGVDaG9vc2VyRGlhbG9nUmVzcG9uc2VDYWxsYmFjayks
IGdfb2JqZWN0X3JlZihyZXF1ZXN0KSk7CisgICAgZ3RrX3dpZGdldF9zaG93KGRpYWxvZyk7CisK
KyAgICByZXR1cm4gVFJVRTsKK30KKwogc3RhdGljIHZvaWQgd2Via2l0X3dlYl92aWV3X2Rpc3Bv
c2UoR09iamVjdCogb2JqZWN0KQogewogICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcgPSBXRUJL
SVRfV0VCX1ZJRVcob2JqZWN0KTsKQEAgLTI1NDcsNiArMjU5MCwzNyBAQCBzdGF0aWMgdm9pZCB3
ZWJraXRfd2ViX3ZpZXdfY2xhc3NfaW5pdChXCiAgICAgICAgICAgICBHX1RZUEVfTk9ORSwgMSwK
ICAgICAgICAgICAgIFdFQktJVF9UWVBFX1dFQl9GUkFNRSk7CiAKKyAgICAgLyoqCisgICAgICog
V2ViS2l0V2ViVmlldzo6cnVuLWZpbGUtY2hvb3NlcjoKKyAgICAgKiBAd2ViX3ZpZXc6IHRoZSAj
V2ViS2l0V2ViVmlldyBvbiB3aGljaCB0aGUgc2lnbmFsIGlzIGVtaXR0ZWQKKyAgICAgKiBAcmVx
dWVzdDogYSAjV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0CisgICAgICoKKyAgICAgKiBUaGlzIHNp
Z25hbCBpcyBlbWl0dGVkIHdoZW4gdGhlIHVzZXIgaW50ZXJhY3RzIHdpdGggYSAmbHQ7aW5wdXQK
KyAgICAgKiB0eXBlPSdmaWxlJyAvJmd0OyBIVE1MIGVsZW1lbnQsIHJlcXVlc3RpbmcgZnJvbSBX
ZWJLaXQgdG8gc2hvdworICAgICAqIGEgZGlhbG9nIHRvIHNlbGVjdCBvbmUgb3IgbW9yZSBmaWxl
cyB0byBiZSB1cGxvYWRlZC4gVG8gbGV0IHRoZQorICAgICAqIGFwcGxpY2F0aW9uIGtub3cgdGhl
IGRldGFpbHMgb2YgdGhlIGZpbGUgY2hvb3NlciwgYXMgd2VsbCBhcyB0bworICAgICAqIGFsbG93
IHRoZSBjbGllbnQgYXBwbGljYXRpb24gdG8gZWl0aGVyIGNhbmNlbCB0aGUgcmVxdWVzdCBvcgor
ICAgICAqIHBlcmZvcm0gYW4gYWN0dWFsIHNlbGVjdGlvbiBvZiBmaWxlcywgdGhlIHNpZ25hbCB3
aWxsIHBhc3MgYW4KKyAgICAgKiBpbnN0YW5jZSBvZiB0aGUgI1dlYktpdEZpbGVDaG9vc2VyUmVx
dWVzdCBpbiB0aGUgQHJlcXVlc3QKKyAgICAgKiBhcmd1bWVudC4KKyAgICAgKgorICAgICAqIFRo
ZSBkZWZhdWx0IHNpZ25hbCBoYW5kbGVyIHdpbGwgYXN5bmNocm9ub3VzbHkgcnVuIGEgcmVndWxh
cgorICAgICAqICNHdGtGaWxlQ2hvb3NlckRpYWxvZyBmb3IgdGhlIHVzZXIgdG8gaW50ZXJhY3Qg
d2l0aC4KKyAgICAgKgorICAgICAqIFJldHVybnM6ICVUUlVFIHRvIHN0b3Agb3RoZXIgaGFuZGxl
cnMgZnJvbSBiZWluZyBpbnZva2VkIGZvciB0aGUgZXZlbnQuCisgICAgICogICAlRkFMU0UgdG8g
cHJvcGFnYXRlIHRoZSBldmVudCBmdXJ0aGVyLgorICAgICAqCisgICAgICovCisgICAgd2Via2l0
X3dlYl92aWV3X3NpZ25hbHNbUlVOX0ZJTEVfQ0hPT1NFUl0gPQorICAgICAgICBnX3NpZ25hbF9u
ZXcoInJ1bi1maWxlLWNob29zZXIiLAorICAgICAgICAgICAgICAgICAgICAgR19UWVBFX0ZST01f
Q0xBU1Mod2ViVmlld0NsYXNzKSwKKyAgICAgICAgICAgICAgICAgICAgIEdfU0lHTkFMX1JVTl9M
QVNULAorICAgICAgICAgICAgICAgICAgICAgR19TVFJVQ1RfT0ZGU0VUKFdlYktpdFdlYlZpZXdD
bGFzcywgcnVuX2ZpbGVfY2hvb3NlciksCisgICAgICAgICAgICAgICAgICAgICBnX3NpZ25hbF9h
Y2N1bXVsYXRvcl90cnVlX2hhbmRsZWQsIDAgLyogYWNjdW11bGF0b3IgZGF0YSAqLywKKyAgICAg
ICAgICAgICAgICAgICAgIHdlYmtpdF9tYXJzaGFsX0JPT0xFQU5fX09CSkVDVCwKKyAgICAgICAg
ICAgICAgICAgICAgIEdfVFlQRV9CT09MRUFOLCAxLCAvKiBudW1iZXIgb2YgcGFyYW1ldGVycyAq
LworICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX1RZUEVfRklMRV9DSE9PU0VSX1JFUVVFU1Qp
OworCiAgICAgd2Via2l0X3dlYl92aWV3X3NpZ25hbHNbU0hPVUxEX0JFR0lOX0VESVRJTkddID0g
Z19zaWduYWxfbmV3KCJzaG91bGQtYmVnaW4tZWRpdGluZyIsCiAgICAgICAgIEdfVFlQRV9GUk9N
X0NMQVNTKHdlYlZpZXdDbGFzcyksIHN0YXRpY19jYXN0PEdTaWduYWxGbGFncz4oR19TSUdOQUxf
UlVOX0xBU1QgfCBHX1NJR05BTF9BQ1RJT04pLAogICAgICAgICBHX1NUUlVDVF9PRkZTRVQoV2Vi
S2l0V2ViVmlld0NsYXNzLCBzaG91bGRfYWxsb3dfZWRpdGluZ19hY3Rpb24pLCBnX3NpZ25hbF9h
Y2N1bXVsYXRvcl9maXJzdF93aW5zLCAwLApAQCAtMjg1Niw2ICsyOTMwLDcgQEAgc3RhdGljIHZv
aWQgd2Via2l0X3dlYl92aWV3X2NsYXNzX2luaXQoVwogICAgIHdlYlZpZXdDbGFzcy0+c2hvdWxk
X2FsbG93X2VkaXRpbmdfYWN0aW9uID0gd2Via2l0X3dlYl92aWV3X3JlYWxfc2hvdWxkX2FsbG93
X2VkaXRpbmdfYWN0aW9uOwogICAgIHdlYlZpZXdDbGFzcy0+ZW50ZXJpbmdfZnVsbHNjcmVlbiA9
IHdlYmtpdF93ZWJfdmlld19yZWFsX2VudGVyaW5nX2Z1bGxzY3JlZW47CiAgICAgd2ViVmlld0Ns
YXNzLT5sZWF2aW5nX2Z1bGxzY3JlZW4gPSB3ZWJraXRfd2ViX3ZpZXdfcmVhbF9sZWF2aW5nX2Z1
bGxzY3JlZW47CisgICAgd2ViVmlld0NsYXNzLT5ydW5fZmlsZV9jaG9vc2VyID0gd2Via2l0V2Vi
Vmlld1JlYWxSdW5GaWxlQ2hvb3NlcjsKIAogICAgIEdPYmplY3RDbGFzcyogb2JqZWN0Q2xhc3Mg
PSBHX09CSkVDVF9DTEFTUyh3ZWJWaWV3Q2xhc3MpOwogICAgIG9iamVjdENsYXNzLT5kaXNwb3Nl
ID0gd2Via2l0X3dlYl92aWV3X2Rpc3Bvc2U7CkBAIC0zNjEwLDYgKzM2ODUsMTIgQEAgR3RrV2lk
Z2V0KiB3ZWJraXRfd2ViX3ZpZXdfbmV3KHZvaWQpCiAgICAgcmV0dXJuIEdUS19XSURHRVQod2Vi
Vmlldyk7CiB9CiAKK3ZvaWQgd2Via2l0X3dlYl92aWV3X3J1bl9maWxlX2Nob29zZXJfcmVxdWVz
dChXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QqIHJlcXVl
c3QpCit7CisgICAgZ2Jvb2xlYW4gcmV0dXJuVmFsdWU7CisgICAgZ19zaWduYWxfZW1pdCh3ZWJW
aWV3LCB3ZWJraXRfd2ViX3ZpZXdfc2lnbmFsc1tSVU5fRklMRV9DSE9PU0VSXSwgMCwgcmVxdWVz
dCwgJnJldHVyblZhbHVlKTsKK30KKwogLy8gZm9yIGludGVybmFsIHVzZSBvbmx5CiB2b2lkIHdl
YmtpdF93ZWJfdmlld19ub3RpZnlfcmVhZHkoV2ViS2l0V2ViVmlldyogd2ViVmlldykKIHsKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuaAkocmV2aXNpb24gMTE5
OTQ2KQorKysgU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogCiAjaW5jbHVkZSA8d2Via2l0L3dlYmtpdGRlZmlu
ZXMuaD4KICNpbmNsdWRlIDx3ZWJraXQvd2Via2l0ZG9tLmg+CisjaW5jbHVkZSA8d2Via2l0L3dl
YmtpdGZpbGVjaG9vc2VycmVxdWVzdC5oPgogI2luY2x1ZGUgPHdlYmtpdC93ZWJraXR3ZWJiYWNr
Zm9yd2FyZGxpc3QuaD4KICNpbmNsdWRlIDx3ZWJraXQvd2Via2l0d2ViZnJhbWUuaD4KICNpbmNs
dWRlIDx3ZWJraXQvd2Via2l0d2ViaGlzdG9yeWl0ZW0uaD4KQEAgLTE2NSw2ICsxNjYsOCBAQCBz
dHJ1Y3QgX1dlYktpdFdlYlZpZXdDbGFzcyB7CiAgICAgZ2Jvb2xlYW4gICAgICAgICAgICAgICAg
ICAgKCogbW92ZV9jdXJzb3IpICAgICAgICAgICAgKFdlYktpdFdlYlZpZXcgICAgICAgICp3ZWJf
dmlldywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR3RrTW92ZW1lbnRTdGVwICAgICAgIHN0ZXAsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQgICAgICAgICAgICAg
ICAgICBjb3VudCk7CisgICAgZ2Jvb2xlYW4gICAgICAgICAgICAgICAgICAgKCogcnVuX2ZpbGVf
Y2hvb3NlcikgICAgICAgKFdlYktpdFdlYlZpZXcgICAgICAgICAgICAqd2ViX3ZpZXcsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdl
YktpdEZpbGVDaG9vc2VyUmVxdWVzdCAqcmVxdWVzdCk7CiAKICAgICAvKgogICAgICAqIGludGVy
bmFsCkluZGV4OiBTb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlld3ByaXZhdGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlld3By
aXZhdGUuaAkocmV2aXNpb24gMTE5OTQ2KQorKysgU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dl
YmtpdHdlYnZpZXdwcml2YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEzNyw2ICsxMzcsOCBAQCBH
dGtNZW51KiB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2NvbnRleHRfbWVuCiB2b2lkIHdlYlZpZXdFbnRl
ckZ1bGxzY3JlZW4oV2ViS2l0V2ViVmlldyogd2ViVmlldywgV2ViQ29yZTo6Tm9kZSopOwogdm9p
ZCB3ZWJWaWV3RXhpdEZ1bGxzY3JlZW4oV2ViS2l0V2ViVmlldyogd2ViVmlldyk7CiAKK3ZvaWQg
d2Via2l0X3dlYl92aWV3X3J1bl9maWxlX2Nob29zZXJfcmVxdWVzdChXZWJLaXRXZWJWaWV3Kiwg
V2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0Kik7CisKICNpZiBFTkFCTEUoSUNPTkRBVEFCQVNFKQog
dm9pZCB3ZWJraXRXZWJWaWV3UmVnaXN0ZXJGb3JJY29uTm90aWZpY2F0aW9uKFdlYktpdFdlYlZp
ZXcqLCBib29sIHNob3VsZFJlZ2lzdGVyKTsKIHZvaWQgd2Via2l0V2ViVmlld0ljb25Mb2FkZWQo
V2ViS2l0RmF2aWNvbkRhdGFiYXNlKiwgY29uc3QgY2hhciogZnJhbWVVUkksIFdlYktpdFdlYlZp
ZXcqKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>147888</attachid>
            <date>2012-06-15 13:39:48 -0700</date>
            <delta_ts>2012-06-20 15:01:50 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-87283-20120615163948.patch</filename>
            <type>text/plain</type>
            <size>47140</size>
            <attacher name="Daniel Drake">dsd</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L2d0ay9DaGFuZ2VMb2cJKHJldmlzaW9uIDExOTk0NikKKysrIFNvdXJjZS9XZWJLaXQv
Z3RrL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDgyIEBACisyMDEyLTA2LTEw
ICBEYW5pZWwgRHJha2UgIDxkc2RAbGFwdG9wLm9yZz4KKworICAgICAgICBbR1RLXSBCYWNrcG9y
dCBydW4tZmlsZS1jaG9vc2VyIHRvIFdlYktpdDEKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTg3MjgzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgVGhpcyBpcyBhIHJlbGF0aXZlbHkgc3RyYWlnaHRmb3J3YXJk
IGJhY2twb3J0IG9mIE1hcmlvIFNhbmNoZXoKKyAgICAgICAgUHJhZGEncyBXZWJLaXQyIHJ1bi1m
aWxlLWNob29zZXIgc2lnbmFsIHdvcmssIGludGVuZGVkIGZvciB1c2UgYnkKKyAgICAgICAgT0xQ
QyBhbmQgb3RoZXJzIHdobyBhcmUgbm90IHF1aXRlIHJlYWR5IHRvIG1vdmUgdG8gV2ViS2l0Mi4K
KworICAgICAgICBBZGQgYSBuZXcgcHVibGljIGNsYXNzIHRvIHRoZSBBUEksIFdlYktpdEZpbGVD
aG9vc2VyUmVxdWVzdCwgdG8gYmUKKyAgICAgICAgZW1pdHRlZCBhbG9uZyB3aXRoIGEgbmV3IFdl
YktpdFdlYlZpZXc6OnJ1bi1maWxlLWNob29zZXIgc2lnbmFsIHRvCisgICAgICAgIGxldCBjbGll
bnQgYXBwbGljYXRpb25zIHRvIHByb3ZpZGUgdGhlaXIgb3duIGZpbGUgY2hvb3NlciBkaWFsb2cK
KyAgICAgICAgd2hlbiB0aGUgdXNlIGludGVyYWN0cyB3aXRoIEhUTUwgSW5wdXQgZWxlbWVudHMg
b2YgdHlwZSAnZmlsZScuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbTogQWRkZWQgbmV3IHNv
dXJjZSBmaWxlcyBhbmQgaGVhZGVycy4KKyAgICAgICAgKiB3ZWJraXQvd2Via2l0ZmlsZWNob29z
ZXJyZXF1ZXN0LmNwcDogQWRkZWQuCisgICAgICAgIChfV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0
UHJpdmF0ZSk6CisgICAgICAgICh3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfaW5pdCk6Cisg
ICAgICAgICh3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZmluYWxpemUpOgorICAgICAgICAo
d2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9wcm9wZXJ0eSk6CisgICAgICAgICh3ZWJr
aXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfY2xhc3NfaW5pdCk6CisgICAgICAgICh3ZWJraXRfZmls
ZV9jaG9vc2VyX3JlcXVlc3RfY3JlYXRlKToKKyAgICAgICAgKHdlYmtpdF9maWxlX2Nob29zZXJf
cmVxdWVzdF9nZXRfbWltZV90eXBlcyk6CisgICAgICAgICh3ZWJraXRfZmlsZV9jaG9vc2VyX3Jl
cXVlc3RfZ2V0X21pbWVfdHlwZXNfZmlsdGVyKToKKyAgICAgICAgKHdlYmtpdF9maWxlX2Nob29z
ZXJfcmVxdWVzdF9nZXRfc2VsZWN0X211bHRpcGxlKToKKyAgICAgICAgKHdlYmtpdF9maWxlX2No
b29zZXJfcmVxdWVzdF9zZWxlY3RfZmlsZXMpOgorICAgICAgICAod2Via2l0X2ZpbGVfY2hvb3Nl
cl9yZXF1ZXN0X2dldF9zZWxlY3RlZF9maWxlcyk6CisgICAgICAgICogd2Via2l0L3dlYmtpdGZp
bGVjaG9vc2VycmVxdWVzdC5oOiBBZGRlZC4KKyAgICAgICAgKF9XZWJLaXRGaWxlQ2hvb3NlclJl
cXVlc3QpOgorICAgICAgICAoX1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdENsYXNzKToKKyAgICAg
ICAgKiB3ZWJraXQvd2Via2l0ZmlsZWNob29zZXJyZXF1ZXN0cHJpdmF0ZS5oOiBBZGRlZCwgCisg
ICAgICAgIGNvbnRhaW5pbmcgdGhlIHByb3RvdHlwZSBvZiB3ZWJraXRfZmlsZV9jaG9vc2VyX3Jl
cXVlc3RfY3JlYXRlLgorCisgICAgICAgIFByb3ZpZGUgcHJpdmF0ZSBBUEkgdG8gbWFrZSBhIGZp
bGUgY2hvb3NlciByZXF1ZXN0IGZyb20gdGhlCisgICAgICAgIFdlYlZpZXcsIGFuZCBwcm92aWRl
IGEgZGVmYXVsdCBoYW5kbGVyIGZvciBpdC4KKworICAgICAgICAqIHdlYmtpdC93ZWJraXR3ZWJ2
aWV3LmNwcDoKKyAgICAgICAgKGZpbGVDaG9vc2VyRGlhbG9nUmVzcG9uc2VDYWxsYmFjayk6IEhh
bmRsZXIgZm9yIHRoZSAncmVzcG9uc2UnCisgICAgICAgIHNpZ25hbCBmb3IgdGhlIEd0a0ZpbGVD
aG9vc2VyRGlhbG9nIHVzZWQgaW4gdGhlIGRlZmF1bHQKKyAgICAgICAgaGFuZGxlci4gSXQgd2ls
bCBjYWxsIHRvIHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9zZWxlY3RfZmlsZXMKKyAgICAg
ICAgb3Igd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2NhbmNlbCBhcyBuZWVkZWQuCisgICAg
ICAgICh3ZWJraXRXZWJWaWV3UmVhbFJ1bkZpbGVDaG9vc2VyKTogRGVmYXVsdCBoYW5kbGVyIGZv
ciB0aGUgbmV3CisgICAgICAgICdydW4tZmlsZS1jaG9vc2VyJyBzaWduYWwuIEl0IHdpbGwgY3Jl
YXRlIGEgR3RrRmlsZUNob29zZXJEaWFsb2csCisgICAgICAgIGNvbm5lY3QgdG8gdGhlICdyZXNw
b25zZScgc2lnbmFsIGFuZCBzaG93IGl0LgorICAgICAgICAod2Via2l0X3dlYl92aWV3X2NsYXNz
X2luaXQpOiBDb25uZWN0IHRoZSAncnVuLWZpbGUtY2hvb3NlcicKKyAgICAgICAgc2lnbmFsIHRv
IHRoZSBkZWZhdWx0IGhhbmRsZXIsIHdlYmtpdFdlYlZpZXdSdW5GaWxlQ2hvb3Nlci4KKyAgICAg
ICAgKHdlYmtpdF93ZWJfdmlld19uZXcpOgorICAgICAgICAod2Via2l0V2ViVmlld1J1bkZpbGVD
aG9vc2VyUmVxdWVzdCk6CisgICAgICAgICogd2Via2l0L3dlYmtpdHdlYnZpZXcuaDoKKyAgICAg
ICAgKF9XZWJLaXRXZWJWaWV3Q2xhc3MpOiBBZGRlZCBwcm90b3R5cGUgZm9yIHRoZSBoYW5kbGVy
IG9mIHRoZSBuZXcKKyAgICAgICAgJ3J1bi1maWxlLWNob29zZXInIHNpZ25hbC4KKyAgICAgICAg
KiB3ZWJraXQvd2Via2l0d2Vidmlld3ByaXZhdGUuaDogQWRkZWQgcHJvdG90eXBlIGZvcgorICAg
ICAgICBwcml2YXRlIG5ldyBmdW5jdGlvbiB3ZWJraXRXZWJWaWV3UnVuRmlsZUNob29zZXJSZXF1
ZXN0LgorCisgICAgICAgIFVwZGF0ZSBydW5PcGVuUGFuZWwgdG8gdXNlIHRoZSBuZXcgQVBJLCBp
bmNsdWRpbmcgYSBkZWZhdWx0IGhhbmRsZXIKKyAgICAgICAgd2l0aCBzaW1pbGFyIGJlaGF2aW91
ciB0byBiZWZvcmUuCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRHdGsu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpDaHJvbWVDbGllbnQ6OnJ1bk9wZW5QYW5lbCk6IE5vdyBj
cmVhdGVzIGFuIGluc3RhbmNlIG9mCisgICAgICAgIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCBh
bmQgYXNrcyB0aGUgV2ViVmlldyB0byBlbWl0IHRoZQorICAgICAgICBuZXcgJ3J1bi1maWxlLWNo
b29zZXInIHNpZ25hbCB3aXRoIGl0LgorCisgICAgICAgIEFkZGVkIHRoZSBuZXcgcHVibGljIGhl
YWRlciB0byB0aGUgbWFpbiBoZWFkZXIuCisKKyAgICAgICAgKiB3ZWJraXQvd2Via2l0Lmg6IEFk
ZGVkIHdlYmtpdGZpbGVjaG9vc2VycmVxdWVzdC5oCisKKyAgICAgICAgTmV3IHVuaXQgdGVzdHMg
Zm9yIHRoZSBuZXcgV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0IEFQSS4KKworICAgICAgICAqIHRl
c3RzL3Rlc3R3ZWJ2aWV3LmM6IFZhcmlvdXMgV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0IHRlc3Rz
LAorICAgICAgICBpbmNsdWRpbmcgTUlNRSB0eXBlIGZpbHRlcmluZyBhbmQgc2VsZWN0aW9uIGhh
bmRsaW5nLgorCisgICAgICAgIFVwZGF0ZWQgZG9jdW1lbnRhdGlvbiByZWxhdGVkIGZpbGVzIHdp
dGggdGhlIG5ldyBBUEkuCisKKyAgICAgICAgKiBkb2NzL3dlYmtpdGd0ay1kb2NzLnNnbWw6IEFk
ZGVkIG5ldyBzZWN0aW9uLgorICAgICAgICAqIGRvY3Mvd2Via2l0Z3RrLXNlY3Rpb25zLnR4dDog
QWRkZWQgbmV3IEFQSS4KKyAgICAgICAgKiBkb2NzL3dlYmtpdGd0ay50eXBlczogQWRkZWQgZ2V0
X3R5cGUgZnVuY3Rpb24uCisKIDIwMTItMDYtMDcgIFNpbW9uIFBlbmEgIDxzcGVuYUBpZ2FsaWEu
Y29tPgogCiAgICAgICAgIFtHVEtdIGRldmljZVNjYWxlRmFjdG9yIHNldHRpbmcgaXMgbm90IGhv
bm9yZWQKSW5kZXg6IFNvdXJjZS9XZWJLaXQvZ3RrL0dOVW1ha2VmaWxlLmFtCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvZ3RrL0dOVW1ha2VmaWxlLmFtCShyZXZpc2lvbiAxMTk5NDYpCisr
KyBTb3VyY2UvV2ViS2l0L2d0ay9HTlVtYWtlZmlsZS5hbQkod29ya2luZyBjb3B5KQpAQCAtMTE0
LDYgKzExNCw3IEBAIHdlYmtpdGd0a19zdGF0aWNfaF9hcGkgKz0gXAogCSQoc3JjZGlyKS9Tb3Vy
Y2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZG93bmxvYWQuaCBcCiAJJChzcmNkaXIpL1NvdXJj
ZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRlcnJvci5oIFwKIAkkKHNyY2RpcikvU291cmNlL1dl
YktpdC9ndGsvd2Via2l0L3dlYmtpdGZhdmljb25kYXRhYmFzZS5oIFwKKwkkKHNyY2RpcikvU291
cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGZpbGVjaG9vc2VycmVxdWVzdC5oIFwKIAkkKHNy
Y2RpcikvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGdlb2xvY2F0aW9ucG9saWN5ZGVj
aXNpb24uaCBcCiAJJChzcmNkaXIpL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRnbG9i
YWxzLmggXAogCSQoc3JjZGlyKS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0aGl0dGVz
dHJlc3VsdC5oIFwKQEAgLTIyMCw2ICsyMjEsOSBAQCB3ZWJraXRndGtfc291cmNlcyArPSBcCiAJ
U291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGVycm9yLmNwcCBcCiAJU291cmNlL1dlYktp
dC9ndGsvd2Via2l0L3dlYmtpdGZhdmljb25kYXRhYmFzZS5jcHAgXAogCVNvdXJjZS9XZWJLaXQv
Z3RrL3dlYmtpdC93ZWJraXRmYXZpY29uZGF0YWJhc2Vwcml2YXRlLmggXAorCVNvdXJjZS9XZWJL
aXQvZ3RrL3dlYmtpdC93ZWJraXRmaWxlY2hvb3NlcnJlcXVlc3QuY3BwIFwKKwlTb3VyY2UvV2Vi
S2l0L2d0ay93ZWJraXQvd2Via2l0ZmlsZWNob29zZXJyZXF1ZXN0LmggXAorCVNvdXJjZS9XZWJL
aXQvZ3RrL3dlYmtpdC93ZWJraXRmaWxlY2hvb3NlcnJlcXVlc3Rwcml2YXRlLmggXAogCVNvdXJj
ZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRnZW9sb2NhdGlvbnBvbGljeWRlY2lzaW9uLmNwcCBc
CiAJU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGdlb2xvY2F0aW9ucG9saWN5ZGVjaXNp
b25wcml2YXRlLmggXAogCVNvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRnbG9iYWxzLmNw
cCBcCkluZGV4OiBTb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRH
dGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0No
cm9tZUNsaWVudEd0ay5jcHAJKHJldmlzaW9uIDExOTk0NikKKysrIFNvdXJjZS9XZWJLaXQvZ3Rr
L1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1
LDYgKzU1LDcgQEAKICNpbmNsdWRlICJXZWJLaXRET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiV2Vi
S2l0RE9NSFRNTEVsZW1lbnRQcml2YXRlLmgiCiAjaW5jbHVkZSAiV2luZG93RmVhdHVyZXMuaCIK
KyNpbmNsdWRlICJ3ZWJraXRmaWxlY2hvb3NlcnJlcXVlc3Rwcml2YXRlLmgiCiAjaW5jbHVkZSAi
d2Via2l0Z2VvbG9jYXRpb25wb2xpY3lkZWNpc2lvbi5oIgogI2luY2x1ZGUgIndlYmtpdGdlb2xv
Y2F0aW9ucG9saWN5ZGVjaXNpb25wcml2YXRlLmgiCiAjaW5jbHVkZSAid2Via2l0bmV0d29ya3Jl
cXVlc3QuaCIKQEAgLTgxNSw0MCArODE2LDggQEAgdm9pZCBDaHJvbWVDbGllbnQ6OnJlYWNoZWRB
cHBsaWNhdGlvbkNhYwogCiB2b2lkIENocm9tZUNsaWVudDo6cnVuT3BlblBhbmVsKEZyYW1lKiwg
UGFzc1JlZlB0cjxGaWxlQ2hvb3Nlcj4gcHJwRmlsZUNob29zZXIpCiB7Ci0gICAgUmVmUHRyPEZp
bGVDaG9vc2VyPiBjaG9vc2VyID0gcHJwRmlsZUNob29zZXI7Ci0KLSAgICBHdGtXaWRnZXQqIHRv
cGxldmVsID0gZ3RrX3dpZGdldF9nZXRfdG9wbGV2ZWwoR1RLX1dJREdFVChtX3dlYlZpZXcpKTsK
LSAgICBpZiAoIXdpZGdldElzT25zY3JlZW5Ub3BsZXZlbFdpbmRvdyh0b3BsZXZlbCkpCi0gICAg
ICAgIHRvcGxldmVsID0gMDsKLQotICAgIEd0a1dpZGdldCogZGlhbG9nID0gZ3RrX2ZpbGVfY2hv
b3Nlcl9kaWFsb2dfbmV3KF8oIlVwbG9hZCBGaWxlIiksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9wbGV2ZWwgPyBHVEtfV0lORE9XKHRvcGxl
dmVsKSA6IDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgR1RLX0ZJTEVfQ0hPT1NFUl9BQ1RJT05fT1BFTiwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHVEtfU1RPQ0tfQ0FOQ0VMLCBHVEtfUkVT
UE9OU0VfQ0FOQ0VMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEdUS19TVE9DS19PUEVOLCBHVEtfUkVTUE9OU0VfQUNDRVBULAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOwotCi0gICAg
Z3RrX2ZpbGVfY2hvb3Nlcl9zZXRfc2VsZWN0X211bHRpcGxlKEdUS19GSUxFX0NIT09TRVIoZGlh
bG9nKSwgY2hvb3Nlci0+c2V0dGluZ3MoKS5hbGxvd3NNdWx0aXBsZUZpbGVzKTsKLQotICAgIGlm
IChndGtfZGlhbG9nX3J1bihHVEtfRElBTE9HKGRpYWxvZykpID09IEdUS19SRVNQT05TRV9BQ0NF
UFQpIHsKLSAgICAgICAgaWYgKGd0a19maWxlX2Nob29zZXJfZ2V0X3NlbGVjdF9tdWx0aXBsZShH
VEtfRklMRV9DSE9PU0VSKGRpYWxvZykpKSB7Ci0gICAgICAgICAgICBHT3duUHRyPEdTTGlzdD4g
ZmlsZW5hbWVzKGd0a19maWxlX2Nob29zZXJfZ2V0X2ZpbGVuYW1lcyhHVEtfRklMRV9DSE9PU0VS
KGRpYWxvZykpKTsKLSAgICAgICAgICAgIFZlY3RvcjxTdHJpbmc+IG5hbWVzOwotICAgICAgICAg
ICAgZm9yIChHU0xpc3QqIGl0ZW0gPSBmaWxlbmFtZXMuZ2V0KCkgOyBpdGVtIDsgaXRlbSA9IGl0
ZW0tPm5leHQpIHsKLSAgICAgICAgICAgICAgICBpZiAoIWl0ZW0tPmRhdGEpCi0gICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIG5hbWVzLmFwcGVuZChmaWxlbmFt
ZVRvU3RyaW5nKHN0YXRpY19jYXN0PGNoYXIqPihpdGVtLT5kYXRhKSkpOwotICAgICAgICAgICAg
ICAgIGdfZnJlZShpdGVtLT5kYXRhKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNob29z
ZXItPmNob29zZUZpbGVzKG5hbWVzKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGdj
aGFyKiBmaWxlbmFtZSA9IGd0a19maWxlX2Nob29zZXJfZ2V0X2ZpbGVuYW1lKEdUS19GSUxFX0NI
T09TRVIoZGlhbG9nKSk7Ci0gICAgICAgICAgICBpZiAoZmlsZW5hbWUpCi0gICAgICAgICAgICAg
ICAgY2hvb3Nlci0+Y2hvb3NlRmlsZShmaWxlbmFtZVRvU3RyaW5nKGZpbGVuYW1lKSk7Ci0gICAg
ICAgICAgICBnX2ZyZWUoZmlsZW5hbWUpOwotICAgICAgICB9Ci0gICAgfQotICAgIGd0a193aWRn
ZXRfZGVzdHJveShkaWFsb2cpOworICAgIEdSZWZQdHI8V2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0
PiByZXF1ZXN0ID0gYWRvcHRHUmVmKHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9jcmVhdGUo
cHJwRmlsZUNob29zZXIpKTsKKyAgICB3ZWJraXRXZWJWaWV3UnVuRmlsZUNob29zZXJSZXF1ZXN0
KG1fd2ViVmlldywgcmVxdWVzdC5nZXQoKSk7CiB9CiAKIHZvaWQgQ2hyb21lQ2xpZW50Ojpsb2Fk
SWNvbkZvckZpbGVzKGNvbnN0IFZlY3RvcjxXVEY6OlN0cmluZz4mIGZpbGVuYW1lcywgV2ViQ29y
ZTo6RmlsZUljb25Mb2FkZXIqIGxvYWRlcikKSW5kZXg6IFNvdXJjZS9XZWJLaXQvZ3RrL2RvY3Mv
d2Via2l0Z3RrLWRvY3Muc2dtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2d0ay9kb2Nz
L3dlYmtpdGd0ay1kb2NzLnNnbWwJKHJldmlzaW9uIDExOTk0NikKKysrIFNvdXJjZS9XZWJLaXQv
Z3RrL2RvY3Mvd2Via2l0Z3RrLWRvY3Muc2dtbAkod29ya2luZyBjb3B5KQpAQCAtNDEsNiArNDEs
NyBAQAogICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC93ZWJraXRpY29uZGF0YWJhc2UueG1sIi8+
CiAgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL3dlYmtpdHNwZWxsY2hlY2tlci54bWwiLz4KICAg
ICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvd2Via2l0ZmF2aWNvbmRhdGFiYXNlLnhtbCIvPgorICAg
IDx4aTppbmNsdWRlIGhyZWY9InhtbC93ZWJraXRmaWxlY2hvb3NlcnJlcXVlc3QueG1sIi8+CiAg
IDwvY2hhcHRlcj4KIAogICA8Y2hhcHRlcj4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvZ3RrL2RvY3Mv
d2Via2l0Z3RrLXNlY3Rpb25zLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2d0ay9k
b2NzL3dlYmtpdGd0ay1zZWN0aW9ucy50eHQJKHJldmlzaW9uIDExOTk0NikKKysrIFNvdXJjZS9X
ZWJLaXQvZ3RrL2RvY3Mvd2Via2l0Z3RrLXNlY3Rpb25zLnR4dAkod29ya2luZyBjb3B5KQpAQCAt
NzAzLDYgKzcwMywzMCBAQCBXZWJLaXRGYXZpY29uRGF0YWJhc2VQcml2YXRlCiA8L1NFQ1RJT04+
CiAKIDxTRUNUSU9OPgorPEZJTEU+d2Via2l0ZmlsZWNob29zZXJyZXF1ZXN0PC9GSUxFPgorPFRJ
VExFPldlYktpdEZpbGVDaG9vc2VyUmVxdWVzdDwvVElUTEU+CitXZWJLaXRGaWxlQ2hvb3NlclJl
cXVlc3QKK3dlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfc2VsZWN0X211bHRpcGxlCit3
ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X21pbWVfdHlwZXMKK3dlYmtpdF9maWxlX2No
b29zZXJfcmVxdWVzdF9nZXRfbWltZV90eXBlc19maWx0ZXIKK3dlYmtpdF9maWxlX2Nob29zZXJf
cmVxdWVzdF9nZXRfc2VsZWN0ZWRfZmlsZXMKK3dlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9z
ZWxlY3RfZmlsZXMKKworPFNVQlNFQ1RJT04gU3RhbmRhcmQ+CitXRUJLSVRfVFlQRV9GSUxFX0NI
T09TRVJfUkVRVUVTVAorV0VCS0lUX0ZJTEVfQ0hPT1NFUl9SRVFVRVNUCitXRUJLSVRfSVNfRklM
RV9DSE9PU0VSX1JFUVVFU1QKK1dFQktJVF9GSUxFX0NIT09TRVJfUkVRVUVTVF9DTEFTUworV0VC
S0lUX0lTX0ZJTEVfQ0hPT1NFUl9SRVFVRVNUX0NMQVNTCitXRUJLSVRfRklMRV9DSE9PU0VSX1JF
UVVFU1RfR0VUX0NMQVNTCisKKzxTVUJTRUNUSU9OIFByaXZhdGU+CitXZWJLaXRGaWxlQ2hvb3Nl
clJlcXVlc3RDbGFzcworV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0UHJpdmF0ZQord2Via2l0X2Zp
bGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF90eXBlCis8L1NFQ1RJT04+CisKKzxTRUNUSU9OPgogPEZJ
TEU+d2Via2l0ZGVmaW5lczwvRklMRT4KIFdFQktJVF9BUEkKIFdFQktJVEdUS19BUElfVkVSU0lP
TgpJbmRleDogU291cmNlL1dlYktpdC9ndGsvZG9jcy93ZWJraXRndGsudHlwZXMKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9ndGsvZG9jcy93ZWJraXRndGsudHlwZXMJKHJldmlzaW9uIDEx
OTk0NikKKysrIFNvdXJjZS9XZWJLaXQvZ3RrL2RvY3Mvd2Via2l0Z3RrLnR5cGVzCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDYgKzEsNyBAQAogI2luY2x1ZGUgPHdlYmtpdC93ZWJraXQuaD4KIHdlYmtp
dF9kb3dubG9hZF9nZXRfdHlwZQogd2Via2l0X2Zhdmljb25fZGF0YWJhc2VfZ2V0X3R5cGUKK3dl
YmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfdHlwZQogd2Via2l0X2dlb2xvY2F0aW9uX3Bv
bGljeV9kZWNpc2lvbl9nZXRfdHlwZQogd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9nZXRfdHlwZQog
d2Via2l0X2ljb25fZGF0YWJhc2VfZ2V0X3R5cGUKSW5kZXg6IFNvdXJjZS9XZWJLaXQvZ3RrL3Rl
c3RzL3Rlc3R3ZWJ2aWV3LmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9ndGsvdGVzdHMv
dGVzdHdlYnZpZXcuYwkocmV2aXNpb24gMTE5OTQ2KQorKysgU291cmNlL1dlYktpdC9ndGsvdGVz
dHMvdGVzdHdlYnZpZXcuYwkod29ya2luZyBjb3B5KQpAQCAtNTA2LDYgKzUwNiwxODYgQEAgc3Rh
dGljIHZvaWQgdGVzdF93ZWJraXRfd2ViX3ZpZXdfZnVsbHNjcgogICAgIGd0a193aWRnZXRfZGVz
dHJveSh3aW5kb3cpOwogfQogCitzdGF0aWMgZ2Jvb2xlYW4gY2hlY2tNaW1lVHlwZUZvckZpbHRl
cihHdGtGaWxlRmlsdGVyKiBmaWx0ZXIsIGNvbnN0IGdjaGFyKiBtaW1lVHlwZSkKK3sKKyAgICBH
dGtGaWxlRmlsdGVySW5mbyBmaWx0ZXJfaW5mbzsKKyAgICBmaWx0ZXJfaW5mby5jb250YWlucyA9
IEdUS19GSUxFX0ZJTFRFUl9NSU1FX1RZUEU7CisgICAgZmlsdGVyX2luZm8ubWltZV90eXBlID0g
bWltZVR5cGU7CisgICAgcmV0dXJuIGd0a19maWxlX2ZpbHRlcl9maWx0ZXIoZmlsdGVyLCAmZmls
dGVyX2luZm8pOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gcnVuRmlsZUNob29zZXJDYk5vTXVsdGlz
ZWxOb01pbWUoV2ViS2l0V2ViVmlldyogd2VidmlldywgV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0
KiByZXF1ZXN0LCBncG9pbnRlciBkYXRhKQoreworICAgIGdfYXNzZXJ0KCF3ZWJraXRfZmlsZV9j
aG9vc2VyX3JlcXVlc3RfZ2V0X3NlbGVjdF9tdWx0aXBsZShyZXF1ZXN0KSk7CisKKyAgICBjb25z
dCBnY2hhciogY29uc3QqIG1pbWVUeXBlcyA9IHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9n
ZXRfbWltZV90eXBlcyhyZXF1ZXN0KTsKKyAgICBnX2Fzc2VydCghbWltZVR5cGVzKTsKKyAgICBH
dGtGaWxlRmlsdGVyKiBmaWx0ZXIgPSB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X21p
bWVfdHlwZXNfZmlsdGVyKHJlcXVlc3QpOworICAgIGdfYXNzZXJ0KCFmaWx0ZXIpOworCisgICAg
Y29uc3QgZ2NoYXIqIGNvbnN0KiBzZWxlY3RlZEZpbGVzID0gd2Via2l0X2ZpbGVfY2hvb3Nlcl9y
ZXF1ZXN0X2dldF9zZWxlY3RlZF9maWxlcyhyZXF1ZXN0KTsKKyAgICBnX2Fzc2VydCghc2VsZWN0
ZWRGaWxlcyk7CisKKyAgICBnX21haW5fbG9vcF9xdWl0KGxvb3ApOworICAgIHJldHVybiBUUlVF
OworfQorCitzdGF0aWMgZ2Jvb2xlYW4gcnVuRmlsZUNob29zZXJDYk11bHRpc2VsTm9NaW1lKFdl
YktpdFdlYlZpZXcqIHdlYnZpZXcsIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCogcmVxdWVzdCwg
Z3BvaW50ZXIgZGF0YSkKK3sKKyAgICBnX2Fzc2VydCh3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVl
c3RfZ2V0X3NlbGVjdF9tdWx0aXBsZShyZXF1ZXN0KSk7CisKKyAgICBjb25zdCBnY2hhciogY29u
c3QqIG1pbWVUeXBlcyA9IHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfbWltZV90eXBl
cyhyZXF1ZXN0KTsKKyAgICBnX2Fzc2VydCghbWltZVR5cGVzKTsKKyAgICBHdGtGaWxlRmlsdGVy
KiBmaWx0ZXIgPSB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X21pbWVfdHlwZXNfZmls
dGVyKHJlcXVlc3QpOworICAgIGdfYXNzZXJ0KCFmaWx0ZXIpOworICAgIGNvbnN0IGdjaGFyKiBj
b25zdCogc2VsZWN0ZWRGaWxlcyA9IHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfc2Vs
ZWN0ZWRfZmlsZXMocmVxdWVzdCk7CisgICAgZ19hc3NlcnQoIXNlbGVjdGVkRmlsZXMpOworCisg
ICAgLy8gU2VsZWN0IHNvbWUgZmlsZXMuCisgICAgY29uc3QgZ2NoYXIqIGZpbGVzVG9TZWxlY3Rb
NF0gPSB7ICIvZm9vIiwgIi9mb28vYmFyIiwgIi9mb28vYmFyL2JheiIsIDAgfTsKKyAgICB3ZWJr
aXRfZmlsZV9jaG9vc2VyX3JlcXVlc3Rfc2VsZWN0X2ZpbGVzKHJlcXVlc3QsIGZpbGVzVG9TZWxl
Y3QpOworCisgICAgLy8gQ2hlY2sgdGhlIGZpbGVzIHRoYXQgaGF2ZSBiZWVuIGp1c3Qgc2VsZWN0
ZWQuCisgICAgc2VsZWN0ZWRGaWxlcyA9IHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRf
c2VsZWN0ZWRfZmlsZXMocmVxdWVzdCk7CisgICAgZ19hc3NlcnQoc2VsZWN0ZWRGaWxlcyk7Cisg
ICAgZ19hc3NlcnRfY21wc3RyKHNlbGVjdGVkRmlsZXNbMF0sID09LCAiL2ZvbyIpOworICAgIGdf
YXNzZXJ0X2NtcHN0cihzZWxlY3RlZEZpbGVzWzFdLCA9PSwgIi9mb28vYmFyIik7CisgICAgZ19h
c3NlcnRfY21wc3RyKHNlbGVjdGVkRmlsZXNbMl0sID09LCAiL2Zvby9iYXIvYmF6Iik7CisgICAg
Z19hc3NlcnQoIXNlbGVjdGVkRmlsZXNbM10pOworCisgICAgZ19tYWluX2xvb3BfcXVpdChsb29w
KTsKKyAgICByZXR1cm4gVFJVRTsKK30KKworc3RhdGljIGdib29sZWFuIHJ1bkZpbGVDaG9vc2Vy
Q2JTZWxlY3Rpb25SZXRhaW5lZChXZWJLaXRXZWJWaWV3KiB3ZWJ2aWV3LCBXZWJLaXRGaWxlQ2hv
b3NlclJlcXVlc3QqIHJlcXVlc3QsIGdwb2ludGVyIGRhdGEpCit7CisgICAgY29uc3QgZ2NoYXIq
IGNvbnN0KiBzZWxlY3RlZEZpbGVzID0gd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9z
ZWxlY3RlZF9maWxlcyhyZXF1ZXN0KTsKKyAgICBnX2Fzc2VydChzZWxlY3RlZEZpbGVzKTsKKyAg
ICBnX2Fzc2VydF9jbXBzdHIoc2VsZWN0ZWRGaWxlc1swXSwgPT0sICIvZm9vIik7CisgICAgZ19h
c3NlcnRfY21wc3RyKHNlbGVjdGVkRmlsZXNbMV0sID09LCAiL2Zvby9iYXIiKTsKKyAgICBnX2Fz
c2VydF9jbXBzdHIoc2VsZWN0ZWRGaWxlc1syXSwgPT0sICIvZm9vL2Jhci9iYXoiKTsKKyAgICBn
X2Fzc2VydCghc2VsZWN0ZWRGaWxlc1szXSk7CisKKyAgICBnX21haW5fbG9vcF9xdWl0KGxvb3Ap
OworICAgIHJldHVybiBUUlVFOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gcnVuRmlsZUNob29zZXJD
Yk5vTXVsdGlzZWxBY2NlcHRUeXBlcyhXZWJLaXRXZWJWaWV3KiB3ZWJ2aWV3LCBXZWJLaXRGaWxl
Q2hvb3NlclJlcXVlc3QqIHJlcXVlc3QsIGdwb2ludGVyIGRhdGEpCit7CisgICAgZ19hc3NlcnQo
IXdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfc2VsZWN0X211bHRpcGxlKHJlcXVlc3Qp
KTsKKworICAgIGNvbnN0IGdjaGFyKiBjb25zdCogbWltZVR5cGVzID0gd2Via2l0X2ZpbGVfY2hv
b3Nlcl9yZXF1ZXN0X2dldF9taW1lX3R5cGVzKHJlcXVlc3QpOworICAgIGdfYXNzZXJ0KG1pbWVU
eXBlcyk7CisgICAgZ19hc3NlcnRfY21wc3RyKG1pbWVUeXBlc1swXSwgPT0sICJhdWRpby8qIik7
CisgICAgZ19hc3NlcnRfY21wc3RyKG1pbWVUeXBlc1sxXSwgPT0sICJ2aWRlby8qIik7CisgICAg
Z19hc3NlcnRfY21wc3RyKG1pbWVUeXBlc1syXSwgPT0sICJpbWFnZS8qIik7CisgICAgZ19hc3Nl
cnQoIW1pbWVUeXBlc1szXSk7CisKKyAgICBHdGtGaWxlRmlsdGVyKiBmaWx0ZXIgPSB3ZWJraXRf
ZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X21pbWVfdHlwZXNfZmlsdGVyKHJlcXVlc3QpOworICAg
IGdfYXNzZXJ0KEdUS19JU19GSUxFX0ZJTFRFUihmaWx0ZXIpKTsKKyAgICBnX2Fzc2VydChjaGVj
a01pbWVUeXBlRm9yRmlsdGVyKGZpbHRlciwgImF1ZGlvLyoiKSk7CisgICAgZ19hc3NlcnQoY2hl
Y2tNaW1lVHlwZUZvckZpbHRlcihmaWx0ZXIsICJ2aWRlby8qIikpOworICAgIGdfYXNzZXJ0KGNo
ZWNrTWltZVR5cGVGb3JGaWx0ZXIoZmlsdGVyLCAiaW1hZ2UvKiIpKTsKKworICAgIGNvbnN0IGdj
aGFyKiBjb25zdCogc2VsZWN0ZWRGaWxlcyA9IHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9n
ZXRfc2VsZWN0ZWRfZmlsZXMocmVxdWVzdCk7CisgICAgZ19hc3NlcnQoIXNlbGVjdGVkRmlsZXMp
OworCisgICAgZ19tYWluX2xvb3BfcXVpdChsb29wKTsKKyAgICByZXR1cm4gVFJVRTsKK30KKwor
dm9pZCBkb01vdXNlQnV0dG9uRXZlbnQoR3RrV2lkZ2V0KiB3aWRnZXQsIEdka0V2ZW50VHlwZSBl
dmVudFR5cGUsIGludCB4LCBpbnQgeSwgdW5zaWduZWQgaW50IGJ1dHRvbiwgdW5zaWduZWQgaW50
IG1vZGlmaWVycykKK3sKKyAgICBnX2Fzc2VydChndGtfd2lkZ2V0X2dldF9yZWFsaXplZCh3aWRn
ZXQpKTsKKworICAgIEdka0V2ZW50KiBldmVudCA9IGdka19ldmVudF9uZXcoZXZlbnRUeXBlKTsK
KyAgICBldmVudC0+YnV0dG9uLndpbmRvdyA9IGd0a193aWRnZXRfZ2V0X3dpbmRvdyh3aWRnZXQp
OworICAgIGdfb2JqZWN0X3JlZihldmVudC0+YnV0dG9uLndpbmRvdyk7CisKKyAgICBldmVudC0+
YnV0dG9uLnRpbWUgPSBHREtfQ1VSUkVOVF9USU1FOworICAgIGV2ZW50LT5idXR0b24ueCA9IHg7
CisgICAgZXZlbnQtPmJ1dHRvbi55ID0geTsKKyAgICBldmVudC0+YnV0dG9uLmF4ZXMgPSAwOwor
ICAgIGV2ZW50LT5idXR0b24uc3RhdGUgPSBtb2RpZmllcnM7CisgICAgZXZlbnQtPmJ1dHRvbi5i
dXR0b24gPSBidXR0b247CisKKyAgICBldmVudC0+YnV0dG9uLmRldmljZSA9IGdka19kZXZpY2Vf
bWFuYWdlcl9nZXRfY2xpZW50X3BvaW50ZXIoZ2RrX2Rpc3BsYXlfZ2V0X2RldmljZV9tYW5hZ2Vy
KGd0a193aWRnZXRfZ2V0X2Rpc3BsYXkod2lkZ2V0KSkpOworCisgICAgaW50IHhSb290LCB5Um9v
dDsKKyAgICBnZGtfd2luZG93X2dldF9yb290X2Nvb3JkcyhndGtfd2lkZ2V0X2dldF93aW5kb3co
d2lkZ2V0KSwgeCwgeSwgJnhSb290LCAmeVJvb3QpOworICAgIGV2ZW50LT5idXR0b24ueF9yb290
ID0geFJvb3Q7CisgICAgZXZlbnQtPmJ1dHRvbi55X3Jvb3QgPSB5Um9vdDsKKyAgICBndGtfbWFp
bl9kb19ldmVudChldmVudCk7Cit9CisKK3N0YXRpYyB2b2lkIGNsaWNrTW91c2VCdXR0b24oR3Rr
V2lkZ2V0KiB3aWRnZXQsIGludCB4LCBpbnQgeSwgdW5zaWduZWQgaW50IGJ1dHRvbiwgdW5zaWdu
ZWQgaW50IG1vZGlmaWVycykKK3sKKyAgICBkb01vdXNlQnV0dG9uRXZlbnQod2lkZ2V0LCBHREtf
QlVUVE9OX1BSRVNTLCB4LCB5LCBidXR0b24sIG1vZGlmaWVycyk7CisgICAgZG9Nb3VzZUJ1dHRv
bkV2ZW50KHdpZGdldCwgR0RLX0JVVFRPTl9SRUxFQVNFLCB4LCB5LCBidXR0b24sIG1vZGlmaWVy
cyk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiBjbGlja01vdXNlQnV0dG9uQW5kV2FpdEZvckZpbGVD
aG9vc2VyUmVxdWVzdChXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQoreworICAgIGNsaWNrTW91c2VC
dXR0b24oR1RLX1dJREdFVCh3ZWJWaWV3KSwgNSwgNSwgMSwgMCk7CisgICAgcmV0dXJuIFRSVUU7
Cit9CisKK3N0YXRpYyB2b2lkIHRlc3Rfd2Via2l0X3dlYl92aWV3X2ZpbGVfY2hvb3NlcigpCit7
CisgICAgY29uc3QgZ2NoYXIqIGh0bWxGb3JtYXRCYXNlID0gIjxodG1sPjxib2R5PiIKKyAgICAg
ICAgICAgICI8aW5wdXQgc3R5bGU9J3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MDt0b3A6MDttYXJn
aW46MDtwYWRkaW5nOjAnIHR5cGU9J2ZpbGUnICVzLz4iCisgICAgICAgICAgICAiPC9ib2R5Pjwv
aHRtbD4iOworCisgICAgR3RrV2lkZ2V0KiB3aW5kb3cgPSBndGtfd2luZG93X25ldyhHVEtfV0lO
RE9XX1RPUExFVkVMKTsKKyAgICBHdGtXaWRnZXQqIHdlYlZpZXcgPSB3ZWJraXRfd2ViX3ZpZXdf
bmV3KCk7CisgICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUih3aW5kb3cpLCB3ZWJW
aWV3KTsKKyAgICBndGtfd2lkZ2V0X3Nob3dfYWxsKHdpbmRvdyk7CisKKyAgICBsb29wID0gZ19t
YWluX2xvb3BfbmV3KE5VTEwsIFRSVUUpOworCisgICAgLy8gTXVsdGlwbGUgc2VsZWN0aW9ucyBu
b3QgYWxsb3dlZCwgbm8gTUlNRSBmaWx0ZXJpbmcuCisgICAgZ3Vsb25nIGhhbmRsZXIgPSBnX3Np
Z25hbF9jb25uZWN0KHdlYlZpZXcsICJydW4tZmlsZS1jaG9vc2VyIiwgR19DQUxMQkFDSyhydW5G
aWxlQ2hvb3NlckNiTm9NdWx0aXNlbE5vTWltZSksIE5VTEwpOworICAgIGdjaGFyKiBodG1sRm9y
bWF0ID0gZ19zdHJkdXBfcHJpbnRmKGh0bWxGb3JtYXRCYXNlLCAiIik7CisgICAgd2Via2l0X3dl
Yl92aWV3X2xvYWRfc3RyaW5nKFdFQktJVF9XRUJfVklFVyh3ZWJWaWV3KSwgaHRtbEZvcm1hdCwg
TlVMTCwgTlVMTCwgTlVMTCk7CisgICAgZ19mcmVlKGh0bWxGb3JtYXQpOworCisgICAgZ190aW1l
b3V0X2FkZCgxMDAsIChHU291cmNlRnVuYykgY2xpY2tNb3VzZUJ1dHRvbkFuZFdhaXRGb3JGaWxl
Q2hvb3NlclJlcXVlc3QsIFdFQktJVF9XRUJfVklFVyh3ZWJWaWV3KSk7CisgICAgZ19tYWluX2xv
b3BfcnVuKGxvb3ApOworCisgICAgZ19zaWduYWxfaGFuZGxlcl9kaXNjb25uZWN0KHdlYlZpZXcs
IGhhbmRsZXIpOworCisgICAgLy8gTXVsdGlwbGUgc2VsZWN0aW9ucyBhbGxvd2VkLCBubyBNSU1F
IGZpbHRlcmluZywgc29tZSBwcmUtc2VsZWN0ZWQgZmlsZXMuCisgICAgaGFuZGxlciA9IGdfc2ln
bmFsX2Nvbm5lY3Qod2ViVmlldywgInJ1bi1maWxlLWNob29zZXIiLCBHX0NBTExCQUNLKHJ1bkZp
bGVDaG9vc2VyQ2JNdWx0aXNlbE5vTWltZSksIE5VTEwpOworICAgIGh0bWxGb3JtYXQgPSBnX3N0
cmR1cF9wcmludGYoaHRtbEZvcm1hdEJhc2UsICJtdWx0aXBsZSIpOworICAgIHdlYmtpdF93ZWJf
dmlld19sb2FkX3N0cmluZyhXRUJLSVRfV0VCX1ZJRVcod2ViVmlldyksIGh0bWxGb3JtYXQsIE5V
TEwsIE5VTEwsIE5VTEwpOworICAgIGdfZnJlZShodG1sRm9ybWF0KTsKKworICAgIGdfdGltZW91
dF9hZGQoMTAwLCAoR1NvdXJjZUZ1bmMpIGNsaWNrTW91c2VCdXR0b25BbmRXYWl0Rm9yRmlsZUNo
b29zZXJSZXF1ZXN0LCBXRUJLSVRfV0VCX1ZJRVcod2ViVmlldykpOworICAgIGdfbWFpbl9sb29w
X3J1bihsb29wKTsKKworICAgIGdfc2lnbmFsX2hhbmRsZXJfZGlzY29ubmVjdCh3ZWJWaWV3LCBo
YW5kbGVyKTsKKworICAgIC8vIFBlcmZvcm0gYW5vdGhlciByZXF1ZXN0IHRvIGNoZWNrIGlmIHRo
ZSBsaXN0IG9mIGZpbGVzIHNlbGVjdGVkCisgICAgLy8gaW4gdGhlIHByZXZpb3VzIHN0ZXAgYXBw
ZWFycyBub3cgYXMgcGFydCBvZiB0aGUgbmV3IHJlcXVlc3QuCisgICAgaGFuZGxlciA9IGdfc2ln
bmFsX2Nvbm5lY3Qod2ViVmlldywgInJ1bi1maWxlLWNob29zZXIiLCBHX0NBTExCQUNLKHJ1bkZp
bGVDaG9vc2VyQ2JTZWxlY3Rpb25SZXRhaW5lZCksIE5VTEwpOworICAgIGdfdGltZW91dF9hZGQo
MTAwLCAoR1NvdXJjZUZ1bmMpIGNsaWNrTW91c2VCdXR0b25BbmRXYWl0Rm9yRmlsZUNob29zZXJS
ZXF1ZXN0LCBXRUJLSVRfV0VCX1ZJRVcod2ViVmlldykpOworICAgIGdfbWFpbl9sb29wX3J1bihs
b29wKTsKKworICAgIGdfc2lnbmFsX2hhbmRsZXJfZGlzY29ubmVjdCh3ZWJWaWV3LCBoYW5kbGVy
KTsKKworICAgIC8vIE11bHRpcGxlIHNlbGVjdGlvbnMgbm90IGFsbG93ZWQsIG9ubHkgYWNjZXB0
IGltYWdlcywgYXVkaW8gYW5kIHZpZGVvIGZpbGVzLgorICAgIGhhbmRsZXIgPSBnX3NpZ25hbF9j
b25uZWN0KHdlYlZpZXcsICJydW4tZmlsZS1jaG9vc2VyIiwgR19DQUxMQkFDSyhydW5GaWxlQ2hv
b3NlckNiTm9NdWx0aXNlbEFjY2VwdFR5cGVzKSwgTlVMTCk7CisgICAgaHRtbEZvcm1hdCA9IGdf
c3RyZHVwX3ByaW50ZihodG1sRm9ybWF0QmFzZSwgImFjY2VwdD0nYXVkaW8vKix2aWRlby8qLGlt
YWdlLyonIik7CisgICAgd2Via2l0X3dlYl92aWV3X2xvYWRfc3RyaW5nKFdFQktJVF9XRUJfVklF
Vyh3ZWJWaWV3KSwgaHRtbEZvcm1hdCwgTlVMTCwgTlVMTCwgTlVMTCk7CisgICAgZ19mcmVlKGh0
bWxGb3JtYXQpOworCisgICAgZ190aW1lb3V0X2FkZCgxMDAsIChHU291cmNlRnVuYykgY2xpY2tN
b3VzZUJ1dHRvbkFuZFdhaXRGb3JGaWxlQ2hvb3NlclJlcXVlc3QsIFdFQktJVF9XRUJfVklFVyh3
ZWJWaWV3KSk7CisgICAgZ19tYWluX2xvb3BfcnVuKGxvb3ApOworCisgICAgZ19zaWduYWxfaGFu
ZGxlcl9kaXNjb25uZWN0KHdlYlZpZXcsIGhhbmRsZXIpOworICAgIGd0a193aWRnZXRfZGVzdHJv
eSh3aW5kb3cpOworfQorCiBpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCiB7CiAgICAg
U291cFNlcnZlciogc2VydmVyOwpAQCAtNTM3LDYgKzcxNyw3IEBAIGludCBtYWluKGludCBhcmdj
LCBjaGFyKiogYXJndikKICAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvd2Vidmlldy93ZWJ2
aWV3LWRvZXMtbm90LXN0ZWFsLWZvY3VzIiwgdGVzdF93ZWJraXRfd2ViX3ZpZXdfZG9lc19ub3Rf
c3RlYWxfZm9jdXMpOwogICAgIGdfdGVzdF9hZGRfZGF0YV9mdW5jKCIvd2Via2l0L3dlYnZpZXcv
ZnVsbHNjcmVlbiIsIEdJTlRfVE9fUE9JTlRFUihGQUxTRSksIHRlc3Rfd2Via2l0X3dlYl92aWV3
X2Z1bGxzY3JlZW4pOwogICAgIGdfdGVzdF9hZGRfZGF0YV9mdW5jKCIvd2Via2l0L3dlYnZpZXcv
ZnVsbHNjcmVlbi1ibG9ja2VkIiwgR0lOVF9UT19QT0lOVEVSKFRSVUUpLCB0ZXN0X3dlYmtpdF93
ZWJfdmlld19mdWxsc2NyZWVuKTsKKyAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvd2Vidmll
dy9maWxlLWNob29zZXIiLCB0ZXN0X3dlYmtpdF93ZWJfdmlld19maWxlX2Nob29zZXIpOwogCiAg
ICAgcmV0dXJuIGdfdGVzdF9ydW4gKCk7CiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L2d0ay93ZWJr
aXQvd2Via2l0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtp
dC5oCShyZXZpc2lvbiAxMTk5NDYpCisrKyBTb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlIDx3ZWJraXQvd2Vi
a2l0ZG93bmxvYWQuaD4KICNpbmNsdWRlIDx3ZWJraXQvd2Via2l0ZW51bXR5cGVzLmg+CiAjaW5j
bHVkZSA8d2Via2l0L3dlYmtpdGZhdmljb25kYXRhYmFzZS5oPgorI2luY2x1ZGUgPHdlYmtpdC93
ZWJraXRmaWxlY2hvb3NlcnJlcXVlc3QuaD4KICNpbmNsdWRlIDx3ZWJraXQvd2Via2l0Z2VvbG9j
YXRpb25wb2xpY3lkZWNpc2lvbi5oPgogI2luY2x1ZGUgPHdlYmtpdC93ZWJraXRnbG9iYWxzLmg+
CiAjaW5jbHVkZSA8d2Via2l0L3dlYmtpdGhpdHRlc3RyZXN1bHQuaD4KSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRmaWxlY2hvb3NlcnJlcXVlc3QuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRmaWxlY2hvb3NlcnJlcXVlc3QuY3Bw
CShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGZpbGVjaG9v
c2VycmVxdWVzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzNDkgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIndlYmtpdGZpbGVjaG9vc2VycmVxdWVzdC5oIgorCisjaW5jbHVkZSAiRmlsZUNob29zZXIu
aCIKKyNpbmNsdWRlICJGaWxlU3lzdGVtLmgiCisjaW5jbHVkZSAid2Via2l0ZmlsZWNob29zZXJy
ZXF1ZXN0cHJpdmF0ZS5oIgorI2luY2x1ZGUgIndlYmtpdGdsb2JhbHNwcml2YXRlLmgiCisjaW5j
bHVkZSA8Z2xpYi9naTE4bi1saWIuaD4KKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HT3duUHRyLmg+
CisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NT
dHJpbmcuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKKy8qKgorICogU0VDVElPTjp3
ZWJraXRmaWxlY2hvb3NlcnJlcXVlc3QKKyAqIEBTaG9ydF9kZXNjcmlwdGlvbjogQSByZXF1ZXN0
IHRvIG9wZW4gYSBmaWxlIGNob29zZXIKKyAqIEBUaXRsZTogV2ViS2l0RmlsZUNob29zZXJSZXF1
ZXN0CisgKiBAU2VlX2Fsc286ICNXZWJLaXRXZWJWaWV3CisgKgorICogV2hlbmV2ZXIgdGhlIHVz
ZXIgaW50ZXJhY3RzIHdpdGggYW4gJmx0O2lucHV0IHR5cGU9J2ZpbGUnIC8mZ3Q7CisgKiBIVE1M
IGVsZW1lbnQsIFdlYktpdCB3aWxsIG5lZWQgdG8gc2hvdyBhIGRpYWxvZyB0byBjaG9vc2Ugb25l
IG9yCisgKiBtb3JlIGZpbGVzIHRvIGJlIHVwbG9hZGVkIHRvIHRoZSBzZXJ2ZXIgYWxvbmcgd2l0
aCB0aGUgcmVzdCBvZiB0aGUKKyAqIGZvcm0gZGF0YS4gRm9yIHRoYXQgdG8gaGFwcGVuIGluIGEg
Z2VuZXJhbCB3YXksIGluc3RlYWQgb2YganVzdAorICogb3BlbmluZyBhICNHdGtGaWxlQ2hvb3Nl
ckRpYWxvZyAod2hpY2ggbWlnaHQgYmUgbm90IGRlc2lyYWJsZSBpbgorICogc29tZSBjYXNlcywg
c3VjaCBhcyB3aGVuIGFuIGVtYmVkZGluZyBhcHBsaWNhdGlvbnMgcHJlZmVycyB0byB1c2UKKyAq
IGl0cyBvd24gZmlsZSBjaG9vc2VyIGRpYWxvZyksIFdlYktpdCB3aWxsIGZpcmUgdGhlCisgKiAj
V2ViS2l0V2ViVmlldzo6cnVuLWZpbGUtY2hvb3NlciBzaWduYWwgd2l0aCBhCisgKiAjV2ViS2l0
RmlsZUNob29zZXJSZXF1ZXN0IG9iamVjdCwgd2hpY2ggd2lsbCBhbGxvdyB0aGUgY2xpZW50Cisg
KiBhcHBsaWNhdGlvbiB0byBzcGVjaWZ5IHRoZSBmaWxlcyB0byBiZSBzZWxlY3RlZCwgdG8gaW5z
cGVjdCB0aGUKKyAqIGRldGFpbHMgb2YgdGhlIHJlcXVlc3QgKGUuZy4gaWYgbXVsdGlwbGUgc2Vs
ZWN0aW9uIHNob3VsZCBiZQorICogYWxsb3dlZCkgYW5kIHRvIGNhbmNlbCB0aGUgcmVxdWVzdCwg
aW4gY2FzZSBub3RoaW5nIHdhcyBzZWxlY3RlZC4KKyAqCisgKiBJbiBjYXNlIHRoZSBjbGllbnQg
YXBwbGljYXRpb24gZG9lcyBub3Qgd2lzaCB0byBoYW5kbGUgdGhpcyBzaWduYWwsCisgKiBXZWJL
aXQgd2lsbCBwcm92aWRlIGEgZGVmYXVsdCBoYW5kbGVyIHdoaWNoIHdpbGwgYXN5bmNocm9ub3Vz
bHkgcnVuCisgKiBhIHJlZ3VsYXIgI0d0a0ZpbGVDaG9vc2VyRGlhbG9nIGZvciB0aGUgdXNlciB0
byBpbnRlcmFjdCB3aXRoLgorICovCitHX0RFRklORV9UWVBFKFdlYktpdEZpbGVDaG9vc2VyUmVx
dWVzdCwgd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0LCBHX1RZUEVfT0JKRUNUKQorCitzdHJ1
Y3QgX1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdFByaXZhdGUgeworICAgIFJlZlB0cjxGaWxlQ2hv
b3Nlcj4gY2hvb3NlcjsKKyAgICBHUmVmUHRyPEd0a0ZpbGVGaWx0ZXI+IGZpbHRlcjsKKyAgICBH
UmVmUHRyPEdQdHJBcnJheT4gbWltZVR5cGVzOworICAgIEdSZWZQdHI8R1B0ckFycmF5PiBzZWxl
Y3RlZEZpbGVzOworfTsKKworZW51bSB7CisgICAgUFJPUF8wLAorICAgIFBST1BfRklMVEVSLAor
ICAgIFBST1BfTUlNRV9UWVBFUywKKyAgICBQUk9QX1NFTEVDVF9NVUxUSVBMRSwKKyAgICBQUk9Q
X1NFTEVDVEVEX0ZJTEVTLAorfTsKKworc3RhdGljIHZvaWQgd2Via2l0X2ZpbGVfY2hvb3Nlcl9y
ZXF1ZXN0X2luaXQoV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0KiByZXF1ZXN0KQoreworICAgIHJl
cXVlc3QtPnByaXYgPSBHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUocmVxdWVzdCwgV0VCS0lU
X1RZUEVfRklMRV9DSE9PU0VSX1JFUVVFU1QsIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdFByaXZh
dGUpOworICAgIG5ldyAocmVxdWVzdC0+cHJpdikgV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0UHJp
dmF0ZSgpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZmlu
YWxpemUoR09iamVjdCogb2JqZWN0KQoreworICAgIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCog
cmVxdWVzdCA9IFdFQktJVF9GSUxFX0NIT09TRVJfUkVRVUVTVChvYmplY3QpOworCisgICAgcmVx
dWVzdC0+cHJpdi0+fldlYktpdEZpbGVDaG9vc2VyUmVxdWVzdFByaXZhdGUoKTsKKyAgICBHX09C
SkVDVF9DTEFTUyh3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfcGFyZW50X2NsYXNzKS0+Zmlu
YWxpemUob2JqZWN0KTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1
ZXN0X2dldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BJZCwgR1ZhbHVlKiB2
YWx1ZSwgR1BhcmFtU3BlYyogcGFyYW1TcGVjKQoreworICAgIFdlYktpdEZpbGVDaG9vc2VyUmVx
dWVzdCogcmVxdWVzdCA9IFdFQktJVF9GSUxFX0NIT09TRVJfUkVRVUVTVChvYmplY3QpOworICAg
IHN3aXRjaCAocHJvcElkKSB7CisgICAgY2FzZSBQUk9QX0ZJTFRFUjoKKyAgICAgICAgZ192YWx1
ZV9zZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X21pbWVf
dHlwZXNfZmlsdGVyKHJlcXVlc3QpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX01J
TUVfVFlQRVM6CisgICAgICAgIGdfdmFsdWVfc2V0X2JveGVkKHZhbHVlLCB3ZWJraXRfZmlsZV9j
aG9vc2VyX3JlcXVlc3RfZ2V0X21pbWVfdHlwZXMocmVxdWVzdCkpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIFBST1BfU0VMRUNUX01VTFRJUExFOgorICAgICAgICBnX3ZhbHVlX3NldF9ib29s
ZWFuKHZhbHVlLCB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X3NlbGVjdF9tdWx0aXBs
ZShyZXF1ZXN0KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9TRUxFQ1RFRF9GSUxF
UzoKKyAgICAgICAgZ192YWx1ZV9zZXRfYm94ZWQodmFsdWUsIHdlYmtpdF9maWxlX2Nob29zZXJf
cmVxdWVzdF9nZXRfc2VsZWN0ZWRfZmlsZXMocmVxdWVzdCkpOworICAgICAgICBicmVhazsKKyAg
ICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2Jq
ZWN0LCBwcm9wSWQsIHBhcmFtU3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3Rh
dGljIHZvaWQgd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2NsYXNzX2luaXQoV2ViS2l0Rmls
ZUNob29zZXJSZXF1ZXN0Q2xhc3MqIHJlcXVlc3RDbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3Mq
IG9iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1MocmVxdWVzdENsYXNzKTsKKyAgICBvYmplY3RD
bGFzcy0+ZmluYWxpemUgPSB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZmluYWxpemU7Cisg
ICAgb2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVz
dF9nZXRfcHJvcGVydHk7CisgICAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlKHJlcXVlc3RDbGFz
cywgc2l6ZW9mKFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdFByaXZhdGUpKTsKKworICAgIC8qKgor
ICAgICAqIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdDpmaWx0ZXI6CisgICAgICoKKyAgICAgKiBU
aGUgZmlsdGVyIGN1cnJlbnRseSBhc3NvY2lhdGVkIHdpdGggdGhlIHJlcXVlc3QuIFNlZQorICAg
ICAqIHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfbWltZV90eXBlc19maWx0ZXIoKSBm
b3IgbW9yZQorICAgICAqIGRldGFpbHMuCisgICAgICovCisgICAgZ19vYmplY3RfY2xhc3NfaW5z
dGFsbF9wcm9wZXJ0eShvYmplY3RDbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFBST1BfRklMVEVSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Z19wYXJhbV9zcGVjX29iamVjdCgiZmlsdGVyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIk1JTUUgdHlwZXMgZmlsdGVyIiksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJUaGUg
ZmlsdGVyIGN1cnJlbnRseSBhc3NvY2lhdGVkIHdpdGggdGhlIHJlcXVlc3QiKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdUS19UWVBFX0ZJ
TEVfRklMVEVSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisgICAgLyoqCisgICAgICogV2ViS2l0
RmlsZUNob29zZXJSZXF1ZXN0Om1pbWUtdHlwZXM6CisgICAgICoKKyAgICAgKiBBICVOVUxMLXRl
cm1pbmF0ZWQgYXJyYXkgb2Ygc3RyaW5ncyBjb250YWluaW5nIHRoZSBsaXN0IG9mIE1JTUUKKyAg
ICAgKiB0eXBlcyB0aGUgZmlsZSBjaG9vc2VyIGRpYWxvZyBzaG91bGQgaGFuZGxlLiBTZWUKKyAg
ICAgKiB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X21pbWVfdHlwZXMoKSBmb3IgbW9y
ZSBkZXRhaWxzLgorICAgICAqLworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHko
b2JqZWN0Q2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9QX01J
TUVfVFlQRVMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3BhcmFtX3Nw
ZWNfYm94ZWQoIm1pbWUtdHlwZXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXygiTUlNRSB0eXBlcyIpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiVGhlIGxpc3Qgb2YgTUlNRSB0
eXBlcyBhc3NvY2lhdGVkIHdpdGggdGhlIHJlcXVlc3QiKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdfVFlQRV9TVFJWLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX1BBUkFN
X1JFQURBQkxFKSk7ICAgIC8qKgorICAgICAqIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdDpzZWxl
Y3QtbXVsdGlwbGU6CisgICAgICoKKyAgICAgKiBXaGV0aGVyIHRoZSBmaWxlIGNob29zZXIgc2hv
dWxkIGFsbG93IHNlbGVjdGluZyBtdWx0aXBsZQorICAgICAqIGZpbGVzLiBTZWUKKyAgICAgKiB3
ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X3NlbGVjdF9tdWx0aXBsZSgpIGZvcgorICAg
ICAqIG1vcmUgZGV0YWlscy4KKyAgICAgKi8KKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3By
b3BlcnR5KG9iamVjdENsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
UFJPUF9TRUxFQ1RfTVVMVElQTEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBnX3BhcmFtX3NwZWNfYm9vbGVhbigic2VsZWN0LW11bHRpcGxlIiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJTZWxlY3QgbXVsdGlw
bGUgZmlsZXMiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfKCJXaGV0aGVyIHRoZSBmaWxlIGNob29zZXIgc2hvdWxkIGFsbG93IHNlbGVj
dGluZyBtdWx0aXBsZSBmaWxlcyIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEZBTFNFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworICAg
IC8qKgorICAgICAqIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdDpzZWxlY3RlZC1maWxlczoKKyAg
ICAgKgorICAgICAqIEEgJU5VTEwtdGVybWluYXRlZCBhcnJheSBvZiBzdHJpbmdzIGNvbnRhaW5p
bmcgdGhlIGxpc3Qgb2YKKyAgICAgKiBzZWxlY3RlZCBmaWxlcyBhc3NvY2lhdGVkIHRvIHRoZSBj
dXJyZW50IHJlcXVlc3QuIFNlZQorICAgICAqIHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9n
ZXRfc2VsZWN0ZWRfZmlsZXMoKSBmb3IgbW9yZSBkZXRhaWxzLgorICAgICAqLworICAgIGdfb2Jq
ZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkob2JqZWN0Q2xhc3MsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBQUk9QX1NFTEVDVEVEX0ZJTEVTLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVjX2JveGVkKCJzZWxlY3RlZC1maWxlcyIs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
KCJTZWxlY3RlZCBmaWxlcyIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXygiVGhlIGxpc3Qgb2Ygc2VsZWN0ZWQgZmlsZXMgYXNzb2NpYXRl
ZCB3aXRoIHRoZSByZXF1ZXN0IiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBHX1RZUEVfU1RSViwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOwor
fQorCitXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QqIHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVz
dF9jcmVhdGUoUGFzc1JlZlB0cjxGaWxlQ2hvb3Nlcj4gY2hvb3NlcikKK3sKKyAgICBXZWJLaXRG
aWxlQ2hvb3NlclJlcXVlc3QqIHJlcXVlc3QgPSBXRUJLSVRfRklMRV9DSE9PU0VSX1JFUVVFU1Qo
Z19vYmplY3RfbmV3KFdFQktJVF9UWVBFX0ZJTEVfQ0hPT1NFUl9SRVFVRVNULCBOVUxMKSk7Cisg
ICAgcmVxdWVzdC0+cHJpdi0+Y2hvb3NlciA9IGNob29zZXI7CisgICAgcmV0dXJuIHJlcXVlc3Q7
Cit9CisKKy8qKgorICogd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9taW1lX3R5cGVz
OgorICogQHJlcXVlc3Q6IGEgI1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdAorICoKKyAqIEdldCB0
aGUgbGlzdCBvZiBNSU1FIHR5cGVzIHRoZSBmaWxlIGNob29zZXIgZGlhbG9nIHNob3VsZCBoYW5k
bGUsCisgKiBpbiB0aGUgZm9ybWF0IHNwZWNpZmllZCBpbiBSRkMgMjA0NiBmb3IgIm1lZGlhIHR5
cGVzIi4gSXRzIGNvbnRlbnRzCisgKiBkZXBlbmQgb24gdGhlIHZhbHVlIG9mIHRoZSAnYWNjZXB0
JyBhdHRyaWJ1dGUgZm9yIEhUTUwgaW5wdXQKKyAqIGVsZW1lbnRzLiBUaGlzIGZ1bmN0aW9uIHNo
b3VsZCBub3JtYWxseSBiZSBjYWxsZWQgYmVmb3JlIHByZXNlbnRpbmcKKyAqIHRoZSBmaWxlIGNo
b29zZXIgZGlhbG9nIHRvIHRoZSB1c2VyLCB0byBkZWNpZGUgd2hldGhlciB0byBhbGxvdyB0aGUK
KyAqIHVzZXIgdG8gc2VsZWN0IG11bHRpcGxlIGZpbGVzIGF0IG9uY2Ugb3Igb25seSBvbmUuCisg
KgorICogUmV0dXJuczogKGFycmF5IHplcm8tdGVybWluYXRlZD0xKSAodHJhbnNmZXIgbm9uZSk6
IGEKKyAqICVOVUxMLXRlcm1pbmF0ZWQgYXJyYXkgb2Ygc3RyaW5ncyBpZiBhIGxpc3Qgb2YgYWNj
ZXB0ZWQgTUlNRSB0eXBlcworICogaXMgZGVmaW5lZCBvciAlTlVMTCBvdGhlcndpc2UsIG1lYW5p
bmcgdGhhdCBhbnkgTUlNRSB0eXBlIHNob3VsZCBiZQorICogYWNjZXB0ZWQuIFRoaXMgYXJyYXkg
YW5kIGl0cyBjb250ZW50cyBhcmUgb3duZWQgYnkgV2ViS2l0R1RLKyBhbmQKKyAqIHNob3VsZCBu
b3QgYmUgbW9kaWZpZWQgb3IgZnJlZWQuCisgKi8KK2NvbnN0IGdjaGFyKiBjb25zdCogd2Via2l0
X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9taW1lX3R5cGVzKFdlYktpdEZpbGVDaG9vc2VyUmVx
dWVzdCogcmVxdWVzdCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfRklM
RV9DSE9PU0VSX1JFUVVFU1QocmVxdWVzdCksIDApOworICAgIGlmIChyZXF1ZXN0LT5wcml2LT5t
aW1lVHlwZXMpCisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGdjaGFyKio+KHJlcXVl
c3QtPnByaXYtPm1pbWVUeXBlcy0+cGRhdGEpOworCisgICAgRmlsZUNob29zZXJTZXR0aW5ncyBz
ZXR0aW5ncyA9IHJlcXVlc3QtPnByaXYtPmNob29zZXItPnNldHRpbmdzKCk7CisgICAgc2l6ZV90
IG51bU9mTWltZVR5cGVzID0gc2V0dGluZ3MuYWNjZXB0TUlNRVR5cGVzLnNpemUoKTsKKyAgICBp
ZiAoIW51bU9mTWltZVR5cGVzKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJlcXVlc3QtPnBy
aXYtPm1pbWVUeXBlcyA9IGFkb3B0R1JlZihnX3B0cl9hcnJheV9uZXdfd2l0aF9mcmVlX2Z1bmMo
Z19mcmVlKSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1PZk1pbWVUeXBlczsgKytp
KSB7CisgICAgICAgIFN0cmluZyBtaW1lVHlwZVN0cmluZyA9IHNldHRpbmdzLmFjY2VwdE1JTUVU
eXBlc1tpXTsKKyAgICAgICAgaWYgKG1pbWVUeXBlU3RyaW5nLmlzRW1wdHkoKSkKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICBnX3B0cl9hcnJheV9hZGQocmVxdWVzdC0+cHJpdi0+bWlt
ZVR5cGVzLmdldCgpLCBnX3N0cmR1cChtaW1lVHlwZVN0cmluZy51dGY4KCkuZGF0YSgpKSk7Cisg
ICAgfQorICAgIGdfcHRyX2FycmF5X2FkZChyZXF1ZXN0LT5wcml2LT5taW1lVHlwZXMuZ2V0KCks
IDApOworCisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Z2NoYXIqKj4ocmVxdWVzdC0+cHJp
di0+bWltZVR5cGVzLT5wZGF0YSk7Cit9CisKKy8qKgorICogd2Via2l0X2ZpbGVfY2hvb3Nlcl9y
ZXF1ZXN0X2dldF9taW1lX3R5cGVzX2ZpbHRlcjoKKyAqIEByZXF1ZXN0OiBhICNXZWJLaXRGaWxl
Q2hvb3NlclJlcXVlc3QKKyAqCisgKiBHZXQgdGhlIGZpbHRlciBjdXJyZW50bHkgYXNzb2NpYXRl
ZCB3aXRoIHRoZSByZXF1ZXN0LCByZWFkeSB0byBiZQorICogdXNlZCBieSAjR3RrRmlsZUNob29z
ZXIuIFRoaXMgZnVuY3Rpb24gc2hvdWxkIG5vcm1hbGx5IGJlIGNhbGxlZAorICogYmVmb3JlIHBy
ZXNlbnRpbmcgdGhlIGZpbGUgY2hvb3NlciBkaWFsb2cgdG8gdGhlIHVzZXIsIHRvIGRlY2lkZQor
ICogd2hldGhlciB0byBhcHBseSBhIGZpbHRlciBzbyB0aGUgdXNlciB3b3VsZCBub3QgYmUgYWxs
b3dlZCB0bworICogc2VsZWN0IGZpbGVzIHdpdGggb3RoZXIgTUlNRSB0eXBlcy4KKyAqCisgKiBT
ZWUgd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9taW1lX3R5cGVzKCkgaWYgeW91IGFy
ZQorICogaW50ZXJlc3RlZCBpbiBnZXR0aW5nIHRoZSBsaXN0IG9mIGFjY2VwdGVkIE1JTUUgdHlw
ZXMuCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiBhICNHdGtGaWxlRmlsdGVyIGlm
IGEgbGlzdCBvZiBhY2NlcHRlZAorICogTUlNRSB0eXBlcyBpcyBkZWZpbmVkIG9yICVOVUxMIG90
aGVyd2lzZS4gVGhlIHJldHVybmVkIG9iamVjdCBpcworICogb3duZWQgYnkgV2ViS2l0R1RLKyBz
aG91bGQgbm90IGJlIG1vZGlmaWVkIG9yIGZyZWVkLgorICovCitHdGtGaWxlRmlsdGVyKiB3ZWJr
aXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X21pbWVfdHlwZXNfZmlsdGVyKFdlYktpdEZpbGVD
aG9vc2VyUmVxdWVzdCogcmVxdWVzdCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJL
SVRfSVNfRklMRV9DSE9PU0VSX1JFUVVFU1QocmVxdWVzdCksIDApOworICAgIGlmIChyZXF1ZXN0
LT5wcml2LT5maWx0ZXIpCisgICAgICAgIHJldHVybiByZXF1ZXN0LT5wcml2LT5maWx0ZXIuZ2V0
KCk7CisKKyAgICBGaWxlQ2hvb3NlclNldHRpbmdzIHNldHRpbmdzID0gcmVxdWVzdC0+cHJpdi0+
Y2hvb3Nlci0+c2V0dGluZ3MoKTsKKyAgICBzaXplX3QgbnVtT2ZNaW1lVHlwZXMgPSBzZXR0aW5n
cy5hY2NlcHRNSU1FVHlwZXMuc2l6ZSgpOworICAgIGlmICghbnVtT2ZNaW1lVHlwZXMpCisgICAg
ICAgIHJldHVybiAwOworCisgICAgLy8gRG8gbm90IHVzZSBhZG9wdEdSZWYgaGVyZSwgc2luY2Ug
d2Ugd2FudCB0byBzaW5rIHRoZSBmbG9hdGluZworICAgIC8vIHJlZmVyZW5jZSBmb3IgdGhlIG5l
dyBpbnN0YW5jZSBvZiBHdGtGaWxlRmlsdGVyLCBzbyB3ZSBtYWtlCisgICAgLy8gc3VyZSB3ZSBr
ZWVwIHRoZSBvd25lcnNoaXAgZHVyaW5nIHRoZSBsaWZldGltZSBvZiB0aGUgcmVxdWVzdC4KKyAg
ICByZXF1ZXN0LT5wcml2LT5maWx0ZXIgPSBndGtfZmlsZV9maWx0ZXJfbmV3KCk7CisgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBudW1PZk1pbWVUeXBlczsgKytpKSB7CisgICAgICAgIFN0cmlu
ZyBtaW1lVHlwZVN0cmluZyA9IHNldHRpbmdzLmFjY2VwdE1JTUVUeXBlc1tpXTsKKyAgICAgICAg
aWYgKG1pbWVUeXBlU3RyaW5nLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICBndGtfZmlsZV9maWx0ZXJfYWRkX21pbWVfdHlwZShyZXF1ZXN0LT5wcml2LT5maWx0ZXIu
Z2V0KCksIG1pbWVUeXBlU3RyaW5nLnV0ZjgoKS5kYXRhKCkpOworICAgIH0KKworICAgIHJldHVy
biByZXF1ZXN0LT5wcml2LT5maWx0ZXIuZ2V0KCk7Cit9CisKKy8qKgorICogd2Via2l0X2ZpbGVf
Y2hvb3Nlcl9yZXF1ZXN0X2dldF9zZWxlY3RfbXVsdGlwbGU6CisgKiBAcmVxdWVzdDogYSAjV2Vi
S2l0RmlsZUNob29zZXJSZXF1ZXN0CisgKgorICogRGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGZpbGUg
Y2hvb3NlciBhc3NvY2lhdGVkIHRvIHRoaXMKKyAqICNXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3Qg
c2hvdWxkIGFsbG93IHNlbGVjdGluZyBtdWx0aXBsZSBmaWxlcywKKyAqIHdoaWNoIGRlcGVuZHMg
b24gdGhlIEhUTUwgaW5wdXQgZWxlbWVudCBoYXZpbmcgYSAnbXVsdGlwbGUnCisgKiBhdHRyaWJ1
dGUgZGVmaW5lZC4KKyAqCisgKiBSZXR1cm5zOiAlVFJVRSBpZiB0aGUgZmlsZSBjaG9vc2VyIHNo
b3VsZCBhbGxvdyBzZWxlY3RpbmcgbXVsdGlwbGUgZmlsZXMgb3IgJUZBTFNFIG90aGVyd2lzZS4K
KyAqLworZ2Jvb2xlYW4gd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9zZWxlY3RfbXVs
dGlwbGUoV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0KiByZXF1ZXN0KQoreworICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKFdFQktJVF9JU19GSUxFX0NIT09TRVJfUkVRVUVTVChyZXF1ZXN0KSwgRkFM
U0UpOworICAgIHJldHVybiByZXF1ZXN0LT5wcml2LT5jaG9vc2VyLT5zZXR0aW5ncygpLmFsbG93
c011bHRpcGxlRmlsZXM7Cit9CisKKy8qKgorICogd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0
X3NlbGVjdF9maWxlczoKKyAqIEByZXF1ZXN0OiBhICNXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QK
KyAqIEBmaWxlczogKGFycmF5IHplcm8tdGVybWluYXRlZD0xKSAodHJhbnNmZXIgbm9uZSk6IGEK
KyAqICVOVUxMLXRlcm1pbmF0ZWQgYXJyYXkgb2Ygc3RyaW5ncywgY29udGFpbmluZyBwYXRocyB0
byBsb2NhbCBmaWxlcy4KKyAqCisgKiBBc2sgV2ViS2l0IHRvIHNlbGVjdCBsb2NhbCBmaWxlcyBm
b3IgdXBsb2FkIGFuZCBjb21wbGV0ZSB0aGUKKyAqIHJlcXVlc3QuCisgKi8KK3ZvaWQgd2Via2l0
X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X3NlbGVjdF9maWxlcyhXZWJLaXRGaWxlQ2hvb3NlclJlcXVl
c3QqIHJlcXVlc3QsIGNvbnN0IGdjaGFyKiBjb25zdCogZmlsZXMpCit7CisgICAgZ19yZXR1cm5f
aWZfZmFpbChXRUJLSVRfSVNfRklMRV9DSE9PU0VSX1JFUVVFU1QocmVxdWVzdCkpOworICAgIGdf
cmV0dXJuX2lmX2ZhaWwoZmlsZXMpOworCisgICAgVmVjdG9yPFN0cmluZz4gbmFtZXM7CisgICAg
R1JlZlB0cjxHUHRyQXJyYXk+IHNlbGVjdGVkRmlsZXMgPSBhZG9wdEdSZWYoZ19wdHJfYXJyYXlf
bmV3X3dpdGhfZnJlZV9mdW5jKGdfZnJlZSkpOworCisgICAgZm9yIChpbnQgaSA9IDA7IGZpbGVz
W2ldOyBpKyspIHsKKyAgICAgICAgbmFtZXMuYXBwZW5kKGZpbGVuYW1lVG9TdHJpbmcoZmlsZXNb
aV0pKTsKKyAgICAgICAgZ19wdHJfYXJyYXlfYWRkKHNlbGVjdGVkRmlsZXMuZ2V0KCksIGdfc3Ry
ZHVwKGZpbGVzW2ldKSk7CisgICAgfQorCisgICAgZ19wdHJfYXJyYXlfYWRkKHNlbGVjdGVkRmls
ZXMuZ2V0KCksIDApOworICAgIHJlcXVlc3QtPnByaXYtPmNob29zZXItPmNob29zZUZpbGVzKG5h
bWVzKTsKKyAgICByZXF1ZXN0LT5wcml2LT5zZWxlY3RlZEZpbGVzID0gc2VsZWN0ZWRGaWxlczsK
K30KKworLyoqCisgKiB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X3NlbGVjdGVkX2Zp
bGVzOgorICogQHJlcXVlc3Q6IGEgI1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdAorICoKKyAqIEdl
dCB0aGUgbGlzdCBvZiBzZWxlY3RlZCBmaWxlcyBjdXJyZW50bHkgYXNzb2NpYXRlZCB0byB0aGUK
KyAqIHJlcXVlc3QuIEluaXRpYWxseSwgdGhlIHJldHVybiB2YWx1ZSBvZiB0aGlzIG1ldGhvZCBj
b250YWlucyBhbnkKKyAqIGZpbGVzIHNlbGVjdGVkIGluIHByZXZpb3VzIGZpbGUgY2hvb3NlciBy
ZXF1ZXN0cyBmb3IgdGhpcyBIVE1MCisgKiBpbnB1dCBlbGVtZW50LiBPbmNlIHdlYmtpdF9maWxl
X2Nob29zZXJfcmVxdWVzdF9zZWxlY3RfZmlsZXMsIHRoZQorICogdmFsdWUgd2lsbCByZWZsZWN0
IHdoYXRldmVyIGZpbGVzIGFyZSBnaXZlbi4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBu
b3JtYWxseSBiZSBjYWxsZWQgb25seSBiZWZvcmUgcHJlc2VudGluZyB0aGUKKyAqIGZpbGUgY2hv
b3NlciBkaWFsb2cgdG8gdGhlIHVzZXIsIHRvIGRlY2lkZSB3aGV0aGVyIHRvIHBlcmZvcm0gc29t
ZQorICogZXh0cmEgYWN0aW9uLCBsaWtlIHByZS1zZWxlY3RpbmcgdGhlIGZpbGVzIGZyb20gYSBw
cmV2aW91cyByZXF1ZXN0LgorICoKKyAqIFJldHVybnM6IChhcnJheSB6ZXJvLXRlcm1pbmF0ZWQ9
MSkgKHRyYW5zZmVyIG5vbmUpOiBhCisgKiAlTlVMTC10ZXJtaW5hdGVkIGFycmF5IG9mIHN0cmlu
Z3MgaWYgdGhlcmUgYXJlIHNlbGVjdGVkIGZpbGVzCisgKiBhc3NvY2lhdGVkIHdpdGggdGhlIHJl
cXVlc3Qgb3IgJU5VTEwgb3RoZXJ3aXNlLiBUaGlzIGFycmF5IGFuZCBpdHMKKyAqIGNvbnRlbnRz
IGFyZSBvd25lZCBieSBXZWJLaXRHVEsrIGFuZCBzaG91bGQgbm90IGJlIG1vZGlmaWVkIG9yCisg
KiBmcmVlZC4KKyAqLworY29uc3QgZ2NoYXIqIGNvbnN0KiB3ZWJraXRfZmlsZV9jaG9vc2VyX3Jl
cXVlc3RfZ2V0X3NlbGVjdGVkX2ZpbGVzKFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCogcmVxdWVz
dCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfRklMRV9DSE9PU0VSX1JF
UVVFU1QocmVxdWVzdCksIDApOworICAgIGlmIChyZXF1ZXN0LT5wcml2LT5zZWxlY3RlZEZpbGVz
KQorICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxnY2hhcioqPihyZXF1ZXN0LT5wcml2
LT5zZWxlY3RlZEZpbGVzLT5wZGF0YSk7CisKKyAgICBGaWxlQ2hvb3NlclNldHRpbmdzIHNldHRp
bmdzID0gcmVxdWVzdC0+cHJpdi0+Y2hvb3Nlci0+c2V0dGluZ3MoKTsKKyAgICBzaXplX3QgbnVt
T2ZGaWxlcyA9IHNldHRpbmdzLnNlbGVjdGVkRmlsZXMuc2l6ZSgpOworICAgIGlmICghbnVtT2ZG
aWxlcykKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXF1ZXN0LT5wcml2LT5zZWxlY3RlZEZp
bGVzID0gYWRvcHRHUmVmKGdfcHRyX2FycmF5X25ld193aXRoX2ZyZWVfZnVuYyhnX2ZyZWUpKTsK
KyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bU9mRmlsZXM7ICsraSkgeworICAgICAgICBp
ZiAoc2V0dGluZ3Muc2VsZWN0ZWRGaWxlc1tpXS5pc0VtcHR5KCkpCisgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgQ1N0cmluZyBmaWxlbmFtZSA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlv
bihzZXR0aW5ncy5zZWxlY3RlZEZpbGVzW2ldKTsKKyAgICAgICAgZ19wdHJfYXJyYXlfYWRkKHJl
cXVlc3QtPnByaXYtPnNlbGVjdGVkRmlsZXMuZ2V0KCksIGdfc3RyZHVwKGZpbGVuYW1lLmRhdGEo
KSkpOworICAgIH0KKyAgICBnX3B0cl9hcnJheV9hZGQocmVxdWVzdC0+cHJpdi0+c2VsZWN0ZWRG
aWxlcy5nZXQoKSwgMCk7CisKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxnY2hhcioqPihy
ZXF1ZXN0LT5wcml2LT5zZWxlY3RlZEZpbGVzLT5wZGF0YSk7Cit9CkluZGV4OiBTb3VyY2UvV2Vi
S2l0L2d0ay93ZWJraXQvd2Via2l0ZmlsZWNob29zZXJyZXF1ZXN0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGZpbGVjaG9vc2VycmVxdWVzdC5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGZpbGVjaG9vc2VycmVx
dWVzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzEgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTIgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiB3ZWJraXRmaWxlY2hvb3NlcnJlcXVlc3RfaAor
I2RlZmluZSB3ZWJraXRmaWxlY2hvb3NlcnJlcXVlc3RfaAorCisjaW5jbHVkZSA8Z3RrL2d0ay5o
PgorI2luY2x1ZGUgPHdlYmtpdC93ZWJraXRkZWZpbmVzLmg+CisKK0dfQkVHSU5fREVDTFMKKwor
I2RlZmluZSBXRUJLSVRfVFlQRV9GSUxFX0NIT09TRVJfUkVRVUVTVCAgICAgICAgICAgICh3ZWJr
aXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX0ZJTEVf
Q0hPT1NFUl9SRVFVRVNUKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NB
U1QoKG9iaiksIFdFQktJVF9UWVBFX0ZJTEVfQ0hPT1NFUl9SRVFVRVNULCBXZWJLaXRGaWxlQ2hv
b3NlclJlcXVlc3QpKQorI2RlZmluZSBXRUJLSVRfRklMRV9DSE9PU0VSX1JFUVVFU1RfQ0xBU1Mo
a2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX1RZUEVf
RklMRV9DSE9PU0VSX1JFUVVFU1QsIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdENsYXNzKSkKKyNk
ZWZpbmUgV0VCS0lUX0lTX0ZJTEVfQ0hPT1NFUl9SRVFVRVNUKG9iaikgICAgICAgICAoR19UWVBF
X0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9UWVBFX0ZJTEVfQ0hPT1NFUl9SRVFV
RVNUKSkKKyNkZWZpbmUgV0VCS0lUX0lTX0ZJTEVfQ0hPT1NFUl9SRVFVRVNUX0NMQVNTKGtsYXNz
KSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9UWVBFX0ZJTEVfQ0hP
T1NFUl9SRVFVRVNUKSkKKyNkZWZpbmUgV0VCS0lUX0ZJTEVfQ0hPT1NFUl9SRVFVRVNUX0dFVF9D
TEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9UWVBF
X0ZJTEVfQ0hPT1NFUl9SRVFVRVNULCBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3RDbGFzcykpCisK
K3R5cGVkZWYgc3RydWN0IF9XZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QgICAgICAgIFdlYktpdEZp
bGVDaG9vc2VyUmVxdWVzdDsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRGaWxlQ2hvb3NlclJlcXVl
c3RDbGFzcyAgIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdENsYXNzOwordHlwZWRlZiBzdHJ1Y3Qg
X1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdFByaXZhdGUgV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0
UHJpdmF0ZTsKKworc3RydWN0IF9XZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QgeworICAgIEdPYmpl
Y3QgcGFyZW50OworCisgICAgLyo8IHByaXZhdGUgPiovCisgICAgV2ViS2l0RmlsZUNob29zZXJS
ZXF1ZXN0UHJpdmF0ZSAqcHJpdjsKK307CisKK3N0cnVjdCBfV2ViS2l0RmlsZUNob29zZXJSZXF1
ZXN0Q2xhc3MgeworICAgIEdPYmplY3RDbGFzcyBwYXJlbnRfY2xhc3M7Cit9OworCitXRUJLSVRf
QVBJIEdUeXBlCit3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X3R5cGUgICAgICAgICAg
ICAgICAgICAodm9pZCk7CisKK1dFQktJVF9BUEkgY29uc3QgZ2NoYXIgKiBjb25zdCAqCit3ZWJr
aXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X21pbWVfdHlwZXMgICAgICAgIChXZWJLaXRGaWxl
Q2hvb3NlclJlcXVlc3QgKnJlcXVlc3QpOworCitXRUJLSVRfQVBJIEd0a0ZpbGVGaWx0ZXIgKgor
d2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9taW1lX3R5cGVzX2ZpbHRlciAoV2ViS2l0
RmlsZUNob29zZXJSZXF1ZXN0ICpyZXF1ZXN0KTsKKworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Vi
a2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9zZWxlY3RfbXVsdGlwbGUgICAoV2ViS2l0Rmls
ZUNob29zZXJSZXF1ZXN0ICpyZXF1ZXN0KTsKKworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZmls
ZV9jaG9vc2VyX3JlcXVlc3Rfc2VsZWN0X2ZpbGVzICAgICAgICAgIChXZWJLaXRGaWxlQ2hvb3Nl
clJlcXVlc3QgKnJlcXVlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBnY2hhciAqIGNvbnN0ICAgICAgKmZpbGVzKTsKKworV0VCS0lU
X0FQSSBjb25zdCBnY2hhciAqIGNvbnN0ICoKK3dlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9n
ZXRfc2VsZWN0ZWRfZmlsZXMgICAgKFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCAqcmVxdWVzdCk7
CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZgpJbmRleDogU291cmNlL1dlYktpdC9ndGsvd2Via2l0
L3dlYmtpdGZpbGVjaG9vc2VycmVxdWVzdHByaXZhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZmlsZWNob29zZXJyZXF1ZXN0cHJpdmF0ZS5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGZpbGVjaG9vc2VycmVx
dWVzdHByaXZhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMwIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgd2Via2l0ZmlsZWNob29zZXJyZXF1
ZXN0cHJpdmF0ZV9oCisjZGVmaW5lIHdlYmtpdGZpbGVjaG9vc2VycmVxdWVzdHByaXZhdGVfaAor
CisjaW5jbHVkZSAiRmlsZUNob29zZXIuaCIKKyNpbmNsdWRlICJ3ZWJraXRmaWxlY2hvb3NlcnJl
cXVlc3QuaCIKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK1dlYktpdEZpbGVDaG9vc2Vy
UmVxdWVzdCogd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2NyZWF0ZShQYXNzUmVmUHRyPEZp
bGVDaG9vc2VyPiBjaG9vc2VyKTsKKworI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViS2l0L2d0ay93
ZWJraXQvd2Via2l0d2Vidmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9ndGsv
d2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwCShyZXZpc2lvbiAxMTk5NDYpCisrKyBTb3VyY2UvV2Vi
S2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxNiw2
ICsyMTYsNyBAQCBlbnVtIHsKICAgICBFTlRFUklOR19GVUxMU0NSRUVOLAogICAgIExFQVZJTkdf
RlVMTFNDUkVFTiwKICAgICBDT05URVhUX01FTlUsCisgICAgUlVOX0ZJTEVfQ0hPT1NFUiwKIAog
ICAgIExBU1RfU0lHTkFMCiB9OwpAQCAtMTI5NCw2ICsxMjk1LDQ4IEBAIHN0YXRpYyBnYm9vbGVh
biB3ZWJraXRfd2ViX3ZpZXdfcmVhbF9sZWEKICAgICByZXR1cm4gRkFMU0U7CiB9CiAKK3N0YXRp
YyB2b2lkIGZpbGVDaG9vc2VyRGlhbG9nUmVzcG9uc2VDYWxsYmFjayhHdGtEaWFsb2cqIGRpYWxv
ZywgZ2ludCByZXNwb25zZUlELCBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QqIHJlcXVlc3QpCit7
CisgICAgR1JlZlB0cjxXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3Q+IGFkb3B0ZWRSZXF1ZXN0ID0g
YWRvcHRHUmVmKHJlcXVlc3QpOworICAgIGlmIChyZXNwb25zZUlEID09IEdUS19SRVNQT05TRV9B
Q0NFUFQpIHsKKyAgICAgICAgR093blB0cjxHU0xpc3Q+IGZpbGVzTGlzdChndGtfZmlsZV9jaG9v
c2VyX2dldF9maWxlbmFtZXMoR1RLX0ZJTEVfQ0hPT1NFUihkaWFsb2cpKSk7CisgICAgICAgIEdS
ZWZQdHI8R1B0ckFycmF5PiBmaWxlc0FycmF5ID0gYWRvcHRHUmVmKGdfcHRyX2FycmF5X25ldygp
KTsKKyAgICAgICAgZm9yIChHU0xpc3QqIGZpbGUgPSBmaWxlc0xpc3QuZ2V0KCk7IGZpbGU7IGZp
bGUgPSBnX3NsaXN0X25leHQoZmlsZSkpCisgICAgICAgICAgICBnX3B0cl9hcnJheV9hZGQoZmls
ZXNBcnJheS5nZXQoKSwgZmlsZS0+ZGF0YSk7CisgICAgICAgIGdfcHRyX2FycmF5X2FkZChmaWxl
c0FycmF5LmdldCgpLCAwKTsKKyAgICAgICAgd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X3Nl
bGVjdF9maWxlcyhhZG9wdGVkUmVxdWVzdC5nZXQoKSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBn
Y2hhciogY29uc3QqPihmaWxlc0FycmF5LT5wZGF0YSkpOworICAgIH0KKworICAgIGd0a193aWRn
ZXRfZGVzdHJveShHVEtfV0lER0VUKGRpYWxvZykpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Vi
a2l0V2ViVmlld1JlYWxSdW5GaWxlQ2hvb3NlcihXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBXZWJL
aXRGaWxlQ2hvb3NlclJlcXVlc3QqIHJlcXVlc3QpCit7CisgICAgR3RrV2lkZ2V0KiB0b3BsZXZl
bCA9IGd0a193aWRnZXRfZ2V0X3RvcGxldmVsKEdUS19XSURHRVQod2ViVmlldykpOworICAgIGlm
ICghd2lkZ2V0SXNPbnNjcmVlblRvcGxldmVsV2luZG93KHRvcGxldmVsKSkKKyAgICAgICAgdG9w
bGV2ZWwgPSAwOworCisgICAgZ2Jvb2xlYW4gYWxsb3dzTXVsdGlwbGVTZWxlY3Rpb24gPSB3ZWJr
aXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X3NlbGVjdF9tdWx0aXBsZShyZXF1ZXN0KTsKKyAg
ICBHdGtXaWRnZXQqIGRpYWxvZyA9IGd0a19maWxlX2Nob29zZXJfZGlhbG9nX25ldyhhbGxvd3NN
dWx0aXBsZVNlbGVjdGlvbiA/IF8oIlNlbGVjdCBGaWxlcyIpIDogXygiU2VsZWN0IEZpbGUiKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3Bs
ZXZlbCA/IEdUS19XSU5ET1codG9wbGV2ZWwpIDogMCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHVEtfRklMRV9DSE9PU0VSX0FDVElPTl9PUEVO
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdU
S19TVE9DS19DQU5DRUwsIEdUS19SRVNQT05TRV9DQU5DRUwsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1RLX1NUT0NLX09QRU4sIEdUS19SRVNQ
T05TRV9BQ0NFUFQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgTlVMTCk7CisKKyAgICBpZiAoR3RrRmlsZUZpbHRlciogZmlsdGVyID0gd2Via2l0
X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9taW1lX3R5cGVzX2ZpbHRlcihyZXF1ZXN0KSkKKyAg
ICAgICAgZ3RrX2ZpbGVfY2hvb3Nlcl9zZXRfZmlsdGVyKEdUS19GSUxFX0NIT09TRVIoZGlhbG9n
KSwgZmlsdGVyKTsKKyAgICBndGtfZmlsZV9jaG9vc2VyX3NldF9zZWxlY3RfbXVsdGlwbGUoR1RL
X0ZJTEVfQ0hPT1NFUihkaWFsb2cpLCBhbGxvd3NNdWx0aXBsZVNlbGVjdGlvbik7CisKKyAgICBp
ZiAoY29uc3QgZ2NoYXIqIGNvbnN0KiBzZWxlY3RlZEZpbGVzID0gd2Via2l0X2ZpbGVfY2hvb3Nl
cl9yZXF1ZXN0X2dldF9zZWxlY3RlZF9maWxlcyhyZXF1ZXN0KSkKKyAgICAgICAgZ3RrX2ZpbGVf
Y2hvb3Nlcl9zZWxlY3RfZmlsZW5hbWUoR1RLX0ZJTEVfQ0hPT1NFUihkaWFsb2cpLCBzZWxlY3Rl
ZEZpbGVzWzBdKTsKKworICAgIGdfc2lnbmFsX2Nvbm5lY3QoZGlhbG9nLCAicmVzcG9uc2UiLCBH
X0NBTExCQUNLKGZpbGVDaG9vc2VyRGlhbG9nUmVzcG9uc2VDYWxsYmFjayksIGdfb2JqZWN0X3Jl
ZihyZXF1ZXN0KSk7CisgICAgZ3RrX3dpZGdldF9zaG93KGRpYWxvZyk7CisKKyAgICByZXR1cm4g
VFJVRTsKK30KKwogc3RhdGljIHZvaWQgd2Via2l0X3dlYl92aWV3X2Rpc3Bvc2UoR09iamVjdCog
b2JqZWN0KQogewogICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVco
b2JqZWN0KTsKQEAgLTI1NDcsNiArMjU5MCw0MiBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX3Zp
ZXdfY2xhc3NfaW5pdChXCiAgICAgICAgICAgICBHX1RZUEVfTk9ORSwgMSwKICAgICAgICAgICAg
IFdFQktJVF9UWVBFX1dFQl9GUkFNRSk7CiAKKyAgICAgLyoqCisgICAgICogV2ViS2l0V2ViVmll
dzo6cnVuLWZpbGUtY2hvb3NlcjoKKyAgICAgKiBAd2ViX3ZpZXc6IHRoZSAjV2ViS2l0V2ViVmll
dyBvbiB3aGljaCB0aGUgc2lnbmFsIGlzIGVtaXR0ZWQKKyAgICAgKiBAcmVxdWVzdDogYSAjV2Vi
S2l0RmlsZUNob29zZXJSZXF1ZXN0CisgICAgICoKKyAgICAgKiBUaGlzIHNpZ25hbCBpcyBlbWl0
dGVkIHdoZW4gdGhlIHVzZXIgaW50ZXJhY3RzIHdpdGggYSAmbHQ7aW5wdXQKKyAgICAgKiB0eXBl
PSdmaWxlJyAvJmd0OyBIVE1MIGVsZW1lbnQsIHJlcXVlc3RpbmcgZnJvbSBXZWJLaXQgdG8gc2hv
dworICAgICAqIGEgZGlhbG9nIHRvIHNlbGVjdCBvbmUgb3IgbW9yZSBmaWxlcyB0byBiZSB1cGxv
YWRlZC4gVG8gbGV0IHRoZQorICAgICAqIGFwcGxpY2F0aW9uIGtub3cgdGhlIGRldGFpbHMgb2Yg
dGhlIGZpbGUgY2hvb3NlciwgYXMgd2VsbCBhcyB0bworICAgICAqIGFsbG93IHRoZSBjbGllbnQg
YXBwbGljYXRpb24gdG8gZWl0aGVyIGNhbmNlbCB0aGUgcmVxdWVzdCBvcgorICAgICAqIHBlcmZv
cm0gYW4gYWN0dWFsIHNlbGVjdGlvbiBvZiBmaWxlcywgdGhlIHNpZ25hbCB3aWxsIHBhc3MgYW4K
KyAgICAgKiBpbnN0YW5jZSBvZiB0aGUgI1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCBpbiB0aGUg
QHJlcXVlc3QKKyAgICAgKiBhcmd1bWVudC4KKyAgICAgKgorICAgICAqIFRoZSBkZWZhdWx0IHNp
Z25hbCBoYW5kbGVyIHdpbGwgYXN5bmNocm9ub3VzbHkgcnVuIGEgcmVndWxhcgorICAgICAqICNH
dGtGaWxlQ2hvb3NlckRpYWxvZyBmb3IgdGhlIHVzZXIgdG8gaW50ZXJhY3Qgd2l0aC4KKyAgICAg
KgorICAgICAqIElmIHRoaXMgc2lnbmFsIGlzIHRvIGJlIGhhbmRsZWQgYXN5bmNocm9ub3VzbHks
IHlvdSBtdXN0CisgICAgICogY2FsbCBnX29iamVjdF9yZWYoKSBvbiB0aGUgQHJlcXVlc3QsIGFu
ZCByZXR1cm4gJVRSVUUgdG8gaW5kaWNhdGUKKyAgICAgKiB0aGF0IHRoZSByZXF1ZXN0IGlzIGJl
aW5nIGhhbmRsZWQuIFdoZW4geW91IGFyZSByZWFkeSB0byBjb21wbGV0ZSB0aGUKKyAgICAgKiBy
ZXF1ZXN0LCBjYWxsIHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9zZWxlY3RfZmlsZXMoKS4K
KyAgICAgKgorICAgICAqIFJldHVybnM6ICVUUlVFIHRvIHN0b3Agb3RoZXIgaGFuZGxlcnMgZnJv
bSBiZWluZyBpbnZva2VkIGZvciB0aGUgZXZlbnQuCisgICAgICogICAlRkFMU0UgdG8gcHJvcGFn
YXRlIHRoZSBldmVudCBmdXJ0aGVyLgorICAgICAqCisgICAgICovCisgICAgd2Via2l0X3dlYl92
aWV3X3NpZ25hbHNbUlVOX0ZJTEVfQ0hPT1NFUl0gPQorICAgICAgICBnX3NpZ25hbF9uZXcoInJ1
bi1maWxlLWNob29zZXIiLAorICAgICAgICAgICAgICAgICAgICAgR19UWVBFX0ZST01fQ0xBU1Mo
d2ViVmlld0NsYXNzKSwKKyAgICAgICAgICAgICAgICAgICAgIEdfU0lHTkFMX1JVTl9MQVNULAor
ICAgICAgICAgICAgICAgICAgICAgR19TVFJVQ1RfT0ZGU0VUKFdlYktpdFdlYlZpZXdDbGFzcywg
cnVuX2ZpbGVfY2hvb3NlciksCisgICAgICAgICAgICAgICAgICAgICBnX3NpZ25hbF9hY2N1bXVs
YXRvcl90cnVlX2hhbmRsZWQsIDAgLyogYWNjdW11bGF0b3IgZGF0YSAqLywKKyAgICAgICAgICAg
ICAgICAgICAgIHdlYmtpdF9tYXJzaGFsX0JPT0xFQU5fX09CSkVDVCwKKyAgICAgICAgICAgICAg
ICAgICAgIEdfVFlQRV9CT09MRUFOLCAxLCAvKiBudW1iZXIgb2YgcGFyYW1ldGVycyAqLworICAg
ICAgICAgICAgICAgICAgICAgV0VCS0lUX1RZUEVfRklMRV9DSE9PU0VSX1JFUVVFU1QpOworCiAg
ICAgd2Via2l0X3dlYl92aWV3X3NpZ25hbHNbU0hPVUxEX0JFR0lOX0VESVRJTkddID0gZ19zaWdu
YWxfbmV3KCJzaG91bGQtYmVnaW4tZWRpdGluZyIsCiAgICAgICAgIEdfVFlQRV9GUk9NX0NMQVNT
KHdlYlZpZXdDbGFzcyksIHN0YXRpY19jYXN0PEdTaWduYWxGbGFncz4oR19TSUdOQUxfUlVOX0xB
U1QgfCBHX1NJR05BTF9BQ1RJT04pLAogICAgICAgICBHX1NUUlVDVF9PRkZTRVQoV2ViS2l0V2Vi
Vmlld0NsYXNzLCBzaG91bGRfYWxsb3dfZWRpdGluZ19hY3Rpb24pLCBnX3NpZ25hbF9hY2N1bXVs
YXRvcl9maXJzdF93aW5zLCAwLApAQCAtMjg1Niw2ICsyOTM1LDcgQEAgc3RhdGljIHZvaWQgd2Vi
a2l0X3dlYl92aWV3X2NsYXNzX2luaXQoVwogICAgIHdlYlZpZXdDbGFzcy0+c2hvdWxkX2FsbG93
X2VkaXRpbmdfYWN0aW9uID0gd2Via2l0X3dlYl92aWV3X3JlYWxfc2hvdWxkX2FsbG93X2VkaXRp
bmdfYWN0aW9uOwogICAgIHdlYlZpZXdDbGFzcy0+ZW50ZXJpbmdfZnVsbHNjcmVlbiA9IHdlYmtp
dF93ZWJfdmlld19yZWFsX2VudGVyaW5nX2Z1bGxzY3JlZW47CiAgICAgd2ViVmlld0NsYXNzLT5s
ZWF2aW5nX2Z1bGxzY3JlZW4gPSB3ZWJraXRfd2ViX3ZpZXdfcmVhbF9sZWF2aW5nX2Z1bGxzY3Jl
ZW47CisgICAgd2ViVmlld0NsYXNzLT5ydW5fZmlsZV9jaG9vc2VyID0gd2Via2l0V2ViVmlld1Jl
YWxSdW5GaWxlQ2hvb3NlcjsKIAogICAgIEdPYmplY3RDbGFzcyogb2JqZWN0Q2xhc3MgPSBHX09C
SkVDVF9DTEFTUyh3ZWJWaWV3Q2xhc3MpOwogICAgIG9iamVjdENsYXNzLT5kaXNwb3NlID0gd2Vi
a2l0X3dlYl92aWV3X2Rpc3Bvc2U7CkBAIC0zNjEwLDYgKzM2OTAsMTIgQEAgR3RrV2lkZ2V0KiB3
ZWJraXRfd2ViX3ZpZXdfbmV3KHZvaWQpCiAgICAgcmV0dXJuIEdUS19XSURHRVQod2ViVmlldyk7
CiB9CiAKK3ZvaWQgd2Via2l0V2ViVmlld1J1bkZpbGVDaG9vc2VyUmVxdWVzdChXZWJLaXRXZWJW
aWV3KiB3ZWJWaWV3LCBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QqIHJlcXVlc3QpCit7CisgICAg
Z2Jvb2xlYW4gcmV0dXJuVmFsdWU7CisgICAgZ19zaWduYWxfZW1pdCh3ZWJWaWV3LCB3ZWJraXRf
d2ViX3ZpZXdfc2lnbmFsc1tSVU5fRklMRV9DSE9PU0VSXSwgMCwgcmVxdWVzdCwgJnJldHVyblZh
bHVlKTsKK30KKwogLy8gZm9yIGludGVybmFsIHVzZSBvbmx5CiB2b2lkIHdlYmtpdF93ZWJfdmll
d19ub3RpZnlfcmVhZHkoV2ViS2l0V2ViVmlldyogd2ViVmlldykKIHsKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuaAkocmV2aXNpb24gMTE5OTQ2KQorKysgU291
cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAt
MjgsNiArMjgsNyBAQAogCiAjaW5jbHVkZSA8d2Via2l0L3dlYmtpdGRlZmluZXMuaD4KICNpbmNs
dWRlIDx3ZWJraXQvd2Via2l0ZG9tLmg+CisjaW5jbHVkZSA8d2Via2l0L3dlYmtpdGZpbGVjaG9v
c2VycmVxdWVzdC5oPgogI2luY2x1ZGUgPHdlYmtpdC93ZWJraXR3ZWJiYWNrZm9yd2FyZGxpc3Qu
aD4KICNpbmNsdWRlIDx3ZWJraXQvd2Via2l0d2ViZnJhbWUuaD4KICNpbmNsdWRlIDx3ZWJraXQv
d2Via2l0d2ViaGlzdG9yeWl0ZW0uaD4KQEAgLTE3OCw5ICsxNzksOCBAQCBzdHJ1Y3QgX1dlYktp
dFdlYlZpZXdDbGFzcyB7CiAgICAgZ2Jvb2xlYW4gICAgICAgICAgICAgICAgICAgKCogc2hvdWxk
X2FsbG93X2VkaXRpbmdfYWN0aW9uKSAoV2ViS2l0V2ViVmlldyAgICp3ZWJfdmlldyk7CiAgICAg
Z2Jvb2xlYW4gICAgICAgICAgICAgICAgICAgKCogZW50ZXJpbmdfZnVsbHNjcmVlbikgKFdlYktp
dFdlYlZpZXcgICAqd2ViX3ZpZXcpOwogICAgIGdib29sZWFuICAgICAgICAgICAgICAgICAgICgq
IGxlYXZpbmdfZnVsbHNjcmVlbikgKFdlYktpdFdlYlZpZXcgICAqd2ViX3ZpZXcpOwotCi0gICAg
LyogUGFkZGluZyBmb3IgZnV0dXJlIGV4cGFuc2lvbiAqLwotICAgIHZvaWQgKCpfd2Via2l0X3Jl
c2VydmVkMCkgKHZvaWQpOworICAgIGdib29sZWFuICAgICAgICAgICAgICAgICAgICgqIHJ1bl9m
aWxlX2Nob29zZXIpICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAgICAgKndlYl92aWV3LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QgKnJlcXVlc3QpOwogfTsKIAogV0VCS0lUX0FQSSBH
VHlwZQpJbmRleDogU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXdwcml2YXRl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXdw
cml2YXRlLmgJKHJldmlzaW9uIDExOTk0NikKKysrIFNvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93
ZWJraXR3ZWJ2aWV3cHJpdmF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzcsNiArMTM3LDggQEAg
R3RrTWVudSogd2Via2l0X3dlYl92aWV3X2dldF9jb250ZXh0X21lbgogdm9pZCB3ZWJWaWV3RW50
ZXJGdWxsc2NyZWVuKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIFdlYkNvcmU6Ok5vZGUqKTsKIHZv
aWQgd2ViVmlld0V4aXRGdWxsc2NyZWVuKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpOwogCit2b2lk
IHdlYmtpdFdlYlZpZXdSdW5GaWxlQ2hvb3NlclJlcXVlc3QoV2ViS2l0V2ViVmlldyosIFdlYktp
dEZpbGVDaG9vc2VyUmVxdWVzdCopOworCiAjaWYgRU5BQkxFKElDT05EQVRBQkFTRSkKIHZvaWQg
d2Via2l0V2ViVmlld1JlZ2lzdGVyRm9ySWNvbk5vdGlmaWNhdGlvbihXZWJLaXRXZWJWaWV3Kiwg
Ym9vbCBzaG91bGRSZWdpc3Rlcik7CiB2b2lkIHdlYmtpdFdlYlZpZXdJY29uTG9hZGVkKFdlYktp
dEZhdmljb25EYXRhYmFzZSosIGNvbnN0IGNoYXIqIGZyYW1lVVJJLCBXZWJLaXRXZWJWaWV3Kik7
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>148661</attachid>
            <date>2012-06-20 15:02:25 -0700</date>
            <delta_ts>2012-06-21 05:08:53 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-87283-20120620180224.patch</filename>
            <type>text/plain</type>
            <size>47378</size>
            <attacher name="Daniel Drake">dsd</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L2d0ay9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyMDg2MCkKKysrIFNvdXJjZS9XZWJLaXQv
Z3RrL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDgyIEBACisyMDEyLTA2LTIw
ICBEYW5pZWwgRHJha2UgIDxkc2RAbGFwdG9wLm9yZz4KKworICAgICAgICBbR1RLXSBCYWNrcG9y
dCBydW4tZmlsZS1jaG9vc2VyIHRvIFdlYktpdDEKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTg3MjgzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgVGhpcyBpcyBhIHJlbGF0aXZlbHkgc3RyYWlnaHRmb3J3YXJk
IGJhY2twb3J0IG9mIE1hcmlvIFNhbmNoZXoKKyAgICAgICAgUHJhZGEncyBXZWJLaXQyIHJ1bi1m
aWxlLWNob29zZXIgc2lnbmFsIHdvcmssIGludGVuZGVkIGZvciB1c2UgYnkKKyAgICAgICAgT0xQ
QyBhbmQgb3RoZXJzIHdobyBhcmUgbm90IHF1aXRlIHJlYWR5IHRvIG1vdmUgdG8gV2ViS2l0Mi4K
KworICAgICAgICBBZGQgYSBuZXcgcHVibGljIGNsYXNzIHRvIHRoZSBBUEksIFdlYktpdEZpbGVD
aG9vc2VyUmVxdWVzdCwgdG8gYmUKKyAgICAgICAgZW1pdHRlZCBhbG9uZyB3aXRoIGEgbmV3IFdl
YktpdFdlYlZpZXc6OnJ1bi1maWxlLWNob29zZXIgc2lnbmFsIHRvCisgICAgICAgIGxldCBjbGll
bnQgYXBwbGljYXRpb25zIHRvIHByb3ZpZGUgdGhlaXIgb3duIGZpbGUgY2hvb3NlciBkaWFsb2cK
KyAgICAgICAgd2hlbiB0aGUgdXNlIGludGVyYWN0cyB3aXRoIEhUTUwgSW5wdXQgZWxlbWVudHMg
b2YgdHlwZSAnZmlsZScuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbTogQWRkZWQgbmV3IHNv
dXJjZSBmaWxlcyBhbmQgaGVhZGVycy4KKyAgICAgICAgKiB3ZWJraXQvd2Via2l0ZmlsZWNob29z
ZXJyZXF1ZXN0LmNwcDogQWRkZWQuCisgICAgICAgIChfV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0
UHJpdmF0ZSk6CisgICAgICAgICh3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfaW5pdCk6Cisg
ICAgICAgICh3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZmluYWxpemUpOgorICAgICAgICAo
d2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9wcm9wZXJ0eSk6CisgICAgICAgICh3ZWJr
aXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfY2xhc3NfaW5pdCk6CisgICAgICAgICh3ZWJraXRfZmls
ZV9jaG9vc2VyX3JlcXVlc3RfY3JlYXRlKToKKyAgICAgICAgKHdlYmtpdF9maWxlX2Nob29zZXJf
cmVxdWVzdF9nZXRfbWltZV90eXBlcyk6CisgICAgICAgICh3ZWJraXRfZmlsZV9jaG9vc2VyX3Jl
cXVlc3RfZ2V0X21pbWVfdHlwZXNfZmlsdGVyKToKKyAgICAgICAgKHdlYmtpdF9maWxlX2Nob29z
ZXJfcmVxdWVzdF9nZXRfc2VsZWN0X211bHRpcGxlKToKKyAgICAgICAgKHdlYmtpdF9maWxlX2No
b29zZXJfcmVxdWVzdF9zZWxlY3RfZmlsZXMpOgorICAgICAgICAod2Via2l0X2ZpbGVfY2hvb3Nl
cl9yZXF1ZXN0X2dldF9zZWxlY3RlZF9maWxlcyk6CisgICAgICAgICogd2Via2l0L3dlYmtpdGZp
bGVjaG9vc2VycmVxdWVzdC5oOiBBZGRlZC4KKyAgICAgICAgKF9XZWJLaXRGaWxlQ2hvb3NlclJl
cXVlc3QpOgorICAgICAgICAoX1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdENsYXNzKToKKyAgICAg
ICAgKiB3ZWJraXQvd2Via2l0ZmlsZWNob29zZXJyZXF1ZXN0cHJpdmF0ZS5oOiBBZGRlZCwgCisg
ICAgICAgIGNvbnRhaW5pbmcgdGhlIHByb3RvdHlwZSBvZiB3ZWJraXRfZmlsZV9jaG9vc2VyX3Jl
cXVlc3RfY3JlYXRlLgorCisgICAgICAgIFByb3ZpZGUgcHJpdmF0ZSBBUEkgdG8gbWFrZSBhIGZp
bGUgY2hvb3NlciByZXF1ZXN0IGZyb20gdGhlCisgICAgICAgIFdlYlZpZXcsIGFuZCBwcm92aWRl
IGEgZGVmYXVsdCBoYW5kbGVyIGZvciBpdC4KKworICAgICAgICAqIHdlYmtpdC93ZWJraXR3ZWJ2
aWV3LmNwcDoKKyAgICAgICAgKGZpbGVDaG9vc2VyRGlhbG9nUmVzcG9uc2VDYWxsYmFjayk6IEhh
bmRsZXIgZm9yIHRoZSAncmVzcG9uc2UnCisgICAgICAgIHNpZ25hbCBmb3IgdGhlIEd0a0ZpbGVD
aG9vc2VyRGlhbG9nIHVzZWQgaW4gdGhlIGRlZmF1bHQKKyAgICAgICAgaGFuZGxlci4gSXQgd2ls
bCBjYWxsIHRvIHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9zZWxlY3RfZmlsZXMKKyAgICAg
ICAgb3Igd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2NhbmNlbCBhcyBuZWVkZWQuCisgICAg
ICAgICh3ZWJraXRXZWJWaWV3UmVhbFJ1bkZpbGVDaG9vc2VyKTogRGVmYXVsdCBoYW5kbGVyIGZv
ciB0aGUgbmV3CisgICAgICAgICdydW4tZmlsZS1jaG9vc2VyJyBzaWduYWwuIEl0IHdpbGwgY3Jl
YXRlIGEgR3RrRmlsZUNob29zZXJEaWFsb2csCisgICAgICAgIGNvbm5lY3QgdG8gdGhlICdyZXNw
b25zZScgc2lnbmFsIGFuZCBzaG93IGl0LgorICAgICAgICAod2Via2l0X3dlYl92aWV3X2NsYXNz
X2luaXQpOiBDb25uZWN0IHRoZSAncnVuLWZpbGUtY2hvb3NlcicKKyAgICAgICAgc2lnbmFsIHRv
IHRoZSBkZWZhdWx0IGhhbmRsZXIsIHdlYmtpdFdlYlZpZXdSdW5GaWxlQ2hvb3Nlci4KKyAgICAg
ICAgKHdlYmtpdF93ZWJfdmlld19uZXcpOgorICAgICAgICAod2Via2l0V2ViVmlld1J1bkZpbGVD
aG9vc2VyUmVxdWVzdCk6CisgICAgICAgICogd2Via2l0L3dlYmtpdHdlYnZpZXcuaDoKKyAgICAg
ICAgKF9XZWJLaXRXZWJWaWV3Q2xhc3MpOiBBZGRlZCBwcm90b3R5cGUgZm9yIHRoZSBoYW5kbGVy
IG9mIHRoZSBuZXcKKyAgICAgICAgJ3J1bi1maWxlLWNob29zZXInIHNpZ25hbC4KKyAgICAgICAg
KiB3ZWJraXQvd2Via2l0d2Vidmlld3ByaXZhdGUuaDogQWRkZWQgcHJvdG90eXBlIGZvcgorICAg
ICAgICBwcml2YXRlIG5ldyBmdW5jdGlvbiB3ZWJraXRXZWJWaWV3UnVuRmlsZUNob29zZXJSZXF1
ZXN0LgorCisgICAgICAgIFVwZGF0ZSBydW5PcGVuUGFuZWwgdG8gdXNlIHRoZSBuZXcgQVBJLCBp
bmNsdWRpbmcgYSBkZWZhdWx0IGhhbmRsZXIKKyAgICAgICAgd2l0aCBzaW1pbGFyIGJlaGF2aW91
ciB0byBiZWZvcmUuCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRHdGsu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpDaHJvbWVDbGllbnQ6OnJ1bk9wZW5QYW5lbCk6IE5vdyBj
cmVhdGVzIGFuIGluc3RhbmNlIG9mCisgICAgICAgIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCBh
bmQgYXNrcyB0aGUgV2ViVmlldyB0byBlbWl0IHRoZQorICAgICAgICBuZXcgJ3J1bi1maWxlLWNo
b29zZXInIHNpZ25hbCB3aXRoIGl0LgorCisgICAgICAgIEFkZGVkIHRoZSBuZXcgcHVibGljIGhl
YWRlciB0byB0aGUgbWFpbiBoZWFkZXIuCisKKyAgICAgICAgKiB3ZWJraXQvd2Via2l0Lmg6IEFk
ZGVkIHdlYmtpdGZpbGVjaG9vc2VycmVxdWVzdC5oCisKKyAgICAgICAgTmV3IHVuaXQgdGVzdHMg
Zm9yIHRoZSBuZXcgV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0IEFQSS4KKworICAgICAgICAqIHRl
c3RzL3Rlc3R3ZWJ2aWV3LmM6IFZhcmlvdXMgV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0IHRlc3Rz
LAorICAgICAgICBpbmNsdWRpbmcgTUlNRSB0eXBlIGZpbHRlcmluZyBhbmQgc2VsZWN0aW9uIGhh
bmRsaW5nLgorCisgICAgICAgIFVwZGF0ZWQgZG9jdW1lbnRhdGlvbiByZWxhdGVkIGZpbGVzIHdp
dGggdGhlIG5ldyBBUEkuCisKKyAgICAgICAgKiBkb2NzL3dlYmtpdGd0ay1kb2NzLnNnbWw6IEFk
ZGVkIG5ldyBzZWN0aW9uLgorICAgICAgICAqIGRvY3Mvd2Via2l0Z3RrLXNlY3Rpb25zLnR4dDog
QWRkZWQgbmV3IEFQSS4KKyAgICAgICAgKiBkb2NzL3dlYmtpdGd0ay50eXBlczogQWRkZWQgZ2V0
X3R5cGUgZnVuY3Rpb24uCisKIDIwMTItMDYtMTkgIENoYW5nIFdhbiBIb25nICA8am91cm1vb25A
Y29tcGFueTEwMC5uZXQ+CiAKICAgICAgICAgUmVmaW5lIHN5bmNMYXllcnNUaW1lb3V0Q2FsbGJh
Y2sgZm9yIEFjY2VsZXJhdGVkIENvbXBvc2l0aW5nLgpJbmRleDogU291cmNlL1dlYktpdC9ndGsv
R05VbWFrZWZpbGUuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9ndGsvR05VbWFrZWZp
bGUuYW0JKHJldmlzaW9uIDEyMDg2MCkKKysrIFNvdXJjZS9XZWJLaXQvZ3RrL0dOVW1ha2VmaWxl
LmFtCSh3b3JraW5nIGNvcHkpCkBAIC0xMTQsNiArMTE0LDcgQEAgd2Via2l0Z3RrX3N0YXRpY19o
X2FwaSArPSBcCiAJJChzcmNkaXIpL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRkb3du
bG9hZC5oIFwKIAkkKHNyY2RpcikvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGVycm9y
LmggXAogCSQoc3JjZGlyKS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZmF2aWNvbmRh
dGFiYXNlLmggXAorCSQoc3JjZGlyKS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0Zmls
ZWNob29zZXJyZXF1ZXN0LmggXAogCSQoc3JjZGlyKS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQv
d2Via2l0Z2VvbG9jYXRpb25wb2xpY3lkZWNpc2lvbi5oIFwKIAkkKHNyY2RpcikvU291cmNlL1dl
YktpdC9ndGsvd2Via2l0L3dlYmtpdGdsb2JhbHMuaCBcCiAJJChzcmNkaXIpL1NvdXJjZS9XZWJL
aXQvZ3RrL3dlYmtpdC93ZWJraXRoaXR0ZXN0cmVzdWx0LmggXApAQCAtMjIxLDYgKzIyMiw5IEBA
IHdlYmtpdGd0a19zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0
ZXJyb3IuY3BwIFwKIAlTb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZmF2aWNvbmRhdGFi
YXNlLmNwcCBcCiAJU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGZhdmljb25kYXRhYmFz
ZXByaXZhdGUuaCBcCisJU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGZpbGVjaG9vc2Vy
cmVxdWVzdC5jcHAgXAorCVNvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRmaWxlY2hvb3Nl
cnJlcXVlc3QuaCBcCisJU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGZpbGVjaG9vc2Vy
cmVxdWVzdHByaXZhdGUuaCBcCiAJU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGdlb2xv
Y2F0aW9ucG9saWN5ZGVjaXNpb24uY3BwIFwKIAlTb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Vi
a2l0Z2VvbG9jYXRpb25wb2xpY3lkZWNpc2lvbnByaXZhdGUuaCBcCiAJU291cmNlL1dlYktpdC9n
dGsvd2Via2l0L3dlYmtpdGdsb2JhbHMuY3BwIFwKSW5kZXg6IFNvdXJjZS9XZWJLaXQvZ3RrL1dl
YkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmNwcAkocmV2aXNpb24gMTIw
ODYwKQorKysgU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3Rr
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTUsNiArNTUsNyBAQAogI2luY2x1ZGUgIldlYktpdERP
TUJpbmRpbmcuaCIKICNpbmNsdWRlICJXZWJLaXRET01IVE1MRWxlbWVudFByaXZhdGUuaCIKICNp
bmNsdWRlICJXaW5kb3dGZWF0dXJlcy5oIgorI2luY2x1ZGUgIndlYmtpdGZpbGVjaG9vc2VycmVx
dWVzdHByaXZhdGUuaCIKICNpbmNsdWRlICJ3ZWJraXRnZW9sb2NhdGlvbnBvbGljeWRlY2lzaW9u
LmgiCiAjaW5jbHVkZSAid2Via2l0Z2VvbG9jYXRpb25wb2xpY3lkZWNpc2lvbnByaXZhdGUuaCIK
ICNpbmNsdWRlICJ3ZWJraXRuZXR3b3JrcmVxdWVzdC5oIgpAQCAtODE1LDQwICs4MTYsOCBAQCB2
b2lkIENocm9tZUNsaWVudDo6cmVhY2hlZEFwcGxpY2F0aW9uQ2FjCiAKIHZvaWQgQ2hyb21lQ2xp
ZW50OjpydW5PcGVuUGFuZWwoRnJhbWUqLCBQYXNzUmVmUHRyPEZpbGVDaG9vc2VyPiBwcnBGaWxl
Q2hvb3NlcikKIHsKLSAgICBSZWZQdHI8RmlsZUNob29zZXI+IGNob29zZXIgPSBwcnBGaWxlQ2hv
b3NlcjsKLQotICAgIEd0a1dpZGdldCogdG9wbGV2ZWwgPSBndGtfd2lkZ2V0X2dldF90b3BsZXZl
bChHVEtfV0lER0VUKG1fd2ViVmlldykpOwotICAgIGlmICghd2lkZ2V0SXNPbnNjcmVlblRvcGxl
dmVsV2luZG93KHRvcGxldmVsKSkKLSAgICAgICAgdG9wbGV2ZWwgPSAwOwotCi0gICAgR3RrV2lk
Z2V0KiBkaWFsb2cgPSBndGtfZmlsZV9jaG9vc2VyX2RpYWxvZ19uZXcoXygiVXBsb2FkIEZpbGUi
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
b3BsZXZlbCA/IEdUS19XSU5ET1codG9wbGV2ZWwpIDogMCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHVEtfRklMRV9DSE9PU0VSX0FDVElPTl9P
UEVOLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdUS19TVE9DS19DQU5DRUwsIEdUS19SRVNQT05TRV9DQU5DRUwsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1RLX1NUT0NLX09QRU4sIEdUS19S
RVNQT05TRV9BQ0NFUFQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgTlVMTCk7Ci0KLSAgICBndGtfZmlsZV9jaG9vc2VyX3NldF9zZWxlY3RfbXVs
dGlwbGUoR1RLX0ZJTEVfQ0hPT1NFUihkaWFsb2cpLCBjaG9vc2VyLT5zZXR0aW5ncygpLmFsbG93
c011bHRpcGxlRmlsZXMpOwotCi0gICAgaWYgKGd0a19kaWFsb2dfcnVuKEdUS19ESUFMT0coZGlh
bG9nKSkgPT0gR1RLX1JFU1BPTlNFX0FDQ0VQVCkgewotICAgICAgICBpZiAoZ3RrX2ZpbGVfY2hv
b3Nlcl9nZXRfc2VsZWN0X211bHRpcGxlKEdUS19GSUxFX0NIT09TRVIoZGlhbG9nKSkpIHsKLSAg
ICAgICAgICAgIEdPd25QdHI8R1NMaXN0PiBmaWxlbmFtZXMoZ3RrX2ZpbGVfY2hvb3Nlcl9nZXRf
ZmlsZW5hbWVzKEdUS19GSUxFX0NIT09TRVIoZGlhbG9nKSkpOwotICAgICAgICAgICAgVmVjdG9y
PFN0cmluZz4gbmFtZXM7Ci0gICAgICAgICAgICBmb3IgKEdTTGlzdCogaXRlbSA9IGZpbGVuYW1l
cy5nZXQoKSA7IGl0ZW0gOyBpdGVtID0gaXRlbS0+bmV4dCkgewotICAgICAgICAgICAgICAgIGlm
ICghaXRlbS0+ZGF0YSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAg
ICAgICAgbmFtZXMuYXBwZW5kKGZpbGVuYW1lVG9TdHJpbmcoc3RhdGljX2Nhc3Q8Y2hhcio+KGl0
ZW0tPmRhdGEpKSk7Ci0gICAgICAgICAgICAgICAgZ19mcmVlKGl0ZW0tPmRhdGEpOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgY2hvb3Nlci0+Y2hvb3NlRmlsZXMobmFtZXMpOwotICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgZ2NoYXIqIGZpbGVuYW1lID0gZ3RrX2ZpbGVfY2hvb3Nl
cl9nZXRfZmlsZW5hbWUoR1RLX0ZJTEVfQ0hPT1NFUihkaWFsb2cpKTsKLSAgICAgICAgICAgIGlm
IChmaWxlbmFtZSkKLSAgICAgICAgICAgICAgICBjaG9vc2VyLT5jaG9vc2VGaWxlKGZpbGVuYW1l
VG9TdHJpbmcoZmlsZW5hbWUpKTsKLSAgICAgICAgICAgIGdfZnJlZShmaWxlbmFtZSk7Ci0gICAg
ICAgIH0KLSAgICB9Ci0gICAgZ3RrX3dpZGdldF9kZXN0cm95KGRpYWxvZyk7CisgICAgR1JlZlB0
cjxXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3Q+IHJlcXVlc3QgPSBhZG9wdEdSZWYod2Via2l0X2Zp
bGVfY2hvb3Nlcl9yZXF1ZXN0X2NyZWF0ZShwcnBGaWxlQ2hvb3NlcikpOworICAgIHdlYmtpdFdl
YlZpZXdSdW5GaWxlQ2hvb3NlclJlcXVlc3QobV93ZWJWaWV3LCByZXF1ZXN0LmdldCgpKTsKIH0K
IAogdm9pZCBDaHJvbWVDbGllbnQ6OmxvYWRJY29uRm9yRmlsZXMoY29uc3QgVmVjdG9yPFdURjo6
U3RyaW5nPiYgZmlsZW5hbWVzLCBXZWJDb3JlOjpGaWxlSWNvbkxvYWRlciogbG9hZGVyKQpJbmRl
eDogU291cmNlL1dlYktpdC9ndGsvZG9jcy93ZWJraXRndGstZG9jcy5zZ21sCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvZ3RrL2RvY3Mvd2Via2l0Z3RrLWRvY3Muc2dtbAkocmV2aXNpb24g
MTIwODYwKQorKysgU291cmNlL1dlYktpdC9ndGsvZG9jcy93ZWJraXRndGstZG9jcy5zZ21sCSh3
b3JraW5nIGNvcHkpCkBAIC00MSw2ICs0MSw3IEBACiAgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1s
L3dlYmtpdGljb25kYXRhYmFzZS54bWwiLz4KICAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvd2Vi
a2l0c3BlbGxjaGVja2VyLnhtbCIvPgogICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC93ZWJraXRm
YXZpY29uZGF0YWJhc2UueG1sIi8+CisgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL3dlYmtpdGZp
bGVjaG9vc2VycmVxdWVzdC54bWwiLz4KICAgPC9jaGFwdGVyPgogCiAgIDxjaGFwdGVyPgpJbmRl
eDogU291cmNlL1dlYktpdC9ndGsvZG9jcy93ZWJraXRndGstc2VjdGlvbnMudHh0Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvZ3RrL2RvY3Mvd2Via2l0Z3RrLXNlY3Rpb25zLnR4dAkocmV2
aXNpb24gMTIwODYwKQorKysgU291cmNlL1dlYktpdC9ndGsvZG9jcy93ZWJraXRndGstc2VjdGlv
bnMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC03MDMsNiArNzAzLDMwIEBAIFdlYktpdEZhdmljb25E
YXRhYmFzZVByaXZhdGUKIDwvU0VDVElPTj4KIAogPFNFQ1RJT04+Cis8RklMRT53ZWJraXRmaWxl
Y2hvb3NlcnJlcXVlc3Q8L0ZJTEU+Cis8VElUTEU+V2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0PC9U
SVRMRT4KK1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdAord2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1
ZXN0X2dldF9zZWxlY3RfbXVsdGlwbGUKK3dlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRf
bWltZV90eXBlcword2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9taW1lX3R5cGVzX2Zp
bHRlcgord2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9zZWxlY3RlZF9maWxlcword2Vi
a2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X3NlbGVjdF9maWxlcworCis8U1VCU0VDVElPTiBTdGFu
ZGFyZD4KK1dFQktJVF9UWVBFX0ZJTEVfQ0hPT1NFUl9SRVFVRVNUCitXRUJLSVRfRklMRV9DSE9P
U0VSX1JFUVVFU1QKK1dFQktJVF9JU19GSUxFX0NIT09TRVJfUkVRVUVTVAorV0VCS0lUX0ZJTEVf
Q0hPT1NFUl9SRVFVRVNUX0NMQVNTCitXRUJLSVRfSVNfRklMRV9DSE9PU0VSX1JFUVVFU1RfQ0xB
U1MKK1dFQktJVF9GSUxFX0NIT09TRVJfUkVRVUVTVF9HRVRfQ0xBU1MKKworPFNVQlNFQ1RJT04g
UHJpdmF0ZT4KK1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdENsYXNzCitXZWJLaXRGaWxlQ2hvb3Nl
clJlcXVlc3RQcml2YXRlCit3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X3R5cGUKKzwv
U0VDVElPTj4KKworPFNFQ1RJT04+CiA8RklMRT53ZWJraXRkZWZpbmVzPC9GSUxFPgogV0VCS0lU
X0FQSQogV0VCS0lUR1RLX0FQSV9WRVJTSU9OCkluZGV4OiBTb3VyY2UvV2ViS2l0L2d0ay9kb2Nz
L3dlYmtpdGd0ay50eXBlcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2d0ay9kb2NzL3dl
YmtpdGd0ay50eXBlcwkocmV2aXNpb24gMTIwODYwKQorKysgU291cmNlL1dlYktpdC9ndGsvZG9j
cy93ZWJraXRndGsudHlwZXMJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw3IEBACiAjaW5jbHVk
ZSA8d2Via2l0L3dlYmtpdC5oPgogd2Via2l0X2Rvd25sb2FkX2dldF90eXBlCiB3ZWJraXRfZmF2
aWNvbl9kYXRhYmFzZV9nZXRfdHlwZQord2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF90
eXBlCiB3ZWJraXRfZ2VvbG9jYXRpb25fcG9saWN5X2RlY2lzaW9uX2dldF90eXBlCiB3ZWJraXRf
aGl0X3Rlc3RfcmVzdWx0X2dldF90eXBlCiB3ZWJraXRfaWNvbl9kYXRhYmFzZV9nZXRfdHlwZQpJ
bmRleDogU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdHdlYnZpZXcuYwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0d2Vidmlldy5jCShyZXZpc2lvbiAxMjA4NjAp
CisrKyBTb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0d2Vidmlldy5jCSh3b3JraW5nIGNvcHkp
CkBAIC01MDYsNiArNTA2LDE4NiBAQCBzdGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF93ZWJfdmlld19m
dWxsc2NyCiAgICAgZ3RrX3dpZGdldF9kZXN0cm95KHdpbmRvdyk7CiB9CiAKK3N0YXRpYyBnYm9v
bGVhbiBjaGVja01pbWVUeXBlRm9yRmlsdGVyKEd0a0ZpbGVGaWx0ZXIqIGZpbHRlciwgY29uc3Qg
Z2NoYXIqIG1pbWVUeXBlKQoreworICAgIEd0a0ZpbGVGaWx0ZXJJbmZvIGZpbHRlcl9pbmZvOwor
ICAgIGZpbHRlcl9pbmZvLmNvbnRhaW5zID0gR1RLX0ZJTEVfRklMVEVSX01JTUVfVFlQRTsKKyAg
ICBmaWx0ZXJfaW5mby5taW1lX3R5cGUgPSBtaW1lVHlwZTsKKyAgICByZXR1cm4gZ3RrX2ZpbGVf
ZmlsdGVyX2ZpbHRlcihmaWx0ZXIsICZmaWx0ZXJfaW5mbyk7Cit9CisKK3N0YXRpYyBnYm9vbGVh
biBydW5GaWxlQ2hvb3NlckNiTm9NdWx0aXNlbE5vTWltZShXZWJLaXRXZWJWaWV3KiB3ZWJ2aWV3
LCBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QqIHJlcXVlc3QsIGdwb2ludGVyIGRhdGEpCit7Cisg
ICAgZ19hc3NlcnQoIXdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfc2VsZWN0X211bHRp
cGxlKHJlcXVlc3QpKTsKKworICAgIGNvbnN0IGdjaGFyKiBjb25zdCogbWltZVR5cGVzID0gd2Vi
a2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9taW1lX3R5cGVzKHJlcXVlc3QpOworICAgIGdf
YXNzZXJ0KCFtaW1lVHlwZXMpOworICAgIEd0a0ZpbGVGaWx0ZXIqIGZpbHRlciA9IHdlYmtpdF9m
aWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfbWltZV90eXBlc19maWx0ZXIocmVxdWVzdCk7CisgICAg
Z19hc3NlcnQoIWZpbHRlcik7CisKKyAgICBjb25zdCBnY2hhciogY29uc3QqIHNlbGVjdGVkRmls
ZXMgPSB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X3NlbGVjdGVkX2ZpbGVzKHJlcXVl
c3QpOworICAgIGdfYXNzZXJ0KCFzZWxlY3RlZEZpbGVzKTsKKworICAgIGdfbWFpbl9sb29wX3F1
aXQobG9vcCk7CisgICAgcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiBydW5GaWxl
Q2hvb3NlckNiTXVsdGlzZWxOb01pbWUoV2ViS2l0V2ViVmlldyogd2VidmlldywgV2ViS2l0Rmls
ZUNob29zZXJSZXF1ZXN0KiByZXF1ZXN0LCBncG9pbnRlciBkYXRhKQoreworICAgIGdfYXNzZXJ0
KHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfc2VsZWN0X211bHRpcGxlKHJlcXVlc3Qp
KTsKKworICAgIGNvbnN0IGdjaGFyKiBjb25zdCogbWltZVR5cGVzID0gd2Via2l0X2ZpbGVfY2hv
b3Nlcl9yZXF1ZXN0X2dldF9taW1lX3R5cGVzKHJlcXVlc3QpOworICAgIGdfYXNzZXJ0KCFtaW1l
VHlwZXMpOworICAgIEd0a0ZpbGVGaWx0ZXIqIGZpbHRlciA9IHdlYmtpdF9maWxlX2Nob29zZXJf
cmVxdWVzdF9nZXRfbWltZV90eXBlc19maWx0ZXIocmVxdWVzdCk7CisgICAgZ19hc3NlcnQoIWZp
bHRlcik7CisgICAgY29uc3QgZ2NoYXIqIGNvbnN0KiBzZWxlY3RlZEZpbGVzID0gd2Via2l0X2Zp
bGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9zZWxlY3RlZF9maWxlcyhyZXF1ZXN0KTsKKyAgICBnX2Fz
c2VydCghc2VsZWN0ZWRGaWxlcyk7CisKKyAgICAvLyBTZWxlY3Qgc29tZSBmaWxlcy4KKyAgICBj
b25zdCBnY2hhciogZmlsZXNUb1NlbGVjdFs0XSA9IHsgIi9mb28iLCAiL2Zvby9iYXIiLCAiL2Zv
by9iYXIvYmF6IiwgMCB9OworICAgIHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9zZWxlY3Rf
ZmlsZXMocmVxdWVzdCwgZmlsZXNUb1NlbGVjdCk7CisKKyAgICAvLyBDaGVjayB0aGUgZmlsZXMg
dGhhdCBoYXZlIGJlZW4ganVzdCBzZWxlY3RlZC4KKyAgICBzZWxlY3RlZEZpbGVzID0gd2Via2l0
X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9zZWxlY3RlZF9maWxlcyhyZXF1ZXN0KTsKKyAgICBn
X2Fzc2VydChzZWxlY3RlZEZpbGVzKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoc2VsZWN0ZWRGaWxl
c1swXSwgPT0sICIvZm9vIik7CisgICAgZ19hc3NlcnRfY21wc3RyKHNlbGVjdGVkRmlsZXNbMV0s
ID09LCAiL2Zvby9iYXIiKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoc2VsZWN0ZWRGaWxlc1syXSwg
PT0sICIvZm9vL2Jhci9iYXoiKTsKKyAgICBnX2Fzc2VydCghc2VsZWN0ZWRGaWxlc1szXSk7CisK
KyAgICBnX21haW5fbG9vcF9xdWl0KGxvb3ApOworICAgIHJldHVybiBUUlVFOworfQorCitzdGF0
aWMgZ2Jvb2xlYW4gcnVuRmlsZUNob29zZXJDYlNlbGVjdGlvblJldGFpbmVkKFdlYktpdFdlYlZp
ZXcqIHdlYnZpZXcsIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCogcmVxdWVzdCwgZ3BvaW50ZXIg
ZGF0YSkKK3sKKyAgICBjb25zdCBnY2hhciogY29uc3QqIHNlbGVjdGVkRmlsZXMgPSB3ZWJraXRf
ZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X3NlbGVjdGVkX2ZpbGVzKHJlcXVlc3QpOworICAgIGdf
YXNzZXJ0KHNlbGVjdGVkRmlsZXMpOworICAgIGdfYXNzZXJ0X2NtcHN0cihzZWxlY3RlZEZpbGVz
WzBdLCA9PSwgIi9mb28iKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoc2VsZWN0ZWRGaWxlc1sxXSwg
PT0sICIvZm9vL2JhciIpOworICAgIGdfYXNzZXJ0X2NtcHN0cihzZWxlY3RlZEZpbGVzWzJdLCA9
PSwgIi9mb28vYmFyL2JheiIpOworICAgIGdfYXNzZXJ0KCFzZWxlY3RlZEZpbGVzWzNdKTsKKwor
ICAgIGdfbWFpbl9sb29wX3F1aXQobG9vcCk7CisgICAgcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRp
YyBnYm9vbGVhbiBydW5GaWxlQ2hvb3NlckNiTm9NdWx0aXNlbEFjY2VwdFR5cGVzKFdlYktpdFdl
YlZpZXcqIHdlYnZpZXcsIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCogcmVxdWVzdCwgZ3BvaW50
ZXIgZGF0YSkKK3sKKyAgICBnX2Fzc2VydCghd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dl
dF9zZWxlY3RfbXVsdGlwbGUocmVxdWVzdCkpOworCisgICAgY29uc3QgZ2NoYXIqIGNvbnN0KiBt
aW1lVHlwZXMgPSB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X21pbWVfdHlwZXMocmVx
dWVzdCk7CisgICAgZ19hc3NlcnQobWltZVR5cGVzKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIobWlt
ZVR5cGVzWzBdLCA9PSwgImF1ZGlvLyoiKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIobWltZVR5cGVz
WzFdLCA9PSwgInZpZGVvLyoiKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIobWltZVR5cGVzWzJdLCA9
PSwgImltYWdlLyoiKTsKKyAgICBnX2Fzc2VydCghbWltZVR5cGVzWzNdKTsKKworICAgIEd0a0Zp
bGVGaWx0ZXIqIGZpbHRlciA9IHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfbWltZV90
eXBlc19maWx0ZXIocmVxdWVzdCk7CisgICAgZ19hc3NlcnQoR1RLX0lTX0ZJTEVfRklMVEVSKGZp
bHRlcikpOworICAgIGdfYXNzZXJ0KGNoZWNrTWltZVR5cGVGb3JGaWx0ZXIoZmlsdGVyLCAiYXVk
aW8vKiIpKTsKKyAgICBnX2Fzc2VydChjaGVja01pbWVUeXBlRm9yRmlsdGVyKGZpbHRlciwgInZp
ZGVvLyoiKSk7CisgICAgZ19hc3NlcnQoY2hlY2tNaW1lVHlwZUZvckZpbHRlcihmaWx0ZXIsICJp
bWFnZS8qIikpOworCisgICAgY29uc3QgZ2NoYXIqIGNvbnN0KiBzZWxlY3RlZEZpbGVzID0gd2Vi
a2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9zZWxlY3RlZF9maWxlcyhyZXF1ZXN0KTsKKyAg
ICBnX2Fzc2VydCghc2VsZWN0ZWRGaWxlcyk7CisKKyAgICBnX21haW5fbG9vcF9xdWl0KGxvb3Ap
OworICAgIHJldHVybiBUUlVFOworfQorCit2b2lkIGRvTW91c2VCdXR0b25FdmVudChHdGtXaWRn
ZXQqIHdpZGdldCwgR2RrRXZlbnRUeXBlIGV2ZW50VHlwZSwgaW50IHgsIGludCB5LCB1bnNpZ25l
ZCBpbnQgYnV0dG9uLCB1bnNpZ25lZCBpbnQgbW9kaWZpZXJzKQoreworICAgIGdfYXNzZXJ0KGd0
a193aWRnZXRfZ2V0X3JlYWxpemVkKHdpZGdldCkpOworCisgICAgR2RrRXZlbnQqIGV2ZW50ID0g
Z2RrX2V2ZW50X25ldyhldmVudFR5cGUpOworICAgIGV2ZW50LT5idXR0b24ud2luZG93ID0gZ3Rr
X3dpZGdldF9nZXRfd2luZG93KHdpZGdldCk7CisgICAgZ19vYmplY3RfcmVmKGV2ZW50LT5idXR0
b24ud2luZG93KTsKKworICAgIGV2ZW50LT5idXR0b24udGltZSA9IEdES19DVVJSRU5UX1RJTUU7
CisgICAgZXZlbnQtPmJ1dHRvbi54ID0geDsKKyAgICBldmVudC0+YnV0dG9uLnkgPSB5OworICAg
IGV2ZW50LT5idXR0b24uYXhlcyA9IDA7CisgICAgZXZlbnQtPmJ1dHRvbi5zdGF0ZSA9IG1vZGlm
aWVyczsKKyAgICBldmVudC0+YnV0dG9uLmJ1dHRvbiA9IGJ1dHRvbjsKKworICAgIGV2ZW50LT5i
dXR0b24uZGV2aWNlID0gZ2RrX2RldmljZV9tYW5hZ2VyX2dldF9jbGllbnRfcG9pbnRlcihnZGtf
ZGlzcGxheV9nZXRfZGV2aWNlX21hbmFnZXIoZ3RrX3dpZGdldF9nZXRfZGlzcGxheSh3aWRnZXQp
KSk7CisKKyAgICBpbnQgeFJvb3QsIHlSb290OworICAgIGdka193aW5kb3dfZ2V0X3Jvb3RfY29v
cmRzKGd0a193aWRnZXRfZ2V0X3dpbmRvdyh3aWRnZXQpLCB4LCB5LCAmeFJvb3QsICZ5Um9vdCk7
CisgICAgZXZlbnQtPmJ1dHRvbi54X3Jvb3QgPSB4Um9vdDsKKyAgICBldmVudC0+YnV0dG9uLnlf
cm9vdCA9IHlSb290OworICAgIGd0a19tYWluX2RvX2V2ZW50KGV2ZW50KTsKK30KKworc3RhdGlj
IHZvaWQgY2xpY2tNb3VzZUJ1dHRvbihHdGtXaWRnZXQqIHdpZGdldCwgaW50IHgsIGludCB5LCB1
bnNpZ25lZCBpbnQgYnV0dG9uLCB1bnNpZ25lZCBpbnQgbW9kaWZpZXJzKQoreworICAgIGRvTW91
c2VCdXR0b25FdmVudCh3aWRnZXQsIEdES19CVVRUT05fUFJFU1MsIHgsIHksIGJ1dHRvbiwgbW9k
aWZpZXJzKTsKKyAgICBkb01vdXNlQnV0dG9uRXZlbnQod2lkZ2V0LCBHREtfQlVUVE9OX1JFTEVB
U0UsIHgsIHksIGJ1dHRvbiwgbW9kaWZpZXJzKTsKK30KKworc3RhdGljIGdib29sZWFuIGNsaWNr
TW91c2VCdXR0b25BbmRXYWl0Rm9yRmlsZUNob29zZXJSZXF1ZXN0KFdlYktpdFdlYlZpZXcqIHdl
YlZpZXcpCit7CisgICAgY2xpY2tNb3VzZUJ1dHRvbihHVEtfV0lER0VUKHdlYlZpZXcpLCA1LCA1
LCAxLCAwKTsKKyAgICByZXR1cm4gVFJVRTsKK30KKworc3RhdGljIHZvaWQgdGVzdF93ZWJraXRf
d2ViX3ZpZXdfZmlsZV9jaG9vc2VyKCkKK3sKKyAgICBjb25zdCBnY2hhciogaHRtbEZvcm1hdEJh
c2UgPSAiPGh0bWw+PGJvZHk+IgorICAgICAgICAgICAgIjxpbnB1dCBzdHlsZT0ncG9zaXRpb246
YWJzb2x1dGU7bGVmdDowO3RvcDowO21hcmdpbjowO3BhZGRpbmc6MCcgdHlwZT0nZmlsZScgJXMv
PiIKKyAgICAgICAgICAgICI8L2JvZHk+PC9odG1sPiI7CisKKyAgICBHdGtXaWRnZXQqIHdpbmRv
dyA9IGd0a193aW5kb3dfbmV3KEdUS19XSU5ET1dfVE9QTEVWRUwpOworICAgIEd0a1dpZGdldCog
d2ViVmlldyA9IHdlYmtpdF93ZWJfdmlld19uZXcoKTsKKyAgICBndGtfY29udGFpbmVyX2FkZChH
VEtfQ09OVEFJTkVSKHdpbmRvdyksIHdlYlZpZXcpOworICAgIGd0a193aWRnZXRfc2hvd19hbGwo
d2luZG93KTsKKworICAgIGxvb3AgPSBnX21haW5fbG9vcF9uZXcoTlVMTCwgVFJVRSk7CisKKyAg
ICAvLyBNdWx0aXBsZSBzZWxlY3Rpb25zIG5vdCBhbGxvd2VkLCBubyBNSU1FIGZpbHRlcmluZy4K
KyAgICBndWxvbmcgaGFuZGxlciA9IGdfc2lnbmFsX2Nvbm5lY3Qod2ViVmlldywgInJ1bi1maWxl
LWNob29zZXIiLCBHX0NBTExCQUNLKHJ1bkZpbGVDaG9vc2VyQ2JOb011bHRpc2VsTm9NaW1lKSwg
TlVMTCk7CisgICAgZ2NoYXIqIGh0bWxGb3JtYXQgPSBnX3N0cmR1cF9wcmludGYoaHRtbEZvcm1h
dEJhc2UsICIiKTsKKyAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9zdHJpbmcoV0VCS0lUX1dFQl9W
SUVXKHdlYlZpZXcpLCBodG1sRm9ybWF0LCBOVUxMLCBOVUxMLCBOVUxMKTsKKyAgICBnX2ZyZWUo
aHRtbEZvcm1hdCk7CisKKyAgICBnX3RpbWVvdXRfYWRkKDEwMCwgKEdTb3VyY2VGdW5jKSBjbGlj
a01vdXNlQnV0dG9uQW5kV2FpdEZvckZpbGVDaG9vc2VyUmVxdWVzdCwgV0VCS0lUX1dFQl9WSUVX
KHdlYlZpZXcpKTsKKyAgICBnX21haW5fbG9vcF9ydW4obG9vcCk7CisKKyAgICBnX3NpZ25hbF9o
YW5kbGVyX2Rpc2Nvbm5lY3Qod2ViVmlldywgaGFuZGxlcik7CisKKyAgICAvLyBNdWx0aXBsZSBz
ZWxlY3Rpb25zIGFsbG93ZWQsIG5vIE1JTUUgZmlsdGVyaW5nLCBzb21lIHByZS1zZWxlY3RlZCBm
aWxlcy4KKyAgICBoYW5kbGVyID0gZ19zaWduYWxfY29ubmVjdCh3ZWJWaWV3LCAicnVuLWZpbGUt
Y2hvb3NlciIsIEdfQ0FMTEJBQ0socnVuRmlsZUNob29zZXJDYk11bHRpc2VsTm9NaW1lKSwgTlVM
TCk7CisgICAgaHRtbEZvcm1hdCA9IGdfc3RyZHVwX3ByaW50ZihodG1sRm9ybWF0QmFzZSwgIm11
bHRpcGxlIik7CisgICAgd2Via2l0X3dlYl92aWV3X2xvYWRfc3RyaW5nKFdFQktJVF9XRUJfVklF
Vyh3ZWJWaWV3KSwgaHRtbEZvcm1hdCwgTlVMTCwgTlVMTCwgTlVMTCk7CisgICAgZ19mcmVlKGh0
bWxGb3JtYXQpOworCisgICAgZ190aW1lb3V0X2FkZCgxMDAsIChHU291cmNlRnVuYykgY2xpY2tN
b3VzZUJ1dHRvbkFuZFdhaXRGb3JGaWxlQ2hvb3NlclJlcXVlc3QsIFdFQktJVF9XRUJfVklFVyh3
ZWJWaWV3KSk7CisgICAgZ19tYWluX2xvb3BfcnVuKGxvb3ApOworCisgICAgZ19zaWduYWxfaGFu
ZGxlcl9kaXNjb25uZWN0KHdlYlZpZXcsIGhhbmRsZXIpOworCisgICAgLy8gUGVyZm9ybSBhbm90
aGVyIHJlcXVlc3QgdG8gY2hlY2sgaWYgdGhlIGxpc3Qgb2YgZmlsZXMgc2VsZWN0ZWQKKyAgICAv
LyBpbiB0aGUgcHJldmlvdXMgc3RlcCBhcHBlYXJzIG5vdyBhcyBwYXJ0IG9mIHRoZSBuZXcgcmVx
dWVzdC4KKyAgICBoYW5kbGVyID0gZ19zaWduYWxfY29ubmVjdCh3ZWJWaWV3LCAicnVuLWZpbGUt
Y2hvb3NlciIsIEdfQ0FMTEJBQ0socnVuRmlsZUNob29zZXJDYlNlbGVjdGlvblJldGFpbmVkKSwg
TlVMTCk7CisgICAgZ190aW1lb3V0X2FkZCgxMDAsIChHU291cmNlRnVuYykgY2xpY2tNb3VzZUJ1
dHRvbkFuZFdhaXRGb3JGaWxlQ2hvb3NlclJlcXVlc3QsIFdFQktJVF9XRUJfVklFVyh3ZWJWaWV3
KSk7CisgICAgZ19tYWluX2xvb3BfcnVuKGxvb3ApOworCisgICAgZ19zaWduYWxfaGFuZGxlcl9k
aXNjb25uZWN0KHdlYlZpZXcsIGhhbmRsZXIpOworCisgICAgLy8gTXVsdGlwbGUgc2VsZWN0aW9u
cyBub3QgYWxsb3dlZCwgb25seSBhY2NlcHQgaW1hZ2VzLCBhdWRpbyBhbmQgdmlkZW8gZmlsZXMu
CisgICAgaGFuZGxlciA9IGdfc2lnbmFsX2Nvbm5lY3Qod2ViVmlldywgInJ1bi1maWxlLWNob29z
ZXIiLCBHX0NBTExCQUNLKHJ1bkZpbGVDaG9vc2VyQ2JOb011bHRpc2VsQWNjZXB0VHlwZXMpLCBO
VUxMKTsKKyAgICBodG1sRm9ybWF0ID0gZ19zdHJkdXBfcHJpbnRmKGh0bWxGb3JtYXRCYXNlLCAi
YWNjZXB0PSdhdWRpby8qLHZpZGVvLyosaW1hZ2UvKiciKTsKKyAgICB3ZWJraXRfd2ViX3ZpZXdf
bG9hZF9zdHJpbmcoV0VCS0lUX1dFQl9WSUVXKHdlYlZpZXcpLCBodG1sRm9ybWF0LCBOVUxMLCBO
VUxMLCBOVUxMKTsKKyAgICBnX2ZyZWUoaHRtbEZvcm1hdCk7CisKKyAgICBnX3RpbWVvdXRfYWRk
KDEwMCwgKEdTb3VyY2VGdW5jKSBjbGlja01vdXNlQnV0dG9uQW5kV2FpdEZvckZpbGVDaG9vc2Vy
UmVxdWVzdCwgV0VCS0lUX1dFQl9WSUVXKHdlYlZpZXcpKTsKKyAgICBnX21haW5fbG9vcF9ydW4o
bG9vcCk7CisKKyAgICBnX3NpZ25hbF9oYW5kbGVyX2Rpc2Nvbm5lY3Qod2ViVmlldywgaGFuZGxl
cik7CisgICAgZ3RrX3dpZGdldF9kZXN0cm95KHdpbmRvdyk7Cit9CisKIGludCBtYWluKGludCBh
cmdjLCBjaGFyKiogYXJndikKIHsKICAgICBTb3VwU2VydmVyKiBzZXJ2ZXI7CkBAIC01MzcsNiAr
NzE3LDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQogICAgIGdfdGVzdF9hZGRf
ZnVuYygiL3dlYmtpdC93ZWJ2aWV3L3dlYnZpZXctZG9lcy1ub3Qtc3RlYWwtZm9jdXMiLCB0ZXN0
X3dlYmtpdF93ZWJfdmlld19kb2VzX25vdF9zdGVhbF9mb2N1cyk7CiAgICAgZ190ZXN0X2FkZF9k
YXRhX2Z1bmMoIi93ZWJraXQvd2Vidmlldy9mdWxsc2NyZWVuIiwgR0lOVF9UT19QT0lOVEVSKEZB
TFNFKSwgdGVzdF93ZWJraXRfd2ViX3ZpZXdfZnVsbHNjcmVlbik7CiAgICAgZ190ZXN0X2FkZF9k
YXRhX2Z1bmMoIi93ZWJraXQvd2Vidmlldy9mdWxsc2NyZWVuLWJsb2NrZWQiLCBHSU5UX1RPX1BP
SU5URVIoVFJVRSksIHRlc3Rfd2Via2l0X3dlYl92aWV3X2Z1bGxzY3JlZW4pOworICAgIGdfdGVz
dF9hZGRfZnVuYygiL3dlYmtpdC93ZWJ2aWV3L2ZpbGUtY2hvb3NlciIsIHRlc3Rfd2Via2l0X3dl
Yl92aWV3X2ZpbGVfY2hvb3Nlcik7CiAKICAgICByZXR1cm4gZ190ZXN0X3J1biAoKTsKIH0KSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0LmgJKHJldmlzaW9uIDEyMDg2MCkKKysrIFNvdXJj
ZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXQuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgs
NyBAQAogI2luY2x1ZGUgPHdlYmtpdC93ZWJraXRkb3dubG9hZC5oPgogI2luY2x1ZGUgPHdlYmtp
dC93ZWJraXRlbnVtdHlwZXMuaD4KICNpbmNsdWRlIDx3ZWJraXQvd2Via2l0ZmF2aWNvbmRhdGFi
YXNlLmg+CisjaW5jbHVkZSA8d2Via2l0L3dlYmtpdGZpbGVjaG9vc2VycmVxdWVzdC5oPgogI2lu
Y2x1ZGUgPHdlYmtpdC93ZWJraXRnZW9sb2NhdGlvbnBvbGljeWRlY2lzaW9uLmg+CiAjaW5jbHVk
ZSA8d2Via2l0L3dlYmtpdGdsb2JhbHMuaD4KICNpbmNsdWRlIDx3ZWJraXQvd2Via2l0aGl0dGVz
dHJlc3VsdC5oPgpJbmRleDogU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGZpbGVjaG9v
c2VycmVxdWVzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dl
YmtpdGZpbGVjaG9vc2VycmVxdWVzdC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViS2l0
L2d0ay93ZWJraXQvd2Via2l0ZmlsZWNob29zZXJyZXF1ZXN0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDM2NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
KyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAid2Via2l0ZmlsZWNob29zZXJyZXF1ZXN0Lmgi
CisKKyNpbmNsdWRlICJGaWxlQ2hvb3Nlci5oIgorI2luY2x1ZGUgIkZpbGVTeXN0ZW0uaCIKKyNp
bmNsdWRlICJ3ZWJraXRmaWxlY2hvb3NlcnJlcXVlc3Rwcml2YXRlLmgiCisjaW5jbHVkZSAid2Vi
a2l0Z2xvYmFsc3ByaXZhdGUuaCIKKyNpbmNsdWRlIDxnbGliL2dpMThuLWxpYi5oPgorI2luY2x1
ZGUgPHd0Zi9nb2JqZWN0L0dPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRy
Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCit1c2luZyBuYW1lc3BhY2UgV2Vi
Q29yZTsKKworLyoqCisgKiBTRUNUSU9OOndlYmtpdGZpbGVjaG9vc2VycmVxdWVzdAorICogQFNo
b3J0X2Rlc2NyaXB0aW9uOiBBIHJlcXVlc3QgdG8gb3BlbiBhIGZpbGUgY2hvb3NlcgorICogQFRp
dGxlOiBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QKKyAqIEBTZWVfYWxzbzogI1dlYktpdFdlYlZp
ZXcKKyAqCisgKiBXaGVuZXZlciB0aGUgdXNlciBpbnRlcmFjdHMgd2l0aCBhbiAmbHQ7aW5wdXQg
dHlwZT0nZmlsZScgLyZndDsKKyAqIEhUTUwgZWxlbWVudCwgV2ViS2l0IHdpbGwgbmVlZCB0byBz
aG93IGEgZGlhbG9nIHRvIGNob29zZSBvbmUgb3IKKyAqIG1vcmUgZmlsZXMgdG8gYmUgdXBsb2Fk
ZWQgdG8gdGhlIHNlcnZlciBhbG9uZyB3aXRoIHRoZSByZXN0IG9mIHRoZQorICogZm9ybSBkYXRh
LiBGb3IgdGhhdCB0byBoYXBwZW4gaW4gYSBnZW5lcmFsIHdheSwgaW5zdGVhZCBvZiBqdXN0Cisg
KiBvcGVuaW5nIGEgI0d0a0ZpbGVDaG9vc2VyRGlhbG9nICh3aGljaCBtaWdodCBiZSBub3QgZGVz
aXJhYmxlIGluCisgKiBzb21lIGNhc2VzLCBzdWNoIGFzIHdoZW4gYW4gZW1iZWRkaW5nIGFwcGxp
Y2F0aW9ucyBwcmVmZXJzIHRvIHVzZQorICogaXRzIG93biBmaWxlIGNob29zZXIgZGlhbG9nKSwg
V2ViS2l0IHdpbGwgZmlyZSB0aGUKKyAqICNXZWJLaXRXZWJWaWV3OjpydW4tZmlsZS1jaG9vc2Vy
IHNpZ25hbCB3aXRoIGEKKyAqICNXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3Qgb2JqZWN0LCB3aGlj
aCB3aWxsIGFsbG93IHRoZSBjbGllbnQKKyAqIGFwcGxpY2F0aW9uIHRvIHNwZWNpZnkgdGhlIGZp
bGVzIHRvIGJlIHNlbGVjdGVkLCB0byBpbnNwZWN0IHRoZQorICogZGV0YWlscyBvZiB0aGUgcmVx
dWVzdCAoZS5nLiBpZiBtdWx0aXBsZSBzZWxlY3Rpb24gc2hvdWxkIGJlCisgKiBhbGxvd2VkKSBh
bmQgdG8gY2FuY2VsIHRoZSByZXF1ZXN0LCBpbiBjYXNlIG5vdGhpbmcgd2FzIHNlbGVjdGVkLgor
ICoKKyAqIEluIGNhc2UgdGhlIGNsaWVudCBhcHBsaWNhdGlvbiBkb2VzIG5vdCB3aXNoIHRvIGhh
bmRsZSB0aGlzIHNpZ25hbCwKKyAqIFdlYktpdCB3aWxsIHByb3ZpZGUgYSBkZWZhdWx0IGhhbmRs
ZXIgd2hpY2ggd2lsbCBhc3luY2hyb25vdXNseSBydW4KKyAqIGEgcmVndWxhciAjR3RrRmlsZUNo
b29zZXJEaWFsb2cgZm9yIHRoZSB1c2VyIHRvIGludGVyYWN0IHdpdGguCisgKi8KK0dfREVGSU5F
X1RZUEUoV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0LCB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVl
c3QsIEdfVFlQRV9PQkpFQ1QpCisKK3N0cnVjdCBfV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0UHJp
dmF0ZSB7CisgICAgUmVmUHRyPEZpbGVDaG9vc2VyPiBjaG9vc2VyOworICAgIEdSZWZQdHI8R3Rr
RmlsZUZpbHRlcj4gZmlsdGVyOworICAgIEdSZWZQdHI8R1B0ckFycmF5PiBtaW1lVHlwZXM7Cisg
ICAgR1JlZlB0cjxHUHRyQXJyYXk+IHNlbGVjdGVkRmlsZXM7Cit9OworCitlbnVtIHsKKyAgICBQ
Uk9QXzAsCisgICAgUFJPUF9GSUxURVIsCisgICAgUFJPUF9NSU1FX1RZUEVTLAorICAgIFBST1Bf
U0VMRUNUX01VTFRJUExFLAorICAgIFBST1BfU0VMRUNURURfRklMRVMsCit9OworCitzdGF0aWMg
dm9pZCB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfaW5pdChXZWJLaXRGaWxlQ2hvb3NlclJl
cXVlc3QqIHJlcXVlc3QpCit7CisgICAgcmVxdWVzdC0+cHJpdiA9IEdfVFlQRV9JTlNUQU5DRV9H
RVRfUFJJVkFURShyZXF1ZXN0LCBXRUJLSVRfVFlQRV9GSUxFX0NIT09TRVJfUkVRVUVTVCwgV2Vi
S2l0RmlsZUNob29zZXJSZXF1ZXN0UHJpdmF0ZSk7CisgICAgbmV3IChyZXF1ZXN0LT5wcml2KSBX
ZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3RQcml2YXRlKCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtp
dF9maWxlX2Nob29zZXJfcmVxdWVzdF9maW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCit7CisgICAg
V2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0KiByZXF1ZXN0ID0gV0VCS0lUX0ZJTEVfQ0hPT1NFUl9S
RVFVRVNUKG9iamVjdCk7CisKKyAgICByZXF1ZXN0LT5wcml2LT5+V2ViS2l0RmlsZUNob29zZXJS
ZXF1ZXN0UHJpdmF0ZSgpOworICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9maWxlX2Nob29zZXJf
cmVxdWVzdF9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShvYmplY3QpOworfQorCitzdGF0aWMgdm9p
ZCB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVj
dCwgZ3VpbnQgcHJvcElkLCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwYXJhbVNwZWMpCit7
CisgICAgV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0KiByZXF1ZXN0ID0gV0VCS0lUX0ZJTEVfQ0hP
T1NFUl9SRVFVRVNUKG9iamVjdCk7CisgICAgc3dpdGNoIChwcm9wSWQpIHsKKyAgICBjYXNlIFBS
T1BfRklMVEVSOgorICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIHdlYmtpdF9maWxl
X2Nob29zZXJfcmVxdWVzdF9nZXRfbWltZV90eXBlc19maWx0ZXIocmVxdWVzdCkpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIFBST1BfTUlNRV9UWVBFUzoKKyAgICAgICAgZ192YWx1ZV9zZXRf
Ym94ZWQodmFsdWUsIHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfbWltZV90eXBlcyhy
ZXF1ZXN0KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9TRUxFQ1RfTVVMVElQTEU6
CisgICAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4odmFsdWUsIHdlYmtpdF9maWxlX2Nob29zZXJf
cmVxdWVzdF9nZXRfc2VsZWN0X211bHRpcGxlKHJlcXVlc3QpKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBQUk9QX1NFTEVDVEVEX0ZJTEVTOgorICAgICAgICBnX3ZhbHVlX3NldF9ib3hlZCh2
YWx1ZSwgd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9zZWxlY3RlZF9maWxlcyhyZXF1
ZXN0KSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dB
Uk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BJZCwgcGFyYW1TcGVjKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZmlsZV9jaG9vc2VyX3Jl
cXVlc3RfY2xhc3NfaW5pdChXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3RDbGFzcyogcmVxdWVzdENs
YXNzKQoreworICAgIEdPYmplY3RDbGFzcyogb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhy
ZXF1ZXN0Q2xhc3MpOworICAgIG9iamVjdENsYXNzLT5maW5hbGl6ZSA9IHdlYmtpdF9maWxlX2No
b29zZXJfcmVxdWVzdF9maW5hbGl6ZTsKKyAgICBvYmplY3RDbGFzcy0+Z2V0X3Byb3BlcnR5ID0g
d2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9wcm9wZXJ0eTsKKyAgICBnX3R5cGVfY2xh
c3NfYWRkX3ByaXZhdGUocmVxdWVzdENsYXNzLCBzaXplb2YoV2ViS2l0RmlsZUNob29zZXJSZXF1
ZXN0UHJpdmF0ZSkpOworCisgICAgLyoqCisgICAgICogV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0
OmZpbHRlcjoKKyAgICAgKgorICAgICAqIFRoZSBmaWx0ZXIgY3VycmVudGx5IGFzc29jaWF0ZWQg
d2l0aCB0aGUgcmVxdWVzdC4gU2VlCisgICAgICogd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0
X2dldF9taW1lX3R5cGVzX2ZpbHRlcigpIGZvciBtb3JlCisgICAgICogZGV0YWlscy4KKyAgICAg
KgorICAgICAqIFNpbmNlOiAxLjEwCisgICAgICovCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFs
bF9wcm9wZXJ0eShvYmplY3RDbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFBST1BfRklMVEVSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19w
YXJhbV9zcGVjX29iamVjdCgiZmlsdGVyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF8oIk1JTUUgdHlwZXMgZmlsdGVyIiksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJUaGUgZmls
dGVyIGN1cnJlbnRseSBhc3NvY2lhdGVkIHdpdGggdGhlIHJlcXVlc3QiKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdUS19UWVBFX0ZJTEVf
RklMVEVSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisgICAgLyoqCisgICAgICogV2ViS2l0Rmls
ZUNob29zZXJSZXF1ZXN0Om1pbWUtdHlwZXM6CisgICAgICoKKyAgICAgKiBBICVOVUxMLXRlcm1p
bmF0ZWQgYXJyYXkgb2Ygc3RyaW5ncyBjb250YWluaW5nIHRoZSBsaXN0IG9mIE1JTUUKKyAgICAg
KiB0eXBlcyB0aGUgZmlsZSBjaG9vc2VyIGRpYWxvZyBzaG91bGQgaGFuZGxlLiBTZWUKKyAgICAg
KiB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X21pbWVfdHlwZXMoKSBmb3IgbW9yZSBk
ZXRhaWxzLgorICAgICAqCisgICAgICogU2luY2U6IDEuMTAKKyAgICAgKi8KKyAgICBnX29iamVj
dF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KG9iamVjdENsYXNzLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgUFJPUF9NSU1FX1RZUEVTLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVjX2JveGVkKCJtaW1lLXR5cGVzIiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIk1JTUUgdHlw
ZXMiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF8oIlRoZSBsaXN0IG9mIE1JTUUgdHlwZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSByZXF1ZXN0
IiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBHX1RZUEVfU1RSViwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOyAgICAvKioKKyAgICAgKiBXZWJL
aXRGaWxlQ2hvb3NlclJlcXVlc3Q6c2VsZWN0LW11bHRpcGxlOgorICAgICAqCisgICAgICogV2hl
dGhlciB0aGUgZmlsZSBjaG9vc2VyIHNob3VsZCBhbGxvdyBzZWxlY3RpbmcgbXVsdGlwbGUKKyAg
ICAgKiBmaWxlcy4gU2VlCisgICAgICogd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9z
ZWxlY3RfbXVsdGlwbGUoKSBmb3IKKyAgICAgKiBtb3JlIGRldGFpbHMuCisgICAgICoKKyAgICAg
KiBTaW5jZTogMS4xMAorICAgICAqLworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVy
dHkob2JqZWN0Q2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9Q
X1NFTEVDVF9NVUxUSVBMRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdf
cGFyYW1fc3BlY19ib29sZWFuKCJzZWxlY3QtbXVsdGlwbGUiLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIlNlbGVjdCBtdWx0aXBsZSBm
aWxlcyIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF8oIldoZXRoZXIgdGhlIGZpbGUgY2hvb3NlciBzaG91bGQgYWxsb3cgc2VsZWN0aW5n
IG11bHRpcGxlIGZpbGVzIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgRkFMU0UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisgICAgLyoq
CisgICAgICogV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0OnNlbGVjdGVkLWZpbGVzOgorICAgICAq
CisgICAgICogQSAlTlVMTC10ZXJtaW5hdGVkIGFycmF5IG9mIHN0cmluZ3MgY29udGFpbmluZyB0
aGUgbGlzdCBvZgorICAgICAqIHNlbGVjdGVkIGZpbGVzIGFzc29jaWF0ZWQgdG8gdGhlIGN1cnJl
bnQgcmVxdWVzdC4gU2VlCisgICAgICogd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9z
ZWxlY3RlZF9maWxlcygpIGZvciBtb3JlIGRldGFpbHMuCisgICAgICoKKyAgICAgKiBTaW5jZTog
MS4xMAorICAgICAqLworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkob2JqZWN0
Q2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9QX1NFTEVDVEVE
X0ZJTEVTLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVj
X2JveGVkKCJzZWxlY3RlZC1maWxlcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfKCJTZWxlY3RlZCBmaWxlcyIpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiVGhlIGxpc3Qgb2Yg
c2VsZWN0ZWQgZmlsZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSByZXF1ZXN0IiksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHX1RZUEVfU1RSViwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdF
QktJVF9QQVJBTV9SRUFEQUJMRSkpOworfQorCitXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QqIHdl
YmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9jcmVhdGUoUGFzc1JlZlB0cjxGaWxlQ2hvb3Nlcj4g
Y2hvb3NlcikKK3sKKyAgICBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QqIHJlcXVlc3QgPSBXRUJL
SVRfRklMRV9DSE9PU0VSX1JFUVVFU1QoZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX0ZJTEVfQ0hP
T1NFUl9SRVFVRVNULCBOVUxMKSk7CisgICAgcmVxdWVzdC0+cHJpdi0+Y2hvb3NlciA9IGNob29z
ZXI7CisgICAgcmV0dXJuIHJlcXVlc3Q7Cit9CisKKy8qKgorICogd2Via2l0X2ZpbGVfY2hvb3Nl
cl9yZXF1ZXN0X2dldF9taW1lX3R5cGVzOgorICogQHJlcXVlc3Q6IGEgI1dlYktpdEZpbGVDaG9v
c2VyUmVxdWVzdAorICoKKyAqIEdldCB0aGUgbGlzdCBvZiBNSU1FIHR5cGVzIHRoZSBmaWxlIGNo
b29zZXIgZGlhbG9nIHNob3VsZCBoYW5kbGUsCisgKiBpbiB0aGUgZm9ybWF0IHNwZWNpZmllZCBp
biBSRkMgMjA0NiBmb3IgIm1lZGlhIHR5cGVzIi4gSXRzIGNvbnRlbnRzCisgKiBkZXBlbmQgb24g
dGhlIHZhbHVlIG9mIHRoZSAnYWNjZXB0JyBhdHRyaWJ1dGUgZm9yIEhUTUwgaW5wdXQKKyAqIGVs
ZW1lbnRzLiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBub3JtYWxseSBiZSBjYWxsZWQgYmVmb3JlIHBy
ZXNlbnRpbmcKKyAqIHRoZSBmaWxlIGNob29zZXIgZGlhbG9nIHRvIHRoZSB1c2VyLCB0byBkZWNp
ZGUgd2hldGhlciB0byBhbGxvdyB0aGUKKyAqIHVzZXIgdG8gc2VsZWN0IG11bHRpcGxlIGZpbGVz
IGF0IG9uY2Ugb3Igb25seSBvbmUuCisgKgorICogUmV0dXJuczogKGFycmF5IHplcm8tdGVybWlu
YXRlZD0xKSAodHJhbnNmZXIgbm9uZSk6IGEKKyAqICVOVUxMLXRlcm1pbmF0ZWQgYXJyYXkgb2Yg
c3RyaW5ncyBpZiBhIGxpc3Qgb2YgYWNjZXB0ZWQgTUlNRSB0eXBlcworICogaXMgZGVmaW5lZCBv
ciAlTlVMTCBvdGhlcndpc2UsIG1lYW5pbmcgdGhhdCBhbnkgTUlNRSB0eXBlIHNob3VsZCBiZQor
ICogYWNjZXB0ZWQuIFRoaXMgYXJyYXkgYW5kIGl0cyBjb250ZW50cyBhcmUgb3duZWQgYnkgV2Vi
S2l0R1RLKyBhbmQKKyAqIHNob3VsZCBub3QgYmUgbW9kaWZpZWQgb3IgZnJlZWQuCisgKgorICog
U2luY2U6IDEuMTAKKyAqLworY29uc3QgZ2NoYXIqIGNvbnN0KiB3ZWJraXRfZmlsZV9jaG9vc2Vy
X3JlcXVlc3RfZ2V0X21pbWVfdHlwZXMoV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0KiByZXF1ZXN0
KQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19GSUxFX0NIT09TRVJfUkVR
VUVTVChyZXF1ZXN0KSwgMCk7CisgICAgaWYgKHJlcXVlc3QtPnByaXYtPm1pbWVUeXBlcykKKyAg
ICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Z2NoYXIqKj4ocmVxdWVzdC0+cHJpdi0+bWlt
ZVR5cGVzLT5wZGF0YSk7CisKKyAgICBGaWxlQ2hvb3NlclNldHRpbmdzIHNldHRpbmdzID0gcmVx
dWVzdC0+cHJpdi0+Y2hvb3Nlci0+c2V0dGluZ3MoKTsKKyAgICBzaXplX3QgbnVtT2ZNaW1lVHlw
ZXMgPSBzZXR0aW5ncy5hY2NlcHRNSU1FVHlwZXMuc2l6ZSgpOworICAgIGlmICghbnVtT2ZNaW1l
VHlwZXMpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmVxdWVzdC0+cHJpdi0+bWltZVR5cGVz
ID0gYWRvcHRHUmVmKGdfcHRyX2FycmF5X25ld193aXRoX2ZyZWVfZnVuYyhnX2ZyZWUpKTsKKyAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bU9mTWltZVR5cGVzOyArK2kpIHsKKyAgICAgICAg
U3RyaW5nIG1pbWVUeXBlU3RyaW5nID0gc2V0dGluZ3MuYWNjZXB0TUlNRVR5cGVzW2ldOworICAg
ICAgICBpZiAobWltZVR5cGVTdHJpbmcuaXNFbXB0eSgpKQorICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgIGdfcHRyX2FycmF5X2FkZChyZXF1ZXN0LT5wcml2LT5taW1lVHlwZXMuZ2V0KCks
IGdfc3RyZHVwKG1pbWVUeXBlU3RyaW5nLnV0ZjgoKS5kYXRhKCkpKTsKKyAgICB9CisgICAgZ19w
dHJfYXJyYXlfYWRkKHJlcXVlc3QtPnByaXYtPm1pbWVUeXBlcy5nZXQoKSwgMCk7CisKKyAgICBy
ZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxnY2hhcioqPihyZXF1ZXN0LT5wcml2LT5taW1lVHlwZXMt
PnBkYXRhKTsKK30KKworLyoqCisgKiB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X21p
bWVfdHlwZXNfZmlsdGVyOgorICogQHJlcXVlc3Q6IGEgI1dlYktpdEZpbGVDaG9vc2VyUmVxdWVz
dAorICoKKyAqIEdldCB0aGUgZmlsdGVyIGN1cnJlbnRseSBhc3NvY2lhdGVkIHdpdGggdGhlIHJl
cXVlc3QsIHJlYWR5IHRvIGJlCisgKiB1c2VkIGJ5ICNHdGtGaWxlQ2hvb3Nlci4gVGhpcyBmdW5j
dGlvbiBzaG91bGQgbm9ybWFsbHkgYmUgY2FsbGVkCisgKiBiZWZvcmUgcHJlc2VudGluZyB0aGUg
ZmlsZSBjaG9vc2VyIGRpYWxvZyB0byB0aGUgdXNlciwgdG8gZGVjaWRlCisgKiB3aGV0aGVyIHRv
IGFwcGx5IGEgZmlsdGVyIHNvIHRoZSB1c2VyIHdvdWxkIG5vdCBiZSBhbGxvd2VkIHRvCisgKiBz
ZWxlY3QgZmlsZXMgd2l0aCBvdGhlciBNSU1FIHR5cGVzLgorICoKKyAqIFNlZSB3ZWJraXRfZmls
ZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X21pbWVfdHlwZXMoKSBpZiB5b3UgYXJlCisgKiBpbnRlcmVz
dGVkIGluIGdldHRpbmcgdGhlIGxpc3Qgb2YgYWNjZXB0ZWQgTUlNRSB0eXBlcy4KKyAqCisgKiBS
ZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6IGEgI0d0a0ZpbGVGaWx0ZXIgaWYgYSBsaXN0IG9mIGFj
Y2VwdGVkCisgKiBNSU1FIHR5cGVzIGlzIGRlZmluZWQgb3IgJU5VTEwgb3RoZXJ3aXNlLiBUaGUg
cmV0dXJuZWQgb2JqZWN0IGlzCisgKiBvd25lZCBieSBXZWJLaXRHVEsrIHNob3VsZCBub3QgYmUg
bW9kaWZpZWQgb3IgZnJlZWQuCisgKgorICogU2luY2U6IDEuMTAKKyAqLworR3RrRmlsZUZpbHRl
ciogd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9taW1lX3R5cGVzX2ZpbHRlcihXZWJL
aXRGaWxlQ2hvb3NlclJlcXVlc3QqIHJlcXVlc3QpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwoV0VCS0lUX0lTX0ZJTEVfQ0hPT1NFUl9SRVFVRVNUKHJlcXVlc3QpLCAwKTsKKyAgICBpZiAo
cmVxdWVzdC0+cHJpdi0+ZmlsdGVyKQorICAgICAgICByZXR1cm4gcmVxdWVzdC0+cHJpdi0+Zmls
dGVyLmdldCgpOworCisgICAgRmlsZUNob29zZXJTZXR0aW5ncyBzZXR0aW5ncyA9IHJlcXVlc3Qt
PnByaXYtPmNob29zZXItPnNldHRpbmdzKCk7CisgICAgc2l6ZV90IG51bU9mTWltZVR5cGVzID0g
c2V0dGluZ3MuYWNjZXB0TUlNRVR5cGVzLnNpemUoKTsKKyAgICBpZiAoIW51bU9mTWltZVR5cGVz
KQorICAgICAgICByZXR1cm4gMDsKKworICAgIC8vIERvIG5vdCB1c2UgYWRvcHRHUmVmIGhlcmUs
IHNpbmNlIHdlIHdhbnQgdG8gc2luayB0aGUgZmxvYXRpbmcKKyAgICAvLyByZWZlcmVuY2UgZm9y
IHRoZSBuZXcgaW5zdGFuY2Ugb2YgR3RrRmlsZUZpbHRlciwgc28gd2UgbWFrZQorICAgIC8vIHN1
cmUgd2Uga2VlcCB0aGUgb3duZXJzaGlwIGR1cmluZyB0aGUgbGlmZXRpbWUgb2YgdGhlIHJlcXVl
c3QuCisgICAgcmVxdWVzdC0+cHJpdi0+ZmlsdGVyID0gZ3RrX2ZpbGVfZmlsdGVyX25ldygpOwor
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtT2ZNaW1lVHlwZXM7ICsraSkgeworICAgICAg
ICBTdHJpbmcgbWltZVR5cGVTdHJpbmcgPSBzZXR0aW5ncy5hY2NlcHRNSU1FVHlwZXNbaV07Cisg
ICAgICAgIGlmIChtaW1lVHlwZVN0cmluZy5pc0VtcHR5KCkpCisgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgZ3RrX2ZpbGVfZmlsdGVyX2FkZF9taW1lX3R5cGUocmVxdWVzdC0+cHJpdi0+
ZmlsdGVyLmdldCgpLCBtaW1lVHlwZVN0cmluZy51dGY4KCkuZGF0YSgpKTsKKyAgICB9CisKKyAg
ICByZXR1cm4gcmVxdWVzdC0+cHJpdi0+ZmlsdGVyLmdldCgpOworfQorCisvKioKKyAqIHdlYmtp
dF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfc2VsZWN0X211bHRpcGxlOgorICogQHJlcXVlc3Q6
IGEgI1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdAorICoKKyAqIERldGVybWluZSB3aGV0aGVyIHRo
ZSBmaWxlIGNob29zZXIgYXNzb2NpYXRlZCB0byB0aGlzCisgKiAjV2ViS2l0RmlsZUNob29zZXJS
ZXF1ZXN0IHNob3VsZCBhbGxvdyBzZWxlY3RpbmcgbXVsdGlwbGUgZmlsZXMsCisgKiB3aGljaCBk
ZXBlbmRzIG9uIHRoZSBIVE1MIGlucHV0IGVsZW1lbnQgaGF2aW5nIGEgJ211bHRpcGxlJworICog
YXR0cmlidXRlIGRlZmluZWQuCisgKgorICogUmV0dXJuczogJVRSVUUgaWYgdGhlIGZpbGUgY2hv
b3NlciBzaG91bGQgYWxsb3cgc2VsZWN0aW5nIG11bHRpcGxlIGZpbGVzIG9yICVGQUxTRSBvdGhl
cndpc2UuCisgKgorICogU2luY2U6IDEuMTAKKyAqLworZ2Jvb2xlYW4gd2Via2l0X2ZpbGVfY2hv
b3Nlcl9yZXF1ZXN0X2dldF9zZWxlY3RfbXVsdGlwbGUoV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0
KiByZXF1ZXN0KQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19GSUxFX0NI
T09TRVJfUkVRVUVTVChyZXF1ZXN0KSwgRkFMU0UpOworICAgIHJldHVybiByZXF1ZXN0LT5wcml2
LT5jaG9vc2VyLT5zZXR0aW5ncygpLmFsbG93c011bHRpcGxlRmlsZXM7Cit9CisKKy8qKgorICog
d2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X3NlbGVjdF9maWxlczoKKyAqIEByZXF1ZXN0OiBh
ICNXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QKKyAqIEBmaWxlczogKGFycmF5IHplcm8tdGVybWlu
YXRlZD0xKSAodHJhbnNmZXIgbm9uZSk6IGEKKyAqICVOVUxMLXRlcm1pbmF0ZWQgYXJyYXkgb2Yg
c3RyaW5ncywgY29udGFpbmluZyBwYXRocyB0byBsb2NhbCBmaWxlcy4KKyAqCisgKiBBc2sgV2Vi
S2l0IHRvIHNlbGVjdCBsb2NhbCBmaWxlcyBmb3IgdXBsb2FkIGFuZCBjb21wbGV0ZSB0aGUKKyAq
IHJlcXVlc3QuCisgKgorICogU2luY2U6IDEuMTAKKyAqLwordm9pZCB3ZWJraXRfZmlsZV9jaG9v
c2VyX3JlcXVlc3Rfc2VsZWN0X2ZpbGVzKFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCogcmVxdWVz
dCwgY29uc3QgZ2NoYXIqIGNvbnN0KiBmaWxlcykKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKFdF
QktJVF9JU19GSUxFX0NIT09TRVJfUkVRVUVTVChyZXF1ZXN0KSk7CisgICAgZ19yZXR1cm5faWZf
ZmFpbChmaWxlcyk7CisKKyAgICBWZWN0b3I8U3RyaW5nPiBuYW1lczsKKyAgICBHUmVmUHRyPEdQ
dHJBcnJheT4gc2VsZWN0ZWRGaWxlcyA9IGFkb3B0R1JlZihnX3B0cl9hcnJheV9uZXdfd2l0aF9m
cmVlX2Z1bmMoZ19mcmVlKSk7CisKKyAgICBmb3IgKGludCBpID0gMDsgZmlsZXNbaV07IGkrKykg
eworICAgICAgICBuYW1lcy5hcHBlbmQoZmlsZW5hbWVUb1N0cmluZyhmaWxlc1tpXSkpOworICAg
ICAgICBnX3B0cl9hcnJheV9hZGQoc2VsZWN0ZWRGaWxlcy5nZXQoKSwgZ19zdHJkdXAoZmlsZXNb
aV0pKTsKKyAgICB9CisKKyAgICBnX3B0cl9hcnJheV9hZGQoc2VsZWN0ZWRGaWxlcy5nZXQoKSwg
MCk7CisgICAgcmVxdWVzdC0+cHJpdi0+Y2hvb3Nlci0+Y2hvb3NlRmlsZXMobmFtZXMpOworICAg
IHJlcXVlc3QtPnByaXYtPnNlbGVjdGVkRmlsZXMgPSBzZWxlY3RlZEZpbGVzOworfQorCisvKioK
KyAqIHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfc2VsZWN0ZWRfZmlsZXM6CisgKiBA
cmVxdWVzdDogYSAjV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0CisgKgorICogR2V0IHRoZSBsaXN0
IG9mIHNlbGVjdGVkIGZpbGVzIGN1cnJlbnRseSBhc3NvY2lhdGVkIHRvIHRoZQorICogcmVxdWVz
dC4gSW5pdGlhbGx5LCB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoaXMgbWV0aG9kIGNvbnRhaW5zIGFu
eQorICogZmlsZXMgc2VsZWN0ZWQgaW4gcHJldmlvdXMgZmlsZSBjaG9vc2VyIHJlcXVlc3RzIGZv
ciB0aGlzIEhUTUwKKyAqIGlucHV0IGVsZW1lbnQuIE9uY2Ugd2Via2l0X2ZpbGVfY2hvb3Nlcl9y
ZXF1ZXN0X3NlbGVjdF9maWxlcywgdGhlCisgKiB2YWx1ZSB3aWxsIHJlZmxlY3Qgd2hhdGV2ZXIg
ZmlsZXMgYXJlIGdpdmVuLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gc2hvdWxkIG5vcm1hbGx5IGJl
IGNhbGxlZCBvbmx5IGJlZm9yZSBwcmVzZW50aW5nIHRoZQorICogZmlsZSBjaG9vc2VyIGRpYWxv
ZyB0byB0aGUgdXNlciwgdG8gZGVjaWRlIHdoZXRoZXIgdG8gcGVyZm9ybSBzb21lCisgKiBleHRy
YSBhY3Rpb24sIGxpa2UgcHJlLXNlbGVjdGluZyB0aGUgZmlsZXMgZnJvbSBhIHByZXZpb3VzIHJl
cXVlc3QuCisgKgorICogUmV0dXJuczogKGFycmF5IHplcm8tdGVybWluYXRlZD0xKSAodHJhbnNm
ZXIgbm9uZSk6IGEKKyAqICVOVUxMLXRlcm1pbmF0ZWQgYXJyYXkgb2Ygc3RyaW5ncyBpZiB0aGVy
ZSBhcmUgc2VsZWN0ZWQgZmlsZXMKKyAqIGFzc29jaWF0ZWQgd2l0aCB0aGUgcmVxdWVzdCBvciAl
TlVMTCBvdGhlcndpc2UuIFRoaXMgYXJyYXkgYW5kIGl0cworICogY29udGVudHMgYXJlIG93bmVk
IGJ5IFdlYktpdEdUSysgYW5kIHNob3VsZCBub3QgYmUgbW9kaWZpZWQgb3IKKyAqIGZyZWVkLgor
ICoKKyAqIFNpbmNlOiAxLjEwCisgKi8KK2NvbnN0IGdjaGFyKiBjb25zdCogd2Via2l0X2ZpbGVf
Y2hvb3Nlcl9yZXF1ZXN0X2dldF9zZWxlY3RlZF9maWxlcyhXZWJLaXRGaWxlQ2hvb3NlclJlcXVl
c3QqIHJlcXVlc3QpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX0ZJTEVf
Q0hPT1NFUl9SRVFVRVNUKHJlcXVlc3QpLCAwKTsKKyAgICBpZiAocmVxdWVzdC0+cHJpdi0+c2Vs
ZWN0ZWRGaWxlcykKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Z2NoYXIqKj4ocmVx
dWVzdC0+cHJpdi0+c2VsZWN0ZWRGaWxlcy0+cGRhdGEpOworCisgICAgRmlsZUNob29zZXJTZXR0
aW5ncyBzZXR0aW5ncyA9IHJlcXVlc3QtPnByaXYtPmNob29zZXItPnNldHRpbmdzKCk7CisgICAg
c2l6ZV90IG51bU9mRmlsZXMgPSBzZXR0aW5ncy5zZWxlY3RlZEZpbGVzLnNpemUoKTsKKyAgICBp
ZiAoIW51bU9mRmlsZXMpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmVxdWVzdC0+cHJpdi0+
c2VsZWN0ZWRGaWxlcyA9IGFkb3B0R1JlZihnX3B0cl9hcnJheV9uZXdfd2l0aF9mcmVlX2Z1bmMo
Z19mcmVlKSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1PZkZpbGVzOyArK2kpIHsK
KyAgICAgICAgaWYgKHNldHRpbmdzLnNlbGVjdGVkRmlsZXNbaV0uaXNFbXB0eSgpKQorICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgIENTdHJpbmcgZmlsZW5hbWUgPSBmaWxlU3lzdGVtUmVw
cmVzZW50YXRpb24oc2V0dGluZ3Muc2VsZWN0ZWRGaWxlc1tpXSk7CisgICAgICAgIGdfcHRyX2Fy
cmF5X2FkZChyZXF1ZXN0LT5wcml2LT5zZWxlY3RlZEZpbGVzLmdldCgpLCBnX3N0cmR1cChmaWxl
bmFtZS5kYXRhKCkpKTsKKyAgICB9CisgICAgZ19wdHJfYXJyYXlfYWRkKHJlcXVlc3QtPnByaXYt
PnNlbGVjdGVkRmlsZXMuZ2V0KCksIDApOworCisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8
Z2NoYXIqKj4ocmVxdWVzdC0+cHJpdi0+c2VsZWN0ZWRGaWxlcy0+cGRhdGEpOworfQpJbmRleDog
U291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGZpbGVjaG9vc2VycmVxdWVzdC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRmaWxlY2hvb3NlcnJlcXVl
c3QuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRmaWxl
Y2hvb3NlcnJlcXVlc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDcxIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgd2Via2l0ZmlsZWNob29zZXJy
ZXF1ZXN0X2gKKyNkZWZpbmUgd2Via2l0ZmlsZWNob29zZXJyZXF1ZXN0X2gKKworI2luY2x1ZGUg
PGd0ay9ndGsuaD4KKyNpbmNsdWRlIDx3ZWJraXQvd2Via2l0ZGVmaW5lcy5oPgorCitHX0JFR0lO
X0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX1RZUEVfRklMRV9DSE9PU0VSX1JFUVVFU1QgICAgICAg
ICAgICAod2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF90eXBlKCkpCisjZGVmaW5lIFdF
QktJVF9GSUxFX0NIT09TRVJfUkVRVUVTVChvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19J
TlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfVFlQRV9GSUxFX0NIT09TRVJfUkVRVUVTVCwgV2Vi
S2l0RmlsZUNob29zZXJSZXF1ZXN0KSkKKyNkZWZpbmUgV0VCS0lUX0ZJTEVfQ0hPT1NFUl9SRVFV
RVNUX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdF
QktJVF9UWVBFX0ZJTEVfQ0hPT1NFUl9SRVFVRVNULCBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3RD
bGFzcykpCisjZGVmaW5lIFdFQktJVF9JU19GSUxFX0NIT09TRVJfUkVRVUVTVChvYmopICAgICAg
ICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfVFlQRV9GSUxFX0NI
T09TRVJfUkVRVUVTVCkpCisjZGVmaW5lIFdFQktJVF9JU19GSUxFX0NIT09TRVJfUkVRVUVTVF9D
TEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfVFlQ
RV9GSUxFX0NIT09TRVJfUkVRVUVTVCkpCisjZGVmaW5lIFdFQktJVF9GSUxFX0NIT09TRVJfUkVR
VUVTVF9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBX
RUJLSVRfVFlQRV9GSUxFX0NIT09TRVJfUkVRVUVTVCwgV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0
Q2xhc3MpKQorCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0ICAgICAg
ICBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3Q7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RmlsZUNo
b29zZXJSZXF1ZXN0Q2xhc3MgICBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3RDbGFzczsKK3R5cGVk
ZWYgc3RydWN0IF9XZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3RQcml2YXRlIFdlYktpdEZpbGVDaG9v
c2VyUmVxdWVzdFByaXZhdGU7CisKK3N0cnVjdCBfV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0IHsK
KyAgICBHT2JqZWN0IHBhcmVudDsKKworICAgIC8qPCBwcml2YXRlID4qLworICAgIFdlYktpdEZp
bGVDaG9vc2VyUmVxdWVzdFByaXZhdGUgKnByaXY7Cit9OworCitzdHJ1Y3QgX1dlYktpdEZpbGVD
aG9vc2VyUmVxdWVzdENsYXNzIHsKKyAgICBHT2JqZWN0Q2xhc3MgcGFyZW50X2NsYXNzOworfTsK
KworV0VCS0lUX0FQSSBHVHlwZQord2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF90eXBl
ICAgICAgICAgICAgICAgICAgKHZvaWQpOworCitXRUJLSVRfQVBJIGNvbnN0IGdjaGFyICogY29u
c3QgKgord2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9taW1lX3R5cGVzICAgICAgICAo
V2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0ICpyZXF1ZXN0KTsKKworV0VCS0lUX0FQSSBHdGtGaWxl
RmlsdGVyICoKK3dlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfbWltZV90eXBlc19maWx0
ZXIgKFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCAqcmVxdWVzdCk7CisKK1dFQktJVF9BUEkgZ2Jv
b2xlYW4KK3dlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfc2VsZWN0X211bHRpcGxlICAg
KFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCAqcmVxdWVzdCk7CisKK1dFQktJVF9BUEkgdm9pZAor
d2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X3NlbGVjdF9maWxlcyAgICAgICAgICAoV2ViS2l0
RmlsZUNob29zZXJSZXF1ZXN0ICpyZXF1ZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgKiBjb25zdCAgICAgICpmaWxlcyk7
CisKK1dFQktJVF9BUEkgY29uc3QgZ2NoYXIgKiBjb25zdCAqCit3ZWJraXRfZmlsZV9jaG9vc2Vy
X3JlcXVlc3RfZ2V0X3NlbGVjdGVkX2ZpbGVzICAgIChXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3Qg
KnJlcXVlc3QpOworCitHX0VORF9ERUNMUworCisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJLaXQv
Z3RrL3dlYmtpdC93ZWJraXRmaWxlY2hvb3NlcnJlcXVlc3Rwcml2YXRlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGZpbGVjaG9vc2VycmVxdWVzdHByaXZh
dGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRmaWxl
Y2hvb3NlcnJlcXVlc3Rwcml2YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
KiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIHdlYmtpdGZpbGVj
aG9vc2VycmVxdWVzdHByaXZhdGVfaAorI2RlZmluZSB3ZWJraXRmaWxlY2hvb3NlcnJlcXVlc3Rw
cml2YXRlX2gKKworI2luY2x1ZGUgIkZpbGVDaG9vc2VyLmgiCisjaW5jbHVkZSAid2Via2l0Zmls
ZWNob29zZXJyZXF1ZXN0LmgiCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitXZWJLaXRG
aWxlQ2hvb3NlclJlcXVlc3QqIHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9jcmVhdGUoUGFz
c1JlZlB0cjxGaWxlQ2hvb3Nlcj4gY2hvb3Nlcik7CisKKyNlbmRpZgpJbmRleDogU291cmNlL1dl
YktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcAkocmV2aXNpb24gMTIwODYwKQorKysg
U291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yMTYsNiArMjE2LDcgQEAgZW51bSB7CiAgICAgRU5URVJJTkdfRlVMTFNDUkVFTiwKICAg
ICBMRUFWSU5HX0ZVTExTQ1JFRU4sCiAgICAgQ09OVEVYVF9NRU5VLAorICAgIFJVTl9GSUxFX0NI
T09TRVIsCiAKICAgICBMQVNUX1NJR05BTAogfTsKQEAgLTEyOTQsNiArMTI5NSw0OCBAQCBzdGF0
aWMgZ2Jvb2xlYW4gd2Via2l0X3dlYl92aWV3X3JlYWxfbGVhCiAgICAgcmV0dXJuIEZBTFNFOwog
fQogCitzdGF0aWMgdm9pZCBmaWxlQ2hvb3NlckRpYWxvZ1Jlc3BvbnNlQ2FsbGJhY2soR3RrRGlh
bG9nKiBkaWFsb2csIGdpbnQgcmVzcG9uc2VJRCwgV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0KiBy
ZXF1ZXN0KQoreworICAgIEdSZWZQdHI8V2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0PiBhZG9wdGVk
UmVxdWVzdCA9IGFkb3B0R1JlZihyZXF1ZXN0KTsKKyAgICBpZiAocmVzcG9uc2VJRCA9PSBHVEtf
UkVTUE9OU0VfQUNDRVBUKSB7CisgICAgICAgIEdPd25QdHI8R1NMaXN0PiBmaWxlc0xpc3QoZ3Rr
X2ZpbGVfY2hvb3Nlcl9nZXRfZmlsZW5hbWVzKEdUS19GSUxFX0NIT09TRVIoZGlhbG9nKSkpOwor
ICAgICAgICBHUmVmUHRyPEdQdHJBcnJheT4gZmlsZXNBcnJheSA9IGFkb3B0R1JlZihnX3B0cl9h
cnJheV9uZXcoKSk7CisgICAgICAgIGZvciAoR1NMaXN0KiBmaWxlID0gZmlsZXNMaXN0LmdldCgp
OyBmaWxlOyBmaWxlID0gZ19zbGlzdF9uZXh0KGZpbGUpKQorICAgICAgICAgICAgZ19wdHJfYXJy
YXlfYWRkKGZpbGVzQXJyYXkuZ2V0KCksIGZpbGUtPmRhdGEpOworICAgICAgICBnX3B0cl9hcnJh
eV9hZGQoZmlsZXNBcnJheS5nZXQoKSwgMCk7CisgICAgICAgIHdlYmtpdF9maWxlX2Nob29zZXJf
cmVxdWVzdF9zZWxlY3RfZmlsZXMoYWRvcHRlZFJlcXVlc3QuZ2V0KCksIHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgZ2NoYXIqIGNvbnN0Kj4oZmlsZXNBcnJheS0+cGRhdGEpKTsKKyAgICB9CisKKyAg
ICBndGtfd2lkZ2V0X2Rlc3Ryb3koR1RLX1dJREdFVChkaWFsb2cpKTsKK30KKworc3RhdGljIGdi
b29sZWFuIHdlYmtpdFdlYlZpZXdSZWFsUnVuRmlsZUNob29zZXIoV2ViS2l0V2ViVmlldyogd2Vi
VmlldywgV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0KiByZXF1ZXN0KQoreworICAgIEd0a1dpZGdl
dCogdG9wbGV2ZWwgPSBndGtfd2lkZ2V0X2dldF90b3BsZXZlbChHVEtfV0lER0VUKHdlYlZpZXcp
KTsKKyAgICBpZiAoIXdpZGdldElzT25zY3JlZW5Ub3BsZXZlbFdpbmRvdyh0b3BsZXZlbCkpCisg
ICAgICAgIHRvcGxldmVsID0gMDsKKworICAgIGdib29sZWFuIGFsbG93c011bHRpcGxlU2VsZWN0
aW9uID0gd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9zZWxlY3RfbXVsdGlwbGUocmVx
dWVzdCk7CisgICAgR3RrV2lkZ2V0KiBkaWFsb2cgPSBndGtfZmlsZV9jaG9vc2VyX2RpYWxvZ19u
ZXcoYWxsb3dzTXVsdGlwbGVTZWxlY3Rpb24gPyBfKCJTZWxlY3QgRmlsZXMiKSA6IF8oIlNlbGVj
dCBGaWxlIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdG9wbGV2ZWwgPyBHVEtfV0lORE9XKHRvcGxldmVsKSA6IDAsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1RLX0ZJTEVfQ0hPT1NFUl9B
Q1RJT05fT1BFTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBHVEtfU1RPQ0tfQ0FOQ0VMLCBHVEtfUkVTUE9OU0VfQ0FOQ0VMLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdUS19TVE9DS19PUEVO
LCBHVEtfUkVTUE9OU0VfQUNDRVBULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIE5VTEwpOworCisgICAgaWYgKEd0a0ZpbGVGaWx0ZXIqIGZpbHRl
ciA9IHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfbWltZV90eXBlc19maWx0ZXIocmVx
dWVzdCkpCisgICAgICAgIGd0a19maWxlX2Nob29zZXJfc2V0X2ZpbHRlcihHVEtfRklMRV9DSE9P
U0VSKGRpYWxvZyksIGZpbHRlcik7CisgICAgZ3RrX2ZpbGVfY2hvb3Nlcl9zZXRfc2VsZWN0X211
bHRpcGxlKEdUS19GSUxFX0NIT09TRVIoZGlhbG9nKSwgYWxsb3dzTXVsdGlwbGVTZWxlY3Rpb24p
OworCisgICAgaWYgKGNvbnN0IGdjaGFyKiBjb25zdCogc2VsZWN0ZWRGaWxlcyA9IHdlYmtpdF9m
aWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfc2VsZWN0ZWRfZmlsZXMocmVxdWVzdCkpCisgICAgICAg
IGd0a19maWxlX2Nob29zZXJfc2VsZWN0X2ZpbGVuYW1lKEdUS19GSUxFX0NIT09TRVIoZGlhbG9n
KSwgc2VsZWN0ZWRGaWxlc1swXSk7CisKKyAgICBnX3NpZ25hbF9jb25uZWN0KGRpYWxvZywgInJl
c3BvbnNlIiwgR19DQUxMQkFDSyhmaWxlQ2hvb3NlckRpYWxvZ1Jlc3BvbnNlQ2FsbGJhY2spLCBn
X29iamVjdF9yZWYocmVxdWVzdCkpOworICAgIGd0a193aWRnZXRfc2hvdyhkaWFsb2cpOworCisg
ICAgcmV0dXJuIFRSVUU7Cit9CisKIHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJfdmlld19kaXNwb3Nl
KEdPYmplY3QqIG9iamVjdCkKIHsKICAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0gV0VCS0lU
X1dFQl9WSUVXKG9iamVjdCk7CkBAIC0yNTQ3LDYgKzI1OTAsNDIgQEAgc3RhdGljIHZvaWQgd2Vi
a2l0X3dlYl92aWV3X2NsYXNzX2luaXQoVwogICAgICAgICAgICAgR19UWVBFX05PTkUsIDEsCiAg
ICAgICAgICAgICBXRUJLSVRfVFlQRV9XRUJfRlJBTUUpOwogCisgICAgIC8qKgorICAgICAqIFdl
YktpdFdlYlZpZXc6OnJ1bi1maWxlLWNob29zZXI6CisgICAgICogQHdlYl92aWV3OiB0aGUgI1dl
YktpdFdlYlZpZXcgb24gd2hpY2ggdGhlIHNpZ25hbCBpcyBlbWl0dGVkCisgICAgICogQHJlcXVl
c3Q6IGEgI1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdAorICAgICAqCisgICAgICogVGhpcyBzaWdu
YWwgaXMgZW1pdHRlZCB3aGVuIHRoZSB1c2VyIGludGVyYWN0cyB3aXRoIGEgJmx0O2lucHV0Cisg
ICAgICogdHlwZT0nZmlsZScgLyZndDsgSFRNTCBlbGVtZW50LCByZXF1ZXN0aW5nIGZyb20gV2Vi
S2l0IHRvIHNob3cKKyAgICAgKiBhIGRpYWxvZyB0byBzZWxlY3Qgb25lIG9yIG1vcmUgZmlsZXMg
dG8gYmUgdXBsb2FkZWQuIFRvIGxldCB0aGUKKyAgICAgKiBhcHBsaWNhdGlvbiBrbm93IHRoZSBk
ZXRhaWxzIG9mIHRoZSBmaWxlIGNob29zZXIsIGFzIHdlbGwgYXMgdG8KKyAgICAgKiBhbGxvdyB0
aGUgY2xpZW50IGFwcGxpY2F0aW9uIHRvIGVpdGhlciBjYW5jZWwgdGhlIHJlcXVlc3Qgb3IKKyAg
ICAgKiBwZXJmb3JtIGFuIGFjdHVhbCBzZWxlY3Rpb24gb2YgZmlsZXMsIHRoZSBzaWduYWwgd2ls
bCBwYXNzIGFuCisgICAgICogaW5zdGFuY2Ugb2YgdGhlICNXZWJLaXRGaWxlQ2hvb3NlclJlcXVl
c3QgaW4gdGhlIEByZXF1ZXN0CisgICAgICogYXJndW1lbnQuCisgICAgICoKKyAgICAgKiBUaGUg
ZGVmYXVsdCBzaWduYWwgaGFuZGxlciB3aWxsIGFzeW5jaHJvbm91c2x5IHJ1biBhIHJlZ3VsYXIK
KyAgICAgKiAjR3RrRmlsZUNob29zZXJEaWFsb2cgZm9yIHRoZSB1c2VyIHRvIGludGVyYWN0IHdp
dGguCisgICAgICoKKyAgICAgKiBJZiB0aGlzIHNpZ25hbCBpcyB0byBiZSBoYW5kbGVkIGFzeW5j
aHJvbm91c2x5LCB5b3UgbXVzdAorICAgICAqIGNhbGwgZ19vYmplY3RfcmVmKCkgb24gdGhlIEBy
ZXF1ZXN0LCBhbmQgcmV0dXJuICVUUlVFIHRvIGluZGljYXRlCisgICAgICogdGhhdCB0aGUgcmVx
dWVzdCBpcyBiZWluZyBoYW5kbGVkLiBXaGVuIHlvdSBhcmUgcmVhZHkgdG8gY29tcGxldGUgdGhl
CisgICAgICogcmVxdWVzdCwgY2FsbCB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3Rfc2VsZWN0
X2ZpbGVzKCkuCisgICAgICoKKyAgICAgKiBSZXR1cm5zOiAlVFJVRSB0byBzdG9wIG90aGVyIGhh
bmRsZXJzIGZyb20gYmVpbmcgaW52b2tlZCBmb3IgdGhlIGV2ZW50LgorICAgICAqICAgJUZBTFNF
IHRvIHByb3BhZ2F0ZSB0aGUgZXZlbnQgZnVydGhlci4KKyAgICAgKgorICAgICAqLworICAgIHdl
YmtpdF93ZWJfdmlld19zaWduYWxzW1JVTl9GSUxFX0NIT09TRVJdID0KKyAgICAgICAgZ19zaWdu
YWxfbmV3KCJydW4tZmlsZS1jaG9vc2VyIiwKKyAgICAgICAgICAgICAgICAgICAgIEdfVFlQRV9G
Uk9NX0NMQVNTKHdlYlZpZXdDbGFzcyksCisgICAgICAgICAgICAgICAgICAgICBHX1NJR05BTF9S
VU5fTEFTVCwKKyAgICAgICAgICAgICAgICAgICAgIEdfU1RSVUNUX09GRlNFVChXZWJLaXRXZWJW
aWV3Q2xhc3MsIHJ1bl9maWxlX2Nob29zZXIpLAorICAgICAgICAgICAgICAgICAgICAgZ19zaWdu
YWxfYWNjdW11bGF0b3JfdHJ1ZV9oYW5kbGVkLCAwIC8qIGFjY3VtdWxhdG9yIGRhdGEgKi8sCisg
ICAgICAgICAgICAgICAgICAgICB3ZWJraXRfbWFyc2hhbF9CT09MRUFOX19PQkpFQ1QsCisgICAg
ICAgICAgICAgICAgICAgICBHX1RZUEVfQk9PTEVBTiwgMSwgLyogbnVtYmVyIG9mIHBhcmFtZXRl
cnMgKi8KKyAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9UWVBFX0ZJTEVfQ0hPT1NFUl9SRVFV
RVNUKTsKKwogICAgIHdlYmtpdF93ZWJfdmlld19zaWduYWxzW1NIT1VMRF9CRUdJTl9FRElUSU5H
XSA9IGdfc2lnbmFsX25ldygic2hvdWxkLWJlZ2luLWVkaXRpbmciLAogICAgICAgICBHX1RZUEVf
RlJPTV9DTEFTUyh3ZWJWaWV3Q2xhc3MpLCBzdGF0aWNfY2FzdDxHU2lnbmFsRmxhZ3M+KEdfU0lH
TkFMX1JVTl9MQVNUIHwgR19TSUdOQUxfQUNUSU9OKSwKICAgICAgICAgR19TVFJVQ1RfT0ZGU0VU
KFdlYktpdFdlYlZpZXdDbGFzcywgc2hvdWxkX2FsbG93X2VkaXRpbmdfYWN0aW9uKSwgZ19zaWdu
YWxfYWNjdW11bGF0b3JfZmlyc3Rfd2lucywgMCwKQEAgLTI4NTYsNiArMjkzNSw3IEBAIHN0YXRp
YyB2b2lkIHdlYmtpdF93ZWJfdmlld19jbGFzc19pbml0KFcKICAgICB3ZWJWaWV3Q2xhc3MtPnNo
b3VsZF9hbGxvd19lZGl0aW5nX2FjdGlvbiA9IHdlYmtpdF93ZWJfdmlld19yZWFsX3Nob3VsZF9h
bGxvd19lZGl0aW5nX2FjdGlvbjsKICAgICB3ZWJWaWV3Q2xhc3MtPmVudGVyaW5nX2Z1bGxzY3Jl
ZW4gPSB3ZWJraXRfd2ViX3ZpZXdfcmVhbF9lbnRlcmluZ19mdWxsc2NyZWVuOwogICAgIHdlYlZp
ZXdDbGFzcy0+bGVhdmluZ19mdWxsc2NyZWVuID0gd2Via2l0X3dlYl92aWV3X3JlYWxfbGVhdmlu
Z19mdWxsc2NyZWVuOworICAgIHdlYlZpZXdDbGFzcy0+cnVuX2ZpbGVfY2hvb3NlciA9IHdlYmtp
dFdlYlZpZXdSZWFsUnVuRmlsZUNob29zZXI7CiAKICAgICBHT2JqZWN0Q2xhc3MqIG9iamVjdENs
YXNzID0gR19PQkpFQ1RfQ0xBU1Mod2ViVmlld0NsYXNzKTsKICAgICBvYmplY3RDbGFzcy0+ZGlz
cG9zZSA9IHdlYmtpdF93ZWJfdmlld19kaXNwb3NlOwpAQCAtMzYxMCw2ICszNjkwLDEyIEBAIEd0
a1dpZGdldCogd2Via2l0X3dlYl92aWV3X25ldyh2b2lkKQogICAgIHJldHVybiBHVEtfV0lER0VU
KHdlYlZpZXcpOwogfQogCit2b2lkIHdlYmtpdFdlYlZpZXdSdW5GaWxlQ2hvb3NlclJlcXVlc3Qo
V2ViS2l0V2ViVmlldyogd2ViVmlldywgV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0KiByZXF1ZXN0
KQoreworICAgIGdib29sZWFuIHJldHVyblZhbHVlOworICAgIGdfc2lnbmFsX2VtaXQod2ViVmll
dywgd2Via2l0X3dlYl92aWV3X3NpZ25hbHNbUlVOX0ZJTEVfQ0hPT1NFUl0sIDAsIHJlcXVlc3Qs
ICZyZXR1cm5WYWx1ZSk7Cit9CisKIC8vIGZvciBpbnRlcm5hbCB1c2Ugb25seQogdm9pZCB3ZWJr
aXRfd2ViX3ZpZXdfbm90aWZ5X3JlYWR5KFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCiB7CkluZGV4
OiBTb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmgJKHJldmlzaW9uIDEyMDg2
MCkKKysrIFNvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUgPHdlYmtpdC93ZWJraXRkZWZpbmVz
Lmg+CiAjaW5jbHVkZSA8d2Via2l0L3dlYmtpdGRvbS5oPgorI2luY2x1ZGUgPHdlYmtpdC93ZWJr
aXRmaWxlY2hvb3NlcnJlcXVlc3QuaD4KICNpbmNsdWRlIDx3ZWJraXQvd2Via2l0d2ViYmFja2Zv
cndhcmRsaXN0Lmg+CiAjaW5jbHVkZSA8d2Via2l0L3dlYmtpdHdlYmZyYW1lLmg+CiAjaW5jbHVk
ZSA8d2Via2l0L3dlYmtpdHdlYmhpc3RvcnlpdGVtLmg+CkBAIC0xNzgsOSArMTc5LDggQEAgc3Ry
dWN0IF9XZWJLaXRXZWJWaWV3Q2xhc3MgewogICAgIGdib29sZWFuICAgICAgICAgICAgICAgICAg
ICgqIHNob3VsZF9hbGxvd19lZGl0aW5nX2FjdGlvbikgKFdlYktpdFdlYlZpZXcgICAqd2ViX3Zp
ZXcpOwogICAgIGdib29sZWFuICAgICAgICAgICAgICAgICAgICgqIGVudGVyaW5nX2Z1bGxzY3Jl
ZW4pIChXZWJLaXRXZWJWaWV3ICAgKndlYl92aWV3KTsKICAgICBnYm9vbGVhbiAgICAgICAgICAg
ICAgICAgICAoKiBsZWF2aW5nX2Z1bGxzY3JlZW4pIChXZWJLaXRXZWJWaWV3ICAgKndlYl92aWV3
KTsKLQotICAgIC8qIFBhZGRpbmcgZm9yIGZ1dHVyZSBleHBhbnNpb24gKi8KLSAgICB2b2lkICgq
X3dlYmtpdF9yZXNlcnZlZDApICh2b2lkKTsKKyAgICBnYm9vbGVhbiAgICAgICAgICAgICAgICAg
ICAoKiBydW5fZmlsZV9jaG9vc2VyKSAgICAgICAoV2ViS2l0V2ViVmlldyAgICAgICAgICAgICp3
ZWJfdmlldywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0ICpyZXF1ZXN0KTsKIH07CiAKIFdF
QktJVF9BUEkgR1R5cGUKSW5kZXg6IFNvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2
aWV3cHJpdmF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJr
aXR3ZWJ2aWV3cHJpdmF0ZS5oCShyZXZpc2lvbiAxMjA4NjApCisrKyBTb3VyY2UvV2ViS2l0L2d0
ay93ZWJraXQvd2Via2l0d2Vidmlld3ByaXZhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTM3LDYg
KzEzNyw4IEBAIEd0a01lbnUqIHdlYmtpdF93ZWJfdmlld19nZXRfY29udGV4dF9tZW4KIHZvaWQg
d2ViVmlld0VudGVyRnVsbHNjcmVlbihXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBXZWJDb3JlOjpO
b2RlKik7CiB2b2lkIHdlYlZpZXdFeGl0RnVsbHNjcmVlbihXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3
KTsKIAordm9pZCB3ZWJraXRXZWJWaWV3UnVuRmlsZUNob29zZXJSZXF1ZXN0KFdlYktpdFdlYlZp
ZXcqLCBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QqKTsKKwogI2lmIEVOQUJMRShJQ09OREFUQUJB
U0UpCiB2b2lkIHdlYmtpdFdlYlZpZXdSZWdpc3RlckZvckljb25Ob3RpZmljYXRpb24oV2ViS2l0
V2ViVmlldyosIGJvb2wgc2hvdWxkUmVnaXN0ZXIpOwogdm9pZCB3ZWJraXRXZWJWaWV3SWNvbkxv
YWRlZChXZWJLaXRGYXZpY29uRGF0YWJhc2UqLCBjb25zdCBjaGFyKiBmcmFtZVVSSSwgV2ViS2l0
V2ViVmlldyopOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>