<?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>69753</bug_id>
          
          <creation_ts>2011-10-10 04:14:39 -0700</creation_ts>
          <short_desc>[GTK] Initial UI client implementation for WebKit2 GTK +API</short_desc>
          <delta_ts>2011-12-13 05:24:13 -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>71362</blocked>
    
    <blocked>71447</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>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>480910</commentid>
    <comment_count>0</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-10-10 04:14:39 -0700</bug_when>
    <thetext>Implement at least createNewPage, showPage and closePage callbacks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>480914</commentid>
    <comment_count>1</comment_count>
      <attachid>110348</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-10-10 04:18:41 -0700</bug_when>
    <thetext>Created attachment 110348
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>480915</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-10 04:20:25 -0700</bug_when>
    <thetext>Attachment 110348 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebKit2/ChangeLog&apos;, u&apos;Source/WebKit...&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/WebKitWebView.cpp:247:  Use 0 instead of NULL.  [readability/null] [5]
Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:266:  Use 0 instead of NULL.  [readability/null] [5]
Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:284:  Use 0 instead of NULL.  [readability/null] [5]
Total errors found: 3 in 5 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>480919</commentid>
    <comment_count>3</comment_count>
      <attachid>110349</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-10-10 04:34:20 -0700</bug_when>
    <thetext>Created attachment 110349
Patch updated to fix coding style issues</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>481023</commentid>
    <comment_count>4</comment_count>
      <attachid>110349</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-10-10 11:20:07 -0700</bug_when>
    <thetext>Comment on attachment 110349
Patch updated to fix coding style issues

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

I&apos;d prefer us to separate these into a Client class. Is there a reason it&apos;s impossible? I&apos;m not opposed to having these three signals on the WebView, but they can be fired via an exposed private API from the WebView if you don&apos;t want to use g_signal_emit_by_name.

I believe that the ::ready signal should be called ::show to match the underlying API.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:66
&gt; +static GtkWidget* webkitWebViewCreate(WebKitWebView*)
&gt; +{
&gt; +    return 0;
&gt; +}

This seems to be dead code?

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:76
&gt; +static WKPageRef createNewPage(WKPageRef page, WKURLRequestRef request, WKDictionaryRef features, WKEventModifiers modifiers, WKEventMouseButton button, const void* clientInfo)
&gt; +{
&gt; +    WebKitWebView* newWebView;
&gt; +    g_signal_emit(WEBKIT_WEB_VIEW(clientInfo), signals[CREATE], 0, &amp;newWebView);
&gt; +    if (!newWebView)
&gt; +        return 0;
&gt; +
&gt; +    return static_cast&lt;WKPageRef&gt;(WKRetain(toAPI(webkitWebViewBaseGetPage(WEBKIT_WEB_VIEW_BASE(newWebView)))));
&gt; +}

It&apos;s important to send all those arguments along. A hash table of features is probably fine here, but if you like you can create a WebKitWebViewFeatures object ala the WK1 API. This is one thing that the WK1 port didn&apos;t do quite right.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:86
&gt; +static void showPage(WKPageRef page, const void *clientInfo)
&gt; +{
&gt; +    g_signal_emit(WEBKIT_WEB_VIEW(clientInfo), signals[READY], 0, NULL);
&gt; +}
&gt; +
&gt; +static void closePage(WKPageRef page, const void *clientInfo)
&gt; +{
&gt; +    g_signal_emit(WEBKIT_WEB_VIEW(clientInfo), signals[CLOSE], 0, NULL);
&gt; +}

The asterisks on clientInfo are in the wrong place.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:108
&gt; +        webView,/* clientInfo */
&gt; +        0,      /* createNewPage_deprecatedForUseWithV0 */
&gt; +        showPage,
&gt; +        closePage,
&gt; +        0,      /* takeFocus */
&gt; +        0,      /* focus */
&gt; +        0,      /* unfocus */
&gt; +        0,      /* runJavaScriptAlert */
&gt; +        0,      /* runJavaScriptConfirm */
&gt; +        0,      /* runJavaScriptPrompt */
&gt; +        0,      /* setStatusText */
&gt; +        0,      /* mouseDidMoveOverElement_deprecatedForUseWithV0 */
&gt; +        0,      /* missingPluginButtonClicked */
&gt; +        0,      /* didNotHandleKeyEvent */
&gt; +        0,      /* didNotHandleWheelEvent */
&gt; +        0,      /* toolbarsAreVisible */
&gt; +        0,      /* setToolbarsAreVisible */

You should use C++ style comments here and they should be one space away from the 0,.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:136
&gt; +    WebPageProxy* page = webkitWebViewBaseGetPage(WEBKIT_WEB_VIEW_BASE(webView));
&gt; +    WKPageSetPageUIClient(toAPI(page), &amp;uiClient);

This can be one line.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:148
&gt;      priv-&gt;loaderClient = adoptGRef(WEBKIT_WEB_LOADER_CLIENT(g_object_new(WEBKIT_TYPE_WEB_LOADER_CLIENT, &quot;web-view&quot;, webView, NULL)));
&gt; +
&gt; +    webkitWebViewUIClientInit(webView);

Again, I think a WebKitUIClient would be a lot cleaner here.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:229
&gt; +     * Emitted when the creation of a new view is requested.

We should probably say #WebKitWebView here instead of &quot;view&quot; as it&apos;s less ambiguous.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:239
&gt; +     * The signal handlers should not try to deal with the reference count for
&gt; +     * the new #WebKitWebView. The widget to which the widget is added will
&gt; +     * handle that.
&gt; +     *

Should the user wait until ::ready to add the widget to a parent widget? If so you should probably mention that explicitly.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:243
&gt; +    signals[CREATE] =
&gt; +        g_signal_new(&quot;create&quot;,

This can be one line.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:259
&gt; +     * Emitted after #WebKitWebView::create on the newly created #WebKitWebView
&gt; +     * when it should be displayed to the user. When this signal is emitted
&gt; +     * all the information about how the window should look, including
&gt; +     * size, position, whether the location, status and scroll bars
&gt; +     * should be displayed, is already set.

scroll bars -&gt; scrollbars

I&apos;m not sure I understand exactly how you mean the information is already set. All that information should be passed as signal arguments to ::create.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:262
&gt; +    signals[READY] =
&gt; +        g_signal_new(&quot;ready&quot;,

This can be one line.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:277
&gt; +     * delete the web view, if necessary.

web view -&gt; #WebKitWebView.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:280
&gt; +    signals[CLOSE] =
&gt; +        g_signal_new(&quot;close&quot;,

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>481051</commentid>
    <comment_count>5</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-10-10 12:06:41 -0700</bug_when>
    <thetext>(In reply to comment #4)

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:243
&gt; &gt; +    signals[CREATE] =
&gt; &gt; +        g_signal_new(&quot;create&quot;,
&gt; 
&gt; This can be one line.

I&apos;m implementing the policy client now and I think I agree with you that this is better as two lines. Please disregard this comment!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>481473</commentid>
    <comment_count>6</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-10-11 00:09:48 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 110349 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=110349&amp;action=review
&gt; 
&gt; I&apos;d prefer us to separate these into a Client class. Is there a reason it&apos;s impossible? I&apos;m not opposed to having these three signals on the WebView, but they can be fired via an exposed private API from the WebView if you don&apos;t want to use g_signal_emit_by_name.

I think web view is actually the ui client, that&apos;s why I haven&apos;t used a separate client for this. I you want the ui client separated from the page, we should probably add a page class like Gustavo suggested. 

&gt; I believe that the ::ready signal should be called ::show to match the underlying API.

I find &quot;show&quot; very confusing.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:66
&gt; &gt; +static GtkWidget* webkitWebViewCreate(WebKitWebView*)
&gt; &gt; +{
&gt; &gt; +    return 0;
&gt; &gt; +}
&gt; 
&gt; This seems to be dead code?

No, it&apos;s the default implementation, it&apos;s only called when the signal is not handled.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:76
&gt; &gt; +static WKPageRef createNewPage(WKPageRef page, WKURLRequestRef request, WKDictionaryRef features, WKEventModifiers modifiers, WKEventMouseButton button, const void* clientInfo)
&gt; &gt; +{
&gt; &gt; +    WebKitWebView* newWebView;
&gt; &gt; +    g_signal_emit(WEBKIT_WEB_VIEW(clientInfo), signals[CREATE], 0, &amp;newWebView);
&gt; &gt; +    if (!newWebView)
&gt; &gt; +        return 0;
&gt; &gt; +
&gt; &gt; +    return static_cast&lt;WKPageRef&gt;(WKRetain(toAPI(webkitWebViewBaseGetPage(WEBKIT_WEB_VIEW_BASE(newWebView)))));
&gt; &gt; +}
&gt; 
&gt; It&apos;s important to send all those arguments along. A hash table of features is probably fine here, but if you like you can create a WebKitWebViewFeatures object ala the WK1 API. This is one thing that the WK1 port didn&apos;t do quite right.

I haven&apos;t added ViewFeatures in this patch on purpose, to keep it as small as possible, I though you were going to ask me to split it if I added the view features part.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:86
&gt; &gt; +static void showPage(WKPageRef page, const void *clientInfo)
&gt; &gt; +{
&gt; &gt; +    g_signal_emit(WEBKIT_WEB_VIEW(clientInfo), signals[READY], 0, NULL);
&gt; &gt; +}
&gt; &gt; +
&gt; &gt; +static void closePage(WKPageRef page, const void *clientInfo)
&gt; &gt; +{
&gt; &gt; +    g_signal_emit(WEBKIT_WEB_VIEW(clientInfo), signals[CLOSE], 0, NULL);
&gt; &gt; +}
&gt; 
&gt; The asterisks on clientInfo are in the wrong place.

Ok.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:108
&gt; &gt; +        webView,/* clientInfo */
&gt; &gt; +        0,      /* createNewPage_deprecatedForUseWithV0 */
&gt; &gt; +        showPage,
&gt; &gt; +        closePage,
&gt; &gt; +        0,      /* takeFocus */
&gt; &gt; +        0,      /* focus */
&gt; &gt; +        0,      /* unfocus */
&gt; &gt; +        0,      /* runJavaScriptAlert */
&gt; &gt; +        0,      /* runJavaScriptConfirm */
&gt; &gt; +        0,      /* runJavaScriptPrompt */
&gt; &gt; +        0,      /* setStatusText */
&gt; &gt; +        0,      /* mouseDidMoveOverElement_deprecatedForUseWithV0 */
&gt; &gt; +        0,      /* missingPluginButtonClicked */
&gt; &gt; +        0,      /* didNotHandleKeyEvent */
&gt; &gt; +        0,      /* didNotHandleWheelEvent */
&gt; &gt; +        0,      /* toolbarsAreVisible */
&gt; &gt; +        0,      /* setToolbarsAreVisible */
&gt; 
&gt; You should use C++ style comments here and they should be one space away from the 0,.

Didn&apos;t you ask me to line this up before?

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:136
&gt; &gt; +    WebPageProxy* page = webkitWebViewBaseGetPage(WEBKIT_WEB_VIEW_BASE(webView));
&gt; &gt; +    WKPageSetPageUIClient(toAPI(page), &amp;uiClient);
&gt; 
&gt; This can be one line.
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:148
&gt; &gt;      priv-&gt;loaderClient = adoptGRef(WEBKIT_WEB_LOADER_CLIENT(g_object_new(WEBKIT_TYPE_WEB_LOADER_CLIENT, &quot;web-view&quot;, webView, NULL)));
&gt; &gt; +
&gt; &gt; +    webkitWebViewUIClientInit(webView);
&gt; 
&gt; Again, I think a WebKitUIClient would be a lot cleaner here.
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:229
&gt; &gt; +     * Emitted when the creation of a new view is requested.
&gt; 
&gt; We should probably say #WebKitWebView here instead of &quot;view&quot; as it&apos;s less ambiguous.

Ok.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:239
&gt; &gt; +     * The signal handlers should not try to deal with the reference count for
&gt; &gt; +     * the new #WebKitWebView. The widget to which the widget is added will
&gt; &gt; +     * handle that.
&gt; &gt; +     *
&gt; 
&gt; Should the user wait until ::ready to add the widget to a parent widget? If so you should probably mention that explicitly.

No, you can add the view to a parent in the create handler.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:243
&gt; &gt; +    signals[CREATE] =
&gt; &gt; +        g_signal_new(&quot;create&quot;,
&gt; 
&gt; This can be one line.
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:259
&gt; &gt; +     * Emitted after #WebKitWebView::create on the newly created #WebKitWebView
&gt; &gt; +     * when it should be displayed to the user. When this signal is emitted
&gt; &gt; +     * all the information about how the window should look, including
&gt; &gt; +     * size, position, whether the location, status and scroll bars
&gt; &gt; +     * should be displayed, is already set.
&gt; 
&gt; scroll bars -&gt; scrollbars

Ok.

&gt; I&apos;m not sure I understand exactly how you mean the information is already set. All that information should be passed as signal arguments to ::create.
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:262
&gt; &gt; +    signals[READY] =
&gt; &gt; +        g_signal_new(&quot;ready&quot;,
&gt; 
&gt; This can be one line.
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:277
&gt; &gt; +     * delete the web view, if necessary.
&gt; 
&gt; web view -&gt; #WebKitWebView.

Ok.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:280
&gt; &gt; +    signals[CLOSE] =
&gt; &gt; +        g_signal_new(&quot;close&quot;,
&gt; 
&gt; Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>481475</commentid>
    <comment_count>7</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-10-11 00:23:16 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (In reply to comment #4)
&gt; &gt; (From update of attachment 110349 [details] [details])

&gt; I think web view is actually the ui client, that&apos;s why I haven&apos;t used a separate client for this. I you want the ui client separated from the page, we should probably add a page class like Gustavo suggested. 

The WebKitWebView is the actual widget, but the UIClient controls everything surrounding the WebView. I think it makes sense to split them into two things.  For instance, setMenuBarIsVisible has no relation to the WebView widget at all. There are some delegates that I associate with the widget itself such as focus and unfocus -- maybe we can consider having the UIClient just fire signals on the WebView.  What do you think?

Do you mind expanding a bit on how the existence of a page client would change things?

&gt; 
&gt; &gt; I believe that the ::ready signal should be called ::show to match the underlying API.
&gt; 
&gt; I find &quot;show&quot; very confusing.

Do you mind elaborating a bit on this?

&gt; &gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:66
&gt; &gt; &gt; +static GtkWidget* webkitWebViewCreate(WebKitWebView*)
&gt; &gt; &gt; +{
&gt; &gt; &gt; +    return 0;
&gt; &gt; &gt; +}
&gt; &gt; 
&gt; &gt; This seems to be dead code?
&gt; 
&gt; No, it&apos;s the default implementation, it&apos;s only called when the signal is not handled.

Ah, I see it now! Thanks.

&gt; &gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:108
&gt; &gt; &gt; +        webView,/* clientInfo */
&gt; &gt; &gt; +        0,      /* createNewPage_deprecatedForUseWithV0 */
&gt; &gt; &gt; +        showPage,
&gt; &gt; &gt; +        closePage,
&gt; &gt; &gt; +        0,      /* takeFocus */
&gt; &gt; &gt; +        0,      /* focus */
&gt; &gt; &gt; +        0,      /* unfocus */
&gt; &gt; &gt; +        0,      /* runJavaScriptAlert */
&gt; &gt; &gt; +        0,      /* runJavaScriptConfirm */
&gt; &gt; &gt; +        0,      /* runJavaScriptPrompt */
&gt; &gt; &gt; +        0,      /* setStatusText */
&gt; &gt; &gt; +        0,      /* mouseDidMoveOverElement_deprecatedForUseWithV0 */
&gt; &gt; &gt; +        0,      /* missingPluginButtonClicked */
&gt; &gt; &gt; +        0,      /* didNotHandleKeyEvent */
&gt; &gt; &gt; +        0,      /* didNotHandleWheelEvent */
&gt; &gt; &gt; +        0,      /* toolbarsAreVisible */
&gt; &gt; &gt; +        0,      /* setToolbarsAreVisible */
&gt; &gt; 
&gt; &gt; You should use C++ style comments here and they should be one space away from the 0,.
&gt; 
&gt; Didn&apos;t you ask me to line this up before?

If I did, I apologize. I noticed that the style bot was complaining about them recently.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>481488</commentid>
    <comment_count>8</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-10-11 00:44:13 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (In reply to comment #6)
&gt; &gt; (In reply to comment #4)
&gt; &gt; &gt; (From update of attachment 110349 [details] [details] [details])
&gt; 
&gt; &gt; I think web view is actually the ui client, that&apos;s why I haven&apos;t used a separate client for this. I you want the ui client separated from the page, we should probably add a page class like Gustavo suggested. 
&gt; 
&gt; The WebKitWebView is the actual widget, but the UIClient controls everything surrounding the WebView. I think it makes sense to split them into two things.  For instance, setMenuBarIsVisible has no relation to the WebView widget at all. There are some delegates that I associate with the widget itself such as focus and unfocus -- maybe we can consider having the UIClient just fire signals on the WebView.  What do you think?

If we are talking about internal code separation, it&apos;s fine with me, what I don&apos;t see is a WebKitWebUIClient object like the loader client or the policy client.

&gt; Do you mind expanding a bit on how the existence of a page client would change things?

The web view would be the UI client, while the page object would do the other things the view currently does.

&gt; &gt; 
&gt; &gt; &gt; I believe that the ::ready signal should be called ::show to match the underlying API.
&gt; &gt; 
&gt; &gt; I find &quot;show&quot; very confusing.
&gt; 
&gt; Do you mind elaborating a bit on this?

Show makes me think you have to show the view or something, while you don&apos;t have to. The first time I saw it I thought it was called everytime you have to show the view for some reason. But it&apos;s called only once, to notify that the new view is *ready*.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>481607</commentid>
    <comment_count>9</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-10-11 06:43:11 -0700</bug_when>
    <thetext>(In reply to comment #8)

&gt; &gt; The WebKitWebView is the actual widget, but the UIClient controls everything surrounding the WebView. I think it makes sense to split them into two things.  For instance, setMenuBarIsVisible has no relation to the WebView widget at all. There are some delegates that I associate with the widget itself such as focus and unfocus -- maybe we can consider having the UIClient just fire signals on the WebView.  What do you think?
&gt; 
&gt; If we are talking about internal code separation, it&apos;s fine with me, what I don&apos;t see is a WebKitWebUIClient object like the loader client or the policy client.

Still, it seems odd for the widget to have signals that are about controlling and getting information about its parent window.  I think the more conservative aproach is to make UIClient and then later go back and move signals to the WebView if they make sense there. Another approach is to just move some signals there now. The three that you have make sense as WebView signals for instance. 

&gt; &gt; Do you mind expanding a bit on how the existence of a page client would change things?
&gt; The web view would be the UI client, while the page object would do the other things the view currently does.

I think of the WebView as the widget that contains the page and the UIClient as controlling the things around it.

&gt; Show makes me think you have to show the view or something, while you don&apos;t have to. The first time I saw it I thought it was called everytime you have to show the view for some reason. But it&apos;s called only once, to notify that the new view is *ready*.

My undertanding of this API is that the embedder should not actually show the WebView until the show calback has been called. I don&apos;t know if the &quot;ready&quot; captures that. Would it be clearer to you as &quot;ready-to-show&quot; ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>487686</commentid>
    <comment_count>10</comment_count>
      <attachid>111801</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-10-20 10:16:55 -0700</bug_when>
    <thetext>Created attachment 111801
New patch

Move UI client implementation to its own class (private for the moment). Renamed ready signal as ready-to-show as suggested by martin.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>493245</commentid>
    <comment_count>11</comment_count>
      <attachid>113038</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-10-31 04:35:05 -0700</bug_when>
    <thetext>Created attachment 113038
Patch updated to current git master</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>493247</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-31 04:39:08 -0700</bug_when>
    <thetext>Thanks for the patch. If this patch contains new public API please make sure it follows the guidelines for new WebKit2 GTK+ API. See http://trac.webkit.org/wiki/WebKitGTK/AddingNewWebKit2API</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>494596</commentid>
    <comment_count>13</comment_count>
      <attachid>113313</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-11-02 07:09:33 -0700</bug_when>
    <thetext>Created attachment 113313
Updated patch to fix unit tests

Tests for this patch were broken since r98845, because now the web view has default settings applied and javascript-can-open-windows-automatically is FALSE by default.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>519176</commentid>
    <comment_count>14</comment_count>
      <attachid>113313</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-12-12 07:14:44 -0800</bug_when>
    <thetext>Comment on attachment 113313
Updated patch to fix unit tests

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

Looks good to me. I have a couple documentation nits below as well as a request to use skip the soup server, if possible.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:163
&gt; +static gboolean webkitWebViewAccumulatorObjectHandled(GSignalInvocationHint*, GValue* returnValue, const GValue* handlerReturn, gpointer)
&gt; +{
&gt; +    gpointer object = g_value_get_object(handlerReturn);
&gt; +    if (object)
&gt; +        g_value_set_object(returnValue, object);
&gt; +
&gt; +    return !object;

I prefer void* to gpointer.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:236
&gt; +     * The signal handlers should not try to deal with the reference count for
&gt; +     * the new #WebKitWebView. The widget to which the widget is added will
&gt; +     * handle that.

I find this a bit confusing still. From what I understand, the user will add the widget to a container. The container will handle the reference count. The user is still responsible for adding the widget to the container. They can do this at any time during the process of create -&gt; ready-to-show -&gt; close, right? I think the documentation should just explain that the user should add the WebKitWebView to a container as usual.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:258
&gt; +     * size, position, whether the location, status and scrollbars
&gt; +     * should be displayed, is already set.

Later we should come back and explain where it&apos;s set.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:276
&gt; +     * delete the #WebKitWebView, if necessary.

delete -&gt; destroy

&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitWebView.cpp:99
&gt; +    static const char* htmlOnLoadFormat = &quot;&lt;html&gt;&lt;body onLoad=\&quot;%s\&quot;&gt;&lt;/body&gt;&lt;/html&gt;&quot;;
&gt; +
&gt; +    if (message-&gt;method != SOUP_METHOD_GET) {
&gt; +        soup_message_set_status(message, SOUP_STATUS_NOT_IMPLEMENTED);
&gt; +        return;
&gt; +    }
&gt; +
&gt; +    soup_message_set_status(message, SOUP_STATUS_OK);
&gt; +
&gt; +    if (g_str_equal(path, &quot;/create_new_view&quot;)) {
&gt; +        GOwnPtr&lt;char&gt; windowOpenString(g_strdup_printf(&quot;window.open(&apos;%s&apos;)&quot;, kServer-&gt;getURIForPath(&quot;/new_window&quot;).data()));
&gt; +        char* htmlString = g_strdup_printf(htmlOnLoadFormat, windowOpenString.get());
&gt; +        soup_message_body_append(message-&gt;response_body, SOUP_MEMORY_TAKE, htmlString, strlen(htmlString));
&gt; +    } else if (g_str_equal(path, &quot;/new_window&quot;)) {
&gt; +        char* htmlString = g_strdup_printf(htmlOnLoadFormat, &quot;self.close();&quot;);
&gt; +        soup_message_body_append(message-&gt;response_body, SOUP_MEMORY_TAKE, htmlString, strlen(htmlString));
&gt; +    }

Can you load a string now instead of using Soup here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>520010</commentid>
    <comment_count>15</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-12-13 03:54:38 -0800</bug_when>
    <thetext>(In reply to comment #14)
&gt; (From update of attachment 113313 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=113313&amp;action=review
&gt; 
&gt; Looks good to me. I have a couple documentation nits below as well as a request to use skip the soup server, if possible.
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:163
&gt; &gt; +static gboolean webkitWebViewAccumulatorObjectHandled(GSignalInvocationHint*, GValue* returnValue, const GValue* handlerReturn, gpointer)
&gt; &gt; +{
&gt; &gt; +    gpointer object = g_value_get_object(handlerReturn);
&gt; &gt; +    if (object)
&gt; &gt; +        g_value_set_object(returnValue, object);
&gt; &gt; +
&gt; &gt; +    return !object;
&gt; 
&gt; I prefer void* to gpointer.

Ok

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:236
&gt; &gt; +     * The signal handlers should not try to deal with the reference count for
&gt; &gt; +     * the new #WebKitWebView. The widget to which the widget is added will
&gt; &gt; +     * handle that.
&gt; 
&gt; I find this a bit confusing still. From what I understand, the user will add the widget to a container. The container will handle the reference count. The user is still responsible for adding the widget to the container. They can do this at any time during the process of create -&gt; ready-to-show -&gt; close, right? I think the documentation should just explain that the user should add the WebKitWebView to a container as usual.

I agree, the fact that we are adding that comment makes me think that it&apos;s a special situation, while it isn&apos;t. It&apos;s like any other widget creation, the widget contains a floating reference, so I think we should just remove the comment. 

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:258
&gt; &gt; +     * size, position, whether the location, status and scrollbars
&gt; &gt; +     * should be displayed, is already set.
&gt; 
&gt; Later we should come back and explain where it&apos;s set.

Yes.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:276
&gt; &gt; +     * delete the #WebKitWebView, if necessary.
&gt; 
&gt; delete -&gt; destroy

Ok.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitWebView.cpp:99
&gt; &gt; +    static const char* htmlOnLoadFormat = &quot;&lt;html&gt;&lt;body onLoad=\&quot;%s\&quot;&gt;&lt;/body&gt;&lt;/html&gt;&quot;;
&gt; &gt; +
&gt; &gt; +    if (message-&gt;method != SOUP_METHOD_GET) {
&gt; &gt; +        soup_message_set_status(message, SOUP_STATUS_NOT_IMPLEMENTED);
&gt; &gt; +        return;
&gt; &gt; +    }
&gt; &gt; +
&gt; &gt; +    soup_message_set_status(message, SOUP_STATUS_OK);
&gt; &gt; +
&gt; &gt; +    if (g_str_equal(path, &quot;/create_new_view&quot;)) {
&gt; &gt; +        GOwnPtr&lt;char&gt; windowOpenString(g_strdup_printf(&quot;window.open(&apos;%s&apos;)&quot;, kServer-&gt;getURIForPath(&quot;/new_window&quot;).data()));
&gt; &gt; +        char* htmlString = g_strdup_printf(htmlOnLoadFormat, windowOpenString.get());
&gt; &gt; +        soup_message_body_append(message-&gt;response_body, SOUP_MEMORY_TAKE, htmlString, strlen(htmlString));
&gt; &gt; +    } else if (g_str_equal(path, &quot;/new_window&quot;)) {
&gt; &gt; +        char* htmlString = g_strdup_printf(htmlOnLoadFormat, &quot;self.close();&quot;);
&gt; &gt; +        soup_message_body_append(message-&gt;response_body, SOUP_MEMORY_TAKE, htmlString, strlen(htmlString));
&gt; &gt; +    }
&gt; 
&gt; Can you load a string now instead of using Soup here?

Yes, I&apos;ll rework the tests to use html.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>520041</commentid>
    <comment_count>16</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-12-13 05:24:13 -0800</bug_when>
    <thetext>Committed r102673: &lt;http://trac.webkit.org/changeset/102673&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>110348</attachid>
            <date>2011-10-10 04:18:41 -0700</date>
            <delta_ts>2011-10-10 04:34:20 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>wk2-ui-client.diff</filename>
            <type>text/plain</type>
            <size>15906</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCA4ODFiZmJjLi43MGMwMTM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMzcg
QEAKIDIwMTEtMTAtMTAgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgogCisgICAgICAgIFtHVEtdIEluaXRpYWwgVUkgY2xpZW50IGltcGxlbWVudGF0aW9uIGZvciBX
ZWJLaXQyIEdUSyArQVBJCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD02OTc1MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIEZvciBub3QgaXQgb25seSBpbXBsZW1lbnRzIGNyZWF0ZU5ld1BhZ2UsIHNob3dQYWdl
IGFuZCBjbG9zZVBhZ2UKKyAgICAgICAgY2FsbGJhY2tzIGZyb20gdGhlIFVJIGNsaWVudC4KKwor
ICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuY3BwOgorICAgICAgICAo
d2Via2l0V2ViVmlld0NyZWF0ZSk6IERlZmF1bHQgaW1wbGVtZW50YXRpb24gdGhhdCBzaW1wbHkg
cmV0dXJucyBOVUxMLgorICAgICAgICAoY3JlYXRlTmV3UGFnZSk6IEVtaXQgY3JlYXRlIHNpZ25h
bCB0byBnZXQgdGhlIG5ld2x5IGNyZWF0ZWQgdmlldy4KKyAgICAgICAgKHNob3dQYWdlKTogRW1p
dCByZWFkeSBzaWduYWwuCisgICAgICAgIChjbG9zZVBhZ2UpOiBFbWl0IGNsb3NlIHNpZ25hbC4K
KyAgICAgICAgKHdlYmtpdFdlYlZpZXdVSUNsaWVudEluaXQpOgorICAgICAgICAod2Via2l0V2Vi
Vmlld0NvbnN0cnVjdGVkKTogSW5pdGlhbGl6ZSBVSSBjbGllbnQuCisgICAgICAgICh3ZWJraXRX
ZWJWaWV3QWNjdW11bGF0b3JPYmplY3RIYW5kbGVkKToKKyAgICAgICAgKHdlYmtpdF93ZWJfdmll
d19jbGFzc19pbml0KTogQWRkIGNyZWF0ZSwgcmVhZHkgYW5kIGNsb3NlIHNpZ25hbHMuCisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5oOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvZ3RrL3Rlc3RzL3Rlc3R3ZWJ2aWV3LmM6CisgICAgICAgIChnZXRVUklGb3JQYXRo
KToKKyAgICAgICAgKHNlcnZlckNhbGxiYWNrKToKKyAgICAgICAgKHdlYlZpZXdGaXh0dXJlU2V0
dXApOgorICAgICAgICAod2ViVmlld0ZpeHR1cmVUZWFyZG93bik6CisgICAgICAgICh2aWV3Q2xv
c2UpOgorICAgICAgICAodmlld1JlYWR5KToKKyAgICAgICAgKHZpZXdDcmVhdGUpOgorICAgICAg
ICAodGVzdFdlYlZpZXdDcmVhdGVOZXdWaWV3KToKKyAgICAgICAgKG1haW4pOgorICAgICAgICAq
IFVJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdDJtYXJzaGFsLmxpc3Q6CisKKzIwMTEtMTAtMTAgIENh
cmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgorCiAgICAgICAgIFtHVEtd
IEFkZCBtZXRob2RzIHRvIHJlbG9hZCB0aGUgdmlldyB0byBXZWJLaXQyIEdUSysgQVBJCiAgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02OTYxMwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmNw
cCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuY3BwCmlu
ZGV4IDVmZWY1MDguLjU1MjMzNTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuY3BwCkBAIC0yMCw2ICsyMCw3IEBACiAjaW5jbHVkZSAi
Y29uZmlnLmgiCiAjaW5jbHVkZSAiV2ViS2l0V2ViVmlldy5oIgogCisjaW5jbHVkZSAiV2ViS2l0
TWFyc2hhbC5oIgogI2luY2x1ZGUgIldlYktpdFdlYkNvbnRleHRQcml2YXRlLmgiCiAjaW5jbHVk
ZSAiV2ViS2l0V2ViTG9hZGVyQ2xpZW50LmgiCiAjaW5jbHVkZSAiV2ViS2l0V2ViVmlld0Jhc2VQ
cml2YXRlLmgiCkBAIC0zNiw2ICszNywxNCBAQCB1c2luZyBuYW1lc3BhY2UgV2ViS2l0OwogdXNp
bmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIGVudW0geworICAgIENSRUFURSwKKyAgICBSRUFEWSwK
KyAgICBDTE9TRSwKKworICAgIExBU1RfU0lHTkFMCit9OworCitlbnVtIHsKICAgICBQUk9QXzAs
CiAKICAgICBQUk9QX1dFQl9DT05URVhUCkBAIC00Nyw4ICs1Niw4NiBAQCBzdHJ1Y3QgX1dlYktp
dFdlYlZpZXdQcml2YXRlIHsKICAgICBHUmVmUHRyPFdlYktpdFdlYkxvYWRlckNsaWVudD4gbG9h
ZGVyQ2xpZW50OwogfTsKIAorc3RhdGljIGd1aW50IHNpZ25hbHNbTEFTVF9TSUdOQUxdID0geyAw
LCB9OworCiBHX0RFRklORV9UWVBFKFdlYktpdFdlYlZpZXcsIHdlYmtpdF93ZWJfdmlldywgV0VC
S0lUX1RZUEVfV0VCX1ZJRVdfQkFTRSkKIAorc3RhdGljIEd0a1dpZGdldCogd2Via2l0V2ViVmll
d0NyZWF0ZShXZWJLaXRXZWJWaWV3KikKK3sKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIFdL
UGFnZVJlZiBjcmVhdGVOZXdQYWdlKFdLUGFnZVJlZiBwYWdlLCBXS1VSTFJlcXVlc3RSZWYgcmVx
dWVzdCwgV0tEaWN0aW9uYXJ5UmVmIGZlYXR1cmVzLCBXS0V2ZW50TW9kaWZpZXJzIG1vZGlmaWVy
cywgV0tFdmVudE1vdXNlQnV0dG9uIGJ1dHRvbiwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sK
KyAgICBXZWJLaXRXZWJWaWV3KiBuZXdXZWJWaWV3OworICAgIGdfc2lnbmFsX2VtaXQoV0VCS0lU
X1dFQl9WSUVXKGNsaWVudEluZm8pLCBzaWduYWxzW0NSRUFURV0sIDAsICZuZXdXZWJWaWV3KTsK
KyAgICBpZiAoIW5ld1dlYlZpZXcpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIHN0
YXRpY19jYXN0PFdLUGFnZVJlZj4oV0tSZXRhaW4odG9BUEkod2Via2l0V2ViVmlld0Jhc2VHZXRQ
YWdlKFdFQktJVF9XRUJfVklFV19CQVNFKG5ld1dlYlZpZXcpKSkpKTsKK30KKworc3RhdGljIHZv
aWQgc2hvd1BhZ2UoV0tQYWdlUmVmIHBhZ2UsIGNvbnN0IHZvaWQgKmNsaWVudEluZm8pCit7Cisg
ICAgZ19zaWduYWxfZW1pdChXRUJLSVRfV0VCX1ZJRVcoY2xpZW50SW5mbyksIHNpZ25hbHNbUkVB
RFldLCAwLCBOVUxMKTsKK30KKworc3RhdGljIHZvaWQgY2xvc2VQYWdlKFdLUGFnZVJlZiBwYWdl
LCBjb25zdCB2b2lkICpjbGllbnRJbmZvKQoreworICAgIGdfc2lnbmFsX2VtaXQoV0VCS0lUX1dF
Ql9WSUVXKGNsaWVudEluZm8pLCBzaWduYWxzW0NMT1NFXSwgMCwgTlVMTCk7Cit9CisKK3N0YXRp
YyB2b2lkIHdlYmtpdFdlYlZpZXdVSUNsaWVudEluaXQoV2ViS2l0V2ViVmlldyogd2ViVmlldykK
K3sKKyAgICBXS1BhZ2VVSUNsaWVudCB1aUNsaWVudCA9IHsKKyAgICAgICAga1dLUGFnZVVJQ2xp
ZW50Q3VycmVudFZlcnNpb24sCisgICAgICAgIHdlYlZpZXcsLyogY2xpZW50SW5mbyAqLworICAg
ICAgICAwLCAgICAgIC8qIGNyZWF0ZU5ld1BhZ2VfZGVwcmVjYXRlZEZvclVzZVdpdGhWMCAqLwor
ICAgICAgICBzaG93UGFnZSwKKyAgICAgICAgY2xvc2VQYWdlLAorICAgICAgICAwLCAgICAgIC8q
IHRha2VGb2N1cyAqLworICAgICAgICAwLCAgICAgIC8qIGZvY3VzICovCisgICAgICAgIDAsICAg
ICAgLyogdW5mb2N1cyAqLworICAgICAgICAwLCAgICAgIC8qIHJ1bkphdmFTY3JpcHRBbGVydCAq
LworICAgICAgICAwLCAgICAgIC8qIHJ1bkphdmFTY3JpcHRDb25maXJtICovCisgICAgICAgIDAs
ICAgICAgLyogcnVuSmF2YVNjcmlwdFByb21wdCAqLworICAgICAgICAwLCAgICAgIC8qIHNldFN0
YXR1c1RleHQgKi8KKyAgICAgICAgMCwgICAgICAvKiBtb3VzZURpZE1vdmVPdmVyRWxlbWVudF9k
ZXByZWNhdGVkRm9yVXNlV2l0aFYwICovCisgICAgICAgIDAsICAgICAgLyogbWlzc2luZ1BsdWdp
bkJ1dHRvbkNsaWNrZWQgKi8KKyAgICAgICAgMCwgICAgICAvKiBkaWROb3RIYW5kbGVLZXlFdmVu
dCAqLworICAgICAgICAwLCAgICAgIC8qIGRpZE5vdEhhbmRsZVdoZWVsRXZlbnQgKi8KKyAgICAg
ICAgMCwgICAgICAvKiB0b29sYmFyc0FyZVZpc2libGUgKi8KKyAgICAgICAgMCwgICAgICAvKiBz
ZXRUb29sYmFyc0FyZVZpc2libGUgKi8KKyAgICAgICAgMCwgICAgICAvKiBtZW51QmFySXNWaXNp
YmxlICovCisgICAgICAgIDAsICAgICAgLyogc2V0TWVudUJhcklzVmlzaWJsZSAqLworICAgICAg
ICAwLCAgICAgIC8qIHN0YXR1c0JhcklzVmlzaWJsZSAqLworICAgICAgICAwLCAgICAgIC8qIHNl
dFN0YXR1c0JhcklzVmlzaWJsZSAqLworICAgICAgICAwLCAgICAgIC8qIGlzUmVzaXphYmxlICov
CisgICAgICAgIDAsICAgICAgLyogc2V0SXNSZXNpemFibGUgKi8KKyAgICAgICAgMCwgICAgICAv
KiBnZXRXaW5kb3dGcmFtZSAqLworICAgICAgICAwLCAgICAgIC8qIHNldFdpbmRvd0ZyYW1lICov
CisgICAgICAgIDAsICAgICAgLyogcnVuQmVmb3JlVW5sb2FkQ29uZmlybVBhbmVsICovCisgICAg
ICAgIDAsICAgICAgLyogZGlkRHJhdyAqLworICAgICAgICAwLCAgICAgIC8qIHBhZ2VEaWRTY3Jv
bGwgKi8KKyAgICAgICAgMCwgICAgICAvKiBleGNlZWRlZERhdGFiYXNlUXVvdGEgKi8KKyAgICAg
ICAgMCwgICAgICAvKiBydW5PcGVuUGFuZWwgKi8KKyAgICAgICAgMCwgICAgICAvKiBkZWNpZGVQ
b2xpY3lGb3JHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0ICovCisgICAgICAgIDAsICAgICAg
LyogaGVhZGVySGVpZ2h0ICovCisgICAgICAgIDAsICAgICAgLyogZm9vdGVySGVpZ2h0ICovCisg
ICAgICAgIDAsICAgICAgLyogZHJhd0hlYWRlciAqLworICAgICAgICAwLCAgICAgIC8qIGRyYXdG
b290ZXIgKi8KKyAgICAgICAgMCwgICAgICAvKiBwcmludEZyYW1lICovCisgICAgICAgIDAsICAg
ICAgLyogcnVuTW9kYWwgKi8KKyAgICAgICAgMCwgICAgICAvKiBkaWRDb21wbGV0ZVJ1YmJlckJh
bmRGb3JNYWluRnJhbWUgKi8KKyAgICAgICAgMCwgICAgICAvKiBzYXZlRGF0YVRvRmlsZUluRG93
bmxvYWRzRm9sZGVyICovCisgICAgICAgIDAsICAgICAgLyogc2hvdWxkSW50ZXJydXB0SmF2YVNj
cmlwdCAqLworICAgICAgICBjcmVhdGVOZXdQYWdlLAorICAgICAgICAwLCAgICAgIC8qIG1vdXNl
RGlkTW92ZU92ZXJFbGVtZW50ICovCisgICAgfTsKKyAgICBXZWJQYWdlUHJveHkqIHBhZ2UgPSB3
ZWJraXRXZWJWaWV3QmFzZUdldFBhZ2UoV0VCS0lUX1dFQl9WSUVXX0JBU0Uod2ViVmlldykpOwor
ICAgIFdLUGFnZVNldFBhZ2VVSUNsaWVudCh0b0FQSShwYWdlKSwgJnVpQ2xpZW50KTsKK30KKwog
c3RhdGljIHZvaWQgd2Via2l0V2ViVmlld0NvbnN0cnVjdGVkKEdPYmplY3QqIG9iamVjdCkKIHsK
ICAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKG9iamVjdCk7CkBA
IC01Nyw2ICsxNDQsOCBAQCBzdGF0aWMgdm9pZCB3ZWJraXRXZWJWaWV3Q29uc3RydWN0ZWQoR09i
amVjdCogb2JqZWN0KQogICAgIHdlYmtpdFdlYlZpZXdCYXNlQ3JlYXRlV2ViUGFnZShXRUJLSVRf
V0VCX1ZJRVdfQkFTRSh3ZWJWaWV3KSwgd2Via2l0V2ViQ29udGV4dEdldFdLQ29udGV4dChwcml2
LT5jb250ZXh0KSwgMCk7CiAKICAgICBwcml2LT5sb2FkZXJDbGllbnQgPSBhZG9wdEdSZWYoV0VC
S0lUX1dFQl9MT0FERVJfQ0xJRU5UKGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9XRUJfTE9BREVS
X0NMSUVOVCwgIndlYi12aWV3Iiwgd2ViVmlldywgTlVMTCkpKTsKKworICAgIHdlYmtpdFdlYlZp
ZXdVSUNsaWVudEluaXQod2ViVmlldyk7CiB9CiAKIHN0YXRpYyB2b2lkIHdlYmtpdFdlYlZpZXdT
ZXRQcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BJZCwgY29uc3QgR1ZhbHVlKiB2
YWx1ZSwgR1BhcmFtU3BlYyogcGFyYW1TcGVjKQpAQCAtOTgsNiArMTg3LDE1IEBAIHN0YXRpYyB2
b2lkIHdlYmtpdF93ZWJfdmlld19pbml0KFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCiAgICAgbmV3
IChwcml2KSBXZWJLaXRXZWJWaWV3UHJpdmF0ZSgpOwogfQogCitzdGF0aWMgZ2Jvb2xlYW4gd2Vi
a2l0V2ViVmlld0FjY3VtdWxhdG9yT2JqZWN0SGFuZGxlZChHU2lnbmFsSW52b2NhdGlvbkhpbnQq
LCBHVmFsdWUqIHJldHVyblZhbHVlLCBjb25zdCBHVmFsdWUqIGhhbmRsZXJSZXR1cm4sIGdwb2lu
dGVyKQoreworICAgIGdwb2ludGVyIG9iamVjdCA9IGdfdmFsdWVfZ2V0X29iamVjdChoYW5kbGVy
UmV0dXJuKTsKKyAgICBpZiAob2JqZWN0KQorICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QocmV0
dXJuVmFsdWUsIG9iamVjdCk7CisKKyAgICByZXR1cm4gIW9iamVjdDsKK30KKwogc3RhdGljIHZv
aWQgd2Via2l0X3dlYl92aWV3X2NsYXNzX2luaXQoV2ViS2l0V2ViVmlld0NsYXNzKiB3ZWJWaWV3
Q2xhc3MpCiB7CiAgICAgR09iamVjdENsYXNzKiBnT2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFT
Uyh3ZWJWaWV3Q2xhc3MpOwpAQCAtMTA3LDYgKzIwNSw4IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF93
ZWJfdmlld19jbGFzc19pbml0KFdlYktpdFdlYlZpZXdDbGFzcyogd2ViVmlld0NsYXNzKQogICAg
IGdPYmplY3RDbGFzcy0+Z2V0X3Byb3BlcnR5ID0gd2Via2l0V2ViVmlld0dldFByb3BlcnR5Owog
ICAgIGdPYmplY3RDbGFzcy0+ZmluYWxpemUgPSB3ZWJraXRXZWJWaWV3RmluYWxpemU7CiAKKyAg
ICB3ZWJWaWV3Q2xhc3MtPmNyZWF0ZSA9IHdlYmtpdFdlYlZpZXdDcmVhdGU7CisKICAgICBnX3R5
cGVfY2xhc3NfYWRkX3ByaXZhdGUod2ViVmlld0NsYXNzLCBzaXplb2YoV2ViS2l0V2ViVmlld1By
aXZhdGUpKTsKIAogICAgIC8qKgpAQCAtMTIxLDYgKzIyMSw2OSBAQCBzdGF0aWMgdm9pZCB3ZWJr
aXRfd2ViX3ZpZXdfY2xhc3NfaW5pdChXZWJLaXRXZWJWaWV3Q2xhc3MqIHdlYlZpZXdDbGFzcykK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IlRoZSB3ZWIgY29udGV4dCBmb3IgdGhlIHZpZXciLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfVFlQRV9XRUJfQ09OVEVYVCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c3RhdGljX2Nhc3Q8R1BhcmFtRmxhZ3M+KFdFQktJVF9QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFN
X0NPTlNUUlVDVF9PTkxZKSkpOworCisgICAgLyoqCisgICAgICogV2ViS2l0V2ViVmlldzo6Y3Jl
YXRlOgorICAgICAqIEB3ZWJfdmlldzogdGhlIG9iamVjdCBvbiB3aGljaCB0aGUgc2lnbmFsIGlz
IGVtaXR0ZWQKKyAgICAgKgorICAgICAqIEVtaXR0ZWQgd2hlbiB0aGUgY3JlYXRpb24gb2YgYSBu
ZXcgdmlldyBpcyByZXF1ZXN0ZWQuCisgICAgICogSWYgdGhpcyBzaWduYWwgaXMgaGFuZGxlZCB0
aGUgc2lnbmFsIGhhbmRsZXIgc2hvdWxkIHJldHVybiB0aGUKKyAgICAgKiBuZXdseSBjcmVhdGVk
ICNXZWJLaXRXZWJWaWV3LgorICAgICAqCisgICAgICogVGhlIG5ldyAjV2ViS2l0V2ViVmlldyBz
aG91bGQgbm90IGJlIGRpc3BsYXllZCB0byB0aGUgdXNlcgorICAgICAqIHVudGlsIHRoZSAjV2Vi
S2l0V2ViVmlldzo6cmVhZHkgc2lnbmFsIGlzIGVtaXR0ZWQuCisgICAgICoKKyAgICAgKiBUaGUg
c2lnbmFsIGhhbmRsZXJzIHNob3VsZCBub3QgdHJ5IHRvIGRlYWwgd2l0aCB0aGUgcmVmZXJlbmNl
IGNvdW50IGZvcgorICAgICAqIHRoZSBuZXcgI1dlYktpdFdlYlZpZXcuIFRoZSB3aWRnZXQgdG8g
d2hpY2ggdGhlIHdpZGdldCBpcyBhZGRlZCB3aWxsCisgICAgICogaGFuZGxlIHRoYXQuCisgICAg
ICoKKyAgICAgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IGEgbmV3bHkgYWxsb2NhdGVkICNX
ZWJLaXRXZWJWaWV3IHdpZGdldCwgb3IgJU5VTEwKKyAgICAgKi8KKyAgICBzaWduYWxzW0NSRUFU
RV0gPQorICAgICAgICBnX3NpZ25hbF9uZXcoImNyZWF0ZSIsCisgICAgICAgICAgICAgICAgICAg
ICBHX1RZUEVfRlJPTV9DTEFTUyh3ZWJWaWV3Q2xhc3MpLAorICAgICAgICAgICAgICAgICAgICAg
R19TSUdOQUxfUlVOX0xBU1QsCisgICAgICAgICAgICAgICAgICAgICBHX1NUUlVDVF9PRkZTRVQo
V2ViS2l0V2ViVmlld0NsYXNzLCBjcmVhdGUpLAorICAgICAgICAgICAgICAgICAgICAgd2Via2l0
V2ViVmlld0FjY3VtdWxhdG9yT2JqZWN0SGFuZGxlZCwgTlVMTCwKKyAgICAgICAgICAgICAgICAg
ICAgIHdlYmtpdF9tYXJzaGFsX09CSkVDVF9fVk9JRCwKKyAgICAgICAgICAgICAgICAgICAgIEdU
S19UWVBFX1dJREdFVCwgMCk7CisKKyAgICAvKioKKyAgICAgKiBXZWJLaXRXZWJWaWV3OjpyZWFk
eToKKyAgICAgKiBAd2ViX3ZpZXc6IHRoZSBvYmplY3Qgb24gd2hpY2ggdGhlIHNpZ25hbCBpcyBl
bWl0dGVkCisgICAgICoKKyAgICAgKiBFbWl0dGVkIGFmdGVyICNXZWJLaXRXZWJWaWV3OjpjcmVh
dGUgb24gdGhlIG5ld2x5IGNyZWF0ZWQgI1dlYktpdFdlYlZpZXcKKyAgICAgKiB3aGVuIGl0IHNo
b3VsZCBiZSBkaXNwbGF5ZWQgdG8gdGhlIHVzZXIuIFdoZW4gdGhpcyBzaWduYWwgaXMgZW1pdHRl
ZAorICAgICAqIGFsbCB0aGUgaW5mb3JtYXRpb24gYWJvdXQgaG93IHRoZSB3aW5kb3cgc2hvdWxk
IGxvb2ssIGluY2x1ZGluZworICAgICAqIHNpemUsIHBvc2l0aW9uLCB3aGV0aGVyIHRoZSBsb2Nh
dGlvbiwgc3RhdHVzIGFuZCBzY3JvbGwgYmFycworICAgICAqIHNob3VsZCBiZSBkaXNwbGF5ZWQs
IGlzIGFscmVhZHkgc2V0LgorICAgICAqLworICAgIHNpZ25hbHNbUkVBRFldID0KKyAgICAgICAg
Z19zaWduYWxfbmV3KCJyZWFkeSIsCisgICAgICAgICAgICAgICAgICAgICBHX1RZUEVfRlJPTV9D
TEFTUyh3ZWJWaWV3Q2xhc3MpLAorICAgICAgICAgICAgICAgICAgICAgR19TSUdOQUxfUlVOX0xB
U1QsCisgICAgICAgICAgICAgICAgICAgICBHX1NUUlVDVF9PRkZTRVQoV2ViS2l0V2ViVmlld0Ns
YXNzLCByZWFkeSksCisgICAgICAgICAgICAgICAgICAgICBOVUxMLCBOVUxMLAorICAgICAgICAg
ICAgICAgICAgICAgZ19jY2xvc3VyZV9tYXJzaGFsX1ZPSURfX1ZPSUQsCisgICAgICAgICAgICAg
ICAgICAgICBHX1RZUEVfTk9ORSwgMCk7CisKKyAgICAvKioKKyAgICAgKiBXZWJLaXRXZWJWaWV3
OjpjbG9zZToKKyAgICAgKiBAd2ViVmlldzogdGhlIG9iamVjdCBvbiB3aGljaCB0aGUgc2lnbmFs
IGlzIGVtaXR0ZWQKKyAgICAgKgorICAgICAqIEVtaXR0ZWQgd2hlbiBjbG9zaW5nIGEgI1dlYktp
dFdlYlZpZXcgaXMgcmVxdWVzdGVkLiBUaGlzIG9jY3VycyB3aGVuIGEKKyAgICAgKiBjYWxsIGlz
IG1hZGUgZnJvbSBKYXZhU2NyaXB0J3Mgd2luZG93LmNsb3NlIGZ1bmN0aW9uLgorICAgICAqIEl0
IGlzIHRoZSBvd25lcidzIHJlc3BvbnNpYmlsaXR5IHRvIGhhbmRsZSB0aGlzIHNpZ25hbCB0byBo
aWRlIG9yCisgICAgICogZGVsZXRlIHRoZSB3ZWIgdmlldywgaWYgbmVjZXNzYXJ5LgorICAgICAq
LworICAgIHNpZ25hbHNbQ0xPU0VdID0KKyAgICAgICAgZ19zaWduYWxfbmV3KCJjbG9zZSIsCisg
ICAgICAgICAgICAgICAgICAgICBHX1RZUEVfRlJPTV9DTEFTUyh3ZWJWaWV3Q2xhc3MpLAorICAg
ICAgICAgICAgICAgICAgICAgR19TSUdOQUxfUlVOX0xBU1QsCisgICAgICAgICAgICAgICAgICAg
ICBHX1NUUlVDVF9PRkZTRVQoV2ViS2l0V2ViVmlld0NsYXNzLCBjbG9zZSksCisgICAgICAgICAg
ICAgICAgICAgICBOVUxMLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgZ19jY2xvc3VyZV9t
YXJzaGFsX1ZPSURfX1ZPSUQsCisgICAgICAgICAgICAgICAgICAgICBHX1RZUEVfTk9ORSwgMCk7
CiB9CiAKIC8vIFB1YmxpYyBBUEkuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay9XZWJLaXRXZWJWaWV3LmgKaW5kZXggMDFkOTcyZS4uYjcwZjM3MSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuaApAQCAtNTUsNiAr
NTUsMTAgQEAgc3RydWN0IF9XZWJLaXRXZWJWaWV3IHsKIHN0cnVjdCBfV2ViS2l0V2ViVmlld0Ns
YXNzIHsKICAgICBXZWJLaXRXZWJWaWV3QmFzZUNsYXNzIHBhcmVudDsKIAorICAgIEd0a1dpZGdl
dCAqKCogY3JlYXRlKSAoV2ViS2l0V2ViVmlldyAqd2ViX3ZpZXcpOworICAgIHZvaWQgICAgICAg
KCogcmVhZHkpICAoV2ViS2l0V2ViVmlldyAqd2ViX3ZpZXcpOworICAgIHZvaWQgICAgICAgKCog
Y2xvc2UpICAoV2ViS2l0V2ViVmlldyAqd2ViX3ZpZXcpOworCiAgICAgLyogUGFkZGluZyBmb3Ig
ZnV0dXJlIGV4cGFuc2lvbiAqLwogICAgIHZvaWQgKCpfd2Via2l0X3Jlc2VydmVkMCkgKHZvaWQp
OwogICAgIHZvaWQgKCpfd2Via2l0X3Jlc2VydmVkMSkgKHZvaWQpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvdGVzdHdlYnZpZXcuYyBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL3Rlc3R3ZWJ2aWV3LmMKaW5kZXggOWEy
N2FmZS4uM2MwOTZjMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvdGVzdHMvdGVzdHdlYnZpZXcuYworKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay90ZXN0cy90ZXN0d2Vidmlldy5jCkBAIC0xOSw4ICsxOSwxMjcgQEAKIAogI2luY2x1ZGUg
PGdsaWIuaD4KICNpbmNsdWRlIDxndGsvZ3RrLmg+CisjaW5jbHVkZSA8bGlic291cC9zb3VwLmg+
CisjaW5jbHVkZSA8c3RyaW5nLmg+CiAjaW5jbHVkZSA8d2Via2l0Mi93ZWJraXQyLmg+CiAKK1Nv
dXBVUkkgKmJhc2VVUkk7CisKK3N0YXRpYyBjaGFyICpnZXRVUklGb3JQYXRoKGNvbnN0IGNoYXIq
IHBhdGgpCit7CisgICAgU291cFVSSSAqdXJpOworICAgIGNoYXIgKnVyaVN0cmluZzsKKworICAg
IHVyaSA9IHNvdXBfdXJpX25ld193aXRoX2Jhc2UoYmFzZVVSSSwgcGF0aCk7CisgICAgdXJpU3Ry
aW5nID0gc291cF91cmlfdG9fc3RyaW5nKHVyaSwgRkFMU0UpOworICAgIHNvdXBfdXJpX2ZyZWUo
dXJpKTsKKworICAgIHJldHVybiB1cmlTdHJpbmc7Cit9CisKK3N0YXRpYyB2b2lkIHNlcnZlckNh
bGxiYWNrKFNvdXBTZXJ2ZXIqIHNlcnZlciwgU291cE1lc3NhZ2UqIG1zZywgY29uc3QgY2hhciog
cGF0aCwgR0hhc2hUYWJsZSogcXVlcnksIFNvdXBDbGllbnRDb250ZXh0KiBjb250ZXh0LCBncG9p
bnRlciBkYXRhKQoreworICAgIHN0YXRpYyBjb25zdCBjaGFyICpodG1sT25Mb2FkRm9ybWF0ID0g
IjxodG1sPjxib2R5IG9uTG9hZD1cIiVzXCI+PC9ib2R5PjwvaHRtbD4iOworICAgIGNoYXIgKmh0
bWxTdHJpbmc7CisKKyAgICBpZiAobXNnLT5tZXRob2QgIT0gU09VUF9NRVRIT0RfR0VUKSB7Cisg
ICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1zZywgU09VUF9TVEFUVVNfTk9UX0lNUExF
TUVOVEVEKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHNvdXBfbWVzc2FnZV9zZXRf
c3RhdHVzKG1zZywgU09VUF9TVEFUVVNfT0spOworCisgICAgaWYgKGdfc3RyX2VxdWFsKHBhdGgs
ICIvdGVzdF9jcmVhdGVfbmV3X3ZpZXciKSkgeworICAgICAgICBjaGFyICp1cmlTdHJpbmcgPSBn
ZXRVUklGb3JQYXRoKCIvbmV3X3dpbmRvdyIpOworICAgICAgICBjaGFyICp3aW5kb3dPcGVuU3Ry
aW5nID0gZ19zdHJkdXBfcHJpbnRmKCJ3aW5kb3cub3BlbignJXMnKSIsIHVyaVN0cmluZyk7CisK
KyAgICAgICAgaHRtbFN0cmluZyA9IGdfc3RyZHVwX3ByaW50ZihodG1sT25Mb2FkRm9ybWF0LCB3
aW5kb3dPcGVuU3RyaW5nKTsKKyAgICAgICAgZ19mcmVlKHVyaVN0cmluZyk7CisgICAgICAgIGdf
ZnJlZSh3aW5kb3dPcGVuU3RyaW5nKTsKKyAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5k
KG1zZy0+cmVzcG9uc2VfYm9keSwgU09VUF9NRU1PUllfVEFLRSwgaHRtbFN0cmluZywgc3RybGVu
KGh0bWxTdHJpbmcpKTsKKyAgICB9IGVsc2UgaWYgKGdfc3RyX2VxdWFsKHBhdGgsICIvbmV3X3dp
bmRvdyIpKSB7CisgICAgICAgIGh0bWxTdHJpbmcgPSBnX3N0cmR1cF9wcmludGYoaHRtbE9uTG9h
ZEZvcm1hdCwgInNlbGYuY2xvc2UoKTsiKTsKKyAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfYXBw
ZW5kKG1zZy0+cmVzcG9uc2VfYm9keSwgU09VUF9NRU1PUllfVEFLRSwgaHRtbFN0cmluZywgc3Ry
bGVuKGh0bWxTdHJpbmcpKTsKKyAgICB9CisKKyAgICBzb3VwX21lc3NhZ2VfYm9keV9jb21wbGV0
ZShtc2ctPnJlc3BvbnNlX2JvZHkpOworfQorCit0eXBlZGVmIHN0cnVjdCB7CisgICAgV2ViS2l0
V2ViVmlldyAqd2ViVmlldzsKKyAgICBHTWFpbkxvb3AgKmxvb3A7CisKKyAgICBnYm9vbGVhbiBo
YXNCZWVuQ3JlYXRlOworICAgIGdib29sZWFuIGhhc0JlZW5SZWFkeTsKKyAgICBnYm9vbGVhbiBo
YXNCZWVuQ2xvc2U7Cit9IFdlYlZpZXdGaXh0dXJlOworCitzdGF0aWMgdm9pZCB3ZWJWaWV3Rml4
dHVyZVNldHVwKFdlYlZpZXdGaXh0dXJlICpmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCit7
CisgICAgZml4dHVyZS0+d2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdf
bmV3KCkpOworICAgIGZpeHR1cmUtPmxvb3AgPSBnX21haW5fbG9vcF9uZXcoTlVMTCwgVFJVRSk7
CisgICAgZ19vYmplY3RfcmVmX3NpbmsoZml4dHVyZS0+d2ViVmlldyk7CisKKyAgICBmaXh0dXJl
LT5oYXNCZWVuQ3JlYXRlID0gRkFMU0U7CisgICAgZml4dHVyZS0+aGFzQmVlblJlYWR5ID0gRkFM
U0U7CisgICAgZml4dHVyZS0+aGFzQmVlbkNsb3NlID0gRkFMU0U7Cit9CisKK3N0YXRpYyB2b2lk
IHdlYlZpZXdGaXh0dXJlVGVhcmRvd24oV2ViVmlld0ZpeHR1cmUgKmZpeHR1cmUsIGdjb25zdHBv
aW50ZXIgZGF0YSkKK3sKKyAgICBnX29iamVjdF91bnJlZihmaXh0dXJlLT53ZWJWaWV3KTsKKyAg
ICBnX21haW5fbG9vcF91bnJlZihmaXh0dXJlLT5sb29wKTsKK30KKworc3RhdGljIHZvaWQgdmll
d0Nsb3NlKFdlYktpdFdlYlZpZXcgKndlYlZpZXcsIFdlYlZpZXdGaXh0dXJlICpmaXh0dXJlKQor
eworICAgIGdfYXNzZXJ0KGZpeHR1cmUtPmhhc0JlZW5DcmVhdGUpOworICAgIGdfYXNzZXJ0KGZp
eHR1cmUtPmhhc0JlZW5SZWFkeSk7CisgICAgZ19hc3NlcnQoIWZpeHR1cmUtPmhhc0JlZW5DbG9z
ZSk7CisgICAgZml4dHVyZS0+aGFzQmVlbkNsb3NlID0gVFJVRTsKKworICAgIGdfb2JqZWN0X3Vu
cmVmKHdlYlZpZXcpOworICAgIGdfbWFpbl9sb29wX3F1aXQoZml4dHVyZS0+bG9vcCk7Cit9CisK
K3N0YXRpYyB2b2lkIHZpZXdSZWFkeShXZWJLaXRXZWJWaWV3ICp3ZWJWaWV3LCBXZWJWaWV3Rml4
dHVyZSAqZml4dHVyZSkKK3sKKyAgICBnX2Fzc2VydChmaXh0dXJlLT5oYXNCZWVuQ3JlYXRlKTsK
KyAgICBnX2Fzc2VydCghZml4dHVyZS0+aGFzQmVlblJlYWR5KTsKKyAgICBmaXh0dXJlLT5oYXNC
ZWVuUmVhZHkgPSBUUlVFOworfQorCitzdGF0aWMgR3RrV2lkZ2V0ICp2aWV3Q3JlYXRlKFdlYktp
dFdlYlZpZXcgKndlYlZpZXcsIFdlYlZpZXdGaXh0dXJlICpmaXh0dXJlKQoreworICAgIEd0a1dp
ZGdldCAqbmV3V2ViVmlldyA9IHdlYmtpdF93ZWJfdmlld19uZXdfd2l0aF9jb250ZXh0KHdlYmtp
dF93ZWJfdmlld19nZXRfY29udGV4dCh3ZWJWaWV3KSk7CisgICAgZ19vYmplY3RfcmVmX3Npbmso
bmV3V2ViVmlldyk7CisKKyAgICBnX2Fzc2VydCghZml4dHVyZS0+aGFzQmVlbkNyZWF0ZSk7Cisg
ICAgZml4dHVyZS0+aGFzQmVlbkNyZWF0ZSA9IFRSVUU7CisKKyAgICBnX3NpZ25hbF9jb25uZWN0
KG5ld1dlYlZpZXcsICJyZWFkeSIsIEdfQ0FMTEJBQ0sodmlld1JlYWR5KSwgZml4dHVyZSk7Cisg
ICAgZ19zaWduYWxfY29ubmVjdChuZXdXZWJWaWV3LCAiY2xvc2UiLCBHX0NBTExCQUNLKHZpZXdD
bG9zZSksIGZpeHR1cmUpOworCisgICAgcmV0dXJuIG5ld1dlYlZpZXc7Cit9CisKK3N0YXRpYyB2
b2lkIHRlc3RXZWJWaWV3Q3JlYXRlTmV3VmlldyhXZWJWaWV3Rml4dHVyZSAqZml4dHVyZSwgZ2Nv
bnN0cG9pbnRlciBkYXRhKQoreworICAgIGNoYXIgKnVyaVN0cmluZzsKKworICAgIGdfc2lnbmFs
X2Nvbm5lY3QoZml4dHVyZS0+d2ViVmlldywgImNyZWF0ZSIsIEdfQ0FMTEJBQ0sodmlld0NyZWF0
ZSksIGZpeHR1cmUpOworCisgICAgdXJpU3RyaW5nID0gZ2V0VVJJRm9yUGF0aCgiL3Rlc3RfY3Jl
YXRlX25ld192aWV3Iik7CisgICAgd2Via2l0X3dlYl92aWV3X2xvYWRfdXJpKGZpeHR1cmUtPndl
YlZpZXcsIHVyaVN0cmluZyk7CisgICAgZ19mcmVlKHVyaVN0cmluZyk7CisKKyAgICBnX21haW5f
bG9vcF9ydW4oZml4dHVyZS0+bG9vcCk7CisKKyAgICBnX2Fzc2VydChmaXh0dXJlLT5oYXNCZWVu
Q3JlYXRlKTsKKyAgICBnX2Fzc2VydChmaXh0dXJlLT5oYXNCZWVuUmVhZHkpOworICAgIGdfYXNz
ZXJ0KGZpeHR1cmUtPmhhc0JlZW5DbG9zZSk7Cit9CisKIHN0YXRpYyB2b2lkIHRlc3RXZWJWaWV3
RGVmYXVsdENvbnRleHQodm9pZCkKIHsKICAgICBXZWJLaXRXZWJWaWV3ICp2aWV3ID0gV0VCS0lU
X1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXcoKSk7CkBAIC0zMSwxNCArMTUwLDI5IEBAIHN0
YXRpYyB2b2lkIHRlc3RXZWJWaWV3RGVmYXVsdENvbnRleHQodm9pZCkKIAogaW50IG1haW4oaW50
IGFyZ2MsIGNoYXIgKiphcmd2KQogeworICAgIFNvdXBTZXJ2ZXIgKnNlcnZlcjsKKwogICAgIGdf
dGhyZWFkX2luaXQoTlVMTCk7CiAgICAgZ3RrX3Rlc3RfaW5pdCgmYXJnYywgJmFyZ3YsIE5VTEwp
OwogCiAgICAgZ19zZXRlbnYoIldFQktJVF9FWEVDX1BBVEgiLCBXRUJLSVRfRVhFQ19QQVRILCBG
QUxTRSk7CiAKKyAgICBzZXJ2ZXIgPSBzb3VwX3NlcnZlcl9uZXcoU09VUF9TRVJWRVJfUE9SVCwg
MCwgTlVMTCk7CisgICAgc291cF9zZXJ2ZXJfcnVuX2FzeW5jKHNlcnZlcik7CisKKyAgICBzb3Vw
X3NlcnZlcl9hZGRfaGFuZGxlcihzZXJ2ZXIsIE5VTEwsIHNlcnZlckNhbGxiYWNrLCBOVUxMLCBO
VUxMKTsKKworICAgIGJhc2VVUkkgPSBzb3VwX3VyaV9uZXcoImh0dHA6Ly8xMjcuMC4wLjEvIik7
CisgICAgc291cF91cmlfc2V0X3BvcnQoYmFzZVVSSSwgc291cF9zZXJ2ZXJfZ2V0X3BvcnQoc2Vy
dmVyKSk7CisKICAgICBnX3Rlc3RfYnVnX2Jhc2UoImh0dHBzOi8vYnVncy53ZWJraXQub3JnLyIp
OwogICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdDIvd2Vidmlldy9kZWZhdWx0X2NvbnRleHQi
LAogICAgICAgICAgICAgICAgICAgICB0ZXN0V2ViVmlld0RlZmF1bHRDb250ZXh0KTsKKyAgICBn
X3Rlc3RfYWRkKCIvd2Via2l0Mi93ZWJ2aWV3L2NyZWF0ZV9uZXdfdmlldyIsCisgICAgICAgICAg
ICAgICBXZWJWaWV3Rml4dHVyZSwgTlVMTCwKKyAgICAgICAgICAgICAgIHdlYlZpZXdGaXh0dXJl
U2V0dXAsCisgICAgICAgICAgICAgICB0ZXN0V2ViVmlld0NyZWF0ZU5ld1ZpZXcsCisgICAgICAg
ICAgICAgICB3ZWJWaWV3Rml4dHVyZVRlYXJkb3duKTsKIAogICAgIHJldHVybiBnX3Rlc3RfcnVu
KCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay93ZWJr
aXQybWFyc2hhbC5saXN0IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvd2Via2l0
Mm1hcnNoYWwubGlzdAppbmRleCBjM2ExNzg2Li5jMDQxYjkyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay93ZWJraXQybWFyc2hhbC5saXN0CisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdDJtYXJzaGFsLmxpc3QKQEAgLTEsMyAr
MSw0IEBACiBCT09MRUFOOlNUUklORyxQT0lOVEVSCiBCT09MRUFOOlZPSUQKK09CSkVDVDpWT0lE
CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>110349</attachid>
            <date>2011-10-10 04:34:20 -0700</date>
            <delta_ts>2011-10-20 10:16:55 -0700</delta_ts>
            <desc>Patch updated to fix coding style issues</desc>
            <filename>wk2-ui-client2.diff</filename>
            <type>text/plain</type>
            <size>15891</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCA4ODFiZmJjLi43MGMwMTM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMzcg
QEAKIDIwMTEtMTAtMTAgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgogCisgICAgICAgIFtHVEtdIEluaXRpYWwgVUkgY2xpZW50IGltcGxlbWVudGF0aW9uIGZvciBX
ZWJLaXQyIEdUSyArQVBJCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD02OTc1MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIEZvciBub3QgaXQgb25seSBpbXBsZW1lbnRzIGNyZWF0ZU5ld1BhZ2UsIHNob3dQYWdl
IGFuZCBjbG9zZVBhZ2UKKyAgICAgICAgY2FsbGJhY2tzIGZyb20gdGhlIFVJIGNsaWVudC4KKwor
ICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuY3BwOgorICAgICAgICAo
d2Via2l0V2ViVmlld0NyZWF0ZSk6IERlZmF1bHQgaW1wbGVtZW50YXRpb24gdGhhdCBzaW1wbHkg
cmV0dXJucyBOVUxMLgorICAgICAgICAoY3JlYXRlTmV3UGFnZSk6IEVtaXQgY3JlYXRlIHNpZ25h
bCB0byBnZXQgdGhlIG5ld2x5IGNyZWF0ZWQgdmlldy4KKyAgICAgICAgKHNob3dQYWdlKTogRW1p
dCByZWFkeSBzaWduYWwuCisgICAgICAgIChjbG9zZVBhZ2UpOiBFbWl0IGNsb3NlIHNpZ25hbC4K
KyAgICAgICAgKHdlYmtpdFdlYlZpZXdVSUNsaWVudEluaXQpOgorICAgICAgICAod2Via2l0V2Vi
Vmlld0NvbnN0cnVjdGVkKTogSW5pdGlhbGl6ZSBVSSBjbGllbnQuCisgICAgICAgICh3ZWJraXRX
ZWJWaWV3QWNjdW11bGF0b3JPYmplY3RIYW5kbGVkKToKKyAgICAgICAgKHdlYmtpdF93ZWJfdmll
d19jbGFzc19pbml0KTogQWRkIGNyZWF0ZSwgcmVhZHkgYW5kIGNsb3NlIHNpZ25hbHMuCisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5oOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvZ3RrL3Rlc3RzL3Rlc3R3ZWJ2aWV3LmM6CisgICAgICAgIChnZXRVUklGb3JQYXRo
KToKKyAgICAgICAgKHNlcnZlckNhbGxiYWNrKToKKyAgICAgICAgKHdlYlZpZXdGaXh0dXJlU2V0
dXApOgorICAgICAgICAod2ViVmlld0ZpeHR1cmVUZWFyZG93bik6CisgICAgICAgICh2aWV3Q2xv
c2UpOgorICAgICAgICAodmlld1JlYWR5KToKKyAgICAgICAgKHZpZXdDcmVhdGUpOgorICAgICAg
ICAodGVzdFdlYlZpZXdDcmVhdGVOZXdWaWV3KToKKyAgICAgICAgKG1haW4pOgorICAgICAgICAq
IFVJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdDJtYXJzaGFsLmxpc3Q6CisKKzIwMTEtMTAtMTAgIENh
cmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgorCiAgICAgICAgIFtHVEtd
IEFkZCBtZXRob2RzIHRvIHJlbG9hZCB0aGUgdmlldyB0byBXZWJLaXQyIEdUSysgQVBJCiAgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02OTYxMwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmNw
cCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuY3BwCmlu
ZGV4IDVmZWY1MDguLjE2OTkxNDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuY3BwCkBAIC0yMCw2ICsyMCw3IEBACiAjaW5jbHVkZSAi
Y29uZmlnLmgiCiAjaW5jbHVkZSAiV2ViS2l0V2ViVmlldy5oIgogCisjaW5jbHVkZSAiV2ViS2l0
TWFyc2hhbC5oIgogI2luY2x1ZGUgIldlYktpdFdlYkNvbnRleHRQcml2YXRlLmgiCiAjaW5jbHVk
ZSAiV2ViS2l0V2ViTG9hZGVyQ2xpZW50LmgiCiAjaW5jbHVkZSAiV2ViS2l0V2ViVmlld0Jhc2VQ
cml2YXRlLmgiCkBAIC0zNiw2ICszNywxNCBAQCB1c2luZyBuYW1lc3BhY2UgV2ViS2l0OwogdXNp
bmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIGVudW0geworICAgIENSRUFURSwKKyAgICBSRUFEWSwK
KyAgICBDTE9TRSwKKworICAgIExBU1RfU0lHTkFMCit9OworCitlbnVtIHsKICAgICBQUk9QXzAs
CiAKICAgICBQUk9QX1dFQl9DT05URVhUCkBAIC00Nyw4ICs1Niw4NiBAQCBzdHJ1Y3QgX1dlYktp
dFdlYlZpZXdQcml2YXRlIHsKICAgICBHUmVmUHRyPFdlYktpdFdlYkxvYWRlckNsaWVudD4gbG9h
ZGVyQ2xpZW50OwogfTsKIAorc3RhdGljIGd1aW50IHNpZ25hbHNbTEFTVF9TSUdOQUxdID0geyAw
LCB9OworCiBHX0RFRklORV9UWVBFKFdlYktpdFdlYlZpZXcsIHdlYmtpdF93ZWJfdmlldywgV0VC
S0lUX1RZUEVfV0VCX1ZJRVdfQkFTRSkKIAorc3RhdGljIEd0a1dpZGdldCogd2Via2l0V2ViVmll
d0NyZWF0ZShXZWJLaXRXZWJWaWV3KikKK3sKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIFdL
UGFnZVJlZiBjcmVhdGVOZXdQYWdlKFdLUGFnZVJlZiBwYWdlLCBXS1VSTFJlcXVlc3RSZWYgcmVx
dWVzdCwgV0tEaWN0aW9uYXJ5UmVmIGZlYXR1cmVzLCBXS0V2ZW50TW9kaWZpZXJzIG1vZGlmaWVy
cywgV0tFdmVudE1vdXNlQnV0dG9uIGJ1dHRvbiwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sK
KyAgICBXZWJLaXRXZWJWaWV3KiBuZXdXZWJWaWV3OworICAgIGdfc2lnbmFsX2VtaXQoV0VCS0lU
X1dFQl9WSUVXKGNsaWVudEluZm8pLCBzaWduYWxzW0NSRUFURV0sIDAsICZuZXdXZWJWaWV3KTsK
KyAgICBpZiAoIW5ld1dlYlZpZXcpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIHN0
YXRpY19jYXN0PFdLUGFnZVJlZj4oV0tSZXRhaW4odG9BUEkod2Via2l0V2ViVmlld0Jhc2VHZXRQ
YWdlKFdFQktJVF9XRUJfVklFV19CQVNFKG5ld1dlYlZpZXcpKSkpKTsKK30KKworc3RhdGljIHZv
aWQgc2hvd1BhZ2UoV0tQYWdlUmVmIHBhZ2UsIGNvbnN0IHZvaWQgKmNsaWVudEluZm8pCit7Cisg
ICAgZ19zaWduYWxfZW1pdChXRUJLSVRfV0VCX1ZJRVcoY2xpZW50SW5mbyksIHNpZ25hbHNbUkVB
RFldLCAwLCBOVUxMKTsKK30KKworc3RhdGljIHZvaWQgY2xvc2VQYWdlKFdLUGFnZVJlZiBwYWdl
LCBjb25zdCB2b2lkICpjbGllbnRJbmZvKQoreworICAgIGdfc2lnbmFsX2VtaXQoV0VCS0lUX1dF
Ql9WSUVXKGNsaWVudEluZm8pLCBzaWduYWxzW0NMT1NFXSwgMCwgTlVMTCk7Cit9CisKK3N0YXRp
YyB2b2lkIHdlYmtpdFdlYlZpZXdVSUNsaWVudEluaXQoV2ViS2l0V2ViVmlldyogd2ViVmlldykK
K3sKKyAgICBXS1BhZ2VVSUNsaWVudCB1aUNsaWVudCA9IHsKKyAgICAgICAga1dLUGFnZVVJQ2xp
ZW50Q3VycmVudFZlcnNpb24sCisgICAgICAgIHdlYlZpZXcsLyogY2xpZW50SW5mbyAqLworICAg
ICAgICAwLCAgICAgIC8qIGNyZWF0ZU5ld1BhZ2VfZGVwcmVjYXRlZEZvclVzZVdpdGhWMCAqLwor
ICAgICAgICBzaG93UGFnZSwKKyAgICAgICAgY2xvc2VQYWdlLAorICAgICAgICAwLCAgICAgIC8q
IHRha2VGb2N1cyAqLworICAgICAgICAwLCAgICAgIC8qIGZvY3VzICovCisgICAgICAgIDAsICAg
ICAgLyogdW5mb2N1cyAqLworICAgICAgICAwLCAgICAgIC8qIHJ1bkphdmFTY3JpcHRBbGVydCAq
LworICAgICAgICAwLCAgICAgIC8qIHJ1bkphdmFTY3JpcHRDb25maXJtICovCisgICAgICAgIDAs
ICAgICAgLyogcnVuSmF2YVNjcmlwdFByb21wdCAqLworICAgICAgICAwLCAgICAgIC8qIHNldFN0
YXR1c1RleHQgKi8KKyAgICAgICAgMCwgICAgICAvKiBtb3VzZURpZE1vdmVPdmVyRWxlbWVudF9k
ZXByZWNhdGVkRm9yVXNlV2l0aFYwICovCisgICAgICAgIDAsICAgICAgLyogbWlzc2luZ1BsdWdp
bkJ1dHRvbkNsaWNrZWQgKi8KKyAgICAgICAgMCwgICAgICAvKiBkaWROb3RIYW5kbGVLZXlFdmVu
dCAqLworICAgICAgICAwLCAgICAgIC8qIGRpZE5vdEhhbmRsZVdoZWVsRXZlbnQgKi8KKyAgICAg
ICAgMCwgICAgICAvKiB0b29sYmFyc0FyZVZpc2libGUgKi8KKyAgICAgICAgMCwgICAgICAvKiBz
ZXRUb29sYmFyc0FyZVZpc2libGUgKi8KKyAgICAgICAgMCwgICAgICAvKiBtZW51QmFySXNWaXNp
YmxlICovCisgICAgICAgIDAsICAgICAgLyogc2V0TWVudUJhcklzVmlzaWJsZSAqLworICAgICAg
ICAwLCAgICAgIC8qIHN0YXR1c0JhcklzVmlzaWJsZSAqLworICAgICAgICAwLCAgICAgIC8qIHNl
dFN0YXR1c0JhcklzVmlzaWJsZSAqLworICAgICAgICAwLCAgICAgIC8qIGlzUmVzaXphYmxlICov
CisgICAgICAgIDAsICAgICAgLyogc2V0SXNSZXNpemFibGUgKi8KKyAgICAgICAgMCwgICAgICAv
KiBnZXRXaW5kb3dGcmFtZSAqLworICAgICAgICAwLCAgICAgIC8qIHNldFdpbmRvd0ZyYW1lICov
CisgICAgICAgIDAsICAgICAgLyogcnVuQmVmb3JlVW5sb2FkQ29uZmlybVBhbmVsICovCisgICAg
ICAgIDAsICAgICAgLyogZGlkRHJhdyAqLworICAgICAgICAwLCAgICAgIC8qIHBhZ2VEaWRTY3Jv
bGwgKi8KKyAgICAgICAgMCwgICAgICAvKiBleGNlZWRlZERhdGFiYXNlUXVvdGEgKi8KKyAgICAg
ICAgMCwgICAgICAvKiBydW5PcGVuUGFuZWwgKi8KKyAgICAgICAgMCwgICAgICAvKiBkZWNpZGVQ
b2xpY3lGb3JHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0ICovCisgICAgICAgIDAsICAgICAg
LyogaGVhZGVySGVpZ2h0ICovCisgICAgICAgIDAsICAgICAgLyogZm9vdGVySGVpZ2h0ICovCisg
ICAgICAgIDAsICAgICAgLyogZHJhd0hlYWRlciAqLworICAgICAgICAwLCAgICAgIC8qIGRyYXdG
b290ZXIgKi8KKyAgICAgICAgMCwgICAgICAvKiBwcmludEZyYW1lICovCisgICAgICAgIDAsICAg
ICAgLyogcnVuTW9kYWwgKi8KKyAgICAgICAgMCwgICAgICAvKiBkaWRDb21wbGV0ZVJ1YmJlckJh
bmRGb3JNYWluRnJhbWUgKi8KKyAgICAgICAgMCwgICAgICAvKiBzYXZlRGF0YVRvRmlsZUluRG93
bmxvYWRzRm9sZGVyICovCisgICAgICAgIDAsICAgICAgLyogc2hvdWxkSW50ZXJydXB0SmF2YVNj
cmlwdCAqLworICAgICAgICBjcmVhdGVOZXdQYWdlLAorICAgICAgICAwLCAgICAgIC8qIG1vdXNl
RGlkTW92ZU92ZXJFbGVtZW50ICovCisgICAgfTsKKyAgICBXZWJQYWdlUHJveHkqIHBhZ2UgPSB3
ZWJraXRXZWJWaWV3QmFzZUdldFBhZ2UoV0VCS0lUX1dFQl9WSUVXX0JBU0Uod2ViVmlldykpOwor
ICAgIFdLUGFnZVNldFBhZ2VVSUNsaWVudCh0b0FQSShwYWdlKSwgJnVpQ2xpZW50KTsKK30KKwog
c3RhdGljIHZvaWQgd2Via2l0V2ViVmlld0NvbnN0cnVjdGVkKEdPYmplY3QqIG9iamVjdCkKIHsK
ICAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKG9iamVjdCk7CkBA
IC01Nyw2ICsxNDQsOCBAQCBzdGF0aWMgdm9pZCB3ZWJraXRXZWJWaWV3Q29uc3RydWN0ZWQoR09i
amVjdCogb2JqZWN0KQogICAgIHdlYmtpdFdlYlZpZXdCYXNlQ3JlYXRlV2ViUGFnZShXRUJLSVRf
V0VCX1ZJRVdfQkFTRSh3ZWJWaWV3KSwgd2Via2l0V2ViQ29udGV4dEdldFdLQ29udGV4dChwcml2
LT5jb250ZXh0KSwgMCk7CiAKICAgICBwcml2LT5sb2FkZXJDbGllbnQgPSBhZG9wdEdSZWYoV0VC
S0lUX1dFQl9MT0FERVJfQ0xJRU5UKGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9XRUJfTE9BREVS
X0NMSUVOVCwgIndlYi12aWV3Iiwgd2ViVmlldywgTlVMTCkpKTsKKworICAgIHdlYmtpdFdlYlZp
ZXdVSUNsaWVudEluaXQod2ViVmlldyk7CiB9CiAKIHN0YXRpYyB2b2lkIHdlYmtpdFdlYlZpZXdT
ZXRQcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BJZCwgY29uc3QgR1ZhbHVlKiB2
YWx1ZSwgR1BhcmFtU3BlYyogcGFyYW1TcGVjKQpAQCAtOTgsNiArMTg3LDE1IEBAIHN0YXRpYyB2
b2lkIHdlYmtpdF93ZWJfdmlld19pbml0KFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCiAgICAgbmV3
IChwcml2KSBXZWJLaXRXZWJWaWV3UHJpdmF0ZSgpOwogfQogCitzdGF0aWMgZ2Jvb2xlYW4gd2Vi
a2l0V2ViVmlld0FjY3VtdWxhdG9yT2JqZWN0SGFuZGxlZChHU2lnbmFsSW52b2NhdGlvbkhpbnQq
LCBHVmFsdWUqIHJldHVyblZhbHVlLCBjb25zdCBHVmFsdWUqIGhhbmRsZXJSZXR1cm4sIGdwb2lu
dGVyKQoreworICAgIGdwb2ludGVyIG9iamVjdCA9IGdfdmFsdWVfZ2V0X29iamVjdChoYW5kbGVy
UmV0dXJuKTsKKyAgICBpZiAob2JqZWN0KQorICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QocmV0
dXJuVmFsdWUsIG9iamVjdCk7CisKKyAgICByZXR1cm4gIW9iamVjdDsKK30KKwogc3RhdGljIHZv
aWQgd2Via2l0X3dlYl92aWV3X2NsYXNzX2luaXQoV2ViS2l0V2ViVmlld0NsYXNzKiB3ZWJWaWV3
Q2xhc3MpCiB7CiAgICAgR09iamVjdENsYXNzKiBnT2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFT
Uyh3ZWJWaWV3Q2xhc3MpOwpAQCAtMTA3LDYgKzIwNSw4IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF93
ZWJfdmlld19jbGFzc19pbml0KFdlYktpdFdlYlZpZXdDbGFzcyogd2ViVmlld0NsYXNzKQogICAg
IGdPYmplY3RDbGFzcy0+Z2V0X3Byb3BlcnR5ID0gd2Via2l0V2ViVmlld0dldFByb3BlcnR5Owog
ICAgIGdPYmplY3RDbGFzcy0+ZmluYWxpemUgPSB3ZWJraXRXZWJWaWV3RmluYWxpemU7CiAKKyAg
ICB3ZWJWaWV3Q2xhc3MtPmNyZWF0ZSA9IHdlYmtpdFdlYlZpZXdDcmVhdGU7CisKICAgICBnX3R5
cGVfY2xhc3NfYWRkX3ByaXZhdGUod2ViVmlld0NsYXNzLCBzaXplb2YoV2ViS2l0V2ViVmlld1By
aXZhdGUpKTsKIAogICAgIC8qKgpAQCAtMTIxLDYgKzIyMSw2OSBAQCBzdGF0aWMgdm9pZCB3ZWJr
aXRfd2ViX3ZpZXdfY2xhc3NfaW5pdChXZWJLaXRXZWJWaWV3Q2xhc3MqIHdlYlZpZXdDbGFzcykK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IlRoZSB3ZWIgY29udGV4dCBmb3IgdGhlIHZpZXciLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfVFlQRV9XRUJfQ09OVEVYVCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c3RhdGljX2Nhc3Q8R1BhcmFtRmxhZ3M+KFdFQktJVF9QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFN
X0NPTlNUUlVDVF9PTkxZKSkpOworCisgICAgLyoqCisgICAgICogV2ViS2l0V2ViVmlldzo6Y3Jl
YXRlOgorICAgICAqIEB3ZWJfdmlldzogdGhlIG9iamVjdCBvbiB3aGljaCB0aGUgc2lnbmFsIGlz
IGVtaXR0ZWQKKyAgICAgKgorICAgICAqIEVtaXR0ZWQgd2hlbiB0aGUgY3JlYXRpb24gb2YgYSBu
ZXcgdmlldyBpcyByZXF1ZXN0ZWQuCisgICAgICogSWYgdGhpcyBzaWduYWwgaXMgaGFuZGxlZCB0
aGUgc2lnbmFsIGhhbmRsZXIgc2hvdWxkIHJldHVybiB0aGUKKyAgICAgKiBuZXdseSBjcmVhdGVk
ICNXZWJLaXRXZWJWaWV3LgorICAgICAqCisgICAgICogVGhlIG5ldyAjV2ViS2l0V2ViVmlldyBz
aG91bGQgbm90IGJlIGRpc3BsYXllZCB0byB0aGUgdXNlcgorICAgICAqIHVudGlsIHRoZSAjV2Vi
S2l0V2ViVmlldzo6cmVhZHkgc2lnbmFsIGlzIGVtaXR0ZWQuCisgICAgICoKKyAgICAgKiBUaGUg
c2lnbmFsIGhhbmRsZXJzIHNob3VsZCBub3QgdHJ5IHRvIGRlYWwgd2l0aCB0aGUgcmVmZXJlbmNl
IGNvdW50IGZvcgorICAgICAqIHRoZSBuZXcgI1dlYktpdFdlYlZpZXcuIFRoZSB3aWRnZXQgdG8g
d2hpY2ggdGhlIHdpZGdldCBpcyBhZGRlZCB3aWxsCisgICAgICogaGFuZGxlIHRoYXQuCisgICAg
ICoKKyAgICAgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IGEgbmV3bHkgYWxsb2NhdGVkICNX
ZWJLaXRXZWJWaWV3IHdpZGdldCwgb3IgJU5VTEwKKyAgICAgKi8KKyAgICBzaWduYWxzW0NSRUFU
RV0gPQorICAgICAgICBnX3NpZ25hbF9uZXcoImNyZWF0ZSIsCisgICAgICAgICAgICAgICAgICAg
ICBHX1RZUEVfRlJPTV9DTEFTUyh3ZWJWaWV3Q2xhc3MpLAorICAgICAgICAgICAgICAgICAgICAg
R19TSUdOQUxfUlVOX0xBU1QsCisgICAgICAgICAgICAgICAgICAgICBHX1NUUlVDVF9PRkZTRVQo
V2ViS2l0V2ViVmlld0NsYXNzLCBjcmVhdGUpLAorICAgICAgICAgICAgICAgICAgICAgd2Via2l0
V2ViVmlld0FjY3VtdWxhdG9yT2JqZWN0SGFuZGxlZCwgMCwKKyAgICAgICAgICAgICAgICAgICAg
IHdlYmtpdF9tYXJzaGFsX09CSkVDVF9fVk9JRCwKKyAgICAgICAgICAgICAgICAgICAgIEdUS19U
WVBFX1dJREdFVCwgMCk7CisKKyAgICAvKioKKyAgICAgKiBXZWJLaXRXZWJWaWV3OjpyZWFkeToK
KyAgICAgKiBAd2ViX3ZpZXc6IHRoZSBvYmplY3Qgb24gd2hpY2ggdGhlIHNpZ25hbCBpcyBlbWl0
dGVkCisgICAgICoKKyAgICAgKiBFbWl0dGVkIGFmdGVyICNXZWJLaXRXZWJWaWV3OjpjcmVhdGUg
b24gdGhlIG5ld2x5IGNyZWF0ZWQgI1dlYktpdFdlYlZpZXcKKyAgICAgKiB3aGVuIGl0IHNob3Vs
ZCBiZSBkaXNwbGF5ZWQgdG8gdGhlIHVzZXIuIFdoZW4gdGhpcyBzaWduYWwgaXMgZW1pdHRlZAor
ICAgICAqIGFsbCB0aGUgaW5mb3JtYXRpb24gYWJvdXQgaG93IHRoZSB3aW5kb3cgc2hvdWxkIGxv
b2ssIGluY2x1ZGluZworICAgICAqIHNpemUsIHBvc2l0aW9uLCB3aGV0aGVyIHRoZSBsb2NhdGlv
biwgc3RhdHVzIGFuZCBzY3JvbGwgYmFycworICAgICAqIHNob3VsZCBiZSBkaXNwbGF5ZWQsIGlz
IGFscmVhZHkgc2V0LgorICAgICAqLworICAgIHNpZ25hbHNbUkVBRFldID0KKyAgICAgICAgZ19z
aWduYWxfbmV3KCJyZWFkeSIsCisgICAgICAgICAgICAgICAgICAgICBHX1RZUEVfRlJPTV9DTEFT
Uyh3ZWJWaWV3Q2xhc3MpLAorICAgICAgICAgICAgICAgICAgICAgR19TSUdOQUxfUlVOX0xBU1Qs
CisgICAgICAgICAgICAgICAgICAgICBHX1NUUlVDVF9PRkZTRVQoV2ViS2l0V2ViVmlld0NsYXNz
LCByZWFkeSksCisgICAgICAgICAgICAgICAgICAgICAwLCAwLAorICAgICAgICAgICAgICAgICAg
ICAgZ19jY2xvc3VyZV9tYXJzaGFsX1ZPSURfX1ZPSUQsCisgICAgICAgICAgICAgICAgICAgICBH
X1RZUEVfTk9ORSwgMCk7CisKKyAgICAvKioKKyAgICAgKiBXZWJLaXRXZWJWaWV3OjpjbG9zZToK
KyAgICAgKiBAd2ViVmlldzogdGhlIG9iamVjdCBvbiB3aGljaCB0aGUgc2lnbmFsIGlzIGVtaXR0
ZWQKKyAgICAgKgorICAgICAqIEVtaXR0ZWQgd2hlbiBjbG9zaW5nIGEgI1dlYktpdFdlYlZpZXcg
aXMgcmVxdWVzdGVkLiBUaGlzIG9jY3VycyB3aGVuIGEKKyAgICAgKiBjYWxsIGlzIG1hZGUgZnJv
bSBKYXZhU2NyaXB0J3Mgd2luZG93LmNsb3NlIGZ1bmN0aW9uLgorICAgICAqIEl0IGlzIHRoZSBv
d25lcidzIHJlc3BvbnNpYmlsaXR5IHRvIGhhbmRsZSB0aGlzIHNpZ25hbCB0byBoaWRlIG9yCisg
ICAgICogZGVsZXRlIHRoZSB3ZWIgdmlldywgaWYgbmVjZXNzYXJ5LgorICAgICAqLworICAgIHNp
Z25hbHNbQ0xPU0VdID0KKyAgICAgICAgZ19zaWduYWxfbmV3KCJjbG9zZSIsCisgICAgICAgICAg
ICAgICAgICAgICBHX1RZUEVfRlJPTV9DTEFTUyh3ZWJWaWV3Q2xhc3MpLAorICAgICAgICAgICAg
ICAgICAgICAgR19TSUdOQUxfUlVOX0xBU1QsCisgICAgICAgICAgICAgICAgICAgICBHX1NUUlVD
VF9PRkZTRVQoV2ViS2l0V2ViVmlld0NsYXNzLCBjbG9zZSksCisgICAgICAgICAgICAgICAgICAg
ICAwLCAwLAorICAgICAgICAgICAgICAgICAgICAgZ19jY2xvc3VyZV9tYXJzaGFsX1ZPSURfX1ZP
SUQsCisgICAgICAgICAgICAgICAgICAgICBHX1RZUEVfTk9ORSwgMCk7CiB9CiAKIC8vIFB1Ymxp
YyBBUEkuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJL
aXRXZWJWaWV3LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJW
aWV3LmgKaW5kZXggMDFkOTcyZS4uYjcwZjM3MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuaApAQCAtNTUsNiArNTUsMTAgQEAgc3RydWN0
IF9XZWJLaXRXZWJWaWV3IHsKIHN0cnVjdCBfV2ViS2l0V2ViVmlld0NsYXNzIHsKICAgICBXZWJL
aXRXZWJWaWV3QmFzZUNsYXNzIHBhcmVudDsKIAorICAgIEd0a1dpZGdldCAqKCogY3JlYXRlKSAo
V2ViS2l0V2ViVmlldyAqd2ViX3ZpZXcpOworICAgIHZvaWQgICAgICAgKCogcmVhZHkpICAoV2Vi
S2l0V2ViVmlldyAqd2ViX3ZpZXcpOworICAgIHZvaWQgICAgICAgKCogY2xvc2UpICAoV2ViS2l0
V2ViVmlldyAqd2ViX3ZpZXcpOworCiAgICAgLyogUGFkZGluZyBmb3IgZnV0dXJlIGV4cGFuc2lv
biAqLwogICAgIHZvaWQgKCpfd2Via2l0X3Jlc2VydmVkMCkgKHZvaWQpOwogICAgIHZvaWQgKCpf
d2Via2l0X3Jlc2VydmVkMSkgKHZvaWQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvdGVzdHMvdGVzdHdlYnZpZXcuYyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL3Rlc3RzL3Rlc3R3ZWJ2aWV3LmMKaW5kZXggOWEyN2FmZS4uM2MwOTZjMyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvdGVzdHdl
YnZpZXcuYworKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy90ZXN0
d2Vidmlldy5jCkBAIC0xOSw4ICsxOSwxMjcgQEAKIAogI2luY2x1ZGUgPGdsaWIuaD4KICNpbmNs
dWRlIDxndGsvZ3RrLmg+CisjaW5jbHVkZSA8bGlic291cC9zb3VwLmg+CisjaW5jbHVkZSA8c3Ry
aW5nLmg+CiAjaW5jbHVkZSA8d2Via2l0Mi93ZWJraXQyLmg+CiAKK1NvdXBVUkkgKmJhc2VVUkk7
CisKK3N0YXRpYyBjaGFyICpnZXRVUklGb3JQYXRoKGNvbnN0IGNoYXIqIHBhdGgpCit7CisgICAg
U291cFVSSSAqdXJpOworICAgIGNoYXIgKnVyaVN0cmluZzsKKworICAgIHVyaSA9IHNvdXBfdXJp
X25ld193aXRoX2Jhc2UoYmFzZVVSSSwgcGF0aCk7CisgICAgdXJpU3RyaW5nID0gc291cF91cmlf
dG9fc3RyaW5nKHVyaSwgRkFMU0UpOworICAgIHNvdXBfdXJpX2ZyZWUodXJpKTsKKworICAgIHJl
dHVybiB1cmlTdHJpbmc7Cit9CisKK3N0YXRpYyB2b2lkIHNlcnZlckNhbGxiYWNrKFNvdXBTZXJ2
ZXIqIHNlcnZlciwgU291cE1lc3NhZ2UqIG1zZywgY29uc3QgY2hhciogcGF0aCwgR0hhc2hUYWJs
ZSogcXVlcnksIFNvdXBDbGllbnRDb250ZXh0KiBjb250ZXh0LCBncG9pbnRlciBkYXRhKQorewor
ICAgIHN0YXRpYyBjb25zdCBjaGFyICpodG1sT25Mb2FkRm9ybWF0ID0gIjxodG1sPjxib2R5IG9u
TG9hZD1cIiVzXCI+PC9ib2R5PjwvaHRtbD4iOworICAgIGNoYXIgKmh0bWxTdHJpbmc7CisKKyAg
ICBpZiAobXNnLT5tZXRob2QgIT0gU09VUF9NRVRIT0RfR0VUKSB7CisgICAgICAgIHNvdXBfbWVz
c2FnZV9zZXRfc3RhdHVzKG1zZywgU09VUF9TVEFUVVNfTk9UX0lNUExFTUVOVEVEKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1zZywgU09V
UF9TVEFUVVNfT0spOworCisgICAgaWYgKGdfc3RyX2VxdWFsKHBhdGgsICIvdGVzdF9jcmVhdGVf
bmV3X3ZpZXciKSkgeworICAgICAgICBjaGFyICp1cmlTdHJpbmcgPSBnZXRVUklGb3JQYXRoKCIv
bmV3X3dpbmRvdyIpOworICAgICAgICBjaGFyICp3aW5kb3dPcGVuU3RyaW5nID0gZ19zdHJkdXBf
cHJpbnRmKCJ3aW5kb3cub3BlbignJXMnKSIsIHVyaVN0cmluZyk7CisKKyAgICAgICAgaHRtbFN0
cmluZyA9IGdfc3RyZHVwX3ByaW50ZihodG1sT25Mb2FkRm9ybWF0LCB3aW5kb3dPcGVuU3RyaW5n
KTsKKyAgICAgICAgZ19mcmVlKHVyaVN0cmluZyk7CisgICAgICAgIGdfZnJlZSh3aW5kb3dPcGVu
U3RyaW5nKTsKKyAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1zZy0+cmVzcG9uc2Vf
Ym9keSwgU09VUF9NRU1PUllfVEFLRSwgaHRtbFN0cmluZywgc3RybGVuKGh0bWxTdHJpbmcpKTsK
KyAgICB9IGVsc2UgaWYgKGdfc3RyX2VxdWFsKHBhdGgsICIvbmV3X3dpbmRvdyIpKSB7CisgICAg
ICAgIGh0bWxTdHJpbmcgPSBnX3N0cmR1cF9wcmludGYoaHRtbE9uTG9hZEZvcm1hdCwgInNlbGYu
Y2xvc2UoKTsiKTsKKyAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1zZy0+cmVzcG9u
c2VfYm9keSwgU09VUF9NRU1PUllfVEFLRSwgaHRtbFN0cmluZywgc3RybGVuKGh0bWxTdHJpbmcp
KTsKKyAgICB9CisKKyAgICBzb3VwX21lc3NhZ2VfYm9keV9jb21wbGV0ZShtc2ctPnJlc3BvbnNl
X2JvZHkpOworfQorCit0eXBlZGVmIHN0cnVjdCB7CisgICAgV2ViS2l0V2ViVmlldyAqd2ViVmll
dzsKKyAgICBHTWFpbkxvb3AgKmxvb3A7CisKKyAgICBnYm9vbGVhbiBoYXNCZWVuQ3JlYXRlOwor
ICAgIGdib29sZWFuIGhhc0JlZW5SZWFkeTsKKyAgICBnYm9vbGVhbiBoYXNCZWVuQ2xvc2U7Cit9
IFdlYlZpZXdGaXh0dXJlOworCitzdGF0aWMgdm9pZCB3ZWJWaWV3Rml4dHVyZVNldHVwKFdlYlZp
ZXdGaXh0dXJlICpmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCit7CisgICAgZml4dHVyZS0+
d2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOworICAgIGZp
eHR1cmUtPmxvb3AgPSBnX21haW5fbG9vcF9uZXcoTlVMTCwgVFJVRSk7CisgICAgZ19vYmplY3Rf
cmVmX3NpbmsoZml4dHVyZS0+d2ViVmlldyk7CisKKyAgICBmaXh0dXJlLT5oYXNCZWVuQ3JlYXRl
ID0gRkFMU0U7CisgICAgZml4dHVyZS0+aGFzQmVlblJlYWR5ID0gRkFMU0U7CisgICAgZml4dHVy
ZS0+aGFzQmVlbkNsb3NlID0gRkFMU0U7Cit9CisKK3N0YXRpYyB2b2lkIHdlYlZpZXdGaXh0dXJl
VGVhcmRvd24oV2ViVmlld0ZpeHR1cmUgKmZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKK3sK
KyAgICBnX29iamVjdF91bnJlZihmaXh0dXJlLT53ZWJWaWV3KTsKKyAgICBnX21haW5fbG9vcF91
bnJlZihmaXh0dXJlLT5sb29wKTsKK30KKworc3RhdGljIHZvaWQgdmlld0Nsb3NlKFdlYktpdFdl
YlZpZXcgKndlYlZpZXcsIFdlYlZpZXdGaXh0dXJlICpmaXh0dXJlKQoreworICAgIGdfYXNzZXJ0
KGZpeHR1cmUtPmhhc0JlZW5DcmVhdGUpOworICAgIGdfYXNzZXJ0KGZpeHR1cmUtPmhhc0JlZW5S
ZWFkeSk7CisgICAgZ19hc3NlcnQoIWZpeHR1cmUtPmhhc0JlZW5DbG9zZSk7CisgICAgZml4dHVy
ZS0+aGFzQmVlbkNsb3NlID0gVFJVRTsKKworICAgIGdfb2JqZWN0X3VucmVmKHdlYlZpZXcpOwor
ICAgIGdfbWFpbl9sb29wX3F1aXQoZml4dHVyZS0+bG9vcCk7Cit9CisKK3N0YXRpYyB2b2lkIHZp
ZXdSZWFkeShXZWJLaXRXZWJWaWV3ICp3ZWJWaWV3LCBXZWJWaWV3Rml4dHVyZSAqZml4dHVyZSkK
K3sKKyAgICBnX2Fzc2VydChmaXh0dXJlLT5oYXNCZWVuQ3JlYXRlKTsKKyAgICBnX2Fzc2VydCgh
Zml4dHVyZS0+aGFzQmVlblJlYWR5KTsKKyAgICBmaXh0dXJlLT5oYXNCZWVuUmVhZHkgPSBUUlVF
OworfQorCitzdGF0aWMgR3RrV2lkZ2V0ICp2aWV3Q3JlYXRlKFdlYktpdFdlYlZpZXcgKndlYlZp
ZXcsIFdlYlZpZXdGaXh0dXJlICpmaXh0dXJlKQoreworICAgIEd0a1dpZGdldCAqbmV3V2ViVmll
dyA9IHdlYmtpdF93ZWJfdmlld19uZXdfd2l0aF9jb250ZXh0KHdlYmtpdF93ZWJfdmlld19nZXRf
Y29udGV4dCh3ZWJWaWV3KSk7CisgICAgZ19vYmplY3RfcmVmX3NpbmsobmV3V2ViVmlldyk7CisK
KyAgICBnX2Fzc2VydCghZml4dHVyZS0+aGFzQmVlbkNyZWF0ZSk7CisgICAgZml4dHVyZS0+aGFz
QmVlbkNyZWF0ZSA9IFRSVUU7CisKKyAgICBnX3NpZ25hbF9jb25uZWN0KG5ld1dlYlZpZXcsICJy
ZWFkeSIsIEdfQ0FMTEJBQ0sodmlld1JlYWR5KSwgZml4dHVyZSk7CisgICAgZ19zaWduYWxfY29u
bmVjdChuZXdXZWJWaWV3LCAiY2xvc2UiLCBHX0NBTExCQUNLKHZpZXdDbG9zZSksIGZpeHR1cmUp
OworCisgICAgcmV0dXJuIG5ld1dlYlZpZXc7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJWaWV3
Q3JlYXRlTmV3VmlldyhXZWJWaWV3Rml4dHVyZSAqZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRh
KQoreworICAgIGNoYXIgKnVyaVN0cmluZzsKKworICAgIGdfc2lnbmFsX2Nvbm5lY3QoZml4dHVy
ZS0+d2ViVmlldywgImNyZWF0ZSIsIEdfQ0FMTEJBQ0sodmlld0NyZWF0ZSksIGZpeHR1cmUpOwor
CisgICAgdXJpU3RyaW5nID0gZ2V0VVJJRm9yUGF0aCgiL3Rlc3RfY3JlYXRlX25ld192aWV3Iik7
CisgICAgd2Via2l0X3dlYl92aWV3X2xvYWRfdXJpKGZpeHR1cmUtPndlYlZpZXcsIHVyaVN0cmlu
Zyk7CisgICAgZ19mcmVlKHVyaVN0cmluZyk7CisKKyAgICBnX21haW5fbG9vcF9ydW4oZml4dHVy
ZS0+bG9vcCk7CisKKyAgICBnX2Fzc2VydChmaXh0dXJlLT5oYXNCZWVuQ3JlYXRlKTsKKyAgICBn
X2Fzc2VydChmaXh0dXJlLT5oYXNCZWVuUmVhZHkpOworICAgIGdfYXNzZXJ0KGZpeHR1cmUtPmhh
c0JlZW5DbG9zZSk7Cit9CisKIHN0YXRpYyB2b2lkIHRlc3RXZWJWaWV3RGVmYXVsdENvbnRleHQo
dm9pZCkKIHsKICAgICBXZWJLaXRXZWJWaWV3ICp2aWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtp
dF93ZWJfdmlld19uZXcoKSk7CkBAIC0zMSwxNCArMTUwLDI5IEBAIHN0YXRpYyB2b2lkIHRlc3RX
ZWJWaWV3RGVmYXVsdENvbnRleHQodm9pZCkKIAogaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiph
cmd2KQogeworICAgIFNvdXBTZXJ2ZXIgKnNlcnZlcjsKKwogICAgIGdfdGhyZWFkX2luaXQoTlVM
TCk7CiAgICAgZ3RrX3Rlc3RfaW5pdCgmYXJnYywgJmFyZ3YsIE5VTEwpOwogCiAgICAgZ19zZXRl
bnYoIldFQktJVF9FWEVDX1BBVEgiLCBXRUJLSVRfRVhFQ19QQVRILCBGQUxTRSk7CiAKKyAgICBz
ZXJ2ZXIgPSBzb3VwX3NlcnZlcl9uZXcoU09VUF9TRVJWRVJfUE9SVCwgMCwgTlVMTCk7CisgICAg
c291cF9zZXJ2ZXJfcnVuX2FzeW5jKHNlcnZlcik7CisKKyAgICBzb3VwX3NlcnZlcl9hZGRfaGFu
ZGxlcihzZXJ2ZXIsIE5VTEwsIHNlcnZlckNhbGxiYWNrLCBOVUxMLCBOVUxMKTsKKworICAgIGJh
c2VVUkkgPSBzb3VwX3VyaV9uZXcoImh0dHA6Ly8xMjcuMC4wLjEvIik7CisgICAgc291cF91cmlf
c2V0X3BvcnQoYmFzZVVSSSwgc291cF9zZXJ2ZXJfZ2V0X3BvcnQoc2VydmVyKSk7CisKICAgICBn
X3Rlc3RfYnVnX2Jhc2UoImh0dHBzOi8vYnVncy53ZWJraXQub3JnLyIpOwogICAgIGdfdGVzdF9h
ZGRfZnVuYygiL3dlYmtpdDIvd2Vidmlldy9kZWZhdWx0X2NvbnRleHQiLAogICAgICAgICAgICAg
ICAgICAgICB0ZXN0V2ViVmlld0RlZmF1bHRDb250ZXh0KTsKKyAgICBnX3Rlc3RfYWRkKCIvd2Vi
a2l0Mi93ZWJ2aWV3L2NyZWF0ZV9uZXdfdmlldyIsCisgICAgICAgICAgICAgICBXZWJWaWV3Rml4
dHVyZSwgTlVMTCwKKyAgICAgICAgICAgICAgIHdlYlZpZXdGaXh0dXJlU2V0dXAsCisgICAgICAg
ICAgICAgICB0ZXN0V2ViVmlld0NyZWF0ZU5ld1ZpZXcsCisgICAgICAgICAgICAgICB3ZWJWaWV3
Rml4dHVyZVRlYXJkb3duKTsKIAogICAgIHJldHVybiBnX3Rlc3RfcnVuKCk7CiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay93ZWJraXQybWFyc2hhbC5saXN0
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvd2Via2l0Mm1hcnNoYWwubGlzdApp
bmRleCBjM2ExNzg2Li5jMDQxYjkyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay93ZWJraXQybWFyc2hhbC5saXN0CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL3dlYmtpdDJtYXJzaGFsLmxpc3QKQEAgLTEsMyArMSw0IEBACiBCT09MRUFO
OlNUUklORyxQT0lOVEVSCiBCT09MRUFOOlZPSUQKK09CSkVDVDpWT0lECiAK
</data>
<flag name="review"
          id="107844"
          type_id="1"
          status="-"
          setter="mrobinson"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>111801</attachid>
            <date>2011-10-20 10:16:55 -0700</date>
            <delta_ts>2011-10-31 04:35:05 -0700</delta_ts>
            <desc>New patch</desc>
            <filename>wk2-ui-client3.diff</filename>
            <type>text/plain</type>
            <size>21495</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCA3YzMxMTYxLi5kNjQxZWMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsNDMg
QEAKIDIwMTEtMTAtMjAgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgogCisgICAgICAgIFtHVEtdIEluaXRpYWwgVUkgY2xpZW50IGltcGxlbWVudGF0aW9uIGZvciBX
ZWJLaXQyIEdUSyArQVBJCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD02OTc1MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIEZvciBub3cgaXQgb25seSBpbXBsZW1lbnRzIGNyZWF0ZU5ld1BhZ2UsIHNob3dQYWdl
IGFuZCBjbG9zZVBhZ2UKKyAgICAgICAgY2FsbGJhY2tzIG9mIHRoZSBVSSBjbGllbnQuCisKKyAg
ICAgICAgKiBHTlVtYWtlZmlsZS5hbTogQWRkIG5ldyBmaWxlcyB0byBjb21waWxhdGlvbi4KKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRVSUNsaWVudC5jcHA6IEFkZGVkLgorICAg
ICAgICAoY3JlYXRlTmV3UGFnZSk6IENhbGwgd2Via2l0V2ViVmlld0NyZWF0ZU5ld1BhZ2UuCisg
ICAgICAgIChzaG93UGFnZSk6IENhbGwgd2Via2l0V2ViVmlld1JlYWR5VG9TaG93UGFnZS4KKyAg
ICAgICAgKGNsb3NlUGFnZSk6IENhbGwgd2Via2l0V2ViVmlld0Nsb3NlUGFnZS4KKyAgICAgICAg
KHdlYmtpdFVJQ2xpZW50QXR0YWNoVUlDbGllbnRUb1BhZ2UpOiBJbml0aWFsaXplIFVJIGNsaWVu
dCBhbmQKKyAgICAgICAgYXR0YWNoIGl0IHRvIHRoZSBnaXZlbiBwYWdlLgorICAgICAgICAod2Vi
a2l0X3VpX2NsaWVudF9pbml0KToKKyAgICAgICAgKHdlYmtpdF91aV9jbGllbnRfY2xhc3NfaW5p
dCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0VUlDbGllbnQuaDogQWRkZWQu
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5jcHA6CisgICAgICAg
ICh3ZWJraXRXZWJWaWV3Q3JlYXRlKTogRGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBvZiBjcmVhdGUg
c2lnbmFsLAorICAgICAgICB0aGF0IHNpbXBseSByZXR1cm5zIDAuCisgICAgICAgICh3ZWJraXRX
ZWJWaWV3Q29uc3RydWN0ZWQpOiBDcmVhdGUgdGhlIGRlZmF1bHQgVUkgY2xpZW50LgorICAgICAg
ICAod2Via2l0V2ViVmlld0FjY3VtdWxhdG9yT2JqZWN0SGFuZGxlZCk6CisgICAgICAgICh3ZWJr
aXRfd2ViX3ZpZXdfY2xhc3NfaW5pdCk6CisgICAgICAgICh3ZWJraXRXZWJWaWV3Q3JlYXRlTmV3
UGFnZSk6IEVtaXQgY3JlYXRlIHNpZ25hbC4KKyAgICAgICAgKHdlYmtpdFdlYlZpZXdSZWFkeVRv
U2hvd1BhZ2UpOiBFbWl0IHJlYWR5LXRvLXNob3cgc2lnbmFsLgorICAgICAgICAod2Via2l0V2Vi
Vmlld0Nsb3NlUGFnZSk6IEVtaXQgY2xvc2Ugc2lnbmFsLgorICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvZ3RrL1dlYktpdFdlYlZpZXcuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJL
aXRXZWJWaWV3UHJpdmF0ZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rl
c3RXZWJLaXRXZWJWaWV3LmNwcDoKKyAgICAgICAgKHNlcnZlckNhbGxiYWNrKToKKyAgICAgICAg
KHRlc3RXZWJWaWV3Q3JlYXRlUmVhZHlDbG9zZSk6CisgICAgICAgIChiZWZvcmVBbGwpOgorICAg
ICAgICAoYWZ0ZXJBbGwpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdDJtYXJz
aGFsLmxpc3Q6CisKKzIwMTEtMTAtMjAgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBp
Z2FsaWEuY29tPgorCiAgICAgICAgIFtHVEtdIFJlbW92ZSBXZWJLaXRXZWJMb2FkZXJDbGllbnRQ
cml2YXRlCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03
MDQ4OAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbSBiL1NvdXJj
ZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFtCmluZGV4IDUyZGZlNzIuLjdiMDE2NzkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFtCisrKyBiL1NvdXJjZS9XZWJLaXQyL0dO
VW1ha2VmaWxlLmFtCkBAIC00ODAsNiArNDgwLDggQEAgbGlid2Via2l0Mmd0a19AV0VCS0lUR1RL
X0FQSV9NQUpPUl9WRVJTSU9OQF9AV0VCS0lUR1RLX0FQSV9NSU5PUl9WRVJTSU9OQF9sYV9TT1UK
IAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRQcml2YXRlLmggXAogCVNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFNldHRpbmdzLmNwcCBcCiAJU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0U2V0dGluZ3MuaCBcCisJU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0VUlDbGllbnQuY3BwIFwKKwlTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRVSUNsaWVudC5oIFwKIAlTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJDb250ZXh0LmggXAogCVNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYkNvbnRleHQuY3BwIFwKIAlTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJDb250ZXh0UHJpdmF0ZS5oIFwKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFVJQ2xpZW50LmNw
cCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFVJQ2xpZW50LmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZmY1ZmE2Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0VUlDbGllbnQuY3Bw
CkBAIC0wLDAgKzEsMTAyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwu
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRVSUNsaWVudC5oIgorCisjaW5j
bHVkZSAiV2ViS2l0V2ViVmlld1ByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIK
KyNpbmNsdWRlIDxXZWJLaXQyL1dLQmFzZS5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViS2l0Owor
CitHX0RFRklORV9UWVBFKFdlYktpdFVJQ2xpZW50LCB3ZWJraXRfdWlfY2xpZW50LCBHX1RZUEVf
T0JKRUNUKQorCitzdGF0aWMgV0tQYWdlUmVmIGNyZWF0ZU5ld1BhZ2UoV0tQYWdlUmVmIHBhZ2Us
IFdLVVJMUmVxdWVzdFJlZiwgV0tEaWN0aW9uYXJ5UmVmLCBXS0V2ZW50TW9kaWZpZXJzLCBXS0V2
ZW50TW91c2VCdXR0b24sIGNvbnN0IHZvaWQqKQoreworICAgIHJldHVybiB3ZWJraXRXZWJWaWV3
Q3JlYXRlTmV3UGFnZShXRUJLSVRfV0VCX1ZJRVcodG9JbXBsKHBhZ2UpLT52aWV3V2lkZ2V0KCkp
KTsKK30KKworc3RhdGljIHZvaWQgc2hvd1BhZ2UoV0tQYWdlUmVmIHBhZ2UsIGNvbnN0IHZvaWQq
KQoreworICAgIHdlYmtpdFdlYlZpZXdSZWFkeVRvU2hvd1BhZ2UoV0VCS0lUX1dFQl9WSUVXKHRv
SW1wbChwYWdlKS0+dmlld1dpZGdldCgpKSk7Cit9CisKK3N0YXRpYyB2b2lkIGNsb3NlUGFnZShX
S1BhZ2VSZWYgcGFnZSwgY29uc3Qgdm9pZCopCit7CisgICAgd2Via2l0V2ViVmlld0Nsb3NlUGFn
ZShXRUJLSVRfV0VCX1ZJRVcodG9JbXBsKHBhZ2UpLT52aWV3V2lkZ2V0KCkpKTsKK30KKwordm9p
ZCB3ZWJraXRVSUNsaWVudEF0dGFjaFVJQ2xpZW50VG9QYWdlKFdlYktpdFVJQ2xpZW50KiB1aUNs
aWVudCwgV0tQYWdlUmVmIHdrUGFnZSkKK3sKKyAgICBXS1BhZ2VVSUNsaWVudCB3a1VJQ2xpZW50
ID0geworICAgICAgICBrV0tQYWdlVUlDbGllbnRDdXJyZW50VmVyc2lvbiwKKyAgICAgICAgdWlD
bGllbnQsIC8vIGNsaWVudEluZm8KKyAgICAgICAgMCwgLy8gY3JlYXRlTmV3UGFnZV9kZXByZWNh
dGVkRm9yVXNlV2l0aFYwCisgICAgICAgIHNob3dQYWdlLAorICAgICAgICBjbG9zZVBhZ2UsCisg
ICAgICAgIDAsIC8vIHRha2VGb2N1cworICAgICAgICAwLCAvLyBmb2N1cworICAgICAgICAwLCAv
LyB1bmZvY3VzCisgICAgICAgIDAsIC8vIHJ1bkphdmFTY3JpcHRBbGVydAorICAgICAgICAwLCAv
LyBydW5KYXZhU2NyaXB0Q29uZmlybQorICAgICAgICAwLCAvLyBydW5KYXZhU2NyaXB0UHJvbXB0
CisgICAgICAgIDAsIC8vIHNldFN0YXR1c1RleHQKKyAgICAgICAgMCwgLy8gbW91c2VEaWRNb3Zl
T3ZlckVsZW1lbnRfZGVwcmVjYXRlZEZvclVzZVdpdGhWMAorICAgICAgICAwLCAvLyBtaXNzaW5n
UGx1Z2luQnV0dG9uQ2xpY2tlZAorICAgICAgICAwLCAvLyBkaWROb3RIYW5kbGVLZXlFdmVudAor
ICAgICAgICAwLCAvLyBkaWROb3RIYW5kbGVXaGVlbEV2ZW50CisgICAgICAgIDAsIC8vIHRvb2xi
YXJzQXJlVmlzaWJsZQorICAgICAgICAwLCAvLyBzZXRUb29sYmFyc0FyZVZpc2libGUKKyAgICAg
ICAgMCwgLy8gbWVudUJhcklzVmlzaWJsZQorICAgICAgICAwLCAvLyBzZXRNZW51QmFySXNWaXNp
YmxlCisgICAgICAgIDAsIC8vIHN0YXR1c0JhcklzVmlzaWJsZQorICAgICAgICAwLCAvLyBzZXRT
dGF0dXNCYXJJc1Zpc2libGUKKyAgICAgICAgMCwgLy8gaXNSZXNpemFibGUKKyAgICAgICAgMCwg
Ly8gc2V0SXNSZXNpemFibGUKKyAgICAgICAgMCwgLy8gZ2V0V2luZG93RnJhbWUKKyAgICAgICAg
MCwgLy8gc2V0V2luZG93RnJhbWUKKyAgICAgICAgMCwgLy8gcnVuQmVmb3JlVW5sb2FkQ29uZmly
bVBhbmVsCisgICAgICAgIDAsIC8vIGRpZERyYXcKKyAgICAgICAgMCwgLy8gcGFnZURpZFNjcm9s
bAorICAgICAgICAwLCAvLyBleGNlZWRlZERhdGFiYXNlUXVvdGEKKyAgICAgICAgMCwgLy8gcnVu
T3BlblBhbmVsCisgICAgICAgIDAsIC8vIGRlY2lkZVBvbGljeUZvckdlb2xvY2F0aW9uUGVybWlz
c2lvblJlcXVlc3QKKyAgICAgICAgMCwgLy8gaGVhZGVySGVpZ2h0CisgICAgICAgIDAsIC8vIGZv
b3RlckhlaWdodAorICAgICAgICAwLCAvLyBkcmF3SGVhZGVyCisgICAgICAgIDAsIC8vIGRyYXdG
b290ZXIKKyAgICAgICAgMCwgLy8gcHJpbnRGcmFtZQorICAgICAgICAwLCAvLyBydW5Nb2RhbAor
ICAgICAgICAwLCAvLyBkaWRDb21wbGV0ZVJ1YmJlckJhbmRGb3JNYWluRnJhbWUKKyAgICAgICAg
MCwgLy8gc2F2ZURhdGFUb0ZpbGVJbkRvd25sb2Fkc0ZvbGRlcgorICAgICAgICAwLCAvLyBzaG91
bGRJbnRlcnJ1cHRKYXZhU2NyaXB0CisgICAgICAgIGNyZWF0ZU5ld1BhZ2UsCisgICAgICAgIDAs
IC8vIG1vdXNlRGlkTW92ZU92ZXJFbGVtZW50CisgICAgfTsKKyAgICBXS1BhZ2VTZXRQYWdlVUlD
bGllbnQod2tQYWdlLCAmd2tVSUNsaWVudCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF91aV9j
bGllbnRfaW5pdChXZWJLaXRVSUNsaWVudCogY2xpZW50KQoreworfQorCitzdGF0aWMgdm9pZCB3
ZWJraXRfdWlfY2xpZW50X2NsYXNzX2luaXQoV2ViS2l0VUlDbGllbnRDbGFzcyogY2xpZW50Q2xh
c3MpCit7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXRVSUNsaWVudC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0
VUlDbGllbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YzVmNDQwCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0
VUlDbGllbnQuaApAQCAtMCwwICsxLDU2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEln
YWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorICovCisKKyNpZiAhZGVmaW5lZChfX1dFQktJVDJfSF9JTlNJREVfXykgJiYgIWRlZmluZWQo
V0VCS0lUMl9DT01QSUxBVElPTikKKyNlcnJvciAiT25seSA8d2Via2l0Mi93ZWJraXQyLmg+IGNh
biBiZSBpbmNsdWRlZCBkaXJlY3RseS4iCisjZW5kaWYKKworI2lmbmRlZiBXZWJLaXRVSUNsaWVu
dF9oCisjZGVmaW5lIFdlYktpdFVJQ2xpZW50X2gKKworI2luY2x1ZGUgPFdlYktpdDIvV2ViS2l0
Mi5oPgorI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmlu
ZSBXRUJLSVRfVFlQRV9VSV9DTElFTlQgICAgICAgICAgICAod2Via2l0X3VpX2NsaWVudF9nZXRf
dHlwZSgpKQorI2RlZmluZSBXRUJLSVRfVUlfQ0xJRU5UKG9iaikgICAgICAgICAgICAoR19UWVBF
X0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9UWVBFX1VJX0NMSUVOVCwgV2ViS2l0
VUlDbGllbnQpKQorI2RlZmluZSBXRUJLSVRfVUlfQ0xJRU5UX0NMQVNTKGtsYXNzKSAgICAoR19U
WVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9UWVBFX1VJX0NMSUVOVCwgV2Vi
S2l0VUlDbGllbnRDbGFzcykpCisjZGVmaW5lIFdFQktJVF9JU19VSV9DTElFTlQob2JqKSAgICAg
ICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX1RZUEVfVUlfQ0xJ
RU5UKSkKKyNkZWZpbmUgV0VCS0lUX0lTX1VJX0NMSUVOVF9DTEFTUyhrbGFzcykgKEdfVFlQRV9D
SEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfVFlQRV9VSV9DTElFTlQpKQorI2RlZmlu
ZSBXRUJLSVRfVUlfQ0xJRU5UX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9D
TEFTUygob2JqKSwgIFdFQktJVF9UWVBFX1VJX0NMSUVOVCwgV2ViS2l0VUlDbGllbnRDbGFzcykp
CisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRVSUNsaWVudCAgICAgIFdlYktpdFVJQ2xpZW50Owor
dHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFVJQ2xpZW50Q2xhc3MgV2ViS2l0VUlDbGllbnRDbGFzczsK
Kworc3RydWN0IF9XZWJLaXRVSUNsaWVudCB7CisgICAgR09iamVjdCBwYXJlbnQ7Cit9OworCitz
dHJ1Y3QgX1dlYktpdFVJQ2xpZW50Q2xhc3MgeworICAgIEdPYmplY3RDbGFzcyBwYXJlbnRfY2xh
c3M7Cit9OworCitHVHlwZSB3ZWJraXRfdWlfY2xpZW50X2dldF90eXBlICh2b2lkKTsKKwordm9p
ZCB3ZWJraXRVSUNsaWVudEF0dGFjaFVJQ2xpZW50VG9QYWdlKFdlYktpdFVJQ2xpZW50KiwgV0tQ
YWdlUmVmKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuY3BwCmluZGV4IDEwMjcwNTcuLjQwMzQx
NjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdl
YlZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdl
YlZpZXcuY3BwCkBAIC0yMCw2ICsyMCw4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVk
ZSAiV2ViS2l0V2ViVmlldy5oIgogCisjaW5jbHVkZSAiV2ViS2l0TWFyc2hhbC5oIgorI2luY2x1
ZGUgIldlYktpdFVJQ2xpZW50LmgiCiAjaW5jbHVkZSAiV2ViS2l0V2ViQ29udGV4dFByaXZhdGUu
aCIKICNpbmNsdWRlICJXZWJLaXRXZWJMb2FkZXJDbGllbnQuaCIKICNpbmNsdWRlICJXZWJLaXRX
ZWJMb2FkZXJDbGllbnRQcml2YXRlLmgiCkBAIC0zOCw2ICs0MCwxNCBAQCB1c2luZyBuYW1lc3Bh
Y2UgV2ViS2l0OwogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIGVudW0geworICAgIENSRUFU
RSwKKyAgICBSRUFEWV9UT19TSE9XLAorICAgIENMT1NFLAorCisgICAgTEFTVF9TSUdOQUwKK307
CisKK2VudW0gewogICAgIFBST1BfMCwKIAogICAgIFBST1BfV0VCX0NPTlRFWFQsCkBAIC01MCwx
MCArNjAsMTggQEAgc3RydWN0IF9XZWJLaXRXZWJWaWV3UHJpdmF0ZSB7CiAgICAgZG91YmxlIGVz
dGltYXRlZExvYWRQcm9ncmVzczsKIAogICAgIEdSZWZQdHI8V2ViS2l0V2ViTG9hZGVyQ2xpZW50
PiBsb2FkZXJDbGllbnQ7CisgICAgR1JlZlB0cjxXZWJLaXRVSUNsaWVudD4gdWlDbGllbnQ7CiB9
OwogCitzdGF0aWMgZ3VpbnQgc2lnbmFsc1tMQVNUX1NJR05BTF0gPSB7IDAsIH07CisKIEdfREVG
SU5FX1RZUEUoV2ViS2l0V2ViVmlldywgd2Via2l0X3dlYl92aWV3LCBXRUJLSVRfVFlQRV9XRUJf
VklFV19CQVNFKQogCitzdGF0aWMgR3RrV2lkZ2V0KiB3ZWJraXRXZWJWaWV3Q3JlYXRlKFdlYktp
dFdlYlZpZXcqKQoreworICAgIHJldHVybiAwOworfQorCiBzdGF0aWMgdm9pZCB3ZWJraXRXZWJW
aWV3Q29uc3RydWN0ZWQoR09iamVjdCogb2JqZWN0KQogewogICAgIFdlYktpdFdlYlZpZXcqIHdl
YlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcob2JqZWN0KTsKQEAgLTYzLDYgKzgxLDExIEBAIHN0YXRp
YyB2b2lkIHdlYmtpdFdlYlZpZXdDb25zdHJ1Y3RlZChHT2JqZWN0KiBvYmplY3QpCiAKICAgICBz
dGF0aWMgR1JlZlB0cjxXZWJLaXRXZWJMb2FkZXJDbGllbnQ+IGRlZmF1bHRMb2FkZXJDbGllbnQg
PSBhZG9wdEdSZWYoV0VCS0lUX1dFQl9MT0FERVJfQ0xJRU5UKGdfb2JqZWN0X25ldyhXRUJLSVRf
VFlQRV9XRUJfTE9BREVSX0NMSUVOVCwgTlVMTCkpKTsKICAgICB3ZWJraXRfd2ViX3ZpZXdfc2V0
X2xvYWRlcl9jbGllbnQod2ViVmlldywgZGVmYXVsdExvYWRlckNsaWVudC5nZXQoKSk7CisKKyAg
ICBzdGF0aWMgR1JlZlB0cjxXZWJLaXRVSUNsaWVudD4gZGVmYXVsdFVJQ2xpZW50ID0gYWRvcHRH
UmVmKFdFQktJVF9VSV9DTElFTlQoZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX1VJX0NMSUVOVCwg
TlVMTCkpKTsKKyAgICBwcml2LT51aUNsaWVudCA9IGRlZmF1bHRVSUNsaWVudC5nZXQoKTsKKyAg
ICBXZWJQYWdlUHJveHkqIHBhZ2UgPSB3ZWJraXRXZWJWaWV3QmFzZUdldFBhZ2UoV0VCS0lUX1dF
Ql9WSUVXX0JBU0Uod2ViVmlldykpOworICAgIHdlYmtpdFVJQ2xpZW50QXR0YWNoVUlDbGllbnRU
b1BhZ2UocHJpdi0+dWlDbGllbnQuZ2V0KCksIHRvQVBJKHBhZ2UpKTsKIH0KIAogc3RhdGljIHZv
aWQgd2Via2l0V2ViVmlld1NldFByb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcElk
LCBjb25zdCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwYXJhbVNwZWMpCkBAIC0xMDcsNiAr
MTMwLDE1IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJfdmlld19pbml0KFdlYktpdFdlYlZpZXcq
IHdlYlZpZXcpCiAgICAgbmV3IChwcml2KSBXZWJLaXRXZWJWaWV3UHJpdmF0ZSgpOwogfQogCitz
dGF0aWMgZ2Jvb2xlYW4gd2Via2l0V2ViVmlld0FjY3VtdWxhdG9yT2JqZWN0SGFuZGxlZChHU2ln
bmFsSW52b2NhdGlvbkhpbnQqLCBHVmFsdWUqIHJldHVyblZhbHVlLCBjb25zdCBHVmFsdWUqIGhh
bmRsZXJSZXR1cm4sIGdwb2ludGVyKQoreworICAgIGdwb2ludGVyIG9iamVjdCA9IGdfdmFsdWVf
Z2V0X29iamVjdChoYW5kbGVyUmV0dXJuKTsKKyAgICBpZiAob2JqZWN0KQorICAgICAgICBnX3Zh
bHVlX3NldF9vYmplY3QocmV0dXJuVmFsdWUsIG9iamVjdCk7CisKKyAgICByZXR1cm4gIW9iamVj
dDsKK30KKwogc3RhdGljIHZvaWQgd2Via2l0X3dlYl92aWV3X2NsYXNzX2luaXQoV2ViS2l0V2Vi
Vmlld0NsYXNzKiB3ZWJWaWV3Q2xhc3MpCiB7CiAgICAgR09iamVjdENsYXNzKiBnT2JqZWN0Q2xh
c3MgPSBHX09CSkVDVF9DTEFTUyh3ZWJWaWV3Q2xhc3MpOwpAQCAtMTE2LDYgKzE0OCw4IEBAIHN0
YXRpYyB2b2lkIHdlYmtpdF93ZWJfdmlld19jbGFzc19pbml0KFdlYktpdFdlYlZpZXdDbGFzcyog
d2ViVmlld0NsYXNzKQogICAgIGdPYmplY3RDbGFzcy0+Z2V0X3Byb3BlcnR5ID0gd2Via2l0V2Vi
Vmlld0dldFByb3BlcnR5OwogICAgIGdPYmplY3RDbGFzcy0+ZmluYWxpemUgPSB3ZWJraXRXZWJW
aWV3RmluYWxpemU7CiAKKyAgICB3ZWJWaWV3Q2xhc3MtPmNyZWF0ZSA9IHdlYmtpdFdlYlZpZXdD
cmVhdGU7CisKICAgICBnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUod2ViVmlld0NsYXNzLCBzaXpl
b2YoV2ViS2l0V2ViVmlld1ByaXZhdGUpKTsKIAogICAgIC8qKgpAQCAtMTQ4LDYgKzE4Miw2OSBA
QCBzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfY2xhc3NfaW5pdChXZWJLaXRXZWJWaWV3Q2xh
c3MqIHdlYlZpZXdDbGFzcykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIkFuIGVzdGltYXRlIG9mIHRoZSBwZXJjZW50IGNvbXBsZXRpb24g
Zm9yIGEgZG9jdW1lbnQgbG9hZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDAuMCwgMS4wLCAwLjAsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJM
RSkpOworCisgICAgLyoqCisgICAgICogV2ViS2l0V2ViVmlldzo6Y3JlYXRlOgorICAgICAqIEB3
ZWJfdmlldzogdGhlIG9iamVjdCBvbiB3aGljaCB0aGUgc2lnbmFsIGlzIGVtaXR0ZWQKKyAgICAg
KgorICAgICAqIEVtaXR0ZWQgd2hlbiB0aGUgY3JlYXRpb24gb2YgYSBuZXcgI1dlYktpdFdlYlZp
ZXcgaXMgcmVxdWVzdGVkLgorICAgICAqIElmIHRoaXMgc2lnbmFsIGlzIGhhbmRsZWQgdGhlIHNp
Z25hbCBoYW5kbGVyIHNob3VsZCByZXR1cm4gdGhlCisgICAgICogbmV3bHkgY3JlYXRlZCAjV2Vi
S2l0V2ViVmlldy4KKyAgICAgKgorICAgICAqIFRoZSBuZXcgI1dlYktpdFdlYlZpZXcgc2hvdWxk
IG5vdCBiZSBkaXNwbGF5ZWQgdG8gdGhlIHVzZXIKKyAgICAgKiB1bnRpbCB0aGUgI1dlYktpdFdl
YlZpZXc6OnJlYWR5LXRvLXNob3cgc2lnbmFsIGlzIGVtaXR0ZWQuCisgICAgICoKKyAgICAgKiBU
aGUgc2lnbmFsIGhhbmRsZXJzIHNob3VsZCBub3QgdHJ5IHRvIGRlYWwgd2l0aCB0aGUgcmVmZXJl
bmNlIGNvdW50IGZvcgorICAgICAqIHRoZSBuZXcgI1dlYktpdFdlYlZpZXcuIFRoZSB3aWRnZXQg
dG8gd2hpY2ggdGhlIHdpZGdldCBpcyBhZGRlZCB3aWxsCisgICAgICogaGFuZGxlIHRoYXQuCisg
ICAgICoKKyAgICAgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IGEgbmV3bHkgYWxsb2NhdGVk
ICNXZWJLaXRXZWJWaWV3IHdpZGdldCwgb3IgJU5VTEwKKyAgICAgKi8KKyAgICBzaWduYWxzW0NS
RUFURV0gPQorICAgICAgICBnX3NpZ25hbF9uZXcoImNyZWF0ZSIsCisgICAgICAgICAgICAgICAg
ICAgICBHX1RZUEVfRlJPTV9DTEFTUyh3ZWJWaWV3Q2xhc3MpLAorICAgICAgICAgICAgICAgICAg
ICAgR19TSUdOQUxfUlVOX0xBU1QsCisgICAgICAgICAgICAgICAgICAgICBHX1NUUlVDVF9PRkZT
RVQoV2ViS2l0V2ViVmlld0NsYXNzLCBjcmVhdGUpLAorICAgICAgICAgICAgICAgICAgICAgd2Vi
a2l0V2ViVmlld0FjY3VtdWxhdG9yT2JqZWN0SGFuZGxlZCwgMCwKKyAgICAgICAgICAgICAgICAg
ICAgIHdlYmtpdF9tYXJzaGFsX09CSkVDVF9fVk9JRCwKKyAgICAgICAgICAgICAgICAgICAgIEdU
S19UWVBFX1dJREdFVCwgMCk7CisKKyAgICAvKioKKyAgICAgKiBXZWJLaXRXZWJWaWV3OjpyZWFk
eS10by1zaG93OgorICAgICAqIEB3ZWJfdmlldzogdGhlIG9iamVjdCBvbiB3aGljaCB0aGUgc2ln
bmFsIGlzIGVtaXR0ZWQKKyAgICAgKgorICAgICAqIEVtaXR0ZWQgYWZ0ZXIgI1dlYktpdFdlYlZp
ZXc6OmNyZWF0ZSBvbiB0aGUgbmV3bHkgY3JlYXRlZCAjV2ViS2l0V2ViVmlldworICAgICAqIHdo
ZW4gaXQgc2hvdWxkIGJlIGRpc3BsYXllZCB0byB0aGUgdXNlci4gV2hlbiB0aGlzIHNpZ25hbCBp
cyBlbWl0dGVkCisgICAgICogYWxsIHRoZSBpbmZvcm1hdGlvbiBhYm91dCBob3cgdGhlIHdpbmRv
dyBzaG91bGQgbG9vaywgaW5jbHVkaW5nCisgICAgICogc2l6ZSwgcG9zaXRpb24sIHdoZXRoZXIg
dGhlIGxvY2F0aW9uLCBzdGF0dXMgYW5kIHNjcm9sbGJhcnMKKyAgICAgKiBzaG91bGQgYmUgZGlz
cGxheWVkLCBpcyBhbHJlYWR5IHNldC4KKyAgICAgKi8KKyAgICBzaWduYWxzW1JFQURZX1RPX1NI
T1ddID0KKyAgICAgICAgZ19zaWduYWxfbmV3KCJyZWFkeS10by1zaG93IiwKKyAgICAgICAgICAg
ICAgICAgICAgIEdfVFlQRV9GUk9NX0NMQVNTKHdlYlZpZXdDbGFzcyksCisgICAgICAgICAgICAg
ICAgICAgICBHX1NJR05BTF9SVU5fTEFTVCwKKyAgICAgICAgICAgICAgICAgICAgIEdfU1RSVUNU
X09GRlNFVChXZWJLaXRXZWJWaWV3Q2xhc3MsIHJlYWR5X3RvX3Nob3cpLAorICAgICAgICAgICAg
ICAgICAgICAgMCwgMCwKKyAgICAgICAgICAgICAgICAgICAgIGdfY2Nsb3N1cmVfbWFyc2hhbF9W
T0lEX19WT0lELAorICAgICAgICAgICAgICAgICAgICAgR19UWVBFX05PTkUsIDApOworCisgICAg
LyoqCisgICAgICogV2ViS2l0V2ViVmlldzo6Y2xvc2U6CisgICAgICogQHdlYlZpZXc6IHRoZSBv
YmplY3Qgb24gd2hpY2ggdGhlIHNpZ25hbCBpcyBlbWl0dGVkCisgICAgICoKKyAgICAgKiBFbWl0
dGVkIHdoZW4gY2xvc2luZyBhICNXZWJLaXRXZWJWaWV3IGlzIHJlcXVlc3RlZC4gVGhpcyBvY2N1
cnMgd2hlbiBhCisgICAgICogY2FsbCBpcyBtYWRlIGZyb20gSmF2YVNjcmlwdCdzIHdpbmRvdy5j
bG9zZSBmdW5jdGlvbi4KKyAgICAgKiBJdCBpcyB0aGUgb3duZXIncyByZXNwb25zaWJpbGl0eSB0
byBoYW5kbGUgdGhpcyBzaWduYWwgdG8gaGlkZSBvcgorICAgICAqIGRlbGV0ZSB0aGUgI1dlYktp
dFdlYlZpZXcsIGlmIG5lY2Vzc2FyeS4KKyAgICAgKi8KKyAgICBzaWduYWxzW0NMT1NFXSA9Cisg
ICAgICAgIGdfc2lnbmFsX25ldygiY2xvc2UiLAorICAgICAgICAgICAgICAgICAgICAgR19UWVBF
X0ZST01fQ0xBU1Mod2ViVmlld0NsYXNzKSwKKyAgICAgICAgICAgICAgICAgICAgIEdfU0lHTkFM
X1JVTl9MQVNULAorICAgICAgICAgICAgICAgICAgICAgR19TVFJVQ1RfT0ZGU0VUKFdlYktpdFdl
YlZpZXdDbGFzcywgY2xvc2UpLAorICAgICAgICAgICAgICAgICAgICAgMCwgMCwKKyAgICAgICAg
ICAgICAgICAgICAgIGdfY2Nsb3N1cmVfbWFyc2hhbF9WT0lEX19WT0lELAorICAgICAgICAgICAg
ICAgICAgICAgR19UWVBFX05PTkUsIDApOwogfQogCiB2b2lkIHdlYmtpdFdlYlZpZXdTZXRFc3Rp
bWF0ZWRMb2FkUHJvZ3Jlc3MoV2ViS2l0V2ViVmlldyogd2ViVmlldywgZG91YmxlIGVzdGltYXRl
ZExvYWRQcm9ncmVzcykKQEAgLTE1OCw2ICsyNTUsMjYgQEAgdm9pZCB3ZWJraXRXZWJWaWV3U2V0
RXN0aW1hdGVkTG9hZFByb2dyZXNzKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIGRvdWJsZSBlc3Rp
bWEKICAgICBnX29iamVjdF9ub3RpZnkoR19PQkpFQ1Qod2ViVmlldyksICJlc3RpbWF0ZWQtbG9h
ZC1wcm9ncmVzcyIpOwogfQogCitXS1BhZ2VSZWYgd2Via2l0V2ViVmlld0NyZWF0ZU5ld1BhZ2Uo
V2ViS2l0V2ViVmlldyogd2ViVmlldykKK3sKKyAgICBXZWJLaXRXZWJWaWV3KiBuZXdXZWJWaWV3
OworICAgIGdfc2lnbmFsX2VtaXQod2ViVmlldywgc2lnbmFsc1tDUkVBVEVdLCAwLCAmbmV3V2Vi
Vmlldyk7CisgICAgaWYgKCFuZXdXZWJWaWV3KQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxXS1BhZ2VSZWY+KFdLUmV0YWluKHRvQVBJKHdlYmtpdFdlYlZpZXdC
YXNlR2V0UGFnZShXRUJLSVRfV0VCX1ZJRVdfQkFTRShuZXdXZWJWaWV3KSkpKSk7Cit9CisKK3Zv
aWQgd2Via2l0V2ViVmlld1JlYWR5VG9TaG93UGFnZShXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQor
eworICAgIGdfc2lnbmFsX2VtaXQod2ViVmlldywgc2lnbmFsc1tSRUFEWV9UT19TSE9XXSwgMCwg
TlVMTCk7Cit9CisKK3ZvaWQgd2Via2l0V2ViVmlld0Nsb3NlUGFnZShXZWJLaXRXZWJWaWV3KiB3
ZWJWaWV3KQoreworICAgIGdfc2lnbmFsX2VtaXQod2ViVmlldywgc2lnbmFsc1tDTE9TRV0sIDAs
IE5VTEwpOworfQorCiAvKioKICAqIHdlYmtpdF93ZWJfdmlld19uZXc6CiAgKgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5oIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5oCmluZGV4IGYzMzUz
ZWQuLjkzY2VhYjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdFdlYlZpZXcuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXRXZWJWaWV3LmgKQEAgLTUzLDYgKzUzLDEwIEBAIHN0cnVjdCBfV2ViS2l0V2ViVmlldyB7
CiBzdHJ1Y3QgX1dlYktpdFdlYlZpZXdDbGFzcyB7CiAgICAgV2ViS2l0V2ViVmlld0Jhc2VDbGFz
cyBwYXJlbnQ7CiAKKyAgICBHdGtXaWRnZXQgKigqIGNyZWF0ZSkgICAgICAgIChXZWJLaXRXZWJW
aWV3ICp3ZWJfdmlldyk7CisgICAgdm9pZCAgICAgICAoKiByZWFkeV90b19zaG93KSAoV2ViS2l0
V2ViVmlldyAqd2ViX3ZpZXcpOworICAgIHZvaWQgICAgICAgKCogY2xvc2UpICAgICAgICAgKFdl
YktpdFdlYlZpZXcgKndlYl92aWV3KTsKKwogICAgIC8qIFBhZGRpbmcgZm9yIGZ1dHVyZSBleHBh
bnNpb24gKi8KICAgICB2b2lkICgqX3dlYmtpdF9yZXNlcnZlZDApICh2b2lkKTsKICAgICB2b2lk
ICgqX3dlYmtpdF9yZXNlcnZlZDEpICh2b2lkKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3UHJpdmF0ZS5oCmluZGV4IDgxNjdiNGIu
LmUyMTQ3MjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dl
YktpdFdlYlZpZXdQcml2YXRlLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0V2ViVmlld1ByaXZhdGUuaApAQCAtMzAsNSArMzAsOCBAQAogI2luY2x1ZGUgPFdl
YktpdDIvV2ViS2l0Mi5oPgogCiB2b2lkIHdlYmtpdFdlYlZpZXdTZXRFc3RpbWF0ZWRMb2FkUHJv
Z3Jlc3MoV2ViS2l0V2ViVmlldyosIGRvdWJsZSBlc3RpbWF0ZWRMb2FkUHJvZ3Jlc3MpOworV0tQ
YWdlUmVmIHdlYmtpdFdlYlZpZXdDcmVhdGVOZXdQYWdlKFdlYktpdFdlYlZpZXcqKTsKK3ZvaWQg
d2Via2l0V2ViVmlld1JlYWR5VG9TaG93UGFnZShXZWJLaXRXZWJWaWV3Kik7Cit2b2lkIHdlYmtp
dFdlYlZpZXdDbG9zZVBhZ2UoV2ViS2l0V2ViVmlldyopOwogCiAjZW5kaWYgLy8gV2ViS2l0V2Vi
Vmlld1ByaXZhdGVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvdGVzdHMvVGVzdFdlYktpdFdlYlZpZXcuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdFdlYlZpZXcuY3BwCmluZGV4IGEyOTNlZWYuLjdhMjVk
NGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rl
c3RXZWJLaXRXZWJWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay90ZXN0cy9UZXN0V2ViS2l0V2ViVmlldy5jcHAKQEAgLTE4LDEwICsxOCwxMiBAQAogICovCiAK
ICNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRUZXN0U2VydmVyLmgiCiAjaW5j
bHVkZSAiV2ViVmlld1Rlc3QuaCIKLSNpbmNsdWRlICJMb2FkVHJhY2tpbmdUZXN0LmgiCiAjaW5j
bHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgogCitzdGF0aWMgV2ViS2l0VGVzdFNlcnZlciog
a1NlcnZlcjsKKwogc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdEZWZhdWx0Q29udGV4dChXZWJWaWV3
VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKIHsKICAgICBnX2Fzc2VydCh3ZWJraXRfd2ViX3Zp
ZXdfZ2V0X2NvbnRleHQodGVzdC0+bV93ZWJWaWV3KSA9PSB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0
X2RlZmF1bHQoKSk7CkBAIC00NywxMyArNDksMTA4IEBAIHN0YXRpYyB2b2lkIHRlc3RXZWJWaWV3
c1NoYXJlQ2xpZW50cyhUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQogICAgIGdfYXNzZXJ0KGNs
aWVudDEgPT0gY2xpZW50Mik7CiB9CiAKK3N0YXRpYyB2b2lkIHNlcnZlckNhbGxiYWNrKFNvdXBT
ZXJ2ZXIqIHNlcnZlciwgU291cE1lc3NhZ2UqIG1lc3NhZ2UsIGNvbnN0IGNoYXIqIHBhdGgsIEdI
YXNoVGFibGUqLCBTb3VwQ2xpZW50Q29udGV4dCosIGdwb2ludGVyKQoreworICAgIHN0YXRpYyBj
b25zdCBjaGFyKiBodG1sT25Mb2FkRm9ybWF0ID0gIjxodG1sPjxib2R5IG9uTG9hZD1cIiVzXCI+
PC9ib2R5PjwvaHRtbD4iOworCisgICAgaWYgKG1lc3NhZ2UtPm1ldGhvZCAhPSBTT1VQX01FVEhP
RF9HRVQpIHsKKyAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9T
VEFUVVNfTk9UX0lNUExFTUVOVEVEKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHNv
dXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX09LKTsKKworICAgIGlm
IChnX3N0cl9lcXVhbChwYXRoLCAiL2NyZWF0ZV9uZXdfdmlldyIpKSB7CisgICAgICAgIEdPd25Q
dHI8Y2hhcj4gd2luZG93T3BlblN0cmluZyhnX3N0cmR1cF9wcmludGYoIndpbmRvdy5vcGVuKCcl
cycpIiwga1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL25ld193aW5kb3ciKS5kYXRhKCkpKTsKKyAg
ICAgICAgY2hhciogaHRtbFN0cmluZyA9IGdfc3RyZHVwX3ByaW50ZihodG1sT25Mb2FkRm9ybWF0
LCB3aW5kb3dPcGVuU3RyaW5nLmdldCgpKTsKKyAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfYXBw
ZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZX1RBS0UsIGh0bWxTdHJpbmcs
IHN0cmxlbihodG1sU3RyaW5nKSk7CisgICAgfSBlbHNlIGlmIChnX3N0cl9lcXVhbChwYXRoLCAi
L25ld193aW5kb3ciKSkgeworICAgICAgICBjaGFyKiBodG1sU3RyaW5nID0gZ19zdHJkdXBfcHJp
bnRmKGh0bWxPbkxvYWRGb3JtYXQsICJzZWxmLmNsb3NlKCk7Iik7CisgICAgICAgIHNvdXBfbWVz
c2FnZV9ib2R5X2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9UQUtF
LCBodG1sU3RyaW5nLCBzdHJsZW4oaHRtbFN0cmluZykpOworICAgIH0KKworICAgIHNvdXBfbWVz
c2FnZV9ib2R5X2NvbXBsZXRlKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHkpOworfQorCitjbGFzcyBV
SUNsaWVudFRlc3Q6IHB1YmxpYyBXZWJWaWV3VGVzdCB7CitwdWJsaWM6CisgICAgTUFLRV9HTElC
X1RFU1RfRklYVFVSRShVSUNsaWVudFRlc3QpOworCisgICAgZW51bSBXZWJWaWV3RXZlbnRzIHsK
KyAgICAgICAgQ3JlYXRlLAorICAgICAgICBSZWFkeVRvU2hvdywKKyAgICAgICAgQ2xvc2UKKyAg
ICB9OworCisgICAgc3RhdGljIHZvaWQgdmlld0Nsb3NlKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcs
IFVJQ2xpZW50VGVzdCogdGVzdCkKKyAgICB7CisgICAgICAgIGdfYXNzZXJ0KHdlYlZpZXcgIT0g
dGVzdC0+bV93ZWJWaWV3KTsKKworICAgICAgICB0ZXN0LT5tX3dlYlZpZXdFdmVudHMuYXBwZW5k
KENsb3NlKTsKKyAgICAgICAgZ19vYmplY3RfdW5yZWYod2ViVmlldyk7CisKKyAgICAgICAgZ19t
YWluX2xvb3BfcXVpdCh0ZXN0LT5tX21haW5Mb29wKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9p
ZCB2aWV3UmVhZHlUb1Nob3coV2ViS2l0V2ViVmlldyogd2ViVmlldywgVUlDbGllbnRUZXN0KiB0
ZXN0KQorICAgIHsKKyAgICAgICAgZ19hc3NlcnQod2ViVmlldyAhPSB0ZXN0LT5tX3dlYlZpZXcp
OworCisgICAgICAgIHRlc3QtPm1fd2ViVmlld0V2ZW50cy5hcHBlbmQoUmVhZHlUb1Nob3cpOwor
ICAgIH0KKworICAgIHN0YXRpYyBHdGtXaWRnZXQqIHZpZXdDcmVhdGUoV2ViS2l0V2ViVmlldyog
d2ViVmlldywgVUlDbGllbnRUZXN0KiB0ZXN0KQorICAgIHsKKyAgICAgICAgZ19hc3NlcnQod2Vi
VmlldyA9PSB0ZXN0LT5tX3dlYlZpZXcpOworCisgICAgICAgIEd0a1dpZGdldCogbmV3V2ViVmll
dyA9IHdlYmtpdF93ZWJfdmlld19uZXdfd2l0aF9jb250ZXh0KHdlYmtpdF93ZWJfdmlld19nZXRf
Y29udGV4dCh3ZWJWaWV3KSk7CisgICAgICAgIGdfb2JqZWN0X3JlZl9zaW5rKG5ld1dlYlZpZXcp
OworCisgICAgICAgIHRlc3QtPm1fd2ViVmlld0V2ZW50cy5hcHBlbmQoQ3JlYXRlKTsKKworICAg
ICAgICBnX3NpZ25hbF9jb25uZWN0KG5ld1dlYlZpZXcsICJyZWFkeS10by1zaG93IiwgR19DQUxM
QkFDSyh2aWV3UmVhZHlUb1Nob3cpLCB0ZXN0KTsKKyAgICAgICAgZ19zaWduYWxfY29ubmVjdChu
ZXdXZWJWaWV3LCAiY2xvc2UiLCBHX0NBTExCQUNLKHZpZXdDbG9zZSksIHRlc3QpOworCisgICAg
ICAgIHJldHVybiBuZXdXZWJWaWV3OworICAgIH0KKworICAgIFVJQ2xpZW50VGVzdCgpCisgICAg
eworICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG1fd2ViVmlldywgImNyZWF0ZSIsIEdfQ0FMTEJB
Q0sodmlld0NyZWF0ZSksIHRoaXMpOworICAgIH0KKworICAgIH5VSUNsaWVudFRlc3QoKQorICAg
IHsKKyAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9tYXRjaGVkKG1fd2ViVmll
dywgR19TSUdOQUxfTUFUQ0hfREFUQSwgMCwgMCwgMCwgMCwgdGhpcyk7CisgICAgfQorCisgICAg
VmVjdG9yPFdlYlZpZXdFdmVudHM+IG1fd2ViVmlld0V2ZW50czsKK307CisKK3N0YXRpYyB2b2lk
IHRlc3RXZWJWaWV3Q3JlYXRlUmVhZHlDbG9zZShVSUNsaWVudFRlc3QqIHRlc3QsIGdjb25zdHBv
aW50ZXIpCit7CisgICAgd2Via2l0X3dlYl92aWV3X2xvYWRfdXJpKHRlc3QtPm1fd2ViVmlldywg
a1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2NyZWF0ZV9uZXdfdmlldyIpLmRhdGEoKSk7CisgICAg
Z19tYWluX2xvb3BfcnVuKHRlc3QtPm1fbWFpbkxvb3ApOworCisgICAgVmVjdG9yPFVJQ2xpZW50
VGVzdDo6V2ViVmlld0V2ZW50cz4mIGV2ZW50cyA9IHRlc3QtPm1fd2ViVmlld0V2ZW50czsKKyAg
ICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzLnNpemUoKSwgPT0sIDMpOworICAgIGdfYXNzZXJ0X2Nt
cGludChldmVudHNbMF0sID09LCBVSUNsaWVudFRlc3Q6OkNyZWF0ZSk7CisgICAgZ19hc3NlcnRf
Y21waW50KGV2ZW50c1sxXSwgPT0sIFVJQ2xpZW50VGVzdDo6UmVhZHlUb1Nob3cpOworICAgIGdf
YXNzZXJ0X2NtcGludChldmVudHNbMl0sID09LCBVSUNsaWVudFRlc3Q6OkNsb3NlKTsKK30KKwog
dm9pZCBiZWZvcmVBbGwoKQogeworICAgIGtTZXJ2ZXIgPSBuZXcgV2ViS2l0VGVzdFNlcnZlcigp
OworICAgIGtTZXJ2ZXItPnJ1bihzZXJ2ZXJDYWxsYmFjayk7CisKICAgICBXZWJWaWV3VGVzdDo6
YWRkKCJXZWJLaXRXZWJWaWV3IiwgImRlZmF1bHQtY29udGV4dCIsIHRlc3RXZWJWaWV3RGVmYXVs
dENvbnRleHQpOwogICAgIFdlYlZpZXdUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAiY3VzdG9t
LWNoYXJzZXQiLCB0ZXN0V2ViVmlld0N1c3RvbUNoYXJzZXQpOwogICAgIFRlc3Q6OmFkZCgiV2Vi
S2l0V2ViVmlldyIsICJ3ZWJ2aWV3cy1zaGFyZS1jbGllbnRzIiwgdGVzdFdlYlZpZXdzU2hhcmVD
bGllbnRzKTsKKyAgICBVSUNsaWVudFRlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJ3ZWJ2aWV3
LWNyZWF0ZS1yZWFkeS1jbG9zZSIsIHRlc3RXZWJWaWV3Q3JlYXRlUmVhZHlDbG9zZSk7CiB9CiAK
IHZvaWQgYWZ0ZXJBbGwoKQogeworICAgIGRlbGV0ZSBrU2VydmVyOwogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvd2Via2l0Mm1hcnNoYWwubGlzdCBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdDJtYXJzaGFsLmxpc3QKaW5kZXgg
NjI0ODQyNC4uMzRmNDc0YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvd2Via2l0Mm1hcnNoYWwubGlzdAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay93ZWJraXQybWFyc2hhbC5saXN0CkBAIC0xLDQgKzEsNSBAQAogQk9PTEVBTjpPQkpF
Q1QsU1RSSU5HLFBPSU5URVIKIEJPT0xFQU46T0JKRUNUCiBCT09MRUFOOlZPSUQKK09CSkVDVDpW
T0lECiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>113038</attachid>
            <date>2011-10-31 04:35:05 -0700</date>
            <delta_ts>2011-11-02 07:09:33 -0700</delta_ts>
            <desc>Patch updated to current git master</desc>
            <filename>wk2-ui-client4.diff</filename>
            <type>text/plain</type>
            <size>21542</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCA4ODA0MWQ3Li43NWNjNmEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0yMDE5LDYgKzIw
MTksNDQgQEAKIAogMjAxMS0xMC0yMCAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGln
YWxpYS5jb20+CiAKKyAgICAgICAgW0dUS10gSW5pdGlhbCBVSSBjbGllbnQgaW1wbGVtZW50YXRp
b24gZm9yIFdlYktpdDIgR1RLICtBUEkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTY5NzUzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgRm9yIG5vdyBpdCBvbmx5IGltcGxlbWVudHMgY3JlYXRlTmV3UGFnZSwg
c2hvd1BhZ2UgYW5kIGNsb3NlUGFnZQorICAgICAgICBjYWxsYmFja3Mgb2YgdGhlIFVJIGNsaWVu
dC4KKworICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOiBBZGQgbmV3IGZpbGVzIHRvIGNvbXBpbGF0
aW9uLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFVJQ2xpZW50LmNwcDogQWRk
ZWQuCisgICAgICAgIChjcmVhdGVOZXdQYWdlKTogQ2FsbCB3ZWJraXRXZWJWaWV3Q3JlYXRlTmV3
UGFnZS4KKyAgICAgICAgKHNob3dQYWdlKTogQ2FsbCB3ZWJraXRXZWJWaWV3UmVhZHlUb1Nob3dQ
YWdlLgorICAgICAgICAoY2xvc2VQYWdlKTogQ2FsbCB3ZWJraXRXZWJWaWV3Q2xvc2VQYWdlLgor
ICAgICAgICAod2Via2l0VUlDbGllbnRBdHRhY2hVSUNsaWVudFRvUGFnZSk6IEluaXRpYWxpemUg
VUkgY2xpZW50IGFuZAorICAgICAgICBhdHRhY2ggaXQgdG8gdGhlIGdpdmVuIHBhZ2UuCisgICAg
ICAgICh3ZWJraXRfdWlfY2xpZW50X2luaXQpOgorICAgICAgICAod2Via2l0X3VpX2NsaWVudF9j
bGFzc19pbml0KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRVSUNsaWVudC5o
OiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmNwcDoK
KyAgICAgICAgKHdlYmtpdFdlYlZpZXdDcmVhdGUpOiBEZWZhdWx0IGltcGxlbWVudGF0aW9uIG9m
IGNyZWF0ZSBzaWduYWwsCisgICAgICAgIHRoYXQgc2ltcGx5IHJldHVybnMgMC4KKyAgICAgICAg
KHdlYmtpdFdlYlZpZXdDb25zdHJ1Y3RlZCk6IENyZWF0ZSB0aGUgZGVmYXVsdCBVSSBjbGllbnQu
CisgICAgICAgICh3ZWJraXRXZWJWaWV3QWNjdW11bGF0b3JPYmplY3RIYW5kbGVkKToKKyAgICAg
ICAgKHdlYmtpdF93ZWJfdmlld19jbGFzc19pbml0KToKKyAgICAgICAgKHdlYmtpdFdlYlZpZXdD
cmVhdGVOZXdQYWdlKTogRW1pdCBjcmVhdGUgc2lnbmFsLgorICAgICAgICAod2Via2l0V2ViVmll
d1JlYWR5VG9TaG93UGFnZSk6IEVtaXQgcmVhZHktdG8tc2hvdyBzaWduYWwuCisgICAgICAgICh3
ZWJraXRXZWJWaWV3Q2xvc2VQYWdlKTogRW1pdCBjbG9zZSBzaWduYWwuCisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
Z3RrL1dlYktpdFdlYlZpZXdQcml2YXRlLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsv
dGVzdHMvVGVzdFdlYktpdFdlYlZpZXcuY3BwOgorICAgICAgICAoc2VydmVyQ2FsbGJhY2spOgor
ICAgICAgICAodGVzdFdlYlZpZXdDcmVhdGVSZWFkeUNsb3NlKToKKyAgICAgICAgKGJlZm9yZUFs
bCk6CisgICAgICAgIChhZnRlckFsbCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvd2Vi
a2l0Mm1hcnNoYWwubGlzdDoKKworMjAxMS0xMC0yMCAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxj
Z2FyY2lhQGlnYWxpYS5jb20+CisKICAgICAgICAgW0dUS10gUmVtb3ZlIFdlYktpdFdlYkxvYWRl
ckNsaWVudFByaXZhdGUKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTcwNDg4CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFt
IGIvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUuYW0KaW5kZXggZGFkMWZjMi4uZjdhZjNhZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUuYW0KKysrIGIvU291cmNlL1dl
YktpdDIvR05VbWFrZWZpbGUuYW0KQEAgLTQ5Nyw2ICs0OTcsOCBAQCBsaWJ3ZWJraXQyZ3RrX0BX
RUJLSVRHVEtfQVBJX01BSk9SX1ZFUlNJT05AX0BXRUJLSVRHVEtfQVBJX01JTk9SX1ZFUlNJT05A
X2xhX1NPVQogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFByaXZhdGUu
aCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0U2V0dGluZ3MuY3Bw
IFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRTZXR0aW5ncy5oIFwK
KwlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRVSUNsaWVudC5jcHAgXAor
CVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFVJQ2xpZW50LmggXAogCVNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYkNvbnRleHQuaCBcCiAJU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViQ29udGV4dC5jcHAgXAogCVNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYkNvbnRleHRQcml2YXRlLmgg
XApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0VUlD
bGllbnQuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0VUlDbGll
bnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmZjVmYTYKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRVSUNs
aWVudC5jcHAKQEAgLTAsMCArMSwxMDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgSWdh
bGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYktpdFVJQ2xpZW50Lmgi
CisKKyNpbmNsdWRlICJXZWJLaXRXZWJWaWV3UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYlBhZ2VQ
cm94eS5oIgorI2luY2x1ZGUgPFdlYktpdDIvV0tCYXNlLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBX
ZWJLaXQ7CisKK0dfREVGSU5FX1RZUEUoV2ViS2l0VUlDbGllbnQsIHdlYmtpdF91aV9jbGllbnQs
IEdfVFlQRV9PQkpFQ1QpCisKK3N0YXRpYyBXS1BhZ2VSZWYgY3JlYXRlTmV3UGFnZShXS1BhZ2VS
ZWYgcGFnZSwgV0tVUkxSZXF1ZXN0UmVmLCBXS0RpY3Rpb25hcnlSZWYsIFdLRXZlbnRNb2RpZmll
cnMsIFdLRXZlbnRNb3VzZUJ1dHRvbiwgY29uc3Qgdm9pZCopCit7CisgICAgcmV0dXJuIHdlYmtp
dFdlYlZpZXdDcmVhdGVOZXdQYWdlKFdFQktJVF9XRUJfVklFVyh0b0ltcGwocGFnZSktPnZpZXdX
aWRnZXQoKSkpOworfQorCitzdGF0aWMgdm9pZCBzaG93UGFnZShXS1BhZ2VSZWYgcGFnZSwgY29u
c3Qgdm9pZCopCit7CisgICAgd2Via2l0V2ViVmlld1JlYWR5VG9TaG93UGFnZShXRUJLSVRfV0VC
X1ZJRVcodG9JbXBsKHBhZ2UpLT52aWV3V2lkZ2V0KCkpKTsKK30KKworc3RhdGljIHZvaWQgY2xv
c2VQYWdlKFdLUGFnZVJlZiBwYWdlLCBjb25zdCB2b2lkKikKK3sKKyAgICB3ZWJraXRXZWJWaWV3
Q2xvc2VQYWdlKFdFQktJVF9XRUJfVklFVyh0b0ltcGwocGFnZSktPnZpZXdXaWRnZXQoKSkpOwor
fQorCit2b2lkIHdlYmtpdFVJQ2xpZW50QXR0YWNoVUlDbGllbnRUb1BhZ2UoV2ViS2l0VUlDbGll
bnQqIHVpQ2xpZW50LCBXS1BhZ2VSZWYgd2tQYWdlKQoreworICAgIFdLUGFnZVVJQ2xpZW50IHdr
VUlDbGllbnQgPSB7CisgICAgICAgIGtXS1BhZ2VVSUNsaWVudEN1cnJlbnRWZXJzaW9uLAorICAg
ICAgICB1aUNsaWVudCwgLy8gY2xpZW50SW5mbworICAgICAgICAwLCAvLyBjcmVhdGVOZXdQYWdl
X2RlcHJlY2F0ZWRGb3JVc2VXaXRoVjAKKyAgICAgICAgc2hvd1BhZ2UsCisgICAgICAgIGNsb3Nl
UGFnZSwKKyAgICAgICAgMCwgLy8gdGFrZUZvY3VzCisgICAgICAgIDAsIC8vIGZvY3VzCisgICAg
ICAgIDAsIC8vIHVuZm9jdXMKKyAgICAgICAgMCwgLy8gcnVuSmF2YVNjcmlwdEFsZXJ0CisgICAg
ICAgIDAsIC8vIHJ1bkphdmFTY3JpcHRDb25maXJtCisgICAgICAgIDAsIC8vIHJ1bkphdmFTY3Jp
cHRQcm9tcHQKKyAgICAgICAgMCwgLy8gc2V0U3RhdHVzVGV4dAorICAgICAgICAwLCAvLyBtb3Vz
ZURpZE1vdmVPdmVyRWxlbWVudF9kZXByZWNhdGVkRm9yVXNlV2l0aFYwCisgICAgICAgIDAsIC8v
IG1pc3NpbmdQbHVnaW5CdXR0b25DbGlja2VkCisgICAgICAgIDAsIC8vIGRpZE5vdEhhbmRsZUtl
eUV2ZW50CisgICAgICAgIDAsIC8vIGRpZE5vdEhhbmRsZVdoZWVsRXZlbnQKKyAgICAgICAgMCwg
Ly8gdG9vbGJhcnNBcmVWaXNpYmxlCisgICAgICAgIDAsIC8vIHNldFRvb2xiYXJzQXJlVmlzaWJs
ZQorICAgICAgICAwLCAvLyBtZW51QmFySXNWaXNpYmxlCisgICAgICAgIDAsIC8vIHNldE1lbnVC
YXJJc1Zpc2libGUKKyAgICAgICAgMCwgLy8gc3RhdHVzQmFySXNWaXNpYmxlCisgICAgICAgIDAs
IC8vIHNldFN0YXR1c0JhcklzVmlzaWJsZQorICAgICAgICAwLCAvLyBpc1Jlc2l6YWJsZQorICAg
ICAgICAwLCAvLyBzZXRJc1Jlc2l6YWJsZQorICAgICAgICAwLCAvLyBnZXRXaW5kb3dGcmFtZQor
ICAgICAgICAwLCAvLyBzZXRXaW5kb3dGcmFtZQorICAgICAgICAwLCAvLyBydW5CZWZvcmVVbmxv
YWRDb25maXJtUGFuZWwKKyAgICAgICAgMCwgLy8gZGlkRHJhdworICAgICAgICAwLCAvLyBwYWdl
RGlkU2Nyb2xsCisgICAgICAgIDAsIC8vIGV4Y2VlZGVkRGF0YWJhc2VRdW90YQorICAgICAgICAw
LCAvLyBydW5PcGVuUGFuZWwKKyAgICAgICAgMCwgLy8gZGVjaWRlUG9saWN5Rm9yR2VvbG9jYXRp
b25QZXJtaXNzaW9uUmVxdWVzdAorICAgICAgICAwLCAvLyBoZWFkZXJIZWlnaHQKKyAgICAgICAg
MCwgLy8gZm9vdGVySGVpZ2h0CisgICAgICAgIDAsIC8vIGRyYXdIZWFkZXIKKyAgICAgICAgMCwg
Ly8gZHJhd0Zvb3RlcgorICAgICAgICAwLCAvLyBwcmludEZyYW1lCisgICAgICAgIDAsIC8vIHJ1
bk1vZGFsCisgICAgICAgIDAsIC8vIGRpZENvbXBsZXRlUnViYmVyQmFuZEZvck1haW5GcmFtZQor
ICAgICAgICAwLCAvLyBzYXZlRGF0YVRvRmlsZUluRG93bmxvYWRzRm9sZGVyCisgICAgICAgIDAs
IC8vIHNob3VsZEludGVycnVwdEphdmFTY3JpcHQKKyAgICAgICAgY3JlYXRlTmV3UGFnZSwKKyAg
ICAgICAgMCwgLy8gbW91c2VEaWRNb3ZlT3ZlckVsZW1lbnQKKyAgICB9OworICAgIFdLUGFnZVNl
dFBhZ2VVSUNsaWVudCh3a1BhZ2UsICZ3a1VJQ2xpZW50KTsKK30KKworc3RhdGljIHZvaWQgd2Vi
a2l0X3VpX2NsaWVudF9pbml0KFdlYktpdFVJQ2xpZW50KiBjbGllbnQpCit7Cit9CisKK3N0YXRp
YyB2b2lkIHdlYmtpdF91aV9jbGllbnRfY2xhc3NfaW5pdChXZWJLaXRVSUNsaWVudENsYXNzKiBj
bGllbnRDbGFzcykKK3sKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL1dlYktpdFVJQ2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXRVSUNsaWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRj
NWY0NDAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXRVSUNsaWVudC5oCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTEgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisgKi8KKworI2lmICFkZWZpbmVkKF9fV0VCS0lUMl9IX0lOU0lERV9fKSAmJiAh
ZGVmaW5lZChXRUJLSVQyX0NPTVBJTEFUSU9OKQorI2Vycm9yICJPbmx5IDx3ZWJraXQyL3dlYmtp
dDIuaD4gY2FuIGJlIGluY2x1ZGVkIGRpcmVjdGx5LiIKKyNlbmRpZgorCisjaWZuZGVmIFdlYktp
dFVJQ2xpZW50X2gKKyNkZWZpbmUgV2ViS2l0VUlDbGllbnRfaAorCisjaW5jbHVkZSA8V2ViS2l0
Mi9XZWJLaXQyLmg+CisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKworR19CRUdJTl9ERUNMUwor
CisjZGVmaW5lIFdFQktJVF9UWVBFX1VJX0NMSUVOVCAgICAgICAgICAgICh3ZWJraXRfdWlfY2xp
ZW50X2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9VSV9DTElFTlQob2JqKSAgICAgICAgICAg
IChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX1RZUEVfVUlfQ0xJRU5U
LCBXZWJLaXRVSUNsaWVudCkpCisjZGVmaW5lIFdFQktJVF9VSV9DTElFTlRfQ0xBU1Moa2xhc3Mp
ICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX1RZUEVfVUlfQ0xJ
RU5ULCBXZWJLaXRVSUNsaWVudENsYXNzKSkKKyNkZWZpbmUgV0VCS0lUX0lTX1VJX0NMSUVOVChv
YmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfVFlQ
RV9VSV9DTElFTlQpKQorI2RlZmluZSBXRUJLSVRfSVNfVUlfQ0xJRU5UX0NMQVNTKGtsYXNzKSAo
R19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9UWVBFX1VJX0NMSUVOVCkp
CisjZGVmaW5lIFdFQktJVF9VSV9DTElFTlRfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFO
Q0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX1RZUEVfVUlfQ0xJRU5ULCBXZWJLaXRVSUNsaWVu
dENsYXNzKSkKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFVJQ2xpZW50ICAgICAgV2ViS2l0VUlD
bGllbnQ7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0VUlDbGllbnRDbGFzcyBXZWJLaXRVSUNsaWVu
dENsYXNzOworCitzdHJ1Y3QgX1dlYktpdFVJQ2xpZW50IHsKKyAgICBHT2JqZWN0IHBhcmVudDsK
K307CisKK3N0cnVjdCBfV2ViS2l0VUlDbGllbnRDbGFzcyB7CisgICAgR09iamVjdENsYXNzIHBh
cmVudF9jbGFzczsKK307CisKK0dUeXBlIHdlYmtpdF91aV9jbGllbnRfZ2V0X3R5cGUgKHZvaWQp
OworCit2b2lkIHdlYmtpdFVJQ2xpZW50QXR0YWNoVUlDbGllbnRUb1BhZ2UoV2ViS2l0VUlDbGll
bnQqLCBXS1BhZ2VSZWYpOworCitHX0VORF9ERUNMUworCisjZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuY3BwIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5jcHAKaW5kZXggNGY5MWFi
MC4uNTg2YjQyNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
V2ViS2l0V2ViVmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
V2ViS2l0V2ViVmlldy5jcHAKQEAgLTIxLDYgKzIxLDggQEAKICNpbmNsdWRlICJXZWJLaXRXZWJW
aWV3LmgiCiAKICNpbmNsdWRlICJXZWJLaXRCYWNrRm9yd2FyZExpc3RQcml2YXRlLmgiCisjaW5j
bHVkZSAiV2ViS2l0TWFyc2hhbC5oIgorI2luY2x1ZGUgIldlYktpdFVJQ2xpZW50LmgiCiAjaW5j
bHVkZSAiV2ViS2l0V2ViQ29udGV4dFByaXZhdGUuaCIKICNpbmNsdWRlICJXZWJLaXRXZWJMb2Fk
ZXJDbGllbnQuaCIKICNpbmNsdWRlICJXZWJLaXRXZWJMb2FkZXJDbGllbnRQcml2YXRlLmgiCkBA
IC0zOSw2ICs0MSwxNCBAQCB1c2luZyBuYW1lc3BhY2UgV2ViS2l0OwogdXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU7CiAKIGVudW0geworICAgIENSRUFURSwKKyAgICBSRUFEWV9UT19TSE9XLAorICAg
IENMT1NFLAorCisgICAgTEFTVF9TSUdOQUwKK307CisKK2VudW0gewogICAgIFBST1BfMCwKIAog
ICAgIFBST1BfV0VCX0NPTlRFWFQsCkBAIC01MywxMSArNjMsMTkgQEAgc3RydWN0IF9XZWJLaXRX
ZWJWaWV3UHJpdmF0ZSB7CiAgICAgQ1N0cmluZyBhY3RpdmVVUkk7CiAKICAgICBHUmVmUHRyPFdl
YktpdFdlYkxvYWRlckNsaWVudD4gbG9hZGVyQ2xpZW50OworICAgIEdSZWZQdHI8V2ViS2l0VUlD
bGllbnQ+IHVpQ2xpZW50OwogICAgIEdSZWZQdHI8V2ViS2l0QmFja0ZvcndhcmRMaXN0PiBiYWNr
Rm9yd2FyZExpc3Q7CiB9OwogCitzdGF0aWMgZ3VpbnQgc2lnbmFsc1tMQVNUX1NJR05BTF0gPSB7
IDAsIH07CisKIEdfREVGSU5FX1RZUEUoV2ViS2l0V2ViVmlldywgd2Via2l0X3dlYl92aWV3LCBX
RUJLSVRfVFlQRV9XRUJfVklFV19CQVNFKQogCitzdGF0aWMgR3RrV2lkZ2V0KiB3ZWJraXRXZWJW
aWV3Q3JlYXRlKFdlYktpdFdlYlZpZXcqKQoreworICAgIHJldHVybiAwOworfQorCiBzdGF0aWMg
dm9pZCB3ZWJraXRXZWJWaWV3U2V0TG9hZGVyQ2xpZW50KFdlYktpdFdlYlZpZXcqIHdlYlZpZXcs
IFdlYktpdFdlYkxvYWRlckNsaWVudCogbG9hZGVyQ2xpZW50LCBXS1BhZ2VSZWYgd2tQYWdlKQog
ewogICAgIHdlYlZpZXctPnByaXYtPmxvYWRlckNsaWVudCA9IGxvYWRlckNsaWVudDsKQEAgLTgw
LDYgKzk4LDEwIEBAIHN0YXRpYyB2b2lkIHdlYmtpdFdlYlZpZXdDb25zdHJ1Y3RlZChHT2JqZWN0
KiBvYmplY3QpCiAgICAgc3RhdGljIEdSZWZQdHI8V2ViS2l0V2ViTG9hZGVyQ2xpZW50PiBkZWZh
dWx0TG9hZGVyQ2xpZW50ID0gYWRvcHRHUmVmKFdFQktJVF9XRUJfTE9BREVSX0NMSUVOVChnX29i
amVjdF9uZXcoV0VCS0lUX1RZUEVfV0VCX0xPQURFUl9DTElFTlQsIE5VTEwpKSk7CiAgICAgd2Vi
a2l0V2ViVmlld1NldExvYWRlckNsaWVudCh3ZWJWaWV3LCBkZWZhdWx0TG9hZGVyQ2xpZW50Lmdl
dCgpLCB0b0FQSShwYWdlKSk7CiAKKyAgICBzdGF0aWMgR1JlZlB0cjxXZWJLaXRVSUNsaWVudD4g
ZGVmYXVsdFVJQ2xpZW50ID0gYWRvcHRHUmVmKFdFQktJVF9VSV9DTElFTlQoZ19vYmplY3RfbmV3
KFdFQktJVF9UWVBFX1VJX0NMSUVOVCwgTlVMTCkpKTsKKyAgICBwcml2LT51aUNsaWVudCA9IGRl
ZmF1bHRVSUNsaWVudC5nZXQoKTsKKyAgICB3ZWJraXRVSUNsaWVudEF0dGFjaFVJQ2xpZW50VG9Q
YWdlKHByaXYtPnVpQ2xpZW50LmdldCgpLCB0b0FQSShwYWdlKSk7CisKICAgICBwcml2LT5iYWNr
Rm9yd2FyZExpc3QgPSBhZG9wdEdSZWYod2Via2l0QmFja0ZvcndhcmRMaXN0Q3JlYXRlKFdLUGFn
ZUdldEJhY2tGb3J3YXJkTGlzdCh0b0FQSShwYWdlKSkpKTsKIH0KIApAQCAtMTI4LDYgKzE1MCwx
NSBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfaW5pdChXZWJLaXRXZWJWaWV3KiB3ZWJW
aWV3KQogICAgIG5ldyAocHJpdikgV2ViS2l0V2ViVmlld1ByaXZhdGUoKTsKIH0KIAorc3RhdGlj
IGdib29sZWFuIHdlYmtpdFdlYlZpZXdBY2N1bXVsYXRvck9iamVjdEhhbmRsZWQoR1NpZ25hbElu
dm9jYXRpb25IaW50KiwgR1ZhbHVlKiByZXR1cm5WYWx1ZSwgY29uc3QgR1ZhbHVlKiBoYW5kbGVy
UmV0dXJuLCBncG9pbnRlcikKK3sKKyAgICBncG9pbnRlciBvYmplY3QgPSBnX3ZhbHVlX2dldF9v
YmplY3QoaGFuZGxlclJldHVybik7CisgICAgaWYgKG9iamVjdCkKKyAgICAgICAgZ192YWx1ZV9z
ZXRfb2JqZWN0KHJldHVyblZhbHVlLCBvYmplY3QpOworCisgICAgcmV0dXJuICFvYmplY3Q7Cit9
CisKIHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJfdmlld19jbGFzc19pbml0KFdlYktpdFdlYlZpZXdD
bGFzcyogd2ViVmlld0NsYXNzKQogewogICAgIEdPYmplY3RDbGFzcyogZ09iamVjdENsYXNzID0g
R19PQkpFQ1RfQ0xBU1Mod2ViVmlld0NsYXNzKTsKQEAgLTEzNyw2ICsxNjgsOCBAQCBzdGF0aWMg
dm9pZCB3ZWJraXRfd2ViX3ZpZXdfY2xhc3NfaW5pdChXZWJLaXRXZWJWaWV3Q2xhc3MqIHdlYlZp
ZXdDbGFzcykKICAgICBnT2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtpdFdlYlZpZXdH
ZXRQcm9wZXJ0eTsKICAgICBnT2JqZWN0Q2xhc3MtPmZpbmFsaXplID0gd2Via2l0V2ViVmlld0Zp
bmFsaXplOwogCisgICAgd2ViVmlld0NsYXNzLT5jcmVhdGUgPSB3ZWJraXRXZWJWaWV3Q3JlYXRl
OworCiAgICAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlKHdlYlZpZXdDbGFzcywgc2l6ZW9mKFdl
YktpdFdlYlZpZXdQcml2YXRlKSk7CiAKICAgICAvKioKQEAgLTE4Miw2ICsyMTUsNzAgQEAgc3Rh
dGljIHZvaWQgd2Via2l0X3dlYl92aWV3X2NsYXNzX2luaXQoV2ViS2l0V2ViVmlld0NsYXNzKiB3
ZWJWaWV3Q2xhc3MpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICJUaGUgY3VycmVudCBhY3RpdmUgVVJJIG9mIHRoZSB2aWV3IiwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VC
S0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICAvKioKKyAgICAgKiBXZWJLaXRXZWJWaWV3Ojpj
cmVhdGU6CisgICAgICogQHdlYl92aWV3OiB0aGUgb2JqZWN0IG9uIHdoaWNoIHRoZSBzaWduYWwg
aXMgZW1pdHRlZAorICAgICAqCisgICAgICogRW1pdHRlZCB3aGVuIHRoZSBjcmVhdGlvbiBvZiBh
IG5ldyAjV2ViS2l0V2ViVmlldyBpcyByZXF1ZXN0ZWQuCisgICAgICogSWYgdGhpcyBzaWduYWwg
aXMgaGFuZGxlZCB0aGUgc2lnbmFsIGhhbmRsZXIgc2hvdWxkIHJldHVybiB0aGUKKyAgICAgKiBu
ZXdseSBjcmVhdGVkICNXZWJLaXRXZWJWaWV3LgorICAgICAqCisgICAgICogVGhlIG5ldyAjV2Vi
S2l0V2ViVmlldyBzaG91bGQgbm90IGJlIGRpc3BsYXllZCB0byB0aGUgdXNlcgorICAgICAqIHVu
dGlsIHRoZSAjV2ViS2l0V2ViVmlldzo6cmVhZHktdG8tc2hvdyBzaWduYWwgaXMgZW1pdHRlZC4K
KyAgICAgKgorICAgICAqIFRoZSBzaWduYWwgaGFuZGxlcnMgc2hvdWxkIG5vdCB0cnkgdG8gZGVh
bCB3aXRoIHRoZSByZWZlcmVuY2UgY291bnQgZm9yCisgICAgICogdGhlIG5ldyAjV2ViS2l0V2Vi
Vmlldy4gVGhlIHdpZGdldCB0byB3aGljaCB0aGUgd2lkZ2V0IGlzIGFkZGVkIHdpbGwKKyAgICAg
KiBoYW5kbGUgdGhhdC4KKyAgICAgKgorICAgICAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTog
YSBuZXdseSBhbGxvY2F0ZWQgI1dlYktpdFdlYlZpZXcgd2lkZ2V0CisgICAgICogICAgb3IgJU5V
TEwgdG8gcHJvcGFnYXRlIHRoZSBldmVudCBmdXJ0aGVyLgorICAgICAqLworICAgIHNpZ25hbHNb
Q1JFQVRFXSA9CisgICAgICAgIGdfc2lnbmFsX25ldygiY3JlYXRlIiwKKyAgICAgICAgICAgICAg
ICAgICAgIEdfVFlQRV9GUk9NX0NMQVNTKHdlYlZpZXdDbGFzcyksCisgICAgICAgICAgICAgICAg
ICAgICBHX1NJR05BTF9SVU5fTEFTVCwKKyAgICAgICAgICAgICAgICAgICAgIEdfU1RSVUNUX09G
RlNFVChXZWJLaXRXZWJWaWV3Q2xhc3MsIGNyZWF0ZSksCisgICAgICAgICAgICAgICAgICAgICB3
ZWJraXRXZWJWaWV3QWNjdW11bGF0b3JPYmplY3RIYW5kbGVkLCAwLAorICAgICAgICAgICAgICAg
ICAgICAgd2Via2l0X21hcnNoYWxfT0JKRUNUX19WT0lELAorICAgICAgICAgICAgICAgICAgICAg
R1RLX1RZUEVfV0lER0VULCAwKTsKKworICAgIC8qKgorICAgICAqIFdlYktpdFdlYlZpZXc6OnJl
YWR5LXRvLXNob3c6CisgICAgICogQHdlYl92aWV3OiB0aGUgb2JqZWN0IG9uIHdoaWNoIHRoZSBz
aWduYWwgaXMgZW1pdHRlZAorICAgICAqCisgICAgICogRW1pdHRlZCBhZnRlciAjV2ViS2l0V2Vi
Vmlldzo6Y3JlYXRlIG9uIHRoZSBuZXdseSBjcmVhdGVkICNXZWJLaXRXZWJWaWV3CisgICAgICog
d2hlbiBpdCBzaG91bGQgYmUgZGlzcGxheWVkIHRvIHRoZSB1c2VyLiBXaGVuIHRoaXMgc2lnbmFs
IGlzIGVtaXR0ZWQKKyAgICAgKiBhbGwgdGhlIGluZm9ybWF0aW9uIGFib3V0IGhvdyB0aGUgd2lu
ZG93IHNob3VsZCBsb29rLCBpbmNsdWRpbmcKKyAgICAgKiBzaXplLCBwb3NpdGlvbiwgd2hldGhl
ciB0aGUgbG9jYXRpb24sIHN0YXR1cyBhbmQgc2Nyb2xsYmFycworICAgICAqIHNob3VsZCBiZSBk
aXNwbGF5ZWQsIGlzIGFscmVhZHkgc2V0LgorICAgICAqLworICAgIHNpZ25hbHNbUkVBRFlfVE9f
U0hPV10gPQorICAgICAgICBnX3NpZ25hbF9uZXcoInJlYWR5LXRvLXNob3ciLAorICAgICAgICAg
ICAgICAgICAgICAgR19UWVBFX0ZST01fQ0xBU1Mod2ViVmlld0NsYXNzKSwKKyAgICAgICAgICAg
ICAgICAgICAgIEdfU0lHTkFMX1JVTl9MQVNULAorICAgICAgICAgICAgICAgICAgICAgR19TVFJV
Q1RfT0ZGU0VUKFdlYktpdFdlYlZpZXdDbGFzcywgcmVhZHlfdG9fc2hvdyksCisgICAgICAgICAg
ICAgICAgICAgICAwLCAwLAorICAgICAgICAgICAgICAgICAgICAgZ19jY2xvc3VyZV9tYXJzaGFs
X1ZPSURfX1ZPSUQsCisgICAgICAgICAgICAgICAgICAgICBHX1RZUEVfTk9ORSwgMCk7CisKKyAg
ICAvKioKKyAgICAgKiBXZWJLaXRXZWJWaWV3OjpjbG9zZToKKyAgICAgKiBAd2ViVmlldzogdGhl
IG9iamVjdCBvbiB3aGljaCB0aGUgc2lnbmFsIGlzIGVtaXR0ZWQKKyAgICAgKgorICAgICAqIEVt
aXR0ZWQgd2hlbiBjbG9zaW5nIGEgI1dlYktpdFdlYlZpZXcgaXMgcmVxdWVzdGVkLiBUaGlzIG9j
Y3VycyB3aGVuIGEKKyAgICAgKiBjYWxsIGlzIG1hZGUgZnJvbSBKYXZhU2NyaXB0J3Mgd2luZG93
LmNsb3NlIGZ1bmN0aW9uLgorICAgICAqIEl0IGlzIHRoZSBvd25lcidzIHJlc3BvbnNpYmlsaXR5
IHRvIGhhbmRsZSB0aGlzIHNpZ25hbCB0byBoaWRlIG9yCisgICAgICogZGVsZXRlIHRoZSAjV2Vi
S2l0V2ViVmlldywgaWYgbmVjZXNzYXJ5LgorICAgICAqLworICAgIHNpZ25hbHNbQ0xPU0VdID0K
KyAgICAgICAgZ19zaWduYWxfbmV3KCJjbG9zZSIsCisgICAgICAgICAgICAgICAgICAgICBHX1RZ
UEVfRlJPTV9DTEFTUyh3ZWJWaWV3Q2xhc3MpLAorICAgICAgICAgICAgICAgICAgICAgR19TSUdO
QUxfUlVOX0xBU1QsCisgICAgICAgICAgICAgICAgICAgICBHX1NUUlVDVF9PRkZTRVQoV2ViS2l0
V2ViVmlld0NsYXNzLCBjbG9zZSksCisgICAgICAgICAgICAgICAgICAgICAwLCAwLAorICAgICAg
ICAgICAgICAgICAgICAgZ19jY2xvc3VyZV9tYXJzaGFsX1ZPSURfX1ZPSUQsCisgICAgICAgICAg
ICAgICAgICAgICBHX1RZUEVfTk9ORSwgMCk7CiB9CiAKIHZvaWQgd2Via2l0V2ViVmlld1NldEVz
dGltYXRlZExvYWRQcm9ncmVzcyhXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBkb3VibGUgZXN0aW1h
dGVkTG9hZFByb2dyZXNzKQpAQCAtMjA3LDYgKzMwNCwyNiBAQCB2b2lkIHdlYmtpdFdlYlZpZXdV
cGRhdGVVUkkoV2ViS2l0V2ViVmlldyogd2ViVmlldykKICAgICBnX29iamVjdF9ub3RpZnkoR19P
QkpFQ1Qod2ViVmlldyksICJ1cmkiKTsKIH0KIAorV0tQYWdlUmVmIHdlYmtpdFdlYlZpZXdDcmVh
dGVOZXdQYWdlKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCit7CisgICAgV2ViS2l0V2ViVmlldyog
bmV3V2ViVmlldzsKKyAgICBnX3NpZ25hbF9lbWl0KHdlYlZpZXcsIHNpZ25hbHNbQ1JFQVRFXSwg
MCwgJm5ld1dlYlZpZXcpOworICAgIGlmICghbmV3V2ViVmlldykKKyAgICAgICAgcmV0dXJuIDA7
CisKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V0tQYWdlUmVmPihXS1JldGFpbih0b0FQSSh3ZWJr
aXRXZWJWaWV3QmFzZUdldFBhZ2UoV0VCS0lUX1dFQl9WSUVXX0JBU0UobmV3V2ViVmlldykpKSkp
OworfQorCit2b2lkIHdlYmtpdFdlYlZpZXdSZWFkeVRvU2hvd1BhZ2UoV2ViS2l0V2ViVmlldyog
d2ViVmlldykKK3sKKyAgICBnX3NpZ25hbF9lbWl0KHdlYlZpZXcsIHNpZ25hbHNbUkVBRFlfVE9f
U0hPV10sIDAsIE5VTEwpOworfQorCit2b2lkIHdlYmtpdFdlYlZpZXdDbG9zZVBhZ2UoV2ViS2l0
V2ViVmlldyogd2ViVmlldykKK3sKKyAgICBnX3NpZ25hbF9lbWl0KHdlYlZpZXcsIHNpZ25hbHNb
Q0xPU0VdLCAwLCBOVUxMKTsKK30KKwogLyoqCiAgKiB3ZWJraXRfd2ViX3ZpZXdfbmV3OgogICoK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZp
ZXcuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuaApp
bmRleCA3OTBhZTRmLi5iOTRkMzQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvV2ViS2l0V2ViVmlldy5oCkBAIC01NCw2ICs1NCwxMCBAQCBzdHJ1Y3QgX1dlYktp
dFdlYlZpZXcgewogc3RydWN0IF9XZWJLaXRXZWJWaWV3Q2xhc3MgewogICAgIFdlYktpdFdlYlZp
ZXdCYXNlQ2xhc3MgcGFyZW50OwogCisgICAgR3RrV2lkZ2V0ICooKiBjcmVhdGUpICAgICAgICAo
V2ViS2l0V2ViVmlldyAqd2ViX3ZpZXcpOworICAgIHZvaWQgICAgICAgKCogcmVhZHlfdG9fc2hv
dykgKFdlYktpdFdlYlZpZXcgKndlYl92aWV3KTsKKyAgICB2b2lkICAgICAgICgqIGNsb3NlKSAg
ICAgICAgIChXZWJLaXRXZWJWaWV3ICp3ZWJfdmlldyk7CisKICAgICAvKiBQYWRkaW5nIGZvciBm
dXR1cmUgZXhwYW5zaW9uICovCiAgICAgdm9pZCAoKl93ZWJraXRfcmVzZXJ2ZWQwKSAodm9pZCk7
CiAgICAgdm9pZCAoKl93ZWJraXRfcmVzZXJ2ZWQxKSAodm9pZCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3UHJpdmF0ZS5oIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld1ByaXZhdGUuaAppbmRl
eCBlNjJkNTE1Li44N2QxYzYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXRXZWJWaWV3UHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdQcml2YXRlLmgKQEAgLTMxLDUgKzMxLDggQEAKIAog
dm9pZCB3ZWJraXRXZWJWaWV3U2V0RXN0aW1hdGVkTG9hZFByb2dyZXNzKFdlYktpdFdlYlZpZXcq
LCBkb3VibGUgZXN0aW1hdGVkTG9hZFByb2dyZXNzKTsKIHZvaWQgd2Via2l0V2ViVmlld1VwZGF0
ZVVSSShXZWJLaXRXZWJWaWV3Kik7CitXS1BhZ2VSZWYgd2Via2l0V2ViVmlld0NyZWF0ZU5ld1Bh
Z2UoV2ViS2l0V2ViVmlldyopOwordm9pZCB3ZWJraXRXZWJWaWV3UmVhZHlUb1Nob3dQYWdlKFdl
YktpdFdlYlZpZXcqKTsKK3ZvaWQgd2Via2l0V2ViVmlld0Nsb3NlUGFnZShXZWJLaXRXZWJWaWV3
Kik7CiAKICNlbmRpZiAvLyBXZWJLaXRXZWJWaWV3UHJpdmF0ZV9oCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0V2ViVmlldy5jcHAg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0V2ViVmll
dy5jcHAKaW5kZXggYTI5M2VlZi4uN2EyNWQ0YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdFdlYlZpZXcuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRXZWJWaWV3LmNwcApA
QCAtMTgsMTAgKzE4LDEyIEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IldlYktpdFRlc3RTZXJ2ZXIuaCIKICNpbmNsdWRlICJXZWJWaWV3VGVzdC5oIgotI2luY2x1ZGUg
IkxvYWRUcmFja2luZ1Rlc3QuaCIKICNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+CiAK
K3N0YXRpYyBXZWJLaXRUZXN0U2VydmVyKiBrU2VydmVyOworCiBzdGF0aWMgdm9pZCB0ZXN0V2Vi
Vmlld0RlZmF1bHRDb250ZXh0KFdlYlZpZXdUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQogewog
ICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJfdmlld19nZXRfY29udGV4dCh0ZXN0LT5tX3dlYlZpZXcp
ID09IHdlYmtpdF93ZWJfY29udGV4dF9nZXRfZGVmYXVsdCgpKTsKQEAgLTQ3LDEzICs0OSwxMDgg
QEAgc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdzU2hhcmVDbGllbnRzKFRlc3QqIHRlc3QsIGdjb25z
dHBvaW50ZXIpCiAgICAgZ19hc3NlcnQoY2xpZW50MSA9PSBjbGllbnQyKTsKIH0KIAorc3RhdGlj
IHZvaWQgc2VydmVyQ2FsbGJhY2soU291cFNlcnZlciogc2VydmVyLCBTb3VwTWVzc2FnZSogbWVz
c2FnZSwgY29uc3QgY2hhciogcGF0aCwgR0hhc2hUYWJsZSosIFNvdXBDbGllbnRDb250ZXh0Kiwg
Z3BvaW50ZXIpCit7CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGh0bWxPbkxvYWRGb3JtYXQgPSAi
PGh0bWw+PGJvZHkgb25Mb2FkPVwiJXNcIj48L2JvZHk+PC9odG1sPiI7CisKKyAgICBpZiAobWVz
c2FnZS0+bWV0aG9kICE9IFNPVVBfTUVUSE9EX0dFVCkgeworICAgICAgICBzb3VwX21lc3NhZ2Vf
c2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19OT1RfSU1QTEVNRU5URUQpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwg
U09VUF9TVEFUVVNfT0spOworCisgICAgaWYgKGdfc3RyX2VxdWFsKHBhdGgsICIvY3JlYXRlX25l
d192aWV3IikpIHsKKyAgICAgICAgR093blB0cjxjaGFyPiB3aW5kb3dPcGVuU3RyaW5nKGdfc3Ry
ZHVwX3ByaW50Zigid2luZG93Lm9wZW4oJyVzJykiLCBrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIv
bmV3X3dpbmRvdyIpLmRhdGEoKSkpOworICAgICAgICBjaGFyKiBodG1sU3RyaW5nID0gZ19zdHJk
dXBfcHJpbnRmKGh0bWxPbkxvYWRGb3JtYXQsIHdpbmRvd09wZW5TdHJpbmcuZ2V0KCkpOworICAg
ICAgICBzb3VwX21lc3NhZ2VfYm9keV9hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2VfYm9keSwgU09V
UF9NRU1PUllfVEFLRSwgaHRtbFN0cmluZywgc3RybGVuKGh0bWxTdHJpbmcpKTsKKyAgICB9IGVs
c2UgaWYgKGdfc3RyX2VxdWFsKHBhdGgsICIvbmV3X3dpbmRvdyIpKSB7CisgICAgICAgIGNoYXIq
IGh0bWxTdHJpbmcgPSBnX3N0cmR1cF9wcmludGYoaHRtbE9uTG9hZEZvcm1hdCwgInNlbGYuY2xv
c2UoKTsiKTsKKyAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1lc3NhZ2UtPnJlc3Bv
bnNlX2JvZHksIFNPVVBfTUVNT1JZX1RBS0UsIGh0bWxTdHJpbmcsIHN0cmxlbihodG1sU3RyaW5n
KSk7CisgICAgfQorCisgICAgc291cF9tZXNzYWdlX2JvZHlfY29tcGxldGUobWVzc2FnZS0+cmVz
cG9uc2VfYm9keSk7Cit9CisKK2NsYXNzIFVJQ2xpZW50VGVzdDogcHVibGljIFdlYlZpZXdUZXN0
IHsKK3B1YmxpYzoKKyAgICBNQUtFX0dMSUJfVEVTVF9GSVhUVVJFKFVJQ2xpZW50VGVzdCk7CisK
KyAgICBlbnVtIFdlYlZpZXdFdmVudHMgeworICAgICAgICBDcmVhdGUsCisgICAgICAgIFJlYWR5
VG9TaG93LAorICAgICAgICBDbG9zZQorICAgIH07CisKKyAgICBzdGF0aWMgdm9pZCB2aWV3Q2xv
c2UoV2ViS2l0V2ViVmlldyogd2ViVmlldywgVUlDbGllbnRUZXN0KiB0ZXN0KQorICAgIHsKKyAg
ICAgICAgZ19hc3NlcnQod2ViVmlldyAhPSB0ZXN0LT5tX3dlYlZpZXcpOworCisgICAgICAgIHRl
c3QtPm1fd2ViVmlld0V2ZW50cy5hcHBlbmQoQ2xvc2UpOworICAgICAgICBnX29iamVjdF91bnJl
Zih3ZWJWaWV3KTsKKworICAgICAgICBnX21haW5fbG9vcF9xdWl0KHRlc3QtPm1fbWFpbkxvb3Ap
OworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIHZpZXdSZWFkeVRvU2hvdyhXZWJLaXRXZWJWaWV3
KiB3ZWJWaWV3LCBVSUNsaWVudFRlc3QqIHRlc3QpCisgICAgeworICAgICAgICBnX2Fzc2VydCh3
ZWJWaWV3ICE9IHRlc3QtPm1fd2ViVmlldyk7CisKKyAgICAgICAgdGVzdC0+bV93ZWJWaWV3RXZl
bnRzLmFwcGVuZChSZWFkeVRvU2hvdyk7CisgICAgfQorCisgICAgc3RhdGljIEd0a1dpZGdldCog
dmlld0NyZWF0ZShXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBVSUNsaWVudFRlc3QqIHRlc3QpCisg
ICAgeworICAgICAgICBnX2Fzc2VydCh3ZWJWaWV3ID09IHRlc3QtPm1fd2ViVmlldyk7CisKKyAg
ICAgICAgR3RrV2lkZ2V0KiBuZXdXZWJWaWV3ID0gd2Via2l0X3dlYl92aWV3X25ld193aXRoX2Nv
bnRleHQod2Via2l0X3dlYl92aWV3X2dldF9jb250ZXh0KHdlYlZpZXcpKTsKKyAgICAgICAgZ19v
YmplY3RfcmVmX3NpbmsobmV3V2ViVmlldyk7CisKKyAgICAgICAgdGVzdC0+bV93ZWJWaWV3RXZl
bnRzLmFwcGVuZChDcmVhdGUpOworCisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobmV3V2ViVmll
dywgInJlYWR5LXRvLXNob3ciLCBHX0NBTExCQUNLKHZpZXdSZWFkeVRvU2hvdyksIHRlc3QpOwor
ICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG5ld1dlYlZpZXcsICJjbG9zZSIsIEdfQ0FMTEJBQ0so
dmlld0Nsb3NlKSwgdGVzdCk7CisKKyAgICAgICAgcmV0dXJuIG5ld1dlYlZpZXc7CisgICAgfQor
CisgICAgVUlDbGllbnRUZXN0KCkKKyAgICB7CisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV93
ZWJWaWV3LCAiY3JlYXRlIiwgR19DQUxMQkFDSyh2aWV3Q3JlYXRlKSwgdGhpcyk7CisgICAgfQor
CisgICAgflVJQ2xpZW50VGVzdCgpCisgICAgeworICAgICAgICBnX3NpZ25hbF9oYW5kbGVyc19k
aXNjb25uZWN0X21hdGNoZWQobV93ZWJWaWV3LCBHX1NJR05BTF9NQVRDSF9EQVRBLCAwLCAwLCAw
LCAwLCB0aGlzKTsKKyAgICB9CisKKyAgICBWZWN0b3I8V2ViVmlld0V2ZW50cz4gbV93ZWJWaWV3
RXZlbnRzOworfTsKKworc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdDcmVhdGVSZWFkeUNsb3NlKFVJ
Q2xpZW50VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICB3ZWJraXRfd2ViX3ZpZXdf
bG9hZF91cmkodGVzdC0+bV93ZWJWaWV3LCBrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvY3JlYXRl
X25ld192aWV3IikuZGF0YSgpKTsKKyAgICBnX21haW5fbG9vcF9ydW4odGVzdC0+bV9tYWluTG9v
cCk7CisKKyAgICBWZWN0b3I8VUlDbGllbnRUZXN0OjpXZWJWaWV3RXZlbnRzPiYgZXZlbnRzID0g
dGVzdC0+bV93ZWJWaWV3RXZlbnRzOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHMuc2l6ZSgp
LCA9PSwgMyk7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1swXSwgPT0sIFVJQ2xpZW50VGVz
dDo6Q3JlYXRlKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzFdLCA9PSwgVUlDbGllbnRU
ZXN0OjpSZWFkeVRvU2hvdyk7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1syXSwgPT0sIFVJ
Q2xpZW50VGVzdDo6Q2xvc2UpOworfQorCiB2b2lkIGJlZm9yZUFsbCgpCiB7CisgICAga1NlcnZl
ciA9IG5ldyBXZWJLaXRUZXN0U2VydmVyKCk7CisgICAga1NlcnZlci0+cnVuKHNlcnZlckNhbGxi
YWNrKTsKKwogICAgIFdlYlZpZXdUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAiZGVmYXVsdC1j
b250ZXh0IiwgdGVzdFdlYlZpZXdEZWZhdWx0Q29udGV4dCk7CiAgICAgV2ViVmlld1Rlc3Q6OmFk
ZCgiV2ViS2l0V2ViVmlldyIsICJjdXN0b20tY2hhcnNldCIsIHRlc3RXZWJWaWV3Q3VzdG9tQ2hh
cnNldCk7CiAgICAgVGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgIndlYnZpZXdzLXNoYXJlLWNs
aWVudHMiLCB0ZXN0V2ViVmlld3NTaGFyZUNsaWVudHMpOworICAgIFVJQ2xpZW50VGVzdDo6YWRk
KCJXZWJLaXRXZWJWaWV3IiwgIndlYnZpZXctY3JlYXRlLXJlYWR5LWNsb3NlIiwgdGVzdFdlYlZp
ZXdDcmVhdGVSZWFkeUNsb3NlKTsKIH0KIAogdm9pZCBhZnRlckFsbCgpCiB7CisgICAgZGVsZXRl
IGtTZXJ2ZXI7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay93ZWJraXQybWFyc2hhbC5saXN0IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
d2Via2l0Mm1hcnNoYWwubGlzdAppbmRleCBiNzA2OWE3Li4zZjViZmZjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay93ZWJraXQybWFyc2hhbC5saXN0CisrKyBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdDJtYXJzaGFsLmxpc3QKQEAg
LTEsNSArMSw2IEBACiBCT09MRUFOOk9CSkVDVCxTVFJJTkcsUE9JTlRFUgogQk9PTEVBTjpPQkpF
Q1QKIEJPT0xFQU46Vk9JRAorT0JKRUNUOlZPSUQKIFZPSUQ6T0JKRUNULFBPSU5URVIKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>113313</attachid>
            <date>2011-11-02 07:09:33 -0700</date>
            <delta_ts>2011-12-12 07:14:44 -0800</delta_ts>
            <desc>Updated patch to fix unit tests</desc>
            <filename>wk2-ui-client5.diff</filename>
            <type>text/plain</type>
            <size>21818</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCAzZTBmOTljLi4yN2FhMzhlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzgg
QEAKKzIwMTEtMTEtMDIgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgorCisgICAgICAgIFtHVEtdIEluaXRpYWwgVUkgY2xpZW50IGltcGxlbWVudGF0aW9uIGZvciBX
ZWJLaXQyIEdUSyArQVBJCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD02OTc1MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogR05VbWFrZWZpbGUuYW06IEFkZCBuZXcgZmlsZXMgdG8gY29tcGlsYXRpb24uCisg
ICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0VUlDbGllbnQuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKGNyZWF0ZU5ld1BhZ2UpOiBDYWxsIHdlYmtpdFdlYlZpZXdDcmVhdGVOZXdQYWdlLgor
ICAgICAgICAoc2hvd1BhZ2UpOiBDYWxsIHdlYmtpdFdlYlZpZXdSZWFkeVRvU2hvd1BhZ2UuCisg
ICAgICAgIChjbG9zZVBhZ2UpOiBDYWxsIHdlYmtpdFdlYlZpZXdDbG9zZVBhZ2UuCisgICAgICAg
ICh3ZWJraXRVSUNsaWVudEF0dGFjaFVJQ2xpZW50VG9QYWdlKTogSW5pdGlhbGl6ZSBVSSBjbGll
bnQgYW5kCisgICAgICAgIGF0dGFjaCBpdCB0byB0aGUgZ2l2ZW4gcGFnZS4KKyAgICAgICAgKHdl
YmtpdF91aV9jbGllbnRfaW5pdCk6CisgICAgICAgICh3ZWJraXRfdWlfY2xpZW50X2NsYXNzX2lu
aXQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFVJQ2xpZW50Lmg6IEFkZGVk
LgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuY3BwOgorICAgICAg
ICAod2Via2l0V2ViVmlld0NyZWF0ZSk6IERlZmF1bHQgaW1wbGVtZW50YXRpb24gb2Ygc2lnbmFs
CisgICAgICAgIFdlYktpdFdlYlZpZXc6OmNyZWF0ZSB0aGF0IHNpbXBseSByZXR1cm5zIDAuCisg
ICAgICAgICh3ZWJraXRXZWJWaWV3Q29uc3RydWN0ZWQpOiBDcmVhdGUgdGhlIGRlZmF1bHQgVUkg
Y2xpZW50LgorICAgICAgICAod2Via2l0V2ViVmlld0FjY3VtdWxhdG9yT2JqZWN0SGFuZGxlZCk6
CisgICAgICAgICh3ZWJraXRfd2ViX3ZpZXdfY2xhc3NfaW5pdCk6CisgICAgICAgICh3ZWJraXRX
ZWJWaWV3Q3JlYXRlTmV3UGFnZSk6IEVtaXQgY3JlYXRlIHNpZ25hbC4KKyAgICAgICAgKHdlYmtp
dFdlYlZpZXdSZWFkeVRvU2hvd1BhZ2UpOiBFbWl0IHJlYWR5LXRvLXNob3cgc2lnbmFsLgorICAg
ICAgICAod2Via2l0V2ViVmlld0Nsb3NlUGFnZSk6IEVtaXQgY2xvc2Ugc2lnbmFsLgorICAgICAg
ICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuaDoKKyAgICAgICAgKiBVSVByb2Nl
c3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3UHJpdmF0ZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRXZWJWaWV3LmNwcDoKKyAgICAgICAgKHNlcnZlckNhbGxi
YWNrKToKKyAgICAgICAgKHRlc3RXZWJWaWV3Q3JlYXRlUmVhZHlDbG9zZSk6CisgICAgICAgIChi
ZWZvcmVBbGwpOgorICAgICAgICAoYWZ0ZXJBbGwpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
Z3RrL3dlYmtpdDJtYXJzaGFsLmxpc3Q6CisKIDIwMTEtMTEtMDEgIEFuZHJhcyBCZWNzaSAgPGFu
ZHJhcy5iZWNzaUBub2tpYS5jb20+CiAKICAgICAgICAgW1F0XVtXSzJdIE1ha2UgQVBJIHRlc3Rz
IGxlc3Mgbm9pc3kKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFtIGIv
U291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUuYW0KaW5kZXggZTFhZGJhYi4uNGRkNWQzMCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUuYW0KKysrIGIvU291cmNlL1dlYktp
dDIvR05VbWFrZWZpbGUuYW0KQEAgLTQ5OCw2ICs0OTgsOCBAQCBsaWJ3ZWJraXQyZ3RrX0BXRUJL
SVRHVEtfQVBJX01BSk9SX1ZFUlNJT05AX0BXRUJLSVRHVEtfQVBJX01JTk9SX1ZFUlNJT05AX2xh
X1NPVQogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFNldHRpbmdzLmNw
cCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0U2V0dGluZ3MuaCBc
CiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0U2V0dGluZ3NQcml2YXRl
LmggXAorCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFVJQ2xpZW50LmNw
cCBcCisJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0VUlDbGllbnQuaCBc
CiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViQ29udGV4dC5oIFwK
IAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJDb250ZXh0LmNwcCBc
CiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViQ29udGV4dFByaXZh
dGUuaCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJL
aXRVSUNsaWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRV
SUNsaWVudC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2ZmNWZhNgot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktp
dFVJQ2xpZW50LmNwcApAQCAtMCwwICsxLDEwMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MSBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0VUlDbGll
bnQuaCIKKworI2luY2x1ZGUgIldlYktpdFdlYlZpZXdQcml2YXRlLmgiCisjaW5jbHVkZSAiV2Vi
UGFnZVByb3h5LmgiCisjaW5jbHVkZSA8V2ViS2l0Mi9XS0Jhc2UuaD4KKwordXNpbmcgbmFtZXNw
YWNlIFdlYktpdDsKKworR19ERUZJTkVfVFlQRShXZWJLaXRVSUNsaWVudCwgd2Via2l0X3VpX2Ns
aWVudCwgR19UWVBFX09CSkVDVCkKKworc3RhdGljIFdLUGFnZVJlZiBjcmVhdGVOZXdQYWdlKFdL
UGFnZVJlZiBwYWdlLCBXS1VSTFJlcXVlc3RSZWYsIFdLRGljdGlvbmFyeVJlZiwgV0tFdmVudE1v
ZGlmaWVycywgV0tFdmVudE1vdXNlQnV0dG9uLCBjb25zdCB2b2lkKikKK3sKKyAgICByZXR1cm4g
d2Via2l0V2ViVmlld0NyZWF0ZU5ld1BhZ2UoV0VCS0lUX1dFQl9WSUVXKHRvSW1wbChwYWdlKS0+
dmlld1dpZGdldCgpKSk7Cit9CisKK3N0YXRpYyB2b2lkIHNob3dQYWdlKFdLUGFnZVJlZiBwYWdl
LCBjb25zdCB2b2lkKikKK3sKKyAgICB3ZWJraXRXZWJWaWV3UmVhZHlUb1Nob3dQYWdlKFdFQktJ
VF9XRUJfVklFVyh0b0ltcGwocGFnZSktPnZpZXdXaWRnZXQoKSkpOworfQorCitzdGF0aWMgdm9p
ZCBjbG9zZVBhZ2UoV0tQYWdlUmVmIHBhZ2UsIGNvbnN0IHZvaWQqKQoreworICAgIHdlYmtpdFdl
YlZpZXdDbG9zZVBhZ2UoV0VCS0lUX1dFQl9WSUVXKHRvSW1wbChwYWdlKS0+dmlld1dpZGdldCgp
KSk7Cit9CisKK3ZvaWQgd2Via2l0VUlDbGllbnRBdHRhY2hVSUNsaWVudFRvUGFnZShXZWJLaXRV
SUNsaWVudCogdWlDbGllbnQsIFdLUGFnZVJlZiB3a1BhZ2UpCit7CisgICAgV0tQYWdlVUlDbGll
bnQgd2tVSUNsaWVudCA9IHsKKyAgICAgICAga1dLUGFnZVVJQ2xpZW50Q3VycmVudFZlcnNpb24s
CisgICAgICAgIHVpQ2xpZW50LCAvLyBjbGllbnRJbmZvCisgICAgICAgIDAsIC8vIGNyZWF0ZU5l
d1BhZ2VfZGVwcmVjYXRlZEZvclVzZVdpdGhWMAorICAgICAgICBzaG93UGFnZSwKKyAgICAgICAg
Y2xvc2VQYWdlLAorICAgICAgICAwLCAvLyB0YWtlRm9jdXMKKyAgICAgICAgMCwgLy8gZm9jdXMK
KyAgICAgICAgMCwgLy8gdW5mb2N1cworICAgICAgICAwLCAvLyBydW5KYXZhU2NyaXB0QWxlcnQK
KyAgICAgICAgMCwgLy8gcnVuSmF2YVNjcmlwdENvbmZpcm0KKyAgICAgICAgMCwgLy8gcnVuSmF2
YVNjcmlwdFByb21wdAorICAgICAgICAwLCAvLyBzZXRTdGF0dXNUZXh0CisgICAgICAgIDAsIC8v
IG1vdXNlRGlkTW92ZU92ZXJFbGVtZW50X2RlcHJlY2F0ZWRGb3JVc2VXaXRoVjAKKyAgICAgICAg
MCwgLy8gbWlzc2luZ1BsdWdpbkJ1dHRvbkNsaWNrZWQKKyAgICAgICAgMCwgLy8gZGlkTm90SGFu
ZGxlS2V5RXZlbnQKKyAgICAgICAgMCwgLy8gZGlkTm90SGFuZGxlV2hlZWxFdmVudAorICAgICAg
ICAwLCAvLyB0b29sYmFyc0FyZVZpc2libGUKKyAgICAgICAgMCwgLy8gc2V0VG9vbGJhcnNBcmVW
aXNpYmxlCisgICAgICAgIDAsIC8vIG1lbnVCYXJJc1Zpc2libGUKKyAgICAgICAgMCwgLy8gc2V0
TWVudUJhcklzVmlzaWJsZQorICAgICAgICAwLCAvLyBzdGF0dXNCYXJJc1Zpc2libGUKKyAgICAg
ICAgMCwgLy8gc2V0U3RhdHVzQmFySXNWaXNpYmxlCisgICAgICAgIDAsIC8vIGlzUmVzaXphYmxl
CisgICAgICAgIDAsIC8vIHNldElzUmVzaXphYmxlCisgICAgICAgIDAsIC8vIGdldFdpbmRvd0Zy
YW1lCisgICAgICAgIDAsIC8vIHNldFdpbmRvd0ZyYW1lCisgICAgICAgIDAsIC8vIHJ1bkJlZm9y
ZVVubG9hZENvbmZpcm1QYW5lbAorICAgICAgICAwLCAvLyBkaWREcmF3CisgICAgICAgIDAsIC8v
IHBhZ2VEaWRTY3JvbGwKKyAgICAgICAgMCwgLy8gZXhjZWVkZWREYXRhYmFzZVF1b3RhCisgICAg
ICAgIDAsIC8vIHJ1bk9wZW5QYW5lbAorICAgICAgICAwLCAvLyBkZWNpZGVQb2xpY3lGb3JHZW9s
b2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0CisgICAgICAgIDAsIC8vIGhlYWRlckhlaWdodAorICAg
ICAgICAwLCAvLyBmb290ZXJIZWlnaHQKKyAgICAgICAgMCwgLy8gZHJhd0hlYWRlcgorICAgICAg
ICAwLCAvLyBkcmF3Rm9vdGVyCisgICAgICAgIDAsIC8vIHByaW50RnJhbWUKKyAgICAgICAgMCwg
Ly8gcnVuTW9kYWwKKyAgICAgICAgMCwgLy8gZGlkQ29tcGxldGVSdWJiZXJCYW5kRm9yTWFpbkZy
YW1lCisgICAgICAgIDAsIC8vIHNhdmVEYXRhVG9GaWxlSW5Eb3dubG9hZHNGb2xkZXIKKyAgICAg
ICAgMCwgLy8gc2hvdWxkSW50ZXJydXB0SmF2YVNjcmlwdAorICAgICAgICBjcmVhdGVOZXdQYWdl
LAorICAgICAgICAwLCAvLyBtb3VzZURpZE1vdmVPdmVyRWxlbWVudAorICAgIH07CisgICAgV0tQ
YWdlU2V0UGFnZVVJQ2xpZW50KHdrUGFnZSwgJndrVUlDbGllbnQpOworfQorCitzdGF0aWMgdm9p
ZCB3ZWJraXRfdWlfY2xpZW50X2luaXQoV2ViS2l0VUlDbGllbnQqIGNsaWVudCkKK3sKK30KKwor
c3RhdGljIHZvaWQgd2Via2l0X3VpX2NsaWVudF9jbGFzc19pbml0KFdlYktpdFVJQ2xpZW50Q2xh
c3MqIGNsaWVudENsYXNzKQoreworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvV2ViS2l0VUlDbGllbnQuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL1dlYktpdFVJQ2xpZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uNGM1ZjQ0MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL1dlYktpdFVJQ2xpZW50LmgKQEAgLTAsMCArMSw1NiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMSBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWYgIWRlZmluZWQoX19XRUJLSVQyX0hfSU5TSURFX18p
ICYmICFkZWZpbmVkKFdFQktJVDJfQ09NUElMQVRJT04pCisjZXJyb3IgIk9ubHkgPHdlYmtpdDIv
d2Via2l0Mi5oPiBjYW4gYmUgaW5jbHVkZWQgZGlyZWN0bHkuIgorI2VuZGlmCisKKyNpZm5kZWYg
V2ViS2l0VUlDbGllbnRfaAorI2RlZmluZSBXZWJLaXRVSUNsaWVudF9oCisKKyNpbmNsdWRlIDxX
ZWJLaXQyL1dlYktpdDIuaD4KKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorCitHX0JFR0lOX0RF
Q0xTCisKKyNkZWZpbmUgV0VCS0lUX1RZUEVfVUlfQ0xJRU5UICAgICAgICAgICAgKHdlYmtpdF91
aV9jbGllbnRfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX1VJX0NMSUVOVChvYmopICAgICAg
ICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfVFlQRV9VSV9D
TElFTlQsIFdlYktpdFVJQ2xpZW50KSkKKyNkZWZpbmUgV0VCS0lUX1VJX0NMSUVOVF9DTEFTUyhr
bGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfVFlQRV9V
SV9DTElFTlQsIFdlYktpdFVJQ2xpZW50Q2xhc3MpKQorI2RlZmluZSBXRUJLSVRfSVNfVUlfQ0xJ
RU5UKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJ
VF9UWVBFX1VJX0NMSUVOVCkpCisjZGVmaW5lIFdFQktJVF9JU19VSV9DTElFTlRfQ0xBU1Moa2xh
c3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX1RZUEVfVUlfQ0xJ
RU5UKSkKKyNkZWZpbmUgV0VCS0lUX1VJX0NMSUVOVF9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9J
TlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfVFlQRV9VSV9DTElFTlQsIFdlYktpdFVJ
Q2xpZW50Q2xhc3MpKQorCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0VUlDbGllbnQgICAgICBXZWJL
aXRVSUNsaWVudDsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRVSUNsaWVudENsYXNzIFdlYktpdFVJ
Q2xpZW50Q2xhc3M7CisKK3N0cnVjdCBfV2ViS2l0VUlDbGllbnQgeworICAgIEdPYmplY3QgcGFy
ZW50OworfTsKKworc3RydWN0IF9XZWJLaXRVSUNsaWVudENsYXNzIHsKKyAgICBHT2JqZWN0Q2xh
c3MgcGFyZW50X2NsYXNzOworfTsKKworR1R5cGUgd2Via2l0X3VpX2NsaWVudF9nZXRfdHlwZSAo
dm9pZCk7CisKK3ZvaWQgd2Via2l0VUlDbGllbnRBdHRhY2hVSUNsaWVudFRvUGFnZShXZWJLaXRV
SUNsaWVudCosIFdLUGFnZVJlZik7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5jcHAgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmNwcAppbmRleCBh
ZDI4MGNmLi45NDQwOGQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay9XZWJLaXRXZWJWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay9XZWJLaXRXZWJWaWV3LmNwcApAQCAtMjEsNyArMjEsOSBAQAogI2luY2x1ZGUgIldlYktp
dFdlYlZpZXcuaCIKIAogI2luY2x1ZGUgIldlYktpdEJhY2tGb3J3YXJkTGlzdFByaXZhdGUuaCIK
KyNpbmNsdWRlICJXZWJLaXRNYXJzaGFsLmgiCiAjaW5jbHVkZSAiV2ViS2l0U2V0dGluZ3NQcml2
YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0VUlDbGllbnQuaCIKICNpbmNsdWRlICJXZWJLaXRXZWJD
b250ZXh0UHJpdmF0ZS5oIgogI2luY2x1ZGUgIldlYktpdFdlYkxvYWRlckNsaWVudC5oIgogI2lu
Y2x1ZGUgIldlYktpdFdlYkxvYWRlckNsaWVudFByaXZhdGUuaCIKQEAgLTQwLDYgKzQyLDE0IEBA
IHVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogZW51
bSB7CisgICAgQ1JFQVRFLAorICAgIFJFQURZX1RPX1NIT1csCisgICAgQ0xPU0UsCisKKyAgICBM
QVNUX1NJR05BTAorfTsKKworZW51bSB7CiAgICAgUFJPUF8wLAogCiAgICAgUFJPUF9XRUJfQ09O
VEVYVCwKQEAgLTU0LDEyICs2NCwyMCBAQCBzdHJ1Y3QgX1dlYktpdFdlYlZpZXdQcml2YXRlIHsK
ICAgICBDU3RyaW5nIGFjdGl2ZVVSSTsKIAogICAgIEdSZWZQdHI8V2ViS2l0V2ViTG9hZGVyQ2xp
ZW50PiBsb2FkZXJDbGllbnQ7CisgICAgR1JlZlB0cjxXZWJLaXRVSUNsaWVudD4gdWlDbGllbnQ7
CiAgICAgR1JlZlB0cjxXZWJLaXRCYWNrRm9yd2FyZExpc3Q+IGJhY2tGb3J3YXJkTGlzdDsKICAg
ICBHUmVmUHRyPFdlYktpdFNldHRpbmdzPiBzZXR0aW5nczsKIH07CiAKK3N0YXRpYyBndWludCBz
aWduYWxzW0xBU1RfU0lHTkFMXSA9IHsgMCwgfTsKKwogR19ERUZJTkVfVFlQRShXZWJLaXRXZWJW
aWV3LCB3ZWJraXRfd2ViX3ZpZXcsIFdFQktJVF9UWVBFX1dFQl9WSUVXX0JBU0UpCiAKK3N0YXRp
YyBHdGtXaWRnZXQqIHdlYmtpdFdlYlZpZXdDcmVhdGUoV2ViS2l0V2ViVmlldyopCit7CisgICAg
cmV0dXJuIDA7Cit9CisKIHN0YXRpYyB2b2lkIHdlYmtpdFdlYlZpZXdTZXRMb2FkZXJDbGllbnQo
V2ViS2l0V2ViVmlldyogd2ViVmlldywgV2ViS2l0V2ViTG9hZGVyQ2xpZW50KiBsb2FkZXJDbGll
bnQsIFdLUGFnZVJlZiB3a1BhZ2UpCiB7CiAgICAgd2ViVmlldy0+cHJpdi0+bG9hZGVyQ2xpZW50
ID0gbG9hZGVyQ2xpZW50OwpAQCAtODIsNiArMTAwLDEwIEBAIHN0YXRpYyB2b2lkIHdlYmtpdFdl
YlZpZXdDb25zdHJ1Y3RlZChHT2JqZWN0KiBvYmplY3QpCiAgICAgc3RhdGljIEdSZWZQdHI8V2Vi
S2l0V2ViTG9hZGVyQ2xpZW50PiBkZWZhdWx0TG9hZGVyQ2xpZW50ID0gYWRvcHRHUmVmKFdFQktJ
VF9XRUJfTE9BREVSX0NMSUVOVChnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfV0VCX0xPQURFUl9D
TElFTlQsIE5VTEwpKSk7CiAgICAgd2Via2l0V2ViVmlld1NldExvYWRlckNsaWVudCh3ZWJWaWV3
LCBkZWZhdWx0TG9hZGVyQ2xpZW50LmdldCgpLCB0b0FQSShwYWdlKSk7CiAKKyAgICBzdGF0aWMg
R1JlZlB0cjxXZWJLaXRVSUNsaWVudD4gZGVmYXVsdFVJQ2xpZW50ID0gYWRvcHRHUmVmKFdFQktJ
VF9VSV9DTElFTlQoZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX1VJX0NMSUVOVCwgTlVMTCkpKTsK
KyAgICBwcml2LT51aUNsaWVudCA9IGRlZmF1bHRVSUNsaWVudC5nZXQoKTsKKyAgICB3ZWJraXRV
SUNsaWVudEF0dGFjaFVJQ2xpZW50VG9QYWdlKHByaXYtPnVpQ2xpZW50LmdldCgpLCB0b0FQSShw
YWdlKSk7CisKICAgICBwcml2LT5iYWNrRm9yd2FyZExpc3QgPSBhZG9wdEdSZWYod2Via2l0QmFj
a0ZvcndhcmRMaXN0Q3JlYXRlKFdLUGFnZUdldEJhY2tGb3J3YXJkTGlzdCh0b0FQSShwYWdlKSkp
KTsKICAgICBwcml2LT5zZXR0aW5ncyA9IGFkb3B0R1JlZih3ZWJraXRfc2V0dGluZ3NfbmV3KCkp
OwogICAgIHdlYmtpdFNldHRpbmdzQXR0YWNoU2V0dGluZ3NUb1BhZ2UocHJpdi0+c2V0dGluZ3Mu
Z2V0KCksIHRvQVBJKHBhZ2UpKTsKQEAgLTEzMiw2ICsxNTQsMTUgQEAgc3RhdGljIHZvaWQgd2Vi
a2l0X3dlYl92aWV3X2luaXQoV2ViS2l0V2ViVmlldyogd2ViVmlldykKICAgICBuZXcgKHByaXYp
IFdlYktpdFdlYlZpZXdQcml2YXRlKCk7CiB9CiAKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRXZWJW
aWV3QWNjdW11bGF0b3JPYmplY3RIYW5kbGVkKEdTaWduYWxJbnZvY2F0aW9uSGludCosIEdWYWx1
ZSogcmV0dXJuVmFsdWUsIGNvbnN0IEdWYWx1ZSogaGFuZGxlclJldHVybiwgZ3BvaW50ZXIpCit7
CisgICAgZ3BvaW50ZXIgb2JqZWN0ID0gZ192YWx1ZV9nZXRfb2JqZWN0KGhhbmRsZXJSZXR1cm4p
OworICAgIGlmIChvYmplY3QpCisgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdChyZXR1cm5WYWx1
ZSwgb2JqZWN0KTsKKworICAgIHJldHVybiAhb2JqZWN0OworfQorCiBzdGF0aWMgdm9pZCB3ZWJr
aXRfd2ViX3ZpZXdfY2xhc3NfaW5pdChXZWJLaXRXZWJWaWV3Q2xhc3MqIHdlYlZpZXdDbGFzcykK
IHsKICAgICBHT2JqZWN0Q2xhc3MqIGdPYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKHdlYlZp
ZXdDbGFzcyk7CkBAIC0xNDEsNiArMTcyLDggQEAgc3RhdGljIHZvaWQgd2Via2l0X3dlYl92aWV3
X2NsYXNzX2luaXQoV2ViS2l0V2ViVmlld0NsYXNzKiB3ZWJWaWV3Q2xhc3MpCiAgICAgZ09iamVj
dENsYXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJraXRXZWJWaWV3R2V0UHJvcGVydHk7CiAgICAgZ09i
amVjdENsYXNzLT5maW5hbGl6ZSA9IHdlYmtpdFdlYlZpZXdGaW5hbGl6ZTsKIAorICAgIHdlYlZp
ZXdDbGFzcy0+Y3JlYXRlID0gd2Via2l0V2ViVmlld0NyZWF0ZTsKKwogICAgIGdfdHlwZV9jbGFz
c19hZGRfcHJpdmF0ZSh3ZWJWaWV3Q2xhc3MsIHNpemVvZihXZWJLaXRXZWJWaWV3UHJpdmF0ZSkp
OwogCiAgICAgLyoqCkBAIC0xODYsNiArMjE5LDcwIEBAIHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJf
dmlld19jbGFzc19pbml0KFdlYktpdFdlYlZpZXdDbGFzcyogd2ViVmlld0NsYXNzKQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVGhlIGN1
cnJlbnQgYWN0aXZlIFVSSSBvZiB0aGUgdmlldyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkp
OworCisgICAgLyoqCisgICAgICogV2ViS2l0V2ViVmlldzo6Y3JlYXRlOgorICAgICAqIEB3ZWJf
dmlldzogdGhlICNXZWJLaXRXZWJWaWV3IG9uIHdoaWNoIHRoZSBzaWduYWwgaXMgZW1pdHRlZAor
ICAgICAqCisgICAgICogRW1pdHRlZCB3aGVuIHRoZSBjcmVhdGlvbiBvZiBhIG5ldyAjV2ViS2l0
V2ViVmlldyBpcyByZXF1ZXN0ZWQuCisgICAgICogSWYgdGhpcyBzaWduYWwgaXMgaGFuZGxlZCB0
aGUgc2lnbmFsIGhhbmRsZXIgc2hvdWxkIHJldHVybiB0aGUKKyAgICAgKiBuZXdseSBjcmVhdGVk
ICNXZWJLaXRXZWJWaWV3LgorICAgICAqCisgICAgICogVGhlIG5ldyAjV2ViS2l0V2ViVmlldyBz
aG91bGQgbm90IGJlIGRpc3BsYXllZCB0byB0aGUgdXNlcgorICAgICAqIHVudGlsIHRoZSAjV2Vi
S2l0V2ViVmlldzo6cmVhZHktdG8tc2hvdyBzaWduYWwgaXMgZW1pdHRlZC4KKyAgICAgKgorICAg
ICAqIFRoZSBzaWduYWwgaGFuZGxlcnMgc2hvdWxkIG5vdCB0cnkgdG8gZGVhbCB3aXRoIHRoZSBy
ZWZlcmVuY2UgY291bnQgZm9yCisgICAgICogdGhlIG5ldyAjV2ViS2l0V2ViVmlldy4gVGhlIHdp
ZGdldCB0byB3aGljaCB0aGUgd2lkZ2V0IGlzIGFkZGVkIHdpbGwKKyAgICAgKiBoYW5kbGUgdGhh
dC4KKyAgICAgKgorICAgICAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogYSBuZXdseSBhbGxv
Y2F0ZWQgI1dlYktpdFdlYlZpZXcgd2lkZ2V0CisgICAgICogICAgb3IgJU5VTEwgdG8gcHJvcGFn
YXRlIHRoZSBldmVudCBmdXJ0aGVyLgorICAgICAqLworICAgIHNpZ25hbHNbQ1JFQVRFXSA9Cisg
ICAgICAgIGdfc2lnbmFsX25ldygiY3JlYXRlIiwKKyAgICAgICAgICAgICAgICAgICAgIEdfVFlQ
RV9GUk9NX0NMQVNTKHdlYlZpZXdDbGFzcyksCisgICAgICAgICAgICAgICAgICAgICBHX1NJR05B
TF9SVU5fTEFTVCwKKyAgICAgICAgICAgICAgICAgICAgIEdfU1RSVUNUX09GRlNFVChXZWJLaXRX
ZWJWaWV3Q2xhc3MsIGNyZWF0ZSksCisgICAgICAgICAgICAgICAgICAgICB3ZWJraXRXZWJWaWV3
QWNjdW11bGF0b3JPYmplY3RIYW5kbGVkLCAwLAorICAgICAgICAgICAgICAgICAgICAgd2Via2l0
X21hcnNoYWxfT0JKRUNUX19WT0lELAorICAgICAgICAgICAgICAgICAgICAgR1RLX1RZUEVfV0lE
R0VULCAwKTsKKworICAgIC8qKgorICAgICAqIFdlYktpdFdlYlZpZXc6OnJlYWR5LXRvLXNob3c6
CisgICAgICogQHdlYl92aWV3OiB0aGUgI1dlYktpdFdlYlZpZXcgb24gd2hpY2ggdGhlIHNpZ25h
bCBpcyBlbWl0dGVkCisgICAgICoKKyAgICAgKiBFbWl0dGVkIGFmdGVyICNXZWJLaXRXZWJWaWV3
OjpjcmVhdGUgb24gdGhlIG5ld2x5IGNyZWF0ZWQgI1dlYktpdFdlYlZpZXcKKyAgICAgKiB3aGVu
IGl0IHNob3VsZCBiZSBkaXNwbGF5ZWQgdG8gdGhlIHVzZXIuIFdoZW4gdGhpcyBzaWduYWwgaXMg
ZW1pdHRlZAorICAgICAqIGFsbCB0aGUgaW5mb3JtYXRpb24gYWJvdXQgaG93IHRoZSB3aW5kb3cg
c2hvdWxkIGxvb2ssIGluY2x1ZGluZworICAgICAqIHNpemUsIHBvc2l0aW9uLCB3aGV0aGVyIHRo
ZSBsb2NhdGlvbiwgc3RhdHVzIGFuZCBzY3JvbGxiYXJzCisgICAgICogc2hvdWxkIGJlIGRpc3Bs
YXllZCwgaXMgYWxyZWFkeSBzZXQuCisgICAgICovCisgICAgc2lnbmFsc1tSRUFEWV9UT19TSE9X
XSA9CisgICAgICAgIGdfc2lnbmFsX25ldygicmVhZHktdG8tc2hvdyIsCisgICAgICAgICAgICAg
ICAgICAgICBHX1RZUEVfRlJPTV9DTEFTUyh3ZWJWaWV3Q2xhc3MpLAorICAgICAgICAgICAgICAg
ICAgICAgR19TSUdOQUxfUlVOX0xBU1QsCisgICAgICAgICAgICAgICAgICAgICBHX1NUUlVDVF9P
RkZTRVQoV2ViS2l0V2ViVmlld0NsYXNzLCByZWFkeV90b19zaG93KSwKKyAgICAgICAgICAgICAg
ICAgICAgIDAsIDAsCisgICAgICAgICAgICAgICAgICAgICBnX2NjbG9zdXJlX21hcnNoYWxfVk9J
RF9fVk9JRCwKKyAgICAgICAgICAgICAgICAgICAgIEdfVFlQRV9OT05FLCAwKTsKKworICAgIC8q
KgorICAgICAqIFdlYktpdFdlYlZpZXc6OmNsb3NlOgorICAgICAqIEB3ZWJWaWV3OiB0aGUgI1dl
YktpdFdlYlZpZXcgb24gd2hpY2ggdGhlIHNpZ25hbCBpcyBlbWl0dGVkCisgICAgICoKKyAgICAg
KiBFbWl0dGVkIHdoZW4gY2xvc2luZyBhICNXZWJLaXRXZWJWaWV3IGlzIHJlcXVlc3RlZC4gVGhp
cyBvY2N1cnMgd2hlbiBhCisgICAgICogY2FsbCBpcyBtYWRlIGZyb20gSmF2YVNjcmlwdCdzIHdp
bmRvdy5jbG9zZSBmdW5jdGlvbi4KKyAgICAgKiBJdCBpcyB0aGUgb3duZXIncyByZXNwb25zaWJp
bGl0eSB0byBoYW5kbGUgdGhpcyBzaWduYWwgdG8gaGlkZSBvcgorICAgICAqIGRlbGV0ZSB0aGUg
I1dlYktpdFdlYlZpZXcsIGlmIG5lY2Vzc2FyeS4KKyAgICAgKi8KKyAgICBzaWduYWxzW0NMT1NF
XSA9CisgICAgICAgIGdfc2lnbmFsX25ldygiY2xvc2UiLAorICAgICAgICAgICAgICAgICAgICAg
R19UWVBFX0ZST01fQ0xBU1Mod2ViVmlld0NsYXNzKSwKKyAgICAgICAgICAgICAgICAgICAgIEdf
U0lHTkFMX1JVTl9MQVNULAorICAgICAgICAgICAgICAgICAgICAgR19TVFJVQ1RfT0ZGU0VUKFdl
YktpdFdlYlZpZXdDbGFzcywgY2xvc2UpLAorICAgICAgICAgICAgICAgICAgICAgMCwgMCwKKyAg
ICAgICAgICAgICAgICAgICAgIGdfY2Nsb3N1cmVfbWFyc2hhbF9WT0lEX19WT0lELAorICAgICAg
ICAgICAgICAgICAgICAgR19UWVBFX05PTkUsIDApOwogfQogCiB2b2lkIHdlYmtpdFdlYlZpZXdT
ZXRFc3RpbWF0ZWRMb2FkUHJvZ3Jlc3MoV2ViS2l0V2ViVmlldyogd2ViVmlldywgZG91YmxlIGVz
dGltYXRlZExvYWRQcm9ncmVzcykKQEAgLTIxMSw2ICszMDgsMjYgQEAgdm9pZCB3ZWJraXRXZWJW
aWV3VXBkYXRlVVJJKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCiAgICAgZ19vYmplY3Rfbm90aWZ5
KEdfT0JKRUNUKHdlYlZpZXcpLCAidXJpIik7CiB9CiAKK1dLUGFnZVJlZiB3ZWJraXRXZWJWaWV3
Q3JlYXRlTmV3UGFnZShXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQoreworICAgIFdlYktpdFdlYlZp
ZXcqIG5ld1dlYlZpZXc7CisgICAgZ19zaWduYWxfZW1pdCh3ZWJWaWV3LCBzaWduYWxzW0NSRUFU
RV0sIDAsICZuZXdXZWJWaWV3KTsKKyAgICBpZiAoIW5ld1dlYlZpZXcpCisgICAgICAgIHJldHVy
biAwOworCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdLUGFnZVJlZj4oV0tSZXRhaW4odG9BUEko
d2Via2l0V2ViVmlld0Jhc2VHZXRQYWdlKFdFQktJVF9XRUJfVklFV19CQVNFKG5ld1dlYlZpZXcp
KSkpKTsKK30KKwordm9pZCB3ZWJraXRXZWJWaWV3UmVhZHlUb1Nob3dQYWdlKFdlYktpdFdlYlZp
ZXcqIHdlYlZpZXcpCit7CisgICAgZ19zaWduYWxfZW1pdCh3ZWJWaWV3LCBzaWduYWxzW1JFQURZ
X1RPX1NIT1ddLCAwLCBOVUxMKTsKK30KKwordm9pZCB3ZWJraXRXZWJWaWV3Q2xvc2VQYWdlKFdl
YktpdFdlYlZpZXcqIHdlYlZpZXcpCit7CisgICAgZ19zaWduYWxfZW1pdCh3ZWJWaWV3LCBzaWdu
YWxzW0NMT1NFXSwgMCwgTlVMTCk7Cit9CisKIC8qKgogICogd2Via2l0X3dlYl92aWV3X25ldzoK
ICAqCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRX
ZWJWaWV3LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3
LmgKaW5kZXggMWE4YTE3NS4uMGM1ZGQ1MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuaApAQCAtNTUsNiArNTUsMTAgQEAgc3RydWN0IF9X
ZWJLaXRXZWJWaWV3IHsKIHN0cnVjdCBfV2ViS2l0V2ViVmlld0NsYXNzIHsKICAgICBXZWJLaXRX
ZWJWaWV3QmFzZUNsYXNzIHBhcmVudDsKIAorICAgIEd0a1dpZGdldCAqKCogY3JlYXRlKSAgICAg
ICAgKFdlYktpdFdlYlZpZXcgKndlYl92aWV3KTsKKyAgICB2b2lkICAgICAgICgqIHJlYWR5X3Rv
X3Nob3cpIChXZWJLaXRXZWJWaWV3ICp3ZWJfdmlldyk7CisgICAgdm9pZCAgICAgICAoKiBjbG9z
ZSkgICAgICAgICAoV2ViS2l0V2ViVmlldyAqd2ViX3ZpZXcpOworCiAgICAgLyogUGFkZGluZyBm
b3IgZnV0dXJlIGV4cGFuc2lvbiAqLwogICAgIHZvaWQgKCpfd2Via2l0X3Jlc2VydmVkMCkgKHZv
aWQpOwogICAgIHZvaWQgKCpfd2Via2l0X3Jlc2VydmVkMSkgKHZvaWQpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld1ByaXZhdGUuaCBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdQcml2YXRlLmgK
aW5kZXggZTYyZDUxNS4uODdkMWM2MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld1ByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3UHJpdmF0ZS5oCkBAIC0zMSw1ICszMSw4IEBA
CiAKIHZvaWQgd2Via2l0V2ViVmlld1NldEVzdGltYXRlZExvYWRQcm9ncmVzcyhXZWJLaXRXZWJW
aWV3KiwgZG91YmxlIGVzdGltYXRlZExvYWRQcm9ncmVzcyk7CiB2b2lkIHdlYmtpdFdlYlZpZXdV
cGRhdGVVUkkoV2ViS2l0V2ViVmlldyopOworV0tQYWdlUmVmIHdlYmtpdFdlYlZpZXdDcmVhdGVO
ZXdQYWdlKFdlYktpdFdlYlZpZXcqKTsKK3ZvaWQgd2Via2l0V2ViVmlld1JlYWR5VG9TaG93UGFn
ZShXZWJLaXRXZWJWaWV3Kik7Cit2b2lkIHdlYmtpdFdlYlZpZXdDbG9zZVBhZ2UoV2ViS2l0V2Vi
VmlldyopOwogCiAjZW5kaWYgLy8gV2ViS2l0V2ViVmlld1ByaXZhdGVfaApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdFdlYlZpZXcu
Y3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdFdl
YlZpZXcuY3BwCmluZGV4IGRkODVlMjMuLjU0ODQ4NGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRXZWJWaWV3LmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0V2ViVmlldy5j
cHAKQEAgLTE4LDEwICsxOCwxMiBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJXZWJLaXRUZXN0U2VydmVyLmgiCiAjaW5jbHVkZSAiV2ViVmlld1Rlc3QuaCIKLSNpbmNs
dWRlICJMb2FkVHJhY2tpbmdUZXN0LmgiCiAjaW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5o
PgogCitzdGF0aWMgV2ViS2l0VGVzdFNlcnZlcioga1NlcnZlcjsKKwogc3RhdGljIHZvaWQgdGVz
dFdlYlZpZXdEZWZhdWx0Q29udGV4dChXZWJWaWV3VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikK
IHsKICAgICBnX2Fzc2VydCh3ZWJraXRfd2ViX3ZpZXdfZ2V0X2NvbnRleHQodGVzdC0+bV93ZWJW
aWV3KSA9PSB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2RlZmF1bHQoKSk7CkBAIC03NiwxNCArNzgs
MTEwIEBAIHN0YXRpYyB2b2lkIHRlc3RXZWJWaWV3U2V0dGluZ3MoV2ViVmlld1Rlc3QqIHRlc3Qs
IGdjb25zdHBvaW50ZXIpCiAgICAgZ19hc3NlcnQod2Via2l0X3NldHRpbmdzX2dldF9lbmFibGVf
amF2YXNjcmlwdChzZXR0aW5ncykpOwogfQogCitzdGF0aWMgdm9pZCBzZXJ2ZXJDYWxsYmFjayhT
b3VwU2VydmVyKiBzZXJ2ZXIsIFNvdXBNZXNzYWdlKiBtZXNzYWdlLCBjb25zdCBjaGFyKiBwYXRo
LCBHSGFzaFRhYmxlKiwgU291cENsaWVudENvbnRleHQqLCBncG9pbnRlcikKK3sKKyAgICBzdGF0
aWMgY29uc3QgY2hhciogaHRtbE9uTG9hZEZvcm1hdCA9ICI8aHRtbD48Ym9keSBvbkxvYWQ9XCIl
c1wiPjwvYm9keT48L2h0bWw+IjsKKworICAgIGlmIChtZXNzYWdlLT5tZXRob2QgIT0gU09VUF9N
RVRIT0RfR0VUKSB7CisgICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNP
VVBfU1RBVFVTX05PVF9JTVBMRU1FTlRFRCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19PSyk7CisKKyAg
ICBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi9jcmVhdGVfbmV3X3ZpZXciKSkgeworICAgICAgICBH
T3duUHRyPGNoYXI+IHdpbmRvd09wZW5TdHJpbmcoZ19zdHJkdXBfcHJpbnRmKCJ3aW5kb3cub3Bl
bignJXMnKSIsIGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9uZXdfd2luZG93IikuZGF0YSgpKSk7
CisgICAgICAgIGNoYXIqIGh0bWxTdHJpbmcgPSBnX3N0cmR1cF9wcmludGYoaHRtbE9uTG9hZEZv
cm1hdCwgd2luZG93T3BlblN0cmluZy5nZXQoKSk7CisgICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5
X2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9UQUtFLCBodG1sU3Ry
aW5nLCBzdHJsZW4oaHRtbFN0cmluZykpOworICAgIH0gZWxzZSBpZiAoZ19zdHJfZXF1YWwocGF0
aCwgIi9uZXdfd2luZG93IikpIHsKKyAgICAgICAgY2hhciogaHRtbFN0cmluZyA9IGdfc3RyZHVw
X3ByaW50ZihodG1sT25Mb2FkRm9ybWF0LCAic2VsZi5jbG9zZSgpOyIpOworICAgICAgICBzb3Vw
X21lc3NhZ2VfYm9keV9hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2VfYm9keSwgU09VUF9NRU1PUllf
VEFLRSwgaHRtbFN0cmluZywgc3RybGVuKGh0bWxTdHJpbmcpKTsKKyAgICB9CisKKyAgICBzb3Vw
X21lc3NhZ2VfYm9keV9jb21wbGV0ZShtZXNzYWdlLT5yZXNwb25zZV9ib2R5KTsKK30KKworY2xh
c3MgVUlDbGllbnRUZXN0OiBwdWJsaWMgV2ViVmlld1Rlc3QgeworcHVibGljOgorICAgIE1BS0Vf
R0xJQl9URVNUX0ZJWFRVUkUoVUlDbGllbnRUZXN0KTsKKworICAgIGVudW0gV2ViVmlld0V2ZW50
cyB7CisgICAgICAgIENyZWF0ZSwKKyAgICAgICAgUmVhZHlUb1Nob3csCisgICAgICAgIENsb3Nl
CisgICAgfTsKKworICAgIHN0YXRpYyB2b2lkIHZpZXdDbG9zZShXZWJLaXRXZWJWaWV3KiB3ZWJW
aWV3LCBVSUNsaWVudFRlc3QqIHRlc3QpCisgICAgeworICAgICAgICBnX2Fzc2VydCh3ZWJWaWV3
ICE9IHRlc3QtPm1fd2ViVmlldyk7CisKKyAgICAgICAgdGVzdC0+bV93ZWJWaWV3RXZlbnRzLmFw
cGVuZChDbG9zZSk7CisgICAgICAgIGdfb2JqZWN0X3VucmVmKHdlYlZpZXcpOworCisgICAgICAg
IGdfbWFpbl9sb29wX3F1aXQodGVzdC0+bV9tYWluTG9vcCk7CisgICAgfQorCisgICAgc3RhdGlj
IHZvaWQgdmlld1JlYWR5VG9TaG93KFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIFVJQ2xpZW50VGVz
dCogdGVzdCkKKyAgICB7CisgICAgICAgIGdfYXNzZXJ0KHdlYlZpZXcgIT0gdGVzdC0+bV93ZWJW
aWV3KTsKKworICAgICAgICB0ZXN0LT5tX3dlYlZpZXdFdmVudHMuYXBwZW5kKFJlYWR5VG9TaG93
KTsKKyAgICB9CisKKyAgICBzdGF0aWMgR3RrV2lkZ2V0KiB2aWV3Q3JlYXRlKFdlYktpdFdlYlZp
ZXcqIHdlYlZpZXcsIFVJQ2xpZW50VGVzdCogdGVzdCkKKyAgICB7CisgICAgICAgIGdfYXNzZXJ0
KHdlYlZpZXcgPT0gdGVzdC0+bV93ZWJWaWV3KTsKKworICAgICAgICBHdGtXaWRnZXQqIG5ld1dl
YlZpZXcgPSB3ZWJraXRfd2ViX3ZpZXdfbmV3X3dpdGhfY29udGV4dCh3ZWJraXRfd2ViX3ZpZXdf
Z2V0X2NvbnRleHQod2ViVmlldykpOworICAgICAgICBnX29iamVjdF9yZWZfc2luayhuZXdXZWJW
aWV3KTsKKworICAgICAgICB0ZXN0LT5tX3dlYlZpZXdFdmVudHMuYXBwZW5kKENyZWF0ZSk7CisK
KyAgICAgICAgZ19zaWduYWxfY29ubmVjdChuZXdXZWJWaWV3LCAicmVhZHktdG8tc2hvdyIsIEdf
Q0FMTEJBQ0sodmlld1JlYWR5VG9TaG93KSwgdGVzdCk7CisgICAgICAgIGdfc2lnbmFsX2Nvbm5l
Y3QobmV3V2ViVmlldywgImNsb3NlIiwgR19DQUxMQkFDSyh2aWV3Q2xvc2UpLCB0ZXN0KTsKKwor
ICAgICAgICByZXR1cm4gbmV3V2ViVmlldzsKKyAgICB9CisKKyAgICBVSUNsaWVudFRlc3QoKQor
ICAgIHsKKyAgICAgICAgd2Via2l0X3NldHRpbmdzX3NldF9qYXZhc2NyaXB0X2Nhbl9vcGVuX3dp
bmRvd3NfYXV0b21hdGljYWxseSh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3NldHRpbmdzKG1fd2ViVmll
dyksIFRSVUUpOworICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG1fd2ViVmlldywgImNyZWF0ZSIs
IEdfQ0FMTEJBQ0sodmlld0NyZWF0ZSksIHRoaXMpOworICAgIH0KKworICAgIH5VSUNsaWVudFRl
c3QoKQorICAgIHsKKyAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9tYXRjaGVk
KG1fd2ViVmlldywgR19TSUdOQUxfTUFUQ0hfREFUQSwgMCwgMCwgMCwgMCwgdGhpcyk7CisgICAg
fQorCisgICAgVmVjdG9yPFdlYlZpZXdFdmVudHM+IG1fd2ViVmlld0V2ZW50czsKK307CisKK3N0
YXRpYyB2b2lkIHRlc3RXZWJWaWV3Q3JlYXRlUmVhZHlDbG9zZShVSUNsaWVudFRlc3QqIHRlc3Qs
IGdjb25zdHBvaW50ZXIpCit7CisgICAgd2Via2l0X3dlYl92aWV3X2xvYWRfdXJpKHRlc3QtPm1f
d2ViVmlldywga1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2NyZWF0ZV9uZXdfdmlldyIpLmRhdGEo
KSk7CisgICAgZ19tYWluX2xvb3BfcnVuKHRlc3QtPm1fbWFpbkxvb3ApOworCisgICAgVmVjdG9y
PFVJQ2xpZW50VGVzdDo6V2ViVmlld0V2ZW50cz4mIGV2ZW50cyA9IHRlc3QtPm1fd2ViVmlld0V2
ZW50czsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzLnNpemUoKSwgPT0sIDMpOworICAgIGdf
YXNzZXJ0X2NtcGludChldmVudHNbMF0sID09LCBVSUNsaWVudFRlc3Q6OkNyZWF0ZSk7CisgICAg
Z19hc3NlcnRfY21waW50KGV2ZW50c1sxXSwgPT0sIFVJQ2xpZW50VGVzdDo6UmVhZHlUb1Nob3cp
OworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMl0sID09LCBVSUNsaWVudFRlc3Q6OkNsb3Nl
KTsKK30KKwogdm9pZCBiZWZvcmVBbGwoKQogeworICAgIGtTZXJ2ZXIgPSBuZXcgV2ViS2l0VGVz
dFNlcnZlcigpOworICAgIGtTZXJ2ZXItPnJ1bihzZXJ2ZXJDYWxsYmFjayk7CisKICAgICBXZWJW
aWV3VGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgImRlZmF1bHQtY29udGV4dCIsIHRlc3RXZWJW
aWV3RGVmYXVsdENvbnRleHQpOwogICAgIFdlYlZpZXdUZXN0OjphZGQoIldlYktpdFdlYlZpZXci
LCAiY3VzdG9tLWNoYXJzZXQiLCB0ZXN0V2ViVmlld0N1c3RvbUNoYXJzZXQpOwogICAgIFRlc3Q6
OmFkZCgiV2ViS2l0V2ViVmlldyIsICJ3ZWJ2aWV3cy1zaGFyZS1jbGllbnRzIiwgdGVzdFdlYlZp
ZXdzU2hhcmVDbGllbnRzKTsKICAgICBXZWJWaWV3VGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3Iiwg
InNldHRpbmdzIiwgdGVzdFdlYlZpZXdTZXR0aW5ncyk7CisgICAgVUlDbGllbnRUZXN0OjphZGQo
IldlYktpdFdlYlZpZXciLCAiY3JlYXRlLXJlYWR5LWNsb3NlIiwgdGVzdFdlYlZpZXdDcmVhdGVS
ZWFkeUNsb3NlKTsKIH0KIAogdm9pZCBhZnRlckFsbCgpCiB7CisgICAgZGVsZXRlIGtTZXJ2ZXI7
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay93ZWJraXQy
bWFyc2hhbC5saXN0IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvd2Via2l0Mm1h
cnNoYWwubGlzdAppbmRleCBiNzA2OWE3Li4zZjViZmZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay93ZWJraXQybWFyc2hhbC5saXN0CisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdDJtYXJzaGFsLmxpc3QKQEAgLTEsNSArMSw2
IEBACiBCT09MRUFOOk9CSkVDVCxTVFJJTkcsUE9JTlRFUgogQk9PTEVBTjpPQkpFQ1QKIEJPT0xF
QU46Vk9JRAorT0JKRUNUOlZPSUQKIFZPSUQ6T0JKRUNULFBPSU5URVIKIAo=
</data>
<flag name="review"
          id="111643"
          type_id="1"
          status="+"
          setter="mrobinson"
    />
          </attachment>
      

    </bug>

</bugzilla>