<?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>29245</bug_id>
          
          <creation_ts>2009-09-14 09:21:27 -0700</creation_ts>
          <short_desc>elementFromPoint() and caretRangeFromPoint() work only in initial containing block</short_desc>
          <delta_ts>2009-09-15 11:40:56 -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>DOM</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</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>0</everconfirmed>
          <reporter name="Andrew Richards">randrew</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>eric</cc>
    
    <cc>sam</cc>
    
    <cc>xji</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>147067</commentid>
    <comment_count>0</comment_count>
    <who name="Andrew Richards">randrew</who>
    <bug_when>2009-09-14 09:21:27 -0700</bug_when>
    <thetext>Calling Document.elementFromPoint() and Document.caretRangeFromPoint() both will return null instead of a valid Range object when used on client coordinates that fall outside of the initial containing block. That is, any points which are not visible when the browser viewport is scrolled up and to the right all the way will yield null if you scroll the browser window and call either of the two functions on them.

Reproduce:
Create a page with enough content so that scrollbars are created. Scroll until some area not initially visible is now visible in the viewport. Call elementFromPoint or caretRangeFromPoint anywhere in this area.

Actual result:
null is returned.

Expected result:
return a valid Range object.

Revision 48354 on 10.5.7 (Intel)

You can see a demo of the problem here: http://emgio.com/caretrangefrompointbug/
Scroll the page down and you will the cursor chaser report which it receives null.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>147082</commentid>
    <comment_count>1</comment_count>
      <attachid>39549</attachid>
    <who name="Andrew Richards">randrew</who>
    <bug_when>2009-09-14 10:00:30 -0700</bug_when>
    <thetext>Created attachment 39549
Patch to use different bounds checking and extend tests

I haven&apos;t worked with WebKit before, but after reading a bit I believe the bounds checking in Document::caretRangeFromPoint() and elementFromPoint() is mistakenly using boundsRect() from a FrameView to find if the point is in the viewport. This was causing it to return null if you called it with a point that had to be scrolled to. I changed it to use visibleContentRect() instead, which seems to have fixed it.

I also extended the tests to include checking for this issue. There are now hit tests which require a page to be scrolled before their points are visible.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>147102</commentid>
    <comment_count>2</comment_count>
      <attachid>39549</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2009-09-14 10:31:25 -0700</bug_when>
    <thetext>Comment on attachment 39549
Patch to use different bounds checking and extend tests

Nice catch. r=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>147151</commentid>
    <comment_count>3</comment_count>
      <attachid>39549</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-09-14 13:11:00 -0700</bug_when>
    <thetext>Comment on attachment 39549
Patch to use different bounds checking and extend tests

Tabs in your ChangeLog make this impossible to land using the commit-queue.  Either you can post a new patch, or someone can manually commit this and fix the ChangeLogs in the process.

Thanks for the patch!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>147158</commentid>
    <comment_count>4</comment_count>
      <attachid>39571</attachid>
    <who name="Andrew Richards">randrew</who>
    <bug_when>2009-09-14 13:20:36 -0700</bug_when>
    <thetext>Created attachment 39571
Same, but hopefully removed tab chars from ChangeLogs

Don&apos;t know how that happened. Fixed now?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>147190</commentid>
    <comment_count>5</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-09-14 14:29:48 -0700</bug_when>
    <thetext>If you want your patch reviewed and landed, you&apos;ll need to mark it r=? and commit-queue=? :)  Bug comments tend to get ignored since there are thousands made every day and it&apos;s hard to stand out in the sea of noise. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>147194</commentid>
    <comment_count>6</comment_count>
      <attachid>39571</attachid>
    <who name="Andrew Richards">randrew</who>
    <bug_when>2009-09-14 14:53:13 -0700</bug_when>
    <thetext>Comment on attachment 39571
Same, but hopefully removed tab chars from ChangeLogs

Ah, gotcha. Thanks :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>147197</commentid>
    <comment_count>7</comment_count>
    <who name="Xiaomei Ji">xji</who>
    <bug_when>2009-09-14 14:53:54 -0700</bug_when>
    <thetext>*** Bug 29247 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>147311</commentid>
    <comment_count>8</comment_count>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2009-09-15 09:47:25 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; If you want your patch reviewed and landed, you&apos;ll need to mark it r=? and
&gt; commit-queue=? :)  Bug comments tend to get ignored since there are thousands
&gt; made every day and it&apos;s hard to stand out in the sea of noise. :)

Please stop stating that contributors need to set the commit-queue flag in order to get a patch landed.  That has never been our policy.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>147313</commentid>
    <comment_count>9</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-09-15 10:02:05 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (In reply to comment #5)
&gt; &gt; If you want your patch reviewed and landed, you&apos;ll need to mark it r=? and
&gt; &gt; commit-queue=? :)  Bug comments tend to get ignored since there are thousands
&gt; &gt; made every day and it&apos;s hard to stand out in the sea of noise. :)
&gt; 
&gt; Please stop stating that contributors need to set the commit-queue flag in
&gt; order to get a patch landed.  That has never been our policy.

Nor am I suggesting that it&apos;s policy.  But if they want me to land it, that is how I land patches.  It was simply a personal comment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>147348</commentid>
    <comment_count>10</comment_count>
      <attachid>39571</attachid>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2009-09-15 11:40:39 -0700</bug_when>
    <thetext>Comment on attachment 39571
Same, but hopefully removed tab chars from ChangeLogs

Sam reviewed this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>147349</commentid>
    <comment_count>11</comment_count>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2009-09-15 11:40:56 -0700</bug_when>
    <thetext>Landed in r48398.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>39549</attachid>
            <date>2009-09-14 10:00:30 -0700</date>
            <delta_ts>2009-09-14 13:20:36 -0700</delta_ts>
            <desc>Patch to use different bounds checking and extend tests</desc>
            <filename>hitBoundsPatch.txt</filename>
            <type>text/plain</type>
            <size>17392</size>
            <attacher name="Andrew Richards">randrew</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0ODM1NCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTYgQEAKKzIwMDktMDktMTQgIEFuZHJldyBSaWNoYXJkcyAgPHJhbmRyZXdAZ21h
aWwuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisJCURvY3Vt
ZW50LmVsZW1lbnRGcm9tUG9pbnQoKSBhbmQgRG9jdW1lbnQuY2FyZXRSYW5nZUZyb21Qb2ludCgp
IGVycm9uZW91c2x5IHJldHVybmluZyBudWxsIGF0IHBvaW50cyB2aXNpYmxlIG9ubHkgYWZ0ZXIg
c2Nyb2xsaW5nLgorCQlodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mjky
NDUKKworCQlVc2UgdmlzaWJsZUNvbnRlbnRSZWN0KCkgaW5zdGVhZCBvZiBib3VuZHNSZWN0KCkg
d2hlbiBjaGVja2luZyBoaXQgcG9pbnQgYm91bmRzIG9uIHZpZXdwb3J0LgorCQkKKyAgICAgICAg
KiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmVsZW1lbnRG
cm9tUG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmNhcmV0UmFuZ2VGcm9tUG9p
bnQpOgorCiAyMDA5LTA5LTE0ICBZYWVsIEFoYXJvbiAgPHlhZWwuYWhhcm9uQG5va2lhLmNvbT4K
IAogICAgICAgICBSZXZpZXdlZCBieSBUb3IgQXJuZSBWZXN0YsO4LgpJbmRleDogV2ViQ29yZS9k
b20vRG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAko
cmV2aXNpb24gNDgzNTIpCisrKyBXZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTk0MCw3ICs5NDAsNyBAQCBFbGVtZW50KiBEb2N1bWVudDo6ZWxlbWVudEZyb21Qb2lu
dChpbnQgCiAgICAgZmxvYXQgem9vbUZhY3RvciA9IGZyYW1lLT5wYWdlWm9vbUZhY3RvcigpOwog
ICAgIEludFBvaW50IHBvaW50ID0gcm91bmRlZEludFBvaW50KEZsb2F0UG9pbnQoeCAqIHpvb21G
YWN0b3IsIHkgKiB6b29tRmFjdG9yKSkgKyB2aWV3KCktPnNjcm9sbE9mZnNldCgpOwogCi0gICAg
aWYgKCFmcmFtZVZpZXctPmJvdW5kc1JlY3QoKS5jb250YWlucyhwb2ludCkpCisgICAgaWYgKCFm
cmFtZVZpZXctPnZpc2libGVDb250ZW50UmVjdCgpLmNvbnRhaW5zKHBvaW50KSkKICAgICAgICAg
cmV0dXJuIDA7CiAKICAgICBIaXRUZXN0UmVxdWVzdCByZXF1ZXN0KEhpdFRlc3RSZXF1ZXN0OjpS
ZWFkT25seSB8IEhpdFRlc3RSZXF1ZXN0OjpBY3RpdmUpOwpAQCAtOTcwLDcgKzk3MCw3IEBAIFBh
c3NSZWZQdHI8UmFuZ2U+IERvY3VtZW50OjpjYXJldFJhbmdlRnIKICAgICBmbG9hdCB6b29tRmFj
dG9yID0gZnJhbWUtPnBhZ2Vab29tRmFjdG9yKCk7CiAgICAgSW50UG9pbnQgcG9pbnQgPSByb3Vu
ZGVkSW50UG9pbnQoRmxvYXRQb2ludCh4ICogem9vbUZhY3RvciwgeSAqIHpvb21GYWN0b3IpKSAr
IHZpZXcoKS0+c2Nyb2xsT2Zmc2V0KCk7CiAKLSAgICBpZiAoIWZyYW1lVmlldy0+Ym91bmRzUmVj
dCgpLmNvbnRhaW5zKHBvaW50KSkKKyAgICBpZiAoIWZyYW1lVmlldy0+dmlzaWJsZUNvbnRlbnRS
ZWN0KCkuY29udGFpbnMocG9pbnQpKQogICAgICAgICByZXR1cm4gMDsKIAogICAgIEhpdFRlc3RS
ZXF1ZXN0IHJlcXVlc3QoSGl0VGVzdFJlcXVlc3Q6OlJlYWRPbmx5IHwgSGl0VGVzdFJlcXVlc3Q6
OkFjdGl2ZSk7CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA0ODM1NCkKKysrIExheW91dFRlc3RzL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3IEBACisyMDA5LTA5LTE0ICBBbmRyZXcg
UmljaGFyZHMgIDxyYW5kcmV3QGdtYWlsLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBEb2N1bWVudC5lbGVtZW50RnJvbVBvaW50KCkgYW5kIERv
Y3VtZW50LmNhcmV0UmFuZ2VGcm9tUG9pbnQoKSByZXR1cm5pbmcgbnVsbCBhdCBwb2ludHMgdmlz
aWJsZSBvbmx5IGFmdGVyIHNjcm9sbGluZy4KKwkJaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTI5MjQ1CisJCQorCQlFeHRlbmQgdGVzdHMgdG8gaW5jbHVkZSBoaXRzIGlu
IGFyZWFzIHRoYXQgYXJlIG5vdCBpbiB0aGUgaW5pdGlhbCBjb250YWluaW5nIGJsb2NrIG9mIHRo
ZSBwYWdlLgorCisgICAgICAgICogZmFzdC9kb20vRG9jdW1lbnQvQ2FyZXRSYW5nZUZyb21Qb2lu
dC9oaXR0ZXN0LXJlbGF0aXZlLXRvLXZpZXdwb3J0LWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBm
YXN0L2RvbS9Eb2N1bWVudC9DYXJldFJhbmdlRnJvbVBvaW50L2hpdHRlc3QtcmVsYXRpdmUtdG8t
dmlld3BvcnQuaHRtbDoKKyAgICAgICAgKiBmYXN0L2RvbS9lbGVtZW50RnJvbVBvaW50LXJlbGF0
aXZlLXRvLXZpZXdwb3J0LWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBmYXN0L2RvbS9lbGVtZW50
RnJvbVBvaW50LXJlbGF0aXZlLXRvLXZpZXdwb3J0Lmh0bWw6CisKIDIwMDktMDktMTIgIE9saXZl
ciBIdW50ICA8b2xpdmVyQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBNYWNpZWog
U3RhY2hvd2lhay4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZG9tL2VsZW1lbnRGcm9tUG9pbnQt
cmVsYXRpdmUtdG8tdmlld3BvcnQtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL2Zhc3QvZG9tL2VsZW1lbnRGcm9tUG9pbnQtcmVsYXRpdmUtdG8tdmlld3BvcnQtZXhwZWN0
ZWQudHh0CShyZXZpc2lvbiA0ODM1MikKKysrIExheW91dFRlc3RzL2Zhc3QvZG9tL2VsZW1lbnRG
cm9tUG9pbnQtcmVsYXRpdmUtdG8tdmlld3BvcnQtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkp
CkBAIC0zLDEwICszLDE0IEBAIFRoaXMgdGVzdCBkb2N1bWVudC5lbGVtZW50RnJvbVBvaW50IGlz
IGUKIE9uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMs
IGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KIAogCi1QQVNTIHVuc2Nyb2xsZWRCb3ggaXMg
JzAnCi1QQVNTIHNjcm9sbGVkRG93bkJveCBpcyAnMTUnCi1QQVNTIHNjcm9sbGVkUmlnaHRCb3gg
aXMgJzMnCi1QQVNTIHNjcm9sbGVkRG93bkFuZFJpZ2h0Qm94IGlzICcxOCcKK1BBU1MgdW5zY3Jv
bGxlZEJveEluaXRpYWwgaXMgJzAnCitQQVNTIHNjcm9sbGVkRG93bkJveEluaXRpYWwgaXMgJzE1
JworUEFTUyBzY3JvbGxlZFJpZ2h0Qm94SW5pdGlhbCBpcyAnMycKK1BBU1Mgc2Nyb2xsZWREb3du
QW5kUmlnaHRCb3hJbml0aWFsIGlzICcxOCcKK1BBU1MgdW5zY3JvbGxlZEJveE9mZnNjcmVlbiBp
cyAnMCcKK1BBU1Mgc2Nyb2xsZWREb3duQm94T2Zmc2NyZWVuIGlzICcxNScKK1BBU1Mgc2Nyb2xs
ZWRSaWdodEJveE9mZnNjcmVlbiBpcyAnMycKK1BBU1Mgc2Nyb2xsZWREb3duQW5kUmlnaHRCb3hP
ZmZzY3JlZW4gaXMgJzE4JwogUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQogCiBURVNU
IENPTVBMRVRFCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2RvbS9lbGVtZW50RnJvbVBvaW50LXJl
bGF0aXZlLXRvLXZpZXdwb3J0Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9k
b20vZWxlbWVudEZyb21Qb2ludC1yZWxhdGl2ZS10by12aWV3cG9ydC5odG1sCShyZXZpc2lvbiA0
ODM1MikKKysrIExheW91dFRlc3RzL2Zhc3QvZG9tL2VsZW1lbnRGcm9tUG9pbnQtcmVsYXRpdmUt
dG8tdmlld3BvcnQuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMSw4ICsxLDkgQEAKIDxsaW5rIHJl
bD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4K
IDxzY3JpcHQgc3JjPSIuLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0Pgog
PHN0eWxlPgotICAgICN0ZXN0IHsKKyAgICAudGVzdCB7CiAgICAgICAgIHdpZHRoOiAxMDBweDsK
KyAgICAgICAgaGVpZ2h0OiAxMDBweDsKICAgICAgICAgb3V0bGluZTogMXB4IHNvbGlkIGJsYWNr
OwogICAgIH0KICAgICAudGVzdEl0ZW0gewpAQCAtMTIsMTkgKzEzLDIxIEBACiAgICAgICAgIGhl
aWdodDogMjBweDsKICAgICAgICAgb3V0bGluZTogMXB4IHNvbGlkIHJlZDsKICAgICB9Ci0gICAg
I3B1c2hlciB7CisgICAgLnB1c2hlciB7CiAgICAgICAgIHdpZHRoOiAxMDAwcHg7CiAgICAgICAg
IGhlaWdodDogMTAwMHB4OwogICAgICAgICBvdXRsaW5lOiAxcHggc29saWQgYmxhY2s7CiAgICAg
fQogPC9zdHlsZT4KLTxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgotPGRpdiBpZD0iY29uc29sZSI+
PC9kaXY+CiA8ZGl2IGlkPSJ0ZXN0QXJlYSI+CiAgICAgPGJyPgotICAgIDxkaXYgaWQ9InRlc3Qi
PjwvZGl2PgotICAgIDxkaXYgaWQ9InB1c2hlciI+VGhpcyBib3ggaXMgaGVyZSB0byBjcmVhdGUg
c2Nyb2xsYmFycy48L2Rpdj4KKyAgICA8ZGl2IGlkPSJ0ZXN0LWluaXRpYWwiIGNsYXNzPSJ0ZXN0
Ij48L2Rpdj4KKyAgICA8ZGl2IGNsYXNzPSJwdXNoZXIiPlRoaXMgYm94IGlzIGhlcmUgdG8gY3Jl
YXRlIHNjcm9sbGJhcnMuPC9kaXY+CisgICAgPGRpdiBpZD0idGVzdC1vZmZzY3JlZW4iIGNsYXNz
PSJ0ZXN0Ij48L2Rpdj4KKyAgICA8ZGl2IGNsYXNzPSJwdXNoZXIiPlRoaXMgYm94IGlzIGhlcmUg
dG8gY3JlYXRlIGV2ZW4gbW9yZSBzY3JvbGxiYXJzITwvZGl2PgogPC9kaXY+Cis8cCBpZD0iZGVz
Y3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgogPHNjcmlwdD4KICAgICB3
aW5kb3cub25jbGljayA9IGZ1bmN0aW9uKGUpCiAgICAgewpAQCAtMzQsNDIgKzM3LDU5IEBACiAg
ICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKICAgICAgICAgbGF5b3V0VGVzdENv
bnRyb2xsZXIuZHVtcEFzVGV4dCgpOwogCi0gICAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5nZXRF
bGVtZW50QnlJZCgndGVzdCcpOwotICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMjU7ICsraSkgewot
ICAgICAgICB2YXIgaXRlbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwotICAgICAg
ICBpdGVtLmNsYXNzTmFtZSA9ICJ0ZXN0SXRlbSI7Ci0gICAgICAgIGl0ZW0udGV4dENvbnRlbnQg
PSBTdHJpbmcoaSk7Ci0gICAgICAgIGVsZW1lbnQuYXBwZW5kQ2hpbGQoaXRlbSk7Ci0gICAgfQot
CiAgICAgZGVzY3JpcHRpb24oJ1RoaXMgdGVzdCBkb2N1bWVudC5lbGVtZW50RnJvbVBvaW50IGlz
IGV2YWx1YXRlZCBpbiB3aXRoIHJlc3BlY3QgdG8gdGhlIHZpZXdwb3J0LCBub3QgdGhlIGRvY3Vt
ZW50LicpOwogCi0gICAgdmFyIHVuU2Nyb2xsZWRCb3VuZGluZ0JveCA9IGVsZW1lbnQuZ2V0Qm91
bmRpbmdDbGllbnRSZWN0KCk7Ci0gICAgdmFyIHRlc3RYID0gdW5TY3JvbGxlZEJvdW5kaW5nQm94
LmxlZnQgKyAxMDsKLSAgICB2YXIgdGVzdFkgPSB1blNjcm9sbGVkQm91bmRpbmdCb3gudG9wICsg
MTA7Ci0KLSAgICAvLyBHZXQgaW5pdGlhbCBib3guCi0gICAgdmFyIHVuc2Nyb2xsZWRCb3ggPSBk
b2N1bWVudC5lbGVtZW50RnJvbVBvaW50KHRlc3RYLCB0ZXN0WSkudGV4dENvbnRlbnQ7Ci0KLSAg
ICAvLyBUZXN0IHNjcm9sbGluZyBkb3duCi0gICAgd2luZG93LnNjcm9sbFRvKDAsIDUwKTsKLSAg
ICB2YXIgc2Nyb2xsZWREb3duQm94ID0gZG9jdW1lbnQuZWxlbWVudEZyb21Qb2ludCh0ZXN0WCwg
dGVzdFkpLnRleHRDb250ZW50OwotCi0gICAgLy8gVGVzdCBzY3JvbGxpbmcgcmlnaHQKLSAgICB3
aW5kb3cuc2Nyb2xsVG8oNTAsIDApOwotICAgIHZhciBzY3JvbGxlZFJpZ2h0Qm94ID0gZG9jdW1l
bnQuZWxlbWVudEZyb21Qb2ludCh0ZXN0WCwgdGVzdFkpLnRleHRDb250ZW50OwotCi0gICAgLy8g
VGVzdCBzY3JvbGxpbmcgZG93biBhbmQgcmlnaHQKLSAgICB3aW5kb3cuc2Nyb2xsVG8oNTAsIDUw
KTsKLSAgICB2YXIgc2Nyb2xsZWREb3duQW5kUmlnaHRCb3ggPSBkb2N1bWVudC5lbGVtZW50RnJv
bVBvaW50KHRlc3RYLCB0ZXN0WSkudGV4dENvbnRlbnQ7Ci0KLSAgICAvLyBSZXNldAotICAgIHdp
bmRvdy5zY3JvbGxUbygwLCAwKTsKLSAgICAKLSAgICBzaG91bGRCZSgidW5zY3JvbGxlZEJveCIs
ICInMCciKTsKLSAgICBzaG91bGRCZSgic2Nyb2xsZWREb3duQm94IiwgIicxNSciKTsKLSAgICBz
aG91bGRCZSgic2Nyb2xsZWRSaWdodEJveCIsICInMyciKTsKLSAgICBzaG91bGRCZSgic2Nyb2xs
ZWREb3duQW5kUmlnaHRCb3giLCAiJzE4JyIpOworICAgIGZ1bmN0aW9uIHRlc3RFbGVtZW50KGVs
ZW1lbnQsIGxhYmVsLCBvZmZzZXRYLCBvZmZzZXRZKSB7CisgICAgICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgMjU7ICsraSkgeworICAgICAgICAgICAgdmFyIGl0ZW0gPSBkb2N1bWVudC5jcmVhdGVF
bGVtZW50KCJkaXYiKTsKKyAgICAgICAgICAgIGl0ZW0uY2xhc3NOYW1lID0gInRlc3RJdGVtIjsK
KyAgICAgICAgICAgIGl0ZW0udGV4dENvbnRlbnQgPSBTdHJpbmcoaSk7CisgICAgICAgICAgICBl
bGVtZW50LmFwcGVuZENoaWxkKGl0ZW0pOworICAgICAgICB9CisgICAgICAgIHZhciB0ZXN0WCA9
IDEwOworICAgICAgICB2YXIgdGVzdFkgPSAxMDsKKworICAgICAgICB2YXIgdW5zY3JvbGxlZEJv
eCA9ICJ1bnNjcm9sbGVkQm94IiArIGxhYmVsLAorICAgICAgICAgICAgc2Nyb2xsZWREb3duQm94
ID0gInNjcm9sbGVkRG93bkJveCIgKyBsYWJlbCwKKyAgICAgICAgICAgIHNjcm9sbGVkUmlnaHRC
b3ggPSAic2Nyb2xsZWRSaWdodEJveCIgKyBsYWJlbCwKKyAgICAgICAgICAgIHNjcm9sbGVkRG93
bkFuZFJpZ2h0Qm94ID0gInNjcm9sbGVkRG93bkFuZFJpZ2h0Qm94IiArIGxhYmVsOworCisgICAg
ICAgIGZ1bmN0aW9uIHJlbGF0aXZlU2Nyb2xsKHgsIHkpIHsKKyAgICAgICAgICAgIHdpbmRvdy5z
Y3JvbGxUbyhvZmZzZXRYICsgeCwgb2Zmc2V0WSArIHkpOworICAgICAgICB9CisKKyAgICAgICAg
ZnVuY3Rpb24gZ2V0RnJvbVBvaW50KHgsIHkpIHsKKyAgICAgICAgICAgIHJlbGF0aXZlU2Nyb2xs
KHgsIHkpOworICAgICAgICAgICAgdmFyIGhpdEVsZW1lbnQgPSBkb2N1bWVudC5lbGVtZW50RnJv
bVBvaW50KHRlc3RYLCB0ZXN0WSk7CisgICAgICAgICAgICAvLyBzaG91bGRuJ3QgcmV0dXJuIG51
bGwgcmFuZ2Ugb24gYW55IG9mIHRoZXNlIHRlc3RzCisgICAgICAgICAgICBpZiAoaGl0RWxlbWVu
dCA9PT0gbnVsbCkKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICByZXR1cm4gaGl0RWxlbWVudC50ZXh0Q29udGVudDsKKyAgICAg
ICAgfQorICAgICAgICAvLyBHZXQgaW5pdGlhbCBib3guCisgICAgICAgIHdpbmRvd1t1bnNjcm9s
bGVkQm94XSA9IGdldEZyb21Qb2ludCgwLCAwKTsKKworICAgICAgICAvLyBUZXN0IHNjcm9sbGlu
ZyBkb3duCisgICAgICAgIHdpbmRvd1tzY3JvbGxlZERvd25Cb3hdID0gZ2V0RnJvbVBvaW50KDAs
IDUwKTsKKworICAgICAgICAvLyBUZXN0IHNjcm9sbGluZyByaWdodAorICAgICAgICB3aW5kb3db
c2Nyb2xsZWRSaWdodEJveF0gPSBnZXRGcm9tUG9pbnQoNTAsIDApOworCisgICAgICAgIC8vIFRl
c3Qgc2Nyb2xsaW5nIGRvd24gYW5kIHJpZ2h0CisgICAgICAgIHdpbmRvd1tzY3JvbGxlZERvd25B
bmRSaWdodEJveF0gPSBnZXRGcm9tUG9pbnQoNTAsIDUwKTsKKworICAgICAgICBzaG91bGRCZSh1
bnNjcm9sbGVkQm94LCAiJzAnIik7CisgICAgICAgIHNob3VsZEJlKHNjcm9sbGVkRG93bkJveCwg
IicxNSciKTsKKyAgICAgICAgc2hvdWxkQmUoc2Nyb2xsZWRSaWdodEJveCwgIiczJyIpOworICAg
ICAgICBzaG91bGRCZShzY3JvbGxlZERvd25BbmRSaWdodEJveCwgIicxOCciKTsKKyAgICB9CisK
KyAgICB2YXIgZWxlbWVudEluaXRpYWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdC1p
bml0aWFsJyk7CisgICAgdmFyIGVsZW1lbnRPZmZzY3JlZW4gPSBkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgndGVzdC1vZmZzY3JlZW4nKTsKKyAgICB2YXIgb2Zmc2V0ID0gZWxlbWVudEluaXRpYWwu
Z2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CisgICAgdGVzdEVsZW1lbnQoZWxlbWVudEluaXRpYWws
ICJJbml0aWFsIiwgb2Zmc2V0LmxlZnQsIG9mZnNldC50b3ApOworICAgIHRlc3RFbGVtZW50KGVs
ZW1lbnRPZmZzY3JlZW4sICJPZmZzY3JlZW4iLCBvZmZzZXQubGVmdCwgb2Zmc2V0LnRvcCArIDEx
MDApOwogICAgIAogICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKICAgICAg
ICAgdmFyIGFyZWEgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdEFyZWEnKTsKSW5kZXg6
IExheW91dFRlc3RzL2Zhc3QvZG9tL0RvY3VtZW50L0NhcmV0UmFuZ2VGcm9tUG9pbnQvaGl0dGVz
dC1yZWxhdGl2ZS10by12aWV3cG9ydC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvZmFzdC9kb20vRG9jdW1lbnQvQ2FyZXRSYW5nZUZyb21Qb2ludC9oaXR0ZXN0LXJlbGF0
aXZlLXRvLXZpZXdwb3J0LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gNDgzNTIpCisrKyBMYXlvdXRU
ZXN0cy9mYXN0L2RvbS9Eb2N1bWVudC9DYXJldFJhbmdlRnJvbVBvaW50L2hpdHRlc3QtcmVsYXRp
dmUtdG8tdmlld3BvcnQtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xLDE0ICsxLDI3
IEBACi1UaGlzIGJveCBpcyBoZXJlIHRvIGNyZWF0ZSBzY3JvbGxiYXJzLgotVGVzdGluZyB3aXRo
IG5vIHNjcm9sbAotUEFTUzogcmFuZ2Uuc3RhcnRDb250YWluZXIgPT0gZWxlbWVudC5maXJzdENo
aWxkLgotUEFTUzogcmFuZ2Uuc3RhcnRPZmZzZXQgPT0gMC4KLVRlc3Qgc2Nyb2xsaW5nIGRvd24K
LVBBU1M6IHJhbmdlLnN0YXJ0Q29udGFpbmVyID09IGVsZW1lbnQuZmlyc3RDaGlsZC4KLVBBU1M6
IHJhbmdlLnN0YXJ0T2Zmc2V0ID09IDEyLgotVGVzdCBzY3JvbGxpbmcgcmlnaHQKLVBBU1M6IHJh
bmdlLnN0YXJ0Q29udGFpbmVyID09IGVsZW1lbnQuZmlyc3RDaGlsZC4KLVBBU1M6IHJhbmdlLnN0
YXJ0T2Zmc2V0ID09IDIuCi1UZXN0IHNjcm9sbGluZyBkb3duIGFuZCByaWdodAotUEFTUzogcmFu
Z2Uuc3RhcnRDb250YWluZXIgPT0gZWxlbWVudC5maXJzdENoaWxkLgotUEFTUzogcmFuZ2Uuc3Rh
cnRPZmZzZXQgPT0gMTQuCitUaGlzIGNoZWNrcyBmb3IgcHJvcGVyIGJlaGF2aW9yIG9mIGNhcmV0
UmFuZ2VGcm9tUG9pbnQgYmVmb3JlIGFuZCBhZnRlciBzY3JvbGxpbmcuCisKK09uIHN1Y2Nlc3Ms
IHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJU
RVNUIENPTVBMRVRFIi4KKworCitQQVNTIFJhbmdlLnN0YXJ0Q29udGFpbmVyIGNoZWNrIChnb3Qg
W29iamVjdCBUZXh0XSwgZXhwZWN0ZWQgW29iamVjdCBUZXh0XSkKK1BBU1MgUmFuZ2Uuc3RhcnRP
ZmZzZXQgY2hlY2sgKGdvdCAwLCBleHBlY3RlZCAwKQorUEFTUyBSYW5nZS5zdGFydENvbnRhaW5l
ciBjaGVjayAoZ290IFtvYmplY3QgVGV4dF0sIGV4cGVjdGVkIFtvYmplY3QgVGV4dF0pCitQQVNT
IFJhbmdlLnN0YXJ0T2Zmc2V0IGNoZWNrIChnb3QgMTIsIGV4cGVjdGVkIDEyKQorUEFTUyBSYW5n
ZS5zdGFydENvbnRhaW5lciBjaGVjayAoZ290IFtvYmplY3QgVGV4dF0sIGV4cGVjdGVkIFtvYmpl
Y3QgVGV4dF0pCitQQVNTIFJhbmdlLnN0YXJ0T2Zmc2V0IGNoZWNrIChnb3QgMiwgZXhwZWN0ZWQg
MikKK1BBU1MgUmFuZ2Uuc3RhcnRDb250YWluZXIgY2hlY2sgKGdvdCBbb2JqZWN0IFRleHRdLCBl
eHBlY3RlZCBbb2JqZWN0IFRleHRdKQorUEFTUyBSYW5nZS5zdGFydE9mZnNldCBjaGVjayAoZ290
IDE0LCBleHBlY3RlZCAxNCkKKyAKK1BBU1MgUmFuZ2Uuc3RhcnRDb250YWluZXIgY2hlY2sgKGdv
dCBbb2JqZWN0IFRleHRdLCBleHBlY3RlZCBbb2JqZWN0IFRleHRdKQorUEFTUyBSYW5nZS5zdGFy
dE9mZnNldCBjaGVjayAoZ290IDAsIGV4cGVjdGVkIDApCitQQVNTIFJhbmdlLnN0YXJ0Q29udGFp
bmVyIGNoZWNrIChnb3QgW29iamVjdCBUZXh0XSwgZXhwZWN0ZWQgW29iamVjdCBUZXh0XSkKK1BB
U1MgUmFuZ2Uuc3RhcnRPZmZzZXQgY2hlY2sgKGdvdCAxMiwgZXhwZWN0ZWQgMTIpCitQQVNTIFJh
bmdlLnN0YXJ0Q29udGFpbmVyIGNoZWNrIChnb3QgW29iamVjdCBUZXh0XSwgZXhwZWN0ZWQgW29i
amVjdCBUZXh0XSkKK1BBU1MgUmFuZ2Uuc3RhcnRPZmZzZXQgY2hlY2sgKGdvdCAyLCBleHBlY3Rl
ZCAyKQorUEFTUyBSYW5nZS5zdGFydENvbnRhaW5lciBjaGVjayAoZ290IFtvYmplY3QgVGV4dF0s
IGV4cGVjdGVkIFtvYmplY3QgVGV4dF0pCitQQVNTIFJhbmdlLnN0YXJ0T2Zmc2V0IGNoZWNrIChn
b3QgMTQsIGV4cGVjdGVkIDE0KQorIAorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQor
CitURVNUIENPTVBMRVRFCiAKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZG9tL0RvY3VtZW50L0Nh
cmV0UmFuZ2VGcm9tUG9pbnQvaGl0dGVzdC1yZWxhdGl2ZS10by12aWV3cG9ydC5odG1sCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZG9tL0RvY3VtZW50L0NhcmV0UmFuZ2VGcm9tUG9p
bnQvaGl0dGVzdC1yZWxhdGl2ZS10by12aWV3cG9ydC5odG1sCShyZXZpc2lvbiA0ODM1MikKKysr
IExheW91dFRlc3RzL2Zhc3QvZG9tL0RvY3VtZW50L0NhcmV0UmFuZ2VGcm9tUG9pbnQvaGl0dGVz
dC1yZWxhdGl2ZS10by12aWV3cG9ydC5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0xLDg3ICsxLDkz
IEBACi08aHRtbD4KLTxoZWFkPgotICAgIDxzdHlsZT4KLSAgICAgICAgI3Rlc3QgewotICAgICAg
ICAgICAgd2lkdGg6IDEwMHB4OwotICAgICAgICAgICAgZm9udC1mYW1pbHk6ICJBaGVtIjsKLSAg
ICAgICAgfQotICAgICAgICAjcHVzaGVyIHsKLSAgICAgICAgICAgIHdpZHRoOiAxMDAwcHg7Ci0g
ICAgICAgICAgICBoZWlnaHQ6IDEwMDBweDsKLSAgICAgICAgICAgIG91dGxpbmU6IDFweCBzb2xp
ZCBibGFjazsKLSAgICAgICAgfQotICAgIDwvc3R5bGU+Ci0gICAgPHNjcmlwdD4KLSAgICAgICAg
aWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKLSAgICAgICAgICAgIGxheW91dFRlc3RD
b250cm9sbGVyLmR1bXBBc1RleHQoKTsKLQotICAgICAgICB2YXIgX2xvZyA9ICIiOwotICAgICAg
ICBmdW5jdGlvbiBsb2cobXNnKQotICAgICAgICB7Ci0gICAgICAgICAgICBfbG9nICs9IG1zZyAr
ICJcbiI7Ci0gICAgICAgIH0KLQotICAgICAgICBmdW5jdGlvbiBzd2FwSW5Mb2coKQotICAgICAg
ICB7Ci0gICAgICAgICAgICB2YXIgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0
ZXN0Jyk7Ci0gICAgICAgICAgICB2YXIgcGFyZW50ID0gZWxlbWVudC5wYXJlbnROb2RlOwotICAg
ICAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKLSAgICAgICAgICAgICAg
ICBwYXJlbnQucmVtb3ZlQ2hpbGQoZWxlbWVudCk7Ci0gICAgICAgICAgICB2YXIgY29uc29sZSA9
IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInByZSIpOwotICAgICAgICAgICAgY29uc29sZS50ZXh0
Q29udGVudCA9IF9sb2c7Ci0gICAgICAgICAgICBwYXJlbnQuYXBwZW5kQ2hpbGQoY29uc29sZSk7
Ci0gICAgICAgIH0KLQotICAgICAgICB2YXIgZWxlbWVudDsKLQotICAgICAgICBmdW5jdGlvbiB0
ZXN0KHBvcywgX19leHBlY3RlZENvbnRhaW5lciwgX19leHBlY3RlZE9mZnNldCkKLSAgICAgICAg
ewotICAgICAgICAgICAgdmFyIGV4cGVjdGVkQ29udGFpbmVyID0gZXZhbChfX2V4cGVjdGVkQ29u
dGFpbmVyKTsKLSAgICAgICAgICAgIHZhciBleHBlY3RlZE9mZnNldCA9IGV2YWwoX19leHBlY3Rl
ZE9mZnNldCk7Ci0KLSAgICAgICAgICAgIHZhciByYW5nZSA9IGRvY3VtZW50LmNhcmV0UmFuZ2VG
cm9tUG9pbnQocG9zLngsIHBvcy55KTsKLQotICAgICAgICAgICAgaWYgKHJhbmdlLnN0YXJ0Q29u
dGFpbmVyID09IGV4cGVjdGVkQ29udGFpbmVyKSB7Ci0gICAgICAgICAgICAgICAgbG9nKCJQQVNT
OiByYW5nZS5zdGFydENvbnRhaW5lciA9PSAiICsgX19leHBlY3RlZENvbnRhaW5lciArICIuIik7
Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGxvZygiRkFJTDogcmFuZ2Uu
c3RhcnRDb250YWluZXIgPT0gIiArIHJhbmdlLnN0YXJ0Q29udGFpbmVyICsgIi4iKTsKKzxsaW5r
IHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5
bGUuY3NzIj4KKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUu
anMiPjwvc2NyaXB0PgorPHN0eWxlPiAKKyAgICAudGVzdCB7CisgICAgICAgIHdpZHRoOiAxMDBw
eDsKKyAgICAgICAgZm9udC1mYW1pbHk6ICJBaGVtIjsKKyAgICB9CisgICAgLnB1c2hlciB7Cisg
ICAgICAgIHdpZHRoOiA0MDAwcHg7CisgICAgICAgIGhlaWdodDogMTAwMHB4OworICAgICAgICBv
dXRsaW5lOiAxcHggc29saWQgYmxhY2s7CisgICAgfQorPC9zdHlsZT4KKworPGRpdiBpZD0idGVz
dEFyZWEiPgorICAgIDxkaXYgaWQ9InRlc3QtdG9wIiBjbGFzcz0idGVzdCI+eHh4eHggeHh4eHgg
eHh4eHggeHh4eHg8L2Rpdj4KKyAgICA8ZGl2IGNsYXNzPSJwdXNoZXIiPlRoaXMgYm94IGlzIGhl
cmUgdG8gY3JlYXRlIHNjcm9sbGJhcnMuPC9kaXY+CisgICAgPGRpdiBpZD0idGVzdC1ib3R0b20i
IGNsYXNzPSJ0ZXN0IiBzdHlsZT0ibWFyZ2luLWxlZnQ6IDkwMHB4OyI+eHh4eHggeHh4eHggeHh4
eHggeHh4eHg8L2Rpdj4KKyAgICA8ZGl2IGNsYXNzPSJwdXNoZXIiPlRoaXMgYm94IGlzIGhlcmUg
dG8gY3JlYXRlIGFkZGl0aW9uYWwgc3BhY2UgZm9yIHRoZSBoaXQgdGVzdHMgd2hpY2ggbXVzdCBp
bml0aWFsbHkgYmUgaW4gdGhlIHNjcm9sbCBhcmVhLjwvZGl2PgorPC9kaXY+CisKKzxwIGlkPSJk
ZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+CisKKzxzY3JpcHQ+Cisg
ICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgbGF5b3V0VGVzdENv
bnRyb2xsZXIuZHVtcEFzVGV4dCgpOworCisgICAgZGVzY3JpcHRpb24oJ1RoaXMgY2hlY2tzIGZv
ciBwcm9wZXIgYmVoYXZpb3Igb2YgY2FyZXRSYW5nZUZyb21Qb2ludCBiZWZvcmUgYW5kIGFmdGVy
IHNjcm9sbGluZy4nKTsgICAgICAgIAorCisgICAgdmFyIGVsZW1lbnRUb3AgPSBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgndGVzdC10b3AnKSwKKyAgICAgICAgZWxlbWVudEJvdHRvbSA9IGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0LWJvdHRvbScpOworCisgICAgZnVuY3Rpb24gdGVzdHNX
aXRoQmFzZWxpbmUoYmFzZWxpbmVQb3MsIGV4cGVjdGVkQ29udGFpbmVyKSB7CisgICAgICAgIGZ1
bmN0aW9uIHRlc3QoZXhwZWN0ZWRPZmZzZXQsIHNjcm9sbEJ5WCwgc2Nyb2xsQnlZKSB7CisgICAg
ICAgICAgICB2YXIgaGl0UG9zaXRpb24gPSB7IHg6IDE1LCB5OiAxNSB9LAorICAgICAgICAgICAg
ICAgIHJhbmdlLAorICAgICAgICAgICAgICAgIGRvZXNDb250YWluZXJQYXNzID0gZnVuY3Rpb24o
KSB7IHJldHVybiByYW5nZS5zdGFydENvbnRhaW5lciA9PT0gZXhwZWN0ZWRDb250YWluZXIgfSwK
KyAgICAgICAgICAgICAgICBkb2VzT2Zmc2V0UGFzcyA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gcmFu
Z2Uuc3RhcnRPZmZzZXQgPT09IGV4cGVjdGVkT2Zmc2V0IH07CisKKyAgICAgICAgICAgIC8vIFNj
cm9sbCByZWxhdGl2ZSB0byB0YXJnZXQuCisgICAgICAgICAgICBzY3JvbGxSZWxhdGl2ZVRvQmFz
ZWxpbmUoc2Nyb2xsQnlYLCBzY3JvbGxCeVkpOworCisgICAgICAgICAgICByYW5nZSA9IGRvY3Vt
ZW50LmNhcmV0UmFuZ2VGcm9tUG9pbnQoaGl0UG9zaXRpb24ueCwgaGl0UG9zaXRpb24ueSk7CisK
KyAgICAgICAgICAgIC8vIHNob3VsZG4ndCByZXR1cm4gbnVsbCByYW5nZSBvbiBhbnkgb2YgdGhl
c2UgdGVzdHMKKyAgICAgICAgICAgIGlmIChyYW5nZSA9PT0gbnVsbCkgeworICAgICAgICAgICAg
ICAgIHRlc3RGYWlsZWQoIm51bGwgcmFuZ2Ugd2FzIHJldHVybmVkIGZyb20gZG9jdW1lbnQuY2Fy
ZXRSYW5nZUZyb21Qb2ludCgiICsgaGl0UG9zaXRpb24ueCArICIsICIgKyBoaXRQb3NpdGlvbi55
ICsgIikgYXQgd2luZG93IHNjcm9sbCBwb3NpdGlvbiAiICsgd2luZG93LnNjcm9sbFggKyAieCIg
KyB3aW5kb3cuc2Nyb2xsWSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAg
fQogCi0gICAgICAgICAgICBpZiAocmFuZ2Uuc3RhcnRPZmZzZXQgPT0gZXhwZWN0ZWRPZmZzZXQp
IHsKLSAgICAgICAgICAgICAgICBsb2coIlBBU1M6IHJhbmdlLnN0YXJ0T2Zmc2V0ID09ICIgKyBf
X2V4cGVjdGVkT2Zmc2V0ICsgIi4iKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgbG9nKCJGQUlMOiByYW5nZS5zdGFydE9mZnNldCA9PSAiICsgcmFuZ2Uuc3RhcnRPZmZz
ZXQgKyAiLiIpOworICAgICAgICAgICAgLy8gZG8gYW4gYWN0dWFsIGNoZWNrCisgICAgICAgICAg
ICBmdW5jdGlvbiBjaGVjayh0aHVuaywgbWVzc2FnZSkgeworICAgICAgICAgICAgICAgIGlmICh0
aHVuaygpKQorICAgICAgICAgICAgICAgICAgICB0ZXN0UGFzc2VkKG1lc3NhZ2UpOworICAgICAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgdGVzdEZhaWxlZChtZXNzYWdlKTsK
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNoZWNrKGRvZXNDb250YWluZXJQYXNzLCAiUmFu
Z2Uuc3RhcnRDb250YWluZXIgY2hlY2sgKGdvdCAiICsgcmFuZ2Uuc3RhcnRDb250YWluZXIgKyAi
LCBleHBlY3RlZCAiICsgZXhwZWN0ZWRDb250YWluZXIgKyAiKSIpOworICAgICAgICAgICAgY2hl
Y2soZG9lc09mZnNldFBhc3MsICJSYW5nZS5zdGFydE9mZnNldCBjaGVjayAoZ290ICIgKyByYW5n
ZS5zdGFydE9mZnNldCArICIsIGV4cGVjdGVkICIgKyBleHBlY3RlZE9mZnNldCArICIpIik7CiAg
ICAgICAgIH0KIAotICAgICAgICB3aW5kb3cub25sb2FkID0gZnVuY3Rpb24oKQotICAgICAgICB7
Ci0gICAgICAgICAgICBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QnKTsK
LSAgICAgICAgICAgIHRleHQgPSBlbGVtZW50LmZpcnN0Q2hpbGQ7CisgICAgICAgIGZ1bmN0aW9u
IHNjcm9sbFJlbGF0aXZlVG9CYXNlbGluZSh4LCB5KSB7CisgICAgICAgICAgICB3aW5kb3cuc2Ny
b2xsVG8oYmFzZWxpbmVQb3MueCArIHgsIGJhc2VsaW5lUG9zLnkgKyB5KTsKKyAgICAgICAgfQog
Ci0gICAgICAgICAgICB2YXIgcG9zaXRpb25Ub1Rlc3QgPSB7IHg6IDE1LCB5OiAxNSB9OworICAg
ICAgICB0ZXN0KDAsIDAsIDApOworICAgICAgICB0ZXN0KDEyLCAwLCAyNSk7CisgICAgICAgIHRl
c3QoMiwgMjUsIDApOworICAgICAgICB0ZXN0KDE0LCAyNSwgMjUpOworICAgICAgICBkZWJ1Zygi
ICIpOworICAgIH0KIAotICAgICAgICAgICAgbG9nKCJUZXN0aW5nIHdpdGggbm8gc2Nyb2xsIik7
Ci0gICAgICAgICAgICB0ZXN0KHBvc2l0aW9uVG9UZXN0LCAiZWxlbWVudC5maXJzdENoaWxkIiwg
IjAiKTsKKyAgICB2YXIgcmVjdFRvcCA9IGVsZW1lbnRUb3AuZ2V0Qm91bmRpbmdDbGllbnRSZWN0
KCksCisgICAgICAgIHJlY3RCb3R0b20gPSBlbGVtZW50Qm90dG9tLmdldEJvdW5kaW5nQ2xpZW50
UmVjdCgpLAorICAgICAgICAvLyBTdWJ0cmFjdCBzb21lIGRpc3RhbmNlIHNvIHdlIGFyZW4ndCBp
biB0aGUgdmVyeSB0b3AgbGVmdCBvZiB0aGUgdGFyZ2V0LgorICAgICAgICB0b3BCYXNlbGluZSA9
IHsgeDogcmVjdFRvcC5sZWZ0IC0gOCwgeTogcmVjdFRvcC50b3AgLSA4IH0sCisgICAgICAgIGJv
dHRvbUJhc2VsaW5lID0geyB4OiByZWN0Qm90dG9tLmxlZnQgLSA4LCB5OiByZWN0Qm90dG9tLnRv
cCAtIDggfTsKIAotICAgICAgICAgICAgbG9nKCJUZXN0IHNjcm9sbGluZyBkb3duIik7Ci0gICAg
ICAgICAgICB3aW5kb3cuc2Nyb2xsVG8oMCwgMjUpOwotICAgICAgICAgICAgdGVzdChwb3NpdGlv
blRvVGVzdCwgImVsZW1lbnQuZmlyc3RDaGlsZCIsICIxMiIpOworICAgICAvLyBUZXN0aW5nIGlu
c2lkZSBpbml0aWFsIGNvbnRhaW5pbmcgYmxvY2sgKHRvcCBsZWZ0KQorICAgIHRlc3RzV2l0aEJh
c2VsaW5lKHRvcEJhc2VsaW5lLCBlbGVtZW50VG9wLmZpcnN0Q2hpbGQpOwogCi0gICAgICAgICAg
ICBsb2coIlRlc3Qgc2Nyb2xsaW5nIHJpZ2h0Iik7Ci0gICAgICAgICAgICB3aW5kb3cuc2Nyb2xs
VG8oMjUsIDApOwotICAgICAgICAgICAgdGVzdChwb3NpdGlvblRvVGVzdCwgImVsZW1lbnQuZmly
c3RDaGlsZCIsICIyIik7CisgICAgLy8gVGVzdGluZyBvdXRzaWRlIGluaXRpYWwgY29udGFpbmlu
ZyBibG9jayAobWlkLXBhZ2UpCisgICAgdGVzdHNXaXRoQmFzZWxpbmUoYm90dG9tQmFzZWxpbmUs
IGVsZW1lbnRCb3R0b20uZmlyc3RDaGlsZCk7CiAKLSAgICAgICAgICAgIGxvZygiVGVzdCBzY3Jv
bGxpbmcgZG93biBhbmQgcmlnaHQiKTsKLSAgICAgICAgICAgIHdpbmRvdy5zY3JvbGxUbygyNSwg
MjUpOwotICAgICAgICAgICAgdGVzdChwb3NpdGlvblRvVGVzdCwgImVsZW1lbnQuZmlyc3RDaGls
ZCIsICIxNCIpOworICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICAg
ICAgdmFyIGFyZWEgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdEFyZWEnKTsKKyAgICAg
ICAgYXJlYS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGFyZWEpOworICAgIH0KIAotICAgICAgICAg
ICAgc3dhcEluTG9nKCk7Ci0gICAgICAgIH0KLSAgICA8L3NjcmlwdD4KLTwvaGVhZD4KLTxib2R5
PgotPGRpdiBpZD0idGVzdCI+eHh4eHggeHh4eHggeHh4eHggeHh4eHg8L2Rpdj4KLTxkaXYgaWQ9
InB1c2hlciI+VGhpcyBib3ggaXMgaGVyZSB0byBjcmVhdGUgc2Nyb2xsYmFycy48L2Rpdj4KLTwv
Ym9keT4KLTwvaHRtbD4KKyAgICBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworPC9zY3JpcHQ+
Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9z
Y3JpcHQ+Cg==
</data>
<flag name="review"
          id="20651"
          type_id="1"
          status="+"
          setter="sam"
    />
    <flag name="commit-queue"
          id="20672"
          type_id="3"
          status="-"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>39571</attachid>
            <date>2009-09-14 13:20:36 -0700</date>
            <delta_ts>2009-09-15 11:40:38 -0700</delta_ts>
            <desc>Same, but hopefully removed tab chars from ChangeLogs</desc>
            <filename>hitBoundsPatch2.txt</filename>
            <type>text/plain</type>
            <size>17422</size>
            <attacher name="Andrew Richards">randrew</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0ODM1NCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTYgQEAKKzIwMDktMDktMTQgIEFuZHJldyBSaWNoYXJkcyAgPHJhbmRyZXdAZ21h
aWwuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IERvY3VtZW50LmVsZW1lbnRGcm9tUG9pbnQoKSBhbmQgRG9jdW1lbnQuY2FyZXRSYW5nZUZyb21Q
b2ludCgpIGVycm9uZW91c2x5IHJldHVybmluZyBudWxsIGF0IHBvaW50cyB2aXNpYmxlIG9ubHkg
YWZ0ZXIgc2Nyb2xsaW5nLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjkyNDUKKworICAgICAgICBVc2UgdmlzaWJsZUNvbnRlbnRSZWN0KCkgaW5zdGVh
ZCBvZiBib3VuZHNSZWN0KCkgd2hlbiBjaGVja2luZyBoaXQgcG9pbnQgYm91bmRzIG9uIHZpZXdw
b3J0LgorCQkKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RG9jdW1lbnQ6OmVsZW1lbnRGcm9tUG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6
OmNhcmV0UmFuZ2VGcm9tUG9pbnQpOgorCiAyMDA5LTA5LTE0ICBZYWVsIEFoYXJvbiAgPHlhZWwu
YWhhcm9uQG5va2lhLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBUb3IgQXJuZSBWZXN0YsO4
LgpJbmRleDogV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
ZG9tL0RvY3VtZW50LmNwcAkocmV2aXNpb24gNDgzNTIpCisrKyBXZWJDb3JlL2RvbS9Eb2N1bWVu
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk0MCw3ICs5NDAsNyBAQCBFbGVtZW50KiBEb2N1bWVu
dDo6ZWxlbWVudEZyb21Qb2ludChpbnQgCiAgICAgZmxvYXQgem9vbUZhY3RvciA9IGZyYW1lLT5w
YWdlWm9vbUZhY3RvcigpOwogICAgIEludFBvaW50IHBvaW50ID0gcm91bmRlZEludFBvaW50KEZs
b2F0UG9pbnQoeCAqIHpvb21GYWN0b3IsIHkgKiB6b29tRmFjdG9yKSkgKyB2aWV3KCktPnNjcm9s
bE9mZnNldCgpOwogCi0gICAgaWYgKCFmcmFtZVZpZXctPmJvdW5kc1JlY3QoKS5jb250YWlucyhw
b2ludCkpCisgICAgaWYgKCFmcmFtZVZpZXctPnZpc2libGVDb250ZW50UmVjdCgpLmNvbnRhaW5z
KHBvaW50KSkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICBIaXRUZXN0UmVxdWVzdCByZXF1ZXN0
KEhpdFRlc3RSZXF1ZXN0OjpSZWFkT25seSB8IEhpdFRlc3RSZXF1ZXN0OjpBY3RpdmUpOwpAQCAt
OTcwLDcgKzk3MCw3IEBAIFBhc3NSZWZQdHI8UmFuZ2U+IERvY3VtZW50OjpjYXJldFJhbmdlRnIK
ICAgICBmbG9hdCB6b29tRmFjdG9yID0gZnJhbWUtPnBhZ2Vab29tRmFjdG9yKCk7CiAgICAgSW50
UG9pbnQgcG9pbnQgPSByb3VuZGVkSW50UG9pbnQoRmxvYXRQb2ludCh4ICogem9vbUZhY3Rvciwg
eSAqIHpvb21GYWN0b3IpKSArIHZpZXcoKS0+c2Nyb2xsT2Zmc2V0KCk7CiAKLSAgICBpZiAoIWZy
YW1lVmlldy0+Ym91bmRzUmVjdCgpLmNvbnRhaW5zKHBvaW50KSkKKyAgICBpZiAoIWZyYW1lVmll
dy0+dmlzaWJsZUNvbnRlbnRSZWN0KCkuY29udGFpbnMocG9pbnQpKQogICAgICAgICByZXR1cm4g
MDsKIAogICAgIEhpdFRlc3RSZXF1ZXN0IHJlcXVlc3QoSGl0VGVzdFJlcXVlc3Q6OlJlYWRPbmx5
IHwgSGl0VGVzdFJlcXVlc3Q6OkFjdGl2ZSk7CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA0ODM1NCkKKysr
IExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3IEBACisy
MDA5LTA5LTE0ICBBbmRyZXcgUmljaGFyZHMgIDxyYW5kcmV3QGdtYWlsLmNvbT4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBEb2N1bWVudC5lbGVtZW50
RnJvbVBvaW50KCkgYW5kIERvY3VtZW50LmNhcmV0UmFuZ2VGcm9tUG9pbnQoKSByZXR1cm5pbmcg
bnVsbCBhdCBwb2ludHMgdmlzaWJsZSBvbmx5IGFmdGVyIHNjcm9sbGluZy4KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI5MjQ1CisJCQorICAgICAgICBF
eHRlbmQgdGVzdHMgdG8gaW5jbHVkZSBoaXRzIGluIGFyZWFzIHRoYXQgYXJlIG5vdCBpbiB0aGUg
aW5pdGlhbCBjb250YWluaW5nIGJsb2NrIG9mIHRoZSBwYWdlLgorCisgICAgICAgICogZmFzdC9k
b20vRG9jdW1lbnQvQ2FyZXRSYW5nZUZyb21Qb2ludC9oaXR0ZXN0LXJlbGF0aXZlLXRvLXZpZXdw
b3J0LWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBmYXN0L2RvbS9Eb2N1bWVudC9DYXJldFJhbmdl
RnJvbVBvaW50L2hpdHRlc3QtcmVsYXRpdmUtdG8tdmlld3BvcnQuaHRtbDoKKyAgICAgICAgKiBm
YXN0L2RvbS9lbGVtZW50RnJvbVBvaW50LXJlbGF0aXZlLXRvLXZpZXdwb3J0LWV4cGVjdGVkLnR4
dDoKKyAgICAgICAgKiBmYXN0L2RvbS9lbGVtZW50RnJvbVBvaW50LXJlbGF0aXZlLXRvLXZpZXdw
b3J0Lmh0bWw6CisKIDIwMDktMDktMTIgIE9saXZlciBIdW50ICA8b2xpdmVyQGFwcGxlLmNvbT4K
IAogICAgICAgICBSZXZpZXdlZCBieSBNYWNpZWogU3RhY2hvd2lhay4KSW5kZXg6IExheW91dFRl
c3RzL2Zhc3QvZG9tL2VsZW1lbnRGcm9tUG9pbnQtcmVsYXRpdmUtdG8tdmlld3BvcnQtZXhwZWN0
ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZG9tL2VsZW1lbnRGcm9tUG9p
bnQtcmVsYXRpdmUtdG8tdmlld3BvcnQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiA0ODM1MikKKysr
IExheW91dFRlc3RzL2Zhc3QvZG9tL2VsZW1lbnRGcm9tUG9pbnQtcmVsYXRpdmUtdG8tdmlld3Bv
cnQtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0zLDEwICszLDE0IEBAIFRoaXMgdGVz
dCBkb2N1bWVudC5lbGVtZW50RnJvbVBvaW50IGlzIGUKIE9uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNl
ZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRF
Ii4KIAogCi1QQVNTIHVuc2Nyb2xsZWRCb3ggaXMgJzAnCi1QQVNTIHNjcm9sbGVkRG93bkJveCBp
cyAnMTUnCi1QQVNTIHNjcm9sbGVkUmlnaHRCb3ggaXMgJzMnCi1QQVNTIHNjcm9sbGVkRG93bkFu
ZFJpZ2h0Qm94IGlzICcxOCcKK1BBU1MgdW5zY3JvbGxlZEJveEluaXRpYWwgaXMgJzAnCitQQVNT
IHNjcm9sbGVkRG93bkJveEluaXRpYWwgaXMgJzE1JworUEFTUyBzY3JvbGxlZFJpZ2h0Qm94SW5p
dGlhbCBpcyAnMycKK1BBU1Mgc2Nyb2xsZWREb3duQW5kUmlnaHRCb3hJbml0aWFsIGlzICcxOCcK
K1BBU1MgdW5zY3JvbGxlZEJveE9mZnNjcmVlbiBpcyAnMCcKK1BBU1Mgc2Nyb2xsZWREb3duQm94
T2Zmc2NyZWVuIGlzICcxNScKK1BBU1Mgc2Nyb2xsZWRSaWdodEJveE9mZnNjcmVlbiBpcyAnMycK
K1BBU1Mgc2Nyb2xsZWREb3duQW5kUmlnaHRCb3hPZmZzY3JlZW4gaXMgJzE4JwogUEFTUyBzdWNj
ZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQogCiBURVNUIENPTVBMRVRFCkluZGV4OiBMYXlvdXRUZXN0
cy9mYXN0L2RvbS9lbGVtZW50RnJvbVBvaW50LXJlbGF0aXZlLXRvLXZpZXdwb3J0Lmh0bWwKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9kb20vZWxlbWVudEZyb21Qb2ludC1yZWxhdGl2
ZS10by12aWV3cG9ydC5odG1sCShyZXZpc2lvbiA0ODM1MikKKysrIExheW91dFRlc3RzL2Zhc3Qv
ZG9tL2VsZW1lbnRGcm9tUG9pbnQtcmVsYXRpdmUtdG8tdmlld3BvcnQuaHRtbAkod29ya2luZyBj
b3B5KQpAQCAtMSw4ICsxLDkgQEAKIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vanMv
cmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4KIDxzY3JpcHQgc3JjPSIuLi9qcy9yZXNvdXJj
ZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgogPHN0eWxlPgotICAgICN0ZXN0IHsKKyAgICAu
dGVzdCB7CiAgICAgICAgIHdpZHRoOiAxMDBweDsKKyAgICAgICAgaGVpZ2h0OiAxMDBweDsKICAg
ICAgICAgb3V0bGluZTogMXB4IHNvbGlkIGJsYWNrOwogICAgIH0KICAgICAudGVzdEl0ZW0gewpA
QCAtMTIsMTkgKzEzLDIxIEBACiAgICAgICAgIGhlaWdodDogMjBweDsKICAgICAgICAgb3V0bGlu
ZTogMXB4IHNvbGlkIHJlZDsKICAgICB9Ci0gICAgI3B1c2hlciB7CisgICAgLnB1c2hlciB7CiAg
ICAgICAgIHdpZHRoOiAxMDAwcHg7CiAgICAgICAgIGhlaWdodDogMTAwMHB4OwogICAgICAgICBv
dXRsaW5lOiAxcHggc29saWQgYmxhY2s7CiAgICAgfQogPC9zdHlsZT4KLTxwIGlkPSJkZXNjcmlw
dGlvbiI+PC9wPgotPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+CiA8ZGl2IGlkPSJ0ZXN0QXJlYSI+
CiAgICAgPGJyPgotICAgIDxkaXYgaWQ9InRlc3QiPjwvZGl2PgotICAgIDxkaXYgaWQ9InB1c2hl
ciI+VGhpcyBib3ggaXMgaGVyZSB0byBjcmVhdGUgc2Nyb2xsYmFycy48L2Rpdj4KKyAgICA8ZGl2
IGlkPSJ0ZXN0LWluaXRpYWwiIGNsYXNzPSJ0ZXN0Ij48L2Rpdj4KKyAgICA8ZGl2IGNsYXNzPSJw
dXNoZXIiPlRoaXMgYm94IGlzIGhlcmUgdG8gY3JlYXRlIHNjcm9sbGJhcnMuPC9kaXY+CisgICAg
PGRpdiBpZD0idGVzdC1vZmZzY3JlZW4iIGNsYXNzPSJ0ZXN0Ij48L2Rpdj4KKyAgICA8ZGl2IGNs
YXNzPSJwdXNoZXIiPlRoaXMgYm94IGlzIGhlcmUgdG8gY3JlYXRlIGV2ZW4gbW9yZSBzY3JvbGxi
YXJzITwvZGl2PgogPC9kaXY+Cis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNv
bnNvbGUiPjwvZGl2PgogPHNjcmlwdD4KICAgICB3aW5kb3cub25jbGljayA9IGZ1bmN0aW9uKGUp
CiAgICAgewpAQCAtMzQsNDIgKzM3LDU5IEBACiAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29u
dHJvbGxlcikKICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOwogCi0g
ICAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdCcpOwotICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgMjU7ICsraSkgewotICAgICAgICB2YXIgaXRlbSA9IGRvY3VtZW50
LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwotICAgICAgICBpdGVtLmNsYXNzTmFtZSA9ICJ0ZXN0SXRl
bSI7Ci0gICAgICAgIGl0ZW0udGV4dENvbnRlbnQgPSBTdHJpbmcoaSk7Ci0gICAgICAgIGVsZW1l
bnQuYXBwZW5kQ2hpbGQoaXRlbSk7Ci0gICAgfQotCiAgICAgZGVzY3JpcHRpb24oJ1RoaXMgdGVz
dCBkb2N1bWVudC5lbGVtZW50RnJvbVBvaW50IGlzIGV2YWx1YXRlZCBpbiB3aXRoIHJlc3BlY3Qg
dG8gdGhlIHZpZXdwb3J0LCBub3QgdGhlIGRvY3VtZW50LicpOwogCi0gICAgdmFyIHVuU2Nyb2xs
ZWRCb3VuZGluZ0JveCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7Ci0gICAgdmFy
IHRlc3RYID0gdW5TY3JvbGxlZEJvdW5kaW5nQm94LmxlZnQgKyAxMDsKLSAgICB2YXIgdGVzdFkg
PSB1blNjcm9sbGVkQm91bmRpbmdCb3gudG9wICsgMTA7Ci0KLSAgICAvLyBHZXQgaW5pdGlhbCBi
b3guCi0gICAgdmFyIHVuc2Nyb2xsZWRCb3ggPSBkb2N1bWVudC5lbGVtZW50RnJvbVBvaW50KHRl
c3RYLCB0ZXN0WSkudGV4dENvbnRlbnQ7Ci0KLSAgICAvLyBUZXN0IHNjcm9sbGluZyBkb3duCi0g
ICAgd2luZG93LnNjcm9sbFRvKDAsIDUwKTsKLSAgICB2YXIgc2Nyb2xsZWREb3duQm94ID0gZG9j
dW1lbnQuZWxlbWVudEZyb21Qb2ludCh0ZXN0WCwgdGVzdFkpLnRleHRDb250ZW50OwotCi0gICAg
Ly8gVGVzdCBzY3JvbGxpbmcgcmlnaHQKLSAgICB3aW5kb3cuc2Nyb2xsVG8oNTAsIDApOwotICAg
IHZhciBzY3JvbGxlZFJpZ2h0Qm94ID0gZG9jdW1lbnQuZWxlbWVudEZyb21Qb2ludCh0ZXN0WCwg
dGVzdFkpLnRleHRDb250ZW50OwotCi0gICAgLy8gVGVzdCBzY3JvbGxpbmcgZG93biBhbmQgcmln
aHQKLSAgICB3aW5kb3cuc2Nyb2xsVG8oNTAsIDUwKTsKLSAgICB2YXIgc2Nyb2xsZWREb3duQW5k
UmlnaHRCb3ggPSBkb2N1bWVudC5lbGVtZW50RnJvbVBvaW50KHRlc3RYLCB0ZXN0WSkudGV4dENv
bnRlbnQ7Ci0KLSAgICAvLyBSZXNldAotICAgIHdpbmRvdy5zY3JvbGxUbygwLCAwKTsKLSAgICAK
LSAgICBzaG91bGRCZSgidW5zY3JvbGxlZEJveCIsICInMCciKTsKLSAgICBzaG91bGRCZSgic2Ny
b2xsZWREb3duQm94IiwgIicxNSciKTsKLSAgICBzaG91bGRCZSgic2Nyb2xsZWRSaWdodEJveCIs
ICInMyciKTsKLSAgICBzaG91bGRCZSgic2Nyb2xsZWREb3duQW5kUmlnaHRCb3giLCAiJzE4JyIp
OworICAgIGZ1bmN0aW9uIHRlc3RFbGVtZW50KGVsZW1lbnQsIGxhYmVsLCBvZmZzZXRYLCBvZmZz
ZXRZKSB7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMjU7ICsraSkgeworICAgICAgICAg
ICAgdmFyIGl0ZW0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKyAgICAgICAgICAg
IGl0ZW0uY2xhc3NOYW1lID0gInRlc3RJdGVtIjsKKyAgICAgICAgICAgIGl0ZW0udGV4dENvbnRl
bnQgPSBTdHJpbmcoaSk7CisgICAgICAgICAgICBlbGVtZW50LmFwcGVuZENoaWxkKGl0ZW0pOwor
ICAgICAgICB9CisgICAgICAgIHZhciB0ZXN0WCA9IDEwOworICAgICAgICB2YXIgdGVzdFkgPSAx
MDsKKworICAgICAgICB2YXIgdW5zY3JvbGxlZEJveCA9ICJ1bnNjcm9sbGVkQm94IiArIGxhYmVs
LAorICAgICAgICAgICAgc2Nyb2xsZWREb3duQm94ID0gInNjcm9sbGVkRG93bkJveCIgKyBsYWJl
bCwKKyAgICAgICAgICAgIHNjcm9sbGVkUmlnaHRCb3ggPSAic2Nyb2xsZWRSaWdodEJveCIgKyBs
YWJlbCwKKyAgICAgICAgICAgIHNjcm9sbGVkRG93bkFuZFJpZ2h0Qm94ID0gInNjcm9sbGVkRG93
bkFuZFJpZ2h0Qm94IiArIGxhYmVsOworCisgICAgICAgIGZ1bmN0aW9uIHJlbGF0aXZlU2Nyb2xs
KHgsIHkpIHsKKyAgICAgICAgICAgIHdpbmRvdy5zY3JvbGxUbyhvZmZzZXRYICsgeCwgb2Zmc2V0
WSArIHkpOworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gZ2V0RnJvbVBvaW50KHgsIHkp
IHsKKyAgICAgICAgICAgIHJlbGF0aXZlU2Nyb2xsKHgsIHkpOworICAgICAgICAgICAgdmFyIGhp
dEVsZW1lbnQgPSBkb2N1bWVudC5lbGVtZW50RnJvbVBvaW50KHRlc3RYLCB0ZXN0WSk7CisgICAg
ICAgICAgICAvLyBzaG91bGRuJ3QgcmV0dXJuIG51bGwgcmFuZ2Ugb24gYW55IG9mIHRoZXNlIHRl
c3RzCisgICAgICAgICAgICBpZiAoaGl0RWxlbWVudCA9PT0gbnVsbCkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gbnVsbDsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXR1cm4g
aGl0RWxlbWVudC50ZXh0Q29udGVudDsKKyAgICAgICAgfQorICAgICAgICAvLyBHZXQgaW5pdGlh
bCBib3guCisgICAgICAgIHdpbmRvd1t1bnNjcm9sbGVkQm94XSA9IGdldEZyb21Qb2ludCgwLCAw
KTsKKworICAgICAgICAvLyBUZXN0IHNjcm9sbGluZyBkb3duCisgICAgICAgIHdpbmRvd1tzY3Jv
bGxlZERvd25Cb3hdID0gZ2V0RnJvbVBvaW50KDAsIDUwKTsKKworICAgICAgICAvLyBUZXN0IHNj
cm9sbGluZyByaWdodAorICAgICAgICB3aW5kb3dbc2Nyb2xsZWRSaWdodEJveF0gPSBnZXRGcm9t
UG9pbnQoNTAsIDApOworCisgICAgICAgIC8vIFRlc3Qgc2Nyb2xsaW5nIGRvd24gYW5kIHJpZ2h0
CisgICAgICAgIHdpbmRvd1tzY3JvbGxlZERvd25BbmRSaWdodEJveF0gPSBnZXRGcm9tUG9pbnQo
NTAsIDUwKTsKKworICAgICAgICBzaG91bGRCZSh1bnNjcm9sbGVkQm94LCAiJzAnIik7CisgICAg
ICAgIHNob3VsZEJlKHNjcm9sbGVkRG93bkJveCwgIicxNSciKTsKKyAgICAgICAgc2hvdWxkQmUo
c2Nyb2xsZWRSaWdodEJveCwgIiczJyIpOworICAgICAgICBzaG91bGRCZShzY3JvbGxlZERvd25B
bmRSaWdodEJveCwgIicxOCciKTsKKyAgICB9CisKKyAgICB2YXIgZWxlbWVudEluaXRpYWwgPSBk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdC1pbml0aWFsJyk7CisgICAgdmFyIGVsZW1lbnRP
ZmZzY3JlZW4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdC1vZmZzY3JlZW4nKTsKKyAg
ICB2YXIgb2Zmc2V0ID0gZWxlbWVudEluaXRpYWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7Cisg
ICAgdGVzdEVsZW1lbnQoZWxlbWVudEluaXRpYWwsICJJbml0aWFsIiwgb2Zmc2V0LmxlZnQsIG9m
ZnNldC50b3ApOworICAgIHRlc3RFbGVtZW50KGVsZW1lbnRPZmZzY3JlZW4sICJPZmZzY3JlZW4i
LCBvZmZzZXQubGVmdCwgb2Zmc2V0LnRvcCArIDExMDApOwogICAgIAogICAgIGlmICh3aW5kb3cu
bGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKICAgICAgICAgdmFyIGFyZWEgPSBkb2N1bWVudC5nZXRF
bGVtZW50QnlJZCgndGVzdEFyZWEnKTsKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZG9tL0RvY3Vt
ZW50L0NhcmV0UmFuZ2VGcm9tUG9pbnQvaGl0dGVzdC1yZWxhdGl2ZS10by12aWV3cG9ydC1leHBl
Y3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9kb20vRG9jdW1lbnQvQ2Fy
ZXRSYW5nZUZyb21Qb2ludC9oaXR0ZXN0LXJlbGF0aXZlLXRvLXZpZXdwb3J0LWV4cGVjdGVkLnR4
dAkocmV2aXNpb24gNDgzNTIpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2RvbS9Eb2N1bWVudC9DYXJl
dFJhbmdlRnJvbVBvaW50L2hpdHRlc3QtcmVsYXRpdmUtdG8tdmlld3BvcnQtZXhwZWN0ZWQudHh0
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDE0ICsxLDI3IEBACi1UaGlzIGJveCBpcyBoZXJlIHRvIGNy
ZWF0ZSBzY3JvbGxiYXJzLgotVGVzdGluZyB3aXRoIG5vIHNjcm9sbAotUEFTUzogcmFuZ2Uuc3Rh
cnRDb250YWluZXIgPT0gZWxlbWVudC5maXJzdENoaWxkLgotUEFTUzogcmFuZ2Uuc3RhcnRPZmZz
ZXQgPT0gMC4KLVRlc3Qgc2Nyb2xsaW5nIGRvd24KLVBBU1M6IHJhbmdlLnN0YXJ0Q29udGFpbmVy
ID09IGVsZW1lbnQuZmlyc3RDaGlsZC4KLVBBU1M6IHJhbmdlLnN0YXJ0T2Zmc2V0ID09IDEyLgot
VGVzdCBzY3JvbGxpbmcgcmlnaHQKLVBBU1M6IHJhbmdlLnN0YXJ0Q29udGFpbmVyID09IGVsZW1l
bnQuZmlyc3RDaGlsZC4KLVBBU1M6IHJhbmdlLnN0YXJ0T2Zmc2V0ID09IDIuCi1UZXN0IHNjcm9s
bGluZyBkb3duIGFuZCByaWdodAotUEFTUzogcmFuZ2Uuc3RhcnRDb250YWluZXIgPT0gZWxlbWVu
dC5maXJzdENoaWxkLgotUEFTUzogcmFuZ2Uuc3RhcnRPZmZzZXQgPT0gMTQuCitUaGlzIGNoZWNr
cyBmb3IgcHJvcGVyIGJlaGF2aW9yIG9mIGNhcmV0UmFuZ2VGcm9tUG9pbnQgYmVmb3JlIGFuZCBh
ZnRlciBzY3JvbGxpbmcuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAi
UEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIFJh
bmdlLnN0YXJ0Q29udGFpbmVyIGNoZWNrIChnb3QgW29iamVjdCBUZXh0XSwgZXhwZWN0ZWQgW29i
amVjdCBUZXh0XSkKK1BBU1MgUmFuZ2Uuc3RhcnRPZmZzZXQgY2hlY2sgKGdvdCAwLCBleHBlY3Rl
ZCAwKQorUEFTUyBSYW5nZS5zdGFydENvbnRhaW5lciBjaGVjayAoZ290IFtvYmplY3QgVGV4dF0s
IGV4cGVjdGVkIFtvYmplY3QgVGV4dF0pCitQQVNTIFJhbmdlLnN0YXJ0T2Zmc2V0IGNoZWNrIChn
b3QgMTIsIGV4cGVjdGVkIDEyKQorUEFTUyBSYW5nZS5zdGFydENvbnRhaW5lciBjaGVjayAoZ290
IFtvYmplY3QgVGV4dF0sIGV4cGVjdGVkIFtvYmplY3QgVGV4dF0pCitQQVNTIFJhbmdlLnN0YXJ0
T2Zmc2V0IGNoZWNrIChnb3QgMiwgZXhwZWN0ZWQgMikKK1BBU1MgUmFuZ2Uuc3RhcnRDb250YWlu
ZXIgY2hlY2sgKGdvdCBbb2JqZWN0IFRleHRdLCBleHBlY3RlZCBbb2JqZWN0IFRleHRdKQorUEFT
UyBSYW5nZS5zdGFydE9mZnNldCBjaGVjayAoZ290IDE0LCBleHBlY3RlZCAxNCkKKyAKK1BBU1Mg
UmFuZ2Uuc3RhcnRDb250YWluZXIgY2hlY2sgKGdvdCBbb2JqZWN0IFRleHRdLCBleHBlY3RlZCBb
b2JqZWN0IFRleHRdKQorUEFTUyBSYW5nZS5zdGFydE9mZnNldCBjaGVjayAoZ290IDAsIGV4cGVj
dGVkIDApCitQQVNTIFJhbmdlLnN0YXJ0Q29udGFpbmVyIGNoZWNrIChnb3QgW29iamVjdCBUZXh0
XSwgZXhwZWN0ZWQgW29iamVjdCBUZXh0XSkKK1BBU1MgUmFuZ2Uuc3RhcnRPZmZzZXQgY2hlY2sg
KGdvdCAxMiwgZXhwZWN0ZWQgMTIpCitQQVNTIFJhbmdlLnN0YXJ0Q29udGFpbmVyIGNoZWNrIChn
b3QgW29iamVjdCBUZXh0XSwgZXhwZWN0ZWQgW29iamVjdCBUZXh0XSkKK1BBU1MgUmFuZ2Uuc3Rh
cnRPZmZzZXQgY2hlY2sgKGdvdCAyLCBleHBlY3RlZCAyKQorUEFTUyBSYW5nZS5zdGFydENvbnRh
aW5lciBjaGVjayAoZ290IFtvYmplY3QgVGV4dF0sIGV4cGVjdGVkIFtvYmplY3QgVGV4dF0pCitQ
QVNTIFJhbmdlLnN0YXJ0T2Zmc2V0IGNoZWNrIChnb3QgMTQsIGV4cGVjdGVkIDE0KQorIAorUEFT
UyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCiAKSW5kZXg6IExh
eW91dFRlc3RzL2Zhc3QvZG9tL0RvY3VtZW50L0NhcmV0UmFuZ2VGcm9tUG9pbnQvaGl0dGVzdC1y
ZWxhdGl2ZS10by12aWV3cG9ydC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qv
ZG9tL0RvY3VtZW50L0NhcmV0UmFuZ2VGcm9tUG9pbnQvaGl0dGVzdC1yZWxhdGl2ZS10by12aWV3
cG9ydC5odG1sCShyZXZpc2lvbiA0ODM1MikKKysrIExheW91dFRlc3RzL2Zhc3QvZG9tL0RvY3Vt
ZW50L0NhcmV0UmFuZ2VGcm9tUG9pbnQvaGl0dGVzdC1yZWxhdGl2ZS10by12aWV3cG9ydC5odG1s
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDg3ICsxLDkzIEBACi08aHRtbD4KLTxoZWFkPgotICAgIDxz
dHlsZT4KLSAgICAgICAgI3Rlc3QgewotICAgICAgICAgICAgd2lkdGg6IDEwMHB4OwotICAgICAg
ICAgICAgZm9udC1mYW1pbHk6ICJBaGVtIjsKLSAgICAgICAgfQotICAgICAgICAjcHVzaGVyIHsK
LSAgICAgICAgICAgIHdpZHRoOiAxMDAwcHg7Ci0gICAgICAgICAgICBoZWlnaHQ6IDEwMDBweDsK
LSAgICAgICAgICAgIG91dGxpbmU6IDFweCBzb2xpZCBibGFjazsKLSAgICAgICAgfQotICAgIDwv
c3R5bGU+Ci0gICAgPHNjcmlwdD4KLSAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJv
bGxlcikKLSAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKLQot
ICAgICAgICB2YXIgX2xvZyA9ICIiOwotICAgICAgICBmdW5jdGlvbiBsb2cobXNnKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBfbG9nICs9IG1zZyArICJcbiI7Ci0gICAgICAgIH0KLQotICAgICAg
ICBmdW5jdGlvbiBzd2FwSW5Mb2coKQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgZWxlbWVu
dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0Jyk7Ci0gICAgICAgICAgICB2YXIgcGFy
ZW50ID0gZWxlbWVudC5wYXJlbnROb2RlOwotICAgICAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRU
ZXN0Q29udHJvbGxlcikKLSAgICAgICAgICAgICAgICBwYXJlbnQucmVtb3ZlQ2hpbGQoZWxlbWVu
dCk7Ci0gICAgICAgICAgICB2YXIgY29uc29sZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInBy
ZSIpOwotICAgICAgICAgICAgY29uc29sZS50ZXh0Q29udGVudCA9IF9sb2c7Ci0gICAgICAgICAg
ICBwYXJlbnQuYXBwZW5kQ2hpbGQoY29uc29sZSk7Ci0gICAgICAgIH0KLQotICAgICAgICB2YXIg
ZWxlbWVudDsKLQotICAgICAgICBmdW5jdGlvbiB0ZXN0KHBvcywgX19leHBlY3RlZENvbnRhaW5l
ciwgX19leHBlY3RlZE9mZnNldCkKLSAgICAgICAgewotICAgICAgICAgICAgdmFyIGV4cGVjdGVk
Q29udGFpbmVyID0gZXZhbChfX2V4cGVjdGVkQ29udGFpbmVyKTsKLSAgICAgICAgICAgIHZhciBl
eHBlY3RlZE9mZnNldCA9IGV2YWwoX19leHBlY3RlZE9mZnNldCk7Ci0KLSAgICAgICAgICAgIHZh
ciByYW5nZSA9IGRvY3VtZW50LmNhcmV0UmFuZ2VGcm9tUG9pbnQocG9zLngsIHBvcy55KTsKLQot
ICAgICAgICAgICAgaWYgKHJhbmdlLnN0YXJ0Q29udGFpbmVyID09IGV4cGVjdGVkQ29udGFpbmVy
KSB7Ci0gICAgICAgICAgICAgICAgbG9nKCJQQVNTOiByYW5nZS5zdGFydENvbnRhaW5lciA9PSAi
ICsgX19leHBlY3RlZENvbnRhaW5lciArICIuIik7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgICAgIGxvZygiRkFJTDogcmFuZ2Uuc3RhcnRDb250YWluZXIgPT0gIiArIHJhbmdl
LnN0YXJ0Q29udGFpbmVyICsgIi4iKTsKKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4v
Li4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQgc3JjPSIuLi8u
Li8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHN0eWxlPiAKKyAg
ICAudGVzdCB7CisgICAgICAgIHdpZHRoOiAxMDBweDsKKyAgICAgICAgZm9udC1mYW1pbHk6ICJB
aGVtIjsKKyAgICB9CisgICAgLnB1c2hlciB7CisgICAgICAgIHdpZHRoOiA0MDAwcHg7CisgICAg
ICAgIGhlaWdodDogMTAwMHB4OworICAgICAgICBvdXRsaW5lOiAxcHggc29saWQgYmxhY2s7Cisg
ICAgfQorPC9zdHlsZT4KKworPGRpdiBpZD0idGVzdEFyZWEiPgorICAgIDxkaXYgaWQ9InRlc3Qt
dG9wIiBjbGFzcz0idGVzdCI+eHh4eHggeHh4eHggeHh4eHggeHh4eHg8L2Rpdj4KKyAgICA8ZGl2
IGNsYXNzPSJwdXNoZXIiPlRoaXMgYm94IGlzIGhlcmUgdG8gY3JlYXRlIHNjcm9sbGJhcnMuPC9k
aXY+CisgICAgPGRpdiBpZD0idGVzdC1ib3R0b20iIGNsYXNzPSJ0ZXN0IiBzdHlsZT0ibWFyZ2lu
LWxlZnQ6IDkwMHB4OyI+eHh4eHggeHh4eHggeHh4eHggeHh4eHg8L2Rpdj4KKyAgICA8ZGl2IGNs
YXNzPSJwdXNoZXIiPlRoaXMgYm94IGlzIGhlcmUgdG8gY3JlYXRlIGFkZGl0aW9uYWwgc3BhY2Ug
Zm9yIHRoZSBoaXQgdGVzdHMgd2hpY2ggbXVzdCBpbml0aWFsbHkgYmUgaW4gdGhlIHNjcm9sbCBh
cmVhLjwvZGl2PgorPC9kaXY+CisKKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBpZD0i
Y29uc29sZSI+PC9kaXY+CisKKzxzY3JpcHQ+CisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29u
dHJvbGxlcikKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworCisg
ICAgZGVzY3JpcHRpb24oJ1RoaXMgY2hlY2tzIGZvciBwcm9wZXIgYmVoYXZpb3Igb2YgY2FyZXRS
YW5nZUZyb21Qb2ludCBiZWZvcmUgYW5kIGFmdGVyIHNjcm9sbGluZy4nKTsgICAgICAgIAorCisg
ICAgdmFyIGVsZW1lbnRUb3AgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdC10b3AnKSwK
KyAgICAgICAgZWxlbWVudEJvdHRvbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0LWJv
dHRvbScpOworCisgICAgZnVuY3Rpb24gdGVzdHNXaXRoQmFzZWxpbmUoYmFzZWxpbmVQb3MsIGV4
cGVjdGVkQ29udGFpbmVyKSB7CisgICAgICAgIGZ1bmN0aW9uIHRlc3QoZXhwZWN0ZWRPZmZzZXQs
IHNjcm9sbEJ5WCwgc2Nyb2xsQnlZKSB7CisgICAgICAgICAgICB2YXIgaGl0UG9zaXRpb24gPSB7
IHg6IDE1LCB5OiAxNSB9LAorICAgICAgICAgICAgICAgIHJhbmdlLAorICAgICAgICAgICAgICAg
IGRvZXNDb250YWluZXJQYXNzID0gZnVuY3Rpb24oKSB7IHJldHVybiByYW5nZS5zdGFydENvbnRh
aW5lciA9PT0gZXhwZWN0ZWRDb250YWluZXIgfSwKKyAgICAgICAgICAgICAgICBkb2VzT2Zmc2V0
UGFzcyA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gcmFuZ2Uuc3RhcnRPZmZzZXQgPT09IGV4cGVjdGVk
T2Zmc2V0IH07CisKKyAgICAgICAgICAgIC8vIFNjcm9sbCByZWxhdGl2ZSB0byB0YXJnZXQuCisg
ICAgICAgICAgICBzY3JvbGxSZWxhdGl2ZVRvQmFzZWxpbmUoc2Nyb2xsQnlYLCBzY3JvbGxCeVkp
OworCisgICAgICAgICAgICByYW5nZSA9IGRvY3VtZW50LmNhcmV0UmFuZ2VGcm9tUG9pbnQoaGl0
UG9zaXRpb24ueCwgaGl0UG9zaXRpb24ueSk7CisKKyAgICAgICAgICAgIC8vIHNob3VsZG4ndCBy
ZXR1cm4gbnVsbCByYW5nZSBvbiBhbnkgb2YgdGhlc2UgdGVzdHMKKyAgICAgICAgICAgIGlmIChy
YW5nZSA9PT0gbnVsbCkgeworICAgICAgICAgICAgICAgIHRlc3RGYWlsZWQoIm51bGwgcmFuZ2Ug
d2FzIHJldHVybmVkIGZyb20gZG9jdW1lbnQuY2FyZXRSYW5nZUZyb21Qb2ludCgiICsgaGl0UG9z
aXRpb24ueCArICIsICIgKyBoaXRQb3NpdGlvbi55ICsgIikgYXQgd2luZG93IHNjcm9sbCBwb3Np
dGlvbiAiICsgd2luZG93LnNjcm9sbFggKyAieCIgKyB3aW5kb3cuc2Nyb2xsWSk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAocmFuZ2Uu
c3RhcnRPZmZzZXQgPT0gZXhwZWN0ZWRPZmZzZXQpIHsKLSAgICAgICAgICAgICAgICBsb2coIlBB
U1M6IHJhbmdlLnN0YXJ0T2Zmc2V0ID09ICIgKyBfX2V4cGVjdGVkT2Zmc2V0ICsgIi4iKTsKLSAg
ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgbG9nKCJGQUlMOiByYW5nZS5zdGFy
dE9mZnNldCA9PSAiICsgcmFuZ2Uuc3RhcnRPZmZzZXQgKyAiLiIpOworICAgICAgICAgICAgLy8g
ZG8gYW4gYWN0dWFsIGNoZWNrCisgICAgICAgICAgICBmdW5jdGlvbiBjaGVjayh0aHVuaywgbWVz
c2FnZSkgeworICAgICAgICAgICAgICAgIGlmICh0aHVuaygpKQorICAgICAgICAgICAgICAgICAg
ICB0ZXN0UGFzc2VkKG1lc3NhZ2UpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICAgICAgdGVzdEZhaWxlZChtZXNzYWdlKTsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGNoZWNrKGRvZXNDb250YWluZXJQYXNzLCAiUmFuZ2Uuc3RhcnRDb250YWluZXIgY2hlY2sgKGdv
dCAiICsgcmFuZ2Uuc3RhcnRDb250YWluZXIgKyAiLCBleHBlY3RlZCAiICsgZXhwZWN0ZWRDb250
YWluZXIgKyAiKSIpOworICAgICAgICAgICAgY2hlY2soZG9lc09mZnNldFBhc3MsICJSYW5nZS5z
dGFydE9mZnNldCBjaGVjayAoZ290ICIgKyByYW5nZS5zdGFydE9mZnNldCArICIsIGV4cGVjdGVk
ICIgKyBleHBlY3RlZE9mZnNldCArICIpIik7CiAgICAgICAgIH0KIAotICAgICAgICB3aW5kb3cu
b25sb2FkID0gZnVuY3Rpb24oKQotICAgICAgICB7Ci0gICAgICAgICAgICBlbGVtZW50ID0gZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QnKTsKLSAgICAgICAgICAgIHRleHQgPSBlbGVtZW50
LmZpcnN0Q2hpbGQ7CisgICAgICAgIGZ1bmN0aW9uIHNjcm9sbFJlbGF0aXZlVG9CYXNlbGluZSh4
LCB5KSB7CisgICAgICAgICAgICB3aW5kb3cuc2Nyb2xsVG8oYmFzZWxpbmVQb3MueCArIHgsIGJh
c2VsaW5lUG9zLnkgKyB5KTsKKyAgICAgICAgfQogCi0gICAgICAgICAgICB2YXIgcG9zaXRpb25U
b1Rlc3QgPSB7IHg6IDE1LCB5OiAxNSB9OworICAgICAgICB0ZXN0KDAsIDAsIDApOworICAgICAg
ICB0ZXN0KDEyLCAwLCAyNSk7CisgICAgICAgIHRlc3QoMiwgMjUsIDApOworICAgICAgICB0ZXN0
KDE0LCAyNSwgMjUpOworICAgICAgICBkZWJ1ZygiICIpOworICAgIH0KIAotICAgICAgICAgICAg
bG9nKCJUZXN0aW5nIHdpdGggbm8gc2Nyb2xsIik7Ci0gICAgICAgICAgICB0ZXN0KHBvc2l0aW9u
VG9UZXN0LCAiZWxlbWVudC5maXJzdENoaWxkIiwgIjAiKTsKKyAgICB2YXIgcmVjdFRvcCA9IGVs
ZW1lbnRUb3AuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksCisgICAgICAgIHJlY3RCb3R0b20gPSBl
bGVtZW50Qm90dG9tLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLAorICAgICAgICAvLyBTdWJ0cmFj
dCBzb21lIGRpc3RhbmNlIHNvIHdlIGFyZW4ndCBpbiB0aGUgdmVyeSB0b3AgbGVmdCBvZiB0aGUg
dGFyZ2V0LgorICAgICAgICB0b3BCYXNlbGluZSA9IHsgeDogcmVjdFRvcC5sZWZ0IC0gOCwgeTog
cmVjdFRvcC50b3AgLSA4IH0sCisgICAgICAgIGJvdHRvbUJhc2VsaW5lID0geyB4OiByZWN0Qm90
dG9tLmxlZnQgLSA4LCB5OiByZWN0Qm90dG9tLnRvcCAtIDggfTsKIAotICAgICAgICAgICAgbG9n
KCJUZXN0IHNjcm9sbGluZyBkb3duIik7Ci0gICAgICAgICAgICB3aW5kb3cuc2Nyb2xsVG8oMCwg
MjUpOwotICAgICAgICAgICAgdGVzdChwb3NpdGlvblRvVGVzdCwgImVsZW1lbnQuZmlyc3RDaGls
ZCIsICIxMiIpOworICAgICAvLyBUZXN0aW5nIGluc2lkZSBpbml0aWFsIGNvbnRhaW5pbmcgYmxv
Y2sgKHRvcCBsZWZ0KQorICAgIHRlc3RzV2l0aEJhc2VsaW5lKHRvcEJhc2VsaW5lLCBlbGVtZW50
VG9wLmZpcnN0Q2hpbGQpOwogCi0gICAgICAgICAgICBsb2coIlRlc3Qgc2Nyb2xsaW5nIHJpZ2h0
Iik7Ci0gICAgICAgICAgICB3aW5kb3cuc2Nyb2xsVG8oMjUsIDApOwotICAgICAgICAgICAgdGVz
dChwb3NpdGlvblRvVGVzdCwgImVsZW1lbnQuZmlyc3RDaGlsZCIsICIyIik7CisgICAgLy8gVGVz
dGluZyBvdXRzaWRlIGluaXRpYWwgY29udGFpbmluZyBibG9jayAobWlkLXBhZ2UpCisgICAgdGVz
dHNXaXRoQmFzZWxpbmUoYm90dG9tQmFzZWxpbmUsIGVsZW1lbnRCb3R0b20uZmlyc3RDaGlsZCk7
CiAKLSAgICAgICAgICAgIGxvZygiVGVzdCBzY3JvbGxpbmcgZG93biBhbmQgcmlnaHQiKTsKLSAg
ICAgICAgICAgIHdpbmRvdy5zY3JvbGxUbygyNSwgMjUpOwotICAgICAgICAgICAgdGVzdChwb3Np
dGlvblRvVGVzdCwgImVsZW1lbnQuZmlyc3RDaGlsZCIsICIxNCIpOworICAgIGlmICh3aW5kb3cu
bGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICAgICAgdmFyIGFyZWEgPSBkb2N1bWVudC5nZXRF
bGVtZW50QnlJZCgndGVzdEFyZWEnKTsKKyAgICAgICAgYXJlYS5wYXJlbnROb2RlLnJlbW92ZUNo
aWxkKGFyZWEpOworICAgIH0KIAotICAgICAgICAgICAgc3dhcEluTG9nKCk7Ci0gICAgICAgIH0K
LSAgICA8L3NjcmlwdD4KLTwvaGVhZD4KLTxib2R5PgotPGRpdiBpZD0idGVzdCI+eHh4eHggeHh4
eHggeHh4eHggeHh4eHg8L2Rpdj4KLTxkaXYgaWQ9InB1c2hlciI+VGhpcyBib3ggaXMgaGVyZSB0
byBjcmVhdGUgc2Nyb2xsYmFycy48L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KKyAgICBzdWNjZXNz
ZnVsbHlQYXJzZWQgPSB0cnVlOworPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vanMv
cmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cg==
</data>
<flag name="review"
          id="20676"
          type_id="1"
          status="+"
          setter="mrowe"
    />
          </attachment>
      

    </bug>

</bugzilla>