<?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>78097</bug_id>
          
          <creation_ts>2012-02-08 02:57:29 -0800</creation_ts>
          <short_desc>[GTK] Add WebKitWebView::mouse-target-changed signal to WebKit2 GTK+ API</short_desc>
          <delta_ts>2012-02-09 08:51:26 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit2</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Gtk</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>78098</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Carlos Garcia Campos">cgarcia</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>gustavo</cc>
    
    <cc>mrobinson</cc>
    
    <cc>pnormand</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>551952</commentid>
    <comment_count>0</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-02-08 02:57:29 -0800</bug_when>
    <thetext>Implement mouseDidMoveOverElement UI client callback and emit the view signal passing a HitTestResult.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>551963</commentid>
    <comment_count>1</comment_count>
      <attachid>126042</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-02-08 03:16:23 -0800</bug_when>
    <thetext>Created attachment 126042
Patch

Implements the API discussed in the mailing list.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>551966</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-08 03:19:48 -0800</bug_when>
    <thetext>Attachment 126042 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;ChangeLog&apos;, u&apos;Source/WebKit2/ChangeLog&apos;, u...&quot; exit_code: 1

WARNING: File exempt from style guide. Skipping: &quot;Source/WebKit2/UIProcess/API/gtk/WebKitWebView.h&quot;
Source/WebKit2/UIProcess/API/gtk/WebKitHitTestResult.cpp:266:  Use 0 instead of NULL.  [readability/null] [5]
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/WebKitHitTestResult.h&quot;
Total errors found: 1 in 21 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>551967</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-08 03:20:05 -0800</bug_when>
    <thetext>Thanks for the patch. If this patch contains new public API please make sure it follows the guidelines for new WebKit2 GTK+ API. See http://trac.webkit.org/wiki/WebKitGTK/AddingNewWebKit2API</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>551971</commentid>
    <comment_count>4</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-02-08 03:23:32 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; Attachment 126042 [details] did not pass style-queue:
&gt; 
&gt; Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;ChangeLog&apos;, u&apos;Source/WebKit2/ChangeLog&apos;, u...&quot; exit_code: 1
&gt; 
&gt; WARNING: File exempt from style guide. Skipping: &quot;Source/WebKit2/UIProcess/API/gtk/WebKitWebView.h&quot;
&gt; Source/WebKit2/UIProcess/API/gtk/WebKitHitTestResult.cpp:266:  Use 0 instead of NULL.  [readability/null] [5]

This is a g_object_new()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>552134</commentid>
    <comment_count>5</comment_count>
      <attachid>126042</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-02-08 08:19:53 -0800</bug_when>
    <thetext>Comment on attachment 126042
Patch

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

This is, in general, great. There are a few minor things that I would change below.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitHitTestResult.cpp:38
&gt; + * an image or a media.

A couple small suggestions for the documentation here:

I think this should be either &quot;or a media elment&quot; or just &quot;or media&quot;

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitHitTestResult.cpp:45
&gt; + * a link, image or media element in the coordinates of the Hit Test.

&quot;or a media element at the coordinates&quot;

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitHitTestResult.cpp:47
&gt; + * are active at the same time, for example if there&apos;s a link containing and image.

&quot;an image&quot;

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitHitTestResult.cpp:247
&gt; +    unsigned context = WEBKIT_HIT_TEST_RESULT_CONTEXT_DOCUMENT;
&gt; +
&gt; +    const String&amp; linkURL = toImpl(wkHitTestResult)-&gt;absoluteLinkURL();
&gt; +    if (!linkURL.isEmpty())
&gt; +        context |= WEBKIT_HIT_TEST_RESULT_CONTEXT_LINK;
&gt; +

I probably would have just had the WebKitHitTestResult contain the WKHitTestResultRef, but this seems okay too.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:629
&gt; +     * This signal is emitted when the mouse cursor is moved over an

&quot;is moved&quot; -&gt; &quot;moves&quot;

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:631
&gt; +     * whether the mouse cursor is over an element, a Hit Test is performed

&quot;whether the mouse cursor is over an element&quot; -&gt; &quot;what type of element the mouse cursor is over&quot;

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:637
&gt; +     * The signal is emitted again when the mouse is moved out of the
&gt; +     * current element with a new @hit_test_result or %NULL if there
&gt; +     * isn&apos;t an element at the new mouse position.

My comment below may change this.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:760
&gt; +void webkitWebViewHoveredElement(WebKitWebView* webView, WKHitTestResultRef wkHitTestResult, unsigned modifiers)

You probably want to rename this to webkitWebViewHoveredOverElement

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:764
&gt; +    bool isEmpty = wkHitTestResultIsEmpty(wkHitTestResult);
&gt; +    if ((isEmpty &amp;&amp; !priv-&gt;hoveredElementHitTestResult)

Why not send empty hit tests? The fact that the element is not one of the types of elements that a hit test specifically measures against is also interesting information. Additionally, in the future, the hit test may also contain the DOM node. Suddently applications would start getting lot of new hit tests and that could break applications unwittingly.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:768
&gt; +        || (!isEmpty
&gt; +            &amp;&amp; priv-&gt;hoveredElementHitTestResult
&gt; +            &amp;&amp; priv-&gt;hoveredElementModifiers == modifiers
&gt; +            &amp;&amp; webkitHitTestResultCompare(priv-&gt;hoveredElementHitTestResult.get(), wkHitTestResult)))

Is it important to only send the first hover event? If it&apos;s because this causes a lot of CPU usage, I think we should just rate limit here than changing the behavior entirely. I dislike the idea of making this signal too different from the underlying C API signal before we know whether or not it&apos;s important.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:772
&gt; +    priv-&gt;hoveredElementHitTestResult = !isEmpty ? adoptGRef(webkitHitTestResultCreate(wkHitTestResult)) : 0;

I think you should still send a hit test even if it&apos;s empty. Recall that the hit test may contain the DOM node one day. I also think it&apos;s consistent. An empty hit test result is still a hit test result.

&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitWebView.cpp:285
&gt;      UIClientTest()
&gt;          : m_scriptType(Alert)
&gt;          , m_scriptDialogConfirmed(true)
&gt; +        , m_hoveredElementModifiers(0)
&gt;      {
&gt;          webkit_settings_set_javascript_can_open_windows_automatically(webkit_web_view_get_settings(m_webView), TRUE);
&gt;          g_signal_connect(m_webView, &quot;create&quot;, G_CALLBACK(viewCreate), this);
&gt;          g_signal_connect(m_webView, &quot;script-alert&quot;, G_CALLBACK(scriptAlert), this);
&gt;          g_signal_connect(m_webView, &quot;script-confirm&quot;, G_CALLBACK(scriptConfirm), this);
&gt;          g_signal_connect(m_webView, &quot;script-prompt&quot;, G_CALLBACK(scriptPrompt), this);
&gt; +        g_signal_connect(m_webView, &quot;hovered-over-element&quot;, G_CALLBACK(hoveredOverElement), this);

I think it makes sense to just extend WebViewTest with another fixture. If you add this the name &quot;UIClientTest&quot; is no longer strictly accurate.

&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitWebView.cpp:307
&gt; +    WebKitHitTestResult* getHoveredElementAt(int x, int y, unsigned int mouseModifiers = 0)
&gt; +    {
&gt; +        mouseMoveTo(x, y, mouseModifiers);
&gt; +        g_main_loop_run(m_mainLoop);
&gt; +        return m_hoveredElementHitTestResult.get();

Might want to call this something like moveMouseAndWaitUntilHoveringOverElement.

&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitWebView.cpp:382
&gt; +    test-&gt;showInWindowAndWaitUntilMapped();

I love this. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>552278</commentid>
    <comment_count>6</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-02-08 10:43:14 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 126042 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=126042&amp;action=review
&gt; 
&gt; This is, in general, great. There are a few minor things that I would change below.
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitHitTestResult.cpp:38
&gt; &gt; + * an image or a media.
&gt; 
&gt; A couple small suggestions for the documentation here:
&gt; 
&gt; I think this should be either &quot;or a media elment&quot; or just &quot;or media&quot;

Ok.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitHitTestResult.cpp:45
&gt; &gt; + * a link, image or media element in the coordinates of the Hit Test.
&gt; 
&gt; &quot;or a media element at the coordinates&quot;

Ok

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitHitTestResult.cpp:47
&gt; &gt; + * are active at the same time, for example if there&apos;s a link containing and image.
&gt; 
&gt; &quot;an image&quot;

Oops

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitHitTestResult.cpp:247
&gt; &gt; +    unsigned context = WEBKIT_HIT_TEST_RESULT_CONTEXT_DOCUMENT;
&gt; &gt; +
&gt; &gt; +    const String&amp; linkURL = toImpl(wkHitTestResult)-&gt;absoluteLinkURL();
&gt; &gt; +    if (!linkURL.isEmpty())
&gt; &gt; +        context |= WEBKIT_HIT_TEST_RESULT_CONTEXT_LINK;
&gt; &gt; +
&gt; 
&gt; I probably would have just had the WebKitHitTestResult contain the WKHitTestResultRef, but this seems okay too.

In that case we couldn&apos;t return const char * in public methods, we want to cache the whole HitTestResult, so we don&apos;t need the keep the C one.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:629
&gt; &gt; +     * This signal is emitted when the mouse cursor is moved over an
&gt; 
&gt; &quot;is moved&quot; -&gt; &quot;moves&quot;

Ok.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:631
&gt; &gt; +     * whether the mouse cursor is over an element, a Hit Test is performed
&gt; 
&gt; &quot;whether the mouse cursor is over an element&quot; -&gt; &quot;what type of element the mouse cursor is over&quot;

Ok.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:637
&gt; &gt; +     * The signal is emitted again when the mouse is moved out of the
&gt; &gt; +     * current element with a new @hit_test_result or %NULL if there
&gt; &gt; +     * isn&apos;t an element at the new mouse position.
&gt; 
&gt; My comment below may change this.
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:760
&gt; &gt; +void webkitWebViewHoveredElement(WebKitWebView* webView, WKHitTestResultRef wkHitTestResult, unsigned modifiers)
&gt; 
&gt; You probably want to rename this to webkitWebViewHoveredOverElement

Right, I missed this one when I renamed hovered-element as hovered-over-element.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:764
&gt; &gt; +    bool isEmpty = wkHitTestResultIsEmpty(wkHitTestResult);
&gt; &gt; +    if ((isEmpty &amp;&amp; !priv-&gt;hoveredElementHitTestResult)
&gt; 
&gt; Why not send empty hit tests?

We do send empty hit tests, as NULL. But we don&apos;t send them if previous one was empty too. 

&gt; The fact that the element is not one of the types of elements that a hit test specifically measures against is also interesting information. Additionally, in the future, the hit test may also contain the DOM node. 

In that case (which is unlikely to happen) wkHitTestResultIsEmpty won&apos;t return true, because it will contain a node. The same will happen if we add more info to HitTestResult in the C API, like whether it&apos;s over a selection or editable content.

&gt; Suddently applications would start getting lot of new hit tests and that could break applications unwittingly.

I don&apos;t think so, apps should check the context of the hit test before using it, see the minibrowser example, that uses this signal to show the url of hovered link sin the status bar. 

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:768
&gt; &gt; +        || (!isEmpty
&gt; &gt; +            &amp;&amp; priv-&gt;hoveredElementHitTestResult
&gt; &gt; +            &amp;&amp; priv-&gt;hoveredElementModifiers == modifiers
&gt; &gt; +            &amp;&amp; webkitHitTestResultCompare(priv-&gt;hoveredElementHitTestResult.get(), wkHitTestResult)))
&gt; 
&gt; Is it important to only send the first hover event?

Emitting the signal a lot of times with the same hit test result means apps would need to check whether it&apos;s the same or not.

&gt; If it&apos;s because this causes a lot of CPU usage,

It&apos;s not only because the CPU usage, it makes the API easier to use. The signal is called hovered-over-element, I woulnd&apos;t expect it to be emitted twice for the same element. This the same behaviour of the webkit1 hovering-link signal, fwiw. 

&gt; I think we should just rate limit here than changing the behavior entirely.

what behaviour are we changing?

&gt;  I dislike the idea of making this signal too different from the underlying C API signal before we know whether or not it&apos;s important.

I think it&apos;s important, try to implement the url hovering in minibrowser if this signal is emitted a lot of times for the same link. I dislike the idea of making this signal too different from the WebKit1 equivalent :-P

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:772
&gt; &gt; +    priv-&gt;hoveredElementHitTestResult = !isEmpty ? adoptGRef(webkitHitTestResultCreate(wkHitTestResult)) : 0;
&gt; 
&gt; I think you should still send a hit test even if it&apos;s empty. Recall that the hit test may contain the DOM node one day.

In that case it won&apos;t be empty.

&gt;  I also think it&apos;s consistent. An empty hit test result is still a hit test result.

NULL is an empty hit test result. I don&apos;t want apps checking all the possible values of a hit test result object and all of the returning NULL.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitWebView.cpp:285
&gt; &gt;      UIClientTest()
&gt; &gt;          : m_scriptType(Alert)
&gt; &gt;          , m_scriptDialogConfirmed(true)
&gt; &gt; +        , m_hoveredElementModifiers(0)
&gt; &gt;      {
&gt; &gt;          webkit_settings_set_javascript_can_open_windows_automatically(webkit_web_view_get_settings(m_webView), TRUE);
&gt; &gt;          g_signal_connect(m_webView, &quot;create&quot;, G_CALLBACK(viewCreate), this);
&gt; &gt;          g_signal_connect(m_webView, &quot;script-alert&quot;, G_CALLBACK(scriptAlert), this);
&gt; &gt;          g_signal_connect(m_webView, &quot;script-confirm&quot;, G_CALLBACK(scriptConfirm), this);
&gt; &gt;          g_signal_connect(m_webView, &quot;script-prompt&quot;, G_CALLBACK(scriptPrompt), this);
&gt; &gt; +        g_signal_connect(m_webView, &quot;hovered-over-element&quot;, G_CALLBACK(hoveredOverElement), this);
&gt; 
&gt; I think it makes sense to just extend WebViewTest with another fixture. If you add this the name &quot;UIClientTest&quot; is no longer strictly accurate.

mouseDidMoveOverElement is a callback of the UI Client. 

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitWebView.cpp:307
&gt; &gt; +    WebKitHitTestResult* getHoveredElementAt(int x, int y, unsigned int mouseModifiers = 0)
&gt; &gt; +    {
&gt; &gt; +        mouseMoveTo(x, y, mouseModifiers);
&gt; &gt; +        g_main_loop_run(m_mainLoop);
&gt; &gt; +        return m_hoveredElementHitTestResult.get();
&gt; 
&gt; Might want to call this something like moveMouseAndWaitUntilHoveringOverElement.

It returns the hovered element at the given position, but I don&apos;t care about private names in unit tests, so I&apos;ll change it if you think it&apos;s important.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitWebView.cpp:382
&gt; &gt; +    test-&gt;showInWindowAndWaitUntilMapped();
&gt; 
&gt; I love this. :)

I knew it :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>552297</commentid>
    <comment_count>7</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-02-08 11:02:54 -0800</bug_when>
    <thetext>(In reply to comment #6)

&gt; &gt; The fact that the element is not one of the types of elements that a hit test specifically measures against is also interesting information. Additionally, in the future, the hit test may also contain the DOM node. 
&gt; 
&gt; In that case (which is unlikely to happen) wkHitTestResultIsEmpty won&apos;t return true, because it will contain a node. The same will happen if we add more info to HitTestResult in the C API, like whether it&apos;s over a selection or editable content.

I think it&apos;s important to send the HitTest even when it&apos;s empty. This doesn&apos;t make the logic in embedders any more complicated and protects against poorly written applications that assume the HitTest isn&apos;t NULL. In general, I think we should avoid forcing NULL checks in embedders when it makes sense.

Another thing is that this &quot;feels&quot; wrong to me. What does it mean when a hit test returns a NULL result? The idea that a hit test returns a result that says &quot;I didn&apos;t hit anything&quot; seems more sensible to me.  I think perhaps you are thinking of the HitTestResult as &quot;items found by the hit test,&quot; whereas I think of it more like GAsyncResult.

&gt; &gt; Is it important to only send the first hover event?
&gt; 
&gt; Emitting the signal a lot of times with the same hit test result means apps would need to check whether it&apos;s the same or not.
&gt; 
&gt; &gt; If it&apos;s because this causes a lot of CPU usage,
&gt; 
&gt; It&apos;s not only because the CPU usage, it makes the API easier to use. The signal is called hovered-over-element, I woulnd&apos;t expect it to be emitted twice for the same element. This the same behaviour of the webkit1 hovering-link signal, fwiw. 

I&apos;m this case, I think this particular change (only emitting the signal once per element) is probably fine in the end. As long as a new HitTest is always sent when you stop hovering on an element, this seems safe.

&gt; &gt; I think we should just rate limit here than changing the behavior entirely.
&gt; what behaviour are we changing?

We&apos;re changing the behavior from the WebKit2 C API. Part of the reason I&apos;m so picky about some of this stuff is that we are going under the assumption that the C API could possibly be removed. If the C API is removed, we&apos;ll need to rewrite the WebKitTestRunner against the GObject API. If that happens, we may not be able to properly run all the tests if the API isn&apos;t rich enough. In this case, I think you&apos;ve convinced me that it&apos;s a fairly safe change though.

&gt; &gt;  I dislike the idea of making this signal too different from the underlying C API signal before we know whether or not it&apos;s important.
&gt; 
&gt; I think it&apos;s important, try to implement the url hovering in minibrowser if this signal is emitted a lot of times for the same link. I dislike the idea of making this signal too different from the WebKit1 equivalent :-P

In WebKit1 it seems that the signal is emmitted every time ChromeClient::mouseDidMoveOverElement is called, so wouldn&apos;t this be a change? In any case, either behavior is probably fine here.

&gt; &gt;  I also think it&apos;s consistent. An empty hit test result is still a hit test result.
&gt; 
&gt; NULL is an empty hit test result. I don&apos;t want apps checking all the possible values of a hit test result object and all of the returning NULL.

Why not add a webkit_hit_test_is_empty method then? The apps can also check if context is 0. I think this is safer than having this value be null.

&gt; &gt; I think it makes sense to just extend WebViewTest with another fixture. If you add this the name &quot;UIClientTest&quot; is no longer strictly accurate.
&gt; 
&gt; mouseDidMoveOverElement is a callback of the UI Client. 

You&apos;re absolutely right.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>552894</commentid>
    <comment_count>8</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-02-08 23:27:03 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; (In reply to comment #6)
&gt; 
&gt; &gt; &gt; The fact that the element is not one of the types of elements that a hit test specifically measures against is also interesting information. Additionally, in the future, the hit test may also contain the DOM node. 
&gt; &gt; 
&gt; &gt; In that case (which is unlikely to happen) wkHitTestResultIsEmpty won&apos;t return true, because it will contain a node. The same will happen if we add more info to HitTestResult in the C API, like whether it&apos;s over a selection or editable content.
&gt; 
&gt; I think it&apos;s important to send the HitTest even when it&apos;s empty. This doesn&apos;t make the logic in embedders any more complicated and protects against poorly written applications that assume the HitTest isn&apos;t NULL.

It&apos;s documented and includes the allow none tag.

&gt; In general, I think we should avoid forcing NULL checks in embedders when it makes sense.

I think the opposite, we already return NULL in a lot of places.

&gt; Another thing is that this &quot;feels&quot; wrong to me. What does it mean when a hit test returns a NULL result?

This is not this case, the user didn&apos;t perform a hit test. A hit test can never return NULL, because at least WEBKIT_HIT_TEST_RESULT_CONTEXT_DOCUMENT is always true. This case is different, the signal is called hovered-over-element, no hit-test-performed.

&gt; The idea that a hit test returns a result that says &quot;I didn&apos;t hit anything&quot; seems more sensible to me.  I think perhaps you are thinking of the HitTestResult as &quot;items found by the hit test,&quot; whereas I think of it more like GAsyncResult.

Yes, because that&apos;s the case. In GAsyncResult the user asks for it. When we add the hit test api, a hit test operation will never return NULL. In this case we are only interested in the elements and context at the current mouse position, and if there&apos;s nothing interesting we just pass NULL. We have documented that a hit test is performed to get the information, the user is not expected to use this signal to perform hot tests. For that use case we don&apos;t need a new signal at all, just connect to motion-notify and do a hit test for the motion coordinates (when we add the api).

&gt; &gt; &gt; Is it important to only send the first hover event?
&gt; &gt; 
&gt; &gt; Emitting the signal a lot of times with the same hit test result means apps would need to check whether it&apos;s the same or not.
&gt; &gt; 
&gt; &gt; &gt; If it&apos;s because this causes a lot of CPU usage,
&gt; &gt; 
&gt; &gt; It&apos;s not only because the CPU usage, it makes the API easier to use. The signal is called hovered-over-element, I woulnd&apos;t expect it to be emitted twice for the same element. This the same behaviour of the webkit1 hovering-link signal, fwiw. 
&gt; 
&gt; I&apos;m this case, I think this particular change (only emitting the signal once per element) is probably fine in the end.

Qt does the same fwiw.

&gt; As long as a new HitTest is always sent when you stop hovering on an element, this seems safe.

Exactly, that&apos;s what the NULL hit test is for, it allows applications to reset the status bar, for example when mouse is moved out of a link.

&gt; &gt; &gt; I think we should just rate limit here than changing the behavior entirely.
&gt; &gt; what behaviour are we changing?
&gt; 
&gt; We&apos;re changing the behavior from the WebKit2 C API. Part of the reason I&apos;m so picky about some of this stuff is that we are going under the assumption that the C API could possibly be removed.

What I understood when I talked to apple guys was that the C API is not going to be removed, but replaces by a C++ one.

&gt; If the C API is removed, we&apos;ll need to rewrite the WebKitTestRunner against the GObject API. If that happens, we may not be able to properly run all the tests if the API isn&apos;t rich enough. In this case, I think you&apos;ve convinced me that it&apos;s a fairly safe change though.

In this case you can just connect to motion-notify and do a hit test if that&apos;s what WTR needs.

&gt; &gt; &gt;  I dislike the idea of making this signal too different from the underlying C API signal before we know whether or not it&apos;s important.
&gt; &gt; 
&gt; &gt; I think it&apos;s important, try to implement the url hovering in minibrowser if this signal is emitted a lot of times for the same link. I dislike the idea of making this signal too different from the WebKit1 equivalent :-P
&gt; 
&gt; In WebKit1 it seems that the signal is emmitted every time ChromeClient::mouseDidMoveOverElement is called, so wouldn&apos;t this be a change?

bool isLink = hit.isLiveLink();
    if (isLink) {
        KURL url = hit.absoluteLinkURL();
        if (!url.isEmpty() &amp;&amp; url != m_hoveredLinkURL) {
            TextDirection dir;
            CString titleString = hit.title(dir).utf8();
            CString urlString = url.string().utf8();
            g_signal_emit_by_name(m_webView, &quot;hovering-over-link&quot;, titleString.data(), urlString.data());
            m_hoveredLinkURL = url;
        }
    } else if (!isLink &amp;&amp; !m_hoveredLinkURL.isEmpty()) {
        g_signal_emit_by_name(m_webView, &quot;hovering-over-link&quot;, 0, 0);
        m_hoveredLinkURL = KURL();
    }

It does the same, if url is not empty and is not the same than the previous one, signal is emitted and new url is saved, if it&apos;s not a link or there&apos;s no previous one, the signal is emitted with NULL.

&gt; In any case, either behavior is probably fine here.

Great.

&gt; &gt; &gt;  I also think it&apos;s consistent. An empty hit test result is still a hit test result.
&gt; &gt; 
&gt; &gt; NULL is an empty hit test result. I don&apos;t want apps checking all the possible values of a hit test result object and all of the returning NULL.
&gt; 
&gt; Why not add a webkit_hit_test_is_empty method then? The apps can also check if context is 0. I think this is safer than having this value be null.

Because from the API pov a hit test result is never empty, WEBKIT_HIT_TEST_RESULT_CONTEXT_DOCUMENT is always present in context.

&gt; &gt; &gt; I think it makes sense to just extend WebViewTest with another fixture. If you add this the name &quot;UIClientTest&quot; is no longer strictly accurate.
&gt; &gt; 
&gt; &gt; mouseDidMoveOverElement is a callback of the UI Client. 
&gt; 
&gt; You&apos;re absolutely right.

Maybe we can move that fixture to a new file TestUIClient if we see it grows too much.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>552919</commentid>
    <comment_count>9</comment_count>
      <attachid>126250</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-02-09 00:22:36 -0800</bug_when>
    <thetext>Created attachment 126250
Updated patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>552921</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-09 00:25:31 -0800</bug_when>
    <thetext>Attachment 126250 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;ChangeLog&apos;, u&apos;Source/WebKit2/ChangeLog&apos;, u...&quot; exit_code: 1

WARNING: File exempt from style guide. Skipping: &quot;Source/WebKit2/UIProcess/API/gtk/WebKitWebView.h&quot;
Source/WebKit2/UIProcess/API/gtk/WebKitHitTestResult.cpp:266:  Use 0 instead of NULL.  [readability/null] [5]
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/WebKitHitTestResult.h&quot;
Total errors found: 1 in 21 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>553131</commentid>
    <comment_count>11</comment_count>
      <attachid>126297</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-02-09 06:54:09 -0800</bug_when>
    <thetext>Created attachment 126297
Updated patch

Renamed the signal as mouse-target-changed as suggested by Martin so that it makes sense to pass empty hit test results to the callback.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>553139</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-09 07:05:10 -0800</bug_when>
    <thetext>Attachment 126297 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;ChangeLog&apos;, u&apos;Source/WebKit2/ChangeLog&apos;, u...&quot; exit_code: 1

WARNING: File exempt from style guide. Skipping: &quot;Source/WebKit2/UIProcess/API/gtk/WebKitWebView.h&quot;
Source/WebKit2/UIProcess/API/gtk/WebKitHitTestResult.cpp:266:  Use 0 instead of NULL.  [readability/null] [5]
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/WebKitHitTestResult.h&quot;
Total errors found: 1 in 21 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>553204</commentid>
    <comment_count>13</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-02-09 08:51:26 -0800</bug_when>
    <thetext>Committed r107250: &lt;http://trac.webkit.org/changeset/107250&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>126042</attachid>
            <date>2012-02-08 03:16:23 -0800</date>
            <delta_ts>2012-02-09 00:22:36 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>wk2-hovered-over-element.diff</filename>
            <type>text/plain</type>
            <size>57389</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCAyOGVlOGZhLi5kOGVkY2Vk
IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAK
KzIwMTItMDItMDggIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgor
CisgICAgICAgIFtHVEtdIEFkZCBXZWJLaXRXZWJWaWV3Ojpob3ZlcmVkLW92ZXItZWxlbWVudCBz
aWduYWwgdG8gV2ViS2l0MiBHVEsrIEFQSQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NzgwOTcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAqIFNvdXJjZS9hdXRvdG9vbHMvc3ltYm9scy5maWx0ZXI6IEFkZCBm
cmVlT3duZWRHUHRyPF9HZGtFdmVudD4KKyAgICAgICAgc3ltYm9sIHRvIGJlIGFibGUgdG8gdXNl
IEdPd25QdHI8R2RrRXZlbnQ+IGluIFdlYktpdDIgR1RLKyB1bml0IHRlc3RzLgorCiAyMDEyLTAy
LTA3ICBHeXV5b3VuZyBLaW0gIDxneXV5b3VuZy5raW1Ac2Ftc3VuZy5jb20+CiAKICAgICAgICAg
W0NNQUtFXSBVc2UgKmJpbiogYW5kICpsaWIqIGRpcmVjdG9yaWVzIGZvciBleGVjdXRhYmxlIGFu
ZCBsaWJyYXJpZXMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3Vy
Y2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggODAxYmNkMi4uZmIzMTM4ZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDc1IEBACisyMDEyLTAyLTA4ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJj
aWFAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXSBBZGQgV2ViS2l0V2ViVmlldzo6aG92ZXJl
ZC1vdmVyLWVsZW1lbnQgc2lnbmFsIHRvIFdlYktpdDIgR1RLKyBBUEkKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc4MDk3CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbTogQWRkIG5l
dyBmaWxlcyB0byBjb21waWxhdGlvbi4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJL
aXRIaXRUZXN0UmVzdWx0LmNwcDogQWRkZWQuCisgICAgICAgICh3ZWJraXRIaXRUZXN0UmVzdWx0
RmluYWxpemUpOgorICAgICAgICAod2Via2l0SGl0VGVzdFJlc3VsdEdldFByb3BlcnR5KToKKyAg
ICAgICAgKHdlYmtpdEhpdFRlc3RSZXN1bHRTZXRQcm9wZXJ0eSk6CisgICAgICAgICh3ZWJraXRf
aGl0X3Rlc3RfcmVzdWx0X2luaXQpOgorICAgICAgICAod2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9j
bGFzc19pbml0KToKKyAgICAgICAgKHdlYmtpdEhpdFRlc3RSZXN1bHRDcmVhdGUpOiBDcmVhdGUg
YSBuZXcgV2ViS2l0SGl0VGVzdFJlc3VsdCBmb3IKKyAgICAgICAgdGhlIGdpdmVuIFdLSGl0VGVz
dFJlc3VsdC4KKyAgICAgICAgKHN0cmluZ0lzRXF1YWxUb0NTdHJpbmcpOiBIZWxwZXIgZnVuY3Rp
b24gdG8gY29tcGFyZSBTdHJpbmcgYW5kCisgICAgICAgIENTdHJpbmcgY29uc2lkZXJpbmcgU3Ry
aW5nOjppc0VtcHR5KCkgPT0gQ1N0cmluZy5pc051bGwoKQorICAgICAgICAod2Via2l0SGl0VGVz
dFJlc3VsdENvbXBhcmUpOiBIZWxwZXIgZnVuY3Rpb24gdG8gY2hlY2sgd2hldGhlciBhCisgICAg
ICAgIFdlYktpdEhpdFRlc3RSZXN1bHQgY29udGFpbnMgdGhlIHNhbWUgaW5mb3JtYXRpb24gdGhh
biB0aGUgZ2l2ZW4KKyAgICAgICAgV0tIaXRUZXN0UmVzdWx0LgorICAgICAgICAod2tIaXRUZXN0
UmVzdWx0SXNFbXB0eSk6IEhlbHBlciBmdW5jdGlvbiB0byBjaGVjayB3aGV0aGVyIGFsbAorICAg
ICAgICBXS0hpdFRlc3RSZXN1bHQgY29udGVudHMgYXJlIGVtcHR5LgorICAgICAgICAod2Via2l0
X2hpdF90ZXN0X3Jlc3VsdF9nZXRfY29udGV4dCk6CisgICAgICAgICh3ZWJraXRfaGl0X3Rlc3Rf
cmVzdWx0X2NvbnRleHRfaXNfbGluayk6CisgICAgICAgICh3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0
X2NvbnRleHRfaXNfaW1hZ2UpOgorICAgICAgICAod2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250
ZXh0X2lzX21lZGlhKToKKyAgICAgICAgKHdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfZ2V0X2xpbmtf
dXJpKToKKyAgICAgICAgKHdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfZ2V0X2xpbmtfdGl0bGUpOgor
ICAgICAgICAod2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9nZXRfbGlua19sYWJlbCk6CisgICAgICAg
ICh3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2dldF9pbWFnZV91cmkpOgorICAgICAgICAod2Via2l0
X2hpdF90ZXN0X3Jlc3VsdF9nZXRfbWVkaWFfdXJpKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L2d0ay9XZWJLaXRIaXRUZXN0UmVzdWx0Lmg6IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvZ3RrL1dlYktpdEhpdFRlc3RSZXN1bHRQcml2YXRlLmg6CisgICAgICAgICogVUlQcm9jZXNz
L0FQSS9ndGsvV2ViS2l0TmF2aWdhdGlvblBvbGljeURlY2lzaW9uLmNwcDoKKyAgICAgICAgKHdl
YmtpdE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbkNyZWF0ZSk6IFVzZSB3a0V2ZW50TW9kaWZpZXJz
VG9HZGtNb2RpZmllcnMuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0UHJpdmF0
ZS5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtp
dDIuaC4KKyAgICAgICAgKHdrRXZlbnRNb2RpZmllcnNUb0dka01vZGlmaWVycyk6IE1vdmVkIGZy
b20KKyAgICAgICAgV2ViS2l0TmF2aWdhdGlvblBvbGljeURlY2lzaW9uIGFuZCByZW5hbWVkIHRv
IHdrRXZlbnRNb2RpZmllcnNUb0dka01vZGlmaWVycy4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L2d0ay9XZWJLaXRQcml2YXRlLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0
VUlDbGllbnQuY3BwOgorICAgICAgICAobW91c2VEaWRNb3ZlT3ZlckVsZW1lbnQpOiBVSSBjbGll
bnQgY2FsbGJhY2sgdGhhdCBjYWxscworICAgICAgICB3ZWJraXRXZWJWaWV3SG92ZXJlZEVsZW1l
bnQoKS4KKyAgICAgICAgKGF0dGFjaFVJQ2xpZW50VG9WaWV3KTogQWRkIGltcGxlbWVudGF0aW9u
IGZvciBjYWxsYmFjaworICAgICAgICBtb3VzZURpZE1vdmVPdmVyRWxlbWVudC4KKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmNwcDoKKyAgICAgICAgKHdlYmtpdF93
ZWJfdmlld19jbGFzc19pbml0KTogQWRkCisgICAgICAgIFdlYktpdFdlYlZpZXc6OmhvdmVyZWQt
b3Zlci1lbGVtZW50IHNpZ25hbC4KKyAgICAgICAgKHdlYmtpdFdlYlZpZXdIb3ZlcmVkRWxlbWVu
dCk6IEVtaXQKKyAgICAgICAgV2ViS2l0V2ViVmlldzo6aG92ZXJlZC1vdmVyLWVsZW1lbnQuCisg
ICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5oOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdQcml2YXRlLmg6CisgICAgICAgICogVUlQcm9j
ZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLWRvY3Muc2dtbDogQWRkIG5ldyBzZWN0aW9uIGZv
cgorICAgICAgICBXZWJLaXRIaXRUZXN0UmVzdWx0LgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
Z3RrL2RvY3Mvd2Via2l0Mmd0ay1zZWN0aW9ucy50eHQ6IEFkZCBuZXcgc3ltYm9scy4KKyAgICAg
ICAgKiBVSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0V2ViVmlldy5jcHA6CisgICAg
ICAgICh0ZXN0V2ViVmlld0hvdmVyZWRFbGVtZW50KToKKyAgICAgICAgKGJlZm9yZUFsbCk6Cisg
ICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvV2ViVmlld1Rlc3QuY3BwOgorICAgICAg
ICAoV2ViVmlld1Rlc3Q6OldlYlZpZXdUZXN0KToKKyAgICAgICAgKFdlYlZpZXdUZXN0Ojp+V2Vi
Vmlld1Rlc3QpOgorICAgICAgICAocGFyZW50V2luZG93TWFwcGVkKToKKyAgICAgICAgKFdlYlZp
ZXdUZXN0OjpzaG93SW5XaW5kb3dBbmRXYWl0VW50aWxNYXBwZWQpOiBNZXRob2QgdG8gYWRkIHRo
ZQorICAgICAgICB2aWV3IGludG8gYSBwb3B1cCB3aW5kb3cgYW5kIHNob3cgaXQgcnVubmluZyB0
aGUgbWFpbiBsb29wIHVudGlsCisgICAgICAgIHRoZSB3aW5kb3cgaXMgbWFwcGVkLgorICAgICAg
ICAoV2ViVmlld1Rlc3Q6Om1vdXNlTW92ZVRvKTogTWV0aG9kIHRvIHN5bnRoZXNpemUgYQorICAg
ICAgICBHREtfTU9USU9OX0VWRU5UIG9uIHRoZSBnaXZlbiBjb29yZGluYXRlcyBhbmQgdXNpbmcg
dGhlIGdpdmVuCisgICAgICAgIG1vZGlmaWVycy4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0
ay90ZXN0cy9XZWJWaWV3VGVzdC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtp
dDIuaDogSW5jbHVkZSBXZWJLaXRIaXRUZXN0UmVzdWx0LmguCisgICAgICAgICogVUlQcm9jZXNz
L0FQSS9ndGsvd2Via2l0Mm1hcnNoYWwubGlzdDoKKwogMjAxMi0wMi0wNyAgTWFydGluIFJvYmlu
c29uICA8bXJvYmluc29uQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dUS10gW1dLMl0gQWRkIFdl
YktpdFJlc3BvbnNlUG9saWN5RGVjaXNpb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0dO
VW1ha2VmaWxlLmFtIGIvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUuYW0KaW5kZXggMmIzNmVk
My4uM2I4ZTdiZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUuYW0KKysr
IGIvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUuYW0KQEAgLTg4LDYgKzg4LDcgQEAgbGlid2Vi
a2l0Mmd0a2luY2x1ZGVfSEVBREVSUyA9IFwKIAkkKFdlYktpdDIpL1VJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdERvd25sb2FkLmggXAogCSQoV2ViS2l0MikvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0
RWRpdGluZ0NvbW1hbmRzLmggXAogCSQoV2ViS2l0MikvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0
RXJyb3IuaCBcCisJJChXZWJLaXQyKS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRIaXRUZXN0UmVz
dWx0LmggXAogCSQoV2ViS2l0MikvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0TmF2aWdhdGlvblBv
bGljeURlY2lzaW9uLmggXAogCSQoV2ViS2l0MikvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0UG9s
aWN5RGVjaXNpb24uaCBcCiAJJChXZWJLaXQyKS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRSZXNw
b25zZVBvbGljeURlY2lzaW9uLmggXApAQCAtNTM5LDYgKzU0MCw5IEBAIGxpYndlYmtpdDJndGtf
QFdFQktJVEdUS19BUElfTUFKT1JfVkVSU0lPTkBfQFdFQktJVEdUS19BUElfTUlOT1JfVkVSU0lP
TkBfbGFfU09VCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RWRpdGlu
Z0NvbW1hbmRzLmggXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEVy
cm9yLmggXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEVycm9yLmNw
cCBcCisJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0SGl0VGVzdFJlc3Vs
dC5jcHAgXAorCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEhpdFRlc3RS
ZXN1bHQuaCBcCisJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0SGl0VGVz
dFJlc3VsdFByaXZhdGUuaCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2Vi
S2l0TG9hZGVyQ2xpZW50LmggXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dl
YktpdExvYWRlckNsaWVudC5jcHAgXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbi5jcHAgXApAQCAtNTUwLDYgKzU1NCw3IEBA
IGxpYndlYmtpdDJndGtfQFdFQktJVEdUS19BUElfTUFKT1JfVkVSU0lPTkBfQFdFQktJVEdUS19B
UElfTUlOT1JfVkVSU0lPTkBfbGFfU09VCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0UG9saWN5Q2xpZW50LmNwcCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0UG9saWN5Q2xpZW50LmggXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL1dlYktpdFByaXZhdGUuaCBcCisJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0UHJpdmF0ZS5jcHAgXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdFJlc3BvbnNlUG9saWN5RGVjaXNpb24uY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay9XZWJLaXRSZXNwb25zZVBvbGljeURlY2lzaW9uLmggXAogCVNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFJlc3BvbnNlUG9saWN5RGVjaXNpb25Qcml2
YXRlLmggXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2Vi
S2l0SGl0VGVzdFJlc3VsdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXRIaXRUZXN0UmVzdWx0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li5hODgwMTdiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0SGl0VGVzdFJlc3VsdC5jcHAKQEAgLTAsMCArMSw0MzkgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIldlYktpdEhpdFRlc3RSZXN1bHQuaCIKKworI2luY2x1ZGUgIldlYkhpdFRlc3RSZXN1bHQu
aCIKKyNpbmNsdWRlICJXZWJLaXRIaXRUZXN0UmVzdWx0UHJpdmF0ZS5oIgorI2luY2x1ZGUgPGds
aWIvZ2kxOG4tbGliLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCisvKioKKyAq
IFNFQ1RJT046IFdlYktpdEhpdFRlc3RSZXN1bHQKKyAqIEBTaG9ydF9kZXNjcmlwdGlvbjogUmVz
dWx0IG9mIGEgSGl0IFRlc3QKKyAqIEBUaXRsZTogV2ViS2l0SGl0VGVzdFJlc3VsdAorICogQFNl
ZV9hbHNvOiAjV2ViS2l0V2ViVmlldworICoKKyAqIEEgSGl0IFRlc3QgaXMgYW4gb3BlcmF0aW9u
IHRvIGdldCBjb250ZXh0IGluZm9ybWF0aW9uIGFib3V0IGEgZ2l2ZW4KKyAqIHBvaW50IGluIGEg
I1dlYktpdFdlYlZpZXcuICNXZWJLaXRIaXRUZXN0UmVzdWx0IHJlcHJlc2VudHMgdGhlCisgKiBy
ZXN1bHQgb2YgYSBIaXQgVGVzdC4gSXQgcHJvdmlkZXMgY29udGV4dCBpbmZvcm1hdGlvbiBhYm91
dCB3aGF0IGlzCisgKiBhdCB0aGUgY29vcmRpbmF0ZXMgb2YgdGhlIEhpdCBUZXN0LCBzdWNoIGFz
IGlmIHRoZXJlJ3MgYSBsaW5rLAorICogYW4gaW1hZ2Ugb3IgYSBtZWRpYS4KKyAqCisgKiBZb3Ug
Y2FuIGdldCB0aGUgY29udGV4dCBvZiB0aGUgSGl0VGVzdFJlc3VsdCB3aXRoCisgKiB3ZWJraXRf
aGl0X3Rlc3RfcmVzdWx0X2dldF9jb250ZXh0KCkgdGhhdCByZXR1cm5zIGEgYml0bWFzayBvZgor
ICogI1dlYktpdEhpdFRlc3RSZXN1bHRDb250ZXh0IGZsYWdzLiBZb3UgY2FuIGFsc28gdXNlCisg
KiB3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfbGluaygpLCB3ZWJraXRfaGl0X3Rl
c3RfcmVzdWx0X2NvbnRleHRfaXNfaW1hZ2UoKSBhbmQKKyAqIHdlYmtpdF9oaXRfdGVzdF9yZXN1
bHRfY29udGV4dF9pc19tZWRpYSgpIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZXJlJ3MKKyAqIGEg
bGluaywgaW1hZ2Ugb3IgbWVkaWEgZWxlbWVudCBpbiB0aGUgY29vcmRpbmF0ZXMgb2YgdGhlIEhp
dCBUZXN0LgorICogTm90ZSB0aGF0IGl0J3MgcG9zc2libGUgdGhhdCBzZXZlcmFsICNXZWJLaXRI
aXRUZXN0UmVzdWx0Q29udGV4dCBmbGFncworICogYXJlIGFjdGl2ZSBhdCB0aGUgc2FtZSB0aW1l
LCBmb3IgZXhhbXBsZSBpZiB0aGVyZSdzIGEgbGluayBjb250YWluaW5nIGFuZCBpbWFnZS4KKyAq
CisgKiBXaGVuIHRoZSBtb3VzZSBpcyBtb3ZlZCBvdmVyIGEgI1dlYktpdFdlYlZpZXcgYSBIaXQg
VGVzdCBpcyBwZXJmb3JtZWQKKyAqIGZvciB0aGUgbW91c2UgY29vcmRpbmF0ZXMgYW5kICNXZWJL
aXRXZWJWaWV3Ojpob3ZlcmVkLW92ZXItZWxlbWVudAorICogc2lnbmFsIGlzIGVtaXR0ZWQgd2l0
aCBhICNXZWJLaXRIaXRUZXN0UmVzdWx0LgorICoKKyAqLworCit1c2luZyBuYW1lc3BhY2UgV2Vi
S2l0OworCitlbnVtIHsKKyAgICBQUk9QXzAsCisKKyAgICBQUk9QX0NPTlRFWFQsCisgICAgUFJP
UF9MSU5LX1VSSSwKKyAgICBQUk9QX0xJTktfVElUTEUsCisgICAgUFJPUF9MSU5LX0xBQkVMLAor
ICAgIFBST1BfSU1BR0VfVVJJLAorICAgIFBST1BfTUVESUFfVVJJCit9OworCitzdHJ1Y3QgX1dl
YktpdEhpdFRlc3RSZXN1bHRQcml2YXRlIHsKKyAgICB1bnNpZ25lZCBpbnQgY29udGV4dDsKKyAg
ICBDU3RyaW5nIGxpbmtVUkk7CisgICAgQ1N0cmluZyBsaW5rVGl0bGU7CisgICAgQ1N0cmluZyBs
aW5rTGFiZWw7CisgICAgQ1N0cmluZyBpbWFnZVVSSTsKKyAgICBDU3RyaW5nIG1lZGlhVVJJOwor
fTsKKworR19ERUZJTkVfVFlQRShXZWJLaXRIaXRUZXN0UmVzdWx0LCB3ZWJraXRfaGl0X3Rlc3Rf
cmVzdWx0LCBHX1RZUEVfT0JKRUNUKQorCitzdGF0aWMgdm9pZCB3ZWJraXRIaXRUZXN0UmVzdWx0
RmluYWxpemUoR09iamVjdCogb2JqZWN0KQoreworICAgIFdFQktJVF9ISVRfVEVTVF9SRVNVTFQo
b2JqZWN0KS0+cHJpdi0+fldlYktpdEhpdFRlc3RSZXN1bHRQcml2YXRlKCk7CisgICAgR19PQkpF
Q1RfQ0xBU1Mod2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShv
YmplY3QpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRIaXRUZXN0UmVzdWx0R2V0UHJvcGVydHko
R09iamVjdCogb2JqZWN0LCBndWludCBwcm9wSWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMq
IHBhcmFtU3BlYykKK3sKKyAgICBXZWJLaXRIaXRUZXN0UmVzdWx0KiBoaXRUZXN0UmVzdWx0ID0g
V0VCS0lUX0hJVF9URVNUX1JFU1VMVChvYmplY3QpOworCisgICAgc3dpdGNoIChwcm9wSWQpIHsK
KyAgICBjYXNlIFBST1BfQ09OVEVYVDoKKyAgICAgICAgZ192YWx1ZV9zZXRfdWludCh2YWx1ZSwg
d2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9nZXRfY29udGV4dChoaXRUZXN0UmVzdWx0KSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9MSU5LX1VSSToKKyAgICAgICAgZ192YWx1ZV9zZXRf
c3RyaW5nKHZhbHVlLCB3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2dldF9saW5rX3VyaShoaXRUZXN0
UmVzdWx0KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9MSU5LX1RJVExFOgorICAg
ICAgICBnX3ZhbHVlX3NldF9zdHJpbmcodmFsdWUsIHdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfZ2V0
X2xpbmtfdGl0bGUoaGl0VGVzdFJlc3VsdCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBS
T1BfTElOS19MQUJFTDoKKyAgICAgICAgZ192YWx1ZV9zZXRfc3RyaW5nKHZhbHVlLCB3ZWJraXRf
aGl0X3Rlc3RfcmVzdWx0X2dldF9saW5rX2xhYmVsKGhpdFRlc3RSZXN1bHQpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBQUk9QX0lNQUdFX1VSSToKKyAgICAgICAgZ192YWx1ZV9zZXRfc3Ry
aW5nKHZhbHVlLCB3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2dldF9pbWFnZV91cmkoaGl0VGVzdFJl
c3VsdCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfTUVESUFfVVJJOgorICAgICAg
ICBnX3ZhbHVlX3NldF9zdHJpbmcodmFsdWUsIHdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfZ2V0X21l
ZGlhX3VyaShoaXRUZXN0UmVzdWx0KSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6Cisg
ICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BJZCwg
cGFyYW1TcGVjKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdEhpdFRlc3RSZXN1bHRT
ZXRQcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BJZCwgY29uc3QgR1ZhbHVlKiB2
YWx1ZSwgR1BhcmFtU3BlYyogcGFyYW1TcGVjKQoreworICAgIFdlYktpdEhpdFRlc3RSZXN1bHQq
IGhpdFRlc3RSZXN1bHQgPSBXRUJLSVRfSElUX1RFU1RfUkVTVUxUKG9iamVjdCk7CisKKyAgICBz
d2l0Y2ggKHByb3BJZCkgeworICAgIGNhc2UgUFJPUF9DT05URVhUOgorICAgICAgICBoaXRUZXN0
UmVzdWx0LT5wcml2LT5jb250ZXh0ID0gZ192YWx1ZV9nZXRfdWludCh2YWx1ZSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgUFJPUF9MSU5LX1VSSToKKyAgICAgICAgaGl0VGVzdFJlc3VsdC0+
cHJpdi0+bGlua1VSSSA9IGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgUFJPUF9MSU5LX1RJVExFOgorICAgICAgICBoaXRUZXN0UmVzdWx0LT5wcml2
LT5saW5rVGl0bGUgPSBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIFBST1BfTElOS19MQUJFTDoKKyAgICAgICAgaGl0VGVzdFJlc3VsdC0+cHJpdi0+
bGlua0xhYmVsID0gZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBQUk9QX0lNQUdFX1VSSToKKyAgICAgICAgaGl0VGVzdFJlc3VsdC0+cHJpdi0+aW1h
Z2VVUkkgPSBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIFBST1BfTUVESUFfVVJJOgorICAgICAgICBoaXRUZXN0UmVzdWx0LT5wcml2LT5tZWRpYVVS
SSA9IGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1
bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHBy
b3BJZCwgcGFyYW1TcGVjKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9oaXRfdGVz
dF9yZXN1bHRfaW5pdChXZWJLaXRIaXRUZXN0UmVzdWx0KiBoaXRUZXN0UmVzdWx0KQoreworICAg
IFdlYktpdEhpdFRlc3RSZXN1bHRQcml2YXRlKiBwcml2ID0gR19UWVBFX0lOU1RBTkNFX0dFVF9Q
UklWQVRFKGhpdFRlc3RSZXN1bHQsIFdFQktJVF9UWVBFX0hJVF9URVNUX1JFU1VMVCwgV2ViS2l0
SGl0VGVzdFJlc3VsdFByaXZhdGUpOworICAgIGhpdFRlc3RSZXN1bHQtPnByaXYgPSBwcml2Owor
ICAgIG5ldyAocHJpdikgV2ViS2l0SGl0VGVzdFJlc3VsdFByaXZhdGUoKTsKK30KKworc3RhdGlj
IHZvaWQgd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jbGFzc19pbml0KFdlYktpdEhpdFRlc3RSZXN1
bHRDbGFzcyogaGl0VGVzdFJlc3VsdENsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyogb2JqZWN0
Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhoaXRUZXN0UmVzdWx0Q2xhc3MpOworICAgIG9iamVjdENs
YXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJraXRIaXRUZXN0UmVzdWx0R2V0UHJvcGVydHk7CisgICAg
b2JqZWN0Q2xhc3MtPnNldF9wcm9wZXJ0eSA9IHdlYmtpdEhpdFRlc3RSZXN1bHRTZXRQcm9wZXJ0
eTsKKyAgICBvYmplY3RDbGFzcy0+ZmluYWxpemUgPSB3ZWJraXRIaXRUZXN0UmVzdWx0RmluYWxp
emU7CisKKyAgICBHUGFyYW1GbGFncyBwYXJhbUZsYWdzID0gc3RhdGljX2Nhc3Q8R1BhcmFtRmxh
Z3M+KFdFQktJVF9QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX0NPTlNUUlVDVF9PTkxZKTsKKwor
ICAgIC8qKgorICAgICAqIFdlYktpdEhpdFRlc3RSZXN1bHQ6Y29udGV4dDoKKyAgICAgKgorICAg
ICAqIEJpdG1hc2sgb2YgI1dlYktpdEhpdFRlc3RSZXN1bHRDb250ZXh0IGZsYWdzIHJlcHJlc2Vu
dGluZworICAgICAqIHRoZSBjb250ZXh0IG9mIHRoZSAjV2ViS2l0SGl0VGVzdFJlc3VsdC4KKyAg
ICAgKi8KKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KG9iamVjdENsYXNzLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPUF9DT05URVhULAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVjX3VpbnQoImNvbnRleHQi
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XygiQ29udGV4dCIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXygiRmxhZ3Mgd2l0aCB0aGUgY29udGV4dCBvZiB0aGUgV2ViS2l0SGl0VGVz
dFJlc3VsdCIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMCwgR19NQVhVSU5ULCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1GbGFncykpOworCisgICAgLyoqCisgICAgICog
V2ViS2l0SGl0VGVzdFJlc3VsdDpsaW5rLXVyaToKKyAgICAgKgorICAgICAqIFRoZSBVUkkgb2Yg
dGhlIGxpbmsgaWYgZmxhZyAlV0VCS0lUX0hJVF9URVNUX1JFU1VMVF9DT05URVhUX0xJTksKKyAg
ICAgKiBpcyBwcmVzZW50IGluICNXZWJLaXRIaXRUZXN0UmVzdWx0OmNvbnRleHQKKyAgICAgKi8K
KyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KG9iamVjdENsYXNzLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPUF9MSU5LX1VSSSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoImxpbmstdXJpIiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XygiTGluayBVUkkiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXygiVGhlIGxpbmsgVVJJIiksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtRmxhZ3MpKTsKKyAgICAv
KioKKyAgICAgKiBXZWJLaXRIaXRUZXN0UmVzdWx0OmxpbmstdGl0bGU6CisgICAgICoKKyAgICAg
KiBUaGUgdGl0bGUgb2YgdGhlIGxpbmsgaWYgZmxhZyAlV0VCS0lUX0hJVF9URVNUX1JFU1VMVF9D
T05URVhUX0xJTksKKyAgICAgKiBpcyBwcmVzZW50IGluICNXZWJLaXRIaXRUZXN0UmVzdWx0OmNv
bnRleHQKKyAgICAgKi8KKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KG9iamVj
dENsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPUF9MSU5LX1RJ
VExFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVjX3N0
cmluZygibGluay10aXRsZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF8oIkxpbmsgVGl0bGUiKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiVGhlIGxpbmsgdGl0bGUiKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcGFyYW1GbGFncykpOworICAgIC8qKgorICAgICAqIFdlYktpdEhpdFRlc3RSZXN1bHQ6bGlu
ay1sYWJlbDoKKyAgICAgKgorICAgICAqIFRoZSBsYWJlbCBvZiB0aGUgbGluayBpZiBmbGFnICVX
RUJLSVRfSElUX1RFU1RfUkVTVUxUX0NPTlRFWFRfTElOSworICAgICAqIGlzIHByZXNlbnQgaW4g
I1dlYktpdEhpdFRlc3RSZXN1bHQ6Y29udGV4dAorICAgICAqLworICAgIGdfb2JqZWN0X2NsYXNz
X2luc3RhbGxfcHJvcGVydHkob2JqZWN0Q2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBQUk9QX0xJTktfTEFCRUwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKCJsaW5rLWxhYmVsIiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiTGluayBMYWJlbCIp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfKCJUaGUgbGluayBsYWJlbCIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbUZsYWdzKSk7CisgICAgLyoqCisgICAgICog
V2ViS2l0SGl0VGVzdFJlc3VsdDppbWFnZS11cmk6CisgICAgICoKKyAgICAgKiBUaGUgVVJJIG9m
IHRoZSBpbWFnZSBpZiBmbGFnICVXRUJLSVRfSElUX1RFU1RfUkVTVUxUX0NPTlRFWFRfSU1BR0UK
KyAgICAgKiBpcyBwcmVzZW50IGluICNXZWJLaXRIaXRUZXN0UmVzdWx0OmNvbnRleHQKKyAgICAg
Ki8KKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KG9iamVjdENsYXNzLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPUF9JTUFHRV9VUkksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKCJpbWFnZS11
cmkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfKCJJbWFnZSBVUkkiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXygiVGhlIGltYWdlIFVSSSIpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbUZsYWdzKSk7
CisgICAgLyoqCisgICAgICogV2ViS2l0SGl0VGVzdFJlc3VsdDptZWRpYS11cmk6CisgICAgICoK
KyAgICAgKiBUaGUgVVJJIG9mIHRoZSBtZWRpYSBpZiBmbGFnICVXRUJLSVRfSElUX1RFU1RfUkVT
VUxUX0NPTlRFWFRfTUVESUEKKyAgICAgKiBpcyBwcmVzZW50IGluICNXZWJLaXRIaXRUZXN0UmVz
dWx0OmNvbnRleHQKKyAgICAgKi8KKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5
KG9iamVjdENsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPUF9N
RURJQV9VUkksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3BhcmFtX3Nw
ZWNfc3RyaW5nKCJtZWRpYS11cmkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfKCJNZWRpYSBVUkkiKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiVGhlIG1lZGlhIFVSSSIp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBwYXJhbUZsYWdzKSk7CisKKyAgICBnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUoaGl0VGVz
dFJlc3VsdENsYXNzLCBzaXplb2YoV2ViS2l0SGl0VGVzdFJlc3VsdFByaXZhdGUpKTsKK30KKwor
V2ViS2l0SGl0VGVzdFJlc3VsdCogd2Via2l0SGl0VGVzdFJlc3VsdENyZWF0ZShXS0hpdFRlc3RS
ZXN1bHRSZWYgd2tIaXRUZXN0UmVzdWx0KQoreworICAgIHVuc2lnbmVkIGNvbnRleHQgPSBXRUJL
SVRfSElUX1RFU1RfUkVTVUxUX0NPTlRFWFRfRE9DVU1FTlQ7CisKKyAgICBjb25zdCBTdHJpbmcm
IGxpbmtVUkwgPSB0b0ltcGwod2tIaXRUZXN0UmVzdWx0KS0+YWJzb2x1dGVMaW5rVVJMKCk7Cisg
ICAgaWYgKCFsaW5rVVJMLmlzRW1wdHkoKSkKKyAgICAgICAgY29udGV4dCB8PSBXRUJLSVRfSElU
X1RFU1RfUkVTVUxUX0NPTlRFWFRfTElOSzsKKworICAgIGNvbnN0IFN0cmluZyYgaW1hZ2VVUkwg
PSB0b0ltcGwod2tIaXRUZXN0UmVzdWx0KS0+YWJzb2x1dGVJbWFnZVVSTCgpOworICAgIGlmICgh
aW1hZ2VVUkwuaXNFbXB0eSgpKQorICAgICAgICBjb250ZXh0IHw9IFdFQktJVF9ISVRfVEVTVF9S
RVNVTFRfQ09OVEVYVF9JTUFHRTsKKworICAgIGNvbnN0IFN0cmluZyYgbWVkaWFVUkwgPSB0b0lt
cGwod2tIaXRUZXN0UmVzdWx0KS0+YWJzb2x1dGVNZWRpYVVSTCgpOworICAgIGlmICghbWVkaWFV
UkwuaXNFbXB0eSgpKQorICAgICAgICBjb250ZXh0IHw9IFdFQktJVF9ISVRfVEVTVF9SRVNVTFRf
Q09OVEVYVF9NRURJQTsKKworICAgIGNvbnN0IFN0cmluZyYgbGlua1RpdGxlID0gdG9JbXBsKHdr
SGl0VGVzdFJlc3VsdCktPmxpbmtUaXRsZSgpOworICAgIGNvbnN0IFN0cmluZyYgbGlua0xhYmVs
ID0gdG9JbXBsKHdrSGl0VGVzdFJlc3VsdCktPmxpbmtMYWJlbCgpOworCisgICAgcmV0dXJuIFdF
QktJVF9ISVRfVEVTVF9SRVNVTFQoZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX0hJVF9URVNUX1JF
U1VMVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNv
bnRleHQiLCBjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAibGluay11cmkiLCAhbGlua1VSTC5pc0VtcHR5KCkgPyBsaW5rVVJMLnV0ZjgoKS5k
YXRhKCkgOiAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAiaW1hZ2UtdXJpIiwgIWltYWdlVVJMLmlzRW1wdHkoKSA/IGltYWdlVVJMLnV0ZjgoKS5kYXRh
KCkgOiAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
bWVkaWEtdXJpIiwgIW1lZGlhVVJMLmlzRW1wdHkoKSA/IG1lZGlhVVJMLnV0ZjgoKS5kYXRhKCkg
OiAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGlu
ay10aXRsZSIsICFsaW5rVGl0bGUuaXNFbXB0eSgpID8gbGlua1RpdGxlLnV0ZjgoKS5kYXRhKCkg
OiAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGlu
ay1sYWJlbCIsICFsaW5rTGFiZWwuaXNFbXB0eSgpID8gbGlua0xhYmVsLnV0ZjgoKS5kYXRhKCkg
OiAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxM
KSk7Cit9CisKK3N0YXRpYyBib29sIHN0cmluZ0lzRXF1YWxUb0NTdHJpbmcoY29uc3QgU3RyaW5n
JiBzdHJpbmcsIGNvbnN0IENTdHJpbmcmIGNTdHJpbmcpCit7CisgICAgcmV0dXJuICgoc3RyaW5n
LmlzRW1wdHkoKSAmJiBjU3RyaW5nLmlzTnVsbCgpKSB8fCAoc3RyaW5nLnV0ZjgoKSA9PSBjU3Ry
aW5nKSk7Cit9CisKK2Jvb2wgd2Via2l0SGl0VGVzdFJlc3VsdENvbXBhcmUoV2ViS2l0SGl0VGVz
dFJlc3VsdCogaGl0VGVzdFJlc3VsdCwgV0tIaXRUZXN0UmVzdWx0UmVmIHdrSGl0VGVzdFJlc3Vs
dCkKK3sKKyAgICBXZWJLaXRIaXRUZXN0UmVzdWx0UHJpdmF0ZSogcHJpdiA9IGhpdFRlc3RSZXN1
bHQtPnByaXY7CisgICAgcmV0dXJuIHN0cmluZ0lzRXF1YWxUb0NTdHJpbmcodG9JbXBsKHdrSGl0
VGVzdFJlc3VsdCktPmFic29sdXRlTGlua1VSTCgpLCBwcml2LT5saW5rVVJJKQorICAgICAgICAm
JiBzdHJpbmdJc0VxdWFsVG9DU3RyaW5nKHRvSW1wbCh3a0hpdFRlc3RSZXN1bHQpLT5saW5rVGl0
bGUoKSwgcHJpdi0+bGlua1RpdGxlKQorICAgICAgICAmJiBzdHJpbmdJc0VxdWFsVG9DU3RyaW5n
KHRvSW1wbCh3a0hpdFRlc3RSZXN1bHQpLT5saW5rTGFiZWwoKSwgcHJpdi0+bGlua0xhYmVsKQor
ICAgICAgICAmJiBzdHJpbmdJc0VxdWFsVG9DU3RyaW5nKHRvSW1wbCh3a0hpdFRlc3RSZXN1bHQp
LT5hYnNvbHV0ZUltYWdlVVJMKCksIHByaXYtPmltYWdlVVJJKQorICAgICAgICAmJiBzdHJpbmdJ
c0VxdWFsVG9DU3RyaW5nKHRvSW1wbCh3a0hpdFRlc3RSZXN1bHQpLT5hYnNvbHV0ZU1lZGlhVVJM
KCksIHByaXYtPm1lZGlhVVJJKTsKK30KKworYm9vbCB3a0hpdFRlc3RSZXN1bHRJc0VtcHR5KFdL
SGl0VGVzdFJlc3VsdFJlZiB3a0hpdFRlc3RSZXN1bHQpCit7CisgICAgcmV0dXJuIHRvSW1wbCh3
a0hpdFRlc3RSZXN1bHQpLT5hYnNvbHV0ZUxpbmtVUkwoKS5pc0VtcHR5KCkKKyAgICAgICAgJiYg
dG9JbXBsKHdrSGl0VGVzdFJlc3VsdCktPmFic29sdXRlSW1hZ2VVUkwoKS5pc0VtcHR5KCkKKyAg
ICAgICAgJiYgdG9JbXBsKHdrSGl0VGVzdFJlc3VsdCktPmFic29sdXRlTWVkaWFVUkwoKS5pc0Vt
cHR5KCkKKyAgICAgICAgJiYgdG9JbXBsKHdrSGl0VGVzdFJlc3VsdCktPmxpbmtUaXRsZSgpLmlz
RW1wdHkoKQorICAgICAgICAmJiB0b0ltcGwod2tIaXRUZXN0UmVzdWx0KS0+bGlua0xhYmVsKCku
aXNFbXB0eSgpOworfQorCisvKioKKyAqIHdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfZ2V0X2NvbnRl
eHQ6CisgKiBAaGl0X3Rlc3RfcmVzdWx0OiBhICNXZWJLaXRIaXRUZXN0UmVzdWx0CisgKgorICog
R2V0cyB0aGUgdmFsdWUgb2YgdGhlICNXZWJLaXRIaXRUZXN0UmVzdWx0OmNvbnRleHQgcHJvcGVy
dHkuCisgKgorICogUmV0dXJuczogYSBiaXRtYXNrIG9mICNXZWJLaXRIaXRUZXN0UmVzdWx0Q29u
dGV4dCBmbGFncworICovCitndWludCB3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2dldF9jb250ZXh0
KFdlYktpdEhpdFRlc3RSZXN1bHQqIGhpdFRlc3RSZXN1bHQpCit7CisgICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoV0VCS0lUX0lTX0hJVF9URVNUX1JFU1VMVChoaXRUZXN0UmVzdWx0KSwgMCk7CisK
KyAgICByZXR1cm4gaGl0VGVzdFJlc3VsdC0+cHJpdi0+Y29udGV4dDsKK30KKworLyoqCisgKiB3
ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfbGluazoKKyAqIEBoaXRfdGVzdF9yZXN1
bHQ6IGEgI1dlYktpdEhpdFRlc3RSZXN1bHQKKyAqCisgKiBHZXRzIHdoZXRoZXIgJVdFQktJVF9I
SVRfVEVTVF9SRVNVTFRfQ09OVEVYVF9MSU5LIGZsYWcgaXMgcHJlc2VudCBpbgorICogI1dlYktp
dEhpdFRlc3RSZXN1bHQ6Y29udGV4dC4KKyAqCisgKiBSZXR1cm5zOiAlVFJVRSBpZiB0aGVyZSdz
IGEgbGluayBlbGVtZW50IGluIHRoZSBjb29yZGluYXRlcyBvZiB0aGUgSGl0IFRlc3QsCisgKiAg
ICBvciAlRkFMU0Ugb3RoZXJ3aXNlCisgKi8KK2dib29sZWFuIHdlYmtpdF9oaXRfdGVzdF9yZXN1
bHRfY29udGV4dF9pc19saW5rKFdlYktpdEhpdFRlc3RSZXN1bHQqIGhpdFRlc3RSZXN1bHQpCit7
CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX0hJVF9URVNUX1JFU1VMVChoaXRU
ZXN0UmVzdWx0KSwgRkFMU0UpOworCisgICAgcmV0dXJuIGhpdFRlc3RSZXN1bHQtPnByaXYtPmNv
bnRleHQgJiBXRUJLSVRfSElUX1RFU1RfUkVTVUxUX0NPTlRFWFRfTElOSzsKK30KKworLyoqCisg
KiB3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfaW1hZ2U6CisgKiBAaGl0X3Rlc3Rf
cmVzdWx0OiBhICNXZWJLaXRIaXRUZXN0UmVzdWx0CisgKgorICogR2V0cyB3aGV0aGVyICVXRUJL
SVRfSElUX1RFU1RfUkVTVUxUX0NPTlRFWFRfSU1BR0UgZmxhZyBpcyBwcmVzZW50IGluCisgKiAj
V2ViS2l0SGl0VGVzdFJlc3VsdDpjb250ZXh0LgorICoKKyAqIFJldHVybnM6ICVUUlVFIGlmIHRo
ZXJlJ3MgYW4gaW1hZ2UgZWxlbWVudCBpbiB0aGUgY29vcmRpbmF0ZXMgb2YgdGhlIEhpdCBUZXN0
LAorICogICAgb3IgJUZBTFNFIG90aGVyd2lzZQorICovCitnYm9vbGVhbiB3ZWJraXRfaGl0X3Rl
c3RfcmVzdWx0X2NvbnRleHRfaXNfaW1hZ2UoV2ViS2l0SGl0VGVzdFJlc3VsdCogaGl0VGVzdFJl
c3VsdCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfSElUX1RFU1RfUkVT
VUxUKGhpdFRlc3RSZXN1bHQpLCBGQUxTRSk7CisKKyAgICByZXR1cm4gaGl0VGVzdFJlc3VsdC0+
cHJpdi0+Y29udGV4dCAmIFdFQktJVF9ISVRfVEVTVF9SRVNVTFRfQ09OVEVYVF9JTUFHRTsKK30K
KworLyoqCisgKiB3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfbWVkaWE6CisgKiBA
aGl0X3Rlc3RfcmVzdWx0OiBhICNXZWJLaXRIaXRUZXN0UmVzdWx0CisgKgorICogR2V0cyB3aGV0
aGVyICVXRUJLSVRfSElUX1RFU1RfUkVTVUxUX0NPTlRFWFRfTUVESUEgZmxhZyBpcyBwcmVzZW50
IGluCisgKiAjV2ViS2l0SGl0VGVzdFJlc3VsdDpjb250ZXh0LgorICoKKyAqIFJldHVybnM6ICVU
UlVFIGlmIHRoZXJlJ3MgYSBtZWRpYSBlbGVtZW50IGluIHRoZSBjb29yZGluYXRlcyBvZiB0aGUg
SGl0IFRlc3QsCisgKiAgICBvciAlRkFMU0Ugb3RoZXJ3aXNlCisgKi8KK2dib29sZWFuIHdlYmtp
dF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19tZWRpYShXZWJLaXRIaXRUZXN0UmVzdWx0KiBo
aXRUZXN0UmVzdWx0KQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19ISVRf
VEVTVF9SRVNVTFQoaGl0VGVzdFJlc3VsdCksIEZBTFNFKTsKKworICAgIHJldHVybiBoaXRUZXN0
UmVzdWx0LT5wcml2LT5jb250ZXh0ICYgV0VCS0lUX0hJVF9URVNUX1JFU1VMVF9DT05URVhUX01F
RElBOworfQorCisvKioKKyAqIHdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfZ2V0X2xpbmtfdXJpOgor
ICogQGhpdF90ZXN0X3Jlc3VsdDogYSAjV2ViS2l0SGl0VGVzdFJlc3VsdAorICoKKyAqIEdldHMg
dGhlIHZhbHVlIG9mIHRoZSAjV2ViS2l0SGl0VGVzdFJlc3VsdDpsaW5rLXVyaSBwcm9wZXJ0eS4K
KyAqCisgKiBSZXR1cm5zOiB0aGUgVVJJIG9mIHRoZSBsaW5rIGVsZW1lbnQgaW4gdGhlIGNvb3Jk
aW5hdGVzIG9mIHRoZSBIaXQgVGVzdCwKKyAqICAgIG9yICVOVUxMIGlmIHRoZXJlIGlucyd0IGEg
bGluayBlbGVtZW50IGluIEBoaXRfdGVzdF9yZXN1bHQgY29udGV4dAorICovCitjb25zdCBnY2hh
ciogd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9nZXRfbGlua191cmkoV2ViS2l0SGl0VGVzdFJlc3Vs
dCogaGl0VGVzdFJlc3VsdCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNf
SElUX1RFU1RfUkVTVUxUKGhpdFRlc3RSZXN1bHQpLCAwKTsKKworICAgIHJldHVybiBoaXRUZXN0
UmVzdWx0LT5wcml2LT5saW5rVVJJLmRhdGEoKTsKK30KKworLyoqCisgKiB3ZWJraXRfaGl0X3Rl
c3RfcmVzdWx0X2dldF9saW5rX3RpdGxlOgorICogQGhpdF90ZXN0X3Jlc3VsdDogYSAjV2ViS2l0
SGl0VGVzdFJlc3VsdAorICoKKyAqIEdldHMgdGhlIHZhbHVlIG9mIHRoZSAjV2ViS2l0SGl0VGVz
dFJlc3VsdDpsaW5rLXRpdGxlIHByb3BlcnR5LgorICoKKyAqIFJldHVybnM6IHRoZSB0aXRsZSBv
ZiB0aGUgbGluayBlbGVtZW50IGluIHRoZSBjb29yZGluYXRlcyBvZiB0aGUgSGl0IFRlc3QsCisg
KiAgICBvciAlTlVMTCBpZiB0aGVyZSBpbnMndCBhIGxpbmsgZWxlbWVudCBpbiBAaGl0X3Rlc3Rf
cmVzdWx0IGNvbnRleHQgb3IgdGhlCisgKiAgICBsaW5rIGVsZW1lbnQgZG9lc24ndCBoYXZlIGEg
dGl0bGUKKyAqLworY29uc3QgZ2NoYXIqIHdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfZ2V0X2xpbmtf
dGl0bGUoV2ViS2l0SGl0VGVzdFJlc3VsdCogaGl0VGVzdFJlc3VsdCkKK3sKKyAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChXRUJLSVRfSVNfSElUX1RFU1RfUkVTVUxUKGhpdFRlc3RSZXN1bHQpLCAw
KTsKKworICAgIHJldHVybiBoaXRUZXN0UmVzdWx0LT5wcml2LT5saW5rVGl0bGUuZGF0YSgpOwor
fQorCisvKioKKyAqIHdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfZ2V0X2xpbmtfbGFiZWw6CisgKiBA
aGl0X3Rlc3RfcmVzdWx0OiBhICNXZWJLaXRIaXRUZXN0UmVzdWx0CisgKgorICogR2V0cyB0aGUg
dmFsdWUgb2YgdGhlICNXZWJLaXRIaXRUZXN0UmVzdWx0OmxpbmstbGFiZWwgcHJvcGVydHkuCisg
KgorICogUmV0dXJuczogdGhlIGxhYmVsIG9mIHRoZSBsaW5rIGVsZW1lbnQgaW4gdGhlIGNvb3Jk
aW5hdGVzIG9mIHRoZSBIaXQgVGVzdCwKKyAqICAgIG9yICVOVUxMIGlmIHRoZXJlIGlucyd0IGEg
bGluayBlbGVtZW50IGluIEBoaXRfdGVzdF9yZXN1bHQgY29udGV4dCBvciB0aGUKKyAqICAgIGxp
bmsgZWxlbWVudCBkb2Vzbid0IGhhdmUgYSBsYWJlbAorICovCitjb25zdCBnY2hhciogd2Via2l0
X2hpdF90ZXN0X3Jlc3VsdF9nZXRfbGlua19sYWJlbChXZWJLaXRIaXRUZXN0UmVzdWx0KiBoaXRU
ZXN0UmVzdWx0KQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19ISVRfVEVT
VF9SRVNVTFQoaGl0VGVzdFJlc3VsdCksIDApOworCisgICAgcmV0dXJuIGhpdFRlc3RSZXN1bHQt
PnByaXYtPmxpbmtMYWJlbC5kYXRhKCk7Cit9CisKKy8qKgorICogd2Via2l0X2hpdF90ZXN0X3Jl
c3VsdF9nZXRfaW1hZ2VfdXJpOgorICogQGhpdF90ZXN0X3Jlc3VsdDogYSAjV2ViS2l0SGl0VGVz
dFJlc3VsdAorICoKKyAqIEdldHMgdGhlIHZhbHVlIG9mIHRoZSAjV2ViS2l0SGl0VGVzdFJlc3Vs
dDppbWFnZS11cmkgcHJvcGVydHkuCisgKgorICogUmV0dXJuczogdGhlIFVSSSBvZiB0aGUgaW1h
Z2UgZWxlbWVudCBpbiB0aGUgY29vcmRpbmF0ZXMgb2YgdGhlIEhpdCBUZXN0LAorICogICAgb3Ig
JU5VTEwgaWYgdGhlcmUgaW5zJ3QgYW4gaW1hZ2UgZWxlbWVudCBpbiBAaGl0X3Rlc3RfcmVzdWx0
IGNvbnRleHQKKyAqLworY29uc3QgZ2NoYXIqIHdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfZ2V0X2lt
YWdlX3VyaShXZWJLaXRIaXRUZXN0UmVzdWx0KiBoaXRUZXN0UmVzdWx0KQoreworICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19ISVRfVEVTVF9SRVNVTFQoaGl0VGVzdFJlc3VsdCks
IDApOworCisgICAgcmV0dXJuIGhpdFRlc3RSZXN1bHQtPnByaXYtPmltYWdlVVJJLmRhdGEoKTsK
K30KKworLyoqCisgKiB3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2dldF9tZWRpYV91cmk6CisgKiBA
aGl0X3Rlc3RfcmVzdWx0OiBhICNXZWJLaXRIaXRUZXN0UmVzdWx0CisgKgorICogR2V0cyB0aGUg
dmFsdWUgb2YgdGhlICNXZWJLaXRIaXRUZXN0UmVzdWx0Om1lZGlhLXVyaSBwcm9wZXJ0eS4KKyAq
CisgKiBSZXR1cm5zOiB0aGUgVVJJIG9mIHRoZSBtZWRpYSBlbGVtZW50IGluIHRoZSBjb29yZGlu
YXRlcyBvZiB0aGUgSGl0IFRlc3QsCisgKiAgICBvciAlTlVMTCBpZiB0aGVyZSBpbnMndCBhIG1l
ZGlhIGVsZW1lbnQgaW4gQGhpdF90ZXN0X3Jlc3VsdCBjb250ZXh0CisgKi8KK2NvbnN0IGdjaGFy
KiB3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2dldF9tZWRpYV91cmkoV2ViS2l0SGl0VGVzdFJlc3Vs
dCogaGl0VGVzdFJlc3VsdCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNf
SElUX1RFU1RfUkVTVUxUKGhpdFRlc3RSZXN1bHQpLCAwKTsKKworICAgIHJldHVybiBoaXRUZXN0
UmVzdWx0LT5wcml2LT5tZWRpYVVSSS5kYXRhKCk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRIaXRUZXN0UmVzdWx0LmggYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRIaXRUZXN0UmVzdWx0LmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDg5MTZlNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEhpdFRlc3RSZXN1bHQuaApAQCAtMCww
ICsxLDEwMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWYgIWRl
ZmluZWQoX19XRUJLSVQyX0hfSU5TSURFX18pICYmICFkZWZpbmVkKFdFQktJVDJfQ09NUElMQVRJ
T04pCisjZXJyb3IgIk9ubHkgPHdlYmtpdDIvd2Via2l0Mi5oPiBjYW4gYmUgaW5jbHVkZWQgZGly
ZWN0bHkuIgorI2VuZGlmCisKKyNpZm5kZWYgV2ViS2l0SGl0VGVzdFJlc3VsdF9oCisjZGVmaW5l
IFdlYktpdEhpdFRlc3RSZXN1bHRfaAorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNs
dWRlIDx3ZWJraXQyL1dlYktpdERlZmluZXMuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5l
IFdFQktJVF9UWVBFX0hJVF9URVNUX1JFU1VMVCAgICAgICAgICAgICh3ZWJraXRfaGl0X3Rlc3Rf
cmVzdWx0X2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9ISVRfVEVTVF9SRVNVTFQob2JqKSAg
ICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX1RZUEVf
SElUX1RFU1RfUkVTVUxULCBXZWJLaXRIaXRUZXN0UmVzdWx0KSkKKyNkZWZpbmUgV0VCS0lUX0lT
X0hJVF9URVNUX1JFU1VMVChvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBF
KChvYmopLCBXRUJLSVRfVFlQRV9ISVRfVEVTVF9SRVNVTFQpKQorI2RlZmluZSBXRUJLSVRfSElU
X1RFU1RfUkVTVUxUX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGts
YXNzKSwgIFdFQktJVF9UWVBFX0hJVF9URVNUX1JFU1VMVCwgV2ViS2l0SGl0VGVzdFJlc3VsdENs
YXNzKSkKKyNkZWZpbmUgV0VCS0lUX0lTX0hJVF9URVNUX1JFU1VMVF9DTEFTUyhrbGFzcykgKEdf
VFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfVFlQRV9ISVRfVEVTVF9SRVNV
TFQpKQorI2RlZmluZSBXRUJLSVRfSElUX1RFU1RfUkVTVUxUX0dFVF9DTEFTUyhvYmopICAoR19U
WVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9UWVBFX0hJVF9URVNUX1JFU1VM
VCwgV2ViS2l0SGl0VGVzdFJlc3VsdENsYXNzKSkKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdEhp
dFRlc3RSZXN1bHQgICAgICAgIFdlYktpdEhpdFRlc3RSZXN1bHQ7Cit0eXBlZGVmIHN0cnVjdCBf
V2ViS2l0SGl0VGVzdFJlc3VsdENsYXNzICAgV2ViS2l0SGl0VGVzdFJlc3VsdENsYXNzOwordHlw
ZWRlZiBzdHJ1Y3QgX1dlYktpdEhpdFRlc3RSZXN1bHRQcml2YXRlIFdlYktpdEhpdFRlc3RSZXN1
bHRQcml2YXRlOworCisvKioKKyAqIFdlYktpdEhpdFRlc3RSZXN1bHRDb250ZXh0OgorICogQFdF
QktJVF9ISVRfVEVTVF9SRVNVTFRfQ09OVEVYVF9ET0NVTUVOVDogYW55d2hlcmUgaW4gdGhlIGRv
Y3VtZW50LgorICogQFdFQktJVF9ISVRfVEVTVF9SRVNVTFRfQ09OVEVYVF9MSU5LOiBhIGh5cGVy
bGluayBlbGVtZW50LgorICogQFdFQktJVF9ISVRfVEVTVF9SRVNVTFRfQ09OVEVYVF9JTUFHRTog
YW4gaW1hZ2UgZWxlbWVudC4KKyAqIEBXRUJLSVRfSElUX1RFU1RfUkVTVUxUX0NPTlRFWFRfTUVE
SUE6IGEgdmlkZW8gb3IgYXVkaW8gZWxlbWVudC4KKyAqCisgKiBFbnVtIHZhbHVlcyB3aXRoIGZs
YWdzIHJlcHJlc2VudGluZyB0aGUgY29udGV4dCBvZiBhICNXZWJLaXRIaXRUZXN0UmVzdWx0Lgor
ICovCit0eXBlZGVmIGVudW0KK3sKKyAgICBXRUJLSVRfSElUX1RFU1RfUkVTVUxUX0NPTlRFWFRf
RE9DVU1FTlQgPSAxIDw8IDEsCisgICAgV0VCS0lUX0hJVF9URVNUX1JFU1VMVF9DT05URVhUX0xJ
TksgICAgID0gMSA8PCAyLAorICAgIFdFQktJVF9ISVRfVEVTVF9SRVNVTFRfQ09OVEVYVF9JTUFH
RSAgICA9IDEgPDwgMywKKyAgICBXRUJLSVRfSElUX1RFU1RfUkVTVUxUX0NPTlRFWFRfTUVESUEg
ICAgPSAxIDw8IDQKK30gV2ViS2l0SGl0VGVzdFJlc3VsdENvbnRleHQ7CisKK3N0cnVjdCBfV2Vi
S2l0SGl0VGVzdFJlc3VsdCB7CisgICAgR09iamVjdCBwYXJlbnQ7CisKKyAgICBXZWJLaXRIaXRU
ZXN0UmVzdWx0UHJpdmF0ZSAqcHJpdjsKK307CisKK3N0cnVjdCBfV2ViS2l0SGl0VGVzdFJlc3Vs
dENsYXNzIHsKKyAgICBHT2JqZWN0Q2xhc3MgcGFyZW50X2NsYXNzOworfTsKKworV0VCS0lUX0FQ
SSBHVHlwZQord2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9nZXRfdHlwZSAgICAgICAgICAgICAodm9p
ZCk7CisKK1dFQktJVF9BUEkgZ3VpbnQKK3dlYmtpdF9oaXRfdGVzdF9yZXN1bHRfZ2V0X2NvbnRl
eHQgICAgICAgICAgKFdlYktpdEhpdFRlc3RSZXN1bHQgKmhpdF90ZXN0X3Jlc3VsdCk7CisKK1dF
QktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19saW5r
ICAgICAgKFdlYktpdEhpdFRlc3RSZXN1bHQgKmhpdF90ZXN0X3Jlc3VsdCk7CisKK1dFQktJVF9B
UEkgZ2Jvb2xlYW4KK3dlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19pbWFnZSAgICAg
KFdlYktpdEhpdFRlc3RSZXN1bHQgKmhpdF90ZXN0X3Jlc3VsdCk7CisKK1dFQktJVF9BUEkgZ2Jv
b2xlYW4KK3dlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19tZWRpYSAgICAgKFdlYktp
dEhpdFRlc3RSZXN1bHQgKmhpdF90ZXN0X3Jlc3VsdCk7CisKK1dFQktJVF9BUEkgY29uc3QgZ2No
YXIgKgord2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9nZXRfbGlua191cmkgICAgICAgICAoV2ViS2l0
SGl0VGVzdFJlc3VsdCAqaGl0X3Rlc3RfcmVzdWx0KTsKKworV0VCS0lUX0FQSSBjb25zdCBnY2hh
ciAqCit3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2dldF9saW5rX3RpdGxlICAgICAgIChXZWJLaXRI
aXRUZXN0UmVzdWx0ICpoaXRfdGVzdF9yZXN1bHQpOworCitXRUJLSVRfQVBJIGNvbnN0IGdjaGFy
ICoKK3dlYmtpdF9oaXRfdGVzdF9yZXN1bHRfZ2V0X2xpbmtfbGFiZWwgICAgICAgKFdlYktpdEhp
dFRlc3RSZXN1bHQgKmhpdF90ZXN0X3Jlc3VsdCk7CisKK1dFQktJVF9BUEkgY29uc3QgZ2NoYXIg
Kgord2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9nZXRfaW1hZ2VfdXJpICAgICAgICAoV2ViS2l0SGl0
VGVzdFJlc3VsdCAqaGl0X3Rlc3RfcmVzdWx0KTsKKworV0VCS0lUX0FQSSBjb25zdCBnY2hhciAq
Cit3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2dldF9tZWRpYV91cmkgICAgICAgIChXZWJLaXRIaXRU
ZXN0UmVzdWx0ICpoaXRfdGVzdF9yZXN1bHQpOworCitHX0VORF9ERUNMUworCisjZW5kaWYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEhpdFRlc3RS
ZXN1bHRQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRI
aXRUZXN0UmVzdWx0UHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LmNjOTg2MGQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay9XZWJLaXRIaXRUZXN0UmVzdWx0UHJpdmF0ZS5oCkBAIC0wLDAgKzEsMzAgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRIaXRUZXN0UmVz
dWx0UHJpdmF0ZV9oCisjZGVmaW5lIFdlYktpdEhpdFRlc3RSZXN1bHRQcml2YXRlX2gKKworI2lu
Y2x1ZGUgIldlYktpdEhpdFRlc3RSZXN1bHQuaCIKKyNpbmNsdWRlICJXZWJLaXRQcml2YXRlLmgi
CisKK1dlYktpdEhpdFRlc3RSZXN1bHQqIHdlYmtpdEhpdFRlc3RSZXN1bHRDcmVhdGUoV0tIaXRU
ZXN0UmVzdWx0UmVmKTsKK2Jvb2wgd2Via2l0SGl0VGVzdFJlc3VsdENvbXBhcmUoV2ViS2l0SGl0
VGVzdFJlc3VsdCosIFdLSGl0VGVzdFJlc3VsdFJlZik7Citib29sIHdrSGl0VGVzdFJlc3VsdElz
RW1wdHkoV0tIaXRUZXN0UmVzdWx0UmVmKTsKKworI2VuZGlmIC8vIFdlYktpdEhpdFRlc3RSZXN1
bHRQcml2YXRlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbi5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay9XZWJLaXROYXZpZ2F0aW9uUG9saWN5RGVjaXNpb24uY3BwCmluZGV4IGZj
ZDU3YjQuLjk0ZDEzZWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL1dlYktpdE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbi5jcHAKKysrIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0TmF2aWdhdGlvblBvbGljeURlY2lzaW9uLmNwcApA
QCAtMjUsNyArMjUsNiBAQAogI2luY2x1ZGUgIldlYktpdFByaXZhdGUuaCIKICNpbmNsdWRlICJX
ZWJLaXRVUklSZXF1ZXN0UHJpdmF0ZS5oIgogI2luY2x1ZGUgIldlYlVSTFJlcXVlc3QuaCIKLSNp
bmNsdWRlIDxnZGsvZ2RrLmg+CiAjaW5jbHVkZSA8Z2xpYi9naTE4bi1saWIuaD4KICNpbmNsdWRl
IDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgpA
QCAtMjgwLDI2ICsyNzksMTIgQEAgc3RhdGljIHVuc2lnbmVkIHdrRXZlbnRNb3VzZUJ1dHRvblRv
V2ViS2l0TW91c2VCdXR0b24oV0tFdmVudE1vdXNlQnV0dG9uIHdrQnV0dG8KICAgICByZXR1cm4g
MDsKIH0KIAotdW5zaWduZWQgd2tFdmVudE1vZGlmaWVyc1RvVW5zaWduZWQoV0tFdmVudE1vZGlm
aWVycyB3a01vZGlmaWVycykKLXsKLSAgICB1bnNpZ25lZCBtb2RpZmllcnMgPSAwOwotICAgIGlm
ICh3a01vZGlmaWVycyAmIGtXS0V2ZW50TW9kaWZpZXJzU2hpZnRLZXkpCi0gICAgICAgIG1vZGlm
aWVycyB8PSBHREtfU0hJRlRfTUFTSzsKLSAgICBpZiAod2tNb2RpZmllcnMgJiBrV0tFdmVudE1v
ZGlmaWVyc0NvbnRyb2xLZXkpCi0gICAgICAgIG1vZGlmaWVycyB8PSBHREtfQ09OVFJPTF9NQVNL
OwotICAgIGlmICh3a01vZGlmaWVycyAmIGtXS0V2ZW50TW9kaWZpZXJzQWx0S2V5KQotICAgICAg
ICBtb2RpZmllcnMgfD0gR0RLX01PRDFfTUFTSzsKLSAgICBpZiAod2tNb2RpZmllcnMgJiBrV0tF
dmVudE1vZGlmaWVyc01ldGFLZXkpCi0gICAgICAgIG1vZGlmaWVycyB8PSBHREtfTUVUQV9NQVNL
OwotICAgIHJldHVybiBtb2RpZmllcnM7Ci19Ci0KIFdlYktpdE5hdmlnYXRpb25Qb2xpY3lEZWNp
c2lvbiogd2Via2l0TmF2aWdhdGlvblBvbGljeURlY2lzaW9uQ3JlYXRlKFdLRnJhbWVOYXZpZ2F0
aW9uVHlwZSBuYXZpZ2F0aW9uVHlwZSwgV0tFdmVudE1vdXNlQnV0dG9uIG1vdXNlQnV0dG9uLCBX
S0V2ZW50TW9kaWZpZXJzIG1vZGlmaWVycywgV0tVUkxSZXF1ZXN0UmVmIHJlcXVlc3QsIGNvbnN0
IGNoYXIqIGZyYW1lTmFtZSwgV0tGcmFtZVBvbGljeUxpc3RlbmVyUmVmIGxpc3RlbmVyKQogewog
ICAgIFdlYktpdE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbiogZGVjaXNpb24gPSBXRUJLSVRfTkFW
SUdBVElPTl9QT0xJQ1lfREVDSVNJT04oZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX05BVklHQVRJ
T05fUE9MSUNZX0RFQ0lTSU9OLCBOVUxMKSk7CiAgICAgZGVjaXNpb24tPnByaXYtPm5hdmlnYXRp
b25UeXBlID0gc3RhdGljX2Nhc3Q8V2ViS2l0TmF2aWdhdGlvblR5cGU+KG5hdmlnYXRpb25UeXBl
KTsKICAgICBkZWNpc2lvbi0+cHJpdi0+bW91c2VCdXR0b24gPSB3a0V2ZW50TW91c2VCdXR0b25U
b1dlYktpdE1vdXNlQnV0dG9uKG1vdXNlQnV0dG9uKTsKLSAgICBkZWNpc2lvbi0+cHJpdi0+bW9k
aWZpZXJzID0gd2tFdmVudE1vZGlmaWVyc1RvVW5zaWduZWQobW9kaWZpZXJzKTsKKyAgICBkZWNp
c2lvbi0+cHJpdi0+bW9kaWZpZXJzID0gd2tFdmVudE1vZGlmaWVyc1RvR2RrTW9kaWZpZXJzKG1v
ZGlmaWVycyk7CiAgICAgZGVjaXNpb24tPnByaXYtPnJlcXVlc3QgPSBhZG9wdEdSZWYod2Via2l0
VVJJUmVxdWVzdENyZWF0ZUZvclJlc291cmNlUmVxdWVzdCh0b0ltcGwocmVxdWVzdCktPnJlc291
cmNlUmVxdWVzdCgpKSk7CiAgICAgZGVjaXNpb24tPnByaXYtPmZyYW1lTmFtZSA9IGZyYW1lTmFt
ZTsKICAgICB3ZWJraXRQb2xpY3lEZWNpc2lvblNldExpc3RlbmVyKFdFQktJVF9QT0xJQ1lfREVD
SVNJT04oZGVjaXNpb24pLCBsaXN0ZW5lcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRQcml2YXRlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL1dlYktpdFByaXZhdGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLjk5OGMzYWIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay9XZWJLaXRQcml2YXRlLmNwcApAQCAtMCwwICsxLDM3IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJXZWJLaXRQcml2YXRlLmgiCisKKyNpbmNsdWRlIDxnZGsvZ2RrLmg+CisKK3Vuc2lnbmVk
IHdrRXZlbnRNb2RpZmllcnNUb0dka01vZGlmaWVycyhXS0V2ZW50TW9kaWZpZXJzIHdrTW9kaWZp
ZXJzKQoreworICAgIHVuc2lnbmVkIG1vZGlmaWVycyA9IDA7CisgICAgaWYgKHdrTW9kaWZpZXJz
ICYga1dLRXZlbnRNb2RpZmllcnNTaGlmdEtleSkKKyAgICAgICAgbW9kaWZpZXJzIHw9IEdES19T
SElGVF9NQVNLOworICAgIGlmICh3a01vZGlmaWVycyAmIGtXS0V2ZW50TW9kaWZpZXJzQ29udHJv
bEtleSkKKyAgICAgICAgbW9kaWZpZXJzIHw9IEdES19DT05UUk9MX01BU0s7CisgICAgaWYgKHdr
TW9kaWZpZXJzICYga1dLRXZlbnRNb2RpZmllcnNBbHRLZXkpCisgICAgICAgIG1vZGlmaWVycyB8
PSBHREtfTU9EMV9NQVNLOworICAgIGlmICh3a01vZGlmaWVycyAmIGtXS0V2ZW50TW9kaWZpZXJz
TWV0YUtleSkKKyAgICAgICAgbW9kaWZpZXJzIHw9IEdES19NRVRBX01BU0s7CisgICAgcmV0dXJu
IG1vZGlmaWVyczsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL1dlYktpdFByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dl
YktpdFByaXZhdGUuaAppbmRleCBjNDRkODc3Li40M2QyNmNjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRQcml2YXRlLmgKKysrIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0UHJpdmF0ZS5oCkBAIC00MCw0ICs0MCw2IEBA
CiAjZGVmaW5lIENPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0od2Via2l0TmFtZSwgd2ViY29y
ZU5hbWUpIFwKICAgICAgICAgQ09NUElMRV9BU1NFUlQoaW50KHdlYmtpdE5hbWUpID09IGludCh3
ZWJjb3JlTmFtZSksIG1pc21hdGNoaW5nRW51bXMpCiAKK3Vuc2lnbmVkIHdrRXZlbnRNb2RpZmll
cnNUb0dka01vZGlmaWVycyhXS0V2ZW50TW9kaWZpZXJzKTsKKwogI2VuZGlmIC8vIFdlYktpdFBy
aXZhdGVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2Vi
S2l0VUlDbGllbnQuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0
VUlDbGllbnQuY3BwCmluZGV4IGE2NTlhZDMuLmU0MTAyZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFVJQ2xpZW50LmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRVSUNsaWVudC5jcHAKQEAgLTEyNiw2ICsx
MjYsMTEgQEAgc3RhdGljIHZvaWQgc2V0V2luZG93RnJhbWUoV0tQYWdlUmVmIHBhZ2UsIFdLUmVj
dCBmcmFtZSwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKICAgICB3ZWJraXRXaW5kb3dQcm9wZXJ0
aWVzU2V0R2VvbWV0cnkod2luZG93UHJvcGVydGllcywgJmdlb21ldHJ5KTsKIH0KIAorc3RhdGlj
IHZvaWQgbW91c2VEaWRNb3ZlT3ZlckVsZW1lbnQoV0tQYWdlUmVmIHBhZ2UsIFdLSGl0VGVzdFJl
c3VsdFJlZiBoaXRUZXN0UmVzdWx0LCBXS0V2ZW50TW9kaWZpZXJzIG1vZGlmaWVycywgV0tUeXBl
UmVmIHVzZXJEYXRhLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQoreworICAgIHdlYmtpdFdlYlZp
ZXdIb3ZlcmVkRWxlbWVudChXRUJLSVRfV0VCX1ZJRVcoY2xpZW50SW5mbyksIGhpdFRlc3RSZXN1
bHQsIHdrRXZlbnRNb2RpZmllcnNUb0dka01vZGlmaWVycyhtb2RpZmllcnMpKTsKK30KKwogdm9p
ZCBhdHRhY2hVSUNsaWVudFRvVmlldyhXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQogewogICAgIFdL
UGFnZVVJQ2xpZW50IHdrVUlDbGllbnQgPSB7CkBAIC0xNzEsNyArMTc2LDcgQEAgdm9pZCBhdHRh
Y2hVSUNsaWVudFRvVmlldyhXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQogICAgICAgICAwLCAvLyBz
YXZlRGF0YVRvRmlsZUluRG93bmxvYWRzRm9sZGVyCiAgICAgICAgIDAsIC8vIHNob3VsZEludGVy
cnVwdEphdmFTY3JpcHQKICAgICAgICAgY3JlYXRlTmV3UGFnZSwKLSAgICAgICAgMCwgLy8gbW91
c2VEaWRNb3ZlT3ZlckVsZW1lbnQKKyAgICAgICAgbW91c2VEaWRNb3ZlT3ZlckVsZW1lbnQsCiAg
ICAgICAgIDAsIC8vIGRlY2lkZVBvbGljeUZvck5vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0
CiAgICAgfTsKICAgICBXS1BhZ2VSZWYgd2tQYWdlID0gdG9BUEkod2Via2l0V2ViVmlld0Jhc2VH
ZXRQYWdlKFdFQktJVF9XRUJfVklFV19CQVNFKHdlYlZpZXcpKSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuY3BwCmluZGV4IDZhOGI5NjAu
LjQ0MDM3NzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dl
YktpdFdlYlZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dl
YktpdFdlYlZpZXcuY3BwCkBAIC0yNCw2ICsyNCw3IEBACiAjaW5jbHVkZSAiV2ViS2l0QmFja0Zv
cndhcmRMaXN0UHJpdmF0ZS5oIgogI2luY2x1ZGUgIldlYktpdEVudW1UeXBlcy5oIgogI2luY2x1
ZGUgIldlYktpdEVycm9yLmgiCisjaW5jbHVkZSAiV2ViS2l0SGl0VGVzdFJlc3VsdFByaXZhdGUu
aCIKICNpbmNsdWRlICJXZWJLaXRMb2FkZXJDbGllbnQuaCIKICNpbmNsdWRlICJXZWJLaXRNYXJz
aGFsLmgiCiAjaW5jbHVkZSAiV2ViS2l0UG9saWN5Q2xpZW50LmgiCkBAIC01OSw2ICs2MCw4IEBA
IGVudW0gewogCiAgICAgREVDSURFX1BPTElDWSwKIAorICAgIEhPVkVSRURfT1ZFUl9FTEVNRU5U
LAorCiAgICAgTEFTVF9TSUdOQUwKIH07CiAKQEAgLTgzLDYgKzg2LDkgQEAgc3RydWN0IF9XZWJL
aXRXZWJWaWV3UHJpdmF0ZSB7CiAgICAgR1JlZlB0cjxXZWJLaXRCYWNrRm9yd2FyZExpc3Q+IGJh
Y2tGb3J3YXJkTGlzdDsKICAgICBHUmVmUHRyPFdlYktpdFNldHRpbmdzPiBzZXR0aW5nczsKICAg
ICBHUmVmUHRyPFdlYktpdFdpbmRvd1Byb3BlcnRpZXM+IHdpbmRvd1Byb3BlcnRpZXM7CisKKyAg
ICBHUmVmUHRyPFdlYktpdEhpdFRlc3RSZXN1bHQ+IGhvdmVyZWRFbGVtZW50SGl0VGVzdFJlc3Vs
dDsKKyAgICB1bnNpZ25lZCBob3ZlcmVkRWxlbWVudE1vZGlmaWVyczsKIH07CiAKIHN0YXRpYyBn
dWludCBzaWduYWxzW0xBU1RfU0lHTkFMXSA9IHsgMCwgfTsKQEAgLTU1NCw3ICs1NjAsNyBAQCBz
dGF0aWMgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfY2xhc3NfaW5pdChXZWJLaXRXZWJWaWV3Q2xhc3Mq
IHdlYlZpZXdDbGFzcykKICAgICAgICAgICAgICAgICAgICAgICAgICBHX1RZUEVfU1RSSU5HLCBH
X1RZUEVfU1RSSU5HLCBHX1RZUEVfUE9JTlRFUik7CiAKICAgICAvKioKLSAgICAgKiBXZWJLaXRQ
b2xpY3lDbGllbnQ6OmRlY2lkZS1wb2xpY3kKKyAgICAgKiBXZWJLaXRXZWJWaWV3OjpkZWNpZGUt
cG9saWN5OgogICAgICAqIEB3ZWJfdmlldzogdGhlICNXZWJLaXRXZWJWaWV3IG9uIHdoaWNoIHRo
ZSBzaWduYWwgaXMgZW1pdHRlZAogICAgICAqIEBkZWNpc2lvbjogdGhlICNXZWJLaXROYXZpZ2F0
aW9uUG9saWN5RGVjaXNpb24KICAgICAgKiBAZGVjaXNpb25fdHlwZTogYSAjV2ViS2l0UG9saWN5
RGVjaXNpb25UeXBlIGRlbm90aW5nIHRoZSB0eXBlIG9mIEBkZWNpc2lvbgpAQCAtNjEzLDYgKzYx
OSwzMyBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfY2xhc3NfaW5pdChXZWJLaXRXZWJW
aWV3Q2xhc3MqIHdlYlZpZXdDbGFzcykKICAgICAgICAgICAgICAgICAgICAgIEdfVFlQRV9CT09M
RUFOLCAyLCAvKiBudW1iZXIgb2YgcGFyYW1ldGVycyAqLwogICAgICAgICAgICAgICAgICAgICAg
V0VCS0lUX1RZUEVfUE9MSUNZX0RFQ0lTSU9OLAogICAgICAgICAgICAgICAgICAgICAgV0VCS0lU
X1RZUEVfUE9MSUNZX0RFQ0lTSU9OX1RZUEUpOworCisgICAgLyoqCisgICAgICogV2ViS2l0V2Vi
Vmlldzo6aG92ZXJlZC1vdmVyLWVsZW1lbnQ6CisgICAgICogQHdlYl92aWV3OiB0aGUgI1dlYktp
dFdlYlZpZXcgb24gd2hpY2ggdGhlIHNpZ25hbCBpcyBlbWl0dGVkCisgICAgICogQGhpdF90ZXN0
X3Jlc3VsdDogKGFsbG93LW5vbmUpOiBhICNXZWJLaXRIaXRUZXN0UmVzdWx0IG9yICVOVUxMCisg
ICAgICogQG1vZGlmaWVyczogYSBiaXRtYXNrIG9mICNHZGtNb2RpZmllclR5cGUKKyAgICAgKgor
ICAgICAqIFRoaXMgc2lnbmFsIGlzIGVtaXR0ZWQgd2hlbiB0aGUgbW91c2UgY3Vyc29yIGlzIG1v
dmVkIG92ZXIgYW4KKyAgICAgKiBlbGVtZW50IHN1Y2ggYXMgYSBsaW5rLCBpbWFnZSBvciBhIG1l
ZGlhIGVsZW1lbnQuIFRvIGRldGVybWluZQorICAgICAqIHdoZXRoZXIgdGhlIG1vdXNlIGN1cnNv
ciBpcyBvdmVyIGFuIGVsZW1lbnQsIGEgSGl0IFRlc3QgaXMgcGVyZm9ybWVkCisgICAgICogb24g
dGhlIGN1cnJlbnQgbW91c2UgY29vcmRpbmF0ZXMgYW5kIHRoZSByZXN1bHQgaXMgcGFzc2VkIGlu
IHRoZQorICAgICAqIEBoaXRfdGVzdF9yZXN1bHQgYXJndW1lbnQuIFRoZSBAbW9kaWZpZXJzIGFy
Z3VtZW50IGlzIGEgYml0bWFzayBvZgorICAgICAqICNHZGtNb2RpZmllclR5cGUgZmxhZ3MgaW5k
aWNhdGluZyB0aGUgc3RhdGUgb2YgbW9kaWZpZXIga2V5cy4KKyAgICAgKiBUaGUgc2lnbmFsIGlz
IGVtaXR0ZWQgYWdhaW4gd2hlbiB0aGUgbW91c2UgaXMgbW92ZWQgb3V0IG9mIHRoZQorICAgICAq
IGN1cnJlbnQgZWxlbWVudCB3aXRoIGEgbmV3IEBoaXRfdGVzdF9yZXN1bHQgb3IgJU5VTEwgaWYg
dGhlcmUKKyAgICAgKiBpc24ndCBhbiBlbGVtZW50IGF0IHRoZSBuZXcgbW91c2UgcG9zaXRpb24u
CisgICAgICovCisgICAgIHNpZ25hbHNbSE9WRVJFRF9PVkVSX0VMRU1FTlRdID0KKyAgICAgICAg
IGdfc2lnbmFsX25ldygiaG92ZXJlZC1vdmVyLWVsZW1lbnQiLAorICAgICAgICAgICAgICAgICAg
ICAgIEdfVFlQRV9GUk9NX0NMQVNTKHdlYlZpZXdDbGFzcyksCisgICAgICAgICAgICAgICAgICAg
ICAgR19TSUdOQUxfUlVOX0xBU1QsCisgICAgICAgICAgICAgICAgICAgICAgR19TVFJVQ1RfT0ZG
U0VUKFdlYktpdFdlYlZpZXdDbGFzcywgaG92ZXJlZF9vdmVyX2VsZW1lbnQpLAorICAgICAgICAg
ICAgICAgICAgICAgIDAsIDAsCisgICAgICAgICAgICAgICAgICAgICAgd2Via2l0X21hcnNoYWxf
Vk9JRF9fT0JKRUNUX1VJTlQsCisgICAgICAgICAgICAgICAgICAgICAgR19UWVBFX05PTkUsIDIs
CisgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX1RZUEVfSElUX1RFU1RfUkVTVUxULAorICAg
ICAgICAgICAgICAgICAgICAgIEdfVFlQRV9VSU5UKTsKIH0KIAogdm9pZCB3ZWJraXRXZWJWaWV3
TG9hZENoYW5nZWQoV2ViS2l0V2ViVmlldyogd2ViVmlldywgV2ViS2l0TG9hZEV2ZW50IGxvYWRF
dmVudCkKQEAgLTcyNCw2ICs3NTcsMjIgQEAgdm9pZCB3ZWJraXRXZWJWaWV3TWFrZVBvbGljeURl
Y2lzaW9uKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIFdlYktpdFBvbGljeURlY2lzaW8KICAgICBn
X3NpZ25hbF9lbWl0KHdlYlZpZXcsIHNpZ25hbHNbREVDSURFX1BPTElDWV0sIDAsIGRlY2lzaW9u
LCB0eXBlLCAmcmV0dXJuVmFsdWUpOwogfQogCit2b2lkIHdlYmtpdFdlYlZpZXdIb3ZlcmVkRWxl
bWVudChXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBXS0hpdFRlc3RSZXN1bHRSZWYgd2tIaXRUZXN0
UmVzdWx0LCB1bnNpZ25lZCBtb2RpZmllcnMpCit7CisgICAgV2ViS2l0V2ViVmlld1ByaXZhdGUq
IHByaXYgPSB3ZWJWaWV3LT5wcml2OworICAgIGJvb2wgaXNFbXB0eSA9IHdrSGl0VGVzdFJlc3Vs
dElzRW1wdHkod2tIaXRUZXN0UmVzdWx0KTsKKyAgICBpZiAoKGlzRW1wdHkgJiYgIXByaXYtPmhv
dmVyZWRFbGVtZW50SGl0VGVzdFJlc3VsdCkKKyAgICAgICAgfHwgKCFpc0VtcHR5CisgICAgICAg
ICAgICAmJiBwcml2LT5ob3ZlcmVkRWxlbWVudEhpdFRlc3RSZXN1bHQKKyAgICAgICAgICAgICYm
IHByaXYtPmhvdmVyZWRFbGVtZW50TW9kaWZpZXJzID09IG1vZGlmaWVycworICAgICAgICAgICAg
JiYgd2Via2l0SGl0VGVzdFJlc3VsdENvbXBhcmUocHJpdi0+aG92ZXJlZEVsZW1lbnRIaXRUZXN0
UmVzdWx0LmdldCgpLCB3a0hpdFRlc3RSZXN1bHQpKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
cHJpdi0+aG92ZXJlZEVsZW1lbnRNb2RpZmllcnMgPSAhaXNFbXB0eSA/IG1vZGlmaWVycyA6IDA7
CisgICAgcHJpdi0+aG92ZXJlZEVsZW1lbnRIaXRUZXN0UmVzdWx0ID0gIWlzRW1wdHkgPyBhZG9w
dEdSZWYod2Via2l0SGl0VGVzdFJlc3VsdENyZWF0ZSh3a0hpdFRlc3RSZXN1bHQpKSA6IDA7Cisg
ICAgZ19zaWduYWxfZW1pdCh3ZWJWaWV3LCBzaWduYWxzW0hPVkVSRURfT1ZFUl9FTEVNRU5UXSwg
MCwgcHJpdi0+aG92ZXJlZEVsZW1lbnRIaXRUZXN0UmVzdWx0LmdldCgpLCBtb2RpZmllcnMpOwor
fQorCiAvKioKICAqIHdlYmtpdF93ZWJfdmlld19uZXc6CiAgKgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5oIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5oCmluZGV4IGQ0NzY4ZTMuLjVmNTYy
MDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdl
YlZpZXcuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJW
aWV3LmgKQEAgLTMwLDYgKzMwLDcgQEAKIAogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0QmFja0Zv
cndhcmRMaXN0Lmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXREZWZpbmVzLmg+CisjaW5jbHVk
ZSA8d2Via2l0Mi9XZWJLaXRIaXRUZXN0UmVzdWx0Lmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJL
aXRXZWJDb250ZXh0Lmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRTZXR0aW5ncy5oPgogI2lu
Y2x1ZGUgPHdlYmtpdDIvV2ViS2l0VVJJUmVxdWVzdC5oPgpAQCAtMTE2LDI5ICsxMTcsMzIgQEAg
c3RydWN0IF9XZWJLaXRXZWJWaWV3IHsKIHN0cnVjdCBfV2ViS2l0V2ViVmlld0NsYXNzIHsKICAg
ICBXZWJLaXRXZWJWaWV3QmFzZUNsYXNzIHBhcmVudDsKIAotICAgIHZvaWQgICAgICAgKCogbG9h
ZF9jaGFuZ2VkKSAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAgICAgICp3ZWJfdmlldywKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViS2l0TG9hZEV2ZW50ICAgICAgICAgICAg
bG9hZF9ldmVudCk7Ci0gICAgZ2Jvb2xlYW4gICAoKiBsb2FkX2ZhaWxlZCkgICAgKFdlYktpdFdl
YlZpZXcgICAgICAgICAgICAgKndlYl92aWV3LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBXZWJLaXRMb2FkRXZlbnQgICAgICAgICAgICBsb2FkX2V2ZW50LAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAgICAgICAgICAgICAgICpmYWls
aW5nX3VyaSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0Vycm9yICAgICAg
ICAgICAgICAgICAgICAqZXJyb3IpOwotCi0gICAgR3RrV2lkZ2V0ICooKiBjcmVhdGUpICAgICAg
ICAgKFdlYktpdFdlYlZpZXcgICAgICAgICAgICAgKndlYl92aWV3KTsKLSAgICB2b2lkICAgICAg
ICgqIHJlYWR5X3RvX3Nob3cpICAoV2ViS2l0V2ViVmlldyAgICAgICAgICAgICAqd2ViX3ZpZXcp
OwotICAgIHZvaWQgICAgICAgKCogY2xvc2UpICAgICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAg
ICAgICAgICp3ZWJfdmlldyk7Ci0KLSAgICBnYm9vbGVhbiAgICgqIHNjcmlwdF9hbGVydCkgICAo
V2ViS2l0V2ViVmlldyAgICAgICAgICAgICAqd2ViX3ZpZXcsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAgICAgICAgICAgICAgKm1lc3NhZ2UpOwotICAg
IGdib29sZWFuICAgKCogc2NyaXB0X2NvbmZpcm0pIChXZWJLaXRXZWJWaWV3ICAgICAgICAgICAg
ICp3ZWJfdmlldywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2No
YXIgICAgICAgICAgICAgICAqbWVzc2FnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZ2Jvb2xlYW4gICAgICAgICAgICAgICAgICAqY29uZmlybWVkKTsKLSAgICBnYm9vbGVh
biAgICgqIHNjcmlwdF9wcm9tcHQpICAoV2ViS2l0V2ViVmlldyAgICAgICAgICAgICAqd2ViX3Zp
ZXcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAgICAg
ICAgICAgICAgKm1lc3NhZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IGdjaGFyICAgICAgICAgICAgICAgKmRlZmF1bHRfdGV4dCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZ2NoYXIgICAgICAgICAgICAgICAgICAgICoqdGV4dCk7Ci0gICAg
Z2Jvb2xlYW4gICAoKiBkZWNpZGVfcG9saWN5KSAgKFdlYktpdFdlYlZpZXcgICAgICAgICAgICAg
KndlYl92aWV3LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJLaXRQb2xp
Y3lEZWNpc2lvbiAgICAgICpkZWNpc2lvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgV2ViS2l0UG9saWN5RGVjaXNpb25UeXBlICB0eXBlKTsKKyAgICB2b2lkICAgICAgICgq
IGxvYWRfY2hhbmdlZCkgICAgICAgICAoV2ViS2l0V2ViVmlldyAgICAgICAgICAgICAqd2ViX3Zp
ZXcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYktpdExvYWRF
dmVudCAgICAgICAgICAgIGxvYWRfZXZlbnQpOworICAgIGdib29sZWFuICAgKCogbG9hZF9mYWls
ZWQpICAgICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAgICAgICp3ZWJfdmlldywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViS2l0TG9hZEV2ZW50ICAgICAg
ICAgICAgbG9hZF9ldmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgZ2NoYXIgICAgICAgICAgICAgICAqZmFpbGluZ191cmksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdFcnJvciAgICAgICAgICAgICAgICAgICAgKmVy
cm9yKTsKKworICAgIEd0a1dpZGdldCAqKCogY3JlYXRlKSAgICAgICAgICAgICAgIChXZWJLaXRX
ZWJWaWV3ICAgICAgICAgICAgICp3ZWJfdmlldyk7CisgICAgdm9pZCAgICAgICAoKiByZWFkeV90
b19zaG93KSAgICAgICAgKFdlYktpdFdlYlZpZXcgICAgICAgICAgICAgKndlYl92aWV3KTsKKyAg
ICB2b2lkICAgICAgICgqIGNsb3NlKSAgICAgICAgICAgICAgICAoV2ViS2l0V2ViVmlldyAgICAg
ICAgICAgICAqd2ViX3ZpZXcpOworCisgICAgZ2Jvb2xlYW4gICAoKiBzY3JpcHRfYWxlcnQpICAg
ICAgICAgKFdlYktpdFdlYlZpZXcgICAgICAgICAgICAgKndlYl92aWV3LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAgICAgICAgICAgICAgICpt
ZXNzYWdlKTsKKyAgICBnYm9vbGVhbiAgICgqIHNjcmlwdF9jb25maXJtKSAgICAgICAoV2ViS2l0
V2ViVmlldyAgICAgICAgICAgICAqd2ViX3ZpZXcsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAgICAgICAgICAgICAgKm1lc3NhZ2UsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdib29sZWFuICAgICAgICAgICAg
ICAgICAgKmNvbmZpcm1lZCk7CisgICAgZ2Jvb2xlYW4gICAoKiBzY3JpcHRfcHJvbXB0KSAgICAg
ICAgKFdlYktpdFdlYlZpZXcgICAgICAgICAgICAgKndlYl92aWV3LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAgICAgICAgICAgICAgICptZXNz
YWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hh
ciAgICAgICAgICAgICAgICpkZWZhdWx0X3RleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGdjaGFyICAgICAgICAgICAgICAgICAgICAqKnRleHQpOworICAgIGdi
b29sZWFuICAgKCogZGVjaWRlX3BvbGljeSkgICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAg
ICAgICp3ZWJfdmlldywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
V2ViS2l0UG9saWN5RGVjaXNpb24gICAgICAqZGVjaXNpb24sCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFdlYktpdFBvbGljeURlY2lzaW9uVHlwZSAgdHlwZSk7Cisg
ICAgdm9pZCAgICAgICAoKiBob3ZlcmVkX292ZXJfZWxlbWVudCkgKFdlYktpdFdlYlZpZXcgICAg
ICAgICAgICAqd2ViX3ZpZXcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFdlYktpdEhpdFRlc3RSZXN1bHQgICAgICAqaGl0X3Rlc3RfcmVzdWx0LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludCAgICAgICAgICAgICAgICAgICAg
IG1vZGlmaWVycyk7CiAKICAgICAvKiBQYWRkaW5nIGZvciBmdXR1cmUgZXhwYW5zaW9uICovCiAg
ICAgdm9pZCAoKl93ZWJraXRfcmVzZXJ2ZWQwKSAodm9pZCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3UHJpdmF0ZS5oIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld1ByaXZhdGUuaAppbmRleCA2
NjM4NmQwLi5lMzQ4MTUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay9XZWJLaXRXZWJWaWV3UHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdQcml2YXRlLmgKQEAgLTQzLDUgKzQzLDYgQEAgdm9pZCB3
ZWJraXRXZWJWaWV3UnVuSmF2YVNjcmlwdEFsZXJ0KFdlYktpdFdlYlZpZXcqLCBjb25zdCBDU3Ry
aW5nJiBtZXNzYWdlKTsKIGJvb2wgd2Via2l0V2ViVmlld1J1bkphdmFTY3JpcHRDb25maXJtKFdl
YktpdFdlYlZpZXcqLCBjb25zdCBDU3RyaW5nJiBtZXNzYWdlKTsKIFdLU3RyaW5nUmVmIHdlYmtp
dFdlYlZpZXdSdW5KYXZhU2NyaXB0UHJvbXB0KFdlYktpdFdlYlZpZXcqLCBjb25zdCBDU3RyaW5n
JiBtZXNzYWdlLCBjb25zdCBDU3RyaW5nJiBkZWZhdWx0VGV4dCk7CiB2b2lkIHdlYmtpdFdlYlZp
ZXdNYWtlUG9saWN5RGVjaXNpb24oV2ViS2l0V2ViVmlldyosIFdlYktpdFBvbGljeURlY2lzaW9u
VHlwZSwgV2ViS2l0UG9saWN5RGVjaXNpb24qKTsKK3ZvaWQgd2Via2l0V2ViVmlld0hvdmVyZWRF
bGVtZW50KFdlYktpdFdlYlZpZXcqLCBXS0hpdFRlc3RSZXN1bHRSZWYsIHVuc2lnbmVkIG1vZGlm
aWVycyk7CiAKICNlbmRpZiAvLyBXZWJLaXRXZWJWaWV3UHJpdmF0ZV9oCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstZG9jcy5zZ21s
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLWRvY3Mu
c2dtbAppbmRleCBhZjBjZGFlLi5jY2NlMDRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstZG9jcy5zZ21sCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1kb2NzLnNnbWwKQEAgLTI0
LDYgKzI0LDcgQEAKICAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvV2ViS2l0UG9saWN5RGVjaXNp
b24ueG1sIi8+CiAgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL1dlYktpdE5hdmlnYXRpb25Qb2xp
Y3lEZWNpc2lvbi54bWwiLz4KICAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvV2ViS2l0UmVzcG9u
c2VQb2xpY3lEZWNpc2lvbi54bWwiLz4KKyAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvV2ViS2l0
SGl0VGVzdFJlc3VsdC54bWwiLz4KICAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvV2ViS2l0RXJy
b3IueG1sIi8+CiAgIDwvY2hhcHRlcj4KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLXNlY3Rpb25zLnR4dCBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1zZWN0aW9ucy50eHQKaW5kZXgg
ZDljZjVlYy4uMWZjNGU2MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvZG9jcy93ZWJraXQyZ3RrLXNlY3Rpb25zLnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstc2VjdGlvbnMudHh0CkBAIC0zODgsNiAr
Mzg4LDM0IEBAIHdlYmtpdF9yZXNwb25zZV9wb2xpY3lfZGVjaXNpb25fZ2V0X3R5cGUKIDwvU0VD
VElPTj4KIAogPFNFQ1RJT04+Cis8RklMRT5XZWJLaXRIaXRUZXN0UmVzdWx0PC9GSUxFPgorV2Vi
S2l0SGl0VGVzdFJlc3VsdAorV2ViS2l0SGl0VGVzdFJlc3VsdENvbnRleHQKK3dlYmtpdF9oaXRf
dGVzdF9yZXN1bHRfZ2V0X2NvbnRleHQKK3dlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9p
c19saW5rCit3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfaW1hZ2UKK3dlYmtpdF9o
aXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19tZWRpYQord2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9n
ZXRfbGlua191cmkKK3dlYmtpdF9oaXRfdGVzdF9yZXN1bHRfZ2V0X2xpbmtfdGl0bGUKK3dlYmtp
dF9oaXRfdGVzdF9yZXN1bHRfZ2V0X2xpbmtfbGFiZWwKK3dlYmtpdF9oaXRfdGVzdF9yZXN1bHRf
Z2V0X2ltYWdlX3VyaQord2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9nZXRfbWVkaWFfdXJpCisKKzxT
VUJTRUNUSU9OIFN0YW5kYXJkPgorV2ViS2l0SGl0VGVzdFJlc3VsdENsYXNzCitXRUJLSVRfVFlQ
RV9ISVRfVEVTVF9SRVNVTFQKK1dFQktJVF9ISVRfVEVTVF9SRVNVTFQKK1dFQktJVF9JU19ISVRf
VEVTVF9SRVNVTFQKK1dFQktJVF9ISVRfVEVTVF9SRVNVTFRfQ0xBU1MKK1dFQktJVF9JU19ISVRf
VEVTVF9SRVNVTFRfQ0xBU1MKK1dFQktJVF9ISVRfVEVTVF9SRVNVTFRfR0VUX0NMQVNTCisKKzxT
VUJTRUNUSU9OIFByaXZhdGU+CitXZWJLaXRIaXRUZXN0UmVzdWx0UHJpdmF0ZQord2Via2l0X2hp
dF90ZXN0X3Jlc3VsdF9nZXRfdHlwZQorPC9TRUNUSU9OPgorCis8U0VDVElPTj4KIDxGSUxFPldl
YktpdEVycm9yPC9GSUxFPgogV0VCS0lUX05FVFdPUktfRVJST1IKIFdFQktJVF9QTFVHSU5fRVJS
T1IKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rl
c3RXZWJLaXRXZWJWaWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rl
c3RzL1Rlc3RXZWJLaXRXZWJWaWV3LmNwcAppbmRleCAxNjM3NWVkLi5hNmUyMDBlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0V2Vi
Vmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVz
dFdlYktpdFdlYlZpZXcuY3BwCkBAIC0yNjMsMTUgKzI2MywyNiBAQCBwdWJsaWM6CiAgICAgICAg
IHJldHVybiBUUlVFOwogICAgIH0KIAorICAgIHN0YXRpYyB2b2lkIGhvdmVyZWRPdmVyRWxlbWVu
dChXZWJLaXRXZWJWaWV3KiwgV2ViS2l0SGl0VGVzdFJlc3VsdCogaGl0VGVzdFJlc3VsdCwgZ3Vp
bnQgbW9kaWZpZXJzLCBVSUNsaWVudFRlc3QqIHRlc3QpCisgICAgeworICAgICAgICBpZiAoaGl0
VGVzdFJlc3VsdCkKKyAgICAgICAgICAgIHRlc3QtPmFzc2VydE9iamVjdElzRGVsZXRlZFdoZW5U
ZXN0RmluaXNoZXMoR19PQkpFQ1QoaGl0VGVzdFJlc3VsdCkpOworICAgICAgICB0ZXN0LT5tX2hv
dmVyZWRFbGVtZW50SGl0VGVzdFJlc3VsdCA9IGhpdFRlc3RSZXN1bHQ7CisgICAgICAgIHRlc3Qt
Pm1faG92ZXJlZEVsZW1lbnRNb2RpZmllcnMgPSBtb2RpZmllcnM7CisgICAgICAgIGdfbWFpbl9s
b29wX3F1aXQodGVzdC0+bV9tYWluTG9vcCk7CisgICAgfQorCiAgICAgVUlDbGllbnRUZXN0KCkK
ICAgICAgICAgOiBtX3NjcmlwdFR5cGUoQWxlcnQpCiAgICAgICAgICwgbV9zY3JpcHREaWFsb2dD
b25maXJtZWQodHJ1ZSkKKyAgICAgICAgLCBtX2hvdmVyZWRFbGVtZW50TW9kaWZpZXJzKDApCiAg
ICAgewogICAgICAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X2phdmFzY3JpcHRfY2FuX29wZW5fd2lu
ZG93c19hdXRvbWF0aWNhbGx5KHdlYmtpdF93ZWJfdmlld19nZXRfc2V0dGluZ3MobV93ZWJWaWV3
KSwgVFJVRSk7CiAgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV93ZWJWaWV3LCAiY3JlYXRlIiwg
R19DQUxMQkFDSyh2aWV3Q3JlYXRlKSwgdGhpcyk7CiAgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3Qo
bV93ZWJWaWV3LCAic2NyaXB0LWFsZXJ0IiwgR19DQUxMQkFDSyhzY3JpcHRBbGVydCksIHRoaXMp
OwogICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG1fd2ViVmlldywgInNjcmlwdC1jb25maXJtIiwg
R19DQUxMQkFDSyhzY3JpcHRDb25maXJtKSwgdGhpcyk7CiAgICAgICAgIGdfc2lnbmFsX2Nvbm5l
Y3QobV93ZWJWaWV3LCAic2NyaXB0LXByb21wdCIsIEdfQ0FMTEJBQ0soc2NyaXB0UHJvbXB0KSwg
dGhpcyk7CisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV93ZWJWaWV3LCAiaG92ZXJlZC1vdmVy
LWVsZW1lbnQiLCBHX0NBTExCQUNLKGhvdmVyZWRPdmVyRWxlbWVudCksIHRoaXMpOwogICAgIH0K
IAogICAgIH5VSUNsaWVudFRlc3QoKQpAQCAtMjg5LDExICszMDAsMjAgQEAgcHVibGljOgogICAg
ICAgICBtX3dpbmRvd1Byb3BlcnRpZXMgPSB3aW5kb3dQcm9wZXJ0aWVzOwogICAgIH0KIAorICAg
IFdlYktpdEhpdFRlc3RSZXN1bHQqIGdldEhvdmVyZWRFbGVtZW50QXQoaW50IHgsIGludCB5LCB1
bnNpZ25lZCBpbnQgbW91c2VNb2RpZmllcnMgPSAwKQorICAgIHsKKyAgICAgICAgbW91c2VNb3Zl
VG8oeCwgeSwgbW91c2VNb2RpZmllcnMpOworICAgICAgICBnX21haW5fbG9vcF9ydW4obV9tYWlu
TG9vcCk7CisgICAgICAgIHJldHVybiBtX2hvdmVyZWRFbGVtZW50SGl0VGVzdFJlc3VsdC5nZXQo
KTsKKyAgICB9CisKICAgICBWZWN0b3I8V2ViVmlld0V2ZW50cz4gbV93ZWJWaWV3RXZlbnRzOwog
ICAgIFNjcmlwdFR5cGUgbV9zY3JpcHRUeXBlOwogICAgIGJvb2wgbV9zY3JpcHREaWFsb2dDb25m
aXJtZWQ7CiAgICAgV2luZG93UHJvcGVydGllcyBtX3dpbmRvd1Byb3BlcnRpZXM7CiAgICAgSGFz
aFNldDxXVEY6OlN0cmluZz4gbV93aW5kb3dQcm9wZXJ0aWVzQ2hhbmdlZDsKKyAgICBHUmVmUHRy
PFdlYktpdEhpdFRlc3RSZXN1bHQ+IG1faG92ZXJlZEVsZW1lbnRIaXRUZXN0UmVzdWx0OworICAg
IHVuc2lnbmVkIGludCBtX2hvdmVyZWRFbGVtZW50TW9kaWZpZXJzOwogfTsKIAogc3RhdGljIHZv
aWQgdGVzdFdlYlZpZXdDcmVhdGVSZWFkeUNsb3NlKFVJQ2xpZW50VGVzdCogdGVzdCwgZ2NvbnN0
cG9pbnRlcikKQEAgLTM1Nyw2ICszNzcsNjQgQEAgc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdXaW5k
b3dQcm9wZXJ0aWVzKFVJQ2xpZW50VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKICAgICBnX2Fz
c2VydF9jbXBpbnQoZXZlbnRzWzJdLCA9PSwgVUlDbGllbnRUZXN0OjpDbG9zZSk7CiB9CiAKK3N0
YXRpYyB2b2lkIHRlc3RXZWJWaWV3SG92ZXJlZEVsZW1lbnQoVUlDbGllbnRUZXN0KiB0ZXN0LCBn
Y29uc3Rwb2ludGVyKQoreworICAgIHRlc3QtPnNob3dJbldpbmRvd0FuZFdhaXRVbnRpbE1hcHBl
ZCgpOworCisgICAgY29uc3QgY2hhciogbGlua3NIb3ZlcmVkSFRNTCA9CisgICAgICAgICI8aHRt
bD48Ym9keT4iCisgICAgICAgICIgPGEgc3R5bGU9J3Bvc2l0aW9uOmFic29sdXRlOyBsZWZ0OjE7
IHRvcDoxJyBocmVmPSdodHRwOi8vd3d3LndlYmtpdGd0ay5vcmcnIHRpdGxlPSdXZWJLaXRHVEsr
IFRpdGxlJz5XZWJLaXRHVEsrIFdlYnNpdGU8L2E+IgorICAgICAgICAiIDxpbWcgc3R5bGU9J3Bv
c2l0aW9uOmFic29sdXRlOyBsZWZ0OjE7IHRvcDoxMCcgc3JjPScweGRlYWRiZWVmJyB3aWR0aD01
IGhlaWdodD01PjwvaW1nPiIKKyAgICAgICAgIiA8YSBzdHlsZT0ncG9zaXRpb246YWJzb2x1dGU7
IGxlZnQ6MTsgdG9wOjIwJyBocmVmPSdodHRwOi8vd3d3LndlYmtpdGd0ay5vcmcvbG9nbycgdGl0
bGU9J1dlYktpdEdUSysgTG9nbyc+PGltZyBzcmM9JzB4ZGVhZGJlZWYnIHdpZHRoPTUgaGVpZ2h0
PTU+PC9pbWc+PC9hPiIKKyAgICAgICAgIiA8dmlkZW8gc3R5bGU9J3Bvc2l0aW9uOmFic29sdXRl
OyBsZWZ0OjE7IHRvcDozMCcgd2lkdGg9MTAgaGVpZ2h0PTEwIGNvbnRyb2xzPSdjb250cm9scyc+
PHNvdXJjZSBzcmM9J21vdmllLm9nZycgdHlwZT0ndmlkZW8vb2dnJyAvPjwvdmlkZW8+IgorICAg
ICAgICAiPC9ib2R5PjwvaHRtbD4iOworCisgICAgdGVzdC0+bG9hZEh0bWwobGlua3NIb3ZlcmVk
SFRNTCwgImZpbGU6Ly8vIik7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisK
KyAgICAvLyBNb3ZlIG92ZXIgbGluay4KKyAgICBXZWJLaXRIaXRUZXN0UmVzdWx0KiBoaXRUZXN0
UmVzdWx0ID0gdGVzdC0+Z2V0SG92ZXJlZEVsZW1lbnRBdCgxLCAxKTsKKyAgICBnX2Fzc2VydCh3
ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfbGluayhoaXRUZXN0UmVzdWx0KSk7Cisg
ICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19pbWFnZShoaXRU
ZXN0UmVzdWx0KSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4
dF9pc19tZWRpYShoaXRUZXN0UmVzdWx0KSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9o
aXRfdGVzdF9yZXN1bHRfZ2V0X2xpbmtfdXJpKGhpdFRlc3RSZXN1bHQpLCA9PSwgImh0dHA6Ly93
d3cud2Via2l0Z3RrLm9yZy8iKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X2hpdF90ZXN0
X3Jlc3VsdF9nZXRfbGlua190aXRsZShoaXRUZXN0UmVzdWx0KSwgPT0sICJXZWJLaXRHVEsrIFRp
dGxlIik7CisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfZ2V0X2xp
bmtfbGFiZWwoaGl0VGVzdFJlc3VsdCksID09LCAiV2ViS2l0R1RLKyBXZWJzaXRlIik7CisgICAg
Z19hc3NlcnQoIXRlc3QtPm1faG92ZXJlZEVsZW1lbnRNb2RpZmllcnMpOworCisgICAgLy8gTW92
ZSBvdXQgb2YgdGhlIGxpbmsuCisgICAgaGl0VGVzdFJlc3VsdCA9IHRlc3QtPmdldEhvdmVyZWRF
bGVtZW50QXQoMCwgMCk7CisgICAgZ19hc3NlcnQoIWhpdFRlc3RSZXN1bHQpOworICAgIGdfYXNz
ZXJ0KCF0ZXN0LT5tX2hvdmVyZWRFbGVtZW50TW9kaWZpZXJzKTsKKworICAgIC8vIE1vdmUgb3Zl
ciBpbWFnZSB3aXRoIEdES19DT05UUk9MX01BU0suCisgICAgaGl0VGVzdFJlc3VsdCA9IHRlc3Qt
PmdldEhvdmVyZWRFbGVtZW50QXQoMSwgMTAsIEdES19DT05UUk9MX01BU0spOworICAgIGdfYXNz
ZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfbGluayhoaXRUZXN0UmVzdWx0
KSk7CisgICAgZ19hc3NlcnQod2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX2ltYWdl
KGhpdFRlc3RSZXN1bHQpKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9j
b250ZXh0X2lzX21lZGlhKGhpdFRlc3RSZXN1bHQpKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Vi
a2l0X2hpdF90ZXN0X3Jlc3VsdF9nZXRfaW1hZ2VfdXJpKGhpdFRlc3RSZXN1bHQpLCA9PSwgImZp
bGU6Ly8vMHhkZWFkYmVlZiIpOworICAgIGdfYXNzZXJ0KHRlc3QtPm1faG92ZXJlZEVsZW1lbnRN
b2RpZmllcnMgJiBHREtfQ09OVFJPTF9NQVNLKTsKKworICAgIC8vIE1vdmUgb3ZlciBpbWFnZSBs
aW5rLgorICAgIGhpdFRlc3RSZXN1bHQgPSB0ZXN0LT5nZXRIb3ZlcmVkRWxlbWVudEF0KDEsIDIw
KTsKKyAgICBnX2Fzc2VydCh3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfbGluayho
aXRUZXN0UmVzdWx0KSk7CisgICAgZ19hc3NlcnQod2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250
ZXh0X2lzX2ltYWdlKGhpdFRlc3RSZXN1bHQpKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X2hpdF90
ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX21lZGlhKGhpdFRlc3RSZXN1bHQpKTsKKyAgICBnX2Fzc2Vy
dF9jbXBzdHIod2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9nZXRfbGlua191cmkoaGl0VGVzdFJlc3Vs
dCksID09LCAiaHR0cDovL3d3dy53ZWJraXRndGsub3JnL2xvZ28iKTsKKyAgICBnX2Fzc2VydF9j
bXBzdHIod2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9nZXRfaW1hZ2VfdXJpKGhpdFRlc3RSZXN1bHQp
LCA9PSwgImZpbGU6Ly8vMHhkZWFkYmVlZiIpOworICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRf
aGl0X3Rlc3RfcmVzdWx0X2dldF9saW5rX3RpdGxlKGhpdFRlc3RSZXN1bHQpLCA9PSwgIldlYktp
dEdUSysgTG9nbyIpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2dldF9s
aW5rX2xhYmVsKGhpdFRlc3RSZXN1bHQpKTsKKyAgICBnX2Fzc2VydCghdGVzdC0+bV9ob3ZlcmVk
RWxlbWVudE1vZGlmaWVycyk7CisKKyAgICAvLyBNb3ZlIG92ZXIgbWVkaWEuCisgICAgaGl0VGVz
dFJlc3VsdCA9IHRlc3QtPmdldEhvdmVyZWRFbGVtZW50QXQoMSwgMzApOworICAgIGdfYXNzZXJ0
KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfbGluayhoaXRUZXN0UmVzdWx0KSk7
CisgICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19pbWFnZSho
aXRUZXN0UmVzdWx0KSk7CisgICAgZ19hc3NlcnQod2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250
ZXh0X2lzX21lZGlhKGhpdFRlc3RSZXN1bHQpKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0
X2hpdF90ZXN0X3Jlc3VsdF9nZXRfbWVkaWFfdXJpKGhpdFRlc3RSZXN1bHQpLCA9PSwgImZpbGU6
Ly8vbW92aWUub2dnIik7CisgICAgZ19hc3NlcnQoIXRlc3QtPm1faG92ZXJlZEVsZW1lbnRNb2Rp
ZmllcnMpOworfQorCiBzdGF0aWMgdm9pZCB0ZXN0V2ViVmlld1pvb21MZXZlbChXZWJWaWV3VGVz
dCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKIHsKICAgICBnX2Fzc2VydF9jbXBmbG9hdCh3ZWJraXRf
d2ViX3ZpZXdfZ2V0X3pvb21fbGV2ZWwodGVzdC0+bV93ZWJWaWV3KSwgPT0sIDEpOwpAQCAtMzcz
LDYgKzQ1MSw3IEBAIHZvaWQgYmVmb3JlQWxsKCkKICAgICBVSUNsaWVudFRlc3Q6OmFkZCgiV2Vi
S2l0V2ViVmlldyIsICJjcmVhdGUtcmVhZHktY2xvc2UiLCB0ZXN0V2ViVmlld0NyZWF0ZVJlYWR5
Q2xvc2UpOwogICAgIFVJQ2xpZW50VGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgImphdmFzY3Jp
cHQtZGlhbG9ncyIsIHRlc3RXZWJWaWV3SmF2YVNjcmlwdERpYWxvZ3MpOwogICAgIFVJQ2xpZW50
VGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgIndpbmRvdy1wcm9wZXJ0aWVzIiwgdGVzdFdlYlZp
ZXdXaW5kb3dQcm9wZXJ0aWVzKTsKKyAgICBVSUNsaWVudFRlc3Q6OmFkZCgiV2ViS2l0V2ViVmll
dyIsICJob3ZlcmVkLW92ZXItZWxlbWVudCIsIHRlc3RXZWJWaWV3SG92ZXJlZEVsZW1lbnQpOwog
ICAgIFdlYlZpZXdUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAiem9vbS1sZXZlbCIsIHRlc3RX
ZWJWaWV3Wm9vbUxldmVsKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvdGVzdHMvV2ViVmlld1Rlc3QuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvdGVzdHMvV2ViVmlld1Rlc3QuY3BwCmluZGV4IDIwODk1ZWMuLjAwZDNiM2Ug
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1dlYlZp
ZXdUZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9X
ZWJWaWV3VGVzdC5jcHAKQEAgLTIxLDE1ICsyMSwyMCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgog
I2luY2x1ZGUgIldlYlZpZXdUZXN0LmgiCiAKKyNpbmNsdWRlIDxXZWJDb3JlL0dPd25QdHJHdGsu
aD4KKwogV2ViVmlld1Rlc3Q6OldlYlZpZXdUZXN0KCkKICAgICA6IG1fd2ViVmlldyhXRUJLSVRf
V0VCX1ZJRVcoZ19vYmplY3RfcmVmX3Npbmsod2Via2l0X3dlYl92aWV3X25ldygpKSkpCiAgICAg
LCBtX21haW5Mb29wKGdfbWFpbl9sb29wX25ldygwLCBUUlVFKSkKKyAgICAsIG1fcGFyZW50V2lu
ZG93KDApCiB7CiAgICAgYXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHX09C
SkVDVChtX3dlYlZpZXcpKTsKIH0KIAogV2ViVmlld1Rlc3Q6On5XZWJWaWV3VGVzdCgpCiB7Cisg
ICAgaWYgKG1fcGFyZW50V2luZG93KQorICAgICAgICBndGtfd2lkZ2V0X2Rlc3Ryb3kobV9wYXJl
bnRXaW5kb3cpOwogICAgIGdfb2JqZWN0X3VucmVmKG1fd2ViVmlldyk7CiAgICAgZ19tYWluX2xv
b3BfdW5yZWYobV9tYWluTG9vcCk7CiB9CkBAIC0xMzAsMyArMTM1LDQ4IEBAIHZvaWQgV2ViVmll
d1Rlc3Q6OndhaXRVbnRpbExvYWRGaW5pc2hlZCgpCiAgICAgZ19zaWduYWxfY29ubmVjdChtX3dl
YlZpZXcsICJsb2FkLWNoYW5nZWQiLCBHX0NBTExCQUNLKGxvYWRDaGFuZ2VkKSwgdGhpcyk7CiAg
ICAgZ19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOwogfQorCitzdGF0aWMgZ2Jvb2xlYW4gcGFy
ZW50V2luZG93TWFwcGVkKEd0a1dpZGdldCogd2lkZ2V0LCBHZGtFdmVudCosIFdlYlZpZXdUZXN0
KiB0ZXN0KQoreworICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfYnlfZnVuYyh3aWRn
ZXQsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHBhcmVudFdpbmRvd01hcHBlZCksIHRlc3QpOwor
ICAgIGdfbWFpbl9sb29wX3F1aXQodGVzdC0+bV9tYWluTG9vcCk7CisKKyAgICByZXR1cm4gRkFM
U0U7Cit9CisKK3ZvaWQgV2ViVmlld1Rlc3Q6OnNob3dJbldpbmRvd0FuZFdhaXRVbnRpbE1hcHBl
ZCgpCit7CisgICAgZ19hc3NlcnQoIW1fcGFyZW50V2luZG93KTsKKyAgICBtX3BhcmVudFdpbmRv
dyA9IGd0a193aW5kb3dfbmV3KEdUS19XSU5ET1dfUE9QVVApOworICAgIGd0a19jb250YWluZXJf
YWRkKEdUS19DT05UQUlORVIobV9wYXJlbnRXaW5kb3cpLCBHVEtfV0lER0VUKG1fd2ViVmlldykp
OworICAgIGd0a193aWRnZXRfc2hvdyhHVEtfV0lER0VUKG1fd2ViVmlldykpOworCisgICAgZ19z
aWduYWxfY29ubmVjdChtX3BhcmVudFdpbmRvdywgIm1hcC1ldmVudCIsIEdfQ0FMTEJBQ0socGFy
ZW50V2luZG93TWFwcGVkKSwgdGhpcyk7CisgICAgZ3RrX3dpZGdldF9zaG93KG1fcGFyZW50V2lu
ZG93KTsKKyAgICBnX21haW5fbG9vcF9ydW4obV9tYWluTG9vcCk7Cit9CisKK3ZvaWQgV2ViVmll
d1Rlc3Q6Om1vdXNlTW92ZVRvKGludCB4LCBpbnQgeSwgdW5zaWduZWQgaW50IG1vdXNlTW9kaWZp
ZXJzKQoreworICAgIGdfYXNzZXJ0KG1fcGFyZW50V2luZG93KTsKKyAgICBHdGtXaWRnZXQqIHZp
ZXdXaWRnZXQgPSBHVEtfV0lER0VUKG1fd2ViVmlldyk7CisgICAgZ19hc3NlcnQoZ3RrX3dpZGdl
dF9nZXRfcmVhbGl6ZWQodmlld1dpZGdldCkpOworCisgICAgR093blB0cjxHZGtFdmVudD4gZXZl
bnQoZ2RrX2V2ZW50X25ldyhHREtfTU9USU9OX05PVElGWSkpOworICAgIGV2ZW50LT5tb3Rpb24u
eCA9IHg7CisgICAgZXZlbnQtPm1vdGlvbi55ID0geTsKKworICAgIGV2ZW50LT5tb3Rpb24udGlt
ZSA9IEdES19DVVJSRU5UX1RJTUU7CisgICAgZXZlbnQtPm1vdGlvbi53aW5kb3cgPSBndGtfd2lk
Z2V0X2dldF93aW5kb3codmlld1dpZGdldCk7CisgICAgZ19vYmplY3RfcmVmKGV2ZW50LT5tb3Rp
b24ud2luZG93KTsKKyAgICBldmVudC0+YnV0dG9uLmRldmljZSA9IGdka19kZXZpY2VfbWFuYWdl
cl9nZXRfY2xpZW50X3BvaW50ZXIoZ2RrX2Rpc3BsYXlfZ2V0X2RldmljZV9tYW5hZ2VyKGd0a193
aWRnZXRfZ2V0X2Rpc3BsYXkodmlld1dpZGdldCkpKTsKKyAgICBldmVudC0+bW90aW9uLnN0YXRl
ID0gbW91c2VNb2RpZmllcnM7CisgICAgZXZlbnQtPm1vdGlvbi5heGVzID0gMDsKKworICAgIGlu
dCB4Um9vdCwgeVJvb3Q7CisgICAgZ2RrX3dpbmRvd19nZXRfcm9vdF9jb29yZHMoZ3RrX3dpZGdl
dF9nZXRfd2luZG93KHZpZXdXaWRnZXQpLCB4LCB5LCAmeFJvb3QsICZ5Um9vdCk7CisgICAgZXZl
bnQtPm1vdGlvbi54X3Jvb3QgPSB4Um9vdDsKKyAgICBldmVudC0+bW90aW9uLnlfcm9vdCA9IHlS
b290OworICAgIGd0a19tYWluX2RvX2V2ZW50KGV2ZW50LmdldCgpKTsKK30KKwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvV2ViVmlld1Rlc3QuaCBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1dlYlZpZXdUZXN0LmgKaW5k
ZXggNGFkNmZhNi4uOTVhNTY5YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvdGVzdHMvV2ViVmlld1Rlc3QuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay90ZXN0cy9XZWJWaWV3VGVzdC5oCkBAIC00MiwxMCArNDIsMTQgQEAgcHVibGlj
OgogCiAgICAgdm9pZCB3YWl0KGRvdWJsZSBzZWNvbmRzKTsKICAgICB2b2lkIHdhaXRVbnRpbExv
YWRGaW5pc2hlZCgpOworICAgIHZvaWQgc2hvd0luV2luZG93QW5kV2FpdFVudGlsTWFwcGVkKCk7
CisKKyAgICB2b2lkIG1vdXNlTW92ZVRvKGludCB4LCBpbnQgeSwgdW5zaWduZWQgaW50IG1vdXNl
TW9kaWZpZXJzID0gMCk7CiAKICAgICBXZWJLaXRXZWJWaWV3KiBtX3dlYlZpZXc7CiAgICAgR01h
aW5Mb29wKiBtX21haW5Mb29wOwogICAgIENTdHJpbmcgbV9hY3RpdmVVUkk7CisgICAgR3RrV2lk
Z2V0KiBtX3BhcmVudFdpbmRvdzsKIH07CiAKICNlbmRpZiAvLyBXZWJWaWV3VGVzdF9oCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay93ZWJraXQyLmggYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay93ZWJraXQyLmgKaW5kZXggNzhlNTNkNS4uM2Fm
OTkwNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvd2Via2l0
Mi5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdDIuaApAQCAt
MzAsNiArMzAsNyBAQAogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0RWRpdGluZ0NvbW1hbmRzLmg+
CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRFbnVtVHlwZXMuaD4KICNpbmNsdWRlIDx3ZWJraXQy
L1dlYktpdEVycm9yLmg+CisjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRIaXRUZXN0UmVzdWx0Lmg+
CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRTZXR0aW5ncy5oPgogI2luY2x1ZGUgPHdlYmtpdDIv
V2ViS2l0VVJJUmVxdWVzdC5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0VVJJUmVzcG9uc2Uu
aD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdDJt
YXJzaGFsLmxpc3QgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay93ZWJraXQybWFy
c2hhbC5saXN0CmluZGV4IDU5MThkMDkuLjc3ZDI2OWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdDJtYXJzaGFsLmxpc3QKKysrIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvd2Via2l0Mm1hcnNoYWwubGlzdApAQCAtMTAsNSArMTAs
NiBAQCBCT09MRUFOOlVJTlQ2NAogQk9PTEVBTjpWT0lECiBPQkpFQ1Q6Vk9JRAogVk9JRDpFTlVN
CitWT0lEOk9CSkVDVCxVSU5UCiBWT0lEOk9CSkVDVCxQT0lOVEVSCiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9hdXRvdG9vbHMvc3ltYm9scy5maWx0ZXIgYi9Tb3VyY2UvYXV0b3Rvb2xzL3N5bWJvbHMu
ZmlsdGVyCmluZGV4IDhlYzdmZDkuLjU3ODQ5YmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9hdXRvdG9v
bHMvc3ltYm9scy5maWx0ZXIKKysrIGIvU291cmNlL2F1dG90b29scy9zeW1ib2xzLmZpbHRlcgpA
QCAtOSw2ICs5LDcgQEAgX1pOM1dURjE2ZmFzdFplcm9lZE1hbGxvY0VtOwogX1pOM1dURjIwZmFz
dE1hbGxvY1N0YXRpc3RpY3NFdjsKIF9aTjNXVEY4ZmFzdEZyZWVFUHY7CiBfWk4zV1RGMTNmcmVl
T3duZWRHUHRySTdfR0Vycm9yRUV2UFRfOworX1pOM1dURjEzZnJlZU93bmVkR1B0ckk5X0dka0V2
ZW50RUV2UFRfOwogX1pOM1dURjhJbnRlcm5hbDIxZmFzdE1hbGxvY01hdGNoRmFpbGVkRVB2Owog
X1pOM1dURjNNRDU4YWRkQnl0ZXMqOwogX1pOM1dURjNNRDU4Y2hlY2tzdW0qOwo=
</data>
<flag name="review"
          id="127737"
          type_id="1"
          status="-"
          setter="mrobinson"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>126250</attachid>
            <date>2012-02-09 00:22:36 -0800</date>
            <delta_ts>2012-02-09 06:54:09 -0800</delta_ts>
            <desc>Updated patch</desc>
            <filename>wk2-hovered-over-element2.diff</filename>
            <type>text/plain</type>
            <size>56919</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCA3M2ExMmVkLi4xZmFjYWEx
IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAK
KzIwMTItMDItMDkgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgor
CisgICAgICAgIFtHVEtdIEFkZCBXZWJLaXRXZWJWaWV3Ojpob3ZlcmVkLW92ZXItZWxlbWVudCBz
aWduYWwgdG8gV2ViS2l0MiBHVEsrIEFQSQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NzgwOTcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAqIFNvdXJjZS9hdXRvdG9vbHMvc3ltYm9scy5maWx0ZXI6IEFkZCBm
cmVlT3duZWRHUHRyPF9HZGtFdmVudD4KKyAgICAgICAgc3ltYm9sIHRvIGJlIGFibGUgdG8gdXNl
IEdPd25QdHI8R2RrRXZlbnQ+IGluIFdlYktpdDIgR1RLKyB1bml0CisgICAgICAgIHRlc3RzLgor
CiAyMDEyLTAyLTA3ICBNT1JJVEEgSGFqaW1lICA8bW9ycml0YUBnb29nbGUuY29tPgogCiAgICAg
ICAgIFJlcGxhY2VtZW50IHRleHQgc2hvdWxkIGJlIGF2YWlsYWJsZSBmcm9tIHRoZSBtYXJrZXIu
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cKaW5kZXggMzVkMzBiYi4uYjZlZjJjMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc1
IEBACisyMDEyLTAyLTA5ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNv
bT4KKworICAgICAgICBbR1RLXSBBZGQgV2ViS2l0V2ViVmlldzo6aG92ZXJlZC1vdmVyLWVsZW1l
bnQgc2lnbmFsIHRvIFdlYktpdDIgR1RLKyBBUEkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTc4MDk3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbTogQWRkIG5ldyBmaWxlcyB0byBj
b21waWxhdGlvbi4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRIaXRUZXN0UmVz
dWx0LmNwcDogQWRkZWQuCisgICAgICAgICh3ZWJraXRIaXRUZXN0UmVzdWx0RmluYWxpemUpOgor
ICAgICAgICAod2Via2l0SGl0VGVzdFJlc3VsdEdldFByb3BlcnR5KToKKyAgICAgICAgKHdlYmtp
dEhpdFRlc3RSZXN1bHRTZXRQcm9wZXJ0eSk6CisgICAgICAgICh3ZWJraXRfaGl0X3Rlc3RfcmVz
dWx0X2luaXQpOgorICAgICAgICAod2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jbGFzc19pbml0KToK
KyAgICAgICAgKHdlYmtpdEhpdFRlc3RSZXN1bHRDcmVhdGUpOiBDcmVhdGUgYSBuZXcgV2ViS2l0
SGl0VGVzdFJlc3VsdCBmb3IKKyAgICAgICAgdGhlIGdpdmVuIFdLSGl0VGVzdFJlc3VsdC4KKyAg
ICAgICAgKHN0cmluZ0lzRXF1YWxUb0NTdHJpbmcpOiBIZWxwZXIgZnVuY3Rpb24gdG8gY29tcGFy
ZSBTdHJpbmcgYW5kCisgICAgICAgIENTdHJpbmcgY29uc2lkZXJpbmcgU3RyaW5nOjppc0VtcHR5
KCkgPT0gQ1N0cmluZy5pc051bGwoKS4KKyAgICAgICAgKHdlYmtpdEhpdFRlc3RSZXN1bHRDb21w
YXJlKTogSGVscGVyIGZ1bmN0aW9uIHRvIGNoZWNrIHdoZXRoZXIgYQorICAgICAgICBXZWJLaXRI
aXRUZXN0UmVzdWx0IGNvbnRhaW5zIHRoZSBzYW1lIGluZm9ybWF0aW9uIHRoYW4gdGhlIGdpdmVu
CisgICAgICAgIFdLSGl0VGVzdFJlc3VsdC4KKyAgICAgICAgKHdrSGl0VGVzdFJlc3VsdElzRW1w
dHkpOiBIZWxwZXIgZnVuY3Rpb24gdG8gY2hlY2sgd2hldGhlciBhbGwKKyAgICAgICAgV0tIaXRU
ZXN0UmVzdWx0IGNvbnRlbnRzIGFyZSBlbXB0eS4KKyAgICAgICAgKHdlYmtpdF9oaXRfdGVzdF9y
ZXN1bHRfZ2V0X2NvbnRleHQpOgorICAgICAgICAod2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250
ZXh0X2lzX2xpbmspOgorICAgICAgICAod2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lz
X2ltYWdlKToKKyAgICAgICAgKHdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19tZWRp
YSk6CisgICAgICAgICh3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2dldF9saW5rX3VyaSk6CisgICAg
ICAgICh3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2dldF9saW5rX3RpdGxlKToKKyAgICAgICAgKHdl
YmtpdF9oaXRfdGVzdF9yZXN1bHRfZ2V0X2xpbmtfbGFiZWwpOgorICAgICAgICAod2Via2l0X2hp
dF90ZXN0X3Jlc3VsdF9nZXRfaW1hZ2VfdXJpKToKKyAgICAgICAgKHdlYmtpdF9oaXRfdGVzdF9y
ZXN1bHRfZ2V0X21lZGlhX3VyaSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0
SGl0VGVzdFJlc3VsdC5oOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJL
aXRIaXRUZXN0UmVzdWx0UHJpdmF0ZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dl
YktpdE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbi5jcHA6CisgICAgICAgICh3ZWJraXROYXZpZ2F0
aW9uUG9saWN5RGVjaXNpb25DcmVhdGUpOiBVc2Ugd2tFdmVudE1vZGlmaWVyc1RvR2RrTW9kaWZp
ZXJzLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFByaXZhdGUuY3BwOgorICAg
ICAgICAod2tFdmVudE1vZGlmaWVyc1RvR2RrTW9kaWZpZXJzKTogTW92ZWQgZnJvbQorICAgICAg
ICBXZWJLaXROYXZpZ2F0aW9uUG9saWN5RGVjaXNpb24gYW5kIHJlbmFtZWQgdG8gd2tFdmVudE1v
ZGlmaWVyc1RvR2RrTW9kaWZpZXJzLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktp
dFByaXZhdGUuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRVSUNsaWVudC5j
cHA6CisgICAgICAgIChtb3VzZURpZE1vdmVPdmVyRWxlbWVudCk6IFVJIGNsaWVudCBjYWxsYmFj
ayB0aGF0IGNhbGxzCisgICAgICAgIHdlYmtpdFdlYlZpZXdIb3ZlcmVkRWxlbWVudCgpLgorICAg
ICAgICAoYXR0YWNoVUlDbGllbnRUb1ZpZXcpOiBBZGQgaW1wbGVtZW50YXRpb24gZm9yIGNhbGxi
YWNrCisgICAgICAgIG1vdXNlRGlkTW92ZU92ZXJFbGVtZW50LgorICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuY3BwOgorICAgICAgICAod2Via2l0X3dlYl92aWV3X2Ns
YXNzX2luaXQpOiBBZGQKKyAgICAgICAgV2ViS2l0V2ViVmlldzo6aG92ZXJlZC1vdmVyLWVsZW1l
bnQgc2lnbmFsLgorICAgICAgICAod2Via2l0V2ViVmlld0hvdmVyZWRPdmVyRWxlbWVudCk6IEVt
aXQKKyAgICAgICAgV2ViS2l0V2ViVmlldzo6aG92ZXJlZC1vdmVyLWVsZW1lbnQuCisgICAgICAg
ICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5oOgorICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdQcml2YXRlLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQ
SS9ndGsvZG9jcy93ZWJraXQyZ3RrLWRvY3Muc2dtbDogQWRkIG5ldyBzZWN0aW9uIGZvcgorICAg
ICAgICBXZWJLaXRIaXRUZXN0UmVzdWx0LgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL2Rv
Y3Mvd2Via2l0Mmd0ay1zZWN0aW9ucy50eHQ6IEFkZCBuZXcgc3ltYm9scy4KKyAgICAgICAgKiBV
SVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0V2ViVmlldy5jcHA6CisgICAgICAgICh0
ZXN0V2ViVmlld0hvdmVyZWRFbGVtZW50KToKKyAgICAgICAgKGJlZm9yZUFsbCk6CisgICAgICAg
ICogVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvV2ViVmlld1Rlc3QuY3BwOgorICAgICAgICAoV2Vi
Vmlld1Rlc3Q6OldlYlZpZXdUZXN0KToKKyAgICAgICAgKFdlYlZpZXdUZXN0Ojp+V2ViVmlld1Rl
c3QpOgorICAgICAgICAocGFyZW50V2luZG93TWFwcGVkKToKKyAgICAgICAgKFdlYlZpZXdUZXN0
OjpzaG93SW5XaW5kb3dBbmRXYWl0VW50aWxNYXBwZWQpOiBNZXRob2QgdG8gYWRkIHRoZQorICAg
ICAgICB2aWV3IGludG8gYSBwb3B1cCB3aW5kb3cgYW5kIHNob3cgaXQgcnVubmluZyB0aGUgbWFp
biBsb29wIHVudGlsCisgICAgICAgIHRoZSB3aW5kb3cgaXMgbWFwcGVkLgorICAgICAgICAoV2Vi
Vmlld1Rlc3Q6Om1vdXNlTW92ZVRvKTogTWV0aG9kIHRvIHN5bnRoZXNpemUgYQorICAgICAgICBH
REtfTU9USU9OX0VWRU5UIG9uIHRoZSBnaXZlbiBjb29yZGluYXRlcyBhbmQgdXNpbmcgdGhlIGdp
dmVuCisgICAgICAgIG1vZGlmaWVycy4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay90ZXN0
cy9XZWJWaWV3VGVzdC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdDIuaDog
SW5jbHVkZSBXZWJLaXRIaXRUZXN0UmVzdWx0LmguCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9n
dGsvd2Via2l0Mm1hcnNoYWwubGlzdDoKKwogMjAxMi0wMi0wOCAgS2V1bnNvb24gTGVlICA8a2V1
bnNvb24ubGVlQHNhbXN1bmcuY29tPgogCiAgICAgICAgIFtXSzJdW0VGTF0gY3JlYXRpbmcgZHVt
bXkgY2xhc3MgZGVyaXZlZCBmcm9tIFJlc291cmNlSGFuZGxlQ2xpZW50IGZvciBFZmwgZG93bmxv
YWQgbW9kdWxlLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUuYW0gYi9T
b3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbQppbmRleCAyYjM2ZWQzLi4zYjhlN2JkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbQorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9HTlVtYWtlZmlsZS5hbQpAQCAtODgsNiArODgsNyBAQCBsaWJ3ZWJraXQyZ3RraW5jbHVkZV9I
RUFERVJTID0gXAogCSQoV2ViS2l0MikvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RG93bmxvYWQu
aCBcCiAJJChXZWJLaXQyKS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRFZGl0aW5nQ29tbWFuZHMu
aCBcCiAJJChXZWJLaXQyKS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRFcnJvci5oIFwKKwkkKFdl
YktpdDIpL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEhpdFRlc3RSZXN1bHQuaCBcCiAJJChXZWJL
aXQyKS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXROYXZpZ2F0aW9uUG9saWN5RGVjaXNpb24uaCBc
CiAJJChXZWJLaXQyKS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRQb2xpY3lEZWNpc2lvbi5oIFwK
IAkkKFdlYktpdDIpL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFJlc3BvbnNlUG9saWN5RGVjaXNp
b24uaCBcCkBAIC01MzksNiArNTQwLDkgQEAgbGlid2Via2l0Mmd0a19AV0VCS0lUR1RLX0FQSV9N
QUpPUl9WRVJTSU9OQF9AV0VCS0lUR1RLX0FQSV9NSU5PUl9WRVJTSU9OQF9sYV9TT1UKIAlTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRFZGl0aW5nQ29tbWFuZHMuaCBcCiAJ
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RXJyb3IuaCBcCiAJU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RXJyb3IuY3BwIFwKKwlTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRIaXRUZXN0UmVzdWx0LmNwcCBcCisJU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0SGl0VGVzdFJlc3VsdC5oIFwKKwlTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRIaXRUZXN0UmVzdWx0UHJpdmF0ZS5o
IFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRMb2FkZXJDbGllbnQu
aCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0TG9hZGVyQ2xpZW50
LmNwcCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0TmF2aWdhdGlv
blBvbGljeURlY2lzaW9uLmNwcCBcCkBAIC01NTAsNiArNTU0LDcgQEAgbGlid2Via2l0Mmd0a19A
V0VCS0lUR1RLX0FQSV9NQUpPUl9WRVJTSU9OQF9AV0VCS0lUR1RLX0FQSV9NSU5PUl9WRVJTSU9O
QF9sYV9TT1UKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRQb2xpY3lD
bGllbnQuY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRQb2xp
Y3lDbGllbnQuaCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0UHJp
dmF0ZS5oIFwKKwlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRQcml2YXRl
LmNwcCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0UmVzcG9uc2VQ
b2xpY3lEZWNpc2lvbi5jcHAgXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dl
YktpdFJlc3BvbnNlUG9saWN5RGVjaXNpb24uaCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvV2ViS2l0UmVzcG9uc2VQb2xpY3lEZWNpc2lvblByaXZhdGUuaCBcCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRIaXRUZXN0UmVzdWx0
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEhpdFRlc3RSZXN1
bHQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljOTZlYTQKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRIaXRU
ZXN0UmVzdWx0LmNwcApAQCAtMCwwICsxLDQzOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MiBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0SGl0VGVz
dFJlc3VsdC5oIgorCisjaW5jbHVkZSAiV2ViSGl0VGVzdFJlc3VsdC5oIgorI2luY2x1ZGUgIldl
YktpdEhpdFRlc3RSZXN1bHRQcml2YXRlLmgiCisjaW5jbHVkZSA8Z2xpYi9naTE4bi1saWIuaD4K
KyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKKy8qKgorICogU0VDVElPTjogV2ViS2l0
SGl0VGVzdFJlc3VsdAorICogQFNob3J0X2Rlc2NyaXB0aW9uOiBSZXN1bHQgb2YgYSBIaXQgVGVz
dAorICogQFRpdGxlOiBXZWJLaXRIaXRUZXN0UmVzdWx0CisgKiBAU2VlX2Fsc286ICNXZWJLaXRX
ZWJWaWV3CisgKgorICogQSBIaXQgVGVzdCBpcyBhbiBvcGVyYXRpb24gdG8gZ2V0IGNvbnRleHQg
aW5mb3JtYXRpb24gYWJvdXQgYSBnaXZlbgorICogcG9pbnQgaW4gYSAjV2ViS2l0V2ViVmlldy4g
I1dlYktpdEhpdFRlc3RSZXN1bHQgcmVwcmVzZW50cyB0aGUKKyAqIHJlc3VsdCBvZiBhIEhpdCBU
ZXN0LiBJdCBwcm92aWRlcyBjb250ZXh0IGluZm9ybWF0aW9uIGFib3V0IHdoYXQgaXMKKyAqIGF0
IHRoZSBjb29yZGluYXRlcyBvZiB0aGUgSGl0IFRlc3QsIHN1Y2ggYXMgaWYgdGhlcmUncyBhIGxp
bmssCisgKiBhbiBpbWFnZSBvciBhIG1lZGlhLgorICoKKyAqIFlvdSBjYW4gZ2V0IHRoZSBjb250
ZXh0IG9mIHRoZSBIaXRUZXN0UmVzdWx0IHdpdGgKKyAqIHdlYmtpdF9oaXRfdGVzdF9yZXN1bHRf
Z2V0X2NvbnRleHQoKSB0aGF0IHJldHVybnMgYSBiaXRtYXNrIG9mCisgKiAjV2ViS2l0SGl0VGVz
dFJlc3VsdENvbnRleHQgZmxhZ3MuIFlvdSBjYW4gYWxzbyB1c2UKKyAqIHdlYmtpdF9oaXRfdGVz
dF9yZXN1bHRfY29udGV4dF9pc19saW5rKCksIHdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4
dF9pc19pbWFnZSgpIGFuZAorICogd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX21l
ZGlhKCkgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlcmUncworICogYSBsaW5rLCBpbWFnZSBvciBh
IG1lZGlhIGVsZW1lbnQgYXQgdGhlIGNvb3JkaW5hdGVzIG9mIHRoZSBIaXQgVGVzdC4KKyAqIE5v
dGUgdGhhdCBpdCdzIHBvc3NpYmxlIHRoYXQgc2V2ZXJhbCAjV2ViS2l0SGl0VGVzdFJlc3VsdENv
bnRleHQgZmxhZ3MKKyAqIGFyZSBhY3RpdmUgYXQgdGhlIHNhbWUgdGltZSwgZm9yIGV4YW1wbGUg
aWYgdGhlcmUncyBhIGxpbmsgY29udGFpbmluZyBhbiBpbWFnZS4KKyAqCisgKiBXaGVuIHRoZSBt
b3VzZSBpcyBtb3ZlZCBvdmVyIGEgI1dlYktpdFdlYlZpZXcgYSBIaXQgVGVzdCBpcyBwZXJmb3Jt
ZWQKKyAqIGZvciB0aGUgbW91c2UgY29vcmRpbmF0ZXMgYW5kICNXZWJLaXRXZWJWaWV3Ojpob3Zl
cmVkLW92ZXItZWxlbWVudAorICogc2lnbmFsIGlzIGVtaXR0ZWQgd2l0aCBhICNXZWJLaXRIaXRU
ZXN0UmVzdWx0LgorICoKKyAqLworCit1c2luZyBuYW1lc3BhY2UgV2ViS2l0OworCitlbnVtIHsK
KyAgICBQUk9QXzAsCisKKyAgICBQUk9QX0NPTlRFWFQsCisgICAgUFJPUF9MSU5LX1VSSSwKKyAg
ICBQUk9QX0xJTktfVElUTEUsCisgICAgUFJPUF9MSU5LX0xBQkVMLAorICAgIFBST1BfSU1BR0Vf
VVJJLAorICAgIFBST1BfTUVESUFfVVJJCit9OworCitzdHJ1Y3QgX1dlYktpdEhpdFRlc3RSZXN1
bHRQcml2YXRlIHsKKyAgICB1bnNpZ25lZCBpbnQgY29udGV4dDsKKyAgICBDU3RyaW5nIGxpbmtV
Ukk7CisgICAgQ1N0cmluZyBsaW5rVGl0bGU7CisgICAgQ1N0cmluZyBsaW5rTGFiZWw7CisgICAg
Q1N0cmluZyBpbWFnZVVSSTsKKyAgICBDU3RyaW5nIG1lZGlhVVJJOworfTsKKworR19ERUZJTkVf
VFlQRShXZWJLaXRIaXRUZXN0UmVzdWx0LCB3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0LCBHX1RZUEVf
T0JKRUNUKQorCitzdGF0aWMgdm9pZCB3ZWJraXRIaXRUZXN0UmVzdWx0RmluYWxpemUoR09iamVj
dCogb2JqZWN0KQoreworICAgIFdFQktJVF9ISVRfVEVTVF9SRVNVTFQob2JqZWN0KS0+cHJpdi0+
fldlYktpdEhpdFRlc3RSZXN1bHRQcml2YXRlKCk7CisgICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0
X2hpdF90ZXN0X3Jlc3VsdF9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShvYmplY3QpOworfQorCitz
dGF0aWMgdm9pZCB3ZWJraXRIaXRUZXN0UmVzdWx0R2V0UHJvcGVydHkoR09iamVjdCogb2JqZWN0
LCBndWludCBwcm9wSWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBhcmFtU3BlYykKK3sK
KyAgICBXZWJLaXRIaXRUZXN0UmVzdWx0KiBoaXRUZXN0UmVzdWx0ID0gV0VCS0lUX0hJVF9URVNU
X1JFU1VMVChvYmplY3QpOworCisgICAgc3dpdGNoIChwcm9wSWQpIHsKKyAgICBjYXNlIFBST1Bf
Q09OVEVYVDoKKyAgICAgICAgZ192YWx1ZV9zZXRfdWludCh2YWx1ZSwgd2Via2l0X2hpdF90ZXN0
X3Jlc3VsdF9nZXRfY29udGV4dChoaXRUZXN0UmVzdWx0KSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgUFJPUF9MSU5LX1VSSToKKyAgICAgICAgZ192YWx1ZV9zZXRfc3RyaW5nKHZhbHVlLCB3
ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2dldF9saW5rX3VyaShoaXRUZXN0UmVzdWx0KSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9MSU5LX1RJVExFOgorICAgICAgICBnX3ZhbHVlX3Nl
dF9zdHJpbmcodmFsdWUsIHdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfZ2V0X2xpbmtfdGl0bGUoaGl0
VGVzdFJlc3VsdCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfTElOS19MQUJFTDoK
KyAgICAgICAgZ192YWx1ZV9zZXRfc3RyaW5nKHZhbHVlLCB3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0
X2dldF9saW5rX2xhYmVsKGhpdFRlc3RSZXN1bHQpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBQUk9QX0lNQUdFX1VSSToKKyAgICAgICAgZ192YWx1ZV9zZXRfc3RyaW5nKHZhbHVlLCB3ZWJr
aXRfaGl0X3Rlc3RfcmVzdWx0X2dldF9pbWFnZV91cmkoaGl0VGVzdFJlc3VsdCkpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIFBST1BfTUVESUFfVVJJOgorICAgICAgICBnX3ZhbHVlX3NldF9z
dHJpbmcodmFsdWUsIHdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfZ2V0X21lZGlhX3VyaShoaXRUZXN0
UmVzdWx0KSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNU
X1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BJZCwgcGFyYW1TcGVjKTsKKyAg
ICB9Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdEhpdFRlc3RSZXN1bHRTZXRQcm9wZXJ0eShHT2Jq
ZWN0KiBvYmplY3QsIGd1aW50IHByb3BJZCwgY29uc3QgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3Bl
YyogcGFyYW1TcGVjKQoreworICAgIFdlYktpdEhpdFRlc3RSZXN1bHQqIGhpdFRlc3RSZXN1bHQg
PSBXRUJLSVRfSElUX1RFU1RfUkVTVUxUKG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHByb3BJZCkg
eworICAgIGNhc2UgUFJPUF9DT05URVhUOgorICAgICAgICBoaXRUZXN0UmVzdWx0LT5wcml2LT5j
b250ZXh0ID0gZ192YWx1ZV9nZXRfdWludCh2YWx1ZSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgUFJPUF9MSU5LX1VSSToKKyAgICAgICAgaGl0VGVzdFJlc3VsdC0+cHJpdi0+bGlua1VSSSA9
IGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJP
UF9MSU5LX1RJVExFOgorICAgICAgICBoaXRUZXN0UmVzdWx0LT5wcml2LT5saW5rVGl0bGUgPSBn
X3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1Bf
TElOS19MQUJFTDoKKyAgICAgICAgaGl0VGVzdFJlc3VsdC0+cHJpdi0+bGlua0xhYmVsID0gZ192
YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0lN
QUdFX1VSSToKKyAgICAgICAgaGl0VGVzdFJlc3VsdC0+cHJpdi0+aW1hZ2VVUkkgPSBnX3ZhbHVl
X2dldF9zdHJpbmcodmFsdWUpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfTUVESUFf
VVJJOgorICAgICAgICBoaXRUZXN0UmVzdWx0LT5wcml2LT5tZWRpYVVSSSA9IGdfdmFsdWVfZ2V0
X3N0cmluZyh2YWx1ZSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdf
T0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BJZCwgcGFyYW1TcGVj
KTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfaW5pdChX
ZWJLaXRIaXRUZXN0UmVzdWx0KiBoaXRUZXN0UmVzdWx0KQoreworICAgIFdlYktpdEhpdFRlc3RS
ZXN1bHRQcml2YXRlKiBwcml2ID0gR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFKGhpdFRlc3RS
ZXN1bHQsIFdFQktJVF9UWVBFX0hJVF9URVNUX1JFU1VMVCwgV2ViS2l0SGl0VGVzdFJlc3VsdFBy
aXZhdGUpOworICAgIGhpdFRlc3RSZXN1bHQtPnByaXYgPSBwcml2OworICAgIG5ldyAocHJpdikg
V2ViS2l0SGl0VGVzdFJlc3VsdFByaXZhdGUoKTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2hp
dF90ZXN0X3Jlc3VsdF9jbGFzc19pbml0KFdlYktpdEhpdFRlc3RSZXN1bHRDbGFzcyogaGl0VGVz
dFJlc3VsdENsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyogb2JqZWN0Q2xhc3MgPSBHX09CSkVD
VF9DTEFTUyhoaXRUZXN0UmVzdWx0Q2xhc3MpOworICAgIG9iamVjdENsYXNzLT5nZXRfcHJvcGVy
dHkgPSB3ZWJraXRIaXRUZXN0UmVzdWx0R2V0UHJvcGVydHk7CisgICAgb2JqZWN0Q2xhc3MtPnNl
dF9wcm9wZXJ0eSA9IHdlYmtpdEhpdFRlc3RSZXN1bHRTZXRQcm9wZXJ0eTsKKyAgICBvYmplY3RD
bGFzcy0+ZmluYWxpemUgPSB3ZWJraXRIaXRUZXN0UmVzdWx0RmluYWxpemU7CisKKyAgICBHUGFy
YW1GbGFncyBwYXJhbUZsYWdzID0gc3RhdGljX2Nhc3Q8R1BhcmFtRmxhZ3M+KFdFQktJVF9QQVJB
TV9SRUFEV1JJVEUgfCBHX1BBUkFNX0NPTlNUUlVDVF9PTkxZKTsKKworICAgIC8qKgorICAgICAq
IFdlYktpdEhpdFRlc3RSZXN1bHQ6Y29udGV4dDoKKyAgICAgKgorICAgICAqIEJpdG1hc2sgb2Yg
I1dlYktpdEhpdFRlc3RSZXN1bHRDb250ZXh0IGZsYWdzIHJlcHJlc2VudGluZworICAgICAqIHRo
ZSBjb250ZXh0IG9mIHRoZSAjV2ViS2l0SGl0VGVzdFJlc3VsdC4KKyAgICAgKi8KKyAgICBnX29i
amVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KG9iamVjdENsYXNzLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgUFJPUF9DT05URVhULAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVjX3VpbnQoImNvbnRleHQiLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiQ29udGV4dCIpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXygi
RmxhZ3Mgd2l0aCB0aGUgY29udGV4dCBvZiB0aGUgV2ViS2l0SGl0VGVzdFJlc3VsdCIpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgR19N
QVhVSU5ULCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcGFyYW1GbGFncykpOworCisgICAgLyoqCisgICAgICogV2ViS2l0SGl0VGVzdFJl
c3VsdDpsaW5rLXVyaToKKyAgICAgKgorICAgICAqIFRoZSBVUkkgb2YgdGhlIGxpbmsgaWYgZmxh
ZyAlV0VCS0lUX0hJVF9URVNUX1JFU1VMVF9DT05URVhUX0xJTksKKyAgICAgKiBpcyBwcmVzZW50
IGluICNXZWJLaXRIaXRUZXN0UmVzdWx0OmNvbnRleHQKKyAgICAgKi8KKyAgICBnX29iamVjdF9j
bGFzc19pbnN0YWxsX3Byb3BlcnR5KG9iamVjdENsYXNzLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgUFJPUF9MSU5LX1VSSSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoImxpbmstdXJpIiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiTGluayBVUkkiKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XygiVGhlIGxpbmsgVVJJIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHBhcmFtRmxhZ3MpKTsKKyAgICAvKioKKyAgICAgKiBXZWJL
aXRIaXRUZXN0UmVzdWx0OmxpbmstdGl0bGU6CisgICAgICoKKyAgICAgKiBUaGUgdGl0bGUgb2Yg
dGhlIGxpbmsgaWYgZmxhZyAlV0VCS0lUX0hJVF9URVNUX1JFU1VMVF9DT05URVhUX0xJTksKKyAg
ICAgKiBpcyBwcmVzZW50IGluICNXZWJLaXRIaXRUZXN0UmVzdWx0OmNvbnRleHQKKyAgICAgKi8K
KyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KG9iamVjdENsYXNzLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPUF9MSU5LX1RJVExFLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygibGluay10aXRs
ZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF8oIkxpbmsgVGl0bGUiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXygiVGhlIGxpbmsgdGl0bGUiKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1GbGFncykp
OworICAgIC8qKgorICAgICAqIFdlYktpdEhpdFRlc3RSZXN1bHQ6bGluay1sYWJlbDoKKyAgICAg
KgorICAgICAqIFRoZSBsYWJlbCBvZiB0aGUgbGluayBpZiBmbGFnICVXRUJLSVRfSElUX1RFU1Rf
UkVTVUxUX0NPTlRFWFRfTElOSworICAgICAqIGlzIHByZXNlbnQgaW4gI1dlYktpdEhpdFRlc3RS
ZXN1bHQ6Y29udGV4dAorICAgICAqLworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVy
dHkob2JqZWN0Q2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9Q
X0xJTktfTEFCRUwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3BhcmFt
X3NwZWNfc3RyaW5nKCJsaW5rLWxhYmVsIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiTGluayBMYWJlbCIpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJUaGUgbGluayBs
YWJlbCIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwYXJhbUZsYWdzKSk7CisgICAgLyoqCisgICAgICogV2ViS2l0SGl0VGVzdFJl
c3VsdDppbWFnZS11cmk6CisgICAgICoKKyAgICAgKiBUaGUgVVJJIG9mIHRoZSBpbWFnZSBpZiBm
bGFnICVXRUJLSVRfSElUX1RFU1RfUkVTVUxUX0NPTlRFWFRfSU1BR0UKKyAgICAgKiBpcyBwcmVz
ZW50IGluICNXZWJLaXRIaXRUZXN0UmVzdWx0OmNvbnRleHQKKyAgICAgKi8KKyAgICBnX29iamVj
dF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KG9iamVjdENsYXNzLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgUFJPUF9JTUFHRV9VUkksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKCJpbWFnZS11cmkiLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJJbWFnZSBV
UkkiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXygiVGhlIGltYWdlIFVSSSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbUZsYWdzKSk7CisgICAgLyoqCisgICAg
ICogV2ViS2l0SGl0VGVzdFJlc3VsdDptZWRpYS11cmk6CisgICAgICoKKyAgICAgKiBUaGUgVVJJ
IG9mIHRoZSBtZWRpYSBpZiBmbGFnICVXRUJLSVRfSElUX1RFU1RfUkVTVUxUX0NPTlRFWFRfTUVE
SUEKKyAgICAgKiBpcyBwcmVzZW50IGluICNXZWJLaXRIaXRUZXN0UmVzdWx0OmNvbnRleHQKKyAg
ICAgKi8KKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KG9iamVjdENsYXNzLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPUF9NRURJQV9VUkksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKCJtZWRp
YS11cmkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfKCJNZWRpYSBVUkkiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXygiVGhlIG1lZGlhIFVSSSIpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbUZsYWdz
KSk7CisKKyAgICBnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUoaGl0VGVzdFJlc3VsdENsYXNzLCBz
aXplb2YoV2ViS2l0SGl0VGVzdFJlc3VsdFByaXZhdGUpKTsKK30KKworV2ViS2l0SGl0VGVzdFJl
c3VsdCogd2Via2l0SGl0VGVzdFJlc3VsdENyZWF0ZShXS0hpdFRlc3RSZXN1bHRSZWYgd2tIaXRU
ZXN0UmVzdWx0KQoreworICAgIHVuc2lnbmVkIGNvbnRleHQgPSBXRUJLSVRfSElUX1RFU1RfUkVT
VUxUX0NPTlRFWFRfRE9DVU1FTlQ7CisKKyAgICBjb25zdCBTdHJpbmcmIGxpbmtVUkwgPSB0b0lt
cGwod2tIaXRUZXN0UmVzdWx0KS0+YWJzb2x1dGVMaW5rVVJMKCk7CisgICAgaWYgKCFsaW5rVVJM
LmlzRW1wdHkoKSkKKyAgICAgICAgY29udGV4dCB8PSBXRUJLSVRfSElUX1RFU1RfUkVTVUxUX0NP
TlRFWFRfTElOSzsKKworICAgIGNvbnN0IFN0cmluZyYgaW1hZ2VVUkwgPSB0b0ltcGwod2tIaXRU
ZXN0UmVzdWx0KS0+YWJzb2x1dGVJbWFnZVVSTCgpOworICAgIGlmICghaW1hZ2VVUkwuaXNFbXB0
eSgpKQorICAgICAgICBjb250ZXh0IHw9IFdFQktJVF9ISVRfVEVTVF9SRVNVTFRfQ09OVEVYVF9J
TUFHRTsKKworICAgIGNvbnN0IFN0cmluZyYgbWVkaWFVUkwgPSB0b0ltcGwod2tIaXRUZXN0UmVz
dWx0KS0+YWJzb2x1dGVNZWRpYVVSTCgpOworICAgIGlmICghbWVkaWFVUkwuaXNFbXB0eSgpKQor
ICAgICAgICBjb250ZXh0IHw9IFdFQktJVF9ISVRfVEVTVF9SRVNVTFRfQ09OVEVYVF9NRURJQTsK
KworICAgIGNvbnN0IFN0cmluZyYgbGlua1RpdGxlID0gdG9JbXBsKHdrSGl0VGVzdFJlc3VsdCkt
PmxpbmtUaXRsZSgpOworICAgIGNvbnN0IFN0cmluZyYgbGlua0xhYmVsID0gdG9JbXBsKHdrSGl0
VGVzdFJlc3VsdCktPmxpbmtMYWJlbCgpOworCisgICAgcmV0dXJuIFdFQktJVF9ISVRfVEVTVF9S
RVNVTFQoZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX0hJVF9URVNUX1JFU1VMVCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbnRleHQiLCBjb250ZXh0
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluay11
cmkiLCAhbGlua1VSTC5pc0VtcHR5KCkgPyBsaW5rVVJMLnV0ZjgoKS5kYXRhKCkgOiAwLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW1hZ2UtdXJpIiwg
IWltYWdlVVJMLmlzRW1wdHkoKSA/IGltYWdlVVJMLnV0ZjgoKS5kYXRhKCkgOiAwLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWVkaWEtdXJpIiwgIW1l
ZGlhVVJMLmlzRW1wdHkoKSA/IG1lZGlhVVJMLnV0ZjgoKS5kYXRhKCkgOiAwLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluay10aXRsZSIsICFsaW5r
VGl0bGUuaXNFbXB0eSgpID8gbGlua1RpdGxlLnV0ZjgoKS5kYXRhKCkgOiAwLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluay1sYWJlbCIsICFsaW5r
TGFiZWwuaXNFbXB0eSgpID8gbGlua0xhYmVsLnV0ZjgoKS5kYXRhKCkgOiAwLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKSk7Cit9CisKK3N0YXRp
YyBib29sIHN0cmluZ0lzRXF1YWxUb0NTdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGNvbnN0
IENTdHJpbmcmIGNTdHJpbmcpCit7CisgICAgcmV0dXJuICgoc3RyaW5nLmlzRW1wdHkoKSAmJiBj
U3RyaW5nLmlzTnVsbCgpKSB8fCAoc3RyaW5nLnV0ZjgoKSA9PSBjU3RyaW5nKSk7Cit9CisKK2Jv
b2wgd2Via2l0SGl0VGVzdFJlc3VsdENvbXBhcmUoV2ViS2l0SGl0VGVzdFJlc3VsdCogaGl0VGVz
dFJlc3VsdCwgV0tIaXRUZXN0UmVzdWx0UmVmIHdrSGl0VGVzdFJlc3VsdCkKK3sKKyAgICBXZWJL
aXRIaXRUZXN0UmVzdWx0UHJpdmF0ZSogcHJpdiA9IGhpdFRlc3RSZXN1bHQtPnByaXY7CisgICAg
cmV0dXJuIHN0cmluZ0lzRXF1YWxUb0NTdHJpbmcodG9JbXBsKHdrSGl0VGVzdFJlc3VsdCktPmFi
c29sdXRlTGlua1VSTCgpLCBwcml2LT5saW5rVVJJKQorICAgICAgICAmJiBzdHJpbmdJc0VxdWFs
VG9DU3RyaW5nKHRvSW1wbCh3a0hpdFRlc3RSZXN1bHQpLT5saW5rVGl0bGUoKSwgcHJpdi0+bGlu
a1RpdGxlKQorICAgICAgICAmJiBzdHJpbmdJc0VxdWFsVG9DU3RyaW5nKHRvSW1wbCh3a0hpdFRl
c3RSZXN1bHQpLT5saW5rTGFiZWwoKSwgcHJpdi0+bGlua0xhYmVsKQorICAgICAgICAmJiBzdHJp
bmdJc0VxdWFsVG9DU3RyaW5nKHRvSW1wbCh3a0hpdFRlc3RSZXN1bHQpLT5hYnNvbHV0ZUltYWdl
VVJMKCksIHByaXYtPmltYWdlVVJJKQorICAgICAgICAmJiBzdHJpbmdJc0VxdWFsVG9DU3RyaW5n
KHRvSW1wbCh3a0hpdFRlc3RSZXN1bHQpLT5hYnNvbHV0ZU1lZGlhVVJMKCksIHByaXYtPm1lZGlh
VVJJKTsKK30KKworYm9vbCB3a0hpdFRlc3RSZXN1bHRJc0VtcHR5KFdLSGl0VGVzdFJlc3VsdFJl
ZiB3a0hpdFRlc3RSZXN1bHQpCit7CisgICAgcmV0dXJuIHRvSW1wbCh3a0hpdFRlc3RSZXN1bHQp
LT5hYnNvbHV0ZUxpbmtVUkwoKS5pc0VtcHR5KCkKKyAgICAgICAgJiYgdG9JbXBsKHdrSGl0VGVz
dFJlc3VsdCktPmFic29sdXRlSW1hZ2VVUkwoKS5pc0VtcHR5KCkKKyAgICAgICAgJiYgdG9JbXBs
KHdrSGl0VGVzdFJlc3VsdCktPmFic29sdXRlTWVkaWFVUkwoKS5pc0VtcHR5KCkKKyAgICAgICAg
JiYgdG9JbXBsKHdrSGl0VGVzdFJlc3VsdCktPmxpbmtUaXRsZSgpLmlzRW1wdHkoKQorICAgICAg
ICAmJiB0b0ltcGwod2tIaXRUZXN0UmVzdWx0KS0+bGlua0xhYmVsKCkuaXNFbXB0eSgpOworfQor
CisvKioKKyAqIHdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfZ2V0X2NvbnRleHQ6CisgKiBAaGl0X3Rl
c3RfcmVzdWx0OiBhICNXZWJLaXRIaXRUZXN0UmVzdWx0CisgKgorICogR2V0cyB0aGUgdmFsdWUg
b2YgdGhlICNXZWJLaXRIaXRUZXN0UmVzdWx0OmNvbnRleHQgcHJvcGVydHkuCisgKgorICogUmV0
dXJuczogYSBiaXRtYXNrIG9mICNXZWJLaXRIaXRUZXN0UmVzdWx0Q29udGV4dCBmbGFncworICov
CitndWludCB3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2dldF9jb250ZXh0KFdlYktpdEhpdFRlc3RS
ZXN1bHQqIGhpdFRlc3RSZXN1bHQpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lU
X0lTX0hJVF9URVNUX1JFU1VMVChoaXRUZXN0UmVzdWx0KSwgMCk7CisKKyAgICByZXR1cm4gaGl0
VGVzdFJlc3VsdC0+cHJpdi0+Y29udGV4dDsKK30KKworLyoqCisgKiB3ZWJraXRfaGl0X3Rlc3Rf
cmVzdWx0X2NvbnRleHRfaXNfbGluazoKKyAqIEBoaXRfdGVzdF9yZXN1bHQ6IGEgI1dlYktpdEhp
dFRlc3RSZXN1bHQKKyAqCisgKiBHZXRzIHdoZXRoZXIgJVdFQktJVF9ISVRfVEVTVF9SRVNVTFRf
Q09OVEVYVF9MSU5LIGZsYWcgaXMgcHJlc2VudCBpbgorICogI1dlYktpdEhpdFRlc3RSZXN1bHQ6
Y29udGV4dC4KKyAqCisgKiBSZXR1cm5zOiAlVFJVRSBpZiB0aGVyZSdzIGEgbGluayBlbGVtZW50
IGluIHRoZSBjb29yZGluYXRlcyBvZiB0aGUgSGl0IFRlc3QsCisgKiAgICBvciAlRkFMU0Ugb3Ro
ZXJ3aXNlCisgKi8KK2dib29sZWFuIHdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19s
aW5rKFdlYktpdEhpdFRlc3RSZXN1bHQqIGhpdFRlc3RSZXN1bHQpCit7CisgICAgZ19yZXR1cm5f
dmFsX2lmX2ZhaWwoV0VCS0lUX0lTX0hJVF9URVNUX1JFU1VMVChoaXRUZXN0UmVzdWx0KSwgRkFM
U0UpOworCisgICAgcmV0dXJuIGhpdFRlc3RSZXN1bHQtPnByaXYtPmNvbnRleHQgJiBXRUJLSVRf
SElUX1RFU1RfUkVTVUxUX0NPTlRFWFRfTElOSzsKK30KKworLyoqCisgKiB3ZWJraXRfaGl0X3Rl
c3RfcmVzdWx0X2NvbnRleHRfaXNfaW1hZ2U6CisgKiBAaGl0X3Rlc3RfcmVzdWx0OiBhICNXZWJL
aXRIaXRUZXN0UmVzdWx0CisgKgorICogR2V0cyB3aGV0aGVyICVXRUJLSVRfSElUX1RFU1RfUkVT
VUxUX0NPTlRFWFRfSU1BR0UgZmxhZyBpcyBwcmVzZW50IGluCisgKiAjV2ViS2l0SGl0VGVzdFJl
c3VsdDpjb250ZXh0LgorICoKKyAqIFJldHVybnM6ICVUUlVFIGlmIHRoZXJlJ3MgYW4gaW1hZ2Ug
ZWxlbWVudCBpbiB0aGUgY29vcmRpbmF0ZXMgb2YgdGhlIEhpdCBUZXN0LAorICogICAgb3IgJUZB
TFNFIG90aGVyd2lzZQorICovCitnYm9vbGVhbiB3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRl
eHRfaXNfaW1hZ2UoV2ViS2l0SGl0VGVzdFJlc3VsdCogaGl0VGVzdFJlc3VsdCkKK3sKKyAgICBn
X3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfSElUX1RFU1RfUkVTVUxUKGhpdFRlc3RSZXN1
bHQpLCBGQUxTRSk7CisKKyAgICByZXR1cm4gaGl0VGVzdFJlc3VsdC0+cHJpdi0+Y29udGV4dCAm
IFdFQktJVF9ISVRfVEVTVF9SRVNVTFRfQ09OVEVYVF9JTUFHRTsKK30KKworLyoqCisgKiB3ZWJr
aXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfbWVkaWE6CisgKiBAaGl0X3Rlc3RfcmVzdWx0
OiBhICNXZWJLaXRIaXRUZXN0UmVzdWx0CisgKgorICogR2V0cyB3aGV0aGVyICVXRUJLSVRfSElU
X1RFU1RfUkVTVUxUX0NPTlRFWFRfTUVESUEgZmxhZyBpcyBwcmVzZW50IGluCisgKiAjV2ViS2l0
SGl0VGVzdFJlc3VsdDpjb250ZXh0LgorICoKKyAqIFJldHVybnM6ICVUUlVFIGlmIHRoZXJlJ3Mg
YSBtZWRpYSBlbGVtZW50IGluIHRoZSBjb29yZGluYXRlcyBvZiB0aGUgSGl0IFRlc3QsCisgKiAg
ICBvciAlRkFMU0Ugb3RoZXJ3aXNlCisgKi8KK2dib29sZWFuIHdlYmtpdF9oaXRfdGVzdF9yZXN1
bHRfY29udGV4dF9pc19tZWRpYShXZWJLaXRIaXRUZXN0UmVzdWx0KiBoaXRUZXN0UmVzdWx0KQor
eworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19ISVRfVEVTVF9SRVNVTFQoaGl0
VGVzdFJlc3VsdCksIEZBTFNFKTsKKworICAgIHJldHVybiBoaXRUZXN0UmVzdWx0LT5wcml2LT5j
b250ZXh0ICYgV0VCS0lUX0hJVF9URVNUX1JFU1VMVF9DT05URVhUX01FRElBOworfQorCisvKioK
KyAqIHdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfZ2V0X2xpbmtfdXJpOgorICogQGhpdF90ZXN0X3Jl
c3VsdDogYSAjV2ViS2l0SGl0VGVzdFJlc3VsdAorICoKKyAqIEdldHMgdGhlIHZhbHVlIG9mIHRo
ZSAjV2ViS2l0SGl0VGVzdFJlc3VsdDpsaW5rLXVyaSBwcm9wZXJ0eS4KKyAqCisgKiBSZXR1cm5z
OiB0aGUgVVJJIG9mIHRoZSBsaW5rIGVsZW1lbnQgaW4gdGhlIGNvb3JkaW5hdGVzIG9mIHRoZSBI
aXQgVGVzdCwKKyAqICAgIG9yICVOVUxMIGlmIHRoZXJlIGlucyd0IGEgbGluayBlbGVtZW50IGlu
IEBoaXRfdGVzdF9yZXN1bHQgY29udGV4dAorICovCitjb25zdCBnY2hhciogd2Via2l0X2hpdF90
ZXN0X3Jlc3VsdF9nZXRfbGlua191cmkoV2ViS2l0SGl0VGVzdFJlc3VsdCogaGl0VGVzdFJlc3Vs
dCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfSElUX1RFU1RfUkVTVUxU
KGhpdFRlc3RSZXN1bHQpLCAwKTsKKworICAgIHJldHVybiBoaXRUZXN0UmVzdWx0LT5wcml2LT5s
aW5rVVJJLmRhdGEoKTsKK30KKworLyoqCisgKiB3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2dldF9s
aW5rX3RpdGxlOgorICogQGhpdF90ZXN0X3Jlc3VsdDogYSAjV2ViS2l0SGl0VGVzdFJlc3VsdAor
ICoKKyAqIEdldHMgdGhlIHZhbHVlIG9mIHRoZSAjV2ViS2l0SGl0VGVzdFJlc3VsdDpsaW5rLXRp
dGxlIHByb3BlcnR5LgorICoKKyAqIFJldHVybnM6IHRoZSB0aXRsZSBvZiB0aGUgbGluayBlbGVt
ZW50IGluIHRoZSBjb29yZGluYXRlcyBvZiB0aGUgSGl0IFRlc3QsCisgKiAgICBvciAlTlVMTCBp
ZiB0aGVyZSBpbnMndCBhIGxpbmsgZWxlbWVudCBpbiBAaGl0X3Rlc3RfcmVzdWx0IGNvbnRleHQg
b3IgdGhlCisgKiAgICBsaW5rIGVsZW1lbnQgZG9lc24ndCBoYXZlIGEgdGl0bGUKKyAqLworY29u
c3QgZ2NoYXIqIHdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfZ2V0X2xpbmtfdGl0bGUoV2ViS2l0SGl0
VGVzdFJlc3VsdCogaGl0VGVzdFJlc3VsdCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChX
RUJLSVRfSVNfSElUX1RFU1RfUkVTVUxUKGhpdFRlc3RSZXN1bHQpLCAwKTsKKworICAgIHJldHVy
biBoaXRUZXN0UmVzdWx0LT5wcml2LT5saW5rVGl0bGUuZGF0YSgpOworfQorCisvKioKKyAqIHdl
YmtpdF9oaXRfdGVzdF9yZXN1bHRfZ2V0X2xpbmtfbGFiZWw6CisgKiBAaGl0X3Rlc3RfcmVzdWx0
OiBhICNXZWJLaXRIaXRUZXN0UmVzdWx0CisgKgorICogR2V0cyB0aGUgdmFsdWUgb2YgdGhlICNX
ZWJLaXRIaXRUZXN0UmVzdWx0OmxpbmstbGFiZWwgcHJvcGVydHkuCisgKgorICogUmV0dXJuczog
dGhlIGxhYmVsIG9mIHRoZSBsaW5rIGVsZW1lbnQgaW4gdGhlIGNvb3JkaW5hdGVzIG9mIHRoZSBI
aXQgVGVzdCwKKyAqICAgIG9yICVOVUxMIGlmIHRoZXJlIGlucyd0IGEgbGluayBlbGVtZW50IGlu
IEBoaXRfdGVzdF9yZXN1bHQgY29udGV4dCBvciB0aGUKKyAqICAgIGxpbmsgZWxlbWVudCBkb2Vz
bid0IGhhdmUgYSBsYWJlbAorICovCitjb25zdCBnY2hhciogd2Via2l0X2hpdF90ZXN0X3Jlc3Vs
dF9nZXRfbGlua19sYWJlbChXZWJLaXRIaXRUZXN0UmVzdWx0KiBoaXRUZXN0UmVzdWx0KQorewor
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19ISVRfVEVTVF9SRVNVTFQoaGl0VGVz
dFJlc3VsdCksIDApOworCisgICAgcmV0dXJuIGhpdFRlc3RSZXN1bHQtPnByaXYtPmxpbmtMYWJl
bC5kYXRhKCk7Cit9CisKKy8qKgorICogd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9nZXRfaW1hZ2Vf
dXJpOgorICogQGhpdF90ZXN0X3Jlc3VsdDogYSAjV2ViS2l0SGl0VGVzdFJlc3VsdAorICoKKyAq
IEdldHMgdGhlIHZhbHVlIG9mIHRoZSAjV2ViS2l0SGl0VGVzdFJlc3VsdDppbWFnZS11cmkgcHJv
cGVydHkuCisgKgorICogUmV0dXJuczogdGhlIFVSSSBvZiB0aGUgaW1hZ2UgZWxlbWVudCBpbiB0
aGUgY29vcmRpbmF0ZXMgb2YgdGhlIEhpdCBUZXN0LAorICogICAgb3IgJU5VTEwgaWYgdGhlcmUg
aW5zJ3QgYW4gaW1hZ2UgZWxlbWVudCBpbiBAaGl0X3Rlc3RfcmVzdWx0IGNvbnRleHQKKyAqLwor
Y29uc3QgZ2NoYXIqIHdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfZ2V0X2ltYWdlX3VyaShXZWJLaXRI
aXRUZXN0UmVzdWx0KiBoaXRUZXN0UmVzdWx0KQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWls
KFdFQktJVF9JU19ISVRfVEVTVF9SRVNVTFQoaGl0VGVzdFJlc3VsdCksIDApOworCisgICAgcmV0
dXJuIGhpdFRlc3RSZXN1bHQtPnByaXYtPmltYWdlVVJJLmRhdGEoKTsKK30KKworLyoqCisgKiB3
ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2dldF9tZWRpYV91cmk6CisgKiBAaGl0X3Rlc3RfcmVzdWx0
OiBhICNXZWJLaXRIaXRUZXN0UmVzdWx0CisgKgorICogR2V0cyB0aGUgdmFsdWUgb2YgdGhlICNX
ZWJLaXRIaXRUZXN0UmVzdWx0Om1lZGlhLXVyaSBwcm9wZXJ0eS4KKyAqCisgKiBSZXR1cm5zOiB0
aGUgVVJJIG9mIHRoZSBtZWRpYSBlbGVtZW50IGluIHRoZSBjb29yZGluYXRlcyBvZiB0aGUgSGl0
IFRlc3QsCisgKiAgICBvciAlTlVMTCBpZiB0aGVyZSBpbnMndCBhIG1lZGlhIGVsZW1lbnQgaW4g
QGhpdF90ZXN0X3Jlc3VsdCBjb250ZXh0CisgKi8KK2NvbnN0IGdjaGFyKiB3ZWJraXRfaGl0X3Rl
c3RfcmVzdWx0X2dldF9tZWRpYV91cmkoV2ViS2l0SGl0VGVzdFJlc3VsdCogaGl0VGVzdFJlc3Vs
dCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfSElUX1RFU1RfUkVTVUxU
KGhpdFRlc3RSZXN1bHQpLCAwKTsKKworICAgIHJldHVybiBoaXRUZXN0UmVzdWx0LT5wcml2LT5t
ZWRpYVVSSS5kYXRhKCk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXRIaXRUZXN0UmVzdWx0LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXRIaXRUZXN0UmVzdWx0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uZDg5MTZlNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL1dlYktpdEhpdFRlc3RSZXN1bHQuaApAQCAtMCwwICsxLDEwMiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisg
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWYgIWRlZmluZWQoX19XRUJLSVQy
X0hfSU5TSURFX18pICYmICFkZWZpbmVkKFdFQktJVDJfQ09NUElMQVRJT04pCisjZXJyb3IgIk9u
bHkgPHdlYmtpdDIvd2Via2l0Mi5oPiBjYW4gYmUgaW5jbHVkZWQgZGlyZWN0bHkuIgorI2VuZGlm
CisKKyNpZm5kZWYgV2ViS2l0SGl0VGVzdFJlc3VsdF9oCisjZGVmaW5lIFdlYktpdEhpdFRlc3RS
ZXN1bHRfaAorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXQyL1dl
YktpdERlZmluZXMuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9UWVBFX0hJ
VF9URVNUX1JFU1VMVCAgICAgICAgICAgICh3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2dldF90eXBl
KCkpCisjZGVmaW5lIFdFQktJVF9ISVRfVEVTVF9SRVNVTFQob2JqKSAgICAgICAgICAgIChHX1RZ
UEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX1RZUEVfSElUX1RFU1RfUkVTVUxU
LCBXZWJLaXRIaXRUZXN0UmVzdWx0KSkKKyNkZWZpbmUgV0VCS0lUX0lTX0hJVF9URVNUX1JFU1VM
VChvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRf
VFlQRV9ISVRfVEVTVF9SRVNVTFQpKQorI2RlZmluZSBXRUJLSVRfSElUX1RFU1RfUkVTVUxUX0NM
QVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9U
WVBFX0hJVF9URVNUX1JFU1VMVCwgV2ViS2l0SGl0VGVzdFJlc3VsdENsYXNzKSkKKyNkZWZpbmUg
V0VCS0lUX0lTX0hJVF9URVNUX1JFU1VMVF9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFT
U19UWVBFKChrbGFzcyksICBXRUJLSVRfVFlQRV9ISVRfVEVTVF9SRVNVTFQpKQorI2RlZmluZSBX
RUJLSVRfSElUX1RFU1RfUkVTVUxUX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dF
VF9DTEFTUygob2JqKSwgIFdFQktJVF9UWVBFX0hJVF9URVNUX1JFU1VMVCwgV2ViS2l0SGl0VGVz
dFJlc3VsdENsYXNzKSkKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdEhpdFRlc3RSZXN1bHQgICAg
ICAgIFdlYktpdEhpdFRlc3RSZXN1bHQ7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0SGl0VGVzdFJl
c3VsdENsYXNzICAgV2ViS2l0SGl0VGVzdFJlc3VsdENsYXNzOwordHlwZWRlZiBzdHJ1Y3QgX1dl
YktpdEhpdFRlc3RSZXN1bHRQcml2YXRlIFdlYktpdEhpdFRlc3RSZXN1bHRQcml2YXRlOworCisv
KioKKyAqIFdlYktpdEhpdFRlc3RSZXN1bHRDb250ZXh0OgorICogQFdFQktJVF9ISVRfVEVTVF9S
RVNVTFRfQ09OVEVYVF9ET0NVTUVOVDogYW55d2hlcmUgaW4gdGhlIGRvY3VtZW50LgorICogQFdF
QktJVF9ISVRfVEVTVF9SRVNVTFRfQ09OVEVYVF9MSU5LOiBhIGh5cGVybGluayBlbGVtZW50Lgor
ICogQFdFQktJVF9ISVRfVEVTVF9SRVNVTFRfQ09OVEVYVF9JTUFHRTogYW4gaW1hZ2UgZWxlbWVu
dC4KKyAqIEBXRUJLSVRfSElUX1RFU1RfUkVTVUxUX0NPTlRFWFRfTUVESUE6IGEgdmlkZW8gb3Ig
YXVkaW8gZWxlbWVudC4KKyAqCisgKiBFbnVtIHZhbHVlcyB3aXRoIGZsYWdzIHJlcHJlc2VudGlu
ZyB0aGUgY29udGV4dCBvZiBhICNXZWJLaXRIaXRUZXN0UmVzdWx0LgorICovCit0eXBlZGVmIGVu
dW0KK3sKKyAgICBXRUJLSVRfSElUX1RFU1RfUkVTVUxUX0NPTlRFWFRfRE9DVU1FTlQgPSAxIDw8
IDEsCisgICAgV0VCS0lUX0hJVF9URVNUX1JFU1VMVF9DT05URVhUX0xJTksgICAgID0gMSA8PCAy
LAorICAgIFdFQktJVF9ISVRfVEVTVF9SRVNVTFRfQ09OVEVYVF9JTUFHRSAgICA9IDEgPDwgMywK
KyAgICBXRUJLSVRfSElUX1RFU1RfUkVTVUxUX0NPTlRFWFRfTUVESUEgICAgPSAxIDw8IDQKK30g
V2ViS2l0SGl0VGVzdFJlc3VsdENvbnRleHQ7CisKK3N0cnVjdCBfV2ViS2l0SGl0VGVzdFJlc3Vs
dCB7CisgICAgR09iamVjdCBwYXJlbnQ7CisKKyAgICBXZWJLaXRIaXRUZXN0UmVzdWx0UHJpdmF0
ZSAqcHJpdjsKK307CisKK3N0cnVjdCBfV2ViS2l0SGl0VGVzdFJlc3VsdENsYXNzIHsKKyAgICBH
T2JqZWN0Q2xhc3MgcGFyZW50X2NsYXNzOworfTsKKworV0VCS0lUX0FQSSBHVHlwZQord2Via2l0
X2hpdF90ZXN0X3Jlc3VsdF9nZXRfdHlwZSAgICAgICAgICAgICAodm9pZCk7CisKK1dFQktJVF9B
UEkgZ3VpbnQKK3dlYmtpdF9oaXRfdGVzdF9yZXN1bHRfZ2V0X2NvbnRleHQgICAgICAgICAgKFdl
YktpdEhpdFRlc3RSZXN1bHQgKmhpdF90ZXN0X3Jlc3VsdCk7CisKK1dFQktJVF9BUEkgZ2Jvb2xl
YW4KK3dlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19saW5rICAgICAgKFdlYktpdEhp
dFRlc3RSZXN1bHQgKmhpdF90ZXN0X3Jlc3VsdCk7CisKK1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dl
YmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19pbWFnZSAgICAgKFdlYktpdEhpdFRlc3RS
ZXN1bHQgKmhpdF90ZXN0X3Jlc3VsdCk7CisKK1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF9o
aXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19tZWRpYSAgICAgKFdlYktpdEhpdFRlc3RSZXN1bHQg
KmhpdF90ZXN0X3Jlc3VsdCk7CisKK1dFQktJVF9BUEkgY29uc3QgZ2NoYXIgKgord2Via2l0X2hp
dF90ZXN0X3Jlc3VsdF9nZXRfbGlua191cmkgICAgICAgICAoV2ViS2l0SGl0VGVzdFJlc3VsdCAq
aGl0X3Rlc3RfcmVzdWx0KTsKKworV0VCS0lUX0FQSSBjb25zdCBnY2hhciAqCit3ZWJraXRfaGl0
X3Rlc3RfcmVzdWx0X2dldF9saW5rX3RpdGxlICAgICAgIChXZWJLaXRIaXRUZXN0UmVzdWx0ICpo
aXRfdGVzdF9yZXN1bHQpOworCitXRUJLSVRfQVBJIGNvbnN0IGdjaGFyICoKK3dlYmtpdF9oaXRf
dGVzdF9yZXN1bHRfZ2V0X2xpbmtfbGFiZWwgICAgICAgKFdlYktpdEhpdFRlc3RSZXN1bHQgKmhp
dF90ZXN0X3Jlc3VsdCk7CisKK1dFQktJVF9BUEkgY29uc3QgZ2NoYXIgKgord2Via2l0X2hpdF90
ZXN0X3Jlc3VsdF9nZXRfaW1hZ2VfdXJpICAgICAgICAoV2ViS2l0SGl0VGVzdFJlc3VsdCAqaGl0
X3Rlc3RfcmVzdWx0KTsKKworV0VCS0lUX0FQSSBjb25zdCBnY2hhciAqCit3ZWJraXRfaGl0X3Rl
c3RfcmVzdWx0X2dldF9tZWRpYV91cmkgICAgICAgIChXZWJLaXRIaXRUZXN0UmVzdWx0ICpoaXRf
dGVzdF9yZXN1bHQpOworCitHX0VORF9ERUNMUworCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEhpdFRlc3RSZXN1bHRQcml2YXRlLmgg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRIaXRUZXN0UmVzdWx0UHJp
dmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjOTg2MGQKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRIaXRU
ZXN0UmVzdWx0UHJpdmF0ZS5oCkBAIC0wLDAgKzEsMzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTIgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRIaXRUZXN0UmVzdWx0UHJpdmF0ZV9oCisj
ZGVmaW5lIFdlYktpdEhpdFRlc3RSZXN1bHRQcml2YXRlX2gKKworI2luY2x1ZGUgIldlYktpdEhp
dFRlc3RSZXN1bHQuaCIKKyNpbmNsdWRlICJXZWJLaXRQcml2YXRlLmgiCisKK1dlYktpdEhpdFRl
c3RSZXN1bHQqIHdlYmtpdEhpdFRlc3RSZXN1bHRDcmVhdGUoV0tIaXRUZXN0UmVzdWx0UmVmKTsK
K2Jvb2wgd2Via2l0SGl0VGVzdFJlc3VsdENvbXBhcmUoV2ViS2l0SGl0VGVzdFJlc3VsdCosIFdL
SGl0VGVzdFJlc3VsdFJlZik7Citib29sIHdrSGl0VGVzdFJlc3VsdElzRW1wdHkoV0tIaXRUZXN0
UmVzdWx0UmVmKTsKKworI2VuZGlmIC8vIFdlYktpdEhpdFRlc3RSZXN1bHRQcml2YXRlX2gKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdE5hdmlnYXRp
b25Qb2xpY3lEZWNpc2lvbi5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXROYXZpZ2F0aW9uUG9saWN5RGVjaXNpb24uY3BwCmluZGV4IGZjZDU3YjQuLjk0ZDEzZWEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdE5hdmln
YXRpb25Qb2xpY3lEZWNpc2lvbi5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0TmF2aWdhdGlvblBvbGljeURlY2lzaW9uLmNwcApAQCAtMjUsNyArMjUsNiBA
QAogI2luY2x1ZGUgIldlYktpdFByaXZhdGUuaCIKICNpbmNsdWRlICJXZWJLaXRVUklSZXF1ZXN0
UHJpdmF0ZS5oIgogI2luY2x1ZGUgIldlYlVSTFJlcXVlc3QuaCIKLSNpbmNsdWRlIDxnZGsvZ2Rr
Lmg+CiAjaW5jbHVkZSA8Z2xpYi9naTE4bi1saWIuaD4KICNpbmNsdWRlIDx3dGYvZ29iamVjdC9H
UmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgpAQCAtMjgwLDI2ICsyNzks
MTIgQEAgc3RhdGljIHVuc2lnbmVkIHdrRXZlbnRNb3VzZUJ1dHRvblRvV2ViS2l0TW91c2VCdXR0
b24oV0tFdmVudE1vdXNlQnV0dG9uIHdrQnV0dG8KICAgICByZXR1cm4gMDsKIH0KIAotdW5zaWdu
ZWQgd2tFdmVudE1vZGlmaWVyc1RvVW5zaWduZWQoV0tFdmVudE1vZGlmaWVycyB3a01vZGlmaWVy
cykKLXsKLSAgICB1bnNpZ25lZCBtb2RpZmllcnMgPSAwOwotICAgIGlmICh3a01vZGlmaWVycyAm
IGtXS0V2ZW50TW9kaWZpZXJzU2hpZnRLZXkpCi0gICAgICAgIG1vZGlmaWVycyB8PSBHREtfU0hJ
RlRfTUFTSzsKLSAgICBpZiAod2tNb2RpZmllcnMgJiBrV0tFdmVudE1vZGlmaWVyc0NvbnRyb2xL
ZXkpCi0gICAgICAgIG1vZGlmaWVycyB8PSBHREtfQ09OVFJPTF9NQVNLOwotICAgIGlmICh3a01v
ZGlmaWVycyAmIGtXS0V2ZW50TW9kaWZpZXJzQWx0S2V5KQotICAgICAgICBtb2RpZmllcnMgfD0g
R0RLX01PRDFfTUFTSzsKLSAgICBpZiAod2tNb2RpZmllcnMgJiBrV0tFdmVudE1vZGlmaWVyc01l
dGFLZXkpCi0gICAgICAgIG1vZGlmaWVycyB8PSBHREtfTUVUQV9NQVNLOwotICAgIHJldHVybiBt
b2RpZmllcnM7Ci19Ci0KIFdlYktpdE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbiogd2Via2l0TmF2
aWdhdGlvblBvbGljeURlY2lzaW9uQ3JlYXRlKFdLRnJhbWVOYXZpZ2F0aW9uVHlwZSBuYXZpZ2F0
aW9uVHlwZSwgV0tFdmVudE1vdXNlQnV0dG9uIG1vdXNlQnV0dG9uLCBXS0V2ZW50TW9kaWZpZXJz
IG1vZGlmaWVycywgV0tVUkxSZXF1ZXN0UmVmIHJlcXVlc3QsIGNvbnN0IGNoYXIqIGZyYW1lTmFt
ZSwgV0tGcmFtZVBvbGljeUxpc3RlbmVyUmVmIGxpc3RlbmVyKQogewogICAgIFdlYktpdE5hdmln
YXRpb25Qb2xpY3lEZWNpc2lvbiogZGVjaXNpb24gPSBXRUJLSVRfTkFWSUdBVElPTl9QT0xJQ1lf
REVDSVNJT04oZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX05BVklHQVRJT05fUE9MSUNZX0RFQ0lT
SU9OLCBOVUxMKSk7CiAgICAgZGVjaXNpb24tPnByaXYtPm5hdmlnYXRpb25UeXBlID0gc3RhdGlj
X2Nhc3Q8V2ViS2l0TmF2aWdhdGlvblR5cGU+KG5hdmlnYXRpb25UeXBlKTsKICAgICBkZWNpc2lv
bi0+cHJpdi0+bW91c2VCdXR0b24gPSB3a0V2ZW50TW91c2VCdXR0b25Ub1dlYktpdE1vdXNlQnV0
dG9uKG1vdXNlQnV0dG9uKTsKLSAgICBkZWNpc2lvbi0+cHJpdi0+bW9kaWZpZXJzID0gd2tFdmVu
dE1vZGlmaWVyc1RvVW5zaWduZWQobW9kaWZpZXJzKTsKKyAgICBkZWNpc2lvbi0+cHJpdi0+bW9k
aWZpZXJzID0gd2tFdmVudE1vZGlmaWVyc1RvR2RrTW9kaWZpZXJzKG1vZGlmaWVycyk7CiAgICAg
ZGVjaXNpb24tPnByaXYtPnJlcXVlc3QgPSBhZG9wdEdSZWYod2Via2l0VVJJUmVxdWVzdENyZWF0
ZUZvclJlc291cmNlUmVxdWVzdCh0b0ltcGwocmVxdWVzdCktPnJlc291cmNlUmVxdWVzdCgpKSk7
CiAgICAgZGVjaXNpb24tPnByaXYtPmZyYW1lTmFtZSA9IGZyYW1lTmFtZTsKICAgICB3ZWJraXRQ
b2xpY3lEZWNpc2lvblNldExpc3RlbmVyKFdFQktJVF9QT0xJQ1lfREVDSVNJT04oZGVjaXNpb24p
LCBsaXN0ZW5lcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXRQcml2YXRlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dl
YktpdFByaXZhdGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5OGMz
YWIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXRQcml2YXRlLmNwcApAQCAtMCwwICsxLDM3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEyIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
CisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRQcml2
YXRlLmgiCisKKyNpbmNsdWRlIDxnZGsvZ2RrLmg+CisKK3Vuc2lnbmVkIHdrRXZlbnRNb2RpZmll
cnNUb0dka01vZGlmaWVycyhXS0V2ZW50TW9kaWZpZXJzIHdrTW9kaWZpZXJzKQoreworICAgIHVu
c2lnbmVkIG1vZGlmaWVycyA9IDA7CisgICAgaWYgKHdrTW9kaWZpZXJzICYga1dLRXZlbnRNb2Rp
ZmllcnNTaGlmdEtleSkKKyAgICAgICAgbW9kaWZpZXJzIHw9IEdES19TSElGVF9NQVNLOworICAg
IGlmICh3a01vZGlmaWVycyAmIGtXS0V2ZW50TW9kaWZpZXJzQ29udHJvbEtleSkKKyAgICAgICAg
bW9kaWZpZXJzIHw9IEdES19DT05UUk9MX01BU0s7CisgICAgaWYgKHdrTW9kaWZpZXJzICYga1dL
RXZlbnRNb2RpZmllcnNBbHRLZXkpCisgICAgICAgIG1vZGlmaWVycyB8PSBHREtfTU9EMV9NQVNL
OworICAgIGlmICh3a01vZGlmaWVycyAmIGtXS0V2ZW50TW9kaWZpZXJzTWV0YUtleSkKKyAgICAg
ICAgbW9kaWZpZXJzIHw9IEdES19NRVRBX01BU0s7CisgICAgcmV0dXJuIG1vZGlmaWVyczsKK30K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFByaXZh
dGUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFByaXZhdGUuaApp
bmRleCBjNDRkODc3Li40M2QyNmNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay9XZWJLaXRQcml2YXRlLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvV2ViS2l0UHJpdmF0ZS5oCkBAIC00MCw0ICs0MCw2IEBACiAjZGVmaW5lIENPTVBJ
TEVfQVNTRVJUX01BVENISU5HX0VOVU0od2Via2l0TmFtZSwgd2ViY29yZU5hbWUpIFwKICAgICAg
ICAgQ09NUElMRV9BU1NFUlQoaW50KHdlYmtpdE5hbWUpID09IGludCh3ZWJjb3JlTmFtZSksIG1p
c21hdGNoaW5nRW51bXMpCiAKK3Vuc2lnbmVkIHdrRXZlbnRNb2RpZmllcnNUb0dka01vZGlmaWVy
cyhXS0V2ZW50TW9kaWZpZXJzKTsKKwogI2VuZGlmIC8vIFdlYktpdFByaXZhdGVfaApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0VUlDbGllbnQuY3Bw
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0VUlDbGllbnQuY3BwCmlu
ZGV4IGE2NTlhZDMuLjc1NTgwYTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdFVJQ2xpZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay9XZWJLaXRVSUNsaWVudC5jcHAKQEAgLTEyNiw2ICsxMjYsMTEgQEAgc3RhdGlj
IHZvaWQgc2V0V2luZG93RnJhbWUoV0tQYWdlUmVmIHBhZ2UsIFdLUmVjdCBmcmFtZSwgY29uc3Qg
dm9pZCogY2xpZW50SW5mbykKICAgICB3ZWJraXRXaW5kb3dQcm9wZXJ0aWVzU2V0R2VvbWV0cnko
d2luZG93UHJvcGVydGllcywgJmdlb21ldHJ5KTsKIH0KIAorc3RhdGljIHZvaWQgbW91c2VEaWRN
b3ZlT3ZlckVsZW1lbnQoV0tQYWdlUmVmIHBhZ2UsIFdLSGl0VGVzdFJlc3VsdFJlZiBoaXRUZXN0
UmVzdWx0LCBXS0V2ZW50TW9kaWZpZXJzIG1vZGlmaWVycywgV0tUeXBlUmVmIHVzZXJEYXRhLCBj
b25zdCB2b2lkKiBjbGllbnRJbmZvKQoreworICAgIHdlYmtpdFdlYlZpZXdIb3ZlcmVkT3ZlckVs
ZW1lbnQoV0VCS0lUX1dFQl9WSUVXKGNsaWVudEluZm8pLCBoaXRUZXN0UmVzdWx0LCB3a0V2ZW50
TW9kaWZpZXJzVG9HZGtNb2RpZmllcnMobW9kaWZpZXJzKSk7Cit9CisKIHZvaWQgYXR0YWNoVUlD
bGllbnRUb1ZpZXcoV2ViS2l0V2ViVmlldyogd2ViVmlldykKIHsKICAgICBXS1BhZ2VVSUNsaWVu
dCB3a1VJQ2xpZW50ID0gewpAQCAtMTcxLDcgKzE3Niw3IEBAIHZvaWQgYXR0YWNoVUlDbGllbnRU
b1ZpZXcoV2ViS2l0V2ViVmlldyogd2ViVmlldykKICAgICAgICAgMCwgLy8gc2F2ZURhdGFUb0Zp
bGVJbkRvd25sb2Fkc0ZvbGRlcgogICAgICAgICAwLCAvLyBzaG91bGRJbnRlcnJ1cHRKYXZhU2Ny
aXB0CiAgICAgICAgIGNyZWF0ZU5ld1BhZ2UsCi0gICAgICAgIDAsIC8vIG1vdXNlRGlkTW92ZU92
ZXJFbGVtZW50CisgICAgICAgIG1vdXNlRGlkTW92ZU92ZXJFbGVtZW50LAogICAgICAgICAwLCAv
LyBkZWNpZGVQb2xpY3lGb3JOb3RpZmljYXRpb25QZXJtaXNzaW9uUmVxdWVzdAogICAgIH07CiAg
ICAgV0tQYWdlUmVmIHdrUGFnZSA9IHRvQVBJKHdlYmtpdFdlYlZpZXdCYXNlR2V0UGFnZShXRUJL
SVRfV0VCX1ZJRVdfQkFTRSh3ZWJWaWV3KSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmNwcAppbmRleCBjM2FjY2NjLi5lMThlNDc5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3
LmNwcApAQCAtMjQsNiArMjQsNyBAQAogI2luY2x1ZGUgIldlYktpdEJhY2tGb3J3YXJkTGlzdFBy
aXZhdGUuaCIKICNpbmNsdWRlICJXZWJLaXRFbnVtVHlwZXMuaCIKICNpbmNsdWRlICJXZWJLaXRF
cnJvci5oIgorI2luY2x1ZGUgIldlYktpdEhpdFRlc3RSZXN1bHRQcml2YXRlLmgiCiAjaW5jbHVk
ZSAiV2ViS2l0TG9hZGVyQ2xpZW50LmgiCiAjaW5jbHVkZSAiV2ViS2l0TWFyc2hhbC5oIgogI2lu
Y2x1ZGUgIldlYktpdFBvbGljeUNsaWVudC5oIgpAQCAtNTksNiArNjAsOCBAQCBlbnVtIHsKIAog
ICAgIERFQ0lERV9QT0xJQ1ksCiAKKyAgICBIT1ZFUkVEX09WRVJfRUxFTUVOVCwKKwogICAgIExB
U1RfU0lHTkFMCiB9OwogCkBAIC04Myw2ICs4Niw5IEBAIHN0cnVjdCBfV2ViS2l0V2ViVmlld1By
aXZhdGUgewogICAgIEdSZWZQdHI8V2ViS2l0QmFja0ZvcndhcmRMaXN0PiBiYWNrRm9yd2FyZExp
c3Q7CiAgICAgR1JlZlB0cjxXZWJLaXRTZXR0aW5ncz4gc2V0dGluZ3M7CiAgICAgR1JlZlB0cjxX
ZWJLaXRXaW5kb3dQcm9wZXJ0aWVzPiB3aW5kb3dQcm9wZXJ0aWVzOworCisgICAgR1JlZlB0cjxX
ZWJLaXRIaXRUZXN0UmVzdWx0PiBob3ZlcmVkRWxlbWVudEhpdFRlc3RSZXN1bHQ7CisgICAgdW5z
aWduZWQgaG92ZXJlZEVsZW1lbnRNb2RpZmllcnM7CiB9OwogCiBzdGF0aWMgZ3VpbnQgc2lnbmFs
c1tMQVNUX1NJR05BTF0gPSB7IDAsIH07CkBAIC02MTUsNiArNjIxLDMzIEBAIHN0YXRpYyB2b2lk
IHdlYmtpdF93ZWJfdmlld19jbGFzc19pbml0KFdlYktpdFdlYlZpZXdDbGFzcyogd2ViVmlld0Ns
YXNzKQogICAgICAgICAgICAgICAgICAgICAgR19UWVBFX0JPT0xFQU4sIDIsIC8qIG51bWJlciBv
ZiBwYXJhbWV0ZXJzICovCiAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfVFlQRV9QT0xJQ1lf
REVDSVNJT04sCiAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfVFlQRV9QT0xJQ1lfREVDSVNJ
T05fVFlQRSk7CisKKyAgICAvKioKKyAgICAgKiBXZWJLaXRXZWJWaWV3Ojpob3ZlcmVkLW92ZXIt
ZWxlbWVudDoKKyAgICAgKiBAd2ViX3ZpZXc6IHRoZSAjV2ViS2l0V2ViVmlldyBvbiB3aGljaCB0
aGUgc2lnbmFsIGlzIGVtaXR0ZWQKKyAgICAgKiBAaGl0X3Rlc3RfcmVzdWx0OiAoYWxsb3ctbm9u
ZSk6IGEgI1dlYktpdEhpdFRlc3RSZXN1bHQgb3IgJU5VTEwKKyAgICAgKiBAbW9kaWZpZXJzOiBh
IGJpdG1hc2sgb2YgI0dka01vZGlmaWVyVHlwZQorICAgICAqCisgICAgICogVGhpcyBzaWduYWwg
aXMgZW1pdHRlZCB3aGVuIHRoZSBtb3VzZSBjdXJzb3IgbW92ZXMgb3ZlciBhbgorICAgICAqIGVs
ZW1lbnQgc3VjaCBhcyBhIGxpbmssIGltYWdlIG9yIGEgbWVkaWEgZWxlbWVudC4gVG8gZGV0ZXJt
aW5lCisgICAgICogd2hldGhlciB0aGUgbW91c2UgY3Vyc29yIGlzIG92ZXIgYW4gZWxlbWVudCwg
YSBIaXQgVGVzdCBpcyBwZXJmb3JtZWQKKyAgICAgKiBvbiB0aGUgY3VycmVudCBtb3VzZSBjb29y
ZGluYXRlcyBhbmQgdGhlIHJlc3VsdCBpcyBwYXNzZWQgaW4gdGhlCisgICAgICogQGhpdF90ZXN0
X3Jlc3VsdCBhcmd1bWVudC4gVGhlIEBtb2RpZmllcnMgYXJndW1lbnQgaXMgYSBiaXRtYXNrIG9m
CisgICAgICogI0dka01vZGlmaWVyVHlwZSBmbGFncyBpbmRpY2F0aW5nIHRoZSBzdGF0ZSBvZiBt
b2RpZmllciBrZXlzLgorICAgICAqIFRoZSBzaWduYWwgaXMgZW1pdHRlZCBhZ2FpbiB3aGVuIHRo
ZSBtb3VzZSBpcyBtb3ZlZCBvdXQgb2YgdGhlCisgICAgICogY3VycmVudCBlbGVtZW50IHdpdGgg
YSBuZXcgQGhpdF90ZXN0X3Jlc3VsdCBvciAlTlVMTCBpZiB0aGVyZQorICAgICAqIGlzbid0IGFu
IGVsZW1lbnQgYXQgdGhlIG5ldyBtb3VzZSBwb3NpdGlvbi4KKyAgICAgKi8KKyAgICAgc2lnbmFs
c1tIT1ZFUkVEX09WRVJfRUxFTUVOVF0gPQorICAgICAgICAgZ19zaWduYWxfbmV3KCJob3ZlcmVk
LW92ZXItZWxlbWVudCIsCisgICAgICAgICAgICAgICAgICAgICAgR19UWVBFX0ZST01fQ0xBU1Mo
d2ViVmlld0NsYXNzKSwKKyAgICAgICAgICAgICAgICAgICAgICBHX1NJR05BTF9SVU5fTEFTVCwK
KyAgICAgICAgICAgICAgICAgICAgICBHX1NUUlVDVF9PRkZTRVQoV2ViS2l0V2ViVmlld0NsYXNz
LCBob3ZlcmVkX292ZXJfZWxlbWVudCksCisgICAgICAgICAgICAgICAgICAgICAgMCwgMCwKKyAg
ICAgICAgICAgICAgICAgICAgICB3ZWJraXRfbWFyc2hhbF9WT0lEX19PQkpFQ1RfVUlOVCwKKyAg
ICAgICAgICAgICAgICAgICAgICBHX1RZUEVfTk9ORSwgMiwKKyAgICAgICAgICAgICAgICAgICAg
ICBXRUJLSVRfVFlQRV9ISVRfVEVTVF9SRVNVTFQsCisgICAgICAgICAgICAgICAgICAgICAgR19U
WVBFX1VJTlQpOwogfQogCiB2b2lkIHdlYmtpdFdlYlZpZXdMb2FkQ2hhbmdlZChXZWJLaXRXZWJW
aWV3KiB3ZWJWaWV3LCBXZWJLaXRMb2FkRXZlbnQgbG9hZEV2ZW50KQpAQCAtNzI2LDYgKzc1OSwy
MiBAQCB2b2lkIHdlYmtpdFdlYlZpZXdNYWtlUG9saWN5RGVjaXNpb24oV2ViS2l0V2ViVmlldyog
d2ViVmlldywgV2ViS2l0UG9saWN5RGVjaXNpbwogICAgIGdfc2lnbmFsX2VtaXQod2ViVmlldywg
c2lnbmFsc1tERUNJREVfUE9MSUNZXSwgMCwgZGVjaXNpb24sIHR5cGUsICZyZXR1cm5WYWx1ZSk7
CiB9CiAKK3ZvaWQgd2Via2l0V2ViVmlld0hvdmVyZWRPdmVyRWxlbWVudChXZWJLaXRXZWJWaWV3
KiB3ZWJWaWV3LCBXS0hpdFRlc3RSZXN1bHRSZWYgd2tIaXRUZXN0UmVzdWx0LCB1bnNpZ25lZCBt
b2RpZmllcnMpCit7CisgICAgV2ViS2l0V2ViVmlld1ByaXZhdGUqIHByaXYgPSB3ZWJWaWV3LT5w
cml2OworICAgIGJvb2wgaXNFbXB0eSA9IHdrSGl0VGVzdFJlc3VsdElzRW1wdHkod2tIaXRUZXN0
UmVzdWx0KTsKKyAgICBpZiAoKGlzRW1wdHkgJiYgIXByaXYtPmhvdmVyZWRFbGVtZW50SGl0VGVz
dFJlc3VsdCkKKyAgICAgICAgfHwgKCFpc0VtcHR5CisgICAgICAgICAgICAmJiBwcml2LT5ob3Zl
cmVkRWxlbWVudEhpdFRlc3RSZXN1bHQKKyAgICAgICAgICAgICYmIHByaXYtPmhvdmVyZWRFbGVt
ZW50TW9kaWZpZXJzID09IG1vZGlmaWVycworICAgICAgICAgICAgJiYgd2Via2l0SGl0VGVzdFJl
c3VsdENvbXBhcmUocHJpdi0+aG92ZXJlZEVsZW1lbnRIaXRUZXN0UmVzdWx0LmdldCgpLCB3a0hp
dFRlc3RSZXN1bHQpKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgcHJpdi0+aG92ZXJlZEVsZW1l
bnRNb2RpZmllcnMgPSAhaXNFbXB0eSA/IG1vZGlmaWVycyA6IDA7CisgICAgcHJpdi0+aG92ZXJl
ZEVsZW1lbnRIaXRUZXN0UmVzdWx0ID0gIWlzRW1wdHkgPyBhZG9wdEdSZWYod2Via2l0SGl0VGVz
dFJlc3VsdENyZWF0ZSh3a0hpdFRlc3RSZXN1bHQpKSA6IDA7CisgICAgZ19zaWduYWxfZW1pdCh3
ZWJWaWV3LCBzaWduYWxzW0hPVkVSRURfT1ZFUl9FTEVNRU5UXSwgMCwgcHJpdi0+aG92ZXJlZEVs
ZW1lbnRIaXRUZXN0UmVzdWx0LmdldCgpLCBtb2RpZmllcnMpOworfQorCiAvKioKICAqIHdlYmtp
dF93ZWJfdmlld19uZXc6CiAgKgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvV2ViS2l0V2ViVmlldy5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0V2ViVmlldy5oCmluZGV4IGQ0NzY4ZTMuLjVmNTYyMDMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmgKQEAgLTMwLDYgKzMw
LDcgQEAKIAogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0QmFja0ZvcndhcmRMaXN0Lmg+CiAjaW5j
bHVkZSA8d2Via2l0Mi9XZWJLaXREZWZpbmVzLmg+CisjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRI
aXRUZXN0UmVzdWx0Lmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRXZWJDb250ZXh0Lmg+CiAj
aW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRTZXR0aW5ncy5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2Vi
S2l0VVJJUmVxdWVzdC5oPgpAQCAtMTE2LDI5ICsxMTcsMzIgQEAgc3RydWN0IF9XZWJLaXRXZWJW
aWV3IHsKIHN0cnVjdCBfV2ViS2l0V2ViVmlld0NsYXNzIHsKICAgICBXZWJLaXRXZWJWaWV3QmFz
ZUNsYXNzIHBhcmVudDsKIAotICAgIHZvaWQgICAgICAgKCogbG9hZF9jaGFuZ2VkKSAgIChXZWJL
aXRXZWJWaWV3ICAgICAgICAgICAgICp3ZWJfdmlldywKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgV2ViS2l0TG9hZEV2ZW50ICAgICAgICAgICAgbG9hZF9ldmVudCk7Ci0gICAg
Z2Jvb2xlYW4gICAoKiBsb2FkX2ZhaWxlZCkgICAgKFdlYktpdFdlYlZpZXcgICAgICAgICAgICAg
KndlYl92aWV3LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJLaXRMb2Fk
RXZlbnQgICAgICAgICAgICBsb2FkX2V2ZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBnY2hhciAgICAgICAgICAgICAgICpmYWlsaW5nX3VyaSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgR0Vycm9yICAgICAgICAgICAgICAgICAgICAqZXJy
b3IpOwotCi0gICAgR3RrV2lkZ2V0ICooKiBjcmVhdGUpICAgICAgICAgKFdlYktpdFdlYlZpZXcg
ICAgICAgICAgICAgKndlYl92aWV3KTsKLSAgICB2b2lkICAgICAgICgqIHJlYWR5X3RvX3Nob3cp
ICAoV2ViS2l0V2ViVmlldyAgICAgICAgICAgICAqd2ViX3ZpZXcpOwotICAgIHZvaWQgICAgICAg
KCogY2xvc2UpICAgICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAgICAgICp3ZWJfdmlldyk7
Ci0KLSAgICBnYm9vbGVhbiAgICgqIHNjcmlwdF9hbGVydCkgICAoV2ViS2l0V2ViVmlldyAgICAg
ICAgICAgICAqd2ViX3ZpZXcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IGdjaGFyICAgICAgICAgICAgICAgKm1lc3NhZ2UpOwotICAgIGdib29sZWFuICAgKCogc2Ny
aXB0X2NvbmZpcm0pIChXZWJLaXRXZWJWaWV3ICAgICAgICAgICAgICp3ZWJfdmlldywKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgICAgICAgICAgICAgICAq
bWVzc2FnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2Jvb2xlYW4gICAg
ICAgICAgICAgICAgICAqY29uZmlybWVkKTsKLSAgICBnYm9vbGVhbiAgICgqIHNjcmlwdF9wcm9t
cHQpICAoV2ViS2l0V2ViVmlldyAgICAgICAgICAgICAqd2ViX3ZpZXcsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAgICAgICAgICAgICAgKm1lc3NhZ2Us
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAgICAgICAg
ICAgICAgKmRlZmF1bHRfdGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Z2NoYXIgICAgICAgICAgICAgICAgICAgICoqdGV4dCk7Ci0gICAgZ2Jvb2xlYW4gICAoKiBkZWNp
ZGVfcG9saWN5KSAgKFdlYktpdFdlYlZpZXcgICAgICAgICAgICAgKndlYl92aWV3LAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJLaXRQb2xpY3lEZWNpc2lvbiAgICAgICpk
ZWNpc2lvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViS2l0UG9saWN5
RGVjaXNpb25UeXBlICB0eXBlKTsKKyAgICB2b2lkICAgICAgICgqIGxvYWRfY2hhbmdlZCkgICAg
ICAgICAoV2ViS2l0V2ViVmlldyAgICAgICAgICAgICAqd2ViX3ZpZXcsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYktpdExvYWRFdmVudCAgICAgICAgICAgIGxv
YWRfZXZlbnQpOworICAgIGdib29sZWFuICAgKCogbG9hZF9mYWlsZWQpICAgICAgICAgIChXZWJL
aXRXZWJWaWV3ICAgICAgICAgICAgICp3ZWJfdmlldywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgV2ViS2l0TG9hZEV2ZW50ICAgICAgICAgICAgbG9hZF9ldmVudCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgICAg
ICAgICAgICAgICAqZmFpbGluZ191cmksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEdFcnJvciAgICAgICAgICAgICAgICAgICAgKmVycm9yKTsKKworICAgIEd0a1dp
ZGdldCAqKCogY3JlYXRlKSAgICAgICAgICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAgICAg
ICp3ZWJfdmlldyk7CisgICAgdm9pZCAgICAgICAoKiByZWFkeV90b19zaG93KSAgICAgICAgKFdl
YktpdFdlYlZpZXcgICAgICAgICAgICAgKndlYl92aWV3KTsKKyAgICB2b2lkICAgICAgICgqIGNs
b3NlKSAgICAgICAgICAgICAgICAoV2ViS2l0V2ViVmlldyAgICAgICAgICAgICAqd2ViX3ZpZXcp
OworCisgICAgZ2Jvb2xlYW4gICAoKiBzY3JpcHRfYWxlcnQpICAgICAgICAgKFdlYktpdFdlYlZp
ZXcgICAgICAgICAgICAgKndlYl92aWV3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBnY2hhciAgICAgICAgICAgICAgICptZXNzYWdlKTsKKyAgICBnYm9v
bGVhbiAgICgqIHNjcmlwdF9jb25maXJtKSAgICAgICAoV2ViS2l0V2ViVmlldyAgICAgICAgICAg
ICAqd2ViX3ZpZXcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IGdjaGFyICAgICAgICAgICAgICAgKm1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGdib29sZWFuICAgICAgICAgICAgICAgICAgKmNvbmZpcm1lZCk7
CisgICAgZ2Jvb2xlYW4gICAoKiBzY3JpcHRfcHJvbXB0KSAgICAgICAgKFdlYktpdFdlYlZpZXcg
ICAgICAgICAgICAgKndlYl92aWV3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBnY2hhciAgICAgICAgICAgICAgICptZXNzYWdlLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAgICAgICAgICAgICAgICpk
ZWZhdWx0X3RleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdj
aGFyICAgICAgICAgICAgICAgICAgICAqKnRleHQpOworICAgIGdib29sZWFuICAgKCogZGVjaWRl
X3BvbGljeSkgICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAgICAgICp3ZWJfdmlldywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViS2l0UG9saWN5RGVjaXNp
b24gICAgICAqZGVjaXNpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFdlYktpdFBvbGljeURlY2lzaW9uVHlwZSAgdHlwZSk7CisgICAgdm9pZCAgICAgICAoKiBo
b3ZlcmVkX292ZXJfZWxlbWVudCkgKFdlYktpdFdlYlZpZXcgICAgICAgICAgICAqd2ViX3ZpZXcs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYktpdEhpdFRlc3RS
ZXN1bHQgICAgICAqaGl0X3Rlc3RfcmVzdWx0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBndWludCAgICAgICAgICAgICAgICAgICAgIG1vZGlmaWVycyk7CiAKICAg
ICAvKiBQYWRkaW5nIGZvciBmdXR1cmUgZXhwYW5zaW9uICovCiAgICAgdm9pZCAoKl93ZWJraXRf
cmVzZXJ2ZWQwKSAodm9pZCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXRXZWJWaWV3UHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvV2ViS2l0V2ViVmlld1ByaXZhdGUuaAppbmRleCA2NjM4NmQwLi43MTY0MDVhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3
UHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdl
YlZpZXdQcml2YXRlLmgKQEAgLTQzLDUgKzQzLDYgQEAgdm9pZCB3ZWJraXRXZWJWaWV3UnVuSmF2
YVNjcmlwdEFsZXJ0KFdlYktpdFdlYlZpZXcqLCBjb25zdCBDU3RyaW5nJiBtZXNzYWdlKTsKIGJv
b2wgd2Via2l0V2ViVmlld1J1bkphdmFTY3JpcHRDb25maXJtKFdlYktpdFdlYlZpZXcqLCBjb25z
dCBDU3RyaW5nJiBtZXNzYWdlKTsKIFdLU3RyaW5nUmVmIHdlYmtpdFdlYlZpZXdSdW5KYXZhU2Ny
aXB0UHJvbXB0KFdlYktpdFdlYlZpZXcqLCBjb25zdCBDU3RyaW5nJiBtZXNzYWdlLCBjb25zdCBD
U3RyaW5nJiBkZWZhdWx0VGV4dCk7CiB2b2lkIHdlYmtpdFdlYlZpZXdNYWtlUG9saWN5RGVjaXNp
b24oV2ViS2l0V2ViVmlldyosIFdlYktpdFBvbGljeURlY2lzaW9uVHlwZSwgV2ViS2l0UG9saWN5
RGVjaXNpb24qKTsKK3ZvaWQgd2Via2l0V2ViVmlld0hvdmVyZWRPdmVyRWxlbWVudChXZWJLaXRX
ZWJWaWV3KiwgV0tIaXRUZXN0UmVzdWx0UmVmLCB1bnNpZ25lZCBtb2RpZmllcnMpOwogCiAjZW5k
aWYgLy8gV2ViS2l0V2ViVmlld1ByaXZhdGVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLWRvY3Muc2dtbCBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1kb2NzLnNnbWwKaW5kZXggYWYw
Y2RhZS4uY2NjZTA0ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvZG9jcy93ZWJraXQyZ3RrLWRvY3Muc2dtbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstZG9jcy5zZ21sCkBAIC0yNCw2ICsyNCw3IEBACiAg
ICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL1dlYktpdFBvbGljeURlY2lzaW9uLnhtbCIvPgogICAg
IDx4aTppbmNsdWRlIGhyZWY9InhtbC9XZWJLaXROYXZpZ2F0aW9uUG9saWN5RGVjaXNpb24ueG1s
Ii8+CiAgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL1dlYktpdFJlc3BvbnNlUG9saWN5RGVjaXNp
b24ueG1sIi8+CisgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL1dlYktpdEhpdFRlc3RSZXN1bHQu
eG1sIi8+CiAgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL1dlYktpdEVycm9yLnhtbCIvPgogICA8
L2NoYXB0ZXI+CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L2RvY3Mvd2Via2l0Mmd0ay1zZWN0aW9ucy50eHQgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay9kb2NzL3dlYmtpdDJndGstc2VjdGlvbnMudHh0CmluZGV4IDUyY2Q4OWUuLjUwYzQy
ZGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Vi
a2l0Mmd0ay1zZWN0aW9ucy50eHQKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvZG9jcy93ZWJraXQyZ3RrLXNlY3Rpb25zLnR4dApAQCAtMzkwLDYgKzM5MCwzNCBAQCB3ZWJr
aXRfcmVzcG9uc2VfcG9saWN5X2RlY2lzaW9uX2dldF90eXBlCiA8L1NFQ1RJT04+CiAKIDxTRUNU
SU9OPgorPEZJTEU+V2ViS2l0SGl0VGVzdFJlc3VsdDwvRklMRT4KK1dlYktpdEhpdFRlc3RSZXN1
bHQKK1dlYktpdEhpdFRlc3RSZXN1bHRDb250ZXh0Cit3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2dl
dF9jb250ZXh0Cit3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfbGluaword2Via2l0
X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX2ltYWdlCit3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0
X2NvbnRleHRfaXNfbWVkaWEKK3dlYmtpdF9oaXRfdGVzdF9yZXN1bHRfZ2V0X2xpbmtfdXJpCit3
ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2dldF9saW5rX3RpdGxlCit3ZWJraXRfaGl0X3Rlc3RfcmVz
dWx0X2dldF9saW5rX2xhYmVsCit3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2dldF9pbWFnZV91cmkK
K3dlYmtpdF9oaXRfdGVzdF9yZXN1bHRfZ2V0X21lZGlhX3VyaQorCis8U1VCU0VDVElPTiBTdGFu
ZGFyZD4KK1dlYktpdEhpdFRlc3RSZXN1bHRDbGFzcworV0VCS0lUX1RZUEVfSElUX1RFU1RfUkVT
VUxUCitXRUJLSVRfSElUX1RFU1RfUkVTVUxUCitXRUJLSVRfSVNfSElUX1RFU1RfUkVTVUxUCitX
RUJLSVRfSElUX1RFU1RfUkVTVUxUX0NMQVNTCitXRUJLSVRfSVNfSElUX1RFU1RfUkVTVUxUX0NM
QVNTCitXRUJLSVRfSElUX1RFU1RfUkVTVUxUX0dFVF9DTEFTUworCis8U1VCU0VDVElPTiBQcml2
YXRlPgorV2ViS2l0SGl0VGVzdFJlc3VsdFByaXZhdGUKK3dlYmtpdF9oaXRfdGVzdF9yZXN1bHRf
Z2V0X3R5cGUKKzwvU0VDVElPTj4KKworPFNFQ1RJT04+CiA8RklMRT5XZWJLaXRFcnJvcjwvRklM
RT4KIFdFQktJVF9ORVRXT1JLX0VSUk9SCiBXRUJLSVRfUExVR0lOX0VSUk9SCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0V2ViVmll
dy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0
V2ViVmlldy5jcHAKaW5kZXggM2Q1OWVlOS4uMjc4ZDZjMSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdFdlYlZpZXcuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRXZWJWaWV3
LmNwcApAQCAtMjY3LDE1ICsyNjcsMjYgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gVFJVRTsK
ICAgICB9CiAKKyAgICBzdGF0aWMgdm9pZCBob3ZlcmVkT3ZlckVsZW1lbnQoV2ViS2l0V2ViVmll
dyosIFdlYktpdEhpdFRlc3RSZXN1bHQqIGhpdFRlc3RSZXN1bHQsIGd1aW50IG1vZGlmaWVycywg
VUlDbGllbnRUZXN0KiB0ZXN0KQorICAgIHsKKyAgICAgICAgaWYgKGhpdFRlc3RSZXN1bHQpCisg
ICAgICAgICAgICB0ZXN0LT5hc3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdf
T0JKRUNUKGhpdFRlc3RSZXN1bHQpKTsKKyAgICAgICAgdGVzdC0+bV9ob3ZlcmVkRWxlbWVudEhp
dFRlc3RSZXN1bHQgPSBoaXRUZXN0UmVzdWx0OworICAgICAgICB0ZXN0LT5tX2hvdmVyZWRFbGVt
ZW50TW9kaWZpZXJzID0gbW9kaWZpZXJzOworICAgICAgICBnX21haW5fbG9vcF9xdWl0KHRlc3Qt
Pm1fbWFpbkxvb3ApOworICAgIH0KKwogICAgIFVJQ2xpZW50VGVzdCgpCiAgICAgICAgIDogbV9z
Y3JpcHRUeXBlKEFsZXJ0KQogICAgICAgICAsIG1fc2NyaXB0RGlhbG9nQ29uZmlybWVkKHRydWUp
CisgICAgICAgICwgbV9ob3ZlcmVkRWxlbWVudE1vZGlmaWVycygwKQogICAgIHsKICAgICAgICAg
d2Via2l0X3NldHRpbmdzX3NldF9qYXZhc2NyaXB0X2Nhbl9vcGVuX3dpbmRvd3NfYXV0b21hdGlj
YWxseSh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3NldHRpbmdzKG1fd2ViVmlldyksIFRSVUUpOwogICAg
ICAgICBnX3NpZ25hbF9jb25uZWN0KG1fd2ViVmlldywgImNyZWF0ZSIsIEdfQ0FMTEJBQ0sodmll
d0NyZWF0ZSksIHRoaXMpOwogICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG1fd2ViVmlldywgInNj
cmlwdC1hbGVydCIsIEdfQ0FMTEJBQ0soc2NyaXB0QWxlcnQpLCB0aGlzKTsKICAgICAgICAgZ19z
aWduYWxfY29ubmVjdChtX3dlYlZpZXcsICJzY3JpcHQtY29uZmlybSIsIEdfQ0FMTEJBQ0soc2Ny
aXB0Q29uZmlybSksIHRoaXMpOwogICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG1fd2ViVmlldywg
InNjcmlwdC1wcm9tcHQiLCBHX0NBTExCQUNLKHNjcmlwdFByb21wdCksIHRoaXMpOworICAgICAg
ICBnX3NpZ25hbF9jb25uZWN0KG1fd2ViVmlldywgImhvdmVyZWQtb3Zlci1lbGVtZW50IiwgR19D
QUxMQkFDSyhob3ZlcmVkT3ZlckVsZW1lbnQpLCB0aGlzKTsKICAgICB9CiAKICAgICB+VUlDbGll
bnRUZXN0KCkKQEAgLTI5MywxMSArMzA0LDIwIEBAIHB1YmxpYzoKICAgICAgICAgbV93aW5kb3dQ
cm9wZXJ0aWVzID0gd2luZG93UHJvcGVydGllczsKICAgICB9CiAKKyAgICBXZWJLaXRIaXRUZXN0
UmVzdWx0KiBnZXRIb3ZlcmVkRWxlbWVudEF0KGludCB4LCBpbnQgeSwgdW5zaWduZWQgaW50IG1v
dXNlTW9kaWZpZXJzID0gMCkKKyAgICB7CisgICAgICAgIG1vdXNlTW92ZVRvKHgsIHksIG1vdXNl
TW9kaWZpZXJzKTsKKyAgICAgICAgZ19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOworICAgICAg
ICByZXR1cm4gbV9ob3ZlcmVkRWxlbWVudEhpdFRlc3RSZXN1bHQuZ2V0KCk7CisgICAgfQorCiAg
ICAgVmVjdG9yPFdlYlZpZXdFdmVudHM+IG1fd2ViVmlld0V2ZW50czsKICAgICBTY3JpcHRUeXBl
IG1fc2NyaXB0VHlwZTsKICAgICBib29sIG1fc2NyaXB0RGlhbG9nQ29uZmlybWVkOwogICAgIFdp
bmRvd1Byb3BlcnRpZXMgbV93aW5kb3dQcm9wZXJ0aWVzOwogICAgIEhhc2hTZXQ8V1RGOjpTdHJp
bmc+IG1fd2luZG93UHJvcGVydGllc0NoYW5nZWQ7CisgICAgR1JlZlB0cjxXZWJLaXRIaXRUZXN0
UmVzdWx0PiBtX2hvdmVyZWRFbGVtZW50SGl0VGVzdFJlc3VsdDsKKyAgICB1bnNpZ25lZCBpbnQg
bV9ob3ZlcmVkRWxlbWVudE1vZGlmaWVyczsKIH07CiAKIHN0YXRpYyB2b2lkIHRlc3RXZWJWaWV3
Q3JlYXRlUmVhZHlDbG9zZShVSUNsaWVudFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCkBAIC0z
NjEsNiArMzgxLDY0IEBAIHN0YXRpYyB2b2lkIHRlc3RXZWJWaWV3V2luZG93UHJvcGVydGllcyhV
SUNsaWVudFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCiAgICAgZ19hc3NlcnRfY21waW50KGV2
ZW50c1syXSwgPT0sIFVJQ2xpZW50VGVzdDo6Q2xvc2UpOwogfQogCitzdGF0aWMgdm9pZCB0ZXN0
V2ViVmlld0hvdmVyZWRFbGVtZW50KFVJQ2xpZW50VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikK
K3sKKyAgICB0ZXN0LT5zaG93SW5XaW5kb3dBbmRXYWl0VW50aWxNYXBwZWQoKTsKKworICAgIGNv
bnN0IGNoYXIqIGxpbmtzSG92ZXJlZEhUTUwgPQorICAgICAgICAiPGh0bWw+PGJvZHk+IgorICAg
ICAgICAiIDxhIHN0eWxlPSdwb3NpdGlvbjphYnNvbHV0ZTsgbGVmdDoxOyB0b3A6MScgaHJlZj0n
aHR0cDovL3d3dy53ZWJraXRndGsub3JnJyB0aXRsZT0nV2ViS2l0R1RLKyBUaXRsZSc+V2ViS2l0
R1RLKyBXZWJzaXRlPC9hPiIKKyAgICAgICAgIiA8aW1nIHN0eWxlPSdwb3NpdGlvbjphYnNvbHV0
ZTsgbGVmdDoxOyB0b3A6MTAnIHNyYz0nMHhkZWFkYmVlZicgd2lkdGg9NSBoZWlnaHQ9NT48L2lt
Zz4iCisgICAgICAgICIgPGEgc3R5bGU9J3Bvc2l0aW9uOmFic29sdXRlOyBsZWZ0OjE7IHRvcDoy
MCcgaHJlZj0naHR0cDovL3d3dy53ZWJraXRndGsub3JnL2xvZ28nIHRpdGxlPSdXZWJLaXRHVEsr
IExvZ28nPjxpbWcgc3JjPScweGRlYWRiZWVmJyB3aWR0aD01IGhlaWdodD01PjwvaW1nPjwvYT4i
CisgICAgICAgICIgPHZpZGVvIHN0eWxlPSdwb3NpdGlvbjphYnNvbHV0ZTsgbGVmdDoxOyB0b3A6
MzAnIHdpZHRoPTEwIGhlaWdodD0xMCBjb250cm9scz0nY29udHJvbHMnPjxzb3VyY2Ugc3JjPSdt
b3ZpZS5vZ2cnIHR5cGU9J3ZpZGVvL29nZycgLz48L3ZpZGVvPiIKKyAgICAgICAgIjwvYm9keT48
L2h0bWw+IjsKKworICAgIHRlc3QtPmxvYWRIdG1sKGxpbmtzSG92ZXJlZEhUTUwsICJmaWxlOi8v
LyIpOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworCisgICAgLy8gTW92ZSBv
dmVyIGxpbmsuCisgICAgV2ViS2l0SGl0VGVzdFJlc3VsdCogaGl0VGVzdFJlc3VsdCA9IHRlc3Qt
PmdldEhvdmVyZWRFbGVtZW50QXQoMSwgMSk7CisgICAgZ19hc3NlcnQod2Via2l0X2hpdF90ZXN0
X3Jlc3VsdF9jb250ZXh0X2lzX2xpbmsoaGl0VGVzdFJlc3VsdCkpOworICAgIGdfYXNzZXJ0KCF3
ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfaW1hZ2UoaGl0VGVzdFJlc3VsdCkpOwor
ICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfbWVkaWEoaGl0
VGVzdFJlc3VsdCkpOworICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0
X2dldF9saW5rX3VyaShoaXRUZXN0UmVzdWx0KSwgPT0sICJodHRwOi8vd3d3LndlYmtpdGd0ay5v
cmcvIik7CisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfZ2V0X2xp
bmtfdGl0bGUoaGl0VGVzdFJlc3VsdCksID09LCAiV2ViS2l0R1RLKyBUaXRsZSIpOworICAgIGdf
YXNzZXJ0X2NtcHN0cih3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2dldF9saW5rX2xhYmVsKGhpdFRl
c3RSZXN1bHQpLCA9PSwgIldlYktpdEdUSysgV2Vic2l0ZSIpOworICAgIGdfYXNzZXJ0KCF0ZXN0
LT5tX2hvdmVyZWRFbGVtZW50TW9kaWZpZXJzKTsKKworICAgIC8vIE1vdmUgb3V0IG9mIHRoZSBs
aW5rLgorICAgIGhpdFRlc3RSZXN1bHQgPSB0ZXN0LT5nZXRIb3ZlcmVkRWxlbWVudEF0KDAsIDAp
OworICAgIGdfYXNzZXJ0KCFoaXRUZXN0UmVzdWx0KTsKKyAgICBnX2Fzc2VydCghdGVzdC0+bV9o
b3ZlcmVkRWxlbWVudE1vZGlmaWVycyk7CisKKyAgICAvLyBNb3ZlIG92ZXIgaW1hZ2Ugd2l0aCBH
REtfQ09OVFJPTF9NQVNLLgorICAgIGhpdFRlc3RSZXN1bHQgPSB0ZXN0LT5nZXRIb3ZlcmVkRWxl
bWVudEF0KDEsIDEwLCBHREtfQ09OVFJPTF9NQVNLKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X2hp
dF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX2xpbmsoaGl0VGVzdFJlc3VsdCkpOworICAgIGdfYXNz
ZXJ0KHdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19pbWFnZShoaXRUZXN0UmVzdWx0
KSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19tZWRp
YShoaXRUZXN0UmVzdWx0KSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9oaXRfdGVzdF9y
ZXN1bHRfZ2V0X2ltYWdlX3VyaShoaXRUZXN0UmVzdWx0KSwgPT0sICJmaWxlOi8vLzB4ZGVhZGJl
ZWYiKTsKKyAgICBnX2Fzc2VydCh0ZXN0LT5tX2hvdmVyZWRFbGVtZW50TW9kaWZpZXJzICYgR0RL
X0NPTlRST0xfTUFTSyk7CisKKyAgICAvLyBNb3ZlIG92ZXIgaW1hZ2UgbGluay4KKyAgICBoaXRU
ZXN0UmVzdWx0ID0gdGVzdC0+Z2V0SG92ZXJlZEVsZW1lbnRBdCgxLCAyMCk7CisgICAgZ19hc3Nl
cnQod2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX2xpbmsoaGl0VGVzdFJlc3VsdCkp
OworICAgIGdfYXNzZXJ0KHdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19pbWFnZSho
aXRUZXN0UmVzdWx0KSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29u
dGV4dF9pc19tZWRpYShoaXRUZXN0UmVzdWx0KSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtp
dF9oaXRfdGVzdF9yZXN1bHRfZ2V0X2xpbmtfdXJpKGhpdFRlc3RSZXN1bHQpLCA9PSwgImh0dHA6
Ly93d3cud2Via2l0Z3RrLm9yZy9sb2dvIik7CisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9o
aXRfdGVzdF9yZXN1bHRfZ2V0X2ltYWdlX3VyaShoaXRUZXN0UmVzdWx0KSwgPT0sICJmaWxlOi8v
LzB4ZGVhZGJlZWYiKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X2hpdF90ZXN0X3Jlc3Vs
dF9nZXRfbGlua190aXRsZShoaXRUZXN0UmVzdWx0KSwgPT0sICJXZWJLaXRHVEsrIExvZ28iKTsK
KyAgICBnX2Fzc2VydCghd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9nZXRfbGlua19sYWJlbChoaXRU
ZXN0UmVzdWx0KSk7CisgICAgZ19hc3NlcnQoIXRlc3QtPm1faG92ZXJlZEVsZW1lbnRNb2RpZmll
cnMpOworCisgICAgLy8gTW92ZSBvdmVyIG1lZGlhLgorICAgIGhpdFRlc3RSZXN1bHQgPSB0ZXN0
LT5nZXRIb3ZlcmVkRWxlbWVudEF0KDEsIDMwKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X2hpdF90
ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX2xpbmsoaGl0VGVzdFJlc3VsdCkpOworICAgIGdfYXNzZXJ0
KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfaW1hZ2UoaGl0VGVzdFJlc3VsdCkp
OworICAgIGdfYXNzZXJ0KHdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19tZWRpYSho
aXRUZXN0UmVzdWx0KSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9oaXRfdGVzdF9yZXN1
bHRfZ2V0X21lZGlhX3VyaShoaXRUZXN0UmVzdWx0KSwgPT0sICJmaWxlOi8vL21vdmllLm9nZyIp
OworICAgIGdfYXNzZXJ0KCF0ZXN0LT5tX2hvdmVyZWRFbGVtZW50TW9kaWZpZXJzKTsKK30KKwog
c3RhdGljIHZvaWQgdGVzdFdlYlZpZXdab29tTGV2ZWwoV2ViVmlld1Rlc3QqIHRlc3QsIGdjb25z
dHBvaW50ZXIpCiB7CiAgICAgZ19hc3NlcnRfY21wZmxvYXQod2Via2l0X3dlYl92aWV3X2dldF96
b29tX2xldmVsKHRlc3QtPm1fd2ViVmlldyksID09LCAxKTsKQEAgLTM3Nyw2ICs0NTUsNyBAQCB2
b2lkIGJlZm9yZUFsbCgpCiAgICAgVUlDbGllbnRUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAi
Y3JlYXRlLXJlYWR5LWNsb3NlIiwgdGVzdFdlYlZpZXdDcmVhdGVSZWFkeUNsb3NlKTsKICAgICBV
SUNsaWVudFRlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJqYXZhc2NyaXB0LWRpYWxvZ3MiLCB0
ZXN0V2ViVmlld0phdmFTY3JpcHREaWFsb2dzKTsKICAgICBVSUNsaWVudFRlc3Q6OmFkZCgiV2Vi
S2l0V2ViVmlldyIsICJ3aW5kb3ctcHJvcGVydGllcyIsIHRlc3RXZWJWaWV3V2luZG93UHJvcGVy
dGllcyk7CisgICAgVUlDbGllbnRUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAiaG92ZXJlZC1v
dmVyLWVsZW1lbnQiLCB0ZXN0V2ViVmlld0hvdmVyZWRFbGVtZW50KTsKICAgICBXZWJWaWV3VGVz
dDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgInpvb20tbGV2ZWwiLCB0ZXN0V2ViVmlld1pvb21MZXZl
bCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rl
c3RzL1dlYlZpZXdUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rl
c3RzL1dlYlZpZXdUZXN0LmNwcAppbmRleCAyMDg5NWVjLi4wMGQzYjNlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJWaWV3VGVzdC5jcHAKKysr
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvV2ViVmlld1Rlc3QuY3Bw
CkBAIC0yMSwxNSArMjEsMjAgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJXZWJW
aWV3VGVzdC5oIgogCisjaW5jbHVkZSA8V2ViQ29yZS9HT3duUHRyR3RrLmg+CisKIFdlYlZpZXdU
ZXN0OjpXZWJWaWV3VGVzdCgpCiAgICAgOiBtX3dlYlZpZXcoV0VCS0lUX1dFQl9WSUVXKGdfb2Jq
ZWN0X3JlZl9zaW5rKHdlYmtpdF93ZWJfdmlld19uZXcoKSkpKQogICAgICwgbV9tYWluTG9vcChn
X21haW5fbG9vcF9uZXcoMCwgVFJVRSkpCisgICAgLCBtX3BhcmVudFdpbmRvdygwKQogewogICAg
IGFzc2VydE9iamVjdElzRGVsZXRlZFdoZW5UZXN0RmluaXNoZXMoR19PQkpFQ1QobV93ZWJWaWV3
KSk7CiB9CiAKIFdlYlZpZXdUZXN0Ojp+V2ViVmlld1Rlc3QoKQogeworICAgIGlmIChtX3BhcmVu
dFdpbmRvdykKKyAgICAgICAgZ3RrX3dpZGdldF9kZXN0cm95KG1fcGFyZW50V2luZG93KTsKICAg
ICBnX29iamVjdF91bnJlZihtX3dlYlZpZXcpOwogICAgIGdfbWFpbl9sb29wX3VucmVmKG1fbWFp
bkxvb3ApOwogfQpAQCAtMTMwLDMgKzEzNSw0OCBAQCB2b2lkIFdlYlZpZXdUZXN0Ojp3YWl0VW50
aWxMb2FkRmluaXNoZWQoKQogICAgIGdfc2lnbmFsX2Nvbm5lY3QobV93ZWJWaWV3LCAibG9hZC1j
aGFuZ2VkIiwgR19DQUxMQkFDSyhsb2FkQ2hhbmdlZCksIHRoaXMpOwogICAgIGdfbWFpbl9sb29w
X3J1bihtX21haW5Mb29wKTsKIH0KKworc3RhdGljIGdib29sZWFuIHBhcmVudFdpbmRvd01hcHBl
ZChHdGtXaWRnZXQqIHdpZGdldCwgR2RrRXZlbnQqLCBXZWJWaWV3VGVzdCogdGVzdCkKK3sKKyAg
ICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X2J5X2Z1bmMod2lkZ2V0LCByZWludGVycHJl
dF9jYXN0PHZvaWQqPihwYXJlbnRXaW5kb3dNYXBwZWQpLCB0ZXN0KTsKKyAgICBnX21haW5fbG9v
cF9xdWl0KHRlc3QtPm1fbWFpbkxvb3ApOworCisgICAgcmV0dXJuIEZBTFNFOworfQorCit2b2lk
IFdlYlZpZXdUZXN0OjpzaG93SW5XaW5kb3dBbmRXYWl0VW50aWxNYXBwZWQoKQoreworICAgIGdf
YXNzZXJ0KCFtX3BhcmVudFdpbmRvdyk7CisgICAgbV9wYXJlbnRXaW5kb3cgPSBndGtfd2luZG93
X25ldyhHVEtfV0lORE9XX1BPUFVQKTsKKyAgICBndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJ
TkVSKG1fcGFyZW50V2luZG93KSwgR1RLX1dJREdFVChtX3dlYlZpZXcpKTsKKyAgICBndGtfd2lk
Z2V0X3Nob3coR1RLX1dJREdFVChtX3dlYlZpZXcpKTsKKworICAgIGdfc2lnbmFsX2Nvbm5lY3Qo
bV9wYXJlbnRXaW5kb3csICJtYXAtZXZlbnQiLCBHX0NBTExCQUNLKHBhcmVudFdpbmRvd01hcHBl
ZCksIHRoaXMpOworICAgIGd0a193aWRnZXRfc2hvdyhtX3BhcmVudFdpbmRvdyk7CisgICAgZ19t
YWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOworfQorCit2b2lkIFdlYlZpZXdUZXN0Ojptb3VzZU1v
dmVUbyhpbnQgeCwgaW50IHksIHVuc2lnbmVkIGludCBtb3VzZU1vZGlmaWVycykKK3sKKyAgICBn
X2Fzc2VydChtX3BhcmVudFdpbmRvdyk7CisgICAgR3RrV2lkZ2V0KiB2aWV3V2lkZ2V0ID0gR1RL
X1dJREdFVChtX3dlYlZpZXcpOworICAgIGdfYXNzZXJ0KGd0a193aWRnZXRfZ2V0X3JlYWxpemVk
KHZpZXdXaWRnZXQpKTsKKworICAgIEdPd25QdHI8R2RrRXZlbnQ+IGV2ZW50KGdka19ldmVudF9u
ZXcoR0RLX01PVElPTl9OT1RJRlkpKTsKKyAgICBldmVudC0+bW90aW9uLnggPSB4OworICAgIGV2
ZW50LT5tb3Rpb24ueSA9IHk7CisKKyAgICBldmVudC0+bW90aW9uLnRpbWUgPSBHREtfQ1VSUkVO
VF9USU1FOworICAgIGV2ZW50LT5tb3Rpb24ud2luZG93ID0gZ3RrX3dpZGdldF9nZXRfd2luZG93
KHZpZXdXaWRnZXQpOworICAgIGdfb2JqZWN0X3JlZihldmVudC0+bW90aW9uLndpbmRvdyk7Cisg
ICAgZXZlbnQtPmJ1dHRvbi5kZXZpY2UgPSBnZGtfZGV2aWNlX21hbmFnZXJfZ2V0X2NsaWVudF9w
b2ludGVyKGdka19kaXNwbGF5X2dldF9kZXZpY2VfbWFuYWdlcihndGtfd2lkZ2V0X2dldF9kaXNw
bGF5KHZpZXdXaWRnZXQpKSk7CisgICAgZXZlbnQtPm1vdGlvbi5zdGF0ZSA9IG1vdXNlTW9kaWZp
ZXJzOworICAgIGV2ZW50LT5tb3Rpb24uYXhlcyA9IDA7CisKKyAgICBpbnQgeFJvb3QsIHlSb290
OworICAgIGdka193aW5kb3dfZ2V0X3Jvb3RfY29vcmRzKGd0a193aWRnZXRfZ2V0X3dpbmRvdyh2
aWV3V2lkZ2V0KSwgeCwgeSwgJnhSb290LCAmeVJvb3QpOworICAgIGV2ZW50LT5tb3Rpb24ueF9y
b290ID0geFJvb3Q7CisgICAgZXZlbnQtPm1vdGlvbi55X3Jvb3QgPSB5Um9vdDsKKyAgICBndGtf
bWFpbl9kb19ldmVudChldmVudC5nZXQoKSk7Cit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1dlYlZpZXdUZXN0LmggYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJWaWV3VGVzdC5oCmluZGV4IDRhZDZmYTYuLjk1
YTU2OWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3Rz
L1dlYlZpZXdUZXN0LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVz
dHMvV2ViVmlld1Rlc3QuaApAQCAtNDIsMTAgKzQyLDE0IEBAIHB1YmxpYzoKIAogICAgIHZvaWQg
d2FpdChkb3VibGUgc2Vjb25kcyk7CiAgICAgdm9pZCB3YWl0VW50aWxMb2FkRmluaXNoZWQoKTsK
KyAgICB2b2lkIHNob3dJbldpbmRvd0FuZFdhaXRVbnRpbE1hcHBlZCgpOworCisgICAgdm9pZCBt
b3VzZU1vdmVUbyhpbnQgeCwgaW50IHksIHVuc2lnbmVkIGludCBtb3VzZU1vZGlmaWVycyA9IDAp
OwogCiAgICAgV2ViS2l0V2ViVmlldyogbV93ZWJWaWV3OwogICAgIEdNYWluTG9vcCogbV9tYWlu
TG9vcDsKICAgICBDU3RyaW5nIG1fYWN0aXZlVVJJOworICAgIEd0a1dpZGdldCogbV9wYXJlbnRX
aW5kb3c7CiB9OwogCiAjZW5kaWYgLy8gV2ViVmlld1Rlc3RfaApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvd2Via2l0Mi5oIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvd2Via2l0Mi5oCmluZGV4IDc4ZTUzZDUuLjNhZjk5MDQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdDIuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay93ZWJraXQyLmgKQEAgLTMwLDYgKzMwLDcgQEAK
ICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdEVkaXRpbmdDb21tYW5kcy5oPgogI2luY2x1ZGUgPHdl
YmtpdDIvV2ViS2l0RW51bVR5cGVzLmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRFcnJvci5o
PgorI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0SGl0VGVzdFJlc3VsdC5oPgogI2luY2x1ZGUgPHdl
YmtpdDIvV2ViS2l0U2V0dGluZ3MuaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdFVSSVJlcXVl
c3QuaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdFVSSVJlc3BvbnNlLmg+CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay93ZWJraXQybWFyc2hhbC5saXN0IGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvd2Via2l0Mm1hcnNoYWwubGlzdAppbmRl
eCA1OTE4ZDA5Li43N2QyNjlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay93ZWJraXQybWFyc2hhbC5saXN0CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL3dlYmtpdDJtYXJzaGFsLmxpc3QKQEAgLTEwLDUgKzEwLDYgQEAgQk9PTEVBTjpV
SU5UNjQKIEJPT0xFQU46Vk9JRAogT0JKRUNUOlZPSUQKIFZPSUQ6RU5VTQorVk9JRDpPQkpFQ1Qs
VUlOVAogVk9JRDpPQkpFQ1QsUE9JTlRFUgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvYXV0b3Rvb2xz
L3N5bWJvbHMuZmlsdGVyIGIvU291cmNlL2F1dG90b29scy9zeW1ib2xzLmZpbHRlcgppbmRleCBm
MGNkYzFhLi41ZTllYjM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvYXV0b3Rvb2xzL3N5bWJvbHMuZmls
dGVyCisrKyBiL1NvdXJjZS9hdXRvdG9vbHMvc3ltYm9scy5maWx0ZXIKQEAgLTksNiArOSw3IEBA
IF9aTjNXVEYxNmZhc3RaZXJvZWRNYWxsb2NFbTsKIF9aTjNXVEYyMGZhc3RNYWxsb2NTdGF0aXN0
aWNzRXY7CiBfWk4zV1RGOGZhc3RGcmVlRVB2OwogX1pOM1dURjEzZnJlZU93bmVkR1B0ckk3X0dF
cnJvckVFdlBUXzsKK19aTjNXVEYxM2ZyZWVPd25lZEdQdHJJOV9HZGtFdmVudEVFdlBUXzsKIF9a
TjNXVEY4SW50ZXJuYWwyMWZhc3RNYWxsb2NNYXRjaEZhaWxlZEVQdjsKIF9aTjNXVEYzTUQ1OGFk
ZEJ5dGVzKjsKIF9aTjNXVEYzTUQ1OGNoZWNrc3VtKjsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>126297</attachid>
            <date>2012-02-09 06:54:09 -0800</date>
            <delta_ts>2012-02-09 08:23:43 -0800</delta_ts>
            <desc>Updated patch</desc>
            <filename>wk2-mouse-target-changed.diff</filename>
            <type>text/plain</type>
            <size>56368</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCA3M2ExMmVkLi41YTFjNjk3
IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAK
KzIwMTItMDItMDkgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgor
CisgICAgICAgIFtHVEtdIEFkZCBXZWJLaXRXZWJWaWV3Ojptb3VzZS10YXJnZXQtY2hhbmdlZCBz
aWduYWwgdG8gV2ViS2l0MiBHVEsrIEFQSQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NzgwOTcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAqIFNvdXJjZS9hdXRvdG9vbHMvc3ltYm9scy5maWx0ZXI6IEFkZCBm
cmVlT3duZWRHUHRyPF9HZGtFdmVudD4KKyAgICAgICAgc3ltYm9sIHRvIGJlIGFibGUgdG8gdXNl
IEdPd25QdHI8R2RrRXZlbnQ+IGluIFdlYktpdDIgR1RLKyB1bml0CisgICAgICAgIHRlc3RzLgor
CiAyMDEyLTAyLTA3ICBNT1JJVEEgSGFqaW1lICA8bW9ycml0YUBnb29nbGUuY29tPgogCiAgICAg
ICAgIFJlcGxhY2VtZW50IHRleHQgc2hvdWxkIGJlIGF2YWlsYWJsZSBmcm9tIHRoZSBtYXJrZXIu
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cKaW5kZXggMzVkMzBiYi4uY2YxZTY3MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc0
IEBACisyMDEyLTAyLTA5ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNv
bT4KKworICAgICAgICBbR1RLXSBBZGQgV2ViS2l0V2ViVmlldzo6bW91c2UtdGFyZ2V0LWNoYW5n
ZWQgc2lnbmFsIHRvIFdlYktpdDIgR1RLKyBBUEkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTc4MDk3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbTogQWRkIG5ldyBmaWxlcyB0byBj
b21waWxhdGlvbi4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRIaXRUZXN0UmVz
dWx0LmNwcDogQWRkZWQuCisgICAgICAgICh3ZWJraXRIaXRUZXN0UmVzdWx0RmluYWxpemUpOgor
ICAgICAgICAod2Via2l0SGl0VGVzdFJlc3VsdEdldFByb3BlcnR5KToKKyAgICAgICAgKHdlYmtp
dEhpdFRlc3RSZXN1bHRTZXRQcm9wZXJ0eSk6CisgICAgICAgICh3ZWJraXRfaGl0X3Rlc3RfcmVz
dWx0X2luaXQpOgorICAgICAgICAod2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jbGFzc19pbml0KToK
KyAgICAgICAgKHdlYmtpdEhpdFRlc3RSZXN1bHRDcmVhdGUpOiBDcmVhdGUgYSBuZXcgV2ViS2l0
SGl0VGVzdFJlc3VsdCBmb3IKKyAgICAgICAgdGhlIGdpdmVuIFdLSGl0VGVzdFJlc3VsdC4KKyAg
ICAgICAgKHN0cmluZ0lzRXF1YWxUb0NTdHJpbmcpOiBIZWxwZXIgZnVuY3Rpb24gdG8gY29tcGFy
ZSBTdHJpbmcgYW5kCisgICAgICAgIENTdHJpbmcgY29uc2lkZXJpbmcgU3RyaW5nOjppc0VtcHR5
KCkgPT0gQ1N0cmluZy5pc051bGwoKS4KKyAgICAgICAgKHdlYmtpdEhpdFRlc3RSZXN1bHRDb21w
YXJlKTogSGVscGVyIGZ1bmN0aW9uIHRvIGNoZWNrIHdoZXRoZXIgYQorICAgICAgICBXZWJLaXRI
aXRUZXN0UmVzdWx0IGNvbnRhaW5zIHRoZSBzYW1lIGluZm9ybWF0aW9uIHRoYW4gdGhlIGdpdmVu
CisgICAgICAgIFdLSGl0VGVzdFJlc3VsdC4KKyAgICAgICAgKHdlYmtpdF9oaXRfdGVzdF9yZXN1
bHRfZ2V0X2NvbnRleHQpOgorICAgICAgICAod2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0
X2lzX2xpbmspOgorICAgICAgICAod2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX2lt
YWdlKToKKyAgICAgICAgKHdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19tZWRpYSk6
CisgICAgICAgICh3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2dldF9saW5rX3VyaSk6CisgICAgICAg
ICh3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2dldF9saW5rX3RpdGxlKToKKyAgICAgICAgKHdlYmtp
dF9oaXRfdGVzdF9yZXN1bHRfZ2V0X2xpbmtfbGFiZWwpOgorICAgICAgICAod2Via2l0X2hpdF90
ZXN0X3Jlc3VsdF9nZXRfaW1hZ2VfdXJpKToKKyAgICAgICAgKHdlYmtpdF9oaXRfdGVzdF9yZXN1
bHRfZ2V0X21lZGlhX3VyaSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0SGl0
VGVzdFJlc3VsdC5oOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRI
aXRUZXN0UmVzdWx0UHJpdmF0ZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktp
dE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbi5jcHA6CisgICAgICAgICh3ZWJraXROYXZpZ2F0aW9u
UG9saWN5RGVjaXNpb25DcmVhdGUpOiBVc2UKKyAgICAgICAgd2tFdmVudE1vZGlmaWVyc1RvR2Rr
TW9kaWZpZXJzLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFByaXZhdGUuY3Bw
OgorICAgICAgICAod2tFdmVudE1vZGlmaWVyc1RvR2RrTW9kaWZpZXJzKTogTW92ZWQgZnJvbQor
ICAgICAgICBXZWJLaXROYXZpZ2F0aW9uUG9saWN5RGVjaXNpb24gYW5kIHJlbmFtZWQgdG8gd2tF
dmVudE1vZGlmaWVyc1RvR2RrTW9kaWZpZXJzLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdFByaXZhdGUuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRVSUNs
aWVudC5jcHA6CisgICAgICAgIChtb3VzZURpZE1vdmVPdmVyRWxlbWVudCk6IFVJIGNsaWVudCBj
YWxsYmFjayB0aGF0IGNhbGxzCisgICAgICAgIHdlYmtpdFdlYlZpZXdNb3VzZVRhcmdldENoYW5n
ZWQoKS4KKyAgICAgICAgKGF0dGFjaFVJQ2xpZW50VG9WaWV3KTogQWRkIGltcGxlbWVudGF0aW9u
IGZvciBjYWxsYmFjaworICAgICAgICBtb3VzZURpZE1vdmVPdmVyRWxlbWVudC4KKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmNwcDoKKyAgICAgICAgKHdlYmtpdF93
ZWJfdmlld19jbGFzc19pbml0KTogQWRkCisgICAgICAgIFdlYktpdFdlYlZpZXc6Om1vdXNlLXRh
cmdldC1jaGFuZ2VkIHNpZ25hbC4KKyAgICAgICAgKHdlYmtpdFdlYlZpZXdNb3VzZVRhcmdldENo
YW5nZWQpOiBFbWl0CisgICAgICAgIFdlYktpdFdlYlZpZXc6Om1vdXNlLXRhcmdldC1jaGFuZ2Vk
IHNpZ25hbC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3Lmg6Cisg
ICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld1ByaXZhdGUuaDoKKyAgICAg
ICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstZG9jcy5zZ21sOiBBZGQgbmV3
IHNlY3Rpb24gZm9yCisgICAgICAgIFdlYktpdEhpdFRlc3RSZXN1bHQuCisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLXNlY3Rpb25zLnR4dDogQWRkIG5ldyBzeW1i
b2xzLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRXZWJWaWV3
LmNwcDoKKyAgICAgICAgKHRlc3RXZWJWaWV3TW91c2VUYXJnZXQpOgorICAgICAgICAoYmVmb3Jl
QWxsKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJWaWV3VGVzdC5jcHA6
CisgICAgICAgIChXZWJWaWV3VGVzdDo6V2ViVmlld1Rlc3QpOgorICAgICAgICAoV2ViVmlld1Rl
c3Q6On5XZWJWaWV3VGVzdCk6CisgICAgICAgIChwYXJlbnRXaW5kb3dNYXBwZWQpOgorICAgICAg
ICAoV2ViVmlld1Rlc3Q6OnNob3dJbldpbmRvd0FuZFdhaXRVbnRpbE1hcHBlZCk6IE1ldGhvZCB0
byBhZGQgdGhlCisgICAgICAgIHZpZXcgaW50byBhIHBvcHVwIHdpbmRvdyBhbmQgc2hvdyBpdCBy
dW5uaW5nIHRoZSBtYWluIGxvb3AgdW50aWwKKyAgICAgICAgdGhlIHdpbmRvdyBpcyBtYXBwZWQu
CisgICAgICAgIChXZWJWaWV3VGVzdDo6bW91c2VNb3ZlVG8pOiBNZXRob2QgdG8gc3ludGhlc2l6
ZSBhCisgICAgICAgIEdES19NT1RJT05fRVZFTlQgb24gdGhlIGdpdmVuIGNvb3JkaW5hdGVzIGFu
ZCB1c2luZyB0aGUgZ2l2ZW4KKyAgICAgICAgbW9kaWZpZXJzLgorICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvZ3RrL3Rlc3RzL1dlYlZpZXdUZXN0Lmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9n
dGsvd2Via2l0Mi5oOiBJbmNsdWRlIFdlYktpdEhpdFRlc3RSZXN1bHQuaC4KKyAgICAgICAgKiBV
SVByb2Nlc3MvQVBJL2d0ay93ZWJraXQybWFyc2hhbC5saXN0OgorCiAyMDEyLTAyLTA4ICBLZXVu
c29vbiBMZWUgIDxrZXVuc29vbi5sZWVAc2Ftc3VuZy5jb20+CiAKICAgICAgICAgW1dLMl1bRUZM
XSBjcmVhdGluZyBkdW1teSBjbGFzcyBkZXJpdmVkIGZyb20gUmVzb3VyY2VIYW5kbGVDbGllbnQg
Zm9yIEVmbCBkb3dubG9hZCBtb2R1bGUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9HTlVt
YWtlZmlsZS5hbSBiL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFtCmluZGV4IDJiMzZlZDMu
LjNiOGU3YmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFtCisrKyBi
L1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFtCkBAIC04OCw2ICs4OCw3IEBAIGxpYndlYmtp
dDJndGtpbmNsdWRlX0hFQURFUlMgPSBcCiAJJChXZWJLaXQyKS9VSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXREb3dubG9hZC5oIFwKIAkkKFdlYktpdDIpL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEVk
aXRpbmdDb21tYW5kcy5oIFwKIAkkKFdlYktpdDIpL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEVy
cm9yLmggXAorCSQoV2ViS2l0MikvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0SGl0VGVzdFJlc3Vs
dC5oIFwKIAkkKFdlYktpdDIpL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdE5hdmlnYXRpb25Qb2xp
Y3lEZWNpc2lvbi5oIFwKIAkkKFdlYktpdDIpL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFBvbGlj
eURlY2lzaW9uLmggXAogCSQoV2ViS2l0MikvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0UmVzcG9u
c2VQb2xpY3lEZWNpc2lvbi5oIFwKQEAgLTUzOSw2ICs1NDAsOSBAQCBsaWJ3ZWJraXQyZ3RrX0BX
RUJLSVRHVEtfQVBJX01BSk9SX1ZFUlNJT05AX0BXRUJLSVRHVEtfQVBJX01JTk9SX1ZFUlNJT05A
X2xhX1NPVQogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEVkaXRpbmdD
b21tYW5kcy5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRFcnJv
ci5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRFcnJvci5jcHAg
XAorCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEhpdFRlc3RSZXN1bHQu
Y3BwIFwKKwlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRIaXRUZXN0UmVz
dWx0LmggXAorCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEhpdFRlc3RS
ZXN1bHRQcml2YXRlLmggXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktp
dExvYWRlckNsaWVudC5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJL
aXRMb2FkZXJDbGllbnQuY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXROYXZpZ2F0aW9uUG9saWN5RGVjaXNpb24uY3BwIFwKQEAgLTU1MCw2ICs1NTQsNyBAQCBs
aWJ3ZWJraXQyZ3RrX0BXRUJLSVRHVEtfQVBJX01BSk9SX1ZFUlNJT05AX0BXRUJLSVRHVEtfQVBJ
X01JTk9SX1ZFUlNJT05AX2xhX1NPVQogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdFBvbGljeUNsaWVudC5jcHAgXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL1dlYktpdFBvbGljeUNsaWVudC5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay9XZWJLaXRQcml2YXRlLmggXAorCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdFByaXZhdGUuY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXRSZXNwb25zZVBvbGljeURlY2lzaW9uLmNwcCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvV2ViS2l0UmVzcG9uc2VQb2xpY3lEZWNpc2lvbi5oIFwKIAlTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRSZXNwb25zZVBvbGljeURlY2lzaW9uUHJpdmF0
ZS5oIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktp
dEhpdFRlc3RSZXN1bHQuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2Vi
S2l0SGl0VGVzdFJlc3VsdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
OTI4YjRkYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL1dlYktpdEhpdFRlc3RSZXN1bHQuY3BwCkBAIC0wLDAgKzEsNDMwIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJXZWJLaXRIaXRUZXN0UmVzdWx0LmgiCisKKyNpbmNsdWRlICJXZWJIaXRUZXN0UmVzdWx0Lmgi
CisjaW5jbHVkZSAiV2ViS2l0SGl0VGVzdFJlc3VsdFByaXZhdGUuaCIKKyNpbmNsdWRlIDxnbGli
L2dpMThuLWxpYi5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworLyoqCisgKiBT
RUNUSU9OOiBXZWJLaXRIaXRUZXN0UmVzdWx0CisgKiBAU2hvcnRfZGVzY3JpcHRpb246IFJlc3Vs
dCBvZiBhIEhpdCBUZXN0CisgKiBAVGl0bGU6IFdlYktpdEhpdFRlc3RSZXN1bHQKKyAqIEBTZWVf
YWxzbzogI1dlYktpdFdlYlZpZXcKKyAqCisgKiBBIEhpdCBUZXN0IGlzIGFuIG9wZXJhdGlvbiB0
byBnZXQgY29udGV4dCBpbmZvcm1hdGlvbiBhYm91dCBhIGdpdmVuCisgKiBwb2ludCBpbiBhICNX
ZWJLaXRXZWJWaWV3LiAjV2ViS2l0SGl0VGVzdFJlc3VsdCByZXByZXNlbnRzIHRoZQorICogcmVz
dWx0IG9mIGEgSGl0IFRlc3QuIEl0IHByb3ZpZGVzIGNvbnRleHQgaW5mb3JtYXRpb24gYWJvdXQg
d2hhdCBpcworICogYXQgdGhlIGNvb3JkaW5hdGVzIG9mIHRoZSBIaXQgVGVzdCwgc3VjaCBhcyBp
ZiB0aGVyZSdzIGEgbGluaywKKyAqIGFuIGltYWdlIG9yIGEgbWVkaWEuCisgKgorICogWW91IGNh
biBnZXQgdGhlIGNvbnRleHQgb2YgdGhlIEhpdFRlc3RSZXN1bHQgd2l0aAorICogd2Via2l0X2hp
dF90ZXN0X3Jlc3VsdF9nZXRfY29udGV4dCgpIHRoYXQgcmV0dXJucyBhIGJpdG1hc2sgb2YKKyAq
ICNXZWJLaXRIaXRUZXN0UmVzdWx0Q29udGV4dCBmbGFncy4gWW91IGNhbiBhbHNvIHVzZQorICog
d2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX2xpbmsoKSwgd2Via2l0X2hpdF90ZXN0
X3Jlc3VsdF9jb250ZXh0X2lzX2ltYWdlKCkgYW5kCisgKiB3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0
X2NvbnRleHRfaXNfbWVkaWEoKSB0byBkZXRlcm1pbmUgd2hldGhlciB0aGVyZSdzCisgKiBhIGxp
bmssIGltYWdlIG9yIGEgbWVkaWEgZWxlbWVudCBhdCB0aGUgY29vcmRpbmF0ZXMgb2YgdGhlIEhp
dCBUZXN0LgorICogTm90ZSB0aGF0IGl0J3MgcG9zc2libGUgdGhhdCBzZXZlcmFsICNXZWJLaXRI
aXRUZXN0UmVzdWx0Q29udGV4dCBmbGFncworICogYXJlIGFjdGl2ZSBhdCB0aGUgc2FtZSB0aW1l
LCBmb3IgZXhhbXBsZSBpZiB0aGVyZSdzIGEgbGluayBjb250YWluaW5nIGFuIGltYWdlLgorICoK
KyAqIFdoZW4gdGhlIG1vdXNlIGlzIG1vdmVkIG92ZXIgYSAjV2ViS2l0V2ViVmlldyBhIEhpdCBU
ZXN0IGlzIHBlcmZvcm1lZAorICogZm9yIHRoZSBtb3VzZSBjb29yZGluYXRlcyBhbmQgI1dlYktp
dFdlYlZpZXc6Om1vdXNlLXRhcmdldC1jaGFuZ2VkCisgKiBzaWduYWwgaXMgZW1pdHRlZCB3aXRo
IGEgI1dlYktpdEhpdFRlc3RSZXN1bHQuCisgKgorICovCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJL
aXQ7CisKK2VudW0geworICAgIFBST1BfMCwKKworICAgIFBST1BfQ09OVEVYVCwKKyAgICBQUk9Q
X0xJTktfVVJJLAorICAgIFBST1BfTElOS19USVRMRSwKKyAgICBQUk9QX0xJTktfTEFCRUwsCisg
ICAgUFJPUF9JTUFHRV9VUkksCisgICAgUFJPUF9NRURJQV9VUkkKK307CisKK3N0cnVjdCBfV2Vi
S2l0SGl0VGVzdFJlc3VsdFByaXZhdGUgeworICAgIHVuc2lnbmVkIGludCBjb250ZXh0OworICAg
IENTdHJpbmcgbGlua1VSSTsKKyAgICBDU3RyaW5nIGxpbmtUaXRsZTsKKyAgICBDU3RyaW5nIGxp
bmtMYWJlbDsKKyAgICBDU3RyaW5nIGltYWdlVVJJOworICAgIENTdHJpbmcgbWVkaWFVUkk7Cit9
OworCitHX0RFRklORV9UWVBFKFdlYktpdEhpdFRlc3RSZXN1bHQsIHdlYmtpdF9oaXRfdGVzdF9y
ZXN1bHQsIEdfVFlQRV9PQkpFQ1QpCisKK3N0YXRpYyB2b2lkIHdlYmtpdEhpdFRlc3RSZXN1bHRG
aW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCit7CisgICAgV0VCS0lUX0hJVF9URVNUX1JFU1VMVChv
YmplY3QpLT5wcml2LT5+V2ViS2l0SGl0VGVzdFJlc3VsdFByaXZhdGUoKTsKKyAgICBHX09CSkVD
VF9DTEFTUyh3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X3BhcmVudF9jbGFzcyktPmZpbmFsaXplKG9i
amVjdCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdEhpdFRlc3RSZXN1bHRHZXRQcm9wZXJ0eShH
T2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BJZCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyog
cGFyYW1TcGVjKQoreworICAgIFdlYktpdEhpdFRlc3RSZXN1bHQqIGhpdFRlc3RSZXN1bHQgPSBX
RUJLSVRfSElUX1RFU1RfUkVTVUxUKG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHByb3BJZCkgewor
ICAgIGNhc2UgUFJPUF9DT05URVhUOgorICAgICAgICBnX3ZhbHVlX3NldF91aW50KHZhbHVlLCB3
ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2dldF9jb250ZXh0KGhpdFRlc3RSZXN1bHQpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0xJTktfVVJJOgorICAgICAgICBnX3ZhbHVlX3NldF9z
dHJpbmcodmFsdWUsIHdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfZ2V0X2xpbmtfdXJpKGhpdFRlc3RS
ZXN1bHQpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0xJTktfVElUTEU6CisgICAg
ICAgIGdfdmFsdWVfc2V0X3N0cmluZyh2YWx1ZSwgd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9nZXRf
bGlua190aXRsZShoaXRUZXN0UmVzdWx0KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJP
UF9MSU5LX0xBQkVMOgorICAgICAgICBnX3ZhbHVlX3NldF9zdHJpbmcodmFsdWUsIHdlYmtpdF9o
aXRfdGVzdF9yZXN1bHRfZ2V0X2xpbmtfbGFiZWwoaGl0VGVzdFJlc3VsdCkpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIFBST1BfSU1BR0VfVVJJOgorICAgICAgICBnX3ZhbHVlX3NldF9zdHJp
bmcodmFsdWUsIHdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfZ2V0X2ltYWdlX3VyaShoaXRUZXN0UmVz
dWx0KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9NRURJQV9VUkk6CisgICAgICAg
IGdfdmFsdWVfc2V0X3N0cmluZyh2YWx1ZSwgd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9nZXRfbWVk
aWFfdXJpKGhpdFRlc3RSZXN1bHQpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAg
ICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcElkLCBw
YXJhbVNwZWMpOworICAgIH0KK30KKworc3RhdGljIHZvaWQgd2Via2l0SGl0VGVzdFJlc3VsdFNl
dFByb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcElkLCBjb25zdCBHVmFsdWUqIHZh
bHVlLCBHUGFyYW1TcGVjKiBwYXJhbVNwZWMpCit7CisgICAgV2ViS2l0SGl0VGVzdFJlc3VsdCog
aGl0VGVzdFJlc3VsdCA9IFdFQktJVF9ISVRfVEVTVF9SRVNVTFQob2JqZWN0KTsKKworICAgIHN3
aXRjaCAocHJvcElkKSB7CisgICAgY2FzZSBQUk9QX0NPTlRFWFQ6CisgICAgICAgIGhpdFRlc3RS
ZXN1bHQtPnByaXYtPmNvbnRleHQgPSBnX3ZhbHVlX2dldF91aW50KHZhbHVlKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBQUk9QX0xJTktfVVJJOgorICAgICAgICBoaXRUZXN0UmVzdWx0LT5w
cml2LT5saW5rVVJJID0gZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBQUk9QX0xJTktfVElUTEU6CisgICAgICAgIGhpdFRlc3RSZXN1bHQtPnByaXYt
PmxpbmtUaXRsZSA9IGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgUFJPUF9MSU5LX0xBQkVMOgorICAgICAgICBoaXRUZXN0UmVzdWx0LT5wcml2LT5s
aW5rTGFiZWwgPSBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIFBST1BfSU1BR0VfVVJJOgorICAgICAgICBoaXRUZXN0UmVzdWx0LT5wcml2LT5pbWFn
ZVVSSSA9IGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgUFJPUF9NRURJQV9VUkk6CisgICAgICAgIGhpdFRlc3RSZXN1bHQtPnByaXYtPm1lZGlhVVJJ
ID0gZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVs
dDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJv
cElkLCBwYXJhbVNwZWMpOworICAgIH0KK30KKworc3RhdGljIHZvaWQgd2Via2l0X2hpdF90ZXN0
X3Jlc3VsdF9pbml0KFdlYktpdEhpdFRlc3RSZXN1bHQqIGhpdFRlc3RSZXN1bHQpCit7CisgICAg
V2ViS2l0SGl0VGVzdFJlc3VsdFByaXZhdGUqIHByaXYgPSBHX1RZUEVfSU5TVEFOQ0VfR0VUX1BS
SVZBVEUoaGl0VGVzdFJlc3VsdCwgV0VCS0lUX1RZUEVfSElUX1RFU1RfUkVTVUxULCBXZWJLaXRI
aXRUZXN0UmVzdWx0UHJpdmF0ZSk7CisgICAgaGl0VGVzdFJlc3VsdC0+cHJpdiA9IHByaXY7Cisg
ICAgbmV3IChwcml2KSBXZWJLaXRIaXRUZXN0UmVzdWx0UHJpdmF0ZSgpOworfQorCitzdGF0aWMg
dm9pZCB3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NsYXNzX2luaXQoV2ViS2l0SGl0VGVzdFJlc3Vs
dENsYXNzKiBoaXRUZXN0UmVzdWx0Q2xhc3MpCit7CisgICAgR09iamVjdENsYXNzKiBvYmplY3RD
bGFzcyA9IEdfT0JKRUNUX0NMQVNTKGhpdFRlc3RSZXN1bHRDbGFzcyk7CisgICAgb2JqZWN0Q2xh
c3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtpdEhpdFRlc3RSZXN1bHRHZXRQcm9wZXJ0eTsKKyAgICBv
YmplY3RDbGFzcy0+c2V0X3Byb3BlcnR5ID0gd2Via2l0SGl0VGVzdFJlc3VsdFNldFByb3BlcnR5
OworICAgIG9iamVjdENsYXNzLT5maW5hbGl6ZSA9IHdlYmtpdEhpdFRlc3RSZXN1bHRGaW5hbGl6
ZTsKKworICAgIEdQYXJhbUZsYWdzIHBhcmFtRmxhZ3MgPSBzdGF0aWNfY2FzdDxHUGFyYW1GbGFn
cz4oV0VCS0lUX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fQ09OU1RSVUNUX09OTFkpOworCisg
ICAgLyoqCisgICAgICogV2ViS2l0SGl0VGVzdFJlc3VsdDpjb250ZXh0OgorICAgICAqCisgICAg
ICogQml0bWFzayBvZiAjV2ViS2l0SGl0VGVzdFJlc3VsdENvbnRleHQgZmxhZ3MgcmVwcmVzZW50
aW5nCisgICAgICogdGhlIGNvbnRleHQgb2YgdGhlICNXZWJLaXRIaXRUZXN0UmVzdWx0LgorICAg
ICAqLworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkob2JqZWN0Q2xhc3MsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9QX0NPTlRFWFQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3BhcmFtX3NwZWNfdWludCgiY29udGV4dCIs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
KCJDb250ZXh0IiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfKCJGbGFncyB3aXRoIHRoZSBjb250ZXh0IG9mIHRoZSBXZWJLaXRIaXRUZXN0
UmVzdWx0IiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAwLCBHX01BWFVJTlQsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwYXJhbUZsYWdzKSk7CisKKyAgICAvKioKKyAgICAgKiBX
ZWJLaXRIaXRUZXN0UmVzdWx0OmxpbmstdXJpOgorICAgICAqCisgICAgICogVGhlIFVSSSBvZiB0
aGUgbGluayBpZiBmbGFnICVXRUJLSVRfSElUX1RFU1RfUkVTVUxUX0NPTlRFWFRfTElOSworICAg
ICAqIGlzIHByZXNlbnQgaW4gI1dlYktpdEhpdFRlc3RSZXN1bHQ6Y29udGV4dAorICAgICAqLwor
ICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkob2JqZWN0Q2xhc3MsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9QX0xJTktfVVJJLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygibGluay11cmkiLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
KCJMaW5rIFVSSSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfKCJUaGUgbGluayBVUkkiKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1GbGFncykpOworICAgIC8q
KgorICAgICAqIFdlYktpdEhpdFRlc3RSZXN1bHQ6bGluay10aXRsZToKKyAgICAgKgorICAgICAq
IFRoZSB0aXRsZSBvZiB0aGUgbGluayBpZiBmbGFnICVXRUJLSVRfSElUX1RFU1RfUkVTVUxUX0NP
TlRFWFRfTElOSworICAgICAqIGlzIHByZXNlbnQgaW4gI1dlYktpdEhpdFRlc3RSZXN1bHQ6Y29u
dGV4dAorICAgICAqLworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkob2JqZWN0
Q2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9QX0xJTktfVElU
TEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3BhcmFtX3NwZWNfc3Ry
aW5nKCJsaW5rLXRpdGxlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXygiTGluayBUaXRsZSIpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJUaGUgbGluayB0aXRsZSIpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBwYXJhbUZsYWdzKSk7CisgICAgLyoqCisgICAgICogV2ViS2l0SGl0VGVzdFJlc3VsdDpsaW5r
LWxhYmVsOgorICAgICAqCisgICAgICogVGhlIGxhYmVsIG9mIHRoZSBsaW5rIGlmIGZsYWcgJVdF
QktJVF9ISVRfVEVTVF9SRVNVTFRfQ09OVEVYVF9MSU5LCisgICAgICogaXMgcHJlc2VudCBpbiAj
V2ViS2l0SGl0VGVzdFJlc3VsdDpjb250ZXh0CisgICAgICovCisgICAgZ19vYmplY3RfY2xhc3Nf
aW5zdGFsbF9wcm9wZXJ0eShvYmplY3RDbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFBST1BfTElOS19MQUJFTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoImxpbmstbGFiZWwiLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJMaW5rIExhYmVsIiks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF8oIlRoZSBsaW5rIGxhYmVsIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtRmxhZ3MpKTsKKyAgICAvKioKKyAgICAgKiBX
ZWJLaXRIaXRUZXN0UmVzdWx0OmltYWdlLXVyaToKKyAgICAgKgorICAgICAqIFRoZSBVUkkgb2Yg
dGhlIGltYWdlIGlmIGZsYWcgJVdFQktJVF9ISVRfVEVTVF9SRVNVTFRfQ09OVEVYVF9JTUFHRQor
ICAgICAqIGlzIHByZXNlbnQgaW4gI1dlYktpdEhpdFRlc3RSZXN1bHQ6Y29udGV4dAorICAgICAq
LworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkob2JqZWN0Q2xhc3MsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9QX0lNQUdFX1VSSSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoImltYWdlLXVy
aSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF8oIkltYWdlIFVSSSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfKCJUaGUgaW1hZ2UgVVJJIiksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtRmxhZ3MpKTsK
KyAgICAvKioKKyAgICAgKiBXZWJLaXRIaXRUZXN0UmVzdWx0Om1lZGlhLXVyaToKKyAgICAgKgor
ICAgICAqIFRoZSBVUkkgb2YgdGhlIG1lZGlhIGlmIGZsYWcgJVdFQktJVF9ISVRfVEVTVF9SRVNV
TFRfQ09OVEVYVF9NRURJQQorICAgICAqIGlzIHByZXNlbnQgaW4gI1dlYktpdEhpdFRlc3RSZXN1
bHQ6Y29udGV4dAorICAgICAqLworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHko
b2JqZWN0Q2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9QX01F
RElBX1VSSSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfcGFyYW1fc3Bl
Y19zdHJpbmcoIm1lZGlhLXVyaSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF8oIk1lZGlhIFVSSSIpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJUaGUgbWVkaWEgVVJJIiks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHBhcmFtRmxhZ3MpKTsKKworICAgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZShoaXRUZXN0
UmVzdWx0Q2xhc3MsIHNpemVvZihXZWJLaXRIaXRUZXN0UmVzdWx0UHJpdmF0ZSkpOworfQorCitX
ZWJLaXRIaXRUZXN0UmVzdWx0KiB3ZWJraXRIaXRUZXN0UmVzdWx0Q3JlYXRlKFdLSGl0VGVzdFJl
c3VsdFJlZiB3a0hpdFRlc3RSZXN1bHQpCit7CisgICAgdW5zaWduZWQgY29udGV4dCA9IFdFQktJ
VF9ISVRfVEVTVF9SRVNVTFRfQ09OVEVYVF9ET0NVTUVOVDsKKworICAgIGNvbnN0IFN0cmluZyYg
bGlua1VSTCA9IHRvSW1wbCh3a0hpdFRlc3RSZXN1bHQpLT5hYnNvbHV0ZUxpbmtVUkwoKTsKKyAg
ICBpZiAoIWxpbmtVUkwuaXNFbXB0eSgpKQorICAgICAgICBjb250ZXh0IHw9IFdFQktJVF9ISVRf
VEVTVF9SRVNVTFRfQ09OVEVYVF9MSU5LOworCisgICAgY29uc3QgU3RyaW5nJiBpbWFnZVVSTCA9
IHRvSW1wbCh3a0hpdFRlc3RSZXN1bHQpLT5hYnNvbHV0ZUltYWdlVVJMKCk7CisgICAgaWYgKCFp
bWFnZVVSTC5pc0VtcHR5KCkpCisgICAgICAgIGNvbnRleHQgfD0gV0VCS0lUX0hJVF9URVNUX1JF
U1VMVF9DT05URVhUX0lNQUdFOworCisgICAgY29uc3QgU3RyaW5nJiBtZWRpYVVSTCA9IHRvSW1w
bCh3a0hpdFRlc3RSZXN1bHQpLT5hYnNvbHV0ZU1lZGlhVVJMKCk7CisgICAgaWYgKCFtZWRpYVVS
TC5pc0VtcHR5KCkpCisgICAgICAgIGNvbnRleHQgfD0gV0VCS0lUX0hJVF9URVNUX1JFU1VMVF9D
T05URVhUX01FRElBOworCisgICAgY29uc3QgU3RyaW5nJiBsaW5rVGl0bGUgPSB0b0ltcGwod2tI
aXRUZXN0UmVzdWx0KS0+bGlua1RpdGxlKCk7CisgICAgY29uc3QgU3RyaW5nJiBsaW5rTGFiZWwg
PSB0b0ltcGwod2tIaXRUZXN0UmVzdWx0KS0+bGlua0xhYmVsKCk7CisKKyAgICByZXR1cm4gV0VC
S0lUX0hJVF9URVNUX1JFU1VMVChnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfSElUX1RFU1RfUkVT
VUxULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29u
dGV4dCIsIGNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICJsaW5rLXVyaSIsICFsaW5rVVJMLmlzRW1wdHkoKSA/IGxpbmtVUkwudXRmOCgpLmRh
dGEoKSA6IDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICJpbWFnZS11cmkiLCAhaW1hZ2VVUkwuaXNFbXB0eSgpID8gaW1hZ2VVUkwudXRmOCgpLmRhdGEo
KSA6IDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJt
ZWRpYS11cmkiLCAhbWVkaWFVUkwuaXNFbXB0eSgpID8gbWVkaWFVUkwudXRmOCgpLmRhdGEoKSA6
IDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5r
LXRpdGxlIiwgIWxpbmtUaXRsZS5pc0VtcHR5KCkgPyBsaW5rVGl0bGUudXRmOCgpLmRhdGEoKSA6
IDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5r
LWxhYmVsIiwgIWxpbmtMYWJlbC5pc0VtcHR5KCkgPyBsaW5rTGFiZWwudXRmOCgpLmRhdGEoKSA6
IDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwp
KTsKK30KKworc3RhdGljIGJvb2wgc3RyaW5nSXNFcXVhbFRvQ1N0cmluZyhjb25zdCBTdHJpbmcm
IHN0cmluZywgY29uc3QgQ1N0cmluZyYgY1N0cmluZykKK3sKKyAgICByZXR1cm4gKChzdHJpbmcu
aXNFbXB0eSgpICYmIGNTdHJpbmcuaXNOdWxsKCkpIHx8IChzdHJpbmcudXRmOCgpID09IGNTdHJp
bmcpKTsKK30KKworYm9vbCB3ZWJraXRIaXRUZXN0UmVzdWx0Q29tcGFyZShXZWJLaXRIaXRUZXN0
UmVzdWx0KiBoaXRUZXN0UmVzdWx0LCBXS0hpdFRlc3RSZXN1bHRSZWYgd2tIaXRUZXN0UmVzdWx0
KQoreworICAgIFdlYktpdEhpdFRlc3RSZXN1bHRQcml2YXRlKiBwcml2ID0gaGl0VGVzdFJlc3Vs
dC0+cHJpdjsKKyAgICByZXR1cm4gc3RyaW5nSXNFcXVhbFRvQ1N0cmluZyh0b0ltcGwod2tIaXRU
ZXN0UmVzdWx0KS0+YWJzb2x1dGVMaW5rVVJMKCksIHByaXYtPmxpbmtVUkkpCisgICAgICAgICYm
IHN0cmluZ0lzRXF1YWxUb0NTdHJpbmcodG9JbXBsKHdrSGl0VGVzdFJlc3VsdCktPmxpbmtUaXRs
ZSgpLCBwcml2LT5saW5rVGl0bGUpCisgICAgICAgICYmIHN0cmluZ0lzRXF1YWxUb0NTdHJpbmco
dG9JbXBsKHdrSGl0VGVzdFJlc3VsdCktPmxpbmtMYWJlbCgpLCBwcml2LT5saW5rTGFiZWwpCisg
ICAgICAgICYmIHN0cmluZ0lzRXF1YWxUb0NTdHJpbmcodG9JbXBsKHdrSGl0VGVzdFJlc3VsdCkt
PmFic29sdXRlSW1hZ2VVUkwoKSwgcHJpdi0+aW1hZ2VVUkkpCisgICAgICAgICYmIHN0cmluZ0lz
RXF1YWxUb0NTdHJpbmcodG9JbXBsKHdrSGl0VGVzdFJlc3VsdCktPmFic29sdXRlTWVkaWFVUkwo
KSwgcHJpdi0+bWVkaWFVUkkpOworfQorCisvKioKKyAqIHdlYmtpdF9oaXRfdGVzdF9yZXN1bHRf
Z2V0X2NvbnRleHQ6CisgKiBAaGl0X3Rlc3RfcmVzdWx0OiBhICNXZWJLaXRIaXRUZXN0UmVzdWx0
CisgKgorICogR2V0cyB0aGUgdmFsdWUgb2YgdGhlICNXZWJLaXRIaXRUZXN0UmVzdWx0OmNvbnRl
eHQgcHJvcGVydHkuCisgKgorICogUmV0dXJuczogYSBiaXRtYXNrIG9mICNXZWJLaXRIaXRUZXN0
UmVzdWx0Q29udGV4dCBmbGFncworICovCitndWludCB3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2dl
dF9jb250ZXh0KFdlYktpdEhpdFRlc3RSZXN1bHQqIGhpdFRlc3RSZXN1bHQpCit7CisgICAgZ19y
ZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX0hJVF9URVNUX1JFU1VMVChoaXRUZXN0UmVzdWx0
KSwgMCk7CisKKyAgICByZXR1cm4gaGl0VGVzdFJlc3VsdC0+cHJpdi0+Y29udGV4dDsKK30KKwor
LyoqCisgKiB3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfbGluazoKKyAqIEBoaXRf
dGVzdF9yZXN1bHQ6IGEgI1dlYktpdEhpdFRlc3RSZXN1bHQKKyAqCisgKiBHZXRzIHdoZXRoZXIg
JVdFQktJVF9ISVRfVEVTVF9SRVNVTFRfQ09OVEVYVF9MSU5LIGZsYWcgaXMgcHJlc2VudCBpbgor
ICogI1dlYktpdEhpdFRlc3RSZXN1bHQ6Y29udGV4dC4KKyAqCisgKiBSZXR1cm5zOiAlVFJVRSBp
ZiB0aGVyZSdzIGEgbGluayBlbGVtZW50IGluIHRoZSBjb29yZGluYXRlcyBvZiB0aGUgSGl0IFRl
c3QsCisgKiAgICBvciAlRkFMU0Ugb3RoZXJ3aXNlCisgKi8KK2dib29sZWFuIHdlYmtpdF9oaXRf
dGVzdF9yZXN1bHRfY29udGV4dF9pc19saW5rKFdlYktpdEhpdFRlc3RSZXN1bHQqIGhpdFRlc3RS
ZXN1bHQpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX0hJVF9URVNUX1JF
U1VMVChoaXRUZXN0UmVzdWx0KSwgRkFMU0UpOworCisgICAgcmV0dXJuIGhpdFRlc3RSZXN1bHQt
PnByaXYtPmNvbnRleHQgJiBXRUJLSVRfSElUX1RFU1RfUkVTVUxUX0NPTlRFWFRfTElOSzsKK30K
KworLyoqCisgKiB3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfaW1hZ2U6CisgKiBA
aGl0X3Rlc3RfcmVzdWx0OiBhICNXZWJLaXRIaXRUZXN0UmVzdWx0CisgKgorICogR2V0cyB3aGV0
aGVyICVXRUJLSVRfSElUX1RFU1RfUkVTVUxUX0NPTlRFWFRfSU1BR0UgZmxhZyBpcyBwcmVzZW50
IGluCisgKiAjV2ViS2l0SGl0VGVzdFJlc3VsdDpjb250ZXh0LgorICoKKyAqIFJldHVybnM6ICVU
UlVFIGlmIHRoZXJlJ3MgYW4gaW1hZ2UgZWxlbWVudCBpbiB0aGUgY29vcmRpbmF0ZXMgb2YgdGhl
IEhpdCBUZXN0LAorICogICAgb3IgJUZBTFNFIG90aGVyd2lzZQorICovCitnYm9vbGVhbiB3ZWJr
aXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfaW1hZ2UoV2ViS2l0SGl0VGVzdFJlc3VsdCog
aGl0VGVzdFJlc3VsdCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfSElU
X1RFU1RfUkVTVUxUKGhpdFRlc3RSZXN1bHQpLCBGQUxTRSk7CisKKyAgICByZXR1cm4gaGl0VGVz
dFJlc3VsdC0+cHJpdi0+Y29udGV4dCAmIFdFQktJVF9ISVRfVEVTVF9SRVNVTFRfQ09OVEVYVF9J
TUFHRTsKK30KKworLyoqCisgKiB3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfbWVk
aWE6CisgKiBAaGl0X3Rlc3RfcmVzdWx0OiBhICNXZWJLaXRIaXRUZXN0UmVzdWx0CisgKgorICog
R2V0cyB3aGV0aGVyICVXRUJLSVRfSElUX1RFU1RfUkVTVUxUX0NPTlRFWFRfTUVESUEgZmxhZyBp
cyBwcmVzZW50IGluCisgKiAjV2ViS2l0SGl0VGVzdFJlc3VsdDpjb250ZXh0LgorICoKKyAqIFJl
dHVybnM6ICVUUlVFIGlmIHRoZXJlJ3MgYSBtZWRpYSBlbGVtZW50IGluIHRoZSBjb29yZGluYXRl
cyBvZiB0aGUgSGl0IFRlc3QsCisgKiAgICBvciAlRkFMU0Ugb3RoZXJ3aXNlCisgKi8KK2dib29s
ZWFuIHdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19tZWRpYShXZWJLaXRIaXRUZXN0
UmVzdWx0KiBoaXRUZXN0UmVzdWx0KQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJ
VF9JU19ISVRfVEVTVF9SRVNVTFQoaGl0VGVzdFJlc3VsdCksIEZBTFNFKTsKKworICAgIHJldHVy
biBoaXRUZXN0UmVzdWx0LT5wcml2LT5jb250ZXh0ICYgV0VCS0lUX0hJVF9URVNUX1JFU1VMVF9D
T05URVhUX01FRElBOworfQorCisvKioKKyAqIHdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfZ2V0X2xp
bmtfdXJpOgorICogQGhpdF90ZXN0X3Jlc3VsdDogYSAjV2ViS2l0SGl0VGVzdFJlc3VsdAorICoK
KyAqIEdldHMgdGhlIHZhbHVlIG9mIHRoZSAjV2ViS2l0SGl0VGVzdFJlc3VsdDpsaW5rLXVyaSBw
cm9wZXJ0eS4KKyAqCisgKiBSZXR1cm5zOiB0aGUgVVJJIG9mIHRoZSBsaW5rIGVsZW1lbnQgaW4g
dGhlIGNvb3JkaW5hdGVzIG9mIHRoZSBIaXQgVGVzdCwKKyAqICAgIG9yICVOVUxMIGlmIHRoZXJl
IGlucyd0IGEgbGluayBlbGVtZW50IGluIEBoaXRfdGVzdF9yZXN1bHQgY29udGV4dAorICovCitj
b25zdCBnY2hhciogd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9nZXRfbGlua191cmkoV2ViS2l0SGl0
VGVzdFJlc3VsdCogaGl0VGVzdFJlc3VsdCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChX
RUJLSVRfSVNfSElUX1RFU1RfUkVTVUxUKGhpdFRlc3RSZXN1bHQpLCAwKTsKKworICAgIHJldHVy
biBoaXRUZXN0UmVzdWx0LT5wcml2LT5saW5rVVJJLmRhdGEoKTsKK30KKworLyoqCisgKiB3ZWJr
aXRfaGl0X3Rlc3RfcmVzdWx0X2dldF9saW5rX3RpdGxlOgorICogQGhpdF90ZXN0X3Jlc3VsdDog
YSAjV2ViS2l0SGl0VGVzdFJlc3VsdAorICoKKyAqIEdldHMgdGhlIHZhbHVlIG9mIHRoZSAjV2Vi
S2l0SGl0VGVzdFJlc3VsdDpsaW5rLXRpdGxlIHByb3BlcnR5LgorICoKKyAqIFJldHVybnM6IHRo
ZSB0aXRsZSBvZiB0aGUgbGluayBlbGVtZW50IGluIHRoZSBjb29yZGluYXRlcyBvZiB0aGUgSGl0
IFRlc3QsCisgKiAgICBvciAlTlVMTCBpZiB0aGVyZSBpbnMndCBhIGxpbmsgZWxlbWVudCBpbiBA
aGl0X3Rlc3RfcmVzdWx0IGNvbnRleHQgb3IgdGhlCisgKiAgICBsaW5rIGVsZW1lbnQgZG9lc24n
dCBoYXZlIGEgdGl0bGUKKyAqLworY29uc3QgZ2NoYXIqIHdlYmtpdF9oaXRfdGVzdF9yZXN1bHRf
Z2V0X2xpbmtfdGl0bGUoV2ViS2l0SGl0VGVzdFJlc3VsdCogaGl0VGVzdFJlc3VsdCkKK3sKKyAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfSElUX1RFU1RfUkVTVUxUKGhpdFRlc3RS
ZXN1bHQpLCAwKTsKKworICAgIHJldHVybiBoaXRUZXN0UmVzdWx0LT5wcml2LT5saW5rVGl0bGUu
ZGF0YSgpOworfQorCisvKioKKyAqIHdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfZ2V0X2xpbmtfbGFi
ZWw6CisgKiBAaGl0X3Rlc3RfcmVzdWx0OiBhICNXZWJLaXRIaXRUZXN0UmVzdWx0CisgKgorICog
R2V0cyB0aGUgdmFsdWUgb2YgdGhlICNXZWJLaXRIaXRUZXN0UmVzdWx0OmxpbmstbGFiZWwgcHJv
cGVydHkuCisgKgorICogUmV0dXJuczogdGhlIGxhYmVsIG9mIHRoZSBsaW5rIGVsZW1lbnQgaW4g
dGhlIGNvb3JkaW5hdGVzIG9mIHRoZSBIaXQgVGVzdCwKKyAqICAgIG9yICVOVUxMIGlmIHRoZXJl
IGlucyd0IGEgbGluayBlbGVtZW50IGluIEBoaXRfdGVzdF9yZXN1bHQgY29udGV4dCBvciB0aGUK
KyAqICAgIGxpbmsgZWxlbWVudCBkb2Vzbid0IGhhdmUgYSBsYWJlbAorICovCitjb25zdCBnY2hh
ciogd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9nZXRfbGlua19sYWJlbChXZWJLaXRIaXRUZXN0UmVz
dWx0KiBoaXRUZXN0UmVzdWx0KQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9J
U19ISVRfVEVTVF9SRVNVTFQoaGl0VGVzdFJlc3VsdCksIDApOworCisgICAgcmV0dXJuIGhpdFRl
c3RSZXN1bHQtPnByaXYtPmxpbmtMYWJlbC5kYXRhKCk7Cit9CisKKy8qKgorICogd2Via2l0X2hp
dF90ZXN0X3Jlc3VsdF9nZXRfaW1hZ2VfdXJpOgorICogQGhpdF90ZXN0X3Jlc3VsdDogYSAjV2Vi
S2l0SGl0VGVzdFJlc3VsdAorICoKKyAqIEdldHMgdGhlIHZhbHVlIG9mIHRoZSAjV2ViS2l0SGl0
VGVzdFJlc3VsdDppbWFnZS11cmkgcHJvcGVydHkuCisgKgorICogUmV0dXJuczogdGhlIFVSSSBv
ZiB0aGUgaW1hZ2UgZWxlbWVudCBpbiB0aGUgY29vcmRpbmF0ZXMgb2YgdGhlIEhpdCBUZXN0LAor
ICogICAgb3IgJU5VTEwgaWYgdGhlcmUgaW5zJ3QgYW4gaW1hZ2UgZWxlbWVudCBpbiBAaGl0X3Rl
c3RfcmVzdWx0IGNvbnRleHQKKyAqLworY29uc3QgZ2NoYXIqIHdlYmtpdF9oaXRfdGVzdF9yZXN1
bHRfZ2V0X2ltYWdlX3VyaShXZWJLaXRIaXRUZXN0UmVzdWx0KiBoaXRUZXN0UmVzdWx0KQorewor
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19ISVRfVEVTVF9SRVNVTFQoaGl0VGVz
dFJlc3VsdCksIDApOworCisgICAgcmV0dXJuIGhpdFRlc3RSZXN1bHQtPnByaXYtPmltYWdlVVJJ
LmRhdGEoKTsKK30KKworLyoqCisgKiB3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2dldF9tZWRpYV91
cmk6CisgKiBAaGl0X3Rlc3RfcmVzdWx0OiBhICNXZWJLaXRIaXRUZXN0UmVzdWx0CisgKgorICog
R2V0cyB0aGUgdmFsdWUgb2YgdGhlICNXZWJLaXRIaXRUZXN0UmVzdWx0Om1lZGlhLXVyaSBwcm9w
ZXJ0eS4KKyAqCisgKiBSZXR1cm5zOiB0aGUgVVJJIG9mIHRoZSBtZWRpYSBlbGVtZW50IGluIHRo
ZSBjb29yZGluYXRlcyBvZiB0aGUgSGl0IFRlc3QsCisgKiAgICBvciAlTlVMTCBpZiB0aGVyZSBp
bnMndCBhIG1lZGlhIGVsZW1lbnQgaW4gQGhpdF90ZXN0X3Jlc3VsdCBjb250ZXh0CisgKi8KK2Nv
bnN0IGdjaGFyKiB3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2dldF9tZWRpYV91cmkoV2ViS2l0SGl0
VGVzdFJlc3VsdCogaGl0VGVzdFJlc3VsdCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChX
RUJLSVRfSVNfSElUX1RFU1RfUkVTVUxUKGhpdFRlc3RSZXN1bHQpLCAwKTsKKworICAgIHJldHVy
biBoaXRUZXN0UmVzdWx0LT5wcml2LT5tZWRpYVVSSS5kYXRhKCk7Cit9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRIaXRUZXN0UmVzdWx0LmggYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRIaXRUZXN0UmVzdWx0LmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDg5MTZlNQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEhpdFRlc3RSZXN1bHQu
aApAQCAtMCwwICsxLDEwMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5M
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLwor
CisjaWYgIWRlZmluZWQoX19XRUJLSVQyX0hfSU5TSURFX18pICYmICFkZWZpbmVkKFdFQktJVDJf
Q09NUElMQVRJT04pCisjZXJyb3IgIk9ubHkgPHdlYmtpdDIvd2Via2l0Mi5oPiBjYW4gYmUgaW5j
bHVkZWQgZGlyZWN0bHkuIgorI2VuZGlmCisKKyNpZm5kZWYgV2ViS2l0SGl0VGVzdFJlc3VsdF9o
CisjZGVmaW5lIFdlYktpdEhpdFRlc3RSZXN1bHRfaAorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3Qu
aD4KKyNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdERlZmluZXMuaD4KKworR19CRUdJTl9ERUNMUwor
CisjZGVmaW5lIFdFQktJVF9UWVBFX0hJVF9URVNUX1JFU1VMVCAgICAgICAgICAgICh3ZWJraXRf
aGl0X3Rlc3RfcmVzdWx0X2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9ISVRfVEVTVF9SRVNV
TFQob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VC
S0lUX1RZUEVfSElUX1RFU1RfUkVTVUxULCBXZWJLaXRIaXRUZXN0UmVzdWx0KSkKKyNkZWZpbmUg
V0VCS0lUX0lTX0hJVF9URVNUX1JFU1VMVChvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNU
QU5DRV9UWVBFKChvYmopLCBXRUJLSVRfVFlQRV9ISVRfVEVTVF9SRVNVTFQpKQorI2RlZmluZSBX
RUJLSVRfSElUX1RFU1RfUkVTVUxUX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNT
X0NBU1QoKGtsYXNzKSwgIFdFQktJVF9UWVBFX0hJVF9URVNUX1JFU1VMVCwgV2ViS2l0SGl0VGVz
dFJlc3VsdENsYXNzKSkKKyNkZWZpbmUgV0VCS0lUX0lTX0hJVF9URVNUX1JFU1VMVF9DTEFTUyhr
bGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfVFlQRV9ISVRf
VEVTVF9SRVNVTFQpKQorI2RlZmluZSBXRUJLSVRfSElUX1RFU1RfUkVTVUxUX0dFVF9DTEFTUyhv
YmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9UWVBFX0hJVF9U
RVNUX1JFU1VMVCwgV2ViS2l0SGl0VGVzdFJlc3VsdENsYXNzKSkKKwordHlwZWRlZiBzdHJ1Y3Qg
X1dlYktpdEhpdFRlc3RSZXN1bHQgICAgICAgIFdlYktpdEhpdFRlc3RSZXN1bHQ7Cit0eXBlZGVm
IHN0cnVjdCBfV2ViS2l0SGl0VGVzdFJlc3VsdENsYXNzICAgV2ViS2l0SGl0VGVzdFJlc3VsdENs
YXNzOwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdEhpdFRlc3RSZXN1bHRQcml2YXRlIFdlYktpdEhp
dFRlc3RSZXN1bHRQcml2YXRlOworCisvKioKKyAqIFdlYktpdEhpdFRlc3RSZXN1bHRDb250ZXh0
OgorICogQFdFQktJVF9ISVRfVEVTVF9SRVNVTFRfQ09OVEVYVF9ET0NVTUVOVDogYW55d2hlcmUg
aW4gdGhlIGRvY3VtZW50LgorICogQFdFQktJVF9ISVRfVEVTVF9SRVNVTFRfQ09OVEVYVF9MSU5L
OiBhIGh5cGVybGluayBlbGVtZW50LgorICogQFdFQktJVF9ISVRfVEVTVF9SRVNVTFRfQ09OVEVY
VF9JTUFHRTogYW4gaW1hZ2UgZWxlbWVudC4KKyAqIEBXRUJLSVRfSElUX1RFU1RfUkVTVUxUX0NP
TlRFWFRfTUVESUE6IGEgdmlkZW8gb3IgYXVkaW8gZWxlbWVudC4KKyAqCisgKiBFbnVtIHZhbHVl
cyB3aXRoIGZsYWdzIHJlcHJlc2VudGluZyB0aGUgY29udGV4dCBvZiBhICNXZWJLaXRIaXRUZXN0
UmVzdWx0LgorICovCit0eXBlZGVmIGVudW0KK3sKKyAgICBXRUJLSVRfSElUX1RFU1RfUkVTVUxU
X0NPTlRFWFRfRE9DVU1FTlQgPSAxIDw8IDEsCisgICAgV0VCS0lUX0hJVF9URVNUX1JFU1VMVF9D
T05URVhUX0xJTksgICAgID0gMSA8PCAyLAorICAgIFdFQktJVF9ISVRfVEVTVF9SRVNVTFRfQ09O
VEVYVF9JTUFHRSAgICA9IDEgPDwgMywKKyAgICBXRUJLSVRfSElUX1RFU1RfUkVTVUxUX0NPTlRF
WFRfTUVESUEgICAgPSAxIDw8IDQKK30gV2ViS2l0SGl0VGVzdFJlc3VsdENvbnRleHQ7CisKK3N0
cnVjdCBfV2ViS2l0SGl0VGVzdFJlc3VsdCB7CisgICAgR09iamVjdCBwYXJlbnQ7CisKKyAgICBX
ZWJLaXRIaXRUZXN0UmVzdWx0UHJpdmF0ZSAqcHJpdjsKK307CisKK3N0cnVjdCBfV2ViS2l0SGl0
VGVzdFJlc3VsdENsYXNzIHsKKyAgICBHT2JqZWN0Q2xhc3MgcGFyZW50X2NsYXNzOworfTsKKwor
V0VCS0lUX0FQSSBHVHlwZQord2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9nZXRfdHlwZSAgICAgICAg
ICAgICAodm9pZCk7CisKK1dFQktJVF9BUEkgZ3VpbnQKK3dlYmtpdF9oaXRfdGVzdF9yZXN1bHRf
Z2V0X2NvbnRleHQgICAgICAgICAgKFdlYktpdEhpdFRlc3RSZXN1bHQgKmhpdF90ZXN0X3Jlc3Vs
dCk7CisKK1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4
dF9pc19saW5rICAgICAgKFdlYktpdEhpdFRlc3RSZXN1bHQgKmhpdF90ZXN0X3Jlc3VsdCk7CisK
K1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19p
bWFnZSAgICAgKFdlYktpdEhpdFRlc3RSZXN1bHQgKmhpdF90ZXN0X3Jlc3VsdCk7CisKK1dFQktJ
VF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19tZWRpYSAg
ICAgKFdlYktpdEhpdFRlc3RSZXN1bHQgKmhpdF90ZXN0X3Jlc3VsdCk7CisKK1dFQktJVF9BUEkg
Y29uc3QgZ2NoYXIgKgord2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9nZXRfbGlua191cmkgICAgICAg
ICAoV2ViS2l0SGl0VGVzdFJlc3VsdCAqaGl0X3Rlc3RfcmVzdWx0KTsKKworV0VCS0lUX0FQSSBj
b25zdCBnY2hhciAqCit3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2dldF9saW5rX3RpdGxlICAgICAg
IChXZWJLaXRIaXRUZXN0UmVzdWx0ICpoaXRfdGVzdF9yZXN1bHQpOworCitXRUJLSVRfQVBJIGNv
bnN0IGdjaGFyICoKK3dlYmtpdF9oaXRfdGVzdF9yZXN1bHRfZ2V0X2xpbmtfbGFiZWwgICAgICAg
KFdlYktpdEhpdFRlc3RSZXN1bHQgKmhpdF90ZXN0X3Jlc3VsdCk7CisKK1dFQktJVF9BUEkgY29u
c3QgZ2NoYXIgKgord2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9nZXRfaW1hZ2VfdXJpICAgICAgICAo
V2ViS2l0SGl0VGVzdFJlc3VsdCAqaGl0X3Rlc3RfcmVzdWx0KTsKKworV0VCS0lUX0FQSSBjb25z
dCBnY2hhciAqCit3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2dldF9tZWRpYV91cmkgICAgICAgIChX
ZWJLaXRIaXRUZXN0UmVzdWx0ICpoaXRfdGVzdF9yZXN1bHQpOworCitHX0VORF9ERUNMUworCisj
ZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktp
dEhpdFRlc3RSZXN1bHRQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXRIaXRUZXN0UmVzdWx0UHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLjYwODgwMDYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay9XZWJLaXRIaXRUZXN0UmVzdWx0UHJpdmF0ZS5oCkBAIC0wLDAgKzEsMjkg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRI
aXRUZXN0UmVzdWx0UHJpdmF0ZV9oCisjZGVmaW5lIFdlYktpdEhpdFRlc3RSZXN1bHRQcml2YXRl
X2gKKworI2luY2x1ZGUgIldlYktpdEhpdFRlc3RSZXN1bHQuaCIKKyNpbmNsdWRlICJXZWJLaXRQ
cml2YXRlLmgiCisKK1dlYktpdEhpdFRlc3RSZXN1bHQqIHdlYmtpdEhpdFRlc3RSZXN1bHRDcmVh
dGUoV0tIaXRUZXN0UmVzdWx0UmVmKTsKK2Jvb2wgd2Via2l0SGl0VGVzdFJlc3VsdENvbXBhcmUo
V2ViS2l0SGl0VGVzdFJlc3VsdCosIFdLSGl0VGVzdFJlc3VsdFJlZik7CisKKyNlbmRpZiAvLyBX
ZWJLaXRIaXRUZXN0UmVzdWx0UHJpdmF0ZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay9XZWJLaXROYXZpZ2F0aW9uUG9saWN5RGVjaXNpb24uY3BwIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0TmF2aWdhdGlvblBvbGljeURlY2lz
aW9uLmNwcAppbmRleCBmY2Q1N2I0Li45NGQxM2VhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXROYXZpZ2F0aW9uUG9saWN5RGVjaXNpb24uY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdE5hdmlnYXRpb25Qb2xp
Y3lEZWNpc2lvbi5jcHAKQEAgLTI1LDcgKzI1LDYgQEAKICNpbmNsdWRlICJXZWJLaXRQcml2YXRl
LmgiCiAjaW5jbHVkZSAiV2ViS2l0VVJJUmVxdWVzdFByaXZhdGUuaCIKICNpbmNsdWRlICJXZWJV
UkxSZXF1ZXN0LmgiCi0jaW5jbHVkZSA8Z2RrL2dkay5oPgogI2luY2x1ZGUgPGdsaWIvZ2kxOG4t
bGliLmg+CiAjaW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi90
ZXh0L0NTdHJpbmcuaD4KQEAgLTI4MCwyNiArMjc5LDEyIEBAIHN0YXRpYyB1bnNpZ25lZCB3a0V2
ZW50TW91c2VCdXR0b25Ub1dlYktpdE1vdXNlQnV0dG9uKFdLRXZlbnRNb3VzZUJ1dHRvbiB3a0J1
dHRvCiAgICAgcmV0dXJuIDA7CiB9CiAKLXVuc2lnbmVkIHdrRXZlbnRNb2RpZmllcnNUb1Vuc2ln
bmVkKFdLRXZlbnRNb2RpZmllcnMgd2tNb2RpZmllcnMpCi17Ci0gICAgdW5zaWduZWQgbW9kaWZp
ZXJzID0gMDsKLSAgICBpZiAod2tNb2RpZmllcnMgJiBrV0tFdmVudE1vZGlmaWVyc1NoaWZ0S2V5
KQotICAgICAgICBtb2RpZmllcnMgfD0gR0RLX1NISUZUX01BU0s7Ci0gICAgaWYgKHdrTW9kaWZp
ZXJzICYga1dLRXZlbnRNb2RpZmllcnNDb250cm9sS2V5KQotICAgICAgICBtb2RpZmllcnMgfD0g
R0RLX0NPTlRST0xfTUFTSzsKLSAgICBpZiAod2tNb2RpZmllcnMgJiBrV0tFdmVudE1vZGlmaWVy
c0FsdEtleSkKLSAgICAgICAgbW9kaWZpZXJzIHw9IEdES19NT0QxX01BU0s7Ci0gICAgaWYgKHdr
TW9kaWZpZXJzICYga1dLRXZlbnRNb2RpZmllcnNNZXRhS2V5KQotICAgICAgICBtb2RpZmllcnMg
fD0gR0RLX01FVEFfTUFTSzsKLSAgICByZXR1cm4gbW9kaWZpZXJzOwotfQotCiBXZWJLaXROYXZp
Z2F0aW9uUG9saWN5RGVjaXNpb24qIHdlYmtpdE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbkNyZWF0
ZShXS0ZyYW1lTmF2aWdhdGlvblR5cGUgbmF2aWdhdGlvblR5cGUsIFdLRXZlbnRNb3VzZUJ1dHRv
biBtb3VzZUJ1dHRvbiwgV0tFdmVudE1vZGlmaWVycyBtb2RpZmllcnMsIFdLVVJMUmVxdWVzdFJl
ZiByZXF1ZXN0LCBjb25zdCBjaGFyKiBmcmFtZU5hbWUsIFdLRnJhbWVQb2xpY3lMaXN0ZW5lclJl
ZiBsaXN0ZW5lcikKIHsKICAgICBXZWJLaXROYXZpZ2F0aW9uUG9saWN5RGVjaXNpb24qIGRlY2lz
aW9uID0gV0VCS0lUX05BVklHQVRJT05fUE9MSUNZX0RFQ0lTSU9OKGdfb2JqZWN0X25ldyhXRUJL
SVRfVFlQRV9OQVZJR0FUSU9OX1BPTElDWV9ERUNJU0lPTiwgTlVMTCkpOwogICAgIGRlY2lzaW9u
LT5wcml2LT5uYXZpZ2F0aW9uVHlwZSA9IHN0YXRpY19jYXN0PFdlYktpdE5hdmlnYXRpb25UeXBl
PihuYXZpZ2F0aW9uVHlwZSk7CiAgICAgZGVjaXNpb24tPnByaXYtPm1vdXNlQnV0dG9uID0gd2tF
dmVudE1vdXNlQnV0dG9uVG9XZWJLaXRNb3VzZUJ1dHRvbihtb3VzZUJ1dHRvbik7Ci0gICAgZGVj
aXNpb24tPnByaXYtPm1vZGlmaWVycyA9IHdrRXZlbnRNb2RpZmllcnNUb1Vuc2lnbmVkKG1vZGlm
aWVycyk7CisgICAgZGVjaXNpb24tPnByaXYtPm1vZGlmaWVycyA9IHdrRXZlbnRNb2RpZmllcnNU
b0dka01vZGlmaWVycyhtb2RpZmllcnMpOwogICAgIGRlY2lzaW9uLT5wcml2LT5yZXF1ZXN0ID0g
YWRvcHRHUmVmKHdlYmtpdFVSSVJlcXVlc3RDcmVhdGVGb3JSZXNvdXJjZVJlcXVlc3QodG9JbXBs
KHJlcXVlc3QpLT5yZXNvdXJjZVJlcXVlc3QoKSkpOwogICAgIGRlY2lzaW9uLT5wcml2LT5mcmFt
ZU5hbWUgPSBmcmFtZU5hbWU7CiAgICAgd2Via2l0UG9saWN5RGVjaXNpb25TZXRMaXN0ZW5lcihX
RUJLSVRfUE9MSUNZX0RFQ0lTSU9OKGRlY2lzaW9uKSwgbGlzdGVuZXIpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0UHJpdmF0ZS5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRQcml2YXRlLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OThjM2FiCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0UHJpdmF0ZS5jcHAKQEAgLTAsMCAr
MSwzNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0UHJpdmF0ZS5oIgorCisjaW5jbHVkZSA8Z2RrL2dk
ay5oPgorCit1bnNpZ25lZCB3a0V2ZW50TW9kaWZpZXJzVG9HZGtNb2RpZmllcnMoV0tFdmVudE1v
ZGlmaWVycyB3a01vZGlmaWVycykKK3sKKyAgICB1bnNpZ25lZCBtb2RpZmllcnMgPSAwOworICAg
IGlmICh3a01vZGlmaWVycyAmIGtXS0V2ZW50TW9kaWZpZXJzU2hpZnRLZXkpCisgICAgICAgIG1v
ZGlmaWVycyB8PSBHREtfU0hJRlRfTUFTSzsKKyAgICBpZiAod2tNb2RpZmllcnMgJiBrV0tFdmVu
dE1vZGlmaWVyc0NvbnRyb2xLZXkpCisgICAgICAgIG1vZGlmaWVycyB8PSBHREtfQ09OVFJPTF9N
QVNLOworICAgIGlmICh3a01vZGlmaWVycyAmIGtXS0V2ZW50TW9kaWZpZXJzQWx0S2V5KQorICAg
ICAgICBtb2RpZmllcnMgfD0gR0RLX01PRDFfTUFTSzsKKyAgICBpZiAod2tNb2RpZmllcnMgJiBr
V0tFdmVudE1vZGlmaWVyc01ldGFLZXkpCisgICAgICAgIG1vZGlmaWVycyB8PSBHREtfTUVUQV9N
QVNLOworICAgIHJldHVybiBtb2RpZmllcnM7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay9XZWJLaXRQcml2YXRlLmgKaW5kZXggYzQ0ZDg3Ny4uNDNkMjZjYyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0UHJpdmF0ZS5o
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFByaXZhdGUuaApA
QCAtNDAsNCArNDAsNiBAQAogI2RlZmluZSBDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKHdl
YmtpdE5hbWUsIHdlYmNvcmVOYW1lKSBcCiAgICAgICAgIENPTVBJTEVfQVNTRVJUKGludCh3ZWJr
aXROYW1lKSA9PSBpbnQod2ViY29yZU5hbWUpLCBtaXNtYXRjaGluZ0VudW1zKQogCit1bnNpZ25l
ZCB3a0V2ZW50TW9kaWZpZXJzVG9HZGtNb2RpZmllcnMoV0tFdmVudE1vZGlmaWVycyk7CisKICNl
bmRpZiAvLyBXZWJLaXRQcml2YXRlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL1dlYktpdFVJQ2xpZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdFVJQ2xpZW50LmNwcAppbmRleCBhNjU5YWQzLi5lNzYyMTJkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRVSUNsaWVudC5j
cHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0VUlDbGllbnQu
Y3BwCkBAIC0xMjYsNiArMTI2LDExIEBAIHN0YXRpYyB2b2lkIHNldFdpbmRvd0ZyYW1lKFdLUGFn
ZVJlZiBwYWdlLCBXS1JlY3QgZnJhbWUsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCiAgICAgd2Vi
a2l0V2luZG93UHJvcGVydGllc1NldEdlb21ldHJ5KHdpbmRvd1Byb3BlcnRpZXMsICZnZW9tZXRy
eSk7CiB9CiAKK3N0YXRpYyB2b2lkIG1vdXNlRGlkTW92ZU92ZXJFbGVtZW50KFdLUGFnZVJlZiBw
YWdlLCBXS0hpdFRlc3RSZXN1bHRSZWYgaGl0VGVzdFJlc3VsdCwgV0tFdmVudE1vZGlmaWVycyBt
b2RpZmllcnMsIFdLVHlwZVJlZiB1c2VyRGF0YSwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sK
KyAgICB3ZWJraXRXZWJWaWV3TW91c2VUYXJnZXRDaGFuZ2VkKFdFQktJVF9XRUJfVklFVyhjbGll
bnRJbmZvKSwgaGl0VGVzdFJlc3VsdCwgd2tFdmVudE1vZGlmaWVyc1RvR2RrTW9kaWZpZXJzKG1v
ZGlmaWVycykpOworfQorCiB2b2lkIGF0dGFjaFVJQ2xpZW50VG9WaWV3KFdlYktpdFdlYlZpZXcq
IHdlYlZpZXcpCiB7CiAgICAgV0tQYWdlVUlDbGllbnQgd2tVSUNsaWVudCA9IHsKQEAgLTE3MSw3
ICsxNzYsNyBAQCB2b2lkIGF0dGFjaFVJQ2xpZW50VG9WaWV3KFdlYktpdFdlYlZpZXcqIHdlYlZp
ZXcpCiAgICAgICAgIDAsIC8vIHNhdmVEYXRhVG9GaWxlSW5Eb3dubG9hZHNGb2xkZXIKICAgICAg
ICAgMCwgLy8gc2hvdWxkSW50ZXJydXB0SmF2YVNjcmlwdAogICAgICAgICBjcmVhdGVOZXdQYWdl
LAotICAgICAgICAwLCAvLyBtb3VzZURpZE1vdmVPdmVyRWxlbWVudAorICAgICAgICBtb3VzZURp
ZE1vdmVPdmVyRWxlbWVudCwKICAgICAgICAgMCwgLy8gZGVjaWRlUG9saWN5Rm9yTm90aWZpY2F0
aW9uUGVybWlzc2lvblJlcXVlc3QKICAgICB9OwogICAgIFdLUGFnZVJlZiB3a1BhZ2UgPSB0b0FQ
SSh3ZWJraXRXZWJWaWV3QmFzZUdldFBhZ2UoV0VCS0lUX1dFQl9WSUVXX0JBU0Uod2ViVmlldykp
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdl
YlZpZXcuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmll
dy5jcHAKaW5kZXggYzNhY2NjYy4uYWY3OTkzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5jcHAKQEAgLTI0LDYgKzI0LDcgQEAKICNp
bmNsdWRlICJXZWJLaXRCYWNrRm9yd2FyZExpc3RQcml2YXRlLmgiCiAjaW5jbHVkZSAiV2ViS2l0
RW51bVR5cGVzLmgiCiAjaW5jbHVkZSAiV2ViS2l0RXJyb3IuaCIKKyNpbmNsdWRlICJXZWJLaXRI
aXRUZXN0UmVzdWx0UHJpdmF0ZS5oIgogI2luY2x1ZGUgIldlYktpdExvYWRlckNsaWVudC5oIgog
I2luY2x1ZGUgIldlYktpdE1hcnNoYWwuaCIKICNpbmNsdWRlICJXZWJLaXRQb2xpY3lDbGllbnQu
aCIKQEAgLTU5LDYgKzYwLDggQEAgZW51bSB7CiAKICAgICBERUNJREVfUE9MSUNZLAogCisgICAg
TU9VU0VfVEFSR0VUX0NIQU5HRUQsCisKICAgICBMQVNUX1NJR05BTAogfTsKIApAQCAtODMsNiAr
ODYsOSBAQCBzdHJ1Y3QgX1dlYktpdFdlYlZpZXdQcml2YXRlIHsKICAgICBHUmVmUHRyPFdlYktp
dEJhY2tGb3J3YXJkTGlzdD4gYmFja0ZvcndhcmRMaXN0OwogICAgIEdSZWZQdHI8V2ViS2l0U2V0
dGluZ3M+IHNldHRpbmdzOwogICAgIEdSZWZQdHI8V2ViS2l0V2luZG93UHJvcGVydGllcz4gd2lu
ZG93UHJvcGVydGllczsKKworICAgIEdSZWZQdHI8V2ViS2l0SGl0VGVzdFJlc3VsdD4gbW91c2VU
YXJnZXRIaXRUZXN0UmVzdWx0OworICAgIHVuc2lnbmVkIG1vdXNlVGFyZ2V0TW9kaWZpZXJzOwog
fTsKIAogc3RhdGljIGd1aW50IHNpZ25hbHNbTEFTVF9TSUdOQUxdID0geyAwLCB9OwpAQCAtNjE1
LDYgKzYyMSwzMiBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfY2xhc3NfaW5pdChXZWJL
aXRXZWJWaWV3Q2xhc3MqIHdlYlZpZXdDbGFzcykKICAgICAgICAgICAgICAgICAgICAgIEdfVFlQ
RV9CT09MRUFOLCAyLCAvKiBudW1iZXIgb2YgcGFyYW1ldGVycyAqLwogICAgICAgICAgICAgICAg
ICAgICAgV0VCS0lUX1RZUEVfUE9MSUNZX0RFQ0lTSU9OLAogICAgICAgICAgICAgICAgICAgICAg
V0VCS0lUX1RZUEVfUE9MSUNZX0RFQ0lTSU9OX1RZUEUpOworCisgICAgLyoqCisgICAgICogV2Vi
S2l0V2ViVmlldzo6bW91c2UtdGFyZ2V0LWNoYW5nZWQ6CisgICAgICogQHdlYl92aWV3OiB0aGUg
I1dlYktpdFdlYlZpZXcgb24gd2hpY2ggdGhlIHNpZ25hbCBpcyBlbWl0dGVkCisgICAgICogQGhp
dF90ZXN0X3Jlc3VsdDogYSAjV2ViS2l0SGl0VGVzdFJlc3VsdAorICAgICAqIEBtb2RpZmllcnM6
IGEgYml0bWFzayBvZiAjR2RrTW9kaWZpZXJUeXBlCisgICAgICoKKyAgICAgKiBUaGlzIHNpZ25h
bCBpcyBlbWl0dGVkIHdoZW4gdGhlIG1vdXNlIGN1cnNvciBtb3ZlcyBvdmVyIGFuCisgICAgICog
ZWxlbWVudCBzdWNoIGFzIGEgbGluaywgaW1hZ2Ugb3IgYSBtZWRpYSBlbGVtZW50LiBUbyBkZXRl
cm1pbmUKKyAgICAgKiB3aGF0IHR5cGUgb2YgZWxlbWVudCB0aGUgbW91c2UgY3Vyc29yIGlzIG92
ZXIsIGEgSGl0IFRlc3QgaXMgcGVyZm9ybWVkCisgICAgICogb24gdGhlIGN1cnJlbnQgbW91c2Ug
Y29vcmRpbmF0ZXMgYW5kIHRoZSByZXN1bHQgaXMgcGFzc2VkIGluIHRoZQorICAgICAqIEBoaXRf
dGVzdF9yZXN1bHQgYXJndW1lbnQuIFRoZSBAbW9kaWZpZXJzIGFyZ3VtZW50IGlzIGEgYml0bWFz
ayBvZgorICAgICAqICNHZGtNb2RpZmllclR5cGUgZmxhZ3MgaW5kaWNhdGluZyB0aGUgc3RhdGUg
b2YgbW9kaWZpZXIga2V5cy4KKyAgICAgKiBUaGUgc2lnbmFsIGlzIGVtaXR0ZWQgYWdhaW4gd2hl
biB0aGUgbW91c2UgaXMgbW92ZWQgb3V0IG9mIHRoZQorICAgICAqIGN1cnJlbnQgZWxlbWVudCB3
aXRoIGEgbmV3IEBoaXRfdGVzdF9yZXN1bHQuCisgICAgICovCisgICAgIHNpZ25hbHNbTU9VU0Vf
VEFSR0VUX0NIQU5HRURdID0KKyAgICAgICAgIGdfc2lnbmFsX25ldygibW91c2UtdGFyZ2V0LWNo
YW5nZWQiLAorICAgICAgICAgICAgICAgICAgICAgIEdfVFlQRV9GUk9NX0NMQVNTKHdlYlZpZXdD
bGFzcyksCisgICAgICAgICAgICAgICAgICAgICAgR19TSUdOQUxfUlVOX0xBU1QsCisgICAgICAg
ICAgICAgICAgICAgICAgR19TVFJVQ1RfT0ZGU0VUKFdlYktpdFdlYlZpZXdDbGFzcywgbW91c2Vf
dGFyZ2V0X2NoYW5nZWQpLAorICAgICAgICAgICAgICAgICAgICAgIDAsIDAsCisgICAgICAgICAg
ICAgICAgICAgICAgd2Via2l0X21hcnNoYWxfVk9JRF9fT0JKRUNUX1VJTlQsCisgICAgICAgICAg
ICAgICAgICAgICAgR19UWVBFX05PTkUsIDIsCisgICAgICAgICAgICAgICAgICAgICAgV0VCS0lU
X1RZUEVfSElUX1RFU1RfUkVTVUxULAorICAgICAgICAgICAgICAgICAgICAgIEdfVFlQRV9VSU5U
KTsKIH0KIAogdm9pZCB3ZWJraXRXZWJWaWV3TG9hZENoYW5nZWQoV2ViS2l0V2ViVmlldyogd2Vi
VmlldywgV2ViS2l0TG9hZEV2ZW50IGxvYWRFdmVudCkKQEAgLTcyNiw2ICs3NTgsMTkgQEAgdm9p
ZCB3ZWJraXRXZWJWaWV3TWFrZVBvbGljeURlY2lzaW9uKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcs
IFdlYktpdFBvbGljeURlY2lzaW8KICAgICBnX3NpZ25hbF9lbWl0KHdlYlZpZXcsIHNpZ25hbHNb
REVDSURFX1BPTElDWV0sIDAsIGRlY2lzaW9uLCB0eXBlLCAmcmV0dXJuVmFsdWUpOwogfQogCit2
b2lkIHdlYmtpdFdlYlZpZXdNb3VzZVRhcmdldENoYW5nZWQoV2ViS2l0V2ViVmlldyogd2ViVmll
dywgV0tIaXRUZXN0UmVzdWx0UmVmIHdrSGl0VGVzdFJlc3VsdCwgdW5zaWduZWQgbW9kaWZpZXJz
KQoreworICAgIFdlYktpdFdlYlZpZXdQcml2YXRlKiBwcml2ID0gd2ViVmlldy0+cHJpdjsKKyAg
ICBpZiAocHJpdi0+bW91c2VUYXJnZXRIaXRUZXN0UmVzdWx0CisgICAgICAgICYmIHByaXYtPm1v
dXNlVGFyZ2V0TW9kaWZpZXJzID09IG1vZGlmaWVycworICAgICAgICAmJiB3ZWJraXRIaXRUZXN0
UmVzdWx0Q29tcGFyZShwcml2LT5tb3VzZVRhcmdldEhpdFRlc3RSZXN1bHQuZ2V0KCksIHdrSGl0
VGVzdFJlc3VsdCkpCisgICAgICAgIHJldHVybjsKKworICAgIHByaXYtPm1vdXNlVGFyZ2V0TW9k
aWZpZXJzID0gbW9kaWZpZXJzOworICAgIHByaXYtPm1vdXNlVGFyZ2V0SGl0VGVzdFJlc3VsdCA9
IGFkb3B0R1JlZih3ZWJraXRIaXRUZXN0UmVzdWx0Q3JlYXRlKHdrSGl0VGVzdFJlc3VsdCkpOwor
ICAgIGdfc2lnbmFsX2VtaXQod2ViVmlldywgc2lnbmFsc1tNT1VTRV9UQVJHRVRfQ0hBTkdFRF0s
IDAsIHByaXYtPm1vdXNlVGFyZ2V0SGl0VGVzdFJlc3VsdC5nZXQoKSwgbW9kaWZpZXJzKTsKK30K
KwogLyoqCiAgKiB3ZWJraXRfd2ViX3ZpZXdfbmV3OgogICoKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuaCBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuaAppbmRleCBkNDc2OGUzLi4wMDgxYmUz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJW
aWV3LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmll
dy5oCkBAIC0zMCw2ICszMCw3IEBACiAKICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdEJhY2tGb3J3
YXJkTGlzdC5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0RGVmaW5lcy5oPgorI2luY2x1ZGUg
PHdlYmtpdDIvV2ViS2l0SGl0VGVzdFJlc3VsdC5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0
V2ViQ29udGV4dC5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0U2V0dGluZ3MuaD4KICNpbmNs
dWRlIDx3ZWJraXQyL1dlYktpdFVSSVJlcXVlc3QuaD4KQEAgLTExNiwyOSArMTE3LDMyIEBAIHN0
cnVjdCBfV2ViS2l0V2ViVmlldyB7CiBzdHJ1Y3QgX1dlYktpdFdlYlZpZXdDbGFzcyB7CiAgICAg
V2ViS2l0V2ViVmlld0Jhc2VDbGFzcyBwYXJlbnQ7CiAKLSAgICB2b2lkICAgICAgICgqIGxvYWRf
Y2hhbmdlZCkgICAoV2ViS2l0V2ViVmlldyAgICAgICAgICAgICAqd2ViX3ZpZXcsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYktpdExvYWRFdmVudCAgICAgICAgICAgIGxv
YWRfZXZlbnQpOwotICAgIGdib29sZWFuICAgKCogbG9hZF9mYWlsZWQpICAgIChXZWJLaXRXZWJW
aWV3ICAgICAgICAgICAgICp3ZWJfdmlldywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgV2ViS2l0TG9hZEV2ZW50ICAgICAgICAgICAgbG9hZF9ldmVudCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgICAgICAgICAgICAgICAqZmFpbGlu
Z191cmksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdFcnJvciAgICAgICAg
ICAgICAgICAgICAgKmVycm9yKTsKLQotICAgIEd0a1dpZGdldCAqKCogY3JlYXRlKSAgICAgICAg
IChXZWJLaXRXZWJWaWV3ICAgICAgICAgICAgICp3ZWJfdmlldyk7Ci0gICAgdm9pZCAgICAgICAo
KiByZWFkeV90b19zaG93KSAgKFdlYktpdFdlYlZpZXcgICAgICAgICAgICAgKndlYl92aWV3KTsK
LSAgICB2b2lkICAgICAgICgqIGNsb3NlKSAgICAgICAgICAoV2ViS2l0V2ViVmlldyAgICAgICAg
ICAgICAqd2ViX3ZpZXcpOwotCi0gICAgZ2Jvb2xlYW4gICAoKiBzY3JpcHRfYWxlcnQpICAgKFdl
YktpdFdlYlZpZXcgICAgICAgICAgICAgKndlYl92aWV3LAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBnY2hhciAgICAgICAgICAgICAgICptZXNzYWdlKTsKLSAgICBn
Ym9vbGVhbiAgICgqIHNjcmlwdF9jb25maXJtKSAoV2ViS2l0V2ViVmlldyAgICAgICAgICAgICAq
d2ViX3ZpZXcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFy
ICAgICAgICAgICAgICAgKm1lc3NhZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGdib29sZWFuICAgICAgICAgICAgICAgICAgKmNvbmZpcm1lZCk7Ci0gICAgZ2Jvb2xlYW4g
ICAoKiBzY3JpcHRfcHJvbXB0KSAgKFdlYktpdFdlYlZpZXcgICAgICAgICAgICAgKndlYl92aWV3
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAgICAgICAg
ICAgICAgICptZXNzYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBnY2hhciAgICAgICAgICAgICAgICpkZWZhdWx0X3RleHQsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGdjaGFyICAgICAgICAgICAgICAgICAgICAqKnRleHQpOwotICAgIGdi
b29sZWFuICAgKCogZGVjaWRlX3BvbGljeSkgIChXZWJLaXRXZWJWaWV3ICAgICAgICAgICAgICp3
ZWJfdmlldywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViS2l0UG9saWN5
RGVjaXNpb24gICAgICAqZGVjaXNpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFdlYktpdFBvbGljeURlY2lzaW9uVHlwZSAgdHlwZSk7CisgICAgdm9pZCAgICAgICAoKiBs
b2FkX2NoYW5nZWQpICAgICAgICAgKFdlYktpdFdlYlZpZXcgICAgICAgICAgICAgKndlYl92aWV3
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJLaXRMb2FkRXZl
bnQgICAgICAgICAgICBsb2FkX2V2ZW50KTsKKyAgICBnYm9vbGVhbiAgICgqIGxvYWRfZmFpbGVk
KSAgICAgICAgICAoV2ViS2l0V2ViVmlldyAgICAgICAgICAgICAqd2ViX3ZpZXcsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYktpdExvYWRFdmVudCAgICAgICAg
ICAgIGxvYWRfZXZlbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IGdjaGFyICAgICAgICAgICAgICAgKmZhaWxpbmdfdXJpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBHRXJyb3IgICAgICAgICAgICAgICAgICAgICplcnJv
cik7CisKKyAgICBHdGtXaWRnZXQgKigqIGNyZWF0ZSkgICAgICAgICAgICAgICAoV2ViS2l0V2Vi
VmlldyAgICAgICAgICAgICAqd2ViX3ZpZXcpOworICAgIHZvaWQgICAgICAgKCogcmVhZHlfdG9f
c2hvdykgICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAgICAgICp3ZWJfdmlldyk7CisgICAg
dm9pZCAgICAgICAoKiBjbG9zZSkgICAgICAgICAgICAgICAgKFdlYktpdFdlYlZpZXcgICAgICAg
ICAgICAgKndlYl92aWV3KTsKKworICAgIGdib29sZWFuICAgKCogc2NyaXB0X2FsZXJ0KSAgICAg
ICAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAgICAgICp3ZWJfdmlldywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgICAgICAgICAgICAgICAqbWVz
c2FnZSk7CisgICAgZ2Jvb2xlYW4gICAoKiBzY3JpcHRfY29uZmlybSkgICAgICAgKFdlYktpdFdl
YlZpZXcgICAgICAgICAgICAgKndlYl92aWV3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBnY2hhciAgICAgICAgICAgICAgICptZXNzYWdlLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnYm9vbGVhbiAgICAgICAgICAgICAg
ICAgICpjb25maXJtZWQpOworICAgIGdib29sZWFuICAgKCogc2NyaXB0X3Byb21wdCkgICAgICAg
IChXZWJLaXRXZWJWaWV3ICAgICAgICAgICAgICp3ZWJfdmlldywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgICAgICAgICAgICAgICAqbWVzc2Fn
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIg
ICAgICAgICAgICAgICAqZGVmYXVsdF90ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBnY2hhciAgICAgICAgICAgICAgICAgICAgKip0ZXh0KTsKKyAgICBnYm9v
bGVhbiAgICgqIGRlY2lkZV9wb2xpY3kpICAgICAgICAoV2ViS2l0V2ViVmlldyAgICAgICAgICAg
ICAqd2ViX3ZpZXcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdl
YktpdFBvbGljeURlY2lzaW9uICAgICAgKmRlY2lzaW9uLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBXZWJLaXRQb2xpY3lEZWNpc2lvblR5cGUgIHR5cGUpOworICAg
IHZvaWQgICAgICAgKCogbW91c2VfdGFyZ2V0X2NoYW5nZWQpIChXZWJLaXRXZWJWaWV3ICAgICAg
ICAgICAgKndlYl92aWV3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBXZWJLaXRIaXRUZXN0UmVzdWx0ICAgICAgKmhpdF90ZXN0X3Jlc3VsdCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQgICAgICAgICAgICAgICAgICAgICBt
b2RpZmllcnMpOwogCiAgICAgLyogUGFkZGluZyBmb3IgZnV0dXJlIGV4cGFuc2lvbiAqLwogICAg
IHZvaWQgKCpfd2Via2l0X3Jlc2VydmVkMCkgKHZvaWQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld1ByaXZhdGUuaCBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdQcml2YXRlLmgKaW5kZXggNjYz
ODZkMC4uNzY4YTYyMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0V2ViVmlld1ByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXRXZWJWaWV3UHJpdmF0ZS5oCkBAIC00Myw1ICs0Myw2IEBAIHZvaWQgd2Vi
a2l0V2ViVmlld1J1bkphdmFTY3JpcHRBbGVydChXZWJLaXRXZWJWaWV3KiwgY29uc3QgQ1N0cmlu
ZyYgbWVzc2FnZSk7CiBib29sIHdlYmtpdFdlYlZpZXdSdW5KYXZhU2NyaXB0Q29uZmlybShXZWJL
aXRXZWJWaWV3KiwgY29uc3QgQ1N0cmluZyYgbWVzc2FnZSk7CiBXS1N0cmluZ1JlZiB3ZWJraXRX
ZWJWaWV3UnVuSmF2YVNjcmlwdFByb21wdChXZWJLaXRXZWJWaWV3KiwgY29uc3QgQ1N0cmluZyYg
bWVzc2FnZSwgY29uc3QgQ1N0cmluZyYgZGVmYXVsdFRleHQpOwogdm9pZCB3ZWJraXRXZWJWaWV3
TWFrZVBvbGljeURlY2lzaW9uKFdlYktpdFdlYlZpZXcqLCBXZWJLaXRQb2xpY3lEZWNpc2lvblR5
cGUsIFdlYktpdFBvbGljeURlY2lzaW9uKik7Cit2b2lkIHdlYmtpdFdlYlZpZXdNb3VzZVRhcmdl
dENoYW5nZWQoV2ViS2l0V2ViVmlldyosIFdLSGl0VGVzdFJlc3VsdFJlZiwgdW5zaWduZWQgbW9k
aWZpZXJzKTsKIAogI2VuZGlmIC8vIFdlYktpdFdlYlZpZXdQcml2YXRlX2gKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1kb2NzLnNn
bWwgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstZG9j
cy5zZ21sCmluZGV4IGFmMGNkYWUuLmNjY2UwNGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1kb2NzLnNnbWwKKysrIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLWRvY3Muc2dtbApAQCAt
MjQsNiArMjQsNyBAQAogICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9XZWJLaXRQb2xpY3lEZWNp
c2lvbi54bWwiLz4KICAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvV2ViS2l0TmF2aWdhdGlvblBv
bGljeURlY2lzaW9uLnhtbCIvPgogICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9XZWJLaXRSZXNw
b25zZVBvbGljeURlY2lzaW9uLnhtbCIvPgorICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9XZWJL
aXRIaXRUZXN0UmVzdWx0LnhtbCIvPgogICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9XZWJLaXRF
cnJvci54bWwiLz4KICAgPC9jaGFwdGVyPgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstc2VjdGlvbnMudHh0IGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLXNlY3Rpb25zLnR4dAppbmRl
eCA1MmNkODllLi41MGM0MmRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay9kb2NzL3dlYmtpdDJndGstc2VjdGlvbnMudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1zZWN0aW9ucy50eHQKQEAgLTM5MCw2
ICszOTAsMzQgQEAgd2Via2l0X3Jlc3BvbnNlX3BvbGljeV9kZWNpc2lvbl9nZXRfdHlwZQogPC9T
RUNUSU9OPgogCiA8U0VDVElPTj4KKzxGSUxFPldlYktpdEhpdFRlc3RSZXN1bHQ8L0ZJTEU+CitX
ZWJLaXRIaXRUZXN0UmVzdWx0CitXZWJLaXRIaXRUZXN0UmVzdWx0Q29udGV4dAord2Via2l0X2hp
dF90ZXN0X3Jlc3VsdF9nZXRfY29udGV4dAord2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0
X2lzX2xpbmsKK3dlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19pbWFnZQord2Via2l0
X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX21lZGlhCit3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0
X2dldF9saW5rX3VyaQord2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9nZXRfbGlua190aXRsZQord2Vi
a2l0X2hpdF90ZXN0X3Jlc3VsdF9nZXRfbGlua19sYWJlbAord2Via2l0X2hpdF90ZXN0X3Jlc3Vs
dF9nZXRfaW1hZ2VfdXJpCit3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2dldF9tZWRpYV91cmkKKwor
PFNVQlNFQ1RJT04gU3RhbmRhcmQ+CitXZWJLaXRIaXRUZXN0UmVzdWx0Q2xhc3MKK1dFQktJVF9U
WVBFX0hJVF9URVNUX1JFU1VMVAorV0VCS0lUX0hJVF9URVNUX1JFU1VMVAorV0VCS0lUX0lTX0hJ
VF9URVNUX1JFU1VMVAorV0VCS0lUX0hJVF9URVNUX1JFU1VMVF9DTEFTUworV0VCS0lUX0lTX0hJ
VF9URVNUX1JFU1VMVF9DTEFTUworV0VCS0lUX0hJVF9URVNUX1JFU1VMVF9HRVRfQ0xBU1MKKwor
PFNVQlNFQ1RJT04gUHJpdmF0ZT4KK1dlYktpdEhpdFRlc3RSZXN1bHRQcml2YXRlCit3ZWJraXRf
aGl0X3Rlc3RfcmVzdWx0X2dldF90eXBlCis8L1NFQ1RJT04+CisKKzxTRUNUSU9OPgogPEZJTEU+
V2ViS2l0RXJyb3I8L0ZJTEU+CiBXRUJLSVRfTkVUV09SS19FUlJPUgogV0VCS0lUX1BMVUdJTl9F
UlJPUgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMv
VGVzdFdlYktpdFdlYlZpZXcuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
dGVzdHMvVGVzdFdlYktpdFdlYlZpZXcuY3BwCmluZGV4IDNkNTllZTkuLjQ3ZGE5OGUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRX
ZWJWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9U
ZXN0V2ViS2l0V2ViVmlldy5jcHAKQEAgLTI2NywxNSArMjY3LDI3IEBAIHB1YmxpYzoKICAgICAg
ICAgcmV0dXJuIFRSVUU7CiAgICAgfQogCisgICAgc3RhdGljIHZvaWQgbW91c2VUYXJnZXRDaGFu
Z2VkKFdlYktpdFdlYlZpZXcqLCBXZWJLaXRIaXRUZXN0UmVzdWx0KiBoaXRUZXN0UmVzdWx0LCBn
dWludCBtb2RpZmllcnMsIFVJQ2xpZW50VGVzdCogdGVzdCkKKyAgICB7CisgICAgICAgIGdfYXNz
ZXJ0KFdFQktJVF9JU19ISVRfVEVTVF9SRVNVTFQoaGl0VGVzdFJlc3VsdCkpOworICAgICAgICB0
ZXN0LT5hc3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdfT0JKRUNUKGhpdFRl
c3RSZXN1bHQpKTsKKworICAgICAgICB0ZXN0LT5tX21vdXNlVGFyZ2V0SGl0VGVzdFJlc3VsdCA9
IGhpdFRlc3RSZXN1bHQ7CisgICAgICAgIHRlc3QtPm1fbW91c2VUYXJnZXRNb2RpZmllcnMgPSBt
b2RpZmllcnM7CisgICAgICAgIGdfbWFpbl9sb29wX3F1aXQodGVzdC0+bV9tYWluTG9vcCk7Cisg
ICAgfQorCiAgICAgVUlDbGllbnRUZXN0KCkKICAgICAgICAgOiBtX3NjcmlwdFR5cGUoQWxlcnQp
CiAgICAgICAgICwgbV9zY3JpcHREaWFsb2dDb25maXJtZWQodHJ1ZSkKKyAgICAgICAgLCBtX21v
dXNlVGFyZ2V0TW9kaWZpZXJzKDApCiAgICAgewogICAgICAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0
X2phdmFzY3JpcHRfY2FuX29wZW5fd2luZG93c19hdXRvbWF0aWNhbGx5KHdlYmtpdF93ZWJfdmll
d19nZXRfc2V0dGluZ3MobV93ZWJWaWV3KSwgVFJVRSk7CiAgICAgICAgIGdfc2lnbmFsX2Nvbm5l
Y3QobV93ZWJWaWV3LCAiY3JlYXRlIiwgR19DQUxMQkFDSyh2aWV3Q3JlYXRlKSwgdGhpcyk7CiAg
ICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV93ZWJWaWV3LCAic2NyaXB0LWFsZXJ0IiwgR19DQUxM
QkFDSyhzY3JpcHRBbGVydCksIHRoaXMpOwogICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG1fd2Vi
VmlldywgInNjcmlwdC1jb25maXJtIiwgR19DQUxMQkFDSyhzY3JpcHRDb25maXJtKSwgdGhpcyk7
CiAgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV93ZWJWaWV3LCAic2NyaXB0LXByb21wdCIsIEdf
Q0FMTEJBQ0soc2NyaXB0UHJvbXB0KSwgdGhpcyk7CisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3Qo
bV93ZWJWaWV3LCAibW91c2UtdGFyZ2V0LWNoYW5nZWQiLCBHX0NBTExCQUNLKG1vdXNlVGFyZ2V0
Q2hhbmdlZCksIHRoaXMpOwogICAgIH0KIAogICAgIH5VSUNsaWVudFRlc3QoKQpAQCAtMjkzLDEx
ICszMDUsMjAgQEAgcHVibGljOgogICAgICAgICBtX3dpbmRvd1Byb3BlcnRpZXMgPSB3aW5kb3dQ
cm9wZXJ0aWVzOwogICAgIH0KIAorICAgIFdlYktpdEhpdFRlc3RSZXN1bHQqIG1vdmVNb3VzZUFu
ZFdhaXRVbnRpbE1vdXNlVGFyZ2V0Q2hhbmdlZChpbnQgeCwgaW50IHksIHVuc2lnbmVkIGludCBt
b3VzZU1vZGlmaWVycyA9IDApCisgICAgeworICAgICAgICBtb3VzZU1vdmVUbyh4LCB5LCBtb3Vz
ZU1vZGlmaWVycyk7CisgICAgICAgIGdfbWFpbl9sb29wX3J1bihtX21haW5Mb29wKTsKKyAgICAg
ICAgcmV0dXJuIG1fbW91c2VUYXJnZXRIaXRUZXN0UmVzdWx0LmdldCgpOworICAgIH0KKwogICAg
IFZlY3RvcjxXZWJWaWV3RXZlbnRzPiBtX3dlYlZpZXdFdmVudHM7CiAgICAgU2NyaXB0VHlwZSBt
X3NjcmlwdFR5cGU7CiAgICAgYm9vbCBtX3NjcmlwdERpYWxvZ0NvbmZpcm1lZDsKICAgICBXaW5k
b3dQcm9wZXJ0aWVzIG1fd2luZG93UHJvcGVydGllczsKICAgICBIYXNoU2V0PFdURjo6U3RyaW5n
PiBtX3dpbmRvd1Byb3BlcnRpZXNDaGFuZ2VkOworICAgIEdSZWZQdHI8V2ViS2l0SGl0VGVzdFJl
c3VsdD4gbV9tb3VzZVRhcmdldEhpdFRlc3RSZXN1bHQ7CisgICAgdW5zaWduZWQgaW50IG1fbW91
c2VUYXJnZXRNb2RpZmllcnM7CiB9OwogCiBzdGF0aWMgdm9pZCB0ZXN0V2ViVmlld0NyZWF0ZVJl
YWR5Q2xvc2UoVUlDbGllbnRUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQpAQCAtMzYxLDYgKzM4
Miw2NiBAQCBzdGF0aWMgdm9pZCB0ZXN0V2ViVmlld1dpbmRvd1Byb3BlcnRpZXMoVUlDbGllbnRU
ZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQogICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMl0s
ID09LCBVSUNsaWVudFRlc3Q6OkNsb3NlKTsKIH0KIAorc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdN
b3VzZVRhcmdldChVSUNsaWVudFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgdGVz
dC0+c2hvd0luV2luZG93QW5kV2FpdFVudGlsTWFwcGVkKCk7CisKKyAgICBjb25zdCBjaGFyKiBs
aW5rc0hvdmVyZWRIVE1MID0KKyAgICAgICAgIjxodG1sPjxib2R5PiIKKyAgICAgICAgIiA8YSBz
dHlsZT0ncG9zaXRpb246YWJzb2x1dGU7IGxlZnQ6MTsgdG9wOjEnIGhyZWY9J2h0dHA6Ly93d3cu
d2Via2l0Z3RrLm9yZycgdGl0bGU9J1dlYktpdEdUSysgVGl0bGUnPldlYktpdEdUSysgV2Vic2l0
ZTwvYT4iCisgICAgICAgICIgPGltZyBzdHlsZT0ncG9zaXRpb246YWJzb2x1dGU7IGxlZnQ6MTsg
dG9wOjEwJyBzcmM9JzB4ZGVhZGJlZWYnIHdpZHRoPTUgaGVpZ2h0PTU+PC9pbWc+IgorICAgICAg
ICAiIDxhIHN0eWxlPSdwb3NpdGlvbjphYnNvbHV0ZTsgbGVmdDoxOyB0b3A6MjAnIGhyZWY9J2h0
dHA6Ly93d3cud2Via2l0Z3RrLm9yZy9sb2dvJyB0aXRsZT0nV2ViS2l0R1RLKyBMb2dvJz48aW1n
IHNyYz0nMHhkZWFkYmVlZicgd2lkdGg9NSBoZWlnaHQ9NT48L2ltZz48L2E+IgorICAgICAgICAi
IDx2aWRlbyBzdHlsZT0ncG9zaXRpb246YWJzb2x1dGU7IGxlZnQ6MTsgdG9wOjMwJyB3aWR0aD0x
MCBoZWlnaHQ9MTAgY29udHJvbHM9J2NvbnRyb2xzJz48c291cmNlIHNyYz0nbW92aWUub2dnJyB0
eXBlPSd2aWRlby9vZ2cnIC8+PC92aWRlbz4iCisgICAgICAgICI8L2JvZHk+PC9odG1sPiI7CisK
KyAgICB0ZXN0LT5sb2FkSHRtbChsaW5rc0hvdmVyZWRIVE1MLCAiZmlsZTovLy8iKTsKKyAgICB0
ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKworICAgIC8vIE1vdmUgb3ZlciBsaW5rLgor
ICAgIFdlYktpdEhpdFRlc3RSZXN1bHQqIGhpdFRlc3RSZXN1bHQgPSB0ZXN0LT5tb3ZlTW91c2VB
bmRXYWl0VW50aWxNb3VzZVRhcmdldENoYW5nZWQoMSwgMSk7CisgICAgZ19hc3NlcnQod2Via2l0
X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX2xpbmsoaGl0VGVzdFJlc3VsdCkpOworICAgIGdf
YXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfaW1hZ2UoaGl0VGVzdFJl
c3VsdCkpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNf
bWVkaWEoaGl0VGVzdFJlc3VsdCkpOworICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfaGl0X3Rl
c3RfcmVzdWx0X2dldF9saW5rX3VyaShoaXRUZXN0UmVzdWx0KSwgPT0sICJodHRwOi8vd3d3Lndl
YmtpdGd0ay5vcmcvIik7CisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9oaXRfdGVzdF9yZXN1
bHRfZ2V0X2xpbmtfdGl0bGUoaGl0VGVzdFJlc3VsdCksID09LCAiV2ViS2l0R1RLKyBUaXRsZSIp
OworICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2dldF9saW5rX2xh
YmVsKGhpdFRlc3RSZXN1bHQpLCA9PSwgIldlYktpdEdUSysgV2Vic2l0ZSIpOworICAgIGdfYXNz
ZXJ0KCF0ZXN0LT5tX21vdXNlVGFyZ2V0TW9kaWZpZXJzKTsKKworICAgIC8vIE1vdmUgb3V0IG9m
IHRoZSBsaW5rLgorICAgIGhpdFRlc3RSZXN1bHQgPSB0ZXN0LT5tb3ZlTW91c2VBbmRXYWl0VW50
aWxNb3VzZVRhcmdldENoYW5nZWQoMCwgMCk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRfdGVz
dF9yZXN1bHRfY29udGV4dF9pc19saW5rKGhpdFRlc3RSZXN1bHQpKTsKKyAgICBnX2Fzc2VydCgh
d2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX2ltYWdlKGhpdFRlc3RSZXN1bHQpKTsK
KyAgICBnX2Fzc2VydCghd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX21lZGlhKGhp
dFRlc3RSZXN1bHQpKTsKKyAgICBnX2Fzc2VydCghdGVzdC0+bV9tb3VzZVRhcmdldE1vZGlmaWVy
cyk7CisKKyAgICAvLyBNb3ZlIG92ZXIgaW1hZ2Ugd2l0aCBHREtfQ09OVFJPTF9NQVNLLgorICAg
IGhpdFRlc3RSZXN1bHQgPSB0ZXN0LT5tb3ZlTW91c2VBbmRXYWl0VW50aWxNb3VzZVRhcmdldENo
YW5nZWQoMSwgMTAsIEdES19DT05UUk9MX01BU0spOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0
X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfbGluayhoaXRUZXN0UmVzdWx0KSk7CisgICAgZ19hc3Nl
cnQod2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX2ltYWdlKGhpdFRlc3RSZXN1bHQp
KTsKKyAgICBnX2Fzc2VydCghd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX21lZGlh
KGhpdFRlc3RSZXN1bHQpKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X2hpdF90ZXN0X3Jl
c3VsdF9nZXRfaW1hZ2VfdXJpKGhpdFRlc3RSZXN1bHQpLCA9PSwgImZpbGU6Ly8vMHhkZWFkYmVl
ZiIpOworICAgIGdfYXNzZXJ0KHRlc3QtPm1fbW91c2VUYXJnZXRNb2RpZmllcnMgJiBHREtfQ09O
VFJPTF9NQVNLKTsKKworICAgIC8vIE1vdmUgb3ZlciBpbWFnZSBsaW5rLgorICAgIGhpdFRlc3RS
ZXN1bHQgPSB0ZXN0LT5tb3ZlTW91c2VBbmRXYWl0VW50aWxNb3VzZVRhcmdldENoYW5nZWQoMSwg
MjApOworICAgIGdfYXNzZXJ0KHdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19saW5r
KGhpdFRlc3RSZXN1bHQpKTsKKyAgICBnX2Fzc2VydCh3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2Nv
bnRleHRfaXNfaW1hZ2UoaGl0VGVzdFJlc3VsdCkpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0
X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfbWVkaWEoaGl0VGVzdFJlc3VsdCkpOworICAgIGdfYXNz
ZXJ0X2NtcHN0cih3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2dldF9saW5rX3VyaShoaXRUZXN0UmVz
dWx0KSwgPT0sICJodHRwOi8vd3d3LndlYmtpdGd0ay5vcmcvbG9nbyIpOworICAgIGdfYXNzZXJ0
X2NtcHN0cih3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2dldF9pbWFnZV91cmkoaGl0VGVzdFJlc3Vs
dCksID09LCAiZmlsZTovLy8weGRlYWRiZWVmIik7CisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtp
dF9oaXRfdGVzdF9yZXN1bHRfZ2V0X2xpbmtfdGl0bGUoaGl0VGVzdFJlc3VsdCksID09LCAiV2Vi
S2l0R1RLKyBMb2dvIik7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfZ2V0
X2xpbmtfbGFiZWwoaGl0VGVzdFJlc3VsdCkpOworICAgIGdfYXNzZXJ0KCF0ZXN0LT5tX21vdXNl
VGFyZ2V0TW9kaWZpZXJzKTsKKworICAgIC8vIE1vdmUgb3ZlciBtZWRpYS4KKyAgICBoaXRUZXN0
UmVzdWx0ID0gdGVzdC0+bW92ZU1vdXNlQW5kV2FpdFVudGlsTW91c2VUYXJnZXRDaGFuZ2VkKDEs
IDMwKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX2xp
bmsoaGl0VGVzdFJlc3VsdCkpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0
X2NvbnRleHRfaXNfaW1hZ2UoaGl0VGVzdFJlc3VsdCkpOworICAgIGdfYXNzZXJ0KHdlYmtpdF9o
aXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19tZWRpYShoaXRUZXN0UmVzdWx0KSk7CisgICAgZ19h
c3NlcnRfY21wc3RyKHdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfZ2V0X21lZGlhX3VyaShoaXRUZXN0
UmVzdWx0KSwgPT0sICJmaWxlOi8vL21vdmllLm9nZyIpOworICAgIGdfYXNzZXJ0KCF0ZXN0LT5t
X21vdXNlVGFyZ2V0TW9kaWZpZXJzKTsKK30KKwogc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdab29t
TGV2ZWwoV2ViVmlld1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCiB7CiAgICAgZ19hc3NlcnRf
Y21wZmxvYXQod2Via2l0X3dlYl92aWV3X2dldF96b29tX2xldmVsKHRlc3QtPm1fd2ViVmlldyks
ID09LCAxKTsKQEAgLTM3Nyw2ICs0NTgsNyBAQCB2b2lkIGJlZm9yZUFsbCgpCiAgICAgVUlDbGll
bnRUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAiY3JlYXRlLXJlYWR5LWNsb3NlIiwgdGVzdFdl
YlZpZXdDcmVhdGVSZWFkeUNsb3NlKTsKICAgICBVSUNsaWVudFRlc3Q6OmFkZCgiV2ViS2l0V2Vi
VmlldyIsICJqYXZhc2NyaXB0LWRpYWxvZ3MiLCB0ZXN0V2ViVmlld0phdmFTY3JpcHREaWFsb2dz
KTsKICAgICBVSUNsaWVudFRlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJ3aW5kb3ctcHJvcGVy
dGllcyIsIHRlc3RXZWJWaWV3V2luZG93UHJvcGVydGllcyk7CisgICAgVUlDbGllbnRUZXN0Ojph
ZGQoIldlYktpdFdlYlZpZXciLCAibW91c2UtdGFyZ2V0IiwgdGVzdFdlYlZpZXdNb3VzZVRhcmdl
dCk7CiAgICAgV2ViVmlld1Rlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJ6b29tLWxldmVsIiwg
dGVzdFdlYlZpZXdab29tTGV2ZWwpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJWaWV3VGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJWaWV3VGVzdC5jcHAKaW5kZXggMjA4OTVlYy4uMDBk
M2IzZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMv
V2ViVmlld1Rlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rl
c3RzL1dlYlZpZXdUZXN0LmNwcApAQCAtMjEsMTUgKzIxLDIwIEBACiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW5jbHVkZSAiV2ViVmlld1Rlc3QuaCIKIAorI2luY2x1ZGUgPFdlYkNvcmUvR093blB0
ckd0ay5oPgorCiBXZWJWaWV3VGVzdDo6V2ViVmlld1Rlc3QoKQogICAgIDogbV93ZWJWaWV3KFdF
QktJVF9XRUJfVklFVyhnX29iamVjdF9yZWZfc2luayh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpKSkK
ICAgICAsIG1fbWFpbkxvb3AoZ19tYWluX2xvb3BfbmV3KDAsIFRSVUUpKQorICAgICwgbV9wYXJl
bnRXaW5kb3coMCkKIHsKICAgICBhc3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVz
KEdfT0JKRUNUKG1fd2ViVmlldykpOwogfQogCiBXZWJWaWV3VGVzdDo6fldlYlZpZXdUZXN0KCkK
IHsKKyAgICBpZiAobV9wYXJlbnRXaW5kb3cpCisgICAgICAgIGd0a193aWRnZXRfZGVzdHJveSht
X3BhcmVudFdpbmRvdyk7CiAgICAgZ19vYmplY3RfdW5yZWYobV93ZWJWaWV3KTsKICAgICBnX21h
aW5fbG9vcF91bnJlZihtX21haW5Mb29wKTsKIH0KQEAgLTEzMCwzICsxMzUsNDggQEAgdm9pZCBX
ZWJWaWV3VGVzdDo6d2FpdFVudGlsTG9hZEZpbmlzaGVkKCkKICAgICBnX3NpZ25hbF9jb25uZWN0
KG1fd2ViVmlldywgImxvYWQtY2hhbmdlZCIsIEdfQ0FMTEJBQ0sobG9hZENoYW5nZWQpLCB0aGlz
KTsKICAgICBnX21haW5fbG9vcF9ydW4obV9tYWluTG9vcCk7CiB9CisKK3N0YXRpYyBnYm9vbGVh
biBwYXJlbnRXaW5kb3dNYXBwZWQoR3RrV2lkZ2V0KiB3aWRnZXQsIEdka0V2ZW50KiwgV2ViVmll
d1Rlc3QqIHRlc3QpCit7CisgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9ieV9mdW5j
KHdpZGdldCwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocGFyZW50V2luZG93TWFwcGVkKSwgdGVz
dCk7CisgICAgZ19tYWluX2xvb3BfcXVpdCh0ZXN0LT5tX21haW5Mb29wKTsKKworICAgIHJldHVy
biBGQUxTRTsKK30KKwordm9pZCBXZWJWaWV3VGVzdDo6c2hvd0luV2luZG93QW5kV2FpdFVudGls
TWFwcGVkKCkKK3sKKyAgICBnX2Fzc2VydCghbV9wYXJlbnRXaW5kb3cpOworICAgIG1fcGFyZW50
V2luZG93ID0gZ3RrX3dpbmRvd19uZXcoR1RLX1dJTkRPV19QT1BVUCk7CisgICAgZ3RrX2NvbnRh
aW5lcl9hZGQoR1RLX0NPTlRBSU5FUihtX3BhcmVudFdpbmRvdyksIEdUS19XSURHRVQobV93ZWJW
aWV3KSk7CisgICAgZ3RrX3dpZGdldF9zaG93KEdUS19XSURHRVQobV93ZWJWaWV3KSk7CisKKyAg
ICBnX3NpZ25hbF9jb25uZWN0KG1fcGFyZW50V2luZG93LCAibWFwLWV2ZW50IiwgR19DQUxMQkFD
SyhwYXJlbnRXaW5kb3dNYXBwZWQpLCB0aGlzKTsKKyAgICBndGtfd2lkZ2V0X3Nob3cobV9wYXJl
bnRXaW5kb3cpOworICAgIGdfbWFpbl9sb29wX3J1bihtX21haW5Mb29wKTsKK30KKwordm9pZCBX
ZWJWaWV3VGVzdDo6bW91c2VNb3ZlVG8oaW50IHgsIGludCB5LCB1bnNpZ25lZCBpbnQgbW91c2VN
b2RpZmllcnMpCit7CisgICAgZ19hc3NlcnQobV9wYXJlbnRXaW5kb3cpOworICAgIEd0a1dpZGdl
dCogdmlld1dpZGdldCA9IEdUS19XSURHRVQobV93ZWJWaWV3KTsKKyAgICBnX2Fzc2VydChndGtf
d2lkZ2V0X2dldF9yZWFsaXplZCh2aWV3V2lkZ2V0KSk7CisKKyAgICBHT3duUHRyPEdka0V2ZW50
PiBldmVudChnZGtfZXZlbnRfbmV3KEdES19NT1RJT05fTk9USUZZKSk7CisgICAgZXZlbnQtPm1v
dGlvbi54ID0geDsKKyAgICBldmVudC0+bW90aW9uLnkgPSB5OworCisgICAgZXZlbnQtPm1vdGlv
bi50aW1lID0gR0RLX0NVUlJFTlRfVElNRTsKKyAgICBldmVudC0+bW90aW9uLndpbmRvdyA9IGd0
a193aWRnZXRfZ2V0X3dpbmRvdyh2aWV3V2lkZ2V0KTsKKyAgICBnX29iamVjdF9yZWYoZXZlbnQt
Pm1vdGlvbi53aW5kb3cpOworICAgIGV2ZW50LT5idXR0b24uZGV2aWNlID0gZ2RrX2RldmljZV9t
YW5hZ2VyX2dldF9jbGllbnRfcG9pbnRlcihnZGtfZGlzcGxheV9nZXRfZGV2aWNlX21hbmFnZXIo
Z3RrX3dpZGdldF9nZXRfZGlzcGxheSh2aWV3V2lkZ2V0KSkpOworICAgIGV2ZW50LT5tb3Rpb24u
c3RhdGUgPSBtb3VzZU1vZGlmaWVyczsKKyAgICBldmVudC0+bW90aW9uLmF4ZXMgPSAwOworCisg
ICAgaW50IHhSb290LCB5Um9vdDsKKyAgICBnZGtfd2luZG93X2dldF9yb290X2Nvb3JkcyhndGtf
d2lkZ2V0X2dldF93aW5kb3codmlld1dpZGdldCksIHgsIHksICZ4Um9vdCwgJnlSb290KTsKKyAg
ICBldmVudC0+bW90aW9uLnhfcm9vdCA9IHhSb290OworICAgIGV2ZW50LT5tb3Rpb24ueV9yb290
ID0geVJvb3Q7CisgICAgZ3RrX21haW5fZG9fZXZlbnQoZXZlbnQuZ2V0KCkpOworfQorCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJWaWV3VGVz
dC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvV2ViVmlld1Rlc3Qu
aAppbmRleCA0YWQ2ZmE2Li45NWE1NjljIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJWaWV3VGVzdC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1dlYlZpZXdUZXN0LmgKQEAgLTQyLDEwICs0MiwxNCBAQCBw
dWJsaWM6CiAKICAgICB2b2lkIHdhaXQoZG91YmxlIHNlY29uZHMpOwogICAgIHZvaWQgd2FpdFVu
dGlsTG9hZEZpbmlzaGVkKCk7CisgICAgdm9pZCBzaG93SW5XaW5kb3dBbmRXYWl0VW50aWxNYXBw
ZWQoKTsKKworICAgIHZvaWQgbW91c2VNb3ZlVG8oaW50IHgsIGludCB5LCB1bnNpZ25lZCBpbnQg
bW91c2VNb2RpZmllcnMgPSAwKTsKIAogICAgIFdlYktpdFdlYlZpZXcqIG1fd2ViVmlldzsKICAg
ICBHTWFpbkxvb3AqIG1fbWFpbkxvb3A7CiAgICAgQ1N0cmluZyBtX2FjdGl2ZVVSSTsKKyAgICBH
dGtXaWRnZXQqIG1fcGFyZW50V2luZG93OwogfTsKIAogI2VuZGlmIC8vIFdlYlZpZXdUZXN0X2gK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdDIuaCBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdDIuaAppbmRleCA3OGU1M2Q1
Li4zYWY5OTA0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay93
ZWJraXQyLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvd2Via2l0Mi5o
CkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRFZGl0aW5nQ29tbWFu
ZHMuaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdEVudW1UeXBlcy5oPgogI2luY2x1ZGUgPHdl
YmtpdDIvV2ViS2l0RXJyb3IuaD4KKyNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdEhpdFRlc3RSZXN1
bHQuaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdFNldHRpbmdzLmg+CiAjaW5jbHVkZSA8d2Vi
a2l0Mi9XZWJLaXRVUklSZXF1ZXN0Lmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRVUklSZXNw
b25zZS5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvd2Vi
a2l0Mm1hcnNoYWwubGlzdCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtp
dDJtYXJzaGFsLmxpc3QKaW5kZXggNTkxOGQwOS4uNzdkMjY5YSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvd2Via2l0Mm1hcnNoYWwubGlzdAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay93ZWJraXQybWFyc2hhbC5saXN0CkBAIC0xMCw1
ICsxMCw2IEBAIEJPT0xFQU46VUlOVDY0CiBCT09MRUFOOlZPSUQKIE9CSkVDVDpWT0lECiBWT0lE
OkVOVU0KK1ZPSUQ6T0JKRUNULFVJTlQKIFZPSUQ6T0JKRUNULFBPSU5URVIKIApkaWZmIC0tZ2l0
IGEvU291cmNlL2F1dG90b29scy9zeW1ib2xzLmZpbHRlciBiL1NvdXJjZS9hdXRvdG9vbHMvc3lt
Ym9scy5maWx0ZXIKaW5kZXggZjBjZGMxYS4uNWU5ZWIzNCAxMDA2NDQKLS0tIGEvU291cmNlL2F1
dG90b29scy9zeW1ib2xzLmZpbHRlcgorKysgYi9Tb3VyY2UvYXV0b3Rvb2xzL3N5bWJvbHMuZmls
dGVyCkBAIC05LDYgKzksNyBAQCBfWk4zV1RGMTZmYXN0WmVyb2VkTWFsbG9jRW07CiBfWk4zV1RG
MjBmYXN0TWFsbG9jU3RhdGlzdGljc0V2OwogX1pOM1dURjhmYXN0RnJlZUVQdjsKIF9aTjNXVEYx
M2ZyZWVPd25lZEdQdHJJN19HRXJyb3JFRXZQVF87CitfWk4zV1RGMTNmcmVlT3duZWRHUHRySTlf
R2RrRXZlbnRFRXZQVF87CiBfWk4zV1RGOEludGVybmFsMjFmYXN0TWFsbG9jTWF0Y2hGYWlsZWRF
UHY7CiBfWk4zV1RGM01ENThhZGRCeXRlcyo7CiBfWk4zV1RGM01ENThjaGVja3N1bSo7Cg==
</data>
<flag name="review"
          id="128069"
          type_id="1"
          status="+"
          setter="mrobinson"
    />
          </attachment>
      

    </bug>

</bugzilla>