<?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>112195</bug_id>
          
          <creation_ts>2013-03-12 15:06:12 -0700</creation_ts>
          <short_desc>[Chromium] Restrict WebNode::addEventListener and friends to a whitelist of event types</short_desc>
          <delta_ts>2013-03-13 16:18:48 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Adam Barth">abarth</reporter>
          <assigned_to name="Adam Barth">abarth</assigned_to>
          <cc>alancutter</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eric</cc>
    
    <cc>esprehn</cc>
    
    <cc>fishd</cc>
    
    <cc>fsamuel</cc>
    
    <cc>jamesr</cc>
    
    <cc>lazyboy</cc>
    
    <cc>tkent+wkapi</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>853821</commentid>
    <comment_count>0</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2013-03-12 15:06:12 -0700</bug_when>
    <thetext>[Chromium] Restrict WebNode::addEventListener and friends to a whitelist of event types</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>853824</commentid>
    <comment_count>1</comment_count>
      <attachid>192818</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2013-03-12 15:08:40 -0700</bug_when>
    <thetext>Created attachment 192818
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>853827</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-03-12 15:10:56 -0700</bug_when>
    <thetext>Please wait for approval from abarth@webkit.org, dglazkov@chromium.org, fishd@chromium.org, jamesr@chromium.org or tkent@chromium.org before submitting, as this patch contains changes to the Chromium public API. See also https://trac.webkit.org/wiki/ChromiumWebKitAPI.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>853830</commentid>
    <comment_count>3</comment_count>
      <attachid>192818</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2013-03-12 15:11:39 -0700</bug_when>
    <thetext>Comment on attachment 192818
Patch

commit-queue- pending discussion of how to handle the CEF dependency.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>853858</commentid>
    <comment_count>4</comment_count>
      <attachid>192818</attachid>
    <who name="Elliott Sprehn">esprehn</who>
    <bug_when>2013-03-12 15:39:48 -0700</bug_when>
    <thetext>Comment on attachment 192818
Patch

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

&gt; Source/WebKit/chromium/public/WebNode.h:-112
&gt; -    WEBKIT_EXPORT void removeEventListener(const WebString&amp; eventType, WebDOMEventListener* listener, bool useCapture);

Seems bad that the embedder can&apos;t do removeEventListener anymore for mousedown.

&gt; Source/WebKit/chromium/src/WebNode.cpp:188
&gt; +    if (eventType != &quot;permissionrequest&quot;)

Why do you want this to crash in release builds? Shouldn&apos;t this be ASSERT(eventType != &quot;permissionrequest&quot;) ?

&gt; Source/WebKit/chromium/src/WebNode.cpp:197
&gt; +        CRASH();

It&apos;s seems weird that we&apos;re effectively crippling all embedders of Chromium, but I do see that UIWebView doesn&apos;t expose any of this either.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>853864</commentid>
    <comment_count>5</comment_count>
    <who name="Elliott Sprehn">esprehn</who>
    <bug_when>2013-03-12 15:42:19 -0700</bug_when>
    <thetext>btw if you do want it to crash in release builds I think you want RELEASE_ASSERT.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>853871</commentid>
    <comment_count>6</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2013-03-12 15:47:49 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 192818 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=192818&amp;action=review
&gt; 
&gt; &gt; Source/WebKit/chromium/public/WebNode.h:-112
&gt; &gt; -    WEBKIT_EXPORT void removeEventListener(const WebString&amp; eventType, WebDOMEventListener* listener, bool useCapture);
&gt; 
&gt; Seems bad that the embedder can&apos;t do removeEventListener anymore for mousedown.

The one existing caller doesn&apos;t do that today.  They just wait for the document to be destroyed.

&gt; &gt; Source/WebKit/chromium/src/WebNode.cpp:188
&gt; &gt; +    if (eventType != &quot;permissionrequest&quot;)
&gt; 
&gt; Why do you want this to crash in release builds? Shouldn&apos;t this be ASSERT(eventType != &quot;permissionrequest&quot;) ?

I do want it to crash in release builds.

&gt; &gt; Source/WebKit/chromium/src/WebNode.cpp:197
&gt; &gt; +        CRASH();
&gt; 
&gt; It&apos;s seems weird that we&apos;re effectively crippling all embedders of Chromium, but I do see that UIWebView doesn&apos;t expose any of this either.

The Chromium WebKit API is not a general-purpose API.  It&apos;s an API for the specific purposes of the Chromium project.

I suspect the one caller of addEventListener is wrong.  After this patch lands, I&apos;d like to study the one caller to see if they&apos;re doing something sensible or not.

&gt; btw if you do want it to crash in release builds I think you want RELEASE_ASSERT.

Will do.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>853885</commentid>
    <comment_count>7</comment_count>
      <attachid>192818</attachid>
    <who name="Stephen Chenney">schenney</who>
    <bug_when>2013-03-12 16:03:52 -0700</bug_when>
    <thetext>Comment on attachment 192818
Patch

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

&gt; Source/WebKit/chromium/ChangeLog:21
&gt; +            - These tests of DOM mutation events are no loner needed because we

Typo : loner -&gt; longer

&gt; Source/WebKit/chromium/src/WebNode.cpp:195
&gt; +    // Please do not add more eventTypes to this list without an API review.

Is it worth commenting on which code uses this in the vain hope that, should the need go away, this code can reflect the change?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>854439</commentid>
    <comment_count>8</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2013-03-13 11:47:11 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 192818 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=192818&amp;action=review
&gt; 
&gt; &gt; Source/WebKit/chromium/src/WebNode.cpp:195
&gt; &gt; +    // Please do not add more eventTypes to this list without an API review.
&gt; 
&gt; Is it worth commenting on which code uses this in the vain hope that, should the need go away, this code can reflect the change?

Hopefully it&apos;s not a vain hope.  :)

http://code.google.com/p/chromium/issues/detail?id=189561 is the bug for removing the one caller of hasEventListener.  The one caller of addEventListener will need more study.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>854442</commentid>
    <comment_count>9</comment_count>
      <attachid>192956</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2013-03-13 11:49:04 -0700</bug_when>
    <thetext>Created attachment 192956
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>854443</commentid>
    <comment_count>10</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2013-03-13 11:49:22 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; btw if you do want it to crash in release builds I think you want RELEASE_ASSERT.

Doner.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>854469</commentid>
    <comment_count>11</comment_count>
      <attachid>192956</attachid>
    <who name="Elliott Sprehn">esprehn</who>
    <bug_when>2013-03-13 12:18:07 -0700</bug_when>
    <thetext>Comment on attachment 192956
Patch

LGTM</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>854477</commentid>
    <comment_count>12</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2013-03-13 12:28:21 -0700</bug_when>
    <thetext>Chromium try jobs running in https://codereview.chromium.org/12463035</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>854735</commentid>
    <comment_count>13</comment_count>
      <attachid>192956</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2013-03-13 15:45:13 -0700</bug_when>
    <thetext>Comment on attachment 192956
Patch

Try job results look reasonable.  (Unfortunately they&apos;re not linked from the CL I pasted above.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>854737</commentid>
    <comment_count>14</comment_count>
      <attachid>192956</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-03-13 15:45:52 -0700</bug_when>
    <thetext>Comment on attachment 192956
Patch

Rejecting attachment 192956 from review queue.

esprehn@chromium.org does not have reviewer permissions according to http://trac.webkit.org/browser/trunk/Tools/Scripts/webkitpy/common/config/committers.py.

- If you do not have reviewer rights please read http://webkit.org/coding/contributing.html for instructions on how to use bugzilla flags.

- If you have reviewer rights please correct the error in Tools/Scripts/webkitpy/common/config/committers.py by adding yourself to the file (no review needed).  The commit-queue restarts itself every 2 hours.  After restart the commit-queue will correctly respect your reviewer rights.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>854739</commentid>
    <comment_count>15</comment_count>
    <who name="Elliott Sprehn">esprehn</who>
    <bug_when>2013-03-13 15:46:43 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; (From update of attachment 192956 [details])
&gt; Rejecting attachment 192956 [details] from review queue.
&gt; 
&gt; esprehn@chromium.org does not have reviewer permissions according to http://trac.webkit.org/browser/trunk/Tools/Scripts/webkitpy/common/config/committers.py.
&gt; 
&gt; - If you do not have reviewer rights please read http://webkit.org/coding/contributing.html for instructions on how to use bugzilla flags.
&gt; 
&gt; - If you have reviewer rights please correct the error in Tools/Scripts/webkitpy/common/config/committers.py by adding yourself to the file (no review needed).  The commit-queue restarts itself every 2 hours.  After restart the commit-queue will correctly respect your reviewer rights.

Err woops, my bad. Forgot to update the committers.py after I became a reviewer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>854740</commentid>
    <comment_count>16</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2013-03-13 15:47:57 -0700</bug_when>
    <thetext>The feeder bot should restart itself every 2 hours... so you should be a reviewer:
http://trac.webkit.org/browser/trunk/Tools/Scripts/webkitpy/common/config/committers.py#L277</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>854743</commentid>
    <comment_count>17</comment_count>
    <who name="Elliott Sprehn">esprehn</who>
    <bug_when>2013-03-13 15:50:43 -0700</bug_when>
    <thetext>(In reply to comment #16)
&gt; The feeder bot should restart itself every 2 hours... so you should be a reviewer:
&gt; http://trac.webkit.org/browser/trunk/Tools/Scripts/webkitpy/common/config/committers.py#L277

That line says Committer, not Reviewer :P</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>854773</commentid>
    <comment_count>18</comment_count>
      <attachid>192956</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-03-13 16:18:43 -0700</bug_when>
    <thetext>Comment on attachment 192956
Patch

Clearing flags on attachment: 192956

Committed r145770: &lt;http://trac.webkit.org/changeset/145770&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>854774</commentid>
    <comment_count>19</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-03-13 16:18:48 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>192818</attachid>
            <date>2013-03-12 15:08:40 -0700</date>
            <delta_ts>2013-03-13 11:49:01 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-112195-20130312150438.patch</filename>
            <type>text/plain</type>
            <size>15123</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ1NTcwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4
IDk5MzY4NjU5YmQyODBmZmQ5NWM2OTg3ZmZkNjI0MTRkZGMwZWI4YmUuLjYwM2M4NmJlNjE0OTFm
ZGZhYWU2NWIwMzMyOTU0ZGI3NjQ0MTJjZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBA
IC0xLDUgKzEsMjkgQEAKIDIwMTMtMDMtMTIgIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9y
Zz4KIAorICAgICAgICBbQ2hyb21pdW1dIFJlc3RyaWN0IFdlYk5vZGU6OmFkZEV2ZW50TGlzdGVu
ZXIgYW5kIGZyaWVuZHMgdG8gYSB3aGl0ZWxpc3Qgb2YgZXZlbnQgdHlwZXMKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMjE5NQorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENocm9taXVtIG9ubHkgdXNlcyB0
aGVzZSBBUElzIGluIGV4dHJlbWVseSBuYXJyb3cgd2F5cy4gSW4gb3JkZXIgdG8KKyAgICAgICAg
ZGlzY291cmFnZSBDaHJvbWl1bSBmcm9tIHVzaW5nIHRoZXNlIEFQSXMgaW4gYnJvYWRlciB3YXlz
LCB0aGlzIHBhdGNoCisgICAgICAgIHJlc3RyaWN0cyB0aGUgQVBJcyB0byBhIHNtYWxsIHdoaXRl
bGlzdCBvZiBldmVudCB0eXBlcy4KKworICAgICAgICBXZSBtaWdodCB3YW50IHRvIGFkZCBzb21l
IHNvcnQgb2YgZmxhZyB0byBsZXQgQ0VGIHVzZSBleHBvc2UgdGhlc2UgQVBJcworICAgICAgICBt
b3JlIGJyb2FkbHkuCisKKyAgICAgICAgKiBXZWJLaXQuZ3lwaToKKyAgICAgICAgKiBwdWJsaWMv
V2ViTm9kZS5oOgorICAgICAgICAqIHNyYy9XZWJOb2RlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
V2ViTm9kZTo6aGFzRXZlbnRMaXN0ZW5lcnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJOb2RlOjph
ZGRFdmVudExpc3RlbmVyKToKKyAgICAgICAgKiB0ZXN0cy9FdmVudExpc3RlbmVyVGVzdC5jcHA6
IFJlbW92ZWQuCisgICAgICAgICAgICAtIFRoZXNlIHRlc3RzIG9mIERPTSBtdXRhdGlvbiBldmVu
dHMgYXJlIG5vIGxvbmVyIG5lZWRlZCBiZWNhdXNlIHdlCisgICAgICAgICAgICAgIGRvbid0IHN1
cHBvcnQgbGlzdGVuaW5nIGZvciBET00gbXV0YXRpb24gZXZlbnRzIHZpYSB0aGUgQVBJCisgICAg
ICAgICAgICAgIGFueW1vcmUuCisKKzIwMTMtMDMtMTIgIEFkYW0gQmFydGggIDxhYmFydGhAd2Vi
a2l0Lm9yZz4KKwogICAgICAgICBbQ2hyb21pdW1dIFdlYkZyYW1lIGV2ZW50IGxpc3RlbmVyIEFQ
SXMgYXJlIHVudXNlZCBhbmQgY2FuIGJlIHJlbW92ZWQKICAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMjE4OQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL1dlYktpdC5neXBpIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQu
Z3lwaQppbmRleCBhMjY2ZGNkZWI1ZWNhOTk2YTRlZDVkY2I0MWZmNjBkMzhjNzllOWFmLi44OWM4
MjU5M2ZjYWExMDgwMDFmM2YzYTY5NDVmZDNkMzlkZDBmMjkyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
V2ViS2l0Lmd5cGkKQEAgLTY0LDcgKzY0LDYgQEAKICAgICAgICAgICAgICd0ZXN0cy9EZWNpbWFs
VGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0RlZmVycmVkSW1hZ2VEZWNvZGVyVGVzdC5j
cHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0RyYWdJbWFnZVRlc3QuY3BwJywKLSAgICAgICAgICAg
ICd0ZXN0cy9FdmVudExpc3RlbmVyVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0Zha2VX
ZWJQbHVnaW4uY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9GYWtlV2ViUGx1Z2luLmgnLAogICAg
ICAgICAgICAgJ3Rlc3RzL0Zha2VXZWJHcmFwaGljc0NvbnRleHQzRC5oJywKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYk5vZGUuaCBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vcHVibGljL1dlYk5vZGUuaAppbmRleCBiY2NkNTU1ODQwOGY1N2Y3OTNiMzhjNjBl
MDEyM2NjZWU5NWRkNmM1Li44YWJjM2Y4ZTk2MjY3ZGI3NDYxOTA3ZDJlMDFjNDdjMWM5MDRiM2Jj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJOb2RlLmgKKysr
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViTm9kZS5oCkBAIC0xMDcsOSArMTA3
LDEwIEBAIHB1YmxpYzoKICAgICBXRUJLSVRfRVhQT1JUIGJvb2wgaXNGb2N1c2FibGUoKSBjb25z
dDsKICAgICBXRUJLSVRfRVhQT1JUIGJvb2wgaXNDb250ZW50RWRpdGFibGUoKSBjb25zdDsKICAg
ICBXRUJLSVRfRVhQT1JUIGJvb2wgaXNFbGVtZW50Tm9kZSgpIGNvbnN0OworICAgIC8vIGhhc0V2
ZW50TGlzdGVuZXJzIG9ubHkgd29ya3Mgd2l0aCBhIHNtYWxsIHNldCBvZiBldmVudFR5cGVzLgog
ICAgIFdFQktJVF9FWFBPUlQgYm9vbCBoYXNFdmVudExpc3RlbmVycyhjb25zdCBXZWJTdHJpbmcm
IGV2ZW50VHlwZSkgY29uc3Q7CisgICAgLy8gYWRkRXZlbnRMaXN0ZW5lciBvbmx5IHdvcmtzIHdp
dGggYSBzbWFsbCBzZXQgb2YgZXZlbnRUeXBlcy4KICAgICBXRUJLSVRfRVhQT1JUIHZvaWQgYWRk
RXZlbnRMaXN0ZW5lcihjb25zdCBXZWJTdHJpbmcmIGV2ZW50VHlwZSwgV2ViRE9NRXZlbnRMaXN0
ZW5lciogbGlzdGVuZXIsIGJvb2wgdXNlQ2FwdHVyZSk7Ci0gICAgV0VCS0lUX0VYUE9SVCB2b2lk
IHJlbW92ZUV2ZW50TGlzdGVuZXIoY29uc3QgV2ViU3RyaW5nJiBldmVudFR5cGUsIFdlYkRPTUV2
ZW50TGlzdGVuZXIqIGxpc3RlbmVyLCBib29sIHVzZUNhcHR1cmUpOwogICAgIFdFQktJVF9FWFBP
UlQgYm9vbCBkaXNwYXRjaEV2ZW50KGNvbnN0IFdlYkRPTUV2ZW50Jik7CiAgICAgV0VCS0lUX0VY
UE9SVCB2b2lkIHNpbXVsYXRlQ2xpY2soKTsKICAgICBXRUJLSVRfRVhQT1JUIFdlYk5vZGVMaXN0
IGdldEVsZW1lbnRzQnlUYWdOYW1lKGNvbnN0IFdlYlN0cmluZyYpIGNvbnN0OwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTm9kZS5jcHAgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJOb2RlLmNwcAppbmRleCA5ODcyZGYzMWM2ZjQ4YTlhM2U2YTEzYTFj
MmNjZTVlMzQ5ODU1MmEwLi44MTQ5NGU1NDhhOGY0NGZmY2E4OWM2ZDU4MDU2NzM2MTBhNjY4YTIw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJOb2RlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJOb2RlLmNwcApAQCAtMTgwLDI3ICsxODAs
MjkgQEAgYm9vbCBXZWJOb2RlOjppc0VsZW1lbnROb2RlKCkgY29uc3QKIAogYm9vbCBXZWJOb2Rl
OjpoYXNFdmVudExpc3RlbmVycyhjb25zdCBXZWJTdHJpbmcmIGV2ZW50VHlwZSkgY29uc3QKIHsK
KyAgICAvLyBGSVhNRTogInBlcm1pc3Npb25yZXF1ZXN0IiBzZWVtcyBsaWtlIGFuIGltcGxlbWVu
dGF0aW9uIGRldGFpbCBvZiB0aGUKKyAgICAvLyAgICAgICAgdGhlIGJyb3dzZXIgcGx1Zy1pbi4g
UGVyaGFwcyB0aGUgYnJvd3NlciBwbHVnLWluIHNob3VsZCBoYXZlCisgICAgLy8gICAgICAgIGEg
bW9yZSBzcGVjaWFsLXB1cnBvc2UgbWVjaGFuaXNtPworCisgICAgLy8gUGxlYXNlIGRvIG5vdCBh
ZGQgbW9yZSBldmVudFR5cGVzIHRvIHRoaXMgbGlzdCB3aXRob3V0IGFuIEFQSSByZXZpZXcuCisg
ICAgaWYgKGV2ZW50VHlwZSAhPSAicGVybWlzc2lvbnJlcXVlc3QiKQorICAgICAgICBDUkFTSCgp
OwogICAgIHJldHVybiBtX3ByaXZhdGUtPmhhc0V2ZW50TGlzdGVuZXJzKGV2ZW50VHlwZSk7CiB9
CiAKIHZvaWQgV2ViTm9kZTo6YWRkRXZlbnRMaXN0ZW5lcihjb25zdCBXZWJTdHJpbmcmIGV2ZW50
VHlwZSwgV2ViRE9NRXZlbnRMaXN0ZW5lciogbGlzdGVuZXIsIGJvb2wgdXNlQ2FwdHVyZSkKIHsK
LSAgICBFdmVudExpc3RlbmVyV3JhcHBlciogbGlzdGVuZXJXcmFwcGVyID0KLSAgICAgICAgbGlz
dGVuZXItPmNyZWF0ZUV2ZW50TGlzdGVuZXJXcmFwcGVyKGV2ZW50VHlwZSwgdXNlQ2FwdHVyZSwg
bV9wcml2YXRlLmdldCgpKTsKKyAgICAvLyBQbGVhc2UgZG8gbm90IGFkZCBtb3JlIGV2ZW50VHlw
ZXMgdG8gdGhpcyBsaXN0IHdpdGhvdXQgYW4gQVBJIHJldmlldy4KKyAgICBpZiAoZXZlbnRUeXBl
ICE9ICJtb3VzZWRvd24iKQorICAgICAgICBDUkFTSCgpOworCisgICAgRXZlbnRMaXN0ZW5lcldy
YXBwZXIqIGxpc3RlbmVyV3JhcHBlciA9IGxpc3RlbmVyLT5jcmVhdGVFdmVudExpc3RlbmVyV3Jh
cHBlcihldmVudFR5cGUsIHVzZUNhcHR1cmUsIG1fcHJpdmF0ZS5nZXQoKSk7CiAgICAgLy8gVGhl
IGxpc3RlbmVyV3JhcHBlciBpcyBvbmx5IHJlZmVyZW5jZWQgYnkgdGhlIGFjdHVhbCBOb2RlLiAg
T25jZSBpdCBnb2VzCiAgICAgLy8gYXdheSwgdGhlIHdyYXBwZXIgbm90aWZpZXMgdGhlIFdlYkV2
ZW50TGlzdGVuZXIgc28gaXQgY2FuIGNsZWFyIGl0cwogICAgIC8vIHBvaW50ZXIgdG8gaXQuCiAg
ICAgbV9wcml2YXRlLT5hZGRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgYWRvcHRSZWYobGlzdGVu
ZXJXcmFwcGVyKSwgdXNlQ2FwdHVyZSk7CiB9CiAKLXZvaWQgV2ViTm9kZTo6cmVtb3ZlRXZlbnRM
aXN0ZW5lcihjb25zdCBXZWJTdHJpbmcmIGV2ZW50VHlwZSwgV2ViRE9NRXZlbnRMaXN0ZW5lciog
bGlzdGVuZXIsIGJvb2wgdXNlQ2FwdHVyZSkKLXsKLSAgICBFdmVudExpc3RlbmVyV3JhcHBlciog
bGlzdGVuZXJXcmFwcGVyID0KLSAgICAgICAgbGlzdGVuZXItPmdldEV2ZW50TGlzdGVuZXJXcmFw
cGVyKGV2ZW50VHlwZSwgdXNlQ2FwdHVyZSwgbV9wcml2YXRlLmdldCgpKTsKLSAgICBtX3ByaXZh
dGUtPnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBsaXN0ZW5lcldyYXBwZXIsIHVzZUNh
cHR1cmUpOwotICAgIC8vIGxpc3RlbmVyV3JhcHBlciBpcyBub3cgZGVsZXRlZC4KLX0KLQogYm9v
bCBXZWJOb2RlOjpkaXNwYXRjaEV2ZW50KGNvbnN0IFdlYkRPTUV2ZW50JiBldmVudCkKIHsKICAg
ICBpZiAoIWV2ZW50LmlzTnVsbCgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9FdmVudExpc3RlbmVyVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rl
c3RzL0V2ZW50TGlzdGVuZXJUZXN0LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
NjI5NTQwZjVmY2VhMjgyM2I0NDNiMWMzZTdiNWYzOWJiNmQ4ODNhOS4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rl
c3RzL0V2ZW50TGlzdGVuZXJUZXN0LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDI1MyArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICog
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
LSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
Ci0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
I2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaW5jbHVkZSAiRnJhbWVUZXN0SGVscGVycy5oIgotI2lu
Y2x1ZGUgIlVSTFRlc3RIZWxwZXJzLmgiCi0jaW5jbHVkZSAiV2ViRE9NRXZlbnQuaCIKLSNpbmNs
dWRlICJXZWJET01FdmVudExpc3RlbmVyLmgiCi0jaW5jbHVkZSAiV2ViRE9NTXV0YXRpb25FdmVu
dC5oIgotI2luY2x1ZGUgIldlYkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiV2ViRWxlbWVudC5oIgot
I2luY2x1ZGUgIldlYkZyYW1lLmgiCi0jaW5jbHVkZSAiV2ViU2NyaXB0U291cmNlLmgiCi0jaW5j
bHVkZSAiV2ViVmlldy5oIgotI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+Ci0jaW5jbHVkZSA8cHVi
bGljL1BsYXRmb3JtLmg+Ci0jaW5jbHVkZSA8cHVibGljL1dlYlVuaXRUZXN0U3VwcG9ydC5oPgot
Ci11c2luZyBuYW1lc3BhY2UgV2ViS2l0OwotCi1uYW1lc3BhY2UgewotCi1jbGFzcyBUZXN0V2Vi
RE9NRXZlbnRMaXN0ZW5lciA6IHB1YmxpYyBXZWJET01FdmVudExpc3RlbmVyIHsKLXB1YmxpYzoK
LSAgICBUZXN0V2ViRE9NRXZlbnRMaXN0ZW5lcigpIHsgfQotICAgIHZpcnR1YWwgflRlc3RXZWJE
T01FdmVudExpc3RlbmVyKCkgeyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlRXZlbnQoY29u
c3QgV2ViRE9NRXZlbnQmIGV2ZW50KSBPVkVSUklERQotICAgIHsKLSAgICAgIG1fZXZlbnRzLnB1
c2hfYmFjayhldmVudCk7Ci0gICAgfQotCi0gICAgc2l6ZV90IGV2ZW50Q291bnQoKSBjb25zdCB7
IHJldHVybiBtX2V2ZW50cy5zaXplKCk7IH0KLQotICAgIFdlYkRPTUV2ZW50IGV2ZW50QXQoaW50
IGluZGV4KSBjb25zdCB7IHJldHVybiBtX2V2ZW50cy5hdChpbmRleCk7IH0KLQotICAgIHZvaWQg
Y2xlYXJFdmVudHMoKSB7IG1fZXZlbnRzLmNsZWFyKCk7IH0KLQotcHJpdmF0ZToKLSAgICBzdGQ6
OnZlY3RvcjxXZWJET01FdmVudD4gbV9ldmVudHM7Ci19OwotCi1jbGFzcyBXZWJET01FdmVudExp
c3RlbmVyVGVzdCA6IHB1YmxpYyB0ZXN0aW5nOjpUZXN0IHsKLXB1YmxpYzoKLSAgICBXZWJET01F
dmVudExpc3RlbmVyVGVzdCgpCi0gICAgICAgIDogbV93ZWJWaWV3KDApCi0gICAgewotICAgIH0K
LQotICAgIHZpcnR1YWwgdm9pZCBTZXRVcCgpIE9WRVJSSURFCi0gICAgewotICAgICAgICBzdGQ6
OnN0cmluZyBiYXNlVVJMKCJodHRwOi8vd3d3LmV4YW1wbGUuY29tLyIpOwotICAgICAgICBzdGQ6
OnN0cmluZyBmaWxlTmFtZSgibGlzdGVuZXIvbXV0YXRpb25fZXZlbnRfbGlzdGVuZXIuaHRtbCIp
OwotICAgICAgICBib29sIGV4ZWN1dGVTY3JpcHQgPSB0cnVlOwotICAgICAgICBVUkxUZXN0SGVs
cGVyczo6cmVnaXN0ZXJNb2NrZWRVUkxGcm9tQmFzZVVSTChXZWJTdHJpbmc6OmZyb21VVEY4KGJh
c2VVUkwuY19zdHIoKSksIFdlYlN0cmluZzo6ZnJvbVVURjgoZmlsZU5hbWUuY19zdHIoKSkpOwot
ICAgICAgICBtX3dlYlZpZXcgPSBGcmFtZVRlc3RIZWxwZXJzOjpjcmVhdGVXZWJWaWV3QW5kTG9h
ZChiYXNlVVJMICsgZmlsZU5hbWUsIGV4ZWN1dGVTY3JpcHQpOwotICAgIH0KLQotICAgIHZpcnR1
YWwgdm9pZCBUZWFyRG93bigpIE9WRVJSSURFCi0gICAgewotICAgICAgICBtX3dlYlZpZXctPmNs
b3NlKCk7Ci0gICAgICAgIFBsYXRmb3JtOjpjdXJyZW50KCktPnVuaXRUZXN0U3VwcG9ydCgpLT51
bnJlZ2lzdGVyQWxsTW9ja2VkVVJMcygpOwotICAgIH0KLQotICAgIFdlYkZyYW1lKiBtYWluRnJh
bWUoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fd2ViVmlldy0+bWFpbkZyYW1lKCk7
Ci0gICAgfQotCi0gICAgV2ViRG9jdW1lbnQgZG9jdW1lbnQoKSBjb25zdAotICAgIHsKLSAgICAg
ICAgcmV0dXJuIG1haW5GcmFtZSgpLT5kb2N1bWVudCgpOwotICAgIH0KLQotICAgIHZvaWQgZXhl
Y3V0ZVNjcmlwdChjb25zdCBjaGFyKiBjb2RlKQotICAgIHsKLSAgICAgICAgbWFpbkZyYW1lKCkt
PmV4ZWN1dGVTY3JpcHQoV2ViU2NyaXB0U291cmNlKFdlYlN0cmluZzo6ZnJvbVVURjgoY29kZSkp
KTsKLSAgICB9Ci0KLQotICAgIHN0YXRpYyBXZWJTdHJpbmcgR2V0Tm9kZUlEKGNvbnN0IFdlYk5v
ZGUmIG5vZGUpCi0gICAgewotICAgICAgICBpZiAobm9kZS5ub2RlVHlwZSgpICE9IFdlYk5vZGU6
OkVsZW1lbnROb2RlKQotICAgICAgICAgICAgcmV0dXJuIFdlYlN0cmluZygpOwotICAgICAgICBX
ZWJFbGVtZW50IGVsZW1lbnQgPSBub2RlLnRvQ29uc3Q8V2ViRWxlbWVudD4oKTsKLSAgICAgICAg
cmV0dXJuIGVsZW1lbnQuZ2V0QXR0cmlidXRlKCJpZCIpOwotICAgIH0KLQotcHJvdGVjdGVkOgot
ICAgIFdlYlZpZXcqIG1fd2ViVmlldzsKLX07Ci0KLQotLy8gVGVzdHMgdGhhdCB0aGUgcmlnaHQg
bXV0YXRpb24gZXZlbnRzIGFyZSBmaXJlZCB3aGVuIGEgbm9kZSBpcyBhZGRlZC9yZW1vdmVkLgot
Ly8gTm90ZSB0aGF0IHRoZSBET01TdWJ0cmVlTW9kaWZpZWQgZXZlbnQgaXMgZmFpcmx5IHZhZ2Us
IGl0IG9ubHkgdGVsbHMgeW91Ci0vLyBzb21ldGhpbmcgY2hhbmdlZCBmb3IgdGhlIHRhcmdldCBu
b2RlLgotVEVTVF9GKFdlYkRPTUV2ZW50TGlzdGVuZXJUZXN0LCBOb2RlQWRkZWRSZW1vdmVkTXV0
YXRpb25FdmVudCkKLXsKLSAgICBUZXN0V2ViRE9NRXZlbnRMaXN0ZW5lciBldmVudExpc3RlbmVy
OwotICAgIGRvY3VtZW50KCkuYWRkRXZlbnRMaXN0ZW5lcigiRE9NU3VidHJlZU1vZGlmaWVkIiwg
JmV2ZW50TGlzdGVuZXIsIGZhbHNlKTsKLQotICAgIC8vIFRlc3QgYWRkaW5nIGEgbm9kZS4KLSAg
ICBleGVjdXRlU2NyaXB0KCJhZGRFbGVtZW50KCduZXdOb2RlJykiKTsKLSAgICBBU1NFUlRfRVEo
MVUsIGV2ZW50TGlzdGVuZXIuZXZlbnRDb3VudCgpKTsKLSAgICBXZWJET01FdmVudCBldmVudCA9
IGV2ZW50TGlzdGVuZXIuZXZlbnRBdCgwKTsKLSAgICBBU1NFUlRfVFJVRShldmVudC5pc011dGF0
aW9uRXZlbnQoKSk7Ci0gICAgLy8gTm8gbmVlZCB0byBjaGVjayBhbnkgb2YgdGhlIE11dGF0aW9u
RXZlbnQsIFdlYktpdCBkb2VzIG5vdCBzZXQgYW55LgotICAgIEVYUEVDVF9FUSgiRElWIiwgZXZl
bnQudGFyZ2V0KCkubm9kZU5hbWUoKSk7Ci0gICAgRVhQRUNUX0VRKCJ0b3BEaXYiLCBHZXROb2Rl
SUQoZXZlbnQudGFyZ2V0KCkpKTsKLSAgICBldmVudExpc3RlbmVyLmNsZWFyRXZlbnRzKCk7Ci0K
LSAgICAvLyBUZXN0IHJlbW92aW5nIGEgbm9kZS4KLSAgICBleGVjdXRlU2NyaXB0KCJyZW1vdmVO
b2RlKCdkaXYxJykiKTsKLSAgICBBU1NFUlRfRVEoMVUsIGV2ZW50TGlzdGVuZXIuZXZlbnRDb3Vu
dCgpKTsKLSAgICBldmVudCA9IGV2ZW50TGlzdGVuZXIuZXZlbnRBdCgwKTsKLSAgICBBU1NFUlRf
VFJVRShldmVudC5pc011dGF0aW9uRXZlbnQoKSk7Ci0gICAgRVhQRUNUX0VRKCJESVYiLCBldmVu
dC50YXJnZXQoKS5ub2RlTmFtZSgpKTsKLSAgICBFWFBFQ1RfRVEoInRvcERpdiIsIEdldE5vZGVJ
RChldmVudC50YXJnZXQoKSkpOwotfQotCi0vLyBUZXN0cyB0aGUgcmlnaHQgbXV0YXRpb24gZXZl
bnQgaXMgZmlyZWQgd2hlbiBhIHRleHQgbm9kZSBpcyBtb2RpZmllZC4KLVRFU1RfRihXZWJET01F
dmVudExpc3RlbmVyVGVzdCwgVGV4dE5vZGVNb2RpZmllZE11dGF0aW9uRXZlbnQpCi17Ci0gICAg
VGVzdFdlYkRPTUV2ZW50TGlzdGVuZXIgZXZlbnRMaXN0ZW5lcjsKLSAgICBkb2N1bWVudCgpLmFk
ZEV2ZW50TGlzdGVuZXIoIkRPTVN1YnRyZWVNb2RpZmllZCIsICZldmVudExpc3RlbmVyLCBmYWxz
ZSk7Ci0gICAgZXhlY3V0ZVNjcmlwdCgiY2hhbmdlVGV4dCgnZGl2MicsICdIZWxsbycpIik7Ci0g
ICAgQVNTRVJUX0VRKDFVLCBldmVudExpc3RlbmVyLmV2ZW50Q291bnQoKSk7Ci0gICAgV2ViRE9N
RXZlbnQgZXZlbnQgPSBldmVudExpc3RlbmVyLmV2ZW50QXQoMCk7Ci0gICAgQVNTRVJUX1RSVUUo
ZXZlbnQuaXNNdXRhdGlvbkV2ZW50KCkpOwotICAgIEFTU0VSVF9FUShXZWJOb2RlOjpUZXh0Tm9k
ZSwgZXZlbnQudGFyZ2V0KCkubm9kZVR5cGUoKSk7Ci19Ci0KLS8vIFRlc3RzIHRoZSByaWdodCBt
dXRhdGlvbiBldmVudHMgYXJlIGZpcmVkIHdoZW4gYW4gYXR0cmlidXRlIGlzIGFkZGVkL3JlbW92
ZWQuCi1URVNUX0YoV2ViRE9NRXZlbnRMaXN0ZW5lclRlc3QsIEF0dHJpYnV0ZU11dGF0aW9uRXZl
bnQpCi17Ci0gICAgVGVzdFdlYkRPTUV2ZW50TGlzdGVuZXIgZXZlbnRMaXN0ZW5lcjsKLSAgICBk
b2N1bWVudCgpLmFkZEV2ZW50TGlzdGVuZXIoIkRPTVN1YnRyZWVNb2RpZmllZCIsICZldmVudExp
c3RlbmVyLCBmYWxzZSk7Ci0gICAgZXhlY3V0ZVNjcmlwdCgiZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoJ2RpdjInKS5zZXRBdHRyaWJ1dGUoJ215QXR0cicsIgotICAgICAgICAgICAgICAgICAgIidz
b21lIHZhbHVlJykiKTsKLSAgICBBU1NFUlRfRVEoMVUsIGV2ZW50TGlzdGVuZXIuZXZlbnRDb3Vu
dCgpKTsKLSAgICBXZWJET01FdmVudCBldmVudCA9IGV2ZW50TGlzdGVuZXIuZXZlbnRBdCgwKTsK
LSAgICBBU1NFUlRfVFJVRShldmVudC5pc011dGF0aW9uRXZlbnQoKSk7Ci0gICAgRVhQRUNUX0VR
KCJESVYiLCBldmVudC50YXJnZXQoKS5ub2RlTmFtZSgpKTsKLSAgICBFWFBFQ1RfRVEoImRpdjIi
LCBHZXROb2RlSUQoZXZlbnQudGFyZ2V0KCkpKTsKLSAgICBldmVudExpc3RlbmVyLmNsZWFyRXZl
bnRzKCk7Ci0KLSAgICBleGVjdXRlU2NyaXB0KCJkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZGl2
MicpLnJlbW92ZUF0dHJpYnV0ZSgnbXlBdHRyJykiKTsKLSAgICBBU1NFUlRfRVEoMVUsIGV2ZW50
TGlzdGVuZXIuZXZlbnRDb3VudCgpKTsKLSAgICBldmVudCA9IGV2ZW50TGlzdGVuZXIuZXZlbnRB
dCgwKTsKLSAgICBBU1NFUlRfVFJVRShldmVudC5pc011dGF0aW9uRXZlbnQoKSk7Ci0gICAgRVhQ
RUNUX0VRKCJESVYiLCBldmVudC50YXJnZXQoKS5ub2RlTmFtZSgpKTsKLSAgICBFWFBFQ1RfRVEo
ImRpdjIiLCBHZXROb2RlSUQoZXZlbnQudGFyZ2V0KCkpKTsKLX0KLQotLy8gVGVzdHMgZGVzdHJv
eWluZyBXZWJET01FdmVudExpc3RlbmVyIGFuZCB0cmlnZ2VyaW5nIGV2ZW50cywgd2Ugc2hvdWxk
bid0Ci0vLyBjcmFzaC4KLVRFU1RfRihXZWJET01FdmVudExpc3RlbmVyVGVzdCwgRmlyZUV2ZW50
RGVsZXRlZExpc3RlbmVyKQotewotICAgIFRlc3RXZWJET01FdmVudExpc3RlbmVyKiBldmVudExp
c3RlbmVyID0gbmV3IFRlc3RXZWJET01FdmVudExpc3RlbmVyKCk7Ci0gICAgZG9jdW1lbnQoKS5h
ZGRFdmVudExpc3RlbmVyKCJET01TdWJ0cmVlTW9kaWZpZWQiLCBldmVudExpc3RlbmVyLCBmYWxz
ZSk7Ci0gICAgZGVsZXRlIGV2ZW50TGlzdGVuZXI7Ci0gICAgZXhlY3V0ZVNjcmlwdCgiYWRkRWxl
bWVudCgnbmV3Tm9kZScpIik7IC8vIFRoYXQgc2hvdWxkIGZpcmUgYW4gZXZlbnQuCi19Ci0KLS8v
IFRlc3RzIHJlZ2lzdGVyaW5nIHNldmVyYWwgZXZlbnRzIG9uIHRoZSBzYW1lIFdlYkRPTUV2ZW50
TGlzdGVuZXIgYW5kCi0vLyB0cmlnZ2VyaW5nIGV2ZW50cy4KLVRFU1RfRihXZWJET01FdmVudExp
c3RlbmVyVGVzdCwgU2FtZUxpc3RlbmVyTXVsdGlwbGVFdmVudHMpCi17Ci0gICAgVGVzdFdlYkRP
TUV2ZW50TGlzdGVuZXIgZXZlbnRMaXN0ZW5lcjsKLSAgICBjb25zdCBXZWJTdHJpbmcga0RPTVN1
YnRyZWVNb2RpZmllZFR5cGUoIkRPTVN1YnRyZWVNb2RpZmllZCIpOwotICAgIGNvbnN0IFdlYlN0
cmluZyBrRE9NTm9kZVJlbW92ZWRUeXBlKCJET01Ob2RlUmVtb3ZlZCIpOwotICAgIGRvY3VtZW50
KCkuYWRkRXZlbnRMaXN0ZW5lcihrRE9NU3VidHJlZU1vZGlmaWVkVHlwZSwgJmV2ZW50TGlzdGVu
ZXIsIGZhbHNlKTsKLSAgICBXZWJFbGVtZW50IGRpdjFFbGVtID0gZG9jdW1lbnQoKS5nZXRFbGVt
ZW50QnlJZCgiZGl2MSIpOwotICAgIGRpdjFFbGVtLmFkZEV2ZW50TGlzdGVuZXIoa0RPTU5vZGVS
ZW1vdmVkVHlwZSwgJmV2ZW50TGlzdGVuZXIsIGZhbHNlKTsKLQotICAgIC8vIFRyaWdnZXIgYSBE
T01TdWJ0cmVlTW9kaWZpZWQgZXZlbnQgYnkgYWRkaW5nIGEgbm9kZS4KLSAgICBleGVjdXRlU2Ny
aXB0KCJhZGRFbGVtZW50KCduZXdOb2RlJykiKTsKLSAgICBBU1NFUlRfRVEoMVUsIGV2ZW50TGlz
dGVuZXIuZXZlbnRDb3VudCgpKTsKLSAgICBXZWJET01FdmVudCBldmVudCA9IGV2ZW50TGlzdGVu
ZXIuZXZlbnRBdCgwKTsKLSAgICBBU1NFUlRfVFJVRShldmVudC5pc011dGF0aW9uRXZlbnQoKSk7
Ci0gICAgRVhQRUNUX0VRKCJESVYiLCBldmVudC50YXJnZXQoKS5ub2RlTmFtZSgpKTsKLSAgICBF
WFBFQ1RfRVEoInRvcERpdiIsIEdldE5vZGVJRChldmVudC50YXJnZXQoKSkpOwotICAgIGV2ZW50
TGlzdGVuZXIuY2xlYXJFdmVudHMoKTsKLQotICAgIC8vIFRyaWdnZXIgZm9yIGJvdGggZXZlbnQg
bGlzdGVuZXIgYnkgcmVtb3ZpbmcgdGhlIGRpdjEgbm9kZS4KLSAgICBleGVjdXRlU2NyaXB0KCJy
ZW1vdmVOb2RlKCdkaXYxJykiKTsKLSAgICBBU1NFUlRfRVEoMlUsIGV2ZW50TGlzdGVuZXIuZXZl
bnRDb3VudCgpKTsKLSAgICAvLyBOb3Qgc3VyZSBpZiB0aGUgb3JkZXIgb2YgdGhlIGV2ZW50cyBp
cyBpbXBvcnRhbnQuIEFzc3VtaW5nIG5vIHNwZWNpZmljCi0gICAgLy8gb3JkZXIuCi0gICAgV2Vi
U3RyaW5nIHR5cGUxID0gZXZlbnRMaXN0ZW5lci5ldmVudEF0KDApLnR5cGUoKTsKLSAgICBXZWJT
dHJpbmcgdHlwZTIgPSBldmVudExpc3RlbmVyLmV2ZW50QXQoMSkudHlwZSgpOwotICAgIEVYUEVD
VF9UUlVFKHR5cGUxID09IGtET01TdWJ0cmVlTW9kaWZpZWRUeXBlIHx8IHR5cGUxID09IGtET01O
b2RlUmVtb3ZlZFR5cGUpOwotICAgIEVYUEVDVF9UUlVFKHR5cGUyID09IGtET01TdWJ0cmVlTW9k
aWZpZWRUeXBlIHx8IHR5cGUyID09IGtET01Ob2RlUmVtb3ZlZFR5cGUpOwotICAgIEVYUEVDVF9U
UlVFKHR5cGUxICE9IHR5cGUyKTsKLX0KLQotLy8gVGVzdHMgcmVtb3ZpbmcgZXZlbnQgbGlzdGVu
ZXJzLgotVEVTVF9GKFdlYkRPTUV2ZW50TGlzdGVuZXJUZXN0LCBSZW1vdmVFdmVudExpc3RlbmVy
KQotewotICAgIFRlc3RXZWJET01FdmVudExpc3RlbmVyIGV2ZW50TGlzdGVuZXI7Ci0gICAgY29u
c3QgV2ViU3RyaW5nIGtET01TdWJ0cmVlTW9kaWZpZWRUeXBlKCJET01TdWJ0cmVlTW9kaWZpZWQi
KTsKLSAgICAvLyBBZGRpbmcgdHdpY2UgdGhlIHNhbWUgbGlzdGVuZXIgZm9yIHRoZSBzYW1lIGV2
ZW50LCBzaG91bGQgYmUgc3VwcG9ydGVkLgotICAgIGRvY3VtZW50KCkuYWRkRXZlbnRMaXN0ZW5l
cihrRE9NU3VidHJlZU1vZGlmaWVkVHlwZSwgJmV2ZW50TGlzdGVuZXIsIGZhbHNlKTsKLSAgICBk
b2N1bWVudCgpLmFkZEV2ZW50TGlzdGVuZXIoa0RPTVN1YnRyZWVNb2RpZmllZFR5cGUsICZldmVu
dExpc3RlbmVyLCBmYWxzZSk7Ci0KLSAgICAvLyBBZGQgYSBub2RlLCB0aGF0IHNob3VsZCB0cmln
Z2VyIDIgZXZlbnRzLgotICAgIGV4ZWN1dGVTY3JpcHQoImFkZEVsZW1lbnQoJ25ld05vZGUnKSIp
OwotICAgIEVYUEVDVF9FUSgyVSwgZXZlbnRMaXN0ZW5lci5ldmVudENvdW50KCkpOwotICAgIGV2
ZW50TGlzdGVuZXIuY2xlYXJFdmVudHMoKTsKLQotICAgIC8vIFJlbW92ZSBvbmUgbGlzdGVuZXIg
YW5kIHRyaWdnZXIgYW4gZXZlbnQgYWdhaW4uCi0gICAgZG9jdW1lbnQoKS5yZW1vdmVFdmVudExp
c3RlbmVyKAotICAgICAgICBrRE9NU3VidHJlZU1vZGlmaWVkVHlwZSwgJmV2ZW50TGlzdGVuZXIs
IGZhbHNlKTsKLSAgICBleGVjdXRlU2NyaXB0KCJhZGRFbGVtZW50KCduZXdlck5vZGUnKSIpOwot
ICAgIEVYUEVDVF9FUSgxVSwgZXZlbnRMaXN0ZW5lci5ldmVudENvdW50KCkpOwotICAgIGV2ZW50
TGlzdGVuZXIuY2xlYXJFdmVudHMoKTsKLQotICAgIC8vIFJlbW92ZSB0aGUgbGFzdCBsaXN0ZW5l
ciBhbmQgdHJpZ2dlciB5ZXQgYW5vdGhlciBldmVudC4KLSAgICBkb2N1bWVudCgpLnJlbW92ZUV2
ZW50TGlzdGVuZXIoCi0gICAgICAgIGtET01TdWJ0cmVlTW9kaWZpZWRUeXBlLCAmZXZlbnRMaXN0
ZW5lciwgZmFsc2UpOwotICAgIGV4ZWN1dGVTY3JpcHQoImFkZEVsZW1lbnQoJ25ld2VyZXJOb2Rl
JykiKTsKLSAgICBFWFBFQ1RfRVEoMFUsIGV2ZW50TGlzdGVuZXIuZXZlbnRDb3VudCgpKTsKLX0K
LQotfSAvLyBuYW1lc3BhY2UK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>192956</attachid>
            <date>2013-03-13 11:49:04 -0700</date>
            <delta_ts>2013-03-13 16:18:43 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-112195-20130313114501.patch</filename>
            <type>text/plain</type>
            <size>15147</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ1NzI4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4
IDY1NWM4ZTVhMjkyYTFlZTAyMTQ3YjRlMWYwZjY5YmFiNjk4ZjJjMDguLjA2NmM4ZGM3MTNlOTc0
ODBmZTg0OGQ5NDM2MzhlZGE1MDY0MjFhZjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMjcgQEAKKzIwMTMtMDMtMTMgIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9y
Zz4KKworICAgICAgICBbQ2hyb21pdW1dIFJlc3RyaWN0IFdlYk5vZGU6OmFkZEV2ZW50TGlzdGVu
ZXIgYW5kIGZyaWVuZHMgdG8gYSB3aGl0ZWxpc3Qgb2YgZXZlbnQgdHlwZXMKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMjE5NQorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENocm9taXVtIG9ubHkgdXNlcyB0
aGVzZSBBUElzIGluIGV4dHJlbWVseSBuYXJyb3cgd2F5cy4gSW4gb3JkZXIgdG8KKyAgICAgICAg
ZGlzY291cmFnZSBDaHJvbWl1bSBmcm9tIHVzaW5nIHRoZXNlIEFQSXMgaW4gYnJvYWRlciB3YXlz
LCB0aGlzIHBhdGNoCisgICAgICAgIHJlc3RyaWN0cyB0aGUgQVBJcyB0byBhIHNtYWxsIHdoaXRl
bGlzdCBvZiBldmVudCB0eXBlcy4KKworICAgICAgICBXZSBtaWdodCB3YW50IHRvIGFkZCBzb21l
IHNvcnQgb2YgZmxhZyB0byBsZXQgQ0VGIHVzZSBleHBvc2UgdGhlc2UgQVBJcworICAgICAgICBt
b3JlIGJyb2FkbHkuCisKKyAgICAgICAgKiBXZWJLaXQuZ3lwaToKKyAgICAgICAgKiBwdWJsaWMv
V2ViTm9kZS5oOgorICAgICAgICAqIHNyYy9XZWJOb2RlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
V2ViTm9kZTo6aGFzRXZlbnRMaXN0ZW5lcnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJOb2RlOjph
ZGRFdmVudExpc3RlbmVyKToKKyAgICAgICAgKiB0ZXN0cy9FdmVudExpc3RlbmVyVGVzdC5jcHA6
IFJlbW92ZWQuCisgICAgICAgICAgICAtIFRoZXNlIHRlc3RzIG9mIERPTSBtdXRhdGlvbiBldmVu
dHMgYXJlIG5vIGxvbmdlciBuZWVkZWQgYmVjYXVzZSB3ZQorICAgICAgICAgICAgICBkb24ndCBz
dXBwb3J0IGxpc3RlbmluZyBmb3IgRE9NIG11dGF0aW9uIGV2ZW50cyB2aWEgdGhlIEFQSQorICAg
ICAgICAgICAgICBhbnltb3JlLgorCiAyMDEzLTAzLTEzICBBYXJvbiBDb2x3ZWxsICA8YWNvbHdl
bGxAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIENsZWFudXAgZGVhZCBNZWRpYVNvdXJjZSBjb2Rl
IG5vdyB0aGF0IHRoZSBDaHJvbWl1bS1zaWRlIHJlZmFjdG9yIGlzIGNvbXBsZXRlLgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaSBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vV2ViS2l0Lmd5cGkKaW5kZXggYTI2NmRjZGViNWVjYTk5NmE0ZWQ1ZGNiNDFmZjYw
ZDM4Yzc5ZTlhZi4uODljODI1OTNmY2FhMTA4MDAxZjNmM2E2OTQ1ZmQzZDM5ZGQwZjI5MiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQorKysgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCkBAIC02NCw3ICs2NCw2IEBACiAgICAgICAgICAg
ICAndGVzdHMvRGVjaW1hbFRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9EZWZlcnJlZElt
YWdlRGVjb2RlclRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9EcmFnSW1hZ2VUZXN0LmNw
cCcsCi0gICAgICAgICAgICAndGVzdHMvRXZlbnRMaXN0ZW5lclRlc3QuY3BwJywKICAgICAgICAg
ICAgICd0ZXN0cy9GYWtlV2ViUGx1Z2luLmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvRmFrZVdl
YlBsdWdpbi5oJywKICAgICAgICAgICAgICd0ZXN0cy9GYWtlV2ViR3JhcGhpY3NDb250ZXh0M0Qu
aCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJOb2RlLmgg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJOb2RlLmgKaW5kZXggYmNjZDU1NTg0
MDhmNTdmNzkzYjM4YzYwZTAxMjNjY2VlOTVkZDZjNS4uOGFiYzNmOGU5NjI2N2RiNzQ2MTkwN2Qy
ZTAxYzQ3YzFjOTA0YjNiYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJs
aWMvV2ViTm9kZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYk5vZGUu
aApAQCAtMTA3LDkgKzEwNywxMCBAQCBwdWJsaWM6CiAgICAgV0VCS0lUX0VYUE9SVCBib29sIGlz
Rm9jdXNhYmxlKCkgY29uc3Q7CiAgICAgV0VCS0lUX0VYUE9SVCBib29sIGlzQ29udGVudEVkaXRh
YmxlKCkgY29uc3Q7CiAgICAgV0VCS0lUX0VYUE9SVCBib29sIGlzRWxlbWVudE5vZGUoKSBjb25z
dDsKKyAgICAvLyBoYXNFdmVudExpc3RlbmVycyBvbmx5IHdvcmtzIHdpdGggYSBzbWFsbCBzZXQg
b2YgZXZlbnRUeXBlcy4KICAgICBXRUJLSVRfRVhQT1JUIGJvb2wgaGFzRXZlbnRMaXN0ZW5lcnMo
Y29uc3QgV2ViU3RyaW5nJiBldmVudFR5cGUpIGNvbnN0OworICAgIC8vIGFkZEV2ZW50TGlzdGVu
ZXIgb25seSB3b3JrcyB3aXRoIGEgc21hbGwgc2V0IG9mIGV2ZW50VHlwZXMuCiAgICAgV0VCS0lU
X0VYUE9SVCB2b2lkIGFkZEV2ZW50TGlzdGVuZXIoY29uc3QgV2ViU3RyaW5nJiBldmVudFR5cGUs
IFdlYkRPTUV2ZW50TGlzdGVuZXIqIGxpc3RlbmVyLCBib29sIHVzZUNhcHR1cmUpOwotICAgIFdF
QktJVF9FWFBPUlQgdm9pZCByZW1vdmVFdmVudExpc3RlbmVyKGNvbnN0IFdlYlN0cmluZyYgZXZl
bnRUeXBlLCBXZWJET01FdmVudExpc3RlbmVyKiBsaXN0ZW5lciwgYm9vbCB1c2VDYXB0dXJlKTsK
ICAgICBXRUJLSVRfRVhQT1JUIGJvb2wgZGlzcGF0Y2hFdmVudChjb25zdCBXZWJET01FdmVudCYp
OwogICAgIFdFQktJVF9FWFBPUlQgdm9pZCBzaW11bGF0ZUNsaWNrKCk7CiAgICAgV0VCS0lUX0VY
UE9SVCBXZWJOb2RlTGlzdCBnZXRFbGVtZW50c0J5VGFnTmFtZShjb25zdCBXZWJTdHJpbmcmKSBj
b25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYk5vZGUuY3Bw
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTm9kZS5jcHAKaW5kZXggOTg3MmRmMzFj
NmY0OGE5YTNlNmExM2ExYzJjY2U1ZTM0OTg1NTJhMC4uM2Y3YTdlYjM1NWZmZTRlZmFkOWJhODlj
NDA3MTc1OTgzMDMzMDcyNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
V2ViTm9kZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTm9kZS5jcHAK
QEAgLTE4MCwyNyArMTgwLDI4IEBAIGJvb2wgV2ViTm9kZTo6aXNFbGVtZW50Tm9kZSgpIGNvbnN0
CiAKIGJvb2wgV2ViTm9kZTo6aGFzRXZlbnRMaXN0ZW5lcnMoY29uc3QgV2ViU3RyaW5nJiBldmVu
dFR5cGUpIGNvbnN0CiB7CisgICAgLy8gRklYTUU6ICJwZXJtaXNzaW9ucmVxdWVzdCIgc2VlbXMg
bGlrZSBhbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWwgb2YgdGhlCisgICAgLy8gICAgICAgIHRoZSBi
cm93c2VyIHBsdWctaW4uIFBlcmhhcHMgdGhlIGJyb3dzZXIgcGx1Zy1pbiBzaG91bGQgaGF2ZQor
ICAgIC8vICAgICAgICBhIG1vcmUgc3BlY2lhbC1wdXJwb3NlIG1lY2hhbmlzbT8KKyAgICAvLyAg
ICAgICAgU2VlIGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWls
P2lkPTE4OTU2MQorCisgICAgLy8gUGxlYXNlIGRvIG5vdCBhZGQgbW9yZSBldmVudFR5cGVzIHRv
IHRoaXMgbGlzdCB3aXRob3V0IGFuIEFQSSByZXZpZXcuCisgICAgUkVMRUFTRV9BU1NFUlQoZXZl
bnRUeXBlID09ICJwZXJtaXNzaW9ucmVxdWVzdCIpOwogICAgIHJldHVybiBtX3ByaXZhdGUtPmhh
c0V2ZW50TGlzdGVuZXJzKGV2ZW50VHlwZSk7CiB9CiAKIHZvaWQgV2ViTm9kZTo6YWRkRXZlbnRM
aXN0ZW5lcihjb25zdCBXZWJTdHJpbmcmIGV2ZW50VHlwZSwgV2ViRE9NRXZlbnRMaXN0ZW5lciog
bGlzdGVuZXIsIGJvb2wgdXNlQ2FwdHVyZSkKIHsKLSAgICBFdmVudExpc3RlbmVyV3JhcHBlciog
bGlzdGVuZXJXcmFwcGVyID0KLSAgICAgICAgbGlzdGVuZXItPmNyZWF0ZUV2ZW50TGlzdGVuZXJX
cmFwcGVyKGV2ZW50VHlwZSwgdXNlQ2FwdHVyZSwgbV9wcml2YXRlLmdldCgpKTsKKyAgICAvLyBQ
bGVhc2UgZG8gbm90IGFkZCBtb3JlIGV2ZW50VHlwZXMgdG8gdGhpcyBsaXN0IHdpdGhvdXQgYW4g
QVBJIHJldmlldy4KKyAgICBSRUxFQVNFX0FTU0VSVChldmVudFR5cGUgPT0gIm1vdXNlZG93biIp
OworCisgICAgRXZlbnRMaXN0ZW5lcldyYXBwZXIqIGxpc3RlbmVyV3JhcHBlciA9IGxpc3RlbmVy
LT5jcmVhdGVFdmVudExpc3RlbmVyV3JhcHBlcihldmVudFR5cGUsIHVzZUNhcHR1cmUsIG1fcHJp
dmF0ZS5nZXQoKSk7CiAgICAgLy8gVGhlIGxpc3RlbmVyV3JhcHBlciBpcyBvbmx5IHJlZmVyZW5j
ZWQgYnkgdGhlIGFjdHVhbCBOb2RlLiAgT25jZSBpdCBnb2VzCiAgICAgLy8gYXdheSwgdGhlIHdy
YXBwZXIgbm90aWZpZXMgdGhlIFdlYkV2ZW50TGlzdGVuZXIgc28gaXQgY2FuIGNsZWFyIGl0cwog
ICAgIC8vIHBvaW50ZXIgdG8gaXQuCiAgICAgbV9wcml2YXRlLT5hZGRFdmVudExpc3RlbmVyKGV2
ZW50VHlwZSwgYWRvcHRSZWYobGlzdGVuZXJXcmFwcGVyKSwgdXNlQ2FwdHVyZSk7CiB9CiAKLXZv
aWQgV2ViTm9kZTo6cmVtb3ZlRXZlbnRMaXN0ZW5lcihjb25zdCBXZWJTdHJpbmcmIGV2ZW50VHlw
ZSwgV2ViRE9NRXZlbnRMaXN0ZW5lciogbGlzdGVuZXIsIGJvb2wgdXNlQ2FwdHVyZSkKLXsKLSAg
ICBFdmVudExpc3RlbmVyV3JhcHBlciogbGlzdGVuZXJXcmFwcGVyID0KLSAgICAgICAgbGlzdGVu
ZXItPmdldEV2ZW50TGlzdGVuZXJXcmFwcGVyKGV2ZW50VHlwZSwgdXNlQ2FwdHVyZSwgbV9wcml2
YXRlLmdldCgpKTsKLSAgICBtX3ByaXZhdGUtPnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnRUeXBl
LCBsaXN0ZW5lcldyYXBwZXIsIHVzZUNhcHR1cmUpOwotICAgIC8vIGxpc3RlbmVyV3JhcHBlciBp
cyBub3cgZGVsZXRlZC4KLX0KLQogYm9vbCBXZWJOb2RlOjpkaXNwYXRjaEV2ZW50KGNvbnN0IFdl
YkRPTUV2ZW50JiBldmVudCkKIHsKICAgICBpZiAoIWV2ZW50LmlzTnVsbCgpKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9FdmVudExpc3RlbmVyVGVzdC5jcHAgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0V2ZW50TGlzdGVuZXJUZXN0LmNwcApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjI5NTQwZjVmY2VhMjgyM2I0NDNiMWMzZTdiNWYzOWJi
NmQ4ODNhOS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0V2ZW50TGlzdGVuZXJUZXN0LmNwcAorKysgL2Rl
di9udWxsCkBAIC0xLDI1MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAq
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRo
ZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaW5jbHVkZSAi
RnJhbWVUZXN0SGVscGVycy5oIgotI2luY2x1ZGUgIlVSTFRlc3RIZWxwZXJzLmgiCi0jaW5jbHVk
ZSAiV2ViRE9NRXZlbnQuaCIKLSNpbmNsdWRlICJXZWJET01FdmVudExpc3RlbmVyLmgiCi0jaW5j
bHVkZSAiV2ViRE9NTXV0YXRpb25FdmVudC5oIgotI2luY2x1ZGUgIldlYkRvY3VtZW50LmgiCi0j
aW5jbHVkZSAiV2ViRWxlbWVudC5oIgotI2luY2x1ZGUgIldlYkZyYW1lLmgiCi0jaW5jbHVkZSAi
V2ViU2NyaXB0U291cmNlLmgiCi0jaW5jbHVkZSAiV2ViVmlldy5oIgotI2luY2x1ZGUgPGd0ZXN0
L2d0ZXN0Lmg+Ci0jaW5jbHVkZSA8cHVibGljL1BsYXRmb3JtLmg+Ci0jaW5jbHVkZSA8cHVibGlj
L1dlYlVuaXRUZXN0U3VwcG9ydC5oPgotCi11c2luZyBuYW1lc3BhY2UgV2ViS2l0OwotCi1uYW1l
c3BhY2UgewotCi1jbGFzcyBUZXN0V2ViRE9NRXZlbnRMaXN0ZW5lciA6IHB1YmxpYyBXZWJET01F
dmVudExpc3RlbmVyIHsKLXB1YmxpYzoKLSAgICBUZXN0V2ViRE9NRXZlbnRMaXN0ZW5lcigpIHsg
fQotICAgIHZpcnR1YWwgflRlc3RXZWJET01FdmVudExpc3RlbmVyKCkgeyB9Ci0KLSAgICB2aXJ0
dWFsIHZvaWQgaGFuZGxlRXZlbnQoY29uc3QgV2ViRE9NRXZlbnQmIGV2ZW50KSBPVkVSUklERQot
ICAgIHsKLSAgICAgIG1fZXZlbnRzLnB1c2hfYmFjayhldmVudCk7Ci0gICAgfQotCi0gICAgc2l6
ZV90IGV2ZW50Q291bnQoKSBjb25zdCB7IHJldHVybiBtX2V2ZW50cy5zaXplKCk7IH0KLQotICAg
IFdlYkRPTUV2ZW50IGV2ZW50QXQoaW50IGluZGV4KSBjb25zdCB7IHJldHVybiBtX2V2ZW50cy5h
dChpbmRleCk7IH0KLQotICAgIHZvaWQgY2xlYXJFdmVudHMoKSB7IG1fZXZlbnRzLmNsZWFyKCk7
IH0KLQotcHJpdmF0ZToKLSAgICBzdGQ6OnZlY3RvcjxXZWJET01FdmVudD4gbV9ldmVudHM7Ci19
OwotCi1jbGFzcyBXZWJET01FdmVudExpc3RlbmVyVGVzdCA6IHB1YmxpYyB0ZXN0aW5nOjpUZXN0
IHsKLXB1YmxpYzoKLSAgICBXZWJET01FdmVudExpc3RlbmVyVGVzdCgpCi0gICAgICAgIDogbV93
ZWJWaWV3KDApCi0gICAgewotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCBTZXRVcCgpIE9WRVJS
SURFCi0gICAgewotICAgICAgICBzdGQ6OnN0cmluZyBiYXNlVVJMKCJodHRwOi8vd3d3LmV4YW1w
bGUuY29tLyIpOwotICAgICAgICBzdGQ6OnN0cmluZyBmaWxlTmFtZSgibGlzdGVuZXIvbXV0YXRp
b25fZXZlbnRfbGlzdGVuZXIuaHRtbCIpOwotICAgICAgICBib29sIGV4ZWN1dGVTY3JpcHQgPSB0
cnVlOwotICAgICAgICBVUkxUZXN0SGVscGVyczo6cmVnaXN0ZXJNb2NrZWRVUkxGcm9tQmFzZVVS
TChXZWJTdHJpbmc6OmZyb21VVEY4KGJhc2VVUkwuY19zdHIoKSksIFdlYlN0cmluZzo6ZnJvbVVU
RjgoZmlsZU5hbWUuY19zdHIoKSkpOwotICAgICAgICBtX3dlYlZpZXcgPSBGcmFtZVRlc3RIZWxw
ZXJzOjpjcmVhdGVXZWJWaWV3QW5kTG9hZChiYXNlVVJMICsgZmlsZU5hbWUsIGV4ZWN1dGVTY3Jp
cHQpOwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCBUZWFyRG93bigpIE9WRVJSSURFCi0gICAg
ewotICAgICAgICBtX3dlYlZpZXctPmNsb3NlKCk7Ci0gICAgICAgIFBsYXRmb3JtOjpjdXJyZW50
KCktPnVuaXRUZXN0U3VwcG9ydCgpLT51bnJlZ2lzdGVyQWxsTW9ja2VkVVJMcygpOwotICAgIH0K
LQotICAgIFdlYkZyYW1lKiBtYWluRnJhbWUoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJu
IG1fd2ViVmlldy0+bWFpbkZyYW1lKCk7Ci0gICAgfQotCi0gICAgV2ViRG9jdW1lbnQgZG9jdW1l
bnQoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1haW5GcmFtZSgpLT5kb2N1bWVudCgp
OwotICAgIH0KLQotICAgIHZvaWQgZXhlY3V0ZVNjcmlwdChjb25zdCBjaGFyKiBjb2RlKQotICAg
IHsKLSAgICAgICAgbWFpbkZyYW1lKCktPmV4ZWN1dGVTY3JpcHQoV2ViU2NyaXB0U291cmNlKFdl
YlN0cmluZzo6ZnJvbVVURjgoY29kZSkpKTsKLSAgICB9Ci0KLQotICAgIHN0YXRpYyBXZWJTdHJp
bmcgR2V0Tm9kZUlEKGNvbnN0IFdlYk5vZGUmIG5vZGUpCi0gICAgewotICAgICAgICBpZiAobm9k
ZS5ub2RlVHlwZSgpICE9IFdlYk5vZGU6OkVsZW1lbnROb2RlKQotICAgICAgICAgICAgcmV0dXJu
IFdlYlN0cmluZygpOwotICAgICAgICBXZWJFbGVtZW50IGVsZW1lbnQgPSBub2RlLnRvQ29uc3Q8
V2ViRWxlbWVudD4oKTsKLSAgICAgICAgcmV0dXJuIGVsZW1lbnQuZ2V0QXR0cmlidXRlKCJpZCIp
OwotICAgIH0KLQotcHJvdGVjdGVkOgotICAgIFdlYlZpZXcqIG1fd2ViVmlldzsKLX07Ci0KLQot
Ly8gVGVzdHMgdGhhdCB0aGUgcmlnaHQgbXV0YXRpb24gZXZlbnRzIGFyZSBmaXJlZCB3aGVuIGEg
bm9kZSBpcyBhZGRlZC9yZW1vdmVkLgotLy8gTm90ZSB0aGF0IHRoZSBET01TdWJ0cmVlTW9kaWZp
ZWQgZXZlbnQgaXMgZmFpcmx5IHZhZ2UsIGl0IG9ubHkgdGVsbHMgeW91Ci0vLyBzb21ldGhpbmcg
Y2hhbmdlZCBmb3IgdGhlIHRhcmdldCBub2RlLgotVEVTVF9GKFdlYkRPTUV2ZW50TGlzdGVuZXJU
ZXN0LCBOb2RlQWRkZWRSZW1vdmVkTXV0YXRpb25FdmVudCkKLXsKLSAgICBUZXN0V2ViRE9NRXZl
bnRMaXN0ZW5lciBldmVudExpc3RlbmVyOwotICAgIGRvY3VtZW50KCkuYWRkRXZlbnRMaXN0ZW5l
cigiRE9NU3VidHJlZU1vZGlmaWVkIiwgJmV2ZW50TGlzdGVuZXIsIGZhbHNlKTsKLQotICAgIC8v
IFRlc3QgYWRkaW5nIGEgbm9kZS4KLSAgICBleGVjdXRlU2NyaXB0KCJhZGRFbGVtZW50KCduZXdO
b2RlJykiKTsKLSAgICBBU1NFUlRfRVEoMVUsIGV2ZW50TGlzdGVuZXIuZXZlbnRDb3VudCgpKTsK
LSAgICBXZWJET01FdmVudCBldmVudCA9IGV2ZW50TGlzdGVuZXIuZXZlbnRBdCgwKTsKLSAgICBB
U1NFUlRfVFJVRShldmVudC5pc011dGF0aW9uRXZlbnQoKSk7Ci0gICAgLy8gTm8gbmVlZCB0byBj
aGVjayBhbnkgb2YgdGhlIE11dGF0aW9uRXZlbnQsIFdlYktpdCBkb2VzIG5vdCBzZXQgYW55Lgot
ICAgIEVYUEVDVF9FUSgiRElWIiwgZXZlbnQudGFyZ2V0KCkubm9kZU5hbWUoKSk7Ci0gICAgRVhQ
RUNUX0VRKCJ0b3BEaXYiLCBHZXROb2RlSUQoZXZlbnQudGFyZ2V0KCkpKTsKLSAgICBldmVudExp
c3RlbmVyLmNsZWFyRXZlbnRzKCk7Ci0KLSAgICAvLyBUZXN0IHJlbW92aW5nIGEgbm9kZS4KLSAg
ICBleGVjdXRlU2NyaXB0KCJyZW1vdmVOb2RlKCdkaXYxJykiKTsKLSAgICBBU1NFUlRfRVEoMVUs
IGV2ZW50TGlzdGVuZXIuZXZlbnRDb3VudCgpKTsKLSAgICBldmVudCA9IGV2ZW50TGlzdGVuZXIu
ZXZlbnRBdCgwKTsKLSAgICBBU1NFUlRfVFJVRShldmVudC5pc011dGF0aW9uRXZlbnQoKSk7Ci0g
ICAgRVhQRUNUX0VRKCJESVYiLCBldmVudC50YXJnZXQoKS5ub2RlTmFtZSgpKTsKLSAgICBFWFBF
Q1RfRVEoInRvcERpdiIsIEdldE5vZGVJRChldmVudC50YXJnZXQoKSkpOwotfQotCi0vLyBUZXN0
cyB0aGUgcmlnaHQgbXV0YXRpb24gZXZlbnQgaXMgZmlyZWQgd2hlbiBhIHRleHQgbm9kZSBpcyBt
b2RpZmllZC4KLVRFU1RfRihXZWJET01FdmVudExpc3RlbmVyVGVzdCwgVGV4dE5vZGVNb2RpZmll
ZE11dGF0aW9uRXZlbnQpCi17Ci0gICAgVGVzdFdlYkRPTUV2ZW50TGlzdGVuZXIgZXZlbnRMaXN0
ZW5lcjsKLSAgICBkb2N1bWVudCgpLmFkZEV2ZW50TGlzdGVuZXIoIkRPTVN1YnRyZWVNb2RpZmll
ZCIsICZldmVudExpc3RlbmVyLCBmYWxzZSk7Ci0gICAgZXhlY3V0ZVNjcmlwdCgiY2hhbmdlVGV4
dCgnZGl2MicsICdIZWxsbycpIik7Ci0gICAgQVNTRVJUX0VRKDFVLCBldmVudExpc3RlbmVyLmV2
ZW50Q291bnQoKSk7Ci0gICAgV2ViRE9NRXZlbnQgZXZlbnQgPSBldmVudExpc3RlbmVyLmV2ZW50
QXQoMCk7Ci0gICAgQVNTRVJUX1RSVUUoZXZlbnQuaXNNdXRhdGlvbkV2ZW50KCkpOwotICAgIEFT
U0VSVF9FUShXZWJOb2RlOjpUZXh0Tm9kZSwgZXZlbnQudGFyZ2V0KCkubm9kZVR5cGUoKSk7Ci19
Ci0KLS8vIFRlc3RzIHRoZSByaWdodCBtdXRhdGlvbiBldmVudHMgYXJlIGZpcmVkIHdoZW4gYW4g
YXR0cmlidXRlIGlzIGFkZGVkL3JlbW92ZWQuCi1URVNUX0YoV2ViRE9NRXZlbnRMaXN0ZW5lclRl
c3QsIEF0dHJpYnV0ZU11dGF0aW9uRXZlbnQpCi17Ci0gICAgVGVzdFdlYkRPTUV2ZW50TGlzdGVu
ZXIgZXZlbnRMaXN0ZW5lcjsKLSAgICBkb2N1bWVudCgpLmFkZEV2ZW50TGlzdGVuZXIoIkRPTVN1
YnRyZWVNb2RpZmllZCIsICZldmVudExpc3RlbmVyLCBmYWxzZSk7Ci0gICAgZXhlY3V0ZVNjcmlw
dCgiZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2RpdjInKS5zZXRBdHRyaWJ1dGUoJ215QXR0cics
IgotICAgICAgICAgICAgICAgICAgIidzb21lIHZhbHVlJykiKTsKLSAgICBBU1NFUlRfRVEoMVUs
IGV2ZW50TGlzdGVuZXIuZXZlbnRDb3VudCgpKTsKLSAgICBXZWJET01FdmVudCBldmVudCA9IGV2
ZW50TGlzdGVuZXIuZXZlbnRBdCgwKTsKLSAgICBBU1NFUlRfVFJVRShldmVudC5pc011dGF0aW9u
RXZlbnQoKSk7Ci0gICAgRVhQRUNUX0VRKCJESVYiLCBldmVudC50YXJnZXQoKS5ub2RlTmFtZSgp
KTsKLSAgICBFWFBFQ1RfRVEoImRpdjIiLCBHZXROb2RlSUQoZXZlbnQudGFyZ2V0KCkpKTsKLSAg
ICBldmVudExpc3RlbmVyLmNsZWFyRXZlbnRzKCk7Ci0KLSAgICBleGVjdXRlU2NyaXB0KCJkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgnZGl2MicpLnJlbW92ZUF0dHJpYnV0ZSgnbXlBdHRyJykiKTsK
LSAgICBBU1NFUlRfRVEoMVUsIGV2ZW50TGlzdGVuZXIuZXZlbnRDb3VudCgpKTsKLSAgICBldmVu
dCA9IGV2ZW50TGlzdGVuZXIuZXZlbnRBdCgwKTsKLSAgICBBU1NFUlRfVFJVRShldmVudC5pc011
dGF0aW9uRXZlbnQoKSk7Ci0gICAgRVhQRUNUX0VRKCJESVYiLCBldmVudC50YXJnZXQoKS5ub2Rl
TmFtZSgpKTsKLSAgICBFWFBFQ1RfRVEoImRpdjIiLCBHZXROb2RlSUQoZXZlbnQudGFyZ2V0KCkp
KTsKLX0KLQotLy8gVGVzdHMgZGVzdHJveWluZyBXZWJET01FdmVudExpc3RlbmVyIGFuZCB0cmln
Z2VyaW5nIGV2ZW50cywgd2Ugc2hvdWxkbid0Ci0vLyBjcmFzaC4KLVRFU1RfRihXZWJET01FdmVu
dExpc3RlbmVyVGVzdCwgRmlyZUV2ZW50RGVsZXRlZExpc3RlbmVyKQotewotICAgIFRlc3RXZWJE
T01FdmVudExpc3RlbmVyKiBldmVudExpc3RlbmVyID0gbmV3IFRlc3RXZWJET01FdmVudExpc3Rl
bmVyKCk7Ci0gICAgZG9jdW1lbnQoKS5hZGRFdmVudExpc3RlbmVyKCJET01TdWJ0cmVlTW9kaWZp
ZWQiLCBldmVudExpc3RlbmVyLCBmYWxzZSk7Ci0gICAgZGVsZXRlIGV2ZW50TGlzdGVuZXI7Ci0g
ICAgZXhlY3V0ZVNjcmlwdCgiYWRkRWxlbWVudCgnbmV3Tm9kZScpIik7IC8vIFRoYXQgc2hvdWxk
IGZpcmUgYW4gZXZlbnQuCi19Ci0KLS8vIFRlc3RzIHJlZ2lzdGVyaW5nIHNldmVyYWwgZXZlbnRz
IG9uIHRoZSBzYW1lIFdlYkRPTUV2ZW50TGlzdGVuZXIgYW5kCi0vLyB0cmlnZ2VyaW5nIGV2ZW50
cy4KLVRFU1RfRihXZWJET01FdmVudExpc3RlbmVyVGVzdCwgU2FtZUxpc3RlbmVyTXVsdGlwbGVF
dmVudHMpCi17Ci0gICAgVGVzdFdlYkRPTUV2ZW50TGlzdGVuZXIgZXZlbnRMaXN0ZW5lcjsKLSAg
ICBjb25zdCBXZWJTdHJpbmcga0RPTVN1YnRyZWVNb2RpZmllZFR5cGUoIkRPTVN1YnRyZWVNb2Rp
ZmllZCIpOwotICAgIGNvbnN0IFdlYlN0cmluZyBrRE9NTm9kZVJlbW92ZWRUeXBlKCJET01Ob2Rl
UmVtb3ZlZCIpOwotICAgIGRvY3VtZW50KCkuYWRkRXZlbnRMaXN0ZW5lcihrRE9NU3VidHJlZU1v
ZGlmaWVkVHlwZSwgJmV2ZW50TGlzdGVuZXIsIGZhbHNlKTsKLSAgICBXZWJFbGVtZW50IGRpdjFF
bGVtID0gZG9jdW1lbnQoKS5nZXRFbGVtZW50QnlJZCgiZGl2MSIpOwotICAgIGRpdjFFbGVtLmFk
ZEV2ZW50TGlzdGVuZXIoa0RPTU5vZGVSZW1vdmVkVHlwZSwgJmV2ZW50TGlzdGVuZXIsIGZhbHNl
KTsKLQotICAgIC8vIFRyaWdnZXIgYSBET01TdWJ0cmVlTW9kaWZpZWQgZXZlbnQgYnkgYWRkaW5n
IGEgbm9kZS4KLSAgICBleGVjdXRlU2NyaXB0KCJhZGRFbGVtZW50KCduZXdOb2RlJykiKTsKLSAg
ICBBU1NFUlRfRVEoMVUsIGV2ZW50TGlzdGVuZXIuZXZlbnRDb3VudCgpKTsKLSAgICBXZWJET01F
dmVudCBldmVudCA9IGV2ZW50TGlzdGVuZXIuZXZlbnRBdCgwKTsKLSAgICBBU1NFUlRfVFJVRShl
dmVudC5pc011dGF0aW9uRXZlbnQoKSk7Ci0gICAgRVhQRUNUX0VRKCJESVYiLCBldmVudC50YXJn
ZXQoKS5ub2RlTmFtZSgpKTsKLSAgICBFWFBFQ1RfRVEoInRvcERpdiIsIEdldE5vZGVJRChldmVu
dC50YXJnZXQoKSkpOwotICAgIGV2ZW50TGlzdGVuZXIuY2xlYXJFdmVudHMoKTsKLQotICAgIC8v
IFRyaWdnZXIgZm9yIGJvdGggZXZlbnQgbGlzdGVuZXIgYnkgcmVtb3ZpbmcgdGhlIGRpdjEgbm9k
ZS4KLSAgICBleGVjdXRlU2NyaXB0KCJyZW1vdmVOb2RlKCdkaXYxJykiKTsKLSAgICBBU1NFUlRf
RVEoMlUsIGV2ZW50TGlzdGVuZXIuZXZlbnRDb3VudCgpKTsKLSAgICAvLyBOb3Qgc3VyZSBpZiB0
aGUgb3JkZXIgb2YgdGhlIGV2ZW50cyBpcyBpbXBvcnRhbnQuIEFzc3VtaW5nIG5vIHNwZWNpZmlj
Ci0gICAgLy8gb3JkZXIuCi0gICAgV2ViU3RyaW5nIHR5cGUxID0gZXZlbnRMaXN0ZW5lci5ldmVu
dEF0KDApLnR5cGUoKTsKLSAgICBXZWJTdHJpbmcgdHlwZTIgPSBldmVudExpc3RlbmVyLmV2ZW50
QXQoMSkudHlwZSgpOwotICAgIEVYUEVDVF9UUlVFKHR5cGUxID09IGtET01TdWJ0cmVlTW9kaWZp
ZWRUeXBlIHx8IHR5cGUxID09IGtET01Ob2RlUmVtb3ZlZFR5cGUpOwotICAgIEVYUEVDVF9UUlVF
KHR5cGUyID09IGtET01TdWJ0cmVlTW9kaWZpZWRUeXBlIHx8IHR5cGUyID09IGtET01Ob2RlUmVt
b3ZlZFR5cGUpOwotICAgIEVYUEVDVF9UUlVFKHR5cGUxICE9IHR5cGUyKTsKLX0KLQotLy8gVGVz
dHMgcmVtb3ZpbmcgZXZlbnQgbGlzdGVuZXJzLgotVEVTVF9GKFdlYkRPTUV2ZW50TGlzdGVuZXJU
ZXN0LCBSZW1vdmVFdmVudExpc3RlbmVyKQotewotICAgIFRlc3RXZWJET01FdmVudExpc3RlbmVy
IGV2ZW50TGlzdGVuZXI7Ci0gICAgY29uc3QgV2ViU3RyaW5nIGtET01TdWJ0cmVlTW9kaWZpZWRU
eXBlKCJET01TdWJ0cmVlTW9kaWZpZWQiKTsKLSAgICAvLyBBZGRpbmcgdHdpY2UgdGhlIHNhbWUg
bGlzdGVuZXIgZm9yIHRoZSBzYW1lIGV2ZW50LCBzaG91bGQgYmUgc3VwcG9ydGVkLgotICAgIGRv
Y3VtZW50KCkuYWRkRXZlbnRMaXN0ZW5lcihrRE9NU3VidHJlZU1vZGlmaWVkVHlwZSwgJmV2ZW50
TGlzdGVuZXIsIGZhbHNlKTsKLSAgICBkb2N1bWVudCgpLmFkZEV2ZW50TGlzdGVuZXIoa0RPTVN1
YnRyZWVNb2RpZmllZFR5cGUsICZldmVudExpc3RlbmVyLCBmYWxzZSk7Ci0KLSAgICAvLyBBZGQg
YSBub2RlLCB0aGF0IHNob3VsZCB0cmlnZ2VyIDIgZXZlbnRzLgotICAgIGV4ZWN1dGVTY3JpcHQo
ImFkZEVsZW1lbnQoJ25ld05vZGUnKSIpOwotICAgIEVYUEVDVF9FUSgyVSwgZXZlbnRMaXN0ZW5l
ci5ldmVudENvdW50KCkpOwotICAgIGV2ZW50TGlzdGVuZXIuY2xlYXJFdmVudHMoKTsKLQotICAg
IC8vIFJlbW92ZSBvbmUgbGlzdGVuZXIgYW5kIHRyaWdnZXIgYW4gZXZlbnQgYWdhaW4uCi0gICAg
ZG9jdW1lbnQoKS5yZW1vdmVFdmVudExpc3RlbmVyKAotICAgICAgICBrRE9NU3VidHJlZU1vZGlm
aWVkVHlwZSwgJmV2ZW50TGlzdGVuZXIsIGZhbHNlKTsKLSAgICBleGVjdXRlU2NyaXB0KCJhZGRF
bGVtZW50KCduZXdlck5vZGUnKSIpOwotICAgIEVYUEVDVF9FUSgxVSwgZXZlbnRMaXN0ZW5lci5l
dmVudENvdW50KCkpOwotICAgIGV2ZW50TGlzdGVuZXIuY2xlYXJFdmVudHMoKTsKLQotICAgIC8v
IFJlbW92ZSB0aGUgbGFzdCBsaXN0ZW5lciBhbmQgdHJpZ2dlciB5ZXQgYW5vdGhlciBldmVudC4K
LSAgICBkb2N1bWVudCgpLnJlbW92ZUV2ZW50TGlzdGVuZXIoCi0gICAgICAgIGtET01TdWJ0cmVl
TW9kaWZpZWRUeXBlLCAmZXZlbnRMaXN0ZW5lciwgZmFsc2UpOwotICAgIGV4ZWN1dGVTY3JpcHQo
ImFkZEVsZW1lbnQoJ25ld2VyZXJOb2RlJykiKTsKLSAgICBFWFBFQ1RfRVEoMFUsIGV2ZW50TGlz
dGVuZXIuZXZlbnRDb3VudCgpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UK
</data>

          </attachment>
      

    </bug>

</bugzilla>