<?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>80600</bug_id>
          
          <creation_ts>2012-03-08 08:41:33 -0800</creation_ts>
          <short_desc>[GTK] Add input methods submenu item to the default context menu for editable content</short_desc>
          <delta_ts>2012-06-14 03:10:25 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>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>
          <dependson>80597</dependson>
          <blocked>81011</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Carlos Garcia Campos">cgarcia</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>gustavo</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>573857</commentid>
    <comment_count>0</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-03-08 08:41:33 -0800</bug_when>
    <thetext>Like wk1, we should include the input methods menu item in the default content menu when triggered for a content editable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>573869</commentid>
    <comment_count>1</comment_count>
      <attachid>130830</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-03-08 08:55:22 -0800</bug_when>
    <thetext>Created attachment 130830
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>573872</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-08 08:58:11 -0800</bug_when>
    <thetext>Thanks for the patch. If this patch contains new public API please make sure it follows the guidelines for new WebKit2 GTK+ API. See http://trac.webkit.org/wiki/WebKitGTK/AddingNewWebKit2API</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>573874</commentid>
    <comment_count>3</comment_count>
      <attachid>130830</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2012-03-08 09:00:40 -0800</bug_when>
    <thetext>Comment on attachment 130830
Patch

Attachment 130830 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/11863379</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>573875</commentid>
    <comment_count>4</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-03-08 09:03:38 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 130830 [details])
&gt; Attachment 130830 [details] did not pass gtk-ews (gtk):
&gt; Output: http://queues.webkit.org/results/11863379

It doesn&apos;t build because it depends on bug #80597</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>573876</commentid>
    <comment_count>5</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-03-08 09:07:25 -0800</bug_when>
    <thetext>Btw, this patch implements some of the ideas I mentioned in the public mailing list regarding the context menu API. The idea is that the current Vector&lt;ContextMenuItem&gt; will be replaced by WebKitContextMenu API object that will be passed to the context-menu signal so that the user can customize it. After the signal emission WebKitContextMenu returns the list of items as a Vector of ContextMenuItem and we pupulate the context menu like this patch does.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>645121</commentid>
    <comment_count>6</comment_count>
      <attachid>130830</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-06-08 16:28:50 -0700</bug_when>
    <thetext>Comment on attachment 130830
Patch

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

Looks good, though I think some of your private methods could be renamed slightly to make things clearer.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:839
&gt; +    GtkSettings* settings = webView ? gtk_widget_get_settings(GTK_WIDGET(webView)) : gtk_settings_get_default();

Hrm. In what situations can webView be NULL? Perhaps this should just be ASSERT(webView).

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:855
&gt; +    if (!imContext)
&gt; +        return;

ASSERT(imContext) perhaps?

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:867
&gt; +void webkitWebViewContextMenu(WebKitWebView* webView, WKArrayRef wkProposedMenu, WKHitTestResultRef wkHitTestResult)

I think I would prefer this to be named something with a verb like webkitWebViewPopulateContextMenu.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBase.cpp:588
&gt; +void webkitWebViewBaseSetActiveContextMenu(WebKitWebViewBase* webkitWebViewBase, WebContextMenuProxyGtk* contextMenuProxy)
&gt; +{
&gt; +    webkitWebViewBase-&gt;priv-&gt;activeContextMenu = contextMenuProxy;
&gt; +}
&gt; +
&gt; +WebContextMenuProxyGtk* webkitWebViewBaseGetActiveContextMenu(WebKitWebViewBase* webkitWebViewBase)
&gt; +{
&gt; +    return webkitWebViewBase-&gt;priv-&gt;activeContextMenu;
&gt; +}

I think this code might be a lot clearer if these methods were named webkitWebViewBaseSetActiveContextMenuProxy and webkitWebViewBaseGetActiveContextMenu, while the private member could be named activeContextMenuProxy. I was a bit confused for a while because the activeContextMenu is used to build new menus.

&gt; Source/WebKit2/UIProcess/gtk/WebContextMenuProxyGtk.cpp:76
&gt; +        ContextMenuItem menuitem = items.at(i).core();
&gt; +        append(menuitem);

This could probably be one line.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>649025</commentid>
    <comment_count>7</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-06-14 03:05:22 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 130830 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=130830&amp;action=review
&gt; 
&gt; Looks good, though I think some of your private methods could be renamed slightly to make things clearer.
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:839
&gt; &gt; +    GtkSettings* settings = webView ? gtk_widget_get_settings(GTK_WIDGET(webView)) : gtk_settings_get_default();
&gt; 
&gt; Hrm. In what situations can webView be NULL? Perhaps this should just be ASSERT(webView).

It simply can&apos;t happen, I guess I copied it from wk1 implementation where this made sense, I don&apos;t remember.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:855
&gt; &gt; +    if (!imContext)
&gt; &gt; +        return;
&gt; 
&gt; ASSERT(imContext) perhaps?

Ditto. This is impossible, the im context is created in the init func of the web view, so if we have a web view instance, we have an im context.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:867
&gt; &gt; +void webkitWebViewContextMenu(WebKitWebView* webView, WKArrayRef wkProposedMenu, WKHitTestResultRef wkHitTestResult)
&gt; 
&gt; I think I would prefer this to be named something with a verb like webkitWebViewPopulateContextMenu.

Ok.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBase.cpp:588
&gt; &gt; +void webkitWebViewBaseSetActiveContextMenu(WebKitWebViewBase* webkitWebViewBase, WebContextMenuProxyGtk* contextMenuProxy)
&gt; &gt; +{
&gt; &gt; +    webkitWebViewBase-&gt;priv-&gt;activeContextMenu = contextMenuProxy;
&gt; &gt; +}
&gt; &gt; +
&gt; &gt; +WebContextMenuProxyGtk* webkitWebViewBaseGetActiveContextMenu(WebKitWebViewBase* webkitWebViewBase)
&gt; &gt; +{
&gt; &gt; +    return webkitWebViewBase-&gt;priv-&gt;activeContextMenu;
&gt; &gt; +}
&gt; 
&gt; I think this code might be a lot clearer if these methods were named webkitWebViewBaseSetActiveContextMenuProxy and webkitWebViewBaseGetActiveContextMenu, while the private member could be named activeContextMenuProxy. I was a bit confused for a while because the activeContextMenu is used to build new menus.

Ok.

&gt; &gt; Source/WebKit2/UIProcess/gtk/WebContextMenuProxyGtk.cpp:76
&gt; &gt; +        ContextMenuItem menuitem = items.at(i).core();
&gt; &gt; +        append(menuitem);
&gt; 
&gt; This could probably be one line.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>649027</commentid>
    <comment_count>8</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-06-14 03:10:25 -0700</bug_when>
    <thetext>Committed r120305: &lt;http://trac.webkit.org/changeset/120305&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>130830</attachid>
            <date>2012-03-08 08:55:22 -0800</date>
            <delta_ts>2012-06-08 16:28:50 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>wk2-input-methods-context-menu.diff</filename>
            <type>text/plain</type>
            <size>19031</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCAzMmZmYTJjLi5lMzNmZjVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTMg
QEAKKzIwMTItMDMtMDggIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgorCisgICAgICAgIFtHVEtdIEFkZCBpbnB1dCBtZXRob2RzIHN1Ym1lbnUgaXRlbSB0byB0aGUg
ZGVmYXVsdCBjb250ZXh0IG1lbnUgZm9yIGVkaXRhYmxlIGNvbnRlbnQKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgwNjAwCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbTogQWRkIG5l
dyBmaWxlcyB0byBjb21waWxhdGlvbi4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJL
aXRDb250ZXh0TWVudUNsaWVudC5jcHA6IEFkZGVkLgorICAgICAgICAoZ2V0Q29udGV4dE1lbnVG
cm9tUHJvcG9zZWRNZW51KTogQ2FsbCB3ZWJraXRXZWJWaWV3Q29udGV4dE1lbnUoKS4KKyAgICAg
ICAgKGF0dGFjaENvbnRleHRNZW51Q2xpZW50VG9WaWV3KTogQWRkIGltcGxlbWVudGF0aW9uIGZv
cgorICAgICAgICBnZXRDb250ZXh0TWVudUZyb21Qcm9wb3NlZE1lbnUgY2FsbGJhY2suCisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0Q29udGV4dE1lbnVDbGllbnQuaDogQWRkZWQu
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5jcHA6CisgICAgICAg
ICh3ZWJraXRXZWJWaWV3Q29uc3RydWN0ZWQpOiBBdHRhY2ggY29udGV4dCBtZW51IGNsaWVudCB0
byB2aWV3LgorICAgICAgICAod2Via2l0V2ViVmlld0NyZWF0ZUFuZEFwcGVuZERlZmF1bHRNZW51
SXRlbXMpOiBIZWxwZXIgZnVuY3Rpb24gdG8KKyAgICAgICAgYWRkIGRlZmF1bHQgY29udGV4dCBt
ZW51IGl0ZW1zIHRvIHRoZSBuZXcgY29udGV4dCBtZW51IGl0ZW1zIHZlY3Rvci4KKyAgICAgICAg
KHdlYmtpdFdlYlZpZXdTaG91bGRTaG93SW5wdXRNZXRob2RzTWVudSk6IEhlbHBlciBmdW5jdGlv
biB0bworICAgICAgICBjaGVjayB3aGV0aGVyIHRvIHNob3cgdGhlIGlucHV0IG1ldGhvZHMgc3Vi
bWVudSBhY2NvcmRpbmcgdG8gdGhlCisgICAgICAgIGd0ay1zaG93LWlucHV0LW1ldGhvZC1tZW51
IEdUSysgc2V0dGluZy4KKyAgICAgICAgKHdlYmtpdFdlYlZpZXdDcmVhdGVBbmRBcHBlbmRJbnB1
dE1ldGhvZHNNZW51SXRlbSk6IEhlbHBlcgorICAgICAgICBmdW5jdGlvbiB0byBhZGQgaW5wdXQg
bWV0aG9kcyBzdWJtZW51IHRvIHRoZSBuZXcgY29udGV4dCBtZW51CisgICAgICAgIGl0ZW1zIHZl
Y3Rvci4KKyAgICAgICAgKHdlYmtpdFdlYlZpZXdDb250ZXh0TWVudSk6IENyZWF0ZSBhIG5ldyBj
b250ZXh0IG1lbnUgaXRlbXMgdmVjdG9yCisgICAgICAgIGNvbnRhaW5pbmcgZGVmYXVsdCBpdGVt
cyBhbmQgaW5wdXQgbWV0aG9kcyBzdWJtZW51IGluIGNhc2Ugb2YKKyAgICAgICAgZWRpdGFibGUg
Y29udGVudC4gVGhlIGFjdGl2ZSBjb250ZW50IG1lbnUgaXMgcG9wdWxhdGVkIHVzaW5nIHRoYXQK
KyAgICAgICAgbmV3IHZlY3Rvci4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRX
ZWJWaWV3QmFzZS5jcHA6CisgICAgICAgICh3ZWJraXRXZWJWaWV3QmFzZVNldEFjdGl2ZUNvbnRl
eHRNZW51KTogU2V0IHRoZSBhY3RpdmUgY29udGV4dCBtZW51LgorICAgICAgICAod2Via2l0V2Vi
Vmlld0Jhc2VHZXRBY3RpdmVDb250ZXh0TWVudSk6IEdldCB0aGUgYWN0aXZlIGNvbnRleHQgbWVu
dS4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUu
aDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3UHJpdmF0ZS5oOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9ndGsvV2ViQ29udGV4dE1lbnVQcm94eUd0ay5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OldlYkNvbnRleHRNZW51UHJveHlHdGs6OmFwcGVuZCk6IEhlbHBlciBtZXRo
b2QgdG8gYWRkIGEKKyAgICAgICAgbmV3IGl0ZW0gdG8gdGhlIGNvbnRleHQgbWVudS4KKyAgICAg
ICAgKFdlYktpdDo6V2ViQ29udGV4dE1lbnVQcm94eUd0azo6cG9wdWxhdGUpOiBBZGQgaXRlbXMg
dG8gdGhlCisgICAgICAgIGNvbnRleHQgbWVudS4KKyAgICAgICAgKFdlYktpdDo6V2ViQ29udGV4
dE1lbnVQcm94eUd0azo6c2hvd0NvbnRleHRNZW51KTogUG9wdWxhdGUgdGhlCisgICAgICAgIG1l
bnUgd2l0aCB0aGUgZ2l2ZW4gaXRlbXMgYW5kIHBvcHVwIHRoZSBtZW51IGlmIGl0J3Mgbm90IGVt
cHR5LgorICAgICAgICAoV2ViS2l0OjpXZWJDb250ZXh0TWVudVByb3h5R3RrOjpoaWRlQ29udGV4
dE1lbnUpOiBHZXQgdGhlIEd0a01lbnUKKyAgICAgICAgZnJvbSB0aGUgV2ViQ29yZSBDb250ZXh0
TWVudSB0byBwb3Bkb3duIGl0LgorICAgICAgICAoV2ViS2l0OjpXZWJDb250ZXh0TWVudVByb3h5
R3RrOjpXZWJDb250ZXh0TWVudVByb3h5R3RrKTogQ2FsbAorICAgICAgICB3ZWJraXRXZWJWaWV3
QmFzZVNldEFjdGl2ZUNvbnRleHRNZW51KCkgdG8gc2V0IHRoZSBtZW51IGFzIHRoZSBjdXJyZW50
CisgICAgICAgIGFjdGl2ZSBvbmUgZm9yIHRoZSB2aWV3LgorICAgICAgICAoV2ViS2l0OjpXZWJD
b250ZXh0TWVudVByb3h5R3RrOjp+V2ViQ29udGV4dE1lbnVQcm94eUd0ayk6IENhbGwKKyAgICAg
ICAgd2Via2l0V2ViVmlld0Jhc2VTZXRBY3RpdmVDb250ZXh0TWVudSgpIHdpdGggTlVMTCB0byBy
ZXNldCB0aGUKKyAgICAgICAgY3VycmVudCBhY3RpdmUgY29udGV4dCBvZiB0aGUgdmlldy4gR3Rr
TWVudSBpcyBkZXN0cm95ZWQgYnkKKyAgICAgICAgV2ViQ29yZSBDb250ZXh0TWVudSBpbiBpdHMg
ZGVzdHJ1Y3Rvci4KKyAgICAgICAgKiBVSVByb2Nlc3MvZ3RrL1dlYkNvbnRleHRNZW51UHJveHlH
dGsuaDoKKwogMjAxMi0wMy0wNiAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxp
YS5jb20+CiAKICAgICAgICAgW0dUS10gRml4IHNldmVyYWwgZG9jdW1lbnRhdGlvbiBpc3N1ZXMg
aW4gV2ViS2l0MiBHVEsrIEFQSQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvR05VbWFrZWZp
bGUuYW0gYi9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbQppbmRleCA2MTNlYmI0Li4yY2Iz
M2RjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbQorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbQpAQCAtNTMzLDYgKzUzMyw4IEBAIHdlYmtpdDJfc291
cmNlcyArPSBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0QmFja0Zv
cndhcmRMaXN0SXRlbS5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJL
aXRCYWNrRm9yd2FyZExpc3RJdGVtLmNwcCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0QmFja0ZvcndhcmRMaXN0UHJpdmF0ZS5oIFwKKwlTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRDb250ZXh0TWVudUNsaWVudC5jcHAgXAorCVNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdENvbnRleHRNZW51Q2xpZW50LmggXAogCVNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdERlZmluZXMuaCBcCiAJU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RG93bmxvYWQuY3BwIFwKIAlTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXREb3dubG9hZC5oIFwKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdENvbnRleHRNZW51Q2xpZW50
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdENvbnRleHRNZW51
Q2xpZW50LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZjI0ODdhCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0
Q29udGV4dE1lbnVDbGllbnQuY3BwCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTIgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYktp
dENvbnRleHRNZW51Q2xpZW50LmgiCisKKyNpbmNsdWRlICJXZWJLaXRQcml2YXRlLmgiCisjaW5j
bHVkZSAiV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0V2ViVmll
d1ByaXZhdGUuaCIKKwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKKworc3RhdGljIHZvaWQgZ2V0
Q29udGV4dE1lbnVGcm9tUHJvcG9zZWRNZW51KFdLUGFnZVJlZiwgV0tBcnJheVJlZiBwcm9wb3Nl
ZE1lbnUsIFdLQXJyYXlSZWYqLCBXS0hpdFRlc3RSZXN1bHRSZWYgaGl0VGVzdFJlc3VsdCwgV0tU
eXBlUmVmIHVzZXJEYXRhLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQoreworICAgIHdlYmtpdFdl
YlZpZXdDb250ZXh0TWVudShXRUJLSVRfV0VCX1ZJRVcoY2xpZW50SW5mbyksIHByb3Bvc2VkTWVu
dSwgaGl0VGVzdFJlc3VsdCk7Cit9CisKK3ZvaWQgYXR0YWNoQ29udGV4dE1lbnVDbGllbnRUb1Zp
ZXcoV2ViS2l0V2ViVmlldyogd2ViVmlldykKK3sKKyAgICBXS1BhZ2VDb250ZXh0TWVudUNsaWVu
dCB3a0NvbnRleHRNZW51Q2xpZW50ID0geworICAgICAgICBrV0tQYWdlQ29udGV4dE1lbnVDbGll
bnRDdXJyZW50VmVyc2lvbiwKKyAgICAgICAgd2ViVmlldywgLy8gY2xpZW50SW5mbworICAgICAg
ICAwLCAvLyBnZXRDb250ZXh0TWVudUZyb21Qcm9wb3NlZE1lbnVfZGVwcmVjYXRlZEZvclVzZVdp
dGhWMAorICAgICAgICAwLCAvLyBjdXN0b21Db250ZXh0TWVudUl0ZW1TZWxlY3RlZAorICAgICAg
ICAwLCAvLyBjb250ZXh0TWVudURpc21pc3NlZAorICAgICAgICBnZXRDb250ZXh0TWVudUZyb21Q
cm9wb3NlZE1lbnUsCisgICAgfTsKKyAgICBXS1BhZ2VSZWYgd2tQYWdlID0gdG9BUEkod2Via2l0
V2ViVmlld0Jhc2VHZXRQYWdlKFdFQktJVF9XRUJfVklFV19CQVNFKHdlYlZpZXcpKSk7CisgICAg
V0tQYWdlU2V0UGFnZUNvbnRleHRNZW51Q2xpZW50KHdrUGFnZSwgJndrQ29udGV4dE1lbnVDbGll
bnQpOworfQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXRDb250ZXh0TWVudUNsaWVudC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0Q29udGV4dE1lbnVDbGllbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi45YjI4YmY5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvV2ViS2l0Q29udGV4dE1lbnVDbGllbnQuaApAQCAtMCwwICsxLDI3IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAq
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0Q29udGV4
dE1lbnVDbGllbnRfaAorI2RlZmluZSBXZWJLaXRDb250ZXh0TWVudUNsaWVudF9oCisKKyNpbmNs
dWRlICJXZWJLaXRXZWJWaWV3LmgiCisKK3ZvaWQgYXR0YWNoQ29udGV4dE1lbnVDbGllbnRUb1Zp
ZXcoV2ViS2l0V2ViVmlldyopOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5jcHAKaW5kZXggNGYxN2Q0Ni4uZGExNzkxYiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmll
dy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmll
dy5jcHAKQEAgLTIxLDcgKzIxLDEwIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAi
V2ViS2l0V2ViVmlldy5oIgogCisjaW5jbHVkZSAiV2ViQ29udGV4dE1lbnVJdGVtLmgiCisjaW5j
bHVkZSAiV2ViQ29udGV4dE1lbnVJdGVtRGF0YS5oIgogI2luY2x1ZGUgIldlYktpdEJhY2tGb3J3
YXJkTGlzdFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRDb250ZXh0TWVudUNsaWVudC5oIgog
I2luY2x1ZGUgIldlYktpdEVudW1UeXBlcy5oIgogI2luY2x1ZGUgIldlYktpdEVycm9yLmgiCiAj
aW5jbHVkZSAiV2ViS2l0SGl0VGVzdFJlc3VsdFByaXZhdGUuaCIKQEAgLTIwMiw2ICsyMDUsNyBA
QCBzdGF0aWMgdm9pZCB3ZWJraXRXZWJWaWV3Q29uc3RydWN0ZWQoR09iamVjdCogb2JqZWN0KQog
ICAgIGF0dGFjaExvYWRlckNsaWVudFRvVmlldyh3ZWJWaWV3KTsKICAgICBhdHRhY2hVSUNsaWVu
dFRvVmlldyh3ZWJWaWV3KTsKICAgICBhdHRhY2hQb2xpY3lDbGllbnRUb1BhZ2Uod2ViVmlldyk7
CisgICAgYXR0YWNoQ29udGV4dE1lbnVDbGllbnRUb1ZpZXcod2ViVmlldyk7CiAKICAgICBXZWJQ
YWdlUHJveHkqIHBhZ2UgPSB3ZWJraXRXZWJWaWV3QmFzZUdldFBhZ2Uod2ViVmlld0Jhc2UpOwog
ICAgIHByaXYtPmJhY2tGb3J3YXJkTGlzdCA9IGFkb3B0R1JlZih3ZWJraXRCYWNrRm9yd2FyZExp
c3RDcmVhdGUoV0tQYWdlR2V0QmFja0ZvcndhcmRMaXN0KHRvQVBJKHBhZ2UpKSkpOwpAQCAtODIy
LDYgKzgyNiw1NyBAQCB2b2lkIHdlYmtpdFdlYlZpZXdQcmludEZyYW1lKFdlYktpdFdlYlZpZXcq
IHdlYlZpZXcsIFdLRnJhbWVSZWYgd2tGcmFtZSkKICAgICBnX3NpZ25hbF9jb25uZWN0KHByaW50
T3BlcmF0aW9uLmxlYWtSZWYoKSwgImZpbmlzaGVkIiwgR19DQUxMQkFDSyhnX29iamVjdF91bnJl
ZiksIDApOwogfQogCitzdGF0aWMgdm9pZCB3ZWJraXRXZWJWaWV3Q3JlYXRlQW5kQXBwZW5kRGVm
YXVsdE1lbnVJdGVtcyhXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBXS0FycmF5UmVmIHdrUHJvcG9z
ZWRNZW51LCBWZWN0b3I8Q29udGV4dE1lbnVJdGVtPiYgY29udGV4dE1lbnVJdGVtcykKK3sKKyAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IFdLQXJyYXlHZXRTaXplKHdrUHJvcG9zZWRNZW51KTsg
KytpKSB7CisgICAgICAgIFdLQ29udGV4dE1lbnVJdGVtUmVmIHdrSXRlbSA9IHN0YXRpY19jYXN0
PFdLQ29udGV4dE1lbnVJdGVtUmVmPihXS0FycmF5R2V0SXRlbUF0SW5kZXgod2tQcm9wb3NlZE1l
bnUsIGkpKTsKKyAgICAgICAgY29udGV4dE1lbnVJdGVtcy5hcHBlbmQodG9JbXBsKHdrSXRlbSkt
PmRhdGEoKS0+Y29yZSgpKTsKKyAgICB9Cit9CisKK3N0YXRpYyBib29sIHdlYmtpdFdlYlZpZXdT
aG91bGRTaG93SW5wdXRNZXRob2RzTWVudShXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQoreworICAg
IEd0a1NldHRpbmdzKiBzZXR0aW5ncyA9IHdlYlZpZXcgPyBndGtfd2lkZ2V0X2dldF9zZXR0aW5n
cyhHVEtfV0lER0VUKHdlYlZpZXcpKSA6IGd0a19zZXR0aW5nc19nZXRfZGVmYXVsdCgpOworICAg
IGlmICghc2V0dGluZ3MpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgZ2Jvb2xlYW4gc2hv
d0lucHV0TWV0aG9kTWVudTsKKyAgICBnX29iamVjdF9nZXQoc2V0dGluZ3MsICJndGstc2hvdy1p
bnB1dC1tZXRob2QtbWVudSIsICZzaG93SW5wdXRNZXRob2RNZW51LCBOVUxMKTsKKyAgICByZXR1
cm4gc2hvd0lucHV0TWV0aG9kTWVudTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0V2ViVmlld0Ny
ZWF0ZUFuZEFwcGVuZElucHV0TWV0aG9kc01lbnVJdGVtKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcs
IFZlY3RvcjxDb250ZXh0TWVudUl0ZW0+JiBjb250ZXh0TWVudUl0ZW1zKQoreworICAgIGlmICgh
d2Via2l0V2ViVmlld1Nob3VsZFNob3dJbnB1dE1ldGhvZHNNZW51KHdlYlZpZXcpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBHdGtJTUNvbnRleHQqIGltQ29udGV4dCA9IHdlYmtpdFdlYlZpZXdC
YXNlR2V0SU1Db250ZXh0KFdFQktJVF9XRUJfVklFV19CQVNFKHdlYlZpZXcpKTsKKyAgICBpZiAo
IWltQ29udGV4dCkKKyAgICAgICAgcmV0dXJuOworCisgICAgR3RrTWVudSogaW1Db250ZXh0TWVu
dSA9IEdUS19NRU5VKGd0a19tZW51X25ldygpKTsKKyAgICBndGtfaW1fbXVsdGljb250ZXh0X2Fw
cGVuZF9tZW51aXRlbXMoR1RLX0lNX01VTFRJQ09OVEVYVChpbUNvbnRleHQpLCBHVEtfTUVOVV9T
SEVMTChpbUNvbnRleHRNZW51KSk7CisgICAgQ29udGV4dE1lbnUgc3ViTWVudShpbUNvbnRleHRN
ZW51KTsKKworICAgIENvbnRleHRNZW51SXRlbSBzZXBhcmF0b3IoU2VwYXJhdG9yVHlwZSwgQ29u
dGV4dE1lbnVJdGVtVGFnTm9BY3Rpb24sIFN0cmluZygpKTsKKyAgICBjb250ZXh0TWVudUl0ZW1z
LmFwcGVuZChzZXBhcmF0b3IpOworICAgIENvbnRleHRNZW51SXRlbSBtZW51SXRlbShTdWJtZW51
VHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnTm9BY3Rpb24sIF8oIklucHV0IF9NZXRob2RzIiksICZz
dWJNZW51KTsKKyAgICBjb250ZXh0TWVudUl0ZW1zLmFwcGVuZChtZW51SXRlbSk7Cit9CisKK3Zv
aWQgd2Via2l0V2ViVmlld0NvbnRleHRNZW51KFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIFdLQXJy
YXlSZWYgd2tQcm9wb3NlZE1lbnUsIFdLSGl0VGVzdFJlc3VsdFJlZiB3a0hpdFRlc3RSZXN1bHQp
Cit7CisgICAgV2ViQ29udGV4dE1lbnVQcm94eUd0ayogY29udGV4dE1lbnUgPSB3ZWJraXRXZWJW
aWV3QmFzZUdldEFjdGl2ZUNvbnRleHRNZW51KFdFQktJVF9XRUJfVklFV19CQVNFKHdlYlZpZXcp
KTsKKyAgICBBU1NFUlQoY29udGV4dE1lbnUpOworCisgICAgVmVjdG9yPENvbnRleHRNZW51SXRl
bT4gY29udGV4dE1lbnVJdGVtczsKKyAgICB3ZWJraXRXZWJWaWV3Q3JlYXRlQW5kQXBwZW5kRGVm
YXVsdE1lbnVJdGVtcyh3ZWJWaWV3LCB3a1Byb3Bvc2VkTWVudSwgY29udGV4dE1lbnVJdGVtcyk7
CisgICAgaWYgKFdLSGl0VGVzdFJlc3VsdElzQ29udGVudEVkaXRhYmxlKHdrSGl0VGVzdFJlc3Vs
dCkpCisgICAgICAgIHdlYmtpdFdlYlZpZXdDcmVhdGVBbmRBcHBlbmRJbnB1dE1ldGhvZHNNZW51
SXRlbSh3ZWJWaWV3LCBjb250ZXh0TWVudUl0ZW1zKTsKKworICAgIGNvbnRleHRNZW51LT5wb3B1
bGF0ZShjb250ZXh0TWVudUl0ZW1zKTsKK30KKwogLyoqCiAgKiB3ZWJraXRfd2ViX3ZpZXdfbmV3
OgogICoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktp
dFdlYlZpZXdCYXNlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktp
dFdlYlZpZXdCYXNlLmNwcAppbmRleCBhZGNjMzRhLi4wMGQ1Zjk1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZS5jcHAKKysrIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2UuY3BwCkBA
IC03Miw2ICs3Miw3IEBAIHN0cnVjdCBfV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlIHsKICAgICBJ
bnRTaXplIHJlc2l6ZXJTaXplOwogICAgIEdSZWZQdHI8QXRrT2JqZWN0PiBhY2Nlc3NpYmxlOwog
ICAgIGJvb2wgbmVlZHNSZXNpemVPbk1hcDsKKyAgICBXZWJDb250ZXh0TWVudVByb3h5R3RrKiBh
Y3RpdmVDb250ZXh0TWVudTsKIH07CiAKIEdfREVGSU5FX1RZUEUoV2ViS2l0V2ViVmlld0Jhc2Us
IHdlYmtpdF93ZWJfdmlld19iYXNlLCBHVEtfVFlQRV9DT05UQUlORVIpCkBAIC01NzUsMyArNTc2
LDEzIEBAIHZvaWQgd2Via2l0V2ViVmlld0Jhc2VGb3J3YXJkTmV4dEtleUV2ZW50KFdlYktpdFdl
YlZpZXdCYXNlKiB3ZWJraXRXZWJWaWV3QmFzZSkKIHsKICAgICB3ZWJraXRXZWJWaWV3QmFzZS0+
cHJpdi0+c2hvdWxkRm9yd2FyZE5leHRLZXlFdmVudCA9IFRSVUU7CiB9CisKK3ZvaWQgd2Via2l0
V2ViVmlld0Jhc2VTZXRBY3RpdmVDb250ZXh0TWVudShXZWJLaXRXZWJWaWV3QmFzZSogd2Via2l0
V2ViVmlld0Jhc2UsIFdlYkNvbnRleHRNZW51UHJveHlHdGsqIGNvbnRleHRNZW51UHJveHkpCit7
CisgICAgd2Via2l0V2ViVmlld0Jhc2UtPnByaXYtPmFjdGl2ZUNvbnRleHRNZW51ID0gY29udGV4
dE1lbnVQcm94eTsKK30KKworV2ViQ29udGV4dE1lbnVQcm94eUd0ayogd2Via2l0V2ViVmlld0Jh
c2VHZXRBY3RpdmVDb250ZXh0TWVudShXZWJLaXRXZWJWaWV3QmFzZSogd2Via2l0V2ViVmlld0Jh
c2UpCit7CisgICAgcmV0dXJuIHdlYmtpdFdlYlZpZXdCYXNlLT5wcml2LT5hY3RpdmVDb250ZXh0
TWVudTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dl
YktpdFdlYlZpZXdCYXNlUHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlLmgKaW5kZXggM2E5YTQwYi4uYjc1NmMyNiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jh
c2VQcml2YXRlLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0
V2ViVmlld0Jhc2VQcml2YXRlLmgKQEAgLTI4LDE0ICsyOCwxMyBAQAogI2lmbmRlZiBXZWJLaXRX
ZWJWaWV3QmFzZVByaXZhdGVfaAogI2RlZmluZSBXZWJLaXRXZWJWaWV3QmFzZVByaXZhdGVfaAog
CisjaW5jbHVkZSAiV2ViQ29udGV4dE1lbnVQcm94eUd0ay5oIgogI2luY2x1ZGUgIldlYktpdFdl
YlZpZXdCYXNlLmgiCiAjaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCiAjaW5jbHVkZSA8V2ViS2l0
Mi9XZWJLaXQyLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CiAKLUdfQkVHSU5fREVDTFMK
LQogV2ViS2l0V2ViVmlld0Jhc2UqIHdlYmtpdFdlYlZpZXdCYXNlQ3JlYXRlKFdlYkNvbnRleHQq
LCBXZWJQYWdlR3JvdXAqKTsKIAogR3RrSU1Db250ZXh0KiB3ZWJraXRXZWJWaWV3QmFzZUdldElN
Q29udGV4dChXZWJLaXRXZWJWaWV3QmFzZSopOwpAQCAtNTAsNiArNDksOCBAQCB2b2lkIHdlYmtp
dFdlYlZpZXdCYXNlRm9yd2FyZE5leHRLZXlFdmVudChXZWJLaXRXZWJWaWV3QmFzZSopOwogCiB2
b2lkIHdlYmtpdFdlYlZpZXdCYXNlU3RhcnREcmFnKFdlYktpdFdlYlZpZXdCYXNlKiwgY29uc3Qg
V2ViQ29yZTo6RHJhZ0RhdGEmLCBQYXNzUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gZHJhZ0ltYWdl
KTsKIAotR19FTkRfREVDTFMKK3ZvaWQgd2Via2l0V2ViVmlld0Jhc2VTZXRBY3RpdmVDb250ZXh0
TWVudShXZWJLaXRXZWJWaWV3QmFzZSosIFdlYkNvbnRleHRNZW51UHJveHlHdGsqKTsKKworV2Vi
Q29udGV4dE1lbnVQcm94eUd0ayogd2Via2l0V2ViVmlld0Jhc2VHZXRBY3RpdmVDb250ZXh0TWVu
dShXZWJLaXRXZWJWaWV3QmFzZSopOwogCiAjZW5kaWYgLy8gV2ViS2l0V2ViVmlld0Jhc2VQcml2
YXRlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktp
dFdlYlZpZXdQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJL
aXRXZWJWaWV3UHJpdmF0ZS5oCmluZGV4IGFkOGFiMjAuLmM3ZTM5M2UgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdQcml2YXRlLmgKKysr
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld1ByaXZhdGUu
aApAQCAtNDUsNSArNDUsNiBAQCBXS1N0cmluZ1JlZiB3ZWJraXRXZWJWaWV3UnVuSmF2YVNjcmlw
dFByb21wdChXZWJLaXRXZWJWaWV3KiwgY29uc3QgQ1N0cmluZyYgbWVzcwogdm9pZCB3ZWJraXRX
ZWJWaWV3TWFrZVBvbGljeURlY2lzaW9uKFdlYktpdFdlYlZpZXcqLCBXZWJLaXRQb2xpY3lEZWNp
c2lvblR5cGUsIFdlYktpdFBvbGljeURlY2lzaW9uKik7CiB2b2lkIHdlYmtpdFdlYlZpZXdNb3Vz
ZVRhcmdldENoYW5nZWQoV2ViS2l0V2ViVmlldyosIFdLSGl0VGVzdFJlc3VsdFJlZiwgdW5zaWdu
ZWQgbW9kaWZpZXJzKTsKIHZvaWQgd2Via2l0V2ViVmlld1ByaW50RnJhbWUoV2ViS2l0V2ViVmll
dyosIFdLRnJhbWVSZWYpOwordm9pZCB3ZWJraXRXZWJWaWV3Q29udGV4dE1lbnUoV2ViS2l0V2Vi
VmlldyosIFdLQXJyYXlSZWYgcHJvcG9zZWRNZW51LCBXS0hpdFRlc3RSZXN1bHRSZWYpOwogCiAj
ZW5kaWYgLy8gV2ViS2l0V2ViVmlld1ByaXZhdGVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL2d0ay9XZWJDb250ZXh0TWVudVByb3h5R3RrLmNwcCBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9ndGsvV2ViQ29udGV4dE1lbnVQcm94eUd0ay5jcHAKaW5kZXggZDg1YjNk
ZC4uNGE1MDJhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJD
b250ZXh0TWVudVByb3h5R3RrLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3Rr
L1dlYkNvbnRleHRNZW51UHJveHlHdGsuY3BwCkBAIC0yOCw4ICsyOCw4IEBACiAKICNpbmNsdWRl
ICJOYXRpdmVXZWJNb3VzZUV2ZW50LmgiCiAjaW5jbHVkZSAiV2ViQ29udGV4dE1lbnVJdGVtRGF0
YS5oIgorI2luY2x1ZGUgIldlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZS5oIgogI2luY2x1ZGUgIldl
YlBhZ2VQcm94eS5oIgotI2luY2x1ZGUgPFdlYkNvcmUvQ29udGV4dE1lbnUuaD4KICNpbmNsdWRl
IDxXZWJDb3JlL0d0a1V0aWxpdGllcy5oPgogI2luY2x1ZGUgPGd0ay9ndGsuaD4KICNpbmNsdWRl
IDx3dGYvdGV4dC9DU3RyaW5nLmg+CkBAIC01MSw1OSArNTEsNjQgQEAgc3RhdGljIHZvaWQgY29u
dGV4dE1lbnVJdGVtQWN0aXZhdGVkQ2FsbGJhY2soR3RrQWN0aW9uKiBhY3Rpb24sIFdlYlBhZ2VQ
cm94eSogcGEKICAgICBwYWdlLT5jb250ZXh0TWVudUl0ZW1TZWxlY3RlZChpdGVtKTsKIH0KIAot
R3RrTWVudSogV2ViQ29udGV4dE1lbnVQcm94eUd0azo6Y3JlYXRlR3RrTWVudShjb25zdCBWZWN0
b3I8V2ViQ29udGV4dE1lbnVJdGVtRGF0YT4mIGl0ZW1zKQordm9pZCBXZWJDb250ZXh0TWVudVBy
b3h5R3RrOjphcHBlbmQoQ29udGV4dE1lbnVJdGVtJiBtZW51SXRlbSkKK3sKKyAgICBHdGtBY3Rp
b24qIGFjdGlvbiA9IG1lbnVJdGVtLmd0a0FjdGlvbigpOworCisgICAgaWYgKGFjdGlvbiAmJiAo
bWVudUl0ZW0udHlwZSgpID09IEFjdGlvblR5cGUgfHwgbWVudUl0ZW0udHlwZSgpID09IENoZWNr
YWJsZUFjdGlvblR5cGUpKSB7CisgICAgICAgIGdfb2JqZWN0X3NldF9kYXRhKEdfT0JKRUNUKGFj
dGlvbiksIGdDb250ZXh0TWVudUFjdGlvbklkLCBHSU5UX1RPX1BPSU5URVIobWVudUl0ZW0uYWN0
aW9uKCkpKTsKKyAgICAgICAgZ19zaWduYWxfY29ubmVjdChhY3Rpb24sICJhY3RpdmF0ZSIsIEdf
Q0FMTEJBQ0soY29udGV4dE1lbnVJdGVtQWN0aXZhdGVkQ2FsbGJhY2spLCBtX3BhZ2UpOworICAg
IH0KKworICAgIG1fbWVudS5hcHBlbmRJdGVtKG1lbnVJdGVtKTsKK30KKwordm9pZCBXZWJDb250
ZXh0TWVudVByb3h5R3RrOjpwb3B1bGF0ZShWZWN0b3I8Q29udGV4dE1lbnVJdGVtPiYgaXRlbXMp
Cit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpdGVtcy5zaXplKCk7IGkrKykKKyAgICAg
ICAgYXBwZW5kKGl0ZW1zLmF0KGkpKTsKK30KKwordm9pZCBXZWJDb250ZXh0TWVudVByb3h5R3Rr
Ojpwb3B1bGF0ZShjb25zdCBWZWN0b3I8V2ViQ29udGV4dE1lbnVJdGVtRGF0YT4mIGl0ZW1zKQog
ewotICAgIENvbnRleHRNZW51IG1lbnU7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpdGVt
cy5zaXplKCk7IGkrKykgewotICAgICAgICBjb25zdCBXZWJDb250ZXh0TWVudUl0ZW1EYXRhJiBp
dGVtID0gaXRlbXMuYXQoaSk7Ci0gICAgICAgIENvbnRleHRNZW51SXRlbSBtZW51SXRlbShpdGVt
LnR5cGUoKSwgaXRlbS5hY3Rpb24oKSwgaXRlbS50aXRsZSgpLCBpdGVtLmVuYWJsZWQoKSwgaXRl
bS5jaGVja2VkKCkpOwotICAgICAgICBHdGtBY3Rpb24qIGFjdGlvbiA9IG1lbnVJdGVtLmd0a0Fj
dGlvbigpOwotCi0gICAgICAgIGlmIChhY3Rpb24gJiYgKGl0ZW0udHlwZSgpID09IFdlYkNvcmU6
OkFjdGlvblR5cGUgfHwgaXRlbS50eXBlKCkgPT0gV2ViQ29yZTo6Q2hlY2thYmxlQWN0aW9uVHlw
ZSkpIHsKLSAgICAgICAgICAgIGdfb2JqZWN0X3NldF9kYXRhKEdfT0JKRUNUKGFjdGlvbiksIGdD
b250ZXh0TWVudUFjdGlvbklkLCBHSU5UX1RPX1BPSU5URVIoaXRlbS5hY3Rpb24oKSkpOwotICAg
ICAgICAgICAgZ19zaWduYWxfY29ubmVjdChhY3Rpb24sICJhY3RpdmF0ZSIsIEdfQ0FMTEJBQ0so
Y29udGV4dE1lbnVJdGVtQWN0aXZhdGVkQ2FsbGJhY2spLCBtX3BhZ2UpOwotICAgICAgICB9Ci0K
LSAgICAgICAgaWYgKGl0ZW0udHlwZSgpID09IFdlYkNvcmU6OlN1Ym1lbnVUeXBlKSB7Ci0gICAg
ICAgICAgICBDb250ZXh0TWVudSBzdWJNZW51KGNyZWF0ZUd0a01lbnUoaXRlbS5zdWJtZW51KCkp
KTsKLSAgICAgICAgICAgIG1lbnVJdGVtLnNldFN1Yk1lbnUoJnN1Yk1lbnUpOwotICAgICAgICB9
Ci0gICAgICAgIG1lbnUuYXBwZW5kSXRlbShtZW51SXRlbSk7CisgICAgICAgIENvbnRleHRNZW51
SXRlbSBtZW51aXRlbSA9IGl0ZW1zLmF0KGkpLmNvcmUoKTsKKyAgICAgICAgYXBwZW5kKG1lbnVp
dGVtKTsKICAgICB9Ci0gICAgcmV0dXJuIG1lbnUucmVsZWFzZVBsYXRmb3JtRGVzY3JpcHRpb24o
KTsKIH0KIAogdm9pZCBXZWJDb250ZXh0TWVudVByb3h5R3RrOjpzaG93Q29udGV4dE1lbnUoY29u
c3QgV2ViQ29yZTo6SW50UG9pbnQmIHBvc2l0aW9uLCBjb25zdCBWZWN0b3I8V2ViQ29udGV4dE1l
bnVJdGVtRGF0YT4mIGl0ZW1zKQogewotICAgIGlmIChpdGVtcy5pc0VtcHR5KCkpCisgICAgaWYg
KCFpdGVtcy5pc0VtcHR5KCkpCisgICAgICAgIHBvcHVsYXRlKGl0ZW1zKTsKKworICAgIGlmICgh
bV9tZW51Lml0ZW1Db3VudCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX3BvcHVwID0gY3Jl
YXRlR3RrTWVudShpdGVtcyk7CiAgICAgbV9wb3B1cFBvc2l0aW9uID0gY29udmVydFdpZGdldFBv
aW50VG9TY3JlZW5Qb2ludChtX3dlYlZpZXcsIHBvc2l0aW9uKTsKIAogICAgIC8vIERpc3BsYXkg
bWVudSBpbml0aWF0ZWQgYnkgcmlnaHQgY2xpY2sgKG1vdXNlIGJ1dHRvbiBwcmVzc2VkID0gMyku
CiAgICAgTmF0aXZlV2ViTW91c2VFdmVudCogbW91c2VFdmVudCA9IG1fcGFnZS0+Y3VycmVudGx5
UHJvY2Vzc2VkTW91c2VEb3duRXZlbnQoKTsKICAgICBjb25zdCBHZGtFdmVudCogZXZlbnQgPSBt
b3VzZUV2ZW50ID8gbW91c2VFdmVudC0+bmF0aXZlRXZlbnQoKSA6IDA7Ci0gICAgZ3RrX21lbnVf
cG9wdXAobV9wb3B1cCwgMCwgMCwgcmVpbnRlcnByZXRfY2FzdDxHdGtNZW51UG9zaXRpb25GdW5j
PihtZW51UG9zaXRpb25GdW5jdGlvbiksIHRoaXMsCisgICAgZ3RrX21lbnVfcG9wdXAobV9tZW51
LnBsYXRmb3JtRGVzY3JpcHRpb24oKSwgMCwgMCwgcmVpbnRlcnByZXRfY2FzdDxHdGtNZW51UG9z
aXRpb25GdW5jPihtZW51UG9zaXRpb25GdW5jdGlvbiksIHRoaXMsCiAgICAgICAgICAgICAgICAg
ICAgZXZlbnQgPyBldmVudC0+YnV0dG9uLmJ1dHRvbiA6IDMsIGV2ZW50ID8gZXZlbnQtPmJ1dHRv
bi50aW1lIDogR0RLX0NVUlJFTlRfVElNRSk7CiB9CiAKIHZvaWQgV2ViQ29udGV4dE1lbnVQcm94
eUd0azo6aGlkZUNvbnRleHRNZW51KCkKIHsKLSAgICBndGtfbWVudV9wb3Bkb3duKG1fcG9wdXAp
OworICAgIGd0a19tZW51X3BvcGRvd24obV9tZW51LnBsYXRmb3JtRGVzY3JpcHRpb24oKSk7CiB9
CiAKIFdlYkNvbnRleHRNZW51UHJveHlHdGs6OldlYkNvbnRleHRNZW51UHJveHlHdGsoR3RrV2lk
Z2V0KiB3ZWJWaWV3LCBXZWJQYWdlUHJveHkqIHBhZ2UpCiAgICAgOiBtX3dlYlZpZXcod2ViVmll
dykKICAgICAsIG1fcGFnZShwYWdlKQotICAgICwgbV9wb3B1cCgwKQogeworICAgIHdlYmtpdFdl
YlZpZXdCYXNlU2V0QWN0aXZlQ29udGV4dE1lbnUoV0VCS0lUX1dFQl9WSUVXX0JBU0UobV93ZWJW
aWV3KSwgdGhpcyk7CiB9CiAKIFdlYkNvbnRleHRNZW51UHJveHlHdGs6On5XZWJDb250ZXh0TWVu
dVByb3h5R3RrKCkKIHsKLSAgICBpZiAobV9wb3B1cCkKLSAgICAgICAgZ3RrX3dpZGdldF9kZXN0
cm95KEdUS19XSURHRVQobV9wb3B1cCkpOworICAgIHdlYmtpdFdlYlZpZXdCYXNlU2V0QWN0aXZl
Q29udGV4dE1lbnUoV0VCS0lUX1dFQl9WSUVXX0JBU0UobV93ZWJWaWV3KSwgMCk7CiB9CiAKIHZv
aWQgV2ViQ29udGV4dE1lbnVQcm94eUd0azo6bWVudVBvc2l0aW9uRnVuY3Rpb24oR3RrTWVudSog
bWVudSwgZ2ludCogeCwgZ2ludCogeSwgZ2Jvb2xlYW4qIHB1c2hJbiwgV2ViQ29udGV4dE1lbnVQ
cm94eUd0ayogcG9wdXBNZW51KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L2d0ay9XZWJDb250ZXh0TWVudVByb3h5R3RrLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
Z3RrL1dlYkNvbnRleHRNZW51UHJveHlHdGsuaAppbmRleCBiNmE5NTc3Li5iNTJiMmMxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYkNvbnRleHRNZW51UHJveHlH
dGsuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYkNvbnRleHRNZW51UHJv
eHlHdGsuaApAQCAtMjcsNiArMjcsNyBAQAogI2RlZmluZSBXZWJDb250ZXh0TWVudVByb3h5R3Rr
X2gKIAogI2luY2x1ZGUgIldlYkNvbnRleHRNZW51UHJveHkuaCIKKyNpbmNsdWRlIDxXZWJDb3Jl
L0NvbnRleHRNZW51Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9JbnRQb2ludC5oPgogCiBuYW1lc3Bh
Y2UgV2ViS2l0IHsKQEAgLTQ1LDE1ICs0NiwxOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lk
IHNob3dDb250ZXh0TWVudShjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYsIGNvbnN0IFZlY3RvcjxX
ZWJDb250ZXh0TWVudUl0ZW1EYXRhPiYpOwogICAgIHZpcnR1YWwgdm9pZCBoaWRlQ29udGV4dE1l
bnUoKTsKIAorICAgIHZvaWQgcG9wdWxhdGUoVmVjdG9yPFdlYkNvcmU6OkNvbnRleHRNZW51SXRl
bT4mKTsKKwogcHJpdmF0ZToKICAgICBXZWJDb250ZXh0TWVudVByb3h5R3RrKEd0a1dpZGdldCos
IFdlYlBhZ2VQcm94eSopOwotICAgIEd0a01lbnUqIGNyZWF0ZUd0a01lbnUoY29uc3QgVmVjdG9y
PFdlYkNvbnRleHRNZW51SXRlbURhdGE+Jik7CiAKKyAgICB2b2lkIGFwcGVuZChXZWJDb3JlOjpD
b250ZXh0TWVudUl0ZW0mKTsKKyAgICB2b2lkIHBvcHVsYXRlKGNvbnN0IFZlY3RvcjxXZWJDb250
ZXh0TWVudUl0ZW1EYXRhPiYpOwogICAgIHN0YXRpYyB2b2lkIG1lbnVQb3NpdGlvbkZ1bmN0aW9u
KEd0a01lbnUqLCBnaW50KiwgZ2ludCosIGdib29sZWFuKiwgV2ViQ29udGV4dE1lbnVQcm94eUd0
ayopOwogCiAgICAgR3RrV2lkZ2V0KiBtX3dlYlZpZXc7CiAgICAgV2ViUGFnZVByb3h5KiBtX3Bh
Z2U7Ci0gICAgR3RrTWVudSogbV9wb3B1cDsKKyAgICBXZWJDb3JlOjpDb250ZXh0TWVudSBtX21l
bnU7CiAgICAgV2ViQ29yZTo6SW50UG9pbnQgbV9wb3B1cFBvc2l0aW9uOwogfTsKIAo=
</data>
<flag name="review"
          id="133950"
          type_id="1"
          status="+"
          setter="mrobinson"
    />
    <flag name="commit-queue"
          id="133952"
          type_id="3"
          status="-"
          setter="gustavo"
    />
          </attachment>
      

    </bug>

</bugzilla>