<?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>55603</bug_id>
          
          <creation_ts>2011-03-02 12:50:11 -0800</creation_ts>
          <short_desc>[GTK] Implement the next bit of the TextInputController (hasMarkedText and markedRange)</short_desc>
          <delta_ts>2011-06-09 16:34:00 -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>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>P3</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Martin Robinson">mrobinson</reporter>
          <assigned_to name="Martin Robinson">mrobinson</assigned_to>
          <cc>cgarcia</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>360997</commentid>
    <comment_count>0</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-03-02 12:50:11 -0800</bug_when>
    <thetext>The TextInputController is still missing hasMarkedText and markedRange. This bug tracks implementing those methods and cleaning up the code that&apos;s already there.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>361008</commentid>
    <comment_count>1</comment_count>
      <attachid>84452</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-03-02 13:02:06 -0800</bug_when>
    <thetext>Created attachment 84452
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>361401</commentid>
    <comment_count>2</comment_count>
      <attachid>84452</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-03-03 00:09:41 -0800</bug_when>
    <thetext>Comment on attachment 84452
Patch

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

&gt; Source/WebKit/gtk/WebCoreSupport/DumpRenderTreeSupportGtk.cpp:499
&gt;      Frame* frame = core(webView)-&gt;focusController()-&gt;focusedOrMainFrame();
&gt; -    if (!frame)
&gt; -        return;
&gt; +    g_return_if_fail(frame);
&gt;  
&gt;      Editor* editor = frame-&gt;editor();
&gt; -    if (!editor)
&gt; -        return;
&gt; -    if (!editor-&gt;canEdit() &amp;&amp; !editor-&gt;hasComposition())
&gt; -        return;
&gt; +    g_return_if_fail(editor);
&gt; +    g_return_if_fail(editor-&gt;canEdit() || editor-&gt;hasComposition());

I don&apos;t think using g_return_* macros everywhere is a good idea. Those macros are not just early returns, are more like an assert that doesn&apos;t abort, they log a critical warning, if you have ciriticals=fatal it will crash on an assertion. g_return_* macros are used to protect public methods checking the input and logging a critical message when something is not expected, to easily catch bugs. Since they are inefficient you can build glib with G_DISABLE_CHECKS (it&apos;s usually done in production builds for performance reasons) which makes those macros do nothing (#define g_return_if_fail(expr) (void)0;)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>361738</commentid>
    <comment_count>3</comment_count>
      <attachid>84586</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-03-03 10:53:51 -0800</bug_when>
    <thetext>Created attachment 84586
Patch with Carlos&apos; suggestions</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>361739</commentid>
    <comment_count>4</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-03-03 10:57:59 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; I don&apos;t think using g_return_* macros everywhere is a good idea. Those macros are not just early returns, are more like an assert that doesn&apos;t abort, they log a critical warning, if you have ciriticals=fatal it will crash on an assertion. g_return_* macros are used to protect public methods checking the input and logging a critical message when something is not expected, to easily catch bugs. Since they are inefficient you can build glib with G_DISABLE_CHECKS (it&apos;s usually done in production builds for performance reasons) which makes those macros do nothing (#define g_return_if_fail(expr) (void)0;)

Excellent point. I&apos;ve uploaded a new patch that conforms to the following policy:

1. When there is an API that accepts a GObject, arguments are verified with GLib style early returns (g_return_ macros).

2. Assertions are used for non-API arguments and values computed at runtime.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>361753</commentid>
    <comment_count>5</comment_count>
      <attachid>84590</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-03-03 11:08:27 -0800</bug_when>
    <thetext>Created attachment 84590
Patch which better conforms to the policy stated above</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>362344</commentid>
    <comment_count>6</comment_count>
      <attachid>84590</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-03-04 00:55:01 -0800</bug_when>
    <thetext>Comment on attachment 84590
Patch which better conforms to the policy stated above

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

&gt; Source/WebKit/gtk/WebCoreSupport/DumpRenderTreeSupportGtk.cpp:527
&gt; +    *start = *length = 0;
&gt; +
&gt; +    g_return_val_if_fail(WEBKIT_IS_WEB_VIEW(webView), false);
&gt; +    g_return_val_if_fail(start &amp;&amp; length, false);
&gt; +

You should move the line *start = *length = 0; after the g_return_val_if_fail(start &amp;&amp; length, false);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>362506</commentid>
    <comment_count>7</comment_count>
      <attachid>84590</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-03-04 08:20:19 -0800</bug_when>
    <thetext>Comment on attachment 84590
Patch which better conforms to the policy stated above

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

&gt;&gt; Source/WebKit/gtk/WebCoreSupport/DumpRenderTreeSupportGtk.cpp:527
&gt;&gt; +
&gt; 
&gt; You should move the line *start = *length = 0; after the g_return_val_if_fail(start &amp;&amp; length, false);

I feel that the method should return conssitent values when it fails. Is there a particular reason it&apos;s better to move it down? Externally the user of the method couldn&apos;t know if it returned false because of a bad argument or one of the following runtime situations.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>362541</commentid>
    <comment_count>8</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-03-04 08:51:25 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 84590 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=84590&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebKit/gtk/WebCoreSupport/DumpRenderTreeSupportGtk.cpp:527
&gt; &gt;&gt; +
&gt; &gt; 
&gt; &gt; You should move the line *start = *length = 0; after the g_return_val_if_fail(start &amp;&amp; length, false);
&gt; 
&gt; I feel that the method should return conssitent values when it fails. Is there a particular reason it&apos;s better to move it down? Externally the user of the method couldn&apos;t know if it returned false because of a bad argument or one of the following runtime situations.

The macro checks that valid pointers have been passed, so you shouldn&apos;t use the pointers before it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>362551</commentid>
    <comment_count>9</comment_count>
      <attachid>84590</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-03-04 09:09:26 -0800</bug_when>
    <thetext>Comment on attachment 84590
Patch which better conforms to the policy stated above

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

&gt;&gt;&gt;&gt; Source/WebKit/gtk/WebCoreSupport/DumpRenderTreeSupportGtk.cpp:527
&gt;&gt;&gt;&gt; +
&gt;&gt;&gt; 
&gt;&gt;&gt; You should move the line *start = *length = 0; after the g_return_val_if_fail(start &amp;&amp; length, false);
&gt;&gt; 
&gt;&gt; I feel that the method should return conssitent values when it fails. Is there a particular reason it&apos;s better to move it down? Externally the user of the method couldn&apos;t know if it returned false because of a bad argument or one of the following runtime situations.
&gt; 
&gt; The macro checks that valid pointers have been passed, so you shouldn&apos;t use the pointers before it.

Ah! Quite right. I&apos;ll reorder the statement and upload a new patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>396590</commentid>
    <comment_count>10</comment_count>
      <attachid>91964</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-05-02 13:26:48 -0700</bug_when>
    <thetext>Created attachment 91964
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>396986</commentid>
    <comment_count>11</comment_count>
      <attachid>91964</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-05-02 23:58:41 -0700</bug_when>
    <thetext>Comment on attachment 91964
Patch

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

&gt; Tools/DumpRenderTree/gtk/TextInputController.cpp:96
&gt; -        return JSValueMakeUndefined(context);
&gt; +        JSValueMakeUndefined(context);

Why did you remove the return?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>397187</commentid>
    <comment_count>12</comment_count>
      <attachid>91964</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-05-03 10:54:39 -0700</bug_when>
    <thetext>Comment on attachment 91964
Patch

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

&gt;&gt; Tools/DumpRenderTree/gtk/TextInputController.cpp:96
&gt;&gt; +        JSValueMakeUndefined(context);
&gt; 
&gt; Why did you remove the return?

I believe this was a mistake. Uploading a new patch now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>397250</commentid>
    <comment_count>13</comment_count>
      <attachid>92100</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-05-03 12:15:03 -0700</bug_when>
    <thetext>Created attachment 92100
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>414122</commentid>
    <comment_count>14</comment_count>
      <attachid>92100</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-06-02 08:01:22 -0700</bug_when>
    <thetext>Comment on attachment 92100
Patch

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

I&apos;m willing to rubber stamp this if that&apos;s what you&apos;re looking for.  If you need a more detailed review from a gtk person, you should set r? again.

&gt; LayoutTests/platform/gtk/Skipped:666
&gt; +# These tests also use firstRectForCharacterRange, but they generate slightly
&gt; +# different values. (Chromium also fails here; see their test_expectations.txt file)

Do we match chromium?

&gt; Source/WebKit/gtk/WebCoreSupport/DumpRenderTreeSupportGtk.cpp:539
&gt; +    *start = *length = 0;

Um.  Why not pass these by reference?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>418364</commentid>
    <comment_count>15</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-06-09 15:53:50 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; (From update of attachment 92100 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=92100&amp;action=review
&gt; 
&gt; I&apos;m willing to rubber stamp this if that&apos;s what you&apos;re looking for.  If you need a more detailed review from a gtk person, you should set r? again.
&gt; 
&gt; &gt; LayoutTests/platform/gtk/Skipped:666
&gt; &gt; +# These tests also use firstRectForCharacterRange, but they generate slightly
&gt; &gt; +# different values. (Chromium also fails here; see their test_expectations.txt file)
&gt; 
&gt; Do we match chromium?

I&apos;m not sure, since results are not checked in for these test. The same set of tests fail though, so I assumed it was the same issue.

&gt; &gt; Source/WebKit/gtk/WebCoreSupport/DumpRenderTreeSupportGtk.cpp:539
&gt; &gt; +    *start = *length = 0;
&gt; 
&gt; Um.  Why not pass these by reference?

This is more typical in GTK+-land since it also supports C -- though DumpRenderTreeSupport is C++ obviously. The existing methods used this approach, so I followed it. If you prefer these to be references, hopefully it&apos;s okay to fix them it in a followup patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>418380</commentid>
    <comment_count>16</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-06-09 16:34:00 -0700</bug_when>
    <thetext>Committed r88498: &lt;http://trac.webkit.org/changeset/88498&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>84452</attachid>
            <date>2011-03-02 13:02:06 -0800</date>
            <delta_ts>2011-03-03 10:53:49 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-55603-20110302130203.patch</filename>
            <type>text/plain</type>
            <size>19023</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODAxMzkKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA4ZDQ0YWI0NjFjZWI2ZTNkODVjMTY2
MzRmYjczYjMwNzQzZDdlYzA5Li5kN2ZmODIxNmZjOGVkNmEwNjk2NmNlYmU3ZDI2MDYxMDI4ODMy
M2QxIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTEtMDMtMDIgIE1hcnRpbiBSb2JpbnNvbiAg
PG1yb2JpbnNvbkBpZ2FsaWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFtHVEtdIEltcGxlbWVudCB0aGUgbmV4dCBiaXQgb2YgdGhlIFRleHRJ
bnB1dENvbnRyb2xsZXIgKGhhc01hcmtlZFRleHQgYW5kIG1hcmtlZFJhbmdlKQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTU2MDMKKworICAgICAgICAq
IHBsYXRmb3JtL2d0ay9Ta2lwcGVkOiBVbnNraXAgYSB0ZXN0IHRoYXQgaXMgbm93IHBhc3Npbmcu
IEJldHRlciBkZXNjcmliZSByZW1haW5pbmcgZmFpbHVyZXMuCisKIDIwMTEtMDItMTYgIEpvaG4g
S25vdHRlbmJlbHQgIDxqa25vdHRlbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgRG1pdHJ5IFRpdG92LgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1Nr
aXBwZWQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvU2tpcHBlZAppbmRleCAyMTdhN2VlNjVi
MWU5NzgzYWJkOTkzZjJiMmFjYjBhNmU0NDg0YmEzLi42MDZlMmU3YWVhOGEyZDQ4NzZiMTMyNWE0
ZWNkMDAzMDZhZmVmZDQ3IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvU2tp
cHBlZAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvU2tpcHBlZApAQCAtNjY0LDggKzY2
NCw4IEBAIGh0dHAvdGVzdHMvZ2xvYmFsaGlzdG9yeQogIyBOZWVkIHRvIGFkZCBmdW5jdGlvbmFs
aXR5IHRvIER1bXBSZW5kZXJUcmVlIHRvIGhhbmRsZSBlcnJvciBwYWdlcwogZmFzdC9oaXN0b3J5
L2JhY2stZm9yd2FyZC1yZXNldC1hZnRlci1lcnJvci1oYW5kbGluZy5odG1sCiAKLSMgTWlzc2lu
ZyB0ZXh0SW5wdXRDb250cm9sbGVyCi1lZGl0aW5nL2lucHV0L3NldHRpbmctaW5wdXQtdmFsdWUt
Y2FuY2VsLWltZS1jb21wb3NpdGlvbi5odG1sCisjIFRoZXNlIHRlc3RzIGFsc28gdXNlIGZpcnN0
UmVjdEZvckNoYXJhY3RlclJhbmdlLCBidXQgdGhleSBnZW5lcmF0ZSBzbGlnaHRseQorIyBkaWZm
ZXJlbnQgdmFsdWVzLiAoQ2hyb21pdW0gYWxzbyBmYWlscyBoZXJlOyBzZWUgdGhlaXIgdGVzdF9l
eHBlY3RhdGlvbnMudHh0IGZpbGUpCiBlZGl0aW5nL3NlbGVjdGlvbi9taXhlZC1lZGl0YWJpbGl0
eS0xMC5odG1sCiBlZGl0aW5nL3NlbGVjdGlvbi81ODI1MzUwLTEuaHRtbAogZWRpdGluZy9zZWxl
Y3Rpb24vNTgyNTM1MC0yLmh0bWwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZwppbmRleCAzYTFhZDJlODI4NGY0NTll
NDgzZjU0ODk4NGJiZGJmMDNjNDA4MjU5Li42MWExZDIxN2I2YTBhZWFiNzkxMTQ5ZTVmMWY2Y2Fh
MDUxNWFmMWI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKKysrIGIv
U291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjIgQEAKKzIwMTEtMDMtMDIg
IE1hcnRpbiBSb2JpbnNvbiAgPG1yb2JpbnNvbkBpZ2FsaWEuY29tPgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtHVEtdIEltcGxlbWVudCB0aGUgbmV4
dCBiaXQgb2YgdGhlIFRleHRJbnB1dENvbnRyb2xsZXIgKGhhc01hcmtlZFRleHQgYW5kIG1hcmtl
ZFJhbmdlKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NTU2MDMKKworICAgICAgICBBZGRlZCBEdW1wUmVuZGVyVHJlZVN1cHBvcnQgbWV0aG9kcyB0byBz
dXBwb3J0IGhhc01hcmtlZFRleHQgYW5kIG1hcmtlZFJhbmdlLgorCisgICAgICAgICogV2ViQ29y
ZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrLmNwcDoKKyAgICAgICAgKER1bXBSZW5k
ZXJUcmVlU3VwcG9ydEd0azo6c2V0Q29tcG9zaXRpb24pOiBVc2Ugc3RhcnQgYW5kIGxlbmd0aCBy
YXRoZXIgdGhhbiBzdGFydCBhbmQKKyAgICAgICAgZW5kLiBUaGlzIG1hdGNoZXMgb3RoZXIgcG9y
dHMuIFVzZSBHTGliIHN0eWxlIGVhcmx5IHJldHVybnMgZXZlcnl3aGVyZS4KKyAgICAgICAgKER1
bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6aGFzQ29tcG9zaXRpb24pOiAgQWRkZWQuCisgICAgICAg
IChEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6OmNvbXBvc2l0aW9uUmFuZ2UpOiBBZGRlZC4KKyAg
ICAgICAgKER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6Y29uZmlybUNvbXBvc2l0aW9uKTogQ2xl
YW51cCBhcyBkZXNjcmliZWQgYWJvdmUuCisgICAgICAgIChEdW1wUmVuZGVyVHJlZVN1cHBvcnRH
dGs6OmZpcnN0UmVjdEZvckNoYXJhY3RlclJhbmdlKTogQ2xlYW51cCBhcyBkZXNjcmliZWQgYWJv
dmUuCisgICAgICAgIChEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6OnNlbGVjdGVkUmFuZ2UpOiBD
bGVhbnVwIGFzIGRlc2NyaWJlZCBhYm92ZS4KKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9EdW1w
UmVuZGVyVHJlZVN1cHBvcnRHdGsuaDogQWRkZWQgbmV3IGRlY2xhcmF0aW9ucy4KKwogMjAxMS0w
My0wMSAgSm9zZXBoIFBlY29yYXJvICA8am9lcGVja0B3ZWJraXQub3JnPgogCiAgICAgICAgIFVu
cmV2aWV3ZWQuIFJvbGwgb3V0IHI4MDA2OCBhbmQgcjgwMDczIGR1ZSB0byBicmVha2luZyBXZWJL
aXQyIFF0IHBvcnQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9y
dC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGsuY3BwIGIvU291cmNlL1dlYktpdC9ndGsvV2ViQ29y
ZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrLmNwcAppbmRleCA2ZGIyYzgxZmUzMzg1
ODE1NGZkYjE3NDYxNmI2NGRmYzFiMjc0NjJiLi5kMmVjZjNlZjE0ZTI4NzZkOTYxOTc3YWFmMWE4
YTI5MTc2NjBjMzBlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9y
dC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL1dl
YkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEd0ay5jcHAKQEAgLTQ4NiwyNSArNDg2
LDUwIEBAIGJvb2wgRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrOjppc0NvbW1hbmRFbmFibGVkKFdl
YktpdFdlYlZpZXcqIHdlYlZpZXcsIGNvbnN0IGdjCiAgICAgcmV0dXJuIGNvcmUod2ViVmlldykt
PmZvY3VzQ29udHJvbGxlcigpLT5mb2N1c2VkT3JNYWluRnJhbWUoKS0+ZWRpdG9yKCktPmNvbW1h
bmQobmFtZSkuaXNFbmFibGVkKCk7CiB9CiAKLXZvaWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0R3Rr
OjpzZXRDb21wb3NpdGlvbihXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBjb25zdCBjaGFyKiB0ZXh0
LCBpbnQgc3RhcnQsIGludCBlbmQpCit2b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6c2V0
Q29tcG9zaXRpb24oV2ViS2l0V2ViVmlldyogd2ViVmlldywgY29uc3QgY2hhciogdGV4dCwgaW50
IHN0YXJ0LCBpbnQgbGVuZ3RoKQogewogICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX1dF
Ql9WSUVXKHdlYlZpZXcpKTsKICAgICBnX3JldHVybl9pZl9mYWlsKHRleHQpOwogCiAgICAgRnJh
bWUqIGZyYW1lID0gY29yZSh3ZWJWaWV3KS0+Zm9jdXNDb250cm9sbGVyKCktPmZvY3VzZWRPck1h
aW5GcmFtZSgpOwotICAgIGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybjsKKyAgICBnX3JldHVy
bl9pZl9mYWlsKGZyYW1lKTsKIAogICAgIEVkaXRvciogZWRpdG9yID0gZnJhbWUtPmVkaXRvcigp
OwotICAgIGlmICghZWRpdG9yKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKCFlZGl0b3ItPmNh
bkVkaXQoKSAmJiAhZWRpdG9yLT5oYXNDb21wb3NpdGlvbigpKQotICAgICAgICByZXR1cm47Cisg
ICAgZ19yZXR1cm5faWZfZmFpbChlZGl0b3IpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoZWRpdG9y
LT5jYW5FZGl0KCkgfHwgZWRpdG9yLT5oYXNDb21wb3NpdGlvbigpKTsKIAogICAgIFN0cmluZyBj
b21wb3NpdGlvblN0cmluZyA9IFN0cmluZzo6ZnJvbVVURjgodGV4dCk7CiAgICAgVmVjdG9yPENv
bXBvc2l0aW9uVW5kZXJsaW5lPiB1bmRlcmxpbmVzOwogICAgIHVuZGVybGluZXMuYXBwZW5kKENv
bXBvc2l0aW9uVW5kZXJsaW5lKDAsIGNvbXBvc2l0aW9uU3RyaW5nLmxlbmd0aCgpLCBDb2xvcigw
LCAwLCAwKSwgZmFsc2UpKTsKLSAgICBlZGl0b3ItPnNldENvbXBvc2l0aW9uKGNvbXBvc2l0aW9u
U3RyaW5nLCB1bmRlcmxpbmVzLCBzdGFydCwgZW5kKTsKKyAgICBlZGl0b3ItPnNldENvbXBvc2l0
aW9uKGNvbXBvc2l0aW9uU3RyaW5nLCB1bmRlcmxpbmVzLCBzdGFydCwgc3RhcnQgKyBsZW5ndGgp
OworfQorCitib29sIER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6aGFzQ29tcG9zaXRpb24oV2Vi
S2l0V2ViVmlldyogd2ViVmlldykKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRf
SVNfV0VCX1ZJRVcod2ViVmlldyksIGZhbHNlKTsKKyAgICBGcmFtZSogZnJhbWUgPSBjb3JlKHdl
YlZpZXcpLT5mb2N1c0NvbnRyb2xsZXIoKS0+Zm9jdXNlZE9yTWFpbkZyYW1lKCk7CisgICAgZ19y
ZXR1cm5fdmFsX2lmX2ZhaWwoZnJhbWUsIGZhbHNlKTsKKyAgICBFZGl0b3IqIGVkaXRvciA9IGZy
YW1lLT5lZGl0b3IoKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChlZGl0b3IsIGZhbHNlKTsK
KworICAgIHJldHVybiBlZGl0b3ItPmhhc0NvbXBvc2l0aW9uKCk7Cit9CisKK2Jvb2wgRHVtcFJl
bmRlclRyZWVTdXBwb3J0R3RrOjpjb21wb3NpdGlvblJhbmdlKFdlYktpdFdlYlZpZXcqIHdlYlZp
ZXcsIGludCogc3RhcnQsIGludCogbGVuZ3RoKQoreworICAgIEFTU0VSVChzdGFydCAmJiBlbmQp
OworICAgICpzdGFydCA9ICpsZW5ndGggPSAwOworCisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
V0VCS0lUX0lTX1dFQl9WSUVXKHdlYlZpZXcpLCBmYWxzZSk7CisgICAgRnJhbWUqIGZyYW1lID0g
Y29yZSh3ZWJWaWV3KS0+Zm9jdXNDb250cm9sbGVyKCktPmZvY3VzZWRPck1haW5GcmFtZSgpOwor
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGZyYW1lLCBmYWxzZSk7CisgICAgRWRpdG9yKiBlZGl0
b3IgPSBmcmFtZS0+ZWRpdG9yKCk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoZWRpdG9yLCBm
YWxzZSk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoZWRpdG9yLT5oYXNDb21wb3NpdGlvbigp
LCBmYWxzZSk7CisKKyAgICAqc3RhcnQgPSBlZGl0b3ItPmNvbXBvc2l0aW9uU3RhcnQoKTsKKyAg
ICAqbGVuZ3RoID0gZWRpdG9yLT5jb21wb3NpdGlvbkVuZCgpIC0gKnN0YXJ0OworICAgIHJldHVy
biB0cnVlOwogfQogCiB2b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6Y29uZmlybUNvbXBv
c2l0aW9uKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIGNvbnN0IGNoYXIqIHRleHQpCkBAIC01MTIs
MjAgKzUzNywyMSBAQCB2b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6Y29uZmlybUNvbXBv
c2l0aW9uKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIGNvbnN0CiAgICAgZ19yZXR1cm5faWZfZmFp
bChXRUJLSVRfSVNfV0VCX1ZJRVcod2ViVmlldykpOwogCiAgICAgRnJhbWUqIGZyYW1lID0gY29y
ZSh3ZWJWaWV3KS0+Zm9jdXNDb250cm9sbGVyKCktPmZvY3VzZWRPck1haW5GcmFtZSgpOwotICAg
IGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybjsKKyAgICBnX3JldHVybl9pZl9mYWlsKGZyYW1l
KTsKIAogICAgIEVkaXRvciogZWRpdG9yID0gZnJhbWUtPmVkaXRvcigpOwotICAgIGlmICghZWRp
dG9yIHx8ICghZWRpdG9yLT5oYXNDb21wb3NpdGlvbigpICYmICF0ZXh0KSkKLSAgICAgICAgcmV0
dXJuOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoZWRpdG9yKTsKKyAgICBnX3JldHVybl9pZl9mYWls
KCFlZGl0b3ItPmhhc0NvbXBvc2l0aW9uKCkgJiYgIXRleHQpOwogCi0gICAgaWYgKGVkaXRvci0+
aGFzQ29tcG9zaXRpb24oKSkgewotICAgICAgICBpZiAodGV4dCkKLSAgICAgICAgICAgIGVkaXRv
ci0+Y29uZmlybUNvbXBvc2l0aW9uKFN0cmluZzo6ZnJvbVVURjgodGV4dCkpOwotICAgICAgICBl
bHNlCi0gICAgICAgICAgICBlZGl0b3ItPmNvbmZpcm1Db21wb3NpdGlvbigpOwotICAgIH0gZWxz
ZQorICAgIGlmICghZWRpdG9yLT5oYXNDb21wb3NpdGlvbigpKSB7CiAgICAgICAgIGVkaXRvci0+
aW5zZXJ0VGV4dChTdHJpbmc6OmZyb21VVEY4KHRleHQpLCAwKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICBpZiAodGV4dCkgeworICAgICAgICBlZGl0b3ItPmNvbmZpcm1Db21wb3NpdGlv
bihTdHJpbmc6OmZyb21VVEY4KHRleHQpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBl
ZGl0b3ItPmNvbmZpcm1Db21wb3NpdGlvbigpOwogfQogCiBib29sIER1bXBSZW5kZXJUcmVlU3Vw
cG9ydEd0azo6Zmlyc3RSZWN0Rm9yQ2hhcmFjdGVyUmFuZ2UoV2ViS2l0V2ViVmlldyogd2ViVmll
dywgaW50IGxvY2F0aW9uLCBpbnQgbGVuZ3RoLCBHZGtSZWN0YW5nbGUqIHJlY3QpCkBAIC01Mzcs
MzMgKzU2MywyOCBAQCBib29sIER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6Zmlyc3RSZWN0Rm9y
Q2hhcmFjdGVyUmFuZ2UoV2ViS2l0V2ViVmlldyogd2ViVmlldwogICAgICAgICBsZW5ndGggPSAw
OwogCiAgICAgRnJhbWUqIGZyYW1lID0gY29yZSh3ZWJWaWV3KS0+Zm9jdXNDb250cm9sbGVyKCkt
PmZvY3VzZWRPck1haW5GcmFtZSgpOwotICAgIGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChmcmFtZSwgZmFsc2UpOwogCiAgICAgRWRp
dG9yKiBlZGl0b3IgPSBmcmFtZS0+ZWRpdG9yKCk7Ci0gICAgaWYgKCFlZGl0b3IpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChlZGl0b3IsIGZhbHNlKTsK
IAogICAgIEVsZW1lbnQqIHNlbGVjdGlvblJvb3QgPSBmcmFtZS0+c2VsZWN0aW9uKCktPnJvb3RF
ZGl0YWJsZUVsZW1lbnQoKTsKICAgICBFbGVtZW50KiBzY29wZSA9IHNlbGVjdGlvblJvb3QgPyBz
ZWxlY3Rpb25Sb290IDogZnJhbWUtPmRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgpOwogICAg
IFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBUZXh0SXRlcmF0b3I6OnJhbmdlRnJvbUxvY2F0aW9uQW5k
TGVuZ3RoKHNjb3BlLCBsb2NhdGlvbiwgbGVuZ3RoKTsKLSAgICBpZiAoIXJhbmdlKQotICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChyYW5nZSwgZmFsc2Up
OwogICAgICpyZWN0ID0gZWRpdG9yLT5maXJzdFJlY3RGb3JSYW5nZShyYW5nZS5nZXQoKSk7CiAK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6OnNl
bGVjdGVkUmFuZ2UoV2ViS2l0V2ViVmlldyogd2ViVmlldywgaW50KiBzdGFydCwgaW50KiBlbmQp
Citib29sIER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6c2VsZWN0ZWRSYW5nZShXZWJLaXRXZWJW
aWV3KiB3ZWJWaWV3LCBpbnQqIHN0YXJ0LCBpbnQqIGxlbmd0aCkKIHsKLSAgICBnX3JldHVybl92
YWxfaWZfZmFpbChXRUJLSVRfSVNfV0VCX1ZJRVcod2ViVmlldyksIGZhbHNlKTsKLSAgICBnX3Jl
dHVybl92YWxfaWZfZmFpbChzdGFydCwgZmFsc2UpOwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWls
KGVuZCwgZmFsc2UpOworICAgIEFTU0VSVChzdGFydCAmJiBlbmQpOwogCisgICAgZ19yZXR1cm5f
dmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9WSUVXKHdlYlZpZXcpLCBmYWxzZSk7CiAgICAgRnJh
bWUqIGZyYW1lID0gY29yZSh3ZWJWaWV3KS0+Zm9jdXNDb250cm9sbGVyKCktPmZvY3VzZWRPck1h
aW5GcmFtZSgpOwotICAgIGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBn
X3JldHVybl92YWxfaWZfZmFpbChmcmFtZSwgZmFsc2UpOwogCiAgICAgUmVmUHRyPFJhbmdlPiBy
YW5nZSA9IGZyYW1lLT5zZWxlY3Rpb24oKS0+dG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKTsKIApA
QCAtNTc3LDcgKzU5OCw3IEBAIGJvb2wgRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrOjpzZWxlY3Rl
ZFJhbmdlKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIGludCogc3RhcnQsCiAgICAgRXhjZXB0aW9u
Q29kZSBlYzsKICAgICB0ZXN0UmFuZ2UtPnNldEVuZChyYW5nZS0+ZW5kQ29udGFpbmVyKCksIHJh
bmdlLT5lbmRPZmZzZXQoKSwgZWMpOwogICAgIEFTU0VSVCh0ZXN0UmFuZ2UtPnN0YXJ0Q29udGFp
bmVyKCkgPT0gc2NvcGUpOwotICAgICplbmQgPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKHRl
c3RSYW5nZS5nZXQoKSk7CisgICAgKmxlbmd0aCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgo
dGVzdFJhbmdlLmdldCgpKTsKIAogICAgIHJldHVybiB0cnVlOwogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrLmgg
Yi9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRH
dGsuaAppbmRleCA1OTVkNmRhNDM2ZjkxYzEzMjY2MGRiYTNjZTRjNTFlNDQ3OTY2M2UyLi42MGY4
NjYyNGI2ZDRhNGIzZGMzMTcxYWE5NjZkN2YxZDU3Y2U0Y2E5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGsuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRH
dGsuaApAQCAtOTAsMTMgKzkwLDE3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBleGVjdXRl
Q29yZUNvbW1hbmRCeU5hbWUoV2ViS2l0V2ViVmlldyosIGNvbnN0IGdjaGFyKiBuYW1lLCBjb25z
dCBnY2hhciogdmFsdWUpOwogICAgIHN0YXRpYyBib29sIGlzQ29tbWFuZEVuYWJsZWQoV2ViS2l0
V2ViVmlldyosIGNvbnN0IGdjaGFyKiBuYW1lKTsKICAgICBzdGF0aWMgYm9vbCBmaW5kU3RyaW5n
KFdlYktpdFdlYlZpZXcqLCBjb25zdCBnY2hhciosIFdlYktpdEZpbmRPcHRpb25zKTsKLSAgICBz
dGF0aWMgdm9pZCBzZXRDb21wb3NpdGlvbihXZWJLaXRXZWJWaWV3KiwgY29uc3QgY2hhciogdGV4
dCwgaW50IHN0YXJ0LCBpbnQgZW5kKTsKLSAgICBzdGF0aWMgdm9pZCBjb25maXJtQ29tcG9zaXRp
b24oV2ViS2l0V2ViVmlldyosIGNvbnN0IGNoYXIqIHRleHQpOwotICAgIHN0YXRpYyBib29sIGZp
cnN0UmVjdEZvckNoYXJhY3RlclJhbmdlKFdlYktpdFdlYlZpZXcqLCBpbnQgbG9jYXRpb24sIGlu
dCBsZW5ndGgsIEdka1JlY3RhbmdsZSopOwotICAgIHN0YXRpYyBib29sIHNlbGVjdGVkUmFuZ2Uo
V2ViS2l0V2ViVmlldyosIGludCogc3RhcnQsIGludCogZW5kKTsKICAgICBzdGF0aWMgZG91Ymxl
IGRlZmF1bHRNaW5pbXVtVGltZXJJbnRlcnZhbCgpOyAvLyBOb3QgcmVhbGx5IHRpZWQgdG8gV2Vi
VmlldwogICAgIHN0YXRpYyB2b2lkIHNldE1pbmltdW1UaW1lckludGVydmFsKFdlYktpdFdlYlZp
ZXcqLCBkb3VibGUpOwogCisgICAgLy8gVGV4dElucHV0Q29udHJvbGxlcgorICAgIHN0YXRpYyB2
b2lkIHNldENvbXBvc2l0aW9uKFdlYktpdFdlYlZpZXcqLCBjb25zdCBjaGFyKiwgaW50IHN0YXJ0
LCBpbnQgbGVuZ3RoKTsKKyAgICBzdGF0aWMgYm9vbCBoYXNDb21wb3NpdGlvbihXZWJLaXRXZWJW
aWV3Kik7CisgICAgc3RhdGljIGJvb2wgY29tcG9zaXRpb25SYW5nZShXZWJLaXRXZWJWaWV3Kiwg
aW50KiBzdGFydCwgaW50KiBsZW5ndGgpOworICAgIHN0YXRpYyB2b2lkIGNvbmZpcm1Db21wb3Np
dGlvbihXZWJLaXRXZWJWaWV3KiwgY29uc3QgY2hhciopOworICAgIHN0YXRpYyBib29sIGZpcnN0
UmVjdEZvckNoYXJhY3RlclJhbmdlKFdlYktpdFdlYlZpZXcqLCBpbnQgbG9jYXRpb24sIGludCBs
ZW5ndGgsIEdka1JlY3RhbmdsZSopOworICAgIHN0YXRpYyBib29sIHNlbGVjdGVkUmFuZ2UoV2Vi
S2l0V2ViVmlldyosIGludCogc3RhcnQsIGludCogbGVuZ3RoKTsKKwogICAgIC8vIEdDCiAgICAg
c3RhdGljIHZvaWQgZ2NDb2xsZWN0SmF2YXNjcmlwdE9iamVjdHMoKTsKICAgICBzdGF0aWMgdm9p
ZCBnY0NvbGxlY3RKYXZhc2NyaXB0T2JqZWN0c09uQWx0ZXJuYXRlVGhyZWFkKGJvb2wgd2FpdFVu
dGlsRG9uZSk7CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cK
aW5kZXggYmZiZmEzZDdmOTc2ZmRhZDM1MmM2ODI4ZjQ1N2I2Mzc2Njc0ODM0Ny4uOTFkOWE5M2Qy
ZmFhOGE0OWJmMzIxZDkxOTY0ZWMzZjJkYWUzMTNiNiAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdl
TG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0IEBACisyMDExLTAzLTAyICBN
YXJ0aW4gUm9iaW5zb24gIDxtcm9iaW5zb25AaWdhbGlhLmNvbT4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbR1RLXSBJbXBsZW1lbnQgdGhlIG5leHQg
Yml0IG9mIHRoZSBUZXh0SW5wdXRDb250cm9sbGVyIChoYXNNYXJrZWRUZXh0IGFuZCBtYXJrZWRS
YW5nZSkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU1
NjAzCisKKyAgICAgICAgQWRkIGNhbGxiYWNrcyB0byBzdXBwb3J0IGhhc01hcmtlZFRleHQgYW5k
IG1hcmtlZFJhbmdlIGFuZCBhbHNvIGNsZWFuIHVwIGV4aXN0aW5nIAorICAgICAgICBUZXh0SW5w
dXRDb250cm9sbGVyIHN1cHBvcnQuCisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9ndGsvVGV4
dElucHV0Q29udHJvbGxlci5jcHA6CisgICAgICAgIChzZXRNYXJrZWRUZXh0Q2FsbGJhY2spOiBB
Y2NlcHQgcGFyYW1ldGVycyBpbiB0ZXJtcyBvZiBzdGFydCBhbmQgbGVuZ3RoLCBpbnN0ZWFkCisg
ICAgICAgIG9mIHN0YXJ0IGFuZCBlbmQuIFRoaXMgbWF0Y2hlcyB0aGUgb3RoZXIgcG9ydHMuIFVz
ZSBnX3JldHVybl92YWxfaWZfZmFpbCBhbmQgZ19yZXR1cm5faWZfZmFpbAorICAgICAgICBldmVy
eXdoZXJlIGluc3RlYWQgb2Ygc29tZSBwbGFjZXMuCisgICAgICAgIChoYXNNYXJrZWRUZXh0Q2Fs
bGJhY2spOiBBZGRlZC4KKyAgICAgICAgKG1hcmtlZFJhbmdlQ2FsbGJhY2spOiBBZGRlZC4KKyAg
ICAgICAgKGluc2VydFRleHRDYWxsYmFjayk6IENsZWFudXAgYXMgZGVzY3JpYmVkIGFib3ZlLgor
ICAgICAgICAodW5tYXJrVGV4dENhbGxiYWNrKTogQ2xlYW51cCBhcyBkZXNjcmliZWQgYWJvdmUu
CisgICAgICAgIChmaXJzdFJlY3RGb3JDaGFyYWN0ZXJSYW5nZUNhbGxiYWNrKTogQ2xlYW51cCBh
cyBkZXNjcmliZWQgYWJvdmUuCisgICAgICAgIChzZWxlY3RlZFJhbmdlQ2FsbGJhY2spOiBDbGVh
bnVwIGFzIGRlc2NyaWJlZCBhYm92ZS4KKwogMjAxMS0wMS0yNiAgSm9obiBLbm90dGVuYmVsdCAg
PGprbm90dGVuQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEbWl0cnkgVGl0
b3YuCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9ndGsvVGV4dElucHV0Q29udHJv
bGxlci5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9ndGsvVGV4dElucHV0Q29udHJvbGxlci5j
cHAKaW5kZXggNzI0M2ZkYzIzMTU2MjNiYmIyOWRjN2ZiZDIwZmU2YzNiODBlNDJlNC4uNGZmN2Rl
NTI4MDdlYjk1MGJlNWZhMDY4MDkyZWMzOWY3NGIyODA4MiAxMDA2NDQKLS0tIGEvVG9vbHMvRHVt
cFJlbmRlclRyZWUvZ3RrL1RleHRJbnB1dENvbnRyb2xsZXIuY3BwCisrKyBiL1Rvb2xzL0R1bXBS
ZW5kZXJUcmVlL2d0ay9UZXh0SW5wdXRDb250cm9sbGVyLmNwcApAQCAtNDAsMTEgKzQwLDggQEAK
IHN0YXRpYyBKU1ZhbHVlUmVmIHNldE1hcmtlZFRleHRDYWxsYmFjayhKU0NvbnRleHRSZWYgY29u
dGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVf
dCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVm
KiBleGNlcHRpb24pCiB7CiAgICAgV2ViS2l0V2ViVmlldyogdmlldyA9IHdlYmtpdF93ZWJfZnJh
bWVfZ2V0X3dlYl92aWV3KG1haW5GcmFtZSk7Ci0gICAgaWYgKCF2aWV3KQotICAgICAgICByZXR1
cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci0KLSAgICBpZiAoYXJndW1lbnRDb3Vu
dCA8IDMpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKKyAg
ICBnX3JldHVybl92YWxfaWZfZmFpbCh2aWV3LCBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0
KSk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoYXJndW1lbnRDb3VudCA+PSAzLCBKU1ZhbHVl
TWFrZVVuZGVmaW5lZChjb250ZXh0KSk7CiAKICAgICBKU1N0cmluZ1JlZiBzdHJpbmcgPSBKU1Zh
bHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIGFyZ3VtZW50c1swXSwgZXhjZXB0aW9uKTsKICAgICBn
X3JldHVybl92YWxfaWZfZmFpbCgoIWV4Y2VwdGlvbiB8fCAhKmV4Y2VwdGlvbiksIEpTVmFsdWVN
YWtlVW5kZWZpbmVkKGNvbnRleHQpKTsKQEAgLTU3LDIzICs1NCw0MyBAQCBzdGF0aWMgSlNWYWx1
ZVJlZiBzZXRNYXJrZWRUZXh0Q2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0
UmVmIGZ1bmN0aQogICAgIGludCBzdGFydCA9IHN0YXRpY19jYXN0PGludD4oSlNWYWx1ZVRvTnVt
YmVyKGNvbnRleHQsIGFyZ3VtZW50c1sxXSwgZXhjZXB0aW9uKSk7CiAgICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoKCFleGNlcHRpb24gfHwgISpleGNlcHRpb24pLCBKU1ZhbHVlTWFrZVVuZGVmaW5l
ZChjb250ZXh0KSk7CiAKLSAgICBpbnQgZW5kID0gc3RhdGljX2Nhc3Q8aW50PihKU1ZhbHVlVG9O
dW1iZXIoY29udGV4dCwgYXJndW1lbnRzWzJdLCBleGNlcHRpb24pKTsKKyAgICBpbnQgbGVuZ3Ro
ID0gc3RhdGljX2Nhc3Q8aW50PihKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwgYXJndW1lbnRzWzJd
LCBleGNlcHRpb24pKTsKICAgICBnX3JldHVybl92YWxfaWZfZmFpbCgoIWV4Y2VwdGlvbiB8fCAh
KmV4Y2VwdGlvbiksIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpKTsKIAotICAgIER1bXBS
ZW5kZXJUcmVlU3VwcG9ydEd0azo6c2V0Q29tcG9zaXRpb24odmlldywgc3RyaW5nQnVmZmVyLmdl
dCgpLCBzdGFydCwgZW5kKTsKLQorICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6c2V0Q29t
cG9zaXRpb24odmlldywgc3RyaW5nQnVmZmVyLmdldCgpLCBzdGFydCwgbGVuZ3RoKTsKICAgICBy
ZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CiB9CiAKLXN0YXRpYyBKU1ZhbHVl
UmVmIGluc2VydFRleHRDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYg
ZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBj
b25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCitzdGF0
aWMgSlNWYWx1ZVJlZiBoYXNNYXJrZWRUZXh0Q2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQs
IEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJn
dW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhj
ZXB0aW9uKQogewogICAgIFdlYktpdFdlYlZpZXcqIHZpZXcgPSB3ZWJraXRfd2ViX2ZyYW1lX2dl
dF93ZWJfdmlldyhtYWluRnJhbWUpOwotICAgIGlmICghdmlldykKLSAgICAgICAgcmV0dXJuIEpT
VmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHZp
ZXcsIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpKTsKKyAgICByZXR1cm4gSlNWYWx1ZU1h
a2VCb29sZWFuKGNvbnRleHQsIER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6aGFzQ29tcG9zaXRp
b24odmlldykpOworfQogCi0gICAgaWYgKGFyZ3VtZW50Q291bnQgPCAxKQorc3RhdGljIEpTVmFs
dWVSZWYgbWFya2VkUmFuZ2VDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RS
ZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50
LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7
CisgICAgV2ViS2l0V2ViVmlldyogdmlldyA9IHdlYmtpdF93ZWJfZnJhbWVfZ2V0X3dlYl92aWV3
KG1haW5GcmFtZSk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwodmlldywgSlNWYWx1ZU1ha2VV
bmRlZmluZWQoY29udGV4dCkpOworCisgICAgaW50IHN0YXJ0LCBsZW5ndGg7CisgICAgaWYgKCFE
dW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6OmNvbXBvc2l0aW9uUmFuZ2UodmlldywgJnN0YXJ0LCAm
bGVuZ3RoKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwog
CisgICAgSlNWYWx1ZVJlZiBhcnJheVZhbHVlc1syXTsKKyAgICBhcnJheVZhbHVlc1swXSA9IEpT
VmFsdWVNYWtlTnVtYmVyKGNvbnRleHQsIHN0YXJ0KTsKKyAgICBhcnJheVZhbHVlc1sxXSA9IEpT
VmFsdWVNYWtlTnVtYmVyKGNvbnRleHQsIGxlbmd0aCk7CisgICAgSlNPYmplY3RSZWYgYXJyYXlP
YmplY3QgPSBKU09iamVjdE1ha2VBcnJheShjb250ZXh0LCAyLCBhcnJheVZhbHVlcywgZXhjZXB0
aW9uKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbCgoIWV4Y2VwdGlvbiB8fCAhKmV4Y2VwdGlv
biksIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpKTsKKyAgICByZXR1cm4gYXJyYXlPYmpl
Y3Q7Cit9CisKK3N0YXRpYyBKU1ZhbHVlUmVmIGluc2VydFRleHRDYWxsYmFjayhKU0NvbnRleHRS
ZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3Qs
IHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1Zh
bHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgV2ViS2l0V2ViVmlldyogdmlldyA9IHdlYmtpdF93
ZWJfZnJhbWVfZ2V0X3dlYl92aWV3KG1haW5GcmFtZSk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwodmlldywgSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCkpOworICAgIGdfcmV0dXJuX3Zh
bF9pZl9mYWlsKGFyZ3VtZW50Q291bnQgPj0gMSwgSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4
dCkpOworCiAgICAgSlNTdHJpbmdSZWYgc3RyaW5nID0gSlNWYWx1ZVRvU3RyaW5nQ29weShjb250
ZXh0LCBhcmd1bWVudHNbMF0sIGV4Y2VwdGlvbik7CiAgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
KCFleGNlcHRpb24gfHwgISpleGNlcHRpb24pLCBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0
KSk7CiAKQEAgLTgzLDE1ICsxMDAsMTMgQEAgc3RhdGljIEpTVmFsdWVSZWYgaW5zZXJ0VGV4dENh
bGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwKICAgICBK
U1N0cmluZ1JlbGVhc2Uoc3RyaW5nKTsKIAogICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6
Y29uZmlybUNvbXBvc2l0aW9uKHZpZXcsIHN0cmluZ0J1ZmZlci5nZXQoKSk7Ci0KICAgICByZXR1
cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CiB9CiAKIHN0YXRpYyBKU1ZhbHVlUmVm
IHVubWFya1RleHRDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVu
Y3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25z
dCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCiB7CiAgICAg
V2ViS2l0V2ViVmlldyogdmlldyA9IHdlYmtpdF93ZWJfZnJhbWVfZ2V0X3dlYl92aWV3KG1haW5G
cmFtZSk7Ci0gICAgaWYgKCF2aWV3KQotICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmlu
ZWQoY29udGV4dCk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwodmlldywgSlNWYWx1ZU1ha2VV
bmRlZmluZWQoY29udGV4dCkpOwogCiAgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrOjpjb25m
aXJtQ29tcG9zaXRpb24odmlldywgMCk7CiAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVk
KGNvbnRleHQpOwpAQCAtMTAwLDExICsxMTUsOCBAQCBzdGF0aWMgSlNWYWx1ZVJlZiB1bm1hcmtU
ZXh0Q2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLAog
c3RhdGljIEpTVmFsdWVSZWYgZmlyc3RSZWN0Rm9yQ2hhcmFjdGVyUmFuZ2VDYWxsYmFjayhKU0Nv
bnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNP
YmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1td
LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCiB7CiAgICAgV2ViS2l0V2ViVmlldyogdmlldyA9IHdl
YmtpdF93ZWJfZnJhbWVfZ2V0X3dlYl92aWV3KG1haW5GcmFtZSk7Ci0gICAgaWYgKCF2aWV3KQot
ICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci0KLSAgICBpZiAo
YXJndW1lbnRDb3VudCA8IDIpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChj
b250ZXh0KTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbCh2aWV3LCBKU1ZhbHVlTWFrZVVuZGVm
aW5lZChjb250ZXh0KSk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoYXJndW1lbnRDb3VudCA+
PSAyLCBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KSk7CiAKICAgICBpbnQgbG9jYXRpb24g
PSBzdGF0aWNfY2FzdDxpbnQ+KEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBhcmd1bWVudHNbMF0s
IGV4Y2VwdGlvbikpOwogICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKCghZXhjZXB0aW9uIHx8ICEq
ZXhjZXB0aW9uKSwgSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCkpOwpAQCAtMTMwLDE2ICsx
NDIsMTUgQEAgc3RhdGljIEpTVmFsdWVSZWYgZmlyc3RSZWN0Rm9yQ2hhcmFjdGVyUmFuZ2VDYWxs
YmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmoKIHN0YXRpYyBKU1ZhbHVlUmVmIHNlbGVj
dGVkUmFuZ2VDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rp
b24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBK
U1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCiB7CiAgICAgV2Vi
S2l0V2ViVmlldyogdmlldyA9IHdlYmtpdF93ZWJfZnJhbWVfZ2V0X3dlYl92aWV3KG1haW5GcmFt
ZSk7Ci0gICAgaWYgKCF2aWV3KQotICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQo
Y29udGV4dCk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwodmlldywgSlNWYWx1ZU1ha2VVbmRl
ZmluZWQoY29udGV4dCkpOwogCi0gICAgaW50IHN0YXJ0LCBlbmQ7Ci0gICAgaWYgKCFEdW1wUmVu
ZGVyVHJlZVN1cHBvcnRHdGs6OnNlbGVjdGVkUmFuZ2UodmlldywgJnN0YXJ0LCAmZW5kKSkKKyAg
ICBpbnQgc3RhcnQsIGxlbmd0aDsKKyAgICBpZiAoIUR1bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6
c2VsZWN0ZWRSYW5nZSh2aWV3LCAmc3RhcnQsICZsZW5ndGgpKQogICAgICAgICByZXR1cm4gSlNW
YWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CiAKICAgICBKU1ZhbHVlUmVmIGFycmF5VmFsdWVz
WzJdOwogICAgIGFycmF5VmFsdWVzWzBdID0gSlNWYWx1ZU1ha2VOdW1iZXIoY29udGV4dCwgc3Rh
cnQpOwotICAgIGFycmF5VmFsdWVzWzFdID0gSlNWYWx1ZU1ha2VOdW1iZXIoY29udGV4dCwgZW5k
KTsKKyAgICBhcnJheVZhbHVlc1sxXSA9IEpTVmFsdWVNYWtlTnVtYmVyKGNvbnRleHQsIGxlbmd0
aCk7CiAgICAgSlNPYmplY3RSZWYgYXJyYXlPYmplY3QgPSBKU09iamVjdE1ha2VBcnJheShjb250
ZXh0LCAyLCBhcnJheVZhbHVlcywgZXhjZXB0aW9uKTsKICAgICBnX3JldHVybl92YWxfaWZfZmFp
bCgoIWV4Y2VwdGlvbiB8fCAhKmV4Y2VwdGlvbiksIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRl
eHQpKTsKIApAQCAtMTQ4LDYgKzE1OSw4IEBAIHN0YXRpYyBKU1ZhbHVlUmVmIHNlbGVjdGVkUmFu
Z2VDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3RpCiAKIHN0
YXRpYyBKU1N0YXRpY0Z1bmN0aW9uIHN0YXRpY0Z1bmN0aW9uc1tdID0gewogICAgIHsgInNldE1h
cmtlZFRleHQiLCBzZXRNYXJrZWRUZXh0Q2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVh
ZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKKyAgICB7ICJoYXNNYXJr
ZWRUZXh0IiwgaGFzTWFya2VkVGV4dENhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRP
bmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCisgICAgeyAibWFya2VkUmFu
Z2UiLCBtYXJrZWRSYW5nZUNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwg
a0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAgeyAiaW5zZXJ0VGV4dCIsIGlu
c2VydFRleHRDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3Bl
cnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAogICAgIHsgInVubWFya1RleHQiLCB1bm1hcmtUZXh0
Q2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJp
YnV0ZURvbnREZWxldGUgfSwKICAgICB7ICJmaXJzdFJlY3RGb3JDaGFyYWN0ZXJSYW5nZSIsIGZp
cnN0UmVjdEZvckNoYXJhY3RlclJhbmdlQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVh
ZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>84586</attachid>
            <date>2011-03-03 10:53:51 -0800</date>
            <delta_ts>2011-03-03 11:08:25 -0800</delta_ts>
            <desc>Patch with Carlos&apos; suggestions</desc>
            <filename>bug-55603-20110303105351.patch</filename>
            <type>text/plain</type>
            <size>18912</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODAxMzkKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA4ZDQ0YWI0NjFjZWI2ZTNkODVjMTY2
MzRmYjczYjMwNzQzZDdlYzA5Li5kN2ZmODIxNmZjOGVkNmEwNjk2NmNlYmU3ZDI2MDYxMDI4ODMy
M2QxIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTEtMDMtMDIgIE1hcnRpbiBSb2JpbnNvbiAg
PG1yb2JpbnNvbkBpZ2FsaWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFtHVEtdIEltcGxlbWVudCB0aGUgbmV4dCBiaXQgb2YgdGhlIFRleHRJ
bnB1dENvbnRyb2xsZXIgKGhhc01hcmtlZFRleHQgYW5kIG1hcmtlZFJhbmdlKQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTU2MDMKKworICAgICAgICAq
IHBsYXRmb3JtL2d0ay9Ta2lwcGVkOiBVbnNraXAgYSB0ZXN0IHRoYXQgaXMgbm93IHBhc3Npbmcu
IEJldHRlciBkZXNjcmliZSByZW1haW5pbmcgZmFpbHVyZXMuCisKIDIwMTEtMDItMTYgIEpvaG4g
S25vdHRlbmJlbHQgIDxqa25vdHRlbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgRG1pdHJ5IFRpdG92LgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1Nr
aXBwZWQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvU2tpcHBlZAppbmRleCAyMTdhN2VlNjVi
MWU5NzgzYWJkOTkzZjJiMmFjYjBhNmU0NDg0YmEzLi42MDZlMmU3YWVhOGEyZDQ4NzZiMTMyNWE0
ZWNkMDAzMDZhZmVmZDQ3IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvU2tp
cHBlZAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvU2tpcHBlZApAQCAtNjY0LDggKzY2
NCw4IEBAIGh0dHAvdGVzdHMvZ2xvYmFsaGlzdG9yeQogIyBOZWVkIHRvIGFkZCBmdW5jdGlvbmFs
aXR5IHRvIER1bXBSZW5kZXJUcmVlIHRvIGhhbmRsZSBlcnJvciBwYWdlcwogZmFzdC9oaXN0b3J5
L2JhY2stZm9yd2FyZC1yZXNldC1hZnRlci1lcnJvci1oYW5kbGluZy5odG1sCiAKLSMgTWlzc2lu
ZyB0ZXh0SW5wdXRDb250cm9sbGVyCi1lZGl0aW5nL2lucHV0L3NldHRpbmctaW5wdXQtdmFsdWUt
Y2FuY2VsLWltZS1jb21wb3NpdGlvbi5odG1sCisjIFRoZXNlIHRlc3RzIGFsc28gdXNlIGZpcnN0
UmVjdEZvckNoYXJhY3RlclJhbmdlLCBidXQgdGhleSBnZW5lcmF0ZSBzbGlnaHRseQorIyBkaWZm
ZXJlbnQgdmFsdWVzLiAoQ2hyb21pdW0gYWxzbyBmYWlscyBoZXJlOyBzZWUgdGhlaXIgdGVzdF9l
eHBlY3RhdGlvbnMudHh0IGZpbGUpCiBlZGl0aW5nL3NlbGVjdGlvbi9taXhlZC1lZGl0YWJpbGl0
eS0xMC5odG1sCiBlZGl0aW5nL3NlbGVjdGlvbi81ODI1MzUwLTEuaHRtbAogZWRpdGluZy9zZWxl
Y3Rpb24vNTgyNTM1MC0yLmh0bWwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZwppbmRleCAzYTFhZDJlODI4NGY0NTll
NDgzZjU0ODk4NGJiZGJmMDNjNDA4MjU5Li5kZGI1MmNhY2ZiYzJkZjU3ZjJhNWNkM2Q1MTZkZTE3
MzEzMTY0NTk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKKysrIGIv
U291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjMgQEAKKzIwMTEtMDMtMDIg
IE1hcnRpbiBSb2JpbnNvbiAgPG1yb2JpbnNvbkBpZ2FsaWEuY29tPgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtHVEtdIEltcGxlbWVudCB0aGUgbmV4
dCBiaXQgb2YgdGhlIFRleHRJbnB1dENvbnRyb2xsZXIgKGhhc01hcmtlZFRleHQgYW5kIG1hcmtl
ZFJhbmdlKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NTU2MDMKKworICAgICAgICBBZGRlZCBEdW1wUmVuZGVyVHJlZVN1cHBvcnQgbWV0aG9kcyB0byBz
dXBwb3J0IGhhc01hcmtlZFRleHQgYW5kIG1hcmtlZFJhbmdlLgorCisgICAgICAgICogV2ViQ29y
ZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrLmNwcDoKKyAgICAgICAgKER1bXBSZW5k
ZXJUcmVlU3VwcG9ydEd0azo6c2V0Q29tcG9zaXRpb24pOiBVc2Ugc3RhcnQgYW5kIGxlbmd0aCBy
YXRoZXIgdGhhbiBzdGFydCBhbmQKKyAgICAgICAgZW5kLiBUaGlzIG1hdGNoZXMgb3RoZXIgcG9y
dHMuIE9ubHkgdXNlIEdMaWIgc3R5bGUgZWFybHkgcmV0dXJucyB3aGVuIGNoZWNraW5nIHRoZQor
ICAgICAgICB2YWxpZGl0eSBvZiBHT2JqZWN0cy4KKyAgICAgICAgKER1bXBSZW5kZXJUcmVlU3Vw
cG9ydEd0azo6aGFzQ29tcG9zaXRpb24pOiAgQWRkZWQuCisgICAgICAgIChEdW1wUmVuZGVyVHJl
ZVN1cHBvcnRHdGs6OmNvbXBvc2l0aW9uUmFuZ2UpOiBBZGRlZC4KKyAgICAgICAgKER1bXBSZW5k
ZXJUcmVlU3VwcG9ydEd0azo6Y29uZmlybUNvbXBvc2l0aW9uKTogQ2xlYW51cCBhcyBkZXNjcmli
ZWQgYWJvdmUuCisgICAgICAgIChEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6OmZpcnN0UmVjdEZv
ckNoYXJhY3RlclJhbmdlKTogQ2xlYW51cCBhcyBkZXNjcmliZWQgYWJvdmUuCisgICAgICAgIChE
dW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6OnNlbGVjdGVkUmFuZ2UpOiBDbGVhbnVwIGFzIGRlc2Ny
aWJlZCBhYm92ZS4KKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBv
cnRHdGsuaDogQWRkZWQgbmV3IGRlY2xhcmF0aW9ucy4KKwogMjAxMS0wMy0wMSAgSm9zZXBoIFBl
Y29yYXJvICA8am9lcGVja0B3ZWJraXQub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQuIFJvbGwg
b3V0IHI4MDA2OCBhbmQgcjgwMDczIGR1ZSB0byBicmVha2luZyBXZWJLaXQyIFF0IHBvcnQuCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJl
ZVN1cHBvcnRHdGsuY3BwIGIvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRHVtcFJl
bmRlclRyZWVTdXBwb3J0R3RrLmNwcAppbmRleCA2ZGIyYzgxZmUzMzg1ODE1NGZkYjE3NDYxNmI2
NGRmYzFiMjc0NjJiLi5mMjk5NjYwN2FlYTUzODdmNzMwN2IzY2Y4MTg1NmYzNzAyNGYwZTUyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJl
ZVN1cHBvcnRHdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0R1
bXBSZW5kZXJUcmVlU3VwcG9ydEd0ay5jcHAKQEAgLTQ4NiwyNSArNDg2LDU1IEBAIGJvb2wgRHVt
cFJlbmRlclRyZWVTdXBwb3J0R3RrOjppc0NvbW1hbmRFbmFibGVkKFdlYktpdFdlYlZpZXcqIHdl
YlZpZXcsIGNvbnN0IGdjCiAgICAgcmV0dXJuIGNvcmUod2ViVmlldyktPmZvY3VzQ29udHJvbGxl
cigpLT5mb2N1c2VkT3JNYWluRnJhbWUoKS0+ZWRpdG9yKCktPmNvbW1hbmQobmFtZSkuaXNFbmFi
bGVkKCk7CiB9CiAKLXZvaWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrOjpzZXRDb21wb3NpdGlv
bihXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBjb25zdCBjaGFyKiB0ZXh0LCBpbnQgc3RhcnQsIGlu
dCBlbmQpCit2b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6c2V0Q29tcG9zaXRpb24oV2Vi
S2l0V2ViVmlldyogd2ViVmlldywgY29uc3QgY2hhciogdGV4dCwgaW50IHN0YXJ0LCBpbnQgbGVu
Z3RoKQogewogICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9WSUVXKHdlYlZpZXcp
KTsKLSAgICBnX3JldHVybl9pZl9mYWlsKHRleHQpOworICAgIEFTU0VSVCh0ZXh0KTsKIAogICAg
IEZyYW1lKiBmcmFtZSA9IGNvcmUod2ViVmlldyktPmZvY3VzQ29udHJvbGxlcigpLT5mb2N1c2Vk
T3JNYWluRnJhbWUoKTsKICAgICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1cm47CiAKICAgICBF
ZGl0b3IqIGVkaXRvciA9IGZyYW1lLT5lZGl0b3IoKTsKLSAgICBpZiAoIWVkaXRvcikKLSAgICAg
ICAgcmV0dXJuOwotICAgIGlmICghZWRpdG9yLT5jYW5FZGl0KCkgJiYgIWVkaXRvci0+aGFzQ29t
cG9zaXRpb24oKSkKKyAgICBpZiAoIWVkaXRvciB8fCAoIWVkaXRvci0+Y2FuRWRpdCgpICYmICFl
ZGl0b3ItPmhhc0NvbXBvc2l0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAKICAgICBTdHJpbmcg
Y29tcG9zaXRpb25TdHJpbmcgPSBTdHJpbmc6OmZyb21VVEY4KHRleHQpOwogICAgIFZlY3RvcjxD
b21wb3NpdGlvblVuZGVybGluZT4gdW5kZXJsaW5lczsKICAgICB1bmRlcmxpbmVzLmFwcGVuZChD
b21wb3NpdGlvblVuZGVybGluZSgwLCBjb21wb3NpdGlvblN0cmluZy5sZW5ndGgoKSwgQ29sb3Io
MCwgMCwgMCksIGZhbHNlKSk7Ci0gICAgZWRpdG9yLT5zZXRDb21wb3NpdGlvbihjb21wb3NpdGlv
blN0cmluZywgdW5kZXJsaW5lcywgc3RhcnQsIGVuZCk7CisgICAgZWRpdG9yLT5zZXRDb21wb3Np
dGlvbihjb21wb3NpdGlvblN0cmluZywgdW5kZXJsaW5lcywgc3RhcnQsIHN0YXJ0ICsgbGVuZ3Ro
KTsKK30KKworYm9vbCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6Omhhc0NvbXBvc2l0aW9uKFdl
YktpdFdlYlZpZXcqIHdlYlZpZXcpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lU
X0lTX1dFQl9WSUVXKHdlYlZpZXcpLCBmYWxzZSk7CisgICAgRnJhbWUqIGZyYW1lID0gY29yZSh3
ZWJWaWV3KS0+Zm9jdXNDb250cm9sbGVyKCktPmZvY3VzZWRPck1haW5GcmFtZSgpOworICAgIGlm
ICghZnJhbWUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBFZGl0b3IqIGVkaXRvciA9IGZy
YW1lLT5lZGl0b3IoKTsKKyAgICBpZiAoIWVkaXRvcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgcmV0dXJuIGVkaXRvci0+aGFzQ29tcG9zaXRpb24oKTsKK30KKworYm9vbCBEdW1wUmVu
ZGVyVHJlZVN1cHBvcnRHdGs6OmNvbXBvc2l0aW9uUmFuZ2UoV2ViS2l0V2ViVmlldyogd2ViVmll
dywgaW50KiBzdGFydCwgaW50KiBsZW5ndGgpCit7CisgICAgQVNTRVJUKHN0YXJ0ICYmIGVuZCk7
CisgICAgKnN0YXJ0ID0gKmxlbmd0aCA9IDA7CisKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChX
RUJLSVRfSVNfV0VCX1ZJRVcod2ViVmlldyksIGZhbHNlKTsKKyAgICBGcmFtZSogZnJhbWUgPSBj
b3JlKHdlYlZpZXcpLT5mb2N1c0NvbnRyb2xsZXIoKS0+Zm9jdXNlZE9yTWFpbkZyYW1lKCk7Cisg
ICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgRWRpdG9yKiBlZGl0
b3IgPSBmcmFtZS0+ZWRpdG9yKCk7CisgICAgaWYgKCFlZGl0b3IgfHwgIWVkaXRvci0+aGFzQ29t
cG9zaXRpb24oKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgKnN0YXJ0ID0gZWRpdG9y
LT5jb21wb3NpdGlvblN0YXJ0KCk7CisgICAgKmxlbmd0aCA9IGVkaXRvci0+Y29tcG9zaXRpb25F
bmQoKSAtICpzdGFydDsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogdm9pZCBEdW1wUmVuZGVyVHJl
ZVN1cHBvcnRHdGs6OmNvbmZpcm1Db21wb3NpdGlvbihXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBj
b25zdCBjaGFyKiB0ZXh0KQpAQCAtNTE2LDE2ICs1NDYsMTggQEAgdm9pZCBEdW1wUmVuZGVyVHJl
ZVN1cHBvcnRHdGs6OmNvbmZpcm1Db21wb3NpdGlvbihXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBj
b25zdAogICAgICAgICByZXR1cm47CiAKICAgICBFZGl0b3IqIGVkaXRvciA9IGZyYW1lLT5lZGl0
b3IoKTsKLSAgICBpZiAoIWVkaXRvciB8fCAoIWVkaXRvci0+aGFzQ29tcG9zaXRpb24oKSAmJiAh
dGV4dCkpCisgICAgaWYgKCFlZGl0b3IpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChlZGl0
b3ItPmhhc0NvbXBvc2l0aW9uKCkpIHsKLSAgICAgICAgaWYgKHRleHQpCi0gICAgICAgICAgICBl
ZGl0b3ItPmNvbmZpcm1Db21wb3NpdGlvbihTdHJpbmc6OmZyb21VVEY4KHRleHQpKTsKLSAgICAg
ICAgZWxzZQotICAgICAgICAgICAgZWRpdG9yLT5jb25maXJtQ29tcG9zaXRpb24oKTsKLSAgICB9
IGVsc2UKKyAgICBpZiAoIWVkaXRvci0+aGFzQ29tcG9zaXRpb24oKSkgewogICAgICAgICBlZGl0
b3ItPmluc2VydFRleHQoU3RyaW5nOjpmcm9tVVRGOCh0ZXh0KSwgMCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgaWYgKHRleHQpIHsKKyAgICAgICAgZWRpdG9yLT5jb25maXJtQ29tcG9z
aXRpb24oU3RyaW5nOjpmcm9tVVRGOCh0ZXh0KSk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgZWRpdG9yLT5jb25maXJtQ29tcG9zaXRpb24oKTsKIH0KIAogYm9vbCBEdW1wUmVuZGVyVHJl
ZVN1cHBvcnRHdGs6OmZpcnN0UmVjdEZvckNoYXJhY3RlclJhbmdlKFdlYktpdFdlYlZpZXcqIHdl
YlZpZXcsIGludCBsb2NhdGlvbiwgaW50IGxlbmd0aCwgR2RrUmVjdGFuZ2xlKiByZWN0KQpAQCAt
NTUxLDIxICs1ODMsMjEgQEAgYm9vbCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6OmZpcnN0UmVj
dEZvckNoYXJhY3RlclJhbmdlKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCiAgICAgKnJlY3QgPSBlZGl0b3ItPmZpcnN0UmVjdEZvclJhbmdlKHJhbmdlLmdl
dCgpKTsKLQogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIER1bXBSZW5kZXJUcmVlU3VwcG9y
dEd0azo6c2VsZWN0ZWRSYW5nZShXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBpbnQqIHN0YXJ0LCBp
bnQqIGVuZCkKK2Jvb2wgRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrOjpzZWxlY3RlZFJhbmdlKFdl
YktpdFdlYlZpZXcqIHdlYlZpZXcsIGludCogc3RhcnQsIGludCogbGVuZ3RoKQogewogICAgIGdf
cmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19XRUJfVklFVyh3ZWJWaWV3KSwgZmFsc2UpOwot
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHN0YXJ0LCBmYWxzZSk7Ci0gICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoZW5kLCBmYWxzZSk7CisgICAgQVNTRVJUKHN0YXJ0ICYmIGVuZCk7CiAKICAgICBG
cmFtZSogZnJhbWUgPSBjb3JlKHdlYlZpZXcpLT5mb2N1c0NvbnRyb2xsZXIoKS0+Zm9jdXNlZE9y
TWFpbkZyYW1lKCk7CiAgICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAg
ICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IGZyYW1lLT5zZWxlY3Rpb24oKS0+dG9Ob3JtYWxpemVk
UmFuZ2UoKS5nZXQoKTsKKyAgICBpZiAoIXJhbmdlKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAK
ICAgICBFbGVtZW50KiBzZWxlY3Rpb25Sb290ID0gZnJhbWUtPnNlbGVjdGlvbigpLT5yb290RWRp
dGFibGVFbGVtZW50KCk7CiAgICAgRWxlbWVudCogc2NvcGUgPSBzZWxlY3Rpb25Sb290ID8gc2Vs
ZWN0aW9uUm9vdCA6IGZyYW1lLT5kb2N1bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKTsKQEAgLTU3
Nyw3ICs2MDksNyBAQCBib29sIER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6c2VsZWN0ZWRSYW5n
ZShXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBpbnQqIHN0YXJ0LAogICAgIEV4Y2VwdGlvbkNvZGUg
ZWM7CiAgICAgdGVzdFJhbmdlLT5zZXRFbmQocmFuZ2UtPmVuZENvbnRhaW5lcigpLCByYW5nZS0+
ZW5kT2Zmc2V0KCksIGVjKTsKICAgICBBU1NFUlQodGVzdFJhbmdlLT5zdGFydENvbnRhaW5lcigp
ID09IHNjb3BlKTsKLSAgICAqZW5kID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aCh0ZXN0UmFu
Z2UuZ2V0KCkpOworICAgICpsZW5ndGggPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKHRlc3RS
YW5nZS5nZXQoKSk7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEd0ay5oIGIvU291
cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrLmgK
aW5kZXggNTk1ZDZkYTQzNmY5MWMxMzI2NjBkYmEzY2U0YzUxZTQ0Nzk2NjNlMi4uNjBmODY2MjRi
NmQ0YTRiM2RjMzE3MWFhOTY2ZDdmMWQ1N2NlNGNhOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9ndGsvV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrLmgKKysrIGIvU291
cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrLmgK
QEAgLTkwLDEzICs5MCwxNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgZXhlY3V0ZUNvcmVD
b21tYW5kQnlOYW1lKFdlYktpdFdlYlZpZXcqLCBjb25zdCBnY2hhciogbmFtZSwgY29uc3QgZ2No
YXIqIHZhbHVlKTsKICAgICBzdGF0aWMgYm9vbCBpc0NvbW1hbmRFbmFibGVkKFdlYktpdFdlYlZp
ZXcqLCBjb25zdCBnY2hhciogbmFtZSk7CiAgICAgc3RhdGljIGJvb2wgZmluZFN0cmluZyhXZWJL
aXRXZWJWaWV3KiwgY29uc3QgZ2NoYXIqLCBXZWJLaXRGaW5kT3B0aW9ucyk7Ci0gICAgc3RhdGlj
IHZvaWQgc2V0Q29tcG9zaXRpb24oV2ViS2l0V2ViVmlldyosIGNvbnN0IGNoYXIqIHRleHQsIGlu
dCBzdGFydCwgaW50IGVuZCk7Ci0gICAgc3RhdGljIHZvaWQgY29uZmlybUNvbXBvc2l0aW9uKFdl
YktpdFdlYlZpZXcqLCBjb25zdCBjaGFyKiB0ZXh0KTsKLSAgICBzdGF0aWMgYm9vbCBmaXJzdFJl
Y3RGb3JDaGFyYWN0ZXJSYW5nZShXZWJLaXRXZWJWaWV3KiwgaW50IGxvY2F0aW9uLCBpbnQgbGVu
Z3RoLCBHZGtSZWN0YW5nbGUqKTsKLSAgICBzdGF0aWMgYm9vbCBzZWxlY3RlZFJhbmdlKFdlYktp
dFdlYlZpZXcqLCBpbnQqIHN0YXJ0LCBpbnQqIGVuZCk7CiAgICAgc3RhdGljIGRvdWJsZSBkZWZh
dWx0TWluaW11bVRpbWVySW50ZXJ2YWwoKTsgLy8gTm90IHJlYWxseSB0aWVkIHRvIFdlYlZpZXcK
ICAgICBzdGF0aWMgdm9pZCBzZXRNaW5pbXVtVGltZXJJbnRlcnZhbChXZWJLaXRXZWJWaWV3Kiwg
ZG91YmxlKTsKIAorICAgIC8vIFRleHRJbnB1dENvbnRyb2xsZXIKKyAgICBzdGF0aWMgdm9pZCBz
ZXRDb21wb3NpdGlvbihXZWJLaXRXZWJWaWV3KiwgY29uc3QgY2hhciosIGludCBzdGFydCwgaW50
IGxlbmd0aCk7CisgICAgc3RhdGljIGJvb2wgaGFzQ29tcG9zaXRpb24oV2ViS2l0V2ViVmlldyop
OworICAgIHN0YXRpYyBib29sIGNvbXBvc2l0aW9uUmFuZ2UoV2ViS2l0V2ViVmlldyosIGludCog
c3RhcnQsIGludCogbGVuZ3RoKTsKKyAgICBzdGF0aWMgdm9pZCBjb25maXJtQ29tcG9zaXRpb24o
V2ViS2l0V2ViVmlldyosIGNvbnN0IGNoYXIqKTsKKyAgICBzdGF0aWMgYm9vbCBmaXJzdFJlY3RG
b3JDaGFyYWN0ZXJSYW5nZShXZWJLaXRXZWJWaWV3KiwgaW50IGxvY2F0aW9uLCBpbnQgbGVuZ3Ro
LCBHZGtSZWN0YW5nbGUqKTsKKyAgICBzdGF0aWMgYm9vbCBzZWxlY3RlZFJhbmdlKFdlYktpdFdl
YlZpZXcqLCBpbnQqIHN0YXJ0LCBpbnQqIGxlbmd0aCk7CisKICAgICAvLyBHQwogICAgIHN0YXRp
YyB2b2lkIGdjQ29sbGVjdEphdmFzY3JpcHRPYmplY3RzKCk7CiAgICAgc3RhdGljIHZvaWQgZ2ND
b2xsZWN0SmF2YXNjcmlwdE9iamVjdHNPbkFsdGVybmF0ZVRocmVhZChib29sIHdhaXRVbnRpbERv
bmUpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4
IGJmYmZhM2Q3Zjk3NmZkYWQzNTJjNjgyOGY0NTdiNjM3NjY3NDgzNDcuLjZmNjE2OWViZWQ5NWU4
YmY4YTY1ODQ2NWVlNWNhMThjMGYzYjY2ZDUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZwor
KysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMyBAQAorMjAxMS0wMy0wMiAgTWFydGlu
IFJvYmluc29uICA8bXJvYmluc29uQGlnYWxpYS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW0dUS10gSW1wbGVtZW50IHRoZSBuZXh0IGJpdCBv
ZiB0aGUgVGV4dElucHV0Q29udHJvbGxlciAoaGFzTWFya2VkVGV4dCBhbmQgbWFya2VkUmFuZ2Up
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NTYwMwor
CisgICAgICAgIEFkZCBjYWxsYmFja3MgdG8gc3VwcG9ydCBoYXNNYXJrZWRUZXh0IGFuZCBtYXJr
ZWRSYW5nZSBhbmQgYWxzbyBjbGVhbiB1cCBleGlzdGluZyAKKyAgICAgICAgVGV4dElucHV0Q29u
dHJvbGxlciBzdXBwb3J0LgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvZ3RrL1RleHRJbnB1
dENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoc2V0TWFya2VkVGV4dENhbGxiYWNrKTogQWNjZXB0
IHBhcmFtZXRlcnMgaW4gdGVybXMgb2Ygc3RhcnQgYW5kIGxlbmd0aCwgaW5zdGVhZAorICAgICAg
ICBvZiBzdGFydCBhbmQgZW5kLiBUaGlzIG1hdGNoZXMgdGhlIG90aGVyIHBvcnRzLiBEbyBub3Qg
dXNlIEdMaWIgc3R5bGUgZWFybHkgcmV0dXJucy4KKyAgICAgICAgKGhhc01hcmtlZFRleHRDYWxs
YmFjayk6IEFkZGVkLgorICAgICAgICAobWFya2VkUmFuZ2VDYWxsYmFjayk6IEFkZGVkLgorICAg
ICAgICAoaW5zZXJ0VGV4dENhbGxiYWNrKTogQ2xlYW51cCBhcyBkZXNjcmliZWQgYWJvdmUuCisg
ICAgICAgICh1bm1hcmtUZXh0Q2FsbGJhY2spOiBDbGVhbnVwIGFzIGRlc2NyaWJlZCBhYm92ZS4K
KyAgICAgICAgKGZpcnN0UmVjdEZvckNoYXJhY3RlclJhbmdlQ2FsbGJhY2spOiBDbGVhbnVwIGFz
IGRlc2NyaWJlZCBhYm92ZS4KKyAgICAgICAgKHNlbGVjdGVkUmFuZ2VDYWxsYmFjayk6IENsZWFu
dXAgYXMgZGVzY3JpYmVkIGFib3ZlLgorCiAyMDExLTAxLTI2ICBKb2huIEtub3R0ZW5iZWx0ICA8
amtub3R0ZW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERtaXRyeSBUaXRv
di4KZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9UZXh0SW5wdXRDb250cm9s
bGVyLmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9UZXh0SW5wdXRDb250cm9sbGVyLmNw
cAppbmRleCA3MjQzZmRjMjMxNTYyM2JiYjI5ZGM3ZmJkMjBmZTZjM2I4MGU0MmU0Li5mYzQ3YmQ1
ZThkMzU1ZTczNDc4ZTBlNDc1NDEzNzY3NzM1Mjk2NmE1IDEwMDY0NAotLS0gYS9Ub29scy9EdW1w
UmVuZGVyVHJlZS9ndGsvVGV4dElucHV0Q29udHJvbGxlci5jcHAKKysrIGIvVG9vbHMvRHVtcFJl
bmRlclRyZWUvZ3RrL1RleHRJbnB1dENvbnRyb2xsZXIuY3BwCkBAIC00MCwxNCArNDAsMTIgQEAK
IHN0YXRpYyBKU1ZhbHVlUmVmIHNldE1hcmtlZFRleHRDYWxsYmFjayhKU0NvbnRleHRSZWYgY29u
dGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVf
dCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVm
KiBleGNlcHRpb24pCiB7CiAgICAgV2ViS2l0V2ViVmlldyogdmlldyA9IHdlYmtpdF93ZWJfZnJh
bWVfZ2V0X3dlYl92aWV3KG1haW5GcmFtZSk7Ci0gICAgaWYgKCF2aWV3KQotICAgICAgICByZXR1
cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci0KKyAgICBBU1NFUlQodmlldyk7CiAg
ICAgaWYgKGFyZ3VtZW50Q291bnQgPCAzKQogICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRl
ZmluZWQoY29udGV4dCk7CiAKICAgICBKU1N0cmluZ1JlZiBzdHJpbmcgPSBKU1ZhbHVlVG9TdHJp
bmdDb3B5KGNvbnRleHQsIGFyZ3VtZW50c1swXSwgZXhjZXB0aW9uKTsKLSAgICBnX3JldHVybl92
YWxfaWZfZmFpbCgoIWV4Y2VwdGlvbiB8fCAhKmV4Y2VwdGlvbiksIEpTVmFsdWVNYWtlVW5kZWZp
bmVkKGNvbnRleHQpKTsKKyAgICBBU1NFUlQoIWV4Y2VwdGlvbiB8fCAhKmV4Y2VwdGlvbik7CiAK
ICAgICBzaXplX3QgYnVmZmVyU2l6ZSA9IEpTU3RyaW5nR2V0TWF4aW11bVVURjhDU3RyaW5nU2l6
ZShzdHJpbmcpOwogICAgIEdPd25QdHI8Z2NoYXI+IHN0cmluZ0J1ZmZlcihzdGF0aWNfY2FzdDxn
Y2hhcio+KGdfbWFsbG9jKGJ1ZmZlclNpemUpKSk7CkBAIC01NSwyNyArNTMsNDkgQEAgc3RhdGlj
IEpTVmFsdWVSZWYgc2V0TWFya2VkVGV4dENhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBK
U09iamVjdFJlZiBmdW5jdGkKICAgICBKU1N0cmluZ1JlbGVhc2Uoc3RyaW5nKTsKIAogICAgIGlu
dCBzdGFydCA9IHN0YXRpY19jYXN0PGludD4oSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIGFyZ3Vt
ZW50c1sxXSwgZXhjZXB0aW9uKSk7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoKCFleGNlcHRp
b24gfHwgISpleGNlcHRpb24pLCBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KSk7CisgICAg
QVNTRVJUKCFleGNlcHRpb24gfHwgISpleGNlcHRpb24pOwogCi0gICAgaW50IGVuZCA9IHN0YXRp
Y19jYXN0PGludD4oSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIGFyZ3VtZW50c1syXSwgZXhjZXB0
aW9uKSk7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoKCFleGNlcHRpb24gfHwgISpleGNlcHRp
b24pLCBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KSk7Ci0KLSAgICBEdW1wUmVuZGVyVHJl
ZVN1cHBvcnRHdGs6OnNldENvbXBvc2l0aW9uKHZpZXcsIHN0cmluZ0J1ZmZlci5nZXQoKSwgc3Rh
cnQsIGVuZCk7CisgICAgaW50IGxlbmd0aCA9IHN0YXRpY19jYXN0PGludD4oSlNWYWx1ZVRvTnVt
YmVyKGNvbnRleHQsIGFyZ3VtZW50c1syXSwgZXhjZXB0aW9uKSk7CisgICAgQVNTRVJUKCFleGNl
cHRpb24gfHwgISpleGNlcHRpb24pOwogCisgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrOjpz
ZXRDb21wb3NpdGlvbih2aWV3LCBzdHJpbmdCdWZmZXIuZ2V0KCksIHN0YXJ0LCBsZW5ndGgpOwog
ICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKIH0KIAotc3RhdGljIEpT
VmFsdWVSZWYgaW5zZXJ0VGV4dENhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVj
dFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291
bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikK
K3N0YXRpYyBKU1ZhbHVlUmVmIGhhc01hcmtlZFRleHRDYWxsYmFjayhKU0NvbnRleHRSZWYgY29u
dGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVf
dCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVm
KiBleGNlcHRpb24pCiB7CiAgICAgV2ViS2l0V2ViVmlldyogdmlldyA9IHdlYmtpdF93ZWJfZnJh
bWVfZ2V0X3dlYl92aWV3KG1haW5GcmFtZSk7Ci0gICAgaWYgKCF2aWV3KQorICAgIEFTU0VSVCh2
aWV3KTsKKyAgICByZXR1cm4gSlNWYWx1ZU1ha2VCb29sZWFuKGNvbnRleHQsIER1bXBSZW5kZXJU
cmVlU3VwcG9ydEd0azo6aGFzQ29tcG9zaXRpb24odmlldykpOworfQorCitzdGF0aWMgSlNWYWx1
ZVJlZiBtYXJrZWRSYW5nZUNhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJl
ZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQs
IGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sK
KyAgICBXZWJLaXRXZWJWaWV3KiB2aWV3ID0gd2Via2l0X3dlYl9mcmFtZV9nZXRfd2ViX3ZpZXco
bWFpbkZyYW1lKTsKKyAgICBBU1NFUlQodmlldyk7CisKKyAgICBpbnQgc3RhcnQsIGxlbmd0aDsK
KyAgICBpZiAoIUR1bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6Y29tcG9zaXRpb25SYW5nZSh2aWV3
LCAmc3RhcnQsICZsZW5ndGgpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQo
Y29udGV4dCk7CiAKKyAgICBKU1ZhbHVlUmVmIGFycmF5VmFsdWVzWzJdOworICAgIGFycmF5VmFs
dWVzWzBdID0gSlNWYWx1ZU1ha2VOdW1iZXIoY29udGV4dCwgc3RhcnQpOworICAgIGFycmF5VmFs
dWVzWzFdID0gSlNWYWx1ZU1ha2VOdW1iZXIoY29udGV4dCwgbGVuZ3RoKTsKKyAgICBKU09iamVj
dFJlZiBhcnJheU9iamVjdCA9IEpTT2JqZWN0TWFrZUFycmF5KGNvbnRleHQsIDIsIGFycmF5VmFs
dWVzLCBleGNlcHRpb24pOworICAgIEFTU0VSVCghZXhjZXB0aW9uIHx8ICEqZXhjZXB0aW9uKTsK
KyAgICByZXR1cm4gYXJyYXlPYmplY3Q7Cit9CisKK3N0YXRpYyBKU1ZhbHVlUmVmIGluc2VydFRl
eHRDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpT
T2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVl
UmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgV2ViS2l0V2Vi
VmlldyogdmlldyA9IHdlYmtpdF93ZWJfZnJhbWVfZ2V0X3dlYl92aWV3KG1haW5GcmFtZSk7Cisg
ICAgQVNTRVJUKHZpZXcpOworCiAgICAgaWYgKGFyZ3VtZW50Q291bnQgPCAxKQotICAgICAgICBy
ZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CisgICAgICAgIEpTVmFsdWVNYWtl
VW5kZWZpbmVkKGNvbnRleHQpOwogCiAgICAgSlNTdHJpbmdSZWYgc3RyaW5nID0gSlNWYWx1ZVRv
U3RyaW5nQ29weShjb250ZXh0LCBhcmd1bWVudHNbMF0sIGV4Y2VwdGlvbik7Ci0gICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwoKCFleGNlcHRpb24gfHwgISpleGNlcHRpb24pLCBKU1ZhbHVlTWFrZVVu
ZGVmaW5lZChjb250ZXh0KSk7CisgICAgQVNTRVJUKCFleGNlcHRpb24gfHwgISpleGNlcHRpb24p
OwogCiAgICAgc2l6ZV90IGJ1ZmZlclNpemUgPSBKU1N0cmluZ0dldE1heGltdW1VVEY4Q1N0cmlu
Z1NpemUoc3RyaW5nKTsKICAgICBHT3duUHRyPGdjaGFyPiBzdHJpbmdCdWZmZXIoc3RhdGljX2Nh
c3Q8Z2NoYXIqPihnX21hbGxvYyhidWZmZXJTaXplKSkpOwpAQCAtODMsMTUgKzEwMywxMyBAQCBz
dGF0aWMgSlNWYWx1ZVJlZiBpbnNlcnRUZXh0Q2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQs
IEpTT2JqZWN0UmVmIGZ1bmN0aW9uLAogICAgIEpTU3RyaW5nUmVsZWFzZShzdHJpbmcpOwogCiAg
ICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrOjpjb25maXJtQ29tcG9zaXRpb24odmlldywgc3Ry
aW5nQnVmZmVyLmdldCgpKTsKLQogICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250
ZXh0KTsKIH0KIAogc3RhdGljIEpTVmFsdWVSZWYgdW5tYXJrVGV4dENhbGxiYWNrKEpTQ29udGV4
dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVj
dCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpT
VmFsdWVSZWYqIGV4Y2VwdGlvbikKIHsKICAgICBXZWJLaXRXZWJWaWV3KiB2aWV3ID0gd2Via2l0
X3dlYl9mcmFtZV9nZXRfd2ViX3ZpZXcobWFpbkZyYW1lKTsKLSAgICBpZiAoIXZpZXcpCi0gICAg
ICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKKyAgICBBU1NFUlQodmll
dyk7CiAKICAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6OmNvbmZpcm1Db21wb3NpdGlvbih2
aWV3LCAwKTsKICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CkBAIC0x
MDAsMTcgKzExOCwxNSBAQCBzdGF0aWMgSlNWYWx1ZVJlZiB1bm1hcmtUZXh0Q2FsbGJhY2soSlND
b250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLAogc3RhdGljIEpTVmFsdWVS
ZWYgZmlyc3RSZWN0Rm9yQ2hhcmFjdGVyUmFuZ2VDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4
dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBh
cmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBl
eGNlcHRpb24pCiB7CiAgICAgV2ViS2l0V2ViVmlldyogdmlldyA9IHdlYmtpdF93ZWJfZnJhbWVf
Z2V0X3dlYl92aWV3KG1haW5GcmFtZSk7Ci0gICAgaWYgKCF2aWV3KQotICAgICAgICByZXR1cm4g
SlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci0KKyAgICBBU1NFUlQodmlldyk7CiAgICAg
aWYgKGFyZ3VtZW50Q291bnQgPCAyKQogICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmlu
ZWQoY29udGV4dCk7CiAKICAgICBpbnQgbG9jYXRpb24gPSBzdGF0aWNfY2FzdDxpbnQ+KEpTVmFs
dWVUb051bWJlcihjb250ZXh0LCBhcmd1bWVudHNbMF0sIGV4Y2VwdGlvbikpOwotICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKCghZXhjZXB0aW9uIHx8ICEqZXhjZXB0aW9uKSwgSlNWYWx1ZU1ha2VV
bmRlZmluZWQoY29udGV4dCkpOworICAgIEFTU0VSVCghZXhjZXB0aW9uIHx8ICEqZXhjZXB0aW9u
KTsKIAogICAgIGludCBsZW5ndGggPSBzdGF0aWNfY2FzdDxpbnQ+KEpTVmFsdWVUb051bWJlcihj
b250ZXh0LCBhcmd1bWVudHNbMV0sIGV4Y2VwdGlvbikpOwotICAgIGdfcmV0dXJuX3ZhbF9pZl9m
YWlsKCghZXhjZXB0aW9uIHx8ICEqZXhjZXB0aW9uKSwgSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29u
dGV4dCkpOworICAgIEFTU0VSVCghZXhjZXB0aW9uIHx8ICEqZXhjZXB0aW9uKTsKIAogICAgIEdk
a1JlY3RhbmdsZSByZWN0OwogICAgIGlmICghRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrOjpmaXJz
dFJlY3RGb3JDaGFyYWN0ZXJSYW5nZSh2aWV3LCBsb2NhdGlvbiwgbGVuZ3RoLCAmcmVjdCkpCkBA
IC0xMjIsNyArMTM4LDcgQEAgc3RhdGljIEpTVmFsdWVSZWYgZmlyc3RSZWN0Rm9yQ2hhcmFjdGVy
UmFuZ2VDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmoKICAgICBhcnJheVZhbHVl
c1syXSA9IEpTVmFsdWVNYWtlTnVtYmVyKGNvbnRleHQsIHJlY3Qud2lkdGgpOwogICAgIGFycmF5
VmFsdWVzWzNdID0gSlNWYWx1ZU1ha2VOdW1iZXIoY29udGV4dCwgcmVjdC5oZWlnaHQpOwogICAg
IEpTT2JqZWN0UmVmIGFycmF5T2JqZWN0ID0gSlNPYmplY3RNYWtlQXJyYXkoY29udGV4dCwgNCwg
YXJyYXlWYWx1ZXMsIGV4Y2VwdGlvbik7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoKCFleGNl
cHRpb24gfHwgISpleGNlcHRpb24pLCBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KSk7Cisg
ICAgQVNTRVJUKCFleGNlcHRpb24gfHwgISpleGNlcHRpb24pOwogCiAgICAgcmV0dXJuIGFycmF5
T2JqZWN0OwogfQpAQCAtMTMwLDI0ICsxNDYsMjUgQEAgc3RhdGljIEpTVmFsdWVSZWYgZmlyc3RS
ZWN0Rm9yQ2hhcmFjdGVyUmFuZ2VDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmoK
IHN0YXRpYyBKU1ZhbHVlUmVmIHNlbGVjdGVkUmFuZ2VDYWxsYmFjayhKU0NvbnRleHRSZWYgY29u
dGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVf
dCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVm
KiBleGNlcHRpb24pCiB7CiAgICAgV2ViS2l0V2ViVmlldyogdmlldyA9IHdlYmtpdF93ZWJfZnJh
bWVfZ2V0X3dlYl92aWV3KG1haW5GcmFtZSk7Ci0gICAgaWYgKCF2aWV3KQotICAgICAgICByZXR1
cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CisgICAgQVNTRVJUKHZpZXcpOwogCi0g
ICAgaW50IHN0YXJ0LCBlbmQ7Ci0gICAgaWYgKCFEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6OnNl
bGVjdGVkUmFuZ2UodmlldywgJnN0YXJ0LCAmZW5kKSkKKyAgICBpbnQgc3RhcnQsIGxlbmd0aDsK
KyAgICBpZiAoIUR1bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6c2VsZWN0ZWRSYW5nZSh2aWV3LCAm
c3RhcnQsICZsZW5ndGgpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29u
dGV4dCk7CiAKICAgICBKU1ZhbHVlUmVmIGFycmF5VmFsdWVzWzJdOwogICAgIGFycmF5VmFsdWVz
WzBdID0gSlNWYWx1ZU1ha2VOdW1iZXIoY29udGV4dCwgc3RhcnQpOwotICAgIGFycmF5VmFsdWVz
WzFdID0gSlNWYWx1ZU1ha2VOdW1iZXIoY29udGV4dCwgZW5kKTsKKyAgICBhcnJheVZhbHVlc1sx
XSA9IEpTVmFsdWVNYWtlTnVtYmVyKGNvbnRleHQsIGxlbmd0aCk7CiAgICAgSlNPYmplY3RSZWYg
YXJyYXlPYmplY3QgPSBKU09iamVjdE1ha2VBcnJheShjb250ZXh0LCAyLCBhcnJheVZhbHVlcywg
ZXhjZXB0aW9uKTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbCgoIWV4Y2VwdGlvbiB8fCAhKmV4
Y2VwdGlvbiksIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpKTsKKyAgICBBU1NFUlQoIWV4
Y2VwdGlvbiB8fCAhKmV4Y2VwdGlvbik7CiAKICAgICByZXR1cm4gYXJyYXlPYmplY3Q7CiB9CiAK
IHN0YXRpYyBKU1N0YXRpY0Z1bmN0aW9uIHN0YXRpY0Z1bmN0aW9uc1tdID0gewogICAgIHsgInNl
dE1hcmtlZFRleHQiLCBzZXRNYXJrZWRUZXh0Q2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRl
UmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKKyAgICB7ICJoYXNN
YXJrZWRUZXh0IiwgaGFzTWFya2VkVGV4dENhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJl
YWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCisgICAgeyAibWFya2Vk
UmFuZ2UiLCBtYXJrZWRSYW5nZUNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5
IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAgeyAiaW5zZXJ0VGV4dCIs
IGluc2VydFRleHRDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1By
b3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAogICAgIHsgInVubWFya1RleHQiLCB1bm1hcmtU
ZXh0Q2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0
dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICB7ICJmaXJzdFJlY3RGb3JDaGFyYWN0ZXJSYW5nZSIs
IGZpcnN0UmVjdEZvckNoYXJhY3RlclJhbmdlQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRl
UmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>84590</attachid>
            <date>2011-03-03 11:08:27 -0800</date>
            <delta_ts>2011-05-02 13:26:42 -0700</delta_ts>
            <desc>Patch which better conforms to the policy stated above</desc>
            <filename>bug-55603-20110303110827.patch</filename>
            <type>text/plain</type>
            <size>18949</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODAxMzkKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA4ZDQ0YWI0NjFjZWI2ZTNkODVjMTY2
MzRmYjczYjMwNzQzZDdlYzA5Li5kN2ZmODIxNmZjOGVkNmEwNjk2NmNlYmU3ZDI2MDYxMDI4ODMy
M2QxIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTEtMDMtMDIgIE1hcnRpbiBSb2JpbnNvbiAg
PG1yb2JpbnNvbkBpZ2FsaWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFtHVEtdIEltcGxlbWVudCB0aGUgbmV4dCBiaXQgb2YgdGhlIFRleHRJ
bnB1dENvbnRyb2xsZXIgKGhhc01hcmtlZFRleHQgYW5kIG1hcmtlZFJhbmdlKQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTU2MDMKKworICAgICAgICAq
IHBsYXRmb3JtL2d0ay9Ta2lwcGVkOiBVbnNraXAgYSB0ZXN0IHRoYXQgaXMgbm93IHBhc3Npbmcu
IEJldHRlciBkZXNjcmliZSByZW1haW5pbmcgZmFpbHVyZXMuCisKIDIwMTEtMDItMTYgIEpvaG4g
S25vdHRlbmJlbHQgIDxqa25vdHRlbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgRG1pdHJ5IFRpdG92LgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1Nr
aXBwZWQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvU2tpcHBlZAppbmRleCAyMTdhN2VlNjVi
MWU5NzgzYWJkOTkzZjJiMmFjYjBhNmU0NDg0YmEzLi42MDZlMmU3YWVhOGEyZDQ4NzZiMTMyNWE0
ZWNkMDAzMDZhZmVmZDQ3IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvU2tp
cHBlZAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvU2tpcHBlZApAQCAtNjY0LDggKzY2
NCw4IEBAIGh0dHAvdGVzdHMvZ2xvYmFsaGlzdG9yeQogIyBOZWVkIHRvIGFkZCBmdW5jdGlvbmFs
aXR5IHRvIER1bXBSZW5kZXJUcmVlIHRvIGhhbmRsZSBlcnJvciBwYWdlcwogZmFzdC9oaXN0b3J5
L2JhY2stZm9yd2FyZC1yZXNldC1hZnRlci1lcnJvci1oYW5kbGluZy5odG1sCiAKLSMgTWlzc2lu
ZyB0ZXh0SW5wdXRDb250cm9sbGVyCi1lZGl0aW5nL2lucHV0L3NldHRpbmctaW5wdXQtdmFsdWUt
Y2FuY2VsLWltZS1jb21wb3NpdGlvbi5odG1sCisjIFRoZXNlIHRlc3RzIGFsc28gdXNlIGZpcnN0
UmVjdEZvckNoYXJhY3RlclJhbmdlLCBidXQgdGhleSBnZW5lcmF0ZSBzbGlnaHRseQorIyBkaWZm
ZXJlbnQgdmFsdWVzLiAoQ2hyb21pdW0gYWxzbyBmYWlscyBoZXJlOyBzZWUgdGhlaXIgdGVzdF9l
eHBlY3RhdGlvbnMudHh0IGZpbGUpCiBlZGl0aW5nL3NlbGVjdGlvbi9taXhlZC1lZGl0YWJpbGl0
eS0xMC5odG1sCiBlZGl0aW5nL3NlbGVjdGlvbi81ODI1MzUwLTEuaHRtbAogZWRpdGluZy9zZWxl
Y3Rpb24vNTgyNTM1MC0yLmh0bWwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZwppbmRleCAzYTFhZDJlODI4NGY0NTll
NDgzZjU0ODk4NGJiZGJmMDNjNDA4MjU5Li5kZGI1MmNhY2ZiYzJkZjU3ZjJhNWNkM2Q1MTZkZTE3
MzEzMTY0NTk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKKysrIGIv
U291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjMgQEAKKzIwMTEtMDMtMDIg
IE1hcnRpbiBSb2JpbnNvbiAgPG1yb2JpbnNvbkBpZ2FsaWEuY29tPgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtHVEtdIEltcGxlbWVudCB0aGUgbmV4
dCBiaXQgb2YgdGhlIFRleHRJbnB1dENvbnRyb2xsZXIgKGhhc01hcmtlZFRleHQgYW5kIG1hcmtl
ZFJhbmdlKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NTU2MDMKKworICAgICAgICBBZGRlZCBEdW1wUmVuZGVyVHJlZVN1cHBvcnQgbWV0aG9kcyB0byBz
dXBwb3J0IGhhc01hcmtlZFRleHQgYW5kIG1hcmtlZFJhbmdlLgorCisgICAgICAgICogV2ViQ29y
ZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrLmNwcDoKKyAgICAgICAgKER1bXBSZW5k
ZXJUcmVlU3VwcG9ydEd0azo6c2V0Q29tcG9zaXRpb24pOiBVc2Ugc3RhcnQgYW5kIGxlbmd0aCBy
YXRoZXIgdGhhbiBzdGFydCBhbmQKKyAgICAgICAgZW5kLiBUaGlzIG1hdGNoZXMgb3RoZXIgcG9y
dHMuIE9ubHkgdXNlIEdMaWIgc3R5bGUgZWFybHkgcmV0dXJucyB3aGVuIGNoZWNraW5nIHRoZQor
ICAgICAgICB2YWxpZGl0eSBvZiBHT2JqZWN0cy4KKyAgICAgICAgKER1bXBSZW5kZXJUcmVlU3Vw
cG9ydEd0azo6aGFzQ29tcG9zaXRpb24pOiAgQWRkZWQuCisgICAgICAgIChEdW1wUmVuZGVyVHJl
ZVN1cHBvcnRHdGs6OmNvbXBvc2l0aW9uUmFuZ2UpOiBBZGRlZC4KKyAgICAgICAgKER1bXBSZW5k
ZXJUcmVlU3VwcG9ydEd0azo6Y29uZmlybUNvbXBvc2l0aW9uKTogQ2xlYW51cCBhcyBkZXNjcmli
ZWQgYWJvdmUuCisgICAgICAgIChEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6OmZpcnN0UmVjdEZv
ckNoYXJhY3RlclJhbmdlKTogQ2xlYW51cCBhcyBkZXNjcmliZWQgYWJvdmUuCisgICAgICAgIChE
dW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6OnNlbGVjdGVkUmFuZ2UpOiBDbGVhbnVwIGFzIGRlc2Ny
aWJlZCBhYm92ZS4KKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBv
cnRHdGsuaDogQWRkZWQgbmV3IGRlY2xhcmF0aW9ucy4KKwogMjAxMS0wMy0wMSAgSm9zZXBoIFBl
Y29yYXJvICA8am9lcGVja0B3ZWJraXQub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQuIFJvbGwg
b3V0IHI4MDA2OCBhbmQgcjgwMDczIGR1ZSB0byBicmVha2luZyBXZWJLaXQyIFF0IHBvcnQuCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJl
ZVN1cHBvcnRHdGsuY3BwIGIvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRHVtcFJl
bmRlclRyZWVTdXBwb3J0R3RrLmNwcAppbmRleCA2ZGIyYzgxZmUzMzg1ODE1NGZkYjE3NDYxNmI2
NGRmYzFiMjc0NjJiLi40OTczMTQ3NmEyYTE5ZGU1NjMzYzZjNmJhMmYyZjZhNWU3YmE3MTNmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJl
ZVN1cHBvcnRHdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0R1
bXBSZW5kZXJUcmVlU3VwcG9ydEd0ay5jcHAKQEAgLTQ4Niw3ICs0ODYsNyBAQCBib29sIER1bXBS
ZW5kZXJUcmVlU3VwcG9ydEd0azo6aXNDb21tYW5kRW5hYmxlZChXZWJLaXRXZWJWaWV3KiB3ZWJW
aWV3LCBjb25zdCBnYwogICAgIHJldHVybiBjb3JlKHdlYlZpZXcpLT5mb2N1c0NvbnRyb2xsZXIo
KS0+Zm9jdXNlZE9yTWFpbkZyYW1lKCktPmVkaXRvcigpLT5jb21tYW5kKG5hbWUpLmlzRW5hYmxl
ZCgpOwogfQogCi12b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6c2V0Q29tcG9zaXRpb24o
V2ViS2l0V2ViVmlldyogd2ViVmlldywgY29uc3QgY2hhciogdGV4dCwgaW50IHN0YXJ0LCBpbnQg
ZW5kKQordm9pZCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6OnNldENvbXBvc2l0aW9uKFdlYktp
dFdlYlZpZXcqIHdlYlZpZXcsIGNvbnN0IGNoYXIqIHRleHQsIGludCBzdGFydCwgaW50IGxlbmd0
aCkKIHsKICAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19XRUJfVklFVyh3ZWJWaWV3KSk7
CiAgICAgZ19yZXR1cm5faWZfZmFpbCh0ZXh0KTsKQEAgLTQ5NiwxNSArNDk2LDQ2IEBAIHZvaWQg
RHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrOjpzZXRDb21wb3NpdGlvbihXZWJLaXRXZWJWaWV3KiB3
ZWJWaWV3LCBjb25zdCBjaGFyCiAgICAgICAgIHJldHVybjsKIAogICAgIEVkaXRvciogZWRpdG9y
ID0gZnJhbWUtPmVkaXRvcigpOwotICAgIGlmICghZWRpdG9yKQotICAgICAgICByZXR1cm47Ci0g
ICAgaWYgKCFlZGl0b3ItPmNhbkVkaXQoKSAmJiAhZWRpdG9yLT5oYXNDb21wb3NpdGlvbigpKQor
ICAgIGlmICghZWRpdG9yIHx8ICghZWRpdG9yLT5jYW5FZGl0KCkgJiYgIWVkaXRvci0+aGFzQ29t
cG9zaXRpb24oKSkpCiAgICAgICAgIHJldHVybjsKIAogICAgIFN0cmluZyBjb21wb3NpdGlvblN0
cmluZyA9IFN0cmluZzo6ZnJvbVVURjgodGV4dCk7CiAgICAgVmVjdG9yPENvbXBvc2l0aW9uVW5k
ZXJsaW5lPiB1bmRlcmxpbmVzOwogICAgIHVuZGVybGluZXMuYXBwZW5kKENvbXBvc2l0aW9uVW5k
ZXJsaW5lKDAsIGNvbXBvc2l0aW9uU3RyaW5nLmxlbmd0aCgpLCBDb2xvcigwLCAwLCAwKSwgZmFs
c2UpKTsKLSAgICBlZGl0b3ItPnNldENvbXBvc2l0aW9uKGNvbXBvc2l0aW9uU3RyaW5nLCB1bmRl
cmxpbmVzLCBzdGFydCwgZW5kKTsKKyAgICBlZGl0b3ItPnNldENvbXBvc2l0aW9uKGNvbXBvc2l0
aW9uU3RyaW5nLCB1bmRlcmxpbmVzLCBzdGFydCwgc3RhcnQgKyBsZW5ndGgpOworfQorCitib29s
IER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6aGFzQ29tcG9zaXRpb24oV2ViS2l0V2ViVmlldyog
d2ViVmlldykKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfV0VCX1ZJRVco
d2ViVmlldyksIGZhbHNlKTsKKyAgICBGcmFtZSogZnJhbWUgPSBjb3JlKHdlYlZpZXcpLT5mb2N1
c0NvbnRyb2xsZXIoKS0+Zm9jdXNlZE9yTWFpbkZyYW1lKCk7CisgICAgaWYgKCFmcmFtZSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIEVkaXRvciogZWRpdG9yID0gZnJhbWUtPmVkaXRvcigp
OworICAgIGlmICghZWRpdG9yKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4g
ZWRpdG9yLT5oYXNDb21wb3NpdGlvbigpOworfQorCitib29sIER1bXBSZW5kZXJUcmVlU3VwcG9y
dEd0azo6Y29tcG9zaXRpb25SYW5nZShXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBpbnQqIHN0YXJ0
LCBpbnQqIGxlbmd0aCkKK3sKKyAgICAqc3RhcnQgPSAqbGVuZ3RoID0gMDsKKworICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19XRUJfVklFVyh3ZWJWaWV3KSwgZmFsc2UpOworICAg
IGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHN0YXJ0ICYmIGxlbmd0aCwgZmFsc2UpOworCisgICAgRnJh
bWUqIGZyYW1lID0gY29yZSh3ZWJWaWV3KS0+Zm9jdXNDb250cm9sbGVyKCktPmZvY3VzZWRPck1h
aW5GcmFtZSgpOworICAgIGlmICghZnJhbWUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IEVkaXRvciogZWRpdG9yID0gZnJhbWUtPmVkaXRvcigpOworICAgIGlmICghZWRpdG9yIHx8ICFl
ZGl0b3ItPmhhc0NvbXBvc2l0aW9uKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICpz
dGFydCA9IGVkaXRvci0+Y29tcG9zaXRpb25TdGFydCgpOworICAgICpsZW5ndGggPSBlZGl0b3It
PmNvbXBvc2l0aW9uRW5kKCkgLSAqc3RhcnQ7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIHZvaWQg
RHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrOjpjb25maXJtQ29tcG9zaXRpb24oV2ViS2l0V2ViVmll
dyogd2ViVmlldywgY29uc3QgY2hhciogdGV4dCkKQEAgLTUxNiwxNiArNTQ3LDE4IEBAIHZvaWQg
RHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrOjpjb25maXJtQ29tcG9zaXRpb24oV2ViS2l0V2ViVmll
dyogd2ViVmlldywgY29uc3QKICAgICAgICAgcmV0dXJuOwogCiAgICAgRWRpdG9yKiBlZGl0b3Ig
PSBmcmFtZS0+ZWRpdG9yKCk7Ci0gICAgaWYgKCFlZGl0b3IgfHwgKCFlZGl0b3ItPmhhc0NvbXBv
c2l0aW9uKCkgJiYgIXRleHQpKQorICAgIGlmICghZWRpdG9yKQogICAgICAgICByZXR1cm47CiAK
LSAgICBpZiAoZWRpdG9yLT5oYXNDb21wb3NpdGlvbigpKSB7Ci0gICAgICAgIGlmICh0ZXh0KQot
ICAgICAgICAgICAgZWRpdG9yLT5jb25maXJtQ29tcG9zaXRpb24oU3RyaW5nOjpmcm9tVVRGOCh0
ZXh0KSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGVkaXRvci0+Y29uZmlybUNvbXBvc2l0
aW9uKCk7Ci0gICAgfSBlbHNlCisgICAgaWYgKCFlZGl0b3ItPmhhc0NvbXBvc2l0aW9uKCkpIHsK
ICAgICAgICAgZWRpdG9yLT5pbnNlcnRUZXh0KFN0cmluZzo6ZnJvbVVURjgodGV4dCksIDApOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmICh0ZXh0KSB7CisgICAgICAgIGVkaXRvci0+
Y29uZmlybUNvbXBvc2l0aW9uKFN0cmluZzo6ZnJvbVVURjgodGV4dCkpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIGVkaXRvci0+Y29uZmlybUNvbXBvc2l0aW9uKCk7CiB9CiAKIGJvb2wg
RHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrOjpmaXJzdFJlY3RGb3JDaGFyYWN0ZXJSYW5nZShXZWJL
aXRXZWJWaWV3KiB3ZWJWaWV3LCBpbnQgbG9jYXRpb24sIGludCBsZW5ndGgsIEdka1JlY3Rhbmds
ZSogcmVjdCkKQEAgLTU1MSwyMSArNTg0LDIxIEBAIGJvb2wgRHVtcFJlbmRlclRyZWVTdXBwb3J0
R3RrOjpmaXJzdFJlY3RGb3JDaGFyYWN0ZXJSYW5nZShXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3CiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICpyZWN0ID0gZWRpdG9yLT5maXJzdFJlY3RGb3JS
YW5nZShyYW5nZS5nZXQoKSk7Ci0KICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBEdW1wUmVu
ZGVyVHJlZVN1cHBvcnRHdGs6OnNlbGVjdGVkUmFuZ2UoV2ViS2l0V2ViVmlldyogd2ViVmlldywg
aW50KiBzdGFydCwgaW50KiBlbmQpCitib29sIER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6c2Vs
ZWN0ZWRSYW5nZShXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBpbnQqIHN0YXJ0LCBpbnQqIGxlbmd0
aCkKIHsKICAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfV0VCX1ZJRVcod2ViVmll
dyksIGZhbHNlKTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChzdGFydCwgZmFsc2UpOwotICAg
IGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGVuZCwgZmFsc2UpOworICAgIGdfcmV0dXJuX3ZhbF9pZl9m
YWlsKHN0YXJ0ICYmIGxlbmd0aCwgZmFsc2UpOwogCiAgICAgRnJhbWUqIGZyYW1lID0gY29yZSh3
ZWJWaWV3KS0+Zm9jdXNDb250cm9sbGVyKCktPmZvY3VzZWRPck1haW5GcmFtZSgpOwogICAgIGlm
ICghZnJhbWUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIFJlZlB0cjxSYW5nZT4gcmFu
Z2UgPSBmcmFtZS0+c2VsZWN0aW9uKCktPnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCk7CisgICAg
aWYgKCFyYW5nZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgRWxlbWVudCogc2VsZWN0
aW9uUm9vdCA9IGZyYW1lLT5zZWxlY3Rpb24oKS0+cm9vdEVkaXRhYmxlRWxlbWVudCgpOwogICAg
IEVsZW1lbnQqIHNjb3BlID0gc2VsZWN0aW9uUm9vdCA/IHNlbGVjdGlvblJvb3QgOiBmcmFtZS0+
ZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCk7CkBAIC01NzcsNyArNjEwLDcgQEAgYm9vbCBE
dW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6OnNlbGVjdGVkUmFuZ2UoV2ViS2l0V2ViVmlldyogd2Vi
VmlldywgaW50KiBzdGFydCwKICAgICBFeGNlcHRpb25Db2RlIGVjOwogICAgIHRlc3RSYW5nZS0+
c2V0RW5kKHJhbmdlLT5lbmRDb250YWluZXIoKSwgcmFuZ2UtPmVuZE9mZnNldCgpLCBlYyk7CiAg
ICAgQVNTRVJUKHRlc3RSYW5nZS0+c3RhcnRDb250YWluZXIoKSA9PSBzY29wZSk7Ci0gICAgKmVu
ZCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgodGVzdFJhbmdlLmdldCgpKTsKKyAgICAqbGVu
Z3RoID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aCh0ZXN0UmFuZ2UuZ2V0KCkpOwogCiAgICAg
cmV0dXJuIHRydWU7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3Vw
cG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGsuaCBiL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNv
cmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEd0ay5oCmluZGV4IDU5NWQ2ZGE0MzZmOTFj
MTMyNjYwZGJhM2NlNGM1MWU0NDc5NjYzZTIuLjYwZjg2NjI0YjZkNGE0YjNkYzMxNzFhYTk2NmQ3
ZjFkNTdjZTRjYTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0
L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEd0ay5oCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNv
cmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEd0ay5oCkBAIC05MCwxMyArOTAsMTcgQEAg
cHVibGljOgogICAgIHN0YXRpYyB2b2lkIGV4ZWN1dGVDb3JlQ29tbWFuZEJ5TmFtZShXZWJLaXRX
ZWJWaWV3KiwgY29uc3QgZ2NoYXIqIG5hbWUsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CiAgICAgc3Rh
dGljIGJvb2wgaXNDb21tYW5kRW5hYmxlZChXZWJLaXRXZWJWaWV3KiwgY29uc3QgZ2NoYXIqIG5h
bWUpOwogICAgIHN0YXRpYyBib29sIGZpbmRTdHJpbmcoV2ViS2l0V2ViVmlldyosIGNvbnN0IGdj
aGFyKiwgV2ViS2l0RmluZE9wdGlvbnMpOwotICAgIHN0YXRpYyB2b2lkIHNldENvbXBvc2l0aW9u
KFdlYktpdFdlYlZpZXcqLCBjb25zdCBjaGFyKiB0ZXh0LCBpbnQgc3RhcnQsIGludCBlbmQpOwot
ICAgIHN0YXRpYyB2b2lkIGNvbmZpcm1Db21wb3NpdGlvbihXZWJLaXRXZWJWaWV3KiwgY29uc3Qg
Y2hhciogdGV4dCk7Ci0gICAgc3RhdGljIGJvb2wgZmlyc3RSZWN0Rm9yQ2hhcmFjdGVyUmFuZ2Uo
V2ViS2l0V2ViVmlldyosIGludCBsb2NhdGlvbiwgaW50IGxlbmd0aCwgR2RrUmVjdGFuZ2xlKik7
Ci0gICAgc3RhdGljIGJvb2wgc2VsZWN0ZWRSYW5nZShXZWJLaXRXZWJWaWV3KiwgaW50KiBzdGFy
dCwgaW50KiBlbmQpOwogICAgIHN0YXRpYyBkb3VibGUgZGVmYXVsdE1pbmltdW1UaW1lckludGVy
dmFsKCk7IC8vIE5vdCByZWFsbHkgdGllZCB0byBXZWJWaWV3CiAgICAgc3RhdGljIHZvaWQgc2V0
TWluaW11bVRpbWVySW50ZXJ2YWwoV2ViS2l0V2ViVmlldyosIGRvdWJsZSk7CiAKKyAgICAvLyBU
ZXh0SW5wdXRDb250cm9sbGVyCisgICAgc3RhdGljIHZvaWQgc2V0Q29tcG9zaXRpb24oV2ViS2l0
V2ViVmlldyosIGNvbnN0IGNoYXIqLCBpbnQgc3RhcnQsIGludCBsZW5ndGgpOworICAgIHN0YXRp
YyBib29sIGhhc0NvbXBvc2l0aW9uKFdlYktpdFdlYlZpZXcqKTsKKyAgICBzdGF0aWMgYm9vbCBj
b21wb3NpdGlvblJhbmdlKFdlYktpdFdlYlZpZXcqLCBpbnQqIHN0YXJ0LCBpbnQqIGxlbmd0aCk7
CisgICAgc3RhdGljIHZvaWQgY29uZmlybUNvbXBvc2l0aW9uKFdlYktpdFdlYlZpZXcqLCBjb25z
dCBjaGFyKik7CisgICAgc3RhdGljIGJvb2wgZmlyc3RSZWN0Rm9yQ2hhcmFjdGVyUmFuZ2UoV2Vi
S2l0V2ViVmlldyosIGludCBsb2NhdGlvbiwgaW50IGxlbmd0aCwgR2RrUmVjdGFuZ2xlKik7Cisg
ICAgc3RhdGljIGJvb2wgc2VsZWN0ZWRSYW5nZShXZWJLaXRXZWJWaWV3KiwgaW50KiBzdGFydCwg
aW50KiBsZW5ndGgpOworCiAgICAgLy8gR0MKICAgICBzdGF0aWMgdm9pZCBnY0NvbGxlY3RKYXZh
c2NyaXB0T2JqZWN0cygpOwogICAgIHN0YXRpYyB2b2lkIGdjQ29sbGVjdEphdmFzY3JpcHRPYmpl
Y3RzT25BbHRlcm5hdGVUaHJlYWQoYm9vbCB3YWl0VW50aWxEb25lKTsKZGlmZiAtLWdpdCBhL1Rv
b2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBiZmJmYTNkN2Y5NzZmZGFkMzUy
YzY4MjhmNDU3YjYzNzY2NzQ4MzQ3Li42ZjYxNjllYmVkOTVlOGJmOGE2NTg0NjVlZTVjYTE4YzBm
M2I2NmQ1IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMjMgQEAKKzIwMTEtMDMtMDIgIE1hcnRpbiBSb2JpbnNvbiAgPG1yb2JpbnNv
bkBpZ2FsaWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFtHVEtdIEltcGxlbWVudCB0aGUgbmV4dCBiaXQgb2YgdGhlIFRleHRJbnB1dENvbnRy
b2xsZXIgKGhhc01hcmtlZFRleHQgYW5kIG1hcmtlZFJhbmdlKQorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTU2MDMKKworICAgICAgICBBZGQgY2FsbGJh
Y2tzIHRvIHN1cHBvcnQgaGFzTWFya2VkVGV4dCBhbmQgbWFya2VkUmFuZ2UgYW5kIGFsc28gY2xl
YW4gdXAgZXhpc3RpbmcgCisgICAgICAgIFRleHRJbnB1dENvbnRyb2xsZXIgc3VwcG9ydC4KKwor
ICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2d0ay9UZXh0SW5wdXRDb250cm9sbGVyLmNwcDoKKyAg
ICAgICAgKHNldE1hcmtlZFRleHRDYWxsYmFjayk6IEFjY2VwdCBwYXJhbWV0ZXJzIGluIHRlcm1z
IG9mIHN0YXJ0IGFuZCBsZW5ndGgsIGluc3RlYWQKKyAgICAgICAgb2Ygc3RhcnQgYW5kIGVuZC4g
VGhpcyBtYXRjaGVzIHRoZSBvdGhlciBwb3J0cy4gRG8gbm90IHVzZSBHTGliIHN0eWxlIGVhcmx5
IHJldHVybnMuCisgICAgICAgIChoYXNNYXJrZWRUZXh0Q2FsbGJhY2spOiBBZGRlZC4KKyAgICAg
ICAgKG1hcmtlZFJhbmdlQ2FsbGJhY2spOiBBZGRlZC4KKyAgICAgICAgKGluc2VydFRleHRDYWxs
YmFjayk6IENsZWFudXAgYXMgZGVzY3JpYmVkIGFib3ZlLgorICAgICAgICAodW5tYXJrVGV4dENh
bGxiYWNrKTogQ2xlYW51cCBhcyBkZXNjcmliZWQgYWJvdmUuCisgICAgICAgIChmaXJzdFJlY3RG
b3JDaGFyYWN0ZXJSYW5nZUNhbGxiYWNrKTogQ2xlYW51cCBhcyBkZXNjcmliZWQgYWJvdmUuCisg
ICAgICAgIChzZWxlY3RlZFJhbmdlQ2FsbGJhY2spOiBDbGVhbnVwIGFzIGRlc2NyaWJlZCBhYm92
ZS4KKwogMjAxMS0wMS0yNiAgSm9obiBLbm90dGVuYmVsdCAgPGprbm90dGVuQGNocm9taXVtLm9y
Zz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEbWl0cnkgVGl0b3YuCmRpZmYgLS1naXQgYS9Ub29s
cy9EdW1wUmVuZGVyVHJlZS9ndGsvVGV4dElucHV0Q29udHJvbGxlci5jcHAgYi9Ub29scy9EdW1w
UmVuZGVyVHJlZS9ndGsvVGV4dElucHV0Q29udHJvbGxlci5jcHAKaW5kZXggNzI0M2ZkYzIzMTU2
MjNiYmIyOWRjN2ZiZDIwZmU2YzNiODBlNDJlNC4uZmM0N2JkNWU4ZDM1NWU3MzQ3OGUwZTQ3NTQx
Mzc2NzczNTI5NjZhNSAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL1RleHRJ
bnB1dENvbnRyb2xsZXIuY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9UZXh0SW5w
dXRDb250cm9sbGVyLmNwcApAQCAtNDAsMTQgKzQwLDEyIEBACiBzdGF0aWMgSlNWYWx1ZVJlZiBz
ZXRNYXJrZWRUZXh0Q2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1
bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29u
c3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQogewogICAg
IFdlYktpdFdlYlZpZXcqIHZpZXcgPSB3ZWJraXRfd2ViX2ZyYW1lX2dldF93ZWJfdmlldyhtYWlu
RnJhbWUpOwotICAgIGlmICghdmlldykKLSAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZp
bmVkKGNvbnRleHQpOwotCisgICAgQVNTRVJUKHZpZXcpOwogICAgIGlmIChhcmd1bWVudENvdW50
IDwgMykKICAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwogCiAg
ICAgSlNTdHJpbmdSZWYgc3RyaW5nID0gSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBhcmd1
bWVudHNbMF0sIGV4Y2VwdGlvbik7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoKCFleGNlcHRp
b24gfHwgISpleGNlcHRpb24pLCBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KSk7CisgICAg
QVNTRVJUKCFleGNlcHRpb24gfHwgISpleGNlcHRpb24pOwogCiAgICAgc2l6ZV90IGJ1ZmZlclNp
emUgPSBKU1N0cmluZ0dldE1heGltdW1VVEY4Q1N0cmluZ1NpemUoc3RyaW5nKTsKICAgICBHT3du
UHRyPGdjaGFyPiBzdHJpbmdCdWZmZXIoc3RhdGljX2Nhc3Q8Z2NoYXIqPihnX21hbGxvYyhidWZm
ZXJTaXplKSkpOwpAQCAtNTUsMjcgKzUzLDQ5IEBAIHN0YXRpYyBKU1ZhbHVlUmVmIHNldE1hcmtl
ZFRleHRDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3RpCiAg
ICAgSlNTdHJpbmdSZWxlYXNlKHN0cmluZyk7CiAKICAgICBpbnQgc3RhcnQgPSBzdGF0aWNfY2Fz
dDxpbnQ+KEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBhcmd1bWVudHNbMV0sIGV4Y2VwdGlvbikp
OwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKCghZXhjZXB0aW9uIHx8ICEqZXhjZXB0aW9uKSwg
SlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCkpOworICAgIEFTU0VSVCghZXhjZXB0aW9uIHx8
ICEqZXhjZXB0aW9uKTsKIAotICAgIGludCBlbmQgPSBzdGF0aWNfY2FzdDxpbnQ+KEpTVmFsdWVU
b051bWJlcihjb250ZXh0LCBhcmd1bWVudHNbMl0sIGV4Y2VwdGlvbikpOwotICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKCghZXhjZXB0aW9uIHx8ICEqZXhjZXB0aW9uKSwgSlNWYWx1ZU1ha2VVbmRl
ZmluZWQoY29udGV4dCkpOwotCi0gICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrOjpzZXRDb21w
b3NpdGlvbih2aWV3LCBzdHJpbmdCdWZmZXIuZ2V0KCksIHN0YXJ0LCBlbmQpOworICAgIGludCBs
ZW5ndGggPSBzdGF0aWNfY2FzdDxpbnQ+KEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBhcmd1bWVu
dHNbMl0sIGV4Y2VwdGlvbikpOworICAgIEFTU0VSVCghZXhjZXB0aW9uIHx8ICEqZXhjZXB0aW9u
KTsKIAorICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6c2V0Q29tcG9zaXRpb24odmlldywg
c3RyaW5nQnVmZmVyLmdldCgpLCBzdGFydCwgbGVuZ3RoKTsKICAgICByZXR1cm4gSlNWYWx1ZU1h
a2VVbmRlZmluZWQoY29udGV4dCk7CiB9CiAKLXN0YXRpYyBKU1ZhbHVlUmVmIGluc2VydFRleHRD
YWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2Jq
ZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVm
IGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCitzdGF0aWMgSlNWYWx1ZVJlZiBo
YXNNYXJrZWRUZXh0Q2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1
bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29u
c3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQogewogICAg
IFdlYktpdFdlYlZpZXcqIHZpZXcgPSB3ZWJraXRfd2ViX2ZyYW1lX2dldF93ZWJfdmlldyhtYWlu
RnJhbWUpOwotICAgIGlmICghdmlldykKKyAgICBBU1NFUlQodmlldyk7CisgICAgcmV0dXJuIEpT
VmFsdWVNYWtlQm9vbGVhbihjb250ZXh0LCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6Omhhc0Nv
bXBvc2l0aW9uKHZpZXcpKTsKK30KKworc3RhdGljIEpTVmFsdWVSZWYgbWFya2VkUmFuZ2VDYWxs
YmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0
UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFy
Z3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgV2ViS2l0V2ViVmlldyog
dmlldyA9IHdlYmtpdF93ZWJfZnJhbWVfZ2V0X3dlYl92aWV3KG1haW5GcmFtZSk7CisgICAgQVNT
RVJUKHZpZXcpOworCisgICAgaW50IHN0YXJ0LCBsZW5ndGg7CisgICAgaWYgKCFEdW1wUmVuZGVy
VHJlZVN1cHBvcnRHdGs6OmNvbXBvc2l0aW9uUmFuZ2UodmlldywgJnN0YXJ0LCAmbGVuZ3RoKSkK
ICAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwogCisgICAgSlNW
YWx1ZVJlZiBhcnJheVZhbHVlc1syXTsKKyAgICBhcnJheVZhbHVlc1swXSA9IEpTVmFsdWVNYWtl
TnVtYmVyKGNvbnRleHQsIHN0YXJ0KTsKKyAgICBhcnJheVZhbHVlc1sxXSA9IEpTVmFsdWVNYWtl
TnVtYmVyKGNvbnRleHQsIGxlbmd0aCk7CisgICAgSlNPYmplY3RSZWYgYXJyYXlPYmplY3QgPSBK
U09iamVjdE1ha2VBcnJheShjb250ZXh0LCAyLCBhcnJheVZhbHVlcywgZXhjZXB0aW9uKTsKKyAg
ICBBU1NFUlQoIWV4Y2VwdGlvbiB8fCAhKmV4Y2VwdGlvbik7CisgICAgcmV0dXJuIGFycmF5T2Jq
ZWN0OworfQorCitzdGF0aWMgSlNWYWx1ZVJlZiBpbnNlcnRUZXh0Q2FsbGJhY2soSlNDb250ZXh0
UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0
LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNW
YWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAgIFdlYktpdFdlYlZpZXcqIHZpZXcgPSB3ZWJraXRf
d2ViX2ZyYW1lX2dldF93ZWJfdmlldyhtYWluRnJhbWUpOworICAgIEFTU0VSVCh2aWV3KTsKKwog
ICAgIGlmIChhcmd1bWVudENvdW50IDwgMSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5k
ZWZpbmVkKGNvbnRleHQpOworICAgICAgICBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsK
IAogICAgIEpTU3RyaW5nUmVmIHN0cmluZyA9IEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwg
YXJndW1lbnRzWzBdLCBleGNlcHRpb24pOwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKCghZXhj
ZXB0aW9uIHx8ICEqZXhjZXB0aW9uKSwgSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCkpOwor
ICAgIEFTU0VSVCghZXhjZXB0aW9uIHx8ICEqZXhjZXB0aW9uKTsKIAogICAgIHNpemVfdCBidWZm
ZXJTaXplID0gSlNTdHJpbmdHZXRNYXhpbXVtVVRGOENTdHJpbmdTaXplKHN0cmluZyk7CiAgICAg
R093blB0cjxnY2hhcj4gc3RyaW5nQnVmZmVyKHN0YXRpY19jYXN0PGdjaGFyKj4oZ19tYWxsb2Mo
YnVmZmVyU2l6ZSkpKTsKQEAgLTgzLDE1ICsxMDMsMTMgQEAgc3RhdGljIEpTVmFsdWVSZWYgaW5z
ZXJ0VGV4dENhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlv
biwKICAgICBKU1N0cmluZ1JlbGVhc2Uoc3RyaW5nKTsKIAogICAgIER1bXBSZW5kZXJUcmVlU3Vw
cG9ydEd0azo6Y29uZmlybUNvbXBvc2l0aW9uKHZpZXcsIHN0cmluZ0J1ZmZlci5nZXQoKSk7Ci0K
ICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CiB9CiAKIHN0YXRpYyBK
U1ZhbHVlUmVmIHVubWFya1RleHRDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmpl
Y3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENv
dW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24p
CiB7CiAgICAgV2ViS2l0V2ViVmlldyogdmlldyA9IHdlYmtpdF93ZWJfZnJhbWVfZ2V0X3dlYl92
aWV3KG1haW5GcmFtZSk7Ci0gICAgaWYgKCF2aWV3KQotICAgICAgICByZXR1cm4gSlNWYWx1ZU1h
a2VVbmRlZmluZWQoY29udGV4dCk7CisgICAgQVNTRVJUKHZpZXcpOwogCiAgICAgRHVtcFJlbmRl
clRyZWVTdXBwb3J0R3RrOjpjb25maXJtQ29tcG9zaXRpb24odmlldywgMCk7CiAgICAgcmV0dXJu
IEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwpAQCAtMTAwLDE3ICsxMTgsMTUgQEAgc3Rh
dGljIEpTVmFsdWVSZWYgdW5tYXJrVGV4dENhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBK
U09iamVjdFJlZiBmdW5jdGlvbiwKIHN0YXRpYyBKU1ZhbHVlUmVmIGZpcnN0UmVjdEZvckNoYXJh
Y3RlclJhbmdlQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0
aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3Qg
SlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQogewogICAgIFdl
YktpdFdlYlZpZXcqIHZpZXcgPSB3ZWJraXRfd2ViX2ZyYW1lX2dldF93ZWJfdmlldyhtYWluRnJh
bWUpOwotICAgIGlmICghdmlldykKLSAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVk
KGNvbnRleHQpOwotCisgICAgQVNTRVJUKHZpZXcpOwogICAgIGlmIChhcmd1bWVudENvdW50IDwg
MikKICAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwogCiAgICAg
aW50IGxvY2F0aW9uID0gc3RhdGljX2Nhc3Q8aW50PihKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwg
YXJndW1lbnRzWzBdLCBleGNlcHRpb24pKTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbCgoIWV4
Y2VwdGlvbiB8fCAhKmV4Y2VwdGlvbiksIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpKTsK
KyAgICBBU1NFUlQoIWV4Y2VwdGlvbiB8fCAhKmV4Y2VwdGlvbik7CiAKICAgICBpbnQgbGVuZ3Ro
ID0gc3RhdGljX2Nhc3Q8aW50PihKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwgYXJndW1lbnRzWzFd
LCBleGNlcHRpb24pKTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbCgoIWV4Y2VwdGlvbiB8fCAh
KmV4Y2VwdGlvbiksIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpKTsKKyAgICBBU1NFUlQo
IWV4Y2VwdGlvbiB8fCAhKmV4Y2VwdGlvbik7CiAKICAgICBHZGtSZWN0YW5nbGUgcmVjdDsKICAg
ICBpZiAoIUR1bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6Zmlyc3RSZWN0Rm9yQ2hhcmFjdGVyUmFu
Z2UodmlldywgbG9jYXRpb24sIGxlbmd0aCwgJnJlY3QpKQpAQCAtMTIyLDcgKzEzOCw3IEBAIHN0
YXRpYyBKU1ZhbHVlUmVmIGZpcnN0UmVjdEZvckNoYXJhY3RlclJhbmdlQ2FsbGJhY2soSlNDb250
ZXh0UmVmIGNvbnRleHQsIEpTT2JqCiAgICAgYXJyYXlWYWx1ZXNbMl0gPSBKU1ZhbHVlTWFrZU51
bWJlcihjb250ZXh0LCByZWN0LndpZHRoKTsKICAgICBhcnJheVZhbHVlc1szXSA9IEpTVmFsdWVN
YWtlTnVtYmVyKGNvbnRleHQsIHJlY3QuaGVpZ2h0KTsKICAgICBKU09iamVjdFJlZiBhcnJheU9i
amVjdCA9IEpTT2JqZWN0TWFrZUFycmF5KGNvbnRleHQsIDQsIGFycmF5VmFsdWVzLCBleGNlcHRp
b24pOwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKCghZXhjZXB0aW9uIHx8ICEqZXhjZXB0aW9u
KSwgSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCkpOworICAgIEFTU0VSVCghZXhjZXB0aW9u
IHx8ICEqZXhjZXB0aW9uKTsKIAogICAgIHJldHVybiBhcnJheU9iamVjdDsKIH0KQEAgLTEzMCwy
NCArMTQ2LDI1IEBAIHN0YXRpYyBKU1ZhbHVlUmVmIGZpcnN0UmVjdEZvckNoYXJhY3RlclJhbmdl
Q2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqCiBzdGF0aWMgSlNWYWx1ZVJlZiBz
ZWxlY3RlZFJhbmdlQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1
bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29u
c3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQogewogICAg
IFdlYktpdFdlYlZpZXcqIHZpZXcgPSB3ZWJraXRfd2ViX2ZyYW1lX2dldF93ZWJfdmlldyhtYWlu
RnJhbWUpOwotICAgIGlmICghdmlldykKLSAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZp
bmVkKGNvbnRleHQpOworICAgIEFTU0VSVCh2aWV3KTsKIAotICAgIGludCBzdGFydCwgZW5kOwot
ICAgIGlmICghRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrOjpzZWxlY3RlZFJhbmdlKHZpZXcsICZz
dGFydCwgJmVuZCkpCisgICAgaW50IHN0YXJ0LCBsZW5ndGg7CisgICAgaWYgKCFEdW1wUmVuZGVy
VHJlZVN1cHBvcnRHdGs6OnNlbGVjdGVkUmFuZ2UodmlldywgJnN0YXJ0LCAmbGVuZ3RoKSkKICAg
ICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwogCiAgICAgSlNWYWx1
ZVJlZiBhcnJheVZhbHVlc1syXTsKICAgICBhcnJheVZhbHVlc1swXSA9IEpTVmFsdWVNYWtlTnVt
YmVyKGNvbnRleHQsIHN0YXJ0KTsKLSAgICBhcnJheVZhbHVlc1sxXSA9IEpTVmFsdWVNYWtlTnVt
YmVyKGNvbnRleHQsIGVuZCk7CisgICAgYXJyYXlWYWx1ZXNbMV0gPSBKU1ZhbHVlTWFrZU51bWJl
cihjb250ZXh0LCBsZW5ndGgpOwogICAgIEpTT2JqZWN0UmVmIGFycmF5T2JqZWN0ID0gSlNPYmpl
Y3RNYWtlQXJyYXkoY29udGV4dCwgMiwgYXJyYXlWYWx1ZXMsIGV4Y2VwdGlvbik7Ci0gICAgZ19y
ZXR1cm5fdmFsX2lmX2ZhaWwoKCFleGNlcHRpb24gfHwgISpleGNlcHRpb24pLCBKU1ZhbHVlTWFr
ZVVuZGVmaW5lZChjb250ZXh0KSk7CisgICAgQVNTRVJUKCFleGNlcHRpb24gfHwgISpleGNlcHRp
b24pOwogCiAgICAgcmV0dXJuIGFycmF5T2JqZWN0OwogfQogCiBzdGF0aWMgSlNTdGF0aWNGdW5j
dGlvbiBzdGF0aWNGdW5jdGlvbnNbXSA9IHsKICAgICB7ICJzZXRNYXJrZWRUZXh0Iiwgc2V0TWFy
a2VkVGV4dENhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVy
dHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCisgICAgeyAiaGFzTWFya2VkVGV4dCIsIGhhc01hcmtl
ZFRleHRDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5
QXR0cmlidXRlRG9udERlbGV0ZSB9LAorICAgIHsgIm1hcmtlZFJhbmdlIiwgbWFya2VkUmFuZ2VD
YWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmli
dXRlRG9udERlbGV0ZSB9LAogICAgIHsgImluc2VydFRleHQiLCBpbnNlcnRUZXh0Q2FsbGJhY2ss
IGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnRE
ZWxldGUgfSwKICAgICB7ICJ1bm1hcmtUZXh0IiwgdW5tYXJrVGV4dENhbGxiYWNrLCBrSlNQcm9w
ZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0s
CiAgICAgeyAiZmlyc3RSZWN0Rm9yQ2hhcmFjdGVyUmFuZ2UiLCBmaXJzdFJlY3RGb3JDaGFyYWN0
ZXJSYW5nZUNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVy
dHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>91964</attachid>
            <date>2011-05-02 13:26:48 -0700</date>
            <delta_ts>2011-05-03 12:14:49 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-55603-20110502132648.patch</filename>
            <type>text/plain</type>
            <size>19091</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODU1MDkKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA4ZjU2MTM4YzBiYzlmYWNjYjE4MTU5
ZDRmYmQ1ZDc0OGMwOTA1ODg5Li4wYzY1ZTViZTAxNmYzODM1NDk0ZTM5ZjA3MGRlYTc2YjMyZDQz
YzExIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTEtMDMtMDIgIE1hcnRpbiBSb2JpbnNvbiAg
PG1yb2JpbnNvbkBpZ2FsaWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFtHVEtdIEltcGxlbWVudCB0aGUgbmV4dCBiaXQgb2YgdGhlIFRleHRJ
bnB1dENvbnRyb2xsZXIgKGhhc01hcmtlZFRleHQgYW5kIG1hcmtlZFJhbmdlKQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTU2MDMKKworICAgICAgICAq
IHBsYXRmb3JtL2d0ay9Ta2lwcGVkOiBVbnNraXAgYSB0ZXN0IHRoYXQgaXMgbm93IHBhc3Npbmcu
IEJldHRlciBkZXNjcmliZSByZW1haW5pbmcgZmFpbHVyZXMuCisKIDIwMTEtMDUtMDIgIEFscGhh
IExhbSAgPGhjbGFtQGNocm9taXVtLm9yZz4KIAogICAgICAgICBOb3QgcmV2aWV3ZWQuIEJ1aWxk
IGZpeC4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9Ta2lwcGVkIGIvTGF5
b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1NraXBwZWQKaW5kZXggNGI2MWZjMDgyNzJjMjdmOWI5NDg2
ZDhkZDVjNTE3NGU0MjcxNDQwMC4uNTZhNThkOTQwZGJjNGFhZjcyNjk0MTQwZTAyNTgxYjMxZWNl
OTZhZiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1NraXBwZWQKKysrIGIv
TGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1NraXBwZWQKQEAgLTY2Miw4ICs2NjIsOCBAQCBodHRw
L3Rlc3RzL2dsb2JhbGhpc3RvcnkKICMgTmVlZCB0byBhZGQgZnVuY3Rpb25hbGl0eSB0byBEdW1w
UmVuZGVyVHJlZSB0byBoYW5kbGUgZXJyb3IgcGFnZXMKIGZhc3QvaGlzdG9yeS9iYWNrLWZvcndh
cmQtcmVzZXQtYWZ0ZXItZXJyb3ItaGFuZGxpbmcuaHRtbAogCi0jIE1pc3NpbmcgdGV4dElucHV0
Q29udHJvbGxlcgotZWRpdGluZy9pbnB1dC9zZXR0aW5nLWlucHV0LXZhbHVlLWNhbmNlbC1pbWUt
Y29tcG9zaXRpb24uaHRtbAorIyBUaGVzZSB0ZXN0cyBhbHNvIHVzZSBmaXJzdFJlY3RGb3JDaGFy
YWN0ZXJSYW5nZSwgYnV0IHRoZXkgZ2VuZXJhdGUgc2xpZ2h0bHkKKyMgZGlmZmVyZW50IHZhbHVl
cy4gKENocm9taXVtIGFsc28gZmFpbHMgaGVyZTsgc2VlIHRoZWlyIHRlc3RfZXhwZWN0YXRpb25z
LnR4dCBmaWxlKQogZWRpdGluZy9zZWxlY3Rpb24vbWl4ZWQtZWRpdGFiaWxpdHktMTAuaHRtbAog
ZWRpdGluZy9zZWxlY3Rpb24vNTgyNTM1MC0xLmh0bWwKIGVkaXRpbmcvc2VsZWN0aW9uLzU4MjUz
NTAtMi5odG1sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cgYi9Tb3Vy
Y2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKaW5kZXggMmQyNTc2ODg4NTI3MzA0YThhMjRiZjIzODA4
OWMwNGU0OTgxMDM4Yy4uMGI4ZDg5MzZhNjQyNjEwNjg3ZGY1NzRjMWE5MTYzZmVjMDY5NzYxZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJL
aXQvZ3RrL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIzIEBACisyMDExLTAzLTAyICBNYXJ0aW4gUm9i
aW5zb24gIDxtcm9iaW5zb25AaWdhbGlhLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBbR1RLXSBJbXBsZW1lbnQgdGhlIG5leHQgYml0IG9mIHRo
ZSBUZXh0SW5wdXRDb250cm9sbGVyIChoYXNNYXJrZWRUZXh0IGFuZCBtYXJrZWRSYW5nZSkKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU1NjAzCisKKyAg
ICAgICAgQWRkZWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0IG1ldGhvZHMgdG8gc3VwcG9ydCBoYXNN
YXJrZWRUZXh0IGFuZCBtYXJrZWRSYW5nZS4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0R1
bXBSZW5kZXJUcmVlU3VwcG9ydEd0ay5jcHA6CisgICAgICAgIChEdW1wUmVuZGVyVHJlZVN1cHBv
cnRHdGs6OnNldENvbXBvc2l0aW9uKTogVXNlIHN0YXJ0IGFuZCBsZW5ndGggcmF0aGVyIHRoYW4g
c3RhcnQgYW5kCisgICAgICAgIGVuZC4gVGhpcyBtYXRjaGVzIG90aGVyIHBvcnRzLiBPbmx5IHVz
ZSBHTGliIHN0eWxlIGVhcmx5IHJldHVybnMgd2hlbiBjaGVja2luZyB0aGUKKyAgICAgICAgdmFs
aWRpdHkgb2YgR09iamVjdHMuCisgICAgICAgIChEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6Omhh
c0NvbXBvc2l0aW9uKTogIEFkZGVkLgorICAgICAgICAoRHVtcFJlbmRlclRyZWVTdXBwb3J0R3Rr
Ojpjb21wb3NpdGlvblJhbmdlKTogQWRkZWQuCisgICAgICAgIChEdW1wUmVuZGVyVHJlZVN1cHBv
cnRHdGs6OmNvbmZpcm1Db21wb3NpdGlvbik6IENsZWFudXAgYXMgZGVzY3JpYmVkIGFib3ZlLgor
ICAgICAgICAoRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrOjpmaXJzdFJlY3RGb3JDaGFyYWN0ZXJS
YW5nZSk6IENsZWFudXAgYXMgZGVzY3JpYmVkIGFib3ZlLgorICAgICAgICAoRHVtcFJlbmRlclRy
ZWVTdXBwb3J0R3RrOjpzZWxlY3RlZFJhbmdlKTogQ2xlYW51cCBhcyBkZXNjcmliZWQgYWJvdmUu
CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrLmg6IEFk
ZGVkIG5ldyBkZWNsYXJhdGlvbnMuCisKIDIwMTEtMDQtMjkgIFhhbiBMb3BleiAgPHhsb3BlekBp
Z2FsaWEuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE1hcnRpbiBSb2JpbnNvbi4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3Vw
cG9ydEd0ay5jcHAgYi9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVy
VHJlZVN1cHBvcnRHdGsuY3BwCmluZGV4IGQzZTU5OTQ5MTFjZmVmMzExMmY0M2Y2YzJhMzU5NmEx
M2Y3MzQwNjYuLmE0NWE2MTljZTllYzUyNzRmZTY5NTk2NDIyNjk4NGNlYTE5YzNkZDMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3Vw
cG9ydEd0ay5jcHAKKysrIGIvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRHVtcFJl
bmRlclRyZWVTdXBwb3J0R3RrLmNwcApAQCAtNTAxLDcgKzUwMSw3IEBAIGJvb2wgRHVtcFJlbmRl
clRyZWVTdXBwb3J0R3RrOjppc0NvbW1hbmRFbmFibGVkKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcs
IGNvbnN0IGdjCiAgICAgcmV0dXJuIGNvcmUod2ViVmlldyktPmZvY3VzQ29udHJvbGxlcigpLT5m
b2N1c2VkT3JNYWluRnJhbWUoKS0+ZWRpdG9yKCktPmNvbW1hbmQobmFtZSkuaXNFbmFibGVkKCk7
CiB9CiAKLXZvaWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrOjpzZXRDb21wb3NpdGlvbihXZWJL
aXRXZWJWaWV3KiB3ZWJWaWV3LCBjb25zdCBjaGFyKiB0ZXh0LCBpbnQgc3RhcnQsIGludCBlbmQp
Cit2b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6c2V0Q29tcG9zaXRpb24oV2ViS2l0V2Vi
Vmlldyogd2ViVmlldywgY29uc3QgY2hhciogdGV4dCwgaW50IHN0YXJ0LCBpbnQgbGVuZ3RoKQog
ewogICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9WSUVXKHdlYlZpZXcpKTsKICAg
ICBnX3JldHVybl9pZl9mYWlsKHRleHQpOwpAQCAtNTExLDE1ICs1MTEsNDUgQEAgdm9pZCBEdW1w
UmVuZGVyVHJlZVN1cHBvcnRHdGs6OnNldENvbXBvc2l0aW9uKFdlYktpdFdlYlZpZXcqIHdlYlZp
ZXcsIGNvbnN0IGNoYXIKICAgICAgICAgcmV0dXJuOwogCiAgICAgRWRpdG9yKiBlZGl0b3IgPSBm
cmFtZS0+ZWRpdG9yKCk7Ci0gICAgaWYgKCFlZGl0b3IpCi0gICAgICAgIHJldHVybjsKLSAgICBp
ZiAoIWVkaXRvci0+Y2FuRWRpdCgpICYmICFlZGl0b3ItPmhhc0NvbXBvc2l0aW9uKCkpCisgICAg
aWYgKCFlZGl0b3IgfHwgKCFlZGl0b3ItPmNhbkVkaXQoKSAmJiAhZWRpdG9yLT5oYXNDb21wb3Np
dGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgU3RyaW5nIGNvbXBvc2l0aW9uU3RyaW5n
ID0gU3RyaW5nOjpmcm9tVVRGOCh0ZXh0KTsKICAgICBWZWN0b3I8Q29tcG9zaXRpb25VbmRlcmxp
bmU+IHVuZGVybGluZXM7CiAgICAgdW5kZXJsaW5lcy5hcHBlbmQoQ29tcG9zaXRpb25VbmRlcmxp
bmUoMCwgY29tcG9zaXRpb25TdHJpbmcubGVuZ3RoKCksIENvbG9yKDAsIDAsIDApLCBmYWxzZSkp
OwotICAgIGVkaXRvci0+c2V0Q29tcG9zaXRpb24oY29tcG9zaXRpb25TdHJpbmcsIHVuZGVybGlu
ZXMsIHN0YXJ0LCBlbmQpOworICAgIGVkaXRvci0+c2V0Q29tcG9zaXRpb24oY29tcG9zaXRpb25T
dHJpbmcsIHVuZGVybGluZXMsIHN0YXJ0LCBzdGFydCArIGxlbmd0aCk7Cit9CisKK2Jvb2wgRHVt
cFJlbmRlclRyZWVTdXBwb3J0R3RrOjpoYXNDb21wb3NpdGlvbihXZWJLaXRXZWJWaWV3KiB3ZWJW
aWV3KQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19XRUJfVklFVyh3ZWJW
aWV3KSwgZmFsc2UpOworICAgIEZyYW1lKiBmcmFtZSA9IGNvcmUod2ViVmlldyktPmZvY3VzQ29u
dHJvbGxlcigpLT5mb2N1c2VkT3JNYWluRnJhbWUoKTsKKyAgICBpZiAoIWZyYW1lKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgRWRpdG9yKiBlZGl0b3IgPSBmcmFtZS0+ZWRpdG9yKCk7Cisg
ICAgaWYgKCFlZGl0b3IpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBlZGl0
b3ItPmhhc0NvbXBvc2l0aW9uKCk7Cit9CisKK2Jvb2wgRHVtcFJlbmRlclRyZWVTdXBwb3J0R3Rr
Ojpjb21wb3NpdGlvblJhbmdlKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIGludCogc3RhcnQsIGlu
dCogbGVuZ3RoKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHN0YXJ0ICYmIGxlbmd0aCwg
ZmFsc2UpOworICAgICpzdGFydCA9ICpsZW5ndGggPSAwOworCisgICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoV0VCS0lUX0lTX1dFQl9WSUVXKHdlYlZpZXcpLCBmYWxzZSk7CisgICAgRnJhbWUqIGZy
YW1lID0gY29yZSh3ZWJWaWV3KS0+Zm9jdXNDb250cm9sbGVyKCktPmZvY3VzZWRPck1haW5GcmFt
ZSgpOworICAgIGlmICghZnJhbWUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEVkaXRv
ciogZWRpdG9yID0gZnJhbWUtPmVkaXRvcigpOworICAgIGlmICghZWRpdG9yIHx8ICFlZGl0b3It
Pmhhc0NvbXBvc2l0aW9uKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICpzdGFydCA9
IGVkaXRvci0+Y29tcG9zaXRpb25TdGFydCgpOworICAgICpsZW5ndGggPSBlZGl0b3ItPmNvbXBv
c2l0aW9uRW5kKCkgLSAqc3RhcnQ7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIHZvaWQgRHVtcFJl
bmRlclRyZWVTdXBwb3J0R3RrOjpjb25maXJtQ29tcG9zaXRpb24oV2ViS2l0V2ViVmlldyogd2Vi
VmlldywgY29uc3QgY2hhciogdGV4dCkKQEAgLTUzMSwxNiArNTYxLDE4IEBAIHZvaWQgRHVtcFJl
bmRlclRyZWVTdXBwb3J0R3RrOjpjb25maXJtQ29tcG9zaXRpb24oV2ViS2l0V2ViVmlldyogd2Vi
VmlldywgY29uc3QKICAgICAgICAgcmV0dXJuOwogCiAgICAgRWRpdG9yKiBlZGl0b3IgPSBmcmFt
ZS0+ZWRpdG9yKCk7Ci0gICAgaWYgKCFlZGl0b3IgfHwgKCFlZGl0b3ItPmhhc0NvbXBvc2l0aW9u
KCkgJiYgIXRleHQpKQorICAgIGlmICghZWRpdG9yKQogICAgICAgICByZXR1cm47CiAKLSAgICBp
ZiAoZWRpdG9yLT5oYXNDb21wb3NpdGlvbigpKSB7Ci0gICAgICAgIGlmICh0ZXh0KQotICAgICAg
ICAgICAgZWRpdG9yLT5jb25maXJtQ29tcG9zaXRpb24oU3RyaW5nOjpmcm9tVVRGOCh0ZXh0KSk7
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGVkaXRvci0+Y29uZmlybUNvbXBvc2l0aW9uKCk7
Ci0gICAgfSBlbHNlCisgICAgaWYgKCFlZGl0b3ItPmhhc0NvbXBvc2l0aW9uKCkpIHsKICAgICAg
ICAgZWRpdG9yLT5pbnNlcnRUZXh0KFN0cmluZzo6ZnJvbVVURjgodGV4dCksIDApOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIGlmICh0ZXh0KSB7CisgICAgICAgIGVkaXRvci0+Y29uZmly
bUNvbXBvc2l0aW9uKFN0cmluZzo6ZnJvbVVURjgodGV4dCkpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIGVkaXRvci0+Y29uZmlybUNvbXBvc2l0aW9uKCk7CiB9CiAKIGJvb2wgRHVtcFJl
bmRlclRyZWVTdXBwb3J0R3RrOjpmaXJzdFJlY3RGb3JDaGFyYWN0ZXJSYW5nZShXZWJLaXRXZWJW
aWV3KiB3ZWJWaWV3LCBpbnQgbG9jYXRpb24sIGludCBsZW5ndGgsIEdka1JlY3RhbmdsZSogcmVj
dCkKQEAgLTU2NiwyMSArNTk4LDIxIEBAIGJvb2wgRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrOjpm
aXJzdFJlY3RGb3JDaGFyYWN0ZXJSYW5nZShXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3CiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAogICAgICpyZWN0ID0gZWRpdG9yLT5maXJzdFJlY3RGb3JSYW5nZShy
YW5nZS5nZXQoKSk7Ci0KICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBEdW1wUmVuZGVyVHJl
ZVN1cHBvcnRHdGs6OnNlbGVjdGVkUmFuZ2UoV2ViS2l0V2ViVmlldyogd2ViVmlldywgaW50KiBz
dGFydCwgaW50KiBlbmQpCitib29sIER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6c2VsZWN0ZWRS
YW5nZShXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBpbnQqIHN0YXJ0LCBpbnQqIGxlbmd0aCkKIHsK
ICAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfV0VCX1ZJRVcod2ViVmlldyksIGZh
bHNlKTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChzdGFydCwgZmFsc2UpOwotICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKGVuZCwgZmFsc2UpOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHN0
YXJ0ICYmIGxlbmd0aCwgZmFsc2UpOwogCiAgICAgRnJhbWUqIGZyYW1lID0gY29yZSh3ZWJWaWV3
KS0+Zm9jdXNDb250cm9sbGVyKCktPmZvY3VzZWRPck1haW5GcmFtZSgpOwogICAgIGlmICghZnJh
bWUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBm
cmFtZS0+c2VsZWN0aW9uKCktPnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCk7CisgICAgaWYgKCFy
YW5nZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgRWxlbWVudCogc2VsZWN0aW9uUm9v
dCA9IGZyYW1lLT5zZWxlY3Rpb24oKS0+cm9vdEVkaXRhYmxlRWxlbWVudCgpOwogICAgIEVsZW1l
bnQqIHNjb3BlID0gc2VsZWN0aW9uUm9vdCA/IHNlbGVjdGlvblJvb3QgOiBmcmFtZS0+ZG9jdW1l
bnQoKS0+ZG9jdW1lbnRFbGVtZW50KCk7CkBAIC01OTIsNyArNjI0LDcgQEAgYm9vbCBEdW1wUmVu
ZGVyVHJlZVN1cHBvcnRHdGs6OnNlbGVjdGVkUmFuZ2UoV2ViS2l0V2ViVmlldyogd2ViVmlldywg
aW50KiBzdGFydCwKICAgICBFeGNlcHRpb25Db2RlIGVjOwogICAgIHRlc3RSYW5nZS0+c2V0RW5k
KHJhbmdlLT5lbmRDb250YWluZXIoKSwgcmFuZ2UtPmVuZE9mZnNldCgpLCBlYyk7CiAgICAgQVNT
RVJUKHRlc3RSYW5nZS0+c3RhcnRDb250YWluZXIoKSA9PSBzY29wZSk7Ci0gICAgKmVuZCA9IFRl
eHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgodGVzdFJhbmdlLmdldCgpKTsKKyAgICAqbGVuZ3RoID0g
VGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aCh0ZXN0UmFuZ2UuZ2V0KCkpOwogCiAgICAgcmV0dXJu
IHRydWU7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9E
dW1wUmVuZGVyVHJlZVN1cHBvcnRHdGsuaCBiL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBw
b3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEd0ay5oCmluZGV4IGQ3ZDcxN2NjMGNmZDUwODBjNjAy
ZTIzYmMxZmM5MmI2Y2NiYmJmZTcuLjQ3ZWI0YThhZTdiYzA5NWQzMTJlZTIyN2ZhMWI0NjM3NDhj
MDc4NDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0R1bXBS
ZW5kZXJUcmVlU3VwcG9ydEd0ay5oCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBw
b3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEd0ay5oCkBAIC05NiwxMCArOTYsNiBAQCBwdWJsaWM6
CiAgICAgc3RhdGljIHZvaWQgZXhlY3V0ZUNvcmVDb21tYW5kQnlOYW1lKFdlYktpdFdlYlZpZXcq
LCBjb25zdCBnY2hhciogbmFtZSwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKICAgICBzdGF0aWMgYm9v
bCBpc0NvbW1hbmRFbmFibGVkKFdlYktpdFdlYlZpZXcqLCBjb25zdCBnY2hhciogbmFtZSk7CiAg
ICAgc3RhdGljIGJvb2wgZmluZFN0cmluZyhXZWJLaXRXZWJWaWV3KiwgY29uc3QgZ2NoYXIqLCBX
ZWJLaXRGaW5kT3B0aW9ucyk7Ci0gICAgc3RhdGljIHZvaWQgc2V0Q29tcG9zaXRpb24oV2ViS2l0
V2ViVmlldyosIGNvbnN0IGNoYXIqIHRleHQsIGludCBzdGFydCwgaW50IGVuZCk7Ci0gICAgc3Rh
dGljIHZvaWQgY29uZmlybUNvbXBvc2l0aW9uKFdlYktpdFdlYlZpZXcqLCBjb25zdCBjaGFyKiB0
ZXh0KTsKLSAgICBzdGF0aWMgYm9vbCBmaXJzdFJlY3RGb3JDaGFyYWN0ZXJSYW5nZShXZWJLaXRX
ZWJWaWV3KiwgaW50IGxvY2F0aW9uLCBpbnQgbGVuZ3RoLCBHZGtSZWN0YW5nbGUqKTsKLSAgICBz
dGF0aWMgYm9vbCBzZWxlY3RlZFJhbmdlKFdlYktpdFdlYlZpZXcqLCBpbnQqIHN0YXJ0LCBpbnQq
IGVuZCk7CiAgICAgc3RhdGljIGRvdWJsZSBkZWZhdWx0TWluaW11bVRpbWVySW50ZXJ2YWwoKTsg
Ly8gTm90IHJlYWxseSB0aWVkIHRvIFdlYlZpZXcKICAgICBzdGF0aWMgdm9pZCBzZXRNaW5pbXVt
VGltZXJJbnRlcnZhbChXZWJLaXRXZWJWaWV3KiwgZG91YmxlKTsKICAgICBzdGF0aWMgdm9pZCBy
ZWN0YW5nbGVGb3JTZWxlY3Rpb24oV2ViS2l0V2ViRnJhbWUqLCBHZGtSZWN0YW5nbGUqKTsKQEAg
LTEwOSw2ICsxMDUsMTQgQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIGluY3JlbWVudEFjY2Vz
c2liaWxpdHlWYWx1ZShBdGtPYmplY3QqKTsKICAgICBzdGF0aWMgdm9pZCBkZWNyZW1lbnRBY2Nl
c3NpYmlsaXR5VmFsdWUoQXRrT2JqZWN0Kik7CiAKKyAgICAvLyBUZXh0SW5wdXRDb250cm9sbGVy
CisgICAgc3RhdGljIHZvaWQgc2V0Q29tcG9zaXRpb24oV2ViS2l0V2ViVmlldyosIGNvbnN0IGNo
YXIqLCBpbnQgc3RhcnQsIGludCBsZW5ndGgpOworICAgIHN0YXRpYyBib29sIGhhc0NvbXBvc2l0
aW9uKFdlYktpdFdlYlZpZXcqKTsKKyAgICBzdGF0aWMgYm9vbCBjb21wb3NpdGlvblJhbmdlKFdl
YktpdFdlYlZpZXcqLCBpbnQqIHN0YXJ0LCBpbnQqIGxlbmd0aCk7CisgICAgc3RhdGljIHZvaWQg
Y29uZmlybUNvbXBvc2l0aW9uKFdlYktpdFdlYlZpZXcqLCBjb25zdCBjaGFyKik7CisgICAgc3Rh
dGljIGJvb2wgZmlyc3RSZWN0Rm9yQ2hhcmFjdGVyUmFuZ2UoV2ViS2l0V2ViVmlldyosIGludCBs
b2NhdGlvbiwgaW50IGxlbmd0aCwgR2RrUmVjdGFuZ2xlKik7CisgICAgc3RhdGljIGJvb2wgc2Vs
ZWN0ZWRSYW5nZShXZWJLaXRXZWJWaWV3KiwgaW50KiBzdGFydCwgaW50KiBsZW5ndGgpOworCiAg
ICAgLy8gR0MKICAgICBzdGF0aWMgdm9pZCBnY0NvbGxlY3RKYXZhc2NyaXB0T2JqZWN0cygpOwog
ICAgIHN0YXRpYyB2b2lkIGdjQ29sbGVjdEphdmFzY3JpcHRPYmplY3RzT25BbHRlcm5hdGVUaHJl
YWQoYm9vbCB3YWl0VW50aWxEb25lKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rv
b2xzL0NoYW5nZUxvZwppbmRleCA4NjZhMzRiMjE4NDE4ZjlmZGQ4N2JmMWRiNWFmYjJmNGRkOWYx
ODM3Li40Nzc3NjAxMGE3YzM0ZWFhZDNkYmE0MmZkNTVhMzI1ZDE3ZjUwYzBkIDEwMDY0NAotLS0g
YS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjMgQEAK
KzIwMTEtMDMtMDIgIE1hcnRpbiBSb2JpbnNvbiAgPG1yb2JpbnNvbkBpZ2FsaWEuY29tPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtHVEtdIEltcGxl
bWVudCB0aGUgbmV4dCBiaXQgb2YgdGhlIFRleHRJbnB1dENvbnRyb2xsZXIgKGhhc01hcmtlZFRl
eHQgYW5kIG1hcmtlZFJhbmdlKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NTU2MDMKKworICAgICAgICBBZGQgY2FsbGJhY2tzIHRvIHN1cHBvcnQgaGFz
TWFya2VkVGV4dCBhbmQgbWFya2VkUmFuZ2UgYW5kIGFsc28gY2xlYW4gdXAgZXhpc3RpbmcgCisg
ICAgICAgIFRleHRJbnB1dENvbnRyb2xsZXIgc3VwcG9ydC4KKworICAgICAgICAqIER1bXBSZW5k
ZXJUcmVlL2d0ay9UZXh0SW5wdXRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKHNldE1hcmtlZFRl
eHRDYWxsYmFjayk6IEFjY2VwdCBwYXJhbWV0ZXJzIGluIHRlcm1zIG9mIHN0YXJ0IGFuZCBsZW5n
dGgsIGluc3RlYWQKKyAgICAgICAgb2Ygc3RhcnQgYW5kIGVuZC4gVGhpcyBtYXRjaGVzIHRoZSBv
dGhlciBwb3J0cy4gRG8gbm90IHVzZSBHTGliIHN0eWxlIGVhcmx5IHJldHVybnMuCisgICAgICAg
IChoYXNNYXJrZWRUZXh0Q2FsbGJhY2spOiBBZGRlZC4KKyAgICAgICAgKG1hcmtlZFJhbmdlQ2Fs
bGJhY2spOiBBZGRlZC4KKyAgICAgICAgKGluc2VydFRleHRDYWxsYmFjayk6IENsZWFudXAgYXMg
ZGVzY3JpYmVkIGFib3ZlLgorICAgICAgICAodW5tYXJrVGV4dENhbGxiYWNrKTogQ2xlYW51cCBh
cyBkZXNjcmliZWQgYWJvdmUuCisgICAgICAgIChmaXJzdFJlY3RGb3JDaGFyYWN0ZXJSYW5nZUNh
bGxiYWNrKTogQ2xlYW51cCBhcyBkZXNjcmliZWQgYWJvdmUuCisgICAgICAgIChzZWxlY3RlZFJh
bmdlQ2FsbGJhY2spOiBDbGVhbnVwIGFzIGRlc2NyaWJlZCBhYm92ZS4KKwogMjAxMS0wNS0wMiAg
QWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEVy
aWMgU2VpZGVsLgpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL1RleHRJbnB1
dENvbnRyb2xsZXIuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL1RleHRJbnB1dENvbnRy
b2xsZXIuY3BwCmluZGV4IGQxYWEzM2Q0NjIyMzUzZmRhNmUyZTlkNWI0YTAxY2ZjOThiMGI4ODMu
LjZlMTBhZTI4YjM0MmM0MTZmODNmNDQ2MDczNjUxNzgzYzBjNzhmMWYgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9UZXh0SW5wdXRDb250cm9sbGVyLmNwcAorKysgYi9Ub29s
cy9EdW1wUmVuZGVyVHJlZS9ndGsvVGV4dElucHV0Q29udHJvbGxlci5jcHAKQEAgLTQxLDE0ICs0
MSwxMiBAQAogc3RhdGljIEpTVmFsdWVSZWYgc2V0TWFya2VkVGV4dENhbGxiYWNrKEpTQ29udGV4
dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVj
dCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpT
VmFsdWVSZWYqIGV4Y2VwdGlvbikKIHsKICAgICBXZWJLaXRXZWJWaWV3KiB2aWV3ID0gd2Via2l0
X3dlYl9mcmFtZV9nZXRfd2ViX3ZpZXcobWFpbkZyYW1lKTsKLSAgICBpZiAoIXZpZXcpCi0gICAg
ICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLQorICAgIEFTU0VSVCh2
aWV3KTsKICAgICBpZiAoYXJndW1lbnRDb3VudCA8IDMpCiAgICAgICAgIHJldHVybiBKU1ZhbHVl
TWFrZVVuZGVmaW5lZChjb250ZXh0KTsKIAogICAgIEpTU3RyaW5nUmVmIHN0cmluZyA9IEpTVmFs
dWVUb1N0cmluZ0NvcHkoY29udGV4dCwgYXJndW1lbnRzWzBdLCBleGNlcHRpb24pOwotICAgIGdf
cmV0dXJuX3ZhbF9pZl9mYWlsKCghZXhjZXB0aW9uIHx8ICEqZXhjZXB0aW9uKSwgSlNWYWx1ZU1h
a2VVbmRlZmluZWQoY29udGV4dCkpOworICAgIEFTU0VSVCghZXhjZXB0aW9uIHx8ICEqZXhjZXB0
aW9uKTsKIAogICAgIHNpemVfdCBidWZmZXJTaXplID0gSlNTdHJpbmdHZXRNYXhpbXVtVVRGOENT
dHJpbmdTaXplKHN0cmluZyk7CiAgICAgR093blB0cjxnY2hhcj4gc3RyaW5nQnVmZmVyKHN0YXRp
Y19jYXN0PGdjaGFyKj4oZ19tYWxsb2MoYnVmZmVyU2l6ZSkpKTsKQEAgLTU2LDI3ICs1NCw0OSBA
QCBzdGF0aWMgSlNWYWx1ZVJlZiBzZXRNYXJrZWRUZXh0Q2FsbGJhY2soSlNDb250ZXh0UmVmIGNv
bnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aQogICAgIEpTU3RyaW5nUmVsZWFzZShzdHJpbmcpOwog
CiAgICAgaW50IHN0YXJ0ID0gc3RhdGljX2Nhc3Q8aW50PihKU1ZhbHVlVG9OdW1iZXIoY29udGV4
dCwgYXJndW1lbnRzWzFdLCBleGNlcHRpb24pKTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbCgo
IWV4Y2VwdGlvbiB8fCAhKmV4Y2VwdGlvbiksIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQp
KTsKKyAgICBBU1NFUlQoIWV4Y2VwdGlvbiB8fCAhKmV4Y2VwdGlvbik7CiAKLSAgICBpbnQgZW5k
ID0gc3RhdGljX2Nhc3Q8aW50PihKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwgYXJndW1lbnRzWzJd
LCBleGNlcHRpb24pKTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbCgoIWV4Y2VwdGlvbiB8fCAh
KmV4Y2VwdGlvbiksIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpKTsKLQotICAgIER1bXBS
ZW5kZXJUcmVlU3VwcG9ydEd0azo6c2V0Q29tcG9zaXRpb24odmlldywgc3RyaW5nQnVmZmVyLmdl
dCgpLCBzdGFydCwgZW5kKTsKKyAgICBpbnQgbGVuZ3RoID0gc3RhdGljX2Nhc3Q8aW50PihKU1Zh
bHVlVG9OdW1iZXIoY29udGV4dCwgYXJndW1lbnRzWzJdLCBleGNlcHRpb24pKTsKKyAgICBBU1NF
UlQoIWV4Y2VwdGlvbiB8fCAhKmV4Y2VwdGlvbik7CiAKKyAgICBEdW1wUmVuZGVyVHJlZVN1cHBv
cnRHdGs6OnNldENvbXBvc2l0aW9uKHZpZXcsIHN0cmluZ0J1ZmZlci5nZXQoKSwgc3RhcnQsIGxl
bmd0aCk7CiAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwogfQogCi1z
dGF0aWMgSlNWYWx1ZVJlZiBpbnNlcnRUZXh0Q2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQs
IEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJn
dW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhj
ZXB0aW9uKQorc3RhdGljIEpTVmFsdWVSZWYgaGFzTWFya2VkVGV4dENhbGxiYWNrKEpTQ29udGV4
dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVj
dCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpT
VmFsdWVSZWYqIGV4Y2VwdGlvbikKIHsKICAgICBXZWJLaXRXZWJWaWV3KiB2aWV3ID0gd2Via2l0
X3dlYl9mcmFtZV9nZXRfd2ViX3ZpZXcobWFpbkZyYW1lKTsKLSAgICBpZiAoIXZpZXcpCisgICAg
QVNTRVJUKHZpZXcpOworICAgIHJldHVybiBKU1ZhbHVlTWFrZUJvb2xlYW4oY29udGV4dCwgRHVt
cFJlbmRlclRyZWVTdXBwb3J0R3RrOjpoYXNDb21wb3NpdGlvbih2aWV3KSk7Cit9CisKK3N0YXRp
YyBKU1ZhbHVlUmVmIG1hcmtlZFJhbmdlQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpT
T2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1l
bnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0
aW9uKQoreworICAgIFdlYktpdFdlYlZpZXcqIHZpZXcgPSB3ZWJraXRfd2ViX2ZyYW1lX2dldF93
ZWJfdmlldyhtYWluRnJhbWUpOworICAgIEFTU0VSVCh2aWV3KTsKKworICAgIGludCBzdGFydCwg
bGVuZ3RoOworICAgIGlmICghRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrOjpjb21wb3NpdGlvblJh
bmdlKHZpZXcsICZzdGFydCwgJmxlbmd0aCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVu
ZGVmaW5lZChjb250ZXh0KTsKIAorICAgIEpTVmFsdWVSZWYgYXJyYXlWYWx1ZXNbMl07CisgICAg
YXJyYXlWYWx1ZXNbMF0gPSBKU1ZhbHVlTWFrZU51bWJlcihjb250ZXh0LCBzdGFydCk7CisgICAg
YXJyYXlWYWx1ZXNbMV0gPSBKU1ZhbHVlTWFrZU51bWJlcihjb250ZXh0LCBsZW5ndGgpOworICAg
IEpTT2JqZWN0UmVmIGFycmF5T2JqZWN0ID0gSlNPYmplY3RNYWtlQXJyYXkoY29udGV4dCwgMiwg
YXJyYXlWYWx1ZXMsIGV4Y2VwdGlvbik7CisgICAgQVNTRVJUKCFleGNlcHRpb24gfHwgISpleGNl
cHRpb24pOworICAgIHJldHVybiBhcnJheU9iamVjdDsKK30KKworc3RhdGljIEpTVmFsdWVSZWYg
aW5zZXJ0VGV4dENhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5j
dGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0
IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICBX
ZWJLaXRXZWJWaWV3KiB2aWV3ID0gd2Via2l0X3dlYl9mcmFtZV9nZXRfd2ViX3ZpZXcobWFpbkZy
YW1lKTsKKyAgICBBU1NFUlQodmlldyk7CisKICAgICBpZiAoYXJndW1lbnRDb3VudCA8IDEpCi0g
ICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKKyAgICAgICAgSlNW
YWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CiAKICAgICBKU1N0cmluZ1JlZiBzdHJpbmcgPSBK
U1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIGFyZ3VtZW50c1swXSwgZXhjZXB0aW9uKTsKLSAg
ICBnX3JldHVybl92YWxfaWZfZmFpbCgoIWV4Y2VwdGlvbiB8fCAhKmV4Y2VwdGlvbiksIEpTVmFs
dWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpKTsKKyAgICBBU1NFUlQoIWV4Y2VwdGlvbiB8fCAhKmV4
Y2VwdGlvbik7CiAKICAgICBzaXplX3QgYnVmZmVyU2l6ZSA9IEpTU3RyaW5nR2V0TWF4aW11bVVU
RjhDU3RyaW5nU2l6ZShzdHJpbmcpOwogICAgIEdPd25QdHI8Z2NoYXI+IHN0cmluZ0J1ZmZlcihz
dGF0aWNfY2FzdDxnY2hhcio+KGdfbWFsbG9jKGJ1ZmZlclNpemUpKSk7CkBAIC04NCwxNSArMTA0
LDEzIEBAIHN0YXRpYyBKU1ZhbHVlUmVmIGluc2VydFRleHRDYWxsYmFjayhKU0NvbnRleHRSZWYg
Y29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sCiAgICAgSlNTdHJpbmdSZWxlYXNlKHN0cmlu
Zyk7CiAKICAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6OmNvbmZpcm1Db21wb3NpdGlvbih2
aWV3LCBzdHJpbmdCdWZmZXIuZ2V0KCkpOwotCiAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZp
bmVkKGNvbnRleHQpOwogfQogCiBzdGF0aWMgSlNWYWx1ZVJlZiB1bm1hcmtUZXh0Q2FsbGJhY2so
SlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0
aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVu
dHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQogewogICAgIFdlYktpdFdlYlZpZXcqIHZpZXcg
PSB3ZWJraXRfd2ViX2ZyYW1lX2dldF93ZWJfdmlldyhtYWluRnJhbWUpOwotICAgIGlmICghdmll
dykKLSAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworICAgIEFT
U0VSVCh2aWV3KTsKIAogICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6Y29uZmlybUNvbXBv
c2l0aW9uKHZpZXcsIDApOwogICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0
KTsKQEAgLTEwMSwxNyArMTE5LDE1IEBAIHN0YXRpYyBKU1ZhbHVlUmVmIHVubWFya1RleHRDYWxs
YmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sCiBzdGF0aWMg
SlNWYWx1ZVJlZiBmaXJzdFJlY3RGb3JDaGFyYWN0ZXJSYW5nZUNhbGxiYWNrKEpTQ29udGV4dFJl
ZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwg
c2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFs
dWVSZWYqIGV4Y2VwdGlvbikKIHsKICAgICBXZWJLaXRXZWJWaWV3KiB2aWV3ID0gd2Via2l0X3dl
Yl9mcmFtZV9nZXRfd2ViX3ZpZXcobWFpbkZyYW1lKTsKLSAgICBpZiAoIXZpZXcpCi0gICAgICAg
IHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLQorICAgIEFTU0VSVCh2aWV3
KTsKICAgICBpZiAoYXJndW1lbnRDb3VudCA8IDIpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlTWFr
ZVVuZGVmaW5lZChjb250ZXh0KTsKIAogICAgIGludCBsb2NhdGlvbiA9IHN0YXRpY19jYXN0PGlu
dD4oSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIGFyZ3VtZW50c1swXSwgZXhjZXB0aW9uKSk7Ci0g
ICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoKCFleGNlcHRpb24gfHwgISpleGNlcHRpb24pLCBKU1Zh
bHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KSk7CisgICAgQVNTRVJUKCFleGNlcHRpb24gfHwgISpl
eGNlcHRpb24pOwogCiAgICAgaW50IGxlbmd0aCA9IHN0YXRpY19jYXN0PGludD4oSlNWYWx1ZVRv
TnVtYmVyKGNvbnRleHQsIGFyZ3VtZW50c1sxXSwgZXhjZXB0aW9uKSk7Ci0gICAgZ19yZXR1cm5f
dmFsX2lmX2ZhaWwoKCFleGNlcHRpb24gfHwgISpleGNlcHRpb24pLCBKU1ZhbHVlTWFrZVVuZGVm
aW5lZChjb250ZXh0KSk7CisgICAgQVNTRVJUKCFleGNlcHRpb24gfHwgISpleGNlcHRpb24pOwog
CiAgICAgR2RrUmVjdGFuZ2xlIHJlY3Q7CiAgICAgaWYgKCFEdW1wUmVuZGVyVHJlZVN1cHBvcnRH
dGs6OmZpcnN0UmVjdEZvckNoYXJhY3RlclJhbmdlKHZpZXcsIGxvY2F0aW9uLCBsZW5ndGgsICZy
ZWN0KSkKQEAgLTEyMyw3ICsxMzksNyBAQCBzdGF0aWMgSlNWYWx1ZVJlZiBmaXJzdFJlY3RGb3JD
aGFyYWN0ZXJSYW5nZUNhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iagogICAgIGFy
cmF5VmFsdWVzWzJdID0gSlNWYWx1ZU1ha2VOdW1iZXIoY29udGV4dCwgcmVjdC53aWR0aCk7CiAg
ICAgYXJyYXlWYWx1ZXNbM10gPSBKU1ZhbHVlTWFrZU51bWJlcihjb250ZXh0LCByZWN0LmhlaWdo
dCk7CiAgICAgSlNPYmplY3RSZWYgYXJyYXlPYmplY3QgPSBKU09iamVjdE1ha2VBcnJheShjb250
ZXh0LCA0LCBhcnJheVZhbHVlcywgZXhjZXB0aW9uKTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFp
bCgoIWV4Y2VwdGlvbiB8fCAhKmV4Y2VwdGlvbiksIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRl
eHQpKTsKKyAgICBBU1NFUlQoIWV4Y2VwdGlvbiB8fCAhKmV4Y2VwdGlvbik7CiAKICAgICByZXR1
cm4gYXJyYXlPYmplY3Q7CiB9CkBAIC0xMzEsMjQgKzE0NywyNSBAQCBzdGF0aWMgSlNWYWx1ZVJl
ZiBmaXJzdFJlY3RGb3JDaGFyYWN0ZXJSYW5nZUNhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0
LCBKU09iagogc3RhdGljIEpTVmFsdWVSZWYgc2VsZWN0ZWRSYW5nZUNhbGxiYWNrKEpTQ29udGV4
dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVj
dCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpT
VmFsdWVSZWYqIGV4Y2VwdGlvbikKIHsKICAgICBXZWJLaXRXZWJWaWV3KiB2aWV3ID0gd2Via2l0
X3dlYl9mcmFtZV9nZXRfd2ViX3ZpZXcobWFpbkZyYW1lKTsKLSAgICBpZiAoIXZpZXcpCi0gICAg
ICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKKyAgICBBU1NFUlQodmll
dyk7CiAKLSAgICBpbnQgc3RhcnQsIGVuZDsKLSAgICBpZiAoIUR1bXBSZW5kZXJUcmVlU3VwcG9y
dEd0azo6c2VsZWN0ZWRSYW5nZSh2aWV3LCAmc3RhcnQsICZlbmQpKQorICAgIGludCBzdGFydCwg
bGVuZ3RoOworICAgIGlmICghRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrOjpzZWxlY3RlZFJhbmdl
KHZpZXcsICZzdGFydCwgJmxlbmd0aCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVm
aW5lZChjb250ZXh0KTsKIAogICAgIEpTVmFsdWVSZWYgYXJyYXlWYWx1ZXNbMl07CiAgICAgYXJy
YXlWYWx1ZXNbMF0gPSBKU1ZhbHVlTWFrZU51bWJlcihjb250ZXh0LCBzdGFydCk7Ci0gICAgYXJy
YXlWYWx1ZXNbMV0gPSBKU1ZhbHVlTWFrZU51bWJlcihjb250ZXh0LCBlbmQpOworICAgIGFycmF5
VmFsdWVzWzFdID0gSlNWYWx1ZU1ha2VOdW1iZXIoY29udGV4dCwgbGVuZ3RoKTsKICAgICBKU09i
amVjdFJlZiBhcnJheU9iamVjdCA9IEpTT2JqZWN0TWFrZUFycmF5KGNvbnRleHQsIDIsIGFycmF5
VmFsdWVzLCBleGNlcHRpb24pOwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKCghZXhjZXB0aW9u
IHx8ICEqZXhjZXB0aW9uKSwgSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCkpOworICAgIEFT
U0VSVCghZXhjZXB0aW9uIHx8ICEqZXhjZXB0aW9uKTsKIAogICAgIHJldHVybiBhcnJheU9iamVj
dDsKIH0KIAogc3RhdGljIEpTU3RhdGljRnVuY3Rpb24gc3RhdGljRnVuY3Rpb25zW10gPSB7CiAg
ICAgeyAic2V0TWFya2VkVGV4dCIsIHNldE1hcmtlZFRleHRDYWxsYmFjaywga0pTUHJvcGVydHlB
dHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAorICAg
IHsgImhhc01hcmtlZFRleHQiLCBoYXNNYXJrZWRUZXh0Q2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0
cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKKyAgICB7
ICJtYXJrZWRSYW5nZSIsIG1hcmtlZFJhbmdlQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRl
UmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICB7ICJpbnNl
cnRUZXh0IiwgaW5zZXJ0VGV4dENhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5
IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAgeyAidW5tYXJrVGV4dCIs
IHVubWFya1RleHRDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1By
b3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAogICAgIHsgImZpcnN0UmVjdEZvckNoYXJhY3Rl
clJhbmdlIiwgZmlyc3RSZWN0Rm9yQ2hhcmFjdGVyUmFuZ2VDYWxsYmFjaywga0pTUHJvcGVydHlB
dHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>92100</attachid>
            <date>2011-05-03 12:15:03 -0700</date>
            <delta_ts>2011-06-02 08:01:21 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-55603-20110503121451.patch</filename>
            <type>text/plain</type>
            <size>19051</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODU1MDkKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA4ZjU2MTM4YzBiYzlmYWNjYjE4MTU5
ZDRmYmQ1ZDc0OGMwOTA1ODg5Li4wYzY1ZTViZTAxNmYzODM1NDk0ZTM5ZjA3MGRlYTc2YjMyZDQz
YzExIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTEtMDMtMDIgIE1hcnRpbiBSb2JpbnNvbiAg
PG1yb2JpbnNvbkBpZ2FsaWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFtHVEtdIEltcGxlbWVudCB0aGUgbmV4dCBiaXQgb2YgdGhlIFRleHRJ
bnB1dENvbnRyb2xsZXIgKGhhc01hcmtlZFRleHQgYW5kIG1hcmtlZFJhbmdlKQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTU2MDMKKworICAgICAgICAq
IHBsYXRmb3JtL2d0ay9Ta2lwcGVkOiBVbnNraXAgYSB0ZXN0IHRoYXQgaXMgbm93IHBhc3Npbmcu
IEJldHRlciBkZXNjcmliZSByZW1haW5pbmcgZmFpbHVyZXMuCisKIDIwMTEtMDUtMDIgIEFscGhh
IExhbSAgPGhjbGFtQGNocm9taXVtLm9yZz4KIAogICAgICAgICBOb3QgcmV2aWV3ZWQuIEJ1aWxk
IGZpeC4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9Ta2lwcGVkIGIvTGF5
b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1NraXBwZWQKaW5kZXggNGI2MWZjMDgyNzJjMjdmOWI5NDg2
ZDhkZDVjNTE3NGU0MjcxNDQwMC4uNTZhNThkOTQwZGJjNGFhZjcyNjk0MTQwZTAyNTgxYjMxZWNl
OTZhZiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1NraXBwZWQKKysrIGIv
TGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1NraXBwZWQKQEAgLTY2Miw4ICs2NjIsOCBAQCBodHRw
L3Rlc3RzL2dsb2JhbGhpc3RvcnkKICMgTmVlZCB0byBhZGQgZnVuY3Rpb25hbGl0eSB0byBEdW1w
UmVuZGVyVHJlZSB0byBoYW5kbGUgZXJyb3IgcGFnZXMKIGZhc3QvaGlzdG9yeS9iYWNrLWZvcndh
cmQtcmVzZXQtYWZ0ZXItZXJyb3ItaGFuZGxpbmcuaHRtbAogCi0jIE1pc3NpbmcgdGV4dElucHV0
Q29udHJvbGxlcgotZWRpdGluZy9pbnB1dC9zZXR0aW5nLWlucHV0LXZhbHVlLWNhbmNlbC1pbWUt
Y29tcG9zaXRpb24uaHRtbAorIyBUaGVzZSB0ZXN0cyBhbHNvIHVzZSBmaXJzdFJlY3RGb3JDaGFy
YWN0ZXJSYW5nZSwgYnV0IHRoZXkgZ2VuZXJhdGUgc2xpZ2h0bHkKKyMgZGlmZmVyZW50IHZhbHVl
cy4gKENocm9taXVtIGFsc28gZmFpbHMgaGVyZTsgc2VlIHRoZWlyIHRlc3RfZXhwZWN0YXRpb25z
LnR4dCBmaWxlKQogZWRpdGluZy9zZWxlY3Rpb24vbWl4ZWQtZWRpdGFiaWxpdHktMTAuaHRtbAog
ZWRpdGluZy9zZWxlY3Rpb24vNTgyNTM1MC0xLmh0bWwKIGVkaXRpbmcvc2VsZWN0aW9uLzU4MjUz
NTAtMi5odG1sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cgYi9Tb3Vy
Y2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKaW5kZXggMmQyNTc2ODg4NTI3MzA0YThhMjRiZjIzODA4
OWMwNGU0OTgxMDM4Yy4uMGI4ZDg5MzZhNjQyNjEwNjg3ZGY1NzRjMWE5MTYzZmVjMDY5NzYxZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJL
aXQvZ3RrL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIzIEBACisyMDExLTAzLTAyICBNYXJ0aW4gUm9i
aW5zb24gIDxtcm9iaW5zb25AaWdhbGlhLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBbR1RLXSBJbXBsZW1lbnQgdGhlIG5leHQgYml0IG9mIHRo
ZSBUZXh0SW5wdXRDb250cm9sbGVyIChoYXNNYXJrZWRUZXh0IGFuZCBtYXJrZWRSYW5nZSkKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU1NjAzCisKKyAg
ICAgICAgQWRkZWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0IG1ldGhvZHMgdG8gc3VwcG9ydCBoYXNN
YXJrZWRUZXh0IGFuZCBtYXJrZWRSYW5nZS4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0R1
bXBSZW5kZXJUcmVlU3VwcG9ydEd0ay5jcHA6CisgICAgICAgIChEdW1wUmVuZGVyVHJlZVN1cHBv
cnRHdGs6OnNldENvbXBvc2l0aW9uKTogVXNlIHN0YXJ0IGFuZCBsZW5ndGggcmF0aGVyIHRoYW4g
c3RhcnQgYW5kCisgICAgICAgIGVuZC4gVGhpcyBtYXRjaGVzIG90aGVyIHBvcnRzLiBPbmx5IHVz
ZSBHTGliIHN0eWxlIGVhcmx5IHJldHVybnMgd2hlbiBjaGVja2luZyB0aGUKKyAgICAgICAgdmFs
aWRpdHkgb2YgR09iamVjdHMuCisgICAgICAgIChEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6Omhh
c0NvbXBvc2l0aW9uKTogIEFkZGVkLgorICAgICAgICAoRHVtcFJlbmRlclRyZWVTdXBwb3J0R3Rr
Ojpjb21wb3NpdGlvblJhbmdlKTogQWRkZWQuCisgICAgICAgIChEdW1wUmVuZGVyVHJlZVN1cHBv
cnRHdGs6OmNvbmZpcm1Db21wb3NpdGlvbik6IENsZWFudXAgYXMgZGVzY3JpYmVkIGFib3ZlLgor
ICAgICAgICAoRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrOjpmaXJzdFJlY3RGb3JDaGFyYWN0ZXJS
YW5nZSk6IENsZWFudXAgYXMgZGVzY3JpYmVkIGFib3ZlLgorICAgICAgICAoRHVtcFJlbmRlclRy
ZWVTdXBwb3J0R3RrOjpzZWxlY3RlZFJhbmdlKTogQ2xlYW51cCBhcyBkZXNjcmliZWQgYWJvdmUu
CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrLmg6IEFk
ZGVkIG5ldyBkZWNsYXJhdGlvbnMuCisKIDIwMTEtMDQtMjkgIFhhbiBMb3BleiAgPHhsb3BlekBp
Z2FsaWEuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE1hcnRpbiBSb2JpbnNvbi4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3Vw
cG9ydEd0ay5jcHAgYi9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVy
VHJlZVN1cHBvcnRHdGsuY3BwCmluZGV4IGQzZTU5OTQ5MTFjZmVmMzExMmY0M2Y2YzJhMzU5NmEx
M2Y3MzQwNjYuLmE0NWE2MTljZTllYzUyNzRmZTY5NTk2NDIyNjk4NGNlYTE5YzNkZDMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3Vw
cG9ydEd0ay5jcHAKKysrIGIvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRHVtcFJl
bmRlclRyZWVTdXBwb3J0R3RrLmNwcApAQCAtNTAxLDcgKzUwMSw3IEBAIGJvb2wgRHVtcFJlbmRl
clRyZWVTdXBwb3J0R3RrOjppc0NvbW1hbmRFbmFibGVkKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcs
IGNvbnN0IGdjCiAgICAgcmV0dXJuIGNvcmUod2ViVmlldyktPmZvY3VzQ29udHJvbGxlcigpLT5m
b2N1c2VkT3JNYWluRnJhbWUoKS0+ZWRpdG9yKCktPmNvbW1hbmQobmFtZSkuaXNFbmFibGVkKCk7
CiB9CiAKLXZvaWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrOjpzZXRDb21wb3NpdGlvbihXZWJL
aXRXZWJWaWV3KiB3ZWJWaWV3LCBjb25zdCBjaGFyKiB0ZXh0LCBpbnQgc3RhcnQsIGludCBlbmQp
Cit2b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6c2V0Q29tcG9zaXRpb24oV2ViS2l0V2Vi
Vmlldyogd2ViVmlldywgY29uc3QgY2hhciogdGV4dCwgaW50IHN0YXJ0LCBpbnQgbGVuZ3RoKQog
ewogICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9WSUVXKHdlYlZpZXcpKTsKICAg
ICBnX3JldHVybl9pZl9mYWlsKHRleHQpOwpAQCAtNTExLDE1ICs1MTEsNDUgQEAgdm9pZCBEdW1w
UmVuZGVyVHJlZVN1cHBvcnRHdGs6OnNldENvbXBvc2l0aW9uKFdlYktpdFdlYlZpZXcqIHdlYlZp
ZXcsIGNvbnN0IGNoYXIKICAgICAgICAgcmV0dXJuOwogCiAgICAgRWRpdG9yKiBlZGl0b3IgPSBm
cmFtZS0+ZWRpdG9yKCk7Ci0gICAgaWYgKCFlZGl0b3IpCi0gICAgICAgIHJldHVybjsKLSAgICBp
ZiAoIWVkaXRvci0+Y2FuRWRpdCgpICYmICFlZGl0b3ItPmhhc0NvbXBvc2l0aW9uKCkpCisgICAg
aWYgKCFlZGl0b3IgfHwgKCFlZGl0b3ItPmNhbkVkaXQoKSAmJiAhZWRpdG9yLT5oYXNDb21wb3Np
dGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgU3RyaW5nIGNvbXBvc2l0aW9uU3RyaW5n
ID0gU3RyaW5nOjpmcm9tVVRGOCh0ZXh0KTsKICAgICBWZWN0b3I8Q29tcG9zaXRpb25VbmRlcmxp
bmU+IHVuZGVybGluZXM7CiAgICAgdW5kZXJsaW5lcy5hcHBlbmQoQ29tcG9zaXRpb25VbmRlcmxp
bmUoMCwgY29tcG9zaXRpb25TdHJpbmcubGVuZ3RoKCksIENvbG9yKDAsIDAsIDApLCBmYWxzZSkp
OwotICAgIGVkaXRvci0+c2V0Q29tcG9zaXRpb24oY29tcG9zaXRpb25TdHJpbmcsIHVuZGVybGlu
ZXMsIHN0YXJ0LCBlbmQpOworICAgIGVkaXRvci0+c2V0Q29tcG9zaXRpb24oY29tcG9zaXRpb25T
dHJpbmcsIHVuZGVybGluZXMsIHN0YXJ0LCBzdGFydCArIGxlbmd0aCk7Cit9CisKK2Jvb2wgRHVt
cFJlbmRlclRyZWVTdXBwb3J0R3RrOjpoYXNDb21wb3NpdGlvbihXZWJLaXRXZWJWaWV3KiB3ZWJW
aWV3KQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19XRUJfVklFVyh3ZWJW
aWV3KSwgZmFsc2UpOworICAgIEZyYW1lKiBmcmFtZSA9IGNvcmUod2ViVmlldyktPmZvY3VzQ29u
dHJvbGxlcigpLT5mb2N1c2VkT3JNYWluRnJhbWUoKTsKKyAgICBpZiAoIWZyYW1lKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgRWRpdG9yKiBlZGl0b3IgPSBmcmFtZS0+ZWRpdG9yKCk7Cisg
ICAgaWYgKCFlZGl0b3IpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBlZGl0
b3ItPmhhc0NvbXBvc2l0aW9uKCk7Cit9CisKK2Jvb2wgRHVtcFJlbmRlclRyZWVTdXBwb3J0R3Rr
Ojpjb21wb3NpdGlvblJhbmdlKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIGludCogc3RhcnQsIGlu
dCogbGVuZ3RoKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHN0YXJ0ICYmIGxlbmd0aCwg
ZmFsc2UpOworICAgICpzdGFydCA9ICpsZW5ndGggPSAwOworCisgICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoV0VCS0lUX0lTX1dFQl9WSUVXKHdlYlZpZXcpLCBmYWxzZSk7CisgICAgRnJhbWUqIGZy
YW1lID0gY29yZSh3ZWJWaWV3KS0+Zm9jdXNDb250cm9sbGVyKCktPmZvY3VzZWRPck1haW5GcmFt
ZSgpOworICAgIGlmICghZnJhbWUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEVkaXRv
ciogZWRpdG9yID0gZnJhbWUtPmVkaXRvcigpOworICAgIGlmICghZWRpdG9yIHx8ICFlZGl0b3It
Pmhhc0NvbXBvc2l0aW9uKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICpzdGFydCA9
IGVkaXRvci0+Y29tcG9zaXRpb25TdGFydCgpOworICAgICpsZW5ndGggPSBlZGl0b3ItPmNvbXBv
c2l0aW9uRW5kKCkgLSAqc3RhcnQ7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIHZvaWQgRHVtcFJl
bmRlclRyZWVTdXBwb3J0R3RrOjpjb25maXJtQ29tcG9zaXRpb24oV2ViS2l0V2ViVmlldyogd2Vi
VmlldywgY29uc3QgY2hhciogdGV4dCkKQEAgLTUzMSwxNiArNTYxLDE4IEBAIHZvaWQgRHVtcFJl
bmRlclRyZWVTdXBwb3J0R3RrOjpjb25maXJtQ29tcG9zaXRpb24oV2ViS2l0V2ViVmlldyogd2Vi
VmlldywgY29uc3QKICAgICAgICAgcmV0dXJuOwogCiAgICAgRWRpdG9yKiBlZGl0b3IgPSBmcmFt
ZS0+ZWRpdG9yKCk7Ci0gICAgaWYgKCFlZGl0b3IgfHwgKCFlZGl0b3ItPmhhc0NvbXBvc2l0aW9u
KCkgJiYgIXRleHQpKQorICAgIGlmICghZWRpdG9yKQogICAgICAgICByZXR1cm47CiAKLSAgICBp
ZiAoZWRpdG9yLT5oYXNDb21wb3NpdGlvbigpKSB7Ci0gICAgICAgIGlmICh0ZXh0KQotICAgICAg
ICAgICAgZWRpdG9yLT5jb25maXJtQ29tcG9zaXRpb24oU3RyaW5nOjpmcm9tVVRGOCh0ZXh0KSk7
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGVkaXRvci0+Y29uZmlybUNvbXBvc2l0aW9uKCk7
Ci0gICAgfSBlbHNlCisgICAgaWYgKCFlZGl0b3ItPmhhc0NvbXBvc2l0aW9uKCkpIHsKICAgICAg
ICAgZWRpdG9yLT5pbnNlcnRUZXh0KFN0cmluZzo6ZnJvbVVURjgodGV4dCksIDApOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIGlmICh0ZXh0KSB7CisgICAgICAgIGVkaXRvci0+Y29uZmly
bUNvbXBvc2l0aW9uKFN0cmluZzo6ZnJvbVVURjgodGV4dCkpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIGVkaXRvci0+Y29uZmlybUNvbXBvc2l0aW9uKCk7CiB9CiAKIGJvb2wgRHVtcFJl
bmRlclRyZWVTdXBwb3J0R3RrOjpmaXJzdFJlY3RGb3JDaGFyYWN0ZXJSYW5nZShXZWJLaXRXZWJW
aWV3KiB3ZWJWaWV3LCBpbnQgbG9jYXRpb24sIGludCBsZW5ndGgsIEdka1JlY3RhbmdsZSogcmVj
dCkKQEAgLTU2NiwyMSArNTk4LDIxIEBAIGJvb2wgRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrOjpm
aXJzdFJlY3RGb3JDaGFyYWN0ZXJSYW5nZShXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3CiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAogICAgICpyZWN0ID0gZWRpdG9yLT5maXJzdFJlY3RGb3JSYW5nZShy
YW5nZS5nZXQoKSk7Ci0KICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBEdW1wUmVuZGVyVHJl
ZVN1cHBvcnRHdGs6OnNlbGVjdGVkUmFuZ2UoV2ViS2l0V2ViVmlldyogd2ViVmlldywgaW50KiBz
dGFydCwgaW50KiBlbmQpCitib29sIER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6c2VsZWN0ZWRS
YW5nZShXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBpbnQqIHN0YXJ0LCBpbnQqIGxlbmd0aCkKIHsK
ICAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfV0VCX1ZJRVcod2ViVmlldyksIGZh
bHNlKTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChzdGFydCwgZmFsc2UpOwotICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKGVuZCwgZmFsc2UpOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHN0
YXJ0ICYmIGxlbmd0aCwgZmFsc2UpOwogCiAgICAgRnJhbWUqIGZyYW1lID0gY29yZSh3ZWJWaWV3
KS0+Zm9jdXNDb250cm9sbGVyKCktPmZvY3VzZWRPck1haW5GcmFtZSgpOwogICAgIGlmICghZnJh
bWUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBm
cmFtZS0+c2VsZWN0aW9uKCktPnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCk7CisgICAgaWYgKCFy
YW5nZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgRWxlbWVudCogc2VsZWN0aW9uUm9v
dCA9IGZyYW1lLT5zZWxlY3Rpb24oKS0+cm9vdEVkaXRhYmxlRWxlbWVudCgpOwogICAgIEVsZW1l
bnQqIHNjb3BlID0gc2VsZWN0aW9uUm9vdCA/IHNlbGVjdGlvblJvb3QgOiBmcmFtZS0+ZG9jdW1l
bnQoKS0+ZG9jdW1lbnRFbGVtZW50KCk7CkBAIC01OTIsNyArNjI0LDcgQEAgYm9vbCBEdW1wUmVu
ZGVyVHJlZVN1cHBvcnRHdGs6OnNlbGVjdGVkUmFuZ2UoV2ViS2l0V2ViVmlldyogd2ViVmlldywg
aW50KiBzdGFydCwKICAgICBFeGNlcHRpb25Db2RlIGVjOwogICAgIHRlc3RSYW5nZS0+c2V0RW5k
KHJhbmdlLT5lbmRDb250YWluZXIoKSwgcmFuZ2UtPmVuZE9mZnNldCgpLCBlYyk7CiAgICAgQVNT
RVJUKHRlc3RSYW5nZS0+c3RhcnRDb250YWluZXIoKSA9PSBzY29wZSk7Ci0gICAgKmVuZCA9IFRl
eHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgodGVzdFJhbmdlLmdldCgpKTsKKyAgICAqbGVuZ3RoID0g
VGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aCh0ZXN0UmFuZ2UuZ2V0KCkpOwogCiAgICAgcmV0dXJu
IHRydWU7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9E
dW1wUmVuZGVyVHJlZVN1cHBvcnRHdGsuaCBiL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBw
b3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEd0ay5oCmluZGV4IGQ3ZDcxN2NjMGNmZDUwODBjNjAy
ZTIzYmMxZmM5MmI2Y2NiYmJmZTcuLjQ3ZWI0YThhZTdiYzA5NWQzMTJlZTIyN2ZhMWI0NjM3NDhj
MDc4NDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0R1bXBS
ZW5kZXJUcmVlU3VwcG9ydEd0ay5oCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBw
b3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEd0ay5oCkBAIC05NiwxMCArOTYsNiBAQCBwdWJsaWM6
CiAgICAgc3RhdGljIHZvaWQgZXhlY3V0ZUNvcmVDb21tYW5kQnlOYW1lKFdlYktpdFdlYlZpZXcq
LCBjb25zdCBnY2hhciogbmFtZSwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKICAgICBzdGF0aWMgYm9v
bCBpc0NvbW1hbmRFbmFibGVkKFdlYktpdFdlYlZpZXcqLCBjb25zdCBnY2hhciogbmFtZSk7CiAg
ICAgc3RhdGljIGJvb2wgZmluZFN0cmluZyhXZWJLaXRXZWJWaWV3KiwgY29uc3QgZ2NoYXIqLCBX
ZWJLaXRGaW5kT3B0aW9ucyk7Ci0gICAgc3RhdGljIHZvaWQgc2V0Q29tcG9zaXRpb24oV2ViS2l0
V2ViVmlldyosIGNvbnN0IGNoYXIqIHRleHQsIGludCBzdGFydCwgaW50IGVuZCk7Ci0gICAgc3Rh
dGljIHZvaWQgY29uZmlybUNvbXBvc2l0aW9uKFdlYktpdFdlYlZpZXcqLCBjb25zdCBjaGFyKiB0
ZXh0KTsKLSAgICBzdGF0aWMgYm9vbCBmaXJzdFJlY3RGb3JDaGFyYWN0ZXJSYW5nZShXZWJLaXRX
ZWJWaWV3KiwgaW50IGxvY2F0aW9uLCBpbnQgbGVuZ3RoLCBHZGtSZWN0YW5nbGUqKTsKLSAgICBz
dGF0aWMgYm9vbCBzZWxlY3RlZFJhbmdlKFdlYktpdFdlYlZpZXcqLCBpbnQqIHN0YXJ0LCBpbnQq
IGVuZCk7CiAgICAgc3RhdGljIGRvdWJsZSBkZWZhdWx0TWluaW11bVRpbWVySW50ZXJ2YWwoKTsg
Ly8gTm90IHJlYWxseSB0aWVkIHRvIFdlYlZpZXcKICAgICBzdGF0aWMgdm9pZCBzZXRNaW5pbXVt
VGltZXJJbnRlcnZhbChXZWJLaXRXZWJWaWV3KiwgZG91YmxlKTsKICAgICBzdGF0aWMgdm9pZCBy
ZWN0YW5nbGVGb3JTZWxlY3Rpb24oV2ViS2l0V2ViRnJhbWUqLCBHZGtSZWN0YW5nbGUqKTsKQEAg
LTEwOSw2ICsxMDUsMTQgQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIGluY3JlbWVudEFjY2Vz
c2liaWxpdHlWYWx1ZShBdGtPYmplY3QqKTsKICAgICBzdGF0aWMgdm9pZCBkZWNyZW1lbnRBY2Nl
c3NpYmlsaXR5VmFsdWUoQXRrT2JqZWN0Kik7CiAKKyAgICAvLyBUZXh0SW5wdXRDb250cm9sbGVy
CisgICAgc3RhdGljIHZvaWQgc2V0Q29tcG9zaXRpb24oV2ViS2l0V2ViVmlldyosIGNvbnN0IGNo
YXIqLCBpbnQgc3RhcnQsIGludCBsZW5ndGgpOworICAgIHN0YXRpYyBib29sIGhhc0NvbXBvc2l0
aW9uKFdlYktpdFdlYlZpZXcqKTsKKyAgICBzdGF0aWMgYm9vbCBjb21wb3NpdGlvblJhbmdlKFdl
YktpdFdlYlZpZXcqLCBpbnQqIHN0YXJ0LCBpbnQqIGxlbmd0aCk7CisgICAgc3RhdGljIHZvaWQg
Y29uZmlybUNvbXBvc2l0aW9uKFdlYktpdFdlYlZpZXcqLCBjb25zdCBjaGFyKik7CisgICAgc3Rh
dGljIGJvb2wgZmlyc3RSZWN0Rm9yQ2hhcmFjdGVyUmFuZ2UoV2ViS2l0V2ViVmlldyosIGludCBs
b2NhdGlvbiwgaW50IGxlbmd0aCwgR2RrUmVjdGFuZ2xlKik7CisgICAgc3RhdGljIGJvb2wgc2Vs
ZWN0ZWRSYW5nZShXZWJLaXRXZWJWaWV3KiwgaW50KiBzdGFydCwgaW50KiBsZW5ndGgpOworCiAg
ICAgLy8gR0MKICAgICBzdGF0aWMgdm9pZCBnY0NvbGxlY3RKYXZhc2NyaXB0T2JqZWN0cygpOwog
ICAgIHN0YXRpYyB2b2lkIGdjQ29sbGVjdEphdmFzY3JpcHRPYmplY3RzT25BbHRlcm5hdGVUaHJl
YWQoYm9vbCB3YWl0VW50aWxEb25lKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rv
b2xzL0NoYW5nZUxvZwppbmRleCA4NjZhMzRiMjE4NDE4ZjlmZGQ4N2JmMWRiNWFmYjJmNGRkOWYx
ODM3Li40Nzc3NjAxMGE3YzM0ZWFhZDNkYmE0MmZkNTVhMzI1ZDE3ZjUwYzBkIDEwMDY0NAotLS0g
YS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjMgQEAK
KzIwMTEtMDMtMDIgIE1hcnRpbiBSb2JpbnNvbiAgPG1yb2JpbnNvbkBpZ2FsaWEuY29tPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtHVEtdIEltcGxl
bWVudCB0aGUgbmV4dCBiaXQgb2YgdGhlIFRleHRJbnB1dENvbnRyb2xsZXIgKGhhc01hcmtlZFRl
eHQgYW5kIG1hcmtlZFJhbmdlKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NTU2MDMKKworICAgICAgICBBZGQgY2FsbGJhY2tzIHRvIHN1cHBvcnQgaGFz
TWFya2VkVGV4dCBhbmQgbWFya2VkUmFuZ2UgYW5kIGFsc28gY2xlYW4gdXAgZXhpc3RpbmcgCisg
ICAgICAgIFRleHRJbnB1dENvbnRyb2xsZXIgc3VwcG9ydC4KKworICAgICAgICAqIER1bXBSZW5k
ZXJUcmVlL2d0ay9UZXh0SW5wdXRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKHNldE1hcmtlZFRl
eHRDYWxsYmFjayk6IEFjY2VwdCBwYXJhbWV0ZXJzIGluIHRlcm1zIG9mIHN0YXJ0IGFuZCBsZW5n
dGgsIGluc3RlYWQKKyAgICAgICAgb2Ygc3RhcnQgYW5kIGVuZC4gVGhpcyBtYXRjaGVzIHRoZSBv
dGhlciBwb3J0cy4gRG8gbm90IHVzZSBHTGliIHN0eWxlIGVhcmx5IHJldHVybnMuCisgICAgICAg
IChoYXNNYXJrZWRUZXh0Q2FsbGJhY2spOiBBZGRlZC4KKyAgICAgICAgKG1hcmtlZFJhbmdlQ2Fs
bGJhY2spOiBBZGRlZC4KKyAgICAgICAgKGluc2VydFRleHRDYWxsYmFjayk6IENsZWFudXAgYXMg
ZGVzY3JpYmVkIGFib3ZlLgorICAgICAgICAodW5tYXJrVGV4dENhbGxiYWNrKTogQ2xlYW51cCBh
cyBkZXNjcmliZWQgYWJvdmUuCisgICAgICAgIChmaXJzdFJlY3RGb3JDaGFyYWN0ZXJSYW5nZUNh
bGxiYWNrKTogQ2xlYW51cCBhcyBkZXNjcmliZWQgYWJvdmUuCisgICAgICAgIChzZWxlY3RlZFJh
bmdlQ2FsbGJhY2spOiBDbGVhbnVwIGFzIGRlc2NyaWJlZCBhYm92ZS4KKwogMjAxMS0wNS0wMiAg
QWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEVy
aWMgU2VpZGVsLgpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL1RleHRJbnB1
dENvbnRyb2xsZXIuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL1RleHRJbnB1dENvbnRy
b2xsZXIuY3BwCmluZGV4IGQxYWEzM2Q0NjIyMzUzZmRhNmUyZTlkNWI0YTAxY2ZjOThiMGI4ODMu
LjhjY2MwMzJjNjJlZjBmZTkyMmYzMTUzYTg2NGY4MGFlNDJhZDNlYTIgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9UZXh0SW5wdXRDb250cm9sbGVyLmNwcAorKysgYi9Ub29s
cy9EdW1wUmVuZGVyVHJlZS9ndGsvVGV4dElucHV0Q29udHJvbGxlci5jcHAKQEAgLTQxLDE0ICs0
MSwxMiBAQAogc3RhdGljIEpTVmFsdWVSZWYgc2V0TWFya2VkVGV4dENhbGxiYWNrKEpTQ29udGV4
dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVj
dCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpT
VmFsdWVSZWYqIGV4Y2VwdGlvbikKIHsKICAgICBXZWJLaXRXZWJWaWV3KiB2aWV3ID0gd2Via2l0
X3dlYl9mcmFtZV9nZXRfd2ViX3ZpZXcobWFpbkZyYW1lKTsKLSAgICBpZiAoIXZpZXcpCi0gICAg
ICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLQorICAgIEFTU0VSVCh2
aWV3KTsKICAgICBpZiAoYXJndW1lbnRDb3VudCA8IDMpCiAgICAgICAgIHJldHVybiBKU1ZhbHVl
TWFrZVVuZGVmaW5lZChjb250ZXh0KTsKIAogICAgIEpTU3RyaW5nUmVmIHN0cmluZyA9IEpTVmFs
dWVUb1N0cmluZ0NvcHkoY29udGV4dCwgYXJndW1lbnRzWzBdLCBleGNlcHRpb24pOwotICAgIGdf
cmV0dXJuX3ZhbF9pZl9mYWlsKCghZXhjZXB0aW9uIHx8ICEqZXhjZXB0aW9uKSwgSlNWYWx1ZU1h
a2VVbmRlZmluZWQoY29udGV4dCkpOworICAgIEFTU0VSVCghZXhjZXB0aW9uIHx8ICEqZXhjZXB0
aW9uKTsKIAogICAgIHNpemVfdCBidWZmZXJTaXplID0gSlNTdHJpbmdHZXRNYXhpbXVtVVRGOENT
dHJpbmdTaXplKHN0cmluZyk7CiAgICAgR093blB0cjxnY2hhcj4gc3RyaW5nQnVmZmVyKHN0YXRp
Y19jYXN0PGdjaGFyKj4oZ19tYWxsb2MoYnVmZmVyU2l6ZSkpKTsKQEAgLTU2LDI3ICs1NCw0OSBA
QCBzdGF0aWMgSlNWYWx1ZVJlZiBzZXRNYXJrZWRUZXh0Q2FsbGJhY2soSlNDb250ZXh0UmVmIGNv
bnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aQogICAgIEpTU3RyaW5nUmVsZWFzZShzdHJpbmcpOwog
CiAgICAgaW50IHN0YXJ0ID0gc3RhdGljX2Nhc3Q8aW50PihKU1ZhbHVlVG9OdW1iZXIoY29udGV4
dCwgYXJndW1lbnRzWzFdLCBleGNlcHRpb24pKTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbCgo
IWV4Y2VwdGlvbiB8fCAhKmV4Y2VwdGlvbiksIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQp
KTsKLQotICAgIGludCBlbmQgPSBzdGF0aWNfY2FzdDxpbnQ+KEpTVmFsdWVUb051bWJlcihjb250
ZXh0LCBhcmd1bWVudHNbMl0sIGV4Y2VwdGlvbikpOwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWls
KCghZXhjZXB0aW9uIHx8ICEqZXhjZXB0aW9uKSwgSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4
dCkpOworICAgIEFTU0VSVCghZXhjZXB0aW9uIHx8ICEqZXhjZXB0aW9uKTsKIAotICAgIER1bXBS
ZW5kZXJUcmVlU3VwcG9ydEd0azo6c2V0Q29tcG9zaXRpb24odmlldywgc3RyaW5nQnVmZmVyLmdl
dCgpLCBzdGFydCwgZW5kKTsKKyAgICBpbnQgbGVuZ3RoID0gc3RhdGljX2Nhc3Q8aW50PihKU1Zh
bHVlVG9OdW1iZXIoY29udGV4dCwgYXJndW1lbnRzWzJdLCBleGNlcHRpb24pKTsKKyAgICBBU1NF
UlQoIWV4Y2VwdGlvbiB8fCAhKmV4Y2VwdGlvbik7CiAKKyAgICBEdW1wUmVuZGVyVHJlZVN1cHBv
cnRHdGs6OnNldENvbXBvc2l0aW9uKHZpZXcsIHN0cmluZ0J1ZmZlci5nZXQoKSwgc3RhcnQsIGxl
bmd0aCk7CiAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwogfQogCi1z
dGF0aWMgSlNWYWx1ZVJlZiBpbnNlcnRUZXh0Q2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQs
IEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJn
dW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhj
ZXB0aW9uKQorc3RhdGljIEpTVmFsdWVSZWYgaGFzTWFya2VkVGV4dENhbGxiYWNrKEpTQ29udGV4
dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVj
dCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpT
VmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICBXZWJLaXRXZWJWaWV3KiB2aWV3ID0gd2Via2l0
X3dlYl9mcmFtZV9nZXRfd2ViX3ZpZXcobWFpbkZyYW1lKTsKKyAgICBBU1NFUlQodmlldyk7Cisg
ICAgcmV0dXJuIEpTVmFsdWVNYWtlQm9vbGVhbihjb250ZXh0LCBEdW1wUmVuZGVyVHJlZVN1cHBv
cnRHdGs6Omhhc0NvbXBvc2l0aW9uKHZpZXcpKTsKK30KKworc3RhdGljIEpTVmFsdWVSZWYgbWFy
a2VkUmFuZ2VDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rp
b24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBK
U1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCiB7CiAgICAgV2Vi
S2l0V2ViVmlldyogdmlldyA9IHdlYmtpdF93ZWJfZnJhbWVfZ2V0X3dlYl92aWV3KG1haW5GcmFt
ZSk7Ci0gICAgaWYgKCF2aWV3KQorICAgIEFTU0VSVCh2aWV3KTsKKworICAgIGludCBzdGFydCwg
bGVuZ3RoOworICAgIGlmICghRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrOjpjb21wb3NpdGlvblJh
bmdlKHZpZXcsICZzdGFydCwgJmxlbmd0aCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVu
ZGVmaW5lZChjb250ZXh0KTsKIAorICAgIEpTVmFsdWVSZWYgYXJyYXlWYWx1ZXNbMl07CisgICAg
YXJyYXlWYWx1ZXNbMF0gPSBKU1ZhbHVlTWFrZU51bWJlcihjb250ZXh0LCBzdGFydCk7CisgICAg
YXJyYXlWYWx1ZXNbMV0gPSBKU1ZhbHVlTWFrZU51bWJlcihjb250ZXh0LCBsZW5ndGgpOworICAg
IEpTT2JqZWN0UmVmIGFycmF5T2JqZWN0ID0gSlNPYmplY3RNYWtlQXJyYXkoY29udGV4dCwgMiwg
YXJyYXlWYWx1ZXMsIGV4Y2VwdGlvbik7CisgICAgQVNTRVJUKCFleGNlcHRpb24gfHwgISpleGNl
cHRpb24pOworICAgIHJldHVybiBhcnJheU9iamVjdDsKK30KKworc3RhdGljIEpTVmFsdWVSZWYg
aW5zZXJ0VGV4dENhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5j
dGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0
IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICBX
ZWJLaXRXZWJWaWV3KiB2aWV3ID0gd2Via2l0X3dlYl9mcmFtZV9nZXRfd2ViX3ZpZXcobWFpbkZy
YW1lKTsKKyAgICBBU1NFUlQodmlldyk7CisKICAgICBpZiAoYXJndW1lbnRDb3VudCA8IDEpCiAg
ICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKIAogICAgIEpTU3Ry
aW5nUmVmIHN0cmluZyA9IEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgYXJndW1lbnRzWzBd
LCBleGNlcHRpb24pOwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKCghZXhjZXB0aW9uIHx8ICEq
ZXhjZXB0aW9uKSwgSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCkpOworICAgIEFTU0VSVCgh
ZXhjZXB0aW9uIHx8ICEqZXhjZXB0aW9uKTsKIAogICAgIHNpemVfdCBidWZmZXJTaXplID0gSlNT
dHJpbmdHZXRNYXhpbXVtVVRGOENTdHJpbmdTaXplKHN0cmluZyk7CiAgICAgR093blB0cjxnY2hh
cj4gc3RyaW5nQnVmZmVyKHN0YXRpY19jYXN0PGdjaGFyKj4oZ19tYWxsb2MoYnVmZmVyU2l6ZSkp
KTsKQEAgLTg0LDE1ICsxMDQsMTMgQEAgc3RhdGljIEpTVmFsdWVSZWYgaW5zZXJ0VGV4dENhbGxi
YWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwKICAgICBKU1N0
cmluZ1JlbGVhc2Uoc3RyaW5nKTsKIAogICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6Y29u
ZmlybUNvbXBvc2l0aW9uKHZpZXcsIHN0cmluZ0J1ZmZlci5nZXQoKSk7Ci0KICAgICByZXR1cm4g
SlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CiB9CiAKIHN0YXRpYyBKU1ZhbHVlUmVmIHVu
bWFya1RleHRDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rp
b24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBK
U1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCiB7CiAgICAgV2Vi
S2l0V2ViVmlldyogdmlldyA9IHdlYmtpdF93ZWJfZnJhbWVfZ2V0X3dlYl92aWV3KG1haW5GcmFt
ZSk7Ci0gICAgaWYgKCF2aWV3KQotICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQo
Y29udGV4dCk7CisgICAgQVNTRVJUKHZpZXcpOwogCiAgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0
R3RrOjpjb25maXJtQ29tcG9zaXRpb24odmlldywgMCk7CiAgICAgcmV0dXJuIEpTVmFsdWVNYWtl
VW5kZWZpbmVkKGNvbnRleHQpOwpAQCAtMTAxLDE3ICsxMTksMTUgQEAgc3RhdGljIEpTVmFsdWVS
ZWYgdW5tYXJrVGV4dENhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBm
dW5jdGlvbiwKIHN0YXRpYyBKU1ZhbHVlUmVmIGZpcnN0UmVjdEZvckNoYXJhY3RlclJhbmdlQ2Fs
bGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVj
dFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBh
cmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQogewogICAgIFdlYktpdFdlYlZpZXcq
IHZpZXcgPSB3ZWJraXRfd2ViX2ZyYW1lX2dldF93ZWJfdmlldyhtYWluRnJhbWUpOwotICAgIGlm
ICghdmlldykKLSAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwot
CisgICAgQVNTRVJUKHZpZXcpOwogICAgIGlmIChhcmd1bWVudENvdW50IDwgMikKICAgICAgICAg
cmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwogCiAgICAgaW50IGxvY2F0aW9u
ID0gc3RhdGljX2Nhc3Q8aW50PihKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwgYXJndW1lbnRzWzBd
LCBleGNlcHRpb24pKTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbCgoIWV4Y2VwdGlvbiB8fCAh
KmV4Y2VwdGlvbiksIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpKTsKKyAgICBBU1NFUlQo
IWV4Y2VwdGlvbiB8fCAhKmV4Y2VwdGlvbik7CiAKICAgICBpbnQgbGVuZ3RoID0gc3RhdGljX2Nh
c3Q8aW50PihKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwgYXJndW1lbnRzWzFdLCBleGNlcHRpb24p
KTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbCgoIWV4Y2VwdGlvbiB8fCAhKmV4Y2VwdGlvbiks
IEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpKTsKKyAgICBBU1NFUlQoIWV4Y2VwdGlvbiB8
fCAhKmV4Y2VwdGlvbik7CiAKICAgICBHZGtSZWN0YW5nbGUgcmVjdDsKICAgICBpZiAoIUR1bXBS
ZW5kZXJUcmVlU3VwcG9ydEd0azo6Zmlyc3RSZWN0Rm9yQ2hhcmFjdGVyUmFuZ2UodmlldywgbG9j
YXRpb24sIGxlbmd0aCwgJnJlY3QpKQpAQCAtMTIzLDcgKzEzOSw3IEBAIHN0YXRpYyBKU1ZhbHVl
UmVmIGZpcnN0UmVjdEZvckNoYXJhY3RlclJhbmdlQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRl
eHQsIEpTT2JqCiAgICAgYXJyYXlWYWx1ZXNbMl0gPSBKU1ZhbHVlTWFrZU51bWJlcihjb250ZXh0
LCByZWN0LndpZHRoKTsKICAgICBhcnJheVZhbHVlc1szXSA9IEpTVmFsdWVNYWtlTnVtYmVyKGNv
bnRleHQsIHJlY3QuaGVpZ2h0KTsKICAgICBKU09iamVjdFJlZiBhcnJheU9iamVjdCA9IEpTT2Jq
ZWN0TWFrZUFycmF5KGNvbnRleHQsIDQsIGFycmF5VmFsdWVzLCBleGNlcHRpb24pOwotICAgIGdf
cmV0dXJuX3ZhbF9pZl9mYWlsKCghZXhjZXB0aW9uIHx8ICEqZXhjZXB0aW9uKSwgSlNWYWx1ZU1h
a2VVbmRlZmluZWQoY29udGV4dCkpOworICAgIEFTU0VSVCghZXhjZXB0aW9uIHx8ICEqZXhjZXB0
aW9uKTsKIAogICAgIHJldHVybiBhcnJheU9iamVjdDsKIH0KQEAgLTEzMSwyNCArMTQ3LDI1IEBA
IHN0YXRpYyBKU1ZhbHVlUmVmIGZpcnN0UmVjdEZvckNoYXJhY3RlclJhbmdlQ2FsbGJhY2soSlND
b250ZXh0UmVmIGNvbnRleHQsIEpTT2JqCiBzdGF0aWMgSlNWYWx1ZVJlZiBzZWxlY3RlZFJhbmdl
Q2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09i
amVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJl
ZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQogewogICAgIFdlYktpdFdlYlZp
ZXcqIHZpZXcgPSB3ZWJraXRfd2ViX2ZyYW1lX2dldF93ZWJfdmlldyhtYWluRnJhbWUpOwotICAg
IGlmICghdmlldykKLSAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQp
OworICAgIEFTU0VSVCh2aWV3KTsKIAotICAgIGludCBzdGFydCwgZW5kOwotICAgIGlmICghRHVt
cFJlbmRlclRyZWVTdXBwb3J0R3RrOjpzZWxlY3RlZFJhbmdlKHZpZXcsICZzdGFydCwgJmVuZCkp
CisgICAgaW50IHN0YXJ0LCBsZW5ndGg7CisgICAgaWYgKCFEdW1wUmVuZGVyVHJlZVN1cHBvcnRH
dGs6OnNlbGVjdGVkUmFuZ2UodmlldywgJnN0YXJ0LCAmbGVuZ3RoKSkKICAgICAgICAgcmV0dXJu
IEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwogCiAgICAgSlNWYWx1ZVJlZiBhcnJheVZh
bHVlc1syXTsKICAgICBhcnJheVZhbHVlc1swXSA9IEpTVmFsdWVNYWtlTnVtYmVyKGNvbnRleHQs
IHN0YXJ0KTsKLSAgICBhcnJheVZhbHVlc1sxXSA9IEpTVmFsdWVNYWtlTnVtYmVyKGNvbnRleHQs
IGVuZCk7CisgICAgYXJyYXlWYWx1ZXNbMV0gPSBKU1ZhbHVlTWFrZU51bWJlcihjb250ZXh0LCBs
ZW5ndGgpOwogICAgIEpTT2JqZWN0UmVmIGFycmF5T2JqZWN0ID0gSlNPYmplY3RNYWtlQXJyYXko
Y29udGV4dCwgMiwgYXJyYXlWYWx1ZXMsIGV4Y2VwdGlvbik7Ci0gICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoKCFleGNlcHRpb24gfHwgISpleGNlcHRpb24pLCBKU1ZhbHVlTWFrZVVuZGVmaW5lZChj
b250ZXh0KSk7CisgICAgQVNTRVJUKCFleGNlcHRpb24gfHwgISpleGNlcHRpb24pOwogCiAgICAg
cmV0dXJuIGFycmF5T2JqZWN0OwogfQogCiBzdGF0aWMgSlNTdGF0aWNGdW5jdGlvbiBzdGF0aWNG
dW5jdGlvbnNbXSA9IHsKICAgICB7ICJzZXRNYXJrZWRUZXh0Iiwgc2V0TWFya2VkVGV4dENhbGxi
YWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVE
b250RGVsZXRlIH0sCisgICAgeyAiaGFzTWFya2VkVGV4dCIsIGhhc01hcmtlZFRleHRDYWxsYmFj
aywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9u
dERlbGV0ZSB9LAorICAgIHsgIm1hcmtlZFJhbmdlIiwgbWFya2VkUmFuZ2VDYWxsYmFjaywga0pT
UHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0
ZSB9LAogICAgIHsgImluc2VydFRleHQiLCBpbnNlcnRUZXh0Q2FsbGJhY2ssIGtKU1Byb3BlcnR5
QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAg
ICB7ICJ1bm1hcmtUZXh0IiwgdW5tYXJrVGV4dENhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0
ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAgeyAiZmly
c3RSZWN0Rm9yQ2hhcmFjdGVyUmFuZ2UiLCBmaXJzdFJlY3RGb3JDaGFyYWN0ZXJSYW5nZUNhbGxi
YWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVE
b250RGVsZXRlIH0sCg==
</data>
<flag name="review"
          id="85035"
          type_id="1"
          status="+"
          setter="eric"
    />
          </attachment>
      

    </bug>

</bugzilla>