<?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>189544</bug_id>
          
          <creation_ts>2018-09-12 06:03:24 -0700</creation_ts>
          <short_desc>[GTK][WPE] Allow to run script dialogs asynchronously in the UI process</short_desc>
          <delta_ts>2018-09-13 01:24:27 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKitGTK</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Gtk</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>189545</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Carlos Garcia Campos">cgarcia</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>berto</cc>
    
    <cc>bugs-noreply</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>gustavo</cc>
    
    <cc>mcatanzaro</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1458920</commentid>
    <comment_count>0</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2018-09-12 06:03:24 -0700</bug_when>
    <thetext>They are sync in the WebProcess, but we don&apos;t need to block the UI process while they are running. Our current API doesn&apos;t allow it, because it laways expect the dialog to be closed in the signal handler.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1458923</commentid>
    <comment_count>1</comment_count>
      <attachid>349542</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2018-09-12 06:16:38 -0700</bug_when>
    <thetext>Created attachment 349542
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1458925</commentid>
    <comment_count>2</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-09-12 06:19:02 -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>1459239</commentid>
    <comment_count>3</comment_count>
      <attachid>349542</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2018-09-12 20:32:12 -0700</bug_when>
    <thetext>Comment on attachment 349542
Patch

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

Looks excellent, as usual.

&gt; Source/WebKit/UIProcess/API/glib/WebKitScriptDialog.cpp:36
&gt; +    return !!scriptDialog-&gt;completionHandler;

You need the !! with gboolean to convert to 0 or 1... but this is a bool, the conversion to true or false is automatic. (Anyway, doesn&apos;t hurt. I guess explicit is better than implicit....)

&gt; Source/WebKit/UIProcess/API/glib/WebKitWebView.cpp:2118
&gt; +    webView-&gt;priv-&gt;currentScriptDialog = webkitScriptDialogCreate(WEBKIT_SCRIPT_DIALOG_ALERT, message, { }, [webView, completionHandler = WTFMove(completionHandler)](bool, const String&amp;) {
&gt; +        completionHandler();
&gt; +        webView-&gt;priv-&gt;currentScriptDialog = nullptr;
&gt; +    });

What about if:

 * webView-&gt;priv-&gt;currentScriptDialog is already non-null (a script dialog is currently shown)
 * This gets called again (is it possible?)
 * webView-&gt;priv-&gt;currentScriptDialog is overwritten with a new WebKitScriptDialog
 * Then: webView is destroyed for unrelated reason
 * webkit_script_dialog_close() is called only for the new WebKitScriptDialog, not the old one
 * completionHandler for the original WebKitScriptDialog remains outstanding (perhaps forever?)
 * If it ever gets called (not sure how it could, with webView destroyed) then webView pointer would be dangling -&gt; use after free

I guess there should only be one dialog at a time? If so, ASSERT(!webView-&gt;priv-&gt;currentScriptDialog) would be appropriate here (and in all the below functions).

I think I would also add an ASSERT(WEBKIT_IS_WEB_VIEW(webView)) inside these completion handlers to catch if due to some bug it were to ever be dangling.

&gt; Tools/TestWebKitAPI/Tests/WebKitGLib/TestUIClient.cpp:572
&gt; +        test-&gt;m_delayedScriptDialogs = !!i;

Again, no need for !! unless you really like it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1459273</commentid>
    <comment_count>4</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2018-09-12 23:49:18 -0700</bug_when>
    <thetext>(In reply to Michael Catanzaro from comment #3)
&gt; Comment on attachment 349542 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=349542&amp;action=review
&gt; 
&gt; Looks excellent, as usual.
&gt; 
&gt; &gt; Source/WebKit/UIProcess/API/glib/WebKitScriptDialog.cpp:36
&gt; &gt; +    return !!scriptDialog-&gt;completionHandler;
&gt; 
&gt; You need the !! with gboolean to convert to 0 or 1... but this is a bool,
&gt; the conversion to true or false is automatic. (Anyway, doesn&apos;t hurt. I guess
&gt; explicit is better than implicit....)

It&apos;s not bool, it&apos;s a Function&lt;&gt;. I know it implements bool operator, but in this case I think it&apos;s easier to understand with the explicit !!.

&gt; &gt; Source/WebKit/UIProcess/API/glib/WebKitWebView.cpp:2118
&gt; &gt; +    webView-&gt;priv-&gt;currentScriptDialog = webkitScriptDialogCreate(WEBKIT_SCRIPT_DIALOG_ALERT, message, { }, [webView, completionHandler = WTFMove(completionHandler)](bool, const String&amp;) {
&gt; &gt; +        completionHandler();
&gt; &gt; +        webView-&gt;priv-&gt;currentScriptDialog = nullptr;
&gt; &gt; +    });
&gt; 
&gt; What about if:
&gt; 
&gt;  * webView-&gt;priv-&gt;currentScriptDialog is already non-null (a script dialog
&gt; is currently shown)
&gt;  * This gets called again (is it possible?)
&gt;  * webView-&gt;priv-&gt;currentScriptDialog is overwritten with a new
&gt; WebKitScriptDialog
&gt;  * Then: webView is destroyed for unrelated reason
&gt;  * webkit_script_dialog_close() is called only for the new
&gt; WebKitScriptDialog, not the old one
&gt;  * completionHandler for the original WebKitScriptDialog remains outstanding
&gt; (perhaps forever?)
&gt;  * If it ever gets called (not sure how it could, with webView destroyed)
&gt; then webView pointer would be dangling -&gt; use after free
&gt; 
&gt; I guess there should only be one dialog at a time? If so,
&gt; ASSERT(!webView-&gt;priv-&gt;currentScriptDialog) would be appropriate here (and
&gt; in all the below functions).

Alerts are sync in the web process, so we can&apos;t receive a second alert while one is running. The HTTP auth dialog happens during the network load, so there can&apos;t be an alert at that point. I&apos;ll add an assert anyway just in case I&apos;m missing an edge case somewhere.

&gt; I think I would also add an ASSERT(WEBKIT_IS_WEB_VIEW(webView)) inside these
&gt; completion handlers to catch if due to some bug it were to ever be dangling.

WebKitWebView closes the dialog on dispose.

&gt; &gt; Tools/TestWebKitAPI/Tests/WebKitGLib/TestUIClient.cpp:572
&gt; &gt; +        test-&gt;m_delayedScriptDialogs = !!i;
&gt; 
&gt; Again, no need for !! unless you really like it.

Yes, in this case assigning an iterator to a boolean looked weird to me. What I would do here is = i != 0, but WebKit coding style doesn&apos;t allow to compare to 0, so again explicit !! looked easier to read for me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1459296</commentid>
    <comment_count>5</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2018-09-13 01:24:27 -0700</bug_when>
    <thetext>Committed r235969: &lt;https://trac.webkit.org/changeset/235969&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>349542</attachid>
            <date>2018-09-12 06:16:38 -0700</date>
            <delta_ts>2018-09-12 20:32:12 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>wk2-async-alerts.diff</filename>
            <type>text/plain</type>
            <size>32177</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKaW5kZXggZjdhMzg0OTVjZGQuLmE1MzRmYzhkY2Y0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsx
LDQxIEBACisyMDE4LTA5LTEyICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlh
LmNvbT4KKworICAgICAgICBbR1RLXVtXUEVdIEFsbG93IHRvIHJ1biBzY3JpcHQgZGlhbG9ncyBh
c3luY2hyb25vdXNseSBpbiB0aGUgVUkgcHJvY2VzcworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg5NTQ0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgU2NyaXB0IGRpYWxvZ3MgYXJlIHN5bmMgaW4gdGhlIFdl
YlByb2Nlc3MsIGJ1dCB3ZSBkb24ndCBuZWVkIHRvIGJsb2NrIHRoZSBVSSBwcm9jZXNzIHdoaWxl
IHRoZXkgYXJlIHJ1bm5pbmcuIE91cgorICAgICAgICBjdXJyZW50IEFQSSBkb2Vzbid0IGFsbG93
IGl0LCBiZWNhdXNlIGl0IGFsd2F5cyBleHBlY3RzIHRoZSBkaWFsb2cgdG8gYmUgY2xvc2VkIGlu
IHRoZSBzaWduYWwgaGFuZGxlci4gQVBJCisgICAgICAgIGNoYW5nZXMgYXJlIGJhY2t3YXJkcyBj
b21wYXRpYmxlLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFNjcmlwdERp
YWxvZy5jcHA6CisgICAgICAgICh3ZWJraXRTY3JpcHREaWFsb2dDcmVhdGUpOiBBZGRlZCB0byBo
ZWFwIGFsbG9jYXRlIGEgV2ViS2l0U2NyaXB0RGlhbG9nLgorICAgICAgICAod2Via2l0U2NyaXB0
RGlhbG9nSXNSdW5uaW5nKTogQ29tbW9uIGltcGxlbWVudGF0aW9uIGhlcmUsIGEgc2NyaXB0IGRp
YWxvZyBpcyBjb25zaWRlcmVkIHRvIGJlIHJ1bm5pbmcgaWYgaXQgaGFzCisgICAgICAgIGEgY29t
cGV0aW9uIGhhbmRsZXIgcGVuZGluZy4KKyAgICAgICAgKHdlYmtpdF9zY3JpcHRfZGlhbG9nX3Jl
Zik6IFdlYktpdFNjcmlwdERpYWxvZyBpcyBub3cgcmVmY291bnRlZC4KKyAgICAgICAgKHdlYmtp
dF9zY3JpcHRfZGlhbG9nX3VucmVmKTogRGl0dG8uCisgICAgICAgICh3ZWJraXRfc2NyaXB0X2Rp
YWxvZ19jbG9zZSk6IE5ldyBtZXRob2QgdG8gbm90aWZ5IHRoYXQgd2UgYXJlIGRvbmUgd2l0aCB0
aGUgZGlhbG9nLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRTY3JpcHREaWFs
b2dQcml2YXRlLmg6CisgICAgICAgIChfV2ViS2l0U2NyaXB0RGlhbG9nOjpfV2ViS2l0U2NyaXB0
RGlhbG9nKTogVXNlIGEgc2luZ2xlIGNvbnN0cnVjdG9yIGFuZCBrZWVwIHRoZSBjb21wbGV0aW9u
IGhhbmRsZXIuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFVJQ2xpZW50LmNw
cDogRG8gbm90IGNhbGwgdGhlIGNvbXBsZXRpb24gaGFuZGxlciwgcGFzcyBpdCB0byB0aGUgd2Vi
IHZpZXcuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYlZpZXcuY3BwOgor
ICAgICAgICAod2Via2l0V2ViVmlld0Rpc3Bvc2UpOiBDbG9zZSB0aGUgY3VycmVudCBzY3JpcHQg
ZGlhbG9nIGlmIHRoZXJlJ3MgYW55LgorICAgICAgICAod2Via2l0X3dlYl92aWV3X2NsYXNzX2lu
aXQpOiBEb2N1bWVudCBob3cgdG8gaGFuZGxlIGRpYWxvZ3MgYXN5bmNocm9ub3VzbHkuCisgICAg
ICAgICh3ZWJraXRXZWJWaWV3UnVuSmF2YVNjcmlwdEFsZXJ0KTogRG8gbm90IHN0YWNrIGFsbG9j
YXRlIHRoZSBXZWJLaXRTY3JpcHREaWFsb2csIGNyZWF0ZSBpdCB3aXRoCisgICAgICAgIHdlYmtp
dFNjcmlwdERpYWxvZ0NyZWF0ZSgpIHBhc3NpbmcgdGhlIGNvbXBsZXRpb24gaGFuZGxlci4KKyAg
ICAgICAgKHdlYmtpdFdlYlZpZXdSdW5KYXZhU2NyaXB0Q29uZmlybSk6IERpdHRvLgorICAgICAg
ICAod2Via2l0V2ViVmlld1J1bkphdmFTY3JpcHRQcm9tcHQpOiBEaXR0by4KKyAgICAgICAgKHdl
YmtpdFdlYlZpZXdSdW5KYXZhU2NyaXB0QmVmb3JlVW5sb2FkQ29uZmlybSk6IERpdHRvLgorICAg
ICAgICAqIFVJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJWaWV3UHJpdmF0ZS5oOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFNjcmlwdERpYWxvZy5oOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFNjcmlwdERpYWxvZ0d0ay5jcHA6CisgICAgICAgIChzY3Jp
cHREaWFsb2dSZXNwb25zZUNhbGxiYWNrKTogSG5hZGxlIHRoZSByZXNwb25zZSBjYWxsYmFjay4K
KyAgICAgICAgKHdlYmtpdFNjcmlwdERpYWxvZ1J1bik6IERvIG5vdCB1c2UgZ3RrX2RpYWxvZ19y
dW4oKSwgY29ubmVjdCB0byByZXNwb25zZSBzaWduYWwgYW5kIHNob3cgdGhlIGRpYWxvZ3MgaW5z
dGVhZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstNC4wLXNl
Y3Rpb25zLnR4dDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGst
ZG9jcy5zZ21sOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvd3BlL1dlYktpdFNjcmlwdERpYWxv
Z1dQRS5jcHA6CisKIDIwMTgtMDktMDkgIEZ1amlpIEhpcm9ub3JpICA8SGlyb25vcmkuRnVqaWlA
c29ueS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjIzNTgzOS4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFNjcmlwdERp
YWxvZy5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRTY3JpcHRE
aWFsb2cuY3BwCmluZGV4IDVmOTc3MjQwNzk3Li44NTY2ODNkOTJiZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0U2NyaXB0RGlhbG9nLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRTY3JpcHREaWFsb2cuY3Bw
CkBAIC0yMiwyMCArMjIsNTYgQEAKIAogI2luY2x1ZGUgIldlYktpdFNjcmlwdERpYWxvZ1ByaXZh
dGUuaCIKIAotc3RhdGljIFdlYktpdFNjcmlwdERpYWxvZyogd2Via2l0U2NyaXB0RGlhbG9nQ29w
eShXZWJLaXRTY3JpcHREaWFsb2cqIGRpYWxvZykKK0dfREVGSU5FX0JPWEVEX1RZUEUoV2ViS2l0
U2NyaXB0RGlhbG9nLCB3ZWJraXRfc2NyaXB0X2RpYWxvZywgd2Via2l0X3NjcmlwdF9kaWFsb2df
cmVmLCB3ZWJraXRfc2NyaXB0X2RpYWxvZ191bnJlZikKKworV2ViS2l0U2NyaXB0RGlhbG9nKiB3
ZWJraXRTY3JpcHREaWFsb2dDcmVhdGUodW5zaWduZWQgdHlwZSwgY29uc3QgQ1N0cmluZyYgbWVz
c2FnZSwgY29uc3QgQ1N0cmluZyYgZGVmYXVsdFRleHQsIEZ1bmN0aW9uPHZvaWQoYm9vbCwgY29u
c3QgU3RyaW5nJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgV2ViS2l0U2NyaXB0RGlh
bG9nKiBjb3B5ID0gc3RhdGljX2Nhc3Q8V2ViS2l0U2NyaXB0RGlhbG9nKj4oZmFzdFplcm9lZE1h
bGxvYyhzaXplb2YoV2ViS2l0U2NyaXB0RGlhbG9nKSkpOwotICAgIG5ldyAoY29weSkgV2ViS2l0
U2NyaXB0RGlhbG9nKGRpYWxvZyk7Ci0gICAgcmV0dXJuIGNvcHk7CisgICAgYXV0byogZGlhbG9n
ID0gc3RhdGljX2Nhc3Q8V2ViS2l0U2NyaXB0RGlhbG9nKj4oZmFzdE1hbGxvYyhzaXplb2YoV2Vi
S2l0U2NyaXB0RGlhbG9nKSkpOworICAgIG5ldyAoZGlhbG9nKSBXZWJLaXRTY3JpcHREaWFsb2co
dHlwZSwgbWVzc2FnZSwgZGVmYXVsdFRleHQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsK
KyAgICByZXR1cm4gZGlhbG9nOwogfQogCi1zdGF0aWMgdm9pZCB3ZWJraXRTY3JpcHREaWFsb2dG
cmVlKFdlYktpdFNjcmlwdERpYWxvZyogZGlhbG9nKQorYm9vbCB3ZWJraXRTY3JpcHREaWFsb2dJ
c1J1bm5pbmcoV2ViS2l0U2NyaXB0RGlhbG9nKiBzY3JpcHREaWFsb2cpCiB7Ci0gICAgZGlhbG9n
LT5+V2ViS2l0U2NyaXB0RGlhbG9nKCk7Ci0gICAgZmFzdEZyZWUoZGlhbG9nKTsKKyAgICByZXR1
cm4gISFzY3JpcHREaWFsb2ctPmNvbXBsZXRpb25IYW5kbGVyOwogfQogCi1HX0RFRklORV9CT1hF
RF9UWVBFKFdlYktpdFNjcmlwdERpYWxvZywgd2Via2l0X3NjcmlwdF9kaWFsb2csIHdlYmtpdFNj
cmlwdERpYWxvZ0NvcHksIHdlYmtpdFNjcmlwdERpYWxvZ0ZyZWUpCisvKioKKyAqIHdlYmtpdF9z
Y3JpcHRfZGlhbG9nX3JlZjoKKyAqIEBkaWFsb2c6IGEgI1dlYktpdFNjcmlwdERpYWxvZworICoK
KyAqIEF0b21pY2FsbHkgaW5jcmVtZW50cyB0aGUgcmVmZXJlbmNlIGNvdW50IG9mIEBkaWFsb2cg
Ynkgb25lLiBUaGlzCisgKiBmdW5jdGlvbiBpcyBNVC1zYWZlIGFuZCBtYXkgYmUgY2FsbGVkIGZy
b20gYW55IHRocmVhZC4KKyAqCisgKiBSZXR1cm5zOiBUaGUgcGFzc2VkIGluICNXZWJLaXRTY3Jp
cHREaWFsb2cKKyAqCisgKiBTaW5jZTogMi4yNAorICovCitXZWJLaXRTY3JpcHREaWFsb2cqIHdl
YmtpdF9zY3JpcHRfZGlhbG9nX3JlZihXZWJLaXRTY3JpcHREaWFsb2cqIGRpYWxvZykKK3sKKyAg
ICBnX2F0b21pY19pbnRfaW5jKCZkaWFsb2ctPnJlZmVyZW5jZUNvdW50KTsKKyAgICByZXR1cm4g
ZGlhbG9nOworfQorCisvKioKKyAqIHdlYmtpdF9zY3JpcHRfZGlhbG9nX3VucmVmOgorICogQGRp
YWxvZzogYSAjV2ViS2l0U2NyaXB0RGlhbG9nCisgKgorICogQXRvbWljYWxseSBkZWNyZW1lbnRz
IHRoZSByZWZlcmVuY2UgY291bnQgb2YgQGRpYWxvZyBieSBvbmUuIElmIHRoZQorICogcmVmZXJl
bmNlIGNvdW50IGRyb3BzIHRvIDAsIGFsbCBtZW1vcnkgYWxsb2NhdGVkIGJ5IHRoZSAjV2ViS2l0
U2NyaXB0ZGlhbG9nIGlzCisgKiByZWxlYXNlZC4gVGhpcyBmdW5jdGlvbiBpcyBNVC1zYWZlIGFu
ZCBtYXkgYmUgY2FsbGVkIGZyb20gYW55CisgKiB0aHJlYWQuCisgKgorICogU2luY2U6IDIuMjQK
KyAqLwordm9pZCB3ZWJraXRfc2NyaXB0X2RpYWxvZ191bnJlZihXZWJLaXRTY3JpcHREaWFsb2cq
IGRpYWxvZykKK3sKKyAgICBpZiAoZ19hdG9taWNfaW50X2RlY19hbmRfdGVzdCgmZGlhbG9nLT5y
ZWZlcmVuY2VDb3VudCkpIHsKKyAgICAgICAgd2Via2l0X3NjcmlwdF9kaWFsb2dfY2xvc2UoZGlh
bG9nKTsKKyAgICAgICAgZGlhbG9nLT5+V2ViS2l0U2NyaXB0RGlhbG9nKCk7CisgICAgICAgIGZh
c3RGcmVlKGRpYWxvZyk7CisgICAgfQorfQogCiAvKioKICAqIHdlYmtpdF9zY3JpcHRfZGlhbG9n
X2dldF9kaWFsb2dfdHlwZToKQEAgLTEyNCwzICsxNjAsMzcgQEAgdm9pZCB3ZWJraXRfc2NyaXB0
X2RpYWxvZ19wcm9tcHRfc2V0X3RleHQoV2ViS2l0U2NyaXB0RGlhbG9nKiBkaWFsb2csIGNvbnN0
IGNoYXIKIAogICAgIGRpYWxvZy0+dGV4dCA9IHRleHQ7CiB9CisKKy8qKgorICogd2Via2l0X3Nj
cmlwdF9kaWFsb2dfY2xvc2U6CisgKiBAZGlhbG9nOiBhICNXZWJLaXRTY3JpcHREaWFsb2cKKyAq
CisgKiBDbG9zZSBAZGlhbG9nLiBXaGVuIGhhbmRsaW5nIGEgI1dlYktpdFNjcmlwdERpYWxvZyBh
c3luY2hyb25vdXNseSAod2Via2l0X3NjcmlwdF9kaWFsb2dfcmVmKCkKKyAqIHdhcyBjYWxsZWQg
aW4gI1dlYktpdFdlYlZpZXc6OnNjcmlwdC1kaWFsb2cgY2FsbGJhY2spLCB0aGlzIGZ1bmN0aW9u
IG5lZWRzIHRvIGJlIGNhbGxlZCB0byBub3RpZnkKKyAqIHRoYXQgd2UgYXJlIGRvbmUgd2l0aCB0
aGUgc2NyaXB0IGRpYWxvZy4gVGhlIGRpYWxvZyB3aWxsIGJlIGNsb3NlZCBvbiBkZXN0cnVjdGlv
biBpZiB0aGlzIGZ1bmN0aW9uCisgKiBoYXNuJ3QgYmVlbiBjYWxsZWQgYmVmb3JlLgorICoKKyAq
IFNpbmNlOiAyLjI0CisgKi8KK3ZvaWQgd2Via2l0X3NjcmlwdF9kaWFsb2dfY2xvc2UoV2ViS2l0
U2NyaXB0RGlhbG9nKiBkaWFsb2cpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChkaWFsb2cpOwor
CisgICAgaWYgKCFkaWFsb2ctPmNvbXBsZXRpb25IYW5kbGVyKQorICAgICAgICByZXR1cm47CisK
KyAgICBhdXRvIGNvbXBsZXRpb25IYW5kbGVyID0gc3RkOjpleGNoYW5nZShkaWFsb2ctPmNvbXBs
ZXRpb25IYW5kbGVyLCBudWxscHRyKTsKKworICAgIHN3aXRjaCAoZGlhbG9nLT50eXBlKSB7Cisg
ICAgY2FzZSBXRUJLSVRfU0NSSVBUX0RJQUxPR19BTEVSVDoKKyAgICAgICAgY29tcGxldGlvbkhh
bmRsZXIoZmFsc2UsIGVtcHR5U3RyaW5nKCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFdF
QktJVF9TQ1JJUFRfRElBTE9HX0NPTkZJUk06CisgICAgY2FzZSBXRUJLSVRfU0NSSVBUX0RJQUxP
R19CRUZPUkVfVU5MT0FEX0NPTkZJUk06CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGRpYWxv
Zy0+Y29uZmlybWVkLCBlbXB0eVN0cmluZygpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBX
RUJLSVRfU0NSSVBUX0RJQUxPR19QUk9NUFQ6CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGZh
bHNlLCBTdHJpbmc6OmZyb21VVEY4KGRpYWxvZy0+dGV4dC5kYXRhKCkpKTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2ds
aWIvV2ViS2l0U2NyaXB0RGlhbG9nUHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL2dsaWIvV2ViS2l0U2NyaXB0RGlhbG9nUHJpdmF0ZS5oCmluZGV4IDAwZGE2ZWRmZDVmLi41
OGQ3N2NiNzY1NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIv
V2ViS2l0U2NyaXB0RGlhbG9nUHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9nbGliL1dlYktpdFNjcmlwdERpYWxvZ1ByaXZhdGUuaApAQCAtMjUsMjggKzI1LDExIEBA
CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIHN0cnVjdCBfV2ViS2l0U2NyaXB0
RGlhbG9nIHsKLSAgICBfV2ViS2l0U2NyaXB0RGlhbG9nKHVuc2lnbmVkIHR5cGUsIGNvbnN0IENT
dHJpbmcmIG1lc3NhZ2UpCi0gICAgICAgIDogdHlwZSh0eXBlKQotICAgICAgICAsIG1lc3NhZ2Uo
bWVzc2FnZSkKLSAgICAgICAgLCBjb25maXJtZWQoZmFsc2UpCi0gICAgewotICAgIH0KLQotICAg
IF9XZWJLaXRTY3JpcHREaWFsb2codW5zaWduZWQgdHlwZSwgY29uc3QgQ1N0cmluZyYgbWVzc2Fn
ZSwgY29uc3QgQ1N0cmluZyYgZGVmYXVsdFRleHQpCisgICAgX1dlYktpdFNjcmlwdERpYWxvZyh1
bnNpZ25lZCB0eXBlLCBjb25zdCBDU3RyaW5nJiBtZXNzYWdlLCBjb25zdCBDU3RyaW5nJiBkZWZh
dWx0VGV4dCwgRnVuY3Rpb248dm9pZChib29sLCBjb25zdCBTdHJpbmcmKT4mJiBjb21wbGV0aW9u
SGFuZGxlcikKICAgICAgICAgOiB0eXBlKHR5cGUpCiAgICAgICAgICwgbWVzc2FnZShtZXNzYWdl
KQogICAgICAgICAsIGRlZmF1bHRUZXh0KGRlZmF1bHRUZXh0KQotICAgICAgICAsIGNvbmZpcm1l
ZChmYWxzZSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVCh0eXBlID09IFdFQktJVF9TQ1JJUFRfRElB
TE9HX1BST01QVCk7Ci0gICAgfQotCi0gICAgX1dlYktpdFNjcmlwdERpYWxvZyhXZWJLaXRTY3Jp
cHREaWFsb2cqIGRpYWxvZykKLSAgICAgICAgOiB0eXBlKGRpYWxvZy0+dHlwZSkKLSAgICAgICAg
LCBtZXNzYWdlKGRpYWxvZy0+bWVzc2FnZSkKLSAgICAgICAgLCBkZWZhdWx0VGV4dChkaWFsb2ct
PmRlZmF1bHRUZXh0KQotICAgICAgICAsIGNvbmZpcm1lZChkaWFsb2ctPmNvbmZpcm1lZCkKLSAg
ICAgICAgLCB0ZXh0KGRpYWxvZy0+dGV4dCkKKyAgICAgICAgLCBjb21wbGV0aW9uSGFuZGxlcihX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSkKICAgICB7CiAgICAgfQogCkBAIC01NCwxNCArMzcs
MTkgQEAgc3RydWN0IF9XZWJLaXRTY3JpcHREaWFsb2cgewogICAgIENTdHJpbmcgbWVzc2FnZTsK
ICAgICBDU3RyaW5nIGRlZmF1bHRUZXh0OwogCi0gICAgYm9vbCBjb25maXJtZWQ7CisgICAgYm9v
bCBjb25maXJtZWQgeyBmYWxzZSB9OwogICAgIENTdHJpbmcgdGV4dDsKIAorICAgIEZ1bmN0aW9u
PHZvaWQoYm9vbCwgY29uc3QgU3RyaW5nJik+IGNvbXBsZXRpb25IYW5kbGVyOworCiAjaWYgUExB
VEZPUk0oR1RLKQogICAgIEd0a1dpZGdldCogbmF0aXZlRGlhbG9nIHsgbnVsbHB0ciB9OwogI2Vu
ZGlmCisKKyAgICBpbnQgcmVmZXJlbmNlQ291bnQgeyAxIH07CiB9OwogCitXZWJLaXRTY3JpcHRE
aWFsb2cqIHdlYmtpdFNjcmlwdERpYWxvZ0NyZWF0ZSh1bnNpZ25lZCB0eXBlLCBjb25zdCBDU3Ry
aW5nJiBtZXNzYWdlLCBjb25zdCBDU3RyaW5nJiBkZWZhdWx0VGV4dCwgRnVuY3Rpb248dm9pZChi
b29sLCBjb25zdCBTdHJpbmcmKT4mJiBjb21wbGV0aW9uSGFuZGxlcik7CiB2b2lkIHdlYmtpdFNj
cmlwdERpYWxvZ1J1bihXZWJLaXRTY3JpcHREaWFsb2cqLCBXZWJLaXRXZWJWaWV3Kik7CiBib29s
IHdlYmtpdFNjcmlwdERpYWxvZ0lzUnVubmluZyhXZWJLaXRTY3JpcHREaWFsb2cqKTsKIHZvaWQg
d2Via2l0U2NyaXB0RGlhbG9nQWNjZXB0KFdlYktpdFNjcmlwdERpYWxvZyopOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0VUlDbGllbnQuY3BwIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0VUlDbGllbnQuY3BwCmluZGV4
IGM2YzIxZDBkOGJiLi4wMjc1NDMxMjdhZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL2dsaWIvV2ViS2l0VUlDbGllbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS9nbGliL1dlYktpdFVJQ2xpZW50LmNwcApAQCAtNjcsMzEgKzY3LDI0IEBAIHBy
aXZhdGU6CiAKICAgICB2b2lkIHJ1bkphdmFTY3JpcHRBbGVydChXZWJQYWdlUHJveHkqLCBjb25z
dCBTdHJpbmcmIG1lc3NhZ2UsIFdlYkZyYW1lUHJveHkqLCBjb25zdCBXZWJDb3JlOjpTZWN1cml0
eU9yaWdpbkRhdGEmLCBGdW5jdGlvbjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpIGZpbmFs
CiAgICAgewotICAgICAgICB3ZWJraXRXZWJWaWV3UnVuSmF2YVNjcmlwdEFsZXJ0KG1fd2ViVmll
dywgbWVzc2FnZS51dGY4KCkpOwotICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOworICAgICAg
ICB3ZWJraXRXZWJWaWV3UnVuSmF2YVNjcmlwdEFsZXJ0KG1fd2ViVmlldywgbWVzc2FnZS51dGY4
KCksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICB9CiAKICAgICB2b2lkIHJ1bkph
dmFTY3JpcHRDb25maXJtKFdlYlBhZ2VQcm94eSosIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgV2Vi
RnJhbWVQcm94eSosIGNvbnN0IFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSYsIEZ1bmN0aW9u
PHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpIGZpbmFsCiAgICAgewotICAgICAgICBj
b21wbGV0aW9uSGFuZGxlcih3ZWJraXRXZWJWaWV3UnVuSmF2YVNjcmlwdENvbmZpcm0obV93ZWJW
aWV3LCBtZXNzYWdlLnV0ZjgoKSkpOworICAgICAgICB3ZWJraXRXZWJWaWV3UnVuSmF2YVNjcmlw
dENvbmZpcm0obV93ZWJWaWV3LCBtZXNzYWdlLnV0ZjgoKSwgV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcikpOwogICAgIH0KIAogICAgIHZvaWQgcnVuSmF2YVNjcmlwdFByb21wdChXZWJQYWdlUHJv
eHkqLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIGNvbnN0IFN0cmluZyYgZGVmYXVsdFZhbHVlLCBX
ZWJGcmFtZVByb3h5KiwgY29uc3QgV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhJiwgRnVuY3Rp
b248dm9pZChjb25zdCBTdHJpbmcmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikgZmluYWwKICAgICB7
Ci0gICAgICAgIENTdHJpbmcgcmVzdWx0ID0gd2Via2l0V2ViVmlld1J1bkphdmFTY3JpcHRQcm9t
cHQobV93ZWJWaWV3LCBtZXNzYWdlLnV0ZjgoKSwgZGVmYXVsdFZhbHVlLnV0ZjgoKSk7Ci0gICAg
ICAgIGlmIChyZXN1bHQuaXNOdWxsKCkpIHsKLSAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVy
KFN0cmluZygpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGNv
bXBsZXRpb25IYW5kbGVyKFN0cmluZzo6ZnJvbVVURjgocmVzdWx0LmRhdGEoKSkpOworICAgICAg
ICB3ZWJraXRXZWJWaWV3UnVuSmF2YVNjcmlwdFByb21wdChtX3dlYlZpZXcsIG1lc3NhZ2UudXRm
OCgpLCBkZWZhdWx0VmFsdWUudXRmOCgpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAg
ICAgfQogCiAgICAgYm9vbCBjYW5SdW5CZWZvcmVVbmxvYWRDb25maXJtUGFuZWwoKSBjb25zdCBm
aW5hbCB7IHJldHVybiB0cnVlOyB9CiAKICAgICB2b2lkIHJ1bkJlZm9yZVVubG9hZENvbmZpcm1Q
YW5lbChXZWJQYWdlUHJveHkqLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIFdlYkZyYW1lUHJveHkq
LCBjb25zdCBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGEmLCBGdW5jdGlvbjx2b2lkKGJvb2wp
PiYmIGNvbXBsZXRpb25IYW5kbGVyKSBmaW5hbAogICAgIHsKLSAgICAgICAgY29tcGxldGlvbkhh
bmRsZXIod2Via2l0V2ViVmlld1J1bkphdmFTY3JpcHRCZWZvcmVVbmxvYWRDb25maXJtKG1fd2Vi
VmlldywgbWVzc2FnZS51dGY4KCkpKTsKKyAgICAgICAgd2Via2l0V2ViVmlld1J1bkphdmFTY3Jp
cHRCZWZvcmVVbmxvYWRDb25maXJtKG1fd2ViVmlldywgbWVzc2FnZS51dGY4KCksIFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpKTsKICAgICB9CiAKICAgICB2b2lkIG1vdXNlRGlkTW92ZU92ZXJF
bGVtZW50KFdlYlBhZ2VQcm94eSYsIGNvbnN0IFdlYkhpdFRlc3RSZXN1bHREYXRhJiBkYXRhLCBX
ZWJFdmVudDo6TW9kaWZpZXJzIG1vZGlmaWVycywgQVBJOjpPYmplY3QqKSBmaW5hbApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2ViVmlldy5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJWaWV3LmNwcAppbmRl
eCBlNjg3MzExNTI1Zi4uYTNjYTRkYTkxMjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYlZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYlZpZXcuY3BwCkBAIC03MSw3ICs3MSw2IEBACiAjaW5j
bHVkZSA8V2ViQ29yZS9SZWZQdHJDYWlyby5oPgogI2luY2x1ZGUgPFdlYkNvcmUvVVJMLmg+CiAj
aW5jbHVkZSA8Z2xpYi9naTE4bi1saWIuaD4KLSNpbmNsdWRlIDx3dGYvU2V0Rm9yU2NvcGUuaD4K
ICNpbmNsdWRlIDx3dGYvZ2xpYi9HUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL2dsaWIvV1RGR1R5
cGUuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CkBAIC04MDcsNiArODA2LDExIEBA
IHN0YXRpYyB2b2lkIHdlYmtpdFdlYlZpZXdEaXNwb3NlKEdPYmplY3QqIG9iamVjdCkKICAgICAg
ICAgd2ViVmlldy0+cHJpdi0+d2Vic2l0ZURhdGFNYW5hZ2VyID0gbnVsbHB0cjsKICAgICB9CiAK
KyAgICBpZiAod2ViVmlldy0+cHJpdi0+Y3VycmVudFNjcmlwdERpYWxvZykgeworICAgICAgICB3
ZWJraXRfc2NyaXB0X2RpYWxvZ19jbG9zZSh3ZWJWaWV3LT5wcml2LT5jdXJyZW50U2NyaXB0RGlh
bG9nKTsKKyAgICAgICAgQVNTRVJUKCF3ZWJWaWV3LT5wcml2LT5jdXJyZW50U2NyaXB0RGlhbG9n
KTsKKyAgICB9CisKICNpZiBQTEFURk9STShXUEUpCiAgICAgd2ViVmlldy0+cHJpdi0+dmlldy0+
Y2xvc2UoKTsKICNlbmRpZgpAQCAtMTM1NSw2ICsxMzU5LDEyIEBAIHN0YXRpYyB2b2lkIHdlYmtp
dF93ZWJfdmlld19jbGFzc19pbml0KFdlYktpdFdlYlZpZXdDbGFzcyogd2ViVmlld0NsYXNzKQog
ICAgICAqIDwvcGFyYT48L2xpc3RpdGVtPgogICAgICAqIDwvaXRlbWl6ZWRsaXN0PgogICAgICAq
CisgICAgICogSXQgaXMgcG9zc2libGUgdG8gaGFuZGxlIHRoZSBzY3JpcHQgZGlhbG9nIHJlcXVl
c3QgYXN5bmNocm9ub3VzbHksIGJ5IHNpbXBseQorICAgICAqIGNhbGluZyB3ZWJraXRfc2NyaXB0
X2RpYWxvZ19yZWYoKSBvbiB0aGUgQGRpYWxvZyBhcmd1bWVudCBhbmQgY2FsbGluZworICAgICAq
IHdlYmtpdF9zY3JpcHRfZGlhbG9nX2Nsb3NlKCkgd2hlbiBkb25lLgorICAgICAqIElmIHRoZSBs
YXN0IHJlZmVyZW5jZSBpcyByZW1vdmVkIG9uIGEgI1dlYktpdFNjcmlwdERpYWxvZyBhbmQgdGhl
IGRpYWxvZyBoYXMgbm90IGJlZW4KKyAgICAgKiBjbG9zZWQsIHdlYmtpdF9zY3JpcHRfZGlhbG9n
X2Nsb3NlKCkgd2lsbCBiZSBjYWxsZWQuCisgICAgICoKICAgICAgKiBSZXR1cm5zOiAlVFJVRSB0
byBzdG9wIG90aGVyIGhhbmRsZXJzIGZyb20gYmVpbmcgaW52b2tlZCBmb3IgdGhlIGV2ZW50Lgog
ICAgICAqICAgICVGQUxTRSB0byBwcm9wYWdhdGUgdGhlIGV2ZW50IGZ1cnRoZXIuCiAgICAgICov
CkBAIC0xMzY2LDcgKzEzNzYsNyBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfY2xhc3Nf
aW5pdChXZWJLaXRXZWJWaWV3Q2xhc3MqIHdlYlZpZXdDbGFzcykKICAgICAgICAgZ19zaWduYWxf
YWNjdW11bGF0b3JfdHJ1ZV9oYW5kbGVkLCBudWxscHRyLAogICAgICAgICBnX2NjbG9zdXJlX21h
cnNoYWxfZ2VuZXJpYywKICAgICAgICAgR19UWVBFX0JPT0xFQU4sIDEsCi0gICAgICAgIFdFQktJ
VF9UWVBFX1NDUklQVF9ESUFMT0cgfCBHX1NJR05BTF9UWVBFX1NUQVRJQ19TQ09QRSk7CisgICAg
ICAgIFdFQktJVF9UWVBFX1NDUklQVF9ESUFMT0cpOwogCiAgICAgLyoqCiAgICAgICogV2ViS2l0
V2ViVmlldzo6ZGVjaWRlLXBvbGljeToKQEAgLTIxMDAsMzkgKzIxMTAsNDggQEAgdm9pZCB3ZWJr
aXRXZWJWaWV3Q2xvc2VQYWdlKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCiAgICAgZ19zaWduYWxf
ZW1pdCh3ZWJWaWV3LCBzaWduYWxzW0NMT1NFXSwgMCwgTlVMTCk7CiB9CiAKLXZvaWQgd2Via2l0
V2ViVmlld1J1bkphdmFTY3JpcHRBbGVydChXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBjb25zdCBD
U3RyaW5nJiBtZXNzYWdlKQordm9pZCB3ZWJraXRXZWJWaWV3UnVuSmF2YVNjcmlwdEFsZXJ0KFdl
YktpdFdlYlZpZXcqIHdlYlZpZXcsIGNvbnN0IENTdHJpbmcmIG1lc3NhZ2UsIEZ1bmN0aW9uPHZv
aWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBXZWJLaXRTY3JpcHREaWFsb2cgZGlh
bG9nKFdFQktJVF9TQ1JJUFRfRElBTE9HX0FMRVJULCBtZXNzYWdlKTsKLSAgICBTZXRGb3JTY29w
ZTxXZWJLaXRTY3JpcHREaWFsb2cqPiBjaGFuZ2Uod2ViVmlldy0+cHJpdi0+Y3VycmVudFNjcmlw
dERpYWxvZywgJmRpYWxvZyk7CisgICAgd2ViVmlldy0+cHJpdi0+Y3VycmVudFNjcmlwdERpYWxv
ZyA9IHdlYmtpdFNjcmlwdERpYWxvZ0NyZWF0ZShXRUJLSVRfU0NSSVBUX0RJQUxPR19BTEVSVCwg
bWVzc2FnZSwgeyB9LCBbd2ViVmlldywgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKV0oYm9vbCwgY29uc3QgU3RyaW5nJikgeworICAgICAgICBjb21wbGV0aW9u
SGFuZGxlcigpOworICAgICAgICB3ZWJWaWV3LT5wcml2LT5jdXJyZW50U2NyaXB0RGlhbG9nID0g
bnVsbHB0cjsKKyAgICB9KTsKICAgICBnYm9vbGVhbiByZXR1cm5WYWx1ZTsKLSAgICBnX3NpZ25h
bF9lbWl0KHdlYlZpZXcsIHNpZ25hbHNbU0NSSVBUX0RJQUxPR10sIDAsICZkaWFsb2csICZyZXR1
cm5WYWx1ZSk7CisgICAgZ19zaWduYWxfZW1pdCh3ZWJWaWV3LCBzaWduYWxzW1NDUklQVF9ESUFM
T0ddLCAwLCB3ZWJWaWV3LT5wcml2LT5jdXJyZW50U2NyaXB0RGlhbG9nLCAmcmV0dXJuVmFsdWUp
OworICAgIHdlYmtpdF9zY3JpcHRfZGlhbG9nX3VucmVmKHdlYlZpZXctPnByaXYtPmN1cnJlbnRT
Y3JpcHREaWFsb2cpOwogfQogCi1ib29sIHdlYmtpdFdlYlZpZXdSdW5KYXZhU2NyaXB0Q29uZmly
bShXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBjb25zdCBDU3RyaW5nJiBtZXNzYWdlKQordm9pZCB3
ZWJraXRXZWJWaWV3UnVuSmF2YVNjcmlwdENvbmZpcm0oV2ViS2l0V2ViVmlldyogd2ViVmlldywg
Y29uc3QgQ1N0cmluZyYgbWVzc2FnZSwgRnVuY3Rpb248dm9pZChib29sKT4mJiBjb21wbGV0aW9u
SGFuZGxlcikKIHsKLSAgICBXZWJLaXRTY3JpcHREaWFsb2cgZGlhbG9nKFdFQktJVF9TQ1JJUFRf
RElBTE9HX0NPTkZJUk0sIG1lc3NhZ2UpOwotICAgIFNldEZvclNjb3BlPFdlYktpdFNjcmlwdERp
YWxvZyo+IGNoYW5nZSh3ZWJWaWV3LT5wcml2LT5jdXJyZW50U2NyaXB0RGlhbG9nLCAmZGlhbG9n
KTsKKyAgICB3ZWJWaWV3LT5wcml2LT5jdXJyZW50U2NyaXB0RGlhbG9nID0gd2Via2l0U2NyaXB0
RGlhbG9nQ3JlYXRlKFdFQktJVF9TQ1JJUFRfRElBTE9HX0NPTkZJUk0sIG1lc3NhZ2UsIHsgfSwg
W3dlYlZpZXcsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcild
KGJvb2wgcmVzdWx0LCBjb25zdCBTdHJpbmcmKSB7CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVy
KHJlc3VsdCk7CisgICAgICAgIHdlYlZpZXctPnByaXYtPmN1cnJlbnRTY3JpcHREaWFsb2cgPSBu
dWxscHRyOworICAgIH0pOwogICAgIGdib29sZWFuIHJldHVyblZhbHVlOwotICAgIGdfc2lnbmFs
X2VtaXQod2ViVmlldywgc2lnbmFsc1tTQ1JJUFRfRElBTE9HXSwgMCwgJmRpYWxvZywgJnJldHVy
blZhbHVlKTsKLSAgICByZXR1cm4gZGlhbG9nLmNvbmZpcm1lZDsKKyAgICBnX3NpZ25hbF9lbWl0
KHdlYlZpZXcsIHNpZ25hbHNbU0NSSVBUX0RJQUxPR10sIDAsIHdlYlZpZXctPnByaXYtPmN1cnJl
bnRTY3JpcHREaWFsb2csICZyZXR1cm5WYWx1ZSk7CisgICAgd2Via2l0X3NjcmlwdF9kaWFsb2df
dW5yZWYod2ViVmlldy0+cHJpdi0+Y3VycmVudFNjcmlwdERpYWxvZyk7CiB9CiAKLUNTdHJpbmcg
d2Via2l0V2ViVmlld1J1bkphdmFTY3JpcHRQcm9tcHQoV2ViS2l0V2ViVmlldyogd2ViVmlldywg
Y29uc3QgQ1N0cmluZyYgbWVzc2FnZSwgY29uc3QgQ1N0cmluZyYgZGVmYXVsdFRleHQpCit2b2lk
IHdlYmtpdFdlYlZpZXdSdW5KYXZhU2NyaXB0UHJvbXB0KFdlYktpdFdlYlZpZXcqIHdlYlZpZXcs
IGNvbnN0IENTdHJpbmcmIG1lc3NhZ2UsIGNvbnN0IENTdHJpbmcmIGRlZmF1bHRUZXh0LCBGdW5j
dGlvbjx2b2lkKGNvbnN0IFN0cmluZyYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIFdl
YktpdFNjcmlwdERpYWxvZyBkaWFsb2coV0VCS0lUX1NDUklQVF9ESUFMT0dfUFJPTVBULCBtZXNz
YWdlLCBkZWZhdWx0VGV4dCk7Ci0gICAgU2V0Rm9yU2NvcGU8V2ViS2l0U2NyaXB0RGlhbG9nKj4g
Y2hhbmdlKHdlYlZpZXctPnByaXYtPmN1cnJlbnRTY3JpcHREaWFsb2csICZkaWFsb2cpOworICAg
IHdlYlZpZXctPnByaXYtPmN1cnJlbnRTY3JpcHREaWFsb2cgPSB3ZWJraXRTY3JpcHREaWFsb2dD
cmVhdGUoV0VCS0lUX1NDUklQVF9ESUFMT0dfUFJPTVBULCBtZXNzYWdlLCBkZWZhdWx0VGV4dCwg
W3dlYlZpZXcsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcild
KGJvb2wsIGNvbnN0IFN0cmluZyYgcmVzdWx0KSB7CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVy
KHJlc3VsdCk7CisgICAgICAgIHdlYlZpZXctPnByaXYtPmN1cnJlbnRTY3JpcHREaWFsb2cgPSBu
dWxscHRyOworICAgIH0pOwogICAgIGdib29sZWFuIHJldHVyblZhbHVlOwotICAgIGdfc2lnbmFs
X2VtaXQod2ViVmlldywgc2lnbmFsc1tTQ1JJUFRfRElBTE9HXSwgMCwgJmRpYWxvZywgJnJldHVy
blZhbHVlKTsKLSAgICByZXR1cm4gZGlhbG9nLnRleHQ7CisgICAgZ19zaWduYWxfZW1pdCh3ZWJW
aWV3LCBzaWduYWxzW1NDUklQVF9ESUFMT0ddLCAwLCB3ZWJWaWV3LT5wcml2LT5jdXJyZW50U2Ny
aXB0RGlhbG9nLCAmcmV0dXJuVmFsdWUpOworICAgIHdlYmtpdF9zY3JpcHRfZGlhbG9nX3VucmVm
KHdlYlZpZXctPnByaXYtPmN1cnJlbnRTY3JpcHREaWFsb2cpOwogfQogCi1ib29sIHdlYmtpdFdl
YlZpZXdSdW5KYXZhU2NyaXB0QmVmb3JlVW5sb2FkQ29uZmlybShXZWJLaXRXZWJWaWV3KiB3ZWJW
aWV3LCBjb25zdCBDU3RyaW5nJiBtZXNzYWdlKQordm9pZCB3ZWJraXRXZWJWaWV3UnVuSmF2YVNj
cmlwdEJlZm9yZVVubG9hZENvbmZpcm0oV2ViS2l0V2ViVmlldyogd2ViVmlldywgY29uc3QgQ1N0
cmluZyYgbWVzc2FnZSwgRnVuY3Rpb248dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikK
IHsKLSAgICBXZWJLaXRTY3JpcHREaWFsb2cgZGlhbG9nKFdFQktJVF9TQ1JJUFRfRElBTE9HX0JF
Rk9SRV9VTkxPQURfQ09ORklSTSwgbWVzc2FnZSk7Ci0gICAgU2V0Rm9yU2NvcGU8V2ViS2l0U2Ny
aXB0RGlhbG9nKj4gY2hhbmdlKHdlYlZpZXctPnByaXYtPmN1cnJlbnRTY3JpcHREaWFsb2csICZk
aWFsb2cpOworICAgIHdlYlZpZXctPnByaXYtPmN1cnJlbnRTY3JpcHREaWFsb2cgPSB3ZWJraXRT
Y3JpcHREaWFsb2dDcmVhdGUoV0VCS0lUX1NDUklQVF9ESUFMT0dfQkVGT1JFX1VOTE9BRF9DT05G
SVJNLCBtZXNzYWdlLCB7IH0sIFt3ZWJWaWV3LCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpXShib29sIHJlc3VsdCwgY29uc3QgU3RyaW5nJikgeworICAgICAg
ICBjb21wbGV0aW9uSGFuZGxlcihyZXN1bHQpOworICAgICAgICB3ZWJWaWV3LT5wcml2LT5jdXJy
ZW50U2NyaXB0RGlhbG9nID0gbnVsbHB0cjsKKyAgICB9KTsKICAgICBnYm9vbGVhbiByZXR1cm5W
YWx1ZTsKLSAgICBnX3NpZ25hbF9lbWl0KHdlYlZpZXcsIHNpZ25hbHNbU0NSSVBUX0RJQUxPR10s
IDAsICZkaWFsb2csICZyZXR1cm5WYWx1ZSk7Ci0gICAgcmV0dXJuIGRpYWxvZy5jb25maXJtZWQ7
CisgICAgZ19zaWduYWxfZW1pdCh3ZWJWaWV3LCBzaWduYWxzW1NDUklQVF9ESUFMT0ddLCAwLCB3
ZWJWaWV3LT5wcml2LT5jdXJyZW50U2NyaXB0RGlhbG9nLCAmcmV0dXJuVmFsdWUpOworICAgIHdl
YmtpdF9zY3JpcHRfZGlhbG9nX3VucmVmKHdlYlZpZXctPnByaXYtPmN1cnJlbnRTY3JpcHREaWFs
b2cpOwogfQogCiBib29sIHdlYmtpdFdlYlZpZXdJc1Nob3dpbmdTY3JpcHREaWFsb2coV2ViS2l0
V2ViVmlldyogd2ViVmlldykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9nbGliL1dlYktpdFdlYlZpZXdQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvZ2xpYi9XZWJLaXRXZWJWaWV3UHJpdmF0ZS5oCmluZGV4IDUxZWUzYjBiMmM2Li4xZTU5OWZj
NjVmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0
V2ViVmlld1ByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9X
ZWJLaXRXZWJWaWV3UHJpdmF0ZS5oCkBAIC01MiwxMCArNTIsMTAgQEAgV2ViS2l0OjpXZWJQYWdl
UHJveHkqIHdlYmtpdFdlYlZpZXdDcmVhdGVOZXdQYWdlKFdlYktpdFdlYlZpZXcqLCBjb25zdCBX
ZWJDb3JlOjoKIHZvaWQgd2Via2l0V2ViVmlld1JlYWR5VG9TaG93UGFnZShXZWJLaXRXZWJWaWV3
Kik7CiB2b2lkIHdlYmtpdFdlYlZpZXdSdW5Bc01vZGFsKFdlYktpdFdlYlZpZXcqKTsKIHZvaWQg
d2Via2l0V2ViVmlld0Nsb3NlUGFnZShXZWJLaXRXZWJWaWV3Kik7Ci12b2lkIHdlYmtpdFdlYlZp
ZXdSdW5KYXZhU2NyaXB0QWxlcnQoV2ViS2l0V2ViVmlldyosIGNvbnN0IENTdHJpbmcmIG1lc3Nh
Z2UpOwotYm9vbCB3ZWJraXRXZWJWaWV3UnVuSmF2YVNjcmlwdENvbmZpcm0oV2ViS2l0V2ViVmll
dyosIGNvbnN0IENTdHJpbmcmIG1lc3NhZ2UpOwotQ1N0cmluZyB3ZWJraXRXZWJWaWV3UnVuSmF2
YVNjcmlwdFByb21wdChXZWJLaXRXZWJWaWV3KiwgY29uc3QgQ1N0cmluZyYgbWVzc2FnZSwgY29u
c3QgQ1N0cmluZyYgZGVmYXVsdFRleHQpOwotYm9vbCB3ZWJraXRXZWJWaWV3UnVuSmF2YVNjcmlw
dEJlZm9yZVVubG9hZENvbmZpcm0oV2ViS2l0V2ViVmlldyosIGNvbnN0IENTdHJpbmcmIG1lc3Nh
Z2UpOwordm9pZCB3ZWJraXRXZWJWaWV3UnVuSmF2YVNjcmlwdEFsZXJ0KFdlYktpdFdlYlZpZXcq
LCBjb25zdCBDU3RyaW5nJiBtZXNzYWdlLCBGdW5jdGlvbjx2b2lkKCk+JiYgY29tcGxldGlvbkhh
bmRsZXIpOwordm9pZCB3ZWJraXRXZWJWaWV3UnVuSmF2YVNjcmlwdENvbmZpcm0oV2ViS2l0V2Vi
VmlldyosIGNvbnN0IENTdHJpbmcmIG1lc3NhZ2UsIEZ1bmN0aW9uPHZvaWQoYm9vbCk+JiYgY29t
cGxldGlvbkhhbmRsZXIpOwordm9pZCB3ZWJraXRXZWJWaWV3UnVuSmF2YVNjcmlwdFByb21wdChX
ZWJLaXRXZWJWaWV3KiwgY29uc3QgQ1N0cmluZyYgbWVzc2FnZSwgY29uc3QgQ1N0cmluZyYgZGVm
YXVsdFRleHQsIEZ1bmN0aW9uPHZvaWQoY29uc3QgU3RyaW5nJik+JiYgY29tcGxldGlvbkhhbmRs
ZXIpOwordm9pZCB3ZWJraXRXZWJWaWV3UnVuSmF2YVNjcmlwdEJlZm9yZVVubG9hZENvbmZpcm0o
V2ViS2l0V2ViVmlldyosIGNvbnN0IENTdHJpbmcmIG1lc3NhZ2UsIEZ1bmN0aW9uPHZvaWQoYm9v
bCk+JiYgY29tcGxldGlvbkhhbmRsZXIpOwogYm9vbCB3ZWJraXRXZWJWaWV3SXNTaG93aW5nU2Ny
aXB0RGlhbG9nKFdlYktpdFdlYlZpZXcqKTsKIGJvb2wgd2Via2l0V2ViVmlld0lzU2NyaXB0RGlh
bG9nUnVubmluZyhXZWJLaXRXZWJWaWV3KiwgV2ViS2l0U2NyaXB0RGlhbG9nKik7CiBTdHJpbmcg
d2Via2l0V2ViVmlld0dldEN1cnJlbnRTY3JpcHREaWFsb2dNZXNzYWdlKFdlYktpdFdlYlZpZXcq
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0U2Ny
aXB0RGlhbG9nLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFNjcmlw
dERpYWxvZy5oCmluZGV4IDcxMDk1YmVlZDk4Li42ZDAzZmJhMmRhYyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRTY3JpcHREaWFsb2cuaAorKysgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFNjcmlwdERpYWxvZy5oCkBAIC01
Niw2ICs1NiwxMiBAQCB0eXBlZGVmIGVudW0gewogV0VCS0lUX0FQSSBHVHlwZQogd2Via2l0X3Nj
cmlwdF9kaWFsb2dfZ2V0X3R5cGUgICAgICAgICAgICAgICAgKHZvaWQpOwogCitXRUJLSVRfQVBJ
IFdlYktpdFNjcmlwdERpYWxvZyAqCit3ZWJraXRfc2NyaXB0X2RpYWxvZ19yZWYgICAgICAgICAg
ICAgICAgICAgICAoV2ViS2l0U2NyaXB0RGlhbG9nICpkaWFsb2cpOworCitXRUJLSVRfQVBJIHZv
aWQKK3dlYmtpdF9zY3JpcHRfZGlhbG9nX3VucmVmICAgICAgICAgICAgICAgICAgIChXZWJLaXRT
Y3JpcHREaWFsb2cgKmRpYWxvZyk7CisKIFdFQktJVF9BUEkgV2ViS2l0U2NyaXB0RGlhbG9nVHlw
ZQogd2Via2l0X3NjcmlwdF9kaWFsb2dfZ2V0X2RpYWxvZ190eXBlICAgICAgICAgKFdlYktpdFNj
cmlwdERpYWxvZyAqZGlhbG9nKTsKIApAQCAtNzMsNiArNzksOSBAQCBXRUJLSVRfQVBJIHZvaWQK
IHdlYmtpdF9zY3JpcHRfZGlhbG9nX3Byb21wdF9zZXRfdGV4dCAgICAgICAgIChXZWJLaXRTY3Jp
cHREaWFsb2cgKmRpYWxvZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBnY2hhciAgICAgICAgKnRleHQpOwogCitXRUJLSVRfQVBJIHZvaWQKK3dl
YmtpdF9zY3JpcHRfZGlhbG9nX2Nsb3NlICAgICAgICAgICAgICAgICAgIChXZWJLaXRTY3JpcHRE
aWFsb2cgKmRpYWxvZyk7CisKIEdfRU5EX0RFQ0xTCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRTY3JpcHREaWFsb2dHdGsuY3BwIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRTY3JpcHREaWFsb2dHdGsuY3Bw
CmluZGV4IGRhNDA0ODI5MmVkLi40OGIxMzE0MTkyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRTY3JpcHREaWFsb2dHdGsuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0U2NyaXB0RGlhbG9nR3RrLmNwcApAQCAt
MjcsNiArMjcsMjkgQEAKICNpbmNsdWRlIDxndGsvZ3RrLmg+CiAjaW5jbHVkZSA8d3RmL2dsaWIv
R1VuaXF1ZVB0ci5oPgogCitzdGF0aWMgdm9pZCBzY3JpcHREaWFsb2dSZXNwb25zZUNhbGxiYWNr
KEd0a1dpZGdldCogZGlhbG9nLCBpbnQgcmVzcG9uc2VJRCwgV2ViS2l0U2NyaXB0RGlhbG9nKiBz
Y3JpcHREaWFsb2cpCit7CisgICAgc3dpdGNoIChzY3JpcHREaWFsb2ctPnR5cGUpIHsKKyAgICBj
YXNlIFdFQktJVF9TQ1JJUFRfRElBTE9HX0FMRVJUOgorICAgICAgICBicmVhazsKKyAgICBjYXNl
IFdFQktJVF9TQ1JJUFRfRElBTE9HX0NPTkZJUk06CisgICAgY2FzZSBXRUJLSVRfU0NSSVBUX0RJ
QUxPR19CRUZPUkVfVU5MT0FEX0NPTkZJUk06CisgICAgICAgIHNjcmlwdERpYWxvZy0+Y29uZmly
bWVkID0gcmVzcG9uc2VJRCA9PSBHVEtfUkVTUE9OU0VfT0s7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgV0VCS0lUX1NDUklQVF9ESUFMT0dfUFJPTVBUOgorICAgICAgICBpZiAocmVzcG9uc2VJ
RCA9PSBHVEtfUkVTUE9OU0VfT0spIHsKKyAgICAgICAgICAgIGlmIChhdXRvKiBlbnRyeSA9IGdf
b2JqZWN0X2dldF9kYXRhKEdfT0JKRUNUKGRpYWxvZyksICJ3ay1zY3JpcHQtZGlhbG9nLWVudHJ5
IikpCisgICAgICAgICAgICAgICAgc2NyaXB0RGlhbG9nLT50ZXh0ID0gZ3RrX2VudHJ5X2dldF90
ZXh0KEdUS19FTlRSWShlbnRyeSkpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0K
KworICAgIHNjcmlwdERpYWxvZy0+bmF0aXZlRGlhbG9nID0gbnVsbHB0cjsKKyAgICB3ZWJraXRf
c2NyaXB0X2RpYWxvZ19jbG9zZShzY3JpcHREaWFsb2cpOworICAgIHdlYmtpdF9zY3JpcHRfZGlh
bG9nX3VucmVmKHNjcmlwdERpYWxvZyk7CisgICAgZ3RrX3dpZGdldF9kZXN0cm95KGRpYWxvZyk7
Cit9CisKIHN0YXRpYyBHdGtXaWRnZXQqIHdlYmtpdFdlYlZpZXdDcmVhdGVKYXZhU2NyaXB0RGlh
bG9nKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIEd0a01lc3NhZ2VUeXBlIHR5cGUsIEd0a0J1dHRv
bnNUeXBlIGJ1dHRvbnMsIGludCBkZWZhdWx0UmVzcG9uc2UsIGNvbnN0IGNoYXIqIHByaW1hcnlU
ZXh0LCBjb25zdCBjaGFyKiBzZWNvbmRhcnlUZXh0ID0gbnVsbHB0cikKIHsKICAgICBHdGtXaWRn
ZXQqIHBhcmVudCA9IGd0a193aWRnZXRfZ2V0X3RvcGxldmVsKEdUS19XSURHRVQod2ViVmlldykp
OwpAQCAtNDksNDMgKzcyLDMyIEBAIHZvaWQgd2Via2l0U2NyaXB0RGlhbG9nUnVuKFdlYktpdFNj
cmlwdERpYWxvZyogc2NyaXB0RGlhbG9nLCBXZWJLaXRXZWJWaWV3KiB3ZWJWCiAgICAgc3dpdGNo
IChzY3JpcHREaWFsb2ctPnR5cGUpIHsKICAgICBjYXNlIFdFQktJVF9TQ1JJUFRfRElBTE9HX0FM
RVJUOgogICAgICAgICBkaWFsb2cgPSB3ZWJraXRXZWJWaWV3Q3JlYXRlSmF2YVNjcmlwdERpYWxv
Zyh3ZWJWaWV3LCBHVEtfTUVTU0FHRV9XQVJOSU5HLCBHVEtfQlVUVE9OU19DTE9TRSwgR1RLX1JF
U1BPTlNFX0NMT1NFLCBzY3JpcHREaWFsb2ctPm1lc3NhZ2UuZGF0YSgpKTsKLSAgICAgICAgc2Ny
aXB0RGlhbG9nLT5uYXRpdmVEaWFsb2cgPSBkaWFsb2c7Ci0gICAgICAgIGd0a19kaWFsb2dfcnVu
KEdUS19ESUFMT0coZGlhbG9nKSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgV0VCS0lUX1ND
UklQVF9ESUFMT0dfQ09ORklSTToKICAgICAgICAgZGlhbG9nID0gd2Via2l0V2ViVmlld0NyZWF0
ZUphdmFTY3JpcHREaWFsb2cod2ViVmlldywgR1RLX01FU1NBR0VfUVVFU1RJT04sIEdUS19CVVRU
T05TX09LX0NBTkNFTCwgR1RLX1JFU1BPTlNFX09LLCBzY3JpcHREaWFsb2ctPm1lc3NhZ2UuZGF0
YSgpKTsKLSAgICAgICAgc2NyaXB0RGlhbG9nLT5uYXRpdmVEaWFsb2cgPSBkaWFsb2c7Ci0gICAg
ICAgIHNjcmlwdERpYWxvZy0+Y29uZmlybWVkID0gZ3RrX2RpYWxvZ19ydW4oR1RLX0RJQUxPRyhk
aWFsb2cpKSA9PSBHVEtfUkVTUE9OU0VfT0s7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgV0VC
S0lUX1NDUklQVF9ESUFMT0dfUFJPTVBUOiB7CiAgICAgICAgIGRpYWxvZyA9IHdlYmtpdFdlYlZp
ZXdDcmVhdGVKYXZhU2NyaXB0RGlhbG9nKHdlYlZpZXcsIEdUS19NRVNTQUdFX1FVRVNUSU9OLCBH
VEtfQlVUVE9OU19PS19DQU5DRUwsIEdUS19SRVNQT05TRV9PSywgc2NyaXB0RGlhbG9nLT5tZXNz
YWdlLmRhdGEoKSk7Ci0gICAgICAgIHNjcmlwdERpYWxvZy0+bmF0aXZlRGlhbG9nID0gZGlhbG9n
OwogICAgICAgICBHdGtXaWRnZXQqIGVudHJ5ID0gZ3RrX2VudHJ5X25ldygpOworICAgICAgICBn
X29iamVjdF9zZXRfZGF0YShHX09CSkVDVChkaWFsb2cpLCAid2stc2NyaXB0LWRpYWxvZy1lbnRy
eSIsIGVudHJ5KTsKICAgICAgICAgZ3RrX2VudHJ5X3NldF90ZXh0KEdUS19FTlRSWShlbnRyeSks
IHNjcmlwdERpYWxvZy0+ZGVmYXVsdFRleHQuZGF0YSgpKTsKICAgICAgICAgZ3RrX2NvbnRhaW5l
cl9hZGQoR1RLX0NPTlRBSU5FUihndGtfZGlhbG9nX2dldF9jb250ZW50X2FyZWEoR1RLX0RJQUxP
RyhkaWFsb2cpKSksIGVudHJ5KTsKICAgICAgICAgZ3RrX2VudHJ5X3NldF9hY3RpdmF0ZXNfZGVm
YXVsdChHVEtfRU5UUlkoZW50cnkpLCBUUlVFKTsKICAgICAgICAgZ3RrX3dpZGdldF9zaG93KGVu
dHJ5KTsKLSAgICAgICAgaWYgKGd0a19kaWFsb2dfcnVuKEdUS19ESUFMT0coZGlhbG9nKSkgPT0g
R1RLX1JFU1BPTlNFX09LKQotICAgICAgICAgICAgc2NyaXB0RGlhbG9nLT50ZXh0ID0gZ3RrX2Vu
dHJ5X2dldF90ZXh0KEdUS19FTlRSWShlbnRyeSkpOwogICAgICAgICBicmVhazsKICAgICB9CiAg
ICAgY2FzZSBXRUJLSVRfU0NSSVBUX0RJQUxPR19CRUZPUkVfVU5MT0FEX0NPTkZJUk06CiAgICAg
ICAgIGRpYWxvZyA9IHdlYmtpdFdlYlZpZXdDcmVhdGVKYXZhU2NyaXB0RGlhbG9nKHdlYlZpZXcs
IEdUS19NRVNTQUdFX1FVRVNUSU9OLCBHVEtfQlVUVE9OU19OT05FLCBHVEtfUkVTUE9OU0VfT0ss
CiAgICAgICAgICAgICBfKCJBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gbGVhdmUgdGhpcyBwYWdl
PyIpLCBzY3JpcHREaWFsb2ctPm1lc3NhZ2UuZGF0YSgpKTsKLSAgICAgICAgc2NyaXB0RGlhbG9n
LT5uYXRpdmVEaWFsb2cgPSBkaWFsb2c7CiAgICAgICAgIGd0a19kaWFsb2dfYWRkX2J1dHRvbnMo
R1RLX0RJQUxPRyhkaWFsb2cpLCBfKCJTdGF5IG9uIFBhZ2UiKSwgR1RLX1JFU1BPTlNFX0NMT1NF
LCBfKCJMZWF2ZSBQYWdlIiksIEdUS19SRVNQT05TRV9PSywgbnVsbHB0cik7CiAgICAgICAgIGd0
a19kaWFsb2dfc2V0X2RlZmF1bHRfcmVzcG9uc2UoR1RLX0RJQUxPRyhkaWFsb2cpLCBHVEtfUkVT
UE9OU0VfT0spOwotICAgICAgICBzY3JpcHREaWFsb2ctPmNvbmZpcm1lZCA9IGd0a19kaWFsb2df
cnVuKEdUS19ESUFMT0coZGlhbG9nKSkgPT0gR1RLX1JFU1BPTlNFX09LOwogICAgICAgICBicmVh
azsKICAgICB9CiAKLSAgICBndGtfd2lkZ2V0X2Rlc3Ryb3koZGlhbG9nKTsKLSAgICBzY3JpcHRE
aWFsb2ctPm5hdGl2ZURpYWxvZyA9IG51bGxwdHI7Ci19Ci0KLWJvb2wgd2Via2l0U2NyaXB0RGlh
bG9nSXNSdW5uaW5nKFdlYktpdFNjcmlwdERpYWxvZyogc2NyaXB0RGlhbG9nKQotewotICAgIHJl
dHVybiAhIXNjcmlwdERpYWxvZy0+bmF0aXZlRGlhbG9nOworICAgIEFTU0VSVChkaWFsb2cpOwor
ICAgIHNjcmlwdERpYWxvZy0+bmF0aXZlRGlhbG9nID0gZGlhbG9nOworICAgIGdfc2lnbmFsX2Nv
bm5lY3QoZGlhbG9nLCAicmVzcG9uc2UiLCBHX0NBTExCQUNLKHNjcmlwdERpYWxvZ1Jlc3BvbnNl
Q2FsbGJhY2spLCB3ZWJraXRfc2NyaXB0X2RpYWxvZ19yZWYoc2NyaXB0RGlhbG9nKSk7CisgICAg
Z3RrX3dpZGdldF9zaG93KGRpYWxvZyk7CiB9CiAKIHZvaWQgd2Via2l0U2NyaXB0RGlhbG9nQWNj
ZXB0KFdlYktpdFNjcmlwdERpYWxvZyogc2NyaXB0RGlhbG9nKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstNC4wLXNlY3Rpb25zLnR4
dCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLTQuMC1z
ZWN0aW9ucy50eHQKaW5kZXggNTU2MDVkYjQwNDMuLjg3NGM0M2EwMGFmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay00LjAtc2VjdGlv
bnMudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQy
Z3RrLTQuMC1zZWN0aW9ucy50eHQKQEAgLTIzMSw2ICsyMzEsNyBAQCB3ZWJraXRfd2ViX3ZpZXdf
aXNfZWRpdGFibGUKIHdlYmtpdF93ZWJfdmlld19nZXRfZWRpdG9yX3N0YXRlCiB3ZWJraXRfd2Vi
X3ZpZXdfZ2V0X3Nlc3Npb25fc3RhdGUKIHdlYmtpdF93ZWJfdmlld19yZXN0b3JlX3Nlc3Npb25f
c3RhdGUKK3dlYmtpdF93ZWJfdmlld19nZXRfbWFpbl9yZXNvdXJjZQogCiA8U1VCU0VDVElPTiBX
ZWJLaXRKYXZhc2NyaXB0UmVzdWx0PgogV2ViS2l0SmF2YXNjcmlwdFJlc3VsdApAQCAtMjQzLDEy
ICsyNDQsMTQgQEAgd2Via2l0X2phdmFzY3JpcHRfcmVzdWx0X2dldF9qc192YWx1ZQogPFNVQlNF
Q1RJT04gV2ViS2l0U2NyaXB0RGlhbG9nPgogV2ViS2l0U2NyaXB0RGlhbG9nCiBXZWJLaXRTY3Jp
cHREaWFsb2dUeXBlCit3ZWJraXRfc2NyaXB0X2RpYWxvZ19yZWYKK3dlYmtpdF9zY3JpcHRfZGlh
bG9nX3VucmVmCiB3ZWJraXRfc2NyaXB0X2RpYWxvZ19nZXRfZGlhbG9nX3R5cGUKIHdlYmtpdF9z
Y3JpcHRfZGlhbG9nX2dldF9tZXNzYWdlCiB3ZWJraXRfc2NyaXB0X2RpYWxvZ19jb25maXJtX3Nl
dF9jb25maXJtZWQKIHdlYmtpdF9zY3JpcHRfZGlhbG9nX3Byb21wdF9nZXRfZGVmYXVsdF90ZXh0
CiB3ZWJraXRfc2NyaXB0X2RpYWxvZ19wcm9tcHRfc2V0X3RleHQKLXdlYmtpdF93ZWJfdmlld19n
ZXRfbWFpbl9yZXNvdXJjZQord2Via2l0X3NjcmlwdF9kaWFsb2dfY2xvc2UKIAogPFNVQlNFQ1RJ
T04gV2ViS2l0V2ViVmlld1Nlc3Npb25TdGF0ZT4KIFdlYktpdFdlYlZpZXdTZXNzaW9uU3RhdGUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQy
Z3RrLWRvY3Muc2dtbCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJr
aXQyZ3RrLWRvY3Muc2dtbAppbmRleCAzMGQ5N2Q2NTViYi4uYmJmOTY3ZTQwNjYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLWRvY3Mu
c2dtbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0
ay1kb2NzLnNnbWwKQEAgLTEzNyw1ICsxMzcsMTAgQEAKICAgICA8eGk6aW5jbHVkZSBocmVmPSJ4
bWwvYXBpLWluZGV4LTIuMjIueG1sIj48eGk6ZmFsbGJhY2sgLz48L3hpOmluY2x1ZGU+CiAgIDwv
aW5kZXg+CiAKKyAgPGluZGV4IGlkPSJhcGktaW5kZXgtMi0yNCIgcm9sZT0iMi4yNCI+CisgICAg
PHRpdGxlPkluZGV4IG9mIG5ldyBzeW1ib2xzIGluIDIuMjQ8L3RpdGxlPgorICAgIDx4aTppbmNs
dWRlIGhyZWY9InhtbC9hcGktaW5kZXgtMi4yNC54bWwiPjx4aTpmYWxsYmFjayAvPjwveGk6aW5j
bHVkZT4KKyAgPC9pbmRleD4KKwogICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvYW5ub3RhdGlvbi1n
bG9zc2FyeS54bWwiPjx4aTpmYWxsYmFjayAvPjwveGk6aW5jbHVkZT4KIDwvYm9vaz4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvV2ViS2l0U2NyaXB0RGlhbG9n
LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1dlYktpdFNjcmlwdERpYWxvZy5o
CmluZGV4IGY1MGRhYmUyNjMzLi5jOTYwOTE2MTk2NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL3dwZS9XZWJLaXRTY3JpcHREaWFsb2cuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1dlYktpdFNjcmlwdERpYWxvZy5oCkBAIC01Niw2ICs1Niwx
MiBAQCB0eXBlZGVmIGVudW0gewogV0VCS0lUX0FQSSBHVHlwZQogd2Via2l0X3NjcmlwdF9kaWFs
b2dfZ2V0X3R5cGUgICAgICAgICAgICAgICAgKHZvaWQpOwogCitXRUJLSVRfQVBJIFdlYktpdFNj
cmlwdERpYWxvZyAqCit3ZWJraXRfc2NyaXB0X2RpYWxvZ19yZWYgICAgICAgICAgICAgICAgICAg
ICAoV2ViS2l0U2NyaXB0RGlhbG9nICpkaWFsb2cpOworCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtp
dF9zY3JpcHRfZGlhbG9nX3VucmVmICAgICAgICAgICAgICAgICAgIChXZWJLaXRTY3JpcHREaWFs
b2cgKmRpYWxvZyk7CisKIFdFQktJVF9BUEkgV2ViS2l0U2NyaXB0RGlhbG9nVHlwZQogd2Via2l0
X3NjcmlwdF9kaWFsb2dfZ2V0X2RpYWxvZ190eXBlICAgICAgICAgKFdlYktpdFNjcmlwdERpYWxv
ZyAqZGlhbG9nKTsKIApAQCAtNzMsNiArNzksOSBAQCBXRUJLSVRfQVBJIHZvaWQKIHdlYmtpdF9z
Y3JpcHRfZGlhbG9nX3Byb21wdF9zZXRfdGV4dCAgICAgICAgIChXZWJLaXRTY3JpcHREaWFsb2cg
KmRpYWxvZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBnY2hhciAgICAgICAgKnRleHQpOwogCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9zY3Jp
cHRfZGlhbG9nX2Nsb3NlICAgICAgICAgICAgICAgICAgIChXZWJLaXRTY3JpcHREaWFsb2cgKmRp
YWxvZyk7CisKIEdfRU5EX0RFQ0xTCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL3dwZS9XZWJLaXRTY3JpcHREaWFsb2dXUEUuY3BwIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL3dwZS9XZWJLaXRTY3JpcHREaWFsb2dXUEUuY3BwCmluZGV4IDY5
OGEyM2Y3NTYwLi40MjRkYjkxYzU2ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQVBJL3dwZS9XZWJLaXRTY3JpcHREaWFsb2dXUEUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS93cGUvV2ViS2l0U2NyaXB0RGlhbG9nV1BFLmNwcApAQCAtMjYsMTEgKzI2
LDYgQEAgdm9pZCB3ZWJraXRTY3JpcHREaWFsb2dSdW4oV2ViS2l0U2NyaXB0RGlhbG9nKiwgV2Vi
S2l0V2ViVmlldyopCiB7CiB9CiAKLWJvb2wgd2Via2l0U2NyaXB0RGlhbG9nSXNSdW5uaW5nKFdl
YktpdFNjcmlwdERpYWxvZyopCi17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCiB2b2lkIHdlYmtp
dFNjcmlwdERpYWxvZ0FjY2VwdChXZWJLaXRTY3JpcHREaWFsb2cqKQogewogfQpkaWZmIC0tZ2l0
IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDgwZTViOGU0ODJjLi42
Mzk5YjhhN2NhMiAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDE4LTA5LTEyICBDYXJsb3MgR2FyY2lhIENhbXBvcyAg
PGNnYXJjaWFAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXVtXUEVdIEFsbG93IHRvIHJ1biBz
Y3JpcHQgZGlhbG9ncyBhc3luY2hyb25vdXNseSBpbiB0aGUgVUkgcHJvY2VzcworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg5NTQ0CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIHRlc3QgY2FzZXMgZm9y
IHRoZSBuZXcgQVBJLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHTGli
L1Rlc3RVSUNsaWVudC5jcHA6CisgICAgICAgICh0ZXN0V2ViVmlld0phdmFTY3JpcHREaWFsb2dz
KToKKwogMjAxOC0wOS0wOSAgQ29tbWl0IFF1ZXVlICA8Y29tbWl0LXF1ZXVlQHdlYmtpdC5vcmc+
CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjIzNTgzMi4KZGlmZiAtLWdpdCBh
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R0xpYi9UZXN0VUlDbGllbnQuY3BwIGIv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHTGliL1Rlc3RVSUNsaWVudC5jcHAKaW5k
ZXggNjkzOTEwMmZkMzEuLjY2MTEzNzczZTNiIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdEdMaWIvVGVzdFVJQ2xpZW50LmNwcAorKysgYi9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdEdMaWIvVGVzdFVJQ2xpZW50LmNwcApAQCAtMjAsNiArMjAsNyBA
QAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIldlYlZpZXdUZXN0LmgiCiAjaW5jbHVk
ZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvUnVuTG9vcC5oPgogI2luY2x1ZGUgPHd0
Zi9nbGliL0dSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CiAKQEAg
LTE1OCw3ICsxNTksMTUgQEAgcHVibGljOgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
IAotICAgICAgICBnX21haW5fbG9vcF9xdWl0KG1fbWFpbkxvb3ApOworICAgICAgICBpZiAobV9k
ZWxheWVkU2NyaXB0RGlhbG9ncykgeworICAgICAgICAgICAgd2Via2l0X3NjcmlwdF9kaWFsb2df
cmVmKGRpYWxvZyk7CisgICAgICAgICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3RoaXMs
IGRpYWxvZ10geworICAgICAgICAgICAgICAgIHdlYmtpdF9zY3JpcHRfZGlhbG9nX2Nsb3NlKGRp
YWxvZyk7CisgICAgICAgICAgICAgICAgd2Via2l0X3NjcmlwdF9kaWFsb2dfdW5yZWYoZGlhbG9n
KTsKKyAgICAgICAgICAgICAgICBnX21haW5fbG9vcF9xdWl0KG1fbWFpbkxvb3ApOworICAgICAg
ICAgICAgfSk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgZ19tYWluX2xvb3BfcXVpdCht
X21haW5Mb29wKTsKICAgICB9CiAKICAgICB2b2lkIHNjcmlwdENvbmZpcm0oV2ViS2l0U2NyaXB0
RGlhbG9nKiBkaWFsb2cpCkBAIC0zNjUsNiArMzc0LDcgQEAgcHVibGljOgogICAgIFZlY3RvcjxX
ZWJWaWV3RXZlbnRzPiBtX3dlYlZpZXdFdmVudHM7CiAgICAgV2ViS2l0U2NyaXB0RGlhbG9nVHlw
ZSBtX3NjcmlwdERpYWxvZ1R5cGU7CiAgICAgYm9vbCBtX3NjcmlwdERpYWxvZ0NvbmZpcm1lZDsK
KyAgICBib29sIG1fZGVsYXllZFNjcmlwdERpYWxvZ3MgeyBmYWxzZSB9OwogICAgIGJvb2wgbV9h
bGxvd1Blcm1pc3Npb25SZXF1ZXN0czsKICAgICBnYm9vbGVhbiBtX3ZlcmlmeU1lZGlhVHlwZXM7
CiAgICAgZ2Jvb2xlYW4gbV9leHBlY3RlZEF1ZGlvTWVkaWE7CkBAIC01NTgsMjkgKzU2OCwzNSBA
QCBzdGF0aWMgdm9pZCB0ZXN0V2ViVmlld0phdmFTY3JpcHREaWFsb2dzKFVJQ2xpZW50VGVzdCog
dGVzdCwgZ2NvbnN0cG9pbnRlcikKICAgICAgICAgIjxodG1sPjxib2R5IG9uYmVmb3JldW5sb2Fk
PVwicmV0dXJuIGJlZm9yZVVubG9hZEhhbmRsZXIoKTtcIj48aW5wdXQgaWQ9XCJ0ZXN0SW5wdXRc
IiB0eXBlPVwidGV4dFwiPjwvaW5wdXQ+PHNjcmlwdD5mdW5jdGlvbiBiZWZvcmVVbmxvYWRIYW5k
bGVyKCkgeyByZXR1cm4gXCIlc1wiOyB9PC9zY3JpcHQ+PC9ib2R5PjwvaHRtbD4iOwogI2VuZGlm
CiAKLSAgICB0ZXN0LT5tX3NjcmlwdERpYWxvZ1R5cGUgPSBXRUJLSVRfU0NSSVBUX0RJQUxPR19B
TEVSVDsKLSAgICBHVW5pcXVlUHRyPGNoYXI+IGFsZXJ0RGlhbG9nTWVzc2FnZShnX3N0cmR1cF9w
cmludGYoanNBbGVydEZvcm1hdCwga0FsZXJ0RGlhbG9nTWVzc2FnZSkpOwotICAgIEdVbmlxdWVQ
dHI8Y2hhcj4gYWxlcnRIVE1MKGdfc3RyZHVwX3ByaW50ZihodG1sT25Mb2FkRm9ybWF0LCBhbGVy
dERpYWxvZ01lc3NhZ2UuZ2V0KCkpKTsKLSAgICB0ZXN0LT5sb2FkSHRtbChhbGVydEhUTUwuZ2V0
KCksIDApOwotICAgIHRlc3QtPndhaXRVbnRpbE1haW5Mb29wRmluaXNoZXMoKTsKLSAgICB3ZWJr
aXRfd2ViX3ZpZXdfc3RvcF9sb2FkaW5nKHRlc3QtPm1fd2ViVmlldyk7Ci0gICAgdGVzdC0+d2Fp
dFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0KLSAgICB0ZXN0LT5tX3NjcmlwdERpYWxvZ1R5cGUgPSBX
RUJLSVRfU0NSSVBUX0RJQUxPR19DT05GSVJNOwotICAgIEdVbmlxdWVQdHI8Y2hhcj4gY29uZmly
bURpYWxvZ01lc3NhZ2UoZ19zdHJkdXBfcHJpbnRmKGpzQ29uZmlybUZvcm1hdCwga0NvbmZpcm1E
aWFsb2dNZXNzYWdlKSk7Ci0gICAgR1VuaXF1ZVB0cjxjaGFyPiBjb25maXJtSFRNTChnX3N0cmR1
cF9wcmludGYoaHRtbE9uTG9hZEZvcm1hdCwgY29uZmlybURpYWxvZ01lc3NhZ2UuZ2V0KCkpKTsK
LSAgICB0ZXN0LT5sb2FkSHRtbChjb25maXJtSFRNTC5nZXQoKSwgMCk7Ci0gICAgdGVzdC0+d2Fp
dFVudGlsTWFpbkxvb3BGaW5pc2hlcygpOwotICAgIHdlYmtpdF93ZWJfdmlld19zdG9wX2xvYWRp
bmcodGVzdC0+bV93ZWJWaWV3KTsKLSAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsK
KyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDw9IDE7ICsraSkgeworICAgICAgICB0ZXN0LT5t
X2RlbGF5ZWRTY3JpcHREaWFsb2dzID0gISFpOworCisgICAgICAgIHRlc3QtPm1fc2NyaXB0RGlh
bG9nVHlwZSA9IFdFQktJVF9TQ1JJUFRfRElBTE9HX0FMRVJUOworICAgICAgICBHVW5pcXVlUHRy
PGNoYXI+IGFsZXJ0RGlhbG9nTWVzc2FnZShnX3N0cmR1cF9wcmludGYoanNBbGVydEZvcm1hdCwg
a0FsZXJ0RGlhbG9nTWVzc2FnZSkpOworICAgICAgICBHVW5pcXVlUHRyPGNoYXI+IGFsZXJ0SFRN
TChnX3N0cmR1cF9wcmludGYoaHRtbE9uTG9hZEZvcm1hdCwgYWxlcnREaWFsb2dNZXNzYWdlLmdl
dCgpKSk7CisgICAgICAgIHRlc3QtPmxvYWRIdG1sKGFsZXJ0SFRNTC5nZXQoKSwgbnVsbHB0cik7
CisgICAgICAgIHRlc3QtPndhaXRVbnRpbE1haW5Mb29wRmluaXNoZXMoKTsKKyAgICAgICAgd2Vi
a2l0X3dlYl92aWV3X3N0b3BfbG9hZGluZyh0ZXN0LT5tX3dlYlZpZXcpOworICAgICAgICB0ZXN0
LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKworICAgICAgICB0ZXN0LT5tX3NjcmlwdERpYWxv
Z1R5cGUgPSBXRUJLSVRfU0NSSVBUX0RJQUxPR19DT05GSVJNOworICAgICAgICBHVW5pcXVlUHRy
PGNoYXI+IGNvbmZpcm1EaWFsb2dNZXNzYWdlKGdfc3RyZHVwX3ByaW50Zihqc0NvbmZpcm1Gb3Jt
YXQsIGtDb25maXJtRGlhbG9nTWVzc2FnZSkpOworICAgICAgICBHVW5pcXVlUHRyPGNoYXI+IGNv
bmZpcm1IVE1MKGdfc3RyZHVwX3ByaW50ZihodG1sT25Mb2FkRm9ybWF0LCBjb25maXJtRGlhbG9n
TWVzc2FnZS5nZXQoKSkpOworICAgICAgICB0ZXN0LT5sb2FkSHRtbChjb25maXJtSFRNTC5nZXQo
KSwgbnVsbHB0cik7CisgICAgICAgIHRlc3QtPndhaXRVbnRpbE1haW5Mb29wRmluaXNoZXMoKTsK
KyAgICAgICAgd2Via2l0X3dlYl92aWV3X3N0b3BfbG9hZGluZyh0ZXN0LT5tX3dlYlZpZXcpOwor
ICAgICAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKworICAgICAgICB0ZXN0LT5t
X3NjcmlwdERpYWxvZ1R5cGUgPSBXRUJLSVRfU0NSSVBUX0RJQUxPR19QUk9NUFQ7CisgICAgICAg
IEdVbmlxdWVQdHI8Y2hhcj4gcHJvbXB0RGlhbG9nTWVzc2FnZShnX3N0cmR1cF9wcmludGYoanNQ
cm9tcHRGb3JtYXQsIGtQcm9tcHREaWFsb2dNZXNzYWdlKSk7CisgICAgICAgIEdVbmlxdWVQdHI8
Y2hhcj4gcHJvbXB0SFRNTChnX3N0cmR1cF9wcmludGYoaHRtbE9uTG9hZEZvcm1hdCwgcHJvbXB0
RGlhbG9nTWVzc2FnZS5nZXQoKSkpOworICAgICAgICB0ZXN0LT5sb2FkSHRtbChwcm9tcHRIVE1M
LmdldCgpLCBudWxscHRyKTsKKyAgICAgICAgdGVzdC0+d2FpdFVudGlsTWFpbkxvb3BGaW5pc2hl
cygpOworICAgICAgICB3ZWJraXRfd2ViX3ZpZXdfc3RvcF9sb2FkaW5nKHRlc3QtPm1fd2ViVmll
dyk7CisgICAgICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworICAgIH0KIAotICAg
IHRlc3QtPm1fc2NyaXB0RGlhbG9nVHlwZSA9IFdFQktJVF9TQ1JJUFRfRElBTE9HX1BST01QVDsK
LSAgICBHVW5pcXVlUHRyPGNoYXI+IHByb21wdERpYWxvZ01lc3NhZ2UoZ19zdHJkdXBfcHJpbnRm
KGpzUHJvbXB0Rm9ybWF0LCBrUHJvbXB0RGlhbG9nTWVzc2FnZSkpOwotICAgIEdVbmlxdWVQdHI8
Y2hhcj4gcHJvbXB0SFRNTChnX3N0cmR1cF9wcmludGYoaHRtbE9uTG9hZEZvcm1hdCwgcHJvbXB0
RGlhbG9nTWVzc2FnZS5nZXQoKSkpOwotICAgIHRlc3QtPmxvYWRIdG1sKHByb21wdEhUTUwuZ2V0
KCksIDApOwotICAgIHRlc3QtPndhaXRVbnRpbE1haW5Mb29wRmluaXNoZXMoKTsKLSAgICB3ZWJr
aXRfd2ViX3ZpZXdfc3RvcF9sb2FkaW5nKHRlc3QtPm1fd2ViVmlldyk7Ci0gICAgdGVzdC0+d2Fp
dFVudGlsTG9hZEZpbmlzaGVkKCk7CisgICAgdGVzdC0+bV9kZWxheWVkU2NyaXB0RGlhbG9ncyA9
IGZhbHNlOwogCiAgICAgLy8gRklYTUU6IGltcGxlbWVudCBzaW11bGF0ZVVzZXJJbnRlcmFjdGlv
biBpbiBXUEUuCiAjaWYgUExBVEZPUk0oR1RLKQo=
</data>
<flag name="review"
          id="367079"
          type_id="1"
          status="+"
          setter="mcatanzaro"
    />
          </attachment>
      

    </bug>

</bugzilla>