<?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>133680</bug_id>
          
          <creation_ts>2014-06-10 09:36:28 -0700</creation_ts>
          <short_desc>[GTK] WebKitWebView::create should receive information about the navigation action</short_desc>
          <delta_ts>2014-07-02 00:20:19 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKitGTK</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Gtk</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>133724</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Carlos Garcia Campos">cgarcia</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>berto</cc>
    
    <cc>bunhere</cc>
    
    <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>gustavo</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>mrobinson</cc>
    
    <cc>rakuco</cc>
    
    <cc>sergio</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1014412</commentid>
    <comment_count>0</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-06-10 09:36:28 -0700</bug_when>
    <thetext>In order to properly implement a popup blocker, the signal should provide information about the navigation action like the navigation type, the request, mouse button and key modifiers and whether it was triggered by a user gesture, at least.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1014417</commentid>
    <comment_count>1</comment_count>
      <attachid>232791</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-06-10 09:53:14 -0700</bug_when>
    <thetext>Created attachment 232791
Patch

This breaks the API, as we commented in the mailing list. I hope only ephy uses this API, so it will not cause major problems for most of the users that will only have to recompile when we bump the binary version.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1014418</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-06-10 09:53:48 -0700</bug_when>
    <thetext>Thanks for the patch. If this patch contains new public API please make sure it follows the guidelines for new WebKit2 GTK+ API. See http://trac.webkit.org/wiki/WebKitGTK/AddingNewWebKit2API</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1014419</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-06-10 09:53:59 -0700</bug_when>
    <thetext>Attachment 232791 did not pass style-queue:


WARNING: File exempt from style guide. Skipping: &quot;Source/WebKit2/UIProcess/API/gtk/WebKitWebView.h&quot;
WARNING: File exempt from style guide. Skipping: &quot;Source/WebKit2/UIProcess/API/gtk/webkit2.h&quot;
WARNING: File exempt from style guide. Skipping: &quot;Source/WebKit2/UIProcess/API/gtk/WebKitNavigationAction.h&quot;
WARNING: File exempt from style guide. Skipping: &quot;Source/WebKit2/UIProcess/API/gtk/WebKitNavigationPolicyDecision.h&quot;
ERROR: Source/WebKit2/UIProcess/API/gtk/WebKitUIClient.cpp:63:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/API/gtk/WebKitUIClient.cpp:69:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/API/gtk/WebKitUIClient.cpp:74:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 3 in 25 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1017575</commentid>
    <comment_count>4</comment_count>
      <attachid>232791</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2014-06-23 09:32:59 -0700</bug_when>
    <thetext>Comment on attachment 232791
Patch

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

Seems okay, though I have a few  nits. I think, if possible, it&apos;d be better to pass WebHitTestResult&amp; everywhere instead of the internal data structure. Probably a good idea to fix up the style errors too. :)

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitNavigationActionPrivate.h:49
&gt; +    unsigned isUserGesture : 1;

Why not use a bool here?

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitUIClient.cpp:50
&gt; +        WebKitNavigationAction navigation(request.get(), navigationActionData);
&gt; +        return webkitWebViewCreateNewPage(m_webView, windowFeatures, &amp;navigation);

Nit: Probably &quot;action&quot; is a better name.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:940
&gt; +        g_cclosure_marshal_generic,

Is this really the correct marshaller for a OBJECT and an enum value?

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:1858
&gt; +    // FIXME: we should use a custom ContextMenuclient at some point.

Nit: ContextMenuclient -&gt; ContextMenuClient.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:1869
&gt; +    WebHitTestResult::Data data;
&gt; +    data.absoluteImageURL = webHitTestResult-&gt;absoluteImageURL();
&gt; +    data.absoluteLinkURL = webHitTestResult-&gt;absoluteLinkURL();
&gt; +    data.absoluteMediaURL = webHitTestResult-&gt;absoluteMediaURL();
&gt; +    data.linkLabel = webHitTestResult-&gt;linkLabel();
&gt; +    data.linkTitle = webHitTestResult-&gt;linkTitle();
&gt; +    data.isContentEditable = webHitTestResult-&gt;isContentEditable();
&gt; +    data.elementBoundingBox = webHitTestResult-&gt;elementBoundingBox();
&gt; +    data.isScrollbar = webHitTestResult-&gt;isScrollbar();
&gt; +
&gt; +    GRefPtr&lt;WebKitHitTestResult&gt; hitTestResult = adoptGRef(webkitHitTestResultCreate(data));

Wow. It&apos;d be great to avoid all these copies! Why not just pass a const WebHitTestResult&amp; instead of Data?

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.h:212
&gt; +                                                WebKitNavigationAction      *navigation);

Probably should be called action or navigation_action.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1017601</commentid>
    <comment_count>5</comment_count>
      <attachid>232791</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2014-06-23 10:46:02 -0700</bug_when>
    <thetext>Comment on attachment 232791
Patch

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

New API looks good to me!

&gt; Source/WebKit2/ChangeLog:10
&gt; +        signal. In the future it could alsp be also for the

s/alsp//</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1017928</commentid>
    <comment_count>6</comment_count>
      <attachid>232791</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-06-24 06:54:14 -0700</bug_when>
    <thetext>Comment on attachment 232791
Patch

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

I&apos;m using WebHitTestResult::Data because that&apos;s what we receive now in API:UIClient methods, WebHitTestResult is the C API wrapper, but we are not using the C API for the UI client anymore. So, instead of allocating a WebHitTestResult I prefer to use the given const reference. It&apos;s only a problem for the context menu, until we use a custom client that receives a const WebHitTestResult::Data&amp; too. And the style issues are false positives of std::function

&gt;&gt; Source/WebKit2/ChangeLog:10
&gt;&gt; +        signal. In the future it could alsp be also for the
&gt; 
&gt; s/alsp//

Oops.

&gt;&gt; Source/WebKit2/UIProcess/API/gtk/WebKitNavigationActionPrivate.h:49
&gt;&gt; +    unsigned isUserGesture : 1;
&gt; 
&gt; Why not use a bool here?

No reason, we can use bool as well.

&gt;&gt; Source/WebKit2/UIProcess/API/gtk/WebKitUIClient.cpp:50
&gt;&gt; +        return webkitWebViewCreateNewPage(m_webView, windowFeatures, &amp;navigation);
&gt; 
&gt; Nit: Probably &quot;action&quot; is a better name.

Ok.

&gt;&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:940
&gt;&gt; +        g_cclosure_marshal_generic,
&gt; 
&gt; Is this really the correct marshaller for a OBJECT and an enum value?

Yes, the generic marshaller can be used for any parameters

&gt;&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:1869
&gt;&gt; +    GRefPtr&lt;WebKitHitTestResult&gt; hitTestResult = adoptGRef(webkitHitTestResultCreate(data));
&gt; 
&gt; Wow. It&apos;d be great to avoid all these copies! Why not just pass a const WebHitTestResult&amp; instead of Data?

That&apos;s what the previous FIXME is about :-)

&gt;&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.h:212
&gt;&gt; +                                                WebKitNavigationAction      *navigation);
&gt; 
&gt; Probably should be called action or navigation_action.

Ok.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1017947</commentid>
    <comment_count>7</comment_count>
      <attachid>233705</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-06-24 08:13:13 -0700</bug_when>
    <thetext>Created attachment 233705
Updated patch

Fixed review comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1017948</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-06-24 08:14:05 -0700</bug_when>
    <thetext>Attachment 233705 did not pass style-queue:


WARNING: File exempt from style guide. Skipping: &quot;Source/WebKit2/UIProcess/API/gtk/WebKitWebView.h&quot;
WARNING: File exempt from style guide. Skipping: &quot;Source/WebKit2/UIProcess/API/gtk/webkit2.h&quot;
WARNING: File exempt from style guide. Skipping: &quot;Source/WebKit2/UIProcess/API/gtk/WebKitNavigationAction.h&quot;
WARNING: File exempt from style guide. Skipping: &quot;Source/WebKit2/UIProcess/API/gtk/WebKitNavigationPolicyDecision.h&quot;
ERROR: Source/WebKit2/UIProcess/API/gtk/WebKitUIClient.cpp:63:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/API/gtk/WebKitUIClient.cpp:69:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/API/gtk/WebKitUIClient.cpp:74:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 3 in 25 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1017953</commentid>
    <comment_count>9</comment_count>
      <attachid>233708</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-06-24 08:43:31 -0700</bug_when>
    <thetext>Created attachment 233708
Fix the build

Broke the build while fixing review comments, it should work now</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1017954</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-06-24 08:45:59 -0700</bug_when>
    <thetext>Attachment 233708 did not pass style-queue:


WARNING: File exempt from style guide. Skipping: &quot;Source/WebKit2/UIProcess/API/gtk/WebKitWebView.h&quot;
WARNING: File exempt from style guide. Skipping: &quot;Source/WebKit2/UIProcess/API/gtk/webkit2.h&quot;
WARNING: File exempt from style guide. Skipping: &quot;Source/WebKit2/UIProcess/API/gtk/WebKitNavigationAction.h&quot;
WARNING: File exempt from style guide. Skipping: &quot;Source/WebKit2/UIProcess/API/gtk/WebKitNavigationPolicyDecision.h&quot;
ERROR: Source/WebKit2/UIProcess/API/gtk/WebKitUIClient.cpp:63:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/API/gtk/WebKitUIClient.cpp:69:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/API/gtk/WebKitUIClient.cpp:74:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 3 in 25 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1017966</commentid>
    <comment_count>11</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2014-06-24 09:06:39 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; Attachment 233708 [details] did not pass style-queue:
&gt; 
&gt; 
&gt; WARNING: File exempt from style guide. Skipping: &quot;Source/WebKit2/UIProcess/API/gtk/WebKitWebView.h&quot;
&gt; WARNING: File exempt from style guide. Skipping: &quot;Source/WebKit2/UIProcess/API/gtk/webkit2.h&quot;
&gt; WARNING: File exempt from style guide. Skipping: &quot;Source/WebKit2/UIProcess/API/gtk/WebKitNavigationAction.h&quot;
&gt; WARNING: File exempt from style guide. Skipping: &quot;Source/WebKit2/UIProcess/API/gtk/WebKitNavigationPolicyDecision.h&quot;
&gt; ERROR: Source/WebKit2/UIProcess/API/gtk/WebKitUIClient.cpp:63:  Extra space before ( in function call  [whitespace/parens] [4]
&gt; ERROR: Source/WebKit2/UIProcess/API/gtk/WebKitUIClient.cpp:69:  Extra space before ( in function call  [whitespace/parens] [4]
&gt; ERROR: Source/WebKit2/UIProcess/API/gtk/WebKitUIClient.cpp:74:  Extra space before ( in function call  [whitespace/parens] [4]
&gt; Total errors found: 3 in 25 files

Are these false-positives?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1018007</commentid>
    <comment_count>12</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-06-24 10:52:06 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; (In reply to comment #10)
&gt; &gt; Attachment 233708 [details] [details] did not pass style-queue:
&gt; &gt; 
&gt; &gt; 
&gt; &gt; WARNING: File exempt from style guide. Skipping: &quot;Source/WebKit2/UIProcess/API/gtk/WebKitWebView.h&quot;
&gt; &gt; WARNING: File exempt from style guide. Skipping: &quot;Source/WebKit2/UIProcess/API/gtk/webkit2.h&quot;
&gt; &gt; WARNING: File exempt from style guide. Skipping: &quot;Source/WebKit2/UIProcess/API/gtk/WebKitNavigationAction.h&quot;
&gt; &gt; WARNING: File exempt from style guide. Skipping: &quot;Source/WebKit2/UIProcess/API/gtk/WebKitNavigationPolicyDecision.h&quot;
&gt; &gt; ERROR: Source/WebKit2/UIProcess/API/gtk/WebKitUIClient.cpp:63:  Extra space before ( in function call  [whitespace/parens] [4]
&gt; &gt; ERROR: Source/WebKit2/UIProcess/API/gtk/WebKitUIClient.cpp:69:  Extra space before ( in function call  [whitespace/parens] [4]
&gt; &gt; ERROR: Source/WebKit2/UIProcess/API/gtk/WebKitUIClient.cpp:74:  Extra space before ( in function call  [whitespace/parens] [4]
&gt; &gt; Total errors found: 3 in 25 files
&gt; 
&gt; Are these false-positives?

Yes, the style checker thinks they are function calls, but they are std::function parameters

std::function&lt;void ()&gt;, std::function&lt;void (bool) and std::function&lt;void (const String&amp;)&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1018973</commentid>
    <comment_count>13</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-06-27 09:17:45 -0700</bug_when>
    <thetext>Any other objection here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1019918</commentid>
    <comment_count>14</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-07-02 00:20:19 -0700</bug_when>
    <thetext>Committed r170702: &lt;http://trac.webkit.org/changeset/170702&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>232791</attachid>
            <date>2014-06-10 09:53:14 -0700</date>
            <delta_ts>2014-06-24 08:13:13 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>wk2-navigation-action.diff</filename>
            <type>text/plain</type>
            <size>67930</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCA3NjNiNWFmLi42MDZkNjBiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODkg
QEAKKzIwMTQtMDYtMTAgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgorCisgICAgICAgIFtHVEtdIFdlYktpdFdlYlZpZXc6OmNyZWF0ZSBzaG91bGQgcmVjZWl2ZSBp
bmZvcm1hdGlvbiBhYm91dCB0aGUgbmF2aWdhdGlvbiBhY3Rpb24KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMzY4MAorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBXZWJLaXROYXZpZ2F0aW9uQWN0aW9u
IGJveGVkIHR5cGUgcmVwcmVzZW50aW5nIGEgbmF2aWdhdGlvbgorICAgICAgICBhY3Rpb24gdG8g
YmUgcGFzc2VkIGFzIHBhcmFtZXRlciBvZiBXZWJLaXRXZWJWaWV3OjpjcmVhdGUKKyAgICAgICAg
c2lnbmFsLiBJbiB0aGUgZnV0dXJlIGl0IGNvdWxkIGFsc3AgYmUgYWxzbyBmb3IgdGhlCisgICAg
ICAgIFdlYktpdE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbiBjbGFzcy4gVGhlIGNsYXNzIGNvbnRh
aW5zCisgICAgICAgIGluZm9ybWF0aW9uIGFib3V0IGEgbmF2aWdhdGlvbiBhY3Rpb24gbGlrZSB0
aGUgbmF2aWdhdGlvbiB0eXBlLAorICAgICAgICB0aGUgcmVxdWVzdCwgdGhlIG1vdXNlIGJ1dHRv
biBhbmQga2V5IG1vZGlmaWVycyBhbmQgd2hldGhlciBpdCB3YXMKKyAgICAgICAgc3RhcnRlZCBi
eSBhIHVzZXIgZ2VzdHVyZS4gVGhpcyBpbmZvcm1hdGlvbiBpcyBuZWVkZWQgdG8gYmUgYWJsZQor
ICAgICAgICB0byBpbXBsZW1lbnQgYSBwcm9wZXIgcG9wdXAgYmxvY2tlci4gU2luY2UgYWxsIHRo
YXQgaW5mb3JtYXRpb24gaXMKKyAgICAgICAgbm90IHByb3ZpZGVkIGJ5IHRoZSBDIEFQSSwgd2Ug
aGF2ZSBzd2l0Y2hlZCB0aGUgVUkgY2xpZW50IHRvIHVzZSBhCisgICAgICAgIGN1c3RvbSBjbGll
bnQgZGVyaXZlZCBmcm9tIEFQSTo6VUlDbGllbnQuIFRoaXMgYWxzbyBhdm9pZHMgYSBsb3QKKyAg
ICAgICAgb2YgdG9BUEkgLT4gdG9JbXBsIHVubmVlZGVkIGNvbnZlcnNpb25zLgorCisgICAgICAg
ICogUGxhdGZvcm1HVEsuY21ha2U6IEFkZCBuZXcgZmlsZXMgdG8gY29tcGlsYXRpb24uCisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0SGl0VGVzdFJlc3VsdC5jcHA6CisgICAgICAg
ICh3ZWJraXRIaXRUZXN0UmVzdWx0Q3JlYXRlKTogVXNlIGEgV2ViSGl0VGVzdFJlc3VsdDo6RGF0
YSBjb25zdAorICAgICAgICByZWZlcmVuY2UgaW5zdGVhZCBvZiBhIHBvaW50ZXIgdG8gYSBXZWJI
aXRUZXN0UmVzdWx0LgorICAgICAgICAod2Via2l0SGl0VGVzdFJlc3VsdENvbXBhcmUpOiBEaXR0
by4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRIaXRUZXN0UmVzdWx0UHJpdmF0
ZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdE5hdmlnYXRpb25BY3Rpb24u
Y3BwOiBBZGRlZC4KKyAgICAgICAgKHdlYmtpdE5hdmlnYXRpb25BY3Rpb25DcmVhdGUpOiBDcmVh
dGUgYSBXZWJLaXROYXZpZ2F0aW9uQWN0aW9uCisgICAgICAgIGZvciB0aGUgZ2l2ZW4gUmVzb3Vy
Y2VSZXF1ZXN0IGFuZCBOYXZpZ2F0aW9uQWN0aW9uRGF0YS4KKyAgICAgICAgKHdlYmtpdF9uYXZp
Z2F0aW9uX2FjdGlvbl9jb3B5KToKKyAgICAgICAgKHdlYmtpdF9uYXZpZ2F0aW9uX2FjdGlvbl9m
cmVlKToKKyAgICAgICAgKHdlYmtpdF9uYXZpZ2F0aW9uX2FjdGlvbl9nZXRfbmF2aWdhdGlvbl90
eXBlKToKKyAgICAgICAgKHdlYmtpdF9uYXZpZ2F0aW9uX2FjdGlvbl9nZXRfbW91c2VfYnV0dG9u
KToKKyAgICAgICAgKHdlYmtpdF9uYXZpZ2F0aW9uX2FjdGlvbl9nZXRfbW9kaWZpZXJzKToKKyAg
ICAgICAgKHdlYmtpdF9uYXZpZ2F0aW9uX2FjdGlvbl9nZXRfcmVxdWVzdCk6CisgICAgICAgICh3
ZWJraXRfbmF2aWdhdGlvbl9hY3Rpb25faXNfdXNlcl9nZXN0dXJlKToKKyAgICAgICAgKiBVSVBy
b2Nlc3MvQVBJL2d0ay9XZWJLaXROYXZpZ2F0aW9uQWN0aW9uLmg6IEFkZGVkLgorICAgICAgICAq
IFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdE5hdmlnYXRpb25BY3Rpb25Qcml2YXRlLmg6IEFkZGVk
LgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdE5hdmlnYXRpb25Qb2xpY3lEZWNp
c2lvbi5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFByaXZhdGUuY3BwOgor
ICAgICAgICAodG9HZGtNb2RpZmllcnMpOgorICAgICAgICAodG9XZWJLaXROYXZpZ2F0aW9uVHlw
ZSk6CisgICAgICAgICh0b1dlYktpdE1vdXNlQnV0dG9uKToKKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXRQcml2YXRlLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2Vi
S2l0VUlDbGllbnQuY3BwOgorICAgICAgICAoVUlDbGllbnQ6OlVJQ2xpZW50KTogSW1wbGVtZW50
IHRoZSBVSUNsaWVudCB1c2luZyBhIGN1c3RvbSBjbGFzcy4KKyAgICAgICAgKGF0dGFjaFVJQ2xp
ZW50VG9WaWV3KTogU2V0IHRoZSBVSUNsaWVudCBkaXJlY3RseSB0byB0aGUgV2ViUGFnZVByb3h5
LgorICAgICAgICAoY3JlYXRlTmV3UGFnZSk6IERlbGV0ZWQuCisgICAgICAgIChzaG93UGFnZSk6
IERlbGV0ZWQuCisgICAgICAgIChjbG9zZVBhZ2UpOiBEZWxldGVkLgorICAgICAgICAocnVuSmF2
YVNjcmlwdEFsZXJ0KTogRGVsZXRlZC4KKyAgICAgICAgKHJ1bkphdmFTY3JpcHRDb25maXJtKTog
RGVsZXRlZC4KKyAgICAgICAgKHJ1bkphdmFTY3JpcHRQcm9tcHQpOiBEZWxldGVkLgorICAgICAg
ICAodG9vbGJhcnNBcmVWaXNpYmxlKTogRGVsZXRlZC4KKyAgICAgICAgKHNldFRvb2xiYXJzQXJl
VmlzaWJsZSk6IERlbGV0ZWQuCisgICAgICAgIChtZW51QmFySXNWaXNpYmxlKTogRGVsZXRlZC4K
KyAgICAgICAgKHNldE1lbnVCYXJJc1Zpc2libGUpOiBEZWxldGVkLgorICAgICAgICAoc3RhdHVz
QmFySXNWaXNpYmxlKTogRGVsZXRlZC4KKyAgICAgICAgKHNldFN0YXR1c0JhcklzVmlzaWJsZSk6
IERlbGV0ZWQuCisgICAgICAgIChpc1Jlc2l6YWJsZSk6IERlbGV0ZWQuCisgICAgICAgIChzZXRJ
c1Jlc2l6YWJsZSk6IERlbGV0ZWQuCisgICAgICAgIChnZXRXaW5kb3dGcmFtZSk6IERlbGV0ZWQu
CisgICAgICAgIChzZXRXaW5kb3dGcmFtZSk6IERlbGV0ZWQuCisgICAgICAgIChtb3VzZURpZE1v
dmVPdmVyRWxlbWVudCk6IERlbGV0ZWQuCisgICAgICAgIChwcmludEZyYW1lKTogRGVsZXRlZC4K
KyAgICAgICAgKHJ1bk9wZW5QYW5lbCk6IERlbGV0ZWQuCisgICAgICAgIChkZWNpZGVQb2xpY3lG
b3JHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0KTogRGVsZXRlZC4KKyAgICAgICAgKHJ1bk1v
ZGFsKTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3
LmNwcDoKKyAgICAgICAgKHdlYmtpdFdlYlZpZXdDcmVhdGUpOiBBZGQgV2ViS2l0TmF2aWdhdGlv
bkFjdGlvbiBwYXJhbWV0ZXIuCisgICAgICAgICh3ZWJraXRfd2ViX3ZpZXdfY2xhc3NfaW5pdCk6
IEFkZCBXZWJLaXROYXZpZ2F0aW9uQWN0aW9uIHBhcmFtdGVyCisgICAgICAgIHRvIENSRUFURSBz
aWduYWwuCisgICAgICAgICh3ZWJraXRXZWJWaWV3Q3JlYXRlTmV3UGFnZSk6IEFkZCBXZWJLaXRO
YXZpZ2F0aW9uQWN0aW9uIHBhcmFtZXRlcgorICAgICAgICBhbmQgcGFzcyBpdCB0byB0aGUgc2ln
bmFsIGNhbGxiYWNrcy4KKyAgICAgICAgKHdlYmtpdFdlYlZpZXdNb3VzZVRhcmdldENoYW5nZWQp
OiBVc2UgYSBXZWJIaXRUZXN0UmVzdWx0OjpEYXRhCisgICAgICAgIGNvbnN0IHJlZmVyZW5jZS4K
KyAgICAgICAgKHdlYmtpdFdlYlZpZXdQb3B1bGF0ZUNvbnRleHRNZW51KTogRGl0dG8uCisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5oOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdQcml2YXRlLmg6CisgICAgICAgICogVUlQcm9jZXNz
L0FQSS9ndGsvV2ViS2l0V2luZG93UHJvcGVydGllcy5jcHA6CisgICAgICAgICh3ZWJraXRXaW5k
b3dQcm9wZXJ0aWVzVXBkYXRlRnJvbVdlYldpbmRvd0ZlYXR1cmVzKTogVXNlIGEKKyAgICAgICAg
V2ViQ29yZTo6V2luZG93RmVhdHVyZXMgY29uc3QgcmVmZXJlbmNlLgorICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvZ3RrL1dlYktpdFdpbmRvd1Byb3BlcnRpZXNQcml2YXRlLmg6CisgICAgICAgICog
VUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLWRvY3Muc2dtbDogQWRkIG5ldyBzZWN0
aW9uLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1zZWN0aW9u
cy50eHQ6IEFkZCBuZXcgc3ltYm9scy4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay93ZWJr
aXQyLmg6IEluY2x1ZGUgV2ViS2l0TmF2aWdhdGlvbkFjdGlvbi5oLgorCiAyMDE0LTA2LTA4ICBT
YW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CiAKICAgICAgICAgW0NvY29hXSBXS1NjcmlwdE1l
c3NhZ2Ugc2hvdWxkIGluY2x1ZGUgdGhlIGZyYW1lIHRoZSBtZXNzYWdlIGlzIGZyb20KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtR1RLLmNtYWtlIGIvU291cmNlL1dlYktpdDIv
UGxhdGZvcm1HVEsuY21ha2UKaW5kZXggNzY0OWYxNC4uYTRiYTlhYSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvUGxhdGZvcm1HVEsuY21ha2UKKysrIGIvU291cmNlL1dlYktpdDIvUGxhdGZv
cm1HVEsuY21ha2UKQEAgLTE2Miw2ICsxNjIsOSBAQCBsaXN0KEFQUEVORCBXZWJLaXQyX1NPVVJD
RVMKICAgICBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRNaW1lSW5mby5jcHAKICAgICBVSVByb2Nl
c3MvQVBJL2d0ay9XZWJLaXRNaW1lSW5mby5oCiAgICAgVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0
TWltZUluZm9Qcml2YXRlLmgKKyAgICBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXROYXZpZ2F0aW9u
QWN0aW9uLmNwcAorICAgIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdE5hdmlnYXRpb25BY3Rpb24u
aAorICAgIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdE5hdmlnYXRpb25BY3Rpb25Qcml2YXRlLmgK
ICAgICBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXROYXZpZ2F0aW9uUG9saWN5RGVjaXNpb24uY3Bw
CiAgICAgVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0TmF2aWdhdGlvblBvbGljeURlY2lzaW9uLmgK
ICAgICBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXROYXZpZ2F0aW9uUG9saWN5RGVjaXNpb25Qcml2
YXRlLmgKQEAgLTMzNyw2ICszNDAsNyBAQCBzZXQoV2ViS2l0MkdUS19JTlNUQUxMRURfSEVBREVS
UwogICAgICR7V0VCS0lUMl9ESVJ9L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEhpdFRlc3RSZXN1
bHQuaAogICAgICR7V0VCS0lUMl9ESVJ9L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEphdmFzY3Jp
cHRSZXN1bHQuaAogICAgICR7V0VCS0lUMl9ESVJ9L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdE1p
bWVJbmZvLmgKKyAgICAke1dFQktJVDJfRElSfS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXROYXZp
Z2F0aW9uQWN0aW9uLmgKICAgICAke1dFQktJVDJfRElSfS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJL
aXROYXZpZ2F0aW9uUG9saWN5RGVjaXNpb24uaAogICAgICR7V0VCS0lUMl9ESVJ9L1VJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdFBlcm1pc3Npb25SZXF1ZXN0LmgKICAgICAke1dFQktJVDJfRElSfS9V
SVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRQbHVnaW4uaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0SGl0VGVzdFJlc3VsdC5jcHAgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRIaXRUZXN0UmVzdWx0LmNwcAppbmRleCA5MThk
MzE2Li4xOTgyYWEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXRIaXRUZXN0UmVzdWx0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXRIaXRUZXN0UmVzdWx0LmNwcApAQCAtMjIxLDM5ICsyMjEsMzMgQEAgc3Rh
dGljIHZvaWQgd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jbGFzc19pbml0KFdlYktpdEhpdFRlc3RS
ZXN1bHRDbGFzcyogaGl0VGVzdFIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcGFyYW1GbGFncykpOwogfQogCi1XZWJLaXRIaXRUZXN0UmVz
dWx0KiB3ZWJraXRIaXRUZXN0UmVzdWx0Q3JlYXRlKFdlYkhpdFRlc3RSZXN1bHQqIGhpdFRlc3RS
ZXN1bHQpCitXZWJLaXRIaXRUZXN0UmVzdWx0KiB3ZWJraXRIaXRUZXN0UmVzdWx0Q3JlYXRlKGNv
bnN0IFdlYkhpdFRlc3RSZXN1bHQ6OkRhdGEmIGhpdFRlc3RSZXN1bHQpCiB7CiAgICAgdW5zaWdu
ZWQgY29udGV4dCA9IFdFQktJVF9ISVRfVEVTVF9SRVNVTFRfQ09OVEVYVF9ET0NVTUVOVDsKIAot
ICAgIGNvbnN0IFN0cmluZyYgbGlua1VSTCA9IGhpdFRlc3RSZXN1bHQtPmFic29sdXRlTGlua1VS
TCgpOwotICAgIGlmICghbGlua1VSTC5pc0VtcHR5KCkpCisgICAgaWYgKCFoaXRUZXN0UmVzdWx0
LmFic29sdXRlTGlua1VSTC5pc0VtcHR5KCkpCiAgICAgICAgIGNvbnRleHQgfD0gV0VCS0lUX0hJ
VF9URVNUX1JFU1VMVF9DT05URVhUX0xJTks7CiAKLSAgICBjb25zdCBTdHJpbmcmIGltYWdlVVJM
ID0gaGl0VGVzdFJlc3VsdC0+YWJzb2x1dGVJbWFnZVVSTCgpOwotICAgIGlmICghaW1hZ2VVUkwu
aXNFbXB0eSgpKQorICAgIGlmICghaGl0VGVzdFJlc3VsdC5hYnNvbHV0ZUltYWdlVVJMLmlzRW1w
dHkoKSkKICAgICAgICAgY29udGV4dCB8PSBXRUJLSVRfSElUX1RFU1RfUkVTVUxUX0NPTlRFWFRf
SU1BR0U7CiAKLSAgICBjb25zdCBTdHJpbmcmIG1lZGlhVVJMID0gaGl0VGVzdFJlc3VsdC0+YWJz
b2x1dGVNZWRpYVVSTCgpOwotICAgIGlmICghbWVkaWFVUkwuaXNFbXB0eSgpKQorICAgIGlmICgh
aGl0VGVzdFJlc3VsdC5hYnNvbHV0ZU1lZGlhVVJMLmlzRW1wdHkoKSkKICAgICAgICAgY29udGV4
dCB8PSBXRUJLSVRfSElUX1RFU1RfUkVTVUxUX0NPTlRFWFRfTUVESUE7CiAKLSAgICBpZiAoaGl0
VGVzdFJlc3VsdC0+aXNDb250ZW50RWRpdGFibGUoKSkKKyAgICBpZiAoaGl0VGVzdFJlc3VsdC5p
c0NvbnRlbnRFZGl0YWJsZSkKICAgICAgICAgY29udGV4dCB8PSBXRUJLSVRfSElUX1RFU1RfUkVT
VUxUX0NPTlRFWFRfRURJVEFCTEU7CiAKLSAgICBpZiAoaGl0VGVzdFJlc3VsdC0+aXNTY3JvbGxi
YXIoKSkKKyAgICBpZiAoaGl0VGVzdFJlc3VsdC5pc1Njcm9sbGJhcikKICAgICAgICAgY29udGV4
dCB8PSBXRUJLSVRfSElUX1RFU1RfUkVTVUxUX0NPTlRFWFRfU0NST0xMQkFSOwogCi0gICAgY29u
c3QgU3RyaW5nJiBsaW5rVGl0bGUgPSBoaXRUZXN0UmVzdWx0LT5saW5rVGl0bGUoKTsKLSAgICBj
b25zdCBTdHJpbmcmIGxpbmtMYWJlbCA9IGhpdFRlc3RSZXN1bHQtPmxpbmtMYWJlbCgpOwotCiAg
ICAgcmV0dXJuIFdFQktJVF9ISVRfVEVTVF9SRVNVTFQoZ19vYmplY3RfbmV3KFdFQktJVF9UWVBF
X0hJVF9URVNUX1JFU1VMVCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgImNvbnRleHQiLCBjb250ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAibGluay11cmkiLCAhbGlua1VSTC5pc0VtcHR5KCkgPyBsaW5r
VVJMLnV0ZjgoKS5kYXRhKCkgOiAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAiaW1hZ2UtdXJpIiwgIWltYWdlVVJMLmlzRW1wdHkoKSA/IGltYWdlVVJM
LnV0ZjgoKS5kYXRhKCkgOiAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAibWVkaWEtdXJpIiwgIW1lZGlhVVJMLmlzRW1wdHkoKSA/IG1lZGlhVVJMLnV0
ZjgoKS5kYXRhKCkgOiAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAibGluay10aXRsZSIsICFsaW5rVGl0bGUuaXNFbXB0eSgpID8gbGlua1RpdGxlLnV0
ZjgoKS5kYXRhKCkgOiAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAibGluay1sYWJlbCIsICFsaW5rTGFiZWwuaXNFbXB0eSgpID8gbGlua0xhYmVsLnV0
ZjgoKS5kYXRhKCkgOiAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBOVUxMKSk7CisgICAgICAgICJjb250ZXh0IiwgY29udGV4dCwKKyAgICAgICAgImxp
bmstdXJpIiwgY29udGV4dCAmIFdFQktJVF9ISVRfVEVTVF9SRVNVTFRfQ09OVEVYVF9MSU5LID8g
aGl0VGVzdFJlc3VsdC5hYnNvbHV0ZUxpbmtVUkwudXRmOCgpLmRhdGEoKSA6IG51bGxwdHIsCisg
ICAgICAgICJpbWFnZS11cmkiLCBjb250ZXh0ICYgV0VCS0lUX0hJVF9URVNUX1JFU1VMVF9DT05U
RVhUX0lNQUdFID8gaGl0VGVzdFJlc3VsdC5hYnNvbHV0ZUltYWdlVVJMLnV0ZjgoKS5kYXRhKCkg
OiBudWxscHRyLAorICAgICAgICAibWVkaWEtdXJpIiwgY29udGV4dCAmIFdFQktJVF9ISVRfVEVT
VF9SRVNVTFRfQ09OVEVYVF9NRURJQSA/IGhpdFRlc3RSZXN1bHQuYWJzb2x1dGVNZWRpYVVSTC51
dGY4KCkuZGF0YSgpIDogbnVsbHB0ciwKKyAgICAgICAgImxpbmstdGl0bGUiLCAhaGl0VGVzdFJl
c3VsdC5saW5rVGl0bGUuaXNFbXB0eSgpID8gaGl0VGVzdFJlc3VsdC5saW5rVGl0bGUudXRmOCgp
LmRhdGEoKSA6IG51bGxwdHIsCisgICAgICAgICJsaW5rLWxhYmVsIiwgIWhpdFRlc3RSZXN1bHQu
bGlua0xhYmVsLmlzRW1wdHkoKSA/IGhpdFRlc3RSZXN1bHQubGlua0xhYmVsLnV0ZjgoKS5kYXRh
KCkgOiBudWxscHRyLAorICAgICAgICBudWxscHRyKSk7CiB9CiAKIHN0YXRpYyBib29sIHN0cmlu
Z0lzRXF1YWxUb0NTdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGNvbnN0IENTdHJpbmcmIGNT
dHJpbmcpCkBAIC0yNjEsMTYgKzI1NSwxNiBAQCBzdGF0aWMgYm9vbCBzdHJpbmdJc0VxdWFsVG9D
U3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBjb25zdCBDU3RyaW5nJiBjU3RyaW5nKQogICAg
IHJldHVybiAoKHN0cmluZy5pc0VtcHR5KCkgJiYgY1N0cmluZy5pc051bGwoKSkgfHwgKHN0cmlu
Zy51dGY4KCkgPT0gY1N0cmluZykpOwogfQogCi1ib29sIHdlYmtpdEhpdFRlc3RSZXN1bHRDb21w
YXJlKFdlYktpdEhpdFRlc3RSZXN1bHQqIGhpdFRlc3RSZXN1bHQsIFdlYkhpdFRlc3RSZXN1bHQq
IHdlYkhpdFRlc3RSZXN1bHQpCitib29sIHdlYmtpdEhpdFRlc3RSZXN1bHRDb21wYXJlKFdlYktp
dEhpdFRlc3RSZXN1bHQqIGhpdFRlc3RSZXN1bHQsIGNvbnN0IFdlYkhpdFRlc3RSZXN1bHQ6OkRh
dGEmIHdlYkhpdFRlc3RSZXN1bHQpCiB7CiAgICAgV2ViS2l0SGl0VGVzdFJlc3VsdFByaXZhdGUq
IHByaXYgPSBoaXRUZXN0UmVzdWx0LT5wcml2OwotICAgIHJldHVybiB3ZWJIaXRUZXN0UmVzdWx0
LT5pc0NvbnRlbnRFZGl0YWJsZSgpID09IHdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9p
c19lZGl0YWJsZShoaXRUZXN0UmVzdWx0KQotICAgICAgICAmJiB3ZWJIaXRUZXN0UmVzdWx0LT5p
c1Njcm9sbGJhcigpID09IHdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19zY3JvbGxi
YXIoaGl0VGVzdFJlc3VsdCkKLSAgICAgICAgJiYgc3RyaW5nSXNFcXVhbFRvQ1N0cmluZyh3ZWJI
aXRUZXN0UmVzdWx0LT5hYnNvbHV0ZUxpbmtVUkwoKSwgcHJpdi0+bGlua1VSSSkKLSAgICAgICAg
JiYgc3RyaW5nSXNFcXVhbFRvQ1N0cmluZyh3ZWJIaXRUZXN0UmVzdWx0LT5saW5rVGl0bGUoKSwg
cHJpdi0+bGlua1RpdGxlKQotICAgICAgICAmJiBzdHJpbmdJc0VxdWFsVG9DU3RyaW5nKHdlYkhp
dFRlc3RSZXN1bHQtPmxpbmtMYWJlbCgpLCBwcml2LT5saW5rTGFiZWwpCi0gICAgICAgICYmIHN0
cmluZ0lzRXF1YWxUb0NTdHJpbmcod2ViSGl0VGVzdFJlc3VsdC0+YWJzb2x1dGVJbWFnZVVSTCgp
LCBwcml2LT5pbWFnZVVSSSkKLSAgICAgICAgJiYgc3RyaW5nSXNFcXVhbFRvQ1N0cmluZyh3ZWJI
aXRUZXN0UmVzdWx0LT5hYnNvbHV0ZU1lZGlhVVJMKCksIHByaXYtPm1lZGlhVVJJKTsKKyAgICBy
ZXR1cm4gd2ViSGl0VGVzdFJlc3VsdC5pc0NvbnRlbnRFZGl0YWJsZSA9PSB3ZWJraXRfaGl0X3Rl
c3RfcmVzdWx0X2NvbnRleHRfaXNfZWRpdGFibGUoaGl0VGVzdFJlc3VsdCkKKyAgICAgICAgJiYg
d2ViSGl0VGVzdFJlc3VsdC5pc1Njcm9sbGJhciA9PSB3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2Nv
bnRleHRfaXNfc2Nyb2xsYmFyKGhpdFRlc3RSZXN1bHQpCisgICAgICAgICYmIHN0cmluZ0lzRXF1
YWxUb0NTdHJpbmcod2ViSGl0VGVzdFJlc3VsdC5hYnNvbHV0ZUxpbmtVUkwsIHByaXYtPmxpbmtV
UkkpCisgICAgICAgICYmIHN0cmluZ0lzRXF1YWxUb0NTdHJpbmcod2ViSGl0VGVzdFJlc3VsdC5s
aW5rVGl0bGUsIHByaXYtPmxpbmtUaXRsZSkKKyAgICAgICAgJiYgc3RyaW5nSXNFcXVhbFRvQ1N0
cmluZyh3ZWJIaXRUZXN0UmVzdWx0LmxpbmtMYWJlbCwgcHJpdi0+bGlua0xhYmVsKQorICAgICAg
ICAmJiBzdHJpbmdJc0VxdWFsVG9DU3RyaW5nKHdlYkhpdFRlc3RSZXN1bHQuYWJzb2x1dGVJbWFn
ZVVSTCwgcHJpdi0+aW1hZ2VVUkkpCisgICAgICAgICYmIHN0cmluZ0lzRXF1YWxUb0NTdHJpbmco
d2ViSGl0VGVzdFJlc3VsdC5hYnNvbHV0ZU1lZGlhVVJMLCBwcml2LT5tZWRpYVVSSSk7CiB9CiAK
IC8qKgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0
SGl0VGVzdFJlc3VsdFByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdEhpdFRlc3RSZXN1bHRQcml2YXRlLmgKaW5kZXggN2JhMmMzOC4uYTY5YjI0YiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0SGl0VGVzdFJl
c3VsdFByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJL
aXRIaXRUZXN0UmVzdWx0UHJpdmF0ZS5oCkBAIC0yMyw3ICsyMyw3IEBACiAjaW5jbHVkZSAiV2Vi
S2l0SGl0VGVzdFJlc3VsdC5oIgogI2luY2x1ZGUgIldlYktpdFByaXZhdGUuaCIKIAotV2ViS2l0
SGl0VGVzdFJlc3VsdCogd2Via2l0SGl0VGVzdFJlc3VsdENyZWF0ZShXZWJLaXQ6OldlYkhpdFRl
c3RSZXN1bHQqKTsKLWJvb2wgd2Via2l0SGl0VGVzdFJlc3VsdENvbXBhcmUoV2ViS2l0SGl0VGVz
dFJlc3VsdCosIFdlYktpdDo6V2ViSGl0VGVzdFJlc3VsdCopOworV2ViS2l0SGl0VGVzdFJlc3Vs
dCogd2Via2l0SGl0VGVzdFJlc3VsdENyZWF0ZShjb25zdCBXZWJLaXQ6OldlYkhpdFRlc3RSZXN1
bHQ6OkRhdGEmKTsKK2Jvb2wgd2Via2l0SGl0VGVzdFJlc3VsdENvbXBhcmUoV2ViS2l0SGl0VGVz
dFJlc3VsdCosIGNvbnN0IFdlYktpdDo6V2ViSGl0VGVzdFJlc3VsdDo6RGF0YSYpOwogCiAjZW5k
aWYgLy8gV2ViS2l0SGl0VGVzdFJlc3VsdFByaXZhdGVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0TmF2aWdhdGlvbkFjdGlvbi5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXROYXZpZ2F0aW9uQWN0aW9uLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNDlhMGUzCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0TmF2aWdhdGlvbkFj
dGlvbi5jcHAKQEAgLTAsMCArMSwxNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgSWdh
bGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYktpdE5hdmlnYXRpb25B
Y3Rpb24uaCIKKworI2luY2x1ZGUgIldlYktpdE5hdmlnYXRpb25BY3Rpb25Qcml2YXRlLmgiCisj
aW5jbHVkZSA8Z2RrL2dkay5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KKwor
dXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKKworR19ERUZJTkVfQk9YRURfVFlQRShXZWJLaXROYXZp
Z2F0aW9uQWN0aW9uLCB3ZWJraXRfbmF2aWdhdGlvbl9hY3Rpb24sIHdlYmtpdF9uYXZpZ2F0aW9u
X2FjdGlvbl9jb3B5LCB3ZWJraXRfbmF2aWdhdGlvbl9hY3Rpb25fZnJlZSkKKworV2ViS2l0TmF2
aWdhdGlvbkFjdGlvbiogd2Via2l0TmF2aWdhdGlvbkFjdGlvbkNyZWF0ZShXZWJLaXRVUklSZXF1
ZXN0KiByZXF1ZXN0LCBjb25zdCBOYXZpZ2F0aW9uQWN0aW9uRGF0YSYgbmF2aWdhdGlvbkFjdGlv
bkRhdGEpCit7CisgICAgV2ViS2l0TmF2aWdhdGlvbkFjdGlvbiogbmF2aWdhdGlvbiA9IGdfc2xp
Y2VfbmV3MChXZWJLaXROYXZpZ2F0aW9uQWN0aW9uKTsKKyAgICBuZXcgKG5hdmlnYXRpb24pIFdl
YktpdE5hdmlnYXRpb25BY3Rpb24ocmVxdWVzdCwgbmF2aWdhdGlvbkFjdGlvbkRhdGEpOworICAg
IHJldHVybiBuYXZpZ2F0aW9uOworfQorCisvKioKKyAqIHdlYmtpdF9uYXZpZ2F0aW9uX2FjdGlv
bl9jb3B5OgorICogQG5hdmlnYXRpb246IGEgI1dlYktpdE5hdmlnYXRpb25BY3Rpb24KKyAqCisg
KiBNYWtlIGEgY29weSBvZiBAbmF2aWdhdGlvbi4KKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIg
ZnVsbCk6IEEgY29weSBvZiBwYXNzZWQgaW4gI1dlYktpdE5hdmlnYXRpb25BY3Rpb24KKyAqCisg
KiBTaW5jZTogMi42CisgKi8KK1dlYktpdE5hdmlnYXRpb25BY3Rpb24qIHdlYmtpdF9uYXZpZ2F0
aW9uX2FjdGlvbl9jb3B5KFdlYktpdE5hdmlnYXRpb25BY3Rpb24qIG5hdmlnYXRpb24pCit7Cisg
ICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwobmF2aWdhdGlvbiwgbnVsbHB0cik7CisKKyAgICBXZWJL
aXROYXZpZ2F0aW9uQWN0aW9uKiBjb3B5ID0gZ19zbGljZV9uZXcwKFdlYktpdE5hdmlnYXRpb25B
Y3Rpb24pOworICAgIG5ldyAoY29weSkgV2ViS2l0TmF2aWdhdGlvbkFjdGlvbihuYXZpZ2F0aW9u
KTsKKyAgICByZXR1cm4gY29weTsKK30KKworLyoqCisgKiB3ZWJraXRfbmF2aWdhdGlvbl9hY3Rp
b25fZnJlZToKKyAqIEBuYXZpZ2F0aW9uOiBhICNXZWJLaXROYXZpZ2F0aW9uQWN0aW9uCisgKgor
ICogRnJlZSB0aGUgI1dlYktpdE5hdmlnYXRpb25BY3Rpb24KKyAqCisgKiBTaW5jZTogMi42Cisg
Ki8KK3ZvaWQgd2Via2l0X25hdmlnYXRpb25fYWN0aW9uX2ZyZWUoV2ViS2l0TmF2aWdhdGlvbkFj
dGlvbiogbmF2aWdhdGlvbikKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKG5hdmlnYXRpb24pOwor
CisgICAgbmF2aWdhdGlvbi0+fldlYktpdE5hdmlnYXRpb25BY3Rpb24oKTsKKyAgICBnX3NsaWNl
X2ZyZWUoV2ViS2l0TmF2aWdhdGlvbkFjdGlvbiwgbmF2aWdhdGlvbik7Cit9CisKKy8qKgorICog
d2Via2l0X25hdmlnYXRpb25fYWN0aW9uX2dldF9uYXZpZ2F0aW9uX3R5cGU6CisgKiBAbmF2aWdh
dGlvbjogYSAjV2ViS2l0TmF2aWdhdGlvbkFjdGlvbgorICoKKyAqIFJ0dWVuIHRoZSB0eXBlIG9m
IGFjdGlvbiB0aGF0IHRyaWdnZXJlZCB0aGUgbmF2aWdhdGlvbi4KKyAqCisgKiBSZXR1cm5zOiBh
ICNXZWJLaXROYXZpZ2F0aW9uVHlwZQorICoKKyAqIFNpbmNlOiAyLjYKKyAqLworV2ViS2l0TmF2
aWdhdGlvblR5cGUgd2Via2l0X25hdmlnYXRpb25fYWN0aW9uX2dldF9uYXZpZ2F0aW9uX3R5cGUo
V2ViS2l0TmF2aWdhdGlvbkFjdGlvbiogbmF2aWdhdGlvbikKK3sKKyAgICBnX3JldHVybl92YWxf
aWZfZmFpbChuYXZpZ2F0aW9uLCBXRUJLSVRfTkFWSUdBVElPTl9UWVBFX09USEVSKTsKKyAgICBy
ZXR1cm4gbmF2aWdhdGlvbi0+dHlwZTsKK30KKworLyoqCisgKiB3ZWJraXRfbmF2aWdhdGlvbl9h
Y3Rpb25fZ2V0X21vdXNlX2J1dHRvbjoKKyAqIEBuYXZpZ2F0aW9uOiBhICNXZWJLaXROYXZpZ2F0
aW9uQWN0aW9uCisgKgorICogUmV0dXJuIHRoZSBudW1iZXIgb2YgdGhlIG1vdXNlIGJ1dHRvbiB0
aGF0IHRyaWdnZXJlZCB0aGUgbmF2aWdhdGlvbiwgb3IgMCBpZgorICogdGhlIG5hdmlnYXRpb24g
d2FzIG5vdCBzdGFydGVkIGJ5IGEgbW91c2UgZXZlbnQuCisgKgorICogUmV0dXJuczogdGhlIG1v
dXNlIGJ1dHRvbiBudW1iZXIgb3IgMAorICoKKyAqIFNpbmNlOiAyLjYKKyAqLwordW5zaWduZWQg
d2Via2l0X25hdmlnYXRpb25fYWN0aW9uX2dldF9tb3VzZV9idXR0b24oV2ViS2l0TmF2aWdhdGlv
bkFjdGlvbiogbmF2aWdhdGlvbikKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChuYXZpZ2F0
aW9uLCAwKTsKKyAgICByZXR1cm4gbmF2aWdhdGlvbi0+bW91c2VCdXR0b247Cit9CisKKy8qKgor
ICogd2Via2l0X25hdmlnYXRpb25fYWN0aW9uX2dldF9tb2RpZmllcnM6CisgKiBAbmF2aWdhdGlv
bjogYSAjV2ViS2l0TmF2aWdhdGlvbkFjdGlvbgorICoKKyAqIFJldHVybiBhIGJpdG1hc2sgb2Yg
I0dka01vZGlmaWVyVHlwZSB2YWx1ZXMgZGVzY3JpYmluZyB0aGUgbW9kaWZpZXIga2V5cyB0aGF0
IHdlcmUgaW4gZWZmZWN0CisgKiB3aGVuIHRoZSBuYXZpZ2F0aW9uIHdhcyByZXF1ZXN0ZWQKKyAq
CisgKiBSZXR1cm5zOiB0aGUgbW9kaWZpZXIga2V5cworICoKKyAqIFNpbmNlOiAyLjYKKyAqLwor
dW5zaWduZWQgd2Via2l0X25hdmlnYXRpb25fYWN0aW9uX2dldF9tb2RpZmllcnMoV2ViS2l0TmF2
aWdhdGlvbkFjdGlvbiogbmF2aWdhdGlvbikKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChu
YXZpZ2F0aW9uLCAwKTsKKyAgICByZXR1cm4gbmF2aWdhdGlvbi0+bW9kaWZpZXJzOworfQorCisv
KioKKyAqIHdlYmtpdF9uYXZpZ2F0aW9uX2FjdGlvbl9nZXRfcmVxdWVzdDoKKyAqIEBuYXZpZ2F0
aW9uOiBhICNXZWJLaXROYXZpZ2F0aW9uQWN0aW9uCisgKgorICogUmV0dXJuIHRoZSBuYXZpZ2F0
aW9uICNXZWJLaXRVUklSZXF1ZXN0CisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiBh
ICNXZWJLaXRVUklSZXF1ZXN0CisgKgorICogU2luY2U6IDIuNgorICovCitXZWJLaXRVUklSZXF1
ZXN0KiB3ZWJraXRfbmF2aWdhdGlvbl9hY3Rpb25fZ2V0X3JlcXVlc3QoV2ViS2l0TmF2aWdhdGlv
bkFjdGlvbiogbmF2aWdhdGlvbikKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChuYXZpZ2F0
aW9uLCBudWxscHRyKTsKKyAgICByZXR1cm4gbmF2aWdhdGlvbi0+cmVxdWVzdC5nZXQoKTsKK30K
KworLyoqCisgKiB3ZWJraXRfbmF2aWdhdGlvbl9hY3Rpb25faXNfdXNlcl9nZXN0dXJlOgorICog
QG5hdmlnYXRpb246IGEgI1dlYktpdE5hdmlnYXRpb25BY3Rpb24KKyAqCisgKiBSZXR1cm4gd2hl
dGhlciB0aGUgbmF2aWdhdGlvbiB3YXMgdHJpZ2dlcmVkIGJ5IGEgdXNlciBnZXN0dXJlIGxpa2Ug
YSBtb3VzZSBjbGljay4KKyAqCisgKiBSZXR1cm5zOiB3aGV0aGVyIG5hdmlnYXRpb24gYWN0aW9u
IGlzIGEgdXNlciBnZXN0dXJlCisgKgorICogU2luY2U6IDIuNgorICovCitnYm9vbGVhbiB3ZWJr
aXRfbmF2aWdhdGlvbl9hY3Rpb25faXNfdXNlcl9nZXN0dXJlKFdlYktpdE5hdmlnYXRpb25BY3Rp
b24qIG5hdmlnYXRpb24pCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwobmF2aWdhdGlvbiwg
RkFMU0UpOworICAgIHJldHVybiBuYXZpZ2F0aW9uLT5pc1VzZXJHZXN0dXJlOworfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0TmF2aWdhdGlvbkFj
dGlvbi5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0TmF2aWdhdGlv
bkFjdGlvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlOTU1ODYKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRO
YXZpZ2F0aW9uQWN0aW9uLmgKQEAgLTAsMCArMSw4NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNCBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyAqLworCisjaWYgIWRlZmluZWQoX19XRUJLSVQyX0hfSU5TSURFX18pICYmICFk
ZWZpbmVkKFdFQktJVDJfQ09NUElMQVRJT04pCisjZXJyb3IgIk9ubHkgPHdlYmtpdDIvd2Via2l0
Mi5oPiBjYW4gYmUgaW5jbHVkZWQgZGlyZWN0bHkuIgorI2VuZGlmCisKKyNpZm5kZWYgV2ViS2l0
TmF2aWdhdGlvbkFjdGlvbl9oCisjZGVmaW5lIFdlYktpdE5hdmlnYXRpb25BY3Rpb25faAorCisj
aW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdERlZmluZXMu
aD4KKyNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdFVSSVJlcXVlc3QuaD4KKworR19CRUdJTl9ERUNM
UworCisjZGVmaW5lIFdFQktJVF9UWVBFX05BVklHQVRJT05fQUNUSU9OICh3ZWJraXRfbmF2aWdh
dGlvbl9hY3Rpb25fZ2V0X3R5cGUoKSkKKworLyoqCisgKiBXZWJLaXROYXZpZ2F0aW9uVHlwZToK
KyAqIEBXRUJLSVRfTkFWSUdBVElPTl9UWVBFX0xJTktfQ0xJQ0tFRDogVGhlIG5hdmlnYXRpb24g
d2FzIHRyaWdnZXJlZCBieSBjbGlja2luZyBhIGxpbmsuCisgKiBAV0VCS0lUX05BVklHQVRJT05f
VFlQRV9GT1JNX1NVQk1JVFRFRDogVGhlIG5hdmlnYXRpb24gd2FzIHRyaWdnZXJlZCBieSBzdWJt
aXR0aW5nIGEgZm9ybS4KKyAqIEBXRUJLSVRfTkFWSUdBVElPTl9UWVBFX0JBQ0tfRk9SV0FSRDog
VGhlIG5hdmlnYXRpb24gd2FzIHRyaWdnZXJlZCBieSBuYXZpZ2F0aW5nIGZvcndhcmQgb3IgYmFj
a3dhcmQuCisgKiBAV0VCS0lUX05BVklHQVRJT05fVFlQRV9SRUxPQUQ6IFRoZSBuYXZpZ2F0aW9u
IHdhcyB0cmlnZ2VyZWQgYnkgcmVsb2FkaW5nLgorICogQFdFQktJVF9OQVZJR0FUSU9OX1RZUEVf
Rk9STV9SRVNVQk1JVFRFRDogVGhlIG5hdmlnYXRpb24gd2FzIHRyaWdnZXJlZCBieSByZXN1Ym1p
dHRpbmcgYSBmb3JtLgorICogQFdFQktJVF9OQVZJR0FUSU9OX1RZUEVfT1RIRVI6IFRoZSBuYXZp
Z2F0aW9uIHdhcyB0cmlnZ2VyZWQgYnkgc29tZSBvdGhlciBhY3Rpb24uCisgKgorICogRW51bSB2
YWx1ZXMgdXNlZCB0byBkZW5vdGUgdGhlIHZhcmlvdXMgbmF2aWdhdGlvbiB0eXBlcy4KKyAqLwor
dHlwZWRlZiBlbnVtIHsKKyAgICBXRUJLSVRfTkFWSUdBVElPTl9UWVBFX0xJTktfQ0xJQ0tFRCwK
KyAgICBXRUJLSVRfTkFWSUdBVElPTl9UWVBFX0ZPUk1fU1VCTUlUVEVELAorICAgIFdFQktJVF9O
QVZJR0FUSU9OX1RZUEVfQkFDS19GT1JXQVJELAorICAgIFdFQktJVF9OQVZJR0FUSU9OX1RZUEVf
UkVMT0FELAorICAgIFdFQktJVF9OQVZJR0FUSU9OX1RZUEVfRk9STV9SRVNVQk1JVFRFRCwKKyAg
ICBXRUJLSVRfTkFWSUdBVElPTl9UWVBFX09USEVSCit9IFdlYktpdE5hdmlnYXRpb25UeXBlOwor
Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0TmF2aWdhdGlvbkFjdGlvbiBXZWJLaXROYXZpZ2F0aW9u
QWN0aW9uOworCisKK1dFQktJVF9BUEkgR1R5cGUKK3dlYmtpdF9uYXZpZ2F0aW9uX2FjdGlvbl9n
ZXRfdHlwZSAgICAgICAgICAgICh2b2lkKTsKKworV0VCS0lUX0FQSSBXZWJLaXROYXZpZ2F0aW9u
QWN0aW9uICoKK3dlYmtpdF9uYXZpZ2F0aW9uX2FjdGlvbl9jb3B5ICAgICAgICAgICAgICAgIChX
ZWJLaXROYXZpZ2F0aW9uQWN0aW9uICpuYXZpZ2F0aW9uKTsKKworV0VCS0lUX0FQSSB2b2lkCit3
ZWJraXRfbmF2aWdhdGlvbl9hY3Rpb25fZnJlZSAgICAgICAgICAgICAgICAoV2ViS2l0TmF2aWdh
dGlvbkFjdGlvbiAqbmF2aWdhdGlvbik7CisKK1dFQktJVF9BUEkgV2ViS2l0TmF2aWdhdGlvblR5
cGUKK3dlYmtpdF9uYXZpZ2F0aW9uX2FjdGlvbl9nZXRfbmF2aWdhdGlvbl90eXBlIChXZWJLaXRO
YXZpZ2F0aW9uQWN0aW9uICpuYXZpZ2F0aW9uKTsKKworV0VCS0lUX0FQSSBndWludAord2Via2l0
X25hdmlnYXRpb25fYWN0aW9uX2dldF9tb3VzZV9idXR0b24gICAgKFdlYktpdE5hdmlnYXRpb25B
Y3Rpb24gKm5hdmlnYXRpb24pOworCitXRUJLSVRfQVBJIGd1aW50Cit3ZWJraXRfbmF2aWdhdGlv
bl9hY3Rpb25fZ2V0X21vZGlmaWVycyAgICAgICAoV2ViS2l0TmF2aWdhdGlvbkFjdGlvbiAqbmF2
aWdhdGlvbik7CisKK1dFQktJVF9BUEkgV2ViS2l0VVJJUmVxdWVzdCAqCit3ZWJraXRfbmF2aWdh
dGlvbl9hY3Rpb25fZ2V0X3JlcXVlc3QgICAgICAgICAoV2ViS2l0TmF2aWdhdGlvbkFjdGlvbiAq
bmF2aWdhdGlvbik7CisKK1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF9uYXZpZ2F0aW9uX2Fj
dGlvbl9pc191c2VyX2dlc3R1cmUgICAgIChXZWJLaXROYXZpZ2F0aW9uQWN0aW9uICpuYXZpZ2F0
aW9uKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXROYXZpZ2F0aW9uQWN0aW9uUHJpdmF0ZS5oIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0TmF2aWdhdGlvbkFjdGlvblByaXZh
dGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YmI2MTVjCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0TmF2aWdh
dGlvbkFjdGlvblByaXZhdGUuaApAQCAtMCwwICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE0IElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0TmF2aWdhdGlvbkFjdGlvblByaXZhdGVf
aAorI2RlZmluZSBXZWJLaXROYXZpZ2F0aW9uQWN0aW9uUHJpdmF0ZV9oCisKKyNpbmNsdWRlICJO
YXZpZ2F0aW9uQWN0aW9uRGF0YS5oIgorI2luY2x1ZGUgIldlYktpdE5hdmlnYXRpb25BY3Rpb24u
aCIKKyNpbmNsdWRlICJXZWJLaXRQcml2YXRlLmgiCisKK3N0cnVjdCBfV2ViS2l0TmF2aWdhdGlv
bkFjdGlvbiB7CisgICAgX1dlYktpdE5hdmlnYXRpb25BY3Rpb24oV2ViS2l0VVJJUmVxdWVzdCog
dXJpUmVxdWVzdCwgY29uc3QgV2ViS2l0OjpOYXZpZ2F0aW9uQWN0aW9uRGF0YSYgbmF2aWdhdGlv
bkFjdGlvbkRhdGEpCisgICAgICAgIDogdHlwZSh0b1dlYktpdE5hdmlnYXRpb25UeXBlKG5hdmln
YXRpb25BY3Rpb25EYXRhLm5hdmlnYXRpb25UeXBlKSkKKyAgICAgICAgLCBtb3VzZUJ1dHRvbih0
b1dlYktpdE1vdXNlQnV0dG9uKG5hdmlnYXRpb25BY3Rpb25EYXRhLm1vdXNlQnV0dG9uKSkKKyAg
ICAgICAgLCBtb2RpZmllcnModG9HZGtNb2RpZmllcnMobmF2aWdhdGlvbkFjdGlvbkRhdGEubW9k
aWZpZXJzKSkKKyAgICAgICAgLCBpc1VzZXJHZXN0dXJlKG5hdmlnYXRpb25BY3Rpb25EYXRhLmlz
UHJvY2Vzc2luZ1VzZXJHZXN0dXJlKQorICAgICAgICAsIHJlcXVlc3QodXJpUmVxdWVzdCkKKyAg
ICB7CisgICAgfQorCisgICAgX1dlYktpdE5hdmlnYXRpb25BY3Rpb24oV2ViS2l0TmF2aWdhdGlv
bkFjdGlvbiogbmF2aWdhdGlvbikKKyAgICAgICAgOiB0eXBlKG5hdmlnYXRpb24tPnR5cGUpCisg
ICAgICAgICwgbW91c2VCdXR0b24obmF2aWdhdGlvbi0+bW91c2VCdXR0b24pCisgICAgICAgICwg
bW9kaWZpZXJzKG5hdmlnYXRpb24tPm1vZGlmaWVycykKKyAgICAgICAgLCBpc1VzZXJHZXN0dXJl
KG5hdmlnYXRpb24tPmlzVXNlckdlc3R1cmUpCisgICAgICAgICwgcmVxdWVzdChuYXZpZ2F0aW9u
LT5yZXF1ZXN0KQorICAgIHsKKyAgICB9CisKKyAgICBXZWJLaXROYXZpZ2F0aW9uVHlwZSB0eXBl
OworICAgIHVuc2lnbmVkIG1vdXNlQnV0dG9uOworICAgIHVuc2lnbmVkIG1vZGlmaWVyczsKKyAg
ICB1bnNpZ25lZCBpc1VzZXJHZXN0dXJlIDogMTsKKyAgICBHUmVmUHRyPFdlYktpdFVSSVJlcXVl
c3Q+IHJlcXVlc3Q7Cit9OworCitXZWJLaXROYXZpZ2F0aW9uQWN0aW9uKiB3ZWJraXROYXZpZ2F0
aW9uQWN0aW9uQ3JlYXRlKFdlYktpdFVSSVJlcXVlc3QqLCBjb25zdCBXZWJLaXQ6Ok5hdmlnYXRp
b25BY3Rpb25EYXRhJik7CisKKyNlbmRpZiAvLyBXZWJLaXROYXZpZ2F0aW9uQWN0aW9uUHJpdmF0
ZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRO
YXZpZ2F0aW9uUG9saWN5RGVjaXNpb24uaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL1dlYktpdE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbi5oCmluZGV4IDc1MTM5NzcuLmU4NTI0
NjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdE5h
dmlnYXRpb25Qb2xpY3lEZWNpc2lvbi5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL1dlYktpdE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbi5oCkBAIC0yNiwzMSArMjYsMTIg
QEAKIAogI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRE
ZWZpbmVzLmg+CisjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXROYXZpZ2F0aW9uQWN0aW9uLmg+CiAj
aW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRQb2xpY3lEZWNpc2lvbi5oPgogI2luY2x1ZGUgPHdlYmtp
dDIvV2ViS2l0VVJJUmVxdWVzdC5oPgogCiBHX0JFR0lOX0RFQ0xTCiAKLS8qKgotICogV2ViS2l0
TmF2aWdhdGlvblR5cGU6Ci0gKiBAV0VCS0lUX05BVklHQVRJT05fVFlQRV9MSU5LX0NMSUNLRUQ6
IFRoZSBuYXZpZ2F0aW9uIHdhcyB0cmlnZ2VyZWQgYnkgY2xpY2tpbmcgYSBsaW5rLgotICogQFdF
QktJVF9OQVZJR0FUSU9OX1RZUEVfRk9STV9TVUJNSVRURUQ6IFRoZSBuYXZpZ2F0aW9uIHdhcyB0
cmlnZ2VyZWQgYnkgc3VibWl0dGluZyBhIGZvcm0uCi0gKiBAV0VCS0lUX05BVklHQVRJT05fVFlQ
RV9CQUNLX0ZPUldBUkQ6IFRoZSBuYXZpZ2F0aW9uIHdhcyB0cmlnZ2VyZWQgYnkgbmF2aWdhdGlu
ZyBmb3J3YXJkIG9yIGJhY2t3YXJkLgotICogQFdFQktJVF9OQVZJR0FUSU9OX1RZUEVfUkVMT0FE
OiBUaGUgbmF2aWdhdGlvbiB3YXMgdHJpZ2dlcmVkIGJ5IHJlbG9hZGluZy4KLSAqIEBXRUJLSVRf
TkFWSUdBVElPTl9UWVBFX0ZPUk1fUkVTVUJNSVRURUQ6IFRoZSBuYXZpZ2F0aW9uIHdhcyB0cmln
Z2VyZWQgYnkgcmVzdWJtaXR0aW5nIGEgZm9ybS4KLSAqIEBXRUJLSVRfTkFWSUdBVElPTl9UWVBF
X09USEVSOiBUaGUgbmF2aWdhdGlvbiB3YXMgdHJpZ2dlcmVkIGJ5IHNvbWUgb3RoZXIgYWN0aW9u
LgotICoKLSAqIEVudW0gdmFsdWVzIHVzZWQgdG8gZGVub3RlIHRoZSB2YXJpb3VzIG5hdmlnYXRp
b24gdHlwZXMuCi0gKi8KLXR5cGVkZWYgZW51bSB7Ci0gICAgV0VCS0lUX05BVklHQVRJT05fVFlQ
RV9MSU5LX0NMSUNLRUQsCi0gICAgV0VCS0lUX05BVklHQVRJT05fVFlQRV9GT1JNX1NVQk1JVFRF
RCwKLSAgICBXRUJLSVRfTkFWSUdBVElPTl9UWVBFX0JBQ0tfRk9SV0FSRCwKLSAgICBXRUJLSVRf
TkFWSUdBVElPTl9UWVBFX1JFTE9BRCwKLSAgICBXRUJLSVRfTkFWSUdBVElPTl9UWVBFX0ZPUk1f
UkVTVUJNSVRURUQsCi0gICAgV0VCS0lUX05BVklHQVRJT05fVFlQRV9PVEhFUiwKLX0gV2ViS2l0
TmF2aWdhdGlvblR5cGU7Ci0KICNkZWZpbmUgV0VCS0lUX1RZUEVfTkFWSUdBVElPTl9QT0xJQ1lf
REVDSVNJT04gICAgICAgICAgICAod2Via2l0X25hdmlnYXRpb25fcG9saWN5X2RlY2lzaW9uX2dl
dF90eXBlKCkpCiAjZGVmaW5lIFdFQktJVF9OQVZJR0FUSU9OX1BPTElDWV9ERUNJU0lPTihvYmop
ICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfVFlQ
RV9OQVZJR0FUSU9OX1BPTElDWV9ERUNJU0lPTiwgV2ViS2l0TmF2aWdhdGlvblBvbGljeURlY2lz
aW9uKSkKICNkZWZpbmUgV0VCS0lUX05BVklHQVRJT05fUE9MSUNZX0RFQ0lTSU9OX0NMQVNTKGts
YXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9UWVBFX05B
VklHQVRJT05fUE9MSUNZX0RFQ0lTSU9OLCBXZWJLaXROYXZpZ2F0aW9uUG9saWN5RGVjaXNpb25D
bGFzcykpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJL
aXRQcml2YXRlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFBy
aXZhdGUuY3BwCmluZGV4IDVlOGY5YzUuLjIwNmNiY2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFByaXZhdGUuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFByaXZhdGUuY3BwCkBAIC0yMSw2ICsyMSw3IEBA
CiAjaW5jbHVkZSAiV2ViS2l0UHJpdmF0ZS5oIgogCiAjaW5jbHVkZSAiRXJyb3JzR3RrLmgiCisj
aW5jbHVkZSAiV2ViRXZlbnQuaCIKICNpbmNsdWRlICJXZWJLaXRFcnJvci5oIgogI2luY2x1ZGUg
PGdkay9nZGsuaD4KIApAQCAtMzgsNiArMzksNTcgQEAgdW5zaWduZWQgd2tFdmVudE1vZGlmaWVy
c1RvR2RrTW9kaWZpZXJzKFdLRXZlbnRNb2RpZmllcnMgd2tNb2RpZmllcnMpCiAgICAgcmV0dXJu
IG1vZGlmaWVyczsKIH0KIAordW5zaWduZWQgdG9HZGtNb2RpZmllcnMoV2ViS2l0OjpXZWJFdmVu
dDo6TW9kaWZpZXJzIHdrTW9kaWZpZXJzKQoreworICAgIHVuc2lnbmVkIG1vZGlmaWVycyA9IDA7
CisgICAgaWYgKHdrTW9kaWZpZXJzICYgV2ViS2l0OjpXZWJFdmVudDo6TW9kaWZpZXJzOjpTaGlm
dEtleSkKKyAgICAgICAgbW9kaWZpZXJzIHw9IEdES19TSElGVF9NQVNLOworICAgIGlmICh3a01v
ZGlmaWVycyAmIFdlYktpdDo6V2ViRXZlbnQ6Ok1vZGlmaWVyczo6Q29udHJvbEtleSkKKyAgICAg
ICAgbW9kaWZpZXJzIHw9IEdES19DT05UUk9MX01BU0s7CisgICAgaWYgKHdrTW9kaWZpZXJzICYg
V2ViS2l0OjpXZWJFdmVudDo6TW9kaWZpZXJzOjpBbHRLZXkpCisgICAgICAgIG1vZGlmaWVycyB8
PSBHREtfTU9EMV9NQVNLOworICAgIGlmICh3a01vZGlmaWVycyAmIFdlYktpdDo6V2ViRXZlbnQ6
Ok1vZGlmaWVyczo6TWV0YUtleSkKKyAgICAgICAgbW9kaWZpZXJzIHw9IEdES19NRVRBX01BU0s7
CisgICAgcmV0dXJuIG1vZGlmaWVyczsKK30KKworV2ViS2l0TmF2aWdhdGlvblR5cGUgdG9XZWJL
aXROYXZpZ2F0aW9uVHlwZShXZWJDb3JlOjpOYXZpZ2F0aW9uVHlwZSB0eXBlKQoreworICAgIHN3
aXRjaCAodHlwZSkgeworICAgIGNhc2UgV2ViQ29yZTo6TmF2aWdhdGlvblR5cGU6Ok5hdmlnYXRp
b25UeXBlTGlua0NsaWNrZWQ6CisgICAgICAgIHJldHVybiBXRUJLSVRfTkFWSUdBVElPTl9UWVBF
X0xJTktfQ0xJQ0tFRDsKKyAgICBjYXNlIFdlYkNvcmU6Ok5hdmlnYXRpb25UeXBlOjpOYXZpZ2F0
aW9uVHlwZUZvcm1TdWJtaXR0ZWQ6CisgICAgICAgIHJldHVybiBXRUJLSVRfTkFWSUdBVElPTl9U
WVBFX0ZPUk1fU1VCTUlUVEVEOworICAgIGNhc2UgV2ViQ29yZTo6TmF2aWdhdGlvblR5cGU6Ok5h
dmlnYXRpb25UeXBlQmFja0ZvcndhcmQ6CisgICAgICAgIHJldHVybiBXRUJLSVRfTkFWSUdBVElP
Tl9UWVBFX0JBQ0tfRk9SV0FSRDsKKyAgICBjYXNlIFdlYkNvcmU6Ok5hdmlnYXRpb25UeXBlOjpO
YXZpZ2F0aW9uVHlwZVJlbG9hZDoKKyAgICAgICAgcmV0dXJuIFdFQktJVF9OQVZJR0FUSU9OX1RZ
UEVfUkVMT0FEOworICAgIGNhc2UgV2ViQ29yZTo6TmF2aWdhdGlvblR5cGU6Ok5hdmlnYXRpb25U
eXBlRm9ybVJlc3VibWl0dGVkOgorICAgICAgICByZXR1cm4gV0VCS0lUX05BVklHQVRJT05fVFlQ
RV9GT1JNX1JFU1VCTUlUVEVEOworICAgIGNhc2UgV2ViQ29yZTo6TmF2aWdhdGlvblR5cGU6Ok5h
dmlnYXRpb25UeXBlT3RoZXI6CisgICAgICAgIHJldHVybiBXRUJLSVRfTkFWSUdBVElPTl9UWVBF
X09USEVSOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICByZXR1cm4gV0VCS0lUX05BVklHQVRJT05fVFlQRV9PVEhFUjsKKyAgICB9Cit9CisKK3Vu
c2lnbmVkIHRvV2ViS2l0TW91c2VCdXR0b24oV2ViS2l0OjpXZWJNb3VzZUV2ZW50OjpCdXR0b24g
YnV0dG9uKQoreworICAgIHN3aXRjaCAoYnV0dG9uKSB7CisgICAgY2FzZSBXZWJLaXQ6OldlYk1v
dXNlRXZlbnQ6OkJ1dHRvbjo6Tm9CdXR0b246CisgICAgICAgIHJldHVybiAwOworICAgIGNhc2Ug
V2ViS2l0OjpXZWJNb3VzZUV2ZW50OjpCdXR0b246OkxlZnRCdXR0b246CisgICAgICAgIHJldHVy
biAxOworICAgIGNhc2UgV2ViS2l0OjpXZWJNb3VzZUV2ZW50OjpCdXR0b246Ok1pZGRsZUJ1dHRv
bjoKKyAgICAgICAgcmV0dXJuIDI7CisgICAgY2FzZSBXZWJLaXQ6OldlYk1vdXNlRXZlbnQ6OkJ1
dHRvbjo6UmlnaHRCdXR0b246CisgICAgICAgIHJldHVybiAzOworICAgIH0KKyAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gMDsKK30KKwogdW5zaWduZWQgd2tFdmVudE1vdXNl
QnV0dG9uVG9XZWJLaXRNb3VzZUJ1dHRvbihXS0V2ZW50TW91c2VCdXR0b24gd2tCdXR0b24pCiB7
CiAgICAgc3dpdGNoICh3a0J1dHRvbikgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvV2ViS2l0UHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvV2ViS2l0UHJpdmF0ZS5oCmluZGV4IGZhYjA4NjUuLmE1NGUxNGUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFByaXZhdGUuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRQcml2YXRlLmgKQEAgLTI2
LDYgKzI2LDcgQEAKICNpZm5kZWYgV2ViS2l0UHJpdmF0ZV9oCiAjZGVmaW5lIFdlYktpdFByaXZh
dGVfaAogCisjaW5jbHVkZSAiV2ViS2l0TmF2aWdhdGlvbkFjdGlvbi5oIgogI2luY2x1ZGUgPFdl
YktpdC9XS0FQSUNhc3QuaD4KICNpbmNsdWRlIDxXZWJLaXQvV0tEb3dubG9hZC5oPgogI2luY2x1
ZGUgPFdlYktpdC9XS0ZpbmRPcHRpb25zLmg+CkBAIC0xMTUsNiArMTE2LDkgQEAgR1R5cGUgdHlw
ZV9uYW1lIyNfZ2V0X3R5cGUodm9pZCkgXAogCiB1bnNpZ25lZCB3a0V2ZW50TW9kaWZpZXJzVG9H
ZGtNb2RpZmllcnMoV0tFdmVudE1vZGlmaWVycyk7CiB1bnNpZ25lZCB3a0V2ZW50TW91c2VCdXR0
b25Ub1dlYktpdE1vdXNlQnV0dG9uKFdLRXZlbnRNb3VzZUJ1dHRvbik7Cit1bnNpZ25lZCB0b0dk
a01vZGlmaWVycyhXZWJLaXQ6OldlYkV2ZW50OjpNb2RpZmllcnMpOworV2ViS2l0TmF2aWdhdGlv
blR5cGUgdG9XZWJLaXROYXZpZ2F0aW9uVHlwZShXZWJDb3JlOjpOYXZpZ2F0aW9uVHlwZSk7Cit1
bnNpZ25lZCB0b1dlYktpdE1vdXNlQnV0dG9uKFdlYktpdDo6V2ViTW91c2VFdmVudDo6QnV0dG9u
KTsKIHVuc2lnbmVkIHRvV2ViS2l0RXJyb3IodW5zaWduZWQgd2ViQ29yZUVycm9yKTsKIHVuc2ln
bmVkIHRvV2ViQ29yZUVycm9yKHVuc2lnbmVkIHdlYktpdEVycm9yKTsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0VUlDbGllbnQuY3BwIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0VUlDbGllbnQuY3BwCmluZGV4IDll
MGVmNjguLmY4ZGFiYmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL1dlYktpdFVJQ2xpZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay9XZWJLaXRVSUNsaWVudC5jcHAKQEAgLTIwLDkgKzIwLDEyIEBACiAjaW5jbHVkZSAiY29u
ZmlnLmgiCiAjaW5jbHVkZSAiV2ViS2l0VUlDbGllbnQuaCIKIAorI2luY2x1ZGUgIkFQSVVJQ2xp
ZW50LmgiCiAjaW5jbHVkZSAiV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0UHJpdmF0ZS5oIgogI2lu
Y2x1ZGUgIldlYktpdEdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RQcml2YXRlLmgiCisjaW5j
bHVkZSAiV2ViS2l0TmF2aWdhdGlvbkFjdGlvblByaXZhdGUuaCIKICNpbmNsdWRlICJXZWJLaXRQ
cml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0VVJJUmVxdWVzdFByaXZhdGUuaCIKICNpbmNsdWRl
ICJXZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUuaCIKICNpbmNsdWRlICJXZWJLaXRXZWJWaWV3UHJp
dmF0ZS5oIgogI2luY2x1ZGUgIldlYktpdFdpbmRvd1Byb3BlcnRpZXNQcml2YXRlLmgiCkBAIC0z
MiwxODcgKzM1LDE0NyBAQAogCiB1c2luZyBuYW1lc3BhY2UgV2ViS2l0OwogCi1zdGF0aWMgV0tQ
YWdlUmVmIGNyZWF0ZU5ld1BhZ2UoV0tQYWdlUmVmLCBXS1VSTFJlcXVlc3RSZWYsIFdLRGljdGlv
bmFyeVJlZiB3a1dpbmRvd0ZlYXR1cmVzLCBXS0V2ZW50TW9kaWZpZXJzLCBXS0V2ZW50TW91c2VC
dXR0b24sIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCi17Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0
PFdLUGFnZVJlZj4odG9BUEkod2Via2l0V2ViVmlld0NyZWF0ZU5ld1BhZ2UoV0VCS0lUX1dFQl9W
SUVXKGNsaWVudEluZm8pLCB0b0ltcGwod2tXaW5kb3dGZWF0dXJlcykpKSk7Ci19CitjbGFzcyBV
SUNsaWVudCA6IHB1YmxpYyBBUEk6OlVJQ2xpZW50IHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBV
SUNsaWVudChXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQorICAgICAgICA6IG1fd2ViVmlldyh3ZWJW
aWV3KQorICAgIHsKKyAgICB9CiAKLXN0YXRpYyB2b2lkIHNob3dQYWdlKFdLUGFnZVJlZiwgY29u
c3Qgdm9pZCogY2xpZW50SW5mbykKLXsKLSAgICB3ZWJraXRXZWJWaWV3UmVhZHlUb1Nob3dQYWdl
KFdFQktJVF9XRUJfVklFVyhjbGllbnRJbmZvKSk7Ci19Citwcml2YXRlOgorICAgIHZpcnR1YWwg
UGFzc1JlZlB0cjxXZWJQYWdlUHJveHk+IGNyZWF0ZU5ld1BhZ2UoV2ViUGFnZVByb3h5KiwgV2Vi
RnJhbWVQcm94eSosIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVzb3VyY2VSZXF1
ZXN0LCBjb25zdCBXZWJDb3JlOjpXaW5kb3dGZWF0dXJlcyYgd2luZG93RmVhdHVyZXMsIGNvbnN0
IE5hdmlnYXRpb25BY3Rpb25EYXRhJiBuYXZpZ2F0aW9uQWN0aW9uRGF0YSkgb3ZlcnJpZGUKKyAg
ICB7CisgICAgICAgIEdSZWZQdHI8V2ViS2l0VVJJUmVxdWVzdD4gcmVxdWVzdCA9IGFkb3B0R1Jl
Zih3ZWJraXRVUklSZXF1ZXN0Q3JlYXRlRm9yUmVzb3VyY2VSZXF1ZXN0KHJlc291cmNlUmVxdWVz
dCkpOworICAgICAgICBXZWJLaXROYXZpZ2F0aW9uQWN0aW9uIG5hdmlnYXRpb24ocmVxdWVzdC5n
ZXQoKSwgbmF2aWdhdGlvbkFjdGlvbkRhdGEpOworICAgICAgICByZXR1cm4gd2Via2l0V2ViVmll
d0NyZWF0ZU5ld1BhZ2UobV93ZWJWaWV3LCB3aW5kb3dGZWF0dXJlcywgJm5hdmlnYXRpb24pOwor
ICAgIH0KIAotc3RhdGljIHZvaWQgY2xvc2VQYWdlKFdLUGFnZVJlZiwgY29uc3Qgdm9pZCogY2xp
ZW50SW5mbykKLXsKLSAgICB3ZWJraXRXZWJWaWV3Q2xvc2VQYWdlKFdFQktJVF9XRUJfVklFVyhj
bGllbnRJbmZvKSk7Ci19CisgICAgdmlydHVhbCB2b2lkIHNob3dQYWdlKFdlYlBhZ2VQcm94eSop
IG92ZXJyaWRlCisgICAgeworICAgICAgICB3ZWJraXRXZWJWaWV3UmVhZHlUb1Nob3dQYWdlKG1f
d2ViVmlldyk7CisgICAgfQogCi1zdGF0aWMgdm9pZCBydW5KYXZhU2NyaXB0QWxlcnQoV0tQYWdl
UmVmLCBXS1N0cmluZ1JlZiBtZXNzYWdlLCBXS0ZyYW1lUmVmLCBjb25zdCB2b2lkKiBjbGllbnRJ
bmZvKQotewotICAgIHdlYmtpdFdlYlZpZXdSdW5KYXZhU2NyaXB0QWxlcnQoV0VCS0lUX1dFQl9W
SUVXKGNsaWVudEluZm8pLCB0b0ltcGwobWVzc2FnZSktPnN0cmluZygpLnV0ZjgoKSk7Ci19Cisg
ICAgdmlydHVhbCB2b2lkIGNsb3NlKFdlYlBhZ2VQcm94eSopIG92ZXJyaWRlCisgICAgeworICAg
ICAgICB3ZWJraXRXZWJWaWV3Q2xvc2VQYWdlKG1fd2ViVmlldyk7CisgICAgfQogCi1zdGF0aWMg
Ym9vbCBydW5KYXZhU2NyaXB0Q29uZmlybShXS1BhZ2VSZWYsIFdLU3RyaW5nUmVmIG1lc3NhZ2Us
IFdLRnJhbWVSZWYsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCi17Ci0gICAgcmV0dXJuIHdlYmtp
dFdlYlZpZXdSdW5KYXZhU2NyaXB0Q29uZmlybShXRUJLSVRfV0VCX1ZJRVcoY2xpZW50SW5mbyks
IHRvSW1wbChtZXNzYWdlKS0+c3RyaW5nKCkudXRmOCgpKTsKLX0KKyAgICB2aXJ0dWFsIHZvaWQg
cnVuSmF2YVNjcmlwdEFsZXJ0KFdlYlBhZ2VQcm94eSosIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwg
V2ViRnJhbWVQcm94eSosIHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4gY29tcGxldGlvbkhhbmRsZXIp
IG92ZXJyaWRlCisgICAgeworICAgICAgICB3ZWJraXRXZWJWaWV3UnVuSmF2YVNjcmlwdEFsZXJ0
KG1fd2ViVmlldywgbWVzc2FnZS51dGY4KCkpOworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigp
OworICAgIH0KIAotc3RhdGljIFdLU3RyaW5nUmVmIHJ1bkphdmFTY3JpcHRQcm9tcHQoV0tQYWdl
UmVmLCBXS1N0cmluZ1JlZiBtZXNzYWdlLCBXS1N0cmluZ1JlZiBkZWZhdWx0VmFsdWUsIFdLRnJh
bWVSZWYsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCi17Ci0gICAgQ1N0cmluZyByZXN1bHQgPSB3
ZWJraXRXZWJWaWV3UnVuSmF2YVNjcmlwdFByb21wdChXRUJLSVRfV0VCX1ZJRVcoY2xpZW50SW5m
byksIHRvSW1wbChtZXNzYWdlKS0+c3RyaW5nKCkudXRmOCgpLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9JbXBsKGRlZmF1bHRWYWx1ZSkt
PnN0cmluZygpLnV0ZjgoKSk7Ci0gICAgcmV0dXJuIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKHJlc3VsdC5kYXRhKCkpOwotfQorICAgIHZpcnR1YWwgdm9pZCBydW5KYXZhU2NyaXB0Q29u
ZmlybShXZWJQYWdlUHJveHkqLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIFdlYkZyYW1lUHJveHkq
LCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKGJvb2wpPiBjb21wbGV0aW9uSGFuZGxlcikgb3ZlcnJpZGUK
KyAgICB7CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHdlYmtpdFdlYlZpZXdSdW5KYXZhU2Ny
aXB0Q29uZmlybShtX3dlYlZpZXcsIG1lc3NhZ2UudXRmOCgpKSk7CisgICAgfQogCi1zdGF0aWMg
Ym9vbCB0b29sYmFyc0FyZVZpc2libGUoV0tQYWdlUmVmLCBjb25zdCB2b2lkKiBjbGllbnRJbmZv
KQotewotICAgIFdlYktpdFdpbmRvd1Byb3BlcnRpZXMqIHdpbmRvd1Byb3BlcnRpZXMgPSB3ZWJr
aXRfd2ViX3ZpZXdfZ2V0X3dpbmRvd19wcm9wZXJ0aWVzKFdFQktJVF9XRUJfVklFVyhjbGllbnRJ
bmZvKSk7Ci0gICAgcmV0dXJuIHdlYmtpdF93aW5kb3dfcHJvcGVydGllc19nZXRfdG9vbGJhcl92
aXNpYmxlKHdpbmRvd1Byb3BlcnRpZXMpOwotfQorICAgIHZpcnR1YWwgdm9pZCBydW5KYXZhU2Ny
aXB0UHJvbXB0KFdlYlBhZ2VQcm94eSosIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgY29uc3QgU3Ry
aW5nJiBkZWZhdWx0VmFsdWUsIFdlYkZyYW1lUHJveHkqLCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKGNv
bnN0IFN0cmluZyYpPiBjb21wbGV0aW9uSGFuZGxlcikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAg
IENTdHJpbmcgcmVzdWx0ID0gd2Via2l0V2ViVmlld1J1bkphdmFTY3JpcHRQcm9tcHQobV93ZWJW
aWV3LCBtZXNzYWdlLnV0ZjgoKSwgZGVmYXVsdFZhbHVlLnV0ZjgoKSk7CisgICAgICAgIGlmIChy
ZXN1bHQuaXNOdWxsKCkpIHsKKyAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFN0cmluZygp
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogCi1zdGF0aWMgdm9pZCBzZXRUb29s
YmFyc0FyZVZpc2libGUoV0tQYWdlUmVmLCBib29sIHRvb2xiYXJzVmlzaWJsZSwgY29uc3Qgdm9p
ZCogY2xpZW50SW5mbykKLXsKLSAgICBXZWJLaXRXaW5kb3dQcm9wZXJ0aWVzKiB3aW5kb3dQcm9w
ZXJ0aWVzID0gd2Via2l0X3dlYl92aWV3X2dldF93aW5kb3dfcHJvcGVydGllcyhXRUJLSVRfV0VC
X1ZJRVcoY2xpZW50SW5mbykpOwotICAgIHdlYmtpdFdpbmRvd1Byb3BlcnRpZXNTZXRUb29sYmFy
VmlzaWJsZSh3aW5kb3dQcm9wZXJ0aWVzLCB0b29sYmFyc1Zpc2libGUpOwotfQorICAgICAgICBj
b21wbGV0aW9uSGFuZGxlcihTdHJpbmc6OmZyb21VVEY4KHJlc3VsdC5kYXRhKCkpKTsKKyAgICB9
CiAKLXN0YXRpYyBib29sIG1lbnVCYXJJc1Zpc2libGUoV0tQYWdlUmVmLCBjb25zdCB2b2lkKiBj
bGllbnRJbmZvKQotewotICAgIFdlYktpdFdpbmRvd1Byb3BlcnRpZXMqIHdpbmRvd1Byb3BlcnRp
ZXMgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3dpbmRvd19wcm9wZXJ0aWVzKFdFQktJVF9XRUJfVklF
VyhjbGllbnRJbmZvKSk7Ci0gICAgcmV0dXJuIHdlYmtpdF93aW5kb3dfcHJvcGVydGllc19nZXRf
bWVudWJhcl92aXNpYmxlKHdpbmRvd1Byb3BlcnRpZXMpOwotfQorICAgIHZpcnR1YWwgdm9pZCBt
b3VzZURpZE1vdmVPdmVyRWxlbWVudChXZWJQYWdlUHJveHkqLCBjb25zdCBXZWJIaXRUZXN0UmVz
dWx0OjpEYXRhJiBkYXRhLCBXZWJFdmVudDo6TW9kaWZpZXJzIG1vZGlmaWVycywgQVBJOjpPYmpl
Y3QqKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgd2Via2l0V2ViVmlld01vdXNlVGFyZ2V0Q2hh
bmdlZChtX3dlYlZpZXcsIGRhdGEsIHRvR2RrTW9kaWZpZXJzKG1vZGlmaWVycykpOworICAgIH0K
IAotc3RhdGljIHZvaWQgc2V0TWVudUJhcklzVmlzaWJsZShXS1BhZ2VSZWYsIGJvb2wgbWVudUJh
clZpc2libGUsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCi17Ci0gICAgV2ViS2l0V2luZG93UHJv
cGVydGllcyogd2luZG93UHJvcGVydGllcyA9IHdlYmtpdF93ZWJfdmlld19nZXRfd2luZG93X3By
b3BlcnRpZXMoV0VCS0lUX1dFQl9WSUVXKGNsaWVudEluZm8pKTsKLSAgICB3ZWJraXRXaW5kb3dQ
cm9wZXJ0aWVzU2V0TWVudWJhclZpc2libGUod2luZG93UHJvcGVydGllcywgbWVudUJhclZpc2li
bGUpOwotfQorICAgIHZpcnR1YWwgYm9vbCB0b29sYmFyc0FyZVZpc2libGUoV2ViUGFnZVByb3h5
Kikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIHJldHVybiB3ZWJraXRfd2luZG93X3Byb3BlcnRp
ZXNfZ2V0X3Rvb2xiYXJfdmlzaWJsZSh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3dpbmRvd19wcm9wZXJ0
aWVzKG1fd2ViVmlldykpOworICAgIH0KIAotc3RhdGljIGJvb2wgc3RhdHVzQmFySXNWaXNpYmxl
KFdLUGFnZVJlZiwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKLXsKLSAgICBXZWJLaXRXaW5kb3dQ
cm9wZXJ0aWVzKiB3aW5kb3dQcm9wZXJ0aWVzID0gd2Via2l0X3dlYl92aWV3X2dldF93aW5kb3df
cHJvcGVydGllcyhXRUJLSVRfV0VCX1ZJRVcoY2xpZW50SW5mbykpOwotICAgIHJldHVybiB3ZWJr
aXRfd2luZG93X3Byb3BlcnRpZXNfZ2V0X3N0YXR1c2Jhcl92aXNpYmxlKHdpbmRvd1Byb3BlcnRp
ZXMpOwotfQorICAgIHZpcnR1YWwgdm9pZCBzZXRUb29sYmFyc0FyZVZpc2libGUoV2ViUGFnZVBy
b3h5KiwgYm9vbCB2aXNpYmxlKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgd2Via2l0V2luZG93
UHJvcGVydGllc1NldFRvb2xiYXJWaXNpYmxlKHdlYmtpdF93ZWJfdmlld19nZXRfd2luZG93X3By
b3BlcnRpZXMobV93ZWJWaWV3KSwgdmlzaWJsZSk7CisgICAgfQogCi1zdGF0aWMgdm9pZCBzZXRT
dGF0dXNCYXJJc1Zpc2libGUoV0tQYWdlUmVmLCBib29sIHN0YXR1c0JhclZpc2libGUsIGNvbnN0
IHZvaWQqIGNsaWVudEluZm8pCi17Ci0gICAgV2ViS2l0V2luZG93UHJvcGVydGllcyogd2luZG93
UHJvcGVydGllcyA9IHdlYmtpdF93ZWJfdmlld19nZXRfd2luZG93X3Byb3BlcnRpZXMoV0VCS0lU
X1dFQl9WSUVXKGNsaWVudEluZm8pKTsKLSAgICB3ZWJraXRXaW5kb3dQcm9wZXJ0aWVzU2V0U3Rh
dHVzYmFyVmlzaWJsZSh3aW5kb3dQcm9wZXJ0aWVzLCBzdGF0dXNCYXJWaXNpYmxlKTsKLX0KKyAg
ICB2aXJ0dWFsIGJvb2wgbWVudUJhcklzVmlzaWJsZShXZWJQYWdlUHJveHkqKSBvdmVycmlkZQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIHdlYmtpdF93aW5kb3dfcHJvcGVydGllc19nZXRfbWVudWJh
cl92aXNpYmxlKHdlYmtpdF93ZWJfdmlld19nZXRfd2luZG93X3Byb3BlcnRpZXMobV93ZWJWaWV3
KSk7CisgICAgfQogCi1zdGF0aWMgYm9vbCBpc1Jlc2l6YWJsZShXS1BhZ2VSZWYsIGNvbnN0IHZv
aWQqIGNsaWVudEluZm8pCi17Ci0gICAgV2ViS2l0V2luZG93UHJvcGVydGllcyogd2luZG93UHJv
cGVydGllcyA9IHdlYmtpdF93ZWJfdmlld19nZXRfd2luZG93X3Byb3BlcnRpZXMoV0VCS0lUX1dF
Ql9WSUVXKGNsaWVudEluZm8pKTsKLSAgICByZXR1cm4gd2Via2l0X3dpbmRvd19wcm9wZXJ0aWVz
X2dldF9yZXNpemFibGUod2luZG93UHJvcGVydGllcyk7Ci19CisgICAgdmlydHVhbCB2b2lkIHNl
dE1lbnVCYXJJc1Zpc2libGUoV2ViUGFnZVByb3h5KiwgYm9vbCB2aXNpYmxlKSBvdmVycmlkZQor
ICAgIHsKKyAgICAgICAgd2Via2l0V2luZG93UHJvcGVydGllc1NldFRvb2xiYXJWaXNpYmxlKHdl
YmtpdF93ZWJfdmlld19nZXRfd2luZG93X3Byb3BlcnRpZXMobV93ZWJWaWV3KSwgdmlzaWJsZSk7
CisgICAgfQogCi1zdGF0aWMgdm9pZCBzZXRJc1Jlc2l6YWJsZShXS1BhZ2VSZWYsIGJvb2wgcmVz
aXphYmxlLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQotewotICAgIFdlYktpdFdpbmRvd1Byb3Bl
cnRpZXMqIHdpbmRvd1Byb3BlcnRpZXMgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3dpbmRvd19wcm9w
ZXJ0aWVzKFdFQktJVF9XRUJfVklFVyhjbGllbnRJbmZvKSk7Ci0gICAgd2Via2l0V2luZG93UHJv
cGVydGllc1NldFJlc2l6YWJsZSh3aW5kb3dQcm9wZXJ0aWVzLCByZXNpemFibGUpOwotfQorICAg
IHZpcnR1YWwgYm9vbCBzdGF0dXNCYXJJc1Zpc2libGUoV2ViUGFnZVByb3h5Kikgb3ZlcnJpZGUK
KyAgICB7CisgICAgICAgIHJldHVybiB3ZWJraXRfd2luZG93X3Byb3BlcnRpZXNfZ2V0X3N0YXR1
c2Jhcl92aXNpYmxlKHdlYmtpdF93ZWJfdmlld19nZXRfd2luZG93X3Byb3BlcnRpZXMobV93ZWJW
aWV3KSk7CisgICAgfQogCi1zdGF0aWMgV0tSZWN0IGdldFdpbmRvd0ZyYW1lKFdLUGFnZVJlZiwg
Y29uc3Qgdm9pZCogY2xpZW50SW5mbykKLXsKLSAgICBHZGtSZWN0YW5nbGUgZ2VvbWV0cnkgPSB7
IDAsIDAsIDAsIDAgfTsKLSAgICBHdGtXaWRnZXQqIHdpbmRvdyA9IGd0a193aWRnZXRfZ2V0X3Rv
cGxldmVsKEdUS19XSURHRVQoY2xpZW50SW5mbykpOwotICAgIGlmIChXZWJDb3JlOjp3aWRnZXRJ
c09uc2NyZWVuVG9wbGV2ZWxXaW5kb3cod2luZG93KSAmJiBndGtfd2lkZ2V0X2dldF92aXNpYmxl
KHdpbmRvdykpIHsKLSAgICAgICAgZ3RrX3dpbmRvd19nZXRfcG9zaXRpb24oR1RLX1dJTkRPVyh3
aW5kb3cpLCAmZ2VvbWV0cnkueCwgJmdlb21ldHJ5LnkpOwotICAgICAgICBndGtfd2luZG93X2dl
dF9zaXplKEdUS19XSU5ET1cod2luZG93KSwgJmdlb21ldHJ5LndpZHRoLCAmZ2VvbWV0cnkuaGVp
Z2h0KTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0U3RhdHVzQmFySXNWaXNpYmxlKFdlYlBhZ2VQcm94
eSosIGJvb2wgdmlzaWJsZSkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIHdlYmtpdFdpbmRvd1By
b3BlcnRpZXNTZXRTdGF0dXNiYXJWaXNpYmxlKHdlYmtpdF93ZWJfdmlld19nZXRfd2luZG93X3By
b3BlcnRpZXMobV93ZWJWaWV3KSwgdmlzaWJsZSk7CiAgICAgfQotICAgIHJldHVybiBXS1JlY3RN
YWtlKGdlb21ldHJ5LngsIGdlb21ldHJ5LnksIGdlb21ldHJ5LndpZHRoLCBnZW9tZXRyeS5oZWln
aHQpOwotfQogCi1zdGF0aWMgdm9pZCBzZXRXaW5kb3dGcmFtZShXS1BhZ2VSZWYsIFdLUmVjdCBm
cmFtZSwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKLXsKLSAgICBXZWJLaXRXaW5kb3dQcm9wZXJ0
aWVzKiB3aW5kb3dQcm9wZXJ0aWVzID0gd2Via2l0X3dlYl92aWV3X2dldF93aW5kb3dfcHJvcGVy
dGllcyhXRUJLSVRfV0VCX1ZJRVcoY2xpZW50SW5mbykpOwotICAgIEdka1JlY3RhbmdsZSBnZW9t
ZXRyeSA9IHsgc3RhdGljX2Nhc3Q8aW50PihmcmFtZS5vcmlnaW4ueCksIHN0YXRpY19jYXN0PGlu
dD4oZnJhbWUub3JpZ2luLnkpLAotICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+KGZyYW1lLnNpemUu
d2lkdGgpLCBzdGF0aWNfY2FzdDxpbnQ+KGZyYW1lLnNpemUuaGVpZ2h0KSB9OwotICAgIHdlYmtp
dFdpbmRvd1Byb3BlcnRpZXNTZXRHZW9tZXRyeSh3aW5kb3dQcm9wZXJ0aWVzLCAmZ2VvbWV0cnkp
OwotfQorICAgIHZpcnR1YWwgYm9vbCBpc1Jlc2l6YWJsZShXZWJQYWdlUHJveHkqKSBvdmVycmlk
ZQorICAgIHsKKyAgICAgICAgcmV0dXJuIHdlYmtpdF93aW5kb3dfcHJvcGVydGllc19nZXRfcmVz
aXphYmxlKHdlYmtpdF93ZWJfdmlld19nZXRfd2luZG93X3Byb3BlcnRpZXMobV93ZWJWaWV3KSk7
CisgICAgfQogCi1zdGF0aWMgdm9pZCBtb3VzZURpZE1vdmVPdmVyRWxlbWVudChXS1BhZ2VSZWYs
IFdLSGl0VGVzdFJlc3VsdFJlZiBoaXRUZXN0UmVzdWx0LCBXS0V2ZW50TW9kaWZpZXJzIG1vZGlm
aWVycywgV0tUeXBlUmVmIC8qIHVzZXJEYXRhICovLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQot
ewotICAgIHdlYmtpdFdlYlZpZXdNb3VzZVRhcmdldENoYW5nZWQoV0VCS0lUX1dFQl9WSUVXKGNs
aWVudEluZm8pLCB0b0ltcGwoaGl0VGVzdFJlc3VsdCksIHdrRXZlbnRNb2RpZmllcnNUb0dka01v
ZGlmaWVycyhtb2RpZmllcnMpKTsKLX0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0SXNSZXNpemFibGUo
V2ViUGFnZVByb3h5KiwgYm9vbCByZXNpemFibGUpIG92ZXJyaWRlCisgICAgeworICAgICAgICB3
ZWJraXRXaW5kb3dQcm9wZXJ0aWVzU2V0UmVzaXphYmxlKHdlYmtpdF93ZWJfdmlld19nZXRfd2lu
ZG93X3Byb3BlcnRpZXMobV93ZWJWaWV3KSwgcmVzaXphYmxlKTsKKyAgICB9CiAKLXN0YXRpYyB2
b2lkIHByaW50RnJhbWUoV0tQYWdlUmVmIHBhZ2UsIFdLRnJhbWVSZWYgZnJhbWUsIGNvbnN0IHZv
aWQqKQotewotICAgIHdlYmtpdFdlYlZpZXdQcmludEZyYW1lKFdFQktJVF9XRUJfVklFVyh0b0lt
cGwocGFnZSktPnZpZXdXaWRnZXQoKSksIHRvSW1wbChmcmFtZSkpOwotfQorICAgIHZpcnR1YWwg
dm9pZCBzZXRXaW5kb3dGcmFtZShXZWJQYWdlUHJveHkqLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJl
Y3QmIGZyYW1lKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgR2RrUmVjdGFuZ2xlIGdlb21ldHJ5
ID0gV2ViQ29yZTo6SW50UmVjdChmcmFtZSk7CisgICAgICAgIHdlYmtpdFdpbmRvd1Byb3BlcnRp
ZXNTZXRHZW9tZXRyeSh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3dpbmRvd19wcm9wZXJ0aWVzKG1fd2Vi
VmlldyksICZnZW9tZXRyeSk7CisgICAgfQogCi1zdGF0aWMgdm9pZCBydW5PcGVuUGFuZWwoV0tQ
YWdlUmVmLCBXS0ZyYW1lUmVmLCBXS09wZW5QYW5lbFBhcmFtZXRlcnNSZWYgcGFyYW1ldGVycywg
V0tPcGVuUGFuZWxSZXN1bHRMaXN0ZW5lclJlZiBsaXN0ZW5lciwgY29uc3Qgdm9pZCAqY2xpZW50
SW5mbykKLXsKLSAgICBHUmVmUHRyPFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdD4gcmVxdWVzdCA9
IGFkb3B0R1JlZih3ZWJraXRGaWxlQ2hvb3NlclJlcXVlc3RDcmVhdGUodG9JbXBsKHBhcmFtZXRl
cnMpLCB0b0ltcGwobGlzdGVuZXIpKSk7Ci0gICAgd2Via2l0V2ViVmlld1J1bkZpbGVDaG9vc2Vy
UmVxdWVzdChXRUJLSVRfV0VCX1ZJRVcoY2xpZW50SW5mbyksIHJlcXVlc3QuZ2V0KCkpOwotfQor
ICAgIHZpcnR1YWwgV2ViQ29yZTo6RmxvYXRSZWN0IHdpbmRvd0ZyYW1lKFdlYlBhZ2VQcm94eSop
IG92ZXJyaWRlCisgICAgeworICAgICAgICBHZGtSZWN0YW5nbGUgZ2VvbWV0cnkgPSB7IDAsIDAs
IDAsIDAgfTsKKyAgICAgICAgR3RrV2lkZ2V0KiB3aW5kb3cgPSBndGtfd2lkZ2V0X2dldF90b3Bs
ZXZlbChHVEtfV0lER0VUKG1fd2ViVmlldykpOworICAgICAgICBpZiAoV2ViQ29yZTo6d2lkZ2V0
SXNPbnNjcmVlblRvcGxldmVsV2luZG93KHdpbmRvdykgJiYgZ3RrX3dpZGdldF9nZXRfdmlzaWJs
ZSh3aW5kb3cpKSB7CisgICAgICAgICAgICBndGtfd2luZG93X2dldF9wb3NpdGlvbihHVEtfV0lO
RE9XKHdpbmRvdyksICZnZW9tZXRyeS54LCAmZ2VvbWV0cnkueSk7CisgICAgICAgICAgICBndGtf
d2luZG93X2dldF9zaXplKEdUS19XSU5ET1cod2luZG93KSwgJmdlb21ldHJ5LndpZHRoLCAmZ2Vv
bWV0cnkuaGVpZ2h0KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gV2ViQ29yZTo6RmxvYXRS
ZWN0KGdlb21ldHJ5KTsKKyAgICB9CiAKLXN0YXRpYyB2b2lkIGRlY2lkZVBvbGljeUZvckdlb2xv
Y2F0aW9uUGVybWlzc2lvblJlcXVlc3QoV0tQYWdlUmVmLCBXS0ZyYW1lUmVmLCBXS1NlY3VyaXR5
T3JpZ2luUmVmLCBXS0dlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RSZWYgcmVxdWVzdCwgY29u
c3Qgdm9pZCogY2xpZW50SW5mbykKLXsKLSAgICBHUmVmUHRyPFdlYktpdEdlb2xvY2F0aW9uUGVy
bWlzc2lvblJlcXVlc3Q+IGdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3QgPSBhZG9wdEdSZWYo
d2Via2l0R2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdENyZWF0ZSh0b0ltcGwocmVxdWVzdCkp
KTsKLSAgICB3ZWJraXRXZWJWaWV3TWFrZVBlcm1pc3Npb25SZXF1ZXN0KFdFQktJVF9XRUJfVklF
VyhjbGllbnRJbmZvKSwgV0VCS0lUX1BFUk1JU1NJT05fUkVRVUVTVChnZW9sb2NhdGlvblBlcm1p
c3Npb25SZXF1ZXN0LmdldCgpKSk7Ci19CisgICAgdmlydHVhbCBib29sIHJ1bk9wZW5QYW5lbChX
ZWJQYWdlUHJveHkqLCBXZWJGcmFtZVByb3h5KiwgV2ViT3BlblBhbmVsUGFyYW1ldGVycyogcGFy
YW1ldGVycywgV2ViT3BlblBhbmVsUmVzdWx0TGlzdGVuZXJQcm94eSogbGlzdGVuZXIpIG92ZXJy
aWRlCisgICAgeworICAgICAgICBHUmVmUHRyPFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdD4gcmVx
dWVzdCA9IGFkb3B0R1JlZih3ZWJraXRGaWxlQ2hvb3NlclJlcXVlc3RDcmVhdGUocGFyYW1ldGVy
cywgbGlzdGVuZXIpKTsKKyAgICAgICAgd2Via2l0V2ViVmlld1J1bkZpbGVDaG9vc2VyUmVxdWVz
dChtX3dlYlZpZXcsIHJlcXVlc3QuZ2V0KCkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CiAKLXN0YXRpYyB2b2lkIHJ1bk1vZGFsKFdLUGFnZVJlZiwgY29uc3Qgdm9pZCogY2xpZW50SW5m
bykKLXsKLSAgICB3ZWJraXRXZWJWaWV3UnVuQXNNb2RhbChXRUJLSVRfV0VCX1ZJRVcoY2xpZW50
SW5mbykpOwotfQorICAgIHZpcnR1YWwgYm9vbCBkZWNpZGVQb2xpY3lGb3JHZW9sb2NhdGlvblBl
cm1pc3Npb25SZXF1ZXN0KFdlYlBhZ2VQcm94eSosIFdlYkZyYW1lUHJveHkqLCBXZWJTZWN1cml0
eU9yaWdpbiosIEdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RQcm94eSogcGVybWlzc2lvblJl
cXVlc3QpIG92ZXJyaWRlCisgICAgeworICAgICAgICBHUmVmUHRyPFdlYktpdEdlb2xvY2F0aW9u
UGVybWlzc2lvblJlcXVlc3Q+IGdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3QgPSBhZG9wdEdS
ZWYod2Via2l0R2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdENyZWF0ZShwZXJtaXNzaW9uUmVx
dWVzdCkpOworICAgICAgICB3ZWJraXRXZWJWaWV3TWFrZVBlcm1pc3Npb25SZXF1ZXN0KG1fd2Vi
VmlldywgV0VCS0lUX1BFUk1JU1NJT05fUkVRVUVTVChnZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1
ZXN0LmdldCgpKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHZpcnR1YWwg
dm9pZCBwcmludEZyYW1lKFdlYlBhZ2VQcm94eSosIFdlYkZyYW1lUHJveHkqIGZyYW1lKSBvdmVy
cmlkZQorICAgIHsKKyAgICAgICAgd2Via2l0V2ViVmlld1ByaW50RnJhbWUobV93ZWJWaWV3LCBm
cmFtZSk7CisgICAgfQorCisgICAgdmlydHVhbCBib29sIGNhblJ1bk1vZGFsKCkgY29uc3Qgb3Zl
cnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgdmlydHVhbCB2b2lkIHJ1bk1vZGFsKFdlYlBh
Z2VQcm94eSopIG92ZXJyaWRlCisgICAgeworICAgICAgICB3ZWJraXRXZWJWaWV3UnVuQXNNb2Rh
bChtX3dlYlZpZXcpOworICAgIH0KKworICAgIFdlYktpdFdlYlZpZXcqIG1fd2ViVmlldzsKK307
CiAKIHZvaWQgYXR0YWNoVUlDbGllbnRUb1ZpZXcoV2ViS2l0V2ViVmlldyogd2ViVmlldykKIHsK
LSAgICBXS1BhZ2VVSUNsaWVudFYyIHdrVUlDbGllbnQgPSB7Ci0gICAgICAgIHsKLSAgICAgICAg
ICAgIDIsIC8vIHZlcnNpb24KLSAgICAgICAgICAgIHdlYlZpZXcsIC8vIGNsaWVudEluZm8KLSAg
ICAgICAgfSwKLSAgICAgICAgMCwgLy8gY3JlYXRlTmV3UGFnZV9kZXByZWNhdGVkRm9yVXNlV2l0
aFYwCi0gICAgICAgIHNob3dQYWdlLAotICAgICAgICBjbG9zZVBhZ2UsCi0gICAgICAgIDAsIC8v
IHRha2VGb2N1cwotICAgICAgICAwLCAvLyBmb2N1cwotICAgICAgICAwLCAvLyB1bmZvY3VzCi0g
ICAgICAgIHJ1bkphdmFTY3JpcHRBbGVydCwKLSAgICAgICAgcnVuSmF2YVNjcmlwdENvbmZpcm0s
Ci0gICAgICAgIHJ1bkphdmFTY3JpcHRQcm9tcHQsCi0gICAgICAgIDAsIC8vIHNldFN0YXR1c1Rl
eHQKLSAgICAgICAgMCwgLy8gbW91c2VEaWRNb3ZlT3ZlckVsZW1lbnRfZGVwcmVjYXRlZEZvclVz
ZVdpdGhWMAotICAgICAgICAwLCAvLyBtaXNzaW5nUGx1Z2luQnV0dG9uQ2xpY2tlZAotICAgICAg
ICAwLCAvLyBkaWROb3RIYW5kbGVLZXlFdmVudAotICAgICAgICAwLCAvLyBkaWROb3RIYW5kbGVX
aGVlbEV2ZW50Ci0gICAgICAgIHRvb2xiYXJzQXJlVmlzaWJsZSwKLSAgICAgICAgc2V0VG9vbGJh
cnNBcmVWaXNpYmxlLAotICAgICAgICBtZW51QmFySXNWaXNpYmxlLAotICAgICAgICBzZXRNZW51
QmFySXNWaXNpYmxlLAotICAgICAgICBzdGF0dXNCYXJJc1Zpc2libGUsCi0gICAgICAgIHNldFN0
YXR1c0JhcklzVmlzaWJsZSwKLSAgICAgICAgaXNSZXNpemFibGUsCi0gICAgICAgIHNldElzUmVz
aXphYmxlLAotICAgICAgICBnZXRXaW5kb3dGcmFtZSwKLSAgICAgICAgc2V0V2luZG93RnJhbWUs
Ci0gICAgICAgIDAsIC8vIHJ1bkJlZm9yZVVubG9hZENvbmZpcm1QYW5lbAotICAgICAgICAwLCAv
LyBkaWREcmF3Ci0gICAgICAgIDAsIC8vIHBhZ2VEaWRTY3JvbGwKLSAgICAgICAgMCwgLy8gZXhj
ZWVkZWREYXRhYmFzZVF1b3RhCi0gICAgICAgIHJ1bk9wZW5QYW5lbCwKLSAgICAgICAgZGVjaWRl
UG9saWN5Rm9yR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdCwKLSAgICAgICAgMCwgLy8gaGVh
ZGVySGVpZ2h0Ci0gICAgICAgIDAsIC8vIGZvb3RlckhlaWdodAotICAgICAgICAwLCAvLyBkcmF3
SGVhZGVyCi0gICAgICAgIDAsIC8vIGRyYXdGb290ZXIKLSAgICAgICAgcHJpbnRGcmFtZSwKLSAg
ICAgICAgcnVuTW9kYWwsCi0gICAgICAgIDAsIC8vIGRpZENvbXBsZXRlUnViYmVyQmFuZEZvck1h
aW5GcmFtZQotICAgICAgICAwLCAvLyBzYXZlRGF0YVRvRmlsZUluRG93bmxvYWRzRm9sZGVyCi0g
ICAgICAgIDAsIC8vIHNob3VsZEludGVycnVwdEphdmFTY3JpcHQKLSAgICAgICAgY3JlYXRlTmV3
UGFnZSwKLSAgICAgICAgbW91c2VEaWRNb3ZlT3ZlckVsZW1lbnQsCi0gICAgICAgIDAsIC8vIGRl
Y2lkZVBvbGljeUZvck5vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0Ci0gICAgICAgIDAsIC8v
IHVuYXZhaWxhYmxlUGx1Z2luQnV0dG9uQ2xpY2tlZAotICAgICAgICAwLCAvLyBzaG93Q29sb3JQ
aWNrZXIKLSAgICAgICAgMCwgLy8gaGlkZUNvbG9yUGlja2VyCi0gICAgICAgIDAsIC8vIHBsdWdp
bkxvYWRQb2xpY3kKLSAgICB9OwotICAgIFdLUGFnZVJlZiB3a1BhZ2UgPSB0b0FQSSh3ZWJraXRX
ZWJWaWV3QmFzZUdldFBhZ2UoV0VCS0lUX1dFQl9WSUVXX0JBU0Uod2ViVmlldykpKTsKLSAgICBX
S1BhZ2VTZXRQYWdlVUlDbGllbnQod2tQYWdlLCAmd2tVSUNsaWVudC5iYXNlKTsKKyAgICBXZWJQ
YWdlUHJveHkqIHBhZ2UgPSB3ZWJraXRXZWJWaWV3QmFzZUdldFBhZ2UoV0VCS0lUX1dFQl9WSUVX
X0JBU0Uod2ViVmlldykpOworICAgIHBhZ2UtPnNldFVJQ2xpZW50KHN0ZDo6bWFrZV91bmlxdWU8
VUlDbGllbnQ+KHdlYlZpZXcpKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmNwcAppbmRleCBhZWIyMWY2Li5mMTFjZDkxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmNw
cApAQCAtMjE4LDkgKzIxOCw5IEBAIHN0YXRpYyBnYm9vbGVhbiB3ZWJraXRXZWJWaWV3TG9hZEZh
aWwoV2ViS2l0V2ViVmlldyogd2ViVmlldywgV2ViS2l0TG9hZEV2ZW50LCBjCiAgICAgcmV0dXJu
IFRSVUU7CiB9CiAKLXN0YXRpYyBHdGtXaWRnZXQqIHdlYmtpdFdlYlZpZXdDcmVhdGUoV2ViS2l0
V2ViVmlldyopCitzdGF0aWMgR3RrV2lkZ2V0KiB3ZWJraXRXZWJWaWV3Q3JlYXRlKFdlYktpdFdl
YlZpZXcqLCBXZWJLaXROYXZpZ2F0aW9uQWN0aW9uKikKIHsKLSAgICByZXR1cm4gMDsKKyAgICBy
ZXR1cm4gbnVsbHB0cjsKIH0KIAogc3RhdGljIEd0a1dpZGdldCogd2Via2l0V2ViVmlld0NyZWF0
ZUphdmFTY3JpcHREaWFsb2coV2ViS2l0V2ViVmlldyogd2ViVmlldywgR3RrTWVzc2FnZVR5cGUg
dHlwZSwgR3RrQnV0dG9uc1R5cGUgYnV0dG9ucywgaW50IGRlZmF1bHRSZXNwb25zZSwgY29uc3Qg
Y2hhciogbWVzc2FnZSkKQEAgLTkxMSwxNCArOTExLDE4IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF93
ZWJfdmlld19jbGFzc19pbml0KFdlYktpdFdlYlZpZXdDbGFzcyogd2ViVmlld0NsYXNzKQogICAg
IC8qKgogICAgICAqIFdlYktpdFdlYlZpZXc6OmNyZWF0ZToKICAgICAgKiBAd2ViX3ZpZXc6IHRo
ZSAjV2ViS2l0V2ViVmlldyBvbiB3aGljaCB0aGUgc2lnbmFsIGlzIGVtaXR0ZWQKKyAgICAgKiBA
bmF2aWdhdGlvbjogYSAjV2ViS2l0TmF2aWdhdGlvbkFjdGlvbgogICAgICAqCiAgICAgICogRW1p
dHRlZCB3aGVuIHRoZSBjcmVhdGlvbiBvZiBhIG5ldyAjV2ViS2l0V2ViVmlldyBpcyByZXF1ZXN0
ZWQuCiAgICAgICogSWYgdGhpcyBzaWduYWwgaXMgaGFuZGxlZCB0aGUgc2lnbmFsIGhhbmRsZXIg
c2hvdWxkIHJldHVybiB0aGUKICAgICAgKiBuZXdseSBjcmVhdGVkICNXZWJLaXRXZWJWaWV3Lgog
ICAgICAqCisgICAgICogVGhlICNXZWJLaXROYXZpZ2F0aW9uQWN0aW9uIHBhcmFtZXRlciBjb250
YWlucyBpbmZvcm1hdGlvbiBhYm91dCB0aGUKKyAgICAgKiBuYXZpZ2F0aW9uIGFjdGlvbiB0aGF0
IHRyaWdnZXJlZCB0aGlzIHNpZ25hbC4KKyAgICAgKgogICAgICAqIFdoZW4gdXNpbmcgJVdFQktJ
VF9QUk9DRVNTX01PREVMX01VTFRJUExFX1NFQ09OREFSWV9QUk9DRVNTRVMKICAgICAgKiBwcm9j
ZXNzIG1vZGVsLCB0aGUgbmV3ICNXZWJLaXRXZWJWaWV3IHNob3VsZCBiZSByZWxhdGVkIHRvCi0g
ICAgICogQHdlYl92aWV3IHRvIHNoYXJlIHRoZSBzYW1lIHdlYiBwcm9jZXNzLCBzZWUgd2Via2l0
X3dlYl92aWV3X25ld193aXRoX3JlbGF0ZWRfdmlldworICAgICAqIEB3ZWJfdmlldyB0byBzaGFy
ZSB0aGUgc2FtZSB3ZWIgcHJvY2Vzcywgc2VlIHdlYmtpdF93ZWJfdmlld19uZXdfd2l0aF9yZWxh
dGVkX3ZpZXcoKQogICAgICAqIGZvciBtb3JlIGRldGFpbHMuCiAgICAgICoKICAgICAgKiBUaGUg
bmV3ICNXZWJLaXRXZWJWaWV3IHNob3VsZCBub3QgYmUgZGlzcGxheWVkIHRvIHRoZSB1c2VyCkBA
IC05MjcsMTQgKzkzMSwxNSBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfY2xhc3NfaW5p
dChXZWJLaXRXZWJWaWV3Q2xhc3MqIHdlYlZpZXdDbGFzcykKICAgICAgKiBSZXR1cm5zOiAodHJh
bnNmZXIgZnVsbCk6IGEgbmV3bHkgYWxsb2NhdGVkICNXZWJLaXRXZWJWaWV3IHdpZGdldAogICAg
ICAqICAgIG9yICVOVUxMIHRvIHByb3BhZ2F0ZSB0aGUgZXZlbnQgZnVydGhlci4KICAgICAgKi8K
LSAgICBzaWduYWxzW0NSRUFURV0gPQotICAgICAgICBnX3NpZ25hbF9uZXcoImNyZWF0ZSIsCi0g
ICAgICAgICAgICAgICAgICAgICBHX1RZUEVfRlJPTV9DTEFTUyh3ZWJWaWV3Q2xhc3MpLAotICAg
ICAgICAgICAgICAgICAgICAgR19TSUdOQUxfUlVOX0xBU1QsCi0gICAgICAgICAgICAgICAgICAg
ICBHX1NUUlVDVF9PRkZTRVQoV2ViS2l0V2ViVmlld0NsYXNzLCBjcmVhdGUpLAotICAgICAgICAg
ICAgICAgICAgICAgd2Via2l0V2ViVmlld0FjY3VtdWxhdG9yT2JqZWN0SGFuZGxlZCwgMCwKLSAg
ICAgICAgICAgICAgICAgICAgIHdlYmtpdF9tYXJzaGFsX09CSkVDVF9fVk9JRCwKLSAgICAgICAg
ICAgICAgICAgICAgIEdUS19UWVBFX1dJREdFVCwgMCk7CisgICAgc2lnbmFsc1tDUkVBVEVdID0g
Z19zaWduYWxfbmV3KAorICAgICAgICAiY3JlYXRlIiwKKyAgICAgICAgR19UWVBFX0ZST01fQ0xB
U1Mod2ViVmlld0NsYXNzKSwKKyAgICAgICAgR19TSUdOQUxfUlVOX0xBU1QsCisgICAgICAgIEdf
U1RSVUNUX09GRlNFVChXZWJLaXRXZWJWaWV3Q2xhc3MsIGNyZWF0ZSksCisgICAgICAgIHdlYmtp
dFdlYlZpZXdBY2N1bXVsYXRvck9iamVjdEhhbmRsZWQsIDAsCisgICAgICAgIGdfY2Nsb3N1cmVf
bWFyc2hhbF9nZW5lcmljLAorICAgICAgICBHVEtfVFlQRV9XSURHRVQsIDEsCisgICAgICAgIFdF
QktJVF9UWVBFX05BVklHQVRJT05fQUNUSU9OIHwgR19TSUdOQUxfVFlQRV9TVEFUSUNfU0NPUEUp
OwogCiAgICAgLyoqCiAgICAgICogV2ViS2l0V2ViVmlldzo6cmVhZHktdG8tc2hvdzoKQEAgLTE2
MjMsMTAgKzE2MjgsMTAgQEAgdm9pZCB3ZWJraXRXZWJWaWV3VXBkYXRlVVJJKFdlYktpdFdlYlZp
ZXcqIHdlYlZpZXcpCiAgICAgZ19vYmplY3Rfbm90aWZ5KEdfT0JKRUNUKHdlYlZpZXcpLCAidXJp
Iik7CiB9CiAKLVdlYlBhZ2VQcm94eSogd2Via2l0V2ViVmlld0NyZWF0ZU5ld1BhZ2UoV2ViS2l0
V2ViVmlldyogd2ViVmlldywgSW1tdXRhYmxlRGljdGlvbmFyeSogd2luZG93RmVhdHVyZXMpCitX
ZWJQYWdlUHJveHkqIHdlYmtpdFdlYlZpZXdDcmVhdGVOZXdQYWdlKFdlYktpdFdlYlZpZXcqIHdl
YlZpZXcsIGNvbnN0IFdpbmRvd0ZlYXR1cmVzJiB3aW5kb3dGZWF0dXJlcywgV2ViS2l0TmF2aWdh
dGlvbkFjdGlvbiogbmF2aWdhdGlvbikKIHsKICAgICBXZWJLaXRXZWJWaWV3KiBuZXdXZWJWaWV3
OwotICAgIGdfc2lnbmFsX2VtaXQod2ViVmlldywgc2lnbmFsc1tDUkVBVEVdLCAwLCAmbmV3V2Vi
Vmlldyk7CisgICAgZ19zaWduYWxfZW1pdCh3ZWJWaWV3LCBzaWduYWxzW0NSRUFURV0sIDAsIG5h
dmlnYXRpb24sICZuZXdXZWJWaWV3KTsKICAgICBpZiAoIW5ld1dlYlZpZXcpCiAgICAgICAgIHJl
dHVybiAwOwogCkBAIC0xNjk2LDkgKzE3MDEsOSBAQCB2b2lkIHdlYmtpdFdlYlZpZXdNYWtlUGVy
bWlzc2lvblJlcXVlc3QoV2ViS2l0V2ViVmlldyogd2ViVmlldywgV2ViS2l0UGVybWlzc2lvbgog
ICAgIGdfc2lnbmFsX2VtaXQod2ViVmlldywgc2lnbmFsc1tQRVJNSVNTSU9OX1JFUVVFU1RdLCAw
LCByZXF1ZXN0LCAmcmV0dXJuVmFsdWUpOwogfQogCi12b2lkIHdlYmtpdFdlYlZpZXdNb3VzZVRh
cmdldENoYW5nZWQoV2ViS2l0V2ViVmlldyogd2ViVmlldywgV2ViSGl0VGVzdFJlc3VsdCogaGl0
VGVzdFJlc3VsdCwgdW5zaWduZWQgbW9kaWZpZXJzKQordm9pZCB3ZWJraXRXZWJWaWV3TW91c2VU
YXJnZXRDaGFuZ2VkKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIGNvbnN0IFdlYkhpdFRlc3RSZXN1
bHQ6OkRhdGEmIGhpdFRlc3RSZXN1bHQsIHVuc2lnbmVkIG1vZGlmaWVycykKIHsKLSAgICB3ZWJr
aXRXZWJWaWV3QmFzZVNldFRvb2x0aXBBcmVhKFdFQktJVF9XRUJfVklFV19CQVNFKHdlYlZpZXcp
LCBoaXRUZXN0UmVzdWx0LT5lbGVtZW50Qm91bmRpbmdCb3goKSk7CisgICAgd2Via2l0V2ViVmll
d0Jhc2VTZXRUb29sdGlwQXJlYShXRUJLSVRfV0VCX1ZJRVdfQkFTRSh3ZWJWaWV3KSwgaGl0VGVz
dFJlc3VsdC5lbGVtZW50Qm91bmRpbmdCb3gpOwogCiAgICAgV2ViS2l0V2ViVmlld1ByaXZhdGUq
IHByaXYgPSB3ZWJWaWV3LT5wcml2OwogICAgIGlmIChwcml2LT5tb3VzZVRhcmdldEhpdFRlc3RS
ZXN1bHQKQEAgLTE4NTAsNyArMTg1NSwxOCBAQCB2b2lkIHdlYmtpdFdlYlZpZXdQb3B1bGF0ZUNv
bnRleHRNZW51KFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIEFQSTo6QXJyYXkqIHByb3BvcwogICAg
IGlmICh3ZWJIaXRUZXN0UmVzdWx0LT5pc0NvbnRlbnRFZGl0YWJsZSgpKQogICAgICAgICB3ZWJr
aXRXZWJWaWV3Q3JlYXRlQW5kQXBwZW5kSW5wdXRNZXRob2RzTWVudUl0ZW0od2ViVmlldywgY29u
dGV4dE1lbnUuZ2V0KCkpOwogCi0gICAgR1JlZlB0cjxXZWJLaXRIaXRUZXN0UmVzdWx0PiBoaXRU
ZXN0UmVzdWx0ID0gYWRvcHRHUmVmKHdlYmtpdEhpdFRlc3RSZXN1bHRDcmVhdGUod2ViSGl0VGVz
dFJlc3VsdCkpOworICAgIC8vIEZJWE1FOiB3ZSBzaG91bGQgdXNlIGEgY3VzdG9tIENvbnRleHRN
ZW51Y2xpZW50IGF0IHNvbWUgcG9pbnQuCisgICAgV2ViSGl0VGVzdFJlc3VsdDo6RGF0YSBkYXRh
OworICAgIGRhdGEuYWJzb2x1dGVJbWFnZVVSTCA9IHdlYkhpdFRlc3RSZXN1bHQtPmFic29sdXRl
SW1hZ2VVUkwoKTsKKyAgICBkYXRhLmFic29sdXRlTGlua1VSTCA9IHdlYkhpdFRlc3RSZXN1bHQt
PmFic29sdXRlTGlua1VSTCgpOworICAgIGRhdGEuYWJzb2x1dGVNZWRpYVVSTCA9IHdlYkhpdFRl
c3RSZXN1bHQtPmFic29sdXRlTWVkaWFVUkwoKTsKKyAgICBkYXRhLmxpbmtMYWJlbCA9IHdlYkhp
dFRlc3RSZXN1bHQtPmxpbmtMYWJlbCgpOworICAgIGRhdGEubGlua1RpdGxlID0gd2ViSGl0VGVz
dFJlc3VsdC0+bGlua1RpdGxlKCk7CisgICAgZGF0YS5pc0NvbnRlbnRFZGl0YWJsZSA9IHdlYkhp
dFRlc3RSZXN1bHQtPmlzQ29udGVudEVkaXRhYmxlKCk7CisgICAgZGF0YS5lbGVtZW50Qm91bmRp
bmdCb3ggPSB3ZWJIaXRUZXN0UmVzdWx0LT5lbGVtZW50Qm91bmRpbmdCb3goKTsKKyAgICBkYXRh
LmlzU2Nyb2xsYmFyID0gd2ViSGl0VGVzdFJlc3VsdC0+aXNTY3JvbGxiYXIoKTsKKworICAgIEdS
ZWZQdHI8V2ViS2l0SGl0VGVzdFJlc3VsdD4gaGl0VGVzdFJlc3VsdCA9IGFkb3B0R1JlZih3ZWJr
aXRIaXRUZXN0UmVzdWx0Q3JlYXRlKGRhdGEpKTsKICAgICBHVW5pcXVlUHRyPEdka0V2ZW50PiBj
b250ZXh0TWVudUV2ZW50KHdlYmtpdFdlYlZpZXdCYXNlVGFrZUNvbnRleHRNZW51RXZlbnQod2Vi
Vmlld0Jhc2UpKTsKIAogICAgIGdib29sZWFuIHJldHVyblZhbHVlOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5oIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5oCmluZGV4IDk1YzU0M2IuLjYx
OThlMTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktp
dFdlYlZpZXcuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRX
ZWJWaWV3LmgKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdEZvcndh
cmREZWNsYXJhdGlvbnMuaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdEhpdFRlc3RSZXN1bHQu
aD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdEphdmFzY3JpcHRSZXN1bHQuaD4KKyNpbmNsdWRl
IDx3ZWJraXQyL1dlYktpdE5hdmlnYXRpb25BY3Rpb24uaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dl
YktpdFBlcm1pc3Npb25SZXF1ZXN0Lmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRQb2xpY3lE
ZWNpc2lvbi5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0U2NyaXB0RGlhbG9nLmg+CkBAIC0y
MDcsNyArMjA4LDggQEAgc3RydWN0IF9XZWJLaXRXZWJWaWV3Q2xhc3MgewogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgICAgICAgICAg
ICAgICAgICpmYWlsaW5nX3VyaSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEdFcnJvciAgICAgICAgICAgICAgICAgICAgICAqZXJyb3IpOwogCi0gICAg
R3RrV2lkZ2V0ICooKiBjcmVhdGUpICAgICAgICAgICAgICAgICAgICAgIChXZWJLaXRXZWJWaWV3
ICAgICAgICAgICAgICAgKndlYl92aWV3KTsKKyAgICBHdGtXaWRnZXQgKigqIGNyZWF0ZSkgICAg
ICAgICAgICAgICAgICAgICAgKFdlYktpdFdlYlZpZXcgICAgICAgICAgICAgICAqd2ViX3ZpZXcs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJLaXRO
YXZpZ2F0aW9uQWN0aW9uICAgICAgKm5hdmlnYXRpb24pOwogICAgIHZvaWQgICAgICAgKCogcmVh
ZHlfdG9fc2hvdykgICAgICAgICAgICAgICAoV2ViS2l0V2ViVmlldyAgICAgICAgICAgICAgICp3
ZWJfdmlldyk7CiAgICAgdm9pZCAgICAgICAoKiBydW5fYXNfbW9kYWwpICAgICAgICAgICAgICAg
IChXZWJLaXRXZWJWaWV3ICAgICAgICAgICAgICAgKndlYl92aWV3KTsKICAgICB2b2lkICAgICAg
ICgqIGNsb3NlKSAgICAgICAgICAgICAgICAgICAgICAgKFdlYktpdFdlYlZpZXcgICAgICAgICAg
ICAgICAqd2ViX3ZpZXcpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0V2ViVmlld1ByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL1dlYktpdFdlYlZpZXdQcml2YXRlLmgKaW5kZXggMTE1OTFmZi4uNWY2OTQxYyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld1By
aXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJW
aWV3UHJpdmF0ZS5oCkBAIC0yNyw2ICsyNyw3IEBACiAjaWZuZGVmIFdlYktpdFdlYlZpZXdQcml2
YXRlX2gKICNkZWZpbmUgV2ViS2l0V2ViVmlld1ByaXZhdGVfaAogCisjaW5jbHVkZSAiV2ViSGl0
VGVzdFJlc3VsdC5oIgogI2luY2x1ZGUgIldlYkltYWdlLmgiCiAjaW5jbHVkZSAiV2ViS2l0V2Vi
Vmlldy5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KQEAgLTM3LDcgKzM4LDcgQEAg
dm9pZCB3ZWJraXRXZWJWaWV3TG9hZEZhaWxlZFdpdGhUTFNFcnJvcnMoV2ViS2l0V2ViVmlldyos
IGNvbnN0IGNoYXIqIGZhaWxpbmdVUkkKIHZvaWQgd2Via2l0V2ViVmlld1NldEVzdGltYXRlZExv
YWRQcm9ncmVzcyhXZWJLaXRXZWJWaWV3KiwgZG91YmxlIGVzdGltYXRlZExvYWRQcm9ncmVzcyk7
CiB2b2lkIHdlYmtpdFdlYlZpZXdTZXRUaXRsZShXZWJLaXRXZWJWaWV3KiwgY29uc3QgQ1N0cmlu
ZyYpOwogdm9pZCB3ZWJraXRXZWJWaWV3VXBkYXRlVVJJKFdlYktpdFdlYlZpZXcqKTsKLVdlYktp
dDo6V2ViUGFnZVByb3h5KiB3ZWJraXRXZWJWaWV3Q3JlYXRlTmV3UGFnZShXZWJLaXRXZWJWaWV3
KiwgV2ViS2l0OjpJbW11dGFibGVEaWN0aW9uYXJ5KiB3aW5kb3dGZWF0dXJlcyk7CitXZWJLaXQ6
OldlYlBhZ2VQcm94eSogd2Via2l0V2ViVmlld0NyZWF0ZU5ld1BhZ2UoV2ViS2l0V2ViVmlldyos
IGNvbnN0IFdlYkNvcmU6OldpbmRvd0ZlYXR1cmVzJiwgV2ViS2l0TmF2aWdhdGlvbkFjdGlvbiop
Owogdm9pZCB3ZWJraXRXZWJWaWV3UmVhZHlUb1Nob3dQYWdlKFdlYktpdFdlYlZpZXcqKTsKIHZv
aWQgd2Via2l0V2ViVmlld1J1bkFzTW9kYWwoV2ViS2l0V2ViVmlldyopOwogdm9pZCB3ZWJraXRX
ZWJWaWV3Q2xvc2VQYWdlKFdlYktpdFdlYlZpZXcqKTsKQEAgLTQ2LDcgKzQ3LDcgQEAgYm9vbCB3
ZWJraXRXZWJWaWV3UnVuSmF2YVNjcmlwdENvbmZpcm0oV2ViS2l0V2ViVmlldyosIGNvbnN0IENT
dHJpbmcmIG1lc3NhZ2UpOwogQ1N0cmluZyB3ZWJraXRXZWJWaWV3UnVuSmF2YVNjcmlwdFByb21w
dChXZWJLaXRXZWJWaWV3KiwgY29uc3QgQ1N0cmluZyYgbWVzc2FnZSwgY29uc3QgQ1N0cmluZyYg
ZGVmYXVsdFRleHQpOwogdm9pZCB3ZWJraXRXZWJWaWV3TWFrZVBlcm1pc3Npb25SZXF1ZXN0KFdl
YktpdFdlYlZpZXcqLCBXZWJLaXRQZXJtaXNzaW9uUmVxdWVzdCopOwogdm9pZCB3ZWJraXRXZWJW
aWV3TWFrZVBvbGljeURlY2lzaW9uKFdlYktpdFdlYlZpZXcqLCBXZWJLaXRQb2xpY3lEZWNpc2lv
blR5cGUsIFdlYktpdFBvbGljeURlY2lzaW9uKik7Ci12b2lkIHdlYmtpdFdlYlZpZXdNb3VzZVRh
cmdldENoYW5nZWQoV2ViS2l0V2ViVmlldyosIFdlYktpdDo6V2ViSGl0VGVzdFJlc3VsdCosIHVu
c2lnbmVkIG1vZGlmaWVycyk7Cit2b2lkIHdlYmtpdFdlYlZpZXdNb3VzZVRhcmdldENoYW5nZWQo
V2ViS2l0V2ViVmlldyosIGNvbnN0IFdlYktpdDo6V2ViSGl0VGVzdFJlc3VsdDo6RGF0YSYsIHVu
c2lnbmVkIG1vZGlmaWVycyk7CiB2b2lkIHdlYmtpdFdlYlZpZXdQcmludEZyYW1lKFdlYktpdFdl
YlZpZXcqLCBXZWJLaXQ6OldlYkZyYW1lUHJveHkqKTsKIHZvaWQgd2Via2l0V2ViVmlld1Jlc291
cmNlTG9hZFN0YXJ0ZWQoV2ViS2l0V2ViVmlldyosIFdlYktpdDo6V2ViRnJhbWVQcm94eSosIHVp
bnQ2NF90IHJlc291cmNlSWRlbnRpZmllciwgV2ViS2l0VVJJUmVxdWVzdCopOwogdm9pZCB3ZWJr
aXRXZWJWaWV3UnVuRmlsZUNob29zZXJSZXF1ZXN0KFdlYktpdFdlYlZpZXcqLCBXZWJLaXRGaWxl
Q2hvb3NlclJlcXVlc3QqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL1dlYktpdFdpbmRvd1Byb3BlcnRpZXMuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvV2ViS2l0V2luZG93UHJvcGVydGllcy5jcHAKaW5kZXggYTQwZTZkYi4uYmFj
ODhiNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0
V2luZG93UHJvcGVydGllcy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0V2luZG93UHJvcGVydGllcy5jcHAKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRl
ICJXZWJLaXRQcml2YXRlLmgiCiAjaW5jbHVkZSAiV2ViS2l0V2luZG93UHJvcGVydGllc1ByaXZh
dGUuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0ludFJlY3QuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1dp
bmRvd0ZlYXR1cmVzLmg+CiAjaW5jbHVkZSA8Z2xpYi9naTE4bi1saWIuaD4KIAogdXNpbmcgbmFt
ZXNwYWNlIFdlYktpdDsKQEAgLTM3NCw1NCArMzc1LDI2IEBAIHZvaWQgd2Via2l0V2luZG93UHJv
cGVydGllc1NldEZ1bGxzY3JlZW4oV2ViS2l0V2luZG93UHJvcGVydGllcyogd2luZG93UHJvcGVy
dGllCiAgICAgZ19vYmplY3Rfbm90aWZ5KEdfT0JKRUNUKHdpbmRvd1Byb3BlcnRpZXMpLCAiZnVs
bHNjcmVlbiIpOwogfQogCi12b2lkIHdlYmtpdFdpbmRvd1Byb3BlcnRpZXNVcGRhdGVGcm9tV2Vi
V2luZG93RmVhdHVyZXMoV2ViS2l0V2luZG93UHJvcGVydGllcyogd2luZG93UHJvcGVydGllcywg
SW1tdXRhYmxlRGljdGlvbmFyeSogZmVhdHVyZXMpCit2b2lkIHdlYmtpdFdpbmRvd1Byb3BlcnRp
ZXNVcGRhdGVGcm9tV2ViV2luZG93RmVhdHVyZXMoV2ViS2l0V2luZG93UHJvcGVydGllcyogd2lu
ZG93UHJvcGVydGllcywgY29uc3QgV2luZG93RmVhdHVyZXMmIHdpbmRvd0ZlYXR1cmVzKQogewog
ICAgIEdka1JlY3RhbmdsZSBnZW9tZXRyeSA9IHdpbmRvd1Byb3BlcnRpZXMtPnByaXYtPmdlb21l
dHJ5OwotCi0gICAgQVBJOjpEb3VibGUqIGRvdWJsZVZhbHVlID0gc3RhdGljX2Nhc3Q8QVBJOjpE
b3VibGUqPihmZWF0dXJlcy0+Z2V0KCJ4IikpOwotICAgIGlmIChkb3VibGVWYWx1ZSkKLSAgICAg
ICAgZ2VvbWV0cnkueCA9IGRvdWJsZVZhbHVlLT52YWx1ZSgpOwotCi0gICAgZG91YmxlVmFsdWUg
PSBzdGF0aWNfY2FzdDxBUEk6OkRvdWJsZSo+KGZlYXR1cmVzLT5nZXQoInkiKSk7Ci0gICAgaWYg
KGRvdWJsZVZhbHVlKQotICAgICAgICBnZW9tZXRyeS55ID0gZG91YmxlVmFsdWUtPnZhbHVlKCk7
Ci0KLSAgICBkb3VibGVWYWx1ZSA9IHN0YXRpY19jYXN0PEFQSTo6RG91YmxlKj4oZmVhdHVyZXMt
PmdldCgid2lkdGgiKSk7Ci0gICAgaWYgKGRvdWJsZVZhbHVlKQotICAgICAgICBnZW9tZXRyeS53
aWR0aCA9IGRvdWJsZVZhbHVlLT52YWx1ZSgpOwotCi0gICAgZG91YmxlVmFsdWUgPSBzdGF0aWNf
Y2FzdDxBUEk6OkRvdWJsZSo+KGZlYXR1cmVzLT5nZXQoImhlaWdodCIpKTsKLSAgICBpZiAoZG91
YmxlVmFsdWUpCi0gICAgICAgIGdlb21ldHJ5LmhlaWdodCA9IGRvdWJsZVZhbHVlLT52YWx1ZSgp
OworICAgIGlmICh3aW5kb3dGZWF0dXJlcy54U2V0KQorICAgICAgICBnZW9tZXRyeS54ID0gd2lu
ZG93RmVhdHVyZXMueDsKKyAgICBpZiAod2luZG93RmVhdHVyZXMueVNldCkKKyAgICAgICAgZ2Vv
bWV0cnkueSA9IHdpbmRvd0ZlYXR1cmVzLnk7CisgICAgaWYgKHdpbmRvd0ZlYXR1cmVzLndpZHRo
U2V0KQorICAgICAgICBnZW9tZXRyeS53aWR0aCA9IHdpbmRvd0ZlYXR1cmVzLndpZHRoOworICAg
IGlmICh3aW5kb3dGZWF0dXJlcy5oZWlnaHRTZXQpCisgICAgICAgIGdlb21ldHJ5LmhlaWdodCA9
IHdpbmRvd0ZlYXR1cmVzLmhlaWdodDsKICAgICB3ZWJraXRXaW5kb3dQcm9wZXJ0aWVzU2V0R2Vv
bWV0cnkod2luZG93UHJvcGVydGllcywgJmdlb21ldHJ5KTsKIAotICAgIEFQSTo6Qm9vbGVhbiog
Ym9vbGVhblZhbHVlID0gc3RhdGljX2Nhc3Q8QVBJOjpCb29sZWFuKj4oZmVhdHVyZXMtPmdldCgi
bWVudUJhclZpc2libGUiKSk7Ci0gICAgaWYgKGJvb2xlYW5WYWx1ZSkKLSAgICAgICAgd2Via2l0
V2luZG93UHJvcGVydGllc1NldE1lbnViYXJWaXNpYmxlKHdpbmRvd1Byb3BlcnRpZXMsIGJvb2xl
YW5WYWx1ZS0+dmFsdWUoKSk7Ci0KLSAgICBib29sZWFuVmFsdWUgPSBzdGF0aWNfY2FzdDxBUEk6
OkJvb2xlYW4qPihmZWF0dXJlcy0+Z2V0KCJzdGF0dXNCYXJWaXNpYmxlIikpOwotICAgIGlmIChi
b29sZWFuVmFsdWUpCi0gICAgICAgIHdlYmtpdFdpbmRvd1Byb3BlcnRpZXNTZXRTdGF0dXNiYXJW
aXNpYmxlKHdpbmRvd1Byb3BlcnRpZXMsIGJvb2xlYW5WYWx1ZS0+dmFsdWUoKSk7Ci0KLSAgICBi
b29sZWFuVmFsdWUgPSBzdGF0aWNfY2FzdDxBUEk6OkJvb2xlYW4qPihmZWF0dXJlcy0+Z2V0KCJ0
b29sQmFyVmlzaWJsZSIpKTsKLSAgICBpZiAoYm9vbGVhblZhbHVlKQotICAgICAgICB3ZWJraXRX
aW5kb3dQcm9wZXJ0aWVzU2V0VG9vbGJhclZpc2libGUod2luZG93UHJvcGVydGllcywgYm9vbGVh
blZhbHVlLT52YWx1ZSgpKTsKLQotICAgIGJvb2xlYW5WYWx1ZSA9IHN0YXRpY19jYXN0PEFQSTo6
Qm9vbGVhbio+KGZlYXR1cmVzLT5nZXQoImxvY2F0aW9uQmFyVmlzaWJsZSIpKTsKLSAgICBpZiAo
Ym9vbGVhblZhbHVlKQotICAgICAgICB3ZWJraXRXaW5kb3dQcm9wZXJ0aWVzU2V0TG9jYXRpb25i
YXJWaXNpYmxlKHdpbmRvd1Byb3BlcnRpZXMsIGJvb2xlYW5WYWx1ZS0+dmFsdWUoKSk7Ci0KLSAg
ICBib29sZWFuVmFsdWUgPSBzdGF0aWNfY2FzdDxBUEk6OkJvb2xlYW4qPihmZWF0dXJlcy0+Z2V0
KCJzY3JvbGxiYXJzVmlzaWJsZSIpKTsKLSAgICBpZiAoYm9vbGVhblZhbHVlKQotICAgICAgICB3
ZWJraXRXaW5kb3dQcm9wZXJ0aWVzU2V0U2Nyb2xsYmFyc1Zpc2libGUod2luZG93UHJvcGVydGll
cywgYm9vbGVhblZhbHVlLT52YWx1ZSgpKTsKLQotICAgIGJvb2xlYW5WYWx1ZSA9IHN0YXRpY19j
YXN0PEFQSTo6Qm9vbGVhbio+KGZlYXR1cmVzLT5nZXQoInJlc2l6YWJsZSIpKTsKLSAgICBpZiAo
Ym9vbGVhblZhbHVlKQotICAgICAgICB3ZWJraXRXaW5kb3dQcm9wZXJ0aWVzU2V0UmVzaXphYmxl
KHdpbmRvd1Byb3BlcnRpZXMsIGJvb2xlYW5WYWx1ZS0+dmFsdWUoKSk7Ci0KLSAgICBib29sZWFu
VmFsdWUgPSBzdGF0aWNfY2FzdDxBUEk6OkJvb2xlYW4qPihmZWF0dXJlcy0+Z2V0KCJmdWxsc2Ny
ZWVuIikpOwotICAgIGlmIChib29sZWFuVmFsdWUpCi0gICAgICAgIHdlYmtpdFdpbmRvd1Byb3Bl
cnRpZXNTZXRGdWxsc2NyZWVuKHdpbmRvd1Byb3BlcnRpZXMsIGJvb2xlYW5WYWx1ZS0+dmFsdWUo
KSk7CisgICAgd2Via2l0V2luZG93UHJvcGVydGllc1NldE1lbnViYXJWaXNpYmxlKHdpbmRvd1By
b3BlcnRpZXMsIHdpbmRvd0ZlYXR1cmVzLm1lbnVCYXJWaXNpYmxlKTsKKyAgICB3ZWJraXRXaW5k
b3dQcm9wZXJ0aWVzU2V0U3RhdHVzYmFyVmlzaWJsZSh3aW5kb3dQcm9wZXJ0aWVzLCB3aW5kb3dG
ZWF0dXJlcy5zdGF0dXNCYXJWaXNpYmxlKTsKKyAgICB3ZWJraXRXaW5kb3dQcm9wZXJ0aWVzU2V0
VG9vbGJhclZpc2libGUod2luZG93UHJvcGVydGllcywgd2luZG93RmVhdHVyZXMudG9vbEJhclZp
c2libGUpOworICAgIHdlYmtpdFdpbmRvd1Byb3BlcnRpZXNTZXRMb2NhdGlvbmJhclZpc2libGUo
d2luZG93UHJvcGVydGllcywgd2luZG93RmVhdHVyZXMubG9jYXRpb25CYXJWaXNpYmxlKTsKKyAg
ICB3ZWJraXRXaW5kb3dQcm9wZXJ0aWVzU2V0U2Nyb2xsYmFyc1Zpc2libGUod2luZG93UHJvcGVy
dGllcywgd2luZG93RmVhdHVyZXMuc2Nyb2xsYmFyc1Zpc2libGUpOworICAgIHdlYmtpdFdpbmRv
d1Byb3BlcnRpZXNTZXRSZXNpemFibGUod2luZG93UHJvcGVydGllcywgd2luZG93RmVhdHVyZXMu
cmVzaXphYmxlKTsKKyAgICB3ZWJraXRXaW5kb3dQcm9wZXJ0aWVzU2V0RnVsbHNjcmVlbih3aW5k
b3dQcm9wZXJ0aWVzLCB3aW5kb3dGZWF0dXJlcy5mdWxsc2NyZWVuKTsKIH0KIAogLyoqCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXaW5kb3dQcm9w
ZXJ0aWVzUHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0
V2luZG93UHJvcGVydGllc1ByaXZhdGUuaAppbmRleCA4ZWMxN2I0Li4wNWU0YjliIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXaW5kb3dQcm9wZXJ0
aWVzUHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktp
dFdpbmRvd1Byb3BlcnRpZXNQcml2YXRlLmgKQEAgLTMxLDcgKzMxLDcgQEAKICNpbmNsdWRlICJX
ZWJLaXRXaW5kb3dQcm9wZXJ0aWVzLmgiCiAKIFdlYktpdFdpbmRvd1Byb3BlcnRpZXMqIHdlYmtp
dFdpbmRvd1Byb3BlcnRpZXNDcmVhdGUoKTsKLXZvaWQgd2Via2l0V2luZG93UHJvcGVydGllc1Vw
ZGF0ZUZyb21XZWJXaW5kb3dGZWF0dXJlcyhXZWJLaXRXaW5kb3dQcm9wZXJ0aWVzKiwgV2ViS2l0
OjpJbW11dGFibGVEaWN0aW9uYXJ5KiBmZWF0dXJlcyk7Cit2b2lkIHdlYmtpdFdpbmRvd1Byb3Bl
cnRpZXNVcGRhdGVGcm9tV2ViV2luZG93RmVhdHVyZXMoV2ViS2l0V2luZG93UHJvcGVydGllcyos
IGNvbnN0IFdlYkNvcmU6OldpbmRvd0ZlYXR1cmVzJik7CiB2b2lkIHdlYmtpdFdpbmRvd1Byb3Bl
cnRpZXNTZXRHZW9tZXRyeShXZWJLaXRXaW5kb3dQcm9wZXJ0aWVzKiwgR2RrUmVjdGFuZ2xlKik7
CiB2b2lkIHdlYmtpdFdpbmRvd1Byb3BlcnRpZXNTZXRUb29sYmFyVmlzaWJsZShXZWJLaXRXaW5k
b3dQcm9wZXJ0aWVzKiwgYm9vbCB0b29sYmFyc1Zpc2libGUpOwogdm9pZCB3ZWJraXRXaW5kb3dQ
cm9wZXJ0aWVzU2V0TWVudWJhclZpc2libGUoV2ViS2l0V2luZG93UHJvcGVydGllcyosIGJvb2wg
bWVudUJhclZpc2libGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvZG9jcy93ZWJraXQyZ3RrLWRvY3Muc2dtbCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1kb2NzLnNnbWwKaW5kZXggZTNjZjlhNi4uMWI3MTU2
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJr
aXQyZ3RrLWRvY3Muc2dtbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9k
b2NzL3dlYmtpdDJndGstZG9jcy5zZ21sCkBAIC0yMyw2ICsyMyw3IEBACiAgICAgPHhpOmluY2x1
ZGUgaHJlZj0ieG1sL1dlYktpdERvd25sb2FkLnhtbCIvPgogICAgIDx4aTppbmNsdWRlIGhyZWY9
InhtbC9XZWJLaXRQZXJtaXNzaW9uUmVxdWVzdC54bWwiLz4KICAgICA8eGk6aW5jbHVkZSBocmVm
PSJ4bWwvV2ViS2l0R2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdC54bWwiLz4KKyAgICA8eGk6
aW5jbHVkZSBocmVmPSJ4bWwvV2ViS2l0TmF2aWdhdGlvbkFjdGlvbi54bWwiLz4KICAgICA8eGk6
aW5jbHVkZSBocmVmPSJ4bWwvV2ViS2l0UG9saWN5RGVjaXNpb24ueG1sIi8+CiAgICAgPHhpOmlu
Y2x1ZGUgaHJlZj0ieG1sL1dlYktpdE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbi54bWwiLz4KICAg
ICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvV2ViS2l0UmVzcG9uc2VQb2xpY3lEZWNpc2lvbi54bWwi
Lz4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Vi
a2l0Mmd0ay1zZWN0aW9ucy50eHQgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9k
b2NzL3dlYmtpdDJndGstc2VjdGlvbnMudHh0CmluZGV4IGEwOThhMDAuLmQzYTc3ZWEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1z
ZWN0aW9ucy50eHQKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93
ZWJraXQyZ3RrLXNlY3Rpb25zLnR4dApAQCAtNTI0LDYgKzUyNCwyNCBAQCB3ZWJraXRfZ2VvbG9j
YXRpb25fcGVybWlzc2lvbl9yZXF1ZXN0X2dldF90eXBlCiA8L1NFQ1RJT04+CiAKIDxTRUNUSU9O
PgorPEZJTEU+V2ViS2l0TmF2aWdhdGlvbkFjdGlvbjwvRklMRT4KK1dlYktpdE5hdmlnYXRpb25B
Y3Rpb24KK3dlYmtpdF9uYXZpZ2F0aW9uX2FjdGlvbl9jb3B5Cit3ZWJraXRfbmF2aWdhdGlvbl9h
Y3Rpb25fZnJlZQord2Via2l0X25hdmlnYXRpb25fYWN0aW9uX2dldF9uYXZpZ2F0aW9uX3R5cGUK
K3dlYmtpdF9uYXZpZ2F0aW9uX2FjdGlvbl9nZXRfbW91c2VfYnV0dG9uCit3ZWJraXRfbmF2aWdh
dGlvbl9hY3Rpb25fZ2V0X21vZGlmaWVycword2Via2l0X25hdmlnYXRpb25fYWN0aW9uX2dldF9y
ZXF1ZXN0Cit3ZWJraXRfbmF2aWdhdGlvbl9hY3Rpb25faXNfdXNlcl9nZXN0dXJlCisKKzxTVUJT
RUNUSU9OIFN0YW5kYXJkPgorV0VCS0lUX1RZUEVfTkFWSUdBVElPTl9BQ1RJT04KKworPFNVQlNF
Q1RJT04gUHJpdmF0ZT4KK3dlYmtpdF9uYXZpZ2F0aW9uX2FjdGlvbl9nZXRfdHlwZQorPC9TRUNU
SU9OPgorCis8U0VDVElPTj4KIDxGSUxFPldlYktpdFBvbGljeURlY2lzaW9uPC9GSUxFPgogV2Vi
S2l0UG9saWN5RGVjaXNpb24KIHdlYmtpdF9wb2xpY3lfZGVjaXNpb25fZG93bmxvYWQKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdDIuaCBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdDIuaAppbmRleCBjMTg1MzhhLi40NjQ5
MGEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay93ZWJraXQy
LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvd2Via2l0Mi5oCkBAIC00
OSw2ICs0OSw3IEBACiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRIaXRUZXN0UmVzdWx0Lmg+CiAj
aW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRKYXZhc2NyaXB0UmVzdWx0Lmg+CiAjaW5jbHVkZSA8d2Vi
a2l0Mi9XZWJLaXRNaW1lSW5mby5oPgorI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0TmF2aWdhdGlv
bkFjdGlvbi5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0TmF2aWdhdGlvblBvbGljeURlY2lz
aW9uLmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRQZXJtaXNzaW9uUmVxdWVzdC5oPgogI2lu
Y2x1ZGUgPHdlYmtpdDIvV2ViS2l0UGx1Z2luLmg+CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VM
b2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggMWY5ZmIwNC4uODMzMjg0ZSAxMDA2NDQKLS0tIGEv
VG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIzIEBACisy
MDE0LTA2LTEwICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KKwor
ICAgICAgICBbR1RLXSBXZWJLaXRXZWJWaWV3OjpjcmVhdGUgc2hvdWxkIHJlY2VpdmUgaW5mb3Jt
YXRpb24gYWJvdXQgdGhlIG5hdmlnYXRpb24gYWN0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzM2ODAKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgdW5pdCB0ZXN0IHRvIGNoZWNrIHRoZSBXZWJL
aXROYXZpZ2F0aW9uQWN0aW9uIHBhc3NlZCB0bworICAgICAgICBXZWJLaXRXZWJWaWV3OjpjcmVh
dGUgY2FsbGJhY2suCisKKyAgICAgICAgKiBNaW5pQnJvd3Nlci9ndGsvQnJvd3NlcldpbmRvdy5j
OgorICAgICAgICAod2ViVmlld0NyZWF0ZSk6IEFkZCBXZWJLaXROYXZpZ2F0aW9uQWN0aW9uIHBh
cmFtZXRlci4KKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdE11
bHRpcHJvY2Vzcy5jcHA6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3Rr
L1Rlc3RQcmludGluZy5jcHA6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQy
R3RrL1Rlc3RVSUNsaWVudC5jcHA6CisgICAgICAgICh0ZXN0V2ViVmlld0NyZWF0ZU5hdmlnYXRp
b25EYXRhKToKKyAgICAgICAgKGJlZm9yZUFsbCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXQyR3RrL1Rlc3RXZWJLaXRQb2xpY3lDbGllbnQuY3BwOgorICAgICAgICAoY3Jl
YXRlQ2FsbGJhY2spOgorCiAyMDE0LTA2LTA2ICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJA
YXBwbGUuY29tPgogCiAgICAgICAgIDMyLWJpdCBidWlsZCBmaXguCmRpZmYgLS1naXQgYS9Ub29s
cy9NaW5pQnJvd3Nlci9ndGsvQnJvd3NlcldpbmRvdy5jIGIvVG9vbHMvTWluaUJyb3dzZXIvZ3Rr
L0Jyb3dzZXJXaW5kb3cuYwppbmRleCA0Mzc0NzczLi42NWIwOTZjIDEwMDY0NAotLS0gYS9Ub29s
cy9NaW5pQnJvd3Nlci9ndGsvQnJvd3NlcldpbmRvdy5jCisrKyBiL1Rvb2xzL01pbmlCcm93c2Vy
L2d0ay9Ccm93c2VyV2luZG93LmMKQEAgLTM0OCw3ICszNDgsNyBAQCBzdGF0aWMgZ2Jvb2xlYW4g
d2ViVmlld0xlYXZlRnVsbFNjcmVlbihXZWJLaXRXZWJWaWV3ICp3ZWJWaWV3LCBCcm93c2VyV2lu
ZG93ICp3aQogICAgIHJldHVybiBGQUxTRTsKIH0KIAotc3RhdGljIEd0a1dpZGdldCAqd2ViVmll
d0NyZWF0ZShXZWJLaXRXZWJWaWV3ICp3ZWJWaWV3LCBCcm93c2VyV2luZG93ICp3aW5kb3cpCitz
dGF0aWMgR3RrV2lkZ2V0ICp3ZWJWaWV3Q3JlYXRlKFdlYktpdFdlYlZpZXcgKndlYlZpZXcsIFdl
YktpdE5hdmlnYXRpb25BY3Rpb24gKm5hdmlnYXRpb24sIEJyb3dzZXJXaW5kb3cgKndpbmRvdykK
IHsKICAgICBXZWJLaXRXZWJWaWV3ICpuZXdXZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtp
dF93ZWJfdmlld19uZXdfd2l0aF9yZWxhdGVkX3ZpZXcod2ViVmlldykpOwogICAgIHdlYmtpdF93
ZWJfdmlld19zZXRfc2V0dGluZ3MobmV3V2ViVmlldywgd2Via2l0X3dlYl92aWV3X2dldF9zZXR0
aW5ncyh3ZWJWaWV3KSk7CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdDJHdGsvVGVzdE11bHRpcHJvY2Vzcy5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdDJHdGsvVGVzdE11bHRpcHJvY2Vzcy5jcHAKaW5kZXggNzY1ZTU0Mi4uZjgzODBkMiAx
MDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RNdWx0
aXByb2Nlc3MuY3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9U
ZXN0TXVsdGlwcm9jZXNzLmNwcApAQCAtMTM4LDcgKzEzOCw3IEBAIHB1YmxpYzoKICAgICAgICAg
Q2xvc2UKICAgICB9OwogCi0gICAgc3RhdGljIEd0a1dpZGdldCogdmlld0NyZWF0ZUNhbGxiYWNr
KFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIFVJQ2xpZW50TXVsdGlwcm9jZXNzVGVzdCogdGVzdCkK
KyAgICBzdGF0aWMgR3RrV2lkZ2V0KiB2aWV3Q3JlYXRlQ2FsbGJhY2soV2ViS2l0V2ViVmlldyog
d2ViVmlldywgV2ViS2l0TmF2aWdhdGlvbkFjdGlvbiosIFVJQ2xpZW50TXVsdGlwcm9jZXNzVGVz
dCogdGVzdCkKICAgICB7CiAgICAgICAgIHJldHVybiB0ZXN0LT52aWV3Q3JlYXRlKHdlYlZpZXcp
OwogICAgIH0KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0
ay9UZXN0UHJpbnRpbmcuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3Rr
L1Rlc3RQcmludGluZy5jcHAKaW5kZXggOTllZmE3Yy4uY2ZhMTY1NiAxMDA2NDQKLS0tIGEvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RQcmludGluZy5jcHAKKysrIGIv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RQcmludGluZy5jcHAKQEAg
LTE5NCw3ICsxOTQsNyBAQCBjbGFzcyBDbG9zZUFmdGVyUHJpbnRUZXN0OiBwdWJsaWMgV2ViVmll
d1Rlc3QgewogcHVibGljOgogICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUoQ2xvc2VBZnRlclBy
aW50VGVzdCk7CiAKLSAgICBzdGF0aWMgR3RrV2lkZ2V0KiB3ZWJWaWV3Q3JlYXRlKFdlYktpdFdl
YlZpZXcqIHdlYlZpZXcsIENsb3NlQWZ0ZXJQcmludFRlc3QqIHRlc3QpCisgICAgc3RhdGljIEd0
a1dpZGdldCogd2ViVmlld0NyZWF0ZShXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBXZWJLaXROYXZp
Z2F0aW9uQWN0aW9uKiwgQ2xvc2VBZnRlclByaW50VGVzdCogdGVzdCkKICAgICB7CiAgICAgICAg
IHJldHVybiB0ZXN0LT5jcmVhdGVXZWJWaWV3KCk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RVSUNsaWVudC5jcHAgYi9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdFVJQ2xpZW50LmNwcAppbmRleCBkMjRl
ZGM2Li4xZTViZGQyIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dDJHdGsvVGVzdFVJQ2xpZW50LmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdDJHdGsvVGVzdFVJQ2xpZW50LmNwcApAQCAtMTE3LDkgKzExNyw5IEBAIHB1YmxpYzoKICAg
ICAgICAgdGVzdC0+bV93aW5kb3dQcm9wZXJ0aWVzQ2hhbmdlZC5hZGQoZ19wYXJhbV9zcGVjX2dl
dF9uYW1lKHBhcmFtU3BlYykpOwogICAgIH0KIAotICAgIHN0YXRpYyBHdGtXaWRnZXQqIHZpZXdD
cmVhdGVDYWxsYmFjayhXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBVSUNsaWVudFRlc3QqIHRlc3Qp
CisgICAgc3RhdGljIEd0a1dpZGdldCogdmlld0NyZWF0ZUNhbGxiYWNrKFdlYktpdFdlYlZpZXcq
IHdlYlZpZXcsIFdlYktpdE5hdmlnYXRpb25BY3Rpb24qIG5hdmlnYXRpb24sIFVJQ2xpZW50VGVz
dCogdGVzdCkKICAgICB7Ci0gICAgICAgIHJldHVybiB0ZXN0LT52aWV3Q3JlYXRlKHdlYlZpZXcp
OworICAgICAgICByZXR1cm4gdGVzdC0+dmlld0NyZWF0ZSh3ZWJWaWV3LCBuYXZpZ2F0aW9uKTsK
ICAgICB9CiAKICAgICBzdGF0aWMgdm9pZCB2aWV3UmVhZHlUb1Nob3dDYWxsYmFjayhXZWJLaXRX
ZWJWaWV3KiB3ZWJWaWV3LCBVSUNsaWVudFRlc3QqIHRlc3QpCkBAIC0yNDAsOSArMjQwLDEwIEBA
IHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fbW91c2VUYXJnZXRIaXRUZXN0UmVzdWx0LmdldCgp
OwogICAgIH0KIAotICAgIHZpcnR1YWwgR3RrV2lkZ2V0KiB2aWV3Q3JlYXRlKFdlYktpdFdlYlZp
ZXcqIHdlYlZpZXcpCisgICAgdmlydHVhbCBHdGtXaWRnZXQqIHZpZXdDcmVhdGUoV2ViS2l0V2Vi
Vmlldyogd2ViVmlldywgV2ViS2l0TmF2aWdhdGlvbkFjdGlvbiogbmF2aWdhdGlvbikKICAgICB7
CiAgICAgICAgIGdfYXNzZXJ0KHdlYlZpZXcgPT0gbV93ZWJWaWV3KTsKKyAgICAgICAgZ19hc3Nl
cnQobmF2aWdhdGlvbik7CiAKICAgICAgICAgR3RrV2lkZ2V0KiBuZXdXZWJWaWV3ID0gd2Via2l0
X3dlYl92aWV3X25ld193aXRoX2NvbnRleHQod2Via2l0X3dlYl92aWV3X2dldF9jb250ZXh0KHdl
YlZpZXcpKTsKICAgICAgICAgZ19vYmplY3RfcmVmX3NpbmsobmV3V2ViVmlldyk7CkBAIC0zMDUs
NiArMzA2LDk3IEBAIHN0YXRpYyB2b2lkIHRlc3RXZWJWaWV3Q3JlYXRlUmVhZHlDbG9zZShVSUNs
aWVudFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCiAgICAgZ19hc3NlcnRfY21waW50KGV2ZW50
c1syXSwgPT0sIFVJQ2xpZW50VGVzdDo6Q2xvc2UpOwogfQogCitjbGFzcyBDcmVhdGVOYXZpZ2F0
aW9uRGF0YVRlc3Q6IHB1YmxpYyBVSUNsaWVudFRlc3QgeworcHVibGljOgorICAgIE1BS0VfR0xJ
Ql9URVNUX0ZJWFRVUkUoQ3JlYXRlTmF2aWdhdGlvbkRhdGFUZXN0KTsKKworICAgIENyZWF0ZU5h
dmlnYXRpb25EYXRhVGVzdCgpCisgICAgICAgIDogbV9uYXZpZ2F0aW9uKG51bGxwdHIpCisgICAg
eworICAgIH0KKworICAgIH5DcmVhdGVOYXZpZ2F0aW9uRGF0YVRlc3QoKQorICAgIHsKKyAgICAg
ICAgY2xlYXJOYXZpZ2F0aW9uKCk7CisgICAgfQorCisgICAgdm9pZCBjbGVhck5hdmlnYXRpb24o
KQorICAgIHsKKyAgICAgICAgaWYgKG1fbmF2aWdhdGlvbikKKyAgICAgICAgICAgIHdlYmtpdF9u
YXZpZ2F0aW9uX2FjdGlvbl9mcmVlKG1fbmF2aWdhdGlvbik7CisgICAgICAgIG1fbmF2aWdhdGlv
biA9IG51bGxwdHI7CisgICAgfQorCisgICAgR3RrV2lkZ2V0KiB2aWV3Q3JlYXRlKFdlYktpdFdl
YlZpZXcqIHdlYlZpZXcsIFdlYktpdE5hdmlnYXRpb25BY3Rpb24qIG5hdmlnYXRpb24pCisgICAg
eworICAgICAgICBnX2Fzc2VydChuYXZpZ2F0aW9uKTsKKyAgICAgICAgZ19hc3NlcnQoIW1fbmF2
aWdhdGlvbik7CisgICAgICAgIG1fbmF2aWdhdGlvbiA9IHdlYmtpdF9uYXZpZ2F0aW9uX2FjdGlv
bl9jb3B5KG5hdmlnYXRpb24pOworICAgICAgICBnX21haW5fbG9vcF9xdWl0KG1fbWFpbkxvb3Ap
OworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICB2b2lkIGxvYWRIVE1MKGNv
bnN0IGNoYXIqIGh0bWwpCisgICAgeworICAgICAgICBjbGVhck5hdmlnYXRpb24oKTsKKyAgICAg
ICAgV2ViVmlld1Rlc3Q6OmxvYWRIdG1sKGh0bWwsIG51bGxwdHIpOworICAgIH0KKworICAgIHZv
aWQgY2xpY2tBbmRXYWl0VW50aWxNYWluTG9vcEZpbmlzaGVzKGludCB4LCBpbnQgeSkKKyAgICB7
CisgICAgICAgIGNsZWFyTmF2aWdhdGlvbigpOworICAgICAgICBjbGlja01vdXNlQnV0dG9uKHgs
IHksIDEpOworICAgICAgICBnX21haW5fbG9vcF9ydW4obV9tYWluTG9vcCk7CisgICAgfQorCisg
ICAgdm9pZCByZWxvYWQoKQorICAgIHsKKyAgICAgICAgY2xlYXJOYXZpZ2F0aW9uKCk7CisgICAg
ICAgIHdlYmtpdF93ZWJfdmlld19yZWxvYWRfYnlwYXNzX2NhY2hlKG1fd2ViVmlldyk7CisgICAg
fQorCisgICAgV2ViS2l0TmF2aWdhdGlvbkFjdGlvbiogbV9uYXZpZ2F0aW9uOworfTsKKworc3Rh
dGljIHZvaWQgdGVzdFdlYlZpZXdDcmVhdGVOYXZpZ2F0aW9uRGF0YShDcmVhdGVOYXZpZ2F0aW9u
RGF0YVRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgdGVzdC0+c2hvd0luV2luZG93
QW5kV2FpdFVudGlsTWFwcGVkKCk7CisKKyAgICB0ZXN0LT5sb2FkSFRNTCgKKyAgICAgICAgIjxo
dG1sPjxib2R5PiIKKyAgICAgICAgIjxpbnB1dCBzdHlsZT1cInBvc2l0aW9uOmFic29sdXRlOyBs
ZWZ0OjA7IHRvcDowOyBtYXJnaW46MDsgcGFkZGluZzowXCIgdHlwZT1cImJ1dHRvblwiIHZhbHVl
PVwiY2xpY2sgdG8gc2hvdyBhIHBvcHVwXCIgb25jbGljaz1cIndpbmRvdy5vcGVuKCdkYXRhOmZv
bycpO1wiLz4iCisgICAgICAgICI8YSBzdHlsZT1cInBvc2l0aW9uOmFic29sdXRlOyBsZWZ0OjIw
OyB0b3A6MjA7XCIgaHJlZj1cImRhdGE6YmFyXCIgdGFyZ2V0PVwiX2JsYW5rXCI+cG9wdXAgbGlu
azwvYT4iCisgICAgICAgICI8L2JvZHk+PC9odG1sPiIpOworICAgIHRlc3QtPndhaXRVbnRpbExv
YWRGaW5pc2hlZCgpOworCisgICAgLy8gQ2xpY2sgb24gYSBidXR0b24uCisgICAgdGVzdC0+Y2xp
Y2tBbmRXYWl0VW50aWxNYWluTG9vcEZpbmlzaGVzKDUsIDUpOworICAgIGdfYXNzZXJ0X2NtcHN0
cih3ZWJraXRfdXJpX3JlcXVlc3RfZ2V0X3VyaSh3ZWJraXRfbmF2aWdhdGlvbl9hY3Rpb25fZ2V0
X3JlcXVlc3QodGVzdC0+bV9uYXZpZ2F0aW9uKSksID09LCAiZGF0YTpmb28iKTsKKyAgICBnX2Fz
c2VydF9jbXB1aW50KHdlYmtpdF9uYXZpZ2F0aW9uX2FjdGlvbl9nZXRfbmF2aWdhdGlvbl90eXBl
KHRlc3QtPm1fbmF2aWdhdGlvbiksID09LCBXRUJLSVRfTkFWSUdBVElPTl9UWVBFX09USEVSKTsK
KyAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgYnV0dG9uIDEuCisgICAgZ19hc3NlcnRfY21w
dWludCh3ZWJraXRfbmF2aWdhdGlvbl9hY3Rpb25fZ2V0X21vdXNlX2J1dHRvbih0ZXN0LT5tX25h
dmlnYXRpb24pLCA9PSwgMCk7CisgICAgZ19hc3NlcnRfY21wdWludCh3ZWJraXRfbmF2aWdhdGlv
bl9hY3Rpb25fZ2V0X21vZGlmaWVycyh0ZXN0LT5tX25hdmlnYXRpb24pLCA9PSwgMCk7CisgICAg
Z19hc3NlcnQod2Via2l0X25hdmlnYXRpb25fYWN0aW9uX2lzX3VzZXJfZ2VzdHVyZSh0ZXN0LT5t
X25hdmlnYXRpb24pKTsKKworICAgIC8vIENsaWNrIG9uIGEgbGluay4KKyAgICB0ZXN0LT5jbGlj
a0FuZFdhaXRVbnRpbE1haW5Mb29wRmluaXNoZXMoMjEsIDIxKTsKKyAgICBnX2Fzc2VydF9jbXBz
dHIod2Via2l0X3VyaV9yZXF1ZXN0X2dldF91cmkod2Via2l0X25hdmlnYXRpb25fYWN0aW9uX2dl
dF9yZXF1ZXN0KHRlc3QtPm1fbmF2aWdhdGlvbikpLCA9PSwgImRhdGE6YmFyIik7CisgICAgZ19h
c3NlcnRfY21wdWludCh3ZWJraXRfbmF2aWdhdGlvbl9hY3Rpb25fZ2V0X25hdmlnYXRpb25fdHlw
ZSh0ZXN0LT5tX25hdmlnYXRpb24pLCA9PSwgV0VCS0lUX05BVklHQVRJT05fVFlQRV9MSU5LX0NM
SUNLRUQpOworICAgIGdfYXNzZXJ0X2NtcHVpbnQod2Via2l0X25hdmlnYXRpb25fYWN0aW9uX2dl
dF9tb3VzZV9idXR0b24odGVzdC0+bV9uYXZpZ2F0aW9uKSwgPT0sIDEpOworICAgIGdfYXNzZXJ0
X2NtcHVpbnQod2Via2l0X25hdmlnYXRpb25fYWN0aW9uX2dldF9tb2RpZmllcnModGVzdC0+bV9u
YXZpZ2F0aW9uKSwgPT0sIDApOworICAgIGdfYXNzZXJ0KHdlYmtpdF9uYXZpZ2F0aW9uX2FjdGlv
bl9pc191c2VyX2dlc3R1cmUodGVzdC0+bV9uYXZpZ2F0aW9uKSk7CisKKyAgICAvLyBObyB1c2Vy
IGludGVyYWN0aW9uLgorICAgIHRlc3QtPmxvYWRIVE1MKCI8aHRtbD48Ym9keSBvbkxvYWQ9XCJ3
aW5kb3cub3BlbigpO1wiPjwvaHRtbD4iKTsKKyAgICB0ZXN0LT53YWl0VW50aWxNYWluTG9vcEZp
bmlzaGVzKCk7CisKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3VyaV9yZXF1ZXN0X2dldF91
cmkod2Via2l0X25hdmlnYXRpb25fYWN0aW9uX2dldF9yZXF1ZXN0KHRlc3QtPm1fbmF2aWdhdGlv
bikpLCA9PSwgIiIpOworICAgIGdfYXNzZXJ0X2NtcHVpbnQod2Via2l0X25hdmlnYXRpb25fYWN0
aW9uX2dldF9uYXZpZ2F0aW9uX3R5cGUodGVzdC0+bV9uYXZpZ2F0aW9uKSwgPT0sIFdFQktJVF9O
QVZJR0FUSU9OX1RZUEVfT1RIRVIpOworICAgIGdfYXNzZXJ0X2NtcHVpbnQod2Via2l0X25hdmln
YXRpb25fYWN0aW9uX2dldF9tb3VzZV9idXR0b24odGVzdC0+bV9uYXZpZ2F0aW9uKSwgPT0sIDAp
OworICAgIGdfYXNzZXJ0X2NtcHVpbnQod2Via2l0X25hdmlnYXRpb25fYWN0aW9uX2dldF9tb2Rp
ZmllcnModGVzdC0+bV9uYXZpZ2F0aW9uKSwgPT0sIDApOworICAgIGdfYXNzZXJ0KCF3ZWJraXRf
bmF2aWdhdGlvbl9hY3Rpb25faXNfdXNlcl9nZXN0dXJlKHRlc3QtPm1fbmF2aWdhdGlvbikpOwor
fQorCiBzdGF0aWMgZ2Jvb2xlYW4gY2hlY2tNaW1lVHlwZUZvckZpbHRlcihHdGtGaWxlRmlsdGVy
KiBmaWx0ZXIsIGNvbnN0IGdjaGFyKiBtaW1lVHlwZSkKIHsKICAgICBHdGtGaWxlRmlsdGVySW5m
byBmaWx0ZXJJbmZvOwpAQCAtMzIzLDExICs0MTUsMTEgQEAgcHVibGljOgogICAgICAgICB0ZXN0
LT5tX3dlYlZpZXdFdmVudHMuYXBwZW5kKFJ1bkFzTW9kYWwpOwogICAgIH0KIAotICAgIEd0a1dp
ZGdldCogdmlld0NyZWF0ZShXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQorICAgIEd0a1dpZGdldCog
dmlld0NyZWF0ZShXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBXZWJLaXROYXZpZ2F0aW9uQWN0aW9u
KiBuYXZpZ2F0aW9uKQogICAgIHsKICAgICAgICAgZ19hc3NlcnQod2ViVmlldyA9PSBtX3dlYlZp
ZXcpOwogCi0gICAgICAgIEd0a1dpZGdldCogbmV3V2ViVmlldyA9IFVJQ2xpZW50VGVzdDo6dmll
d0NyZWF0ZSh3ZWJWaWV3KTsKKyAgICAgICAgR3RrV2lkZ2V0KiBuZXdXZWJWaWV3ID0gVUlDbGll
bnRUZXN0Ojp2aWV3Q3JlYXRlKHdlYlZpZXcsIG5hdmlnYXRpb24pOwogICAgICAgICBnX3NpZ25h
bF9jb25uZWN0KG5ld1dlYlZpZXcsICJydW4tYXMtbW9kYWwiLCBHX0NBTExCQUNLKGRpYWxvZ1J1
bkFzTW9kYWxDYWxsYmFjayksIHRoaXMpOwogICAgICAgICByZXR1cm4gbmV3V2ViVmlldzsKICAg
ICB9CkBAIC02NjUsNiArNzU3LDcgQEAgc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdGaWxlQ2hvb3Nl
clJlcXVlc3QoRmlsZUNob29zZXJUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQogdm9pZCBiZWZv
cmVBbGwoKQogewogICAgIFVJQ2xpZW50VGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgImNyZWF0
ZS1yZWFkeS1jbG9zZSIsIHRlc3RXZWJWaWV3Q3JlYXRlUmVhZHlDbG9zZSk7CisgICAgQ3JlYXRl
TmF2aWdhdGlvbkRhdGFUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAiY3JlYXRlLW5hdmlnYXRp
b24tZGF0YSIsIHRlc3RXZWJWaWV3Q3JlYXRlTmF2aWdhdGlvbkRhdGEpOwogICAgIE1vZGFsRGlh
bG9nc1Rlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJhbGxvdy1tb2RhbC1kaWFsb2dzIiwgdGVz
dFdlYlZpZXdBbGxvd01vZGFsRGlhbG9ncyk7CiAgICAgTW9kYWxEaWFsb2dzVGVzdDo6YWRkKCJX
ZWJLaXRXZWJWaWV3IiwgImRpc2FsbG93LW1vZGFsLWRpYWxvZ3MiLCB0ZXN0V2ViVmlld0Rpc2Fs
bG93TW9kYWxEaWFsb2dzKTsKICAgICBVSUNsaWVudFRlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIs
ICJqYXZhc2NyaXB0LWRpYWxvZ3MiLCB0ZXN0V2ViVmlld0phdmFTY3JpcHREaWFsb2dzKTsKZGlm
ZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0V2ViS2l0
UG9saWN5Q2xpZW50LmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9U
ZXN0V2ViS2l0UG9saWN5Q2xpZW50LmNwcAppbmRleCAyMDllYTA0Li5mYTkxMjU3IDEwMDY0NAot
LS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdFdlYktpdFBvbGlj
eUNsaWVudC5jcHAKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rl
c3RXZWJLaXRQb2xpY3lDbGllbnQuY3BwCkBAIC0xOTEsNyArMTkxLDcgQEAgc3RydWN0IENyZWF0
ZUNhbGxiYWNrRGF0YSB7CiAgICAgR01haW5Mb29wKiBtYWluTG9vcDsKIH07CiAKLXN0YXRpYyBX
ZWJLaXRXZWJWaWV3KiBjcmVhdGVDYWxsYmFjayhXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBDcmVh
dGVDYWxsYmFja0RhdGEqIGRhdGEpCitzdGF0aWMgV2ViS2l0V2ViVmlldyogY3JlYXRlQ2FsbGJh
Y2soV2ViS2l0V2ViVmlldyogd2ViVmlldywgV2ViS2l0TmF2aWdhdGlvbkFjdGlvbiosIENyZWF0
ZUNhbGxiYWNrRGF0YSogZGF0YSkKIHsKICAgICBkYXRhLT50cmllZFRvT3BlbldpbmRvdyA9IHRy
dWU7CiAgICAgZ19tYWluX2xvb3BfcXVpdChkYXRhLT5tYWluTG9vcCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>233705</attachid>
            <date>2014-06-24 08:13:13 -0700</date>
            <delta_ts>2014-06-24 08:43:31 -0700</delta_ts>
            <desc>Updated patch</desc>
            <filename>wk2-create-navigation-action.diff</filename>
            <type>text/plain</type>
            <size>68052</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCA0Zjk1YzQ5Li5lOTJmOGI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODkg
QEAKKzIwMTQtMDYtMTAgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgorCisgICAgICAgIFtHVEtdIFdlYktpdFdlYlZpZXc6OmNyZWF0ZSBzaG91bGQgcmVjZWl2ZSBp
bmZvcm1hdGlvbiBhYm91dCB0aGUgbmF2aWdhdGlvbiBhY3Rpb24KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMzY4MAorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBXZWJLaXROYXZpZ2F0aW9uQWN0aW9u
IGJveGVkIHR5cGUgcmVwcmVzZW50aW5nIGEgbmF2aWdhdGlvbgorICAgICAgICBhY3Rpb24gdG8g
YmUgcGFzc2VkIGFzIHBhcmFtZXRlciBvZiBXZWJLaXRXZWJWaWV3OjpjcmVhdGUKKyAgICAgICAg
c2lnbmFsLiBJbiB0aGUgZnV0dXJlIGl0IGNvdWxkIGJlIGFsc28gZm9yIHRoZQorICAgICAgICBX
ZWJLaXROYXZpZ2F0aW9uUG9saWN5RGVjaXNpb24gY2xhc3MuIFRoZSBjbGFzcyBjb250YWlucwor
ICAgICAgICBpbmZvcm1hdGlvbiBhYm91dCBhIG5hdmlnYXRpb24gYWN0aW9uIGxpa2UgdGhlIG5h
dmlnYXRpb24gdHlwZSwKKyAgICAgICAgdGhlIHJlcXVlc3QsIHRoZSBtb3VzZSBidXR0b24gYW5k
IGtleSBtb2RpZmllcnMgYW5kIHdoZXRoZXIgaXQgd2FzCisgICAgICAgIHN0YXJ0ZWQgYnkgYSB1
c2VyIGdlc3R1cmUuIFRoaXMgaW5mb3JtYXRpb24gaXMgbmVlZGVkIHRvIGJlIGFibGUKKyAgICAg
ICAgdG8gaW1wbGVtZW50IGEgcHJvcGVyIHBvcHVwIGJsb2NrZXIuIFNpbmNlIGFsbCB0aGF0IGlu
Zm9ybWF0aW9uIGlzCisgICAgICAgIG5vdCBwcm92aWRlZCBieSB0aGUgQyBBUEksIHdlIGhhdmUg
c3dpdGNoZWQgdGhlIFVJIGNsaWVudCB0byB1c2UgYQorICAgICAgICBjdXN0b20gY2xpZW50IGRl
cml2ZWQgZnJvbSBBUEk6OlVJQ2xpZW50LiBUaGlzIGFsc28gYXZvaWRzIGEgbG90CisgICAgICAg
IG9mIHRvQVBJIC0+IHRvSW1wbCB1bm5lZWRlZCBjb252ZXJzaW9ucy4KKworICAgICAgICAqIFBs
YXRmb3JtR1RLLmNtYWtlOiBBZGQgbmV3IGZpbGVzIHRvIGNvbXBpbGF0aW9uLgorICAgICAgICAq
IFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEhpdFRlc3RSZXN1bHQuY3BwOgorICAgICAgICAod2Vi
a2l0SGl0VGVzdFJlc3VsdENyZWF0ZSk6IFVzZSBhIFdlYkhpdFRlc3RSZXN1bHQ6OkRhdGEgY29u
c3QKKyAgICAgICAgcmVmZXJlbmNlIGluc3RlYWQgb2YgYSBwb2ludGVyIHRvIGEgV2ViSGl0VGVz
dFJlc3VsdC4KKyAgICAgICAgKHdlYmtpdEhpdFRlc3RSZXN1bHRDb21wYXJlKTogRGl0dG8uCisg
ICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0SGl0VGVzdFJlc3VsdFByaXZhdGUuaDoK
KyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXROYXZpZ2F0aW9uQWN0aW9uLmNwcDog
QWRkZWQuCisgICAgICAgICh3ZWJraXROYXZpZ2F0aW9uQWN0aW9uQ3JlYXRlKTogQ3JlYXRlIGEg
V2ViS2l0TmF2aWdhdGlvbkFjdGlvbgorICAgICAgICBmb3IgdGhlIGdpdmVuIFJlc291cmNlUmVx
dWVzdCBhbmQgTmF2aWdhdGlvbkFjdGlvbkRhdGEuCisgICAgICAgICh3ZWJraXRfbmF2aWdhdGlv
bl9hY3Rpb25fY29weSk6CisgICAgICAgICh3ZWJraXRfbmF2aWdhdGlvbl9hY3Rpb25fZnJlZSk6
CisgICAgICAgICh3ZWJraXRfbmF2aWdhdGlvbl9hY3Rpb25fZ2V0X25hdmlnYXRpb25fdHlwZSk6
CisgICAgICAgICh3ZWJraXRfbmF2aWdhdGlvbl9hY3Rpb25fZ2V0X21vdXNlX2J1dHRvbik6Cisg
ICAgICAgICh3ZWJraXRfbmF2aWdhdGlvbl9hY3Rpb25fZ2V0X21vZGlmaWVycyk6CisgICAgICAg
ICh3ZWJraXRfbmF2aWdhdGlvbl9hY3Rpb25fZ2V0X3JlcXVlc3QpOgorICAgICAgICAod2Via2l0
X25hdmlnYXRpb25fYWN0aW9uX2lzX3VzZXJfZ2VzdHVyZSk6CisgICAgICAgICogVUlQcm9jZXNz
L0FQSS9ndGsvV2ViS2l0TmF2aWdhdGlvbkFjdGlvbi5oOiBBZGRlZC4KKyAgICAgICAgKiBVSVBy
b2Nlc3MvQVBJL2d0ay9XZWJLaXROYXZpZ2F0aW9uQWN0aW9uUHJpdmF0ZS5oOiBBZGRlZC4KKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXROYXZpZ2F0aW9uUG9saWN5RGVjaXNpb24u
aDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRQcml2YXRlLmNwcDoKKyAgICAg
ICAgKHRvR2RrTW9kaWZpZXJzKToKKyAgICAgICAgKHRvV2ViS2l0TmF2aWdhdGlvblR5cGUpOgor
ICAgICAgICAodG9XZWJLaXRNb3VzZUJ1dHRvbik6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0UHJpdmF0ZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFVJ
Q2xpZW50LmNwcDoKKyAgICAgICAgKFVJQ2xpZW50OjpVSUNsaWVudCk6IEltcGxlbWVudCB0aGUg
VUlDbGllbnQgdXNpbmcgYSBjdXN0b20gY2xhc3MuCisgICAgICAgIChhdHRhY2hVSUNsaWVudFRv
Vmlldyk6IFNldCB0aGUgVUlDbGllbnQgZGlyZWN0bHkgdG8gdGhlIFdlYlBhZ2VQcm94eS4KKyAg
ICAgICAgKGNyZWF0ZU5ld1BhZ2UpOiBEZWxldGVkLgorICAgICAgICAoc2hvd1BhZ2UpOiBEZWxl
dGVkLgorICAgICAgICAoY2xvc2VQYWdlKTogRGVsZXRlZC4KKyAgICAgICAgKHJ1bkphdmFTY3Jp
cHRBbGVydCk6IERlbGV0ZWQuCisgICAgICAgIChydW5KYXZhU2NyaXB0Q29uZmlybSk6IERlbGV0
ZWQuCisgICAgICAgIChydW5KYXZhU2NyaXB0UHJvbXB0KTogRGVsZXRlZC4KKyAgICAgICAgKHRv
b2xiYXJzQXJlVmlzaWJsZSk6IERlbGV0ZWQuCisgICAgICAgIChzZXRUb29sYmFyc0FyZVZpc2li
bGUpOiBEZWxldGVkLgorICAgICAgICAobWVudUJhcklzVmlzaWJsZSk6IERlbGV0ZWQuCisgICAg
ICAgIChzZXRNZW51QmFySXNWaXNpYmxlKTogRGVsZXRlZC4KKyAgICAgICAgKHN0YXR1c0Jhcklz
VmlzaWJsZSk6IERlbGV0ZWQuCisgICAgICAgIChzZXRTdGF0dXNCYXJJc1Zpc2libGUpOiBEZWxl
dGVkLgorICAgICAgICAoaXNSZXNpemFibGUpOiBEZWxldGVkLgorICAgICAgICAoc2V0SXNSZXNp
emFibGUpOiBEZWxldGVkLgorICAgICAgICAoZ2V0V2luZG93RnJhbWUpOiBEZWxldGVkLgorICAg
ICAgICAoc2V0V2luZG93RnJhbWUpOiBEZWxldGVkLgorICAgICAgICAobW91c2VEaWRNb3ZlT3Zl
ckVsZW1lbnQpOiBEZWxldGVkLgorICAgICAgICAocHJpbnRGcmFtZSk6IERlbGV0ZWQuCisgICAg
ICAgIChydW5PcGVuUGFuZWwpOiBEZWxldGVkLgorICAgICAgICAoZGVjaWRlUG9saWN5Rm9yR2Vv
bG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdCk6IERlbGV0ZWQuCisgICAgICAgIChydW5Nb2RhbCk6
IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5jcHA6
CisgICAgICAgICh3ZWJraXRXZWJWaWV3Q3JlYXRlKTogQWRkIFdlYktpdE5hdmlnYXRpb25BY3Rp
b24gcGFyYW1ldGVyLgorICAgICAgICAod2Via2l0X3dlYl92aWV3X2NsYXNzX2luaXQpOiBBZGQg
V2ViS2l0TmF2aWdhdGlvbkFjdGlvbiBwYXJhbXRlcgorICAgICAgICB0byBDUkVBVEUgc2lnbmFs
LgorICAgICAgICAod2Via2l0V2ViVmlld0NyZWF0ZU5ld1BhZ2UpOiBBZGQgV2ViS2l0TmF2aWdh
dGlvbkFjdGlvbiBwYXJhbWV0ZXIKKyAgICAgICAgYW5kIHBhc3MgaXQgdG8gdGhlIHNpZ25hbCBj
YWxsYmFja3MuCisgICAgICAgICh3ZWJraXRXZWJWaWV3TW91c2VUYXJnZXRDaGFuZ2VkKTogVXNl
IGEgV2ViSGl0VGVzdFJlc3VsdDo6RGF0YQorICAgICAgICBjb25zdCByZWZlcmVuY2UuCisgICAg
ICAgICh3ZWJraXRXZWJWaWV3UG9wdWxhdGVDb250ZXh0TWVudSk6IERpdHRvLgorICAgICAgICAq
IFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuaDoKKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXRXZWJWaWV3UHJpdmF0ZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
Z3RrL1dlYktpdFdpbmRvd1Byb3BlcnRpZXMuY3BwOgorICAgICAgICAod2Via2l0V2luZG93UHJv
cGVydGllc1VwZGF0ZUZyb21XZWJXaW5kb3dGZWF0dXJlcyk6IFVzZSBhCisgICAgICAgIFdlYkNv
cmU6OldpbmRvd0ZlYXR1cmVzIGNvbnN0IHJlZmVyZW5jZS4KKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXRXaW5kb3dQcm9wZXJ0aWVzUHJpdmF0ZS5oOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1kb2NzLnNnbWw6IEFkZCBuZXcgc2VjdGlvbi4K
KyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstc2VjdGlvbnMudHh0
OiBBZGQgbmV3IHN5bWJvbHMuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvd2Via2l0Mi5o
OiBJbmNsdWRlIFdlYktpdE5hdmlnYXRpb25BY3Rpb24uaC4KKwogMjAxNC0wNi0yNCAgQW5kZXJz
IENhcmxzc29uICA8YW5kZXJzY2FAYXBwbGUuY29tPgogCiAgICAgICAgIFdLV2ViVmlldyBkb2Vz
bid0IHJlc3BlY3QgLVtVSVNjcm9sbFZpZXcgY29udGVudEluc2V0XQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvUGxhdGZvcm1HVEsuY21ha2UgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUdU
Sy5jbWFrZQppbmRleCA3NjQ5ZjE0Li5hNGJhOWFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9QbGF0Zm9ybUdUSy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUdUSy5jbWFr
ZQpAQCAtMTYyLDYgKzE2Miw5IEBAIGxpc3QoQVBQRU5EIFdlYktpdDJfU09VUkNFUwogICAgIFVJ
UHJvY2Vzcy9BUEkvZ3RrL1dlYktpdE1pbWVJbmZvLmNwcAogICAgIFVJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdE1pbWVJbmZvLmgKICAgICBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRNaW1lSW5mb1By
aXZhdGUuaAorICAgIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdE5hdmlnYXRpb25BY3Rpb24uY3Bw
CisgICAgVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0TmF2aWdhdGlvbkFjdGlvbi5oCisgICAgVUlQ
cm9jZXNzL0FQSS9ndGsvV2ViS2l0TmF2aWdhdGlvbkFjdGlvblByaXZhdGUuaAogICAgIFVJUHJv
Y2Vzcy9BUEkvZ3RrL1dlYktpdE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbi5jcHAKICAgICBVSVBy
b2Nlc3MvQVBJL2d0ay9XZWJLaXROYXZpZ2F0aW9uUG9saWN5RGVjaXNpb24uaAogICAgIFVJUHJv
Y2Vzcy9BUEkvZ3RrL1dlYktpdE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvblByaXZhdGUuaApAQCAt
MzM3LDYgKzM0MCw3IEBAIHNldChXZWJLaXQyR1RLX0lOU1RBTExFRF9IRUFERVJTCiAgICAgJHtX
RUJLSVQyX0RJUn0vVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0SGl0VGVzdFJlc3VsdC5oCiAgICAg
JHtXRUJLSVQyX0RJUn0vVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0SmF2YXNjcmlwdFJlc3VsdC5o
CiAgICAgJHtXRUJLSVQyX0RJUn0vVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0TWltZUluZm8uaAor
ICAgICR7V0VCS0lUMl9ESVJ9L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdE5hdmlnYXRpb25BY3Rp
b24uaAogICAgICR7V0VCS0lUMl9ESVJ9L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdE5hdmlnYXRp
b25Qb2xpY3lEZWNpc2lvbi5oCiAgICAgJHtXRUJLSVQyX0RJUn0vVUlQcm9jZXNzL0FQSS9ndGsv
V2ViS2l0UGVybWlzc2lvblJlcXVlc3QuaAogICAgICR7V0VCS0lUMl9ESVJ9L1VJUHJvY2Vzcy9B
UEkvZ3RrL1dlYktpdFBsdWdpbi5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay9XZWJLaXRIaXRUZXN0UmVzdWx0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL1dlYktpdEhpdFRlc3RSZXN1bHQuY3BwCmluZGV4IDkxOGQzMTYuLjE5ODJh
YTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEhp
dFRlc3RSZXN1bHQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dl
YktpdEhpdFRlc3RSZXN1bHQuY3BwCkBAIC0yMjEsMzkgKzIyMSwzMyBAQCBzdGF0aWMgdm9pZCB3
ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NsYXNzX2luaXQoV2ViS2l0SGl0VGVzdFJlc3VsdENsYXNz
KiBoaXRUZXN0UgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwYXJhbUZsYWdzKSk7CiB9CiAKLVdlYktpdEhpdFRlc3RSZXN1bHQqIHdlYmtp
dEhpdFRlc3RSZXN1bHRDcmVhdGUoV2ViSGl0VGVzdFJlc3VsdCogaGl0VGVzdFJlc3VsdCkKK1dl
YktpdEhpdFRlc3RSZXN1bHQqIHdlYmtpdEhpdFRlc3RSZXN1bHRDcmVhdGUoY29uc3QgV2ViSGl0
VGVzdFJlc3VsdDo6RGF0YSYgaGl0VGVzdFJlc3VsdCkKIHsKICAgICB1bnNpZ25lZCBjb250ZXh0
ID0gV0VCS0lUX0hJVF9URVNUX1JFU1VMVF9DT05URVhUX0RPQ1VNRU5UOwogCi0gICAgY29uc3Qg
U3RyaW5nJiBsaW5rVVJMID0gaGl0VGVzdFJlc3VsdC0+YWJzb2x1dGVMaW5rVVJMKCk7Ci0gICAg
aWYgKCFsaW5rVVJMLmlzRW1wdHkoKSkKKyAgICBpZiAoIWhpdFRlc3RSZXN1bHQuYWJzb2x1dGVM
aW5rVVJMLmlzRW1wdHkoKSkKICAgICAgICAgY29udGV4dCB8PSBXRUJLSVRfSElUX1RFU1RfUkVT
VUxUX0NPTlRFWFRfTElOSzsKIAotICAgIGNvbnN0IFN0cmluZyYgaW1hZ2VVUkwgPSBoaXRUZXN0
UmVzdWx0LT5hYnNvbHV0ZUltYWdlVVJMKCk7Ci0gICAgaWYgKCFpbWFnZVVSTC5pc0VtcHR5KCkp
CisgICAgaWYgKCFoaXRUZXN0UmVzdWx0LmFic29sdXRlSW1hZ2VVUkwuaXNFbXB0eSgpKQogICAg
ICAgICBjb250ZXh0IHw9IFdFQktJVF9ISVRfVEVTVF9SRVNVTFRfQ09OVEVYVF9JTUFHRTsKIAot
ICAgIGNvbnN0IFN0cmluZyYgbWVkaWFVUkwgPSBoaXRUZXN0UmVzdWx0LT5hYnNvbHV0ZU1lZGlh
VVJMKCk7Ci0gICAgaWYgKCFtZWRpYVVSTC5pc0VtcHR5KCkpCisgICAgaWYgKCFoaXRUZXN0UmVz
dWx0LmFic29sdXRlTWVkaWFVUkwuaXNFbXB0eSgpKQogICAgICAgICBjb250ZXh0IHw9IFdFQktJ
VF9ISVRfVEVTVF9SRVNVTFRfQ09OVEVYVF9NRURJQTsKIAotICAgIGlmIChoaXRUZXN0UmVzdWx0
LT5pc0NvbnRlbnRFZGl0YWJsZSgpKQorICAgIGlmIChoaXRUZXN0UmVzdWx0LmlzQ29udGVudEVk
aXRhYmxlKQogICAgICAgICBjb250ZXh0IHw9IFdFQktJVF9ISVRfVEVTVF9SRVNVTFRfQ09OVEVY
VF9FRElUQUJMRTsKIAotICAgIGlmIChoaXRUZXN0UmVzdWx0LT5pc1Njcm9sbGJhcigpKQorICAg
IGlmIChoaXRUZXN0UmVzdWx0LmlzU2Nyb2xsYmFyKQogICAgICAgICBjb250ZXh0IHw9IFdFQktJ
VF9ISVRfVEVTVF9SRVNVTFRfQ09OVEVYVF9TQ1JPTExCQVI7CiAKLSAgICBjb25zdCBTdHJpbmcm
IGxpbmtUaXRsZSA9IGhpdFRlc3RSZXN1bHQtPmxpbmtUaXRsZSgpOwotICAgIGNvbnN0IFN0cmlu
ZyYgbGlua0xhYmVsID0gaGl0VGVzdFJlc3VsdC0+bGlua0xhYmVsKCk7Ci0KICAgICByZXR1cm4g
V0VCS0lUX0hJVF9URVNUX1JFU1VMVChnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfSElUX1RFU1Rf
UkVTVUxULAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
Y29udGV4dCIsIGNvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICJsaW5rLXVyaSIsICFsaW5rVVJMLmlzRW1wdHkoKSA/IGxpbmtVUkwudXRmOCgp
LmRhdGEoKSA6IDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICJpbWFnZS11cmkiLCAhaW1hZ2VVUkwuaXNFbXB0eSgpID8gaW1hZ2VVUkwudXRmOCgpLmRh
dGEoKSA6IDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICJtZWRpYS11cmkiLCAhbWVkaWFVUkwuaXNFbXB0eSgpID8gbWVkaWFVUkwudXRmOCgpLmRhdGEo
KSA6IDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJs
aW5rLXRpdGxlIiwgIWxpbmtUaXRsZS5pc0VtcHR5KCkgPyBsaW5rVGl0bGUudXRmOCgpLmRhdGEo
KSA6IDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJs
aW5rLWxhYmVsIiwgIWxpbmtMYWJlbC5pc0VtcHR5KCkgPyBsaW5rTGFiZWwudXRmOCgpLmRhdGEo
KSA6IDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5V
TEwpKTsKKyAgICAgICAgImNvbnRleHQiLCBjb250ZXh0LAorICAgICAgICAibGluay11cmkiLCBj
b250ZXh0ICYgV0VCS0lUX0hJVF9URVNUX1JFU1VMVF9DT05URVhUX0xJTksgPyBoaXRUZXN0UmVz
dWx0LmFic29sdXRlTGlua1VSTC51dGY4KCkuZGF0YSgpIDogbnVsbHB0ciwKKyAgICAgICAgImlt
YWdlLXVyaSIsIGNvbnRleHQgJiBXRUJLSVRfSElUX1RFU1RfUkVTVUxUX0NPTlRFWFRfSU1BR0Ug
PyBoaXRUZXN0UmVzdWx0LmFic29sdXRlSW1hZ2VVUkwudXRmOCgpLmRhdGEoKSA6IG51bGxwdHIs
CisgICAgICAgICJtZWRpYS11cmkiLCBjb250ZXh0ICYgV0VCS0lUX0hJVF9URVNUX1JFU1VMVF9D
T05URVhUX01FRElBID8gaGl0VGVzdFJlc3VsdC5hYnNvbHV0ZU1lZGlhVVJMLnV0ZjgoKS5kYXRh
KCkgOiBudWxscHRyLAorICAgICAgICAibGluay10aXRsZSIsICFoaXRUZXN0UmVzdWx0LmxpbmtU
aXRsZS5pc0VtcHR5KCkgPyBoaXRUZXN0UmVzdWx0LmxpbmtUaXRsZS51dGY4KCkuZGF0YSgpIDog
bnVsbHB0ciwKKyAgICAgICAgImxpbmstbGFiZWwiLCAhaGl0VGVzdFJlc3VsdC5saW5rTGFiZWwu
aXNFbXB0eSgpID8gaGl0VGVzdFJlc3VsdC5saW5rTGFiZWwudXRmOCgpLmRhdGEoKSA6IG51bGxw
dHIsCisgICAgICAgIG51bGxwdHIpKTsKIH0KIAogc3RhdGljIGJvb2wgc3RyaW5nSXNFcXVhbFRv
Q1N0cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZywgY29uc3QgQ1N0cmluZyYgY1N0cmluZykKQEAg
LTI2MSwxNiArMjU1LDE2IEBAIHN0YXRpYyBib29sIHN0cmluZ0lzRXF1YWxUb0NTdHJpbmcoY29u
c3QgU3RyaW5nJiBzdHJpbmcsIGNvbnN0IENTdHJpbmcmIGNTdHJpbmcpCiAgICAgcmV0dXJuICgo
c3RyaW5nLmlzRW1wdHkoKSAmJiBjU3RyaW5nLmlzTnVsbCgpKSB8fCAoc3RyaW5nLnV0ZjgoKSA9
PSBjU3RyaW5nKSk7CiB9CiAKLWJvb2wgd2Via2l0SGl0VGVzdFJlc3VsdENvbXBhcmUoV2ViS2l0
SGl0VGVzdFJlc3VsdCogaGl0VGVzdFJlc3VsdCwgV2ViSGl0VGVzdFJlc3VsdCogd2ViSGl0VGVz
dFJlc3VsdCkKK2Jvb2wgd2Via2l0SGl0VGVzdFJlc3VsdENvbXBhcmUoV2ViS2l0SGl0VGVzdFJl
c3VsdCogaGl0VGVzdFJlc3VsdCwgY29uc3QgV2ViSGl0VGVzdFJlc3VsdDo6RGF0YSYgd2ViSGl0
VGVzdFJlc3VsdCkKIHsKICAgICBXZWJLaXRIaXRUZXN0UmVzdWx0UHJpdmF0ZSogcHJpdiA9IGhp
dFRlc3RSZXN1bHQtPnByaXY7Ci0gICAgcmV0dXJuIHdlYkhpdFRlc3RSZXN1bHQtPmlzQ29udGVu
dEVkaXRhYmxlKCkgPT0gd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX2VkaXRhYmxl
KGhpdFRlc3RSZXN1bHQpCi0gICAgICAgICYmIHdlYkhpdFRlc3RSZXN1bHQtPmlzU2Nyb2xsYmFy
KCkgPT0gd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX3Njcm9sbGJhcihoaXRUZXN0
UmVzdWx0KQotICAgICAgICAmJiBzdHJpbmdJc0VxdWFsVG9DU3RyaW5nKHdlYkhpdFRlc3RSZXN1
bHQtPmFic29sdXRlTGlua1VSTCgpLCBwcml2LT5saW5rVVJJKQotICAgICAgICAmJiBzdHJpbmdJ
c0VxdWFsVG9DU3RyaW5nKHdlYkhpdFRlc3RSZXN1bHQtPmxpbmtUaXRsZSgpLCBwcml2LT5saW5r
VGl0bGUpCi0gICAgICAgICYmIHN0cmluZ0lzRXF1YWxUb0NTdHJpbmcod2ViSGl0VGVzdFJlc3Vs
dC0+bGlua0xhYmVsKCksIHByaXYtPmxpbmtMYWJlbCkKLSAgICAgICAgJiYgc3RyaW5nSXNFcXVh
bFRvQ1N0cmluZyh3ZWJIaXRUZXN0UmVzdWx0LT5hYnNvbHV0ZUltYWdlVVJMKCksIHByaXYtPmlt
YWdlVVJJKQotICAgICAgICAmJiBzdHJpbmdJc0VxdWFsVG9DU3RyaW5nKHdlYkhpdFRlc3RSZXN1
bHQtPmFic29sdXRlTWVkaWFVUkwoKSwgcHJpdi0+bWVkaWFVUkkpOworICAgIHJldHVybiB3ZWJI
aXRUZXN0UmVzdWx0LmlzQ29udGVudEVkaXRhYmxlID09IHdlYmtpdF9oaXRfdGVzdF9yZXN1bHRf
Y29udGV4dF9pc19lZGl0YWJsZShoaXRUZXN0UmVzdWx0KQorICAgICAgICAmJiB3ZWJIaXRUZXN0
UmVzdWx0LmlzU2Nyb2xsYmFyID09IHdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19z
Y3JvbGxiYXIoaGl0VGVzdFJlc3VsdCkKKyAgICAgICAgJiYgc3RyaW5nSXNFcXVhbFRvQ1N0cmlu
Zyh3ZWJIaXRUZXN0UmVzdWx0LmFic29sdXRlTGlua1VSTCwgcHJpdi0+bGlua1VSSSkKKyAgICAg
ICAgJiYgc3RyaW5nSXNFcXVhbFRvQ1N0cmluZyh3ZWJIaXRUZXN0UmVzdWx0LmxpbmtUaXRsZSwg
cHJpdi0+bGlua1RpdGxlKQorICAgICAgICAmJiBzdHJpbmdJc0VxdWFsVG9DU3RyaW5nKHdlYkhp
dFRlc3RSZXN1bHQubGlua0xhYmVsLCBwcml2LT5saW5rTGFiZWwpCisgICAgICAgICYmIHN0cmlu
Z0lzRXF1YWxUb0NTdHJpbmcod2ViSGl0VGVzdFJlc3VsdC5hYnNvbHV0ZUltYWdlVVJMLCBwcml2
LT5pbWFnZVVSSSkKKyAgICAgICAgJiYgc3RyaW5nSXNFcXVhbFRvQ1N0cmluZyh3ZWJIaXRUZXN0
UmVzdWx0LmFic29sdXRlTWVkaWFVUkwsIHByaXYtPm1lZGlhVVJJKTsKIH0KIAogLyoqCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRIaXRUZXN0UmVz
dWx0UHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0SGl0
VGVzdFJlc3VsdFByaXZhdGUuaAppbmRleCA3YmEyYzM4Li5hNjliMjRiIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRIaXRUZXN0UmVzdWx0UHJpdmF0
ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEhpdFRlc3RS
ZXN1bHRQcml2YXRlLmgKQEAgLTIzLDcgKzIzLDcgQEAKICNpbmNsdWRlICJXZWJLaXRIaXRUZXN0
UmVzdWx0LmgiCiAjaW5jbHVkZSAiV2ViS2l0UHJpdmF0ZS5oIgogCi1XZWJLaXRIaXRUZXN0UmVz
dWx0KiB3ZWJraXRIaXRUZXN0UmVzdWx0Q3JlYXRlKFdlYktpdDo6V2ViSGl0VGVzdFJlc3VsdCop
OwotYm9vbCB3ZWJraXRIaXRUZXN0UmVzdWx0Q29tcGFyZShXZWJLaXRIaXRUZXN0UmVzdWx0Kiwg
V2ViS2l0OjpXZWJIaXRUZXN0UmVzdWx0Kik7CitXZWJLaXRIaXRUZXN0UmVzdWx0KiB3ZWJraXRI
aXRUZXN0UmVzdWx0Q3JlYXRlKGNvbnN0IFdlYktpdDo6V2ViSGl0VGVzdFJlc3VsdDo6RGF0YSYp
OworYm9vbCB3ZWJraXRIaXRUZXN0UmVzdWx0Q29tcGFyZShXZWJLaXRIaXRUZXN0UmVzdWx0Kiwg
Y29uc3QgV2ViS2l0OjpXZWJIaXRUZXN0UmVzdWx0OjpEYXRhJik7CiAKICNlbmRpZiAvLyBXZWJL
aXRIaXRUZXN0UmVzdWx0UHJpdmF0ZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay9XZWJLaXROYXZpZ2F0aW9uQWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdE5hdmlnYXRpb25BY3Rpb24uY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0OWEwZTMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXROYXZpZ2F0aW9uQWN0aW9uLmNwcApA
QCAtMCwwICsxLDE1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBJZ2FsaWEgUy5MLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
KyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0TmF2aWdhdGlvbkFjdGlvbi5oIgor
CisjaW5jbHVkZSAiV2ViS2l0TmF2aWdhdGlvbkFjdGlvblByaXZhdGUuaCIKKyNpbmNsdWRlIDxn
ZGsvZ2RrLmg+CisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgorCit1c2luZyBuYW1l
c3BhY2UgV2ViS2l0OworCitHX0RFRklORV9CT1hFRF9UWVBFKFdlYktpdE5hdmlnYXRpb25BY3Rp
b24sIHdlYmtpdF9uYXZpZ2F0aW9uX2FjdGlvbiwgd2Via2l0X25hdmlnYXRpb25fYWN0aW9uX2Nv
cHksIHdlYmtpdF9uYXZpZ2F0aW9uX2FjdGlvbl9mcmVlKQorCitXZWJLaXROYXZpZ2F0aW9uQWN0
aW9uKiB3ZWJraXROYXZpZ2F0aW9uQWN0aW9uQ3JlYXRlKFdlYktpdFVSSVJlcXVlc3QqIHJlcXVl
c3QsIGNvbnN0IE5hdmlnYXRpb25BY3Rpb25EYXRhJiBuYXZpZ2F0aW9uQWN0aW9uRGF0YSkKK3sK
KyAgICBXZWJLaXROYXZpZ2F0aW9uQWN0aW9uKiBuYXZpZ2F0aW9uID0gZ19zbGljZV9uZXcwKFdl
YktpdE5hdmlnYXRpb25BY3Rpb24pOworICAgIG5ldyAobmF2aWdhdGlvbikgV2ViS2l0TmF2aWdh
dGlvbkFjdGlvbihyZXF1ZXN0LCBuYXZpZ2F0aW9uQWN0aW9uRGF0YSk7CisgICAgcmV0dXJuIG5h
dmlnYXRpb247Cit9CisKKy8qKgorICogd2Via2l0X25hdmlnYXRpb25fYWN0aW9uX2NvcHk6Cisg
KiBAbmF2aWdhdGlvbjogYSAjV2ViS2l0TmF2aWdhdGlvbkFjdGlvbgorICoKKyAqIE1ha2UgYSBj
b3B5IG9mIEBuYXZpZ2F0aW9uLgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogQSBj
b3B5IG9mIHBhc3NlZCBpbiAjV2ViS2l0TmF2aWdhdGlvbkFjdGlvbgorICoKKyAqIFNpbmNlOiAy
LjYKKyAqLworV2ViS2l0TmF2aWdhdGlvbkFjdGlvbiogd2Via2l0X25hdmlnYXRpb25fYWN0aW9u
X2NvcHkoV2ViS2l0TmF2aWdhdGlvbkFjdGlvbiogbmF2aWdhdGlvbikKK3sKKyAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChuYXZpZ2F0aW9uLCBudWxscHRyKTsKKworICAgIFdlYktpdE5hdmlnYXRp
b25BY3Rpb24qIGNvcHkgPSBnX3NsaWNlX25ldzAoV2ViS2l0TmF2aWdhdGlvbkFjdGlvbik7Cisg
ICAgbmV3IChjb3B5KSBXZWJLaXROYXZpZ2F0aW9uQWN0aW9uKG5hdmlnYXRpb24pOworICAgIHJl
dHVybiBjb3B5OworfQorCisvKioKKyAqIHdlYmtpdF9uYXZpZ2F0aW9uX2FjdGlvbl9mcmVlOgor
ICogQG5hdmlnYXRpb246IGEgI1dlYktpdE5hdmlnYXRpb25BY3Rpb24KKyAqCisgKiBGcmVlIHRo
ZSAjV2ViS2l0TmF2aWdhdGlvbkFjdGlvbgorICoKKyAqIFNpbmNlOiAyLjYKKyAqLwordm9pZCB3
ZWJraXRfbmF2aWdhdGlvbl9hY3Rpb25fZnJlZShXZWJLaXROYXZpZ2F0aW9uQWN0aW9uKiBuYXZp
Z2F0aW9uKQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwobmF2aWdhdGlvbik7CisKKyAgICBuYXZp
Z2F0aW9uLT5+V2ViS2l0TmF2aWdhdGlvbkFjdGlvbigpOworICAgIGdfc2xpY2VfZnJlZShXZWJL
aXROYXZpZ2F0aW9uQWN0aW9uLCBuYXZpZ2F0aW9uKTsKK30KKworLyoqCisgKiB3ZWJraXRfbmF2
aWdhdGlvbl9hY3Rpb25fZ2V0X25hdmlnYXRpb25fdHlwZToKKyAqIEBuYXZpZ2F0aW9uOiBhICNX
ZWJLaXROYXZpZ2F0aW9uQWN0aW9uCisgKgorICogUnR1ZW4gdGhlIHR5cGUgb2YgYWN0aW9uIHRo
YXQgdHJpZ2dlcmVkIHRoZSBuYXZpZ2F0aW9uLgorICoKKyAqIFJldHVybnM6IGEgI1dlYktpdE5h
dmlnYXRpb25UeXBlCisgKgorICogU2luY2U6IDIuNgorICovCitXZWJLaXROYXZpZ2F0aW9uVHlw
ZSB3ZWJraXRfbmF2aWdhdGlvbl9hY3Rpb25fZ2V0X25hdmlnYXRpb25fdHlwZShXZWJLaXROYXZp
Z2F0aW9uQWN0aW9uKiBuYXZpZ2F0aW9uKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKG5h
dmlnYXRpb24sIFdFQktJVF9OQVZJR0FUSU9OX1RZUEVfT1RIRVIpOworICAgIHJldHVybiBuYXZp
Z2F0aW9uLT50eXBlOworfQorCisvKioKKyAqIHdlYmtpdF9uYXZpZ2F0aW9uX2FjdGlvbl9nZXRf
bW91c2VfYnV0dG9uOgorICogQG5hdmlnYXRpb246IGEgI1dlYktpdE5hdmlnYXRpb25BY3Rpb24K
KyAqCisgKiBSZXR1cm4gdGhlIG51bWJlciBvZiB0aGUgbW91c2UgYnV0dG9uIHRoYXQgdHJpZ2dl
cmVkIHRoZSBuYXZpZ2F0aW9uLCBvciAwIGlmCisgKiB0aGUgbmF2aWdhdGlvbiB3YXMgbm90IHN0
YXJ0ZWQgYnkgYSBtb3VzZSBldmVudC4KKyAqCisgKiBSZXR1cm5zOiB0aGUgbW91c2UgYnV0dG9u
IG51bWJlciBvciAwCisgKgorICogU2luY2U6IDIuNgorICovCit1bnNpZ25lZCB3ZWJraXRfbmF2
aWdhdGlvbl9hY3Rpb25fZ2V0X21vdXNlX2J1dHRvbihXZWJLaXROYXZpZ2F0aW9uQWN0aW9uKiBu
YXZpZ2F0aW9uKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKG5hdmlnYXRpb24sIDApOwor
ICAgIHJldHVybiBuYXZpZ2F0aW9uLT5tb3VzZUJ1dHRvbjsKK30KKworLyoqCisgKiB3ZWJraXRf
bmF2aWdhdGlvbl9hY3Rpb25fZ2V0X21vZGlmaWVyczoKKyAqIEBuYXZpZ2F0aW9uOiBhICNXZWJL
aXROYXZpZ2F0aW9uQWN0aW9uCisgKgorICogUmV0dXJuIGEgYml0bWFzayBvZiAjR2RrTW9kaWZp
ZXJUeXBlIHZhbHVlcyBkZXNjcmliaW5nIHRoZSBtb2RpZmllciBrZXlzIHRoYXQgd2VyZSBpbiBl
ZmZlY3QKKyAqIHdoZW4gdGhlIG5hdmlnYXRpb24gd2FzIHJlcXVlc3RlZAorICoKKyAqIFJldHVy
bnM6IHRoZSBtb2RpZmllciBrZXlzCisgKgorICogU2luY2U6IDIuNgorICovCit1bnNpZ25lZCB3
ZWJraXRfbmF2aWdhdGlvbl9hY3Rpb25fZ2V0X21vZGlmaWVycyhXZWJLaXROYXZpZ2F0aW9uQWN0
aW9uKiBuYXZpZ2F0aW9uKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKG5hdmlnYXRpb24s
IDApOworICAgIHJldHVybiBuYXZpZ2F0aW9uLT5tb2RpZmllcnM7Cit9CisKKy8qKgorICogd2Vi
a2l0X25hdmlnYXRpb25fYWN0aW9uX2dldF9yZXF1ZXN0OgorICogQG5hdmlnYXRpb246IGEgI1dl
YktpdE5hdmlnYXRpb25BY3Rpb24KKyAqCisgKiBSZXR1cm4gdGhlIG5hdmlnYXRpb24gI1dlYktp
dFVSSVJlcXVlc3QKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6IGEgI1dlYktpdFVS
SVJlcXVlc3QKKyAqCisgKiBTaW5jZTogMi42CisgKi8KK1dlYktpdFVSSVJlcXVlc3QqIHdlYmtp
dF9uYXZpZ2F0aW9uX2FjdGlvbl9nZXRfcmVxdWVzdChXZWJLaXROYXZpZ2F0aW9uQWN0aW9uKiBu
YXZpZ2F0aW9uKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKG5hdmlnYXRpb24sIG51bGxw
dHIpOworICAgIHJldHVybiBuYXZpZ2F0aW9uLT5yZXF1ZXN0LmdldCgpOworfQorCisvKioKKyAq
IHdlYmtpdF9uYXZpZ2F0aW9uX2FjdGlvbl9pc191c2VyX2dlc3R1cmU6CisgKiBAbmF2aWdhdGlv
bjogYSAjV2ViS2l0TmF2aWdhdGlvbkFjdGlvbgorICoKKyAqIFJldHVybiB3aGV0aGVyIHRoZSBu
YXZpZ2F0aW9uIHdhcyB0cmlnZ2VyZWQgYnkgYSB1c2VyIGdlc3R1cmUgbGlrZSBhIG1vdXNlIGNs
aWNrLgorICoKKyAqIFJldHVybnM6IHdoZXRoZXIgbmF2aWdhdGlvbiBhY3Rpb24gaXMgYSB1c2Vy
IGdlc3R1cmUKKyAqCisgKiBTaW5jZTogMi42CisgKi8KK2dib29sZWFuIHdlYmtpdF9uYXZpZ2F0
aW9uX2FjdGlvbl9pc191c2VyX2dlc3R1cmUoV2ViS2l0TmF2aWdhdGlvbkFjdGlvbiogbmF2aWdh
dGlvbikKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChuYXZpZ2F0aW9uLCBGQUxTRSk7Cisg
ICAgcmV0dXJuIG5hdmlnYXRpb24tPmlzVXNlckdlc3R1cmU7Cit9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXROYXZpZ2F0aW9uQWN0aW9uLmggYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXROYXZpZ2F0aW9uQWN0aW9uLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWU5NTU4NgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdE5hdmlnYXRpb25B
Y3Rpb24uaApAQCAtMCwwICsxLDg0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IElnYWxp
YSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
ICovCisKKyNpZiAhZGVmaW5lZChfX1dFQktJVDJfSF9JTlNJREVfXykgJiYgIWRlZmluZWQoV0VC
S0lUMl9DT01QSUxBVElPTikKKyNlcnJvciAiT25seSA8d2Via2l0Mi93ZWJraXQyLmg+IGNhbiBi
ZSBpbmNsdWRlZCBkaXJlY3RseS4iCisjZW5kaWYKKworI2lmbmRlZiBXZWJLaXROYXZpZ2F0aW9u
QWN0aW9uX2gKKyNkZWZpbmUgV2ViS2l0TmF2aWdhdGlvbkFjdGlvbl9oCisKKyNpbmNsdWRlIDxn
bGliLW9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0RGVmaW5lcy5oPgorI2luY2x1
ZGUgPHdlYmtpdDIvV2ViS2l0VVJJUmVxdWVzdC5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZp
bmUgV0VCS0lUX1RZUEVfTkFWSUdBVElPTl9BQ1RJT04gKHdlYmtpdF9uYXZpZ2F0aW9uX2FjdGlv
bl9nZXRfdHlwZSgpKQorCisvKioKKyAqIFdlYktpdE5hdmlnYXRpb25UeXBlOgorICogQFdFQktJ
VF9OQVZJR0FUSU9OX1RZUEVfTElOS19DTElDS0VEOiBUaGUgbmF2aWdhdGlvbiB3YXMgdHJpZ2dl
cmVkIGJ5IGNsaWNraW5nIGEgbGluay4KKyAqIEBXRUJLSVRfTkFWSUdBVElPTl9UWVBFX0ZPUk1f
U1VCTUlUVEVEOiBUaGUgbmF2aWdhdGlvbiB3YXMgdHJpZ2dlcmVkIGJ5IHN1Ym1pdHRpbmcgYSBm
b3JtLgorICogQFdFQktJVF9OQVZJR0FUSU9OX1RZUEVfQkFDS19GT1JXQVJEOiBUaGUgbmF2aWdh
dGlvbiB3YXMgdHJpZ2dlcmVkIGJ5IG5hdmlnYXRpbmcgZm9yd2FyZCBvciBiYWNrd2FyZC4KKyAq
IEBXRUJLSVRfTkFWSUdBVElPTl9UWVBFX1JFTE9BRDogVGhlIG5hdmlnYXRpb24gd2FzIHRyaWdn
ZXJlZCBieSByZWxvYWRpbmcuCisgKiBAV0VCS0lUX05BVklHQVRJT05fVFlQRV9GT1JNX1JFU1VC
TUlUVEVEOiBUaGUgbmF2aWdhdGlvbiB3YXMgdHJpZ2dlcmVkIGJ5IHJlc3VibWl0dGluZyBhIGZv
cm0uCisgKiBAV0VCS0lUX05BVklHQVRJT05fVFlQRV9PVEhFUjogVGhlIG5hdmlnYXRpb24gd2Fz
IHRyaWdnZXJlZCBieSBzb21lIG90aGVyIGFjdGlvbi4KKyAqCisgKiBFbnVtIHZhbHVlcyB1c2Vk
IHRvIGRlbm90ZSB0aGUgdmFyaW91cyBuYXZpZ2F0aW9uIHR5cGVzLgorICovCit0eXBlZGVmIGVu
dW0geworICAgIFdFQktJVF9OQVZJR0FUSU9OX1RZUEVfTElOS19DTElDS0VELAorICAgIFdFQktJ
VF9OQVZJR0FUSU9OX1RZUEVfRk9STV9TVUJNSVRURUQsCisgICAgV0VCS0lUX05BVklHQVRJT05f
VFlQRV9CQUNLX0ZPUldBUkQsCisgICAgV0VCS0lUX05BVklHQVRJT05fVFlQRV9SRUxPQUQsCisg
ICAgV0VCS0lUX05BVklHQVRJT05fVFlQRV9GT1JNX1JFU1VCTUlUVEVELAorICAgIFdFQktJVF9O
QVZJR0FUSU9OX1RZUEVfT1RIRVIKK30gV2ViS2l0TmF2aWdhdGlvblR5cGU7CisKK3R5cGVkZWYg
c3RydWN0IF9XZWJLaXROYXZpZ2F0aW9uQWN0aW9uIFdlYktpdE5hdmlnYXRpb25BY3Rpb247CisK
KworV0VCS0lUX0FQSSBHVHlwZQord2Via2l0X25hdmlnYXRpb25fYWN0aW9uX2dldF90eXBlICAg
ICAgICAgICAgKHZvaWQpOworCitXRUJLSVRfQVBJIFdlYktpdE5hdmlnYXRpb25BY3Rpb24gKgor
d2Via2l0X25hdmlnYXRpb25fYWN0aW9uX2NvcHkgICAgICAgICAgICAgICAgKFdlYktpdE5hdmln
YXRpb25BY3Rpb24gKm5hdmlnYXRpb24pOworCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9uYXZp
Z2F0aW9uX2FjdGlvbl9mcmVlICAgICAgICAgICAgICAgIChXZWJLaXROYXZpZ2F0aW9uQWN0aW9u
ICpuYXZpZ2F0aW9uKTsKKworV0VCS0lUX0FQSSBXZWJLaXROYXZpZ2F0aW9uVHlwZQord2Via2l0
X25hdmlnYXRpb25fYWN0aW9uX2dldF9uYXZpZ2F0aW9uX3R5cGUgKFdlYktpdE5hdmlnYXRpb25B
Y3Rpb24gKm5hdmlnYXRpb24pOworCitXRUJLSVRfQVBJIGd1aW50Cit3ZWJraXRfbmF2aWdhdGlv
bl9hY3Rpb25fZ2V0X21vdXNlX2J1dHRvbiAgICAoV2ViS2l0TmF2aWdhdGlvbkFjdGlvbiAqbmF2
aWdhdGlvbik7CisKK1dFQktJVF9BUEkgZ3VpbnQKK3dlYmtpdF9uYXZpZ2F0aW9uX2FjdGlvbl9n
ZXRfbW9kaWZpZXJzICAgICAgIChXZWJLaXROYXZpZ2F0aW9uQWN0aW9uICpuYXZpZ2F0aW9uKTsK
KworV0VCS0lUX0FQSSBXZWJLaXRVUklSZXF1ZXN0ICoKK3dlYmtpdF9uYXZpZ2F0aW9uX2FjdGlv
bl9nZXRfcmVxdWVzdCAgICAgICAgIChXZWJLaXROYXZpZ2F0aW9uQWN0aW9uICpuYXZpZ2F0aW9u
KTsKKworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0X25hdmlnYXRpb25fYWN0aW9uX2lzX3Vz
ZXJfZ2VzdHVyZSAgICAgKFdlYktpdE5hdmlnYXRpb25BY3Rpb24gKm5hdmlnYXRpb24pOworCitH
X0VORF9ERUNMUworCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdE5hdmlnYXRpb25BY3Rpb25Qcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXROYXZpZ2F0aW9uQWN0aW9uUHJpdmF0ZS5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3ZmM4YjMKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXROYXZpZ2F0aW9uQWN0aW9u
UHJpdmF0ZS5oCkBAIC0wLDAgKzEsNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgSWdh
bGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CisgKi8KKworI2lmbmRlZiBXZWJLaXROYXZpZ2F0aW9uQWN0aW9uUHJpdmF0ZV9oCisjZGVmaW5l
IFdlYktpdE5hdmlnYXRpb25BY3Rpb25Qcml2YXRlX2gKKworI2luY2x1ZGUgIk5hdmlnYXRpb25B
Y3Rpb25EYXRhLmgiCisjaW5jbHVkZSAiV2ViS2l0TmF2aWdhdGlvbkFjdGlvbi5oIgorI2luY2x1
ZGUgIldlYktpdFByaXZhdGUuaCIKKworc3RydWN0IF9XZWJLaXROYXZpZ2F0aW9uQWN0aW9uIHsK
KyAgICBfV2ViS2l0TmF2aWdhdGlvbkFjdGlvbihXZWJLaXRVUklSZXF1ZXN0KiB1cmlSZXF1ZXN0
LCBjb25zdCBXZWJLaXQ6Ok5hdmlnYXRpb25BY3Rpb25EYXRhJiBuYXZpZ2F0aW9uQWN0aW9uRGF0
YSkKKyAgICAgICAgOiB0eXBlKHRvV2ViS2l0TmF2aWdhdGlvblR5cGUobmF2aWdhdGlvbkFjdGlv
bkRhdGEubmF2aWdhdGlvblR5cGUpKQorICAgICAgICAsIG1vdXNlQnV0dG9uKHRvV2ViS2l0TW91
c2VCdXR0b24obmF2aWdhdGlvbkFjdGlvbkRhdGEubW91c2VCdXR0b24pKQorICAgICAgICAsIG1v
ZGlmaWVycyh0b0dka01vZGlmaWVycyhuYXZpZ2F0aW9uQWN0aW9uRGF0YS5tb2RpZmllcnMpKQor
ICAgICAgICAsIGlzVXNlckdlc3R1cmUobmF2aWdhdGlvbkFjdGlvbkRhdGEuaXNQcm9jZXNzaW5n
VXNlckdlc3R1cmUpCisgICAgICAgICwgcmVxdWVzdCh1cmlSZXF1ZXN0KQorICAgIHsKKyAgICB9
CisKKyAgICBfV2ViS2l0TmF2aWdhdGlvbkFjdGlvbihXZWJLaXROYXZpZ2F0aW9uQWN0aW9uKiBu
YXZpZ2F0aW9uKQorICAgICAgICA6IHR5cGUobmF2aWdhdGlvbi0+dHlwZSkKKyAgICAgICAgLCBt
b3VzZUJ1dHRvbihuYXZpZ2F0aW9uLT5tb3VzZUJ1dHRvbikKKyAgICAgICAgLCBtb2RpZmllcnMo
bmF2aWdhdGlvbi0+bW9kaWZpZXJzKQorICAgICAgICAsIGlzVXNlckdlc3R1cmUobmF2aWdhdGlv
bi0+aXNVc2VyR2VzdHVyZSkKKyAgICAgICAgLCByZXF1ZXN0KG5hdmlnYXRpb24tPnJlcXVlc3Qp
CisgICAgeworICAgIH0KKworICAgIFdlYktpdE5hdmlnYXRpb25UeXBlIHR5cGU7CisgICAgdW5z
aWduZWQgbW91c2VCdXR0b247CisgICAgdW5zaWduZWQgbW9kaWZpZXJzOworICAgIGJvb2wgaXNV
c2VyR2VzdHVyZSA6IDE7CisgICAgR1JlZlB0cjxXZWJLaXRVUklSZXF1ZXN0PiByZXF1ZXN0Owor
fTsKKworV2ViS2l0TmF2aWdhdGlvbkFjdGlvbiogd2Via2l0TmF2aWdhdGlvbkFjdGlvbkNyZWF0
ZShXZWJLaXRVUklSZXF1ZXN0KiwgY29uc3QgV2ViS2l0OjpOYXZpZ2F0aW9uQWN0aW9uRGF0YSYp
OworCisjZW5kaWYgLy8gV2ViS2l0TmF2aWdhdGlvbkFjdGlvblByaXZhdGVfaApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0TmF2aWdhdGlvblBvbGlj
eURlY2lzaW9uLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXROYXZp
Z2F0aW9uUG9saWN5RGVjaXNpb24uaAppbmRleCA3NTEzOTc3Li5lODUyNDYxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXROYXZpZ2F0aW9uUG9saWN5
RGVjaXNpb24uaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRO
YXZpZ2F0aW9uUG9saWN5RGVjaXNpb24uaApAQCAtMjYsMzEgKzI2LDEyIEBACiAKICNpbmNsdWRl
IDxnbGliLW9iamVjdC5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0RGVmaW5lcy5oPgorI2lu
Y2x1ZGUgPHdlYmtpdDIvV2ViS2l0TmF2aWdhdGlvbkFjdGlvbi5oPgogI2luY2x1ZGUgPHdlYmtp
dDIvV2ViS2l0UG9saWN5RGVjaXNpb24uaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdFVSSVJl
cXVlc3QuaD4KIAogR19CRUdJTl9ERUNMUwogCi0vKioKLSAqIFdlYktpdE5hdmlnYXRpb25UeXBl
OgotICogQFdFQktJVF9OQVZJR0FUSU9OX1RZUEVfTElOS19DTElDS0VEOiBUaGUgbmF2aWdhdGlv
biB3YXMgdHJpZ2dlcmVkIGJ5IGNsaWNraW5nIGEgbGluay4KLSAqIEBXRUJLSVRfTkFWSUdBVElP
Tl9UWVBFX0ZPUk1fU1VCTUlUVEVEOiBUaGUgbmF2aWdhdGlvbiB3YXMgdHJpZ2dlcmVkIGJ5IHN1
Ym1pdHRpbmcgYSBmb3JtLgotICogQFdFQktJVF9OQVZJR0FUSU9OX1RZUEVfQkFDS19GT1JXQVJE
OiBUaGUgbmF2aWdhdGlvbiB3YXMgdHJpZ2dlcmVkIGJ5IG5hdmlnYXRpbmcgZm9yd2FyZCBvciBi
YWNrd2FyZC4KLSAqIEBXRUJLSVRfTkFWSUdBVElPTl9UWVBFX1JFTE9BRDogVGhlIG5hdmlnYXRp
b24gd2FzIHRyaWdnZXJlZCBieSByZWxvYWRpbmcuCi0gKiBAV0VCS0lUX05BVklHQVRJT05fVFlQ
RV9GT1JNX1JFU1VCTUlUVEVEOiBUaGUgbmF2aWdhdGlvbiB3YXMgdHJpZ2dlcmVkIGJ5IHJlc3Vi
bWl0dGluZyBhIGZvcm0uCi0gKiBAV0VCS0lUX05BVklHQVRJT05fVFlQRV9PVEhFUjogVGhlIG5h
dmlnYXRpb24gd2FzIHRyaWdnZXJlZCBieSBzb21lIG90aGVyIGFjdGlvbi4KLSAqCi0gKiBFbnVt
IHZhbHVlcyB1c2VkIHRvIGRlbm90ZSB0aGUgdmFyaW91cyBuYXZpZ2F0aW9uIHR5cGVzLgotICov
Ci10eXBlZGVmIGVudW0gewotICAgIFdFQktJVF9OQVZJR0FUSU9OX1RZUEVfTElOS19DTElDS0VE
LAotICAgIFdFQktJVF9OQVZJR0FUSU9OX1RZUEVfRk9STV9TVUJNSVRURUQsCi0gICAgV0VCS0lU
X05BVklHQVRJT05fVFlQRV9CQUNLX0ZPUldBUkQsCi0gICAgV0VCS0lUX05BVklHQVRJT05fVFlQ
RV9SRUxPQUQsCi0gICAgV0VCS0lUX05BVklHQVRJT05fVFlQRV9GT1JNX1JFU1VCTUlUVEVELAot
ICAgIFdFQktJVF9OQVZJR0FUSU9OX1RZUEVfT1RIRVIsCi19IFdlYktpdE5hdmlnYXRpb25UeXBl
OwotCiAjZGVmaW5lIFdFQktJVF9UWVBFX05BVklHQVRJT05fUE9MSUNZX0RFQ0lTSU9OICAgICAg
ICAgICAgKHdlYmtpdF9uYXZpZ2F0aW9uX3BvbGljeV9kZWNpc2lvbl9nZXRfdHlwZSgpKQogI2Rl
ZmluZSBXRUJLSVRfTkFWSUdBVElPTl9QT0xJQ1lfREVDSVNJT04ob2JqKSAgICAgICAgICAgIChH
X1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX1RZUEVfTkFWSUdBVElPTl9Q
T0xJQ1lfREVDSVNJT04sIFdlYktpdE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbikpCiAjZGVmaW5l
IFdFQktJVF9OQVZJR0FUSU9OX1BPTElDWV9ERUNJU0lPTl9DTEFTUyhrbGFzcykgICAgKEdfVFlQ
RV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfVFlQRV9OQVZJR0FUSU9OX1BPTElD
WV9ERUNJU0lPTiwgV2ViS2l0TmF2aWdhdGlvblBvbGljeURlY2lzaW9uQ2xhc3MpKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0UHJpdmF0ZS5jcHAg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRQcml2YXRlLmNwcAppbmRl
eCA1ZThmOWM1Li4yMDZjYmNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXRQcml2YXRlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXRQcml2YXRlLmNwcApAQCAtMjEsNiArMjEsNyBAQAogI2luY2x1ZGUgIldl
YktpdFByaXZhdGUuaCIKIAogI2luY2x1ZGUgIkVycm9yc0d0ay5oIgorI2luY2x1ZGUgIldlYkV2
ZW50LmgiCiAjaW5jbHVkZSAiV2ViS2l0RXJyb3IuaCIKICNpbmNsdWRlIDxnZGsvZ2RrLmg+CiAK
QEAgLTM4LDYgKzM5LDU3IEBAIHVuc2lnbmVkIHdrRXZlbnRNb2RpZmllcnNUb0dka01vZGlmaWVy
cyhXS0V2ZW50TW9kaWZpZXJzIHdrTW9kaWZpZXJzKQogICAgIHJldHVybiBtb2RpZmllcnM7CiB9
CiAKK3Vuc2lnbmVkIHRvR2RrTW9kaWZpZXJzKFdlYktpdDo6V2ViRXZlbnQ6Ok1vZGlmaWVycyB3
a01vZGlmaWVycykKK3sKKyAgICB1bnNpZ25lZCBtb2RpZmllcnMgPSAwOworICAgIGlmICh3a01v
ZGlmaWVycyAmIFdlYktpdDo6V2ViRXZlbnQ6Ok1vZGlmaWVyczo6U2hpZnRLZXkpCisgICAgICAg
IG1vZGlmaWVycyB8PSBHREtfU0hJRlRfTUFTSzsKKyAgICBpZiAod2tNb2RpZmllcnMgJiBXZWJL
aXQ6OldlYkV2ZW50OjpNb2RpZmllcnM6OkNvbnRyb2xLZXkpCisgICAgICAgIG1vZGlmaWVycyB8
PSBHREtfQ09OVFJPTF9NQVNLOworICAgIGlmICh3a01vZGlmaWVycyAmIFdlYktpdDo6V2ViRXZl
bnQ6Ok1vZGlmaWVyczo6QWx0S2V5KQorICAgICAgICBtb2RpZmllcnMgfD0gR0RLX01PRDFfTUFT
SzsKKyAgICBpZiAod2tNb2RpZmllcnMgJiBXZWJLaXQ6OldlYkV2ZW50OjpNb2RpZmllcnM6Ok1l
dGFLZXkpCisgICAgICAgIG1vZGlmaWVycyB8PSBHREtfTUVUQV9NQVNLOworICAgIHJldHVybiBt
b2RpZmllcnM7Cit9CisKK1dlYktpdE5hdmlnYXRpb25UeXBlIHRvV2ViS2l0TmF2aWdhdGlvblR5
cGUoV2ViQ29yZTo6TmF2aWdhdGlvblR5cGUgdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsK
KyAgICBjYXNlIFdlYkNvcmU6Ok5hdmlnYXRpb25UeXBlOjpOYXZpZ2F0aW9uVHlwZUxpbmtDbGlj
a2VkOgorICAgICAgICByZXR1cm4gV0VCS0lUX05BVklHQVRJT05fVFlQRV9MSU5LX0NMSUNLRUQ7
CisgICAgY2FzZSBXZWJDb3JlOjpOYXZpZ2F0aW9uVHlwZTo6TmF2aWdhdGlvblR5cGVGb3JtU3Vi
bWl0dGVkOgorICAgICAgICByZXR1cm4gV0VCS0lUX05BVklHQVRJT05fVFlQRV9GT1JNX1NVQk1J
VFRFRDsKKyAgICBjYXNlIFdlYkNvcmU6Ok5hdmlnYXRpb25UeXBlOjpOYXZpZ2F0aW9uVHlwZUJh
Y2tGb3J3YXJkOgorICAgICAgICByZXR1cm4gV0VCS0lUX05BVklHQVRJT05fVFlQRV9CQUNLX0ZP
UldBUkQ7CisgICAgY2FzZSBXZWJDb3JlOjpOYXZpZ2F0aW9uVHlwZTo6TmF2aWdhdGlvblR5cGVS
ZWxvYWQ6CisgICAgICAgIHJldHVybiBXRUJLSVRfTkFWSUdBVElPTl9UWVBFX1JFTE9BRDsKKyAg
ICBjYXNlIFdlYkNvcmU6Ok5hdmlnYXRpb25UeXBlOjpOYXZpZ2F0aW9uVHlwZUZvcm1SZXN1Ym1p
dHRlZDoKKyAgICAgICAgcmV0dXJuIFdFQktJVF9OQVZJR0FUSU9OX1RZUEVfRk9STV9SRVNVQk1J
VFRFRDsKKyAgICBjYXNlIFdlYkNvcmU6Ok5hdmlnYXRpb25UeXBlOjpOYXZpZ2F0aW9uVHlwZU90
aGVyOgorICAgICAgICByZXR1cm4gV0VCS0lUX05BVklHQVRJT05fVFlQRV9PVEhFUjsKKyAgICBk
ZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIFdF
QktJVF9OQVZJR0FUSU9OX1RZUEVfT1RIRVI7CisgICAgfQorfQorCit1bnNpZ25lZCB0b1dlYktp
dE1vdXNlQnV0dG9uKFdlYktpdDo6V2ViTW91c2VFdmVudDo6QnV0dG9uIGJ1dHRvbikKK3sKKyAg
ICBzd2l0Y2ggKGJ1dHRvbikgeworICAgIGNhc2UgV2ViS2l0OjpXZWJNb3VzZUV2ZW50OjpCdXR0
b246Ok5vQnV0dG9uOgorICAgICAgICByZXR1cm4gMDsKKyAgICBjYXNlIFdlYktpdDo6V2ViTW91
c2VFdmVudDo6QnV0dG9uOjpMZWZ0QnV0dG9uOgorICAgICAgICByZXR1cm4gMTsKKyAgICBjYXNl
IFdlYktpdDo6V2ViTW91c2VFdmVudDo6QnV0dG9uOjpNaWRkbGVCdXR0b246CisgICAgICAgIHJl
dHVybiAyOworICAgIGNhc2UgV2ViS2l0OjpXZWJNb3VzZUV2ZW50OjpCdXR0b246OlJpZ2h0QnV0
dG9uOgorICAgICAgICByZXR1cm4gMzsKKyAgICB9CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgcmV0dXJuIDA7Cit9CisKIHVuc2lnbmVkIHdrRXZlbnRNb3VzZUJ1dHRvblRvV2ViS2l0
TW91c2VCdXR0b24oV0tFdmVudE1vdXNlQnV0dG9uIHdrQnV0dG9uKQogewogICAgIHN3aXRjaCAo
d2tCdXR0b24pIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdFByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktp
dFByaXZhdGUuaAppbmRleCBmYWIwODY1Li5hNTRlMTRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRQcml2YXRlLmgKKysrIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0UHJpdmF0ZS5oCkBAIC0yNiw2ICsyNiw3IEBACiAj
aWZuZGVmIFdlYktpdFByaXZhdGVfaAogI2RlZmluZSBXZWJLaXRQcml2YXRlX2gKIAorI2luY2x1
ZGUgIldlYktpdE5hdmlnYXRpb25BY3Rpb24uaCIKICNpbmNsdWRlIDxXZWJLaXQvV0tBUElDYXN0
Lmg+CiAjaW5jbHVkZSA8V2ViS2l0L1dLRG93bmxvYWQuaD4KICNpbmNsdWRlIDxXZWJLaXQvV0tG
aW5kT3B0aW9ucy5oPgpAQCAtMTE1LDYgKzExNiw5IEBAIEdUeXBlIHR5cGVfbmFtZSMjX2dldF90
eXBlKHZvaWQpIFwKIAogdW5zaWduZWQgd2tFdmVudE1vZGlmaWVyc1RvR2RrTW9kaWZpZXJzKFdL
RXZlbnRNb2RpZmllcnMpOwogdW5zaWduZWQgd2tFdmVudE1vdXNlQnV0dG9uVG9XZWJLaXRNb3Vz
ZUJ1dHRvbihXS0V2ZW50TW91c2VCdXR0b24pOwordW5zaWduZWQgdG9HZGtNb2RpZmllcnMoV2Vi
S2l0OjpXZWJFdmVudDo6TW9kaWZpZXJzKTsKK1dlYktpdE5hdmlnYXRpb25UeXBlIHRvV2ViS2l0
TmF2aWdhdGlvblR5cGUoV2ViQ29yZTo6TmF2aWdhdGlvblR5cGUpOwordW5zaWduZWQgdG9XZWJL
aXRNb3VzZUJ1dHRvbihXZWJLaXQ6OldlYk1vdXNlRXZlbnQ6OkJ1dHRvbik7CiB1bnNpZ25lZCB0
b1dlYktpdEVycm9yKHVuc2lnbmVkIHdlYkNvcmVFcnJvcik7CiB1bnNpZ25lZCB0b1dlYkNvcmVF
cnJvcih1bnNpZ25lZCB3ZWJLaXRFcnJvcik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFVJQ2xpZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFVJQ2xpZW50LmNwcAppbmRleCA5ZTBlZjY4Li45ZDZhOGVj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRVSUNs
aWVudC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0VUlD
bGllbnQuY3BwCkBAIC0yMCw5ICsyMCwxMiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1
ZGUgIldlYktpdFVJQ2xpZW50LmgiCiAKKyNpbmNsdWRlICJBUElVSUNsaWVudC5oIgogI2luY2x1
ZGUgIldlYktpdEZpbGVDaG9vc2VyUmVxdWVzdFByaXZhdGUuaCIKICNpbmNsdWRlICJXZWJLaXRH
ZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdE5h
dmlnYXRpb25BY3Rpb25Qcml2YXRlLmgiCiAjaW5jbHVkZSAiV2ViS2l0UHJpdmF0ZS5oIgorI2lu
Y2x1ZGUgIldlYktpdFVSSVJlcXVlc3RQcml2YXRlLmgiCiAjaW5jbHVkZSAiV2ViS2l0V2ViVmll
d0Jhc2VQcml2YXRlLmgiCiAjaW5jbHVkZSAiV2ViS2l0V2ViVmlld1ByaXZhdGUuaCIKICNpbmNs
dWRlICJXZWJLaXRXaW5kb3dQcm9wZXJ0aWVzUHJpdmF0ZS5oIgpAQCAtMzIsMTg3ICszNSwxNDcg
QEAKIAogdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKIAotc3RhdGljIFdLUGFnZVJlZiBjcmVhdGVO
ZXdQYWdlKFdLUGFnZVJlZiwgV0tVUkxSZXF1ZXN0UmVmLCBXS0RpY3Rpb25hcnlSZWYgd2tXaW5k
b3dGZWF0dXJlcywgV0tFdmVudE1vZGlmaWVycywgV0tFdmVudE1vdXNlQnV0dG9uLCBjb25zdCB2
b2lkKiBjbGllbnRJbmZvKQotewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxXS1BhZ2VSZWY+KHRv
QVBJKHdlYmtpdFdlYlZpZXdDcmVhdGVOZXdQYWdlKFdFQktJVF9XRUJfVklFVyhjbGllbnRJbmZv
KSwgdG9JbXBsKHdrV2luZG93RmVhdHVyZXMpKSkpOwotfQorY2xhc3MgVUlDbGllbnQgOiBwdWJs
aWMgQVBJOjpVSUNsaWVudCB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgVUlDbGllbnQoV2ViS2l0
V2ViVmlldyogd2ViVmlldykKKyAgICAgICAgOiBtX3dlYlZpZXcod2ViVmlldykKKyAgICB7Cisg
ICAgfQogCi1zdGF0aWMgdm9pZCBzaG93UGFnZShXS1BhZ2VSZWYsIGNvbnN0IHZvaWQqIGNsaWVu
dEluZm8pCi17Ci0gICAgd2Via2l0V2ViVmlld1JlYWR5VG9TaG93UGFnZShXRUJLSVRfV0VCX1ZJ
RVcoY2xpZW50SW5mbykpOwotfQorcHJpdmF0ZToKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8V2Vi
UGFnZVByb3h5PiBjcmVhdGVOZXdQYWdlKFdlYlBhZ2VQcm94eSosIFdlYkZyYW1lUHJveHkqLCBj
b25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlc291cmNlUmVxdWVzdCwgY29uc3QgV2Vi
Q29yZTo6V2luZG93RmVhdHVyZXMmIHdpbmRvd0ZlYXR1cmVzLCBjb25zdCBOYXZpZ2F0aW9uQWN0
aW9uRGF0YSYgbmF2aWdhdGlvbkFjdGlvbkRhdGEpIG92ZXJyaWRlCisgICAgeworICAgICAgICBH
UmVmUHRyPFdlYktpdFVSSVJlcXVlc3Q+IHJlcXVlc3QgPSBhZG9wdEdSZWYod2Via2l0VVJJUmVx
dWVzdENyZWF0ZUZvclJlc291cmNlUmVxdWVzdChyZXNvdXJjZVJlcXVlc3QpKTsKKyAgICAgICAg
V2ViS2l0TmF2aWdhdGlvbkFjdGlvbiBuYXZpZ2F0aW9uQWN0aW9uKHJlcXVlc3QuZ2V0KCksIG5h
dmlnYXRpb25BY3Rpb25EYXRhKTsKKyAgICAgICAgcmV0dXJuIHdlYmtpdFdlYlZpZXdDcmVhdGVO
ZXdQYWdlKG1fd2ViVmlldywgd2luZG93RmVhdHVyZXMsICZuYXZpZ2F0aW9uQWN0aW9uKTsKKyAg
ICB9CiAKLXN0YXRpYyB2b2lkIGNsb3NlUGFnZShXS1BhZ2VSZWYsIGNvbnN0IHZvaWQqIGNsaWVu
dEluZm8pCi17Ci0gICAgd2Via2l0V2ViVmlld0Nsb3NlUGFnZShXRUJLSVRfV0VCX1ZJRVcoY2xp
ZW50SW5mbykpOwotfQorICAgIHZpcnR1YWwgdm9pZCBzaG93UGFnZShXZWJQYWdlUHJveHkqKSBv
dmVycmlkZQorICAgIHsKKyAgICAgICAgd2Via2l0V2ViVmlld1JlYWR5VG9TaG93UGFnZShtX3dl
YlZpZXcpOworICAgIH0KIAotc3RhdGljIHZvaWQgcnVuSmF2YVNjcmlwdEFsZXJ0KFdLUGFnZVJl
ZiwgV0tTdHJpbmdSZWYgbWVzc2FnZSwgV0tGcmFtZVJlZiwgY29uc3Qgdm9pZCogY2xpZW50SW5m
bykKLXsKLSAgICB3ZWJraXRXZWJWaWV3UnVuSmF2YVNjcmlwdEFsZXJ0KFdFQktJVF9XRUJfVklF
VyhjbGllbnRJbmZvKSwgdG9JbXBsKG1lc3NhZ2UpLT5zdHJpbmcoKS51dGY4KCkpOwotfQorICAg
IHZpcnR1YWwgdm9pZCBjbG9zZShXZWJQYWdlUHJveHkqKSBvdmVycmlkZQorICAgIHsKKyAgICAg
ICAgd2Via2l0V2ViVmlld0Nsb3NlUGFnZShtX3dlYlZpZXcpOworICAgIH0KIAotc3RhdGljIGJv
b2wgcnVuSmF2YVNjcmlwdENvbmZpcm0oV0tQYWdlUmVmLCBXS1N0cmluZ1JlZiBtZXNzYWdlLCBX
S0ZyYW1lUmVmLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQotewotICAgIHJldHVybiB3ZWJraXRX
ZWJWaWV3UnVuSmF2YVNjcmlwdENvbmZpcm0oV0VCS0lUX1dFQl9WSUVXKGNsaWVudEluZm8pLCB0
b0ltcGwobWVzc2FnZSktPnN0cmluZygpLnV0ZjgoKSk7Ci19CisgICAgdmlydHVhbCB2b2lkIHJ1
bkphdmFTY3JpcHRBbGVydChXZWJQYWdlUHJveHkqLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIFdl
YkZyYW1lUHJveHkqLCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+IGNvbXBsZXRpb25IYW5kbGVyKSBv
dmVycmlkZQorICAgIHsKKyAgICAgICAgd2Via2l0V2ViVmlld1J1bkphdmFTY3JpcHRBbGVydCht
X3dlYlZpZXcsIG1lc3NhZ2UudXRmOCgpKTsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsK
KyAgICB9CiAKLXN0YXRpYyBXS1N0cmluZ1JlZiBydW5KYXZhU2NyaXB0UHJvbXB0KFdLUGFnZVJl
ZiwgV0tTdHJpbmdSZWYgbWVzc2FnZSwgV0tTdHJpbmdSZWYgZGVmYXVsdFZhbHVlLCBXS0ZyYW1l
UmVmLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQotewotICAgIENTdHJpbmcgcmVzdWx0ID0gd2Vi
a2l0V2ViVmlld1J1bkphdmFTY3JpcHRQcm9tcHQoV0VCS0lUX1dFQl9WSUVXKGNsaWVudEluZm8p
LCB0b0ltcGwobWVzc2FnZSktPnN0cmluZygpLnV0ZjgoKSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvSW1wbChkZWZhdWx0VmFsdWUpLT5z
dHJpbmcoKS51dGY4KCkpOwotICAgIHJldHVybiBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZyhyZXN1bHQuZGF0YSgpKTsKLX0KKyAgICB2aXJ0dWFsIHZvaWQgcnVuSmF2YVNjcmlwdENvbmZp
cm0oV2ViUGFnZVByb3h5KiwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBXZWJGcmFtZVByb3h5Kiwg
c3RkOjpmdW5jdGlvbjx2b2lkIChib29sKT4gY29tcGxldGlvbkhhbmRsZXIpIG92ZXJyaWRlCisg
ICAgeworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcih3ZWJraXRXZWJWaWV3UnVuSmF2YVNjcmlw
dENvbmZpcm0obV93ZWJWaWV3LCBtZXNzYWdlLnV0ZjgoKSkpOworICAgIH0KIAotc3RhdGljIGJv
b2wgdG9vbGJhcnNBcmVWaXNpYmxlKFdLUGFnZVJlZiwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykK
LXsKLSAgICBXZWJLaXRXaW5kb3dQcm9wZXJ0aWVzKiB3aW5kb3dQcm9wZXJ0aWVzID0gd2Via2l0
X3dlYl92aWV3X2dldF93aW5kb3dfcHJvcGVydGllcyhXRUJLSVRfV0VCX1ZJRVcoY2xpZW50SW5m
bykpOwotICAgIHJldHVybiB3ZWJraXRfd2luZG93X3Byb3BlcnRpZXNfZ2V0X3Rvb2xiYXJfdmlz
aWJsZSh3aW5kb3dQcm9wZXJ0aWVzKTsKLX0KKyAgICB2aXJ0dWFsIHZvaWQgcnVuSmF2YVNjcmlw
dFByb21wdChXZWJQYWdlUHJveHkqLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIGNvbnN0IFN0cmlu
ZyYgZGVmYXVsdFZhbHVlLCBXZWJGcmFtZVByb3h5Kiwgc3RkOjpmdW5jdGlvbjx2b2lkIChjb25z
dCBTdHJpbmcmKT4gY29tcGxldGlvbkhhbmRsZXIpIG92ZXJyaWRlCisgICAgeworICAgICAgICBD
U3RyaW5nIHJlc3VsdCA9IHdlYmtpdFdlYlZpZXdSdW5KYXZhU2NyaXB0UHJvbXB0KG1fd2ViVmll
dywgbWVzc2FnZS51dGY4KCksIGRlZmF1bHRWYWx1ZS51dGY4KCkpOworICAgICAgICBpZiAocmVz
dWx0LmlzTnVsbCgpKSB7CisgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihTdHJpbmcoKSk7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KIAotc3RhdGljIHZvaWQgc2V0VG9vbGJh
cnNBcmVWaXNpYmxlKFdLUGFnZVJlZiwgYm9vbCB0b29sYmFyc1Zpc2libGUsIGNvbnN0IHZvaWQq
IGNsaWVudEluZm8pCi17Ci0gICAgV2ViS2l0V2luZG93UHJvcGVydGllcyogd2luZG93UHJvcGVy
dGllcyA9IHdlYmtpdF93ZWJfdmlld19nZXRfd2luZG93X3Byb3BlcnRpZXMoV0VCS0lUX1dFQl9W
SUVXKGNsaWVudEluZm8pKTsKLSAgICB3ZWJraXRXaW5kb3dQcm9wZXJ0aWVzU2V0VG9vbGJhclZp
c2libGUod2luZG93UHJvcGVydGllcywgdG9vbGJhcnNWaXNpYmxlKTsKLX0KKyAgICAgICAgY29t
cGxldGlvbkhhbmRsZXIoU3RyaW5nOjpmcm9tVVRGOChyZXN1bHQuZGF0YSgpKSk7CisgICAgfQog
Ci1zdGF0aWMgYm9vbCBtZW51QmFySXNWaXNpYmxlKFdLUGFnZVJlZiwgY29uc3Qgdm9pZCogY2xp
ZW50SW5mbykKLXsKLSAgICBXZWJLaXRXaW5kb3dQcm9wZXJ0aWVzKiB3aW5kb3dQcm9wZXJ0aWVz
ID0gd2Via2l0X3dlYl92aWV3X2dldF93aW5kb3dfcHJvcGVydGllcyhXRUJLSVRfV0VCX1ZJRVco
Y2xpZW50SW5mbykpOwotICAgIHJldHVybiB3ZWJraXRfd2luZG93X3Byb3BlcnRpZXNfZ2V0X21l
bnViYXJfdmlzaWJsZSh3aW5kb3dQcm9wZXJ0aWVzKTsKLX0KKyAgICB2aXJ0dWFsIHZvaWQgbW91
c2VEaWRNb3ZlT3ZlckVsZW1lbnQoV2ViUGFnZVByb3h5KiwgY29uc3QgV2ViSGl0VGVzdFJlc3Vs
dDo6RGF0YSYgZGF0YSwgV2ViRXZlbnQ6Ok1vZGlmaWVycyBtb2RpZmllcnMsIEFQSTo6T2JqZWN0
Kikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIHdlYmtpdFdlYlZpZXdNb3VzZVRhcmdldENoYW5n
ZWQobV93ZWJWaWV3LCBkYXRhLCB0b0dka01vZGlmaWVycyhtb2RpZmllcnMpKTsKKyAgICB9CiAK
LXN0YXRpYyB2b2lkIHNldE1lbnVCYXJJc1Zpc2libGUoV0tQYWdlUmVmLCBib29sIG1lbnVCYXJW
aXNpYmxlLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQotewotICAgIFdlYktpdFdpbmRvd1Byb3Bl
cnRpZXMqIHdpbmRvd1Byb3BlcnRpZXMgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3dpbmRvd19wcm9w
ZXJ0aWVzKFdFQktJVF9XRUJfVklFVyhjbGllbnRJbmZvKSk7Ci0gICAgd2Via2l0V2luZG93UHJv
cGVydGllc1NldE1lbnViYXJWaXNpYmxlKHdpbmRvd1Byb3BlcnRpZXMsIG1lbnVCYXJWaXNpYmxl
KTsKLX0KKyAgICB2aXJ0dWFsIGJvb2wgdG9vbGJhcnNBcmVWaXNpYmxlKFdlYlBhZ2VQcm94eSop
IG92ZXJyaWRlCisgICAgeworICAgICAgICByZXR1cm4gd2Via2l0X3dpbmRvd19wcm9wZXJ0aWVz
X2dldF90b29sYmFyX3Zpc2libGUod2Via2l0X3dlYl92aWV3X2dldF93aW5kb3dfcHJvcGVydGll
cyhtX3dlYlZpZXcpKTsKKyAgICB9CiAKLXN0YXRpYyBib29sIHN0YXR1c0JhcklzVmlzaWJsZShX
S1BhZ2VSZWYsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCi17Ci0gICAgV2ViS2l0V2luZG93UHJv
cGVydGllcyogd2luZG93UHJvcGVydGllcyA9IHdlYmtpdF93ZWJfdmlld19nZXRfd2luZG93X3By
b3BlcnRpZXMoV0VCS0lUX1dFQl9WSUVXKGNsaWVudEluZm8pKTsKLSAgICByZXR1cm4gd2Via2l0
X3dpbmRvd19wcm9wZXJ0aWVzX2dldF9zdGF0dXNiYXJfdmlzaWJsZSh3aW5kb3dQcm9wZXJ0aWVz
KTsKLX0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0VG9vbGJhcnNBcmVWaXNpYmxlKFdlYlBhZ2VQcm94
eSosIGJvb2wgdmlzaWJsZSkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIHdlYmtpdFdpbmRvd1By
b3BlcnRpZXNTZXRUb29sYmFyVmlzaWJsZSh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3dpbmRvd19wcm9w
ZXJ0aWVzKG1fd2ViVmlldyksIHZpc2libGUpOworICAgIH0KIAotc3RhdGljIHZvaWQgc2V0U3Rh
dHVzQmFySXNWaXNpYmxlKFdLUGFnZVJlZiwgYm9vbCBzdGF0dXNCYXJWaXNpYmxlLCBjb25zdCB2
b2lkKiBjbGllbnRJbmZvKQotewotICAgIFdlYktpdFdpbmRvd1Byb3BlcnRpZXMqIHdpbmRvd1By
b3BlcnRpZXMgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3dpbmRvd19wcm9wZXJ0aWVzKFdFQktJVF9X
RUJfVklFVyhjbGllbnRJbmZvKSk7Ci0gICAgd2Via2l0V2luZG93UHJvcGVydGllc1NldFN0YXR1
c2JhclZpc2libGUod2luZG93UHJvcGVydGllcywgc3RhdHVzQmFyVmlzaWJsZSk7Ci19CisgICAg
dmlydHVhbCBib29sIG1lbnVCYXJJc1Zpc2libGUoV2ViUGFnZVByb3h5Kikgb3ZlcnJpZGUKKyAg
ICB7CisgICAgICAgIHJldHVybiB3ZWJraXRfd2luZG93X3Byb3BlcnRpZXNfZ2V0X21lbnViYXJf
dmlzaWJsZSh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3dpbmRvd19wcm9wZXJ0aWVzKG1fd2ViVmlldykp
OworICAgIH0KIAotc3RhdGljIGJvb2wgaXNSZXNpemFibGUoV0tQYWdlUmVmLCBjb25zdCB2b2lk
KiBjbGllbnRJbmZvKQotewotICAgIFdlYktpdFdpbmRvd1Byb3BlcnRpZXMqIHdpbmRvd1Byb3Bl
cnRpZXMgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3dpbmRvd19wcm9wZXJ0aWVzKFdFQktJVF9XRUJf
VklFVyhjbGllbnRJbmZvKSk7Ci0gICAgcmV0dXJuIHdlYmtpdF93aW5kb3dfcHJvcGVydGllc19n
ZXRfcmVzaXphYmxlKHdpbmRvd1Byb3BlcnRpZXMpOwotfQorICAgIHZpcnR1YWwgdm9pZCBzZXRN
ZW51QmFySXNWaXNpYmxlKFdlYlBhZ2VQcm94eSosIGJvb2wgdmlzaWJsZSkgb3ZlcnJpZGUKKyAg
ICB7CisgICAgICAgIHdlYmtpdFdpbmRvd1Byb3BlcnRpZXNTZXRUb29sYmFyVmlzaWJsZSh3ZWJr
aXRfd2ViX3ZpZXdfZ2V0X3dpbmRvd19wcm9wZXJ0aWVzKG1fd2ViVmlldyksIHZpc2libGUpOwor
ICAgIH0KIAotc3RhdGljIHZvaWQgc2V0SXNSZXNpemFibGUoV0tQYWdlUmVmLCBib29sIHJlc2l6
YWJsZSwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKLXsKLSAgICBXZWJLaXRXaW5kb3dQcm9wZXJ0
aWVzKiB3aW5kb3dQcm9wZXJ0aWVzID0gd2Via2l0X3dlYl92aWV3X2dldF93aW5kb3dfcHJvcGVy
dGllcyhXRUJLSVRfV0VCX1ZJRVcoY2xpZW50SW5mbykpOwotICAgIHdlYmtpdFdpbmRvd1Byb3Bl
cnRpZXNTZXRSZXNpemFibGUod2luZG93UHJvcGVydGllcywgcmVzaXphYmxlKTsKLX0KKyAgICB2
aXJ0dWFsIGJvb2wgc3RhdHVzQmFySXNWaXNpYmxlKFdlYlBhZ2VQcm94eSopIG92ZXJyaWRlCisg
ICAgeworICAgICAgICByZXR1cm4gd2Via2l0X3dpbmRvd19wcm9wZXJ0aWVzX2dldF9zdGF0dXNi
YXJfdmlzaWJsZSh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3dpbmRvd19wcm9wZXJ0aWVzKG1fd2ViVmll
dykpOworICAgIH0KIAotc3RhdGljIFdLUmVjdCBnZXRXaW5kb3dGcmFtZShXS1BhZ2VSZWYsIGNv
bnN0IHZvaWQqIGNsaWVudEluZm8pCi17Ci0gICAgR2RrUmVjdGFuZ2xlIGdlb21ldHJ5ID0geyAw
LCAwLCAwLCAwIH07Ci0gICAgR3RrV2lkZ2V0KiB3aW5kb3cgPSBndGtfd2lkZ2V0X2dldF90b3Bs
ZXZlbChHVEtfV0lER0VUKGNsaWVudEluZm8pKTsKLSAgICBpZiAoV2ViQ29yZTo6d2lkZ2V0SXNP
bnNjcmVlblRvcGxldmVsV2luZG93KHdpbmRvdykgJiYgZ3RrX3dpZGdldF9nZXRfdmlzaWJsZSh3
aW5kb3cpKSB7Ci0gICAgICAgIGd0a193aW5kb3dfZ2V0X3Bvc2l0aW9uKEdUS19XSU5ET1cod2lu
ZG93KSwgJmdlb21ldHJ5LngsICZnZW9tZXRyeS55KTsKLSAgICAgICAgZ3RrX3dpbmRvd19nZXRf
c2l6ZShHVEtfV0lORE9XKHdpbmRvdyksICZnZW9tZXRyeS53aWR0aCwgJmdlb21ldHJ5LmhlaWdo
dCk7CisgICAgdmlydHVhbCB2b2lkIHNldFN0YXR1c0JhcklzVmlzaWJsZShXZWJQYWdlUHJveHkq
LCBib29sIHZpc2libGUpIG92ZXJyaWRlCisgICAgeworICAgICAgICB3ZWJraXRXaW5kb3dQcm9w
ZXJ0aWVzU2V0U3RhdHVzYmFyVmlzaWJsZSh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3dpbmRvd19wcm9w
ZXJ0aWVzKG1fd2ViVmlldyksIHZpc2libGUpOwogICAgIH0KLSAgICByZXR1cm4gV0tSZWN0TWFr
ZShnZW9tZXRyeS54LCBnZW9tZXRyeS55LCBnZW9tZXRyeS53aWR0aCwgZ2VvbWV0cnkuaGVpZ2h0
KTsKLX0KIAotc3RhdGljIHZvaWQgc2V0V2luZG93RnJhbWUoV0tQYWdlUmVmLCBXS1JlY3QgZnJh
bWUsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCi17Ci0gICAgV2ViS2l0V2luZG93UHJvcGVydGll
cyogd2luZG93UHJvcGVydGllcyA9IHdlYmtpdF93ZWJfdmlld19nZXRfd2luZG93X3Byb3BlcnRp
ZXMoV0VCS0lUX1dFQl9WSUVXKGNsaWVudEluZm8pKTsKLSAgICBHZGtSZWN0YW5nbGUgZ2VvbWV0
cnkgPSB7IHN0YXRpY19jYXN0PGludD4oZnJhbWUub3JpZ2luLngpLCBzdGF0aWNfY2FzdDxpbnQ+
KGZyYW1lLm9yaWdpbi55KSwKLSAgICAgICAgc3RhdGljX2Nhc3Q8aW50PihmcmFtZS5zaXplLndp
ZHRoKSwgc3RhdGljX2Nhc3Q8aW50PihmcmFtZS5zaXplLmhlaWdodCkgfTsKLSAgICB3ZWJraXRX
aW5kb3dQcm9wZXJ0aWVzU2V0R2VvbWV0cnkod2luZG93UHJvcGVydGllcywgJmdlb21ldHJ5KTsK
LX0KKyAgICB2aXJ0dWFsIGJvb2wgaXNSZXNpemFibGUoV2ViUGFnZVByb3h5Kikgb3ZlcnJpZGUK
KyAgICB7CisgICAgICAgIHJldHVybiB3ZWJraXRfd2luZG93X3Byb3BlcnRpZXNfZ2V0X3Jlc2l6
YWJsZSh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3dpbmRvd19wcm9wZXJ0aWVzKG1fd2ViVmlldykpOwor
ICAgIH0KIAotc3RhdGljIHZvaWQgbW91c2VEaWRNb3ZlT3ZlckVsZW1lbnQoV0tQYWdlUmVmLCBX
S0hpdFRlc3RSZXN1bHRSZWYgaGl0VGVzdFJlc3VsdCwgV0tFdmVudE1vZGlmaWVycyBtb2RpZmll
cnMsIFdLVHlwZVJlZiAvKiB1c2VyRGF0YSAqLywgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKLXsK
LSAgICB3ZWJraXRXZWJWaWV3TW91c2VUYXJnZXRDaGFuZ2VkKFdFQktJVF9XRUJfVklFVyhjbGll
bnRJbmZvKSwgdG9JbXBsKGhpdFRlc3RSZXN1bHQpLCB3a0V2ZW50TW9kaWZpZXJzVG9HZGtNb2Rp
ZmllcnMobW9kaWZpZXJzKSk7Ci19CisgICAgdmlydHVhbCB2b2lkIHNldElzUmVzaXphYmxlKFdl
YlBhZ2VQcm94eSosIGJvb2wgcmVzaXphYmxlKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgd2Vi
a2l0V2luZG93UHJvcGVydGllc1NldFJlc2l6YWJsZSh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3dpbmRv
d19wcm9wZXJ0aWVzKG1fd2ViVmlldyksIHJlc2l6YWJsZSk7CisgICAgfQogCi1zdGF0aWMgdm9p
ZCBwcmludEZyYW1lKFdLUGFnZVJlZiBwYWdlLCBXS0ZyYW1lUmVmIGZyYW1lLCBjb25zdCB2b2lk
KikKLXsKLSAgICB3ZWJraXRXZWJWaWV3UHJpbnRGcmFtZShXRUJLSVRfV0VCX1ZJRVcodG9JbXBs
KHBhZ2UpLT52aWV3V2lkZ2V0KCkpLCB0b0ltcGwoZnJhbWUpKTsKLX0KKyAgICB2aXJ0dWFsIHZv
aWQgc2V0V2luZG93RnJhbWUoV2ViUGFnZVByb3h5KiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0
JiBmcmFtZSkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIEdka1JlY3RhbmdsZSBnZW9tZXRyeSA9
IFdlYkNvcmU6OkludFJlY3QoZnJhbWUpOworICAgICAgICB3ZWJraXRXaW5kb3dQcm9wZXJ0aWVz
U2V0R2VvbWV0cnkod2Via2l0X3dlYl92aWV3X2dldF93aW5kb3dfcHJvcGVydGllcyhtX3dlYlZp
ZXcpLCAmZ2VvbWV0cnkpOworICAgIH0KIAotc3RhdGljIHZvaWQgcnVuT3BlblBhbmVsKFdLUGFn
ZVJlZiwgV0tGcmFtZVJlZiwgV0tPcGVuUGFuZWxQYXJhbWV0ZXJzUmVmIHBhcmFtZXRlcnMsIFdL
T3BlblBhbmVsUmVzdWx0TGlzdGVuZXJSZWYgbGlzdGVuZXIsIGNvbnN0IHZvaWQgKmNsaWVudElu
Zm8pCi17Ci0gICAgR1JlZlB0cjxXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3Q+IHJlcXVlc3QgPSBh
ZG9wdEdSZWYod2Via2l0RmlsZUNob29zZXJSZXF1ZXN0Q3JlYXRlKHRvSW1wbChwYXJhbWV0ZXJz
KSwgdG9JbXBsKGxpc3RlbmVyKSkpOwotICAgIHdlYmtpdFdlYlZpZXdSdW5GaWxlQ2hvb3NlclJl
cXVlc3QoV0VCS0lUX1dFQl9WSUVXKGNsaWVudEluZm8pLCByZXF1ZXN0LmdldCgpKTsKLX0KKyAg
ICB2aXJ0dWFsIFdlYkNvcmU6OkZsb2F0UmVjdCB3aW5kb3dGcmFtZShXZWJQYWdlUHJveHkqKSBv
dmVycmlkZQorICAgIHsKKyAgICAgICAgR2RrUmVjdGFuZ2xlIGdlb21ldHJ5ID0geyAwLCAwLCAw
LCAwIH07CisgICAgICAgIEd0a1dpZGdldCogd2luZG93ID0gZ3RrX3dpZGdldF9nZXRfdG9wbGV2
ZWwoR1RLX1dJREdFVChtX3dlYlZpZXcpKTsKKyAgICAgICAgaWYgKFdlYkNvcmU6OndpZGdldElz
T25zY3JlZW5Ub3BsZXZlbFdpbmRvdyh3aW5kb3cpICYmIGd0a193aWRnZXRfZ2V0X3Zpc2libGUo
d2luZG93KSkgeworICAgICAgICAgICAgZ3RrX3dpbmRvd19nZXRfcG9zaXRpb24oR1RLX1dJTkRP
Vyh3aW5kb3cpLCAmZ2VvbWV0cnkueCwgJmdlb21ldHJ5LnkpOworICAgICAgICAgICAgZ3RrX3dp
bmRvd19nZXRfc2l6ZShHVEtfV0lORE9XKHdpbmRvdyksICZnZW9tZXRyeS53aWR0aCwgJmdlb21l
dHJ5LmhlaWdodCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIFdlYkNvcmU6OkZsb2F0UmVj
dChnZW9tZXRyeSk7CisgICAgfQogCi1zdGF0aWMgdm9pZCBkZWNpZGVQb2xpY3lGb3JHZW9sb2Nh
dGlvblBlcm1pc3Npb25SZXF1ZXN0KFdLUGFnZVJlZiwgV0tGcmFtZVJlZiwgV0tTZWN1cml0eU9y
aWdpblJlZiwgV0tHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0UmVmIHJlcXVlc3QsIGNvbnN0
IHZvaWQqIGNsaWVudEluZm8pCi17Ci0gICAgR1JlZlB0cjxXZWJLaXRHZW9sb2NhdGlvblBlcm1p
c3Npb25SZXF1ZXN0PiBnZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0ID0gYWRvcHRHUmVmKHdl
YmtpdEdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RDcmVhdGUodG9JbXBsKHJlcXVlc3QpKSk7
Ci0gICAgd2Via2l0V2ViVmlld01ha2VQZXJtaXNzaW9uUmVxdWVzdChXRUJLSVRfV0VCX1ZJRVco
Y2xpZW50SW5mbyksIFdFQktJVF9QRVJNSVNTSU9OX1JFUVVFU1QoZ2VvbG9jYXRpb25QZXJtaXNz
aW9uUmVxdWVzdC5nZXQoKSkpOwotfQorICAgIHZpcnR1YWwgYm9vbCBydW5PcGVuUGFuZWwoV2Vi
UGFnZVByb3h5KiwgV2ViRnJhbWVQcm94eSosIFdlYk9wZW5QYW5lbFBhcmFtZXRlcnMqIHBhcmFt
ZXRlcnMsIFdlYk9wZW5QYW5lbFJlc3VsdExpc3RlbmVyUHJveHkqIGxpc3RlbmVyKSBvdmVycmlk
ZQorICAgIHsKKyAgICAgICAgR1JlZlB0cjxXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3Q+IHJlcXVl
c3QgPSBhZG9wdEdSZWYod2Via2l0RmlsZUNob29zZXJSZXF1ZXN0Q3JlYXRlKHBhcmFtZXRlcnMs
IGxpc3RlbmVyKSk7CisgICAgICAgIHdlYmtpdFdlYlZpZXdSdW5GaWxlQ2hvb3NlclJlcXVlc3Qo
bV93ZWJWaWV3LCByZXF1ZXN0LmdldCgpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQog
Ci1zdGF0aWMgdm9pZCBydW5Nb2RhbChXS1BhZ2VSZWYsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8p
Ci17Ci0gICAgd2Via2l0V2ViVmlld1J1bkFzTW9kYWwoV0VCS0lUX1dFQl9WSUVXKGNsaWVudElu
Zm8pKTsKLX0KKyAgICB2aXJ0dWFsIGJvb2wgZGVjaWRlUG9saWN5Rm9yR2VvbG9jYXRpb25QZXJt
aXNzaW9uUmVxdWVzdChXZWJQYWdlUHJveHkqLCBXZWJGcmFtZVByb3h5KiwgV2ViU2VjdXJpdHlP
cmlnaW4qLCBHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0UHJveHkqIHBlcm1pc3Npb25SZXF1
ZXN0KSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgR1JlZlB0cjxXZWJLaXRHZW9sb2NhdGlvblBl
cm1pc3Npb25SZXF1ZXN0PiBnZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0ID0gYWRvcHRHUmVm
KHdlYmtpdEdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RDcmVhdGUocGVybWlzc2lvblJlcXVl
c3QpKTsKKyAgICAgICAgd2Via2l0V2ViVmlld01ha2VQZXJtaXNzaW9uUmVxdWVzdChtX3dlYlZp
ZXcsIFdFQktJVF9QRVJNSVNTSU9OX1JFUVVFU1QoZ2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVz
dC5nZXQoKSkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZv
aWQgcHJpbnRGcmFtZShXZWJQYWdlUHJveHkqLCBXZWJGcmFtZVByb3h5KiBmcmFtZSkgb3ZlcnJp
ZGUKKyAgICB7CisgICAgICAgIHdlYmtpdFdlYlZpZXdQcmludEZyYW1lKG1fd2ViVmlldywgZnJh
bWUpOworICAgIH0KKworICAgIHZpcnR1YWwgYm9vbCBjYW5SdW5Nb2RhbCgpIGNvbnN0IG92ZXJy
aWRlIHsgcmV0dXJuIHRydWU7IH0KKworICAgIHZpcnR1YWwgdm9pZCBydW5Nb2RhbChXZWJQYWdl
UHJveHkqKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgd2Via2l0V2ViVmlld1J1bkFzTW9kYWwo
bV93ZWJWaWV3KTsKKyAgICB9CisKKyAgICBXZWJLaXRXZWJWaWV3KiBtX3dlYlZpZXc7Cit9Owog
CiB2b2lkIGF0dGFjaFVJQ2xpZW50VG9WaWV3KFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCiB7Ci0g
ICAgV0tQYWdlVUlDbGllbnRWMiB3a1VJQ2xpZW50ID0gewotICAgICAgICB7Ci0gICAgICAgICAg
ICAyLCAvLyB2ZXJzaW9uCi0gICAgICAgICAgICB3ZWJWaWV3LCAvLyBjbGllbnRJbmZvCi0gICAg
ICAgIH0sCi0gICAgICAgIDAsIC8vIGNyZWF0ZU5ld1BhZ2VfZGVwcmVjYXRlZEZvclVzZVdpdGhW
MAotICAgICAgICBzaG93UGFnZSwKLSAgICAgICAgY2xvc2VQYWdlLAotICAgICAgICAwLCAvLyB0
YWtlRm9jdXMKLSAgICAgICAgMCwgLy8gZm9jdXMKLSAgICAgICAgMCwgLy8gdW5mb2N1cwotICAg
ICAgICBydW5KYXZhU2NyaXB0QWxlcnQsCi0gICAgICAgIHJ1bkphdmFTY3JpcHRDb25maXJtLAot
ICAgICAgICBydW5KYXZhU2NyaXB0UHJvbXB0LAotICAgICAgICAwLCAvLyBzZXRTdGF0dXNUZXh0
Ci0gICAgICAgIDAsIC8vIG1vdXNlRGlkTW92ZU92ZXJFbGVtZW50X2RlcHJlY2F0ZWRGb3JVc2VX
aXRoVjAKLSAgICAgICAgMCwgLy8gbWlzc2luZ1BsdWdpbkJ1dHRvbkNsaWNrZWQKLSAgICAgICAg
MCwgLy8gZGlkTm90SGFuZGxlS2V5RXZlbnQKLSAgICAgICAgMCwgLy8gZGlkTm90SGFuZGxlV2hl
ZWxFdmVudAotICAgICAgICB0b29sYmFyc0FyZVZpc2libGUsCi0gICAgICAgIHNldFRvb2xiYXJz
QXJlVmlzaWJsZSwKLSAgICAgICAgbWVudUJhcklzVmlzaWJsZSwKLSAgICAgICAgc2V0TWVudUJh
cklzVmlzaWJsZSwKLSAgICAgICAgc3RhdHVzQmFySXNWaXNpYmxlLAotICAgICAgICBzZXRTdGF0
dXNCYXJJc1Zpc2libGUsCi0gICAgICAgIGlzUmVzaXphYmxlLAotICAgICAgICBzZXRJc1Jlc2l6
YWJsZSwKLSAgICAgICAgZ2V0V2luZG93RnJhbWUsCi0gICAgICAgIHNldFdpbmRvd0ZyYW1lLAot
ICAgICAgICAwLCAvLyBydW5CZWZvcmVVbmxvYWRDb25maXJtUGFuZWwKLSAgICAgICAgMCwgLy8g
ZGlkRHJhdwotICAgICAgICAwLCAvLyBwYWdlRGlkU2Nyb2xsCi0gICAgICAgIDAsIC8vIGV4Y2Vl
ZGVkRGF0YWJhc2VRdW90YQotICAgICAgICBydW5PcGVuUGFuZWwsCi0gICAgICAgIGRlY2lkZVBv
bGljeUZvckdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3QsCi0gICAgICAgIDAsIC8vIGhlYWRl
ckhlaWdodAotICAgICAgICAwLCAvLyBmb290ZXJIZWlnaHQKLSAgICAgICAgMCwgLy8gZHJhd0hl
YWRlcgotICAgICAgICAwLCAvLyBkcmF3Rm9vdGVyCi0gICAgICAgIHByaW50RnJhbWUsCi0gICAg
ICAgIHJ1bk1vZGFsLAotICAgICAgICAwLCAvLyBkaWRDb21wbGV0ZVJ1YmJlckJhbmRGb3JNYWlu
RnJhbWUKLSAgICAgICAgMCwgLy8gc2F2ZURhdGFUb0ZpbGVJbkRvd25sb2Fkc0ZvbGRlcgotICAg
ICAgICAwLCAvLyBzaG91bGRJbnRlcnJ1cHRKYXZhU2NyaXB0Ci0gICAgICAgIGNyZWF0ZU5ld1Bh
Z2UsCi0gICAgICAgIG1vdXNlRGlkTW92ZU92ZXJFbGVtZW50LAotICAgICAgICAwLCAvLyBkZWNp
ZGVQb2xpY3lGb3JOb3RpZmljYXRpb25QZXJtaXNzaW9uUmVxdWVzdAotICAgICAgICAwLCAvLyB1
bmF2YWlsYWJsZVBsdWdpbkJ1dHRvbkNsaWNrZWQKLSAgICAgICAgMCwgLy8gc2hvd0NvbG9yUGlj
a2VyCi0gICAgICAgIDAsIC8vIGhpZGVDb2xvclBpY2tlcgotICAgICAgICAwLCAvLyBwbHVnaW5M
b2FkUG9saWN5Ci0gICAgfTsKLSAgICBXS1BhZ2VSZWYgd2tQYWdlID0gdG9BUEkod2Via2l0V2Vi
Vmlld0Jhc2VHZXRQYWdlKFdFQktJVF9XRUJfVklFV19CQVNFKHdlYlZpZXcpKSk7Ci0gICAgV0tQ
YWdlU2V0UGFnZVVJQ2xpZW50KHdrUGFnZSwgJndrVUlDbGllbnQuYmFzZSk7CisgICAgV2ViUGFn
ZVByb3h5KiBwYWdlID0gd2Via2l0V2ViVmlld0Jhc2VHZXRQYWdlKFdFQktJVF9XRUJfVklFV19C
QVNFKHdlYlZpZXcpKTsKKyAgICBwYWdlLT5zZXRVSUNsaWVudChzdGQ6Om1ha2VfdW5pcXVlPFVJ
Q2xpZW50Pih3ZWJWaWV3KSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvV2ViS2l0V2ViVmlldy5jcHAKaW5kZXggNGY4OGEwYi4uNTkyZWNlNiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5jcHAK
KysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5jcHAK
QEAgLTIxNyw5ICsyMTcsOSBAQCBzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0V2ViVmlld0xvYWRGYWls
KFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIFdlYktpdExvYWRFdmVudCwgYwogICAgIHJldHVybiBU
UlVFOwogfQogCi1zdGF0aWMgR3RrV2lkZ2V0KiB3ZWJraXRXZWJWaWV3Q3JlYXRlKFdlYktpdFdl
YlZpZXcqKQorc3RhdGljIEd0a1dpZGdldCogd2Via2l0V2ViVmlld0NyZWF0ZShXZWJLaXRXZWJW
aWV3KiwgV2ViS2l0TmF2aWdhdGlvbkFjdGlvbiopCiB7Ci0gICAgcmV0dXJuIDA7CisgICAgcmV0
dXJuIG51bGxwdHI7CiB9CiAKIHN0YXRpYyBHdGtXaWRnZXQqIHdlYmtpdFdlYlZpZXdDcmVhdGVK
YXZhU2NyaXB0RGlhbG9nKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIEd0a01lc3NhZ2VUeXBlIHR5
cGUsIEd0a0J1dHRvbnNUeXBlIGJ1dHRvbnMsIGludCBkZWZhdWx0UmVzcG9uc2UsIGNvbnN0IGNo
YXIqIG1lc3NhZ2UpCkBAIC04ODksMTQgKzg4OSwxOCBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfd2Vi
X3ZpZXdfY2xhc3NfaW5pdChXZWJLaXRXZWJWaWV3Q2xhc3MqIHdlYlZpZXdDbGFzcykKICAgICAv
KioKICAgICAgKiBXZWJLaXRXZWJWaWV3OjpjcmVhdGU6CiAgICAgICogQHdlYl92aWV3OiB0aGUg
I1dlYktpdFdlYlZpZXcgb24gd2hpY2ggdGhlIHNpZ25hbCBpcyBlbWl0dGVkCisgICAgICogQG5h
dmlnYXRpb25fYWN0aW9uOiBhICNXZWJLaXROYXZpZ2F0aW9uQWN0aW9uCiAgICAgICoKICAgICAg
KiBFbWl0dGVkIHdoZW4gdGhlIGNyZWF0aW9uIG9mIGEgbmV3ICNXZWJLaXRXZWJWaWV3IGlzIHJl
cXVlc3RlZC4KICAgICAgKiBJZiB0aGlzIHNpZ25hbCBpcyBoYW5kbGVkIHRoZSBzaWduYWwgaGFu
ZGxlciBzaG91bGQgcmV0dXJuIHRoZQogICAgICAqIG5ld2x5IGNyZWF0ZWQgI1dlYktpdFdlYlZp
ZXcuCiAgICAgICoKKyAgICAgKiBUaGUgI1dlYktpdE5hdmlnYXRpb25BY3Rpb24gcGFyYW1ldGVy
IGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IHRoZQorICAgICAqIG5hdmlnYXRpb24gYWN0aW9u
IHRoYXQgdHJpZ2dlcmVkIHRoaXMgc2lnbmFsLgorICAgICAqCiAgICAgICogV2hlbiB1c2luZyAl
V0VCS0lUX1BST0NFU1NfTU9ERUxfTVVMVElQTEVfU0VDT05EQVJZX1BST0NFU1NFUwogICAgICAq
IHByb2Nlc3MgbW9kZWwsIHRoZSBuZXcgI1dlYktpdFdlYlZpZXcgc2hvdWxkIGJlIHJlbGF0ZWQg
dG8KLSAgICAgKiBAd2ViX3ZpZXcgdG8gc2hhcmUgdGhlIHNhbWUgd2ViIHByb2Nlc3MsIHNlZSB3
ZWJraXRfd2ViX3ZpZXdfbmV3X3dpdGhfcmVsYXRlZF92aWV3CisgICAgICogQHdlYl92aWV3IHRv
IHNoYXJlIHRoZSBzYW1lIHdlYiBwcm9jZXNzLCBzZWUgd2Via2l0X3dlYl92aWV3X25ld193aXRo
X3JlbGF0ZWRfdmlldygpCiAgICAgICogZm9yIG1vcmUgZGV0YWlscy4KICAgICAgKgogICAgICAq
IFRoZSBuZXcgI1dlYktpdFdlYlZpZXcgc2hvdWxkIG5vdCBiZSBkaXNwbGF5ZWQgdG8gdGhlIHVz
ZXIKQEAgLTkwNSwxNCArOTA5LDE1IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJfdmlld19jbGFz
c19pbml0KFdlYktpdFdlYlZpZXdDbGFzcyogd2ViVmlld0NsYXNzKQogICAgICAqIFJldHVybnM6
ICh0cmFuc2ZlciBmdWxsKTogYSBuZXdseSBhbGxvY2F0ZWQgI1dlYktpdFdlYlZpZXcgd2lkZ2V0
CiAgICAgICogICAgb3IgJU5VTEwgdG8gcHJvcGFnYXRlIHRoZSBldmVudCBmdXJ0aGVyLgogICAg
ICAqLwotICAgIHNpZ25hbHNbQ1JFQVRFXSA9Ci0gICAgICAgIGdfc2lnbmFsX25ldygiY3JlYXRl
IiwKLSAgICAgICAgICAgICAgICAgICAgIEdfVFlQRV9GUk9NX0NMQVNTKHdlYlZpZXdDbGFzcyks
Ci0gICAgICAgICAgICAgICAgICAgICBHX1NJR05BTF9SVU5fTEFTVCwKLSAgICAgICAgICAgICAg
ICAgICAgIEdfU1RSVUNUX09GRlNFVChXZWJLaXRXZWJWaWV3Q2xhc3MsIGNyZWF0ZSksCi0gICAg
ICAgICAgICAgICAgICAgICB3ZWJraXRXZWJWaWV3QWNjdW11bGF0b3JPYmplY3RIYW5kbGVkLCAw
LAotICAgICAgICAgICAgICAgICAgICAgd2Via2l0X21hcnNoYWxfT0JKRUNUX19WT0lELAotICAg
ICAgICAgICAgICAgICAgICAgR1RLX1RZUEVfV0lER0VULCAwKTsKKyAgICBzaWduYWxzW0NSRUFU
RV0gPSBnX3NpZ25hbF9uZXcoCisgICAgICAgICJjcmVhdGUiLAorICAgICAgICBHX1RZUEVfRlJP
TV9DTEFTUyh3ZWJWaWV3Q2xhc3MpLAorICAgICAgICBHX1NJR05BTF9SVU5fTEFTVCwKKyAgICAg
ICAgR19TVFJVQ1RfT0ZGU0VUKFdlYktpdFdlYlZpZXdDbGFzcywgY3JlYXRlKSwKKyAgICAgICAg
d2Via2l0V2ViVmlld0FjY3VtdWxhdG9yT2JqZWN0SGFuZGxlZCwgMCwKKyAgICAgICAgZ19jY2xv
c3VyZV9tYXJzaGFsX2dlbmVyaWMsCisgICAgICAgIEdUS19UWVBFX1dJREdFVCwgMSwKKyAgICAg
ICAgV0VCS0lUX1RZUEVfTkFWSUdBVElPTl9BQ1RJT04gfCBHX1NJR05BTF9UWVBFX1NUQVRJQ19T
Q09QRSk7CiAKICAgICAvKioKICAgICAgKiBXZWJLaXRXZWJWaWV3OjpyZWFkeS10by1zaG93OgpA
QCAtMTYwMSwxMCArMTYwNiwxMCBAQCB2b2lkIHdlYmtpdFdlYlZpZXdVcGRhdGVVUkkoV2ViS2l0
V2ViVmlldyogd2ViVmlldykKICAgICBnX29iamVjdF9ub3RpZnkoR19PQkpFQ1Qod2ViVmlldyks
ICJ1cmkiKTsKIH0KIAotV2ViUGFnZVByb3h5KiB3ZWJraXRXZWJWaWV3Q3JlYXRlTmV3UGFnZShX
ZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBJbW11dGFibGVEaWN0aW9uYXJ5KiB3aW5kb3dGZWF0dXJl
cykKK1dlYlBhZ2VQcm94eSogd2Via2l0V2ViVmlld0NyZWF0ZU5ld1BhZ2UoV2ViS2l0V2ViVmll
dyogd2ViVmlldywgY29uc3QgV2luZG93RmVhdHVyZXMmIHdpbmRvd0ZlYXR1cmVzLCBXZWJLaXRO
YXZpZ2F0aW9uQWN0aW9uKiBuYXZpZ2F0aW9uQXRpb24pCiB7CiAgICAgV2ViS2l0V2ViVmlldyog
bmV3V2ViVmlldzsKLSAgICBnX3NpZ25hbF9lbWl0KHdlYlZpZXcsIHNpZ25hbHNbQ1JFQVRFXSwg
MCwgJm5ld1dlYlZpZXcpOworICAgIGdfc2lnbmFsX2VtaXQod2ViVmlldywgc2lnbmFsc1tDUkVB
VEVdLCAwLCBuYXZpZ2F0aW9uQWN0aW9uLCAmbmV3V2ViVmlldyk7CiAgICAgaWYgKCFuZXdXZWJW
aWV3KQogICAgICAgICByZXR1cm4gMDsKIApAQCAtMTY3NCw5ICsxNjc5LDkgQEAgdm9pZCB3ZWJr
aXRXZWJWaWV3TWFrZVBlcm1pc3Npb25SZXF1ZXN0KFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIFdl
YktpdFBlcm1pc3Npb24KICAgICBnX3NpZ25hbF9lbWl0KHdlYlZpZXcsIHNpZ25hbHNbUEVSTUlT
U0lPTl9SRVFVRVNUXSwgMCwgcmVxdWVzdCwgJnJldHVyblZhbHVlKTsKIH0KIAotdm9pZCB3ZWJr
aXRXZWJWaWV3TW91c2VUYXJnZXRDaGFuZ2VkKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIFdlYkhp
dFRlc3RSZXN1bHQqIGhpdFRlc3RSZXN1bHQsIHVuc2lnbmVkIG1vZGlmaWVycykKK3ZvaWQgd2Vi
a2l0V2ViVmlld01vdXNlVGFyZ2V0Q2hhbmdlZChXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBjb25z
dCBXZWJIaXRUZXN0UmVzdWx0OjpEYXRhJiBoaXRUZXN0UmVzdWx0LCB1bnNpZ25lZCBtb2RpZmll
cnMpCiB7Ci0gICAgd2Via2l0V2ViVmlld0Jhc2VTZXRUb29sdGlwQXJlYShXRUJLSVRfV0VCX1ZJ
RVdfQkFTRSh3ZWJWaWV3KSwgaGl0VGVzdFJlc3VsdC0+ZWxlbWVudEJvdW5kaW5nQm94KCkpOwor
ICAgIHdlYmtpdFdlYlZpZXdCYXNlU2V0VG9vbHRpcEFyZWEoV0VCS0lUX1dFQl9WSUVXX0JBU0Uo
d2ViVmlldyksIGhpdFRlc3RSZXN1bHQuZWxlbWVudEJvdW5kaW5nQm94KTsKIAogICAgIFdlYktp
dFdlYlZpZXdQcml2YXRlKiBwcml2ID0gd2ViVmlldy0+cHJpdjsKICAgICBpZiAocHJpdi0+bW91
c2VUYXJnZXRIaXRUZXN0UmVzdWx0CkBAIC0xODI4LDcgKzE4MzMsMTkgQEAgdm9pZCB3ZWJraXRX
ZWJWaWV3UG9wdWxhdGVDb250ZXh0TWVudShXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBBUEk6OkFy
cmF5KiBwcm9wb3MKICAgICBpZiAod2ViSGl0VGVzdFJlc3VsdC0+aXNDb250ZW50RWRpdGFibGUo
KSkKICAgICAgICAgd2Via2l0V2ViVmlld0NyZWF0ZUFuZEFwcGVuZElucHV0TWV0aG9kc01lbnVJ
dGVtKHdlYlZpZXcsIGNvbnRleHRNZW51LmdldCgpKTsKIAotICAgIEdSZWZQdHI8V2ViS2l0SGl0
VGVzdFJlc3VsdD4gaGl0VGVzdFJlc3VsdCA9IGFkb3B0R1JlZih3ZWJraXRIaXRUZXN0UmVzdWx0
Q3JlYXRlKHdlYkhpdFRlc3RSZXN1bHQpKTsKKyAgICAvLyBGSVhNRTogd2Ugc2hvdWxkIHVzZSBh
IGN1c3RvbSBDb250ZXh0TWVudUNsaWVudCBhdCBzb21lIHBvaW50LCB0aGF0IHdpbGwgcmVjZWl2
ZSBhCisgICAgLy8gY29uc3QgV2ViSGl0VGVzdFJlc3VsdDo6RGF0YSYgdGhhdCB3ZSBjYW4gdXNl
IGRpcmVjdGx5IGhlcmUuCisgICAgV2ViSGl0VGVzdFJlc3VsdDo6RGF0YSBkYXRhOworICAgIGRh
dGEuYWJzb2x1dGVJbWFnZVVSTCA9IHdlYkhpdFRlc3RSZXN1bHQtPmFic29sdXRlSW1hZ2VVUkwo
KTsKKyAgICBkYXRhLmFic29sdXRlTGlua1VSTCA9IHdlYkhpdFRlc3RSZXN1bHQtPmFic29sdXRl
TGlua1VSTCgpOworICAgIGRhdGEuYWJzb2x1dGVNZWRpYVVSTCA9IHdlYkhpdFRlc3RSZXN1bHQt
PmFic29sdXRlTWVkaWFVUkwoKTsKKyAgICBkYXRhLmxpbmtMYWJlbCA9IHdlYkhpdFRlc3RSZXN1
bHQtPmxpbmtMYWJlbCgpOworICAgIGRhdGEubGlua1RpdGxlID0gd2ViSGl0VGVzdFJlc3VsdC0+
bGlua1RpdGxlKCk7CisgICAgZGF0YS5pc0NvbnRlbnRFZGl0YWJsZSA9IHdlYkhpdFRlc3RSZXN1
bHQtPmlzQ29udGVudEVkaXRhYmxlKCk7CisgICAgZGF0YS5lbGVtZW50Qm91bmRpbmdCb3ggPSB3
ZWJIaXRUZXN0UmVzdWx0LT5lbGVtZW50Qm91bmRpbmdCb3goKTsKKyAgICBkYXRhLmlzU2Nyb2xs
YmFyID0gd2ViSGl0VGVzdFJlc3VsdC0+aXNTY3JvbGxiYXIoKTsKKworICAgIEdSZWZQdHI8V2Vi
S2l0SGl0VGVzdFJlc3VsdD4gaGl0VGVzdFJlc3VsdCA9IGFkb3B0R1JlZih3ZWJraXRIaXRUZXN0
UmVzdWx0Q3JlYXRlKGRhdGEpKTsKICAgICBHVW5pcXVlUHRyPEdka0V2ZW50PiBjb250ZXh0TWVu
dUV2ZW50KHdlYmtpdFdlYlZpZXdCYXNlVGFrZUNvbnRleHRNZW51RXZlbnQod2ViVmlld0Jhc2Up
KTsKIAogICAgIGdib29sZWFuIHJldHVyblZhbHVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5oIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5oCmluZGV4IDk4MGY0NTguLjU0OWQyNTQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcu
aAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmgK
QEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdEZvcndhcmREZWNsYXJh
dGlvbnMuaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdEhpdFRlc3RSZXN1bHQuaD4KICNpbmNs
dWRlIDx3ZWJraXQyL1dlYktpdEphdmFzY3JpcHRSZXN1bHQuaD4KKyNpbmNsdWRlIDx3ZWJraXQy
L1dlYktpdE5hdmlnYXRpb25BY3Rpb24uaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdFBlcm1p
c3Npb25SZXF1ZXN0Lmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRQb2xpY3lEZWNpc2lvbi5o
PgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0U2NyaXB0RGlhbG9nLmg+CkBAIC0xOTQsNyArMTk1
LDggQEAgc3RydWN0IF9XZWJLaXRXZWJWaWV3Q2xhc3MgewogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgICAgICAgICAgICAgICAgICpm
YWlsaW5nX3VyaSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEdFcnJvciAgICAgICAgICAgICAgICAgICAgICAqZXJyb3IpOwogCi0gICAgR3RrV2lkZ2V0
ICooKiBjcmVhdGUpICAgICAgICAgICAgICAgICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAg
ICAgICAgKndlYl92aWV3KTsKKyAgICBHdGtXaWRnZXQgKigqIGNyZWF0ZSkgICAgICAgICAgICAg
ICAgICAgICAgKFdlYktpdFdlYlZpZXcgICAgICAgICAgICAgICAqd2ViX3ZpZXcsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJLaXROYXZpZ2F0aW9u
QWN0aW9uICAgICAgKm5hdmlnYXRpb25fYWN0aW9uKTsKICAgICB2b2lkICAgICAgICgqIHJlYWR5
X3RvX3Nob3cpICAgICAgICAgICAgICAgKFdlYktpdFdlYlZpZXcgICAgICAgICAgICAgICAqd2Vi
X3ZpZXcpOwogICAgIHZvaWQgICAgICAgKCogcnVuX2FzX21vZGFsKSAgICAgICAgICAgICAgICAo
V2ViS2l0V2ViVmlldyAgICAgICAgICAgICAgICp3ZWJfdmlldyk7CiAgICAgdm9pZCAgICAgICAo
KiBjbG9zZSkgICAgICAgICAgICAgICAgICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAgICAg
ICAgKndlYl92aWV3KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL1dlYktpdFdlYlZpZXdQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay9XZWJLaXRXZWJWaWV3UHJpdmF0ZS5oCmluZGV4IDExNTkxZmYuLjVmNjk0MWMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdQcml2
YXRlLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmll
d1ByaXZhdGUuaApAQCAtMjcsNiArMjcsNyBAQAogI2lmbmRlZiBXZWJLaXRXZWJWaWV3UHJpdmF0
ZV9oCiAjZGVmaW5lIFdlYktpdFdlYlZpZXdQcml2YXRlX2gKIAorI2luY2x1ZGUgIldlYkhpdFRl
c3RSZXN1bHQuaCIKICNpbmNsdWRlICJXZWJJbWFnZS5oIgogI2luY2x1ZGUgIldlYktpdFdlYlZp
ZXcuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CkBAIC0zNyw3ICszOCw3IEBAIHZv
aWQgd2Via2l0V2ViVmlld0xvYWRGYWlsZWRXaXRoVExTRXJyb3JzKFdlYktpdFdlYlZpZXcqLCBj
b25zdCBjaGFyKiBmYWlsaW5nVVJJCiB2b2lkIHdlYmtpdFdlYlZpZXdTZXRFc3RpbWF0ZWRMb2Fk
UHJvZ3Jlc3MoV2ViS2l0V2ViVmlldyosIGRvdWJsZSBlc3RpbWF0ZWRMb2FkUHJvZ3Jlc3MpOwog
dm9pZCB3ZWJraXRXZWJWaWV3U2V0VGl0bGUoV2ViS2l0V2ViVmlldyosIGNvbnN0IENTdHJpbmcm
KTsKIHZvaWQgd2Via2l0V2ViVmlld1VwZGF0ZVVSSShXZWJLaXRXZWJWaWV3Kik7Ci1XZWJLaXQ6
OldlYlBhZ2VQcm94eSogd2Via2l0V2ViVmlld0NyZWF0ZU5ld1BhZ2UoV2ViS2l0V2ViVmlldyos
IFdlYktpdDo6SW1tdXRhYmxlRGljdGlvbmFyeSogd2luZG93RmVhdHVyZXMpOworV2ViS2l0OjpX
ZWJQYWdlUHJveHkqIHdlYmtpdFdlYlZpZXdDcmVhdGVOZXdQYWdlKFdlYktpdFdlYlZpZXcqLCBj
b25zdCBXZWJDb3JlOjpXaW5kb3dGZWF0dXJlcyYsIFdlYktpdE5hdmlnYXRpb25BY3Rpb24qKTsK
IHZvaWQgd2Via2l0V2ViVmlld1JlYWR5VG9TaG93UGFnZShXZWJLaXRXZWJWaWV3Kik7CiB2b2lk
IHdlYmtpdFdlYlZpZXdSdW5Bc01vZGFsKFdlYktpdFdlYlZpZXcqKTsKIHZvaWQgd2Via2l0V2Vi
Vmlld0Nsb3NlUGFnZShXZWJLaXRXZWJWaWV3Kik7CkBAIC00Niw3ICs0Nyw3IEBAIGJvb2wgd2Vi
a2l0V2ViVmlld1J1bkphdmFTY3JpcHRDb25maXJtKFdlYktpdFdlYlZpZXcqLCBjb25zdCBDU3Ry
aW5nJiBtZXNzYWdlKTsKIENTdHJpbmcgd2Via2l0V2ViVmlld1J1bkphdmFTY3JpcHRQcm9tcHQo
V2ViS2l0V2ViVmlldyosIGNvbnN0IENTdHJpbmcmIG1lc3NhZ2UsIGNvbnN0IENTdHJpbmcmIGRl
ZmF1bHRUZXh0KTsKIHZvaWQgd2Via2l0V2ViVmlld01ha2VQZXJtaXNzaW9uUmVxdWVzdChXZWJL
aXRXZWJWaWV3KiwgV2ViS2l0UGVybWlzc2lvblJlcXVlc3QqKTsKIHZvaWQgd2Via2l0V2ViVmll
d01ha2VQb2xpY3lEZWNpc2lvbihXZWJLaXRXZWJWaWV3KiwgV2ViS2l0UG9saWN5RGVjaXNpb25U
eXBlLCBXZWJLaXRQb2xpY3lEZWNpc2lvbiopOwotdm9pZCB3ZWJraXRXZWJWaWV3TW91c2VUYXJn
ZXRDaGFuZ2VkKFdlYktpdFdlYlZpZXcqLCBXZWJLaXQ6OldlYkhpdFRlc3RSZXN1bHQqLCB1bnNp
Z25lZCBtb2RpZmllcnMpOwordm9pZCB3ZWJraXRXZWJWaWV3TW91c2VUYXJnZXRDaGFuZ2VkKFdl
YktpdFdlYlZpZXcqLCBjb25zdCBXZWJLaXQ6OldlYkhpdFRlc3RSZXN1bHQ6OkRhdGEmLCB1bnNp
Z25lZCBtb2RpZmllcnMpOwogdm9pZCB3ZWJraXRXZWJWaWV3UHJpbnRGcmFtZShXZWJLaXRXZWJW
aWV3KiwgV2ViS2l0OjpXZWJGcmFtZVByb3h5Kik7CiB2b2lkIHdlYmtpdFdlYlZpZXdSZXNvdXJj
ZUxvYWRTdGFydGVkKFdlYktpdFdlYlZpZXcqLCBXZWJLaXQ6OldlYkZyYW1lUHJveHkqLCB1aW50
NjRfdCByZXNvdXJjZUlkZW50aWZpZXIsIFdlYktpdFVSSVJlcXVlc3QqKTsKIHZvaWQgd2Via2l0
V2ViVmlld1J1bkZpbGVDaG9vc2VyUmVxdWVzdChXZWJLaXRXZWJWaWV3KiwgV2ViS2l0RmlsZUNo
b29zZXJSZXF1ZXN0Kik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay9XZWJLaXRXaW5kb3dQcm9wZXJ0aWVzLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdFdpbmRvd1Byb3BlcnRpZXMuY3BwCmluZGV4IGE0MGU2ZGIuLmJhYzg4
YjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdp
bmRvd1Byb3BlcnRpZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdFdpbmRvd1Byb3BlcnRpZXMuY3BwCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAi
V2ViS2l0UHJpdmF0ZS5oIgogI2luY2x1ZGUgIldlYktpdFdpbmRvd1Byb3BlcnRpZXNQcml2YXRl
LmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9JbnRSZWN0Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9XaW5k
b3dGZWF0dXJlcy5oPgogI2luY2x1ZGUgPGdsaWIvZ2kxOG4tbGliLmg+CiAKIHVzaW5nIG5hbWVz
cGFjZSBXZWJLaXQ7CkBAIC0zNzQsNTQgKzM3NSwyNiBAQCB2b2lkIHdlYmtpdFdpbmRvd1Byb3Bl
cnRpZXNTZXRGdWxsc2NyZWVuKFdlYktpdFdpbmRvd1Byb3BlcnRpZXMqIHdpbmRvd1Byb3BlcnRp
ZQogICAgIGdfb2JqZWN0X25vdGlmeShHX09CSkVDVCh3aW5kb3dQcm9wZXJ0aWVzKSwgImZ1bGxz
Y3JlZW4iKTsKIH0KIAotdm9pZCB3ZWJraXRXaW5kb3dQcm9wZXJ0aWVzVXBkYXRlRnJvbVdlYldp
bmRvd0ZlYXR1cmVzKFdlYktpdFdpbmRvd1Byb3BlcnRpZXMqIHdpbmRvd1Byb3BlcnRpZXMsIElt
bXV0YWJsZURpY3Rpb25hcnkqIGZlYXR1cmVzKQordm9pZCB3ZWJraXRXaW5kb3dQcm9wZXJ0aWVz
VXBkYXRlRnJvbVdlYldpbmRvd0ZlYXR1cmVzKFdlYktpdFdpbmRvd1Byb3BlcnRpZXMqIHdpbmRv
d1Byb3BlcnRpZXMsIGNvbnN0IFdpbmRvd0ZlYXR1cmVzJiB3aW5kb3dGZWF0dXJlcykKIHsKICAg
ICBHZGtSZWN0YW5nbGUgZ2VvbWV0cnkgPSB3aW5kb3dQcm9wZXJ0aWVzLT5wcml2LT5nZW9tZXRy
eTsKLQotICAgIEFQSTo6RG91YmxlKiBkb3VibGVWYWx1ZSA9IHN0YXRpY19jYXN0PEFQSTo6RG91
YmxlKj4oZmVhdHVyZXMtPmdldCgieCIpKTsKLSAgICBpZiAoZG91YmxlVmFsdWUpCi0gICAgICAg
IGdlb21ldHJ5LnggPSBkb3VibGVWYWx1ZS0+dmFsdWUoKTsKLQotICAgIGRvdWJsZVZhbHVlID0g
c3RhdGljX2Nhc3Q8QVBJOjpEb3VibGUqPihmZWF0dXJlcy0+Z2V0KCJ5IikpOwotICAgIGlmIChk
b3VibGVWYWx1ZSkKLSAgICAgICAgZ2VvbWV0cnkueSA9IGRvdWJsZVZhbHVlLT52YWx1ZSgpOwot
Ci0gICAgZG91YmxlVmFsdWUgPSBzdGF0aWNfY2FzdDxBUEk6OkRvdWJsZSo+KGZlYXR1cmVzLT5n
ZXQoIndpZHRoIikpOwotICAgIGlmIChkb3VibGVWYWx1ZSkKLSAgICAgICAgZ2VvbWV0cnkud2lk
dGggPSBkb3VibGVWYWx1ZS0+dmFsdWUoKTsKLQotICAgIGRvdWJsZVZhbHVlID0gc3RhdGljX2Nh
c3Q8QVBJOjpEb3VibGUqPihmZWF0dXJlcy0+Z2V0KCJoZWlnaHQiKSk7Ci0gICAgaWYgKGRvdWJs
ZVZhbHVlKQotICAgICAgICBnZW9tZXRyeS5oZWlnaHQgPSBkb3VibGVWYWx1ZS0+dmFsdWUoKTsK
KyAgICBpZiAod2luZG93RmVhdHVyZXMueFNldCkKKyAgICAgICAgZ2VvbWV0cnkueCA9IHdpbmRv
d0ZlYXR1cmVzLng7CisgICAgaWYgKHdpbmRvd0ZlYXR1cmVzLnlTZXQpCisgICAgICAgIGdlb21l
dHJ5LnkgPSB3aW5kb3dGZWF0dXJlcy55OworICAgIGlmICh3aW5kb3dGZWF0dXJlcy53aWR0aFNl
dCkKKyAgICAgICAgZ2VvbWV0cnkud2lkdGggPSB3aW5kb3dGZWF0dXJlcy53aWR0aDsKKyAgICBp
ZiAod2luZG93RmVhdHVyZXMuaGVpZ2h0U2V0KQorICAgICAgICBnZW9tZXRyeS5oZWlnaHQgPSB3
aW5kb3dGZWF0dXJlcy5oZWlnaHQ7CiAgICAgd2Via2l0V2luZG93UHJvcGVydGllc1NldEdlb21l
dHJ5KHdpbmRvd1Byb3BlcnRpZXMsICZnZW9tZXRyeSk7CiAKLSAgICBBUEk6OkJvb2xlYW4qIGJv
b2xlYW5WYWx1ZSA9IHN0YXRpY19jYXN0PEFQSTo6Qm9vbGVhbio+KGZlYXR1cmVzLT5nZXQoIm1l
bnVCYXJWaXNpYmxlIikpOwotICAgIGlmIChib29sZWFuVmFsdWUpCi0gICAgICAgIHdlYmtpdFdp
bmRvd1Byb3BlcnRpZXNTZXRNZW51YmFyVmlzaWJsZSh3aW5kb3dQcm9wZXJ0aWVzLCBib29sZWFu
VmFsdWUtPnZhbHVlKCkpOwotCi0gICAgYm9vbGVhblZhbHVlID0gc3RhdGljX2Nhc3Q8QVBJOjpC
b29sZWFuKj4oZmVhdHVyZXMtPmdldCgic3RhdHVzQmFyVmlzaWJsZSIpKTsKLSAgICBpZiAoYm9v
bGVhblZhbHVlKQotICAgICAgICB3ZWJraXRXaW5kb3dQcm9wZXJ0aWVzU2V0U3RhdHVzYmFyVmlz
aWJsZSh3aW5kb3dQcm9wZXJ0aWVzLCBib29sZWFuVmFsdWUtPnZhbHVlKCkpOwotCi0gICAgYm9v
bGVhblZhbHVlID0gc3RhdGljX2Nhc3Q8QVBJOjpCb29sZWFuKj4oZmVhdHVyZXMtPmdldCgidG9v
bEJhclZpc2libGUiKSk7Ci0gICAgaWYgKGJvb2xlYW5WYWx1ZSkKLSAgICAgICAgd2Via2l0V2lu
ZG93UHJvcGVydGllc1NldFRvb2xiYXJWaXNpYmxlKHdpbmRvd1Byb3BlcnRpZXMsIGJvb2xlYW5W
YWx1ZS0+dmFsdWUoKSk7Ci0KLSAgICBib29sZWFuVmFsdWUgPSBzdGF0aWNfY2FzdDxBUEk6OkJv
b2xlYW4qPihmZWF0dXJlcy0+Z2V0KCJsb2NhdGlvbkJhclZpc2libGUiKSk7Ci0gICAgaWYgKGJv
b2xlYW5WYWx1ZSkKLSAgICAgICAgd2Via2l0V2luZG93UHJvcGVydGllc1NldExvY2F0aW9uYmFy
VmlzaWJsZSh3aW5kb3dQcm9wZXJ0aWVzLCBib29sZWFuVmFsdWUtPnZhbHVlKCkpOwotCi0gICAg
Ym9vbGVhblZhbHVlID0gc3RhdGljX2Nhc3Q8QVBJOjpCb29sZWFuKj4oZmVhdHVyZXMtPmdldCgi
c2Nyb2xsYmFyc1Zpc2libGUiKSk7Ci0gICAgaWYgKGJvb2xlYW5WYWx1ZSkKLSAgICAgICAgd2Vi
a2l0V2luZG93UHJvcGVydGllc1NldFNjcm9sbGJhcnNWaXNpYmxlKHdpbmRvd1Byb3BlcnRpZXMs
IGJvb2xlYW5WYWx1ZS0+dmFsdWUoKSk7Ci0KLSAgICBib29sZWFuVmFsdWUgPSBzdGF0aWNfY2Fz
dDxBUEk6OkJvb2xlYW4qPihmZWF0dXJlcy0+Z2V0KCJyZXNpemFibGUiKSk7Ci0gICAgaWYgKGJv
b2xlYW5WYWx1ZSkKLSAgICAgICAgd2Via2l0V2luZG93UHJvcGVydGllc1NldFJlc2l6YWJsZSh3
aW5kb3dQcm9wZXJ0aWVzLCBib29sZWFuVmFsdWUtPnZhbHVlKCkpOwotCi0gICAgYm9vbGVhblZh
bHVlID0gc3RhdGljX2Nhc3Q8QVBJOjpCb29sZWFuKj4oZmVhdHVyZXMtPmdldCgiZnVsbHNjcmVl
biIpKTsKLSAgICBpZiAoYm9vbGVhblZhbHVlKQotICAgICAgICB3ZWJraXRXaW5kb3dQcm9wZXJ0
aWVzU2V0RnVsbHNjcmVlbih3aW5kb3dQcm9wZXJ0aWVzLCBib29sZWFuVmFsdWUtPnZhbHVlKCkp
OworICAgIHdlYmtpdFdpbmRvd1Byb3BlcnRpZXNTZXRNZW51YmFyVmlzaWJsZSh3aW5kb3dQcm9w
ZXJ0aWVzLCB3aW5kb3dGZWF0dXJlcy5tZW51QmFyVmlzaWJsZSk7CisgICAgd2Via2l0V2luZG93
UHJvcGVydGllc1NldFN0YXR1c2JhclZpc2libGUod2luZG93UHJvcGVydGllcywgd2luZG93RmVh
dHVyZXMuc3RhdHVzQmFyVmlzaWJsZSk7CisgICAgd2Via2l0V2luZG93UHJvcGVydGllc1NldFRv
b2xiYXJWaXNpYmxlKHdpbmRvd1Byb3BlcnRpZXMsIHdpbmRvd0ZlYXR1cmVzLnRvb2xCYXJWaXNp
YmxlKTsKKyAgICB3ZWJraXRXaW5kb3dQcm9wZXJ0aWVzU2V0TG9jYXRpb25iYXJWaXNpYmxlKHdp
bmRvd1Byb3BlcnRpZXMsIHdpbmRvd0ZlYXR1cmVzLmxvY2F0aW9uQmFyVmlzaWJsZSk7CisgICAg
d2Via2l0V2luZG93UHJvcGVydGllc1NldFNjcm9sbGJhcnNWaXNpYmxlKHdpbmRvd1Byb3BlcnRp
ZXMsIHdpbmRvd0ZlYXR1cmVzLnNjcm9sbGJhcnNWaXNpYmxlKTsKKyAgICB3ZWJraXRXaW5kb3dQ
cm9wZXJ0aWVzU2V0UmVzaXphYmxlKHdpbmRvd1Byb3BlcnRpZXMsIHdpbmRvd0ZlYXR1cmVzLnJl
c2l6YWJsZSk7CisgICAgd2Via2l0V2luZG93UHJvcGVydGllc1NldEZ1bGxzY3JlZW4od2luZG93
UHJvcGVydGllcywgd2luZG93RmVhdHVyZXMuZnVsbHNjcmVlbik7CiB9CiAKIC8qKgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2luZG93UHJvcGVy
dGllc1ByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdp
bmRvd1Byb3BlcnRpZXNQcml2YXRlLmgKaW5kZXggOGVjMTdiNC4uMDVlNGI5YiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2luZG93UHJvcGVydGll
c1ByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRX
aW5kb3dQcm9wZXJ0aWVzUHJpdmF0ZS5oCkBAIC0zMSw3ICszMSw3IEBACiAjaW5jbHVkZSAiV2Vi
S2l0V2luZG93UHJvcGVydGllcy5oIgogCiBXZWJLaXRXaW5kb3dQcm9wZXJ0aWVzKiB3ZWJraXRX
aW5kb3dQcm9wZXJ0aWVzQ3JlYXRlKCk7Ci12b2lkIHdlYmtpdFdpbmRvd1Byb3BlcnRpZXNVcGRh
dGVGcm9tV2ViV2luZG93RmVhdHVyZXMoV2ViS2l0V2luZG93UHJvcGVydGllcyosIFdlYktpdDo6
SW1tdXRhYmxlRGljdGlvbmFyeSogZmVhdHVyZXMpOwordm9pZCB3ZWJraXRXaW5kb3dQcm9wZXJ0
aWVzVXBkYXRlRnJvbVdlYldpbmRvd0ZlYXR1cmVzKFdlYktpdFdpbmRvd1Byb3BlcnRpZXMqLCBj
b25zdCBXZWJDb3JlOjpXaW5kb3dGZWF0dXJlcyYpOwogdm9pZCB3ZWJraXRXaW5kb3dQcm9wZXJ0
aWVzU2V0R2VvbWV0cnkoV2ViS2l0V2luZG93UHJvcGVydGllcyosIEdka1JlY3RhbmdsZSopOwog
dm9pZCB3ZWJraXRXaW5kb3dQcm9wZXJ0aWVzU2V0VG9vbGJhclZpc2libGUoV2ViS2l0V2luZG93
UHJvcGVydGllcyosIGJvb2wgdG9vbGJhcnNWaXNpYmxlKTsKIHZvaWQgd2Via2l0V2luZG93UHJv
cGVydGllc1NldE1lbnViYXJWaXNpYmxlKFdlYktpdFdpbmRvd1Byb3BlcnRpZXMqLCBib29sIG1l
bnVCYXJWaXNpYmxlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL2RvY3Mvd2Via2l0Mmd0ay1kb2NzLnNnbWwgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay9kb2NzL3dlYmtpdDJndGstZG9jcy5zZ21sCmluZGV4IGUzY2Y5YTYuLjFiNzE1NjUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0
Mmd0ay1kb2NzLnNnbWwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9j
cy93ZWJraXQyZ3RrLWRvY3Muc2dtbApAQCAtMjMsNiArMjMsNyBAQAogICAgIDx4aTppbmNsdWRl
IGhyZWY9InhtbC9XZWJLaXREb3dubG9hZC54bWwiLz4KICAgICA8eGk6aW5jbHVkZSBocmVmPSJ4
bWwvV2ViS2l0UGVybWlzc2lvblJlcXVlc3QueG1sIi8+CiAgICAgPHhpOmluY2x1ZGUgaHJlZj0i
eG1sL1dlYktpdEdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3QueG1sIi8+CisgICAgPHhpOmlu
Y2x1ZGUgaHJlZj0ieG1sL1dlYktpdE5hdmlnYXRpb25BY3Rpb24ueG1sIi8+CiAgICAgPHhpOmlu
Y2x1ZGUgaHJlZj0ieG1sL1dlYktpdFBvbGljeURlY2lzaW9uLnhtbCIvPgogICAgIDx4aTppbmNs
dWRlIGhyZWY9InhtbC9XZWJLaXROYXZpZ2F0aW9uUG9saWN5RGVjaXNpb24ueG1sIi8+CiAgICAg
PHhpOmluY2x1ZGUgaHJlZj0ieG1sL1dlYktpdFJlc3BvbnNlUG9saWN5RGVjaXNpb24ueG1sIi8+
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtp
dDJndGstc2VjdGlvbnMudHh0IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9j
cy93ZWJraXQyZ3RrLXNlY3Rpb25zLnR4dAppbmRleCA0N2I4NjRlLi41NDgxM2M5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstc2Vj
dGlvbnMudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Vi
a2l0Mmd0ay1zZWN0aW9ucy50eHQKQEAgLTUyMSw2ICs1MjEsMjQgQEAgd2Via2l0X2dlb2xvY2F0
aW9uX3Blcm1pc3Npb25fcmVxdWVzdF9nZXRfdHlwZQogPC9TRUNUSU9OPgogCiA8U0VDVElPTj4K
KzxGSUxFPldlYktpdE5hdmlnYXRpb25BY3Rpb248L0ZJTEU+CitXZWJLaXROYXZpZ2F0aW9uQWN0
aW9uCit3ZWJraXRfbmF2aWdhdGlvbl9hY3Rpb25fY29weQord2Via2l0X25hdmlnYXRpb25fYWN0
aW9uX2ZyZWUKK3dlYmtpdF9uYXZpZ2F0aW9uX2FjdGlvbl9nZXRfbmF2aWdhdGlvbl90eXBlCit3
ZWJraXRfbmF2aWdhdGlvbl9hY3Rpb25fZ2V0X21vdXNlX2J1dHRvbgord2Via2l0X25hdmlnYXRp
b25fYWN0aW9uX2dldF9tb2RpZmllcnMKK3dlYmtpdF9uYXZpZ2F0aW9uX2FjdGlvbl9nZXRfcmVx
dWVzdAord2Via2l0X25hdmlnYXRpb25fYWN0aW9uX2lzX3VzZXJfZ2VzdHVyZQorCis8U1VCU0VD
VElPTiBTdGFuZGFyZD4KK1dFQktJVF9UWVBFX05BVklHQVRJT05fQUNUSU9OCisKKzxTVUJTRUNU
SU9OIFByaXZhdGU+Cit3ZWJraXRfbmF2aWdhdGlvbl9hY3Rpb25fZ2V0X3R5cGUKKzwvU0VDVElP
Tj4KKworPFNFQ1RJT04+CiA8RklMRT5XZWJLaXRQb2xpY3lEZWNpc2lvbjwvRklMRT4KIFdlYktp
dFBvbGljeURlY2lzaW9uCiB3ZWJraXRfcG9saWN5X2RlY2lzaW9uX2Rvd25sb2FkCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay93ZWJraXQyLmggYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay93ZWJraXQyLmgKaW5kZXggYzE4NTM4YS4uNDY0OTBh
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvd2Via2l0Mi5o
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdDIuaApAQCAtNDks
NiArNDksNyBAQAogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0SGl0VGVzdFJlc3VsdC5oPgogI2lu
Y2x1ZGUgPHdlYmtpdDIvV2ViS2l0SmF2YXNjcmlwdFJlc3VsdC5oPgogI2luY2x1ZGUgPHdlYmtp
dDIvV2ViS2l0TWltZUluZm8uaD4KKyNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdE5hdmlnYXRpb25B
Y3Rpb24uaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lv
bi5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0UGVybWlzc2lvblJlcXVlc3QuaD4KICNpbmNs
dWRlIDx3ZWJraXQyL1dlYktpdFBsdWdpbi5oPgpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9n
IGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDg2M2YyMGUuLmVjNTM0NjYgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMyBAQAorMjAx
NC0wNi0xMCAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CisKKyAg
ICAgICAgW0dUS10gV2ViS2l0V2ViVmlldzo6Y3JlYXRlIHNob3VsZCByZWNlaXZlIGluZm9ybWF0
aW9uIGFib3V0IHRoZSBuYXZpZ2F0aW9uIGFjdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMzNjgwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIHVuaXQgdGVzdCB0byBjaGVjayB0aGUgV2ViS2l0
TmF2aWdhdGlvbkFjdGlvbiBwYXNzZWQgdG8KKyAgICAgICAgV2ViS2l0V2ViVmlldzo6Y3JlYXRl
IGNhbGxiYWNrLgorCisgICAgICAgICogTWluaUJyb3dzZXIvZ3RrL0Jyb3dzZXJXaW5kb3cuYzoK
KyAgICAgICAgKHdlYlZpZXdDcmVhdGUpOiBBZGQgV2ViS2l0TmF2aWdhdGlvbkFjdGlvbiBwYXJh
bWV0ZXIuCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RNdWx0
aXByb2Nlc3MuY3BwOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9U
ZXN0UHJpbnRpbmcuY3BwOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0
ay9UZXN0VUlDbGllbnQuY3BwOgorICAgICAgICAodGVzdFdlYlZpZXdDcmVhdGVOYXZpZ2F0aW9u
RGF0YSk6CisgICAgICAgIChiZWZvcmVBbGwpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0Mkd0ay9UZXN0V2ViS2l0UG9saWN5Q2xpZW50LmNwcDoKKyAgICAgICAgKGNyZWF0
ZUNhbGxiYWNrKToKKwogMjAxNC0wNi0yNCAgSmF2aWVyIEZlcm5hbmRleiAgPGpmZXJuYW5kZXpA
aWdhbGlhLmNvbT4KIAogICAgICAgICBOYW1lIG1vdmluZy4gVW5yZXZpZXdlZC4KZGlmZiAtLWdp
dCBhL1Rvb2xzL01pbmlCcm93c2VyL2d0ay9Ccm93c2VyV2luZG93LmMgYi9Ub29scy9NaW5pQnJv
d3Nlci9ndGsvQnJvd3NlcldpbmRvdy5jCmluZGV4IDQzNzQ3NzMuLjY1YjA5NmMgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL01pbmlCcm93c2VyL2d0ay9Ccm93c2VyV2luZG93LmMKKysrIGIvVG9vbHMvTWlu
aUJyb3dzZXIvZ3RrL0Jyb3dzZXJXaW5kb3cuYwpAQCAtMzQ4LDcgKzM0OCw3IEBAIHN0YXRpYyBn
Ym9vbGVhbiB3ZWJWaWV3TGVhdmVGdWxsU2NyZWVuKFdlYktpdFdlYlZpZXcgKndlYlZpZXcsIEJy
b3dzZXJXaW5kb3cgKndpCiAgICAgcmV0dXJuIEZBTFNFOwogfQogCi1zdGF0aWMgR3RrV2lkZ2V0
ICp3ZWJWaWV3Q3JlYXRlKFdlYktpdFdlYlZpZXcgKndlYlZpZXcsIEJyb3dzZXJXaW5kb3cgKndp
bmRvdykKK3N0YXRpYyBHdGtXaWRnZXQgKndlYlZpZXdDcmVhdGUoV2ViS2l0V2ViVmlldyAqd2Vi
VmlldywgV2ViS2l0TmF2aWdhdGlvbkFjdGlvbiAqbmF2aWdhdGlvbiwgQnJvd3NlcldpbmRvdyAq
d2luZG93KQogewogICAgIFdlYktpdFdlYlZpZXcgKm5ld1dlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJ
RVcod2Via2l0X3dlYl92aWV3X25ld193aXRoX3JlbGF0ZWRfdmlldyh3ZWJWaWV3KSk7CiAgICAg
d2Via2l0X3dlYl92aWV3X3NldF9zZXR0aW5ncyhuZXdXZWJWaWV3LCB3ZWJraXRfd2ViX3ZpZXdf
Z2V0X3NldHRpbmdzKHdlYlZpZXcpKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Mkd0ay9UZXN0TXVsdGlwcm9jZXNzLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0TXVsdGlwcm9jZXNzLmNwcAppbmRleCA3NjVlNTQyLi5m
ODM4MGQyIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsv
VGVzdE11bHRpcHJvY2Vzcy5jcHAKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXQyR3RrL1Rlc3RNdWx0aXByb2Nlc3MuY3BwCkBAIC0xMzgsNyArMTM4LDcgQEAgcHVibGljOgog
ICAgICAgICBDbG9zZQogICAgIH07CiAKLSAgICBzdGF0aWMgR3RrV2lkZ2V0KiB2aWV3Q3JlYXRl
Q2FsbGJhY2soV2ViS2l0V2ViVmlldyogd2ViVmlldywgVUlDbGllbnRNdWx0aXByb2Nlc3NUZXN0
KiB0ZXN0KQorICAgIHN0YXRpYyBHdGtXaWRnZXQqIHZpZXdDcmVhdGVDYWxsYmFjayhXZWJLaXRX
ZWJWaWV3KiB3ZWJWaWV3LCBXZWJLaXROYXZpZ2F0aW9uQWN0aW9uKiwgVUlDbGllbnRNdWx0aXBy
b2Nlc3NUZXN0KiB0ZXN0KQogICAgIHsKICAgICAgICAgcmV0dXJuIHRlc3QtPnZpZXdDcmVhdGUo
d2ViVmlldyk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXQyR3RrL1Rlc3RQcmludGluZy5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdDJHdGsvVGVzdFByaW50aW5nLmNwcAppbmRleCA5OWVmYTdjLi5jZmExNjU2IDEwMDY0NAot
LS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdFByaW50aW5nLmNw
cAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdFByaW50aW5n
LmNwcApAQCAtMTk0LDcgKzE5NCw3IEBAIGNsYXNzIENsb3NlQWZ0ZXJQcmludFRlc3Q6IHB1Ymxp
YyBXZWJWaWV3VGVzdCB7CiBwdWJsaWM6CiAgICAgTUFLRV9HTElCX1RFU1RfRklYVFVSRShDbG9z
ZUFmdGVyUHJpbnRUZXN0KTsKIAotICAgIHN0YXRpYyBHdGtXaWRnZXQqIHdlYlZpZXdDcmVhdGUo
V2ViS2l0V2ViVmlldyogd2ViVmlldywgQ2xvc2VBZnRlclByaW50VGVzdCogdGVzdCkKKyAgICBz
dGF0aWMgR3RrV2lkZ2V0KiB3ZWJWaWV3Q3JlYXRlKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIFdl
YktpdE5hdmlnYXRpb25BY3Rpb24qLCBDbG9zZUFmdGVyUHJpbnRUZXN0KiB0ZXN0KQogICAgIHsK
ICAgICAgICAgcmV0dXJuIHRlc3QtPmNyZWF0ZVdlYlZpZXcoKTsKICAgICB9CmRpZmYgLS1naXQg
YS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdFVJQ2xpZW50LmNwcCBi
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0VUlDbGllbnQuY3BwCmlu
ZGV4IGQyNGVkYzYuLjFlNWJkZDIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0Mkd0ay9UZXN0VUlDbGllbnQuY3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Mkd0ay9UZXN0VUlDbGllbnQuY3BwCkBAIC0xMTcsOSArMTE3LDkgQEAgcHVi
bGljOgogICAgICAgICB0ZXN0LT5tX3dpbmRvd1Byb3BlcnRpZXNDaGFuZ2VkLmFkZChnX3BhcmFt
X3NwZWNfZ2V0X25hbWUocGFyYW1TcGVjKSk7CiAgICAgfQogCi0gICAgc3RhdGljIEd0a1dpZGdl
dCogdmlld0NyZWF0ZUNhbGxiYWNrKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIFVJQ2xpZW50VGVz
dCogdGVzdCkKKyAgICBzdGF0aWMgR3RrV2lkZ2V0KiB2aWV3Q3JlYXRlQ2FsbGJhY2soV2ViS2l0
V2ViVmlldyogd2ViVmlldywgV2ViS2l0TmF2aWdhdGlvbkFjdGlvbiogbmF2aWdhdGlvbiwgVUlD
bGllbnRUZXN0KiB0ZXN0KQogICAgIHsKLSAgICAgICAgcmV0dXJuIHRlc3QtPnZpZXdDcmVhdGUo
d2ViVmlldyk7CisgICAgICAgIHJldHVybiB0ZXN0LT52aWV3Q3JlYXRlKHdlYlZpZXcsIG5hdmln
YXRpb24pOwogICAgIH0KIAogICAgIHN0YXRpYyB2b2lkIHZpZXdSZWFkeVRvU2hvd0NhbGxiYWNr
KFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIFVJQ2xpZW50VGVzdCogdGVzdCkKQEAgLTI0MCw5ICsy
NDAsMTAgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9tb3VzZVRhcmdldEhpdFRlc3RSZXN1
bHQuZ2V0KCk7CiAgICAgfQogCi0gICAgdmlydHVhbCBHdGtXaWRnZXQqIHZpZXdDcmVhdGUoV2Vi
S2l0V2ViVmlldyogd2ViVmlldykKKyAgICB2aXJ0dWFsIEd0a1dpZGdldCogdmlld0NyZWF0ZShX
ZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBXZWJLaXROYXZpZ2F0aW9uQWN0aW9uKiBuYXZpZ2F0aW9u
KQogICAgIHsKICAgICAgICAgZ19hc3NlcnQod2ViVmlldyA9PSBtX3dlYlZpZXcpOworICAgICAg
ICBnX2Fzc2VydChuYXZpZ2F0aW9uKTsKIAogICAgICAgICBHdGtXaWRnZXQqIG5ld1dlYlZpZXcg
PSB3ZWJraXRfd2ViX3ZpZXdfbmV3X3dpdGhfY29udGV4dCh3ZWJraXRfd2ViX3ZpZXdfZ2V0X2Nv
bnRleHQod2ViVmlldykpOwogICAgICAgICBnX29iamVjdF9yZWZfc2luayhuZXdXZWJWaWV3KTsK
QEAgLTMwNSw2ICszMDYsOTcgQEAgc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdDcmVhdGVSZWFkeUNs
b3NlKFVJQ2xpZW50VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKICAgICBnX2Fzc2VydF9jbXBp
bnQoZXZlbnRzWzJdLCA9PSwgVUlDbGllbnRUZXN0OjpDbG9zZSk7CiB9CiAKK2NsYXNzIENyZWF0
ZU5hdmlnYXRpb25EYXRhVGVzdDogcHVibGljIFVJQ2xpZW50VGVzdCB7CitwdWJsaWM6CisgICAg
TUFLRV9HTElCX1RFU1RfRklYVFVSRShDcmVhdGVOYXZpZ2F0aW9uRGF0YVRlc3QpOworCisgICAg
Q3JlYXRlTmF2aWdhdGlvbkRhdGFUZXN0KCkKKyAgICAgICAgOiBtX25hdmlnYXRpb24obnVsbHB0
cikKKyAgICB7CisgICAgfQorCisgICAgfkNyZWF0ZU5hdmlnYXRpb25EYXRhVGVzdCgpCisgICAg
eworICAgICAgICBjbGVhck5hdmlnYXRpb24oKTsKKyAgICB9CisKKyAgICB2b2lkIGNsZWFyTmF2
aWdhdGlvbigpCisgICAgeworICAgICAgICBpZiAobV9uYXZpZ2F0aW9uKQorICAgICAgICAgICAg
d2Via2l0X25hdmlnYXRpb25fYWN0aW9uX2ZyZWUobV9uYXZpZ2F0aW9uKTsKKyAgICAgICAgbV9u
YXZpZ2F0aW9uID0gbnVsbHB0cjsKKyAgICB9CisKKyAgICBHdGtXaWRnZXQqIHZpZXdDcmVhdGUo
V2ViS2l0V2ViVmlldyogd2ViVmlldywgV2ViS2l0TmF2aWdhdGlvbkFjdGlvbiogbmF2aWdhdGlv
bikKKyAgICB7CisgICAgICAgIGdfYXNzZXJ0KG5hdmlnYXRpb24pOworICAgICAgICBnX2Fzc2Vy
dCghbV9uYXZpZ2F0aW9uKTsKKyAgICAgICAgbV9uYXZpZ2F0aW9uID0gd2Via2l0X25hdmlnYXRp
b25fYWN0aW9uX2NvcHkobmF2aWdhdGlvbik7CisgICAgICAgIGdfbWFpbl9sb29wX3F1aXQobV9t
YWluTG9vcCk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIHZvaWQgbG9h
ZEhUTUwoY29uc3QgY2hhciogaHRtbCkKKyAgICB7CisgICAgICAgIGNsZWFyTmF2aWdhdGlvbigp
OworICAgICAgICBXZWJWaWV3VGVzdDo6bG9hZEh0bWwoaHRtbCwgbnVsbHB0cik7CisgICAgfQor
CisgICAgdm9pZCBjbGlja0FuZFdhaXRVbnRpbE1haW5Mb29wRmluaXNoZXMoaW50IHgsIGludCB5
KQorICAgIHsKKyAgICAgICAgY2xlYXJOYXZpZ2F0aW9uKCk7CisgICAgICAgIGNsaWNrTW91c2VC
dXR0b24oeCwgeSwgMSk7CisgICAgICAgIGdfbWFpbl9sb29wX3J1bihtX21haW5Mb29wKTsKKyAg
ICB9CisKKyAgICB2b2lkIHJlbG9hZCgpCisgICAgeworICAgICAgICBjbGVhck5hdmlnYXRpb24o
KTsKKyAgICAgICAgd2Via2l0X3dlYl92aWV3X3JlbG9hZF9ieXBhc3NfY2FjaGUobV93ZWJWaWV3
KTsKKyAgICB9CisKKyAgICBXZWJLaXROYXZpZ2F0aW9uQWN0aW9uKiBtX25hdmlnYXRpb247Cit9
OworCitzdGF0aWMgdm9pZCB0ZXN0V2ViVmlld0NyZWF0ZU5hdmlnYXRpb25EYXRhKENyZWF0ZU5h
dmlnYXRpb25EYXRhVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICB0ZXN0LT5zaG93
SW5XaW5kb3dBbmRXYWl0VW50aWxNYXBwZWQoKTsKKworICAgIHRlc3QtPmxvYWRIVE1MKAorICAg
ICAgICAiPGh0bWw+PGJvZHk+IgorICAgICAgICAiPGlucHV0IHN0eWxlPVwicG9zaXRpb246YWJz
b2x1dGU7IGxlZnQ6MDsgdG9wOjA7IG1hcmdpbjowOyBwYWRkaW5nOjBcIiB0eXBlPVwiYnV0dG9u
XCIgdmFsdWU9XCJjbGljayB0byBzaG93IGEgcG9wdXBcIiBvbmNsaWNrPVwid2luZG93Lm9wZW4o
J2RhdGE6Zm9vJyk7XCIvPiIKKyAgICAgICAgIjxhIHN0eWxlPVwicG9zaXRpb246YWJzb2x1dGU7
IGxlZnQ6MjA7IHRvcDoyMDtcIiBocmVmPVwiZGF0YTpiYXJcIiB0YXJnZXQ9XCJfYmxhbmtcIj5w
b3B1cCBsaW5rPC9hPiIKKyAgICAgICAgIjwvYm9keT48L2h0bWw+Iik7CisgICAgdGVzdC0+d2Fp
dFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICAvLyBDbGljayBvbiBhIGJ1dHRvbi4KKyAgICB0
ZXN0LT5jbGlja0FuZFdhaXRVbnRpbE1haW5Mb29wRmluaXNoZXMoNSwgNSk7CisgICAgZ19hc3Nl
cnRfY21wc3RyKHdlYmtpdF91cmlfcmVxdWVzdF9nZXRfdXJpKHdlYmtpdF9uYXZpZ2F0aW9uX2Fj
dGlvbl9nZXRfcmVxdWVzdCh0ZXN0LT5tX25hdmlnYXRpb24pKSwgPT0sICJkYXRhOmZvbyIpOwor
ICAgIGdfYXNzZXJ0X2NtcHVpbnQod2Via2l0X25hdmlnYXRpb25fYWN0aW9uX2dldF9uYXZpZ2F0
aW9uX3R5cGUodGVzdC0+bV9uYXZpZ2F0aW9uKSwgPT0sIFdFQktJVF9OQVZJR0FUSU9OX1RZUEVf
T1RIRVIpOworICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBidXR0b24gMS4KKyAgICBnX2Fz
c2VydF9jbXB1aW50KHdlYmtpdF9uYXZpZ2F0aW9uX2FjdGlvbl9nZXRfbW91c2VfYnV0dG9uKHRl
c3QtPm1fbmF2aWdhdGlvbiksID09LCAwKTsKKyAgICBnX2Fzc2VydF9jbXB1aW50KHdlYmtpdF9u
YXZpZ2F0aW9uX2FjdGlvbl9nZXRfbW9kaWZpZXJzKHRlc3QtPm1fbmF2aWdhdGlvbiksID09LCAw
KTsKKyAgICBnX2Fzc2VydCh3ZWJraXRfbmF2aWdhdGlvbl9hY3Rpb25faXNfdXNlcl9nZXN0dXJl
KHRlc3QtPm1fbmF2aWdhdGlvbikpOworCisgICAgLy8gQ2xpY2sgb24gYSBsaW5rLgorICAgIHRl
c3QtPmNsaWNrQW5kV2FpdFVudGlsTWFpbkxvb3BGaW5pc2hlcygyMSwgMjEpOworICAgIGdfYXNz
ZXJ0X2NtcHN0cih3ZWJraXRfdXJpX3JlcXVlc3RfZ2V0X3VyaSh3ZWJraXRfbmF2aWdhdGlvbl9h
Y3Rpb25fZ2V0X3JlcXVlc3QodGVzdC0+bV9uYXZpZ2F0aW9uKSksID09LCAiZGF0YTpiYXIiKTsK
KyAgICBnX2Fzc2VydF9jbXB1aW50KHdlYmtpdF9uYXZpZ2F0aW9uX2FjdGlvbl9nZXRfbmF2aWdh
dGlvbl90eXBlKHRlc3QtPm1fbmF2aWdhdGlvbiksID09LCBXRUJLSVRfTkFWSUdBVElPTl9UWVBF
X0xJTktfQ0xJQ0tFRCk7CisgICAgZ19hc3NlcnRfY21wdWludCh3ZWJraXRfbmF2aWdhdGlvbl9h
Y3Rpb25fZ2V0X21vdXNlX2J1dHRvbih0ZXN0LT5tX25hdmlnYXRpb24pLCA9PSwgMSk7CisgICAg
Z19hc3NlcnRfY21wdWludCh3ZWJraXRfbmF2aWdhdGlvbl9hY3Rpb25fZ2V0X21vZGlmaWVycyh0
ZXN0LT5tX25hdmlnYXRpb24pLCA9PSwgMCk7CisgICAgZ19hc3NlcnQod2Via2l0X25hdmlnYXRp
b25fYWN0aW9uX2lzX3VzZXJfZ2VzdHVyZSh0ZXN0LT5tX25hdmlnYXRpb24pKTsKKworICAgIC8v
IE5vIHVzZXIgaW50ZXJhY3Rpb24uCisgICAgdGVzdC0+bG9hZEhUTUwoIjxodG1sPjxib2R5IG9u
TG9hZD1cIndpbmRvdy5vcGVuKCk7XCI+PC9odG1sPiIpOworICAgIHRlc3QtPndhaXRVbnRpbE1h
aW5Mb29wRmluaXNoZXMoKTsKKworICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfdXJpX3JlcXVl
c3RfZ2V0X3VyaSh3ZWJraXRfbmF2aWdhdGlvbl9hY3Rpb25fZ2V0X3JlcXVlc3QodGVzdC0+bV9u
YXZpZ2F0aW9uKSksID09LCAiIik7CisgICAgZ19hc3NlcnRfY21wdWludCh3ZWJraXRfbmF2aWdh
dGlvbl9hY3Rpb25fZ2V0X25hdmlnYXRpb25fdHlwZSh0ZXN0LT5tX25hdmlnYXRpb24pLCA9PSwg
V0VCS0lUX05BVklHQVRJT05fVFlQRV9PVEhFUik7CisgICAgZ19hc3NlcnRfY21wdWludCh3ZWJr
aXRfbmF2aWdhdGlvbl9hY3Rpb25fZ2V0X21vdXNlX2J1dHRvbih0ZXN0LT5tX25hdmlnYXRpb24p
LCA9PSwgMCk7CisgICAgZ19hc3NlcnRfY21wdWludCh3ZWJraXRfbmF2aWdhdGlvbl9hY3Rpb25f
Z2V0X21vZGlmaWVycyh0ZXN0LT5tX25hdmlnYXRpb24pLCA9PSwgMCk7CisgICAgZ19hc3NlcnQo
IXdlYmtpdF9uYXZpZ2F0aW9uX2FjdGlvbl9pc191c2VyX2dlc3R1cmUodGVzdC0+bV9uYXZpZ2F0
aW9uKSk7Cit9CisKIHN0YXRpYyBnYm9vbGVhbiBjaGVja01pbWVUeXBlRm9yRmlsdGVyKEd0a0Zp
bGVGaWx0ZXIqIGZpbHRlciwgY29uc3QgZ2NoYXIqIG1pbWVUeXBlKQogewogICAgIEd0a0ZpbGVG
aWx0ZXJJbmZvIGZpbHRlckluZm87CkBAIC0zMjMsMTEgKzQxNSwxMSBAQCBwdWJsaWM6CiAgICAg
ICAgIHRlc3QtPm1fd2ViVmlld0V2ZW50cy5hcHBlbmQoUnVuQXNNb2RhbCk7CiAgICAgfQogCi0g
ICAgR3RrV2lkZ2V0KiB2aWV3Q3JlYXRlKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCisgICAgR3Rr
V2lkZ2V0KiB2aWV3Q3JlYXRlKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIFdlYktpdE5hdmlnYXRp
b25BY3Rpb24qIG5hdmlnYXRpb24pCiAgICAgewogICAgICAgICBnX2Fzc2VydCh3ZWJWaWV3ID09
IG1fd2ViVmlldyk7CiAKLSAgICAgICAgR3RrV2lkZ2V0KiBuZXdXZWJWaWV3ID0gVUlDbGllbnRU
ZXN0Ojp2aWV3Q3JlYXRlKHdlYlZpZXcpOworICAgICAgICBHdGtXaWRnZXQqIG5ld1dlYlZpZXcg
PSBVSUNsaWVudFRlc3Q6OnZpZXdDcmVhdGUod2ViVmlldywgbmF2aWdhdGlvbik7CiAgICAgICAg
IGdfc2lnbmFsX2Nvbm5lY3QobmV3V2ViVmlldywgInJ1bi1hcy1tb2RhbCIsIEdfQ0FMTEJBQ0so
ZGlhbG9nUnVuQXNNb2RhbENhbGxiYWNrKSwgdGhpcyk7CiAgICAgICAgIHJldHVybiBuZXdXZWJW
aWV3OwogICAgIH0KQEAgLTY2NSw2ICs3NTcsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0V2ViVmlld0Zp
bGVDaG9vc2VyUmVxdWVzdChGaWxlQ2hvb3NlclRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCiB2
b2lkIGJlZm9yZUFsbCgpCiB7CiAgICAgVUlDbGllbnRUZXN0OjphZGQoIldlYktpdFdlYlZpZXci
LCAiY3JlYXRlLXJlYWR5LWNsb3NlIiwgdGVzdFdlYlZpZXdDcmVhdGVSZWFkeUNsb3NlKTsKKyAg
ICBDcmVhdGVOYXZpZ2F0aW9uRGF0YVRlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJjcmVhdGUt
bmF2aWdhdGlvbi1kYXRhIiwgdGVzdFdlYlZpZXdDcmVhdGVOYXZpZ2F0aW9uRGF0YSk7CiAgICAg
TW9kYWxEaWFsb2dzVGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgImFsbG93LW1vZGFsLWRpYWxv
Z3MiLCB0ZXN0V2ViVmlld0FsbG93TW9kYWxEaWFsb2dzKTsKICAgICBNb2RhbERpYWxvZ3NUZXN0
OjphZGQoIldlYktpdFdlYlZpZXciLCAiZGlzYWxsb3ctbW9kYWwtZGlhbG9ncyIsIHRlc3RXZWJW
aWV3RGlzYWxsb3dNb2RhbERpYWxvZ3MpOwogICAgIFVJQ2xpZW50VGVzdDo6YWRkKCJXZWJLaXRX
ZWJWaWV3IiwgImphdmFzY3JpcHQtZGlhbG9ncyIsIHRlc3RXZWJWaWV3SmF2YVNjcmlwdERpYWxv
Z3MpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rl
c3RXZWJLaXRQb2xpY3lDbGllbnQuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXQyR3RrL1Rlc3RXZWJLaXRQb2xpY3lDbGllbnQuY3BwCmluZGV4IDIwOWVhMDQuLmZhOTEyNTcg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0V2Vi
S2l0UG9saWN5Q2xpZW50LmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dDJHdGsvVGVzdFdlYktpdFBvbGljeUNsaWVudC5jcHAKQEAgLTE5MSw3ICsxOTEsNyBAQCBzdHJ1
Y3QgQ3JlYXRlQ2FsbGJhY2tEYXRhIHsKICAgICBHTWFpbkxvb3AqIG1haW5Mb29wOwogfTsKIAot
c3RhdGljIFdlYktpdFdlYlZpZXcqIGNyZWF0ZUNhbGxiYWNrKFdlYktpdFdlYlZpZXcqIHdlYlZp
ZXcsIENyZWF0ZUNhbGxiYWNrRGF0YSogZGF0YSkKK3N0YXRpYyBXZWJLaXRXZWJWaWV3KiBjcmVh
dGVDYWxsYmFjayhXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBXZWJLaXROYXZpZ2F0aW9uQWN0aW9u
KiwgQ3JlYXRlQ2FsbGJhY2tEYXRhKiBkYXRhKQogewogICAgIGRhdGEtPnRyaWVkVG9PcGVuV2lu
ZG93ID0gdHJ1ZTsKICAgICBnX21haW5fbG9vcF9xdWl0KGRhdGEtPm1haW5Mb29wKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>233708</attachid>
            <date>2014-06-24 08:43:31 -0700</date>
            <delta_ts>2014-07-01 08:35:46 -0700</delta_ts>
            <desc>Fix the build</desc>
            <filename>wk2-create-navigation-action.diff</filename>
            <type>text/plain</type>
            <size>68053</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCA0Zjk1YzQ5Li5lOTJmOGI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODkg
QEAKKzIwMTQtMDYtMTAgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgorCisgICAgICAgIFtHVEtdIFdlYktpdFdlYlZpZXc6OmNyZWF0ZSBzaG91bGQgcmVjZWl2ZSBp
bmZvcm1hdGlvbiBhYm91dCB0aGUgbmF2aWdhdGlvbiBhY3Rpb24KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMzY4MAorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBXZWJLaXROYXZpZ2F0aW9uQWN0aW9u
IGJveGVkIHR5cGUgcmVwcmVzZW50aW5nIGEgbmF2aWdhdGlvbgorICAgICAgICBhY3Rpb24gdG8g
YmUgcGFzc2VkIGFzIHBhcmFtZXRlciBvZiBXZWJLaXRXZWJWaWV3OjpjcmVhdGUKKyAgICAgICAg
c2lnbmFsLiBJbiB0aGUgZnV0dXJlIGl0IGNvdWxkIGJlIGFsc28gZm9yIHRoZQorICAgICAgICBX
ZWJLaXROYXZpZ2F0aW9uUG9saWN5RGVjaXNpb24gY2xhc3MuIFRoZSBjbGFzcyBjb250YWlucwor
ICAgICAgICBpbmZvcm1hdGlvbiBhYm91dCBhIG5hdmlnYXRpb24gYWN0aW9uIGxpa2UgdGhlIG5h
dmlnYXRpb24gdHlwZSwKKyAgICAgICAgdGhlIHJlcXVlc3QsIHRoZSBtb3VzZSBidXR0b24gYW5k
IGtleSBtb2RpZmllcnMgYW5kIHdoZXRoZXIgaXQgd2FzCisgICAgICAgIHN0YXJ0ZWQgYnkgYSB1
c2VyIGdlc3R1cmUuIFRoaXMgaW5mb3JtYXRpb24gaXMgbmVlZGVkIHRvIGJlIGFibGUKKyAgICAg
ICAgdG8gaW1wbGVtZW50IGEgcHJvcGVyIHBvcHVwIGJsb2NrZXIuIFNpbmNlIGFsbCB0aGF0IGlu
Zm9ybWF0aW9uIGlzCisgICAgICAgIG5vdCBwcm92aWRlZCBieSB0aGUgQyBBUEksIHdlIGhhdmUg
c3dpdGNoZWQgdGhlIFVJIGNsaWVudCB0byB1c2UgYQorICAgICAgICBjdXN0b20gY2xpZW50IGRl
cml2ZWQgZnJvbSBBUEk6OlVJQ2xpZW50LiBUaGlzIGFsc28gYXZvaWRzIGEgbG90CisgICAgICAg
IG9mIHRvQVBJIC0+IHRvSW1wbCB1bm5lZWRlZCBjb252ZXJzaW9ucy4KKworICAgICAgICAqIFBs
YXRmb3JtR1RLLmNtYWtlOiBBZGQgbmV3IGZpbGVzIHRvIGNvbXBpbGF0aW9uLgorICAgICAgICAq
IFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEhpdFRlc3RSZXN1bHQuY3BwOgorICAgICAgICAod2Vi
a2l0SGl0VGVzdFJlc3VsdENyZWF0ZSk6IFVzZSBhIFdlYkhpdFRlc3RSZXN1bHQ6OkRhdGEgY29u
c3QKKyAgICAgICAgcmVmZXJlbmNlIGluc3RlYWQgb2YgYSBwb2ludGVyIHRvIGEgV2ViSGl0VGVz
dFJlc3VsdC4KKyAgICAgICAgKHdlYmtpdEhpdFRlc3RSZXN1bHRDb21wYXJlKTogRGl0dG8uCisg
ICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0SGl0VGVzdFJlc3VsdFByaXZhdGUuaDoK
KyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXROYXZpZ2F0aW9uQWN0aW9uLmNwcDog
QWRkZWQuCisgICAgICAgICh3ZWJraXROYXZpZ2F0aW9uQWN0aW9uQ3JlYXRlKTogQ3JlYXRlIGEg
V2ViS2l0TmF2aWdhdGlvbkFjdGlvbgorICAgICAgICBmb3IgdGhlIGdpdmVuIFJlc291cmNlUmVx
dWVzdCBhbmQgTmF2aWdhdGlvbkFjdGlvbkRhdGEuCisgICAgICAgICh3ZWJraXRfbmF2aWdhdGlv
bl9hY3Rpb25fY29weSk6CisgICAgICAgICh3ZWJraXRfbmF2aWdhdGlvbl9hY3Rpb25fZnJlZSk6
CisgICAgICAgICh3ZWJraXRfbmF2aWdhdGlvbl9hY3Rpb25fZ2V0X25hdmlnYXRpb25fdHlwZSk6
CisgICAgICAgICh3ZWJraXRfbmF2aWdhdGlvbl9hY3Rpb25fZ2V0X21vdXNlX2J1dHRvbik6Cisg
ICAgICAgICh3ZWJraXRfbmF2aWdhdGlvbl9hY3Rpb25fZ2V0X21vZGlmaWVycyk6CisgICAgICAg
ICh3ZWJraXRfbmF2aWdhdGlvbl9hY3Rpb25fZ2V0X3JlcXVlc3QpOgorICAgICAgICAod2Via2l0
X25hdmlnYXRpb25fYWN0aW9uX2lzX3VzZXJfZ2VzdHVyZSk6CisgICAgICAgICogVUlQcm9jZXNz
L0FQSS9ndGsvV2ViS2l0TmF2aWdhdGlvbkFjdGlvbi5oOiBBZGRlZC4KKyAgICAgICAgKiBVSVBy
b2Nlc3MvQVBJL2d0ay9XZWJLaXROYXZpZ2F0aW9uQWN0aW9uUHJpdmF0ZS5oOiBBZGRlZC4KKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXROYXZpZ2F0aW9uUG9saWN5RGVjaXNpb24u
aDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRQcml2YXRlLmNwcDoKKyAgICAg
ICAgKHRvR2RrTW9kaWZpZXJzKToKKyAgICAgICAgKHRvV2ViS2l0TmF2aWdhdGlvblR5cGUpOgor
ICAgICAgICAodG9XZWJLaXRNb3VzZUJ1dHRvbik6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0UHJpdmF0ZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFVJ
Q2xpZW50LmNwcDoKKyAgICAgICAgKFVJQ2xpZW50OjpVSUNsaWVudCk6IEltcGxlbWVudCB0aGUg
VUlDbGllbnQgdXNpbmcgYSBjdXN0b20gY2xhc3MuCisgICAgICAgIChhdHRhY2hVSUNsaWVudFRv
Vmlldyk6IFNldCB0aGUgVUlDbGllbnQgZGlyZWN0bHkgdG8gdGhlIFdlYlBhZ2VQcm94eS4KKyAg
ICAgICAgKGNyZWF0ZU5ld1BhZ2UpOiBEZWxldGVkLgorICAgICAgICAoc2hvd1BhZ2UpOiBEZWxl
dGVkLgorICAgICAgICAoY2xvc2VQYWdlKTogRGVsZXRlZC4KKyAgICAgICAgKHJ1bkphdmFTY3Jp
cHRBbGVydCk6IERlbGV0ZWQuCisgICAgICAgIChydW5KYXZhU2NyaXB0Q29uZmlybSk6IERlbGV0
ZWQuCisgICAgICAgIChydW5KYXZhU2NyaXB0UHJvbXB0KTogRGVsZXRlZC4KKyAgICAgICAgKHRv
b2xiYXJzQXJlVmlzaWJsZSk6IERlbGV0ZWQuCisgICAgICAgIChzZXRUb29sYmFyc0FyZVZpc2li
bGUpOiBEZWxldGVkLgorICAgICAgICAobWVudUJhcklzVmlzaWJsZSk6IERlbGV0ZWQuCisgICAg
ICAgIChzZXRNZW51QmFySXNWaXNpYmxlKTogRGVsZXRlZC4KKyAgICAgICAgKHN0YXR1c0Jhcklz
VmlzaWJsZSk6IERlbGV0ZWQuCisgICAgICAgIChzZXRTdGF0dXNCYXJJc1Zpc2libGUpOiBEZWxl
dGVkLgorICAgICAgICAoaXNSZXNpemFibGUpOiBEZWxldGVkLgorICAgICAgICAoc2V0SXNSZXNp
emFibGUpOiBEZWxldGVkLgorICAgICAgICAoZ2V0V2luZG93RnJhbWUpOiBEZWxldGVkLgorICAg
ICAgICAoc2V0V2luZG93RnJhbWUpOiBEZWxldGVkLgorICAgICAgICAobW91c2VEaWRNb3ZlT3Zl
ckVsZW1lbnQpOiBEZWxldGVkLgorICAgICAgICAocHJpbnRGcmFtZSk6IERlbGV0ZWQuCisgICAg
ICAgIChydW5PcGVuUGFuZWwpOiBEZWxldGVkLgorICAgICAgICAoZGVjaWRlUG9saWN5Rm9yR2Vv
bG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdCk6IERlbGV0ZWQuCisgICAgICAgIChydW5Nb2RhbCk6
IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5jcHA6
CisgICAgICAgICh3ZWJraXRXZWJWaWV3Q3JlYXRlKTogQWRkIFdlYktpdE5hdmlnYXRpb25BY3Rp
b24gcGFyYW1ldGVyLgorICAgICAgICAod2Via2l0X3dlYl92aWV3X2NsYXNzX2luaXQpOiBBZGQg
V2ViS2l0TmF2aWdhdGlvbkFjdGlvbiBwYXJhbXRlcgorICAgICAgICB0byBDUkVBVEUgc2lnbmFs
LgorICAgICAgICAod2Via2l0V2ViVmlld0NyZWF0ZU5ld1BhZ2UpOiBBZGQgV2ViS2l0TmF2aWdh
dGlvbkFjdGlvbiBwYXJhbWV0ZXIKKyAgICAgICAgYW5kIHBhc3MgaXQgdG8gdGhlIHNpZ25hbCBj
YWxsYmFja3MuCisgICAgICAgICh3ZWJraXRXZWJWaWV3TW91c2VUYXJnZXRDaGFuZ2VkKTogVXNl
IGEgV2ViSGl0VGVzdFJlc3VsdDo6RGF0YQorICAgICAgICBjb25zdCByZWZlcmVuY2UuCisgICAg
ICAgICh3ZWJraXRXZWJWaWV3UG9wdWxhdGVDb250ZXh0TWVudSk6IERpdHRvLgorICAgICAgICAq
IFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuaDoKKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXRXZWJWaWV3UHJpdmF0ZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
Z3RrL1dlYktpdFdpbmRvd1Byb3BlcnRpZXMuY3BwOgorICAgICAgICAod2Via2l0V2luZG93UHJv
cGVydGllc1VwZGF0ZUZyb21XZWJXaW5kb3dGZWF0dXJlcyk6IFVzZSBhCisgICAgICAgIFdlYkNv
cmU6OldpbmRvd0ZlYXR1cmVzIGNvbnN0IHJlZmVyZW5jZS4KKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXRXaW5kb3dQcm9wZXJ0aWVzUHJpdmF0ZS5oOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1kb2NzLnNnbWw6IEFkZCBuZXcgc2VjdGlvbi4K
KyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstc2VjdGlvbnMudHh0
OiBBZGQgbmV3IHN5bWJvbHMuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvd2Via2l0Mi5o
OiBJbmNsdWRlIFdlYktpdE5hdmlnYXRpb25BY3Rpb24uaC4KKwogMjAxNC0wNi0yNCAgQW5kZXJz
IENhcmxzc29uICA8YW5kZXJzY2FAYXBwbGUuY29tPgogCiAgICAgICAgIFdLV2ViVmlldyBkb2Vz
bid0IHJlc3BlY3QgLVtVSVNjcm9sbFZpZXcgY29udGVudEluc2V0XQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvUGxhdGZvcm1HVEsuY21ha2UgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUdU
Sy5jbWFrZQppbmRleCA3NjQ5ZjE0Li5hNGJhOWFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9QbGF0Zm9ybUdUSy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUdUSy5jbWFr
ZQpAQCAtMTYyLDYgKzE2Miw5IEBAIGxpc3QoQVBQRU5EIFdlYktpdDJfU09VUkNFUwogICAgIFVJ
UHJvY2Vzcy9BUEkvZ3RrL1dlYktpdE1pbWVJbmZvLmNwcAogICAgIFVJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdE1pbWVJbmZvLmgKICAgICBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRNaW1lSW5mb1By
aXZhdGUuaAorICAgIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdE5hdmlnYXRpb25BY3Rpb24uY3Bw
CisgICAgVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0TmF2aWdhdGlvbkFjdGlvbi5oCisgICAgVUlQ
cm9jZXNzL0FQSS9ndGsvV2ViS2l0TmF2aWdhdGlvbkFjdGlvblByaXZhdGUuaAogICAgIFVJUHJv
Y2Vzcy9BUEkvZ3RrL1dlYktpdE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbi5jcHAKICAgICBVSVBy
b2Nlc3MvQVBJL2d0ay9XZWJLaXROYXZpZ2F0aW9uUG9saWN5RGVjaXNpb24uaAogICAgIFVJUHJv
Y2Vzcy9BUEkvZ3RrL1dlYktpdE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvblByaXZhdGUuaApAQCAt
MzM3LDYgKzM0MCw3IEBAIHNldChXZWJLaXQyR1RLX0lOU1RBTExFRF9IRUFERVJTCiAgICAgJHtX
RUJLSVQyX0RJUn0vVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0SGl0VGVzdFJlc3VsdC5oCiAgICAg
JHtXRUJLSVQyX0RJUn0vVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0SmF2YXNjcmlwdFJlc3VsdC5o
CiAgICAgJHtXRUJLSVQyX0RJUn0vVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0TWltZUluZm8uaAor
ICAgICR7V0VCS0lUMl9ESVJ9L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdE5hdmlnYXRpb25BY3Rp
b24uaAogICAgICR7V0VCS0lUMl9ESVJ9L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdE5hdmlnYXRp
b25Qb2xpY3lEZWNpc2lvbi5oCiAgICAgJHtXRUJLSVQyX0RJUn0vVUlQcm9jZXNzL0FQSS9ndGsv
V2ViS2l0UGVybWlzc2lvblJlcXVlc3QuaAogICAgICR7V0VCS0lUMl9ESVJ9L1VJUHJvY2Vzcy9B
UEkvZ3RrL1dlYktpdFBsdWdpbi5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay9XZWJLaXRIaXRUZXN0UmVzdWx0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL1dlYktpdEhpdFRlc3RSZXN1bHQuY3BwCmluZGV4IDkxOGQzMTYuLjE5ODJh
YTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEhp
dFRlc3RSZXN1bHQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dl
YktpdEhpdFRlc3RSZXN1bHQuY3BwCkBAIC0yMjEsMzkgKzIyMSwzMyBAQCBzdGF0aWMgdm9pZCB3
ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NsYXNzX2luaXQoV2ViS2l0SGl0VGVzdFJlc3VsdENsYXNz
KiBoaXRUZXN0UgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwYXJhbUZsYWdzKSk7CiB9CiAKLVdlYktpdEhpdFRlc3RSZXN1bHQqIHdlYmtp
dEhpdFRlc3RSZXN1bHRDcmVhdGUoV2ViSGl0VGVzdFJlc3VsdCogaGl0VGVzdFJlc3VsdCkKK1dl
YktpdEhpdFRlc3RSZXN1bHQqIHdlYmtpdEhpdFRlc3RSZXN1bHRDcmVhdGUoY29uc3QgV2ViSGl0
VGVzdFJlc3VsdDo6RGF0YSYgaGl0VGVzdFJlc3VsdCkKIHsKICAgICB1bnNpZ25lZCBjb250ZXh0
ID0gV0VCS0lUX0hJVF9URVNUX1JFU1VMVF9DT05URVhUX0RPQ1VNRU5UOwogCi0gICAgY29uc3Qg
U3RyaW5nJiBsaW5rVVJMID0gaGl0VGVzdFJlc3VsdC0+YWJzb2x1dGVMaW5rVVJMKCk7Ci0gICAg
aWYgKCFsaW5rVVJMLmlzRW1wdHkoKSkKKyAgICBpZiAoIWhpdFRlc3RSZXN1bHQuYWJzb2x1dGVM
aW5rVVJMLmlzRW1wdHkoKSkKICAgICAgICAgY29udGV4dCB8PSBXRUJLSVRfSElUX1RFU1RfUkVT
VUxUX0NPTlRFWFRfTElOSzsKIAotICAgIGNvbnN0IFN0cmluZyYgaW1hZ2VVUkwgPSBoaXRUZXN0
UmVzdWx0LT5hYnNvbHV0ZUltYWdlVVJMKCk7Ci0gICAgaWYgKCFpbWFnZVVSTC5pc0VtcHR5KCkp
CisgICAgaWYgKCFoaXRUZXN0UmVzdWx0LmFic29sdXRlSW1hZ2VVUkwuaXNFbXB0eSgpKQogICAg
ICAgICBjb250ZXh0IHw9IFdFQktJVF9ISVRfVEVTVF9SRVNVTFRfQ09OVEVYVF9JTUFHRTsKIAot
ICAgIGNvbnN0IFN0cmluZyYgbWVkaWFVUkwgPSBoaXRUZXN0UmVzdWx0LT5hYnNvbHV0ZU1lZGlh
VVJMKCk7Ci0gICAgaWYgKCFtZWRpYVVSTC5pc0VtcHR5KCkpCisgICAgaWYgKCFoaXRUZXN0UmVz
dWx0LmFic29sdXRlTWVkaWFVUkwuaXNFbXB0eSgpKQogICAgICAgICBjb250ZXh0IHw9IFdFQktJ
VF9ISVRfVEVTVF9SRVNVTFRfQ09OVEVYVF9NRURJQTsKIAotICAgIGlmIChoaXRUZXN0UmVzdWx0
LT5pc0NvbnRlbnRFZGl0YWJsZSgpKQorICAgIGlmIChoaXRUZXN0UmVzdWx0LmlzQ29udGVudEVk
aXRhYmxlKQogICAgICAgICBjb250ZXh0IHw9IFdFQktJVF9ISVRfVEVTVF9SRVNVTFRfQ09OVEVY
VF9FRElUQUJMRTsKIAotICAgIGlmIChoaXRUZXN0UmVzdWx0LT5pc1Njcm9sbGJhcigpKQorICAg
IGlmIChoaXRUZXN0UmVzdWx0LmlzU2Nyb2xsYmFyKQogICAgICAgICBjb250ZXh0IHw9IFdFQktJ
VF9ISVRfVEVTVF9SRVNVTFRfQ09OVEVYVF9TQ1JPTExCQVI7CiAKLSAgICBjb25zdCBTdHJpbmcm
IGxpbmtUaXRsZSA9IGhpdFRlc3RSZXN1bHQtPmxpbmtUaXRsZSgpOwotICAgIGNvbnN0IFN0cmlu
ZyYgbGlua0xhYmVsID0gaGl0VGVzdFJlc3VsdC0+bGlua0xhYmVsKCk7Ci0KICAgICByZXR1cm4g
V0VCS0lUX0hJVF9URVNUX1JFU1VMVChnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfSElUX1RFU1Rf
UkVTVUxULAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
Y29udGV4dCIsIGNvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICJsaW5rLXVyaSIsICFsaW5rVVJMLmlzRW1wdHkoKSA/IGxpbmtVUkwudXRmOCgp
LmRhdGEoKSA6IDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICJpbWFnZS11cmkiLCAhaW1hZ2VVUkwuaXNFbXB0eSgpID8gaW1hZ2VVUkwudXRmOCgpLmRh
dGEoKSA6IDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICJtZWRpYS11cmkiLCAhbWVkaWFVUkwuaXNFbXB0eSgpID8gbWVkaWFVUkwudXRmOCgpLmRhdGEo
KSA6IDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJs
aW5rLXRpdGxlIiwgIWxpbmtUaXRsZS5pc0VtcHR5KCkgPyBsaW5rVGl0bGUudXRmOCgpLmRhdGEo
KSA6IDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJs
aW5rLWxhYmVsIiwgIWxpbmtMYWJlbC5pc0VtcHR5KCkgPyBsaW5rTGFiZWwudXRmOCgpLmRhdGEo
KSA6IDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5V
TEwpKTsKKyAgICAgICAgImNvbnRleHQiLCBjb250ZXh0LAorICAgICAgICAibGluay11cmkiLCBj
b250ZXh0ICYgV0VCS0lUX0hJVF9URVNUX1JFU1VMVF9DT05URVhUX0xJTksgPyBoaXRUZXN0UmVz
dWx0LmFic29sdXRlTGlua1VSTC51dGY4KCkuZGF0YSgpIDogbnVsbHB0ciwKKyAgICAgICAgImlt
YWdlLXVyaSIsIGNvbnRleHQgJiBXRUJLSVRfSElUX1RFU1RfUkVTVUxUX0NPTlRFWFRfSU1BR0Ug
PyBoaXRUZXN0UmVzdWx0LmFic29sdXRlSW1hZ2VVUkwudXRmOCgpLmRhdGEoKSA6IG51bGxwdHIs
CisgICAgICAgICJtZWRpYS11cmkiLCBjb250ZXh0ICYgV0VCS0lUX0hJVF9URVNUX1JFU1VMVF9D
T05URVhUX01FRElBID8gaGl0VGVzdFJlc3VsdC5hYnNvbHV0ZU1lZGlhVVJMLnV0ZjgoKS5kYXRh
KCkgOiBudWxscHRyLAorICAgICAgICAibGluay10aXRsZSIsICFoaXRUZXN0UmVzdWx0LmxpbmtU
aXRsZS5pc0VtcHR5KCkgPyBoaXRUZXN0UmVzdWx0LmxpbmtUaXRsZS51dGY4KCkuZGF0YSgpIDog
bnVsbHB0ciwKKyAgICAgICAgImxpbmstbGFiZWwiLCAhaGl0VGVzdFJlc3VsdC5saW5rTGFiZWwu
aXNFbXB0eSgpID8gaGl0VGVzdFJlc3VsdC5saW5rTGFiZWwudXRmOCgpLmRhdGEoKSA6IG51bGxw
dHIsCisgICAgICAgIG51bGxwdHIpKTsKIH0KIAogc3RhdGljIGJvb2wgc3RyaW5nSXNFcXVhbFRv
Q1N0cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZywgY29uc3QgQ1N0cmluZyYgY1N0cmluZykKQEAg
LTI2MSwxNiArMjU1LDE2IEBAIHN0YXRpYyBib29sIHN0cmluZ0lzRXF1YWxUb0NTdHJpbmcoY29u
c3QgU3RyaW5nJiBzdHJpbmcsIGNvbnN0IENTdHJpbmcmIGNTdHJpbmcpCiAgICAgcmV0dXJuICgo
c3RyaW5nLmlzRW1wdHkoKSAmJiBjU3RyaW5nLmlzTnVsbCgpKSB8fCAoc3RyaW5nLnV0ZjgoKSA9
PSBjU3RyaW5nKSk7CiB9CiAKLWJvb2wgd2Via2l0SGl0VGVzdFJlc3VsdENvbXBhcmUoV2ViS2l0
SGl0VGVzdFJlc3VsdCogaGl0VGVzdFJlc3VsdCwgV2ViSGl0VGVzdFJlc3VsdCogd2ViSGl0VGVz
dFJlc3VsdCkKK2Jvb2wgd2Via2l0SGl0VGVzdFJlc3VsdENvbXBhcmUoV2ViS2l0SGl0VGVzdFJl
c3VsdCogaGl0VGVzdFJlc3VsdCwgY29uc3QgV2ViSGl0VGVzdFJlc3VsdDo6RGF0YSYgd2ViSGl0
VGVzdFJlc3VsdCkKIHsKICAgICBXZWJLaXRIaXRUZXN0UmVzdWx0UHJpdmF0ZSogcHJpdiA9IGhp
dFRlc3RSZXN1bHQtPnByaXY7Ci0gICAgcmV0dXJuIHdlYkhpdFRlc3RSZXN1bHQtPmlzQ29udGVu
dEVkaXRhYmxlKCkgPT0gd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX2VkaXRhYmxl
KGhpdFRlc3RSZXN1bHQpCi0gICAgICAgICYmIHdlYkhpdFRlc3RSZXN1bHQtPmlzU2Nyb2xsYmFy
KCkgPT0gd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX3Njcm9sbGJhcihoaXRUZXN0
UmVzdWx0KQotICAgICAgICAmJiBzdHJpbmdJc0VxdWFsVG9DU3RyaW5nKHdlYkhpdFRlc3RSZXN1
bHQtPmFic29sdXRlTGlua1VSTCgpLCBwcml2LT5saW5rVVJJKQotICAgICAgICAmJiBzdHJpbmdJ
c0VxdWFsVG9DU3RyaW5nKHdlYkhpdFRlc3RSZXN1bHQtPmxpbmtUaXRsZSgpLCBwcml2LT5saW5r
VGl0bGUpCi0gICAgICAgICYmIHN0cmluZ0lzRXF1YWxUb0NTdHJpbmcod2ViSGl0VGVzdFJlc3Vs
dC0+bGlua0xhYmVsKCksIHByaXYtPmxpbmtMYWJlbCkKLSAgICAgICAgJiYgc3RyaW5nSXNFcXVh
bFRvQ1N0cmluZyh3ZWJIaXRUZXN0UmVzdWx0LT5hYnNvbHV0ZUltYWdlVVJMKCksIHByaXYtPmlt
YWdlVVJJKQotICAgICAgICAmJiBzdHJpbmdJc0VxdWFsVG9DU3RyaW5nKHdlYkhpdFRlc3RSZXN1
bHQtPmFic29sdXRlTWVkaWFVUkwoKSwgcHJpdi0+bWVkaWFVUkkpOworICAgIHJldHVybiB3ZWJI
aXRUZXN0UmVzdWx0LmlzQ29udGVudEVkaXRhYmxlID09IHdlYmtpdF9oaXRfdGVzdF9yZXN1bHRf
Y29udGV4dF9pc19lZGl0YWJsZShoaXRUZXN0UmVzdWx0KQorICAgICAgICAmJiB3ZWJIaXRUZXN0
UmVzdWx0LmlzU2Nyb2xsYmFyID09IHdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19z
Y3JvbGxiYXIoaGl0VGVzdFJlc3VsdCkKKyAgICAgICAgJiYgc3RyaW5nSXNFcXVhbFRvQ1N0cmlu
Zyh3ZWJIaXRUZXN0UmVzdWx0LmFic29sdXRlTGlua1VSTCwgcHJpdi0+bGlua1VSSSkKKyAgICAg
ICAgJiYgc3RyaW5nSXNFcXVhbFRvQ1N0cmluZyh3ZWJIaXRUZXN0UmVzdWx0LmxpbmtUaXRsZSwg
cHJpdi0+bGlua1RpdGxlKQorICAgICAgICAmJiBzdHJpbmdJc0VxdWFsVG9DU3RyaW5nKHdlYkhp
dFRlc3RSZXN1bHQubGlua0xhYmVsLCBwcml2LT5saW5rTGFiZWwpCisgICAgICAgICYmIHN0cmlu
Z0lzRXF1YWxUb0NTdHJpbmcod2ViSGl0VGVzdFJlc3VsdC5hYnNvbHV0ZUltYWdlVVJMLCBwcml2
LT5pbWFnZVVSSSkKKyAgICAgICAgJiYgc3RyaW5nSXNFcXVhbFRvQ1N0cmluZyh3ZWJIaXRUZXN0
UmVzdWx0LmFic29sdXRlTWVkaWFVUkwsIHByaXYtPm1lZGlhVVJJKTsKIH0KIAogLyoqCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRIaXRUZXN0UmVz
dWx0UHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0SGl0
VGVzdFJlc3VsdFByaXZhdGUuaAppbmRleCA3YmEyYzM4Li5hNjliMjRiIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRIaXRUZXN0UmVzdWx0UHJpdmF0
ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEhpdFRlc3RS
ZXN1bHRQcml2YXRlLmgKQEAgLTIzLDcgKzIzLDcgQEAKICNpbmNsdWRlICJXZWJLaXRIaXRUZXN0
UmVzdWx0LmgiCiAjaW5jbHVkZSAiV2ViS2l0UHJpdmF0ZS5oIgogCi1XZWJLaXRIaXRUZXN0UmVz
dWx0KiB3ZWJraXRIaXRUZXN0UmVzdWx0Q3JlYXRlKFdlYktpdDo6V2ViSGl0VGVzdFJlc3VsdCop
OwotYm9vbCB3ZWJraXRIaXRUZXN0UmVzdWx0Q29tcGFyZShXZWJLaXRIaXRUZXN0UmVzdWx0Kiwg
V2ViS2l0OjpXZWJIaXRUZXN0UmVzdWx0Kik7CitXZWJLaXRIaXRUZXN0UmVzdWx0KiB3ZWJraXRI
aXRUZXN0UmVzdWx0Q3JlYXRlKGNvbnN0IFdlYktpdDo6V2ViSGl0VGVzdFJlc3VsdDo6RGF0YSYp
OworYm9vbCB3ZWJraXRIaXRUZXN0UmVzdWx0Q29tcGFyZShXZWJLaXRIaXRUZXN0UmVzdWx0Kiwg
Y29uc3QgV2ViS2l0OjpXZWJIaXRUZXN0UmVzdWx0OjpEYXRhJik7CiAKICNlbmRpZiAvLyBXZWJL
aXRIaXRUZXN0UmVzdWx0UHJpdmF0ZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay9XZWJLaXROYXZpZ2F0aW9uQWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdE5hdmlnYXRpb25BY3Rpb24uY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0OWEwZTMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXROYXZpZ2F0aW9uQWN0aW9uLmNwcApA
QCAtMCwwICsxLDE1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBJZ2FsaWEgUy5MLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
KyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0TmF2aWdhdGlvbkFjdGlvbi5oIgor
CisjaW5jbHVkZSAiV2ViS2l0TmF2aWdhdGlvbkFjdGlvblByaXZhdGUuaCIKKyNpbmNsdWRlIDxn
ZGsvZ2RrLmg+CisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgorCit1c2luZyBuYW1l
c3BhY2UgV2ViS2l0OworCitHX0RFRklORV9CT1hFRF9UWVBFKFdlYktpdE5hdmlnYXRpb25BY3Rp
b24sIHdlYmtpdF9uYXZpZ2F0aW9uX2FjdGlvbiwgd2Via2l0X25hdmlnYXRpb25fYWN0aW9uX2Nv
cHksIHdlYmtpdF9uYXZpZ2F0aW9uX2FjdGlvbl9mcmVlKQorCitXZWJLaXROYXZpZ2F0aW9uQWN0
aW9uKiB3ZWJraXROYXZpZ2F0aW9uQWN0aW9uQ3JlYXRlKFdlYktpdFVSSVJlcXVlc3QqIHJlcXVl
c3QsIGNvbnN0IE5hdmlnYXRpb25BY3Rpb25EYXRhJiBuYXZpZ2F0aW9uQWN0aW9uRGF0YSkKK3sK
KyAgICBXZWJLaXROYXZpZ2F0aW9uQWN0aW9uKiBuYXZpZ2F0aW9uID0gZ19zbGljZV9uZXcwKFdl
YktpdE5hdmlnYXRpb25BY3Rpb24pOworICAgIG5ldyAobmF2aWdhdGlvbikgV2ViS2l0TmF2aWdh
dGlvbkFjdGlvbihyZXF1ZXN0LCBuYXZpZ2F0aW9uQWN0aW9uRGF0YSk7CisgICAgcmV0dXJuIG5h
dmlnYXRpb247Cit9CisKKy8qKgorICogd2Via2l0X25hdmlnYXRpb25fYWN0aW9uX2NvcHk6Cisg
KiBAbmF2aWdhdGlvbjogYSAjV2ViS2l0TmF2aWdhdGlvbkFjdGlvbgorICoKKyAqIE1ha2UgYSBj
b3B5IG9mIEBuYXZpZ2F0aW9uLgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogQSBj
b3B5IG9mIHBhc3NlZCBpbiAjV2ViS2l0TmF2aWdhdGlvbkFjdGlvbgorICoKKyAqIFNpbmNlOiAy
LjYKKyAqLworV2ViS2l0TmF2aWdhdGlvbkFjdGlvbiogd2Via2l0X25hdmlnYXRpb25fYWN0aW9u
X2NvcHkoV2ViS2l0TmF2aWdhdGlvbkFjdGlvbiogbmF2aWdhdGlvbikKK3sKKyAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChuYXZpZ2F0aW9uLCBudWxscHRyKTsKKworICAgIFdlYktpdE5hdmlnYXRp
b25BY3Rpb24qIGNvcHkgPSBnX3NsaWNlX25ldzAoV2ViS2l0TmF2aWdhdGlvbkFjdGlvbik7Cisg
ICAgbmV3IChjb3B5KSBXZWJLaXROYXZpZ2F0aW9uQWN0aW9uKG5hdmlnYXRpb24pOworICAgIHJl
dHVybiBjb3B5OworfQorCisvKioKKyAqIHdlYmtpdF9uYXZpZ2F0aW9uX2FjdGlvbl9mcmVlOgor
ICogQG5hdmlnYXRpb246IGEgI1dlYktpdE5hdmlnYXRpb25BY3Rpb24KKyAqCisgKiBGcmVlIHRo
ZSAjV2ViS2l0TmF2aWdhdGlvbkFjdGlvbgorICoKKyAqIFNpbmNlOiAyLjYKKyAqLwordm9pZCB3
ZWJraXRfbmF2aWdhdGlvbl9hY3Rpb25fZnJlZShXZWJLaXROYXZpZ2F0aW9uQWN0aW9uKiBuYXZp
Z2F0aW9uKQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwobmF2aWdhdGlvbik7CisKKyAgICBuYXZp
Z2F0aW9uLT5+V2ViS2l0TmF2aWdhdGlvbkFjdGlvbigpOworICAgIGdfc2xpY2VfZnJlZShXZWJL
aXROYXZpZ2F0aW9uQWN0aW9uLCBuYXZpZ2F0aW9uKTsKK30KKworLyoqCisgKiB3ZWJraXRfbmF2
aWdhdGlvbl9hY3Rpb25fZ2V0X25hdmlnYXRpb25fdHlwZToKKyAqIEBuYXZpZ2F0aW9uOiBhICNX
ZWJLaXROYXZpZ2F0aW9uQWN0aW9uCisgKgorICogUnR1ZW4gdGhlIHR5cGUgb2YgYWN0aW9uIHRo
YXQgdHJpZ2dlcmVkIHRoZSBuYXZpZ2F0aW9uLgorICoKKyAqIFJldHVybnM6IGEgI1dlYktpdE5h
dmlnYXRpb25UeXBlCisgKgorICogU2luY2U6IDIuNgorICovCitXZWJLaXROYXZpZ2F0aW9uVHlw
ZSB3ZWJraXRfbmF2aWdhdGlvbl9hY3Rpb25fZ2V0X25hdmlnYXRpb25fdHlwZShXZWJLaXROYXZp
Z2F0aW9uQWN0aW9uKiBuYXZpZ2F0aW9uKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKG5h
dmlnYXRpb24sIFdFQktJVF9OQVZJR0FUSU9OX1RZUEVfT1RIRVIpOworICAgIHJldHVybiBuYXZp
Z2F0aW9uLT50eXBlOworfQorCisvKioKKyAqIHdlYmtpdF9uYXZpZ2F0aW9uX2FjdGlvbl9nZXRf
bW91c2VfYnV0dG9uOgorICogQG5hdmlnYXRpb246IGEgI1dlYktpdE5hdmlnYXRpb25BY3Rpb24K
KyAqCisgKiBSZXR1cm4gdGhlIG51bWJlciBvZiB0aGUgbW91c2UgYnV0dG9uIHRoYXQgdHJpZ2dl
cmVkIHRoZSBuYXZpZ2F0aW9uLCBvciAwIGlmCisgKiB0aGUgbmF2aWdhdGlvbiB3YXMgbm90IHN0
YXJ0ZWQgYnkgYSBtb3VzZSBldmVudC4KKyAqCisgKiBSZXR1cm5zOiB0aGUgbW91c2UgYnV0dG9u
IG51bWJlciBvciAwCisgKgorICogU2luY2U6IDIuNgorICovCit1bnNpZ25lZCB3ZWJraXRfbmF2
aWdhdGlvbl9hY3Rpb25fZ2V0X21vdXNlX2J1dHRvbihXZWJLaXROYXZpZ2F0aW9uQWN0aW9uKiBu
YXZpZ2F0aW9uKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKG5hdmlnYXRpb24sIDApOwor
ICAgIHJldHVybiBuYXZpZ2F0aW9uLT5tb3VzZUJ1dHRvbjsKK30KKworLyoqCisgKiB3ZWJraXRf
bmF2aWdhdGlvbl9hY3Rpb25fZ2V0X21vZGlmaWVyczoKKyAqIEBuYXZpZ2F0aW9uOiBhICNXZWJL
aXROYXZpZ2F0aW9uQWN0aW9uCisgKgorICogUmV0dXJuIGEgYml0bWFzayBvZiAjR2RrTW9kaWZp
ZXJUeXBlIHZhbHVlcyBkZXNjcmliaW5nIHRoZSBtb2RpZmllciBrZXlzIHRoYXQgd2VyZSBpbiBl
ZmZlY3QKKyAqIHdoZW4gdGhlIG5hdmlnYXRpb24gd2FzIHJlcXVlc3RlZAorICoKKyAqIFJldHVy
bnM6IHRoZSBtb2RpZmllciBrZXlzCisgKgorICogU2luY2U6IDIuNgorICovCit1bnNpZ25lZCB3
ZWJraXRfbmF2aWdhdGlvbl9hY3Rpb25fZ2V0X21vZGlmaWVycyhXZWJLaXROYXZpZ2F0aW9uQWN0
aW9uKiBuYXZpZ2F0aW9uKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKG5hdmlnYXRpb24s
IDApOworICAgIHJldHVybiBuYXZpZ2F0aW9uLT5tb2RpZmllcnM7Cit9CisKKy8qKgorICogd2Vi
a2l0X25hdmlnYXRpb25fYWN0aW9uX2dldF9yZXF1ZXN0OgorICogQG5hdmlnYXRpb246IGEgI1dl
YktpdE5hdmlnYXRpb25BY3Rpb24KKyAqCisgKiBSZXR1cm4gdGhlIG5hdmlnYXRpb24gI1dlYktp
dFVSSVJlcXVlc3QKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6IGEgI1dlYktpdFVS
SVJlcXVlc3QKKyAqCisgKiBTaW5jZTogMi42CisgKi8KK1dlYktpdFVSSVJlcXVlc3QqIHdlYmtp
dF9uYXZpZ2F0aW9uX2FjdGlvbl9nZXRfcmVxdWVzdChXZWJLaXROYXZpZ2F0aW9uQWN0aW9uKiBu
YXZpZ2F0aW9uKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKG5hdmlnYXRpb24sIG51bGxw
dHIpOworICAgIHJldHVybiBuYXZpZ2F0aW9uLT5yZXF1ZXN0LmdldCgpOworfQorCisvKioKKyAq
IHdlYmtpdF9uYXZpZ2F0aW9uX2FjdGlvbl9pc191c2VyX2dlc3R1cmU6CisgKiBAbmF2aWdhdGlv
bjogYSAjV2ViS2l0TmF2aWdhdGlvbkFjdGlvbgorICoKKyAqIFJldHVybiB3aGV0aGVyIHRoZSBu
YXZpZ2F0aW9uIHdhcyB0cmlnZ2VyZWQgYnkgYSB1c2VyIGdlc3R1cmUgbGlrZSBhIG1vdXNlIGNs
aWNrLgorICoKKyAqIFJldHVybnM6IHdoZXRoZXIgbmF2aWdhdGlvbiBhY3Rpb24gaXMgYSB1c2Vy
IGdlc3R1cmUKKyAqCisgKiBTaW5jZTogMi42CisgKi8KK2dib29sZWFuIHdlYmtpdF9uYXZpZ2F0
aW9uX2FjdGlvbl9pc191c2VyX2dlc3R1cmUoV2ViS2l0TmF2aWdhdGlvbkFjdGlvbiogbmF2aWdh
dGlvbikKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChuYXZpZ2F0aW9uLCBGQUxTRSk7Cisg
ICAgcmV0dXJuIG5hdmlnYXRpb24tPmlzVXNlckdlc3R1cmU7Cit9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXROYXZpZ2F0aW9uQWN0aW9uLmggYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXROYXZpZ2F0aW9uQWN0aW9uLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWU5NTU4NgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdE5hdmlnYXRpb25B
Y3Rpb24uaApAQCAtMCwwICsxLDg0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IElnYWxp
YSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
ICovCisKKyNpZiAhZGVmaW5lZChfX1dFQktJVDJfSF9JTlNJREVfXykgJiYgIWRlZmluZWQoV0VC
S0lUMl9DT01QSUxBVElPTikKKyNlcnJvciAiT25seSA8d2Via2l0Mi93ZWJraXQyLmg+IGNhbiBi
ZSBpbmNsdWRlZCBkaXJlY3RseS4iCisjZW5kaWYKKworI2lmbmRlZiBXZWJLaXROYXZpZ2F0aW9u
QWN0aW9uX2gKKyNkZWZpbmUgV2ViS2l0TmF2aWdhdGlvbkFjdGlvbl9oCisKKyNpbmNsdWRlIDxn
bGliLW9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0RGVmaW5lcy5oPgorI2luY2x1
ZGUgPHdlYmtpdDIvV2ViS2l0VVJJUmVxdWVzdC5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZp
bmUgV0VCS0lUX1RZUEVfTkFWSUdBVElPTl9BQ1RJT04gKHdlYmtpdF9uYXZpZ2F0aW9uX2FjdGlv
bl9nZXRfdHlwZSgpKQorCisvKioKKyAqIFdlYktpdE5hdmlnYXRpb25UeXBlOgorICogQFdFQktJ
VF9OQVZJR0FUSU9OX1RZUEVfTElOS19DTElDS0VEOiBUaGUgbmF2aWdhdGlvbiB3YXMgdHJpZ2dl
cmVkIGJ5IGNsaWNraW5nIGEgbGluay4KKyAqIEBXRUJLSVRfTkFWSUdBVElPTl9UWVBFX0ZPUk1f
U1VCTUlUVEVEOiBUaGUgbmF2aWdhdGlvbiB3YXMgdHJpZ2dlcmVkIGJ5IHN1Ym1pdHRpbmcgYSBm
b3JtLgorICogQFdFQktJVF9OQVZJR0FUSU9OX1RZUEVfQkFDS19GT1JXQVJEOiBUaGUgbmF2aWdh
dGlvbiB3YXMgdHJpZ2dlcmVkIGJ5IG5hdmlnYXRpbmcgZm9yd2FyZCBvciBiYWNrd2FyZC4KKyAq
IEBXRUJLSVRfTkFWSUdBVElPTl9UWVBFX1JFTE9BRDogVGhlIG5hdmlnYXRpb24gd2FzIHRyaWdn
ZXJlZCBieSByZWxvYWRpbmcuCisgKiBAV0VCS0lUX05BVklHQVRJT05fVFlQRV9GT1JNX1JFU1VC
TUlUVEVEOiBUaGUgbmF2aWdhdGlvbiB3YXMgdHJpZ2dlcmVkIGJ5IHJlc3VibWl0dGluZyBhIGZv
cm0uCisgKiBAV0VCS0lUX05BVklHQVRJT05fVFlQRV9PVEhFUjogVGhlIG5hdmlnYXRpb24gd2Fz
IHRyaWdnZXJlZCBieSBzb21lIG90aGVyIGFjdGlvbi4KKyAqCisgKiBFbnVtIHZhbHVlcyB1c2Vk
IHRvIGRlbm90ZSB0aGUgdmFyaW91cyBuYXZpZ2F0aW9uIHR5cGVzLgorICovCit0eXBlZGVmIGVu
dW0geworICAgIFdFQktJVF9OQVZJR0FUSU9OX1RZUEVfTElOS19DTElDS0VELAorICAgIFdFQktJ
VF9OQVZJR0FUSU9OX1RZUEVfRk9STV9TVUJNSVRURUQsCisgICAgV0VCS0lUX05BVklHQVRJT05f
VFlQRV9CQUNLX0ZPUldBUkQsCisgICAgV0VCS0lUX05BVklHQVRJT05fVFlQRV9SRUxPQUQsCisg
ICAgV0VCS0lUX05BVklHQVRJT05fVFlQRV9GT1JNX1JFU1VCTUlUVEVELAorICAgIFdFQktJVF9O
QVZJR0FUSU9OX1RZUEVfT1RIRVIKK30gV2ViS2l0TmF2aWdhdGlvblR5cGU7CisKK3R5cGVkZWYg
c3RydWN0IF9XZWJLaXROYXZpZ2F0aW9uQWN0aW9uIFdlYktpdE5hdmlnYXRpb25BY3Rpb247CisK
KworV0VCS0lUX0FQSSBHVHlwZQord2Via2l0X25hdmlnYXRpb25fYWN0aW9uX2dldF90eXBlICAg
ICAgICAgICAgKHZvaWQpOworCitXRUJLSVRfQVBJIFdlYktpdE5hdmlnYXRpb25BY3Rpb24gKgor
d2Via2l0X25hdmlnYXRpb25fYWN0aW9uX2NvcHkgICAgICAgICAgICAgICAgKFdlYktpdE5hdmln
YXRpb25BY3Rpb24gKm5hdmlnYXRpb24pOworCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9uYXZp
Z2F0aW9uX2FjdGlvbl9mcmVlICAgICAgICAgICAgICAgIChXZWJLaXROYXZpZ2F0aW9uQWN0aW9u
ICpuYXZpZ2F0aW9uKTsKKworV0VCS0lUX0FQSSBXZWJLaXROYXZpZ2F0aW9uVHlwZQord2Via2l0
X25hdmlnYXRpb25fYWN0aW9uX2dldF9uYXZpZ2F0aW9uX3R5cGUgKFdlYktpdE5hdmlnYXRpb25B
Y3Rpb24gKm5hdmlnYXRpb24pOworCitXRUJLSVRfQVBJIGd1aW50Cit3ZWJraXRfbmF2aWdhdGlv
bl9hY3Rpb25fZ2V0X21vdXNlX2J1dHRvbiAgICAoV2ViS2l0TmF2aWdhdGlvbkFjdGlvbiAqbmF2
aWdhdGlvbik7CisKK1dFQktJVF9BUEkgZ3VpbnQKK3dlYmtpdF9uYXZpZ2F0aW9uX2FjdGlvbl9n
ZXRfbW9kaWZpZXJzICAgICAgIChXZWJLaXROYXZpZ2F0aW9uQWN0aW9uICpuYXZpZ2F0aW9uKTsK
KworV0VCS0lUX0FQSSBXZWJLaXRVUklSZXF1ZXN0ICoKK3dlYmtpdF9uYXZpZ2F0aW9uX2FjdGlv
bl9nZXRfcmVxdWVzdCAgICAgICAgIChXZWJLaXROYXZpZ2F0aW9uQWN0aW9uICpuYXZpZ2F0aW9u
KTsKKworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0X25hdmlnYXRpb25fYWN0aW9uX2lzX3Vz
ZXJfZ2VzdHVyZSAgICAgKFdlYktpdE5hdmlnYXRpb25BY3Rpb24gKm5hdmlnYXRpb24pOworCitH
X0VORF9ERUNMUworCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdE5hdmlnYXRpb25BY3Rpb25Qcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXROYXZpZ2F0aW9uQWN0aW9uUHJpdmF0ZS5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3ZmM4YjMKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXROYXZpZ2F0aW9uQWN0aW9u
UHJpdmF0ZS5oCkBAIC0wLDAgKzEsNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgSWdh
bGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CisgKi8KKworI2lmbmRlZiBXZWJLaXROYXZpZ2F0aW9uQWN0aW9uUHJpdmF0ZV9oCisjZGVmaW5l
IFdlYktpdE5hdmlnYXRpb25BY3Rpb25Qcml2YXRlX2gKKworI2luY2x1ZGUgIk5hdmlnYXRpb25B
Y3Rpb25EYXRhLmgiCisjaW5jbHVkZSAiV2ViS2l0TmF2aWdhdGlvbkFjdGlvbi5oIgorI2luY2x1
ZGUgIldlYktpdFByaXZhdGUuaCIKKworc3RydWN0IF9XZWJLaXROYXZpZ2F0aW9uQWN0aW9uIHsK
KyAgICBfV2ViS2l0TmF2aWdhdGlvbkFjdGlvbihXZWJLaXRVUklSZXF1ZXN0KiB1cmlSZXF1ZXN0
LCBjb25zdCBXZWJLaXQ6Ok5hdmlnYXRpb25BY3Rpb25EYXRhJiBuYXZpZ2F0aW9uQWN0aW9uRGF0
YSkKKyAgICAgICAgOiB0eXBlKHRvV2ViS2l0TmF2aWdhdGlvblR5cGUobmF2aWdhdGlvbkFjdGlv
bkRhdGEubmF2aWdhdGlvblR5cGUpKQorICAgICAgICAsIG1vdXNlQnV0dG9uKHRvV2ViS2l0TW91
c2VCdXR0b24obmF2aWdhdGlvbkFjdGlvbkRhdGEubW91c2VCdXR0b24pKQorICAgICAgICAsIG1v
ZGlmaWVycyh0b0dka01vZGlmaWVycyhuYXZpZ2F0aW9uQWN0aW9uRGF0YS5tb2RpZmllcnMpKQor
ICAgICAgICAsIGlzVXNlckdlc3R1cmUobmF2aWdhdGlvbkFjdGlvbkRhdGEuaXNQcm9jZXNzaW5n
VXNlckdlc3R1cmUpCisgICAgICAgICwgcmVxdWVzdCh1cmlSZXF1ZXN0KQorICAgIHsKKyAgICB9
CisKKyAgICBfV2ViS2l0TmF2aWdhdGlvbkFjdGlvbihXZWJLaXROYXZpZ2F0aW9uQWN0aW9uKiBu
YXZpZ2F0aW9uKQorICAgICAgICA6IHR5cGUobmF2aWdhdGlvbi0+dHlwZSkKKyAgICAgICAgLCBt
b3VzZUJ1dHRvbihuYXZpZ2F0aW9uLT5tb3VzZUJ1dHRvbikKKyAgICAgICAgLCBtb2RpZmllcnMo
bmF2aWdhdGlvbi0+bW9kaWZpZXJzKQorICAgICAgICAsIGlzVXNlckdlc3R1cmUobmF2aWdhdGlv
bi0+aXNVc2VyR2VzdHVyZSkKKyAgICAgICAgLCByZXF1ZXN0KG5hdmlnYXRpb24tPnJlcXVlc3Qp
CisgICAgeworICAgIH0KKworICAgIFdlYktpdE5hdmlnYXRpb25UeXBlIHR5cGU7CisgICAgdW5z
aWduZWQgbW91c2VCdXR0b247CisgICAgdW5zaWduZWQgbW9kaWZpZXJzOworICAgIGJvb2wgaXNV
c2VyR2VzdHVyZSA6IDE7CisgICAgR1JlZlB0cjxXZWJLaXRVUklSZXF1ZXN0PiByZXF1ZXN0Owor
fTsKKworV2ViS2l0TmF2aWdhdGlvbkFjdGlvbiogd2Via2l0TmF2aWdhdGlvbkFjdGlvbkNyZWF0
ZShXZWJLaXRVUklSZXF1ZXN0KiwgY29uc3QgV2ViS2l0OjpOYXZpZ2F0aW9uQWN0aW9uRGF0YSYp
OworCisjZW5kaWYgLy8gV2ViS2l0TmF2aWdhdGlvbkFjdGlvblByaXZhdGVfaApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0TmF2aWdhdGlvblBvbGlj
eURlY2lzaW9uLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXROYXZp
Z2F0aW9uUG9saWN5RGVjaXNpb24uaAppbmRleCA3NTEzOTc3Li5lODUyNDYxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXROYXZpZ2F0aW9uUG9saWN5
RGVjaXNpb24uaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRO
YXZpZ2F0aW9uUG9saWN5RGVjaXNpb24uaApAQCAtMjYsMzEgKzI2LDEyIEBACiAKICNpbmNsdWRl
IDxnbGliLW9iamVjdC5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0RGVmaW5lcy5oPgorI2lu
Y2x1ZGUgPHdlYmtpdDIvV2ViS2l0TmF2aWdhdGlvbkFjdGlvbi5oPgogI2luY2x1ZGUgPHdlYmtp
dDIvV2ViS2l0UG9saWN5RGVjaXNpb24uaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdFVSSVJl
cXVlc3QuaD4KIAogR19CRUdJTl9ERUNMUwogCi0vKioKLSAqIFdlYktpdE5hdmlnYXRpb25UeXBl
OgotICogQFdFQktJVF9OQVZJR0FUSU9OX1RZUEVfTElOS19DTElDS0VEOiBUaGUgbmF2aWdhdGlv
biB3YXMgdHJpZ2dlcmVkIGJ5IGNsaWNraW5nIGEgbGluay4KLSAqIEBXRUJLSVRfTkFWSUdBVElP
Tl9UWVBFX0ZPUk1fU1VCTUlUVEVEOiBUaGUgbmF2aWdhdGlvbiB3YXMgdHJpZ2dlcmVkIGJ5IHN1
Ym1pdHRpbmcgYSBmb3JtLgotICogQFdFQktJVF9OQVZJR0FUSU9OX1RZUEVfQkFDS19GT1JXQVJE
OiBUaGUgbmF2aWdhdGlvbiB3YXMgdHJpZ2dlcmVkIGJ5IG5hdmlnYXRpbmcgZm9yd2FyZCBvciBi
YWNrd2FyZC4KLSAqIEBXRUJLSVRfTkFWSUdBVElPTl9UWVBFX1JFTE9BRDogVGhlIG5hdmlnYXRp
b24gd2FzIHRyaWdnZXJlZCBieSByZWxvYWRpbmcuCi0gKiBAV0VCS0lUX05BVklHQVRJT05fVFlQ
RV9GT1JNX1JFU1VCTUlUVEVEOiBUaGUgbmF2aWdhdGlvbiB3YXMgdHJpZ2dlcmVkIGJ5IHJlc3Vi
bWl0dGluZyBhIGZvcm0uCi0gKiBAV0VCS0lUX05BVklHQVRJT05fVFlQRV9PVEhFUjogVGhlIG5h
dmlnYXRpb24gd2FzIHRyaWdnZXJlZCBieSBzb21lIG90aGVyIGFjdGlvbi4KLSAqCi0gKiBFbnVt
IHZhbHVlcyB1c2VkIHRvIGRlbm90ZSB0aGUgdmFyaW91cyBuYXZpZ2F0aW9uIHR5cGVzLgotICov
Ci10eXBlZGVmIGVudW0gewotICAgIFdFQktJVF9OQVZJR0FUSU9OX1RZUEVfTElOS19DTElDS0VE
LAotICAgIFdFQktJVF9OQVZJR0FUSU9OX1RZUEVfRk9STV9TVUJNSVRURUQsCi0gICAgV0VCS0lU
X05BVklHQVRJT05fVFlQRV9CQUNLX0ZPUldBUkQsCi0gICAgV0VCS0lUX05BVklHQVRJT05fVFlQ
RV9SRUxPQUQsCi0gICAgV0VCS0lUX05BVklHQVRJT05fVFlQRV9GT1JNX1JFU1VCTUlUVEVELAot
ICAgIFdFQktJVF9OQVZJR0FUSU9OX1RZUEVfT1RIRVIsCi19IFdlYktpdE5hdmlnYXRpb25UeXBl
OwotCiAjZGVmaW5lIFdFQktJVF9UWVBFX05BVklHQVRJT05fUE9MSUNZX0RFQ0lTSU9OICAgICAg
ICAgICAgKHdlYmtpdF9uYXZpZ2F0aW9uX3BvbGljeV9kZWNpc2lvbl9nZXRfdHlwZSgpKQogI2Rl
ZmluZSBXRUJLSVRfTkFWSUdBVElPTl9QT0xJQ1lfREVDSVNJT04ob2JqKSAgICAgICAgICAgIChH
X1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX1RZUEVfTkFWSUdBVElPTl9Q
T0xJQ1lfREVDSVNJT04sIFdlYktpdE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbikpCiAjZGVmaW5l
IFdFQktJVF9OQVZJR0FUSU9OX1BPTElDWV9ERUNJU0lPTl9DTEFTUyhrbGFzcykgICAgKEdfVFlQ
RV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfVFlQRV9OQVZJR0FUSU9OX1BPTElD
WV9ERUNJU0lPTiwgV2ViS2l0TmF2aWdhdGlvblBvbGljeURlY2lzaW9uQ2xhc3MpKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0UHJpdmF0ZS5jcHAg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRQcml2YXRlLmNwcAppbmRl
eCA1ZThmOWM1Li4yMDZjYmNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXRQcml2YXRlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXRQcml2YXRlLmNwcApAQCAtMjEsNiArMjEsNyBAQAogI2luY2x1ZGUgIldl
YktpdFByaXZhdGUuaCIKIAogI2luY2x1ZGUgIkVycm9yc0d0ay5oIgorI2luY2x1ZGUgIldlYkV2
ZW50LmgiCiAjaW5jbHVkZSAiV2ViS2l0RXJyb3IuaCIKICNpbmNsdWRlIDxnZGsvZ2RrLmg+CiAK
QEAgLTM4LDYgKzM5LDU3IEBAIHVuc2lnbmVkIHdrRXZlbnRNb2RpZmllcnNUb0dka01vZGlmaWVy
cyhXS0V2ZW50TW9kaWZpZXJzIHdrTW9kaWZpZXJzKQogICAgIHJldHVybiBtb2RpZmllcnM7CiB9
CiAKK3Vuc2lnbmVkIHRvR2RrTW9kaWZpZXJzKFdlYktpdDo6V2ViRXZlbnQ6Ok1vZGlmaWVycyB3
a01vZGlmaWVycykKK3sKKyAgICB1bnNpZ25lZCBtb2RpZmllcnMgPSAwOworICAgIGlmICh3a01v
ZGlmaWVycyAmIFdlYktpdDo6V2ViRXZlbnQ6Ok1vZGlmaWVyczo6U2hpZnRLZXkpCisgICAgICAg
IG1vZGlmaWVycyB8PSBHREtfU0hJRlRfTUFTSzsKKyAgICBpZiAod2tNb2RpZmllcnMgJiBXZWJL
aXQ6OldlYkV2ZW50OjpNb2RpZmllcnM6OkNvbnRyb2xLZXkpCisgICAgICAgIG1vZGlmaWVycyB8
PSBHREtfQ09OVFJPTF9NQVNLOworICAgIGlmICh3a01vZGlmaWVycyAmIFdlYktpdDo6V2ViRXZl
bnQ6Ok1vZGlmaWVyczo6QWx0S2V5KQorICAgICAgICBtb2RpZmllcnMgfD0gR0RLX01PRDFfTUFT
SzsKKyAgICBpZiAod2tNb2RpZmllcnMgJiBXZWJLaXQ6OldlYkV2ZW50OjpNb2RpZmllcnM6Ok1l
dGFLZXkpCisgICAgICAgIG1vZGlmaWVycyB8PSBHREtfTUVUQV9NQVNLOworICAgIHJldHVybiBt
b2RpZmllcnM7Cit9CisKK1dlYktpdE5hdmlnYXRpb25UeXBlIHRvV2ViS2l0TmF2aWdhdGlvblR5
cGUoV2ViQ29yZTo6TmF2aWdhdGlvblR5cGUgdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsK
KyAgICBjYXNlIFdlYkNvcmU6Ok5hdmlnYXRpb25UeXBlOjpOYXZpZ2F0aW9uVHlwZUxpbmtDbGlj
a2VkOgorICAgICAgICByZXR1cm4gV0VCS0lUX05BVklHQVRJT05fVFlQRV9MSU5LX0NMSUNLRUQ7
CisgICAgY2FzZSBXZWJDb3JlOjpOYXZpZ2F0aW9uVHlwZTo6TmF2aWdhdGlvblR5cGVGb3JtU3Vi
bWl0dGVkOgorICAgICAgICByZXR1cm4gV0VCS0lUX05BVklHQVRJT05fVFlQRV9GT1JNX1NVQk1J
VFRFRDsKKyAgICBjYXNlIFdlYkNvcmU6Ok5hdmlnYXRpb25UeXBlOjpOYXZpZ2F0aW9uVHlwZUJh
Y2tGb3J3YXJkOgorICAgICAgICByZXR1cm4gV0VCS0lUX05BVklHQVRJT05fVFlQRV9CQUNLX0ZP
UldBUkQ7CisgICAgY2FzZSBXZWJDb3JlOjpOYXZpZ2F0aW9uVHlwZTo6TmF2aWdhdGlvblR5cGVS
ZWxvYWQ6CisgICAgICAgIHJldHVybiBXRUJLSVRfTkFWSUdBVElPTl9UWVBFX1JFTE9BRDsKKyAg
ICBjYXNlIFdlYkNvcmU6Ok5hdmlnYXRpb25UeXBlOjpOYXZpZ2F0aW9uVHlwZUZvcm1SZXN1Ym1p
dHRlZDoKKyAgICAgICAgcmV0dXJuIFdFQktJVF9OQVZJR0FUSU9OX1RZUEVfRk9STV9SRVNVQk1J
VFRFRDsKKyAgICBjYXNlIFdlYkNvcmU6Ok5hdmlnYXRpb25UeXBlOjpOYXZpZ2F0aW9uVHlwZU90
aGVyOgorICAgICAgICByZXR1cm4gV0VCS0lUX05BVklHQVRJT05fVFlQRV9PVEhFUjsKKyAgICBk
ZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIFdF
QktJVF9OQVZJR0FUSU9OX1RZUEVfT1RIRVI7CisgICAgfQorfQorCit1bnNpZ25lZCB0b1dlYktp
dE1vdXNlQnV0dG9uKFdlYktpdDo6V2ViTW91c2VFdmVudDo6QnV0dG9uIGJ1dHRvbikKK3sKKyAg
ICBzd2l0Y2ggKGJ1dHRvbikgeworICAgIGNhc2UgV2ViS2l0OjpXZWJNb3VzZUV2ZW50OjpCdXR0
b246Ok5vQnV0dG9uOgorICAgICAgICByZXR1cm4gMDsKKyAgICBjYXNlIFdlYktpdDo6V2ViTW91
c2VFdmVudDo6QnV0dG9uOjpMZWZ0QnV0dG9uOgorICAgICAgICByZXR1cm4gMTsKKyAgICBjYXNl
IFdlYktpdDo6V2ViTW91c2VFdmVudDo6QnV0dG9uOjpNaWRkbGVCdXR0b246CisgICAgICAgIHJl
dHVybiAyOworICAgIGNhc2UgV2ViS2l0OjpXZWJNb3VzZUV2ZW50OjpCdXR0b246OlJpZ2h0QnV0
dG9uOgorICAgICAgICByZXR1cm4gMzsKKyAgICB9CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgcmV0dXJuIDA7Cit9CisKIHVuc2lnbmVkIHdrRXZlbnRNb3VzZUJ1dHRvblRvV2ViS2l0
TW91c2VCdXR0b24oV0tFdmVudE1vdXNlQnV0dG9uIHdrQnV0dG9uKQogewogICAgIHN3aXRjaCAo
d2tCdXR0b24pIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdFByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktp
dFByaXZhdGUuaAppbmRleCBmYWIwODY1Li5hNTRlMTRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRQcml2YXRlLmgKKysrIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0UHJpdmF0ZS5oCkBAIC0yNiw2ICsyNiw3IEBACiAj
aWZuZGVmIFdlYktpdFByaXZhdGVfaAogI2RlZmluZSBXZWJLaXRQcml2YXRlX2gKIAorI2luY2x1
ZGUgIldlYktpdE5hdmlnYXRpb25BY3Rpb24uaCIKICNpbmNsdWRlIDxXZWJLaXQvV0tBUElDYXN0
Lmg+CiAjaW5jbHVkZSA8V2ViS2l0L1dLRG93bmxvYWQuaD4KICNpbmNsdWRlIDxXZWJLaXQvV0tG
aW5kT3B0aW9ucy5oPgpAQCAtMTE1LDYgKzExNiw5IEBAIEdUeXBlIHR5cGVfbmFtZSMjX2dldF90
eXBlKHZvaWQpIFwKIAogdW5zaWduZWQgd2tFdmVudE1vZGlmaWVyc1RvR2RrTW9kaWZpZXJzKFdL
RXZlbnRNb2RpZmllcnMpOwogdW5zaWduZWQgd2tFdmVudE1vdXNlQnV0dG9uVG9XZWJLaXRNb3Vz
ZUJ1dHRvbihXS0V2ZW50TW91c2VCdXR0b24pOwordW5zaWduZWQgdG9HZGtNb2RpZmllcnMoV2Vi
S2l0OjpXZWJFdmVudDo6TW9kaWZpZXJzKTsKK1dlYktpdE5hdmlnYXRpb25UeXBlIHRvV2ViS2l0
TmF2aWdhdGlvblR5cGUoV2ViQ29yZTo6TmF2aWdhdGlvblR5cGUpOwordW5zaWduZWQgdG9XZWJL
aXRNb3VzZUJ1dHRvbihXZWJLaXQ6OldlYk1vdXNlRXZlbnQ6OkJ1dHRvbik7CiB1bnNpZ25lZCB0
b1dlYktpdEVycm9yKHVuc2lnbmVkIHdlYkNvcmVFcnJvcik7CiB1bnNpZ25lZCB0b1dlYkNvcmVF
cnJvcih1bnNpZ25lZCB3ZWJLaXRFcnJvcik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFVJQ2xpZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFVJQ2xpZW50LmNwcAppbmRleCA5ZTBlZjY4Li45ZDZhOGVj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRVSUNs
aWVudC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0VUlD
bGllbnQuY3BwCkBAIC0yMCw5ICsyMCwxMiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1
ZGUgIldlYktpdFVJQ2xpZW50LmgiCiAKKyNpbmNsdWRlICJBUElVSUNsaWVudC5oIgogI2luY2x1
ZGUgIldlYktpdEZpbGVDaG9vc2VyUmVxdWVzdFByaXZhdGUuaCIKICNpbmNsdWRlICJXZWJLaXRH
ZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdE5h
dmlnYXRpb25BY3Rpb25Qcml2YXRlLmgiCiAjaW5jbHVkZSAiV2ViS2l0UHJpdmF0ZS5oIgorI2lu
Y2x1ZGUgIldlYktpdFVSSVJlcXVlc3RQcml2YXRlLmgiCiAjaW5jbHVkZSAiV2ViS2l0V2ViVmll
d0Jhc2VQcml2YXRlLmgiCiAjaW5jbHVkZSAiV2ViS2l0V2ViVmlld1ByaXZhdGUuaCIKICNpbmNs
dWRlICJXZWJLaXRXaW5kb3dQcm9wZXJ0aWVzUHJpdmF0ZS5oIgpAQCAtMzIsMTg3ICszNSwxNDcg
QEAKIAogdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKIAotc3RhdGljIFdLUGFnZVJlZiBjcmVhdGVO
ZXdQYWdlKFdLUGFnZVJlZiwgV0tVUkxSZXF1ZXN0UmVmLCBXS0RpY3Rpb25hcnlSZWYgd2tXaW5k
b3dGZWF0dXJlcywgV0tFdmVudE1vZGlmaWVycywgV0tFdmVudE1vdXNlQnV0dG9uLCBjb25zdCB2
b2lkKiBjbGllbnRJbmZvKQotewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxXS1BhZ2VSZWY+KHRv
QVBJKHdlYmtpdFdlYlZpZXdDcmVhdGVOZXdQYWdlKFdFQktJVF9XRUJfVklFVyhjbGllbnRJbmZv
KSwgdG9JbXBsKHdrV2luZG93RmVhdHVyZXMpKSkpOwotfQorY2xhc3MgVUlDbGllbnQgOiBwdWJs
aWMgQVBJOjpVSUNsaWVudCB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgVUlDbGllbnQoV2ViS2l0
V2ViVmlldyogd2ViVmlldykKKyAgICAgICAgOiBtX3dlYlZpZXcod2ViVmlldykKKyAgICB7Cisg
ICAgfQogCi1zdGF0aWMgdm9pZCBzaG93UGFnZShXS1BhZ2VSZWYsIGNvbnN0IHZvaWQqIGNsaWVu
dEluZm8pCi17Ci0gICAgd2Via2l0V2ViVmlld1JlYWR5VG9TaG93UGFnZShXRUJLSVRfV0VCX1ZJ
RVcoY2xpZW50SW5mbykpOwotfQorcHJpdmF0ZToKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8V2Vi
UGFnZVByb3h5PiBjcmVhdGVOZXdQYWdlKFdlYlBhZ2VQcm94eSosIFdlYkZyYW1lUHJveHkqLCBj
b25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlc291cmNlUmVxdWVzdCwgY29uc3QgV2Vi
Q29yZTo6V2luZG93RmVhdHVyZXMmIHdpbmRvd0ZlYXR1cmVzLCBjb25zdCBOYXZpZ2F0aW9uQWN0
aW9uRGF0YSYgbmF2aWdhdGlvbkFjdGlvbkRhdGEpIG92ZXJyaWRlCisgICAgeworICAgICAgICBH
UmVmUHRyPFdlYktpdFVSSVJlcXVlc3Q+IHJlcXVlc3QgPSBhZG9wdEdSZWYod2Via2l0VVJJUmVx
dWVzdENyZWF0ZUZvclJlc291cmNlUmVxdWVzdChyZXNvdXJjZVJlcXVlc3QpKTsKKyAgICAgICAg
V2ViS2l0TmF2aWdhdGlvbkFjdGlvbiBuYXZpZ2F0aW9uQWN0aW9uKHJlcXVlc3QuZ2V0KCksIG5h
dmlnYXRpb25BY3Rpb25EYXRhKTsKKyAgICAgICAgcmV0dXJuIHdlYmtpdFdlYlZpZXdDcmVhdGVO
ZXdQYWdlKG1fd2ViVmlldywgd2luZG93RmVhdHVyZXMsICZuYXZpZ2F0aW9uQWN0aW9uKTsKKyAg
ICB9CiAKLXN0YXRpYyB2b2lkIGNsb3NlUGFnZShXS1BhZ2VSZWYsIGNvbnN0IHZvaWQqIGNsaWVu
dEluZm8pCi17Ci0gICAgd2Via2l0V2ViVmlld0Nsb3NlUGFnZShXRUJLSVRfV0VCX1ZJRVcoY2xp
ZW50SW5mbykpOwotfQorICAgIHZpcnR1YWwgdm9pZCBzaG93UGFnZShXZWJQYWdlUHJveHkqKSBv
dmVycmlkZQorICAgIHsKKyAgICAgICAgd2Via2l0V2ViVmlld1JlYWR5VG9TaG93UGFnZShtX3dl
YlZpZXcpOworICAgIH0KIAotc3RhdGljIHZvaWQgcnVuSmF2YVNjcmlwdEFsZXJ0KFdLUGFnZVJl
ZiwgV0tTdHJpbmdSZWYgbWVzc2FnZSwgV0tGcmFtZVJlZiwgY29uc3Qgdm9pZCogY2xpZW50SW5m
bykKLXsKLSAgICB3ZWJraXRXZWJWaWV3UnVuSmF2YVNjcmlwdEFsZXJ0KFdFQktJVF9XRUJfVklF
VyhjbGllbnRJbmZvKSwgdG9JbXBsKG1lc3NhZ2UpLT5zdHJpbmcoKS51dGY4KCkpOwotfQorICAg
IHZpcnR1YWwgdm9pZCBjbG9zZShXZWJQYWdlUHJveHkqKSBvdmVycmlkZQorICAgIHsKKyAgICAg
ICAgd2Via2l0V2ViVmlld0Nsb3NlUGFnZShtX3dlYlZpZXcpOworICAgIH0KIAotc3RhdGljIGJv
b2wgcnVuSmF2YVNjcmlwdENvbmZpcm0oV0tQYWdlUmVmLCBXS1N0cmluZ1JlZiBtZXNzYWdlLCBX
S0ZyYW1lUmVmLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQotewotICAgIHJldHVybiB3ZWJraXRX
ZWJWaWV3UnVuSmF2YVNjcmlwdENvbmZpcm0oV0VCS0lUX1dFQl9WSUVXKGNsaWVudEluZm8pLCB0
b0ltcGwobWVzc2FnZSktPnN0cmluZygpLnV0ZjgoKSk7Ci19CisgICAgdmlydHVhbCB2b2lkIHJ1
bkphdmFTY3JpcHRBbGVydChXZWJQYWdlUHJveHkqLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIFdl
YkZyYW1lUHJveHkqLCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+IGNvbXBsZXRpb25IYW5kbGVyKSBv
dmVycmlkZQorICAgIHsKKyAgICAgICAgd2Via2l0V2ViVmlld1J1bkphdmFTY3JpcHRBbGVydCht
X3dlYlZpZXcsIG1lc3NhZ2UudXRmOCgpKTsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsK
KyAgICB9CiAKLXN0YXRpYyBXS1N0cmluZ1JlZiBydW5KYXZhU2NyaXB0UHJvbXB0KFdLUGFnZVJl
ZiwgV0tTdHJpbmdSZWYgbWVzc2FnZSwgV0tTdHJpbmdSZWYgZGVmYXVsdFZhbHVlLCBXS0ZyYW1l
UmVmLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQotewotICAgIENTdHJpbmcgcmVzdWx0ID0gd2Vi
a2l0V2ViVmlld1J1bkphdmFTY3JpcHRQcm9tcHQoV0VCS0lUX1dFQl9WSUVXKGNsaWVudEluZm8p
LCB0b0ltcGwobWVzc2FnZSktPnN0cmluZygpLnV0ZjgoKSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvSW1wbChkZWZhdWx0VmFsdWUpLT5z
dHJpbmcoKS51dGY4KCkpOwotICAgIHJldHVybiBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZyhyZXN1bHQuZGF0YSgpKTsKLX0KKyAgICB2aXJ0dWFsIHZvaWQgcnVuSmF2YVNjcmlwdENvbmZp
cm0oV2ViUGFnZVByb3h5KiwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBXZWJGcmFtZVByb3h5Kiwg
c3RkOjpmdW5jdGlvbjx2b2lkIChib29sKT4gY29tcGxldGlvbkhhbmRsZXIpIG92ZXJyaWRlCisg
ICAgeworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcih3ZWJraXRXZWJWaWV3UnVuSmF2YVNjcmlw
dENvbmZpcm0obV93ZWJWaWV3LCBtZXNzYWdlLnV0ZjgoKSkpOworICAgIH0KIAotc3RhdGljIGJv
b2wgdG9vbGJhcnNBcmVWaXNpYmxlKFdLUGFnZVJlZiwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykK
LXsKLSAgICBXZWJLaXRXaW5kb3dQcm9wZXJ0aWVzKiB3aW5kb3dQcm9wZXJ0aWVzID0gd2Via2l0
X3dlYl92aWV3X2dldF93aW5kb3dfcHJvcGVydGllcyhXRUJLSVRfV0VCX1ZJRVcoY2xpZW50SW5m
bykpOwotICAgIHJldHVybiB3ZWJraXRfd2luZG93X3Byb3BlcnRpZXNfZ2V0X3Rvb2xiYXJfdmlz
aWJsZSh3aW5kb3dQcm9wZXJ0aWVzKTsKLX0KKyAgICB2aXJ0dWFsIHZvaWQgcnVuSmF2YVNjcmlw
dFByb21wdChXZWJQYWdlUHJveHkqLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIGNvbnN0IFN0cmlu
ZyYgZGVmYXVsdFZhbHVlLCBXZWJGcmFtZVByb3h5Kiwgc3RkOjpmdW5jdGlvbjx2b2lkIChjb25z
dCBTdHJpbmcmKT4gY29tcGxldGlvbkhhbmRsZXIpIG92ZXJyaWRlCisgICAgeworICAgICAgICBD
U3RyaW5nIHJlc3VsdCA9IHdlYmtpdFdlYlZpZXdSdW5KYXZhU2NyaXB0UHJvbXB0KG1fd2ViVmll
dywgbWVzc2FnZS51dGY4KCksIGRlZmF1bHRWYWx1ZS51dGY4KCkpOworICAgICAgICBpZiAocmVz
dWx0LmlzTnVsbCgpKSB7CisgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihTdHJpbmcoKSk7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KIAotc3RhdGljIHZvaWQgc2V0VG9vbGJh
cnNBcmVWaXNpYmxlKFdLUGFnZVJlZiwgYm9vbCB0b29sYmFyc1Zpc2libGUsIGNvbnN0IHZvaWQq
IGNsaWVudEluZm8pCi17Ci0gICAgV2ViS2l0V2luZG93UHJvcGVydGllcyogd2luZG93UHJvcGVy
dGllcyA9IHdlYmtpdF93ZWJfdmlld19nZXRfd2luZG93X3Byb3BlcnRpZXMoV0VCS0lUX1dFQl9W
SUVXKGNsaWVudEluZm8pKTsKLSAgICB3ZWJraXRXaW5kb3dQcm9wZXJ0aWVzU2V0VG9vbGJhclZp
c2libGUod2luZG93UHJvcGVydGllcywgdG9vbGJhcnNWaXNpYmxlKTsKLX0KKyAgICAgICAgY29t
cGxldGlvbkhhbmRsZXIoU3RyaW5nOjpmcm9tVVRGOChyZXN1bHQuZGF0YSgpKSk7CisgICAgfQog
Ci1zdGF0aWMgYm9vbCBtZW51QmFySXNWaXNpYmxlKFdLUGFnZVJlZiwgY29uc3Qgdm9pZCogY2xp
ZW50SW5mbykKLXsKLSAgICBXZWJLaXRXaW5kb3dQcm9wZXJ0aWVzKiB3aW5kb3dQcm9wZXJ0aWVz
ID0gd2Via2l0X3dlYl92aWV3X2dldF93aW5kb3dfcHJvcGVydGllcyhXRUJLSVRfV0VCX1ZJRVco
Y2xpZW50SW5mbykpOwotICAgIHJldHVybiB3ZWJraXRfd2luZG93X3Byb3BlcnRpZXNfZ2V0X21l
bnViYXJfdmlzaWJsZSh3aW5kb3dQcm9wZXJ0aWVzKTsKLX0KKyAgICB2aXJ0dWFsIHZvaWQgbW91
c2VEaWRNb3ZlT3ZlckVsZW1lbnQoV2ViUGFnZVByb3h5KiwgY29uc3QgV2ViSGl0VGVzdFJlc3Vs
dDo6RGF0YSYgZGF0YSwgV2ViRXZlbnQ6Ok1vZGlmaWVycyBtb2RpZmllcnMsIEFQSTo6T2JqZWN0
Kikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIHdlYmtpdFdlYlZpZXdNb3VzZVRhcmdldENoYW5n
ZWQobV93ZWJWaWV3LCBkYXRhLCB0b0dka01vZGlmaWVycyhtb2RpZmllcnMpKTsKKyAgICB9CiAK
LXN0YXRpYyB2b2lkIHNldE1lbnVCYXJJc1Zpc2libGUoV0tQYWdlUmVmLCBib29sIG1lbnVCYXJW
aXNpYmxlLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQotewotICAgIFdlYktpdFdpbmRvd1Byb3Bl
cnRpZXMqIHdpbmRvd1Byb3BlcnRpZXMgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3dpbmRvd19wcm9w
ZXJ0aWVzKFdFQktJVF9XRUJfVklFVyhjbGllbnRJbmZvKSk7Ci0gICAgd2Via2l0V2luZG93UHJv
cGVydGllc1NldE1lbnViYXJWaXNpYmxlKHdpbmRvd1Byb3BlcnRpZXMsIG1lbnVCYXJWaXNpYmxl
KTsKLX0KKyAgICB2aXJ0dWFsIGJvb2wgdG9vbGJhcnNBcmVWaXNpYmxlKFdlYlBhZ2VQcm94eSop
IG92ZXJyaWRlCisgICAgeworICAgICAgICByZXR1cm4gd2Via2l0X3dpbmRvd19wcm9wZXJ0aWVz
X2dldF90b29sYmFyX3Zpc2libGUod2Via2l0X3dlYl92aWV3X2dldF93aW5kb3dfcHJvcGVydGll
cyhtX3dlYlZpZXcpKTsKKyAgICB9CiAKLXN0YXRpYyBib29sIHN0YXR1c0JhcklzVmlzaWJsZShX
S1BhZ2VSZWYsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCi17Ci0gICAgV2ViS2l0V2luZG93UHJv
cGVydGllcyogd2luZG93UHJvcGVydGllcyA9IHdlYmtpdF93ZWJfdmlld19nZXRfd2luZG93X3By
b3BlcnRpZXMoV0VCS0lUX1dFQl9WSUVXKGNsaWVudEluZm8pKTsKLSAgICByZXR1cm4gd2Via2l0
X3dpbmRvd19wcm9wZXJ0aWVzX2dldF9zdGF0dXNiYXJfdmlzaWJsZSh3aW5kb3dQcm9wZXJ0aWVz
KTsKLX0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0VG9vbGJhcnNBcmVWaXNpYmxlKFdlYlBhZ2VQcm94
eSosIGJvb2wgdmlzaWJsZSkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIHdlYmtpdFdpbmRvd1By
b3BlcnRpZXNTZXRUb29sYmFyVmlzaWJsZSh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3dpbmRvd19wcm9w
ZXJ0aWVzKG1fd2ViVmlldyksIHZpc2libGUpOworICAgIH0KIAotc3RhdGljIHZvaWQgc2V0U3Rh
dHVzQmFySXNWaXNpYmxlKFdLUGFnZVJlZiwgYm9vbCBzdGF0dXNCYXJWaXNpYmxlLCBjb25zdCB2
b2lkKiBjbGllbnRJbmZvKQotewotICAgIFdlYktpdFdpbmRvd1Byb3BlcnRpZXMqIHdpbmRvd1By
b3BlcnRpZXMgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3dpbmRvd19wcm9wZXJ0aWVzKFdFQktJVF9X
RUJfVklFVyhjbGllbnRJbmZvKSk7Ci0gICAgd2Via2l0V2luZG93UHJvcGVydGllc1NldFN0YXR1
c2JhclZpc2libGUod2luZG93UHJvcGVydGllcywgc3RhdHVzQmFyVmlzaWJsZSk7Ci19CisgICAg
dmlydHVhbCBib29sIG1lbnVCYXJJc1Zpc2libGUoV2ViUGFnZVByb3h5Kikgb3ZlcnJpZGUKKyAg
ICB7CisgICAgICAgIHJldHVybiB3ZWJraXRfd2luZG93X3Byb3BlcnRpZXNfZ2V0X21lbnViYXJf
dmlzaWJsZSh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3dpbmRvd19wcm9wZXJ0aWVzKG1fd2ViVmlldykp
OworICAgIH0KIAotc3RhdGljIGJvb2wgaXNSZXNpemFibGUoV0tQYWdlUmVmLCBjb25zdCB2b2lk
KiBjbGllbnRJbmZvKQotewotICAgIFdlYktpdFdpbmRvd1Byb3BlcnRpZXMqIHdpbmRvd1Byb3Bl
cnRpZXMgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3dpbmRvd19wcm9wZXJ0aWVzKFdFQktJVF9XRUJf
VklFVyhjbGllbnRJbmZvKSk7Ci0gICAgcmV0dXJuIHdlYmtpdF93aW5kb3dfcHJvcGVydGllc19n
ZXRfcmVzaXphYmxlKHdpbmRvd1Byb3BlcnRpZXMpOwotfQorICAgIHZpcnR1YWwgdm9pZCBzZXRN
ZW51QmFySXNWaXNpYmxlKFdlYlBhZ2VQcm94eSosIGJvb2wgdmlzaWJsZSkgb3ZlcnJpZGUKKyAg
ICB7CisgICAgICAgIHdlYmtpdFdpbmRvd1Byb3BlcnRpZXNTZXRUb29sYmFyVmlzaWJsZSh3ZWJr
aXRfd2ViX3ZpZXdfZ2V0X3dpbmRvd19wcm9wZXJ0aWVzKG1fd2ViVmlldyksIHZpc2libGUpOwor
ICAgIH0KIAotc3RhdGljIHZvaWQgc2V0SXNSZXNpemFibGUoV0tQYWdlUmVmLCBib29sIHJlc2l6
YWJsZSwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKLXsKLSAgICBXZWJLaXRXaW5kb3dQcm9wZXJ0
aWVzKiB3aW5kb3dQcm9wZXJ0aWVzID0gd2Via2l0X3dlYl92aWV3X2dldF93aW5kb3dfcHJvcGVy
dGllcyhXRUJLSVRfV0VCX1ZJRVcoY2xpZW50SW5mbykpOwotICAgIHdlYmtpdFdpbmRvd1Byb3Bl
cnRpZXNTZXRSZXNpemFibGUod2luZG93UHJvcGVydGllcywgcmVzaXphYmxlKTsKLX0KKyAgICB2
aXJ0dWFsIGJvb2wgc3RhdHVzQmFySXNWaXNpYmxlKFdlYlBhZ2VQcm94eSopIG92ZXJyaWRlCisg
ICAgeworICAgICAgICByZXR1cm4gd2Via2l0X3dpbmRvd19wcm9wZXJ0aWVzX2dldF9zdGF0dXNi
YXJfdmlzaWJsZSh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3dpbmRvd19wcm9wZXJ0aWVzKG1fd2ViVmll
dykpOworICAgIH0KIAotc3RhdGljIFdLUmVjdCBnZXRXaW5kb3dGcmFtZShXS1BhZ2VSZWYsIGNv
bnN0IHZvaWQqIGNsaWVudEluZm8pCi17Ci0gICAgR2RrUmVjdGFuZ2xlIGdlb21ldHJ5ID0geyAw
LCAwLCAwLCAwIH07Ci0gICAgR3RrV2lkZ2V0KiB3aW5kb3cgPSBndGtfd2lkZ2V0X2dldF90b3Bs
ZXZlbChHVEtfV0lER0VUKGNsaWVudEluZm8pKTsKLSAgICBpZiAoV2ViQ29yZTo6d2lkZ2V0SXNP
bnNjcmVlblRvcGxldmVsV2luZG93KHdpbmRvdykgJiYgZ3RrX3dpZGdldF9nZXRfdmlzaWJsZSh3
aW5kb3cpKSB7Ci0gICAgICAgIGd0a193aW5kb3dfZ2V0X3Bvc2l0aW9uKEdUS19XSU5ET1cod2lu
ZG93KSwgJmdlb21ldHJ5LngsICZnZW9tZXRyeS55KTsKLSAgICAgICAgZ3RrX3dpbmRvd19nZXRf
c2l6ZShHVEtfV0lORE9XKHdpbmRvdyksICZnZW9tZXRyeS53aWR0aCwgJmdlb21ldHJ5LmhlaWdo
dCk7CisgICAgdmlydHVhbCB2b2lkIHNldFN0YXR1c0JhcklzVmlzaWJsZShXZWJQYWdlUHJveHkq
LCBib29sIHZpc2libGUpIG92ZXJyaWRlCisgICAgeworICAgICAgICB3ZWJraXRXaW5kb3dQcm9w
ZXJ0aWVzU2V0U3RhdHVzYmFyVmlzaWJsZSh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3dpbmRvd19wcm9w
ZXJ0aWVzKG1fd2ViVmlldyksIHZpc2libGUpOwogICAgIH0KLSAgICByZXR1cm4gV0tSZWN0TWFr
ZShnZW9tZXRyeS54LCBnZW9tZXRyeS55LCBnZW9tZXRyeS53aWR0aCwgZ2VvbWV0cnkuaGVpZ2h0
KTsKLX0KIAotc3RhdGljIHZvaWQgc2V0V2luZG93RnJhbWUoV0tQYWdlUmVmLCBXS1JlY3QgZnJh
bWUsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCi17Ci0gICAgV2ViS2l0V2luZG93UHJvcGVydGll
cyogd2luZG93UHJvcGVydGllcyA9IHdlYmtpdF93ZWJfdmlld19nZXRfd2luZG93X3Byb3BlcnRp
ZXMoV0VCS0lUX1dFQl9WSUVXKGNsaWVudEluZm8pKTsKLSAgICBHZGtSZWN0YW5nbGUgZ2VvbWV0
cnkgPSB7IHN0YXRpY19jYXN0PGludD4oZnJhbWUub3JpZ2luLngpLCBzdGF0aWNfY2FzdDxpbnQ+
KGZyYW1lLm9yaWdpbi55KSwKLSAgICAgICAgc3RhdGljX2Nhc3Q8aW50PihmcmFtZS5zaXplLndp
ZHRoKSwgc3RhdGljX2Nhc3Q8aW50PihmcmFtZS5zaXplLmhlaWdodCkgfTsKLSAgICB3ZWJraXRX
aW5kb3dQcm9wZXJ0aWVzU2V0R2VvbWV0cnkod2luZG93UHJvcGVydGllcywgJmdlb21ldHJ5KTsK
LX0KKyAgICB2aXJ0dWFsIGJvb2wgaXNSZXNpemFibGUoV2ViUGFnZVByb3h5Kikgb3ZlcnJpZGUK
KyAgICB7CisgICAgICAgIHJldHVybiB3ZWJraXRfd2luZG93X3Byb3BlcnRpZXNfZ2V0X3Jlc2l6
YWJsZSh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3dpbmRvd19wcm9wZXJ0aWVzKG1fd2ViVmlldykpOwor
ICAgIH0KIAotc3RhdGljIHZvaWQgbW91c2VEaWRNb3ZlT3ZlckVsZW1lbnQoV0tQYWdlUmVmLCBX
S0hpdFRlc3RSZXN1bHRSZWYgaGl0VGVzdFJlc3VsdCwgV0tFdmVudE1vZGlmaWVycyBtb2RpZmll
cnMsIFdLVHlwZVJlZiAvKiB1c2VyRGF0YSAqLywgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKLXsK
LSAgICB3ZWJraXRXZWJWaWV3TW91c2VUYXJnZXRDaGFuZ2VkKFdFQktJVF9XRUJfVklFVyhjbGll
bnRJbmZvKSwgdG9JbXBsKGhpdFRlc3RSZXN1bHQpLCB3a0V2ZW50TW9kaWZpZXJzVG9HZGtNb2Rp
ZmllcnMobW9kaWZpZXJzKSk7Ci19CisgICAgdmlydHVhbCB2b2lkIHNldElzUmVzaXphYmxlKFdl
YlBhZ2VQcm94eSosIGJvb2wgcmVzaXphYmxlKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgd2Vi
a2l0V2luZG93UHJvcGVydGllc1NldFJlc2l6YWJsZSh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3dpbmRv
d19wcm9wZXJ0aWVzKG1fd2ViVmlldyksIHJlc2l6YWJsZSk7CisgICAgfQogCi1zdGF0aWMgdm9p
ZCBwcmludEZyYW1lKFdLUGFnZVJlZiBwYWdlLCBXS0ZyYW1lUmVmIGZyYW1lLCBjb25zdCB2b2lk
KikKLXsKLSAgICB3ZWJraXRXZWJWaWV3UHJpbnRGcmFtZShXRUJLSVRfV0VCX1ZJRVcodG9JbXBs
KHBhZ2UpLT52aWV3V2lkZ2V0KCkpLCB0b0ltcGwoZnJhbWUpKTsKLX0KKyAgICB2aXJ0dWFsIHZv
aWQgc2V0V2luZG93RnJhbWUoV2ViUGFnZVByb3h5KiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0
JiBmcmFtZSkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIEdka1JlY3RhbmdsZSBnZW9tZXRyeSA9
IFdlYkNvcmU6OkludFJlY3QoZnJhbWUpOworICAgICAgICB3ZWJraXRXaW5kb3dQcm9wZXJ0aWVz
U2V0R2VvbWV0cnkod2Via2l0X3dlYl92aWV3X2dldF93aW5kb3dfcHJvcGVydGllcyhtX3dlYlZp
ZXcpLCAmZ2VvbWV0cnkpOworICAgIH0KIAotc3RhdGljIHZvaWQgcnVuT3BlblBhbmVsKFdLUGFn
ZVJlZiwgV0tGcmFtZVJlZiwgV0tPcGVuUGFuZWxQYXJhbWV0ZXJzUmVmIHBhcmFtZXRlcnMsIFdL
T3BlblBhbmVsUmVzdWx0TGlzdGVuZXJSZWYgbGlzdGVuZXIsIGNvbnN0IHZvaWQgKmNsaWVudElu
Zm8pCi17Ci0gICAgR1JlZlB0cjxXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3Q+IHJlcXVlc3QgPSBh
ZG9wdEdSZWYod2Via2l0RmlsZUNob29zZXJSZXF1ZXN0Q3JlYXRlKHRvSW1wbChwYXJhbWV0ZXJz
KSwgdG9JbXBsKGxpc3RlbmVyKSkpOwotICAgIHdlYmtpdFdlYlZpZXdSdW5GaWxlQ2hvb3NlclJl
cXVlc3QoV0VCS0lUX1dFQl9WSUVXKGNsaWVudEluZm8pLCByZXF1ZXN0LmdldCgpKTsKLX0KKyAg
ICB2aXJ0dWFsIFdlYkNvcmU6OkZsb2F0UmVjdCB3aW5kb3dGcmFtZShXZWJQYWdlUHJveHkqKSBv
dmVycmlkZQorICAgIHsKKyAgICAgICAgR2RrUmVjdGFuZ2xlIGdlb21ldHJ5ID0geyAwLCAwLCAw
LCAwIH07CisgICAgICAgIEd0a1dpZGdldCogd2luZG93ID0gZ3RrX3dpZGdldF9nZXRfdG9wbGV2
ZWwoR1RLX1dJREdFVChtX3dlYlZpZXcpKTsKKyAgICAgICAgaWYgKFdlYkNvcmU6OndpZGdldElz
T25zY3JlZW5Ub3BsZXZlbFdpbmRvdyh3aW5kb3cpICYmIGd0a193aWRnZXRfZ2V0X3Zpc2libGUo
d2luZG93KSkgeworICAgICAgICAgICAgZ3RrX3dpbmRvd19nZXRfcG9zaXRpb24oR1RLX1dJTkRP
Vyh3aW5kb3cpLCAmZ2VvbWV0cnkueCwgJmdlb21ldHJ5LnkpOworICAgICAgICAgICAgZ3RrX3dp
bmRvd19nZXRfc2l6ZShHVEtfV0lORE9XKHdpbmRvdyksICZnZW9tZXRyeS53aWR0aCwgJmdlb21l
dHJ5LmhlaWdodCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIFdlYkNvcmU6OkZsb2F0UmVj
dChnZW9tZXRyeSk7CisgICAgfQogCi1zdGF0aWMgdm9pZCBkZWNpZGVQb2xpY3lGb3JHZW9sb2Nh
dGlvblBlcm1pc3Npb25SZXF1ZXN0KFdLUGFnZVJlZiwgV0tGcmFtZVJlZiwgV0tTZWN1cml0eU9y
aWdpblJlZiwgV0tHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0UmVmIHJlcXVlc3QsIGNvbnN0
IHZvaWQqIGNsaWVudEluZm8pCi17Ci0gICAgR1JlZlB0cjxXZWJLaXRHZW9sb2NhdGlvblBlcm1p
c3Npb25SZXF1ZXN0PiBnZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0ID0gYWRvcHRHUmVmKHdl
YmtpdEdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RDcmVhdGUodG9JbXBsKHJlcXVlc3QpKSk7
Ci0gICAgd2Via2l0V2ViVmlld01ha2VQZXJtaXNzaW9uUmVxdWVzdChXRUJLSVRfV0VCX1ZJRVco
Y2xpZW50SW5mbyksIFdFQktJVF9QRVJNSVNTSU9OX1JFUVVFU1QoZ2VvbG9jYXRpb25QZXJtaXNz
aW9uUmVxdWVzdC5nZXQoKSkpOwotfQorICAgIHZpcnR1YWwgYm9vbCBydW5PcGVuUGFuZWwoV2Vi
UGFnZVByb3h5KiwgV2ViRnJhbWVQcm94eSosIFdlYk9wZW5QYW5lbFBhcmFtZXRlcnMqIHBhcmFt
ZXRlcnMsIFdlYk9wZW5QYW5lbFJlc3VsdExpc3RlbmVyUHJveHkqIGxpc3RlbmVyKSBvdmVycmlk
ZQorICAgIHsKKyAgICAgICAgR1JlZlB0cjxXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3Q+IHJlcXVl
c3QgPSBhZG9wdEdSZWYod2Via2l0RmlsZUNob29zZXJSZXF1ZXN0Q3JlYXRlKHBhcmFtZXRlcnMs
IGxpc3RlbmVyKSk7CisgICAgICAgIHdlYmtpdFdlYlZpZXdSdW5GaWxlQ2hvb3NlclJlcXVlc3Qo
bV93ZWJWaWV3LCByZXF1ZXN0LmdldCgpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQog
Ci1zdGF0aWMgdm9pZCBydW5Nb2RhbChXS1BhZ2VSZWYsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8p
Ci17Ci0gICAgd2Via2l0V2ViVmlld1J1bkFzTW9kYWwoV0VCS0lUX1dFQl9WSUVXKGNsaWVudElu
Zm8pKTsKLX0KKyAgICB2aXJ0dWFsIGJvb2wgZGVjaWRlUG9saWN5Rm9yR2VvbG9jYXRpb25QZXJt
aXNzaW9uUmVxdWVzdChXZWJQYWdlUHJveHkqLCBXZWJGcmFtZVByb3h5KiwgV2ViU2VjdXJpdHlP
cmlnaW4qLCBHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0UHJveHkqIHBlcm1pc3Npb25SZXF1
ZXN0KSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgR1JlZlB0cjxXZWJLaXRHZW9sb2NhdGlvblBl
cm1pc3Npb25SZXF1ZXN0PiBnZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0ID0gYWRvcHRHUmVm
KHdlYmtpdEdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RDcmVhdGUocGVybWlzc2lvblJlcXVl
c3QpKTsKKyAgICAgICAgd2Via2l0V2ViVmlld01ha2VQZXJtaXNzaW9uUmVxdWVzdChtX3dlYlZp
ZXcsIFdFQktJVF9QRVJNSVNTSU9OX1JFUVVFU1QoZ2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVz
dC5nZXQoKSkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZv
aWQgcHJpbnRGcmFtZShXZWJQYWdlUHJveHkqLCBXZWJGcmFtZVByb3h5KiBmcmFtZSkgb3ZlcnJp
ZGUKKyAgICB7CisgICAgICAgIHdlYmtpdFdlYlZpZXdQcmludEZyYW1lKG1fd2ViVmlldywgZnJh
bWUpOworICAgIH0KKworICAgIHZpcnR1YWwgYm9vbCBjYW5SdW5Nb2RhbCgpIGNvbnN0IG92ZXJy
aWRlIHsgcmV0dXJuIHRydWU7IH0KKworICAgIHZpcnR1YWwgdm9pZCBydW5Nb2RhbChXZWJQYWdl
UHJveHkqKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgd2Via2l0V2ViVmlld1J1bkFzTW9kYWwo
bV93ZWJWaWV3KTsKKyAgICB9CisKKyAgICBXZWJLaXRXZWJWaWV3KiBtX3dlYlZpZXc7Cit9Owog
CiB2b2lkIGF0dGFjaFVJQ2xpZW50VG9WaWV3KFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCiB7Ci0g
ICAgV0tQYWdlVUlDbGllbnRWMiB3a1VJQ2xpZW50ID0gewotICAgICAgICB7Ci0gICAgICAgICAg
ICAyLCAvLyB2ZXJzaW9uCi0gICAgICAgICAgICB3ZWJWaWV3LCAvLyBjbGllbnRJbmZvCi0gICAg
ICAgIH0sCi0gICAgICAgIDAsIC8vIGNyZWF0ZU5ld1BhZ2VfZGVwcmVjYXRlZEZvclVzZVdpdGhW
MAotICAgICAgICBzaG93UGFnZSwKLSAgICAgICAgY2xvc2VQYWdlLAotICAgICAgICAwLCAvLyB0
YWtlRm9jdXMKLSAgICAgICAgMCwgLy8gZm9jdXMKLSAgICAgICAgMCwgLy8gdW5mb2N1cwotICAg
ICAgICBydW5KYXZhU2NyaXB0QWxlcnQsCi0gICAgICAgIHJ1bkphdmFTY3JpcHRDb25maXJtLAot
ICAgICAgICBydW5KYXZhU2NyaXB0UHJvbXB0LAotICAgICAgICAwLCAvLyBzZXRTdGF0dXNUZXh0
Ci0gICAgICAgIDAsIC8vIG1vdXNlRGlkTW92ZU92ZXJFbGVtZW50X2RlcHJlY2F0ZWRGb3JVc2VX
aXRoVjAKLSAgICAgICAgMCwgLy8gbWlzc2luZ1BsdWdpbkJ1dHRvbkNsaWNrZWQKLSAgICAgICAg
MCwgLy8gZGlkTm90SGFuZGxlS2V5RXZlbnQKLSAgICAgICAgMCwgLy8gZGlkTm90SGFuZGxlV2hl
ZWxFdmVudAotICAgICAgICB0b29sYmFyc0FyZVZpc2libGUsCi0gICAgICAgIHNldFRvb2xiYXJz
QXJlVmlzaWJsZSwKLSAgICAgICAgbWVudUJhcklzVmlzaWJsZSwKLSAgICAgICAgc2V0TWVudUJh
cklzVmlzaWJsZSwKLSAgICAgICAgc3RhdHVzQmFySXNWaXNpYmxlLAotICAgICAgICBzZXRTdGF0
dXNCYXJJc1Zpc2libGUsCi0gICAgICAgIGlzUmVzaXphYmxlLAotICAgICAgICBzZXRJc1Jlc2l6
YWJsZSwKLSAgICAgICAgZ2V0V2luZG93RnJhbWUsCi0gICAgICAgIHNldFdpbmRvd0ZyYW1lLAot
ICAgICAgICAwLCAvLyBydW5CZWZvcmVVbmxvYWRDb25maXJtUGFuZWwKLSAgICAgICAgMCwgLy8g
ZGlkRHJhdwotICAgICAgICAwLCAvLyBwYWdlRGlkU2Nyb2xsCi0gICAgICAgIDAsIC8vIGV4Y2Vl
ZGVkRGF0YWJhc2VRdW90YQotICAgICAgICBydW5PcGVuUGFuZWwsCi0gICAgICAgIGRlY2lkZVBv
bGljeUZvckdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3QsCi0gICAgICAgIDAsIC8vIGhlYWRl
ckhlaWdodAotICAgICAgICAwLCAvLyBmb290ZXJIZWlnaHQKLSAgICAgICAgMCwgLy8gZHJhd0hl
YWRlcgotICAgICAgICAwLCAvLyBkcmF3Rm9vdGVyCi0gICAgICAgIHByaW50RnJhbWUsCi0gICAg
ICAgIHJ1bk1vZGFsLAotICAgICAgICAwLCAvLyBkaWRDb21wbGV0ZVJ1YmJlckJhbmRGb3JNYWlu
RnJhbWUKLSAgICAgICAgMCwgLy8gc2F2ZURhdGFUb0ZpbGVJbkRvd25sb2Fkc0ZvbGRlcgotICAg
ICAgICAwLCAvLyBzaG91bGRJbnRlcnJ1cHRKYXZhU2NyaXB0Ci0gICAgICAgIGNyZWF0ZU5ld1Bh
Z2UsCi0gICAgICAgIG1vdXNlRGlkTW92ZU92ZXJFbGVtZW50LAotICAgICAgICAwLCAvLyBkZWNp
ZGVQb2xpY3lGb3JOb3RpZmljYXRpb25QZXJtaXNzaW9uUmVxdWVzdAotICAgICAgICAwLCAvLyB1
bmF2YWlsYWJsZVBsdWdpbkJ1dHRvbkNsaWNrZWQKLSAgICAgICAgMCwgLy8gc2hvd0NvbG9yUGlj
a2VyCi0gICAgICAgIDAsIC8vIGhpZGVDb2xvclBpY2tlcgotICAgICAgICAwLCAvLyBwbHVnaW5M
b2FkUG9saWN5Ci0gICAgfTsKLSAgICBXS1BhZ2VSZWYgd2tQYWdlID0gdG9BUEkod2Via2l0V2Vi
Vmlld0Jhc2VHZXRQYWdlKFdFQktJVF9XRUJfVklFV19CQVNFKHdlYlZpZXcpKSk7Ci0gICAgV0tQ
YWdlU2V0UGFnZVVJQ2xpZW50KHdrUGFnZSwgJndrVUlDbGllbnQuYmFzZSk7CisgICAgV2ViUGFn
ZVByb3h5KiBwYWdlID0gd2Via2l0V2ViVmlld0Jhc2VHZXRQYWdlKFdFQktJVF9XRUJfVklFV19C
QVNFKHdlYlZpZXcpKTsKKyAgICBwYWdlLT5zZXRVSUNsaWVudChzdGQ6Om1ha2VfdW5pcXVlPFVJ
Q2xpZW50Pih3ZWJWaWV3KSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvV2ViS2l0V2ViVmlldy5jcHAKaW5kZXggNGY4OGEwYi4uMGY4NTVlNSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5jcHAK
KysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5jcHAK
QEAgLTIxNyw5ICsyMTcsOSBAQCBzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0V2ViVmlld0xvYWRGYWls
KFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIFdlYktpdExvYWRFdmVudCwgYwogICAgIHJldHVybiBU
UlVFOwogfQogCi1zdGF0aWMgR3RrV2lkZ2V0KiB3ZWJraXRXZWJWaWV3Q3JlYXRlKFdlYktpdFdl
YlZpZXcqKQorc3RhdGljIEd0a1dpZGdldCogd2Via2l0V2ViVmlld0NyZWF0ZShXZWJLaXRXZWJW
aWV3KiwgV2ViS2l0TmF2aWdhdGlvbkFjdGlvbiopCiB7Ci0gICAgcmV0dXJuIDA7CisgICAgcmV0
dXJuIG51bGxwdHI7CiB9CiAKIHN0YXRpYyBHdGtXaWRnZXQqIHdlYmtpdFdlYlZpZXdDcmVhdGVK
YXZhU2NyaXB0RGlhbG9nKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIEd0a01lc3NhZ2VUeXBlIHR5
cGUsIEd0a0J1dHRvbnNUeXBlIGJ1dHRvbnMsIGludCBkZWZhdWx0UmVzcG9uc2UsIGNvbnN0IGNo
YXIqIG1lc3NhZ2UpCkBAIC04ODksMTQgKzg4OSwxOCBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfd2Vi
X3ZpZXdfY2xhc3NfaW5pdChXZWJLaXRXZWJWaWV3Q2xhc3MqIHdlYlZpZXdDbGFzcykKICAgICAv
KioKICAgICAgKiBXZWJLaXRXZWJWaWV3OjpjcmVhdGU6CiAgICAgICogQHdlYl92aWV3OiB0aGUg
I1dlYktpdFdlYlZpZXcgb24gd2hpY2ggdGhlIHNpZ25hbCBpcyBlbWl0dGVkCisgICAgICogQG5h
dmlnYXRpb25fYWN0aW9uOiBhICNXZWJLaXROYXZpZ2F0aW9uQWN0aW9uCiAgICAgICoKICAgICAg
KiBFbWl0dGVkIHdoZW4gdGhlIGNyZWF0aW9uIG9mIGEgbmV3ICNXZWJLaXRXZWJWaWV3IGlzIHJl
cXVlc3RlZC4KICAgICAgKiBJZiB0aGlzIHNpZ25hbCBpcyBoYW5kbGVkIHRoZSBzaWduYWwgaGFu
ZGxlciBzaG91bGQgcmV0dXJuIHRoZQogICAgICAqIG5ld2x5IGNyZWF0ZWQgI1dlYktpdFdlYlZp
ZXcuCiAgICAgICoKKyAgICAgKiBUaGUgI1dlYktpdE5hdmlnYXRpb25BY3Rpb24gcGFyYW1ldGVy
IGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IHRoZQorICAgICAqIG5hdmlnYXRpb24gYWN0aW9u
IHRoYXQgdHJpZ2dlcmVkIHRoaXMgc2lnbmFsLgorICAgICAqCiAgICAgICogV2hlbiB1c2luZyAl
V0VCS0lUX1BST0NFU1NfTU9ERUxfTVVMVElQTEVfU0VDT05EQVJZX1BST0NFU1NFUwogICAgICAq
IHByb2Nlc3MgbW9kZWwsIHRoZSBuZXcgI1dlYktpdFdlYlZpZXcgc2hvdWxkIGJlIHJlbGF0ZWQg
dG8KLSAgICAgKiBAd2ViX3ZpZXcgdG8gc2hhcmUgdGhlIHNhbWUgd2ViIHByb2Nlc3MsIHNlZSB3
ZWJraXRfd2ViX3ZpZXdfbmV3X3dpdGhfcmVsYXRlZF92aWV3CisgICAgICogQHdlYl92aWV3IHRv
IHNoYXJlIHRoZSBzYW1lIHdlYiBwcm9jZXNzLCBzZWUgd2Via2l0X3dlYl92aWV3X25ld193aXRo
X3JlbGF0ZWRfdmlldygpCiAgICAgICogZm9yIG1vcmUgZGV0YWlscy4KICAgICAgKgogICAgICAq
IFRoZSBuZXcgI1dlYktpdFdlYlZpZXcgc2hvdWxkIG5vdCBiZSBkaXNwbGF5ZWQgdG8gdGhlIHVz
ZXIKQEAgLTkwNSwxNCArOTA5LDE1IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJfdmlld19jbGFz
c19pbml0KFdlYktpdFdlYlZpZXdDbGFzcyogd2ViVmlld0NsYXNzKQogICAgICAqIFJldHVybnM6
ICh0cmFuc2ZlciBmdWxsKTogYSBuZXdseSBhbGxvY2F0ZWQgI1dlYktpdFdlYlZpZXcgd2lkZ2V0
CiAgICAgICogICAgb3IgJU5VTEwgdG8gcHJvcGFnYXRlIHRoZSBldmVudCBmdXJ0aGVyLgogICAg
ICAqLwotICAgIHNpZ25hbHNbQ1JFQVRFXSA9Ci0gICAgICAgIGdfc2lnbmFsX25ldygiY3JlYXRl
IiwKLSAgICAgICAgICAgICAgICAgICAgIEdfVFlQRV9GUk9NX0NMQVNTKHdlYlZpZXdDbGFzcyks
Ci0gICAgICAgICAgICAgICAgICAgICBHX1NJR05BTF9SVU5fTEFTVCwKLSAgICAgICAgICAgICAg
ICAgICAgIEdfU1RSVUNUX09GRlNFVChXZWJLaXRXZWJWaWV3Q2xhc3MsIGNyZWF0ZSksCi0gICAg
ICAgICAgICAgICAgICAgICB3ZWJraXRXZWJWaWV3QWNjdW11bGF0b3JPYmplY3RIYW5kbGVkLCAw
LAotICAgICAgICAgICAgICAgICAgICAgd2Via2l0X21hcnNoYWxfT0JKRUNUX19WT0lELAotICAg
ICAgICAgICAgICAgICAgICAgR1RLX1RZUEVfV0lER0VULCAwKTsKKyAgICBzaWduYWxzW0NSRUFU
RV0gPSBnX3NpZ25hbF9uZXcoCisgICAgICAgICJjcmVhdGUiLAorICAgICAgICBHX1RZUEVfRlJP
TV9DTEFTUyh3ZWJWaWV3Q2xhc3MpLAorICAgICAgICBHX1NJR05BTF9SVU5fTEFTVCwKKyAgICAg
ICAgR19TVFJVQ1RfT0ZGU0VUKFdlYktpdFdlYlZpZXdDbGFzcywgY3JlYXRlKSwKKyAgICAgICAg
d2Via2l0V2ViVmlld0FjY3VtdWxhdG9yT2JqZWN0SGFuZGxlZCwgMCwKKyAgICAgICAgZ19jY2xv
c3VyZV9tYXJzaGFsX2dlbmVyaWMsCisgICAgICAgIEdUS19UWVBFX1dJREdFVCwgMSwKKyAgICAg
ICAgV0VCS0lUX1RZUEVfTkFWSUdBVElPTl9BQ1RJT04gfCBHX1NJR05BTF9UWVBFX1NUQVRJQ19T
Q09QRSk7CiAKICAgICAvKioKICAgICAgKiBXZWJLaXRXZWJWaWV3OjpyZWFkeS10by1zaG93OgpA
QCAtMTYwMSwxMCArMTYwNiwxMCBAQCB2b2lkIHdlYmtpdFdlYlZpZXdVcGRhdGVVUkkoV2ViS2l0
V2ViVmlldyogd2ViVmlldykKICAgICBnX29iamVjdF9ub3RpZnkoR19PQkpFQ1Qod2ViVmlldyks
ICJ1cmkiKTsKIH0KIAotV2ViUGFnZVByb3h5KiB3ZWJraXRXZWJWaWV3Q3JlYXRlTmV3UGFnZShX
ZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBJbW11dGFibGVEaWN0aW9uYXJ5KiB3aW5kb3dGZWF0dXJl
cykKK1dlYlBhZ2VQcm94eSogd2Via2l0V2ViVmlld0NyZWF0ZU5ld1BhZ2UoV2ViS2l0V2ViVmll
dyogd2ViVmlldywgY29uc3QgV2luZG93RmVhdHVyZXMmIHdpbmRvd0ZlYXR1cmVzLCBXZWJLaXRO
YXZpZ2F0aW9uQWN0aW9uKiBuYXZpZ2F0aW9uQWN0aW9uKQogewogICAgIFdlYktpdFdlYlZpZXcq
IG5ld1dlYlZpZXc7Ci0gICAgZ19zaWduYWxfZW1pdCh3ZWJWaWV3LCBzaWduYWxzW0NSRUFURV0s
IDAsICZuZXdXZWJWaWV3KTsKKyAgICBnX3NpZ25hbF9lbWl0KHdlYlZpZXcsIHNpZ25hbHNbQ1JF
QVRFXSwgMCwgbmF2aWdhdGlvbkFjdGlvbiwgJm5ld1dlYlZpZXcpOwogICAgIGlmICghbmV3V2Vi
VmlldykKICAgICAgICAgcmV0dXJuIDA7CiAKQEAgLTE2NzQsOSArMTY3OSw5IEBAIHZvaWQgd2Vi
a2l0V2ViVmlld01ha2VQZXJtaXNzaW9uUmVxdWVzdChXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBX
ZWJLaXRQZXJtaXNzaW9uCiAgICAgZ19zaWduYWxfZW1pdCh3ZWJWaWV3LCBzaWduYWxzW1BFUk1J
U1NJT05fUkVRVUVTVF0sIDAsIHJlcXVlc3QsICZyZXR1cm5WYWx1ZSk7CiB9CiAKLXZvaWQgd2Vi
a2l0V2ViVmlld01vdXNlVGFyZ2V0Q2hhbmdlZChXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBXZWJI
aXRUZXN0UmVzdWx0KiBoaXRUZXN0UmVzdWx0LCB1bnNpZ25lZCBtb2RpZmllcnMpCit2b2lkIHdl
YmtpdFdlYlZpZXdNb3VzZVRhcmdldENoYW5nZWQoV2ViS2l0V2ViVmlldyogd2ViVmlldywgY29u
c3QgV2ViSGl0VGVzdFJlc3VsdDo6RGF0YSYgaGl0VGVzdFJlc3VsdCwgdW5zaWduZWQgbW9kaWZp
ZXJzKQogewotICAgIHdlYmtpdFdlYlZpZXdCYXNlU2V0VG9vbHRpcEFyZWEoV0VCS0lUX1dFQl9W
SUVXX0JBU0Uod2ViVmlldyksIGhpdFRlc3RSZXN1bHQtPmVsZW1lbnRCb3VuZGluZ0JveCgpKTsK
KyAgICB3ZWJraXRXZWJWaWV3QmFzZVNldFRvb2x0aXBBcmVhKFdFQktJVF9XRUJfVklFV19CQVNF
KHdlYlZpZXcpLCBoaXRUZXN0UmVzdWx0LmVsZW1lbnRCb3VuZGluZ0JveCk7CiAKICAgICBXZWJL
aXRXZWJWaWV3UHJpdmF0ZSogcHJpdiA9IHdlYlZpZXctPnByaXY7CiAgICAgaWYgKHByaXYtPm1v
dXNlVGFyZ2V0SGl0VGVzdFJlc3VsdApAQCAtMTgyOCw3ICsxODMzLDE5IEBAIHZvaWQgd2Via2l0
V2ViVmlld1BvcHVsYXRlQ29udGV4dE1lbnUoV2ViS2l0V2ViVmlldyogd2ViVmlldywgQVBJOjpB
cnJheSogcHJvcG9zCiAgICAgaWYgKHdlYkhpdFRlc3RSZXN1bHQtPmlzQ29udGVudEVkaXRhYmxl
KCkpCiAgICAgICAgIHdlYmtpdFdlYlZpZXdDcmVhdGVBbmRBcHBlbmRJbnB1dE1ldGhvZHNNZW51
SXRlbSh3ZWJWaWV3LCBjb250ZXh0TWVudS5nZXQoKSk7CiAKLSAgICBHUmVmUHRyPFdlYktpdEhp
dFRlc3RSZXN1bHQ+IGhpdFRlc3RSZXN1bHQgPSBhZG9wdEdSZWYod2Via2l0SGl0VGVzdFJlc3Vs
dENyZWF0ZSh3ZWJIaXRUZXN0UmVzdWx0KSk7CisgICAgLy8gRklYTUU6IHdlIHNob3VsZCB1c2Ug
YSBjdXN0b20gQ29udGV4dE1lbnVDbGllbnQgYXQgc29tZSBwb2ludCwgdGhhdCB3aWxsIHJlY2Vp
dmUgYQorICAgIC8vIGNvbnN0IFdlYkhpdFRlc3RSZXN1bHQ6OkRhdGEmIHRoYXQgd2UgY2FuIHVz
ZSBkaXJlY3RseSBoZXJlLgorICAgIFdlYkhpdFRlc3RSZXN1bHQ6OkRhdGEgZGF0YTsKKyAgICBk
YXRhLmFic29sdXRlSW1hZ2VVUkwgPSB3ZWJIaXRUZXN0UmVzdWx0LT5hYnNvbHV0ZUltYWdlVVJM
KCk7CisgICAgZGF0YS5hYnNvbHV0ZUxpbmtVUkwgPSB3ZWJIaXRUZXN0UmVzdWx0LT5hYnNvbHV0
ZUxpbmtVUkwoKTsKKyAgICBkYXRhLmFic29sdXRlTWVkaWFVUkwgPSB3ZWJIaXRUZXN0UmVzdWx0
LT5hYnNvbHV0ZU1lZGlhVVJMKCk7CisgICAgZGF0YS5saW5rTGFiZWwgPSB3ZWJIaXRUZXN0UmVz
dWx0LT5saW5rTGFiZWwoKTsKKyAgICBkYXRhLmxpbmtUaXRsZSA9IHdlYkhpdFRlc3RSZXN1bHQt
PmxpbmtUaXRsZSgpOworICAgIGRhdGEuaXNDb250ZW50RWRpdGFibGUgPSB3ZWJIaXRUZXN0UmVz
dWx0LT5pc0NvbnRlbnRFZGl0YWJsZSgpOworICAgIGRhdGEuZWxlbWVudEJvdW5kaW5nQm94ID0g
d2ViSGl0VGVzdFJlc3VsdC0+ZWxlbWVudEJvdW5kaW5nQm94KCk7CisgICAgZGF0YS5pc1Njcm9s
bGJhciA9IHdlYkhpdFRlc3RSZXN1bHQtPmlzU2Nyb2xsYmFyKCk7CisKKyAgICBHUmVmUHRyPFdl
YktpdEhpdFRlc3RSZXN1bHQ+IGhpdFRlc3RSZXN1bHQgPSBhZG9wdEdSZWYod2Via2l0SGl0VGVz
dFJlc3VsdENyZWF0ZShkYXRhKSk7CiAgICAgR1VuaXF1ZVB0cjxHZGtFdmVudD4gY29udGV4dE1l
bnVFdmVudCh3ZWJraXRXZWJWaWV3QmFzZVRha2VDb250ZXh0TWVudUV2ZW50KHdlYlZpZXdCYXNl
KSk7CiAKICAgICBnYm9vbGVhbiByZXR1cm5WYWx1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuaCBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuaAppbmRleCA5ODBmNDU4Li41NDlkMjU0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3
LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5o
CkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRGb3J3YXJkRGVjbGFy
YXRpb25zLmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRIaXRUZXN0UmVzdWx0Lmg+CiAjaW5j
bHVkZSA8d2Via2l0Mi9XZWJLaXRKYXZhc2NyaXB0UmVzdWx0Lmg+CisjaW5jbHVkZSA8d2Via2l0
Mi9XZWJLaXROYXZpZ2F0aW9uQWN0aW9uLmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRQZXJt
aXNzaW9uUmVxdWVzdC5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0UG9saWN5RGVjaXNpb24u
aD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdFNjcmlwdERpYWxvZy5oPgpAQCAtMTk0LDcgKzE5
NSw4IEBAIHN0cnVjdCBfV2ViS2l0V2ViVmlld0NsYXNzIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAgICAgICAgICAgICAgICAq
ZmFpbGluZ191cmksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBHRXJyb3IgICAgICAgICAgICAgICAgICAgICAgKmVycm9yKTsKIAotICAgIEd0a1dpZGdl
dCAqKCogY3JlYXRlKSAgICAgICAgICAgICAgICAgICAgICAoV2ViS2l0V2ViVmlldyAgICAgICAg
ICAgICAgICp3ZWJfdmlldyk7CisgICAgR3RrV2lkZ2V0ICooKiBjcmVhdGUpICAgICAgICAgICAg
ICAgICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAgICAgICAgKndlYl92aWV3LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViS2l0TmF2aWdhdGlv
bkFjdGlvbiAgICAgICpuYXZpZ2F0aW9uX2FjdGlvbik7CiAgICAgdm9pZCAgICAgICAoKiByZWFk
eV90b19zaG93KSAgICAgICAgICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAgICAgICAgKndl
Yl92aWV3KTsKICAgICB2b2lkICAgICAgICgqIHJ1bl9hc19tb2RhbCkgICAgICAgICAgICAgICAg
KFdlYktpdFdlYlZpZXcgICAgICAgICAgICAgICAqd2ViX3ZpZXcpOwogICAgIHZvaWQgICAgICAg
KCogY2xvc2UpICAgICAgICAgICAgICAgICAgICAgICAoV2ViS2l0V2ViVmlldyAgICAgICAgICAg
ICAgICp3ZWJfdmlldyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay9XZWJLaXRXZWJWaWV3UHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0V2ViVmlld1ByaXZhdGUuaAppbmRleCAxMTU5MWZmLi41ZjY5NDFjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3UHJp
dmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZp
ZXdQcml2YXRlLmgKQEAgLTI3LDYgKzI3LDcgQEAKICNpZm5kZWYgV2ViS2l0V2ViVmlld1ByaXZh
dGVfaAogI2RlZmluZSBXZWJLaXRXZWJWaWV3UHJpdmF0ZV9oCiAKKyNpbmNsdWRlICJXZWJIaXRU
ZXN0UmVzdWx0LmgiCiAjaW5jbHVkZSAiV2ViSW1hZ2UuaCIKICNpbmNsdWRlICJXZWJLaXRXZWJW
aWV3LmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgpAQCAtMzcsNyArMzgsNyBAQCB2
b2lkIHdlYmtpdFdlYlZpZXdMb2FkRmFpbGVkV2l0aFRMU0Vycm9ycyhXZWJLaXRXZWJWaWV3Kiwg
Y29uc3QgY2hhciogZmFpbGluZ1VSSQogdm9pZCB3ZWJraXRXZWJWaWV3U2V0RXN0aW1hdGVkTG9h
ZFByb2dyZXNzKFdlYktpdFdlYlZpZXcqLCBkb3VibGUgZXN0aW1hdGVkTG9hZFByb2dyZXNzKTsK
IHZvaWQgd2Via2l0V2ViVmlld1NldFRpdGxlKFdlYktpdFdlYlZpZXcqLCBjb25zdCBDU3RyaW5n
Jik7CiB2b2lkIHdlYmtpdFdlYlZpZXdVcGRhdGVVUkkoV2ViS2l0V2ViVmlldyopOwotV2ViS2l0
OjpXZWJQYWdlUHJveHkqIHdlYmtpdFdlYlZpZXdDcmVhdGVOZXdQYWdlKFdlYktpdFdlYlZpZXcq
LCBXZWJLaXQ6OkltbXV0YWJsZURpY3Rpb25hcnkqIHdpbmRvd0ZlYXR1cmVzKTsKK1dlYktpdDo6
V2ViUGFnZVByb3h5KiB3ZWJraXRXZWJWaWV3Q3JlYXRlTmV3UGFnZShXZWJLaXRXZWJWaWV3Kiwg
Y29uc3QgV2ViQ29yZTo6V2luZG93RmVhdHVyZXMmLCBXZWJLaXROYXZpZ2F0aW9uQWN0aW9uKik7
CiB2b2lkIHdlYmtpdFdlYlZpZXdSZWFkeVRvU2hvd1BhZ2UoV2ViS2l0V2ViVmlldyopOwogdm9p
ZCB3ZWJraXRXZWJWaWV3UnVuQXNNb2RhbChXZWJLaXRXZWJWaWV3Kik7CiB2b2lkIHdlYmtpdFdl
YlZpZXdDbG9zZVBhZ2UoV2ViS2l0V2ViVmlldyopOwpAQCAtNDYsNyArNDcsNyBAQCBib29sIHdl
YmtpdFdlYlZpZXdSdW5KYXZhU2NyaXB0Q29uZmlybShXZWJLaXRXZWJWaWV3KiwgY29uc3QgQ1N0
cmluZyYgbWVzc2FnZSk7CiBDU3RyaW5nIHdlYmtpdFdlYlZpZXdSdW5KYXZhU2NyaXB0UHJvbXB0
KFdlYktpdFdlYlZpZXcqLCBjb25zdCBDU3RyaW5nJiBtZXNzYWdlLCBjb25zdCBDU3RyaW5nJiBk
ZWZhdWx0VGV4dCk7CiB2b2lkIHdlYmtpdFdlYlZpZXdNYWtlUGVybWlzc2lvblJlcXVlc3QoV2Vi
S2l0V2ViVmlldyosIFdlYktpdFBlcm1pc3Npb25SZXF1ZXN0Kik7CiB2b2lkIHdlYmtpdFdlYlZp
ZXdNYWtlUG9saWN5RGVjaXNpb24oV2ViS2l0V2ViVmlldyosIFdlYktpdFBvbGljeURlY2lzaW9u
VHlwZSwgV2ViS2l0UG9saWN5RGVjaXNpb24qKTsKLXZvaWQgd2Via2l0V2ViVmlld01vdXNlVGFy
Z2V0Q2hhbmdlZChXZWJLaXRXZWJWaWV3KiwgV2ViS2l0OjpXZWJIaXRUZXN0UmVzdWx0KiwgdW5z
aWduZWQgbW9kaWZpZXJzKTsKK3ZvaWQgd2Via2l0V2ViVmlld01vdXNlVGFyZ2V0Q2hhbmdlZChX
ZWJLaXRXZWJWaWV3KiwgY29uc3QgV2ViS2l0OjpXZWJIaXRUZXN0UmVzdWx0OjpEYXRhJiwgdW5z
aWduZWQgbW9kaWZpZXJzKTsKIHZvaWQgd2Via2l0V2ViVmlld1ByaW50RnJhbWUoV2ViS2l0V2Vi
VmlldyosIFdlYktpdDo6V2ViRnJhbWVQcm94eSopOwogdm9pZCB3ZWJraXRXZWJWaWV3UmVzb3Vy
Y2VMb2FkU3RhcnRlZChXZWJLaXRXZWJWaWV3KiwgV2ViS2l0OjpXZWJGcmFtZVByb3h5KiwgdWlu
dDY0X3QgcmVzb3VyY2VJZGVudGlmaWVyLCBXZWJLaXRVUklSZXF1ZXN0Kik7CiB2b2lkIHdlYmtp
dFdlYlZpZXdSdW5GaWxlQ2hvb3NlclJlcXVlc3QoV2ViS2l0V2ViVmlldyosIFdlYktpdEZpbGVD
aG9vc2VyUmVxdWVzdCopOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0V2luZG93UHJvcGVydGllcy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay9XZWJLaXRXaW5kb3dQcm9wZXJ0aWVzLmNwcAppbmRleCBhNDBlNmRiLi5iYWM4
OGI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRX
aW5kb3dQcm9wZXJ0aWVzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXRXaW5kb3dQcm9wZXJ0aWVzLmNwcApAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUg
IldlYktpdFByaXZhdGUuaCIKICNpbmNsdWRlICJXZWJLaXRXaW5kb3dQcm9wZXJ0aWVzUHJpdmF0
ZS5oIgogI2luY2x1ZGUgPFdlYkNvcmUvSW50UmVjdC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvV2lu
ZG93RmVhdHVyZXMuaD4KICNpbmNsdWRlIDxnbGliL2dpMThuLWxpYi5oPgogCiB1c2luZyBuYW1l
c3BhY2UgV2ViS2l0OwpAQCAtMzc0LDU0ICszNzUsMjYgQEAgdm9pZCB3ZWJraXRXaW5kb3dQcm9w
ZXJ0aWVzU2V0RnVsbHNjcmVlbihXZWJLaXRXaW5kb3dQcm9wZXJ0aWVzKiB3aW5kb3dQcm9wZXJ0
aWUKICAgICBnX29iamVjdF9ub3RpZnkoR19PQkpFQ1Qod2luZG93UHJvcGVydGllcyksICJmdWxs
c2NyZWVuIik7CiB9CiAKLXZvaWQgd2Via2l0V2luZG93UHJvcGVydGllc1VwZGF0ZUZyb21XZWJX
aW5kb3dGZWF0dXJlcyhXZWJLaXRXaW5kb3dQcm9wZXJ0aWVzKiB3aW5kb3dQcm9wZXJ0aWVzLCBJ
bW11dGFibGVEaWN0aW9uYXJ5KiBmZWF0dXJlcykKK3ZvaWQgd2Via2l0V2luZG93UHJvcGVydGll
c1VwZGF0ZUZyb21XZWJXaW5kb3dGZWF0dXJlcyhXZWJLaXRXaW5kb3dQcm9wZXJ0aWVzKiB3aW5k
b3dQcm9wZXJ0aWVzLCBjb25zdCBXaW5kb3dGZWF0dXJlcyYgd2luZG93RmVhdHVyZXMpCiB7CiAg
ICAgR2RrUmVjdGFuZ2xlIGdlb21ldHJ5ID0gd2luZG93UHJvcGVydGllcy0+cHJpdi0+Z2VvbWV0
cnk7Ci0KLSAgICBBUEk6OkRvdWJsZSogZG91YmxlVmFsdWUgPSBzdGF0aWNfY2FzdDxBUEk6OkRv
dWJsZSo+KGZlYXR1cmVzLT5nZXQoIngiKSk7Ci0gICAgaWYgKGRvdWJsZVZhbHVlKQotICAgICAg
ICBnZW9tZXRyeS54ID0gZG91YmxlVmFsdWUtPnZhbHVlKCk7Ci0KLSAgICBkb3VibGVWYWx1ZSA9
IHN0YXRpY19jYXN0PEFQSTo6RG91YmxlKj4oZmVhdHVyZXMtPmdldCgieSIpKTsKLSAgICBpZiAo
ZG91YmxlVmFsdWUpCi0gICAgICAgIGdlb21ldHJ5LnkgPSBkb3VibGVWYWx1ZS0+dmFsdWUoKTsK
LQotICAgIGRvdWJsZVZhbHVlID0gc3RhdGljX2Nhc3Q8QVBJOjpEb3VibGUqPihmZWF0dXJlcy0+
Z2V0KCJ3aWR0aCIpKTsKLSAgICBpZiAoZG91YmxlVmFsdWUpCi0gICAgICAgIGdlb21ldHJ5Lndp
ZHRoID0gZG91YmxlVmFsdWUtPnZhbHVlKCk7Ci0KLSAgICBkb3VibGVWYWx1ZSA9IHN0YXRpY19j
YXN0PEFQSTo6RG91YmxlKj4oZmVhdHVyZXMtPmdldCgiaGVpZ2h0IikpOwotICAgIGlmIChkb3Vi
bGVWYWx1ZSkKLSAgICAgICAgZ2VvbWV0cnkuaGVpZ2h0ID0gZG91YmxlVmFsdWUtPnZhbHVlKCk7
CisgICAgaWYgKHdpbmRvd0ZlYXR1cmVzLnhTZXQpCisgICAgICAgIGdlb21ldHJ5LnggPSB3aW5k
b3dGZWF0dXJlcy54OworICAgIGlmICh3aW5kb3dGZWF0dXJlcy55U2V0KQorICAgICAgICBnZW9t
ZXRyeS55ID0gd2luZG93RmVhdHVyZXMueTsKKyAgICBpZiAod2luZG93RmVhdHVyZXMud2lkdGhT
ZXQpCisgICAgICAgIGdlb21ldHJ5LndpZHRoID0gd2luZG93RmVhdHVyZXMud2lkdGg7CisgICAg
aWYgKHdpbmRvd0ZlYXR1cmVzLmhlaWdodFNldCkKKyAgICAgICAgZ2VvbWV0cnkuaGVpZ2h0ID0g
d2luZG93RmVhdHVyZXMuaGVpZ2h0OwogICAgIHdlYmtpdFdpbmRvd1Byb3BlcnRpZXNTZXRHZW9t
ZXRyeSh3aW5kb3dQcm9wZXJ0aWVzLCAmZ2VvbWV0cnkpOwogCi0gICAgQVBJOjpCb29sZWFuKiBi
b29sZWFuVmFsdWUgPSBzdGF0aWNfY2FzdDxBUEk6OkJvb2xlYW4qPihmZWF0dXJlcy0+Z2V0KCJt
ZW51QmFyVmlzaWJsZSIpKTsKLSAgICBpZiAoYm9vbGVhblZhbHVlKQotICAgICAgICB3ZWJraXRX
aW5kb3dQcm9wZXJ0aWVzU2V0TWVudWJhclZpc2libGUod2luZG93UHJvcGVydGllcywgYm9vbGVh
blZhbHVlLT52YWx1ZSgpKTsKLQotICAgIGJvb2xlYW5WYWx1ZSA9IHN0YXRpY19jYXN0PEFQSTo6
Qm9vbGVhbio+KGZlYXR1cmVzLT5nZXQoInN0YXR1c0JhclZpc2libGUiKSk7Ci0gICAgaWYgKGJv
b2xlYW5WYWx1ZSkKLSAgICAgICAgd2Via2l0V2luZG93UHJvcGVydGllc1NldFN0YXR1c2JhclZp
c2libGUod2luZG93UHJvcGVydGllcywgYm9vbGVhblZhbHVlLT52YWx1ZSgpKTsKLQotICAgIGJv
b2xlYW5WYWx1ZSA9IHN0YXRpY19jYXN0PEFQSTo6Qm9vbGVhbio+KGZlYXR1cmVzLT5nZXQoInRv
b2xCYXJWaXNpYmxlIikpOwotICAgIGlmIChib29sZWFuVmFsdWUpCi0gICAgICAgIHdlYmtpdFdp
bmRvd1Byb3BlcnRpZXNTZXRUb29sYmFyVmlzaWJsZSh3aW5kb3dQcm9wZXJ0aWVzLCBib29sZWFu
VmFsdWUtPnZhbHVlKCkpOwotCi0gICAgYm9vbGVhblZhbHVlID0gc3RhdGljX2Nhc3Q8QVBJOjpC
b29sZWFuKj4oZmVhdHVyZXMtPmdldCgibG9jYXRpb25CYXJWaXNpYmxlIikpOwotICAgIGlmIChi
b29sZWFuVmFsdWUpCi0gICAgICAgIHdlYmtpdFdpbmRvd1Byb3BlcnRpZXNTZXRMb2NhdGlvbmJh
clZpc2libGUod2luZG93UHJvcGVydGllcywgYm9vbGVhblZhbHVlLT52YWx1ZSgpKTsKLQotICAg
IGJvb2xlYW5WYWx1ZSA9IHN0YXRpY19jYXN0PEFQSTo6Qm9vbGVhbio+KGZlYXR1cmVzLT5nZXQo
InNjcm9sbGJhcnNWaXNpYmxlIikpOwotICAgIGlmIChib29sZWFuVmFsdWUpCi0gICAgICAgIHdl
YmtpdFdpbmRvd1Byb3BlcnRpZXNTZXRTY3JvbGxiYXJzVmlzaWJsZSh3aW5kb3dQcm9wZXJ0aWVz
LCBib29sZWFuVmFsdWUtPnZhbHVlKCkpOwotCi0gICAgYm9vbGVhblZhbHVlID0gc3RhdGljX2Nh
c3Q8QVBJOjpCb29sZWFuKj4oZmVhdHVyZXMtPmdldCgicmVzaXphYmxlIikpOwotICAgIGlmIChi
b29sZWFuVmFsdWUpCi0gICAgICAgIHdlYmtpdFdpbmRvd1Byb3BlcnRpZXNTZXRSZXNpemFibGUo
d2luZG93UHJvcGVydGllcywgYm9vbGVhblZhbHVlLT52YWx1ZSgpKTsKLQotICAgIGJvb2xlYW5W
YWx1ZSA9IHN0YXRpY19jYXN0PEFQSTo6Qm9vbGVhbio+KGZlYXR1cmVzLT5nZXQoImZ1bGxzY3Jl
ZW4iKSk7Ci0gICAgaWYgKGJvb2xlYW5WYWx1ZSkKLSAgICAgICAgd2Via2l0V2luZG93UHJvcGVy
dGllc1NldEZ1bGxzY3JlZW4od2luZG93UHJvcGVydGllcywgYm9vbGVhblZhbHVlLT52YWx1ZSgp
KTsKKyAgICB3ZWJraXRXaW5kb3dQcm9wZXJ0aWVzU2V0TWVudWJhclZpc2libGUod2luZG93UHJv
cGVydGllcywgd2luZG93RmVhdHVyZXMubWVudUJhclZpc2libGUpOworICAgIHdlYmtpdFdpbmRv
d1Byb3BlcnRpZXNTZXRTdGF0dXNiYXJWaXNpYmxlKHdpbmRvd1Byb3BlcnRpZXMsIHdpbmRvd0Zl
YXR1cmVzLnN0YXR1c0JhclZpc2libGUpOworICAgIHdlYmtpdFdpbmRvd1Byb3BlcnRpZXNTZXRU
b29sYmFyVmlzaWJsZSh3aW5kb3dQcm9wZXJ0aWVzLCB3aW5kb3dGZWF0dXJlcy50b29sQmFyVmlz
aWJsZSk7CisgICAgd2Via2l0V2luZG93UHJvcGVydGllc1NldExvY2F0aW9uYmFyVmlzaWJsZSh3
aW5kb3dQcm9wZXJ0aWVzLCB3aW5kb3dGZWF0dXJlcy5sb2NhdGlvbkJhclZpc2libGUpOworICAg
IHdlYmtpdFdpbmRvd1Byb3BlcnRpZXNTZXRTY3JvbGxiYXJzVmlzaWJsZSh3aW5kb3dQcm9wZXJ0
aWVzLCB3aW5kb3dGZWF0dXJlcy5zY3JvbGxiYXJzVmlzaWJsZSk7CisgICAgd2Via2l0V2luZG93
UHJvcGVydGllc1NldFJlc2l6YWJsZSh3aW5kb3dQcm9wZXJ0aWVzLCB3aW5kb3dGZWF0dXJlcy5y
ZXNpemFibGUpOworICAgIHdlYmtpdFdpbmRvd1Byb3BlcnRpZXNTZXRGdWxsc2NyZWVuKHdpbmRv
d1Byb3BlcnRpZXMsIHdpbmRvd0ZlYXR1cmVzLmZ1bGxzY3JlZW4pOwogfQogCiAvKioKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdpbmRvd1Byb3Bl
cnRpZXNQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRX
aW5kb3dQcm9wZXJ0aWVzUHJpdmF0ZS5oCmluZGV4IDhlYzE3YjQuLjA1ZTRiOWIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdpbmRvd1Byb3BlcnRp
ZXNQcml2YXRlLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0
V2luZG93UHJvcGVydGllc1ByaXZhdGUuaApAQCAtMzEsNyArMzEsNyBAQAogI2luY2x1ZGUgIldl
YktpdFdpbmRvd1Byb3BlcnRpZXMuaCIKIAogV2ViS2l0V2luZG93UHJvcGVydGllcyogd2Via2l0
V2luZG93UHJvcGVydGllc0NyZWF0ZSgpOwotdm9pZCB3ZWJraXRXaW5kb3dQcm9wZXJ0aWVzVXBk
YXRlRnJvbVdlYldpbmRvd0ZlYXR1cmVzKFdlYktpdFdpbmRvd1Byb3BlcnRpZXMqLCBXZWJLaXQ6
OkltbXV0YWJsZURpY3Rpb25hcnkqIGZlYXR1cmVzKTsKK3ZvaWQgd2Via2l0V2luZG93UHJvcGVy
dGllc1VwZGF0ZUZyb21XZWJXaW5kb3dGZWF0dXJlcyhXZWJLaXRXaW5kb3dQcm9wZXJ0aWVzKiwg
Y29uc3QgV2ViQ29yZTo6V2luZG93RmVhdHVyZXMmKTsKIHZvaWQgd2Via2l0V2luZG93UHJvcGVy
dGllc1NldEdlb21ldHJ5KFdlYktpdFdpbmRvd1Byb3BlcnRpZXMqLCBHZGtSZWN0YW5nbGUqKTsK
IHZvaWQgd2Via2l0V2luZG93UHJvcGVydGllc1NldFRvb2xiYXJWaXNpYmxlKFdlYktpdFdpbmRv
d1Byb3BlcnRpZXMqLCBib29sIHRvb2xiYXJzVmlzaWJsZSk7CiB2b2lkIHdlYmtpdFdpbmRvd1By
b3BlcnRpZXNTZXRNZW51YmFyVmlzaWJsZShXZWJLaXRXaW5kb3dQcm9wZXJ0aWVzKiwgYm9vbCBt
ZW51QmFyVmlzaWJsZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay9kb2NzL3dlYmtpdDJndGstZG9jcy5zZ21sIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLWRvY3Muc2dtbAppbmRleCBlM2NmOWE2Li4xYjcxNTY1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtp
dDJndGstZG9jcy5zZ21sCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2Rv
Y3Mvd2Via2l0Mmd0ay1kb2NzLnNnbWwKQEAgLTIzLDYgKzIzLDcgQEAKICAgICA8eGk6aW5jbHVk
ZSBocmVmPSJ4bWwvV2ViS2l0RG93bmxvYWQueG1sIi8+CiAgICAgPHhpOmluY2x1ZGUgaHJlZj0i
eG1sL1dlYktpdFBlcm1pc3Npb25SZXF1ZXN0LnhtbCIvPgogICAgIDx4aTppbmNsdWRlIGhyZWY9
InhtbC9XZWJLaXRHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0LnhtbCIvPgorICAgIDx4aTpp
bmNsdWRlIGhyZWY9InhtbC9XZWJLaXROYXZpZ2F0aW9uQWN0aW9uLnhtbCIvPgogICAgIDx4aTpp
bmNsdWRlIGhyZWY9InhtbC9XZWJLaXRQb2xpY3lEZWNpc2lvbi54bWwiLz4KICAgICA8eGk6aW5j
bHVkZSBocmVmPSJ4bWwvV2ViS2l0TmF2aWdhdGlvblBvbGljeURlY2lzaW9uLnhtbCIvPgogICAg
IDx4aTppbmNsdWRlIGhyZWY9InhtbC9XZWJLaXRSZXNwb25zZVBvbGljeURlY2lzaW9uLnhtbCIv
PgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJr
aXQyZ3RrLXNlY3Rpb25zLnR4dCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2Rv
Y3Mvd2Via2l0Mmd0ay1zZWN0aW9ucy50eHQKaW5kZXggNDdiODY0ZS4uNTQ4MTNjOSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLXNl
Y3Rpb25zLnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dl
YmtpdDJndGstc2VjdGlvbnMudHh0CkBAIC01MjEsNiArNTIxLDI0IEBAIHdlYmtpdF9nZW9sb2Nh
dGlvbl9wZXJtaXNzaW9uX3JlcXVlc3RfZ2V0X3R5cGUKIDwvU0VDVElPTj4KIAogPFNFQ1RJT04+
Cis8RklMRT5XZWJLaXROYXZpZ2F0aW9uQWN0aW9uPC9GSUxFPgorV2ViS2l0TmF2aWdhdGlvbkFj
dGlvbgord2Via2l0X25hdmlnYXRpb25fYWN0aW9uX2NvcHkKK3dlYmtpdF9uYXZpZ2F0aW9uX2Fj
dGlvbl9mcmVlCit3ZWJraXRfbmF2aWdhdGlvbl9hY3Rpb25fZ2V0X25hdmlnYXRpb25fdHlwZQor
d2Via2l0X25hdmlnYXRpb25fYWN0aW9uX2dldF9tb3VzZV9idXR0b24KK3dlYmtpdF9uYXZpZ2F0
aW9uX2FjdGlvbl9nZXRfbW9kaWZpZXJzCit3ZWJraXRfbmF2aWdhdGlvbl9hY3Rpb25fZ2V0X3Jl
cXVlc3QKK3dlYmtpdF9uYXZpZ2F0aW9uX2FjdGlvbl9pc191c2VyX2dlc3R1cmUKKworPFNVQlNF
Q1RJT04gU3RhbmRhcmQ+CitXRUJLSVRfVFlQRV9OQVZJR0FUSU9OX0FDVElPTgorCis8U1VCU0VD
VElPTiBQcml2YXRlPgord2Via2l0X25hdmlnYXRpb25fYWN0aW9uX2dldF90eXBlCis8L1NFQ1RJ
T04+CisKKzxTRUNUSU9OPgogPEZJTEU+V2ViS2l0UG9saWN5RGVjaXNpb248L0ZJTEU+CiBXZWJL
aXRQb2xpY3lEZWNpc2lvbgogd2Via2l0X3BvbGljeV9kZWNpc2lvbl9kb3dubG9hZApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvd2Via2l0Mi5oIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvd2Via2l0Mi5oCmluZGV4IGMxODUzOGEuLjQ2NDkw
YTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdDIu
aAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay93ZWJraXQyLmgKQEAgLTQ5
LDYgKzQ5LDcgQEAKICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdEhpdFRlc3RSZXN1bHQuaD4KICNp
bmNsdWRlIDx3ZWJraXQyL1dlYktpdEphdmFzY3JpcHRSZXN1bHQuaD4KICNpbmNsdWRlIDx3ZWJr
aXQyL1dlYktpdE1pbWVJbmZvLmg+CisjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXROYXZpZ2F0aW9u
QWN0aW9uLmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXROYXZpZ2F0aW9uUG9saWN5RGVjaXNp
b24uaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdFBlcm1pc3Npb25SZXF1ZXN0Lmg+CiAjaW5j
bHVkZSA8d2Via2l0Mi9XZWJLaXRQbHVnaW4uaD4KZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxv
ZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCA4NjNmMjBlLi5lYzUzNDY2IDEwMDY0NAotLS0gYS9U
b29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjMgQEAKKzIw
MTQtMDYtMTAgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgorCisg
ICAgICAgIFtHVEtdIFdlYktpdFdlYlZpZXc6OmNyZWF0ZSBzaG91bGQgcmVjZWl2ZSBpbmZvcm1h
dGlvbiBhYm91dCB0aGUgbmF2aWdhdGlvbiBhY3Rpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMzY4MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCB1bml0IHRlc3QgdG8gY2hlY2sgdGhlIFdlYktp
dE5hdmlnYXRpb25BY3Rpb24gcGFzc2VkIHRvCisgICAgICAgIFdlYktpdFdlYlZpZXc6OmNyZWF0
ZSBjYWxsYmFjay4KKworICAgICAgICAqIE1pbmlCcm93c2VyL2d0ay9Ccm93c2VyV2luZG93LmM6
CisgICAgICAgICh3ZWJWaWV3Q3JlYXRlKTogQWRkIFdlYktpdE5hdmlnYXRpb25BY3Rpb24gcGFy
YW1ldGVyLgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0TXVs
dGlwcm9jZXNzLmNwcDoKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsv
VGVzdFByaW50aW5nLmNwcDoKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJH
dGsvVGVzdFVJQ2xpZW50LmNwcDoKKyAgICAgICAgKHRlc3RXZWJWaWV3Q3JlYXRlTmF2aWdhdGlv
bkRhdGEpOgorICAgICAgICAoYmVmb3JlQWxsKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdDJHdGsvVGVzdFdlYktpdFBvbGljeUNsaWVudC5jcHA6CisgICAgICAgIChjcmVh
dGVDYWxsYmFjayk6CisKIDIwMTQtMDYtMjQgIEphdmllciBGZXJuYW5kZXogIDxqZmVybmFuZGV6
QGlnYWxpYS5jb20+CiAKICAgICAgICAgTmFtZSBtb3ZpbmcuIFVucmV2aWV3ZWQuCmRpZmYgLS1n
aXQgYS9Ub29scy9NaW5pQnJvd3Nlci9ndGsvQnJvd3NlcldpbmRvdy5jIGIvVG9vbHMvTWluaUJy
b3dzZXIvZ3RrL0Jyb3dzZXJXaW5kb3cuYwppbmRleCA0Mzc0NzczLi42NWIwOTZjIDEwMDY0NAot
LS0gYS9Ub29scy9NaW5pQnJvd3Nlci9ndGsvQnJvd3NlcldpbmRvdy5jCisrKyBiL1Rvb2xzL01p
bmlCcm93c2VyL2d0ay9Ccm93c2VyV2luZG93LmMKQEAgLTM0OCw3ICszNDgsNyBAQCBzdGF0aWMg
Z2Jvb2xlYW4gd2ViVmlld0xlYXZlRnVsbFNjcmVlbihXZWJLaXRXZWJWaWV3ICp3ZWJWaWV3LCBC
cm93c2VyV2luZG93ICp3aQogICAgIHJldHVybiBGQUxTRTsKIH0KIAotc3RhdGljIEd0a1dpZGdl
dCAqd2ViVmlld0NyZWF0ZShXZWJLaXRXZWJWaWV3ICp3ZWJWaWV3LCBCcm93c2VyV2luZG93ICp3
aW5kb3cpCitzdGF0aWMgR3RrV2lkZ2V0ICp3ZWJWaWV3Q3JlYXRlKFdlYktpdFdlYlZpZXcgKndl
YlZpZXcsIFdlYktpdE5hdmlnYXRpb25BY3Rpb24gKm5hdmlnYXRpb24sIEJyb3dzZXJXaW5kb3cg
KndpbmRvdykKIHsKICAgICBXZWJLaXRXZWJWaWV3ICpuZXdXZWJWaWV3ID0gV0VCS0lUX1dFQl9W
SUVXKHdlYmtpdF93ZWJfdmlld19uZXdfd2l0aF9yZWxhdGVkX3ZpZXcod2ViVmlldykpOwogICAg
IHdlYmtpdF93ZWJfdmlld19zZXRfc2V0dGluZ3MobmV3V2ViVmlldywgd2Via2l0X3dlYl92aWV3
X2dldF9zZXR0aW5ncyh3ZWJWaWV3KSk7CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdDJHdGsvVGVzdE11bHRpcHJvY2Vzcy5jcHAgYi9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdE11bHRpcHJvY2Vzcy5jcHAKaW5kZXggNzY1ZTU0Mi4u
ZjgzODBkMiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3Rr
L1Rlc3RNdWx0aXByb2Nlc3MuY3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Mkd0ay9UZXN0TXVsdGlwcm9jZXNzLmNwcApAQCAtMTM4LDcgKzEzOCw3IEBAIHB1YmxpYzoK
ICAgICAgICAgQ2xvc2UKICAgICB9OwogCi0gICAgc3RhdGljIEd0a1dpZGdldCogdmlld0NyZWF0
ZUNhbGxiYWNrKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIFVJQ2xpZW50TXVsdGlwcm9jZXNzVGVz
dCogdGVzdCkKKyAgICBzdGF0aWMgR3RrV2lkZ2V0KiB2aWV3Q3JlYXRlQ2FsbGJhY2soV2ViS2l0
V2ViVmlldyogd2ViVmlldywgV2ViS2l0TmF2aWdhdGlvbkFjdGlvbiosIFVJQ2xpZW50TXVsdGlw
cm9jZXNzVGVzdCogdGVzdCkKICAgICB7CiAgICAgICAgIHJldHVybiB0ZXN0LT52aWV3Q3JlYXRl
KHdlYlZpZXcpOwogICAgIH0KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Mkd0ay9UZXN0UHJpbnRpbmcuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXQyR3RrL1Rlc3RQcmludGluZy5jcHAKaW5kZXggOTllZmE3Yy4uY2ZhMTY1NiAxMDA2NDQK
LS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RQcmludGluZy5j
cHAKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RQcmludGlu
Zy5jcHAKQEAgLTE5NCw3ICsxOTQsNyBAQCBjbGFzcyBDbG9zZUFmdGVyUHJpbnRUZXN0OiBwdWJs
aWMgV2ViVmlld1Rlc3QgewogcHVibGljOgogICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUoQ2xv
c2VBZnRlclByaW50VGVzdCk7CiAKLSAgICBzdGF0aWMgR3RrV2lkZ2V0KiB3ZWJWaWV3Q3JlYXRl
KFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIENsb3NlQWZ0ZXJQcmludFRlc3QqIHRlc3QpCisgICAg
c3RhdGljIEd0a1dpZGdldCogd2ViVmlld0NyZWF0ZShXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBX
ZWJLaXROYXZpZ2F0aW9uQWN0aW9uKiwgQ2xvc2VBZnRlclByaW50VGVzdCogdGVzdCkKICAgICB7
CiAgICAgICAgIHJldHVybiB0ZXN0LT5jcmVhdGVXZWJWaWV3KCk7CiAgICAgfQpkaWZmIC0tZ2l0
IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RVSUNsaWVudC5jcHAg
Yi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdFVJQ2xpZW50LmNwcApp
bmRleCBkMjRlZGM2Li4xZTViZGQyIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdDJHdGsvVGVzdFVJQ2xpZW50LmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdDJHdGsvVGVzdFVJQ2xpZW50LmNwcApAQCAtMTE3LDkgKzExNyw5IEBAIHB1
YmxpYzoKICAgICAgICAgdGVzdC0+bV93aW5kb3dQcm9wZXJ0aWVzQ2hhbmdlZC5hZGQoZ19wYXJh
bV9zcGVjX2dldF9uYW1lKHBhcmFtU3BlYykpOwogICAgIH0KIAotICAgIHN0YXRpYyBHdGtXaWRn
ZXQqIHZpZXdDcmVhdGVDYWxsYmFjayhXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBVSUNsaWVudFRl
c3QqIHRlc3QpCisgICAgc3RhdGljIEd0a1dpZGdldCogdmlld0NyZWF0ZUNhbGxiYWNrKFdlYktp
dFdlYlZpZXcqIHdlYlZpZXcsIFdlYktpdE5hdmlnYXRpb25BY3Rpb24qIG5hdmlnYXRpb24sIFVJ
Q2xpZW50VGVzdCogdGVzdCkKICAgICB7Ci0gICAgICAgIHJldHVybiB0ZXN0LT52aWV3Q3JlYXRl
KHdlYlZpZXcpOworICAgICAgICByZXR1cm4gdGVzdC0+dmlld0NyZWF0ZSh3ZWJWaWV3LCBuYXZp
Z2F0aW9uKTsKICAgICB9CiAKICAgICBzdGF0aWMgdm9pZCB2aWV3UmVhZHlUb1Nob3dDYWxsYmFj
ayhXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBVSUNsaWVudFRlc3QqIHRlc3QpCkBAIC0yNDAsOSAr
MjQwLDEwIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fbW91c2VUYXJnZXRIaXRUZXN0UmVz
dWx0LmdldCgpOwogICAgIH0KIAotICAgIHZpcnR1YWwgR3RrV2lkZ2V0KiB2aWV3Q3JlYXRlKFdl
YktpdFdlYlZpZXcqIHdlYlZpZXcpCisgICAgdmlydHVhbCBHdGtXaWRnZXQqIHZpZXdDcmVhdGUo
V2ViS2l0V2ViVmlldyogd2ViVmlldywgV2ViS2l0TmF2aWdhdGlvbkFjdGlvbiogbmF2aWdhdGlv
bikKICAgICB7CiAgICAgICAgIGdfYXNzZXJ0KHdlYlZpZXcgPT0gbV93ZWJWaWV3KTsKKyAgICAg
ICAgZ19hc3NlcnQobmF2aWdhdGlvbik7CiAKICAgICAgICAgR3RrV2lkZ2V0KiBuZXdXZWJWaWV3
ID0gd2Via2l0X3dlYl92aWV3X25ld193aXRoX2NvbnRleHQod2Via2l0X3dlYl92aWV3X2dldF9j
b250ZXh0KHdlYlZpZXcpKTsKICAgICAgICAgZ19vYmplY3RfcmVmX3NpbmsobmV3V2ViVmlldyk7
CkBAIC0zMDUsNiArMzA2LDk3IEBAIHN0YXRpYyB2b2lkIHRlc3RXZWJWaWV3Q3JlYXRlUmVhZHlD
bG9zZShVSUNsaWVudFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCiAgICAgZ19hc3NlcnRfY21w
aW50KGV2ZW50c1syXSwgPT0sIFVJQ2xpZW50VGVzdDo6Q2xvc2UpOwogfQogCitjbGFzcyBDcmVh
dGVOYXZpZ2F0aW9uRGF0YVRlc3Q6IHB1YmxpYyBVSUNsaWVudFRlc3QgeworcHVibGljOgorICAg
IE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUoQ3JlYXRlTmF2aWdhdGlvbkRhdGFUZXN0KTsKKworICAg
IENyZWF0ZU5hdmlnYXRpb25EYXRhVGVzdCgpCisgICAgICAgIDogbV9uYXZpZ2F0aW9uKG51bGxw
dHIpCisgICAgeworICAgIH0KKworICAgIH5DcmVhdGVOYXZpZ2F0aW9uRGF0YVRlc3QoKQorICAg
IHsKKyAgICAgICAgY2xlYXJOYXZpZ2F0aW9uKCk7CisgICAgfQorCisgICAgdm9pZCBjbGVhck5h
dmlnYXRpb24oKQorICAgIHsKKyAgICAgICAgaWYgKG1fbmF2aWdhdGlvbikKKyAgICAgICAgICAg
IHdlYmtpdF9uYXZpZ2F0aW9uX2FjdGlvbl9mcmVlKG1fbmF2aWdhdGlvbik7CisgICAgICAgIG1f
bmF2aWdhdGlvbiA9IG51bGxwdHI7CisgICAgfQorCisgICAgR3RrV2lkZ2V0KiB2aWV3Q3JlYXRl
KFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIFdlYktpdE5hdmlnYXRpb25BY3Rpb24qIG5hdmlnYXRp
b24pCisgICAgeworICAgICAgICBnX2Fzc2VydChuYXZpZ2F0aW9uKTsKKyAgICAgICAgZ19hc3Nl
cnQoIW1fbmF2aWdhdGlvbik7CisgICAgICAgIG1fbmF2aWdhdGlvbiA9IHdlYmtpdF9uYXZpZ2F0
aW9uX2FjdGlvbl9jb3B5KG5hdmlnYXRpb24pOworICAgICAgICBnX21haW5fbG9vcF9xdWl0KG1f
bWFpbkxvb3ApOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICB2b2lkIGxv
YWRIVE1MKGNvbnN0IGNoYXIqIGh0bWwpCisgICAgeworICAgICAgICBjbGVhck5hdmlnYXRpb24o
KTsKKyAgICAgICAgV2ViVmlld1Rlc3Q6OmxvYWRIdG1sKGh0bWwsIG51bGxwdHIpOworICAgIH0K
KworICAgIHZvaWQgY2xpY2tBbmRXYWl0VW50aWxNYWluTG9vcEZpbmlzaGVzKGludCB4LCBpbnQg
eSkKKyAgICB7CisgICAgICAgIGNsZWFyTmF2aWdhdGlvbigpOworICAgICAgICBjbGlja01vdXNl
QnV0dG9uKHgsIHksIDEpOworICAgICAgICBnX21haW5fbG9vcF9ydW4obV9tYWluTG9vcCk7Cisg
ICAgfQorCisgICAgdm9pZCByZWxvYWQoKQorICAgIHsKKyAgICAgICAgY2xlYXJOYXZpZ2F0aW9u
KCk7CisgICAgICAgIHdlYmtpdF93ZWJfdmlld19yZWxvYWRfYnlwYXNzX2NhY2hlKG1fd2ViVmll
dyk7CisgICAgfQorCisgICAgV2ViS2l0TmF2aWdhdGlvbkFjdGlvbiogbV9uYXZpZ2F0aW9uOwor
fTsKKworc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdDcmVhdGVOYXZpZ2F0aW9uRGF0YShDcmVhdGVO
YXZpZ2F0aW9uRGF0YVRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgdGVzdC0+c2hv
d0luV2luZG93QW5kV2FpdFVudGlsTWFwcGVkKCk7CisKKyAgICB0ZXN0LT5sb2FkSFRNTCgKKyAg
ICAgICAgIjxodG1sPjxib2R5PiIKKyAgICAgICAgIjxpbnB1dCBzdHlsZT1cInBvc2l0aW9uOmFi
c29sdXRlOyBsZWZ0OjA7IHRvcDowOyBtYXJnaW46MDsgcGFkZGluZzowXCIgdHlwZT1cImJ1dHRv
blwiIHZhbHVlPVwiY2xpY2sgdG8gc2hvdyBhIHBvcHVwXCIgb25jbGljaz1cIndpbmRvdy5vcGVu
KCdkYXRhOmZvbycpO1wiLz4iCisgICAgICAgICI8YSBzdHlsZT1cInBvc2l0aW9uOmFic29sdXRl
OyBsZWZ0OjIwOyB0b3A6MjA7XCIgaHJlZj1cImRhdGE6YmFyXCIgdGFyZ2V0PVwiX2JsYW5rXCI+
cG9wdXAgbGluazwvYT4iCisgICAgICAgICI8L2JvZHk+PC9odG1sPiIpOworICAgIHRlc3QtPndh
aXRVbnRpbExvYWRGaW5pc2hlZCgpOworCisgICAgLy8gQ2xpY2sgb24gYSBidXR0b24uCisgICAg
dGVzdC0+Y2xpY2tBbmRXYWl0VW50aWxNYWluTG9vcEZpbmlzaGVzKDUsIDUpOworICAgIGdfYXNz
ZXJ0X2NtcHN0cih3ZWJraXRfdXJpX3JlcXVlc3RfZ2V0X3VyaSh3ZWJraXRfbmF2aWdhdGlvbl9h
Y3Rpb25fZ2V0X3JlcXVlc3QodGVzdC0+bV9uYXZpZ2F0aW9uKSksID09LCAiZGF0YTpmb28iKTsK
KyAgICBnX2Fzc2VydF9jbXB1aW50KHdlYmtpdF9uYXZpZ2F0aW9uX2FjdGlvbl9nZXRfbmF2aWdh
dGlvbl90eXBlKHRlc3QtPm1fbmF2aWdhdGlvbiksID09LCBXRUJLSVRfTkFWSUdBVElPTl9UWVBF
X09USEVSKTsKKyAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgYnV0dG9uIDEuCisgICAgZ19h
c3NlcnRfY21wdWludCh3ZWJraXRfbmF2aWdhdGlvbl9hY3Rpb25fZ2V0X21vdXNlX2J1dHRvbih0
ZXN0LT5tX25hdmlnYXRpb24pLCA9PSwgMCk7CisgICAgZ19hc3NlcnRfY21wdWludCh3ZWJraXRf
bmF2aWdhdGlvbl9hY3Rpb25fZ2V0X21vZGlmaWVycyh0ZXN0LT5tX25hdmlnYXRpb24pLCA9PSwg
MCk7CisgICAgZ19hc3NlcnQod2Via2l0X25hdmlnYXRpb25fYWN0aW9uX2lzX3VzZXJfZ2VzdHVy
ZSh0ZXN0LT5tX25hdmlnYXRpb24pKTsKKworICAgIC8vIENsaWNrIG9uIGEgbGluay4KKyAgICB0
ZXN0LT5jbGlja0FuZFdhaXRVbnRpbE1haW5Mb29wRmluaXNoZXMoMjEsIDIxKTsKKyAgICBnX2Fz
c2VydF9jbXBzdHIod2Via2l0X3VyaV9yZXF1ZXN0X2dldF91cmkod2Via2l0X25hdmlnYXRpb25f
YWN0aW9uX2dldF9yZXF1ZXN0KHRlc3QtPm1fbmF2aWdhdGlvbikpLCA9PSwgImRhdGE6YmFyIik7
CisgICAgZ19hc3NlcnRfY21wdWludCh3ZWJraXRfbmF2aWdhdGlvbl9hY3Rpb25fZ2V0X25hdmln
YXRpb25fdHlwZSh0ZXN0LT5tX25hdmlnYXRpb24pLCA9PSwgV0VCS0lUX05BVklHQVRJT05fVFlQ
RV9MSU5LX0NMSUNLRUQpOworICAgIGdfYXNzZXJ0X2NtcHVpbnQod2Via2l0X25hdmlnYXRpb25f
YWN0aW9uX2dldF9tb3VzZV9idXR0b24odGVzdC0+bV9uYXZpZ2F0aW9uKSwgPT0sIDEpOworICAg
IGdfYXNzZXJ0X2NtcHVpbnQod2Via2l0X25hdmlnYXRpb25fYWN0aW9uX2dldF9tb2RpZmllcnMo
dGVzdC0+bV9uYXZpZ2F0aW9uKSwgPT0sIDApOworICAgIGdfYXNzZXJ0KHdlYmtpdF9uYXZpZ2F0
aW9uX2FjdGlvbl9pc191c2VyX2dlc3R1cmUodGVzdC0+bV9uYXZpZ2F0aW9uKSk7CisKKyAgICAv
LyBObyB1c2VyIGludGVyYWN0aW9uLgorICAgIHRlc3QtPmxvYWRIVE1MKCI8aHRtbD48Ym9keSBv
bkxvYWQ9XCJ3aW5kb3cub3BlbigpO1wiPjwvaHRtbD4iKTsKKyAgICB0ZXN0LT53YWl0VW50aWxN
YWluTG9vcEZpbmlzaGVzKCk7CisKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3VyaV9yZXF1
ZXN0X2dldF91cmkod2Via2l0X25hdmlnYXRpb25fYWN0aW9uX2dldF9yZXF1ZXN0KHRlc3QtPm1f
bmF2aWdhdGlvbikpLCA9PSwgIiIpOworICAgIGdfYXNzZXJ0X2NtcHVpbnQod2Via2l0X25hdmln
YXRpb25fYWN0aW9uX2dldF9uYXZpZ2F0aW9uX3R5cGUodGVzdC0+bV9uYXZpZ2F0aW9uKSwgPT0s
IFdFQktJVF9OQVZJR0FUSU9OX1RZUEVfT1RIRVIpOworICAgIGdfYXNzZXJ0X2NtcHVpbnQod2Vi
a2l0X25hdmlnYXRpb25fYWN0aW9uX2dldF9tb3VzZV9idXR0b24odGVzdC0+bV9uYXZpZ2F0aW9u
KSwgPT0sIDApOworICAgIGdfYXNzZXJ0X2NtcHVpbnQod2Via2l0X25hdmlnYXRpb25fYWN0aW9u
X2dldF9tb2RpZmllcnModGVzdC0+bV9uYXZpZ2F0aW9uKSwgPT0sIDApOworICAgIGdfYXNzZXJ0
KCF3ZWJraXRfbmF2aWdhdGlvbl9hY3Rpb25faXNfdXNlcl9nZXN0dXJlKHRlc3QtPm1fbmF2aWdh
dGlvbikpOworfQorCiBzdGF0aWMgZ2Jvb2xlYW4gY2hlY2tNaW1lVHlwZUZvckZpbHRlcihHdGtG
aWxlRmlsdGVyKiBmaWx0ZXIsIGNvbnN0IGdjaGFyKiBtaW1lVHlwZSkKIHsKICAgICBHdGtGaWxl
RmlsdGVySW5mbyBmaWx0ZXJJbmZvOwpAQCAtMzIzLDExICs0MTUsMTEgQEAgcHVibGljOgogICAg
ICAgICB0ZXN0LT5tX3dlYlZpZXdFdmVudHMuYXBwZW5kKFJ1bkFzTW9kYWwpOwogICAgIH0KIAot
ICAgIEd0a1dpZGdldCogdmlld0NyZWF0ZShXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQorICAgIEd0
a1dpZGdldCogdmlld0NyZWF0ZShXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBXZWJLaXROYXZpZ2F0
aW9uQWN0aW9uKiBuYXZpZ2F0aW9uKQogICAgIHsKICAgICAgICAgZ19hc3NlcnQod2ViVmlldyA9
PSBtX3dlYlZpZXcpOwogCi0gICAgICAgIEd0a1dpZGdldCogbmV3V2ViVmlldyA9IFVJQ2xpZW50
VGVzdDo6dmlld0NyZWF0ZSh3ZWJWaWV3KTsKKyAgICAgICAgR3RrV2lkZ2V0KiBuZXdXZWJWaWV3
ID0gVUlDbGllbnRUZXN0Ojp2aWV3Q3JlYXRlKHdlYlZpZXcsIG5hdmlnYXRpb24pOwogICAgICAg
ICBnX3NpZ25hbF9jb25uZWN0KG5ld1dlYlZpZXcsICJydW4tYXMtbW9kYWwiLCBHX0NBTExCQUNL
KGRpYWxvZ1J1bkFzTW9kYWxDYWxsYmFjayksIHRoaXMpOwogICAgICAgICByZXR1cm4gbmV3V2Vi
VmlldzsKICAgICB9CkBAIC02NjUsNiArNzU3LDcgQEAgc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdG
aWxlQ2hvb3NlclJlcXVlc3QoRmlsZUNob29zZXJUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQog
dm9pZCBiZWZvcmVBbGwoKQogewogICAgIFVJQ2xpZW50VGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3
IiwgImNyZWF0ZS1yZWFkeS1jbG9zZSIsIHRlc3RXZWJWaWV3Q3JlYXRlUmVhZHlDbG9zZSk7Cisg
ICAgQ3JlYXRlTmF2aWdhdGlvbkRhdGFUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAiY3JlYXRl
LW5hdmlnYXRpb24tZGF0YSIsIHRlc3RXZWJWaWV3Q3JlYXRlTmF2aWdhdGlvbkRhdGEpOwogICAg
IE1vZGFsRGlhbG9nc1Rlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJhbGxvdy1tb2RhbC1kaWFs
b2dzIiwgdGVzdFdlYlZpZXdBbGxvd01vZGFsRGlhbG9ncyk7CiAgICAgTW9kYWxEaWFsb2dzVGVz
dDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgImRpc2FsbG93LW1vZGFsLWRpYWxvZ3MiLCB0ZXN0V2Vi
Vmlld0Rpc2FsbG93TW9kYWxEaWFsb2dzKTsKICAgICBVSUNsaWVudFRlc3Q6OmFkZCgiV2ViS2l0
V2ViVmlldyIsICJqYXZhc2NyaXB0LWRpYWxvZ3MiLCB0ZXN0V2ViVmlld0phdmFTY3JpcHREaWFs
b2dzKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9U
ZXN0V2ViS2l0UG9saWN5Q2xpZW50LmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Mkd0ay9UZXN0V2ViS2l0UG9saWN5Q2xpZW50LmNwcAppbmRleCAyMDllYTA0Li5mYTkxMjU3
IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdFdl
YktpdFBvbGljeUNsaWVudC5jcHAKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXQyR3RrL1Rlc3RXZWJLaXRQb2xpY3lDbGllbnQuY3BwCkBAIC0xOTEsNyArMTkxLDcgQEAgc3Ry
dWN0IENyZWF0ZUNhbGxiYWNrRGF0YSB7CiAgICAgR01haW5Mb29wKiBtYWluTG9vcDsKIH07CiAK
LXN0YXRpYyBXZWJLaXRXZWJWaWV3KiBjcmVhdGVDYWxsYmFjayhXZWJLaXRXZWJWaWV3KiB3ZWJW
aWV3LCBDcmVhdGVDYWxsYmFja0RhdGEqIGRhdGEpCitzdGF0aWMgV2ViS2l0V2ViVmlldyogY3Jl
YXRlQ2FsbGJhY2soV2ViS2l0V2ViVmlldyogd2ViVmlldywgV2ViS2l0TmF2aWdhdGlvbkFjdGlv
biosIENyZWF0ZUNhbGxiYWNrRGF0YSogZGF0YSkKIHsKICAgICBkYXRhLT50cmllZFRvT3Blbldp
bmRvdyA9IHRydWU7CiAgICAgZ19tYWluX2xvb3BfcXVpdChkYXRhLT5tYWluTG9vcCk7Cg==
</data>
<flag name="review"
          id="258200"
          type_id="1"
          status="+"
          setter="mrobinson"
    />
          </attachment>
      

    </bug>

</bugzilla>