<?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>69274</bug_id>
          
          <creation_ts>2011-10-03 11:40:05 -0700</creation_ts>
          <short_desc>[Qt] [WK2] Support JS alert/confirm/prompt in QDesktopWebView</short_desc>
          <delta_ts>2011-10-05 13:27:26 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Caio Marcelo de Oliveira Filho">cmarcelo</reporter>
          <assigned_to name="Caio Marcelo de Oliveira Filho">cmarcelo</assigned_to>
          <cc>jturcotte</cc>
    
    <cc>kling</cc>
    
    <cc>menard</cc>
    
    <cc>pierre.rossi</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>477110</commentid>
    <comment_count>0</comment_count>
    <who name="Caio Marcelo de Oliveira Filho">cmarcelo</who>
    <bug_when>2011-10-03 11:40:05 -0700</bug_when>
    <thetext>[Qt] [WK2] Support JS alert/confirm/prompt in QDesktopWebView</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>477112</commentid>
    <comment_count>1</comment_count>
      <attachid>109503</attachid>
    <who name="Caio Marcelo de Oliveira Filho">cmarcelo</who>
    <bug_when>2011-10-03 11:44:31 -0700</bug_when>
    <thetext>Created attachment 109503
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>477131</commentid>
    <comment_count>2</comment_count>
      <attachid>109503</attachid>
    <who name="Jocelyn Turcotte">jturcotte</who>
    <bug_when>2011-10-03 12:13:45 -0700</bug_when>
    <thetext>Comment on attachment 109503
Patch

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

&gt; Source/WebKit2/UIProcess/API/qt/qdesktopwebview.cpp:211
&gt; +void QDesktopWebViewPrivate::runJavaScriptAlert(const QString&amp; alertText)
&gt; +{
&gt; +#ifndef QT_NO_MESSAGEBOX
&gt; +    const QString title = tr(&quot;JavaScript Alert - %1&quot;).arg(q-&gt;url().host());
&gt; +    disableMouseEvents();
&gt; +    QMessageBox::information(0, title, escapeHtml(alertText), QMessageBox::Ok);
&gt; +    enableMouseEvents();
&gt; +#else

We&apos;re currently trying to get rid of dependencies of QtWebKit to QtGui to slim down memory uses.
It would also be nice to give the the choice of using QMessageBox or a homemade/QtComponent dialog to the user code.

Virtual method reimplementations aren&apos;t friendly to straight QML use cases, though I&apos;m not sure if JS alerts should be considered a common use case for simple apps.

In any case, emitting a signal instead might be better.

&gt; Source/WebKit2/UIProcess/qt/ClientImpl.cpp:164
&gt; +static inline WKStringRef createNullWKString()
&gt; +{
&gt; +    RefPtr&lt;WebString&gt; webString = WebString::createNull();
&gt; +    return toAPI(webString.release().leakRef());
&gt; +}

I think that WKStringCreateWithQString should return a null WKString if given a null QString as input. Is it possible to use it instead?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>477141</commentid>
    <comment_count>3</comment_count>
      <attachid>109503</attachid>
    <who name="Alexis Menard (darktears)">menard</who>
    <bug_when>2011-10-03 12:22:44 -0700</bug_when>
    <thetext>Comment on attachment 109503
Patch

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

&gt; Source/WebKit2/UIProcess/API/qt/qdesktopwebview.cpp:-25
&gt; -

Useless.

&gt;&gt; Source/WebKit2/UIProcess/API/qt/qdesktopwebview.cpp:211

&gt; 
&gt; We&apos;re currently trying to get rid of dependencies of QtWebKit to QtGui to slim down memory uses.
&gt; It would also be nice to give the the choice of using QMessageBox or a homemade/QtComponent dialog to the user code.
&gt; 
&gt; Virtual method reimplementations aren&apos;t friendly to straight QML use cases, though I&apos;m not sure if JS alerts should be considered a common use case for simple apps.
&gt; 
&gt; In any case, emitting a signal instead might be better.

But how you spin off an event loop from the QML side?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>477148</commentid>
    <comment_count>4</comment_count>
    <who name="Alexis Menard (darktears)">menard</who>
    <bug_when>2011-10-03 12:29:47 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 109503 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=109503&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/qt/qdesktopwebview.cpp:-25
&gt; &gt; -
&gt; 
&gt; Useless.
&gt; 
&gt; &gt;&gt; Source/WebKit2/UIProcess/API/qt/qdesktopwebview.cpp:211
&gt; 
&gt; &gt; 
&gt; &gt; We&apos;re currently trying to get rid of dependencies of QtWebKit to QtGui to slim down memory uses.
&gt; &gt; It would also be nice to give the the choice of using QMessageBox or a homemade/QtComponent dialog to the user code.
&gt; &gt; 
&gt; &gt; Virtual method reimplementations aren&apos;t friendly to straight QML use cases, though I&apos;m not sure if JS alerts should be considered a common use case for simple apps.
&gt; &gt; 
&gt; &gt; In any case, emitting a signal instead might be better.
&gt; 
&gt; But how you spin off an event loop from the QML side?

We don&apos;t have yet such component and also the API call is sync from the WebProcess, so I&apos;m not sure how a signal could work here. Also I&apos;m wondering how this API could look like as the popup needs to be modal. But being optional yes.

This entire QML styling thing should be properly studied for WebKit2. I mean, in theory we should have some kind of RenderThemeQML where youu could provide QML styling (but this is not exactly what we want here)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>477184</commentid>
    <comment_count>5</comment_count>
    <who name="Jocelyn Turcotte">jturcotte</who>
    <bug_when>2011-10-03 13:23:01 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; But how you spin off an event loop from the QML side?

Humm that&apos;s a good point, there is nothing that prevents us from running an event loop beside the sync message system that is bound to the stack. Though since most web sites stopped using them I guess that we should keep it simple.

Depending on how we manage our QtGui dependecies QT_NO_MESSAGEBOX might be enough.
Adding Pierre on the loop.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>477300</commentid>
    <comment_count>6</comment_count>
    <who name="Caio Marcelo de Oliveira Filho">cmarcelo</who>
    <bug_when>2011-10-03 15:45:16 -0700</bug_when>
    <thetext>Hello Jocelyn, thanks for the promptly review.

(In reply to comment #2)
&gt; Virtual method reimplementations aren&apos;t friendly to straight QML use cases, though I&apos;m not sure if JS alerts should be considered a common use case for simple apps.

Note that the virtual methods weren&apos;t exposed to the QDesktopWebView API. We can expose this in API in different ways.

A constraint I had was to keep the message exchange from WebProcess to UIProcess synchronous. For the desktop case I wasn&apos;t expecting customization to be a major thing, and once we had QML dialogs we could replace them.


&gt; In any case, emitting a signal instead might be better.

I don&apos;t think emitting signal will solve the problem. If we assume the responsibility of spawing a QML Component, maybe we can get a good enough API for QML. I&apos;ll give it a shot here and update you guys.


&gt; I think that WKStringCreateWithQString should return a null WKString if given a null QString as input. Is it possible to use it instead?

Currently it doesn&apos;t. The current conversion from WTF::String -&gt; WKStringRef turns Null strings into Empty strings, and QString conversion relies on that.

Maybe would be better to treat this special case inside WKStringCreateWithQString()?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>477633</commentid>
    <comment_count>7</comment_count>
    <who name="Caio Marcelo de Oliveira Filho">cmarcelo</who>
    <bug_when>2011-10-04 09:17:31 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; I don&apos;t think emitting signal will solve the problem. If we assume the responsibility of spawing a QML Component, maybe we can get a good enough API for QML. I&apos;ll give it a shot here and update you guys.

For the record, I followed up this on the IRC, basically one working way to provide API for customization is to allow QML set an alertDialog component that is used in runJavaScriptAlert() to create a QML item. Like QMessageBox and QInputDialog static methods, we run our own QEventLoop waiting for a dismiss signal.

Although I like this approach, this seems overkill for alert/confirm/prompt cases.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>477757</commentid>
    <comment_count>8</comment_count>
      <attachid>109503</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2011-10-04 11:06:29 -0700</bug_when>
    <thetext>Comment on attachment 109503
Patch

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

Looks generally good, but I gotta run, so here&apos;s some nitpicking and I&apos;ll be back tomorrow:

&gt; Source/WebKit2/UIProcess/API/qt/qdesktopwebview.cpp:207
&gt; +    const QString title = tr(&quot;JavaScript Alert - %1&quot;).arg(q-&gt;url().host());

QLatin1String?

&gt; Source/WebKit2/UIProcess/API/qt/qdesktopwebview.cpp:220
&gt; +    const QString title = tr(&quot;JavaScript Confirm - %1&quot;).arg(q-&gt;url().host());

QLatin1String?

&gt; Source/WebKit2/UIProcess/API/qt/qdesktopwebview.cpp:233
&gt; +    const QString title = tr(&quot;JavaScript Prompt - %1&quot;).arg(q-&gt;url().host());

QLatin1String?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>477759</commentid>
    <comment_count>9</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2011-10-04 11:07:30 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (From update of attachment 109503 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=109503&amp;action=review
&gt; 
&gt; Looks generally good, but I gotta run, so here&apos;s some nitpicking and I&apos;ll be back tomorrow:
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/qt/qdesktopwebview.cpp:207
&gt; &gt; +    const QString title = tr(&quot;JavaScript Alert - %1&quot;).arg(q-&gt;url().host());
&gt; 
&gt; QLatin1String?
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/qt/qdesktopwebview.cpp:220
&gt; &gt; +    const QString title = tr(&quot;JavaScript Confirm - %1&quot;).arg(q-&gt;url().host());
&gt; 
&gt; QLatin1String?
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/qt/qdesktopwebview.cpp:233
&gt; &gt; +    const QString title = tr(&quot;JavaScript Prompt - %1&quot;).arg(q-&gt;url().host());
&gt; 
&gt; QLatin1String?

Dammit, I just realized that this nitpicking is completely wrong! Never mind this comment :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>478419</commentid>
    <comment_count>10</comment_count>
      <attachid>109503</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2011-10-05 09:22:37 -0700</bug_when>
    <thetext>Comment on attachment 109503
Patch

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

LGTM!

&gt; Source/WebKit2/ChangeLog:15
&gt; +        empty and null strings.

between* empty and null strings

&gt; Source/WebKit2/UIProcess/qt/ClientImpl.cpp:148
&gt; +void qt_wk_runJavaScriptAlert(WKPageRef page, WKStringRef alertText, WKFrameRef frame, const void *clientInfo)

Style, * placement.

&gt; Source/WebKit2/UIProcess/qt/ClientImpl.cpp:154
&gt; +bool qt_wk_runJavaScriptConfirm(WKPageRef, WKStringRef message, WKFrameRef, const void *clientInfo)

Ditto.

&gt; Source/WebKit2/UIProcess/qt/ClientImpl.cpp:160
&gt; +static inline WKStringRef createNullWKString()

C API candidate? Maybe not.

&gt; Source/WebKit2/UIProcess/qt/ClientImpl.cpp:166
&gt; +WKStringRef qt_wk_runJavaScriptPrompt(WKPageRef, WKStringRef message, WKStringRef defaultValue, WKFrameRef, const void *clientInfo)

Style, * placement.

&gt; Source/WebKit2/UIProcess/qt/ClientImpl.h:44
&gt; +void qt_wk_runJavaScriptAlert(WKPageRef, WKStringRef alertText, WKFrameRef, const void *clientInfo);
&gt; +bool qt_wk_runJavaScriptConfirm(WKPageRef, WKStringRef message, WKFrameRef, const void *clientInfo);
&gt; +WKStringRef qt_wk_runJavaScriptPrompt(WKPageRef, WKStringRef message, WKStringRef defaultValue, WKFrameRef, const void *clientInfo);

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>478627</commentid>
    <comment_count>11</comment_count>
    <who name="Caio Marcelo de Oliveira Filho">cmarcelo</who>
    <bug_when>2011-10-05 13:27:26 -0700</bug_when>
    <thetext>Committed r96743: &lt;http://trac.webkit.org/changeset/96743&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>109503</attachid>
            <date>2011-10-03 11:44:31 -0700</date>
            <delta_ts>2011-10-05 09:22:37 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-69274-20111003154440.patch</filename>
            <type>text/plain</type>
            <size>13477</size>
            <attacher name="Caio Marcelo de Oliveira Filho">cmarcelo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTY1MjIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCAxMDQyYzQ1NzFhYmE3NGNi
NWUxYWViN2UyYzU3OGUwNDUzMmNlOGE3Li5iOTY1NTgzM2Y1MTM0NzkzZjQ2Mzg0ODY0OTNlZTM5
OWQ0NGNiZjI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDYgQEAKKzIwMTEtMTAtMDMgIENhaW8g
TWFyY2VsbyBkZSBPbGl2ZWlyYSBGaWxobyAgPGNhaW8ub2xpdmVpcmFAb3BlbmJvc3NhLm9yZz4K
KworICAgICAgICBbUXRdIFtXSzJdIFN1cHBvcnQgSlMgYWxlcnQvY29uZmlybS9wcm9tcHQgaW4g
UURlc2t0b3BXZWJWaWV3CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD02OTI3NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFVzZSBjdXJyZW50bHkgZXhpc3RpbmcgUXRXaWRnZXRzIHRvIHByb3ZpZGUgYW4gaW1w
bGVtZW50YXRpb24gb2YKKyAgICAgICAgd2luZG93LmFsZXJ0KCksIHdpbmRvdy5jb25maXJtKCkg
YW5kIHdpbmRvdy5wcm9tcHQoKS4KKworICAgICAgICAqIFNoYXJlZC9XZWJTdHJpbmcuaDoKKyAg
ICAgICAgKFdlYktpdDo6V2ViU3RyaW5nOjpjcmVhdGVOdWxsKToKKyAgICAgICAgKFdlYktpdDo6
V2ViU3RyaW5nOjpXZWJTdHJpbmcpOgorICAgICAgICBBZGQgYSB3YXkgdG8gY3JlYXRlIGEgTnVs
bCBXZWJTdHJpbmcuIFJ1bkphdmFTY3JpcHRQcm9tcHQgd2lsbCBkaWZmZXJlbnRpYXRlCisgICAg
ICAgIGVtcHR5IGFuZCBudWxsIHN0cmluZ3MuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3F0
L3FkZXNrdG9wd2Vidmlldy5jcHA6CisgICAgICAgIChRRGVza3RvcFdlYlZpZXdQcml2YXRlOjpl
bmFibGVNb3VzZUV2ZW50cyk6CisgICAgICAgIChRRGVza3RvcFdlYlZpZXdQcml2YXRlOjpkaXNh
YmxlTW91c2VFdmVudHMpOgorICAgICAgICBDcmVhdGUgaGVscGVyIGZ1bmN0aW9ucyB0byBlbmFi
bGUgYW5kIGRpc2FibGUgbW91c2UgZXZlbnRzLiBUaGlzIGlzIHVzZWZ1bCBmb3IKKyAgICAgICAg
ZGlzYWJsaW5nIG1vdXNlIGV2ZW50cyBpbiB0aGUgV2ViVmlldyB3aGVuIHdlIHNob3cgUXRXaWRn
ZXQgZGlhbG9ncyB0byBhdm9pZAorICAgICAgICB1bndhbnRlZCBpbnRlcmFjdGlvbiB3aXRoIHRo
ZSBwYWdlLgorCisgICAgICAgIChRRGVza3RvcFdlYlZpZXdQcml2YXRlOjpydW5KYXZhU2NyaXB0
QWxlcnQpOgorICAgICAgICAoUURlc2t0b3BXZWJWaWV3UHJpdmF0ZTo6cnVuSmF2YVNjcmlwdENv
bmZpcm0pOgorICAgICAgICAoUURlc2t0b3BXZWJWaWV3UHJpdmF0ZTo6cnVuSmF2YVNjcmlwdFBy
b21wdCk6CisgICAgICAgIChRRGVza3RvcFdlYlZpZXc6OmluaXQpOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvcXQvcWRlc2t0b3B3ZWJ2aWV3X3AuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvcXQv
Q2xpZW50SW1wbC5jcHA6CisgICAgICAgIChxdF93a19ydW5KYXZhU2NyaXB0QWxlcnQpOgorICAg
ICAgICAocXRfd2tfcnVuSmF2YVNjcmlwdENvbmZpcm0pOgorICAgICAgICAoY3JlYXRlTnVsbFdL
U3RyaW5nKToKKyAgICAgICAgKHF0X3drX3J1bkphdmFTY3JpcHRQcm9tcHQpOgorICAgICAgICAq
IFVJUHJvY2Vzcy9xdC9DbGllbnRJbXBsLmg6CisgICAgICAgICogVUlQcm9jZXNzL3F0L1F0V2Vi
UGFnZVByb3h5LmNwcDoKKyAgICAgICAgKFF0V2ViUGFnZVByb3h5Ojppbml0KToKKyAgICAgICAg
KiBVSVByb2Nlc3MvcXQvVG91Y2hWaWV3SW50ZXJmYWNlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
VG91Y2hWaWV3SW50ZXJmYWNlOjpydW5KYXZhU2NyaXB0QWxlcnQpOgorICAgICAgICAoV2ViS2l0
OjpUb3VjaFZpZXdJbnRlcmZhY2U6OnJ1bkphdmFTY3JpcHRDb25maXJtKToKKyAgICAgICAgKFdl
YktpdDo6VG91Y2hWaWV3SW50ZXJmYWNlOjpydW5KYXZhU2NyaXB0UHJvbXB0KToKKyAgICAgICAg
KiBVSVByb2Nlc3MvcXQvVG91Y2hWaWV3SW50ZXJmYWNlLmg6CisgICAgICAgICogVUlQcm9jZXNz
L3F0L1ZpZXdJbnRlcmZhY2UuaDoKKwogMjAxMS0xMC0wMyAgQ2FybG9zIEdhcmNpYSBDYW1wb3Mg
IDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dUS10gQWRkIGZhaWxpbmcgdXJpIHBh
cmFtZXRlciB0byBwcm92aXNpb25hbC1sb2FkLWZhaWxlZCBhbmQgbG9hZC1mYWlsZWQgc2lnbmFs
cwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYlN0cmluZy5oIGIvU291cmNl
L1dlYktpdDIvU2hhcmVkL1dlYlN0cmluZy5oCmluZGV4IDU5MzViNGEyYTU3OWVkNmIwY2ZiYjVh
YWIyYzg0ZDFjYWUzMDRmODQuLjE4YjNmYzhmZTkzMDg3NjdkMzUyMzhhOWRiNjJkNmE4MTQxZDQx
ZWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJTdHJpbmcuaAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViU3RyaW5nLmgKQEAgLTQwLDYgKzQwLDExIEBAIGNsYXNz
IFdlYlN0cmluZyA6IHB1YmxpYyBBUElPYmplY3QgewogcHVibGljOgogICAgIHN0YXRpYyBjb25z
dCBUeXBlIEFQSVR5cGUgPSBUeXBlU3RyaW5nOwogCisgICAgc3RhdGljIFBhc3NSZWZQdHI8V2Vi
U3RyaW5nPiBjcmVhdGVOdWxsKCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcg
V2ViU3RyaW5nKCkpOworICAgIH0KKwogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYlN0cmluZz4g
Y3JlYXRlKGNvbnN0IFN0cmluZyYgc3RyaW5nKQogICAgIHsKICAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBXZWJTdHJpbmcoc3RyaW5nKSk7CkBAIC05MSw2ICs5NiwxMSBAQCBwdWJsaWM6CiAg
ICAgSlNTdHJpbmdSZWYgY3JlYXRlSlNTdHJpbmcoKSBjb25zdCB7IHJldHVybiBKU1N0cmluZ0Ny
ZWF0ZVdpdGhDaGFyYWN0ZXJzKG1fc3RyaW5nLmNoYXJhY3RlcnMoKSwgbV9zdHJpbmcubGVuZ3Ro
KCkpOyB9CiAKIHByaXZhdGU6CisgICAgV2ViU3RyaW5nKCkKKyAgICAgICAgOiBtX3N0cmluZygp
CisgICAgeworICAgIH0KKwogICAgIFdlYlN0cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZykKICAg
ICAgICAgOiBtX3N0cmluZyghc3RyaW5nLmltcGwoKSA/IFN0cmluZyhTdHJpbmdJbXBsOjplbXB0
eSgpKSA6IHN0cmluZykKICAgICB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL3F0L3FkZXNrdG9wd2Vidmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL3F0L3FkZXNrdG9wd2Vidmlldy5jcHAKaW5kZXggNjk2YjY3Nzk3MTg1ZWVlN2VjZTNhZjc2
MDk1YzU3YzE5Njc3YjdjNi4uMWE5ZTVkMzJjZTExYWIyMjU1Njk4YmVmNzYzY2IyNjJkN2NkYmNj
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xZGVza3RvcHdl
YnZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcWRlc2t0b3B3
ZWJ2aWV3LmNwcApAQCAtMjAsOSArMjAsMTAgQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgInFkZXNrdG9wd2Vidmlldy5oIgorCisjaW5jbHVkZSAiVXRpbHNRdC5oIgogI2luY2x1
ZGUgInFkZXNrdG9wd2Vidmlld19wLmgiCiAjaW5jbHVkZSAicXdlYmVycm9yLmgiCi0KICNpbmNs
dWRlIDxRRmlsZURpYWxvZz4KICNpbmNsdWRlIDxRR3JhcGhpY3NTY2VuZUV2ZW50PgogI2luY2x1
ZGUgPFFHcmFwaGljc1NjZW5lUmVzaXplRXZlbnQ+CkBAIC00MCw2ICs0MSw4IEBACiAjaW5jbHVk
ZSA8UXRHdWkvUUtleUV2ZW50PgogI2luY2x1ZGUgPFF0R3VpL1FUb3VjaEV2ZW50PgogI2luY2x1
ZGUgPFF0R3VpL1FXaGVlbEV2ZW50PgorI2luY2x1ZGUgPFF0V2lkZ2V0cy9RSW5wdXREaWFsb2c+
CisjaW5jbHVkZSA8UXRXaWRnZXRzL1FNZXNzYWdlQm94PgogI2luY2x1ZGUgPFdLT3BlblBhbmVs
UmVzdWx0TGlzdGVuZXIuaD4KIAogUURlc2t0b3BXZWJWaWV3UHJpdmF0ZTo6UURlc2t0b3BXZWJW
aWV3UHJpdmF0ZShRRGVza3RvcFdlYlZpZXcqIHEsIFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLCBX
S1BhZ2VHcm91cFJlZiBwYWdlR3JvdXBSZWYpCkBAIC01MCw2ICs1MywxOCBAQCBRRGVza3RvcFdl
YlZpZXdQcml2YXRlOjpRRGVza3RvcFdlYlZpZXdQcml2YXRlKFFEZXNrdG9wV2ViVmlldyogcSwg
V0tDb250ZXh0UmVmCiB7CiB9CiAKK3ZvaWQgUURlc2t0b3BXZWJWaWV3UHJpdmF0ZTo6ZW5hYmxl
TW91c2VFdmVudHMoKQoreworICAgIHEtPnNldEFjY2VwdGVkTW91c2VCdXR0b25zKFF0OjpNb3Vz
ZUJ1dHRvbk1hc2spOworICAgIHEtPnNldEFjY2VwdEhvdmVyRXZlbnRzKHRydWUpOworfQorCit2
b2lkIFFEZXNrdG9wV2ViVmlld1ByaXZhdGU6OmRpc2FibGVNb3VzZUV2ZW50cygpCit7CisgICAg
cS0+c2V0QWNjZXB0ZWRNb3VzZUJ1dHRvbnMoUXQ6Ok5vQnV0dG9uKTsKKyAgICBxLT5zZXRBY2Nl
cHRIb3ZlckV2ZW50cyhmYWxzZSk7Cit9CisKIHZvaWQgUURlc2t0b3BXZWJWaWV3UHJpdmF0ZTo6
c2V0Vmlld05lZWRzRGlzcGxheShjb25zdCBRUmVjdCYgaW52YWxpZGF0ZWRBcmVhKQogewogICAg
IHEtPnVwZGF0ZShpbnZhbGlkYXRlZEFyZWEpOwpAQCAtMTg2LDYgKzIwMSw0NiBAQCB2b2lkIFFE
ZXNrdG9wV2ViVmlld1ByaXZhdGU6OmhpZGVDb250ZXh0TWVudSgpCiAgICAgICAgIGFjdGl2ZU1l
bnUtPmhpZGUoKTsKIH0KIAordm9pZCBRRGVza3RvcFdlYlZpZXdQcml2YXRlOjpydW5KYXZhU2Ny
aXB0QWxlcnQoY29uc3QgUVN0cmluZyYgYWxlcnRUZXh0KQoreworI2lmbmRlZiBRVF9OT19NRVNT
QUdFQk9YCisgICAgY29uc3QgUVN0cmluZyB0aXRsZSA9IHRyKCJKYXZhU2NyaXB0IEFsZXJ0IC0g
JTEiKS5hcmcocS0+dXJsKCkuaG9zdCgpKTsKKyAgICBkaXNhYmxlTW91c2VFdmVudHMoKTsKKyAg
ICBRTWVzc2FnZUJveDo6aW5mb3JtYXRpb24oMCwgdGl0bGUsIGVzY2FwZUh0bWwoYWxlcnRUZXh0
KSwgUU1lc3NhZ2VCb3g6Ok9rKTsKKyAgICBlbmFibGVNb3VzZUV2ZW50cygpOworI2Vsc2UKKyAg
ICBRX1VOVVNFRChhbGVydFRleHQpOworI2VuZGlmCit9CisKK2Jvb2wgUURlc2t0b3BXZWJWaWV3
UHJpdmF0ZTo6cnVuSmF2YVNjcmlwdENvbmZpcm0oY29uc3QgUVN0cmluZyYgbWVzc2FnZSkKK3sK
KyAgICBib29sIHJlc3VsdCA9IHRydWU7CisjaWZuZGVmIFFUX05PX01FU1NBR0VCT1gKKyAgICBj
b25zdCBRU3RyaW5nIHRpdGxlID0gdHIoIkphdmFTY3JpcHQgQ29uZmlybSAtICUxIikuYXJnKHEt
PnVybCgpLmhvc3QoKSk7CisgICAgZGlzYWJsZU1vdXNlRXZlbnRzKCk7CisgICAgcmVzdWx0ID0g
UU1lc3NhZ2VCb3g6OlllcyA9PSBRTWVzc2FnZUJveDo6aW5mb3JtYXRpb24oMCwgdGl0bGUsIGVz
Y2FwZUh0bWwobWVzc2FnZSksIFFNZXNzYWdlQm94OjpZZXMsIFFNZXNzYWdlQm94OjpObyk7Cisg
ICAgZW5hYmxlTW91c2VFdmVudHMoKTsKKyNlbHNlCisgICAgUV9VTlVTRUQobWVzc2FnZSk7Cisj
ZW5kaWYKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitRU3RyaW5nIFFEZXNrdG9wV2ViVmlld1By
aXZhdGU6OnJ1bkphdmFTY3JpcHRQcm9tcHQoY29uc3QgUVN0cmluZyYgbWVzc2FnZSwgY29uc3Qg
UVN0cmluZyYgZGVmYXVsdFZhbHVlLCBib29sJiBvaykKK3sKKyNpZm5kZWYgUVRfTk9fSU5QVVRE
SUFMT0cKKyAgICBjb25zdCBRU3RyaW5nIHRpdGxlID0gdHIoIkphdmFTY3JpcHQgUHJvbXB0IC0g
JTEiKS5hcmcocS0+dXJsKCkuaG9zdCgpKTsKKyAgICBkaXNhYmxlTW91c2VFdmVudHMoKTsKKyAg
ICBRU3RyaW5nIHJlc3VsdCA9IFFJbnB1dERpYWxvZzo6Z2V0VGV4dCgwLCB0aXRsZSwgZXNjYXBl
SHRtbChtZXNzYWdlKSwgUUxpbmVFZGl0OjpOb3JtYWwsIGRlZmF1bHRWYWx1ZSwgJm9rKTsKKyAg
ICBlbmFibGVNb3VzZUV2ZW50cygpOworICAgIHJldHVybiByZXN1bHQ7CisjZWxzZQorICAgIFFf
VU5VU0VEKG1lc3NhZ2UpOworICAgIHJldHVybiBkZWZhdWx0VmFsdWU7CisjZW5kaWYKK30KKwog
UURlc2t0b3BXZWJWaWV3OjpRRGVza3RvcFdlYlZpZXcoUVNHSXRlbSogcGFyZW50KQogICAgIDog
UVNHUGFpbnRlZEl0ZW0ocGFyZW50KQogICAgICwgZChuZXcgUURlc2t0b3BXZWJWaWV3UHJpdmF0
ZSh0aGlzKSkKQEAgLTIwMiw4ICsyNTcsNyBAQCBRRGVza3RvcFdlYlZpZXc6OlFEZXNrdG9wV2Vi
VmlldyhXS0NvbnRleHRSZWYgY29udGV4dFJlZiwgV0tQYWdlR3JvdXBSZWYgcGFnZUdybwogCiB2
b2lkIFFEZXNrdG9wV2ViVmlldzo6aW5pdCgpCiB7Ci0gICAgc2V0QWNjZXB0ZWRNb3VzZUJ1dHRv
bnMoUXQ6Ok1vdXNlQnV0dG9uTWFzayk7Ci0gICAgc2V0QWNjZXB0SG92ZXJFdmVudHModHJ1ZSk7
CisgICAgZC0+ZW5hYmxlTW91c2VFdmVudHMoKTsKIH0KIAogUURlc2t0b3BXZWJWaWV3Ojp+UURl
c2t0b3BXZWJWaWV3KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
cXQvcWRlc2t0b3B3ZWJ2aWV3X3AuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQv
cWRlc2t0b3B3ZWJ2aWV3X3AuaAppbmRleCAwNTRhOWE2MmIyODBkMjgzNzFhMDZjNTZlZTFjYzg2
OWM5ZmE3YzAwLi5hN2ViMTU4ZGRkNWFhMjE1MjQ5Mzc1OTljNDg3ZTAwNzlhZjIwMWM0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FkZXNrdG9wd2Vidmlld19w
LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xZGVza3RvcHdlYnZpZXdf
cC5oCkBAIC0zOCw2ICszOCw5IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBRRGVza3RvcFdlYlZp
ZXcqIGNyZWF0ZVZpZXdXaXRoUGFnZUdyb3VwKFdLUGFnZUdyb3VwUmVmKTsKIAorICAgIHZvaWQg
ZW5hYmxlTW91c2VFdmVudHMoKTsKKyAgICB2b2lkIGRpc2FibGVNb3VzZUV2ZW50cygpOworCiAg
ICAgUURlc2t0b3BXZWJWaWV3KiBxOwogICAgIFFEZXNrdG9wV2ViUGFnZVByb3h5IHBhZ2U7CiAK
QEAgLTc3LDYgKzgwLDEwIEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIHNob3dDb250ZXh0
TWVudShRU2hhcmVkUG9pbnRlcjxRTWVudT4pOwogICAgIHZpcnR1YWwgdm9pZCBoaWRlQ29udGV4
dE1lbnUoKTsKIAorICAgIHZpcnR1YWwgdm9pZCBydW5KYXZhU2NyaXB0QWxlcnQoY29uc3QgUVN0
cmluZyYpOworICAgIHZpcnR1YWwgYm9vbCBydW5KYXZhU2NyaXB0Q29uZmlybShjb25zdCBRU3Ry
aW5nJik7CisgICAgdmlydHVhbCBRU3RyaW5nIHJ1bkphdmFTY3JpcHRQcm9tcHQoY29uc3QgUVN0
cmluZyYsIGNvbnN0IFFTdHJpbmcmIGRlZmF1bHRWYWx1ZSwgYm9vbCYgb2spOworCiAgICAgdmly
dHVhbCB2b2lkIHByb2Nlc3NEaWRDcmFzaCgpOwogICAgIHZpcnR1YWwgdm9pZCBkaWRSZWxhdW5j
aFByb2Nlc3MoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L0Ns
aWVudEltcGwuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L0NsaWVudEltcGwuY3Bw
CmluZGV4IDgzNTlhMDJiMTc1NjBlZmIzMDc5MjExNjM1OTJlZTQzOTVlNDdjNWQuLjdiZGEyNjYz
YzRiM2UzNDlmZjQ0OGY4M2RkYzEwMmQwYWVkZGVkYWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9xdC9DbGllbnRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvcXQvQ2xpZW50SW1wbC5jcHAKQEAgLTE0NSw2ICsxNDUsMzUgQEAgdm9pZCBxdF93a19k
aWRGaW5pc2hQcm9ncmVzcyhXS1BhZ2VSZWYgcGFnZSwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykK
ICAgICB0b1F0V2ViUGFnZVByb3h5KGNsaWVudEluZm8pLT5kaWRDaGFuZ2VMb2FkUHJvZ3Jlc3Mo
MTAwKTsKIH0KIAordm9pZCBxdF93a19ydW5KYXZhU2NyaXB0QWxlcnQoV0tQYWdlUmVmIHBhZ2Us
IFdLU3RyaW5nUmVmIGFsZXJ0VGV4dCwgV0tGcmFtZVJlZiBmcmFtZSwgY29uc3Qgdm9pZCAqY2xp
ZW50SW5mbykKK3sKKyAgICBRU3RyaW5nIHFBbGVydFRleHQgPSBXS1N0cmluZ0NvcHlRU3RyaW5n
KGFsZXJ0VGV4dCk7CisgICAgdG9WaWV3SW50ZXJmYWNlKGNsaWVudEluZm8pLT5ydW5KYXZhU2Ny
aXB0QWxlcnQocUFsZXJ0VGV4dCk7Cit9CisKK2Jvb2wgcXRfd2tfcnVuSmF2YVNjcmlwdENvbmZp
cm0oV0tQYWdlUmVmLCBXS1N0cmluZ1JlZiBtZXNzYWdlLCBXS0ZyYW1lUmVmLCBjb25zdCB2b2lk
ICpjbGllbnRJbmZvKQoreworICAgIFFTdHJpbmcgcU1lc3NhZ2UgPSBXS1N0cmluZ0NvcHlRU3Ry
aW5nKG1lc3NhZ2UpOworICAgIHJldHVybiB0b1ZpZXdJbnRlcmZhY2UoY2xpZW50SW5mbyktPnJ1
bkphdmFTY3JpcHRDb25maXJtKHFNZXNzYWdlKTsKK30KKworc3RhdGljIGlubGluZSBXS1N0cmlu
Z1JlZiBjcmVhdGVOdWxsV0tTdHJpbmcoKQoreworICAgIFJlZlB0cjxXZWJTdHJpbmc+IHdlYlN0
cmluZyA9IFdlYlN0cmluZzo6Y3JlYXRlTnVsbCgpOworICAgIHJldHVybiB0b0FQSSh3ZWJTdHJp
bmcucmVsZWFzZSgpLmxlYWtSZWYoKSk7Cit9CisKK1dLU3RyaW5nUmVmIHF0X3drX3J1bkphdmFT
Y3JpcHRQcm9tcHQoV0tQYWdlUmVmLCBXS1N0cmluZ1JlZiBtZXNzYWdlLCBXS1N0cmluZ1JlZiBk
ZWZhdWx0VmFsdWUsIFdLRnJhbWVSZWYsIGNvbnN0IHZvaWQgKmNsaWVudEluZm8pCit7CisgICAg
UVN0cmluZyBxTWVzc2FnZSA9IFdLU3RyaW5nQ29weVFTdHJpbmcobWVzc2FnZSk7CisgICAgUVN0
cmluZyBxRGVmYXVsdFZhbHVlID0gV0tTdHJpbmdDb3B5UVN0cmluZyhkZWZhdWx0VmFsdWUpOwor
ICAgIGJvb2wgb2sgPSBmYWxzZTsKKyAgICBRU3RyaW5nIHJlc3VsdCA9IHRvVmlld0ludGVyZmFj
ZShjbGllbnRJbmZvKS0+cnVuSmF2YVNjcmlwdFByb21wdChxTWVzc2FnZSwgcURlZmF1bHRWYWx1
ZSwgb2spOworICAgIGlmICghb2spCisgICAgICAgIHJldHVybiBjcmVhdGVOdWxsV0tTdHJpbmco
KTsKKyAgICByZXR1cm4gV0tTdHJpbmdDcmVhdGVXaXRoUVN0cmluZyhyZXN1bHQpOworfQorCiB2
b2lkIHF0X3drX3NldFN0YXR1c1RleHQoV0tQYWdlUmVmLCBXS1N0cmluZ1JlZiB0ZXh0LCBjb25z
dCB2b2lkICpjbGllbnRJbmZvKQogewogICAgIFFTdHJpbmcgcVRleHQgPSBXS1N0cmluZ0NvcHlR
U3RyaW5nKHRleHQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L0Ns
aWVudEltcGwuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9DbGllbnRJbXBsLmgKaW5k
ZXggZGU0Njc2MGVhNjAyNjQ1ZDlmZDBlZDgxNThmNzgxY2Y1MjU1MDIyMS4uMGNlZjQyMGNkMDcx
MDk3MjQ2NjNkNTNjZjBkZWJiYzZlYWFjODViOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL3F0L0NsaWVudEltcGwuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
cXQvQ2xpZW50SW1wbC5oCkBAIC0zOSw2ICszOSw5IEBAIHZvaWQgcXRfd2tfZGlkRmluaXNoUHJv
Z3Jlc3MoV0tQYWdlUmVmLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKTsKIHZvaWQgcXRfd2tfZGlk
U2FtZURvY3VtZW50TmF2aWdhdGlvbkZvckZyYW1lKFdLUGFnZVJlZiwgV0tGcmFtZVJlZiwgV0tT
YW1lRG9jdW1lbnROYXZpZ2F0aW9uVHlwZSwgV0tUeXBlUmVmLCBjb25zdCB2b2lkKiBjbGllbnRJ
bmZvKTsKIAogLy8gdWkgY2xpZW50Cit2b2lkIHF0X3drX3J1bkphdmFTY3JpcHRBbGVydChXS1Bh
Z2VSZWYsIFdLU3RyaW5nUmVmIGFsZXJ0VGV4dCwgV0tGcmFtZVJlZiwgY29uc3Qgdm9pZCAqY2xp
ZW50SW5mbyk7Citib29sIHF0X3drX3J1bkphdmFTY3JpcHRDb25maXJtKFdLUGFnZVJlZiwgV0tT
dHJpbmdSZWYgbWVzc2FnZSwgV0tGcmFtZVJlZiwgY29uc3Qgdm9pZCAqY2xpZW50SW5mbyk7CitX
S1N0cmluZ1JlZiBxdF93a19ydW5KYXZhU2NyaXB0UHJvbXB0KFdLUGFnZVJlZiwgV0tTdHJpbmdS
ZWYgbWVzc2FnZSwgV0tTdHJpbmdSZWYgZGVmYXVsdFZhbHVlLCBXS0ZyYW1lUmVmLCBjb25zdCB2
b2lkICpjbGllbnRJbmZvKTsKIHZvaWQgcXRfd2tfc2V0U3RhdHVzVGV4dChXS1BhZ2VSZWYgcGFn
ZSwgV0tTdHJpbmdSZWYgdGV4dCwgY29uc3Qgdm9pZCAqY2xpZW50SW5mbyk7CiB2b2lkIHF0X3dr
X3J1bk9wZW5QYW5lbChXS1BhZ2VSZWYsIFdLRnJhbWVSZWYsIFdLT3BlblBhbmVsUGFyYW1ldGVy
c1JlZiwgV0tPcGVuUGFuZWxSZXN1bHRMaXN0ZW5lclJlZiwgY29uc3Qgdm9pZCogY2xpZW50SW5m
byk7CiB2b2lkIHF0X3drX21vdXNlRGlkTW92ZU92ZXJFbGVtZW50KFdLUGFnZVJlZiwgV0tIaXRU
ZXN0UmVzdWx0UmVmLCBXS0V2ZW50TW9kaWZpZXJzLCBXS1R5cGVSZWYsIGNvbnN0IHZvaWQqIGNs
aWVudEluZm8pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0V2Vi
UGFnZVByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFdlYlBhZ2VQcm94
eS5jcHAKaW5kZXggMTNmZTQ1MmUwOTBmZjc3ZDhmNWVhOTNhYWFiMGVkYjUxYjU4YjVlOC4uN2I0
NTIyNGU1NTA3ZDNlOTA4MmZjYmM5ZWFjZWY2MGMxNTJjMWVkMSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0V2ViUGFnZVByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvcXQvUXRXZWJQYWdlUHJveHkuY3BwCkBAIC0xNDIsNiArMTQyLDkgQEAg
dm9pZCBRdFdlYlBhZ2VQcm94eTo6aW5pdCgpCiAgICAgbWVtc2V0KCZ1aUNsaWVudCwgMCwgc2l6
ZW9mKFdLUGFnZVVJQ2xpZW50KSk7CiAgICAgdWlDbGllbnQudmVyc2lvbiA9IGtXS1BhZ2VVSUNs
aWVudEN1cnJlbnRWZXJzaW9uOwogICAgIHVpQ2xpZW50LmNsaWVudEluZm8gPSBtX3ZpZXdJbnRl
cmZhY2U7CisgICAgdWlDbGllbnQucnVuSmF2YVNjcmlwdEFsZXJ0ID0gcXRfd2tfcnVuSmF2YVNj
cmlwdEFsZXJ0OworICAgIHVpQ2xpZW50LnJ1bkphdmFTY3JpcHRDb25maXJtID0gcXRfd2tfcnVu
SmF2YVNjcmlwdENvbmZpcm07CisgICAgdWlDbGllbnQucnVuSmF2YVNjcmlwdFByb21wdCA9IHF0
X3drX3J1bkphdmFTY3JpcHRQcm9tcHQ7CiAgICAgdWlDbGllbnQuc2V0U3RhdHVzVGV4dCA9IHF0
X3drX3NldFN0YXR1c1RleHQ7CiAgICAgdWlDbGllbnQucnVuT3BlblBhbmVsID0gcXRfd2tfcnVu
T3BlblBhbmVsOwogICAgIHVpQ2xpZW50Lm1vdXNlRGlkTW92ZU92ZXJFbGVtZW50ID0gcXRfd2tf
bW91c2VEaWRNb3ZlT3ZlckVsZW1lbnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvcXQvVG91Y2hWaWV3SW50ZXJmYWNlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9xdC9Ub3VjaFZpZXdJbnRlcmZhY2UuY3BwCmluZGV4IGI1YTgyZGMwYmY2Yjk0MDY4YjRiN2Q4
MmRiNzIwNmY0ZWYwZjk0OWMuLjlkZGEzZGI5ZjFmNWM1MzhlZjgwMWEyMDdjYmMxYjhjMjFmY2Uw
YmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9Ub3VjaFZpZXdJbnRl
cmZhY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9Ub3VjaFZpZXdJbnRl
cmZhY2UuY3BwCkBAIC0xNTIsNiArMTUyLDIzIEBAIHZvaWQgVG91Y2hWaWV3SW50ZXJmYWNlOjpo
aWRlQ29udGV4dE1lbnUoKQogICAgIC8vIEZJWE1FCiB9CiAKK3ZvaWQgVG91Y2hWaWV3SW50ZXJm
YWNlOjpydW5KYXZhU2NyaXB0QWxlcnQoY29uc3QgUVN0cmluZyYpCit7CisgICAgLy8gRklYTUUu
Cit9CisKK2Jvb2wgVG91Y2hWaWV3SW50ZXJmYWNlOjpydW5KYXZhU2NyaXB0Q29uZmlybShjb25z
dCBRU3RyaW5nJikKK3sKKyAgICAvLyBGSVhNRS4KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworUVN0
cmluZyBUb3VjaFZpZXdJbnRlcmZhY2U6OnJ1bkphdmFTY3JpcHRQcm9tcHQoY29uc3QgUVN0cmlu
ZyYsIGNvbnN0IFFTdHJpbmcmIGRlZmF1bHRWYWx1ZSwgYm9vbCYpCit7CisgICAgLy8gRklYTUUu
CisgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTsKK30KKwogdm9pZCBUb3VjaFZpZXdJbnRlcmZhY2U6
OnByb2Nlc3NEaWRDcmFzaCgpCiB7CiAgICAgLy8gRklYTUUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9xdC9Ub3VjaFZpZXdJbnRlcmZhY2UuaCBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9xdC9Ub3VjaFZpZXdJbnRlcmZhY2UuaAppbmRleCBkMTVlODZkZTE5NWFlMDA3
M2FkMDk2NmFiZTlmYWVjZTIxYzk3ZmEyLi42YzhkZTQ5OTM1M2M0YjdkZDEzYmMxYzdhNWZmNWE0
OThhYzU2ZjI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvVG91Y2hW
aWV3SW50ZXJmYWNlLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1RvdWNoVmll
d0ludGVyZmFjZS5oCkBAIC03Miw2ICs3MiwxMCBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9p
ZCBzaG93Q29udGV4dE1lbnUoUVNoYXJlZFBvaW50ZXI8UU1lbnU+KTsKICAgICB2aXJ0dWFsIHZv
aWQgaGlkZUNvbnRleHRNZW51KCk7CiAKKyAgICB2aXJ0dWFsIHZvaWQgcnVuSmF2YVNjcmlwdEFs
ZXJ0KGNvbnN0IFFTdHJpbmcmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcnVuSmF2YVNjcmlwdENvbmZp
cm0oY29uc3QgUVN0cmluZyYpOworICAgIHZpcnR1YWwgUVN0cmluZyBydW5KYXZhU2NyaXB0UHJv
bXB0KGNvbnN0IFFTdHJpbmcmLCBjb25zdCBRU3RyaW5nJiBkZWZhdWx0VmFsdWUsIGJvb2wmIG9r
KTsKKwogICAgIHZpcnR1YWwgdm9pZCBwcm9jZXNzRGlkQ3Jhc2goKTsKICAgICB2aXJ0dWFsIHZv
aWQgZGlkUmVsYXVuY2hQcm9jZXNzKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9xdC9WaWV3SW50ZXJmYWNlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQv
Vmlld0ludGVyZmFjZS5oCmluZGV4IDE2MWQ0ODEzNzgzYTY1YjdlMTdkMTRkMWI2ZGViNTRmZmVj
YjE0NjQuLmNlMjQyYzI4ZDA1ODgxODljZjMxMzk1MWI1OTJmODhmYjAwZjNhODMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9WaWV3SW50ZXJmYWNlLmgKKysrIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1ZpZXdJbnRlcmZhY2UuaApAQCAtODIsNiArODIsMTAg
QEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBzaG93Q29udGV4dE1lbnUoUVNoYXJlZFBvaW50
ZXI8UU1lbnU+KSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGhpZGVDb250ZXh0TWVudSgpID0gMDsK
IAorICAgIHZpcnR1YWwgdm9pZCBydW5KYXZhU2NyaXB0QWxlcnQoY29uc3QgUVN0cmluZyYpID0g
MDsKKyAgICB2aXJ0dWFsIGJvb2wgcnVuSmF2YVNjcmlwdENvbmZpcm0oY29uc3QgUVN0cmluZyYp
ID0gMDsKKyAgICB2aXJ0dWFsIFFTdHJpbmcgcnVuSmF2YVNjcmlwdFByb21wdChjb25zdCBRU3Ry
aW5nJiwgY29uc3QgUVN0cmluZyYgZGVmYXVsdFZhbHVlLCBib29sJiBvaykgPSAwOworCiAgICAg
dmlydHVhbCB2b2lkIHByb2Nlc3NEaWRDcmFzaCgpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZGlk
UmVsYXVuY2hQcm9jZXNzKCkgPSAwOwogCg==
</data>
<flag name="review"
          id="106755"
          type_id="1"
          status="+"
          setter="kling"
    />
    <flag name="commit-queue"
          id="107125"
          type_id="3"
          status="-"
          setter="kling"
    />
          </attachment>
      

    </bug>

</bugzilla>