<?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>24122</bug_id>
          
          <creation_ts>2009-02-24 07:40:10 -0800</creation_ts>
          <short_desc>REGRESSION: DOM Range extractContents/deleteContents bug</short_desc>
          <delta_ts>2009-03-28 10:02:16 -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>http://tinymce.moxiecode.com/safari/range_tests.html</bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar, Regression</keywords>
          <priority>P1</priority>
          <bug_severity>Critical</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Johan &quot;Spocke&quot; Sörlin">spocke</reporter>
          <assigned_to name="Alexey Proskuryakov">ap</assigned_to>
          <cc>ap</cc>
    
    <cc>justin.garcia</cc>
    
    <cc>nicksantos</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>110735</commentid>
    <comment_count>0</comment_count>
    <who name="Johan &quot;Spocke&quot; Sörlin">spocke</who>
    <bug_when>2009-02-24 07:40:10 -0800</bug_when>
    <thetext>The current implementation of the DOM Range is not compatible with other browsers or previous versions of WebKit.

If you test the attached test case in Safari 3, FF 3, Opera 9 it will only fail on one point the cloneContents but on the latest WebKit it fails on both extractContents and deleteContents.

If you run the same tests on the latest nightly of FF and the latest build of Opera it will pass all tests so the attached test case is compatible to the spec or at least to the latest implementations by other browser vendors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>110737</commentid>
    <comment_count>1</comment_count>
      <attachid>27917</attachid>
    <who name="Johan &quot;Spocke&quot; Sörlin">spocke</who>
    <bug_when>2009-02-24 07:45:35 -0800</bug_when>
    <thetext>Created attachment 27917
Test case for the DOM Range implementation

Run this test file in latest WebKit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>110738</commentid>
    <comment_count>2</comment_count>
    <who name="Johan &quot;Spocke&quot; Sörlin">spocke</who>
    <bug_when>2009-02-24 07:49:11 -0800</bug_when>
    <thetext>Check the URL not the attached file since it requests things using https and it fails from https.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>110942</commentid>
    <comment_count>3</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-02-25 06:53:30 -0800</bug_when>
    <thetext>Confirmed that the test passes in Safari/WebKit 3.2.1 and in Minefield, but fails in r41181.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>113351</commentid>
    <comment_count>4</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-03-12 02:40:42 -0700</bug_when>
    <thetext>&lt;rdar://problem/6674179&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>114406</commentid>
    <comment_count>5</comment_count>
      <attachid>28771</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-03-19 16:36:22 -0700</bug_when>
    <thetext>Created attachment 28771
proposed fix

I couldn&apos;t find any remnants of code that could make this work, so it&apos;s surprising that this is a regression. Perhaps this code was removed in hopes that Document::textRemoved() would automatically take care of fixing the range? It does not, and it is not supposed to - I&apos;ve verified that a range that&apos;s equal to the one that deleteContents is invoked on ends up being different from it in Firefox:

var range1 = something
var range2 = the same
range1.deleteContents()
// Both ranges are fixed, but differently - range1 is always collapsed, but range2 may not be.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>114422</commentid>
    <comment_count>6</comment_count>
      <attachid>28771</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-03-19 18:04:14 -0700</bug_when>
    <thetext>Comment on attachment 28771
proposed fix

r=me

I was probably the one who broke this. Thanks for fixing it!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>114457</commentid>
    <comment_count>7</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-03-20 01:19:00 -0700</bug_when>
    <thetext>*** Bug 24677 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>114458</commentid>
    <comment_count>8</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-03-20 01:19:23 -0700</bug_when>
    <thetext>Committed &lt;http://trac.webkit.org/changeset/41855&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>115682</commentid>
    <comment_count>9</comment_count>
    <who name="Julie Parent">jparent</who>
    <bug_when>2009-03-28 10:02:16 -0700</bug_when>
    <thetext>*** Bug 24896 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>27917</attachid>
            <date>2009-02-24 07:45:35 -0800</date>
            <delta_ts>2009-02-24 07:53:56 -0800</delta_ts>
            <desc>Test case for the DOM Range implementation</desc>
            <filename>range_tests.html</filename>
            <type>text/html</type>
            <size>22586</size>
            <attacher name="Johan &quot;Spocke&quot; Sörlin">spocke</attacher>
            
              <data encoding="base64">PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFs
Ly9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25h
bC5kdGQiPg0KPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiPg0KPGhl
YWQ+DQo8dGl0bGU+VW5pdCB0ZXN0cyBmb3IgRE9NIHJhbmdlPC90aXRsZT4NCjxsaW5rIHJlbD0i
c3R5bGVzaGVldCIgaHJlZj0iaHR0cDovL2Rldi5qcXVlcnkuY29tL3ZpZXcvdHJ1bmsvcXVuaXQv
dGVzdHN1aXRlLmNzcyIgdHlwZT0idGV4dC9jc3MiIG1lZGlhPSJzY3JlZW4iIC8+DQo8c2NyaXB0
IHNyYz0iaHR0cDovL2NvZGUuanF1ZXJ5LmNvbS9qcXVlcnktbGF0ZXN0LmpzIj48L3NjcmlwdD4N
CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHA6Ly9qcXVlcnlqcy5nb29n
bGVjb2RlLmNvbS9zdm4vdHJ1bmsvcXVuaXQvdGVzdHJ1bm5lci5qcyI+PC9zY3JpcHQ+DQo8L2hl
YWQ+DQo8Ym9keT4NCgk8aDE+VW5pdCB0ZXN0cyBmb3IgRE9NIHJhbmdlPC9oMT4NCgk8aDIgaWQ9
ImJhbm5lciI+PC9oMj4NCgk8aDIgaWQ9InVzZXJBZ2VudCI+PC9oMj4NCgk8b2wgaWQ9InRlc3Rz
Ij48L29sPg0KCTxkaXYgaWQ9Im1haW4iPjwvZGl2Pg0KCTxkaXYgaWQ9InNhbXBsZSI+DQoJCTxw
IGlkPSJmaXJzdCI+Zmlyc3Q8IS0tbm90LS0+IHN0cm9uZyA8IS0tIC0tPjxzdHJvbmcgaWQ9InN0
cm9uZyI+c3Ryb25nPC9zdHJvbmc+IHNlY29uZCA8ZW0gaWQ9ImVtIj5lbTwvZW0+IHN0cm9uZy48
L3A+DQoJCTxwIGlkPSJzZWNvbmQiPmJhcjwvcD4NCgkJPHAgaWQ9InRyYXZlcnNlIj48Yj48ZW0g
aWQ9ImVtIj5zb21lIHRleHQ8L2VtPjwvYj48ZW0+ZW0gdGV4dDwvZW0+bW9yZSB0ZXh0PC9wPg0K
CQk8dGFibGUgaWQ9InRhYmxlIiB3aWR0aD0iMzAwIj4NCgkJCTx0cj4NCgkJCQk8dGQ+MTwvdGQ+
DQoJCQkJPHRkIGlkPSJ0d28iPmFiYzwvdGQ+DQoJCQk8L3RyPg0KCQkJPHRyPg0KCQkJCTx0ZD4z
PC90ZD4NCgkJCQk8dGQ+NDwvdGQ+DQoJCQk8L3RyPg0KCQk8L3RhYmxlPg0KCQk8cCBpZD0ibGFz
dCI+dGV4dGFiYzxzcGFuPnNwYW48L3NwYW4+PC9wPg0KCTwvZGl2Pg0KDQo8c2NyaXB0IHR5cGU9
InRleHQvamF2YXNjcmlwdCI+DQokKHdpbmRvdykubG9hZChmdW5jdGlvbigpIHsNCglmdW5jdGlv
biBjcmVhdGVSbmcoKSB7DQoJCXJldHVybiBkb2N1bWVudC5jcmVhdGVSYW5nZSgpOw0KCX07DQoN
CglmdW5jdGlvbiBnZXRIVE1MKGNvKSB7DQoJCXZhciBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCdkaXYnKSwgaDsNCg0KCQlpZiAoIWNvKQ0KCQkJcmV0dXJuICdudWxsJzsNCg0KCQlkaXYu
YXBwZW5kQ2hpbGQoY28uY2xvbmVOb2RlKHRydWUpKTsNCgkJaCA9IGRpdi5pbm5lckhUTUwudG9M
b3dlckNhc2UoKTsNCg0KCQloID0gaC5yZXBsYWNlKC9bXHJcblx0XS9nLCAnJyk7IC8vIFJlbW92
ZSBsaW5lIGZlZWRzIGFuZCB0YWJzDQoJCWggPSBoLnJlcGxhY2UoLyAoXHcrKT0oW15cIl1bXlxz
Pl0qKS9naSwgJyAkMT0iJDIiJyk7IC8vIFJlc3RvcmUgYXR0cmlicyBvbiBJRQ0KDQoJCXJldHVy
biBoOw0KCX07DQoNCglmdW5jdGlvbiBzZXR1cCgpIHsNCgkJaWYgKHRoaXMub3JnSFRNTCkNCgkJ
CWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzYW1wbGUnKS5pbm5lckhUTUwgPSB0aGlzLm9yZ0hU
TUw7DQoNCgkJLy8gUmVtb3ZlIHdoaXRlc3BhY2Ugbm9kZXMgdG8gbm9ybWFsaXplIElFIGFuZCBv
dGhlciBicm93c2Vycw0KCQlmdW5jdGlvbiBjbGVhbihuKSB7DQoJCQl2YXIgaTsNCg0KCQkJaWYg
KG4ubm9kZVR5cGUgPT0gMyAmJiAvXltcc10rJC8udGVzdChuLm5vZGVWYWx1ZSkpDQoJCQkJcmV0
dXJuIG4ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChuKTsNCg0KCQkJZm9yIChpID0gbi5jaGlsZE5v
ZGVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKQ0KCQkJCWNsZWFuKG4uY2hpbGROb2Rlc1tpXSk7
DQoJCX07DQoNCgkJY2xlYW4oZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NhbXBsZScpKTsNCg0K
CQl0aGlzLm9yZ0hUTUwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2FtcGxlJykuaW5uZXJI
VE1MOw0KCX07DQoNCgl0ZXN0KCJJbml0aWFsIHN0YXRlIiwgZnVuY3Rpb24oKSB7DQoJCXZhciBy
ID0gY3JlYXRlUm5nKCk7DQoNCgkJc2V0dXAoKTsNCgkJZXhwZWN0KDUpOw0KDQoJCWVxdWFscyhy
LnN0YXJ0Q29udGFpbmVyLCBkb2N1bWVudCkNCgkJZXF1YWxzKHIuc3RhcnRPZmZzZXQsIDApDQoJ
CWVxdWFscyhyLmVuZENvbnRhaW5lciwgZG9jdW1lbnQpDQoJCWVxdWFscyhyLmVuZE9mZnNldCwg
MCkNCgkJZXF1YWxzKHIuY29tbW9uQW5jZXN0b3JDb250YWluZXIsIGRvY3VtZW50KQ0KCX0pOw0K
DQoJdGVzdCgic2V0U3RhcnRTZXRFbmQiLCBmdW5jdGlvbigpIHsNCgkJdmFyIHIgPSBjcmVhdGVS
bmcoKTsNCg0KCQlzZXR1cCgpOw0KCQlleHBlY3QoMTIpOw0KDQoJCXIuc2V0U3RhcnQoZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoJ2ZpcnN0JykuZmlyc3RDaGlsZCwgMSk7DQoJCXIuc2V0RW5kKGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCdzdHJvbmcnKS5maXJzdENoaWxkLCAzKTsNCg0KCQllcXVh
bHMoci5zdGFydENvbnRhaW5lci5ub2RlVmFsdWUsICdmaXJzdCcpDQoJCWVxdWFscyhyLnN0YXJ0
Q29udGFpbmVyLm5vZGVUeXBlLCAzKQ0KCQllcXVhbHMoci5zdGFydE9mZnNldCwgMSkNCgkJZXF1
YWxzKHIuZW5kQ29udGFpbmVyLm5vZGVWYWx1ZSwgJ3N0cm9uZycpDQoJCWVxdWFscyhyLmVuZENv
bnRhaW5lci5ub2RlVHlwZSwgMykNCgkJZXF1YWxzKHIuZW5kT2Zmc2V0LCAzKQ0KCQllcXVhbHMo
ci5jb21tb25BbmNlc3RvckNvbnRhaW5lci5ub2RlTmFtZSwgJ1AnKQ0KDQoJCXIuc2V0U3RhcnQo
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZpcnN0JyksIDApOw0KCQlyLnNldEVuZChkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgnc3Ryb25nJyksIDApOw0KDQoJCWVxdWFscyhyLnN0YXJ0Q29udGFp
bmVyLm5vZGVOYW1lLCAnUCcpDQoJCWVxdWFscyhyLnN0YXJ0T2Zmc2V0LCAwKQ0KCQllcXVhbHMo
ci5lbmRDb250YWluZXIubm9kZU5hbWUsICdTVFJPTkcnKQ0KCQllcXVhbHMoci5lbmRPZmZzZXQs
IDApDQoJCWVxdWFscyhyLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyLm5vZGVOYW1lLCAnUCcpDQoJ
fSk7DQoNCgl0ZXN0KCJzZXRTdGFydEJlZm9yZVNldEVuZEFmdGVyIiwgZnVuY3Rpb24oKSB7DQoJ
CXZhciByID0gY3JlYXRlUm5nKCk7DQoNCgkJc2V0dXAoKTsNCgkJZXhwZWN0KDUpOw0KDQoJCXIu
c2V0U3RhcnRCZWZvcmUoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZpcnN0JykpOw0KCQlyLnNl
dEVuZEFmdGVyKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzdHJvbmcnKSk7DQoNCgkJZXF1YWxz
KHIuc3RhcnRDb250YWluZXIubm9kZU5hbWUsICdESVYnKQ0KCQllcXVhbHMoci5zdGFydE9mZnNl
dCwgMCkNCgkJZXF1YWxzKHIuZW5kQ29udGFpbmVyLm5vZGVOYW1lLCAnUCcpDQoJCWVxdWFscyhy
LmVuZE9mZnNldCwgNSkNCgkJZXF1YWxzKHIuY29tbW9uQW5jZXN0b3JDb250YWluZXIubm9kZU5h
bWUsICdESVYnKQ0KCX0pOw0KDQoJdGVzdCgidGVzdF9zZXRTdGFydEFmdGVyU2V0RW5kQmVmb3Jl
IiwgZnVuY3Rpb24oKSB7DQoJCXZhciByID0gY3JlYXRlUm5nKCk7DQoNCgkJc2V0dXAoKTsNCgkJ
ZXhwZWN0KDUpOw0KDQoJCXIuc2V0U3RhcnRBZnRlcihkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgn
c3Ryb25nJykpOw0KCQlyLnNldEVuZEJlZm9yZShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZW0n
KSk7DQoNCgkJZXF1YWxzKHIuc3RhcnRDb250YWluZXIubm9kZU5hbWUsICdQJykNCgkJZXF1YWxz
KHIuc3RhcnRPZmZzZXQsIDUpDQoJCWVxdWFscyhyLmVuZENvbnRhaW5lci5ub2RlTmFtZSwgJ1An
KQ0KCQllcXVhbHMoci5lbmRPZmZzZXQsIDYpDQoJCWVxdWFscyhyLmNvbW1vbkFuY2VzdG9yQ29u
dGFpbmVyLm5vZGVOYW1lLCAnUCcpDQoJfSk7DQoNCgl0ZXN0KCJ0ZXN0X2NvbGxhcHNlIiwgZnVu
Y3Rpb24oKSB7DQoJCXZhciByID0gY3JlYXRlUm5nKCk7DQoNCgkJc2V0dXAoKTsNCgkJZXhwZWN0
KDEwKTsNCg0KCQlyLnNldFN0YXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzdHJvbmcnKS5m
aXJzdENoaWxkLCAwKTsNCgkJci5zZXRFbmQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3N0cm9u
ZycpLmZpcnN0Q2hpbGQsIDYpOw0KDQoJCXIuY29sbGFwc2UodHJ1ZSk7DQoNCgkJZXF1YWxzKHIu
c3RhcnRDb250YWluZXIubm9kZVR5cGUsIDMpDQoJCWVxdWFscyhyLnN0YXJ0T2Zmc2V0LCAwKQ0K
CQllcXVhbHMoci5lbmRDb250YWluZXIubm9kZVR5cGUsIDMpDQoJCWVxdWFscyhyLmVuZE9mZnNl
dCwgMCkNCgkJZXF1YWxzKHIuY29tbW9uQW5jZXN0b3JDb250YWluZXIubm9kZVR5cGUsIDMpDQoN
CgkJci5zZXRTdGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3Ryb25nJykuZmlyc3RDaGls
ZCwgMCk7DQoJCXIuc2V0RW5kKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzdHJvbmcnKS5maXJz
dENoaWxkLCA2KTsNCg0KCQlyLmNvbGxhcHNlKGZhbHNlKTsNCg0KCQllcXVhbHMoci5zdGFydENv
bnRhaW5lci5ub2RlVHlwZSwgMykNCgkJZXF1YWxzKHIuc3RhcnRPZmZzZXQsIDYpDQoJCWVxdWFs
cyhyLmVuZENvbnRhaW5lci5ub2RlVHlwZSwgMykNCgkJZXF1YWxzKHIuZW5kT2Zmc2V0LCA2KQ0K
CQllcXVhbHMoci5jb21tb25BbmNlc3RvckNvbnRhaW5lci5ub2RlVHlwZSwgMykNCgl9KTsNCg0K
CXRlc3QoInRlc3Rfc2VsZWN0Tm9kZSIsIGZ1bmN0aW9uKCkgew0KCQl2YXIgciA9IGNyZWF0ZVJu
ZygpOw0KDQoJCXNldHVwKCk7DQoJCWV4cGVjdCg0KTsNCg0KCQlyLnNlbGVjdE5vZGUoZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoJ3N0cm9uZycpLmZpcnN0Q2hpbGQpOw0KDQoJCWVxdWFscyhyLnN0
YXJ0Q29udGFpbmVyLm5vZGVUeXBlLCAxKQ0KCQllcXVhbHMoci5zdGFydE9mZnNldCwgMCkNCgkJ
ZXF1YWxzKHIuZW5kQ29udGFpbmVyLm5vZGVUeXBlLCAxKQ0KCQllcXVhbHMoci5lbmRPZmZzZXQs
IDEpDQoJfSk7DQoNCgl0ZXN0KCJ0ZXN0X3NlbGVjdE5vZGVDb250ZW50cyIsIGZ1bmN0aW9uKCkg
ew0KCQl2YXIgciA9IGNyZWF0ZVJuZygpOw0KDQoJCXNldHVwKCk7DQoJCWV4cGVjdCg4KTsNCg0K
CQlyLnNlbGVjdE5vZGVDb250ZW50cyhkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3Ryb25nJyku
Zmlyc3RDaGlsZCk7DQoNCgkJZXF1YWxzKHIuc3RhcnRDb250YWluZXIubm9kZVR5cGUsIDMpDQoJ
CWVxdWFscyhyLnN0YXJ0T2Zmc2V0LCAwKQ0KCQllcXVhbHMoci5lbmRDb250YWluZXIubm9kZVR5
cGUsIDMpDQoJCWVxdWFscyhyLmVuZE9mZnNldCwgNikNCg0KCQlyLnNlbGVjdE5vZGVDb250ZW50
cyhkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZmlyc3QnKSk7DQoNCgkJZXF1YWxzKHIuc3RhcnRD
b250YWluZXIubm9kZVR5cGUsIDEpDQoJCWVxdWFscyhyLnN0YXJ0T2Zmc2V0LCAwKQ0KCQllcXVh
bHMoci5lbmRDb250YWluZXIubm9kZVR5cGUsIDEpDQoJCWVxdWFscyhyLmVuZE9mZnNldCwgOCkN
Cgl9KTsNCg0KCXRlc3QoInRlc3RfaW5zZXJ0Tm9kZSIsIGZ1bmN0aW9uKCkgew0KCQl2YXIgciA9
IGNyZWF0ZVJuZygpOw0KDQoJCXNldHVwKCk7DQoJCWV4cGVjdCg0KTsNCg0KCQlyLnNldFN0YXJ0
KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmaXJzdCcpLmZpcnN0Q2hpbGQsIDEpOw0KCQlyLnNl
dEVuZChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZmlyc3QnKS5maXJzdENoaWxkLCAyKTsNCgkJ
ci5pbnNlcnROb2RlKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCdBQkMnKSk7DQoNCgkJZXF1YWxz
KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmaXJzdCcpLmNoaWxkTm9kZXNbMF0ubm9kZVZhbHVl
LCAnZicpDQoJCWVxdWFscyhkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZmlyc3QnKS5jaGlsZE5v
ZGVzWzFdLm5vZGVWYWx1ZSwgJ0FCQycpDQoJCWVxdWFscyhkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgnZmlyc3QnKS5jaGlsZE5vZGVzWzJdLm5vZGVWYWx1ZSwgJ2lyc3QnKQ0KDQoJCXIuc2VsZWN0
Tm9kZShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3Ryb25nJykpOw0KCQlyLmluc2VydE5vZGUo
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpKTsNCg0KCQllcXVhbHMoZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoJ3N0cm9uZycpLnByZXZpb3VzU2libGluZy5ub2RlTmFtZSwgJ1NQQU4nKQ0K
CX0pOw0KDQoJdGVzdCgidGVzdF9jbG9uZVJhbmdlIiwgZnVuY3Rpb24oKSB7DQoJCXZhciByID0g
Y3JlYXRlUm5nKCk7DQoNCgkJc2V0dXAoKTsNCgkJZXhwZWN0KDYpOw0KDQoJCXIuc2V0U3RhcnQo
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZpcnN0JykuZmlyc3RDaGlsZCwgMSk7DQoJCXIuc2V0
RW5kKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzdHJvbmcnKS5maXJzdENoaWxkLCAyKTsNCg0K
CQl2YXIgcjIgPSByLmNsb25lUmFuZ2UoKTsNCg0KCQllcXVhbHMocjIuc3RhcnRDb250YWluZXIu
bm9kZVR5cGUsIDMpDQoJCWVxdWFscyhyMi5zdGFydE9mZnNldCwgMSkNCgkJZXF1YWxzKHIyLmVu
ZENvbnRhaW5lci5ub2RlVHlwZSwgMykNCgkJZXF1YWxzKHIyLmVuZE9mZnNldCwgMikNCgkJZXF1
YWxzKHIyLmNvbGxhcHNlZCwgZmFsc2UpDQoJCWVxdWFscyhyMi5jb21tb25BbmNlc3RvckNvbnRh
aW5lci5ub2RlTmFtZSwgJ1AnKQ0KCX0pOw0KDQoJdGVzdCgidGVzdF9jbG9uZUNvbnRlbnRzIiwg
ZnVuY3Rpb24oKSB7DQoJCXZhciByID0gY3JlYXRlUm5nKCk7DQoNCgkJc2V0dXAoKTsNCgkJZXhw
ZWN0KDc3KTsNCg0KCQlyLnNldFN0YXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmaXJzdCcp
LmZpcnN0Q2hpbGQsIDEpOw0KCQlyLnNldEVuZChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndHdv
JykuZmlyc3RDaGlsZCwgMik7DQoNCgkJZXF1YWxzKGdldEhUTUwoci5jbG9uZUNvbnRlbnRzKCkp
LCAnPHAgaWQ9ImZpcnN0Ij5pcnN0PCEtLW5vdC0tPiBzdHJvbmcgPCEtLSAtLT48c3Ryb25nIGlk
PSJzdHJvbmciPnN0cm9uZzwvc3Ryb25nPiBzZWNvbmQgPGVtIGlkPSJlbSI+ZW08L2VtPiBzdHJv
bmcuPC9wPjxwIGlkPSJzZWNvbmQiPmJhcjwvcD48cCBpZD0idHJhdmVyc2UiPjxiPjxlbSBpZD0i
ZW0iPnNvbWUgdGV4dDwvZW0+PC9iPjxlbT5lbSB0ZXh0PC9lbT5tb3JlIHRleHQ8L3A+PHRhYmxl
IGlkPSJ0YWJsZSIgd2lkdGg9IjMwMCI+PHRib2R5Pjx0cj48dGQ+MTwvdGQ+PHRkIGlkPSJ0d28i
PmFiPC90ZD48L3RyPjwvdGJvZHk+PC90YWJsZT4nKQ0KCQllcXVhbHMoci5zdGFydENvbnRhaW5l
ci5ub2RlVHlwZSwgMykNCgkJZXF1YWxzKHIuc3RhcnRPZmZzZXQsIDEpDQoJCWVxdWFscyhyLmVu
ZENvbnRhaW5lci5ub2RlVHlwZSwgMykNCgkJZXF1YWxzKHIuZW5kT2Zmc2V0LCAyKQ0KCQllcXVh
bHMoci5jb2xsYXBzZWQsIGZhbHNlKQ0KCQllcXVhbHMoci5jb21tb25BbmNlc3RvckNvbnRhaW5l
ci5ub2RlTmFtZSwgJ0RJVicpDQoNCgkJci5zZXRTdGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgndHdvJykuZmlyc3RDaGlsZCwgMSk7DQoJCXIuc2V0RW5kKGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCdsYXN0JykuZmlyc3RDaGlsZCwgMik7DQoNCgkJZXF1YWxzKGdldEhUTUwoci5jbG9uZUNv
bnRlbnRzKCkpLCAnPHRhYmxlIGlkPSJ0YWJsZSIgd2lkdGg9IjMwMCI+PHRib2R5Pjx0cj48dGQg
aWQ9InR3byI+YmM8L3RkPjwvdHI+PHRyPjx0ZD4zPC90ZD48dGQ+NDwvdGQ+PC90cj48L3Rib2R5
PjwvdGFibGU+PHAgaWQ9Imxhc3QiPnRlPC9wPicpDQoJCWVxdWFscyhyLnN0YXJ0Q29udGFpbmVy
Lm5vZGVUeXBlLCAzKQ0KCQllcXVhbHMoci5zdGFydE9mZnNldCwgMSkNCgkJZXF1YWxzKHIuZW5k
Q29udGFpbmVyLm5vZGVUeXBlLCAzKQ0KCQllcXVhbHMoci5lbmRPZmZzZXQsIDIpDQoJCWVxdWFs
cyhyLmNvbGxhcHNlZCwgZmFsc2UpDQoJCWVxdWFscyhyLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVy
Lm5vZGVOYW1lLCAnRElWJykNCg0KCQlyLnNldFN0YXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCdmaXJzdCcpLmZpcnN0Q2hpbGQsIDEpOw0KCQlyLnNldEVuZChkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgnZmlyc3QnKS5sYXN0Q2hpbGQsIDQpOw0KDQoJCWVxdWFscyhnZXRIVE1MKHIuY2xvbmVD
b250ZW50cygpKSwgJ2lyc3Q8IS0tbm90LS0+IHN0cm9uZyA8IS0tIC0tPjxzdHJvbmcgaWQ9InN0
cm9uZyI+c3Ryb25nPC9zdHJvbmc+IHNlY29uZCA8ZW0gaWQ9ImVtIj5lbTwvZW0+IHN0cicpDQoJ
CWVxdWFscyhyLnN0YXJ0Q29udGFpbmVyLm5vZGVUeXBlLCAzKQ0KCQllcXVhbHMoci5zdGFydE9m
ZnNldCwgMSkNCgkJZXF1YWxzKHIuZW5kQ29udGFpbmVyLm5vZGVUeXBlLCAzKQ0KCQllcXVhbHMo
ci5lbmRPZmZzZXQsIDQpDQoJCWVxdWFscyhyLmNvbGxhcHNlZCwgZmFsc2UpDQoJCWVxdWFscyhy
LmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyLm5vZGVOYW1lLCAnUCcpDQoNCgkJci5zZXRTdGFydChk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZmlyc3QnKS5maXJzdENoaWxkLCAxKTsNCgkJci5zZXRF
bmQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZpcnN0JykuZmlyc3RDaGlsZCwgNCk7DQoNCgkJ
ZXF1YWxzKGdldEhUTUwoci5jbG9uZUNvbnRlbnRzKCkpLCAnaXJzJykNCgkJZXF1YWxzKHIuc3Rh
cnRDb250YWluZXIubm9kZVR5cGUsIDMpDQoJCWVxdWFscyhyLnN0YXJ0T2Zmc2V0LCAxKQ0KCQll
cXVhbHMoci5lbmRDb250YWluZXIubm9kZVR5cGUsIDMpDQoJCWVxdWFscyhyLmVuZE9mZnNldCwg
NCkNCgkJZXF1YWxzKHIuY29sbGFwc2VkLCBmYWxzZSkNCgkJZXF1YWxzKHIuY29tbW9uQW5jZXN0
b3JDb250YWluZXIubm9kZVR5cGUsIDMpDQoNCgkJci5zZXRTdGFydChkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgnZmlyc3QnKSwgMCk7DQoJCXIuc2V0RW5kKGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCdsYXN0JyksIDApOw0KDQoJCWVxdWFscyhnZXRIVE1MKHIuY2xvbmVDb250ZW50cygpKSwgJzxw
IGlkPSJmaXJzdCI+Zmlyc3Q8IS0tbm90LS0+IHN0cm9uZyA8IS0tIC0tPjxzdHJvbmcgaWQ9InN0
cm9uZyI+c3Ryb25nPC9zdHJvbmc+IHNlY29uZCA8ZW0gaWQ9ImVtIj5lbTwvZW0+IHN0cm9uZy48
L3A+PHAgaWQ9InNlY29uZCI+YmFyPC9wPjxwIGlkPSJ0cmF2ZXJzZSI+PGI+PGVtIGlkPSJlbSI+
c29tZSB0ZXh0PC9lbT48L2I+PGVtPmVtIHRleHQ8L2VtPm1vcmUgdGV4dDwvcD48dGFibGUgaWQ9
InRhYmxlIiB3aWR0aD0iMzAwIj48dGJvZHk+PHRyPjx0ZD4xPC90ZD48dGQgaWQ9InR3byI+YWJj
PC90ZD48L3RyPjx0cj48dGQ+MzwvdGQ+PHRkPjQ8L3RkPjwvdHI+PC90Ym9keT48L3RhYmxlPjxw
IGlkPVwibGFzdFwiPjwvcD4nKQ0KCQllcXVhbHMoci5zdGFydENvbnRhaW5lci5ub2RlVHlwZSwg
MSkNCgkJZXF1YWxzKHIuc3RhcnRPZmZzZXQsIDApDQoJCWVxdWFscyhyLmVuZENvbnRhaW5lci5u
b2RlVHlwZSwgMSkNCgkJZXF1YWxzKHIuZW5kT2Zmc2V0LCAwKQ0KCQllcXVhbHMoci5jb2xsYXBz
ZWQsIGZhbHNlKQ0KCQllcXVhbHMoci5jb21tb25BbmNlc3RvckNvbnRhaW5lci5ub2RlVHlwZSwg
MSkNCg0KCQlyLnNldFN0YXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmaXJzdCcpLCAxKTsN
CgkJci5zZXRFbmQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xhc3QnKSwgMSk7DQoNCgkJZXF1
YWxzKGdldEhUTUwoci5jbG9uZUNvbnRlbnRzKCkpLCAnPHAgaWQ9ImZpcnN0Ij48IS0tbm90LS0+
IHN0cm9uZyA8IS0tIC0tPjxzdHJvbmcgaWQ9InN0cm9uZyI+c3Ryb25nPC9zdHJvbmc+IHNlY29u
ZCA8ZW0gaWQ9ImVtIj5lbTwvZW0+IHN0cm9uZy48L3A+PHAgaWQ9InNlY29uZCI+YmFyPC9wPjxw
IGlkPSJ0cmF2ZXJzZSI+PGI+PGVtIGlkPSJlbSI+c29tZSB0ZXh0PC9lbT48L2I+PGVtPmVtIHRl
eHQ8L2VtPm1vcmUgdGV4dDwvcD48dGFibGUgaWQ9InRhYmxlIiB3aWR0aD0iMzAwIj48dGJvZHk+
PHRyPjx0ZD4xPC90ZD48dGQgaWQ9InR3byI+YWJjPC90ZD48L3RyPjx0cj48dGQ+MzwvdGQ+PHRk
PjQ8L3RkPjwvdHI+PC90Ym9keT48L3RhYmxlPjxwIGlkPSJsYXN0Ij50ZXh0YWJjPC9wPicpDQoJ
CWVxdWFscyhyLnN0YXJ0Q29udGFpbmVyLm5vZGVUeXBlLCAxKQ0KCQllcXVhbHMoci5zdGFydE9m
ZnNldCwgMSkNCgkJZXF1YWxzKHIuZW5kQ29udGFpbmVyLm5vZGVUeXBlLCAxKQ0KCQllcXVhbHMo
ci5lbmRPZmZzZXQsIDEpDQoJCWVxdWFscyhyLmNvbGxhcHNlZCwgZmFsc2UpDQoJCWVxdWFscyhy
LmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyLm5vZGVUeXBlLCAxKQ0KDQoJCXIuc2V0U3RhcnQoZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NhbXBsZScpLCAwKTsNCgkJci5zZXRFbmQoZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoJ3NhbXBsZScpLCBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2FtcGxl
JykuY2hpbGROb2Rlcy5sZW5ndGggLSAxKTsNCg0KCQllcXVhbHMoZ2V0SFRNTChyLmNsb25lQ29u
dGVudHMoKSksICc8cCBpZD0iZmlyc3QiPmZpcnN0PCEtLW5vdC0tPiBzdHJvbmcgPCEtLSAtLT48
c3Ryb25nIGlkPSJzdHJvbmciPnN0cm9uZzwvc3Ryb25nPiBzZWNvbmQgPGVtIGlkPSJlbSI+ZW08
L2VtPiBzdHJvbmcuPC9wPjxwIGlkPSJzZWNvbmQiPmJhcjwvcD48cCBpZD0idHJhdmVyc2UiPjxi
PjxlbSBpZD0iZW0iPnNvbWUgdGV4dDwvZW0+PC9iPjxlbT5lbSB0ZXh0PC9lbT5tb3JlIHRleHQ8
L3A+PHRhYmxlIGlkPSJ0YWJsZSIgd2lkdGg9IjMwMCI+PHRib2R5Pjx0cj48dGQ+MTwvdGQ+PHRk
IGlkPSJ0d28iPmFiYzwvdGQ+PC90cj48dHI+PHRkPjM8L3RkPjx0ZD40PC90ZD48L3RyPjwvdGJv
ZHk+PC90YWJsZT4nKQ0KCQllcXVhbHMoci5zdGFydENvbnRhaW5lci5ub2RlVHlwZSwgMSkNCgkJ
ZXF1YWxzKHIuc3RhcnRPZmZzZXQsIDApDQoJCWVxdWFscyhyLmVuZENvbnRhaW5lci5ub2RlVHlw
ZSwgMSkNCgkJZXF1YWxzKHIuZW5kT2Zmc2V0LCBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2Ft
cGxlJykuY2hpbGROb2Rlcy5sZW5ndGggLSAxKQ0KCQllcXVhbHMoci5jb2xsYXBzZWQsIGZhbHNl
KQ0KCQllcXVhbHMoci5jb21tb25BbmNlc3RvckNvbnRhaW5lci5ub2RlVHlwZSwgMSkNCg0KCQly
LnNldFN0YXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmaXJzdCcpLCAwKTsNCgkJci5zZXRF
bmQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xhc3QnKS5maXJzdENoaWxkLCAxKTsNCg0KCQll
cXVhbHMoZ2V0SFRNTChyLmNsb25lQ29udGVudHMoKSksICc8cCBpZD0iZmlyc3QiPmZpcnN0PCEt
LW5vdC0tPiBzdHJvbmcgPCEtLSAtLT48c3Ryb25nIGlkPSJzdHJvbmciPnN0cm9uZzwvc3Ryb25n
PiBzZWNvbmQgPGVtIGlkPSJlbSI+ZW08L2VtPiBzdHJvbmcuPC9wPjxwIGlkPSJzZWNvbmQiPmJh
cjwvcD48cCBpZD0idHJhdmVyc2UiPjxiPjxlbSBpZD0iZW0iPnNvbWUgdGV4dDwvZW0+PC9iPjxl
bT5lbSB0ZXh0PC9lbT5tb3JlIHRleHQ8L3A+PHRhYmxlIGlkPSJ0YWJsZSIgd2lkdGg9IjMwMCI+
PHRib2R5Pjx0cj48dGQ+MTwvdGQ+PHRkIGlkPSJ0d28iPmFiYzwvdGQ+PC90cj48dHI+PHRkPjM8
L3RkPjx0ZD40PC90ZD48L3RyPjwvdGJvZHk+PC90YWJsZT48cCBpZD0ibGFzdCI+dDwvcD4nKQ0K
CQllcXVhbHMoci5zdGFydENvbnRhaW5lci5ub2RlVHlwZSwgMSkNCgkJZXF1YWxzKHIuc3RhcnRP
ZmZzZXQsIDApDQoJCWVxdWFscyhyLmVuZENvbnRhaW5lci5ub2RlVHlwZSwgMykNCgkJZXF1YWxz
KHIuZW5kT2Zmc2V0LCAxKQ0KCQllcXVhbHMoci5jb2xsYXBzZWQsIGZhbHNlKQ0KCQllcXVhbHMo
ci5jb21tb25BbmNlc3RvckNvbnRhaW5lci5ub2RlVHlwZSwgMSkNCg0KCQlyLnNldFN0YXJ0KGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCdmaXJzdCcpLmZpcnN0Q2hpbGQsIDEpOw0KCQlyLnNldEVu
ZChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGFzdCcpLCAwKTsNCg0KCQllcXVhbHMoZ2V0SFRN
TChyLmNsb25lQ29udGVudHMoKSksICc8cCBpZD0iZmlyc3QiPmlyc3Q8IS0tbm90LS0+IHN0cm9u
ZyA8IS0tIC0tPjxzdHJvbmcgaWQ9InN0cm9uZyI+c3Ryb25nPC9zdHJvbmc+IHNlY29uZCA8ZW0g
aWQ9ImVtIj5lbTwvZW0+IHN0cm9uZy48L3A+PHAgaWQ9InNlY29uZCI+YmFyPC9wPjxwIGlkPSJ0
cmF2ZXJzZSI+PGI+PGVtIGlkPSJlbSI+c29tZSB0ZXh0PC9lbT48L2I+PGVtPmVtIHRleHQ8L2Vt
Pm1vcmUgdGV4dDwvcD48dGFibGUgaWQ9InRhYmxlIiB3aWR0aD0iMzAwIj48dGJvZHk+PHRyPjx0
ZD4xPC90ZD48dGQgaWQ9InR3byI+YWJjPC90ZD48L3RyPjx0cj48dGQ+MzwvdGQ+PHRkPjQ8L3Rk
PjwvdHI+PC90Ym9keT48L3RhYmxlPjxwIGlkPVwibGFzdFwiPjwvcD4nKQ0KCQllcXVhbHMoci5z
dGFydENvbnRhaW5lci5ub2RlVHlwZSwgMykNCgkJZXF1YWxzKHIuc3RhcnRPZmZzZXQsIDEpDQoJ
CWVxdWFscyhyLmVuZENvbnRhaW5lci5ub2RlVHlwZSwgMSkNCgkJZXF1YWxzKHIuZW5kT2Zmc2V0
LCAwKQ0KCQllcXVhbHMoci5jb2xsYXBzZWQsIGZhbHNlKQ0KCQllcXVhbHMoci5jb21tb25BbmNl
c3RvckNvbnRhaW5lci5ub2RlVHlwZSwgMSkNCg0KCQlyLnNldFN0YXJ0KGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCdzYW1wbGUnKSwgMCk7DQoJCXIuc2V0RW5kKGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCd0cmF2ZXJzZScpLCAyKTsNCg0KCQllcXVhbHMoZ2V0SFRNTChyLmNsb25lQ29udGVudHMo
KSksICc8cCBpZD0iZmlyc3QiPmZpcnN0PCEtLW5vdC0tPiBzdHJvbmcgPCEtLSAtLT48c3Ryb25n
IGlkPSJzdHJvbmciPnN0cm9uZzwvc3Ryb25nPiBzZWNvbmQgPGVtIGlkPSJlbSI+ZW08L2VtPiBz
dHJvbmcuPC9wPjxwIGlkPSJzZWNvbmQiPmJhcjwvcD48cCBpZD0idHJhdmVyc2UiPjxiPjxlbSBp
ZD0iZW0iPnNvbWUgdGV4dDwvZW0+PC9iPjxlbT5lbSB0ZXh0PC9lbT48L3A+JykNCgkJZXF1YWxz
KHIuc3RhcnRDb250YWluZXIubm9kZVR5cGUsIDEpDQoJCWVxdWFscyhyLnN0YXJ0T2Zmc2V0LCAw
KQ0KCQllcXVhbHMoci5lbmRDb250YWluZXIubm9kZVR5cGUsIDEpDQoJCWVxdWFscyhyLmVuZE9m
ZnNldCwgMikNCgkJZXF1YWxzKHIuY29sbGFwc2VkLCBmYWxzZSkNCgkJZXF1YWxzKHIuY29tbW9u
QW5jZXN0b3JDb250YWluZXIubm9kZVR5cGUsIDEpDQoNCgkJci5zZXRTdGFydChkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgnc2FtcGxlJyksIDApOw0KCQlyLnNldEVuZChkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgndHJhdmVyc2UnKSwgMSk7DQoNCgkJZXF1YWxzKGdldEhUTUwoci5jbG9uZUNvbnRl
bnRzKCkpLCAnPHAgaWQ9ImZpcnN0Ij5maXJzdDwhLS1ub3QtLT4gc3Ryb25nIDwhLS0gLS0+PHN0
cm9uZyBpZD0ic3Ryb25nIj5zdHJvbmc8L3N0cm9uZz4gc2Vjb25kIDxlbSBpZD0iZW0iPmVtPC9l
bT4gc3Ryb25nLjwvcD48cCBpZD0ic2Vjb25kIj5iYXI8L3A+PHAgaWQ9InRyYXZlcnNlIj48Yj48
ZW0gaWQ9ImVtIj5zb21lIHRleHQ8L2VtPjwvYj48L3A+JykNCgkJZXF1YWxzKHIuc3RhcnRDb250
YWluZXIubm9kZVR5cGUsIDEpDQoJCWVxdWFscyhyLnN0YXJ0T2Zmc2V0LCAwKQ0KCQllcXVhbHMo
ci5lbmRDb250YWluZXIubm9kZVR5cGUsIDEpDQoJCWVxdWFscyhyLmVuZE9mZnNldCwgMSkNCgkJ
ZXF1YWxzKHIuY29sbGFwc2VkLCBmYWxzZSkNCgkJZXF1YWxzKHIuY29tbW9uQW5jZXN0b3JDb250
YWluZXIubm9kZVR5cGUsIDEpDQoJfSk7DQoNCgl0ZXN0KCJ0ZXN0X2V4dHJhY3RDb250ZW50czEi
LCBmdW5jdGlvbigpIHsNCgkJdmFyIHIgPSBjcmVhdGVSbmcoKTsNCg0KCQlzZXR1cCgpOw0KCQll
eHBlY3QoMTApOw0KDQoJCXIuc2V0U3RhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZpcnN0
JykuZmlyc3RDaGlsZCwgMSk7DQoJCXIuc2V0RW5kKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdm
aXJzdCcpLmZpcnN0Q2hpbGQsIDQpOw0KDQoJCWVxdWFscyhnZXRIVE1MKHIuZXh0cmFjdENvbnRl
bnRzKCkpLCAnaXJzJykNCgkJZXF1YWxzKHIuc3RhcnRDb250YWluZXIubm9kZVR5cGUsIDMpDQoJ
CWVxdWFscyhyLnN0YXJ0T2Zmc2V0LCAxKQ0KCQllcXVhbHMoci5lbmRDb250YWluZXIubm9kZVR5
cGUsIDMpDQoJCWVxdWFscyhyLmVuZE9mZnNldCwgMSkNCgkJZXF1YWxzKHIuY29sbGFwc2VkLCB0
cnVlKQ0KCQllcXVhbHMoci5zdGFydENvbnRhaW5lciA9PSByLmVuZENvbnRhaW5lciwgdHJ1ZSkN
CgkJZXF1YWxzKHIuc3RhcnRPZmZzZXQgPT0gci5lbmRPZmZzZXQsIHRydWUpDQoJCWVxdWFscyhy
LmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyLm5vZGVUeXBlLCAzKQ0KCQllcXVhbHMoZ2V0SFRNTChk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZmlyc3QnKSksICc8cCBpZD0iZmlyc3QiPmZ0PCEtLW5v
dC0tPiBzdHJvbmcgPCEtLSAtLT48c3Ryb25nIGlkPSJzdHJvbmciPnN0cm9uZzwvc3Ryb25nPiBz
ZWNvbmQgPGVtIGlkPSJlbSI+ZW08L2VtPiBzdHJvbmcuPC9wPicpDQoJfSk7DQoNCgl0ZXN0KCJ0
ZXN0X2V4dHJhY3RDb250ZW50czIiLCBmdW5jdGlvbigpIHsNCgkJdmFyIHIgPSBjcmVhdGVSbmco
KTsNCg0KCQlzZXR1cCgpOw0KCQlleHBlY3QoOSk7DQoNCgkJci5zZXRTdGFydChkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgndHdvJykuZmlyc3RDaGlsZCwgMSk7DQoJCXIuc2V0RW5kKGRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCdsYXN0JykuZmlyc3RDaGlsZCwgMik7DQoNCgkJZXF1YWxzKGdldEhU
TUwoci5leHRyYWN0Q29udGVudHMoKSksICc8dGFibGUgaWQ9InRhYmxlIiB3aWR0aD0iMzAwIj48
dGJvZHk+PHRyPjx0ZCBpZD0idHdvIj5iYzwvdGQ+PC90cj48dHI+PHRkPjM8L3RkPjx0ZD40PC90
ZD48L3RyPjwvdGJvZHk+PC90YWJsZT48cCBpZD0ibGFzdCI+dGU8L3A+JykNCgkJZXF1YWxzKHIu
c3RhcnRDb250YWluZXIubm9kZVR5cGUsIDEpDQoJCWVxdWFscyhnZXRIVE1MKHIuc3RhcnRDb250
YWluZXIpLCAnPGRpdiBpZD0ic2FtcGxlIj48cCBpZD0iZmlyc3QiPmZpcnN0PCEtLW5vdC0tPiBz
dHJvbmcgPCEtLSAtLT48c3Ryb25nIGlkPSJzdHJvbmciPnN0cm9uZzwvc3Ryb25nPiBzZWNvbmQg
PGVtIGlkPSJlbSI+ZW08L2VtPiBzdHJvbmcuPC9wPjxwIGlkPSJzZWNvbmQiPmJhcjwvcD48cCBp
ZD0idHJhdmVyc2UiPjxiPjxlbSBpZD0iZW0iPnNvbWUgdGV4dDwvZW0+PC9iPjxlbT5lbSB0ZXh0
PC9lbT5tb3JlIHRleHQ8L3A+PHRhYmxlIGlkPSJ0YWJsZSIgd2lkdGg9IjMwMCI+PHRib2R5Pjx0
cj48dGQ+MTwvdGQ+PHRkIGlkPSJ0d28iPmE8L3RkPjwvdHI+PC90Ym9keT48L3RhYmxlPjxwIGlk
PSJsYXN0Ij54dGFiYzxzcGFuPnNwYW48L3NwYW4+PC9wPjwvZGl2PicpDQoJCWVxdWFscyhyLnN0
YXJ0T2Zmc2V0LCA0KQ0KCQllcXVhbHMoci5lbmRDb250YWluZXIubm9kZVR5cGUsIDEpDQoJCWVx
dWFscyhyLmVuZE9mZnNldCwgNCkNCgkJZXF1YWxzKGdldEhUTUwoci5lbmRDb250YWluZXIpLCAn
PGRpdiBpZD0ic2FtcGxlIj48cCBpZD0iZmlyc3QiPmZpcnN0PCEtLW5vdC0tPiBzdHJvbmcgPCEt
LSAtLT48c3Ryb25nIGlkPSJzdHJvbmciPnN0cm9uZzwvc3Ryb25nPiBzZWNvbmQgPGVtIGlkPSJl
bSI+ZW08L2VtPiBzdHJvbmcuPC9wPjxwIGlkPSJzZWNvbmQiPmJhcjwvcD48cCBpZD0idHJhdmVy
c2UiPjxiPjxlbSBpZD0iZW0iPnNvbWUgdGV4dDwvZW0+PC9iPjxlbT5lbSB0ZXh0PC9lbT5tb3Jl
IHRleHQ8L3A+PHRhYmxlIGlkPSJ0YWJsZSIgd2lkdGg9IjMwMCI+PHRib2R5Pjx0cj48dGQ+MTwv
dGQ+PHRkIGlkPSJ0d28iPmE8L3RkPjwvdHI+PC90Ym9keT48L3RhYmxlPjxwIGlkPSJsYXN0Ij54
dGFiYzxzcGFuPnNwYW48L3NwYW4+PC9wPjwvZGl2PicpDQoJCWVxdWFscyhyLmNvbGxhcHNlZCwg
dHJ1ZSkNCgkJZXF1YWxzKHIuY29tbW9uQW5jZXN0b3JDb250YWluZXIubm9kZU5hbWUsICdESVYn
KQ0KCX0pOw0KDQoJdGVzdCgidGVzdF9leHRyYWN0Q29udGVudHMzIiwgZnVuY3Rpb24oKSB7DQoJ
CXZhciByID0gY3JlYXRlUm5nKCk7DQoNCgkJc2V0dXAoKTsNCgkJZXhwZWN0KDkpOw0KDQoJCXIu
c2V0U3RhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NhbXBsZScpLCAwKTsNCgkJci5zZXRF
bmQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RyYXZlcnNlJyksIDIpOw0KDQoJCWVxdWFscyhn
ZXRIVE1MKHIuZXh0cmFjdENvbnRlbnRzKCkpLCAnPHAgaWQ9ImZpcnN0Ij5maXJzdDwhLS1ub3Qt
LT4gc3Ryb25nIDwhLS0gLS0+PHN0cm9uZyBpZD0ic3Ryb25nIj5zdHJvbmc8L3N0cm9uZz4gc2Vj
b25kIDxlbSBpZD0iZW0iPmVtPC9lbT4gc3Ryb25nLjwvcD48cCBpZD0ic2Vjb25kIj5iYXI8L3A+
PHAgaWQ9InRyYXZlcnNlIj48Yj48ZW0gaWQ9ImVtIj5zb21lIHRleHQ8L2VtPjwvYj48ZW0+ZW0g
dGV4dDwvZW0+PC9wPicpDQoJCWVxdWFscyhnZXRIVE1MKHIuc3RhcnRDb250YWluZXIpLCAnPGRp
diBpZD0ic2FtcGxlIj48cCBpZD0idHJhdmVyc2UiPm1vcmUgdGV4dDwvcD48dGFibGUgaWQ9InRh
YmxlIiB3aWR0aD0iMzAwIj48dGJvZHk+PHRyPjx0ZD4xPC90ZD48dGQgaWQ9InR3byI+YWJjPC90
ZD48L3RyPjx0cj48dGQ+MzwvdGQ+PHRkPjQ8L3RkPjwvdHI+PC90Ym9keT48L3RhYmxlPjxwIGlk
PSJsYXN0Ij50ZXh0YWJjPHNwYW4+c3Bhbjwvc3Bhbj48L3A+PC9kaXY+JykNCgkJZXF1YWxzKHIu
c3RhcnRPZmZzZXQsIDApDQoJCWVxdWFscyhyLmVuZENvbnRhaW5lci5ub2RlVHlwZSwgMSkNCgkJ
ZXF1YWxzKHIuZW5kT2Zmc2V0LCAwKQ0KCQllcXVhbHMoZ2V0SFRNTChyLmVuZENvbnRhaW5lciks
ICc8ZGl2IGlkPSJzYW1wbGUiPjxwIGlkPSJ0cmF2ZXJzZSI+bW9yZSB0ZXh0PC9wPjx0YWJsZSBp
ZD0idGFibGUiIHdpZHRoPSIzMDAiPjx0Ym9keT48dHI+PHRkPjE8L3RkPjx0ZCBpZD0idHdvIj5h
YmM8L3RkPjwvdHI+PHRyPjx0ZD4zPC90ZD48dGQ+NDwvdGQ+PC90cj48L3Rib2R5PjwvdGFibGU+
PHAgaWQ9Imxhc3QiPnRleHRhYmM8c3Bhbj5zcGFuPC9zcGFuPjwvcD48L2Rpdj4nKQ0KCQllcXVh
bHMoZ2V0SFRNTChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2FtcGxlJykpLCAnPGRpdiBpZD0i
c2FtcGxlIj48cCBpZD0idHJhdmVyc2UiPm1vcmUgdGV4dDwvcD48dGFibGUgaWQ9InRhYmxlIiB3
aWR0aD0iMzAwIj48dGJvZHk+PHRyPjx0ZD4xPC90ZD48dGQgaWQ9InR3byI+YWJjPC90ZD48L3Ry
Pjx0cj48dGQ+MzwvdGQ+PHRkPjQ8L3RkPjwvdHI+PC90Ym9keT48L3RhYmxlPjxwIGlkPSJsYXN0
Ij50ZXh0YWJjPHNwYW4+c3Bhbjwvc3Bhbj48L3A+PC9kaXY+JykNCgkJZXF1YWxzKHIuY29sbGFw
c2VkLCB0cnVlKQ0KCQllcXVhbHMoci5jb21tb25BbmNlc3RvckNvbnRhaW5lci5ub2RlTmFtZSwg
J0RJVicpDQoJfSk7DQoNCgl0ZXN0KCJ0ZXN0X2RlbGV0ZUNvbnRlbnRzMSIsIGZ1bmN0aW9uKCkg
ew0KCQl2YXIgciA9IGNyZWF0ZVJuZygpOw0KDQoJCXNldHVwKCk7DQoJCWV4cGVjdCg4KTsNCg0K
CQlyLnNldFN0YXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0d28nKS5maXJzdENoaWxkLCAx
KTsNCgkJci5zZXRFbmQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xhc3QnKS5maXJzdENoaWxk
LCAyKTsNCgkJci5kZWxldGVDb250ZW50cygpOw0KDQoJCWVxdWFscyhnZXRIVE1MKHIuc3RhcnRD
b250YWluZXIpLCAnPGRpdiBpZD0ic2FtcGxlIj48cCBpZD0iZmlyc3QiPmZpcnN0PCEtLW5vdC0t
PiBzdHJvbmcgPCEtLSAtLT48c3Ryb25nIGlkPSJzdHJvbmciPnN0cm9uZzwvc3Ryb25nPiBzZWNv
bmQgPGVtIGlkPSJlbSI+ZW08L2VtPiBzdHJvbmcuPC9wPjxwIGlkPSJzZWNvbmQiPmJhcjwvcD48
cCBpZD0idHJhdmVyc2UiPjxiPjxlbSBpZD0iZW0iPnNvbWUgdGV4dDwvZW0+PC9iPjxlbT5lbSB0
ZXh0PC9lbT5tb3JlIHRleHQ8L3A+PHRhYmxlIGlkPSJ0YWJsZSIgd2lkdGg9IjMwMCI+PHRib2R5
Pjx0cj48dGQ+MTwvdGQ+PHRkIGlkPSJ0d28iPmE8L3RkPjwvdHI+PC90Ym9keT48L3RhYmxlPjxw
IGlkPSJsYXN0Ij54dGFiYzxzcGFuPnNwYW48L3NwYW4+PC9wPjwvZGl2PicpDQoJCWVxdWFscyhy
LnN0YXJ0T2Zmc2V0LCA0KQ0KCQllcXVhbHMoci5lbmRDb250YWluZXIubm9kZVR5cGUsIDEpDQoJ
CWVxdWFscyhyLmVuZE9mZnNldCwgNCkNCgkJZXF1YWxzKGdldEhUTUwoci5lbmRDb250YWluZXIp
LCAnPGRpdiBpZD0ic2FtcGxlIj48cCBpZD0iZmlyc3QiPmZpcnN0PCEtLW5vdC0tPiBzdHJvbmcg
PCEtLSAtLT48c3Ryb25nIGlkPSJzdHJvbmciPnN0cm9uZzwvc3Ryb25nPiBzZWNvbmQgPGVtIGlk
PSJlbSI+ZW08L2VtPiBzdHJvbmcuPC9wPjxwIGlkPSJzZWNvbmQiPmJhcjwvcD48cCBpZD0idHJh
dmVyc2UiPjxiPjxlbSBpZD0iZW0iPnNvbWUgdGV4dDwvZW0+PC9iPjxlbT5lbSB0ZXh0PC9lbT5t
b3JlIHRleHQ8L3A+PHRhYmxlIGlkPSJ0YWJsZSIgd2lkdGg9IjMwMCI+PHRib2R5Pjx0cj48dGQ+
MTwvdGQ+PHRkIGlkPSJ0d28iPmE8L3RkPjwvdHI+PC90Ym9keT48L3RhYmxlPjxwIGlkPSJsYXN0
Ij54dGFiYzxzcGFuPnNwYW48L3NwYW4+PC9wPjwvZGl2PicpDQoJCWVxdWFscyhnZXRIVE1MKGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCdzYW1wbGUnKSksICc8ZGl2IGlkPSJzYW1wbGUiPjxwIGlk
PSJmaXJzdCI+Zmlyc3Q8IS0tbm90LS0+IHN0cm9uZyA8IS0tIC0tPjxzdHJvbmcgaWQ9InN0cm9u
ZyI+c3Ryb25nPC9zdHJvbmc+IHNlY29uZCA8ZW0gaWQ9ImVtIj5lbTwvZW0+IHN0cm9uZy48L3A+
PHAgaWQ9InNlY29uZCI+YmFyPC9wPjxwIGlkPSJ0cmF2ZXJzZSI+PGI+PGVtIGlkPSJlbSI+c29t
ZSB0ZXh0PC9lbT48L2I+PGVtPmVtIHRleHQ8L2VtPm1vcmUgdGV4dDwvcD48dGFibGUgaWQ9InRh
YmxlIiB3aWR0aD0iMzAwIj48dGJvZHk+PHRyPjx0ZD4xPC90ZD48dGQgaWQ9InR3byI+YTwvdGQ+
PC90cj48L3Rib2R5PjwvdGFibGU+PHAgaWQ9Imxhc3QiPnh0YWJjPHNwYW4+c3Bhbjwvc3Bhbj48
L3A+PC9kaXY+JykNCgkJZXF1YWxzKHIuY29sbGFwc2VkLCB0cnVlKQ0KCQllcXVhbHMoci5jb21t
b25BbmNlc3RvckNvbnRhaW5lci5ub2RlTmFtZSwgJ0RJVicpDQoJfSk7DQoNCgl0ZXN0KCJ0ZXN0
X2RlbGV0ZUNvbnRlbnRzMiIsIGZ1bmN0aW9uKCkgew0KCQl2YXIgciA9IGNyZWF0ZVJuZygpOw0K
DQoJCXNldHVwKCk7DQoJCWV4cGVjdCg4KTsNCg0KCQlyLnNldFN0YXJ0KGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCdmaXJzdCcpLmZpcnN0Q2hpbGQsIDEpOw0KCQlyLnNldEVuZChkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgnZmlyc3QnKS5sYXN0Q2hpbGQsIDQpOw0KCQlyLmRlbGV0ZUNvbnRlbnRz
KCk7DQoNCgkJZXF1YWxzKGdldEhUTUwoci5zdGFydENvbnRhaW5lciksICc8cCBpZD0iZmlyc3Qi
PmZvbmcuPC9wPicpDQoJCWVxdWFscyhyLnN0YXJ0T2Zmc2V0LCAxKQ0KCQllcXVhbHMoci5lbmRD
b250YWluZXIubm9kZVR5cGUsIDEpDQoJCWVxdWFscyhyLmVuZE9mZnNldCwgMSkNCgkJZXF1YWxz
KGdldEhUTUwoci5lbmRDb250YWluZXIpLCAnPHAgaWQ9ImZpcnN0Ij5mb25nLjwvcD4nKQ0KCQll
cXVhbHMoZ2V0SFRNTChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2FtcGxlJykpLCAnPGRpdiBp
ZD0ic2FtcGxlIj48cCBpZD0iZmlyc3QiPmZvbmcuPC9wPjxwIGlkPSJzZWNvbmQiPmJhcjwvcD48
cCBpZD0idHJhdmVyc2UiPjxiPjxlbSBpZD0iZW0iPnNvbWUgdGV4dDwvZW0+PC9iPjxlbT5lbSB0
ZXh0PC9lbT5tb3JlIHRleHQ8L3A+PHRhYmxlIGlkPSJ0YWJsZSIgd2lkdGg9IjMwMCI+PHRib2R5
Pjx0cj48dGQ+MTwvdGQ+PHRkIGlkPSJ0d28iPmFiYzwvdGQ+PC90cj48dHI+PHRkPjM8L3RkPjx0
ZD40PC90ZD48L3RyPjwvdGJvZHk+PC90YWJsZT48cCBpZD0ibGFzdCI+dGV4dGFiYzxzcGFuPnNw
YW48L3NwYW4+PC9wPjwvZGl2PicpDQoJCWVxdWFscyhyLmNvbGxhcHNlZCwgdHJ1ZSkNCgkJZXF1
YWxzKHIuY29tbW9uQW5jZXN0b3JDb250YWluZXIubm9kZU5hbWUsICdQJykNCgl9KTsNCg0KCXRl
c3QoInRlc3RfZGVsZXRlQ29udGVudHMzIiwgZnVuY3Rpb24oKSB7DQoJCXZhciByID0gY3JlYXRl
Um5nKCk7DQoNCgkJc2V0dXAoKTsNCgkJZXhwZWN0KDgpOw0KDQoJCXIuc2V0U3RhcnQoZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoJ3NhbXBsZScpLCAwKTsNCgkJci5zZXRFbmQoZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoJ3NhbXBsZScpLCAyKTsNCgkJci5kZWxldGVDb250ZW50cygpOw0KDQoJCWVx
dWFscyhnZXRIVE1MKHIuc3RhcnRDb250YWluZXIpLCAnPGRpdiBpZD0ic2FtcGxlIj48cCBpZD0i
dHJhdmVyc2UiPjxiPjxlbSBpZD0iZW0iPnNvbWUgdGV4dDwvZW0+PC9iPjxlbT5lbSB0ZXh0PC9l
bT5tb3JlIHRleHQ8L3A+PHRhYmxlIGlkPSJ0YWJsZSIgd2lkdGg9IjMwMCI+PHRib2R5Pjx0cj48
dGQ+MTwvdGQ+PHRkIGlkPSJ0d28iPmFiYzwvdGQ+PC90cj48dHI+PHRkPjM8L3RkPjx0ZD40PC90
ZD48L3RyPjwvdGJvZHk+PC90YWJsZT48cCBpZD0ibGFzdCI+dGV4dGFiYzxzcGFuPnNwYW48L3Nw
YW4+PC9wPjwvZGl2PicpDQoJCWVxdWFscyhyLnN0YXJ0T2Zmc2V0LCAwKQ0KCQllcXVhbHMoci5l
bmRDb250YWluZXIubm9kZVR5cGUsIDEpDQoJCWVxdWFscyhyLmVuZE9mZnNldCwgMCkNCgkJZXF1
YWxzKGdldEhUTUwoci5lbmRDb250YWluZXIpLCAnPGRpdiBpZD0ic2FtcGxlIj48cCBpZD0idHJh
dmVyc2UiPjxiPjxlbSBpZD0iZW0iPnNvbWUgdGV4dDwvZW0+PC9iPjxlbT5lbSB0ZXh0PC9lbT5t
b3JlIHRleHQ8L3A+PHRhYmxlIGlkPSJ0YWJsZSIgd2lkdGg9IjMwMCI+PHRib2R5Pjx0cj48dGQ+
MTwvdGQ+PHRkIGlkPSJ0d28iPmFiYzwvdGQ+PC90cj48dHI+PHRkPjM8L3RkPjx0ZD40PC90ZD48
L3RyPjwvdGJvZHk+PC90YWJsZT48cCBpZD0ibGFzdCI+dGV4dGFiYzxzcGFuPnNwYW48L3NwYW4+
PC9wPjwvZGl2PicpDQoJCWVxdWFscyhnZXRIVE1MKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdz
YW1wbGUnKSksICc8ZGl2IGlkPSJzYW1wbGUiPjxwIGlkPSJ0cmF2ZXJzZSI+PGI+PGVtIGlkPSJl
bSI+c29tZSB0ZXh0PC9lbT48L2I+PGVtPmVtIHRleHQ8L2VtPm1vcmUgdGV4dDwvcD48dGFibGUg
aWQ9InRhYmxlIiB3aWR0aD0iMzAwIj48dGJvZHk+PHRyPjx0ZD4xPC90ZD48dGQgaWQ9InR3byI+
YWJjPC90ZD48L3RyPjx0cj48dGQ+MzwvdGQ+PHRkPjQ8L3RkPjwvdHI+PC90Ym9keT48L3RhYmxl
PjxwIGlkPSJsYXN0Ij50ZXh0YWJjPHNwYW4+c3Bhbjwvc3Bhbj48L3A+PC9kaXY+JykNCgkJZXF1
YWxzKHIuY29sbGFwc2VkLCB0cnVlKQ0KCQllcXVhbHMoci5jb21tb25BbmNlc3RvckNvbnRhaW5l
ci5ub2RlTmFtZSwgJ0RJVicpDQoJfSk7DQoNCgl0ZXN0KCJ0ZXN0X2RlbGV0ZUNvbnRlbnRzNCIs
IGZ1bmN0aW9uKCkgew0KCQl2YXIgciA9IGNyZWF0ZVJuZygpOw0KDQoJCXNldHVwKCk7DQoJCWV4
cGVjdCg4KTsNCg0KCQlyLnNldFN0YXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzYW1wbGUn
KSwgMCk7DQoJCXIuc2V0RW5kKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0cmF2ZXJzZScpLCAy
KTsNCgkJci5kZWxldGVDb250ZW50cygpOw0KDQoJCWVxdWFscyhnZXRIVE1MKHIuc3RhcnRDb250
YWluZXIpLCAnPGRpdiBpZD0ic2FtcGxlIj48cCBpZD0idHJhdmVyc2UiPm1vcmUgdGV4dDwvcD48
dGFibGUgaWQ9InRhYmxlIiB3aWR0aD0iMzAwIj48dGJvZHk+PHRyPjx0ZD4xPC90ZD48dGQgaWQ9
InR3byI+YWJjPC90ZD48L3RyPjx0cj48dGQ+MzwvdGQ+PHRkPjQ8L3RkPjwvdHI+PC90Ym9keT48
L3RhYmxlPjxwIGlkPSJsYXN0Ij50ZXh0YWJjPHNwYW4+c3Bhbjwvc3Bhbj48L3A+PC9kaXY+JykN
CgkJZXF1YWxzKHIuc3RhcnRPZmZzZXQsIDApDQoJCWVxdWFscyhyLmVuZENvbnRhaW5lci5ub2Rl
VHlwZSwgMSkNCgkJZXF1YWxzKHIuZW5kT2Zmc2V0LCAwKQ0KCQllcXVhbHMoZ2V0SFRNTChyLmVu
ZENvbnRhaW5lciksICc8ZGl2IGlkPSJzYW1wbGUiPjxwIGlkPSJ0cmF2ZXJzZSI+bW9yZSB0ZXh0
PC9wPjx0YWJsZSBpZD0idGFibGUiIHdpZHRoPSIzMDAiPjx0Ym9keT48dHI+PHRkPjE8L3RkPjx0
ZCBpZD0idHdvIj5hYmM8L3RkPjwvdHI+PHRyPjx0ZD4zPC90ZD48dGQ+NDwvdGQ+PC90cj48L3Ri
b2R5PjwvdGFibGU+PHAgaWQ9Imxhc3QiPnRleHRhYmM8c3Bhbj5zcGFuPC9zcGFuPjwvcD48L2Rp
dj4nKQ0KCQllcXVhbHMoZ2V0SFRNTChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2FtcGxlJykp
LCAnPGRpdiBpZD0ic2FtcGxlIj48cCBpZD0idHJhdmVyc2UiPm1vcmUgdGV4dDwvcD48dGFibGUg
aWQ9InRhYmxlIiB3aWR0aD0iMzAwIj48dGJvZHk+PHRyPjx0ZD4xPC90ZD48dGQgaWQ9InR3byI+
YWJjPC90ZD48L3RyPjx0cj48dGQ+MzwvdGQ+PHRkPjQ8L3RkPjwvdHI+PC90Ym9keT48L3RhYmxl
PjxwIGlkPSJsYXN0Ij50ZXh0YWJjPHNwYW4+c3Bhbjwvc3Bhbj48L3A+PC9kaXY+JykNCgkJZXF1
YWxzKHIuY29sbGFwc2VkLCB0cnVlKQ0KCQllcXVhbHMoci5jb21tb25BbmNlc3RvckNvbnRhaW5l
ci5ub2RlTmFtZSwgJ0RJVicpDQoJfSk7DQoNCglydW4oKTsNCn0pOw0KPC9zY3JpcHQ+DQo8L2Jv
ZHk+DQo8L2h0bWw+DQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>28771</attachid>
            <date>2009-03-19 16:36:22 -0700</date>
            <delta_ts>2009-03-19 18:04:14 -0700</delta_ts>
            <desc>proposed fix</desc>
            <filename>RangeDeleteContents.txt</filename>
            <type>text/plain</type>
            <size>6210</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0MTg0NCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTYgQEAKKzIwMDktMDMtMTkgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEB3ZWJr
aXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNDEyMgorICAgICAgICA8
cmRhcjovL3Byb2JsZW0vNjY3NDE3OT4KKyAgICAgICAgUkVHUkVTU0lPTjogRE9NIFJhbmdlIGV4
dHJhY3RDb250ZW50cy9kZWxldGVDb250ZW50cyBmYWlsdXJlcyBzZWVuIG9uIE1veGllY29kZSB0
ZXN0cworCisgICAgICAgIFRlc3Q6IGZhc3QvZG9tL1JhbmdlL2RlbGV0ZWQtcmFuZ2UtZW5kcG9p
bnRzLmh0bWwKKworICAgICAgICAqIGRvbS9SYW5nZS5jcHA6IChXZWJDb3JlOjpSYW5nZTo6cHJv
Y2Vzc0NvbnRlbnRzKTogU2V0IHRoZSBmaW5hbCByYW5nZSBpbiBhY2NvcmRhbmNlCisgICAgICAg
IHRvIHRoZSBzcGVjaWZpY2F0aW9uLgorCiAyMDA5LTAzLTE5ICBEaW1pdHJpIEdsYXprb3YgIDxk
Z2xhemtvdkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gRmlzaGVy
LgpJbmRleDogV2ViQ29yZS9kb20vUmFuZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9t
L1JhbmdlLmNwcAkocmV2aXNpb24gNDE4MjQpCisrKyBXZWJDb3JlL2RvbS9SYW5nZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTg0MCw2ICs4NDAsMTcgQEAgUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdt
ZW50PiBSYW5nZTo6cHJvYwogICAgICAgICAgICAgcHJvY2Vzc0VuZCA9IHByb2Nlc3NFbmQtPnBh
cmVudE5vZGUoKTsKICAgICB9CiAKKyAgICAvLyBDb2xsYXBzZSB0aGUgcmFuZ2UsIG1ha2luZyBz
dXJlIHRoYXQgdGhlIHJlc3VsdCBpcyBub3Qgd2l0aGluIGEgbm9kZSB0aGF0IHdhcyBwYXJ0aWFs
bHkgc2VsZWN0ZWQuCisgICAgaWYgKGFjdGlvbiA9PSBFWFRSQUNUX0NPTlRFTlRTIHx8IGFjdGlv
biA9PSBERUxFVEVfQ09OVEVOVFMpIHsKKyAgICAgICAgaWYgKHBhcnRpYWxTdGFydCkKKyAgICAg
ICAgICAgIHNldFN0YXJ0KHBhcnRpYWxTdGFydC0+cGFyZW50Tm9kZSgpLCBwYXJ0aWFsU3RhcnQt
Pm5vZGVJbmRleCgpICsgMSwgZWMpOworICAgICAgICBlbHNlIGlmIChwYXJ0aWFsRW5kKQorICAg
ICAgICAgICAgc2V0U3RhcnQocGFydGlhbEVuZC0+cGFyZW50Tm9kZSgpLCBwYXJ0aWFsRW5kLT5u
b2RlSW5kZXgoKSwgZWMpOworICAgICAgICBpZiAoZWMpCisgICAgICAgICAgICByZXR1cm4gMDsK
KyAgICAgICAgbV9lbmQgPSBtX3N0YXJ0OworICAgIH0KKwogICAgIC8vIE5vdyBhZGQgbGVmdENv
bnRlbnRzLCBzdHVmZiBpbiBiZXR3ZWVuLCBhbmQgcmlnaHRDb250ZW50cyB0byB0aGUgZnJhZ21l
bnQKICAgICAvLyAob3IganVzdCBkZWxldGUgdGhlIHN0dWZmIGluIGJldHdlZW4pCiAKSW5kZXg6
IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VM
b2cJKHJldmlzaW9uIDQxODQ0KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMDktMDMtMTkgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxh
cEB3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNDEyMgorICAg
ICAgICA8cmRhcjovL3Byb2JsZW0vNjY3NDE3OT4KKyAgICAgICAgUkVHUkVTU0lPTjogRE9NIFJh
bmdlIGV4dHJhY3RDb250ZW50cy9kZWxldGVDb250ZW50cyBmYWlsdXJlcyBzZWVuIG9uIE1veGll
Y29kZSB0ZXN0cworCisgICAgICAgICogZmFzdC9kb20vUmFuZ2UvZGVsZXRlZC1yYW5nZS1lbmRw
b2ludHMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2RvbS9SYW5nZS9kZWxl
dGVkLXJhbmdlLWVuZHBvaW50cy5odG1sOiBBZGRlZC4KKwogMjAwOS0wMy0xOSAgR2VvZmZyZXkg
R2FyZW4gIDxnZ2FyZW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNhbSBXZWlu
aWcuCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2RvbS9SYW5nZS9kZWxldGVkLXJhbmdlLWVuZHBv
aW50cy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9kb20vUmFu
Z2UvZGVsZXRlZC1yYW5nZS1lbmRwb2ludHMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysg
TGF5b3V0VGVzdHMvZmFzdC9kb20vUmFuZ2UvZGVsZXRlZC1yYW5nZS1lbmRwb2ludHMtZXhwZWN0
ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDcgQEAKK1Rlc3Qgc29tZSBjYXNlcyBvZiBS
YW5nZS5kZWxldGVDb250ZW50cygpIGJlaGF2aW9yIChuYW1lbHksIGV4YW1wbGVzIGZyb20gRE9N
IFJhbmdlIHNwZWMpLgorCis8Rk9PPiBbQSwgQ0RdLiBGaW5hbCByYW5nZSAoRk9PLCAxKSAtIChG
T08sIDEpCis8Rk9PPiBbQSwgPE1PTz4gW0JdLCBFXS4gRmluYWwgcmFuZ2UgKEZPTywgMikgLSAo
Rk9PLCAyKQorPEZPTz4gW1gsIDxCQVI+IFtXXSwgUV0uIEZpbmFsIHJhbmdlIChGT08sIDEpIC0g
KEZPTywgMSkKKzxGT08+IFs8QkFSMT4gW0FdLCA8QkFSMz4gW0RdXS4gRmluYWwgcmFuZ2UgKEZP
TywgMSkgLSAoRk9PLCAxKQorCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBMYXlvdXRUZXN0cy9mYXN0
L2RvbS9SYW5nZS9kZWxldGVkLXJhbmdlLWVuZHBvaW50cy1leHBlY3RlZC50eHQKX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
XwpOYW1lOiBzdm46bWltZS10eXBlCiAgICsgdGV4dC9wbGFpbgpOYW1lOiBzdm46ZW9sLXN0eWxl
CiAgICsgbmF0aXZlCgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9kb20vUmFuZ2UvZGVsZXRlZC1y
YW5nZS1lbmRwb2ludHMuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2RvbS9S
YW5nZS9kZWxldGVkLXJhbmdlLWVuZHBvaW50cy5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0
VGVzdHMvZmFzdC9kb20vUmFuZ2UvZGVsZXRlZC1yYW5nZS1lbmRwb2ludHMuaHRtbAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSw2OCBAQAorPHA+VGVzdCBzb21lIGNhc2VzIG9mIFJhbmdlLmRlbGV0
ZUNvbnRlbnRzKCkgYmVoYXZpb3IgKG5hbWVseSwgZXhhbXBsZXMgZnJvbSBET00gUmFuZ2Ugc3Bl
YykuPC9wPgorPHByZSBpZD0iY29uc29sZSI+PC9wcmU+CisKKzxkaXYgc3R5bGU9InZpc2liaWxp
dHk6aGlkZGVuIj4KKzxGT08+QUI8TU9PPkNEPC9NT08+Q0Q8L0ZPTz4KKzxGT08+QTxNT08+QkM8
L01PTz5ERTwvRk9PPgorPEZPTz5YWTxCQVI+Wlc8L0JBUj5RPC9GT08+Cis8Rk9PPjxCQVIxPkFC
PC9CQVIxPjxCQVIyPjwvQkFSMj48QkFSMz5DRDwvQkFSMz48L0ZPTz4KKzwvZGl2PgorPHNjcmlw
dD4KK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgbGF5b3V0VGVzdENvbnRy
b2xsZXIuZHVtcEFzVGV4dCgpOworCitmdW5jdGlvbiBsb2cobWVzc2FnZSkKK3sKKyAgICBkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgnY29uc29sZScpLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0
ZVRleHROb2RlKG1lc3NhZ2UgKyAnXG4nKSk7Cit9CisKKy8vIFNpbXBsZSByZWN1cnNpdmUgImdp
dmUgbWUgYSBzdHJpbmcgdG8gcmVwcmVzZW50IHRoaXMgdHJlZSIgZnVuY3Rpb24KK2Z1bmN0aW9u
IHRyZWVBc1N0cmluZyhub2RlKSB7CisgICAgdmFyIHN0cmluZyA9IG5vZGUubm9kZU5hbWU7Cisg
ICAgaWYgKHN0cmluZ1swXSAhPSAiIyIpCisgICAgICAgIHN0cmluZyA9ICI8IiArIHN0cmluZyAr
ICI+IjsKKyAgICBpZiAoc3RyaW5nID09ICIjdGV4dCIpCisgICAgICAgIHN0cmluZyA9IG5vZGUu
dGV4dENvbnRlbnQ7CisgICAgaWYgKG5vZGUuY2hpbGROb2Rlcy5sZW5ndGgpIHsKKyAgICAgICAg
c3RyaW5nICs9ICIgWyI7CisgICAgfQorICAgIGZvciAodmFyIHggPSAwOyB4IDwgbm9kZS5jaGls
ZE5vZGVzLmxlbmd0aDsgeCsrKSB7CisgICAgICAgIGlmICh4ICE9IDApIHsKKyAgICAgICAgICAg
IHN0cmluZyArPSAiLCAiOworICAgICAgICB9CisgICAgICAgIHN0cmluZyArPSB0cmVlQXNTdHJp
bmcobm9kZS5jaGlsZE5vZGVzW3hdKTsKKyAgICB9CisKKyAgICBpZiAobm9kZS5jaGlsZE5vZGVz
Lmxlbmd0aCkgeworICAgICAgICBzdHJpbmcgKz0gIl0iOworICAgIH0KKyAgICByZXR1cm4gc3Ry
aW5nOworfQorCit2YXIgcmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpOworCit2YXIgZm9v
ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIkZPTyIpWzBdOworcmFuZ2Uuc2V0U3Rh
cnQoZm9vLmZpcnN0Q2hpbGQsIDEpOworcmFuZ2Uuc2V0RW5kKGZvbywgMik7CityYW5nZS5kZWxl
dGVDb250ZW50cygpOworbG9nKHRyZWVBc1N0cmluZyhmb28pICsgIi4gRmluYWwgcmFuZ2UgKCIg
KyByYW5nZS5zdGFydENvbnRhaW5lci5ub2RlTmFtZSArICIsICIgKyByYW5nZS5zdGFydE9mZnNl
dCArICIpIC0gKCIgKyByYW5nZS5lbmRDb250YWluZXIubm9kZU5hbWUgKyAiLCAiICsgcmFuZ2Uu
ZW5kT2Zmc2V0ICsgIikiKTsKKwordmFyIGZvbyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdO
YW1lKCJGT08iKVsxXTsKK3JhbmdlLnNldFN0YXJ0KGZvby5maXJzdENoaWxkLm5leHRTaWJsaW5n
LmZpcnN0Q2hpbGQsIDEpOworcmFuZ2Uuc2V0RW5kKGZvby5sYXN0Q2hpbGQsIDEpOworcmFuZ2Uu
ZGVsZXRlQ29udGVudHMoKTsKK2xvZyh0cmVlQXNTdHJpbmcoZm9vKSArICIuIEZpbmFsIHJhbmdl
ICgiICsgcmFuZ2Uuc3RhcnRDb250YWluZXIubm9kZU5hbWUgKyAiLCAiICsgcmFuZ2Uuc3RhcnRP
ZmZzZXQgKyAiKSAtICgiICsgcmFuZ2UuZW5kQ29udGFpbmVyLm5vZGVOYW1lICsgIiwgIiArIHJh
bmdlLmVuZE9mZnNldCArICIpIik7CisKK3ZhciBmb28gPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5
VGFnTmFtZSgiRk9PIilbMl07CityYW5nZS5zZXRTdGFydChmb28uZmlyc3RDaGlsZCwgMSk7City
YW5nZS5zZXRFbmQoZm9vLmZpcnN0Q2hpbGQubmV4dFNpYmxpbmcuZmlyc3RDaGlsZCwgMSk7City
YW5nZS5kZWxldGVDb250ZW50cygpOworbG9nKHRyZWVBc1N0cmluZyhmb28pICsgIi4gRmluYWwg
cmFuZ2UgKCIgKyByYW5nZS5zdGFydENvbnRhaW5lci5ub2RlTmFtZSArICIsICIgKyByYW5nZS5z
dGFydE9mZnNldCArICIpIC0gKCIgKyByYW5nZS5lbmRDb250YWluZXIubm9kZU5hbWUgKyAiLCAi
ICsgcmFuZ2UuZW5kT2Zmc2V0ICsgIikiKTsKKwordmFyIGZvbyA9IGRvY3VtZW50LmdldEVsZW1l
bnRzQnlUYWdOYW1lKCJGT08iKVszXTsKK3JhbmdlLnNldFN0YXJ0KGZvby5maXJzdENoaWxkLmZp
cnN0Q2hpbGQsIDEpOworcmFuZ2Uuc2V0RW5kKGZvby5sYXN0Q2hpbGQuZmlyc3RDaGlsZCwgMSk7
CityYW5nZS5kZWxldGVDb250ZW50cygpOworbG9nKHRyZWVBc1N0cmluZyhmb28pICsgIi4gRmlu
YWwgcmFuZ2UgKCIgKyByYW5nZS5zdGFydENvbnRhaW5lci5ub2RlTmFtZSArICIsICIgKyByYW5n
ZS5zdGFydE9mZnNldCArICIpIC0gKCIgKyByYW5nZS5lbmRDb250YWluZXIubm9kZU5hbWUgKyAi
LCAiICsgcmFuZ2UuZW5kT2Zmc2V0ICsgIikiKTsKKworPC9zY3JpcHQ+CgpQcm9wZXJ0eSBjaGFu
Z2VzIG9uOiBMYXlvdXRUZXN0cy9mYXN0L2RvbS9SYW5nZS9kZWxldGVkLXJhbmdlLWVuZHBvaW50
cy5odG1sCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX18KTmFtZTogc3ZuOm1pbWUtdHlwZQogICArIHRleHQvaHRtbAoK
</data>
<flag name="review"
          id="14194"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>