<?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>80271</bug_id>
          
          <creation_ts>2012-03-05 05:37:19 -0800</creation_ts>
          <short_desc>[GTK] Use a single signal for script dialogs in WebKit2 GTK+ API</short_desc>
          <delta_ts>2012-03-06 01:26:36 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit2</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Gtk</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Carlos Garcia Campos">cgarcia</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>gustavo</cc>
    
    <cc>pnormand</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>570593</commentid>
    <comment_count>0</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-03-05 05:37:19 -0800</bug_when>
    <thetext>As discussed in bug #17171, current signals are not bindings friendly. A single signal would simplify the API and make bindings users happier.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>570597</commentid>
    <comment_count>1</comment_count>
      <attachid>130102</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-03-05 05:44:18 -0800</bug_when>
    <thetext>Created attachment 130102
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>570601</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-05 05:46:38 -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>570741</commentid>
    <comment_count>3</comment_count>
      <attachid>130102</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-03-05 08:51:25 -0800</bug_when>
    <thetext>Comment on attachment 130102
Patch

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

Great patch! The large change I would make would be to give WebKitScriptDialog its own file to align with the unwritten rule of WebKit style of &quot;one class per file.&quot; Do you mind doing that before landing?

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:149
&gt; +    return new WebKitScriptDialog(dialog);
&gt; +}
&gt; +
&gt; +static void webkitScriptDialogFree(WebKitScriptDialog* dialog)
&gt; +{
&gt; +    delete dialog;

Perhaps it makes sense to use the slab allocator and placement new syntax here?

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:195
&gt; +        scriptDialog-&gt;confirmed = gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_OK;

You might have to use webkit_script_dialog_confirm_set_confirmed now.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:205
&gt; +            scriptDialog-&gt;text = gtk_entry_get_text(GTK_ENTRY(entry));

Same sort of change probably needed here.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:1554
&gt; + * signal sets %TRUE when OK button is clicked and %FALSE otherwise.

Nit: the Ok button</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>570764</commentid>
    <comment_count>4</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-03-05 09:16:07 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 130102 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=130102&amp;action=review
&gt; 
&gt; Great patch! The large change I would make would be to give WebKitScriptDialog its own file to align with the unwritten rule of WebKit style of &quot;one class per file.&quot; Do you mind doing that before landing?

Sure, no problem, even though WebKitScriptDialog is not a class, but a struct.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:149
&gt; &gt; +    return new WebKitScriptDialog(dialog);
&gt; &gt; +}
&gt; &gt; +
&gt; &gt; +static void webkitScriptDialogFree(WebKitScriptDialog* dialog)
&gt; &gt; +{
&gt; &gt; +    delete dialog;
&gt; 
&gt; Perhaps it makes sense to use the slab allocator and placement new syntax here?

It doesn&apos;t really matter, this will never be used, but we need to give a copy and free func for boxed types. The struct is stack allocated before emitting the signal and the signal parameter is  G_SIGNAL_TYPE_STATIC_SCOPE.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:195
&gt; &gt; +        scriptDialog-&gt;confirmed = gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_OK;
&gt; 
&gt; You might have to use webkit_script_dialog_confirm_set_confirmed now.

Right, if we move the struct to its own file. 

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:205
&gt; &gt; +            scriptDialog-&gt;text = gtk_entry_get_text(GTK_ENTRY(entry));
&gt; 
&gt; Same sort of change probably needed here.

Yes.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:1554
&gt; &gt; + * signal sets %TRUE when OK button is clicked and %FALSE otherwise.
&gt; 
&gt; Nit: the Ok button

Ok.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>570769</commentid>
    <comment_count>5</comment_count>
      <attachid>130102</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-03-05 09:18:52 -0800</bug_when>
    <thetext>Comment on attachment 130102
Patch

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

&gt;&gt;&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:149
&gt;&gt;&gt; +    delete dialog;
&gt;&gt; 
&gt;&gt; Perhaps it makes sense to use the slab allocator and placement new syntax here?
&gt; 
&gt; It doesn&apos;t really matter, this will never be used, but we need to give a copy and free func for boxed types. The struct is stack allocated before emitting the signal and the signal parameter is  G_SIGNAL_TYPE_STATIC_SCOPE.

Perhaps it would make sense to use ASSERT_NOT_REACHED here then?

&gt;&gt;&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:1554
&gt;&gt;&gt; + * signal sets %TRUE when OK button is clicked and %FALSE otherwise.
&gt;&gt; 
&gt;&gt; Nit: the Ok button
&gt; 
&gt; Ok.

Sorry, I meant &quot;the OK button&quot; here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>571557</commentid>
    <comment_count>6</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-03-05 23:52:56 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 130102 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=130102&amp;action=review
&gt; 
&gt; &gt;&gt;&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:149
&gt; &gt;&gt;&gt; +    delete dialog;
&gt; &gt;&gt; 
&gt; &gt;&gt; Perhaps it makes sense to use the slab allocator and placement new syntax here?
&gt; &gt; 
&gt; &gt; It doesn&apos;t really matter, this will never be used, but we need to give a copy and free func for boxed types. The struct is stack allocated before emitting the signal and the signal parameter is  G_SIGNAL_TYPE_STATIC_SCOPE.
&gt; 
&gt; Perhaps it would make sense to use ASSERT_NOT_REACHED here then?

in this case I prefer to do the right thing in case we reach here for whatever reason. I&apos;ll change to use slab allocator before landing.

&gt; &gt;&gt;&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:1554
&gt; &gt;&gt;&gt; + * signal sets %TRUE when OK button is clicked and %FALSE otherwise.
&gt; &gt;&gt; 
&gt; &gt;&gt; Nit: the Ok button
&gt; &gt; 
&gt; &gt; Ok.
&gt; 
&gt; Sorry, I meant &quot;the OK button&quot; here.

OK :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>571632</commentid>
    <comment_count>7</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-03-06 01:26:36 -0800</bug_when>
    <thetext>Committed r109880: &lt;http://trac.webkit.org/changeset/109880&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>130102</attachid>
            <date>2012-03-05 05:44:18 -0800</date>
            <delta_ts>2012-03-05 09:18:52 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>wk2-script-dialog.diff</filename>
            <type>text/plain</type>
            <size>29783</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCA1YjI1ODBiLi5jZGE1MjY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDQg
QEAKKzIwMTItMDMtMDUgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgorCisgICAgICAgIFtHVEtdIFVzZSBhIHNpbmdsZSBzaWduYWwgZm9yIHNjcmlwdCBkaWFsb2dz
IGluIFdlYktpdDIgR1RLKyBBUEkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTgwMjcxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgQWRkIGEgbmV3IHNpZ25hbCBXZWJLaXRXZWJWaWV3OjpzY3JpcHQtZGlhbG9n
IHRoYXQgcGFzc2VzIGEKKyAgICAgICAgV2ViS2l0U2NyaXB0RGlhbG9nIGJveGVkIHR5cGUgdGhh
dCBjYW4gYmUgdXNlZCB0byBidWlsZCB0aGUgZGlhbG9nCisgICAgICAgIGFuZCBzZXQgdGhlIHJl
c3BvbnNlcy4gSXQgc2ltcGxpZmllcyB0aGUgQVBJIGFuZCBtYWtlcyBpdCBiaW5kaW5ncworICAg
ICAgICBmcmllbmRseS4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZp
ZXcuY3BwOgorICAgICAgICAod2Via2l0U2NyaXB0RGlhbG9nQ29weSk6IENvcHkgbWV0aG9kIGZv
ciBib3hlZCB0eXBlLgorICAgICAgICAod2Via2l0U2NyaXB0RGlhbG9nRnJlZSk6IEZyZWUgbWV0
aG9kIGZvciBib3hlZCB0eXBlLgorICAgICAgICAod2Via2l0V2ViVmlld1NjcmlwdERpYWxvZyk6
IERlZmF1bHQgaW1wbGVtZW50YXRpb24gb2YKKyAgICAgICAgV2ViS2l0V2ViVmlldzo6c2NyaXB0
LWRpYWxvZyBzaWduYWwuCisgICAgICAgICh3ZWJraXRfd2ViX3ZpZXdfY2xhc3NfaW5pdCk6IEFk
ZCBXZWJLaXRXZWJWaWV3OjpzY3JpcHQtZGlhbG9nIGFuZAorICAgICAgICByZW1vdmUgYWxlcnQs
IGNvbmZpcm0gYW5kIHByb3BtcHQuCisgICAgICAgICh3ZWJraXRXZWJWaWV3UnVuSmF2YVNjcmlw
dEFsZXJ0KTogQ3JlYXRlIGEgV2ViS2l0U2NyaXB0RGlhbG9nIGFuZAorICAgICAgICBlbWl0IFdl
YktpdFdlYlZpZXc6OnNjcmlwdC1kaWFsb2cgc2lnbmFsLgorICAgICAgICAod2Via2l0V2ViVmll
d1J1bkphdmFTY3JpcHRDb25maXJtKTogRGl0dG8uCisgICAgICAgICh3ZWJraXRXZWJWaWV3UnVu
SmF2YVNjcmlwdFByb21wdCk6IERpdHRvLgorICAgICAgICAod2Via2l0X3NjcmlwdF9kaWFsb2df
Z2V0X2RpYWxvZ190eXBlKTogUmV0dXJuIHRoZSB0eXBlIG9mIGRpYWxvZzoKKyAgICAgICAgYWxl
cnQsIGNvbmZpcm0gb3IgcHJvbXB0LgorICAgICAgICAod2Via2l0X3NjcmlwdF9kaWFsb2dfZ2V0
X21lc3NhZ2UpOiBSZXR1cm4gdGhlIG1lc3NhZ2Ugb2YgdGhlIGRpYWxvZy4KKyAgICAgICAgKHdl
YmtpdF9zY3JpcHRfZGlhbG9nX2NvbmZpcm1fc2V0X2NvbmZpcm1lZCk6IFNldCB3aGV0aGVyIHVz
ZXIKKyAgICAgICAgY29uZmlybWVkIHRoZSBkaWFsb2csIGZvciBjb25maXJtIGRpYWxvZ3MuCisg
ICAgICAgICh3ZWJraXRfc2NyaXB0X2RpYWxvZ19wcm9tcHRfZ2V0X2RlZmF1bHRfdGV4dCk6IEdl
dCB0aGUgZGVmYXVsdAorICAgICAgICB0ZXh0IG9mIHByb21wdCBkaWFsb2dzLgorICAgICAgICAo
d2Via2l0X3NjcmlwdF9kaWFsb2dfcHJvbXB0X3NldF90ZXh0KTogU2V0IHRoZSB0ZXh0IGVudGVy
ZWQgYnkKKyAgICAgICAgdGhlIHVzZXIsIGZvciBwcm9tcHQgZGlhbG9ncy4KKyAgICAgICAgKiBV
SVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3Lmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQ
SS9ndGsvZG9jcy93ZWJraXQyZ3RrLXNlY3Rpb25zLnR4dDogQWRkIG5ldworICAgICAgICBzeW1i
b2xzLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay50eXBlczog
QWRkIHdlYmtpdF9zY3JpcHRfZGlhbG9nX2dldF90eXBlKCkuCisgICAgICAgICogVUlQcm9jZXNz
L0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdFdlYlZpZXcuY3BwOgorICAgICAgICAodGVzdFdlYlZp
ZXdKYXZhU2NyaXB0RGlhbG9ncyk6IFVwZGF0ZSBqYXZhc2NyaXB0IGRpYWxvZyB0ZXN0IHRvCisg
ICAgICAgIHVzZSB0aGUgbmV3IEFQSS4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay93ZWJr
aXQybWFyc2hhbC5saXN0OgorCiAyMDEyLTAzLTA0ICBSYXBoYWVsIEt1Ym8gZGEgQ29zdGEgIDxr
dWJvQHByb2Z1c2lvbi5tb2JpPgogCiAgICAgICAgIFtDTWFrZV0gTGlicmFyaWVzIGFyZSBpbnN0
YWxsZWQgdG8gL3Vzci9saWIgYW5kIG5vdCAvdXNyL2xpYjY0IG9uIHg4Nl82NApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5jcHAgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmNwcAppbmRleCBl
MTgyYWJkLi5lZmFhNmNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay9XZWJLaXRXZWJWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay9XZWJLaXRXZWJWaWV3LmNwcApAQCAtNTUsOSArNTUsNyBAQCBlbnVtIHsKICAgICBSRUFE
WV9UT19TSE9XLAogICAgIENMT1NFLAogCi0gICAgU0NSSVBUX0FMRVJULAotICAgIFNDUklQVF9D
T05GSVJNLAotICAgIFNDUklQVF9QUk9NUFQsCisgICAgU0NSSVBUX0RJQUxPRywKIAogICAgIERF
Q0lERV9QT0xJQ1ksCiAKQEAgLTEwNyw2ICsxMDUsNTIgQEAgc3RhdGljIGd1aW50IHNpZ25hbHNb
TEFTVF9TSUdOQUxdID0geyAwLCB9OwogCiBHX0RFRklORV9UWVBFKFdlYktpdFdlYlZpZXcsIHdl
YmtpdF93ZWJfdmlldywgV0VCS0lUX1RZUEVfV0VCX1ZJRVdfQkFTRSkKIAorc3RydWN0IF9XZWJL
aXRTY3JpcHREaWFsb2cgeworICAgIF9XZWJLaXRTY3JpcHREaWFsb2codW5zaWduZWQgdHlwZSwg
Y29uc3QgQ1N0cmluZyYgbWVzc2FnZSkKKyAgICAgICAgOiB0eXBlKHR5cGUpCisgICAgICAgICwg
bWVzc2FnZShtZXNzYWdlKQorICAgICAgICAsIGNvbmZpcm1lZChmYWxzZSkKKyAgICB7CisgICAg
fQorCisgICAgX1dlYktpdFNjcmlwdERpYWxvZyh1bnNpZ25lZCB0eXBlLCBjb25zdCBDU3RyaW5n
JiBtZXNzYWdlLCBjb25zdCBDU3RyaW5nJiBkZWZhdWx0VGV4dCkKKyAgICAgICAgOiB0eXBlKHR5
cGUpCisgICAgICAgICwgbWVzc2FnZShtZXNzYWdlKQorICAgICAgICAsIGRlZmF1bHRUZXh0KGRl
ZmF1bHRUZXh0KQorICAgICAgICAsIGNvbmZpcm1lZChmYWxzZSkKKyAgICB7CisgICAgICAgIEFT
U0VSVCh0eXBlID09IFdFQktJVF9TQ1JJUFRfRElBTE9HX1BST01QVCk7CisgICAgfQorCisgICAg
X1dlYktpdFNjcmlwdERpYWxvZyhXZWJLaXRTY3JpcHREaWFsb2cqIGRpYWxvZykKKyAgICAgICAg
OiB0eXBlKGRpYWxvZy0+dHlwZSkKKyAgICAgICAgLCBtZXNzYWdlKGRpYWxvZy0+bWVzc2FnZSkK
KyAgICAgICAgLCBkZWZhdWx0VGV4dChkaWFsb2ctPmRlZmF1bHRUZXh0KQorICAgICAgICAsIGNv
bmZpcm1lZChkaWFsb2ctPmNvbmZpcm1lZCkKKyAgICAgICAgLCB0ZXh0KGRpYWxvZy0+dGV4dCkK
KyAgICB7CisgICAgfQorCisgICAgdW5zaWduZWQgdHlwZTsKKyAgICBDU3RyaW5nIG1lc3NhZ2U7
CisgICAgQ1N0cmluZyBkZWZhdWx0VGV4dDsKKworICAgIGJvb2wgY29uZmlybWVkOworICAgIENT
dHJpbmcgdGV4dDsKK307CisKK3N0YXRpYyBXZWJLaXRTY3JpcHREaWFsb2cqIHdlYmtpdFNjcmlw
dERpYWxvZ0NvcHkoV2ViS2l0U2NyaXB0RGlhbG9nKiBkaWFsb2cpCit7CisgICAgcmV0dXJuIG5l
dyBXZWJLaXRTY3JpcHREaWFsb2coZGlhbG9nKTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0U2Ny
aXB0RGlhbG9nRnJlZShXZWJLaXRTY3JpcHREaWFsb2cqIGRpYWxvZykKK3sKKyAgICBkZWxldGUg
ZGlhbG9nOworfQorCitHX0RFRklORV9CT1hFRF9UWVBFKFdlYktpdFNjcmlwdERpYWxvZywgd2Vi
a2l0X3NjcmlwdF9kaWFsb2csIHdlYmtpdFNjcmlwdERpYWxvZ0NvcHksIHdlYmtpdFNjcmlwdERp
YWxvZ0ZyZWUpCisKIHN0YXRpYyBnYm9vbGVhbiB3ZWJraXRXZWJWaWV3TG9hZEZhaWwoV2ViS2l0
V2ViVmlldyogd2ViVmlldywgV2ViS2l0TG9hZEV2ZW50LCBjb25zdCBjaGFyKiBmYWlsaW5nVVJJ
LCBHRXJyb3IqIGVycm9yKQogewogICAgIGlmIChnX2Vycm9yX21hdGNoZXMoZXJyb3IsIFdFQktJ
VF9ORVRXT1JLX0VSUk9SLCBXRUJLSVRfTkVUV09SS19FUlJPUl9DQU5DRUxMRUQpCkBAIC0xMzcs
MzIgKzE4MSwzMyBAQCBzdGF0aWMgR3RrV2lkZ2V0KiB3ZWJraXRXZWJWaWV3Q3JlYXRlSmF2YVNj
cmlwdERpYWxvZyhXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBHdAogICAgIHJldHVybiBkaWFsb2c7
CiB9CiAKLXN0YXRpYyBnYm9vbGVhbiB3ZWJraXRXZWJWaWV3U2NyaXB0QWxlcnQoV2ViS2l0V2Vi
Vmlldyogd2ViVmlldywgY29uc3QgY2hhciogbWVzc2FnZSkKK3N0YXRpYyBnYm9vbGVhbiB3ZWJr
aXRXZWJWaWV3U2NyaXB0RGlhbG9nKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIFdlYktpdFNjcmlw
dERpYWxvZyogc2NyaXB0RGlhbG9nKQogewotICAgIEd0a1dpZGdldCogZGlhbG9nID0gd2Via2l0
V2ViVmlld0NyZWF0ZUphdmFTY3JpcHREaWFsb2cod2ViVmlldywgR1RLX01FU1NBR0VfV0FSTklO
RywgR1RLX0JVVFRPTlNfQ0xPU0UsIEdUS19SRVNQT05TRV9DTE9TRSwgbWVzc2FnZSk7Ci0gICAg
Z3RrX2RpYWxvZ19ydW4oR1RLX0RJQUxPRyhkaWFsb2cpKTsKLSAgICBndGtfd2lkZ2V0X2Rlc3Ry
b3koZGlhbG9nKTsKLSAgICByZXR1cm4gVFJVRTsKLX0KKyAgICBHdGtXaWRnZXQqIGRpYWxvZyA9
IDA7CiAKLXN0YXRpYyBnYm9vbGVhbiB3ZWJraXRXZWJWaWV3U2NyaXB0Q29uZmlybShXZWJLaXRX
ZWJWaWV3KiB3ZWJWaWV3LCBjb25zdCBjaGFyKiBtZXNzYWdlLCBnYm9vbGVhbiogY29uZmlybWVk
KQotewotICAgIEd0a1dpZGdldCogZGlhbG9nID0gd2Via2l0V2ViVmlld0NyZWF0ZUphdmFTY3Jp
cHREaWFsb2cod2ViVmlldywgR1RLX01FU1NBR0VfUVVFU1RJT04sIEdUS19CVVRUT05TX09LX0NB
TkNFTCwgR1RLX1JFU1BPTlNFX09LLCBtZXNzYWdlKTsKLSAgICAqY29uZmlybWVkID0gZ3RrX2Rp
YWxvZ19ydW4oR1RLX0RJQUxPRyhkaWFsb2cpKSA9PSBHVEtfUkVTUE9OU0VfT0s7Ci0gICAgZ3Rr
X3dpZGdldF9kZXN0cm95KGRpYWxvZyk7Ci0gICAgcmV0dXJuIFRSVUU7Ci19CisgICAgc3dpdGNo
IChzY3JpcHREaWFsb2ctPnR5cGUpIHsKKyAgICBjYXNlIFdFQktJVF9TQ1JJUFRfRElBTE9HX0FM
RVJUOgorICAgICAgICBkaWFsb2cgPSB3ZWJraXRXZWJWaWV3Q3JlYXRlSmF2YVNjcmlwdERpYWxv
Zyh3ZWJWaWV3LCBHVEtfTUVTU0FHRV9XQVJOSU5HLCBHVEtfQlVUVE9OU19DTE9TRSwgR1RLX1JF
U1BPTlNFX0NMT1NFLCBzY3JpcHREaWFsb2ctPm1lc3NhZ2UuZGF0YSgpKTsKKyAgICAgICAgZ3Rr
X2RpYWxvZ19ydW4oR1RLX0RJQUxPRyhkaWFsb2cpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBXRUJLSVRfU0NSSVBUX0RJQUxPR19DT05GSVJNOgorICAgICAgICBkaWFsb2cgPSB3ZWJraXRX
ZWJWaWV3Q3JlYXRlSmF2YVNjcmlwdERpYWxvZyh3ZWJWaWV3LCBHVEtfTUVTU0FHRV9RVUVTVElP
TiwgR1RLX0JVVFRPTlNfT0tfQ0FOQ0VMLCBHVEtfUkVTUE9OU0VfT0ssIHNjcmlwdERpYWxvZy0+
bWVzc2FnZS5kYXRhKCkpOworICAgICAgICBzY3JpcHREaWFsb2ctPmNvbmZpcm1lZCA9IGd0a19k
aWFsb2dfcnVuKEdUS19ESUFMT0coZGlhbG9nKSkgPT0gR1RLX1JFU1BPTlNFX09LOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIFdFQktJVF9TQ1JJUFRfRElBTE9HX1BST01QVDoKKyAgICAgICAg
ZGlhbG9nID0gd2Via2l0V2ViVmlld0NyZWF0ZUphdmFTY3JpcHREaWFsb2cod2ViVmlldywgR1RL
X01FU1NBR0VfUVVFU1RJT04sIEdUS19CVVRUT05TX09LX0NBTkNFTCwgR1RLX1JFU1BPTlNFX09L
LCBzY3JpcHREaWFsb2ctPm1lc3NhZ2UuZGF0YSgpKTsKKyAgICAgICAgR3RrV2lkZ2V0KiBlbnRy
eSA9IGd0a19lbnRyeV9uZXcoKTsKKyAgICAgICAgZ3RrX2VudHJ5X3NldF90ZXh0KEdUS19FTlRS
WShlbnRyeSksIHNjcmlwdERpYWxvZy0+ZGVmYXVsdFRleHQuZGF0YSgpKTsKKyAgICAgICAgZ3Rr
X2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUihndGtfZGlhbG9nX2dldF9jb250ZW50X2FyZWEo
R1RLX0RJQUxPRyhkaWFsb2cpKSksIGVudHJ5KTsKKyAgICAgICAgZ3RrX2VudHJ5X3NldF9hY3Rp
dmF0ZXNfZGVmYXVsdChHVEtfRU5UUlkoZW50cnkpLCBUUlVFKTsKKyAgICAgICAgZ3RrX3dpZGdl
dF9zaG93KGVudHJ5KTsKKyAgICAgICAgaWYgKGd0a19kaWFsb2dfcnVuKEdUS19ESUFMT0coZGlh
bG9nKSkgPT0gR1RLX1JFU1BPTlNFX09LKQorICAgICAgICAgICAgc2NyaXB0RGlhbG9nLT50ZXh0
ID0gZ3RrX2VudHJ5X2dldF90ZXh0KEdUS19FTlRSWShlbnRyeSkpOworICAgICAgICBicmVhazsK
KyAgICB9CiAKLXN0YXRpYyBnYm9vbGVhbiB3ZWJraXRXZWJWaWV3U2NyaXB0UHJvbXB0KFdlYktp
dFdlYlZpZXcqIHdlYlZpZXcsIGNvbnN0IGNoYXIqIG1lc3NhZ2UsIGNvbnN0IGNoYXIqIGRlZmF1
bHRUZXh0LCBjaGFyKiogdGV4dCkKLXsKLSAgICBHdGtXaWRnZXQqIGRpYWxvZyA9IHdlYmtpdFdl
YlZpZXdDcmVhdGVKYXZhU2NyaXB0RGlhbG9nKHdlYlZpZXcsIEdUS19NRVNTQUdFX1FVRVNUSU9O
LCBHVEtfQlVUVE9OU19PS19DQU5DRUwsIEdUS19SRVNQT05TRV9PSywgbWVzc2FnZSk7Ci0gICAg
R3RrV2lkZ2V0KiBlbnRyeSA9IGd0a19lbnRyeV9uZXcoKTsKLSAgICBndGtfZW50cnlfc2V0X3Rl
eHQoR1RLX0VOVFJZKGVudHJ5KSwgZGVmYXVsdFRleHQpOwotICAgIGd0a19jb250YWluZXJfYWRk
KEdUS19DT05UQUlORVIoZ3RrX2RpYWxvZ19nZXRfY29udGVudF9hcmVhKEdUS19ESUFMT0coZGlh
bG9nKSkpLCBlbnRyeSk7Ci0gICAgZ3RrX2VudHJ5X3NldF9hY3RpdmF0ZXNfZGVmYXVsdChHVEtf
RU5UUlkoZW50cnkpLCBUUlVFKTsKLSAgICBndGtfd2lkZ2V0X3Nob3coZW50cnkpOworICAgIGd0
a193aWRnZXRfZGVzdHJveShkaWFsb2cpOwogCi0gICAgKnRleHQgPSAoZ3RrX2RpYWxvZ19ydW4o
R1RLX0RJQUxPRyhkaWFsb2cpKSA9PSBHVEtfUkVTUE9OU0VfT0spID8gZ19zdHJkdXAoZ3RrX2Vu
dHJ5X2dldF90ZXh0KEdUS19FTlRSWShlbnRyeSkpKSA6IDA7CiAgICAgcmV0dXJuIFRSVUU7CiB9
CiAKQEAgLTI4OCw5ICszMzMsNyBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfY2xhc3Nf
aW5pdChXZWJLaXRXZWJWaWV3Q2xhc3MqIHdlYlZpZXdDbGFzcykKIAogICAgIHdlYlZpZXdDbGFz
cy0+bG9hZF9mYWlsZWQgPSB3ZWJraXRXZWJWaWV3TG9hZEZhaWw7CiAgICAgd2ViVmlld0NsYXNz
LT5jcmVhdGUgPSB3ZWJraXRXZWJWaWV3Q3JlYXRlOwotICAgIHdlYlZpZXdDbGFzcy0+c2NyaXB0
X2FsZXJ0ID0gd2Via2l0V2ViVmlld1NjcmlwdEFsZXJ0OwotICAgIHdlYlZpZXdDbGFzcy0+c2Ny
aXB0X2NvbmZpcm0gPSB3ZWJraXRXZWJWaWV3U2NyaXB0Q29uZmlybTsKLSAgICB3ZWJWaWV3Q2xh
c3MtPnNjcmlwdF9wcm9tcHQgPSB3ZWJraXRXZWJWaWV3U2NyaXB0UHJvbXB0OworICAgIHdlYlZp
ZXdDbGFzcy0+c2NyaXB0X2RpYWxvZyA9IHdlYmtpdFdlYlZpZXdTY3JpcHREaWFsb2c7CiAgICAg
d2ViVmlld0NsYXNzLT5kZWNpZGVfcG9saWN5ID0gd2Via2l0V2ViVmlld0RlY2lkZVBvbGljeTsK
IAogICAgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZSh3ZWJWaWV3Q2xhc3MsIHNpemVvZihXZWJL
aXRXZWJWaWV3UHJpdmF0ZSkpOwpAQCAtNTIwLDc1ICs1NjMsNDAgQEAgc3RhdGljIHZvaWQgd2Vi
a2l0X3dlYl92aWV3X2NsYXNzX2luaXQoV2ViS2l0V2ViVmlld0NsYXNzKiB3ZWJWaWV3Q2xhc3Mp
CiAgICAgICAgICAgICAgICAgICAgICBHX1RZUEVfTk9ORSwgMCk7CiAKICAgICAvKioKLSAgICAg
KiBXZWJLaXRXZWJWaWV3OjpzY3JpcHQtYWxlcnQ6Ci0gICAgICogQHdlYl92aWV3OiB0aGUgI1dl
YktpdFdlYlZpZXcgb24gd2hpY2ggdGhlIHNpZ25hbCBpcyBlbWl0dGVkCi0gICAgICogQG1lc3Nh
Z2U6IHRoZSBtZXNzYWdlIHRleHQKLSAgICAgKgotICAgICAqIEVtaXR0ZWQgd2hlbiBKYXZhU2Ny
aXB0IGNvZGUgY2FsbHMgPGZ1bmN0aW9uPndpbmRvdy5hbGVydDwvZnVuY3Rpb24+LiBJZiB0aGUK
LSAgICAgKiBzaWduYWwgaXMgbm90IGhhbmRsZWQgYSBtZXNzYWdlIGRpYWxvZyB3aXRoIGEgc2lu
Z2xlIENsb3NlIGJ1dHRvbiB3aWxsIGJlCi0gICAgICogc2hvd24gd2l0aCB0aGUgbWVzc2FnZSB0
ZXh0LgotICAgICAqCi0gICAgICogUmV0dXJuczogJVRSVUUgdG8gc3RvcCBvdGhlciBoYW5kbGVy
cyBmcm9tIGJlaW5nIGludm9rZWQgZm9yIHRoZSBldmVudC4KLSAgICAgKiAgICAlRkFMU0UgdG8g
cHJvcGFnYXRlIHRoZSBldmVudCBmdXJ0aGVyLgotICAgICAqLwotICAgIHNpZ25hbHNbU0NSSVBU
X0FMRVJUXSA9Ci0gICAgICAgICAgICBnX3NpZ25hbF9uZXcoInNjcmlwdC1hbGVydCIsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgR19UWVBFX0ZST01fQ0xBU1Mod2ViVmlld0NsYXNzKSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICBHX1NJR05BTF9SVU5fTEFTVCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICBHX1NUUlVDVF9PRkZTRVQoV2ViS2l0V2ViVmlld0NsYXNzLCBzY3JpcHRfYWxl
cnQpLAotICAgICAgICAgICAgICAgICAgICAgICAgIGdfc2lnbmFsX2FjY3VtdWxhdG9yX3RydWVf
aGFuZGxlZCwgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICB3ZWJraXRfbWFyc2hhbF9CT09M
RUFOX19TVFJJTkcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgR19UWVBFX0JPT0xFQU4sIDEs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgR19UWVBFX1NUUklORyk7Ci0KLSAgICAvKioKLSAg
ICAgKiBXZWJLaXRXZWJWaWV3OjpzY3JpcHQtY29uZmlybToKLSAgICAgKiBAd2ViX3ZpZXc6IHRo
ZSAjV2ViS2l0V2ViVmlldyBvbiB3aGljaCB0aGUgc2lnbmFsIGlzIGVtaXR0ZWQKLSAgICAgKiBA
bWVzc2FnZTogdGhlIG1lc3NhZ2UgdGV4dAotICAgICAqIEBjb25maXJtZWQ6IChvdXQpOiByZXR1
cm4gbG9jYXRpb24gZm9yIGNvbmZpcm0gZGlhbG9nIHJlc3BvbnNlCi0gICAgICoKLSAgICAgKiBF
bWl0dGVkIHdoZW4gSmF2YVNjcmlwdCBjb2RlIGNhbGxzIDxmdW5jdGlvbj5jb25maXJtPC9mdW5j
dGlvbj4uIElmIHRoZQotICAgICAqIHNpZ25hbCBpcyBub3QgaGFuZGxlZCBhIG1lc3NhZ2UgZGlh
bG9nIHdpdGggT0sgYW5kIENhbmNlbCBidXR0b25zIHdpbGwgYmUKLSAgICAgKiBzaG93biB3aXRo
IHRoZSBtZXNzYWdlIHRleHQuIElmIE9LIGJ1dHRvbiBpcyBjbGlja2VkIEBjb25maXJtZWQgd2ls
bCBiZQotICAgICAqIHNldCB0byAlVFJVRSwgb3RoZXJ3aXNlIGl0IHdpbGwgYmUgJUZBTFNFLgot
ICAgICAqCi0gICAgICogUmV0dXJuczogJVRSVUUgdG8gc3RvcCBvdGhlciBoYW5kbGVycyBmcm9t
IGJlaW5nIGludm9rZWQgZm9yIHRoZSBldmVudC4KLSAgICAgKiAgICAlRkFMU0UgdG8gcHJvcGFn
YXRlIHRoZSBldmVudCBmdXJ0aGVyLgotICAgICAqLwotICAgIHNpZ25hbHNbU0NSSVBUX0NPTkZJ
Uk1dID0KLSAgICAgICAgICAgIGdfc2lnbmFsX25ldygic2NyaXB0LWNvbmZpcm0iLAotICAgICAg
ICAgICAgICAgICAgICAgICAgIEdfVFlQRV9GUk9NX0NMQVNTKHdlYlZpZXdDbGFzcyksCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgR19TSUdOQUxfUlVOX0xBU1QsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgR19TVFJVQ1RfT0ZGU0VUKFdlYktpdFdlYlZpZXdDbGFzcywgc2NyaXB0X2NvbmZp
cm0pLAotICAgICAgICAgICAgICAgICAgICAgICAgIGdfc2lnbmFsX2FjY3VtdWxhdG9yX3RydWVf
aGFuZGxlZCwgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICB3ZWJraXRfbWFyc2hhbF9CT09M
RUFOX19TVFJJTkdfUE9JTlRFUiwKLSAgICAgICAgICAgICAgICAgICAgICAgICBHX1RZUEVfQk9P
TEVBTiwgMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICBHX1RZUEVfU1RSSU5HLCBHX1RZUEVf
UE9JTlRFUik7Ci0KLSAgICAvKioKLSAgICAgKiBXZWJLaXRXZWJWaWV3OjpzY3JpcHQtcHJvbXB0
OgorICAgICAqIFdlYktpdFdlYlZpZXc6OnNjcmlwdC1kaWFsb2c6CiAgICAgICogQHdlYl92aWV3
OiB0aGUgI1dlYktpdFdlYlZpZXcgb24gd2hpY2ggdGhlIHNpZ25hbCBpcyBlbWl0dGVkCi0gICAg
ICogQG1lc3NhZ2U6IHRoZSBtZXNzYWdlIHRleHQKLSAgICAgKiBAZGVmYXVsdCAoYWxsb3ctbm9u
ZSk6IHRoZSBkZWZhdWx0IHRleHQKLSAgICAgKiBAdGV4dDogKG91dCk6IHJldHVybiBsb2NhdGlv
biBmb3IgcHJvbXB0IGRpYWxvZyB0ZXh0IHJlc3BvbnNlCisgICAgICogQGRpYWxvZzogdGhlICNX
ZWJLaXRTY3JpcHREaWFsb2cgdG8gc2hvdwogICAgICAqCi0gICAgICogRW1pdHRlZCB3aGVuIEph
dmFTY3JpcHQgY29kZSBjYWxscyA8ZnVuY3Rpb24+cHJvbXB0PC9mdW5jdGlvbj4uIElmIHRoZQot
ICAgICAqIHNpZ25hbCBpcyBub3QgaGFuZGxlZCBhIG1lc3NhZ2UgZGlhbG9nIHdpdGggT0sgYW5k
IENhbmNlbCBidXR0b25zIGFuZAotICAgICAqIGEgdGV4dCBlbnRyeSB3aWxsIGJlIHNob3duIHdp
dGggdGhlIG1lc3NhZ2UgdGV4dC4gSWYgT0sgYnV0dG9uIGlzIGNsaWNrZWQKLSAgICAgKiBAdGV4
dCB3aWxsIGNvbnRhaW4gdGhlIHRleHQgZW50ZXJlZCBieSB0aGUgdXNlciwgb3RoZXJ3aXNlIGl0
IHdpbGwgYmUgJU5VTEwuCisgICAgICogRW1pdHRlZCB3aGVuIEphdmFTY3JpcHQgY29kZSBjYWxs
cyA8ZnVuY3Rpb24+d2luZG93LmFsZXJ0PC9mdW5jdGlvbj4sCisgICAgICogPGZ1bmN0aW9uPndp
bmRvdy5jb25maXJtPC9mdW5jdGlvbj4gb3IgPGZ1bmN0aW9uPndpbmRvdy5wcm9tcHQ8L2Z1bmN0
aW9uPi4KKyAgICAgKiBUaGUgQGRpYWxvZyBwYXJhbWV0ZXIgc2hvdWxkIGJlIHVzZWQgdG8gYnVp
bGQgdGhlIGRpYWxvZy4KKyAgICAgKiBJZiB0aGUgc2lnbmFsIGlzIG5vdCBoYW5kbGVkIGEgZGlm
ZmVyZW50IGRpYWxvZyB3aWxsIGJlIGJ1aWx0IGFuZCBzaG93biBkZXBlbmRpbmcKKyAgICAgKiBv
biB0aGUgZGlhbG9nIHR5cGU6CisgICAgICogPGl0ZW1pemVkbGlzdD4KKyAgICAgKiA8bGlzdGl0
ZW0+PHBhcmE+CisgICAgICogICVXRUJLSVRfU0NSSVBUX0RJQUxPR19BTEVSVDogbWVzc2FnZSBk
aWFsb2cgd2l0aCBhIHNpbmdsZSBDbG9zZSBidXR0b24uCisgICAgICogPC9wYXJhPjwvbGlzdGl0
ZW0+CisgICAgICogPGxpc3RpdGVtPjxwYXJhPgorICAgICAqICAlV0VCS0lUX1NDUklQVF9ESUFM
T0dfQ09ORklSTTogbWVzc2FnZSBkaWFsb2cgd2l0aCBPSyBhbmQgQ2FuY2VsIGJ1dHRvbnMuCisg
ICAgICogPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICogPGxpc3RpdGVtPjxwYXJhPgorICAgICAq
ICAlV0VCS0lUX1NDUklQVF9ESUFMT0dfUFJPTVBUOiBtZXNzYWdlIGRpYWxvZyB3aXRoIE9LIGFu
ZCBDYW5jZWwgYnV0dG9ucyBhbmQKKyAgICAgKiAgYSB0ZXh0IGVudHJ5IHdpdGggdGhlIGRlZmF1
bHQgdGV4dC4KKyAgICAgKiA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgKiA8L2l0ZW1pemVkbGlz
dD4KICAgICAgKgogICAgICAqIFJldHVybnM6ICVUUlVFIHRvIHN0b3Agb3RoZXIgaGFuZGxlcnMg
ZnJvbSBiZWluZyBpbnZva2VkIGZvciB0aGUgZXZlbnQuCiAgICAgICogICAgJUZBTFNFIHRvIHBy
b3BhZ2F0ZSB0aGUgZXZlbnQgZnVydGhlci4KICAgICAgKi8KLSAgICBzaWduYWxzW1NDUklQVF9Q
Uk9NUFRdID0KLSAgICAgICAgICAgIGdfc2lnbmFsX25ldygic2NyaXB0LXByb21wdCIsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgR19UWVBFX0ZST01fQ0xBU1Mod2ViVmlld0NsYXNzKSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICBHX1NJR05BTF9SVU5fTEFTVCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICBHX1NUUlVDVF9PRkZTRVQoV2ViS2l0V2ViVmlld0NsYXNzLCBzY3JpcHRfcHJv
bXB0KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBnX3NpZ25hbF9hY2N1bXVsYXRvcl90cnVl
X2hhbmRsZWQsIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgd2Via2l0X21hcnNoYWxfQk9P
TEVBTl9fU1RSSU5HX1NUUklOR19QT0lOVEVSLAotICAgICAgICAgICAgICAgICAgICAgICAgIEdf
VFlQRV9CT09MRUFOLCAzLAotICAgICAgICAgICAgICAgICAgICAgICAgIEdfVFlQRV9TVFJJTkcs
IEdfVFlQRV9TVFJJTkcsIEdfVFlQRV9QT0lOVEVSKTsKKyAgICBzaWduYWxzW1NDUklQVF9ESUFM
T0ddID0KKyAgICAgICAgZ19zaWduYWxfbmV3KCJzY3JpcHQtZGlhbG9nIiwKKyAgICAgICAgICAg
ICAgICAgICAgIEdfVFlQRV9GUk9NX0NMQVNTKHdlYlZpZXdDbGFzcyksCisgICAgICAgICAgICAg
ICAgICAgICBHX1NJR05BTF9SVU5fTEFTVCwKKyAgICAgICAgICAgICAgICAgICAgIEdfU1RSVUNU
X09GRlNFVChXZWJLaXRXZWJWaWV3Q2xhc3MsIHNjcmlwdF9kaWFsb2cpLAorICAgICAgICAgICAg
ICAgICAgICAgZ19zaWduYWxfYWNjdW11bGF0b3JfdHJ1ZV9oYW5kbGVkLCAwLAorICAgICAgICAg
ICAgICAgICAgICAgd2Via2l0X21hcnNoYWxfQk9PTEVBTl9fQk9YRUQsCisgICAgICAgICAgICAg
ICAgICAgICBHX1RZUEVfQk9PTEVBTiwgMSwKKyAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9U
WVBFX1NDUklQVF9ESUFMT0cgfCBHX1NJR05BTF9UWVBFX1NUQVRJQ19TQ09QRSk7CiAKICAgICAv
KioKICAgICAgKiBXZWJLaXRXZWJWaWV3OjpkZWNpZGUtcG9saWN5OgpAQCAtODA1LDIzICs4MTMs
MjUgQEAgdm9pZCB3ZWJraXRXZWJWaWV3Q2xvc2VQYWdlKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcp
CiAKIHZvaWQgd2Via2l0V2ViVmlld1J1bkphdmFTY3JpcHRBbGVydChXZWJLaXRXZWJWaWV3KiB3
ZWJWaWV3LCBjb25zdCBDU3RyaW5nJiBtZXNzYWdlKQogeworICAgIFdlYktpdFNjcmlwdERpYWxv
ZyBkaWFsb2coV0VCS0lUX1NDUklQVF9ESUFMT0dfQUxFUlQsIG1lc3NhZ2UpOwogICAgIGdib29s
ZWFuIHJldHVyblZhbHVlOwotICAgIGdfc2lnbmFsX2VtaXQod2ViVmlldywgc2lnbmFsc1tTQ1JJ
UFRfQUxFUlRdLCAwLCBtZXNzYWdlLmRhdGEoKSwgJnJldHVyblZhbHVlKTsKKyAgICBnX3NpZ25h
bF9lbWl0KHdlYlZpZXcsIHNpZ25hbHNbU0NSSVBUX0RJQUxPR10sIDAsICZkaWFsb2csICZyZXR1
cm5WYWx1ZSk7CiB9CiAKIGJvb2wgd2Via2l0V2ViVmlld1J1bkphdmFTY3JpcHRDb25maXJtKFdl
YktpdFdlYlZpZXcqIHdlYlZpZXcsIGNvbnN0IENTdHJpbmcmIG1lc3NhZ2UpCiB7Ci0gICAgZ2Jv
b2xlYW4gcmV0dXJuVmFsdWUsIGNvbmZpcm1lZDsKLSAgICBnX3NpZ25hbF9lbWl0KHdlYlZpZXcs
IHNpZ25hbHNbU0NSSVBUX0NPTkZJUk1dLCAwLCBtZXNzYWdlLmRhdGEoKSwgJmNvbmZpcm1lZCwg
JnJldHVyblZhbHVlKTsKLSAgICByZXR1cm4gY29uZmlybWVkOworICAgIFdlYktpdFNjcmlwdERp
YWxvZyBkaWFsb2coV0VCS0lUX1NDUklQVF9ESUFMT0dfQ09ORklSTSwgbWVzc2FnZSk7CisgICAg
Z2Jvb2xlYW4gcmV0dXJuVmFsdWU7CisgICAgZ19zaWduYWxfZW1pdCh3ZWJWaWV3LCBzaWduYWxz
W1NDUklQVF9ESUFMT0ddLCAwLCAmZGlhbG9nLCAmcmV0dXJuVmFsdWUpOworICAgIHJldHVybiBk
aWFsb2cuY29uZmlybWVkOwogfQogCiBXS1N0cmluZ1JlZiB3ZWJraXRXZWJWaWV3UnVuSmF2YVNj
cmlwdFByb21wdChXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBjb25zdCBDU3RyaW5nJiBtZXNzYWdl
LCBjb25zdCBDU3RyaW5nJiBkZWZhdWx0VGV4dCkKIHsKKyAgICBXZWJLaXRTY3JpcHREaWFsb2cg
ZGlhbG9nKFdFQktJVF9TQ1JJUFRfRElBTE9HX1BST01QVCwgbWVzc2FnZSwgZGVmYXVsdFRleHQp
OwogICAgIGdib29sZWFuIHJldHVyblZhbHVlOwotICAgIEdPd25QdHI8Y2hhcj4gdGV4dDsKLSAg
ICBnX3NpZ25hbF9lbWl0KHdlYlZpZXcsIHNpZ25hbHNbU0NSSVBUX1BST01QVF0sIDAsIG1lc3Nh
Z2UuZGF0YSgpLCBkZWZhdWx0VGV4dC5kYXRhKCksICZ0ZXh0Lm91dFB0cigpLCAmcmV0dXJuVmFs
dWUpOwotICAgIHJldHVybiB0ZXh0ID8gV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcodGV4
dC5nZXQoKSkgOiAwOworICAgIGdfc2lnbmFsX2VtaXQod2ViVmlldywgc2lnbmFsc1tTQ1JJUFRf
RElBTE9HXSwgMCwgJmRpYWxvZywgJnJldHVyblZhbHVlKTsKKyAgICByZXR1cm4gZGlhbG9nLnRl
eHQuaXNOdWxsKCkgPyAwIDogV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoZGlhbG9nLnRl
eHQuZGF0YSgpKTsKIH0KIAogdm9pZCB3ZWJraXRXZWJWaWV3TWFrZVBvbGljeURlY2lzaW9uKFdl
YktpdFdlYlZpZXcqIHdlYlZpZXcsIFdlYktpdFBvbGljeURlY2lzaW9uVHlwZSB0eXBlLCBXZWJL
aXRQb2xpY3lEZWNpc2lvbiogZGVjaXNpb24pCkBAIC0xNTAxLDMgKzE1MTEsOTIgQEAgV2ViS2l0
RmluZENvbnRyb2xsZXIqIHdlYmtpdF93ZWJfdmlld19nZXRfZmluZF9jb250cm9sbGVyKFdlYktp
dFdlYlZpZXcqIHdlYlZpZXcKIAogICAgIHJldHVybiB3ZWJWaWV3LT5wcml2LT5maW5kQ29udHJv
bGxlci5nZXQoKTsKIH0KKworLy8gV2ViS2l0U2NyaXB0RGlhbG9nLgorLyoqCisgKiB3ZWJraXRf
c2NyaXB0X2RpYWxvZ19nZXRfZGlhbG9nX3R5cGU6CisgKiBAZGlhbG9nOiBhICNXZWJLaXRTY3Jp
cHREaWFsb2cKKyAqCisgKiBHZXQgdGhlIGRpYWxvZyB0eXBlIG9mIGEgI1dlYktpdFNjcmlwdERp
YWxvZy4KKyAqCisgKiBSZXR1cm5zOiB0aGUgI1dlYktpdFNjcmlwdERpYWxvZ1R5cGUgb2YgQGRp
YWxvZworICovCitXZWJLaXRTY3JpcHREaWFsb2dUeXBlIHdlYmtpdF9zY3JpcHRfZGlhbG9nX2dl
dF9kaWFsb2dfdHlwZShXZWJLaXRTY3JpcHREaWFsb2cqIGRpYWxvZykKK3sKKyAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChkaWFsb2csIFdFQktJVF9TQ1JJUFRfRElBTE9HX0FMRVJUKTsKKworICAg
IHJldHVybiBzdGF0aWNfY2FzdDxXZWJLaXRTY3JpcHREaWFsb2dUeXBlPihkaWFsb2ctPnR5cGUp
OworfQorCisvKioKKyAqIHdlYmtpdF9zY3JpcHRfZGlhbG9nX2dldF9tZXNzYWdlOgorICogQGRp
YWxvZzogYSAjV2ViS2l0U2NyaXB0RGlhbG9nCisgKgorICogR2V0IHRoZSBtZXNzYWdlIG9mIGEg
I1dlYktpdFNjcmlwdERpYWxvZy4KKyAqCisgKiBSZXR1cm5zOiB0aGUgbWVzc2FnZSBvZiBAZGlh
bG9nLgorICovCitjb25zdCBjaGFyKiB3ZWJraXRfc2NyaXB0X2RpYWxvZ19nZXRfbWVzc2FnZShX
ZWJLaXRTY3JpcHREaWFsb2cqIGRpYWxvZykKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChk
aWFsb2csIDApOworCisgICAgcmV0dXJuIGRpYWxvZy0+bWVzc2FnZS5kYXRhKCk7Cit9CisKKy8q
KgorICogd2Via2l0X3NjcmlwdF9kaWFsb2dfY29uZmlybV9zZXRfY29uZmlybWVkOgorICogQGRp
YWxvZzogYSAjV2ViS2l0U2NyaXB0RGlhbG9nCisgKiBAY29uZmlybWVkOiB3aGV0aGVyIHVzZXIg
Y29uZmlybWVkIHRoZSBkaWFsb2cKKyAqCisgKiBUaGlzIG1ldGhvZCBpcyB1c2VkIGZvciAlV0VC
S0lUX1NDUklQVF9ESUFMT0dfQ09ORklSTSBkaWFsb2dzIHdoZW4KKyAqICNXZWJLaXRXZWJWaWV3
OjpzY3JpcHQtZGlhbG9nIHNpZ25hbCBpcyBlbWl0dGVkIHRvIHNldCB3aGV0aGVyIHRoZSB1c2Vy
CisgKiBjb25maXJtZWQgdGhlIGRpYWxvZyBvciBub3QuIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0
aW9uIG9mICNXZWJLaXRXZWJWaWV3OjpzY3JpcHQtZGlhbG9nCisgKiBzaWduYWwgc2V0cyAlVFJV
RSB3aGVuIE9LIGJ1dHRvbiBpcyBjbGlja2VkIGFuZCAlRkFMU0Ugb3RoZXJ3aXNlLgorICogSXQn
cyBhbiBlcnJvciB0byB1c2UgdGhpcyBtZXRob2Qgd2l0aCBhICNXZWJLaXRTY3JpcHREaWFsb2cg
dGhhdCBpcyBub3Qgb2YgdHlwZQorICogJVdFQktJVF9TQ1JJUFRfRElBTE9HX0NPTkZJUk0uCisg
Ki8KK3ZvaWQgd2Via2l0X3NjcmlwdF9kaWFsb2dfY29uZmlybV9zZXRfY29uZmlybWVkKFdlYktp
dFNjcmlwdERpYWxvZyogZGlhbG9nLCBnYm9vbGVhbiBjb25maXJtZWQpCit7CisgICAgZ19yZXR1
cm5faWZfZmFpbChkaWFsb2cpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoZGlhbG9nLT50eXBlID09
IFdFQktJVF9TQ1JJUFRfRElBTE9HX0NPTkZJUk0pOworCisgICAgZGlhbG9nLT5jb25maXJtZWQg
PSBjb25maXJtZWQ7Cit9CisKKy8qKgorICogd2Via2l0X3NjcmlwdF9kaWFsb2dfcHJvbXB0X2dl
dF9kZWZhdWx0X3RleHQ6CisgKiBAZGlhbG9nOiBhICNXZWJLaXRTY3JpcHREaWFsb2cKKyAqCisg
KiBHZXQgdGhlIGRlZmF1bHQgdGV4dCBvZiBhICNXZWJLaXRTY3JpcHREaWFsb2cgb2YgdHlwZSAl
V0VCS0lUX1NDUklQVF9ESUFMT0dfUFJPTVBULgorICogSXQncyBhbiBlcnJvciB0byB1c2UgdGhp
cyBtZXRob2Qgd2l0aCBhICNXZWJLaXRTY3JpcHREaWFsb2cgdGhhdCBpcyBub3Qgb2YgdHlwZQor
ICogJVdFQktJVF9TQ1JJUFRfRElBTE9HX1BST01QVC4KKyAqCisgKiBSZXR1cm5zOiB0aGUgZGVm
YXVsdCB0ZXh0IG9mIEBkaWFsb2cKKyAqLworY29uc3QgY2hhciogd2Via2l0X3NjcmlwdF9kaWFs
b2dfcHJvbXB0X2dldF9kZWZhdWx0X3RleHQoV2ViS2l0U2NyaXB0RGlhbG9nKiBkaWFsb2cpCit7
CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoZGlhbG9nLCAwKTsKKyAgICBnX3JldHVybl92YWxf
aWZfZmFpbChkaWFsb2ctPnR5cGUgPT0gV0VCS0lUX1NDUklQVF9ESUFMT0dfUFJPTVBULCAwKTsK
KworICAgIHJldHVybiBkaWFsb2ctPmRlZmF1bHRUZXh0LmRhdGEoKTsKK30KKworLyoqCisgKiB3
ZWJraXRfc2NyaXB0X2RpYWxvZ19wcm9tcHRfc2V0X3RleHQ6CisgKiBAZGlhbG9nOiBhICNXZWJL
aXRTY3JpcHREaWFsb2cKKyAqIEB0ZXh0OiB0aGUgdGV4dCB0byBzZXQKKyAqCisgKiBUaGlzIG1l
dGhvZCBpcyB1c2VkIGZvciAlV0VCS0lUX1NDUklQVF9ESUFMT0dfUFJPTVBUIGRpYWxvZ3Mgd2hl
bgorICogI1dlYktpdFdlYlZpZXc6OnNjcmlwdC1kaWFsb2cgc2lnbmFsIGlzIGVtaXR0ZWQgdG8g
c2V0IHRoZSB0ZXh0CisgKiBlbnRlcmVkIGJ5IHRoZSB1c2VyLiBUaGUgZGVmYXVsdCBpbXBsZW1l
bnRhdGlvbiBvZiAjV2ViS2l0V2ViVmlldzo6c2NyaXB0LWRpYWxvZworICogc2lnbmFsIHNldHMg
dGhlIHRleHQgb2YgdGhlIGVudHJ5IGZvcm0gd2hlbiBPSyBidXR0b24gaXMgY2xpY2tlZCwgb3Ro
ZXJ3aXNlICVOVUxMIGlzIHNldC4KKyAqIEl0J3MgYW4gZXJyb3IgdG8gdXNlIHRoaXMgbWV0aG9k
IHdpdGggYSAjV2ViS2l0U2NyaXB0RGlhbG9nIHRoYXQgaXMgbm90IG9mIHR5cGUKKyAqICVXRUJL
SVRfU0NSSVBUX0RJQUxPR19QUk9NUFQuCisgKi8KK3ZvaWQgd2Via2l0X3NjcmlwdF9kaWFsb2df
cHJvbXB0X3NldF90ZXh0KFdlYktpdFNjcmlwdERpYWxvZyogZGlhbG9nLCBjb25zdCBjaGFyKiB0
ZXh0KQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoZGlhbG9nKTsKKyAgICBnX3JldHVybl9pZl9m
YWlsKGRpYWxvZy0+dHlwZSA9PSBXRUJLSVRfU0NSSVBUX0RJQUxPR19QUk9NUFQpOworCisgICAg
ZGlhbG9nLT50ZXh0ID0gdGV4dDsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL1dlYktpdFdlYlZpZXcuaAppbmRleCBjYjZiMjJmLi41MDYwYjg1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmgKKysrIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5oCkBAIC01MSw2
ICs1MSw5IEBAIEdfQkVHSU5fREVDTFMKIHR5cGVkZWYgc3RydWN0IF9XZWJLaXRXZWJWaWV3Q2xh
c3MgV2ViS2l0V2ViVmlld0NsYXNzOwogdHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFdlYlZpZXdQcml2
YXRlIFdlYktpdFdlYlZpZXdQcml2YXRlOwogCisjZGVmaW5lIFdFQktJVF9UWVBFX1NDUklQVF9E
SUFMT0cgKHdlYmtpdF9zY3JpcHRfZGlhbG9nX2dldF90eXBlKCkpCit0eXBlZGVmIHN0cnVjdCBf
V2ViS2l0U2NyaXB0RGlhbG9nIFdlYktpdFNjcmlwdERpYWxvZzsKKwogLyoqCiAgKiBXZWJLaXRQ
b2xpY3lEZWNpc2lvblR5cGU6CiAgKiBAV0VCS0lUX1BPTElDWV9ERUNJU0lPTl9UWVBFX05BVklH
QVRJT05fQUNUSU9OOiBUaGlzIHR5cGUgb2YgcG9saWN5IGRlY2lzaW9uCkBAIC0xMDcsNiArMTEw
LDIzIEBAIHR5cGVkZWYgZW51bSB7CiAgICAgV0VCS0lUX0xPQURfRklOSVNIRUQKIH0gV2ViS2l0
TG9hZEV2ZW50OwogCisvKioKKyAqIFdlYktpdFNjcmlwdERpYWxvZ1R5cGU6CisgKiBAV0VCS0lU
X1NDUklQVF9ESUFMT0dfQUxFUlQ6IEFsZXJ0IHNjcmlwdCBkaWFsb2csIHVzZWQgdG8gc2hvdyBh
CisgKiBtZXNzYWdlIHRvIHRoZSB1c2VyLgorICogQFdFQktJVF9TQ1JJUFRfRElBTE9HX0NPTkZJ
Uk06IENvbmZpcm0gc2NyaXB0IGRpYWxvZywgdXNlZCB0byBhc2sKKyAqIGNvbmZpcm1hdGlvbiB0
byB0aGUgdXNlci4KKyAqIEBXRUJLSVRfU0NSSVBUX0RJQUxPR19QUk9NUFQ6IFByb21wdCBzY3Jp
cHQgZGlhbG9nLCB1c2VkIHRvIGFzaworICogaW5mb3JtYXRpb24gdG8gdGhlIHVzZXIuCisgKgor
ICogRW51bSB2YWx1ZXMgdXNlZCBmb3IgZGV0ZXJtaW5pbmcgdGhlIHR5cGUgb2YgI1dlYktpdFNj
cmlwdERpYWxvZworICovCit0eXBlZGVmIGVudW0geworICAgIFdFQktJVF9TQ1JJUFRfRElBTE9H
X0FMRVJULAorICAgIFdFQktJVF9TQ1JJUFRfRElBTE9HX0NPTkZJUk0sCisgICAgV0VCS0lUX1ND
UklQVF9ESUFMT0dfUFJPTVBUCit9IFdlYktpdFNjcmlwdERpYWxvZ1R5cGU7CisKIHN0cnVjdCBf
V2ViS2l0V2ViVmlldyB7CiAgICAgV2ViS2l0V2ViVmlld0Jhc2UgcGFyZW50OwogCkBAIC0xMjgs
MTUgKzE0OCw5IEBAIHN0cnVjdCBfV2ViS2l0V2ViVmlld0NsYXNzIHsKICAgICB2b2lkICAgICAg
ICgqIHJlYWR5X3RvX3Nob3cpICAgICAgICAoV2ViS2l0V2ViVmlldyAgICAgICAgICAgICAqd2Vi
X3ZpZXcpOwogICAgIHZvaWQgICAgICAgKCogY2xvc2UpICAgICAgICAgICAgICAgIChXZWJLaXRX
ZWJWaWV3ICAgICAgICAgICAgICp3ZWJfdmlldyk7CiAKLSAgICBnYm9vbGVhbiAgICgqIHNjcmlw
dF9hbGVydCkgICAgICAgICAoV2ViS2l0V2ViVmlldyAgICAgICAgICAgICAqd2ViX3ZpZXcsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAgICAg
ICAgICAgICAgKm1lc3NhZ2UpOwotICAgIGdib29sZWFuICAgKCogc2NyaXB0X2NvbmZpcm0pICAg
ICAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAgICAgICp3ZWJfdmlldywKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgICAgICAgICAgICAgICAqbWVz
c2FnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2Jvb2xlYW4g
ICAgICAgICAgICAgICAgICAqY29uZmlybWVkKTsKLSAgICBnYm9vbGVhbiAgICgqIHNjcmlwdF9w
cm9tcHQpICAgICAgICAoV2ViS2l0V2ViVmlldyAgICAgICAgICAgICAqd2ViX3ZpZXcsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAgICAgICAg
ICAgICAgKm1lc3NhZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IGdjaGFyICAgICAgICAgICAgICAgKmRlZmF1bHRfdGV4dCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2NoYXIgICAgICAgICAgICAgICAgICAgICoqdGV4
dCk7CisgICAgZ2Jvb2xlYW4gICAoKiBzY3JpcHRfZGlhbG9nKSAgICAgICAgKFdlYktpdFdlYlZp
ZXcgICAgICAgICAgICAgKndlYl92aWV3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBXZWJLaXRTY3JpcHREaWFsb2cgICAgICAgICpkaWFsb2cpOworCiAgICAgZ2Jv
b2xlYW4gICAoKiBkZWNpZGVfcG9saWN5KSAgICAgICAgKFdlYktpdFdlYlZpZXcgICAgICAgICAg
ICAgKndlYl92aWV3LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBX
ZWJLaXRQb2xpY3lEZWNpc2lvbiAgICAgICpkZWNpc2lvbiwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgV2ViS2l0UG9saWN5RGVjaXNpb25UeXBlICAgdHlwZSk7CkBA
IC0yNjksNiArMjgzLDI3IEBAIHdlYmtpdF93ZWJfdmlld19leGVjdXRlX2VkaXRpbmdfY29tbWFu
ZCAgICAgICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAgICAgICp3CiBXRUJLSVRfQVBJIFdl
YktpdEZpbmRDb250cm9sbGVyICoKIHdlYmtpdF93ZWJfdmlld19nZXRfZmluZF9jb250cm9sbGVy
ICAgICAgICAgICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAgICAgICp3ZWJfdmlldyk7CiAK
Ky8qIFdlYktpdFNjcmlwdERpYWxvZyAqLworV0VCS0lUX0FQSSBHVHlwZQord2Via2l0X3Njcmlw
dF9kaWFsb2dfZ2V0X3R5cGUgICAgICAgICAgICAgICAgICAgICAgKHZvaWQpOworCitXRUJLSVRf
QVBJIFdlYktpdFNjcmlwdERpYWxvZ1R5cGUKK3dlYmtpdF9zY3JpcHRfZGlhbG9nX2dldF9kaWFs
b2dfdHlwZSAgICAgICAgICAgICAgIChXZWJLaXRTY3JpcHREaWFsb2cgICAgICAgICpkaWFsb2cp
OworCitXRUJLSVRfQVBJIGNvbnN0IGdjaGFyICoKK3dlYmtpdF9zY3JpcHRfZGlhbG9nX2dldF9t
ZXNzYWdlICAgICAgICAgICAgICAgICAgIChXZWJLaXRTY3JpcHREaWFsb2cgICAgICAgICpkaWFs
b2cpOworCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9zY3JpcHRfZGlhbG9nX2NvbmZpcm1fc2V0
X2NvbmZpcm1lZCAgICAgICAgIChXZWJLaXRTY3JpcHREaWFsb2cgICAgICAgICpkaWFsb2csCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2Jvb2xl
YW4gICAgICAgICAgICAgICAgICAgY29uZmlybWVkKTsKKworV0VCS0lUX0FQSSBjb25zdCBnY2hh
ciAqCit3ZWJraXRfc2NyaXB0X2RpYWxvZ19wcm9tcHRfZ2V0X2RlZmF1bHRfdGV4dCAgICAgICAo
V2ViS2l0U2NyaXB0RGlhbG9nICAgICAgICAqZGlhbG9nKTsKKworV0VCS0lUX0FQSSB2b2lkCit3
ZWJraXRfc2NyaXB0X2RpYWxvZ19wcm9tcHRfc2V0X3RleHQgICAgICAgICAgICAgICAoV2ViS2l0
U2NyaXB0RGlhbG9nICAgICAgICAqZGlhbG9nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAgICAgICAgICAgICAgKnRleHQp
OworCiBHX0VORF9ERUNMUwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1zZWN0aW9ucy50eHQgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstc2VjdGlvbnMudHh0CmluZGV4
IDQ5YjQzYzAuLmE4ZjU0MDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1zZWN0aW9ucy50eHQKKysrIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLXNlY3Rpb25zLnR4dApAQCAtNDksNiAr
NDksOCBAQCB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X3R5cGUKIFdlYktpdFdlYlZpZXcKIFdlYktp
dExvYWRFdmVudAogV2ViS2l0UG9saWN5RGVjaXNpb25UeXBlCitXZWJLaXRTY3JpcHREaWFsb2cK
K1dlYktpdFNjcmlwdERpYWxvZ1R5cGUKIAogPFNVQlNFQ1RJT04gRWRpdGluZyBDb21tYW5kcz4K
IFdFQktJVF9FRElUSU5HX0NPTU1BTkRfQ1VUCkBAIC04Nyw2ICs4OSwxMSBAQCB3ZWJraXRfd2Vi
X3ZpZXdfY2FuX2V4ZWN1dGVfZWRpdGluZ19jb21tYW5kCiB3ZWJraXRfd2ViX3ZpZXdfY2FuX2V4
ZWN1dGVfZWRpdGluZ19jb21tYW5kX2ZpbmlzaAogd2Via2l0X3dlYl92aWV3X2V4ZWN1dGVfZWRp
dGluZ19jb21tYW5kCiB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2ZpbmRfY29udHJvbGxlcgord2Via2l0
X3NjcmlwdF9kaWFsb2dfZ2V0X2RpYWxvZ190eXBlCit3ZWJraXRfc2NyaXB0X2RpYWxvZ19nZXRf
bWVzc2FnZQord2Via2l0X3NjcmlwdF9kaWFsb2dfY29uZmlybV9zZXRfY29uZmlybWVkCit3ZWJr
aXRfc2NyaXB0X2RpYWxvZ19wcm9tcHRfZ2V0X2RlZmF1bHRfdGV4dAord2Via2l0X3NjcmlwdF9k
aWFsb2dfcHJvbXB0X3NldF90ZXh0CiAKIDxTVUJTRUNUSU9OIFN0YW5kYXJkPgogV2ViS2l0V2Vi
Vmlld0NsYXNzCkBAIC05Niw5ICsxMDMsMTEgQEAgV0VCS0lUX1RZUEVfV0VCX1ZJRVcKIFdFQktJ
VF9XRUJfVklFV19DTEFTUwogV0VCS0lUX0lTX1dFQl9WSUVXX0NMQVNTCiBXRUJLSVRfV0VCX1ZJ
RVdfR0VUX0NMQVNTCitXRUJLSVRfVFlQRV9TQ1JJUFRfRElBTE9HCiAKIDxTVUJTRUNUSU9OIFBy
aXZhdGU+CiB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3R5cGUKK3dlYmtpdF9zY3JpcHRfZGlhbG9nX2dl
dF90eXBlCiBXZWJLaXRXZWJWaWV3UHJpdmF0ZQogPC9TRUNUSU9OPgogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGsudHlwZXMgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGsudHlwZXMKaW5k
ZXggMmUwZjUwMC4uOGU4ZDdiMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLnR5cGVzCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay50eXBlcwpAQCAtMTAsMyArMTAsNCBAQCB3ZWJr
aXRfdXJpX3JlcXVlc3RfZ2V0X3R5cGUKIHdlYmtpdF93aW5kb3dfcHJvcGVydGllc19nZXRfdHlw
ZQogd2Via2l0X2Rvd25sb2FkX2dldF90eXBlCiB3ZWJraXRfZmluZF9jb250cm9sbGVyX2dldF90
eXBlCit3ZWJraXRfc2NyaXB0X2RpYWxvZ19nZXRfdHlwZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdFdlYlZpZXcuY3BwIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdFdlYlZpZXcuY3Bw
CmluZGV4IDI2OTkwOGIuLmJmZWRhMTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRXZWJWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0V2ViVmlldy5jcHAKQEAgLTEw
NCwxMiArMTA0LDYgQEAgcHVibGljOgogICAgICAgICBDbG9zZQogICAgIH07CiAKLSAgICBlbnVt
IFNjcmlwdFR5cGUgewotICAgICAgICBBbGVydCwKLSAgICAgICAgQ29uZmlybSwKLSAgICAgICAg
UHJvbXB0Ci0gICAgfTsKLQogICAgIGNsYXNzIFdpbmRvd1Byb3BlcnRpZXMgewogICAgIHB1Ymxp
YzoKICAgICAgICAgV2luZG93UHJvcGVydGllcygpCkBAIC0yMjQsNDMgKzIxOCw1MiBAQCBwdWJs
aWM6CiAgICAgICAgIHJldHVybiBuZXdXZWJWaWV3OwogICAgIH0KIAotICAgIHN0YXRpYyBnYm9v
bGVhbiBzY3JpcHRBbGVydChXZWJLaXRXZWJWaWV3KiwgY29uc3QgY2hhciogbWVzc2FnZSwgVUlD
bGllbnRUZXN0KiB0ZXN0KQorICAgIHZvaWQgc2NyaXB0QWxlcnQoV2ViS2l0U2NyaXB0RGlhbG9n
KiBkaWFsb2cpCiAgICAgewotICAgICAgICBzd2l0Y2ggKHRlc3QtPm1fc2NyaXB0VHlwZSkgewot
ICAgICAgICBjYXNlIFVJQ2xpZW50VGVzdDo6QWxlcnQ6Ci0gICAgICAgICAgICBnX2Fzc2VydF9j
bXBzdHIobWVzc2FnZSwgPT0sIGtBbGVydERpYWxvZ01lc3NhZ2UpOworICAgICAgICBzd2l0Y2gg
KG1fc2NyaXB0RGlhbG9nVHlwZSkgeworICAgICAgICBjYXNlIFdFQktJVF9TQ1JJUFRfRElBTE9H
X0FMRVJUOgorICAgICAgICAgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9zY3JpcHRfZGlhbG9n
X2dldF9tZXNzYWdlKGRpYWxvZyksID09LCBrQWxlcnREaWFsb2dNZXNzYWdlKTsKICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIFVJQ2xpZW50VGVzdDo6Q29uZmlybToKLSAgICAgICAg
ICAgIGdfYXNzZXJ0KHRlc3QtPm1fc2NyaXB0RGlhbG9nQ29uZmlybWVkKTsKLSAgICAgICAgICAg
IGdfYXNzZXJ0X2NtcHN0cihtZXNzYWdlLCA9PSwgImNvbmZpcm1lZCIpOworICAgICAgICBjYXNl
IFdFQktJVF9TQ1JJUFRfRElBTE9HX0NPTkZJUk06CisgICAgICAgICAgICBnX2Fzc2VydChtX3Nj
cmlwdERpYWxvZ0NvbmZpcm1lZCk7CisgICAgICAgICAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0
X3NjcmlwdF9kaWFsb2dfZ2V0X21lc3NhZ2UoZGlhbG9nKSwgPT0sICJjb25maXJtZWQiKTsKIAog
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgVUlDbGllbnRUZXN0OjpQcm9tcHQ6Ci0g
ICAgICAgICAgICBnX2Fzc2VydF9jbXBzdHIobWVzc2FnZSwgPT0sIGtQcm9tcHREaWFsb2dSZXR1
cm5lZFRleHQpOworICAgICAgICBjYXNlIFdFQktJVF9TQ1JJUFRfRElBTE9HX1BST01QVDoKKyAg
ICAgICAgICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfc2NyaXB0X2RpYWxvZ19nZXRfbWVzc2Fn
ZShkaWFsb2cpLCA9PSwga1Byb21wdERpYWxvZ1JldHVybmVkVGV4dCk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQogCi0gICAgICAgIGdfbWFpbl9sb29wX3F1aXQodGVzdC0+bV9tYWlu
TG9vcCk7Ci0KLSAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgICAgIGdfbWFpbl9sb29wX3F1aXQo
bV9tYWluTG9vcCk7CiAgICAgfQogCi0gICAgc3RhdGljIGdib29sZWFuIHNjcmlwdENvbmZpcm0o
V2ViS2l0V2ViVmlldyosIGNvbnN0IGNoYXIqIG1lc3NhZ2UsIGdib29sZWFuKiBjb25maXJtZWQs
IFVJQ2xpZW50VGVzdCogdGVzdCkKKyAgICB2b2lkIHNjcmlwdENvbmZpcm0oV2ViS2l0U2NyaXB0
RGlhbG9nKiBkaWFsb2cpCiAgICAgewotICAgICAgICBnX2Fzc2VydF9jbXBzdHIobWVzc2FnZSwg
PT0sIGtDb25maXJtRGlhbG9nTWVzc2FnZSk7Ci0gICAgICAgIGdfYXNzZXJ0KGNvbmZpcm1lZCk7
Ci0gICAgICAgIHRlc3QtPm1fc2NyaXB0RGlhbG9nQ29uZmlybWVkID0gIXRlc3QtPm1fc2NyaXB0
RGlhbG9nQ29uZmlybWVkOwotICAgICAgICAqY29uZmlybWVkID0gdGVzdC0+bV9zY3JpcHREaWFs
b2dDb25maXJtZWQ7CisgICAgICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfc2NyaXB0X2RpYWxv
Z19nZXRfbWVzc2FnZShkaWFsb2cpLCA9PSwga0NvbmZpcm1EaWFsb2dNZXNzYWdlKTsKKyAgICAg
ICAgbV9zY3JpcHREaWFsb2dDb25maXJtZWQgPSAhbV9zY3JpcHREaWFsb2dDb25maXJtZWQ7Cisg
ICAgICAgIHdlYmtpdF9zY3JpcHRfZGlhbG9nX2NvbmZpcm1fc2V0X2NvbmZpcm1lZChkaWFsb2cs
IG1fc2NyaXB0RGlhbG9nQ29uZmlybWVkKTsKKyAgICB9CiAKLSAgICAgICAgcmV0dXJuIFRSVUU7
CisgICAgdm9pZCBzY3JpcHRQcm9tcHQoV2ViS2l0U2NyaXB0RGlhbG9nKiBkaWFsb2cpCisgICAg
eworICAgICAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3NjcmlwdF9kaWFsb2dfZ2V0X21lc3Nh
Z2UoZGlhbG9nKSwgPT0sIGtQcm9tcHREaWFsb2dNZXNzYWdlKTsKKyAgICAgICAgZ19hc3NlcnRf
Y21wc3RyKHdlYmtpdF9zY3JpcHRfZGlhbG9nX3Byb21wdF9nZXRfZGVmYXVsdF90ZXh0KGRpYWxv
ZyksID09LCAiZGVmYXVsdCIpOworICAgICAgICB3ZWJraXRfc2NyaXB0X2RpYWxvZ19wcm9tcHRf
c2V0X3RleHQoZGlhbG9nLCBrUHJvbXB0RGlhbG9nUmV0dXJuZWRUZXh0KTsKICAgICB9CiAKLSAg
ICBzdGF0aWMgZ2Jvb2xlYW4gc2NyaXB0UHJvbXB0KFdlYktpdFdlYlZpZXcqLCBjb25zdCBjaGFy
KiBtZXNzYWdlLCBjb25zdCBjaGFyKiBkZWZhdWx0VGV4dCwgY2hhciAqKnRleHQsIFVJQ2xpZW50
VGVzdCogdGVzdCkKKyAgICBzdGF0aWMgZ2Jvb2xlYW4gc2NyaXB0RGlhbG9nKFdlYktpdFdlYlZp
ZXcqLCBXZWJLaXRTY3JpcHREaWFsb2cqIGRpYWxvZywgVUlDbGllbnRUZXN0KiB0ZXN0KQogICAg
IHsKLSAgICAgICAgZ19hc3NlcnRfY21wc3RyKG1lc3NhZ2UsID09LCBrUHJvbXB0RGlhbG9nTWVz
c2FnZSk7Ci0gICAgICAgIGdfYXNzZXJ0X2NtcHN0cihkZWZhdWx0VGV4dCwgPT0sICJkZWZhdWx0
Iik7Ci0gICAgICAgIGdfYXNzZXJ0KHRleHQpOwotICAgICAgICAqdGV4dCA9IGdfc3RyZHVwKGtQ
cm9tcHREaWFsb2dSZXR1cm5lZFRleHQpOworICAgICAgICBzd2l0Y2ggKHdlYmtpdF9zY3JpcHRf
ZGlhbG9nX2dldF9kaWFsb2dfdHlwZShkaWFsb2cpKSB7CisgICAgICAgIGNhc2UgV0VCS0lUX1ND
UklQVF9ESUFMT0dfQUxFUlQ6CisgICAgICAgICAgICB0ZXN0LT5zY3JpcHRBbGVydChkaWFsb2cp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV0VCS0lUX1NDUklQVF9ESUFMT0df
Q09ORklSTToKKyAgICAgICAgICAgIHRlc3QtPnNjcmlwdENvbmZpcm0oZGlhbG9nKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdFQktJVF9TQ1JJUFRfRElBTE9HX1BST01QVDoK
KyAgICAgICAgICAgIHRlc3QtPnNjcmlwdFByb21wdChkaWFsb2cpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KIAogICAgICAgICByZXR1cm4gVFJVRTsKICAgICB9CkBAIC0yNzYsMTUg
KzI3OSwxMyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgVUlDbGllbnRUZXN0KCkKLSAgICAgICAg
OiBtX3NjcmlwdFR5cGUoQWxlcnQpCisgICAgICAgIDogbV9zY3JpcHREaWFsb2dUeXBlKFdFQktJ
VF9TQ1JJUFRfRElBTE9HX0FMRVJUKQogICAgICAgICAsIG1fc2NyaXB0RGlhbG9nQ29uZmlybWVk
KHRydWUpCiAgICAgICAgICwgbV9tb3VzZVRhcmdldE1vZGlmaWVycygwKQogICAgIHsKICAgICAg
ICAgd2Via2l0X3NldHRpbmdzX3NldF9qYXZhc2NyaXB0X2Nhbl9vcGVuX3dpbmRvd3NfYXV0b21h
dGljYWxseSh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3NldHRpbmdzKG1fd2ViVmlldyksIFRSVUUpOwog
ICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG1fd2ViVmlldywgImNyZWF0ZSIsIEdfQ0FMTEJBQ0so
dmlld0NyZWF0ZSksIHRoaXMpOwotICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG1fd2ViVmlldywg
InNjcmlwdC1hbGVydCIsIEdfQ0FMTEJBQ0soc2NyaXB0QWxlcnQpLCB0aGlzKTsKLSAgICAgICAg
Z19zaWduYWxfY29ubmVjdChtX3dlYlZpZXcsICJzY3JpcHQtY29uZmlybSIsIEdfQ0FMTEJBQ0so
c2NyaXB0Q29uZmlybSksIHRoaXMpOwotICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG1fd2ViVmll
dywgInNjcmlwdC1wcm9tcHQiLCBHX0NBTExCQUNLKHNjcmlwdFByb21wdCksIHRoaXMpOworICAg
ICAgICBnX3NpZ25hbF9jb25uZWN0KG1fd2ViVmlldywgInNjcmlwdC1kaWFsb2ciLCBHX0NBTExC
QUNLKHNjcmlwdERpYWxvZyksIHRoaXMpOwogICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG1fd2Vi
VmlldywgIm1vdXNlLXRhcmdldC1jaGFuZ2VkIiwgR19DQUxMQkFDSyhtb3VzZVRhcmdldENoYW5n
ZWQpLCB0aGlzKTsKICAgICB9CiAKQEAgLTMxMSw3ICszMTIsNyBAQCBwdWJsaWM6CiAgICAgfQog
CiAgICAgVmVjdG9yPFdlYlZpZXdFdmVudHM+IG1fd2ViVmlld0V2ZW50czsKLSAgICBTY3JpcHRU
eXBlIG1fc2NyaXB0VHlwZTsKKyAgICBXZWJLaXRTY3JpcHREaWFsb2dUeXBlIG1fc2NyaXB0RGlh
bG9nVHlwZTsKICAgICBib29sIG1fc2NyaXB0RGlhbG9nQ29uZmlybWVkOwogICAgIFdpbmRvd1By
b3BlcnRpZXMgbV93aW5kb3dQcm9wZXJ0aWVzOwogICAgIEhhc2hTZXQ8V1RGOjpTdHJpbmc+IG1f
d2luZG93UHJvcGVydGllc0NoYW5nZWQ7CkBAIC0zMzgsMTkgKzMzOSwxOSBAQCBzdGF0aWMgdm9p
ZCB0ZXN0V2ViVmlld0phdmFTY3JpcHREaWFsb2dzKFVJQ2xpZW50VGVzdCogdGVzdCwgZ2NvbnN0
cG9pbnRlcikKICAgICBzdGF0aWMgY29uc3QgY2hhcioganNDb25maXJtRm9ybWF0ID0gImRvIHsg
Y29uZmlybWVkID0gY29uZmlybSgnJXMnKTsgfSB3aGlsZSAoIWNvbmZpcm1lZCk7IGFsZXJ0KCdj
b25maXJtZWQnKTsiOwogICAgIHN0YXRpYyBjb25zdCBjaGFyKiBqc1Byb21wdEZvcm1hdCA9ICJh
bGVydChwcm9tcHQoJyVzJywgJ2RlZmF1bHQnKSk7IjsKIAotICAgIHRlc3QtPm1fc2NyaXB0VHlw
ZSA9IFVJQ2xpZW50VGVzdDo6QWxlcnQ7CisgICAgdGVzdC0+bV9zY3JpcHREaWFsb2dUeXBlID0g
V0VCS0lUX1NDUklQVF9ESUFMT0dfQUxFUlQ7CiAgICAgR093blB0cjxjaGFyPiBhbGVydERpYWxv
Z01lc3NhZ2UoZ19zdHJkdXBfcHJpbnRmKGpzQWxlcnRGb3JtYXQsIGtBbGVydERpYWxvZ01lc3Nh
Z2UpKTsKICAgICBHT3duUHRyPGNoYXI+IGFsZXJ0SFRNTChnX3N0cmR1cF9wcmludGYoaHRtbE9u
TG9hZEZvcm1hdCwgYWxlcnREaWFsb2dNZXNzYWdlLmdldCgpKSk7CiAgICAgdGVzdC0+bG9hZEh0
bWwoYWxlcnRIVE1MLmdldCgpLCAwKTsKICAgICB0ZXN0LT53YWl0VW50aWxNYWluTG9vcEZpbmlz
aGVzKCk7CiAKLSAgICB0ZXN0LT5tX3NjcmlwdFR5cGUgPSBVSUNsaWVudFRlc3Q6OkNvbmZpcm07
CisgICAgdGVzdC0+bV9zY3JpcHREaWFsb2dUeXBlID0gV0VCS0lUX1NDUklQVF9ESUFMT0dfQ09O
RklSTTsKICAgICBHT3duUHRyPGNoYXI+IGNvbmZpcm1EaWFsb2dNZXNzYWdlKGdfc3RyZHVwX3By
aW50Zihqc0NvbmZpcm1Gb3JtYXQsIGtDb25maXJtRGlhbG9nTWVzc2FnZSkpOwogICAgIEdPd25Q
dHI8Y2hhcj4gY29uZmlybUhUTUwoZ19zdHJkdXBfcHJpbnRmKGh0bWxPbkxvYWRGb3JtYXQsIGNv
bmZpcm1EaWFsb2dNZXNzYWdlLmdldCgpKSk7CiAgICAgdGVzdC0+bG9hZEh0bWwoY29uZmlybUhU
TUwuZ2V0KCksIDApOwogICAgIHRlc3QtPndhaXRVbnRpbE1haW5Mb29wRmluaXNoZXMoKTsKIAot
ICAgIHRlc3QtPm1fc2NyaXB0VHlwZSA9IFVJQ2xpZW50VGVzdDo6UHJvbXB0OworICAgIHRlc3Qt
Pm1fc2NyaXB0RGlhbG9nVHlwZSA9IFdFQktJVF9TQ1JJUFRfRElBTE9HX1BST01QVDsKICAgICBH
T3duUHRyPGNoYXI+IHByb21wdERpYWxvZ01lc3NhZ2UoZ19zdHJkdXBfcHJpbnRmKGpzUHJvbXB0
Rm9ybWF0LCBrUHJvbXB0RGlhbG9nTWVzc2FnZSkpOwogICAgIEdPd25QdHI8Y2hhcj4gcHJvbXB0
SFRNTChnX3N0cmR1cF9wcmludGYoaHRtbE9uTG9hZEZvcm1hdCwgcHJvbXB0RGlhbG9nTWVzc2Fn
ZS5nZXQoKSkpOwogICAgIHRlc3QtPmxvYWRIdG1sKHByb21wdEhUTUwuZ2V0KCksIDApOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvd2Via2l0Mm1hcnNoYWwu
bGlzdCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdDJtYXJzaGFsLmxp
c3QKaW5kZXggYTBjMmI1ZC4uNWY3MzU2MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvd2Via2l0Mm1hcnNoYWwubGlzdAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay93ZWJraXQybWFyc2hhbC5saXN0CkBAIC0xLDkgKzEsOCBAQAorQk9P
TEVBTjpCT1hFRAogQk9PTEVBTjpFTlVNLFNUUklORyxQT0lOVEVSCiBCT09MRUFOOk9CSkVDVAog
Qk9PTEVBTjpPQkpFQ1QsRU5VTQogQk9PTEVBTjpTVFJJTkcKLUJPT0xFQU46U1RSSU5HLFBPSU5U
RVIKLUJPT0xFQU46U1RSSU5HLFNUUklORyxQT0lOVEVSCiBPQkpFQ1Q6Vk9JRAogVk9JRDpPQkpF
Q1QsVUlOVAogVk9JRDpPQkpFQ1QsUE9JTlRFUgo=
</data>
<flag name="review"
          id="133007"
          type_id="1"
          status="+"
          setter="mrobinson"
    />
          </attachment>
      

    </bug>

</bugzilla>