<?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>15691</bug_id>
          
          <creation_ts>2007-10-25 12:10:02 -0700</creation_ts>
          <short_desc>[GTK] Public API does not follow GTK+ conventions</short_desc>
          <delta_ts>2007-11-30 20:44:16 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>523.x (Safari 3)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Gtk</keywords>
          <priority>P2</priority>
          <bug_severity>Major</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>16174</dependson>
          <blocked>16098</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Alp Toker">alp</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>alp</cc>
    
    <cc>christian</cc>
    
    <cc>jmalonzo</cc>
    
    <cc>sven</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>59455</commentid>
    <comment_count>0</comment_count>
    <who name="Alp Toker">alp</who>
    <bug_when>2007-10-25 12:10:02 -0700</bug_when>
    <thetext>There is evidence that the WebKitPage class should instead be named *View to match GTK+ convention of widgets to be added to scrolled containers eg. TreeView and TextView.

It may also be prudent to follow GTK+ coding style in classes under WebKit/gtk/Api/ and perhaps WebKitSupport since its very much the convention when you are defining GObject classes in boilerplate-heavy C code.

We may also want to introduce much of the new API in one go to avoid the situation where people add bits and pieces to scratch an itch, making it inconsistent. To this end, we may want to borrow from/adopt:

http://gtk-webcore.svn.sourceforge.net/viewvc/gtk-webcore/trunk/WebkitGtk/

I&apos;m not entirely convinced by that API either. The delegate classes would need to go. Some of the entry point names are also rather lengthy.

We need to discuss these issues so we can move forward with a public API for WebKit/Gtk+ that can be supported in the long term, or even recommend for use in applications at all.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>59456</commentid>
    <comment_count>1</comment_count>
    <who name="Holger Freyther">zecke</who>
    <bug_when>2007-10-25 12:16:30 -0700</bug_when>
    <thetext>The main reason I didn&apos;t base my work on this API where the 1:1 copy of the Mac API where specially the delegates didn&apos;t feel native.

The current API is (almost) good enough for the OpenMoko Browser, Feedreader and pidgin.im so I would like to see an evolutionary API design driven by actual demand instead of blindly throwing things away. But these are just my two cents.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>59467</commentid>
    <comment_count>2</comment_count>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2007-10-25 14:40:22 -0700</bug_when>
    <thetext>(In reply to comment #0)
&gt; There is evidence that the WebKitPage class should instead be named *View to
&gt; match GTK+ convention of widgets to be added to scrolled containers eg.
&gt; TreeView and TextView.
&gt; 
&gt; It may also be prudent to follow GTK+ coding style in classes under
&gt; WebKit/gtk/Api/ and perhaps WebKitSupport since its very much the convention
&gt; when you are defining GObject classes in boilerplate-heavy C code.

+1 for this if there&apos;s no problem in doing it. The people more likely to contribute to that code (I guess) are used to that style.

&gt; 
&gt; We may also want to introduce much of the new API in one go to avoid the
&gt; situation where people add bits and pieces to scratch an itch, making it
&gt; inconsistent. To this end, we may want to borrow from/adopt:
&gt; 
&gt; http://gtk-webcore.svn.sourceforge.net/viewvc/gtk-webcore/trunk/WebkitGtk/
&gt; 
&gt; I&apos;m not entirely convinced by that API either. The delegate classes would need
&gt; to go. Some of the entry point names are also rather lengthy.
&gt; 
&gt; We need to discuss these issues so we can move forward with a public API for
&gt; WebKit/Gtk+ that can be supported in the long term, or even recommend for use
&gt; in applications at all.
&gt; 

Now that the ground work in Epiphany is done and we can start implementing some big missing chunks in the webkit port I hope I&apos;ll be able to provide some feedback there.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>61592</commentid>
    <comment_count>3</comment_count>
    <who name="Alp Toker">alp</who>
    <bug_when>2007-11-18 14:27:42 -0800</bug_when>
    <thetext>A couple of things to add:

(1) http://bugs.webkit.org/show_bug.cgi?id=16042
[GTK] Eliminate webkit_init()

(2) Next time we make a breaking change, we should add padding to the structures for future expansion.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>62044</commentid>
    <comment_count>4</comment_count>
    <who name="Alp Toker">alp</who>
    <bug_when>2007-11-22 20:20:24 -0800</bug_when>
    <thetext>In the WebKit GTK+ port&apos;s public API today, we have types and functions named like this:

  WebKitPage
  WebKitFrame
  WebKitNetworkRequest

  WebKitFrame *
  webkit_page_get_main_frame (WebKitPage *page);

We want to move away from this because:

  (1) &quot;WebKitPage&quot; doesn&apos;t follow GTK+ conventions. Widgets that are usually packed in a GtkScrolledWindow and represent a view are called GtkTextView, GtkTreeView, GtkIconView etc.

  (2) In some language bindings, &quot;WebKit&quot; would be considered the namespace and you&apos;d be left with generic top-level type names like &quot;Frame&quot; which would annoyingly conflict with &quot;Frame&quot; from, say, the Gtk namespace.

  (3) What is a &quot;Page&quot;? Is it data? Is it a widget? It&apos;s too ambiguous.

So, we want to move to a naming convention similar to that of the Win and Mac ports. This means providing top-level types named *WebView and *WebFrame.

However, if we keep the current namespace &quot;WebKit&quot;, things start to get verbose and repetitive:

  WebKitWebView
  WebKitWebFrame
  WebKitNetworkRequest

  WebKitWebFrame *
  webkit_web_view_get_main_frame (WebKitWebView *view);

One alternative proposed is simply to prepend &quot;G&quot; (though this looks like namespace pollution to me):

  GWebView
  GWebFrame
  GNetworkRequest

  GWebFrame *
  g_web_view_get_main_frame (GWebView *view);

Another proposal is to follow the example of GTK+. GIMP ToolKit shortens to &quot;Gtk&quot; in the API, so we&apos;d follow suit and use the namespace &quot;Wk&quot;:

  WkWebView
  WkWebFrame
  WkNetworkRequest

  WkWebFrame *
  wk_web_view_get_main_frame (WkWebView *view);

Whether we go for one of these schemes or a better proposal comes along, the API chosen now will probably be around for a few years to come. If you have a preference or disagree with my analysis, please speak up!
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>62067</commentid>
    <comment_count>5</comment_count>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2007-11-23 02:12:14 -0800</bug_when>
    <thetext>My opinion is that GObject C is by its very own nature verbose, so using artificially short/confusing APIs to save typing is just bad. If you don&apos;t want to type use bindings or some kind of autocompletion, there&apos;s plenty of solutions around :)

So I&apos;d go with something like WebKitWebView, webkit_web_view_new (), etc

Using wk as namespace in the API might be ok too, although my first impression is &quot;ugh&quot;. We use a similar trick in Epiphany, using &quot;ephy&quot; as namespace for our API, but I&apos;d say ephy sounds better than wk :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>62215</commentid>
    <comment_count>6</comment_count>
    <who name="Alp Toker">alp</who>
    <bug_when>2007-11-24 16:31:03 -0800</bug_when>
    <thetext>Yet another inspiration comes from gtkhtml (also namespace pollution):

  GtkWebView
  GtkWebFrame
  GtkNetworkRequest

  GtkWebFrame *
  gtk_web_view_get_main_frame (GtkWebView *view);


On another subject, GTK+/GLib use &quot;URI&quot; terminology instead of &quot;URL&quot;, which WebKit uses. I&apos;m thinking we should follow the former here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>62217</commentid>
    <comment_count>7</comment_count>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2007-11-24 16:33:48 -0800</bug_when>
    <thetext>Using the gtk_ prefix outside GTK+ is really a no-no IMHO.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>62221</commentid>
    <comment_count>8</comment_count>
    <who name="Sven Herzberg">sven</who>
    <bug_when>2007-11-24 17:13:50 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; Using the gtk_ prefix outside GTK+ is really a no-no IMHO.

I totally agree here. Using the GTK prefix should happen if and only if this is being coordinated with the GTK people.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>62260</commentid>
    <comment_count>9</comment_count>
      <attachid>17501</attachid>
    <who name="Alp Toker">alp</who>
    <bug_when>2007-11-24 23:23:07 -0800</bug_when>
    <thetext>Created attachment 17501
API and header improvements

This patch does not yet break ABI or API in any significant way.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>62267</commentid>
    <comment_count>10</comment_count>
    <who name="Jan Alonzo">jmalonzo</who>
    <bug_when>2007-11-25 01:28:54 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; 
&gt; However, if we keep the current namespace &quot;WebKit&quot;, things start to get verbose
&gt; and repetitive:
&gt; 
&gt;   WebKitWebView
&gt;   WebKitWebFrame
&gt;   WebKitNetworkRequest
&gt; 
&gt;   WebKitWebFrame *
&gt;   webkit_web_view_get_main_frame (WebKitWebView *view);

In my opinion being verbose is fine because redundancy only happens for web-related components. I also agree that we should follow naming convention of Mac/Win ports because it&apos;s a big help (for reference purposes) for people who are learning the API, and webkit code in general.

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>62298</commentid>
    <comment_count>11</comment_count>
    <who name="Christian Dywan">christian</who>
    <bug_when>2007-11-25 12:53:50 -0800</bug_when>
    <thetext>&gt;   WebKitWebView
&gt;   WebKitWebFrame
&gt;   WebKitNetworkRequest
&gt; 
&gt;   WebKitWebFrame *
&gt;   webkit_web_view_get_main_frame (WebKitWebView *view);

This looks like a very nice scheme.

However shouldn&apos;t it be WebkitWebView to actually match webkit_web_view_new speaking of capitalization?

I would also like to see WebkitWebView* treated like a widget unlike WebKitPage* currently. For example:

 WebKitPage* webkit_page_new

should be

 GtkWidget* webkit_web_view_new</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>62312</commentid>
    <comment_count>12</comment_count>
      <attachid>17501</attachid>
    <who name="Alp Toker">alp</who>
    <bug_when>2007-11-25 14:18:30 -0800</bug_when>
    <thetext>Comment on attachment 17501
API and header improvements

Already reviewed by Mark and landed in r28013. Taking this out of the review queue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>62535</commentid>
    <comment_count>13</comment_count>
      <attachid>17501</attachid>
    <who name="Alp Toker">alp</who>
    <bug_when>2007-11-27 22:10:35 -0800</bug_when>
    <thetext>Comment on attachment 17501
API and header improvements

Patch already landed, but the bug report needs to remain open. Removing r+ flag to clear the commit queue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>62600</commentid>
    <comment_count>14</comment_count>
    <who name="Christian Dywan">christian</who>
    <bug_when>2007-11-28 12:47:28 -0800</bug_when>
    <thetext>Changing the term Url to Uri is desirable, possibly also ^^location^^uri.

Using existing function and signal schemes would also be nice at places where it makes sense. Afterall this is about integration.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>62825</commentid>
    <comment_count>15</comment_count>
      <attachid>17613</attachid>
    <who name="Alp Toker">alp</who>
    <bug_when>2007-11-30 15:54:55 -0800</bug_when>
    <thetext>Created attachment 17613
Refactor as planned

Would prefer to add ChangeLog entries post-review due to the number of changed files.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>62826</commentid>
    <comment_count>16</comment_count>
      <attachid>17614</attachid>
    <who name="Alp Toker">alp</who>
    <bug_when>2007-11-30 16:06:47 -0800</bug_when>
    <thetext>Created attachment 17614
With corrected documentation

Internal variables in WebCoreSupport still need to be renamed but that&apos;s a style issue that I&apos;ll deal with in a follow-up patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>62827</commentid>
    <comment_count>17</comment_count>
      <attachid>17615</attachid>
    <who name="Alp Toker">alp</who>
    <bug_when>2007-11-30 16:23:16 -0800</bug_when>
    <thetext>Created attachment 17615
With ChangeLog entries</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>62828</commentid>
    <comment_count>18</comment_count>
    <who name="Christian Dywan">christian</who>
    <bug_when>2007-11-30 16:40:28 -0800</bug_when>
    <thetext>(In reply to comment #15)
&gt; Created an attachment (id=17613) [edit]
&gt; Refactor as planned

This is starting to look good. However allow me a few comments.

&gt; WebKitWebFrame* webkit_web_frame_init_with_web_view(WebKitWebView* webView, HTMLFrameOwnerElement* element)

I believe this is meant to be static. And while you&apos;re at it you might give it a n appropriate name, such as webkit_web_frame_init_with_element.

&gt; WebKitWebView* webkit_web_frame_get_web_view(WebKitWebFrame* frame)
This should return GtkWidget*.

&gt; +void webkit_web_view_go_backward(WebKitWebView* webView)
This should be s/backward/back. 

&gt; WebKitSettings* webkit_web_settings_copy
This doesn&apos;t match, it should return WebKitWebSettings*.

&gt; WebKitWebView != webkit_web_view
This capitalization is errorneous, WebkitWebView would be correct for webkit_web_view.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>62830</commentid>
    <comment_count>19</comment_count>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2007-11-30 16:44:23 -0800</bug_when>
    <thetext>(In reply to comment #18)
&gt; &gt; WebKitWebView != webkit_web_view
&gt; This capitalization is errorneous, WebkitWebView would be correct for
&gt; webkit_web_view.
&gt; 

But it&apos;s called WebKit, and web_kit_* is just too awkward. I&apos;d say it&apos;s a sensible compromise.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>62831</commentid>
    <comment_count>20</comment_count>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2007-11-30 16:47:29 -0800</bug_when>
    <thetext>Actually if you are ultra-pedantic, the underscores separate words, not capitalization. So webkit_* is correct because WebKit is used as one word that happens to have funny capitalization.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>62832</commentid>
    <comment_count>21</comment_count>
    <who name="Christian Dywan">christian</who>
    <bug_when>2007-11-30 16:56:21 -0800</bug_when>
    <thetext>(In reply to comment #20)
&gt; Actually if you are ultra-pedantic, the underscores separate words, not
&gt; capitalization. So webkit_* is correct because WebKit is used as one word that
&gt; happens to have funny capitalization.

Little things like that can easily cause confusion. I am not just being pedantic here. We don&apos;t want users to compain and answer &quot;oh, this just happens to be a bad idea&quot;, do we? ;)

I think Webkit* would be an option. If we intentionally want to keep errorneous capitalization it must be clearly documented.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>62833</commentid>
    <comment_count>22</comment_count>
    <who name="Alp Toker">alp</who>
    <bug_when>2007-11-30 17:00:09 -0800</bug_when>
    <thetext>(In reply to comment #18)
&gt; (In reply to comment #15)
&gt; &gt; Created an attachment (id=17613) [edit]
&gt; &gt; Refactor as planned
&gt; 
&gt; This is starting to look good. However allow me a few comments.
&gt; 
&gt; &gt; WebKitWebFrame* webkit_web_frame_init_with_web_view(WebKitWebView* webView, HTMLFrameOwnerElement* element)
&gt; 
&gt; I believe this is meant to be static. And while you&apos;re at it you might give it
&gt; a n appropriate name, such as webkit_web_frame_init_with_element.
&gt; 
&gt; &gt; WebKitWebView* webkit_web_frame_get_web_view(WebKitWebFrame* frame)
&gt; This should return GtkWidget*.
&gt; 
&gt; &gt; +void webkit_web_view_go_backward(WebKitWebView* webView)
&gt; This should be s/backward/back. 
&gt; 
&gt; &gt; WebKitSettings* webkit_web_settings_copy
&gt; This doesn&apos;t match, it should return WebKitWebSettings*.
&gt; 
&gt; &gt; WebKitWebView != webkit_web_view
&gt; This capitalization is errorneous, WebkitWebView would be correct for
&gt; webkit_web_view.
&gt; 

If you look at the ChangeLog entry you&apos;ll find this patch deals only with refactoring WebKitPage -&gt; WebKitWebView and WebKitFrame -&gt; WebKitWebFrame.

The capitalisation is actually more correct this way. All language binding generators I know of deal fine with this case.

The other issues sound valid and should be fixed in individual patches, or at least not in this one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>62834</commentid>
    <comment_count>23</comment_count>
    <who name="Christian Dywan">christian</who>
    <bug_when>2007-11-30 17:14:53 -0800</bug_when>
    <thetext>(In reply to comment #22)
&gt; [snip]
&gt; If you look at the ChangeLog entry you&apos;ll find this patch deals only with
&gt; refactoring WebKitPage -&gt; WebKitWebView and WebKitFrame -&gt; WebKitWebFrame.
&gt; 
&gt; The capitalisation is actually more correct this way. All language binding
&gt; generators I know of deal fine with this case.
&gt; 
&gt; The other issues sound valid and should be fixed in individual patches, or at
&gt; least not in this one.

Okay, I accept that WebKit* is a special case. If you prefer to address the other issues in a separate patch that is of course just as fine as long as they are not lost.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>62840</commentid>
    <comment_count>24</comment_count>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2007-11-30 17:49:31 -0800</bug_when>
    <thetext>Just tested the patch (with GtkLauncher), everything seems to work fine.

As Christian says, the API is much better now, so this is good to go IMHO.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>62852</commentid>
    <comment_count>25</comment_count>
      <attachid>17615</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2007-11-30 20:11:15 -0800</bug_when>
    <thetext>Comment on attachment 17615
With ChangeLog entries

Looks like there is some inconsistent placement of * in webkitwebview.h

It&apos;s a bit hard to review this patch because it looks like svn mv was not used for many of the files in WebKit/gtk/WebView. But I trust you to get the renames right :-)

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>62855</commentid>
    <comment_count>26</comment_count>
    <who name="Alp Toker">alp</who>
    <bug_when>2007-11-30 20:44:16 -0800</bug_when>
    <thetext>Patch landed in r28273.

We&apos;ve been asked repeatedly to close bugs once the patch is landed, so I&apos;ve tried to salvage as many issues as I could from the thread here before closing this bug:

http://bugs.webkit.org/show_bug.cgi?id=16219
[GTK] API: WebKitWebSettings is not usable

http://bugs.webkit.org/show_bug.cgi?id=16218
[GTK] API: Should this entry point be called go_back rather than go_backward?

I didn&apos;t have time to file bugs for these (reasonable) API issues. Please try to file new bugs for these issues and any others I missed so they don&apos;t get lost:

&gt; WebKitWebFrame* webkit_web_frame_init_with_web_view(WebKitWebView* webView, HTMLFrameOwnerElement* element)

I believe this is meant to be static. And while you&apos;re at it you might give it
a n appropriate name, such as webkit_web_frame_init_with_element.

&gt; WebKitWebView* webkit_web_frame_get_web_view(WebKitWebFrame* frame)
This should return GtkWidget*.
</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>17501</attachid>
            <date>2007-11-24 23:23:07 -0800</date>
            <delta_ts>2007-11-27 22:10:35 -0800</delta_ts>
            <desc>API and header improvements</desc>
            <filename>api-improvements.patch</filename>
            <type>text/plain</type>
            <size>19215</size>
            <attacher name="Alp Toker">alp</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdC9ndGsvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9ndGsvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyODAxMSkKKysrIFdlYktpdC9ndGsvQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsMzQgQEAKKzIwMDctMTEtMjQgIEFscCBUb2tlciAgPGFscEBhdG9r
ZXIuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFB1YmxpYyBBUEkgZW5oYW5jZW1lbnRzOgorCisgICAgICAgIEltcGxlbWVudCB3ZWJraXRfcGFn
ZV9nZXRfZWRpdGFibGUoKSBhbmQgd2Via2l0X3BhZ2Vfc2V0X2VkaXRhYmxlKCkuCisKKyAgICAg
ICAgSW1wbGVtZW50IHdlYmtpdF9mcmFtZV9nZXRfbmFtZSgpLgorCisgICAgICAgIENvbW1lbnQg
b3V0IGRlZmluaXRpb25zIGZvciBmdW5jdGlvbnMgdGhhdCBhcmUgdW51c2FibGUgb3Igbm90Cisg
ICAgICAgIGltcGxlbWVudGVkLiBUaGlzIGhhcyBjYXVzZWQgbXVjaCBjb25mdXNpb24gZm9yIGFw
cGxpY2F0aW9uCisgICAgICAgIGRldmVsb3BlcnMuCisKKyAgICAgICAgSW1wcm92ZSBkb2N1bWVu
dGF0aW9uLgorCisgICAgICAgIENvcnJlY3QvY29uc3RpZnkgc29tZSByZXR1cm4gdHlwZXMuCisK
KyAgICAgICAgQWRkIHBhcmFtZXRlciBjaGVja3MuCisKKyAgICAgICAgTWFrZSB0aGUgZGVmYXVs
dCBmaXhlZCBmb250ICJDb3VyaWVyIE5ldyIgdG8gbWF0Y2ggdGhlIG90aGVyIFdlYgorICAgICAg
ICBmb250IG5hbWVzLgorCisgICAgICAgICogQXBpL3dlYmtpdGd0a2ZyYW1lLmNwcDoKKyAgICAg
ICAgKiBBcGkvd2Via2l0Z3RrZnJhbWUuaDoKKyAgICAgICAgKiBBcGkvd2Via2l0Z3RrcGFnZS5j
cHA6CisgICAgICAgICogQXBpL3dlYmtpdGd0a3BhZ2UuaDoKKyAgICAgICAgKiBBcGkvd2Via2l0
Z3RrcHJpdmF0ZS5oOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudEd0ay5j
cHA6CisgICAgICAgIChXZWJLaXQ6OkVkaXRvckNsaWVudDo6aXNFZGl0YWJsZSk6CisKIDIwMDct
MTEtMjQgIEFscCBUb2tlciAgPGFscEBhdG9rZXIuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IE1hcmsgUm93ZS4KSW5kZXg6IFdlYktpdC9ndGsvQXBpL3dlYmtpdGd0a2ZyYW1lLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJLaXQvZ3RrL0FwaS93ZWJraXRndGtmcmFtZS5jcHAJKHJldmlzaW9uIDI4
MDExKQorKysgV2ViS2l0L2d0ay9BcGkvd2Via2l0Z3RrZnJhbWUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAid2Via2l0Z3RrcGFnZS5oIgogI2luY2x1ZGUg
IndlYmtpdGd0a3ByaXZhdGUuaCIKIAorI2luY2x1ZGUgIkNTdHJpbmcuaCIKICNpbmNsdWRlICJG
cmFtZUxvYWRlci5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50R3RrLmgiCiAjaW5jbHVk
ZSAiRnJhbWVUcmVlLmgiCkBAIC03Myw2ICs3NCw3IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF9mcmFt
ZV9maW5hbGl6ZShHT2JqZWMKIHsKICAgICBXZWJLaXRGcmFtZVByaXZhdGUqIHByaXZhdGVEYXRh
ID0gV0VCS0lUX0ZSQU1FX0dFVF9QUklWQVRFKFdFQktJVF9GUkFNRShvYmplY3QpKTsKICAgICBw
cml2YXRlRGF0YS0+ZnJhbWUtPmxvYWRlcigpLT5jYW5jZWxBbmRDbGVhcigpOworICAgIGdfZnJl
ZShwcml2YXRlRGF0YS0+bmFtZSk7CiAgICAgZ19mcmVlKHByaXZhdGVEYXRhLT50aXRsZSk7CiAg
ICAgZ19mcmVlKHByaXZhdGVEYXRhLT5sb2NhdGlvbik7CiAgICAgZGVsZXRlIHByaXZhdGVEYXRh
LT5mcmFtZTsKQEAgLTE0NSwxMCArMTQ3LDIxIEBAIHN0YXRpYyB2b2lkIHdlYmtpdF9mcmFtZV9y
ZWFsX3RpdGxlX2NoYW4KIAogc3RhdGljIHZvaWQgd2Via2l0X2ZyYW1lX2luaXQoV2ViS2l0RnJh
bWUqIGZyYW1lKQogeworICAgIC8vIFRPRE86IE1vdmUgY29uc3RydWN0b3IgY29kZSBoZXJlLgog
fQogCi1HT2JqZWN0KiB3ZWJraXRfZnJhbWVfbmV3KFdlYktpdFBhZ2UqIHBhZ2UpCisvKioKKyAq
IHdlYmtpdF9mcmFtZV9uZXc6CisgKiBAcGFnZTogdGhlIGNvbnRyb2xsaW5nICNXZWJLaXRQYWdl
CisgKgorICogQ3JlYXRlcyBhIG5ldyAjV2ViS2l0RnJhbWUgaW5pdGlhbGl6ZWQgd2l0aCBhIGNv
bnRyb2xsaW5nICNXZWJLaXRQYWdlLgorICoKKyAqIFJldHVybnM6IGEgbmV3ICNXZWJLaXRGcmFt
ZQorICoqLworV2ViS2l0RnJhbWUqIHdlYmtpdF9mcmFtZV9uZXcoV2ViS2l0UGFnZSogcGFnZSkK
IHsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfUEFHRShwYWdlKSwgTlVMTCk7
CisKICAgICBXZWJLaXRGcmFtZSogZnJhbWUgPSBXRUJLSVRfRlJBTUUoZ19vYmplY3RfbmV3KFdF
QktJVF9UWVBFX0ZSQU1FLCBOVUxMKSk7CiAgICAgV2ViS2l0RnJhbWVQcml2YXRlKiBmcmFtZURh
dGEgPSBXRUJLSVRfRlJBTUVfR0VUX1BSSVZBVEUoZnJhbWUpOwogICAgIFdlYktpdFBhZ2VQcml2
YXRlKiBwYWdlRGF0YSA9IFdFQktJVF9QQUdFX0dFVF9QUklWQVRFKHBhZ2UpOwpAQCAtMTYzLDEz
ICsxNzYsMTQgQEAgR09iamVjdCogd2Via2l0X2ZyYW1lX25ldyhXZWJLaXRQYWdlKiBwYQogICAg
IGZyYW1lRGF0YS0+ZnJhbWUtPnNldFZpZXcoZnJhbWVWaWV3KTsKICAgICBmcmFtZURhdGEtPmZy
YW1lLT5pbml0KCk7CiAgICAgZnJhbWVEYXRhLT5wYWdlID0gcGFnZTsKKyAgICBmcmFtZURhdGEt
Pm5hbWUgPSAwOwogICAgIGZyYW1lRGF0YS0+dGl0bGUgPSAwOwogICAgIGZyYW1lRGF0YS0+bG9j
YXRpb24gPSAwOwogCi0gICAgcmV0dXJuIEdfT0JKRUNUKGZyYW1lKTsKKyAgICByZXR1cm4gZnJh
bWU7CiB9CiAKLUdPYmplY3QqIHdlYmtpdF9mcmFtZV9pbml0X3dpdGhfcGFnZShXZWJLaXRQYWdl
KiBwYWdlLCBIVE1MRnJhbWVPd25lckVsZW1lbnQqIGVsZW1lbnQpCitXZWJLaXRGcmFtZSogd2Vi
a2l0X2ZyYW1lX2luaXRfd2l0aF9wYWdlKFdlYktpdFBhZ2UqIHBhZ2UsIEhUTUxGcmFtZU93bmVy
RWxlbWVudCogZWxlbWVudCkKIHsKICAgICBXZWJLaXRGcmFtZSogZnJhbWUgPSBXRUJLSVRfRlJB
TUUoZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX0ZSQU1FLCBOVUxMKSk7CiAgICAgV2ViS2l0RnJh
bWVQcml2YXRlKiBmcmFtZURhdGEgPSBXRUJLSVRfRlJBTUVfR0VUX1BSSVZBVEUoZnJhbWUpOwpA
QCAtMTg1LDI2ICsxOTksNjggQEAgR09iamVjdCogd2Via2l0X2ZyYW1lX2luaXRfd2l0aF9wYWdl
KFdlYgogICAgIGZyYW1lRGF0YS0+ZnJhbWUtPmluaXQoKTsKICAgICBmcmFtZURhdGEtPnBhZ2Ug
PSBwYWdlOwogCi0gICAgcmV0dXJuIEdfT0JKRUNUKGZyYW1lKTsKKyAgICByZXR1cm4gZnJhbWU7
CiB9CiAKLVdlYktpdFBhZ2UqCi13ZWJraXRfZnJhbWVfZ2V0X3BhZ2UoV2ViS2l0RnJhbWUqIGZy
YW1lKQorY29uc3QgZ2NoYXIqIHdlYmtpdF9mcmFtZV9nZXRfdGl0bGUoV2ViS2l0RnJhbWUqIGZy
YW1lKQogeworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19GUkFNRShmcmFtZSks
IE5VTEwpOworCiAgICAgV2ViS2l0RnJhbWVQcml2YXRlKiBmcmFtZURhdGEgPSBXRUJLSVRfRlJB
TUVfR0VUX1BSSVZBVEUoZnJhbWUpOwotICAgIHJldHVybiBmcmFtZURhdGEtPnBhZ2U7CisgICAg
cmV0dXJuIGZyYW1lRGF0YS0+dGl0bGU7CiB9CiAKLWdjaGFyKiB3ZWJraXRfZnJhbWVfZ2V0X3Rp
dGxlKFdlYktpdEZyYW1lKiBmcmFtZSkKK2NvbnN0IGdjaGFyKiB3ZWJraXRfZnJhbWVfZ2V0X2xv
Y2F0aW9uKFdlYktpdEZyYW1lKiBmcmFtZSkKIHsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChX
RUJLSVRfSVNfRlJBTUUoZnJhbWUpLCBOVUxMKTsKKwogICAgIFdlYktpdEZyYW1lUHJpdmF0ZSog
ZnJhbWVEYXRhID0gV0VCS0lUX0ZSQU1FX0dFVF9QUklWQVRFKGZyYW1lKTsKLSAgICByZXR1cm4g
ZnJhbWVEYXRhLT50aXRsZTsKKyAgICByZXR1cm4gZnJhbWVEYXRhLT5sb2NhdGlvbjsKIH0KIAot
Z2NoYXIqIHdlYmtpdF9mcmFtZV9nZXRfbG9jYXRpb24oV2ViS2l0RnJhbWUqIGZyYW1lKQorLyoq
CisgKiB3ZWJraXRfZnJhbWVfZ2V0X3BhZ2U6CisgKiBAZnJhbWU6IGEgI1dlYktpdEZyYW1lCisg
KgorICogUmV0dXJucyB0aGUgI1dlYktpdFBhZ2UgdGhhdCBtYW5hZ2VzIHRoaXMgI1dlYktpdEZy
YW1lLgorICoKKyAqIFRoZSAjV2ViS2l0UGFnZSByZXR1cm5lZCBtYW5hZ2VzIHRoZSBlbnRpcmUg
aGllcmFyY2h5IG9mICNXZWJLaXRGcmFtZQorICogb2JqZWN0cyB0aGF0IGNvbnRhaW5zIEBmcmFt
ZS4KKyAqCisgKiBSZXR1cm4gdmFsdWU6IHRoZSAjV2ViS2l0UGFnZSB0aGF0IG1hbmFnZXMgQGZy
YW1lCisgKi8KK1dlYktpdFBhZ2UqIHdlYmtpdF9mcmFtZV9nZXRfcGFnZShXZWJLaXRGcmFtZSog
ZnJhbWUpCiB7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX0ZSQU1FKGZyYW1l
KSwgTlVMTCk7CisKICAgICBXZWJLaXRGcmFtZVByaXZhdGUqIGZyYW1lRGF0YSA9IFdFQktJVF9G
UkFNRV9HRVRfUFJJVkFURShmcmFtZSk7Ci0gICAgcmV0dXJuIGZyYW1lRGF0YS0+bG9jYXRpb247
CisgICAgcmV0dXJuIGZyYW1lRGF0YS0+cGFnZTsKK30KKworLyoqCisgKiB3ZWJraXRfZnJhbWVf
Z2V0X25hbWU6CisgKiBAZnJhbWU6IGEgI1dlYktpdEZyYW1lCisgKgorICogUmV0dXJucyB0aGUg
QGZyYW1lJ3MgbmFtZQorICoKKyAqIFJldHVybiB2YWx1ZTogdGhlIG5hbWUgb2YgQGZyYW1lCisg
Ki8KK2NvbnN0IGdjaGFyKiB3ZWJraXRfZnJhbWVfZ2V0X25hbWUoV2ViS2l0RnJhbWUqIGZyYW1l
KQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19GUkFNRShmcmFtZSksIE5V
TEwpOworCisgICAgV2ViS2l0RnJhbWVQcml2YXRlKiBmcmFtZURhdGEgPSBXRUJLSVRfRlJBTUVf
R0VUX1BSSVZBVEUoZnJhbWUpOworCisgICAgaWYgKGZyYW1lRGF0YS0+bmFtZSkKKyAgICAgICAg
cmV0dXJuIGZyYW1lRGF0YS0+bmFtZTsKKworICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKGZy
YW1lKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChjb3JlRnJhbWUsIE5VTEwpOworCisgICAg
U3RyaW5nIHN0cmluZyA9IGNvcmVGcmFtZS0+dHJlZSgpLT5uYW1lKCk7CisgICAgZnJhbWVEYXRh
LT5uYW1lID0gZ19zdHJkdXAoc3RyaW5nLnV0ZjgoKS5kYXRhKCkpOworCisgICAgcmV0dXJuIGZy
YW1lRGF0YS0+bmFtZTsKIH0KIAogLyoqCkluZGV4OiBXZWJLaXQvZ3RrL0FwaS93ZWJraXRndGtm
cmFtZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9ndGsvQXBpL3dlYmtpdGd0a2ZyYW1lLmgJKHJl
dmlzaW9uIDI4MDExKQorKysgV2ViS2l0L2d0ay9BcGkvd2Via2l0Z3RrZnJhbWUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNzEsMTIgKzcxLDEzIEBAIHN0cnVjdCBfV2ViS2l0RnJhbWVDbGFzcyB7CiBX
RUJLSVRfQVBJIEdUeXBlCiB3ZWJraXRfZnJhbWVfZ2V0X3R5cGUgKHZvaWQpOwogCi1XRUJLSVRf
QVBJIEdPYmplY3QqCi13ZWJraXRfZnJhbWVfbmV3IChXZWJLaXRQYWdlICpwYWdlKTsKK1dFQktJ
VF9BUEkgV2ViS2l0RnJhbWUqCit3ZWJraXRfZnJhbWVfbmV3IChXZWJLaXRQYWdlKiBwYWdlKTsK
IAogV0VCS0lUX0FQSSBXZWJLaXRQYWdlKgogd2Via2l0X2ZyYW1lX2dldF9wYWdlIChXZWJLaXRG
cmFtZSogZnJhbWUpOwogCisvKgogV0VCS0lUX0FQSSBnY2hhcioKIHdlYmtpdF9mcmFtZV9nZXRf
bWFya3VwIChXZWJLaXRGcmFtZSogZnJhbWUpOwogCkBAIC04NSwxMyArODYsMTUgQEAgd2Via2l0
X2ZyYW1lX2dldF9pbm5lcl90ZXh0IChXZWJLaXRGcmFtZQogCiBXRUJLSVRfQVBJIGdjaGFyKgog
d2Via2l0X2ZyYW1lX2dldF9zZWxlY3RlZF90ZXh0IChXZWJLaXRGcmFtZSogZnJhbWUpOworKi8K
IAotV0VCS0lUX0FQSSBnY2hhcioKK1dFQktJVF9BUEkgY29uc3QgZ2NoYXIqCiB3ZWJraXRfZnJh
bWVfZ2V0X3RpdGxlIChXZWJLaXRGcmFtZSogZnJhbWUpOwogCi1XRUJLSVRfQVBJIGdjaGFyKgor
V0VCS0lUX0FQSSBjb25zdCBnY2hhcioKIHdlYmtpdF9mcmFtZV9nZXRfbG9jYXRpb24gKFdlYktp
dEZyYW1lKiBmcmFtZSk7CiAKKy8qCiBXRUJLSVRfQVBJIEdTTGlzdCoKIHdlYmtpdF9mcmFtZV9n
ZXRfY2hpbGRfZnJhbWVzIChXZWJLaXRGcmFtZSogZnJhbWUpOwogCkBAIC0xMDAsMTAgKzEwMywx
NCBAQCB3ZWJraXRfZnJhbWVfZ2V0X3Bvc2l0aW9uIChXZWJLaXRGcmFtZSogCiAKIFdFQktJVF9B
UEkgR2RrUmVjdGFuZ2xlKgogd2Via2l0X2ZyYW1lX2dldF9yZWN0YW5nbGUgKFdlYktpdEZyYW1l
KiBmcmFtZSk7CisqLwogCiBXRUJLSVRfQVBJIFdlYktpdFBhZ2UqCiB3ZWJraXRfZnJhbWVfZ2V0
X3BhZ2UgKFdlYktpdEZyYW1lKiBmcmFtZSk7CiAKK1dFQktJVF9BUEkgY29uc3QgZ2NoYXIqCit3
ZWJraXRfZnJhbWVfZ2V0X25hbWUgKFdlYktpdEZyYW1lKiBmcmFtZSk7CisKIFdFQktJVF9BUEkg
V2ViS2l0RnJhbWUqCiB3ZWJraXRfZnJhbWVfZ2V0X3BhcmVudCAoV2ViS2l0RnJhbWUqIGZyYW1l
KTsKIApJbmRleDogV2ViS2l0L2d0ay9BcGkvd2Via2l0Z3RrcGFnZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViS2l0L2d0ay9BcGkvd2Via2l0Z3RrcGFnZS5jcHAJKHJldmlzaW9uIDI4MDExKQorKysg
V2ViS2l0L2d0ay9BcGkvd2Via2l0Z3RrcGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIsNiAr
Miw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIK
ICAqIENvcHlyaWdodCAoQykgMjAwNyBDaHJpc3RpYW4gRHl3YW4gPGNocmlzdGlhbkB0d290b2Fz
dHMuZGU+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgWGFuIExvcGV6IDx4YW5AZ25vbWUub3JnPgor
ICogQ29weXJpZ2h0IChDKSAyMDA3IEFscCBUb2tlciA8YWxwQGF0b2tlci5jb20+CiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM4NywxMSArMzg4LDEyIEBAIHN0YXRpYyB2b2lk
IHdlYmtpdF9wYWdlX2NsYXNzX2luaXQoV2ViS2kKICAgICAgKiBzaWduYWxzCiAgICAgICovCiAg
ICAgLyoqCi0gICAgICogV2ViS2l0UGFnZTo6bG9hZC1zdGFydGVkCisgICAgICogV2ViS2l0UGFn
ZTo6bG9hZC1zdGFydGVkOgorICAgICAqCiAgICAgICogQHBhZ2U6IHRoZSBvYmplY3Qgb24gd2hp
Y2ggdGhlIHNpZ25hbCBpcyBlbWl0dGVkCiAgICAgICogQGZyYW1lOiB0aGUgZnJhbWUgZ29pbmcg
dG8gZG8gdGhlIGxvYWQKICAgICAgKgotICAgICAqIFdoZW4gYSBXZWJLaXRGcmFtZSBiZWdpbnMg
dG8gbG9hZCB0aGlzIHNpZ25hbCBpcyBlbWl0dGVkLgorICAgICAqIFdoZW4gYSAjV2ViS2l0RnJh
bWUgYmVnaW5zIHRvIGxvYWQgdGhpcyBzaWduYWwgaXMgZW1pdHRlZC4KICAgICAgKi8KICAgICB3
ZWJraXRfcGFnZV9zaWduYWxzW0xPQURfU1RBUlRFRF0gPSBnX3NpZ25hbF9uZXcoImxvYWRfc3Rh
cnRlZCIsCiAgICAgICAgICAgICBHX1RZUEVfRlJPTV9DTEFTUyhwYWdlQ2xhc3MpLApAQCAtNDA0
LDkgKzQwNiwxMCBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfcGFnZV9jbGFzc19pbml0KFdlYktpCiAg
ICAgICAgICAgICBXRUJLSVRfVFlQRV9GUkFNRSk7CiAKICAgICAvKioKLSAgICAgKiBXZWJLaXRQ
YWdlOjpsb2FkLXByb2dyZXNzLWNoYW5nZWQKLSAgICAgKiBAcGFnZTogVGhlIFdlYktpdFBhZ2UK
LSAgICAgKiBAcHJvZ3Jlc3M6IEdsb2JhbCBwcm9ncmVzcworICAgICAqIFdlYktpdFBhZ2U6Omxv
YWQtcHJvZ3Jlc3MtY2hhbmdlZDoKKyAgICAgKgorICAgICAqIEBwYWdlOiB0aGUgI1dlYktpdFBh
Z2UKKyAgICAgKiBAcHJvZ3Jlc3M6IHRoZSBnbG9iYWwgcHJvZ3Jlc3MKICAgICAgKi8KICAgICB3
ZWJraXRfcGFnZV9zaWduYWxzW0xPQURfUFJPR1JFU1NfQ0hBTkdFRF0gPSBnX3NpZ25hbF9uZXco
ImxvYWRfcHJvZ3Jlc3NfY2hhbmdlZCIsCiAgICAgICAgICAgICBHX1RZUEVfRlJPTV9DTEFTUyhw
YWdlQ2xhc3MpLApAQCAtNDc4LDcgKzQ4MSw4IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF9wYWdlX2Ns
YXNzX2luaXQoV2ViS2kKICAgICAgICAgICAgIEdfVFlQRV9OT05FLCAwKTsKIAogICAgIC8qKgot
ICAgICAqIFdlYktpdFBhZ2U6OmNvbnNvbGUtbWVzc2FnZQorICAgICAqIFdlYktpdFBhZ2U6OmNv
bnNvbGUtbWVzc2FnZToKKyAgICAgKgogICAgICAqIEBwYWdlOiB0aGUgb2JqZWN0IG9uIHdoaWNo
IHRoZSBzaWduYWwgaXMgZW1pdHRlZAogICAgICAqIEBtZXNzYWdlOiB0aGUgbWVzc2FnZSB0ZXh0
CiAgICAgICogQGxpbmU6IHRoZSBsaW5lIHdoZXJlIHRoZSBlcnJvciBvY2N1cmVkCkBAIC00OTgs
NyArNTAyLDggQEAgc3RhdGljIHZvaWQgd2Via2l0X3BhZ2VfY2xhc3NfaW5pdChXZWJLaQogICAg
ICAgICAgICAgR19UWVBFX1NUUklORywgR19UWVBFX0lOVCwgR19UWVBFX1NUUklORyk7CiAKICAg
ICAvKioKLSAgICAgKiBXZWJLaXRQYWdlOjpzY3JpcHQtYWxlcnQKKyAgICAgKiBXZWJLaXRQYWdl
OjpzY3JpcHQtYWxlcnQ6CisgICAgICoKICAgICAgKiBAcGFnZTogdGhlIG9iamVjdCBvbiB3aGlj
aCB0aGUgc2lnbmFsIGlzIGVtaXR0ZWQKICAgICAgKiBAZnJhbWU6IHRoZSByZWxldmFudCBmcmFt
ZQogICAgICAqIEBtZXNzYWdlOiB0aGUgbWVzc2FnZSB0ZXh0CkBAIC01MTcsMTEgKzUyMiwxMiBA
QCBzdGF0aWMgdm9pZCB3ZWJraXRfcGFnZV9jbGFzc19pbml0KFdlYktpCiAgICAgICAgICAgICBH
X1RZUEVfT0JKRUNULCBHX1RZUEVfU1RSSU5HKTsKIAogICAgIC8qKgotICAgICAqIFdlYktpdFBh
Z2U6OnNjcmlwdC1jb25maXJtCisgICAgICogV2ViS2l0UGFnZTo6c2NyaXB0LWNvbmZpcm06Cisg
ICAgICoKICAgICAgKiBAcGFnZTogdGhlIG9iamVjdCBvbiB3aGljaCB0aGUgc2lnbmFsIGlzIGVt
aXR0ZWQKICAgICAgKiBAZnJhbWU6IHRoZSByZWxldmFudCBmcmFtZQogICAgICAqIEBtZXNzYWdl
OiB0aGUgbWVzc2FnZSB0ZXh0Ci0gICAgICogQGNvbmZpcm1lZDogSGFzIHRoZSBkaWFsb2cgYmVl
biBjb25maXJtZWQ/CisgICAgICogQGNvbmZpcm1lZDogd2hldGhlciB0aGUgZGlhbG9nIGJlZW4g
Y29uZmlybWVkCiAgICAgICogQHJldHVybjogVFJVRSB0byBzdG9wIG90aGVyIGhhbmRsZXJzIGZy
b20gYmVpbmcgaW52b2tlZCBmb3IgdGhlIGV2ZW50LiBGQUxTRSB0byBwcm9wYWdhdGUgdGhlIGV2
ZW50IGZ1cnRoZXIuCiAgICAgICoKICAgICAgKiBBIEphdmFTY3JpcHQgY29uZmlybSBkaWFsb2cg
d2FzIGNyZWF0ZWQsIHByb3ZpZGluZyBZZXMgYW5kIE5vIGJ1dHRvbnMuCkBAIC01MzcsNyArNTQz
LDggQEAgc3RhdGljIHZvaWQgd2Via2l0X3BhZ2VfY2xhc3NfaW5pdChXZWJLaQogICAgICAgICAg
ICAgR19UWVBFX09CSkVDVCwgR19UWVBFX1NUUklORywgR19UWVBFX0JPT0xFQU4pOwogCiAgICAg
LyoqCi0gICAgICogV2ViS2l0UGFnZTo6c2NyaXB0LXByb21wdAorICAgICAqIFdlYktpdFBhZ2U6
OnNjcmlwdC1wcm9tcHQ6CisgICAgICoKICAgICAgKiBAcGFnZTogdGhlIG9iamVjdCBvbiB3aGlj
aCB0aGUgc2lnbmFsIGlzIGVtaXR0ZWQKICAgICAgKiBAZnJhbWU6IHRoZSByZWxldmFudCBmcmFt
ZQogICAgICAqIEBtZXNzYWdlOiB0aGUgbWVzc2FnZSB0ZXh0CkBAIC02MTYsMTEgKzYyMywxMiBA
QCBzdGF0aWMgdm9pZCB3ZWJraXRfcGFnZV9pbml0KFdlYktpdFBhZ2UqCiAgICAgc2V0dGluZ3Mt
PnNldERlZmF1bHRGb250U2l6ZSgxNCk7CiAgICAgc2V0dGluZ3MtPnNldFNlcmlmRm9udEZhbWls
eSgiVGltZXMgTmV3IFJvbWFuIik7CiAgICAgc2V0dGluZ3MtPnNldFNhbnNTZXJpZkZvbnRGYW1p
bHkoIkFyaWFsIik7Ci0gICAgc2V0dGluZ3MtPnNldEZpeGVkRm9udEZhbWlseSgiQ291cmllciIp
OworICAgIHNldHRpbmdzLT5zZXRGaXhlZEZvbnRGYW1pbHkoIkNvdXJpZXIgTmV3Iik7CiAgICAg
c2V0dGluZ3MtPnNldFN0YW5kYXJkRm9udEZhbWlseSgiQXJpYWwiKTsKIAogICAgIEdUS19XSURH
RVRfU0VUX0ZMQUdTKHBhZ2UsIEdUS19DQU5fRk9DVVMpOwogICAgIHBhZ2VEYXRhLT5tYWluRnJh
bWUgPSBXRUJLSVRfRlJBTUUod2Via2l0X2ZyYW1lX25ldyhwYWdlKSk7CisgICAgcGFnZURhdGEt
PmVkaXRhYmxlID0gZmFsc2U7CiB9CiAKIEd0a1dpZGdldCogd2Via2l0X3BhZ2VfbmV3KHZvaWQp
CkBAIC02MzIsMTcgKzY0MCwyNCBAQCBHdGtXaWRnZXQqIHdlYmtpdF9wYWdlX25ldyh2b2lkKQog
CiB2b2lkIHdlYmtpdF9wYWdlX3NldF9zZXR0aW5ncyhXZWJLaXRQYWdlKiBwYWdlLCBXZWJLaXRT
ZXR0aW5ncyogc2V0dGluZ3MpCiB7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfUEFH
RShwYWdlKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbChzZXR0aW5ncyk7CisKICAgICBub3RJbXBs
ZW1lbnRlZCgpOwogfQogCiBXZWJLaXRTZXR0aW5ncyogd2Via2l0X3BhZ2VfZ2V0X3NldHRpbmdz
KFdlYktpdFBhZ2UqIHBhZ2UpCiB7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lT
X1BBR0UocGFnZSksIE5VTEwpOworCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4g
MDsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogdm9pZCB3ZWJraXRfcGFnZV9nb19iYWNrd2FyZChX
ZWJLaXRQYWdlKiBwYWdlKQogeworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX1BBR0Uo
cGFnZSkpOworCiAgICAgV2ViS2l0UGFnZVByaXZhdGUqIHBhZ2VEYXRhID0gV0VCS0lUX1BBR0Vf
R0VUX1BSSVZBVEUocGFnZSk7CiAgICAgV2ViS2l0RnJhbWVQcml2YXRlKiBmcmFtZURhdGEgPSBX
RUJLSVRfRlJBTUVfR0VUX1BSSVZBVEUocGFnZURhdGEtPm1haW5GcmFtZSk7CiAgICAgZnJhbWVE
YXRhLT5mcmFtZS0+bG9hZGVyKCktPmdvQmFja09yRm9yd2FyZCgtMSk7CkBAIC02NTAsNiArNjY1
LDggQEAgdm9pZCB3ZWJraXRfcGFnZV9nb19iYWNrd2FyZChXZWJLaXRQYWdlKgogCiB2b2lkIHdl
YmtpdF9wYWdlX2dvX2ZvcndhcmQoV2ViS2l0UGFnZSogcGFnZSkKIHsKKyAgICBnX3JldHVybl9p
Zl9mYWlsKFdFQktJVF9JU19QQUdFKHBhZ2UpKTsKKwogICAgIFdlYktpdFBhZ2VQcml2YXRlKiBw
YWdlRGF0YSA9IFdFQktJVF9QQUdFX0dFVF9QUklWQVRFKHBhZ2UpOwogICAgIFdlYktpdEZyYW1l
UHJpdmF0ZSogZnJhbWVEYXRhID0gV0VCS0lUX0ZSQU1FX0dFVF9QUklWQVRFKHBhZ2VEYXRhLT5t
YWluRnJhbWUpOwogICAgIGZyYW1lRGF0YS0+ZnJhbWUtPmxvYWRlcigpLT5nb0JhY2tPckZvcndh
cmQoMSk7CkBAIC02NTcsNiArNjc0LDggQEAgdm9pZCB3ZWJraXRfcGFnZV9nb19mb3J3YXJkKFdl
YktpdFBhZ2UqIAogCiBnYm9vbGVhbiB3ZWJraXRfcGFnZV9jYW5fZ29fYmFja3dhcmQoV2ViS2l0
UGFnZSogcGFnZSkKIHsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfUEFHRShw
YWdlKSwgRkFMU0UpOworCiAgICAgV2ViS2l0UGFnZVByaXZhdGUqIHBhZ2VEYXRhID0gV0VCS0lU
X1BBR0VfR0VUX1BSSVZBVEUocGFnZSk7CiAgICAgV2ViS2l0RnJhbWVQcml2YXRlKiBmcmFtZURh
dGEgPSBXRUJLSVRfRlJBTUVfR0VUX1BSSVZBVEUocGFnZURhdGEtPm1haW5GcmFtZSk7CiAgICAg
cmV0dXJuIGZyYW1lRGF0YS0+ZnJhbWUtPmxvYWRlcigpLT5jYW5Hb0JhY2tPckZvcndhcmQoLTEp
OwpAQCAtNjY0LDYgKzY4Myw4IEBAIGdib29sZWFuIHdlYmtpdF9wYWdlX2Nhbl9nb19iYWNrd2Fy
ZChXZWIKIAogZ2Jvb2xlYW4gd2Via2l0X3BhZ2VfY2FuX2dvX2ZvcndhcmQoV2ViS2l0UGFnZSog
cGFnZSkKIHsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfUEFHRShwYWdlKSwg
RkFMU0UpOworCiAgICAgV2ViS2l0UGFnZVByaXZhdGUqIHBhZ2VEYXRhID0gV0VCS0lUX1BBR0Vf
R0VUX1BSSVZBVEUocGFnZSk7CiAgICAgV2ViS2l0RnJhbWVQcml2YXRlKiBmcmFtZURhdGEgPSBX
RUJLSVRfRlJBTUVfR0VUX1BSSVZBVEUocGFnZURhdGEtPm1haW5GcmFtZSk7CiAgICAgcmV0dXJu
IGZyYW1lRGF0YS0+ZnJhbWUtPmxvYWRlcigpLT5jYW5Hb0JhY2tPckZvcndhcmQoMSk7CkBAIC02
NzEsNiArNjkyLDggQEAgZ2Jvb2xlYW4gd2Via2l0X3BhZ2VfY2FuX2dvX2ZvcndhcmQoV2ViSwog
CiB2b2lkIHdlYmtpdF9wYWdlX29wZW4oV2ViS2l0UGFnZSogcGFnZSwgY29uc3QgZ2NoYXIqIHVy
bCkKIHsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19QQUdFKHBhZ2UpKTsKKwogICAg
IFdlYktpdFBhZ2VQcml2YXRlKiBwYWdlRGF0YSA9IFdFQktJVF9QQUdFX0dFVF9QUklWQVRFKHBh
Z2UpOwogICAgIFdlYktpdEZyYW1lUHJpdmF0ZSogZnJhbWVEYXRhID0gV0VCS0lUX0ZSQU1FX0dF
VF9QUklWQVRFKHBhZ2VEYXRhLT5tYWluRnJhbWUpOwogCkBAIC02ODAsNiArNzAzLDggQEAgdm9p
ZCB3ZWJraXRfcGFnZV9vcGVuKFdlYktpdFBhZ2UqIHBhZ2UsIAogCiB2b2lkIHdlYmtpdF9wYWdl
X3JlbG9hZChXZWJLaXRQYWdlKiBwYWdlKQogeworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lU
X0lTX1BBR0UocGFnZSkpOworCiAgICAgV2ViS2l0UGFnZVByaXZhdGUqIHBhZ2VEYXRhID0gV0VC
S0lUX1BBR0VfR0VUX1BSSVZBVEUocGFnZSk7CiAgICAgV2ViS2l0RnJhbWVQcml2YXRlKiBmcmFt
ZURhdGEgPSBXRUJLSVRfRlJBTUVfR0VUX1BSSVZBVEUocGFnZURhdGEtPm1haW5GcmFtZSk7CiAg
ICAgZnJhbWVEYXRhLT5mcmFtZS0+bG9hZGVyKCktPnJlbG9hZCgpOwpAQCAtNjg3LDYgKzcxMiw4
IEBAIHZvaWQgd2Via2l0X3BhZ2VfcmVsb2FkKFdlYktpdFBhZ2UqIHBhZ2UKIAogdm9pZCB3ZWJr
aXRfcGFnZV9sb2FkX3N0cmluZyhXZWJLaXRQYWdlKiBwYWdlLCBjb25zdCBnY2hhciogY29udGVu
dCwgY29uc3QgZ2NoYXIqIGNvbnRlbnRNaW1lVHlwZSwgY29uc3QgZ2NoYXIqIGNvbnRlbnRFbmNv
ZGluZywgY29uc3QgZ2NoYXIqIGJhc2VVcmwpCiB7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJL
SVRfSVNfUEFHRShwYWdlKSk7CisKICAgICBXZWJLaXRQYWdlUHJpdmF0ZSogcGFnZURhdGEgPSBX
RUJLSVRfUEFHRV9HRVRfUFJJVkFURShwYWdlKTsKICAgICBXZWJLaXRGcmFtZVByaXZhdGUqIGZy
YW1lRGF0YSA9IFdFQktJVF9GUkFNRV9HRVRfUFJJVkFURShwYWdlRGF0YS0+bWFpbkZyYW1lKTsK
IApAQCAtNjk5LDExICs3MjYsMTUgQEAgdm9pZCB3ZWJraXRfcGFnZV9sb2FkX3N0cmluZyhXZWJL
aXRQYWdlKgogCiB2b2lkIHdlYmtpdF9wYWdlX2xvYWRfaHRtbF9zdHJpbmcoV2ViS2l0UGFnZSog
cGFnZSwgY29uc3QgZ2NoYXIqIGNvbnRlbnQsIGNvbnN0IGdjaGFyKiBiYXNlVXJsKQogeworICAg
IGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX1BBR0UocGFnZSkpOworCiAgICAgd2Via2l0X3Bh
Z2VfbG9hZF9zdHJpbmcocGFnZSwgY29udGVudCwgInRleHQvaHRtbCIsICJVVEYtOCIsIGJhc2VV
cmwpOwogfQogCiB2b2lkIHdlYmtpdF9wYWdlX3N0b3BfbG9hZGluZyhXZWJLaXRQYWdlKiBwYWdl
KQogeworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX1BBR0UocGFnZSkpOworCiAgICAg
V2ViS2l0UGFnZVByaXZhdGUqIHBhZ2VEYXRhID0gV0VCS0lUX1BBR0VfR0VUX1BSSVZBVEUocGFn
ZSk7CiAgICAgV2ViS2l0RnJhbWVQcml2YXRlKiBmcmFtZURhdGEgPSBXRUJLSVRfRlJBTUVfR0VU
X1BSSVZBVEUocGFnZURhdGEtPm1haW5GcmFtZSk7CiAKQEAgLTcxMywxNiArNzQ0LDg4IEBAIHZv
aWQgd2Via2l0X3BhZ2Vfc3RvcF9sb2FkaW5nKFdlYktpdFBhZ2UKIAogV2ViS2l0RnJhbWUqIHdl
YmtpdF9wYWdlX2dldF9tYWluX2ZyYW1lKFdlYktpdFBhZ2UqIHBhZ2UpCiB7CisgICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1BBR0UocGFnZSksIE5VTEwpOworCiAgICAgV2ViS2l0
UGFnZVByaXZhdGUqIHBhZ2VEYXRhID0gV0VCS0lUX1BBR0VfR0VUX1BSSVZBVEUocGFnZSk7CiAg
ICAgcmV0dXJuIHBhZ2VEYXRhLT5tYWluRnJhbWU7CiB9CiAKIHZvaWQgd2Via2l0X3BhZ2VfZXhl
Y3V0ZV9zY3JpcHQoV2ViS2l0UGFnZSogcGFnZSwgY29uc3QgZ2NoYXIqIHNjcmlwdCkKIHsKKyAg
ICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19QQUdFKHBhZ2UpKTsKKyAgICBnX3JldHVybl9p
Zl9mYWlsKHNjcmlwdCk7CisKICAgICBXZWJLaXRQYWdlUHJpdmF0ZSogcGFnZURhdGEgPSBXRUJL
SVRfUEFHRV9HRVRfUFJJVkFURShwYWdlKTsKICAgICBXZWJLaXRGcmFtZVByaXZhdGUqIGZyYW1l
RGF0YSA9IFdFQktJVF9GUkFNRV9HRVRfUFJJVkFURShwYWdlRGF0YS0+bWFpbkZyYW1lKTsKIAog
ICAgIGlmIChGcmFtZUxvYWRlciogbG9hZGVyID0gZnJhbWVEYXRhLT5mcmFtZS0+bG9hZGVyKCkp
CiAgICAgICAgIGxvYWRlci0+ZXhlY3V0ZVNjcmlwdChTdHJpbmc6OmZyb21VVEY4KHNjcmlwdCks
IHRydWUpOwogfQorCisvKioKKyAqIHdlYmtpdF9wYWdlX2dldF9lZGl0YWJsZToKKyAqIEBwYWdl
OiBhICNXZWJLaXRQYWdlCisgKgorICogUmV0dXJucyB3aGV0aGVyIHRoZSB1c2VyIGlzIGFsbG93
ZWQgdG8gZWRpdCB0aGUgZG9jdW1lbnQuCisgKgorICogUmV0dXJucyAlVFJVRSBpZiBAcGFnZSBh
bGxvd3MgdGhlIHVzZXIgdG8gZWRpdCB0aGUgSFRNTCBkb2N1bWVudCwgJUZBTFNFIGlmCisgKiBp
dCBkb2Vzbid0LiBZb3UgY2FuIGNoYW5nZSBAcGFnZSdzIGRvY3VtZW50IHByb2dyYW1tYXRpY2Fs
bHkgcmVnYXJkbGVzcyBvZgorICogdGhpcyBzZXR0aW5nLgorICoKKyAqIFJldHVybiB2YWx1ZTog
YSAjZ2Jvb2xlYW4gaW5kaWNhdGluZyB0aGUgZWRpdGFibGUgc3RhdGUKKyAqLworZ2Jvb2xlYW4g
d2Via2l0X3BhZ2VfZ2V0X2VkaXRhYmxlKFdlYktpdFBhZ2UqIHBhZ2UpCit7CisgICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1BBR0UocGFnZSksIEZBTFNFKTsKKworICAgIFdlYktp
dFBhZ2VQcml2YXRlKiBwYWdlRGF0YSA9IFdFQktJVF9QQUdFX0dFVF9QUklWQVRFKHBhZ2UpOwor
ICAgIEFTU0VSVChwYWdlRGF0YSk7CisKKyAgICByZXR1cm4gcGFnZURhdGEtPmVkaXRhYmxlOwor
fQorCisvKioKKyAqIHdlYmtpdF9wYWdlX3NldF9lZGl0YWJsZToKKyAqIEBwYWdlOiBhICNXZWJL
aXRQYWdlCisgKiBAZmxhZzogYSAjZ2Jvb2xlYW4gaW5kaWNhdGluZyB0aGUgZWRpdGFibGUgc3Rh
dGUKKyAqCisgKiBTZXRzIHdoZXRoZXIgQHBhZ2UgYWxsb3dzIHRoZSB1c2VyIHRvIGVkaXQgaXRz
IEhUTUwgZG9jdW1lbnQuCisgKgorICogSWYgQGZsYWcgaXMgJVRSVUUsIEBwYWdlIGFsbG93cyB0
aGUgdXNlciB0byBlZGl0IHRoZSBkb2N1bWVudC4gSWYgQGZsYWcgaXMKKyAqICVGQUxTRSwgYW4g
ZWxlbWVudCBpbiBAcGFnZSdzIGRvY3VtZW50IGNhbiBvbmx5IGJlIGVkaXRlZCBpZiB0aGUKKyAq
IENPTlRFTlRFRElUQUJMRSBhdHRyaWJ1dGUgaGFzIGJlZW4gc2V0IG9uIHRoZSBlbGVtZW50IG9y
IG9uZSBvZiBpdHMgcGFyZW50CisgKiBlbGVtZW50cy4gWW91IGNhbiBjaGFuZ2UgQHBhZ2UncyBk
b2N1bWVudCBwcm9ncmFtbWF0aWNhbGx5IHJlZ2FyZGxlc3Mgb2YKKyAqIHRoaXMgc2V0dGluZy4g
QnkgZGVmYXVsdCBhICNXZWJLaXRQYWdlIGlzIG5vdCBlZGl0YWJsZS4KKworICogTm9ybWFsbHks
IGFuIEhUTUwgZG9jdW1lbnQgaXMgbm90IGVkaXRhYmxlIHVubGVzcyB0aGUgZWxlbWVudHMgd2l0
aGluIHRoZQorICogZG9jdW1lbnQgYXJlIGVkaXRhYmxlLiBUaGlzIGZ1bmN0aW9uIHByb3ZpZGVz
IGEgbG93LWxldmVsIHdheSB0byBtYWtlIHRoZQorICogY29udGVudHMgb2YgYSAjV2ViS2l0UGFn
ZSBlZGl0YWJsZSB3aXRob3V0IGFsdGVyaW5nIHRoZSBkb2N1bWVudCBvciBET00KKyAqIHN0cnVj
dHVyZS4KKyAqLwordm9pZCB3ZWJraXRfcGFnZV9zZXRfZWRpdGFibGUoV2ViS2l0UGFnZSogcGFn
ZSwgZ2Jvb2xlYW4gZmxhZykKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19QQUdF
KHBhZ2UpKTsKKyAgICBmbGFnID0gZmxhZyAhPSBGQUxTRTsKKworICAgIFdlYktpdFBhZ2VQcml2
YXRlKiBwYWdlRGF0YSA9IFdFQktJVF9QQUdFX0dFVF9QUklWQVRFKHBhZ2UpOworICAgIEFTU0VS
VChwYWdlRGF0YSk7CisKKyAgICBGcmFtZSogbWFpbkZyYW1lID0gY29yZShwYWdlRGF0YS0+bWFp
bkZyYW1lKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKG1haW5GcmFtZSk7CisKKyAgICAvLyBUT0RP
OiBXaGF0IGhhcHBlbnMgd2hlbiB0aGUgZnJhbWUgaXMgcmVwbGFjZWQ/CisgICAgaWYgKGZsYWcg
PT0gcGFnZURhdGEtPmVkaXRhYmxlKQorICAgICAgICByZXR1cm47CisKKyAgICBwYWdlRGF0YS0+
ZWRpdGFibGUgPSBmbGFnOworCisgICAgaWYgKGZsYWcpIHsKKyAgICAgICAgbWFpbkZyYW1lLT5h
cHBseUVkaXRpbmdTdHlsZVRvQm9keUVsZW1lbnQoKTsKKyAgICAgICAgLy8gVE9ETzogSWYgdGhl
IFdlYktpdFBhZ2UgaXMgbWFkZSBlZGl0YWJsZSBhbmQgdGhlIHNlbGVjdGlvbiBpcyBlbXB0eSwg
c2V0IGl0IHRvIHNvbWV0aGluZy4KKyAgICAgICAgLy9pZiAoIXdlYmtpdF9wYWdlX2dldF9zZWxl
Y3RlZF9kb21fcmFuZ2UocGFnZSkpCisgICAgICAgIC8vICAgIG1haW5GcmFtZS0+c2V0U2VsZWN0
aW9uRnJvbU5vbmUoKTsKKyAgICB9IGVsc2UKKyAgICAgICAgbWFpbkZyYW1lLT5yZW1vdmVFZGl0
aW5nU3R5bGVGcm9tQm9keUVsZW1lbnQoKTsKK30KKwogfQpJbmRleDogV2ViS2l0L2d0ay9BcGkv
d2Via2l0Z3RrcGFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9ndGsvQXBpL3dlYmtpdGd0a3Bh
Z2UuaAkocmV2aXNpb24gMjgwMTEpCisrKyBXZWJLaXQvZ3RrL0FwaS93ZWJraXRndGtwYWdlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTkwLDYgKzkwLDcgQEAgd2Via2l0X3BhZ2VfZ2V0X3R5cGUgKHZv
aWQpOwogV0VCS0lUX0FQSSBHdGtXaWRnZXQqCiB3ZWJraXRfcGFnZV9uZXcgKHZvaWQpOwogCisv
KgogV0VCS0lUX0FQSSB2b2lkCiB3ZWJraXRfcGFnZV9zZXRfc2V0dGluZ3MgKFdlYktpdFBhZ2Uq
IHBhZ2UsIFdlYktpdFNldHRpbmdzKiBzZXR0aW5ncyk7CiAKQEAgLTExMyw2ICsxMTQsNyBAQCB3
ZWJraXRfcGFnZV9jb3B5IChXZWJLaXRQYWdlKiBwYWdlKTsKIAogV0VCS0lUX0FQSSB2b2lkCiB3
ZWJraXRfcGFnZV9wYXN0ZSAoV2ViS2l0UGFnZSogcGFnZSk7CisqLwogCiBXRUJLSVRfQVBJIGdi
b29sZWFuCiB3ZWJraXRfcGFnZV9jYW5fZ29fYmFja3dhcmQgKFdlYktpdFBhZ2UqIHBhZ2UpOwpA
QCAtMTQ2LDYgKzE0OCwxMyBAQCB3ZWJraXRfcGFnZV9nZXRfbWFpbl9mcmFtZSAoV2ViS2l0UGFn
ZSogCiAKIFdFQktJVF9BUEkgdm9pZAogd2Via2l0X3BhZ2VfZXhlY3V0ZV9zY3JpcHQgKFdlYktp
dFBhZ2UqIHBhZ2UsIGNvbnN0IGdjaGFyKiBzY3JpcHQpOworCitXRUJLSVRfQVBJIGdib29sZWFu
Cit3ZWJraXRfcGFnZV9nZXRfZWRpdGFibGUgKFdlYktpdFBhZ2UqIHBhZ2UpOworCitXRUJLSVRf
QVBJIHZvaWQKK3dlYmtpdF9wYWdlX3NldF9lZGl0YWJsZSAoV2ViS2l0UGFnZSogcGFnZSwgZ2Jv
b2xlYW4gZmxhZyk7CisKIEdfRU5EX0RFQ0xTCiAKICNlbmRpZgpJbmRleDogV2ViS2l0L2d0ay9B
cGkvd2Via2l0Z3RrcHJpdmF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9ndGsvQXBpL3dlYmtp
dGd0a3ByaXZhdGUuaAkocmV2aXNpb24gMjgwMTEpCisrKyBXZWJLaXQvZ3RrL0FwaS93ZWJraXRn
dGtwcml2YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTY5LDYgKzY5LDcgQEAgZXh0ZXJuICJDIiB7
CiAgICAgICAgIFdlYkNvcmU6OlN0cmluZyogdXNlckFnZW50OwogCiAgICAgICAgIEhhc2hTZXQ8
R3RrV2lkZ2V0Kj4gY2hpbGRyZW47CisgICAgICAgIGJvb2wgZWRpdGFibGU7CiAgICAgfTsKIAog
ICAgICNkZWZpbmUgV0VCS0lUX0ZSQU1FX0dFVF9QUklWQVRFKG9iaikgICAgKEdfVFlQRV9JTlNU
QU5DRV9HRVRfUFJJVkFURSgob2JqKSwgV0VCS0lUX1RZUEVfRlJBTUUsIFdlYktpdEZyYW1lUHJp
dmF0ZSkpCkBAIC03OCw2ICs3OSw3IEBAIGV4dGVybiAiQyIgewogICAgICAgICBXZWJDb3JlOjpG
cmFtZUxvYWRlckNsaWVudCogY2xpZW50OwogICAgICAgICBXZWJLaXRQYWdlKiBwYWdlOwogCisg
ICAgICAgIGdjaGFyKiBuYW1lOwogICAgICAgICBnY2hhciogdGl0bGU7CiAgICAgICAgIGdjaGFy
KiBsb2NhdGlvbjsKICAgICB9OwpAQCAtODgsNyArOTAsNyBAQCBleHRlcm4gIkMiIHsKICAgICAg
ICAgZ2NoYXIqIHVybDsKICAgICB9OwogCi0gICAgR09iamVjdCogd2Via2l0X2ZyYW1lX2luaXRf
d2l0aF9wYWdlKFdlYktpdFBhZ2UqLCBXZWJDb3JlOjpIVE1MRnJhbWVPd25lckVsZW1lbnQqKTsK
KyAgICBXZWJLaXRGcmFtZSogd2Via2l0X2ZyYW1lX2luaXRfd2l0aF9wYWdlKFdlYktpdFBhZ2Uq
LCBXZWJDb3JlOjpIVE1MRnJhbWVPd25lckVsZW1lbnQqKTsKIH0KIAogI2VuZGlmCkluZGV4OiBX
ZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudEd0ay5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRHdGsuY3BwCShyZXZpc2lv
biAyODAxMSkKKysrIFdlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50R3RrLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTQ2LDggKzE0Niw3IEBAIHZvaWQgRWRpdG9yQ2xpZW50Ojpk
aWRTZXRTZWxlY3Rpb25UeXBlc0YKIAogYm9vbCBFZGl0b3JDbGllbnQ6OmlzRWRpdGFibGUoKQog
ewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB3
ZWJraXRfcGFnZV9nZXRfZWRpdGFibGUobV9wYWdlKTsKIH0KIAogdm9pZCBFZGl0b3JDbGllbnQ6
OnJlZ2lzdGVyQ29tbWFuZEZvclVuZG8oV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OkVkaXRDb21t
YW5kPikK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>17613</attachid>
            <date>2007-11-30 15:54:55 -0800</date>
            <delta_ts>2007-11-30 16:06:47 -0800</delta_ts>
            <desc>Refactor as planned</desc>
            <filename>api-refactor.patch</filename>
            <type>text/plain</type>
            <size>188390</size>
            <attacher name="Alp Toker">alp</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdC5wcmkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0LnByaQkocmV2aXNpb24gMjgy
NTEpCisrKyBXZWJLaXQucHJpCSh3b3JraW5nIGNvcHkpCkBAIC0xNyw3ICsxNyw3IEBAIHF0LXBv
cnQ6IWJ1aWxkaW5nLWxpYnMgewogZ3RrLXBvcnQ6IWJ1aWxkaW5nLWxpYnMgewogICAgIFFNQUtF
X0xJQkRJUiA9ICQkT1VUUFVUX0RJUi9saWIgJCRRTUFLRV9MSUJESVIKICAgICBMSUJTICs9IC1s
V2ViS2l0R3RrCi0gICAgREVQRU5EUEFUSCArPSAkJFBXRC9XZWJLaXQvZ3RrL0FwaSAkJFBXRC9X
ZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0CisgICAgREVQRU5EUEFUSCArPSAkJFBXRC9XZWJLaXQv
Z3RrL1dlYlZpZXcgJCRQV0QvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydAogfQogCiBndGstcG9y
dCB7CkBAIC00NCw2ICs0NCw5IEBAIGd0ay1wb3J0IHsKIAogICAgICMgVGhpcyBzZXQgb2Ygd2Fy
bmluZ3MgaXMgYm9ycm93ZWQgZnJvbSB0aGUgTWFjIGJ1aWxkCiAgICAgUU1BS0VfQ1hYRkxBR1Mg
Kz0gLVdhbGwgLVcgLVdjYXN0LWFsaWduIC1XY2hhci1zdWJzY3JpcHRzIC1XZm9ybWF0LXNlY3Vy
aXR5IC1XbWlzc2luZy1mb3JtYXQtYXR0cmlidXRlIC1XcG9pbnRlci1hcml0aCAtV3dyaXRlLXN0
cmluZ3MgLVduby1mb3JtYXQteTJrIC1Xbm8tdW51c2VkLXBhcmFtZXRlciAtV3VuZGVmCisKKyAg
ICBERVBFTkRQQVRIICs9ICQkUFdEL0phdmFTY3JpcHRDb3JlL0FQSQorICAgIElOQ0xVREVQQVRI
ICs9ICQkUFdECiB9CiAKIERFRklORVMgKz0gVVNFX1NZU1RFTV9NQUxMT0MKQEAgLTYwLDcgKzYz
LDcgQEAgZ3RrLXBvcnQ6SU5DTFVERVBBVEggKz0gXAogICAgICQkQkFTRV9ESVIvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYWlybyBcCiAgICAgJCRCQVNFX0RJUi9XZWJDb3JlL2xvYWRlci9n
dGsgXAogICAgICQkQkFTRV9ESVIvV2ViQ29yZS9wYWdlL2d0ayBcCi0gICAgJCRCQVNFX0RJUi9X
ZWJLaXQvZ3RrL0FwaSBcCisgICAgJCRCQVNFX0RJUi9XZWJLaXQvZ3RrL1dlYlZpZXcgXAogICAg
ICQkQkFTRV9ESVIvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydAogSU5DTFVERVBBVEggKz0gXAog
ICAgICQkQkFTRV9ESVIvSmF2YVNjcmlwdENvcmUvIFwKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5w
cm8KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnBybwkocmV2aXNpb24gMjgyNTEpCisr
KyBXZWJDb3JlL1dlYkNvcmUucHJvCSh3b3JraW5nIGNvcHkpCkBAIC0xNDYsNyArMTQ2LDcgQEAg
Z3RrLXBvcnQgewogICAgICQkUFdEL2xvYWRlci9ndGsgXAogICAgICQkUFdEL3BhZ2UvZ3RrIFwK
ICAgICAkJFBXRC8uLi9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0IFwKLSAgICAkJFBXRC8uLi9X
ZWJLaXQvZ3RrL0FwaQorICAgICQkUFdELy4uL1dlYktpdC9ndGsvV2ViVmlldwogCiAgICAgREVQ
RU5EUEFUSCArPSBcCiAgICAgcGxhdGZvcm0vZ3RrIFwKQEAgLTE2NCw3ICsxNjQsNyBAQCBndGst
cG9ydCB7CiAgICAgbG9hZGVyL2d0ayBcCiAgICAgcGFnZS9ndGsgXAogICAgIC4uL1dlYktpdC9n
dGsvV2ViQ29yZVN1cHBvcnQgXAotICAgIC4uL1dlYktpdC9ndGsvQXBpCisgICAgLi4vV2ViS2l0
L2d0ay9XZWJWaWV3CiB9CiAKIElOQ0xVREVQQVRIICs9ICAkJFBXRCBcCkBAIC05MzksMTMgKzkz
OSwxMyBAQCBxdC1wb3J0IHsKIGd0ay1wb3J0IHsKICAgICBIRUFERVJTICs9IFwKICAgICAgICAg
Li4vV2ViQ29yZS9wbGF0Zm9ybS9ndGsvQ2xpcGJvYXJkR3RrLmggXAotICAgICAgICAuLi9XZWJL
aXQvZ3RrL0FwaS93ZWJraXRndGtkZWZpbmVzLmggXAotICAgICAgICAuLi9XZWJLaXQvZ3RrL0Fw
aS93ZWJraXRndGtmcmFtZS5oIFwKLSAgICAgICAgLi4vV2ViS2l0L2d0ay9BcGkvd2Via2l0Z3Rr
Z2xvYmFsLmggXAotICAgICAgICAuLi9XZWJLaXQvZ3RrL0FwaS93ZWJraXRndGtuZXR3b3JrcmVx
dWVzdC5oIFwKLSAgICAgICAgLi4vV2ViS2l0L2d0ay9BcGkvd2Via2l0Z3RrcGFnZS5oIFwKLSAg
ICAgICAgLi4vV2ViS2l0L2d0ay9BcGkvd2Via2l0Z3RrcHJpdmF0ZS5oIFwKLSAgICAgICAgLi4v
V2ViS2l0L2d0ay9BcGkvd2Via2l0Z3Rrc2V0dGluZ3MuaCBcCisgICAgICAgIC4uL1dlYktpdC9n
dGsvV2ViVmlldy93ZWJraXRkZWZpbmVzLmggXAorICAgICAgICAuLi9XZWJLaXQvZ3RrL1dlYlZp
ZXcvd2Via2l0Z2xvYmFsLmggXAorICAgICAgICAuLi9XZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0
bmV0d29ya3JlcXVlc3QuaCBcCisgICAgICAgIC4uL1dlYktpdC9ndGsvV2ViVmlldy93ZWJraXRw
cml2YXRlLmggXAorICAgICAgICAuLi9XZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0c2V0dGluZ3Mu
aCBcCisgICAgICAgIC4uL1dlYktpdC9ndGsvV2ViVmlldy93ZWJraXR3ZWJmcmFtZS5oIFwKKyAg
ICAgICAgLi4vV2ViS2l0L2d0ay9XZWJWaWV3L3dlYmtpdHdlYnZpZXcuaCBcCiAgICAgICAgIC4u
L1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmggXAogICAgICAgICAu
Li9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0NvbnRleHRNZW51Q2xpZW50R3RrLmggXAogICAg
ICAgICAuLi9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0RyYWdDbGllbnRHdGsuaCBcCkBAIC0x
MDE2LDEyICsxMDE2LDEyIEBAIGd0ay1wb3J0IHsKICAgICAgICAgcGxhdGZvcm0vaW1hZ2UtZGVj
b2RlcnMvYm1wL0JNUEltYWdlRGVjb2Rlci5jcHAgXAogICAgICAgICBwbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy9pY28vSUNPSW1hZ2VEZWNvZGVyLmNwcCBcCiAgICAgICAgIHBsYXRmb3JtL2ltYWdl
LWRlY29kZXJzL3hibS9YQk1JbWFnZURlY29kZXIuY3BwIFwKLSAgICAgICAgLi4vV2ViS2l0L2d0
ay9BcGkvd2Via2l0Z3RrZnJhbWUuY3BwIFwKLSAgICAgICAgLi4vV2ViS2l0L2d0ay9BcGkvd2Vi
a2l0Z3RrZ2xvYmFsLmNwcCBcCi0gICAgICAgIC4uL1dlYktpdC9ndGsvQXBpL3dlYmtpdGd0a25l
dHdvcmtyZXF1ZXN0LmNwcCBcCi0gICAgICAgIC4uL1dlYktpdC9ndGsvQXBpL3dlYmtpdGd0a3Bh
Z2UuY3BwIFwKLSAgICAgICAgLi4vV2ViS2l0L2d0ay9BcGkvd2Via2l0Z3RrcHJpdmF0ZS5jcHAg
XAotICAgICAgICAuLi9XZWJLaXQvZ3RrL0FwaS93ZWJraXRndGtzZXR0aW5ncy5jcHAgXAorICAg
ICAgICAuLi9XZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0Z2xvYmFsLmNwcCBcCisgICAgICAgIC4u
L1dlYktpdC9ndGsvV2ViVmlldy93ZWJraXRuZXR3b3JrcmVxdWVzdC5jcHAgXAorICAgICAgICAu
Li9XZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0cHJpdmF0ZS5jcHAgXAorICAgICAgICAuLi9XZWJL
aXQvZ3RrL1dlYlZpZXcvd2Via2l0c2V0dGluZ3MuY3BwIFwKKyAgICAgICAgLi4vV2ViS2l0L2d0
ay9XZWJWaWV3L3dlYmtpdHdlYmZyYW1lLmNwcCBcCisgICAgICAgIC4uL1dlYktpdC9ndGsvV2Vi
Vmlldy93ZWJraXR3ZWJ2aWV3LmNwcCBcCiAgICAgICAgIC4uL1dlYktpdC9ndGsvV2ViQ29yZVN1
cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmNwcCBcCiAgICAgICAgIC4uL1dlYktpdC9ndGsvV2ViQ29y
ZVN1cHBvcnQvQ29udGV4dE1lbnVDbGllbnRHdGsuY3BwIFwKICAgICAgICAgLi4vV2ViS2l0L2d0
ay9XZWJDb3JlU3VwcG9ydC9EcmFnQ2xpZW50R3RrLmNwcCBcCkBAIC0xNjgxLDcgKzE2ODEsNyBA
QCBndGstcG9ydCB7CiAgICAgdGFyZ2V0LnBhdGggPSAkJFdFQktJVF9MSUJfRElSCiAgICAgSU5T
VEFMTFMgKz0gdGFyZ2V0CiAKLSAgICBpbmNsdWRlKCQkUFdELy4uL1dlYktpdC9ndGsvQXBpL2hl
YWRlcnMucHJpKQorICAgIGluY2x1ZGUoJCRQV0QvLi4vV2ViS2l0L2d0ay9XZWJWaWV3L2hlYWRl
cnMucHJpKQogICAgIGhlYWRlcnMuZmlsZXMgPSAkJFdFQktJVF9BUElfSEVBREVSUwogICAgIGhl
YWRlcnMucGF0aCA9ICQkV0VCS0lUX0lOQ19ESVIKICAgICBJTlNUQUxMUyArPSBoZWFkZXJzCkBA
IC0xNzAxLDcgKzE3MDEsNyBAQCBndGstcG9ydCB7CiAgICAgICAgIFFNQUtFX1BLR0NPTkZJR19J
TlNUQUxMX1JFUExBQ0UgKz0gbGliX3JlcGxhY2UKICAgICB9CiAKLSAgICBHRU5NQVJTSEFMUyA9
IC4uL1dlYktpdC9ndGsvQXBpL3dlYmtpdGd0ay1tYXJzaGFsLmxpc3QKKyAgICBHRU5NQVJTSEFM
UyA9IC4uL1dlYktpdC9ndGsvV2ViVmlldy93ZWJraXQtbWFyc2hhbC5saXN0CiAgICAgR0VOTUFS
U0hBTFNfUFJFRklYID0gd2Via2l0X21hcnNoYWwKIAogICAgICMKSW5kZXg6IFdlYktpdC9ndGsv
QXBpL2hlYWRlcnMucHJpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9ndGsvQXBpL2hlYWRlcnMucHJp
CShyZXZpc2lvbiAyODI1MSkKKysrIFdlYktpdC9ndGsvQXBpL2hlYWRlcnMucHJpCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDcgKzAsMCBAQAotV0VCS0lUX0FQSV9IRUFERVJTID0gJCRQV0Qvd2Via2l0
Z3RrZGVmaW5lcy5oIFwKLSAgICAgICAgICAgICAgICAgICAgICQkUFdEL3dlYmtpdGd0a2ZyYW1l
LmggXAotICAgICAgICAgICAgICAgICAgICAgJCRQV0Qvd2Via2l0Z3RrZnJhbWVkYXRhLmggXAot
ICAgICAgICAgICAgICAgICAgICAgJCRQV0Qvd2Via2l0Z3RrZ2xvYmFsLmggXAotICAgICAgICAg
ICAgICAgICAgICAgJCRQV0Qvd2Via2l0Z3RrbmV0d29ya3JlcXVlc3QuaCBcCi0gICAgICAgICAg
ICAgICAgICAgICAkJFBXRC93ZWJraXRndGtwYWdlLmggXAotICAgICAgICAgICAgICAgICAgICAg
JCRQV0Qvd2Via2l0Z3Rrc2V0dGluZ3MuaApJbmRleDogV2ViS2l0L2d0ay9BcGkvd2Via2l0Z3Rr
LW1hcnNoYWwubGlzdAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvZ3RrL0FwaS93ZWJraXRndGstbWFy
c2hhbC5saXN0CShyZXZpc2lvbiAyODI1MSkKKysrIFdlYktpdC9ndGsvQXBpL3dlYmtpdGd0ay1t
YXJzaGFsLmxpc3QJKHdvcmtpbmcgY29weSkKQEAgLTEsOSArMCwwIEBACi1WT0lEOlNUUklORyxT
VFJJTkcKLVZPSUQ6T0JKRUNULEJPT0xFQU4KLVZPSUQ6T0JKRUNULE9CSkVDVAotVk9JRDpPQkpF
Q1QsUE9JTlRFUixQT0lOVEVSCi1CT09MRUFOOlNUUklORyxJTlQsU1RSSU5HCi1CT09MRUFOOk9C
SkVDVCxTVFJJTkcKLUJPT0xFQU46T0JKRUNULFNUUklORyxCT09MRUFOCi1CT09MRUFOOk9CSkVD
VCxTVFJJTkcsU1RSSU5HLFNUUklORwotSU5UOk9CSkVDVCxPQkpFQ1QKSW5kZXg6IFdlYktpdC9n
dGsvQXBpL3dlYmtpdGd0a2RlZmluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvZ3RrL0FwaS93
ZWJraXRndGtkZWZpbmVzLmgJKHJldmlzaW9uIDI4MjUxKQorKysgV2ViS2l0L2d0ay9BcGkvd2Vi
a2l0Z3RrZGVmaW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYyICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuIAotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uIAotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUsIEluYy4gKCJBcHBsZSIp
IG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JT
ICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQot
ICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFdFQktJVF9ERUZJ
TkVTX0gKLSNkZWZpbmUgV0VCS0lUX0RFRklORVNfSAotCi0jaW5jbHVkZSA8Z2xpYi5oPgotCi10
eXBlZGVmIHN0cnVjdCBfV2ViS2l0RnJhbWUgV2ViS2l0RnJhbWU7Ci10eXBlZGVmIHN0cnVjdCBf
V2ViS2l0RnJhbWVDbGFzcyBXZWJLaXRGcmFtZUNsYXNzOwotCi10eXBlZGVmIHN0cnVjdCBfV2Vi
S2l0RnJhbWVEYXRhIFdlYktpdEZyYW1lRGF0YTsKLQotdHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFBh
Z2UgV2ViS2l0UGFnZTsKLXR5cGVkZWYgc3RydWN0IF9XZWJLaXRQYWdlQ2xhc3MgV2ViS2l0UGFn
ZUNsYXNzOwotCi10eXBlZGVmIHN0cnVjdCBfV2ViS2l0TmV0d29ya1JlcXVlc3QgV2ViS2l0TmV0
d29ya1JlcXVlc3Q7Ci10eXBlZGVmIHN0cnVjdCBfV2ViS2l0TmV0d29ya1JlcXVlc3RDbGFzcyBX
ZWJLaXROZXR3b3JrUmVxdWVzdENsYXNzOwotCi10eXBlZGVmIHN0cnVjdCBPcGFxdWVKU0NvbnRl
eHQqIEpTR2xvYmFsQ29udGV4dFJlZjsKLXR5cGVkZWYgc3RydWN0IE9wYXF1ZUpTVmFsdWUqIEpT
T2JqZWN0UmVmOwotCi0jaWZkZWYgR19PU19XSU4zMgotICAgICNpZmRlZiBCVUlMRElOR19XRUJL
SVQKLSAgICAgICAgI2RlZmluZSBXRUJLSVRfQVBJIF9fZGVjbHNwZWMoZGxsZXhwb3J0KQotICAg
ICNlbHNlCi0gICAgICAgICNkZWZpbmUgV0VCS0lUX0FQSSBfX2RlY2xzcGVjKGRsbGltcG9ydCkK
LSAgICAjZW5kaWYKLSNlbHNlCi0gICAgI2RlZmluZSBXRUJLSVRfQVBJIF9fYXR0cmlidXRlX18o
KHZpc2liaWxpdHkoImRlZmF1bHQiKSkpCi0jZW5kaWYKLQotI2lmbmRlZiBXRUJLSVRfQVBJCi0j
ZGVmaW5lIFdFQktJVF9BUEkKLSNlbmRpZgotCi0jZW5kaWYKSW5kZXg6IFdlYktpdC9ndGsvQXBp
L3dlYmtpdGd0a2ZyYW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvZ3RrL0FwaS93ZWJraXRn
dGtmcmFtZS5jcHAJKHJldmlzaW9uIDI4MjUxKQorKysgV2ViS2l0L2d0ay9BcGkvd2Via2l0Z3Rr
ZnJhbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDM4OCArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDcgQWxwIFRva2VyIDxhbHBAYXRva2VyLmNvbT4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAotICog
My4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFt
ZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5E
IEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAq
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAi
d2Via2l0Z3RrZnJhbWUuaCIKLSNpbmNsdWRlICJ3ZWJraXRndGtwYWdlLmgiCi0jaW5jbHVkZSAi
d2Via2l0Z3RrcHJpdmF0ZS5oIgotCi0jaW5jbHVkZSAiQ1N0cmluZy5oIgotI2luY2x1ZGUgIkZy
YW1lTG9hZGVyLmgiCi0jaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnRHdGsuaCIKLSNpbmNsdWRl
ICJGcmFtZVRyZWUuaCIKLSNpbmNsdWRlICJGcmFtZVZpZXcuaCIKLSNpbmNsdWRlICJIVE1MRnJh
bWVPd25lckVsZW1lbnQuaCIKLSNpbmNsdWRlICJranNfYmluZGluZy5oIgotI2luY2x1ZGUgImtq
c19wcm94eS5oIgotI2luY2x1ZGUgImtqc193aW5kb3cuaCIKLQotI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0FQSUNhc3QuaD4KLQotdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKLXVzaW5nIG5hbWVz
cGFjZSBXZWJDb3JlOwotCi1leHRlcm4gIkMiIHsKLQotZXh0ZXJuIHZvaWQgd2Via2l0X21hcnNo
YWxfVk9JRF9fU1RSSU5HX1NUUklORyAoR0Nsb3N1cmUqICAgICBjbG9zdXJlLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1ZhbHVlKiAgICAgICByZXR1
cm5fdmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBndWludCAgICAgICAgIG5fcGFyYW1fdmFsdWVzLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR1ZhbHVlKiBwYXJhbV92YWx1ZXMsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncG9pbnRlciAgICAg
IGludm9jYXRpb25faGludCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGdwb2ludGVyICAgICAgbWFyc2hhbF9kYXRhKTsKLQotZW51bSB7Ci0gICAgQ0xF
QVJFRCwKLSAgICBMT0FEX0RPTkUsCi0gICAgVElUTEVfQ0hBTkdFRCwKLSAgICBIT1ZFUklOR19P
VkVSX0xJTkssCi0gICAgTEFTVF9TSUdOQUwKLX07Ci0KLXN0YXRpYyBndWludCB3ZWJraXRfZnJh
bWVfc2lnbmFsc1tMQVNUX1NJR05BTF0gPSB7IDAsIH07Ci0KLXN0YXRpYyB2b2lkIHdlYmtpdF9m
cmFtZV9yZWFsX3RpdGxlX2NoYW5nZWQoV2ViS2l0RnJhbWUqIGZyYW1lLCBnY2hhciogdGl0bGUs
IGdjaGFyKiBsb2NhdGlvbik7Ci0KLUdfREVGSU5FX1RZUEUoV2ViS2l0RnJhbWUsIHdlYmtpdF9m
cmFtZSwgR19UWVBFX09CSkVDVCkKLQotc3RhdGljIHZvaWQgd2Via2l0X2ZyYW1lX2ZpbmFsaXpl
KEdPYmplY3QqIG9iamVjdCkKLXsKLSAgICBXZWJLaXRGcmFtZVByaXZhdGUqIHByaXZhdGVEYXRh
ID0gV0VCS0lUX0ZSQU1FX0dFVF9QUklWQVRFKFdFQktJVF9GUkFNRShvYmplY3QpKTsKLSAgICBw
cml2YXRlRGF0YS0+ZnJhbWUtPmxvYWRlcigpLT5jYW5jZWxBbmRDbGVhcigpOwotICAgIGdfZnJl
ZShwcml2YXRlRGF0YS0+bmFtZSk7Ci0gICAgZ19mcmVlKHByaXZhdGVEYXRhLT50aXRsZSk7Ci0g
ICAgZ19mcmVlKHByaXZhdGVEYXRhLT5sb2NhdGlvbik7Ci0gICAgZGVsZXRlIHByaXZhdGVEYXRh
LT5mcmFtZTsKLQotICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9mcmFtZV9wYXJlbnRfY2xhc3Mp
LT5maW5hbGl6ZShvYmplY3QpOwotfQotCi1zdGF0aWMgdm9pZCB3ZWJraXRfZnJhbWVfY2xhc3Nf
aW5pdChXZWJLaXRGcmFtZUNsYXNzKiBmcmFtZUNsYXNzKQotewotICAgIGdfdHlwZV9jbGFzc19h
ZGRfcHJpdmF0ZShmcmFtZUNsYXNzLCBzaXplb2YoV2ViS2l0RnJhbWVQcml2YXRlKSk7Ci0KLSAg
ICAvKgotICAgICAqIHNpZ25hbHMKLSAgICAgKi8KLSAgICB3ZWJraXRfZnJhbWVfc2lnbmFsc1tD
TEVBUkVEXSA9IGdfc2lnbmFsX25ldygiY2xlYXJlZCIsCi0gICAgICAgICAgICBHX1RZUEVfRlJP
TV9DTEFTUyhmcmFtZUNsYXNzKSwKLSAgICAgICAgICAgIChHU2lnbmFsRmxhZ3MpKEdfU0lHTkFM
X1JVTl9MQVNUIHwgR19TSUdOQUxfQUNUSU9OKSwKLSAgICAgICAgICAgIDAsCi0gICAgICAgICAg
ICBOVUxMLAotICAgICAgICAgICAgTlVMTCwKLSAgICAgICAgICAgIGdfY2Nsb3N1cmVfbWFyc2hh
bF9WT0lEX19WT0lELAotICAgICAgICAgICAgR19UWVBFX05PTkUsIDApOwotCi0gICAgd2Via2l0
X2ZyYW1lX3NpZ25hbHNbTE9BRF9ET05FXSA9IGdfc2lnbmFsX25ldygibG9hZF9kb25lIiwKLSAg
ICAgICAgICAgIEdfVFlQRV9GUk9NX0NMQVNTKGZyYW1lQ2xhc3MpLAotICAgICAgICAgICAgKEdT
aWduYWxGbGFncykoR19TSUdOQUxfUlVOX0xBU1QgfCBHX1NJR05BTF9BQ1RJT04pLAotICAgICAg
ICAgICAgMCwKLSAgICAgICAgICAgIE5VTEwsCi0gICAgICAgICAgICBOVUxMLAotICAgICAgICAg
ICAgZ19jY2xvc3VyZV9tYXJzaGFsX1ZPSURfX0JPT0xFQU4sCi0gICAgICAgICAgICBHX1RZUEVf
Tk9ORSwgMSwKLSAgICAgICAgICAgIEdfVFlQRV9CT09MRUFOKTsKLQotICAgIHdlYmtpdF9mcmFt
ZV9zaWduYWxzW1RJVExFX0NIQU5HRURdID0gZ19zaWduYWxfbmV3KCJ0aXRsZV9jaGFuZ2VkIiwK
LSAgICAgICAgICAgIEdfVFlQRV9GUk9NX0NMQVNTKGZyYW1lQ2xhc3MpLAotICAgICAgICAgICAg
KEdTaWduYWxGbGFncykoR19TSUdOQUxfUlVOX0xBU1QgfCBHX1NJR05BTF9BQ1RJT04pLAotICAg
ICAgICAgICAgR19TVFJVQ1RfT0ZGU0VUKFdlYktpdEZyYW1lQ2xhc3MsIHRpdGxlX2NoYW5nZWQp
LAotICAgICAgICAgICAgTlVMTCwKLSAgICAgICAgICAgIE5VTEwsCi0gICAgICAgICAgICB3ZWJr
aXRfbWFyc2hhbF9WT0lEX19TVFJJTkdfU1RSSU5HLAotICAgICAgICAgICAgR19UWVBFX05PTkUs
IDIsCi0gICAgICAgICAgICBHX1RZUEVfU1RSSU5HLCBHX1RZUEVfU1RSSU5HKTsKLQotICAgIHdl
YmtpdF9mcmFtZV9zaWduYWxzW0hPVkVSSU5HX09WRVJfTElOS10gPSBnX3NpZ25hbF9uZXcoImhv
dmVyaW5nX292ZXJfbGluayIsCi0gICAgICAgICAgICBHX1RZUEVfRlJPTV9DTEFTUyhmcmFtZUNs
YXNzKSwKLSAgICAgICAgICAgIChHU2lnbmFsRmxhZ3MpKEdfU0lHTkFMX1JVTl9MQVNUIHwgR19T
SUdOQUxfQUNUSU9OKSwKLSAgICAgICAgICAgIDAsCi0gICAgICAgICAgICBOVUxMLAotICAgICAg
ICAgICAgTlVMTCwKLSAgICAgICAgICAgIHdlYmtpdF9tYXJzaGFsX1ZPSURfX1NUUklOR19TVFJJ
TkcsCi0gICAgICAgICAgICBHX1RZUEVfTk9ORSwgMiwKLSAgICAgICAgICAgIEdfVFlQRV9TVFJJ
TkcsIEdfVFlQRV9TVFJJTkcpOwotCi0gICAgZnJhbWVDbGFzcy0+dGl0bGVfY2hhbmdlZCA9IHdl
YmtpdF9mcmFtZV9yZWFsX3RpdGxlX2NoYW5nZWQ7Ci0KLSAgICAvKgotICAgICAqIGltcGxlbWVu
dGF0aW9ucyBvZiB2aXJ0dWFsIG1ldGhvZHMKLSAgICAgKi8KLSAgICBHX09CSkVDVF9DTEFTUyhm
cmFtZUNsYXNzKS0+ZmluYWxpemUgPSB3ZWJraXRfZnJhbWVfZmluYWxpemU7Ci19Ci0KLXN0YXRp
YyB2b2lkIHdlYmtpdF9mcmFtZV9yZWFsX3RpdGxlX2NoYW5nZWQoV2ViS2l0RnJhbWUqIGZyYW1l
LCBnY2hhciogdGl0bGUsIGdjaGFyKiBsb2NhdGlvbikKLXsKLSAgICBXZWJLaXRGcmFtZVByaXZh
dGUqIGZyYW1lRGF0YSA9IFdFQktJVF9GUkFNRV9HRVRfUFJJVkFURShmcmFtZSk7Ci0gICAgZ19m
cmVlKGZyYW1lRGF0YS0+dGl0bGUpOwotICAgIGdfZnJlZShmcmFtZURhdGEtPmxvY2F0aW9uKTsK
LSAgICBmcmFtZURhdGEtPnRpdGxlID0gZ19zdHJkdXAodGl0bGUpOwotICAgIGZyYW1lRGF0YS0+
bG9jYXRpb24gPSBnX3N0cmR1cChsb2NhdGlvbik7Ci19Ci0KLXN0YXRpYyB2b2lkIHdlYmtpdF9m
cmFtZV9pbml0KFdlYktpdEZyYW1lKiBmcmFtZSkKLXsKLSAgICAvLyBUT0RPOiBNb3ZlIGNvbnN0
cnVjdG9yIGNvZGUgaGVyZS4KLX0KLQotLyoqCi0gKiB3ZWJraXRfZnJhbWVfbmV3OgotICogQHBh
Z2U6IHRoZSBjb250cm9sbGluZyAjV2ViS2l0UGFnZQotICoKLSAqIENyZWF0ZXMgYSBuZXcgI1dl
YktpdEZyYW1lIGluaXRpYWxpemVkIHdpdGggYSBjb250cm9sbGluZyAjV2ViS2l0UGFnZS4KLSAq
Ci0gKiBSZXR1cm5zOiBhIG5ldyAjV2ViS2l0RnJhbWUKLSAqKi8KLVdlYktpdEZyYW1lKiB3ZWJr
aXRfZnJhbWVfbmV3KFdlYktpdFBhZ2UqIHBhZ2UpCi17Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwoV0VCS0lUX0lTX1BBR0UocGFnZSksIE5VTEwpOwotCi0gICAgV2ViS2l0RnJhbWUqIGZyYW1l
ID0gV0VCS0lUX0ZSQU1FKGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9GUkFNRSwgTlVMTCkpOwot
ICAgIFdlYktpdEZyYW1lUHJpdmF0ZSogZnJhbWVEYXRhID0gV0VCS0lUX0ZSQU1FX0dFVF9QUklW
QVRFKGZyYW1lKTsKLSAgICBXZWJLaXRQYWdlUHJpdmF0ZSogcGFnZURhdGEgPSBXRUJLSVRfUEFH
RV9HRVRfUFJJVkFURShwYWdlKTsKLQotICAgIGZyYW1lRGF0YS0+Y2xpZW50ID0gbmV3IFdlYktp
dDo6RnJhbWVMb2FkZXJDbGllbnQoZnJhbWUpOwotICAgIGZyYW1lRGF0YS0+ZnJhbWUgPSBuZXcg
RnJhbWUocGFnZURhdGEtPnBhZ2UsIDAsIGZyYW1lRGF0YS0+Y2xpZW50KTsKLQotICAgIEZyYW1l
VmlldyogZnJhbWVWaWV3ID0gbmV3IEZyYW1lVmlldyhmcmFtZURhdGEtPmZyYW1lKTsKLSAgICBm
cmFtZVZpZXctPnNldENvbnRhaW5pbmdXaW5kb3coR1RLX0NPTlRBSU5FUihwYWdlKSk7Ci0gICAg
ZnJhbWVWaWV3LT5zZXRHdGtBZGp1c3RtZW50cyhHVEtfQURKVVNUTUVOVChndGtfYWRqdXN0bWVu
dF9uZXcoMC4wLCAwLjAsIDAuMCwgMC4wLCAwLjAsIDAuMCkpLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgR1RLX0FESlVTVE1FTlQoZ3RrX2FkanVzdG1lbnRfbmV3KDAuMCwgMC4w
LCAwLjAsIDAuMCwgMC4wLCAwLjApKSk7Ci0gICAgZnJhbWVEYXRhLT5mcmFtZS0+c2V0Vmlldyhm
cmFtZVZpZXcpOwotICAgIGZyYW1lRGF0YS0+ZnJhbWUtPmluaXQoKTsKLSAgICBmcmFtZURhdGEt
PnBhZ2UgPSBwYWdlOwotICAgIGZyYW1lRGF0YS0+bmFtZSA9IDA7Ci0gICAgZnJhbWVEYXRhLT50
aXRsZSA9IDA7Ci0gICAgZnJhbWVEYXRhLT5sb2NhdGlvbiA9IDA7Ci0KLSAgICByZXR1cm4gZnJh
bWU7Ci19Ci0KLVdlYktpdEZyYW1lKiB3ZWJraXRfZnJhbWVfaW5pdF93aXRoX3BhZ2UoV2ViS2l0
UGFnZSogcGFnZSwgSFRNTEZyYW1lT3duZXJFbGVtZW50KiBlbGVtZW50KQotewotICAgIFdlYktp
dEZyYW1lKiBmcmFtZSA9IFdFQktJVF9GUkFNRShnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfRlJB
TUUsIE5VTEwpKTsKLSAgICBXZWJLaXRGcmFtZVByaXZhdGUqIGZyYW1lRGF0YSA9IFdFQktJVF9G
UkFNRV9HRVRfUFJJVkFURShmcmFtZSk7Ci0gICAgV2ViS2l0UGFnZVByaXZhdGUqIHBhZ2VEYXRh
ID0gV0VCS0lUX1BBR0VfR0VUX1BSSVZBVEUocGFnZSk7Ci0KLSAgICBmcmFtZURhdGEtPmNsaWVu
dCA9IG5ldyBXZWJLaXQ6OkZyYW1lTG9hZGVyQ2xpZW50KGZyYW1lKTsKLSAgICBmcmFtZURhdGEt
PmZyYW1lID0gbmV3IEZyYW1lKHBhZ2VEYXRhLT5wYWdlLCBlbGVtZW50LCBmcmFtZURhdGEtPmNs
aWVudCk7Ci0KLSAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IG5ldyBGcmFtZVZpZXcoZnJhbWVE
YXRhLT5mcmFtZSk7Ci0gICAgZnJhbWVWaWV3LT5zZXRDb250YWluaW5nV2luZG93KEdUS19DT05U
QUlORVIocGFnZSkpOwotICAgIGZyYW1lRGF0YS0+ZnJhbWUtPnNldFZpZXcoZnJhbWVWaWV3KTsK
LSAgICBmcmFtZVZpZXctPmRlcmVmKCk7Ci0gICAgZnJhbWVEYXRhLT5mcmFtZS0+aW5pdCgpOwot
ICAgIGZyYW1lRGF0YS0+cGFnZSA9IHBhZ2U7Ci0KLSAgICByZXR1cm4gZnJhbWU7Ci19Ci0KLWNv
bnN0IGdjaGFyKiB3ZWJraXRfZnJhbWVfZ2V0X3RpdGxlKFdlYktpdEZyYW1lKiBmcmFtZSkKLXsK
LSAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfRlJBTUUoZnJhbWUpLCBOVUxMKTsK
LQotICAgIFdlYktpdEZyYW1lUHJpdmF0ZSogZnJhbWVEYXRhID0gV0VCS0lUX0ZSQU1FX0dFVF9Q
UklWQVRFKGZyYW1lKTsKLSAgICByZXR1cm4gZnJhbWVEYXRhLT50aXRsZTsKLX0KLQotY29uc3Qg
Z2NoYXIqIHdlYmtpdF9mcmFtZV9nZXRfbG9jYXRpb24oV2ViS2l0RnJhbWUqIGZyYW1lKQotewot
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19GUkFNRShmcmFtZSksIE5VTEwpOwot
Ci0gICAgV2ViS2l0RnJhbWVQcml2YXRlKiBmcmFtZURhdGEgPSBXRUJLSVRfRlJBTUVfR0VUX1BS
SVZBVEUoZnJhbWUpOwotICAgIHJldHVybiBmcmFtZURhdGEtPmxvY2F0aW9uOwotfQotCi0vKioK
LSAqIHdlYmtpdF9mcmFtZV9nZXRfcGFnZToKLSAqIEBmcmFtZTogYSAjV2ViS2l0RnJhbWUKLSAq
Ci0gKiBSZXR1cm5zIHRoZSAjV2ViS2l0UGFnZSB0aGF0IG1hbmFnZXMgdGhpcyAjV2ViS2l0RnJh
bWUuCi0gKgotICogVGhlICNXZWJLaXRQYWdlIHJldHVybmVkIG1hbmFnZXMgdGhlIGVudGlyZSBo
aWVyYXJjaHkgb2YgI1dlYktpdEZyYW1lCi0gKiBvYmplY3RzIHRoYXQgY29udGFpbnMgQGZyYW1l
LgotICoKLSAqIFJldHVybiB2YWx1ZTogdGhlICNXZWJLaXRQYWdlIHRoYXQgbWFuYWdlcyBAZnJh
bWUKLSAqLwotV2ViS2l0UGFnZSogd2Via2l0X2ZyYW1lX2dldF9wYWdlKFdlYktpdEZyYW1lKiBm
cmFtZSkKLXsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfRlJBTUUoZnJhbWUp
LCBOVUxMKTsKLQotICAgIFdlYktpdEZyYW1lUHJpdmF0ZSogZnJhbWVEYXRhID0gV0VCS0lUX0ZS
QU1FX0dFVF9QUklWQVRFKGZyYW1lKTsKLSAgICByZXR1cm4gZnJhbWVEYXRhLT5wYWdlOwotfQot
Ci0vKioKLSAqIHdlYmtpdF9mcmFtZV9nZXRfbmFtZToKLSAqIEBmcmFtZTogYSAjV2ViS2l0RnJh
bWUKLSAqCi0gKiBSZXR1cm5zIHRoZSBAZnJhbWUncyBuYW1lCi0gKgotICogUmV0dXJuIHZhbHVl
OiB0aGUgbmFtZSBvZiBAZnJhbWUKLSAqLwotY29uc3QgZ2NoYXIqIHdlYmtpdF9mcmFtZV9nZXRf
bmFtZShXZWJLaXRGcmFtZSogZnJhbWUpCi17Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VC
S0lUX0lTX0ZSQU1FKGZyYW1lKSwgTlVMTCk7Ci0KLSAgICBXZWJLaXRGcmFtZVByaXZhdGUqIGZy
YW1lRGF0YSA9IFdFQktJVF9GUkFNRV9HRVRfUFJJVkFURShmcmFtZSk7Ci0KLSAgICBpZiAoZnJh
bWVEYXRhLT5uYW1lKQotICAgICAgICByZXR1cm4gZnJhbWVEYXRhLT5uYW1lOwotCi0gICAgRnJh
bWUqIGNvcmVGcmFtZSA9IGNvcmUoZnJhbWUpOwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGNv
cmVGcmFtZSwgTlVMTCk7Ci0KLSAgICBTdHJpbmcgc3RyaW5nID0gY29yZUZyYW1lLT50cmVlKCkt
Pm5hbWUoKTsKLSAgICBmcmFtZURhdGEtPm5hbWUgPSBnX3N0cmR1cChzdHJpbmcudXRmOCgpLmRh
dGEoKSk7Ci0KLSAgICByZXR1cm4gZnJhbWVEYXRhLT5uYW1lOwotfQotCi0vKioKLSAqIHdlYmtp
dF9mcmFtZV9nZXRfcGFyZW50OgotICogQGZyYW1lOiBhICNXZWJLaXRGcmFtZQotICoKLSAqIFJl
dHVybnMgdGhlIEBmcmFtZSdzIHBhcmVudCBmcmFtZSwgb3IgJU5VTEwgaWYgaXQgaGFzIG5vbmUu
Ci0gKgotICogUmV0dXJuIHZhbHVlOiB0aGUgcGFyZW50ICNXZWJLaXRGcmFtZSBvciAlTlVMTCBp
biBjYXNlIHRoZXJlIGlzIG5vbmUKLSAqLwotV2ViS2l0RnJhbWUqIHdlYmtpdF9mcmFtZV9nZXRf
cGFyZW50KFdlYktpdEZyYW1lKiBmcmFtZSkKLXsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChX
RUJLSVRfSVNfRlJBTUUoZnJhbWUpLCBOVUxMKTsKLQotICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBj
b3JlKGZyYW1lKTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChjb3JlRnJhbWUsIE5VTEwpOwot
Ci0gICAgcmV0dXJuIGtpdChjb3JlRnJhbWUtPnRyZWUoKS0+cGFyZW50KCkpOwotfQotCi0vKioK
LSAqIHdlYmtpdF9mcmFtZV9sb2FkX3JlcXVlc3Q6Ci0gKiBAZnJhbWU6IGEgI1dlYktpdEZyYW1l
Ci0gKiBAcmVxdWVzdDogYSAjV2ViS2l0TmV0d29ya1JlcXVlc3QKLSAqCi0gKiBDb25uZWN0cyB0
byBhIGdpdmVuIFVSSSBieSBpbml0aWF0aW5nIGFuIGFzeW5jaHJvbm91cyBjbGllbnQgcmVxdWVz
dC4KLSAqCi0gKiBDcmVhdGVzIGEgcHJvdmlzaW9uYWwgZGF0YSBzb3VyY2UgdGhhdCB3aWxsIHRy
YW5zaXRpb24gdG8gYSBjb21taXR0ZWQgZGF0YQotICogc291cmNlIG9uY2UgYW55IGRhdGEgaGFz
IGJlZW4gcmVjZWl2ZWQuIFVzZSB3ZWJraXRfZnJhbWVfc3RvcF9sb2FkaW5nKCkgdG8KLSAqIHN0
b3AgdGhlIGxvYWQuIFRoaXMgZnVuY3Rpb24gaXMgdHlwaWNhbGx5IGludm9rZWQgb24gdGhlIG1h
aW4gZnJhbWUuCi0gKi8KLXZvaWQgd2Via2l0X2ZyYW1lX2xvYWRfcmVxdWVzdChXZWJLaXRGcmFt
ZSogZnJhbWUsIFdlYktpdE5ldHdvcmtSZXF1ZXN0KiByZXF1ZXN0KQotewotICAgIGdfcmV0dXJu
X2lmX2ZhaWwoV0VCS0lUX0lTX0ZSQU1FKGZyYW1lKSk7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChX
RUJLSVRfSVNfTkVUV09SS19SRVFVRVNUKHJlcXVlc3QpKTsKLQotICAgIEZyYW1lKiBjb3JlRnJh
bWUgPSBjb3JlKGZyYW1lKTsKLSAgICBnX3JldHVybl9pZl9mYWlsKGNvcmVGcmFtZSk7Ci0KLSAg
ICAvLyBUT0RPOiBVc2UgdGhlIFJlc291cmNlUmVxdWVzdCBjYXJyaWVkIGJ5IFdlYktpdE5ldHdv
cmtSZXF1ZXN0IHdoZW4gaXQgZ2V0cyBpbXBsZW1lbnRlZC4KLSAgICBEZXByZWNhdGVkU3RyaW5n
IHN0cmluZyA9IERlcHJlY2F0ZWRTdHJpbmc6OmZyb21VdGY4KHdlYmtpdF9uZXR3b3JrX3JlcXVl
c3RfZ2V0X3VyaShyZXF1ZXN0KSk7Ci0gICAgY29yZUZyYW1lLT5sb2FkZXIoKS0+bG9hZChSZXNv
dXJjZVJlcXVlc3QoS1VSTChzdHJpbmcpKSk7Ci19Ci0KLS8qKgotICogd2Via2l0X2ZyYW1lX3N0
b3BfbG9hZGluZzoKLSAqIEBmcmFtZTogYSAjV2ViS2l0RnJhbWUKLSAqCi0gKiBTdG9wcyBhbnkg
cGVuZGluZyBsb2FkcyBvbiBAZnJhbWUncyBkYXRhIHNvdXJjZSwgYW5kIHRob3NlIG9mIGl0cyBj
aGlsZHJlbi4KLSAqLwotdm9pZCB3ZWJraXRfZnJhbWVfc3RvcF9sb2FkaW5nKFdlYktpdEZyYW1l
KiBmcmFtZSkKLXsKLSAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19GUkFNRShmcmFtZSkp
OwotCi0gICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoZnJhbWUpOwotICAgIGdfcmV0dXJuX2lm
X2ZhaWwoY29yZUZyYW1lKTsKLQotICAgIGNvcmVGcmFtZS0+bG9hZGVyKCktPnN0b3BBbGxMb2Fk
ZXJzKCk7Ci19Ci0KLS8qKgotICogd2Via2l0X2ZyYW1lX3JlbG9hZDoKLSAqIEBmcmFtZTogYSAj
V2ViS2l0RnJhbWUKLSAqCi0gKiBSZWxvYWRzIHRoZSBpbml0aWFsIHJlcXVlc3QuCi0gKi8KLXZv
aWQgd2Via2l0X2ZyYW1lX3JlbG9hZChXZWJLaXRGcmFtZSogZnJhbWUpCi17Ci0gICAgZ19yZXR1
cm5faWZfZmFpbChXRUJLSVRfSVNfRlJBTUUoZnJhbWUpKTsKLQotICAgIEZyYW1lKiBjb3JlRnJh
bWUgPSBjb3JlKGZyYW1lKTsKLSAgICBnX3JldHVybl9pZl9mYWlsKGNvcmVGcmFtZSk7Ci0KLSAg
ICBjb3JlRnJhbWUtPmxvYWRlcigpLT5yZWxvYWQoKTsKLX0KLQotLyoqCi0gKiB3ZWJraXRfZnJh
bWVfZmluZF9mcmFtZToKLSAqIEBmcmFtZTogYSAjV2ViS2l0RnJhbWUKLSAqIEBuYW1lOiB0aGUg
bmFtZSBvZiB0aGUgZnJhbWUgdG8gYmUgZm91bmQKLSAqCi0gKiBGb3IgcHJlLWRlZmluZWQgbmFt
ZXMsIHJldHVybnMgQGZyYW1lIGlmIEBuYW1lIGlzICJfc2VsZiIgb3IgIl9jdXJyZW50IiwKLSAq
IHJldHVybnMgQGZyYW1lJ3MgcGFyZW50IGZyYW1lIGlmIEBuYW1lIGlzICJfcGFyZW50IiwgYW5k
IHJldHVybnMgdGhlIG1haW4KLSAqIGZyYW1lIGlmIEBuYW1lIGlzICJfdG9wIi4gQWxzbyByZXR1
cm5zIEBmcmFtZSBpZiBpdCBpcyB0aGUgbWFpbiBmcmFtZSBhbmQKLSAqIEBuYW1lIGlzIGVpdGhl
ciAiX3BhcmVudCIgb3IgIl90b3AiLiBGb3Igb3RoZXIgbmFtZXMsIHRoaXMgZnVuY3Rpb24gcmV0
dXJucwotICogdGhlIGZpcnN0IGZyYW1lIHRoYXQgbWF0Y2hlcyBAbmFtZS4gVGhpcyBmdW5jdGlv
biBzZWFyY2hlcyBAZnJhbWUgYW5kIGl0cwotICogZGVzY2VuZGVudHMgZmlyc3QsIHRoZW4gQGZy
YW1lJ3MgcGFyZW50IGFuZCBpdHMgY2hpbGRyZW4gbW92aW5nIHVwIHRoZQotICogaGllcmFyY2h5
IHVudGlsIGEgbWF0Y2ggaXMgZm91bmQuIElmIG5vIG1hdGNoIGlzIGZvdW5kIGluIEBmcmFtZSdz
Ci0gKiBoaWVyYXJjaHksIHRoaXMgZnVuY3Rpb24gd2lsbCBzZWFyY2ggZm9yIGEgbWF0Y2hpbmcg
ZnJhbWUgaW4gb3RoZXIgbWFpbgotICogZnJhbWUgaGllcmFyY2hpZXMuIFJldHVybnMgJU5VTEwg
aWYgbm8gbWF0Y2ggaXMgZm91bmQuCi0gKgotICogUmV0dXJuIHZhbHVlOiB0aGUgZm91bmQgI1dl
YktpdEZyYW1lIG9yICVOVUxMIGluIGNhc2Ugbm9uZSBpcyBmb3VuZAotICovCi1XZWJLaXRGcmFt
ZSogd2Via2l0X2ZyYW1lX2ZpbmRfZnJhbWUoV2ViS2l0RnJhbWUqIGZyYW1lLCBjb25zdCBnY2hh
ciogbmFtZSkKLXsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfRlJBTUUoZnJh
bWUpLCBOVUxMKTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChuYW1lLCBOVUxMKTsKLQotICAg
IEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKGZyYW1lKTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFp
bChjb3JlRnJhbWUsIE5VTEwpOwotCi0gICAgU3RyaW5nIG5hbWVTdHJpbmcgPSBTdHJpbmc6OmZy
b21VVEY4KG5hbWUpOwotICAgIHJldHVybiBraXQoY29yZUZyYW1lLT50cmVlKCktPmZpbmQoQXRv
bWljU3RyaW5nKG5hbWVTdHJpbmcpKSk7Ci19Ci0KLS8qKgotICogd2Via2l0X2ZyYW1lX2dldF9n
bG9iYWxfY29udGV4dDoKLSAqIEBmcmFtZTogYSAjV2ViS2l0RnJhbWUKLSAqCi0gKiBHZXRzIHRo
ZSBnbG9iYWwgSmF2YVNjcmlwdCBleGVjdXRpb24gY29udGV4dC4gVXNlIHRoaXMgZnVuY3Rpb24g
dG8gYnJpZGdlCi0gKiBiZXR3ZWVuIHRoZSBXZWJLaXQgYW5kIEphdmFTY3JpcHRDb3JlIEFQSXMu
Ci0gKgotICogUmV0dXJuIHZhbHVlOiB0aGUgZ2xvYmFsIEphdmFTY3JpcHQgY29udGV4dAotICov
Ci1KU0dsb2JhbENvbnRleHRSZWYgd2Via2l0X2ZyYW1lX2dldF9nbG9iYWxfY29udGV4dChXZWJL
aXRGcmFtZSogZnJhbWUpCi17Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX0ZS
QU1FKGZyYW1lKSwgTlVMTCk7Ci0KLSAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShmcmFtZSk7
Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoY29yZUZyYW1lLCBOVUxMKTsKLQotICAgIHJldHVy
biB0b0dsb2JhbFJlZihjb3JlRnJhbWUtPnNjcmlwdFByb3h5KCktPmludGVycHJldGVyKCktPmds
b2JhbEV4ZWMoKSk7Ci19Ci0KLX0KSW5kZXg6IFdlYktpdC9ndGsvQXBpL3dlYmtpdGd0a2ZyYW1l
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViS2l0L2d0ay9BcGkvd2Via2l0Z3RrZnJhbWUuaAkocmV2aXNp
b24gMjgyNTEpCisrKyBXZWJLaXQvZ3RrL0FwaS93ZWJraXRndGtmcmFtZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDEwNSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBI
YW5zIFBldGVyIEZyZXl0aGVyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgQWxwIFRva2VyIDxhbHBA
YXRva2VyLmNvbT4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAotICogMy4gIE5laXRoZXIgdGhlIG5hbWUg
b2YgQXBwbGUsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLiAKLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAot
ICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jaWZuZGVmIFdFQktJVF9GUkFNRV9ICi0jZGVmaW5lIFdFQktJVF9GUkFNRV9ICi0KLSNp
bmNsdWRlIDxnbGliLW9iamVjdC5oPgotI2luY2x1ZGUgPGdkay9nZGsuaD4KLQotI2luY2x1ZGUg
IndlYmtpdGd0a2RlZmluZXMuaCIKLQotR19CRUdJTl9ERUNMUwotCi0jZGVmaW5lIFdFQktJVF9U
WVBFX0ZSQU1FICAgICAgICAgICAgKHdlYmtpdF9mcmFtZV9nZXRfdHlwZSgpKQotI2RlZmluZSBX
RUJLSVRfRlJBTUUob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgo
b2JqKSwgV0VCS0lUX1RZUEVfRlJBTUUsIFdlYktpdEZyYW1lKSkKLSNkZWZpbmUgV0VCS0lUX0ZS
QU1FX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdF
QktJVF9UWVBFX0ZSQU1FLCBXZWJLaXRGcmFtZUNsYXNzKSkKLSNkZWZpbmUgV0VCS0lUX0lTX0ZS
QU1FKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJ
VF9UWVBFX0ZSQU1FKSkKLSNkZWZpbmUgV0VCS0lUX0lTX0ZSQU1FX0NMQVNTKGtsYXNzKSAoR19U
WVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9UWVBFX0ZSQU1FKSkKLSNkZWZp
bmUgV0VCS0lUX0ZSQU1FX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFT
Uygob2JqKSwgIFdFQktJVF9UWVBFX0ZSQU1FLCBXZWJLaXRGcmFtZUNsYXNzKSkKLQotCi1zdHJ1
Y3QgX1dlYktpdEZyYW1lIHsKLSAgICBHT2JqZWN0IHBhcmVudDsKLX07Ci0KLXN0cnVjdCBfV2Vi
S2l0RnJhbWVDbGFzcyB7Ci0gICAgR09iamVjdENsYXNzIHBhcmVudDsKLQotICAgIHZvaWQgKCp0
aXRsZV9jaGFuZ2VkKSAoV2ViS2l0RnJhbWUqIGZyYW1lLCBnY2hhciogdGl0bGUsIGdjaGFyKiBs
b2NhdGlvbik7Ci0KLSAgICAvKgotICAgICAqIHByb3RlY3RlZCB2aXJ0dWFsIG1ldGhvZHMKLSAg
ICAgKi8KLSAgICB2b2lkICgqbW91c2VfbW92ZV9ldmVudCkgIChXZWJLaXRGcmFtZSogZnJhbWUs
IEdka0V2ZW50KiBtb3ZlX2V2ZW50KTsKLSAgICB2b2lkICgqbW91c2VfcHJlc3NfZXZlbnQpIChX
ZWJLaXRGcmFtZSogZnJhbWUsIEdka0V2ZW50KiBwcmVzc19ldmVudCk7Ci0gICAgdm9pZCAoKm1v
dXNlX3JlbGVhc2VfZXZlbnQpIChXZWJLaXRGcmFtZSogZnJhbWUsIEdka0V2ZW50KiBtb3VzZV9y
ZWxlYXNlX2V2ZW50KTsKLSAgICB2b2lkICgqbW91c2VfZG91YmxlX2NsaWNrX2V2ZW50KSAoV2Vi
S2l0RnJhbWUqIGZyYW1lLCBHZGtFdmVudCogZG91YmxlX2NsaWNrX2V2ZW50KTsKLSAgICB2b2lk
ICgqbW91c2Vfd2hlZWxfZXZlbnQpIChXZWJLaXRGcmFtZSogZnJhbWUsIEdka0V2ZW50KiB3aGVl
bF9ldmVudCk7Ci19OwotCi1XRUJLSVRfQVBJIEdUeXBlCi13ZWJraXRfZnJhbWVfZ2V0X3R5cGUg
KHZvaWQpOwotCi1XRUJLSVRfQVBJIFdlYktpdEZyYW1lKgotd2Via2l0X2ZyYW1lX25ldyAoV2Vi
S2l0UGFnZSogcGFnZSk7Ci0KLVdFQktJVF9BUEkgV2ViS2l0UGFnZSoKLXdlYmtpdF9mcmFtZV9n
ZXRfcGFnZSAoV2ViS2l0RnJhbWUqIGZyYW1lKTsKLQotV0VCS0lUX0FQSSBjb25zdCBnY2hhcioK
LXdlYmtpdF9mcmFtZV9nZXRfbmFtZSAoV2ViS2l0RnJhbWUqIGZyYW1lKTsKLQotV0VCS0lUX0FQ
SSBjb25zdCBnY2hhcioKLXdlYmtpdF9mcmFtZV9nZXRfdGl0bGUgKFdlYktpdEZyYW1lKiBmcmFt
ZSk7Ci0KLVdFQktJVF9BUEkgY29uc3QgZ2NoYXIqCi13ZWJraXRfZnJhbWVfZ2V0X2xvY2F0aW9u
IChXZWJLaXRGcmFtZSogZnJhbWUpOwotCi1XRUJLSVRfQVBJIFdlYktpdEZyYW1lKgotd2Via2l0
X2ZyYW1lX2dldF9wYXJlbnQgKFdlYktpdEZyYW1lKiBmcmFtZSk7Ci0KLVdFQktJVF9BUEkgdm9p
ZAotd2Via2l0X2ZyYW1lX2xvYWRfcmVxdWVzdCAoV2ViS2l0RnJhbWUqIGZyYW1lLCBXZWJLaXRO
ZXR3b3JrUmVxdWVzdCogcmVxdWVzdCk7Ci0KLVdFQktJVF9BUEkgdm9pZAotd2Via2l0X2ZyYW1l
X3N0b3BfbG9hZGluZyAoV2ViS2l0RnJhbWUqIGZyYW1lKTsKLQotV0VCS0lUX0FQSSB2b2lkCi13
ZWJraXRfZnJhbWVfcmVsb2FkIChXZWJLaXRGcmFtZSogZnJhbWUpOwotCi1XRUJLSVRfQVBJIFdl
YktpdEZyYW1lKgotd2Via2l0X2ZyYW1lX2ZpbmRfZnJhbWUgKFdlYktpdEZyYW1lKiBmcmFtZSwg
Y29uc3QgZ2NoYXIqIG5hbWUpOwotCi1XRUJLSVRfQVBJIEpTR2xvYmFsQ29udGV4dFJlZgotd2Vi
a2l0X2ZyYW1lX2dldF9nbG9iYWxfY29udGV4dCAoV2ViS2l0RnJhbWUqIGZyYW1lKTsKLQotR19F
TkRfREVDTFMKLQotI2VuZGlmCkluZGV4OiBXZWJLaXQvZ3RrL0FwaS93ZWJraXRndGtnbG9iYWwu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9ndGsvQXBpL3dlYmtpdGd0a2dsb2JhbC5jcHAJKHJl
dmlzaW9uIDI4MjUxKQorKysgV2ViS2l0L2d0ay9BcGkvd2Via2l0Z3RrZ2xvYmFsLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA3IEhv
bGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSAqIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKLSAqIDMuICBOZWl0
aGVyIHRoZSBuYW1lIG9mIEFwcGxlLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0g
KiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkK
LSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAq
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIndlYmtpdGd0
a2dsb2JhbC5oIgotCi0jaW5jbHVkZSAiTG9nZ2luZy5oIgotI2luY2x1ZGUgIkRhdGFiYXNlVHJh
Y2tlci5oIgotCi0jaW5jbHVkZSA8Z2xpYi5oPgotCi1leHRlcm4gIkMiIHsKLXZvaWQgd2Via2l0
X2luaXQodm9pZCkKLXsKLSAgICBXZWJDb3JlOjpJbml0aWFsaXplTG9nZ2luZ0NoYW5uZWxzSWZO
ZWNlc3NhcnkoKTsKLQotICAgIFdlYkNvcmU6OmluaXRpYWxpemVUaHJlYWRpbmcoKTsKLQotI2lm
IEVOQUJMRShEQVRBQkFTRSkKLSAgICAvLyBGSVhNRTogSXQgc2hvdWxkIGJlIHBvc3NpYmxlIGZv
ciBjbGllbnQgYXBwbGljYXRpb25zIHRvIG92ZXJyaWRlIHRoaXMgZGVmYXVsdCBsb2NhdGlvbgot
ICAgIGdjaGFyKiBkYXRhYmFzZURpcmVjdG9yeSA9IGdfYnVpbGRfZmlsZW5hbWUoZ19nZXRfdXNl
cl9kYXRhX2RpcigpLCAid2Via2l0IiwgImRhdGFiYXNlcyIsIE5VTEwpOwotICAgIFdlYkNvcmU6
OkRhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLnNldERhdGFiYXNlUGF0aChkYXRhYmFzZURpcmVj
dG9yeSk7Ci0gICAgZ19mcmVlKGRhdGFiYXNlRGlyZWN0b3J5KTsKLSNlbmRpZgotfQotfQpJbmRl
eDogV2ViS2l0L2d0ay9BcGkvd2Via2l0Z3RrZ2xvYmFsLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0
L2d0ay9BcGkvd2Via2l0Z3RrZ2xvYmFsLmgJKHJldmlzaW9uIDI4MjUxKQorKysgV2ViS2l0L2d0
ay9BcGkvd2Via2l0Z3RrZ2xvYmFsLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNDEgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4gCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4gCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSwgSW5jLiAo
IkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9t
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
IAotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05U
UklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgV0VC
S0lUX0dMT0JBTF9ICi0jZGVmaW5lIFdFQktJVF9HTE9CQUxfSAotCi0jaW5jbHVkZSAid2Via2l0
Z3RrZGVmaW5lcy5oIgotCi1HX0JFR0lOX0RFQ0xTCi0KLVdFQktJVF9BUEkgdm9pZAotd2Via2l0
X2luaXQgKHZvaWQpOwotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYKSW5kZXg6IFdlYktpdC9ndGsv
QXBpL3dlYmtpdGd0a25ldHdvcmtyZXF1ZXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvZ3Rr
L0FwaS93ZWJraXRndGtuZXR3b3JrcmVxdWVzdC5jcHAJKHJldmlzaW9uIDI4MjUxKQorKysgV2Vi
S2l0L2d0ay9BcGkvd2Via2l0Z3RrbmV0d29ya3JlcXVlc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDk0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0
ZXIgRnJleXRoZXIKLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAotICogMy4gIE5laXRoZXIgdGhlIG5hbWUg
b2YgQXBwbGUsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLiAKLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAot
ICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpbmNsdWRlICJ3ZWJraXRndGtuZXR3b3JrcmVx
dWVzdC5oIgotI2luY2x1ZGUgIndlYmtpdGd0a3ByaXZhdGUuaCIKLQotdXNpbmcgbmFtZXNwYWNl
IFdlYktpdDsKLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1leHRlcm4gIkMiIHsKLQotR19E
RUZJTkVfVFlQRShXZWJLaXROZXR3b3JrUmVxdWVzdCwgd2Via2l0X25ldHdvcmtfcmVxdWVzdCwg
R19UWVBFX09CSkVDVCk7Ci0KLXN0YXRpYyB2b2lkIHdlYmtpdF9uZXR3b3JrX3JlcXVlc3RfZmlu
YWxpemUoR09iamVjdCogb2JqZWN0KQotewotICAgIFdlYktpdE5ldHdvcmtSZXF1ZXN0UHJpdmF0
ZSogcmVxdWVzdFByaXZhdGUgPSBXRUJLSVRfTkVUV09SS19SRVFVRVNUX0dFVF9QUklWQVRFKG9i
amVjdCk7Ci0KLSAgICBnX2ZyZWUocmVxdWVzdFByaXZhdGUtPnVyaSk7Ci0KLSAgICBHX09CSkVD
VF9DTEFTUyh3ZWJraXRfbmV0d29ya19yZXF1ZXN0X3BhcmVudF9jbGFzcyktPmZpbmFsaXplKG9i
amVjdCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHdlYmtpdF9uZXR3b3JrX3JlcXVlc3RfY2xhc3NfaW5p
dChXZWJLaXROZXR3b3JrUmVxdWVzdENsYXNzKiByZXF1ZXN0Q2xhc3MpCi17Ci0gICAgZ190eXBl
X2NsYXNzX2FkZF9wcml2YXRlKHJlcXVlc3RDbGFzcywgc2l6ZW9mKFdlYktpdE5ldHdvcmtSZXF1
ZXN0UHJpdmF0ZSkpOwotCi0gICAgR19PQkpFQ1RfQ0xBU1MocmVxdWVzdENsYXNzKS0+ZmluYWxp
emUgPSB3ZWJraXRfbmV0d29ya19yZXF1ZXN0X2ZpbmFsaXplOwotfQotCi1zdGF0aWMgdm9pZCB3
ZWJraXRfbmV0d29ya19yZXF1ZXN0X2luaXQoV2ViS2l0TmV0d29ya1JlcXVlc3QqIHJlcXVlc3Qp
Ci17Ci19Ci0KLVdlYktpdE5ldHdvcmtSZXF1ZXN0KiB3ZWJraXRfbmV0d29ya19yZXF1ZXN0X25l
dyhjb25zdCBnY2hhciogdXJpKQotewotICAgIFdlYktpdE5ldHdvcmtSZXF1ZXN0KiByZXF1ZXN0
ID0gV0VCS0lUX05FVFdPUktfUkVRVUVTVChnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfTkVUV09S
S19SRVFVRVNULCBOVUxMKSk7Ci0gICAgV2ViS2l0TmV0d29ya1JlcXVlc3RQcml2YXRlKiByZXF1
ZXN0UHJpdmF0ZSA9IFdFQktJVF9ORVRXT1JLX1JFUVVFU1RfR0VUX1BSSVZBVEUocmVxdWVzdCk7
Ci0KLSAgICByZXF1ZXN0UHJpdmF0ZS0+dXJpID0gZ19zdHJkdXAodXJpKTsKLQotICAgIHJldHVy
biByZXF1ZXN0OwotfQotCi12b2lkIHdlYmtpdF9uZXR3b3JrX3JlcXVlc3Rfc2V0X3VyaShXZWJL
aXROZXR3b3JrUmVxdWVzdCogcmVxdWVzdCwgY29uc3QgZ2NoYXIqIHVyaSkKLXsKLSAgICBXZWJL
aXROZXR3b3JrUmVxdWVzdFByaXZhdGUqIHJlcXVlc3RQcml2YXRlOwotCi0gICAgZ19yZXR1cm5f
aWZfZmFpbChXRUJLSVRfSVNfTkVUV09SS19SRVFVRVNUKHJlcXVlc3QpKTsKLQotICAgIHJlcXVl
c3RQcml2YXRlID0gV0VCS0lUX05FVFdPUktfUkVRVUVTVF9HRVRfUFJJVkFURShyZXF1ZXN0KTsK
LQotICAgIGdfZnJlZShyZXF1ZXN0UHJpdmF0ZS0+dXJpKTsKLSAgICByZXF1ZXN0UHJpdmF0ZS0+
dXJpID0gZ19zdHJkdXAodXJpKTsKLX0KLQotY29uc3QgZ2NoYXIqIHdlYmtpdF9uZXR3b3JrX3Jl
cXVlc3RfZ2V0X3VyaShXZWJLaXROZXR3b3JrUmVxdWVzdCogcmVxdWVzdCkKLXsKLSAgICBXZWJL
aXROZXR3b3JrUmVxdWVzdFByaXZhdGUqIHJlcXVlc3RQcml2YXRlOwotCi0gICAgZ19yZXR1cm5f
dmFsX2lmX2ZhaWwoV0VCS0lUX0lTX05FVFdPUktfUkVRVUVTVChyZXF1ZXN0KSwgTlVMTCk7Ci0K
LSAgICByZXF1ZXN0UHJpdmF0ZSA9IFdFQktJVF9ORVRXT1JLX1JFUVVFU1RfR0VUX1BSSVZBVEUo
cmVxdWVzdCk7Ci0KLSAgICByZXR1cm4gcmVxdWVzdFByaXZhdGUtPnVyaTsKLX0KLQotfQpJbmRl
eDogV2ViS2l0L2d0ay9BcGkvd2Via2l0Z3RrbmV0d29ya3JlcXVlc3QuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJLaXQvZ3RrL0FwaS93ZWJraXRndGtuZXR3b3JrcmVxdWVzdC5oCShyZXZpc2lvbiAyODI1
MSkKKysrIFdlYktpdC9ndGsvQXBpL3dlYmtpdGd0a25ldHdvcmtyZXF1ZXN0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNjggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIg
SGFucyBQZXRlciBGcmV5dGhlcgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0gKiAyLiAgUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCi0gKiAzLiAgTmVpdGhlciB0
aGUgbmFtZSBvZiBBcHBsZSwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAg
IGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpZm5kZWYgV0VCS0lUX05FVFdPUktfUkVRVUVTVF9ICi0jZGVmaW5lIFdF
QktJVF9ORVRXT1JLX1JFUVVFU1RfSAotCi0jaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KLQotI2lu
Y2x1ZGUgIndlYmtpdGd0a2RlZmluZXMuaCIKLQotR19CRUdJTl9ERUNMUwotCi0jZGVmaW5lIFdF
QktJVF9UWVBFX05FVFdPUktfUkVRVUVTVCAgICAgICAgICAgICh3ZWJraXRfbmV0d29ya19yZXF1
ZXN0X2dldF90eXBlKCkpCi0jZGVmaW5lIFdFQktJVF9ORVRXT1JLX1JFUVVFU1Qob2JqKSAgICAg
ICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX1RZUEVfTkVU
V09SS19SRVFVRVNULCBXZWJLaXROZXR3b3JrUmVxdWVzdCkpCi0jZGVmaW5lIFdFQktJVF9ORVRX
T1JLX1JFUVVFU1RfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xh
c3MpLCAgV0VCS0lUX1RZUEVfTkVUV09SS19SRVFVRVNULCBXZWJLaXROZXR3b3JrUmVxdWVzdENs
YXNzKSkKLSNkZWZpbmUgV0VCS0lUX0lTX05FVFdPUktfUkVRVUVTVChvYmopICAgICAgICAgKEdf
VFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfVFlQRV9ORVRXT1JLX1JFUVVF
U1QpKQotI2RlZmluZSBXRUJLSVRfSVNfTkVUV09SS19SRVFVRVNUX0NMQVNTKGtsYXNzKSAoR19U
WVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9UWVBFX05FVFdPUktfUkVRVUVT
VCkpCi0jZGVmaW5lIFdFQktJVF9ORVRXT1JLX1JFUVVFU1RfR0VUX0NMQVNTKG9iaikgIChHX1RZ
UEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX1RZUEVfTkVUV09SS19SRVFVRVNU
LCBXZWJLaXROZXR3b3JrUmVxdWVzdENsYXNzKSkKLQotCi1zdHJ1Y3QgX1dlYktpdE5ldHdvcmtS
ZXF1ZXN0IHsKLSAgICBHT2JqZWN0IHBhcmVudDsKLX07Ci0KLXN0cnVjdCBfV2ViS2l0TmV0d29y
a1JlcXVlc3RDbGFzcyB7Ci0gICAgR09iamVjdENsYXNzIHBhcmVudDsKLX07Ci0KLVdFQktJVF9B
UEkgR1R5cGUKLXdlYmtpdF9uZXR3b3JrX3JlcXVlc3RfZ2V0X3R5cGUgKHZvaWQpOwotCi1XRUJL
SVRfQVBJIFdlYktpdE5ldHdvcmtSZXF1ZXN0Kgotd2Via2l0X25ldHdvcmtfcmVxdWVzdF9uZXcg
KGNvbnN0IGdjaGFyKiB1cmkpOwotCi1XRUJLSVRfQVBJIHZvaWQKLXdlYmtpdF9uZXR3b3JrX3Jl
cXVlc3Rfc2V0X3VyaSAoV2ViS2l0TmV0d29ya1JlcXVlc3QqIHJlcXVlc3QsIGNvbnN0IGdjaGFy
KiB1cmkpOwotCi1XRUJLSVRfQVBJIGNvbnN0IGdjaGFyKgotd2Via2l0X25ldHdvcmtfcmVxdWVz
dF9nZXRfdXJpIChXZWJLaXROZXR3b3JrUmVxdWVzdCogcmVxdWVzdCk7Ci0KLUdfRU5EX0RFQ0xT
Ci0KLSNlbmRpZgpJbmRleDogV2ViS2l0L2d0ay9BcGkvd2Via2l0Z3RrcGFnZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViS2l0L2d0ay9BcGkvd2Via2l0Z3RrcGFnZS5jcHAJKHJldmlzaW9uIDI4MjUx
KQorKysgV2ViS2l0L2d0ay9BcGkvd2Via2l0Z3RrcGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsODY1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0
ZXIgRnJleXRoZXIKLSAqIENvcHlyaWdodCAoQykgMjAwNyBDaHJpc3RpYW4gRHl3YW4gPGNocmlz
dGlhbkB0d290b2FzdHMuZGU+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgWGFuIExvcGV6IDx4YW5A
Z25vbWUub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA3IEFscCBUb2tlciA8YWxwQGF0b2tlci5j
b20+Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICog
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxl
LCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICog
ICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4gCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQg
SVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
Ci0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lu
Y2x1ZGUgImNvbmZpZy5oIgotCi0jaW5jbHVkZSAid2Via2l0Z3RrcGFnZS5oIgotI2luY2x1ZGUg
IndlYmtpdGd0ay1tYXJzaGFsLmgiCi0jaW5jbHVkZSAid2Via2l0Z3RrcHJpdmF0ZS5oIgotCi0j
aW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJDaHJvbWVDbGllbnRHdGsuaCIK
LSNpbmNsdWRlICJDb250ZXh0TWVudUNsaWVudEd0ay5oIgotI2luY2x1ZGUgIkRyYWdDbGllbnRH
dGsuaCIKLSNpbmNsdWRlICJFZGl0b3JDbGllbnRHdGsuaCIKLSNpbmNsdWRlICJFdmVudEhhbmRs
ZXIuaCIKLSNpbmNsdWRlICJIaXRUZXN0UmVxdWVzdC5oIgotI2luY2x1ZGUgIkhpdFRlc3RSZXN1
bHQuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJJbnNwZWN0b3JD
bGllbnRHdGsuaCIKLSNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgotI2luY2x1ZGUgIkZyYW1lVmll
dy5oIgotI2luY2x1ZGUgIlBsYXRmb3JtS2V5Ym9hcmRFdmVudC5oIgotI2luY2x1ZGUgIlBsYXRm
b3JtV2hlZWxFdmVudC5oIgotI2luY2x1ZGUgIlN1YnN0aXR1dGVEYXRhLmgiCi0KLSNpbmNsdWRl
IDxnZGsvZ2Rra2V5c3ltcy5oPgotCi11c2luZyBuYW1lc3BhY2UgV2ViS2l0OwotdXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7Ci0KLWV4dGVybiAiQyIgewotCi1lbnVtIHsKLSAgICAvKiBub3JtYWwg
c2lnbmFscyAqLwotICAgIE5BVklHQVRJT05fUkVRVUVTVEVELAotICAgIFdJTkRPV19PQkpFQ1Rf
Q0xFQVJFRCwKLSAgICBMT0FEX1NUQVJURUQsCi0gICAgTE9BRF9QUk9HUkVTU19DSEFOR0VELAot
ICAgIExPQURfRklOSVNIRUQsCi0gICAgVElUTEVfQ0hBTkdFRCwKLSAgICBIT1ZFUklOR19PVkVS
X0xJTkssCi0gICAgU1RBVFVTX0JBUl9URVhUX0NIQU5HRUQsCi0gICAgSUNPTkRfTE9BREVELAot
ICAgIFNFTEVDVElPTl9DSEFOR0VELAotICAgIENPTlNPTEVfTUVTU0FHRSwKLSAgICBTQ1JJUFRf
QUxFUlQsCi0gICAgU0NSSVBUX0NPTkZJUk0sCi0gICAgU0NSSVBUX1BST01QVCwKLSAgICBMQVNU
X1NJR05BTAotfTsKLQotc3RhdGljIGd1aW50IHdlYmtpdF9wYWdlX3NpZ25hbHNbTEFTVF9TSUdO
QUxdID0geyAwLCB9OwotCi1HX0RFRklORV9UWVBFKFdlYktpdFBhZ2UsIHdlYmtpdF9wYWdlLCBH
VEtfVFlQRV9DT05UQUlORVIpCi0KLXN0YXRpYyBnYm9vbGVhbiB3ZWJraXRfcGFnZV9leHBvc2Vf
ZXZlbnQoR3RrV2lkZ2V0KiB3aWRnZXQsIEdka0V2ZW50RXhwb3NlKiBldmVudCkKLXsKLSAgICBG
cmFtZSogZnJhbWUgPSBjb3JlKGdldEZyYW1lRnJvbVBhZ2UoV0VCS0lUX1BBR0Uod2lkZ2V0KSkp
OwotICAgIEdka1JlY3RhbmdsZSBjbGlwOwotICAgIGdka19yZWdpb25fZ2V0X2NsaXBib3goZXZl
bnQtPnJlZ2lvbiwgJmNsaXApOwotICAgIGNhaXJvX3QqIGNyID0gZ2RrX2NhaXJvX2NyZWF0ZShl
dmVudC0+d2luZG93KTsKLSAgICBHcmFwaGljc0NvbnRleHQgY3R4KGNyKTsKLSAgICBjdHguc2V0
R2RrRXhwb3NlRXZlbnQoZXZlbnQpOwotICAgIGlmIChmcmFtZS0+cmVuZGVyZXIoKSkgewotICAg
ICAgICBmcmFtZS0+dmlldygpLT5sYXlvdXRJZk5lZWRlZFJlY3Vyc2l2ZSgpOwotICAgICAgICBm
cmFtZS0+dmlldygpLT5wYWludCgmY3R4LCBjbGlwKTsKLSAgICB9Ci0gICAgY2Fpcm9fZGVzdHJv
eShjcik7Ci0KLSAgICByZXR1cm4gRkFMU0U7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbiB3ZWJraXRf
cGFnZV9rZXlfZXZlbnQoR3RrV2lkZ2V0KiB3aWRnZXQsIEdka0V2ZW50S2V5KiBldmVudCkKLXsK
LSAgICBGcmFtZSogZnJhbWUgPSBjb3JlKGdldEZyYW1lRnJvbVBhZ2UoV0VCS0lUX1BBR0Uod2lk
Z2V0KSkpOwotICAgIFBsYXRmb3JtS2V5Ym9hcmRFdmVudCBrZXlib2FyZEV2ZW50KGV2ZW50KTsK
LQotICAgIGlmIChmcmFtZS0+ZXZlbnRIYW5kbGVyKCktPmtleUV2ZW50KGtleWJvYXJkRXZlbnQp
KQotICAgICAgICByZXR1cm4gVFJVRTsKLQotICAgIGlmIChldmVudC0+dHlwZSAhPSBHREtfS0VZ
X1BSRVNTKQotICAgICAgICByZXR1cm4gRkFMU0U7Ci0KLSAgICBGcmFtZVZpZXcqIHZpZXcgPSBm
cmFtZS0+dmlldygpOwotCi0gICAgLyogRklYTUU6IGF0IHRoZSB2ZXJ5IGxlYXN0IHdlIHNob3Vs
ZCBiZSB1c2luZyB0aGUgc2FtZSBjb2RlIHRoYW4gdGhlCi0gICAgICAgV2luZG93cyBwb3J0IGhl
cmUsIGJ1dCBvdXIgU2Nyb2xsVmlldyBmaWxlIGRpdmVyZ2VzIGVub3VnaCB0byBtYWtlCi0gICAg
ICAgdGhhdCBpbXBvc3NpYmxlLiBBIHNob3J0IHRlcm0gc29sdXRpb24gd291bGQgYmUgdG8gdW5p
ZnkgU2Nyb2xsVmlld1dpbgotICAgICAgIGFuZCBTY3JvbGxWaWV3R3RrLiBMb25nLXRlcm0gU2Ny
b2xsVmlldyBhbmQgRnJhbWVWaWV3IHNob3VsZCBiZQotICAgICAgIHVuaWZpZWQgYW5kIHVzZWQg
ZXZlcnl3aGVyZSBmb3Igc2Nyb2xsYmFycyAqLwotCi0gICAgc3dpdGNoIChldmVudC0+a2V5dmFs
KSB7Ci0gICAgY2FzZSAoR0RLX0Rvd24pOgotICAgICAgICB2aWV3LT5zY3JvbGxCeSgwLCBMSU5F
X1NURVApOwotICAgICAgICByZXR1cm4gVFJVRTsKLSAgICBjYXNlIChHREtfVXApOgotICAgICAg
ICB2aWV3LT5zY3JvbGxCeSgwLCAtTElORV9TVEVQKTsKLSAgICAgICAgcmV0dXJuIFRSVUU7Ci0g
ICAgY2FzZSAoR0RLX1JpZ2h0KToKLSAgICAgICAgdmlldy0+c2Nyb2xsQnkoTElORV9TVEVQLCAw
KTsKLSAgICAgICAgcmV0dXJuIFRSVUU7Ci0gICAgY2FzZSAoR0RLX0xlZnQpOgotICAgICAgICB2
aWV3LT5zY3JvbGxCeSgtTElORV9TVEVQLCAwKTsKLSAgICAgICAgcmV0dXJuIFRSVUU7Ci0gICAg
fQotCi0gICAgcmV0dXJuIEZBTFNFOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X3BhZ2Vf
YnV0dG9uX2V2ZW50KEd0a1dpZGdldCogd2lkZ2V0LCBHZGtFdmVudEJ1dHRvbiogZXZlbnQpCi17
Ci0gICAgRnJhbWUqIGZyYW1lID0gY29yZShnZXRGcmFtZUZyb21QYWdlKFdFQktJVF9QQUdFKHdp
ZGdldCkpKTsKLQotICAgIGlmIChldmVudC0+dHlwZSA9PSBHREtfQlVUVE9OX1JFTEVBU0UpCi0g
ICAgICAgIHJldHVybiBmcmFtZS0+ZXZlbnRIYW5kbGVyKCktPmhhbmRsZU1vdXNlUmVsZWFzZUV2
ZW50KFBsYXRmb3JtTW91c2VFdmVudChldmVudCkpOwotCi0gICAgLy8gRklYTUU6IG5lZWQgdG8g
a2VlcCB0cmFjayBvZiBzdWJmcmFtZSBmb2N1cyBmb3Iga2V5IGV2ZW50cwotICAgIGd0a193aWRn
ZXRfZ3JhYl9mb2N1cyhHVEtfV0lER0VUKHdpZGdldCkpOwotICAgIHJldHVybiBmcmFtZS0+ZXZl
bnRIYW5kbGVyKCktPmhhbmRsZU1vdXNlUHJlc3NFdmVudChQbGF0Zm9ybU1vdXNlRXZlbnQoZXZl
bnQpKTsKLX0KLQotc3RhdGljIGdib29sZWFuIHdlYmtpdF9wYWdlX21vdGlvbl9ldmVudChHdGtX
aWRnZXQqIHdpZGdldCwgR2RrRXZlbnRNb3Rpb24qIGV2ZW50KQotewotICAgIEZyYW1lKiBmcmFt
ZSA9IGNvcmUoZ2V0RnJhbWVGcm9tUGFnZShXRUJLSVRfUEFHRSh3aWRnZXQpKSk7Ci0gICAgcmV0
dXJuIGZyYW1lLT5ldmVudEhhbmRsZXIoKS0+bW91c2VNb3ZlZChQbGF0Zm9ybU1vdXNlRXZlbnQo
ZXZlbnQpKTsKLX0KLQotc3RhdGljIGdib29sZWFuIHdlYmtpdF9wYWdlX3Njcm9sbF9ldmVudChH
dGtXaWRnZXQqIHdpZGdldCwgR2RrRXZlbnRTY3JvbGwqIGV2ZW50KQotewotICAgIEZyYW1lKiBm
cmFtZSA9IGNvcmUoZ2V0RnJhbWVGcm9tUGFnZShXRUJLSVRfUEFHRSh3aWRnZXQpKSk7Ci0gICAg
UGxhdGZvcm1XaGVlbEV2ZW50IHdoZWVsRXZlbnQoZXZlbnQpOwotICAgIHJldHVybiBmcmFtZS0+
ZXZlbnRIYW5kbGVyKCktPmhhbmRsZVdoZWVsRXZlbnQod2hlZWxFdmVudCk7Ci19Ci0KLXN0YXRp
YyB2b2lkIHdlYmtpdF9wYWdlX3NpemVfYWxsb2NhdGUoR3RrV2lkZ2V0KiB3aWRnZXQsIEd0a0Fs
bG9jYXRpb24qIGFsbG9jYXRpb24pCi17Ci0gICAgR1RLX1dJREdFVF9DTEFTUyh3ZWJraXRfcGFn
ZV9wYXJlbnRfY2xhc3MpLT5zaXplX2FsbG9jYXRlKHdpZGdldCxhbGxvY2F0aW9uKTsKLQotICAg
IEZyYW1lKiBmcmFtZSA9IGNvcmUoZ2V0RnJhbWVGcm9tUGFnZShXRUJLSVRfUEFHRSh3aWRnZXQp
KSk7Ci0gICAgZnJhbWUtPnZpZXcoKS0+cmVzaXplKGFsbG9jYXRpb24tPndpZHRoLCBhbGxvY2F0
aW9uLT5oZWlnaHQpOwotICAgIGZyYW1lLT5mb3JjZUxheW91dCgpOwotICAgIGZyYW1lLT52aWV3
KCktPmFkanVzdFZpZXdTaXplKCk7Ci0gICAgZnJhbWUtPnNlbmRSZXNpemVFdmVudCgpOwotfQot
Ci1zdGF0aWMgdm9pZCB3ZWJraXRfcGFnZV9yZWFsaXplKEd0a1dpZGdldCogd2lkZ2V0KQotewot
ICAgIEdUS19XSURHRVRfU0VUX0ZMQUdTKHdpZGdldCwgR1RLX1JFQUxJWkVEKTsKLQotICAgIEdk
a1dpbmRvd0F0dHIgYXR0cmlidXRlczsKLSAgICBhdHRyaWJ1dGVzLndpbmRvd190eXBlID0gR0RL
X1dJTkRPV19DSElMRDsKLSAgICBhdHRyaWJ1dGVzLnggPSB3aWRnZXQtPmFsbG9jYXRpb24ueDsK
LSAgICBhdHRyaWJ1dGVzLnkgPSB3aWRnZXQtPmFsbG9jYXRpb24ueTsKLSAgICBhdHRyaWJ1dGVz
LndpZHRoID0gd2lkZ2V0LT5hbGxvY2F0aW9uLndpZHRoOwotICAgIGF0dHJpYnV0ZXMuaGVpZ2h0
ID0gd2lkZ2V0LT5hbGxvY2F0aW9uLmhlaWdodDsKLSAgICBhdHRyaWJ1dGVzLndjbGFzcyA9IEdE
S19JTlBVVF9PVVRQVVQ7Ci0gICAgYXR0cmlidXRlcy52aXN1YWwgPSBndGtfd2lkZ2V0X2dldF92
aXN1YWwgKHdpZGdldCk7Ci0gICAgYXR0cmlidXRlcy5jb2xvcm1hcCA9IGd0a193aWRnZXRfZ2V0
X2NvbG9ybWFwICh3aWRnZXQpOwotICAgIGF0dHJpYnV0ZXMuZXZlbnRfbWFzayA9IEdES19WSVNJ
QklMSVRZX05PVElGWV9NQVNLCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBHREtfRVhQ
T1NVUkVfTUFTSwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgR0RLX0JVVFRPTl9QUkVT
U19NQVNLCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBHREtfQlVUVE9OX1JFTEVBU0Vf
TUFTSwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgR0RLX1BPSU5URVJfTU9USU9OX01B
U0sKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEdES19LRVlfUFJFU1NfTUFTSwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHwgR0RLX0tFWV9SRUxFQVNFX01BU0sKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB8IEdES19CVVRUT05fTU9USU9OX01BU0sKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB8IEdES19CVVRUT04xX01PVElPTl9NQVNLCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfCBHREtfQlVUVE9OMl9NT1RJT05fTUFTSwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHwgR0RLX0JVVFRPTjNfTU9USU9OX01BU0s7Ci0KLSAgICBnaW50IGF0dHJp
YnV0ZXNfbWFzayA9IEdES19XQV9YIHwgR0RLX1dBX1kgfCBHREtfV0FfVklTVUFMIHwgR0RLX1dB
X0NPTE9STUFQOwotICAgIHdpZGdldC0+d2luZG93ID0gZ2RrX3dpbmRvd19uZXcoZ3RrX3dpZGdl
dF9nZXRfcGFyZW50X3dpbmRvdyAod2lkZ2V0KSwgJmF0dHJpYnV0ZXMsIGF0dHJpYnV0ZXNfbWFz
ayk7Ci0gICAgZ2RrX3dpbmRvd19zZXRfdXNlcl9kYXRhKHdpZGdldC0+d2luZG93LCB3aWRnZXQp
OwotfQotCi1zdGF0aWMgdm9pZCB3ZWJraXRfcGFnZV9zZXRfc2Nyb2xsX2FkanVzdG1lbnRzKFdl
YktpdFBhZ2UqIHBhZ2UsIEd0a0FkanVzdG1lbnQqIGhhZGosIEd0a0FkanVzdG1lbnQqIHZhZGop
Ci17Ci0gICAgRnJhbWVWaWV3KiB2aWV3ID0gY29yZShnZXRGcmFtZUZyb21QYWdlKHBhZ2UpKS0+
dmlldygpOwotICAgIHZpZXctPnNldEd0a0FkanVzdG1lbnRzKGhhZGosIHZhZGopOwotfQotCi1z
dGF0aWMgdm9pZCB3ZWJraXRfcGFnZV9jb250YWluZXJfYWRkKEd0a0NvbnRhaW5lciogY29udGFp
bmVyLCBHdGtXaWRnZXQqIHdpZGdldCkKLXsKLSAgICBXZWJLaXRQYWdlKiBwYWdlID0gV0VCS0lU
X1BBR0UoY29udGFpbmVyKTsKLSAgICBXZWJLaXRQYWdlUHJpdmF0ZSogcHJpdmF0ZV9kYXRhID0g
V0VCS0lUX1BBR0VfR0VUX1BSSVZBVEUocGFnZSk7Ci0KLSAgICBwcml2YXRlX2RhdGEtPmNoaWxk
cmVuLmFkZCh3aWRnZXQpOwotICAgIGlmIChHVEtfV0lER0VUX1JFQUxJWkVEKGNvbnRhaW5lcikp
Ci0gICAgICAgIGd0a193aWRnZXRfc2V0X3BhcmVudF93aW5kb3cod2lkZ2V0LCBHVEtfV0lER0VU
KHBhZ2UpLT53aW5kb3cpOwotICAgIGd0a193aWRnZXRfc2V0X3BhcmVudCh3aWRnZXQsIEdUS19X
SURHRVQoY29udGFpbmVyKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHdlYmtpdF9wYWdlX2NvbnRhaW5l
cl9yZW1vdmUoR3RrQ29udGFpbmVyKiBjb250YWluZXIsIEd0a1dpZGdldCogd2lkZ2V0KQotewot
ICAgIFdlYktpdFBhZ2VQcml2YXRlKiBwcml2YXRlX2RhdGEgPSBXRUJLSVRfUEFHRV9HRVRfUFJJ
VkFURShXRUJLSVRfUEFHRShjb250YWluZXIpKTsKLQotICAgIGlmIChwcml2YXRlX2RhdGEtPmNo
aWxkcmVuLmNvbnRhaW5zKHdpZGdldCkpIHsKLSAgICAgICAgZ3RrX3dpZGdldF91bnBhcmVudCh3
aWRnZXQpOwotICAgICAgICBwcml2YXRlX2RhdGEtPmNoaWxkcmVuLnJlbW92ZSh3aWRnZXQpOwot
ICAgIH0KLX0KLQotc3RhdGljIHZvaWQgd2Via2l0X3BhZ2VfY29udGFpbmVyX2ZvcmFsbChHdGtD
b250YWluZXIqIGNvbnRhaW5lciwgZ2Jvb2xlYW4sIEd0a0NhbGxiYWNrIGNhbGxiYWNrLCBncG9p
bnRlciBjYWxsYmFja0RhdGEpCi17Ci0gICAgV2ViS2l0UGFnZVByaXZhdGUqIHByaXZhdGVEYXRh
ID0gV0VCS0lUX1BBR0VfR0VUX1BSSVZBVEUoV0VCS0lUX1BBR0UoY29udGFpbmVyKSk7Ci0KLSAg
ICBIYXNoU2V0PEd0a1dpZGdldCo+IGNoaWxkcmVuID0gcHJpdmF0ZURhdGEtPmNoaWxkcmVuOwot
ICAgIEhhc2hTZXQ8R3RrV2lkZ2V0Kj46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGNoaWxkcmVuLmVu
ZCgpOwotICAgIGZvciAoSGFzaFNldDxHdGtXaWRnZXQqPjo6Y29uc3RfaXRlcmF0b3IgY3VycmVu
dCA9IGNoaWxkcmVuLmJlZ2luKCk7IGN1cnJlbnQgIT0gZW5kOyArK2N1cnJlbnQpCi0gICAgICAg
ICgqY2FsbGJhY2spKCpjdXJyZW50LCBjYWxsYmFja0RhdGEpOwotfQotCi1zdGF0aWMgV2ViS2l0
UGFnZSogd2Via2l0X3BhZ2VfcmVhbF9jcmVhdGVfcGFnZShXZWJLaXRQYWdlKikKLXsKLSAgICBu
b3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiAwOwotfQotCi1zdGF0aWMgV2ViS2l0TmF2aWdh
dGlvblJlc3BvbnNlIHdlYmtpdF9wYWdlX3JlYWxfbmF2aWdhdGlvbl9yZXF1ZXN0ZWQoV2ViS2l0
UGFnZSosIFdlYktpdEZyYW1lKiBmcmFtZSwgV2ViS2l0TmV0d29ya1JlcXVlc3QqKQotewotICAg
IG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIFdFQktJVF9OQVZJR0FUSU9OX1JFU1BPTlNF
X0FDQ0VQVDsKLX0KLQotc3RhdGljIHZvaWQgd2Via2l0X3BhZ2VfcmVhbF93aW5kb3dfb2JqZWN0
X2NsZWFyZWQoV2ViS2l0UGFnZSosIFdlYktpdEZyYW1lKiwgSlNHbG9iYWxDb250ZXh0UmVmIGNv
bnRleHQsIEpTT2JqZWN0UmVmIHdpbmRvd19vYmplY3QpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQo
KTsKLX0KLQotc3RhdGljIGdjaGFyKiB3ZWJraXRfcGFnZV9yZWFsX2Nob29zZV9maWxlKFdlYktp
dFBhZ2UqLCBXZWJLaXRGcmFtZSosIGNvbnN0IGdjaGFyKiBvbGRfbmFtZSkKLXsKLSAgICBub3RJ
bXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBnX3N0cmR1cChvbGRfbmFtZSk7Ci19Ci0KLXR5cGVk
ZWYgZW51bSB7Ci0gICAgV0VCS0lUX1NDUklQVF9ESUFMT0dfQUxFUlQsCi0gICAgV0VCS0lUX1ND
UklQVF9ESUFMT0dfQ09ORklSTSwKLSAgICBXRUJLSVRfU0NSSVBUX0RJQUxPR19QUk9NUFQKLSB9
IFdlYktpdFNjcmlwdERpYWxvZ1R5cGU7Ci0KLXN0YXRpYyBnYm9vbGVhbiB3ZWJraXRfcGFnZV9z
Y3JpcHRfZGlhbG9nKFdlYktpdFBhZ2UqIHBhZ2UsIFdlYktpdEZyYW1lKiBmcmFtZSwgY29uc3Qg
Z2NoYXIqIG1lc3NhZ2UsIFdlYktpdFNjcmlwdERpYWxvZ1R5cGUgdHlwZSwgY29uc3QgZ2NoYXIq
IGRlZmF1bHRWYWx1ZSwgZ2NoYXIqKiB2YWx1ZSkKLXsKLSAgICBHdGtNZXNzYWdlVHlwZSBtZXNz
YWdlVHlwZTsKLSAgICBHdGtCdXR0b25zVHlwZSBidXR0b25zOwotICAgIGdpbnQgZGVmYXVsdFJl
c3BvbnNlOwotICAgIEd0a1dpZGdldCogd2luZG93OwotICAgIEd0a1dpZGdldCogZGlhbG9nOwot
ICAgIEd0a1dpZGdldCogZW50cnkgPSAwOwotICAgIGdib29sZWFuIGRpZENvbmZpcm0gPSBGQUxT
RTsKLQotICAgIHN3aXRjaCAodHlwZSkgewotICAgIGNhc2UgV0VCS0lUX1NDUklQVF9ESUFMT0df
QUxFUlQ6Ci0gICAgICAgIG1lc3NhZ2VUeXBlID0gR1RLX01FU1NBR0VfV0FSTklORzsKLSAgICAg
ICAgYnV0dG9ucyA9IEdUS19CVVRUT05TX0NMT1NFOwotICAgICAgICBkZWZhdWx0UmVzcG9uc2Ug
PSBHVEtfUkVTUE9OU0VfQ0xPU0U7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgV0VCS0lUX1ND
UklQVF9ESUFMT0dfQ09ORklSTToKLSAgICAgICAgbWVzc2FnZVR5cGUgPSBHVEtfTUVTU0FHRV9R
VUVTVElPTjsKLSAgICAgICAgYnV0dG9ucyA9IEdUS19CVVRUT05TX1lFU19OTzsKLSAgICAgICAg
ZGVmYXVsdFJlc3BvbnNlID0gR1RLX1JFU1BPTlNFX1lFUzsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBXRUJLSVRfU0NSSVBUX0RJQUxPR19QUk9NUFQ6Ci0gICAgICAgIG1lc3NhZ2VUeXBlID0g
R1RLX01FU1NBR0VfUVVFU1RJT047Ci0gICAgICAgIGJ1dHRvbnMgPSBHVEtfQlVUVE9OU19PS19D
QU5DRUw7Ci0gICAgICAgIGRlZmF1bHRSZXNwb25zZSA9IEdUS19SRVNQT05TRV9PSzsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgZ193YXJuaW5nKCJVbmtub3duIHZhbHVl
IGZvciBXZWJLaXRTY3JpcHREaWFsb2dUeXBlLiIpOwotICAgICAgICByZXR1cm4gRkFMU0U7Ci0g
ICAgfQotCi0gICAgd2luZG93ID0gZ3RrX3dpZGdldF9nZXRfdG9wbGV2ZWwoR1RLX1dJREdFVChw
YWdlKSk7Ci0gICAgZGlhbG9nID0gZ3RrX21lc3NhZ2VfZGlhbG9nX25ldyhHVEtfV0lER0VUX1RP
UExFVkVMKHdpbmRvdykgPyBHVEtfV0lORE9XKHdpbmRvdykgOiAwLCBHVEtfRElBTE9HX0RFU1RS
T1lfV0lUSF9QQVJFTlQsIG1lc3NhZ2VUeXBlLCBidXR0b25zLCAiJXMiLCBtZXNzYWdlKTsKLSAg
ICBnY2hhciogdGl0bGUgPSBnX3N0cmNvbmNhdCgiSmF2YVNjcmlwdCAtICIsIHdlYmtpdF9mcmFt
ZV9nZXRfbG9jYXRpb24oZnJhbWUpLCBOVUxMKTsKLSAgICBndGtfd2luZG93X3NldF90aXRsZShH
VEtfV0lORE9XKGRpYWxvZyksIHRpdGxlKTsKLSAgICBnX2ZyZWUodGl0bGUpOwotCi0gICAgaWYg
KHR5cGUgPT0gV0VCS0lUX1NDUklQVF9ESUFMT0dfUFJPTVBUKSB7Ci0gICAgICAgIGVudHJ5ID0g
Z3RrX2VudHJ5X25ldygpOwotICAgICAgICBndGtfZW50cnlfc2V0X3RleHQoR1RLX0VOVFJZKGVu
dHJ5KSwgZGVmYXVsdFZhbHVlKTsKLSAgICAgICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRB
SU5FUihHVEtfRElBTE9HKGRpYWxvZyktPnZib3gpLCBlbnRyeSk7Ci0gICAgICAgIGd0a19lbnRy
eV9zZXRfYWN0aXZhdGVzX2RlZmF1bHQoR1RLX0VOVFJZKGVudHJ5KSwgVFJVRSk7Ci0gICAgICAg
IGd0a193aWRnZXRfc2hvdyhlbnRyeSk7Ci0gICAgfQotCi0gICAgZ3RrX2RpYWxvZ19zZXRfZGVm
YXVsdF9yZXNwb25zZShHVEtfRElBTE9HKGRpYWxvZyksIGRlZmF1bHRSZXNwb25zZSk7Ci0gICAg
Z2ludCByZXNwb25zZSA9IGd0a19kaWFsb2dfcnVuKEdUS19ESUFMT0coZGlhbG9nKSk7Ci0KLSAg
ICBzd2l0Y2ggKHJlc3BvbnNlKSB7Ci0gICAgY2FzZSBHVEtfUkVTUE9OU0VfWUVTOgotICAgICAg
ICBkaWRDb25maXJtID0gVFJVRTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHVEtfUkVTUE9O
U0VfT0s6Ci0gICAgICAgIGRpZENvbmZpcm0gPSBUUlVFOwotICAgICAgICBpZiAoZW50cnkpCi0g
ICAgICAgICAgICAqdmFsdWUgPSBnX3N0cmR1cChndGtfZW50cnlfZ2V0X3RleHQoR1RLX0VOVFJZ
KGVudHJ5KSkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICAqdmFsdWUgPSAwOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIEdUS19SRVNQT05TRV9OTzoKLSAgICBjYXNlIEdUS19SRVNQT05T
RV9DQU5DRUw6Ci0gICAgICAgIGRpZENvbmZpcm0gPSBGQUxTRTsKLSAgICAgICAgYnJlYWs7Ci0K
LSAgICB9Ci0gICAgZ3RrX3dpZGdldF9kZXN0cm95KEdUS19XSURHRVQoZGlhbG9nKSk7Ci0gICAg
cmV0dXJuIGRpZENvbmZpcm07Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbiB3ZWJraXRfcGFnZV9yZWFs
X3NjcmlwdF9hbGVydChXZWJLaXRQYWdlKiBwYWdlLCBXZWJLaXRGcmFtZSogZnJhbWUsIGNvbnN0
IGdjaGFyKiBtZXNzYWdlKQotewotICAgIHdlYmtpdF9wYWdlX3NjcmlwdF9kaWFsb2cocGFnZSwg
ZnJhbWUsIG1lc3NhZ2UsIFdFQktJVF9TQ1JJUFRfRElBTE9HX0FMRVJULCAwLCAwKTsKLSAgICBy
ZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIGdib29sZWFuIHdlYmtpdF9wYWdlX3JlYWxfc2NyaXB0
X2NvbmZpcm0oV2ViS2l0UGFnZSogcGFnZSwgV2ViS2l0RnJhbWUqIGZyYW1lLCBjb25zdCBnY2hh
ciogbWVzc2FnZSwgZ2Jvb2xlYW4qIGRpZENvbmZpcm0pCi17Ci0gICAgKmRpZENvbmZpcm0gPSB3
ZWJraXRfcGFnZV9zY3JpcHRfZGlhbG9nKHBhZ2UsIGZyYW1lLCBtZXNzYWdlLCBXRUJLSVRfU0NS
SVBUX0RJQUxPR19DT05GSVJNLCAwLCAwKTsKLSAgICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGlj
IGdib29sZWFuIHdlYmtpdF9wYWdlX3JlYWxfc2NyaXB0X3Byb21wdChXZWJLaXRQYWdlKiBwYWdl
LCBXZWJLaXRGcmFtZSogZnJhbWUsIGNvbnN0IGdjaGFyKiBtZXNzYWdlLCBjb25zdCBnY2hhciog
ZGVmYXVsdFZhbHVlLCBnY2hhcioqIHZhbHVlKQotewotICAgIGlmICghd2Via2l0X3BhZ2Vfc2Ny
aXB0X2RpYWxvZyhwYWdlLCBmcmFtZSwgbWVzc2FnZSwgV0VCS0lUX1NDUklQVF9ESUFMT0dfUFJP
TVBULCBkZWZhdWx0VmFsdWUsIHZhbHVlKSkKLSAgICAgICAgKnZhbHVlID0gTlVMTDsKLSAgICBy
ZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIGdib29sZWFuIHdlYmtpdF9wYWdlX3JlYWxfY29uc29s
ZV9tZXNzYWdlKFdlYktpdFBhZ2UqIHBhZ2UsIGNvbnN0IGdjaGFyKiBtZXNzYWdlLCB1bnNpZ25l
ZCBpbnQgbGluZSwgY29uc3QgZ2NoYXIqIHNvdXJjZUlkKQotewotICAgIGdfcHJpbnQoImNvbnNv
bGUgbWVzc2FnZTogJXMgQCVkOiAlc1xuIiwgc291cmNlSWQsIGxpbmUsIG1lc3NhZ2UpOwotICAg
IHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgdm9pZCB3ZWJraXRfcGFnZV9maW5hbGl6ZShHT2Jq
ZWN0KiBvYmplY3QpCi17Ci0gICAgd2Via2l0X3BhZ2Vfc3RvcF9sb2FkaW5nKFdFQktJVF9QQUdF
KG9iamVjdCkpOwotCi0gICAgV2ViS2l0UGFnZVByaXZhdGUqIHBhZ2VEYXRhID0gV0VCS0lUX1BB
R0VfR0VUX1BSSVZBVEUoV0VCS0lUX1BBR0Uob2JqZWN0KSk7Ci0gICAgZGVsZXRlIHBhZ2VEYXRh
LT5wYWdlOwotICAgIGRlbGV0ZSBwYWdlRGF0YS0+c2V0dGluZ3M7Ci0gICAgZ19vYmplY3RfdW5y
ZWYocGFnZURhdGEtPm1haW5GcmFtZSk7Ci0gICAgZGVsZXRlIHBhZ2VEYXRhLT51c2VyQWdlbnQ7
Ci0KLSAgICBHX09CSkVDVF9DTEFTUyh3ZWJraXRfcGFnZV9wYXJlbnRfY2xhc3MpLT5maW5hbGl6
ZShvYmplY3QpOwotfQotCi1zdGF0aWMgdm9pZCB3ZWJraXRfcGFnZV9jbGFzc19pbml0KFdlYktp
dFBhZ2VDbGFzcyogcGFnZUNsYXNzKQotewotICAgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZShw
YWdlQ2xhc3MsIHNpemVvZihXZWJLaXRQYWdlUHJpdmF0ZSkpOwotCi0gICAgLyoKLSAgICAgKiBT
aWduYWxzCi0gICAgICovCi0KLSAgICB3ZWJraXRfcGFnZV9zaWduYWxzW05BVklHQVRJT05fUkVR
VUVTVEVEXSA9IGdfc2lnbmFsX25ldygibmF2aWdhdGlvbl9yZXF1ZXN0ZWQiLAotICAgICAgICAg
ICAgR19UWVBFX0ZST01fQ0xBU1MocGFnZUNsYXNzKSwKLSAgICAgICAgICAgIChHU2lnbmFsRmxh
Z3MpKEdfU0lHTkFMX1JVTl9MQVNUIHwgR19TSUdOQUxfQUNUSU9OKSwKLSAgICAgICAgICAgIEdf
U1RSVUNUX09GRlNFVCAoV2ViS2l0UGFnZUNsYXNzLCBuYXZpZ2F0aW9uX3JlcXVlc3RlZCksCi0g
ICAgICAgICAgICBOVUxMLAotICAgICAgICAgICAgTlVMTCwKLSAgICAgICAgICAgIHdlYmtpdF9t
YXJzaGFsX0lOVF9fT0JKRUNUX09CSkVDVCwKLSAgICAgICAgICAgIEdfVFlQRV9JTlQsIDIsCi0g
ICAgICAgICAgICBHX1RZUEVfT0JKRUNULAotICAgICAgICAgICAgR19UWVBFX09CSkVDVCk7Ci0K
LSAgICAvKioKLSAgICAgKiBXZWJLaXRQYWdlOjp3aW5kb3ctb2JqZWN0LWNsZWFyZWQ6Ci0gICAg
ICogQHBhZ2U6IHRoZSBvYmplY3Qgb24gd2hpY2ggdGhlIHNpZ25hbCBpcyBlbWl0dGVkCi0gICAg
ICogQGZyYW1lOiB0aGUgI1dlYktpdEZyYW1lIHRvIHdoaWNoIEB3aW5kb3dfb2JqZWN0IGJlbG9u
Z3MKLSAgICAgKiBAY29udGV4dDogdGhlICNKU0dsb2JhbENvbnRleHRSZWYgaG9sZGluZyB0aGUg
Z2xvYmFsIG9iamVjdCBhbmQgb3RoZXIKLSAgICAgKiBleGVjdXRpb24gc3RhdGU7IGVxdWl2YWxl
bnQgdG8gdGhlIHJldHVybiB2YWx1ZSBvZgotICAgICAqIHdlYmtpdF9mcmFtZV9nZXRfZ2xvYmFs
X2NvbnRleHQoQGZyYW1lKQotICAgICAqCi0gICAgICogQHdpbmRvd19vYmplY3Q6IHRoZSAjSlNP
YmplY3RSZWYgcmVwcmVzZW50aW5nIHRoZSBmcmFtZSdzIEphdmFTY3JpcHQKLSAgICAgKiB3aW5k
b3cgb2JqZWN0Ci0gICAgICoKLSAgICAgKiBFbWl0dGVkIHdoZW4gdGhlIEphdmFTY3JpcHQgd2lu
ZG93IG9iamVjdCBpbiBhICNXZWJLaXRGcmFtZSBoYXMgYmVlbgotICAgICAqIGNsZWFyZWQgaW4g
cHJlcGFyYXRpb24gZm9yIGEgbmV3IGxvYWQuIFRoaXMgaXMgdGhlIHByZWZlcnJlZCBwbGFjZSB0
bwotICAgICAqIHNldCBjdXN0b20gcHJvcGVydGllcyBvbiB0aGUgd2luZG93IG9iamVjdCB1c2lu
ZyB0aGUgSmF2YVNjcmlwdENvcmUgQVBJLgotICAgICAqLwotICAgIHdlYmtpdF9wYWdlX3NpZ25h
bHNbV0lORE9XX09CSkVDVF9DTEVBUkVEXSA9IGdfc2lnbmFsX25ldygid2luZG93X29iamVjdF9j
bGVhcmVkIiwKLSAgICAgICAgICAgIEdfVFlQRV9GUk9NX0NMQVNTKHBhZ2VDbGFzcyksCi0gICAg
ICAgICAgICAoR1NpZ25hbEZsYWdzKShHX1NJR05BTF9SVU5fTEFTVCB8IEdfU0lHTkFMX0FDVElP
TiksCi0gICAgICAgICAgICBHX1NUUlVDVF9PRkZTRVQgKFdlYktpdFBhZ2VDbGFzcywgd2luZG93
X29iamVjdF9jbGVhcmVkKSwKLSAgICAgICAgICAgIE5VTEwsCi0gICAgICAgICAgICBOVUxMLAot
ICAgICAgICAgICAgd2Via2l0X21hcnNoYWxfVk9JRF9fT0JKRUNUX1BPSU5URVJfUE9JTlRFUiwK
LSAgICAgICAgICAgIEdfVFlQRV9OT05FLCAzLAotICAgICAgICAgICAgV0VCS0lUX1RZUEVfRlJB
TUUsCi0gICAgICAgICAgICBHX1RZUEVfUE9JTlRFUiwKLSAgICAgICAgICAgIEdfVFlQRV9QT0lO
VEVSKTsKLQotICAgIC8qKgotICAgICAqIFdlYktpdFBhZ2U6OmxvYWQtc3RhcnRlZDoKLSAgICAg
KgotICAgICAqIEBwYWdlOiB0aGUgb2JqZWN0IG9uIHdoaWNoIHRoZSBzaWduYWwgaXMgZW1pdHRl
ZAotICAgICAqIEBmcmFtZTogdGhlIGZyYW1lIGdvaW5nIHRvIGRvIHRoZSBsb2FkCi0gICAgICoK
LSAgICAgKiBXaGVuIGEgI1dlYktpdEZyYW1lIGJlZ2lucyB0byBsb2FkIHRoaXMgc2lnbmFsIGlz
IGVtaXR0ZWQuCi0gICAgICovCi0gICAgd2Via2l0X3BhZ2Vfc2lnbmFsc1tMT0FEX1NUQVJURURd
ID0gZ19zaWduYWxfbmV3KCJsb2FkX3N0YXJ0ZWQiLAotICAgICAgICAgICAgR19UWVBFX0ZST01f
Q0xBU1MocGFnZUNsYXNzKSwKLSAgICAgICAgICAgIChHU2lnbmFsRmxhZ3MpKEdfU0lHTkFMX1JV
Tl9MQVNUIHwgR19TSUdOQUxfQUNUSU9OKSwKLSAgICAgICAgICAgIDAsCi0gICAgICAgICAgICBO
VUxMLAotICAgICAgICAgICAgTlVMTCwKLSAgICAgICAgICAgIGdfY2Nsb3N1cmVfbWFyc2hhbF9W
T0lEX19PQkpFQ1QsCi0gICAgICAgICAgICBHX1RZUEVfTk9ORSwgMSwKLSAgICAgICAgICAgIFdF
QktJVF9UWVBFX0ZSQU1FKTsKLQotICAgIC8qKgotICAgICAqIFdlYktpdFBhZ2U6OmxvYWQtcHJv
Z3Jlc3MtY2hhbmdlZDoKLSAgICAgKgotICAgICAqIEBwYWdlOiB0aGUgI1dlYktpdFBhZ2UKLSAg
ICAgKiBAcHJvZ3Jlc3M6IHRoZSBnbG9iYWwgcHJvZ3Jlc3MKLSAgICAgKi8KLSAgICB3ZWJraXRf
cGFnZV9zaWduYWxzW0xPQURfUFJPR1JFU1NfQ0hBTkdFRF0gPSBnX3NpZ25hbF9uZXcoImxvYWRf
cHJvZ3Jlc3NfY2hhbmdlZCIsCi0gICAgICAgICAgICBHX1RZUEVfRlJPTV9DTEFTUyhwYWdlQ2xh
c3MpLAotICAgICAgICAgICAgKEdTaWduYWxGbGFncykoR19TSUdOQUxfUlVOX0xBU1QgfCBHX1NJ
R05BTF9BQ1RJT04pLAotICAgICAgICAgICAgMCwKLSAgICAgICAgICAgIE5VTEwsCi0gICAgICAg
ICAgICBOVUxMLAotICAgICAgICAgICAgZ19jY2xvc3VyZV9tYXJzaGFsX1ZPSURfX0lOVCwKLSAg
ICAgICAgICAgIEdfVFlQRV9OT05FLCAxLAotICAgICAgICAgICAgR19UWVBFX0lOVCk7Ci0KLSAg
ICB3ZWJraXRfcGFnZV9zaWduYWxzW0xPQURfRklOSVNIRURdID0gZ19zaWduYWxfbmV3KCJsb2Fk
X2ZpbmlzaGVkIiwKLSAgICAgICAgICAgIEdfVFlQRV9GUk9NX0NMQVNTKHBhZ2VDbGFzcyksCi0g
ICAgICAgICAgICAoR1NpZ25hbEZsYWdzKShHX1NJR05BTF9SVU5fTEFTVCB8IEdfU0lHTkFMX0FD
VElPTiksCi0gICAgICAgICAgICAwLAotICAgICAgICAgICAgTlVMTCwKLSAgICAgICAgICAgIE5V
TEwsCi0gICAgICAgICAgICBnX2NjbG9zdXJlX21hcnNoYWxfVk9JRF9fT0JKRUNULAotICAgICAg
ICAgICAgR19UWVBFX05PTkUsIDEsCi0gICAgICAgICAgICBXRUJLSVRfVFlQRV9GUkFNRSk7Ci0K
LSAgICB3ZWJraXRfcGFnZV9zaWduYWxzW1RJVExFX0NIQU5HRURdID0gZ19zaWduYWxfbmV3KCJ0
aXRsZV9jaGFuZ2VkIiwKLSAgICAgICAgICAgIEdfVFlQRV9GUk9NX0NMQVNTKHBhZ2VDbGFzcyks
Ci0gICAgICAgICAgICAoR1NpZ25hbEZsYWdzKShHX1NJR05BTF9SVU5fTEFTVCB8IEdfU0lHTkFM
X0FDVElPTiksCi0gICAgICAgICAgICAwLAotICAgICAgICAgICAgTlVMTCwKLSAgICAgICAgICAg
IE5VTEwsCi0gICAgICAgICAgICB3ZWJraXRfbWFyc2hhbF9WT0lEX19TVFJJTkdfU1RSSU5HLAot
ICAgICAgICAgICAgR19UWVBFX05PTkUsIDIsCi0gICAgICAgICAgICBHX1RZUEVfU1RSSU5HLCBH
X1RZUEVfU1RSSU5HKTsKLQotICAgIHdlYmtpdF9wYWdlX3NpZ25hbHNbSE9WRVJJTkdfT1ZFUl9M
SU5LXSA9IGdfc2lnbmFsX25ldygiaG92ZXJpbmdfb3Zlcl9saW5rIiwKLSAgICAgICAgICAgIEdf
VFlQRV9GUk9NX0NMQVNTKHBhZ2VDbGFzcyksCi0gICAgICAgICAgICAoR1NpZ25hbEZsYWdzKShH
X1NJR05BTF9SVU5fTEFTVCB8IEdfU0lHTkFMX0FDVElPTiksCi0gICAgICAgICAgICAwLAotICAg
ICAgICAgICAgTlVMTCwKLSAgICAgICAgICAgIE5VTEwsCi0gICAgICAgICAgICB3ZWJraXRfbWFy
c2hhbF9WT0lEX19TVFJJTkdfU1RSSU5HLAotICAgICAgICAgICAgR19UWVBFX05PTkUsIDIsCi0g
ICAgICAgICAgICBHX1RZUEVfU1RSSU5HLAotICAgICAgICAgICAgR19UWVBFX1NUUklORyk7Ci0K
LSAgICB3ZWJraXRfcGFnZV9zaWduYWxzW1NUQVRVU19CQVJfVEVYVF9DSEFOR0VEXSA9IGdfc2ln
bmFsX25ldygic3RhdHVzX2Jhcl90ZXh0X2NoYW5nZWQiLAotICAgICAgICAgICAgR19UWVBFX0ZS
T01fQ0xBU1MocGFnZUNsYXNzKSwKLSAgICAgICAgICAgIChHU2lnbmFsRmxhZ3MpKEdfU0lHTkFM
X1JVTl9MQVNUIHwgR19TSUdOQUxfQUNUSU9OKSwKLSAgICAgICAgICAgIDAsCi0gICAgICAgICAg
ICBOVUxMLAotICAgICAgICAgICAgTlVMTCwKLSAgICAgICAgICAgIGdfY2Nsb3N1cmVfbWFyc2hh
bF9WT0lEX19TVFJJTkcsCi0gICAgICAgICAgICBHX1RZUEVfTk9ORSwgMSwKLSAgICAgICAgICAg
IEdfVFlQRV9TVFJJTkcpOwotCi0gICAgd2Via2l0X3BhZ2Vfc2lnbmFsc1tJQ09ORF9MT0FERURd
ID0gZ19zaWduYWxfbmV3KCJpY29uX2xvYWRlZCIsCi0gICAgICAgICAgICBHX1RZUEVfRlJPTV9D
TEFTUyhwYWdlQ2xhc3MpLAotICAgICAgICAgICAgKEdTaWduYWxGbGFncykoR19TSUdOQUxfUlVO
X0xBU1QgfCBHX1NJR05BTF9BQ1RJT04pLAotICAgICAgICAgICAgMCwKLSAgICAgICAgICAgIE5V
TEwsCi0gICAgICAgICAgICBOVUxMLAotICAgICAgICAgICAgZ19jY2xvc3VyZV9tYXJzaGFsX1ZP
SURfX1ZPSUQsCi0gICAgICAgICAgICBHX1RZUEVfTk9ORSwgMCk7Ci0KLSAgICB3ZWJraXRfcGFn
ZV9zaWduYWxzW1NFTEVDVElPTl9DSEFOR0VEXSA9IGdfc2lnbmFsX25ldygic2VsZWN0aW9uX2No
YW5nZWQiLAotICAgICAgICAgICAgR19UWVBFX0ZST01fQ0xBU1MocGFnZUNsYXNzKSwKLSAgICAg
ICAgICAgIChHU2lnbmFsRmxhZ3MpKEdfU0lHTkFMX1JVTl9MQVNUIHwgR19TSUdOQUxfQUNUSU9O
KSwKLSAgICAgICAgICAgIDAsCi0gICAgICAgICAgICBOVUxMLAotICAgICAgICAgICAgTlVMTCwK
LSAgICAgICAgICAgIGdfY2Nsb3N1cmVfbWFyc2hhbF9WT0lEX19WT0lELAotICAgICAgICAgICAg
R19UWVBFX05PTkUsIDApOwotCi0gICAgLyoqCi0gICAgICogV2ViS2l0UGFnZTo6Y29uc29sZS1t
ZXNzYWdlOgotICAgICAqCi0gICAgICogQHBhZ2U6IHRoZSBvYmplY3Qgb24gd2hpY2ggdGhlIHNp
Z25hbCBpcyBlbWl0dGVkCi0gICAgICogQG1lc3NhZ2U6IHRoZSBtZXNzYWdlIHRleHQKLSAgICAg
KiBAbGluZTogdGhlIGxpbmUgd2hlcmUgdGhlIGVycm9yIG9jY3VyZWQKLSAgICAgKiBAc291cmNl
X2lkOiB0aGUgc291cmNlIGlkCi0gICAgICogQHJldHVybjogVFJVRSB0byBzdG9wIG90aGVyIGhh
bmRsZXJzIGZyb20gYmVpbmcgaW52b2tlZCBmb3IgdGhlIGV2ZW50LiBGQUxTRSB0byBwcm9wYWdh
dGUgdGhlIGV2ZW50IGZ1cnRoZXIuCi0gICAgICoKLSAgICAgKiBBIEphdmFTY3JpcHQgY29uc29s
ZSBtZXNzYWdlIHdhcyBjcmVhdGVkLgotICAgICAqLwotICAgIHdlYmtpdF9wYWdlX3NpZ25hbHNb
Q09OU09MRV9NRVNTQUdFXSA9IGdfc2lnbmFsX25ldygiY29uc29sZV9tZXNzYWdlIiwKLSAgICAg
ICAgICAgIEdfVFlQRV9GUk9NX0NMQVNTKHBhZ2VDbGFzcyksCi0gICAgICAgICAgICAoR1NpZ25h
bEZsYWdzKShHX1NJR05BTF9SVU5fTEFTVCB8IEdfU0lHTkFMX0FDVElPTiksCi0gICAgICAgICAg
ICBHX1NUUlVDVF9PRkZTRVQoV2ViS2l0UGFnZUNsYXNzLCBjb25zb2xlX21lc3NhZ2UpLAotICAg
ICAgICAgICAgZ19zaWduYWxfYWNjdW11bGF0b3JfdHJ1ZV9oYW5kbGVkLAotICAgICAgICAgICAg
TlVMTCwKLSAgICAgICAgICAgIHdlYmtpdF9tYXJzaGFsX0JPT0xFQU5fX1NUUklOR19JTlRfU1RS
SU5HLAotICAgICAgICAgICAgR19UWVBFX0JPT0xFQU4sIDMsCi0gICAgICAgICAgICBHX1RZUEVf
U1RSSU5HLCBHX1RZUEVfSU5ULCBHX1RZUEVfU1RSSU5HKTsKLQotICAgIC8qKgotICAgICAqIFdl
YktpdFBhZ2U6OnNjcmlwdC1hbGVydDoKLSAgICAgKgotICAgICAqIEBwYWdlOiB0aGUgb2JqZWN0
IG9uIHdoaWNoIHRoZSBzaWduYWwgaXMgZW1pdHRlZAotICAgICAqIEBmcmFtZTogdGhlIHJlbGV2
YW50IGZyYW1lCi0gICAgICogQG1lc3NhZ2U6IHRoZSBtZXNzYWdlIHRleHQKLSAgICAgKiBAcmV0
dXJuOiBUUlVFIHRvIHN0b3Agb3RoZXIgaGFuZGxlcnMgZnJvbSBiZWluZyBpbnZva2VkIGZvciB0
aGUgZXZlbnQuIEZBTFNFIHRvIHByb3BhZ2F0ZSB0aGUgZXZlbnQgZnVydGhlci4KLSAgICAgKgot
ICAgICAqIEEgSmF2YVNjcmlwdCBhbGVydCBkaWFsb2cgd2FzIGNyZWF0ZWQuCi0gICAgICovCi0g
ICAgd2Via2l0X3BhZ2Vfc2lnbmFsc1tTQ1JJUFRfQUxFUlRdID0gZ19zaWduYWxfbmV3KCJzY3Jp
cHQtYWxlcnQiLAotICAgICAgICAgICAgR19UWVBFX0ZST01fQ0xBU1MocGFnZUNsYXNzKSwKLSAg
ICAgICAgICAgIChHU2lnbmFsRmxhZ3MpKEdfU0lHTkFMX1JVTl9MQVNUIHwgR19TSUdOQUxfQUNU
SU9OKSwKLSAgICAgICAgICAgIEdfU1RSVUNUX09GRlNFVChXZWJLaXRQYWdlQ2xhc3MsIHNjcmlw
dF9hbGVydCksCi0gICAgICAgICAgICBnX3NpZ25hbF9hY2N1bXVsYXRvcl90cnVlX2hhbmRsZWQs
Ci0gICAgICAgICAgICBOVUxMLAotICAgICAgICAgICAgd2Via2l0X21hcnNoYWxfQk9PTEVBTl9f
T0JKRUNUX1NUUklORywKLSAgICAgICAgICAgIEdfVFlQRV9CT09MRUFOLCAyLAotICAgICAgICAg
ICAgR19UWVBFX09CSkVDVCwgR19UWVBFX1NUUklORyk7Ci0KLSAgICAvKioKLSAgICAgKiBXZWJL
aXRQYWdlOjpzY3JpcHQtY29uZmlybToKLSAgICAgKgotICAgICAqIEBwYWdlOiB0aGUgb2JqZWN0
IG9uIHdoaWNoIHRoZSBzaWduYWwgaXMgZW1pdHRlZAotICAgICAqIEBmcmFtZTogdGhlIHJlbGV2
YW50IGZyYW1lCi0gICAgICogQG1lc3NhZ2U6IHRoZSBtZXNzYWdlIHRleHQKLSAgICAgKiBAY29u
ZmlybWVkOiB3aGV0aGVyIHRoZSBkaWFsb2cgaGFzIGJlZW4gY29uZmlybWVkCi0gICAgICogQHJl
dHVybjogVFJVRSB0byBzdG9wIG90aGVyIGhhbmRsZXJzIGZyb20gYmVpbmcgaW52b2tlZCBmb3Ig
dGhlIGV2ZW50LiBGQUxTRSB0byBwcm9wYWdhdGUgdGhlIGV2ZW50IGZ1cnRoZXIuCi0gICAgICoK
LSAgICAgKiBBIEphdmFTY3JpcHQgY29uZmlybSBkaWFsb2cgd2FzIGNyZWF0ZWQsIHByb3ZpZGlu
ZyBZZXMgYW5kIE5vIGJ1dHRvbnMuCi0gICAgICovCi0gICAgd2Via2l0X3BhZ2Vfc2lnbmFsc1tT
Q1JJUFRfQ09ORklSTV0gPSBnX3NpZ25hbF9uZXcoInNjcmlwdF9jb25maXJtIiwKLSAgICAgICAg
ICAgIEdfVFlQRV9GUk9NX0NMQVNTKHBhZ2VDbGFzcyksCi0gICAgICAgICAgICAoR1NpZ25hbEZs
YWdzKShHX1NJR05BTF9SVU5fTEFTVCB8IEdfU0lHTkFMX0FDVElPTiksCi0gICAgICAgICAgICBH
X1NUUlVDVF9PRkZTRVQoV2ViS2l0UGFnZUNsYXNzLCBzY3JpcHRfY29uZmlybSksCi0gICAgICAg
ICAgICBnX3NpZ25hbF9hY2N1bXVsYXRvcl90cnVlX2hhbmRsZWQsCi0gICAgICAgICAgICBOVUxM
LAotICAgICAgICAgICAgd2Via2l0X21hcnNoYWxfQk9PTEVBTl9fT0JKRUNUX1NUUklOR19CT09M
RUFOLAotICAgICAgICAgICAgR19UWVBFX0JPT0xFQU4sIDMsCi0gICAgICAgICAgICBHX1RZUEVf
T0JKRUNULCBHX1RZUEVfU1RSSU5HLCBHX1RZUEVfQk9PTEVBTik7Ci0KLSAgICAvKioKLSAgICAg
KiBXZWJLaXRQYWdlOjpzY3JpcHQtcHJvbXB0OgotICAgICAqCi0gICAgICogQHBhZ2U6IHRoZSBv
YmplY3Qgb24gd2hpY2ggdGhlIHNpZ25hbCBpcyBlbWl0dGVkCi0gICAgICogQGZyYW1lOiB0aGUg
cmVsZXZhbnQgZnJhbWUKLSAgICAgKiBAbWVzc2FnZTogdGhlIG1lc3NhZ2UgdGV4dAotICAgICAq
IEBkZWZhdWx0OiB0aGUgZGVmYXVsdCB2YWx1ZQotICAgICAqIEB0ZXh0OiBUbyBiZSBmaWxsZWQg
d2l0aCB0aGUgcmV0dXJuIHZhbHVlIG9yIE5VTEwgaWYgdGhlIGRpYWxvZyB3YXMgY2FuY2VsbGVk
LgotICAgICAqIEByZXR1cm46IFRSVUUgdG8gc3RvcCBvdGhlciBoYW5kbGVycyBmcm9tIGJlaW5n
IGludm9rZWQgZm9yIHRoZSBldmVudC4gRkFMU0UgdG8gcHJvcGFnYXRlIHRoZSBldmVudCBmdXJ0
aGVyLgotICAgICAqCi0gICAgICogQSBKYXZhU2NyaXB0IHByb21wdCBkaWFsb2cgd2FzIGNyZWF0
ZWQsIHByb3ZpZGluZyBhbiBlbnRyeSB0byBpbnB1dCB0ZXh0LgotICAgICAqLwotICAgIHdlYmtp
dF9wYWdlX3NpZ25hbHNbU0NSSVBUX1BST01QVF0gPSBnX3NpZ25hbF9uZXcoInNjcmlwdF9wcm9t
cHQiLAotICAgICAgICAgICAgR19UWVBFX0ZST01fQ0xBU1MocGFnZUNsYXNzKSwKLSAgICAgICAg
ICAgIChHU2lnbmFsRmxhZ3MpKEdfU0lHTkFMX1JVTl9MQVNUIHwgR19TSUdOQUxfQUNUSU9OKSwK
LSAgICAgICAgICAgIEdfU1RSVUNUX09GRlNFVChXZWJLaXRQYWdlQ2xhc3MsIHNjcmlwdF9wcm9t
cHQpLAotICAgICAgICAgICAgZ19zaWduYWxfYWNjdW11bGF0b3JfdHJ1ZV9oYW5kbGVkLAotICAg
ICAgICAgICAgTlVMTCwKLSAgICAgICAgICAgIHdlYmtpdF9tYXJzaGFsX0JPT0xFQU5fX09CSkVD
VF9TVFJJTkdfU1RSSU5HX1NUUklORywKLSAgICAgICAgICAgIEdfVFlQRV9CT09MRUFOLCA0LAot
ICAgICAgICAgICAgR19UWVBFX09CSkVDVCwgR19UWVBFX1NUUklORywgR19UWVBFX1NUUklORywg
R19UWVBFX1BPSU5URVIpOwotCi0KLSAgICAvKgotICAgICAqIGltcGxlbWVudGF0aW9ucyBvZiB2
aXJ0dWFsIG1ldGhvZHMKLSAgICAgKi8KLSAgICBwYWdlQ2xhc3MtPmNyZWF0ZV9wYWdlID0gd2Vi
a2l0X3BhZ2VfcmVhbF9jcmVhdGVfcGFnZTsKLSAgICBwYWdlQ2xhc3MtPm5hdmlnYXRpb25fcmVx
dWVzdGVkID0gd2Via2l0X3BhZ2VfcmVhbF9uYXZpZ2F0aW9uX3JlcXVlc3RlZDsKLSAgICBwYWdl
Q2xhc3MtPndpbmRvd19vYmplY3RfY2xlYXJlZCA9IHdlYmtpdF9wYWdlX3JlYWxfd2luZG93X29i
amVjdF9jbGVhcmVkOwotICAgIHBhZ2VDbGFzcy0+Y2hvb3NlX2ZpbGUgPSB3ZWJraXRfcGFnZV9y
ZWFsX2Nob29zZV9maWxlOwotICAgIHBhZ2VDbGFzcy0+c2NyaXB0X2FsZXJ0ID0gd2Via2l0X3Bh
Z2VfcmVhbF9zY3JpcHRfYWxlcnQ7Ci0gICAgcGFnZUNsYXNzLT5zY3JpcHRfY29uZmlybSA9IHdl
YmtpdF9wYWdlX3JlYWxfc2NyaXB0X2NvbmZpcm07Ci0gICAgcGFnZUNsYXNzLT5zY3JpcHRfcHJv
bXB0ID0gd2Via2l0X3BhZ2VfcmVhbF9zY3JpcHRfcHJvbXB0OwotICAgIHBhZ2VDbGFzcy0+Y29u
c29sZV9tZXNzYWdlID0gd2Via2l0X3BhZ2VfcmVhbF9jb25zb2xlX21lc3NhZ2U7Ci0KLSAgICBH
X09CSkVDVF9DTEFTUyhwYWdlQ2xhc3MpLT5maW5hbGl6ZSA9IHdlYmtpdF9wYWdlX2ZpbmFsaXpl
OwotCi0gICAgR3RrV2lkZ2V0Q2xhc3MqIHdpZGdldENsYXNzID0gR1RLX1dJREdFVF9DTEFTUyhw
YWdlQ2xhc3MpOwotICAgIHdpZGdldENsYXNzLT5yZWFsaXplID0gd2Via2l0X3BhZ2VfcmVhbGl6
ZTsKLSAgICB3aWRnZXRDbGFzcy0+ZXhwb3NlX2V2ZW50ID0gd2Via2l0X3BhZ2VfZXhwb3NlX2V2
ZW50OwotICAgIHdpZGdldENsYXNzLT5rZXlfcHJlc3NfZXZlbnQgPSB3ZWJraXRfcGFnZV9rZXlf
ZXZlbnQ7Ci0gICAgd2lkZ2V0Q2xhc3MtPmtleV9yZWxlYXNlX2V2ZW50ID0gd2Via2l0X3BhZ2Vf
a2V5X2V2ZW50OwotICAgIHdpZGdldENsYXNzLT5idXR0b25fcHJlc3NfZXZlbnQgPSB3ZWJraXRf
cGFnZV9idXR0b25fZXZlbnQ7Ci0gICAgd2lkZ2V0Q2xhc3MtPmJ1dHRvbl9yZWxlYXNlX2V2ZW50
ID0gd2Via2l0X3BhZ2VfYnV0dG9uX2V2ZW50OwotICAgIHdpZGdldENsYXNzLT5tb3Rpb25fbm90
aWZ5X2V2ZW50ID0gd2Via2l0X3BhZ2VfbW90aW9uX2V2ZW50OwotICAgIHdpZGdldENsYXNzLT5z
Y3JvbGxfZXZlbnQgPSB3ZWJraXRfcGFnZV9zY3JvbGxfZXZlbnQ7Ci0gICAgd2lkZ2V0Q2xhc3Mt
PnNpemVfYWxsb2NhdGUgPSB3ZWJraXRfcGFnZV9zaXplX2FsbG9jYXRlOwotCi0gICAgR3RrQ29u
dGFpbmVyQ2xhc3MqIGNvbnRhaW5lckNsYXNzID0gR1RLX0NPTlRBSU5FUl9DTEFTUyhwYWdlQ2xh
c3MpOwotICAgIGNvbnRhaW5lckNsYXNzLT5hZGQgPSB3ZWJraXRfcGFnZV9jb250YWluZXJfYWRk
OwotICAgIGNvbnRhaW5lckNsYXNzLT5yZW1vdmUgPSB3ZWJraXRfcGFnZV9jb250YWluZXJfcmVt
b3ZlOwotICAgIGNvbnRhaW5lckNsYXNzLT5mb3JhbGwgPSB3ZWJraXRfcGFnZV9jb250YWluZXJf
Zm9yYWxsOwotCi0gICAgLyoKLSAgICAgKiBtYWtlIHVzIHNjcm9sbGFibGUgKGUuZy4gYWRkYWJs
ZSB0byBhIEd0a1Njcm9sbGVkV2luZG93KQotICAgICAqLwotICAgIHBhZ2VDbGFzcy0+c2V0X3Nj
cm9sbF9hZGp1c3RtZW50cyA9IHdlYmtpdF9wYWdlX3NldF9zY3JvbGxfYWRqdXN0bWVudHM7Ci0g
ICAgR1RLX1dJREdFVF9DTEFTUyhwYWdlQ2xhc3MpLT5zZXRfc2Nyb2xsX2FkanVzdG1lbnRzX3Np
Z25hbCA9IGdfc2lnbmFsX25ldygic2V0X3Njcm9sbF9hZGp1c3RtZW50cyIsCi0gICAgICAgICAg
ICBHX1RZUEVfRlJPTV9DTEFTUyhwYWdlQ2xhc3MpLAotICAgICAgICAgICAgKEdTaWduYWxGbGFn
cykoR19TSUdOQUxfUlVOX0xBU1QgfCBHX1NJR05BTF9BQ1RJT04pLAotICAgICAgICAgICAgR19T
VFJVQ1RfT0ZGU0VUKFdlYktpdFBhZ2VDbGFzcywgc2V0X3Njcm9sbF9hZGp1c3RtZW50cyksCi0g
ICAgICAgICAgICBOVUxMLCBOVUxMLAotICAgICAgICAgICAgd2Via2l0X21hcnNoYWxfVk9JRF9f
T0JKRUNUX09CSkVDVCwKLSAgICAgICAgICAgIEdfVFlQRV9OT05FLCAyLAotICAgICAgICAgICAg
R1RLX1RZUEVfQURKVVNUTUVOVCwgR1RLX1RZUEVfQURKVVNUTUVOVCk7Ci19Ci0KLXN0YXRpYyB2
b2lkIHdlYmtpdF9wYWdlX2luaXQoV2ViS2l0UGFnZSogcGFnZSkKLXsKLSAgICBXZWJLaXRQYWdl
UHJpdmF0ZSogcGFnZURhdGEgPSBXRUJLSVRfUEFHRV9HRVRfUFJJVkFURShXRUJLSVRfUEFHRShw
YWdlKSk7Ci0gICAgcGFnZURhdGEtPnBhZ2UgPSBuZXcgUGFnZShuZXcgV2ViS2l0OjpDaHJvbWVD
bGllbnQocGFnZSksIG5ldyBXZWJLaXQ6OkNvbnRleHRNZW51Q2xpZW50LCBuZXcgV2ViS2l0OjpF
ZGl0b3JDbGllbnQocGFnZSksIG5ldyBXZWJLaXQ6OkRyYWdDbGllbnQsIG5ldyBXZWJLaXQ6Oklu
c3BlY3RvckNsaWVudCk7Ci0KLSAgICBTZXR0aW5ncyogc2V0dGluZ3MgPSBwYWdlRGF0YS0+cGFn
ZS0+c2V0dGluZ3MoKTsKLSAgICBzZXR0aW5ncy0+c2V0TG9hZHNJbWFnZXNBdXRvbWF0aWNhbGx5
KHRydWUpOwotICAgIHNldHRpbmdzLT5zZXRNaW5pbXVtRm9udFNpemUoNSk7Ci0gICAgc2V0dGlu
Z3MtPnNldE1pbmltdW1Mb2dpY2FsRm9udFNpemUoNSk7Ci0gICAgc2V0dGluZ3MtPnNldFNob3Vs
ZFByaW50QmFja2dyb3VuZHModHJ1ZSk7Ci0gICAgc2V0dGluZ3MtPnNldEphdmFTY3JpcHRFbmFi
bGVkKHRydWUpOwotICAgIHNldHRpbmdzLT5zZXREZWZhdWx0Rml4ZWRGb250U2l6ZSgxNCk7Ci0g
ICAgc2V0dGluZ3MtPnNldERlZmF1bHRGb250U2l6ZSgxNCk7Ci0gICAgc2V0dGluZ3MtPnNldFNl
cmlmRm9udEZhbWlseSgiVGltZXMgTmV3IFJvbWFuIik7Ci0gICAgc2V0dGluZ3MtPnNldFNhbnNT
ZXJpZkZvbnRGYW1pbHkoIkFyaWFsIik7Ci0gICAgc2V0dGluZ3MtPnNldEZpeGVkRm9udEZhbWls
eSgiQ291cmllciBOZXciKTsKLSAgICBzZXR0aW5ncy0+c2V0U3RhbmRhcmRGb250RmFtaWx5KCJB
cmlhbCIpOwotCi0gICAgR1RLX1dJREdFVF9TRVRfRkxBR1MocGFnZSwgR1RLX0NBTl9GT0NVUyk7
Ci0gICAgcGFnZURhdGEtPm1haW5GcmFtZSA9IFdFQktJVF9GUkFNRSh3ZWJraXRfZnJhbWVfbmV3
KHBhZ2UpKTsKLSAgICBwYWdlRGF0YS0+ZWRpdGFibGUgPSBmYWxzZTsKLX0KLQotR3RrV2lkZ2V0
KiB3ZWJraXRfcGFnZV9uZXcodm9pZCkKLXsKLSAgICBXZWJLaXRQYWdlKiBwYWdlID0gV0VCS0lU
X1BBR0UoZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX1BBR0UsIE5VTEwpKTsKLQotICAgIHJldHVy
biBHVEtfV0lER0VUKHBhZ2UpOwotfQotCi12b2lkIHdlYmtpdF9wYWdlX3NldF9zZXR0aW5ncyhX
ZWJLaXRQYWdlKiBwYWdlLCBXZWJLaXRTZXR0aW5ncyogc2V0dGluZ3MpCi17Ci0gICAgZ19yZXR1
cm5faWZfZmFpbChXRUJLSVRfSVNfUEFHRShwYWdlKSk7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChz
ZXR0aW5ncyk7Ci0KLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi1XZWJLaXRTZXR0aW5ncyog
d2Via2l0X3BhZ2VfZ2V0X3NldHRpbmdzKFdlYktpdFBhZ2UqIHBhZ2UpCi17Ci0gICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1BBR0UocGFnZSksIE5VTEwpOwotCi0gICAgbm90SW1w
bGVtZW50ZWQoKTsKLSAgICByZXR1cm4gTlVMTDsKLX0KLQotdm9pZCB3ZWJraXRfcGFnZV9nb19i
YWNrd2FyZChXZWJLaXRQYWdlKiBwYWdlKQotewotICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lU
X0lTX1BBR0UocGFnZSkpOwotCi0gICAgV2ViS2l0UGFnZVByaXZhdGUqIHBhZ2VEYXRhID0gV0VC
S0lUX1BBR0VfR0VUX1BSSVZBVEUocGFnZSk7Ci0gICAgV2ViS2l0RnJhbWVQcml2YXRlKiBmcmFt
ZURhdGEgPSBXRUJLSVRfRlJBTUVfR0VUX1BSSVZBVEUocGFnZURhdGEtPm1haW5GcmFtZSk7Ci0g
ICAgZnJhbWVEYXRhLT5mcmFtZS0+bG9hZGVyKCktPmdvQmFja09yRm9yd2FyZCgtMSk7Ci19Ci0K
LXZvaWQgd2Via2l0X3BhZ2VfZ29fZm9yd2FyZChXZWJLaXRQYWdlKiBwYWdlKQotewotICAgIGdf
cmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX1BBR0UocGFnZSkpOwotCi0gICAgV2ViS2l0UGFnZVBy
aXZhdGUqIHBhZ2VEYXRhID0gV0VCS0lUX1BBR0VfR0VUX1BSSVZBVEUocGFnZSk7Ci0gICAgV2Vi
S2l0RnJhbWVQcml2YXRlKiBmcmFtZURhdGEgPSBXRUJLSVRfRlJBTUVfR0VUX1BSSVZBVEUocGFn
ZURhdGEtPm1haW5GcmFtZSk7Ci0gICAgZnJhbWVEYXRhLT5mcmFtZS0+bG9hZGVyKCktPmdvQmFj
a09yRm9yd2FyZCgxKTsKLX0KLQotZ2Jvb2xlYW4gd2Via2l0X3BhZ2VfY2FuX2dvX2JhY2t3YXJk
KFdlYktpdFBhZ2UqIHBhZ2UpCi17Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lT
X1BBR0UocGFnZSksIEZBTFNFKTsKLQotICAgIFdlYktpdFBhZ2VQcml2YXRlKiBwYWdlRGF0YSA9
IFdFQktJVF9QQUdFX0dFVF9QUklWQVRFKHBhZ2UpOwotICAgIFdlYktpdEZyYW1lUHJpdmF0ZSog
ZnJhbWVEYXRhID0gV0VCS0lUX0ZSQU1FX0dFVF9QUklWQVRFKHBhZ2VEYXRhLT5tYWluRnJhbWUp
OwotICAgIHJldHVybiBmcmFtZURhdGEtPmZyYW1lLT5sb2FkZXIoKS0+Y2FuR29CYWNrT3JGb3J3
YXJkKC0xKTsKLX0KLQotZ2Jvb2xlYW4gd2Via2l0X3BhZ2VfY2FuX2dvX2ZvcndhcmQoV2ViS2l0
UGFnZSogcGFnZSkKLXsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfUEFHRShw
YWdlKSwgRkFMU0UpOwotCi0gICAgV2ViS2l0UGFnZVByaXZhdGUqIHBhZ2VEYXRhID0gV0VCS0lU
X1BBR0VfR0VUX1BSSVZBVEUocGFnZSk7Ci0gICAgV2ViS2l0RnJhbWVQcml2YXRlKiBmcmFtZURh
dGEgPSBXRUJLSVRfRlJBTUVfR0VUX1BSSVZBVEUocGFnZURhdGEtPm1haW5GcmFtZSk7Ci0gICAg
cmV0dXJuIGZyYW1lRGF0YS0+ZnJhbWUtPmxvYWRlcigpLT5jYW5Hb0JhY2tPckZvcndhcmQoMSk7
Ci19Ci0KLXZvaWQgd2Via2l0X3BhZ2Vfb3BlbihXZWJLaXRQYWdlKiBwYWdlLCBjb25zdCBnY2hh
ciogdXJpKQotewotICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX1BBR0UocGFnZSkpOwot
Ci0gICAgV2ViS2l0UGFnZVByaXZhdGUqIHBhZ2VEYXRhID0gV0VCS0lUX1BBR0VfR0VUX1BSSVZB
VEUocGFnZSk7Ci0gICAgV2ViS2l0RnJhbWVQcml2YXRlKiBmcmFtZURhdGEgPSBXRUJLSVRfRlJB
TUVfR0VUX1BSSVZBVEUocGFnZURhdGEtPm1haW5GcmFtZSk7Ci0KLSAgICBEZXByZWNhdGVkU3Ry
aW5nIHN0cmluZyA9IERlcHJlY2F0ZWRTdHJpbmc6OmZyb21VdGY4KHVyaSk7Ci0gICAgZnJhbWVE
YXRhLT5mcmFtZS0+bG9hZGVyKCktPmxvYWQoUmVzb3VyY2VSZXF1ZXN0KEtVUkwoc3RyaW5nKSkp
OwotfQotCi12b2lkIHdlYmtpdF9wYWdlX3JlbG9hZChXZWJLaXRQYWdlKiBwYWdlKQotewotICAg
IGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX1BBR0UocGFnZSkpOwotCi0gICAgV2ViS2l0UGFn
ZVByaXZhdGUqIHBhZ2VEYXRhID0gV0VCS0lUX1BBR0VfR0VUX1BSSVZBVEUocGFnZSk7Ci0gICAg
V2ViS2l0RnJhbWVQcml2YXRlKiBmcmFtZURhdGEgPSBXRUJLSVRfRlJBTUVfR0VUX1BSSVZBVEUo
cGFnZURhdGEtPm1haW5GcmFtZSk7Ci0gICAgZnJhbWVEYXRhLT5mcmFtZS0+bG9hZGVyKCktPnJl
bG9hZCgpOwotfQotCi12b2lkIHdlYmtpdF9wYWdlX2xvYWRfc3RyaW5nKFdlYktpdFBhZ2UqIHBh
Z2UsIGNvbnN0IGdjaGFyKiBjb250ZW50LCBjb25zdCBnY2hhciogY29udGVudE1pbWVUeXBlLCBj
b25zdCBnY2hhciogY29udGVudEVuY29kaW5nLCBjb25zdCBnY2hhciogYmFzZVVyaSkKLXsKLSAg
ICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19QQUdFKHBhZ2UpKTsKLQotICAgIFdlYktpdFBh
Z2VQcml2YXRlKiBwYWdlRGF0YSA9IFdFQktJVF9QQUdFX0dFVF9QUklWQVRFKHBhZ2UpOwotICAg
IFdlYktpdEZyYW1lUHJpdmF0ZSogZnJhbWVEYXRhID0gV0VCS0lUX0ZSQU1FX0dFVF9QUklWQVRF
KHBhZ2VEYXRhLT5tYWluRnJhbWUpOwotCi0gICAgS1VSTCB1cmwoRGVwcmVjYXRlZFN0cmluZzo6
ZnJvbVV0ZjgoYmFzZVVyaSkpOwotICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IHNoYXJlZEJ1ZmZl
ciA9IG5ldyBTaGFyZWRCdWZmZXIoc3RyZHVwKGNvbnRlbnQpLCBzdHJsZW4oY29udGVudCkpOwot
ICAgIFN1YnN0aXR1dGVEYXRhIHN1YnN0aXR1dGVEYXRhKHNoYXJlZEJ1ZmZlci5yZWxlYXNlKCks
IFN0cmluZyhjb250ZW50TWltZVR5cGUpLCBTdHJpbmcoY29udGVudEVuY29kaW5nKSwgS1VSTCgi
YWJvdXQ6YmxhbmsiKSwgdXJsKTsKLQotICAgIGZyYW1lRGF0YS0+ZnJhbWUtPmxvYWRlcigpLT5s
b2FkKFJlc291cmNlUmVxdWVzdCh1cmwpLCBzdWJzdGl0dXRlRGF0YSk7Ci19Ci0KLXZvaWQgd2Vi
a2l0X3BhZ2VfbG9hZF9odG1sX3N0cmluZyhXZWJLaXRQYWdlKiBwYWdlLCBjb25zdCBnY2hhciog
Y29udGVudCwgY29uc3QgZ2NoYXIqIGJhc2VVcmwpCi17Ci0gICAgZ19yZXR1cm5faWZfZmFpbChX
RUJLSVRfSVNfUEFHRShwYWdlKSk7Ci0KLSAgICB3ZWJraXRfcGFnZV9sb2FkX3N0cmluZyhwYWdl
LCBjb250ZW50LCAidGV4dC9odG1sIiwgIlVURi04IiwgYmFzZVVybCk7Ci19Ci0KLXZvaWQgd2Vi
a2l0X3BhZ2Vfc3RvcF9sb2FkaW5nKFdlYktpdFBhZ2UqIHBhZ2UpCi17Ci0gICAgZ19yZXR1cm5f
aWZfZmFpbChXRUJLSVRfSVNfUEFHRShwYWdlKSk7Ci0KLSAgICBXZWJLaXRQYWdlUHJpdmF0ZSog
cGFnZURhdGEgPSBXRUJLSVRfUEFHRV9HRVRfUFJJVkFURShwYWdlKTsKLSAgICBXZWJLaXRGcmFt
ZVByaXZhdGUqIGZyYW1lRGF0YSA9IFdFQktJVF9GUkFNRV9HRVRfUFJJVkFURShwYWdlRGF0YS0+
bWFpbkZyYW1lKTsKLQotICAgIGlmIChGcmFtZUxvYWRlciogbG9hZGVyID0gZnJhbWVEYXRhLT5m
cmFtZS0+bG9hZGVyKCkpCi0gICAgICAgIGxvYWRlci0+c3RvcEFsbExvYWRlcnMoKTsKLX0KLQot
V2ViS2l0RnJhbWUqIHdlYmtpdF9wYWdlX2dldF9tYWluX2ZyYW1lKFdlYktpdFBhZ2UqIHBhZ2Up
Ci17Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1BBR0UocGFnZSksIE5VTEwp
OwotCi0gICAgV2ViS2l0UGFnZVByaXZhdGUqIHBhZ2VEYXRhID0gV0VCS0lUX1BBR0VfR0VUX1BS
SVZBVEUocGFnZSk7Ci0gICAgcmV0dXJuIHBhZ2VEYXRhLT5tYWluRnJhbWU7Ci19Ci0KLXZvaWQg
d2Via2l0X3BhZ2VfZXhlY3V0ZV9zY3JpcHQoV2ViS2l0UGFnZSogcGFnZSwgY29uc3QgZ2NoYXIq
IHNjcmlwdCkKLXsKLSAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19QQUdFKHBhZ2UpKTsK
LSAgICBnX3JldHVybl9pZl9mYWlsKHNjcmlwdCk7Ci0KLSAgICBXZWJLaXRQYWdlUHJpdmF0ZSog
cGFnZURhdGEgPSBXRUJLSVRfUEFHRV9HRVRfUFJJVkFURShwYWdlKTsKLSAgICBXZWJLaXRGcmFt
ZVByaXZhdGUqIGZyYW1lRGF0YSA9IFdFQktJVF9GUkFNRV9HRVRfUFJJVkFURShwYWdlRGF0YS0+
bWFpbkZyYW1lKTsKLQotICAgIGlmIChGcmFtZUxvYWRlciogbG9hZGVyID0gZnJhbWVEYXRhLT5m
cmFtZS0+bG9hZGVyKCkpCi0gICAgICAgIGxvYWRlci0+ZXhlY3V0ZVNjcmlwdChTdHJpbmc6OmZy
b21VVEY4KHNjcmlwdCksIHRydWUpOwotfQotCi0vKioKLSAqIHdlYmtpdF9wYWdlX2dldF9lZGl0
YWJsZToKLSAqIEBwYWdlOiBhICNXZWJLaXRQYWdlCi0gKgotICogUmV0dXJucyB3aGV0aGVyIHRo
ZSB1c2VyIGlzIGFsbG93ZWQgdG8gZWRpdCB0aGUgZG9jdW1lbnQuCi0gKgotICogUmV0dXJucyAl
VFJVRSBpZiBAcGFnZSBhbGxvd3MgdGhlIHVzZXIgdG8gZWRpdCB0aGUgSFRNTCBkb2N1bWVudCwg
JUZBTFNFIGlmCi0gKiBpdCBkb2Vzbid0LiBZb3UgY2FuIGNoYW5nZSBAcGFnZSdzIGRvY3VtZW50
IHByb2dyYW1tYXRpY2FsbHkgcmVnYXJkbGVzcyBvZgotICogdGhpcyBzZXR0aW5nLgotICoKLSAq
IFJldHVybiB2YWx1ZTogYSAjZ2Jvb2xlYW4gaW5kaWNhdGluZyB0aGUgZWRpdGFibGUgc3RhdGUK
LSAqLwotZ2Jvb2xlYW4gd2Via2l0X3BhZ2VfZ2V0X2VkaXRhYmxlKFdlYktpdFBhZ2UqIHBhZ2Up
Ci17Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1BBR0UocGFnZSksIEZBTFNF
KTsKLQotICAgIFdlYktpdFBhZ2VQcml2YXRlKiBwYWdlRGF0YSA9IFdFQktJVF9QQUdFX0dFVF9Q
UklWQVRFKHBhZ2UpOwotICAgIEFTU0VSVChwYWdlRGF0YSk7Ci0KLSAgICByZXR1cm4gcGFnZURh
dGEtPmVkaXRhYmxlOwotfQotCi0vKioKLSAqIHdlYmtpdF9wYWdlX3NldF9lZGl0YWJsZToKLSAq
IEBwYWdlOiBhICNXZWJLaXRQYWdlCi0gKiBAZmxhZzogYSAjZ2Jvb2xlYW4gaW5kaWNhdGluZyB0
aGUgZWRpdGFibGUgc3RhdGUKLSAqCi0gKiBTZXRzIHdoZXRoZXIgQHBhZ2UgYWxsb3dzIHRoZSB1
c2VyIHRvIGVkaXQgaXRzIEhUTUwgZG9jdW1lbnQuCi0gKgotICogSWYgQGZsYWcgaXMgJVRSVUUs
IEBwYWdlIGFsbG93cyB0aGUgdXNlciB0byBlZGl0IHRoZSBkb2N1bWVudC4gSWYgQGZsYWcgaXMK
LSAqICVGQUxTRSwgYW4gZWxlbWVudCBpbiBAcGFnZSdzIGRvY3VtZW50IGNhbiBvbmx5IGJlIGVk
aXRlZCBpZiB0aGUKLSAqIENPTlRFTlRFRElUQUJMRSBhdHRyaWJ1dGUgaGFzIGJlZW4gc2V0IG9u
IHRoZSBlbGVtZW50IG9yIG9uZSBvZiBpdHMgcGFyZW50Ci0gKiBlbGVtZW50cy4gWW91IGNhbiBj
aGFuZ2UgQHBhZ2UncyBkb2N1bWVudCBwcm9ncmFtbWF0aWNhbGx5IHJlZ2FyZGxlc3Mgb2YKLSAq
IHRoaXMgc2V0dGluZy4gQnkgZGVmYXVsdCBhICNXZWJLaXRQYWdlIGlzIG5vdCBlZGl0YWJsZS4K
LQotICogTm9ybWFsbHksIGFuIEhUTUwgZG9jdW1lbnQgaXMgbm90IGVkaXRhYmxlIHVubGVzcyB0
aGUgZWxlbWVudHMgd2l0aGluIHRoZQotICogZG9jdW1lbnQgYXJlIGVkaXRhYmxlLiBUaGlzIGZ1
bmN0aW9uIHByb3ZpZGVzIGEgbG93LWxldmVsIHdheSB0byBtYWtlIHRoZQotICogY29udGVudHMg
b2YgYSAjV2ViS2l0UGFnZSBlZGl0YWJsZSB3aXRob3V0IGFsdGVyaW5nIHRoZSBkb2N1bWVudCBv
ciBET00KLSAqIHN0cnVjdHVyZS4KLSAqLwotdm9pZCB3ZWJraXRfcGFnZV9zZXRfZWRpdGFibGUo
V2ViS2l0UGFnZSogcGFnZSwgZ2Jvb2xlYW4gZmxhZykKLXsKLSAgICBnX3JldHVybl9pZl9mYWls
KFdFQktJVF9JU19QQUdFKHBhZ2UpKTsKLSAgICBmbGFnID0gZmxhZyAhPSBGQUxTRTsKLQotICAg
IFdlYktpdFBhZ2VQcml2YXRlKiBwYWdlRGF0YSA9IFdFQktJVF9QQUdFX0dFVF9QUklWQVRFKHBh
Z2UpOwotICAgIEFTU0VSVChwYWdlRGF0YSk7Ci0KLSAgICBGcmFtZSogbWFpbkZyYW1lID0gY29y
ZShwYWdlRGF0YS0+bWFpbkZyYW1lKTsKLSAgICBnX3JldHVybl9pZl9mYWlsKG1haW5GcmFtZSk7
Ci0KLSAgICAvLyBUT0RPOiBXaGF0IGhhcHBlbnMgd2hlbiB0aGUgZnJhbWUgaXMgcmVwbGFjZWQ/
Ci0gICAgaWYgKGZsYWcgPT0gcGFnZURhdGEtPmVkaXRhYmxlKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBwYWdlRGF0YS0+ZWRpdGFibGUgPSBmbGFnOwotCi0gICAgaWYgKGZsYWcpIHsKLSAgICAg
ICAgbWFpbkZyYW1lLT5hcHBseUVkaXRpbmdTdHlsZVRvQm9keUVsZW1lbnQoKTsKLSAgICAgICAg
Ly8gVE9ETzogSWYgdGhlIFdlYktpdFBhZ2UgaXMgbWFkZSBlZGl0YWJsZSBhbmQgdGhlIHNlbGVj
dGlvbiBpcyBlbXB0eSwgc2V0IGl0IHRvIHNvbWV0aGluZy4KLSAgICAgICAgLy9pZiAoIXdlYmtp
dF9wYWdlX2dldF9zZWxlY3RlZF9kb21fcmFuZ2UocGFnZSkpCi0gICAgICAgIC8vICAgIG1haW5G
cmFtZS0+c2V0U2VsZWN0aW9uRnJvbU5vbmUoKTsKLSAgICB9IGVsc2UKLSAgICAgICAgbWFpbkZy
YW1lLT5yZW1vdmVFZGl0aW5nU3R5bGVGcm9tQm9keUVsZW1lbnQoKTsKLX0KLQotfQpJbmRleDog
V2ViS2l0L2d0ay9BcGkvd2Via2l0Z3RrcGFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9ndGsv
QXBpL3dlYmtpdGd0a3BhZ2UuaAkocmV2aXNpb24gMjgyNTEpCisrKyBXZWJLaXQvZ3RrL0FwaS93
ZWJraXRndGtwYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMTM1ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuIAotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uIAotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUsIEluYy4gKCJBcHBsZSIp
IG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JT
ICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQot
ICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFdFQktJVF9QQUdF
X0gKLSNkZWZpbmUgV0VCS0lUX1BBR0VfSAotCi0jaW5jbHVkZSA8Z3RrL2d0ay5oPgotCi0jaW5j
bHVkZSAid2Via2l0Z3RrZGVmaW5lcy5oIgotI2luY2x1ZGUgIndlYmtpdGd0a3NldHRpbmdzLmgi
Ci0KLUdfQkVHSU5fREVDTFMKLQotI2RlZmluZSBXRUJLSVRfVFlQRV9QQUdFICAgICAgICAgICAg
KHdlYmtpdF9wYWdlX2dldF90eXBlKCkpCi0jZGVmaW5lIFdFQktJVF9QQUdFKG9iaikgICAgICAg
ICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9UWVBFX1BBR0Us
IFdlYktpdFBhZ2UpKQotI2RlZmluZSBXRUJLSVRfUEFHRV9DTEFTUyhrbGFzcykgICAgKEdfVFlQ
RV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfVFlQRV9QQUdFLCBXZWJLaXRQYWdl
Q2xhc3MpKQotI2RlZmluZSBXRUJLSVRfSVNfUEFHRShvYmopICAgICAgICAgKEdfVFlQRV9DSEVD
S19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfVFlQRV9QQUdFKSkKLSNkZWZpbmUgV0VCS0lU
X0lTX1BBR0VfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAg
V0VCS0lUX1RZUEVfUEFHRSkpCi0jZGVmaW5lIFdFQktJVF9QQUdFX0dFVF9DTEFTUyhvYmopICAo
R19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9UWVBFX1BBR0UsIFdlYktp
dFBhZ2VDbGFzcykpCi0KLQotdHlwZWRlZiBlbnVtIHsKLSAgICBXRUJLSVRfTkFWSUdBVElPTl9S
RVNQT05TRV9BQ0NFUFQsCi0gICAgV0VCS0lUX05BVklHQVRJT05fUkVTUE9OU0VfSUdOT1JFLAot
ICAgIFdFQktJVF9OQVZJR0FUSU9OX1JFU1BPTlNFX0RPV05MT0FECi19IFdlYktpdE5hdmlnYXRp
b25SZXNwb25zZTsKLQotCi0KLXN0cnVjdCBfV2ViS2l0UGFnZSB7Ci0gICAgR3RrQ29udGFpbmVy
IHBhcmVudDsKLX07Ci0KLXN0cnVjdCBfV2ViS2l0UGFnZUNsYXNzIHsKLSAgICBHdGtDb250YWlu
ZXJDbGFzcyBwYXJlbnQ7Ci0KLSAgICAvKgotICAgICAqIGRlZmF1bHQgaGFuZGxlci92aXJ0dWFs
IG1ldGhvZHMKLSAgICAgKiBESVNDVVNTOiBjcmVhdGVfcGFnZSBuZWVkcyBhIHJlcXVlc3QgYW5k
IHNob3VsZCB3ZSBtYWtlIHRoaXMgYSBzaWduYWwgd2l0aCBkZWZhdWx0IGhhbmRsZXI/IHRoaXMg
d291bGQKLSAgICAgKiByZXF1aXJlIHNvbWVvbmUgZG9pbmcgYSBnX3NpZ25hbF9zdG9wX2VtaXNz
aW9uX2J5X25hbWUKLSAgICAgKiBXZWJVSURlbGVnYXRlIGhhcyBub3RoaW5nIGZvciBjcmVhdGVf
ZnJhbWUsIFdlYlBvbGljeURlbGVnYXRlIGFzIHdlbGwuLi4KLSAgICAgKi8KLSAgICBXZWJLaXRQ
YWdlKiAgKCpjcmVhdGVfcGFnZSkgIChXZWJLaXRQYWdlKiBwYWdlKTsKLQotICAgIC8qCi0gICAg
ICogVE9ETzogRklYTUU6IENyZWF0ZSBzb21ldGhpbmcgbGlrZSBXZWJQb2xpY3lEZWNpc2lvbkxp
c3RlbmVyX1Byb3RvY29sIGluc3RlYWQKLSAgICAgKi8KLSAgICBXZWJLaXROYXZpZ2F0aW9uUmVz
cG9uc2UgKCpuYXZpZ2F0aW9uX3JlcXVlc3RlZCkgKFdlYktpdFBhZ2UqIHBhZ2UsIFdlYktpdEZy
YW1lKiBmcmFtZSwgV2ViS2l0TmV0d29ya1JlcXVlc3QqIHJlcXVlc3QpOwotCi0gICAgdm9pZCAo
KndpbmRvd19vYmplY3RfY2xlYXJlZCkgKFdlYktpdFBhZ2UqIHBhZ2UsIFdlYktpdEZyYW1lKiBm
cmFtZSwgSlNHbG9iYWxDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIHdpbmRvd19vYmpl
Y3QpOwotICAgIGdjaGFyKiAgICgqY2hvb3NlX2ZpbGUpIChXZWJLaXRQYWdlKiBwYWdlLCBXZWJL
aXRGcmFtZSogZnJhbWUsIGNvbnN0IGdjaGFyKiBvbGRfZmlsZSk7Ci0gICAgZ2Jvb2xlYW4gKCpz
Y3JpcHRfYWxlcnQpIChXZWJLaXRQYWdlKiBwYWdlLCBXZWJLaXRGcmFtZSogZnJhbWUsIGNvbnN0
IGdjaGFyKiBhbGVydF9tZXNzYWdlKTsKLSAgICBnYm9vbGVhbiAoKnNjcmlwdF9jb25maXJtKSAo
V2ViS2l0UGFnZSogcGFnZSwgV2ViS2l0RnJhbWUqIGZyYW1lLCBjb25zdCBnY2hhciogY29uZmly
bV9tZXNzYWdlLCBnYm9vbGVhbiogZGlkX2NvbmZpcm0pOwotICAgIGdib29sZWFuICgqc2NyaXB0
X3Byb21wdCkgKFdlYktpdFBhZ2UqIHBhZ2UsIFdlYktpdEZyYW1lKiBmcmFtZSwgY29uc3QgZ2No
YXIqIG1lc3NhZ2UsIGNvbnN0IGdjaGFyKiBkZWZhdWx0X3ZhbHVlLCBnY2hhcioqIHZhbHVlKTsK
LSAgICBnYm9vbGVhbiAoKmNvbnNvbGVfbWVzc2FnZSkgKFdlYktpdFBhZ2UqIHBhZ2UsIGNvbnN0
IGdjaGFyKiBtZXNzYWdlLCB1bnNpZ25lZCBpbnQgbGluZV9udW1iZXIsIGNvbnN0IGdjaGFyKiBz
b3VyY2VfaWQpOwotCi0gICAgLyoKLSAgICAgKiBpbnRlcm5hbAotICAgICAqLwotICAgIHZvaWQg
ICAoKnNldF9zY3JvbGxfYWRqdXN0bWVudHMpIChXZWJLaXRQYWdlKiwgR3RrQWRqdXN0bWVudCos
IEd0a0FkanVzdG1lbnQqKTsKLX07Ci0KLVdFQktJVF9BUEkgR1R5cGUKLXdlYmtpdF9wYWdlX2dl
dF90eXBlICh2b2lkKTsKLQotV0VCS0lUX0FQSSBHdGtXaWRnZXQqCi13ZWJraXRfcGFnZV9uZXcg
KHZvaWQpOwotCi1XRUJLSVRfQVBJIGdib29sZWFuCi13ZWJraXRfcGFnZV9jYW5fZ29fYmFja3dh
cmQgKFdlYktpdFBhZ2UqIHBhZ2UpOwotCi1XRUJLSVRfQVBJIGdib29sZWFuCi13ZWJraXRfcGFn
ZV9jYW5fZ29fZm9yd2FyZCAoV2ViS2l0UGFnZSogcGFnZSk7Ci0KLVdFQktJVF9BUEkgdm9pZAot
d2Via2l0X3BhZ2VfZ29fYmFja3dhcmQgKFdlYktpdFBhZ2UqIHBhZ2UpOwotCi1XRUJLSVRfQVBJ
IHZvaWQKLXdlYmtpdF9wYWdlX2dvX2ZvcndhcmQgKFdlYktpdFBhZ2UqIHBhZ2UpOwotCi1XRUJL
SVRfQVBJIHZvaWQKLXdlYmtpdF9wYWdlX3N0b3BfbG9hZGluZyAoV2ViS2l0UGFnZSogcGFnZSk7
Ci0KLVdFQktJVF9BUEkgdm9pZAotd2Via2l0X3BhZ2Vfb3BlbiAoV2ViS2l0UGFnZSogcGFnZSwg
Y29uc3QgZ2NoYXIqIHVyaSk7Ci0KLVdFQktJVF9BUEkgdm9pZAotd2Via2l0X3BhZ2VfcmVsb2Fk
IChXZWJLaXRQYWdlICpwYWdlKTsKLQotV0VCS0lUX0FQSSB2b2lkCi13ZWJraXRfcGFnZV9sb2Fk
X3N0cmluZyAoV2ViS2l0UGFnZSogcGFnZSwgY29uc3QgZ2NoYXIqIGNvbnRlbnQsIGNvbnN0IGdj
aGFyKiBjb250ZW50X21pbWVfdHlwZSwgY29uc3QgZ2NoYXIqIGNvbnRlbnRfZW5jb2RpbmcsIGNv
bnN0IGdjaGFyKiBiYXNlX3VyaSk7Ci0KLVdFQktJVF9BUEkgdm9pZAotd2Via2l0X3BhZ2VfbG9h
ZF9odG1sX3N0cmluZyAoV2ViS2l0UGFnZSogcGFnZSwgY29uc3QgZ2NoYXIqIGNvbnRlbnQsIGNv
bnN0IGdjaGFyKiBiYXNlX3VyaSk7Ci0KLVdFQktJVF9BUEkgV2ViS2l0RnJhbWUqCi13ZWJraXRf
cGFnZV9nZXRfbWFpbl9mcmFtZSAoV2ViS2l0UGFnZSogcGFnZSk7Ci0KLVdFQktJVF9BUEkgdm9p
ZAotd2Via2l0X3BhZ2VfZXhlY3V0ZV9zY3JpcHQgKFdlYktpdFBhZ2UqIHBhZ2UsIGNvbnN0IGdj
aGFyKiBzY3JpcHQpOwotCi1XRUJLSVRfQVBJIGdib29sZWFuCi13ZWJraXRfcGFnZV9nZXRfZWRp
dGFibGUgKFdlYktpdFBhZ2UqIHBhZ2UpOwotCi1XRUJLSVRfQVBJIHZvaWQKLXdlYmtpdF9wYWdl
X3NldF9lZGl0YWJsZSAoV2ViS2l0UGFnZSogcGFnZSwgZ2Jvb2xlYW4gZmxhZyk7Ci0KLUdfRU5E
X0RFQ0xTCi0KLSNlbmRpZgpJbmRleDogV2ViS2l0L2d0ay9BcGkvd2Via2l0Z3RrcHJpdmF0ZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViS2l0L2d0ay9BcGkvd2Via2l0Z3RrcHJpdmF0ZS5jcHAJKHJl
dmlzaW9uIDI4MjUxKQorKysgV2ViS2l0L2d0ay9BcGkvd2Via2l0Z3RrcHJpdmF0ZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsOTggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBI
b2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0gKiAyLiAgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCi0gKiAzLiAgTmVp
dGhlciB0aGUgbmFtZSBvZiBBcHBsZSwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgot
ICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
Ci0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0g
KiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2luY2x1ZGUgIndlYmtp
dGd0a3ByaXZhdGUuaCIKLSNpbmNsdWRlICJDaHJvbWVDbGllbnRHdGsuaCIKLSNpbmNsdWRlICJG
cmFtZUxvYWRlci5oIgotI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50R3RrLmgiCi0jaW5jbHVk
ZSAiTm90SW1wbGVtZW50ZWQuaCIKLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLW5hbWVz
cGFjZSBXZWJLaXQgewotdm9pZCBhcHBseShXZWJLaXRTZXR0aW5ncyosIFdlYkNvcmU6OlNldHRp
bmdzKikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi1XZWJLaXRTZXR0aW5ncyogY3Jl
YXRlKFdlYkNvcmU6OlNldHRpbmdzKikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJl
dHVybiAwOwotfQotCi1XZWJLaXRGcmFtZSogZ2V0RnJhbWVGcm9tUGFnZShXZWJLaXRQYWdlKiBw
YWdlKQotewotICAgIHJldHVybiB3ZWJraXRfcGFnZV9nZXRfbWFpbl9mcmFtZShwYWdlKTsKLX0K
LQotV2ViS2l0UGFnZSogZ2V0UGFnZUZyb21GcmFtZShXZWJLaXRGcmFtZSogZnJhbWUpCi17Ci0g
ICAgcmV0dXJuIHdlYmtpdF9mcmFtZV9nZXRfcGFnZShmcmFtZSk7Ci19Ci0KLVdlYkNvcmU6OkZy
YW1lKiBjb3JlKFdlYktpdEZyYW1lKiBmcmFtZSkKLXsKLSAgICBpZiAoIWZyYW1lKQotICAgICAg
ICByZXR1cm4gMDsKLQotICAgIFdlYktpdEZyYW1lUHJpdmF0ZSogZnJhbWVfZGF0YSA9IFdFQktJ
VF9GUkFNRV9HRVRfUFJJVkFURShmcmFtZSk7Ci0gICAgcmV0dXJuIGZyYW1lX2RhdGEgPyBmcmFt
ZV9kYXRhLT5mcmFtZSA6IDA7Ci19Ci0KLVdlYktpdEZyYW1lKiBraXQoV2ViQ29yZTo6RnJhbWUq
IGNvcmVGcmFtZSkKLXsKLSAgICBpZiAoIWNvcmVGcmFtZSkKLSAgICAgICAgcmV0dXJuIDA7Ci0K
LSAgICBBU1NFUlQoY29yZUZyYW1lLT5sb2FkZXIoKSk7Ci0gICAgV2ViS2l0OjpGcmFtZUxvYWRl
ckNsaWVudCogY2xpZW50ID0gc3RhdGljX2Nhc3Q8V2ViS2l0OjpGcmFtZUxvYWRlckNsaWVudCo+
KGNvcmVGcmFtZS0+bG9hZGVyKCktPmNsaWVudCgpKTsKLSAgICByZXR1cm4gY2xpZW50ID8gY2xp
ZW50LT53ZWJGcmFtZSgpIDogMDsKLX0KLQotV2ViQ29yZTo6UGFnZSogY29yZShXZWJLaXRQYWdl
KiBwYWdlKQotewotICAgIGlmICghcGFnZSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBXZWJL
aXRQYWdlUHJpdmF0ZSogcGFnZV9kYXRhID0gV0VCS0lUX1BBR0VfR0VUX1BSSVZBVEUocGFnZSk7
Ci0gICAgcmV0dXJuIHBhZ2VfZGF0YSA/IHBhZ2VfZGF0YS0+cGFnZSA6IDA7Ci19Ci0KLVdlYktp
dFBhZ2UqIGtpdChXZWJDb3JlOjpQYWdlKiBwYWdlKQotewotICAgIGlmICghcGFnZSkKLSAgICAg
ICAgcmV0dXJuIDA7Ci0KLSAgICBBU1NFUlQocGFnZS0+Y2hyb21lKCkpOwotICAgIFdlYktpdDo6
Q2hyb21lQ2xpZW50KiBjbGllbnQgPSBzdGF0aWNfY2FzdDxXZWJLaXQ6OkNocm9tZUNsaWVudCo+
KHBhZ2UtPmNocm9tZSgpLT5jbGllbnQoKSk7Ci0gICAgcmV0dXJuIGNsaWVudCA/IGNsaWVudC0+
d2ViUGFnZSgpIDogMDsKLX0KLX0KSW5kZXg6IFdlYktpdC9ndGsvQXBpL3dlYmtpdGd0a3ByaXZh
dGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvZ3RrL0FwaS93ZWJraXRndGtwcml2YXRlLmgJKHJl
dmlzaW9uIDI4MjUxKQorKysgV2ViS2l0L2d0ay9BcGkvd2Via2l0Z3RrcHJpdmF0ZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDk2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9s
Z2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotICogMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAotICogMy4gIE5laXRo
ZXIgdGhlIG5hbWUgb2YgQXBwbGUsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAq
ICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQot
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICog
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFdFQktJVF9QUklWQVRFX0gKLSNkZWZpbmUgV0VCS0lU
X1BSSVZBVEVfSAotCi0vKgotICogSW50ZXJuYWwgY2xhc3MuIFRoaXMgY2xhc3Mga25vd3MgdGhl
IHNoYXJlZCBzZWNyZXQgb2YgV2ViS2l0RnJhbWUsCi0gKiBXZWJLaXROZXR3b3JrUmVxdWVzdCBh
bmQgV2ViS2l0UGFnZS4KLSAqIFRoZXkgYXJlIHVzaW5nIFdlYkNvcmUgd2hpY2ggbXVzbid0IGJl
IGV4cG9zZWQgdG8gdGhlIG91dGVyIHdvcmxkLgotICovCi0KLSNpbmNsdWRlICJ3ZWJraXRndGtz
ZXR0aW5ncy5oIgotI2luY2x1ZGUgIndlYmtpdGd0a3BhZ2UuaCIKLSNpbmNsdWRlICJ3ZWJraXRn
dGtmcmFtZS5oIgotI2luY2x1ZGUgIndlYmtpdGd0a25ldHdvcmtyZXF1ZXN0LmgiCi0KLSNpbmNs
dWRlICJTZXR0aW5ncy5oIgotI2luY2x1ZGUgIlBhZ2UuaCIKLSNpbmNsdWRlICJGcmFtZS5oIgot
I2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50LmgiCi0KLW5hbWVzcGFjZSBXZWJLaXQgewotICAg
IHZvaWQgYXBwbHkoV2ViS2l0U2V0dGluZ3MqLFdlYkNvcmU6OlNldHRpbmdzKik7Ci0gICAgV2Vi
S2l0U2V0dGluZ3MqIGNyZWF0ZShXZWJDb3JlOjpTZXR0aW5ncyopOwotICAgIFdlYktpdEZyYW1l
KiAgZ2V0RnJhbWVGcm9tUGFnZShXZWJLaXRQYWdlKik7Ci0gICAgV2ViS2l0UGFnZSogZ2V0UGFn
ZUZyb21GcmFtZShXZWJLaXRGcmFtZSopOwotCi0gICAgV2ViQ29yZTo6RnJhbWUqIGNvcmUoV2Vi
S2l0RnJhbWUqKTsKLSAgICBXZWJLaXRGcmFtZSoga2l0KFdlYkNvcmU6OkZyYW1lKik7Ci0gICAg
V2ViQ29yZTo6UGFnZSogY29yZShXZWJLaXRQYWdlKik7Ci0gICAgV2ViS2l0UGFnZSoga2l0KFdl
YkNvcmU6OlBhZ2UqKTsKLX0KLQotZXh0ZXJuICJDIiB7Ci0gICAgI2RlZmluZSBXRUJLSVRfUEFH
RV9HRVRfUFJJVkFURShvYmopICAgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUoKG9iaiks
IFdFQktJVF9UWVBFX1BBR0UsIFdlYktpdFBhZ2VQcml2YXRlKSkKLSAgICB0eXBlZGVmIHN0cnVj
dCBfV2ViS2l0UGFnZVByaXZhdGUgV2ViS2l0UGFnZVByaXZhdGU7Ci0gICAgc3RydWN0IF9XZWJL
aXRQYWdlUHJpdmF0ZSB7Ci0gICAgICAgIFdlYkNvcmU6OlBhZ2UqIHBhZ2U7Ci0gICAgICAgIFdl
YkNvcmU6OlNldHRpbmdzKiBzZXR0aW5nczsKLQotICAgICAgICBXZWJLaXRGcmFtZSogbWFpbkZy
YW1lOwotICAgICAgICBXZWJDb3JlOjpTdHJpbmcgYXBwbGljYXRpb25OYW1lRm9yVXNlckFnZW50
OwotICAgICAgICBXZWJDb3JlOjpTdHJpbmcqIHVzZXJBZ2VudDsKLQotICAgICAgICBIYXNoU2V0
PEd0a1dpZGdldCo+IGNoaWxkcmVuOwotICAgICAgICBib29sIGVkaXRhYmxlOwotICAgIH07Ci0K
LSAgICAjZGVmaW5lIFdFQktJVF9GUkFNRV9HRVRfUFJJVkFURShvYmopICAgIChHX1RZUEVfSU5T
VEFOQ0VfR0VUX1BSSVZBVEUoKG9iaiksIFdFQktJVF9UWVBFX0ZSQU1FLCBXZWJLaXRGcmFtZVBy
aXZhdGUpKQotICAgIHR5cGVkZWYgc3RydWN0IF9XZWJLaXRGcmFtZVByaXZhdGUgV2ViS2l0RnJh
bWVQcml2YXRlOwotICAgIHN0cnVjdCBfV2ViS2l0RnJhbWVQcml2YXRlIHsKLSAgICAgICAgV2Vi
Q29yZTo6RnJhbWUqIGZyYW1lOwotICAgICAgICBXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudCog
Y2xpZW50OwotICAgICAgICBXZWJLaXRQYWdlKiBwYWdlOwotCi0gICAgICAgIGdjaGFyKiBuYW1l
OwotICAgICAgICBnY2hhciogdGl0bGU7Ci0gICAgICAgIGdjaGFyKiBsb2NhdGlvbjsKLSAgICB9
OwotCi0gICAgI2RlZmluZSBXRUJLSVRfTkVUV09SS19SRVFVRVNUX0dFVF9QUklWQVRFKG9iaikg
ICAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURSgob2JqKSwgV0VCS0lUX1RZUEVfTkVUV09S
S19SRVFVRVNULCBXZWJLaXROZXR3b3JrUmVxdWVzdFByaXZhdGUpKQotICAgIHR5cGVkZWYgc3Ry
dWN0IF9XZWJLaXROZXR3b3JrUmVxdWVzdFByaXZhdGUgV2ViS2l0TmV0d29ya1JlcXVlc3RQcml2
YXRlOwotICAgIHN0cnVjdCBfV2ViS2l0TmV0d29ya1JlcXVlc3RQcml2YXRlIHsKLSAgICAgICAg
Z2NoYXIqIHVyaTsKLSAgICB9OwotCi0gICAgV2ViS2l0RnJhbWUqIHdlYmtpdF9mcmFtZV9pbml0
X3dpdGhfcGFnZShXZWJLaXRQYWdlKiwgV2ViQ29yZTo6SFRNTEZyYW1lT3duZXJFbGVtZW50Kik7
Ci19Ci0KLSNlbmRpZgpJbmRleDogV2ViS2l0L2d0ay9BcGkvd2Via2l0Z3Rrc2V0dGluZ3MuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYktpdC9ndGsvQXBpL3dlYmtpdGd0a3NldHRpbmdzLmNwcAkocmV2
aXNpb24gMjgyNTEpCisrKyBXZWJLaXQvZ3RrL0FwaS93ZWJraXRndGtzZXR0aW5ncy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNzMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBI
b2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0gKiAyLiAgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCi0gKiAzLiAgTmVp
dGhlciB0aGUgbmFtZSBvZiBBcHBsZSwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgot
ICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
Ci0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0g
KiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2luY2x1ZGUgIndlYmtp
dGd0a3NldHRpbmdzLmgiCi0KLWV4dGVybiAiQyIgewotR1R5cGUgd2Via2l0X3dlYl9zZXR0aW5n
c19nZXRfdHlwZSh2b2lkKQotewotICAgIHJldHVybiBHVHlwZSgpOwotfQotCi1XZWJLaXRTZXR0
aW5ncyogd2Via2l0X3dlYl9zZXR0aW5nc19jb3B5KFdlYktpdFNldHRpbmdzKiBzZXR0aW5nKQot
ewotICAgIHJldHVybiAwOwotfQotCi12b2lkIHdlYmtpdF93ZWJfc2V0dGluZ3NfZnJlZShXZWJL
aXRTZXR0aW5ncyogc2V0dGluZykKLXsKLX0KLQotV2ViS2l0U2V0dGluZ3MqIHdlYmtpdF93ZWJf
c2V0dGluZ3NfZ2V0X2dsb2JhbCh2b2lkKQotewotICAgIHJldHVybiAwOwotfQotCi12b2lkIHdl
YmtpdF93ZWJfc2V0dGluZ3Nfc2V0X2dsb2JhbCAoV2ViS2l0U2V0dGluZ3MqIHNldHRpbmcpCi17
Ci19Ci0KLXZvaWQgd2Via2l0X3dlYl9zZXR0aW5nc19zZXRfZm9udF9mYW1pbHkoV2ViS2l0U2V0
dGluZ3MqLCBXZWJLaXRGb250RmFtaWx5IGZhbWlseSwgZ2NoYXIqIGZhbWlseV9uYW1lKQotewot
fQotCi1jb25zdCBnY2hhciogd2Via2l0X3dlYl9zZXR0aW5nc19nZXRfZm9udF9mYW1pbHkoV2Vi
S2l0U2V0dGluZ3MqLCBXZWJLaXRGb250RmFtaWx5IGZhbWlseSkKLXsKLSAgICByZXR1cm4gMDsK
LX0KLQotdm9pZCB3ZWJraXRfd2ViX3NldHRpbmdzX3NldF91c2VyX3N0eWxlX3NoZWV0X2xvY2F0
aW9uKFdlYktpdFNldHRpbmdzKiwgZ2NoYXIqKQotewotfQotCi12b2lkIHdlYmtpdF9zZXRfZnRw
X2RpcmVjdG9yeV90ZW1wbGF0ZV9wYXRoKFdlYktpdFNldHRpbmdzKiwgZ2NoYXIqKQotewotfQot
fQpJbmRleDogV2ViS2l0L2d0ay9BcGkvd2Via2l0Z3Rrc2V0dGluZ3MuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJLaXQvZ3RrL0FwaS93ZWJraXRndGtzZXR0aW5ncy5oCShyZXZpc2lvbiAyODI1MSkKKysr
IFdlYktpdC9ndGsvQXBpL3dlYmtpdGd0a3NldHRpbmdzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
MTE3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIg
RnJleXRoZXIKLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
Ci0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2Yg
QXBwbGUsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
Ci0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLiAKLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICog
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaWZuZGVmIFdFQktJVF9TRVRUSU5HU19ICi0jZGVmaW5lIFdFQktJVF9TRVRUSU5HU19ICi0K
LSNpbmNsdWRlIDxnbGliLmg+Ci0jaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KLQotI2luY2x1ZGUg
IndlYmtpdGd0a2RlZmluZXMuaCIKLQotR19CRUdJTl9ERUNMUwotCi10eXBlZGVmIGVudW0gewot
ICAgIFdFQktJVF9GT05UX0ZBTUlMWV9TVEFOREFSRCwKLSAgICBXRUJLSVRfRk9OVF9GQU1JTFlf
RklYRUQsCi0gICAgV0VCS0lUX0ZPTlRfRkFNSUxZX1NFUklGLAotICAgIFdFQktJVF9GT05UX0ZB
TUlMWV9TQU5TX1NFUklGLAotICAgIFdFQktJVF9GT05UX0ZBTUlMWV9DVVJTSVZFLAotICAgIFdF
QktJVF9GT05UX0ZBTUlMWV9GQU5UQVNZLAotICAgIFdFQktJVF9GT05UX0ZBTUlMWV9MQVNUX0VO
VFJZCi19IFdlYktpdEZvbnRGYW1pbHk7Ci0KLXR5cGVkZWYgZW51bSB7Ci0gICAgV0VCS0lUX0VE
SVRBQkxFX0xJTktfREVGQVVMVF9CRUhBVklPVVIsCi0gICAgV0VCS0lUX0VESVRBQkxFX0xJTktf
QUxXQVlTX0xJVkUsCi0gICAgV0VCS0lUX0VESVRBQkxFX0xJTktfT05MWV9XSVRIX1NISUZUX0tF
WSwKLSAgICBXRUJLSVRfRURJVEFCTEVfTElOS19MSVZFX1dIRU5fTk9UX0ZPQ1VTRUQsCi0gICAg
V0VCS0lUX0VESVRBQkxFX0xJTktfTkVWRVJfTElWRQotfSBXZWJLaXRFZGl0YWJsZUxpbmtCZWhh
dmlvdXI7Ci0KLXR5cGVkZWYgc3RydWN0IF9XZWJLaXRTZXR0aW5ncyBXZWJLaXRTZXR0aW5nczsK
LXR5cGVkZWYgc3RydWN0IF9XZWJLaXRTZXR0aW5nc1ByaXZhdGUgV2ViS2l0U2V0dGluZ3NQcml2
YXRlOwotCi1zdHJ1Y3QgX1dlYktpdFNldHRpbmdzIHsKLSAgICBnY2hhciogZm9udF9uYW1lW1dF
QktJVF9GT05UX0ZBTUlMWV9MQVNUX0VOVFJZXTsKLSAgICBnaW50ICAgbWluaW11bV9mb250X3Np
emU7Ci0gICAgZ2ludCAgIG1pbmltdW1fbG9naWNhbF9mb250X3NpemU7Ci0gICAgZ2ludCAgIGRl
ZmF1bHRfZm9udF9zaXplOwotICAgIGdpbnQgICBkZWZhdWx0X2ZpeGVkX2ZvbnRfc2l6ZTsKLSAg
ICBnYm9vbGVhbiBsb2FkX2ltYWdlc19hdXRvbWF0aWNhbGx5OwotICAgIGdib29sZWFuIGlzX2ph
dmFfc2NyaXB0X2VuYWJsZWQ7Ci0gICAgZ2Jvb2xlYW4gamF2YV9zY3JpcHRfY2FuX29wZW5fd2lu
ZG93c19hdXRvbWF0aWNhbGx5OwotICAgIGdib29sZWFuIHBsdWdpbnNfZW5hYmxlZDsKLSAgICBn
Ym9vbGVhbiBwcml2YXRlX2Jyb3dzaW5nOwotICAgIGdjaGFyKiB1c2VyX3N0eWxlX3NoZWV0X2xv
Y2F0aW9uOwotICAgIGdib29sZWFuIHNob3VsZF9wcmludF9iYWNrZ3JvdW5kczsKLSAgICBnYm9v
bGVhbiB0ZXh0X2FyZWFzX2FyZV9yZXNpemFibGU7Ci0gICAgV2ViS2l0RWRpdGFibGVMaW5rQmVo
YXZpb3VyIGVkaXRhYmxlX2xpbmtfYmVoYXZpb3VyOwotICAgIGdib29sZWFuIHVzZXNfcGFnZV9j
YWNoZTsKLSAgICBnYm9vbGVhbiBzaHJpbmtfc3RhbmRhbG9uZV9pbWFnZXNfdG9fZml0OwotICAg
IGdib29sZWFuIHNob3dfdXJpc19pbl90b29sX3RpcHM7Ci0gICAgZ2NoYXIqIGZ0cF9kaXJlY3Rv
cnlfdGVtcGxhdGVfcGF0aDsKLSAgICBnYm9vbGVhbiBmb3JjZV9mdHBfZGlyZWN0b3J5X2xpc3Rp
bmdzOwotICAgIGdib29sZWFuIGRldmVsb3Blcl9leHRyYXNfZW5hYmxlZDsKLQotCi0gICAgV2Vi
S2l0U2V0dGluZ3NQcml2YXRlICpwcml2YXRlX2RhdGE7Ci19OwotCi1HVHlwZQotd2Via2l0X3dl
Yl9zZXR0aW5nc19nZXRfdHlwZSAodm9pZCk7Ci0KLVdlYktpdFNldHRpbmdzKgotd2Via2l0X3dl
Yl9zZXR0aW5nc19jb3B5IChXZWJLaXRTZXR0aW5ncyogc2V0dGluZyk7Ci0KLXZvaWQKLXdlYmtp
dF93ZWJfc2V0dGluZ3NfZnJlZSAoV2ViS2l0U2V0dGluZ3MqIHNldHRpbmcpOwotCi1XZWJLaXRT
ZXR0aW5ncyoKLXdlYmtpdF93ZWJfc2V0dGluZ3NfZ2V0X2dsb2JhbCAodm9pZCk7Ci0KLXZvaWQK
LXdlYmtpdF93ZWJfc2V0dGluZ3Nfc2V0X2dsb2JhbCAoV2ViS2l0U2V0dGluZ3MqIHNldHRpbmcp
OwotCi12b2lkCi13ZWJraXRfd2ViX3NldHRpbmdzX3NldF9mb250X2ZhbWlseShXZWJLaXRTZXR0
aW5ncyosIFdlYktpdEZvbnRGYW1pbHkgZmFtaWx5LCBnY2hhciAqZmFtaWx5X25hbWUpOwotCi1j
b25zdCBnY2hhcioKLXdlYmtpdF93ZWJfc2V0dGluZ3NfZ2V0X2ZvbnRfZmFtaWx5KFdlYktpdFNl
dHRpbmdzKiwgV2ViS2l0Rm9udEZhbWlseSBmYW1pbHkpOwotCi12b2lkCi13ZWJraXRfd2ViX3Nl
dHRpbmdzX3NldF91c2VyX3N0eWxlX3NoZWV0X2xvY2F0aW9uKFdlYktpdFNldHRpbmdzKiwgZ2No
YXIqKTsKLQotdm9pZAotd2Via2l0X3NldF9mdHBfZGlyZWN0b3J5X3RlbXBsYXRlX3BhdGgoV2Vi
S2l0U2V0dGluZ3MqLCBnY2hhciopOwotCi0KLUdfRU5EX0RFQ0xTCi0KLQotI2VuZGlmCkluZGV4
OiBXZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0ay5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRHdGsuY3BwCShyZXZp
c2lvbiAyODI1MSkKKysrIFdlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3Rr
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsMTUgKzM1LDE1IEBACiAjaW5jbHVkZSAiQ1N0cmlu
Zy5oIgogI2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKICNpbmNsdWRlICJLVVJMLmgiCi0jaW5j
bHVkZSAid2Via2l0Z3RrcGFnZS5oIgotI2luY2x1ZGUgIndlYmtpdGd0a3ByaXZhdGUuaCIKKyNp
bmNsdWRlICJ3ZWJraXR3ZWJ2aWV3LmgiCisjaW5jbHVkZSAid2Via2l0cHJpdmF0ZS5oIgogI2lu
Y2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiV2luZG93RmVhdHVyZXMuaCIKIAog
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewotQ2hyb21lQ2xp
ZW50OjpDaHJvbWVDbGllbnQoV2ViS2l0UGFnZSogcGFnZSkKK0Nocm9tZUNsaWVudDo6Q2hyb21l
Q2xpZW50KFdlYktpdFdlYlZpZXcqIHBhZ2UpCiAgICAgOiBtX3dlYlBhZ2UocGFnZSkKIHsKIH0K
QEAgLTkzLDEyICs5MywxMiBAQCBQYWdlKiBDaHJvbWVDbGllbnQ6OmNyZWF0ZVdpbmRvdyhGcmFt
ZSosCiAgICAgICAgIHJldHVybiAwOwogICAgIH0gZWxzZSB7CiAgICAgICAgIC8qIFRPRE86IEZy
YW1lTG9hZFJlcXVlc3QgaXMgbm90IHVzZWQgKi8KLSAgICAgICAgV2ViS2l0UGFnZSogcGFnZSA9
IFdFQktJVF9QQUdFX0dFVF9DTEFTUyhtX3dlYlBhZ2UpLT5jcmVhdGVfcGFnZShtX3dlYlBhZ2Up
OworICAgICAgICBXZWJLaXRXZWJWaWV3KiBwYWdlID0gV0VCS0lUX1dFQl9WSUVXX0dFVF9DTEFT
UyhtX3dlYlBhZ2UpLT5jcmVhdGVfd2ViX3ZpZXcobV93ZWJQYWdlKTsKICAgICAgICAgaWYgKCFw
YWdlKQogICAgICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICAgICAgV2ViS2l0UGFnZVByaXZhdGUg
KnByaXZhdGVEYXRhID0gV0VCS0lUX1BBR0VfR0VUX1BSSVZBVEUoV0VCS0lUX1BBR0UocGFnZSkp
OwotICAgICAgICByZXR1cm4gcHJpdmF0ZURhdGEtPnBhZ2U7CisgICAgICAgIFdlYktpdFdlYlZp
ZXdQcml2YXRlICpwcml2YXRlRGF0YSA9IFdFQktJVF9XRUJfVklFV19HRVRfUFJJVkFURShXRUJL
SVRfV0VCX1ZJRVcocGFnZSkpOworICAgICAgICByZXR1cm4gcHJpdmF0ZURhdGEtPmNvcmVQYWdl
OwogICAgIH0KIH0KIApJbmRleDogV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGll
bnRHdGsuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNs
aWVudEd0ay5oCShyZXZpc2lvbiAyODI1MSkKKysrIFdlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQv
Q2hyb21lQ2xpZW50R3RrLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDE0ICszMiwxNCBAQAogI2lu
Y2x1ZGUgIkNocm9tZUNsaWVudC5oIgogI2luY2x1ZGUgIktVUkwuaCIKIAotdHlwZWRlZiBzdHJ1
Y3QgX1dlYktpdFBhZ2UgV2ViS2l0UGFnZTsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRXZWJWaWV3
IFdlYktpdFdlYlZpZXc7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCiAgICAgY2xhc3MgQ2hyb21l
Q2xpZW50IDogcHVibGljIFdlYkNvcmU6OkNocm9tZUNsaWVudCB7CiAgICAgcHVibGljOgotICAg
ICAgICBDaHJvbWVDbGllbnQoV2ViS2l0UGFnZSopOwotICAgICAgICBXZWJLaXRQYWdlKiB3ZWJQ
YWdlKCkgY29uc3QgeyByZXR1cm4gbV93ZWJQYWdlOyB9CisgICAgICAgIENocm9tZUNsaWVudChX
ZWJLaXRXZWJWaWV3Kik7CisgICAgICAgIFdlYktpdFdlYlZpZXcqIHdlYlBhZ2UoKSBjb25zdCB7
IHJldHVybiBtX3dlYlBhZ2U7IH0KIAogICAgICAgICB2aXJ0dWFsIHZvaWQgY2hyb21lRGVzdHJv
eWVkKCk7CiAKQEAgLTEwNiw3ICsxMDYsNyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKICAgICAgICAg
dmlydHVhbCB1bnNpZ25lZCBsb25nIGxvbmcgcmVxdWVzdFF1b3RhSW5jcmVhc2VGb3JEYXRhYmFz
ZU9wZXJhdGlvbihXZWJDb3JlOjpGcmFtZSosIGNvbnN0IFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2lu
RGF0YSYsIGNvbnN0IFdlYkNvcmU6OlN0cmluZyYsIHVuc2lnbmVkIGxvbmcgbG9uZyk7CiAKICAg
ICBwcml2YXRlOgotICAgICAgICBXZWJLaXRQYWdlKiBtX3dlYlBhZ2U7CisgICAgICAgIFdlYktp
dFdlYlZpZXcqIG1fd2ViUGFnZTsKICAgICAgICAgV2ViQ29yZTo6S1VSTCBtX2hvdmVyZWRMaW5r
VVJMOwogICAgIH07CiB9CkluZGV4OiBXZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0VkaXRvckNs
aWVudEd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9FZGl0
b3JDbGllbnRHdGsuY3BwCShyZXZpc2lvbiAyODI1MSkKKysrIFdlYktpdC9ndGsvV2ViQ29yZVN1
cHBvcnQvRWRpdG9yQ2xpZW50R3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAsNyBA
QAogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1
ZGUgIlBsYXRmb3JtS2V5Ym9hcmRFdmVudC5oIgotI2luY2x1ZGUgIndlYmtpdGd0a3ByaXZhdGUu
aCIKKyNpbmNsdWRlICJ3ZWJraXRwcml2YXRlLmgiCiAKICNpbmNsdWRlIDxzdGRpby5oPgogCkBA
IC0xNDYsNyArMTQ2LDcgQEAgdm9pZCBFZGl0b3JDbGllbnQ6OmRpZFNldFNlbGVjdGlvblR5cGVz
RgogCiBib29sIEVkaXRvckNsaWVudDo6aXNFZGl0YWJsZSgpCiB7Ci0gICAgcmV0dXJuIHdlYmtp
dF9wYWdlX2dldF9lZGl0YWJsZShtX3BhZ2UpOworICAgIHJldHVybiB3ZWJraXRfd2ViX3ZpZXdf
Z2V0X2VkaXRhYmxlKG1fcGFnZSk7CiB9CiAKIHZvaWQgRWRpdG9yQ2xpZW50OjpyZWdpc3RlckNv
bW1hbmRGb3JVbmRvKFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpFZGl0Q29tbWFuZD4pCkBAIC0z
NjAsNyArMzYwLDcgQEAgdm9pZCBFZGl0b3JDbGllbnQ6OmhhbmRsZUlucHV0TWV0aG9kS2V5cAog
ICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLUVkaXRvckNsaWVudDo6RWRpdG9yQ2xpZW50KFdl
YktpdFBhZ2UqIHBhZ2UpCitFZGl0b3JDbGllbnQ6OkVkaXRvckNsaWVudChXZWJLaXRXZWJWaWV3
KiBwYWdlKQogICAgIDogbV9wYWdlKHBhZ2UpCiB7CiB9CkluZGV4OiBXZWJLaXQvZ3RrL1dlYkNv
cmVTdXBwb3J0L0VkaXRvckNsaWVudEd0ay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9ndGsvV2Vi
Q29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50R3RrLmgJKHJldmlzaW9uIDI4MjUxKQorKysgV2ViS2l0
L2d0ay9XZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRHdGsuaAkod29ya2luZyBjb3B5KQpAQCAt
MzQsNyArMzQsNyBAQAogCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KIAotdHlwZWRlZiBzdHJ1
Y3QgX1dlYktpdFBhZ2UgV2ViS2l0UGFnZTsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRXZWJWaWV3
IFdlYktpdFdlYlZpZXc7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBQYWdlOwpA
QCAtNDQsNyArNDQsNyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogICAgIGNsYXNzIEVkaXRvckNs
aWVudCA6IHB1YmxpYyBXZWJDb3JlOjpFZGl0b3JDbGllbnQgewogICAgIHB1YmxpYzoKLSAgICAg
ICAgRWRpdG9yQ2xpZW50KFdlYktpdFBhZ2UqKTsKKyAgICAgICAgRWRpdG9yQ2xpZW50KFdlYktp
dFdlYlZpZXcqKTsKIAogICAgICAgICAvLyBmcm9tIEVkaXRvckNsaWVudAogICAgICAgICB2aXJ0
dWFsIHZvaWQgcGFnZURlc3Ryb3llZCgpOwpAQCAtMTA5LDcgKzEwOSw3IEBAIG5hbWVzcGFjZSBX
ZWJLaXQgewogICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0SW5wdXRNZXRob2RTdGF0ZShib29sIGVu
YWJsZWQpOwogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgV2ViS2l0UGFnZSogbV9wYWdlOworICAg
ICAgICBXZWJLaXRXZWJWaWV3KiBtX3BhZ2U7CiAgICAgfTsKIH0KIApJbmRleDogV2ViS2l0L2d0
ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5jcHAJKHJldmlz
aW9uIDI4MjUxKQorKysgV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVu
dEd0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxLDkgKzUxLDkgQEAKICNpbmNsdWRlICJranNf
YmluZGluZy5oIgogI2luY2x1ZGUgImtqc19wcm94eS5oIgogI2luY2x1ZGUgImtqc193aW5kb3cu
aCIKLSNpbmNsdWRlICJ3ZWJraXRndGtwYWdlLmgiCi0jaW5jbHVkZSAid2Via2l0Z3RrZnJhbWUu
aCIKLSNpbmNsdWRlICJ3ZWJraXRndGtwcml2YXRlLmgiCisjaW5jbHVkZSAid2Via2l0d2Vidmll
dy5oIgorI2luY2x1ZGUgIndlYmtpdHdlYmZyYW1lLmgiCisjaW5jbHVkZSAid2Via2l0cHJpdmF0
ZS5oIgogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvQVBJQ2FzdC5oPgogI2luY2x1ZGUgPHN0
ZGlvLmg+CkBAIC02NSw3ICs2NSw3IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBuYW1l
c3BhY2UgV2ViS2l0IHsKIAotRnJhbWVMb2FkZXJDbGllbnQ6OkZyYW1lTG9hZGVyQ2xpZW50KFdl
YktpdEZyYW1lKiBmcmFtZSkKK0ZyYW1lTG9hZGVyQ2xpZW50OjpGcmFtZUxvYWRlckNsaWVudChX
ZWJLaXRXZWJGcmFtZSogZnJhbWUpCiAgICAgOiBtX2ZyYW1lKGZyYW1lKQogICAgICwgbV91c2Vy
QWdlbnQoIiIpCiB7CkBAIC0xOTksMTMgKzE5OSwxMyBAQCB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50
Ojphc3NpZ25JZGVudGlmaWVyCiAKIHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OnBvc3RQcm9ncmVz
c1N0YXJ0ZWROb3RpZmljYXRpb24oKQogewotICAgIFdlYktpdFBhZ2UqIHBhZ2UgPSBnZXRQYWdl
RnJvbUZyYW1lKG1fZnJhbWUpOworICAgIFdlYktpdFdlYlZpZXcqIHBhZ2UgPSBnZXRWaWV3RnJv
bUZyYW1lKG1fZnJhbWUpOwogICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZShwYWdlLCAibG9hZF9z
dGFydGVkIiwgbV9mcmFtZSk7CiB9CiAKIHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OnBvc3RQcm9n
cmVzc0VzdGltYXRlQ2hhbmdlZE5vdGlmaWNhdGlvbigpCiB7Ci0gICAgV2ViS2l0UGFnZSoga2l0
UGFnZSA9IGdldFBhZ2VGcm9tRnJhbWUobV9mcmFtZSk7CisgICAgV2ViS2l0V2ViVmlldyoga2l0
UGFnZSA9IGdldFZpZXdGcm9tRnJhbWUobV9mcmFtZSk7CiAgICAgUGFnZSogY29yZVBhZ2UgPSBj
b3JlKGtpdFBhZ2UpOwogCiAgICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKGtpdFBhZ2UsICJsb2Fk
X3Byb2dyZXNzX2NoYW5nZWQiLCBscm91bmQoY29yZVBhZ2UtPnByb2dyZXNzKCktPmVzdGltYXRl
ZFByb2dyZXNzKCkqMTAwKSk7CkBAIC0yMTMsNyArMjEzLDcgQEAgdm9pZCBGcmFtZUxvYWRlckNs
aWVudDo6cG9zdFByb2dyZXNzRXN0aQogCiB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50Ojpwb3N0UHJv
Z3Jlc3NGaW5pc2hlZE5vdGlmaWNhdGlvbigpCiB7Ci0gICAgV2ViS2l0UGFnZSogcGFnZSA9IGdl
dFBhZ2VGcm9tRnJhbWUobV9mcmFtZSk7CisgICAgV2ViS2l0V2ViVmlldyogcGFnZSA9IGdldFZp
ZXdGcm9tRnJhbWUobV9mcmFtZSk7CiAKICAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUocGFnZSwg
ImxvYWRfZmluaXNoZWQiLCBtX2ZyYW1lKTsKIH0KQEAgLTI1NCw3ICsyNTQsNyBAQCB2b2lkIEZy
YW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERlY2lkZVBvCiAgICAgaWYgKCFwb2xpY3lGdW5jdGlv
bikKICAgICAgICAgcmV0dXJuOwogCi0gICAgV2ViS2l0UGFnZSogcGFnZSA9IGdldFBhZ2VGcm9t
RnJhbWUobV9mcmFtZSk7CisgICAgV2ViS2l0V2ViVmlldyogcGFnZSA9IGdldFZpZXdGcm9tRnJh
bWUobV9mcmFtZSk7CiAgICAgV2ViS2l0TmV0d29ya1JlcXVlc3QqIHJlcXVlc3QgPSB3ZWJraXRf
bmV0d29ya19yZXF1ZXN0X25ldyhyZXNvdXJjZVJlcXVlc3QudXJsKCkudXJsKCkudXRmOCgpLmRh
dGEoKSk7CiAgICAgV2ViS2l0TmF2aWdhdGlvblJlc3BvbnNlIHJlc3BvbnNlOwogCkBAIC0yODEs
OCArMjgxLDggQEAgUGFzc1JlZlB0cjxGcmFtZT4gRnJhbWVMb2FkZXJDbGllbnQ6OmNyZQogewog
ICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKHdlYkZyYW1lKCkpOwogCi0gICAgQVNTRVJUKGNv
cmUoZ2V0UGFnZUZyb21GcmFtZSh3ZWJGcmFtZSgpKSkgPT0gY29yZUZyYW1lLT5wYWdlKCkpOwot
ICAgIFdlYktpdEZyYW1lKiBndGtGcmFtZSA9IFdFQktJVF9GUkFNRSh3ZWJraXRfZnJhbWVfaW5p
dF93aXRoX3BhZ2UoZ2V0UGFnZUZyb21GcmFtZSh3ZWJGcmFtZSgpKSwgb3duZXJFbGVtZW50KSk7
CisgICAgQVNTRVJUKGNvcmUoZ2V0Vmlld0Zyb21GcmFtZSh3ZWJGcmFtZSgpKSkgPT0gY29yZUZy
YW1lLT5wYWdlKCkpOworICAgIFdlYktpdFdlYkZyYW1lKiBndGtGcmFtZSA9IFdFQktJVF9XRUJf
RlJBTUUod2Via2l0X3dlYl9mcmFtZV9pbml0X3dpdGhfd2ViX3ZpZXcoZ2V0Vmlld0Zyb21GcmFt
ZSh3ZWJGcmFtZSgpKSwgb3duZXJFbGVtZW50KSk7CiAgICAgUmVmUHRyPEZyYW1lPiBjaGlsZEZy
YW1lKGFkb3B0UmVmKGNvcmUoZ3RrRnJhbWUpKSk7CiAKICAgICBjb3JlRnJhbWUtPnRyZWUoKS0+
YXBwZW5kQ2hpbGQoY2hpbGRGcmFtZSk7CkBAIC0zNjYsNyArMzY2LDcgQEAgdm9pZCBGcmFtZUxv
YWRlckNsaWVudDo6d2luZG93T2JqZWN0Q2xlYQogICAgIEpTT2JqZWN0UmVmIHdpbmRvd09iamVj
dCA9IHRvUmVmKEtKUzo6V2luZG93OjpyZXRyaWV2ZShjb3JlRnJhbWUpLT5nZXRPYmplY3QoKSk7
CiAgICAgQVNTRVJUKHdpbmRvd09iamVjdCk7CiAKLSAgICBXZWJLaXRQYWdlKiBwYWdlID0gZ2V0
UGFnZUZyb21GcmFtZShtX2ZyYW1lKTsKKyAgICBXZWJLaXRXZWJWaWV3KiBwYWdlID0gZ2V0Vmll
d0Zyb21GcmFtZShtX2ZyYW1lKTsKICAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUocGFnZSwgIndp
bmRvd19vYmplY3RfY2xlYXJlZCIsIG1fZnJhbWUsIGNvbnRleHQsIHdpbmRvd09iamVjdCk7CiAK
ICAgICAvLyBUT0RPOiBSZS1hdHRhY2ggZGVidWcgY2xpZW50cyBpZiBwcmVzZW50LgpAQCAtNDQ3
LDcgKzQ0Nyw3IEBAIHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoV2lsbENsb3MKIAog
dm9pZCBGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEaWRSZWNlaXZlSWNvbigpCiB7Ci0gICAg
V2ViS2l0UGFnZSogcGFnZSA9IGdldFBhZ2VGcm9tRnJhbWUobV9mcmFtZSk7CisgICAgV2ViS2l0
V2ViVmlldyogcGFnZSA9IGdldFZpZXdGcm9tRnJhbWUobV9mcmFtZSk7CiAKICAgICBnX3NpZ25h
bF9lbWl0X2J5X25hbWUocGFnZSwgImljb25fbG9hZGVkIiwgbV9mcmFtZSk7CiB9CkBAIC01MDcs
MTMgKzUwNywxMyBAQCB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50OjpwcmVwYXJlRm9yRGF0YVNvCiAK
IHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OnNldFRpdGxlKGNvbnN0IFN0cmluZyYgdGl0bGUsIGNv
bnN0IEtVUkwmIHVybCkKIHsKLSAgICBXZWJLaXRQYWdlKiBwYWdlID0gZ2V0UGFnZUZyb21GcmFt
ZShtX2ZyYW1lKTsKKyAgICBXZWJLaXRXZWJWaWV3KiBwYWdlID0gZ2V0Vmlld0Zyb21GcmFtZSht
X2ZyYW1lKTsKIAogICAgIENTdHJpbmcgdGl0bGVTdHJpbmcgPSB0aXRsZS51dGY4KCk7CiAgICAg
RGVwcmVjYXRlZENTdHJpbmcgdXJsU3RyaW5nID0gdXJsLnByZXR0eVVSTCgpLnV0ZjgoKTsKICAg
ICBnX3NpZ25hbF9lbWl0X2J5X25hbWUobV9mcmFtZSwgInRpdGxlX2NoYW5nZWQiLCB0aXRsZVN0
cmluZy5kYXRhKCksIHVybFN0cmluZy5kYXRhKCkpOwogCi0gICAgaWYgKG1fZnJhbWUgPT0gd2Vi
a2l0X3BhZ2VfZ2V0X21haW5fZnJhbWUocGFnZSkpCisgICAgaWYgKG1fZnJhbWUgPT0gd2Via2l0
X3dlYl92aWV3X2dldF9tYWluX2ZyYW1lKHBhZ2UpKQogICAgICAgICBnX3NpZ25hbF9lbWl0X2J5
X25hbWUocGFnZSwgInRpdGxlX2NoYW5nZWQiLCB0aXRsZVN0cmluZy5kYXRhKCksIHVybFN0cmlu
Zy5kYXRhKCkpOwogfQogCkluZGV4OiBXZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9h
ZGVyQ2xpZW50R3RrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9G
cmFtZUxvYWRlckNsaWVudEd0ay5oCShyZXZpc2lvbiAyODI1MSkKKysrIFdlYktpdC9ndGsvV2Vi
Q29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuaAkod29ya2luZyBjb3B5KQpAQCAtMzIs
MTcgKzMyLDE3IEBACiAjaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnQuaCIKICNpbmNsdWRlICJS
ZXNvdXJjZVJlc3BvbnNlLmgiCiAKLXR5cGVkZWYgc3RydWN0IF9XZWJLaXRGcmFtZSBXZWJLaXRG
cmFtZTsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRXZWJGcmFtZSBXZWJLaXRXZWJGcmFtZTsKIAog
bmFtZXNwYWNlIFdlYktpdCB7CiAKICAgICBjbGFzcyBGcmFtZUxvYWRlckNsaWVudCA6IHB1Ymxp
YyBXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudCB7CiAgICAgcHVibGljOgotICAgICAgICBGcmFt
ZUxvYWRlckNsaWVudChXZWJLaXRGcmFtZSopOworICAgICAgICBGcmFtZUxvYWRlckNsaWVudChX
ZWJLaXRXZWJGcmFtZSopOwogICAgICAgICB2aXJ0dWFsIH5GcmFtZUxvYWRlckNsaWVudCgpIHsg
fQogICAgICAgICB2aXJ0dWFsIHZvaWQgZnJhbWVMb2FkZXJEZXN0cm95ZWQoKTsKIAotICAgICAg
ICBXZWJLaXRGcmFtZSogIHdlYkZyYW1lKCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZTsgfQorICAg
ICAgICBXZWJLaXRXZWJGcmFtZSogIHdlYkZyYW1lKCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZTsg
fQogCiAgICAgICAgIHZpcnR1YWwgYm9vbCBoYXNXZWJWaWV3KCkgY29uc3Q7CiAgICAgICAgIHZp
cnR1YWwgYm9vbCBoYXNGcmFtZVZpZXcoKSBjb25zdDsKQEAgLTE3OCw3ICsxNzgsNyBAQCBuYW1l
c3BhY2UgV2ViS2l0IHsKICAgICAgICAgdmlydHVhbCBib29sIGNhbkNhY2hlUGFnZSgpIGNvbnN0
OwogICAgICAgICB2aXJ0dWFsIHZvaWQgZG93bmxvYWQoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGUq
LCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJj
ZVJlcXVlc3QmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJik7CiAgICAgcHJpdmF0
ZToKLSAgICAgICAgV2ViS2l0RnJhbWUqIG1fZnJhbWU7CisgICAgICAgIFdlYktpdFdlYkZyYW1l
KiBtX2ZyYW1lOwogICAgICAgICBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlIG1fcmVzcG9uc2U7
CiAgICAgICAgIFdlYkNvcmU6OlN0cmluZyBtX3VzZXJBZ2VudDsKICAgICB9OwpJbmRleDogV2Vi
S2l0L2d0ay9XZWJWaWV3L2hlYWRlcnMucHJpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9ndGsvV2Vi
Vmlldy9oZWFkZXJzLnByaQkocmV2aXNpb24gMCkKKysrIFdlYktpdC9ndGsvV2ViVmlldy9oZWFk
ZXJzLnByaQkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3IEBACitXRUJLSVRfQVBJX0hFQURFUlMg
PSAkJFBXRC93ZWJraXRkZWZpbmVzLmggXAorICAgICAgICAgICAgICAgICAgICAgJCRQV0Qvd2Vi
a2l0d2ViZnJhbWUuaCBcCisgICAgICAgICAgICAgICAgICAgICAkJFBXRC93ZWJraXRmcmFtZWRh
dGEuaCBcCisgICAgICAgICAgICAgICAgICAgICAkJFBXRC93ZWJraXRnbG9iYWwuaCBcCisgICAg
ICAgICAgICAgICAgICAgICAkJFBXRC93ZWJraXRuZXR3b3JrcmVxdWVzdC5oIFwKKyAgICAgICAg
ICAgICAgICAgICAgICQkUFdEL3dlYmtpdHdlYnZpZXcuaCBcCisgICAgICAgICAgICAgICAgICAg
ICAkJFBXRC93ZWJraXRzZXR0aW5ncy5oCkluZGV4OiBXZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0
LW1hcnNoYWwubGlzdAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0LW1h
cnNoYWwubGlzdAkocmV2aXNpb24gMCkKKysrIFdlYktpdC9ndGsvV2ViVmlldy93ZWJraXQtbWFy
c2hhbC5saXN0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDkgQEAKK1ZPSUQ6U1RSSU5HLFNUUklO
RworVk9JRDpPQkpFQ1QsQk9PTEVBTgorVk9JRDpPQkpFQ1QsT0JKRUNUCitWT0lEOk9CSkVDVCxQ
T0lOVEVSLFBPSU5URVIKK0JPT0xFQU46U1RSSU5HLElOVCxTVFJJTkcKK0JPT0xFQU46T0JKRUNU
LFNUUklORworQk9PTEVBTjpPQkpFQ1QsU1RSSU5HLEJPT0xFQU4KK0JPT0xFQU46T0JKRUNULFNU
UklORyxTVFJJTkcsU1RSSU5HCitJTlQ6T0JKRUNULE9CSkVDVApJbmRleDogV2ViS2l0L2d0ay9X
ZWJWaWV3L3dlYmtpdGRlZmluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvZ3RrL1dlYlZpZXcv
d2Via2l0ZGVmaW5lcy5oCShyZXZpc2lvbiAwKQorKysgV2ViS2l0L2d0ay9XZWJWaWV3L3dlYmtp
dGRlZmluZXMuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2MiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4g
CisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4g
CisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSwgSW5jLiAoIkFwcGxlIikgbm9yIHRo
ZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElT
IiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV0VCS0lUX0RFRklORVNfSAor
I2RlZmluZSBXRUJLSVRfREVGSU5FU19ICisKKyNpbmNsdWRlIDxnbGliLmg+CisKK3R5cGVkZWYg
c3RydWN0IF9XZWJLaXRXZWJGcmFtZSBXZWJLaXRXZWJGcmFtZTsKK3R5cGVkZWYgc3RydWN0IF9X
ZWJLaXRXZWJGcmFtZUNsYXNzIFdlYktpdFdlYkZyYW1lQ2xhc3M7CisKK3R5cGVkZWYgc3RydWN0
IF9XZWJLaXRXZWJGcmFtZURhdGEgV2ViS2l0V2ViRnJhbWVEYXRhOworCit0eXBlZGVmIHN0cnVj
dCBfV2ViS2l0V2ViVmlldyBXZWJLaXRXZWJWaWV3OwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFdl
YlZpZXdDbGFzcyBXZWJLaXRXZWJWaWV3Q2xhc3M7CisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRO
ZXR3b3JrUmVxdWVzdCBXZWJLaXROZXR3b3JrUmVxdWVzdDsKK3R5cGVkZWYgc3RydWN0IF9XZWJL
aXROZXR3b3JrUmVxdWVzdENsYXNzIFdlYktpdE5ldHdvcmtSZXF1ZXN0Q2xhc3M7CisKK3R5cGVk
ZWYgc3RydWN0IE9wYXF1ZUpTQ29udGV4dCogSlNHbG9iYWxDb250ZXh0UmVmOwordHlwZWRlZiBz
dHJ1Y3QgT3BhcXVlSlNWYWx1ZSogSlNPYmplY3RSZWY7CisKKyNpZmRlZiBHX09TX1dJTjMyCisg
ICAgI2lmZGVmIEJVSUxESU5HX1dFQktJVAorICAgICAgICAjZGVmaW5lIFdFQktJVF9BUEkgX19k
ZWNsc3BlYyhkbGxleHBvcnQpCisgICAgI2Vsc2UKKyAgICAgICAgI2RlZmluZSBXRUJLSVRfQVBJ
IF9fZGVjbHNwZWMoZGxsaW1wb3J0KQorICAgICNlbmRpZgorI2Vsc2UKKyAgICAjZGVmaW5lIFdF
QktJVF9BUEkgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSkKKyNlbmRpZgor
CisjaWZuZGVmIFdFQktJVF9BUEkKKyNkZWZpbmUgV0VCS0lUX0FQSQorI2VuZGlmCisKKyNlbmRp
ZgpJbmRleDogV2ViS2l0L2d0ay9XZWJWaWV3L3dlYmtpdGdsb2JhbC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViS2l0L2d0ay9XZWJWaWV3L3dlYmtpdGdsb2JhbC5jcHAJKHJldmlzaW9uIDApCisrKyBX
ZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0Z2xvYmFsLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSw1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5
dGhlcgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAq
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBs
ZSwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAq
ICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uIAorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5E
IElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisg
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJ3ZWJraXRnbG9iYWwuaCIKKworI2luY2x1ZGUg
IkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJEYXRhYmFzZVRyYWNrZXIuaCIKKworI2luY2x1ZGUgPGds
aWIuaD4KKworZXh0ZXJuICJDIiB7Cit2b2lkIHdlYmtpdF9pbml0KHZvaWQpCit7CisgICAgV2Vi
Q29yZTo6SW5pdGlhbGl6ZUxvZ2dpbmdDaGFubmVsc0lmTmVjZXNzYXJ5KCk7CisKKyAgICBXZWJD
b3JlOjppbml0aWFsaXplVGhyZWFkaW5nKCk7CisKKyNpZiBFTkFCTEUoREFUQUJBU0UpCisgICAg
Ly8gRklYTUU6IEl0IHNob3VsZCBiZSBwb3NzaWJsZSBmb3IgY2xpZW50IGFwcGxpY2F0aW9ucyB0
byBvdmVycmlkZSB0aGlzIGRlZmF1bHQgbG9jYXRpb24KKyAgICBnY2hhciogZGF0YWJhc2VEaXJl
Y3RvcnkgPSBnX2J1aWxkX2ZpbGVuYW1lKGdfZ2V0X3VzZXJfZGF0YV9kaXIoKSwgIndlYmtpdCIs
ICJkYXRhYmFzZXMiLCBOVUxMKTsKKyAgICBXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OnRyYWNr
ZXIoKS5zZXREYXRhYmFzZVBhdGgoZGF0YWJhc2VEaXJlY3RvcnkpOworICAgIGdfZnJlZShkYXRh
YmFzZURpcmVjdG9yeSk7CisjZW5kaWYKK30KK30KSW5kZXg6IFdlYktpdC9ndGsvV2ViVmlldy93
ZWJraXRnbG9iYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0Z2xv
YmFsLmgJKHJldmlzaW9uIDApCisrKyBXZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0Z2xvYmFsLmgJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcg
SG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorICogMi4gIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAorICogMy4gIE5l
aXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YK
KyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgor
ICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdFQktJVF9HTE9CQUxfSAorI2RlZmluZSBXRUJL
SVRfR0xPQkFMX0gKKworI2luY2x1ZGUgIndlYmtpdGRlZmluZXMuaCIKKworR19CRUdJTl9ERUNM
UworCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9pbml0ICh2b2lkKTsKKworR19FTkRfREVDTFMK
KworI2VuZGlmCkluZGV4OiBXZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0bmV0d29ya3JlcXVlc3Qu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9ndGsvV2ViVmlldy93ZWJraXRuZXR3b3JrcmVxdWVz
dC5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0bmV0d29ya3Jl
cXVlc3QuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDk0IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAK
KyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAK
KyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlLCBJbmMuICgiQXBwbGUiKSBub3IgdGhl
IG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMi
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5j
bHVkZSAid2Via2l0bmV0d29ya3JlcXVlc3QuaCIKKyNpbmNsdWRlICJ3ZWJraXRwcml2YXRlLmgi
CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKwor
ZXh0ZXJuICJDIiB7CisKK0dfREVGSU5FX1RZUEUoV2ViS2l0TmV0d29ya1JlcXVlc3QsIHdlYmtp
dF9uZXR3b3JrX3JlcXVlc3QsIEdfVFlQRV9PQkpFQ1QpOworCitzdGF0aWMgdm9pZCB3ZWJraXRf
bmV0d29ya19yZXF1ZXN0X2ZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkKK3sKKyAgICBXZWJLaXRO
ZXR3b3JrUmVxdWVzdFByaXZhdGUqIHJlcXVlc3RQcml2YXRlID0gV0VCS0lUX05FVFdPUktfUkVR
VUVTVF9HRVRfUFJJVkFURShvYmplY3QpOworCisgICAgZ19mcmVlKHJlcXVlc3RQcml2YXRlLT51
cmkpOworCisgICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0X25ldHdvcmtfcmVxdWVzdF9wYXJlbnRf
Y2xhc3MpLT5maW5hbGl6ZShvYmplY3QpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfbmV0d29y
a19yZXF1ZXN0X2NsYXNzX2luaXQoV2ViS2l0TmV0d29ya1JlcXVlc3RDbGFzcyogcmVxdWVzdENs
YXNzKQoreworICAgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZShyZXF1ZXN0Q2xhc3MsIHNpemVv
ZihXZWJLaXROZXR3b3JrUmVxdWVzdFByaXZhdGUpKTsKKworICAgIEdfT0JKRUNUX0NMQVNTKHJl
cXVlc3RDbGFzcyktPmZpbmFsaXplID0gd2Via2l0X25ldHdvcmtfcmVxdWVzdF9maW5hbGl6ZTsK
K30KKworc3RhdGljIHZvaWQgd2Via2l0X25ldHdvcmtfcmVxdWVzdF9pbml0KFdlYktpdE5ldHdv
cmtSZXF1ZXN0KiByZXF1ZXN0KQoreworfQorCitXZWJLaXROZXR3b3JrUmVxdWVzdCogd2Via2l0
X25ldHdvcmtfcmVxdWVzdF9uZXcoY29uc3QgZ2NoYXIqIHVyaSkKK3sKKyAgICBXZWJLaXROZXR3
b3JrUmVxdWVzdCogcmVxdWVzdCA9IFdFQktJVF9ORVRXT1JLX1JFUVVFU1QoZ19vYmplY3RfbmV3
KFdFQktJVF9UWVBFX05FVFdPUktfUkVRVUVTVCwgTlVMTCkpOworICAgIFdlYktpdE5ldHdvcmtS
ZXF1ZXN0UHJpdmF0ZSogcmVxdWVzdFByaXZhdGUgPSBXRUJLSVRfTkVUV09SS19SRVFVRVNUX0dF
VF9QUklWQVRFKHJlcXVlc3QpOworCisgICAgcmVxdWVzdFByaXZhdGUtPnVyaSA9IGdfc3RyZHVw
KHVyaSk7CisKKyAgICByZXR1cm4gcmVxdWVzdDsKK30KKwordm9pZCB3ZWJraXRfbmV0d29ya19y
ZXF1ZXN0X3NldF91cmkoV2ViS2l0TmV0d29ya1JlcXVlc3QqIHJlcXVlc3QsIGNvbnN0IGdjaGFy
KiB1cmkpCit7CisgICAgV2ViS2l0TmV0d29ya1JlcXVlc3RQcml2YXRlKiByZXF1ZXN0UHJpdmF0
ZTsKKworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX05FVFdPUktfUkVRVUVTVChyZXF1
ZXN0KSk7CisKKyAgICByZXF1ZXN0UHJpdmF0ZSA9IFdFQktJVF9ORVRXT1JLX1JFUVVFU1RfR0VU
X1BSSVZBVEUocmVxdWVzdCk7CisKKyAgICBnX2ZyZWUocmVxdWVzdFByaXZhdGUtPnVyaSk7Cisg
ICAgcmVxdWVzdFByaXZhdGUtPnVyaSA9IGdfc3RyZHVwKHVyaSk7Cit9CisKK2NvbnN0IGdjaGFy
KiB3ZWJraXRfbmV0d29ya19yZXF1ZXN0X2dldF91cmkoV2ViS2l0TmV0d29ya1JlcXVlc3QqIHJl
cXVlc3QpCit7CisgICAgV2ViS2l0TmV0d29ya1JlcXVlc3RQcml2YXRlKiByZXF1ZXN0UHJpdmF0
ZTsKKworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19ORVRXT1JLX1JFUVVFU1Qo
cmVxdWVzdCksIE5VTEwpOworCisgICAgcmVxdWVzdFByaXZhdGUgPSBXRUJLSVRfTkVUV09SS19S
RVFVRVNUX0dFVF9QUklWQVRFKHJlcXVlc3QpOworCisgICAgcmV0dXJuIHJlcXVlc3RQcml2YXRl
LT51cmk7Cit9CisKK30KSW5kZXg6IFdlYktpdC9ndGsvV2ViVmlldy93ZWJraXRuZXR3b3JrcmVx
dWVzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9ndGsvV2ViVmlldy93ZWJraXRuZXR3b3JrcmVx
dWVzdC5oCShyZXZpc2lvbiAwKQorKysgV2ViS2l0L2d0ay9XZWJWaWV3L3dlYmtpdG5ldHdvcmty
ZXF1ZXN0LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjggQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAor
ICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAor
ICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUg
bmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsK
KyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdFQktJVF9ORVRXT1JLX1JFUVVF
U1RfSAorI2RlZmluZSBXRUJLSVRfTkVUV09SS19SRVFVRVNUX0gKKworI2luY2x1ZGUgPGdsaWIt
b2JqZWN0Lmg+CisKKyNpbmNsdWRlICJ3ZWJraXRkZWZpbmVzLmgiCisKK0dfQkVHSU5fREVDTFMK
KworI2RlZmluZSBXRUJLSVRfVFlQRV9ORVRXT1JLX1JFUVVFU1QgICAgICAgICAgICAod2Via2l0
X25ldHdvcmtfcmVxdWVzdF9nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfTkVUV09SS19SRVFV
RVNUKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdF
QktJVF9UWVBFX05FVFdPUktfUkVRVUVTVCwgV2ViS2l0TmV0d29ya1JlcXVlc3QpKQorI2RlZmlu
ZSBXRUJLSVRfTkVUV09SS19SRVFVRVNUX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NM
QVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9UWVBFX05FVFdPUktfUkVRVUVTVCwgV2ViS2l0TmV0
d29ya1JlcXVlc3RDbGFzcykpCisjZGVmaW5lIFdFQktJVF9JU19ORVRXT1JLX1JFUVVFU1Qob2Jq
KSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX1RZUEVf
TkVUV09SS19SRVFVRVNUKSkKKyNkZWZpbmUgV0VCS0lUX0lTX05FVFdPUktfUkVRVUVTVF9DTEFT
UyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfVFlQRV9O
RVRXT1JLX1JFUVVFU1QpKQorI2RlZmluZSBXRUJLSVRfTkVUV09SS19SRVFVRVNUX0dFVF9DTEFT
UyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9UWVBFX05F
VFdPUktfUkVRVUVTVCwgV2ViS2l0TmV0d29ya1JlcXVlc3RDbGFzcykpCisKKworc3RydWN0IF9X
ZWJLaXROZXR3b3JrUmVxdWVzdCB7CisgICAgR09iamVjdCBwYXJlbnQ7Cit9OworCitzdHJ1Y3Qg
X1dlYktpdE5ldHdvcmtSZXF1ZXN0Q2xhc3MgeworICAgIEdPYmplY3RDbGFzcyBwYXJlbnQ7Cit9
OworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJraXRfbmV0d29ya19yZXF1ZXN0X2dldF90eXBlICh2
b2lkKTsKKworV0VCS0lUX0FQSSBXZWJLaXROZXR3b3JrUmVxdWVzdCoKK3dlYmtpdF9uZXR3b3Jr
X3JlcXVlc3RfbmV3IChjb25zdCBnY2hhciogdXJpKTsKKworV0VCS0lUX0FQSSB2b2lkCit3ZWJr
aXRfbmV0d29ya19yZXF1ZXN0X3NldF91cmkgKFdlYktpdE5ldHdvcmtSZXF1ZXN0KiByZXF1ZXN0
LCBjb25zdCBnY2hhciogdXJpKTsKKworV0VCS0lUX0FQSSBjb25zdCBnY2hhcioKK3dlYmtpdF9u
ZXR3b3JrX3JlcXVlc3RfZ2V0X3VyaSAoV2ViS2l0TmV0d29ya1JlcXVlc3QqIHJlcXVlc3QpOwor
CitHX0VORF9ERUNMUworCisjZW5kaWYKSW5kZXg6IFdlYktpdC9ndGsvV2ViVmlldy93ZWJraXRw
cml2YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0cHJpdmF0
ZS5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0cHJpdmF0ZS5j
cHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsOTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorICogMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAorICogMy4g
IE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMg
b2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJ3
ZWJraXRwcml2YXRlLmgiCisjaW5jbHVkZSAiQ2hyb21lQ2xpZW50R3RrLmgiCisjaW5jbHVkZSAi
RnJhbWVMb2FkZXIuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudEd0ay5oIgorI2luY2x1
ZGUgIk5vdEltcGxlbWVudGVkLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1l
c3BhY2UgV2ViS2l0IHsKK3ZvaWQgYXBwbHkoV2ViS2l0U2V0dGluZ3MqLCBXZWJDb3JlOjpTZXR0
aW5ncyopCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworV2ViS2l0U2V0dGluZ3MqIGNy
ZWF0ZShXZWJDb3JlOjpTZXR0aW5ncyopCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBy
ZXR1cm4gMDsKK30KKworV2ViS2l0V2ViRnJhbWUqIGdldEZyYW1lRnJvbVZpZXcoV2ViS2l0V2Vi
Vmlldyogd2ViVmlldykKK3sKKyAgICByZXR1cm4gd2Via2l0X3dlYl92aWV3X2dldF9tYWluX2Zy
YW1lKHdlYlZpZXcpOworfQorCitXZWJLaXRXZWJWaWV3KiBnZXRWaWV3RnJvbUZyYW1lKFdlYktp
dFdlYkZyYW1lKiBmcmFtZSkKK3sKKyAgICByZXR1cm4gd2Via2l0X3dlYl9mcmFtZV9nZXRfd2Vi
X3ZpZXcoZnJhbWUpOworfQorCitXZWJDb3JlOjpGcmFtZSogY29yZShXZWJLaXRXZWJGcmFtZSog
ZnJhbWUpCit7CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBXZWJL
aXRXZWJGcmFtZVByaXZhdGUqIGZyYW1lX2RhdGEgPSBXRUJLSVRfV0VCX0ZSQU1FX0dFVF9QUklW
QVRFKGZyYW1lKTsKKyAgICByZXR1cm4gZnJhbWVfZGF0YSA/IGZyYW1lX2RhdGEtPmZyYW1lIDog
MDsKK30KKworV2ViS2l0V2ViRnJhbWUqIGtpdChXZWJDb3JlOjpGcmFtZSogY29yZUZyYW1lKQor
eworICAgIGlmICghY29yZUZyYW1lKQorICAgICAgICByZXR1cm4gMDsKKworICAgIEFTU0VSVChj
b3JlRnJhbWUtPmxvYWRlcigpKTsKKyAgICBXZWJLaXQ6OkZyYW1lTG9hZGVyQ2xpZW50KiBjbGll
bnQgPSBzdGF0aWNfY2FzdDxXZWJLaXQ6OkZyYW1lTG9hZGVyQ2xpZW50Kj4oY29yZUZyYW1lLT5s
b2FkZXIoKS0+Y2xpZW50KCkpOworICAgIHJldHVybiBjbGllbnQgPyBjbGllbnQtPndlYkZyYW1l
KCkgOiAwOworfQorCitXZWJDb3JlOjpQYWdlKiBjb3JlKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcp
Cit7CisgICAgaWYgKCF3ZWJWaWV3KQorICAgICAgICByZXR1cm4gMDsKKworICAgIFdlYktpdFdl
YlZpZXdQcml2YXRlKiB3ZWJWaWV3RGF0YSA9IFdFQktJVF9XRUJfVklFV19HRVRfUFJJVkFURSh3
ZWJWaWV3KTsKKyAgICByZXR1cm4gd2ViVmlld0RhdGEgPyB3ZWJWaWV3RGF0YS0+Y29yZVBhZ2Ug
OiAwOworfQorCitXZWJLaXRXZWJWaWV3KiBraXQoV2ViQ29yZTo6UGFnZSogY29yZVBhZ2UpCit7
CisgICAgaWYgKCFjb3JlUGFnZSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBBU1NFUlQod2Vi
Vmlldy0+Y2hyb21lKCkpOworICAgIFdlYktpdDo6Q2hyb21lQ2xpZW50KiBjbGllbnQgPSBzdGF0
aWNfY2FzdDxXZWJLaXQ6OkNocm9tZUNsaWVudCo+KGNvcmVQYWdlLT5jaHJvbWUoKS0+Y2xpZW50
KCkpOworICAgIHJldHVybiBjbGllbnQgPyBjbGllbnQtPndlYlBhZ2UoKSA6IDA7Cit9Cit9Cklu
ZGV4OiBXZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0cHJpdmF0ZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YktpdC9ndGsvV2ViVmlldy93ZWJraXRwcml2YXRlLmgJKHJldmlzaW9uIDApCisrKyBXZWJLaXQv
Z3RrL1dlYlZpZXcvd2Via2l0cHJpdmF0ZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDk2IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLiAKKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLiAKKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlLCBJbmMu
ICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZy
b20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4gCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENP
TlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBX
RUJLSVRfUFJJVkFURV9ICisjZGVmaW5lIFdFQktJVF9QUklWQVRFX0gKKworLyoKKyAqIEludGVy
bmFsIGNsYXNzLiBUaGlzIGNsYXNzIGtub3dzIHRoZSBzaGFyZWQgc2VjcmV0IG9mIFdlYktpdFdl
YkZyYW1lLAorICogV2ViS2l0TmV0d29ya1JlcXVlc3QgYW5kIFdlYktpdFdlYlZpZXcuCisgKiBU
aGV5IGFyZSB1c2luZyBXZWJDb3JlIHdoaWNoIG11c24ndCBiZSBleHBvc2VkIHRvIHRoZSBvdXRl
ciB3b3JsZC4KKyAqLworCisjaW5jbHVkZSAid2Via2l0c2V0dGluZ3MuaCIKKyNpbmNsdWRlICJ3
ZWJraXR3ZWJ2aWV3LmgiCisjaW5jbHVkZSAid2Via2l0d2ViZnJhbWUuaCIKKyNpbmNsdWRlICJ3
ZWJraXRuZXR3b3JrcmVxdWVzdC5oIgorCisjaW5jbHVkZSAiU2V0dGluZ3MuaCIKKyNpbmNsdWRl
ICJQYWdlLmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVu
dC5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKyAgICB2b2lkIGFwcGx5KFdlYktpdFNldHRpbmdz
KixXZWJDb3JlOjpTZXR0aW5ncyopOworICAgIFdlYktpdFNldHRpbmdzKiBjcmVhdGUoV2ViQ29y
ZTo6U2V0dGluZ3MqKTsKKyAgICBXZWJLaXRXZWJGcmFtZSogIGdldEZyYW1lRnJvbVZpZXcoV2Vi
S2l0V2ViVmlldyopOworICAgIFdlYktpdFdlYlZpZXcqIGdldFZpZXdGcm9tRnJhbWUoV2ViS2l0
V2ViRnJhbWUqKTsKKworICAgIFdlYkNvcmU6OkZyYW1lKiBjb3JlKFdlYktpdFdlYkZyYW1lKik7
CisgICAgV2ViS2l0V2ViRnJhbWUqIGtpdChXZWJDb3JlOjpGcmFtZSopOworICAgIFdlYkNvcmU6
OlBhZ2UqIGNvcmUoV2ViS2l0V2ViVmlldyopOworICAgIFdlYktpdFdlYlZpZXcqIGtpdChXZWJD
b3JlOjpQYWdlKik7Cit9CisKK2V4dGVybiAiQyIgeworICAgICNkZWZpbmUgV0VCS0lUX1dFQl9W
SUVXX0dFVF9QUklWQVRFKG9iaikgICAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURSgob2Jq
KSwgV0VCS0lUX1RZUEVfV0VCX1ZJRVcsIFdlYktpdFdlYlZpZXdQcml2YXRlKSkKKyAgICB0eXBl
ZGVmIHN0cnVjdCBfV2ViS2l0V2ViVmlld1ByaXZhdGUgV2ViS2l0V2ViVmlld1ByaXZhdGU7Cisg
ICAgc3RydWN0IF9XZWJLaXRXZWJWaWV3UHJpdmF0ZSB7CisgICAgICAgIFdlYkNvcmU6OlBhZ2Uq
IGNvcmVQYWdlOworICAgICAgICBXZWJDb3JlOjpTZXR0aW5ncyogc2V0dGluZ3M7CisKKyAgICAg
ICAgV2ViS2l0V2ViRnJhbWUqIG1haW5GcmFtZTsKKyAgICAgICAgV2ViQ29yZTo6U3RyaW5nIGFw
cGxpY2F0aW9uTmFtZUZvclVzZXJBZ2VudDsKKyAgICAgICAgV2ViQ29yZTo6U3RyaW5nKiB1c2Vy
QWdlbnQ7CisKKyAgICAgICAgSGFzaFNldDxHdGtXaWRnZXQqPiBjaGlsZHJlbjsKKyAgICAgICAg
Ym9vbCBlZGl0YWJsZTsKKyAgICB9OworCisgICAgI2RlZmluZSBXRUJLSVRfV0VCX0ZSQU1FX0dF
VF9QUklWQVRFKG9iaikgICAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURSgob2JqKSwgV0VC
S0lUX1RZUEVfV0VCX0ZSQU1FLCBXZWJLaXRXZWJGcmFtZVByaXZhdGUpKQorICAgIHR5cGVkZWYg
c3RydWN0IF9XZWJLaXRXZWJGcmFtZVByaXZhdGUgV2ViS2l0V2ViRnJhbWVQcml2YXRlOworICAg
IHN0cnVjdCBfV2ViS2l0V2ViRnJhbWVQcml2YXRlIHsKKyAgICAgICAgV2ViQ29yZTo6RnJhbWUq
IGZyYW1lOworICAgICAgICBXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudCogY2xpZW50OworICAg
ICAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3OworCisgICAgICAgIGdjaGFyKiBuYW1lOworICAg
ICAgICBnY2hhciogdGl0bGU7CisgICAgICAgIGdjaGFyKiBsb2NhdGlvbjsKKyAgICB9OworCisg
ICAgI2RlZmluZSBXRUJLSVRfTkVUV09SS19SRVFVRVNUX0dFVF9QUklWQVRFKG9iaikgICAgKEdf
VFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURSgob2JqKSwgV0VCS0lUX1RZUEVfTkVUV09SS19SRVFV
RVNULCBXZWJLaXROZXR3b3JrUmVxdWVzdFByaXZhdGUpKQorICAgIHR5cGVkZWYgc3RydWN0IF9X
ZWJLaXROZXR3b3JrUmVxdWVzdFByaXZhdGUgV2ViS2l0TmV0d29ya1JlcXVlc3RQcml2YXRlOwor
ICAgIHN0cnVjdCBfV2ViS2l0TmV0d29ya1JlcXVlc3RQcml2YXRlIHsKKyAgICAgICAgZ2NoYXIq
IHVyaTsKKyAgICB9OworCisgICAgV2ViS2l0V2ViRnJhbWUqIHdlYmtpdF93ZWJfZnJhbWVfaW5p
dF93aXRoX3dlYl92aWV3KFdlYktpdFdlYlZpZXcqLCBXZWJDb3JlOjpIVE1MRnJhbWVPd25lckVs
ZW1lbnQqKTsKK30KKworI2VuZGlmCkluZGV4OiBXZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0c2V0
dGluZ3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9ndGsvV2ViVmlldy93ZWJraXRzZXR0aW5n
cy5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0c2V0dGluZ3Mu
Y3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDczIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA3IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyAqIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKKyAqIDMu
ICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVz
IG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAi
d2Via2l0c2V0dGluZ3MuaCIKKworZXh0ZXJuICJDIiB7CitHVHlwZSB3ZWJraXRfd2ViX3NldHRp
bmdzX2dldF90eXBlKHZvaWQpCit7CisgICAgcmV0dXJuIEdUeXBlKCk7Cit9CisKK1dlYktpdFNl
dHRpbmdzKiB3ZWJraXRfd2ViX3NldHRpbmdzX2NvcHkoV2ViS2l0U2V0dGluZ3MqIHNldHRpbmcp
Cit7CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgd2Via2l0X3dlYl9zZXR0aW5nc19mcmVlKFdl
YktpdFNldHRpbmdzKiBzZXR0aW5nKQoreworfQorCitXZWJLaXRTZXR0aW5ncyogd2Via2l0X3dl
Yl9zZXR0aW5nc19nZXRfZ2xvYmFsKHZvaWQpCit7CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQg
d2Via2l0X3dlYl9zZXR0aW5nc19zZXRfZ2xvYmFsIChXZWJLaXRTZXR0aW5ncyogc2V0dGluZykK
K3sKK30KKwordm9pZCB3ZWJraXRfd2ViX3NldHRpbmdzX3NldF9mb250X2ZhbWlseShXZWJLaXRT
ZXR0aW5ncyosIFdlYktpdEZvbnRGYW1pbHkgZmFtaWx5LCBnY2hhciogZmFtaWx5X25hbWUpCit7
Cit9CisKK2NvbnN0IGdjaGFyKiB3ZWJraXRfd2ViX3NldHRpbmdzX2dldF9mb250X2ZhbWlseShX
ZWJLaXRTZXR0aW5ncyosIFdlYktpdEZvbnRGYW1pbHkgZmFtaWx5KQoreworICAgIHJldHVybiAw
OworfQorCit2b2lkIHdlYmtpdF93ZWJfc2V0dGluZ3Nfc2V0X3VzZXJfc3R5bGVfc2hlZXRfbG9j
YXRpb24oV2ViS2l0U2V0dGluZ3MqLCBnY2hhciopCit7Cit9CisKK3ZvaWQgd2Via2l0X3NldF9m
dHBfZGlyZWN0b3J5X3RlbXBsYXRlX3BhdGgoV2ViS2l0U2V0dGluZ3MqLCBnY2hhciopCit7Cit9
Cit9CkluZGV4OiBXZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0c2V0dGluZ3MuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0c2V0dGluZ3MuaAkocmV2aXNpb24gMCkKKysr
IFdlYktpdC9ndGsvV2ViVmlldy93ZWJraXRzZXR0aW5ncy5oCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDExNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBG
cmV5dGhlcgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoK
KyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBB
cHBsZSwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQK
KyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uIAorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
QU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
CisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpZm5kZWYgV0VCS0lUX1NFVFRJTkdTX0gKKyNkZWZpbmUgV0VCS0lUX1NFVFRJTkdTX0gKKwor
I2luY2x1ZGUgPGdsaWIuaD4KKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorCisjaW5jbHVkZSAi
d2Via2l0ZGVmaW5lcy5oIgorCitHX0JFR0lOX0RFQ0xTCisKK3R5cGVkZWYgZW51bSB7CisgICAg
V0VCS0lUX0ZPTlRfRkFNSUxZX1NUQU5EQVJELAorICAgIFdFQktJVF9GT05UX0ZBTUlMWV9GSVhF
RCwKKyAgICBXRUJLSVRfRk9OVF9GQU1JTFlfU0VSSUYsCisgICAgV0VCS0lUX0ZPTlRfRkFNSUxZ
X1NBTlNfU0VSSUYsCisgICAgV0VCS0lUX0ZPTlRfRkFNSUxZX0NVUlNJVkUsCisgICAgV0VCS0lU
X0ZPTlRfRkFNSUxZX0ZBTlRBU1ksCisgICAgV0VCS0lUX0ZPTlRfRkFNSUxZX0xBU1RfRU5UUlkK
K30gV2ViS2l0Rm9udEZhbWlseTsKKwordHlwZWRlZiBlbnVtIHsKKyAgICBXRUJLSVRfRURJVEFC
TEVfTElOS19ERUZBVUxUX0JFSEFWSU9VUiwKKyAgICBXRUJLSVRfRURJVEFCTEVfTElOS19BTFdB
WVNfTElWRSwKKyAgICBXRUJLSVRfRURJVEFCTEVfTElOS19PTkxZX1dJVEhfU0hJRlRfS0VZLAor
ICAgIFdFQktJVF9FRElUQUJMRV9MSU5LX0xJVkVfV0hFTl9OT1RfRk9DVVNFRCwKKyAgICBXRUJL
SVRfRURJVEFCTEVfTElOS19ORVZFUl9MSVZFCit9IFdlYktpdEVkaXRhYmxlTGlua0JlaGF2aW91
cjsKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFNldHRpbmdzIFdlYktpdFNldHRpbmdzOwordHlw
ZWRlZiBzdHJ1Y3QgX1dlYktpdFNldHRpbmdzUHJpdmF0ZSBXZWJLaXRTZXR0aW5nc1ByaXZhdGU7
CisKK3N0cnVjdCBfV2ViS2l0U2V0dGluZ3MgeworICAgIGdjaGFyKiBmb250X25hbWVbV0VCS0lU
X0ZPTlRfRkFNSUxZX0xBU1RfRU5UUlldOworICAgIGdpbnQgICBtaW5pbXVtX2ZvbnRfc2l6ZTsK
KyAgICBnaW50ICAgbWluaW11bV9sb2dpY2FsX2ZvbnRfc2l6ZTsKKyAgICBnaW50ICAgZGVmYXVs
dF9mb250X3NpemU7CisgICAgZ2ludCAgIGRlZmF1bHRfZml4ZWRfZm9udF9zaXplOworICAgIGdi
b29sZWFuIGxvYWRfaW1hZ2VzX2F1dG9tYXRpY2FsbHk7CisgICAgZ2Jvb2xlYW4gaXNfamF2YV9z
Y3JpcHRfZW5hYmxlZDsKKyAgICBnYm9vbGVhbiBqYXZhX3NjcmlwdF9jYW5fb3Blbl93aW5kb3dz
X2F1dG9tYXRpY2FsbHk7CisgICAgZ2Jvb2xlYW4gcGx1Z2luc19lbmFibGVkOworICAgIGdib29s
ZWFuIHByaXZhdGVfYnJvd3Npbmc7CisgICAgZ2NoYXIqIHVzZXJfc3R5bGVfc2hlZXRfbG9jYXRp
b247CisgICAgZ2Jvb2xlYW4gc2hvdWxkX3ByaW50X2JhY2tncm91bmRzOworICAgIGdib29sZWFu
IHRleHRfYXJlYXNfYXJlX3Jlc2l6YWJsZTsKKyAgICBXZWJLaXRFZGl0YWJsZUxpbmtCZWhhdmlv
dXIgZWRpdGFibGVfbGlua19iZWhhdmlvdXI7CisgICAgZ2Jvb2xlYW4gdXNlc193ZWJfdmlld19j
YWNoZTsKKyAgICBnYm9vbGVhbiBzaHJpbmtfc3RhbmRhbG9uZV9pbWFnZXNfdG9fZml0OworICAg
IGdib29sZWFuIHNob3dfdXJpc19pbl90b29sX3RpcHM7CisgICAgZ2NoYXIqIGZ0cF9kaXJlY3Rv
cnlfdGVtcGxhdGVfcGF0aDsKKyAgICBnYm9vbGVhbiBmb3JjZV9mdHBfZGlyZWN0b3J5X2xpc3Rp
bmdzOworICAgIGdib29sZWFuIGRldmVsb3Blcl9leHRyYXNfZW5hYmxlZDsKKworCisgICAgV2Vi
S2l0U2V0dGluZ3NQcml2YXRlICpwcml2YXRlX2RhdGE7Cit9OworCitHVHlwZQord2Via2l0X3dl
Yl9zZXR0aW5nc19nZXRfdHlwZSAodm9pZCk7CisKK1dlYktpdFNldHRpbmdzKgord2Via2l0X3dl
Yl9zZXR0aW5nc19jb3B5IChXZWJLaXRTZXR0aW5ncyogc2V0dGluZyk7CisKK3ZvaWQKK3dlYmtp
dF93ZWJfc2V0dGluZ3NfZnJlZSAoV2ViS2l0U2V0dGluZ3MqIHNldHRpbmcpOworCitXZWJLaXRT
ZXR0aW5ncyoKK3dlYmtpdF93ZWJfc2V0dGluZ3NfZ2V0X2dsb2JhbCAodm9pZCk7CisKK3ZvaWQK
K3dlYmtpdF93ZWJfc2V0dGluZ3Nfc2V0X2dsb2JhbCAoV2ViS2l0U2V0dGluZ3MqIHNldHRpbmcp
OworCit2b2lkCit3ZWJraXRfd2ViX3NldHRpbmdzX3NldF9mb250X2ZhbWlseShXZWJLaXRTZXR0
aW5ncyosIFdlYktpdEZvbnRGYW1pbHkgZmFtaWx5LCBnY2hhciAqZmFtaWx5X25hbWUpOworCitj
b25zdCBnY2hhcioKK3dlYmtpdF93ZWJfc2V0dGluZ3NfZ2V0X2ZvbnRfZmFtaWx5KFdlYktpdFNl
dHRpbmdzKiwgV2ViS2l0Rm9udEZhbWlseSBmYW1pbHkpOworCit2b2lkCit3ZWJraXRfd2ViX3Nl
dHRpbmdzX3NldF91c2VyX3N0eWxlX3NoZWV0X2xvY2F0aW9uKFdlYktpdFNldHRpbmdzKiwgZ2No
YXIqKTsKKwordm9pZAord2Via2l0X3NldF9mdHBfZGlyZWN0b3J5X3RlbXBsYXRlX3BhdGgoV2Vi
S2l0U2V0dGluZ3MqLCBnY2hhciopOworCisKK0dfRU5EX0RFQ0xTCisKKworI2VuZGlmCkluZGV4
OiBXZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0d2ViZnJhbWUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YktpdC9ndGsvV2ViVmlldy93ZWJraXR3ZWJmcmFtZS5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJL
aXQvZ3RrL1dlYlZpZXcvd2Via2l0d2ViZnJhbWUuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDM4OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5
dGhlcgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFscCBUb2tlciA8YWxwQGF0b2tlci5jb20+Cisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLiAKKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLiAKKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlLCBJbmMu
ICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZy
b20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4gCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENP
TlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIndlYmtpdHdlYmZyYW1lLmgiCisjaW5jbHVkZSAid2Via2l0
d2Vidmlldy5oIgorI2luY2x1ZGUgIndlYmtpdHByaXZhdGUuaCIKKworI2luY2x1ZGUgIkNTdHJp
bmcuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xp
ZW50R3RrLmgiCisjaW5jbHVkZSAiRnJhbWVUcmVlLmgiCisjaW5jbHVkZSAiRnJhbWVWaWV3Lmgi
CisjaW5jbHVkZSAiSFRNTEZyYW1lT3duZXJFbGVtZW50LmgiCisjaW5jbHVkZSAia2pzX2JpbmRp
bmcuaCIKKyNpbmNsdWRlICJranNfcHJveHkuaCIKKyNpbmNsdWRlICJranNfd2luZG93LmgiCisK
KyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9BUElDYXN0Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBX
ZWJLaXQ7Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworZXh0ZXJuICJDIiB7CisKK2V4dGVy
biB2b2lkIHdlYmtpdF9tYXJzaGFsX1ZPSURfX1NUUklOR19TVFJJTkcgKEdDbG9zdXJlKiAgICAg
Y2xvc3VyZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdWYWx1ZSogICAgICAgcmV0dXJuX3ZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZ3VpbnQgICAgICAgICBuX3BhcmFtX3ZhbHVlcywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdWYWx1ZSog
cGFyYW1fdmFsdWVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZ3BvaW50ZXIgICAgICBpbnZvY2F0aW9uX2hpbnQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncG9pbnRlciAgICAgIG1hcnNoYWxfZGF0YSk7
CisKK2VudW0geworICAgIENMRUFSRUQsCisgICAgTE9BRF9ET05FLAorICAgIFRJVExFX0NIQU5H
RUQsCisgICAgSE9WRVJJTkdfT1ZFUl9MSU5LLAorICAgIExBU1RfU0lHTkFMCit9OworCitzdGF0
aWMgZ3VpbnQgd2Via2l0X3dlYl9mcmFtZV9zaWduYWxzW0xBU1RfU0lHTkFMXSA9IHsgMCwgfTsK
Kworc3RhdGljIHZvaWQgd2Via2l0X3dlYl9mcmFtZV9yZWFsX3RpdGxlX2NoYW5nZWQoV2ViS2l0
V2ViRnJhbWUqIGZyYW1lLCBnY2hhciogdGl0bGUsIGdjaGFyKiBsb2NhdGlvbik7CisKK0dfREVG
SU5FX1RZUEUoV2ViS2l0V2ViRnJhbWUsIHdlYmtpdF93ZWJfZnJhbWUsIEdfVFlQRV9PQkpFQ1Qp
CisKK3N0YXRpYyB2b2lkIHdlYmtpdF93ZWJfZnJhbWVfZmluYWxpemUoR09iamVjdCogb2JqZWN0
KQoreworICAgIFdlYktpdFdlYkZyYW1lUHJpdmF0ZSogcHJpdmF0ZURhdGEgPSBXRUJLSVRfV0VC
X0ZSQU1FX0dFVF9QUklWQVRFKFdFQktJVF9XRUJfRlJBTUUob2JqZWN0KSk7CisgICAgcHJpdmF0
ZURhdGEtPmZyYW1lLT5sb2FkZXIoKS0+Y2FuY2VsQW5kQ2xlYXIoKTsKKyAgICBnX2ZyZWUocHJp
dmF0ZURhdGEtPm5hbWUpOworICAgIGdfZnJlZShwcml2YXRlRGF0YS0+dGl0bGUpOworICAgIGdf
ZnJlZShwcml2YXRlRGF0YS0+bG9jYXRpb24pOworICAgIGRlbGV0ZSBwcml2YXRlRGF0YS0+ZnJh
bWU7CisKKyAgICBHX09CSkVDVF9DTEFTUyh3ZWJraXRfd2ViX2ZyYW1lX3BhcmVudF9jbGFzcykt
PmZpbmFsaXplKG9iamVjdCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF93ZWJfZnJhbWVfY2xh
c3NfaW5pdChXZWJLaXRXZWJGcmFtZUNsYXNzKiBmcmFtZUNsYXNzKQoreworICAgIGdfdHlwZV9j
bGFzc19hZGRfcHJpdmF0ZShmcmFtZUNsYXNzLCBzaXplb2YoV2ViS2l0V2ViRnJhbWVQcml2YXRl
KSk7CisKKyAgICAvKgorICAgICAqIHNpZ25hbHMKKyAgICAgKi8KKyAgICB3ZWJraXRfd2ViX2Zy
YW1lX3NpZ25hbHNbQ0xFQVJFRF0gPSBnX3NpZ25hbF9uZXcoImNsZWFyZWQiLAorICAgICAgICAg
ICAgR19UWVBFX0ZST01fQ0xBU1MoZnJhbWVDbGFzcyksCisgICAgICAgICAgICAoR1NpZ25hbEZs
YWdzKShHX1NJR05BTF9SVU5fTEFTVCB8IEdfU0lHTkFMX0FDVElPTiksCisgICAgICAgICAgICAw
LAorICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICBnX2Nj
bG9zdXJlX21hcnNoYWxfVk9JRF9fVk9JRCwKKyAgICAgICAgICAgIEdfVFlQRV9OT05FLCAwKTsK
KworICAgIHdlYmtpdF93ZWJfZnJhbWVfc2lnbmFsc1tMT0FEX0RPTkVdID0gZ19zaWduYWxfbmV3
KCJsb2FkX2RvbmUiLAorICAgICAgICAgICAgR19UWVBFX0ZST01fQ0xBU1MoZnJhbWVDbGFzcyks
CisgICAgICAgICAgICAoR1NpZ25hbEZsYWdzKShHX1NJR05BTF9SVU5fTEFTVCB8IEdfU0lHTkFM
X0FDVElPTiksCisgICAgICAgICAgICAwLAorICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAg
IE5VTEwsCisgICAgICAgICAgICBnX2NjbG9zdXJlX21hcnNoYWxfVk9JRF9fQk9PTEVBTiwKKyAg
ICAgICAgICAgIEdfVFlQRV9OT05FLCAxLAorICAgICAgICAgICAgR19UWVBFX0JPT0xFQU4pOwor
CisgICAgd2Via2l0X3dlYl9mcmFtZV9zaWduYWxzW1RJVExFX0NIQU5HRURdID0gZ19zaWduYWxf
bmV3KCJ0aXRsZV9jaGFuZ2VkIiwKKyAgICAgICAgICAgIEdfVFlQRV9GUk9NX0NMQVNTKGZyYW1l
Q2xhc3MpLAorICAgICAgICAgICAgKEdTaWduYWxGbGFncykoR19TSUdOQUxfUlVOX0xBU1QgfCBH
X1NJR05BTF9BQ1RJT04pLAorICAgICAgICAgICAgR19TVFJVQ1RfT0ZGU0VUKFdlYktpdFdlYkZy
YW1lQ2xhc3MsIHRpdGxlX2NoYW5nZWQpLAorICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAg
IE5VTEwsCisgICAgICAgICAgICB3ZWJraXRfbWFyc2hhbF9WT0lEX19TVFJJTkdfU1RSSU5HLAor
ICAgICAgICAgICAgR19UWVBFX05PTkUsIDIsCisgICAgICAgICAgICBHX1RZUEVfU1RSSU5HLCBH
X1RZUEVfU1RSSU5HKTsKKworICAgIHdlYmtpdF93ZWJfZnJhbWVfc2lnbmFsc1tIT1ZFUklOR19P
VkVSX0xJTktdID0gZ19zaWduYWxfbmV3KCJob3ZlcmluZ19vdmVyX2xpbmsiLAorICAgICAgICAg
ICAgR19UWVBFX0ZST01fQ0xBU1MoZnJhbWVDbGFzcyksCisgICAgICAgICAgICAoR1NpZ25hbEZs
YWdzKShHX1NJR05BTF9SVU5fTEFTVCB8IEdfU0lHTkFMX0FDVElPTiksCisgICAgICAgICAgICAw
LAorICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICB3ZWJr
aXRfbWFyc2hhbF9WT0lEX19TVFJJTkdfU1RSSU5HLAorICAgICAgICAgICAgR19UWVBFX05PTkUs
IDIsCisgICAgICAgICAgICBHX1RZUEVfU1RSSU5HLCBHX1RZUEVfU1RSSU5HKTsKKworICAgIGZy
YW1lQ2xhc3MtPnRpdGxlX2NoYW5nZWQgPSB3ZWJraXRfd2ViX2ZyYW1lX3JlYWxfdGl0bGVfY2hh
bmdlZDsKKworICAgIC8qCisgICAgICogaW1wbGVtZW50YXRpb25zIG9mIHZpcnR1YWwgbWV0aG9k
cworICAgICAqLworICAgIEdfT0JKRUNUX0NMQVNTKGZyYW1lQ2xhc3MpLT5maW5hbGl6ZSA9IHdl
YmtpdF93ZWJfZnJhbWVfZmluYWxpemU7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF93ZWJfZnJh
bWVfcmVhbF90aXRsZV9jaGFuZ2VkKFdlYktpdFdlYkZyYW1lKiBmcmFtZSwgZ2NoYXIqIHRpdGxl
LCBnY2hhciogbG9jYXRpb24pCit7CisgICAgV2ViS2l0V2ViRnJhbWVQcml2YXRlKiBmcmFtZURh
dGEgPSBXRUJLSVRfV0VCX0ZSQU1FX0dFVF9QUklWQVRFKGZyYW1lKTsKKyAgICBnX2ZyZWUoZnJh
bWVEYXRhLT50aXRsZSk7CisgICAgZ19mcmVlKGZyYW1lRGF0YS0+bG9jYXRpb24pOworICAgIGZy
YW1lRGF0YS0+dGl0bGUgPSBnX3N0cmR1cCh0aXRsZSk7CisgICAgZnJhbWVEYXRhLT5sb2NhdGlv
biA9IGdfc3RyZHVwKGxvY2F0aW9uKTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X3dlYl9mcmFt
ZV9pbml0KFdlYktpdFdlYkZyYW1lKiBmcmFtZSkKK3sKKyAgICAvLyBUT0RPOiBNb3ZlIGNvbnN0
cnVjdG9yIGNvZGUgaGVyZS4KK30KKworLyoqCisgKiB3ZWJraXRfd2ViX2ZyYW1lX25ldzoKKyAq
IEB3ZWJWaWV3OiB0aGUgY29udHJvbGxpbmcgI1dlYktpdFdlYlZpZXcKKyAqCisgKiBDcmVhdGVz
IGEgbmV3ICNXZWJLaXRXZWJGcmFtZSBpbml0aWFsaXplZCB3aXRoIGEgY29udHJvbGxpbmcgI1dl
YktpdFdlYlZpZXcuCisgKgorICogUmV0dXJuczogYSBuZXcgI1dlYktpdFdlYkZyYW1lCisgKiov
CitXZWJLaXRXZWJGcmFtZSogd2Via2l0X3dlYl9mcmFtZV9uZXcoV2ViS2l0V2ViVmlldyogd2Vi
VmlldykKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfV0VCX1ZJRVcod2Vi
VmlldyksIE5VTEwpOworCisgICAgV2ViS2l0V2ViRnJhbWUqIGZyYW1lID0gV0VCS0lUX1dFQl9G
UkFNRShnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfV0VCX0ZSQU1FLCBOVUxMKSk7CisgICAgV2Vi
S2l0V2ViRnJhbWVQcml2YXRlKiBmcmFtZURhdGEgPSBXRUJLSVRfV0VCX0ZSQU1FX0dFVF9QUklW
QVRFKGZyYW1lKTsKKyAgICBXZWJLaXRXZWJWaWV3UHJpdmF0ZSogd2ViVmlld0RhdGEgPSBXRUJL
SVRfV0VCX1ZJRVdfR0VUX1BSSVZBVEUod2ViVmlldyk7CisKKyAgICBmcmFtZURhdGEtPmNsaWVu
dCA9IG5ldyBXZWJLaXQ6OkZyYW1lTG9hZGVyQ2xpZW50KGZyYW1lKTsKKyAgICBmcmFtZURhdGEt
PmZyYW1lID0gbmV3IEZyYW1lKHdlYlZpZXdEYXRhLT5jb3JlUGFnZSwgMCwgZnJhbWVEYXRhLT5j
bGllbnQpOworCisgICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBuZXcgRnJhbWVWaWV3KGZyYW1l
RGF0YS0+ZnJhbWUpOworICAgIGZyYW1lVmlldy0+c2V0Q29udGFpbmluZ1dpbmRvdyhHVEtfQ09O
VEFJTkVSKHdlYlZpZXcpKTsKKyAgICBmcmFtZVZpZXctPnNldEd0a0FkanVzdG1lbnRzKEdUS19B
REpVU1RNRU5UKGd0a19hZGp1c3RtZW50X25ldygwLjAsIDAuMCwgMC4wLCAwLjAsIDAuMCwgMC4w
KSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHVEtfQURKVVNUTUVOVChndGtf
YWRqdXN0bWVudF9uZXcoMC4wLCAwLjAsIDAuMCwgMC4wLCAwLjAsIDAuMCkpKTsKKyAgICBmcmFt
ZURhdGEtPmZyYW1lLT5zZXRWaWV3KGZyYW1lVmlldyk7CisgICAgZnJhbWVEYXRhLT5mcmFtZS0+
aW5pdCgpOworICAgIGZyYW1lRGF0YS0+d2ViVmlldyA9IHdlYlZpZXc7CisgICAgZnJhbWVEYXRh
LT5uYW1lID0gMDsKKyAgICBmcmFtZURhdGEtPnRpdGxlID0gMDsKKyAgICBmcmFtZURhdGEtPmxv
Y2F0aW9uID0gMDsKKworICAgIHJldHVybiBmcmFtZTsKK30KKworV2ViS2l0V2ViRnJhbWUqIHdl
YmtpdF93ZWJfZnJhbWVfaW5pdF93aXRoX3dlYl92aWV3KFdlYktpdFdlYlZpZXcqIHdlYlZpZXcs
IEhUTUxGcmFtZU93bmVyRWxlbWVudCogZWxlbWVudCkKK3sKKyAgICBXZWJLaXRXZWJGcmFtZSog
ZnJhbWUgPSBXRUJLSVRfV0VCX0ZSQU1FKGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9XRUJfRlJB
TUUsIE5VTEwpKTsKKyAgICBXZWJLaXRXZWJGcmFtZVByaXZhdGUqIGZyYW1lRGF0YSA9IFdFQktJ
VF9XRUJfRlJBTUVfR0VUX1BSSVZBVEUoZnJhbWUpOworICAgIFdlYktpdFdlYlZpZXdQcml2YXRl
KiB3ZWJWaWV3RGF0YSA9IFdFQktJVF9XRUJfVklFV19HRVRfUFJJVkFURSh3ZWJWaWV3KTsKKwor
ICAgIGZyYW1lRGF0YS0+Y2xpZW50ID0gbmV3IFdlYktpdDo6RnJhbWVMb2FkZXJDbGllbnQoZnJh
bWUpOworICAgIGZyYW1lRGF0YS0+ZnJhbWUgPSBuZXcgRnJhbWUod2ViVmlld0RhdGEtPmNvcmVQ
YWdlLCBlbGVtZW50LCBmcmFtZURhdGEtPmNsaWVudCk7CisKKyAgICBGcmFtZVZpZXcqIGZyYW1l
VmlldyA9IG5ldyBGcmFtZVZpZXcoZnJhbWVEYXRhLT5mcmFtZSk7CisgICAgZnJhbWVWaWV3LT5z
ZXRDb250YWluaW5nV2luZG93KEdUS19DT05UQUlORVIod2ViVmlldykpOworICAgIGZyYW1lRGF0
YS0+ZnJhbWUtPnNldFZpZXcoZnJhbWVWaWV3KTsKKyAgICBmcmFtZVZpZXctPmRlcmVmKCk7Cisg
ICAgZnJhbWVEYXRhLT5mcmFtZS0+aW5pdCgpOworICAgIGZyYW1lRGF0YS0+d2ViVmlldyA9IHdl
YlZpZXc7CisKKyAgICByZXR1cm4gZnJhbWU7Cit9CisKK2NvbnN0IGdjaGFyKiB3ZWJraXRfd2Vi
X2ZyYW1lX2dldF90aXRsZShXZWJLaXRXZWJGcmFtZSogZnJhbWUpCit7CisgICAgZ19yZXR1cm5f
dmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9GUkFNRShmcmFtZSksIE5VTEwpOworCisgICAgV2Vi
S2l0V2ViRnJhbWVQcml2YXRlKiBmcmFtZURhdGEgPSBXRUJLSVRfV0VCX0ZSQU1FX0dFVF9QUklW
QVRFKGZyYW1lKTsKKyAgICByZXR1cm4gZnJhbWVEYXRhLT50aXRsZTsKK30KKworY29uc3QgZ2No
YXIqIHdlYmtpdF93ZWJfZnJhbWVfZ2V0X2xvY2F0aW9uKFdlYktpdFdlYkZyYW1lKiBmcmFtZSkK
K3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfV0VCX0ZSQU1FKGZyYW1lKSwg
TlVMTCk7CisKKyAgICBXZWJLaXRXZWJGcmFtZVByaXZhdGUqIGZyYW1lRGF0YSA9IFdFQktJVF9X
RUJfRlJBTUVfR0VUX1BSSVZBVEUoZnJhbWUpOworICAgIHJldHVybiBmcmFtZURhdGEtPmxvY2F0
aW9uOworfQorCisvKioKKyAqIHdlYmtpdF93ZWJfZnJhbWVfZ2V0X3dlYl92aWV3OgorICogQGZy
YW1lOiBhICNXZWJLaXRXZWJGcmFtZQorICoKKyAqIFJldHVybnMgdGhlICNXZWJLaXRXZWJWaWV3
IHRoYXQgbWFuYWdlcyB0aGlzICNXZWJLaXRXZWJGcmFtZS4KKyAqCisgKiBUaGUgI1dlYktpdFdl
YlZpZXcgcmV0dXJuZWQgbWFuYWdlcyB0aGUgZW50aXJlIGhpZXJhcmNoeSBvZiAjV2ViS2l0V2Vi
RnJhbWUKKyAqIG9iamVjdHMgdGhhdCBjb250YWlucyBAZnJhbWUuCisgKgorICogUmV0dXJuIHZh
bHVlOiB0aGUgI1dlYktpdFdlYlZpZXcgdGhhdCBtYW5hZ2VzIEBmcmFtZQorICovCitXZWJLaXRX
ZWJWaWV3KiB3ZWJraXRfd2ViX2ZyYW1lX2dldF93ZWJfdmlldyhXZWJLaXRXZWJGcmFtZSogZnJh
bWUpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9GUkFNRShmcmFt
ZSksIE5VTEwpOworCisgICAgV2ViS2l0V2ViRnJhbWVQcml2YXRlKiBmcmFtZURhdGEgPSBXRUJL
SVRfV0VCX0ZSQU1FX0dFVF9QUklWQVRFKGZyYW1lKTsKKyAgICByZXR1cm4gZnJhbWVEYXRhLT53
ZWJWaWV3OworfQorCisvKioKKyAqIHdlYmtpdF93ZWJfZnJhbWVfZ2V0X25hbWU6CisgKiBAZnJh
bWU6IGEgI1dlYktpdFdlYkZyYW1lCisgKgorICogUmV0dXJucyB0aGUgQGZyYW1lJ3MgbmFtZQor
ICoKKyAqIFJldHVybiB2YWx1ZTogdGhlIG5hbWUgb2YgQGZyYW1lCisgKi8KK2NvbnN0IGdjaGFy
KiB3ZWJraXRfd2ViX2ZyYW1lX2dldF9uYW1lKFdlYktpdFdlYkZyYW1lKiBmcmFtZSkKK3sKKyAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfV0VCX0ZSQU1FKGZyYW1lKSwgTlVMTCk7
CisKKyAgICBXZWJLaXRXZWJGcmFtZVByaXZhdGUqIGZyYW1lRGF0YSA9IFdFQktJVF9XRUJfRlJB
TUVfR0VUX1BSSVZBVEUoZnJhbWUpOworCisgICAgaWYgKGZyYW1lRGF0YS0+bmFtZSkKKyAgICAg
ICAgcmV0dXJuIGZyYW1lRGF0YS0+bmFtZTsKKworICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3Jl
KGZyYW1lKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChjb3JlRnJhbWUsIE5VTEwpOworCisg
ICAgU3RyaW5nIHN0cmluZyA9IGNvcmVGcmFtZS0+dHJlZSgpLT5uYW1lKCk7CisgICAgZnJhbWVE
YXRhLT5uYW1lID0gZ19zdHJkdXAoc3RyaW5nLnV0ZjgoKS5kYXRhKCkpOworCisgICAgcmV0dXJu
IGZyYW1lRGF0YS0+bmFtZTsKK30KKworLyoqCisgKiB3ZWJraXRfd2ViX2ZyYW1lX2dldF9wYXJl
bnQ6CisgKiBAZnJhbWU6IGEgI1dlYktpdFdlYkZyYW1lCisgKgorICogUmV0dXJucyB0aGUgQGZy
YW1lJ3MgcGFyZW50IGZyYW1lLCBvciAlTlVMTCBpZiBpdCBoYXMgbm9uZS4KKyAqCisgKiBSZXR1
cm4gdmFsdWU6IHRoZSBwYXJlbnQgI1dlYktpdFdlYkZyYW1lIG9yICVOVUxMIGluIGNhc2UgdGhl
cmUgaXMgbm9uZQorICovCitXZWJLaXRXZWJGcmFtZSogd2Via2l0X3dlYl9mcmFtZV9nZXRfcGFy
ZW50KFdlYktpdFdlYkZyYW1lKiBmcmFtZSkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChX
RUJLSVRfSVNfV0VCX0ZSQU1FKGZyYW1lKSwgTlVMTCk7CisKKyAgICBGcmFtZSogY29yZUZyYW1l
ID0gY29yZShmcmFtZSk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoY29yZUZyYW1lLCBOVUxM
KTsKKworICAgIHJldHVybiBraXQoY29yZUZyYW1lLT50cmVlKCktPnBhcmVudCgpKTsKK30KKwor
LyoqCisgKiB3ZWJraXRfd2ViX2ZyYW1lX2xvYWRfcmVxdWVzdDoKKyAqIEBmcmFtZTogYSAjV2Vi
S2l0V2ViRnJhbWUKKyAqIEByZXF1ZXN0OiBhICNXZWJLaXROZXR3b3JrUmVxdWVzdAorICoKKyAq
IENvbm5lY3RzIHRvIGEgZ2l2ZW4gVVJJIGJ5IGluaXRpYXRpbmcgYW4gYXN5bmNocm9ub3VzIGNs
aWVudCByZXF1ZXN0LgorICoKKyAqIENyZWF0ZXMgYSBwcm92aXNpb25hbCBkYXRhIHNvdXJjZSB0
aGF0IHdpbGwgdHJhbnNpdGlvbiB0byBhIGNvbW1pdHRlZCBkYXRhCisgKiBzb3VyY2Ugb25jZSBh
bnkgZGF0YSBoYXMgYmVlbiByZWNlaXZlZC4gVXNlIHdlYmtpdF93ZWJfZnJhbWVfc3RvcF9sb2Fk
aW5nKCkgdG8KKyAqIHN0b3AgdGhlIGxvYWQuIFRoaXMgZnVuY3Rpb24gaXMgdHlwaWNhbGx5IGlu
dm9rZWQgb24gdGhlIG1haW4gZnJhbWUuCisgKi8KK3ZvaWQgd2Via2l0X3dlYl9mcmFtZV9sb2Fk
X3JlcXVlc3QoV2ViS2l0V2ViRnJhbWUqIGZyYW1lLCBXZWJLaXROZXR3b3JrUmVxdWVzdCogcmVx
dWVzdCkKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19XRUJfRlJBTUUoZnJhbWUp
KTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19ORVRXT1JLX1JFUVVFU1QocmVxdWVz
dCkpOworCisgICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoZnJhbWUpOworICAgIGdfcmV0dXJu
X2lmX2ZhaWwoY29yZUZyYW1lKTsKKworICAgIC8vIFRPRE86IFVzZSB0aGUgUmVzb3VyY2VSZXF1
ZXN0IGNhcnJpZWQgYnkgV2ViS2l0TmV0d29ya1JlcXVlc3Qgd2hlbiBpdCBnZXRzIGltcGxlbWVu
dGVkLgorICAgIERlcHJlY2F0ZWRTdHJpbmcgc3RyaW5nID0gRGVwcmVjYXRlZFN0cmluZzo6ZnJv
bVV0Zjgod2Via2l0X25ldHdvcmtfcmVxdWVzdF9nZXRfdXJpKHJlcXVlc3QpKTsKKyAgICBjb3Jl
RnJhbWUtPmxvYWRlcigpLT5sb2FkKFJlc291cmNlUmVxdWVzdChLVVJMKHN0cmluZykpKTsKK30K
KworLyoqCisgKiB3ZWJraXRfd2ViX2ZyYW1lX3N0b3BfbG9hZGluZzoKKyAqIEBmcmFtZTogYSAj
V2ViS2l0V2ViRnJhbWUKKyAqCisgKiBTdG9wcyBhbnkgcGVuZGluZyBsb2FkcyBvbiBAZnJhbWUn
cyBkYXRhIHNvdXJjZSwgYW5kIHRob3NlIG9mIGl0cyBjaGlsZHJlbi4KKyAqLwordm9pZCB3ZWJr
aXRfd2ViX2ZyYW1lX3N0b3BfbG9hZGluZyhXZWJLaXRXZWJGcmFtZSogZnJhbWUpCit7CisgICAg
Z19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfV0VCX0ZSQU1FKGZyYW1lKSk7CisKKyAgICBGcmFt
ZSogY29yZUZyYW1lID0gY29yZShmcmFtZSk7CisgICAgZ19yZXR1cm5faWZfZmFpbChjb3JlRnJh
bWUpOworCisgICAgY29yZUZyYW1lLT5sb2FkZXIoKS0+c3RvcEFsbExvYWRlcnMoKTsKK30KKwor
LyoqCisgKiB3ZWJraXRfd2ViX2ZyYW1lX3JlbG9hZDoKKyAqIEBmcmFtZTogYSAjV2ViS2l0V2Vi
RnJhbWUKKyAqCisgKiBSZWxvYWRzIHRoZSBpbml0aWFsIHJlcXVlc3QuCisgKi8KK3ZvaWQgd2Vi
a2l0X3dlYl9mcmFtZV9yZWxvYWQoV2ViS2l0V2ViRnJhbWUqIGZyYW1lKQoreworICAgIGdfcmV0
dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9GUkFNRShmcmFtZSkpOworCisgICAgRnJhbWUqIGNv
cmVGcmFtZSA9IGNvcmUoZnJhbWUpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoY29yZUZyYW1lKTsK
KworICAgIGNvcmVGcmFtZS0+bG9hZGVyKCktPnJlbG9hZCgpOworfQorCisvKioKKyAqIHdlYmtp
dF93ZWJfZnJhbWVfZmluZF9mcmFtZToKKyAqIEBmcmFtZTogYSAjV2ViS2l0V2ViRnJhbWUKKyAq
IEBuYW1lOiB0aGUgbmFtZSBvZiB0aGUgZnJhbWUgdG8gYmUgZm91bmQKKyAqCisgKiBGb3IgcHJl
LWRlZmluZWQgbmFtZXMsIHJldHVybnMgQGZyYW1lIGlmIEBuYW1lIGlzICJfc2VsZiIgb3IgIl9j
dXJyZW50IiwKKyAqIHJldHVybnMgQGZyYW1lJ3MgcGFyZW50IGZyYW1lIGlmIEBuYW1lIGlzICJf
cGFyZW50IiwgYW5kIHJldHVybnMgdGhlIG1haW4KKyAqIGZyYW1lIGlmIEBuYW1lIGlzICJfdG9w
Ii4gQWxzbyByZXR1cm5zIEBmcmFtZSBpZiBpdCBpcyB0aGUgbWFpbiBmcmFtZSBhbmQKKyAqIEBu
YW1lIGlzIGVpdGhlciAiX3BhcmVudCIgb3IgIl90b3AiLiBGb3Igb3RoZXIgbmFtZXMsIHRoaXMg
ZnVuY3Rpb24gcmV0dXJucworICogdGhlIGZpcnN0IGZyYW1lIHRoYXQgbWF0Y2hlcyBAbmFtZS4g
VGhpcyBmdW5jdGlvbiBzZWFyY2hlcyBAZnJhbWUgYW5kIGl0cworICogZGVzY2VuZGVudHMgZmly
c3QsIHRoZW4gQGZyYW1lJ3MgcGFyZW50IGFuZCBpdHMgY2hpbGRyZW4gbW92aW5nIHVwIHRoZQor
ICogaGllcmFyY2h5IHVudGlsIGEgbWF0Y2ggaXMgZm91bmQuIElmIG5vIG1hdGNoIGlzIGZvdW5k
IGluIEBmcmFtZSdzCisgKiBoaWVyYXJjaHksIHRoaXMgZnVuY3Rpb24gd2lsbCBzZWFyY2ggZm9y
IGEgbWF0Y2hpbmcgZnJhbWUgaW4gb3RoZXIgbWFpbgorICogZnJhbWUgaGllcmFyY2hpZXMuIFJl
dHVybnMgJU5VTEwgaWYgbm8gbWF0Y2ggaXMgZm91bmQuCisgKgorICogUmV0dXJuIHZhbHVlOiB0
aGUgZm91bmQgI1dlYktpdFdlYkZyYW1lIG9yICVOVUxMIGluIGNhc2Ugbm9uZSBpcyBmb3VuZAor
ICovCitXZWJLaXRXZWJGcmFtZSogd2Via2l0X3dlYl9mcmFtZV9maW5kX2ZyYW1lKFdlYktpdFdl
YkZyYW1lKiBmcmFtZSwgY29uc3QgZ2NoYXIqIG5hbWUpCit7CisgICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoV0VCS0lUX0lTX1dFQl9GUkFNRShmcmFtZSksIE5VTEwpOworICAgIGdfcmV0dXJuX3Zh
bF9pZl9mYWlsKG5hbWUsIE5VTEwpOworCisgICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoZnJh
bWUpOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGNvcmVGcmFtZSwgTlVMTCk7CisKKyAgICBT
dHJpbmcgbmFtZVN0cmluZyA9IFN0cmluZzo6ZnJvbVVURjgobmFtZSk7CisgICAgcmV0dXJuIGtp
dChjb3JlRnJhbWUtPnRyZWUoKS0+ZmluZChBdG9taWNTdHJpbmcobmFtZVN0cmluZykpKTsKK30K
KworLyoqCisgKiB3ZWJraXRfd2ViX2ZyYW1lX2dldF9nbG9iYWxfY29udGV4dDoKKyAqIEBmcmFt
ZTogYSAjV2ViS2l0V2ViRnJhbWUKKyAqCisgKiBHZXRzIHRoZSBnbG9iYWwgSmF2YVNjcmlwdCBl
eGVjdXRpb24gY29udGV4dC4gVXNlIHRoaXMgZnVuY3Rpb24gdG8gYnJpZGdlCisgKiBiZXR3ZWVu
IHRoZSBXZWJLaXQgYW5kIEphdmFTY3JpcHRDb3JlIEFQSXMuCisgKgorICogUmV0dXJuIHZhbHVl
OiB0aGUgZ2xvYmFsIEphdmFTY3JpcHQgY29udGV4dAorICovCitKU0dsb2JhbENvbnRleHRSZWYg
d2Via2l0X3dlYl9mcmFtZV9nZXRfZ2xvYmFsX2NvbnRleHQoV2ViS2l0V2ViRnJhbWUqIGZyYW1l
KQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19XRUJfRlJBTUUoZnJhbWUp
LCBOVUxMKTsKKworICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKGZyYW1lKTsKKyAgICBnX3Jl
dHVybl92YWxfaWZfZmFpbChjb3JlRnJhbWUsIE5VTEwpOworCisgICAgcmV0dXJuIHRvR2xvYmFs
UmVmKGNvcmVGcmFtZS0+c2NyaXB0UHJveHkoKS0+aW50ZXJwcmV0ZXIoKS0+Z2xvYmFsRXhlYygp
KTsKK30KKworfQpJbmRleDogV2ViS2l0L2d0ay9XZWJWaWV3L3dlYmtpdHdlYmZyYW1lLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViS2l0L2d0ay9XZWJWaWV3L3dlYmtpdHdlYmZyYW1lLmgJKHJldmlzaW9u
IDApCisrKyBXZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0d2ViZnJhbWUuaAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSwxMDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMg
UGV0ZXIgRnJleXRoZXIKKyAqIENvcHlyaWdodCAoQykgMjAwNyBBbHAgVG9rZXIgPGFscEBhdG9r
ZXIuY29tPgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoK
KyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBB
cHBsZSwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQK
KyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uIAorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
QU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
CisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpZm5kZWYgV0VCS0lUX1dFQl9GUkFNRV9ICisjZGVmaW5lIFdFQktJVF9XRUJfRlJBTUVfSAor
CisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDxnZGsvZ2RrLmg+CisKKyNpbmNs
dWRlICJ3ZWJraXRkZWZpbmVzLmgiCisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRf
VFlQRV9XRUJfRlJBTUUgICAgICAgICAgICAod2Via2l0X3dlYl9mcmFtZV9nZXRfdHlwZSgpKQor
I2RlZmluZSBXRUJLSVRfV0VCX0ZSQU1FKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lO
U1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9UWVBFX1dFQl9GUkFNRSwgV2ViS2l0V2ViRnJhbWUp
KQorI2RlZmluZSBXRUJLSVRfV0VCX0ZSQU1FX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNL
X0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9UWVBFX1dFQl9GUkFNRSwgV2ViS2l0V2ViRnJh
bWVDbGFzcykpCisjZGVmaW5lIFdFQktJVF9JU19XRUJfRlJBTUUob2JqKSAgICAgICAgIChHX1RZ
UEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX1RZUEVfV0VCX0ZSQU1FKSkKKyNk
ZWZpbmUgV0VCS0lUX0lTX1dFQl9GUkFNRV9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFT
U19UWVBFKChrbGFzcyksICBXRUJLSVRfVFlQRV9XRUJfRlJBTUUpKQorI2RlZmluZSBXRUJLSVRf
V0VCX0ZSQU1FX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2Jq
KSwgIFdFQktJVF9UWVBFX1dFQl9GUkFNRSwgV2ViS2l0V2ViRnJhbWVDbGFzcykpCisKKworc3Ry
dWN0IF9XZWJLaXRXZWJGcmFtZSB7CisgICAgR09iamVjdCBwYXJlbnQ7Cit9OworCitzdHJ1Y3Qg
X1dlYktpdFdlYkZyYW1lQ2xhc3MgeworICAgIEdPYmplY3RDbGFzcyBwYXJlbnQ7CisKKyAgICB2
b2lkICgqdGl0bGVfY2hhbmdlZCkgKFdlYktpdFdlYkZyYW1lKiBmcmFtZSwgZ2NoYXIqIHRpdGxl
LCBnY2hhciogbG9jYXRpb24pOworCisgICAgLyoKKyAgICAgKiBwcm90ZWN0ZWQgdmlydHVhbCBt
ZXRob2RzCisgICAgICovCisgICAgdm9pZCAoKm1vdXNlX21vdmVfZXZlbnQpICAoV2ViS2l0V2Vi
RnJhbWUqIGZyYW1lLCBHZGtFdmVudCogbW92ZV9ldmVudCk7CisgICAgdm9pZCAoKm1vdXNlX3By
ZXNzX2V2ZW50KSAoV2ViS2l0V2ViRnJhbWUqIGZyYW1lLCBHZGtFdmVudCogcHJlc3NfZXZlbnQp
OworICAgIHZvaWQgKCptb3VzZV9yZWxlYXNlX2V2ZW50KSAoV2ViS2l0V2ViRnJhbWUqIGZyYW1l
LCBHZGtFdmVudCogbW91c2VfcmVsZWFzZV9ldmVudCk7CisgICAgdm9pZCAoKm1vdXNlX2RvdWJs
ZV9jbGlja19ldmVudCkgKFdlYktpdFdlYkZyYW1lKiBmcmFtZSwgR2RrRXZlbnQqIGRvdWJsZV9j
bGlja19ldmVudCk7CisgICAgdm9pZCAoKm1vdXNlX3doZWVsX2V2ZW50KSAoV2ViS2l0V2ViRnJh
bWUqIGZyYW1lLCBHZGtFdmVudCogd2hlZWxfZXZlbnQpOworfTsKKworV0VCS0lUX0FQSSBHVHlw
ZQord2Via2l0X3dlYl9mcmFtZV9nZXRfdHlwZSAodm9pZCk7CisKK1dFQktJVF9BUEkgV2ViS2l0
V2ViRnJhbWUqCit3ZWJraXRfd2ViX2ZyYW1lX25ldyAoV2ViS2l0V2ViVmlldyogd2ViX3ZpZXcp
OworCitXRUJLSVRfQVBJIFdlYktpdFdlYlZpZXcqCit3ZWJraXRfd2ViX2ZyYW1lX2dldF93ZWJf
dmlldyAoV2ViS2l0V2ViRnJhbWUqIGZyYW1lKTsKKworV0VCS0lUX0FQSSBjb25zdCBnY2hhcioK
K3dlYmtpdF93ZWJfZnJhbWVfZ2V0X25hbWUgKFdlYktpdFdlYkZyYW1lKiBmcmFtZSk7CisKK1dF
QktJVF9BUEkgY29uc3QgZ2NoYXIqCit3ZWJraXRfd2ViX2ZyYW1lX2dldF90aXRsZSAoV2ViS2l0
V2ViRnJhbWUqIGZyYW1lKTsKKworV0VCS0lUX0FQSSBjb25zdCBnY2hhcioKK3dlYmtpdF93ZWJf
ZnJhbWVfZ2V0X2xvY2F0aW9uIChXZWJLaXRXZWJGcmFtZSogZnJhbWUpOworCitXRUJLSVRfQVBJ
IFdlYktpdFdlYkZyYW1lKgord2Via2l0X3dlYl9mcmFtZV9nZXRfcGFyZW50IChXZWJLaXRXZWJG
cmFtZSogZnJhbWUpOworCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF93ZWJfZnJhbWVfbG9hZF9y
ZXF1ZXN0IChXZWJLaXRXZWJGcmFtZSogZnJhbWUsIFdlYktpdE5ldHdvcmtSZXF1ZXN0KiByZXF1
ZXN0KTsKKworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfd2ViX2ZyYW1lX3N0b3BfbG9hZGluZyAo
V2ViS2l0V2ViRnJhbWUqIGZyYW1lKTsKKworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfd2ViX2Zy
YW1lX3JlbG9hZCAoV2ViS2l0V2ViRnJhbWUqIGZyYW1lKTsKKworV0VCS0lUX0FQSSBXZWJLaXRX
ZWJGcmFtZSoKK3dlYmtpdF93ZWJfZnJhbWVfZmluZF9mcmFtZSAoV2ViS2l0V2ViRnJhbWUqIGZy
YW1lLCBjb25zdCBnY2hhciogbmFtZSk7CisKK1dFQktJVF9BUEkgSlNHbG9iYWxDb250ZXh0UmVm
Cit3ZWJraXRfd2ViX2ZyYW1lX2dldF9nbG9iYWxfY29udGV4dCAoV2ViS2l0V2ViRnJhbWUqIGZy
YW1lKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmCkluZGV4OiBXZWJLaXQvZ3RrL1dlYlZpZXcv
d2Via2l0d2Vidmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2d0ay9XZWJWaWV3L3dlYmtp
dHdlYnZpZXcuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViS2l0L2d0ay9XZWJWaWV3L3dlYmtpdHdl
YnZpZXcuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDg2NSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgorICogQ29weXJpZ2h0IChDKSAy
MDA3IENocmlzdGlhbiBEeXdhbiA8Y2hyaXN0aWFuQHR3b3RvYXN0cy5kZT4KKyAqIENvcHlyaWdo
dCAoQykgMjAwNyBYYW4gTG9wZXogPHhhbkBnbm9tZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIw
MDcgQWxwIFRva2VyIDxhbHBAYXRva2VyLmNvbT4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorICogMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAorICogMy4g
IE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMg
b2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJ3
ZWJraXR3ZWJ2aWV3LmgiCisjaW5jbHVkZSAid2Via2l0LW1hcnNoYWwuaCIKKyNpbmNsdWRlICJ3
ZWJraXRwcml2YXRlLmgiCisKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUg
IkNocm9tZUNsaWVudEd0ay5oIgorI2luY2x1ZGUgIkNvbnRleHRNZW51Q2xpZW50R3RrLmgiCisj
aW5jbHVkZSAiRHJhZ0NsaWVudEd0ay5oIgorI2luY2x1ZGUgIkVkaXRvckNsaWVudEd0ay5oIgor
I2luY2x1ZGUgIkV2ZW50SGFuZGxlci5oIgorI2luY2x1ZGUgIkhpdFRlc3RSZXF1ZXN0LmgiCisj
aW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgor
I2luY2x1ZGUgIkluc3BlY3RvckNsaWVudEd0ay5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgi
CisjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1LZXlib2FyZEV2ZW50
LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1XaGVlbEV2ZW50LmgiCisjaW5jbHVkZSAiU3Vic3RpdHV0
ZURhdGEuaCIKKworI2luY2x1ZGUgPGdkay9nZGtrZXlzeW1zLmg+CisKK3VzaW5nIG5hbWVzcGFj
ZSBXZWJLaXQ7Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworZXh0ZXJuICJDIiB7CisKK2Vu
dW0geworICAgIC8qIG5vcm1hbCBzaWduYWxzICovCisgICAgTkFWSUdBVElPTl9SRVFVRVNURUQs
CisgICAgV0lORE9XX09CSkVDVF9DTEVBUkVELAorICAgIExPQURfU1RBUlRFRCwKKyAgICBMT0FE
X1BST0dSRVNTX0NIQU5HRUQsCisgICAgTE9BRF9GSU5JU0hFRCwKKyAgICBUSVRMRV9DSEFOR0VE
LAorICAgIEhPVkVSSU5HX09WRVJfTElOSywKKyAgICBTVEFUVVNfQkFSX1RFWFRfQ0hBTkdFRCwK
KyAgICBJQ09ORF9MT0FERUQsCisgICAgU0VMRUNUSU9OX0NIQU5HRUQsCisgICAgQ09OU09MRV9N
RVNTQUdFLAorICAgIFNDUklQVF9BTEVSVCwKKyAgICBTQ1JJUFRfQ09ORklSTSwKKyAgICBTQ1JJ
UFRfUFJPTVBULAorICAgIExBU1RfU0lHTkFMCit9OworCitzdGF0aWMgZ3VpbnQgd2Via2l0X3dl
Yl92aWV3X3NpZ25hbHNbTEFTVF9TSUdOQUxdID0geyAwLCB9OworCitHX0RFRklORV9UWVBFKFdl
YktpdFdlYlZpZXcsIHdlYmtpdF93ZWJfdmlldywgR1RLX1RZUEVfQ09OVEFJTkVSKQorCitzdGF0
aWMgZ2Jvb2xlYW4gd2Via2l0X3dlYl92aWV3X2V4cG9zZV9ldmVudChHdGtXaWRnZXQqIHdpZGdl
dCwgR2RrRXZlbnRFeHBvc2UqIGV2ZW50KQoreworICAgIEZyYW1lKiBmcmFtZSA9IGNvcmUoZ2V0
RnJhbWVGcm9tVmlldyhXRUJLSVRfV0VCX1ZJRVcod2lkZ2V0KSkpOworICAgIEdka1JlY3Rhbmds
ZSBjbGlwOworICAgIGdka19yZWdpb25fZ2V0X2NsaXBib3goZXZlbnQtPnJlZ2lvbiwgJmNsaXAp
OworICAgIGNhaXJvX3QqIGNyID0gZ2RrX2NhaXJvX2NyZWF0ZShldmVudC0+d2luZG93KTsKKyAg
ICBHcmFwaGljc0NvbnRleHQgY3R4KGNyKTsKKyAgICBjdHguc2V0R2RrRXhwb3NlRXZlbnQoZXZl
bnQpOworICAgIGlmIChmcmFtZS0+cmVuZGVyZXIoKSkgeworICAgICAgICBmcmFtZS0+dmlldygp
LT5sYXlvdXRJZk5lZWRlZFJlY3Vyc2l2ZSgpOworICAgICAgICBmcmFtZS0+dmlldygpLT5wYWlu
dCgmY3R4LCBjbGlwKTsKKyAgICB9CisgICAgY2Fpcm9fZGVzdHJveShjcik7CisKKyAgICByZXR1
cm4gRkFMU0U7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfd2ViX3ZpZXdfa2V5X2V2ZW50
KEd0a1dpZGdldCogd2lkZ2V0LCBHZGtFdmVudEtleSogZXZlbnQpCit7CisgICAgRnJhbWUqIGZy
YW1lID0gY29yZShnZXRGcmFtZUZyb21WaWV3KFdFQktJVF9XRUJfVklFVyh3aWRnZXQpKSk7Cisg
ICAgUGxhdGZvcm1LZXlib2FyZEV2ZW50IGtleWJvYXJkRXZlbnQoZXZlbnQpOworCisgICAgaWYg
KGZyYW1lLT5ldmVudEhhbmRsZXIoKS0+a2V5RXZlbnQoa2V5Ym9hcmRFdmVudCkpCisgICAgICAg
IHJldHVybiBUUlVFOworCisgICAgaWYgKGV2ZW50LT50eXBlICE9IEdES19LRVlfUFJFU1MpCisg
ICAgICAgIHJldHVybiBGQUxTRTsKKworICAgIEZyYW1lVmlldyogdmlldyA9IGZyYW1lLT52aWV3
KCk7CisKKyAgICAvKiBGSVhNRTogYXQgdGhlIHZlcnkgbGVhc3Qgd2Ugc2hvdWxkIGJlIHVzaW5n
IHRoZSBzYW1lIGNvZGUgdGhhbiB0aGUKKyAgICAgICBXaW5kb3dzIHBvcnQgaGVyZSwgYnV0IG91
ciBTY3JvbGxWaWV3IGZpbGUgZGl2ZXJnZXMgZW5vdWdoIHRvIG1ha2UKKyAgICAgICB0aGF0IGlt
cG9zc2libGUuIEEgc2hvcnQgdGVybSBzb2x1dGlvbiB3b3VsZCBiZSB0byB1bmlmeSBTY3JvbGxW
aWV3V2luCisgICAgICAgYW5kIFNjcm9sbFZpZXdHdGsuIExvbmctdGVybSBTY3JvbGxWaWV3IGFu
ZCBGcmFtZVZpZXcgc2hvdWxkIGJlCisgICAgICAgdW5pZmllZCBhbmQgdXNlZCBldmVyeXdoZXJl
IGZvciBzY3JvbGxiYXJzICovCisKKyAgICBzd2l0Y2ggKGV2ZW50LT5rZXl2YWwpIHsKKyAgICBj
YXNlIChHREtfRG93bik6CisgICAgICAgIHZpZXctPnNjcm9sbEJ5KDAsIExJTkVfU1RFUCk7Cisg
ICAgICAgIHJldHVybiBUUlVFOworICAgIGNhc2UgKEdES19VcCk6CisgICAgICAgIHZpZXctPnNj
cm9sbEJ5KDAsIC1MSU5FX1NURVApOworICAgICAgICByZXR1cm4gVFJVRTsKKyAgICBjYXNlIChH
REtfUmlnaHQpOgorICAgICAgICB2aWV3LT5zY3JvbGxCeShMSU5FX1NURVAsIDApOworICAgICAg
ICByZXR1cm4gVFJVRTsKKyAgICBjYXNlIChHREtfTGVmdCk6CisgICAgICAgIHZpZXctPnNjcm9s
bEJ5KC1MSU5FX1NURVAsIDApOworICAgICAgICByZXR1cm4gVFJVRTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gRkFMU0U7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfd2ViX3ZpZXdfYnV0dG9u
X2V2ZW50KEd0a1dpZGdldCogd2lkZ2V0LCBHZGtFdmVudEJ1dHRvbiogZXZlbnQpCit7CisgICAg
RnJhbWUqIGZyYW1lID0gY29yZShnZXRGcmFtZUZyb21WaWV3KFdFQktJVF9XRUJfVklFVyh3aWRn
ZXQpKSk7CisKKyAgICBpZiAoZXZlbnQtPnR5cGUgPT0gR0RLX0JVVFRPTl9SRUxFQVNFKQorICAg
ICAgICByZXR1cm4gZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5oYW5kbGVNb3VzZVJlbGVhc2VFdmVu
dChQbGF0Zm9ybU1vdXNlRXZlbnQoZXZlbnQpKTsKKworICAgIC8vIEZJWE1FOiBuZWVkIHRvIGtl
ZXAgdHJhY2sgb2Ygc3ViZnJhbWUgZm9jdXMgZm9yIGtleSBldmVudHMKKyAgICBndGtfd2lkZ2V0
X2dyYWJfZm9jdXMoR1RLX1dJREdFVCh3aWRnZXQpKTsKKyAgICByZXR1cm4gZnJhbWUtPmV2ZW50
SGFuZGxlcigpLT5oYW5kbGVNb3VzZVByZXNzRXZlbnQoUGxhdGZvcm1Nb3VzZUV2ZW50KGV2ZW50
KSk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfd2ViX3ZpZXdfbW90aW9uX2V2ZW50KEd0
a1dpZGdldCogd2lkZ2V0LCBHZGtFdmVudE1vdGlvbiogZXZlbnQpCit7CisgICAgRnJhbWUqIGZy
YW1lID0gY29yZShnZXRGcmFtZUZyb21WaWV3KFdFQktJVF9XRUJfVklFVyh3aWRnZXQpKSk7Cisg
ICAgcmV0dXJuIGZyYW1lLT5ldmVudEhhbmRsZXIoKS0+bW91c2VNb3ZlZChQbGF0Zm9ybU1vdXNl
RXZlbnQoZXZlbnQpKTsKK30KKworc3RhdGljIGdib29sZWFuIHdlYmtpdF93ZWJfdmlld19zY3Jv
bGxfZXZlbnQoR3RrV2lkZ2V0KiB3aWRnZXQsIEdka0V2ZW50U2Nyb2xsKiBldmVudCkKK3sKKyAg
ICBGcmFtZSogZnJhbWUgPSBjb3JlKGdldEZyYW1lRnJvbVZpZXcoV0VCS0lUX1dFQl9WSUVXKHdp
ZGdldCkpKTsKKyAgICBQbGF0Zm9ybVdoZWVsRXZlbnQgd2hlZWxFdmVudChldmVudCk7CisgICAg
cmV0dXJuIGZyYW1lLT5ldmVudEhhbmRsZXIoKS0+aGFuZGxlV2hlZWxFdmVudCh3aGVlbEV2ZW50
KTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X3dlYl92aWV3X3NpemVfYWxsb2NhdGUoR3RrV2lk
Z2V0KiB3aWRnZXQsIEd0a0FsbG9jYXRpb24qIGFsbG9jYXRpb24pCit7CisgICAgR1RLX1dJREdF
VF9DTEFTUyh3ZWJraXRfd2ViX3ZpZXdfcGFyZW50X2NsYXNzKS0+c2l6ZV9hbGxvY2F0ZSh3aWRn
ZXQsYWxsb2NhdGlvbik7CisKKyAgICBGcmFtZSogZnJhbWUgPSBjb3JlKGdldEZyYW1lRnJvbVZp
ZXcoV0VCS0lUX1dFQl9WSUVXKHdpZGdldCkpKTsKKyAgICBmcmFtZS0+dmlldygpLT5yZXNpemUo
YWxsb2NhdGlvbi0+d2lkdGgsIGFsbG9jYXRpb24tPmhlaWdodCk7CisgICAgZnJhbWUtPmZvcmNl
TGF5b3V0KCk7CisgICAgZnJhbWUtPnZpZXcoKS0+YWRqdXN0Vmlld1NpemUoKTsKKyAgICBmcmFt
ZS0+c2VuZFJlc2l6ZUV2ZW50KCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF93ZWJfdmlld19y
ZWFsaXplKEd0a1dpZGdldCogd2lkZ2V0KQoreworICAgIEdUS19XSURHRVRfU0VUX0ZMQUdTKHdp
ZGdldCwgR1RLX1JFQUxJWkVEKTsKKworICAgIEdka1dpbmRvd0F0dHIgYXR0cmlidXRlczsKKyAg
ICBhdHRyaWJ1dGVzLndpbmRvd190eXBlID0gR0RLX1dJTkRPV19DSElMRDsKKyAgICBhdHRyaWJ1
dGVzLnggPSB3aWRnZXQtPmFsbG9jYXRpb24ueDsKKyAgICBhdHRyaWJ1dGVzLnkgPSB3aWRnZXQt
PmFsbG9jYXRpb24ueTsKKyAgICBhdHRyaWJ1dGVzLndpZHRoID0gd2lkZ2V0LT5hbGxvY2F0aW9u
LndpZHRoOworICAgIGF0dHJpYnV0ZXMuaGVpZ2h0ID0gd2lkZ2V0LT5hbGxvY2F0aW9uLmhlaWdo
dDsKKyAgICBhdHRyaWJ1dGVzLndjbGFzcyA9IEdES19JTlBVVF9PVVRQVVQ7CisgICAgYXR0cmli
dXRlcy52aXN1YWwgPSBndGtfd2lkZ2V0X2dldF92aXN1YWwgKHdpZGdldCk7CisgICAgYXR0cmli
dXRlcy5jb2xvcm1hcCA9IGd0a193aWRnZXRfZ2V0X2NvbG9ybWFwICh3aWRnZXQpOworICAgIGF0
dHJpYnV0ZXMuZXZlbnRfbWFzayA9IEdES19WSVNJQklMSVRZX05PVElGWV9NQVNLCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfCBHREtfRVhQT1NVUkVfTUFTSworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHwgR0RLX0JVVFRPTl9QUkVTU19NQVNLCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfCBHREtfQlVUVE9OX1JFTEVBU0VfTUFTSworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHwgR0RLX1BPSU5URVJfTU9USU9OX01BU0sKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB8IEdES19LRVlfUFJFU1NfTUFTSworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwg
R0RLX0tFWV9SRUxFQVNFX01BU0sKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEdES19C
VVRUT05fTU9USU9OX01BU0sKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEdES19CVVRU
T04xX01PVElPTl9NQVNLCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBHREtfQlVUVE9O
Ml9NT1RJT05fTUFTSworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgR0RLX0JVVFRPTjNf
TU9USU9OX01BU0s7CisKKyAgICBnaW50IGF0dHJpYnV0ZXNfbWFzayA9IEdES19XQV9YIHwgR0RL
X1dBX1kgfCBHREtfV0FfVklTVUFMIHwgR0RLX1dBX0NPTE9STUFQOworICAgIHdpZGdldC0+d2lu
ZG93ID0gZ2RrX3dpbmRvd19uZXcoZ3RrX3dpZGdldF9nZXRfcGFyZW50X3dpbmRvdyAod2lkZ2V0
KSwgJmF0dHJpYnV0ZXMsIGF0dHJpYnV0ZXNfbWFzayk7CisgICAgZ2RrX3dpbmRvd19zZXRfdXNl
cl9kYXRhKHdpZGdldC0+d2luZG93LCB3aWRnZXQpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRf
d2ViX3ZpZXdfc2V0X3Njcm9sbF9hZGp1c3RtZW50cyhXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBH
dGtBZGp1c3RtZW50KiBoYWRqLCBHdGtBZGp1c3RtZW50KiB2YWRqKQoreworICAgIEZyYW1lVmll
dyogdmlldyA9IGNvcmUoZ2V0RnJhbWVGcm9tVmlldyh3ZWJWaWV3KSktPnZpZXcoKTsKKyAgICB2
aWV3LT5zZXRHdGtBZGp1c3RtZW50cyhoYWRqLCB2YWRqKTsKK30KKworc3RhdGljIHZvaWQgd2Vi
a2l0X3dlYl92aWV3X2NvbnRhaW5lcl9hZGQoR3RrQ29udGFpbmVyKiBjb250YWluZXIsIEd0a1dp
ZGdldCogd2lkZ2V0KQoreworICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcgPSBXRUJLSVRfV0VC
X1ZJRVcoY29udGFpbmVyKTsKKyAgICBXZWJLaXRXZWJWaWV3UHJpdmF0ZSogcHJpdmF0ZV9kYXRh
ID0gV0VCS0lUX1dFQl9WSUVXX0dFVF9QUklWQVRFKHdlYlZpZXcpOworCisgICAgcHJpdmF0ZV9k
YXRhLT5jaGlsZHJlbi5hZGQod2lkZ2V0KTsKKyAgICBpZiAoR1RLX1dJREdFVF9SRUFMSVpFRChj
b250YWluZXIpKQorICAgICAgICBndGtfd2lkZ2V0X3NldF9wYXJlbnRfd2luZG93KHdpZGdldCwg
R1RLX1dJREdFVCh3ZWJWaWV3KS0+d2luZG93KTsKKyAgICBndGtfd2lkZ2V0X3NldF9wYXJlbnQo
d2lkZ2V0LCBHVEtfV0lER0VUKGNvbnRhaW5lcikpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRf
d2ViX3ZpZXdfY29udGFpbmVyX3JlbW92ZShHdGtDb250YWluZXIqIGNvbnRhaW5lciwgR3RrV2lk
Z2V0KiB3aWRnZXQpCit7CisgICAgV2ViS2l0V2ViVmlld1ByaXZhdGUqIHByaXZhdGVfZGF0YSA9
IFdFQktJVF9XRUJfVklFV19HRVRfUFJJVkFURShXRUJLSVRfV0VCX1ZJRVcoY29udGFpbmVyKSk7
CisKKyAgICBpZiAocHJpdmF0ZV9kYXRhLT5jaGlsZHJlbi5jb250YWlucyh3aWRnZXQpKSB7Cisg
ICAgICAgIGd0a193aWRnZXRfdW5wYXJlbnQod2lkZ2V0KTsKKyAgICAgICAgcHJpdmF0ZV9kYXRh
LT5jaGlsZHJlbi5yZW1vdmUod2lkZ2V0KTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtp
dF93ZWJfdmlld19jb250YWluZXJfZm9yYWxsKEd0a0NvbnRhaW5lciogY29udGFpbmVyLCBnYm9v
bGVhbiwgR3RrQ2FsbGJhY2sgY2FsbGJhY2ssIGdwb2ludGVyIGNhbGxiYWNrRGF0YSkKK3sKKyAg
ICBXZWJLaXRXZWJWaWV3UHJpdmF0ZSogcHJpdmF0ZURhdGEgPSBXRUJLSVRfV0VCX1ZJRVdfR0VU
X1BSSVZBVEUoV0VCS0lUX1dFQl9WSUVXKGNvbnRhaW5lcikpOworCisgICAgSGFzaFNldDxHdGtX
aWRnZXQqPiBjaGlsZHJlbiA9IHByaXZhdGVEYXRhLT5jaGlsZHJlbjsKKyAgICBIYXNoU2V0PEd0
a1dpZGdldCo+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBjaGlsZHJlbi5lbmQoKTsKKyAgICBmb3Ig
KEhhc2hTZXQ8R3RrV2lkZ2V0Kj46OmNvbnN0X2l0ZXJhdG9yIGN1cnJlbnQgPSBjaGlsZHJlbi5i
ZWdpbigpOyBjdXJyZW50ICE9IGVuZDsgKytjdXJyZW50KQorICAgICAgICAoKmNhbGxiYWNrKSgq
Y3VycmVudCwgY2FsbGJhY2tEYXRhKTsKK30KKworc3RhdGljIFdlYktpdFdlYlZpZXcqIHdlYmtp
dF93ZWJfdmlld19yZWFsX2NyZWF0ZV93ZWJfdmlldyhXZWJLaXRXZWJWaWV3KikKK3sKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgV2ViS2l0TmF2aWdh
dGlvblJlc3BvbnNlIHdlYmtpdF93ZWJfdmlld19yZWFsX25hdmlnYXRpb25fcmVxdWVzdGVkKFdl
YktpdFdlYlZpZXcqLCBXZWJLaXRXZWJGcmFtZSogZnJhbWUsIFdlYktpdE5ldHdvcmtSZXF1ZXN0
KikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBXRUJLSVRfTkFWSUdBVElP
Tl9SRVNQT05TRV9BQ0NFUFQ7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF93ZWJfdmlld19yZWFs
X3dpbmRvd19vYmplY3RfY2xlYXJlZChXZWJLaXRXZWJWaWV3KiwgV2ViS2l0V2ViRnJhbWUqLCBK
U0dsb2JhbENvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgd2luZG93X29iamVjdCkKK3sK
KyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitzdGF0aWMgZ2NoYXIqIHdlYmtpdF93ZWJfdmll
d19yZWFsX2Nob29zZV9maWxlKFdlYktpdFdlYlZpZXcqLCBXZWJLaXRXZWJGcmFtZSosIGNvbnN0
IGdjaGFyKiBvbGRfbmFtZSkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBn
X3N0cmR1cChvbGRfbmFtZSk7Cit9CisKK3R5cGVkZWYgZW51bSB7CisgICAgV0VCS0lUX1NDUklQ
VF9ESUFMT0dfQUxFUlQsCisgICAgV0VCS0lUX1NDUklQVF9ESUFMT0dfQ09ORklSTSwKKyAgICBX
RUJLSVRfU0NSSVBUX0RJQUxPR19QUk9NUFQKKyB9IFdlYktpdFNjcmlwdERpYWxvZ1R5cGU7CisK
K3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfd2ViX3ZpZXdfc2NyaXB0X2RpYWxvZyhXZWJLaXRXZWJW
aWV3KiB3ZWJWaWV3LCBXZWJLaXRXZWJGcmFtZSogZnJhbWUsIGNvbnN0IGdjaGFyKiBtZXNzYWdl
LCBXZWJLaXRTY3JpcHREaWFsb2dUeXBlIHR5cGUsIGNvbnN0IGdjaGFyKiBkZWZhdWx0VmFsdWUs
IGdjaGFyKiogdmFsdWUpCit7CisgICAgR3RrTWVzc2FnZVR5cGUgbWVzc2FnZVR5cGU7CisgICAg
R3RrQnV0dG9uc1R5cGUgYnV0dG9uczsKKyAgICBnaW50IGRlZmF1bHRSZXNwb25zZTsKKyAgICBH
dGtXaWRnZXQqIHdpbmRvdzsKKyAgICBHdGtXaWRnZXQqIGRpYWxvZzsKKyAgICBHdGtXaWRnZXQq
IGVudHJ5ID0gMDsKKyAgICBnYm9vbGVhbiBkaWRDb25maXJtID0gRkFMU0U7CisKKyAgICBzd2l0
Y2ggKHR5cGUpIHsKKyAgICBjYXNlIFdFQktJVF9TQ1JJUFRfRElBTE9HX0FMRVJUOgorICAgICAg
ICBtZXNzYWdlVHlwZSA9IEdUS19NRVNTQUdFX1dBUk5JTkc7CisgICAgICAgIGJ1dHRvbnMgPSBH
VEtfQlVUVE9OU19DTE9TRTsKKyAgICAgICAgZGVmYXVsdFJlc3BvbnNlID0gR1RLX1JFU1BPTlNF
X0NMT1NFOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFdFQktJVF9TQ1JJUFRfRElBTE9HX0NP
TkZJUk06CisgICAgICAgIG1lc3NhZ2VUeXBlID0gR1RLX01FU1NBR0VfUVVFU1RJT047CisgICAg
ICAgIGJ1dHRvbnMgPSBHVEtfQlVUVE9OU19ZRVNfTk87CisgICAgICAgIGRlZmF1bHRSZXNwb25z
ZSA9IEdUS19SRVNQT05TRV9ZRVM7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgV0VCS0lUX1ND
UklQVF9ESUFMT0dfUFJPTVBUOgorICAgICAgICBtZXNzYWdlVHlwZSA9IEdUS19NRVNTQUdFX1FV
RVNUSU9OOworICAgICAgICBidXR0b25zID0gR1RLX0JVVFRPTlNfT0tfQ0FOQ0VMOworICAgICAg
ICBkZWZhdWx0UmVzcG9uc2UgPSBHVEtfUkVTUE9OU0VfT0s7CisgICAgICAgIGJyZWFrOworICAg
IGRlZmF1bHQ6CisgICAgICAgIGdfd2FybmluZygiVW5rbm93biB2YWx1ZSBmb3IgV2ViS2l0U2Ny
aXB0RGlhbG9nVHlwZS4iKTsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKworICAgIHdp
bmRvdyA9IGd0a193aWRnZXRfZ2V0X3RvcGxldmVsKEdUS19XSURHRVQod2ViVmlldykpOworICAg
IGRpYWxvZyA9IGd0a19tZXNzYWdlX2RpYWxvZ19uZXcoR1RLX1dJREdFVF9UT1BMRVZFTCh3aW5k
b3cpID8gR1RLX1dJTkRPVyh3aW5kb3cpIDogMCwgR1RLX0RJQUxPR19ERVNUUk9ZX1dJVEhfUEFS
RU5ULCBtZXNzYWdlVHlwZSwgYnV0dG9ucywgIiVzIiwgbWVzc2FnZSk7CisgICAgZ2NoYXIqIHRp
dGxlID0gZ19zdHJjb25jYXQoIkphdmFTY3JpcHQgLSAiLCB3ZWJraXRfd2ViX2ZyYW1lX2dldF9s
b2NhdGlvbihmcmFtZSksIE5VTEwpOworICAgIGd0a193aW5kb3dfc2V0X3RpdGxlKEdUS19XSU5E
T1coZGlhbG9nKSwgdGl0bGUpOworICAgIGdfZnJlZSh0aXRsZSk7CisKKyAgICBpZiAodHlwZSA9
PSBXRUJLSVRfU0NSSVBUX0RJQUxPR19QUk9NUFQpIHsKKyAgICAgICAgZW50cnkgPSBndGtfZW50
cnlfbmV3KCk7CisgICAgICAgIGd0a19lbnRyeV9zZXRfdGV4dChHVEtfRU5UUlkoZW50cnkpLCBk
ZWZhdWx0VmFsdWUpOworICAgICAgICBndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKEdU
S19ESUFMT0coZGlhbG9nKS0+dmJveCksIGVudHJ5KTsKKyAgICAgICAgZ3RrX2VudHJ5X3NldF9h
Y3RpdmF0ZXNfZGVmYXVsdChHVEtfRU5UUlkoZW50cnkpLCBUUlVFKTsKKyAgICAgICAgZ3RrX3dp
ZGdldF9zaG93KGVudHJ5KTsKKyAgICB9CisKKyAgICBndGtfZGlhbG9nX3NldF9kZWZhdWx0X3Jl
c3BvbnNlKEdUS19ESUFMT0coZGlhbG9nKSwgZGVmYXVsdFJlc3BvbnNlKTsKKyAgICBnaW50IHJl
c3BvbnNlID0gZ3RrX2RpYWxvZ19ydW4oR1RLX0RJQUxPRyhkaWFsb2cpKTsKKworICAgIHN3aXRj
aCAocmVzcG9uc2UpIHsKKyAgICBjYXNlIEdUS19SRVNQT05TRV9ZRVM6CisgICAgICAgIGRpZENv
bmZpcm0gPSBUUlVFOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdUS19SRVNQT05TRV9PSzoK
KyAgICAgICAgZGlkQ29uZmlybSA9IFRSVUU7CisgICAgICAgIGlmIChlbnRyeSkKKyAgICAgICAg
ICAgICp2YWx1ZSA9IGdfc3RyZHVwKGd0a19lbnRyeV9nZXRfdGV4dChHVEtfRU5UUlkoZW50cnkp
KSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgICp2YWx1ZSA9IDA7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgR1RLX1JFU1BPTlNFX05POgorICAgIGNhc2UgR1RLX1JFU1BPTlNFX0NBTkNF
TDoKKyAgICAgICAgZGlkQ29uZmlybSA9IEZBTFNFOworICAgICAgICBicmVhazsKKworICAgIH0K
KyAgICBndGtfd2lkZ2V0X2Rlc3Ryb3koR1RLX1dJREdFVChkaWFsb2cpKTsKKyAgICByZXR1cm4g
ZGlkQ29uZmlybTsKK30KKworc3RhdGljIGdib29sZWFuIHdlYmtpdF93ZWJfdmlld19yZWFsX3Nj
cmlwdF9hbGVydChXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBXZWJLaXRXZWJGcmFtZSogZnJhbWUs
IGNvbnN0IGdjaGFyKiBtZXNzYWdlKQoreworICAgIHdlYmtpdF93ZWJfdmlld19zY3JpcHRfZGlh
bG9nKHdlYlZpZXcsIGZyYW1lLCBtZXNzYWdlLCBXRUJLSVRfU0NSSVBUX0RJQUxPR19BTEVSVCwg
MCwgMCk7CisgICAgcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfd2Vi
X3ZpZXdfcmVhbF9zY3JpcHRfY29uZmlybShXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBXZWJLaXRX
ZWJGcmFtZSogZnJhbWUsIGNvbnN0IGdjaGFyKiBtZXNzYWdlLCBnYm9vbGVhbiogZGlkQ29uZmly
bSkKK3sKKyAgICAqZGlkQ29uZmlybSA9IHdlYmtpdF93ZWJfdmlld19zY3JpcHRfZGlhbG9nKHdl
YlZpZXcsIGZyYW1lLCBtZXNzYWdlLCBXRUJLSVRfU0NSSVBUX0RJQUxPR19DT05GSVJNLCAwLCAw
KTsKKyAgICByZXR1cm4gVFJVRTsKK30KKworc3RhdGljIGdib29sZWFuIHdlYmtpdF93ZWJfdmll
d19yZWFsX3NjcmlwdF9wcm9tcHQoV2ViS2l0V2ViVmlldyogd2ViVmlldywgV2ViS2l0V2ViRnJh
bWUqIGZyYW1lLCBjb25zdCBnY2hhciogbWVzc2FnZSwgY29uc3QgZ2NoYXIqIGRlZmF1bHRWYWx1
ZSwgZ2NoYXIqKiB2YWx1ZSkKK3sKKyAgICBpZiAoIXdlYmtpdF93ZWJfdmlld19zY3JpcHRfZGlh
bG9nKHdlYlZpZXcsIGZyYW1lLCBtZXNzYWdlLCBXRUJLSVRfU0NSSVBUX0RJQUxPR19QUk9NUFQs
IGRlZmF1bHRWYWx1ZSwgdmFsdWUpKQorICAgICAgICAqdmFsdWUgPSBOVUxMOworICAgIHJldHVy
biBUUlVFOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X3dlYl92aWV3X3JlYWxfY29uc29s
ZV9tZXNzYWdlKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIGNvbnN0IGdjaGFyKiBtZXNzYWdlLCB1
bnNpZ25lZCBpbnQgbGluZSwgY29uc3QgZ2NoYXIqIHNvdXJjZUlkKQoreworICAgIGdfcHJpbnQo
ImNvbnNvbGUgbWVzc2FnZTogJXMgQCVkOiAlc1xuIiwgc291cmNlSWQsIGxpbmUsIG1lc3NhZ2Up
OworICAgIHJldHVybiBUUlVFOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfZmlu
YWxpemUoR09iamVjdCogb2JqZWN0KQoreworICAgIHdlYmtpdF93ZWJfdmlld19zdG9wX2xvYWRp
bmcoV0VCS0lUX1dFQl9WSUVXKG9iamVjdCkpOworCisgICAgV2ViS2l0V2ViVmlld1ByaXZhdGUq
IHdlYlZpZXdEYXRhID0gV0VCS0lUX1dFQl9WSUVXX0dFVF9QUklWQVRFKFdFQktJVF9XRUJfVklF
VyhvYmplY3QpKTsKKyAgICBkZWxldGUgd2ViVmlld0RhdGEtPmNvcmVQYWdlOworICAgIGRlbGV0
ZSB3ZWJWaWV3RGF0YS0+c2V0dGluZ3M7CisgICAgZ19vYmplY3RfdW5yZWYod2ViVmlld0RhdGEt
Pm1haW5GcmFtZSk7CisgICAgZGVsZXRlIHdlYlZpZXdEYXRhLT51c2VyQWdlbnQ7CisKKyAgICBH
X09CSkVDVF9DTEFTUyh3ZWJraXRfd2ViX3ZpZXdfcGFyZW50X2NsYXNzKS0+ZmluYWxpemUob2Jq
ZWN0KTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X3dlYl92aWV3X2NsYXNzX2luaXQoV2ViS2l0
V2ViVmlld0NsYXNzKiB3ZWJWaWV3Q2xhc3MpCit7CisgICAgZ190eXBlX2NsYXNzX2FkZF9wcml2
YXRlKHdlYlZpZXdDbGFzcywgc2l6ZW9mKFdlYktpdFdlYlZpZXdQcml2YXRlKSk7CisKKyAgICAv
KgorICAgICAqIFNpZ25hbHMKKyAgICAgKi8KKworICAgIHdlYmtpdF93ZWJfdmlld19zaWduYWxz
W05BVklHQVRJT05fUkVRVUVTVEVEXSA9IGdfc2lnbmFsX25ldygibmF2aWdhdGlvbl9yZXF1ZXN0
ZWQiLAorICAgICAgICAgICAgR19UWVBFX0ZST01fQ0xBU1Mod2ViVmlld0NsYXNzKSwKKyAgICAg
ICAgICAgIChHU2lnbmFsRmxhZ3MpKEdfU0lHTkFMX1JVTl9MQVNUIHwgR19TSUdOQUxfQUNUSU9O
KSwKKyAgICAgICAgICAgIEdfU1RSVUNUX09GRlNFVCAoV2ViS2l0V2ViVmlld0NsYXNzLCBuYXZp
Z2F0aW9uX3JlcXVlc3RlZCksCisgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAgTlVMTCwK
KyAgICAgICAgICAgIHdlYmtpdF9tYXJzaGFsX0lOVF9fT0JKRUNUX09CSkVDVCwKKyAgICAgICAg
ICAgIEdfVFlQRV9JTlQsIDIsCisgICAgICAgICAgICBHX1RZUEVfT0JKRUNULAorICAgICAgICAg
ICAgR19UWVBFX09CSkVDVCk7CisKKyAgICAvKioKKyAgICAgKiBXZWJLaXRXZWJWaWV3Ojp3aW5k
b3ctb2JqZWN0LWNsZWFyZWQ6CisgICAgICogQHdlYlZpZXc6IHRoZSBvYmplY3Qgb24gd2hpY2gg
dGhlIHNpZ25hbCBpcyBlbWl0dGVkCisgICAgICogQGZyYW1lOiB0aGUgI1dlYktpdFdlYkZyYW1l
IHRvIHdoaWNoIEB3aW5kb3dfb2JqZWN0IGJlbG9uZ3MKKyAgICAgKiBAY29udGV4dDogdGhlICNK
U0dsb2JhbENvbnRleHRSZWYgaG9sZGluZyB0aGUgZ2xvYmFsIG9iamVjdCBhbmQgb3RoZXIKKyAg
ICAgKiBleGVjdXRpb24gc3RhdGU7IGVxdWl2YWxlbnQgdG8gdGhlIHJldHVybiB2YWx1ZSBvZgor
ICAgICAqIHdlYmtpdF93ZWJfZnJhbWVfZ2V0X2dsb2JhbF9jb250ZXh0KEBmcmFtZSkKKyAgICAg
KgorICAgICAqIEB3aW5kb3dfb2JqZWN0OiB0aGUgI0pTT2JqZWN0UmVmIHJlcHJlc2VudGluZyB0
aGUgZnJhbWUncyBKYXZhU2NyaXB0CisgICAgICogd2luZG93IG9iamVjdAorICAgICAqCisgICAg
ICogRW1pdHRlZCB3aGVuIHRoZSBKYXZhU2NyaXB0IHdpbmRvdyBvYmplY3QgaW4gYSAjV2ViS2l0
V2ViRnJhbWUgaGFzIGJlZW4KKyAgICAgKiBjbGVhcmVkIGluIHByZXBhcmF0aW9uIGZvciBhIG5l
dyBsb2FkLiBUaGlzIGlzIHRoZSBwcmVmZXJyZWQgcGxhY2UgdG8KKyAgICAgKiBzZXQgY3VzdG9t
IHByb3BlcnRpZXMgb24gdGhlIHdpbmRvdyBvYmplY3QgdXNpbmcgdGhlIEphdmFTY3JpcHRDb3Jl
IEFQSS4KKyAgICAgKi8KKyAgICB3ZWJraXRfd2ViX3ZpZXdfc2lnbmFsc1tXSU5ET1dfT0JKRUNU
X0NMRUFSRURdID0gZ19zaWduYWxfbmV3KCJ3aW5kb3dfb2JqZWN0X2NsZWFyZWQiLAorICAgICAg
ICAgICAgR19UWVBFX0ZST01fQ0xBU1Mod2ViVmlld0NsYXNzKSwKKyAgICAgICAgICAgIChHU2ln
bmFsRmxhZ3MpKEdfU0lHTkFMX1JVTl9MQVNUIHwgR19TSUdOQUxfQUNUSU9OKSwKKyAgICAgICAg
ICAgIEdfU1RSVUNUX09GRlNFVCAoV2ViS2l0V2ViVmlld0NsYXNzLCB3aW5kb3dfb2JqZWN0X2Ns
ZWFyZWQpLAorICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAg
ICB3ZWJraXRfbWFyc2hhbF9WT0lEX19PQkpFQ1RfUE9JTlRFUl9QT0lOVEVSLAorICAgICAgICAg
ICAgR19UWVBFX05PTkUsIDMsCisgICAgICAgICAgICBXRUJLSVRfVFlQRV9XRUJfRlJBTUUsCisg
ICAgICAgICAgICBHX1RZUEVfUE9JTlRFUiwKKyAgICAgICAgICAgIEdfVFlQRV9QT0lOVEVSKTsK
KworICAgIC8qKgorICAgICAqIFdlYktpdFdlYlZpZXc6OmxvYWQtc3RhcnRlZDoKKyAgICAgKgor
ICAgICAqIEB3ZWJWaWV3OiB0aGUgb2JqZWN0IG9uIHdoaWNoIHRoZSBzaWduYWwgaXMgZW1pdHRl
ZAorICAgICAqIEBmcmFtZTogdGhlIGZyYW1lIGdvaW5nIHRvIGRvIHRoZSBsb2FkCisgICAgICoK
KyAgICAgKiBXaGVuIGEgI1dlYktpdFdlYkZyYW1lIGJlZ2lucyB0byBsb2FkIHRoaXMgc2lnbmFs
IGlzIGVtaXR0ZWQuCisgICAgICovCisgICAgd2Via2l0X3dlYl92aWV3X3NpZ25hbHNbTE9BRF9T
VEFSVEVEXSA9IGdfc2lnbmFsX25ldygibG9hZF9zdGFydGVkIiwKKyAgICAgICAgICAgIEdfVFlQ
RV9GUk9NX0NMQVNTKHdlYlZpZXdDbGFzcyksCisgICAgICAgICAgICAoR1NpZ25hbEZsYWdzKShH
X1NJR05BTF9SVU5fTEFTVCB8IEdfU0lHTkFMX0FDVElPTiksCisgICAgICAgICAgICAwLAorICAg
ICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICBnX2NjbG9zdXJl
X21hcnNoYWxfVk9JRF9fT0JKRUNULAorICAgICAgICAgICAgR19UWVBFX05PTkUsIDEsCisgICAg
ICAgICAgICBXRUJLSVRfVFlQRV9XRUJfRlJBTUUpOworCisgICAgLyoqCisgICAgICogV2ViS2l0
V2ViVmlldzo6bG9hZC1wcm9ncmVzcy1jaGFuZ2VkOgorICAgICAqCisgICAgICogQHdlYlZpZXc6
IHRoZSAjV2ViS2l0V2ViVmlldworICAgICAqIEBwcm9ncmVzczogdGhlIGdsb2JhbCBwcm9ncmVz
cworICAgICAqLworICAgIHdlYmtpdF93ZWJfdmlld19zaWduYWxzW0xPQURfUFJPR1JFU1NfQ0hB
TkdFRF0gPSBnX3NpZ25hbF9uZXcoImxvYWRfcHJvZ3Jlc3NfY2hhbmdlZCIsCisgICAgICAgICAg
ICBHX1RZUEVfRlJPTV9DTEFTUyh3ZWJWaWV3Q2xhc3MpLAorICAgICAgICAgICAgKEdTaWduYWxG
bGFncykoR19TSUdOQUxfUlVOX0xBU1QgfCBHX1NJR05BTF9BQ1RJT04pLAorICAgICAgICAgICAg
MCwKKyAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAgZ19j
Y2xvc3VyZV9tYXJzaGFsX1ZPSURfX0lOVCwKKyAgICAgICAgICAgIEdfVFlQRV9OT05FLCAxLAor
ICAgICAgICAgICAgR19UWVBFX0lOVCk7CisKKyAgICB3ZWJraXRfd2ViX3ZpZXdfc2lnbmFsc1tM
T0FEX0ZJTklTSEVEXSA9IGdfc2lnbmFsX25ldygibG9hZF9maW5pc2hlZCIsCisgICAgICAgICAg
ICBHX1RZUEVfRlJPTV9DTEFTUyh3ZWJWaWV3Q2xhc3MpLAorICAgICAgICAgICAgKEdTaWduYWxG
bGFncykoR19TSUdOQUxfUlVOX0xBU1QgfCBHX1NJR05BTF9BQ1RJT04pLAorICAgICAgICAgICAg
MCwKKyAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAgZ19j
Y2xvc3VyZV9tYXJzaGFsX1ZPSURfX09CSkVDVCwKKyAgICAgICAgICAgIEdfVFlQRV9OT05FLCAx
LAorICAgICAgICAgICAgV0VCS0lUX1RZUEVfV0VCX0ZSQU1FKTsKKworICAgIHdlYmtpdF93ZWJf
dmlld19zaWduYWxzW1RJVExFX0NIQU5HRURdID0gZ19zaWduYWxfbmV3KCJ0aXRsZV9jaGFuZ2Vk
IiwKKyAgICAgICAgICAgIEdfVFlQRV9GUk9NX0NMQVNTKHdlYlZpZXdDbGFzcyksCisgICAgICAg
ICAgICAoR1NpZ25hbEZsYWdzKShHX1NJR05BTF9SVU5fTEFTVCB8IEdfU0lHTkFMX0FDVElPTiks
CisgICAgICAgICAgICAwLAorICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgIE5VTEwsCisg
ICAgICAgICAgICB3ZWJraXRfbWFyc2hhbF9WT0lEX19TVFJJTkdfU1RSSU5HLAorICAgICAgICAg
ICAgR19UWVBFX05PTkUsIDIsCisgICAgICAgICAgICBHX1RZUEVfU1RSSU5HLCBHX1RZUEVfU1RS
SU5HKTsKKworICAgIHdlYmtpdF93ZWJfdmlld19zaWduYWxzW0hPVkVSSU5HX09WRVJfTElOS10g
PSBnX3NpZ25hbF9uZXcoImhvdmVyaW5nX292ZXJfbGluayIsCisgICAgICAgICAgICBHX1RZUEVf
RlJPTV9DTEFTUyh3ZWJWaWV3Q2xhc3MpLAorICAgICAgICAgICAgKEdTaWduYWxGbGFncykoR19T
SUdOQUxfUlVOX0xBU1QgfCBHX1NJR05BTF9BQ1RJT04pLAorICAgICAgICAgICAgMCwKKyAgICAg
ICAgICAgIE5VTEwsCisgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAgd2Via2l0X21hcnNo
YWxfVk9JRF9fU1RSSU5HX1NUUklORywKKyAgICAgICAgICAgIEdfVFlQRV9OT05FLCAyLAorICAg
ICAgICAgICAgR19UWVBFX1NUUklORywKKyAgICAgICAgICAgIEdfVFlQRV9TVFJJTkcpOworCisg
ICAgd2Via2l0X3dlYl92aWV3X3NpZ25hbHNbU1RBVFVTX0JBUl9URVhUX0NIQU5HRURdID0gZ19z
aWduYWxfbmV3KCJzdGF0dXNfYmFyX3RleHRfY2hhbmdlZCIsCisgICAgICAgICAgICBHX1RZUEVf
RlJPTV9DTEFTUyh3ZWJWaWV3Q2xhc3MpLAorICAgICAgICAgICAgKEdTaWduYWxGbGFncykoR19T
SUdOQUxfUlVOX0xBU1QgfCBHX1NJR05BTF9BQ1RJT04pLAorICAgICAgICAgICAgMCwKKyAgICAg
ICAgICAgIE5VTEwsCisgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAgZ19jY2xvc3VyZV9t
YXJzaGFsX1ZPSURfX1NUUklORywKKyAgICAgICAgICAgIEdfVFlQRV9OT05FLCAxLAorICAgICAg
ICAgICAgR19UWVBFX1NUUklORyk7CisKKyAgICB3ZWJraXRfd2ViX3ZpZXdfc2lnbmFsc1tJQ09O
RF9MT0FERURdID0gZ19zaWduYWxfbmV3KCJpY29uX2xvYWRlZCIsCisgICAgICAgICAgICBHX1RZ
UEVfRlJPTV9DTEFTUyh3ZWJWaWV3Q2xhc3MpLAorICAgICAgICAgICAgKEdTaWduYWxGbGFncyko
R19TSUdOQUxfUlVOX0xBU1QgfCBHX1NJR05BTF9BQ1RJT04pLAorICAgICAgICAgICAgMCwKKyAg
ICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAgZ19jY2xvc3Vy
ZV9tYXJzaGFsX1ZPSURfX1ZPSUQsCisgICAgICAgICAgICBHX1RZUEVfTk9ORSwgMCk7CisKKyAg
ICB3ZWJraXRfd2ViX3ZpZXdfc2lnbmFsc1tTRUxFQ1RJT05fQ0hBTkdFRF0gPSBnX3NpZ25hbF9u
ZXcoInNlbGVjdGlvbl9jaGFuZ2VkIiwKKyAgICAgICAgICAgIEdfVFlQRV9GUk9NX0NMQVNTKHdl
YlZpZXdDbGFzcyksCisgICAgICAgICAgICAoR1NpZ25hbEZsYWdzKShHX1NJR05BTF9SVU5fTEFT
VCB8IEdfU0lHTkFMX0FDVElPTiksCisgICAgICAgICAgICAwLAorICAgICAgICAgICAgTlVMTCwK
KyAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICBnX2NjbG9zdXJlX21hcnNoYWxfVk9JRF9f
Vk9JRCwKKyAgICAgICAgICAgIEdfVFlQRV9OT05FLCAwKTsKKworICAgIC8qKgorICAgICAqIFdl
YktpdFdlYlZpZXc6OmNvbnNvbGUtbWVzc2FnZToKKyAgICAgKgorICAgICAqIEB3ZWJWaWV3OiB0
aGUgb2JqZWN0IG9uIHdoaWNoIHRoZSBzaWduYWwgaXMgZW1pdHRlZAorICAgICAqIEBtZXNzYWdl
OiB0aGUgbWVzc2FnZSB0ZXh0CisgICAgICogQGxpbmU6IHRoZSBsaW5lIHdoZXJlIHRoZSBlcnJv
ciBvY2N1cmVkCisgICAgICogQHNvdXJjZV9pZDogdGhlIHNvdXJjZSBpZAorICAgICAqIEByZXR1
cm46IFRSVUUgdG8gc3RvcCBvdGhlciBoYW5kbGVycyBmcm9tIGJlaW5nIGludm9rZWQgZm9yIHRo
ZSBldmVudC4gRkFMU0UgdG8gcHJvcGFnYXRlIHRoZSBldmVudCBmdXJ0aGVyLgorICAgICAqCisg
ICAgICogQSBKYXZhU2NyaXB0IGNvbnNvbGUgbWVzc2FnZSB3YXMgY3JlYXRlZC4KKyAgICAgKi8K
KyAgICB3ZWJraXRfd2ViX3ZpZXdfc2lnbmFsc1tDT05TT0xFX01FU1NBR0VdID0gZ19zaWduYWxf
bmV3KCJjb25zb2xlX21lc3NhZ2UiLAorICAgICAgICAgICAgR19UWVBFX0ZST01fQ0xBU1Mod2Vi
Vmlld0NsYXNzKSwKKyAgICAgICAgICAgIChHU2lnbmFsRmxhZ3MpKEdfU0lHTkFMX1JVTl9MQVNU
IHwgR19TSUdOQUxfQUNUSU9OKSwKKyAgICAgICAgICAgIEdfU1RSVUNUX09GRlNFVChXZWJLaXRX
ZWJWaWV3Q2xhc3MsIGNvbnNvbGVfbWVzc2FnZSksCisgICAgICAgICAgICBnX3NpZ25hbF9hY2N1
bXVsYXRvcl90cnVlX2hhbmRsZWQsCisgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAgd2Vi
a2l0X21hcnNoYWxfQk9PTEVBTl9fU1RSSU5HX0lOVF9TVFJJTkcsCisgICAgICAgICAgICBHX1RZ
UEVfQk9PTEVBTiwgMywKKyAgICAgICAgICAgIEdfVFlQRV9TVFJJTkcsIEdfVFlQRV9JTlQsIEdf
VFlQRV9TVFJJTkcpOworCisgICAgLyoqCisgICAgICogV2ViS2l0V2ViVmlldzo6c2NyaXB0LWFs
ZXJ0OgorICAgICAqCisgICAgICogQHdlYlZpZXc6IHRoZSBvYmplY3Qgb24gd2hpY2ggdGhlIHNp
Z25hbCBpcyBlbWl0dGVkCisgICAgICogQGZyYW1lOiB0aGUgcmVsZXZhbnQgZnJhbWUKKyAgICAg
KiBAbWVzc2FnZTogdGhlIG1lc3NhZ2UgdGV4dAorICAgICAqIEByZXR1cm46IFRSVUUgdG8gc3Rv
cCBvdGhlciBoYW5kbGVycyBmcm9tIGJlaW5nIGludm9rZWQgZm9yIHRoZSBldmVudC4gRkFMU0Ug
dG8gcHJvcGFnYXRlIHRoZSBldmVudCBmdXJ0aGVyLgorICAgICAqCisgICAgICogQSBKYXZhU2Ny
aXB0IGFsZXJ0IGRpYWxvZyB3YXMgY3JlYXRlZC4KKyAgICAgKi8KKyAgICB3ZWJraXRfd2ViX3Zp
ZXdfc2lnbmFsc1tTQ1JJUFRfQUxFUlRdID0gZ19zaWduYWxfbmV3KCJzY3JpcHQtYWxlcnQiLAor
ICAgICAgICAgICAgR19UWVBFX0ZST01fQ0xBU1Mod2ViVmlld0NsYXNzKSwKKyAgICAgICAgICAg
IChHU2lnbmFsRmxhZ3MpKEdfU0lHTkFMX1JVTl9MQVNUIHwgR19TSUdOQUxfQUNUSU9OKSwKKyAg
ICAgICAgICAgIEdfU1RSVUNUX09GRlNFVChXZWJLaXRXZWJWaWV3Q2xhc3MsIHNjcmlwdF9hbGVy
dCksCisgICAgICAgICAgICBnX3NpZ25hbF9hY2N1bXVsYXRvcl90cnVlX2hhbmRsZWQsCisgICAg
ICAgICAgICBOVUxMLAorICAgICAgICAgICAgd2Via2l0X21hcnNoYWxfQk9PTEVBTl9fT0JKRUNU
X1NUUklORywKKyAgICAgICAgICAgIEdfVFlQRV9CT09MRUFOLCAyLAorICAgICAgICAgICAgR19U
WVBFX09CSkVDVCwgR19UWVBFX1NUUklORyk7CisKKyAgICAvKioKKyAgICAgKiBXZWJLaXRXZWJW
aWV3OjpzY3JpcHQtY29uZmlybToKKyAgICAgKgorICAgICAqIEB3ZWJWaWV3OiB0aGUgb2JqZWN0
IG9uIHdoaWNoIHRoZSBzaWduYWwgaXMgZW1pdHRlZAorICAgICAqIEBmcmFtZTogdGhlIHJlbGV2
YW50IGZyYW1lCisgICAgICogQG1lc3NhZ2U6IHRoZSBtZXNzYWdlIHRleHQKKyAgICAgKiBAY29u
ZmlybWVkOiB3aGV0aGVyIHRoZSBkaWFsb2cgaGFzIGJlZW4gY29uZmlybWVkCisgICAgICogQHJl
dHVybjogVFJVRSB0byBzdG9wIG90aGVyIGhhbmRsZXJzIGZyb20gYmVpbmcgaW52b2tlZCBmb3Ig
dGhlIGV2ZW50LiBGQUxTRSB0byBwcm9wYWdhdGUgdGhlIGV2ZW50IGZ1cnRoZXIuCisgICAgICoK
KyAgICAgKiBBIEphdmFTY3JpcHQgY29uZmlybSBkaWFsb2cgd2FzIGNyZWF0ZWQsIHByb3ZpZGlu
ZyBZZXMgYW5kIE5vIGJ1dHRvbnMuCisgICAgICovCisgICAgd2Via2l0X3dlYl92aWV3X3NpZ25h
bHNbU0NSSVBUX0NPTkZJUk1dID0gZ19zaWduYWxfbmV3KCJzY3JpcHRfY29uZmlybSIsCisgICAg
ICAgICAgICBHX1RZUEVfRlJPTV9DTEFTUyh3ZWJWaWV3Q2xhc3MpLAorICAgICAgICAgICAgKEdT
aWduYWxGbGFncykoR19TSUdOQUxfUlVOX0xBU1QgfCBHX1NJR05BTF9BQ1RJT04pLAorICAgICAg
ICAgICAgR19TVFJVQ1RfT0ZGU0VUKFdlYktpdFdlYlZpZXdDbGFzcywgc2NyaXB0X2NvbmZpcm0p
LAorICAgICAgICAgICAgZ19zaWduYWxfYWNjdW11bGF0b3JfdHJ1ZV9oYW5kbGVkLAorICAgICAg
ICAgICAgTlVMTCwKKyAgICAgICAgICAgIHdlYmtpdF9tYXJzaGFsX0JPT0xFQU5fX09CSkVDVF9T
VFJJTkdfQk9PTEVBTiwKKyAgICAgICAgICAgIEdfVFlQRV9CT09MRUFOLCAzLAorICAgICAgICAg
ICAgR19UWVBFX09CSkVDVCwgR19UWVBFX1NUUklORywgR19UWVBFX0JPT0xFQU4pOworCisgICAg
LyoqCisgICAgICogV2ViS2l0V2ViVmlldzo6c2NyaXB0LXByb21wdDoKKyAgICAgKgorICAgICAq
IEB3ZWJWaWV3OiB0aGUgb2JqZWN0IG9uIHdoaWNoIHRoZSBzaWduYWwgaXMgZW1pdHRlZAorICAg
ICAqIEBmcmFtZTogdGhlIHJlbGV2YW50IGZyYW1lCisgICAgICogQG1lc3NhZ2U6IHRoZSBtZXNz
YWdlIHRleHQKKyAgICAgKiBAZGVmYXVsdDogdGhlIGRlZmF1bHQgdmFsdWUKKyAgICAgKiBAdGV4
dDogVG8gYmUgZmlsbGVkIHdpdGggdGhlIHJldHVybiB2YWx1ZSBvciBOVUxMIGlmIHRoZSBkaWFs
b2cgd2FzIGNhbmNlbGxlZC4KKyAgICAgKiBAcmV0dXJuOiBUUlVFIHRvIHN0b3Agb3RoZXIgaGFu
ZGxlcnMgZnJvbSBiZWluZyBpbnZva2VkIGZvciB0aGUgZXZlbnQuIEZBTFNFIHRvIHByb3BhZ2F0
ZSB0aGUgZXZlbnQgZnVydGhlci4KKyAgICAgKgorICAgICAqIEEgSmF2YVNjcmlwdCBwcm9tcHQg
ZGlhbG9nIHdhcyBjcmVhdGVkLCBwcm92aWRpbmcgYW4gZW50cnkgdG8gaW5wdXQgdGV4dC4KKyAg
ICAgKi8KKyAgICB3ZWJraXRfd2ViX3ZpZXdfc2lnbmFsc1tTQ1JJUFRfUFJPTVBUXSA9IGdfc2ln
bmFsX25ldygic2NyaXB0X3Byb21wdCIsCisgICAgICAgICAgICBHX1RZUEVfRlJPTV9DTEFTUyh3
ZWJWaWV3Q2xhc3MpLAorICAgICAgICAgICAgKEdTaWduYWxGbGFncykoR19TSUdOQUxfUlVOX0xB
U1QgfCBHX1NJR05BTF9BQ1RJT04pLAorICAgICAgICAgICAgR19TVFJVQ1RfT0ZGU0VUKFdlYktp
dFdlYlZpZXdDbGFzcywgc2NyaXB0X3Byb21wdCksCisgICAgICAgICAgICBnX3NpZ25hbF9hY2N1
bXVsYXRvcl90cnVlX2hhbmRsZWQsCisgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAgd2Vi
a2l0X21hcnNoYWxfQk9PTEVBTl9fT0JKRUNUX1NUUklOR19TVFJJTkdfU1RSSU5HLAorICAgICAg
ICAgICAgR19UWVBFX0JPT0xFQU4sIDQsCisgICAgICAgICAgICBHX1RZUEVfT0JKRUNULCBHX1RZ
UEVfU1RSSU5HLCBHX1RZUEVfU1RSSU5HLCBHX1RZUEVfUE9JTlRFUik7CisKKworICAgIC8qCisg
ICAgICogaW1wbGVtZW50YXRpb25zIG9mIHZpcnR1YWwgbWV0aG9kcworICAgICAqLworICAgIHdl
YlZpZXdDbGFzcy0+Y3JlYXRlX3dlYl92aWV3ID0gd2Via2l0X3dlYl92aWV3X3JlYWxfY3JlYXRl
X3dlYl92aWV3OworICAgIHdlYlZpZXdDbGFzcy0+bmF2aWdhdGlvbl9yZXF1ZXN0ZWQgPSB3ZWJr
aXRfd2ViX3ZpZXdfcmVhbF9uYXZpZ2F0aW9uX3JlcXVlc3RlZDsKKyAgICB3ZWJWaWV3Q2xhc3Mt
PndpbmRvd19vYmplY3RfY2xlYXJlZCA9IHdlYmtpdF93ZWJfdmlld19yZWFsX3dpbmRvd19vYmpl
Y3RfY2xlYXJlZDsKKyAgICB3ZWJWaWV3Q2xhc3MtPmNob29zZV9maWxlID0gd2Via2l0X3dlYl92
aWV3X3JlYWxfY2hvb3NlX2ZpbGU7CisgICAgd2ViVmlld0NsYXNzLT5zY3JpcHRfYWxlcnQgPSB3
ZWJraXRfd2ViX3ZpZXdfcmVhbF9zY3JpcHRfYWxlcnQ7CisgICAgd2ViVmlld0NsYXNzLT5zY3Jp
cHRfY29uZmlybSA9IHdlYmtpdF93ZWJfdmlld19yZWFsX3NjcmlwdF9jb25maXJtOworICAgIHdl
YlZpZXdDbGFzcy0+c2NyaXB0X3Byb21wdCA9IHdlYmtpdF93ZWJfdmlld19yZWFsX3NjcmlwdF9w
cm9tcHQ7CisgICAgd2ViVmlld0NsYXNzLT5jb25zb2xlX21lc3NhZ2UgPSB3ZWJraXRfd2ViX3Zp
ZXdfcmVhbF9jb25zb2xlX21lc3NhZ2U7CisKKyAgICBHX09CSkVDVF9DTEFTUyh3ZWJWaWV3Q2xh
c3MpLT5maW5hbGl6ZSA9IHdlYmtpdF93ZWJfdmlld19maW5hbGl6ZTsKKworICAgIEd0a1dpZGdl
dENsYXNzKiB3aWRnZXRDbGFzcyA9IEdUS19XSURHRVRfQ0xBU1Mod2ViVmlld0NsYXNzKTsKKyAg
ICB3aWRnZXRDbGFzcy0+cmVhbGl6ZSA9IHdlYmtpdF93ZWJfdmlld19yZWFsaXplOworICAgIHdp
ZGdldENsYXNzLT5leHBvc2VfZXZlbnQgPSB3ZWJraXRfd2ViX3ZpZXdfZXhwb3NlX2V2ZW50Owor
ICAgIHdpZGdldENsYXNzLT5rZXlfcHJlc3NfZXZlbnQgPSB3ZWJraXRfd2ViX3ZpZXdfa2V5X2V2
ZW50OworICAgIHdpZGdldENsYXNzLT5rZXlfcmVsZWFzZV9ldmVudCA9IHdlYmtpdF93ZWJfdmll
d19rZXlfZXZlbnQ7CisgICAgd2lkZ2V0Q2xhc3MtPmJ1dHRvbl9wcmVzc19ldmVudCA9IHdlYmtp
dF93ZWJfdmlld19idXR0b25fZXZlbnQ7CisgICAgd2lkZ2V0Q2xhc3MtPmJ1dHRvbl9yZWxlYXNl
X2V2ZW50ID0gd2Via2l0X3dlYl92aWV3X2J1dHRvbl9ldmVudDsKKyAgICB3aWRnZXRDbGFzcy0+
bW90aW9uX25vdGlmeV9ldmVudCA9IHdlYmtpdF93ZWJfdmlld19tb3Rpb25fZXZlbnQ7CisgICAg
d2lkZ2V0Q2xhc3MtPnNjcm9sbF9ldmVudCA9IHdlYmtpdF93ZWJfdmlld19zY3JvbGxfZXZlbnQ7
CisgICAgd2lkZ2V0Q2xhc3MtPnNpemVfYWxsb2NhdGUgPSB3ZWJraXRfd2ViX3ZpZXdfc2l6ZV9h
bGxvY2F0ZTsKKworICAgIEd0a0NvbnRhaW5lckNsYXNzKiBjb250YWluZXJDbGFzcyA9IEdUS19D
T05UQUlORVJfQ0xBU1Mod2ViVmlld0NsYXNzKTsKKyAgICBjb250YWluZXJDbGFzcy0+YWRkID0g
d2Via2l0X3dlYl92aWV3X2NvbnRhaW5lcl9hZGQ7CisgICAgY29udGFpbmVyQ2xhc3MtPnJlbW92
ZSA9IHdlYmtpdF93ZWJfdmlld19jb250YWluZXJfcmVtb3ZlOworICAgIGNvbnRhaW5lckNsYXNz
LT5mb3JhbGwgPSB3ZWJraXRfd2ViX3ZpZXdfY29udGFpbmVyX2ZvcmFsbDsKKworICAgIC8qCisg
ICAgICogbWFrZSB1cyBzY3JvbGxhYmxlIChlLmcuIGFkZGFibGUgdG8gYSBHdGtTY3JvbGxlZFdp
bmRvdykKKyAgICAgKi8KKyAgICB3ZWJWaWV3Q2xhc3MtPnNldF9zY3JvbGxfYWRqdXN0bWVudHMg
PSB3ZWJraXRfd2ViX3ZpZXdfc2V0X3Njcm9sbF9hZGp1c3RtZW50czsKKyAgICBHVEtfV0lER0VU
X0NMQVNTKHdlYlZpZXdDbGFzcyktPnNldF9zY3JvbGxfYWRqdXN0bWVudHNfc2lnbmFsID0gZ19z
aWduYWxfbmV3KCJzZXRfc2Nyb2xsX2FkanVzdG1lbnRzIiwKKyAgICAgICAgICAgIEdfVFlQRV9G
Uk9NX0NMQVNTKHdlYlZpZXdDbGFzcyksCisgICAgICAgICAgICAoR1NpZ25hbEZsYWdzKShHX1NJ
R05BTF9SVU5fTEFTVCB8IEdfU0lHTkFMX0FDVElPTiksCisgICAgICAgICAgICBHX1NUUlVDVF9P
RkZTRVQoV2ViS2l0V2ViVmlld0NsYXNzLCBzZXRfc2Nyb2xsX2FkanVzdG1lbnRzKSwKKyAgICAg
ICAgICAgIE5VTEwsIE5VTEwsCisgICAgICAgICAgICB3ZWJraXRfbWFyc2hhbF9WT0lEX19PQkpF
Q1RfT0JKRUNULAorICAgICAgICAgICAgR19UWVBFX05PTkUsIDIsCisgICAgICAgICAgICBHVEtf
VFlQRV9BREpVU1RNRU5ULCBHVEtfVFlQRV9BREpVU1RNRU5UKTsKK30KKworc3RhdGljIHZvaWQg
d2Via2l0X3dlYl92aWV3X2luaXQoV2ViS2l0V2ViVmlldyogd2ViVmlldykKK3sKKyAgICBXZWJL
aXRXZWJWaWV3UHJpdmF0ZSogd2ViVmlld0RhdGEgPSBXRUJLSVRfV0VCX1ZJRVdfR0VUX1BSSVZB
VEUoV0VCS0lUX1dFQl9WSUVXKHdlYlZpZXcpKTsKKyAgICB3ZWJWaWV3RGF0YS0+Y29yZVBhZ2Ug
PSBuZXcgUGFnZShuZXcgV2ViS2l0OjpDaHJvbWVDbGllbnQod2ViVmlldyksIG5ldyBXZWJLaXQ6
OkNvbnRleHRNZW51Q2xpZW50LCBuZXcgV2ViS2l0OjpFZGl0b3JDbGllbnQod2ViVmlldyksIG5l
dyBXZWJLaXQ6OkRyYWdDbGllbnQsIG5ldyBXZWJLaXQ6Okluc3BlY3RvckNsaWVudCk7CisKKyAg
ICBTZXR0aW5ncyogc2V0dGluZ3MgPSB3ZWJWaWV3RGF0YS0+Y29yZVBhZ2UtPnNldHRpbmdzKCk7
CisgICAgc2V0dGluZ3MtPnNldExvYWRzSW1hZ2VzQXV0b21hdGljYWxseSh0cnVlKTsKKyAgICBz
ZXR0aW5ncy0+c2V0TWluaW11bUZvbnRTaXplKDUpOworICAgIHNldHRpbmdzLT5zZXRNaW5pbXVt
TG9naWNhbEZvbnRTaXplKDUpOworICAgIHNldHRpbmdzLT5zZXRTaG91bGRQcmludEJhY2tncm91
bmRzKHRydWUpOworICAgIHNldHRpbmdzLT5zZXRKYXZhU2NyaXB0RW5hYmxlZCh0cnVlKTsKKyAg
ICBzZXR0aW5ncy0+c2V0RGVmYXVsdEZpeGVkRm9udFNpemUoMTQpOworICAgIHNldHRpbmdzLT5z
ZXREZWZhdWx0Rm9udFNpemUoMTQpOworICAgIHNldHRpbmdzLT5zZXRTZXJpZkZvbnRGYW1pbHko
IlRpbWVzIE5ldyBSb21hbiIpOworICAgIHNldHRpbmdzLT5zZXRTYW5zU2VyaWZGb250RmFtaWx5
KCJBcmlhbCIpOworICAgIHNldHRpbmdzLT5zZXRGaXhlZEZvbnRGYW1pbHkoIkNvdXJpZXIgTmV3
Iik7CisgICAgc2V0dGluZ3MtPnNldFN0YW5kYXJkRm9udEZhbWlseSgiQXJpYWwiKTsKKworICAg
IEdUS19XSURHRVRfU0VUX0ZMQUdTKHdlYlZpZXcsIEdUS19DQU5fRk9DVVMpOworICAgIHdlYlZp
ZXdEYXRhLT5tYWluRnJhbWUgPSBXRUJLSVRfV0VCX0ZSQU1FKHdlYmtpdF93ZWJfZnJhbWVfbmV3
KHdlYlZpZXcpKTsKKyAgICB3ZWJWaWV3RGF0YS0+ZWRpdGFibGUgPSBmYWxzZTsKK30KKworR3Rr
V2lkZ2V0KiB3ZWJraXRfd2ViX3ZpZXdfbmV3KHZvaWQpCit7CisgICAgV2ViS2l0V2ViVmlldyog
d2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyhnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfV0VCX1ZJ
RVcsIE5VTEwpKTsKKworICAgIHJldHVybiBHVEtfV0lER0VUKHdlYlZpZXcpOworfQorCit2b2lk
IHdlYmtpdF93ZWJfdmlld19zZXRfc2V0dGluZ3MoV2ViS2l0V2ViVmlldyogd2ViVmlldywgV2Vi
S2l0U2V0dGluZ3MqIHNldHRpbmdzKQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lT
X1dFQl9WSUVXKHdlYlZpZXcpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHNldHRpbmdzKTsKKwor
ICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK1dlYktpdFNldHRpbmdzKiB3ZWJraXRfd2ViX3Zp
ZXdfZ2V0X3NldHRpbmdzKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCit7CisgICAgZ19yZXR1cm5f
dmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9WSUVXKHdlYlZpZXcpLCBOVUxMKTsKKworICAgIG5v
dEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIE5VTEw7Cit9CisKK3ZvaWQgd2Via2l0X3dlYl92
aWV3X2dvX2JhY2t3YXJkKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCit7CisgICAgZ19yZXR1cm5f
aWZfZmFpbChXRUJLSVRfSVNfV0VCX1ZJRVcod2ViVmlldykpOworCisgICAgV2ViS2l0V2ViVmll
d1ByaXZhdGUqIHdlYlZpZXdEYXRhID0gV0VCS0lUX1dFQl9WSUVXX0dFVF9QUklWQVRFKHdlYlZp
ZXcpOworICAgIFdlYktpdFdlYkZyYW1lUHJpdmF0ZSogZnJhbWVEYXRhID0gV0VCS0lUX1dFQl9G
UkFNRV9HRVRfUFJJVkFURSh3ZWJWaWV3RGF0YS0+bWFpbkZyYW1lKTsKKyAgICBmcmFtZURhdGEt
PmZyYW1lLT5sb2FkZXIoKS0+Z29CYWNrT3JGb3J3YXJkKC0xKTsKK30KKwordm9pZCB3ZWJraXRf
d2ViX3ZpZXdfZ29fZm9yd2FyZChXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQoreworICAgIGdfcmV0
dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9WSUVXKHdlYlZpZXcpKTsKKworICAgIFdlYktpdFdl
YlZpZXdQcml2YXRlKiB3ZWJWaWV3RGF0YSA9IFdFQktJVF9XRUJfVklFV19HRVRfUFJJVkFURSh3
ZWJWaWV3KTsKKyAgICBXZWJLaXRXZWJGcmFtZVByaXZhdGUqIGZyYW1lRGF0YSA9IFdFQktJVF9X
RUJfRlJBTUVfR0VUX1BSSVZBVEUod2ViVmlld0RhdGEtPm1haW5GcmFtZSk7CisgICAgZnJhbWVE
YXRhLT5mcmFtZS0+bG9hZGVyKCktPmdvQmFja09yRm9yd2FyZCgxKTsKK30KKworZ2Jvb2xlYW4g
d2Via2l0X3dlYl92aWV3X2Nhbl9nb19iYWNrd2FyZChXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQor
eworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19XRUJfVklFVyh3ZWJWaWV3KSwg
RkFMU0UpOworCisgICAgV2ViS2l0V2ViVmlld1ByaXZhdGUqIHdlYlZpZXdEYXRhID0gV0VCS0lU
X1dFQl9WSUVXX0dFVF9QUklWQVRFKHdlYlZpZXcpOworICAgIFdlYktpdFdlYkZyYW1lUHJpdmF0
ZSogZnJhbWVEYXRhID0gV0VCS0lUX1dFQl9GUkFNRV9HRVRfUFJJVkFURSh3ZWJWaWV3RGF0YS0+
bWFpbkZyYW1lKTsKKyAgICByZXR1cm4gZnJhbWVEYXRhLT5mcmFtZS0+bG9hZGVyKCktPmNhbkdv
QmFja09yRm9yd2FyZCgtMSk7Cit9CisKK2dib29sZWFuIHdlYmtpdF93ZWJfdmlld19jYW5fZ29f
Zm9yd2FyZChXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9m
YWlsKFdFQktJVF9JU19XRUJfVklFVyh3ZWJWaWV3KSwgRkFMU0UpOworCisgICAgV2ViS2l0V2Vi
Vmlld1ByaXZhdGUqIHdlYlZpZXdEYXRhID0gV0VCS0lUX1dFQl9WSUVXX0dFVF9QUklWQVRFKHdl
YlZpZXcpOworICAgIFdlYktpdFdlYkZyYW1lUHJpdmF0ZSogZnJhbWVEYXRhID0gV0VCS0lUX1dF
Ql9GUkFNRV9HRVRfUFJJVkFURSh3ZWJWaWV3RGF0YS0+bWFpbkZyYW1lKTsKKyAgICByZXR1cm4g
ZnJhbWVEYXRhLT5mcmFtZS0+bG9hZGVyKCktPmNhbkdvQmFja09yRm9yd2FyZCgxKTsKK30KKwor
dm9pZCB3ZWJraXRfd2ViX3ZpZXdfb3BlbihXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBjb25zdCBn
Y2hhciogdXJpKQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9WSUVXKHdl
YlZpZXcpKTsKKworICAgIFdlYktpdFdlYlZpZXdQcml2YXRlKiB3ZWJWaWV3RGF0YSA9IFdFQktJ
VF9XRUJfVklFV19HRVRfUFJJVkFURSh3ZWJWaWV3KTsKKyAgICBXZWJLaXRXZWJGcmFtZVByaXZh
dGUqIGZyYW1lRGF0YSA9IFdFQktJVF9XRUJfRlJBTUVfR0VUX1BSSVZBVEUod2ViVmlld0RhdGEt
Pm1haW5GcmFtZSk7CisKKyAgICBEZXByZWNhdGVkU3RyaW5nIHN0cmluZyA9IERlcHJlY2F0ZWRT
dHJpbmc6OmZyb21VdGY4KHVyaSk7CisgICAgZnJhbWVEYXRhLT5mcmFtZS0+bG9hZGVyKCktPmxv
YWQoUmVzb3VyY2VSZXF1ZXN0KEtVUkwoc3RyaW5nKSkpOworfQorCit2b2lkIHdlYmtpdF93ZWJf
dmlld19yZWxvYWQoV2ViS2l0V2ViVmlldyogd2ViVmlldykKK3sKKyAgICBnX3JldHVybl9pZl9m
YWlsKFdFQktJVF9JU19XRUJfVklFVyh3ZWJWaWV3KSk7CisKKyAgICBXZWJLaXRXZWJWaWV3UHJp
dmF0ZSogd2ViVmlld0RhdGEgPSBXRUJLSVRfV0VCX1ZJRVdfR0VUX1BSSVZBVEUod2ViVmlldyk7
CisgICAgV2ViS2l0V2ViRnJhbWVQcml2YXRlKiBmcmFtZURhdGEgPSBXRUJLSVRfV0VCX0ZSQU1F
X0dFVF9QUklWQVRFKHdlYlZpZXdEYXRhLT5tYWluRnJhbWUpOworICAgIGZyYW1lRGF0YS0+ZnJh
bWUtPmxvYWRlcigpLT5yZWxvYWQoKTsKK30KKwordm9pZCB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9z
dHJpbmcoV2ViS2l0V2ViVmlldyogd2ViVmlldywgY29uc3QgZ2NoYXIqIGNvbnRlbnQsIGNvbnN0
IGdjaGFyKiBjb250ZW50TWltZVR5cGUsIGNvbnN0IGdjaGFyKiBjb250ZW50RW5jb2RpbmcsIGNv
bnN0IGdjaGFyKiBiYXNlVXJpKQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX1dF
Ql9WSUVXKHdlYlZpZXcpKTsKKworICAgIFdlYktpdFdlYlZpZXdQcml2YXRlKiB3ZWJWaWV3RGF0
YSA9IFdFQktJVF9XRUJfVklFV19HRVRfUFJJVkFURSh3ZWJWaWV3KTsKKyAgICBXZWJLaXRXZWJG
cmFtZVByaXZhdGUqIGZyYW1lRGF0YSA9IFdFQktJVF9XRUJfRlJBTUVfR0VUX1BSSVZBVEUod2Vi
Vmlld0RhdGEtPm1haW5GcmFtZSk7CisKKyAgICBLVVJMIHVybChEZXByZWNhdGVkU3RyaW5nOjpm
cm9tVXRmOChiYXNlVXJpKSk7CisgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gc2hhcmVkQnVmZmVy
ID0gbmV3IFNoYXJlZEJ1ZmZlcihzdHJkdXAoY29udGVudCksIHN0cmxlbihjb250ZW50KSk7Cisg
ICAgU3Vic3RpdHV0ZURhdGEgc3Vic3RpdHV0ZURhdGEoc2hhcmVkQnVmZmVyLnJlbGVhc2UoKSwg
U3RyaW5nKGNvbnRlbnRNaW1lVHlwZSksIFN0cmluZyhjb250ZW50RW5jb2RpbmcpLCBLVVJMKCJh
Ym91dDpibGFuayIpLCB1cmwpOworCisgICAgZnJhbWVEYXRhLT5mcmFtZS0+bG9hZGVyKCktPmxv
YWQoUmVzb3VyY2VSZXF1ZXN0KHVybCksIHN1YnN0aXR1dGVEYXRhKTsKK30KKwordm9pZCB3ZWJr
aXRfd2ViX3ZpZXdfbG9hZF9odG1sX3N0cmluZyhXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBjb25z
dCBnY2hhciogY29udGVudCwgY29uc3QgZ2NoYXIqIGJhc2VVcmwpCit7CisgICAgZ19yZXR1cm5f
aWZfZmFpbChXRUJLSVRfSVNfV0VCX1ZJRVcod2ViVmlldykpOworCisgICAgd2Via2l0X3dlYl92
aWV3X2xvYWRfc3RyaW5nKHdlYlZpZXcsIGNvbnRlbnQsICJ0ZXh0L2h0bWwiLCAiVVRGLTgiLCBi
YXNlVXJsKTsKK30KKwordm9pZCB3ZWJraXRfd2ViX3ZpZXdfc3RvcF9sb2FkaW5nKFdlYktpdFdl
YlZpZXcqIHdlYlZpZXcpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfV0VCX1ZJ
RVcod2ViVmlldykpOworCisgICAgV2ViS2l0V2ViVmlld1ByaXZhdGUqIHdlYlZpZXdEYXRhID0g
V0VCS0lUX1dFQl9WSUVXX0dFVF9QUklWQVRFKHdlYlZpZXcpOworICAgIFdlYktpdFdlYkZyYW1l
UHJpdmF0ZSogZnJhbWVEYXRhID0gV0VCS0lUX1dFQl9GUkFNRV9HRVRfUFJJVkFURSh3ZWJWaWV3
RGF0YS0+bWFpbkZyYW1lKTsKKworICAgIGlmIChGcmFtZUxvYWRlciogbG9hZGVyID0gZnJhbWVE
YXRhLT5mcmFtZS0+bG9hZGVyKCkpCisgICAgICAgIGxvYWRlci0+c3RvcEFsbExvYWRlcnMoKTsK
K30KKworV2ViS2l0V2ViRnJhbWUqIHdlYmtpdF93ZWJfdmlld19nZXRfbWFpbl9mcmFtZShXZWJL
aXRXZWJWaWV3KiB3ZWJWaWV3KQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9J
U19XRUJfVklFVyh3ZWJWaWV3KSwgTlVMTCk7CisKKyAgICBXZWJLaXRXZWJWaWV3UHJpdmF0ZSog
d2ViVmlld0RhdGEgPSBXRUJLSVRfV0VCX1ZJRVdfR0VUX1BSSVZBVEUod2ViVmlldyk7CisgICAg
cmV0dXJuIHdlYlZpZXdEYXRhLT5tYWluRnJhbWU7Cit9CisKK3ZvaWQgd2Via2l0X3dlYl92aWV3
X2V4ZWN1dGVfc2NyaXB0KFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIGNvbnN0IGdjaGFyKiBzY3Jp
cHQpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfV0VCX1ZJRVcod2ViVmlldykp
OworICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2NyaXB0KTsKKworICAgIFdlYktpdFdlYlZpZXdQcml2
YXRlKiB3ZWJWaWV3RGF0YSA9IFdFQktJVF9XRUJfVklFV19HRVRfUFJJVkFURSh3ZWJWaWV3KTsK
KyAgICBXZWJLaXRXZWJGcmFtZVByaXZhdGUqIGZyYW1lRGF0YSA9IFdFQktJVF9XRUJfRlJBTUVf
R0VUX1BSSVZBVEUod2ViVmlld0RhdGEtPm1haW5GcmFtZSk7CisKKyAgICBpZiAoRnJhbWVMb2Fk
ZXIqIGxvYWRlciA9IGZyYW1lRGF0YS0+ZnJhbWUtPmxvYWRlcigpKQorICAgICAgICBsb2FkZXIt
PmV4ZWN1dGVTY3JpcHQoU3RyaW5nOjpmcm9tVVRGOChzY3JpcHQpLCB0cnVlKTsKK30KKworLyoq
CisgKiB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2VkaXRhYmxlOgorICogQHdlYlZpZXc6IGEgI1dlYktp
dFdlYlZpZXcKKyAqCisgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIHVzZXIgaXMgYWxsb3dlZCB0byBl
ZGl0IHRoZSBkb2N1bWVudC4KKyAqCisgKiBSZXR1cm5zICVUUlVFIGlmIEB3ZWJWaWV3IGFsbG93
cyB0aGUgdXNlciB0byBlZGl0IHRoZSBIVE1MIGRvY3VtZW50LCAlRkFMU0UgaWYKKyAqIGl0IGRv
ZXNuJ3QuIFlvdSBjYW4gY2hhbmdlIEB3ZWJWaWV3J3MgZG9jdW1lbnQgcHJvZ3JhbW1hdGljYWxs
eSByZWdhcmRsZXNzIG9mCisgKiB0aGlzIHNldHRpbmcuCisgKgorICogUmV0dXJuIHZhbHVlOiBh
ICNnYm9vbGVhbiBpbmRpY2F0aW5nIHRoZSBlZGl0YWJsZSBzdGF0ZQorICovCitnYm9vbGVhbiB3
ZWJraXRfd2ViX3ZpZXdfZ2V0X2VkaXRhYmxlKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCit7Cisg
ICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9WSUVXKHdlYlZpZXcpLCBGQUxT
RSk7CisKKyAgICBXZWJLaXRXZWJWaWV3UHJpdmF0ZSogd2ViVmlld0RhdGEgPSBXRUJLSVRfV0VC
X1ZJRVdfR0VUX1BSSVZBVEUod2ViVmlldyk7CisgICAgQVNTRVJUKHdlYlZpZXdEYXRhKTsKKwor
ICAgIHJldHVybiB3ZWJWaWV3RGF0YS0+ZWRpdGFibGU7Cit9CisKKy8qKgorICogd2Via2l0X3dl
Yl92aWV3X3NldF9lZGl0YWJsZToKKyAqIEB3ZWJWaWV3OiBhICNXZWJLaXRXZWJWaWV3CisgKiBA
ZmxhZzogYSAjZ2Jvb2xlYW4gaW5kaWNhdGluZyB0aGUgZWRpdGFibGUgc3RhdGUKKyAqCisgKiBT
ZXRzIHdoZXRoZXIgQHdlYlZpZXcgYWxsb3dzIHRoZSB1c2VyIHRvIGVkaXQgaXRzIEhUTUwgZG9j
dW1lbnQuCisgKgorICogSWYgQGZsYWcgaXMgJVRSVUUsIEB3ZWJWaWV3IGFsbG93cyB0aGUgdXNl
ciB0byBlZGl0IHRoZSBkb2N1bWVudC4gSWYgQGZsYWcgaXMKKyAqICVGQUxTRSwgYW4gZWxlbWVu
dCBpbiBAd2ViVmlldydzIGRvY3VtZW50IGNhbiBvbmx5IGJlIGVkaXRlZCBpZiB0aGUKKyAqIENP
TlRFTlRFRElUQUJMRSBhdHRyaWJ1dGUgaGFzIGJlZW4gc2V0IG9uIHRoZSBlbGVtZW50IG9yIG9u
ZSBvZiBpdHMgcGFyZW50CisgKiBlbGVtZW50cy4gWW91IGNhbiBjaGFuZ2UgQHdlYlZpZXcncyBk
b2N1bWVudCBwcm9ncmFtbWF0aWNhbGx5IHJlZ2FyZGxlc3Mgb2YKKyAqIHRoaXMgc2V0dGluZy4g
QnkgZGVmYXVsdCBhICNXZWJLaXRXZWJWaWV3IGlzIG5vdCBlZGl0YWJsZS4KKworICogTm9ybWFs
bHksIGFuIEhUTUwgZG9jdW1lbnQgaXMgbm90IGVkaXRhYmxlIHVubGVzcyB0aGUgZWxlbWVudHMg
d2l0aGluIHRoZQorICogZG9jdW1lbnQgYXJlIGVkaXRhYmxlLiBUaGlzIGZ1bmN0aW9uIHByb3Zp
ZGVzIGEgbG93LWxldmVsIHdheSB0byBtYWtlIHRoZQorICogY29udGVudHMgb2YgYSAjV2ViS2l0
V2ViVmlldyBlZGl0YWJsZSB3aXRob3V0IGFsdGVyaW5nIHRoZSBkb2N1bWVudCBvciBET00KKyAq
IHN0cnVjdHVyZS4KKyAqLwordm9pZCB3ZWJraXRfd2ViX3ZpZXdfc2V0X2VkaXRhYmxlKFdlYktp
dFdlYlZpZXcqIHdlYlZpZXcsIGdib29sZWFuIGZsYWcpCit7CisgICAgZ19yZXR1cm5faWZfZmFp
bChXRUJLSVRfSVNfV0VCX1ZJRVcod2ViVmlldykpOworICAgIGZsYWcgPSBmbGFnICE9IEZBTFNF
OworCisgICAgV2ViS2l0V2ViVmlld1ByaXZhdGUqIHdlYlZpZXdEYXRhID0gV0VCS0lUX1dFQl9W
SUVXX0dFVF9QUklWQVRFKHdlYlZpZXcpOworICAgIEFTU0VSVCh3ZWJWaWV3RGF0YSk7CisKKyAg
ICBGcmFtZSogbWFpbkZyYW1lID0gY29yZSh3ZWJWaWV3RGF0YS0+bWFpbkZyYW1lKTsKKyAgICBn
X3JldHVybl9pZl9mYWlsKG1haW5GcmFtZSk7CisKKyAgICAvLyBUT0RPOiBXaGF0IGhhcHBlbnMg
d2hlbiB0aGUgZnJhbWUgaXMgcmVwbGFjZWQ/CisgICAgaWYgKGZsYWcgPT0gd2ViVmlld0RhdGEt
PmVkaXRhYmxlKQorICAgICAgICByZXR1cm47CisKKyAgICB3ZWJWaWV3RGF0YS0+ZWRpdGFibGUg
PSBmbGFnOworCisgICAgaWYgKGZsYWcpIHsKKyAgICAgICAgbWFpbkZyYW1lLT5hcHBseUVkaXRp
bmdTdHlsZVRvQm9keUVsZW1lbnQoKTsKKyAgICAgICAgLy8gVE9ETzogSWYgdGhlIFdlYktpdFdl
YlZpZXcgaXMgbWFkZSBlZGl0YWJsZSBhbmQgdGhlIHNlbGVjdGlvbiBpcyBlbXB0eSwgc2V0IGl0
IHRvIHNvbWV0aGluZy4KKyAgICAgICAgLy9pZiAoIXdlYmtpdF93ZWJfdmlld19nZXRfc2VsZWN0
ZWRfZG9tX3JhbmdlKHdlYlZpZXcpKQorICAgICAgICAvLyAgICBtYWluRnJhbWUtPnNldFNlbGVj
dGlvbkZyb21Ob25lKCk7CisgICAgfSBlbHNlCisgICAgICAgIG1haW5GcmFtZS0+cmVtb3ZlRWRp
dGluZ1N0eWxlRnJvbUJvZHlFbGVtZW50KCk7Cit9CisKK30KSW5kZXg6IFdlYktpdC9ndGsvV2Vi
Vmlldy93ZWJraXR3ZWJ2aWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2d0ay9XZWJWaWV3L3dl
YmtpdHdlYnZpZXcuaAkocmV2aXNpb24gMCkKKysrIFdlYktpdC9ndGsvV2ViVmlldy93ZWJraXR3
ZWJ2aWV3LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTM1IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAK
KyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAK
KyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlLCBJbmMuICgiQXBwbGUiKSBub3IgdGhl
IG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMi
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXRUJLSVRfV0VCX1ZJRVdfSAor
I2RlZmluZSBXRUJLSVRfV0VCX1ZJRVdfSAorCisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorCisjaW5j
bHVkZSAid2Via2l0ZGVmaW5lcy5oIgorI2luY2x1ZGUgIndlYmtpdHNldHRpbmdzLmgiCisKK0df
QkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfVFlQRV9XRUJfVklFVyAgICAgICAgICAgICh3
ZWJraXRfd2ViX3ZpZXdfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX1dFQl9WSUVXKG9iaikg
ICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9UWVBF
X1dFQl9WSUVXLCBXZWJLaXRXZWJWaWV3KSkKKyNkZWZpbmUgV0VCS0lUX1dFQl9WSUVXX0NMQVNT
KGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9UWVBF
X1dFQl9WSUVXLCBXZWJLaXRXZWJWaWV3Q2xhc3MpKQorI2RlZmluZSBXRUJLSVRfSVNfV0VCX1ZJ
RVcob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lU
X1RZUEVfV0VCX1ZJRVcpKQorI2RlZmluZSBXRUJLSVRfSVNfV0VCX1ZJRVdfQ0xBU1Moa2xhc3Mp
IChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX1RZUEVfV0VCX1ZJRVcp
KQorI2RlZmluZSBXRUJLSVRfV0VCX1ZJRVdfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFO
Q0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX1RZUEVfV0VCX1ZJRVcsIFdlYktpdFdlYlZpZXdD
bGFzcykpCisKKwordHlwZWRlZiBlbnVtIHsKKyAgICBXRUJLSVRfTkFWSUdBVElPTl9SRVNQT05T
RV9BQ0NFUFQsCisgICAgV0VCS0lUX05BVklHQVRJT05fUkVTUE9OU0VfSUdOT1JFLAorICAgIFdF
QktJVF9OQVZJR0FUSU9OX1JFU1BPTlNFX0RPV05MT0FECit9IFdlYktpdE5hdmlnYXRpb25SZXNw
b25zZTsKKworCisKK3N0cnVjdCBfV2ViS2l0V2ViVmlldyB7CisgICAgR3RrQ29udGFpbmVyIHBh
cmVudDsKK307CisKK3N0cnVjdCBfV2ViS2l0V2ViVmlld0NsYXNzIHsKKyAgICBHdGtDb250YWlu
ZXJDbGFzcyBwYXJlbnQ7CisKKyAgICAvKgorICAgICAqIGRlZmF1bHQgaGFuZGxlci92aXJ0dWFs
IG1ldGhvZHMKKyAgICAgKiBESVNDVVNTOiBjcmVhdGVfd2ViX3ZpZXcgbmVlZHMgYSByZXF1ZXN0
IGFuZCBzaG91bGQgd2UgbWFrZSB0aGlzIGEgc2lnbmFsIHdpdGggZGVmYXVsdCBoYW5kbGVyPyB0
aGlzIHdvdWxkCisgICAgICogcmVxdWlyZSBzb21lb25lIGRvaW5nIGEgZ19zaWduYWxfc3RvcF9l
bWlzc2lvbl9ieV9uYW1lCisgICAgICogV2ViVUlEZWxlZ2F0ZSBoYXMgbm90aGluZyBmb3IgY3Jl
YXRlX2ZyYW1lLCBXZWJQb2xpY3lEZWxlZ2F0ZSBhcyB3ZWxsLi4uCisgICAgICovCisgICAgV2Vi
S2l0V2ViVmlldyogICgqY3JlYXRlX3dlYl92aWV3KSAgKFdlYktpdFdlYlZpZXcqIHdlYl92aWV3
KTsKKworICAgIC8qCisgICAgICogVE9ETzogRklYTUU6IENyZWF0ZSBzb21ldGhpbmcgbGlrZSBX
ZWJQb2xpY3lEZWNpc2lvbkxpc3RlbmVyX1Byb3RvY29sIGluc3RlYWQKKyAgICAgKi8KKyAgICBX
ZWJLaXROYXZpZ2F0aW9uUmVzcG9uc2UgKCpuYXZpZ2F0aW9uX3JlcXVlc3RlZCkgKFdlYktpdFdl
YlZpZXcqIHdlYl92aWV3LCBXZWJLaXRXZWJGcmFtZSogZnJhbWUsIFdlYktpdE5ldHdvcmtSZXF1
ZXN0KiByZXF1ZXN0KTsKKworICAgIHZvaWQgKCp3aW5kb3dfb2JqZWN0X2NsZWFyZWQpIChXZWJL
aXRXZWJWaWV3KiB3ZWJfdmlldywgV2ViS2l0V2ViRnJhbWUqIGZyYW1lLCBKU0dsb2JhbENvbnRl
eHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgd2luZG93X29iamVjdCk7CisgICAgZ2NoYXIqICAg
KCpjaG9vc2VfZmlsZSkgKFdlYktpdFdlYlZpZXcqIHdlYl92aWV3LCBXZWJLaXRXZWJGcmFtZSog
ZnJhbWUsIGNvbnN0IGdjaGFyKiBvbGRfZmlsZSk7CisgICAgZ2Jvb2xlYW4gKCpzY3JpcHRfYWxl
cnQpIChXZWJLaXRXZWJWaWV3KiB3ZWJfdmlldywgV2ViS2l0V2ViRnJhbWUqIGZyYW1lLCBjb25z
dCBnY2hhciogYWxlcnRfbWVzc2FnZSk7CisgICAgZ2Jvb2xlYW4gKCpzY3JpcHRfY29uZmlybSkg
KFdlYktpdFdlYlZpZXcqIHdlYl92aWV3LCBXZWJLaXRXZWJGcmFtZSogZnJhbWUsIGNvbnN0IGdj
aGFyKiBjb25maXJtX21lc3NhZ2UsIGdib29sZWFuKiBkaWRfY29uZmlybSk7CisgICAgZ2Jvb2xl
YW4gKCpzY3JpcHRfcHJvbXB0KSAoV2ViS2l0V2ViVmlldyogd2ViX3ZpZXcsIFdlYktpdFdlYkZy
YW1lKiBmcmFtZSwgY29uc3QgZ2NoYXIqIG1lc3NhZ2UsIGNvbnN0IGdjaGFyKiBkZWZhdWx0X3Zh
bHVlLCBnY2hhcioqIHZhbHVlKTsKKyAgICBnYm9vbGVhbiAoKmNvbnNvbGVfbWVzc2FnZSkgKFdl
YktpdFdlYlZpZXcqIHdlYl92aWV3LCBjb25zdCBnY2hhciogbWVzc2FnZSwgdW5zaWduZWQgaW50
IGxpbmVfbnVtYmVyLCBjb25zdCBnY2hhciogc291cmNlX2lkKTsKKworICAgIC8qCisgICAgICog
aW50ZXJuYWwKKyAgICAgKi8KKyAgICB2b2lkICAgKCpzZXRfc2Nyb2xsX2FkanVzdG1lbnRzKSAo
V2ViS2l0V2ViVmlldyosIEd0a0FkanVzdG1lbnQqLCBHdGtBZGp1c3RtZW50Kik7Cit9OworCitX
RUJLSVRfQVBJIEdUeXBlCit3ZWJraXRfd2ViX3ZpZXdfZ2V0X3R5cGUgKHZvaWQpOworCitXRUJL
SVRfQVBJIEd0a1dpZGdldCoKK3dlYmtpdF93ZWJfdmlld19uZXcgKHZvaWQpOworCitXRUJLSVRf
QVBJIGdib29sZWFuCit3ZWJraXRfd2ViX3ZpZXdfY2FuX2dvX2JhY2t3YXJkIChXZWJLaXRXZWJW
aWV3KiB3ZWJfdmlldyk7CisKK1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF93ZWJfdmlld19j
YW5fZ29fZm9yd2FyZCAoV2ViS2l0V2ViVmlldyogd2ViX3ZpZXcpOworCitXRUJLSVRfQVBJIHZv
aWQKK3dlYmtpdF93ZWJfdmlld19nb19iYWNrd2FyZCAoV2ViS2l0V2ViVmlldyogd2ViX3ZpZXcp
OworCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF93ZWJfdmlld19nb19mb3J3YXJkIChXZWJLaXRX
ZWJWaWV3KiB3ZWJfdmlldyk7CisKK1dFQktJVF9BUEkgdm9pZAord2Via2l0X3dlYl92aWV3X3N0
b3BfbG9hZGluZyAoV2ViS2l0V2ViVmlldyogd2ViX3ZpZXcpOworCitXRUJLSVRfQVBJIHZvaWQK
K3dlYmtpdF93ZWJfdmlld19vcGVuIChXZWJLaXRXZWJWaWV3KiB3ZWJfdmlldywgY29uc3QgZ2No
YXIqIHVyaSk7CisKK1dFQktJVF9BUEkgdm9pZAord2Via2l0X3dlYl92aWV3X3JlbG9hZCAoV2Vi
S2l0V2ViVmlldyAqd2ViX3ZpZXcpOworCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF93ZWJfdmll
d19sb2FkX3N0cmluZyAoV2ViS2l0V2ViVmlldyogd2ViX3ZpZXcsIGNvbnN0IGdjaGFyKiBjb250
ZW50LCBjb25zdCBnY2hhciogY29udGVudF9taW1lX3R5cGUsIGNvbnN0IGdjaGFyKiBjb250ZW50
X2VuY29kaW5nLCBjb25zdCBnY2hhciogYmFzZV91cmkpOworCitXRUJLSVRfQVBJIHZvaWQKK3dl
YmtpdF93ZWJfdmlld19sb2FkX2h0bWxfc3RyaW5nIChXZWJLaXRXZWJWaWV3KiB3ZWJfdmlldywg
Y29uc3QgZ2NoYXIqIGNvbnRlbnQsIGNvbnN0IGdjaGFyKiBiYXNlX3VyaSk7CisKK1dFQktJVF9B
UEkgV2ViS2l0V2ViRnJhbWUqCit3ZWJraXRfd2ViX3ZpZXdfZ2V0X21haW5fZnJhbWUgKFdlYktp
dFdlYlZpZXcqIHdlYl92aWV3KTsKKworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfd2ViX3ZpZXdf
ZXhlY3V0ZV9zY3JpcHQgKFdlYktpdFdlYlZpZXcqIHdlYl92aWV3LCBjb25zdCBnY2hhciogc2Ny
aXB0KTsKKworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0X3dlYl92aWV3X2dldF9lZGl0YWJs
ZSAoV2ViS2l0V2ViVmlldyogd2ViX3ZpZXcpOworCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF93
ZWJfdmlld19zZXRfZWRpdGFibGUgKFdlYktpdFdlYlZpZXcqIHdlYl92aWV3LCBnYm9vbGVhbiBm
bGFnKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmCkluZGV4OiBXZWJLaXRUb29scy9HdGtMYXVu
Y2hlci9tYWluLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvR3RrTGF1bmNoZXIvbWFpbi5j
CShyZXZpc2lvbiAyODI1MSkKKysrIFdlYktpdFRvb2xzL0d0a0xhdW5jaGVyL21haW4uYwkod29y
a2luZyBjb3B5KQpAQCAtMjQsMTQgKzI0LDE0IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNp
bmNsdWRlICJ3ZWJraXRndGtwYWdlLmgiCi0jaW5jbHVkZSAid2Via2l0Z3RrZ2xvYmFsLmgiCisj
aW5jbHVkZSAid2Via2l0d2Vidmlldy5oIgorI2luY2x1ZGUgIndlYmtpdGdsb2JhbC5oIgogI2lu
Y2x1ZGUgPGd0ay9ndGsuaD4KIAogc3RhdGljIEd0a1dpZGdldCogbWFpbl93aW5kb3c7CiBzdGF0
aWMgR3RrV2lkZ2V0KiB1cmlfZW50cnk7CiBzdGF0aWMgR3RrU3RhdHVzYmFyKiBtYWluX3N0YXR1
c2JhcjsKLXN0YXRpYyBXZWJLaXRQYWdlKiB3ZWJfcGFnZTsKK3N0YXRpYyBXZWJLaXRXZWJWaWV3
KiB3ZWJfdmlldzsKIHN0YXRpYyBnY2hhciogbWFpbl90aXRsZTsKIHN0YXRpYyBnaW50IGxvYWRf
cHJvZ3Jlc3M7CiBzdGF0aWMgZ3VpbnQgc3RhdHVzX2NvbnRleHRfaWQ7CkBAIC00MSw3ICs0MSw3
IEBAIGFjdGl2YXRlX3VyaV9lbnRyeV9jYiAoR3RrV2lkZ2V0KiBlbnRyeSwKIHsKICAgICBjb25z
dCBnY2hhciogdXJpID0gZ3RrX2VudHJ5X2dldF90ZXh0IChHVEtfRU5UUlkgKGVudHJ5KSk7CiAg
ICAgZ19hc3NlcnQgKHVyaSk7Ci0gICAgd2Via2l0X3BhZ2Vfb3BlbiAod2ViX3BhZ2UsIHVyaSk7
CisgICAgd2Via2l0X3dlYl92aWV3X29wZW4gKHdlYl92aWV3LCB1cmkpOwogfQogCiBzdGF0aWMg
dm9pZApAQCAtNTcsNyArNTcsNyBAQCB1cGRhdGVfdGl0bGUgKEd0a1dpbmRvdyogd2luZG93KQog
fQogCiBzdGF0aWMgdm9pZAotbGlua19ob3Zlcl9jYiAoV2ViS2l0UGFnZSogcGFnZSwgY29uc3Qg
Z2NoYXIqIHRpdGxlLCBjb25zdCBnY2hhciogbGluaywgZ3BvaW50ZXIgZGF0YSkKK2xpbmtfaG92
ZXJfY2IgKFdlYktpdFdlYlZpZXcqIHBhZ2UsIGNvbnN0IGdjaGFyKiB0aXRsZSwgY29uc3QgZ2No
YXIqIGxpbmssIGdwb2ludGVyIGRhdGEpCiB7CiAgICAgLyogdW5kZXJmbG93IGlzIGFsbG93ZWQg
Ki8KICAgICBndGtfc3RhdHVzYmFyX3BvcCAobWFpbl9zdGF0dXNiYXIsIHN0YXR1c19jb250ZXh0
X2lkKTsKQEAgLTY2LDcgKzY2LDcgQEAgbGlua19ob3Zlcl9jYiAoV2ViS2l0UGFnZSogcGFnZSwg
Y29uc3QgZwogfQogCiBzdGF0aWMgdm9pZAotdGl0bGVfY2hhbmdlX2NiIChXZWJLaXRQYWdlKiBw
YWdlLCBjb25zdCBnY2hhciogdGl0bGUsIGNvbnN0IGdjaGFyKiB1cmksIGdwb2ludGVyIGRhdGEp
Cit0aXRsZV9jaGFuZ2VfY2IgKFdlYktpdFdlYlZpZXcqIHBhZ2UsIGNvbnN0IGdjaGFyKiB0aXRs
ZSwgY29uc3QgZ2NoYXIqIHVyaSwgZ3BvaW50ZXIgZGF0YSkKIHsKICAgICBndGtfZW50cnlfc2V0
X3RleHQgKEdUS19FTlRSWSAodXJpX2VudHJ5KSwgdXJpKTsKIApAQCAtNzcsNyArNzcsNyBAQCB0
aXRsZV9jaGFuZ2VfY2IgKFdlYktpdFBhZ2UqIHBhZ2UsIGNvbnN0CiB9CiAKIHN0YXRpYyB2b2lk
Ci1wcm9ncmVzc19jaGFuZ2VfY2IgKFdlYktpdFBhZ2UqIHBhZ2UsIGdpbnQgcHJvZ3Jlc3MsIGdw
b2ludGVyIGRhdGEpCitwcm9ncmVzc19jaGFuZ2VfY2IgKFdlYktpdFdlYlZpZXcqIHBhZ2UsIGdp
bnQgcHJvZ3Jlc3MsIGdwb2ludGVyIGRhdGEpCiB7CiAgICAgbG9hZF9wcm9ncmVzcyA9IHByb2dy
ZXNzOwogICAgIHVwZGF0ZV90aXRsZSAoR1RLX1dJTkRPVyAobWFpbl93aW5kb3cpKTsKQEAgLTky
LDEzICs5MiwxMyBAQCBkZXN0cm95X2NiIChHdGtXaWRnZXQqIHdpZGdldCwgZ3BvaW50ZXIgCiBz
dGF0aWMgdm9pZAogZ29fYmFja19jYiAoR3RrV2lkZ2V0KiB3aWRnZXQsIGdwb2ludGVyIGRhdGEp
CiB7Ci0gICAgd2Via2l0X3BhZ2VfZ29fYmFja3dhcmQgKHdlYl9wYWdlKTsKKyAgICB3ZWJraXRf
d2ViX3ZpZXdfZ29fYmFja3dhcmQgKHdlYl92aWV3KTsKIH0KIAogc3RhdGljIHZvaWQKIGdvX2Zv
cndhcmRfY2IgKEd0a1dpZGdldCogd2lkZ2V0LCBncG9pbnRlciBkYXRhKQogewotICAgIHdlYmtp
dF9wYWdlX2dvX2ZvcndhcmQgKHdlYl9wYWdlKTsKKyAgICB3ZWJraXRfd2ViX3ZpZXdfZ29fZm9y
d2FyZCAod2ViX3ZpZXcpOwogfQogCiBzdGF0aWMgR3RrV2lkZ2V0KgpAQCAtMTA3LDEyICsxMDcs
MTIgQEAgY3JlYXRlX2Jyb3dzZXIgKCkKICAgICBHdGtXaWRnZXQqIHNjcm9sbGVkX3dpbmRvdyA9
IGd0a19zY3JvbGxlZF93aW5kb3dfbmV3IChOVUxMLCBOVUxMKTsKICAgICBndGtfc2Nyb2xsZWRf
d2luZG93X3NldF9wb2xpY3kgKEdUS19TQ1JPTExFRF9XSU5ET1cgKHNjcm9sbGVkX3dpbmRvdyks
IEdUS19QT0xJQ1lfQVVUT01BVElDLCBHVEtfUE9MSUNZX0FVVE9NQVRJQyk7CiAKLSAgICB3ZWJf
cGFnZSA9IFdFQktJVF9QQUdFICh3ZWJraXRfcGFnZV9uZXcgKCkpOwotICAgIGd0a19jb250YWlu
ZXJfYWRkIChHVEtfQ09OVEFJTkVSIChzY3JvbGxlZF93aW5kb3cpLCBHVEtfV0lER0VUICh3ZWJf
cGFnZSkpOworICAgIHdlYl92aWV3ID0gV0VCS0lUX1dFQl9WSUVXICh3ZWJraXRfd2ViX3ZpZXdf
bmV3ICgpKTsKKyAgICBndGtfY29udGFpbmVyX2FkZCAoR1RLX0NPTlRBSU5FUiAoc2Nyb2xsZWRf
d2luZG93KSwgR1RLX1dJREdFVCAod2ViX3ZpZXcpKTsKIAotICAgIGdfc2lnbmFsX2Nvbm5lY3Qg
KEdfT0JKRUNUICh3ZWJfcGFnZSksICJ0aXRsZS1jaGFuZ2VkIiwgR19DQUxMQkFDSyAodGl0bGVf
Y2hhbmdlX2NiKSwgd2ViX3BhZ2UpOwotICAgIGdfc2lnbmFsX2Nvbm5lY3QgKEdfT0JKRUNUICh3
ZWJfcGFnZSksICJsb2FkLXByb2dyZXNzLWNoYW5nZWQiLCBHX0NBTExCQUNLIChwcm9ncmVzc19j
aGFuZ2VfY2IpLCB3ZWJfcGFnZSk7Ci0gICAgZ19zaWduYWxfY29ubmVjdCAoR19PQkpFQ1QgKHdl
Yl9wYWdlKSwgImhvdmVyaW5nLW92ZXItbGluayIsIEdfQ0FMTEJBQ0sgKGxpbmtfaG92ZXJfY2Ip
LCB3ZWJfcGFnZSk7CisgICAgZ19zaWduYWxfY29ubmVjdCAoR19PQkpFQ1QgKHdlYl92aWV3KSwg
InRpdGxlLWNoYW5nZWQiLCBHX0NBTExCQUNLICh0aXRsZV9jaGFuZ2VfY2IpLCB3ZWJfdmlldyk7
CisgICAgZ19zaWduYWxfY29ubmVjdCAoR19PQkpFQ1QgKHdlYl92aWV3KSwgImxvYWQtcHJvZ3Jl
c3MtY2hhbmdlZCIsIEdfQ0FMTEJBQ0sgKHByb2dyZXNzX2NoYW5nZV9jYiksIHdlYl92aWV3KTsK
KyAgICBnX3NpZ25hbF9jb25uZWN0IChHX09CSkVDVCAod2ViX3ZpZXcpLCAiaG92ZXJpbmctb3Zl
ci1saW5rIiwgR19DQUxMQkFDSyAobGlua19ob3Zlcl9jYiksIHdlYl92aWV3KTsKIAogICAgIHJl
dHVybiBzY3JvbGxlZF93aW5kb3c7CiB9CkBAIC0xODgsOSArMTg4LDkgQEAgbWFpbiAoaW50IGFy
Z2MsIGNoYXIqIGFyZ3ZbXSkKICAgICBndGtfY29udGFpbmVyX2FkZCAoR1RLX0NPTlRBSU5FUiAo
bWFpbl93aW5kb3cpLCB2Ym94KTsKIAogICAgIGdjaGFyKiB1cmkgPSAoZ2NoYXIqKSAoYXJnYyA+
IDEgPyBhcmd2WzFdIDogImh0dHA6Ly93d3cuZ29vZ2xlLmNvbS8iKTsKLSAgICB3ZWJraXRfcGFn
ZV9vcGVuICh3ZWJfcGFnZSwgdXJpKTsKKyAgICB3ZWJraXRfd2ViX3ZpZXdfb3BlbiAod2ViX3Zp
ZXcsIHVyaSk7CiAKLSAgICBndGtfd2lkZ2V0X2dyYWJfZm9jdXMgKEdUS19XSURHRVQgKHdlYl9w
YWdlKSk7CisgICAgZ3RrX3dpZGdldF9ncmFiX2ZvY3VzIChHVEtfV0lER0VUICh3ZWJfdmlldykp
OwogICAgIGd0a193aWRnZXRfc2hvd19hbGwgKG1haW5fd2luZG93KTsKICAgICBndGtfbWFpbiAo
KTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>17614</attachid>
            <date>2007-11-30 16:06:47 -0800</date>
            <delta_ts>2007-11-30 16:23:16 -0800</delta_ts>
            <desc>With corrected documentation</desc>
            <filename>api-refactor-2.patch</filename>
            <type>text/plain</type>
            <size>188358</size>
            <attacher name="Alp Toker">alp</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdC5wcmkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0LnByaQkocmV2aXNpb24gMjgy
NTEpCisrKyBXZWJLaXQucHJpCSh3b3JraW5nIGNvcHkpCkBAIC0xNyw3ICsxNyw3IEBAIHF0LXBv
cnQ6IWJ1aWxkaW5nLWxpYnMgewogZ3RrLXBvcnQ6IWJ1aWxkaW5nLWxpYnMgewogICAgIFFNQUtF
X0xJQkRJUiA9ICQkT1VUUFVUX0RJUi9saWIgJCRRTUFLRV9MSUJESVIKICAgICBMSUJTICs9IC1s
V2ViS2l0R3RrCi0gICAgREVQRU5EUEFUSCArPSAkJFBXRC9XZWJLaXQvZ3RrL0FwaSAkJFBXRC9X
ZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0CisgICAgREVQRU5EUEFUSCArPSAkJFBXRC9XZWJLaXQv
Z3RrL1dlYlZpZXcgJCRQV0QvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydAogfQogCiBndGstcG9y
dCB7CkBAIC00NCw2ICs0NCw5IEBAIGd0ay1wb3J0IHsKIAogICAgICMgVGhpcyBzZXQgb2Ygd2Fy
bmluZ3MgaXMgYm9ycm93ZWQgZnJvbSB0aGUgTWFjIGJ1aWxkCiAgICAgUU1BS0VfQ1hYRkxBR1Mg
Kz0gLVdhbGwgLVcgLVdjYXN0LWFsaWduIC1XY2hhci1zdWJzY3JpcHRzIC1XZm9ybWF0LXNlY3Vy
aXR5IC1XbWlzc2luZy1mb3JtYXQtYXR0cmlidXRlIC1XcG9pbnRlci1hcml0aCAtV3dyaXRlLXN0
cmluZ3MgLVduby1mb3JtYXQteTJrIC1Xbm8tdW51c2VkLXBhcmFtZXRlciAtV3VuZGVmCisKKyAg
ICBERVBFTkRQQVRIICs9ICQkUFdEL0phdmFTY3JpcHRDb3JlL0FQSQorICAgIElOQ0xVREVQQVRI
ICs9ICQkUFdECiB9CiAKIERFRklORVMgKz0gVVNFX1NZU1RFTV9NQUxMT0MKQEAgLTYwLDcgKzYz
LDcgQEAgZ3RrLXBvcnQ6SU5DTFVERVBBVEggKz0gXAogICAgICQkQkFTRV9ESVIvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYWlybyBcCiAgICAgJCRCQVNFX0RJUi9XZWJDb3JlL2xvYWRlci9n
dGsgXAogICAgICQkQkFTRV9ESVIvV2ViQ29yZS9wYWdlL2d0ayBcCi0gICAgJCRCQVNFX0RJUi9X
ZWJLaXQvZ3RrL0FwaSBcCisgICAgJCRCQVNFX0RJUi9XZWJLaXQvZ3RrL1dlYlZpZXcgXAogICAg
ICQkQkFTRV9ESVIvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydAogSU5DTFVERVBBVEggKz0gXAog
ICAgICQkQkFTRV9ESVIvSmF2YVNjcmlwdENvcmUvIFwKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5w
cm8KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnBybwkocmV2aXNpb24gMjgyNTEpCisr
KyBXZWJDb3JlL1dlYkNvcmUucHJvCSh3b3JraW5nIGNvcHkpCkBAIC0xNDYsNyArMTQ2LDcgQEAg
Z3RrLXBvcnQgewogICAgICQkUFdEL2xvYWRlci9ndGsgXAogICAgICQkUFdEL3BhZ2UvZ3RrIFwK
ICAgICAkJFBXRC8uLi9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0IFwKLSAgICAkJFBXRC8uLi9X
ZWJLaXQvZ3RrL0FwaQorICAgICQkUFdELy4uL1dlYktpdC9ndGsvV2ViVmlldwogCiAgICAgREVQ
RU5EUEFUSCArPSBcCiAgICAgcGxhdGZvcm0vZ3RrIFwKQEAgLTE2NCw3ICsxNjQsNyBAQCBndGst
cG9ydCB7CiAgICAgbG9hZGVyL2d0ayBcCiAgICAgcGFnZS9ndGsgXAogICAgIC4uL1dlYktpdC9n
dGsvV2ViQ29yZVN1cHBvcnQgXAotICAgIC4uL1dlYktpdC9ndGsvQXBpCisgICAgLi4vV2ViS2l0
L2d0ay9XZWJWaWV3CiB9CiAKIElOQ0xVREVQQVRIICs9ICAkJFBXRCBcCkBAIC05MzksMTMgKzkz
OSwxMyBAQCBxdC1wb3J0IHsKIGd0ay1wb3J0IHsKICAgICBIRUFERVJTICs9IFwKICAgICAgICAg
Li4vV2ViQ29yZS9wbGF0Zm9ybS9ndGsvQ2xpcGJvYXJkR3RrLmggXAotICAgICAgICAuLi9XZWJL
aXQvZ3RrL0FwaS93ZWJraXRndGtkZWZpbmVzLmggXAotICAgICAgICAuLi9XZWJLaXQvZ3RrL0Fw
aS93ZWJraXRndGtmcmFtZS5oIFwKLSAgICAgICAgLi4vV2ViS2l0L2d0ay9BcGkvd2Via2l0Z3Rr
Z2xvYmFsLmggXAotICAgICAgICAuLi9XZWJLaXQvZ3RrL0FwaS93ZWJraXRndGtuZXR3b3JrcmVx
dWVzdC5oIFwKLSAgICAgICAgLi4vV2ViS2l0L2d0ay9BcGkvd2Via2l0Z3RrcGFnZS5oIFwKLSAg
ICAgICAgLi4vV2ViS2l0L2d0ay9BcGkvd2Via2l0Z3RrcHJpdmF0ZS5oIFwKLSAgICAgICAgLi4v
V2ViS2l0L2d0ay9BcGkvd2Via2l0Z3Rrc2V0dGluZ3MuaCBcCisgICAgICAgIC4uL1dlYktpdC9n
dGsvV2ViVmlldy93ZWJraXRkZWZpbmVzLmggXAorICAgICAgICAuLi9XZWJLaXQvZ3RrL1dlYlZp
ZXcvd2Via2l0Z2xvYmFsLmggXAorICAgICAgICAuLi9XZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0
bmV0d29ya3JlcXVlc3QuaCBcCisgICAgICAgIC4uL1dlYktpdC9ndGsvV2ViVmlldy93ZWJraXRw
cml2YXRlLmggXAorICAgICAgICAuLi9XZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0c2V0dGluZ3Mu
aCBcCisgICAgICAgIC4uL1dlYktpdC9ndGsvV2ViVmlldy93ZWJraXR3ZWJmcmFtZS5oIFwKKyAg
ICAgICAgLi4vV2ViS2l0L2d0ay9XZWJWaWV3L3dlYmtpdHdlYnZpZXcuaCBcCiAgICAgICAgIC4u
L1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmggXAogICAgICAgICAu
Li9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0NvbnRleHRNZW51Q2xpZW50R3RrLmggXAogICAg
ICAgICAuLi9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0RyYWdDbGllbnRHdGsuaCBcCkBAIC0x
MDE2LDEyICsxMDE2LDEyIEBAIGd0ay1wb3J0IHsKICAgICAgICAgcGxhdGZvcm0vaW1hZ2UtZGVj
b2RlcnMvYm1wL0JNUEltYWdlRGVjb2Rlci5jcHAgXAogICAgICAgICBwbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy9pY28vSUNPSW1hZ2VEZWNvZGVyLmNwcCBcCiAgICAgICAgIHBsYXRmb3JtL2ltYWdl
LWRlY29kZXJzL3hibS9YQk1JbWFnZURlY29kZXIuY3BwIFwKLSAgICAgICAgLi4vV2ViS2l0L2d0
ay9BcGkvd2Via2l0Z3RrZnJhbWUuY3BwIFwKLSAgICAgICAgLi4vV2ViS2l0L2d0ay9BcGkvd2Vi
a2l0Z3RrZ2xvYmFsLmNwcCBcCi0gICAgICAgIC4uL1dlYktpdC9ndGsvQXBpL3dlYmtpdGd0a25l
dHdvcmtyZXF1ZXN0LmNwcCBcCi0gICAgICAgIC4uL1dlYktpdC9ndGsvQXBpL3dlYmtpdGd0a3Bh
Z2UuY3BwIFwKLSAgICAgICAgLi4vV2ViS2l0L2d0ay9BcGkvd2Via2l0Z3RrcHJpdmF0ZS5jcHAg
XAotICAgICAgICAuLi9XZWJLaXQvZ3RrL0FwaS93ZWJraXRndGtzZXR0aW5ncy5jcHAgXAorICAg
ICAgICAuLi9XZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0Z2xvYmFsLmNwcCBcCisgICAgICAgIC4u
L1dlYktpdC9ndGsvV2ViVmlldy93ZWJraXRuZXR3b3JrcmVxdWVzdC5jcHAgXAorICAgICAgICAu
Li9XZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0cHJpdmF0ZS5jcHAgXAorICAgICAgICAuLi9XZWJL
aXQvZ3RrL1dlYlZpZXcvd2Via2l0c2V0dGluZ3MuY3BwIFwKKyAgICAgICAgLi4vV2ViS2l0L2d0
ay9XZWJWaWV3L3dlYmtpdHdlYmZyYW1lLmNwcCBcCisgICAgICAgIC4uL1dlYktpdC9ndGsvV2Vi
Vmlldy93ZWJraXR3ZWJ2aWV3LmNwcCBcCiAgICAgICAgIC4uL1dlYktpdC9ndGsvV2ViQ29yZVN1
cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmNwcCBcCiAgICAgICAgIC4uL1dlYktpdC9ndGsvV2ViQ29y
ZVN1cHBvcnQvQ29udGV4dE1lbnVDbGllbnRHdGsuY3BwIFwKICAgICAgICAgLi4vV2ViS2l0L2d0
ay9XZWJDb3JlU3VwcG9ydC9EcmFnQ2xpZW50R3RrLmNwcCBcCkBAIC0xNjgxLDcgKzE2ODEsNyBA
QCBndGstcG9ydCB7CiAgICAgdGFyZ2V0LnBhdGggPSAkJFdFQktJVF9MSUJfRElSCiAgICAgSU5T
VEFMTFMgKz0gdGFyZ2V0CiAKLSAgICBpbmNsdWRlKCQkUFdELy4uL1dlYktpdC9ndGsvQXBpL2hl
YWRlcnMucHJpKQorICAgIGluY2x1ZGUoJCRQV0QvLi4vV2ViS2l0L2d0ay9XZWJWaWV3L2hlYWRl
cnMucHJpKQogICAgIGhlYWRlcnMuZmlsZXMgPSAkJFdFQktJVF9BUElfSEVBREVSUwogICAgIGhl
YWRlcnMucGF0aCA9ICQkV0VCS0lUX0lOQ19ESVIKICAgICBJTlNUQUxMUyArPSBoZWFkZXJzCkBA
IC0xNzAxLDcgKzE3MDEsNyBAQCBndGstcG9ydCB7CiAgICAgICAgIFFNQUtFX1BLR0NPTkZJR19J
TlNUQUxMX1JFUExBQ0UgKz0gbGliX3JlcGxhY2UKICAgICB9CiAKLSAgICBHRU5NQVJTSEFMUyA9
IC4uL1dlYktpdC9ndGsvQXBpL3dlYmtpdGd0ay1tYXJzaGFsLmxpc3QKKyAgICBHRU5NQVJTSEFM
UyA9IC4uL1dlYktpdC9ndGsvV2ViVmlldy93ZWJraXQtbWFyc2hhbC5saXN0CiAgICAgR0VOTUFS
U0hBTFNfUFJFRklYID0gd2Via2l0X21hcnNoYWwKIAogICAgICMKSW5kZXg6IFdlYktpdC9ndGsv
QXBpL2hlYWRlcnMucHJpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9ndGsvQXBpL2hlYWRlcnMucHJp
CShyZXZpc2lvbiAyODI1MSkKKysrIFdlYktpdC9ndGsvQXBpL2hlYWRlcnMucHJpCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDcgKzAsMCBAQAotV0VCS0lUX0FQSV9IRUFERVJTID0gJCRQV0Qvd2Via2l0
Z3RrZGVmaW5lcy5oIFwKLSAgICAgICAgICAgICAgICAgICAgICQkUFdEL3dlYmtpdGd0a2ZyYW1l
LmggXAotICAgICAgICAgICAgICAgICAgICAgJCRQV0Qvd2Via2l0Z3RrZnJhbWVkYXRhLmggXAot
ICAgICAgICAgICAgICAgICAgICAgJCRQV0Qvd2Via2l0Z3RrZ2xvYmFsLmggXAotICAgICAgICAg
ICAgICAgICAgICAgJCRQV0Qvd2Via2l0Z3RrbmV0d29ya3JlcXVlc3QuaCBcCi0gICAgICAgICAg
ICAgICAgICAgICAkJFBXRC93ZWJraXRndGtwYWdlLmggXAotICAgICAgICAgICAgICAgICAgICAg
JCRQV0Qvd2Via2l0Z3Rrc2V0dGluZ3MuaApJbmRleDogV2ViS2l0L2d0ay9BcGkvd2Via2l0Z3Rr
LW1hcnNoYWwubGlzdAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvZ3RrL0FwaS93ZWJraXRndGstbWFy
c2hhbC5saXN0CShyZXZpc2lvbiAyODI1MSkKKysrIFdlYktpdC9ndGsvQXBpL3dlYmtpdGd0ay1t
YXJzaGFsLmxpc3QJKHdvcmtpbmcgY29weSkKQEAgLTEsOSArMCwwIEBACi1WT0lEOlNUUklORyxT
VFJJTkcKLVZPSUQ6T0JKRUNULEJPT0xFQU4KLVZPSUQ6T0JKRUNULE9CSkVDVAotVk9JRDpPQkpF
Q1QsUE9JTlRFUixQT0lOVEVSCi1CT09MRUFOOlNUUklORyxJTlQsU1RSSU5HCi1CT09MRUFOOk9C
SkVDVCxTVFJJTkcKLUJPT0xFQU46T0JKRUNULFNUUklORyxCT09MRUFOCi1CT09MRUFOOk9CSkVD
VCxTVFJJTkcsU1RSSU5HLFNUUklORwotSU5UOk9CSkVDVCxPQkpFQ1QKSW5kZXg6IFdlYktpdC9n
dGsvQXBpL3dlYmtpdGd0a2RlZmluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvZ3RrL0FwaS93
ZWJraXRndGtkZWZpbmVzLmgJKHJldmlzaW9uIDI4MjUxKQorKysgV2ViS2l0L2d0ay9BcGkvd2Vi
a2l0Z3RrZGVmaW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYyICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuIAotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uIAotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUsIEluYy4gKCJBcHBsZSIp
IG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JT
ICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQot
ICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFdFQktJVF9ERUZJ
TkVTX0gKLSNkZWZpbmUgV0VCS0lUX0RFRklORVNfSAotCi0jaW5jbHVkZSA8Z2xpYi5oPgotCi10
eXBlZGVmIHN0cnVjdCBfV2ViS2l0RnJhbWUgV2ViS2l0RnJhbWU7Ci10eXBlZGVmIHN0cnVjdCBf
V2ViS2l0RnJhbWVDbGFzcyBXZWJLaXRGcmFtZUNsYXNzOwotCi10eXBlZGVmIHN0cnVjdCBfV2Vi
S2l0RnJhbWVEYXRhIFdlYktpdEZyYW1lRGF0YTsKLQotdHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFBh
Z2UgV2ViS2l0UGFnZTsKLXR5cGVkZWYgc3RydWN0IF9XZWJLaXRQYWdlQ2xhc3MgV2ViS2l0UGFn
ZUNsYXNzOwotCi10eXBlZGVmIHN0cnVjdCBfV2ViS2l0TmV0d29ya1JlcXVlc3QgV2ViS2l0TmV0
d29ya1JlcXVlc3Q7Ci10eXBlZGVmIHN0cnVjdCBfV2ViS2l0TmV0d29ya1JlcXVlc3RDbGFzcyBX
ZWJLaXROZXR3b3JrUmVxdWVzdENsYXNzOwotCi10eXBlZGVmIHN0cnVjdCBPcGFxdWVKU0NvbnRl
eHQqIEpTR2xvYmFsQ29udGV4dFJlZjsKLXR5cGVkZWYgc3RydWN0IE9wYXF1ZUpTVmFsdWUqIEpT
T2JqZWN0UmVmOwotCi0jaWZkZWYgR19PU19XSU4zMgotICAgICNpZmRlZiBCVUlMRElOR19XRUJL
SVQKLSAgICAgICAgI2RlZmluZSBXRUJLSVRfQVBJIF9fZGVjbHNwZWMoZGxsZXhwb3J0KQotICAg
ICNlbHNlCi0gICAgICAgICNkZWZpbmUgV0VCS0lUX0FQSSBfX2RlY2xzcGVjKGRsbGltcG9ydCkK
LSAgICAjZW5kaWYKLSNlbHNlCi0gICAgI2RlZmluZSBXRUJLSVRfQVBJIF9fYXR0cmlidXRlX18o
KHZpc2liaWxpdHkoImRlZmF1bHQiKSkpCi0jZW5kaWYKLQotI2lmbmRlZiBXRUJLSVRfQVBJCi0j
ZGVmaW5lIFdFQktJVF9BUEkKLSNlbmRpZgotCi0jZW5kaWYKSW5kZXg6IFdlYktpdC9ndGsvQXBp
L3dlYmtpdGd0a2ZyYW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvZ3RrL0FwaS93ZWJraXRn
dGtmcmFtZS5jcHAJKHJldmlzaW9uIDI4MjUxKQorKysgV2ViS2l0L2d0ay9BcGkvd2Via2l0Z3Rr
ZnJhbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDM4OCArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDcgQWxwIFRva2VyIDxhbHBAYXRva2VyLmNvbT4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAotICog
My4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFt
ZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5E
IEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAq
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAi
d2Via2l0Z3RrZnJhbWUuaCIKLSNpbmNsdWRlICJ3ZWJraXRndGtwYWdlLmgiCi0jaW5jbHVkZSAi
d2Via2l0Z3RrcHJpdmF0ZS5oIgotCi0jaW5jbHVkZSAiQ1N0cmluZy5oIgotI2luY2x1ZGUgIkZy
YW1lTG9hZGVyLmgiCi0jaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnRHdGsuaCIKLSNpbmNsdWRl
ICJGcmFtZVRyZWUuaCIKLSNpbmNsdWRlICJGcmFtZVZpZXcuaCIKLSNpbmNsdWRlICJIVE1MRnJh
bWVPd25lckVsZW1lbnQuaCIKLSNpbmNsdWRlICJranNfYmluZGluZy5oIgotI2luY2x1ZGUgImtq
c19wcm94eS5oIgotI2luY2x1ZGUgImtqc193aW5kb3cuaCIKLQotI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0FQSUNhc3QuaD4KLQotdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKLXVzaW5nIG5hbWVz
cGFjZSBXZWJDb3JlOwotCi1leHRlcm4gIkMiIHsKLQotZXh0ZXJuIHZvaWQgd2Via2l0X21hcnNo
YWxfVk9JRF9fU1RSSU5HX1NUUklORyAoR0Nsb3N1cmUqICAgICBjbG9zdXJlLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1ZhbHVlKiAgICAgICByZXR1
cm5fdmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBndWludCAgICAgICAgIG5fcGFyYW1fdmFsdWVzLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR1ZhbHVlKiBwYXJhbV92YWx1ZXMsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncG9pbnRlciAgICAg
IGludm9jYXRpb25faGludCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGdwb2ludGVyICAgICAgbWFyc2hhbF9kYXRhKTsKLQotZW51bSB7Ci0gICAgQ0xF
QVJFRCwKLSAgICBMT0FEX0RPTkUsCi0gICAgVElUTEVfQ0hBTkdFRCwKLSAgICBIT1ZFUklOR19P
VkVSX0xJTkssCi0gICAgTEFTVF9TSUdOQUwKLX07Ci0KLXN0YXRpYyBndWludCB3ZWJraXRfZnJh
bWVfc2lnbmFsc1tMQVNUX1NJR05BTF0gPSB7IDAsIH07Ci0KLXN0YXRpYyB2b2lkIHdlYmtpdF9m
cmFtZV9yZWFsX3RpdGxlX2NoYW5nZWQoV2ViS2l0RnJhbWUqIGZyYW1lLCBnY2hhciogdGl0bGUs
IGdjaGFyKiBsb2NhdGlvbik7Ci0KLUdfREVGSU5FX1RZUEUoV2ViS2l0RnJhbWUsIHdlYmtpdF9m
cmFtZSwgR19UWVBFX09CSkVDVCkKLQotc3RhdGljIHZvaWQgd2Via2l0X2ZyYW1lX2ZpbmFsaXpl
KEdPYmplY3QqIG9iamVjdCkKLXsKLSAgICBXZWJLaXRGcmFtZVByaXZhdGUqIHByaXZhdGVEYXRh
ID0gV0VCS0lUX0ZSQU1FX0dFVF9QUklWQVRFKFdFQktJVF9GUkFNRShvYmplY3QpKTsKLSAgICBw
cml2YXRlRGF0YS0+ZnJhbWUtPmxvYWRlcigpLT5jYW5jZWxBbmRDbGVhcigpOwotICAgIGdfZnJl
ZShwcml2YXRlRGF0YS0+bmFtZSk7Ci0gICAgZ19mcmVlKHByaXZhdGVEYXRhLT50aXRsZSk7Ci0g
ICAgZ19mcmVlKHByaXZhdGVEYXRhLT5sb2NhdGlvbik7Ci0gICAgZGVsZXRlIHByaXZhdGVEYXRh
LT5mcmFtZTsKLQotICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9mcmFtZV9wYXJlbnRfY2xhc3Mp
LT5maW5hbGl6ZShvYmplY3QpOwotfQotCi1zdGF0aWMgdm9pZCB3ZWJraXRfZnJhbWVfY2xhc3Nf
aW5pdChXZWJLaXRGcmFtZUNsYXNzKiBmcmFtZUNsYXNzKQotewotICAgIGdfdHlwZV9jbGFzc19h
ZGRfcHJpdmF0ZShmcmFtZUNsYXNzLCBzaXplb2YoV2ViS2l0RnJhbWVQcml2YXRlKSk7Ci0KLSAg
ICAvKgotICAgICAqIHNpZ25hbHMKLSAgICAgKi8KLSAgICB3ZWJraXRfZnJhbWVfc2lnbmFsc1tD
TEVBUkVEXSA9IGdfc2lnbmFsX25ldygiY2xlYXJlZCIsCi0gICAgICAgICAgICBHX1RZUEVfRlJP
TV9DTEFTUyhmcmFtZUNsYXNzKSwKLSAgICAgICAgICAgIChHU2lnbmFsRmxhZ3MpKEdfU0lHTkFM
X1JVTl9MQVNUIHwgR19TSUdOQUxfQUNUSU9OKSwKLSAgICAgICAgICAgIDAsCi0gICAgICAgICAg
ICBOVUxMLAotICAgICAgICAgICAgTlVMTCwKLSAgICAgICAgICAgIGdfY2Nsb3N1cmVfbWFyc2hh
bF9WT0lEX19WT0lELAotICAgICAgICAgICAgR19UWVBFX05PTkUsIDApOwotCi0gICAgd2Via2l0
X2ZyYW1lX3NpZ25hbHNbTE9BRF9ET05FXSA9IGdfc2lnbmFsX25ldygibG9hZF9kb25lIiwKLSAg
ICAgICAgICAgIEdfVFlQRV9GUk9NX0NMQVNTKGZyYW1lQ2xhc3MpLAotICAgICAgICAgICAgKEdT
aWduYWxGbGFncykoR19TSUdOQUxfUlVOX0xBU1QgfCBHX1NJR05BTF9BQ1RJT04pLAotICAgICAg
ICAgICAgMCwKLSAgICAgICAgICAgIE5VTEwsCi0gICAgICAgICAgICBOVUxMLAotICAgICAgICAg
ICAgZ19jY2xvc3VyZV9tYXJzaGFsX1ZPSURfX0JPT0xFQU4sCi0gICAgICAgICAgICBHX1RZUEVf
Tk9ORSwgMSwKLSAgICAgICAgICAgIEdfVFlQRV9CT09MRUFOKTsKLQotICAgIHdlYmtpdF9mcmFt
ZV9zaWduYWxzW1RJVExFX0NIQU5HRURdID0gZ19zaWduYWxfbmV3KCJ0aXRsZV9jaGFuZ2VkIiwK
LSAgICAgICAgICAgIEdfVFlQRV9GUk9NX0NMQVNTKGZyYW1lQ2xhc3MpLAotICAgICAgICAgICAg
KEdTaWduYWxGbGFncykoR19TSUdOQUxfUlVOX0xBU1QgfCBHX1NJR05BTF9BQ1RJT04pLAotICAg
ICAgICAgICAgR19TVFJVQ1RfT0ZGU0VUKFdlYktpdEZyYW1lQ2xhc3MsIHRpdGxlX2NoYW5nZWQp
LAotICAgICAgICAgICAgTlVMTCwKLSAgICAgICAgICAgIE5VTEwsCi0gICAgICAgICAgICB3ZWJr
aXRfbWFyc2hhbF9WT0lEX19TVFJJTkdfU1RSSU5HLAotICAgICAgICAgICAgR19UWVBFX05PTkUs
IDIsCi0gICAgICAgICAgICBHX1RZUEVfU1RSSU5HLCBHX1RZUEVfU1RSSU5HKTsKLQotICAgIHdl
YmtpdF9mcmFtZV9zaWduYWxzW0hPVkVSSU5HX09WRVJfTElOS10gPSBnX3NpZ25hbF9uZXcoImhv
dmVyaW5nX292ZXJfbGluayIsCi0gICAgICAgICAgICBHX1RZUEVfRlJPTV9DTEFTUyhmcmFtZUNs
YXNzKSwKLSAgICAgICAgICAgIChHU2lnbmFsRmxhZ3MpKEdfU0lHTkFMX1JVTl9MQVNUIHwgR19T
SUdOQUxfQUNUSU9OKSwKLSAgICAgICAgICAgIDAsCi0gICAgICAgICAgICBOVUxMLAotICAgICAg
ICAgICAgTlVMTCwKLSAgICAgICAgICAgIHdlYmtpdF9tYXJzaGFsX1ZPSURfX1NUUklOR19TVFJJ
TkcsCi0gICAgICAgICAgICBHX1RZUEVfTk9ORSwgMiwKLSAgICAgICAgICAgIEdfVFlQRV9TVFJJ
TkcsIEdfVFlQRV9TVFJJTkcpOwotCi0gICAgZnJhbWVDbGFzcy0+dGl0bGVfY2hhbmdlZCA9IHdl
YmtpdF9mcmFtZV9yZWFsX3RpdGxlX2NoYW5nZWQ7Ci0KLSAgICAvKgotICAgICAqIGltcGxlbWVu
dGF0aW9ucyBvZiB2aXJ0dWFsIG1ldGhvZHMKLSAgICAgKi8KLSAgICBHX09CSkVDVF9DTEFTUyhm
cmFtZUNsYXNzKS0+ZmluYWxpemUgPSB3ZWJraXRfZnJhbWVfZmluYWxpemU7Ci19Ci0KLXN0YXRp
YyB2b2lkIHdlYmtpdF9mcmFtZV9yZWFsX3RpdGxlX2NoYW5nZWQoV2ViS2l0RnJhbWUqIGZyYW1l
LCBnY2hhciogdGl0bGUsIGdjaGFyKiBsb2NhdGlvbikKLXsKLSAgICBXZWJLaXRGcmFtZVByaXZh
dGUqIGZyYW1lRGF0YSA9IFdFQktJVF9GUkFNRV9HRVRfUFJJVkFURShmcmFtZSk7Ci0gICAgZ19m
cmVlKGZyYW1lRGF0YS0+dGl0bGUpOwotICAgIGdfZnJlZShmcmFtZURhdGEtPmxvY2F0aW9uKTsK
LSAgICBmcmFtZURhdGEtPnRpdGxlID0gZ19zdHJkdXAodGl0bGUpOwotICAgIGZyYW1lRGF0YS0+
bG9jYXRpb24gPSBnX3N0cmR1cChsb2NhdGlvbik7Ci19Ci0KLXN0YXRpYyB2b2lkIHdlYmtpdF9m
cmFtZV9pbml0KFdlYktpdEZyYW1lKiBmcmFtZSkKLXsKLSAgICAvLyBUT0RPOiBNb3ZlIGNvbnN0
cnVjdG9yIGNvZGUgaGVyZS4KLX0KLQotLyoqCi0gKiB3ZWJraXRfZnJhbWVfbmV3OgotICogQHBh
Z2U6IHRoZSBjb250cm9sbGluZyAjV2ViS2l0UGFnZQotICoKLSAqIENyZWF0ZXMgYSBuZXcgI1dl
YktpdEZyYW1lIGluaXRpYWxpemVkIHdpdGggYSBjb250cm9sbGluZyAjV2ViS2l0UGFnZS4KLSAq
Ci0gKiBSZXR1cm5zOiBhIG5ldyAjV2ViS2l0RnJhbWUKLSAqKi8KLVdlYktpdEZyYW1lKiB3ZWJr
aXRfZnJhbWVfbmV3KFdlYktpdFBhZ2UqIHBhZ2UpCi17Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwoV0VCS0lUX0lTX1BBR0UocGFnZSksIE5VTEwpOwotCi0gICAgV2ViS2l0RnJhbWUqIGZyYW1l
ID0gV0VCS0lUX0ZSQU1FKGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9GUkFNRSwgTlVMTCkpOwot
ICAgIFdlYktpdEZyYW1lUHJpdmF0ZSogZnJhbWVEYXRhID0gV0VCS0lUX0ZSQU1FX0dFVF9QUklW
QVRFKGZyYW1lKTsKLSAgICBXZWJLaXRQYWdlUHJpdmF0ZSogcGFnZURhdGEgPSBXRUJLSVRfUEFH
RV9HRVRfUFJJVkFURShwYWdlKTsKLQotICAgIGZyYW1lRGF0YS0+Y2xpZW50ID0gbmV3IFdlYktp
dDo6RnJhbWVMb2FkZXJDbGllbnQoZnJhbWUpOwotICAgIGZyYW1lRGF0YS0+ZnJhbWUgPSBuZXcg
RnJhbWUocGFnZURhdGEtPnBhZ2UsIDAsIGZyYW1lRGF0YS0+Y2xpZW50KTsKLQotICAgIEZyYW1l
VmlldyogZnJhbWVWaWV3ID0gbmV3IEZyYW1lVmlldyhmcmFtZURhdGEtPmZyYW1lKTsKLSAgICBm
cmFtZVZpZXctPnNldENvbnRhaW5pbmdXaW5kb3coR1RLX0NPTlRBSU5FUihwYWdlKSk7Ci0gICAg
ZnJhbWVWaWV3LT5zZXRHdGtBZGp1c3RtZW50cyhHVEtfQURKVVNUTUVOVChndGtfYWRqdXN0bWVu
dF9uZXcoMC4wLCAwLjAsIDAuMCwgMC4wLCAwLjAsIDAuMCkpLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgR1RLX0FESlVTVE1FTlQoZ3RrX2FkanVzdG1lbnRfbmV3KDAuMCwgMC4w
LCAwLjAsIDAuMCwgMC4wLCAwLjApKSk7Ci0gICAgZnJhbWVEYXRhLT5mcmFtZS0+c2V0Vmlldyhm
cmFtZVZpZXcpOwotICAgIGZyYW1lRGF0YS0+ZnJhbWUtPmluaXQoKTsKLSAgICBmcmFtZURhdGEt
PnBhZ2UgPSBwYWdlOwotICAgIGZyYW1lRGF0YS0+bmFtZSA9IDA7Ci0gICAgZnJhbWVEYXRhLT50
aXRsZSA9IDA7Ci0gICAgZnJhbWVEYXRhLT5sb2NhdGlvbiA9IDA7Ci0KLSAgICByZXR1cm4gZnJh
bWU7Ci19Ci0KLVdlYktpdEZyYW1lKiB3ZWJraXRfZnJhbWVfaW5pdF93aXRoX3BhZ2UoV2ViS2l0
UGFnZSogcGFnZSwgSFRNTEZyYW1lT3duZXJFbGVtZW50KiBlbGVtZW50KQotewotICAgIFdlYktp
dEZyYW1lKiBmcmFtZSA9IFdFQktJVF9GUkFNRShnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfRlJB
TUUsIE5VTEwpKTsKLSAgICBXZWJLaXRGcmFtZVByaXZhdGUqIGZyYW1lRGF0YSA9IFdFQktJVF9G
UkFNRV9HRVRfUFJJVkFURShmcmFtZSk7Ci0gICAgV2ViS2l0UGFnZVByaXZhdGUqIHBhZ2VEYXRh
ID0gV0VCS0lUX1BBR0VfR0VUX1BSSVZBVEUocGFnZSk7Ci0KLSAgICBmcmFtZURhdGEtPmNsaWVu
dCA9IG5ldyBXZWJLaXQ6OkZyYW1lTG9hZGVyQ2xpZW50KGZyYW1lKTsKLSAgICBmcmFtZURhdGEt
PmZyYW1lID0gbmV3IEZyYW1lKHBhZ2VEYXRhLT5wYWdlLCBlbGVtZW50LCBmcmFtZURhdGEtPmNs
aWVudCk7Ci0KLSAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IG5ldyBGcmFtZVZpZXcoZnJhbWVE
YXRhLT5mcmFtZSk7Ci0gICAgZnJhbWVWaWV3LT5zZXRDb250YWluaW5nV2luZG93KEdUS19DT05U
QUlORVIocGFnZSkpOwotICAgIGZyYW1lRGF0YS0+ZnJhbWUtPnNldFZpZXcoZnJhbWVWaWV3KTsK
LSAgICBmcmFtZVZpZXctPmRlcmVmKCk7Ci0gICAgZnJhbWVEYXRhLT5mcmFtZS0+aW5pdCgpOwot
ICAgIGZyYW1lRGF0YS0+cGFnZSA9IHBhZ2U7Ci0KLSAgICByZXR1cm4gZnJhbWU7Ci19Ci0KLWNv
bnN0IGdjaGFyKiB3ZWJraXRfZnJhbWVfZ2V0X3RpdGxlKFdlYktpdEZyYW1lKiBmcmFtZSkKLXsK
LSAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfRlJBTUUoZnJhbWUpLCBOVUxMKTsK
LQotICAgIFdlYktpdEZyYW1lUHJpdmF0ZSogZnJhbWVEYXRhID0gV0VCS0lUX0ZSQU1FX0dFVF9Q
UklWQVRFKGZyYW1lKTsKLSAgICByZXR1cm4gZnJhbWVEYXRhLT50aXRsZTsKLX0KLQotY29uc3Qg
Z2NoYXIqIHdlYmtpdF9mcmFtZV9nZXRfbG9jYXRpb24oV2ViS2l0RnJhbWUqIGZyYW1lKQotewot
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19GUkFNRShmcmFtZSksIE5VTEwpOwot
Ci0gICAgV2ViS2l0RnJhbWVQcml2YXRlKiBmcmFtZURhdGEgPSBXRUJLSVRfRlJBTUVfR0VUX1BS
SVZBVEUoZnJhbWUpOwotICAgIHJldHVybiBmcmFtZURhdGEtPmxvY2F0aW9uOwotfQotCi0vKioK
LSAqIHdlYmtpdF9mcmFtZV9nZXRfcGFnZToKLSAqIEBmcmFtZTogYSAjV2ViS2l0RnJhbWUKLSAq
Ci0gKiBSZXR1cm5zIHRoZSAjV2ViS2l0UGFnZSB0aGF0IG1hbmFnZXMgdGhpcyAjV2ViS2l0RnJh
bWUuCi0gKgotICogVGhlICNXZWJLaXRQYWdlIHJldHVybmVkIG1hbmFnZXMgdGhlIGVudGlyZSBo
aWVyYXJjaHkgb2YgI1dlYktpdEZyYW1lCi0gKiBvYmplY3RzIHRoYXQgY29udGFpbnMgQGZyYW1l
LgotICoKLSAqIFJldHVybiB2YWx1ZTogdGhlICNXZWJLaXRQYWdlIHRoYXQgbWFuYWdlcyBAZnJh
bWUKLSAqLwotV2ViS2l0UGFnZSogd2Via2l0X2ZyYW1lX2dldF9wYWdlKFdlYktpdEZyYW1lKiBm
cmFtZSkKLXsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfRlJBTUUoZnJhbWUp
LCBOVUxMKTsKLQotICAgIFdlYktpdEZyYW1lUHJpdmF0ZSogZnJhbWVEYXRhID0gV0VCS0lUX0ZS
QU1FX0dFVF9QUklWQVRFKGZyYW1lKTsKLSAgICByZXR1cm4gZnJhbWVEYXRhLT5wYWdlOwotfQot
Ci0vKioKLSAqIHdlYmtpdF9mcmFtZV9nZXRfbmFtZToKLSAqIEBmcmFtZTogYSAjV2ViS2l0RnJh
bWUKLSAqCi0gKiBSZXR1cm5zIHRoZSBAZnJhbWUncyBuYW1lCi0gKgotICogUmV0dXJuIHZhbHVl
OiB0aGUgbmFtZSBvZiBAZnJhbWUKLSAqLwotY29uc3QgZ2NoYXIqIHdlYmtpdF9mcmFtZV9nZXRf
bmFtZShXZWJLaXRGcmFtZSogZnJhbWUpCi17Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VC
S0lUX0lTX0ZSQU1FKGZyYW1lKSwgTlVMTCk7Ci0KLSAgICBXZWJLaXRGcmFtZVByaXZhdGUqIGZy
YW1lRGF0YSA9IFdFQktJVF9GUkFNRV9HRVRfUFJJVkFURShmcmFtZSk7Ci0KLSAgICBpZiAoZnJh
bWVEYXRhLT5uYW1lKQotICAgICAgICByZXR1cm4gZnJhbWVEYXRhLT5uYW1lOwotCi0gICAgRnJh
bWUqIGNvcmVGcmFtZSA9IGNvcmUoZnJhbWUpOwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGNv
cmVGcmFtZSwgTlVMTCk7Ci0KLSAgICBTdHJpbmcgc3RyaW5nID0gY29yZUZyYW1lLT50cmVlKCkt
Pm5hbWUoKTsKLSAgICBmcmFtZURhdGEtPm5hbWUgPSBnX3N0cmR1cChzdHJpbmcudXRmOCgpLmRh
dGEoKSk7Ci0KLSAgICByZXR1cm4gZnJhbWVEYXRhLT5uYW1lOwotfQotCi0vKioKLSAqIHdlYmtp
dF9mcmFtZV9nZXRfcGFyZW50OgotICogQGZyYW1lOiBhICNXZWJLaXRGcmFtZQotICoKLSAqIFJl
dHVybnMgdGhlIEBmcmFtZSdzIHBhcmVudCBmcmFtZSwgb3IgJU5VTEwgaWYgaXQgaGFzIG5vbmUu
Ci0gKgotICogUmV0dXJuIHZhbHVlOiB0aGUgcGFyZW50ICNXZWJLaXRGcmFtZSBvciAlTlVMTCBp
biBjYXNlIHRoZXJlIGlzIG5vbmUKLSAqLwotV2ViS2l0RnJhbWUqIHdlYmtpdF9mcmFtZV9nZXRf
cGFyZW50KFdlYktpdEZyYW1lKiBmcmFtZSkKLXsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChX
RUJLSVRfSVNfRlJBTUUoZnJhbWUpLCBOVUxMKTsKLQotICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBj
b3JlKGZyYW1lKTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChjb3JlRnJhbWUsIE5VTEwpOwot
Ci0gICAgcmV0dXJuIGtpdChjb3JlRnJhbWUtPnRyZWUoKS0+cGFyZW50KCkpOwotfQotCi0vKioK
LSAqIHdlYmtpdF9mcmFtZV9sb2FkX3JlcXVlc3Q6Ci0gKiBAZnJhbWU6IGEgI1dlYktpdEZyYW1l
Ci0gKiBAcmVxdWVzdDogYSAjV2ViS2l0TmV0d29ya1JlcXVlc3QKLSAqCi0gKiBDb25uZWN0cyB0
byBhIGdpdmVuIFVSSSBieSBpbml0aWF0aW5nIGFuIGFzeW5jaHJvbm91cyBjbGllbnQgcmVxdWVz
dC4KLSAqCi0gKiBDcmVhdGVzIGEgcHJvdmlzaW9uYWwgZGF0YSBzb3VyY2UgdGhhdCB3aWxsIHRy
YW5zaXRpb24gdG8gYSBjb21taXR0ZWQgZGF0YQotICogc291cmNlIG9uY2UgYW55IGRhdGEgaGFz
IGJlZW4gcmVjZWl2ZWQuIFVzZSB3ZWJraXRfZnJhbWVfc3RvcF9sb2FkaW5nKCkgdG8KLSAqIHN0
b3AgdGhlIGxvYWQuIFRoaXMgZnVuY3Rpb24gaXMgdHlwaWNhbGx5IGludm9rZWQgb24gdGhlIG1h
aW4gZnJhbWUuCi0gKi8KLXZvaWQgd2Via2l0X2ZyYW1lX2xvYWRfcmVxdWVzdChXZWJLaXRGcmFt
ZSogZnJhbWUsIFdlYktpdE5ldHdvcmtSZXF1ZXN0KiByZXF1ZXN0KQotewotICAgIGdfcmV0dXJu
X2lmX2ZhaWwoV0VCS0lUX0lTX0ZSQU1FKGZyYW1lKSk7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChX
RUJLSVRfSVNfTkVUV09SS19SRVFVRVNUKHJlcXVlc3QpKTsKLQotICAgIEZyYW1lKiBjb3JlRnJh
bWUgPSBjb3JlKGZyYW1lKTsKLSAgICBnX3JldHVybl9pZl9mYWlsKGNvcmVGcmFtZSk7Ci0KLSAg
ICAvLyBUT0RPOiBVc2UgdGhlIFJlc291cmNlUmVxdWVzdCBjYXJyaWVkIGJ5IFdlYktpdE5ldHdv
cmtSZXF1ZXN0IHdoZW4gaXQgZ2V0cyBpbXBsZW1lbnRlZC4KLSAgICBEZXByZWNhdGVkU3RyaW5n
IHN0cmluZyA9IERlcHJlY2F0ZWRTdHJpbmc6OmZyb21VdGY4KHdlYmtpdF9uZXR3b3JrX3JlcXVl
c3RfZ2V0X3VyaShyZXF1ZXN0KSk7Ci0gICAgY29yZUZyYW1lLT5sb2FkZXIoKS0+bG9hZChSZXNv
dXJjZVJlcXVlc3QoS1VSTChzdHJpbmcpKSk7Ci19Ci0KLS8qKgotICogd2Via2l0X2ZyYW1lX3N0
b3BfbG9hZGluZzoKLSAqIEBmcmFtZTogYSAjV2ViS2l0RnJhbWUKLSAqCi0gKiBTdG9wcyBhbnkg
cGVuZGluZyBsb2FkcyBvbiBAZnJhbWUncyBkYXRhIHNvdXJjZSwgYW5kIHRob3NlIG9mIGl0cyBj
aGlsZHJlbi4KLSAqLwotdm9pZCB3ZWJraXRfZnJhbWVfc3RvcF9sb2FkaW5nKFdlYktpdEZyYW1l
KiBmcmFtZSkKLXsKLSAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19GUkFNRShmcmFtZSkp
OwotCi0gICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoZnJhbWUpOwotICAgIGdfcmV0dXJuX2lm
X2ZhaWwoY29yZUZyYW1lKTsKLQotICAgIGNvcmVGcmFtZS0+bG9hZGVyKCktPnN0b3BBbGxMb2Fk
ZXJzKCk7Ci19Ci0KLS8qKgotICogd2Via2l0X2ZyYW1lX3JlbG9hZDoKLSAqIEBmcmFtZTogYSAj
V2ViS2l0RnJhbWUKLSAqCi0gKiBSZWxvYWRzIHRoZSBpbml0aWFsIHJlcXVlc3QuCi0gKi8KLXZv
aWQgd2Via2l0X2ZyYW1lX3JlbG9hZChXZWJLaXRGcmFtZSogZnJhbWUpCi17Ci0gICAgZ19yZXR1
cm5faWZfZmFpbChXRUJLSVRfSVNfRlJBTUUoZnJhbWUpKTsKLQotICAgIEZyYW1lKiBjb3JlRnJh
bWUgPSBjb3JlKGZyYW1lKTsKLSAgICBnX3JldHVybl9pZl9mYWlsKGNvcmVGcmFtZSk7Ci0KLSAg
ICBjb3JlRnJhbWUtPmxvYWRlcigpLT5yZWxvYWQoKTsKLX0KLQotLyoqCi0gKiB3ZWJraXRfZnJh
bWVfZmluZF9mcmFtZToKLSAqIEBmcmFtZTogYSAjV2ViS2l0RnJhbWUKLSAqIEBuYW1lOiB0aGUg
bmFtZSBvZiB0aGUgZnJhbWUgdG8gYmUgZm91bmQKLSAqCi0gKiBGb3IgcHJlLWRlZmluZWQgbmFt
ZXMsIHJldHVybnMgQGZyYW1lIGlmIEBuYW1lIGlzICJfc2VsZiIgb3IgIl9jdXJyZW50IiwKLSAq
IHJldHVybnMgQGZyYW1lJ3MgcGFyZW50IGZyYW1lIGlmIEBuYW1lIGlzICJfcGFyZW50IiwgYW5k
IHJldHVybnMgdGhlIG1haW4KLSAqIGZyYW1lIGlmIEBuYW1lIGlzICJfdG9wIi4gQWxzbyByZXR1
cm5zIEBmcmFtZSBpZiBpdCBpcyB0aGUgbWFpbiBmcmFtZSBhbmQKLSAqIEBuYW1lIGlzIGVpdGhl
ciAiX3BhcmVudCIgb3IgIl90b3AiLiBGb3Igb3RoZXIgbmFtZXMsIHRoaXMgZnVuY3Rpb24gcmV0
dXJucwotICogdGhlIGZpcnN0IGZyYW1lIHRoYXQgbWF0Y2hlcyBAbmFtZS4gVGhpcyBmdW5jdGlv
biBzZWFyY2hlcyBAZnJhbWUgYW5kIGl0cwotICogZGVzY2VuZGVudHMgZmlyc3QsIHRoZW4gQGZy
YW1lJ3MgcGFyZW50IGFuZCBpdHMgY2hpbGRyZW4gbW92aW5nIHVwIHRoZQotICogaGllcmFyY2h5
IHVudGlsIGEgbWF0Y2ggaXMgZm91bmQuIElmIG5vIG1hdGNoIGlzIGZvdW5kIGluIEBmcmFtZSdz
Ci0gKiBoaWVyYXJjaHksIHRoaXMgZnVuY3Rpb24gd2lsbCBzZWFyY2ggZm9yIGEgbWF0Y2hpbmcg
ZnJhbWUgaW4gb3RoZXIgbWFpbgotICogZnJhbWUgaGllcmFyY2hpZXMuIFJldHVybnMgJU5VTEwg
aWYgbm8gbWF0Y2ggaXMgZm91bmQuCi0gKgotICogUmV0dXJuIHZhbHVlOiB0aGUgZm91bmQgI1dl
YktpdEZyYW1lIG9yICVOVUxMIGluIGNhc2Ugbm9uZSBpcyBmb3VuZAotICovCi1XZWJLaXRGcmFt
ZSogd2Via2l0X2ZyYW1lX2ZpbmRfZnJhbWUoV2ViS2l0RnJhbWUqIGZyYW1lLCBjb25zdCBnY2hh
ciogbmFtZSkKLXsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfRlJBTUUoZnJh
bWUpLCBOVUxMKTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChuYW1lLCBOVUxMKTsKLQotICAg
IEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKGZyYW1lKTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFp
bChjb3JlRnJhbWUsIE5VTEwpOwotCi0gICAgU3RyaW5nIG5hbWVTdHJpbmcgPSBTdHJpbmc6OmZy
b21VVEY4KG5hbWUpOwotICAgIHJldHVybiBraXQoY29yZUZyYW1lLT50cmVlKCktPmZpbmQoQXRv
bWljU3RyaW5nKG5hbWVTdHJpbmcpKSk7Ci19Ci0KLS8qKgotICogd2Via2l0X2ZyYW1lX2dldF9n
bG9iYWxfY29udGV4dDoKLSAqIEBmcmFtZTogYSAjV2ViS2l0RnJhbWUKLSAqCi0gKiBHZXRzIHRo
ZSBnbG9iYWwgSmF2YVNjcmlwdCBleGVjdXRpb24gY29udGV4dC4gVXNlIHRoaXMgZnVuY3Rpb24g
dG8gYnJpZGdlCi0gKiBiZXR3ZWVuIHRoZSBXZWJLaXQgYW5kIEphdmFTY3JpcHRDb3JlIEFQSXMu
Ci0gKgotICogUmV0dXJuIHZhbHVlOiB0aGUgZ2xvYmFsIEphdmFTY3JpcHQgY29udGV4dAotICov
Ci1KU0dsb2JhbENvbnRleHRSZWYgd2Via2l0X2ZyYW1lX2dldF9nbG9iYWxfY29udGV4dChXZWJL
aXRGcmFtZSogZnJhbWUpCi17Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX0ZS
QU1FKGZyYW1lKSwgTlVMTCk7Ci0KLSAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShmcmFtZSk7
Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoY29yZUZyYW1lLCBOVUxMKTsKLQotICAgIHJldHVy
biB0b0dsb2JhbFJlZihjb3JlRnJhbWUtPnNjcmlwdFByb3h5KCktPmludGVycHJldGVyKCktPmds
b2JhbEV4ZWMoKSk7Ci19Ci0KLX0KSW5kZXg6IFdlYktpdC9ndGsvQXBpL3dlYmtpdGd0a2ZyYW1l
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViS2l0L2d0ay9BcGkvd2Via2l0Z3RrZnJhbWUuaAkocmV2aXNp
b24gMjgyNTEpCisrKyBXZWJLaXQvZ3RrL0FwaS93ZWJraXRndGtmcmFtZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDEwNSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBI
YW5zIFBldGVyIEZyZXl0aGVyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgQWxwIFRva2VyIDxhbHBA
YXRva2VyLmNvbT4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAotICogMy4gIE5laXRoZXIgdGhlIG5hbWUg
b2YgQXBwbGUsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLiAKLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAot
ICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jaWZuZGVmIFdFQktJVF9GUkFNRV9ICi0jZGVmaW5lIFdFQktJVF9GUkFNRV9ICi0KLSNp
bmNsdWRlIDxnbGliLW9iamVjdC5oPgotI2luY2x1ZGUgPGdkay9nZGsuaD4KLQotI2luY2x1ZGUg
IndlYmtpdGd0a2RlZmluZXMuaCIKLQotR19CRUdJTl9ERUNMUwotCi0jZGVmaW5lIFdFQktJVF9U
WVBFX0ZSQU1FICAgICAgICAgICAgKHdlYmtpdF9mcmFtZV9nZXRfdHlwZSgpKQotI2RlZmluZSBX
RUJLSVRfRlJBTUUob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgo
b2JqKSwgV0VCS0lUX1RZUEVfRlJBTUUsIFdlYktpdEZyYW1lKSkKLSNkZWZpbmUgV0VCS0lUX0ZS
QU1FX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdF
QktJVF9UWVBFX0ZSQU1FLCBXZWJLaXRGcmFtZUNsYXNzKSkKLSNkZWZpbmUgV0VCS0lUX0lTX0ZS
QU1FKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJ
VF9UWVBFX0ZSQU1FKSkKLSNkZWZpbmUgV0VCS0lUX0lTX0ZSQU1FX0NMQVNTKGtsYXNzKSAoR19U
WVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9UWVBFX0ZSQU1FKSkKLSNkZWZp
bmUgV0VCS0lUX0ZSQU1FX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFT
Uygob2JqKSwgIFdFQktJVF9UWVBFX0ZSQU1FLCBXZWJLaXRGcmFtZUNsYXNzKSkKLQotCi1zdHJ1
Y3QgX1dlYktpdEZyYW1lIHsKLSAgICBHT2JqZWN0IHBhcmVudDsKLX07Ci0KLXN0cnVjdCBfV2Vi
S2l0RnJhbWVDbGFzcyB7Ci0gICAgR09iamVjdENsYXNzIHBhcmVudDsKLQotICAgIHZvaWQgKCp0
aXRsZV9jaGFuZ2VkKSAoV2ViS2l0RnJhbWUqIGZyYW1lLCBnY2hhciogdGl0bGUsIGdjaGFyKiBs
b2NhdGlvbik7Ci0KLSAgICAvKgotICAgICAqIHByb3RlY3RlZCB2aXJ0dWFsIG1ldGhvZHMKLSAg
ICAgKi8KLSAgICB2b2lkICgqbW91c2VfbW92ZV9ldmVudCkgIChXZWJLaXRGcmFtZSogZnJhbWUs
IEdka0V2ZW50KiBtb3ZlX2V2ZW50KTsKLSAgICB2b2lkICgqbW91c2VfcHJlc3NfZXZlbnQpIChX
ZWJLaXRGcmFtZSogZnJhbWUsIEdka0V2ZW50KiBwcmVzc19ldmVudCk7Ci0gICAgdm9pZCAoKm1v
dXNlX3JlbGVhc2VfZXZlbnQpIChXZWJLaXRGcmFtZSogZnJhbWUsIEdka0V2ZW50KiBtb3VzZV9y
ZWxlYXNlX2V2ZW50KTsKLSAgICB2b2lkICgqbW91c2VfZG91YmxlX2NsaWNrX2V2ZW50KSAoV2Vi
S2l0RnJhbWUqIGZyYW1lLCBHZGtFdmVudCogZG91YmxlX2NsaWNrX2V2ZW50KTsKLSAgICB2b2lk
ICgqbW91c2Vfd2hlZWxfZXZlbnQpIChXZWJLaXRGcmFtZSogZnJhbWUsIEdka0V2ZW50KiB3aGVl
bF9ldmVudCk7Ci19OwotCi1XRUJLSVRfQVBJIEdUeXBlCi13ZWJraXRfZnJhbWVfZ2V0X3R5cGUg
KHZvaWQpOwotCi1XRUJLSVRfQVBJIFdlYktpdEZyYW1lKgotd2Via2l0X2ZyYW1lX25ldyAoV2Vi
S2l0UGFnZSogcGFnZSk7Ci0KLVdFQktJVF9BUEkgV2ViS2l0UGFnZSoKLXdlYmtpdF9mcmFtZV9n
ZXRfcGFnZSAoV2ViS2l0RnJhbWUqIGZyYW1lKTsKLQotV0VCS0lUX0FQSSBjb25zdCBnY2hhcioK
LXdlYmtpdF9mcmFtZV9nZXRfbmFtZSAoV2ViS2l0RnJhbWUqIGZyYW1lKTsKLQotV0VCS0lUX0FQ
SSBjb25zdCBnY2hhcioKLXdlYmtpdF9mcmFtZV9nZXRfdGl0bGUgKFdlYktpdEZyYW1lKiBmcmFt
ZSk7Ci0KLVdFQktJVF9BUEkgY29uc3QgZ2NoYXIqCi13ZWJraXRfZnJhbWVfZ2V0X2xvY2F0aW9u
IChXZWJLaXRGcmFtZSogZnJhbWUpOwotCi1XRUJLSVRfQVBJIFdlYktpdEZyYW1lKgotd2Via2l0
X2ZyYW1lX2dldF9wYXJlbnQgKFdlYktpdEZyYW1lKiBmcmFtZSk7Ci0KLVdFQktJVF9BUEkgdm9p
ZAotd2Via2l0X2ZyYW1lX2xvYWRfcmVxdWVzdCAoV2ViS2l0RnJhbWUqIGZyYW1lLCBXZWJLaXRO
ZXR3b3JrUmVxdWVzdCogcmVxdWVzdCk7Ci0KLVdFQktJVF9BUEkgdm9pZAotd2Via2l0X2ZyYW1l
X3N0b3BfbG9hZGluZyAoV2ViS2l0RnJhbWUqIGZyYW1lKTsKLQotV0VCS0lUX0FQSSB2b2lkCi13
ZWJraXRfZnJhbWVfcmVsb2FkIChXZWJLaXRGcmFtZSogZnJhbWUpOwotCi1XRUJLSVRfQVBJIFdl
YktpdEZyYW1lKgotd2Via2l0X2ZyYW1lX2ZpbmRfZnJhbWUgKFdlYktpdEZyYW1lKiBmcmFtZSwg
Y29uc3QgZ2NoYXIqIG5hbWUpOwotCi1XRUJLSVRfQVBJIEpTR2xvYmFsQ29udGV4dFJlZgotd2Vi
a2l0X2ZyYW1lX2dldF9nbG9iYWxfY29udGV4dCAoV2ViS2l0RnJhbWUqIGZyYW1lKTsKLQotR19F
TkRfREVDTFMKLQotI2VuZGlmCkluZGV4OiBXZWJLaXQvZ3RrL0FwaS93ZWJraXRndGtnbG9iYWwu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9ndGsvQXBpL3dlYmtpdGd0a2dsb2JhbC5jcHAJKHJl
dmlzaW9uIDI4MjUxKQorKysgV2ViS2l0L2d0ay9BcGkvd2Via2l0Z3RrZ2xvYmFsLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA3IEhv
bGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSAqIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKLSAqIDMuICBOZWl0
aGVyIHRoZSBuYW1lIG9mIEFwcGxlLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0g
KiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkK
LSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAq
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIndlYmtpdGd0
a2dsb2JhbC5oIgotCi0jaW5jbHVkZSAiTG9nZ2luZy5oIgotI2luY2x1ZGUgIkRhdGFiYXNlVHJh
Y2tlci5oIgotCi0jaW5jbHVkZSA8Z2xpYi5oPgotCi1leHRlcm4gIkMiIHsKLXZvaWQgd2Via2l0
X2luaXQodm9pZCkKLXsKLSAgICBXZWJDb3JlOjpJbml0aWFsaXplTG9nZ2luZ0NoYW5uZWxzSWZO
ZWNlc3NhcnkoKTsKLQotICAgIFdlYkNvcmU6OmluaXRpYWxpemVUaHJlYWRpbmcoKTsKLQotI2lm
IEVOQUJMRShEQVRBQkFTRSkKLSAgICAvLyBGSVhNRTogSXQgc2hvdWxkIGJlIHBvc3NpYmxlIGZv
ciBjbGllbnQgYXBwbGljYXRpb25zIHRvIG92ZXJyaWRlIHRoaXMgZGVmYXVsdCBsb2NhdGlvbgot
ICAgIGdjaGFyKiBkYXRhYmFzZURpcmVjdG9yeSA9IGdfYnVpbGRfZmlsZW5hbWUoZ19nZXRfdXNl
cl9kYXRhX2RpcigpLCAid2Via2l0IiwgImRhdGFiYXNlcyIsIE5VTEwpOwotICAgIFdlYkNvcmU6
OkRhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLnNldERhdGFiYXNlUGF0aChkYXRhYmFzZURpcmVj
dG9yeSk7Ci0gICAgZ19mcmVlKGRhdGFiYXNlRGlyZWN0b3J5KTsKLSNlbmRpZgotfQotfQpJbmRl
eDogV2ViS2l0L2d0ay9BcGkvd2Via2l0Z3RrZ2xvYmFsLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0
L2d0ay9BcGkvd2Via2l0Z3RrZ2xvYmFsLmgJKHJldmlzaW9uIDI4MjUxKQorKysgV2ViS2l0L2d0
ay9BcGkvd2Via2l0Z3RrZ2xvYmFsLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNDEgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4gCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4gCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSwgSW5jLiAo
IkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9t
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
IAotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05U
UklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgV0VC
S0lUX0dMT0JBTF9ICi0jZGVmaW5lIFdFQktJVF9HTE9CQUxfSAotCi0jaW5jbHVkZSAid2Via2l0
Z3RrZGVmaW5lcy5oIgotCi1HX0JFR0lOX0RFQ0xTCi0KLVdFQktJVF9BUEkgdm9pZAotd2Via2l0
X2luaXQgKHZvaWQpOwotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYKSW5kZXg6IFdlYktpdC9ndGsv
QXBpL3dlYmtpdGd0a25ldHdvcmtyZXF1ZXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvZ3Rr
L0FwaS93ZWJraXRndGtuZXR3b3JrcmVxdWVzdC5jcHAJKHJldmlzaW9uIDI4MjUxKQorKysgV2Vi
S2l0L2d0ay9BcGkvd2Via2l0Z3RrbmV0d29ya3JlcXVlc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDk0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0
ZXIgRnJleXRoZXIKLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAotICogMy4gIE5laXRoZXIgdGhlIG5hbWUg
b2YgQXBwbGUsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLiAKLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAot
ICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpbmNsdWRlICJ3ZWJraXRndGtuZXR3b3JrcmVx
dWVzdC5oIgotI2luY2x1ZGUgIndlYmtpdGd0a3ByaXZhdGUuaCIKLQotdXNpbmcgbmFtZXNwYWNl
IFdlYktpdDsKLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1leHRlcm4gIkMiIHsKLQotR19E
RUZJTkVfVFlQRShXZWJLaXROZXR3b3JrUmVxdWVzdCwgd2Via2l0X25ldHdvcmtfcmVxdWVzdCwg
R19UWVBFX09CSkVDVCk7Ci0KLXN0YXRpYyB2b2lkIHdlYmtpdF9uZXR3b3JrX3JlcXVlc3RfZmlu
YWxpemUoR09iamVjdCogb2JqZWN0KQotewotICAgIFdlYktpdE5ldHdvcmtSZXF1ZXN0UHJpdmF0
ZSogcmVxdWVzdFByaXZhdGUgPSBXRUJLSVRfTkVUV09SS19SRVFVRVNUX0dFVF9QUklWQVRFKG9i
amVjdCk7Ci0KLSAgICBnX2ZyZWUocmVxdWVzdFByaXZhdGUtPnVyaSk7Ci0KLSAgICBHX09CSkVD
VF9DTEFTUyh3ZWJraXRfbmV0d29ya19yZXF1ZXN0X3BhcmVudF9jbGFzcyktPmZpbmFsaXplKG9i
amVjdCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHdlYmtpdF9uZXR3b3JrX3JlcXVlc3RfY2xhc3NfaW5p
dChXZWJLaXROZXR3b3JrUmVxdWVzdENsYXNzKiByZXF1ZXN0Q2xhc3MpCi17Ci0gICAgZ190eXBl
X2NsYXNzX2FkZF9wcml2YXRlKHJlcXVlc3RDbGFzcywgc2l6ZW9mKFdlYktpdE5ldHdvcmtSZXF1
ZXN0UHJpdmF0ZSkpOwotCi0gICAgR19PQkpFQ1RfQ0xBU1MocmVxdWVzdENsYXNzKS0+ZmluYWxp
emUgPSB3ZWJraXRfbmV0d29ya19yZXF1ZXN0X2ZpbmFsaXplOwotfQotCi1zdGF0aWMgdm9pZCB3
ZWJraXRfbmV0d29ya19yZXF1ZXN0X2luaXQoV2ViS2l0TmV0d29ya1JlcXVlc3QqIHJlcXVlc3Qp
Ci17Ci19Ci0KLVdlYktpdE5ldHdvcmtSZXF1ZXN0KiB3ZWJraXRfbmV0d29ya19yZXF1ZXN0X25l
dyhjb25zdCBnY2hhciogdXJpKQotewotICAgIFdlYktpdE5ldHdvcmtSZXF1ZXN0KiByZXF1ZXN0
ID0gV0VCS0lUX05FVFdPUktfUkVRVUVTVChnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfTkVUV09S
S19SRVFVRVNULCBOVUxMKSk7Ci0gICAgV2ViS2l0TmV0d29ya1JlcXVlc3RQcml2YXRlKiByZXF1
ZXN0UHJpdmF0ZSA9IFdFQktJVF9ORVRXT1JLX1JFUVVFU1RfR0VUX1BSSVZBVEUocmVxdWVzdCk7
Ci0KLSAgICByZXF1ZXN0UHJpdmF0ZS0+dXJpID0gZ19zdHJkdXAodXJpKTsKLQotICAgIHJldHVy
biByZXF1ZXN0OwotfQotCi12b2lkIHdlYmtpdF9uZXR3b3JrX3JlcXVlc3Rfc2V0X3VyaShXZWJL
aXROZXR3b3JrUmVxdWVzdCogcmVxdWVzdCwgY29uc3QgZ2NoYXIqIHVyaSkKLXsKLSAgICBXZWJL
aXROZXR3b3JrUmVxdWVzdFByaXZhdGUqIHJlcXVlc3RQcml2YXRlOwotCi0gICAgZ19yZXR1cm5f
aWZfZmFpbChXRUJLSVRfSVNfTkVUV09SS19SRVFVRVNUKHJlcXVlc3QpKTsKLQotICAgIHJlcXVl
c3RQcml2YXRlID0gV0VCS0lUX05FVFdPUktfUkVRVUVTVF9HRVRfUFJJVkFURShyZXF1ZXN0KTsK
LQotICAgIGdfZnJlZShyZXF1ZXN0UHJpdmF0ZS0+dXJpKTsKLSAgICByZXF1ZXN0UHJpdmF0ZS0+
dXJpID0gZ19zdHJkdXAodXJpKTsKLX0KLQotY29uc3QgZ2NoYXIqIHdlYmtpdF9uZXR3b3JrX3Jl
cXVlc3RfZ2V0X3VyaShXZWJLaXROZXR3b3JrUmVxdWVzdCogcmVxdWVzdCkKLXsKLSAgICBXZWJL
aXROZXR3b3JrUmVxdWVzdFByaXZhdGUqIHJlcXVlc3RQcml2YXRlOwotCi0gICAgZ19yZXR1cm5f
dmFsX2lmX2ZhaWwoV0VCS0lUX0lTX05FVFdPUktfUkVRVUVTVChyZXF1ZXN0KSwgTlVMTCk7Ci0K
LSAgICByZXF1ZXN0UHJpdmF0ZSA9IFdFQktJVF9ORVRXT1JLX1JFUVVFU1RfR0VUX1BSSVZBVEUo
cmVxdWVzdCk7Ci0KLSAgICByZXR1cm4gcmVxdWVzdFByaXZhdGUtPnVyaTsKLX0KLQotfQpJbmRl
eDogV2ViS2l0L2d0ay9BcGkvd2Via2l0Z3RrbmV0d29ya3JlcXVlc3QuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJLaXQvZ3RrL0FwaS93ZWJraXRndGtuZXR3b3JrcmVxdWVzdC5oCShyZXZpc2lvbiAyODI1
MSkKKysrIFdlYktpdC9ndGsvQXBpL3dlYmtpdGd0a25ldHdvcmtyZXF1ZXN0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNjggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIg
SGFucyBQZXRlciBGcmV5dGhlcgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0gKiAyLiAgUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCi0gKiAzLiAgTmVpdGhlciB0
aGUgbmFtZSBvZiBBcHBsZSwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAg
IGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpZm5kZWYgV0VCS0lUX05FVFdPUktfUkVRVUVTVF9ICi0jZGVmaW5lIFdF
QktJVF9ORVRXT1JLX1JFUVVFU1RfSAotCi0jaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KLQotI2lu
Y2x1ZGUgIndlYmtpdGd0a2RlZmluZXMuaCIKLQotR19CRUdJTl9ERUNMUwotCi0jZGVmaW5lIFdF
QktJVF9UWVBFX05FVFdPUktfUkVRVUVTVCAgICAgICAgICAgICh3ZWJraXRfbmV0d29ya19yZXF1
ZXN0X2dldF90eXBlKCkpCi0jZGVmaW5lIFdFQktJVF9ORVRXT1JLX1JFUVVFU1Qob2JqKSAgICAg
ICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX1RZUEVfTkVU
V09SS19SRVFVRVNULCBXZWJLaXROZXR3b3JrUmVxdWVzdCkpCi0jZGVmaW5lIFdFQktJVF9ORVRX
T1JLX1JFUVVFU1RfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xh
c3MpLCAgV0VCS0lUX1RZUEVfTkVUV09SS19SRVFVRVNULCBXZWJLaXROZXR3b3JrUmVxdWVzdENs
YXNzKSkKLSNkZWZpbmUgV0VCS0lUX0lTX05FVFdPUktfUkVRVUVTVChvYmopICAgICAgICAgKEdf
VFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfVFlQRV9ORVRXT1JLX1JFUVVF
U1QpKQotI2RlZmluZSBXRUJLSVRfSVNfTkVUV09SS19SRVFVRVNUX0NMQVNTKGtsYXNzKSAoR19U
WVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9UWVBFX05FVFdPUktfUkVRVUVT
VCkpCi0jZGVmaW5lIFdFQktJVF9ORVRXT1JLX1JFUVVFU1RfR0VUX0NMQVNTKG9iaikgIChHX1RZ
UEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX1RZUEVfTkVUV09SS19SRVFVRVNU
LCBXZWJLaXROZXR3b3JrUmVxdWVzdENsYXNzKSkKLQotCi1zdHJ1Y3QgX1dlYktpdE5ldHdvcmtS
ZXF1ZXN0IHsKLSAgICBHT2JqZWN0IHBhcmVudDsKLX07Ci0KLXN0cnVjdCBfV2ViS2l0TmV0d29y
a1JlcXVlc3RDbGFzcyB7Ci0gICAgR09iamVjdENsYXNzIHBhcmVudDsKLX07Ci0KLVdFQktJVF9B
UEkgR1R5cGUKLXdlYmtpdF9uZXR3b3JrX3JlcXVlc3RfZ2V0X3R5cGUgKHZvaWQpOwotCi1XRUJL
SVRfQVBJIFdlYktpdE5ldHdvcmtSZXF1ZXN0Kgotd2Via2l0X25ldHdvcmtfcmVxdWVzdF9uZXcg
KGNvbnN0IGdjaGFyKiB1cmkpOwotCi1XRUJLSVRfQVBJIHZvaWQKLXdlYmtpdF9uZXR3b3JrX3Jl
cXVlc3Rfc2V0X3VyaSAoV2ViS2l0TmV0d29ya1JlcXVlc3QqIHJlcXVlc3QsIGNvbnN0IGdjaGFy
KiB1cmkpOwotCi1XRUJLSVRfQVBJIGNvbnN0IGdjaGFyKgotd2Via2l0X25ldHdvcmtfcmVxdWVz
dF9nZXRfdXJpIChXZWJLaXROZXR3b3JrUmVxdWVzdCogcmVxdWVzdCk7Ci0KLUdfRU5EX0RFQ0xT
Ci0KLSNlbmRpZgpJbmRleDogV2ViS2l0L2d0ay9BcGkvd2Via2l0Z3RrcGFnZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViS2l0L2d0ay9BcGkvd2Via2l0Z3RrcGFnZS5jcHAJKHJldmlzaW9uIDI4MjUx
KQorKysgV2ViS2l0L2d0ay9BcGkvd2Via2l0Z3RrcGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsODY1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0
ZXIgRnJleXRoZXIKLSAqIENvcHlyaWdodCAoQykgMjAwNyBDaHJpc3RpYW4gRHl3YW4gPGNocmlz
dGlhbkB0d290b2FzdHMuZGU+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgWGFuIExvcGV6IDx4YW5A
Z25vbWUub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA3IEFscCBUb2tlciA8YWxwQGF0b2tlci5j
b20+Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICog
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxl
LCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICog
ICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4gCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQg
SVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
Ci0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lu
Y2x1ZGUgImNvbmZpZy5oIgotCi0jaW5jbHVkZSAid2Via2l0Z3RrcGFnZS5oIgotI2luY2x1ZGUg
IndlYmtpdGd0ay1tYXJzaGFsLmgiCi0jaW5jbHVkZSAid2Via2l0Z3RrcHJpdmF0ZS5oIgotCi0j
aW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJDaHJvbWVDbGllbnRHdGsuaCIK
LSNpbmNsdWRlICJDb250ZXh0TWVudUNsaWVudEd0ay5oIgotI2luY2x1ZGUgIkRyYWdDbGllbnRH
dGsuaCIKLSNpbmNsdWRlICJFZGl0b3JDbGllbnRHdGsuaCIKLSNpbmNsdWRlICJFdmVudEhhbmRs
ZXIuaCIKLSNpbmNsdWRlICJIaXRUZXN0UmVxdWVzdC5oIgotI2luY2x1ZGUgIkhpdFRlc3RSZXN1
bHQuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJJbnNwZWN0b3JD
bGllbnRHdGsuaCIKLSNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgotI2luY2x1ZGUgIkZyYW1lVmll
dy5oIgotI2luY2x1ZGUgIlBsYXRmb3JtS2V5Ym9hcmRFdmVudC5oIgotI2luY2x1ZGUgIlBsYXRm
b3JtV2hlZWxFdmVudC5oIgotI2luY2x1ZGUgIlN1YnN0aXR1dGVEYXRhLmgiCi0KLSNpbmNsdWRl
IDxnZGsvZ2Rra2V5c3ltcy5oPgotCi11c2luZyBuYW1lc3BhY2UgV2ViS2l0OwotdXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7Ci0KLWV4dGVybiAiQyIgewotCi1lbnVtIHsKLSAgICAvKiBub3JtYWwg
c2lnbmFscyAqLwotICAgIE5BVklHQVRJT05fUkVRVUVTVEVELAotICAgIFdJTkRPV19PQkpFQ1Rf
Q0xFQVJFRCwKLSAgICBMT0FEX1NUQVJURUQsCi0gICAgTE9BRF9QUk9HUkVTU19DSEFOR0VELAot
ICAgIExPQURfRklOSVNIRUQsCi0gICAgVElUTEVfQ0hBTkdFRCwKLSAgICBIT1ZFUklOR19PVkVS
X0xJTkssCi0gICAgU1RBVFVTX0JBUl9URVhUX0NIQU5HRUQsCi0gICAgSUNPTkRfTE9BREVELAot
ICAgIFNFTEVDVElPTl9DSEFOR0VELAotICAgIENPTlNPTEVfTUVTU0FHRSwKLSAgICBTQ1JJUFRf
QUxFUlQsCi0gICAgU0NSSVBUX0NPTkZJUk0sCi0gICAgU0NSSVBUX1BST01QVCwKLSAgICBMQVNU
X1NJR05BTAotfTsKLQotc3RhdGljIGd1aW50IHdlYmtpdF9wYWdlX3NpZ25hbHNbTEFTVF9TSUdO
QUxdID0geyAwLCB9OwotCi1HX0RFRklORV9UWVBFKFdlYktpdFBhZ2UsIHdlYmtpdF9wYWdlLCBH
VEtfVFlQRV9DT05UQUlORVIpCi0KLXN0YXRpYyBnYm9vbGVhbiB3ZWJraXRfcGFnZV9leHBvc2Vf
ZXZlbnQoR3RrV2lkZ2V0KiB3aWRnZXQsIEdka0V2ZW50RXhwb3NlKiBldmVudCkKLXsKLSAgICBG
cmFtZSogZnJhbWUgPSBjb3JlKGdldEZyYW1lRnJvbVBhZ2UoV0VCS0lUX1BBR0Uod2lkZ2V0KSkp
OwotICAgIEdka1JlY3RhbmdsZSBjbGlwOwotICAgIGdka19yZWdpb25fZ2V0X2NsaXBib3goZXZl
bnQtPnJlZ2lvbiwgJmNsaXApOwotICAgIGNhaXJvX3QqIGNyID0gZ2RrX2NhaXJvX2NyZWF0ZShl
dmVudC0+d2luZG93KTsKLSAgICBHcmFwaGljc0NvbnRleHQgY3R4KGNyKTsKLSAgICBjdHguc2V0
R2RrRXhwb3NlRXZlbnQoZXZlbnQpOwotICAgIGlmIChmcmFtZS0+cmVuZGVyZXIoKSkgewotICAg
ICAgICBmcmFtZS0+dmlldygpLT5sYXlvdXRJZk5lZWRlZFJlY3Vyc2l2ZSgpOwotICAgICAgICBm
cmFtZS0+dmlldygpLT5wYWludCgmY3R4LCBjbGlwKTsKLSAgICB9Ci0gICAgY2Fpcm9fZGVzdHJv
eShjcik7Ci0KLSAgICByZXR1cm4gRkFMU0U7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbiB3ZWJraXRf
cGFnZV9rZXlfZXZlbnQoR3RrV2lkZ2V0KiB3aWRnZXQsIEdka0V2ZW50S2V5KiBldmVudCkKLXsK
LSAgICBGcmFtZSogZnJhbWUgPSBjb3JlKGdldEZyYW1lRnJvbVBhZ2UoV0VCS0lUX1BBR0Uod2lk
Z2V0KSkpOwotICAgIFBsYXRmb3JtS2V5Ym9hcmRFdmVudCBrZXlib2FyZEV2ZW50KGV2ZW50KTsK
LQotICAgIGlmIChmcmFtZS0+ZXZlbnRIYW5kbGVyKCktPmtleUV2ZW50KGtleWJvYXJkRXZlbnQp
KQotICAgICAgICByZXR1cm4gVFJVRTsKLQotICAgIGlmIChldmVudC0+dHlwZSAhPSBHREtfS0VZ
X1BSRVNTKQotICAgICAgICByZXR1cm4gRkFMU0U7Ci0KLSAgICBGcmFtZVZpZXcqIHZpZXcgPSBm
cmFtZS0+dmlldygpOwotCi0gICAgLyogRklYTUU6IGF0IHRoZSB2ZXJ5IGxlYXN0IHdlIHNob3Vs
ZCBiZSB1c2luZyB0aGUgc2FtZSBjb2RlIHRoYW4gdGhlCi0gICAgICAgV2luZG93cyBwb3J0IGhl
cmUsIGJ1dCBvdXIgU2Nyb2xsVmlldyBmaWxlIGRpdmVyZ2VzIGVub3VnaCB0byBtYWtlCi0gICAg
ICAgdGhhdCBpbXBvc3NpYmxlLiBBIHNob3J0IHRlcm0gc29sdXRpb24gd291bGQgYmUgdG8gdW5p
ZnkgU2Nyb2xsVmlld1dpbgotICAgICAgIGFuZCBTY3JvbGxWaWV3R3RrLiBMb25nLXRlcm0gU2Ny
b2xsVmlldyBhbmQgRnJhbWVWaWV3IHNob3VsZCBiZQotICAgICAgIHVuaWZpZWQgYW5kIHVzZWQg
ZXZlcnl3aGVyZSBmb3Igc2Nyb2xsYmFycyAqLwotCi0gICAgc3dpdGNoIChldmVudC0+a2V5dmFs
KSB7Ci0gICAgY2FzZSAoR0RLX0Rvd24pOgotICAgICAgICB2aWV3LT5zY3JvbGxCeSgwLCBMSU5F
X1NURVApOwotICAgICAgICByZXR1cm4gVFJVRTsKLSAgICBjYXNlIChHREtfVXApOgotICAgICAg
ICB2aWV3LT5zY3JvbGxCeSgwLCAtTElORV9TVEVQKTsKLSAgICAgICAgcmV0dXJuIFRSVUU7Ci0g
ICAgY2FzZSAoR0RLX1JpZ2h0KToKLSAgICAgICAgdmlldy0+c2Nyb2xsQnkoTElORV9TVEVQLCAw
KTsKLSAgICAgICAgcmV0dXJuIFRSVUU7Ci0gICAgY2FzZSAoR0RLX0xlZnQpOgotICAgICAgICB2
aWV3LT5zY3JvbGxCeSgtTElORV9TVEVQLCAwKTsKLSAgICAgICAgcmV0dXJuIFRSVUU7Ci0gICAg
fQotCi0gICAgcmV0dXJuIEZBTFNFOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X3BhZ2Vf
YnV0dG9uX2V2ZW50KEd0a1dpZGdldCogd2lkZ2V0LCBHZGtFdmVudEJ1dHRvbiogZXZlbnQpCi17
Ci0gICAgRnJhbWUqIGZyYW1lID0gY29yZShnZXRGcmFtZUZyb21QYWdlKFdFQktJVF9QQUdFKHdp
ZGdldCkpKTsKLQotICAgIGlmIChldmVudC0+dHlwZSA9PSBHREtfQlVUVE9OX1JFTEVBU0UpCi0g
ICAgICAgIHJldHVybiBmcmFtZS0+ZXZlbnRIYW5kbGVyKCktPmhhbmRsZU1vdXNlUmVsZWFzZUV2
ZW50KFBsYXRmb3JtTW91c2VFdmVudChldmVudCkpOwotCi0gICAgLy8gRklYTUU6IG5lZWQgdG8g
a2VlcCB0cmFjayBvZiBzdWJmcmFtZSBmb2N1cyBmb3Iga2V5IGV2ZW50cwotICAgIGd0a193aWRn
ZXRfZ3JhYl9mb2N1cyhHVEtfV0lER0VUKHdpZGdldCkpOwotICAgIHJldHVybiBmcmFtZS0+ZXZl
bnRIYW5kbGVyKCktPmhhbmRsZU1vdXNlUHJlc3NFdmVudChQbGF0Zm9ybU1vdXNlRXZlbnQoZXZl
bnQpKTsKLX0KLQotc3RhdGljIGdib29sZWFuIHdlYmtpdF9wYWdlX21vdGlvbl9ldmVudChHdGtX
aWRnZXQqIHdpZGdldCwgR2RrRXZlbnRNb3Rpb24qIGV2ZW50KQotewotICAgIEZyYW1lKiBmcmFt
ZSA9IGNvcmUoZ2V0RnJhbWVGcm9tUGFnZShXRUJLSVRfUEFHRSh3aWRnZXQpKSk7Ci0gICAgcmV0
dXJuIGZyYW1lLT5ldmVudEhhbmRsZXIoKS0+bW91c2VNb3ZlZChQbGF0Zm9ybU1vdXNlRXZlbnQo
ZXZlbnQpKTsKLX0KLQotc3RhdGljIGdib29sZWFuIHdlYmtpdF9wYWdlX3Njcm9sbF9ldmVudChH
dGtXaWRnZXQqIHdpZGdldCwgR2RrRXZlbnRTY3JvbGwqIGV2ZW50KQotewotICAgIEZyYW1lKiBm
cmFtZSA9IGNvcmUoZ2V0RnJhbWVGcm9tUGFnZShXRUJLSVRfUEFHRSh3aWRnZXQpKSk7Ci0gICAg
UGxhdGZvcm1XaGVlbEV2ZW50IHdoZWVsRXZlbnQoZXZlbnQpOwotICAgIHJldHVybiBmcmFtZS0+
ZXZlbnRIYW5kbGVyKCktPmhhbmRsZVdoZWVsRXZlbnQod2hlZWxFdmVudCk7Ci19Ci0KLXN0YXRp
YyB2b2lkIHdlYmtpdF9wYWdlX3NpemVfYWxsb2NhdGUoR3RrV2lkZ2V0KiB3aWRnZXQsIEd0a0Fs
bG9jYXRpb24qIGFsbG9jYXRpb24pCi17Ci0gICAgR1RLX1dJREdFVF9DTEFTUyh3ZWJraXRfcGFn
ZV9wYXJlbnRfY2xhc3MpLT5zaXplX2FsbG9jYXRlKHdpZGdldCxhbGxvY2F0aW9uKTsKLQotICAg
IEZyYW1lKiBmcmFtZSA9IGNvcmUoZ2V0RnJhbWVGcm9tUGFnZShXRUJLSVRfUEFHRSh3aWRnZXQp
KSk7Ci0gICAgZnJhbWUtPnZpZXcoKS0+cmVzaXplKGFsbG9jYXRpb24tPndpZHRoLCBhbGxvY2F0
aW9uLT5oZWlnaHQpOwotICAgIGZyYW1lLT5mb3JjZUxheW91dCgpOwotICAgIGZyYW1lLT52aWV3
KCktPmFkanVzdFZpZXdTaXplKCk7Ci0gICAgZnJhbWUtPnNlbmRSZXNpemVFdmVudCgpOwotfQot
Ci1zdGF0aWMgdm9pZCB3ZWJraXRfcGFnZV9yZWFsaXplKEd0a1dpZGdldCogd2lkZ2V0KQotewot
ICAgIEdUS19XSURHRVRfU0VUX0ZMQUdTKHdpZGdldCwgR1RLX1JFQUxJWkVEKTsKLQotICAgIEdk
a1dpbmRvd0F0dHIgYXR0cmlidXRlczsKLSAgICBhdHRyaWJ1dGVzLndpbmRvd190eXBlID0gR0RL
X1dJTkRPV19DSElMRDsKLSAgICBhdHRyaWJ1dGVzLnggPSB3aWRnZXQtPmFsbG9jYXRpb24ueDsK
LSAgICBhdHRyaWJ1dGVzLnkgPSB3aWRnZXQtPmFsbG9jYXRpb24ueTsKLSAgICBhdHRyaWJ1dGVz
LndpZHRoID0gd2lkZ2V0LT5hbGxvY2F0aW9uLndpZHRoOwotICAgIGF0dHJpYnV0ZXMuaGVpZ2h0
ID0gd2lkZ2V0LT5hbGxvY2F0aW9uLmhlaWdodDsKLSAgICBhdHRyaWJ1dGVzLndjbGFzcyA9IEdE
S19JTlBVVF9PVVRQVVQ7Ci0gICAgYXR0cmlidXRlcy52aXN1YWwgPSBndGtfd2lkZ2V0X2dldF92
aXN1YWwgKHdpZGdldCk7Ci0gICAgYXR0cmlidXRlcy5jb2xvcm1hcCA9IGd0a193aWRnZXRfZ2V0
X2NvbG9ybWFwICh3aWRnZXQpOwotICAgIGF0dHJpYnV0ZXMuZXZlbnRfbWFzayA9IEdES19WSVNJ
QklMSVRZX05PVElGWV9NQVNLCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBHREtfRVhQ
T1NVUkVfTUFTSwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgR0RLX0JVVFRPTl9QUkVT
U19NQVNLCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBHREtfQlVUVE9OX1JFTEVBU0Vf
TUFTSwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgR0RLX1BPSU5URVJfTU9USU9OX01B
U0sKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEdES19LRVlfUFJFU1NfTUFTSwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHwgR0RLX0tFWV9SRUxFQVNFX01BU0sKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB8IEdES19CVVRUT05fTU9USU9OX01BU0sKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB8IEdES19CVVRUT04xX01PVElPTl9NQVNLCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfCBHREtfQlVUVE9OMl9NT1RJT05fTUFTSwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHwgR0RLX0JVVFRPTjNfTU9USU9OX01BU0s7Ci0KLSAgICBnaW50IGF0dHJp
YnV0ZXNfbWFzayA9IEdES19XQV9YIHwgR0RLX1dBX1kgfCBHREtfV0FfVklTVUFMIHwgR0RLX1dB
X0NPTE9STUFQOwotICAgIHdpZGdldC0+d2luZG93ID0gZ2RrX3dpbmRvd19uZXcoZ3RrX3dpZGdl
dF9nZXRfcGFyZW50X3dpbmRvdyAod2lkZ2V0KSwgJmF0dHJpYnV0ZXMsIGF0dHJpYnV0ZXNfbWFz
ayk7Ci0gICAgZ2RrX3dpbmRvd19zZXRfdXNlcl9kYXRhKHdpZGdldC0+d2luZG93LCB3aWRnZXQp
OwotfQotCi1zdGF0aWMgdm9pZCB3ZWJraXRfcGFnZV9zZXRfc2Nyb2xsX2FkanVzdG1lbnRzKFdl
YktpdFBhZ2UqIHBhZ2UsIEd0a0FkanVzdG1lbnQqIGhhZGosIEd0a0FkanVzdG1lbnQqIHZhZGop
Ci17Ci0gICAgRnJhbWVWaWV3KiB2aWV3ID0gY29yZShnZXRGcmFtZUZyb21QYWdlKHBhZ2UpKS0+
dmlldygpOwotICAgIHZpZXctPnNldEd0a0FkanVzdG1lbnRzKGhhZGosIHZhZGopOwotfQotCi1z
dGF0aWMgdm9pZCB3ZWJraXRfcGFnZV9jb250YWluZXJfYWRkKEd0a0NvbnRhaW5lciogY29udGFp
bmVyLCBHdGtXaWRnZXQqIHdpZGdldCkKLXsKLSAgICBXZWJLaXRQYWdlKiBwYWdlID0gV0VCS0lU
X1BBR0UoY29udGFpbmVyKTsKLSAgICBXZWJLaXRQYWdlUHJpdmF0ZSogcHJpdmF0ZV9kYXRhID0g
V0VCS0lUX1BBR0VfR0VUX1BSSVZBVEUocGFnZSk7Ci0KLSAgICBwcml2YXRlX2RhdGEtPmNoaWxk
cmVuLmFkZCh3aWRnZXQpOwotICAgIGlmIChHVEtfV0lER0VUX1JFQUxJWkVEKGNvbnRhaW5lcikp
Ci0gICAgICAgIGd0a193aWRnZXRfc2V0X3BhcmVudF93aW5kb3cod2lkZ2V0LCBHVEtfV0lER0VU
KHBhZ2UpLT53aW5kb3cpOwotICAgIGd0a193aWRnZXRfc2V0X3BhcmVudCh3aWRnZXQsIEdUS19X
SURHRVQoY29udGFpbmVyKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHdlYmtpdF9wYWdlX2NvbnRhaW5l
cl9yZW1vdmUoR3RrQ29udGFpbmVyKiBjb250YWluZXIsIEd0a1dpZGdldCogd2lkZ2V0KQotewot
ICAgIFdlYktpdFBhZ2VQcml2YXRlKiBwcml2YXRlX2RhdGEgPSBXRUJLSVRfUEFHRV9HRVRfUFJJ
VkFURShXRUJLSVRfUEFHRShjb250YWluZXIpKTsKLQotICAgIGlmIChwcml2YXRlX2RhdGEtPmNo
aWxkcmVuLmNvbnRhaW5zKHdpZGdldCkpIHsKLSAgICAgICAgZ3RrX3dpZGdldF91bnBhcmVudCh3
aWRnZXQpOwotICAgICAgICBwcml2YXRlX2RhdGEtPmNoaWxkcmVuLnJlbW92ZSh3aWRnZXQpOwot
ICAgIH0KLX0KLQotc3RhdGljIHZvaWQgd2Via2l0X3BhZ2VfY29udGFpbmVyX2ZvcmFsbChHdGtD
b250YWluZXIqIGNvbnRhaW5lciwgZ2Jvb2xlYW4sIEd0a0NhbGxiYWNrIGNhbGxiYWNrLCBncG9p
bnRlciBjYWxsYmFja0RhdGEpCi17Ci0gICAgV2ViS2l0UGFnZVByaXZhdGUqIHByaXZhdGVEYXRh
ID0gV0VCS0lUX1BBR0VfR0VUX1BSSVZBVEUoV0VCS0lUX1BBR0UoY29udGFpbmVyKSk7Ci0KLSAg
ICBIYXNoU2V0PEd0a1dpZGdldCo+IGNoaWxkcmVuID0gcHJpdmF0ZURhdGEtPmNoaWxkcmVuOwot
ICAgIEhhc2hTZXQ8R3RrV2lkZ2V0Kj46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGNoaWxkcmVuLmVu
ZCgpOwotICAgIGZvciAoSGFzaFNldDxHdGtXaWRnZXQqPjo6Y29uc3RfaXRlcmF0b3IgY3VycmVu
dCA9IGNoaWxkcmVuLmJlZ2luKCk7IGN1cnJlbnQgIT0gZW5kOyArK2N1cnJlbnQpCi0gICAgICAg
ICgqY2FsbGJhY2spKCpjdXJyZW50LCBjYWxsYmFja0RhdGEpOwotfQotCi1zdGF0aWMgV2ViS2l0
UGFnZSogd2Via2l0X3BhZ2VfcmVhbF9jcmVhdGVfcGFnZShXZWJLaXRQYWdlKikKLXsKLSAgICBu
b3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiAwOwotfQotCi1zdGF0aWMgV2ViS2l0TmF2aWdh
dGlvblJlc3BvbnNlIHdlYmtpdF9wYWdlX3JlYWxfbmF2aWdhdGlvbl9yZXF1ZXN0ZWQoV2ViS2l0
UGFnZSosIFdlYktpdEZyYW1lKiBmcmFtZSwgV2ViS2l0TmV0d29ya1JlcXVlc3QqKQotewotICAg
IG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIFdFQktJVF9OQVZJR0FUSU9OX1JFU1BPTlNF
X0FDQ0VQVDsKLX0KLQotc3RhdGljIHZvaWQgd2Via2l0X3BhZ2VfcmVhbF93aW5kb3dfb2JqZWN0
X2NsZWFyZWQoV2ViS2l0UGFnZSosIFdlYktpdEZyYW1lKiwgSlNHbG9iYWxDb250ZXh0UmVmIGNv
bnRleHQsIEpTT2JqZWN0UmVmIHdpbmRvd19vYmplY3QpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQo
KTsKLX0KLQotc3RhdGljIGdjaGFyKiB3ZWJraXRfcGFnZV9yZWFsX2Nob29zZV9maWxlKFdlYktp
dFBhZ2UqLCBXZWJLaXRGcmFtZSosIGNvbnN0IGdjaGFyKiBvbGRfbmFtZSkKLXsKLSAgICBub3RJ
bXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBnX3N0cmR1cChvbGRfbmFtZSk7Ci19Ci0KLXR5cGVk
ZWYgZW51bSB7Ci0gICAgV0VCS0lUX1NDUklQVF9ESUFMT0dfQUxFUlQsCi0gICAgV0VCS0lUX1ND
UklQVF9ESUFMT0dfQ09ORklSTSwKLSAgICBXRUJLSVRfU0NSSVBUX0RJQUxPR19QUk9NUFQKLSB9
IFdlYktpdFNjcmlwdERpYWxvZ1R5cGU7Ci0KLXN0YXRpYyBnYm9vbGVhbiB3ZWJraXRfcGFnZV9z
Y3JpcHRfZGlhbG9nKFdlYktpdFBhZ2UqIHBhZ2UsIFdlYktpdEZyYW1lKiBmcmFtZSwgY29uc3Qg
Z2NoYXIqIG1lc3NhZ2UsIFdlYktpdFNjcmlwdERpYWxvZ1R5cGUgdHlwZSwgY29uc3QgZ2NoYXIq
IGRlZmF1bHRWYWx1ZSwgZ2NoYXIqKiB2YWx1ZSkKLXsKLSAgICBHdGtNZXNzYWdlVHlwZSBtZXNz
YWdlVHlwZTsKLSAgICBHdGtCdXR0b25zVHlwZSBidXR0b25zOwotICAgIGdpbnQgZGVmYXVsdFJl
c3BvbnNlOwotICAgIEd0a1dpZGdldCogd2luZG93OwotICAgIEd0a1dpZGdldCogZGlhbG9nOwot
ICAgIEd0a1dpZGdldCogZW50cnkgPSAwOwotICAgIGdib29sZWFuIGRpZENvbmZpcm0gPSBGQUxT
RTsKLQotICAgIHN3aXRjaCAodHlwZSkgewotICAgIGNhc2UgV0VCS0lUX1NDUklQVF9ESUFMT0df
QUxFUlQ6Ci0gICAgICAgIG1lc3NhZ2VUeXBlID0gR1RLX01FU1NBR0VfV0FSTklORzsKLSAgICAg
ICAgYnV0dG9ucyA9IEdUS19CVVRUT05TX0NMT1NFOwotICAgICAgICBkZWZhdWx0UmVzcG9uc2Ug
PSBHVEtfUkVTUE9OU0VfQ0xPU0U7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgV0VCS0lUX1ND
UklQVF9ESUFMT0dfQ09ORklSTToKLSAgICAgICAgbWVzc2FnZVR5cGUgPSBHVEtfTUVTU0FHRV9R
VUVTVElPTjsKLSAgICAgICAgYnV0dG9ucyA9IEdUS19CVVRUT05TX1lFU19OTzsKLSAgICAgICAg
ZGVmYXVsdFJlc3BvbnNlID0gR1RLX1JFU1BPTlNFX1lFUzsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBXRUJLSVRfU0NSSVBUX0RJQUxPR19QUk9NUFQ6Ci0gICAgICAgIG1lc3NhZ2VUeXBlID0g
R1RLX01FU1NBR0VfUVVFU1RJT047Ci0gICAgICAgIGJ1dHRvbnMgPSBHVEtfQlVUVE9OU19PS19D
QU5DRUw7Ci0gICAgICAgIGRlZmF1bHRSZXNwb25zZSA9IEdUS19SRVNQT05TRV9PSzsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgZ193YXJuaW5nKCJVbmtub3duIHZhbHVl
IGZvciBXZWJLaXRTY3JpcHREaWFsb2dUeXBlLiIpOwotICAgICAgICByZXR1cm4gRkFMU0U7Ci0g
ICAgfQotCi0gICAgd2luZG93ID0gZ3RrX3dpZGdldF9nZXRfdG9wbGV2ZWwoR1RLX1dJREdFVChw
YWdlKSk7Ci0gICAgZGlhbG9nID0gZ3RrX21lc3NhZ2VfZGlhbG9nX25ldyhHVEtfV0lER0VUX1RP
UExFVkVMKHdpbmRvdykgPyBHVEtfV0lORE9XKHdpbmRvdykgOiAwLCBHVEtfRElBTE9HX0RFU1RS
T1lfV0lUSF9QQVJFTlQsIG1lc3NhZ2VUeXBlLCBidXR0b25zLCAiJXMiLCBtZXNzYWdlKTsKLSAg
ICBnY2hhciogdGl0bGUgPSBnX3N0cmNvbmNhdCgiSmF2YVNjcmlwdCAtICIsIHdlYmtpdF9mcmFt
ZV9nZXRfbG9jYXRpb24oZnJhbWUpLCBOVUxMKTsKLSAgICBndGtfd2luZG93X3NldF90aXRsZShH
VEtfV0lORE9XKGRpYWxvZyksIHRpdGxlKTsKLSAgICBnX2ZyZWUodGl0bGUpOwotCi0gICAgaWYg
KHR5cGUgPT0gV0VCS0lUX1NDUklQVF9ESUFMT0dfUFJPTVBUKSB7Ci0gICAgICAgIGVudHJ5ID0g
Z3RrX2VudHJ5X25ldygpOwotICAgICAgICBndGtfZW50cnlfc2V0X3RleHQoR1RLX0VOVFJZKGVu
dHJ5KSwgZGVmYXVsdFZhbHVlKTsKLSAgICAgICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRB
SU5FUihHVEtfRElBTE9HKGRpYWxvZyktPnZib3gpLCBlbnRyeSk7Ci0gICAgICAgIGd0a19lbnRy
eV9zZXRfYWN0aXZhdGVzX2RlZmF1bHQoR1RLX0VOVFJZKGVudHJ5KSwgVFJVRSk7Ci0gICAgICAg
IGd0a193aWRnZXRfc2hvdyhlbnRyeSk7Ci0gICAgfQotCi0gICAgZ3RrX2RpYWxvZ19zZXRfZGVm
YXVsdF9yZXNwb25zZShHVEtfRElBTE9HKGRpYWxvZyksIGRlZmF1bHRSZXNwb25zZSk7Ci0gICAg
Z2ludCByZXNwb25zZSA9IGd0a19kaWFsb2dfcnVuKEdUS19ESUFMT0coZGlhbG9nKSk7Ci0KLSAg
ICBzd2l0Y2ggKHJlc3BvbnNlKSB7Ci0gICAgY2FzZSBHVEtfUkVTUE9OU0VfWUVTOgotICAgICAg
ICBkaWRDb25maXJtID0gVFJVRTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHVEtfUkVTUE9O
U0VfT0s6Ci0gICAgICAgIGRpZENvbmZpcm0gPSBUUlVFOwotICAgICAgICBpZiAoZW50cnkpCi0g
ICAgICAgICAgICAqdmFsdWUgPSBnX3N0cmR1cChndGtfZW50cnlfZ2V0X3RleHQoR1RLX0VOVFJZ
KGVudHJ5KSkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICAqdmFsdWUgPSAwOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIEdUS19SRVNQT05TRV9OTzoKLSAgICBjYXNlIEdUS19SRVNQT05T
RV9DQU5DRUw6Ci0gICAgICAgIGRpZENvbmZpcm0gPSBGQUxTRTsKLSAgICAgICAgYnJlYWs7Ci0K
LSAgICB9Ci0gICAgZ3RrX3dpZGdldF9kZXN0cm95KEdUS19XSURHRVQoZGlhbG9nKSk7Ci0gICAg
cmV0dXJuIGRpZENvbmZpcm07Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbiB3ZWJraXRfcGFnZV9yZWFs
X3NjcmlwdF9hbGVydChXZWJLaXRQYWdlKiBwYWdlLCBXZWJLaXRGcmFtZSogZnJhbWUsIGNvbnN0
IGdjaGFyKiBtZXNzYWdlKQotewotICAgIHdlYmtpdF9wYWdlX3NjcmlwdF9kaWFsb2cocGFnZSwg
ZnJhbWUsIG1lc3NhZ2UsIFdFQktJVF9TQ1JJUFRfRElBTE9HX0FMRVJULCAwLCAwKTsKLSAgICBy
ZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIGdib29sZWFuIHdlYmtpdF9wYWdlX3JlYWxfc2NyaXB0
X2NvbmZpcm0oV2ViS2l0UGFnZSogcGFnZSwgV2ViS2l0RnJhbWUqIGZyYW1lLCBjb25zdCBnY2hh
ciogbWVzc2FnZSwgZ2Jvb2xlYW4qIGRpZENvbmZpcm0pCi17Ci0gICAgKmRpZENvbmZpcm0gPSB3
ZWJraXRfcGFnZV9zY3JpcHRfZGlhbG9nKHBhZ2UsIGZyYW1lLCBtZXNzYWdlLCBXRUJLSVRfU0NS
SVBUX0RJQUxPR19DT05GSVJNLCAwLCAwKTsKLSAgICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGlj
IGdib29sZWFuIHdlYmtpdF9wYWdlX3JlYWxfc2NyaXB0X3Byb21wdChXZWJLaXRQYWdlKiBwYWdl
LCBXZWJLaXRGcmFtZSogZnJhbWUsIGNvbnN0IGdjaGFyKiBtZXNzYWdlLCBjb25zdCBnY2hhciog
ZGVmYXVsdFZhbHVlLCBnY2hhcioqIHZhbHVlKQotewotICAgIGlmICghd2Via2l0X3BhZ2Vfc2Ny
aXB0X2RpYWxvZyhwYWdlLCBmcmFtZSwgbWVzc2FnZSwgV0VCS0lUX1NDUklQVF9ESUFMT0dfUFJP
TVBULCBkZWZhdWx0VmFsdWUsIHZhbHVlKSkKLSAgICAgICAgKnZhbHVlID0gTlVMTDsKLSAgICBy
ZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIGdib29sZWFuIHdlYmtpdF9wYWdlX3JlYWxfY29uc29s
ZV9tZXNzYWdlKFdlYktpdFBhZ2UqIHBhZ2UsIGNvbnN0IGdjaGFyKiBtZXNzYWdlLCB1bnNpZ25l
ZCBpbnQgbGluZSwgY29uc3QgZ2NoYXIqIHNvdXJjZUlkKQotewotICAgIGdfcHJpbnQoImNvbnNv
bGUgbWVzc2FnZTogJXMgQCVkOiAlc1xuIiwgc291cmNlSWQsIGxpbmUsIG1lc3NhZ2UpOwotICAg
IHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgdm9pZCB3ZWJraXRfcGFnZV9maW5hbGl6ZShHT2Jq
ZWN0KiBvYmplY3QpCi17Ci0gICAgd2Via2l0X3BhZ2Vfc3RvcF9sb2FkaW5nKFdFQktJVF9QQUdF
KG9iamVjdCkpOwotCi0gICAgV2ViS2l0UGFnZVByaXZhdGUqIHBhZ2VEYXRhID0gV0VCS0lUX1BB
R0VfR0VUX1BSSVZBVEUoV0VCS0lUX1BBR0Uob2JqZWN0KSk7Ci0gICAgZGVsZXRlIHBhZ2VEYXRh
LT5wYWdlOwotICAgIGRlbGV0ZSBwYWdlRGF0YS0+c2V0dGluZ3M7Ci0gICAgZ19vYmplY3RfdW5y
ZWYocGFnZURhdGEtPm1haW5GcmFtZSk7Ci0gICAgZGVsZXRlIHBhZ2VEYXRhLT51c2VyQWdlbnQ7
Ci0KLSAgICBHX09CSkVDVF9DTEFTUyh3ZWJraXRfcGFnZV9wYXJlbnRfY2xhc3MpLT5maW5hbGl6
ZShvYmplY3QpOwotfQotCi1zdGF0aWMgdm9pZCB3ZWJraXRfcGFnZV9jbGFzc19pbml0KFdlYktp
dFBhZ2VDbGFzcyogcGFnZUNsYXNzKQotewotICAgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZShw
YWdlQ2xhc3MsIHNpemVvZihXZWJLaXRQYWdlUHJpdmF0ZSkpOwotCi0gICAgLyoKLSAgICAgKiBT
aWduYWxzCi0gICAgICovCi0KLSAgICB3ZWJraXRfcGFnZV9zaWduYWxzW05BVklHQVRJT05fUkVR
VUVTVEVEXSA9IGdfc2lnbmFsX25ldygibmF2aWdhdGlvbl9yZXF1ZXN0ZWQiLAotICAgICAgICAg
ICAgR19UWVBFX0ZST01fQ0xBU1MocGFnZUNsYXNzKSwKLSAgICAgICAgICAgIChHU2lnbmFsRmxh
Z3MpKEdfU0lHTkFMX1JVTl9MQVNUIHwgR19TSUdOQUxfQUNUSU9OKSwKLSAgICAgICAgICAgIEdf
U1RSVUNUX09GRlNFVCAoV2ViS2l0UGFnZUNsYXNzLCBuYXZpZ2F0aW9uX3JlcXVlc3RlZCksCi0g
ICAgICAgICAgICBOVUxMLAotICAgICAgICAgICAgTlVMTCwKLSAgICAgICAgICAgIHdlYmtpdF9t
YXJzaGFsX0lOVF9fT0JKRUNUX09CSkVDVCwKLSAgICAgICAgICAgIEdfVFlQRV9JTlQsIDIsCi0g
ICAgICAgICAgICBHX1RZUEVfT0JKRUNULAotICAgICAgICAgICAgR19UWVBFX09CSkVDVCk7Ci0K
LSAgICAvKioKLSAgICAgKiBXZWJLaXRQYWdlOjp3aW5kb3ctb2JqZWN0LWNsZWFyZWQ6Ci0gICAg
ICogQHBhZ2U6IHRoZSBvYmplY3Qgb24gd2hpY2ggdGhlIHNpZ25hbCBpcyBlbWl0dGVkCi0gICAg
ICogQGZyYW1lOiB0aGUgI1dlYktpdEZyYW1lIHRvIHdoaWNoIEB3aW5kb3dfb2JqZWN0IGJlbG9u
Z3MKLSAgICAgKiBAY29udGV4dDogdGhlICNKU0dsb2JhbENvbnRleHRSZWYgaG9sZGluZyB0aGUg
Z2xvYmFsIG9iamVjdCBhbmQgb3RoZXIKLSAgICAgKiBleGVjdXRpb24gc3RhdGU7IGVxdWl2YWxl
bnQgdG8gdGhlIHJldHVybiB2YWx1ZSBvZgotICAgICAqIHdlYmtpdF9mcmFtZV9nZXRfZ2xvYmFs
X2NvbnRleHQoQGZyYW1lKQotICAgICAqCi0gICAgICogQHdpbmRvd19vYmplY3Q6IHRoZSAjSlNP
YmplY3RSZWYgcmVwcmVzZW50aW5nIHRoZSBmcmFtZSdzIEphdmFTY3JpcHQKLSAgICAgKiB3aW5k
b3cgb2JqZWN0Ci0gICAgICoKLSAgICAgKiBFbWl0dGVkIHdoZW4gdGhlIEphdmFTY3JpcHQgd2lu
ZG93IG9iamVjdCBpbiBhICNXZWJLaXRGcmFtZSBoYXMgYmVlbgotICAgICAqIGNsZWFyZWQgaW4g
cHJlcGFyYXRpb24gZm9yIGEgbmV3IGxvYWQuIFRoaXMgaXMgdGhlIHByZWZlcnJlZCBwbGFjZSB0
bwotICAgICAqIHNldCBjdXN0b20gcHJvcGVydGllcyBvbiB0aGUgd2luZG93IG9iamVjdCB1c2lu
ZyB0aGUgSmF2YVNjcmlwdENvcmUgQVBJLgotICAgICAqLwotICAgIHdlYmtpdF9wYWdlX3NpZ25h
bHNbV0lORE9XX09CSkVDVF9DTEVBUkVEXSA9IGdfc2lnbmFsX25ldygid2luZG93X29iamVjdF9j
bGVhcmVkIiwKLSAgICAgICAgICAgIEdfVFlQRV9GUk9NX0NMQVNTKHBhZ2VDbGFzcyksCi0gICAg
ICAgICAgICAoR1NpZ25hbEZsYWdzKShHX1NJR05BTF9SVU5fTEFTVCB8IEdfU0lHTkFMX0FDVElP
TiksCi0gICAgICAgICAgICBHX1NUUlVDVF9PRkZTRVQgKFdlYktpdFBhZ2VDbGFzcywgd2luZG93
X29iamVjdF9jbGVhcmVkKSwKLSAgICAgICAgICAgIE5VTEwsCi0gICAgICAgICAgICBOVUxMLAot
ICAgICAgICAgICAgd2Via2l0X21hcnNoYWxfVk9JRF9fT0JKRUNUX1BPSU5URVJfUE9JTlRFUiwK
LSAgICAgICAgICAgIEdfVFlQRV9OT05FLCAzLAotICAgICAgICAgICAgV0VCS0lUX1RZUEVfRlJB
TUUsCi0gICAgICAgICAgICBHX1RZUEVfUE9JTlRFUiwKLSAgICAgICAgICAgIEdfVFlQRV9QT0lO
VEVSKTsKLQotICAgIC8qKgotICAgICAqIFdlYktpdFBhZ2U6OmxvYWQtc3RhcnRlZDoKLSAgICAg
KgotICAgICAqIEBwYWdlOiB0aGUgb2JqZWN0IG9uIHdoaWNoIHRoZSBzaWduYWwgaXMgZW1pdHRl
ZAotICAgICAqIEBmcmFtZTogdGhlIGZyYW1lIGdvaW5nIHRvIGRvIHRoZSBsb2FkCi0gICAgICoK
LSAgICAgKiBXaGVuIGEgI1dlYktpdEZyYW1lIGJlZ2lucyB0byBsb2FkIHRoaXMgc2lnbmFsIGlz
IGVtaXR0ZWQuCi0gICAgICovCi0gICAgd2Via2l0X3BhZ2Vfc2lnbmFsc1tMT0FEX1NUQVJURURd
ID0gZ19zaWduYWxfbmV3KCJsb2FkX3N0YXJ0ZWQiLAotICAgICAgICAgICAgR19UWVBFX0ZST01f
Q0xBU1MocGFnZUNsYXNzKSwKLSAgICAgICAgICAgIChHU2lnbmFsRmxhZ3MpKEdfU0lHTkFMX1JV
Tl9MQVNUIHwgR19TSUdOQUxfQUNUSU9OKSwKLSAgICAgICAgICAgIDAsCi0gICAgICAgICAgICBO
VUxMLAotICAgICAgICAgICAgTlVMTCwKLSAgICAgICAgICAgIGdfY2Nsb3N1cmVfbWFyc2hhbF9W
T0lEX19PQkpFQ1QsCi0gICAgICAgICAgICBHX1RZUEVfTk9ORSwgMSwKLSAgICAgICAgICAgIFdF
QktJVF9UWVBFX0ZSQU1FKTsKLQotICAgIC8qKgotICAgICAqIFdlYktpdFBhZ2U6OmxvYWQtcHJv
Z3Jlc3MtY2hhbmdlZDoKLSAgICAgKgotICAgICAqIEBwYWdlOiB0aGUgI1dlYktpdFBhZ2UKLSAg
ICAgKiBAcHJvZ3Jlc3M6IHRoZSBnbG9iYWwgcHJvZ3Jlc3MKLSAgICAgKi8KLSAgICB3ZWJraXRf
cGFnZV9zaWduYWxzW0xPQURfUFJPR1JFU1NfQ0hBTkdFRF0gPSBnX3NpZ25hbF9uZXcoImxvYWRf
cHJvZ3Jlc3NfY2hhbmdlZCIsCi0gICAgICAgICAgICBHX1RZUEVfRlJPTV9DTEFTUyhwYWdlQ2xh
c3MpLAotICAgICAgICAgICAgKEdTaWduYWxGbGFncykoR19TSUdOQUxfUlVOX0xBU1QgfCBHX1NJ
R05BTF9BQ1RJT04pLAotICAgICAgICAgICAgMCwKLSAgICAgICAgICAgIE5VTEwsCi0gICAgICAg
ICAgICBOVUxMLAotICAgICAgICAgICAgZ19jY2xvc3VyZV9tYXJzaGFsX1ZPSURfX0lOVCwKLSAg
ICAgICAgICAgIEdfVFlQRV9OT05FLCAxLAotICAgICAgICAgICAgR19UWVBFX0lOVCk7Ci0KLSAg
ICB3ZWJraXRfcGFnZV9zaWduYWxzW0xPQURfRklOSVNIRURdID0gZ19zaWduYWxfbmV3KCJsb2Fk
X2ZpbmlzaGVkIiwKLSAgICAgICAgICAgIEdfVFlQRV9GUk9NX0NMQVNTKHBhZ2VDbGFzcyksCi0g
ICAgICAgICAgICAoR1NpZ25hbEZsYWdzKShHX1NJR05BTF9SVU5fTEFTVCB8IEdfU0lHTkFMX0FD
VElPTiksCi0gICAgICAgICAgICAwLAotICAgICAgICAgICAgTlVMTCwKLSAgICAgICAgICAgIE5V
TEwsCi0gICAgICAgICAgICBnX2NjbG9zdXJlX21hcnNoYWxfVk9JRF9fT0JKRUNULAotICAgICAg
ICAgICAgR19UWVBFX05PTkUsIDEsCi0gICAgICAgICAgICBXRUJLSVRfVFlQRV9GUkFNRSk7Ci0K
LSAgICB3ZWJraXRfcGFnZV9zaWduYWxzW1RJVExFX0NIQU5HRURdID0gZ19zaWduYWxfbmV3KCJ0
aXRsZV9jaGFuZ2VkIiwKLSAgICAgICAgICAgIEdfVFlQRV9GUk9NX0NMQVNTKHBhZ2VDbGFzcyks
Ci0gICAgICAgICAgICAoR1NpZ25hbEZsYWdzKShHX1NJR05BTF9SVU5fTEFTVCB8IEdfU0lHTkFM
X0FDVElPTiksCi0gICAgICAgICAgICAwLAotICAgICAgICAgICAgTlVMTCwKLSAgICAgICAgICAg
IE5VTEwsCi0gICAgICAgICAgICB3ZWJraXRfbWFyc2hhbF9WT0lEX19TVFJJTkdfU1RSSU5HLAot
ICAgICAgICAgICAgR19UWVBFX05PTkUsIDIsCi0gICAgICAgICAgICBHX1RZUEVfU1RSSU5HLCBH
X1RZUEVfU1RSSU5HKTsKLQotICAgIHdlYmtpdF9wYWdlX3NpZ25hbHNbSE9WRVJJTkdfT1ZFUl9M
SU5LXSA9IGdfc2lnbmFsX25ldygiaG92ZXJpbmdfb3Zlcl9saW5rIiwKLSAgICAgICAgICAgIEdf
VFlQRV9GUk9NX0NMQVNTKHBhZ2VDbGFzcyksCi0gICAgICAgICAgICAoR1NpZ25hbEZsYWdzKShH
X1NJR05BTF9SVU5fTEFTVCB8IEdfU0lHTkFMX0FDVElPTiksCi0gICAgICAgICAgICAwLAotICAg
ICAgICAgICAgTlVMTCwKLSAgICAgICAgICAgIE5VTEwsCi0gICAgICAgICAgICB3ZWJraXRfbWFy
c2hhbF9WT0lEX19TVFJJTkdfU1RSSU5HLAotICAgICAgICAgICAgR19UWVBFX05PTkUsIDIsCi0g
ICAgICAgICAgICBHX1RZUEVfU1RSSU5HLAotICAgICAgICAgICAgR19UWVBFX1NUUklORyk7Ci0K
LSAgICB3ZWJraXRfcGFnZV9zaWduYWxzW1NUQVRVU19CQVJfVEVYVF9DSEFOR0VEXSA9IGdfc2ln
bmFsX25ldygic3RhdHVzX2Jhcl90ZXh0X2NoYW5nZWQiLAotICAgICAgICAgICAgR19UWVBFX0ZS
T01fQ0xBU1MocGFnZUNsYXNzKSwKLSAgICAgICAgICAgIChHU2lnbmFsRmxhZ3MpKEdfU0lHTkFM
X1JVTl9MQVNUIHwgR19TSUdOQUxfQUNUSU9OKSwKLSAgICAgICAgICAgIDAsCi0gICAgICAgICAg
ICBOVUxMLAotICAgICAgICAgICAgTlVMTCwKLSAgICAgICAgICAgIGdfY2Nsb3N1cmVfbWFyc2hh
bF9WT0lEX19TVFJJTkcsCi0gICAgICAgICAgICBHX1RZUEVfTk9ORSwgMSwKLSAgICAgICAgICAg
IEdfVFlQRV9TVFJJTkcpOwotCi0gICAgd2Via2l0X3BhZ2Vfc2lnbmFsc1tJQ09ORF9MT0FERURd
ID0gZ19zaWduYWxfbmV3KCJpY29uX2xvYWRlZCIsCi0gICAgICAgICAgICBHX1RZUEVfRlJPTV9D
TEFTUyhwYWdlQ2xhc3MpLAotICAgICAgICAgICAgKEdTaWduYWxGbGFncykoR19TSUdOQUxfUlVO
X0xBU1QgfCBHX1NJR05BTF9BQ1RJT04pLAotICAgICAgICAgICAgMCwKLSAgICAgICAgICAgIE5V
TEwsCi0gICAgICAgICAgICBOVUxMLAotICAgICAgICAgICAgZ19jY2xvc3VyZV9tYXJzaGFsX1ZP
SURfX1ZPSUQsCi0gICAgICAgICAgICBHX1RZUEVfTk9ORSwgMCk7Ci0KLSAgICB3ZWJraXRfcGFn
ZV9zaWduYWxzW1NFTEVDVElPTl9DSEFOR0VEXSA9IGdfc2lnbmFsX25ldygic2VsZWN0aW9uX2No
YW5nZWQiLAotICAgICAgICAgICAgR19UWVBFX0ZST01fQ0xBU1MocGFnZUNsYXNzKSwKLSAgICAg
ICAgICAgIChHU2lnbmFsRmxhZ3MpKEdfU0lHTkFMX1JVTl9MQVNUIHwgR19TSUdOQUxfQUNUSU9O
KSwKLSAgICAgICAgICAgIDAsCi0gICAgICAgICAgICBOVUxMLAotICAgICAgICAgICAgTlVMTCwK
LSAgICAgICAgICAgIGdfY2Nsb3N1cmVfbWFyc2hhbF9WT0lEX19WT0lELAotICAgICAgICAgICAg
R19UWVBFX05PTkUsIDApOwotCi0gICAgLyoqCi0gICAgICogV2ViS2l0UGFnZTo6Y29uc29sZS1t
ZXNzYWdlOgotICAgICAqCi0gICAgICogQHBhZ2U6IHRoZSBvYmplY3Qgb24gd2hpY2ggdGhlIHNp
Z25hbCBpcyBlbWl0dGVkCi0gICAgICogQG1lc3NhZ2U6IHRoZSBtZXNzYWdlIHRleHQKLSAgICAg
KiBAbGluZTogdGhlIGxpbmUgd2hlcmUgdGhlIGVycm9yIG9jY3VyZWQKLSAgICAgKiBAc291cmNl
X2lkOiB0aGUgc291cmNlIGlkCi0gICAgICogQHJldHVybjogVFJVRSB0byBzdG9wIG90aGVyIGhh
bmRsZXJzIGZyb20gYmVpbmcgaW52b2tlZCBmb3IgdGhlIGV2ZW50LiBGQUxTRSB0byBwcm9wYWdh
dGUgdGhlIGV2ZW50IGZ1cnRoZXIuCi0gICAgICoKLSAgICAgKiBBIEphdmFTY3JpcHQgY29uc29s
ZSBtZXNzYWdlIHdhcyBjcmVhdGVkLgotICAgICAqLwotICAgIHdlYmtpdF9wYWdlX3NpZ25hbHNb
Q09OU09MRV9NRVNTQUdFXSA9IGdfc2lnbmFsX25ldygiY29uc29sZV9tZXNzYWdlIiwKLSAgICAg
ICAgICAgIEdfVFlQRV9GUk9NX0NMQVNTKHBhZ2VDbGFzcyksCi0gICAgICAgICAgICAoR1NpZ25h
bEZsYWdzKShHX1NJR05BTF9SVU5fTEFTVCB8IEdfU0lHTkFMX0FDVElPTiksCi0gICAgICAgICAg
ICBHX1NUUlVDVF9PRkZTRVQoV2ViS2l0UGFnZUNsYXNzLCBjb25zb2xlX21lc3NhZ2UpLAotICAg
ICAgICAgICAgZ19zaWduYWxfYWNjdW11bGF0b3JfdHJ1ZV9oYW5kbGVkLAotICAgICAgICAgICAg
TlVMTCwKLSAgICAgICAgICAgIHdlYmtpdF9tYXJzaGFsX0JPT0xFQU5fX1NUUklOR19JTlRfU1RS
SU5HLAotICAgICAgICAgICAgR19UWVBFX0JPT0xFQU4sIDMsCi0gICAgICAgICAgICBHX1RZUEVf
U1RSSU5HLCBHX1RZUEVfSU5ULCBHX1RZUEVfU1RSSU5HKTsKLQotICAgIC8qKgotICAgICAqIFdl
YktpdFBhZ2U6OnNjcmlwdC1hbGVydDoKLSAgICAgKgotICAgICAqIEBwYWdlOiB0aGUgb2JqZWN0
IG9uIHdoaWNoIHRoZSBzaWduYWwgaXMgZW1pdHRlZAotICAgICAqIEBmcmFtZTogdGhlIHJlbGV2
YW50IGZyYW1lCi0gICAgICogQG1lc3NhZ2U6IHRoZSBtZXNzYWdlIHRleHQKLSAgICAgKiBAcmV0
dXJuOiBUUlVFIHRvIHN0b3Agb3RoZXIgaGFuZGxlcnMgZnJvbSBiZWluZyBpbnZva2VkIGZvciB0
aGUgZXZlbnQuIEZBTFNFIHRvIHByb3BhZ2F0ZSB0aGUgZXZlbnQgZnVydGhlci4KLSAgICAgKgot
ICAgICAqIEEgSmF2YVNjcmlwdCBhbGVydCBkaWFsb2cgd2FzIGNyZWF0ZWQuCi0gICAgICovCi0g
ICAgd2Via2l0X3BhZ2Vfc2lnbmFsc1tTQ1JJUFRfQUxFUlRdID0gZ19zaWduYWxfbmV3KCJzY3Jp
cHQtYWxlcnQiLAotICAgICAgICAgICAgR19UWVBFX0ZST01fQ0xBU1MocGFnZUNsYXNzKSwKLSAg
ICAgICAgICAgIChHU2lnbmFsRmxhZ3MpKEdfU0lHTkFMX1JVTl9MQVNUIHwgR19TSUdOQUxfQUNU
SU9OKSwKLSAgICAgICAgICAgIEdfU1RSVUNUX09GRlNFVChXZWJLaXRQYWdlQ2xhc3MsIHNjcmlw
dF9hbGVydCksCi0gICAgICAgICAgICBnX3NpZ25hbF9hY2N1bXVsYXRvcl90cnVlX2hhbmRsZWQs
Ci0gICAgICAgICAgICBOVUxMLAotICAgICAgICAgICAgd2Via2l0X21hcnNoYWxfQk9PTEVBTl9f
T0JKRUNUX1NUUklORywKLSAgICAgICAgICAgIEdfVFlQRV9CT09MRUFOLCAyLAotICAgICAgICAg
ICAgR19UWVBFX09CSkVDVCwgR19UWVBFX1NUUklORyk7Ci0KLSAgICAvKioKLSAgICAgKiBXZWJL
aXRQYWdlOjpzY3JpcHQtY29uZmlybToKLSAgICAgKgotICAgICAqIEBwYWdlOiB0aGUgb2JqZWN0
IG9uIHdoaWNoIHRoZSBzaWduYWwgaXMgZW1pdHRlZAotICAgICAqIEBmcmFtZTogdGhlIHJlbGV2
YW50IGZyYW1lCi0gICAgICogQG1lc3NhZ2U6IHRoZSBtZXNzYWdlIHRleHQKLSAgICAgKiBAY29u
ZmlybWVkOiB3aGV0aGVyIHRoZSBkaWFsb2cgaGFzIGJlZW4gY29uZmlybWVkCi0gICAgICogQHJl
dHVybjogVFJVRSB0byBzdG9wIG90aGVyIGhhbmRsZXJzIGZyb20gYmVpbmcgaW52b2tlZCBmb3Ig
dGhlIGV2ZW50LiBGQUxTRSB0byBwcm9wYWdhdGUgdGhlIGV2ZW50IGZ1cnRoZXIuCi0gICAgICoK
LSAgICAgKiBBIEphdmFTY3JpcHQgY29uZmlybSBkaWFsb2cgd2FzIGNyZWF0ZWQsIHByb3ZpZGlu
ZyBZZXMgYW5kIE5vIGJ1dHRvbnMuCi0gICAgICovCi0gICAgd2Via2l0X3BhZ2Vfc2lnbmFsc1tT
Q1JJUFRfQ09ORklSTV0gPSBnX3NpZ25hbF9uZXcoInNjcmlwdF9jb25maXJtIiwKLSAgICAgICAg
ICAgIEdfVFlQRV9GUk9NX0NMQVNTKHBhZ2VDbGFzcyksCi0gICAgICAgICAgICAoR1NpZ25hbEZs
YWdzKShHX1NJR05BTF9SVU5fTEFTVCB8IEdfU0lHTkFMX0FDVElPTiksCi0gICAgICAgICAgICBH
X1NUUlVDVF9PRkZTRVQoV2ViS2l0UGFnZUNsYXNzLCBzY3JpcHRfY29uZmlybSksCi0gICAgICAg
ICAgICBnX3NpZ25hbF9hY2N1bXVsYXRvcl90cnVlX2hhbmRsZWQsCi0gICAgICAgICAgICBOVUxM
LAotICAgICAgICAgICAgd2Via2l0X21hcnNoYWxfQk9PTEVBTl9fT0JKRUNUX1NUUklOR19CT09M
RUFOLAotICAgICAgICAgICAgR19UWVBFX0JPT0xFQU4sIDMsCi0gICAgICAgICAgICBHX1RZUEVf
T0JKRUNULCBHX1RZUEVfU1RSSU5HLCBHX1RZUEVfQk9PTEVBTik7Ci0KLSAgICAvKioKLSAgICAg
KiBXZWJLaXRQYWdlOjpzY3JpcHQtcHJvbXB0OgotICAgICAqCi0gICAgICogQHBhZ2U6IHRoZSBv
YmplY3Qgb24gd2hpY2ggdGhlIHNpZ25hbCBpcyBlbWl0dGVkCi0gICAgICogQGZyYW1lOiB0aGUg
cmVsZXZhbnQgZnJhbWUKLSAgICAgKiBAbWVzc2FnZTogdGhlIG1lc3NhZ2UgdGV4dAotICAgICAq
IEBkZWZhdWx0OiB0aGUgZGVmYXVsdCB2YWx1ZQotICAgICAqIEB0ZXh0OiBUbyBiZSBmaWxsZWQg
d2l0aCB0aGUgcmV0dXJuIHZhbHVlIG9yIE5VTEwgaWYgdGhlIGRpYWxvZyB3YXMgY2FuY2VsbGVk
LgotICAgICAqIEByZXR1cm46IFRSVUUgdG8gc3RvcCBvdGhlciBoYW5kbGVycyBmcm9tIGJlaW5n
IGludm9rZWQgZm9yIHRoZSBldmVudC4gRkFMU0UgdG8gcHJvcGFnYXRlIHRoZSBldmVudCBmdXJ0
aGVyLgotICAgICAqCi0gICAgICogQSBKYXZhU2NyaXB0IHByb21wdCBkaWFsb2cgd2FzIGNyZWF0
ZWQsIHByb3ZpZGluZyBhbiBlbnRyeSB0byBpbnB1dCB0ZXh0LgotICAgICAqLwotICAgIHdlYmtp
dF9wYWdlX3NpZ25hbHNbU0NSSVBUX1BST01QVF0gPSBnX3NpZ25hbF9uZXcoInNjcmlwdF9wcm9t
cHQiLAotICAgICAgICAgICAgR19UWVBFX0ZST01fQ0xBU1MocGFnZUNsYXNzKSwKLSAgICAgICAg
ICAgIChHU2lnbmFsRmxhZ3MpKEdfU0lHTkFMX1JVTl9MQVNUIHwgR19TSUdOQUxfQUNUSU9OKSwK
LSAgICAgICAgICAgIEdfU1RSVUNUX09GRlNFVChXZWJLaXRQYWdlQ2xhc3MsIHNjcmlwdF9wcm9t
cHQpLAotICAgICAgICAgICAgZ19zaWduYWxfYWNjdW11bGF0b3JfdHJ1ZV9oYW5kbGVkLAotICAg
ICAgICAgICAgTlVMTCwKLSAgICAgICAgICAgIHdlYmtpdF9tYXJzaGFsX0JPT0xFQU5fX09CSkVD
VF9TVFJJTkdfU1RSSU5HX1NUUklORywKLSAgICAgICAgICAgIEdfVFlQRV9CT09MRUFOLCA0LAot
ICAgICAgICAgICAgR19UWVBFX09CSkVDVCwgR19UWVBFX1NUUklORywgR19UWVBFX1NUUklORywg
R19UWVBFX1BPSU5URVIpOwotCi0KLSAgICAvKgotICAgICAqIGltcGxlbWVudGF0aW9ucyBvZiB2
aXJ0dWFsIG1ldGhvZHMKLSAgICAgKi8KLSAgICBwYWdlQ2xhc3MtPmNyZWF0ZV9wYWdlID0gd2Vi
a2l0X3BhZ2VfcmVhbF9jcmVhdGVfcGFnZTsKLSAgICBwYWdlQ2xhc3MtPm5hdmlnYXRpb25fcmVx
dWVzdGVkID0gd2Via2l0X3BhZ2VfcmVhbF9uYXZpZ2F0aW9uX3JlcXVlc3RlZDsKLSAgICBwYWdl
Q2xhc3MtPndpbmRvd19vYmplY3RfY2xlYXJlZCA9IHdlYmtpdF9wYWdlX3JlYWxfd2luZG93X29i
amVjdF9jbGVhcmVkOwotICAgIHBhZ2VDbGFzcy0+Y2hvb3NlX2ZpbGUgPSB3ZWJraXRfcGFnZV9y
ZWFsX2Nob29zZV9maWxlOwotICAgIHBhZ2VDbGFzcy0+c2NyaXB0X2FsZXJ0ID0gd2Via2l0X3Bh
Z2VfcmVhbF9zY3JpcHRfYWxlcnQ7Ci0gICAgcGFnZUNsYXNzLT5zY3JpcHRfY29uZmlybSA9IHdl
YmtpdF9wYWdlX3JlYWxfc2NyaXB0X2NvbmZpcm07Ci0gICAgcGFnZUNsYXNzLT5zY3JpcHRfcHJv
bXB0ID0gd2Via2l0X3BhZ2VfcmVhbF9zY3JpcHRfcHJvbXB0OwotICAgIHBhZ2VDbGFzcy0+Y29u
c29sZV9tZXNzYWdlID0gd2Via2l0X3BhZ2VfcmVhbF9jb25zb2xlX21lc3NhZ2U7Ci0KLSAgICBH
X09CSkVDVF9DTEFTUyhwYWdlQ2xhc3MpLT5maW5hbGl6ZSA9IHdlYmtpdF9wYWdlX2ZpbmFsaXpl
OwotCi0gICAgR3RrV2lkZ2V0Q2xhc3MqIHdpZGdldENsYXNzID0gR1RLX1dJREdFVF9DTEFTUyhw
YWdlQ2xhc3MpOwotICAgIHdpZGdldENsYXNzLT5yZWFsaXplID0gd2Via2l0X3BhZ2VfcmVhbGl6
ZTsKLSAgICB3aWRnZXRDbGFzcy0+ZXhwb3NlX2V2ZW50ID0gd2Via2l0X3BhZ2VfZXhwb3NlX2V2
ZW50OwotICAgIHdpZGdldENsYXNzLT5rZXlfcHJlc3NfZXZlbnQgPSB3ZWJraXRfcGFnZV9rZXlf
ZXZlbnQ7Ci0gICAgd2lkZ2V0Q2xhc3MtPmtleV9yZWxlYXNlX2V2ZW50ID0gd2Via2l0X3BhZ2Vf
a2V5X2V2ZW50OwotICAgIHdpZGdldENsYXNzLT5idXR0b25fcHJlc3NfZXZlbnQgPSB3ZWJraXRf
cGFnZV9idXR0b25fZXZlbnQ7Ci0gICAgd2lkZ2V0Q2xhc3MtPmJ1dHRvbl9yZWxlYXNlX2V2ZW50
ID0gd2Via2l0X3BhZ2VfYnV0dG9uX2V2ZW50OwotICAgIHdpZGdldENsYXNzLT5tb3Rpb25fbm90
aWZ5X2V2ZW50ID0gd2Via2l0X3BhZ2VfbW90aW9uX2V2ZW50OwotICAgIHdpZGdldENsYXNzLT5z
Y3JvbGxfZXZlbnQgPSB3ZWJraXRfcGFnZV9zY3JvbGxfZXZlbnQ7Ci0gICAgd2lkZ2V0Q2xhc3Mt
PnNpemVfYWxsb2NhdGUgPSB3ZWJraXRfcGFnZV9zaXplX2FsbG9jYXRlOwotCi0gICAgR3RrQ29u
dGFpbmVyQ2xhc3MqIGNvbnRhaW5lckNsYXNzID0gR1RLX0NPTlRBSU5FUl9DTEFTUyhwYWdlQ2xh
c3MpOwotICAgIGNvbnRhaW5lckNsYXNzLT5hZGQgPSB3ZWJraXRfcGFnZV9jb250YWluZXJfYWRk
OwotICAgIGNvbnRhaW5lckNsYXNzLT5yZW1vdmUgPSB3ZWJraXRfcGFnZV9jb250YWluZXJfcmVt
b3ZlOwotICAgIGNvbnRhaW5lckNsYXNzLT5mb3JhbGwgPSB3ZWJraXRfcGFnZV9jb250YWluZXJf
Zm9yYWxsOwotCi0gICAgLyoKLSAgICAgKiBtYWtlIHVzIHNjcm9sbGFibGUgKGUuZy4gYWRkYWJs
ZSB0byBhIEd0a1Njcm9sbGVkV2luZG93KQotICAgICAqLwotICAgIHBhZ2VDbGFzcy0+c2V0X3Nj
cm9sbF9hZGp1c3RtZW50cyA9IHdlYmtpdF9wYWdlX3NldF9zY3JvbGxfYWRqdXN0bWVudHM7Ci0g
ICAgR1RLX1dJREdFVF9DTEFTUyhwYWdlQ2xhc3MpLT5zZXRfc2Nyb2xsX2FkanVzdG1lbnRzX3Np
Z25hbCA9IGdfc2lnbmFsX25ldygic2V0X3Njcm9sbF9hZGp1c3RtZW50cyIsCi0gICAgICAgICAg
ICBHX1RZUEVfRlJPTV9DTEFTUyhwYWdlQ2xhc3MpLAotICAgICAgICAgICAgKEdTaWduYWxGbGFn
cykoR19TSUdOQUxfUlVOX0xBU1QgfCBHX1NJR05BTF9BQ1RJT04pLAotICAgICAgICAgICAgR19T
VFJVQ1RfT0ZGU0VUKFdlYktpdFBhZ2VDbGFzcywgc2V0X3Njcm9sbF9hZGp1c3RtZW50cyksCi0g
ICAgICAgICAgICBOVUxMLCBOVUxMLAotICAgICAgICAgICAgd2Via2l0X21hcnNoYWxfVk9JRF9f
T0JKRUNUX09CSkVDVCwKLSAgICAgICAgICAgIEdfVFlQRV9OT05FLCAyLAotICAgICAgICAgICAg
R1RLX1RZUEVfQURKVVNUTUVOVCwgR1RLX1RZUEVfQURKVVNUTUVOVCk7Ci19Ci0KLXN0YXRpYyB2
b2lkIHdlYmtpdF9wYWdlX2luaXQoV2ViS2l0UGFnZSogcGFnZSkKLXsKLSAgICBXZWJLaXRQYWdl
UHJpdmF0ZSogcGFnZURhdGEgPSBXRUJLSVRfUEFHRV9HRVRfUFJJVkFURShXRUJLSVRfUEFHRShw
YWdlKSk7Ci0gICAgcGFnZURhdGEtPnBhZ2UgPSBuZXcgUGFnZShuZXcgV2ViS2l0OjpDaHJvbWVD
bGllbnQocGFnZSksIG5ldyBXZWJLaXQ6OkNvbnRleHRNZW51Q2xpZW50LCBuZXcgV2ViS2l0OjpF
ZGl0b3JDbGllbnQocGFnZSksIG5ldyBXZWJLaXQ6OkRyYWdDbGllbnQsIG5ldyBXZWJLaXQ6Oklu
c3BlY3RvckNsaWVudCk7Ci0KLSAgICBTZXR0aW5ncyogc2V0dGluZ3MgPSBwYWdlRGF0YS0+cGFn
ZS0+c2V0dGluZ3MoKTsKLSAgICBzZXR0aW5ncy0+c2V0TG9hZHNJbWFnZXNBdXRvbWF0aWNhbGx5
KHRydWUpOwotICAgIHNldHRpbmdzLT5zZXRNaW5pbXVtRm9udFNpemUoNSk7Ci0gICAgc2V0dGlu
Z3MtPnNldE1pbmltdW1Mb2dpY2FsRm9udFNpemUoNSk7Ci0gICAgc2V0dGluZ3MtPnNldFNob3Vs
ZFByaW50QmFja2dyb3VuZHModHJ1ZSk7Ci0gICAgc2V0dGluZ3MtPnNldEphdmFTY3JpcHRFbmFi
bGVkKHRydWUpOwotICAgIHNldHRpbmdzLT5zZXREZWZhdWx0Rml4ZWRGb250U2l6ZSgxNCk7Ci0g
ICAgc2V0dGluZ3MtPnNldERlZmF1bHRGb250U2l6ZSgxNCk7Ci0gICAgc2V0dGluZ3MtPnNldFNl
cmlmRm9udEZhbWlseSgiVGltZXMgTmV3IFJvbWFuIik7Ci0gICAgc2V0dGluZ3MtPnNldFNhbnNT
ZXJpZkZvbnRGYW1pbHkoIkFyaWFsIik7Ci0gICAgc2V0dGluZ3MtPnNldEZpeGVkRm9udEZhbWls
eSgiQ291cmllciBOZXciKTsKLSAgICBzZXR0aW5ncy0+c2V0U3RhbmRhcmRGb250RmFtaWx5KCJB
cmlhbCIpOwotCi0gICAgR1RLX1dJREdFVF9TRVRfRkxBR1MocGFnZSwgR1RLX0NBTl9GT0NVUyk7
Ci0gICAgcGFnZURhdGEtPm1haW5GcmFtZSA9IFdFQktJVF9GUkFNRSh3ZWJraXRfZnJhbWVfbmV3
KHBhZ2UpKTsKLSAgICBwYWdlRGF0YS0+ZWRpdGFibGUgPSBmYWxzZTsKLX0KLQotR3RrV2lkZ2V0
KiB3ZWJraXRfcGFnZV9uZXcodm9pZCkKLXsKLSAgICBXZWJLaXRQYWdlKiBwYWdlID0gV0VCS0lU
X1BBR0UoZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX1BBR0UsIE5VTEwpKTsKLQotICAgIHJldHVy
biBHVEtfV0lER0VUKHBhZ2UpOwotfQotCi12b2lkIHdlYmtpdF9wYWdlX3NldF9zZXR0aW5ncyhX
ZWJLaXRQYWdlKiBwYWdlLCBXZWJLaXRTZXR0aW5ncyogc2V0dGluZ3MpCi17Ci0gICAgZ19yZXR1
cm5faWZfZmFpbChXRUJLSVRfSVNfUEFHRShwYWdlKSk7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChz
ZXR0aW5ncyk7Ci0KLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi1XZWJLaXRTZXR0aW5ncyog
d2Via2l0X3BhZ2VfZ2V0X3NldHRpbmdzKFdlYktpdFBhZ2UqIHBhZ2UpCi17Ci0gICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1BBR0UocGFnZSksIE5VTEwpOwotCi0gICAgbm90SW1w
bGVtZW50ZWQoKTsKLSAgICByZXR1cm4gTlVMTDsKLX0KLQotdm9pZCB3ZWJraXRfcGFnZV9nb19i
YWNrd2FyZChXZWJLaXRQYWdlKiBwYWdlKQotewotICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lU
X0lTX1BBR0UocGFnZSkpOwotCi0gICAgV2ViS2l0UGFnZVByaXZhdGUqIHBhZ2VEYXRhID0gV0VC
S0lUX1BBR0VfR0VUX1BSSVZBVEUocGFnZSk7Ci0gICAgV2ViS2l0RnJhbWVQcml2YXRlKiBmcmFt
ZURhdGEgPSBXRUJLSVRfRlJBTUVfR0VUX1BSSVZBVEUocGFnZURhdGEtPm1haW5GcmFtZSk7Ci0g
ICAgZnJhbWVEYXRhLT5mcmFtZS0+bG9hZGVyKCktPmdvQmFja09yRm9yd2FyZCgtMSk7Ci19Ci0K
LXZvaWQgd2Via2l0X3BhZ2VfZ29fZm9yd2FyZChXZWJLaXRQYWdlKiBwYWdlKQotewotICAgIGdf
cmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX1BBR0UocGFnZSkpOwotCi0gICAgV2ViS2l0UGFnZVBy
aXZhdGUqIHBhZ2VEYXRhID0gV0VCS0lUX1BBR0VfR0VUX1BSSVZBVEUocGFnZSk7Ci0gICAgV2Vi
S2l0RnJhbWVQcml2YXRlKiBmcmFtZURhdGEgPSBXRUJLSVRfRlJBTUVfR0VUX1BSSVZBVEUocGFn
ZURhdGEtPm1haW5GcmFtZSk7Ci0gICAgZnJhbWVEYXRhLT5mcmFtZS0+bG9hZGVyKCktPmdvQmFj
a09yRm9yd2FyZCgxKTsKLX0KLQotZ2Jvb2xlYW4gd2Via2l0X3BhZ2VfY2FuX2dvX2JhY2t3YXJk
KFdlYktpdFBhZ2UqIHBhZ2UpCi17Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lT
X1BBR0UocGFnZSksIEZBTFNFKTsKLQotICAgIFdlYktpdFBhZ2VQcml2YXRlKiBwYWdlRGF0YSA9
IFdFQktJVF9QQUdFX0dFVF9QUklWQVRFKHBhZ2UpOwotICAgIFdlYktpdEZyYW1lUHJpdmF0ZSog
ZnJhbWVEYXRhID0gV0VCS0lUX0ZSQU1FX0dFVF9QUklWQVRFKHBhZ2VEYXRhLT5tYWluRnJhbWUp
OwotICAgIHJldHVybiBmcmFtZURhdGEtPmZyYW1lLT5sb2FkZXIoKS0+Y2FuR29CYWNrT3JGb3J3
YXJkKC0xKTsKLX0KLQotZ2Jvb2xlYW4gd2Via2l0X3BhZ2VfY2FuX2dvX2ZvcndhcmQoV2ViS2l0
UGFnZSogcGFnZSkKLXsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfUEFHRShw
YWdlKSwgRkFMU0UpOwotCi0gICAgV2ViS2l0UGFnZVByaXZhdGUqIHBhZ2VEYXRhID0gV0VCS0lU
X1BBR0VfR0VUX1BSSVZBVEUocGFnZSk7Ci0gICAgV2ViS2l0RnJhbWVQcml2YXRlKiBmcmFtZURh
dGEgPSBXRUJLSVRfRlJBTUVfR0VUX1BSSVZBVEUocGFnZURhdGEtPm1haW5GcmFtZSk7Ci0gICAg
cmV0dXJuIGZyYW1lRGF0YS0+ZnJhbWUtPmxvYWRlcigpLT5jYW5Hb0JhY2tPckZvcndhcmQoMSk7
Ci19Ci0KLXZvaWQgd2Via2l0X3BhZ2Vfb3BlbihXZWJLaXRQYWdlKiBwYWdlLCBjb25zdCBnY2hh
ciogdXJpKQotewotICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX1BBR0UocGFnZSkpOwot
Ci0gICAgV2ViS2l0UGFnZVByaXZhdGUqIHBhZ2VEYXRhID0gV0VCS0lUX1BBR0VfR0VUX1BSSVZB
VEUocGFnZSk7Ci0gICAgV2ViS2l0RnJhbWVQcml2YXRlKiBmcmFtZURhdGEgPSBXRUJLSVRfRlJB
TUVfR0VUX1BSSVZBVEUocGFnZURhdGEtPm1haW5GcmFtZSk7Ci0KLSAgICBEZXByZWNhdGVkU3Ry
aW5nIHN0cmluZyA9IERlcHJlY2F0ZWRTdHJpbmc6OmZyb21VdGY4KHVyaSk7Ci0gICAgZnJhbWVE
YXRhLT5mcmFtZS0+bG9hZGVyKCktPmxvYWQoUmVzb3VyY2VSZXF1ZXN0KEtVUkwoc3RyaW5nKSkp
OwotfQotCi12b2lkIHdlYmtpdF9wYWdlX3JlbG9hZChXZWJLaXRQYWdlKiBwYWdlKQotewotICAg
IGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX1BBR0UocGFnZSkpOwotCi0gICAgV2ViS2l0UGFn
ZVByaXZhdGUqIHBhZ2VEYXRhID0gV0VCS0lUX1BBR0VfR0VUX1BSSVZBVEUocGFnZSk7Ci0gICAg
V2ViS2l0RnJhbWVQcml2YXRlKiBmcmFtZURhdGEgPSBXRUJLSVRfRlJBTUVfR0VUX1BSSVZBVEUo
cGFnZURhdGEtPm1haW5GcmFtZSk7Ci0gICAgZnJhbWVEYXRhLT5mcmFtZS0+bG9hZGVyKCktPnJl
bG9hZCgpOwotfQotCi12b2lkIHdlYmtpdF9wYWdlX2xvYWRfc3RyaW5nKFdlYktpdFBhZ2UqIHBh
Z2UsIGNvbnN0IGdjaGFyKiBjb250ZW50LCBjb25zdCBnY2hhciogY29udGVudE1pbWVUeXBlLCBj
b25zdCBnY2hhciogY29udGVudEVuY29kaW5nLCBjb25zdCBnY2hhciogYmFzZVVyaSkKLXsKLSAg
ICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19QQUdFKHBhZ2UpKTsKLQotICAgIFdlYktpdFBh
Z2VQcml2YXRlKiBwYWdlRGF0YSA9IFdFQktJVF9QQUdFX0dFVF9QUklWQVRFKHBhZ2UpOwotICAg
IFdlYktpdEZyYW1lUHJpdmF0ZSogZnJhbWVEYXRhID0gV0VCS0lUX0ZSQU1FX0dFVF9QUklWQVRF
KHBhZ2VEYXRhLT5tYWluRnJhbWUpOwotCi0gICAgS1VSTCB1cmwoRGVwcmVjYXRlZFN0cmluZzo6
ZnJvbVV0ZjgoYmFzZVVyaSkpOwotICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IHNoYXJlZEJ1ZmZl
ciA9IG5ldyBTaGFyZWRCdWZmZXIoc3RyZHVwKGNvbnRlbnQpLCBzdHJsZW4oY29udGVudCkpOwot
ICAgIFN1YnN0aXR1dGVEYXRhIHN1YnN0aXR1dGVEYXRhKHNoYXJlZEJ1ZmZlci5yZWxlYXNlKCks
IFN0cmluZyhjb250ZW50TWltZVR5cGUpLCBTdHJpbmcoY29udGVudEVuY29kaW5nKSwgS1VSTCgi
YWJvdXQ6YmxhbmsiKSwgdXJsKTsKLQotICAgIGZyYW1lRGF0YS0+ZnJhbWUtPmxvYWRlcigpLT5s
b2FkKFJlc291cmNlUmVxdWVzdCh1cmwpLCBzdWJzdGl0dXRlRGF0YSk7Ci19Ci0KLXZvaWQgd2Vi
a2l0X3BhZ2VfbG9hZF9odG1sX3N0cmluZyhXZWJLaXRQYWdlKiBwYWdlLCBjb25zdCBnY2hhciog
Y29udGVudCwgY29uc3QgZ2NoYXIqIGJhc2VVcmwpCi17Ci0gICAgZ19yZXR1cm5faWZfZmFpbChX
RUJLSVRfSVNfUEFHRShwYWdlKSk7Ci0KLSAgICB3ZWJraXRfcGFnZV9sb2FkX3N0cmluZyhwYWdl
LCBjb250ZW50LCAidGV4dC9odG1sIiwgIlVURi04IiwgYmFzZVVybCk7Ci19Ci0KLXZvaWQgd2Vi
a2l0X3BhZ2Vfc3RvcF9sb2FkaW5nKFdlYktpdFBhZ2UqIHBhZ2UpCi17Ci0gICAgZ19yZXR1cm5f
aWZfZmFpbChXRUJLSVRfSVNfUEFHRShwYWdlKSk7Ci0KLSAgICBXZWJLaXRQYWdlUHJpdmF0ZSog
cGFnZURhdGEgPSBXRUJLSVRfUEFHRV9HRVRfUFJJVkFURShwYWdlKTsKLSAgICBXZWJLaXRGcmFt
ZVByaXZhdGUqIGZyYW1lRGF0YSA9IFdFQktJVF9GUkFNRV9HRVRfUFJJVkFURShwYWdlRGF0YS0+
bWFpbkZyYW1lKTsKLQotICAgIGlmIChGcmFtZUxvYWRlciogbG9hZGVyID0gZnJhbWVEYXRhLT5m
cmFtZS0+bG9hZGVyKCkpCi0gICAgICAgIGxvYWRlci0+c3RvcEFsbExvYWRlcnMoKTsKLX0KLQot
V2ViS2l0RnJhbWUqIHdlYmtpdF9wYWdlX2dldF9tYWluX2ZyYW1lKFdlYktpdFBhZ2UqIHBhZ2Up
Ci17Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1BBR0UocGFnZSksIE5VTEwp
OwotCi0gICAgV2ViS2l0UGFnZVByaXZhdGUqIHBhZ2VEYXRhID0gV0VCS0lUX1BBR0VfR0VUX1BS
SVZBVEUocGFnZSk7Ci0gICAgcmV0dXJuIHBhZ2VEYXRhLT5tYWluRnJhbWU7Ci19Ci0KLXZvaWQg
d2Via2l0X3BhZ2VfZXhlY3V0ZV9zY3JpcHQoV2ViS2l0UGFnZSogcGFnZSwgY29uc3QgZ2NoYXIq
IHNjcmlwdCkKLXsKLSAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19QQUdFKHBhZ2UpKTsK
LSAgICBnX3JldHVybl9pZl9mYWlsKHNjcmlwdCk7Ci0KLSAgICBXZWJLaXRQYWdlUHJpdmF0ZSog
cGFnZURhdGEgPSBXRUJLSVRfUEFHRV9HRVRfUFJJVkFURShwYWdlKTsKLSAgICBXZWJLaXRGcmFt
ZVByaXZhdGUqIGZyYW1lRGF0YSA9IFdFQktJVF9GUkFNRV9HRVRfUFJJVkFURShwYWdlRGF0YS0+
bWFpbkZyYW1lKTsKLQotICAgIGlmIChGcmFtZUxvYWRlciogbG9hZGVyID0gZnJhbWVEYXRhLT5m
cmFtZS0+bG9hZGVyKCkpCi0gICAgICAgIGxvYWRlci0+ZXhlY3V0ZVNjcmlwdChTdHJpbmc6OmZy
b21VVEY4KHNjcmlwdCksIHRydWUpOwotfQotCi0vKioKLSAqIHdlYmtpdF9wYWdlX2dldF9lZGl0
YWJsZToKLSAqIEBwYWdlOiBhICNXZWJLaXRQYWdlCi0gKgotICogUmV0dXJucyB3aGV0aGVyIHRo
ZSB1c2VyIGlzIGFsbG93ZWQgdG8gZWRpdCB0aGUgZG9jdW1lbnQuCi0gKgotICogUmV0dXJucyAl
VFJVRSBpZiBAcGFnZSBhbGxvd3MgdGhlIHVzZXIgdG8gZWRpdCB0aGUgSFRNTCBkb2N1bWVudCwg
JUZBTFNFIGlmCi0gKiBpdCBkb2Vzbid0LiBZb3UgY2FuIGNoYW5nZSBAcGFnZSdzIGRvY3VtZW50
IHByb2dyYW1tYXRpY2FsbHkgcmVnYXJkbGVzcyBvZgotICogdGhpcyBzZXR0aW5nLgotICoKLSAq
IFJldHVybiB2YWx1ZTogYSAjZ2Jvb2xlYW4gaW5kaWNhdGluZyB0aGUgZWRpdGFibGUgc3RhdGUK
LSAqLwotZ2Jvb2xlYW4gd2Via2l0X3BhZ2VfZ2V0X2VkaXRhYmxlKFdlYktpdFBhZ2UqIHBhZ2Up
Ci17Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1BBR0UocGFnZSksIEZBTFNF
KTsKLQotICAgIFdlYktpdFBhZ2VQcml2YXRlKiBwYWdlRGF0YSA9IFdFQktJVF9QQUdFX0dFVF9Q
UklWQVRFKHBhZ2UpOwotICAgIEFTU0VSVChwYWdlRGF0YSk7Ci0KLSAgICByZXR1cm4gcGFnZURh
dGEtPmVkaXRhYmxlOwotfQotCi0vKioKLSAqIHdlYmtpdF9wYWdlX3NldF9lZGl0YWJsZToKLSAq
IEBwYWdlOiBhICNXZWJLaXRQYWdlCi0gKiBAZmxhZzogYSAjZ2Jvb2xlYW4gaW5kaWNhdGluZyB0
aGUgZWRpdGFibGUgc3RhdGUKLSAqCi0gKiBTZXRzIHdoZXRoZXIgQHBhZ2UgYWxsb3dzIHRoZSB1
c2VyIHRvIGVkaXQgaXRzIEhUTUwgZG9jdW1lbnQuCi0gKgotICogSWYgQGZsYWcgaXMgJVRSVUUs
IEBwYWdlIGFsbG93cyB0aGUgdXNlciB0byBlZGl0IHRoZSBkb2N1bWVudC4gSWYgQGZsYWcgaXMK
LSAqICVGQUxTRSwgYW4gZWxlbWVudCBpbiBAcGFnZSdzIGRvY3VtZW50IGNhbiBvbmx5IGJlIGVk
aXRlZCBpZiB0aGUKLSAqIENPTlRFTlRFRElUQUJMRSBhdHRyaWJ1dGUgaGFzIGJlZW4gc2V0IG9u
IHRoZSBlbGVtZW50IG9yIG9uZSBvZiBpdHMgcGFyZW50Ci0gKiBlbGVtZW50cy4gWW91IGNhbiBj
aGFuZ2UgQHBhZ2UncyBkb2N1bWVudCBwcm9ncmFtbWF0aWNhbGx5IHJlZ2FyZGxlc3Mgb2YKLSAq
IHRoaXMgc2V0dGluZy4gQnkgZGVmYXVsdCBhICNXZWJLaXRQYWdlIGlzIG5vdCBlZGl0YWJsZS4K
LQotICogTm9ybWFsbHksIGFuIEhUTUwgZG9jdW1lbnQgaXMgbm90IGVkaXRhYmxlIHVubGVzcyB0
aGUgZWxlbWVudHMgd2l0aGluIHRoZQotICogZG9jdW1lbnQgYXJlIGVkaXRhYmxlLiBUaGlzIGZ1
bmN0aW9uIHByb3ZpZGVzIGEgbG93LWxldmVsIHdheSB0byBtYWtlIHRoZQotICogY29udGVudHMg
b2YgYSAjV2ViS2l0UGFnZSBlZGl0YWJsZSB3aXRob3V0IGFsdGVyaW5nIHRoZSBkb2N1bWVudCBv
ciBET00KLSAqIHN0cnVjdHVyZS4KLSAqLwotdm9pZCB3ZWJraXRfcGFnZV9zZXRfZWRpdGFibGUo
V2ViS2l0UGFnZSogcGFnZSwgZ2Jvb2xlYW4gZmxhZykKLXsKLSAgICBnX3JldHVybl9pZl9mYWls
KFdFQktJVF9JU19QQUdFKHBhZ2UpKTsKLSAgICBmbGFnID0gZmxhZyAhPSBGQUxTRTsKLQotICAg
IFdlYktpdFBhZ2VQcml2YXRlKiBwYWdlRGF0YSA9IFdFQktJVF9QQUdFX0dFVF9QUklWQVRFKHBh
Z2UpOwotICAgIEFTU0VSVChwYWdlRGF0YSk7Ci0KLSAgICBGcmFtZSogbWFpbkZyYW1lID0gY29y
ZShwYWdlRGF0YS0+bWFpbkZyYW1lKTsKLSAgICBnX3JldHVybl9pZl9mYWlsKG1haW5GcmFtZSk7
Ci0KLSAgICAvLyBUT0RPOiBXaGF0IGhhcHBlbnMgd2hlbiB0aGUgZnJhbWUgaXMgcmVwbGFjZWQ/
Ci0gICAgaWYgKGZsYWcgPT0gcGFnZURhdGEtPmVkaXRhYmxlKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBwYWdlRGF0YS0+ZWRpdGFibGUgPSBmbGFnOwotCi0gICAgaWYgKGZsYWcpIHsKLSAgICAg
ICAgbWFpbkZyYW1lLT5hcHBseUVkaXRpbmdTdHlsZVRvQm9keUVsZW1lbnQoKTsKLSAgICAgICAg
Ly8gVE9ETzogSWYgdGhlIFdlYktpdFBhZ2UgaXMgbWFkZSBlZGl0YWJsZSBhbmQgdGhlIHNlbGVj
dGlvbiBpcyBlbXB0eSwgc2V0IGl0IHRvIHNvbWV0aGluZy4KLSAgICAgICAgLy9pZiAoIXdlYmtp
dF9wYWdlX2dldF9zZWxlY3RlZF9kb21fcmFuZ2UocGFnZSkpCi0gICAgICAgIC8vICAgIG1haW5G
cmFtZS0+c2V0U2VsZWN0aW9uRnJvbU5vbmUoKTsKLSAgICB9IGVsc2UKLSAgICAgICAgbWFpbkZy
YW1lLT5yZW1vdmVFZGl0aW5nU3R5bGVGcm9tQm9keUVsZW1lbnQoKTsKLX0KLQotfQpJbmRleDog
V2ViS2l0L2d0ay9BcGkvd2Via2l0Z3RrcGFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9ndGsv
QXBpL3dlYmtpdGd0a3BhZ2UuaAkocmV2aXNpb24gMjgyNTEpCisrKyBXZWJLaXQvZ3RrL0FwaS93
ZWJraXRndGtwYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMTM1ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuIAotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uIAotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUsIEluYy4gKCJBcHBsZSIp
IG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JT
ICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQot
ICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFdFQktJVF9QQUdF
X0gKLSNkZWZpbmUgV0VCS0lUX1BBR0VfSAotCi0jaW5jbHVkZSA8Z3RrL2d0ay5oPgotCi0jaW5j
bHVkZSAid2Via2l0Z3RrZGVmaW5lcy5oIgotI2luY2x1ZGUgIndlYmtpdGd0a3NldHRpbmdzLmgi
Ci0KLUdfQkVHSU5fREVDTFMKLQotI2RlZmluZSBXRUJLSVRfVFlQRV9QQUdFICAgICAgICAgICAg
KHdlYmtpdF9wYWdlX2dldF90eXBlKCkpCi0jZGVmaW5lIFdFQktJVF9QQUdFKG9iaikgICAgICAg
ICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9UWVBFX1BBR0Us
IFdlYktpdFBhZ2UpKQotI2RlZmluZSBXRUJLSVRfUEFHRV9DTEFTUyhrbGFzcykgICAgKEdfVFlQ
RV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfVFlQRV9QQUdFLCBXZWJLaXRQYWdl
Q2xhc3MpKQotI2RlZmluZSBXRUJLSVRfSVNfUEFHRShvYmopICAgICAgICAgKEdfVFlQRV9DSEVD
S19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfVFlQRV9QQUdFKSkKLSNkZWZpbmUgV0VCS0lU
X0lTX1BBR0VfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAg
V0VCS0lUX1RZUEVfUEFHRSkpCi0jZGVmaW5lIFdFQktJVF9QQUdFX0dFVF9DTEFTUyhvYmopICAo
R19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9UWVBFX1BBR0UsIFdlYktp
dFBhZ2VDbGFzcykpCi0KLQotdHlwZWRlZiBlbnVtIHsKLSAgICBXRUJLSVRfTkFWSUdBVElPTl9S
RVNQT05TRV9BQ0NFUFQsCi0gICAgV0VCS0lUX05BVklHQVRJT05fUkVTUE9OU0VfSUdOT1JFLAot
ICAgIFdFQktJVF9OQVZJR0FUSU9OX1JFU1BPTlNFX0RPV05MT0FECi19IFdlYktpdE5hdmlnYXRp
b25SZXNwb25zZTsKLQotCi0KLXN0cnVjdCBfV2ViS2l0UGFnZSB7Ci0gICAgR3RrQ29udGFpbmVy
IHBhcmVudDsKLX07Ci0KLXN0cnVjdCBfV2ViS2l0UGFnZUNsYXNzIHsKLSAgICBHdGtDb250YWlu
ZXJDbGFzcyBwYXJlbnQ7Ci0KLSAgICAvKgotICAgICAqIGRlZmF1bHQgaGFuZGxlci92aXJ0dWFs
IG1ldGhvZHMKLSAgICAgKiBESVNDVVNTOiBjcmVhdGVfcGFnZSBuZWVkcyBhIHJlcXVlc3QgYW5k
IHNob3VsZCB3ZSBtYWtlIHRoaXMgYSBzaWduYWwgd2l0aCBkZWZhdWx0IGhhbmRsZXI/IHRoaXMg
d291bGQKLSAgICAgKiByZXF1aXJlIHNvbWVvbmUgZG9pbmcgYSBnX3NpZ25hbF9zdG9wX2VtaXNz
aW9uX2J5X25hbWUKLSAgICAgKiBXZWJVSURlbGVnYXRlIGhhcyBub3RoaW5nIGZvciBjcmVhdGVf
ZnJhbWUsIFdlYlBvbGljeURlbGVnYXRlIGFzIHdlbGwuLi4KLSAgICAgKi8KLSAgICBXZWJLaXRQ
YWdlKiAgKCpjcmVhdGVfcGFnZSkgIChXZWJLaXRQYWdlKiBwYWdlKTsKLQotICAgIC8qCi0gICAg
ICogVE9ETzogRklYTUU6IENyZWF0ZSBzb21ldGhpbmcgbGlrZSBXZWJQb2xpY3lEZWNpc2lvbkxp
c3RlbmVyX1Byb3RvY29sIGluc3RlYWQKLSAgICAgKi8KLSAgICBXZWJLaXROYXZpZ2F0aW9uUmVz
cG9uc2UgKCpuYXZpZ2F0aW9uX3JlcXVlc3RlZCkgKFdlYktpdFBhZ2UqIHBhZ2UsIFdlYktpdEZy
YW1lKiBmcmFtZSwgV2ViS2l0TmV0d29ya1JlcXVlc3QqIHJlcXVlc3QpOwotCi0gICAgdm9pZCAo
KndpbmRvd19vYmplY3RfY2xlYXJlZCkgKFdlYktpdFBhZ2UqIHBhZ2UsIFdlYktpdEZyYW1lKiBm
cmFtZSwgSlNHbG9iYWxDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIHdpbmRvd19vYmpl
Y3QpOwotICAgIGdjaGFyKiAgICgqY2hvb3NlX2ZpbGUpIChXZWJLaXRQYWdlKiBwYWdlLCBXZWJL
aXRGcmFtZSogZnJhbWUsIGNvbnN0IGdjaGFyKiBvbGRfZmlsZSk7Ci0gICAgZ2Jvb2xlYW4gKCpz
Y3JpcHRfYWxlcnQpIChXZWJLaXRQYWdlKiBwYWdlLCBXZWJLaXRGcmFtZSogZnJhbWUsIGNvbnN0
IGdjaGFyKiBhbGVydF9tZXNzYWdlKTsKLSAgICBnYm9vbGVhbiAoKnNjcmlwdF9jb25maXJtKSAo
V2ViS2l0UGFnZSogcGFnZSwgV2ViS2l0RnJhbWUqIGZyYW1lLCBjb25zdCBnY2hhciogY29uZmly
bV9tZXNzYWdlLCBnYm9vbGVhbiogZGlkX2NvbmZpcm0pOwotICAgIGdib29sZWFuICgqc2NyaXB0
X3Byb21wdCkgKFdlYktpdFBhZ2UqIHBhZ2UsIFdlYktpdEZyYW1lKiBmcmFtZSwgY29uc3QgZ2No
YXIqIG1lc3NhZ2UsIGNvbnN0IGdjaGFyKiBkZWZhdWx0X3ZhbHVlLCBnY2hhcioqIHZhbHVlKTsK
LSAgICBnYm9vbGVhbiAoKmNvbnNvbGVfbWVzc2FnZSkgKFdlYktpdFBhZ2UqIHBhZ2UsIGNvbnN0
IGdjaGFyKiBtZXNzYWdlLCB1bnNpZ25lZCBpbnQgbGluZV9udW1iZXIsIGNvbnN0IGdjaGFyKiBz
b3VyY2VfaWQpOwotCi0gICAgLyoKLSAgICAgKiBpbnRlcm5hbAotICAgICAqLwotICAgIHZvaWQg
ICAoKnNldF9zY3JvbGxfYWRqdXN0bWVudHMpIChXZWJLaXRQYWdlKiwgR3RrQWRqdXN0bWVudCos
IEd0a0FkanVzdG1lbnQqKTsKLX07Ci0KLVdFQktJVF9BUEkgR1R5cGUKLXdlYmtpdF9wYWdlX2dl
dF90eXBlICh2b2lkKTsKLQotV0VCS0lUX0FQSSBHdGtXaWRnZXQqCi13ZWJraXRfcGFnZV9uZXcg
KHZvaWQpOwotCi1XRUJLSVRfQVBJIGdib29sZWFuCi13ZWJraXRfcGFnZV9jYW5fZ29fYmFja3dh
cmQgKFdlYktpdFBhZ2UqIHBhZ2UpOwotCi1XRUJLSVRfQVBJIGdib29sZWFuCi13ZWJraXRfcGFn
ZV9jYW5fZ29fZm9yd2FyZCAoV2ViS2l0UGFnZSogcGFnZSk7Ci0KLVdFQktJVF9BUEkgdm9pZAot
d2Via2l0X3BhZ2VfZ29fYmFja3dhcmQgKFdlYktpdFBhZ2UqIHBhZ2UpOwotCi1XRUJLSVRfQVBJ
IHZvaWQKLXdlYmtpdF9wYWdlX2dvX2ZvcndhcmQgKFdlYktpdFBhZ2UqIHBhZ2UpOwotCi1XRUJL
SVRfQVBJIHZvaWQKLXdlYmtpdF9wYWdlX3N0b3BfbG9hZGluZyAoV2ViS2l0UGFnZSogcGFnZSk7
Ci0KLVdFQktJVF9BUEkgdm9pZAotd2Via2l0X3BhZ2Vfb3BlbiAoV2ViS2l0UGFnZSogcGFnZSwg
Y29uc3QgZ2NoYXIqIHVyaSk7Ci0KLVdFQktJVF9BUEkgdm9pZAotd2Via2l0X3BhZ2VfcmVsb2Fk
IChXZWJLaXRQYWdlICpwYWdlKTsKLQotV0VCS0lUX0FQSSB2b2lkCi13ZWJraXRfcGFnZV9sb2Fk
X3N0cmluZyAoV2ViS2l0UGFnZSogcGFnZSwgY29uc3QgZ2NoYXIqIGNvbnRlbnQsIGNvbnN0IGdj
aGFyKiBjb250ZW50X21pbWVfdHlwZSwgY29uc3QgZ2NoYXIqIGNvbnRlbnRfZW5jb2RpbmcsIGNv
bnN0IGdjaGFyKiBiYXNlX3VyaSk7Ci0KLVdFQktJVF9BUEkgdm9pZAotd2Via2l0X3BhZ2VfbG9h
ZF9odG1sX3N0cmluZyAoV2ViS2l0UGFnZSogcGFnZSwgY29uc3QgZ2NoYXIqIGNvbnRlbnQsIGNv
bnN0IGdjaGFyKiBiYXNlX3VyaSk7Ci0KLVdFQktJVF9BUEkgV2ViS2l0RnJhbWUqCi13ZWJraXRf
cGFnZV9nZXRfbWFpbl9mcmFtZSAoV2ViS2l0UGFnZSogcGFnZSk7Ci0KLVdFQktJVF9BUEkgdm9p
ZAotd2Via2l0X3BhZ2VfZXhlY3V0ZV9zY3JpcHQgKFdlYktpdFBhZ2UqIHBhZ2UsIGNvbnN0IGdj
aGFyKiBzY3JpcHQpOwotCi1XRUJLSVRfQVBJIGdib29sZWFuCi13ZWJraXRfcGFnZV9nZXRfZWRp
dGFibGUgKFdlYktpdFBhZ2UqIHBhZ2UpOwotCi1XRUJLSVRfQVBJIHZvaWQKLXdlYmtpdF9wYWdl
X3NldF9lZGl0YWJsZSAoV2ViS2l0UGFnZSogcGFnZSwgZ2Jvb2xlYW4gZmxhZyk7Ci0KLUdfRU5E
X0RFQ0xTCi0KLSNlbmRpZgpJbmRleDogV2ViS2l0L2d0ay9BcGkvd2Via2l0Z3RrcHJpdmF0ZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViS2l0L2d0ay9BcGkvd2Via2l0Z3RrcHJpdmF0ZS5jcHAJKHJl
dmlzaW9uIDI4MjUxKQorKysgV2ViS2l0L2d0ay9BcGkvd2Via2l0Z3RrcHJpdmF0ZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsOTggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBI
b2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0gKiAyLiAgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCi0gKiAzLiAgTmVp
dGhlciB0aGUgbmFtZSBvZiBBcHBsZSwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgot
ICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
Ci0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0g
KiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2luY2x1ZGUgIndlYmtp
dGd0a3ByaXZhdGUuaCIKLSNpbmNsdWRlICJDaHJvbWVDbGllbnRHdGsuaCIKLSNpbmNsdWRlICJG
cmFtZUxvYWRlci5oIgotI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50R3RrLmgiCi0jaW5jbHVk
ZSAiTm90SW1wbGVtZW50ZWQuaCIKLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLW5hbWVz
cGFjZSBXZWJLaXQgewotdm9pZCBhcHBseShXZWJLaXRTZXR0aW5ncyosIFdlYkNvcmU6OlNldHRp
bmdzKikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi1XZWJLaXRTZXR0aW5ncyogY3Jl
YXRlKFdlYkNvcmU6OlNldHRpbmdzKikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJl
dHVybiAwOwotfQotCi1XZWJLaXRGcmFtZSogZ2V0RnJhbWVGcm9tUGFnZShXZWJLaXRQYWdlKiBw
YWdlKQotewotICAgIHJldHVybiB3ZWJraXRfcGFnZV9nZXRfbWFpbl9mcmFtZShwYWdlKTsKLX0K
LQotV2ViS2l0UGFnZSogZ2V0UGFnZUZyb21GcmFtZShXZWJLaXRGcmFtZSogZnJhbWUpCi17Ci0g
ICAgcmV0dXJuIHdlYmtpdF9mcmFtZV9nZXRfcGFnZShmcmFtZSk7Ci19Ci0KLVdlYkNvcmU6OkZy
YW1lKiBjb3JlKFdlYktpdEZyYW1lKiBmcmFtZSkKLXsKLSAgICBpZiAoIWZyYW1lKQotICAgICAg
ICByZXR1cm4gMDsKLQotICAgIFdlYktpdEZyYW1lUHJpdmF0ZSogZnJhbWVfZGF0YSA9IFdFQktJ
VF9GUkFNRV9HRVRfUFJJVkFURShmcmFtZSk7Ci0gICAgcmV0dXJuIGZyYW1lX2RhdGEgPyBmcmFt
ZV9kYXRhLT5mcmFtZSA6IDA7Ci19Ci0KLVdlYktpdEZyYW1lKiBraXQoV2ViQ29yZTo6RnJhbWUq
IGNvcmVGcmFtZSkKLXsKLSAgICBpZiAoIWNvcmVGcmFtZSkKLSAgICAgICAgcmV0dXJuIDA7Ci0K
LSAgICBBU1NFUlQoY29yZUZyYW1lLT5sb2FkZXIoKSk7Ci0gICAgV2ViS2l0OjpGcmFtZUxvYWRl
ckNsaWVudCogY2xpZW50ID0gc3RhdGljX2Nhc3Q8V2ViS2l0OjpGcmFtZUxvYWRlckNsaWVudCo+
KGNvcmVGcmFtZS0+bG9hZGVyKCktPmNsaWVudCgpKTsKLSAgICByZXR1cm4gY2xpZW50ID8gY2xp
ZW50LT53ZWJGcmFtZSgpIDogMDsKLX0KLQotV2ViQ29yZTo6UGFnZSogY29yZShXZWJLaXRQYWdl
KiBwYWdlKQotewotICAgIGlmICghcGFnZSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBXZWJL
aXRQYWdlUHJpdmF0ZSogcGFnZV9kYXRhID0gV0VCS0lUX1BBR0VfR0VUX1BSSVZBVEUocGFnZSk7
Ci0gICAgcmV0dXJuIHBhZ2VfZGF0YSA/IHBhZ2VfZGF0YS0+cGFnZSA6IDA7Ci19Ci0KLVdlYktp
dFBhZ2UqIGtpdChXZWJDb3JlOjpQYWdlKiBwYWdlKQotewotICAgIGlmICghcGFnZSkKLSAgICAg
ICAgcmV0dXJuIDA7Ci0KLSAgICBBU1NFUlQocGFnZS0+Y2hyb21lKCkpOwotICAgIFdlYktpdDo6
Q2hyb21lQ2xpZW50KiBjbGllbnQgPSBzdGF0aWNfY2FzdDxXZWJLaXQ6OkNocm9tZUNsaWVudCo+
KHBhZ2UtPmNocm9tZSgpLT5jbGllbnQoKSk7Ci0gICAgcmV0dXJuIGNsaWVudCA/IGNsaWVudC0+
d2ViUGFnZSgpIDogMDsKLX0KLX0KSW5kZXg6IFdlYktpdC9ndGsvQXBpL3dlYmtpdGd0a3ByaXZh
dGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvZ3RrL0FwaS93ZWJraXRndGtwcml2YXRlLmgJKHJl
dmlzaW9uIDI4MjUxKQorKysgV2ViS2l0L2d0ay9BcGkvd2Via2l0Z3RrcHJpdmF0ZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDk2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9s
Z2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotICogMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAotICogMy4gIE5laXRo
ZXIgdGhlIG5hbWUgb2YgQXBwbGUsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAq
ICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQot
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICog
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFdFQktJVF9QUklWQVRFX0gKLSNkZWZpbmUgV0VCS0lU
X1BSSVZBVEVfSAotCi0vKgotICogSW50ZXJuYWwgY2xhc3MuIFRoaXMgY2xhc3Mga25vd3MgdGhl
IHNoYXJlZCBzZWNyZXQgb2YgV2ViS2l0RnJhbWUsCi0gKiBXZWJLaXROZXR3b3JrUmVxdWVzdCBh
bmQgV2ViS2l0UGFnZS4KLSAqIFRoZXkgYXJlIHVzaW5nIFdlYkNvcmUgd2hpY2ggbXVzbid0IGJl
IGV4cG9zZWQgdG8gdGhlIG91dGVyIHdvcmxkLgotICovCi0KLSNpbmNsdWRlICJ3ZWJraXRndGtz
ZXR0aW5ncy5oIgotI2luY2x1ZGUgIndlYmtpdGd0a3BhZ2UuaCIKLSNpbmNsdWRlICJ3ZWJraXRn
dGtmcmFtZS5oIgotI2luY2x1ZGUgIndlYmtpdGd0a25ldHdvcmtyZXF1ZXN0LmgiCi0KLSNpbmNs
dWRlICJTZXR0aW5ncy5oIgotI2luY2x1ZGUgIlBhZ2UuaCIKLSNpbmNsdWRlICJGcmFtZS5oIgot
I2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50LmgiCi0KLW5hbWVzcGFjZSBXZWJLaXQgewotICAg
IHZvaWQgYXBwbHkoV2ViS2l0U2V0dGluZ3MqLFdlYkNvcmU6OlNldHRpbmdzKik7Ci0gICAgV2Vi
S2l0U2V0dGluZ3MqIGNyZWF0ZShXZWJDb3JlOjpTZXR0aW5ncyopOwotICAgIFdlYktpdEZyYW1l
KiAgZ2V0RnJhbWVGcm9tUGFnZShXZWJLaXRQYWdlKik7Ci0gICAgV2ViS2l0UGFnZSogZ2V0UGFn
ZUZyb21GcmFtZShXZWJLaXRGcmFtZSopOwotCi0gICAgV2ViQ29yZTo6RnJhbWUqIGNvcmUoV2Vi
S2l0RnJhbWUqKTsKLSAgICBXZWJLaXRGcmFtZSoga2l0KFdlYkNvcmU6OkZyYW1lKik7Ci0gICAg
V2ViQ29yZTo6UGFnZSogY29yZShXZWJLaXRQYWdlKik7Ci0gICAgV2ViS2l0UGFnZSoga2l0KFdl
YkNvcmU6OlBhZ2UqKTsKLX0KLQotZXh0ZXJuICJDIiB7Ci0gICAgI2RlZmluZSBXRUJLSVRfUEFH
RV9HRVRfUFJJVkFURShvYmopICAgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUoKG9iaiks
IFdFQktJVF9UWVBFX1BBR0UsIFdlYktpdFBhZ2VQcml2YXRlKSkKLSAgICB0eXBlZGVmIHN0cnVj
dCBfV2ViS2l0UGFnZVByaXZhdGUgV2ViS2l0UGFnZVByaXZhdGU7Ci0gICAgc3RydWN0IF9XZWJL
aXRQYWdlUHJpdmF0ZSB7Ci0gICAgICAgIFdlYkNvcmU6OlBhZ2UqIHBhZ2U7Ci0gICAgICAgIFdl
YkNvcmU6OlNldHRpbmdzKiBzZXR0aW5nczsKLQotICAgICAgICBXZWJLaXRGcmFtZSogbWFpbkZy
YW1lOwotICAgICAgICBXZWJDb3JlOjpTdHJpbmcgYXBwbGljYXRpb25OYW1lRm9yVXNlckFnZW50
OwotICAgICAgICBXZWJDb3JlOjpTdHJpbmcqIHVzZXJBZ2VudDsKLQotICAgICAgICBIYXNoU2V0
PEd0a1dpZGdldCo+IGNoaWxkcmVuOwotICAgICAgICBib29sIGVkaXRhYmxlOwotICAgIH07Ci0K
LSAgICAjZGVmaW5lIFdFQktJVF9GUkFNRV9HRVRfUFJJVkFURShvYmopICAgIChHX1RZUEVfSU5T
VEFOQ0VfR0VUX1BSSVZBVEUoKG9iaiksIFdFQktJVF9UWVBFX0ZSQU1FLCBXZWJLaXRGcmFtZVBy
aXZhdGUpKQotICAgIHR5cGVkZWYgc3RydWN0IF9XZWJLaXRGcmFtZVByaXZhdGUgV2ViS2l0RnJh
bWVQcml2YXRlOwotICAgIHN0cnVjdCBfV2ViS2l0RnJhbWVQcml2YXRlIHsKLSAgICAgICAgV2Vi
Q29yZTo6RnJhbWUqIGZyYW1lOwotICAgICAgICBXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudCog
Y2xpZW50OwotICAgICAgICBXZWJLaXRQYWdlKiBwYWdlOwotCi0gICAgICAgIGdjaGFyKiBuYW1l
OwotICAgICAgICBnY2hhciogdGl0bGU7Ci0gICAgICAgIGdjaGFyKiBsb2NhdGlvbjsKLSAgICB9
OwotCi0gICAgI2RlZmluZSBXRUJLSVRfTkVUV09SS19SRVFVRVNUX0dFVF9QUklWQVRFKG9iaikg
ICAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURSgob2JqKSwgV0VCS0lUX1RZUEVfTkVUV09S
S19SRVFVRVNULCBXZWJLaXROZXR3b3JrUmVxdWVzdFByaXZhdGUpKQotICAgIHR5cGVkZWYgc3Ry
dWN0IF9XZWJLaXROZXR3b3JrUmVxdWVzdFByaXZhdGUgV2ViS2l0TmV0d29ya1JlcXVlc3RQcml2
YXRlOwotICAgIHN0cnVjdCBfV2ViS2l0TmV0d29ya1JlcXVlc3RQcml2YXRlIHsKLSAgICAgICAg
Z2NoYXIqIHVyaTsKLSAgICB9OwotCi0gICAgV2ViS2l0RnJhbWUqIHdlYmtpdF9mcmFtZV9pbml0
X3dpdGhfcGFnZShXZWJLaXRQYWdlKiwgV2ViQ29yZTo6SFRNTEZyYW1lT3duZXJFbGVtZW50Kik7
Ci19Ci0KLSNlbmRpZgpJbmRleDogV2ViS2l0L2d0ay9BcGkvd2Via2l0Z3Rrc2V0dGluZ3MuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYktpdC9ndGsvQXBpL3dlYmtpdGd0a3NldHRpbmdzLmNwcAkocmV2
aXNpb24gMjgyNTEpCisrKyBXZWJLaXQvZ3RrL0FwaS93ZWJraXRndGtzZXR0aW5ncy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNzMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBI
b2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0gKiAyLiAgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCi0gKiAzLiAgTmVp
dGhlciB0aGUgbmFtZSBvZiBBcHBsZSwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgot
ICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
Ci0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0g
KiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2luY2x1ZGUgIndlYmtp
dGd0a3NldHRpbmdzLmgiCi0KLWV4dGVybiAiQyIgewotR1R5cGUgd2Via2l0X3dlYl9zZXR0aW5n
c19nZXRfdHlwZSh2b2lkKQotewotICAgIHJldHVybiBHVHlwZSgpOwotfQotCi1XZWJLaXRTZXR0
aW5ncyogd2Via2l0X3dlYl9zZXR0aW5nc19jb3B5KFdlYktpdFNldHRpbmdzKiBzZXR0aW5nKQot
ewotICAgIHJldHVybiAwOwotfQotCi12b2lkIHdlYmtpdF93ZWJfc2V0dGluZ3NfZnJlZShXZWJL
aXRTZXR0aW5ncyogc2V0dGluZykKLXsKLX0KLQotV2ViS2l0U2V0dGluZ3MqIHdlYmtpdF93ZWJf
c2V0dGluZ3NfZ2V0X2dsb2JhbCh2b2lkKQotewotICAgIHJldHVybiAwOwotfQotCi12b2lkIHdl
YmtpdF93ZWJfc2V0dGluZ3Nfc2V0X2dsb2JhbCAoV2ViS2l0U2V0dGluZ3MqIHNldHRpbmcpCi17
Ci19Ci0KLXZvaWQgd2Via2l0X3dlYl9zZXR0aW5nc19zZXRfZm9udF9mYW1pbHkoV2ViS2l0U2V0
dGluZ3MqLCBXZWJLaXRGb250RmFtaWx5IGZhbWlseSwgZ2NoYXIqIGZhbWlseV9uYW1lKQotewot
fQotCi1jb25zdCBnY2hhciogd2Via2l0X3dlYl9zZXR0aW5nc19nZXRfZm9udF9mYW1pbHkoV2Vi
S2l0U2V0dGluZ3MqLCBXZWJLaXRGb250RmFtaWx5IGZhbWlseSkKLXsKLSAgICByZXR1cm4gMDsK
LX0KLQotdm9pZCB3ZWJraXRfd2ViX3NldHRpbmdzX3NldF91c2VyX3N0eWxlX3NoZWV0X2xvY2F0
aW9uKFdlYktpdFNldHRpbmdzKiwgZ2NoYXIqKQotewotfQotCi12b2lkIHdlYmtpdF9zZXRfZnRw
X2RpcmVjdG9yeV90ZW1wbGF0ZV9wYXRoKFdlYktpdFNldHRpbmdzKiwgZ2NoYXIqKQotewotfQot
fQpJbmRleDogV2ViS2l0L2d0ay9BcGkvd2Via2l0Z3Rrc2V0dGluZ3MuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJLaXQvZ3RrL0FwaS93ZWJraXRndGtzZXR0aW5ncy5oCShyZXZpc2lvbiAyODI1MSkKKysr
IFdlYktpdC9ndGsvQXBpL3dlYmtpdGd0a3NldHRpbmdzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
MTE3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIg
RnJleXRoZXIKLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
Ci0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2Yg
QXBwbGUsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
Ci0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLiAKLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICog
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaWZuZGVmIFdFQktJVF9TRVRUSU5HU19ICi0jZGVmaW5lIFdFQktJVF9TRVRUSU5HU19ICi0K
LSNpbmNsdWRlIDxnbGliLmg+Ci0jaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KLQotI2luY2x1ZGUg
IndlYmtpdGd0a2RlZmluZXMuaCIKLQotR19CRUdJTl9ERUNMUwotCi10eXBlZGVmIGVudW0gewot
ICAgIFdFQktJVF9GT05UX0ZBTUlMWV9TVEFOREFSRCwKLSAgICBXRUJLSVRfRk9OVF9GQU1JTFlf
RklYRUQsCi0gICAgV0VCS0lUX0ZPTlRfRkFNSUxZX1NFUklGLAotICAgIFdFQktJVF9GT05UX0ZB
TUlMWV9TQU5TX1NFUklGLAotICAgIFdFQktJVF9GT05UX0ZBTUlMWV9DVVJTSVZFLAotICAgIFdF
QktJVF9GT05UX0ZBTUlMWV9GQU5UQVNZLAotICAgIFdFQktJVF9GT05UX0ZBTUlMWV9MQVNUX0VO
VFJZCi19IFdlYktpdEZvbnRGYW1pbHk7Ci0KLXR5cGVkZWYgZW51bSB7Ci0gICAgV0VCS0lUX0VE
SVRBQkxFX0xJTktfREVGQVVMVF9CRUhBVklPVVIsCi0gICAgV0VCS0lUX0VESVRBQkxFX0xJTktf
QUxXQVlTX0xJVkUsCi0gICAgV0VCS0lUX0VESVRBQkxFX0xJTktfT05MWV9XSVRIX1NISUZUX0tF
WSwKLSAgICBXRUJLSVRfRURJVEFCTEVfTElOS19MSVZFX1dIRU5fTk9UX0ZPQ1VTRUQsCi0gICAg
V0VCS0lUX0VESVRBQkxFX0xJTktfTkVWRVJfTElWRQotfSBXZWJLaXRFZGl0YWJsZUxpbmtCZWhh
dmlvdXI7Ci0KLXR5cGVkZWYgc3RydWN0IF9XZWJLaXRTZXR0aW5ncyBXZWJLaXRTZXR0aW5nczsK
LXR5cGVkZWYgc3RydWN0IF9XZWJLaXRTZXR0aW5nc1ByaXZhdGUgV2ViS2l0U2V0dGluZ3NQcml2
YXRlOwotCi1zdHJ1Y3QgX1dlYktpdFNldHRpbmdzIHsKLSAgICBnY2hhciogZm9udF9uYW1lW1dF
QktJVF9GT05UX0ZBTUlMWV9MQVNUX0VOVFJZXTsKLSAgICBnaW50ICAgbWluaW11bV9mb250X3Np
emU7Ci0gICAgZ2ludCAgIG1pbmltdW1fbG9naWNhbF9mb250X3NpemU7Ci0gICAgZ2ludCAgIGRl
ZmF1bHRfZm9udF9zaXplOwotICAgIGdpbnQgICBkZWZhdWx0X2ZpeGVkX2ZvbnRfc2l6ZTsKLSAg
ICBnYm9vbGVhbiBsb2FkX2ltYWdlc19hdXRvbWF0aWNhbGx5OwotICAgIGdib29sZWFuIGlzX2ph
dmFfc2NyaXB0X2VuYWJsZWQ7Ci0gICAgZ2Jvb2xlYW4gamF2YV9zY3JpcHRfY2FuX29wZW5fd2lu
ZG93c19hdXRvbWF0aWNhbGx5OwotICAgIGdib29sZWFuIHBsdWdpbnNfZW5hYmxlZDsKLSAgICBn
Ym9vbGVhbiBwcml2YXRlX2Jyb3dzaW5nOwotICAgIGdjaGFyKiB1c2VyX3N0eWxlX3NoZWV0X2xv
Y2F0aW9uOwotICAgIGdib29sZWFuIHNob3VsZF9wcmludF9iYWNrZ3JvdW5kczsKLSAgICBnYm9v
bGVhbiB0ZXh0X2FyZWFzX2FyZV9yZXNpemFibGU7Ci0gICAgV2ViS2l0RWRpdGFibGVMaW5rQmVo
YXZpb3VyIGVkaXRhYmxlX2xpbmtfYmVoYXZpb3VyOwotICAgIGdib29sZWFuIHVzZXNfcGFnZV9j
YWNoZTsKLSAgICBnYm9vbGVhbiBzaHJpbmtfc3RhbmRhbG9uZV9pbWFnZXNfdG9fZml0OwotICAg
IGdib29sZWFuIHNob3dfdXJpc19pbl90b29sX3RpcHM7Ci0gICAgZ2NoYXIqIGZ0cF9kaXJlY3Rv
cnlfdGVtcGxhdGVfcGF0aDsKLSAgICBnYm9vbGVhbiBmb3JjZV9mdHBfZGlyZWN0b3J5X2xpc3Rp
bmdzOwotICAgIGdib29sZWFuIGRldmVsb3Blcl9leHRyYXNfZW5hYmxlZDsKLQotCi0gICAgV2Vi
S2l0U2V0dGluZ3NQcml2YXRlICpwcml2YXRlX2RhdGE7Ci19OwotCi1HVHlwZQotd2Via2l0X3dl
Yl9zZXR0aW5nc19nZXRfdHlwZSAodm9pZCk7Ci0KLVdlYktpdFNldHRpbmdzKgotd2Via2l0X3dl
Yl9zZXR0aW5nc19jb3B5IChXZWJLaXRTZXR0aW5ncyogc2V0dGluZyk7Ci0KLXZvaWQKLXdlYmtp
dF93ZWJfc2V0dGluZ3NfZnJlZSAoV2ViS2l0U2V0dGluZ3MqIHNldHRpbmcpOwotCi1XZWJLaXRT
ZXR0aW5ncyoKLXdlYmtpdF93ZWJfc2V0dGluZ3NfZ2V0X2dsb2JhbCAodm9pZCk7Ci0KLXZvaWQK
LXdlYmtpdF93ZWJfc2V0dGluZ3Nfc2V0X2dsb2JhbCAoV2ViS2l0U2V0dGluZ3MqIHNldHRpbmcp
OwotCi12b2lkCi13ZWJraXRfd2ViX3NldHRpbmdzX3NldF9mb250X2ZhbWlseShXZWJLaXRTZXR0
aW5ncyosIFdlYktpdEZvbnRGYW1pbHkgZmFtaWx5LCBnY2hhciAqZmFtaWx5X25hbWUpOwotCi1j
b25zdCBnY2hhcioKLXdlYmtpdF93ZWJfc2V0dGluZ3NfZ2V0X2ZvbnRfZmFtaWx5KFdlYktpdFNl
dHRpbmdzKiwgV2ViS2l0Rm9udEZhbWlseSBmYW1pbHkpOwotCi12b2lkCi13ZWJraXRfd2ViX3Nl
dHRpbmdzX3NldF91c2VyX3N0eWxlX3NoZWV0X2xvY2F0aW9uKFdlYktpdFNldHRpbmdzKiwgZ2No
YXIqKTsKLQotdm9pZAotd2Via2l0X3NldF9mdHBfZGlyZWN0b3J5X3RlbXBsYXRlX3BhdGgoV2Vi
S2l0U2V0dGluZ3MqLCBnY2hhciopOwotCi0KLUdfRU5EX0RFQ0xTCi0KLQotI2VuZGlmCkluZGV4
OiBXZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0ay5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRHdGsuY3BwCShyZXZp
c2lvbiAyODI1MSkKKysrIFdlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3Rr
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsMTUgKzM1LDE1IEBACiAjaW5jbHVkZSAiQ1N0cmlu
Zy5oIgogI2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKICNpbmNsdWRlICJLVVJMLmgiCi0jaW5j
bHVkZSAid2Via2l0Z3RrcGFnZS5oIgotI2luY2x1ZGUgIndlYmtpdGd0a3ByaXZhdGUuaCIKKyNp
bmNsdWRlICJ3ZWJraXR3ZWJ2aWV3LmgiCisjaW5jbHVkZSAid2Via2l0cHJpdmF0ZS5oIgogI2lu
Y2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiV2luZG93RmVhdHVyZXMuaCIKIAog
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewotQ2hyb21lQ2xp
ZW50OjpDaHJvbWVDbGllbnQoV2ViS2l0UGFnZSogcGFnZSkKK0Nocm9tZUNsaWVudDo6Q2hyb21l
Q2xpZW50KFdlYktpdFdlYlZpZXcqIHBhZ2UpCiAgICAgOiBtX3dlYlBhZ2UocGFnZSkKIHsKIH0K
QEAgLTkzLDEyICs5MywxMiBAQCBQYWdlKiBDaHJvbWVDbGllbnQ6OmNyZWF0ZVdpbmRvdyhGcmFt
ZSosCiAgICAgICAgIHJldHVybiAwOwogICAgIH0gZWxzZSB7CiAgICAgICAgIC8qIFRPRE86IEZy
YW1lTG9hZFJlcXVlc3QgaXMgbm90IHVzZWQgKi8KLSAgICAgICAgV2ViS2l0UGFnZSogcGFnZSA9
IFdFQktJVF9QQUdFX0dFVF9DTEFTUyhtX3dlYlBhZ2UpLT5jcmVhdGVfcGFnZShtX3dlYlBhZ2Up
OworICAgICAgICBXZWJLaXRXZWJWaWV3KiBwYWdlID0gV0VCS0lUX1dFQl9WSUVXX0dFVF9DTEFT
UyhtX3dlYlBhZ2UpLT5jcmVhdGVfd2ViX3ZpZXcobV93ZWJQYWdlKTsKICAgICAgICAgaWYgKCFw
YWdlKQogICAgICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICAgICAgV2ViS2l0UGFnZVByaXZhdGUg
KnByaXZhdGVEYXRhID0gV0VCS0lUX1BBR0VfR0VUX1BSSVZBVEUoV0VCS0lUX1BBR0UocGFnZSkp
OwotICAgICAgICByZXR1cm4gcHJpdmF0ZURhdGEtPnBhZ2U7CisgICAgICAgIFdlYktpdFdlYlZp
ZXdQcml2YXRlICpwcml2YXRlRGF0YSA9IFdFQktJVF9XRUJfVklFV19HRVRfUFJJVkFURShXRUJL
SVRfV0VCX1ZJRVcocGFnZSkpOworICAgICAgICByZXR1cm4gcHJpdmF0ZURhdGEtPmNvcmVQYWdl
OwogICAgIH0KIH0KIApJbmRleDogV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGll
bnRHdGsuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNs
aWVudEd0ay5oCShyZXZpc2lvbiAyODI1MSkKKysrIFdlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQv
Q2hyb21lQ2xpZW50R3RrLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDE0ICszMiwxNCBAQAogI2lu
Y2x1ZGUgIkNocm9tZUNsaWVudC5oIgogI2luY2x1ZGUgIktVUkwuaCIKIAotdHlwZWRlZiBzdHJ1
Y3QgX1dlYktpdFBhZ2UgV2ViS2l0UGFnZTsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRXZWJWaWV3
IFdlYktpdFdlYlZpZXc7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCiAgICAgY2xhc3MgQ2hyb21l
Q2xpZW50IDogcHVibGljIFdlYkNvcmU6OkNocm9tZUNsaWVudCB7CiAgICAgcHVibGljOgotICAg
ICAgICBDaHJvbWVDbGllbnQoV2ViS2l0UGFnZSopOwotICAgICAgICBXZWJLaXRQYWdlKiB3ZWJQ
YWdlKCkgY29uc3QgeyByZXR1cm4gbV93ZWJQYWdlOyB9CisgICAgICAgIENocm9tZUNsaWVudChX
ZWJLaXRXZWJWaWV3Kik7CisgICAgICAgIFdlYktpdFdlYlZpZXcqIHdlYlBhZ2UoKSBjb25zdCB7
IHJldHVybiBtX3dlYlBhZ2U7IH0KIAogICAgICAgICB2aXJ0dWFsIHZvaWQgY2hyb21lRGVzdHJv
eWVkKCk7CiAKQEAgLTEwNiw3ICsxMDYsNyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKICAgICAgICAg
dmlydHVhbCB1bnNpZ25lZCBsb25nIGxvbmcgcmVxdWVzdFF1b3RhSW5jcmVhc2VGb3JEYXRhYmFz
ZU9wZXJhdGlvbihXZWJDb3JlOjpGcmFtZSosIGNvbnN0IFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2lu
RGF0YSYsIGNvbnN0IFdlYkNvcmU6OlN0cmluZyYsIHVuc2lnbmVkIGxvbmcgbG9uZyk7CiAKICAg
ICBwcml2YXRlOgotICAgICAgICBXZWJLaXRQYWdlKiBtX3dlYlBhZ2U7CisgICAgICAgIFdlYktp
dFdlYlZpZXcqIG1fd2ViUGFnZTsKICAgICAgICAgV2ViQ29yZTo6S1VSTCBtX2hvdmVyZWRMaW5r
VVJMOwogICAgIH07CiB9CkluZGV4OiBXZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0VkaXRvckNs
aWVudEd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9FZGl0
b3JDbGllbnRHdGsuY3BwCShyZXZpc2lvbiAyODI1MSkKKysrIFdlYktpdC9ndGsvV2ViQ29yZVN1
cHBvcnQvRWRpdG9yQ2xpZW50R3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAsNyBA
QAogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1
ZGUgIlBsYXRmb3JtS2V5Ym9hcmRFdmVudC5oIgotI2luY2x1ZGUgIndlYmtpdGd0a3ByaXZhdGUu
aCIKKyNpbmNsdWRlICJ3ZWJraXRwcml2YXRlLmgiCiAKICNpbmNsdWRlIDxzdGRpby5oPgogCkBA
IC0xNDYsNyArMTQ2LDcgQEAgdm9pZCBFZGl0b3JDbGllbnQ6OmRpZFNldFNlbGVjdGlvblR5cGVz
RgogCiBib29sIEVkaXRvckNsaWVudDo6aXNFZGl0YWJsZSgpCiB7Ci0gICAgcmV0dXJuIHdlYmtp
dF9wYWdlX2dldF9lZGl0YWJsZShtX3BhZ2UpOworICAgIHJldHVybiB3ZWJraXRfd2ViX3ZpZXdf
Z2V0X2VkaXRhYmxlKG1fcGFnZSk7CiB9CiAKIHZvaWQgRWRpdG9yQ2xpZW50OjpyZWdpc3RlckNv
bW1hbmRGb3JVbmRvKFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpFZGl0Q29tbWFuZD4pCkBAIC0z
NjAsNyArMzYwLDcgQEAgdm9pZCBFZGl0b3JDbGllbnQ6OmhhbmRsZUlucHV0TWV0aG9kS2V5cAog
ICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLUVkaXRvckNsaWVudDo6RWRpdG9yQ2xpZW50KFdl
YktpdFBhZ2UqIHBhZ2UpCitFZGl0b3JDbGllbnQ6OkVkaXRvckNsaWVudChXZWJLaXRXZWJWaWV3
KiBwYWdlKQogICAgIDogbV9wYWdlKHBhZ2UpCiB7CiB9CkluZGV4OiBXZWJLaXQvZ3RrL1dlYkNv
cmVTdXBwb3J0L0VkaXRvckNsaWVudEd0ay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9ndGsvV2Vi
Q29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50R3RrLmgJKHJldmlzaW9uIDI4MjUxKQorKysgV2ViS2l0
L2d0ay9XZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRHdGsuaAkod29ya2luZyBjb3B5KQpAQCAt
MzQsNyArMzQsNyBAQAogCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KIAotdHlwZWRlZiBzdHJ1
Y3QgX1dlYktpdFBhZ2UgV2ViS2l0UGFnZTsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRXZWJWaWV3
IFdlYktpdFdlYlZpZXc7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBQYWdlOwpA
QCAtNDQsNyArNDQsNyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogICAgIGNsYXNzIEVkaXRvckNs
aWVudCA6IHB1YmxpYyBXZWJDb3JlOjpFZGl0b3JDbGllbnQgewogICAgIHB1YmxpYzoKLSAgICAg
ICAgRWRpdG9yQ2xpZW50KFdlYktpdFBhZ2UqKTsKKyAgICAgICAgRWRpdG9yQ2xpZW50KFdlYktp
dFdlYlZpZXcqKTsKIAogICAgICAgICAvLyBmcm9tIEVkaXRvckNsaWVudAogICAgICAgICB2aXJ0
dWFsIHZvaWQgcGFnZURlc3Ryb3llZCgpOwpAQCAtMTA5LDcgKzEwOSw3IEBAIG5hbWVzcGFjZSBX
ZWJLaXQgewogICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0SW5wdXRNZXRob2RTdGF0ZShib29sIGVu
YWJsZWQpOwogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgV2ViS2l0UGFnZSogbV9wYWdlOworICAg
ICAgICBXZWJLaXRXZWJWaWV3KiBtX3BhZ2U7CiAgICAgfTsKIH0KIApJbmRleDogV2ViS2l0L2d0
ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5jcHAJKHJldmlz
aW9uIDI4MjUxKQorKysgV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVu
dEd0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxLDkgKzUxLDkgQEAKICNpbmNsdWRlICJranNf
YmluZGluZy5oIgogI2luY2x1ZGUgImtqc19wcm94eS5oIgogI2luY2x1ZGUgImtqc193aW5kb3cu
aCIKLSNpbmNsdWRlICJ3ZWJraXRndGtwYWdlLmgiCi0jaW5jbHVkZSAid2Via2l0Z3RrZnJhbWUu
aCIKLSNpbmNsdWRlICJ3ZWJraXRndGtwcml2YXRlLmgiCisjaW5jbHVkZSAid2Via2l0d2Vidmll
dy5oIgorI2luY2x1ZGUgIndlYmtpdHdlYmZyYW1lLmgiCisjaW5jbHVkZSAid2Via2l0cHJpdmF0
ZS5oIgogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvQVBJQ2FzdC5oPgogI2luY2x1ZGUgPHN0
ZGlvLmg+CkBAIC02NSw3ICs2NSw3IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBuYW1l
c3BhY2UgV2ViS2l0IHsKIAotRnJhbWVMb2FkZXJDbGllbnQ6OkZyYW1lTG9hZGVyQ2xpZW50KFdl
YktpdEZyYW1lKiBmcmFtZSkKK0ZyYW1lTG9hZGVyQ2xpZW50OjpGcmFtZUxvYWRlckNsaWVudChX
ZWJLaXRXZWJGcmFtZSogZnJhbWUpCiAgICAgOiBtX2ZyYW1lKGZyYW1lKQogICAgICwgbV91c2Vy
QWdlbnQoIiIpCiB7CkBAIC0xOTksMTMgKzE5OSwxMyBAQCB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50
Ojphc3NpZ25JZGVudGlmaWVyCiAKIHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OnBvc3RQcm9ncmVz
c1N0YXJ0ZWROb3RpZmljYXRpb24oKQogewotICAgIFdlYktpdFBhZ2UqIHBhZ2UgPSBnZXRQYWdl
RnJvbUZyYW1lKG1fZnJhbWUpOworICAgIFdlYktpdFdlYlZpZXcqIHBhZ2UgPSBnZXRWaWV3RnJv
bUZyYW1lKG1fZnJhbWUpOwogICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZShwYWdlLCAibG9hZF9z
dGFydGVkIiwgbV9mcmFtZSk7CiB9CiAKIHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OnBvc3RQcm9n
cmVzc0VzdGltYXRlQ2hhbmdlZE5vdGlmaWNhdGlvbigpCiB7Ci0gICAgV2ViS2l0UGFnZSoga2l0
UGFnZSA9IGdldFBhZ2VGcm9tRnJhbWUobV9mcmFtZSk7CisgICAgV2ViS2l0V2ViVmlldyoga2l0
UGFnZSA9IGdldFZpZXdGcm9tRnJhbWUobV9mcmFtZSk7CiAgICAgUGFnZSogY29yZVBhZ2UgPSBj
b3JlKGtpdFBhZ2UpOwogCiAgICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKGtpdFBhZ2UsICJsb2Fk
X3Byb2dyZXNzX2NoYW5nZWQiLCBscm91bmQoY29yZVBhZ2UtPnByb2dyZXNzKCktPmVzdGltYXRl
ZFByb2dyZXNzKCkqMTAwKSk7CkBAIC0yMTMsNyArMjEzLDcgQEAgdm9pZCBGcmFtZUxvYWRlckNs
aWVudDo6cG9zdFByb2dyZXNzRXN0aQogCiB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50Ojpwb3N0UHJv
Z3Jlc3NGaW5pc2hlZE5vdGlmaWNhdGlvbigpCiB7Ci0gICAgV2ViS2l0UGFnZSogcGFnZSA9IGdl
dFBhZ2VGcm9tRnJhbWUobV9mcmFtZSk7CisgICAgV2ViS2l0V2ViVmlldyogcGFnZSA9IGdldFZp
ZXdGcm9tRnJhbWUobV9mcmFtZSk7CiAKICAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUocGFnZSwg
ImxvYWRfZmluaXNoZWQiLCBtX2ZyYW1lKTsKIH0KQEAgLTI1NCw3ICsyNTQsNyBAQCB2b2lkIEZy
YW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERlY2lkZVBvCiAgICAgaWYgKCFwb2xpY3lGdW5jdGlv
bikKICAgICAgICAgcmV0dXJuOwogCi0gICAgV2ViS2l0UGFnZSogcGFnZSA9IGdldFBhZ2VGcm9t
RnJhbWUobV9mcmFtZSk7CisgICAgV2ViS2l0V2ViVmlldyogcGFnZSA9IGdldFZpZXdGcm9tRnJh
bWUobV9mcmFtZSk7CiAgICAgV2ViS2l0TmV0d29ya1JlcXVlc3QqIHJlcXVlc3QgPSB3ZWJraXRf
bmV0d29ya19yZXF1ZXN0X25ldyhyZXNvdXJjZVJlcXVlc3QudXJsKCkudXJsKCkudXRmOCgpLmRh
dGEoKSk7CiAgICAgV2ViS2l0TmF2aWdhdGlvblJlc3BvbnNlIHJlc3BvbnNlOwogCkBAIC0yODEs
OCArMjgxLDggQEAgUGFzc1JlZlB0cjxGcmFtZT4gRnJhbWVMb2FkZXJDbGllbnQ6OmNyZQogewog
ICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKHdlYkZyYW1lKCkpOwogCi0gICAgQVNTRVJUKGNv
cmUoZ2V0UGFnZUZyb21GcmFtZSh3ZWJGcmFtZSgpKSkgPT0gY29yZUZyYW1lLT5wYWdlKCkpOwot
ICAgIFdlYktpdEZyYW1lKiBndGtGcmFtZSA9IFdFQktJVF9GUkFNRSh3ZWJraXRfZnJhbWVfaW5p
dF93aXRoX3BhZ2UoZ2V0UGFnZUZyb21GcmFtZSh3ZWJGcmFtZSgpKSwgb3duZXJFbGVtZW50KSk7
CisgICAgQVNTRVJUKGNvcmUoZ2V0Vmlld0Zyb21GcmFtZSh3ZWJGcmFtZSgpKSkgPT0gY29yZUZy
YW1lLT5wYWdlKCkpOworICAgIFdlYktpdFdlYkZyYW1lKiBndGtGcmFtZSA9IFdFQktJVF9XRUJf
RlJBTUUod2Via2l0X3dlYl9mcmFtZV9pbml0X3dpdGhfd2ViX3ZpZXcoZ2V0Vmlld0Zyb21GcmFt
ZSh3ZWJGcmFtZSgpKSwgb3duZXJFbGVtZW50KSk7CiAgICAgUmVmUHRyPEZyYW1lPiBjaGlsZEZy
YW1lKGFkb3B0UmVmKGNvcmUoZ3RrRnJhbWUpKSk7CiAKICAgICBjb3JlRnJhbWUtPnRyZWUoKS0+
YXBwZW5kQ2hpbGQoY2hpbGRGcmFtZSk7CkBAIC0zNjYsNyArMzY2LDcgQEAgdm9pZCBGcmFtZUxv
YWRlckNsaWVudDo6d2luZG93T2JqZWN0Q2xlYQogICAgIEpTT2JqZWN0UmVmIHdpbmRvd09iamVj
dCA9IHRvUmVmKEtKUzo6V2luZG93OjpyZXRyaWV2ZShjb3JlRnJhbWUpLT5nZXRPYmplY3QoKSk7
CiAgICAgQVNTRVJUKHdpbmRvd09iamVjdCk7CiAKLSAgICBXZWJLaXRQYWdlKiBwYWdlID0gZ2V0
UGFnZUZyb21GcmFtZShtX2ZyYW1lKTsKKyAgICBXZWJLaXRXZWJWaWV3KiBwYWdlID0gZ2V0Vmll
d0Zyb21GcmFtZShtX2ZyYW1lKTsKICAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUocGFnZSwgIndp
bmRvd19vYmplY3RfY2xlYXJlZCIsIG1fZnJhbWUsIGNvbnRleHQsIHdpbmRvd09iamVjdCk7CiAK
ICAgICAvLyBUT0RPOiBSZS1hdHRhY2ggZGVidWcgY2xpZW50cyBpZiBwcmVzZW50LgpAQCAtNDQ3
LDcgKzQ0Nyw3IEBAIHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoV2lsbENsb3MKIAog
dm9pZCBGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEaWRSZWNlaXZlSWNvbigpCiB7Ci0gICAg
V2ViS2l0UGFnZSogcGFnZSA9IGdldFBhZ2VGcm9tRnJhbWUobV9mcmFtZSk7CisgICAgV2ViS2l0
V2ViVmlldyogcGFnZSA9IGdldFZpZXdGcm9tRnJhbWUobV9mcmFtZSk7CiAKICAgICBnX3NpZ25h
bF9lbWl0X2J5X25hbWUocGFnZSwgImljb25fbG9hZGVkIiwgbV9mcmFtZSk7CiB9CkBAIC01MDcs
MTMgKzUwNywxMyBAQCB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50OjpwcmVwYXJlRm9yRGF0YVNvCiAK
IHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OnNldFRpdGxlKGNvbnN0IFN0cmluZyYgdGl0bGUsIGNv
bnN0IEtVUkwmIHVybCkKIHsKLSAgICBXZWJLaXRQYWdlKiBwYWdlID0gZ2V0UGFnZUZyb21GcmFt
ZShtX2ZyYW1lKTsKKyAgICBXZWJLaXRXZWJWaWV3KiBwYWdlID0gZ2V0Vmlld0Zyb21GcmFtZSht
X2ZyYW1lKTsKIAogICAgIENTdHJpbmcgdGl0bGVTdHJpbmcgPSB0aXRsZS51dGY4KCk7CiAgICAg
RGVwcmVjYXRlZENTdHJpbmcgdXJsU3RyaW5nID0gdXJsLnByZXR0eVVSTCgpLnV0ZjgoKTsKICAg
ICBnX3NpZ25hbF9lbWl0X2J5X25hbWUobV9mcmFtZSwgInRpdGxlX2NoYW5nZWQiLCB0aXRsZVN0
cmluZy5kYXRhKCksIHVybFN0cmluZy5kYXRhKCkpOwogCi0gICAgaWYgKG1fZnJhbWUgPT0gd2Vi
a2l0X3BhZ2VfZ2V0X21haW5fZnJhbWUocGFnZSkpCisgICAgaWYgKG1fZnJhbWUgPT0gd2Via2l0
X3dlYl92aWV3X2dldF9tYWluX2ZyYW1lKHBhZ2UpKQogICAgICAgICBnX3NpZ25hbF9lbWl0X2J5
X25hbWUocGFnZSwgInRpdGxlX2NoYW5nZWQiLCB0aXRsZVN0cmluZy5kYXRhKCksIHVybFN0cmlu
Zy5kYXRhKCkpOwogfQogCkluZGV4OiBXZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9h
ZGVyQ2xpZW50R3RrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9G
cmFtZUxvYWRlckNsaWVudEd0ay5oCShyZXZpc2lvbiAyODI1MSkKKysrIFdlYktpdC9ndGsvV2Vi
Q29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuaAkod29ya2luZyBjb3B5KQpAQCAtMzIs
MTcgKzMyLDE3IEBACiAjaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnQuaCIKICNpbmNsdWRlICJS
ZXNvdXJjZVJlc3BvbnNlLmgiCiAKLXR5cGVkZWYgc3RydWN0IF9XZWJLaXRGcmFtZSBXZWJLaXRG
cmFtZTsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRXZWJGcmFtZSBXZWJLaXRXZWJGcmFtZTsKIAog
bmFtZXNwYWNlIFdlYktpdCB7CiAKICAgICBjbGFzcyBGcmFtZUxvYWRlckNsaWVudCA6IHB1Ymxp
YyBXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudCB7CiAgICAgcHVibGljOgotICAgICAgICBGcmFt
ZUxvYWRlckNsaWVudChXZWJLaXRGcmFtZSopOworICAgICAgICBGcmFtZUxvYWRlckNsaWVudChX
ZWJLaXRXZWJGcmFtZSopOwogICAgICAgICB2aXJ0dWFsIH5GcmFtZUxvYWRlckNsaWVudCgpIHsg
fQogICAgICAgICB2aXJ0dWFsIHZvaWQgZnJhbWVMb2FkZXJEZXN0cm95ZWQoKTsKIAotICAgICAg
ICBXZWJLaXRGcmFtZSogIHdlYkZyYW1lKCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZTsgfQorICAg
ICAgICBXZWJLaXRXZWJGcmFtZSogIHdlYkZyYW1lKCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZTsg
fQogCiAgICAgICAgIHZpcnR1YWwgYm9vbCBoYXNXZWJWaWV3KCkgY29uc3Q7CiAgICAgICAgIHZp
cnR1YWwgYm9vbCBoYXNGcmFtZVZpZXcoKSBjb25zdDsKQEAgLTE3OCw3ICsxNzgsNyBAQCBuYW1l
c3BhY2UgV2ViS2l0IHsKICAgICAgICAgdmlydHVhbCBib29sIGNhbkNhY2hlUGFnZSgpIGNvbnN0
OwogICAgICAgICB2aXJ0dWFsIHZvaWQgZG93bmxvYWQoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGUq
LCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJj
ZVJlcXVlc3QmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJik7CiAgICAgcHJpdmF0
ZToKLSAgICAgICAgV2ViS2l0RnJhbWUqIG1fZnJhbWU7CisgICAgICAgIFdlYktpdFdlYkZyYW1l
KiBtX2ZyYW1lOwogICAgICAgICBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlIG1fcmVzcG9uc2U7
CiAgICAgICAgIFdlYkNvcmU6OlN0cmluZyBtX3VzZXJBZ2VudDsKICAgICB9OwpJbmRleDogV2Vi
S2l0L2d0ay9XZWJWaWV3L2hlYWRlcnMucHJpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9ndGsvV2Vi
Vmlldy9oZWFkZXJzLnByaQkocmV2aXNpb24gMCkKKysrIFdlYktpdC9ndGsvV2ViVmlldy9oZWFk
ZXJzLnByaQkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3IEBACitXRUJLSVRfQVBJX0hFQURFUlMg
PSAkJFBXRC93ZWJraXRkZWZpbmVzLmggXAorICAgICAgICAgICAgICAgICAgICAgJCRQV0Qvd2Vi
a2l0d2ViZnJhbWUuaCBcCisgICAgICAgICAgICAgICAgICAgICAkJFBXRC93ZWJraXRmcmFtZWRh
dGEuaCBcCisgICAgICAgICAgICAgICAgICAgICAkJFBXRC93ZWJraXRnbG9iYWwuaCBcCisgICAg
ICAgICAgICAgICAgICAgICAkJFBXRC93ZWJraXRuZXR3b3JrcmVxdWVzdC5oIFwKKyAgICAgICAg
ICAgICAgICAgICAgICQkUFdEL3dlYmtpdHdlYnZpZXcuaCBcCisgICAgICAgICAgICAgICAgICAg
ICAkJFBXRC93ZWJraXRzZXR0aW5ncy5oCkluZGV4OiBXZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0
LW1hcnNoYWwubGlzdAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0LW1h
cnNoYWwubGlzdAkocmV2aXNpb24gMCkKKysrIFdlYktpdC9ndGsvV2ViVmlldy93ZWJraXQtbWFy
c2hhbC5saXN0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDkgQEAKK1ZPSUQ6U1RSSU5HLFNUUklO
RworVk9JRDpPQkpFQ1QsQk9PTEVBTgorVk9JRDpPQkpFQ1QsT0JKRUNUCitWT0lEOk9CSkVDVCxQ
T0lOVEVSLFBPSU5URVIKK0JPT0xFQU46U1RSSU5HLElOVCxTVFJJTkcKK0JPT0xFQU46T0JKRUNU
LFNUUklORworQk9PTEVBTjpPQkpFQ1QsU1RSSU5HLEJPT0xFQU4KK0JPT0xFQU46T0JKRUNULFNU
UklORyxTVFJJTkcsU1RSSU5HCitJTlQ6T0JKRUNULE9CSkVDVApJbmRleDogV2ViS2l0L2d0ay9X
ZWJWaWV3L3dlYmtpdGRlZmluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvZ3RrL1dlYlZpZXcv
d2Via2l0ZGVmaW5lcy5oCShyZXZpc2lvbiAwKQorKysgV2ViS2l0L2d0ay9XZWJWaWV3L3dlYmtp
dGRlZmluZXMuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2MiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4g
CisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4g
CisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSwgSW5jLiAoIkFwcGxlIikgbm9yIHRo
ZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElT
IiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV0VCS0lUX0RFRklORVNfSAor
I2RlZmluZSBXRUJLSVRfREVGSU5FU19ICisKKyNpbmNsdWRlIDxnbGliLmg+CisKK3R5cGVkZWYg
c3RydWN0IF9XZWJLaXRXZWJGcmFtZSBXZWJLaXRXZWJGcmFtZTsKK3R5cGVkZWYgc3RydWN0IF9X
ZWJLaXRXZWJGcmFtZUNsYXNzIFdlYktpdFdlYkZyYW1lQ2xhc3M7CisKK3R5cGVkZWYgc3RydWN0
IF9XZWJLaXRXZWJGcmFtZURhdGEgV2ViS2l0V2ViRnJhbWVEYXRhOworCit0eXBlZGVmIHN0cnVj
dCBfV2ViS2l0V2ViVmlldyBXZWJLaXRXZWJWaWV3OwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFdl
YlZpZXdDbGFzcyBXZWJLaXRXZWJWaWV3Q2xhc3M7CisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRO
ZXR3b3JrUmVxdWVzdCBXZWJLaXROZXR3b3JrUmVxdWVzdDsKK3R5cGVkZWYgc3RydWN0IF9XZWJL
aXROZXR3b3JrUmVxdWVzdENsYXNzIFdlYktpdE5ldHdvcmtSZXF1ZXN0Q2xhc3M7CisKK3R5cGVk
ZWYgc3RydWN0IE9wYXF1ZUpTQ29udGV4dCogSlNHbG9iYWxDb250ZXh0UmVmOwordHlwZWRlZiBz
dHJ1Y3QgT3BhcXVlSlNWYWx1ZSogSlNPYmplY3RSZWY7CisKKyNpZmRlZiBHX09TX1dJTjMyCisg
ICAgI2lmZGVmIEJVSUxESU5HX1dFQktJVAorICAgICAgICAjZGVmaW5lIFdFQktJVF9BUEkgX19k
ZWNsc3BlYyhkbGxleHBvcnQpCisgICAgI2Vsc2UKKyAgICAgICAgI2RlZmluZSBXRUJLSVRfQVBJ
IF9fZGVjbHNwZWMoZGxsaW1wb3J0KQorICAgICNlbmRpZgorI2Vsc2UKKyAgICAjZGVmaW5lIFdF
QktJVF9BUEkgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSkKKyNlbmRpZgor
CisjaWZuZGVmIFdFQktJVF9BUEkKKyNkZWZpbmUgV0VCS0lUX0FQSQorI2VuZGlmCisKKyNlbmRp
ZgpJbmRleDogV2ViS2l0L2d0ay9XZWJWaWV3L3dlYmtpdGdsb2JhbC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViS2l0L2d0ay9XZWJWaWV3L3dlYmtpdGdsb2JhbC5jcHAJKHJldmlzaW9uIDApCisrKyBX
ZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0Z2xvYmFsLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSw1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5
dGhlcgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAq
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBs
ZSwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAq
ICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uIAorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5E
IElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisg
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJ3ZWJraXRnbG9iYWwuaCIKKworI2luY2x1ZGUg
IkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJEYXRhYmFzZVRyYWNrZXIuaCIKKworI2luY2x1ZGUgPGds
aWIuaD4KKworZXh0ZXJuICJDIiB7Cit2b2lkIHdlYmtpdF9pbml0KHZvaWQpCit7CisgICAgV2Vi
Q29yZTo6SW5pdGlhbGl6ZUxvZ2dpbmdDaGFubmVsc0lmTmVjZXNzYXJ5KCk7CisKKyAgICBXZWJD
b3JlOjppbml0aWFsaXplVGhyZWFkaW5nKCk7CisKKyNpZiBFTkFCTEUoREFUQUJBU0UpCisgICAg
Ly8gRklYTUU6IEl0IHNob3VsZCBiZSBwb3NzaWJsZSBmb3IgY2xpZW50IGFwcGxpY2F0aW9ucyB0
byBvdmVycmlkZSB0aGlzIGRlZmF1bHQgbG9jYXRpb24KKyAgICBnY2hhciogZGF0YWJhc2VEaXJl
Y3RvcnkgPSBnX2J1aWxkX2ZpbGVuYW1lKGdfZ2V0X3VzZXJfZGF0YV9kaXIoKSwgIndlYmtpdCIs
ICJkYXRhYmFzZXMiLCBOVUxMKTsKKyAgICBXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OnRyYWNr
ZXIoKS5zZXREYXRhYmFzZVBhdGgoZGF0YWJhc2VEaXJlY3RvcnkpOworICAgIGdfZnJlZShkYXRh
YmFzZURpcmVjdG9yeSk7CisjZW5kaWYKK30KK30KSW5kZXg6IFdlYktpdC9ndGsvV2ViVmlldy93
ZWJraXRnbG9iYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0Z2xv
YmFsLmgJKHJldmlzaW9uIDApCisrKyBXZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0Z2xvYmFsLmgJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcg
SG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorICogMi4gIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAorICogMy4gIE5l
aXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YK
KyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgor
ICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdFQktJVF9HTE9CQUxfSAorI2RlZmluZSBXRUJL
SVRfR0xPQkFMX0gKKworI2luY2x1ZGUgIndlYmtpdGRlZmluZXMuaCIKKworR19CRUdJTl9ERUNM
UworCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9pbml0ICh2b2lkKTsKKworR19FTkRfREVDTFMK
KworI2VuZGlmCkluZGV4OiBXZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0bmV0d29ya3JlcXVlc3Qu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9ndGsvV2ViVmlldy93ZWJraXRuZXR3b3JrcmVxdWVz
dC5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0bmV0d29ya3Jl
cXVlc3QuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDk0IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAK
KyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAK
KyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlLCBJbmMuICgiQXBwbGUiKSBub3IgdGhl
IG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMi
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5j
bHVkZSAid2Via2l0bmV0d29ya3JlcXVlc3QuaCIKKyNpbmNsdWRlICJ3ZWJraXRwcml2YXRlLmgi
CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKwor
ZXh0ZXJuICJDIiB7CisKK0dfREVGSU5FX1RZUEUoV2ViS2l0TmV0d29ya1JlcXVlc3QsIHdlYmtp
dF9uZXR3b3JrX3JlcXVlc3QsIEdfVFlQRV9PQkpFQ1QpOworCitzdGF0aWMgdm9pZCB3ZWJraXRf
bmV0d29ya19yZXF1ZXN0X2ZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkKK3sKKyAgICBXZWJLaXRO
ZXR3b3JrUmVxdWVzdFByaXZhdGUqIHJlcXVlc3RQcml2YXRlID0gV0VCS0lUX05FVFdPUktfUkVR
VUVTVF9HRVRfUFJJVkFURShvYmplY3QpOworCisgICAgZ19mcmVlKHJlcXVlc3RQcml2YXRlLT51
cmkpOworCisgICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0X25ldHdvcmtfcmVxdWVzdF9wYXJlbnRf
Y2xhc3MpLT5maW5hbGl6ZShvYmplY3QpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfbmV0d29y
a19yZXF1ZXN0X2NsYXNzX2luaXQoV2ViS2l0TmV0d29ya1JlcXVlc3RDbGFzcyogcmVxdWVzdENs
YXNzKQoreworICAgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZShyZXF1ZXN0Q2xhc3MsIHNpemVv
ZihXZWJLaXROZXR3b3JrUmVxdWVzdFByaXZhdGUpKTsKKworICAgIEdfT0JKRUNUX0NMQVNTKHJl
cXVlc3RDbGFzcyktPmZpbmFsaXplID0gd2Via2l0X25ldHdvcmtfcmVxdWVzdF9maW5hbGl6ZTsK
K30KKworc3RhdGljIHZvaWQgd2Via2l0X25ldHdvcmtfcmVxdWVzdF9pbml0KFdlYktpdE5ldHdv
cmtSZXF1ZXN0KiByZXF1ZXN0KQoreworfQorCitXZWJLaXROZXR3b3JrUmVxdWVzdCogd2Via2l0
X25ldHdvcmtfcmVxdWVzdF9uZXcoY29uc3QgZ2NoYXIqIHVyaSkKK3sKKyAgICBXZWJLaXROZXR3
b3JrUmVxdWVzdCogcmVxdWVzdCA9IFdFQktJVF9ORVRXT1JLX1JFUVVFU1QoZ19vYmplY3RfbmV3
KFdFQktJVF9UWVBFX05FVFdPUktfUkVRVUVTVCwgTlVMTCkpOworICAgIFdlYktpdE5ldHdvcmtS
ZXF1ZXN0UHJpdmF0ZSogcmVxdWVzdFByaXZhdGUgPSBXRUJLSVRfTkVUV09SS19SRVFVRVNUX0dF
VF9QUklWQVRFKHJlcXVlc3QpOworCisgICAgcmVxdWVzdFByaXZhdGUtPnVyaSA9IGdfc3RyZHVw
KHVyaSk7CisKKyAgICByZXR1cm4gcmVxdWVzdDsKK30KKwordm9pZCB3ZWJraXRfbmV0d29ya19y
ZXF1ZXN0X3NldF91cmkoV2ViS2l0TmV0d29ya1JlcXVlc3QqIHJlcXVlc3QsIGNvbnN0IGdjaGFy
KiB1cmkpCit7CisgICAgV2ViS2l0TmV0d29ya1JlcXVlc3RQcml2YXRlKiByZXF1ZXN0UHJpdmF0
ZTsKKworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX05FVFdPUktfUkVRVUVTVChyZXF1
ZXN0KSk7CisKKyAgICByZXF1ZXN0UHJpdmF0ZSA9IFdFQktJVF9ORVRXT1JLX1JFUVVFU1RfR0VU
X1BSSVZBVEUocmVxdWVzdCk7CisKKyAgICBnX2ZyZWUocmVxdWVzdFByaXZhdGUtPnVyaSk7Cisg
ICAgcmVxdWVzdFByaXZhdGUtPnVyaSA9IGdfc3RyZHVwKHVyaSk7Cit9CisKK2NvbnN0IGdjaGFy
KiB3ZWJraXRfbmV0d29ya19yZXF1ZXN0X2dldF91cmkoV2ViS2l0TmV0d29ya1JlcXVlc3QqIHJl
cXVlc3QpCit7CisgICAgV2ViS2l0TmV0d29ya1JlcXVlc3RQcml2YXRlKiByZXF1ZXN0UHJpdmF0
ZTsKKworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19ORVRXT1JLX1JFUVVFU1Qo
cmVxdWVzdCksIE5VTEwpOworCisgICAgcmVxdWVzdFByaXZhdGUgPSBXRUJLSVRfTkVUV09SS19S
RVFVRVNUX0dFVF9QUklWQVRFKHJlcXVlc3QpOworCisgICAgcmV0dXJuIHJlcXVlc3RQcml2YXRl
LT51cmk7Cit9CisKK30KSW5kZXg6IFdlYktpdC9ndGsvV2ViVmlldy93ZWJraXRuZXR3b3JrcmVx
dWVzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9ndGsvV2ViVmlldy93ZWJraXRuZXR3b3JrcmVx
dWVzdC5oCShyZXZpc2lvbiAwKQorKysgV2ViS2l0L2d0ay9XZWJWaWV3L3dlYmtpdG5ldHdvcmty
ZXF1ZXN0LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjggQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAor
ICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAor
ICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUg
bmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsK
KyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdFQktJVF9ORVRXT1JLX1JFUVVF
U1RfSAorI2RlZmluZSBXRUJLSVRfTkVUV09SS19SRVFVRVNUX0gKKworI2luY2x1ZGUgPGdsaWIt
b2JqZWN0Lmg+CisKKyNpbmNsdWRlICJ3ZWJraXRkZWZpbmVzLmgiCisKK0dfQkVHSU5fREVDTFMK
KworI2RlZmluZSBXRUJLSVRfVFlQRV9ORVRXT1JLX1JFUVVFU1QgICAgICAgICAgICAod2Via2l0
X25ldHdvcmtfcmVxdWVzdF9nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfTkVUV09SS19SRVFV
RVNUKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdF
QktJVF9UWVBFX05FVFdPUktfUkVRVUVTVCwgV2ViS2l0TmV0d29ya1JlcXVlc3QpKQorI2RlZmlu
ZSBXRUJLSVRfTkVUV09SS19SRVFVRVNUX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NM
QVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9UWVBFX05FVFdPUktfUkVRVUVTVCwgV2ViS2l0TmV0
d29ya1JlcXVlc3RDbGFzcykpCisjZGVmaW5lIFdFQktJVF9JU19ORVRXT1JLX1JFUVVFU1Qob2Jq
KSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX1RZUEVf
TkVUV09SS19SRVFVRVNUKSkKKyNkZWZpbmUgV0VCS0lUX0lTX05FVFdPUktfUkVRVUVTVF9DTEFT
UyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfVFlQRV9O
RVRXT1JLX1JFUVVFU1QpKQorI2RlZmluZSBXRUJLSVRfTkVUV09SS19SRVFVRVNUX0dFVF9DTEFT
UyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9UWVBFX05F
VFdPUktfUkVRVUVTVCwgV2ViS2l0TmV0d29ya1JlcXVlc3RDbGFzcykpCisKKworc3RydWN0IF9X
ZWJLaXROZXR3b3JrUmVxdWVzdCB7CisgICAgR09iamVjdCBwYXJlbnQ7Cit9OworCitzdHJ1Y3Qg
X1dlYktpdE5ldHdvcmtSZXF1ZXN0Q2xhc3MgeworICAgIEdPYmplY3RDbGFzcyBwYXJlbnQ7Cit9
OworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJraXRfbmV0d29ya19yZXF1ZXN0X2dldF90eXBlICh2
b2lkKTsKKworV0VCS0lUX0FQSSBXZWJLaXROZXR3b3JrUmVxdWVzdCoKK3dlYmtpdF9uZXR3b3Jr
X3JlcXVlc3RfbmV3IChjb25zdCBnY2hhciogdXJpKTsKKworV0VCS0lUX0FQSSB2b2lkCit3ZWJr
aXRfbmV0d29ya19yZXF1ZXN0X3NldF91cmkgKFdlYktpdE5ldHdvcmtSZXF1ZXN0KiByZXF1ZXN0
LCBjb25zdCBnY2hhciogdXJpKTsKKworV0VCS0lUX0FQSSBjb25zdCBnY2hhcioKK3dlYmtpdF9u
ZXR3b3JrX3JlcXVlc3RfZ2V0X3VyaSAoV2ViS2l0TmV0d29ya1JlcXVlc3QqIHJlcXVlc3QpOwor
CitHX0VORF9ERUNMUworCisjZW5kaWYKSW5kZXg6IFdlYktpdC9ndGsvV2ViVmlldy93ZWJraXRw
cml2YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0cHJpdmF0
ZS5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0cHJpdmF0ZS5j
cHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsOTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorICogMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAorICogMy4g
IE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMg
b2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJ3
ZWJraXRwcml2YXRlLmgiCisjaW5jbHVkZSAiQ2hyb21lQ2xpZW50R3RrLmgiCisjaW5jbHVkZSAi
RnJhbWVMb2FkZXIuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudEd0ay5oIgorI2luY2x1
ZGUgIk5vdEltcGxlbWVudGVkLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1l
c3BhY2UgV2ViS2l0IHsKK3ZvaWQgYXBwbHkoV2ViS2l0U2V0dGluZ3MqLCBXZWJDb3JlOjpTZXR0
aW5ncyopCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworV2ViS2l0U2V0dGluZ3MqIGNy
ZWF0ZShXZWJDb3JlOjpTZXR0aW5ncyopCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBy
ZXR1cm4gMDsKK30KKworV2ViS2l0V2ViRnJhbWUqIGdldEZyYW1lRnJvbVZpZXcoV2ViS2l0V2Vi
Vmlldyogd2ViVmlldykKK3sKKyAgICByZXR1cm4gd2Via2l0X3dlYl92aWV3X2dldF9tYWluX2Zy
YW1lKHdlYlZpZXcpOworfQorCitXZWJLaXRXZWJWaWV3KiBnZXRWaWV3RnJvbUZyYW1lKFdlYktp
dFdlYkZyYW1lKiBmcmFtZSkKK3sKKyAgICByZXR1cm4gd2Via2l0X3dlYl9mcmFtZV9nZXRfd2Vi
X3ZpZXcoZnJhbWUpOworfQorCitXZWJDb3JlOjpGcmFtZSogY29yZShXZWJLaXRXZWJGcmFtZSog
ZnJhbWUpCit7CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBXZWJL
aXRXZWJGcmFtZVByaXZhdGUqIGZyYW1lX2RhdGEgPSBXRUJLSVRfV0VCX0ZSQU1FX0dFVF9QUklW
QVRFKGZyYW1lKTsKKyAgICByZXR1cm4gZnJhbWVfZGF0YSA/IGZyYW1lX2RhdGEtPmZyYW1lIDog
MDsKK30KKworV2ViS2l0V2ViRnJhbWUqIGtpdChXZWJDb3JlOjpGcmFtZSogY29yZUZyYW1lKQor
eworICAgIGlmICghY29yZUZyYW1lKQorICAgICAgICByZXR1cm4gMDsKKworICAgIEFTU0VSVChj
b3JlRnJhbWUtPmxvYWRlcigpKTsKKyAgICBXZWJLaXQ6OkZyYW1lTG9hZGVyQ2xpZW50KiBjbGll
bnQgPSBzdGF0aWNfY2FzdDxXZWJLaXQ6OkZyYW1lTG9hZGVyQ2xpZW50Kj4oY29yZUZyYW1lLT5s
b2FkZXIoKS0+Y2xpZW50KCkpOworICAgIHJldHVybiBjbGllbnQgPyBjbGllbnQtPndlYkZyYW1l
KCkgOiAwOworfQorCitXZWJDb3JlOjpQYWdlKiBjb3JlKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcp
Cit7CisgICAgaWYgKCF3ZWJWaWV3KQorICAgICAgICByZXR1cm4gMDsKKworICAgIFdlYktpdFdl
YlZpZXdQcml2YXRlKiB3ZWJWaWV3RGF0YSA9IFdFQktJVF9XRUJfVklFV19HRVRfUFJJVkFURSh3
ZWJWaWV3KTsKKyAgICByZXR1cm4gd2ViVmlld0RhdGEgPyB3ZWJWaWV3RGF0YS0+Y29yZVBhZ2Ug
OiAwOworfQorCitXZWJLaXRXZWJWaWV3KiBraXQoV2ViQ29yZTo6UGFnZSogY29yZVBhZ2UpCit7
CisgICAgaWYgKCFjb3JlUGFnZSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBBU1NFUlQod2Vi
Vmlldy0+Y2hyb21lKCkpOworICAgIFdlYktpdDo6Q2hyb21lQ2xpZW50KiBjbGllbnQgPSBzdGF0
aWNfY2FzdDxXZWJLaXQ6OkNocm9tZUNsaWVudCo+KGNvcmVQYWdlLT5jaHJvbWUoKS0+Y2xpZW50
KCkpOworICAgIHJldHVybiBjbGllbnQgPyBjbGllbnQtPndlYlBhZ2UoKSA6IDA7Cit9Cit9Cklu
ZGV4OiBXZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0cHJpdmF0ZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YktpdC9ndGsvV2ViVmlldy93ZWJraXRwcml2YXRlLmgJKHJldmlzaW9uIDApCisrKyBXZWJLaXQv
Z3RrL1dlYlZpZXcvd2Via2l0cHJpdmF0ZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDk2IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLiAKKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLiAKKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlLCBJbmMu
ICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZy
b20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4gCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENP
TlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBX
RUJLSVRfUFJJVkFURV9ICisjZGVmaW5lIFdFQktJVF9QUklWQVRFX0gKKworLyoKKyAqIEludGVy
bmFsIGNsYXNzLiBUaGlzIGNsYXNzIGtub3dzIHRoZSBzaGFyZWQgc2VjcmV0IG9mIFdlYktpdFdl
YkZyYW1lLAorICogV2ViS2l0TmV0d29ya1JlcXVlc3QgYW5kIFdlYktpdFdlYlZpZXcuCisgKiBU
aGV5IGFyZSB1c2luZyBXZWJDb3JlIHdoaWNoIG11c24ndCBiZSBleHBvc2VkIHRvIHRoZSBvdXRl
ciB3b3JsZC4KKyAqLworCisjaW5jbHVkZSAid2Via2l0c2V0dGluZ3MuaCIKKyNpbmNsdWRlICJ3
ZWJraXR3ZWJ2aWV3LmgiCisjaW5jbHVkZSAid2Via2l0d2ViZnJhbWUuaCIKKyNpbmNsdWRlICJ3
ZWJraXRuZXR3b3JrcmVxdWVzdC5oIgorCisjaW5jbHVkZSAiU2V0dGluZ3MuaCIKKyNpbmNsdWRl
ICJQYWdlLmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVu
dC5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKyAgICB2b2lkIGFwcGx5KFdlYktpdFNldHRpbmdz
KixXZWJDb3JlOjpTZXR0aW5ncyopOworICAgIFdlYktpdFNldHRpbmdzKiBjcmVhdGUoV2ViQ29y
ZTo6U2V0dGluZ3MqKTsKKyAgICBXZWJLaXRXZWJGcmFtZSogIGdldEZyYW1lRnJvbVZpZXcoV2Vi
S2l0V2ViVmlldyopOworICAgIFdlYktpdFdlYlZpZXcqIGdldFZpZXdGcm9tRnJhbWUoV2ViS2l0
V2ViRnJhbWUqKTsKKworICAgIFdlYkNvcmU6OkZyYW1lKiBjb3JlKFdlYktpdFdlYkZyYW1lKik7
CisgICAgV2ViS2l0V2ViRnJhbWUqIGtpdChXZWJDb3JlOjpGcmFtZSopOworICAgIFdlYkNvcmU6
OlBhZ2UqIGNvcmUoV2ViS2l0V2ViVmlldyopOworICAgIFdlYktpdFdlYlZpZXcqIGtpdChXZWJD
b3JlOjpQYWdlKik7Cit9CisKK2V4dGVybiAiQyIgeworICAgICNkZWZpbmUgV0VCS0lUX1dFQl9W
SUVXX0dFVF9QUklWQVRFKG9iaikgICAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURSgob2Jq
KSwgV0VCS0lUX1RZUEVfV0VCX1ZJRVcsIFdlYktpdFdlYlZpZXdQcml2YXRlKSkKKyAgICB0eXBl
ZGVmIHN0cnVjdCBfV2ViS2l0V2ViVmlld1ByaXZhdGUgV2ViS2l0V2ViVmlld1ByaXZhdGU7Cisg
ICAgc3RydWN0IF9XZWJLaXRXZWJWaWV3UHJpdmF0ZSB7CisgICAgICAgIFdlYkNvcmU6OlBhZ2Uq
IGNvcmVQYWdlOworICAgICAgICBXZWJDb3JlOjpTZXR0aW5ncyogc2V0dGluZ3M7CisKKyAgICAg
ICAgV2ViS2l0V2ViRnJhbWUqIG1haW5GcmFtZTsKKyAgICAgICAgV2ViQ29yZTo6U3RyaW5nIGFw
cGxpY2F0aW9uTmFtZUZvclVzZXJBZ2VudDsKKyAgICAgICAgV2ViQ29yZTo6U3RyaW5nKiB1c2Vy
QWdlbnQ7CisKKyAgICAgICAgSGFzaFNldDxHdGtXaWRnZXQqPiBjaGlsZHJlbjsKKyAgICAgICAg
Ym9vbCBlZGl0YWJsZTsKKyAgICB9OworCisgICAgI2RlZmluZSBXRUJLSVRfV0VCX0ZSQU1FX0dF
VF9QUklWQVRFKG9iaikgICAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURSgob2JqKSwgV0VC
S0lUX1RZUEVfV0VCX0ZSQU1FLCBXZWJLaXRXZWJGcmFtZVByaXZhdGUpKQorICAgIHR5cGVkZWYg
c3RydWN0IF9XZWJLaXRXZWJGcmFtZVByaXZhdGUgV2ViS2l0V2ViRnJhbWVQcml2YXRlOworICAg
IHN0cnVjdCBfV2ViS2l0V2ViRnJhbWVQcml2YXRlIHsKKyAgICAgICAgV2ViQ29yZTo6RnJhbWUq
IGZyYW1lOworICAgICAgICBXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudCogY2xpZW50OworICAg
ICAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3OworCisgICAgICAgIGdjaGFyKiBuYW1lOworICAg
ICAgICBnY2hhciogdGl0bGU7CisgICAgICAgIGdjaGFyKiBsb2NhdGlvbjsKKyAgICB9OworCisg
ICAgI2RlZmluZSBXRUJLSVRfTkVUV09SS19SRVFVRVNUX0dFVF9QUklWQVRFKG9iaikgICAgKEdf
VFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURSgob2JqKSwgV0VCS0lUX1RZUEVfTkVUV09SS19SRVFV
RVNULCBXZWJLaXROZXR3b3JrUmVxdWVzdFByaXZhdGUpKQorICAgIHR5cGVkZWYgc3RydWN0IF9X
ZWJLaXROZXR3b3JrUmVxdWVzdFByaXZhdGUgV2ViS2l0TmV0d29ya1JlcXVlc3RQcml2YXRlOwor
ICAgIHN0cnVjdCBfV2ViS2l0TmV0d29ya1JlcXVlc3RQcml2YXRlIHsKKyAgICAgICAgZ2NoYXIq
IHVyaTsKKyAgICB9OworCisgICAgV2ViS2l0V2ViRnJhbWUqIHdlYmtpdF93ZWJfZnJhbWVfaW5p
dF93aXRoX3dlYl92aWV3KFdlYktpdFdlYlZpZXcqLCBXZWJDb3JlOjpIVE1MRnJhbWVPd25lckVs
ZW1lbnQqKTsKK30KKworI2VuZGlmCkluZGV4OiBXZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0c2V0
dGluZ3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9ndGsvV2ViVmlldy93ZWJraXRzZXR0aW5n
cy5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0c2V0dGluZ3Mu
Y3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDczIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA3IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyAqIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKKyAqIDMu
ICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVz
IG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAi
d2Via2l0c2V0dGluZ3MuaCIKKworZXh0ZXJuICJDIiB7CitHVHlwZSB3ZWJraXRfd2ViX3NldHRp
bmdzX2dldF90eXBlKHZvaWQpCit7CisgICAgcmV0dXJuIEdUeXBlKCk7Cit9CisKK1dlYktpdFNl
dHRpbmdzKiB3ZWJraXRfd2ViX3NldHRpbmdzX2NvcHkoV2ViS2l0U2V0dGluZ3MqIHNldHRpbmcp
Cit7CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgd2Via2l0X3dlYl9zZXR0aW5nc19mcmVlKFdl
YktpdFNldHRpbmdzKiBzZXR0aW5nKQoreworfQorCitXZWJLaXRTZXR0aW5ncyogd2Via2l0X3dl
Yl9zZXR0aW5nc19nZXRfZ2xvYmFsKHZvaWQpCit7CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQg
d2Via2l0X3dlYl9zZXR0aW5nc19zZXRfZ2xvYmFsIChXZWJLaXRTZXR0aW5ncyogc2V0dGluZykK
K3sKK30KKwordm9pZCB3ZWJraXRfd2ViX3NldHRpbmdzX3NldF9mb250X2ZhbWlseShXZWJLaXRT
ZXR0aW5ncyosIFdlYktpdEZvbnRGYW1pbHkgZmFtaWx5LCBnY2hhciogZmFtaWx5X25hbWUpCit7
Cit9CisKK2NvbnN0IGdjaGFyKiB3ZWJraXRfd2ViX3NldHRpbmdzX2dldF9mb250X2ZhbWlseShX
ZWJLaXRTZXR0aW5ncyosIFdlYktpdEZvbnRGYW1pbHkgZmFtaWx5KQoreworICAgIHJldHVybiAw
OworfQorCit2b2lkIHdlYmtpdF93ZWJfc2V0dGluZ3Nfc2V0X3VzZXJfc3R5bGVfc2hlZXRfbG9j
YXRpb24oV2ViS2l0U2V0dGluZ3MqLCBnY2hhciopCit7Cit9CisKK3ZvaWQgd2Via2l0X3NldF9m
dHBfZGlyZWN0b3J5X3RlbXBsYXRlX3BhdGgoV2ViS2l0U2V0dGluZ3MqLCBnY2hhciopCit7Cit9
Cit9CkluZGV4OiBXZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0c2V0dGluZ3MuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0c2V0dGluZ3MuaAkocmV2aXNpb24gMCkKKysr
IFdlYktpdC9ndGsvV2ViVmlldy93ZWJraXRzZXR0aW5ncy5oCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDExNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBG
cmV5dGhlcgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoK
KyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBB
cHBsZSwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQK
KyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uIAorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
QU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
CisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpZm5kZWYgV0VCS0lUX1NFVFRJTkdTX0gKKyNkZWZpbmUgV0VCS0lUX1NFVFRJTkdTX0gKKwor
I2luY2x1ZGUgPGdsaWIuaD4KKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorCisjaW5jbHVkZSAi
d2Via2l0ZGVmaW5lcy5oIgorCitHX0JFR0lOX0RFQ0xTCisKK3R5cGVkZWYgZW51bSB7CisgICAg
V0VCS0lUX0ZPTlRfRkFNSUxZX1NUQU5EQVJELAorICAgIFdFQktJVF9GT05UX0ZBTUlMWV9GSVhF
RCwKKyAgICBXRUJLSVRfRk9OVF9GQU1JTFlfU0VSSUYsCisgICAgV0VCS0lUX0ZPTlRfRkFNSUxZ
X1NBTlNfU0VSSUYsCisgICAgV0VCS0lUX0ZPTlRfRkFNSUxZX0NVUlNJVkUsCisgICAgV0VCS0lU
X0ZPTlRfRkFNSUxZX0ZBTlRBU1ksCisgICAgV0VCS0lUX0ZPTlRfRkFNSUxZX0xBU1RfRU5UUlkK
K30gV2ViS2l0Rm9udEZhbWlseTsKKwordHlwZWRlZiBlbnVtIHsKKyAgICBXRUJLSVRfRURJVEFC
TEVfTElOS19ERUZBVUxUX0JFSEFWSU9VUiwKKyAgICBXRUJLSVRfRURJVEFCTEVfTElOS19BTFdB
WVNfTElWRSwKKyAgICBXRUJLSVRfRURJVEFCTEVfTElOS19PTkxZX1dJVEhfU0hJRlRfS0VZLAor
ICAgIFdFQktJVF9FRElUQUJMRV9MSU5LX0xJVkVfV0hFTl9OT1RfRk9DVVNFRCwKKyAgICBXRUJL
SVRfRURJVEFCTEVfTElOS19ORVZFUl9MSVZFCit9IFdlYktpdEVkaXRhYmxlTGlua0JlaGF2aW91
cjsKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFNldHRpbmdzIFdlYktpdFNldHRpbmdzOwordHlw
ZWRlZiBzdHJ1Y3QgX1dlYktpdFNldHRpbmdzUHJpdmF0ZSBXZWJLaXRTZXR0aW5nc1ByaXZhdGU7
CisKK3N0cnVjdCBfV2ViS2l0U2V0dGluZ3MgeworICAgIGdjaGFyKiBmb250X25hbWVbV0VCS0lU
X0ZPTlRfRkFNSUxZX0xBU1RfRU5UUlldOworICAgIGdpbnQgICBtaW5pbXVtX2ZvbnRfc2l6ZTsK
KyAgICBnaW50ICAgbWluaW11bV9sb2dpY2FsX2ZvbnRfc2l6ZTsKKyAgICBnaW50ICAgZGVmYXVs
dF9mb250X3NpemU7CisgICAgZ2ludCAgIGRlZmF1bHRfZml4ZWRfZm9udF9zaXplOworICAgIGdi
b29sZWFuIGxvYWRfaW1hZ2VzX2F1dG9tYXRpY2FsbHk7CisgICAgZ2Jvb2xlYW4gaXNfamF2YV9z
Y3JpcHRfZW5hYmxlZDsKKyAgICBnYm9vbGVhbiBqYXZhX3NjcmlwdF9jYW5fb3Blbl93aW5kb3dz
X2F1dG9tYXRpY2FsbHk7CisgICAgZ2Jvb2xlYW4gcGx1Z2luc19lbmFibGVkOworICAgIGdib29s
ZWFuIHByaXZhdGVfYnJvd3Npbmc7CisgICAgZ2NoYXIqIHVzZXJfc3R5bGVfc2hlZXRfbG9jYXRp
b247CisgICAgZ2Jvb2xlYW4gc2hvdWxkX3ByaW50X2JhY2tncm91bmRzOworICAgIGdib29sZWFu
IHRleHRfYXJlYXNfYXJlX3Jlc2l6YWJsZTsKKyAgICBXZWJLaXRFZGl0YWJsZUxpbmtCZWhhdmlv
dXIgZWRpdGFibGVfbGlua19iZWhhdmlvdXI7CisgICAgZ2Jvb2xlYW4gdXNlc193ZWJfdmlld19j
YWNoZTsKKyAgICBnYm9vbGVhbiBzaHJpbmtfc3RhbmRhbG9uZV9pbWFnZXNfdG9fZml0OworICAg
IGdib29sZWFuIHNob3dfdXJpc19pbl90b29sX3RpcHM7CisgICAgZ2NoYXIqIGZ0cF9kaXJlY3Rv
cnlfdGVtcGxhdGVfcGF0aDsKKyAgICBnYm9vbGVhbiBmb3JjZV9mdHBfZGlyZWN0b3J5X2xpc3Rp
bmdzOworICAgIGdib29sZWFuIGRldmVsb3Blcl9leHRyYXNfZW5hYmxlZDsKKworCisgICAgV2Vi
S2l0U2V0dGluZ3NQcml2YXRlICpwcml2YXRlX2RhdGE7Cit9OworCitHVHlwZQord2Via2l0X3dl
Yl9zZXR0aW5nc19nZXRfdHlwZSAodm9pZCk7CisKK1dlYktpdFNldHRpbmdzKgord2Via2l0X3dl
Yl9zZXR0aW5nc19jb3B5IChXZWJLaXRTZXR0aW5ncyogc2V0dGluZyk7CisKK3ZvaWQKK3dlYmtp
dF93ZWJfc2V0dGluZ3NfZnJlZSAoV2ViS2l0U2V0dGluZ3MqIHNldHRpbmcpOworCitXZWJLaXRT
ZXR0aW5ncyoKK3dlYmtpdF93ZWJfc2V0dGluZ3NfZ2V0X2dsb2JhbCAodm9pZCk7CisKK3ZvaWQK
K3dlYmtpdF93ZWJfc2V0dGluZ3Nfc2V0X2dsb2JhbCAoV2ViS2l0U2V0dGluZ3MqIHNldHRpbmcp
OworCit2b2lkCit3ZWJraXRfd2ViX3NldHRpbmdzX3NldF9mb250X2ZhbWlseShXZWJLaXRTZXR0
aW5ncyosIFdlYktpdEZvbnRGYW1pbHkgZmFtaWx5LCBnY2hhciAqZmFtaWx5X25hbWUpOworCitj
b25zdCBnY2hhcioKK3dlYmtpdF93ZWJfc2V0dGluZ3NfZ2V0X2ZvbnRfZmFtaWx5KFdlYktpdFNl
dHRpbmdzKiwgV2ViS2l0Rm9udEZhbWlseSBmYW1pbHkpOworCit2b2lkCit3ZWJraXRfd2ViX3Nl
dHRpbmdzX3NldF91c2VyX3N0eWxlX3NoZWV0X2xvY2F0aW9uKFdlYktpdFNldHRpbmdzKiwgZ2No
YXIqKTsKKwordm9pZAord2Via2l0X3NldF9mdHBfZGlyZWN0b3J5X3RlbXBsYXRlX3BhdGgoV2Vi
S2l0U2V0dGluZ3MqLCBnY2hhciopOworCisKK0dfRU5EX0RFQ0xTCisKKworI2VuZGlmCkluZGV4
OiBXZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0d2ViZnJhbWUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YktpdC9ndGsvV2ViVmlldy93ZWJraXR3ZWJmcmFtZS5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJL
aXQvZ3RrL1dlYlZpZXcvd2Via2l0d2ViZnJhbWUuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDM4OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5
dGhlcgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFscCBUb2tlciA8YWxwQGF0b2tlci5jb20+Cisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLiAKKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLiAKKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlLCBJbmMu
ICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZy
b20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4gCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENP
TlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIndlYmtpdHdlYmZyYW1lLmgiCisjaW5jbHVkZSAid2Via2l0
d2Vidmlldy5oIgorI2luY2x1ZGUgIndlYmtpdHByaXZhdGUuaCIKKworI2luY2x1ZGUgIkNTdHJp
bmcuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xp
ZW50R3RrLmgiCisjaW5jbHVkZSAiRnJhbWVUcmVlLmgiCisjaW5jbHVkZSAiRnJhbWVWaWV3Lmgi
CisjaW5jbHVkZSAiSFRNTEZyYW1lT3duZXJFbGVtZW50LmgiCisjaW5jbHVkZSAia2pzX2JpbmRp
bmcuaCIKKyNpbmNsdWRlICJranNfcHJveHkuaCIKKyNpbmNsdWRlICJranNfd2luZG93LmgiCisK
KyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9BUElDYXN0Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBX
ZWJLaXQ7Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworZXh0ZXJuICJDIiB7CisKK2V4dGVy
biB2b2lkIHdlYmtpdF9tYXJzaGFsX1ZPSURfX1NUUklOR19TVFJJTkcgKEdDbG9zdXJlKiAgICAg
Y2xvc3VyZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdWYWx1ZSogICAgICAgcmV0dXJuX3ZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZ3VpbnQgICAgICAgICBuX3BhcmFtX3ZhbHVlcywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdWYWx1ZSog
cGFyYW1fdmFsdWVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZ3BvaW50ZXIgICAgICBpbnZvY2F0aW9uX2hpbnQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncG9pbnRlciAgICAgIG1hcnNoYWxfZGF0YSk7
CisKK2VudW0geworICAgIENMRUFSRUQsCisgICAgTE9BRF9ET05FLAorICAgIFRJVExFX0NIQU5H
RUQsCisgICAgSE9WRVJJTkdfT1ZFUl9MSU5LLAorICAgIExBU1RfU0lHTkFMCit9OworCitzdGF0
aWMgZ3VpbnQgd2Via2l0X3dlYl9mcmFtZV9zaWduYWxzW0xBU1RfU0lHTkFMXSA9IHsgMCwgfTsK
Kworc3RhdGljIHZvaWQgd2Via2l0X3dlYl9mcmFtZV9yZWFsX3RpdGxlX2NoYW5nZWQoV2ViS2l0
V2ViRnJhbWUqIGZyYW1lLCBnY2hhciogdGl0bGUsIGdjaGFyKiBsb2NhdGlvbik7CisKK0dfREVG
SU5FX1RZUEUoV2ViS2l0V2ViRnJhbWUsIHdlYmtpdF93ZWJfZnJhbWUsIEdfVFlQRV9PQkpFQ1Qp
CisKK3N0YXRpYyB2b2lkIHdlYmtpdF93ZWJfZnJhbWVfZmluYWxpemUoR09iamVjdCogb2JqZWN0
KQoreworICAgIFdlYktpdFdlYkZyYW1lUHJpdmF0ZSogcHJpdmF0ZURhdGEgPSBXRUJLSVRfV0VC
X0ZSQU1FX0dFVF9QUklWQVRFKFdFQktJVF9XRUJfRlJBTUUob2JqZWN0KSk7CisgICAgcHJpdmF0
ZURhdGEtPmZyYW1lLT5sb2FkZXIoKS0+Y2FuY2VsQW5kQ2xlYXIoKTsKKyAgICBnX2ZyZWUocHJp
dmF0ZURhdGEtPm5hbWUpOworICAgIGdfZnJlZShwcml2YXRlRGF0YS0+dGl0bGUpOworICAgIGdf
ZnJlZShwcml2YXRlRGF0YS0+bG9jYXRpb24pOworICAgIGRlbGV0ZSBwcml2YXRlRGF0YS0+ZnJh
bWU7CisKKyAgICBHX09CSkVDVF9DTEFTUyh3ZWJraXRfd2ViX2ZyYW1lX3BhcmVudF9jbGFzcykt
PmZpbmFsaXplKG9iamVjdCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF93ZWJfZnJhbWVfY2xh
c3NfaW5pdChXZWJLaXRXZWJGcmFtZUNsYXNzKiBmcmFtZUNsYXNzKQoreworICAgIGdfdHlwZV9j
bGFzc19hZGRfcHJpdmF0ZShmcmFtZUNsYXNzLCBzaXplb2YoV2ViS2l0V2ViRnJhbWVQcml2YXRl
KSk7CisKKyAgICAvKgorICAgICAqIHNpZ25hbHMKKyAgICAgKi8KKyAgICB3ZWJraXRfd2ViX2Zy
YW1lX3NpZ25hbHNbQ0xFQVJFRF0gPSBnX3NpZ25hbF9uZXcoImNsZWFyZWQiLAorICAgICAgICAg
ICAgR19UWVBFX0ZST01fQ0xBU1MoZnJhbWVDbGFzcyksCisgICAgICAgICAgICAoR1NpZ25hbEZs
YWdzKShHX1NJR05BTF9SVU5fTEFTVCB8IEdfU0lHTkFMX0FDVElPTiksCisgICAgICAgICAgICAw
LAorICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICBnX2Nj
bG9zdXJlX21hcnNoYWxfVk9JRF9fVk9JRCwKKyAgICAgICAgICAgIEdfVFlQRV9OT05FLCAwKTsK
KworICAgIHdlYmtpdF93ZWJfZnJhbWVfc2lnbmFsc1tMT0FEX0RPTkVdID0gZ19zaWduYWxfbmV3
KCJsb2FkX2RvbmUiLAorICAgICAgICAgICAgR19UWVBFX0ZST01fQ0xBU1MoZnJhbWVDbGFzcyks
CisgICAgICAgICAgICAoR1NpZ25hbEZsYWdzKShHX1NJR05BTF9SVU5fTEFTVCB8IEdfU0lHTkFM
X0FDVElPTiksCisgICAgICAgICAgICAwLAorICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAg
IE5VTEwsCisgICAgICAgICAgICBnX2NjbG9zdXJlX21hcnNoYWxfVk9JRF9fQk9PTEVBTiwKKyAg
ICAgICAgICAgIEdfVFlQRV9OT05FLCAxLAorICAgICAgICAgICAgR19UWVBFX0JPT0xFQU4pOwor
CisgICAgd2Via2l0X3dlYl9mcmFtZV9zaWduYWxzW1RJVExFX0NIQU5HRURdID0gZ19zaWduYWxf
bmV3KCJ0aXRsZV9jaGFuZ2VkIiwKKyAgICAgICAgICAgIEdfVFlQRV9GUk9NX0NMQVNTKGZyYW1l
Q2xhc3MpLAorICAgICAgICAgICAgKEdTaWduYWxGbGFncykoR19TSUdOQUxfUlVOX0xBU1QgfCBH
X1NJR05BTF9BQ1RJT04pLAorICAgICAgICAgICAgR19TVFJVQ1RfT0ZGU0VUKFdlYktpdFdlYkZy
YW1lQ2xhc3MsIHRpdGxlX2NoYW5nZWQpLAorICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAg
IE5VTEwsCisgICAgICAgICAgICB3ZWJraXRfbWFyc2hhbF9WT0lEX19TVFJJTkdfU1RSSU5HLAor
ICAgICAgICAgICAgR19UWVBFX05PTkUsIDIsCisgICAgICAgICAgICBHX1RZUEVfU1RSSU5HLCBH
X1RZUEVfU1RSSU5HKTsKKworICAgIHdlYmtpdF93ZWJfZnJhbWVfc2lnbmFsc1tIT1ZFUklOR19P
VkVSX0xJTktdID0gZ19zaWduYWxfbmV3KCJob3ZlcmluZ19vdmVyX2xpbmsiLAorICAgICAgICAg
ICAgR19UWVBFX0ZST01fQ0xBU1MoZnJhbWVDbGFzcyksCisgICAgICAgICAgICAoR1NpZ25hbEZs
YWdzKShHX1NJR05BTF9SVU5fTEFTVCB8IEdfU0lHTkFMX0FDVElPTiksCisgICAgICAgICAgICAw
LAorICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICB3ZWJr
aXRfbWFyc2hhbF9WT0lEX19TVFJJTkdfU1RSSU5HLAorICAgICAgICAgICAgR19UWVBFX05PTkUs
IDIsCisgICAgICAgICAgICBHX1RZUEVfU1RSSU5HLCBHX1RZUEVfU1RSSU5HKTsKKworICAgIGZy
YW1lQ2xhc3MtPnRpdGxlX2NoYW5nZWQgPSB3ZWJraXRfd2ViX2ZyYW1lX3JlYWxfdGl0bGVfY2hh
bmdlZDsKKworICAgIC8qCisgICAgICogaW1wbGVtZW50YXRpb25zIG9mIHZpcnR1YWwgbWV0aG9k
cworICAgICAqLworICAgIEdfT0JKRUNUX0NMQVNTKGZyYW1lQ2xhc3MpLT5maW5hbGl6ZSA9IHdl
YmtpdF93ZWJfZnJhbWVfZmluYWxpemU7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF93ZWJfZnJh
bWVfcmVhbF90aXRsZV9jaGFuZ2VkKFdlYktpdFdlYkZyYW1lKiBmcmFtZSwgZ2NoYXIqIHRpdGxl
LCBnY2hhciogbG9jYXRpb24pCit7CisgICAgV2ViS2l0V2ViRnJhbWVQcml2YXRlKiBmcmFtZURh
dGEgPSBXRUJLSVRfV0VCX0ZSQU1FX0dFVF9QUklWQVRFKGZyYW1lKTsKKyAgICBnX2ZyZWUoZnJh
bWVEYXRhLT50aXRsZSk7CisgICAgZ19mcmVlKGZyYW1lRGF0YS0+bG9jYXRpb24pOworICAgIGZy
YW1lRGF0YS0+dGl0bGUgPSBnX3N0cmR1cCh0aXRsZSk7CisgICAgZnJhbWVEYXRhLT5sb2NhdGlv
biA9IGdfc3RyZHVwKGxvY2F0aW9uKTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X3dlYl9mcmFt
ZV9pbml0KFdlYktpdFdlYkZyYW1lKiBmcmFtZSkKK3sKKyAgICAvLyBUT0RPOiBNb3ZlIGNvbnN0
cnVjdG9yIGNvZGUgaGVyZS4KK30KKworLyoqCisgKiB3ZWJraXRfd2ViX2ZyYW1lX25ldzoKKyAq
IEB3ZWJfdmlldzogdGhlIGNvbnRyb2xsaW5nICNXZWJLaXRXZWJWaWV3CisgKgorICogQ3JlYXRl
cyBhIG5ldyAjV2ViS2l0V2ViRnJhbWUgaW5pdGlhbGl6ZWQgd2l0aCBhIGNvbnRyb2xsaW5nICNX
ZWJLaXRXZWJWaWV3LgorICoKKyAqIFJldHVybnM6IGEgbmV3ICNXZWJLaXRXZWJGcmFtZQorICoq
LworV2ViS2l0V2ViRnJhbWUqIHdlYmtpdF93ZWJfZnJhbWVfbmV3KFdlYktpdFdlYlZpZXcqIHdl
YlZpZXcpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9WSUVXKHdl
YlZpZXcpLCBOVUxMKTsKKworICAgIFdlYktpdFdlYkZyYW1lKiBmcmFtZSA9IFdFQktJVF9XRUJf
RlJBTUUoZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX1dFQl9GUkFNRSwgTlVMTCkpOworICAgIFdl
YktpdFdlYkZyYW1lUHJpdmF0ZSogZnJhbWVEYXRhID0gV0VCS0lUX1dFQl9GUkFNRV9HRVRfUFJJ
VkFURShmcmFtZSk7CisgICAgV2ViS2l0V2ViVmlld1ByaXZhdGUqIHdlYlZpZXdEYXRhID0gV0VC
S0lUX1dFQl9WSUVXX0dFVF9QUklWQVRFKHdlYlZpZXcpOworCisgICAgZnJhbWVEYXRhLT5jbGll
bnQgPSBuZXcgV2ViS2l0OjpGcmFtZUxvYWRlckNsaWVudChmcmFtZSk7CisgICAgZnJhbWVEYXRh
LT5mcmFtZSA9IG5ldyBGcmFtZSh3ZWJWaWV3RGF0YS0+Y29yZVBhZ2UsIDAsIGZyYW1lRGF0YS0+
Y2xpZW50KTsKKworICAgIEZyYW1lVmlldyogZnJhbWVWaWV3ID0gbmV3IEZyYW1lVmlldyhmcmFt
ZURhdGEtPmZyYW1lKTsKKyAgICBmcmFtZVZpZXctPnNldENvbnRhaW5pbmdXaW5kb3coR1RLX0NP
TlRBSU5FUih3ZWJWaWV3KSk7CisgICAgZnJhbWVWaWV3LT5zZXRHdGtBZGp1c3RtZW50cyhHVEtf
QURKVVNUTUVOVChndGtfYWRqdXN0bWVudF9uZXcoMC4wLCAwLjAsIDAuMCwgMC4wLCAwLjAsIDAu
MCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1RLX0FESlVTVE1FTlQoZ3Rr
X2FkanVzdG1lbnRfbmV3KDAuMCwgMC4wLCAwLjAsIDAuMCwgMC4wLCAwLjApKSk7CisgICAgZnJh
bWVEYXRhLT5mcmFtZS0+c2V0VmlldyhmcmFtZVZpZXcpOworICAgIGZyYW1lRGF0YS0+ZnJhbWUt
PmluaXQoKTsKKyAgICBmcmFtZURhdGEtPndlYlZpZXcgPSB3ZWJWaWV3OworICAgIGZyYW1lRGF0
YS0+bmFtZSA9IDA7CisgICAgZnJhbWVEYXRhLT50aXRsZSA9IDA7CisgICAgZnJhbWVEYXRhLT5s
b2NhdGlvbiA9IDA7CisKKyAgICByZXR1cm4gZnJhbWU7Cit9CisKK1dlYktpdFdlYkZyYW1lKiB3
ZWJraXRfd2ViX2ZyYW1lX2luaXRfd2l0aF93ZWJfdmlldyhXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3
LCBIVE1MRnJhbWVPd25lckVsZW1lbnQqIGVsZW1lbnQpCit7CisgICAgV2ViS2l0V2ViRnJhbWUq
IGZyYW1lID0gV0VCS0lUX1dFQl9GUkFNRShnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfV0VCX0ZS
QU1FLCBOVUxMKSk7CisgICAgV2ViS2l0V2ViRnJhbWVQcml2YXRlKiBmcmFtZURhdGEgPSBXRUJL
SVRfV0VCX0ZSQU1FX0dFVF9QUklWQVRFKGZyYW1lKTsKKyAgICBXZWJLaXRXZWJWaWV3UHJpdmF0
ZSogd2ViVmlld0RhdGEgPSBXRUJLSVRfV0VCX1ZJRVdfR0VUX1BSSVZBVEUod2ViVmlldyk7CisK
KyAgICBmcmFtZURhdGEtPmNsaWVudCA9IG5ldyBXZWJLaXQ6OkZyYW1lTG9hZGVyQ2xpZW50KGZy
YW1lKTsKKyAgICBmcmFtZURhdGEtPmZyYW1lID0gbmV3IEZyYW1lKHdlYlZpZXdEYXRhLT5jb3Jl
UGFnZSwgZWxlbWVudCwgZnJhbWVEYXRhLT5jbGllbnQpOworCisgICAgRnJhbWVWaWV3KiBmcmFt
ZVZpZXcgPSBuZXcgRnJhbWVWaWV3KGZyYW1lRGF0YS0+ZnJhbWUpOworICAgIGZyYW1lVmlldy0+
c2V0Q29udGFpbmluZ1dpbmRvdyhHVEtfQ09OVEFJTkVSKHdlYlZpZXcpKTsKKyAgICBmcmFtZURh
dGEtPmZyYW1lLT5zZXRWaWV3KGZyYW1lVmlldyk7CisgICAgZnJhbWVWaWV3LT5kZXJlZigpOwor
ICAgIGZyYW1lRGF0YS0+ZnJhbWUtPmluaXQoKTsKKyAgICBmcmFtZURhdGEtPndlYlZpZXcgPSB3
ZWJWaWV3OworCisgICAgcmV0dXJuIGZyYW1lOworfQorCitjb25zdCBnY2hhciogd2Via2l0X3dl
Yl9mcmFtZV9nZXRfdGl0bGUoV2ViS2l0V2ViRnJhbWUqIGZyYW1lKQoreworICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKFdFQktJVF9JU19XRUJfRlJBTUUoZnJhbWUpLCBOVUxMKTsKKworICAgIFdl
YktpdFdlYkZyYW1lUHJpdmF0ZSogZnJhbWVEYXRhID0gV0VCS0lUX1dFQl9GUkFNRV9HRVRfUFJJ
VkFURShmcmFtZSk7CisgICAgcmV0dXJuIGZyYW1lRGF0YS0+dGl0bGU7Cit9CisKK2NvbnN0IGdj
aGFyKiB3ZWJraXRfd2ViX2ZyYW1lX2dldF9sb2NhdGlvbihXZWJLaXRXZWJGcmFtZSogZnJhbWUp
Cit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9GUkFNRShmcmFtZSks
IE5VTEwpOworCisgICAgV2ViS2l0V2ViRnJhbWVQcml2YXRlKiBmcmFtZURhdGEgPSBXRUJLSVRf
V0VCX0ZSQU1FX0dFVF9QUklWQVRFKGZyYW1lKTsKKyAgICByZXR1cm4gZnJhbWVEYXRhLT5sb2Nh
dGlvbjsKK30KKworLyoqCisgKiB3ZWJraXRfd2ViX2ZyYW1lX2dldF93ZWJfdmlldzoKKyAqIEBm
cmFtZTogYSAjV2ViS2l0V2ViRnJhbWUKKyAqCisgKiBSZXR1cm5zIHRoZSAjV2ViS2l0V2ViVmll
dyB0aGF0IG1hbmFnZXMgdGhpcyAjV2ViS2l0V2ViRnJhbWUuCisgKgorICogVGhlICNXZWJLaXRX
ZWJWaWV3IHJldHVybmVkIG1hbmFnZXMgdGhlIGVudGlyZSBoaWVyYXJjaHkgb2YgI1dlYktpdFdl
YkZyYW1lCisgKiBvYmplY3RzIHRoYXQgY29udGFpbnMgQGZyYW1lLgorICoKKyAqIFJldHVybiB2
YWx1ZTogdGhlICNXZWJLaXRXZWJWaWV3IHRoYXQgbWFuYWdlcyBAZnJhbWUKKyAqLworV2ViS2l0
V2ViVmlldyogd2Via2l0X3dlYl9mcmFtZV9nZXRfd2ViX3ZpZXcoV2ViS2l0V2ViRnJhbWUqIGZy
YW1lKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19XRUJfRlJBTUUoZnJh
bWUpLCBOVUxMKTsKKworICAgIFdlYktpdFdlYkZyYW1lUHJpdmF0ZSogZnJhbWVEYXRhID0gV0VC
S0lUX1dFQl9GUkFNRV9HRVRfUFJJVkFURShmcmFtZSk7CisgICAgcmV0dXJuIGZyYW1lRGF0YS0+
d2ViVmlldzsKK30KKworLyoqCisgKiB3ZWJraXRfd2ViX2ZyYW1lX2dldF9uYW1lOgorICogQGZy
YW1lOiBhICNXZWJLaXRXZWJGcmFtZQorICoKKyAqIFJldHVybnMgdGhlIEBmcmFtZSdzIG5hbWUK
KyAqCisgKiBSZXR1cm4gdmFsdWU6IHRoZSBuYW1lIG9mIEBmcmFtZQorICovCitjb25zdCBnY2hh
ciogd2Via2l0X3dlYl9mcmFtZV9nZXRfbmFtZShXZWJLaXRXZWJGcmFtZSogZnJhbWUpCit7Cisg
ICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9GUkFNRShmcmFtZSksIE5VTEwp
OworCisgICAgV2ViS2l0V2ViRnJhbWVQcml2YXRlKiBmcmFtZURhdGEgPSBXRUJLSVRfV0VCX0ZS
QU1FX0dFVF9QUklWQVRFKGZyYW1lKTsKKworICAgIGlmIChmcmFtZURhdGEtPm5hbWUpCisgICAg
ICAgIHJldHVybiBmcmFtZURhdGEtPm5hbWU7CisKKyAgICBGcmFtZSogY29yZUZyYW1lID0gY29y
ZShmcmFtZSk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoY29yZUZyYW1lLCBOVUxMKTsKKwor
ICAgIFN0cmluZyBzdHJpbmcgPSBjb3JlRnJhbWUtPnRyZWUoKS0+bmFtZSgpOworICAgIGZyYW1l
RGF0YS0+bmFtZSA9IGdfc3RyZHVwKHN0cmluZy51dGY4KCkuZGF0YSgpKTsKKworICAgIHJldHVy
biBmcmFtZURhdGEtPm5hbWU7Cit9CisKKy8qKgorICogd2Via2l0X3dlYl9mcmFtZV9nZXRfcGFy
ZW50OgorICogQGZyYW1lOiBhICNXZWJLaXRXZWJGcmFtZQorICoKKyAqIFJldHVybnMgdGhlIEBm
cmFtZSdzIHBhcmVudCBmcmFtZSwgb3IgJU5VTEwgaWYgaXQgaGFzIG5vbmUuCisgKgorICogUmV0
dXJuIHZhbHVlOiB0aGUgcGFyZW50ICNXZWJLaXRXZWJGcmFtZSBvciAlTlVMTCBpbiBjYXNlIHRo
ZXJlIGlzIG5vbmUKKyAqLworV2ViS2l0V2ViRnJhbWUqIHdlYmtpdF93ZWJfZnJhbWVfZ2V0X3Bh
cmVudChXZWJLaXRXZWJGcmFtZSogZnJhbWUpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
V0VCS0lUX0lTX1dFQl9GUkFNRShmcmFtZSksIE5VTEwpOworCisgICAgRnJhbWUqIGNvcmVGcmFt
ZSA9IGNvcmUoZnJhbWUpOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGNvcmVGcmFtZSwgTlVM
TCk7CisKKyAgICByZXR1cm4ga2l0KGNvcmVGcmFtZS0+dHJlZSgpLT5wYXJlbnQoKSk7Cit9CisK
Ky8qKgorICogd2Via2l0X3dlYl9mcmFtZV9sb2FkX3JlcXVlc3Q6CisgKiBAZnJhbWU6IGEgI1dl
YktpdFdlYkZyYW1lCisgKiBAcmVxdWVzdDogYSAjV2ViS2l0TmV0d29ya1JlcXVlc3QKKyAqCisg
KiBDb25uZWN0cyB0byBhIGdpdmVuIFVSSSBieSBpbml0aWF0aW5nIGFuIGFzeW5jaHJvbm91cyBj
bGllbnQgcmVxdWVzdC4KKyAqCisgKiBDcmVhdGVzIGEgcHJvdmlzaW9uYWwgZGF0YSBzb3VyY2Ug
dGhhdCB3aWxsIHRyYW5zaXRpb24gdG8gYSBjb21taXR0ZWQgZGF0YQorICogc291cmNlIG9uY2Ug
YW55IGRhdGEgaGFzIGJlZW4gcmVjZWl2ZWQuIFVzZSB3ZWJraXRfd2ViX2ZyYW1lX3N0b3BfbG9h
ZGluZygpIHRvCisgKiBzdG9wIHRoZSBsb2FkLiBUaGlzIGZ1bmN0aW9uIGlzIHR5cGljYWxseSBp
bnZva2VkIG9uIHRoZSBtYWluIGZyYW1lLgorICovCit2b2lkIHdlYmtpdF93ZWJfZnJhbWVfbG9h
ZF9yZXF1ZXN0KFdlYktpdFdlYkZyYW1lKiBmcmFtZSwgV2ViS2l0TmV0d29ya1JlcXVlc3QqIHJl
cXVlc3QpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfV0VCX0ZSQU1FKGZyYW1l
KSk7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfTkVUV09SS19SRVFVRVNUKHJlcXVl
c3QpKTsKKworICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKGZyYW1lKTsKKyAgICBnX3JldHVy
bl9pZl9mYWlsKGNvcmVGcmFtZSk7CisKKyAgICAvLyBUT0RPOiBVc2UgdGhlIFJlc291cmNlUmVx
dWVzdCBjYXJyaWVkIGJ5IFdlYktpdE5ldHdvcmtSZXF1ZXN0IHdoZW4gaXQgZ2V0cyBpbXBsZW1l
bnRlZC4KKyAgICBEZXByZWNhdGVkU3RyaW5nIHN0cmluZyA9IERlcHJlY2F0ZWRTdHJpbmc6OmZy
b21VdGY4KHdlYmtpdF9uZXR3b3JrX3JlcXVlc3RfZ2V0X3VyaShyZXF1ZXN0KSk7CisgICAgY29y
ZUZyYW1lLT5sb2FkZXIoKS0+bG9hZChSZXNvdXJjZVJlcXVlc3QoS1VSTChzdHJpbmcpKSk7Cit9
CisKKy8qKgorICogd2Via2l0X3dlYl9mcmFtZV9zdG9wX2xvYWRpbmc6CisgKiBAZnJhbWU6IGEg
I1dlYktpdFdlYkZyYW1lCisgKgorICogU3RvcHMgYW55IHBlbmRpbmcgbG9hZHMgb24gQGZyYW1l
J3MgZGF0YSBzb3VyY2UsIGFuZCB0aG9zZSBvZiBpdHMgY2hpbGRyZW4uCisgKi8KK3ZvaWQgd2Vi
a2l0X3dlYl9mcmFtZV9zdG9wX2xvYWRpbmcoV2ViS2l0V2ViRnJhbWUqIGZyYW1lKQoreworICAg
IGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9GUkFNRShmcmFtZSkpOworCisgICAgRnJh
bWUqIGNvcmVGcmFtZSA9IGNvcmUoZnJhbWUpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoY29yZUZy
YW1lKTsKKworICAgIGNvcmVGcmFtZS0+bG9hZGVyKCktPnN0b3BBbGxMb2FkZXJzKCk7Cit9CisK
Ky8qKgorICogd2Via2l0X3dlYl9mcmFtZV9yZWxvYWQ6CisgKiBAZnJhbWU6IGEgI1dlYktpdFdl
YkZyYW1lCisgKgorICogUmVsb2FkcyB0aGUgaW5pdGlhbCByZXF1ZXN0LgorICovCit2b2lkIHdl
YmtpdF93ZWJfZnJhbWVfcmVsb2FkKFdlYktpdFdlYkZyYW1lKiBmcmFtZSkKK3sKKyAgICBnX3Jl
dHVybl9pZl9mYWlsKFdFQktJVF9JU19XRUJfRlJBTUUoZnJhbWUpKTsKKworICAgIEZyYW1lKiBj
b3JlRnJhbWUgPSBjb3JlKGZyYW1lKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKGNvcmVGcmFtZSk7
CisKKyAgICBjb3JlRnJhbWUtPmxvYWRlcigpLT5yZWxvYWQoKTsKK30KKworLyoqCisgKiB3ZWJr
aXRfd2ViX2ZyYW1lX2ZpbmRfZnJhbWU6CisgKiBAZnJhbWU6IGEgI1dlYktpdFdlYkZyYW1lCisg
KiBAbmFtZTogdGhlIG5hbWUgb2YgdGhlIGZyYW1lIHRvIGJlIGZvdW5kCisgKgorICogRm9yIHBy
ZS1kZWZpbmVkIG5hbWVzLCByZXR1cm5zIEBmcmFtZSBpZiBAbmFtZSBpcyAiX3NlbGYiIG9yICJf
Y3VycmVudCIsCisgKiByZXR1cm5zIEBmcmFtZSdzIHBhcmVudCBmcmFtZSBpZiBAbmFtZSBpcyAi
X3BhcmVudCIsIGFuZCByZXR1cm5zIHRoZSBtYWluCisgKiBmcmFtZSBpZiBAbmFtZSBpcyAiX3Rv
cCIuIEFsc28gcmV0dXJucyBAZnJhbWUgaWYgaXQgaXMgdGhlIG1haW4gZnJhbWUgYW5kCisgKiBA
bmFtZSBpcyBlaXRoZXIgIl9wYXJlbnQiIG9yICJfdG9wIi4gRm9yIG90aGVyIG5hbWVzLCB0aGlz
IGZ1bmN0aW9uIHJldHVybnMKKyAqIHRoZSBmaXJzdCBmcmFtZSB0aGF0IG1hdGNoZXMgQG5hbWUu
IFRoaXMgZnVuY3Rpb24gc2VhcmNoZXMgQGZyYW1lIGFuZCBpdHMKKyAqIGRlc2NlbmRlbnRzIGZp
cnN0LCB0aGVuIEBmcmFtZSdzIHBhcmVudCBhbmQgaXRzIGNoaWxkcmVuIG1vdmluZyB1cCB0aGUK
KyAqIGhpZXJhcmNoeSB1bnRpbCBhIG1hdGNoIGlzIGZvdW5kLiBJZiBubyBtYXRjaCBpcyBmb3Vu
ZCBpbiBAZnJhbWUncworICogaGllcmFyY2h5LCB0aGlzIGZ1bmN0aW9uIHdpbGwgc2VhcmNoIGZv
ciBhIG1hdGNoaW5nIGZyYW1lIGluIG90aGVyIG1haW4KKyAqIGZyYW1lIGhpZXJhcmNoaWVzLiBS
ZXR1cm5zICVOVUxMIGlmIG5vIG1hdGNoIGlzIGZvdW5kLgorICoKKyAqIFJldHVybiB2YWx1ZTog
dGhlIGZvdW5kICNXZWJLaXRXZWJGcmFtZSBvciAlTlVMTCBpbiBjYXNlIG5vbmUgaXMgZm91bmQK
KyAqLworV2ViS2l0V2ViRnJhbWUqIHdlYmtpdF93ZWJfZnJhbWVfZmluZF9mcmFtZShXZWJLaXRX
ZWJGcmFtZSogZnJhbWUsIGNvbnN0IGdjaGFyKiBuYW1lKQoreworICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKFdFQktJVF9JU19XRUJfRlJBTUUoZnJhbWUpLCBOVUxMKTsKKyAgICBnX3JldHVybl92
YWxfaWZfZmFpbChuYW1lLCBOVUxMKTsKKworICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKGZy
YW1lKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChjb3JlRnJhbWUsIE5VTEwpOworCisgICAg
U3RyaW5nIG5hbWVTdHJpbmcgPSBTdHJpbmc6OmZyb21VVEY4KG5hbWUpOworICAgIHJldHVybiBr
aXQoY29yZUZyYW1lLT50cmVlKCktPmZpbmQoQXRvbWljU3RyaW5nKG5hbWVTdHJpbmcpKSk7Cit9
CisKKy8qKgorICogd2Via2l0X3dlYl9mcmFtZV9nZXRfZ2xvYmFsX2NvbnRleHQ6CisgKiBAZnJh
bWU6IGEgI1dlYktpdFdlYkZyYW1lCisgKgorICogR2V0cyB0aGUgZ2xvYmFsIEphdmFTY3JpcHQg
ZXhlY3V0aW9uIGNvbnRleHQuIFVzZSB0aGlzIGZ1bmN0aW9uIHRvIGJyaWRnZQorICogYmV0d2Vl
biB0aGUgV2ViS2l0IGFuZCBKYXZhU2NyaXB0Q29yZSBBUElzLgorICoKKyAqIFJldHVybiB2YWx1
ZTogdGhlIGdsb2JhbCBKYXZhU2NyaXB0IGNvbnRleHQKKyAqLworSlNHbG9iYWxDb250ZXh0UmVm
IHdlYmtpdF93ZWJfZnJhbWVfZ2V0X2dsb2JhbF9jb250ZXh0KFdlYktpdFdlYkZyYW1lKiBmcmFt
ZSkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfV0VCX0ZSQU1FKGZyYW1l
KSwgTlVMTCk7CisKKyAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShmcmFtZSk7CisgICAgZ19y
ZXR1cm5fdmFsX2lmX2ZhaWwoY29yZUZyYW1lLCBOVUxMKTsKKworICAgIHJldHVybiB0b0dsb2Jh
bFJlZihjb3JlRnJhbWUtPnNjcmlwdFByb3h5KCktPmludGVycHJldGVyKCktPmdsb2JhbEV4ZWMo
KSk7Cit9CisKK30KSW5kZXg6IFdlYktpdC9ndGsvV2ViVmlldy93ZWJraXR3ZWJmcmFtZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYktpdC9ndGsvV2ViVmlldy93ZWJraXR3ZWJmcmFtZS5oCShyZXZpc2lv
biAwKQorKysgV2ViS2l0L2d0ay9XZWJWaWV3L3dlYmtpdHdlYmZyYW1lLmgJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsMTA1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5z
IFBldGVyIEZyZXl0aGVyCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQWxwIFRva2VyIDxhbHBAYXRv
a2VyLmNvbT4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2Yg
QXBwbGUsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
CisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLiAKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICog
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaWZuZGVmIFdFQktJVF9XRUJfRlJBTUVfSAorI2RlZmluZSBXRUJLSVRfV0VCX0ZSQU1FX0gK
KworI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8Z2RrL2dkay5oPgorCisjaW5j
bHVkZSAid2Via2l0ZGVmaW5lcy5oIgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lU
X1RZUEVfV0VCX0ZSQU1FICAgICAgICAgICAgKHdlYmtpdF93ZWJfZnJhbWVfZ2V0X3R5cGUoKSkK
KyNkZWZpbmUgV0VCS0lUX1dFQl9GUkFNRShvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19J
TlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfVFlQRV9XRUJfRlJBTUUsIFdlYktpdFdlYkZyYW1l
KSkKKyNkZWZpbmUgV0VCS0lUX1dFQl9GUkFNRV9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVD
S19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfVFlQRV9XRUJfRlJBTUUsIFdlYktpdFdlYkZy
YW1lQ2xhc3MpKQorI2RlZmluZSBXRUJLSVRfSVNfV0VCX0ZSQU1FKG9iaikgICAgICAgICAoR19U
WVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9UWVBFX1dFQl9GUkFNRSkpCisj
ZGVmaW5lIFdFQktJVF9JU19XRUJfRlJBTUVfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xB
U1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX1RZUEVfV0VCX0ZSQU1FKSkKKyNkZWZpbmUgV0VCS0lU
X1dFQl9GUkFNRV9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9i
aiksICBXRUJLSVRfVFlQRV9XRUJfRlJBTUUsIFdlYktpdFdlYkZyYW1lQ2xhc3MpKQorCisKK3N0
cnVjdCBfV2ViS2l0V2ViRnJhbWUgeworICAgIEdPYmplY3QgcGFyZW50OworfTsKKworc3RydWN0
IF9XZWJLaXRXZWJGcmFtZUNsYXNzIHsKKyAgICBHT2JqZWN0Q2xhc3MgcGFyZW50OworCisgICAg
dm9pZCAoKnRpdGxlX2NoYW5nZWQpIChXZWJLaXRXZWJGcmFtZSogZnJhbWUsIGdjaGFyKiB0aXRs
ZSwgZ2NoYXIqIGxvY2F0aW9uKTsKKworICAgIC8qCisgICAgICogcHJvdGVjdGVkIHZpcnR1YWwg
bWV0aG9kcworICAgICAqLworICAgIHZvaWQgKCptb3VzZV9tb3ZlX2V2ZW50KSAgKFdlYktpdFdl
YkZyYW1lKiBmcmFtZSwgR2RrRXZlbnQqIG1vdmVfZXZlbnQpOworICAgIHZvaWQgKCptb3VzZV9w
cmVzc19ldmVudCkgKFdlYktpdFdlYkZyYW1lKiBmcmFtZSwgR2RrRXZlbnQqIHByZXNzX2V2ZW50
KTsKKyAgICB2b2lkICgqbW91c2VfcmVsZWFzZV9ldmVudCkgKFdlYktpdFdlYkZyYW1lKiBmcmFt
ZSwgR2RrRXZlbnQqIG1vdXNlX3JlbGVhc2VfZXZlbnQpOworICAgIHZvaWQgKCptb3VzZV9kb3Vi
bGVfY2xpY2tfZXZlbnQpIChXZWJLaXRXZWJGcmFtZSogZnJhbWUsIEdka0V2ZW50KiBkb3VibGVf
Y2xpY2tfZXZlbnQpOworICAgIHZvaWQgKCptb3VzZV93aGVlbF9ldmVudCkgKFdlYktpdFdlYkZy
YW1lKiBmcmFtZSwgR2RrRXZlbnQqIHdoZWVsX2V2ZW50KTsKK307CisKK1dFQktJVF9BUEkgR1R5
cGUKK3dlYmtpdF93ZWJfZnJhbWVfZ2V0X3R5cGUgKHZvaWQpOworCitXRUJLSVRfQVBJIFdlYktp
dFdlYkZyYW1lKgord2Via2l0X3dlYl9mcmFtZV9uZXcgKFdlYktpdFdlYlZpZXcqIHdlYl92aWV3
KTsKKworV0VCS0lUX0FQSSBXZWJLaXRXZWJWaWV3Kgord2Via2l0X3dlYl9mcmFtZV9nZXRfd2Vi
X3ZpZXcgKFdlYktpdFdlYkZyYW1lKiBmcmFtZSk7CisKK1dFQktJVF9BUEkgY29uc3QgZ2NoYXIq
Cit3ZWJraXRfd2ViX2ZyYW1lX2dldF9uYW1lIChXZWJLaXRXZWJGcmFtZSogZnJhbWUpOworCitX
RUJLSVRfQVBJIGNvbnN0IGdjaGFyKgord2Via2l0X3dlYl9mcmFtZV9nZXRfdGl0bGUgKFdlYktp
dFdlYkZyYW1lKiBmcmFtZSk7CisKK1dFQktJVF9BUEkgY29uc3QgZ2NoYXIqCit3ZWJraXRfd2Vi
X2ZyYW1lX2dldF9sb2NhdGlvbiAoV2ViS2l0V2ViRnJhbWUqIGZyYW1lKTsKKworV0VCS0lUX0FQ
SSBXZWJLaXRXZWJGcmFtZSoKK3dlYmtpdF93ZWJfZnJhbWVfZ2V0X3BhcmVudCAoV2ViS2l0V2Vi
RnJhbWUqIGZyYW1lKTsKKworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfd2ViX2ZyYW1lX2xvYWRf
cmVxdWVzdCAoV2ViS2l0V2ViRnJhbWUqIGZyYW1lLCBXZWJLaXROZXR3b3JrUmVxdWVzdCogcmVx
dWVzdCk7CisKK1dFQktJVF9BUEkgdm9pZAord2Via2l0X3dlYl9mcmFtZV9zdG9wX2xvYWRpbmcg
KFdlYktpdFdlYkZyYW1lKiBmcmFtZSk7CisKK1dFQktJVF9BUEkgdm9pZAord2Via2l0X3dlYl9m
cmFtZV9yZWxvYWQgKFdlYktpdFdlYkZyYW1lKiBmcmFtZSk7CisKK1dFQktJVF9BUEkgV2ViS2l0
V2ViRnJhbWUqCit3ZWJraXRfd2ViX2ZyYW1lX2ZpbmRfZnJhbWUgKFdlYktpdFdlYkZyYW1lKiBm
cmFtZSwgY29uc3QgZ2NoYXIqIG5hbWUpOworCitXRUJLSVRfQVBJIEpTR2xvYmFsQ29udGV4dFJl
Zgord2Via2l0X3dlYl9mcmFtZV9nZXRfZ2xvYmFsX2NvbnRleHQgKFdlYktpdFdlYkZyYW1lKiBm
cmFtZSk7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZgpJbmRleDogV2ViS2l0L2d0ay9XZWJWaWV3
L3dlYmtpdHdlYnZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9ndGsvV2ViVmlldy93ZWJr
aXR3ZWJ2aWV3LmNwcAkocmV2aXNpb24gMCkKKysrIFdlYktpdC9ndGsvV2ViVmlldy93ZWJraXR3
ZWJ2aWV3LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw4NTkgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKKyAqIENvcHlyaWdodCAoQykg
MjAwNyBDaHJpc3RpYW4gRHl3YW4gPGNocmlzdGlhbkB0d290b2FzdHMuZGU+CisgKiBDb3B5cmln
aHQgKEMpIDIwMDcgWGFuIExvcGV6IDx4YW5AZ25vbWUub3JnPgorICogQ29weXJpZ2h0IChDKSAy
MDA3IEFscCBUb2tlciA8YWxwQGF0b2tlci5jb20+CisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyAqIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKKyAqIDMu
ICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVz
IG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAi
d2Via2l0d2Vidmlldy5oIgorI2luY2x1ZGUgIndlYmtpdC1tYXJzaGFsLmgiCisjaW5jbHVkZSAi
d2Via2l0cHJpdmF0ZS5oIgorCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRl
ICJDaHJvbWVDbGllbnRHdGsuaCIKKyNpbmNsdWRlICJDb250ZXh0TWVudUNsaWVudEd0ay5oIgor
I2luY2x1ZGUgIkRyYWdDbGllbnRHdGsuaCIKKyNpbmNsdWRlICJFZGl0b3JDbGllbnRHdGsuaCIK
KyNpbmNsdWRlICJFdmVudEhhbmRsZXIuaCIKKyNpbmNsdWRlICJIaXRUZXN0UmVxdWVzdC5oIgor
I2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIK
KyNpbmNsdWRlICJJbnNwZWN0b3JDbGllbnRHdGsuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlci5o
IgorI2luY2x1ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIlBsYXRmb3JtS2V5Ym9hcmRFdmVu
dC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtV2hlZWxFdmVudC5oIgorI2luY2x1ZGUgIlN1YnN0aXR1
dGVEYXRhLmgiCisKKyNpbmNsdWRlIDxnZGsvZ2Rra2V5c3ltcy5oPgorCit1c2luZyBuYW1lc3Bh
Y2UgV2ViS2l0OwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK2V4dGVybiAiQyIgeworCitl
bnVtIHsKKyAgICAvKiBub3JtYWwgc2lnbmFscyAqLworICAgIE5BVklHQVRJT05fUkVRVUVTVEVE
LAorICAgIFdJTkRPV19PQkpFQ1RfQ0xFQVJFRCwKKyAgICBMT0FEX1NUQVJURUQsCisgICAgTE9B
RF9QUk9HUkVTU19DSEFOR0VELAorICAgIExPQURfRklOSVNIRUQsCisgICAgVElUTEVfQ0hBTkdF
RCwKKyAgICBIT1ZFUklOR19PVkVSX0xJTkssCisgICAgU1RBVFVTX0JBUl9URVhUX0NIQU5HRUQs
CisgICAgSUNPTkRfTE9BREVELAorICAgIFNFTEVDVElPTl9DSEFOR0VELAorICAgIENPTlNPTEVf
TUVTU0FHRSwKKyAgICBTQ1JJUFRfQUxFUlQsCisgICAgU0NSSVBUX0NPTkZJUk0sCisgICAgU0NS
SVBUX1BST01QVCwKKyAgICBMQVNUX1NJR05BTAorfTsKKworc3RhdGljIGd1aW50IHdlYmtpdF93
ZWJfdmlld19zaWduYWxzW0xBU1RfU0lHTkFMXSA9IHsgMCwgfTsKKworR19ERUZJTkVfVFlQRShX
ZWJLaXRXZWJWaWV3LCB3ZWJraXRfd2ViX3ZpZXcsIEdUS19UWVBFX0NPTlRBSU5FUikKKworc3Rh
dGljIGdib29sZWFuIHdlYmtpdF93ZWJfdmlld19leHBvc2VfZXZlbnQoR3RrV2lkZ2V0KiB3aWRn
ZXQsIEdka0V2ZW50RXhwb3NlKiBldmVudCkKK3sKKyAgICBGcmFtZSogZnJhbWUgPSBjb3JlKGdl
dEZyYW1lRnJvbVZpZXcoV0VCS0lUX1dFQl9WSUVXKHdpZGdldCkpKTsKKyAgICBHZGtSZWN0YW5n
bGUgY2xpcDsKKyAgICBnZGtfcmVnaW9uX2dldF9jbGlwYm94KGV2ZW50LT5yZWdpb24sICZjbGlw
KTsKKyAgICBjYWlyb190KiBjciA9IGdka19jYWlyb19jcmVhdGUoZXZlbnQtPndpbmRvdyk7Cisg
ICAgR3JhcGhpY3NDb250ZXh0IGN0eChjcik7CisgICAgY3R4LnNldEdka0V4cG9zZUV2ZW50KGV2
ZW50KTsKKyAgICBpZiAoZnJhbWUtPnJlbmRlcmVyKCkpIHsKKyAgICAgICAgZnJhbWUtPnZpZXco
KS0+bGF5b3V0SWZOZWVkZWRSZWN1cnNpdmUoKTsKKyAgICAgICAgZnJhbWUtPnZpZXcoKS0+cGFp
bnQoJmN0eCwgY2xpcCk7CisgICAgfQorICAgIGNhaXJvX2Rlc3Ryb3koY3IpOworCisgICAgcmV0
dXJuIEZBTFNFOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X3dlYl92aWV3X2tleV9ldmVu
dChHdGtXaWRnZXQqIHdpZGdldCwgR2RrRXZlbnRLZXkqIGV2ZW50KQoreworICAgIEZyYW1lKiBm
cmFtZSA9IGNvcmUoZ2V0RnJhbWVGcm9tVmlldyhXRUJLSVRfV0VCX1ZJRVcod2lkZ2V0KSkpOwor
ICAgIFBsYXRmb3JtS2V5Ym9hcmRFdmVudCBrZXlib2FyZEV2ZW50KGV2ZW50KTsKKworICAgIGlm
IChmcmFtZS0+ZXZlbnRIYW5kbGVyKCktPmtleUV2ZW50KGtleWJvYXJkRXZlbnQpKQorICAgICAg
ICByZXR1cm4gVFJVRTsKKworICAgIGlmIChldmVudC0+dHlwZSAhPSBHREtfS0VZX1BSRVNTKQor
ICAgICAgICByZXR1cm4gRkFMU0U7CisKKyAgICBGcmFtZVZpZXcqIHZpZXcgPSBmcmFtZS0+dmll
dygpOworCisgICAgLyogRklYTUU6IGF0IHRoZSB2ZXJ5IGxlYXN0IHdlIHNob3VsZCBiZSB1c2lu
ZyB0aGUgc2FtZSBjb2RlIHRoYW4gdGhlCisgICAgICAgV2luZG93cyBwb3J0IGhlcmUsIGJ1dCBv
dXIgU2Nyb2xsVmlldyBmaWxlIGRpdmVyZ2VzIGVub3VnaCB0byBtYWtlCisgICAgICAgdGhhdCBp
bXBvc3NpYmxlLiBBIHNob3J0IHRlcm0gc29sdXRpb24gd291bGQgYmUgdG8gdW5pZnkgU2Nyb2xs
Vmlld1dpbgorICAgICAgIGFuZCBTY3JvbGxWaWV3R3RrLiBMb25nLXRlcm0gU2Nyb2xsVmlldyBh
bmQgRnJhbWVWaWV3IHNob3VsZCBiZQorICAgICAgIHVuaWZpZWQgYW5kIHVzZWQgZXZlcnl3aGVy
ZSBmb3Igc2Nyb2xsYmFycyAqLworCisgICAgc3dpdGNoIChldmVudC0+a2V5dmFsKSB7CisgICAg
Y2FzZSAoR0RLX0Rvd24pOgorICAgICAgICB2aWV3LT5zY3JvbGxCeSgwLCBMSU5FX1NURVApOwor
ICAgICAgICByZXR1cm4gVFJVRTsKKyAgICBjYXNlIChHREtfVXApOgorICAgICAgICB2aWV3LT5z
Y3JvbGxCeSgwLCAtTElORV9TVEVQKTsKKyAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgY2FzZSAo
R0RLX1JpZ2h0KToKKyAgICAgICAgdmlldy0+c2Nyb2xsQnkoTElORV9TVEVQLCAwKTsKKyAgICAg
ICAgcmV0dXJuIFRSVUU7CisgICAgY2FzZSAoR0RLX0xlZnQpOgorICAgICAgICB2aWV3LT5zY3Jv
bGxCeSgtTElORV9TVEVQLCAwKTsKKyAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorCisgICAg
cmV0dXJuIEZBTFNFOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X3dlYl92aWV3X2J1dHRv
bl9ldmVudChHdGtXaWRnZXQqIHdpZGdldCwgR2RrRXZlbnRCdXR0b24qIGV2ZW50KQoreworICAg
IEZyYW1lKiBmcmFtZSA9IGNvcmUoZ2V0RnJhbWVGcm9tVmlldyhXRUJLSVRfV0VCX1ZJRVcod2lk
Z2V0KSkpOworCisgICAgaWYgKGV2ZW50LT50eXBlID09IEdES19CVVRUT05fUkVMRUFTRSkKKyAg
ICAgICAgcmV0dXJuIGZyYW1lLT5ldmVudEhhbmRsZXIoKS0+aGFuZGxlTW91c2VSZWxlYXNlRXZl
bnQoUGxhdGZvcm1Nb3VzZUV2ZW50KGV2ZW50KSk7CisKKyAgICAvLyBGSVhNRTogbmVlZCB0byBr
ZWVwIHRyYWNrIG9mIHN1YmZyYW1lIGZvY3VzIGZvciBrZXkgZXZlbnRzCisgICAgZ3RrX3dpZGdl
dF9ncmFiX2ZvY3VzKEdUS19XSURHRVQod2lkZ2V0KSk7CisgICAgcmV0dXJuIGZyYW1lLT5ldmVu
dEhhbmRsZXIoKS0+aGFuZGxlTW91c2VQcmVzc0V2ZW50KFBsYXRmb3JtTW91c2VFdmVudChldmVu
dCkpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X3dlYl92aWV3X21vdGlvbl9ldmVudChH
dGtXaWRnZXQqIHdpZGdldCwgR2RrRXZlbnRNb3Rpb24qIGV2ZW50KQoreworICAgIEZyYW1lKiBm
cmFtZSA9IGNvcmUoZ2V0RnJhbWVGcm9tVmlldyhXRUJLSVRfV0VCX1ZJRVcod2lkZ2V0KSkpOwor
ICAgIHJldHVybiBmcmFtZS0+ZXZlbnRIYW5kbGVyKCktPm1vdXNlTW92ZWQoUGxhdGZvcm1Nb3Vz
ZUV2ZW50KGV2ZW50KSk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfd2ViX3ZpZXdfc2Ny
b2xsX2V2ZW50KEd0a1dpZGdldCogd2lkZ2V0LCBHZGtFdmVudFNjcm9sbCogZXZlbnQpCit7Cisg
ICAgRnJhbWUqIGZyYW1lID0gY29yZShnZXRGcmFtZUZyb21WaWV3KFdFQktJVF9XRUJfVklFVyh3
aWRnZXQpKSk7CisgICAgUGxhdGZvcm1XaGVlbEV2ZW50IHdoZWVsRXZlbnQoZXZlbnQpOworICAg
IHJldHVybiBmcmFtZS0+ZXZlbnRIYW5kbGVyKCktPmhhbmRsZVdoZWVsRXZlbnQod2hlZWxFdmVu
dCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF93ZWJfdmlld19zaXplX2FsbG9jYXRlKEd0a1dp
ZGdldCogd2lkZ2V0LCBHdGtBbGxvY2F0aW9uKiBhbGxvY2F0aW9uKQoreworICAgIEdUS19XSURH
RVRfQ0xBU1Mod2Via2l0X3dlYl92aWV3X3BhcmVudF9jbGFzcyktPnNpemVfYWxsb2NhdGUod2lk
Z2V0LGFsbG9jYXRpb24pOworCisgICAgRnJhbWUqIGZyYW1lID0gY29yZShnZXRGcmFtZUZyb21W
aWV3KFdFQktJVF9XRUJfVklFVyh3aWRnZXQpKSk7CisgICAgZnJhbWUtPnZpZXcoKS0+cmVzaXpl
KGFsbG9jYXRpb24tPndpZHRoLCBhbGxvY2F0aW9uLT5oZWlnaHQpOworICAgIGZyYW1lLT5mb3Jj
ZUxheW91dCgpOworICAgIGZyYW1lLT52aWV3KCktPmFkanVzdFZpZXdTaXplKCk7CisgICAgZnJh
bWUtPnNlbmRSZXNpemVFdmVudCgpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX3ZpZXdf
cmVhbGl6ZShHdGtXaWRnZXQqIHdpZGdldCkKK3sKKyAgICBHVEtfV0lER0VUX1NFVF9GTEFHUyh3
aWRnZXQsIEdUS19SRUFMSVpFRCk7CisKKyAgICBHZGtXaW5kb3dBdHRyIGF0dHJpYnV0ZXM7Cisg
ICAgYXR0cmlidXRlcy53aW5kb3dfdHlwZSA9IEdES19XSU5ET1dfQ0hJTEQ7CisgICAgYXR0cmli
dXRlcy54ID0gd2lkZ2V0LT5hbGxvY2F0aW9uLng7CisgICAgYXR0cmlidXRlcy55ID0gd2lkZ2V0
LT5hbGxvY2F0aW9uLnk7CisgICAgYXR0cmlidXRlcy53aWR0aCA9IHdpZGdldC0+YWxsb2NhdGlv
bi53aWR0aDsKKyAgICBhdHRyaWJ1dGVzLmhlaWdodCA9IHdpZGdldC0+YWxsb2NhdGlvbi5oZWln
aHQ7CisgICAgYXR0cmlidXRlcy53Y2xhc3MgPSBHREtfSU5QVVRfT1VUUFVUOworICAgIGF0dHJp
YnV0ZXMudmlzdWFsID0gZ3RrX3dpZGdldF9nZXRfdmlzdWFsICh3aWRnZXQpOworICAgIGF0dHJp
YnV0ZXMuY29sb3JtYXAgPSBndGtfd2lkZ2V0X2dldF9jb2xvcm1hcCAod2lkZ2V0KTsKKyAgICBh
dHRyaWJ1dGVzLmV2ZW50X21hc2sgPSBHREtfVklTSUJJTElUWV9OT1RJRllfTUFTSworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHwgR0RLX0VYUE9TVVJFX01BU0sKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB8IEdES19CVVRUT05fUFJFU1NfTUFTSworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHwgR0RLX0JVVFRPTl9SRUxFQVNFX01BU0sKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB8IEdES19QT0lOVEVSX01PVElPTl9NQVNLCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfCBHREtfS0VZX1BSRVNTX01BU0sKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8
IEdES19LRVlfUkVMRUFTRV9NQVNLCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBHREtf
QlVUVE9OX01PVElPTl9NQVNLCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBHREtfQlVU
VE9OMV9NT1RJT05fTUFTSworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgR0RLX0JVVFRP
TjJfTU9USU9OX01BU0sKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEdES19CVVRUT04z
X01PVElPTl9NQVNLOworCisgICAgZ2ludCBhdHRyaWJ1dGVzX21hc2sgPSBHREtfV0FfWCB8IEdE
S19XQV9ZIHwgR0RLX1dBX1ZJU1VBTCB8IEdES19XQV9DT0xPUk1BUDsKKyAgICB3aWRnZXQtPndp
bmRvdyA9IGdka193aW5kb3dfbmV3KGd0a193aWRnZXRfZ2V0X3BhcmVudF93aW5kb3cgKHdpZGdl
dCksICZhdHRyaWJ1dGVzLCBhdHRyaWJ1dGVzX21hc2spOworICAgIGdka193aW5kb3dfc2V0X3Vz
ZXJfZGF0YSh3aWRnZXQtPndpbmRvdywgd2lkZ2V0KTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0
X3dlYl92aWV3X3NldF9zY3JvbGxfYWRqdXN0bWVudHMoV2ViS2l0V2ViVmlldyogd2ViVmlldywg
R3RrQWRqdXN0bWVudCogaGFkaiwgR3RrQWRqdXN0bWVudCogdmFkaikKK3sKKyAgICBGcmFtZVZp
ZXcqIHZpZXcgPSBjb3JlKGdldEZyYW1lRnJvbVZpZXcod2ViVmlldykpLT52aWV3KCk7CisgICAg
dmlldy0+c2V0R3RrQWRqdXN0bWVudHMoaGFkaiwgdmFkaik7Cit9CisKK3N0YXRpYyB2b2lkIHdl
YmtpdF93ZWJfdmlld19jb250YWluZXJfYWRkKEd0a0NvbnRhaW5lciogY29udGFpbmVyLCBHdGtX
aWRnZXQqIHdpZGdldCkKK3sKKyAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0gV0VCS0lUX1dF
Ql9WSUVXKGNvbnRhaW5lcik7CisgICAgV2ViS2l0V2ViVmlld1ByaXZhdGUqIHByaXZhdGVfZGF0
YSA9IFdFQktJVF9XRUJfVklFV19HRVRfUFJJVkFURSh3ZWJWaWV3KTsKKworICAgIHByaXZhdGVf
ZGF0YS0+Y2hpbGRyZW4uYWRkKHdpZGdldCk7CisgICAgaWYgKEdUS19XSURHRVRfUkVBTElaRUQo
Y29udGFpbmVyKSkKKyAgICAgICAgZ3RrX3dpZGdldF9zZXRfcGFyZW50X3dpbmRvdyh3aWRnZXQs
IEdUS19XSURHRVQod2ViVmlldyktPndpbmRvdyk7CisgICAgZ3RrX3dpZGdldF9zZXRfcGFyZW50
KHdpZGdldCwgR1RLX1dJREdFVChjb250YWluZXIpKTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0
X3dlYl92aWV3X2NvbnRhaW5lcl9yZW1vdmUoR3RrQ29udGFpbmVyKiBjb250YWluZXIsIEd0a1dp
ZGdldCogd2lkZ2V0KQoreworICAgIFdlYktpdFdlYlZpZXdQcml2YXRlKiBwcml2YXRlX2RhdGEg
PSBXRUJLSVRfV0VCX1ZJRVdfR0VUX1BSSVZBVEUoV0VCS0lUX1dFQl9WSUVXKGNvbnRhaW5lcikp
OworCisgICAgaWYgKHByaXZhdGVfZGF0YS0+Y2hpbGRyZW4uY29udGFpbnMod2lkZ2V0KSkgewor
ICAgICAgICBndGtfd2lkZ2V0X3VucGFyZW50KHdpZGdldCk7CisgICAgICAgIHByaXZhdGVfZGF0
YS0+Y2hpbGRyZW4ucmVtb3ZlKHdpZGdldCk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB3ZWJr
aXRfd2ViX3ZpZXdfY29udGFpbmVyX2ZvcmFsbChHdGtDb250YWluZXIqIGNvbnRhaW5lciwgZ2Jv
b2xlYW4sIEd0a0NhbGxiYWNrIGNhbGxiYWNrLCBncG9pbnRlciBjYWxsYmFja0RhdGEpCit7Cisg
ICAgV2ViS2l0V2ViVmlld1ByaXZhdGUqIHByaXZhdGVEYXRhID0gV0VCS0lUX1dFQl9WSUVXX0dF
VF9QUklWQVRFKFdFQktJVF9XRUJfVklFVyhjb250YWluZXIpKTsKKworICAgIEhhc2hTZXQ8R3Rr
V2lkZ2V0Kj4gY2hpbGRyZW4gPSBwcml2YXRlRGF0YS0+Y2hpbGRyZW47CisgICAgSGFzaFNldDxH
dGtXaWRnZXQqPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gY2hpbGRyZW4uZW5kKCk7CisgICAgZm9y
IChIYXNoU2V0PEd0a1dpZGdldCo+Ojpjb25zdF9pdGVyYXRvciBjdXJyZW50ID0gY2hpbGRyZW4u
YmVnaW4oKTsgY3VycmVudCAhPSBlbmQ7ICsrY3VycmVudCkKKyAgICAgICAgKCpjYWxsYmFjayko
KmN1cnJlbnQsIGNhbGxiYWNrRGF0YSk7Cit9CisKK3N0YXRpYyBXZWJLaXRXZWJWaWV3KiB3ZWJr
aXRfd2ViX3ZpZXdfcmVhbF9jcmVhdGVfd2ViX3ZpZXcoV2ViS2l0V2ViVmlldyopCit7CisgICAg
bm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIFdlYktpdE5hdmln
YXRpb25SZXNwb25zZSB3ZWJraXRfd2ViX3ZpZXdfcmVhbF9uYXZpZ2F0aW9uX3JlcXVlc3RlZChX
ZWJLaXRXZWJWaWV3KiwgV2ViS2l0V2ViRnJhbWUqIGZyYW1lLCBXZWJLaXROZXR3b3JrUmVxdWVz
dCopCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gV0VCS0lUX05BVklHQVRJ
T05fUkVTUE9OU0VfQUNDRVBUOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfcmVh
bF93aW5kb3dfb2JqZWN0X2NsZWFyZWQoV2ViS2l0V2ViVmlldyosIFdlYktpdFdlYkZyYW1lKiwg
SlNHbG9iYWxDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIHdpbmRvd19vYmplY3QpCit7
CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworc3RhdGljIGdjaGFyKiB3ZWJraXRfd2ViX3Zp
ZXdfcmVhbF9jaG9vc2VfZmlsZShXZWJLaXRXZWJWaWV3KiwgV2ViS2l0V2ViRnJhbWUqLCBjb25z
dCBnY2hhciogb2xkX25hbWUpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4g
Z19zdHJkdXAob2xkX25hbWUpOworfQorCit0eXBlZGVmIGVudW0geworICAgIFdFQktJVF9TQ1JJ
UFRfRElBTE9HX0FMRVJULAorICAgIFdFQktJVF9TQ1JJUFRfRElBTE9HX0NPTkZJUk0sCisgICAg
V0VCS0lUX1NDUklQVF9ESUFMT0dfUFJPTVBUCisgfSBXZWJLaXRTY3JpcHREaWFsb2dUeXBlOwor
CitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X3dlYl92aWV3X3NjcmlwdF9kaWFsb2coV2ViS2l0V2Vi
Vmlldyogd2ViVmlldywgV2ViS2l0V2ViRnJhbWUqIGZyYW1lLCBjb25zdCBnY2hhciogbWVzc2Fn
ZSwgV2ViS2l0U2NyaXB0RGlhbG9nVHlwZSB0eXBlLCBjb25zdCBnY2hhciogZGVmYXVsdFZhbHVl
LCBnY2hhcioqIHZhbHVlKQoreworICAgIEd0a01lc3NhZ2VUeXBlIG1lc3NhZ2VUeXBlOworICAg
IEd0a0J1dHRvbnNUeXBlIGJ1dHRvbnM7CisgICAgZ2ludCBkZWZhdWx0UmVzcG9uc2U7CisgICAg
R3RrV2lkZ2V0KiB3aW5kb3c7CisgICAgR3RrV2lkZ2V0KiBkaWFsb2c7CisgICAgR3RrV2lkZ2V0
KiBlbnRyeSA9IDA7CisgICAgZ2Jvb2xlYW4gZGlkQ29uZmlybSA9IEZBTFNFOworCisgICAgc3dp
dGNoICh0eXBlKSB7CisgICAgY2FzZSBXRUJLSVRfU0NSSVBUX0RJQUxPR19BTEVSVDoKKyAgICAg
ICAgbWVzc2FnZVR5cGUgPSBHVEtfTUVTU0FHRV9XQVJOSU5HOworICAgICAgICBidXR0b25zID0g
R1RLX0JVVFRPTlNfQ0xPU0U7CisgICAgICAgIGRlZmF1bHRSZXNwb25zZSA9IEdUS19SRVNQT05T
RV9DTE9TRTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBXRUJLSVRfU0NSSVBUX0RJQUxPR19D
T05GSVJNOgorICAgICAgICBtZXNzYWdlVHlwZSA9IEdUS19NRVNTQUdFX1FVRVNUSU9OOworICAg
ICAgICBidXR0b25zID0gR1RLX0JVVFRPTlNfWUVTX05POworICAgICAgICBkZWZhdWx0UmVzcG9u
c2UgPSBHVEtfUkVTUE9OU0VfWUVTOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFdFQktJVF9T
Q1JJUFRfRElBTE9HX1BST01QVDoKKyAgICAgICAgbWVzc2FnZVR5cGUgPSBHVEtfTUVTU0FHRV9R
VUVTVElPTjsKKyAgICAgICAgYnV0dG9ucyA9IEdUS19CVVRUT05TX09LX0NBTkNFTDsKKyAgICAg
ICAgZGVmYXVsdFJlc3BvbnNlID0gR1RLX1JFU1BPTlNFX09LOworICAgICAgICBicmVhazsKKyAg
ICBkZWZhdWx0OgorICAgICAgICBnX3dhcm5pbmcoIlVua25vd24gdmFsdWUgZm9yIFdlYktpdFNj
cmlwdERpYWxvZ1R5cGUuIik7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisKKyAgICB3
aW5kb3cgPSBndGtfd2lkZ2V0X2dldF90b3BsZXZlbChHVEtfV0lER0VUKHdlYlZpZXcpKTsKKyAg
ICBkaWFsb2cgPSBndGtfbWVzc2FnZV9kaWFsb2dfbmV3KEdUS19XSURHRVRfVE9QTEVWRUwod2lu
ZG93KSA/IEdUS19XSU5ET1cod2luZG93KSA6IDAsIEdUS19ESUFMT0dfREVTVFJPWV9XSVRIX1BB
UkVOVCwgbWVzc2FnZVR5cGUsIGJ1dHRvbnMsICIlcyIsIG1lc3NhZ2UpOworICAgIGdjaGFyKiB0
aXRsZSA9IGdfc3RyY29uY2F0KCJKYXZhU2NyaXB0IC0gIiwgd2Via2l0X3dlYl9mcmFtZV9nZXRf
bG9jYXRpb24oZnJhbWUpLCBOVUxMKTsKKyAgICBndGtfd2luZG93X3NldF90aXRsZShHVEtfV0lO
RE9XKGRpYWxvZyksIHRpdGxlKTsKKyAgICBnX2ZyZWUodGl0bGUpOworCisgICAgaWYgKHR5cGUg
PT0gV0VCS0lUX1NDUklQVF9ESUFMT0dfUFJPTVBUKSB7CisgICAgICAgIGVudHJ5ID0gZ3RrX2Vu
dHJ5X25ldygpOworICAgICAgICBndGtfZW50cnlfc2V0X3RleHQoR1RLX0VOVFJZKGVudHJ5KSwg
ZGVmYXVsdFZhbHVlKTsKKyAgICAgICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUihH
VEtfRElBTE9HKGRpYWxvZyktPnZib3gpLCBlbnRyeSk7CisgICAgICAgIGd0a19lbnRyeV9zZXRf
YWN0aXZhdGVzX2RlZmF1bHQoR1RLX0VOVFJZKGVudHJ5KSwgVFJVRSk7CisgICAgICAgIGd0a193
aWRnZXRfc2hvdyhlbnRyeSk7CisgICAgfQorCisgICAgZ3RrX2RpYWxvZ19zZXRfZGVmYXVsdF9y
ZXNwb25zZShHVEtfRElBTE9HKGRpYWxvZyksIGRlZmF1bHRSZXNwb25zZSk7CisgICAgZ2ludCBy
ZXNwb25zZSA9IGd0a19kaWFsb2dfcnVuKEdUS19ESUFMT0coZGlhbG9nKSk7CisKKyAgICBzd2l0
Y2ggKHJlc3BvbnNlKSB7CisgICAgY2FzZSBHVEtfUkVTUE9OU0VfWUVTOgorICAgICAgICBkaWRD
b25maXJtID0gVFJVRTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHVEtfUkVTUE9OU0VfT0s6
CisgICAgICAgIGRpZENvbmZpcm0gPSBUUlVFOworICAgICAgICBpZiAoZW50cnkpCisgICAgICAg
ICAgICAqdmFsdWUgPSBnX3N0cmR1cChndGtfZW50cnlfZ2V0X3RleHQoR1RLX0VOVFJZKGVudHJ5
KSkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICAqdmFsdWUgPSAwOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIEdUS19SRVNQT05TRV9OTzoKKyAgICBjYXNlIEdUS19SRVNQT05TRV9DQU5D
RUw6CisgICAgICAgIGRpZENvbmZpcm0gPSBGQUxTRTsKKyAgICAgICAgYnJlYWs7CisKKyAgICB9
CisgICAgZ3RrX3dpZGdldF9kZXN0cm95KEdUS19XSURHRVQoZGlhbG9nKSk7CisgICAgcmV0dXJu
IGRpZENvbmZpcm07Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfd2ViX3ZpZXdfcmVhbF9z
Y3JpcHRfYWxlcnQoV2ViS2l0V2ViVmlldyogd2ViVmlldywgV2ViS2l0V2ViRnJhbWUqIGZyYW1l
LCBjb25zdCBnY2hhciogbWVzc2FnZSkKK3sKKyAgICB3ZWJraXRfd2ViX3ZpZXdfc2NyaXB0X2Rp
YWxvZyh3ZWJWaWV3LCBmcmFtZSwgbWVzc2FnZSwgV0VCS0lUX1NDUklQVF9ESUFMT0dfQUxFUlQs
IDAsIDApOworICAgIHJldHVybiBUUlVFOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X3dl
Yl92aWV3X3JlYWxfc2NyaXB0X2NvbmZpcm0oV2ViS2l0V2ViVmlldyogd2ViVmlldywgV2ViS2l0
V2ViRnJhbWUqIGZyYW1lLCBjb25zdCBnY2hhciogbWVzc2FnZSwgZ2Jvb2xlYW4qIGRpZENvbmZp
cm0pCit7CisgICAgKmRpZENvbmZpcm0gPSB3ZWJraXRfd2ViX3ZpZXdfc2NyaXB0X2RpYWxvZyh3
ZWJWaWV3LCBmcmFtZSwgbWVzc2FnZSwgV0VCS0lUX1NDUklQVF9ESUFMT0dfQ09ORklSTSwgMCwg
MCk7CisgICAgcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfd2ViX3Zp
ZXdfcmVhbF9zY3JpcHRfcHJvbXB0KFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIFdlYktpdFdlYkZy
YW1lKiBmcmFtZSwgY29uc3QgZ2NoYXIqIG1lc3NhZ2UsIGNvbnN0IGdjaGFyKiBkZWZhdWx0VmFs
dWUsIGdjaGFyKiogdmFsdWUpCit7CisgICAgaWYgKCF3ZWJraXRfd2ViX3ZpZXdfc2NyaXB0X2Rp
YWxvZyh3ZWJWaWV3LCBmcmFtZSwgbWVzc2FnZSwgV0VCS0lUX1NDUklQVF9ESUFMT0dfUFJPTVBU
LCBkZWZhdWx0VmFsdWUsIHZhbHVlKSkKKyAgICAgICAgKnZhbHVlID0gTlVMTDsKKyAgICByZXR1
cm4gVFJVRTsKK30KKworc3RhdGljIGdib29sZWFuIHdlYmtpdF93ZWJfdmlld19yZWFsX2NvbnNv
bGVfbWVzc2FnZShXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBjb25zdCBnY2hhciogbWVzc2FnZSwg
dW5zaWduZWQgaW50IGxpbmUsIGNvbnN0IGdjaGFyKiBzb3VyY2VJZCkKK3sKKyAgICBnX3ByaW50
KCJjb25zb2xlIG1lc3NhZ2U6ICVzIEAlZDogJXNcbiIsIHNvdXJjZUlkLCBsaW5lLCBtZXNzYWdl
KTsKKyAgICByZXR1cm4gVFJVRTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X3dlYl92aWV3X2Zp
bmFsaXplKEdPYmplY3QqIG9iamVjdCkKK3sKKyAgICB3ZWJraXRfd2ViX3ZpZXdfc3RvcF9sb2Fk
aW5nKFdFQktJVF9XRUJfVklFVyhvYmplY3QpKTsKKworICAgIFdlYktpdFdlYlZpZXdQcml2YXRl
KiB3ZWJWaWV3RGF0YSA9IFdFQktJVF9XRUJfVklFV19HRVRfUFJJVkFURShXRUJLSVRfV0VCX1ZJ
RVcob2JqZWN0KSk7CisgICAgZGVsZXRlIHdlYlZpZXdEYXRhLT5jb3JlUGFnZTsKKyAgICBkZWxl
dGUgd2ViVmlld0RhdGEtPnNldHRpbmdzOworICAgIGdfb2JqZWN0X3VucmVmKHdlYlZpZXdEYXRh
LT5tYWluRnJhbWUpOworICAgIGRlbGV0ZSB3ZWJWaWV3RGF0YS0+dXNlckFnZW50OworCisgICAg
R19PQkpFQ1RfQ0xBU1Mod2Via2l0X3dlYl92aWV3X3BhcmVudF9jbGFzcyktPmZpbmFsaXplKG9i
amVjdCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF93ZWJfdmlld19jbGFzc19pbml0KFdlYktp
dFdlYlZpZXdDbGFzcyogd2ViVmlld0NsYXNzKQoreworICAgIGdfdHlwZV9jbGFzc19hZGRfcHJp
dmF0ZSh3ZWJWaWV3Q2xhc3MsIHNpemVvZihXZWJLaXRXZWJWaWV3UHJpdmF0ZSkpOworCisgICAg
LyoKKyAgICAgKiBTaWduYWxzCisgICAgICovCisKKyAgICB3ZWJraXRfd2ViX3ZpZXdfc2lnbmFs
c1tOQVZJR0FUSU9OX1JFUVVFU1RFRF0gPSBnX3NpZ25hbF9uZXcoIm5hdmlnYXRpb25fcmVxdWVz
dGVkIiwKKyAgICAgICAgICAgIEdfVFlQRV9GUk9NX0NMQVNTKHdlYlZpZXdDbGFzcyksCisgICAg
ICAgICAgICAoR1NpZ25hbEZsYWdzKShHX1NJR05BTF9SVU5fTEFTVCB8IEdfU0lHTkFMX0FDVElP
TiksCisgICAgICAgICAgICBHX1NUUlVDVF9PRkZTRVQgKFdlYktpdFdlYlZpZXdDbGFzcywgbmF2
aWdhdGlvbl9yZXF1ZXN0ZWQpLAorICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgIE5VTEws
CisgICAgICAgICAgICB3ZWJraXRfbWFyc2hhbF9JTlRfX09CSkVDVF9PQkpFQ1QsCisgICAgICAg
ICAgICBHX1RZUEVfSU5ULCAyLAorICAgICAgICAgICAgR19UWVBFX09CSkVDVCwKKyAgICAgICAg
ICAgIEdfVFlQRV9PQkpFQ1QpOworCisgICAgLyoqCisgICAgICogV2ViS2l0V2ViVmlldzo6d2lu
ZG93LW9iamVjdC1jbGVhcmVkOgorICAgICAqIEB3ZWJfdmlldzogdGhlIG9iamVjdCBvbiB3aGlj
aCB0aGUgc2lnbmFsIGlzIGVtaXR0ZWQKKyAgICAgKiBAZnJhbWU6IHRoZSAjV2ViS2l0V2ViRnJh
bWUgdG8gd2hpY2ggQHdpbmRvd19vYmplY3QgYmVsb25ncworICAgICAqIEBjb250ZXh0OiB0aGUg
I0pTR2xvYmFsQ29udGV4dFJlZiBob2xkaW5nIHRoZSBnbG9iYWwgb2JqZWN0IGFuZCBvdGhlcgor
ICAgICAqIGV4ZWN1dGlvbiBzdGF0ZTsgZXF1aXZhbGVudCB0byB0aGUgcmV0dXJuIHZhbHVlIG9m
CisgICAgICogd2Via2l0X3dlYl9mcmFtZV9nZXRfZ2xvYmFsX2NvbnRleHQoQGZyYW1lKQorICAg
ICAqCisgICAgICogQHdpbmRvd19vYmplY3Q6IHRoZSAjSlNPYmplY3RSZWYgcmVwcmVzZW50aW5n
IHRoZSBmcmFtZSdzIEphdmFTY3JpcHQKKyAgICAgKiB3aW5kb3cgb2JqZWN0CisgICAgICoKKyAg
ICAgKiBFbWl0dGVkIHdoZW4gdGhlIEphdmFTY3JpcHQgd2luZG93IG9iamVjdCBpbiBhICNXZWJL
aXRXZWJGcmFtZSBoYXMgYmVlbgorICAgICAqIGNsZWFyZWQgaW4gcHJlcGFyYXRpb24gZm9yIGEg
bmV3IGxvYWQuIFRoaXMgaXMgdGhlIHByZWZlcnJlZCBwbGFjZSB0bworICAgICAqIHNldCBjdXN0
b20gcHJvcGVydGllcyBvbiB0aGUgd2luZG93IG9iamVjdCB1c2luZyB0aGUgSmF2YVNjcmlwdENv
cmUgQVBJLgorICAgICAqLworICAgIHdlYmtpdF93ZWJfdmlld19zaWduYWxzW1dJTkRPV19PQkpF
Q1RfQ0xFQVJFRF0gPSBnX3NpZ25hbF9uZXcoIndpbmRvd19vYmplY3RfY2xlYXJlZCIsCisgICAg
ICAgICAgICBHX1RZUEVfRlJPTV9DTEFTUyh3ZWJWaWV3Q2xhc3MpLAorICAgICAgICAgICAgKEdT
aWduYWxGbGFncykoR19TSUdOQUxfUlVOX0xBU1QgfCBHX1NJR05BTF9BQ1RJT04pLAorICAgICAg
ICAgICAgR19TVFJVQ1RfT0ZGU0VUIChXZWJLaXRXZWJWaWV3Q2xhc3MsIHdpbmRvd19vYmplY3Rf
Y2xlYXJlZCksCisgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAgTlVMTCwKKyAgICAgICAg
ICAgIHdlYmtpdF9tYXJzaGFsX1ZPSURfX09CSkVDVF9QT0lOVEVSX1BPSU5URVIsCisgICAgICAg
ICAgICBHX1RZUEVfTk9ORSwgMywKKyAgICAgICAgICAgIFdFQktJVF9UWVBFX1dFQl9GUkFNRSwK
KyAgICAgICAgICAgIEdfVFlQRV9QT0lOVEVSLAorICAgICAgICAgICAgR19UWVBFX1BPSU5URVIp
OworCisgICAgLyoqCisgICAgICogV2ViS2l0V2ViVmlldzo6bG9hZC1zdGFydGVkOgorICAgICAq
IEB3ZWJfdmlldzogdGhlIG9iamVjdCBvbiB3aGljaCB0aGUgc2lnbmFsIGlzIGVtaXR0ZWQKKyAg
ICAgKiBAZnJhbWU6IHRoZSBmcmFtZSBnb2luZyB0byBkbyB0aGUgbG9hZAorICAgICAqCisgICAg
ICogV2hlbiBhICNXZWJLaXRXZWJGcmFtZSBiZWdpbnMgdG8gbG9hZCB0aGlzIHNpZ25hbCBpcyBl
bWl0dGVkLgorICAgICAqLworICAgIHdlYmtpdF93ZWJfdmlld19zaWduYWxzW0xPQURfU1RBUlRF
RF0gPSBnX3NpZ25hbF9uZXcoImxvYWRfc3RhcnRlZCIsCisgICAgICAgICAgICBHX1RZUEVfRlJP
TV9DTEFTUyh3ZWJWaWV3Q2xhc3MpLAorICAgICAgICAgICAgKEdTaWduYWxGbGFncykoR19TSUdO
QUxfUlVOX0xBU1QgfCBHX1NJR05BTF9BQ1RJT04pLAorICAgICAgICAgICAgMCwKKyAgICAgICAg
ICAgIE5VTEwsCisgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAgZ19jY2xvc3VyZV9tYXJz
aGFsX1ZPSURfX09CSkVDVCwKKyAgICAgICAgICAgIEdfVFlQRV9OT05FLCAxLAorICAgICAgICAg
ICAgV0VCS0lUX1RZUEVfV0VCX0ZSQU1FKTsKKworICAgIC8qKgorICAgICAqIFdlYktpdFdlYlZp
ZXc6OmxvYWQtcHJvZ3Jlc3MtY2hhbmdlZDoKKyAgICAgKiBAd2ViX3ZpZXc6IHRoZSAjV2ViS2l0
V2ViVmlldworICAgICAqIEBwcm9ncmVzczogdGhlIGdsb2JhbCBwcm9ncmVzcworICAgICAqLwor
ICAgIHdlYmtpdF93ZWJfdmlld19zaWduYWxzW0xPQURfUFJPR1JFU1NfQ0hBTkdFRF0gPSBnX3Np
Z25hbF9uZXcoImxvYWRfcHJvZ3Jlc3NfY2hhbmdlZCIsCisgICAgICAgICAgICBHX1RZUEVfRlJP
TV9DTEFTUyh3ZWJWaWV3Q2xhc3MpLAorICAgICAgICAgICAgKEdTaWduYWxGbGFncykoR19TSUdO
QUxfUlVOX0xBU1QgfCBHX1NJR05BTF9BQ1RJT04pLAorICAgICAgICAgICAgMCwKKyAgICAgICAg
ICAgIE5VTEwsCisgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAgZ19jY2xvc3VyZV9tYXJz
aGFsX1ZPSURfX0lOVCwKKyAgICAgICAgICAgIEdfVFlQRV9OT05FLCAxLAorICAgICAgICAgICAg
R19UWVBFX0lOVCk7CisKKyAgICB3ZWJraXRfd2ViX3ZpZXdfc2lnbmFsc1tMT0FEX0ZJTklTSEVE
XSA9IGdfc2lnbmFsX25ldygibG9hZF9maW5pc2hlZCIsCisgICAgICAgICAgICBHX1RZUEVfRlJP
TV9DTEFTUyh3ZWJWaWV3Q2xhc3MpLAorICAgICAgICAgICAgKEdTaWduYWxGbGFncykoR19TSUdO
QUxfUlVOX0xBU1QgfCBHX1NJR05BTF9BQ1RJT04pLAorICAgICAgICAgICAgMCwKKyAgICAgICAg
ICAgIE5VTEwsCisgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAgZ19jY2xvc3VyZV9tYXJz
aGFsX1ZPSURfX09CSkVDVCwKKyAgICAgICAgICAgIEdfVFlQRV9OT05FLCAxLAorICAgICAgICAg
ICAgV0VCS0lUX1RZUEVfV0VCX0ZSQU1FKTsKKworICAgIHdlYmtpdF93ZWJfdmlld19zaWduYWxz
W1RJVExFX0NIQU5HRURdID0gZ19zaWduYWxfbmV3KCJ0aXRsZV9jaGFuZ2VkIiwKKyAgICAgICAg
ICAgIEdfVFlQRV9GUk9NX0NMQVNTKHdlYlZpZXdDbGFzcyksCisgICAgICAgICAgICAoR1NpZ25h
bEZsYWdzKShHX1NJR05BTF9SVU5fTEFTVCB8IEdfU0lHTkFMX0FDVElPTiksCisgICAgICAgICAg
ICAwLAorICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICB3
ZWJraXRfbWFyc2hhbF9WT0lEX19TVFJJTkdfU1RSSU5HLAorICAgICAgICAgICAgR19UWVBFX05P
TkUsIDIsCisgICAgICAgICAgICBHX1RZUEVfU1RSSU5HLCBHX1RZUEVfU1RSSU5HKTsKKworICAg
IHdlYmtpdF93ZWJfdmlld19zaWduYWxzW0hPVkVSSU5HX09WRVJfTElOS10gPSBnX3NpZ25hbF9u
ZXcoImhvdmVyaW5nX292ZXJfbGluayIsCisgICAgICAgICAgICBHX1RZUEVfRlJPTV9DTEFTUyh3
ZWJWaWV3Q2xhc3MpLAorICAgICAgICAgICAgKEdTaWduYWxGbGFncykoR19TSUdOQUxfUlVOX0xB
U1QgfCBHX1NJR05BTF9BQ1RJT04pLAorICAgICAgICAgICAgMCwKKyAgICAgICAgICAgIE5VTEws
CisgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAgd2Via2l0X21hcnNoYWxfVk9JRF9fU1RS
SU5HX1NUUklORywKKyAgICAgICAgICAgIEdfVFlQRV9OT05FLCAyLAorICAgICAgICAgICAgR19U
WVBFX1NUUklORywKKyAgICAgICAgICAgIEdfVFlQRV9TVFJJTkcpOworCisgICAgd2Via2l0X3dl
Yl92aWV3X3NpZ25hbHNbU1RBVFVTX0JBUl9URVhUX0NIQU5HRURdID0gZ19zaWduYWxfbmV3KCJz
dGF0dXNfYmFyX3RleHRfY2hhbmdlZCIsCisgICAgICAgICAgICBHX1RZUEVfRlJPTV9DTEFTUyh3
ZWJWaWV3Q2xhc3MpLAorICAgICAgICAgICAgKEdTaWduYWxGbGFncykoR19TSUdOQUxfUlVOX0xB
U1QgfCBHX1NJR05BTF9BQ1RJT04pLAorICAgICAgICAgICAgMCwKKyAgICAgICAgICAgIE5VTEws
CisgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAgZ19jY2xvc3VyZV9tYXJzaGFsX1ZPSURf
X1NUUklORywKKyAgICAgICAgICAgIEdfVFlQRV9OT05FLCAxLAorICAgICAgICAgICAgR19UWVBF
X1NUUklORyk7CisKKyAgICB3ZWJraXRfd2ViX3ZpZXdfc2lnbmFsc1tJQ09ORF9MT0FERURdID0g
Z19zaWduYWxfbmV3KCJpY29uX2xvYWRlZCIsCisgICAgICAgICAgICBHX1RZUEVfRlJPTV9DTEFT
Uyh3ZWJWaWV3Q2xhc3MpLAorICAgICAgICAgICAgKEdTaWduYWxGbGFncykoR19TSUdOQUxfUlVO
X0xBU1QgfCBHX1NJR05BTF9BQ1RJT04pLAorICAgICAgICAgICAgMCwKKyAgICAgICAgICAgIE5V
TEwsCisgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAgZ19jY2xvc3VyZV9tYXJzaGFsX1ZP
SURfX1ZPSUQsCisgICAgICAgICAgICBHX1RZUEVfTk9ORSwgMCk7CisKKyAgICB3ZWJraXRfd2Vi
X3ZpZXdfc2lnbmFsc1tTRUxFQ1RJT05fQ0hBTkdFRF0gPSBnX3NpZ25hbF9uZXcoInNlbGVjdGlv
bl9jaGFuZ2VkIiwKKyAgICAgICAgICAgIEdfVFlQRV9GUk9NX0NMQVNTKHdlYlZpZXdDbGFzcyks
CisgICAgICAgICAgICAoR1NpZ25hbEZsYWdzKShHX1NJR05BTF9SVU5fTEFTVCB8IEdfU0lHTkFM
X0FDVElPTiksCisgICAgICAgICAgICAwLAorICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAg
IE5VTEwsCisgICAgICAgICAgICBnX2NjbG9zdXJlX21hcnNoYWxfVk9JRF9fVk9JRCwKKyAgICAg
ICAgICAgIEdfVFlQRV9OT05FLCAwKTsKKworICAgIC8qKgorICAgICAqIFdlYktpdFdlYlZpZXc6
OmNvbnNvbGUtbWVzc2FnZToKKyAgICAgKiBAd2ViX3ZpZXc6IHRoZSBvYmplY3Qgb24gd2hpY2gg
dGhlIHNpZ25hbCBpcyBlbWl0dGVkCisgICAgICogQG1lc3NhZ2U6IHRoZSBtZXNzYWdlIHRleHQK
KyAgICAgKiBAbGluZTogdGhlIGxpbmUgd2hlcmUgdGhlIGVycm9yIG9jY3VyZWQKKyAgICAgKiBA
c291cmNlX2lkOiB0aGUgc291cmNlIGlkCisgICAgICogQHJldHVybjogVFJVRSB0byBzdG9wIG90
aGVyIGhhbmRsZXJzIGZyb20gYmVpbmcgaW52b2tlZCBmb3IgdGhlIGV2ZW50LiBGQUxTRSB0byBw
cm9wYWdhdGUgdGhlIGV2ZW50IGZ1cnRoZXIuCisgICAgICoKKyAgICAgKiBBIEphdmFTY3JpcHQg
Y29uc29sZSBtZXNzYWdlIHdhcyBjcmVhdGVkLgorICAgICAqLworICAgIHdlYmtpdF93ZWJfdmll
d19zaWduYWxzW0NPTlNPTEVfTUVTU0FHRV0gPSBnX3NpZ25hbF9uZXcoImNvbnNvbGVfbWVzc2Fn
ZSIsCisgICAgICAgICAgICBHX1RZUEVfRlJPTV9DTEFTUyh3ZWJWaWV3Q2xhc3MpLAorICAgICAg
ICAgICAgKEdTaWduYWxGbGFncykoR19TSUdOQUxfUlVOX0xBU1QgfCBHX1NJR05BTF9BQ1RJT04p
LAorICAgICAgICAgICAgR19TVFJVQ1RfT0ZGU0VUKFdlYktpdFdlYlZpZXdDbGFzcywgY29uc29s
ZV9tZXNzYWdlKSwKKyAgICAgICAgICAgIGdfc2lnbmFsX2FjY3VtdWxhdG9yX3RydWVfaGFuZGxl
ZCwKKyAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICB3ZWJraXRfbWFyc2hhbF9CT09MRUFO
X19TVFJJTkdfSU5UX1NUUklORywKKyAgICAgICAgICAgIEdfVFlQRV9CT09MRUFOLCAzLAorICAg
ICAgICAgICAgR19UWVBFX1NUUklORywgR19UWVBFX0lOVCwgR19UWVBFX1NUUklORyk7CisKKyAg
ICAvKioKKyAgICAgKiBXZWJLaXRXZWJWaWV3OjpzY3JpcHQtYWxlcnQ6CisgICAgICogQHdlYl92
aWV3OiB0aGUgb2JqZWN0IG9uIHdoaWNoIHRoZSBzaWduYWwgaXMgZW1pdHRlZAorICAgICAqIEBm
cmFtZTogdGhlIHJlbGV2YW50IGZyYW1lCisgICAgICogQG1lc3NhZ2U6IHRoZSBtZXNzYWdlIHRl
eHQKKyAgICAgKiBAcmV0dXJuOiBUUlVFIHRvIHN0b3Agb3RoZXIgaGFuZGxlcnMgZnJvbSBiZWlu
ZyBpbnZva2VkIGZvciB0aGUgZXZlbnQuIEZBTFNFIHRvIHByb3BhZ2F0ZSB0aGUgZXZlbnQgZnVy
dGhlci4KKyAgICAgKgorICAgICAqIEEgSmF2YVNjcmlwdCBhbGVydCBkaWFsb2cgd2FzIGNyZWF0
ZWQuCisgICAgICovCisgICAgd2Via2l0X3dlYl92aWV3X3NpZ25hbHNbU0NSSVBUX0FMRVJUXSA9
IGdfc2lnbmFsX25ldygic2NyaXB0LWFsZXJ0IiwKKyAgICAgICAgICAgIEdfVFlQRV9GUk9NX0NM
QVNTKHdlYlZpZXdDbGFzcyksCisgICAgICAgICAgICAoR1NpZ25hbEZsYWdzKShHX1NJR05BTF9S
VU5fTEFTVCB8IEdfU0lHTkFMX0FDVElPTiksCisgICAgICAgICAgICBHX1NUUlVDVF9PRkZTRVQo
V2ViS2l0V2ViVmlld0NsYXNzLCBzY3JpcHRfYWxlcnQpLAorICAgICAgICAgICAgZ19zaWduYWxf
YWNjdW11bGF0b3JfdHJ1ZV9oYW5kbGVkLAorICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAg
IHdlYmtpdF9tYXJzaGFsX0JPT0xFQU5fX09CSkVDVF9TVFJJTkcsCisgICAgICAgICAgICBHX1RZ
UEVfQk9PTEVBTiwgMiwKKyAgICAgICAgICAgIEdfVFlQRV9PQkpFQ1QsIEdfVFlQRV9TVFJJTkcp
OworCisgICAgLyoqCisgICAgICogV2ViS2l0V2ViVmlldzo6c2NyaXB0LWNvbmZpcm06CisgICAg
ICogQHdlYl92aWV3OiB0aGUgb2JqZWN0IG9uIHdoaWNoIHRoZSBzaWduYWwgaXMgZW1pdHRlZAor
ICAgICAqIEBmcmFtZTogdGhlIHJlbGV2YW50IGZyYW1lCisgICAgICogQG1lc3NhZ2U6IHRoZSBt
ZXNzYWdlIHRleHQKKyAgICAgKiBAY29uZmlybWVkOiB3aGV0aGVyIHRoZSBkaWFsb2cgaGFzIGJl
ZW4gY29uZmlybWVkCisgICAgICogQHJldHVybjogVFJVRSB0byBzdG9wIG90aGVyIGhhbmRsZXJz
IGZyb20gYmVpbmcgaW52b2tlZCBmb3IgdGhlIGV2ZW50LiBGQUxTRSB0byBwcm9wYWdhdGUgdGhl
IGV2ZW50IGZ1cnRoZXIuCisgICAgICoKKyAgICAgKiBBIEphdmFTY3JpcHQgY29uZmlybSBkaWFs
b2cgd2FzIGNyZWF0ZWQsIHByb3ZpZGluZyBZZXMgYW5kIE5vIGJ1dHRvbnMuCisgICAgICovCisg
ICAgd2Via2l0X3dlYl92aWV3X3NpZ25hbHNbU0NSSVBUX0NPTkZJUk1dID0gZ19zaWduYWxfbmV3
KCJzY3JpcHRfY29uZmlybSIsCisgICAgICAgICAgICBHX1RZUEVfRlJPTV9DTEFTUyh3ZWJWaWV3
Q2xhc3MpLAorICAgICAgICAgICAgKEdTaWduYWxGbGFncykoR19TSUdOQUxfUlVOX0xBU1QgfCBH
X1NJR05BTF9BQ1RJT04pLAorICAgICAgICAgICAgR19TVFJVQ1RfT0ZGU0VUKFdlYktpdFdlYlZp
ZXdDbGFzcywgc2NyaXB0X2NvbmZpcm0pLAorICAgICAgICAgICAgZ19zaWduYWxfYWNjdW11bGF0
b3JfdHJ1ZV9oYW5kbGVkLAorICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgIHdlYmtpdF9t
YXJzaGFsX0JPT0xFQU5fX09CSkVDVF9TVFJJTkdfQk9PTEVBTiwKKyAgICAgICAgICAgIEdfVFlQ
RV9CT09MRUFOLCAzLAorICAgICAgICAgICAgR19UWVBFX09CSkVDVCwgR19UWVBFX1NUUklORywg
R19UWVBFX0JPT0xFQU4pOworCisgICAgLyoqCisgICAgICogV2ViS2l0V2ViVmlldzo6c2NyaXB0
LXByb21wdDoKKyAgICAgKiBAd2ViX3ZpZXc6IHRoZSBvYmplY3Qgb24gd2hpY2ggdGhlIHNpZ25h
bCBpcyBlbWl0dGVkCisgICAgICogQGZyYW1lOiB0aGUgcmVsZXZhbnQgZnJhbWUKKyAgICAgKiBA
bWVzc2FnZTogdGhlIG1lc3NhZ2UgdGV4dAorICAgICAqIEBkZWZhdWx0OiB0aGUgZGVmYXVsdCB2
YWx1ZQorICAgICAqIEB0ZXh0OiBUbyBiZSBmaWxsZWQgd2l0aCB0aGUgcmV0dXJuIHZhbHVlIG9y
IE5VTEwgaWYgdGhlIGRpYWxvZyB3YXMgY2FuY2VsbGVkLgorICAgICAqIEByZXR1cm46IFRSVUUg
dG8gc3RvcCBvdGhlciBoYW5kbGVycyBmcm9tIGJlaW5nIGludm9rZWQgZm9yIHRoZSBldmVudC4g
RkFMU0UgdG8gcHJvcGFnYXRlIHRoZSBldmVudCBmdXJ0aGVyLgorICAgICAqCisgICAgICogQSBK
YXZhU2NyaXB0IHByb21wdCBkaWFsb2cgd2FzIGNyZWF0ZWQsIHByb3ZpZGluZyBhbiBlbnRyeSB0
byBpbnB1dCB0ZXh0LgorICAgICAqLworICAgIHdlYmtpdF93ZWJfdmlld19zaWduYWxzW1NDUklQ
VF9QUk9NUFRdID0gZ19zaWduYWxfbmV3KCJzY3JpcHRfcHJvbXB0IiwKKyAgICAgICAgICAgIEdf
VFlQRV9GUk9NX0NMQVNTKHdlYlZpZXdDbGFzcyksCisgICAgICAgICAgICAoR1NpZ25hbEZsYWdz
KShHX1NJR05BTF9SVU5fTEFTVCB8IEdfU0lHTkFMX0FDVElPTiksCisgICAgICAgICAgICBHX1NU
UlVDVF9PRkZTRVQoV2ViS2l0V2ViVmlld0NsYXNzLCBzY3JpcHRfcHJvbXB0KSwKKyAgICAgICAg
ICAgIGdfc2lnbmFsX2FjY3VtdWxhdG9yX3RydWVfaGFuZGxlZCwKKyAgICAgICAgICAgIE5VTEws
CisgICAgICAgICAgICB3ZWJraXRfbWFyc2hhbF9CT09MRUFOX19PQkpFQ1RfU1RSSU5HX1NUUklO
R19TVFJJTkcsCisgICAgICAgICAgICBHX1RZUEVfQk9PTEVBTiwgNCwKKyAgICAgICAgICAgIEdf
VFlQRV9PQkpFQ1QsIEdfVFlQRV9TVFJJTkcsIEdfVFlQRV9TVFJJTkcsIEdfVFlQRV9QT0lOVEVS
KTsKKworCisgICAgLyoKKyAgICAgKiBpbXBsZW1lbnRhdGlvbnMgb2YgdmlydHVhbCBtZXRob2Rz
CisgICAgICovCisgICAgd2ViVmlld0NsYXNzLT5jcmVhdGVfd2ViX3ZpZXcgPSB3ZWJraXRfd2Vi
X3ZpZXdfcmVhbF9jcmVhdGVfd2ViX3ZpZXc7CisgICAgd2ViVmlld0NsYXNzLT5uYXZpZ2F0aW9u
X3JlcXVlc3RlZCA9IHdlYmtpdF93ZWJfdmlld19yZWFsX25hdmlnYXRpb25fcmVxdWVzdGVkOwor
ICAgIHdlYlZpZXdDbGFzcy0+d2luZG93X29iamVjdF9jbGVhcmVkID0gd2Via2l0X3dlYl92aWV3
X3JlYWxfd2luZG93X29iamVjdF9jbGVhcmVkOworICAgIHdlYlZpZXdDbGFzcy0+Y2hvb3NlX2Zp
bGUgPSB3ZWJraXRfd2ViX3ZpZXdfcmVhbF9jaG9vc2VfZmlsZTsKKyAgICB3ZWJWaWV3Q2xhc3Mt
PnNjcmlwdF9hbGVydCA9IHdlYmtpdF93ZWJfdmlld19yZWFsX3NjcmlwdF9hbGVydDsKKyAgICB3
ZWJWaWV3Q2xhc3MtPnNjcmlwdF9jb25maXJtID0gd2Via2l0X3dlYl92aWV3X3JlYWxfc2NyaXB0
X2NvbmZpcm07CisgICAgd2ViVmlld0NsYXNzLT5zY3JpcHRfcHJvbXB0ID0gd2Via2l0X3dlYl92
aWV3X3JlYWxfc2NyaXB0X3Byb21wdDsKKyAgICB3ZWJWaWV3Q2xhc3MtPmNvbnNvbGVfbWVzc2Fn
ZSA9IHdlYmtpdF93ZWJfdmlld19yZWFsX2NvbnNvbGVfbWVzc2FnZTsKKworICAgIEdfT0JKRUNU
X0NMQVNTKHdlYlZpZXdDbGFzcyktPmZpbmFsaXplID0gd2Via2l0X3dlYl92aWV3X2ZpbmFsaXpl
OworCisgICAgR3RrV2lkZ2V0Q2xhc3MqIHdpZGdldENsYXNzID0gR1RLX1dJREdFVF9DTEFTUyh3
ZWJWaWV3Q2xhc3MpOworICAgIHdpZGdldENsYXNzLT5yZWFsaXplID0gd2Via2l0X3dlYl92aWV3
X3JlYWxpemU7CisgICAgd2lkZ2V0Q2xhc3MtPmV4cG9zZV9ldmVudCA9IHdlYmtpdF93ZWJfdmll
d19leHBvc2VfZXZlbnQ7CisgICAgd2lkZ2V0Q2xhc3MtPmtleV9wcmVzc19ldmVudCA9IHdlYmtp
dF93ZWJfdmlld19rZXlfZXZlbnQ7CisgICAgd2lkZ2V0Q2xhc3MtPmtleV9yZWxlYXNlX2V2ZW50
ID0gd2Via2l0X3dlYl92aWV3X2tleV9ldmVudDsKKyAgICB3aWRnZXRDbGFzcy0+YnV0dG9uX3By
ZXNzX2V2ZW50ID0gd2Via2l0X3dlYl92aWV3X2J1dHRvbl9ldmVudDsKKyAgICB3aWRnZXRDbGFz
cy0+YnV0dG9uX3JlbGVhc2VfZXZlbnQgPSB3ZWJraXRfd2ViX3ZpZXdfYnV0dG9uX2V2ZW50Owor
ICAgIHdpZGdldENsYXNzLT5tb3Rpb25fbm90aWZ5X2V2ZW50ID0gd2Via2l0X3dlYl92aWV3X21v
dGlvbl9ldmVudDsKKyAgICB3aWRnZXRDbGFzcy0+c2Nyb2xsX2V2ZW50ID0gd2Via2l0X3dlYl92
aWV3X3Njcm9sbF9ldmVudDsKKyAgICB3aWRnZXRDbGFzcy0+c2l6ZV9hbGxvY2F0ZSA9IHdlYmtp
dF93ZWJfdmlld19zaXplX2FsbG9jYXRlOworCisgICAgR3RrQ29udGFpbmVyQ2xhc3MqIGNvbnRh
aW5lckNsYXNzID0gR1RLX0NPTlRBSU5FUl9DTEFTUyh3ZWJWaWV3Q2xhc3MpOworICAgIGNvbnRh
aW5lckNsYXNzLT5hZGQgPSB3ZWJraXRfd2ViX3ZpZXdfY29udGFpbmVyX2FkZDsKKyAgICBjb250
YWluZXJDbGFzcy0+cmVtb3ZlID0gd2Via2l0X3dlYl92aWV3X2NvbnRhaW5lcl9yZW1vdmU7Cisg
ICAgY29udGFpbmVyQ2xhc3MtPmZvcmFsbCA9IHdlYmtpdF93ZWJfdmlld19jb250YWluZXJfZm9y
YWxsOworCisgICAgLyoKKyAgICAgKiBtYWtlIHVzIHNjcm9sbGFibGUgKGUuZy4gYWRkYWJsZSB0
byBhIEd0a1Njcm9sbGVkV2luZG93KQorICAgICAqLworICAgIHdlYlZpZXdDbGFzcy0+c2V0X3Nj
cm9sbF9hZGp1c3RtZW50cyA9IHdlYmtpdF93ZWJfdmlld19zZXRfc2Nyb2xsX2FkanVzdG1lbnRz
OworICAgIEdUS19XSURHRVRfQ0xBU1Mod2ViVmlld0NsYXNzKS0+c2V0X3Njcm9sbF9hZGp1c3Rt
ZW50c19zaWduYWwgPSBnX3NpZ25hbF9uZXcoInNldF9zY3JvbGxfYWRqdXN0bWVudHMiLAorICAg
ICAgICAgICAgR19UWVBFX0ZST01fQ0xBU1Mod2ViVmlld0NsYXNzKSwKKyAgICAgICAgICAgIChH
U2lnbmFsRmxhZ3MpKEdfU0lHTkFMX1JVTl9MQVNUIHwgR19TSUdOQUxfQUNUSU9OKSwKKyAgICAg
ICAgICAgIEdfU1RSVUNUX09GRlNFVChXZWJLaXRXZWJWaWV3Q2xhc3MsIHNldF9zY3JvbGxfYWRq
dXN0bWVudHMpLAorICAgICAgICAgICAgTlVMTCwgTlVMTCwKKyAgICAgICAgICAgIHdlYmtpdF9t
YXJzaGFsX1ZPSURfX09CSkVDVF9PQkpFQ1QsCisgICAgICAgICAgICBHX1RZUEVfTk9ORSwgMiwK
KyAgICAgICAgICAgIEdUS19UWVBFX0FESlVTVE1FTlQsIEdUS19UWVBFX0FESlVTVE1FTlQpOwor
fQorCitzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfaW5pdChXZWJLaXRXZWJWaWV3KiB3ZWJW
aWV3KQoreworICAgIFdlYktpdFdlYlZpZXdQcml2YXRlKiB3ZWJWaWV3RGF0YSA9IFdFQktJVF9X
RUJfVklFV19HRVRfUFJJVkFURShXRUJLSVRfV0VCX1ZJRVcod2ViVmlldykpOworICAgIHdlYlZp
ZXdEYXRhLT5jb3JlUGFnZSA9IG5ldyBQYWdlKG5ldyBXZWJLaXQ6OkNocm9tZUNsaWVudCh3ZWJW
aWV3KSwgbmV3IFdlYktpdDo6Q29udGV4dE1lbnVDbGllbnQsIG5ldyBXZWJLaXQ6OkVkaXRvckNs
aWVudCh3ZWJWaWV3KSwgbmV3IFdlYktpdDo6RHJhZ0NsaWVudCwgbmV3IFdlYktpdDo6SW5zcGVj
dG9yQ2xpZW50KTsKKworICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9IHdlYlZpZXdEYXRhLT5jb3Jl
UGFnZS0+c2V0dGluZ3MoKTsKKyAgICBzZXR0aW5ncy0+c2V0TG9hZHNJbWFnZXNBdXRvbWF0aWNh
bGx5KHRydWUpOworICAgIHNldHRpbmdzLT5zZXRNaW5pbXVtRm9udFNpemUoNSk7CisgICAgc2V0
dGluZ3MtPnNldE1pbmltdW1Mb2dpY2FsRm9udFNpemUoNSk7CisgICAgc2V0dGluZ3MtPnNldFNo
b3VsZFByaW50QmFja2dyb3VuZHModHJ1ZSk7CisgICAgc2V0dGluZ3MtPnNldEphdmFTY3JpcHRF
bmFibGVkKHRydWUpOworICAgIHNldHRpbmdzLT5zZXREZWZhdWx0Rml4ZWRGb250U2l6ZSgxNCk7
CisgICAgc2V0dGluZ3MtPnNldERlZmF1bHRGb250U2l6ZSgxNCk7CisgICAgc2V0dGluZ3MtPnNl
dFNlcmlmRm9udEZhbWlseSgiVGltZXMgTmV3IFJvbWFuIik7CisgICAgc2V0dGluZ3MtPnNldFNh
bnNTZXJpZkZvbnRGYW1pbHkoIkFyaWFsIik7CisgICAgc2V0dGluZ3MtPnNldEZpeGVkRm9udEZh
bWlseSgiQ291cmllciBOZXciKTsKKyAgICBzZXR0aW5ncy0+c2V0U3RhbmRhcmRGb250RmFtaWx5
KCJBcmlhbCIpOworCisgICAgR1RLX1dJREdFVF9TRVRfRkxBR1Mod2ViVmlldywgR1RLX0NBTl9G
T0NVUyk7CisgICAgd2ViVmlld0RhdGEtPm1haW5GcmFtZSA9IFdFQktJVF9XRUJfRlJBTUUod2Vi
a2l0X3dlYl9mcmFtZV9uZXcod2ViVmlldykpOworICAgIHdlYlZpZXdEYXRhLT5lZGl0YWJsZSA9
IGZhbHNlOworfQorCitHdGtXaWRnZXQqIHdlYmtpdF93ZWJfdmlld19uZXcodm9pZCkKK3sKKyAg
ICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKGdfb2JqZWN0X25ldyhX
RUJLSVRfVFlQRV9XRUJfVklFVywgTlVMTCkpOworCisgICAgcmV0dXJuIEdUS19XSURHRVQod2Vi
Vmlldyk7Cit9CisKK3ZvaWQgd2Via2l0X3dlYl92aWV3X3NldF9zZXR0aW5ncyhXZWJLaXRXZWJW
aWV3KiB3ZWJWaWV3LCBXZWJLaXRTZXR0aW5ncyogc2V0dGluZ3MpCit7CisgICAgZ19yZXR1cm5f
aWZfZmFpbChXRUJLSVRfSVNfV0VCX1ZJRVcod2ViVmlldykpOworICAgIGdfcmV0dXJuX2lmX2Zh
aWwoc2V0dGluZ3MpOworCisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworV2ViS2l0U2V0dGlu
Z3MqIHdlYmtpdF93ZWJfdmlld19nZXRfc2V0dGluZ3MoV2ViS2l0V2ViVmlldyogd2ViVmlldykK
K3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfV0VCX1ZJRVcod2ViVmlldyks
IE5VTEwpOworCisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gTlVMTDsKK30KKwor
dm9pZCB3ZWJraXRfd2ViX3ZpZXdfZ29fYmFja3dhcmQoV2ViS2l0V2ViVmlldyogd2ViVmlldykK
K3sKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19XRUJfVklFVyh3ZWJWaWV3KSk7CisK
KyAgICBXZWJLaXRXZWJWaWV3UHJpdmF0ZSogd2ViVmlld0RhdGEgPSBXRUJLSVRfV0VCX1ZJRVdf
R0VUX1BSSVZBVEUod2ViVmlldyk7CisgICAgV2ViS2l0V2ViRnJhbWVQcml2YXRlKiBmcmFtZURh
dGEgPSBXRUJLSVRfV0VCX0ZSQU1FX0dFVF9QUklWQVRFKHdlYlZpZXdEYXRhLT5tYWluRnJhbWUp
OworICAgIGZyYW1lRGF0YS0+ZnJhbWUtPmxvYWRlcigpLT5nb0JhY2tPckZvcndhcmQoLTEpOwor
fQorCit2b2lkIHdlYmtpdF93ZWJfdmlld19nb19mb3J3YXJkKFdlYktpdFdlYlZpZXcqIHdlYlZp
ZXcpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfV0VCX1ZJRVcod2ViVmlldykp
OworCisgICAgV2ViS2l0V2ViVmlld1ByaXZhdGUqIHdlYlZpZXdEYXRhID0gV0VCS0lUX1dFQl9W
SUVXX0dFVF9QUklWQVRFKHdlYlZpZXcpOworICAgIFdlYktpdFdlYkZyYW1lUHJpdmF0ZSogZnJh
bWVEYXRhID0gV0VCS0lUX1dFQl9GUkFNRV9HRVRfUFJJVkFURSh3ZWJWaWV3RGF0YS0+bWFpbkZy
YW1lKTsKKyAgICBmcmFtZURhdGEtPmZyYW1lLT5sb2FkZXIoKS0+Z29CYWNrT3JGb3J3YXJkKDEp
OworfQorCitnYm9vbGVhbiB3ZWJraXRfd2ViX3ZpZXdfY2FuX2dvX2JhY2t3YXJkKFdlYktpdFdl
YlZpZXcqIHdlYlZpZXcpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1dF
Ql9WSUVXKHdlYlZpZXcpLCBGQUxTRSk7CisKKyAgICBXZWJLaXRXZWJWaWV3UHJpdmF0ZSogd2Vi
Vmlld0RhdGEgPSBXRUJLSVRfV0VCX1ZJRVdfR0VUX1BSSVZBVEUod2ViVmlldyk7CisgICAgV2Vi
S2l0V2ViRnJhbWVQcml2YXRlKiBmcmFtZURhdGEgPSBXRUJLSVRfV0VCX0ZSQU1FX0dFVF9QUklW
QVRFKHdlYlZpZXdEYXRhLT5tYWluRnJhbWUpOworICAgIHJldHVybiBmcmFtZURhdGEtPmZyYW1l
LT5sb2FkZXIoKS0+Y2FuR29CYWNrT3JGb3J3YXJkKC0xKTsKK30KKworZ2Jvb2xlYW4gd2Via2l0
X3dlYl92aWV3X2Nhbl9nb19mb3J3YXJkKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCit7CisgICAg
Z19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9WSUVXKHdlYlZpZXcpLCBGQUxTRSk7
CisKKyAgICBXZWJLaXRXZWJWaWV3UHJpdmF0ZSogd2ViVmlld0RhdGEgPSBXRUJLSVRfV0VCX1ZJ
RVdfR0VUX1BSSVZBVEUod2ViVmlldyk7CisgICAgV2ViS2l0V2ViRnJhbWVQcml2YXRlKiBmcmFt
ZURhdGEgPSBXRUJLSVRfV0VCX0ZSQU1FX0dFVF9QUklWQVRFKHdlYlZpZXdEYXRhLT5tYWluRnJh
bWUpOworICAgIHJldHVybiBmcmFtZURhdGEtPmZyYW1lLT5sb2FkZXIoKS0+Y2FuR29CYWNrT3JG
b3J3YXJkKDEpOworfQorCit2b2lkIHdlYmtpdF93ZWJfdmlld19vcGVuKFdlYktpdFdlYlZpZXcq
IHdlYlZpZXcsIGNvbnN0IGdjaGFyKiB1cmkpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJL
SVRfSVNfV0VCX1ZJRVcod2ViVmlldykpOworCisgICAgV2ViS2l0V2ViVmlld1ByaXZhdGUqIHdl
YlZpZXdEYXRhID0gV0VCS0lUX1dFQl9WSUVXX0dFVF9QUklWQVRFKHdlYlZpZXcpOworICAgIFdl
YktpdFdlYkZyYW1lUHJpdmF0ZSogZnJhbWVEYXRhID0gV0VCS0lUX1dFQl9GUkFNRV9HRVRfUFJJ
VkFURSh3ZWJWaWV3RGF0YS0+bWFpbkZyYW1lKTsKKworICAgIERlcHJlY2F0ZWRTdHJpbmcgc3Ry
aW5nID0gRGVwcmVjYXRlZFN0cmluZzo6ZnJvbVV0ZjgodXJpKTsKKyAgICBmcmFtZURhdGEtPmZy
YW1lLT5sb2FkZXIoKS0+bG9hZChSZXNvdXJjZVJlcXVlc3QoS1VSTChzdHJpbmcpKSk7Cit9CisK
K3ZvaWQgd2Via2l0X3dlYl92aWV3X3JlbG9hZChXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQorewor
ICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9WSUVXKHdlYlZpZXcpKTsKKworICAg
IFdlYktpdFdlYlZpZXdQcml2YXRlKiB3ZWJWaWV3RGF0YSA9IFdFQktJVF9XRUJfVklFV19HRVRf
UFJJVkFURSh3ZWJWaWV3KTsKKyAgICBXZWJLaXRXZWJGcmFtZVByaXZhdGUqIGZyYW1lRGF0YSA9
IFdFQktJVF9XRUJfRlJBTUVfR0VUX1BSSVZBVEUod2ViVmlld0RhdGEtPm1haW5GcmFtZSk7Cisg
ICAgZnJhbWVEYXRhLT5mcmFtZS0+bG9hZGVyKCktPnJlbG9hZCgpOworfQorCit2b2lkIHdlYmtp
dF93ZWJfdmlld19sb2FkX3N0cmluZyhXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBjb25zdCBnY2hh
ciogY29udGVudCwgY29uc3QgZ2NoYXIqIGNvbnRlbnRNaW1lVHlwZSwgY29uc3QgZ2NoYXIqIGNv
bnRlbnRFbmNvZGluZywgY29uc3QgZ2NoYXIqIGJhc2VVcmkpCit7CisgICAgZ19yZXR1cm5faWZf
ZmFpbChXRUJLSVRfSVNfV0VCX1ZJRVcod2ViVmlldykpOworCisgICAgV2ViS2l0V2ViVmlld1By
aXZhdGUqIHdlYlZpZXdEYXRhID0gV0VCS0lUX1dFQl9WSUVXX0dFVF9QUklWQVRFKHdlYlZpZXcp
OworICAgIFdlYktpdFdlYkZyYW1lUHJpdmF0ZSogZnJhbWVEYXRhID0gV0VCS0lUX1dFQl9GUkFN
RV9HRVRfUFJJVkFURSh3ZWJWaWV3RGF0YS0+bWFpbkZyYW1lKTsKKworICAgIEtVUkwgdXJsKERl
cHJlY2F0ZWRTdHJpbmc6OmZyb21VdGY4KGJhc2VVcmkpKTsKKyAgICBSZWZQdHI8U2hhcmVkQnVm
ZmVyPiBzaGFyZWRCdWZmZXIgPSBuZXcgU2hhcmVkQnVmZmVyKHN0cmR1cChjb250ZW50KSwgc3Ry
bGVuKGNvbnRlbnQpKTsKKyAgICBTdWJzdGl0dXRlRGF0YSBzdWJzdGl0dXRlRGF0YShzaGFyZWRC
dWZmZXIucmVsZWFzZSgpLCBTdHJpbmcoY29udGVudE1pbWVUeXBlKSwgU3RyaW5nKGNvbnRlbnRF
bmNvZGluZyksIEtVUkwoImFib3V0OmJsYW5rIiksIHVybCk7CisKKyAgICBmcmFtZURhdGEtPmZy
YW1lLT5sb2FkZXIoKS0+bG9hZChSZXNvdXJjZVJlcXVlc3QodXJsKSwgc3Vic3RpdHV0ZURhdGEp
OworfQorCit2b2lkIHdlYmtpdF93ZWJfdmlld19sb2FkX2h0bWxfc3RyaW5nKFdlYktpdFdlYlZp
ZXcqIHdlYlZpZXcsIGNvbnN0IGdjaGFyKiBjb250ZW50LCBjb25zdCBnY2hhciogYmFzZVVybCkK
K3sKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19XRUJfVklFVyh3ZWJWaWV3KSk7CisK
KyAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9zdHJpbmcod2ViVmlldywgY29udGVudCwgInRleHQv
aHRtbCIsICJVVEYtOCIsIGJhc2VVcmwpOworfQorCit2b2lkIHdlYmtpdF93ZWJfdmlld19zdG9w
X2xvYWRpbmcoV2ViS2l0V2ViVmlldyogd2ViVmlldykKK3sKKyAgICBnX3JldHVybl9pZl9mYWls
KFdFQktJVF9JU19XRUJfVklFVyh3ZWJWaWV3KSk7CisKKyAgICBXZWJLaXRXZWJWaWV3UHJpdmF0
ZSogd2ViVmlld0RhdGEgPSBXRUJLSVRfV0VCX1ZJRVdfR0VUX1BSSVZBVEUod2ViVmlldyk7Cisg
ICAgV2ViS2l0V2ViRnJhbWVQcml2YXRlKiBmcmFtZURhdGEgPSBXRUJLSVRfV0VCX0ZSQU1FX0dF
VF9QUklWQVRFKHdlYlZpZXdEYXRhLT5tYWluRnJhbWUpOworCisgICAgaWYgKEZyYW1lTG9hZGVy
KiBsb2FkZXIgPSBmcmFtZURhdGEtPmZyYW1lLT5sb2FkZXIoKSkKKyAgICAgICAgbG9hZGVyLT5z
dG9wQWxsTG9hZGVycygpOworfQorCitXZWJLaXRXZWJGcmFtZSogd2Via2l0X3dlYl92aWV3X2dl
dF9tYWluX2ZyYW1lKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCit7CisgICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9WSUVXKHdlYlZpZXcpLCBOVUxMKTsKKworICAgIFdlYktp
dFdlYlZpZXdQcml2YXRlKiB3ZWJWaWV3RGF0YSA9IFdFQktJVF9XRUJfVklFV19HRVRfUFJJVkFU
RSh3ZWJWaWV3KTsKKyAgICByZXR1cm4gd2ViVmlld0RhdGEtPm1haW5GcmFtZTsKK30KKwordm9p
ZCB3ZWJraXRfd2ViX3ZpZXdfZXhlY3V0ZV9zY3JpcHQoV2ViS2l0V2ViVmlldyogd2ViVmlldywg
Y29uc3QgZ2NoYXIqIHNjcmlwdCkKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19X
RUJfVklFVyh3ZWJWaWV3KSk7CisgICAgZ19yZXR1cm5faWZfZmFpbChzY3JpcHQpOworCisgICAg
V2ViS2l0V2ViVmlld1ByaXZhdGUqIHdlYlZpZXdEYXRhID0gV0VCS0lUX1dFQl9WSUVXX0dFVF9Q
UklWQVRFKHdlYlZpZXcpOworICAgIFdlYktpdFdlYkZyYW1lUHJpdmF0ZSogZnJhbWVEYXRhID0g
V0VCS0lUX1dFQl9GUkFNRV9HRVRfUFJJVkFURSh3ZWJWaWV3RGF0YS0+bWFpbkZyYW1lKTsKKwor
ICAgIGlmIChGcmFtZUxvYWRlciogbG9hZGVyID0gZnJhbWVEYXRhLT5mcmFtZS0+bG9hZGVyKCkp
CisgICAgICAgIGxvYWRlci0+ZXhlY3V0ZVNjcmlwdChTdHJpbmc6OmZyb21VVEY4KHNjcmlwdCks
IHRydWUpOworfQorCisvKioKKyAqIHdlYmtpdF93ZWJfdmlld19nZXRfZWRpdGFibGU6CisgKiBA
d2ViX3ZpZXc6IGEgI1dlYktpdFdlYlZpZXcKKyAqCisgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIHVz
ZXIgaXMgYWxsb3dlZCB0byBlZGl0IHRoZSBkb2N1bWVudC4KKyAqCisgKiBSZXR1cm5zICVUUlVF
IGlmIEB3ZWJfdmlldyBhbGxvd3MgdGhlIHVzZXIgdG8gZWRpdCB0aGUgSFRNTCBkb2N1bWVudCwg
JUZBTFNFIGlmCisgKiBpdCBkb2Vzbid0LiBZb3UgY2FuIGNoYW5nZSBAd2ViX3ZpZXcncyBkb2N1
bWVudCBwcm9ncmFtbWF0aWNhbGx5IHJlZ2FyZGxlc3Mgb2YKKyAqIHRoaXMgc2V0dGluZy4KKyAq
CisgKiBSZXR1cm4gdmFsdWU6IGEgI2dib29sZWFuIGluZGljYXRpbmcgdGhlIGVkaXRhYmxlIHN0
YXRlCisgKi8KK2dib29sZWFuIHdlYmtpdF93ZWJfdmlld19nZXRfZWRpdGFibGUoV2ViS2l0V2Vi
Vmlldyogd2ViVmlldykKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfV0VC
X1ZJRVcod2ViVmlldyksIEZBTFNFKTsKKworICAgIFdlYktpdFdlYlZpZXdQcml2YXRlKiB3ZWJW
aWV3RGF0YSA9IFdFQktJVF9XRUJfVklFV19HRVRfUFJJVkFURSh3ZWJWaWV3KTsKKyAgICBBU1NF
UlQod2ViVmlld0RhdGEpOworCisgICAgcmV0dXJuIHdlYlZpZXdEYXRhLT5lZGl0YWJsZTsKK30K
KworLyoqCisgKiB3ZWJraXRfd2ViX3ZpZXdfc2V0X2VkaXRhYmxlOgorICogQHdlYl92aWV3OiBh
ICNXZWJLaXRXZWJWaWV3CisgKiBAZmxhZzogYSAjZ2Jvb2xlYW4gaW5kaWNhdGluZyB0aGUgZWRp
dGFibGUgc3RhdGUKKyAqCisgKiBTZXRzIHdoZXRoZXIgQHdlYl92aWV3IGFsbG93cyB0aGUgdXNl
ciB0byBlZGl0IGl0cyBIVE1MIGRvY3VtZW50LgorICoKKyAqIElmIEBmbGFnIGlzICVUUlVFLCBA
d2ViX3ZpZXcgYWxsb3dzIHRoZSB1c2VyIHRvIGVkaXQgdGhlIGRvY3VtZW50LiBJZiBAZmxhZyBp
cworICogJUZBTFNFLCBhbiBlbGVtZW50IGluIEB3ZWJfdmlldydzIGRvY3VtZW50IGNhbiBvbmx5
IGJlIGVkaXRlZCBpZiB0aGUKKyAqIENPTlRFTlRFRElUQUJMRSBhdHRyaWJ1dGUgaGFzIGJlZW4g
c2V0IG9uIHRoZSBlbGVtZW50IG9yIG9uZSBvZiBpdHMgcGFyZW50CisgKiBlbGVtZW50cy4gWW91
IGNhbiBjaGFuZ2UgQHdlYl92aWV3J3MgZG9jdW1lbnQgcHJvZ3JhbW1hdGljYWxseSByZWdhcmRs
ZXNzIG9mCisgKiB0aGlzIHNldHRpbmcuIEJ5IGRlZmF1bHQgYSAjV2ViS2l0V2ViVmlldyBpcyBu
b3QgZWRpdGFibGUuCisKKyAqIE5vcm1hbGx5LCBhbiBIVE1MIGRvY3VtZW50IGlzIG5vdCBlZGl0
YWJsZSB1bmxlc3MgdGhlIGVsZW1lbnRzIHdpdGhpbiB0aGUKKyAqIGRvY3VtZW50IGFyZSBlZGl0
YWJsZS4gVGhpcyBmdW5jdGlvbiBwcm92aWRlcyBhIGxvdy1sZXZlbCB3YXkgdG8gbWFrZSB0aGUK
KyAqIGNvbnRlbnRzIG9mIGEgI1dlYktpdFdlYlZpZXcgZWRpdGFibGUgd2l0aG91dCBhbHRlcmlu
ZyB0aGUgZG9jdW1lbnQgb3IgRE9NCisgKiBzdHJ1Y3R1cmUuCisgKi8KK3ZvaWQgd2Via2l0X3dl
Yl92aWV3X3NldF9lZGl0YWJsZShXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBnYm9vbGVhbiBmbGFn
KQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9WSUVXKHdlYlZpZXcpKTsK
KyAgICBmbGFnID0gZmxhZyAhPSBGQUxTRTsKKworICAgIFdlYktpdFdlYlZpZXdQcml2YXRlKiB3
ZWJWaWV3RGF0YSA9IFdFQktJVF9XRUJfVklFV19HRVRfUFJJVkFURSh3ZWJWaWV3KTsKKyAgICBB
U1NFUlQod2ViVmlld0RhdGEpOworCisgICAgRnJhbWUqIG1haW5GcmFtZSA9IGNvcmUod2ViVmll
d0RhdGEtPm1haW5GcmFtZSk7CisgICAgZ19yZXR1cm5faWZfZmFpbChtYWluRnJhbWUpOworCisg
ICAgLy8gVE9ETzogV2hhdCBoYXBwZW5zIHdoZW4gdGhlIGZyYW1lIGlzIHJlcGxhY2VkPworICAg
IGlmIChmbGFnID09IHdlYlZpZXdEYXRhLT5lZGl0YWJsZSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgd2ViVmlld0RhdGEtPmVkaXRhYmxlID0gZmxhZzsKKworICAgIGlmIChmbGFnKSB7CisgICAg
ICAgIG1haW5GcmFtZS0+YXBwbHlFZGl0aW5nU3R5bGVUb0JvZHlFbGVtZW50KCk7CisgICAgICAg
IC8vIFRPRE86IElmIHRoZSBXZWJLaXRXZWJWaWV3IGlzIG1hZGUgZWRpdGFibGUgYW5kIHRoZSBz
ZWxlY3Rpb24gaXMgZW1wdHksIHNldCBpdCB0byBzb21ldGhpbmcuCisgICAgICAgIC8vaWYgKCF3
ZWJraXRfd2ViX3ZpZXdfZ2V0X3NlbGVjdGVkX2RvbV9yYW5nZSh3ZWJWaWV3KSkKKyAgICAgICAg
Ly8gICAgbWFpbkZyYW1lLT5zZXRTZWxlY3Rpb25Gcm9tTm9uZSgpOworICAgIH0gZWxzZQorICAg
ICAgICBtYWluRnJhbWUtPnJlbW92ZUVkaXRpbmdTdHlsZUZyb21Cb2R5RWxlbWVudCgpOworfQor
Cit9CkluZGV4OiBXZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0d2Vidmlldy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYktpdC9ndGsvV2ViVmlldy93ZWJraXR3ZWJ2aWV3LmgJKHJldmlzaW9uIDApCisrKyBX
ZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0d2Vidmlldy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDEzNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5
dGhlcgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAq
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBs
ZSwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAq
ICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uIAorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5E
IElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisg
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
Zm5kZWYgV0VCS0lUX1dFQl9WSUVXX0gKKyNkZWZpbmUgV0VCS0lUX1dFQl9WSUVXX0gKKworI2lu
Y2x1ZGUgPGd0ay9ndGsuaD4KKworI2luY2x1ZGUgIndlYmtpdGRlZmluZXMuaCIKKyNpbmNsdWRl
ICJ3ZWJraXRzZXR0aW5ncy5oIgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX1RZ
UEVfV0VCX1ZJRVcgICAgICAgICAgICAod2Via2l0X3dlYl92aWV3X2dldF90eXBlKCkpCisjZGVm
aW5lIFdFQktJVF9XRUJfVklFVyhvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5D
RV9DQVNUKChvYmopLCBXRUJLSVRfVFlQRV9XRUJfVklFVywgV2ViS2l0V2ViVmlldykpCisjZGVm
aW5lIFdFQktJVF9XRUJfVklFV19DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19D
QVNUKChrbGFzcyksICBXRUJLSVRfVFlQRV9XRUJfVklFVywgV2ViS2l0V2ViVmlld0NsYXNzKSkK
KyNkZWZpbmUgV0VCS0lUX0lTX1dFQl9WSUVXKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lO
U1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9UWVBFX1dFQl9WSUVXKSkKKyNkZWZpbmUgV0VCS0lU
X0lTX1dFQl9WSUVXX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNz
KSwgIFdFQktJVF9UWVBFX1dFQl9WSUVXKSkKKyNkZWZpbmUgV0VCS0lUX1dFQl9WSUVXX0dFVF9D
TEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9UWVBF
X1dFQl9WSUVXLCBXZWJLaXRXZWJWaWV3Q2xhc3MpKQorCisKK3R5cGVkZWYgZW51bSB7CisgICAg
V0VCS0lUX05BVklHQVRJT05fUkVTUE9OU0VfQUNDRVBULAorICAgIFdFQktJVF9OQVZJR0FUSU9O
X1JFU1BPTlNFX0lHTk9SRSwKKyAgICBXRUJLSVRfTkFWSUdBVElPTl9SRVNQT05TRV9ET1dOTE9B
RAorfSBXZWJLaXROYXZpZ2F0aW9uUmVzcG9uc2U7CisKKworCitzdHJ1Y3QgX1dlYktpdFdlYlZp
ZXcgeworICAgIEd0a0NvbnRhaW5lciBwYXJlbnQ7Cit9OworCitzdHJ1Y3QgX1dlYktpdFdlYlZp
ZXdDbGFzcyB7CisgICAgR3RrQ29udGFpbmVyQ2xhc3MgcGFyZW50OworCisgICAgLyoKKyAgICAg
KiBkZWZhdWx0IGhhbmRsZXIvdmlydHVhbCBtZXRob2RzCisgICAgICogRElTQ1VTUzogY3JlYXRl
X3dlYl92aWV3IG5lZWRzIGEgcmVxdWVzdCBhbmQgc2hvdWxkIHdlIG1ha2UgdGhpcyBhIHNpZ25h
bCB3aXRoIGRlZmF1bHQgaGFuZGxlcj8gdGhpcyB3b3VsZAorICAgICAqIHJlcXVpcmUgc29tZW9u
ZSBkb2luZyBhIGdfc2lnbmFsX3N0b3BfZW1pc3Npb25fYnlfbmFtZQorICAgICAqIFdlYlVJRGVs
ZWdhdGUgaGFzIG5vdGhpbmcgZm9yIGNyZWF0ZV9mcmFtZSwgV2ViUG9saWN5RGVsZWdhdGUgYXMg
d2VsbC4uLgorICAgICAqLworICAgIFdlYktpdFdlYlZpZXcqICAoKmNyZWF0ZV93ZWJfdmlldykg
IChXZWJLaXRXZWJWaWV3KiB3ZWJfdmlldyk7CisKKyAgICAvKgorICAgICAqIFRPRE86IEZJWE1F
OiBDcmVhdGUgc29tZXRoaW5nIGxpa2UgV2ViUG9saWN5RGVjaXNpb25MaXN0ZW5lcl9Qcm90b2Nv
bCBpbnN0ZWFkCisgICAgICovCisgICAgV2ViS2l0TmF2aWdhdGlvblJlc3BvbnNlICgqbmF2aWdh
dGlvbl9yZXF1ZXN0ZWQpIChXZWJLaXRXZWJWaWV3KiB3ZWJfdmlldywgV2ViS2l0V2ViRnJhbWUq
IGZyYW1lLCBXZWJLaXROZXR3b3JrUmVxdWVzdCogcmVxdWVzdCk7CisKKyAgICB2b2lkICgqd2lu
ZG93X29iamVjdF9jbGVhcmVkKSAoV2ViS2l0V2ViVmlldyogd2ViX3ZpZXcsIFdlYktpdFdlYkZy
YW1lKiBmcmFtZSwgSlNHbG9iYWxDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIHdpbmRv
d19vYmplY3QpOworICAgIGdjaGFyKiAgICgqY2hvb3NlX2ZpbGUpIChXZWJLaXRXZWJWaWV3KiB3
ZWJfdmlldywgV2ViS2l0V2ViRnJhbWUqIGZyYW1lLCBjb25zdCBnY2hhciogb2xkX2ZpbGUpOwor
ICAgIGdib29sZWFuICgqc2NyaXB0X2FsZXJ0KSAoV2ViS2l0V2ViVmlldyogd2ViX3ZpZXcsIFdl
YktpdFdlYkZyYW1lKiBmcmFtZSwgY29uc3QgZ2NoYXIqIGFsZXJ0X21lc3NhZ2UpOworICAgIGdi
b29sZWFuICgqc2NyaXB0X2NvbmZpcm0pIChXZWJLaXRXZWJWaWV3KiB3ZWJfdmlldywgV2ViS2l0
V2ViRnJhbWUqIGZyYW1lLCBjb25zdCBnY2hhciogY29uZmlybV9tZXNzYWdlLCBnYm9vbGVhbiog
ZGlkX2NvbmZpcm0pOworICAgIGdib29sZWFuICgqc2NyaXB0X3Byb21wdCkgKFdlYktpdFdlYlZp
ZXcqIHdlYl92aWV3LCBXZWJLaXRXZWJGcmFtZSogZnJhbWUsIGNvbnN0IGdjaGFyKiBtZXNzYWdl
LCBjb25zdCBnY2hhciogZGVmYXVsdF92YWx1ZSwgZ2NoYXIqKiB2YWx1ZSk7CisgICAgZ2Jvb2xl
YW4gKCpjb25zb2xlX21lc3NhZ2UpIChXZWJLaXRXZWJWaWV3KiB3ZWJfdmlldywgY29uc3QgZ2No
YXIqIG1lc3NhZ2UsIHVuc2lnbmVkIGludCBsaW5lX251bWJlciwgY29uc3QgZ2NoYXIqIHNvdXJj
ZV9pZCk7CisKKyAgICAvKgorICAgICAqIGludGVybmFsCisgICAgICovCisgICAgdm9pZCAgICgq
c2V0X3Njcm9sbF9hZGp1c3RtZW50cykgKFdlYktpdFdlYlZpZXcqLCBHdGtBZGp1c3RtZW50Kiwg
R3RrQWRqdXN0bWVudCopOworfTsKKworV0VCS0lUX0FQSSBHVHlwZQord2Via2l0X3dlYl92aWV3
X2dldF90eXBlICh2b2lkKTsKKworV0VCS0lUX0FQSSBHdGtXaWRnZXQqCit3ZWJraXRfd2ViX3Zp
ZXdfbmV3ICh2b2lkKTsKKworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0X3dlYl92aWV3X2Nh
bl9nb19iYWNrd2FyZCAoV2ViS2l0V2ViVmlldyogd2ViX3ZpZXcpOworCitXRUJLSVRfQVBJIGdi
b29sZWFuCit3ZWJraXRfd2ViX3ZpZXdfY2FuX2dvX2ZvcndhcmQgKFdlYktpdFdlYlZpZXcqIHdl
Yl92aWV3KTsKKworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfd2ViX3ZpZXdfZ29fYmFja3dhcmQg
KFdlYktpdFdlYlZpZXcqIHdlYl92aWV3KTsKKworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfd2Vi
X3ZpZXdfZ29fZm9yd2FyZCAoV2ViS2l0V2ViVmlldyogd2ViX3ZpZXcpOworCitXRUJLSVRfQVBJ
IHZvaWQKK3dlYmtpdF93ZWJfdmlld19zdG9wX2xvYWRpbmcgKFdlYktpdFdlYlZpZXcqIHdlYl92
aWV3KTsKKworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfd2ViX3ZpZXdfb3BlbiAoV2ViS2l0V2Vi
Vmlldyogd2ViX3ZpZXcsIGNvbnN0IGdjaGFyKiB1cmkpOworCitXRUJLSVRfQVBJIHZvaWQKK3dl
YmtpdF93ZWJfdmlld19yZWxvYWQgKFdlYktpdFdlYlZpZXcgKndlYl92aWV3KTsKKworV0VCS0lU
X0FQSSB2b2lkCit3ZWJraXRfd2ViX3ZpZXdfbG9hZF9zdHJpbmcgKFdlYktpdFdlYlZpZXcqIHdl
Yl92aWV3LCBjb25zdCBnY2hhciogY29udGVudCwgY29uc3QgZ2NoYXIqIGNvbnRlbnRfbWltZV90
eXBlLCBjb25zdCBnY2hhciogY29udGVudF9lbmNvZGluZywgY29uc3QgZ2NoYXIqIGJhc2VfdXJp
KTsKKworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfd2ViX3ZpZXdfbG9hZF9odG1sX3N0cmluZyAo
V2ViS2l0V2ViVmlldyogd2ViX3ZpZXcsIGNvbnN0IGdjaGFyKiBjb250ZW50LCBjb25zdCBnY2hh
ciogYmFzZV91cmkpOworCitXRUJLSVRfQVBJIFdlYktpdFdlYkZyYW1lKgord2Via2l0X3dlYl92
aWV3X2dldF9tYWluX2ZyYW1lIChXZWJLaXRXZWJWaWV3KiB3ZWJfdmlldyk7CisKK1dFQktJVF9B
UEkgdm9pZAord2Via2l0X3dlYl92aWV3X2V4ZWN1dGVfc2NyaXB0IChXZWJLaXRXZWJWaWV3KiB3
ZWJfdmlldywgY29uc3QgZ2NoYXIqIHNjcmlwdCk7CisKK1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dl
YmtpdF93ZWJfdmlld19nZXRfZWRpdGFibGUgKFdlYktpdFdlYlZpZXcqIHdlYl92aWV3KTsKKwor
V0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfd2ViX3ZpZXdfc2V0X2VkaXRhYmxlIChXZWJLaXRXZWJW
aWV3KiB3ZWJfdmlldywgZ2Jvb2xlYW4gZmxhZyk7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZgpJ
bmRleDogV2ViS2l0VG9vbHMvR3RrTGF1bmNoZXIvbWFpbi5jCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktp
dFRvb2xzL0d0a0xhdW5jaGVyL21haW4uYwkocmV2aXNpb24gMjgyNTEpCisrKyBXZWJLaXRUb29s
cy9HdGtMYXVuY2hlci9tYWluLmMJKHdvcmtpbmcgY29weSkKQEAgLTI0LDE0ICsyNCwxNCBAQAog
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KICAqLwogCi0jaW5jbHVkZSAid2Via2l0Z3RrcGFnZS5oIgotI2luY2x1
ZGUgIndlYmtpdGd0a2dsb2JhbC5oIgorI2luY2x1ZGUgIndlYmtpdHdlYnZpZXcuaCIKKyNpbmNs
dWRlICJ3ZWJraXRnbG9iYWwuaCIKICNpbmNsdWRlIDxndGsvZ3RrLmg+CiAKIHN0YXRpYyBHdGtX
aWRnZXQqIG1haW5fd2luZG93Owogc3RhdGljIEd0a1dpZGdldCogdXJpX2VudHJ5Owogc3RhdGlj
IEd0a1N0YXR1c2JhciogbWFpbl9zdGF0dXNiYXI7Ci1zdGF0aWMgV2ViS2l0UGFnZSogd2ViX3Bh
Z2U7CitzdGF0aWMgV2ViS2l0V2ViVmlldyogd2ViX3ZpZXc7CiBzdGF0aWMgZ2NoYXIqIG1haW5f
dGl0bGU7CiBzdGF0aWMgZ2ludCBsb2FkX3Byb2dyZXNzOwogc3RhdGljIGd1aW50IHN0YXR1c19j
b250ZXh0X2lkOwpAQCAtNDEsNyArNDEsNyBAQCBhY3RpdmF0ZV91cmlfZW50cnlfY2IgKEd0a1dp
ZGdldCogZW50cnksCiB7CiAgICAgY29uc3QgZ2NoYXIqIHVyaSA9IGd0a19lbnRyeV9nZXRfdGV4
dCAoR1RLX0VOVFJZIChlbnRyeSkpOwogICAgIGdfYXNzZXJ0ICh1cmkpOwotICAgIHdlYmtpdF9w
YWdlX29wZW4gKHdlYl9wYWdlLCB1cmkpOworICAgIHdlYmtpdF93ZWJfdmlld19vcGVuICh3ZWJf
dmlldywgdXJpKTsKIH0KIAogc3RhdGljIHZvaWQKQEAgLTU3LDcgKzU3LDcgQEAgdXBkYXRlX3Rp
dGxlIChHdGtXaW5kb3cqIHdpbmRvdykKIH0KIAogc3RhdGljIHZvaWQKLWxpbmtfaG92ZXJfY2Ig
KFdlYktpdFBhZ2UqIHBhZ2UsIGNvbnN0IGdjaGFyKiB0aXRsZSwgY29uc3QgZ2NoYXIqIGxpbmss
IGdwb2ludGVyIGRhdGEpCitsaW5rX2hvdmVyX2NiIChXZWJLaXRXZWJWaWV3KiBwYWdlLCBjb25z
dCBnY2hhciogdGl0bGUsIGNvbnN0IGdjaGFyKiBsaW5rLCBncG9pbnRlciBkYXRhKQogewogICAg
IC8qIHVuZGVyZmxvdyBpcyBhbGxvd2VkICovCiAgICAgZ3RrX3N0YXR1c2Jhcl9wb3AgKG1haW5f
c3RhdHVzYmFyLCBzdGF0dXNfY29udGV4dF9pZCk7CkBAIC02Niw3ICs2Niw3IEBAIGxpbmtfaG92
ZXJfY2IgKFdlYktpdFBhZ2UqIHBhZ2UsIGNvbnN0IGcKIH0KIAogc3RhdGljIHZvaWQKLXRpdGxl
X2NoYW5nZV9jYiAoV2ViS2l0UGFnZSogcGFnZSwgY29uc3QgZ2NoYXIqIHRpdGxlLCBjb25zdCBn
Y2hhciogdXJpLCBncG9pbnRlciBkYXRhKQordGl0bGVfY2hhbmdlX2NiIChXZWJLaXRXZWJWaWV3
KiBwYWdlLCBjb25zdCBnY2hhciogdGl0bGUsIGNvbnN0IGdjaGFyKiB1cmksIGdwb2ludGVyIGRh
dGEpCiB7CiAgICAgZ3RrX2VudHJ5X3NldF90ZXh0IChHVEtfRU5UUlkgKHVyaV9lbnRyeSksIHVy
aSk7CiAKQEAgLTc3LDcgKzc3LDcgQEAgdGl0bGVfY2hhbmdlX2NiIChXZWJLaXRQYWdlKiBwYWdl
LCBjb25zdAogfQogCiBzdGF0aWMgdm9pZAotcHJvZ3Jlc3NfY2hhbmdlX2NiIChXZWJLaXRQYWdl
KiBwYWdlLCBnaW50IHByb2dyZXNzLCBncG9pbnRlciBkYXRhKQorcHJvZ3Jlc3NfY2hhbmdlX2Ni
IChXZWJLaXRXZWJWaWV3KiBwYWdlLCBnaW50IHByb2dyZXNzLCBncG9pbnRlciBkYXRhKQogewog
ICAgIGxvYWRfcHJvZ3Jlc3MgPSBwcm9ncmVzczsKICAgICB1cGRhdGVfdGl0bGUgKEdUS19XSU5E
T1cgKG1haW5fd2luZG93KSk7CkBAIC05MiwxMyArOTIsMTMgQEAgZGVzdHJveV9jYiAoR3RrV2lk
Z2V0KiB3aWRnZXQsIGdwb2ludGVyIAogc3RhdGljIHZvaWQKIGdvX2JhY2tfY2IgKEd0a1dpZGdl
dCogd2lkZ2V0LCBncG9pbnRlciBkYXRhKQogewotICAgIHdlYmtpdF9wYWdlX2dvX2JhY2t3YXJk
ICh3ZWJfcGFnZSk7CisgICAgd2Via2l0X3dlYl92aWV3X2dvX2JhY2t3YXJkICh3ZWJfdmlldyk7
CiB9CiAKIHN0YXRpYyB2b2lkCiBnb19mb3J3YXJkX2NiIChHdGtXaWRnZXQqIHdpZGdldCwgZ3Bv
aW50ZXIgZGF0YSkKIHsKLSAgICB3ZWJraXRfcGFnZV9nb19mb3J3YXJkICh3ZWJfcGFnZSk7Cisg
ICAgd2Via2l0X3dlYl92aWV3X2dvX2ZvcndhcmQgKHdlYl92aWV3KTsKIH0KIAogc3RhdGljIEd0
a1dpZGdldCoKQEAgLTEwNywxMiArMTA3LDEyIEBAIGNyZWF0ZV9icm93c2VyICgpCiAgICAgR3Rr
V2lkZ2V0KiBzY3JvbGxlZF93aW5kb3cgPSBndGtfc2Nyb2xsZWRfd2luZG93X25ldyAoTlVMTCwg
TlVMTCk7CiAgICAgZ3RrX3Njcm9sbGVkX3dpbmRvd19zZXRfcG9saWN5IChHVEtfU0NST0xMRURf
V0lORE9XIChzY3JvbGxlZF93aW5kb3cpLCBHVEtfUE9MSUNZX0FVVE9NQVRJQywgR1RLX1BPTElD
WV9BVVRPTUFUSUMpOwogCi0gICAgd2ViX3BhZ2UgPSBXRUJLSVRfUEFHRSAod2Via2l0X3BhZ2Vf
bmV3ICgpKTsKLSAgICBndGtfY29udGFpbmVyX2FkZCAoR1RLX0NPTlRBSU5FUiAoc2Nyb2xsZWRf
d2luZG93KSwgR1RLX1dJREdFVCAod2ViX3BhZ2UpKTsKKyAgICB3ZWJfdmlldyA9IFdFQktJVF9X
RUJfVklFVyAod2Via2l0X3dlYl92aWV3X25ldyAoKSk7CisgICAgZ3RrX2NvbnRhaW5lcl9hZGQg
KEdUS19DT05UQUlORVIgKHNjcm9sbGVkX3dpbmRvdyksIEdUS19XSURHRVQgKHdlYl92aWV3KSk7
CiAKLSAgICBnX3NpZ25hbF9jb25uZWN0IChHX09CSkVDVCAod2ViX3BhZ2UpLCAidGl0bGUtY2hh
bmdlZCIsIEdfQ0FMTEJBQ0sgKHRpdGxlX2NoYW5nZV9jYiksIHdlYl9wYWdlKTsKLSAgICBnX3Np
Z25hbF9jb25uZWN0IChHX09CSkVDVCAod2ViX3BhZ2UpLCAibG9hZC1wcm9ncmVzcy1jaGFuZ2Vk
IiwgR19DQUxMQkFDSyAocHJvZ3Jlc3NfY2hhbmdlX2NiKSwgd2ViX3BhZ2UpOwotICAgIGdfc2ln
bmFsX2Nvbm5lY3QgKEdfT0JKRUNUICh3ZWJfcGFnZSksICJob3ZlcmluZy1vdmVyLWxpbmsiLCBH
X0NBTExCQUNLIChsaW5rX2hvdmVyX2NiKSwgd2ViX3BhZ2UpOworICAgIGdfc2lnbmFsX2Nvbm5l
Y3QgKEdfT0JKRUNUICh3ZWJfdmlldyksICJ0aXRsZS1jaGFuZ2VkIiwgR19DQUxMQkFDSyAodGl0
bGVfY2hhbmdlX2NiKSwgd2ViX3ZpZXcpOworICAgIGdfc2lnbmFsX2Nvbm5lY3QgKEdfT0JKRUNU
ICh3ZWJfdmlldyksICJsb2FkLXByb2dyZXNzLWNoYW5nZWQiLCBHX0NBTExCQUNLIChwcm9ncmVz
c19jaGFuZ2VfY2IpLCB3ZWJfdmlldyk7CisgICAgZ19zaWduYWxfY29ubmVjdCAoR19PQkpFQ1Qg
KHdlYl92aWV3KSwgImhvdmVyaW5nLW92ZXItbGluayIsIEdfQ0FMTEJBQ0sgKGxpbmtfaG92ZXJf
Y2IpLCB3ZWJfdmlldyk7CiAKICAgICByZXR1cm4gc2Nyb2xsZWRfd2luZG93OwogfQpAQCAtMTg4
LDkgKzE4OCw5IEBAIG1haW4gKGludCBhcmdjLCBjaGFyKiBhcmd2W10pCiAgICAgZ3RrX2NvbnRh
aW5lcl9hZGQgKEdUS19DT05UQUlORVIgKG1haW5fd2luZG93KSwgdmJveCk7CiAKICAgICBnY2hh
ciogdXJpID0gKGdjaGFyKikgKGFyZ2MgPiAxID8gYXJndlsxXSA6ICJodHRwOi8vd3d3Lmdvb2ds
ZS5jb20vIik7Ci0gICAgd2Via2l0X3BhZ2Vfb3BlbiAod2ViX3BhZ2UsIHVyaSk7CisgICAgd2Vi
a2l0X3dlYl92aWV3X29wZW4gKHdlYl92aWV3LCB1cmkpOwogCi0gICAgZ3RrX3dpZGdldF9ncmFi
X2ZvY3VzIChHVEtfV0lER0VUICh3ZWJfcGFnZSkpOworICAgIGd0a193aWRnZXRfZ3JhYl9mb2N1
cyAoR1RLX1dJREdFVCAod2ViX3ZpZXcpKTsKICAgICBndGtfd2lkZ2V0X3Nob3dfYWxsIChtYWlu
X3dpbmRvdyk7CiAgICAgZ3RrX21haW4gKCk7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>17615</attachid>
            <date>2007-11-30 16:23:16 -0800</date>
            <delta_ts>2007-11-30 20:11:15 -0800</delta_ts>
            <desc>With ChangeLog entries</desc>
            <filename>api-refactor-3.patch</filename>
            <type>text/plain</type>
            <size>194771</size>
            <attacher name="Alp Toker">alp</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDI4MjYz
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjIgQEAKKzIwMDctMTEt
MzAgIEFscCBUb2tlciAgPGFscEBhdG9rZXIuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE1NjkxCisgICAgICAgIFtHVEtdIFB1YmxpYyBBUEkgZG9lcyBub3QgZm9sbG93IEdU
SysgY29udmVudGlvbnMKKworICAgICAgICBSZWZhY3RvciB0aGUgV2ViS2l0L0dUSysgcHVibGlj
IEFQSS4gQ2hhbmdlczoKKyAgICAgICAgICBXZWJLaXRQYWdlIC0+IFdlYktpdFdlYlZpZXcKKyAg
ICAgICAgICBXZWJLaXRGcmFtZSAtPiBXZWJLaXRXZWJGcmFtZQorCisgICAgICAgIFB1YmxpYyBB
UEkgc291cmNlIGFuZCBoZWFkZXIgbmFtZXMgaGF2ZSBiZWVuIHVwZGF0ZWQgdG8gbWlycm9yIHRo
ZSBBUEkKKyAgICAgICAgY2hhbmdlcy4KKworICAgICAgICBUaGUgQVBJIGlzIG5vdyBrZXB0IGlu
IFdlYktpdC9ndGsvV2ViVmlldyB0byBtYXRjaCBvdGhlciBwb3J0cyBpbiB0aGUKKyAgICAgICAg
c2FtZSBjbGFzcyBzdWNoIGFzIE1hYyBhbmQgV2luLgorCisgICAgICAgICogV2ViS2l0LnByaToK
KwogMjAwNy0xMS0yNiAgUm9kbmV5IERhd2VzICA8ZG9iZXlAd2F5b2Z0aGVtb25rZXkuY29tPgog
CiAgICAgICAgIFJldmlld2VkIGJ5IE1hcmsgUm93ZS4KSW5kZXg6IFdlYktpdC5wcmkKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViS2l0LnByaQkocmV2aXNpb24gMjgyNTEpCisrKyBXZWJLaXQucHJpCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNyw3ICsxNyw3IEBAIHF0LXBvcnQ6IWJ1aWxkaW5nLWxpYnMgewogZ3Rr
LXBvcnQ6IWJ1aWxkaW5nLWxpYnMgewogICAgIFFNQUtFX0xJQkRJUiA9ICQkT1VUUFVUX0RJUi9s
aWIgJCRRTUFLRV9MSUJESVIKICAgICBMSUJTICs9IC1sV2ViS2l0R3RrCi0gICAgREVQRU5EUEFU
SCArPSAkJFBXRC9XZWJLaXQvZ3RrL0FwaSAkJFBXRC9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0
CisgICAgREVQRU5EUEFUSCArPSAkJFBXRC9XZWJLaXQvZ3RrL1dlYlZpZXcgJCRQV0QvV2ViS2l0
L2d0ay9XZWJDb3JlU3VwcG9ydAogfQogCiBndGstcG9ydCB7CkBAIC00NCw2ICs0NCw5IEBAIGd0
ay1wb3J0IHsKIAogICAgICMgVGhpcyBzZXQgb2Ygd2FybmluZ3MgaXMgYm9ycm93ZWQgZnJvbSB0
aGUgTWFjIGJ1aWxkCiAgICAgUU1BS0VfQ1hYRkxBR1MgKz0gLVdhbGwgLVcgLVdjYXN0LWFsaWdu
IC1XY2hhci1zdWJzY3JpcHRzIC1XZm9ybWF0LXNlY3VyaXR5IC1XbWlzc2luZy1mb3JtYXQtYXR0
cmlidXRlIC1XcG9pbnRlci1hcml0aCAtV3dyaXRlLXN0cmluZ3MgLVduby1mb3JtYXQteTJrIC1X
bm8tdW51c2VkLXBhcmFtZXRlciAtV3VuZGVmCisKKyAgICBERVBFTkRQQVRIICs9ICQkUFdEL0ph
dmFTY3JpcHRDb3JlL0FQSQorICAgIElOQ0xVREVQQVRIICs9ICQkUFdECiB9CiAKIERFRklORVMg
Kz0gVVNFX1NZU1RFTV9NQUxMT0MKQEAgLTYwLDcgKzYzLDcgQEAgZ3RrLXBvcnQ6SU5DTFVERVBB
VEggKz0gXAogICAgICQkQkFTRV9ESVIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlybyBc
CiAgICAgJCRCQVNFX0RJUi9XZWJDb3JlL2xvYWRlci9ndGsgXAogICAgICQkQkFTRV9ESVIvV2Vi
Q29yZS9wYWdlL2d0ayBcCi0gICAgJCRCQVNFX0RJUi9XZWJLaXQvZ3RrL0FwaSBcCisgICAgJCRC
QVNFX0RJUi9XZWJLaXQvZ3RrL1dlYlZpZXcgXAogICAgICQkQkFTRV9ESVIvV2ViS2l0L2d0ay9X
ZWJDb3JlU3VwcG9ydAogSU5DTFVERVBBVEggKz0gXAogICAgICQkQkFTRV9ESVIvSmF2YVNjcmlw
dENvcmUvIFwKSW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
Q2hhbmdlTG9nCShyZXZpc2lvbiAyODI2MykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsMjIgQEAKKzIwMDctMTEtMzAgIEFscCBUb2tlciAgPGFscEBhdG9r
ZXIuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NjkxCisgICAgICAgIFtH
VEtdIFB1YmxpYyBBUEkgZG9lcyBub3QgZm9sbG93IEdUSysgY29udmVudGlvbnMKKworICAgICAg
ICBSZWZhY3RvciB0aGUgV2ViS2l0L0dUSysgcHVibGljIEFQSS4gQ2hhbmdlczoKKyAgICAgICAg
ICBXZWJLaXRQYWdlIC0+IFdlYktpdFdlYlZpZXcKKyAgICAgICAgICBXZWJLaXRGcmFtZSAtPiBX
ZWJLaXRXZWJGcmFtZQorCisgICAgICAgIFB1YmxpYyBBUEkgc291cmNlIGFuZCBoZWFkZXIgbmFt
ZXMgaGF2ZSBiZWVuIHVwZGF0ZWQgdG8gbWlycm9yIHRoZSBBUEkKKyAgICAgICAgY2hhbmdlcy4K
KworICAgICAgICBUaGUgQVBJIGlzIG5vdyBrZXB0IGluIFdlYktpdC9ndGsvV2ViVmlldyB0byBt
YXRjaCBvdGhlciBwb3J0cyBpbiB0aGUKKyAgICAgICAgc2FtZSBjbGFzcyBzdWNoIGFzIE1hYyBh
bmQgV2luLgorCisgICAgICAgICogV2ViQ29yZS5wcm86CisKIDIwMDctMTEtMzAgICBBbmRlcnMg
Q2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CiAKICAgICAgICAgUmVtb3ZlIGV4dHJhIDwv
RmlsdGVyPiB0YWcgd2hpY2ggcHJldmVudGVkIHRoZSB2Y3Byb2ogZnJvbSBiZWluZyBwYXJzZWQg
Y29ycmVjdGx5LgpJbmRleDogV2ViQ29yZS9XZWJDb3JlLnBybwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL1dlYkNvcmUucHJvCShyZXZpc2lvbiAyODI1MSkKKysrIFdlYkNvcmUvV2ViQ29yZS5wcm8J
KHdvcmtpbmcgY29weSkKQEAgLTE0Niw3ICsxNDYsNyBAQCBndGstcG9ydCB7CiAgICAgJCRQV0Qv
bG9hZGVyL2d0ayBcCiAgICAgJCRQV0QvcGFnZS9ndGsgXAogICAgICQkUFdELy4uL1dlYktpdC9n
dGsvV2ViQ29yZVN1cHBvcnQgXAotICAgICQkUFdELy4uL1dlYktpdC9ndGsvQXBpCisgICAgJCRQ
V0QvLi4vV2ViS2l0L2d0ay9XZWJWaWV3CiAKICAgICBERVBFTkRQQVRIICs9IFwKICAgICBwbGF0
Zm9ybS9ndGsgXApAQCAtMTY0LDcgKzE2NCw3IEBAIGd0ay1wb3J0IHsKICAgICBsb2FkZXIvZ3Rr
IFwKICAgICBwYWdlL2d0ayBcCiAgICAgLi4vV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydCBcCi0g
ICAgLi4vV2ViS2l0L2d0ay9BcGkKKyAgICAuLi9XZWJLaXQvZ3RrL1dlYlZpZXcKIH0KIAogSU5D
TFVERVBBVEggKz0gICQkUFdEIFwKQEAgLTkzOSwxMyArOTM5LDEzIEBAIHF0LXBvcnQgewogZ3Rr
LXBvcnQgewogICAgIEhFQURFUlMgKz0gXAogICAgICAgICAuLi9XZWJDb3JlL3BsYXRmb3JtL2d0
ay9DbGlwYm9hcmRHdGsuaCBcCi0gICAgICAgIC4uL1dlYktpdC9ndGsvQXBpL3dlYmtpdGd0a2Rl
ZmluZXMuaCBcCi0gICAgICAgIC4uL1dlYktpdC9ndGsvQXBpL3dlYmtpdGd0a2ZyYW1lLmggXAot
ICAgICAgICAuLi9XZWJLaXQvZ3RrL0FwaS93ZWJraXRndGtnbG9iYWwuaCBcCi0gICAgICAgIC4u
L1dlYktpdC9ndGsvQXBpL3dlYmtpdGd0a25ldHdvcmtyZXF1ZXN0LmggXAotICAgICAgICAuLi9X
ZWJLaXQvZ3RrL0FwaS93ZWJraXRndGtwYWdlLmggXAotICAgICAgICAuLi9XZWJLaXQvZ3RrL0Fw
aS93ZWJraXRndGtwcml2YXRlLmggXAotICAgICAgICAuLi9XZWJLaXQvZ3RrL0FwaS93ZWJraXRn
dGtzZXR0aW5ncy5oIFwKKyAgICAgICAgLi4vV2ViS2l0L2d0ay9XZWJWaWV3L3dlYmtpdGRlZmlu
ZXMuaCBcCisgICAgICAgIC4uL1dlYktpdC9ndGsvV2ViVmlldy93ZWJraXRnbG9iYWwuaCBcCisg
ICAgICAgIC4uL1dlYktpdC9ndGsvV2ViVmlldy93ZWJraXRuZXR3b3JrcmVxdWVzdC5oIFwKKyAg
ICAgICAgLi4vV2ViS2l0L2d0ay9XZWJWaWV3L3dlYmtpdHByaXZhdGUuaCBcCisgICAgICAgIC4u
L1dlYktpdC9ndGsvV2ViVmlldy93ZWJraXRzZXR0aW5ncy5oIFwKKyAgICAgICAgLi4vV2ViS2l0
L2d0ay9XZWJWaWV3L3dlYmtpdHdlYmZyYW1lLmggXAorICAgICAgICAuLi9XZWJLaXQvZ3RrL1dl
YlZpZXcvd2Via2l0d2Vidmlldy5oIFwKICAgICAgICAgLi4vV2ViS2l0L2d0ay9XZWJDb3JlU3Vw
cG9ydC9DaHJvbWVDbGllbnRHdGsuaCBcCiAgICAgICAgIC4uL1dlYktpdC9ndGsvV2ViQ29yZVN1
cHBvcnQvQ29udGV4dE1lbnVDbGllbnRHdGsuaCBcCiAgICAgICAgIC4uL1dlYktpdC9ndGsvV2Vi
Q29yZVN1cHBvcnQvRHJhZ0NsaWVudEd0ay5oIFwKQEAgLTEwMTYsMTIgKzEwMTYsMTIgQEAgZ3Rr
LXBvcnQgewogICAgICAgICBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9ibXAvQk1QSW1hZ2VEZWNv
ZGVyLmNwcCBcCiAgICAgICAgIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2ljby9JQ09JbWFnZURl
Y29kZXIuY3BwIFwKICAgICAgICAgcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMveGJtL1hCTUltYWdl
RGVjb2Rlci5jcHAgXAotICAgICAgICAuLi9XZWJLaXQvZ3RrL0FwaS93ZWJraXRndGtmcmFtZS5j
cHAgXAotICAgICAgICAuLi9XZWJLaXQvZ3RrL0FwaS93ZWJraXRndGtnbG9iYWwuY3BwIFwKLSAg
ICAgICAgLi4vV2ViS2l0L2d0ay9BcGkvd2Via2l0Z3RrbmV0d29ya3JlcXVlc3QuY3BwIFwKLSAg
ICAgICAgLi4vV2ViS2l0L2d0ay9BcGkvd2Via2l0Z3RrcGFnZS5jcHAgXAotICAgICAgICAuLi9X
ZWJLaXQvZ3RrL0FwaS93ZWJraXRndGtwcml2YXRlLmNwcCBcCi0gICAgICAgIC4uL1dlYktpdC9n
dGsvQXBpL3dlYmtpdGd0a3NldHRpbmdzLmNwcCBcCisgICAgICAgIC4uL1dlYktpdC9ndGsvV2Vi
Vmlldy93ZWJraXRnbG9iYWwuY3BwIFwKKyAgICAgICAgLi4vV2ViS2l0L2d0ay9XZWJWaWV3L3dl
YmtpdG5ldHdvcmtyZXF1ZXN0LmNwcCBcCisgICAgICAgIC4uL1dlYktpdC9ndGsvV2ViVmlldy93
ZWJraXRwcml2YXRlLmNwcCBcCisgICAgICAgIC4uL1dlYktpdC9ndGsvV2ViVmlldy93ZWJraXRz
ZXR0aW5ncy5jcHAgXAorICAgICAgICAuLi9XZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0d2ViZnJh
bWUuY3BwIFwKKyAgICAgICAgLi4vV2ViS2l0L2d0ay9XZWJWaWV3L3dlYmtpdHdlYnZpZXcuY3Bw
IFwKICAgICAgICAgLi4vV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRHdGsu
Y3BwIFwKICAgICAgICAgLi4vV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9Db250ZXh0TWVudUNs
aWVudEd0ay5jcHAgXAogICAgICAgICAuLi9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0RyYWdD
bGllbnRHdGsuY3BwIFwKQEAgLTE2ODEsNyArMTY4MSw3IEBAIGd0ay1wb3J0IHsKICAgICB0YXJn
ZXQucGF0aCA9ICQkV0VCS0lUX0xJQl9ESVIKICAgICBJTlNUQUxMUyArPSB0YXJnZXQKIAotICAg
IGluY2x1ZGUoJCRQV0QvLi4vV2ViS2l0L2d0ay9BcGkvaGVhZGVycy5wcmkpCisgICAgaW5jbHVk
ZSgkJFBXRC8uLi9XZWJLaXQvZ3RrL1dlYlZpZXcvaGVhZGVycy5wcmkpCiAgICAgaGVhZGVycy5m
aWxlcyA9ICQkV0VCS0lUX0FQSV9IRUFERVJTCiAgICAgaGVhZGVycy5wYXRoID0gJCRXRUJLSVRf
SU5DX0RJUgogICAgIElOU1RBTExTICs9IGhlYWRlcnMKQEAgLTE3MDEsNyArMTcwMSw3IEBAIGd0
ay1wb3J0IHsKICAgICAgICAgUU1BS0VfUEtHQ09ORklHX0lOU1RBTExfUkVQTEFDRSArPSBsaWJf
cmVwbGFjZQogICAgIH0KIAotICAgIEdFTk1BUlNIQUxTID0gLi4vV2ViS2l0L2d0ay9BcGkvd2Vi
a2l0Z3RrLW1hcnNoYWwubGlzdAorICAgIEdFTk1BUlNIQUxTID0gLi4vV2ViS2l0L2d0ay9XZWJW
aWV3L3dlYmtpdC1tYXJzaGFsLmxpc3QKICAgICBHRU5NQVJTSEFMU19QUkVGSVggPSB3ZWJraXRf
bWFyc2hhbAogCiAgICAgIwpJbmRleDogV2ViS2l0L2d0ay9DaGFuZ2VMb2cKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViS2l0L2d0ay9DaGFuZ2VMb2cJKHJldmlzaW9uIDI4MjYzKQorKysgV2ViS2l0L2d0ay9D
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw4MiBAQAorMjAwNy0xMS0zMCAgQWxw
IFRva2VyICA8YWxwQGF0b2tlci5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTU2OTEKKyAgICAgICAgW0dUS10gUHVibGljIEFQSSBkb2VzIG5vdCBmb2xsb3cgR1RLKyBjb252
ZW50aW9ucworCisgICAgICAgIFJlZmFjdG9yIHRoZSBXZWJLaXQvR1RLKyBwdWJsaWMgQVBJLiBD
aGFuZ2VzOgorICAgICAgICAgIFdlYktpdFBhZ2UgLT4gV2ViS2l0V2ViVmlldworICAgICAgICAg
IFdlYktpdEZyYW1lIC0+IFdlYktpdFdlYkZyYW1lCisKKyAgICAgICAgUHVibGljIEFQSSBzb3Vy
Y2UgYW5kIGhlYWRlciBuYW1lcyBoYXZlIGJlZW4gdXBkYXRlZCB0byBtaXJyb3IgdGhlIEFQSQor
ICAgICAgICBjaGFuZ2VzLgorCisgICAgICAgIFRoZSBBUEkgaXMgbm93IGtlcHQgaW4gV2ViS2l0
L2d0ay9XZWJWaWV3IHRvIG1hdGNoIG90aGVyIHBvcnRzIGluIHRoZQorICAgICAgICBzYW1lIGNs
YXNzIHN1Y2ggYXMgTWFjIGFuZCBXaW4uCisKKyAgICAgICAgQVBJL0FCSS1icmVha2luZyBjaGFu
Z2UuCisKKyAgICAgICAgKiBBcGk6IFJlbW92ZWQuCisgICAgICAgICogQXBpL2hlYWRlcnMucHJp
OiBSZW1vdmVkLgorICAgICAgICAqIEFwaS93ZWJraXRndGstbWFyc2hhbC5saXN0OiBSZW1vdmVk
LgorICAgICAgICAqIEFwaS93ZWJraXRndGtkZWZpbmVzLmg6IFJlbW92ZWQuCisgICAgICAgICog
QXBpL3dlYmtpdGd0a2ZyYW1lLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBBcGkvd2Via2l0Z3Rr
ZnJhbWUuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBBcGkvd2Via2l0Z3RrZ2xvYmFsLmNwcDogUmVt
b3ZlZC4KKyAgICAgICAgKiBBcGkvd2Via2l0Z3RrZ2xvYmFsLmg6IFJlbW92ZWQuCisgICAgICAg
ICogQXBpL3dlYmtpdGd0a25ldHdvcmtyZXF1ZXN0LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBB
cGkvd2Via2l0Z3RrbmV0d29ya3JlcXVlc3QuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBBcGkvd2Vi
a2l0Z3RrcGFnZS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogQXBpL3dlYmtpdGd0a3BhZ2UuaDog
UmVtb3ZlZC4KKyAgICAgICAgKiBBcGkvd2Via2l0Z3RrcHJpdmF0ZS5jcHA6IFJlbW92ZWQuCisg
ICAgICAgICogQXBpL3dlYmtpdGd0a3ByaXZhdGUuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBBcGkv
d2Via2l0Z3Rrc2V0dGluZ3MuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIEFwaS93ZWJraXRndGtz
ZXR0aW5ncy5oOiBSZW1vdmVkLgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVu
dEd0ay5jcHA6CisgICAgICAgIChXZWJLaXQ6OkNocm9tZUNsaWVudDo6Q2hyb21lQ2xpZW50KToK
KyAgICAgICAgKFdlYktpdDo6Q2hyb21lQ2xpZW50OjpjcmVhdGVXaW5kb3cpOgorICAgICAgICAq
IFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0ay5oOgorICAgICAgICAoV2ViS2l0OjpDaHJv
bWVDbGllbnQ6OndlYlBhZ2UpOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVu
dEd0ay5jcHA6CisgICAgICAgIChXZWJLaXQ6OkVkaXRvckNsaWVudDo6aXNFZGl0YWJsZSk6Cisg
ICAgICAgIChXZWJLaXQ6OkVkaXRvckNsaWVudDo6RWRpdG9yQ2xpZW50KToKKyAgICAgICAgKiBX
ZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRHdGsuaDoKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9y
dC9GcmFtZUxvYWRlckNsaWVudEd0ay5jcHA6CisgICAgICAgIChXZWJLaXQ6OkZyYW1lTG9hZGVy
Q2xpZW50OjpGcmFtZUxvYWRlckNsaWVudCk6CisgICAgICAgIChXZWJLaXQ6OkZyYW1lTG9hZGVy
Q2xpZW50Ojpwb3N0UHJvZ3Jlc3NTdGFydGVkTm90aWZpY2F0aW9uKToKKyAgICAgICAgKFdlYktp
dDo6RnJhbWVMb2FkZXJDbGllbnQ6OnBvc3RQcm9ncmVzc0VzdGltYXRlQ2hhbmdlZE5vdGlmaWNh
dGlvbik6CisgICAgICAgIChXZWJLaXQ6OkZyYW1lTG9hZGVyQ2xpZW50Ojpwb3N0UHJvZ3Jlc3NG
aW5pc2hlZE5vdGlmaWNhdGlvbik6CisgICAgICAgIChXZWJLaXQ6OkZyYW1lTG9hZGVyQ2xpZW50
OjpkaXNwYXRjaERlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb24pOgorICAgICAgICAoV2Vi
S2l0OjpGcmFtZUxvYWRlckNsaWVudDo6Y3JlYXRlRnJhbWUpOgorICAgICAgICAoV2ViS2l0OjpG
cmFtZUxvYWRlckNsaWVudDo6d2luZG93T2JqZWN0Q2xlYXJlZCk6CisgICAgICAgIChXZWJLaXQ6
OkZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERpZFJlY2VpdmVJY29uKToKKyAgICAgICAgKFdl
YktpdDo6RnJhbWVMb2FkZXJDbGllbnQ6OnNldFRpdGxlKToKKyAgICAgICAgKiBXZWJDb3JlU3Vw
cG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5oOgorICAgICAgICAoV2ViS2l0OjpGcmFtZUxvYWRl
ckNsaWVudDo6d2ViRnJhbWUpOgorICAgICAgICAqIFdlYlZpZXc6IEFkZGVkLgorICAgICAgICAq
IFdlYlZpZXcvaGVhZGVycy5wcmk6IEFkZGVkLgorICAgICAgICAqIFdlYlZpZXcvd2Via2l0LW1h
cnNoYWwubGlzdDogQWRkZWQuCisgICAgICAgICogV2ViVmlldy93ZWJraXRkZWZpbmVzLmg6IEFk
ZGVkLgorICAgICAgICAqIFdlYlZpZXcvd2Via2l0Z2xvYmFsLmNwcDogQWRkZWQuCisgICAgICAg
ICogV2ViVmlldy93ZWJraXRnbG9iYWwuaDogQWRkZWQuCisgICAgICAgICogV2ViVmlldy93ZWJr
aXRuZXR3b3JrcmVxdWVzdC5jcHA6IEFkZGVkLgorICAgICAgICAqIFdlYlZpZXcvd2Via2l0bmV0
d29ya3JlcXVlc3QuaDogQWRkZWQuCisgICAgICAgICogV2ViVmlldy93ZWJraXRwcml2YXRlLmNw
cDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OmFwcGx5KToKKyAgICAgICAgKFdlYktpdDo6Y3Jl
YXRlKToKKyAgICAgICAgKFdlYktpdDo6Z2V0RnJhbWVGcm9tVmlldyk6CisgICAgICAgIChXZWJL
aXQ6OmdldFZpZXdGcm9tRnJhbWUpOgorICAgICAgICAoV2ViS2l0Ojpjb3JlKToKKyAgICAgICAg
KFdlYktpdDo6a2l0KToKKyAgICAgICAgKiBXZWJWaWV3L3dlYmtpdHByaXZhdGUuaDogQWRkZWQu
CisgICAgICAgICogV2ViVmlldy93ZWJraXRzZXR0aW5ncy5jcHA6IEFkZGVkLgorICAgICAgICAq
IFdlYlZpZXcvd2Via2l0c2V0dGluZ3MuaDogQWRkZWQuCisgICAgICAgICogV2ViVmlldy93ZWJr
aXR3ZWJmcmFtZS5jcHA6IEFkZGVkLgorICAgICAgICAqIFdlYlZpZXcvd2Via2l0d2ViZnJhbWUu
aDogQWRkZWQuCisgICAgICAgICogV2ViVmlldy93ZWJraXR3ZWJ2aWV3LmNwcDogQWRkZWQuCisg
ICAgICAgICogV2ViVmlldy93ZWJraXR3ZWJ2aWV3Lmg6IEFkZGVkLgorCiAyMDA3LTExLTI4ICBB
bHAgVG9rZXIgIDxhbHBAYXRva2VyLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBUaW1vdGh5
IEhhdGNoZXIuCkluZGV4OiBXZWJLaXQvZ3RrL0FwaS9oZWFkZXJzLnByaQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJLaXQvZ3RrL0FwaS9oZWFkZXJzLnByaQkocmV2aXNpb24gMjgyNTEpCisrKyBXZWJLaXQv
Z3RrL0FwaS9oZWFkZXJzLnByaQkod29ya2luZyBjb3B5KQpAQCAtMSw3ICswLDAgQEAKLVdFQktJ
VF9BUElfSEVBREVSUyA9ICQkUFdEL3dlYmtpdGd0a2RlZmluZXMuaCBcCi0gICAgICAgICAgICAg
ICAgICAgICAkJFBXRC93ZWJraXRndGtmcmFtZS5oIFwKLSAgICAgICAgICAgICAgICAgICAgICQk
UFdEL3dlYmtpdGd0a2ZyYW1lZGF0YS5oIFwKLSAgICAgICAgICAgICAgICAgICAgICQkUFdEL3dl
YmtpdGd0a2dsb2JhbC5oIFwKLSAgICAgICAgICAgICAgICAgICAgICQkUFdEL3dlYmtpdGd0a25l
dHdvcmtyZXF1ZXN0LmggXAotICAgICAgICAgICAgICAgICAgICAgJCRQV0Qvd2Via2l0Z3RrcGFn
ZS5oIFwKLSAgICAgICAgICAgICAgICAgICAgICQkUFdEL3dlYmtpdGd0a3NldHRpbmdzLmgKSW5k
ZXg6IFdlYktpdC9ndGsvQXBpL3dlYmtpdGd0ay1tYXJzaGFsLmxpc3QKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViS2l0L2d0ay9BcGkvd2Via2l0Z3RrLW1hcnNoYWwubGlzdAkocmV2aXNpb24gMjgyNTEpCisr
KyBXZWJLaXQvZ3RrL0FwaS93ZWJraXRndGstbWFyc2hhbC5saXN0CSh3b3JraW5nIGNvcHkpCkBA
IC0xLDkgKzAsMCBAQAotVk9JRDpTVFJJTkcsU1RSSU5HCi1WT0lEOk9CSkVDVCxCT09MRUFOCi1W
T0lEOk9CSkVDVCxPQkpFQ1QKLVZPSUQ6T0JKRUNULFBPSU5URVIsUE9JTlRFUgotQk9PTEVBTjpT
VFJJTkcsSU5ULFNUUklORwotQk9PTEVBTjpPQkpFQ1QsU1RSSU5HCi1CT09MRUFOOk9CSkVDVCxT
VFJJTkcsQk9PTEVBTgotQk9PTEVBTjpPQkpFQ1QsU1RSSU5HLFNUUklORyxTVFJJTkcKLUlOVDpP
QkpFQ1QsT0JKRUNUCkluZGV4OiBXZWJLaXQvZ3RrL0FwaS93ZWJraXRndGtkZWZpbmVzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViS2l0L2d0ay9BcGkvd2Via2l0Z3RrZGVmaW5lcy5oCShyZXZpc2lvbiAy
ODI1MSkKKysrIFdlYktpdC9ndGsvQXBpL3dlYmtpdGd0a2RlZmluZXMuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw2MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5z
IFBldGVyIEZyZXl0aGVyCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSAqIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKLSAqIDMuICBOZWl0aGVyIHRoZSBu
YW1lIG9mIEFwcGxlLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRz
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4gCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotI2lmbmRlZiBXRUJLSVRfREVGSU5FU19ICi0jZGVmaW5lIFdFQktJVF9ERUZJTkVT
X0gKLQotI2luY2x1ZGUgPGdsaWIuaD4KLQotdHlwZWRlZiBzdHJ1Y3QgX1dlYktpdEZyYW1lIFdl
YktpdEZyYW1lOwotdHlwZWRlZiBzdHJ1Y3QgX1dlYktpdEZyYW1lQ2xhc3MgV2ViS2l0RnJhbWVD
bGFzczsKLQotdHlwZWRlZiBzdHJ1Y3QgX1dlYktpdEZyYW1lRGF0YSBXZWJLaXRGcmFtZURhdGE7
Ci0KLXR5cGVkZWYgc3RydWN0IF9XZWJLaXRQYWdlIFdlYktpdFBhZ2U7Ci10eXBlZGVmIHN0cnVj
dCBfV2ViS2l0UGFnZUNsYXNzIFdlYktpdFBhZ2VDbGFzczsKLQotdHlwZWRlZiBzdHJ1Y3QgX1dl
YktpdE5ldHdvcmtSZXF1ZXN0IFdlYktpdE5ldHdvcmtSZXF1ZXN0OwotdHlwZWRlZiBzdHJ1Y3Qg
X1dlYktpdE5ldHdvcmtSZXF1ZXN0Q2xhc3MgV2ViS2l0TmV0d29ya1JlcXVlc3RDbGFzczsKLQot
dHlwZWRlZiBzdHJ1Y3QgT3BhcXVlSlNDb250ZXh0KiBKU0dsb2JhbENvbnRleHRSZWY7Ci10eXBl
ZGVmIHN0cnVjdCBPcGFxdWVKU1ZhbHVlKiBKU09iamVjdFJlZjsKLQotI2lmZGVmIEdfT1NfV0lO
MzIKLSAgICAjaWZkZWYgQlVJTERJTkdfV0VCS0lUCi0gICAgICAgICNkZWZpbmUgV0VCS0lUX0FQ
SSBfX2RlY2xzcGVjKGRsbGV4cG9ydCkKLSAgICAjZWxzZQotICAgICAgICAjZGVmaW5lIFdFQktJ
VF9BUEkgX19kZWNsc3BlYyhkbGxpbXBvcnQpCi0gICAgI2VuZGlmCi0jZWxzZQotICAgICNkZWZp
bmUgV0VCS0lUX0FQSSBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJkZWZhdWx0IikpKQotI2Vu
ZGlmCi0KLSNpZm5kZWYgV0VCS0lUX0FQSQotI2RlZmluZSBXRUJLSVRfQVBJCi0jZW5kaWYKLQot
I2VuZGlmCkluZGV4OiBXZWJLaXQvZ3RrL0FwaS93ZWJraXRndGtmcmFtZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViS2l0L2d0ay9BcGkvd2Via2l0Z3RrZnJhbWUuY3BwCShyZXZpc2lvbiAyODI1MSkK
KysrIFdlYktpdC9ndGsvQXBpL3dlYmtpdGd0a2ZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSwzODggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRl
ciBGcmV5dGhlcgotICogQ29weXJpZ2h0IChDKSAyMDA3IEFscCBUb2tlciA8YWxwQGF0b2tlci5j
b20+Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICog
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxl
LCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICog
ICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4gCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQg
SVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
Ci0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lu
Y2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIndlYmtpdGd0a2ZyYW1lLmgiCi0jaW5jbHVkZSAi
d2Via2l0Z3RrcGFnZS5oIgotI2luY2x1ZGUgIndlYmtpdGd0a3ByaXZhdGUuaCIKLQotI2luY2x1
ZGUgIkNTdHJpbmcuaCIKLSNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgotI2luY2x1ZGUgIkZyYW1l
TG9hZGVyQ2xpZW50R3RrLmgiCi0jaW5jbHVkZSAiRnJhbWVUcmVlLmgiCi0jaW5jbHVkZSAiRnJh
bWVWaWV3LmgiCi0jaW5jbHVkZSAiSFRNTEZyYW1lT3duZXJFbGVtZW50LmgiCi0jaW5jbHVkZSAi
a2pzX2JpbmRpbmcuaCIKLSNpbmNsdWRlICJranNfcHJveHkuaCIKLSNpbmNsdWRlICJranNfd2lu
ZG93LmgiCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9BUElDYXN0Lmg+Ci0KLXVzaW5nIG5h
bWVzcGFjZSBXZWJLaXQ7Ci11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotZXh0ZXJuICJDIiB7
Ci0KLWV4dGVybiB2b2lkIHdlYmtpdF9tYXJzaGFsX1ZPSURfX1NUUklOR19TVFJJTkcgKEdDbG9z
dXJlKiAgICAgY2xvc3VyZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEdWYWx1ZSogICAgICAgcmV0dXJuX3ZhbHVlLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQgICAgICAgICBuX3BhcmFtX3ZhbHVl
cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IEdWYWx1ZSogcGFyYW1fdmFsdWVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZ3BvaW50ZXIgICAgICBpbnZvY2F0aW9uX2hpbnQsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncG9pbnRlciAgICAgIG1hcnNo
YWxfZGF0YSk7Ci0KLWVudW0gewotICAgIENMRUFSRUQsCi0gICAgTE9BRF9ET05FLAotICAgIFRJ
VExFX0NIQU5HRUQsCi0gICAgSE9WRVJJTkdfT1ZFUl9MSU5LLAotICAgIExBU1RfU0lHTkFMCi19
OwotCi1zdGF0aWMgZ3VpbnQgd2Via2l0X2ZyYW1lX3NpZ25hbHNbTEFTVF9TSUdOQUxdID0geyAw
LCB9OwotCi1zdGF0aWMgdm9pZCB3ZWJraXRfZnJhbWVfcmVhbF90aXRsZV9jaGFuZ2VkKFdlYktp
dEZyYW1lKiBmcmFtZSwgZ2NoYXIqIHRpdGxlLCBnY2hhciogbG9jYXRpb24pOwotCi1HX0RFRklO
RV9UWVBFKFdlYktpdEZyYW1lLCB3ZWJraXRfZnJhbWUsIEdfVFlQRV9PQkpFQ1QpCi0KLXN0YXRp
YyB2b2lkIHdlYmtpdF9mcmFtZV9maW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCi17Ci0gICAgV2Vi
S2l0RnJhbWVQcml2YXRlKiBwcml2YXRlRGF0YSA9IFdFQktJVF9GUkFNRV9HRVRfUFJJVkFURShX
RUJLSVRfRlJBTUUob2JqZWN0KSk7Ci0gICAgcHJpdmF0ZURhdGEtPmZyYW1lLT5sb2FkZXIoKS0+
Y2FuY2VsQW5kQ2xlYXIoKTsKLSAgICBnX2ZyZWUocHJpdmF0ZURhdGEtPm5hbWUpOwotICAgIGdf
ZnJlZShwcml2YXRlRGF0YS0+dGl0bGUpOwotICAgIGdfZnJlZShwcml2YXRlRGF0YS0+bG9jYXRp
b24pOwotICAgIGRlbGV0ZSBwcml2YXRlRGF0YS0+ZnJhbWU7Ci0KLSAgICBHX09CSkVDVF9DTEFT
Uyh3ZWJraXRfZnJhbWVfcGFyZW50X2NsYXNzKS0+ZmluYWxpemUob2JqZWN0KTsKLX0KLQotc3Rh
dGljIHZvaWQgd2Via2l0X2ZyYW1lX2NsYXNzX2luaXQoV2ViS2l0RnJhbWVDbGFzcyogZnJhbWVD
bGFzcykKLXsKLSAgICBnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUoZnJhbWVDbGFzcywgc2l6ZW9m
KFdlYktpdEZyYW1lUHJpdmF0ZSkpOwotCi0gICAgLyoKLSAgICAgKiBzaWduYWxzCi0gICAgICov
Ci0gICAgd2Via2l0X2ZyYW1lX3NpZ25hbHNbQ0xFQVJFRF0gPSBnX3NpZ25hbF9uZXcoImNsZWFy
ZWQiLAotICAgICAgICAgICAgR19UWVBFX0ZST01fQ0xBU1MoZnJhbWVDbGFzcyksCi0gICAgICAg
ICAgICAoR1NpZ25hbEZsYWdzKShHX1NJR05BTF9SVU5fTEFTVCB8IEdfU0lHTkFMX0FDVElPTiks
Ci0gICAgICAgICAgICAwLAotICAgICAgICAgICAgTlVMTCwKLSAgICAgICAgICAgIE5VTEwsCi0g
ICAgICAgICAgICBnX2NjbG9zdXJlX21hcnNoYWxfVk9JRF9fVk9JRCwKLSAgICAgICAgICAgIEdf
VFlQRV9OT05FLCAwKTsKLQotICAgIHdlYmtpdF9mcmFtZV9zaWduYWxzW0xPQURfRE9ORV0gPSBn
X3NpZ25hbF9uZXcoImxvYWRfZG9uZSIsCi0gICAgICAgICAgICBHX1RZUEVfRlJPTV9DTEFTUyhm
cmFtZUNsYXNzKSwKLSAgICAgICAgICAgIChHU2lnbmFsRmxhZ3MpKEdfU0lHTkFMX1JVTl9MQVNU
IHwgR19TSUdOQUxfQUNUSU9OKSwKLSAgICAgICAgICAgIDAsCi0gICAgICAgICAgICBOVUxMLAot
ICAgICAgICAgICAgTlVMTCwKLSAgICAgICAgICAgIGdfY2Nsb3N1cmVfbWFyc2hhbF9WT0lEX19C
T09MRUFOLAotICAgICAgICAgICAgR19UWVBFX05PTkUsIDEsCi0gICAgICAgICAgICBHX1RZUEVf
Qk9PTEVBTik7Ci0KLSAgICB3ZWJraXRfZnJhbWVfc2lnbmFsc1tUSVRMRV9DSEFOR0VEXSA9IGdf
c2lnbmFsX25ldygidGl0bGVfY2hhbmdlZCIsCi0gICAgICAgICAgICBHX1RZUEVfRlJPTV9DTEFT
UyhmcmFtZUNsYXNzKSwKLSAgICAgICAgICAgIChHU2lnbmFsRmxhZ3MpKEdfU0lHTkFMX1JVTl9M
QVNUIHwgR19TSUdOQUxfQUNUSU9OKSwKLSAgICAgICAgICAgIEdfU1RSVUNUX09GRlNFVChXZWJL
aXRGcmFtZUNsYXNzLCB0aXRsZV9jaGFuZ2VkKSwKLSAgICAgICAgICAgIE5VTEwsCi0gICAgICAg
ICAgICBOVUxMLAotICAgICAgICAgICAgd2Via2l0X21hcnNoYWxfVk9JRF9fU1RSSU5HX1NUUklO
RywKLSAgICAgICAgICAgIEdfVFlQRV9OT05FLCAyLAotICAgICAgICAgICAgR19UWVBFX1NUUklO
RywgR19UWVBFX1NUUklORyk7Ci0KLSAgICB3ZWJraXRfZnJhbWVfc2lnbmFsc1tIT1ZFUklOR19P
VkVSX0xJTktdID0gZ19zaWduYWxfbmV3KCJob3ZlcmluZ19vdmVyX2xpbmsiLAotICAgICAgICAg
ICAgR19UWVBFX0ZST01fQ0xBU1MoZnJhbWVDbGFzcyksCi0gICAgICAgICAgICAoR1NpZ25hbEZs
YWdzKShHX1NJR05BTF9SVU5fTEFTVCB8IEdfU0lHTkFMX0FDVElPTiksCi0gICAgICAgICAgICAw
LAotICAgICAgICAgICAgTlVMTCwKLSAgICAgICAgICAgIE5VTEwsCi0gICAgICAgICAgICB3ZWJr
aXRfbWFyc2hhbF9WT0lEX19TVFJJTkdfU1RSSU5HLAotICAgICAgICAgICAgR19UWVBFX05PTkUs
IDIsCi0gICAgICAgICAgICBHX1RZUEVfU1RSSU5HLCBHX1RZUEVfU1RSSU5HKTsKLQotICAgIGZy
YW1lQ2xhc3MtPnRpdGxlX2NoYW5nZWQgPSB3ZWJraXRfZnJhbWVfcmVhbF90aXRsZV9jaGFuZ2Vk
OwotCi0gICAgLyoKLSAgICAgKiBpbXBsZW1lbnRhdGlvbnMgb2YgdmlydHVhbCBtZXRob2RzCi0g
ICAgICovCi0gICAgR19PQkpFQ1RfQ0xBU1MoZnJhbWVDbGFzcyktPmZpbmFsaXplID0gd2Via2l0
X2ZyYW1lX2ZpbmFsaXplOwotfQotCi1zdGF0aWMgdm9pZCB3ZWJraXRfZnJhbWVfcmVhbF90aXRs
ZV9jaGFuZ2VkKFdlYktpdEZyYW1lKiBmcmFtZSwgZ2NoYXIqIHRpdGxlLCBnY2hhciogbG9jYXRp
b24pCi17Ci0gICAgV2ViS2l0RnJhbWVQcml2YXRlKiBmcmFtZURhdGEgPSBXRUJLSVRfRlJBTUVf
R0VUX1BSSVZBVEUoZnJhbWUpOwotICAgIGdfZnJlZShmcmFtZURhdGEtPnRpdGxlKTsKLSAgICBn
X2ZyZWUoZnJhbWVEYXRhLT5sb2NhdGlvbik7Ci0gICAgZnJhbWVEYXRhLT50aXRsZSA9IGdfc3Ry
ZHVwKHRpdGxlKTsKLSAgICBmcmFtZURhdGEtPmxvY2F0aW9uID0gZ19zdHJkdXAobG9jYXRpb24p
OwotfQotCi1zdGF0aWMgdm9pZCB3ZWJraXRfZnJhbWVfaW5pdChXZWJLaXRGcmFtZSogZnJhbWUp
Ci17Ci0gICAgLy8gVE9ETzogTW92ZSBjb25zdHJ1Y3RvciBjb2RlIGhlcmUuCi19Ci0KLS8qKgot
ICogd2Via2l0X2ZyYW1lX25ldzoKLSAqIEBwYWdlOiB0aGUgY29udHJvbGxpbmcgI1dlYktpdFBh
Z2UKLSAqCi0gKiBDcmVhdGVzIGEgbmV3ICNXZWJLaXRGcmFtZSBpbml0aWFsaXplZCB3aXRoIGEg
Y29udHJvbGxpbmcgI1dlYktpdFBhZ2UuCi0gKgotICogUmV0dXJuczogYSBuZXcgI1dlYktpdEZy
YW1lCi0gKiovCi1XZWJLaXRGcmFtZSogd2Via2l0X2ZyYW1lX25ldyhXZWJLaXRQYWdlKiBwYWdl
KQotewotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19QQUdFKHBhZ2UpLCBOVUxM
KTsKLQotICAgIFdlYktpdEZyYW1lKiBmcmFtZSA9IFdFQktJVF9GUkFNRShnX29iamVjdF9uZXco
V0VCS0lUX1RZUEVfRlJBTUUsIE5VTEwpKTsKLSAgICBXZWJLaXRGcmFtZVByaXZhdGUqIGZyYW1l
RGF0YSA9IFdFQktJVF9GUkFNRV9HRVRfUFJJVkFURShmcmFtZSk7Ci0gICAgV2ViS2l0UGFnZVBy
aXZhdGUqIHBhZ2VEYXRhID0gV0VCS0lUX1BBR0VfR0VUX1BSSVZBVEUocGFnZSk7Ci0KLSAgICBm
cmFtZURhdGEtPmNsaWVudCA9IG5ldyBXZWJLaXQ6OkZyYW1lTG9hZGVyQ2xpZW50KGZyYW1lKTsK
LSAgICBmcmFtZURhdGEtPmZyYW1lID0gbmV3IEZyYW1lKHBhZ2VEYXRhLT5wYWdlLCAwLCBmcmFt
ZURhdGEtPmNsaWVudCk7Ci0KLSAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IG5ldyBGcmFtZVZp
ZXcoZnJhbWVEYXRhLT5mcmFtZSk7Ci0gICAgZnJhbWVWaWV3LT5zZXRDb250YWluaW5nV2luZG93
KEdUS19DT05UQUlORVIocGFnZSkpOwotICAgIGZyYW1lVmlldy0+c2V0R3RrQWRqdXN0bWVudHMo
R1RLX0FESlVTVE1FTlQoZ3RrX2FkanVzdG1lbnRfbmV3KDAuMCwgMC4wLCAwLjAsIDAuMCwgMC4w
LCAwLjApKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdUS19BREpVU1RNRU5U
KGd0a19hZGp1c3RtZW50X25ldygwLjAsIDAuMCwgMC4wLCAwLjAsIDAuMCwgMC4wKSkpOwotICAg
IGZyYW1lRGF0YS0+ZnJhbWUtPnNldFZpZXcoZnJhbWVWaWV3KTsKLSAgICBmcmFtZURhdGEtPmZy
YW1lLT5pbml0KCk7Ci0gICAgZnJhbWVEYXRhLT5wYWdlID0gcGFnZTsKLSAgICBmcmFtZURhdGEt
Pm5hbWUgPSAwOwotICAgIGZyYW1lRGF0YS0+dGl0bGUgPSAwOwotICAgIGZyYW1lRGF0YS0+bG9j
YXRpb24gPSAwOwotCi0gICAgcmV0dXJuIGZyYW1lOwotfQotCi1XZWJLaXRGcmFtZSogd2Via2l0
X2ZyYW1lX2luaXRfd2l0aF9wYWdlKFdlYktpdFBhZ2UqIHBhZ2UsIEhUTUxGcmFtZU93bmVyRWxl
bWVudCogZWxlbWVudCkKLXsKLSAgICBXZWJLaXRGcmFtZSogZnJhbWUgPSBXRUJLSVRfRlJBTUUo
Z19vYmplY3RfbmV3KFdFQktJVF9UWVBFX0ZSQU1FLCBOVUxMKSk7Ci0gICAgV2ViS2l0RnJhbWVQ
cml2YXRlKiBmcmFtZURhdGEgPSBXRUJLSVRfRlJBTUVfR0VUX1BSSVZBVEUoZnJhbWUpOwotICAg
IFdlYktpdFBhZ2VQcml2YXRlKiBwYWdlRGF0YSA9IFdFQktJVF9QQUdFX0dFVF9QUklWQVRFKHBh
Z2UpOwotCi0gICAgZnJhbWVEYXRhLT5jbGllbnQgPSBuZXcgV2ViS2l0OjpGcmFtZUxvYWRlckNs
aWVudChmcmFtZSk7Ci0gICAgZnJhbWVEYXRhLT5mcmFtZSA9IG5ldyBGcmFtZShwYWdlRGF0YS0+
cGFnZSwgZWxlbWVudCwgZnJhbWVEYXRhLT5jbGllbnQpOwotCi0gICAgRnJhbWVWaWV3KiBmcmFt
ZVZpZXcgPSBuZXcgRnJhbWVWaWV3KGZyYW1lRGF0YS0+ZnJhbWUpOwotICAgIGZyYW1lVmlldy0+
c2V0Q29udGFpbmluZ1dpbmRvdyhHVEtfQ09OVEFJTkVSKHBhZ2UpKTsKLSAgICBmcmFtZURhdGEt
PmZyYW1lLT5zZXRWaWV3KGZyYW1lVmlldyk7Ci0gICAgZnJhbWVWaWV3LT5kZXJlZigpOwotICAg
IGZyYW1lRGF0YS0+ZnJhbWUtPmluaXQoKTsKLSAgICBmcmFtZURhdGEtPnBhZ2UgPSBwYWdlOwot
Ci0gICAgcmV0dXJuIGZyYW1lOwotfQotCi1jb25zdCBnY2hhciogd2Via2l0X2ZyYW1lX2dldF90
aXRsZShXZWJLaXRGcmFtZSogZnJhbWUpCi17Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VC
S0lUX0lTX0ZSQU1FKGZyYW1lKSwgTlVMTCk7Ci0KLSAgICBXZWJLaXRGcmFtZVByaXZhdGUqIGZy
YW1lRGF0YSA9IFdFQktJVF9GUkFNRV9HRVRfUFJJVkFURShmcmFtZSk7Ci0gICAgcmV0dXJuIGZy
YW1lRGF0YS0+dGl0bGU7Ci19Ci0KLWNvbnN0IGdjaGFyKiB3ZWJraXRfZnJhbWVfZ2V0X2xvY2F0
aW9uKFdlYktpdEZyYW1lKiBmcmFtZSkKLXsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJL
SVRfSVNfRlJBTUUoZnJhbWUpLCBOVUxMKTsKLQotICAgIFdlYktpdEZyYW1lUHJpdmF0ZSogZnJh
bWVEYXRhID0gV0VCS0lUX0ZSQU1FX0dFVF9QUklWQVRFKGZyYW1lKTsKLSAgICByZXR1cm4gZnJh
bWVEYXRhLT5sb2NhdGlvbjsKLX0KLQotLyoqCi0gKiB3ZWJraXRfZnJhbWVfZ2V0X3BhZ2U6Ci0g
KiBAZnJhbWU6IGEgI1dlYktpdEZyYW1lCi0gKgotICogUmV0dXJucyB0aGUgI1dlYktpdFBhZ2Ug
dGhhdCBtYW5hZ2VzIHRoaXMgI1dlYktpdEZyYW1lLgotICoKLSAqIFRoZSAjV2ViS2l0UGFnZSBy
ZXR1cm5lZCBtYW5hZ2VzIHRoZSBlbnRpcmUgaGllcmFyY2h5IG9mICNXZWJLaXRGcmFtZQotICog
b2JqZWN0cyB0aGF0IGNvbnRhaW5zIEBmcmFtZS4KLSAqCi0gKiBSZXR1cm4gdmFsdWU6IHRoZSAj
V2ViS2l0UGFnZSB0aGF0IG1hbmFnZXMgQGZyYW1lCi0gKi8KLVdlYktpdFBhZ2UqIHdlYmtpdF9m
cmFtZV9nZXRfcGFnZShXZWJLaXRGcmFtZSogZnJhbWUpCi17Ci0gICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoV0VCS0lUX0lTX0ZSQU1FKGZyYW1lKSwgTlVMTCk7Ci0KLSAgICBXZWJLaXRGcmFtZVBy
aXZhdGUqIGZyYW1lRGF0YSA9IFdFQktJVF9GUkFNRV9HRVRfUFJJVkFURShmcmFtZSk7Ci0gICAg
cmV0dXJuIGZyYW1lRGF0YS0+cGFnZTsKLX0KLQotLyoqCi0gKiB3ZWJraXRfZnJhbWVfZ2V0X25h
bWU6Ci0gKiBAZnJhbWU6IGEgI1dlYktpdEZyYW1lCi0gKgotICogUmV0dXJucyB0aGUgQGZyYW1l
J3MgbmFtZQotICoKLSAqIFJldHVybiB2YWx1ZTogdGhlIG5hbWUgb2YgQGZyYW1lCi0gKi8KLWNv
bnN0IGdjaGFyKiB3ZWJraXRfZnJhbWVfZ2V0X25hbWUoV2ViS2l0RnJhbWUqIGZyYW1lKQotewot
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19GUkFNRShmcmFtZSksIE5VTEwpOwot
Ci0gICAgV2ViS2l0RnJhbWVQcml2YXRlKiBmcmFtZURhdGEgPSBXRUJLSVRfRlJBTUVfR0VUX1BS
SVZBVEUoZnJhbWUpOwotCi0gICAgaWYgKGZyYW1lRGF0YS0+bmFtZSkKLSAgICAgICAgcmV0dXJu
IGZyYW1lRGF0YS0+bmFtZTsKLQotICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKGZyYW1lKTsK
LSAgICBnX3JldHVybl92YWxfaWZfZmFpbChjb3JlRnJhbWUsIE5VTEwpOwotCi0gICAgU3RyaW5n
IHN0cmluZyA9IGNvcmVGcmFtZS0+dHJlZSgpLT5uYW1lKCk7Ci0gICAgZnJhbWVEYXRhLT5uYW1l
ID0gZ19zdHJkdXAoc3RyaW5nLnV0ZjgoKS5kYXRhKCkpOwotCi0gICAgcmV0dXJuIGZyYW1lRGF0
YS0+bmFtZTsKLX0KLQotLyoqCi0gKiB3ZWJraXRfZnJhbWVfZ2V0X3BhcmVudDoKLSAqIEBmcmFt
ZTogYSAjV2ViS2l0RnJhbWUKLSAqCi0gKiBSZXR1cm5zIHRoZSBAZnJhbWUncyBwYXJlbnQgZnJh
bWUsIG9yICVOVUxMIGlmIGl0IGhhcyBub25lLgotICoKLSAqIFJldHVybiB2YWx1ZTogdGhlIHBh
cmVudCAjV2ViS2l0RnJhbWUgb3IgJU5VTEwgaW4gY2FzZSB0aGVyZSBpcyBub25lCi0gKi8KLVdl
YktpdEZyYW1lKiB3ZWJraXRfZnJhbWVfZ2V0X3BhcmVudChXZWJLaXRGcmFtZSogZnJhbWUpCi17
Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX0ZSQU1FKGZyYW1lKSwgTlVMTCk7
Ci0KLSAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShmcmFtZSk7Ci0gICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoY29yZUZyYW1lLCBOVUxMKTsKLQotICAgIHJldHVybiBraXQoY29yZUZyYW1lLT50
cmVlKCktPnBhcmVudCgpKTsKLX0KLQotLyoqCi0gKiB3ZWJraXRfZnJhbWVfbG9hZF9yZXF1ZXN0
OgotICogQGZyYW1lOiBhICNXZWJLaXRGcmFtZQotICogQHJlcXVlc3Q6IGEgI1dlYktpdE5ldHdv
cmtSZXF1ZXN0Ci0gKgotICogQ29ubmVjdHMgdG8gYSBnaXZlbiBVUkkgYnkgaW5pdGlhdGluZyBh
biBhc3luY2hyb25vdXMgY2xpZW50IHJlcXVlc3QuCi0gKgotICogQ3JlYXRlcyBhIHByb3Zpc2lv
bmFsIGRhdGEgc291cmNlIHRoYXQgd2lsbCB0cmFuc2l0aW9uIHRvIGEgY29tbWl0dGVkIGRhdGEK
LSAqIHNvdXJjZSBvbmNlIGFueSBkYXRhIGhhcyBiZWVuIHJlY2VpdmVkLiBVc2Ugd2Via2l0X2Zy
YW1lX3N0b3BfbG9hZGluZygpIHRvCi0gKiBzdG9wIHRoZSBsb2FkLiBUaGlzIGZ1bmN0aW9uIGlz
IHR5cGljYWxseSBpbnZva2VkIG9uIHRoZSBtYWluIGZyYW1lLgotICovCi12b2lkIHdlYmtpdF9m
cmFtZV9sb2FkX3JlcXVlc3QoV2ViS2l0RnJhbWUqIGZyYW1lLCBXZWJLaXROZXR3b3JrUmVxdWVz
dCogcmVxdWVzdCkKLXsKLSAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19GUkFNRShmcmFt
ZSkpOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX05FVFdPUktfUkVRVUVTVChyZXF1
ZXN0KSk7Ci0KLSAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShmcmFtZSk7Ci0gICAgZ19yZXR1
cm5faWZfZmFpbChjb3JlRnJhbWUpOwotCi0gICAgLy8gVE9ETzogVXNlIHRoZSBSZXNvdXJjZVJl
cXVlc3QgY2FycmllZCBieSBXZWJLaXROZXR3b3JrUmVxdWVzdCB3aGVuIGl0IGdldHMgaW1wbGVt
ZW50ZWQuCi0gICAgRGVwcmVjYXRlZFN0cmluZyBzdHJpbmcgPSBEZXByZWNhdGVkU3RyaW5nOjpm
cm9tVXRmOCh3ZWJraXRfbmV0d29ya19yZXF1ZXN0X2dldF91cmkocmVxdWVzdCkpOwotICAgIGNv
cmVGcmFtZS0+bG9hZGVyKCktPmxvYWQoUmVzb3VyY2VSZXF1ZXN0KEtVUkwoc3RyaW5nKSkpOwot
fQotCi0vKioKLSAqIHdlYmtpdF9mcmFtZV9zdG9wX2xvYWRpbmc6Ci0gKiBAZnJhbWU6IGEgI1dl
YktpdEZyYW1lCi0gKgotICogU3RvcHMgYW55IHBlbmRpbmcgbG9hZHMgb24gQGZyYW1lJ3MgZGF0
YSBzb3VyY2UsIGFuZCB0aG9zZSBvZiBpdHMgY2hpbGRyZW4uCi0gKi8KLXZvaWQgd2Via2l0X2Zy
YW1lX3N0b3BfbG9hZGluZyhXZWJLaXRGcmFtZSogZnJhbWUpCi17Ci0gICAgZ19yZXR1cm5faWZf
ZmFpbChXRUJLSVRfSVNfRlJBTUUoZnJhbWUpKTsKLQotICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBj
b3JlKGZyYW1lKTsKLSAgICBnX3JldHVybl9pZl9mYWlsKGNvcmVGcmFtZSk7Ci0KLSAgICBjb3Jl
RnJhbWUtPmxvYWRlcigpLT5zdG9wQWxsTG9hZGVycygpOwotfQotCi0vKioKLSAqIHdlYmtpdF9m
cmFtZV9yZWxvYWQ6Ci0gKiBAZnJhbWU6IGEgI1dlYktpdEZyYW1lCi0gKgotICogUmVsb2FkcyB0
aGUgaW5pdGlhbCByZXF1ZXN0LgotICovCi12b2lkIHdlYmtpdF9mcmFtZV9yZWxvYWQoV2ViS2l0
RnJhbWUqIGZyYW1lKQotewotICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX0ZSQU1FKGZy
YW1lKSk7Ci0KLSAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShmcmFtZSk7Ci0gICAgZ19yZXR1
cm5faWZfZmFpbChjb3JlRnJhbWUpOwotCi0gICAgY29yZUZyYW1lLT5sb2FkZXIoKS0+cmVsb2Fk
KCk7Ci19Ci0KLS8qKgotICogd2Via2l0X2ZyYW1lX2ZpbmRfZnJhbWU6Ci0gKiBAZnJhbWU6IGEg
I1dlYktpdEZyYW1lCi0gKiBAbmFtZTogdGhlIG5hbWUgb2YgdGhlIGZyYW1lIHRvIGJlIGZvdW5k
Ci0gKgotICogRm9yIHByZS1kZWZpbmVkIG5hbWVzLCByZXR1cm5zIEBmcmFtZSBpZiBAbmFtZSBp
cyAiX3NlbGYiIG9yICJfY3VycmVudCIsCi0gKiByZXR1cm5zIEBmcmFtZSdzIHBhcmVudCBmcmFt
ZSBpZiBAbmFtZSBpcyAiX3BhcmVudCIsIGFuZCByZXR1cm5zIHRoZSBtYWluCi0gKiBmcmFtZSBp
ZiBAbmFtZSBpcyAiX3RvcCIuIEFsc28gcmV0dXJucyBAZnJhbWUgaWYgaXQgaXMgdGhlIG1haW4g
ZnJhbWUgYW5kCi0gKiBAbmFtZSBpcyBlaXRoZXIgIl9wYXJlbnQiIG9yICJfdG9wIi4gRm9yIG90
aGVyIG5hbWVzLCB0aGlzIGZ1bmN0aW9uIHJldHVybnMKLSAqIHRoZSBmaXJzdCBmcmFtZSB0aGF0
IG1hdGNoZXMgQG5hbWUuIFRoaXMgZnVuY3Rpb24gc2VhcmNoZXMgQGZyYW1lIGFuZCBpdHMKLSAq
IGRlc2NlbmRlbnRzIGZpcnN0LCB0aGVuIEBmcmFtZSdzIHBhcmVudCBhbmQgaXRzIGNoaWxkcmVu
IG1vdmluZyB1cCB0aGUKLSAqIGhpZXJhcmNoeSB1bnRpbCBhIG1hdGNoIGlzIGZvdW5kLiBJZiBu
byBtYXRjaCBpcyBmb3VuZCBpbiBAZnJhbWUncwotICogaGllcmFyY2h5LCB0aGlzIGZ1bmN0aW9u
IHdpbGwgc2VhcmNoIGZvciBhIG1hdGNoaW5nIGZyYW1lIGluIG90aGVyIG1haW4KLSAqIGZyYW1l
IGhpZXJhcmNoaWVzLiBSZXR1cm5zICVOVUxMIGlmIG5vIG1hdGNoIGlzIGZvdW5kLgotICoKLSAq
IFJldHVybiB2YWx1ZTogdGhlIGZvdW5kICNXZWJLaXRGcmFtZSBvciAlTlVMTCBpbiBjYXNlIG5v
bmUgaXMgZm91bmQKLSAqLwotV2ViS2l0RnJhbWUqIHdlYmtpdF9mcmFtZV9maW5kX2ZyYW1lKFdl
YktpdEZyYW1lKiBmcmFtZSwgY29uc3QgZ2NoYXIqIG5hbWUpCi17Ci0gICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoV0VCS0lUX0lTX0ZSQU1FKGZyYW1lKSwgTlVMTCk7Ci0gICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwobmFtZSwgTlVMTCk7Ci0KLSAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShmcmFt
ZSk7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoY29yZUZyYW1lLCBOVUxMKTsKLQotICAgIFN0
cmluZyBuYW1lU3RyaW5nID0gU3RyaW5nOjpmcm9tVVRGOChuYW1lKTsKLSAgICByZXR1cm4ga2l0
KGNvcmVGcmFtZS0+dHJlZSgpLT5maW5kKEF0b21pY1N0cmluZyhuYW1lU3RyaW5nKSkpOwotfQot
Ci0vKioKLSAqIHdlYmtpdF9mcmFtZV9nZXRfZ2xvYmFsX2NvbnRleHQ6Ci0gKiBAZnJhbWU6IGEg
I1dlYktpdEZyYW1lCi0gKgotICogR2V0cyB0aGUgZ2xvYmFsIEphdmFTY3JpcHQgZXhlY3V0aW9u
IGNvbnRleHQuIFVzZSB0aGlzIGZ1bmN0aW9uIHRvIGJyaWRnZQotICogYmV0d2VlbiB0aGUgV2Vi
S2l0IGFuZCBKYXZhU2NyaXB0Q29yZSBBUElzLgotICoKLSAqIFJldHVybiB2YWx1ZTogdGhlIGds
b2JhbCBKYXZhU2NyaXB0IGNvbnRleHQKLSAqLwotSlNHbG9iYWxDb250ZXh0UmVmIHdlYmtpdF9m
cmFtZV9nZXRfZ2xvYmFsX2NvbnRleHQoV2ViS2l0RnJhbWUqIGZyYW1lKQotewotICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19GUkFNRShmcmFtZSksIE5VTEwpOwotCi0gICAgRnJh
bWUqIGNvcmVGcmFtZSA9IGNvcmUoZnJhbWUpOwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGNv
cmVGcmFtZSwgTlVMTCk7Ci0KLSAgICByZXR1cm4gdG9HbG9iYWxSZWYoY29yZUZyYW1lLT5zY3Jp
cHRQcm94eSgpLT5pbnRlcnByZXRlcigpLT5nbG9iYWxFeGVjKCkpOwotfQotCi19CkluZGV4OiBX
ZWJLaXQvZ3RrL0FwaS93ZWJraXRndGtmcmFtZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9ndGsv
QXBpL3dlYmtpdGd0a2ZyYW1lLmgJKHJldmlzaW9uIDI4MjUxKQorKysgV2ViS2l0L2d0ay9BcGkv
d2Via2l0Z3RrZnJhbWUuaAkod29ya2luZyBjb3B5KQpAQCAtMSwxMDUgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgotICogQ29weXJp
Z2h0IChDKSAyMDA3IEFscCBUb2tlciA8YWxwQGF0b2tlci5jb20+Ci0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LiAKLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LiAKLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlLCBJbmMuICgiQXBwbGUiKSBub3Ig
dGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMg
SVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBXRUJLSVRfRlJBTUVfSAot
I2RlZmluZSBXRUJLSVRfRlJBTUVfSAotCi0jaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KLSNpbmNs
dWRlIDxnZGsvZ2RrLmg+Ci0KLSNpbmNsdWRlICJ3ZWJraXRndGtkZWZpbmVzLmgiCi0KLUdfQkVH
SU5fREVDTFMKLQotI2RlZmluZSBXRUJLSVRfVFlQRV9GUkFNRSAgICAgICAgICAgICh3ZWJraXRf
ZnJhbWVfZ2V0X3R5cGUoKSkKLSNkZWZpbmUgV0VCS0lUX0ZSQU1FKG9iaikgICAgICAgICAgICAo
R19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9UWVBFX0ZSQU1FLCBXZWJL
aXRGcmFtZSkpCi0jZGVmaW5lIFdFQktJVF9GUkFNRV9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9D
SEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfVFlQRV9GUkFNRSwgV2ViS2l0RnJhbWVD
bGFzcykpCi0jZGVmaW5lIFdFQktJVF9JU19GUkFNRShvYmopICAgICAgICAgKEdfVFlQRV9DSEVD
S19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfVFlQRV9GUkFNRSkpCi0jZGVmaW5lIFdFQktJ
VF9JU19GUkFNRV9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyks
ICBXRUJLSVRfVFlQRV9GUkFNRSkpCi0jZGVmaW5lIFdFQktJVF9GUkFNRV9HRVRfQ0xBU1Mob2Jq
KSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfVFlQRV9GUkFNRSwg
V2ViS2l0RnJhbWVDbGFzcykpCi0KLQotc3RydWN0IF9XZWJLaXRGcmFtZSB7Ci0gICAgR09iamVj
dCBwYXJlbnQ7Ci19OwotCi1zdHJ1Y3QgX1dlYktpdEZyYW1lQ2xhc3MgewotICAgIEdPYmplY3RD
bGFzcyBwYXJlbnQ7Ci0KLSAgICB2b2lkICgqdGl0bGVfY2hhbmdlZCkgKFdlYktpdEZyYW1lKiBm
cmFtZSwgZ2NoYXIqIHRpdGxlLCBnY2hhciogbG9jYXRpb24pOwotCi0gICAgLyoKLSAgICAgKiBw
cm90ZWN0ZWQgdmlydHVhbCBtZXRob2RzCi0gICAgICovCi0gICAgdm9pZCAoKm1vdXNlX21vdmVf
ZXZlbnQpICAoV2ViS2l0RnJhbWUqIGZyYW1lLCBHZGtFdmVudCogbW92ZV9ldmVudCk7Ci0gICAg
dm9pZCAoKm1vdXNlX3ByZXNzX2V2ZW50KSAoV2ViS2l0RnJhbWUqIGZyYW1lLCBHZGtFdmVudCog
cHJlc3NfZXZlbnQpOwotICAgIHZvaWQgKCptb3VzZV9yZWxlYXNlX2V2ZW50KSAoV2ViS2l0RnJh
bWUqIGZyYW1lLCBHZGtFdmVudCogbW91c2VfcmVsZWFzZV9ldmVudCk7Ci0gICAgdm9pZCAoKm1v
dXNlX2RvdWJsZV9jbGlja19ldmVudCkgKFdlYktpdEZyYW1lKiBmcmFtZSwgR2RrRXZlbnQqIGRv
dWJsZV9jbGlja19ldmVudCk7Ci0gICAgdm9pZCAoKm1vdXNlX3doZWVsX2V2ZW50KSAoV2ViS2l0
RnJhbWUqIGZyYW1lLCBHZGtFdmVudCogd2hlZWxfZXZlbnQpOwotfTsKLQotV0VCS0lUX0FQSSBH
VHlwZQotd2Via2l0X2ZyYW1lX2dldF90eXBlICh2b2lkKTsKLQotV0VCS0lUX0FQSSBXZWJLaXRG
cmFtZSoKLXdlYmtpdF9mcmFtZV9uZXcgKFdlYktpdFBhZ2UqIHBhZ2UpOwotCi1XRUJLSVRfQVBJ
IFdlYktpdFBhZ2UqCi13ZWJraXRfZnJhbWVfZ2V0X3BhZ2UgKFdlYktpdEZyYW1lKiBmcmFtZSk7
Ci0KLVdFQktJVF9BUEkgY29uc3QgZ2NoYXIqCi13ZWJraXRfZnJhbWVfZ2V0X25hbWUgKFdlYktp
dEZyYW1lKiBmcmFtZSk7Ci0KLVdFQktJVF9BUEkgY29uc3QgZ2NoYXIqCi13ZWJraXRfZnJhbWVf
Z2V0X3RpdGxlIChXZWJLaXRGcmFtZSogZnJhbWUpOwotCi1XRUJLSVRfQVBJIGNvbnN0IGdjaGFy
Kgotd2Via2l0X2ZyYW1lX2dldF9sb2NhdGlvbiAoV2ViS2l0RnJhbWUqIGZyYW1lKTsKLQotV0VC
S0lUX0FQSSBXZWJLaXRGcmFtZSoKLXdlYmtpdF9mcmFtZV9nZXRfcGFyZW50IChXZWJLaXRGcmFt
ZSogZnJhbWUpOwotCi1XRUJLSVRfQVBJIHZvaWQKLXdlYmtpdF9mcmFtZV9sb2FkX3JlcXVlc3Qg
KFdlYktpdEZyYW1lKiBmcmFtZSwgV2ViS2l0TmV0d29ya1JlcXVlc3QqIHJlcXVlc3QpOwotCi1X
RUJLSVRfQVBJIHZvaWQKLXdlYmtpdF9mcmFtZV9zdG9wX2xvYWRpbmcgKFdlYktpdEZyYW1lKiBm
cmFtZSk7Ci0KLVdFQktJVF9BUEkgdm9pZAotd2Via2l0X2ZyYW1lX3JlbG9hZCAoV2ViS2l0RnJh
bWUqIGZyYW1lKTsKLQotV0VCS0lUX0FQSSBXZWJLaXRGcmFtZSoKLXdlYmtpdF9mcmFtZV9maW5k
X2ZyYW1lIChXZWJLaXRGcmFtZSogZnJhbWUsIGNvbnN0IGdjaGFyKiBuYW1lKTsKLQotV0VCS0lU
X0FQSSBKU0dsb2JhbENvbnRleHRSZWYKLXdlYmtpdF9mcmFtZV9nZXRfZ2xvYmFsX2NvbnRleHQg
KFdlYktpdEZyYW1lKiBmcmFtZSk7Ci0KLUdfRU5EX0RFQ0xTCi0KLSNlbmRpZgpJbmRleDogV2Vi
S2l0L2d0ay9BcGkvd2Via2l0Z3RrZ2xvYmFsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvZ3Rr
L0FwaS93ZWJraXRndGtnbG9iYWwuY3BwCShyZXZpc2lvbiAyODI1MSkKKysrIFdlYktpdC9ndGsv
QXBpL3dlYmtpdGd0a2dsb2JhbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNTEgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4gCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4gCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSwgSW5jLiAo
IkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9t
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
IAotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05U
UklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJj
b25maWcuaCIKLSNpbmNsdWRlICJ3ZWJraXRndGtnbG9iYWwuaCIKLQotI2luY2x1ZGUgIkxvZ2dp
bmcuaCIKLSNpbmNsdWRlICJEYXRhYmFzZVRyYWNrZXIuaCIKLQotI2luY2x1ZGUgPGdsaWIuaD4K
LQotZXh0ZXJuICJDIiB7Ci12b2lkIHdlYmtpdF9pbml0KHZvaWQpCi17Ci0gICAgV2ViQ29yZTo6
SW5pdGlhbGl6ZUxvZ2dpbmdDaGFubmVsc0lmTmVjZXNzYXJ5KCk7Ci0KLSAgICBXZWJDb3JlOjpp
bml0aWFsaXplVGhyZWFkaW5nKCk7Ci0KLSNpZiBFTkFCTEUoREFUQUJBU0UpCi0gICAgLy8gRklY
TUU6IEl0IHNob3VsZCBiZSBwb3NzaWJsZSBmb3IgY2xpZW50IGFwcGxpY2F0aW9ucyB0byBvdmVy
cmlkZSB0aGlzIGRlZmF1bHQgbG9jYXRpb24KLSAgICBnY2hhciogZGF0YWJhc2VEaXJlY3Rvcnkg
PSBnX2J1aWxkX2ZpbGVuYW1lKGdfZ2V0X3VzZXJfZGF0YV9kaXIoKSwgIndlYmtpdCIsICJkYXRh
YmFzZXMiLCBOVUxMKTsKLSAgICBXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OnRyYWNrZXIoKS5z
ZXREYXRhYmFzZVBhdGgoZGF0YWJhc2VEaXJlY3RvcnkpOwotICAgIGdfZnJlZShkYXRhYmFzZURp
cmVjdG9yeSk7Ci0jZW5kaWYKLX0KLX0KSW5kZXg6IFdlYktpdC9ndGsvQXBpL3dlYmtpdGd0a2ds
b2JhbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9ndGsvQXBpL3dlYmtpdGd0a2dsb2JhbC5oCShy
ZXZpc2lvbiAyODI1MSkKKysrIFdlYktpdC9ndGsvQXBpL3dlYmtpdGd0a2dsb2JhbC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDQxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9s
Z2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotICogMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAotICogMy4gIE5laXRo
ZXIgdGhlIG5hbWUgb2YgQXBwbGUsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAq
ICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQot
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICog
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFdFQktJVF9HTE9CQUxfSAotI2RlZmluZSBXRUJLSVRf
R0xPQkFMX0gKLQotI2luY2x1ZGUgIndlYmtpdGd0a2RlZmluZXMuaCIKLQotR19CRUdJTl9ERUNM
UwotCi1XRUJLSVRfQVBJIHZvaWQKLXdlYmtpdF9pbml0ICh2b2lkKTsKLQotR19FTkRfREVDTFMK
LQotI2VuZGlmCkluZGV4OiBXZWJLaXQvZ3RrL0FwaS93ZWJraXRndGtuZXR3b3JrcmVxdWVzdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViS2l0L2d0ay9BcGkvd2Via2l0Z3RrbmV0d29ya3JlcXVlc3Qu
Y3BwCShyZXZpc2lvbiAyODI1MSkKKysrIFdlYktpdC9ndGsvQXBpL3dlYmtpdGd0a25ldHdvcmty
ZXF1ZXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw5NCArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LiAKLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LiAKLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlLCBJbmMuICgiQXBwbGUiKSBub3Ig
dGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMg
SVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0j
aW5jbHVkZSAid2Via2l0Z3RrbmV0d29ya3JlcXVlc3QuaCIKLSNpbmNsdWRlICJ3ZWJraXRndGtw
cml2YXRlLmgiCi0KLXVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7Ci11c2luZyBuYW1lc3BhY2UgV2Vi
Q29yZTsKLQotZXh0ZXJuICJDIiB7Ci0KLUdfREVGSU5FX1RZUEUoV2ViS2l0TmV0d29ya1JlcXVl
c3QsIHdlYmtpdF9uZXR3b3JrX3JlcXVlc3QsIEdfVFlQRV9PQkpFQ1QpOwotCi1zdGF0aWMgdm9p
ZCB3ZWJraXRfbmV0d29ya19yZXF1ZXN0X2ZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkKLXsKLSAg
ICBXZWJLaXROZXR3b3JrUmVxdWVzdFByaXZhdGUqIHJlcXVlc3RQcml2YXRlID0gV0VCS0lUX05F
VFdPUktfUkVRVUVTVF9HRVRfUFJJVkFURShvYmplY3QpOwotCi0gICAgZ19mcmVlKHJlcXVlc3RQ
cml2YXRlLT51cmkpOwotCi0gICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0X25ldHdvcmtfcmVxdWVz
dF9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShvYmplY3QpOwotfQotCi1zdGF0aWMgdm9pZCB3ZWJr
aXRfbmV0d29ya19yZXF1ZXN0X2NsYXNzX2luaXQoV2ViS2l0TmV0d29ya1JlcXVlc3RDbGFzcyog
cmVxdWVzdENsYXNzKQotewotICAgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZShyZXF1ZXN0Q2xh
c3MsIHNpemVvZihXZWJLaXROZXR3b3JrUmVxdWVzdFByaXZhdGUpKTsKLQotICAgIEdfT0JKRUNU
X0NMQVNTKHJlcXVlc3RDbGFzcyktPmZpbmFsaXplID0gd2Via2l0X25ldHdvcmtfcmVxdWVzdF9m
aW5hbGl6ZTsKLX0KLQotc3RhdGljIHZvaWQgd2Via2l0X25ldHdvcmtfcmVxdWVzdF9pbml0KFdl
YktpdE5ldHdvcmtSZXF1ZXN0KiByZXF1ZXN0KQotewotfQotCi1XZWJLaXROZXR3b3JrUmVxdWVz
dCogd2Via2l0X25ldHdvcmtfcmVxdWVzdF9uZXcoY29uc3QgZ2NoYXIqIHVyaSkKLXsKLSAgICBX
ZWJLaXROZXR3b3JrUmVxdWVzdCogcmVxdWVzdCA9IFdFQktJVF9ORVRXT1JLX1JFUVVFU1QoZ19v
YmplY3RfbmV3KFdFQktJVF9UWVBFX05FVFdPUktfUkVRVUVTVCwgTlVMTCkpOwotICAgIFdlYktp
dE5ldHdvcmtSZXF1ZXN0UHJpdmF0ZSogcmVxdWVzdFByaXZhdGUgPSBXRUJLSVRfTkVUV09SS19S
RVFVRVNUX0dFVF9QUklWQVRFKHJlcXVlc3QpOwotCi0gICAgcmVxdWVzdFByaXZhdGUtPnVyaSA9
IGdfc3RyZHVwKHVyaSk7Ci0KLSAgICByZXR1cm4gcmVxdWVzdDsKLX0KLQotdm9pZCB3ZWJraXRf
bmV0d29ya19yZXF1ZXN0X3NldF91cmkoV2ViS2l0TmV0d29ya1JlcXVlc3QqIHJlcXVlc3QsIGNv
bnN0IGdjaGFyKiB1cmkpCi17Ci0gICAgV2ViS2l0TmV0d29ya1JlcXVlc3RQcml2YXRlKiByZXF1
ZXN0UHJpdmF0ZTsKLQotICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX05FVFdPUktfUkVR
VUVTVChyZXF1ZXN0KSk7Ci0KLSAgICByZXF1ZXN0UHJpdmF0ZSA9IFdFQktJVF9ORVRXT1JLX1JF
UVVFU1RfR0VUX1BSSVZBVEUocmVxdWVzdCk7Ci0KLSAgICBnX2ZyZWUocmVxdWVzdFByaXZhdGUt
PnVyaSk7Ci0gICAgcmVxdWVzdFByaXZhdGUtPnVyaSA9IGdfc3RyZHVwKHVyaSk7Ci19Ci0KLWNv
bnN0IGdjaGFyKiB3ZWJraXRfbmV0d29ya19yZXF1ZXN0X2dldF91cmkoV2ViS2l0TmV0d29ya1Jl
cXVlc3QqIHJlcXVlc3QpCi17Ci0gICAgV2ViS2l0TmV0d29ya1JlcXVlc3RQcml2YXRlKiByZXF1
ZXN0UHJpdmF0ZTsKLQotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19ORVRXT1JL
X1JFUVVFU1QocmVxdWVzdCksIE5VTEwpOwotCi0gICAgcmVxdWVzdFByaXZhdGUgPSBXRUJLSVRf
TkVUV09SS19SRVFVRVNUX0dFVF9QUklWQVRFKHJlcXVlc3QpOwotCi0gICAgcmV0dXJuIHJlcXVl
c3RQcml2YXRlLT51cmk7Ci19Ci0KLX0KSW5kZXg6IFdlYktpdC9ndGsvQXBpL3dlYmtpdGd0a25l
dHdvcmtyZXF1ZXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2d0ay9BcGkvd2Via2l0Z3RrbmV0
d29ya3JlcXVlc3QuaAkocmV2aXNpb24gMjgyNTEpCisrKyBXZWJLaXQvZ3RrL0FwaS93ZWJraXRn
dGtuZXR3b3JrcmVxdWVzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDY4ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuIAotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uIAotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUsIEluYy4gKCJBcHBs
ZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVU
T1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFdFQktJVF9O
RVRXT1JLX1JFUVVFU1RfSAotI2RlZmluZSBXRUJLSVRfTkVUV09SS19SRVFVRVNUX0gKLQotI2lu
Y2x1ZGUgPGdsaWItb2JqZWN0Lmg+Ci0KLSNpbmNsdWRlICJ3ZWJraXRndGtkZWZpbmVzLmgiCi0K
LUdfQkVHSU5fREVDTFMKLQotI2RlZmluZSBXRUJLSVRfVFlQRV9ORVRXT1JLX1JFUVVFU1QgICAg
ICAgICAgICAod2Via2l0X25ldHdvcmtfcmVxdWVzdF9nZXRfdHlwZSgpKQotI2RlZmluZSBXRUJL
SVRfTkVUV09SS19SRVFVRVNUKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNF
X0NBU1QoKG9iaiksIFdFQktJVF9UWVBFX05FVFdPUktfUkVRVUVTVCwgV2ViS2l0TmV0d29ya1Jl
cXVlc3QpKQotI2RlZmluZSBXRUJLSVRfTkVUV09SS19SRVFVRVNUX0NMQVNTKGtsYXNzKSAgICAo
R19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9UWVBFX05FVFdPUktfUkVR
VUVTVCwgV2ViS2l0TmV0d29ya1JlcXVlc3RDbGFzcykpCi0jZGVmaW5lIFdFQktJVF9JU19ORVRX
T1JLX1JFUVVFU1Qob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2Jq
KSwgV0VCS0lUX1RZUEVfTkVUV09SS19SRVFVRVNUKSkKLSNkZWZpbmUgV0VCS0lUX0lTX05FVFdP
UktfUkVRVUVTVF9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyks
ICBXRUJLSVRfVFlQRV9ORVRXT1JLX1JFUVVFU1QpKQotI2RlZmluZSBXRUJLSVRfTkVUV09SS19S
RVFVRVNUX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwg
IFdFQktJVF9UWVBFX05FVFdPUktfUkVRVUVTVCwgV2ViS2l0TmV0d29ya1JlcXVlc3RDbGFzcykp
Ci0KLQotc3RydWN0IF9XZWJLaXROZXR3b3JrUmVxdWVzdCB7Ci0gICAgR09iamVjdCBwYXJlbnQ7
Ci19OwotCi1zdHJ1Y3QgX1dlYktpdE5ldHdvcmtSZXF1ZXN0Q2xhc3MgewotICAgIEdPYmplY3RD
bGFzcyBwYXJlbnQ7Ci19OwotCi1XRUJLSVRfQVBJIEdUeXBlCi13ZWJraXRfbmV0d29ya19yZXF1
ZXN0X2dldF90eXBlICh2b2lkKTsKLQotV0VCS0lUX0FQSSBXZWJLaXROZXR3b3JrUmVxdWVzdCoK
LXdlYmtpdF9uZXR3b3JrX3JlcXVlc3RfbmV3IChjb25zdCBnY2hhciogdXJpKTsKLQotV0VCS0lU
X0FQSSB2b2lkCi13ZWJraXRfbmV0d29ya19yZXF1ZXN0X3NldF91cmkgKFdlYktpdE5ldHdvcmtS
ZXF1ZXN0KiByZXF1ZXN0LCBjb25zdCBnY2hhciogdXJpKTsKLQotV0VCS0lUX0FQSSBjb25zdCBn
Y2hhcioKLXdlYmtpdF9uZXR3b3JrX3JlcXVlc3RfZ2V0X3VyaSAoV2ViS2l0TmV0d29ya1JlcXVl
c3QqIHJlcXVlc3QpOwotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYKSW5kZXg6IFdlYktpdC9ndGsv
QXBpL3dlYmtpdGd0a3BhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9ndGsvQXBpL3dlYmtp
dGd0a3BhZ2UuY3BwCShyZXZpc2lvbiAyODI1MSkKKysrIFdlYktpdC9ndGsvQXBpL3dlYmtpdGd0
a3BhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDg2NSArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDcgQ2hyaXN0aWFuIER5d2FuIDxjaHJpc3RpYW5AdHdvdG9hc3RzLmRlPgotICogQ29weXJp
Z2h0IChDKSAyMDA3IFhhbiBMb3BleiA8eGFuQGdub21lLm9yZz4KLSAqIENvcHlyaWdodCAoQykg
MjAwNyBBbHAgVG9rZXIgPGFscEBhdG9rZXIuY29tPgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0gKiAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCi0gKiAz
LiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1l
cyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQg
QU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2luY2x1ZGUg
IndlYmtpdGd0a3BhZ2UuaCIKLSNpbmNsdWRlICJ3ZWJraXRndGstbWFyc2hhbC5oIgotI2luY2x1
ZGUgIndlYmtpdGd0a3ByaXZhdGUuaCIKLQotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0j
aW5jbHVkZSAiQ2hyb21lQ2xpZW50R3RrLmgiCi0jaW5jbHVkZSAiQ29udGV4dE1lbnVDbGllbnRH
dGsuaCIKLSNpbmNsdWRlICJEcmFnQ2xpZW50R3RrLmgiCi0jaW5jbHVkZSAiRWRpdG9yQ2xpZW50
R3RrLmgiCi0jaW5jbHVkZSAiRXZlbnRIYW5kbGVyLmgiCi0jaW5jbHVkZSAiSGl0VGVzdFJlcXVl
c3QuaCIKLSNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0LmgiCi0jaW5jbHVkZSAiSW5zcGVjdG9yQ2xpZW50R3RrLmgiCi0jaW5jbHVkZSAiRnJhbWVM
b2FkZXIuaCIKLSNpbmNsdWRlICJGcmFtZVZpZXcuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybUtleWJv
YXJkRXZlbnQuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybVdoZWVsRXZlbnQuaCIKLSNpbmNsdWRlICJT
dWJzdGl0dXRlRGF0YS5oIgotCi0jaW5jbHVkZSA8Z2RrL2dka2tleXN5bXMuaD4KLQotdXNpbmcg
bmFtZXNwYWNlIFdlYktpdDsKLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1leHRlcm4gIkMi
IHsKLQotZW51bSB7Ci0gICAgLyogbm9ybWFsIHNpZ25hbHMgKi8KLSAgICBOQVZJR0FUSU9OX1JF
UVVFU1RFRCwKLSAgICBXSU5ET1dfT0JKRUNUX0NMRUFSRUQsCi0gICAgTE9BRF9TVEFSVEVELAot
ICAgIExPQURfUFJPR1JFU1NfQ0hBTkdFRCwKLSAgICBMT0FEX0ZJTklTSEVELAotICAgIFRJVExF
X0NIQU5HRUQsCi0gICAgSE9WRVJJTkdfT1ZFUl9MSU5LLAotICAgIFNUQVRVU19CQVJfVEVYVF9D
SEFOR0VELAotICAgIElDT05EX0xPQURFRCwKLSAgICBTRUxFQ1RJT05fQ0hBTkdFRCwKLSAgICBD
T05TT0xFX01FU1NBR0UsCi0gICAgU0NSSVBUX0FMRVJULAotICAgIFNDUklQVF9DT05GSVJNLAot
ICAgIFNDUklQVF9QUk9NUFQsCi0gICAgTEFTVF9TSUdOQUwKLX07Ci0KLXN0YXRpYyBndWludCB3
ZWJraXRfcGFnZV9zaWduYWxzW0xBU1RfU0lHTkFMXSA9IHsgMCwgfTsKLQotR19ERUZJTkVfVFlQ
RShXZWJLaXRQYWdlLCB3ZWJraXRfcGFnZSwgR1RLX1RZUEVfQ09OVEFJTkVSKQotCi1zdGF0aWMg
Z2Jvb2xlYW4gd2Via2l0X3BhZ2VfZXhwb3NlX2V2ZW50KEd0a1dpZGdldCogd2lkZ2V0LCBHZGtF
dmVudEV4cG9zZSogZXZlbnQpCi17Ci0gICAgRnJhbWUqIGZyYW1lID0gY29yZShnZXRGcmFtZUZy
b21QYWdlKFdFQktJVF9QQUdFKHdpZGdldCkpKTsKLSAgICBHZGtSZWN0YW5nbGUgY2xpcDsKLSAg
ICBnZGtfcmVnaW9uX2dldF9jbGlwYm94KGV2ZW50LT5yZWdpb24sICZjbGlwKTsKLSAgICBjYWly
b190KiBjciA9IGdka19jYWlyb19jcmVhdGUoZXZlbnQtPndpbmRvdyk7Ci0gICAgR3JhcGhpY3ND
b250ZXh0IGN0eChjcik7Ci0gICAgY3R4LnNldEdka0V4cG9zZUV2ZW50KGV2ZW50KTsKLSAgICBp
ZiAoZnJhbWUtPnJlbmRlcmVyKCkpIHsKLSAgICAgICAgZnJhbWUtPnZpZXcoKS0+bGF5b3V0SWZO
ZWVkZWRSZWN1cnNpdmUoKTsKLSAgICAgICAgZnJhbWUtPnZpZXcoKS0+cGFpbnQoJmN0eCwgY2xp
cCk7Ci0gICAgfQotICAgIGNhaXJvX2Rlc3Ryb3koY3IpOwotCi0gICAgcmV0dXJuIEZBTFNFOwot
fQotCi1zdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X3BhZ2Vfa2V5X2V2ZW50KEd0a1dpZGdldCogd2lk
Z2V0LCBHZGtFdmVudEtleSogZXZlbnQpCi17Ci0gICAgRnJhbWUqIGZyYW1lID0gY29yZShnZXRG
cmFtZUZyb21QYWdlKFdFQktJVF9QQUdFKHdpZGdldCkpKTsKLSAgICBQbGF0Zm9ybUtleWJvYXJk
RXZlbnQga2V5Ym9hcmRFdmVudChldmVudCk7Ci0KLSAgICBpZiAoZnJhbWUtPmV2ZW50SGFuZGxl
cigpLT5rZXlFdmVudChrZXlib2FyZEV2ZW50KSkKLSAgICAgICAgcmV0dXJuIFRSVUU7Ci0KLSAg
ICBpZiAoZXZlbnQtPnR5cGUgIT0gR0RLX0tFWV9QUkVTUykKLSAgICAgICAgcmV0dXJuIEZBTFNF
OwotCi0gICAgRnJhbWVWaWV3KiB2aWV3ID0gZnJhbWUtPnZpZXcoKTsKLQotICAgIC8qIEZJWE1F
OiBhdCB0aGUgdmVyeSBsZWFzdCB3ZSBzaG91bGQgYmUgdXNpbmcgdGhlIHNhbWUgY29kZSB0aGFu
IHRoZQotICAgICAgIFdpbmRvd3MgcG9ydCBoZXJlLCBidXQgb3VyIFNjcm9sbFZpZXcgZmlsZSBk
aXZlcmdlcyBlbm91Z2ggdG8gbWFrZQotICAgICAgIHRoYXQgaW1wb3NzaWJsZS4gQSBzaG9ydCB0
ZXJtIHNvbHV0aW9uIHdvdWxkIGJlIHRvIHVuaWZ5IFNjcm9sbFZpZXdXaW4KLSAgICAgICBhbmQg
U2Nyb2xsVmlld0d0ay4gTG9uZy10ZXJtIFNjcm9sbFZpZXcgYW5kIEZyYW1lVmlldyBzaG91bGQg
YmUKLSAgICAgICB1bmlmaWVkIGFuZCB1c2VkIGV2ZXJ5d2hlcmUgZm9yIHNjcm9sbGJhcnMgKi8K
LQotICAgIHN3aXRjaCAoZXZlbnQtPmtleXZhbCkgewotICAgIGNhc2UgKEdES19Eb3duKToKLSAg
ICAgICAgdmlldy0+c2Nyb2xsQnkoMCwgTElORV9TVEVQKTsKLSAgICAgICAgcmV0dXJuIFRSVUU7
Ci0gICAgY2FzZSAoR0RLX1VwKToKLSAgICAgICAgdmlldy0+c2Nyb2xsQnkoMCwgLUxJTkVfU1RF
UCk7Ci0gICAgICAgIHJldHVybiBUUlVFOwotICAgIGNhc2UgKEdES19SaWdodCk6Ci0gICAgICAg
IHZpZXctPnNjcm9sbEJ5KExJTkVfU1RFUCwgMCk7Ci0gICAgICAgIHJldHVybiBUUlVFOwotICAg
IGNhc2UgKEdES19MZWZ0KToKLSAgICAgICAgdmlldy0+c2Nyb2xsQnkoLUxJTkVfU1RFUCwgMCk7
Ci0gICAgICAgIHJldHVybiBUUlVFOwotICAgIH0KLQotICAgIHJldHVybiBGQUxTRTsKLX0KLQot
c3RhdGljIGdib29sZWFuIHdlYmtpdF9wYWdlX2J1dHRvbl9ldmVudChHdGtXaWRnZXQqIHdpZGdl
dCwgR2RrRXZlbnRCdXR0b24qIGV2ZW50KQotewotICAgIEZyYW1lKiBmcmFtZSA9IGNvcmUoZ2V0
RnJhbWVGcm9tUGFnZShXRUJLSVRfUEFHRSh3aWRnZXQpKSk7Ci0KLSAgICBpZiAoZXZlbnQtPnR5
cGUgPT0gR0RLX0JVVFRPTl9SRUxFQVNFKQotICAgICAgICByZXR1cm4gZnJhbWUtPmV2ZW50SGFu
ZGxlcigpLT5oYW5kbGVNb3VzZVJlbGVhc2VFdmVudChQbGF0Zm9ybU1vdXNlRXZlbnQoZXZlbnQp
KTsKLQotICAgIC8vIEZJWE1FOiBuZWVkIHRvIGtlZXAgdHJhY2sgb2Ygc3ViZnJhbWUgZm9jdXMg
Zm9yIGtleSBldmVudHMKLSAgICBndGtfd2lkZ2V0X2dyYWJfZm9jdXMoR1RLX1dJREdFVCh3aWRn
ZXQpKTsKLSAgICByZXR1cm4gZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5oYW5kbGVNb3VzZVByZXNz
RXZlbnQoUGxhdGZvcm1Nb3VzZUV2ZW50KGV2ZW50KSk7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbiB3
ZWJraXRfcGFnZV9tb3Rpb25fZXZlbnQoR3RrV2lkZ2V0KiB3aWRnZXQsIEdka0V2ZW50TW90aW9u
KiBldmVudCkKLXsKLSAgICBGcmFtZSogZnJhbWUgPSBjb3JlKGdldEZyYW1lRnJvbVBhZ2UoV0VC
S0lUX1BBR0Uod2lkZ2V0KSkpOwotICAgIHJldHVybiBmcmFtZS0+ZXZlbnRIYW5kbGVyKCktPm1v
dXNlTW92ZWQoUGxhdGZvcm1Nb3VzZUV2ZW50KGV2ZW50KSk7Ci19Ci0KLXN0YXRpYyBnYm9vbGVh
biB3ZWJraXRfcGFnZV9zY3JvbGxfZXZlbnQoR3RrV2lkZ2V0KiB3aWRnZXQsIEdka0V2ZW50U2Ny
b2xsKiBldmVudCkKLXsKLSAgICBGcmFtZSogZnJhbWUgPSBjb3JlKGdldEZyYW1lRnJvbVBhZ2Uo
V0VCS0lUX1BBR0Uod2lkZ2V0KSkpOwotICAgIFBsYXRmb3JtV2hlZWxFdmVudCB3aGVlbEV2ZW50
KGV2ZW50KTsKLSAgICByZXR1cm4gZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5oYW5kbGVXaGVlbEV2
ZW50KHdoZWVsRXZlbnQpOwotfQotCi1zdGF0aWMgdm9pZCB3ZWJraXRfcGFnZV9zaXplX2FsbG9j
YXRlKEd0a1dpZGdldCogd2lkZ2V0LCBHdGtBbGxvY2F0aW9uKiBhbGxvY2F0aW9uKQotewotICAg
IEdUS19XSURHRVRfQ0xBU1Mod2Via2l0X3BhZ2VfcGFyZW50X2NsYXNzKS0+c2l6ZV9hbGxvY2F0
ZSh3aWRnZXQsYWxsb2NhdGlvbik7Ci0KLSAgICBGcmFtZSogZnJhbWUgPSBjb3JlKGdldEZyYW1l
RnJvbVBhZ2UoV0VCS0lUX1BBR0Uod2lkZ2V0KSkpOwotICAgIGZyYW1lLT52aWV3KCktPnJlc2l6
ZShhbGxvY2F0aW9uLT53aWR0aCwgYWxsb2NhdGlvbi0+aGVpZ2h0KTsKLSAgICBmcmFtZS0+Zm9y
Y2VMYXlvdXQoKTsKLSAgICBmcmFtZS0+dmlldygpLT5hZGp1c3RWaWV3U2l6ZSgpOwotICAgIGZy
YW1lLT5zZW5kUmVzaXplRXZlbnQoKTsKLX0KLQotc3RhdGljIHZvaWQgd2Via2l0X3BhZ2VfcmVh
bGl6ZShHdGtXaWRnZXQqIHdpZGdldCkKLXsKLSAgICBHVEtfV0lER0VUX1NFVF9GTEFHUyh3aWRn
ZXQsIEdUS19SRUFMSVpFRCk7Ci0KLSAgICBHZGtXaW5kb3dBdHRyIGF0dHJpYnV0ZXM7Ci0gICAg
YXR0cmlidXRlcy53aW5kb3dfdHlwZSA9IEdES19XSU5ET1dfQ0hJTEQ7Ci0gICAgYXR0cmlidXRl
cy54ID0gd2lkZ2V0LT5hbGxvY2F0aW9uLng7Ci0gICAgYXR0cmlidXRlcy55ID0gd2lkZ2V0LT5h
bGxvY2F0aW9uLnk7Ci0gICAgYXR0cmlidXRlcy53aWR0aCA9IHdpZGdldC0+YWxsb2NhdGlvbi53
aWR0aDsKLSAgICBhdHRyaWJ1dGVzLmhlaWdodCA9IHdpZGdldC0+YWxsb2NhdGlvbi5oZWlnaHQ7
Ci0gICAgYXR0cmlidXRlcy53Y2xhc3MgPSBHREtfSU5QVVRfT1VUUFVUOwotICAgIGF0dHJpYnV0
ZXMudmlzdWFsID0gZ3RrX3dpZGdldF9nZXRfdmlzdWFsICh3aWRnZXQpOwotICAgIGF0dHJpYnV0
ZXMuY29sb3JtYXAgPSBndGtfd2lkZ2V0X2dldF9jb2xvcm1hcCAod2lkZ2V0KTsKLSAgICBhdHRy
aWJ1dGVzLmV2ZW50X21hc2sgPSBHREtfVklTSUJJTElUWV9OT1RJRllfTUFTSwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHwgR0RLX0VYUE9TVVJFX01BU0sKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB8IEdES19CVVRUT05fUFJFU1NfTUFTSwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHwgR0RLX0JVVFRPTl9SRUxFQVNFX01BU0sKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB8IEdES19QT0lOVEVSX01PVElPTl9NQVNLCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfCBHREtfS0VZX1BSRVNTX01BU0sKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEdE
S19LRVlfUkVMRUFTRV9NQVNLCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBHREtfQlVU
VE9OX01PVElPTl9NQVNLCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBHREtfQlVUVE9O
MV9NT1RJT05fTUFTSwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgR0RLX0JVVFRPTjJf
TU9USU9OX01BU0sKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEdES19CVVRUT04zX01P
VElPTl9NQVNLOwotCi0gICAgZ2ludCBhdHRyaWJ1dGVzX21hc2sgPSBHREtfV0FfWCB8IEdES19X
QV9ZIHwgR0RLX1dBX1ZJU1VBTCB8IEdES19XQV9DT0xPUk1BUDsKLSAgICB3aWRnZXQtPndpbmRv
dyA9IGdka193aW5kb3dfbmV3KGd0a193aWRnZXRfZ2V0X3BhcmVudF93aW5kb3cgKHdpZGdldCks
ICZhdHRyaWJ1dGVzLCBhdHRyaWJ1dGVzX21hc2spOwotICAgIGdka193aW5kb3dfc2V0X3VzZXJf
ZGF0YSh3aWRnZXQtPndpbmRvdywgd2lkZ2V0KTsKLX0KLQotc3RhdGljIHZvaWQgd2Via2l0X3Bh
Z2Vfc2V0X3Njcm9sbF9hZGp1c3RtZW50cyhXZWJLaXRQYWdlKiBwYWdlLCBHdGtBZGp1c3RtZW50
KiBoYWRqLCBHdGtBZGp1c3RtZW50KiB2YWRqKQotewotICAgIEZyYW1lVmlldyogdmlldyA9IGNv
cmUoZ2V0RnJhbWVGcm9tUGFnZShwYWdlKSktPnZpZXcoKTsKLSAgICB2aWV3LT5zZXRHdGtBZGp1
c3RtZW50cyhoYWRqLCB2YWRqKTsKLX0KLQotc3RhdGljIHZvaWQgd2Via2l0X3BhZ2VfY29udGFp
bmVyX2FkZChHdGtDb250YWluZXIqIGNvbnRhaW5lciwgR3RrV2lkZ2V0KiB3aWRnZXQpCi17Ci0g
ICAgV2ViS2l0UGFnZSogcGFnZSA9IFdFQktJVF9QQUdFKGNvbnRhaW5lcik7Ci0gICAgV2ViS2l0
UGFnZVByaXZhdGUqIHByaXZhdGVfZGF0YSA9IFdFQktJVF9QQUdFX0dFVF9QUklWQVRFKHBhZ2Up
OwotCi0gICAgcHJpdmF0ZV9kYXRhLT5jaGlsZHJlbi5hZGQod2lkZ2V0KTsKLSAgICBpZiAoR1RL
X1dJREdFVF9SRUFMSVpFRChjb250YWluZXIpKQotICAgICAgICBndGtfd2lkZ2V0X3NldF9wYXJl
bnRfd2luZG93KHdpZGdldCwgR1RLX1dJREdFVChwYWdlKS0+d2luZG93KTsKLSAgICBndGtfd2lk
Z2V0X3NldF9wYXJlbnQod2lkZ2V0LCBHVEtfV0lER0VUKGNvbnRhaW5lcikpOwotfQotCi1zdGF0
aWMgdm9pZCB3ZWJraXRfcGFnZV9jb250YWluZXJfcmVtb3ZlKEd0a0NvbnRhaW5lciogY29udGFp
bmVyLCBHdGtXaWRnZXQqIHdpZGdldCkKLXsKLSAgICBXZWJLaXRQYWdlUHJpdmF0ZSogcHJpdmF0
ZV9kYXRhID0gV0VCS0lUX1BBR0VfR0VUX1BSSVZBVEUoV0VCS0lUX1BBR0UoY29udGFpbmVyKSk7
Ci0KLSAgICBpZiAocHJpdmF0ZV9kYXRhLT5jaGlsZHJlbi5jb250YWlucyh3aWRnZXQpKSB7Ci0g
ICAgICAgIGd0a193aWRnZXRfdW5wYXJlbnQod2lkZ2V0KTsKLSAgICAgICAgcHJpdmF0ZV9kYXRh
LT5jaGlsZHJlbi5yZW1vdmUod2lkZ2V0KTsKLSAgICB9Ci19Ci0KLXN0YXRpYyB2b2lkIHdlYmtp
dF9wYWdlX2NvbnRhaW5lcl9mb3JhbGwoR3RrQ29udGFpbmVyKiBjb250YWluZXIsIGdib29sZWFu
LCBHdGtDYWxsYmFjayBjYWxsYmFjaywgZ3BvaW50ZXIgY2FsbGJhY2tEYXRhKQotewotICAgIFdl
YktpdFBhZ2VQcml2YXRlKiBwcml2YXRlRGF0YSA9IFdFQktJVF9QQUdFX0dFVF9QUklWQVRFKFdF
QktJVF9QQUdFKGNvbnRhaW5lcikpOwotCi0gICAgSGFzaFNldDxHdGtXaWRnZXQqPiBjaGlsZHJl
biA9IHByaXZhdGVEYXRhLT5jaGlsZHJlbjsKLSAgICBIYXNoU2V0PEd0a1dpZGdldCo+Ojpjb25z
dF9pdGVyYXRvciBlbmQgPSBjaGlsZHJlbi5lbmQoKTsKLSAgICBmb3IgKEhhc2hTZXQ8R3RrV2lk
Z2V0Kj46OmNvbnN0X2l0ZXJhdG9yIGN1cnJlbnQgPSBjaGlsZHJlbi5iZWdpbigpOyBjdXJyZW50
ICE9IGVuZDsgKytjdXJyZW50KQotICAgICAgICAoKmNhbGxiYWNrKSgqY3VycmVudCwgY2FsbGJh
Y2tEYXRhKTsKLX0KLQotc3RhdGljIFdlYktpdFBhZ2UqIHdlYmtpdF9wYWdlX3JlYWxfY3JlYXRl
X3BhZ2UoV2ViS2l0UGFnZSopCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4g
MDsKLX0KLQotc3RhdGljIFdlYktpdE5hdmlnYXRpb25SZXNwb25zZSB3ZWJraXRfcGFnZV9yZWFs
X25hdmlnYXRpb25fcmVxdWVzdGVkKFdlYktpdFBhZ2UqLCBXZWJLaXRGcmFtZSogZnJhbWUsIFdl
YktpdE5ldHdvcmtSZXF1ZXN0KikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVy
biBXRUJLSVRfTkFWSUdBVElPTl9SRVNQT05TRV9BQ0NFUFQ7Ci19Ci0KLXN0YXRpYyB2b2lkIHdl
YmtpdF9wYWdlX3JlYWxfd2luZG93X29iamVjdF9jbGVhcmVkKFdlYktpdFBhZ2UqLCBXZWJLaXRG
cmFtZSosIEpTR2xvYmFsQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiB3aW5kb3dfb2Jq
ZWN0KQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXN0YXRpYyBnY2hhciogd2Via2l0
X3BhZ2VfcmVhbF9jaG9vc2VfZmlsZShXZWJLaXRQYWdlKiwgV2ViS2l0RnJhbWUqLCBjb25zdCBn
Y2hhciogb2xkX25hbWUpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gZ19z
dHJkdXAob2xkX25hbWUpOwotfQotCi10eXBlZGVmIGVudW0gewotICAgIFdFQktJVF9TQ1JJUFRf
RElBTE9HX0FMRVJULAotICAgIFdFQktJVF9TQ1JJUFRfRElBTE9HX0NPTkZJUk0sCi0gICAgV0VC
S0lUX1NDUklQVF9ESUFMT0dfUFJPTVBUCi0gfSBXZWJLaXRTY3JpcHREaWFsb2dUeXBlOwotCi1z
dGF0aWMgZ2Jvb2xlYW4gd2Via2l0X3BhZ2Vfc2NyaXB0X2RpYWxvZyhXZWJLaXRQYWdlKiBwYWdl
LCBXZWJLaXRGcmFtZSogZnJhbWUsIGNvbnN0IGdjaGFyKiBtZXNzYWdlLCBXZWJLaXRTY3JpcHRE
aWFsb2dUeXBlIHR5cGUsIGNvbnN0IGdjaGFyKiBkZWZhdWx0VmFsdWUsIGdjaGFyKiogdmFsdWUp
Ci17Ci0gICAgR3RrTWVzc2FnZVR5cGUgbWVzc2FnZVR5cGU7Ci0gICAgR3RrQnV0dG9uc1R5cGUg
YnV0dG9uczsKLSAgICBnaW50IGRlZmF1bHRSZXNwb25zZTsKLSAgICBHdGtXaWRnZXQqIHdpbmRv
dzsKLSAgICBHdGtXaWRnZXQqIGRpYWxvZzsKLSAgICBHdGtXaWRnZXQqIGVudHJ5ID0gMDsKLSAg
ICBnYm9vbGVhbiBkaWRDb25maXJtID0gRkFMU0U7Ci0KLSAgICBzd2l0Y2ggKHR5cGUpIHsKLSAg
ICBjYXNlIFdFQktJVF9TQ1JJUFRfRElBTE9HX0FMRVJUOgotICAgICAgICBtZXNzYWdlVHlwZSA9
IEdUS19NRVNTQUdFX1dBUk5JTkc7Ci0gICAgICAgIGJ1dHRvbnMgPSBHVEtfQlVUVE9OU19DTE9T
RTsKLSAgICAgICAgZGVmYXVsdFJlc3BvbnNlID0gR1RLX1JFU1BPTlNFX0NMT1NFOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIFdFQktJVF9TQ1JJUFRfRElBTE9HX0NPTkZJUk06Ci0gICAgICAg
IG1lc3NhZ2VUeXBlID0gR1RLX01FU1NBR0VfUVVFU1RJT047Ci0gICAgICAgIGJ1dHRvbnMgPSBH
VEtfQlVUVE9OU19ZRVNfTk87Ci0gICAgICAgIGRlZmF1bHRSZXNwb25zZSA9IEdUS19SRVNQT05T
RV9ZRVM7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgV0VCS0lUX1NDUklQVF9ESUFMT0dfUFJP
TVBUOgotICAgICAgICBtZXNzYWdlVHlwZSA9IEdUS19NRVNTQUdFX1FVRVNUSU9OOwotICAgICAg
ICBidXR0b25zID0gR1RLX0JVVFRPTlNfT0tfQ0FOQ0VMOwotICAgICAgICBkZWZhdWx0UmVzcG9u
c2UgPSBHVEtfUkVTUE9OU0VfT0s7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAg
ICAgIGdfd2FybmluZygiVW5rbm93biB2YWx1ZSBmb3IgV2ViS2l0U2NyaXB0RGlhbG9nVHlwZS4i
KTsKLSAgICAgICAgcmV0dXJuIEZBTFNFOwotICAgIH0KLQotICAgIHdpbmRvdyA9IGd0a193aWRn
ZXRfZ2V0X3RvcGxldmVsKEdUS19XSURHRVQocGFnZSkpOwotICAgIGRpYWxvZyA9IGd0a19tZXNz
YWdlX2RpYWxvZ19uZXcoR1RLX1dJREdFVF9UT1BMRVZFTCh3aW5kb3cpID8gR1RLX1dJTkRPVyh3
aW5kb3cpIDogMCwgR1RLX0RJQUxPR19ERVNUUk9ZX1dJVEhfUEFSRU5ULCBtZXNzYWdlVHlwZSwg
YnV0dG9ucywgIiVzIiwgbWVzc2FnZSk7Ci0gICAgZ2NoYXIqIHRpdGxlID0gZ19zdHJjb25jYXQo
IkphdmFTY3JpcHQgLSAiLCB3ZWJraXRfZnJhbWVfZ2V0X2xvY2F0aW9uKGZyYW1lKSwgTlVMTCk7
Ci0gICAgZ3RrX3dpbmRvd19zZXRfdGl0bGUoR1RLX1dJTkRPVyhkaWFsb2cpLCB0aXRsZSk7Ci0g
ICAgZ19mcmVlKHRpdGxlKTsKLQotICAgIGlmICh0eXBlID09IFdFQktJVF9TQ1JJUFRfRElBTE9H
X1BST01QVCkgewotICAgICAgICBlbnRyeSA9IGd0a19lbnRyeV9uZXcoKTsKLSAgICAgICAgZ3Rr
X2VudHJ5X3NldF90ZXh0KEdUS19FTlRSWShlbnRyeSksIGRlZmF1bHRWYWx1ZSk7Ci0gICAgICAg
IGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIoR1RLX0RJQUxPRyhkaWFsb2cpLT52Ym94
KSwgZW50cnkpOwotICAgICAgICBndGtfZW50cnlfc2V0X2FjdGl2YXRlc19kZWZhdWx0KEdUS19F
TlRSWShlbnRyeSksIFRSVUUpOwotICAgICAgICBndGtfd2lkZ2V0X3Nob3coZW50cnkpOwotICAg
IH0KLQotICAgIGd0a19kaWFsb2dfc2V0X2RlZmF1bHRfcmVzcG9uc2UoR1RLX0RJQUxPRyhkaWFs
b2cpLCBkZWZhdWx0UmVzcG9uc2UpOwotICAgIGdpbnQgcmVzcG9uc2UgPSBndGtfZGlhbG9nX3J1
bihHVEtfRElBTE9HKGRpYWxvZykpOwotCi0gICAgc3dpdGNoIChyZXNwb25zZSkgewotICAgIGNh
c2UgR1RLX1JFU1BPTlNFX1lFUzoKLSAgICAgICAgZGlkQ29uZmlybSA9IFRSVUU7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgR1RLX1JFU1BPTlNFX09LOgotICAgICAgICBkaWRDb25maXJtID0g
VFJVRTsKLSAgICAgICAgaWYgKGVudHJ5KQotICAgICAgICAgICAgKnZhbHVlID0gZ19zdHJkdXAo
Z3RrX2VudHJ5X2dldF90ZXh0KEdUS19FTlRSWShlbnRyeSkpKTsKLSAgICAgICAgZWxzZQotICAg
ICAgICAgICAgKnZhbHVlID0gMDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHVEtfUkVTUE9O
U0VfTk86Ci0gICAgY2FzZSBHVEtfUkVTUE9OU0VfQ0FOQ0VMOgotICAgICAgICBkaWRDb25maXJt
ID0gRkFMU0U7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgfQotICAgIGd0a193aWRnZXRfZGVzdHJv
eShHVEtfV0lER0VUKGRpYWxvZykpOwotICAgIHJldHVybiBkaWRDb25maXJtOwotfQotCi1zdGF0
aWMgZ2Jvb2xlYW4gd2Via2l0X3BhZ2VfcmVhbF9zY3JpcHRfYWxlcnQoV2ViS2l0UGFnZSogcGFn
ZSwgV2ViS2l0RnJhbWUqIGZyYW1lLCBjb25zdCBnY2hhciogbWVzc2FnZSkKLXsKLSAgICB3ZWJr
aXRfcGFnZV9zY3JpcHRfZGlhbG9nKHBhZ2UsIGZyYW1lLCBtZXNzYWdlLCBXRUJLSVRfU0NSSVBU
X0RJQUxPR19BTEVSVCwgMCwgMCk7Ci0gICAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBnYm9v
bGVhbiB3ZWJraXRfcGFnZV9yZWFsX3NjcmlwdF9jb25maXJtKFdlYktpdFBhZ2UqIHBhZ2UsIFdl
YktpdEZyYW1lKiBmcmFtZSwgY29uc3QgZ2NoYXIqIG1lc3NhZ2UsIGdib29sZWFuKiBkaWRDb25m
aXJtKQotewotICAgICpkaWRDb25maXJtID0gd2Via2l0X3BhZ2Vfc2NyaXB0X2RpYWxvZyhwYWdl
LCBmcmFtZSwgbWVzc2FnZSwgV0VCS0lUX1NDUklQVF9ESUFMT0dfQ09ORklSTSwgMCwgMCk7Ci0g
ICAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbiB3ZWJraXRfcGFnZV9yZWFsX3Nj
cmlwdF9wcm9tcHQoV2ViS2l0UGFnZSogcGFnZSwgV2ViS2l0RnJhbWUqIGZyYW1lLCBjb25zdCBn
Y2hhciogbWVzc2FnZSwgY29uc3QgZ2NoYXIqIGRlZmF1bHRWYWx1ZSwgZ2NoYXIqKiB2YWx1ZSkK
LXsKLSAgICBpZiAoIXdlYmtpdF9wYWdlX3NjcmlwdF9kaWFsb2cocGFnZSwgZnJhbWUsIG1lc3Nh
Z2UsIFdFQktJVF9TQ1JJUFRfRElBTE9HX1BST01QVCwgZGVmYXVsdFZhbHVlLCB2YWx1ZSkpCi0g
ICAgICAgICp2YWx1ZSA9IE5VTEw7Ci0gICAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBnYm9v
bGVhbiB3ZWJraXRfcGFnZV9yZWFsX2NvbnNvbGVfbWVzc2FnZShXZWJLaXRQYWdlKiBwYWdlLCBj
b25zdCBnY2hhciogbWVzc2FnZSwgdW5zaWduZWQgaW50IGxpbmUsIGNvbnN0IGdjaGFyKiBzb3Vy
Y2VJZCkKLXsKLSAgICBnX3ByaW50KCJjb25zb2xlIG1lc3NhZ2U6ICVzIEAlZDogJXNcbiIsIHNv
dXJjZUlkLCBsaW5lLCBtZXNzYWdlKTsKLSAgICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIHZv
aWQgd2Via2l0X3BhZ2VfZmluYWxpemUoR09iamVjdCogb2JqZWN0KQotewotICAgIHdlYmtpdF9w
YWdlX3N0b3BfbG9hZGluZyhXRUJLSVRfUEFHRShvYmplY3QpKTsKLQotICAgIFdlYktpdFBhZ2VQ
cml2YXRlKiBwYWdlRGF0YSA9IFdFQktJVF9QQUdFX0dFVF9QUklWQVRFKFdFQktJVF9QQUdFKG9i
amVjdCkpOwotICAgIGRlbGV0ZSBwYWdlRGF0YS0+cGFnZTsKLSAgICBkZWxldGUgcGFnZURhdGEt
PnNldHRpbmdzOwotICAgIGdfb2JqZWN0X3VucmVmKHBhZ2VEYXRhLT5tYWluRnJhbWUpOwotICAg
IGRlbGV0ZSBwYWdlRGF0YS0+dXNlckFnZW50OwotCi0gICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0
X3BhZ2VfcGFyZW50X2NsYXNzKS0+ZmluYWxpemUob2JqZWN0KTsKLX0KLQotc3RhdGljIHZvaWQg
d2Via2l0X3BhZ2VfY2xhc3NfaW5pdChXZWJLaXRQYWdlQ2xhc3MqIHBhZ2VDbGFzcykKLXsKLSAg
ICBnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUocGFnZUNsYXNzLCBzaXplb2YoV2ViS2l0UGFnZVBy
aXZhdGUpKTsKLQotICAgIC8qCi0gICAgICogU2lnbmFscwotICAgICAqLwotCi0gICAgd2Via2l0
X3BhZ2Vfc2lnbmFsc1tOQVZJR0FUSU9OX1JFUVVFU1RFRF0gPSBnX3NpZ25hbF9uZXcoIm5hdmln
YXRpb25fcmVxdWVzdGVkIiwKLSAgICAgICAgICAgIEdfVFlQRV9GUk9NX0NMQVNTKHBhZ2VDbGFz
cyksCi0gICAgICAgICAgICAoR1NpZ25hbEZsYWdzKShHX1NJR05BTF9SVU5fTEFTVCB8IEdfU0lH
TkFMX0FDVElPTiksCi0gICAgICAgICAgICBHX1NUUlVDVF9PRkZTRVQgKFdlYktpdFBhZ2VDbGFz
cywgbmF2aWdhdGlvbl9yZXF1ZXN0ZWQpLAotICAgICAgICAgICAgTlVMTCwKLSAgICAgICAgICAg
IE5VTEwsCi0gICAgICAgICAgICB3ZWJraXRfbWFyc2hhbF9JTlRfX09CSkVDVF9PQkpFQ1QsCi0g
ICAgICAgICAgICBHX1RZUEVfSU5ULCAyLAotICAgICAgICAgICAgR19UWVBFX09CSkVDVCwKLSAg
ICAgICAgICAgIEdfVFlQRV9PQkpFQ1QpOwotCi0gICAgLyoqCi0gICAgICogV2ViS2l0UGFnZTo6
d2luZG93LW9iamVjdC1jbGVhcmVkOgotICAgICAqIEBwYWdlOiB0aGUgb2JqZWN0IG9uIHdoaWNo
IHRoZSBzaWduYWwgaXMgZW1pdHRlZAotICAgICAqIEBmcmFtZTogdGhlICNXZWJLaXRGcmFtZSB0
byB3aGljaCBAd2luZG93X29iamVjdCBiZWxvbmdzCi0gICAgICogQGNvbnRleHQ6IHRoZSAjSlNH
bG9iYWxDb250ZXh0UmVmIGhvbGRpbmcgdGhlIGdsb2JhbCBvYmplY3QgYW5kIG90aGVyCi0gICAg
ICogZXhlY3V0aW9uIHN0YXRlOyBlcXVpdmFsZW50IHRvIHRoZSByZXR1cm4gdmFsdWUgb2YKLSAg
ICAgKiB3ZWJraXRfZnJhbWVfZ2V0X2dsb2JhbF9jb250ZXh0KEBmcmFtZSkKLSAgICAgKgotICAg
ICAqIEB3aW5kb3dfb2JqZWN0OiB0aGUgI0pTT2JqZWN0UmVmIHJlcHJlc2VudGluZyB0aGUgZnJh
bWUncyBKYXZhU2NyaXB0Ci0gICAgICogd2luZG93IG9iamVjdAotICAgICAqCi0gICAgICogRW1p
dHRlZCB3aGVuIHRoZSBKYXZhU2NyaXB0IHdpbmRvdyBvYmplY3QgaW4gYSAjV2ViS2l0RnJhbWUg
aGFzIGJlZW4KLSAgICAgKiBjbGVhcmVkIGluIHByZXBhcmF0aW9uIGZvciBhIG5ldyBsb2FkLiBU
aGlzIGlzIHRoZSBwcmVmZXJyZWQgcGxhY2UgdG8KLSAgICAgKiBzZXQgY3VzdG9tIHByb3BlcnRp
ZXMgb24gdGhlIHdpbmRvdyBvYmplY3QgdXNpbmcgdGhlIEphdmFTY3JpcHRDb3JlIEFQSS4KLSAg
ICAgKi8KLSAgICB3ZWJraXRfcGFnZV9zaWduYWxzW1dJTkRPV19PQkpFQ1RfQ0xFQVJFRF0gPSBn
X3NpZ25hbF9uZXcoIndpbmRvd19vYmplY3RfY2xlYXJlZCIsCi0gICAgICAgICAgICBHX1RZUEVf
RlJPTV9DTEFTUyhwYWdlQ2xhc3MpLAotICAgICAgICAgICAgKEdTaWduYWxGbGFncykoR19TSUdO
QUxfUlVOX0xBU1QgfCBHX1NJR05BTF9BQ1RJT04pLAotICAgICAgICAgICAgR19TVFJVQ1RfT0ZG
U0VUIChXZWJLaXRQYWdlQ2xhc3MsIHdpbmRvd19vYmplY3RfY2xlYXJlZCksCi0gICAgICAgICAg
ICBOVUxMLAotICAgICAgICAgICAgTlVMTCwKLSAgICAgICAgICAgIHdlYmtpdF9tYXJzaGFsX1ZP
SURfX09CSkVDVF9QT0lOVEVSX1BPSU5URVIsCi0gICAgICAgICAgICBHX1RZUEVfTk9ORSwgMywK
LSAgICAgICAgICAgIFdFQktJVF9UWVBFX0ZSQU1FLAotICAgICAgICAgICAgR19UWVBFX1BPSU5U
RVIsCi0gICAgICAgICAgICBHX1RZUEVfUE9JTlRFUik7Ci0KLSAgICAvKioKLSAgICAgKiBXZWJL
aXRQYWdlOjpsb2FkLXN0YXJ0ZWQ6Ci0gICAgICoKLSAgICAgKiBAcGFnZTogdGhlIG9iamVjdCBv
biB3aGljaCB0aGUgc2lnbmFsIGlzIGVtaXR0ZWQKLSAgICAgKiBAZnJhbWU6IHRoZSBmcmFtZSBn
b2luZyB0byBkbyB0aGUgbG9hZAotICAgICAqCi0gICAgICogV2hlbiBhICNXZWJLaXRGcmFtZSBi
ZWdpbnMgdG8gbG9hZCB0aGlzIHNpZ25hbCBpcyBlbWl0dGVkLgotICAgICAqLwotICAgIHdlYmtp
dF9wYWdlX3NpZ25hbHNbTE9BRF9TVEFSVEVEXSA9IGdfc2lnbmFsX25ldygibG9hZF9zdGFydGVk
IiwKLSAgICAgICAgICAgIEdfVFlQRV9GUk9NX0NMQVNTKHBhZ2VDbGFzcyksCi0gICAgICAgICAg
ICAoR1NpZ25hbEZsYWdzKShHX1NJR05BTF9SVU5fTEFTVCB8IEdfU0lHTkFMX0FDVElPTiksCi0g
ICAgICAgICAgICAwLAotICAgICAgICAgICAgTlVMTCwKLSAgICAgICAgICAgIE5VTEwsCi0gICAg
ICAgICAgICBnX2NjbG9zdXJlX21hcnNoYWxfVk9JRF9fT0JKRUNULAotICAgICAgICAgICAgR19U
WVBFX05PTkUsIDEsCi0gICAgICAgICAgICBXRUJLSVRfVFlQRV9GUkFNRSk7Ci0KLSAgICAvKioK
LSAgICAgKiBXZWJLaXRQYWdlOjpsb2FkLXByb2dyZXNzLWNoYW5nZWQ6Ci0gICAgICoKLSAgICAg
KiBAcGFnZTogdGhlICNXZWJLaXRQYWdlCi0gICAgICogQHByb2dyZXNzOiB0aGUgZ2xvYmFsIHBy
b2dyZXNzCi0gICAgICovCi0gICAgd2Via2l0X3BhZ2Vfc2lnbmFsc1tMT0FEX1BST0dSRVNTX0NI
QU5HRURdID0gZ19zaWduYWxfbmV3KCJsb2FkX3Byb2dyZXNzX2NoYW5nZWQiLAotICAgICAgICAg
ICAgR19UWVBFX0ZST01fQ0xBU1MocGFnZUNsYXNzKSwKLSAgICAgICAgICAgIChHU2lnbmFsRmxh
Z3MpKEdfU0lHTkFMX1JVTl9MQVNUIHwgR19TSUdOQUxfQUNUSU9OKSwKLSAgICAgICAgICAgIDAs
Ci0gICAgICAgICAgICBOVUxMLAotICAgICAgICAgICAgTlVMTCwKLSAgICAgICAgICAgIGdfY2Ns
b3N1cmVfbWFyc2hhbF9WT0lEX19JTlQsCi0gICAgICAgICAgICBHX1RZUEVfTk9ORSwgMSwKLSAg
ICAgICAgICAgIEdfVFlQRV9JTlQpOwotCi0gICAgd2Via2l0X3BhZ2Vfc2lnbmFsc1tMT0FEX0ZJ
TklTSEVEXSA9IGdfc2lnbmFsX25ldygibG9hZF9maW5pc2hlZCIsCi0gICAgICAgICAgICBHX1RZ
UEVfRlJPTV9DTEFTUyhwYWdlQ2xhc3MpLAotICAgICAgICAgICAgKEdTaWduYWxGbGFncykoR19T
SUdOQUxfUlVOX0xBU1QgfCBHX1NJR05BTF9BQ1RJT04pLAotICAgICAgICAgICAgMCwKLSAgICAg
ICAgICAgIE5VTEwsCi0gICAgICAgICAgICBOVUxMLAotICAgICAgICAgICAgZ19jY2xvc3VyZV9t
YXJzaGFsX1ZPSURfX09CSkVDVCwKLSAgICAgICAgICAgIEdfVFlQRV9OT05FLCAxLAotICAgICAg
ICAgICAgV0VCS0lUX1RZUEVfRlJBTUUpOwotCi0gICAgd2Via2l0X3BhZ2Vfc2lnbmFsc1tUSVRM
RV9DSEFOR0VEXSA9IGdfc2lnbmFsX25ldygidGl0bGVfY2hhbmdlZCIsCi0gICAgICAgICAgICBH
X1RZUEVfRlJPTV9DTEFTUyhwYWdlQ2xhc3MpLAotICAgICAgICAgICAgKEdTaWduYWxGbGFncyko
R19TSUdOQUxfUlVOX0xBU1QgfCBHX1NJR05BTF9BQ1RJT04pLAotICAgICAgICAgICAgMCwKLSAg
ICAgICAgICAgIE5VTEwsCi0gICAgICAgICAgICBOVUxMLAotICAgICAgICAgICAgd2Via2l0X21h
cnNoYWxfVk9JRF9fU1RSSU5HX1NUUklORywKLSAgICAgICAgICAgIEdfVFlQRV9OT05FLCAyLAot
ICAgICAgICAgICAgR19UWVBFX1NUUklORywgR19UWVBFX1NUUklORyk7Ci0KLSAgICB3ZWJraXRf
cGFnZV9zaWduYWxzW0hPVkVSSU5HX09WRVJfTElOS10gPSBnX3NpZ25hbF9uZXcoImhvdmVyaW5n
X292ZXJfbGluayIsCi0gICAgICAgICAgICBHX1RZUEVfRlJPTV9DTEFTUyhwYWdlQ2xhc3MpLAot
ICAgICAgICAgICAgKEdTaWduYWxGbGFncykoR19TSUdOQUxfUlVOX0xBU1QgfCBHX1NJR05BTF9B
Q1RJT04pLAotICAgICAgICAgICAgMCwKLSAgICAgICAgICAgIE5VTEwsCi0gICAgICAgICAgICBO
VUxMLAotICAgICAgICAgICAgd2Via2l0X21hcnNoYWxfVk9JRF9fU1RSSU5HX1NUUklORywKLSAg
ICAgICAgICAgIEdfVFlQRV9OT05FLCAyLAotICAgICAgICAgICAgR19UWVBFX1NUUklORywKLSAg
ICAgICAgICAgIEdfVFlQRV9TVFJJTkcpOwotCi0gICAgd2Via2l0X3BhZ2Vfc2lnbmFsc1tTVEFU
VVNfQkFSX1RFWFRfQ0hBTkdFRF0gPSBnX3NpZ25hbF9uZXcoInN0YXR1c19iYXJfdGV4dF9jaGFu
Z2VkIiwKLSAgICAgICAgICAgIEdfVFlQRV9GUk9NX0NMQVNTKHBhZ2VDbGFzcyksCi0gICAgICAg
ICAgICAoR1NpZ25hbEZsYWdzKShHX1NJR05BTF9SVU5fTEFTVCB8IEdfU0lHTkFMX0FDVElPTiks
Ci0gICAgICAgICAgICAwLAotICAgICAgICAgICAgTlVMTCwKLSAgICAgICAgICAgIE5VTEwsCi0g
ICAgICAgICAgICBnX2NjbG9zdXJlX21hcnNoYWxfVk9JRF9fU1RSSU5HLAotICAgICAgICAgICAg
R19UWVBFX05PTkUsIDEsCi0gICAgICAgICAgICBHX1RZUEVfU1RSSU5HKTsKLQotICAgIHdlYmtp
dF9wYWdlX3NpZ25hbHNbSUNPTkRfTE9BREVEXSA9IGdfc2lnbmFsX25ldygiaWNvbl9sb2FkZWQi
LAotICAgICAgICAgICAgR19UWVBFX0ZST01fQ0xBU1MocGFnZUNsYXNzKSwKLSAgICAgICAgICAg
IChHU2lnbmFsRmxhZ3MpKEdfU0lHTkFMX1JVTl9MQVNUIHwgR19TSUdOQUxfQUNUSU9OKSwKLSAg
ICAgICAgICAgIDAsCi0gICAgICAgICAgICBOVUxMLAotICAgICAgICAgICAgTlVMTCwKLSAgICAg
ICAgICAgIGdfY2Nsb3N1cmVfbWFyc2hhbF9WT0lEX19WT0lELAotICAgICAgICAgICAgR19UWVBF
X05PTkUsIDApOwotCi0gICAgd2Via2l0X3BhZ2Vfc2lnbmFsc1tTRUxFQ1RJT05fQ0hBTkdFRF0g
PSBnX3NpZ25hbF9uZXcoInNlbGVjdGlvbl9jaGFuZ2VkIiwKLSAgICAgICAgICAgIEdfVFlQRV9G
Uk9NX0NMQVNTKHBhZ2VDbGFzcyksCi0gICAgICAgICAgICAoR1NpZ25hbEZsYWdzKShHX1NJR05B
TF9SVU5fTEFTVCB8IEdfU0lHTkFMX0FDVElPTiksCi0gICAgICAgICAgICAwLAotICAgICAgICAg
ICAgTlVMTCwKLSAgICAgICAgICAgIE5VTEwsCi0gICAgICAgICAgICBnX2NjbG9zdXJlX21hcnNo
YWxfVk9JRF9fVk9JRCwKLSAgICAgICAgICAgIEdfVFlQRV9OT05FLCAwKTsKLQotICAgIC8qKgot
ICAgICAqIFdlYktpdFBhZ2U6OmNvbnNvbGUtbWVzc2FnZToKLSAgICAgKgotICAgICAqIEBwYWdl
OiB0aGUgb2JqZWN0IG9uIHdoaWNoIHRoZSBzaWduYWwgaXMgZW1pdHRlZAotICAgICAqIEBtZXNz
YWdlOiB0aGUgbWVzc2FnZSB0ZXh0Ci0gICAgICogQGxpbmU6IHRoZSBsaW5lIHdoZXJlIHRoZSBl
cnJvciBvY2N1cmVkCi0gICAgICogQHNvdXJjZV9pZDogdGhlIHNvdXJjZSBpZAotICAgICAqIEBy
ZXR1cm46IFRSVUUgdG8gc3RvcCBvdGhlciBoYW5kbGVycyBmcm9tIGJlaW5nIGludm9rZWQgZm9y
IHRoZSBldmVudC4gRkFMU0UgdG8gcHJvcGFnYXRlIHRoZSBldmVudCBmdXJ0aGVyLgotICAgICAq
Ci0gICAgICogQSBKYXZhU2NyaXB0IGNvbnNvbGUgbWVzc2FnZSB3YXMgY3JlYXRlZC4KLSAgICAg
Ki8KLSAgICB3ZWJraXRfcGFnZV9zaWduYWxzW0NPTlNPTEVfTUVTU0FHRV0gPSBnX3NpZ25hbF9u
ZXcoImNvbnNvbGVfbWVzc2FnZSIsCi0gICAgICAgICAgICBHX1RZUEVfRlJPTV9DTEFTUyhwYWdl
Q2xhc3MpLAotICAgICAgICAgICAgKEdTaWduYWxGbGFncykoR19TSUdOQUxfUlVOX0xBU1QgfCBH
X1NJR05BTF9BQ1RJT04pLAotICAgICAgICAgICAgR19TVFJVQ1RfT0ZGU0VUKFdlYktpdFBhZ2VD
bGFzcywgY29uc29sZV9tZXNzYWdlKSwKLSAgICAgICAgICAgIGdfc2lnbmFsX2FjY3VtdWxhdG9y
X3RydWVfaGFuZGxlZCwKLSAgICAgICAgICAgIE5VTEwsCi0gICAgICAgICAgICB3ZWJraXRfbWFy
c2hhbF9CT09MRUFOX19TVFJJTkdfSU5UX1NUUklORywKLSAgICAgICAgICAgIEdfVFlQRV9CT09M
RUFOLCAzLAotICAgICAgICAgICAgR19UWVBFX1NUUklORywgR19UWVBFX0lOVCwgR19UWVBFX1NU
UklORyk7Ci0KLSAgICAvKioKLSAgICAgKiBXZWJLaXRQYWdlOjpzY3JpcHQtYWxlcnQ6Ci0gICAg
ICoKLSAgICAgKiBAcGFnZTogdGhlIG9iamVjdCBvbiB3aGljaCB0aGUgc2lnbmFsIGlzIGVtaXR0
ZWQKLSAgICAgKiBAZnJhbWU6IHRoZSByZWxldmFudCBmcmFtZQotICAgICAqIEBtZXNzYWdlOiB0
aGUgbWVzc2FnZSB0ZXh0Ci0gICAgICogQHJldHVybjogVFJVRSB0byBzdG9wIG90aGVyIGhhbmRs
ZXJzIGZyb20gYmVpbmcgaW52b2tlZCBmb3IgdGhlIGV2ZW50LiBGQUxTRSB0byBwcm9wYWdhdGUg
dGhlIGV2ZW50IGZ1cnRoZXIuCi0gICAgICoKLSAgICAgKiBBIEphdmFTY3JpcHQgYWxlcnQgZGlh
bG9nIHdhcyBjcmVhdGVkLgotICAgICAqLwotICAgIHdlYmtpdF9wYWdlX3NpZ25hbHNbU0NSSVBU
X0FMRVJUXSA9IGdfc2lnbmFsX25ldygic2NyaXB0LWFsZXJ0IiwKLSAgICAgICAgICAgIEdfVFlQ
RV9GUk9NX0NMQVNTKHBhZ2VDbGFzcyksCi0gICAgICAgICAgICAoR1NpZ25hbEZsYWdzKShHX1NJ
R05BTF9SVU5fTEFTVCB8IEdfU0lHTkFMX0FDVElPTiksCi0gICAgICAgICAgICBHX1NUUlVDVF9P
RkZTRVQoV2ViS2l0UGFnZUNsYXNzLCBzY3JpcHRfYWxlcnQpLAotICAgICAgICAgICAgZ19zaWdu
YWxfYWNjdW11bGF0b3JfdHJ1ZV9oYW5kbGVkLAotICAgICAgICAgICAgTlVMTCwKLSAgICAgICAg
ICAgIHdlYmtpdF9tYXJzaGFsX0JPT0xFQU5fX09CSkVDVF9TVFJJTkcsCi0gICAgICAgICAgICBH
X1RZUEVfQk9PTEVBTiwgMiwKLSAgICAgICAgICAgIEdfVFlQRV9PQkpFQ1QsIEdfVFlQRV9TVFJJ
TkcpOwotCi0gICAgLyoqCi0gICAgICogV2ViS2l0UGFnZTo6c2NyaXB0LWNvbmZpcm06Ci0gICAg
ICoKLSAgICAgKiBAcGFnZTogdGhlIG9iamVjdCBvbiB3aGljaCB0aGUgc2lnbmFsIGlzIGVtaXR0
ZWQKLSAgICAgKiBAZnJhbWU6IHRoZSByZWxldmFudCBmcmFtZQotICAgICAqIEBtZXNzYWdlOiB0
aGUgbWVzc2FnZSB0ZXh0Ci0gICAgICogQGNvbmZpcm1lZDogd2hldGhlciB0aGUgZGlhbG9nIGhh
cyBiZWVuIGNvbmZpcm1lZAotICAgICAqIEByZXR1cm46IFRSVUUgdG8gc3RvcCBvdGhlciBoYW5k
bGVycyBmcm9tIGJlaW5nIGludm9rZWQgZm9yIHRoZSBldmVudC4gRkFMU0UgdG8gcHJvcGFnYXRl
IHRoZSBldmVudCBmdXJ0aGVyLgotICAgICAqCi0gICAgICogQSBKYXZhU2NyaXB0IGNvbmZpcm0g
ZGlhbG9nIHdhcyBjcmVhdGVkLCBwcm92aWRpbmcgWWVzIGFuZCBObyBidXR0b25zLgotICAgICAq
LwotICAgIHdlYmtpdF9wYWdlX3NpZ25hbHNbU0NSSVBUX0NPTkZJUk1dID0gZ19zaWduYWxfbmV3
KCJzY3JpcHRfY29uZmlybSIsCi0gICAgICAgICAgICBHX1RZUEVfRlJPTV9DTEFTUyhwYWdlQ2xh
c3MpLAotICAgICAgICAgICAgKEdTaWduYWxGbGFncykoR19TSUdOQUxfUlVOX0xBU1QgfCBHX1NJ
R05BTF9BQ1RJT04pLAotICAgICAgICAgICAgR19TVFJVQ1RfT0ZGU0VUKFdlYktpdFBhZ2VDbGFz
cywgc2NyaXB0X2NvbmZpcm0pLAotICAgICAgICAgICAgZ19zaWduYWxfYWNjdW11bGF0b3JfdHJ1
ZV9oYW5kbGVkLAotICAgICAgICAgICAgTlVMTCwKLSAgICAgICAgICAgIHdlYmtpdF9tYXJzaGFs
X0JPT0xFQU5fX09CSkVDVF9TVFJJTkdfQk9PTEVBTiwKLSAgICAgICAgICAgIEdfVFlQRV9CT09M
RUFOLCAzLAotICAgICAgICAgICAgR19UWVBFX09CSkVDVCwgR19UWVBFX1NUUklORywgR19UWVBF
X0JPT0xFQU4pOwotCi0gICAgLyoqCi0gICAgICogV2ViS2l0UGFnZTo6c2NyaXB0LXByb21wdDoK
LSAgICAgKgotICAgICAqIEBwYWdlOiB0aGUgb2JqZWN0IG9uIHdoaWNoIHRoZSBzaWduYWwgaXMg
ZW1pdHRlZAotICAgICAqIEBmcmFtZTogdGhlIHJlbGV2YW50IGZyYW1lCi0gICAgICogQG1lc3Nh
Z2U6IHRoZSBtZXNzYWdlIHRleHQKLSAgICAgKiBAZGVmYXVsdDogdGhlIGRlZmF1bHQgdmFsdWUK
LSAgICAgKiBAdGV4dDogVG8gYmUgZmlsbGVkIHdpdGggdGhlIHJldHVybiB2YWx1ZSBvciBOVUxM
IGlmIHRoZSBkaWFsb2cgd2FzIGNhbmNlbGxlZC4KLSAgICAgKiBAcmV0dXJuOiBUUlVFIHRvIHN0
b3Agb3RoZXIgaGFuZGxlcnMgZnJvbSBiZWluZyBpbnZva2VkIGZvciB0aGUgZXZlbnQuIEZBTFNF
IHRvIHByb3BhZ2F0ZSB0aGUgZXZlbnQgZnVydGhlci4KLSAgICAgKgotICAgICAqIEEgSmF2YVNj
cmlwdCBwcm9tcHQgZGlhbG9nIHdhcyBjcmVhdGVkLCBwcm92aWRpbmcgYW4gZW50cnkgdG8gaW5w
dXQgdGV4dC4KLSAgICAgKi8KLSAgICB3ZWJraXRfcGFnZV9zaWduYWxzW1NDUklQVF9QUk9NUFRd
ID0gZ19zaWduYWxfbmV3KCJzY3JpcHRfcHJvbXB0IiwKLSAgICAgICAgICAgIEdfVFlQRV9GUk9N
X0NMQVNTKHBhZ2VDbGFzcyksCi0gICAgICAgICAgICAoR1NpZ25hbEZsYWdzKShHX1NJR05BTF9S
VU5fTEFTVCB8IEdfU0lHTkFMX0FDVElPTiksCi0gICAgICAgICAgICBHX1NUUlVDVF9PRkZTRVQo
V2ViS2l0UGFnZUNsYXNzLCBzY3JpcHRfcHJvbXB0KSwKLSAgICAgICAgICAgIGdfc2lnbmFsX2Fj
Y3VtdWxhdG9yX3RydWVfaGFuZGxlZCwKLSAgICAgICAgICAgIE5VTEwsCi0gICAgICAgICAgICB3
ZWJraXRfbWFyc2hhbF9CT09MRUFOX19PQkpFQ1RfU1RSSU5HX1NUUklOR19TVFJJTkcsCi0gICAg
ICAgICAgICBHX1RZUEVfQk9PTEVBTiwgNCwKLSAgICAgICAgICAgIEdfVFlQRV9PQkpFQ1QsIEdf
VFlQRV9TVFJJTkcsIEdfVFlQRV9TVFJJTkcsIEdfVFlQRV9QT0lOVEVSKTsKLQotCi0gICAgLyoK
LSAgICAgKiBpbXBsZW1lbnRhdGlvbnMgb2YgdmlydHVhbCBtZXRob2RzCi0gICAgICovCi0gICAg
cGFnZUNsYXNzLT5jcmVhdGVfcGFnZSA9IHdlYmtpdF9wYWdlX3JlYWxfY3JlYXRlX3BhZ2U7Ci0g
ICAgcGFnZUNsYXNzLT5uYXZpZ2F0aW9uX3JlcXVlc3RlZCA9IHdlYmtpdF9wYWdlX3JlYWxfbmF2
aWdhdGlvbl9yZXF1ZXN0ZWQ7Ci0gICAgcGFnZUNsYXNzLT53aW5kb3dfb2JqZWN0X2NsZWFyZWQg
PSB3ZWJraXRfcGFnZV9yZWFsX3dpbmRvd19vYmplY3RfY2xlYXJlZDsKLSAgICBwYWdlQ2xhc3Mt
PmNob29zZV9maWxlID0gd2Via2l0X3BhZ2VfcmVhbF9jaG9vc2VfZmlsZTsKLSAgICBwYWdlQ2xh
c3MtPnNjcmlwdF9hbGVydCA9IHdlYmtpdF9wYWdlX3JlYWxfc2NyaXB0X2FsZXJ0OwotICAgIHBh
Z2VDbGFzcy0+c2NyaXB0X2NvbmZpcm0gPSB3ZWJraXRfcGFnZV9yZWFsX3NjcmlwdF9jb25maXJt
OwotICAgIHBhZ2VDbGFzcy0+c2NyaXB0X3Byb21wdCA9IHdlYmtpdF9wYWdlX3JlYWxfc2NyaXB0
X3Byb21wdDsKLSAgICBwYWdlQ2xhc3MtPmNvbnNvbGVfbWVzc2FnZSA9IHdlYmtpdF9wYWdlX3Jl
YWxfY29uc29sZV9tZXNzYWdlOwotCi0gICAgR19PQkpFQ1RfQ0xBU1MocGFnZUNsYXNzKS0+Zmlu
YWxpemUgPSB3ZWJraXRfcGFnZV9maW5hbGl6ZTsKLQotICAgIEd0a1dpZGdldENsYXNzKiB3aWRn
ZXRDbGFzcyA9IEdUS19XSURHRVRfQ0xBU1MocGFnZUNsYXNzKTsKLSAgICB3aWRnZXRDbGFzcy0+
cmVhbGl6ZSA9IHdlYmtpdF9wYWdlX3JlYWxpemU7Ci0gICAgd2lkZ2V0Q2xhc3MtPmV4cG9zZV9l
dmVudCA9IHdlYmtpdF9wYWdlX2V4cG9zZV9ldmVudDsKLSAgICB3aWRnZXRDbGFzcy0+a2V5X3By
ZXNzX2V2ZW50ID0gd2Via2l0X3BhZ2Vfa2V5X2V2ZW50OwotICAgIHdpZGdldENsYXNzLT5rZXlf
cmVsZWFzZV9ldmVudCA9IHdlYmtpdF9wYWdlX2tleV9ldmVudDsKLSAgICB3aWRnZXRDbGFzcy0+
YnV0dG9uX3ByZXNzX2V2ZW50ID0gd2Via2l0X3BhZ2VfYnV0dG9uX2V2ZW50OwotICAgIHdpZGdl
dENsYXNzLT5idXR0b25fcmVsZWFzZV9ldmVudCA9IHdlYmtpdF9wYWdlX2J1dHRvbl9ldmVudDsK
LSAgICB3aWRnZXRDbGFzcy0+bW90aW9uX25vdGlmeV9ldmVudCA9IHdlYmtpdF9wYWdlX21vdGlv
bl9ldmVudDsKLSAgICB3aWRnZXRDbGFzcy0+c2Nyb2xsX2V2ZW50ID0gd2Via2l0X3BhZ2Vfc2Ny
b2xsX2V2ZW50OwotICAgIHdpZGdldENsYXNzLT5zaXplX2FsbG9jYXRlID0gd2Via2l0X3BhZ2Vf
c2l6ZV9hbGxvY2F0ZTsKLQotICAgIEd0a0NvbnRhaW5lckNsYXNzKiBjb250YWluZXJDbGFzcyA9
IEdUS19DT05UQUlORVJfQ0xBU1MocGFnZUNsYXNzKTsKLSAgICBjb250YWluZXJDbGFzcy0+YWRk
ID0gd2Via2l0X3BhZ2VfY29udGFpbmVyX2FkZDsKLSAgICBjb250YWluZXJDbGFzcy0+cmVtb3Zl
ID0gd2Via2l0X3BhZ2VfY29udGFpbmVyX3JlbW92ZTsKLSAgICBjb250YWluZXJDbGFzcy0+Zm9y
YWxsID0gd2Via2l0X3BhZ2VfY29udGFpbmVyX2ZvcmFsbDsKLQotICAgIC8qCi0gICAgICogbWFr
ZSB1cyBzY3JvbGxhYmxlIChlLmcuIGFkZGFibGUgdG8gYSBHdGtTY3JvbGxlZFdpbmRvdykKLSAg
ICAgKi8KLSAgICBwYWdlQ2xhc3MtPnNldF9zY3JvbGxfYWRqdXN0bWVudHMgPSB3ZWJraXRfcGFn
ZV9zZXRfc2Nyb2xsX2FkanVzdG1lbnRzOwotICAgIEdUS19XSURHRVRfQ0xBU1MocGFnZUNsYXNz
KS0+c2V0X3Njcm9sbF9hZGp1c3RtZW50c19zaWduYWwgPSBnX3NpZ25hbF9uZXcoInNldF9zY3Jv
bGxfYWRqdXN0bWVudHMiLAotICAgICAgICAgICAgR19UWVBFX0ZST01fQ0xBU1MocGFnZUNsYXNz
KSwKLSAgICAgICAgICAgIChHU2lnbmFsRmxhZ3MpKEdfU0lHTkFMX1JVTl9MQVNUIHwgR19TSUdO
QUxfQUNUSU9OKSwKLSAgICAgICAgICAgIEdfU1RSVUNUX09GRlNFVChXZWJLaXRQYWdlQ2xhc3Ms
IHNldF9zY3JvbGxfYWRqdXN0bWVudHMpLAotICAgICAgICAgICAgTlVMTCwgTlVMTCwKLSAgICAg
ICAgICAgIHdlYmtpdF9tYXJzaGFsX1ZPSURfX09CSkVDVF9PQkpFQ1QsCi0gICAgICAgICAgICBH
X1RZUEVfTk9ORSwgMiwKLSAgICAgICAgICAgIEdUS19UWVBFX0FESlVTVE1FTlQsIEdUS19UWVBF
X0FESlVTVE1FTlQpOwotfQotCi1zdGF0aWMgdm9pZCB3ZWJraXRfcGFnZV9pbml0KFdlYktpdFBh
Z2UqIHBhZ2UpCi17Ci0gICAgV2ViS2l0UGFnZVByaXZhdGUqIHBhZ2VEYXRhID0gV0VCS0lUX1BB
R0VfR0VUX1BSSVZBVEUoV0VCS0lUX1BBR0UocGFnZSkpOwotICAgIHBhZ2VEYXRhLT5wYWdlID0g
bmV3IFBhZ2UobmV3IFdlYktpdDo6Q2hyb21lQ2xpZW50KHBhZ2UpLCBuZXcgV2ViS2l0OjpDb250
ZXh0TWVudUNsaWVudCwgbmV3IFdlYktpdDo6RWRpdG9yQ2xpZW50KHBhZ2UpLCBuZXcgV2ViS2l0
OjpEcmFnQ2xpZW50LCBuZXcgV2ViS2l0OjpJbnNwZWN0b3JDbGllbnQpOwotCi0gICAgU2V0dGlu
Z3MqIHNldHRpbmdzID0gcGFnZURhdGEtPnBhZ2UtPnNldHRpbmdzKCk7Ci0gICAgc2V0dGluZ3Mt
PnNldExvYWRzSW1hZ2VzQXV0b21hdGljYWxseSh0cnVlKTsKLSAgICBzZXR0aW5ncy0+c2V0TWlu
aW11bUZvbnRTaXplKDUpOwotICAgIHNldHRpbmdzLT5zZXRNaW5pbXVtTG9naWNhbEZvbnRTaXpl
KDUpOwotICAgIHNldHRpbmdzLT5zZXRTaG91bGRQcmludEJhY2tncm91bmRzKHRydWUpOwotICAg
IHNldHRpbmdzLT5zZXRKYXZhU2NyaXB0RW5hYmxlZCh0cnVlKTsKLSAgICBzZXR0aW5ncy0+c2V0
RGVmYXVsdEZpeGVkRm9udFNpemUoMTQpOwotICAgIHNldHRpbmdzLT5zZXREZWZhdWx0Rm9udFNp
emUoMTQpOwotICAgIHNldHRpbmdzLT5zZXRTZXJpZkZvbnRGYW1pbHkoIlRpbWVzIE5ldyBSb21h
biIpOwotICAgIHNldHRpbmdzLT5zZXRTYW5zU2VyaWZGb250RmFtaWx5KCJBcmlhbCIpOwotICAg
IHNldHRpbmdzLT5zZXRGaXhlZEZvbnRGYW1pbHkoIkNvdXJpZXIgTmV3Iik7Ci0gICAgc2V0dGlu
Z3MtPnNldFN0YW5kYXJkRm9udEZhbWlseSgiQXJpYWwiKTsKLQotICAgIEdUS19XSURHRVRfU0VU
X0ZMQUdTKHBhZ2UsIEdUS19DQU5fRk9DVVMpOwotICAgIHBhZ2VEYXRhLT5tYWluRnJhbWUgPSBX
RUJLSVRfRlJBTUUod2Via2l0X2ZyYW1lX25ldyhwYWdlKSk7Ci0gICAgcGFnZURhdGEtPmVkaXRh
YmxlID0gZmFsc2U7Ci19Ci0KLUd0a1dpZGdldCogd2Via2l0X3BhZ2VfbmV3KHZvaWQpCi17Ci0g
ICAgV2ViS2l0UGFnZSogcGFnZSA9IFdFQktJVF9QQUdFKGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQ
RV9QQUdFLCBOVUxMKSk7Ci0KLSAgICByZXR1cm4gR1RLX1dJREdFVChwYWdlKTsKLX0KLQotdm9p
ZCB3ZWJraXRfcGFnZV9zZXRfc2V0dGluZ3MoV2ViS2l0UGFnZSogcGFnZSwgV2ViS2l0U2V0dGlu
Z3MqIHNldHRpbmdzKQotewotICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX1BBR0UocGFn
ZSkpOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2V0dGluZ3MpOwotCi0gICAgbm90SW1wbGVtZW50
ZWQoKTsKLX0KLQotV2ViS2l0U2V0dGluZ3MqIHdlYmtpdF9wYWdlX2dldF9zZXR0aW5ncyhXZWJL
aXRQYWdlKiBwYWdlKQotewotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19QQUdF
KHBhZ2UpLCBOVUxMKTsKLQotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIE5VTEw7
Ci19Ci0KLXZvaWQgd2Via2l0X3BhZ2VfZ29fYmFja3dhcmQoV2ViS2l0UGFnZSogcGFnZSkKLXsK
LSAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19QQUdFKHBhZ2UpKTsKLQotICAgIFdlYktp
dFBhZ2VQcml2YXRlKiBwYWdlRGF0YSA9IFdFQktJVF9QQUdFX0dFVF9QUklWQVRFKHBhZ2UpOwot
ICAgIFdlYktpdEZyYW1lUHJpdmF0ZSogZnJhbWVEYXRhID0gV0VCS0lUX0ZSQU1FX0dFVF9QUklW
QVRFKHBhZ2VEYXRhLT5tYWluRnJhbWUpOwotICAgIGZyYW1lRGF0YS0+ZnJhbWUtPmxvYWRlcigp
LT5nb0JhY2tPckZvcndhcmQoLTEpOwotfQotCi12b2lkIHdlYmtpdF9wYWdlX2dvX2ZvcndhcmQo
V2ViS2l0UGFnZSogcGFnZSkKLXsKLSAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19QQUdF
KHBhZ2UpKTsKLQotICAgIFdlYktpdFBhZ2VQcml2YXRlKiBwYWdlRGF0YSA9IFdFQktJVF9QQUdF
X0dFVF9QUklWQVRFKHBhZ2UpOwotICAgIFdlYktpdEZyYW1lUHJpdmF0ZSogZnJhbWVEYXRhID0g
V0VCS0lUX0ZSQU1FX0dFVF9QUklWQVRFKHBhZ2VEYXRhLT5tYWluRnJhbWUpOwotICAgIGZyYW1l
RGF0YS0+ZnJhbWUtPmxvYWRlcigpLT5nb0JhY2tPckZvcndhcmQoMSk7Ci19Ci0KLWdib29sZWFu
IHdlYmtpdF9wYWdlX2Nhbl9nb19iYWNrd2FyZChXZWJLaXRQYWdlKiBwYWdlKQotewotICAgIGdf
cmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19QQUdFKHBhZ2UpLCBGQUxTRSk7Ci0KLSAgICBX
ZWJLaXRQYWdlUHJpdmF0ZSogcGFnZURhdGEgPSBXRUJLSVRfUEFHRV9HRVRfUFJJVkFURShwYWdl
KTsKLSAgICBXZWJLaXRGcmFtZVByaXZhdGUqIGZyYW1lRGF0YSA9IFdFQktJVF9GUkFNRV9HRVRf
UFJJVkFURShwYWdlRGF0YS0+bWFpbkZyYW1lKTsKLSAgICByZXR1cm4gZnJhbWVEYXRhLT5mcmFt
ZS0+bG9hZGVyKCktPmNhbkdvQmFja09yRm9yd2FyZCgtMSk7Ci19Ci0KLWdib29sZWFuIHdlYmtp
dF9wYWdlX2Nhbl9nb19mb3J3YXJkKFdlYktpdFBhZ2UqIHBhZ2UpCi17Ci0gICAgZ19yZXR1cm5f
dmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1BBR0UocGFnZSksIEZBTFNFKTsKLQotICAgIFdlYktpdFBh
Z2VQcml2YXRlKiBwYWdlRGF0YSA9IFdFQktJVF9QQUdFX0dFVF9QUklWQVRFKHBhZ2UpOwotICAg
IFdlYktpdEZyYW1lUHJpdmF0ZSogZnJhbWVEYXRhID0gV0VCS0lUX0ZSQU1FX0dFVF9QUklWQVRF
KHBhZ2VEYXRhLT5tYWluRnJhbWUpOwotICAgIHJldHVybiBmcmFtZURhdGEtPmZyYW1lLT5sb2Fk
ZXIoKS0+Y2FuR29CYWNrT3JGb3J3YXJkKDEpOwotfQotCi12b2lkIHdlYmtpdF9wYWdlX29wZW4o
V2ViS2l0UGFnZSogcGFnZSwgY29uc3QgZ2NoYXIqIHVyaSkKLXsKLSAgICBnX3JldHVybl9pZl9m
YWlsKFdFQktJVF9JU19QQUdFKHBhZ2UpKTsKLQotICAgIFdlYktpdFBhZ2VQcml2YXRlKiBwYWdl
RGF0YSA9IFdFQktJVF9QQUdFX0dFVF9QUklWQVRFKHBhZ2UpOwotICAgIFdlYktpdEZyYW1lUHJp
dmF0ZSogZnJhbWVEYXRhID0gV0VCS0lUX0ZSQU1FX0dFVF9QUklWQVRFKHBhZ2VEYXRhLT5tYWlu
RnJhbWUpOwotCi0gICAgRGVwcmVjYXRlZFN0cmluZyBzdHJpbmcgPSBEZXByZWNhdGVkU3RyaW5n
Ojpmcm9tVXRmOCh1cmkpOwotICAgIGZyYW1lRGF0YS0+ZnJhbWUtPmxvYWRlcigpLT5sb2FkKFJl
c291cmNlUmVxdWVzdChLVVJMKHN0cmluZykpKTsKLX0KLQotdm9pZCB3ZWJraXRfcGFnZV9yZWxv
YWQoV2ViS2l0UGFnZSogcGFnZSkKLXsKLSAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19Q
QUdFKHBhZ2UpKTsKLQotICAgIFdlYktpdFBhZ2VQcml2YXRlKiBwYWdlRGF0YSA9IFdFQktJVF9Q
QUdFX0dFVF9QUklWQVRFKHBhZ2UpOwotICAgIFdlYktpdEZyYW1lUHJpdmF0ZSogZnJhbWVEYXRh
ID0gV0VCS0lUX0ZSQU1FX0dFVF9QUklWQVRFKHBhZ2VEYXRhLT5tYWluRnJhbWUpOwotICAgIGZy
YW1lRGF0YS0+ZnJhbWUtPmxvYWRlcigpLT5yZWxvYWQoKTsKLX0KLQotdm9pZCB3ZWJraXRfcGFn
ZV9sb2FkX3N0cmluZyhXZWJLaXRQYWdlKiBwYWdlLCBjb25zdCBnY2hhciogY29udGVudCwgY29u
c3QgZ2NoYXIqIGNvbnRlbnRNaW1lVHlwZSwgY29uc3QgZ2NoYXIqIGNvbnRlbnRFbmNvZGluZywg
Y29uc3QgZ2NoYXIqIGJhc2VVcmkpCi17Ci0gICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNf
UEFHRShwYWdlKSk7Ci0KLSAgICBXZWJLaXRQYWdlUHJpdmF0ZSogcGFnZURhdGEgPSBXRUJLSVRf
UEFHRV9HRVRfUFJJVkFURShwYWdlKTsKLSAgICBXZWJLaXRGcmFtZVByaXZhdGUqIGZyYW1lRGF0
YSA9IFdFQktJVF9GUkFNRV9HRVRfUFJJVkFURShwYWdlRGF0YS0+bWFpbkZyYW1lKTsKLQotICAg
IEtVUkwgdXJsKERlcHJlY2F0ZWRTdHJpbmc6OmZyb21VdGY4KGJhc2VVcmkpKTsKLSAgICBSZWZQ
dHI8U2hhcmVkQnVmZmVyPiBzaGFyZWRCdWZmZXIgPSBuZXcgU2hhcmVkQnVmZmVyKHN0cmR1cChj
b250ZW50KSwgc3RybGVuKGNvbnRlbnQpKTsKLSAgICBTdWJzdGl0dXRlRGF0YSBzdWJzdGl0dXRl
RGF0YShzaGFyZWRCdWZmZXIucmVsZWFzZSgpLCBTdHJpbmcoY29udGVudE1pbWVUeXBlKSwgU3Ry
aW5nKGNvbnRlbnRFbmNvZGluZyksIEtVUkwoImFib3V0OmJsYW5rIiksIHVybCk7Ci0KLSAgICBm
cmFtZURhdGEtPmZyYW1lLT5sb2FkZXIoKS0+bG9hZChSZXNvdXJjZVJlcXVlc3QodXJsKSwgc3Vi
c3RpdHV0ZURhdGEpOwotfQotCi12b2lkIHdlYmtpdF9wYWdlX2xvYWRfaHRtbF9zdHJpbmcoV2Vi
S2l0UGFnZSogcGFnZSwgY29uc3QgZ2NoYXIqIGNvbnRlbnQsIGNvbnN0IGdjaGFyKiBiYXNlVXJs
KQotewotICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX1BBR0UocGFnZSkpOwotCi0gICAg
d2Via2l0X3BhZ2VfbG9hZF9zdHJpbmcocGFnZSwgY29udGVudCwgInRleHQvaHRtbCIsICJVVEYt
OCIsIGJhc2VVcmwpOwotfQotCi12b2lkIHdlYmtpdF9wYWdlX3N0b3BfbG9hZGluZyhXZWJLaXRQ
YWdlKiBwYWdlKQotewotICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX1BBR0UocGFnZSkp
OwotCi0gICAgV2ViS2l0UGFnZVByaXZhdGUqIHBhZ2VEYXRhID0gV0VCS0lUX1BBR0VfR0VUX1BS
SVZBVEUocGFnZSk7Ci0gICAgV2ViS2l0RnJhbWVQcml2YXRlKiBmcmFtZURhdGEgPSBXRUJLSVRf
RlJBTUVfR0VUX1BSSVZBVEUocGFnZURhdGEtPm1haW5GcmFtZSk7Ci0KLSAgICBpZiAoRnJhbWVM
b2FkZXIqIGxvYWRlciA9IGZyYW1lRGF0YS0+ZnJhbWUtPmxvYWRlcigpKQotICAgICAgICBsb2Fk
ZXItPnN0b3BBbGxMb2FkZXJzKCk7Ci19Ci0KLVdlYktpdEZyYW1lKiB3ZWJraXRfcGFnZV9nZXRf
bWFpbl9mcmFtZShXZWJLaXRQYWdlKiBwYWdlKQotewotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWls
KFdFQktJVF9JU19QQUdFKHBhZ2UpLCBOVUxMKTsKLQotICAgIFdlYktpdFBhZ2VQcml2YXRlKiBw
YWdlRGF0YSA9IFdFQktJVF9QQUdFX0dFVF9QUklWQVRFKHBhZ2UpOwotICAgIHJldHVybiBwYWdl
RGF0YS0+bWFpbkZyYW1lOwotfQotCi12b2lkIHdlYmtpdF9wYWdlX2V4ZWN1dGVfc2NyaXB0KFdl
YktpdFBhZ2UqIHBhZ2UsIGNvbnN0IGdjaGFyKiBzY3JpcHQpCi17Ci0gICAgZ19yZXR1cm5faWZf
ZmFpbChXRUJLSVRfSVNfUEFHRShwYWdlKSk7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChzY3JpcHQp
OwotCi0gICAgV2ViS2l0UGFnZVByaXZhdGUqIHBhZ2VEYXRhID0gV0VCS0lUX1BBR0VfR0VUX1BS
SVZBVEUocGFnZSk7Ci0gICAgV2ViS2l0RnJhbWVQcml2YXRlKiBmcmFtZURhdGEgPSBXRUJLSVRf
RlJBTUVfR0VUX1BSSVZBVEUocGFnZURhdGEtPm1haW5GcmFtZSk7Ci0KLSAgICBpZiAoRnJhbWVM
b2FkZXIqIGxvYWRlciA9IGZyYW1lRGF0YS0+ZnJhbWUtPmxvYWRlcigpKQotICAgICAgICBsb2Fk
ZXItPmV4ZWN1dGVTY3JpcHQoU3RyaW5nOjpmcm9tVVRGOChzY3JpcHQpLCB0cnVlKTsKLX0KLQot
LyoqCi0gKiB3ZWJraXRfcGFnZV9nZXRfZWRpdGFibGU6Ci0gKiBAcGFnZTogYSAjV2ViS2l0UGFn
ZQotICoKLSAqIFJldHVybnMgd2hldGhlciB0aGUgdXNlciBpcyBhbGxvd2VkIHRvIGVkaXQgdGhl
IGRvY3VtZW50LgotICoKLSAqIFJldHVybnMgJVRSVUUgaWYgQHBhZ2UgYWxsb3dzIHRoZSB1c2Vy
IHRvIGVkaXQgdGhlIEhUTUwgZG9jdW1lbnQsICVGQUxTRSBpZgotICogaXQgZG9lc24ndC4gWW91
IGNhbiBjaGFuZ2UgQHBhZ2UncyBkb2N1bWVudCBwcm9ncmFtbWF0aWNhbGx5IHJlZ2FyZGxlc3Mg
b2YKLSAqIHRoaXMgc2V0dGluZy4KLSAqCi0gKiBSZXR1cm4gdmFsdWU6IGEgI2dib29sZWFuIGlu
ZGljYXRpbmcgdGhlIGVkaXRhYmxlIHN0YXRlCi0gKi8KLWdib29sZWFuIHdlYmtpdF9wYWdlX2dl
dF9lZGl0YWJsZShXZWJLaXRQYWdlKiBwYWdlKQotewotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWls
KFdFQktJVF9JU19QQUdFKHBhZ2UpLCBGQUxTRSk7Ci0KLSAgICBXZWJLaXRQYWdlUHJpdmF0ZSog
cGFnZURhdGEgPSBXRUJLSVRfUEFHRV9HRVRfUFJJVkFURShwYWdlKTsKLSAgICBBU1NFUlQocGFn
ZURhdGEpOwotCi0gICAgcmV0dXJuIHBhZ2VEYXRhLT5lZGl0YWJsZTsKLX0KLQotLyoqCi0gKiB3
ZWJraXRfcGFnZV9zZXRfZWRpdGFibGU6Ci0gKiBAcGFnZTogYSAjV2ViS2l0UGFnZQotICogQGZs
YWc6IGEgI2dib29sZWFuIGluZGljYXRpbmcgdGhlIGVkaXRhYmxlIHN0YXRlCi0gKgotICogU2V0
cyB3aGV0aGVyIEBwYWdlIGFsbG93cyB0aGUgdXNlciB0byBlZGl0IGl0cyBIVE1MIGRvY3VtZW50
LgotICoKLSAqIElmIEBmbGFnIGlzICVUUlVFLCBAcGFnZSBhbGxvd3MgdGhlIHVzZXIgdG8gZWRp
dCB0aGUgZG9jdW1lbnQuIElmIEBmbGFnIGlzCi0gKiAlRkFMU0UsIGFuIGVsZW1lbnQgaW4gQHBh
Z2UncyBkb2N1bWVudCBjYW4gb25seSBiZSBlZGl0ZWQgaWYgdGhlCi0gKiBDT05URU5URURJVEFC
TEUgYXR0cmlidXRlIGhhcyBiZWVuIHNldCBvbiB0aGUgZWxlbWVudCBvciBvbmUgb2YgaXRzIHBh
cmVudAotICogZWxlbWVudHMuIFlvdSBjYW4gY2hhbmdlIEBwYWdlJ3MgZG9jdW1lbnQgcHJvZ3Jh
bW1hdGljYWxseSByZWdhcmRsZXNzIG9mCi0gKiB0aGlzIHNldHRpbmcuIEJ5IGRlZmF1bHQgYSAj
V2ViS2l0UGFnZSBpcyBub3QgZWRpdGFibGUuCi0KLSAqIE5vcm1hbGx5LCBhbiBIVE1MIGRvY3Vt
ZW50IGlzIG5vdCBlZGl0YWJsZSB1bmxlc3MgdGhlIGVsZW1lbnRzIHdpdGhpbiB0aGUKLSAqIGRv
Y3VtZW50IGFyZSBlZGl0YWJsZS4gVGhpcyBmdW5jdGlvbiBwcm92aWRlcyBhIGxvdy1sZXZlbCB3
YXkgdG8gbWFrZSB0aGUKLSAqIGNvbnRlbnRzIG9mIGEgI1dlYktpdFBhZ2UgZWRpdGFibGUgd2l0
aG91dCBhbHRlcmluZyB0aGUgZG9jdW1lbnQgb3IgRE9NCi0gKiBzdHJ1Y3R1cmUuCi0gKi8KLXZv
aWQgd2Via2l0X3BhZ2Vfc2V0X2VkaXRhYmxlKFdlYktpdFBhZ2UqIHBhZ2UsIGdib29sZWFuIGZs
YWcpCi17Ci0gICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfUEFHRShwYWdlKSk7Ci0gICAg
ZmxhZyA9IGZsYWcgIT0gRkFMU0U7Ci0KLSAgICBXZWJLaXRQYWdlUHJpdmF0ZSogcGFnZURhdGEg
PSBXRUJLSVRfUEFHRV9HRVRfUFJJVkFURShwYWdlKTsKLSAgICBBU1NFUlQocGFnZURhdGEpOwot
Ci0gICAgRnJhbWUqIG1haW5GcmFtZSA9IGNvcmUocGFnZURhdGEtPm1haW5GcmFtZSk7Ci0gICAg
Z19yZXR1cm5faWZfZmFpbChtYWluRnJhbWUpOwotCi0gICAgLy8gVE9ETzogV2hhdCBoYXBwZW5z
IHdoZW4gdGhlIGZyYW1lIGlzIHJlcGxhY2VkPwotICAgIGlmIChmbGFnID09IHBhZ2VEYXRhLT5l
ZGl0YWJsZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgcGFnZURhdGEtPmVkaXRhYmxlID0gZmxh
ZzsKLQotICAgIGlmIChmbGFnKSB7Ci0gICAgICAgIG1haW5GcmFtZS0+YXBwbHlFZGl0aW5nU3R5
bGVUb0JvZHlFbGVtZW50KCk7Ci0gICAgICAgIC8vIFRPRE86IElmIHRoZSBXZWJLaXRQYWdlIGlz
IG1hZGUgZWRpdGFibGUgYW5kIHRoZSBzZWxlY3Rpb24gaXMgZW1wdHksIHNldCBpdCB0byBzb21l
dGhpbmcuCi0gICAgICAgIC8vaWYgKCF3ZWJraXRfcGFnZV9nZXRfc2VsZWN0ZWRfZG9tX3Jhbmdl
KHBhZ2UpKQotICAgICAgICAvLyAgICBtYWluRnJhbWUtPnNldFNlbGVjdGlvbkZyb21Ob25lKCk7
Ci0gICAgfSBlbHNlCi0gICAgICAgIG1haW5GcmFtZS0+cmVtb3ZlRWRpdGluZ1N0eWxlRnJvbUJv
ZHlFbGVtZW50KCk7Ci19Ci0KLX0KSW5kZXg6IFdlYktpdC9ndGsvQXBpL3dlYmtpdGd0a3BhZ2Uu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJLaXQvZ3RrL0FwaS93ZWJraXRndGtwYWdlLmgJKHJldmlzaW9u
IDI4MjUxKQorKysgV2ViS2l0L2d0ay9BcGkvd2Via2l0Z3RrcGFnZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDEzNSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5z
IFBldGVyIEZyZXl0aGVyCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSAqIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKLSAqIDMuICBOZWl0aGVyIHRoZSBu
YW1lIG9mIEFwcGxlLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRz
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4gCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotI2lmbmRlZiBXRUJLSVRfUEFHRV9ICi0jZGVmaW5lIFdFQktJVF9QQUdFX0gKLQot
I2luY2x1ZGUgPGd0ay9ndGsuaD4KLQotI2luY2x1ZGUgIndlYmtpdGd0a2RlZmluZXMuaCIKLSNp
bmNsdWRlICJ3ZWJraXRndGtzZXR0aW5ncy5oIgotCi1HX0JFR0lOX0RFQ0xTCi0KLSNkZWZpbmUg
V0VCS0lUX1RZUEVfUEFHRSAgICAgICAgICAgICh3ZWJraXRfcGFnZV9nZXRfdHlwZSgpKQotI2Rl
ZmluZSBXRUJLSVRfUEFHRShvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9D
QVNUKChvYmopLCBXRUJLSVRfVFlQRV9QQUdFLCBXZWJLaXRQYWdlKSkKLSNkZWZpbmUgV0VCS0lU
X1BBR0VfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAg
V0VCS0lUX1RZUEVfUEFHRSwgV2ViS2l0UGFnZUNsYXNzKSkKLSNkZWZpbmUgV0VCS0lUX0lTX1BB
R0Uob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lU
X1RZUEVfUEFHRSkpCi0jZGVmaW5lIFdFQktJVF9JU19QQUdFX0NMQVNTKGtsYXNzKSAoR19UWVBF
X0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9UWVBFX1BBR0UpKQotI2RlZmluZSBX
RUJLSVRfUEFHRV9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9i
aiksICBXRUJLSVRfVFlQRV9QQUdFLCBXZWJLaXRQYWdlQ2xhc3MpKQotCi0KLXR5cGVkZWYgZW51
bSB7Ci0gICAgV0VCS0lUX05BVklHQVRJT05fUkVTUE9OU0VfQUNDRVBULAotICAgIFdFQktJVF9O
QVZJR0FUSU9OX1JFU1BPTlNFX0lHTk9SRSwKLSAgICBXRUJLSVRfTkFWSUdBVElPTl9SRVNQT05T
RV9ET1dOTE9BRAotfSBXZWJLaXROYXZpZ2F0aW9uUmVzcG9uc2U7Ci0KLQotCi1zdHJ1Y3QgX1dl
YktpdFBhZ2UgewotICAgIEd0a0NvbnRhaW5lciBwYXJlbnQ7Ci19OwotCi1zdHJ1Y3QgX1dlYktp
dFBhZ2VDbGFzcyB7Ci0gICAgR3RrQ29udGFpbmVyQ2xhc3MgcGFyZW50OwotCi0gICAgLyoKLSAg
ICAgKiBkZWZhdWx0IGhhbmRsZXIvdmlydHVhbCBtZXRob2RzCi0gICAgICogRElTQ1VTUzogY3Jl
YXRlX3BhZ2UgbmVlZHMgYSByZXF1ZXN0IGFuZCBzaG91bGQgd2UgbWFrZSB0aGlzIGEgc2lnbmFs
IHdpdGggZGVmYXVsdCBoYW5kbGVyPyB0aGlzIHdvdWxkCi0gICAgICogcmVxdWlyZSBzb21lb25l
IGRvaW5nIGEgZ19zaWduYWxfc3RvcF9lbWlzc2lvbl9ieV9uYW1lCi0gICAgICogV2ViVUlEZWxl
Z2F0ZSBoYXMgbm90aGluZyBmb3IgY3JlYXRlX2ZyYW1lLCBXZWJQb2xpY3lEZWxlZ2F0ZSBhcyB3
ZWxsLi4uCi0gICAgICovCi0gICAgV2ViS2l0UGFnZSogICgqY3JlYXRlX3BhZ2UpICAoV2ViS2l0
UGFnZSogcGFnZSk7Ci0KLSAgICAvKgotICAgICAqIFRPRE86IEZJWE1FOiBDcmVhdGUgc29tZXRo
aW5nIGxpa2UgV2ViUG9saWN5RGVjaXNpb25MaXN0ZW5lcl9Qcm90b2NvbCBpbnN0ZWFkCi0gICAg
ICovCi0gICAgV2ViS2l0TmF2aWdhdGlvblJlc3BvbnNlICgqbmF2aWdhdGlvbl9yZXF1ZXN0ZWQp
IChXZWJLaXRQYWdlKiBwYWdlLCBXZWJLaXRGcmFtZSogZnJhbWUsIFdlYktpdE5ldHdvcmtSZXF1
ZXN0KiByZXF1ZXN0KTsKLQotICAgIHZvaWQgKCp3aW5kb3dfb2JqZWN0X2NsZWFyZWQpIChXZWJL
aXRQYWdlKiBwYWdlLCBXZWJLaXRGcmFtZSogZnJhbWUsIEpTR2xvYmFsQ29udGV4dFJlZiBjb250
ZXh0LCBKU09iamVjdFJlZiB3aW5kb3dfb2JqZWN0KTsKLSAgICBnY2hhciogICAoKmNob29zZV9m
aWxlKSAoV2ViS2l0UGFnZSogcGFnZSwgV2ViS2l0RnJhbWUqIGZyYW1lLCBjb25zdCBnY2hhciog
b2xkX2ZpbGUpOwotICAgIGdib29sZWFuICgqc2NyaXB0X2FsZXJ0KSAoV2ViS2l0UGFnZSogcGFn
ZSwgV2ViS2l0RnJhbWUqIGZyYW1lLCBjb25zdCBnY2hhciogYWxlcnRfbWVzc2FnZSk7Ci0gICAg
Z2Jvb2xlYW4gKCpzY3JpcHRfY29uZmlybSkgKFdlYktpdFBhZ2UqIHBhZ2UsIFdlYktpdEZyYW1l
KiBmcmFtZSwgY29uc3QgZ2NoYXIqIGNvbmZpcm1fbWVzc2FnZSwgZ2Jvb2xlYW4qIGRpZF9jb25m
aXJtKTsKLSAgICBnYm9vbGVhbiAoKnNjcmlwdF9wcm9tcHQpIChXZWJLaXRQYWdlKiBwYWdlLCBX
ZWJLaXRGcmFtZSogZnJhbWUsIGNvbnN0IGdjaGFyKiBtZXNzYWdlLCBjb25zdCBnY2hhciogZGVm
YXVsdF92YWx1ZSwgZ2NoYXIqKiB2YWx1ZSk7Ci0gICAgZ2Jvb2xlYW4gKCpjb25zb2xlX21lc3Nh
Z2UpIChXZWJLaXRQYWdlKiBwYWdlLCBjb25zdCBnY2hhciogbWVzc2FnZSwgdW5zaWduZWQgaW50
IGxpbmVfbnVtYmVyLCBjb25zdCBnY2hhciogc291cmNlX2lkKTsKLQotICAgIC8qCi0gICAgICog
aW50ZXJuYWwKLSAgICAgKi8KLSAgICB2b2lkICAgKCpzZXRfc2Nyb2xsX2FkanVzdG1lbnRzKSAo
V2ViS2l0UGFnZSosIEd0a0FkanVzdG1lbnQqLCBHdGtBZGp1c3RtZW50Kik7Ci19OwotCi1XRUJL
SVRfQVBJIEdUeXBlCi13ZWJraXRfcGFnZV9nZXRfdHlwZSAodm9pZCk7Ci0KLVdFQktJVF9BUEkg
R3RrV2lkZ2V0Kgotd2Via2l0X3BhZ2VfbmV3ICh2b2lkKTsKLQotV0VCS0lUX0FQSSBnYm9vbGVh
bgotd2Via2l0X3BhZ2VfY2FuX2dvX2JhY2t3YXJkIChXZWJLaXRQYWdlKiBwYWdlKTsKLQotV0VC
S0lUX0FQSSBnYm9vbGVhbgotd2Via2l0X3BhZ2VfY2FuX2dvX2ZvcndhcmQgKFdlYktpdFBhZ2Uq
IHBhZ2UpOwotCi1XRUJLSVRfQVBJIHZvaWQKLXdlYmtpdF9wYWdlX2dvX2JhY2t3YXJkIChXZWJL
aXRQYWdlKiBwYWdlKTsKLQotV0VCS0lUX0FQSSB2b2lkCi13ZWJraXRfcGFnZV9nb19mb3J3YXJk
IChXZWJLaXRQYWdlKiBwYWdlKTsKLQotV0VCS0lUX0FQSSB2b2lkCi13ZWJraXRfcGFnZV9zdG9w
X2xvYWRpbmcgKFdlYktpdFBhZ2UqIHBhZ2UpOwotCi1XRUJLSVRfQVBJIHZvaWQKLXdlYmtpdF9w
YWdlX29wZW4gKFdlYktpdFBhZ2UqIHBhZ2UsIGNvbnN0IGdjaGFyKiB1cmkpOwotCi1XRUJLSVRf
QVBJIHZvaWQKLXdlYmtpdF9wYWdlX3JlbG9hZCAoV2ViS2l0UGFnZSAqcGFnZSk7Ci0KLVdFQktJ
VF9BUEkgdm9pZAotd2Via2l0X3BhZ2VfbG9hZF9zdHJpbmcgKFdlYktpdFBhZ2UqIHBhZ2UsIGNv
bnN0IGdjaGFyKiBjb250ZW50LCBjb25zdCBnY2hhciogY29udGVudF9taW1lX3R5cGUsIGNvbnN0
IGdjaGFyKiBjb250ZW50X2VuY29kaW5nLCBjb25zdCBnY2hhciogYmFzZV91cmkpOwotCi1XRUJL
SVRfQVBJIHZvaWQKLXdlYmtpdF9wYWdlX2xvYWRfaHRtbF9zdHJpbmcgKFdlYktpdFBhZ2UqIHBh
Z2UsIGNvbnN0IGdjaGFyKiBjb250ZW50LCBjb25zdCBnY2hhciogYmFzZV91cmkpOwotCi1XRUJL
SVRfQVBJIFdlYktpdEZyYW1lKgotd2Via2l0X3BhZ2VfZ2V0X21haW5fZnJhbWUgKFdlYktpdFBh
Z2UqIHBhZ2UpOwotCi1XRUJLSVRfQVBJIHZvaWQKLXdlYmtpdF9wYWdlX2V4ZWN1dGVfc2NyaXB0
IChXZWJLaXRQYWdlKiBwYWdlLCBjb25zdCBnY2hhciogc2NyaXB0KTsKLQotV0VCS0lUX0FQSSBn
Ym9vbGVhbgotd2Via2l0X3BhZ2VfZ2V0X2VkaXRhYmxlIChXZWJLaXRQYWdlKiBwYWdlKTsKLQot
V0VCS0lUX0FQSSB2b2lkCi13ZWJraXRfcGFnZV9zZXRfZWRpdGFibGUgKFdlYktpdFBhZ2UqIHBh
Z2UsIGdib29sZWFuIGZsYWcpOwotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYKSW5kZXg6IFdlYktp
dC9ndGsvQXBpL3dlYmtpdGd0a3ByaXZhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9ndGsv
QXBpL3dlYmtpdGd0a3ByaXZhdGUuY3BwCShyZXZpc2lvbiAyODI1MSkKKysrIFdlYktpdC9ndGsv
QXBpL3dlYmtpdGd0a3ByaXZhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDk4ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuIAotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uIAotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUsIEluYy4g
KCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJv
bSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LiAKLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09O
VFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0KLSNpbmNsdWRlICJ3ZWJraXRndGtwcml2YXRlLmgiCi0jaW5jbHVkZSAiQ2hy
b21lQ2xpZW50R3RrLmgiCi0jaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKLSNpbmNsdWRlICJGcmFt
ZUxvYWRlckNsaWVudEd0ay5oIgotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0KLXVzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOwotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLXZvaWQgYXBwbHkoV2Vi
S2l0U2V0dGluZ3MqLCBXZWJDb3JlOjpTZXR0aW5ncyopCi17Ci0gICAgbm90SW1wbGVtZW50ZWQo
KTsKLX0KLQotV2ViS2l0U2V0dGluZ3MqIGNyZWF0ZShXZWJDb3JlOjpTZXR0aW5ncyopCi17Ci0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gMDsKLX0KLQotV2ViS2l0RnJhbWUqIGdl
dEZyYW1lRnJvbVBhZ2UoV2ViS2l0UGFnZSogcGFnZSkKLXsKLSAgICByZXR1cm4gd2Via2l0X3Bh
Z2VfZ2V0X21haW5fZnJhbWUocGFnZSk7Ci19Ci0KLVdlYktpdFBhZ2UqIGdldFBhZ2VGcm9tRnJh
bWUoV2ViS2l0RnJhbWUqIGZyYW1lKQotewotICAgIHJldHVybiB3ZWJraXRfZnJhbWVfZ2V0X3Bh
Z2UoZnJhbWUpOwotfQotCi1XZWJDb3JlOjpGcmFtZSogY29yZShXZWJLaXRGcmFtZSogZnJhbWUp
Ci17Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBXZWJLaXRGcmFt
ZVByaXZhdGUqIGZyYW1lX2RhdGEgPSBXRUJLSVRfRlJBTUVfR0VUX1BSSVZBVEUoZnJhbWUpOwot
ICAgIHJldHVybiBmcmFtZV9kYXRhID8gZnJhbWVfZGF0YS0+ZnJhbWUgOiAwOwotfQotCi1XZWJL
aXRGcmFtZSoga2l0KFdlYkNvcmU6OkZyYW1lKiBjb3JlRnJhbWUpCi17Ci0gICAgaWYgKCFjb3Jl
RnJhbWUpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgQVNTRVJUKGNvcmVGcmFtZS0+bG9hZGVy
KCkpOwotICAgIFdlYktpdDo6RnJhbWVMb2FkZXJDbGllbnQqIGNsaWVudCA9IHN0YXRpY19jYXN0
PFdlYktpdDo6RnJhbWVMb2FkZXJDbGllbnQqPihjb3JlRnJhbWUtPmxvYWRlcigpLT5jbGllbnQo
KSk7Ci0gICAgcmV0dXJuIGNsaWVudCA/IGNsaWVudC0+d2ViRnJhbWUoKSA6IDA7Ci19Ci0KLVdl
YkNvcmU6OlBhZ2UqIGNvcmUoV2ViS2l0UGFnZSogcGFnZSkKLXsKLSAgICBpZiAoIXBhZ2UpCi0g
ICAgICAgIHJldHVybiAwOwotCi0gICAgV2ViS2l0UGFnZVByaXZhdGUqIHBhZ2VfZGF0YSA9IFdF
QktJVF9QQUdFX0dFVF9QUklWQVRFKHBhZ2UpOwotICAgIHJldHVybiBwYWdlX2RhdGEgPyBwYWdl
X2RhdGEtPnBhZ2UgOiAwOwotfQotCi1XZWJLaXRQYWdlKiBraXQoV2ViQ29yZTo6UGFnZSogcGFn
ZSkKLXsKLSAgICBpZiAoIXBhZ2UpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgQVNTRVJUKHBh
Z2UtPmNocm9tZSgpKTsKLSAgICBXZWJLaXQ6OkNocm9tZUNsaWVudCogY2xpZW50ID0gc3RhdGlj
X2Nhc3Q8V2ViS2l0OjpDaHJvbWVDbGllbnQqPihwYWdlLT5jaHJvbWUoKS0+Y2xpZW50KCkpOwot
ICAgIHJldHVybiBjbGllbnQgPyBjbGllbnQtPndlYlBhZ2UoKSA6IDA7Ci19Ci19CkluZGV4OiBX
ZWJLaXQvZ3RrL0FwaS93ZWJraXRndGtwcml2YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2d0
ay9BcGkvd2Via2l0Z3RrcHJpdmF0ZS5oCShyZXZpc2lvbiAyODI1MSkKKysrIFdlYktpdC9ndGsv
QXBpL3dlYmtpdGd0a3ByaXZhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw5NiArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLiAKLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLiAKLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlLCBJbmMuICgi
QXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20g
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4g
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRS
SUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBXRUJL
SVRfUFJJVkFURV9ICi0jZGVmaW5lIFdFQktJVF9QUklWQVRFX0gKLQotLyoKLSAqIEludGVybmFs
IGNsYXNzLiBUaGlzIGNsYXNzIGtub3dzIHRoZSBzaGFyZWQgc2VjcmV0IG9mIFdlYktpdEZyYW1l
LAotICogV2ViS2l0TmV0d29ya1JlcXVlc3QgYW5kIFdlYktpdFBhZ2UuCi0gKiBUaGV5IGFyZSB1
c2luZyBXZWJDb3JlIHdoaWNoIG11c24ndCBiZSBleHBvc2VkIHRvIHRoZSBvdXRlciB3b3JsZC4K
LSAqLwotCi0jaW5jbHVkZSAid2Via2l0Z3Rrc2V0dGluZ3MuaCIKLSNpbmNsdWRlICJ3ZWJraXRn
dGtwYWdlLmgiCi0jaW5jbHVkZSAid2Via2l0Z3RrZnJhbWUuaCIKLSNpbmNsdWRlICJ3ZWJraXRn
dGtuZXR3b3JrcmVxdWVzdC5oIgotCi0jaW5jbHVkZSAiU2V0dGluZ3MuaCIKLSNpbmNsdWRlICJQ
YWdlLmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudC5o
IgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLSAgICB2b2lkIGFwcGx5KFdlYktpdFNldHRpbmdzKixX
ZWJDb3JlOjpTZXR0aW5ncyopOwotICAgIFdlYktpdFNldHRpbmdzKiBjcmVhdGUoV2ViQ29yZTo6
U2V0dGluZ3MqKTsKLSAgICBXZWJLaXRGcmFtZSogIGdldEZyYW1lRnJvbVBhZ2UoV2ViS2l0UGFn
ZSopOwotICAgIFdlYktpdFBhZ2UqIGdldFBhZ2VGcm9tRnJhbWUoV2ViS2l0RnJhbWUqKTsKLQot
ICAgIFdlYkNvcmU6OkZyYW1lKiBjb3JlKFdlYktpdEZyYW1lKik7Ci0gICAgV2ViS2l0RnJhbWUq
IGtpdChXZWJDb3JlOjpGcmFtZSopOwotICAgIFdlYkNvcmU6OlBhZ2UqIGNvcmUoV2ViS2l0UGFn
ZSopOwotICAgIFdlYktpdFBhZ2UqIGtpdChXZWJDb3JlOjpQYWdlKik7Ci19Ci0KLWV4dGVybiAi
QyIgewotICAgICNkZWZpbmUgV0VCS0lUX1BBR0VfR0VUX1BSSVZBVEUob2JqKSAgICAoR19UWVBF
X0lOU1RBTkNFX0dFVF9QUklWQVRFKChvYmopLCBXRUJLSVRfVFlQRV9QQUdFLCBXZWJLaXRQYWdl
UHJpdmF0ZSkpCi0gICAgdHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFBhZ2VQcml2YXRlIFdlYktpdFBh
Z2VQcml2YXRlOwotICAgIHN0cnVjdCBfV2ViS2l0UGFnZVByaXZhdGUgewotICAgICAgICBXZWJD
b3JlOjpQYWdlKiBwYWdlOwotICAgICAgICBXZWJDb3JlOjpTZXR0aW5ncyogc2V0dGluZ3M7Ci0K
LSAgICAgICAgV2ViS2l0RnJhbWUqIG1haW5GcmFtZTsKLSAgICAgICAgV2ViQ29yZTo6U3RyaW5n
IGFwcGxpY2F0aW9uTmFtZUZvclVzZXJBZ2VudDsKLSAgICAgICAgV2ViQ29yZTo6U3RyaW5nKiB1
c2VyQWdlbnQ7Ci0KLSAgICAgICAgSGFzaFNldDxHdGtXaWRnZXQqPiBjaGlsZHJlbjsKLSAgICAg
ICAgYm9vbCBlZGl0YWJsZTsKLSAgICB9OwotCi0gICAgI2RlZmluZSBXRUJLSVRfRlJBTUVfR0VU
X1BSSVZBVEUob2JqKSAgICAoR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFKChvYmopLCBXRUJL
SVRfVFlQRV9GUkFNRSwgV2ViS2l0RnJhbWVQcml2YXRlKSkKLSAgICB0eXBlZGVmIHN0cnVjdCBf
V2ViS2l0RnJhbWVQcml2YXRlIFdlYktpdEZyYW1lUHJpdmF0ZTsKLSAgICBzdHJ1Y3QgX1dlYktp
dEZyYW1lUHJpdmF0ZSB7Ci0gICAgICAgIFdlYkNvcmU6OkZyYW1lKiBmcmFtZTsKLSAgICAgICAg
V2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnQqIGNsaWVudDsKLSAgICAgICAgV2ViS2l0UGFnZSog
cGFnZTsKLQotICAgICAgICBnY2hhciogbmFtZTsKLSAgICAgICAgZ2NoYXIqIHRpdGxlOwotICAg
ICAgICBnY2hhciogbG9jYXRpb247Ci0gICAgfTsKLQotICAgICNkZWZpbmUgV0VCS0lUX05FVFdP
UktfUkVRVUVTVF9HRVRfUFJJVkFURShvYmopICAgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZB
VEUoKG9iaiksIFdFQktJVF9UWVBFX05FVFdPUktfUkVRVUVTVCwgV2ViS2l0TmV0d29ya1JlcXVl
c3RQcml2YXRlKSkKLSAgICB0eXBlZGVmIHN0cnVjdCBfV2ViS2l0TmV0d29ya1JlcXVlc3RQcml2
YXRlIFdlYktpdE5ldHdvcmtSZXF1ZXN0UHJpdmF0ZTsKLSAgICBzdHJ1Y3QgX1dlYktpdE5ldHdv
cmtSZXF1ZXN0UHJpdmF0ZSB7Ci0gICAgICAgIGdjaGFyKiB1cmk7Ci0gICAgfTsKLQotICAgIFdl
YktpdEZyYW1lKiB3ZWJraXRfZnJhbWVfaW5pdF93aXRoX3BhZ2UoV2ViS2l0UGFnZSosIFdlYkNv
cmU6OkhUTUxGcmFtZU93bmVyRWxlbWVudCopOwotfQotCi0jZW5kaWYKSW5kZXg6IFdlYktpdC9n
dGsvQXBpL3dlYmtpdGd0a3NldHRpbmdzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvZ3RrL0Fw
aS93ZWJraXRndGtzZXR0aW5ncy5jcHAJKHJldmlzaW9uIDI4MjUxKQorKysgV2ViS2l0L2d0ay9B
cGkvd2Via2l0Z3Rrc2V0dGluZ3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDczICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuIAotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uIAotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUsIEluYy4g
KCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJv
bSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LiAKLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09O
VFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0KLSNpbmNsdWRlICJ3ZWJraXRndGtzZXR0aW5ncy5oIgotCi1leHRlcm4gIkMi
IHsKLUdUeXBlIHdlYmtpdF93ZWJfc2V0dGluZ3NfZ2V0X3R5cGUodm9pZCkKLXsKLSAgICByZXR1
cm4gR1R5cGUoKTsKLX0KLQotV2ViS2l0U2V0dGluZ3MqIHdlYmtpdF93ZWJfc2V0dGluZ3NfY29w
eShXZWJLaXRTZXR0aW5ncyogc2V0dGluZykKLXsKLSAgICByZXR1cm4gMDsKLX0KLQotdm9pZCB3
ZWJraXRfd2ViX3NldHRpbmdzX2ZyZWUoV2ViS2l0U2V0dGluZ3MqIHNldHRpbmcpCi17Ci19Ci0K
LVdlYktpdFNldHRpbmdzKiB3ZWJraXRfd2ViX3NldHRpbmdzX2dldF9nbG9iYWwodm9pZCkKLXsK
LSAgICByZXR1cm4gMDsKLX0KLQotdm9pZCB3ZWJraXRfd2ViX3NldHRpbmdzX3NldF9nbG9iYWwg
KFdlYktpdFNldHRpbmdzKiBzZXR0aW5nKQotewotfQotCi12b2lkIHdlYmtpdF93ZWJfc2V0dGlu
Z3Nfc2V0X2ZvbnRfZmFtaWx5KFdlYktpdFNldHRpbmdzKiwgV2ViS2l0Rm9udEZhbWlseSBmYW1p
bHksIGdjaGFyKiBmYW1pbHlfbmFtZSkKLXsKLX0KLQotY29uc3QgZ2NoYXIqIHdlYmtpdF93ZWJf
c2V0dGluZ3NfZ2V0X2ZvbnRfZmFtaWx5KFdlYktpdFNldHRpbmdzKiwgV2ViS2l0Rm9udEZhbWls
eSBmYW1pbHkpCi17Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXZvaWQgd2Via2l0X3dlYl9zZXR0aW5n
c19zZXRfdXNlcl9zdHlsZV9zaGVldF9sb2NhdGlvbihXZWJLaXRTZXR0aW5ncyosIGdjaGFyKikK
LXsKLX0KLQotdm9pZCB3ZWJraXRfc2V0X2Z0cF9kaXJlY3RvcnlfdGVtcGxhdGVfcGF0aChXZWJL
aXRTZXR0aW5ncyosIGdjaGFyKikKLXsKLX0KLX0KSW5kZXg6IFdlYktpdC9ndGsvQXBpL3dlYmtp
dGd0a3NldHRpbmdzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2d0ay9BcGkvd2Via2l0Z3Rrc2V0
dGluZ3MuaAkocmV2aXNpb24gMjgyNTEpCisrKyBXZWJLaXQvZ3RrL0FwaS93ZWJraXRndGtzZXR0
aW5ncy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDExNyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAK
LSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAK
LSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlLCBJbmMuICgiQXBwbGUiKSBub3IgdGhl
IG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMi
IEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBXRUJLSVRfU0VUVElOR1NfSAot
I2RlZmluZSBXRUJLSVRfU0VUVElOR1NfSAotCi0jaW5jbHVkZSA8Z2xpYi5oPgotI2luY2x1ZGUg
PGdsaWItb2JqZWN0Lmg+Ci0KLSNpbmNsdWRlICJ3ZWJraXRndGtkZWZpbmVzLmgiCi0KLUdfQkVH
SU5fREVDTFMKLQotdHlwZWRlZiBlbnVtIHsKLSAgICBXRUJLSVRfRk9OVF9GQU1JTFlfU1RBTkRB
UkQsCi0gICAgV0VCS0lUX0ZPTlRfRkFNSUxZX0ZJWEVELAotICAgIFdFQktJVF9GT05UX0ZBTUlM
WV9TRVJJRiwKLSAgICBXRUJLSVRfRk9OVF9GQU1JTFlfU0FOU19TRVJJRiwKLSAgICBXRUJLSVRf
Rk9OVF9GQU1JTFlfQ1VSU0lWRSwKLSAgICBXRUJLSVRfRk9OVF9GQU1JTFlfRkFOVEFTWSwKLSAg
ICBXRUJLSVRfRk9OVF9GQU1JTFlfTEFTVF9FTlRSWQotfSBXZWJLaXRGb250RmFtaWx5OwotCi10
eXBlZGVmIGVudW0gewotICAgIFdFQktJVF9FRElUQUJMRV9MSU5LX0RFRkFVTFRfQkVIQVZJT1VS
LAotICAgIFdFQktJVF9FRElUQUJMRV9MSU5LX0FMV0FZU19MSVZFLAotICAgIFdFQktJVF9FRElU
QUJMRV9MSU5LX09OTFlfV0lUSF9TSElGVF9LRVksCi0gICAgV0VCS0lUX0VESVRBQkxFX0xJTktf
TElWRV9XSEVOX05PVF9GT0NVU0VELAotICAgIFdFQktJVF9FRElUQUJMRV9MSU5LX05FVkVSX0xJ
VkUKLX0gV2ViS2l0RWRpdGFibGVMaW5rQmVoYXZpb3VyOwotCi10eXBlZGVmIHN0cnVjdCBfV2Vi
S2l0U2V0dGluZ3MgV2ViS2l0U2V0dGluZ3M7Ci10eXBlZGVmIHN0cnVjdCBfV2ViS2l0U2V0dGlu
Z3NQcml2YXRlIFdlYktpdFNldHRpbmdzUHJpdmF0ZTsKLQotc3RydWN0IF9XZWJLaXRTZXR0aW5n
cyB7Ci0gICAgZ2NoYXIqIGZvbnRfbmFtZVtXRUJLSVRfRk9OVF9GQU1JTFlfTEFTVF9FTlRSWV07
Ci0gICAgZ2ludCAgIG1pbmltdW1fZm9udF9zaXplOwotICAgIGdpbnQgICBtaW5pbXVtX2xvZ2lj
YWxfZm9udF9zaXplOwotICAgIGdpbnQgICBkZWZhdWx0X2ZvbnRfc2l6ZTsKLSAgICBnaW50ICAg
ZGVmYXVsdF9maXhlZF9mb250X3NpemU7Ci0gICAgZ2Jvb2xlYW4gbG9hZF9pbWFnZXNfYXV0b21h
dGljYWxseTsKLSAgICBnYm9vbGVhbiBpc19qYXZhX3NjcmlwdF9lbmFibGVkOwotICAgIGdib29s
ZWFuIGphdmFfc2NyaXB0X2Nhbl9vcGVuX3dpbmRvd3NfYXV0b21hdGljYWxseTsKLSAgICBnYm9v
bGVhbiBwbHVnaW5zX2VuYWJsZWQ7Ci0gICAgZ2Jvb2xlYW4gcHJpdmF0ZV9icm93c2luZzsKLSAg
ICBnY2hhciogdXNlcl9zdHlsZV9zaGVldF9sb2NhdGlvbjsKLSAgICBnYm9vbGVhbiBzaG91bGRf
cHJpbnRfYmFja2dyb3VuZHM7Ci0gICAgZ2Jvb2xlYW4gdGV4dF9hcmVhc19hcmVfcmVzaXphYmxl
OwotICAgIFdlYktpdEVkaXRhYmxlTGlua0JlaGF2aW91ciBlZGl0YWJsZV9saW5rX2JlaGF2aW91
cjsKLSAgICBnYm9vbGVhbiB1c2VzX3BhZ2VfY2FjaGU7Ci0gICAgZ2Jvb2xlYW4gc2hyaW5rX3N0
YW5kYWxvbmVfaW1hZ2VzX3RvX2ZpdDsKLSAgICBnYm9vbGVhbiBzaG93X3VyaXNfaW5fdG9vbF90
aXBzOwotICAgIGdjaGFyKiBmdHBfZGlyZWN0b3J5X3RlbXBsYXRlX3BhdGg7Ci0gICAgZ2Jvb2xl
YW4gZm9yY2VfZnRwX2RpcmVjdG9yeV9saXN0aW5nczsKLSAgICBnYm9vbGVhbiBkZXZlbG9wZXJf
ZXh0cmFzX2VuYWJsZWQ7Ci0KLQotICAgIFdlYktpdFNldHRpbmdzUHJpdmF0ZSAqcHJpdmF0ZV9k
YXRhOwotfTsKLQotR1R5cGUKLXdlYmtpdF93ZWJfc2V0dGluZ3NfZ2V0X3R5cGUgKHZvaWQpOwot
Ci1XZWJLaXRTZXR0aW5ncyoKLXdlYmtpdF93ZWJfc2V0dGluZ3NfY29weSAoV2ViS2l0U2V0dGlu
Z3MqIHNldHRpbmcpOwotCi12b2lkCi13ZWJraXRfd2ViX3NldHRpbmdzX2ZyZWUgKFdlYktpdFNl
dHRpbmdzKiBzZXR0aW5nKTsKLQotV2ViS2l0U2V0dGluZ3MqCi13ZWJraXRfd2ViX3NldHRpbmdz
X2dldF9nbG9iYWwgKHZvaWQpOwotCi12b2lkCi13ZWJraXRfd2ViX3NldHRpbmdzX3NldF9nbG9i
YWwgKFdlYktpdFNldHRpbmdzKiBzZXR0aW5nKTsKLQotdm9pZAotd2Via2l0X3dlYl9zZXR0aW5n
c19zZXRfZm9udF9mYW1pbHkoV2ViS2l0U2V0dGluZ3MqLCBXZWJLaXRGb250RmFtaWx5IGZhbWls
eSwgZ2NoYXIgKmZhbWlseV9uYW1lKTsKLQotY29uc3QgZ2NoYXIqCi13ZWJraXRfd2ViX3NldHRp
bmdzX2dldF9mb250X2ZhbWlseShXZWJLaXRTZXR0aW5ncyosIFdlYktpdEZvbnRGYW1pbHkgZmFt
aWx5KTsKLQotdm9pZAotd2Via2l0X3dlYl9zZXR0aW5nc19zZXRfdXNlcl9zdHlsZV9zaGVldF9s
b2NhdGlvbihXZWJLaXRTZXR0aW5ncyosIGdjaGFyKik7Ci0KLXZvaWQKLXdlYmtpdF9zZXRfZnRw
X2RpcmVjdG9yeV90ZW1wbGF0ZV9wYXRoKFdlYktpdFNldHRpbmdzKiwgZ2NoYXIqKTsKLQotCi1H
X0VORF9ERUNMUwotCi0KLSNlbmRpZgpJbmRleDogV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9D
aHJvbWVDbGllbnRHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9ndGsvV2ViQ29yZVN1cHBv
cnQvQ2hyb21lQ2xpZW50R3RrLmNwcAkocmV2aXNpb24gMjgyNTEpCisrKyBXZWJLaXQvZ3RrL1dl
YkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDE1
ICszNSwxNSBAQAogI2luY2x1ZGUgIkNTdHJpbmcuaCIKICNpbmNsdWRlICJIaXRUZXN0UmVzdWx0
LmgiCiAjaW5jbHVkZSAiS1VSTC5oIgotI2luY2x1ZGUgIndlYmtpdGd0a3BhZ2UuaCIKLSNpbmNs
dWRlICJ3ZWJraXRndGtwcml2YXRlLmgiCisjaW5jbHVkZSAid2Via2l0d2Vidmlldy5oIgorI2lu
Y2x1ZGUgIndlYmtpdHByaXZhdGUuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2lu
Y2x1ZGUgIldpbmRvd0ZlYXR1cmVzLmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBu
YW1lc3BhY2UgV2ViS2l0IHsKLUNocm9tZUNsaWVudDo6Q2hyb21lQ2xpZW50KFdlYktpdFBhZ2Uq
IHBhZ2UpCitDaHJvbWVDbGllbnQ6OkNocm9tZUNsaWVudChXZWJLaXRXZWJWaWV3KiBwYWdlKQog
ICAgIDogbV93ZWJQYWdlKHBhZ2UpCiB7CiB9CkBAIC05MywxMiArOTMsMTIgQEAgUGFnZSogQ2hy
b21lQ2xpZW50OjpjcmVhdGVXaW5kb3coRnJhbWUqLAogICAgICAgICByZXR1cm4gMDsKICAgICB9
IGVsc2UgewogICAgICAgICAvKiBUT0RPOiBGcmFtZUxvYWRSZXF1ZXN0IGlzIG5vdCB1c2VkICov
Ci0gICAgICAgIFdlYktpdFBhZ2UqIHBhZ2UgPSBXRUJLSVRfUEFHRV9HRVRfQ0xBU1MobV93ZWJQ
YWdlKS0+Y3JlYXRlX3BhZ2UobV93ZWJQYWdlKTsKKyAgICAgICAgV2ViS2l0V2ViVmlldyogcGFn
ZSA9IFdFQktJVF9XRUJfVklFV19HRVRfQ0xBU1MobV93ZWJQYWdlKS0+Y3JlYXRlX3dlYl92aWV3
KG1fd2ViUGFnZSk7CiAgICAgICAgIGlmICghcGFnZSkKICAgICAgICAgICAgIHJldHVybiAwOwog
Ci0gICAgICAgIFdlYktpdFBhZ2VQcml2YXRlICpwcml2YXRlRGF0YSA9IFdFQktJVF9QQUdFX0dF
VF9QUklWQVRFKFdFQktJVF9QQUdFKHBhZ2UpKTsKLSAgICAgICAgcmV0dXJuIHByaXZhdGVEYXRh
LT5wYWdlOworICAgICAgICBXZWJLaXRXZWJWaWV3UHJpdmF0ZSAqcHJpdmF0ZURhdGEgPSBXRUJL
SVRfV0VCX1ZJRVdfR0VUX1BSSVZBVEUoV0VCS0lUX1dFQl9WSUVXKHBhZ2UpKTsKKyAgICAgICAg
cmV0dXJuIHByaXZhdGVEYXRhLT5jb3JlUGFnZTsKICAgICB9CiB9CiAKSW5kZXg6IFdlYktpdC9n
dGsvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0
L2d0ay9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRHdGsuaAkocmV2aXNpb24gMjgyNTEpCisr
KyBXZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0ay5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zMiwxNCArMzIsMTQgQEAKICNpbmNsdWRlICJDaHJvbWVDbGllbnQuaCIKICNpbmNs
dWRlICJLVVJMLmgiCiAKLXR5cGVkZWYgc3RydWN0IF9XZWJLaXRQYWdlIFdlYktpdFBhZ2U7Cit0
eXBlZGVmIHN0cnVjdCBfV2ViS2l0V2ViVmlldyBXZWJLaXRXZWJWaWV3OwogCiBuYW1lc3BhY2Ug
V2ViS2l0IHsKIAogICAgIGNsYXNzIENocm9tZUNsaWVudCA6IHB1YmxpYyBXZWJDb3JlOjpDaHJv
bWVDbGllbnQgewogICAgIHB1YmxpYzoKLSAgICAgICAgQ2hyb21lQ2xpZW50KFdlYktpdFBhZ2Uq
KTsKLSAgICAgICAgV2ViS2l0UGFnZSogd2ViUGFnZSgpIGNvbnN0IHsgcmV0dXJuIG1fd2ViUGFn
ZTsgfQorICAgICAgICBDaHJvbWVDbGllbnQoV2ViS2l0V2ViVmlldyopOworICAgICAgICBXZWJL
aXRXZWJWaWV3KiB3ZWJQYWdlKCkgY29uc3QgeyByZXR1cm4gbV93ZWJQYWdlOyB9CiAKICAgICAg
ICAgdmlydHVhbCB2b2lkIGNocm9tZURlc3Ryb3llZCgpOwogCkBAIC0xMDYsNyArMTA2LDcgQEAg
bmFtZXNwYWNlIFdlYktpdCB7CiAgICAgICAgIHZpcnR1YWwgdW5zaWduZWQgbG9uZyBsb25nIHJl
cXVlc3RRdW90YUluY3JlYXNlRm9yRGF0YWJhc2VPcGVyYXRpb24oV2ViQ29yZTo6RnJhbWUqLCBj
b25zdCBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGEmLCBjb25zdCBXZWJDb3JlOjpTdHJpbmcm
LCB1bnNpZ25lZCBsb25nIGxvbmcpOwogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgV2ViS2l0UGFn
ZSogbV93ZWJQYWdlOworICAgICAgICBXZWJLaXRXZWJWaWV3KiBtX3dlYlBhZ2U7CiAgICAgICAg
IFdlYkNvcmU6OktVUkwgbV9ob3ZlcmVkTGlua1VSTDsKICAgICB9OwogfQpJbmRleDogV2ViS2l0
L2d0ay9XZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRHdGsuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50R3RrLmNwcAkocmV2aXNpb24gMjgy
NTEpCisrKyBXZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudEd0ay5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcgQEAKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5o
IgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQbGF0Zm9ybUtleWJvYXJkRXZlbnQuaCIK
LSNpbmNsdWRlICJ3ZWJraXRndGtwcml2YXRlLmgiCisjaW5jbHVkZSAid2Via2l0cHJpdmF0ZS5o
IgogCiAjaW5jbHVkZSA8c3RkaW8uaD4KIApAQCAtMTQ2LDcgKzE0Niw3IEBAIHZvaWQgRWRpdG9y
Q2xpZW50OjpkaWRTZXRTZWxlY3Rpb25UeXBlc0YKIAogYm9vbCBFZGl0b3JDbGllbnQ6OmlzRWRp
dGFibGUoKQogewotICAgIHJldHVybiB3ZWJraXRfcGFnZV9nZXRfZWRpdGFibGUobV9wYWdlKTsK
KyAgICByZXR1cm4gd2Via2l0X3dlYl92aWV3X2dldF9lZGl0YWJsZShtX3BhZ2UpOwogfQogCiB2
b2lkIEVkaXRvckNsaWVudDo6cmVnaXN0ZXJDb21tYW5kRm9yVW5kbyhXVEY6OlBhc3NSZWZQdHI8
V2ViQ29yZTo6RWRpdENvbW1hbmQ+KQpAQCAtMzYwLDcgKzM2MCw3IEBAIHZvaWQgRWRpdG9yQ2xp
ZW50OjpoYW5kbGVJbnB1dE1ldGhvZEtleXAKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi1F
ZGl0b3JDbGllbnQ6OkVkaXRvckNsaWVudChXZWJLaXRQYWdlKiBwYWdlKQorRWRpdG9yQ2xpZW50
OjpFZGl0b3JDbGllbnQoV2ViS2l0V2ViVmlldyogcGFnZSkKICAgICA6IG1fcGFnZShwYWdlKQog
ewogfQpJbmRleDogV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRHdGsuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudEd0ay5o
CShyZXZpc2lvbiAyODI1MSkKKysrIFdlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xp
ZW50R3RrLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAKIAogI2luY2x1ZGUgPHd0
Zi9Gb3J3YXJkLmg+CiAKLXR5cGVkZWYgc3RydWN0IF9XZWJLaXRQYWdlIFdlYktpdFBhZ2U7Cit0
eXBlZGVmIHN0cnVjdCBfV2ViS2l0V2ViVmlldyBXZWJLaXRXZWJWaWV3OwogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAgICAgY2xhc3MgUGFnZTsKQEAgLTQ0LDcgKzQ0LDcgQEAgbmFtZXNwYWNlIFdl
YktpdCB7CiAKICAgICBjbGFzcyBFZGl0b3JDbGllbnQgOiBwdWJsaWMgV2ViQ29yZTo6RWRpdG9y
Q2xpZW50IHsKICAgICBwdWJsaWM6Ci0gICAgICAgIEVkaXRvckNsaWVudChXZWJLaXRQYWdlKik7
CisgICAgICAgIEVkaXRvckNsaWVudChXZWJLaXRXZWJWaWV3Kik7CiAKICAgICAgICAgLy8gZnJv
bSBFZGl0b3JDbGllbnQKICAgICAgICAgdmlydHVhbCB2b2lkIHBhZ2VEZXN0cm95ZWQoKTsKQEAg
LTEwOSw3ICsxMDksNyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKICAgICAgICAgdmlydHVhbCB2b2lk
IHNldElucHV0TWV0aG9kU3RhdGUoYm9vbCBlbmFibGVkKTsKIAogICAgIHByaXZhdGU6Ci0gICAg
ICAgIFdlYktpdFBhZ2UqIG1fcGFnZTsKKyAgICAgICAgV2ViS2l0V2ViVmlldyogbV9wYWdlOwog
ICAgIH07CiB9CiAKSW5kZXg6IFdlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJD
bGllbnRHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJh
bWVMb2FkZXJDbGllbnRHdGsuY3BwCShyZXZpc2lvbiAyODI1MSkKKysrIFdlYktpdC9ndGsvV2Vi
Q29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
MSw5ICs1MSw5IEBACiAjaW5jbHVkZSAia2pzX2JpbmRpbmcuaCIKICNpbmNsdWRlICJranNfcHJv
eHkuaCIKICNpbmNsdWRlICJranNfd2luZG93LmgiCi0jaW5jbHVkZSAid2Via2l0Z3RrcGFnZS5o
IgotI2luY2x1ZGUgIndlYmtpdGd0a2ZyYW1lLmgiCi0jaW5jbHVkZSAid2Via2l0Z3RrcHJpdmF0
ZS5oIgorI2luY2x1ZGUgIndlYmtpdHdlYnZpZXcuaCIKKyNpbmNsdWRlICJ3ZWJraXR3ZWJmcmFt
ZS5oIgorI2luY2x1ZGUgIndlYmtpdHByaXZhdGUuaCIKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0FQSUNhc3QuaD4KICNpbmNsdWRlIDxzdGRpby5oPgpAQCAtNjUsNyArNjUsNyBAQCB1c2lu
ZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLUZyYW1lTG9hZGVy
Q2xpZW50OjpGcmFtZUxvYWRlckNsaWVudChXZWJLaXRGcmFtZSogZnJhbWUpCitGcmFtZUxvYWRl
ckNsaWVudDo6RnJhbWVMb2FkZXJDbGllbnQoV2ViS2l0V2ViRnJhbWUqIGZyYW1lKQogICAgIDog
bV9mcmFtZShmcmFtZSkKICAgICAsIG1fdXNlckFnZW50KCIiKQogewpAQCAtMTk5LDEzICsxOTks
MTMgQEAgdm9pZCBGcmFtZUxvYWRlckNsaWVudDo6YXNzaWduSWRlbnRpZmllcgogCiB2b2lkIEZy
YW1lTG9hZGVyQ2xpZW50Ojpwb3N0UHJvZ3Jlc3NTdGFydGVkTm90aWZpY2F0aW9uKCkKIHsKLSAg
ICBXZWJLaXRQYWdlKiBwYWdlID0gZ2V0UGFnZUZyb21GcmFtZShtX2ZyYW1lKTsKKyAgICBXZWJL
aXRXZWJWaWV3KiBwYWdlID0gZ2V0Vmlld0Zyb21GcmFtZShtX2ZyYW1lKTsKICAgICBnX3NpZ25h
bF9lbWl0X2J5X25hbWUocGFnZSwgImxvYWRfc3RhcnRlZCIsIG1fZnJhbWUpOwogfQogCiB2b2lk
IEZyYW1lTG9hZGVyQ2xpZW50Ojpwb3N0UHJvZ3Jlc3NFc3RpbWF0ZUNoYW5nZWROb3RpZmljYXRp
b24oKQogewotICAgIFdlYktpdFBhZ2UqIGtpdFBhZ2UgPSBnZXRQYWdlRnJvbUZyYW1lKG1fZnJh
bWUpOworICAgIFdlYktpdFdlYlZpZXcqIGtpdFBhZ2UgPSBnZXRWaWV3RnJvbUZyYW1lKG1fZnJh
bWUpOwogICAgIFBhZ2UqIGNvcmVQYWdlID0gY29yZShraXRQYWdlKTsKIAogICAgIGdfc2lnbmFs
X2VtaXRfYnlfbmFtZShraXRQYWdlLCAibG9hZF9wcm9ncmVzc19jaGFuZ2VkIiwgbHJvdW5kKGNv
cmVQYWdlLT5wcm9ncmVzcygpLT5lc3RpbWF0ZWRQcm9ncmVzcygpKjEwMCkpOwpAQCAtMjEzLDcg
KzIxMyw3IEBAIHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OnBvc3RQcm9ncmVzc0VzdGkKIAogdm9p
ZCBGcmFtZUxvYWRlckNsaWVudDo6cG9zdFByb2dyZXNzRmluaXNoZWROb3RpZmljYXRpb24oKQog
ewotICAgIFdlYktpdFBhZ2UqIHBhZ2UgPSBnZXRQYWdlRnJvbUZyYW1lKG1fZnJhbWUpOworICAg
IFdlYktpdFdlYlZpZXcqIHBhZ2UgPSBnZXRWaWV3RnJvbUZyYW1lKG1fZnJhbWUpOwogCiAgICAg
Z19zaWduYWxfZW1pdF9ieV9uYW1lKHBhZ2UsICJsb2FkX2ZpbmlzaGVkIiwgbV9mcmFtZSk7CiB9
CkBAIC0yNTQsNyArMjU0LDcgQEAgdm9pZCBGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEZWNp
ZGVQbwogICAgIGlmICghcG9saWN5RnVuY3Rpb24pCiAgICAgICAgIHJldHVybjsKIAotICAgIFdl
YktpdFBhZ2UqIHBhZ2UgPSBnZXRQYWdlRnJvbUZyYW1lKG1fZnJhbWUpOworICAgIFdlYktpdFdl
YlZpZXcqIHBhZ2UgPSBnZXRWaWV3RnJvbUZyYW1lKG1fZnJhbWUpOwogICAgIFdlYktpdE5ldHdv
cmtSZXF1ZXN0KiByZXF1ZXN0ID0gd2Via2l0X25ldHdvcmtfcmVxdWVzdF9uZXcocmVzb3VyY2VS
ZXF1ZXN0LnVybCgpLnVybCgpLnV0ZjgoKS5kYXRhKCkpOwogICAgIFdlYktpdE5hdmlnYXRpb25S
ZXNwb25zZSByZXNwb25zZTsKIApAQCAtMjgxLDggKzI4MSw4IEBAIFBhc3NSZWZQdHI8RnJhbWU+
IEZyYW1lTG9hZGVyQ2xpZW50OjpjcmUKIHsKICAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZSh3
ZWJGcmFtZSgpKTsKIAotICAgIEFTU0VSVChjb3JlKGdldFBhZ2VGcm9tRnJhbWUod2ViRnJhbWUo
KSkpID09IGNvcmVGcmFtZS0+cGFnZSgpKTsKLSAgICBXZWJLaXRGcmFtZSogZ3RrRnJhbWUgPSBX
RUJLSVRfRlJBTUUod2Via2l0X2ZyYW1lX2luaXRfd2l0aF9wYWdlKGdldFBhZ2VGcm9tRnJhbWUo
d2ViRnJhbWUoKSksIG93bmVyRWxlbWVudCkpOworICAgIEFTU0VSVChjb3JlKGdldFZpZXdGcm9t
RnJhbWUod2ViRnJhbWUoKSkpID09IGNvcmVGcmFtZS0+cGFnZSgpKTsKKyAgICBXZWJLaXRXZWJG
cmFtZSogZ3RrRnJhbWUgPSBXRUJLSVRfV0VCX0ZSQU1FKHdlYmtpdF93ZWJfZnJhbWVfaW5pdF93
aXRoX3dlYl92aWV3KGdldFZpZXdGcm9tRnJhbWUod2ViRnJhbWUoKSksIG93bmVyRWxlbWVudCkp
OwogICAgIFJlZlB0cjxGcmFtZT4gY2hpbGRGcmFtZShhZG9wdFJlZihjb3JlKGd0a0ZyYW1lKSkp
OwogCiAgICAgY29yZUZyYW1lLT50cmVlKCktPmFwcGVuZENoaWxkKGNoaWxkRnJhbWUpOwpAQCAt
MzY2LDcgKzM2Niw3IEBAIHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OndpbmRvd09iamVjdENsZWEK
ICAgICBKU09iamVjdFJlZiB3aW5kb3dPYmplY3QgPSB0b1JlZihLSlM6OldpbmRvdzo6cmV0cmll
dmUoY29yZUZyYW1lKS0+Z2V0T2JqZWN0KCkpOwogICAgIEFTU0VSVCh3aW5kb3dPYmplY3QpOwog
Ci0gICAgV2ViS2l0UGFnZSogcGFnZSA9IGdldFBhZ2VGcm9tRnJhbWUobV9mcmFtZSk7CisgICAg
V2ViS2l0V2ViVmlldyogcGFnZSA9IGdldFZpZXdGcm9tRnJhbWUobV9mcmFtZSk7CiAgICAgZ19z
aWduYWxfZW1pdF9ieV9uYW1lKHBhZ2UsICJ3aW5kb3dfb2JqZWN0X2NsZWFyZWQiLCBtX2ZyYW1l
LCBjb250ZXh0LCB3aW5kb3dPYmplY3QpOwogCiAgICAgLy8gVE9ETzogUmUtYXR0YWNoIGRlYnVn
IGNsaWVudHMgaWYgcHJlc2VudC4KQEAgLTQ0Nyw3ICs0NDcsNyBAQCB2b2lkIEZyYW1lTG9hZGVy
Q2xpZW50OjpkaXNwYXRjaFdpbGxDbG9zCiAKIHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3Bh
dGNoRGlkUmVjZWl2ZUljb24oKQogewotICAgIFdlYktpdFBhZ2UqIHBhZ2UgPSBnZXRQYWdlRnJv
bUZyYW1lKG1fZnJhbWUpOworICAgIFdlYktpdFdlYlZpZXcqIHBhZ2UgPSBnZXRWaWV3RnJvbUZy
YW1lKG1fZnJhbWUpOwogCiAgICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKHBhZ2UsICJpY29uX2xv
YWRlZCIsIG1fZnJhbWUpOwogfQpAQCAtNTA3LDEzICs1MDcsMTMgQEAgdm9pZCBGcmFtZUxvYWRl
ckNsaWVudDo6cHJlcGFyZUZvckRhdGFTbwogCiB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50OjpzZXRU
aXRsZShjb25zdCBTdHJpbmcmIHRpdGxlLCBjb25zdCBLVVJMJiB1cmwpCiB7Ci0gICAgV2ViS2l0
UGFnZSogcGFnZSA9IGdldFBhZ2VGcm9tRnJhbWUobV9mcmFtZSk7CisgICAgV2ViS2l0V2ViVmll
dyogcGFnZSA9IGdldFZpZXdGcm9tRnJhbWUobV9mcmFtZSk7CiAKICAgICBDU3RyaW5nIHRpdGxl
U3RyaW5nID0gdGl0bGUudXRmOCgpOwogICAgIERlcHJlY2F0ZWRDU3RyaW5nIHVybFN0cmluZyA9
IHVybC5wcmV0dHlVUkwoKS51dGY4KCk7CiAgICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKG1fZnJh
bWUsICJ0aXRsZV9jaGFuZ2VkIiwgdGl0bGVTdHJpbmcuZGF0YSgpLCB1cmxTdHJpbmcuZGF0YSgp
KTsKIAotICAgIGlmIChtX2ZyYW1lID09IHdlYmtpdF9wYWdlX2dldF9tYWluX2ZyYW1lKHBhZ2Up
KQorICAgIGlmIChtX2ZyYW1lID09IHdlYmtpdF93ZWJfdmlld19nZXRfbWFpbl9mcmFtZShwYWdl
KSkKICAgICAgICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKHBhZ2UsICJ0aXRsZV9jaGFuZ2VkIiwg
dGl0bGVTdHJpbmcuZGF0YSgpLCB1cmxTdHJpbmcuZGF0YSgpKTsKIH0KIApJbmRleDogV2ViS2l0
L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuaAkocmV2aXNp
b24gMjgyNTEpCisrKyBXZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50
R3RrLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDE3ICszMiwxNyBAQAogI2luY2x1ZGUgIkZyYW1l
TG9hZGVyQ2xpZW50LmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VSZXNwb25zZS5oIgogCi10eXBlZGVm
IHN0cnVjdCBfV2ViS2l0RnJhbWUgV2ViS2l0RnJhbWU7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0
V2ViRnJhbWUgV2ViS2l0V2ViRnJhbWU7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCiAgICAgY2xh
c3MgRnJhbWVMb2FkZXJDbGllbnQgOiBwdWJsaWMgV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnQg
ewogICAgIHB1YmxpYzoKLSAgICAgICAgRnJhbWVMb2FkZXJDbGllbnQoV2ViS2l0RnJhbWUqKTsK
KyAgICAgICAgRnJhbWVMb2FkZXJDbGllbnQoV2ViS2l0V2ViRnJhbWUqKTsKICAgICAgICAgdmly
dHVhbCB+RnJhbWVMb2FkZXJDbGllbnQoKSB7IH0KICAgICAgICAgdmlydHVhbCB2b2lkIGZyYW1l
TG9hZGVyRGVzdHJveWVkKCk7CiAKLSAgICAgICAgV2ViS2l0RnJhbWUqICB3ZWJGcmFtZSgpIGNv
bnN0IHsgcmV0dXJuIG1fZnJhbWU7IH0KKyAgICAgICAgV2ViS2l0V2ViRnJhbWUqICB3ZWJGcmFt
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZnJhbWU7IH0KIAogICAgICAgICB2aXJ0dWFsIGJvb2wgaGFz
V2ViVmlldygpIGNvbnN0OwogICAgICAgICB2aXJ0dWFsIGJvb2wgaGFzRnJhbWVWaWV3KCkgY29u
c3Q7CkBAIC0xNzgsNyArMTc4LDcgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAgICAgICAgIHZpcnR1
YWwgYm9vbCBjYW5DYWNoZVBhZ2UoKSBjb25zdDsKICAgICAgICAgdmlydHVhbCB2b2lkIGRvd25s
b2FkKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlKiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1
ZXN0JiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgV2ViQ29yZTo6UmVz
b3VyY2VSZXNwb25zZSYpOwogICAgIHByaXZhdGU6Ci0gICAgICAgIFdlYktpdEZyYW1lKiBtX2Zy
YW1lOworICAgICAgICBXZWJLaXRXZWJGcmFtZSogbV9mcmFtZTsKICAgICAgICAgV2ViQ29yZTo6
UmVzb3VyY2VSZXNwb25zZSBtX3Jlc3BvbnNlOwogICAgICAgICBXZWJDb3JlOjpTdHJpbmcgbV91
c2VyQWdlbnQ7CiAgICAgfTsKSW5kZXg6IFdlYktpdC9ndGsvV2ViVmlldy9oZWFkZXJzLnByaQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJLaXQvZ3RrL1dlYlZpZXcvaGVhZGVycy5wcmkJKHJldmlzaW9uIDAp
CisrKyBXZWJLaXQvZ3RrL1dlYlZpZXcvaGVhZGVycy5wcmkJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsNyBAQAorV0VCS0lUX0FQSV9IRUFERVJTID0gJCRQV0Qvd2Via2l0ZGVmaW5lcy5oIFwKKyAg
ICAgICAgICAgICAgICAgICAgICQkUFdEL3dlYmtpdHdlYmZyYW1lLmggXAorICAgICAgICAgICAg
ICAgICAgICAgJCRQV0Qvd2Via2l0ZnJhbWVkYXRhLmggXAorICAgICAgICAgICAgICAgICAgICAg
JCRQV0Qvd2Via2l0Z2xvYmFsLmggXAorICAgICAgICAgICAgICAgICAgICAgJCRQV0Qvd2Via2l0
bmV0d29ya3JlcXVlc3QuaCBcCisgICAgICAgICAgICAgICAgICAgICAkJFBXRC93ZWJraXR3ZWJ2
aWV3LmggXAorICAgICAgICAgICAgICAgICAgICAgJCRQV0Qvd2Via2l0c2V0dGluZ3MuaApJbmRl
eDogV2ViS2l0L2d0ay9XZWJWaWV3L3dlYmtpdC1tYXJzaGFsLmxpc3QKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViS2l0L2d0ay9XZWJWaWV3L3dlYmtpdC1tYXJzaGFsLmxpc3QJKHJldmlzaW9uIDApCisrKyBX
ZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0LW1hcnNoYWwubGlzdAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSw5IEBACitWT0lEOlNUUklORyxTVFJJTkcKK1ZPSUQ6T0JKRUNULEJPT0xFQU4KK1ZPSUQ6
T0JKRUNULE9CSkVDVAorVk9JRDpPQkpFQ1QsUE9JTlRFUixQT0lOVEVSCitCT09MRUFOOlNUUklO
RyxJTlQsU1RSSU5HCitCT09MRUFOOk9CSkVDVCxTVFJJTkcKK0JPT0xFQU46T0JKRUNULFNUUklO
RyxCT09MRUFOCitCT09MRUFOOk9CSkVDVCxTVFJJTkcsU1RSSU5HLFNUUklORworSU5UOk9CSkVD
VCxPQkpFQ1QKSW5kZXg6IFdlYktpdC9ndGsvV2ViVmlldy93ZWJraXRkZWZpbmVzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViS2l0L2d0ay9XZWJWaWV3L3dlYmtpdGRlZmluZXMuaAkocmV2aXNpb24gMCkK
KysrIFdlYktpdC9ndGsvV2ViVmlldy93ZWJraXRkZWZpbmVzLmgJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsNjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIg
RnJleXRoZXIKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2Yg
QXBwbGUsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
CisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLiAKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICog
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaWZuZGVmIFdFQktJVF9ERUZJTkVTX0gKKyNkZWZpbmUgV0VCS0lUX0RFRklORVNfSAorCisj
aW5jbHVkZSA8Z2xpYi5oPgorCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0V2ViRnJhbWUgV2ViS2l0
V2ViRnJhbWU7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0V2ViRnJhbWVDbGFzcyBXZWJLaXRXZWJG
cmFtZUNsYXNzOworCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0V2ViRnJhbWVEYXRhIFdlYktpdFdl
YkZyYW1lRGF0YTsKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFdlYlZpZXcgV2ViS2l0V2ViVmll
dzsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRXZWJWaWV3Q2xhc3MgV2ViS2l0V2ViVmlld0NsYXNz
OworCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0TmV0d29ya1JlcXVlc3QgV2ViS2l0TmV0d29ya1Jl
cXVlc3Q7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0TmV0d29ya1JlcXVlc3RDbGFzcyBXZWJLaXRO
ZXR3b3JrUmVxdWVzdENsYXNzOworCit0eXBlZGVmIHN0cnVjdCBPcGFxdWVKU0NvbnRleHQqIEpT
R2xvYmFsQ29udGV4dFJlZjsKK3R5cGVkZWYgc3RydWN0IE9wYXF1ZUpTVmFsdWUqIEpTT2JqZWN0
UmVmOworCisjaWZkZWYgR19PU19XSU4zMgorICAgICNpZmRlZiBCVUlMRElOR19XRUJLSVQKKyAg
ICAgICAgI2RlZmluZSBXRUJLSVRfQVBJIF9fZGVjbHNwZWMoZGxsZXhwb3J0KQorICAgICNlbHNl
CisgICAgICAgICNkZWZpbmUgV0VCS0lUX0FQSSBfX2RlY2xzcGVjKGRsbGltcG9ydCkKKyAgICAj
ZW5kaWYKKyNlbHNlCisgICAgI2RlZmluZSBXRUJLSVRfQVBJIF9fYXR0cmlidXRlX18oKHZpc2li
aWxpdHkoImRlZmF1bHQiKSkpCisjZW5kaWYKKworI2lmbmRlZiBXRUJLSVRfQVBJCisjZGVmaW5l
IFdFQktJVF9BUEkKKyNlbmRpZgorCisjZW5kaWYKSW5kZXg6IFdlYktpdC9ndGsvV2ViVmlldy93
ZWJraXRnbG9iYWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9ndGsvV2ViVmlldy93ZWJraXRn
bG9iYWwuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViS2l0L2d0ay9XZWJWaWV3L3dlYmtpdGdsb2Jh
bC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAorICog
My4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFt
ZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAq
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
d2Via2l0Z2xvYmFsLmgiCisKKyNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiRGF0YWJh
c2VUcmFja2VyLmgiCisKKyNpbmNsdWRlIDxnbGliLmg+CisKK2V4dGVybiAiQyIgewordm9pZCB3
ZWJraXRfaW5pdCh2b2lkKQoreworICAgIFdlYkNvcmU6OkluaXRpYWxpemVMb2dnaW5nQ2hhbm5l
bHNJZk5lY2Vzc2FyeSgpOworCisgICAgV2ViQ29yZTo6aW5pdGlhbGl6ZVRocmVhZGluZygpOwor
CisjaWYgRU5BQkxFKERBVEFCQVNFKQorICAgIC8vIEZJWE1FOiBJdCBzaG91bGQgYmUgcG9zc2li
bGUgZm9yIGNsaWVudCBhcHBsaWNhdGlvbnMgdG8gb3ZlcnJpZGUgdGhpcyBkZWZhdWx0IGxvY2F0
aW9uCisgICAgZ2NoYXIqIGRhdGFiYXNlRGlyZWN0b3J5ID0gZ19idWlsZF9maWxlbmFtZShnX2dl
dF91c2VyX2RhdGFfZGlyKCksICJ3ZWJraXQiLCAiZGF0YWJhc2VzIiwgTlVMTCk7CisgICAgV2Vi
Q29yZTo6RGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCkuc2V0RGF0YWJhc2VQYXRoKGRhdGFiYXNl
RGlyZWN0b3J5KTsKKyAgICBnX2ZyZWUoZGF0YWJhc2VEaXJlY3RvcnkpOworI2VuZGlmCit9Cit9
CkluZGV4OiBXZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0Z2xvYmFsLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViS2l0L2d0ay9XZWJWaWV3L3dlYmtpdGdsb2JhbC5oCShyZXZpc2lvbiAwKQorKysgV2ViS2l0
L2d0ay9XZWJWaWV3L3dlYmtpdGdsb2JhbC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQxIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLiAKKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLiAKKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlLCBJbmMu
ICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZy
b20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4gCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENP
TlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBX
RUJLSVRfR0xPQkFMX0gKKyNkZWZpbmUgV0VCS0lUX0dMT0JBTF9ICisKKyNpbmNsdWRlICJ3ZWJr
aXRkZWZpbmVzLmgiCisKK0dfQkVHSU5fREVDTFMKKworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRf
aW5pdCAodm9pZCk7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZgpJbmRleDogV2ViS2l0L2d0ay9X
ZWJWaWV3L3dlYmtpdG5ldHdvcmtyZXF1ZXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvZ3Rr
L1dlYlZpZXcvd2Via2l0bmV0d29ya3JlcXVlc3QuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViS2l0
L2d0ay9XZWJWaWV3L3dlYmtpdG5ldHdvcmtyZXF1ZXN0LmNwcAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSw5NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBG
cmV5dGhlcgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoK
KyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBB
cHBsZSwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQK
KyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uIAorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
QU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
CisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIndlYmtpdG5ldHdvcmtyZXF1ZXN0Lmgi
CisjaW5jbHVkZSAid2Via2l0cHJpdmF0ZS5oIgorCit1c2luZyBuYW1lc3BhY2UgV2ViS2l0Owor
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK2V4dGVybiAiQyIgeworCitHX0RFRklORV9UWVBF
KFdlYktpdE5ldHdvcmtSZXF1ZXN0LCB3ZWJraXRfbmV0d29ya19yZXF1ZXN0LCBHX1RZUEVfT0JK
RUNUKTsKKworc3RhdGljIHZvaWQgd2Via2l0X25ldHdvcmtfcmVxdWVzdF9maW5hbGl6ZShHT2Jq
ZWN0KiBvYmplY3QpCit7CisgICAgV2ViS2l0TmV0d29ya1JlcXVlc3RQcml2YXRlKiByZXF1ZXN0
UHJpdmF0ZSA9IFdFQktJVF9ORVRXT1JLX1JFUVVFU1RfR0VUX1BSSVZBVEUob2JqZWN0KTsKKwor
ICAgIGdfZnJlZShyZXF1ZXN0UHJpdmF0ZS0+dXJpKTsKKworICAgIEdfT0JKRUNUX0NMQVNTKHdl
YmtpdF9uZXR3b3JrX3JlcXVlc3RfcGFyZW50X2NsYXNzKS0+ZmluYWxpemUob2JqZWN0KTsKK30K
Kworc3RhdGljIHZvaWQgd2Via2l0X25ldHdvcmtfcmVxdWVzdF9jbGFzc19pbml0KFdlYktpdE5l
dHdvcmtSZXF1ZXN0Q2xhc3MqIHJlcXVlc3RDbGFzcykKK3sKKyAgICBnX3R5cGVfY2xhc3NfYWRk
X3ByaXZhdGUocmVxdWVzdENsYXNzLCBzaXplb2YoV2ViS2l0TmV0d29ya1JlcXVlc3RQcml2YXRl
KSk7CisKKyAgICBHX09CSkVDVF9DTEFTUyhyZXF1ZXN0Q2xhc3MpLT5maW5hbGl6ZSA9IHdlYmtp
dF9uZXR3b3JrX3JlcXVlc3RfZmluYWxpemU7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9uZXR3
b3JrX3JlcXVlc3RfaW5pdChXZWJLaXROZXR3b3JrUmVxdWVzdCogcmVxdWVzdCkKK3sKK30KKwor
V2ViS2l0TmV0d29ya1JlcXVlc3QqIHdlYmtpdF9uZXR3b3JrX3JlcXVlc3RfbmV3KGNvbnN0IGdj
aGFyKiB1cmkpCit7CisgICAgV2ViS2l0TmV0d29ya1JlcXVlc3QqIHJlcXVlc3QgPSBXRUJLSVRf
TkVUV09SS19SRVFVRVNUKGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9ORVRXT1JLX1JFUVVFU1Qs
IE5VTEwpKTsKKyAgICBXZWJLaXROZXR3b3JrUmVxdWVzdFByaXZhdGUqIHJlcXVlc3RQcml2YXRl
ID0gV0VCS0lUX05FVFdPUktfUkVRVUVTVF9HRVRfUFJJVkFURShyZXF1ZXN0KTsKKworICAgIHJl
cXVlc3RQcml2YXRlLT51cmkgPSBnX3N0cmR1cCh1cmkpOworCisgICAgcmV0dXJuIHJlcXVlc3Q7
Cit9CisKK3ZvaWQgd2Via2l0X25ldHdvcmtfcmVxdWVzdF9zZXRfdXJpKFdlYktpdE5ldHdvcmtS
ZXF1ZXN0KiByZXF1ZXN0LCBjb25zdCBnY2hhciogdXJpKQoreworICAgIFdlYktpdE5ldHdvcmtS
ZXF1ZXN0UHJpdmF0ZSogcmVxdWVzdFByaXZhdGU7CisKKyAgICBnX3JldHVybl9pZl9mYWlsKFdF
QktJVF9JU19ORVRXT1JLX1JFUVVFU1QocmVxdWVzdCkpOworCisgICAgcmVxdWVzdFByaXZhdGUg
PSBXRUJLSVRfTkVUV09SS19SRVFVRVNUX0dFVF9QUklWQVRFKHJlcXVlc3QpOworCisgICAgZ19m
cmVlKHJlcXVlc3RQcml2YXRlLT51cmkpOworICAgIHJlcXVlc3RQcml2YXRlLT51cmkgPSBnX3N0
cmR1cCh1cmkpOworfQorCitjb25zdCBnY2hhciogd2Via2l0X25ldHdvcmtfcmVxdWVzdF9nZXRf
dXJpKFdlYktpdE5ldHdvcmtSZXF1ZXN0KiByZXF1ZXN0KQoreworICAgIFdlYktpdE5ldHdvcmtS
ZXF1ZXN0UHJpdmF0ZSogcmVxdWVzdFByaXZhdGU7CisKKyAgICBnX3JldHVybl92YWxfaWZfZmFp
bChXRUJLSVRfSVNfTkVUV09SS19SRVFVRVNUKHJlcXVlc3QpLCBOVUxMKTsKKworICAgIHJlcXVl
c3RQcml2YXRlID0gV0VCS0lUX05FVFdPUktfUkVRVUVTVF9HRVRfUFJJVkFURShyZXF1ZXN0KTsK
KworICAgIHJldHVybiByZXF1ZXN0UHJpdmF0ZS0+dXJpOworfQorCit9CkluZGV4OiBXZWJLaXQv
Z3RrL1dlYlZpZXcvd2Via2l0bmV0d29ya3JlcXVlc3QuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQv
Z3RrL1dlYlZpZXcvd2Via2l0bmV0d29ya3JlcXVlc3QuaAkocmV2aXNpb24gMCkKKysrIFdlYktp
dC9ndGsvV2ViVmlldy93ZWJraXRuZXR3b3JrcmVxdWVzdC5oCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDY4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVyIEZy
ZXl0aGVyCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgor
ICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFw
cGxlLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAor
ICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4gCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBB
TkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
KyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2lmbmRlZiBXRUJLSVRfTkVUV09SS19SRVFVRVNUX0gKKyNkZWZpbmUgV0VCS0lUX05FVFdPUktf
UkVRVUVTVF9ICisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorCisjaW5jbHVkZSAid2Via2l0
ZGVmaW5lcy5oIgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX1RZUEVfTkVUV09S
S19SRVFVRVNUICAgICAgICAgICAgKHdlYmtpdF9uZXR3b3JrX3JlcXVlc3RfZ2V0X3R5cGUoKSkK
KyNkZWZpbmUgV0VCS0lUX05FVFdPUktfUkVRVUVTVChvYmopICAgICAgICAgICAgKEdfVFlQRV9D
SEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfVFlQRV9ORVRXT1JLX1JFUVVFU1QsIFdl
YktpdE5ldHdvcmtSZXF1ZXN0KSkKKyNkZWZpbmUgV0VCS0lUX05FVFdPUktfUkVRVUVTVF9DTEFT
UyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfVFlQ
RV9ORVRXT1JLX1JFUVVFU1QsIFdlYktpdE5ldHdvcmtSZXF1ZXN0Q2xhc3MpKQorI2RlZmluZSBX
RUJLSVRfSVNfTkVUV09SS19SRVFVRVNUKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RB
TkNFX1RZUEUoKG9iaiksIFdFQktJVF9UWVBFX05FVFdPUktfUkVRVUVTVCkpCisjZGVmaW5lIFdF
QktJVF9JU19ORVRXT1JLX1JFUVVFU1RfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1Nf
VFlQRSgoa2xhc3MpLCAgV0VCS0lUX1RZUEVfTkVUV09SS19SRVFVRVNUKSkKKyNkZWZpbmUgV0VC
S0lUX05FVFdPUktfUkVRVUVTVF9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRf
Q0xBU1MoKG9iaiksICBXRUJLSVRfVFlQRV9ORVRXT1JLX1JFUVVFU1QsIFdlYktpdE5ldHdvcmtS
ZXF1ZXN0Q2xhc3MpKQorCisKK3N0cnVjdCBfV2ViS2l0TmV0d29ya1JlcXVlc3QgeworICAgIEdP
YmplY3QgcGFyZW50OworfTsKKworc3RydWN0IF9XZWJLaXROZXR3b3JrUmVxdWVzdENsYXNzIHsK
KyAgICBHT2JqZWN0Q2xhc3MgcGFyZW50OworfTsKKworV0VCS0lUX0FQSSBHVHlwZQord2Via2l0
X25ldHdvcmtfcmVxdWVzdF9nZXRfdHlwZSAodm9pZCk7CisKK1dFQktJVF9BUEkgV2ViS2l0TmV0
d29ya1JlcXVlc3QqCit3ZWJraXRfbmV0d29ya19yZXF1ZXN0X25ldyAoY29uc3QgZ2NoYXIqIHVy
aSk7CisKK1dFQktJVF9BUEkgdm9pZAord2Via2l0X25ldHdvcmtfcmVxdWVzdF9zZXRfdXJpIChX
ZWJLaXROZXR3b3JrUmVxdWVzdCogcmVxdWVzdCwgY29uc3QgZ2NoYXIqIHVyaSk7CisKK1dFQktJ
VF9BUEkgY29uc3QgZ2NoYXIqCit3ZWJraXRfbmV0d29ya19yZXF1ZXN0X2dldF91cmkgKFdlYktp
dE5ldHdvcmtSZXF1ZXN0KiByZXF1ZXN0KTsKKworR19FTkRfREVDTFMKKworI2VuZGlmCkluZGV4
OiBXZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0cHJpdmF0ZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
S2l0L2d0ay9XZWJWaWV3L3dlYmtpdHByaXZhdGUuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViS2l0
L2d0ay9XZWJWaWV3L3dlYmtpdHByaXZhdGUuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDk4
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVy
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4g
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLiAKKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLiAKKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlLCBJ
bmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAg
IGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4gCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRT
IENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisg
KiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAid2Via2l0cHJpdmF0ZS5oIgorI2luY2x1ZGUgIkNo
cm9tZUNsaWVudEd0ay5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCisjaW5jbHVkZSAiRnJh
bWVMb2FkZXJDbGllbnRHdGsuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorCit1c2lu
ZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7Cit2b2lkIGFwcGx5KFdl
YktpdFNldHRpbmdzKiwgV2ViQ29yZTo6U2V0dGluZ3MqKQoreworICAgIG5vdEltcGxlbWVudGVk
KCk7Cit9CisKK1dlYktpdFNldHRpbmdzKiBjcmVhdGUoV2ViQ29yZTo6U2V0dGluZ3MqKQorewor
ICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK1dlYktpdFdlYkZyYW1l
KiBnZXRGcmFtZUZyb21WaWV3KFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCit7CisgICAgcmV0dXJu
IHdlYmtpdF93ZWJfdmlld19nZXRfbWFpbl9mcmFtZSh3ZWJWaWV3KTsKK30KKworV2ViS2l0V2Vi
VmlldyogZ2V0Vmlld0Zyb21GcmFtZShXZWJLaXRXZWJGcmFtZSogZnJhbWUpCit7CisgICAgcmV0
dXJuIHdlYmtpdF93ZWJfZnJhbWVfZ2V0X3dlYl92aWV3KGZyYW1lKTsKK30KKworV2ViQ29yZTo6
RnJhbWUqIGNvcmUoV2ViS2l0V2ViRnJhbWUqIGZyYW1lKQoreworICAgIGlmICghZnJhbWUpCisg
ICAgICAgIHJldHVybiAwOworCisgICAgV2ViS2l0V2ViRnJhbWVQcml2YXRlKiBmcmFtZV9kYXRh
ID0gV0VCS0lUX1dFQl9GUkFNRV9HRVRfUFJJVkFURShmcmFtZSk7CisgICAgcmV0dXJuIGZyYW1l
X2RhdGEgPyBmcmFtZV9kYXRhLT5mcmFtZSA6IDA7Cit9CisKK1dlYktpdFdlYkZyYW1lKiBraXQo
V2ViQ29yZTo6RnJhbWUqIGNvcmVGcmFtZSkKK3sKKyAgICBpZiAoIWNvcmVGcmFtZSkKKyAgICAg
ICAgcmV0dXJuIDA7CisKKyAgICBBU1NFUlQoY29yZUZyYW1lLT5sb2FkZXIoKSk7CisgICAgV2Vi
S2l0OjpGcmFtZUxvYWRlckNsaWVudCogY2xpZW50ID0gc3RhdGljX2Nhc3Q8V2ViS2l0OjpGcmFt
ZUxvYWRlckNsaWVudCo+KGNvcmVGcmFtZS0+bG9hZGVyKCktPmNsaWVudCgpKTsKKyAgICByZXR1
cm4gY2xpZW50ID8gY2xpZW50LT53ZWJGcmFtZSgpIDogMDsKK30KKworV2ViQ29yZTo6UGFnZSog
Y29yZShXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQoreworICAgIGlmICghd2ViVmlldykKKyAgICAg
ICAgcmV0dXJuIDA7CisKKyAgICBXZWJLaXRXZWJWaWV3UHJpdmF0ZSogd2ViVmlld0RhdGEgPSBX
RUJLSVRfV0VCX1ZJRVdfR0VUX1BSSVZBVEUod2ViVmlldyk7CisgICAgcmV0dXJuIHdlYlZpZXdE
YXRhID8gd2ViVmlld0RhdGEtPmNvcmVQYWdlIDogMDsKK30KKworV2ViS2l0V2ViVmlldyoga2l0
KFdlYkNvcmU6OlBhZ2UqIGNvcmVQYWdlKQoreworICAgIGlmICghY29yZVBhZ2UpCisgICAgICAg
IHJldHVybiAwOworCisgICAgQVNTRVJUKHdlYlZpZXctPmNocm9tZSgpKTsKKyAgICBXZWJLaXQ6
OkNocm9tZUNsaWVudCogY2xpZW50ID0gc3RhdGljX2Nhc3Q8V2ViS2l0OjpDaHJvbWVDbGllbnQq
Pihjb3JlUGFnZS0+Y2hyb21lKCktPmNsaWVudCgpKTsKKyAgICByZXR1cm4gY2xpZW50ID8gY2xp
ZW50LT53ZWJQYWdlKCkgOiAwOworfQorfQpJbmRleDogV2ViS2l0L2d0ay9XZWJWaWV3L3dlYmtp
dHByaXZhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0cHJpdmF0
ZS5oCShyZXZpc2lvbiAwKQorKysgV2ViS2l0L2d0ay9XZWJWaWV3L3dlYmtpdHByaXZhdGUuaAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw5NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBI
b2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisgKiAyLiAgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCisgKiAzLiAgTmVp
dGhlciB0aGUgbmFtZSBvZiBBcHBsZSwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgor
ICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
CisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisg
KiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV0VCS0lUX1BSSVZBVEVfSAorI2RlZmluZSBXRUJL
SVRfUFJJVkFURV9ICisKKy8qCisgKiBJbnRlcm5hbCBjbGFzcy4gVGhpcyBjbGFzcyBrbm93cyB0
aGUgc2hhcmVkIHNlY3JldCBvZiBXZWJLaXRXZWJGcmFtZSwKKyAqIFdlYktpdE5ldHdvcmtSZXF1
ZXN0IGFuZCBXZWJLaXRXZWJWaWV3LgorICogVGhleSBhcmUgdXNpbmcgV2ViQ29yZSB3aGljaCBt
dXNuJ3QgYmUgZXhwb3NlZCB0byB0aGUgb3V0ZXIgd29ybGQuCisgKi8KKworI2luY2x1ZGUgIndl
YmtpdHNldHRpbmdzLmgiCisjaW5jbHVkZSAid2Via2l0d2Vidmlldy5oIgorI2luY2x1ZGUgIndl
YmtpdHdlYmZyYW1lLmgiCisjaW5jbHVkZSAid2Via2l0bmV0d29ya3JlcXVlc3QuaCIKKworI2lu
Y2x1ZGUgIlNldHRpbmdzLmgiCisjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIkZyYW1lLmgi
CisjaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnQuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7Cisg
ICAgdm9pZCBhcHBseShXZWJLaXRTZXR0aW5ncyosV2ViQ29yZTo6U2V0dGluZ3MqKTsKKyAgICBX
ZWJLaXRTZXR0aW5ncyogY3JlYXRlKFdlYkNvcmU6OlNldHRpbmdzKik7CisgICAgV2ViS2l0V2Vi
RnJhbWUqICBnZXRGcmFtZUZyb21WaWV3KFdlYktpdFdlYlZpZXcqKTsKKyAgICBXZWJLaXRXZWJW
aWV3KiBnZXRWaWV3RnJvbUZyYW1lKFdlYktpdFdlYkZyYW1lKik7CisKKyAgICBXZWJDb3JlOjpG
cmFtZSogY29yZShXZWJLaXRXZWJGcmFtZSopOworICAgIFdlYktpdFdlYkZyYW1lKiBraXQoV2Vi
Q29yZTo6RnJhbWUqKTsKKyAgICBXZWJDb3JlOjpQYWdlKiBjb3JlKFdlYktpdFdlYlZpZXcqKTsK
KyAgICBXZWJLaXRXZWJWaWV3KiBraXQoV2ViQ29yZTo6UGFnZSopOworfQorCitleHRlcm4gIkMi
IHsKKyAgICAjZGVmaW5lIFdFQktJVF9XRUJfVklFV19HRVRfUFJJVkFURShvYmopICAgIChHX1RZ
UEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUoKG9iaiksIFdFQktJVF9UWVBFX1dFQl9WSUVXLCBXZWJL
aXRXZWJWaWV3UHJpdmF0ZSkpCisgICAgdHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFdlYlZpZXdQcml2
YXRlIFdlYktpdFdlYlZpZXdQcml2YXRlOworICAgIHN0cnVjdCBfV2ViS2l0V2ViVmlld1ByaXZh
dGUgeworICAgICAgICBXZWJDb3JlOjpQYWdlKiBjb3JlUGFnZTsKKyAgICAgICAgV2ViQ29yZTo6
U2V0dGluZ3MqIHNldHRpbmdzOworCisgICAgICAgIFdlYktpdFdlYkZyYW1lKiBtYWluRnJhbWU7
CisgICAgICAgIFdlYkNvcmU6OlN0cmluZyBhcHBsaWNhdGlvbk5hbWVGb3JVc2VyQWdlbnQ7Cisg
ICAgICAgIFdlYkNvcmU6OlN0cmluZyogdXNlckFnZW50OworCisgICAgICAgIEhhc2hTZXQ8R3Rr
V2lkZ2V0Kj4gY2hpbGRyZW47CisgICAgICAgIGJvb2wgZWRpdGFibGU7CisgICAgfTsKKworICAg
ICNkZWZpbmUgV0VCS0lUX1dFQl9GUkFNRV9HRVRfUFJJVkFURShvYmopICAgIChHX1RZUEVfSU5T
VEFOQ0VfR0VUX1BSSVZBVEUoKG9iaiksIFdFQktJVF9UWVBFX1dFQl9GUkFNRSwgV2ViS2l0V2Vi
RnJhbWVQcml2YXRlKSkKKyAgICB0eXBlZGVmIHN0cnVjdCBfV2ViS2l0V2ViRnJhbWVQcml2YXRl
IFdlYktpdFdlYkZyYW1lUHJpdmF0ZTsKKyAgICBzdHJ1Y3QgX1dlYktpdFdlYkZyYW1lUHJpdmF0
ZSB7CisgICAgICAgIFdlYkNvcmU6OkZyYW1lKiBmcmFtZTsKKyAgICAgICAgV2ViQ29yZTo6RnJh
bWVMb2FkZXJDbGllbnQqIGNsaWVudDsKKyAgICAgICAgV2ViS2l0V2ViVmlldyogd2ViVmlldzsK
KworICAgICAgICBnY2hhciogbmFtZTsKKyAgICAgICAgZ2NoYXIqIHRpdGxlOworICAgICAgICBn
Y2hhciogbG9jYXRpb247CisgICAgfTsKKworICAgICNkZWZpbmUgV0VCS0lUX05FVFdPUktfUkVR
VUVTVF9HRVRfUFJJVkFURShvYmopICAgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUoKG9i
aiksIFdFQktJVF9UWVBFX05FVFdPUktfUkVRVUVTVCwgV2ViS2l0TmV0d29ya1JlcXVlc3RQcml2
YXRlKSkKKyAgICB0eXBlZGVmIHN0cnVjdCBfV2ViS2l0TmV0d29ya1JlcXVlc3RQcml2YXRlIFdl
YktpdE5ldHdvcmtSZXF1ZXN0UHJpdmF0ZTsKKyAgICBzdHJ1Y3QgX1dlYktpdE5ldHdvcmtSZXF1
ZXN0UHJpdmF0ZSB7CisgICAgICAgIGdjaGFyKiB1cmk7CisgICAgfTsKKworICAgIFdlYktpdFdl
YkZyYW1lKiB3ZWJraXRfd2ViX2ZyYW1lX2luaXRfd2l0aF93ZWJfdmlldyhXZWJLaXRXZWJWaWV3
KiwgV2ViQ29yZTo6SFRNTEZyYW1lT3duZXJFbGVtZW50Kik7Cit9CisKKyNlbmRpZgpJbmRleDog
V2ViS2l0L2d0ay9XZWJWaWV3L3dlYmtpdHNldHRpbmdzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJL
aXQvZ3RrL1dlYlZpZXcvd2Via2l0c2V0dGluZ3MuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViS2l0
L2d0ay9XZWJWaWV3L3dlYmtpdHNldHRpbmdzLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3
MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhl
cgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4gCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4gCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSwg
SW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAg
ICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uIAorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElU
UyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwor
ICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIndlYmtpdHNldHRpbmdzLmgiCisKK2V4dGVybiAi
QyIgeworR1R5cGUgd2Via2l0X3dlYl9zZXR0aW5nc19nZXRfdHlwZSh2b2lkKQoreworICAgIHJl
dHVybiBHVHlwZSgpOworfQorCitXZWJLaXRTZXR0aW5ncyogd2Via2l0X3dlYl9zZXR0aW5nc19j
b3B5KFdlYktpdFNldHRpbmdzKiBzZXR0aW5nKQoreworICAgIHJldHVybiAwOworfQorCit2b2lk
IHdlYmtpdF93ZWJfc2V0dGluZ3NfZnJlZShXZWJLaXRTZXR0aW5ncyogc2V0dGluZykKK3sKK30K
KworV2ViS2l0U2V0dGluZ3MqIHdlYmtpdF93ZWJfc2V0dGluZ3NfZ2V0X2dsb2JhbCh2b2lkKQor
eworICAgIHJldHVybiAwOworfQorCit2b2lkIHdlYmtpdF93ZWJfc2V0dGluZ3Nfc2V0X2dsb2Jh
bCAoV2ViS2l0U2V0dGluZ3MqIHNldHRpbmcpCit7Cit9CisKK3ZvaWQgd2Via2l0X3dlYl9zZXR0
aW5nc19zZXRfZm9udF9mYW1pbHkoV2ViS2l0U2V0dGluZ3MqLCBXZWJLaXRGb250RmFtaWx5IGZh
bWlseSwgZ2NoYXIqIGZhbWlseV9uYW1lKQoreworfQorCitjb25zdCBnY2hhciogd2Via2l0X3dl
Yl9zZXR0aW5nc19nZXRfZm9udF9mYW1pbHkoV2ViS2l0U2V0dGluZ3MqLCBXZWJLaXRGb250RmFt
aWx5IGZhbWlseSkKK3sKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCB3ZWJraXRfd2ViX3NldHRp
bmdzX3NldF91c2VyX3N0eWxlX3NoZWV0X2xvY2F0aW9uKFdlYktpdFNldHRpbmdzKiwgZ2NoYXIq
KQoreworfQorCit2b2lkIHdlYmtpdF9zZXRfZnRwX2RpcmVjdG9yeV90ZW1wbGF0ZV9wYXRoKFdl
YktpdFNldHRpbmdzKiwgZ2NoYXIqKQoreworfQorfQpJbmRleDogV2ViS2l0L2d0ay9XZWJWaWV3
L3dlYmtpdHNldHRpbmdzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2d0ay9XZWJWaWV3L3dlYmtp
dHNldHRpbmdzLmgJKHJldmlzaW9uIDApCisrKyBXZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0c2V0
dGluZ3MuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMTcgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAor
ICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAor
ICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUg
bmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsK
KyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdFQktJVF9TRVRUSU5HU19ICisj
ZGVmaW5lIFdFQktJVF9TRVRUSU5HU19ICisKKyNpbmNsdWRlIDxnbGliLmg+CisjaW5jbHVkZSA8
Z2xpYi1vYmplY3QuaD4KKworI2luY2x1ZGUgIndlYmtpdGRlZmluZXMuaCIKKworR19CRUdJTl9E
RUNMUworCit0eXBlZGVmIGVudW0geworICAgIFdFQktJVF9GT05UX0ZBTUlMWV9TVEFOREFSRCwK
KyAgICBXRUJLSVRfRk9OVF9GQU1JTFlfRklYRUQsCisgICAgV0VCS0lUX0ZPTlRfRkFNSUxZX1NF
UklGLAorICAgIFdFQktJVF9GT05UX0ZBTUlMWV9TQU5TX1NFUklGLAorICAgIFdFQktJVF9GT05U
X0ZBTUlMWV9DVVJTSVZFLAorICAgIFdFQktJVF9GT05UX0ZBTUlMWV9GQU5UQVNZLAorICAgIFdF
QktJVF9GT05UX0ZBTUlMWV9MQVNUX0VOVFJZCit9IFdlYktpdEZvbnRGYW1pbHk7CisKK3R5cGVk
ZWYgZW51bSB7CisgICAgV0VCS0lUX0VESVRBQkxFX0xJTktfREVGQVVMVF9CRUhBVklPVVIsCisg
ICAgV0VCS0lUX0VESVRBQkxFX0xJTktfQUxXQVlTX0xJVkUsCisgICAgV0VCS0lUX0VESVRBQkxF
X0xJTktfT05MWV9XSVRIX1NISUZUX0tFWSwKKyAgICBXRUJLSVRfRURJVEFCTEVfTElOS19MSVZF
X1dIRU5fTk9UX0ZPQ1VTRUQsCisgICAgV0VCS0lUX0VESVRBQkxFX0xJTktfTkVWRVJfTElWRQor
fSBXZWJLaXRFZGl0YWJsZUxpbmtCZWhhdmlvdXI7CisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRT
ZXR0aW5ncyBXZWJLaXRTZXR0aW5nczsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRTZXR0aW5nc1By
aXZhdGUgV2ViS2l0U2V0dGluZ3NQcml2YXRlOworCitzdHJ1Y3QgX1dlYktpdFNldHRpbmdzIHsK
KyAgICBnY2hhciogZm9udF9uYW1lW1dFQktJVF9GT05UX0ZBTUlMWV9MQVNUX0VOVFJZXTsKKyAg
ICBnaW50ICAgbWluaW11bV9mb250X3NpemU7CisgICAgZ2ludCAgIG1pbmltdW1fbG9naWNhbF9m
b250X3NpemU7CisgICAgZ2ludCAgIGRlZmF1bHRfZm9udF9zaXplOworICAgIGdpbnQgICBkZWZh
dWx0X2ZpeGVkX2ZvbnRfc2l6ZTsKKyAgICBnYm9vbGVhbiBsb2FkX2ltYWdlc19hdXRvbWF0aWNh
bGx5OworICAgIGdib29sZWFuIGlzX2phdmFfc2NyaXB0X2VuYWJsZWQ7CisgICAgZ2Jvb2xlYW4g
amF2YV9zY3JpcHRfY2FuX29wZW5fd2luZG93c19hdXRvbWF0aWNhbGx5OworICAgIGdib29sZWFu
IHBsdWdpbnNfZW5hYmxlZDsKKyAgICBnYm9vbGVhbiBwcml2YXRlX2Jyb3dzaW5nOworICAgIGdj
aGFyKiB1c2VyX3N0eWxlX3NoZWV0X2xvY2F0aW9uOworICAgIGdib29sZWFuIHNob3VsZF9wcmlu
dF9iYWNrZ3JvdW5kczsKKyAgICBnYm9vbGVhbiB0ZXh0X2FyZWFzX2FyZV9yZXNpemFibGU7Cisg
ICAgV2ViS2l0RWRpdGFibGVMaW5rQmVoYXZpb3VyIGVkaXRhYmxlX2xpbmtfYmVoYXZpb3VyOwor
ICAgIGdib29sZWFuIHVzZXNfd2ViX3ZpZXdfY2FjaGU7CisgICAgZ2Jvb2xlYW4gc2hyaW5rX3N0
YW5kYWxvbmVfaW1hZ2VzX3RvX2ZpdDsKKyAgICBnYm9vbGVhbiBzaG93X3VyaXNfaW5fdG9vbF90
aXBzOworICAgIGdjaGFyKiBmdHBfZGlyZWN0b3J5X3RlbXBsYXRlX3BhdGg7CisgICAgZ2Jvb2xl
YW4gZm9yY2VfZnRwX2RpcmVjdG9yeV9saXN0aW5nczsKKyAgICBnYm9vbGVhbiBkZXZlbG9wZXJf
ZXh0cmFzX2VuYWJsZWQ7CisKKworICAgIFdlYktpdFNldHRpbmdzUHJpdmF0ZSAqcHJpdmF0ZV9k
YXRhOworfTsKKworR1R5cGUKK3dlYmtpdF93ZWJfc2V0dGluZ3NfZ2V0X3R5cGUgKHZvaWQpOwor
CitXZWJLaXRTZXR0aW5ncyoKK3dlYmtpdF93ZWJfc2V0dGluZ3NfY29weSAoV2ViS2l0U2V0dGlu
Z3MqIHNldHRpbmcpOworCit2b2lkCit3ZWJraXRfd2ViX3NldHRpbmdzX2ZyZWUgKFdlYktpdFNl
dHRpbmdzKiBzZXR0aW5nKTsKKworV2ViS2l0U2V0dGluZ3MqCit3ZWJraXRfd2ViX3NldHRpbmdz
X2dldF9nbG9iYWwgKHZvaWQpOworCit2b2lkCit3ZWJraXRfd2ViX3NldHRpbmdzX3NldF9nbG9i
YWwgKFdlYktpdFNldHRpbmdzKiBzZXR0aW5nKTsKKwordm9pZAord2Via2l0X3dlYl9zZXR0aW5n
c19zZXRfZm9udF9mYW1pbHkoV2ViS2l0U2V0dGluZ3MqLCBXZWJLaXRGb250RmFtaWx5IGZhbWls
eSwgZ2NoYXIgKmZhbWlseV9uYW1lKTsKKworY29uc3QgZ2NoYXIqCit3ZWJraXRfd2ViX3NldHRp
bmdzX2dldF9mb250X2ZhbWlseShXZWJLaXRTZXR0aW5ncyosIFdlYktpdEZvbnRGYW1pbHkgZmFt
aWx5KTsKKwordm9pZAord2Via2l0X3dlYl9zZXR0aW5nc19zZXRfdXNlcl9zdHlsZV9zaGVldF9s
b2NhdGlvbihXZWJLaXRTZXR0aW5ncyosIGdjaGFyKik7CisKK3ZvaWQKK3dlYmtpdF9zZXRfZnRw
X2RpcmVjdG9yeV90ZW1wbGF0ZV9wYXRoKFdlYktpdFNldHRpbmdzKiwgZ2NoYXIqKTsKKworCitH
X0VORF9ERUNMUworCisKKyNlbmRpZgpJbmRleDogV2ViS2l0L2d0ay9XZWJWaWV3L3dlYmtpdHdl
YmZyYW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0d2ViZnJh
bWUuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViS2l0L2d0ay9XZWJWaWV3L3dlYmtpdHdlYmZyYW1l
LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzODggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKKyAqIENvcHlyaWdodCAoQykgMjAwNyBB
bHAgVG9rZXIgPGFscEBhdG9rZXIuY29tPgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisgKiAyLiAgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCisgKiAzLiAgTmVp
dGhlciB0aGUgbmFtZSBvZiBBcHBsZSwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgor
ICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
CisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisg
KiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJ3ZWJraXR3
ZWJmcmFtZS5oIgorI2luY2x1ZGUgIndlYmtpdHdlYnZpZXcuaCIKKyNpbmNsdWRlICJ3ZWJraXRw
cml2YXRlLmgiCisKKyNpbmNsdWRlICJDU3RyaW5nLmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkZXIu
aCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudEd0ay5oIgorI2luY2x1ZGUgIkZyYW1lVHJl
ZS5oIgorI2luY2x1ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIkhUTUxGcmFtZU93bmVyRWxl
bWVudC5oIgorI2luY2x1ZGUgImtqc19iaW5kaW5nLmgiCisjaW5jbHVkZSAia2pzX3Byb3h5Lmgi
CisjaW5jbHVkZSAia2pzX3dpbmRvdy5oIgorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvQVBJ
Q2FzdC5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViS2l0OwordXNpbmcgbmFtZXNwYWNlIFdlYkNv
cmU7CisKK2V4dGVybiAiQyIgeworCitleHRlcm4gdm9pZCB3ZWJraXRfbWFyc2hhbF9WT0lEX19T
VFJJTkdfU1RSSU5HIChHQ2xvc3VyZSogICAgIGNsb3N1cmUsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHVmFsdWUqICAgICAgIHJldHVybl92YWx1ZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50ICAg
ICAgICAgbl9wYXJhbV92YWx1ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBHVmFsdWUqIHBhcmFtX3ZhbHVlcywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyICAgICAgaW52b2NhdGlv
bl9oaW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Z3BvaW50ZXIgICAgICBtYXJzaGFsX2RhdGEpOworCitlbnVtIHsKKyAgICBDTEVBUkVELAorICAg
IExPQURfRE9ORSwKKyAgICBUSVRMRV9DSEFOR0VELAorICAgIEhPVkVSSU5HX09WRVJfTElOSywK
KyAgICBMQVNUX1NJR05BTAorfTsKKworc3RhdGljIGd1aW50IHdlYmtpdF93ZWJfZnJhbWVfc2ln
bmFsc1tMQVNUX1NJR05BTF0gPSB7IDAsIH07CisKK3N0YXRpYyB2b2lkIHdlYmtpdF93ZWJfZnJh
bWVfcmVhbF90aXRsZV9jaGFuZ2VkKFdlYktpdFdlYkZyYW1lKiBmcmFtZSwgZ2NoYXIqIHRpdGxl
LCBnY2hhciogbG9jYXRpb24pOworCitHX0RFRklORV9UWVBFKFdlYktpdFdlYkZyYW1lLCB3ZWJr
aXRfd2ViX2ZyYW1lLCBHX1RZUEVfT0JKRUNUKQorCitzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX2Zy
YW1lX2ZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkKK3sKKyAgICBXZWJLaXRXZWJGcmFtZVByaXZh
dGUqIHByaXZhdGVEYXRhID0gV0VCS0lUX1dFQl9GUkFNRV9HRVRfUFJJVkFURShXRUJLSVRfV0VC
X0ZSQU1FKG9iamVjdCkpOworICAgIHByaXZhdGVEYXRhLT5mcmFtZS0+bG9hZGVyKCktPmNhbmNl
bEFuZENsZWFyKCk7CisgICAgZ19mcmVlKHByaXZhdGVEYXRhLT5uYW1lKTsKKyAgICBnX2ZyZWUo
cHJpdmF0ZURhdGEtPnRpdGxlKTsKKyAgICBnX2ZyZWUocHJpdmF0ZURhdGEtPmxvY2F0aW9uKTsK
KyAgICBkZWxldGUgcHJpdmF0ZURhdGEtPmZyYW1lOworCisgICAgR19PQkpFQ1RfQ0xBU1Mod2Vi
a2l0X3dlYl9mcmFtZV9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShvYmplY3QpOworfQorCitzdGF0
aWMgdm9pZCB3ZWJraXRfd2ViX2ZyYW1lX2NsYXNzX2luaXQoV2ViS2l0V2ViRnJhbWVDbGFzcyog
ZnJhbWVDbGFzcykKK3sKKyAgICBnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUoZnJhbWVDbGFzcywg
c2l6ZW9mKFdlYktpdFdlYkZyYW1lUHJpdmF0ZSkpOworCisgICAgLyoKKyAgICAgKiBzaWduYWxz
CisgICAgICovCisgICAgd2Via2l0X3dlYl9mcmFtZV9zaWduYWxzW0NMRUFSRURdID0gZ19zaWdu
YWxfbmV3KCJjbGVhcmVkIiwKKyAgICAgICAgICAgIEdfVFlQRV9GUk9NX0NMQVNTKGZyYW1lQ2xh
c3MpLAorICAgICAgICAgICAgKEdTaWduYWxGbGFncykoR19TSUdOQUxfUlVOX0xBU1QgfCBHX1NJ
R05BTF9BQ1RJT04pLAorICAgICAgICAgICAgMCwKKyAgICAgICAgICAgIE5VTEwsCisgICAgICAg
ICAgICBOVUxMLAorICAgICAgICAgICAgZ19jY2xvc3VyZV9tYXJzaGFsX1ZPSURfX1ZPSUQsCisg
ICAgICAgICAgICBHX1RZUEVfTk9ORSwgMCk7CisKKyAgICB3ZWJraXRfd2ViX2ZyYW1lX3NpZ25h
bHNbTE9BRF9ET05FXSA9IGdfc2lnbmFsX25ldygibG9hZF9kb25lIiwKKyAgICAgICAgICAgIEdf
VFlQRV9GUk9NX0NMQVNTKGZyYW1lQ2xhc3MpLAorICAgICAgICAgICAgKEdTaWduYWxGbGFncyko
R19TSUdOQUxfUlVOX0xBU1QgfCBHX1NJR05BTF9BQ1RJT04pLAorICAgICAgICAgICAgMCwKKyAg
ICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAgZ19jY2xvc3Vy
ZV9tYXJzaGFsX1ZPSURfX0JPT0xFQU4sCisgICAgICAgICAgICBHX1RZUEVfTk9ORSwgMSwKKyAg
ICAgICAgICAgIEdfVFlQRV9CT09MRUFOKTsKKworICAgIHdlYmtpdF93ZWJfZnJhbWVfc2lnbmFs
c1tUSVRMRV9DSEFOR0VEXSA9IGdfc2lnbmFsX25ldygidGl0bGVfY2hhbmdlZCIsCisgICAgICAg
ICAgICBHX1RZUEVfRlJPTV9DTEFTUyhmcmFtZUNsYXNzKSwKKyAgICAgICAgICAgIChHU2lnbmFs
RmxhZ3MpKEdfU0lHTkFMX1JVTl9MQVNUIHwgR19TSUdOQUxfQUNUSU9OKSwKKyAgICAgICAgICAg
IEdfU1RSVUNUX09GRlNFVChXZWJLaXRXZWJGcmFtZUNsYXNzLCB0aXRsZV9jaGFuZ2VkKSwKKyAg
ICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAgd2Via2l0X21h
cnNoYWxfVk9JRF9fU1RSSU5HX1NUUklORywKKyAgICAgICAgICAgIEdfVFlQRV9OT05FLCAyLAor
ICAgICAgICAgICAgR19UWVBFX1NUUklORywgR19UWVBFX1NUUklORyk7CisKKyAgICB3ZWJraXRf
d2ViX2ZyYW1lX3NpZ25hbHNbSE9WRVJJTkdfT1ZFUl9MSU5LXSA9IGdfc2lnbmFsX25ldygiaG92
ZXJpbmdfb3Zlcl9saW5rIiwKKyAgICAgICAgICAgIEdfVFlQRV9GUk9NX0NMQVNTKGZyYW1lQ2xh
c3MpLAorICAgICAgICAgICAgKEdTaWduYWxGbGFncykoR19TSUdOQUxfUlVOX0xBU1QgfCBHX1NJ
R05BTF9BQ1RJT04pLAorICAgICAgICAgICAgMCwKKyAgICAgICAgICAgIE5VTEwsCisgICAgICAg
ICAgICBOVUxMLAorICAgICAgICAgICAgd2Via2l0X21hcnNoYWxfVk9JRF9fU1RSSU5HX1NUUklO
RywKKyAgICAgICAgICAgIEdfVFlQRV9OT05FLCAyLAorICAgICAgICAgICAgR19UWVBFX1NUUklO
RywgR19UWVBFX1NUUklORyk7CisKKyAgICBmcmFtZUNsYXNzLT50aXRsZV9jaGFuZ2VkID0gd2Vi
a2l0X3dlYl9mcmFtZV9yZWFsX3RpdGxlX2NoYW5nZWQ7CisKKyAgICAvKgorICAgICAqIGltcGxl
bWVudGF0aW9ucyBvZiB2aXJ0dWFsIG1ldGhvZHMKKyAgICAgKi8KKyAgICBHX09CSkVDVF9DTEFT
UyhmcmFtZUNsYXNzKS0+ZmluYWxpemUgPSB3ZWJraXRfd2ViX2ZyYW1lX2ZpbmFsaXplOworfQor
CitzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX2ZyYW1lX3JlYWxfdGl0bGVfY2hhbmdlZChXZWJLaXRX
ZWJGcmFtZSogZnJhbWUsIGdjaGFyKiB0aXRsZSwgZ2NoYXIqIGxvY2F0aW9uKQoreworICAgIFdl
YktpdFdlYkZyYW1lUHJpdmF0ZSogZnJhbWVEYXRhID0gV0VCS0lUX1dFQl9GUkFNRV9HRVRfUFJJ
VkFURShmcmFtZSk7CisgICAgZ19mcmVlKGZyYW1lRGF0YS0+dGl0bGUpOworICAgIGdfZnJlZShm
cmFtZURhdGEtPmxvY2F0aW9uKTsKKyAgICBmcmFtZURhdGEtPnRpdGxlID0gZ19zdHJkdXAodGl0
bGUpOworICAgIGZyYW1lRGF0YS0+bG9jYXRpb24gPSBnX3N0cmR1cChsb2NhdGlvbik7Cit9CisK
K3N0YXRpYyB2b2lkIHdlYmtpdF93ZWJfZnJhbWVfaW5pdChXZWJLaXRXZWJGcmFtZSogZnJhbWUp
Cit7CisgICAgLy8gVE9ETzogTW92ZSBjb25zdHJ1Y3RvciBjb2RlIGhlcmUuCit9CisKKy8qKgor
ICogd2Via2l0X3dlYl9mcmFtZV9uZXc6CisgKiBAd2ViX3ZpZXc6IHRoZSBjb250cm9sbGluZyAj
V2ViS2l0V2ViVmlldworICoKKyAqIENyZWF0ZXMgYSBuZXcgI1dlYktpdFdlYkZyYW1lIGluaXRp
YWxpemVkIHdpdGggYSBjb250cm9sbGluZyAjV2ViS2l0V2ViVmlldy4KKyAqCisgKiBSZXR1cm5z
OiBhIG5ldyAjV2ViS2l0V2ViRnJhbWUKKyAqKi8KK1dlYktpdFdlYkZyYW1lKiB3ZWJraXRfd2Vi
X2ZyYW1lX25ldyhXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQoreworICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKFdFQktJVF9JU19XRUJfVklFVyh3ZWJWaWV3KSwgTlVMTCk7CisKKyAgICBXZWJLaXRX
ZWJGcmFtZSogZnJhbWUgPSBXRUJLSVRfV0VCX0ZSQU1FKGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQ
RV9XRUJfRlJBTUUsIE5VTEwpKTsKKyAgICBXZWJLaXRXZWJGcmFtZVByaXZhdGUqIGZyYW1lRGF0
YSA9IFdFQktJVF9XRUJfRlJBTUVfR0VUX1BSSVZBVEUoZnJhbWUpOworICAgIFdlYktpdFdlYlZp
ZXdQcml2YXRlKiB3ZWJWaWV3RGF0YSA9IFdFQktJVF9XRUJfVklFV19HRVRfUFJJVkFURSh3ZWJW
aWV3KTsKKworICAgIGZyYW1lRGF0YS0+Y2xpZW50ID0gbmV3IFdlYktpdDo6RnJhbWVMb2FkZXJD
bGllbnQoZnJhbWUpOworICAgIGZyYW1lRGF0YS0+ZnJhbWUgPSBuZXcgRnJhbWUod2ViVmlld0Rh
dGEtPmNvcmVQYWdlLCAwLCBmcmFtZURhdGEtPmNsaWVudCk7CisKKyAgICBGcmFtZVZpZXcqIGZy
YW1lVmlldyA9IG5ldyBGcmFtZVZpZXcoZnJhbWVEYXRhLT5mcmFtZSk7CisgICAgZnJhbWVWaWV3
LT5zZXRDb250YWluaW5nV2luZG93KEdUS19DT05UQUlORVIod2ViVmlldykpOworICAgIGZyYW1l
Vmlldy0+c2V0R3RrQWRqdXN0bWVudHMoR1RLX0FESlVTVE1FTlQoZ3RrX2FkanVzdG1lbnRfbmV3
KDAuMCwgMC4wLCAwLjAsIDAuMCwgMC4wLCAwLjApKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEdUS19BREpVU1RNRU5UKGd0a19hZGp1c3RtZW50X25ldygwLjAsIDAuMCwgMC4w
LCAwLjAsIDAuMCwgMC4wKSkpOworICAgIGZyYW1lRGF0YS0+ZnJhbWUtPnNldFZpZXcoZnJhbWVW
aWV3KTsKKyAgICBmcmFtZURhdGEtPmZyYW1lLT5pbml0KCk7CisgICAgZnJhbWVEYXRhLT53ZWJW
aWV3ID0gd2ViVmlldzsKKyAgICBmcmFtZURhdGEtPm5hbWUgPSAwOworICAgIGZyYW1lRGF0YS0+
dGl0bGUgPSAwOworICAgIGZyYW1lRGF0YS0+bG9jYXRpb24gPSAwOworCisgICAgcmV0dXJuIGZy
YW1lOworfQorCitXZWJLaXRXZWJGcmFtZSogd2Via2l0X3dlYl9mcmFtZV9pbml0X3dpdGhfd2Vi
X3ZpZXcoV2ViS2l0V2ViVmlldyogd2ViVmlldywgSFRNTEZyYW1lT3duZXJFbGVtZW50KiBlbGVt
ZW50KQoreworICAgIFdlYktpdFdlYkZyYW1lKiBmcmFtZSA9IFdFQktJVF9XRUJfRlJBTUUoZ19v
YmplY3RfbmV3KFdFQktJVF9UWVBFX1dFQl9GUkFNRSwgTlVMTCkpOworICAgIFdlYktpdFdlYkZy
YW1lUHJpdmF0ZSogZnJhbWVEYXRhID0gV0VCS0lUX1dFQl9GUkFNRV9HRVRfUFJJVkFURShmcmFt
ZSk7CisgICAgV2ViS2l0V2ViVmlld1ByaXZhdGUqIHdlYlZpZXdEYXRhID0gV0VCS0lUX1dFQl9W
SUVXX0dFVF9QUklWQVRFKHdlYlZpZXcpOworCisgICAgZnJhbWVEYXRhLT5jbGllbnQgPSBuZXcg
V2ViS2l0OjpGcmFtZUxvYWRlckNsaWVudChmcmFtZSk7CisgICAgZnJhbWVEYXRhLT5mcmFtZSA9
IG5ldyBGcmFtZSh3ZWJWaWV3RGF0YS0+Y29yZVBhZ2UsIGVsZW1lbnQsIGZyYW1lRGF0YS0+Y2xp
ZW50KTsKKworICAgIEZyYW1lVmlldyogZnJhbWVWaWV3ID0gbmV3IEZyYW1lVmlldyhmcmFtZURh
dGEtPmZyYW1lKTsKKyAgICBmcmFtZVZpZXctPnNldENvbnRhaW5pbmdXaW5kb3coR1RLX0NPTlRB
SU5FUih3ZWJWaWV3KSk7CisgICAgZnJhbWVEYXRhLT5mcmFtZS0+c2V0VmlldyhmcmFtZVZpZXcp
OworICAgIGZyYW1lVmlldy0+ZGVyZWYoKTsKKyAgICBmcmFtZURhdGEtPmZyYW1lLT5pbml0KCk7
CisgICAgZnJhbWVEYXRhLT53ZWJWaWV3ID0gd2ViVmlldzsKKworICAgIHJldHVybiBmcmFtZTsK
K30KKworY29uc3QgZ2NoYXIqIHdlYmtpdF93ZWJfZnJhbWVfZ2V0X3RpdGxlKFdlYktpdFdlYkZy
YW1lKiBmcmFtZSkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfV0VCX0ZS
QU1FKGZyYW1lKSwgTlVMTCk7CisKKyAgICBXZWJLaXRXZWJGcmFtZVByaXZhdGUqIGZyYW1lRGF0
YSA9IFdFQktJVF9XRUJfRlJBTUVfR0VUX1BSSVZBVEUoZnJhbWUpOworICAgIHJldHVybiBmcmFt
ZURhdGEtPnRpdGxlOworfQorCitjb25zdCBnY2hhciogd2Via2l0X3dlYl9mcmFtZV9nZXRfbG9j
YXRpb24oV2ViS2l0V2ViRnJhbWUqIGZyYW1lKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWls
KFdFQktJVF9JU19XRUJfRlJBTUUoZnJhbWUpLCBOVUxMKTsKKworICAgIFdlYktpdFdlYkZyYW1l
UHJpdmF0ZSogZnJhbWVEYXRhID0gV0VCS0lUX1dFQl9GUkFNRV9HRVRfUFJJVkFURShmcmFtZSk7
CisgICAgcmV0dXJuIGZyYW1lRGF0YS0+bG9jYXRpb247Cit9CisKKy8qKgorICogd2Via2l0X3dl
Yl9mcmFtZV9nZXRfd2ViX3ZpZXc6CisgKiBAZnJhbWU6IGEgI1dlYktpdFdlYkZyYW1lCisgKgor
ICogUmV0dXJucyB0aGUgI1dlYktpdFdlYlZpZXcgdGhhdCBtYW5hZ2VzIHRoaXMgI1dlYktpdFdl
YkZyYW1lLgorICoKKyAqIFRoZSAjV2ViS2l0V2ViVmlldyByZXR1cm5lZCBtYW5hZ2VzIHRoZSBl
bnRpcmUgaGllcmFyY2h5IG9mICNXZWJLaXRXZWJGcmFtZQorICogb2JqZWN0cyB0aGF0IGNvbnRh
aW5zIEBmcmFtZS4KKyAqCisgKiBSZXR1cm4gdmFsdWU6IHRoZSAjV2ViS2l0V2ViVmlldyB0aGF0
IG1hbmFnZXMgQGZyYW1lCisgKi8KK1dlYktpdFdlYlZpZXcqIHdlYmtpdF93ZWJfZnJhbWVfZ2V0
X3dlYl92aWV3KFdlYktpdFdlYkZyYW1lKiBmcmFtZSkKK3sKKyAgICBnX3JldHVybl92YWxfaWZf
ZmFpbChXRUJLSVRfSVNfV0VCX0ZSQU1FKGZyYW1lKSwgTlVMTCk7CisKKyAgICBXZWJLaXRXZWJG
cmFtZVByaXZhdGUqIGZyYW1lRGF0YSA9IFdFQktJVF9XRUJfRlJBTUVfR0VUX1BSSVZBVEUoZnJh
bWUpOworICAgIHJldHVybiBmcmFtZURhdGEtPndlYlZpZXc7Cit9CisKKy8qKgorICogd2Via2l0
X3dlYl9mcmFtZV9nZXRfbmFtZToKKyAqIEBmcmFtZTogYSAjV2ViS2l0V2ViRnJhbWUKKyAqCisg
KiBSZXR1cm5zIHRoZSBAZnJhbWUncyBuYW1lCisgKgorICogUmV0dXJuIHZhbHVlOiB0aGUgbmFt
ZSBvZiBAZnJhbWUKKyAqLworY29uc3QgZ2NoYXIqIHdlYmtpdF93ZWJfZnJhbWVfZ2V0X25hbWUo
V2ViS2l0V2ViRnJhbWUqIGZyYW1lKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJ
VF9JU19XRUJfRlJBTUUoZnJhbWUpLCBOVUxMKTsKKworICAgIFdlYktpdFdlYkZyYW1lUHJpdmF0
ZSogZnJhbWVEYXRhID0gV0VCS0lUX1dFQl9GUkFNRV9HRVRfUFJJVkFURShmcmFtZSk7CisKKyAg
ICBpZiAoZnJhbWVEYXRhLT5uYW1lKQorICAgICAgICByZXR1cm4gZnJhbWVEYXRhLT5uYW1lOwor
CisgICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoZnJhbWUpOworICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKGNvcmVGcmFtZSwgTlVMTCk7CisKKyAgICBTdHJpbmcgc3RyaW5nID0gY29yZUZyYW1l
LT50cmVlKCktPm5hbWUoKTsKKyAgICBmcmFtZURhdGEtPm5hbWUgPSBnX3N0cmR1cChzdHJpbmcu
dXRmOCgpLmRhdGEoKSk7CisKKyAgICByZXR1cm4gZnJhbWVEYXRhLT5uYW1lOworfQorCisvKioK
KyAqIHdlYmtpdF93ZWJfZnJhbWVfZ2V0X3BhcmVudDoKKyAqIEBmcmFtZTogYSAjV2ViS2l0V2Vi
RnJhbWUKKyAqCisgKiBSZXR1cm5zIHRoZSBAZnJhbWUncyBwYXJlbnQgZnJhbWUsIG9yICVOVUxM
IGlmIGl0IGhhcyBub25lLgorICoKKyAqIFJldHVybiB2YWx1ZTogdGhlIHBhcmVudCAjV2ViS2l0
V2ViRnJhbWUgb3IgJU5VTEwgaW4gY2FzZSB0aGVyZSBpcyBub25lCisgKi8KK1dlYktpdFdlYkZy
YW1lKiB3ZWJraXRfd2ViX2ZyYW1lX2dldF9wYXJlbnQoV2ViS2l0V2ViRnJhbWUqIGZyYW1lKQor
eworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19XRUJfRlJBTUUoZnJhbWUpLCBO
VUxMKTsKKworICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKGZyYW1lKTsKKyAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChjb3JlRnJhbWUsIE5VTEwpOworCisgICAgcmV0dXJuIGtpdChjb3JlRnJh
bWUtPnRyZWUoKS0+cGFyZW50KCkpOworfQorCisvKioKKyAqIHdlYmtpdF93ZWJfZnJhbWVfbG9h
ZF9yZXF1ZXN0OgorICogQGZyYW1lOiBhICNXZWJLaXRXZWJGcmFtZQorICogQHJlcXVlc3Q6IGEg
I1dlYktpdE5ldHdvcmtSZXF1ZXN0CisgKgorICogQ29ubmVjdHMgdG8gYSBnaXZlbiBVUkkgYnkg
aW5pdGlhdGluZyBhbiBhc3luY2hyb25vdXMgY2xpZW50IHJlcXVlc3QuCisgKgorICogQ3JlYXRl
cyBhIHByb3Zpc2lvbmFsIGRhdGEgc291cmNlIHRoYXQgd2lsbCB0cmFuc2l0aW9uIHRvIGEgY29t
bWl0dGVkIGRhdGEKKyAqIHNvdXJjZSBvbmNlIGFueSBkYXRhIGhhcyBiZWVuIHJlY2VpdmVkLiBV
c2Ugd2Via2l0X3dlYl9mcmFtZV9zdG9wX2xvYWRpbmcoKSB0bworICogc3RvcCB0aGUgbG9hZC4g
VGhpcyBmdW5jdGlvbiBpcyB0eXBpY2FsbHkgaW52b2tlZCBvbiB0aGUgbWFpbiBmcmFtZS4KKyAq
Lwordm9pZCB3ZWJraXRfd2ViX2ZyYW1lX2xvYWRfcmVxdWVzdChXZWJLaXRXZWJGcmFtZSogZnJh
bWUsIFdlYktpdE5ldHdvcmtSZXF1ZXN0KiByZXF1ZXN0KQoreworICAgIGdfcmV0dXJuX2lmX2Zh
aWwoV0VCS0lUX0lTX1dFQl9GUkFNRShmcmFtZSkpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VC
S0lUX0lTX05FVFdPUktfUkVRVUVTVChyZXF1ZXN0KSk7CisKKyAgICBGcmFtZSogY29yZUZyYW1l
ID0gY29yZShmcmFtZSk7CisgICAgZ19yZXR1cm5faWZfZmFpbChjb3JlRnJhbWUpOworCisgICAg
Ly8gVE9ETzogVXNlIHRoZSBSZXNvdXJjZVJlcXVlc3QgY2FycmllZCBieSBXZWJLaXROZXR3b3Jr
UmVxdWVzdCB3aGVuIGl0IGdldHMgaW1wbGVtZW50ZWQuCisgICAgRGVwcmVjYXRlZFN0cmluZyBz
dHJpbmcgPSBEZXByZWNhdGVkU3RyaW5nOjpmcm9tVXRmOCh3ZWJraXRfbmV0d29ya19yZXF1ZXN0
X2dldF91cmkocmVxdWVzdCkpOworICAgIGNvcmVGcmFtZS0+bG9hZGVyKCktPmxvYWQoUmVzb3Vy
Y2VSZXF1ZXN0KEtVUkwoc3RyaW5nKSkpOworfQorCisvKioKKyAqIHdlYmtpdF93ZWJfZnJhbWVf
c3RvcF9sb2FkaW5nOgorICogQGZyYW1lOiBhICNXZWJLaXRXZWJGcmFtZQorICoKKyAqIFN0b3Bz
IGFueSBwZW5kaW5nIGxvYWRzIG9uIEBmcmFtZSdzIGRhdGEgc291cmNlLCBhbmQgdGhvc2Ugb2Yg
aXRzIGNoaWxkcmVuLgorICovCit2b2lkIHdlYmtpdF93ZWJfZnJhbWVfc3RvcF9sb2FkaW5nKFdl
YktpdFdlYkZyYW1lKiBmcmFtZSkKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19X
RUJfRlJBTUUoZnJhbWUpKTsKKworICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKGZyYW1lKTsK
KyAgICBnX3JldHVybl9pZl9mYWlsKGNvcmVGcmFtZSk7CisKKyAgICBjb3JlRnJhbWUtPmxvYWRl
cigpLT5zdG9wQWxsTG9hZGVycygpOworfQorCisvKioKKyAqIHdlYmtpdF93ZWJfZnJhbWVfcmVs
b2FkOgorICogQGZyYW1lOiBhICNXZWJLaXRXZWJGcmFtZQorICoKKyAqIFJlbG9hZHMgdGhlIGlu
aXRpYWwgcmVxdWVzdC4KKyAqLwordm9pZCB3ZWJraXRfd2ViX2ZyYW1lX3JlbG9hZChXZWJLaXRX
ZWJGcmFtZSogZnJhbWUpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfV0VCX0ZS
QU1FKGZyYW1lKSk7CisKKyAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShmcmFtZSk7CisgICAg
Z19yZXR1cm5faWZfZmFpbChjb3JlRnJhbWUpOworCisgICAgY29yZUZyYW1lLT5sb2FkZXIoKS0+
cmVsb2FkKCk7Cit9CisKKy8qKgorICogd2Via2l0X3dlYl9mcmFtZV9maW5kX2ZyYW1lOgorICog
QGZyYW1lOiBhICNXZWJLaXRXZWJGcmFtZQorICogQG5hbWU6IHRoZSBuYW1lIG9mIHRoZSBmcmFt
ZSB0byBiZSBmb3VuZAorICoKKyAqIEZvciBwcmUtZGVmaW5lZCBuYW1lcywgcmV0dXJucyBAZnJh
bWUgaWYgQG5hbWUgaXMgIl9zZWxmIiBvciAiX2N1cnJlbnQiLAorICogcmV0dXJucyBAZnJhbWUn
cyBwYXJlbnQgZnJhbWUgaWYgQG5hbWUgaXMgIl9wYXJlbnQiLCBhbmQgcmV0dXJucyB0aGUgbWFp
bgorICogZnJhbWUgaWYgQG5hbWUgaXMgIl90b3AiLiBBbHNvIHJldHVybnMgQGZyYW1lIGlmIGl0
IGlzIHRoZSBtYWluIGZyYW1lIGFuZAorICogQG5hbWUgaXMgZWl0aGVyICJfcGFyZW50IiBvciAi
X3RvcCIuIEZvciBvdGhlciBuYW1lcywgdGhpcyBmdW5jdGlvbiByZXR1cm5zCisgKiB0aGUgZmly
c3QgZnJhbWUgdGhhdCBtYXRjaGVzIEBuYW1lLiBUaGlzIGZ1bmN0aW9uIHNlYXJjaGVzIEBmcmFt
ZSBhbmQgaXRzCisgKiBkZXNjZW5kZW50cyBmaXJzdCwgdGhlbiBAZnJhbWUncyBwYXJlbnQgYW5k
IGl0cyBjaGlsZHJlbiBtb3ZpbmcgdXAgdGhlCisgKiBoaWVyYXJjaHkgdW50aWwgYSBtYXRjaCBp
cyBmb3VuZC4gSWYgbm8gbWF0Y2ggaXMgZm91bmQgaW4gQGZyYW1lJ3MKKyAqIGhpZXJhcmNoeSwg
dGhpcyBmdW5jdGlvbiB3aWxsIHNlYXJjaCBmb3IgYSBtYXRjaGluZyBmcmFtZSBpbiBvdGhlciBt
YWluCisgKiBmcmFtZSBoaWVyYXJjaGllcy4gUmV0dXJucyAlTlVMTCBpZiBubyBtYXRjaCBpcyBm
b3VuZC4KKyAqCisgKiBSZXR1cm4gdmFsdWU6IHRoZSBmb3VuZCAjV2ViS2l0V2ViRnJhbWUgb3Ig
JU5VTEwgaW4gY2FzZSBub25lIGlzIGZvdW5kCisgKi8KK1dlYktpdFdlYkZyYW1lKiB3ZWJraXRf
d2ViX2ZyYW1lX2ZpbmRfZnJhbWUoV2ViS2l0V2ViRnJhbWUqIGZyYW1lLCBjb25zdCBnY2hhciog
bmFtZSkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfV0VCX0ZSQU1FKGZy
YW1lKSwgTlVMTCk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwobmFtZSwgTlVMTCk7CisKKyAg
ICBGcmFtZSogY29yZUZyYW1lID0gY29yZShmcmFtZSk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwoY29yZUZyYW1lLCBOVUxMKTsKKworICAgIFN0cmluZyBuYW1lU3RyaW5nID0gU3RyaW5nOjpm
cm9tVVRGOChuYW1lKTsKKyAgICByZXR1cm4ga2l0KGNvcmVGcmFtZS0+dHJlZSgpLT5maW5kKEF0
b21pY1N0cmluZyhuYW1lU3RyaW5nKSkpOworfQorCisvKioKKyAqIHdlYmtpdF93ZWJfZnJhbWVf
Z2V0X2dsb2JhbF9jb250ZXh0OgorICogQGZyYW1lOiBhICNXZWJLaXRXZWJGcmFtZQorICoKKyAq
IEdldHMgdGhlIGdsb2JhbCBKYXZhU2NyaXB0IGV4ZWN1dGlvbiBjb250ZXh0LiBVc2UgdGhpcyBm
dW5jdGlvbiB0byBicmlkZ2UKKyAqIGJldHdlZW4gdGhlIFdlYktpdCBhbmQgSmF2YVNjcmlwdENv
cmUgQVBJcy4KKyAqCisgKiBSZXR1cm4gdmFsdWU6IHRoZSBnbG9iYWwgSmF2YVNjcmlwdCBjb250
ZXh0CisgKi8KK0pTR2xvYmFsQ29udGV4dFJlZiB3ZWJraXRfd2ViX2ZyYW1lX2dldF9nbG9iYWxf
Y29udGV4dChXZWJLaXRXZWJGcmFtZSogZnJhbWUpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwoV0VCS0lUX0lTX1dFQl9GUkFNRShmcmFtZSksIE5VTEwpOworCisgICAgRnJhbWUqIGNvcmVG
cmFtZSA9IGNvcmUoZnJhbWUpOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGNvcmVGcmFtZSwg
TlVMTCk7CisKKyAgICByZXR1cm4gdG9HbG9iYWxSZWYoY29yZUZyYW1lLT5zY3JpcHRQcm94eSgp
LT5pbnRlcnByZXRlcigpLT5nbG9iYWxFeGVjKCkpOworfQorCit9CkluZGV4OiBXZWJLaXQvZ3Rr
L1dlYlZpZXcvd2Via2l0d2ViZnJhbWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvZ3RrL1dlYlZp
ZXcvd2Via2l0d2ViZnJhbWUuaAkocmV2aXNpb24gMCkKKysrIFdlYktpdC9ndGsvV2ViVmlldy93
ZWJraXR3ZWJmcmFtZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwNSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgorICogQ29weXJpZ2h0
IChDKSAyMDA3IEFscCBUb2tlciA8YWxwQGF0b2tlci5jb20+CisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAK
KyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAK
KyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlLCBJbmMuICgiQXBwbGUiKSBub3IgdGhl
IG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMi
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXRUJLSVRfV0VCX0ZSQU1FX0gK
KyNkZWZpbmUgV0VCS0lUX1dFQl9GUkFNRV9ICisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgor
I2luY2x1ZGUgPGdkay9nZGsuaD4KKworI2luY2x1ZGUgIndlYmtpdGRlZmluZXMuaCIKKworR19C
RUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9UWVBFX1dFQl9GUkFNRSAgICAgICAgICAgICh3
ZWJraXRfd2ViX2ZyYW1lX2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9XRUJfRlJBTUUob2Jq
KSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX1RZ
UEVfV0VCX0ZSQU1FLCBXZWJLaXRXZWJGcmFtZSkpCisjZGVmaW5lIFdFQktJVF9XRUJfRlJBTUVf
Q0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lU
X1RZUEVfV0VCX0ZSQU1FLCBXZWJLaXRXZWJGcmFtZUNsYXNzKSkKKyNkZWZpbmUgV0VCS0lUX0lT
X1dFQl9GUkFNRShvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmop
LCBXRUJLSVRfVFlQRV9XRUJfRlJBTUUpKQorI2RlZmluZSBXRUJLSVRfSVNfV0VCX0ZSQU1FX0NM
QVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9UWVBF
X1dFQl9GUkFNRSkpCisjZGVmaW5lIFdFQktJVF9XRUJfRlJBTUVfR0VUX0NMQVNTKG9iaikgIChH
X1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX1RZUEVfV0VCX0ZSQU1FLCBX
ZWJLaXRXZWJGcmFtZUNsYXNzKSkKKworCitzdHJ1Y3QgX1dlYktpdFdlYkZyYW1lIHsKKyAgICBH
T2JqZWN0IHBhcmVudDsKK307CisKK3N0cnVjdCBfV2ViS2l0V2ViRnJhbWVDbGFzcyB7CisgICAg
R09iamVjdENsYXNzIHBhcmVudDsKKworICAgIHZvaWQgKCp0aXRsZV9jaGFuZ2VkKSAoV2ViS2l0
V2ViRnJhbWUqIGZyYW1lLCBnY2hhciogdGl0bGUsIGdjaGFyKiBsb2NhdGlvbik7CisKKyAgICAv
KgorICAgICAqIHByb3RlY3RlZCB2aXJ0dWFsIG1ldGhvZHMKKyAgICAgKi8KKyAgICB2b2lkICgq
bW91c2VfbW92ZV9ldmVudCkgIChXZWJLaXRXZWJGcmFtZSogZnJhbWUsIEdka0V2ZW50KiBtb3Zl
X2V2ZW50KTsKKyAgICB2b2lkICgqbW91c2VfcHJlc3NfZXZlbnQpIChXZWJLaXRXZWJGcmFtZSog
ZnJhbWUsIEdka0V2ZW50KiBwcmVzc19ldmVudCk7CisgICAgdm9pZCAoKm1vdXNlX3JlbGVhc2Vf
ZXZlbnQpIChXZWJLaXRXZWJGcmFtZSogZnJhbWUsIEdka0V2ZW50KiBtb3VzZV9yZWxlYXNlX2V2
ZW50KTsKKyAgICB2b2lkICgqbW91c2VfZG91YmxlX2NsaWNrX2V2ZW50KSAoV2ViS2l0V2ViRnJh
bWUqIGZyYW1lLCBHZGtFdmVudCogZG91YmxlX2NsaWNrX2V2ZW50KTsKKyAgICB2b2lkICgqbW91
c2Vfd2hlZWxfZXZlbnQpIChXZWJLaXRXZWJGcmFtZSogZnJhbWUsIEdka0V2ZW50KiB3aGVlbF9l
dmVudCk7Cit9OworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJraXRfd2ViX2ZyYW1lX2dldF90eXBl
ICh2b2lkKTsKKworV0VCS0lUX0FQSSBXZWJLaXRXZWJGcmFtZSoKK3dlYmtpdF93ZWJfZnJhbWVf
bmV3IChXZWJLaXRXZWJWaWV3KiB3ZWJfdmlldyk7CisKK1dFQktJVF9BUEkgV2ViS2l0V2ViVmll
dyoKK3dlYmtpdF93ZWJfZnJhbWVfZ2V0X3dlYl92aWV3IChXZWJLaXRXZWJGcmFtZSogZnJhbWUp
OworCitXRUJLSVRfQVBJIGNvbnN0IGdjaGFyKgord2Via2l0X3dlYl9mcmFtZV9nZXRfbmFtZSAo
V2ViS2l0V2ViRnJhbWUqIGZyYW1lKTsKKworV0VCS0lUX0FQSSBjb25zdCBnY2hhcioKK3dlYmtp
dF93ZWJfZnJhbWVfZ2V0X3RpdGxlIChXZWJLaXRXZWJGcmFtZSogZnJhbWUpOworCitXRUJLSVRf
QVBJIGNvbnN0IGdjaGFyKgord2Via2l0X3dlYl9mcmFtZV9nZXRfbG9jYXRpb24gKFdlYktpdFdl
YkZyYW1lKiBmcmFtZSk7CisKK1dFQktJVF9BUEkgV2ViS2l0V2ViRnJhbWUqCit3ZWJraXRfd2Vi
X2ZyYW1lX2dldF9wYXJlbnQgKFdlYktpdFdlYkZyYW1lKiBmcmFtZSk7CisKK1dFQktJVF9BUEkg
dm9pZAord2Via2l0X3dlYl9mcmFtZV9sb2FkX3JlcXVlc3QgKFdlYktpdFdlYkZyYW1lKiBmcmFt
ZSwgV2ViS2l0TmV0d29ya1JlcXVlc3QqIHJlcXVlc3QpOworCitXRUJLSVRfQVBJIHZvaWQKK3dl
YmtpdF93ZWJfZnJhbWVfc3RvcF9sb2FkaW5nIChXZWJLaXRXZWJGcmFtZSogZnJhbWUpOworCitX
RUJLSVRfQVBJIHZvaWQKK3dlYmtpdF93ZWJfZnJhbWVfcmVsb2FkIChXZWJLaXRXZWJGcmFtZSog
ZnJhbWUpOworCitXRUJLSVRfQVBJIFdlYktpdFdlYkZyYW1lKgord2Via2l0X3dlYl9mcmFtZV9m
aW5kX2ZyYW1lIChXZWJLaXRXZWJGcmFtZSogZnJhbWUsIGNvbnN0IGdjaGFyKiBuYW1lKTsKKwor
V0VCS0lUX0FQSSBKU0dsb2JhbENvbnRleHRSZWYKK3dlYmtpdF93ZWJfZnJhbWVfZ2V0X2dsb2Jh
bF9jb250ZXh0IChXZWJLaXRXZWJGcmFtZSogZnJhbWUpOworCitHX0VORF9ERUNMUworCisjZW5k
aWYKSW5kZXg6IFdlYktpdC9ndGsvV2ViVmlldy93ZWJraXR3ZWJ2aWV3LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0d2Vidmlldy5jcHAJKHJldmlzaW9uIDApCisr
KyBXZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0d2Vidmlldy5jcHAJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsODU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVy
IEZyZXl0aGVyCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQ2hyaXN0aWFuIER5d2FuIDxjaHJpc3Rp
YW5AdHdvdG9hc3RzLmRlPgorICogQ29weXJpZ2h0IChDKSAyMDA3IFhhbiBMb3BleiA8eGFuQGdu
b21lLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBBbHAgVG9rZXIgPGFscEBhdG9rZXIuY29t
PgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4gCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4gCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSwg
SW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAg
ICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uIAorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElU
UyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwor
ICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIndlYmtpdHdlYnZpZXcuaCIKKyNpbmNsdWRlICJ3
ZWJraXQtbWFyc2hhbC5oIgorI2luY2x1ZGUgIndlYmtpdHByaXZhdGUuaCIKKworI2luY2x1ZGUg
Ik5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiQ2hyb21lQ2xpZW50R3RrLmgiCisjaW5jbHVk
ZSAiQ29udGV4dE1lbnVDbGllbnRHdGsuaCIKKyNpbmNsdWRlICJEcmFnQ2xpZW50R3RrLmgiCisj
aW5jbHVkZSAiRWRpdG9yQ2xpZW50R3RrLmgiCisjaW5jbHVkZSAiRXZlbnRIYW5kbGVyLmgiCisj
aW5jbHVkZSAiSGl0VGVzdFJlcXVlc3QuaCIKKyNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCisj
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yQ2xpZW50R3Rr
LmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKKyNpbmNsdWRlICJGcmFtZVZpZXcuaCIKKyNp
bmNsdWRlICJQbGF0Zm9ybUtleWJvYXJkRXZlbnQuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVdoZWVs
RXZlbnQuaCIKKyNpbmNsdWRlICJTdWJzdGl0dXRlRGF0YS5oIgorCisjaW5jbHVkZSA8Z2RrL2dk
a2tleXN5bXMuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKK3VzaW5nIG5hbWVzcGFjZSBX
ZWJDb3JlOworCitleHRlcm4gIkMiIHsKKworZW51bSB7CisgICAgLyogbm9ybWFsIHNpZ25hbHMg
Ki8KKyAgICBOQVZJR0FUSU9OX1JFUVVFU1RFRCwKKyAgICBXSU5ET1dfT0JKRUNUX0NMRUFSRUQs
CisgICAgTE9BRF9TVEFSVEVELAorICAgIExPQURfUFJPR1JFU1NfQ0hBTkdFRCwKKyAgICBMT0FE
X0ZJTklTSEVELAorICAgIFRJVExFX0NIQU5HRUQsCisgICAgSE9WRVJJTkdfT1ZFUl9MSU5LLAor
ICAgIFNUQVRVU19CQVJfVEVYVF9DSEFOR0VELAorICAgIElDT05EX0xPQURFRCwKKyAgICBTRUxF
Q1RJT05fQ0hBTkdFRCwKKyAgICBDT05TT0xFX01FU1NBR0UsCisgICAgU0NSSVBUX0FMRVJULAor
ICAgIFNDUklQVF9DT05GSVJNLAorICAgIFNDUklQVF9QUk9NUFQsCisgICAgTEFTVF9TSUdOQUwK
K307CisKK3N0YXRpYyBndWludCB3ZWJraXRfd2ViX3ZpZXdfc2lnbmFsc1tMQVNUX1NJR05BTF0g
PSB7IDAsIH07CisKK0dfREVGSU5FX1RZUEUoV2ViS2l0V2ViVmlldywgd2Via2l0X3dlYl92aWV3
LCBHVEtfVFlQRV9DT05UQUlORVIpCisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfd2ViX3ZpZXdf
ZXhwb3NlX2V2ZW50KEd0a1dpZGdldCogd2lkZ2V0LCBHZGtFdmVudEV4cG9zZSogZXZlbnQpCit7
CisgICAgRnJhbWUqIGZyYW1lID0gY29yZShnZXRGcmFtZUZyb21WaWV3KFdFQktJVF9XRUJfVklF
Vyh3aWRnZXQpKSk7CisgICAgR2RrUmVjdGFuZ2xlIGNsaXA7CisgICAgZ2RrX3JlZ2lvbl9nZXRf
Y2xpcGJveChldmVudC0+cmVnaW9uLCAmY2xpcCk7CisgICAgY2Fpcm9fdCogY3IgPSBnZGtfY2Fp
cm9fY3JlYXRlKGV2ZW50LT53aW5kb3cpOworICAgIEdyYXBoaWNzQ29udGV4dCBjdHgoY3IpOwor
ICAgIGN0eC5zZXRHZGtFeHBvc2VFdmVudChldmVudCk7CisgICAgaWYgKGZyYW1lLT5yZW5kZXJl
cigpKSB7CisgICAgICAgIGZyYW1lLT52aWV3KCktPmxheW91dElmTmVlZGVkUmVjdXJzaXZlKCk7
CisgICAgICAgIGZyYW1lLT52aWV3KCktPnBhaW50KCZjdHgsIGNsaXApOworICAgIH0KKyAgICBj
YWlyb19kZXN0cm95KGNyKTsKKworICAgIHJldHVybiBGQUxTRTsKK30KKworc3RhdGljIGdib29s
ZWFuIHdlYmtpdF93ZWJfdmlld19rZXlfZXZlbnQoR3RrV2lkZ2V0KiB3aWRnZXQsIEdka0V2ZW50
S2V5KiBldmVudCkKK3sKKyAgICBGcmFtZSogZnJhbWUgPSBjb3JlKGdldEZyYW1lRnJvbVZpZXco
V0VCS0lUX1dFQl9WSUVXKHdpZGdldCkpKTsKKyAgICBQbGF0Zm9ybUtleWJvYXJkRXZlbnQga2V5
Ym9hcmRFdmVudChldmVudCk7CisKKyAgICBpZiAoZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5rZXlF
dmVudChrZXlib2FyZEV2ZW50KSkKKyAgICAgICAgcmV0dXJuIFRSVUU7CisKKyAgICBpZiAoZXZl
bnQtPnR5cGUgIT0gR0RLX0tFWV9QUkVTUykKKyAgICAgICAgcmV0dXJuIEZBTFNFOworCisgICAg
RnJhbWVWaWV3KiB2aWV3ID0gZnJhbWUtPnZpZXcoKTsKKworICAgIC8qIEZJWE1FOiBhdCB0aGUg
dmVyeSBsZWFzdCB3ZSBzaG91bGQgYmUgdXNpbmcgdGhlIHNhbWUgY29kZSB0aGFuIHRoZQorICAg
ICAgIFdpbmRvd3MgcG9ydCBoZXJlLCBidXQgb3VyIFNjcm9sbFZpZXcgZmlsZSBkaXZlcmdlcyBl
bm91Z2ggdG8gbWFrZQorICAgICAgIHRoYXQgaW1wb3NzaWJsZS4gQSBzaG9ydCB0ZXJtIHNvbHV0
aW9uIHdvdWxkIGJlIHRvIHVuaWZ5IFNjcm9sbFZpZXdXaW4KKyAgICAgICBhbmQgU2Nyb2xsVmll
d0d0ay4gTG9uZy10ZXJtIFNjcm9sbFZpZXcgYW5kIEZyYW1lVmlldyBzaG91bGQgYmUKKyAgICAg
ICB1bmlmaWVkIGFuZCB1c2VkIGV2ZXJ5d2hlcmUgZm9yIHNjcm9sbGJhcnMgKi8KKworICAgIHN3
aXRjaCAoZXZlbnQtPmtleXZhbCkgeworICAgIGNhc2UgKEdES19Eb3duKToKKyAgICAgICAgdmll
dy0+c2Nyb2xsQnkoMCwgTElORV9TVEVQKTsKKyAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgY2Fz
ZSAoR0RLX1VwKToKKyAgICAgICAgdmlldy0+c2Nyb2xsQnkoMCwgLUxJTkVfU1RFUCk7CisgICAg
ICAgIHJldHVybiBUUlVFOworICAgIGNhc2UgKEdES19SaWdodCk6CisgICAgICAgIHZpZXctPnNj
cm9sbEJ5KExJTkVfU1RFUCwgMCk7CisgICAgICAgIHJldHVybiBUUlVFOworICAgIGNhc2UgKEdE
S19MZWZ0KToKKyAgICAgICAgdmlldy0+c2Nyb2xsQnkoLUxJTkVfU1RFUCwgMCk7CisgICAgICAg
IHJldHVybiBUUlVFOworICAgIH0KKworICAgIHJldHVybiBGQUxTRTsKK30KKworc3RhdGljIGdi
b29sZWFuIHdlYmtpdF93ZWJfdmlld19idXR0b25fZXZlbnQoR3RrV2lkZ2V0KiB3aWRnZXQsIEdk
a0V2ZW50QnV0dG9uKiBldmVudCkKK3sKKyAgICBGcmFtZSogZnJhbWUgPSBjb3JlKGdldEZyYW1l
RnJvbVZpZXcoV0VCS0lUX1dFQl9WSUVXKHdpZGdldCkpKTsKKworICAgIGlmIChldmVudC0+dHlw
ZSA9PSBHREtfQlVUVE9OX1JFTEVBU0UpCisgICAgICAgIHJldHVybiBmcmFtZS0+ZXZlbnRIYW5k
bGVyKCktPmhhbmRsZU1vdXNlUmVsZWFzZUV2ZW50KFBsYXRmb3JtTW91c2VFdmVudChldmVudCkp
OworCisgICAgLy8gRklYTUU6IG5lZWQgdG8ga2VlcCB0cmFjayBvZiBzdWJmcmFtZSBmb2N1cyBm
b3Iga2V5IGV2ZW50cworICAgIGd0a193aWRnZXRfZ3JhYl9mb2N1cyhHVEtfV0lER0VUKHdpZGdl
dCkpOworICAgIHJldHVybiBmcmFtZS0+ZXZlbnRIYW5kbGVyKCktPmhhbmRsZU1vdXNlUHJlc3NF
dmVudChQbGF0Zm9ybU1vdXNlRXZlbnQoZXZlbnQpKTsKK30KKworc3RhdGljIGdib29sZWFuIHdl
YmtpdF93ZWJfdmlld19tb3Rpb25fZXZlbnQoR3RrV2lkZ2V0KiB3aWRnZXQsIEdka0V2ZW50TW90
aW9uKiBldmVudCkKK3sKKyAgICBGcmFtZSogZnJhbWUgPSBjb3JlKGdldEZyYW1lRnJvbVZpZXco
V0VCS0lUX1dFQl9WSUVXKHdpZGdldCkpKTsKKyAgICByZXR1cm4gZnJhbWUtPmV2ZW50SGFuZGxl
cigpLT5tb3VzZU1vdmVkKFBsYXRmb3JtTW91c2VFdmVudChldmVudCkpOworfQorCitzdGF0aWMg
Z2Jvb2xlYW4gd2Via2l0X3dlYl92aWV3X3Njcm9sbF9ldmVudChHdGtXaWRnZXQqIHdpZGdldCwg
R2RrRXZlbnRTY3JvbGwqIGV2ZW50KQoreworICAgIEZyYW1lKiBmcmFtZSA9IGNvcmUoZ2V0RnJh
bWVGcm9tVmlldyhXRUJLSVRfV0VCX1ZJRVcod2lkZ2V0KSkpOworICAgIFBsYXRmb3JtV2hlZWxF
dmVudCB3aGVlbEV2ZW50KGV2ZW50KTsKKyAgICByZXR1cm4gZnJhbWUtPmV2ZW50SGFuZGxlcigp
LT5oYW5kbGVXaGVlbEV2ZW50KHdoZWVsRXZlbnQpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRf
d2ViX3ZpZXdfc2l6ZV9hbGxvY2F0ZShHdGtXaWRnZXQqIHdpZGdldCwgR3RrQWxsb2NhdGlvbiog
YWxsb2NhdGlvbikKK3sKKyAgICBHVEtfV0lER0VUX0NMQVNTKHdlYmtpdF93ZWJfdmlld19wYXJl
bnRfY2xhc3MpLT5zaXplX2FsbG9jYXRlKHdpZGdldCxhbGxvY2F0aW9uKTsKKworICAgIEZyYW1l
KiBmcmFtZSA9IGNvcmUoZ2V0RnJhbWVGcm9tVmlldyhXRUJLSVRfV0VCX1ZJRVcod2lkZ2V0KSkp
OworICAgIGZyYW1lLT52aWV3KCktPnJlc2l6ZShhbGxvY2F0aW9uLT53aWR0aCwgYWxsb2NhdGlv
bi0+aGVpZ2h0KTsKKyAgICBmcmFtZS0+Zm9yY2VMYXlvdXQoKTsKKyAgICBmcmFtZS0+dmlldygp
LT5hZGp1c3RWaWV3U2l6ZSgpOworICAgIGZyYW1lLT5zZW5kUmVzaXplRXZlbnQoKTsKK30KKwor
c3RhdGljIHZvaWQgd2Via2l0X3dlYl92aWV3X3JlYWxpemUoR3RrV2lkZ2V0KiB3aWRnZXQpCit7
CisgICAgR1RLX1dJREdFVF9TRVRfRkxBR1Mod2lkZ2V0LCBHVEtfUkVBTElaRUQpOworCisgICAg
R2RrV2luZG93QXR0ciBhdHRyaWJ1dGVzOworICAgIGF0dHJpYnV0ZXMud2luZG93X3R5cGUgPSBH
REtfV0lORE9XX0NISUxEOworICAgIGF0dHJpYnV0ZXMueCA9IHdpZGdldC0+YWxsb2NhdGlvbi54
OworICAgIGF0dHJpYnV0ZXMueSA9IHdpZGdldC0+YWxsb2NhdGlvbi55OworICAgIGF0dHJpYnV0
ZXMud2lkdGggPSB3aWRnZXQtPmFsbG9jYXRpb24ud2lkdGg7CisgICAgYXR0cmlidXRlcy5oZWln
aHQgPSB3aWRnZXQtPmFsbG9jYXRpb24uaGVpZ2h0OworICAgIGF0dHJpYnV0ZXMud2NsYXNzID0g
R0RLX0lOUFVUX09VVFBVVDsKKyAgICBhdHRyaWJ1dGVzLnZpc3VhbCA9IGd0a193aWRnZXRfZ2V0
X3Zpc3VhbCAod2lkZ2V0KTsKKyAgICBhdHRyaWJ1dGVzLmNvbG9ybWFwID0gZ3RrX3dpZGdldF9n
ZXRfY29sb3JtYXAgKHdpZGdldCk7CisgICAgYXR0cmlidXRlcy5ldmVudF9tYXNrID0gR0RLX1ZJ
U0lCSUxJVFlfTk9USUZZX01BU0sKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEdES19F
WFBPU1VSRV9NQVNLCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBHREtfQlVUVE9OX1BS
RVNTX01BU0sKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEdES19CVVRUT05fUkVMRUFT
RV9NQVNLCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBHREtfUE9JTlRFUl9NT1RJT05f
TUFTSworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgR0RLX0tFWV9QUkVTU19NQVNLCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBHREtfS0VZX1JFTEVBU0VfTUFTSworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHwgR0RLX0JVVFRPTl9NT1RJT05fTUFTSworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHwgR0RLX0JVVFRPTjFfTU9USU9OX01BU0sKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB8IEdES19CVVRUT04yX01PVElPTl9NQVNLCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfCBHREtfQlVUVE9OM19NT1RJT05fTUFTSzsKKworICAgIGdpbnQgYXR0
cmlidXRlc19tYXNrID0gR0RLX1dBX1ggfCBHREtfV0FfWSB8IEdES19XQV9WSVNVQUwgfCBHREtf
V0FfQ09MT1JNQVA7CisgICAgd2lkZ2V0LT53aW5kb3cgPSBnZGtfd2luZG93X25ldyhndGtfd2lk
Z2V0X2dldF9wYXJlbnRfd2luZG93ICh3aWRnZXQpLCAmYXR0cmlidXRlcywgYXR0cmlidXRlc19t
YXNrKTsKKyAgICBnZGtfd2luZG93X3NldF91c2VyX2RhdGEod2lkZ2V0LT53aW5kb3csIHdpZGdl
dCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF93ZWJfdmlld19zZXRfc2Nyb2xsX2FkanVzdG1l
bnRzKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIEd0a0FkanVzdG1lbnQqIGhhZGosIEd0a0FkanVz
dG1lbnQqIHZhZGopCit7CisgICAgRnJhbWVWaWV3KiB2aWV3ID0gY29yZShnZXRGcmFtZUZyb21W
aWV3KHdlYlZpZXcpKS0+dmlldygpOworICAgIHZpZXctPnNldEd0a0FkanVzdG1lbnRzKGhhZGos
IHZhZGopOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfY29udGFpbmVyX2FkZChH
dGtDb250YWluZXIqIGNvbnRhaW5lciwgR3RrV2lkZ2V0KiB3aWRnZXQpCit7CisgICAgV2ViS2l0
V2ViVmlldyogd2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyhjb250YWluZXIpOworICAgIFdlYktp
dFdlYlZpZXdQcml2YXRlKiBwcml2YXRlX2RhdGEgPSBXRUJLSVRfV0VCX1ZJRVdfR0VUX1BSSVZB
VEUod2ViVmlldyk7CisKKyAgICBwcml2YXRlX2RhdGEtPmNoaWxkcmVuLmFkZCh3aWRnZXQpOwor
ICAgIGlmIChHVEtfV0lER0VUX1JFQUxJWkVEKGNvbnRhaW5lcikpCisgICAgICAgIGd0a193aWRn
ZXRfc2V0X3BhcmVudF93aW5kb3cod2lkZ2V0LCBHVEtfV0lER0VUKHdlYlZpZXcpLT53aW5kb3cp
OworICAgIGd0a193aWRnZXRfc2V0X3BhcmVudCh3aWRnZXQsIEdUS19XSURHRVQoY29udGFpbmVy
KSk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF93ZWJfdmlld19jb250YWluZXJfcmVtb3ZlKEd0
a0NvbnRhaW5lciogY29udGFpbmVyLCBHdGtXaWRnZXQqIHdpZGdldCkKK3sKKyAgICBXZWJLaXRX
ZWJWaWV3UHJpdmF0ZSogcHJpdmF0ZV9kYXRhID0gV0VCS0lUX1dFQl9WSUVXX0dFVF9QUklWQVRF
KFdFQktJVF9XRUJfVklFVyhjb250YWluZXIpKTsKKworICAgIGlmIChwcml2YXRlX2RhdGEtPmNo
aWxkcmVuLmNvbnRhaW5zKHdpZGdldCkpIHsKKyAgICAgICAgZ3RrX3dpZGdldF91bnBhcmVudCh3
aWRnZXQpOworICAgICAgICBwcml2YXRlX2RhdGEtPmNoaWxkcmVuLnJlbW92ZSh3aWRnZXQpOwor
ICAgIH0KK30KKworc3RhdGljIHZvaWQgd2Via2l0X3dlYl92aWV3X2NvbnRhaW5lcl9mb3JhbGwo
R3RrQ29udGFpbmVyKiBjb250YWluZXIsIGdib29sZWFuLCBHdGtDYWxsYmFjayBjYWxsYmFjaywg
Z3BvaW50ZXIgY2FsbGJhY2tEYXRhKQoreworICAgIFdlYktpdFdlYlZpZXdQcml2YXRlKiBwcml2
YXRlRGF0YSA9IFdFQktJVF9XRUJfVklFV19HRVRfUFJJVkFURShXRUJLSVRfV0VCX1ZJRVcoY29u
dGFpbmVyKSk7CisKKyAgICBIYXNoU2V0PEd0a1dpZGdldCo+IGNoaWxkcmVuID0gcHJpdmF0ZURh
dGEtPmNoaWxkcmVuOworICAgIEhhc2hTZXQ8R3RrV2lkZ2V0Kj46OmNvbnN0X2l0ZXJhdG9yIGVu
ZCA9IGNoaWxkcmVuLmVuZCgpOworICAgIGZvciAoSGFzaFNldDxHdGtXaWRnZXQqPjo6Y29uc3Rf
aXRlcmF0b3IgY3VycmVudCA9IGNoaWxkcmVuLmJlZ2luKCk7IGN1cnJlbnQgIT0gZW5kOyArK2N1
cnJlbnQpCisgICAgICAgICgqY2FsbGJhY2spKCpjdXJyZW50LCBjYWxsYmFja0RhdGEpOworfQor
CitzdGF0aWMgV2ViS2l0V2ViVmlldyogd2Via2l0X3dlYl92aWV3X3JlYWxfY3JlYXRlX3dlYl92
aWV3KFdlYktpdFdlYlZpZXcqKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJu
IDA7Cit9CisKK3N0YXRpYyBXZWJLaXROYXZpZ2F0aW9uUmVzcG9uc2Ugd2Via2l0X3dlYl92aWV3
X3JlYWxfbmF2aWdhdGlvbl9yZXF1ZXN0ZWQoV2ViS2l0V2ViVmlldyosIFdlYktpdFdlYkZyYW1l
KiBmcmFtZSwgV2ViS2l0TmV0d29ya1JlcXVlc3QqKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7
CisgICAgcmV0dXJuIFdFQktJVF9OQVZJR0FUSU9OX1JFU1BPTlNFX0FDQ0VQVDsKK30KKworc3Rh
dGljIHZvaWQgd2Via2l0X3dlYl92aWV3X3JlYWxfd2luZG93X29iamVjdF9jbGVhcmVkKFdlYktp
dFdlYlZpZXcqLCBXZWJLaXRXZWJGcmFtZSosIEpTR2xvYmFsQ29udGV4dFJlZiBjb250ZXh0LCBK
U09iamVjdFJlZiB3aW5kb3dfb2JqZWN0KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisK
K3N0YXRpYyBnY2hhciogd2Via2l0X3dlYl92aWV3X3JlYWxfY2hvb3NlX2ZpbGUoV2ViS2l0V2Vi
VmlldyosIFdlYktpdFdlYkZyYW1lKiwgY29uc3QgZ2NoYXIqIG9sZF9uYW1lKQoreworICAgIG5v
dEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIGdfc3RyZHVwKG9sZF9uYW1lKTsKK30KKwordHlw
ZWRlZiBlbnVtIHsKKyAgICBXRUJLSVRfU0NSSVBUX0RJQUxPR19BTEVSVCwKKyAgICBXRUJLSVRf
U0NSSVBUX0RJQUxPR19DT05GSVJNLAorICAgIFdFQktJVF9TQ1JJUFRfRElBTE9HX1BST01QVAor
IH0gV2ViS2l0U2NyaXB0RGlhbG9nVHlwZTsKKworc3RhdGljIGdib29sZWFuIHdlYmtpdF93ZWJf
dmlld19zY3JpcHRfZGlhbG9nKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIFdlYktpdFdlYkZyYW1l
KiBmcmFtZSwgY29uc3QgZ2NoYXIqIG1lc3NhZ2UsIFdlYktpdFNjcmlwdERpYWxvZ1R5cGUgdHlw
ZSwgY29uc3QgZ2NoYXIqIGRlZmF1bHRWYWx1ZSwgZ2NoYXIqKiB2YWx1ZSkKK3sKKyAgICBHdGtN
ZXNzYWdlVHlwZSBtZXNzYWdlVHlwZTsKKyAgICBHdGtCdXR0b25zVHlwZSBidXR0b25zOworICAg
IGdpbnQgZGVmYXVsdFJlc3BvbnNlOworICAgIEd0a1dpZGdldCogd2luZG93OworICAgIEd0a1dp
ZGdldCogZGlhbG9nOworICAgIEd0a1dpZGdldCogZW50cnkgPSAwOworICAgIGdib29sZWFuIGRp
ZENvbmZpcm0gPSBGQUxTRTsKKworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgV0VCS0lU
X1NDUklQVF9ESUFMT0dfQUxFUlQ6CisgICAgICAgIG1lc3NhZ2VUeXBlID0gR1RLX01FU1NBR0Vf
V0FSTklORzsKKyAgICAgICAgYnV0dG9ucyA9IEdUS19CVVRUT05TX0NMT1NFOworICAgICAgICBk
ZWZhdWx0UmVzcG9uc2UgPSBHVEtfUkVTUE9OU0VfQ0xPU0U7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgV0VCS0lUX1NDUklQVF9ESUFMT0dfQ09ORklSTToKKyAgICAgICAgbWVzc2FnZVR5cGUg
PSBHVEtfTUVTU0FHRV9RVUVTVElPTjsKKyAgICAgICAgYnV0dG9ucyA9IEdUS19CVVRUT05TX1lF
U19OTzsKKyAgICAgICAgZGVmYXVsdFJlc3BvbnNlID0gR1RLX1JFU1BPTlNFX1lFUzsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBXRUJLSVRfU0NSSVBUX0RJQUxPR19QUk9NUFQ6CisgICAgICAg
IG1lc3NhZ2VUeXBlID0gR1RLX01FU1NBR0VfUVVFU1RJT047CisgICAgICAgIGJ1dHRvbnMgPSBH
VEtfQlVUVE9OU19PS19DQU5DRUw7CisgICAgICAgIGRlZmF1bHRSZXNwb25zZSA9IEdUS19SRVNQ
T05TRV9PSzsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgZ193YXJuaW5n
KCJVbmtub3duIHZhbHVlIGZvciBXZWJLaXRTY3JpcHREaWFsb2dUeXBlLiIpOworICAgICAgICBy
ZXR1cm4gRkFMU0U7CisgICAgfQorCisgICAgd2luZG93ID0gZ3RrX3dpZGdldF9nZXRfdG9wbGV2
ZWwoR1RLX1dJREdFVCh3ZWJWaWV3KSk7CisgICAgZGlhbG9nID0gZ3RrX21lc3NhZ2VfZGlhbG9n
X25ldyhHVEtfV0lER0VUX1RPUExFVkVMKHdpbmRvdykgPyBHVEtfV0lORE9XKHdpbmRvdykgOiAw
LCBHVEtfRElBTE9HX0RFU1RST1lfV0lUSF9QQVJFTlQsIG1lc3NhZ2VUeXBlLCBidXR0b25zLCAi
JXMiLCBtZXNzYWdlKTsKKyAgICBnY2hhciogdGl0bGUgPSBnX3N0cmNvbmNhdCgiSmF2YVNjcmlw
dCAtICIsIHdlYmtpdF93ZWJfZnJhbWVfZ2V0X2xvY2F0aW9uKGZyYW1lKSwgTlVMTCk7CisgICAg
Z3RrX3dpbmRvd19zZXRfdGl0bGUoR1RLX1dJTkRPVyhkaWFsb2cpLCB0aXRsZSk7CisgICAgZ19m
cmVlKHRpdGxlKTsKKworICAgIGlmICh0eXBlID09IFdFQktJVF9TQ1JJUFRfRElBTE9HX1BST01Q
VCkgeworICAgICAgICBlbnRyeSA9IGd0a19lbnRyeV9uZXcoKTsKKyAgICAgICAgZ3RrX2VudHJ5
X3NldF90ZXh0KEdUS19FTlRSWShlbnRyeSksIGRlZmF1bHRWYWx1ZSk7CisgICAgICAgIGd0a19j
b250YWluZXJfYWRkKEdUS19DT05UQUlORVIoR1RLX0RJQUxPRyhkaWFsb2cpLT52Ym94KSwgZW50
cnkpOworICAgICAgICBndGtfZW50cnlfc2V0X2FjdGl2YXRlc19kZWZhdWx0KEdUS19FTlRSWShl
bnRyeSksIFRSVUUpOworICAgICAgICBndGtfd2lkZ2V0X3Nob3coZW50cnkpOworICAgIH0KKwor
ICAgIGd0a19kaWFsb2dfc2V0X2RlZmF1bHRfcmVzcG9uc2UoR1RLX0RJQUxPRyhkaWFsb2cpLCBk
ZWZhdWx0UmVzcG9uc2UpOworICAgIGdpbnQgcmVzcG9uc2UgPSBndGtfZGlhbG9nX3J1bihHVEtf
RElBTE9HKGRpYWxvZykpOworCisgICAgc3dpdGNoIChyZXNwb25zZSkgeworICAgIGNhc2UgR1RL
X1JFU1BPTlNFX1lFUzoKKyAgICAgICAgZGlkQ29uZmlybSA9IFRSVUU7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgR1RLX1JFU1BPTlNFX09LOgorICAgICAgICBkaWRDb25maXJtID0gVFJVRTsK
KyAgICAgICAgaWYgKGVudHJ5KQorICAgICAgICAgICAgKnZhbHVlID0gZ19zdHJkdXAoZ3RrX2Vu
dHJ5X2dldF90ZXh0KEdUS19FTlRSWShlbnRyeSkpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgKnZhbHVlID0gMDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHVEtfUkVTUE9OU0VfTk86
CisgICAgY2FzZSBHVEtfUkVTUE9OU0VfQ0FOQ0VMOgorICAgICAgICBkaWRDb25maXJtID0gRkFM
U0U7CisgICAgICAgIGJyZWFrOworCisgICAgfQorICAgIGd0a193aWRnZXRfZGVzdHJveShHVEtf
V0lER0VUKGRpYWxvZykpOworICAgIHJldHVybiBkaWRDb25maXJtOworfQorCitzdGF0aWMgZ2Jv
b2xlYW4gd2Via2l0X3dlYl92aWV3X3JlYWxfc2NyaXB0X2FsZXJ0KFdlYktpdFdlYlZpZXcqIHdl
YlZpZXcsIFdlYktpdFdlYkZyYW1lKiBmcmFtZSwgY29uc3QgZ2NoYXIqIG1lc3NhZ2UpCit7Cisg
ICAgd2Via2l0X3dlYl92aWV3X3NjcmlwdF9kaWFsb2cod2ViVmlldywgZnJhbWUsIG1lc3NhZ2Us
IFdFQktJVF9TQ1JJUFRfRElBTE9HX0FMRVJULCAwLCAwKTsKKyAgICByZXR1cm4gVFJVRTsKK30K
Kworc3RhdGljIGdib29sZWFuIHdlYmtpdF93ZWJfdmlld19yZWFsX3NjcmlwdF9jb25maXJtKFdl
YktpdFdlYlZpZXcqIHdlYlZpZXcsIFdlYktpdFdlYkZyYW1lKiBmcmFtZSwgY29uc3QgZ2NoYXIq
IG1lc3NhZ2UsIGdib29sZWFuKiBkaWRDb25maXJtKQoreworICAgICpkaWRDb25maXJtID0gd2Vi
a2l0X3dlYl92aWV3X3NjcmlwdF9kaWFsb2cod2ViVmlldywgZnJhbWUsIG1lc3NhZ2UsIFdFQktJ
VF9TQ1JJUFRfRElBTE9HX0NPTkZJUk0sIDAsIDApOworICAgIHJldHVybiBUUlVFOworfQorCitz
dGF0aWMgZ2Jvb2xlYW4gd2Via2l0X3dlYl92aWV3X3JlYWxfc2NyaXB0X3Byb21wdChXZWJLaXRX
ZWJWaWV3KiB3ZWJWaWV3LCBXZWJLaXRXZWJGcmFtZSogZnJhbWUsIGNvbnN0IGdjaGFyKiBtZXNz
YWdlLCBjb25zdCBnY2hhciogZGVmYXVsdFZhbHVlLCBnY2hhcioqIHZhbHVlKQoreworICAgIGlm
ICghd2Via2l0X3dlYl92aWV3X3NjcmlwdF9kaWFsb2cod2ViVmlldywgZnJhbWUsIG1lc3NhZ2Us
IFdFQktJVF9TQ1JJUFRfRElBTE9HX1BST01QVCwgZGVmYXVsdFZhbHVlLCB2YWx1ZSkpCisgICAg
ICAgICp2YWx1ZSA9IE5VTEw7CisgICAgcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyBnYm9vbGVh
biB3ZWJraXRfd2ViX3ZpZXdfcmVhbF9jb25zb2xlX21lc3NhZ2UoV2ViS2l0V2ViVmlldyogd2Vi
VmlldywgY29uc3QgZ2NoYXIqIG1lc3NhZ2UsIHVuc2lnbmVkIGludCBsaW5lLCBjb25zdCBnY2hh
ciogc291cmNlSWQpCit7CisgICAgZ19wcmludCgiY29uc29sZSBtZXNzYWdlOiAlcyBAJWQ6ICVz
XG4iLCBzb3VyY2VJZCwgbGluZSwgbWVzc2FnZSk7CisgICAgcmV0dXJuIFRSVUU7Cit9CisKK3N0
YXRpYyB2b2lkIHdlYmtpdF93ZWJfdmlld19maW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCit7Cisg
ICAgd2Via2l0X3dlYl92aWV3X3N0b3BfbG9hZGluZyhXRUJLSVRfV0VCX1ZJRVcob2JqZWN0KSk7
CisKKyAgICBXZWJLaXRXZWJWaWV3UHJpdmF0ZSogd2ViVmlld0RhdGEgPSBXRUJLSVRfV0VCX1ZJ
RVdfR0VUX1BSSVZBVEUoV0VCS0lUX1dFQl9WSUVXKG9iamVjdCkpOworICAgIGRlbGV0ZSB3ZWJW
aWV3RGF0YS0+Y29yZVBhZ2U7CisgICAgZGVsZXRlIHdlYlZpZXdEYXRhLT5zZXR0aW5nczsKKyAg
ICBnX29iamVjdF91bnJlZih3ZWJWaWV3RGF0YS0+bWFpbkZyYW1lKTsKKyAgICBkZWxldGUgd2Vi
Vmlld0RhdGEtPnVzZXJBZ2VudDsKKworICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF93ZWJfdmll
d19wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShvYmplY3QpOworfQorCitzdGF0aWMgdm9pZCB3ZWJr
aXRfd2ViX3ZpZXdfY2xhc3NfaW5pdChXZWJLaXRXZWJWaWV3Q2xhc3MqIHdlYlZpZXdDbGFzcykK
K3sKKyAgICBnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUod2ViVmlld0NsYXNzLCBzaXplb2YoV2Vi
S2l0V2ViVmlld1ByaXZhdGUpKTsKKworICAgIC8qCisgICAgICogU2lnbmFscworICAgICAqLwor
CisgICAgd2Via2l0X3dlYl92aWV3X3NpZ25hbHNbTkFWSUdBVElPTl9SRVFVRVNURURdID0gZ19z
aWduYWxfbmV3KCJuYXZpZ2F0aW9uX3JlcXVlc3RlZCIsCisgICAgICAgICAgICBHX1RZUEVfRlJP
TV9DTEFTUyh3ZWJWaWV3Q2xhc3MpLAorICAgICAgICAgICAgKEdTaWduYWxGbGFncykoR19TSUdO
QUxfUlVOX0xBU1QgfCBHX1NJR05BTF9BQ1RJT04pLAorICAgICAgICAgICAgR19TVFJVQ1RfT0ZG
U0VUIChXZWJLaXRXZWJWaWV3Q2xhc3MsIG5hdmlnYXRpb25fcmVxdWVzdGVkKSwKKyAgICAgICAg
ICAgIE5VTEwsCisgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAgd2Via2l0X21hcnNoYWxf
SU5UX19PQkpFQ1RfT0JKRUNULAorICAgICAgICAgICAgR19UWVBFX0lOVCwgMiwKKyAgICAgICAg
ICAgIEdfVFlQRV9PQkpFQ1QsCisgICAgICAgICAgICBHX1RZUEVfT0JKRUNUKTsKKworICAgIC8q
KgorICAgICAqIFdlYktpdFdlYlZpZXc6OndpbmRvdy1vYmplY3QtY2xlYXJlZDoKKyAgICAgKiBA
d2ViX3ZpZXc6IHRoZSBvYmplY3Qgb24gd2hpY2ggdGhlIHNpZ25hbCBpcyBlbWl0dGVkCisgICAg
ICogQGZyYW1lOiB0aGUgI1dlYktpdFdlYkZyYW1lIHRvIHdoaWNoIEB3aW5kb3dfb2JqZWN0IGJl
bG9uZ3MKKyAgICAgKiBAY29udGV4dDogdGhlICNKU0dsb2JhbENvbnRleHRSZWYgaG9sZGluZyB0
aGUgZ2xvYmFsIG9iamVjdCBhbmQgb3RoZXIKKyAgICAgKiBleGVjdXRpb24gc3RhdGU7IGVxdWl2
YWxlbnQgdG8gdGhlIHJldHVybiB2YWx1ZSBvZgorICAgICAqIHdlYmtpdF93ZWJfZnJhbWVfZ2V0
X2dsb2JhbF9jb250ZXh0KEBmcmFtZSkKKyAgICAgKgorICAgICAqIEB3aW5kb3dfb2JqZWN0OiB0
aGUgI0pTT2JqZWN0UmVmIHJlcHJlc2VudGluZyB0aGUgZnJhbWUncyBKYXZhU2NyaXB0CisgICAg
ICogd2luZG93IG9iamVjdAorICAgICAqCisgICAgICogRW1pdHRlZCB3aGVuIHRoZSBKYXZhU2Ny
aXB0IHdpbmRvdyBvYmplY3QgaW4gYSAjV2ViS2l0V2ViRnJhbWUgaGFzIGJlZW4KKyAgICAgKiBj
bGVhcmVkIGluIHByZXBhcmF0aW9uIGZvciBhIG5ldyBsb2FkLiBUaGlzIGlzIHRoZSBwcmVmZXJy
ZWQgcGxhY2UgdG8KKyAgICAgKiBzZXQgY3VzdG9tIHByb3BlcnRpZXMgb24gdGhlIHdpbmRvdyBv
YmplY3QgdXNpbmcgdGhlIEphdmFTY3JpcHRDb3JlIEFQSS4KKyAgICAgKi8KKyAgICB3ZWJraXRf
d2ViX3ZpZXdfc2lnbmFsc1tXSU5ET1dfT0JKRUNUX0NMRUFSRURdID0gZ19zaWduYWxfbmV3KCJ3
aW5kb3dfb2JqZWN0X2NsZWFyZWQiLAorICAgICAgICAgICAgR19UWVBFX0ZST01fQ0xBU1Mod2Vi
Vmlld0NsYXNzKSwKKyAgICAgICAgICAgIChHU2lnbmFsRmxhZ3MpKEdfU0lHTkFMX1JVTl9MQVNU
IHwgR19TSUdOQUxfQUNUSU9OKSwKKyAgICAgICAgICAgIEdfU1RSVUNUX09GRlNFVCAoV2ViS2l0
V2ViVmlld0NsYXNzLCB3aW5kb3dfb2JqZWN0X2NsZWFyZWQpLAorICAgICAgICAgICAgTlVMTCwK
KyAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICB3ZWJraXRfbWFyc2hhbF9WT0lEX19PQkpF
Q1RfUE9JTlRFUl9QT0lOVEVSLAorICAgICAgICAgICAgR19UWVBFX05PTkUsIDMsCisgICAgICAg
ICAgICBXRUJLSVRfVFlQRV9XRUJfRlJBTUUsCisgICAgICAgICAgICBHX1RZUEVfUE9JTlRFUiwK
KyAgICAgICAgICAgIEdfVFlQRV9QT0lOVEVSKTsKKworICAgIC8qKgorICAgICAqIFdlYktpdFdl
YlZpZXc6OmxvYWQtc3RhcnRlZDoKKyAgICAgKiBAd2ViX3ZpZXc6IHRoZSBvYmplY3Qgb24gd2hp
Y2ggdGhlIHNpZ25hbCBpcyBlbWl0dGVkCisgICAgICogQGZyYW1lOiB0aGUgZnJhbWUgZ29pbmcg
dG8gZG8gdGhlIGxvYWQKKyAgICAgKgorICAgICAqIFdoZW4gYSAjV2ViS2l0V2ViRnJhbWUgYmVn
aW5zIHRvIGxvYWQgdGhpcyBzaWduYWwgaXMgZW1pdHRlZC4KKyAgICAgKi8KKyAgICB3ZWJraXRf
d2ViX3ZpZXdfc2lnbmFsc1tMT0FEX1NUQVJURURdID0gZ19zaWduYWxfbmV3KCJsb2FkX3N0YXJ0
ZWQiLAorICAgICAgICAgICAgR19UWVBFX0ZST01fQ0xBU1Mod2ViVmlld0NsYXNzKSwKKyAgICAg
ICAgICAgIChHU2lnbmFsRmxhZ3MpKEdfU0lHTkFMX1JVTl9MQVNUIHwgR19TSUdOQUxfQUNUSU9O
KSwKKyAgICAgICAgICAgIDAsCisgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAgTlVMTCwK
KyAgICAgICAgICAgIGdfY2Nsb3N1cmVfbWFyc2hhbF9WT0lEX19PQkpFQ1QsCisgICAgICAgICAg
ICBHX1RZUEVfTk9ORSwgMSwKKyAgICAgICAgICAgIFdFQktJVF9UWVBFX1dFQl9GUkFNRSk7CisK
KyAgICAvKioKKyAgICAgKiBXZWJLaXRXZWJWaWV3Ojpsb2FkLXByb2dyZXNzLWNoYW5nZWQ6Cisg
ICAgICogQHdlYl92aWV3OiB0aGUgI1dlYktpdFdlYlZpZXcKKyAgICAgKiBAcHJvZ3Jlc3M6IHRo
ZSBnbG9iYWwgcHJvZ3Jlc3MKKyAgICAgKi8KKyAgICB3ZWJraXRfd2ViX3ZpZXdfc2lnbmFsc1tM
T0FEX1BST0dSRVNTX0NIQU5HRURdID0gZ19zaWduYWxfbmV3KCJsb2FkX3Byb2dyZXNzX2NoYW5n
ZWQiLAorICAgICAgICAgICAgR19UWVBFX0ZST01fQ0xBU1Mod2ViVmlld0NsYXNzKSwKKyAgICAg
ICAgICAgIChHU2lnbmFsRmxhZ3MpKEdfU0lHTkFMX1JVTl9MQVNUIHwgR19TSUdOQUxfQUNUSU9O
KSwKKyAgICAgICAgICAgIDAsCisgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAgTlVMTCwK
KyAgICAgICAgICAgIGdfY2Nsb3N1cmVfbWFyc2hhbF9WT0lEX19JTlQsCisgICAgICAgICAgICBH
X1RZUEVfTk9ORSwgMSwKKyAgICAgICAgICAgIEdfVFlQRV9JTlQpOworCisgICAgd2Via2l0X3dl
Yl92aWV3X3NpZ25hbHNbTE9BRF9GSU5JU0hFRF0gPSBnX3NpZ25hbF9uZXcoImxvYWRfZmluaXNo
ZWQiLAorICAgICAgICAgICAgR19UWVBFX0ZST01fQ0xBU1Mod2ViVmlld0NsYXNzKSwKKyAgICAg
ICAgICAgIChHU2lnbmFsRmxhZ3MpKEdfU0lHTkFMX1JVTl9MQVNUIHwgR19TSUdOQUxfQUNUSU9O
KSwKKyAgICAgICAgICAgIDAsCisgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAgTlVMTCwK
KyAgICAgICAgICAgIGdfY2Nsb3N1cmVfbWFyc2hhbF9WT0lEX19PQkpFQ1QsCisgICAgICAgICAg
ICBHX1RZUEVfTk9ORSwgMSwKKyAgICAgICAgICAgIFdFQktJVF9UWVBFX1dFQl9GUkFNRSk7CisK
KyAgICB3ZWJraXRfd2ViX3ZpZXdfc2lnbmFsc1tUSVRMRV9DSEFOR0VEXSA9IGdfc2lnbmFsX25l
dygidGl0bGVfY2hhbmdlZCIsCisgICAgICAgICAgICBHX1RZUEVfRlJPTV9DTEFTUyh3ZWJWaWV3
Q2xhc3MpLAorICAgICAgICAgICAgKEdTaWduYWxGbGFncykoR19TSUdOQUxfUlVOX0xBU1QgfCBH
X1NJR05BTF9BQ1RJT04pLAorICAgICAgICAgICAgMCwKKyAgICAgICAgICAgIE5VTEwsCisgICAg
ICAgICAgICBOVUxMLAorICAgICAgICAgICAgd2Via2l0X21hcnNoYWxfVk9JRF9fU1RSSU5HX1NU
UklORywKKyAgICAgICAgICAgIEdfVFlQRV9OT05FLCAyLAorICAgICAgICAgICAgR19UWVBFX1NU
UklORywgR19UWVBFX1NUUklORyk7CisKKyAgICB3ZWJraXRfd2ViX3ZpZXdfc2lnbmFsc1tIT1ZF
UklOR19PVkVSX0xJTktdID0gZ19zaWduYWxfbmV3KCJob3ZlcmluZ19vdmVyX2xpbmsiLAorICAg
ICAgICAgICAgR19UWVBFX0ZST01fQ0xBU1Mod2ViVmlld0NsYXNzKSwKKyAgICAgICAgICAgIChH
U2lnbmFsRmxhZ3MpKEdfU0lHTkFMX1JVTl9MQVNUIHwgR19TSUdOQUxfQUNUSU9OKSwKKyAgICAg
ICAgICAgIDAsCisgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAgTlVMTCwKKyAgICAgICAg
ICAgIHdlYmtpdF9tYXJzaGFsX1ZPSURfX1NUUklOR19TVFJJTkcsCisgICAgICAgICAgICBHX1RZ
UEVfTk9ORSwgMiwKKyAgICAgICAgICAgIEdfVFlQRV9TVFJJTkcsCisgICAgICAgICAgICBHX1RZ
UEVfU1RSSU5HKTsKKworICAgIHdlYmtpdF93ZWJfdmlld19zaWduYWxzW1NUQVRVU19CQVJfVEVY
VF9DSEFOR0VEXSA9IGdfc2lnbmFsX25ldygic3RhdHVzX2Jhcl90ZXh0X2NoYW5nZWQiLAorICAg
ICAgICAgICAgR19UWVBFX0ZST01fQ0xBU1Mod2ViVmlld0NsYXNzKSwKKyAgICAgICAgICAgIChH
U2lnbmFsRmxhZ3MpKEdfU0lHTkFMX1JVTl9MQVNUIHwgR19TSUdOQUxfQUNUSU9OKSwKKyAgICAg
ICAgICAgIDAsCisgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAgTlVMTCwKKyAgICAgICAg
ICAgIGdfY2Nsb3N1cmVfbWFyc2hhbF9WT0lEX19TVFJJTkcsCisgICAgICAgICAgICBHX1RZUEVf
Tk9ORSwgMSwKKyAgICAgICAgICAgIEdfVFlQRV9TVFJJTkcpOworCisgICAgd2Via2l0X3dlYl92
aWV3X3NpZ25hbHNbSUNPTkRfTE9BREVEXSA9IGdfc2lnbmFsX25ldygiaWNvbl9sb2FkZWQiLAor
ICAgICAgICAgICAgR19UWVBFX0ZST01fQ0xBU1Mod2ViVmlld0NsYXNzKSwKKyAgICAgICAgICAg
IChHU2lnbmFsRmxhZ3MpKEdfU0lHTkFMX1JVTl9MQVNUIHwgR19TSUdOQUxfQUNUSU9OKSwKKyAg
ICAgICAgICAgIDAsCisgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAgTlVMTCwKKyAgICAg
ICAgICAgIGdfY2Nsb3N1cmVfbWFyc2hhbF9WT0lEX19WT0lELAorICAgICAgICAgICAgR19UWVBF
X05PTkUsIDApOworCisgICAgd2Via2l0X3dlYl92aWV3X3NpZ25hbHNbU0VMRUNUSU9OX0NIQU5H
RURdID0gZ19zaWduYWxfbmV3KCJzZWxlY3Rpb25fY2hhbmdlZCIsCisgICAgICAgICAgICBHX1RZ
UEVfRlJPTV9DTEFTUyh3ZWJWaWV3Q2xhc3MpLAorICAgICAgICAgICAgKEdTaWduYWxGbGFncyko
R19TSUdOQUxfUlVOX0xBU1QgfCBHX1NJR05BTF9BQ1RJT04pLAorICAgICAgICAgICAgMCwKKyAg
ICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAgZ19jY2xvc3Vy
ZV9tYXJzaGFsX1ZPSURfX1ZPSUQsCisgICAgICAgICAgICBHX1RZUEVfTk9ORSwgMCk7CisKKyAg
ICAvKioKKyAgICAgKiBXZWJLaXRXZWJWaWV3Ojpjb25zb2xlLW1lc3NhZ2U6CisgICAgICogQHdl
Yl92aWV3OiB0aGUgb2JqZWN0IG9uIHdoaWNoIHRoZSBzaWduYWwgaXMgZW1pdHRlZAorICAgICAq
IEBtZXNzYWdlOiB0aGUgbWVzc2FnZSB0ZXh0CisgICAgICogQGxpbmU6IHRoZSBsaW5lIHdoZXJl
IHRoZSBlcnJvciBvY2N1cmVkCisgICAgICogQHNvdXJjZV9pZDogdGhlIHNvdXJjZSBpZAorICAg
ICAqIEByZXR1cm46IFRSVUUgdG8gc3RvcCBvdGhlciBoYW5kbGVycyBmcm9tIGJlaW5nIGludm9r
ZWQgZm9yIHRoZSBldmVudC4gRkFMU0UgdG8gcHJvcGFnYXRlIHRoZSBldmVudCBmdXJ0aGVyLgor
ICAgICAqCisgICAgICogQSBKYXZhU2NyaXB0IGNvbnNvbGUgbWVzc2FnZSB3YXMgY3JlYXRlZC4K
KyAgICAgKi8KKyAgICB3ZWJraXRfd2ViX3ZpZXdfc2lnbmFsc1tDT05TT0xFX01FU1NBR0VdID0g
Z19zaWduYWxfbmV3KCJjb25zb2xlX21lc3NhZ2UiLAorICAgICAgICAgICAgR19UWVBFX0ZST01f
Q0xBU1Mod2ViVmlld0NsYXNzKSwKKyAgICAgICAgICAgIChHU2lnbmFsRmxhZ3MpKEdfU0lHTkFM
X1JVTl9MQVNUIHwgR19TSUdOQUxfQUNUSU9OKSwKKyAgICAgICAgICAgIEdfU1RSVUNUX09GRlNF
VChXZWJLaXRXZWJWaWV3Q2xhc3MsIGNvbnNvbGVfbWVzc2FnZSksCisgICAgICAgICAgICBnX3Np
Z25hbF9hY2N1bXVsYXRvcl90cnVlX2hhbmRsZWQsCisgICAgICAgICAgICBOVUxMLAorICAgICAg
ICAgICAgd2Via2l0X21hcnNoYWxfQk9PTEVBTl9fU1RSSU5HX0lOVF9TVFJJTkcsCisgICAgICAg
ICAgICBHX1RZUEVfQk9PTEVBTiwgMywKKyAgICAgICAgICAgIEdfVFlQRV9TVFJJTkcsIEdfVFlQ
RV9JTlQsIEdfVFlQRV9TVFJJTkcpOworCisgICAgLyoqCisgICAgICogV2ViS2l0V2ViVmlldzo6
c2NyaXB0LWFsZXJ0OgorICAgICAqIEB3ZWJfdmlldzogdGhlIG9iamVjdCBvbiB3aGljaCB0aGUg
c2lnbmFsIGlzIGVtaXR0ZWQKKyAgICAgKiBAZnJhbWU6IHRoZSByZWxldmFudCBmcmFtZQorICAg
ICAqIEBtZXNzYWdlOiB0aGUgbWVzc2FnZSB0ZXh0CisgICAgICogQHJldHVybjogVFJVRSB0byBz
dG9wIG90aGVyIGhhbmRsZXJzIGZyb20gYmVpbmcgaW52b2tlZCBmb3IgdGhlIGV2ZW50LiBGQUxT
RSB0byBwcm9wYWdhdGUgdGhlIGV2ZW50IGZ1cnRoZXIuCisgICAgICoKKyAgICAgKiBBIEphdmFT
Y3JpcHQgYWxlcnQgZGlhbG9nIHdhcyBjcmVhdGVkLgorICAgICAqLworICAgIHdlYmtpdF93ZWJf
dmlld19zaWduYWxzW1NDUklQVF9BTEVSVF0gPSBnX3NpZ25hbF9uZXcoInNjcmlwdC1hbGVydCIs
CisgICAgICAgICAgICBHX1RZUEVfRlJPTV9DTEFTUyh3ZWJWaWV3Q2xhc3MpLAorICAgICAgICAg
ICAgKEdTaWduYWxGbGFncykoR19TSUdOQUxfUlVOX0xBU1QgfCBHX1NJR05BTF9BQ1RJT04pLAor
ICAgICAgICAgICAgR19TVFJVQ1RfT0ZGU0VUKFdlYktpdFdlYlZpZXdDbGFzcywgc2NyaXB0X2Fs
ZXJ0KSwKKyAgICAgICAgICAgIGdfc2lnbmFsX2FjY3VtdWxhdG9yX3RydWVfaGFuZGxlZCwKKyAg
ICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICB3ZWJraXRfbWFyc2hhbF9CT09MRUFOX19PQkpF
Q1RfU1RSSU5HLAorICAgICAgICAgICAgR19UWVBFX0JPT0xFQU4sIDIsCisgICAgICAgICAgICBH
X1RZUEVfT0JKRUNULCBHX1RZUEVfU1RSSU5HKTsKKworICAgIC8qKgorICAgICAqIFdlYktpdFdl
YlZpZXc6OnNjcmlwdC1jb25maXJtOgorICAgICAqIEB3ZWJfdmlldzogdGhlIG9iamVjdCBvbiB3
aGljaCB0aGUgc2lnbmFsIGlzIGVtaXR0ZWQKKyAgICAgKiBAZnJhbWU6IHRoZSByZWxldmFudCBm
cmFtZQorICAgICAqIEBtZXNzYWdlOiB0aGUgbWVzc2FnZSB0ZXh0CisgICAgICogQGNvbmZpcm1l
ZDogd2hldGhlciB0aGUgZGlhbG9nIGhhcyBiZWVuIGNvbmZpcm1lZAorICAgICAqIEByZXR1cm46
IFRSVUUgdG8gc3RvcCBvdGhlciBoYW5kbGVycyBmcm9tIGJlaW5nIGludm9rZWQgZm9yIHRoZSBl
dmVudC4gRkFMU0UgdG8gcHJvcGFnYXRlIHRoZSBldmVudCBmdXJ0aGVyLgorICAgICAqCisgICAg
ICogQSBKYXZhU2NyaXB0IGNvbmZpcm0gZGlhbG9nIHdhcyBjcmVhdGVkLCBwcm92aWRpbmcgWWVz
IGFuZCBObyBidXR0b25zLgorICAgICAqLworICAgIHdlYmtpdF93ZWJfdmlld19zaWduYWxzW1ND
UklQVF9DT05GSVJNXSA9IGdfc2lnbmFsX25ldygic2NyaXB0X2NvbmZpcm0iLAorICAgICAgICAg
ICAgR19UWVBFX0ZST01fQ0xBU1Mod2ViVmlld0NsYXNzKSwKKyAgICAgICAgICAgIChHU2lnbmFs
RmxhZ3MpKEdfU0lHTkFMX1JVTl9MQVNUIHwgR19TSUdOQUxfQUNUSU9OKSwKKyAgICAgICAgICAg
IEdfU1RSVUNUX09GRlNFVChXZWJLaXRXZWJWaWV3Q2xhc3MsIHNjcmlwdF9jb25maXJtKSwKKyAg
ICAgICAgICAgIGdfc2lnbmFsX2FjY3VtdWxhdG9yX3RydWVfaGFuZGxlZCwKKyAgICAgICAgICAg
IE5VTEwsCisgICAgICAgICAgICB3ZWJraXRfbWFyc2hhbF9CT09MRUFOX19PQkpFQ1RfU1RSSU5H
X0JPT0xFQU4sCisgICAgICAgICAgICBHX1RZUEVfQk9PTEVBTiwgMywKKyAgICAgICAgICAgIEdf
VFlQRV9PQkpFQ1QsIEdfVFlQRV9TVFJJTkcsIEdfVFlQRV9CT09MRUFOKTsKKworICAgIC8qKgor
ICAgICAqIFdlYktpdFdlYlZpZXc6OnNjcmlwdC1wcm9tcHQ6CisgICAgICogQHdlYl92aWV3OiB0
aGUgb2JqZWN0IG9uIHdoaWNoIHRoZSBzaWduYWwgaXMgZW1pdHRlZAorICAgICAqIEBmcmFtZTog
dGhlIHJlbGV2YW50IGZyYW1lCisgICAgICogQG1lc3NhZ2U6IHRoZSBtZXNzYWdlIHRleHQKKyAg
ICAgKiBAZGVmYXVsdDogdGhlIGRlZmF1bHQgdmFsdWUKKyAgICAgKiBAdGV4dDogVG8gYmUgZmls
bGVkIHdpdGggdGhlIHJldHVybiB2YWx1ZSBvciBOVUxMIGlmIHRoZSBkaWFsb2cgd2FzIGNhbmNl
bGxlZC4KKyAgICAgKiBAcmV0dXJuOiBUUlVFIHRvIHN0b3Agb3RoZXIgaGFuZGxlcnMgZnJvbSBi
ZWluZyBpbnZva2VkIGZvciB0aGUgZXZlbnQuIEZBTFNFIHRvIHByb3BhZ2F0ZSB0aGUgZXZlbnQg
ZnVydGhlci4KKyAgICAgKgorICAgICAqIEEgSmF2YVNjcmlwdCBwcm9tcHQgZGlhbG9nIHdhcyBj
cmVhdGVkLCBwcm92aWRpbmcgYW4gZW50cnkgdG8gaW5wdXQgdGV4dC4KKyAgICAgKi8KKyAgICB3
ZWJraXRfd2ViX3ZpZXdfc2lnbmFsc1tTQ1JJUFRfUFJPTVBUXSA9IGdfc2lnbmFsX25ldygic2Ny
aXB0X3Byb21wdCIsCisgICAgICAgICAgICBHX1RZUEVfRlJPTV9DTEFTUyh3ZWJWaWV3Q2xhc3Mp
LAorICAgICAgICAgICAgKEdTaWduYWxGbGFncykoR19TSUdOQUxfUlVOX0xBU1QgfCBHX1NJR05B
TF9BQ1RJT04pLAorICAgICAgICAgICAgR19TVFJVQ1RfT0ZGU0VUKFdlYktpdFdlYlZpZXdDbGFz
cywgc2NyaXB0X3Byb21wdCksCisgICAgICAgICAgICBnX3NpZ25hbF9hY2N1bXVsYXRvcl90cnVl
X2hhbmRsZWQsCisgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAgd2Via2l0X21hcnNoYWxf
Qk9PTEVBTl9fT0JKRUNUX1NUUklOR19TVFJJTkdfU1RSSU5HLAorICAgICAgICAgICAgR19UWVBF
X0JPT0xFQU4sIDQsCisgICAgICAgICAgICBHX1RZUEVfT0JKRUNULCBHX1RZUEVfU1RSSU5HLCBH
X1RZUEVfU1RSSU5HLCBHX1RZUEVfUE9JTlRFUik7CisKKworICAgIC8qCisgICAgICogaW1wbGVt
ZW50YXRpb25zIG9mIHZpcnR1YWwgbWV0aG9kcworICAgICAqLworICAgIHdlYlZpZXdDbGFzcy0+
Y3JlYXRlX3dlYl92aWV3ID0gd2Via2l0X3dlYl92aWV3X3JlYWxfY3JlYXRlX3dlYl92aWV3Owor
ICAgIHdlYlZpZXdDbGFzcy0+bmF2aWdhdGlvbl9yZXF1ZXN0ZWQgPSB3ZWJraXRfd2ViX3ZpZXdf
cmVhbF9uYXZpZ2F0aW9uX3JlcXVlc3RlZDsKKyAgICB3ZWJWaWV3Q2xhc3MtPndpbmRvd19vYmpl
Y3RfY2xlYXJlZCA9IHdlYmtpdF93ZWJfdmlld19yZWFsX3dpbmRvd19vYmplY3RfY2xlYXJlZDsK
KyAgICB3ZWJWaWV3Q2xhc3MtPmNob29zZV9maWxlID0gd2Via2l0X3dlYl92aWV3X3JlYWxfY2hv
b3NlX2ZpbGU7CisgICAgd2ViVmlld0NsYXNzLT5zY3JpcHRfYWxlcnQgPSB3ZWJraXRfd2ViX3Zp
ZXdfcmVhbF9zY3JpcHRfYWxlcnQ7CisgICAgd2ViVmlld0NsYXNzLT5zY3JpcHRfY29uZmlybSA9
IHdlYmtpdF93ZWJfdmlld19yZWFsX3NjcmlwdF9jb25maXJtOworICAgIHdlYlZpZXdDbGFzcy0+
c2NyaXB0X3Byb21wdCA9IHdlYmtpdF93ZWJfdmlld19yZWFsX3NjcmlwdF9wcm9tcHQ7CisgICAg
d2ViVmlld0NsYXNzLT5jb25zb2xlX21lc3NhZ2UgPSB3ZWJraXRfd2ViX3ZpZXdfcmVhbF9jb25z
b2xlX21lc3NhZ2U7CisKKyAgICBHX09CSkVDVF9DTEFTUyh3ZWJWaWV3Q2xhc3MpLT5maW5hbGl6
ZSA9IHdlYmtpdF93ZWJfdmlld19maW5hbGl6ZTsKKworICAgIEd0a1dpZGdldENsYXNzKiB3aWRn
ZXRDbGFzcyA9IEdUS19XSURHRVRfQ0xBU1Mod2ViVmlld0NsYXNzKTsKKyAgICB3aWRnZXRDbGFz
cy0+cmVhbGl6ZSA9IHdlYmtpdF93ZWJfdmlld19yZWFsaXplOworICAgIHdpZGdldENsYXNzLT5l
eHBvc2VfZXZlbnQgPSB3ZWJraXRfd2ViX3ZpZXdfZXhwb3NlX2V2ZW50OworICAgIHdpZGdldENs
YXNzLT5rZXlfcHJlc3NfZXZlbnQgPSB3ZWJraXRfd2ViX3ZpZXdfa2V5X2V2ZW50OworICAgIHdp
ZGdldENsYXNzLT5rZXlfcmVsZWFzZV9ldmVudCA9IHdlYmtpdF93ZWJfdmlld19rZXlfZXZlbnQ7
CisgICAgd2lkZ2V0Q2xhc3MtPmJ1dHRvbl9wcmVzc19ldmVudCA9IHdlYmtpdF93ZWJfdmlld19i
dXR0b25fZXZlbnQ7CisgICAgd2lkZ2V0Q2xhc3MtPmJ1dHRvbl9yZWxlYXNlX2V2ZW50ID0gd2Vi
a2l0X3dlYl92aWV3X2J1dHRvbl9ldmVudDsKKyAgICB3aWRnZXRDbGFzcy0+bW90aW9uX25vdGlm
eV9ldmVudCA9IHdlYmtpdF93ZWJfdmlld19tb3Rpb25fZXZlbnQ7CisgICAgd2lkZ2V0Q2xhc3Mt
PnNjcm9sbF9ldmVudCA9IHdlYmtpdF93ZWJfdmlld19zY3JvbGxfZXZlbnQ7CisgICAgd2lkZ2V0
Q2xhc3MtPnNpemVfYWxsb2NhdGUgPSB3ZWJraXRfd2ViX3ZpZXdfc2l6ZV9hbGxvY2F0ZTsKKwor
ICAgIEd0a0NvbnRhaW5lckNsYXNzKiBjb250YWluZXJDbGFzcyA9IEdUS19DT05UQUlORVJfQ0xB
U1Mod2ViVmlld0NsYXNzKTsKKyAgICBjb250YWluZXJDbGFzcy0+YWRkID0gd2Via2l0X3dlYl92
aWV3X2NvbnRhaW5lcl9hZGQ7CisgICAgY29udGFpbmVyQ2xhc3MtPnJlbW92ZSA9IHdlYmtpdF93
ZWJfdmlld19jb250YWluZXJfcmVtb3ZlOworICAgIGNvbnRhaW5lckNsYXNzLT5mb3JhbGwgPSB3
ZWJraXRfd2ViX3ZpZXdfY29udGFpbmVyX2ZvcmFsbDsKKworICAgIC8qCisgICAgICogbWFrZSB1
cyBzY3JvbGxhYmxlIChlLmcuIGFkZGFibGUgdG8gYSBHdGtTY3JvbGxlZFdpbmRvdykKKyAgICAg
Ki8KKyAgICB3ZWJWaWV3Q2xhc3MtPnNldF9zY3JvbGxfYWRqdXN0bWVudHMgPSB3ZWJraXRfd2Vi
X3ZpZXdfc2V0X3Njcm9sbF9hZGp1c3RtZW50czsKKyAgICBHVEtfV0lER0VUX0NMQVNTKHdlYlZp
ZXdDbGFzcyktPnNldF9zY3JvbGxfYWRqdXN0bWVudHNfc2lnbmFsID0gZ19zaWduYWxfbmV3KCJz
ZXRfc2Nyb2xsX2FkanVzdG1lbnRzIiwKKyAgICAgICAgICAgIEdfVFlQRV9GUk9NX0NMQVNTKHdl
YlZpZXdDbGFzcyksCisgICAgICAgICAgICAoR1NpZ25hbEZsYWdzKShHX1NJR05BTF9SVU5fTEFT
VCB8IEdfU0lHTkFMX0FDVElPTiksCisgICAgICAgICAgICBHX1NUUlVDVF9PRkZTRVQoV2ViS2l0
V2ViVmlld0NsYXNzLCBzZXRfc2Nyb2xsX2FkanVzdG1lbnRzKSwKKyAgICAgICAgICAgIE5VTEws
IE5VTEwsCisgICAgICAgICAgICB3ZWJraXRfbWFyc2hhbF9WT0lEX19PQkpFQ1RfT0JKRUNULAor
ICAgICAgICAgICAgR19UWVBFX05PTkUsIDIsCisgICAgICAgICAgICBHVEtfVFlQRV9BREpVU1RN
RU5ULCBHVEtfVFlQRV9BREpVU1RNRU5UKTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X3dlYl92
aWV3X2luaXQoV2ViS2l0V2ViVmlldyogd2ViVmlldykKK3sKKyAgICBXZWJLaXRXZWJWaWV3UHJp
dmF0ZSogd2ViVmlld0RhdGEgPSBXRUJLSVRfV0VCX1ZJRVdfR0VUX1BSSVZBVEUoV0VCS0lUX1dF
Ql9WSUVXKHdlYlZpZXcpKTsKKyAgICB3ZWJWaWV3RGF0YS0+Y29yZVBhZ2UgPSBuZXcgUGFnZShu
ZXcgV2ViS2l0OjpDaHJvbWVDbGllbnQod2ViVmlldyksIG5ldyBXZWJLaXQ6OkNvbnRleHRNZW51
Q2xpZW50LCBuZXcgV2ViS2l0OjpFZGl0b3JDbGllbnQod2ViVmlldyksIG5ldyBXZWJLaXQ6OkRy
YWdDbGllbnQsIG5ldyBXZWJLaXQ6Okluc3BlY3RvckNsaWVudCk7CisKKyAgICBTZXR0aW5ncyog
c2V0dGluZ3MgPSB3ZWJWaWV3RGF0YS0+Y29yZVBhZ2UtPnNldHRpbmdzKCk7CisgICAgc2V0dGlu
Z3MtPnNldExvYWRzSW1hZ2VzQXV0b21hdGljYWxseSh0cnVlKTsKKyAgICBzZXR0aW5ncy0+c2V0
TWluaW11bUZvbnRTaXplKDUpOworICAgIHNldHRpbmdzLT5zZXRNaW5pbXVtTG9naWNhbEZvbnRT
aXplKDUpOworICAgIHNldHRpbmdzLT5zZXRTaG91bGRQcmludEJhY2tncm91bmRzKHRydWUpOwor
ICAgIHNldHRpbmdzLT5zZXRKYXZhU2NyaXB0RW5hYmxlZCh0cnVlKTsKKyAgICBzZXR0aW5ncy0+
c2V0RGVmYXVsdEZpeGVkRm9udFNpemUoMTQpOworICAgIHNldHRpbmdzLT5zZXREZWZhdWx0Rm9u
dFNpemUoMTQpOworICAgIHNldHRpbmdzLT5zZXRTZXJpZkZvbnRGYW1pbHkoIlRpbWVzIE5ldyBS
b21hbiIpOworICAgIHNldHRpbmdzLT5zZXRTYW5zU2VyaWZGb250RmFtaWx5KCJBcmlhbCIpOwor
ICAgIHNldHRpbmdzLT5zZXRGaXhlZEZvbnRGYW1pbHkoIkNvdXJpZXIgTmV3Iik7CisgICAgc2V0
dGluZ3MtPnNldFN0YW5kYXJkRm9udEZhbWlseSgiQXJpYWwiKTsKKworICAgIEdUS19XSURHRVRf
U0VUX0ZMQUdTKHdlYlZpZXcsIEdUS19DQU5fRk9DVVMpOworICAgIHdlYlZpZXdEYXRhLT5tYWlu
RnJhbWUgPSBXRUJLSVRfV0VCX0ZSQU1FKHdlYmtpdF93ZWJfZnJhbWVfbmV3KHdlYlZpZXcpKTsK
KyAgICB3ZWJWaWV3RGF0YS0+ZWRpdGFibGUgPSBmYWxzZTsKK30KKworR3RrV2lkZ2V0KiB3ZWJr
aXRfd2ViX3ZpZXdfbmV3KHZvaWQpCit7CisgICAgV2ViS2l0V2ViVmlldyogd2ViVmlldyA9IFdF
QktJVF9XRUJfVklFVyhnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfV0VCX1ZJRVcsIE5VTEwpKTsK
KworICAgIHJldHVybiBHVEtfV0lER0VUKHdlYlZpZXcpOworfQorCit2b2lkIHdlYmtpdF93ZWJf
dmlld19zZXRfc2V0dGluZ3MoV2ViS2l0V2ViVmlldyogd2ViVmlldywgV2ViS2l0U2V0dGluZ3Mq
IHNldHRpbmdzKQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9WSUVXKHdl
YlZpZXcpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHNldHRpbmdzKTsKKworICAgIG5vdEltcGxl
bWVudGVkKCk7Cit9CisKK1dlYktpdFNldHRpbmdzKiB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3NldHRp
bmdzKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
V0VCS0lUX0lTX1dFQl9WSUVXKHdlYlZpZXcpLCBOVUxMKTsKKworICAgIG5vdEltcGxlbWVudGVk
KCk7CisgICAgcmV0dXJuIE5VTEw7Cit9CisKK3ZvaWQgd2Via2l0X3dlYl92aWV3X2dvX2JhY2t3
YXJkKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJL
SVRfSVNfV0VCX1ZJRVcod2ViVmlldykpOworCisgICAgV2ViS2l0V2ViVmlld1ByaXZhdGUqIHdl
YlZpZXdEYXRhID0gV0VCS0lUX1dFQl9WSUVXX0dFVF9QUklWQVRFKHdlYlZpZXcpOworICAgIFdl
YktpdFdlYkZyYW1lUHJpdmF0ZSogZnJhbWVEYXRhID0gV0VCS0lUX1dFQl9GUkFNRV9HRVRfUFJJ
VkFURSh3ZWJWaWV3RGF0YS0+bWFpbkZyYW1lKTsKKyAgICBmcmFtZURhdGEtPmZyYW1lLT5sb2Fk
ZXIoKS0+Z29CYWNrT3JGb3J3YXJkKC0xKTsKK30KKwordm9pZCB3ZWJraXRfd2ViX3ZpZXdfZ29f
Zm9yd2FyZChXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwo
V0VCS0lUX0lTX1dFQl9WSUVXKHdlYlZpZXcpKTsKKworICAgIFdlYktpdFdlYlZpZXdQcml2YXRl
KiB3ZWJWaWV3RGF0YSA9IFdFQktJVF9XRUJfVklFV19HRVRfUFJJVkFURSh3ZWJWaWV3KTsKKyAg
ICBXZWJLaXRXZWJGcmFtZVByaXZhdGUqIGZyYW1lRGF0YSA9IFdFQktJVF9XRUJfRlJBTUVfR0VU
X1BSSVZBVEUod2ViVmlld0RhdGEtPm1haW5GcmFtZSk7CisgICAgZnJhbWVEYXRhLT5mcmFtZS0+
bG9hZGVyKCktPmdvQmFja09yRm9yd2FyZCgxKTsKK30KKworZ2Jvb2xlYW4gd2Via2l0X3dlYl92
aWV3X2Nhbl9nb19iYWNrd2FyZChXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQoreworICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19XRUJfVklFVyh3ZWJWaWV3KSwgRkFMU0UpOworCisg
ICAgV2ViS2l0V2ViVmlld1ByaXZhdGUqIHdlYlZpZXdEYXRhID0gV0VCS0lUX1dFQl9WSUVXX0dF
VF9QUklWQVRFKHdlYlZpZXcpOworICAgIFdlYktpdFdlYkZyYW1lUHJpdmF0ZSogZnJhbWVEYXRh
ID0gV0VCS0lUX1dFQl9GUkFNRV9HRVRfUFJJVkFURSh3ZWJWaWV3RGF0YS0+bWFpbkZyYW1lKTsK
KyAgICByZXR1cm4gZnJhbWVEYXRhLT5mcmFtZS0+bG9hZGVyKCktPmNhbkdvQmFja09yRm9yd2Fy
ZCgtMSk7Cit9CisKK2dib29sZWFuIHdlYmtpdF93ZWJfdmlld19jYW5fZ29fZm9yd2FyZChXZWJL
aXRXZWJWaWV3KiB3ZWJWaWV3KQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9J
U19XRUJfVklFVyh3ZWJWaWV3KSwgRkFMU0UpOworCisgICAgV2ViS2l0V2ViVmlld1ByaXZhdGUq
IHdlYlZpZXdEYXRhID0gV0VCS0lUX1dFQl9WSUVXX0dFVF9QUklWQVRFKHdlYlZpZXcpOworICAg
IFdlYktpdFdlYkZyYW1lUHJpdmF0ZSogZnJhbWVEYXRhID0gV0VCS0lUX1dFQl9GUkFNRV9HRVRf
UFJJVkFURSh3ZWJWaWV3RGF0YS0+bWFpbkZyYW1lKTsKKyAgICByZXR1cm4gZnJhbWVEYXRhLT5m
cmFtZS0+bG9hZGVyKCktPmNhbkdvQmFja09yRm9yd2FyZCgxKTsKK30KKwordm9pZCB3ZWJraXRf
d2ViX3ZpZXdfb3BlbihXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBjb25zdCBnY2hhciogdXJpKQor
eworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9WSUVXKHdlYlZpZXcpKTsKKwor
ICAgIFdlYktpdFdlYlZpZXdQcml2YXRlKiB3ZWJWaWV3RGF0YSA9IFdFQktJVF9XRUJfVklFV19H
RVRfUFJJVkFURSh3ZWJWaWV3KTsKKyAgICBXZWJLaXRXZWJGcmFtZVByaXZhdGUqIGZyYW1lRGF0
YSA9IFdFQktJVF9XRUJfRlJBTUVfR0VUX1BSSVZBVEUod2ViVmlld0RhdGEtPm1haW5GcmFtZSk7
CisKKyAgICBEZXByZWNhdGVkU3RyaW5nIHN0cmluZyA9IERlcHJlY2F0ZWRTdHJpbmc6OmZyb21V
dGY4KHVyaSk7CisgICAgZnJhbWVEYXRhLT5mcmFtZS0+bG9hZGVyKCktPmxvYWQoUmVzb3VyY2VS
ZXF1ZXN0KEtVUkwoc3RyaW5nKSkpOworfQorCit2b2lkIHdlYmtpdF93ZWJfdmlld19yZWxvYWQo
V2ViS2l0V2ViVmlldyogd2ViVmlldykKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9J
U19XRUJfVklFVyh3ZWJWaWV3KSk7CisKKyAgICBXZWJLaXRXZWJWaWV3UHJpdmF0ZSogd2ViVmll
d0RhdGEgPSBXRUJLSVRfV0VCX1ZJRVdfR0VUX1BSSVZBVEUod2ViVmlldyk7CisgICAgV2ViS2l0
V2ViRnJhbWVQcml2YXRlKiBmcmFtZURhdGEgPSBXRUJLSVRfV0VCX0ZSQU1FX0dFVF9QUklWQVRF
KHdlYlZpZXdEYXRhLT5tYWluRnJhbWUpOworICAgIGZyYW1lRGF0YS0+ZnJhbWUtPmxvYWRlcigp
LT5yZWxvYWQoKTsKK30KKwordm9pZCB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9zdHJpbmcoV2ViS2l0
V2ViVmlldyogd2ViVmlldywgY29uc3QgZ2NoYXIqIGNvbnRlbnQsIGNvbnN0IGdjaGFyKiBjb250
ZW50TWltZVR5cGUsIGNvbnN0IGdjaGFyKiBjb250ZW50RW5jb2RpbmcsIGNvbnN0IGdjaGFyKiBi
YXNlVXJpKQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9WSUVXKHdlYlZp
ZXcpKTsKKworICAgIFdlYktpdFdlYlZpZXdQcml2YXRlKiB3ZWJWaWV3RGF0YSA9IFdFQktJVF9X
RUJfVklFV19HRVRfUFJJVkFURSh3ZWJWaWV3KTsKKyAgICBXZWJLaXRXZWJGcmFtZVByaXZhdGUq
IGZyYW1lRGF0YSA9IFdFQktJVF9XRUJfRlJBTUVfR0VUX1BSSVZBVEUod2ViVmlld0RhdGEtPm1h
aW5GcmFtZSk7CisKKyAgICBLVVJMIHVybChEZXByZWNhdGVkU3RyaW5nOjpmcm9tVXRmOChiYXNl
VXJpKSk7CisgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gc2hhcmVkQnVmZmVyID0gbmV3IFNoYXJl
ZEJ1ZmZlcihzdHJkdXAoY29udGVudCksIHN0cmxlbihjb250ZW50KSk7CisgICAgU3Vic3RpdHV0
ZURhdGEgc3Vic3RpdHV0ZURhdGEoc2hhcmVkQnVmZmVyLnJlbGVhc2UoKSwgU3RyaW5nKGNvbnRl
bnRNaW1lVHlwZSksIFN0cmluZyhjb250ZW50RW5jb2RpbmcpLCBLVVJMKCJhYm91dDpibGFuayIp
LCB1cmwpOworCisgICAgZnJhbWVEYXRhLT5mcmFtZS0+bG9hZGVyKCktPmxvYWQoUmVzb3VyY2VS
ZXF1ZXN0KHVybCksIHN1YnN0aXR1dGVEYXRhKTsKK30KKwordm9pZCB3ZWJraXRfd2ViX3ZpZXdf
bG9hZF9odG1sX3N0cmluZyhXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBjb25zdCBnY2hhciogY29u
dGVudCwgY29uc3QgZ2NoYXIqIGJhc2VVcmwpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJL
SVRfSVNfV0VCX1ZJRVcod2ViVmlldykpOworCisgICAgd2Via2l0X3dlYl92aWV3X2xvYWRfc3Ry
aW5nKHdlYlZpZXcsIGNvbnRlbnQsICJ0ZXh0L2h0bWwiLCAiVVRGLTgiLCBiYXNlVXJsKTsKK30K
Kwordm9pZCB3ZWJraXRfd2ViX3ZpZXdfc3RvcF9sb2FkaW5nKFdlYktpdFdlYlZpZXcqIHdlYlZp
ZXcpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfV0VCX1ZJRVcod2ViVmlldykp
OworCisgICAgV2ViS2l0V2ViVmlld1ByaXZhdGUqIHdlYlZpZXdEYXRhID0gV0VCS0lUX1dFQl9W
SUVXX0dFVF9QUklWQVRFKHdlYlZpZXcpOworICAgIFdlYktpdFdlYkZyYW1lUHJpdmF0ZSogZnJh
bWVEYXRhID0gV0VCS0lUX1dFQl9GUkFNRV9HRVRfUFJJVkFURSh3ZWJWaWV3RGF0YS0+bWFpbkZy
YW1lKTsKKworICAgIGlmIChGcmFtZUxvYWRlciogbG9hZGVyID0gZnJhbWVEYXRhLT5mcmFtZS0+
bG9hZGVyKCkpCisgICAgICAgIGxvYWRlci0+c3RvcEFsbExvYWRlcnMoKTsKK30KKworV2ViS2l0
V2ViRnJhbWUqIHdlYmtpdF93ZWJfdmlld19nZXRfbWFpbl9mcmFtZShXZWJLaXRXZWJWaWV3KiB3
ZWJWaWV3KQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19XRUJfVklFVyh3
ZWJWaWV3KSwgTlVMTCk7CisKKyAgICBXZWJLaXRXZWJWaWV3UHJpdmF0ZSogd2ViVmlld0RhdGEg
PSBXRUJLSVRfV0VCX1ZJRVdfR0VUX1BSSVZBVEUod2ViVmlldyk7CisgICAgcmV0dXJuIHdlYlZp
ZXdEYXRhLT5tYWluRnJhbWU7Cit9CisKK3ZvaWQgd2Via2l0X3dlYl92aWV3X2V4ZWN1dGVfc2Ny
aXB0KFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIGNvbnN0IGdjaGFyKiBzY3JpcHQpCit7CisgICAg
Z19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfV0VCX1ZJRVcod2ViVmlldykpOworICAgIGdfcmV0
dXJuX2lmX2ZhaWwoc2NyaXB0KTsKKworICAgIFdlYktpdFdlYlZpZXdQcml2YXRlKiB3ZWJWaWV3
RGF0YSA9IFdFQktJVF9XRUJfVklFV19HRVRfUFJJVkFURSh3ZWJWaWV3KTsKKyAgICBXZWJLaXRX
ZWJGcmFtZVByaXZhdGUqIGZyYW1lRGF0YSA9IFdFQktJVF9XRUJfRlJBTUVfR0VUX1BSSVZBVEUo
d2ViVmlld0RhdGEtPm1haW5GcmFtZSk7CisKKyAgICBpZiAoRnJhbWVMb2FkZXIqIGxvYWRlciA9
IGZyYW1lRGF0YS0+ZnJhbWUtPmxvYWRlcigpKQorICAgICAgICBsb2FkZXItPmV4ZWN1dGVTY3Jp
cHQoU3RyaW5nOjpmcm9tVVRGOChzY3JpcHQpLCB0cnVlKTsKK30KKworLyoqCisgKiB3ZWJraXRf
d2ViX3ZpZXdfZ2V0X2VkaXRhYmxlOgorICogQHdlYl92aWV3OiBhICNXZWJLaXRXZWJWaWV3Cisg
KgorICogUmV0dXJucyB3aGV0aGVyIHRoZSB1c2VyIGlzIGFsbG93ZWQgdG8gZWRpdCB0aGUgZG9j
dW1lbnQuCisgKgorICogUmV0dXJucyAlVFJVRSBpZiBAd2ViX3ZpZXcgYWxsb3dzIHRoZSB1c2Vy
IHRvIGVkaXQgdGhlIEhUTUwgZG9jdW1lbnQsICVGQUxTRSBpZgorICogaXQgZG9lc24ndC4gWW91
IGNhbiBjaGFuZ2UgQHdlYl92aWV3J3MgZG9jdW1lbnQgcHJvZ3JhbW1hdGljYWxseSByZWdhcmRs
ZXNzIG9mCisgKiB0aGlzIHNldHRpbmcuCisgKgorICogUmV0dXJuIHZhbHVlOiBhICNnYm9vbGVh
biBpbmRpY2F0aW5nIHRoZSBlZGl0YWJsZSBzdGF0ZQorICovCitnYm9vbGVhbiB3ZWJraXRfd2Vi
X3ZpZXdfZ2V0X2VkaXRhYmxlKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCit7CisgICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9WSUVXKHdlYlZpZXcpLCBGQUxTRSk7CisKKyAg
ICBXZWJLaXRXZWJWaWV3UHJpdmF0ZSogd2ViVmlld0RhdGEgPSBXRUJLSVRfV0VCX1ZJRVdfR0VU
X1BSSVZBVEUod2ViVmlldyk7CisgICAgQVNTRVJUKHdlYlZpZXdEYXRhKTsKKworICAgIHJldHVy
biB3ZWJWaWV3RGF0YS0+ZWRpdGFibGU7Cit9CisKKy8qKgorICogd2Via2l0X3dlYl92aWV3X3Nl
dF9lZGl0YWJsZToKKyAqIEB3ZWJfdmlldzogYSAjV2ViS2l0V2ViVmlldworICogQGZsYWc6IGEg
I2dib29sZWFuIGluZGljYXRpbmcgdGhlIGVkaXRhYmxlIHN0YXRlCisgKgorICogU2V0cyB3aGV0
aGVyIEB3ZWJfdmlldyBhbGxvd3MgdGhlIHVzZXIgdG8gZWRpdCBpdHMgSFRNTCBkb2N1bWVudC4K
KyAqCisgKiBJZiBAZmxhZyBpcyAlVFJVRSwgQHdlYl92aWV3IGFsbG93cyB0aGUgdXNlciB0byBl
ZGl0IHRoZSBkb2N1bWVudC4gSWYgQGZsYWcgaXMKKyAqICVGQUxTRSwgYW4gZWxlbWVudCBpbiBA
d2ViX3ZpZXcncyBkb2N1bWVudCBjYW4gb25seSBiZSBlZGl0ZWQgaWYgdGhlCisgKiBDT05URU5U
RURJVEFCTEUgYXR0cmlidXRlIGhhcyBiZWVuIHNldCBvbiB0aGUgZWxlbWVudCBvciBvbmUgb2Yg
aXRzIHBhcmVudAorICogZWxlbWVudHMuIFlvdSBjYW4gY2hhbmdlIEB3ZWJfdmlldydzIGRvY3Vt
ZW50IHByb2dyYW1tYXRpY2FsbHkgcmVnYXJkbGVzcyBvZgorICogdGhpcyBzZXR0aW5nLiBCeSBk
ZWZhdWx0IGEgI1dlYktpdFdlYlZpZXcgaXMgbm90IGVkaXRhYmxlLgorCisgKiBOb3JtYWxseSwg
YW4gSFRNTCBkb2N1bWVudCBpcyBub3QgZWRpdGFibGUgdW5sZXNzIHRoZSBlbGVtZW50cyB3aXRo
aW4gdGhlCisgKiBkb2N1bWVudCBhcmUgZWRpdGFibGUuIFRoaXMgZnVuY3Rpb24gcHJvdmlkZXMg
YSBsb3ctbGV2ZWwgd2F5IHRvIG1ha2UgdGhlCisgKiBjb250ZW50cyBvZiBhICNXZWJLaXRXZWJW
aWV3IGVkaXRhYmxlIHdpdGhvdXQgYWx0ZXJpbmcgdGhlIGRvY3VtZW50IG9yIERPTQorICogc3Ry
dWN0dXJlLgorICovCit2b2lkIHdlYmtpdF93ZWJfdmlld19zZXRfZWRpdGFibGUoV2ViS2l0V2Vi
Vmlldyogd2ViVmlldywgZ2Jvb2xlYW4gZmxhZykKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKFdF
QktJVF9JU19XRUJfVklFVyh3ZWJWaWV3KSk7CisgICAgZmxhZyA9IGZsYWcgIT0gRkFMU0U7CisK
KyAgICBXZWJLaXRXZWJWaWV3UHJpdmF0ZSogd2ViVmlld0RhdGEgPSBXRUJLSVRfV0VCX1ZJRVdf
R0VUX1BSSVZBVEUod2ViVmlldyk7CisgICAgQVNTRVJUKHdlYlZpZXdEYXRhKTsKKworICAgIEZy
YW1lKiBtYWluRnJhbWUgPSBjb3JlKHdlYlZpZXdEYXRhLT5tYWluRnJhbWUpOworICAgIGdfcmV0
dXJuX2lmX2ZhaWwobWFpbkZyYW1lKTsKKworICAgIC8vIFRPRE86IFdoYXQgaGFwcGVucyB3aGVu
IHRoZSBmcmFtZSBpcyByZXBsYWNlZD8KKyAgICBpZiAoZmxhZyA9PSB3ZWJWaWV3RGF0YS0+ZWRp
dGFibGUpCisgICAgICAgIHJldHVybjsKKworICAgIHdlYlZpZXdEYXRhLT5lZGl0YWJsZSA9IGZs
YWc7CisKKyAgICBpZiAoZmxhZykgeworICAgICAgICBtYWluRnJhbWUtPmFwcGx5RWRpdGluZ1N0
eWxlVG9Cb2R5RWxlbWVudCgpOworICAgICAgICAvLyBUT0RPOiBJZiB0aGUgV2ViS2l0V2ViVmll
dyBpcyBtYWRlIGVkaXRhYmxlIGFuZCB0aGUgc2VsZWN0aW9uIGlzIGVtcHR5LCBzZXQgaXQgdG8g
c29tZXRoaW5nLgorICAgICAgICAvL2lmICghd2Via2l0X3dlYl92aWV3X2dldF9zZWxlY3RlZF9k
b21fcmFuZ2Uod2ViVmlldykpCisgICAgICAgIC8vICAgIG1haW5GcmFtZS0+c2V0U2VsZWN0aW9u
RnJvbU5vbmUoKTsKKyAgICB9IGVsc2UKKyAgICAgICAgbWFpbkZyYW1lLT5yZW1vdmVFZGl0aW5n
U3R5bGVGcm9tQm9keUVsZW1lbnQoKTsKK30KKworfQpJbmRleDogV2ViS2l0L2d0ay9XZWJWaWV3
L3dlYmtpdHdlYnZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0
d2Vidmlldy5oCShyZXZpc2lvbiAwKQorKysgV2ViS2l0L2d0ay9XZWJWaWV3L3dlYmtpdHdlYnZp
ZXcuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAorICog
My4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFt
ZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAq
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdFQktJVF9XRUJfVklFV19ICisjZGVm
aW5lIFdFQktJVF9XRUJfVklFV19ICisKKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisKKyNpbmNsdWRl
ICJ3ZWJraXRkZWZpbmVzLmgiCisjaW5jbHVkZSAid2Via2l0c2V0dGluZ3MuaCIKKworR19CRUdJ
Tl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9UWVBFX1dFQl9WSUVXICAgICAgICAgICAgKHdlYmtp
dF93ZWJfdmlld19nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfV0VCX1ZJRVcob2JqKSAgICAg
ICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX1RZUEVfV0VC
X1ZJRVcsIFdlYktpdFdlYlZpZXcpKQorI2RlZmluZSBXRUJLSVRfV0VCX1ZJRVdfQ0xBU1Moa2xh
c3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX1RZUEVfV0VC
X1ZJRVcsIFdlYktpdFdlYlZpZXdDbGFzcykpCisjZGVmaW5lIFdFQktJVF9JU19XRUJfVklFVyhv
YmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfVFlQ
RV9XRUJfVklFVykpCisjZGVmaW5lIFdFQktJVF9JU19XRUJfVklFV19DTEFTUyhrbGFzcykgKEdf
VFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfVFlQRV9XRUJfVklFVykpCisj
ZGVmaW5lIFdFQktJVF9XRUJfVklFV19HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9H
RVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfVFlQRV9XRUJfVklFVywgV2ViS2l0V2ViVmlld0NsYXNz
KSkKKworCit0eXBlZGVmIGVudW0geworICAgIFdFQktJVF9OQVZJR0FUSU9OX1JFU1BPTlNFX0FD
Q0VQVCwKKyAgICBXRUJLSVRfTkFWSUdBVElPTl9SRVNQT05TRV9JR05PUkUsCisgICAgV0VCS0lU
X05BVklHQVRJT05fUkVTUE9OU0VfRE9XTkxPQUQKK30gV2ViS2l0TmF2aWdhdGlvblJlc3BvbnNl
OworCisKKworc3RydWN0IF9XZWJLaXRXZWJWaWV3IHsKKyAgICBHdGtDb250YWluZXIgcGFyZW50
OworfTsKKworc3RydWN0IF9XZWJLaXRXZWJWaWV3Q2xhc3MgeworICAgIEd0a0NvbnRhaW5lckNs
YXNzIHBhcmVudDsKKworICAgIC8qCisgICAgICogZGVmYXVsdCBoYW5kbGVyL3ZpcnR1YWwgbWV0
aG9kcworICAgICAqIERJU0NVU1M6IGNyZWF0ZV93ZWJfdmlldyBuZWVkcyBhIHJlcXVlc3QgYW5k
IHNob3VsZCB3ZSBtYWtlIHRoaXMgYSBzaWduYWwgd2l0aCBkZWZhdWx0IGhhbmRsZXI/IHRoaXMg
d291bGQKKyAgICAgKiByZXF1aXJlIHNvbWVvbmUgZG9pbmcgYSBnX3NpZ25hbF9zdG9wX2VtaXNz
aW9uX2J5X25hbWUKKyAgICAgKiBXZWJVSURlbGVnYXRlIGhhcyBub3RoaW5nIGZvciBjcmVhdGVf
ZnJhbWUsIFdlYlBvbGljeURlbGVnYXRlIGFzIHdlbGwuLi4KKyAgICAgKi8KKyAgICBXZWJLaXRX
ZWJWaWV3KiAgKCpjcmVhdGVfd2ViX3ZpZXcpICAoV2ViS2l0V2ViVmlldyogd2ViX3ZpZXcpOwor
CisgICAgLyoKKyAgICAgKiBUT0RPOiBGSVhNRTogQ3JlYXRlIHNvbWV0aGluZyBsaWtlIFdlYlBv
bGljeURlY2lzaW9uTGlzdGVuZXJfUHJvdG9jb2wgaW5zdGVhZAorICAgICAqLworICAgIFdlYktp
dE5hdmlnYXRpb25SZXNwb25zZSAoKm5hdmlnYXRpb25fcmVxdWVzdGVkKSAoV2ViS2l0V2ViVmll
dyogd2ViX3ZpZXcsIFdlYktpdFdlYkZyYW1lKiBmcmFtZSwgV2ViS2l0TmV0d29ya1JlcXVlc3Qq
IHJlcXVlc3QpOworCisgICAgdm9pZCAoKndpbmRvd19vYmplY3RfY2xlYXJlZCkgKFdlYktpdFdl
YlZpZXcqIHdlYl92aWV3LCBXZWJLaXRXZWJGcmFtZSogZnJhbWUsIEpTR2xvYmFsQ29udGV4dFJl
ZiBjb250ZXh0LCBKU09iamVjdFJlZiB3aW5kb3dfb2JqZWN0KTsKKyAgICBnY2hhciogICAoKmNo
b29zZV9maWxlKSAoV2ViS2l0V2ViVmlldyogd2ViX3ZpZXcsIFdlYktpdFdlYkZyYW1lKiBmcmFt
ZSwgY29uc3QgZ2NoYXIqIG9sZF9maWxlKTsKKyAgICBnYm9vbGVhbiAoKnNjcmlwdF9hbGVydCkg
KFdlYktpdFdlYlZpZXcqIHdlYl92aWV3LCBXZWJLaXRXZWJGcmFtZSogZnJhbWUsIGNvbnN0IGdj
aGFyKiBhbGVydF9tZXNzYWdlKTsKKyAgICBnYm9vbGVhbiAoKnNjcmlwdF9jb25maXJtKSAoV2Vi
S2l0V2ViVmlldyogd2ViX3ZpZXcsIFdlYktpdFdlYkZyYW1lKiBmcmFtZSwgY29uc3QgZ2NoYXIq
IGNvbmZpcm1fbWVzc2FnZSwgZ2Jvb2xlYW4qIGRpZF9jb25maXJtKTsKKyAgICBnYm9vbGVhbiAo
KnNjcmlwdF9wcm9tcHQpIChXZWJLaXRXZWJWaWV3KiB3ZWJfdmlldywgV2ViS2l0V2ViRnJhbWUq
IGZyYW1lLCBjb25zdCBnY2hhciogbWVzc2FnZSwgY29uc3QgZ2NoYXIqIGRlZmF1bHRfdmFsdWUs
IGdjaGFyKiogdmFsdWUpOworICAgIGdib29sZWFuICgqY29uc29sZV9tZXNzYWdlKSAoV2ViS2l0
V2ViVmlldyogd2ViX3ZpZXcsIGNvbnN0IGdjaGFyKiBtZXNzYWdlLCB1bnNpZ25lZCBpbnQgbGlu
ZV9udW1iZXIsIGNvbnN0IGdjaGFyKiBzb3VyY2VfaWQpOworCisgICAgLyoKKyAgICAgKiBpbnRl
cm5hbAorICAgICAqLworICAgIHZvaWQgICAoKnNldF9zY3JvbGxfYWRqdXN0bWVudHMpIChXZWJL
aXRXZWJWaWV3KiwgR3RrQWRqdXN0bWVudCosIEd0a0FkanVzdG1lbnQqKTsKK307CisKK1dFQktJ
VF9BUEkgR1R5cGUKK3dlYmtpdF93ZWJfdmlld19nZXRfdHlwZSAodm9pZCk7CisKK1dFQktJVF9B
UEkgR3RrV2lkZ2V0Kgord2Via2l0X3dlYl92aWV3X25ldyAodm9pZCk7CisKK1dFQktJVF9BUEkg
Z2Jvb2xlYW4KK3dlYmtpdF93ZWJfdmlld19jYW5fZ29fYmFja3dhcmQgKFdlYktpdFdlYlZpZXcq
IHdlYl92aWV3KTsKKworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0X3dlYl92aWV3X2Nhbl9n
b19mb3J3YXJkIChXZWJLaXRXZWJWaWV3KiB3ZWJfdmlldyk7CisKK1dFQktJVF9BUEkgdm9pZAor
d2Via2l0X3dlYl92aWV3X2dvX2JhY2t3YXJkIChXZWJLaXRXZWJWaWV3KiB3ZWJfdmlldyk7CisK
K1dFQktJVF9BUEkgdm9pZAord2Via2l0X3dlYl92aWV3X2dvX2ZvcndhcmQgKFdlYktpdFdlYlZp
ZXcqIHdlYl92aWV3KTsKKworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfd2ViX3ZpZXdfc3RvcF9s
b2FkaW5nIChXZWJLaXRXZWJWaWV3KiB3ZWJfdmlldyk7CisKK1dFQktJVF9BUEkgdm9pZAord2Vi
a2l0X3dlYl92aWV3X29wZW4gKFdlYktpdFdlYlZpZXcqIHdlYl92aWV3LCBjb25zdCBnY2hhciog
dXJpKTsKKworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfd2ViX3ZpZXdfcmVsb2FkIChXZWJLaXRX
ZWJWaWV3ICp3ZWJfdmlldyk7CisKK1dFQktJVF9BUEkgdm9pZAord2Via2l0X3dlYl92aWV3X2xv
YWRfc3RyaW5nIChXZWJLaXRXZWJWaWV3KiB3ZWJfdmlldywgY29uc3QgZ2NoYXIqIGNvbnRlbnQs
IGNvbnN0IGdjaGFyKiBjb250ZW50X21pbWVfdHlwZSwgY29uc3QgZ2NoYXIqIGNvbnRlbnRfZW5j
b2RpbmcsIGNvbnN0IGdjaGFyKiBiYXNlX3VyaSk7CisKK1dFQktJVF9BUEkgdm9pZAord2Via2l0
X3dlYl92aWV3X2xvYWRfaHRtbF9zdHJpbmcgKFdlYktpdFdlYlZpZXcqIHdlYl92aWV3LCBjb25z
dCBnY2hhciogY29udGVudCwgY29uc3QgZ2NoYXIqIGJhc2VfdXJpKTsKKworV0VCS0lUX0FQSSBX
ZWJLaXRXZWJGcmFtZSoKK3dlYmtpdF93ZWJfdmlld19nZXRfbWFpbl9mcmFtZSAoV2ViS2l0V2Vi
Vmlldyogd2ViX3ZpZXcpOworCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF93ZWJfdmlld19leGVj
dXRlX3NjcmlwdCAoV2ViS2l0V2ViVmlldyogd2ViX3ZpZXcsIGNvbnN0IGdjaGFyKiBzY3JpcHQp
OworCitXRUJLSVRfQVBJIGdib29sZWFuCit3ZWJraXRfd2ViX3ZpZXdfZ2V0X2VkaXRhYmxlIChX
ZWJLaXRXZWJWaWV3KiB3ZWJfdmlldyk7CisKK1dFQktJVF9BUEkgdm9pZAord2Via2l0X3dlYl92
aWV3X3NldF9lZGl0YWJsZSAoV2ViS2l0V2ViVmlldyogd2ViX3ZpZXcsIGdib29sZWFuIGZsYWcp
OworCitHX0VORF9ERUNMUworCisjZW5kaWYKSW5kZXg6IFdlYktpdFRvb2xzL0NoYW5nZUxvZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDI4MjYzKQorKysg
V2ViS2l0VG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzAgQEAKKzIw
MDctMTEtMzAgIEFscCBUb2tlciAgPGFscEBhdG9rZXIuY29tPgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE1NjkxCisgICAgICAgIFtHVEtdIFB1YmxpYyBBUEkgZG9lcyBub3QgZm9s
bG93IEdUSysgY29udmVudGlvbnMKKworICAgICAgICBSZWZhY3RvciB0aGUgV2ViS2l0L0dUSysg
cHVibGljIEFQSS4gQ2hhbmdlczoKKyAgICAgICAgICBXZWJLaXRQYWdlIC0+IFdlYktpdFdlYlZp
ZXcKKyAgICAgICAgICBXZWJLaXRGcmFtZSAtPiBXZWJLaXRXZWJGcmFtZQorCisgICAgICAgIFB1
YmxpYyBBUEkgc291cmNlIGFuZCBoZWFkZXIgbmFtZXMgaGF2ZSBiZWVuIHVwZGF0ZWQgdG8gbWly
cm9yIHRoZSBBUEkKKyAgICAgICAgY2hhbmdlcy4KKworICAgICAgICBUaGUgQVBJIGlzIG5vdyBr
ZXB0IGluIFdlYktpdC9ndGsvV2ViVmlldyB0byBtYXRjaCBvdGhlciBwb3J0cyBpbiB0aGUKKyAg
ICAgICAgc2FtZSBjbGFzcyBzdWNoIGFzIE1hYyBhbmQgV2luLgorCisgICAgICAgICogR3RrTGF1
bmNoZXIvbWFpbi5jOgorICAgICAgICAoYWN0aXZhdGVfdXJpX2VudHJ5X2NiKToKKyAgICAgICAg
KGxpbmtfaG92ZXJfY2IpOgorICAgICAgICAodGl0bGVfY2hhbmdlX2NiKToKKyAgICAgICAgKHBy
b2dyZXNzX2NoYW5nZV9jYik6CisgICAgICAgIChnb19iYWNrX2NiKToKKyAgICAgICAgKGdvX2Zv
cndhcmRfY2IpOgorICAgICAgICAoY3JlYXRlX2Jyb3dzZXIpOgorICAgICAgICAobWFpbik6CisK
IDIwMDctMTEtMzAgIEFkYW0gUm9iZW4gIDxhcm9iZW5AYXBwbGUuY29tPgogCiAgICAgICAgIEhv
cGVmdWxseSB0aGUgZmluYWwgYnVpbGQgZml4CkluZGV4OiBXZWJLaXRUb29scy9HdGtMYXVuY2hl
ci9tYWluLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvR3RrTGF1bmNoZXIvbWFpbi5jCShy
ZXZpc2lvbiAyODI1MSkKKysrIFdlYktpdFRvb2xzL0d0a0xhdW5jaGVyL21haW4uYwkod29ya2lu
ZyBjb3B5KQpAQCAtMjQsMTQgKzI0LDE0IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpbmNs
dWRlICJ3ZWJraXRndGtwYWdlLmgiCi0jaW5jbHVkZSAid2Via2l0Z3RrZ2xvYmFsLmgiCisjaW5j
bHVkZSAid2Via2l0d2Vidmlldy5oIgorI2luY2x1ZGUgIndlYmtpdGdsb2JhbC5oIgogI2luY2x1
ZGUgPGd0ay9ndGsuaD4KIAogc3RhdGljIEd0a1dpZGdldCogbWFpbl93aW5kb3c7CiBzdGF0aWMg
R3RrV2lkZ2V0KiB1cmlfZW50cnk7CiBzdGF0aWMgR3RrU3RhdHVzYmFyKiBtYWluX3N0YXR1c2Jh
cjsKLXN0YXRpYyBXZWJLaXRQYWdlKiB3ZWJfcGFnZTsKK3N0YXRpYyBXZWJLaXRXZWJWaWV3KiB3
ZWJfdmlldzsKIHN0YXRpYyBnY2hhciogbWFpbl90aXRsZTsKIHN0YXRpYyBnaW50IGxvYWRfcHJv
Z3Jlc3M7CiBzdGF0aWMgZ3VpbnQgc3RhdHVzX2NvbnRleHRfaWQ7CkBAIC00MSw3ICs0MSw3IEBA
IGFjdGl2YXRlX3VyaV9lbnRyeV9jYiAoR3RrV2lkZ2V0KiBlbnRyeSwKIHsKICAgICBjb25zdCBn
Y2hhciogdXJpID0gZ3RrX2VudHJ5X2dldF90ZXh0IChHVEtfRU5UUlkgKGVudHJ5KSk7CiAgICAg
Z19hc3NlcnQgKHVyaSk7Ci0gICAgd2Via2l0X3BhZ2Vfb3BlbiAod2ViX3BhZ2UsIHVyaSk7Cisg
ICAgd2Via2l0X3dlYl92aWV3X29wZW4gKHdlYl92aWV3LCB1cmkpOwogfQogCiBzdGF0aWMgdm9p
ZApAQCAtNTcsNyArNTcsNyBAQCB1cGRhdGVfdGl0bGUgKEd0a1dpbmRvdyogd2luZG93KQogfQog
CiBzdGF0aWMgdm9pZAotbGlua19ob3Zlcl9jYiAoV2ViS2l0UGFnZSogcGFnZSwgY29uc3QgZ2No
YXIqIHRpdGxlLCBjb25zdCBnY2hhciogbGluaywgZ3BvaW50ZXIgZGF0YSkKK2xpbmtfaG92ZXJf
Y2IgKFdlYktpdFdlYlZpZXcqIHBhZ2UsIGNvbnN0IGdjaGFyKiB0aXRsZSwgY29uc3QgZ2NoYXIq
IGxpbmssIGdwb2ludGVyIGRhdGEpCiB7CiAgICAgLyogdW5kZXJmbG93IGlzIGFsbG93ZWQgKi8K
ICAgICBndGtfc3RhdHVzYmFyX3BvcCAobWFpbl9zdGF0dXNiYXIsIHN0YXR1c19jb250ZXh0X2lk
KTsKQEAgLTY2LDcgKzY2LDcgQEAgbGlua19ob3Zlcl9jYiAoV2ViS2l0UGFnZSogcGFnZSwgY29u
c3QgZwogfQogCiBzdGF0aWMgdm9pZAotdGl0bGVfY2hhbmdlX2NiIChXZWJLaXRQYWdlKiBwYWdl
LCBjb25zdCBnY2hhciogdGl0bGUsIGNvbnN0IGdjaGFyKiB1cmksIGdwb2ludGVyIGRhdGEpCit0
aXRsZV9jaGFuZ2VfY2IgKFdlYktpdFdlYlZpZXcqIHBhZ2UsIGNvbnN0IGdjaGFyKiB0aXRsZSwg
Y29uc3QgZ2NoYXIqIHVyaSwgZ3BvaW50ZXIgZGF0YSkKIHsKICAgICBndGtfZW50cnlfc2V0X3Rl
eHQgKEdUS19FTlRSWSAodXJpX2VudHJ5KSwgdXJpKTsKIApAQCAtNzcsNyArNzcsNyBAQCB0aXRs
ZV9jaGFuZ2VfY2IgKFdlYktpdFBhZ2UqIHBhZ2UsIGNvbnN0CiB9CiAKIHN0YXRpYyB2b2lkCi1w
cm9ncmVzc19jaGFuZ2VfY2IgKFdlYktpdFBhZ2UqIHBhZ2UsIGdpbnQgcHJvZ3Jlc3MsIGdwb2lu
dGVyIGRhdGEpCitwcm9ncmVzc19jaGFuZ2VfY2IgKFdlYktpdFdlYlZpZXcqIHBhZ2UsIGdpbnQg
cHJvZ3Jlc3MsIGdwb2ludGVyIGRhdGEpCiB7CiAgICAgbG9hZF9wcm9ncmVzcyA9IHByb2dyZXNz
OwogICAgIHVwZGF0ZV90aXRsZSAoR1RLX1dJTkRPVyAobWFpbl93aW5kb3cpKTsKQEAgLTkyLDEz
ICs5MiwxMyBAQCBkZXN0cm95X2NiIChHdGtXaWRnZXQqIHdpZGdldCwgZ3BvaW50ZXIgCiBzdGF0
aWMgdm9pZAogZ29fYmFja19jYiAoR3RrV2lkZ2V0KiB3aWRnZXQsIGdwb2ludGVyIGRhdGEpCiB7
Ci0gICAgd2Via2l0X3BhZ2VfZ29fYmFja3dhcmQgKHdlYl9wYWdlKTsKKyAgICB3ZWJraXRfd2Vi
X3ZpZXdfZ29fYmFja3dhcmQgKHdlYl92aWV3KTsKIH0KIAogc3RhdGljIHZvaWQKIGdvX2Zvcndh
cmRfY2IgKEd0a1dpZGdldCogd2lkZ2V0LCBncG9pbnRlciBkYXRhKQogewotICAgIHdlYmtpdF9w
YWdlX2dvX2ZvcndhcmQgKHdlYl9wYWdlKTsKKyAgICB3ZWJraXRfd2ViX3ZpZXdfZ29fZm9yd2Fy
ZCAod2ViX3ZpZXcpOwogfQogCiBzdGF0aWMgR3RrV2lkZ2V0KgpAQCAtMTA3LDEyICsxMDcsMTIg
QEAgY3JlYXRlX2Jyb3dzZXIgKCkKICAgICBHdGtXaWRnZXQqIHNjcm9sbGVkX3dpbmRvdyA9IGd0
a19zY3JvbGxlZF93aW5kb3dfbmV3IChOVUxMLCBOVUxMKTsKICAgICBndGtfc2Nyb2xsZWRfd2lu
ZG93X3NldF9wb2xpY3kgKEdUS19TQ1JPTExFRF9XSU5ET1cgKHNjcm9sbGVkX3dpbmRvdyksIEdU
S19QT0xJQ1lfQVVUT01BVElDLCBHVEtfUE9MSUNZX0FVVE9NQVRJQyk7CiAKLSAgICB3ZWJfcGFn
ZSA9IFdFQktJVF9QQUdFICh3ZWJraXRfcGFnZV9uZXcgKCkpOwotICAgIGd0a19jb250YWluZXJf
YWRkIChHVEtfQ09OVEFJTkVSIChzY3JvbGxlZF93aW5kb3cpLCBHVEtfV0lER0VUICh3ZWJfcGFn
ZSkpOworICAgIHdlYl92aWV3ID0gV0VCS0lUX1dFQl9WSUVXICh3ZWJraXRfd2ViX3ZpZXdfbmV3
ICgpKTsKKyAgICBndGtfY29udGFpbmVyX2FkZCAoR1RLX0NPTlRBSU5FUiAoc2Nyb2xsZWRfd2lu
ZG93KSwgR1RLX1dJREdFVCAod2ViX3ZpZXcpKTsKIAotICAgIGdfc2lnbmFsX2Nvbm5lY3QgKEdf
T0JKRUNUICh3ZWJfcGFnZSksICJ0aXRsZS1jaGFuZ2VkIiwgR19DQUxMQkFDSyAodGl0bGVfY2hh
bmdlX2NiKSwgd2ViX3BhZ2UpOwotICAgIGdfc2lnbmFsX2Nvbm5lY3QgKEdfT0JKRUNUICh3ZWJf
cGFnZSksICJsb2FkLXByb2dyZXNzLWNoYW5nZWQiLCBHX0NBTExCQUNLIChwcm9ncmVzc19jaGFu
Z2VfY2IpLCB3ZWJfcGFnZSk7Ci0gICAgZ19zaWduYWxfY29ubmVjdCAoR19PQkpFQ1QgKHdlYl9w
YWdlKSwgImhvdmVyaW5nLW92ZXItbGluayIsIEdfQ0FMTEJBQ0sgKGxpbmtfaG92ZXJfY2IpLCB3
ZWJfcGFnZSk7CisgICAgZ19zaWduYWxfY29ubmVjdCAoR19PQkpFQ1QgKHdlYl92aWV3KSwgInRp
dGxlLWNoYW5nZWQiLCBHX0NBTExCQUNLICh0aXRsZV9jaGFuZ2VfY2IpLCB3ZWJfdmlldyk7Cisg
ICAgZ19zaWduYWxfY29ubmVjdCAoR19PQkpFQ1QgKHdlYl92aWV3KSwgImxvYWQtcHJvZ3Jlc3Mt
Y2hhbmdlZCIsIEdfQ0FMTEJBQ0sgKHByb2dyZXNzX2NoYW5nZV9jYiksIHdlYl92aWV3KTsKKyAg
ICBnX3NpZ25hbF9jb25uZWN0IChHX09CSkVDVCAod2ViX3ZpZXcpLCAiaG92ZXJpbmctb3Zlci1s
aW5rIiwgR19DQUxMQkFDSyAobGlua19ob3Zlcl9jYiksIHdlYl92aWV3KTsKIAogICAgIHJldHVy
biBzY3JvbGxlZF93aW5kb3c7CiB9CkBAIC0xODgsOSArMTg4LDkgQEAgbWFpbiAoaW50IGFyZ2Ms
IGNoYXIqIGFyZ3ZbXSkKICAgICBndGtfY29udGFpbmVyX2FkZCAoR1RLX0NPTlRBSU5FUiAobWFp
bl93aW5kb3cpLCB2Ym94KTsKIAogICAgIGdjaGFyKiB1cmkgPSAoZ2NoYXIqKSAoYXJnYyA+IDEg
PyBhcmd2WzFdIDogImh0dHA6Ly93d3cuZ29vZ2xlLmNvbS8iKTsKLSAgICB3ZWJraXRfcGFnZV9v
cGVuICh3ZWJfcGFnZSwgdXJpKTsKKyAgICB3ZWJraXRfd2ViX3ZpZXdfb3BlbiAod2ViX3ZpZXcs
IHVyaSk7CiAKLSAgICBndGtfd2lkZ2V0X2dyYWJfZm9jdXMgKEdUS19XSURHRVQgKHdlYl9wYWdl
KSk7CisgICAgZ3RrX3dpZGdldF9ncmFiX2ZvY3VzIChHVEtfV0lER0VUICh3ZWJfdmlldykpOwog
ICAgIGd0a193aWRnZXRfc2hvd19hbGwgKG1haW5fd2luZG93KTsKICAgICBndGtfbWFpbiAoKTsK
IAo=
</data>
<flag name="review"
          id="7580"
          type_id="1"
          status="+"
          setter="aroben"
    />
          </attachment>
      

    </bug>

</bugzilla>