<?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>43227</bug_id>
          
          <creation_ts>2010-07-29 18:13:43 -0700</creation_ts>
          <short_desc>Group functions used in createMarkup (range version) into a class so they are easier to understand</short_desc>
          <delta_ts>2010-08-11 00:42:25 -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>HTML Editing</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>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>43834</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>darin</cc>
    
    <cc>enrica</cc>
    
    <cc>justin.garcia</cc>
    
    <cc>ojan</cc>
    
    <cc>tony</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>258018</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-07-29 18:13:43 -0700</bug_when>
    <thetext>In the range version of createMarkup (http://trac.webkit.org/browser/trunk/WebCore/editing/markup.cpp#L797),
we have preMarkup and markup to accumulate text but this should be centralized as in the node version
(http://trac.webkit.org/browser/trunk/WebCore/editing/markup.cpp#L1075).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>258041</commentid>
    <comment_count>1</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-07-29 20:46:25 -0700</bug_when>
    <thetext>Why must it be centralized?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>258045</commentid>
    <comment_count>2</comment_count>
      <attachid>63025</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-07-29 21:05:11 -0700</bug_when>
    <thetext>Created attachment 63025
cleanup proposal

(In reply to comment #1)
&gt; Why must it be centralized?

Because there are many static functions in markup.cpp, and it&apos;s hard to understand the relationship between functions and two createMarkup functions.
So I&apos;d like to introduce accumulator (wrapper for now) for the range version first, and gradually increase and organize the shared code between two functions.

See the attachment for what I mean.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>258070</commentid>
    <comment_count>3</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-07-29 23:25:39 -0700</bug_when>
    <thetext>My title for the bug would be something more like &quot;Group markup functions into a class so they are easier to understand&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>258076</commentid>
    <comment_count>4</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-07-29 23:51:10 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; My title for the bug would be something more like &quot;Group markup functions into a class so they are easier to understand&quot;.

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>258671</commentid>
    <comment_count>5</comment_count>
      <attachid>63167</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-07-31 19:23:32 -0700</bug_when>
    <thetext>Created attachment 63167
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>258672</commentid>
    <comment_count>6</comment_count>
      <attachid>63168</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-07-31 19:39:56 -0700</bug_when>
    <thetext>Created attachment 63168
Renamed wrapWithStyleSpan to wrapWithStyleNode</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>258719</commentid>
    <comment_count>7</comment_count>
      <attachid>63168</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2010-08-01 18:53:01 -0700</bug_when>
    <thetext>Comment on attachment 63168
Renamed wrapWithStyleSpan to wrapWithStyleNode

WebCore/editing/markup.cpp:815
 +  private:
nit: We usually have a blank line before an access label not at the beginning of the class.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>258993</commentid>
    <comment_count>8</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-08-02 11:14:12 -0700</bug_when>
    <thetext>Committed r64477: &lt;http://trac.webkit.org/changeset/64477&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>258995</commentid>
    <comment_count>9</comment_count>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2010-08-02 11:15:08 -0700</bug_when>
    <thetext>&gt; +        (WebCore::MarkupAccumulatorWrapper::insertString): Added.
&gt; +        (WebCore::MarkupAccumulatorWrapper::insertOpenTag): Added.
&gt; +        (WebCore::MarkupAccumulatorWrapper::insertEndTag): Added.

How about calling these append, appendOpenTag and appendEndTag?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>259084</commentid>
    <comment_count>10</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-08-02 13:48:15 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; &gt; +        (WebCore::MarkupAccumulatorWrapper::insertString): Added.
&gt; &gt; +        (WebCore::MarkupAccumulatorWrapper::insertOpenTag): Added.
&gt; &gt; +        (WebCore::MarkupAccumulatorWrapper::insertEndTag): Added.
&gt; 
&gt; How about calling these append, appendOpenTag and appendEndTag?

I thought about it but the problem is that they don&apos;t really &quot;append&quot; the node to the very end.  They&apos;re opening or closing the inner most node (possibly following other nodes) wrapped by outer nodes that have already been added by createMarkup.  So &quot;append&quot; might be misleading here.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>63025</attachid>
            <date>2010-07-29 21:05:11 -0700</date>
            <delta_ts>2010-07-31 19:23:28 -0700</delta_ts>
            <desc>cleanup proposal</desc>
            <filename>markup-cleanup</filename>
            <type>text/plain</type>
            <size>12205</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
ZWRpdGluZy9tYXJrdXAuY3BwCShyZXZpc2lvbiA2NDAxMykKKysrIFdlYkNvcmUvZWRpdGluZy9t
YXJrdXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NTUsMTMgKzU1NSw2IEBACiAgICAgfQogfQog
Ci1zdGF0aWMgU3RyaW5nIGdldFN0YXJ0TWFya3VwKGNvbnN0IE5vZGUqIG5vZGUsIGNvbnN0IFJh
bmdlKiByYW5nZSwgRUFubm90YXRlRm9ySW50ZXJjaGFuZ2UgYW5ub3RhdGUsIEVBYnNvbHV0ZVVS
THMgYWJzb2x1dGVVUkxzLCBib29sIGNvbnZlcnRCbG9ja3NUb0lubGluZXMgPSBmYWxzZSwgSGFz
aE1hcDxBdG9taWNTdHJpbmdJbXBsKiwgQXRvbWljU3RyaW5nSW1wbCo+KiBuYW1lc3BhY2VzID0g
MCwgUmFuZ2VGdWxseVNlbGVjdHNOb2RlIHJhbmdlRnVsbHlTZWxlY3RzTm9kZSA9IERvZXNGdWxs
eVNlbGVjdE5vZGUpCi17Ci0gICAgVmVjdG9yPFVDaGFyPiByZXN1bHQ7Ci0gICAgYXBwZW5kU3Rh
cnRNYXJrdXAocmVzdWx0LCBub2RlLCByYW5nZSwgYW5ub3RhdGUsIGFic29sdXRlVVJMcywgY29u
dmVydEJsb2Nrc1RvSW5saW5lcywgbmFtZXNwYWNlcywgcmFuZ2VGdWxseVNlbGVjdHNOb2RlKTsK
LSAgICByZXR1cm4gU3RyaW5nOjphZG9wdChyZXN1bHQpOwotfQotCiBzdGF0aWMgaW5saW5lIGJv
b2wgZG9lc0hUTUxGb3JiaWRFbmRUYWcoY29uc3QgTm9kZSAqbm9kZSkKIHsKICAgICBpZiAobm9k
ZS0+aXNIVE1MRWxlbWVudCgpKSB7CkBAIC01OTgsMTMgKzU5MSw2IEBACiAgICAgcmVzdWx0LmFw
cGVuZCgnPicpOwogfQogCi1zdGF0aWMgU3RyaW5nIGdldEVuZE1hcmt1cChjb25zdCBOb2RlICpu
b2RlKQotewotICAgIFZlY3RvcjxVQ2hhcj4gcmVzdWx0OwotICAgIGFwcGVuZEVuZE1hcmt1cChy
ZXN1bHQsIG5vZGUpOwotICAgIHJldHVybiBTdHJpbmc6OmFkb3B0KHJlc3VsdCk7Ci19Ci0KIGNs
YXNzIE1hcmt1cEFjY3VtdWxhdG9yIHsKIHB1YmxpYzoKICAgICBNYXJrdXBBY2N1bXVsYXRvcihO
b2RlKiBub2RlVG9Ta2lwLCBWZWN0b3I8Tm9kZSo+KiBub2RlcykKQEAgLTcyMiwzMCArNzA4LDYg
QEAKICAgICByZXR1cm4gIXByb3BlcnR5TWlzc2luZ09yRXF1YWxUb05vbmUoc3R5bGUuZ2V0KCks
IENTU1Byb3BlcnR5VGV4dERlY29yYXRpb24pOwogfQogCi1zdGF0aWMgU3RyaW5nIGpvaW5NYXJr
dXBzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwcmVNYXJrdXBzLCBjb25zdCBWZWN0b3I8U3RyaW5n
PiYgcG9zdE1hcmt1cHMpCi17Ci0gICAgc2l6ZV90IGxlbmd0aCA9IDA7Ci0KLSAgICBzaXplX3Qg
cHJlQ291bnQgPSBwcmVNYXJrdXBzLnNpemUoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IHByZUNvdW50OyArK2kpCi0gICAgICAgIGxlbmd0aCArPSBwcmVNYXJrdXBzW2ldLmxlbmd0aCgp
OwotCi0gICAgc2l6ZV90IHBvc3RDb3VudCA9IHBvc3RNYXJrdXBzLnNpemUoKTsKLSAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IHBvc3RDb3VudDsgKytpKQotICAgICAgICBsZW5ndGggKz0gcG9z
dE1hcmt1cHNbaV0ubGVuZ3RoKCk7Ci0KLSAgICBWZWN0b3I8VUNoYXI+IHJlc3VsdDsKLSAgICBy
ZXN1bHQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShsZW5ndGgpOwotCi0gICAgZm9yIChzaXplX3Qg
aSA9IHByZUNvdW50OyBpID4gMDsgLS1pKQotICAgICAgICBhcHBlbmQocmVzdWx0LCBwcmVNYXJr
dXBzW2kgLSAxXSk7Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHBvc3RDb3VudDsgKytp
KQotICAgICAgICBhcHBlbmQocmVzdWx0LCBwb3N0TWFya3Vwc1tpXSk7Ci0KLSAgICByZXR1cm4g
U3RyaW5nOjphZG9wdChyZXN1bHQpOwotfQotCiBzdGF0aWMgYm9vbCBpc1NwZWNpYWxBbmNlc3Rv
ckJsb2NrKE5vZGUqIG5vZGUpCiB7CiAgICAgaWYgKCFub2RlIHx8ICFpc0Jsb2NrKG5vZGUpKQpA
QCAtNzczLDI1ICs3MzUsODcgQEAKICAgICAgICAgICAgc3R5bGUtPmdldFByb3BlcnR5Q1NTVmFs
dWUoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IpOwogfQogCi1zdGF0aWMgdm9pZCBhZGRTdHls
ZU1hcmt1cChWZWN0b3I8U3RyaW5nPiYgcHJlTWFya3VwcywgVmVjdG9yPFN0cmluZz4mIHBvc3RN
YXJrdXBzLCBDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSwgRG9jdW1lbnQqIGRvY3VtZW50LCBi
b29sIGlzQmxvY2sgPSBmYWxzZSkKLXsKLSAgICAvLyBBbGwgdGV4dC1kZWNvcmF0aW9uLXJlbGF0
ZWQgZWxlbWVudHMgc2hvdWxkIGhhdmUgYmVlbiB0cmVhdGVkIGFzIHNwZWNpYWwgYW5jZXN0b3Jz
Ci0gICAgLy8gSWYgd2UgZXZlciBoaXQgdGhpcyBBU1NFUlQsIHdlIHNob3VsZCBleHBvcnQgU3R5
bGVDaGFuZ2UgaW4gQXBwbHlTdHlsZUNvbW1hbmQgYW5kIHVzZSBpdCBoZXJlCi0gICAgQVNTRVJU
KHByb3BlcnR5TWlzc2luZ09yRXF1YWxUb05vbmUoc3R5bGUsIENTU1Byb3BlcnR5VGV4dERlY29y
YXRpb24pICYmIHByb3BlcnR5TWlzc2luZ09yRXF1YWxUb05vbmUoc3R5bGUsIENTU1Byb3BlcnR5
V2Via2l0VGV4dERlY29yYXRpb25zSW5FZmZlY3QpKTsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FM
KGNvbnN0IFN0cmluZywgZGl2U3R5bGUsICgiPGRpdiBzdHlsZT1cIiIpKTsKLSAgICBERUZJTkVf
U1RBVElDX0xPQ0FMKGNvbnN0IFN0cmluZywgZGl2Q2xvc2UsICgiPC9kaXY+IikpOwotICAgIERF
RklORV9TVEFUSUNfTE9DQUwoY29uc3QgU3RyaW5nLCBzdHlsZVNwYW5PcGVuLCAoIjxzcGFuIGNs
YXNzPVwiIiBBcHBsZVN0eWxlU3BhbkNsYXNzICJcIiBzdHlsZT1cIiIpKTsKLSAgICBERUZJTkVf
U1RBVElDX0xPQ0FMKGNvbnN0IFN0cmluZywgc3R5bGVTcGFuQ2xvc2UsICgiPC9zcGFuPiIpKTsK
LSAgICBWZWN0b3I8VUNoYXI+IG9wZW5UYWc7Ci0gICAgYXBwZW5kKG9wZW5UYWcsIGlzQmxvY2sg
PyBkaXZTdHlsZSA6IHN0eWxlU3Bhbk9wZW4pOwotICAgIGFwcGVuZEF0dHJpYnV0ZVZhbHVlKG9w
ZW5UYWcsIHN0eWxlLT5jc3NUZXh0KCksIGRvY3VtZW50LT5pc0hUTUxEb2N1bWVudCgpKTsKLSAg
ICBvcGVuVGFnLmFwcGVuZCgnXCInKTsKLSAgICBvcGVuVGFnLmFwcGVuZCgnPicpOwotICAgIHBy
ZU1hcmt1cHMuYXBwZW5kKFN0cmluZzo6YWRvcHQob3BlblRhZykpOworY2xhc3MgTWFya3VwQWNj
dW11bGF0b3JXcmFwcGVyIHsKK3B1YmxpYzoKKyAgICBNYXJrdXBBY2N1bXVsYXRvcldyYXBwZXIo
KQorICAgIHsKKyAgICB9CiAKLSAgICBwb3N0TWFya3Vwcy5hcHBlbmQoaXNCbG9jayA/IGRpdkNs
b3NlIDogc3R5bGVTcGFuQ2xvc2UpOwotfQorICAgIHZvaWQgaW5zZXJ0QXRFbmQoY29uc3QgU3Ry
aW5nJiBzKQorICAgIHsKKyAgICAgICAgcG9zdE1hcmt1cHMuYXBwZW5kKHMpOworICAgIH0KIAor
ICAgIHZvaWQgaW5zZXJ0Tm9kZShjb25zdCBOb2RlKiBub2RlLCBjb25zdCBSYW5nZSogcmFuZ2Us
IEVBbm5vdGF0ZUZvckludGVyY2hhbmdlIGFubm90YXRlLCBFQWJzb2x1dGVVUkxzIGFic29sdXRl
VVJMcywgYm9vbCBjb252ZXJ0QmxvY2tzVG9JbmxpbmVzID0gZmFsc2UsIFJhbmdlRnVsbHlTZWxl
Y3RzTm9kZSByYW5nZUZ1bGx5U2VsZWN0c05vZGUgPSBEb2VzRnVsbHlTZWxlY3ROb2RlKQorICAg
IHsKKyAgICAgICAgVmVjdG9yPFVDaGFyPiByZXN1bHQ7CisgICAgICAgIGFwcGVuZFN0YXJ0TWFy
a3VwKHJlc3VsdCwgbm9kZSwgcmFuZ2UsIGFubm90YXRlLCBhYnNvbHV0ZVVSTHMsIGNvbnZlcnRC
bG9ja3NUb0lubGluZXMsIDAsIHJhbmdlRnVsbHlTZWxlY3RzTm9kZSk7CisgICAgICAgIHByZU1h
cmt1cHMuYXBwZW5kKFN0cmluZzo6YWRvcHQocmVzdWx0KSk7CisgICAgICAgIGVuZFRhZ0F0RW5k
KG5vZGUpOworICAgIH0KKworICAgIHZvaWQgb3BlblRhZ0F0RW5kKGNvbnN0IE5vZGUqIG5vZGUs
IGNvbnN0IFJhbmdlKiByYW5nZSwgRUFubm90YXRlRm9ySW50ZXJjaGFuZ2UgYW5ub3RhdGUsIEVB
YnNvbHV0ZVVSTHMgYWJzb2x1dGVVUkxzLCBib29sIGNvbnZlcnRCbG9ja3NUb0lubGluZXMgPSBm
YWxzZSwgUmFuZ2VGdWxseVNlbGVjdHNOb2RlIHJhbmdlRnVsbHlTZWxlY3RzTm9kZSA9IERvZXNG
dWxseVNlbGVjdE5vZGUpCisgICAgeworICAgICAgICBWZWN0b3I8VUNoYXI+IHJlc3VsdDsKKyAg
ICAgICAgYXBwZW5kU3RhcnRNYXJrdXAocmVzdWx0LCBub2RlLCByYW5nZSwgYW5ub3RhdGUsIGFi
c29sdXRlVVJMcywgY29udmVydEJsb2Nrc1RvSW5saW5lcywgMCwgcmFuZ2VGdWxseVNlbGVjdHNO
b2RlKTsKKyAgICAgICAgcG9zdE1hcmt1cHMuYXBwZW5kKFN0cmluZzo6YWRvcHQocmVzdWx0KSk7
CisgICAgfQorCisgICAgdm9pZCBlbmRUYWdBdEVuZChjb25zdCBOb2RlKiBub2RlKQorICAgIHsK
KyAgICAgICAgVmVjdG9yPFVDaGFyPiByZXN1bHQ7CisgICAgICAgIGFwcGVuZEVuZE1hcmt1cChy
ZXN1bHQsIG5vZGUpOworICAgICAgICBwb3N0TWFya3Vwcy5hcHBlbmQoU3RyaW5nOjphZG9wdChy
ZXN1bHQpKTsKKyAgICB9CisKKyAgICB2b2lkIGFkZFN0eWxlKENTU1N0eWxlRGVjbGFyYXRpb24q
IHN0eWxlLCBEb2N1bWVudCogZG9jdW1lbnQsIGJvb2wgaXNCbG9jayA9IGZhbHNlKQorICAgIHsK
KyAgICAgICAgLy8gQWxsIHRleHQtZGVjb3JhdGlvbi1yZWxhdGVkIGVsZW1lbnRzIHNob3VsZCBo
YXZlIGJlZW4gdHJlYXRlZCBhcyBzcGVjaWFsIGFuY2VzdG9ycworICAgICAgICAvLyBJZiB3ZSBl
dmVyIGhpdCB0aGlzIEFTU0VSVCwgd2Ugc2hvdWxkIGV4cG9ydCBTdHlsZUNoYW5nZSBpbiBBcHBs
eVN0eWxlQ29tbWFuZCBhbmQgdXNlIGl0IGhlcmUKKyAgICAgICAgQVNTRVJUKHByb3BlcnR5TWlz
c2luZ09yRXF1YWxUb05vbmUoc3R5bGUsIENTU1Byb3BlcnR5VGV4dERlY29yYXRpb24pICYmIHBy
b3BlcnR5TWlzc2luZ09yRXF1YWxUb05vbmUoc3R5bGUsIENTU1Byb3BlcnR5V2Via2l0VGV4dERl
Y29yYXRpb25zSW5FZmZlY3QpKTsKKyAgICAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBT
dHJpbmcsIGRpdlN0eWxlLCAoIjxkaXYgc3R5bGU9XCIiKSk7CisgICAgICAgIERFRklORV9TVEFU
SUNfTE9DQUwoY29uc3QgU3RyaW5nLCBkaXZDbG9zZSwgKCI8L2Rpdj4iKSk7CisgICAgICAgIERF
RklORV9TVEFUSUNfTE9DQUwoY29uc3QgU3RyaW5nLCBzdHlsZVNwYW5PcGVuLCAoIjxzcGFuIGNs
YXNzPVwiIiBBcHBsZVN0eWxlU3BhbkNsYXNzICJcIiBzdHlsZT1cIiIpKTsKKyAgICAgICAgREVG
SU5FX1NUQVRJQ19MT0NBTChjb25zdCBTdHJpbmcsIHN0eWxlU3BhbkNsb3NlLCAoIjwvc3Bhbj4i
KSk7CisgICAgICAgIFZlY3RvcjxVQ2hhcj4gb3BlblRhZzsKKyAgICAgICAgV2ViQ29yZTo6YXBw
ZW5kKG9wZW5UYWcsIGlzQmxvY2sgPyBkaXZTdHlsZSA6IHN0eWxlU3Bhbk9wZW4pOworICAgICAg
ICBhcHBlbmRBdHRyaWJ1dGVWYWx1ZShvcGVuVGFnLCBzdHlsZS0+Y3NzVGV4dCgpLCBkb2N1bWVu
dC0+aXNIVE1MRG9jdW1lbnQoKSk7CisgICAgICAgIG9wZW5UYWcuYXBwZW5kKCdcIicpOworICAg
ICAgICBvcGVuVGFnLmFwcGVuZCgnPicpOworICAgICAgICBwcmVNYXJrdXBzLmFwcGVuZChTdHJp
bmc6OmFkb3B0KG9wZW5UYWcpKTsKKyAgICAgICAgcG9zdE1hcmt1cHMuYXBwZW5kKGlzQmxvY2sg
PyBkaXZDbG9zZSA6IHN0eWxlU3BhbkNsb3NlKTsKKyAgICB9CisKKyAgICAvLyBGSVhNRTogVGhp
cyBpcyBhIHZlcnkgaW5lZmZpY2llbnQgd2F5IG9mIGFjY3VtdWxhdGluZyB0aGUgbWFya3VwCisg
ICAgLy8gYmV1Y2FzZSB3ZSBjb252ZXJ0IHJlc3VsdHMgb2YgYXBwZW5kU3RhcnRNYXJrdXAgYW5k
IGFwcGVuZEVuZE1hcmt1cCBmcm9tIFZlY3RvcjxVQ2hhcj4gdG8gU3RyaW5nCisgICAgLy8gYW5k
IGhlcmUsIHdlIGNvbnZlcnQgdGhlbSBiYWNrIHRvIFZlY3RvcjxVQ2hhcj4gYW5kIHRoZW4gYWdh
aW4gdG8gU3RyaW5nLgorICAgIFN0cmluZyB0YWtlUmVzdWx0cygpIHsKKyAgICAgICAgc2l6ZV90
IGxlbmd0aCA9IDA7CisKKyAgICAgICAgc2l6ZV90IHByZUNvdW50ID0gcHJlTWFya3Vwcy5zaXpl
KCk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcHJlQ291bnQ7ICsraSkKKyAgICAg
ICAgICAgIGxlbmd0aCArPSBwcmVNYXJrdXBzW2ldLmxlbmd0aCgpOworCisgICAgICAgIHNpemVf
dCBwb3N0Q291bnQgPSBwb3N0TWFya3Vwcy5zaXplKCk7CisgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgcG9zdENvdW50OyArK2kpCisgICAgICAgICAgICBsZW5ndGggKz0gcG9zdE1hcmt1
cHNbaV0ubGVuZ3RoKCk7CisKKyAgICAgICAgVmVjdG9yPFVDaGFyPiByZXN1bHQ7CisgICAgICAg
IHJlc3VsdC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGxlbmd0aCk7CisKKyAgICAgICAgZm9yIChz
aXplX3QgaSA9IHByZUNvdW50OyBpID4gMDsgLS1pKQorICAgICAgICAgICAgV2ViQ29yZTo6YXBw
ZW5kKHJlc3VsdCwgcHJlTWFya3Vwc1tpIC0gMV0pOworCisgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgcG9zdENvdW50OyArK2kpCisgICAgICAgICAgICBXZWJDb3JlOjphcHBlbmQocmVz
dWx0LCBwb3N0TWFya3Vwc1tpXSk7CisKKyAgICAgICAgcmV0dXJuIFN0cmluZzo6YWRvcHQocmVz
dWx0KTsKKyAgICB9Citwcml2YXRlOgorICAgIFZlY3RvcjxTdHJpbmc+IHByZU1hcmt1cHM7Cisg
ICAgVmVjdG9yPFN0cmluZz4gcG9zdE1hcmt1cHM7Cit9OworCiAvLyBGSVhNRTogU2hvdWxkbid0
IHdlIG9taXQgc3R5bGUgaW5mbyB3aGVuIGFubm90YXRlID09IERvTm90QW5ub3RhdGVGb3JJbnRl
cmNoYW5nZT8gCiAvLyBGSVhNRTogQXQgbGVhc3QsIGFubm90YXRpb24gYW5kIHN0eWxlIGluZm8g
c2hvdWxkIHByb2JhYmx5IG5vdCBiZSBpbmNsdWRlZCBpbiByYW5nZS5tYXJrdXBTdHJpbmcoKQog
U3RyaW5nIGNyZWF0ZU1hcmt1cChjb25zdCBSYW5nZSogcmFuZ2UsIFZlY3RvcjxOb2RlKj4qIG5v
ZGVzLCBFQW5ub3RhdGVGb3JJbnRlcmNoYW5nZSBhbm5vdGF0ZSwgYm9vbCBjb252ZXJ0QmxvY2tz
VG9JbmxpbmVzLCBFQWJzb2x1dGVVUkxzIGFic29sdXRlVVJMcykKQEAgLTgyOCw4ICs4NTIsNyBA
QAogCiAgICAgZG9jdW1lbnQtPnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygp
OwogCi0gICAgVmVjdG9yPFN0cmluZz4gbWFya3VwczsKLSAgICBWZWN0b3I8U3RyaW5nPiBwcmVN
YXJrdXBzOworICAgIE1hcmt1cEFjY3VtdWxhdG9yV3JhcHBlciBhY2N1bXVsYXRvcjsKICAgICBO
b2RlKiBwYXN0RW5kID0gdXBkYXRlZFJhbmdlLT5wYXN0TGFzdE5vZGUoKTsKICAgICBOb2RlKiBs
YXN0Q2xvc2VkID0gMDsKICAgICBWZWN0b3I8Tm9kZSo+IGFuY2VzdG9yc1RvQ2xvc2U7CkBAIC04
NDQsNyArODY3LDcgQEAKICAgICAgICAgICAgIHJldHVybiBpbnRlcmNoYW5nZU5ld2xpbmVTdHJp
bmc7CiAgICAgICAgIH0KIAotICAgICAgICBtYXJrdXBzLmFwcGVuZChpbnRlcmNoYW5nZU5ld2xp
bmVTdHJpbmcpOworICAgICAgICBhY2N1bXVsYXRvci5pbnNlcnRBdEVuZChpbnRlcmNoYW5nZU5l
d2xpbmVTdHJpbmcpOwogICAgICAgICBzdGFydE5vZGUgPSB2aXNpYmxlU3RhcnQubmV4dCgpLmRl
ZXBFcXVpdmFsZW50KCkubm9kZSgpOwogCiAgICAgICAgIGlmIChwYXN0RW5kICYmIFJhbmdlOjpj
b21wYXJlQm91bmRhcnlQb2ludHMoc3RhcnROb2RlLCAwLCBwYXN0RW5kLCAwKSA+PSAwKSB7CkBA
IC04ODMsNyArOTA2LDggQEAKICAgICAgICAgCiAgICAgICAgIC8vIEFkZCB0aGUgbm9kZSB0byB0
aGUgbWFya3VwLgogICAgICAgICBpZiAoYWRkTWFya3VwRm9yTm9kZSkgewotICAgICAgICAgICAg
bWFya3Vwcy5hcHBlbmQoZ2V0U3RhcnRNYXJrdXAobiwgdXBkYXRlZFJhbmdlLmdldCgpLCBhbm5v
dGF0ZSwgYWJzb2x1dGVVUkxzKSk7CisKKyAgICAgICAgICAgIGFjY3VtdWxhdG9yLm9wZW5UYWdB
dEVuZChuLCB1cGRhdGVkUmFuZ2UuZ2V0KCksIGFubm90YXRlLCBhYnNvbHV0ZVVSTHMpOwogICAg
ICAgICAgICAgaWYgKG5vZGVzKQogICAgICAgICAgICAgICAgIG5vZGVzLT5hcHBlbmQobik7CiAg
ICAgICAgIH0KQEAgLTg5MSw3ICs5MTUsNyBAQAogICAgICAgICBpZiAobi0+Zmlyc3RDaGlsZCgp
ID09IDAgfHwgc2tpcERlc2NlbmRhbnRzKSB7CiAgICAgICAgICAgICAvLyBOb2RlIGhhcyBubyBj
aGlsZHJlbiwgb3Igd2UgYXJlIHNraXBwaW5nIGl0J3MgZGVzY2VuZGFudHMsIGFkZCBpdHMgY2xv
c2UgdGFnIG5vdy4KICAgICAgICAgICAgIGlmIChhZGRNYXJrdXBGb3JOb2RlKSB7Ci0gICAgICAg
ICAgICAgICAgbWFya3Vwcy5hcHBlbmQoZ2V0RW5kTWFya3VwKG4pKTsKKyAgICAgICAgICAgICAg
ICBhY2N1bXVsYXRvci5lbmRUYWdBdEVuZChuKTsKICAgICAgICAgICAgICAgICBsYXN0Q2xvc2Vk
ID0gbjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIApAQCAtOTA0LDcgKzkyOCw3IEBACiAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAobmV4dCAhPSBwYXN0RW5kICYmIG5leHQtPmlzRGVz
Y2VuZGFudE9mKGFuY2VzdG9yKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5vdCBhdCB0aGUgZW5kIG9mIHRoZSByYW5nZSwg
Y2xvc2UgYW5jZXN0b3JzIHVwIHRvIHNpYmxpbmcgb2YgbmV4dCBub2RlLgotICAgICAgICAgICAg
ICAgICAgICAgICAgbWFya3Vwcy5hcHBlbmQoZ2V0RW5kTWFya3VwKGFuY2VzdG9yKSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBhY2N1bXVsYXRvci5lbmRUYWdBdEVuZChhbmNlc3Rvcik7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBsYXN0Q2xvc2VkID0gYW5jZXN0b3I7CiAgICAgICAgICAg
ICAgICAgICAgICAgICBhbmNlc3RvcnNUb0Nsb3NlLnJlbW92ZUxhc3QoKTsKICAgICAgICAgICAg
ICAgICAgICAgfSB3aGlsZSAoIWFuY2VzdG9yc1RvQ2xvc2UuaXNFbXB0eSgpKTsKQEAgLTkyMCw4
ICs5NDQsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gb3IgYikgYW5jZXN0b3JzIHRoYXQgd2UgbmV2ZXIgZW5jb3Vu
dGVyZWQgZHVyaW5nIGEgcHJlLW9yZGVyIHRyYXZlcnNhbCBzdGFydGluZyBhdCBzdGFydE5vZGU6
CiAgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQoc3RhcnROb2RlLT5pc0Rlc2NlbmRhbnRP
ZihwYXJlbnQpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHByZU1hcmt1cHMuYXBwZW5kKGdl
dFN0YXJ0TWFya3VwKHBhcmVudCwgdXBkYXRlZFJhbmdlLmdldCgpLCBhbm5vdGF0ZSwgYWJzb2x1
dGVVUkxzKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtYXJrdXBzLmFwcGVuZChnZXRFbmRN
YXJrdXAocGFyZW50KSk7CisgICAgICAgICAgICAgICAgICAgICAgICBhY2N1bXVsYXRvci5pbnNl
cnROb2RlKHBhcmVudCwgdXBkYXRlZFJhbmdlLmdldCgpLCBhbm5vdGF0ZSwgYWJzb2x1dGVVUkxz
KTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlcykKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBub2Rlcy0+YXBwZW5kKHBhcmVudCk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBsYXN0Q2xvc2VkID0gcGFyZW50OwpAQCAtMTAwMSwxMyArMTAyNCwxMiBAQAogICAgICAgICAg
ICAgICAgICAgICAgICAgZnVsbHlTZWxlY3RlZFJvb3RTdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJv
cGVydHlUZXh0RGVjb3JhdGlvbiwgQ1NTVmFsdWVOb25lKTsKICAgICAgICAgICAgICAgICAgICAg
aWYgKCFwcm9wZXJ0eU1pc3NpbmdPckVxdWFsVG9Ob25lKGZ1bGx5U2VsZWN0ZWRSb290U3R5bGUu
Z2V0KCksIENTU1Byb3BlcnR5V2Via2l0VGV4dERlY29yYXRpb25zSW5FZmZlY3QpKQogICAgICAg
ICAgICAgICAgICAgICAgICAgZnVsbHlTZWxlY3RlZFJvb3RTdHlsZS0+c2V0UHJvcGVydHkoQ1NT
UHJvcGVydHlXZWJraXRUZXh0RGVjb3JhdGlvbnNJbkVmZmVjdCwgQ1NTVmFsdWVOb25lKTsKLSAg
ICAgICAgICAgICAgICAgICAgYWRkU3R5bGVNYXJrdXAocHJlTWFya3VwcywgbWFya3VwcywgZnVs
bHlTZWxlY3RlZFJvb3RTdHlsZS5nZXQoKSwgZG9jdW1lbnQsIHRydWUpOworICAgICAgICAgICAg
ICAgICAgICBhY2N1bXVsYXRvci5hZGRTdHlsZShmdWxseVNlbGVjdGVkUm9vdFN0eWxlLmdldCgp
LCBkb2N1bWVudCwgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBlbHNl
IHsKICAgICAgICAgICAgICAgICAvLyBTaW5jZSB0aGlzIG5vZGUgYW5kIGFsbCB0aGUgb3RoZXIg
YW5jZXN0b3JzIGFyZSBub3QgaW4gdGhlIHNlbGVjdGlvbiB3ZSB3YW50IHRvIHNldCBSYW5nZUZ1
bGx5U2VsZWN0c05vZGUgdG8gRG9lc05vdEZ1bGx5U2VsZWN0Tm9kZQogICAgICAgICAgICAgICAg
IC8vIHNvIHRoYXQgc3R5bGVzIHRoYXQgYWZmZWN0IHRoZSBleHRlcmlvciBvZiB0aGUgbm9kZSBh
cmUgbm90IGluY2x1ZGVkLgotICAgICAgICAgICAgICAgIHByZU1hcmt1cHMuYXBwZW5kKGdldFN0
YXJ0TWFya3VwKGFuY2VzdG9yLCB1cGRhdGVkUmFuZ2UuZ2V0KCksIGFubm90YXRlLCBhYnNvbHV0
ZVVSTHMsIGNvbnZlcnRCbG9ja3NUb0lubGluZXMsIDAsIERvZXNOb3RGdWxseVNlbGVjdE5vZGUp
KTsKLSAgICAgICAgICAgICAgICBtYXJrdXBzLmFwcGVuZChnZXRFbmRNYXJrdXAoYW5jZXN0b3Ip
KTsKKyAgICAgICAgICAgICAgICBhY2N1bXVsYXRvci5pbnNlcnROb2RlKGFuY2VzdG9yLCB1cGRh
dGVkUmFuZ2UuZ2V0KCksIGFubm90YXRlLCBhYnNvbHV0ZVVSTHMsIGNvbnZlcnRCbG9ja3NUb0lu
bGluZXMsIERvZXNOb3RGdWxseVNlbGVjdE5vZGUpOwogICAgICAgICAgICAgfQogICAgICAgICAg
ICAgaWYgKG5vZGVzKQogICAgICAgICAgICAgICAgIG5vZGVzLT5hcHBlbmQoYW5jZXN0b3IpOwpA
QCAtMTAzOSw3ICsxMDYxLDcgQEAKICAgICAgICAgICAgIHN0eWxlLT5yZW1vdmVCbG9ja1Byb3Bl
cnRpZXMoKTsKIAogICAgICAgICBpZiAoc3R5bGUtPmxlbmd0aCgpID4gMCkKLSAgICAgICAgICAg
IGFkZFN0eWxlTWFya3VwKHByZU1hcmt1cHMsIG1hcmt1cHMsIHN0eWxlLmdldCgpLCBkb2N1bWVu
dCk7CisgICAgICAgICAgICBhY2N1bXVsYXRvci5hZGRTdHlsZShzdHlsZS5nZXQoKSwgZG9jdW1l
bnQpOwogICAgIH0KICAgICAKICAgICBpZiAobGFzdENsb3NlZCAmJiBsYXN0Q2xvc2VkICE9IGRv
Y3VtZW50LT5kb2N1bWVudEVsZW1lbnQoKSkgewpAQCAtMTA0OSwxNyArMTA3MSwxNyBAQAogICAg
ICAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IGRlZmF1bHRTdHlsZSA9IEFw
cGx5U3R5bGVDb21tYW5kOjplZGl0aW5nU3R5bGVBdFBvc2l0aW9uKFBvc2l0aW9uKGRvY3VtZW50
LT5kb2N1bWVudEVsZW1lbnQoKSwgMCkpOwogCiAgICAgICAgIGlmIChkZWZhdWx0U3R5bGUtPmxl
bmd0aCgpID4gMCkKLSAgICAgICAgICAgIGFkZFN0eWxlTWFya3VwKHByZU1hcmt1cHMsIG1hcmt1
cHMsIGRlZmF1bHRTdHlsZS5nZXQoKSwgZG9jdW1lbnQpOworICAgICAgICAgICAgYWNjdW11bGF0
b3IuYWRkU3R5bGUoZGVmYXVsdFN0eWxlLmdldCgpLCBkb2N1bWVudCk7CiAgICAgfQogCiAgICAg
Ly8gRklYTUU6IFRoZSBpbnRlcmNoYW5nZSBuZXdsaW5lIHNob3VsZCBiZSBwbGFjZWQgaW4gdGhl
IGJsb2NrIHRoYXQgaXQncyBpbiwgbm90IGFmdGVyIGFsbCBvZiB0aGUgY29udGVudCwgdW5jb25k
aXRpb25hbGx5LgogICAgIGlmIChhbm5vdGF0ZSAmJiBuZWVkSW50ZXJjaGFuZ2VOZXdsaW5lQWZ0
ZXIodmlzaWJsZUVuZC5wcmV2aW91cygpKSkKLSAgICAgICAgbWFya3Vwcy5hcHBlbmQoaW50ZXJj
aGFuZ2VOZXdsaW5lU3RyaW5nKTsKLSAgICAKKyAgICAgICAgYWNjdW11bGF0b3IuaW5zZXJ0QXRF
bmQoaW50ZXJjaGFuZ2VOZXdsaW5lU3RyaW5nKTsKKwogICAgIGlmIChkZWxldGVCdXR0b24pCiAg
ICAgICAgIGRlbGV0ZUJ1dHRvbi0+ZW5hYmxlKCk7CiAKLSAgICByZXR1cm4gam9pbk1hcmt1cHMo
cHJlTWFya3VwcywgbWFya3Vwcyk7CisgICAgcmV0dXJuIGFjY3VtdWxhdG9yLnRha2VSZXN1bHRz
KCk7CiB9CiAKIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gY3JlYXRlRnJhZ21lbnRGcm9t
TWFya3VwKERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgU3RyaW5nJiBtYXJrdXAsIGNvbnN0IFN0
cmluZyYgYmFzZVVSTCwgRnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uIHNjcmlwdGluZ1Blcm1p
c3Npb24pCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>63167</attachid>
            <date>2010-07-31 19:23:32 -0700</date>
            <delta_ts>2010-07-31 19:39:51 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-43227-20100731192330.patch</filename>
            <type>text/plain</type>
            <size>13992</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NDQzMikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjUgQEAKKzIwMTAtMDctMzEgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgR3Jv
dXAgZnVuY3Rpb25zIHVzZWQgaW4gY3JlYXRlTWFya3VwIChyYW5nZSB2ZXJzaW9uKSBpbnRvIGEg
Y2xhc3Mgc28gdGhleSBhcmUgZWFzaWVyIHRvIHVuZGVyc3RhbmQKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQzMjI3CisKKyAgICAgICAgQWRkZWQgTWFy
a3VwQWNjdW11bGF0b3JXcmFwcGVyIHRvIGdyb3VwIGdldFN0YXJ0TWFya3VwLCBnZXRFbmRNYXJr
dXAsIGpvaW5NYXJrdXBzLCBhbmQgYWRkU3R5bGVNYXJrdXAuCisgICAgICAgIE1hcmt1cEFjY3Vt
dWxhdG9yV3JhcHBlciBpcyBpbnRlbmRlZCB0byBiZSBtZXJnZWQgd2l0aCBNYXJrdXBBY2N1bXVs
YXRvciBpbiB0aGUgZnV0dXJlLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyBhZGRlZCBzaW5jZSB0
aGlzIGlzIGEgY2xlYW4gdXAuCisKKyAgICAgICAgKiBlZGl0aW5nL21hcmt1cC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpNYXJrdXBBY2N1bXVsYXRvcldyYXBwZXI6Ok1hcmt1cEFjY3VtdWxhdG9y
V3JhcHBlcik6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6TWFya3VwQWNjdW11bGF0b3JXcmFw
cGVyOjppbnNlcnRTdHJpbmcpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok1hcmt1cEFjY3Vt
dWxhdG9yV3JhcHBlcjo6aW5zZXJ0T3BlblRhZyk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
TWFya3VwQWNjdW11bGF0b3JXcmFwcGVyOjppbnNlcnRFbmRUYWcpOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6Ok1hcmt1cEFjY3VtdWxhdG9yV3JhcHBlcjo6d3JhcFdpdGhOb2RlKTogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpNYXJrdXBBY2N1bXVsYXRvcldyYXBwZXI6OndyYXBXaXRoU3R5
bGVTcGFuKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpNYXJrdXBBY2N1bXVsYXRvcldyYXBw
ZXI6OnRha2VSZXN1bHRzKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVNYXJrdXAp
OiBVc2VzIE1hcmt1cEFjY3VtdWxhdG9yV3JhcHBlci4KKwogMjAxMC0wNy0zMSAgUnlvc3VrZSBO
aXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBPamFuIFZhZmFp
LgpJbmRleDogV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9lZGl0aW5nL21hcmt1cC5jcHAJKHJldmlzaW9uIDY0NDMyKQorKysgV2ViQ29yZS9lZGl0aW5n
L21hcmt1cC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1NSwxMyArNTU1LDYgQEAgc3RhdGljIHZv
aWQgYXBwZW5kU3RhcnRNYXJrdXAoVmVjdG9yPFVDaAogICAgIH0KIH0KIAotc3RhdGljIFN0cmlu
ZyBnZXRTdGFydE1hcmt1cChjb25zdCBOb2RlKiBub2RlLCBjb25zdCBSYW5nZSogcmFuZ2UsIEVB
bm5vdGF0ZUZvckludGVyY2hhbmdlIGFubm90YXRlLCBFQWJzb2x1dGVVUkxzIGFic29sdXRlVVJM
cywgYm9vbCBjb252ZXJ0QmxvY2tzVG9JbmxpbmVzID0gZmFsc2UsIEhhc2hNYXA8QXRvbWljU3Ry
aW5nSW1wbCosIEF0b21pY1N0cmluZ0ltcGwqPiogbmFtZXNwYWNlcyA9IDAsIFJhbmdlRnVsbHlT
ZWxlY3RzTm9kZSByYW5nZUZ1bGx5U2VsZWN0c05vZGUgPSBEb2VzRnVsbHlTZWxlY3ROb2RlKQot
ewotICAgIFZlY3RvcjxVQ2hhcj4gcmVzdWx0OwotICAgIGFwcGVuZFN0YXJ0TWFya3VwKHJlc3Vs
dCwgbm9kZSwgcmFuZ2UsIGFubm90YXRlLCBhYnNvbHV0ZVVSTHMsIGNvbnZlcnRCbG9ja3NUb0lu
bGluZXMsIG5hbWVzcGFjZXMsIHJhbmdlRnVsbHlTZWxlY3RzTm9kZSk7Ci0gICAgcmV0dXJuIFN0
cmluZzo6YWRvcHQocmVzdWx0KTsKLX0KLQogc3RhdGljIGlubGluZSBib29sIGRvZXNIVE1MRm9y
YmlkRW5kVGFnKGNvbnN0IE5vZGUgKm5vZGUpCiB7CiAgICAgaWYgKG5vZGUtPmlzSFRNTEVsZW1l
bnQoKSkgewpAQCAtNTk4LDEzICs1OTEsNiBAQCBzdGF0aWMgdm9pZCBhcHBlbmRFbmRNYXJrdXAo
VmVjdG9yPFVDaGFyCiAgICAgcmVzdWx0LmFwcGVuZCgnPicpOwogfQogCi1zdGF0aWMgU3RyaW5n
IGdldEVuZE1hcmt1cChjb25zdCBOb2RlICpub2RlKQotewotICAgIFZlY3RvcjxVQ2hhcj4gcmVz
dWx0OwotICAgIGFwcGVuZEVuZE1hcmt1cChyZXN1bHQsIG5vZGUpOwotICAgIHJldHVybiBTdHJp
bmc6OmFkb3B0KHJlc3VsdCk7Ci19Ci0KIGNsYXNzIE1hcmt1cEFjY3VtdWxhdG9yIHsKIHB1Ymxp
YzoKICAgICBNYXJrdXBBY2N1bXVsYXRvcihOb2RlKiBub2RlVG9Ta2lwLCBWZWN0b3I8Tm9kZSo+
KiBub2RlcykKQEAgLTcyMiwzMCArNzA4LDYgQEAgc3RhdGljIGJvb2wgaXNFbGVtZW50UHJlc2Vu
dGF0aW9uYWwoY29ucwogICAgIHJldHVybiAhcHJvcGVydHlNaXNzaW5nT3JFcXVhbFRvTm9uZShz
dHlsZS5nZXQoKSwgQ1NTUHJvcGVydHlUZXh0RGVjb3JhdGlvbik7CiB9CiAKLXN0YXRpYyBTdHJp
bmcgam9pbk1hcmt1cHMoY29uc3QgVmVjdG9yPFN0cmluZz4mIHByZU1hcmt1cHMsIGNvbnN0IFZl
Y3RvcjxTdHJpbmc+JiBwb3N0TWFya3VwcykKLXsKLSAgICBzaXplX3QgbGVuZ3RoID0gMDsKLQot
ICAgIHNpemVfdCBwcmVDb3VudCA9IHByZU1hcmt1cHMuc2l6ZSgpOwotICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgcHJlQ291bnQ7ICsraSkKLSAgICAgICAgbGVuZ3RoICs9IHByZU1hcmt1cHNb
aV0ubGVuZ3RoKCk7Ci0KLSAgICBzaXplX3QgcG9zdENvdW50ID0gcG9zdE1hcmt1cHMuc2l6ZSgp
OwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcG9zdENvdW50OyArK2kpCi0gICAgICAgIGxl
bmd0aCArPSBwb3N0TWFya3Vwc1tpXS5sZW5ndGgoKTsKLQotICAgIFZlY3RvcjxVQ2hhcj4gcmVz
dWx0OwotICAgIHJlc3VsdC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGxlbmd0aCk7Ci0KLSAgICBm
b3IgKHNpemVfdCBpID0gcHJlQ291bnQ7IGkgPiAwOyAtLWkpCi0gICAgICAgIGFwcGVuZChyZXN1
bHQsIHByZU1hcmt1cHNbaSAtIDFdKTsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcG9z
dENvdW50OyArK2kpCi0gICAgICAgIGFwcGVuZChyZXN1bHQsIHBvc3RNYXJrdXBzW2ldKTsKLQot
ICAgIHJldHVybiBTdHJpbmc6OmFkb3B0KHJlc3VsdCk7Ci19Ci0KIHN0YXRpYyBib29sIGlzU3Bl
Y2lhbEFuY2VzdG9yQmxvY2soTm9kZSogbm9kZSkKIHsKICAgICBpZiAoIW5vZGUgfHwgIWlzQmxv
Y2sobm9kZSkpCkBAIC03NzMsMjQgKzczNSw4NyBAQCBzdGF0aWMgYm9vbCBzaG91bGRJbmNsdWRl
V3JhcHBlckZvckZ1bGx5CiAgICAgICAgICAgIHN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENT
U1Byb3BlcnR5QmFja2dyb3VuZENvbG9yKTsKIH0KIAotc3RhdGljIHZvaWQgYWRkU3R5bGVNYXJr
dXAoVmVjdG9yPFN0cmluZz4mIHByZU1hcmt1cHMsIFZlY3RvcjxTdHJpbmc+JiBwb3N0TWFya3Vw
cywgQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUsIERvY3VtZW50KiBkb2N1bWVudCwgYm9vbCBp
c0Jsb2NrID0gZmFsc2UpCi17Ci0gICAgLy8gQWxsIHRleHQtZGVjb3JhdGlvbi1yZWxhdGVkIGVs
ZW1lbnRzIHNob3VsZCBoYXZlIGJlZW4gdHJlYXRlZCBhcyBzcGVjaWFsIGFuY2VzdG9ycwotICAg
IC8vIElmIHdlIGV2ZXIgaGl0IHRoaXMgQVNTRVJULCB3ZSBzaG91bGQgZXhwb3J0IFN0eWxlQ2hh
bmdlIGluIEFwcGx5U3R5bGVDb21tYW5kIGFuZCB1c2UgaXQgaGVyZQotICAgIEFTU0VSVChwcm9w
ZXJ0eU1pc3NpbmdPckVxdWFsVG9Ob25lKHN0eWxlLCBDU1NQcm9wZXJ0eVRleHREZWNvcmF0aW9u
KSAmJiBwcm9wZXJ0eU1pc3NpbmdPckVxdWFsVG9Ob25lKHN0eWxlLCBDU1NQcm9wZXJ0eVdlYmtp
dFRleHREZWNvcmF0aW9uc0luRWZmZWN0KSk7Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25z
dCBTdHJpbmcsIGRpdlN0eWxlLCAoIjxkaXYgc3R5bGU9XCIiKSk7Ci0gICAgREVGSU5FX1NUQVRJ
Q19MT0NBTChjb25zdCBTdHJpbmcsIGRpdkNsb3NlLCAoIjwvZGl2PiIpKTsKLSAgICBERUZJTkVf
U1RBVElDX0xPQ0FMKGNvbnN0IFN0cmluZywgc3R5bGVTcGFuT3BlbiwgKCI8c3BhbiBjbGFzcz1c
IiIgQXBwbGVTdHlsZVNwYW5DbGFzcyAiXCIgc3R5bGU9XCIiKSk7Ci0gICAgREVGSU5FX1NUQVRJ
Q19MT0NBTChjb25zdCBTdHJpbmcsIHN0eWxlU3BhbkNsb3NlLCAoIjwvc3Bhbj4iKSk7Ci0gICAg
VmVjdG9yPFVDaGFyPiBvcGVuVGFnOwotICAgIGFwcGVuZChvcGVuVGFnLCBpc0Jsb2NrID8gZGl2
U3R5bGUgOiBzdHlsZVNwYW5PcGVuKTsKLSAgICBhcHBlbmRBdHRyaWJ1dGVWYWx1ZShvcGVuVGFn
LCBzdHlsZS0+Y3NzVGV4dCgpLCBkb2N1bWVudC0+aXNIVE1MRG9jdW1lbnQoKSk7Ci0gICAgb3Bl
blRhZy5hcHBlbmQoJ1wiJyk7Ci0gICAgb3BlblRhZy5hcHBlbmQoJz4nKTsKLSAgICBwcmVNYXJr
dXBzLmFwcGVuZChTdHJpbmc6OmFkb3B0KG9wZW5UYWcpKTsKK2NsYXNzIE1hcmt1cEFjY3VtdWxh
dG9yV3JhcHBlciB7CitwdWJsaWM6CisgICAgTWFya3VwQWNjdW11bGF0b3JXcmFwcGVyKCkKKyAg
ICB7CisgICAgfQogCi0gICAgcG9zdE1hcmt1cHMuYXBwZW5kKGlzQmxvY2sgPyBkaXZDbG9zZSA6
IHN0eWxlU3BhbkNsb3NlKTsKLX0KKyAgICB2b2lkIGluc2VydFN0cmluZyhjb25zdCBTdHJpbmcm
IHMpCisgICAgeworICAgICAgICBwb3N0TWFya3Vwcy5hcHBlbmQocyk7CisgICAgfQorCisgICAg
dm9pZCBpbnNlcnRPcGVuVGFnKGNvbnN0IE5vZGUqIG5vZGUsIGNvbnN0IFJhbmdlKiByYW5nZSwg
RUFubm90YXRlRm9ySW50ZXJjaGFuZ2UgYW5ub3RhdGUsIEVBYnNvbHV0ZVVSTHMgYWJzb2x1dGVV
UkxzLCBib29sIGNvbnZlcnRCbG9ja3NUb0lubGluZXMgPSBmYWxzZSwgUmFuZ2VGdWxseVNlbGVj
dHNOb2RlIHJhbmdlRnVsbHlTZWxlY3RzTm9kZSA9IERvZXNGdWxseVNlbGVjdE5vZGUpCisgICAg
eworICAgICAgICBWZWN0b3I8VUNoYXI+IHJlc3VsdDsKKyAgICAgICAgYXBwZW5kU3RhcnRNYXJr
dXAocmVzdWx0LCBub2RlLCByYW5nZSwgYW5ub3RhdGUsIGFic29sdXRlVVJMcywgY29udmVydEJs
b2Nrc1RvSW5saW5lcywgMCwgcmFuZ2VGdWxseVNlbGVjdHNOb2RlKTsKKyAgICAgICAgcG9zdE1h
cmt1cHMuYXBwZW5kKFN0cmluZzo6YWRvcHQocmVzdWx0KSk7CisgICAgfQorCisgICAgdm9pZCBp
bnNlcnRFbmRUYWcoY29uc3QgTm9kZSogbm9kZSkKKyAgICB7CisgICAgICAgIFZlY3RvcjxVQ2hh
cj4gcmVzdWx0OworICAgICAgICBhcHBlbmRFbmRNYXJrdXAocmVzdWx0LCBub2RlKTsKKyAgICAg
ICAgcG9zdE1hcmt1cHMuYXBwZW5kKFN0cmluZzo6YWRvcHQocmVzdWx0KSk7CisgICAgfQorCisg
ICAgdm9pZCB3cmFwV2l0aE5vZGUoY29uc3QgTm9kZSogbm9kZSwgY29uc3QgUmFuZ2UqIHJhbmdl
LCBFQW5ub3RhdGVGb3JJbnRlcmNoYW5nZSBhbm5vdGF0ZSwgRUFic29sdXRlVVJMcyBhYnNvbHV0
ZVVSTHMsIGJvb2wgY29udmVydEJsb2Nrc1RvSW5saW5lcyA9IGZhbHNlLCBSYW5nZUZ1bGx5U2Vs
ZWN0c05vZGUgcmFuZ2VGdWxseVNlbGVjdHNOb2RlID0gRG9lc0Z1bGx5U2VsZWN0Tm9kZSkKKyAg
ICB7CisgICAgICAgIFZlY3RvcjxVQ2hhcj4gcmVzdWx0OworICAgICAgICBhcHBlbmRTdGFydE1h
cmt1cChyZXN1bHQsIG5vZGUsIHJhbmdlLCBhbm5vdGF0ZSwgYWJzb2x1dGVVUkxzLCBjb252ZXJ0
QmxvY2tzVG9JbmxpbmVzLCAwLCByYW5nZUZ1bGx5U2VsZWN0c05vZGUpOworICAgICAgICBwcmVN
YXJrdXBzLmFwcGVuZChTdHJpbmc6OmFkb3B0KHJlc3VsdCkpOworICAgICAgICBpbnNlcnRFbmRU
YWcobm9kZSk7CisgICAgfQorCisgICAgdm9pZCB3cmFwV2l0aFN0eWxlU3BhbihDU1NTdHlsZURl
Y2xhcmF0aW9uKiBzdHlsZSwgRG9jdW1lbnQqIGRvY3VtZW50LCBib29sIGlzQmxvY2sgPSBmYWxz
ZSkKKyAgICB7CisgICAgICAgIC8vIEFsbCB0ZXh0LWRlY29yYXRpb24tcmVsYXRlZCBlbGVtZW50
cyBzaG91bGQgaGF2ZSBiZWVuIHRyZWF0ZWQgYXMgc3BlY2lhbCBhbmNlc3RvcnMKKyAgICAgICAg
Ly8gSWYgd2UgZXZlciBoaXQgdGhpcyBBU1NFUlQsIHdlIHNob3VsZCBleHBvcnQgU3R5bGVDaGFu
Z2UgaW4gQXBwbHlTdHlsZUNvbW1hbmQgYW5kIHVzZSBpdCBoZXJlCisgICAgICAgIEFTU0VSVChw
cm9wZXJ0eU1pc3NpbmdPckVxdWFsVG9Ob25lKHN0eWxlLCBDU1NQcm9wZXJ0eVRleHREZWNvcmF0
aW9uKSAmJiBwcm9wZXJ0eU1pc3NpbmdPckVxdWFsVG9Ob25lKHN0eWxlLCBDU1NQcm9wZXJ0eVdl
YmtpdFRleHREZWNvcmF0aW9uc0luRWZmZWN0KSk7CisgICAgICAgIERFRklORV9TVEFUSUNfTE9D
QUwoY29uc3QgU3RyaW5nLCBkaXZTdHlsZSwgKCI8ZGl2IHN0eWxlPVwiIikpOworICAgICAgICBE
RUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IFN0cmluZywgZGl2Q2xvc2UsICgiPC9kaXY+IikpOwor
ICAgICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IFN0cmluZywgc3R5bGVTcGFuT3Blbiwg
KCI8c3BhbiBjbGFzcz1cIiIgQXBwbGVTdHlsZVNwYW5DbGFzcyAiXCIgc3R5bGU9XCIiKSk7Cisg
ICAgICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29uc3QgU3RyaW5nLCBzdHlsZVNwYW5DbG9zZSwg
KCI8L3NwYW4+IikpOworICAgICAgICBWZWN0b3I8VUNoYXI+IG9wZW5UYWc7CisgICAgICAgIFdl
YkNvcmU6OmFwcGVuZChvcGVuVGFnLCBpc0Jsb2NrID8gZGl2U3R5bGUgOiBzdHlsZVNwYW5PcGVu
KTsKKyAgICAgICAgYXBwZW5kQXR0cmlidXRlVmFsdWUob3BlblRhZywgc3R5bGUtPmNzc1RleHQo
KSwgZG9jdW1lbnQtPmlzSFRNTERvY3VtZW50KCkpOworICAgICAgICBvcGVuVGFnLmFwcGVuZCgn
XCInKTsKKyAgICAgICAgb3BlblRhZy5hcHBlbmQoJz4nKTsKKyAgICAgICAgcHJlTWFya3Vwcy5h
cHBlbmQoU3RyaW5nOjphZG9wdChvcGVuVGFnKSk7CisgICAgICAgIHBvc3RNYXJrdXBzLmFwcGVu
ZChpc0Jsb2NrID8gZGl2Q2xvc2UgOiBzdHlsZVNwYW5DbG9zZSk7CisgICAgfQorCisgICAgLy8g
RklYTUU6IFRoaXMgaXMgYSB2ZXJ5IGluZWZmaWNpZW50IHdheSBvZiBhY2N1bXVsYXRpbmcgdGhl
IG1hcmt1cC4KKyAgICAvLyBXZSdyZSBjb252ZXJ0aW5nIHJlc3VsdHMgb2YgYXBwZW5kU3RhcnRN
YXJrdXAgYW5kIGFwcGVuZEVuZE1hcmt1cCBmcm9tIFZlY3RvcjxVQ2hhcj4gdG8gU3RyaW5nCisg
ICAgLy8gYW5kIHRoZW4gYmFjayB0byBWZWN0b3I8VUNoYXI+IGFuZCBhZ2FpbiB0byBTdHJpbmcg
aGVyZS4KKyAgICBTdHJpbmcgdGFrZVJlc3VsdHMoKQorICAgIHsKKyAgICAgICAgc2l6ZV90IGxl
bmd0aCA9IDA7CisKKyAgICAgICAgc2l6ZV90IHByZUNvdW50ID0gcHJlTWFya3Vwcy5zaXplKCk7
CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcHJlQ291bnQ7ICsraSkKKyAgICAgICAg
ICAgIGxlbmd0aCArPSBwcmVNYXJrdXBzW2ldLmxlbmd0aCgpOworCisgICAgICAgIHNpemVfdCBw
b3N0Q291bnQgPSBwb3N0TWFya3Vwcy5zaXplKCk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgcG9zdENvdW50OyArK2kpCisgICAgICAgICAgICBsZW5ndGggKz0gcG9zdE1hcmt1cHNb
aV0ubGVuZ3RoKCk7CisKKyAgICAgICAgVmVjdG9yPFVDaGFyPiByZXN1bHQ7CisgICAgICAgIHJl
c3VsdC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGxlbmd0aCk7CisKKyAgICAgICAgZm9yIChzaXpl
X3QgaSA9IHByZUNvdW50OyBpID4gMDsgLS1pKQorICAgICAgICAgICAgV2ViQ29yZTo6YXBwZW5k
KHJlc3VsdCwgcHJlTWFya3Vwc1tpIC0gMV0pOworCisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgcG9zdENvdW50OyArK2kpCisgICAgICAgICAgICBXZWJDb3JlOjphcHBlbmQocmVzdWx0
LCBwb3N0TWFya3Vwc1tpXSk7CisKKyAgICAgICAgcmV0dXJuIFN0cmluZzo6YWRvcHQocmVzdWx0
KTsKKyAgICB9Citwcml2YXRlOgorICAgIFZlY3RvcjxTdHJpbmc+IHByZU1hcmt1cHM7CisgICAg
VmVjdG9yPFN0cmluZz4gcG9zdE1hcmt1cHM7Cit9OwogCiAvLyBGSVhNRTogU2hvdWxkbid0IHdl
IG9taXQgc3R5bGUgaW5mbyB3aGVuIGFubm90YXRlID09IERvTm90QW5ub3RhdGVGb3JJbnRlcmNo
YW5nZT8gCiAvLyBGSVhNRTogQXQgbGVhc3QsIGFubm90YXRpb24gYW5kIHN0eWxlIGluZm8gc2hv
dWxkIHByb2JhYmx5IG5vdCBiZSBpbmNsdWRlZCBpbiByYW5nZS5tYXJrdXBTdHJpbmcoKQpAQCAt
ODI4LDggKzg1Myw3IEBAIFN0cmluZyBjcmVhdGVNYXJrdXAoY29uc3QgUmFuZ2UqIHJhbmdlLCAK
IAogICAgIGRvY3VtZW50LT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsK
IAotICAgIFZlY3RvcjxTdHJpbmc+IG1hcmt1cHM7Ci0gICAgVmVjdG9yPFN0cmluZz4gcHJlTWFy
a3VwczsKKyAgICBNYXJrdXBBY2N1bXVsYXRvcldyYXBwZXIgYWNjdW11bGF0b3I7CiAgICAgTm9k
ZSogcGFzdEVuZCA9IHVwZGF0ZWRSYW5nZS0+cGFzdExhc3ROb2RlKCk7CiAgICAgTm9kZSogbGFz
dENsb3NlZCA9IDA7CiAgICAgVmVjdG9yPE5vZGUqPiBhbmNlc3RvcnNUb0Nsb3NlOwpAQCAtODQ0
LDcgKzg2OCw3IEBAIFN0cmluZyBjcmVhdGVNYXJrdXAoY29uc3QgUmFuZ2UqIHJhbmdlLCAKICAg
ICAgICAgICAgIHJldHVybiBpbnRlcmNoYW5nZU5ld2xpbmVTdHJpbmc7CiAgICAgICAgIH0KIAot
ICAgICAgICBtYXJrdXBzLmFwcGVuZChpbnRlcmNoYW5nZU5ld2xpbmVTdHJpbmcpOworICAgICAg
ICBhY2N1bXVsYXRvci5pbnNlcnRTdHJpbmcoaW50ZXJjaGFuZ2VOZXdsaW5lU3RyaW5nKTsKICAg
ICAgICAgc3RhcnROb2RlID0gdmlzaWJsZVN0YXJ0Lm5leHQoKS5kZWVwRXF1aXZhbGVudCgpLm5v
ZGUoKTsKIAogICAgICAgICBpZiAocGFzdEVuZCAmJiBSYW5nZTo6Y29tcGFyZUJvdW5kYXJ5UG9p
bnRzKHN0YXJ0Tm9kZSwgMCwgcGFzdEVuZCwgMCkgPj0gMCkgewpAQCAtODgzLDcgKzkwNyw4IEBA
IFN0cmluZyBjcmVhdGVNYXJrdXAoY29uc3QgUmFuZ2UqIHJhbmdlLCAKICAgICAgICAgCiAgICAg
ICAgIC8vIEFkZCB0aGUgbm9kZSB0byB0aGUgbWFya3VwLgogICAgICAgICBpZiAoYWRkTWFya3Vw
Rm9yTm9kZSkgewotICAgICAgICAgICAgbWFya3Vwcy5hcHBlbmQoZ2V0U3RhcnRNYXJrdXAobiwg
dXBkYXRlZFJhbmdlLmdldCgpLCBhbm5vdGF0ZSwgYWJzb2x1dGVVUkxzKSk7CisKKyAgICAgICAg
ICAgIGFjY3VtdWxhdG9yLmluc2VydE9wZW5UYWcobiwgdXBkYXRlZFJhbmdlLmdldCgpLCBhbm5v
dGF0ZSwgYWJzb2x1dGVVUkxzKTsKICAgICAgICAgICAgIGlmIChub2RlcykKICAgICAgICAgICAg
ICAgICBub2Rlcy0+YXBwZW5kKG4pOwogICAgICAgICB9CkBAIC04OTEsNyArOTE2LDcgQEAgU3Ry
aW5nIGNyZWF0ZU1hcmt1cChjb25zdCBSYW5nZSogcmFuZ2UsIAogICAgICAgICBpZiAobi0+Zmly
c3RDaGlsZCgpID09IDAgfHwgc2tpcERlc2NlbmRhbnRzKSB7CiAgICAgICAgICAgICAvLyBOb2Rl
IGhhcyBubyBjaGlsZHJlbiwgb3Igd2UgYXJlIHNraXBwaW5nIGl0J3MgZGVzY2VuZGFudHMsIGFk
ZCBpdHMgY2xvc2UgdGFnIG5vdy4KICAgICAgICAgICAgIGlmIChhZGRNYXJrdXBGb3JOb2RlKSB7
Ci0gICAgICAgICAgICAgICAgbWFya3Vwcy5hcHBlbmQoZ2V0RW5kTWFya3VwKG4pKTsKKyAgICAg
ICAgICAgICAgICBhY2N1bXVsYXRvci5pbnNlcnRFbmRUYWcobik7CiAgICAgICAgICAgICAgICAg
bGFzdENsb3NlZCA9IG47CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKQEAgLTkwNCw3ICs5
MjksNyBAQCBTdHJpbmcgY3JlYXRlTWFya3VwKGNvbnN0IFJhbmdlKiByYW5nZSwgCiAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAobmV4dCAhPSBwYXN0RW5kICYmIG5leHQtPmlzRGVzY2VuZGFu
dE9mKGFuY2VzdG9yKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIE5vdCBhdCB0aGUgZW5kIG9mIHRoZSByYW5nZSwgY2xvc2Ug
YW5jZXN0b3JzIHVwIHRvIHNpYmxpbmcgb2YgbmV4dCBub2RlLgotICAgICAgICAgICAgICAgICAg
ICAgICAgbWFya3Vwcy5hcHBlbmQoZ2V0RW5kTWFya3VwKGFuY2VzdG9yKSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBhY2N1bXVsYXRvci5pbnNlcnRFbmRUYWcoYW5jZXN0b3IpOwogICAgICAg
ICAgICAgICAgICAgICAgICAgbGFzdENsb3NlZCA9IGFuY2VzdG9yOwogICAgICAgICAgICAgICAg
ICAgICAgICAgYW5jZXN0b3JzVG9DbG9zZS5yZW1vdmVMYXN0KCk7CiAgICAgICAgICAgICAgICAg
ICAgIH0gd2hpbGUgKCFhbmNlc3RvcnNUb0Nsb3NlLmlzRW1wdHkoKSk7CkBAIC05MjAsOCArOTQ1
LDcgQEAgU3RyaW5nIGNyZWF0ZU1hcmt1cChjb25zdCBSYW5nZSogcmFuZ2UsIAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgLy8g
b3IgYikgYW5jZXN0b3JzIHRoYXQgd2UgbmV2ZXIgZW5jb3VudGVyZWQgZHVyaW5nIGEgcHJlLW9y
ZGVyIHRyYXZlcnNhbCBzdGFydGluZyBhdCBzdGFydE5vZGU6CiAgICAgICAgICAgICAgICAgICAg
ICAgICBBU1NFUlQoc3RhcnROb2RlLT5pc0Rlc2NlbmRhbnRPZihwYXJlbnQpKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHByZU1hcmt1cHMuYXBwZW5kKGdldFN0YXJ0TWFya3VwKHBhcmVudCwg
dXBkYXRlZFJhbmdlLmdldCgpLCBhbm5vdGF0ZSwgYWJzb2x1dGVVUkxzKSk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBtYXJrdXBzLmFwcGVuZChnZXRFbmRNYXJrdXAocGFyZW50KSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBhY2N1bXVsYXRvci53cmFwV2l0aE5vZGUocGFyZW50LCB1cGRh
dGVkUmFuZ2UuZ2V0KCksIGFubm90YXRlLCBhYnNvbHV0ZVVSTHMpOwogICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKG5vZGVzKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVzLT5h
cHBlbmQocGFyZW50KTsKICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RDbG9zZWQgPSBwYXJl
bnQ7CkBAIC0xMDAxLDEzICsxMDI1LDEyIEBAIFN0cmluZyBjcmVhdGVNYXJrdXAoY29uc3QgUmFu
Z2UqIHJhbmdlLCAKICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bGx5U2VsZWN0ZWRSb290U3R5
bGUtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5VGV4dERlY29yYXRpb24sIENTU1ZhbHVlTm9uZSk7
CiAgICAgICAgICAgICAgICAgICAgIGlmICghcHJvcGVydHlNaXNzaW5nT3JFcXVhbFRvTm9uZShm
dWxseVNlbGVjdGVkUm9vdFN0eWxlLmdldCgpLCBDU1NQcm9wZXJ0eVdlYmtpdFRleHREZWNvcmF0
aW9uc0luRWZmZWN0KSkKICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bGx5U2VsZWN0ZWRSb290
U3R5bGUtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5V2Via2l0VGV4dERlY29yYXRpb25zSW5FZmZl
Y3QsIENTU1ZhbHVlTm9uZSk7Ci0gICAgICAgICAgICAgICAgICAgIGFkZFN0eWxlTWFya3VwKHBy
ZU1hcmt1cHMsIG1hcmt1cHMsIGZ1bGx5U2VsZWN0ZWRSb290U3R5bGUuZ2V0KCksIGRvY3VtZW50
LCB0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgYWNjdW11bGF0b3Iud3JhcFdpdGhTdHlsZVNw
YW4oZnVsbHlTZWxlY3RlZFJvb3RTdHlsZS5nZXQoKSwgZG9jdW1lbnQsIHRydWUpOwogICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgLy8gU2lu
Y2UgdGhpcyBub2RlIGFuZCBhbGwgdGhlIG90aGVyIGFuY2VzdG9ycyBhcmUgbm90IGluIHRoZSBz
ZWxlY3Rpb24gd2Ugd2FudCB0byBzZXQgUmFuZ2VGdWxseVNlbGVjdHNOb2RlIHRvIERvZXNOb3RG
dWxseVNlbGVjdE5vZGUKICAgICAgICAgICAgICAgICAvLyBzbyB0aGF0IHN0eWxlcyB0aGF0IGFm
ZmVjdCB0aGUgZXh0ZXJpb3Igb2YgdGhlIG5vZGUgYXJlIG5vdCBpbmNsdWRlZC4KLSAgICAgICAg
ICAgICAgICBwcmVNYXJrdXBzLmFwcGVuZChnZXRTdGFydE1hcmt1cChhbmNlc3RvciwgdXBkYXRl
ZFJhbmdlLmdldCgpLCBhbm5vdGF0ZSwgYWJzb2x1dGVVUkxzLCBjb252ZXJ0QmxvY2tzVG9Jbmxp
bmVzLCAwLCBEb2VzTm90RnVsbHlTZWxlY3ROb2RlKSk7Ci0gICAgICAgICAgICAgICAgbWFya3Vw
cy5hcHBlbmQoZ2V0RW5kTWFya3VwKGFuY2VzdG9yKSk7CisgICAgICAgICAgICAgICAgYWNjdW11
bGF0b3Iud3JhcFdpdGhOb2RlKGFuY2VzdG9yLCB1cGRhdGVkUmFuZ2UuZ2V0KCksIGFubm90YXRl
LCBhYnNvbHV0ZVVSTHMsIGNvbnZlcnRCbG9ja3NUb0lubGluZXMsIERvZXNOb3RGdWxseVNlbGVj
dE5vZGUpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKG5vZGVzKQogICAgICAgICAg
ICAgICAgIG5vZGVzLT5hcHBlbmQoYW5jZXN0b3IpOwpAQCAtMTAzOSw3ICsxMDYyLDcgQEAgU3Ry
aW5nIGNyZWF0ZU1hcmt1cChjb25zdCBSYW5nZSogcmFuZ2UsIAogICAgICAgICAgICAgc3R5bGUt
PnJlbW92ZUJsb2NrUHJvcGVydGllcygpOwogCiAgICAgICAgIGlmIChzdHlsZS0+bGVuZ3RoKCkg
PiAwKQotICAgICAgICAgICAgYWRkU3R5bGVNYXJrdXAocHJlTWFya3VwcywgbWFya3Vwcywgc3R5
bGUuZ2V0KCksIGRvY3VtZW50KTsKKyAgICAgICAgICAgIGFjY3VtdWxhdG9yLndyYXBXaXRoU3R5
bGVTcGFuKHN0eWxlLmdldCgpLCBkb2N1bWVudCk7CiAgICAgfQogICAgIAogICAgIGlmIChsYXN0
Q2xvc2VkICYmIGxhc3RDbG9zZWQgIT0gZG9jdW1lbnQtPmRvY3VtZW50RWxlbWVudCgpKSB7CkBA
IC0xMDQ5LDE3ICsxMDcyLDE3IEBAIFN0cmluZyBjcmVhdGVNYXJrdXAoY29uc3QgUmFuZ2UqIHJh
bmdlLCAKICAgICAgICAgUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBkZWZhdWx0
U3R5bGUgPSBBcHBseVN0eWxlQ29tbWFuZDo6ZWRpdGluZ1N0eWxlQXRQb3NpdGlvbihQb3NpdGlv
bihkb2N1bWVudC0+ZG9jdW1lbnRFbGVtZW50KCksIDApKTsKIAogICAgICAgICBpZiAoZGVmYXVs
dFN0eWxlLT5sZW5ndGgoKSA+IDApCi0gICAgICAgICAgICBhZGRTdHlsZU1hcmt1cChwcmVNYXJr
dXBzLCBtYXJrdXBzLCBkZWZhdWx0U3R5bGUuZ2V0KCksIGRvY3VtZW50KTsKKyAgICAgICAgICAg
IGFjY3VtdWxhdG9yLndyYXBXaXRoU3R5bGVTcGFuKGRlZmF1bHRTdHlsZS5nZXQoKSwgZG9jdW1l
bnQpOwogICAgIH0KIAogICAgIC8vIEZJWE1FOiBUaGUgaW50ZXJjaGFuZ2UgbmV3bGluZSBzaG91
bGQgYmUgcGxhY2VkIGluIHRoZSBibG9jayB0aGF0IGl0J3MgaW4sIG5vdCBhZnRlciBhbGwgb2Yg
dGhlIGNvbnRlbnQsIHVuY29uZGl0aW9uYWxseS4KICAgICBpZiAoYW5ub3RhdGUgJiYgbmVlZElu
dGVyY2hhbmdlTmV3bGluZUFmdGVyKHZpc2libGVFbmQucHJldmlvdXMoKSkpCi0gICAgICAgIG1h
cmt1cHMuYXBwZW5kKGludGVyY2hhbmdlTmV3bGluZVN0cmluZyk7Ci0gICAgCisgICAgICAgIGFj
Y3VtdWxhdG9yLmluc2VydFN0cmluZyhpbnRlcmNoYW5nZU5ld2xpbmVTdHJpbmcpOworCiAgICAg
aWYgKGRlbGV0ZUJ1dHRvbikKICAgICAgICAgZGVsZXRlQnV0dG9uLT5lbmFibGUoKTsKIAotICAg
IHJldHVybiBqb2luTWFya3VwcyhwcmVNYXJrdXBzLCBtYXJrdXBzKTsKKyAgICByZXR1cm4gYWNj
dW11bGF0b3IudGFrZVJlc3VsdHMoKTsKIH0KIAogUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50
PiBjcmVhdGVGcmFnbWVudEZyb21NYXJrdXAoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBTdHJp
bmcmIG1hcmt1cCwgY29uc3QgU3RyaW5nJiBiYXNlVVJMLCBGcmFnbWVudFNjcmlwdGluZ1Blcm1p
c3Npb24gc2NyaXB0aW5nUGVybWlzc2lvbikK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>63168</attachid>
            <date>2010-07-31 19:39:56 -0700</date>
            <delta_ts>2010-08-01 18:53:01 -0700</delta_ts>
            <desc>Renamed wrapWithStyleSpan to wrapWithStyleNode</desc>
            <filename>bug-43227-20100731193954.patch</filename>
            <type>text/plain</type>
            <size>13992</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NDQzMikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjUgQEAKKzIwMTAtMDctMzEgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgR3Jv
dXAgZnVuY3Rpb25zIHVzZWQgaW4gY3JlYXRlTWFya3VwIChyYW5nZSB2ZXJzaW9uKSBpbnRvIGEg
Y2xhc3Mgc28gdGhleSBhcmUgZWFzaWVyIHRvIHVuZGVyc3RhbmQKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQzMjI3CisKKyAgICAgICAgQWRkZWQgTWFy
a3VwQWNjdW11bGF0b3JXcmFwcGVyIHRvIGdyb3VwIGdldFN0YXJ0TWFya3VwLCBnZXRFbmRNYXJr
dXAsIGpvaW5NYXJrdXBzLCBhbmQgYWRkU3R5bGVNYXJrdXAuCisgICAgICAgIE1hcmt1cEFjY3Vt
dWxhdG9yV3JhcHBlciBpcyBpbnRlbmRlZCB0byBiZSBtZXJnZWQgd2l0aCBNYXJrdXBBY2N1bXVs
YXRvciBpbiB0aGUgZnV0dXJlLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyBhZGRlZCBzaW5jZSB0
aGlzIGlzIGEgY2xlYW4gdXAuCisKKyAgICAgICAgKiBlZGl0aW5nL21hcmt1cC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpNYXJrdXBBY2N1bXVsYXRvcldyYXBwZXI6Ok1hcmt1cEFjY3VtdWxhdG9y
V3JhcHBlcik6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6TWFya3VwQWNjdW11bGF0b3JXcmFw
cGVyOjppbnNlcnRTdHJpbmcpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok1hcmt1cEFjY3Vt
dWxhdG9yV3JhcHBlcjo6aW5zZXJ0T3BlblRhZyk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
TWFya3VwQWNjdW11bGF0b3JXcmFwcGVyOjppbnNlcnRFbmRUYWcpOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6Ok1hcmt1cEFjY3VtdWxhdG9yV3JhcHBlcjo6d3JhcFdpdGhOb2RlKTogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpNYXJrdXBBY2N1bXVsYXRvcldyYXBwZXI6OndyYXBXaXRoU3R5
bGVOb2RlKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpNYXJrdXBBY2N1bXVsYXRvcldyYXBw
ZXI6OnRha2VSZXN1bHRzKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVNYXJrdXAp
OiBVc2VzIE1hcmt1cEFjY3VtdWxhdG9yV3JhcHBlci4KKwogMjAxMC0wNy0zMSAgUnlvc3VrZSBO
aXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBPamFuIFZhZmFp
LgpJbmRleDogV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9lZGl0aW5nL21hcmt1cC5jcHAJKHJldmlzaW9uIDY0NDMyKQorKysgV2ViQ29yZS9lZGl0aW5n
L21hcmt1cC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1NSwxMyArNTU1LDYgQEAgc3RhdGljIHZv
aWQgYXBwZW5kU3RhcnRNYXJrdXAoVmVjdG9yPFVDaAogICAgIH0KIH0KIAotc3RhdGljIFN0cmlu
ZyBnZXRTdGFydE1hcmt1cChjb25zdCBOb2RlKiBub2RlLCBjb25zdCBSYW5nZSogcmFuZ2UsIEVB
bm5vdGF0ZUZvckludGVyY2hhbmdlIGFubm90YXRlLCBFQWJzb2x1dGVVUkxzIGFic29sdXRlVVJM
cywgYm9vbCBjb252ZXJ0QmxvY2tzVG9JbmxpbmVzID0gZmFsc2UsIEhhc2hNYXA8QXRvbWljU3Ry
aW5nSW1wbCosIEF0b21pY1N0cmluZ0ltcGwqPiogbmFtZXNwYWNlcyA9IDAsIFJhbmdlRnVsbHlT
ZWxlY3RzTm9kZSByYW5nZUZ1bGx5U2VsZWN0c05vZGUgPSBEb2VzRnVsbHlTZWxlY3ROb2RlKQot
ewotICAgIFZlY3RvcjxVQ2hhcj4gcmVzdWx0OwotICAgIGFwcGVuZFN0YXJ0TWFya3VwKHJlc3Vs
dCwgbm9kZSwgcmFuZ2UsIGFubm90YXRlLCBhYnNvbHV0ZVVSTHMsIGNvbnZlcnRCbG9ja3NUb0lu
bGluZXMsIG5hbWVzcGFjZXMsIHJhbmdlRnVsbHlTZWxlY3RzTm9kZSk7Ci0gICAgcmV0dXJuIFN0
cmluZzo6YWRvcHQocmVzdWx0KTsKLX0KLQogc3RhdGljIGlubGluZSBib29sIGRvZXNIVE1MRm9y
YmlkRW5kVGFnKGNvbnN0IE5vZGUgKm5vZGUpCiB7CiAgICAgaWYgKG5vZGUtPmlzSFRNTEVsZW1l
bnQoKSkgewpAQCAtNTk4LDEzICs1OTEsNiBAQCBzdGF0aWMgdm9pZCBhcHBlbmRFbmRNYXJrdXAo
VmVjdG9yPFVDaGFyCiAgICAgcmVzdWx0LmFwcGVuZCgnPicpOwogfQogCi1zdGF0aWMgU3RyaW5n
IGdldEVuZE1hcmt1cChjb25zdCBOb2RlICpub2RlKQotewotICAgIFZlY3RvcjxVQ2hhcj4gcmVz
dWx0OwotICAgIGFwcGVuZEVuZE1hcmt1cChyZXN1bHQsIG5vZGUpOwotICAgIHJldHVybiBTdHJp
bmc6OmFkb3B0KHJlc3VsdCk7Ci19Ci0KIGNsYXNzIE1hcmt1cEFjY3VtdWxhdG9yIHsKIHB1Ymxp
YzoKICAgICBNYXJrdXBBY2N1bXVsYXRvcihOb2RlKiBub2RlVG9Ta2lwLCBWZWN0b3I8Tm9kZSo+
KiBub2RlcykKQEAgLTcyMiwzMCArNzA4LDYgQEAgc3RhdGljIGJvb2wgaXNFbGVtZW50UHJlc2Vu
dGF0aW9uYWwoY29ucwogICAgIHJldHVybiAhcHJvcGVydHlNaXNzaW5nT3JFcXVhbFRvTm9uZShz
dHlsZS5nZXQoKSwgQ1NTUHJvcGVydHlUZXh0RGVjb3JhdGlvbik7CiB9CiAKLXN0YXRpYyBTdHJp
bmcgam9pbk1hcmt1cHMoY29uc3QgVmVjdG9yPFN0cmluZz4mIHByZU1hcmt1cHMsIGNvbnN0IFZl
Y3RvcjxTdHJpbmc+JiBwb3N0TWFya3VwcykKLXsKLSAgICBzaXplX3QgbGVuZ3RoID0gMDsKLQot
ICAgIHNpemVfdCBwcmVDb3VudCA9IHByZU1hcmt1cHMuc2l6ZSgpOwotICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgcHJlQ291bnQ7ICsraSkKLSAgICAgICAgbGVuZ3RoICs9IHByZU1hcmt1cHNb
aV0ubGVuZ3RoKCk7Ci0KLSAgICBzaXplX3QgcG9zdENvdW50ID0gcG9zdE1hcmt1cHMuc2l6ZSgp
OwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcG9zdENvdW50OyArK2kpCi0gICAgICAgIGxl
bmd0aCArPSBwb3N0TWFya3Vwc1tpXS5sZW5ndGgoKTsKLQotICAgIFZlY3RvcjxVQ2hhcj4gcmVz
dWx0OwotICAgIHJlc3VsdC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGxlbmd0aCk7Ci0KLSAgICBm
b3IgKHNpemVfdCBpID0gcHJlQ291bnQ7IGkgPiAwOyAtLWkpCi0gICAgICAgIGFwcGVuZChyZXN1
bHQsIHByZU1hcmt1cHNbaSAtIDFdKTsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcG9z
dENvdW50OyArK2kpCi0gICAgICAgIGFwcGVuZChyZXN1bHQsIHBvc3RNYXJrdXBzW2ldKTsKLQot
ICAgIHJldHVybiBTdHJpbmc6OmFkb3B0KHJlc3VsdCk7Ci19Ci0KIHN0YXRpYyBib29sIGlzU3Bl
Y2lhbEFuY2VzdG9yQmxvY2soTm9kZSogbm9kZSkKIHsKICAgICBpZiAoIW5vZGUgfHwgIWlzQmxv
Y2sobm9kZSkpCkBAIC03NzMsMjQgKzczNSw4NyBAQCBzdGF0aWMgYm9vbCBzaG91bGRJbmNsdWRl
V3JhcHBlckZvckZ1bGx5CiAgICAgICAgICAgIHN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENT
U1Byb3BlcnR5QmFja2dyb3VuZENvbG9yKTsKIH0KIAotc3RhdGljIHZvaWQgYWRkU3R5bGVNYXJr
dXAoVmVjdG9yPFN0cmluZz4mIHByZU1hcmt1cHMsIFZlY3RvcjxTdHJpbmc+JiBwb3N0TWFya3Vw
cywgQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUsIERvY3VtZW50KiBkb2N1bWVudCwgYm9vbCBp
c0Jsb2NrID0gZmFsc2UpCi17Ci0gICAgLy8gQWxsIHRleHQtZGVjb3JhdGlvbi1yZWxhdGVkIGVs
ZW1lbnRzIHNob3VsZCBoYXZlIGJlZW4gdHJlYXRlZCBhcyBzcGVjaWFsIGFuY2VzdG9ycwotICAg
IC8vIElmIHdlIGV2ZXIgaGl0IHRoaXMgQVNTRVJULCB3ZSBzaG91bGQgZXhwb3J0IFN0eWxlQ2hh
bmdlIGluIEFwcGx5U3R5bGVDb21tYW5kIGFuZCB1c2UgaXQgaGVyZQotICAgIEFTU0VSVChwcm9w
ZXJ0eU1pc3NpbmdPckVxdWFsVG9Ob25lKHN0eWxlLCBDU1NQcm9wZXJ0eVRleHREZWNvcmF0aW9u
KSAmJiBwcm9wZXJ0eU1pc3NpbmdPckVxdWFsVG9Ob25lKHN0eWxlLCBDU1NQcm9wZXJ0eVdlYmtp
dFRleHREZWNvcmF0aW9uc0luRWZmZWN0KSk7Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25z
dCBTdHJpbmcsIGRpdlN0eWxlLCAoIjxkaXYgc3R5bGU9XCIiKSk7Ci0gICAgREVGSU5FX1NUQVRJ
Q19MT0NBTChjb25zdCBTdHJpbmcsIGRpdkNsb3NlLCAoIjwvZGl2PiIpKTsKLSAgICBERUZJTkVf
U1RBVElDX0xPQ0FMKGNvbnN0IFN0cmluZywgc3R5bGVTcGFuT3BlbiwgKCI8c3BhbiBjbGFzcz1c
IiIgQXBwbGVTdHlsZVNwYW5DbGFzcyAiXCIgc3R5bGU9XCIiKSk7Ci0gICAgREVGSU5FX1NUQVRJ
Q19MT0NBTChjb25zdCBTdHJpbmcsIHN0eWxlU3BhbkNsb3NlLCAoIjwvc3Bhbj4iKSk7Ci0gICAg
VmVjdG9yPFVDaGFyPiBvcGVuVGFnOwotICAgIGFwcGVuZChvcGVuVGFnLCBpc0Jsb2NrID8gZGl2
U3R5bGUgOiBzdHlsZVNwYW5PcGVuKTsKLSAgICBhcHBlbmRBdHRyaWJ1dGVWYWx1ZShvcGVuVGFn
LCBzdHlsZS0+Y3NzVGV4dCgpLCBkb2N1bWVudC0+aXNIVE1MRG9jdW1lbnQoKSk7Ci0gICAgb3Bl
blRhZy5hcHBlbmQoJ1wiJyk7Ci0gICAgb3BlblRhZy5hcHBlbmQoJz4nKTsKLSAgICBwcmVNYXJr
dXBzLmFwcGVuZChTdHJpbmc6OmFkb3B0KG9wZW5UYWcpKTsKK2NsYXNzIE1hcmt1cEFjY3VtdWxh
dG9yV3JhcHBlciB7CitwdWJsaWM6CisgICAgTWFya3VwQWNjdW11bGF0b3JXcmFwcGVyKCkKKyAg
ICB7CisgICAgfQogCi0gICAgcG9zdE1hcmt1cHMuYXBwZW5kKGlzQmxvY2sgPyBkaXZDbG9zZSA6
IHN0eWxlU3BhbkNsb3NlKTsKLX0KKyAgICB2b2lkIGluc2VydFN0cmluZyhjb25zdCBTdHJpbmcm
IHMpCisgICAgeworICAgICAgICBwb3N0TWFya3Vwcy5hcHBlbmQocyk7CisgICAgfQorCisgICAg
dm9pZCBpbnNlcnRPcGVuVGFnKGNvbnN0IE5vZGUqIG5vZGUsIGNvbnN0IFJhbmdlKiByYW5nZSwg
RUFubm90YXRlRm9ySW50ZXJjaGFuZ2UgYW5ub3RhdGUsIEVBYnNvbHV0ZVVSTHMgYWJzb2x1dGVV
UkxzLCBib29sIGNvbnZlcnRCbG9ja3NUb0lubGluZXMgPSBmYWxzZSwgUmFuZ2VGdWxseVNlbGVj
dHNOb2RlIHJhbmdlRnVsbHlTZWxlY3RzTm9kZSA9IERvZXNGdWxseVNlbGVjdE5vZGUpCisgICAg
eworICAgICAgICBWZWN0b3I8VUNoYXI+IHJlc3VsdDsKKyAgICAgICAgYXBwZW5kU3RhcnRNYXJr
dXAocmVzdWx0LCBub2RlLCByYW5nZSwgYW5ub3RhdGUsIGFic29sdXRlVVJMcywgY29udmVydEJs
b2Nrc1RvSW5saW5lcywgMCwgcmFuZ2VGdWxseVNlbGVjdHNOb2RlKTsKKyAgICAgICAgcG9zdE1h
cmt1cHMuYXBwZW5kKFN0cmluZzo6YWRvcHQocmVzdWx0KSk7CisgICAgfQorCisgICAgdm9pZCBp
bnNlcnRFbmRUYWcoY29uc3QgTm9kZSogbm9kZSkKKyAgICB7CisgICAgICAgIFZlY3RvcjxVQ2hh
cj4gcmVzdWx0OworICAgICAgICBhcHBlbmRFbmRNYXJrdXAocmVzdWx0LCBub2RlKTsKKyAgICAg
ICAgcG9zdE1hcmt1cHMuYXBwZW5kKFN0cmluZzo6YWRvcHQocmVzdWx0KSk7CisgICAgfQorCisg
ICAgdm9pZCB3cmFwV2l0aE5vZGUoY29uc3QgTm9kZSogbm9kZSwgY29uc3QgUmFuZ2UqIHJhbmdl
LCBFQW5ub3RhdGVGb3JJbnRlcmNoYW5nZSBhbm5vdGF0ZSwgRUFic29sdXRlVVJMcyBhYnNvbHV0
ZVVSTHMsIGJvb2wgY29udmVydEJsb2Nrc1RvSW5saW5lcyA9IGZhbHNlLCBSYW5nZUZ1bGx5U2Vs
ZWN0c05vZGUgcmFuZ2VGdWxseVNlbGVjdHNOb2RlID0gRG9lc0Z1bGx5U2VsZWN0Tm9kZSkKKyAg
ICB7CisgICAgICAgIFZlY3RvcjxVQ2hhcj4gcmVzdWx0OworICAgICAgICBhcHBlbmRTdGFydE1h
cmt1cChyZXN1bHQsIG5vZGUsIHJhbmdlLCBhbm5vdGF0ZSwgYWJzb2x1dGVVUkxzLCBjb252ZXJ0
QmxvY2tzVG9JbmxpbmVzLCAwLCByYW5nZUZ1bGx5U2VsZWN0c05vZGUpOworICAgICAgICBwcmVN
YXJrdXBzLmFwcGVuZChTdHJpbmc6OmFkb3B0KHJlc3VsdCkpOworICAgICAgICBpbnNlcnRFbmRU
YWcobm9kZSk7CisgICAgfQorCisgICAgdm9pZCB3cmFwV2l0aFN0eWxlTm9kZShDU1NTdHlsZURl
Y2xhcmF0aW9uKiBzdHlsZSwgRG9jdW1lbnQqIGRvY3VtZW50LCBib29sIGlzQmxvY2sgPSBmYWxz
ZSkKKyAgICB7CisgICAgICAgIC8vIEFsbCB0ZXh0LWRlY29yYXRpb24tcmVsYXRlZCBlbGVtZW50
cyBzaG91bGQgaGF2ZSBiZWVuIHRyZWF0ZWQgYXMgc3BlY2lhbCBhbmNlc3RvcnMKKyAgICAgICAg
Ly8gSWYgd2UgZXZlciBoaXQgdGhpcyBBU1NFUlQsIHdlIHNob3VsZCBleHBvcnQgU3R5bGVDaGFu
Z2UgaW4gQXBwbHlTdHlsZUNvbW1hbmQgYW5kIHVzZSBpdCBoZXJlCisgICAgICAgIEFTU0VSVChw
cm9wZXJ0eU1pc3NpbmdPckVxdWFsVG9Ob25lKHN0eWxlLCBDU1NQcm9wZXJ0eVRleHREZWNvcmF0
aW9uKSAmJiBwcm9wZXJ0eU1pc3NpbmdPckVxdWFsVG9Ob25lKHN0eWxlLCBDU1NQcm9wZXJ0eVdl
YmtpdFRleHREZWNvcmF0aW9uc0luRWZmZWN0KSk7CisgICAgICAgIERFRklORV9TVEFUSUNfTE9D
QUwoY29uc3QgU3RyaW5nLCBkaXZTdHlsZSwgKCI8ZGl2IHN0eWxlPVwiIikpOworICAgICAgICBE
RUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IFN0cmluZywgZGl2Q2xvc2UsICgiPC9kaXY+IikpOwor
ICAgICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IFN0cmluZywgc3R5bGVTcGFuT3Blbiwg
KCI8c3BhbiBjbGFzcz1cIiIgQXBwbGVTdHlsZVNwYW5DbGFzcyAiXCIgc3R5bGU9XCIiKSk7Cisg
ICAgICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29uc3QgU3RyaW5nLCBzdHlsZVNwYW5DbG9zZSwg
KCI8L3NwYW4+IikpOworICAgICAgICBWZWN0b3I8VUNoYXI+IG9wZW5UYWc7CisgICAgICAgIFdl
YkNvcmU6OmFwcGVuZChvcGVuVGFnLCBpc0Jsb2NrID8gZGl2U3R5bGUgOiBzdHlsZVNwYW5PcGVu
KTsKKyAgICAgICAgYXBwZW5kQXR0cmlidXRlVmFsdWUob3BlblRhZywgc3R5bGUtPmNzc1RleHQo
KSwgZG9jdW1lbnQtPmlzSFRNTERvY3VtZW50KCkpOworICAgICAgICBvcGVuVGFnLmFwcGVuZCgn
XCInKTsKKyAgICAgICAgb3BlblRhZy5hcHBlbmQoJz4nKTsKKyAgICAgICAgcHJlTWFya3Vwcy5h
cHBlbmQoU3RyaW5nOjphZG9wdChvcGVuVGFnKSk7CisgICAgICAgIHBvc3RNYXJrdXBzLmFwcGVu
ZChpc0Jsb2NrID8gZGl2Q2xvc2UgOiBzdHlsZVNwYW5DbG9zZSk7CisgICAgfQorCisgICAgLy8g
RklYTUU6IFRoaXMgaXMgYSB2ZXJ5IGluZWZmaWNpZW50IHdheSBvZiBhY2N1bXVsYXRpbmcgdGhl
IG1hcmt1cC4KKyAgICAvLyBXZSdyZSBjb252ZXJ0aW5nIHJlc3VsdHMgb2YgYXBwZW5kU3RhcnRN
YXJrdXAgYW5kIGFwcGVuZEVuZE1hcmt1cCBmcm9tIFZlY3RvcjxVQ2hhcj4gdG8gU3RyaW5nCisg
ICAgLy8gYW5kIHRoZW4gYmFjayB0byBWZWN0b3I8VUNoYXI+IGFuZCBhZ2FpbiB0byBTdHJpbmcg
aGVyZS4KKyAgICBTdHJpbmcgdGFrZVJlc3VsdHMoKQorICAgIHsKKyAgICAgICAgc2l6ZV90IGxl
bmd0aCA9IDA7CisKKyAgICAgICAgc2l6ZV90IHByZUNvdW50ID0gcHJlTWFya3Vwcy5zaXplKCk7
CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcHJlQ291bnQ7ICsraSkKKyAgICAgICAg
ICAgIGxlbmd0aCArPSBwcmVNYXJrdXBzW2ldLmxlbmd0aCgpOworCisgICAgICAgIHNpemVfdCBw
b3N0Q291bnQgPSBwb3N0TWFya3Vwcy5zaXplKCk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgcG9zdENvdW50OyArK2kpCisgICAgICAgICAgICBsZW5ndGggKz0gcG9zdE1hcmt1cHNb
aV0ubGVuZ3RoKCk7CisKKyAgICAgICAgVmVjdG9yPFVDaGFyPiByZXN1bHQ7CisgICAgICAgIHJl
c3VsdC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGxlbmd0aCk7CisKKyAgICAgICAgZm9yIChzaXpl
X3QgaSA9IHByZUNvdW50OyBpID4gMDsgLS1pKQorICAgICAgICAgICAgV2ViQ29yZTo6YXBwZW5k
KHJlc3VsdCwgcHJlTWFya3Vwc1tpIC0gMV0pOworCisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgcG9zdENvdW50OyArK2kpCisgICAgICAgICAgICBXZWJDb3JlOjphcHBlbmQocmVzdWx0
LCBwb3N0TWFya3Vwc1tpXSk7CisKKyAgICAgICAgcmV0dXJuIFN0cmluZzo6YWRvcHQocmVzdWx0
KTsKKyAgICB9Citwcml2YXRlOgorICAgIFZlY3RvcjxTdHJpbmc+IHByZU1hcmt1cHM7CisgICAg
VmVjdG9yPFN0cmluZz4gcG9zdE1hcmt1cHM7Cit9OwogCiAvLyBGSVhNRTogU2hvdWxkbid0IHdl
IG9taXQgc3R5bGUgaW5mbyB3aGVuIGFubm90YXRlID09IERvTm90QW5ub3RhdGVGb3JJbnRlcmNo
YW5nZT8gCiAvLyBGSVhNRTogQXQgbGVhc3QsIGFubm90YXRpb24gYW5kIHN0eWxlIGluZm8gc2hv
dWxkIHByb2JhYmx5IG5vdCBiZSBpbmNsdWRlZCBpbiByYW5nZS5tYXJrdXBTdHJpbmcoKQpAQCAt
ODI4LDggKzg1Myw3IEBAIFN0cmluZyBjcmVhdGVNYXJrdXAoY29uc3QgUmFuZ2UqIHJhbmdlLCAK
IAogICAgIGRvY3VtZW50LT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsK
IAotICAgIFZlY3RvcjxTdHJpbmc+IG1hcmt1cHM7Ci0gICAgVmVjdG9yPFN0cmluZz4gcHJlTWFy
a3VwczsKKyAgICBNYXJrdXBBY2N1bXVsYXRvcldyYXBwZXIgYWNjdW11bGF0b3I7CiAgICAgTm9k
ZSogcGFzdEVuZCA9IHVwZGF0ZWRSYW5nZS0+cGFzdExhc3ROb2RlKCk7CiAgICAgTm9kZSogbGFz
dENsb3NlZCA9IDA7CiAgICAgVmVjdG9yPE5vZGUqPiBhbmNlc3RvcnNUb0Nsb3NlOwpAQCAtODQ0
LDcgKzg2OCw3IEBAIFN0cmluZyBjcmVhdGVNYXJrdXAoY29uc3QgUmFuZ2UqIHJhbmdlLCAKICAg
ICAgICAgICAgIHJldHVybiBpbnRlcmNoYW5nZU5ld2xpbmVTdHJpbmc7CiAgICAgICAgIH0KIAot
ICAgICAgICBtYXJrdXBzLmFwcGVuZChpbnRlcmNoYW5nZU5ld2xpbmVTdHJpbmcpOworICAgICAg
ICBhY2N1bXVsYXRvci5pbnNlcnRTdHJpbmcoaW50ZXJjaGFuZ2VOZXdsaW5lU3RyaW5nKTsKICAg
ICAgICAgc3RhcnROb2RlID0gdmlzaWJsZVN0YXJ0Lm5leHQoKS5kZWVwRXF1aXZhbGVudCgpLm5v
ZGUoKTsKIAogICAgICAgICBpZiAocGFzdEVuZCAmJiBSYW5nZTo6Y29tcGFyZUJvdW5kYXJ5UG9p
bnRzKHN0YXJ0Tm9kZSwgMCwgcGFzdEVuZCwgMCkgPj0gMCkgewpAQCAtODgzLDcgKzkwNyw4IEBA
IFN0cmluZyBjcmVhdGVNYXJrdXAoY29uc3QgUmFuZ2UqIHJhbmdlLCAKICAgICAgICAgCiAgICAg
ICAgIC8vIEFkZCB0aGUgbm9kZSB0byB0aGUgbWFya3VwLgogICAgICAgICBpZiAoYWRkTWFya3Vw
Rm9yTm9kZSkgewotICAgICAgICAgICAgbWFya3Vwcy5hcHBlbmQoZ2V0U3RhcnRNYXJrdXAobiwg
dXBkYXRlZFJhbmdlLmdldCgpLCBhbm5vdGF0ZSwgYWJzb2x1dGVVUkxzKSk7CisKKyAgICAgICAg
ICAgIGFjY3VtdWxhdG9yLmluc2VydE9wZW5UYWcobiwgdXBkYXRlZFJhbmdlLmdldCgpLCBhbm5v
dGF0ZSwgYWJzb2x1dGVVUkxzKTsKICAgICAgICAgICAgIGlmIChub2RlcykKICAgICAgICAgICAg
ICAgICBub2Rlcy0+YXBwZW5kKG4pOwogICAgICAgICB9CkBAIC04OTEsNyArOTE2LDcgQEAgU3Ry
aW5nIGNyZWF0ZU1hcmt1cChjb25zdCBSYW5nZSogcmFuZ2UsIAogICAgICAgICBpZiAobi0+Zmly
c3RDaGlsZCgpID09IDAgfHwgc2tpcERlc2NlbmRhbnRzKSB7CiAgICAgICAgICAgICAvLyBOb2Rl
IGhhcyBubyBjaGlsZHJlbiwgb3Igd2UgYXJlIHNraXBwaW5nIGl0J3MgZGVzY2VuZGFudHMsIGFk
ZCBpdHMgY2xvc2UgdGFnIG5vdy4KICAgICAgICAgICAgIGlmIChhZGRNYXJrdXBGb3JOb2RlKSB7
Ci0gICAgICAgICAgICAgICAgbWFya3Vwcy5hcHBlbmQoZ2V0RW5kTWFya3VwKG4pKTsKKyAgICAg
ICAgICAgICAgICBhY2N1bXVsYXRvci5pbnNlcnRFbmRUYWcobik7CiAgICAgICAgICAgICAgICAg
bGFzdENsb3NlZCA9IG47CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKQEAgLTkwNCw3ICs5
MjksNyBAQCBTdHJpbmcgY3JlYXRlTWFya3VwKGNvbnN0IFJhbmdlKiByYW5nZSwgCiAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAobmV4dCAhPSBwYXN0RW5kICYmIG5leHQtPmlzRGVzY2VuZGFu
dE9mKGFuY2VzdG9yKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIE5vdCBhdCB0aGUgZW5kIG9mIHRoZSByYW5nZSwgY2xvc2Ug
YW5jZXN0b3JzIHVwIHRvIHNpYmxpbmcgb2YgbmV4dCBub2RlLgotICAgICAgICAgICAgICAgICAg
ICAgICAgbWFya3Vwcy5hcHBlbmQoZ2V0RW5kTWFya3VwKGFuY2VzdG9yKSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBhY2N1bXVsYXRvci5pbnNlcnRFbmRUYWcoYW5jZXN0b3IpOwogICAgICAg
ICAgICAgICAgICAgICAgICAgbGFzdENsb3NlZCA9IGFuY2VzdG9yOwogICAgICAgICAgICAgICAg
ICAgICAgICAgYW5jZXN0b3JzVG9DbG9zZS5yZW1vdmVMYXN0KCk7CiAgICAgICAgICAgICAgICAg
ICAgIH0gd2hpbGUgKCFhbmNlc3RvcnNUb0Nsb3NlLmlzRW1wdHkoKSk7CkBAIC05MjAsOCArOTQ1
LDcgQEAgU3RyaW5nIGNyZWF0ZU1hcmt1cChjb25zdCBSYW5nZSogcmFuZ2UsIAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgLy8g
b3IgYikgYW5jZXN0b3JzIHRoYXQgd2UgbmV2ZXIgZW5jb3VudGVyZWQgZHVyaW5nIGEgcHJlLW9y
ZGVyIHRyYXZlcnNhbCBzdGFydGluZyBhdCBzdGFydE5vZGU6CiAgICAgICAgICAgICAgICAgICAg
ICAgICBBU1NFUlQoc3RhcnROb2RlLT5pc0Rlc2NlbmRhbnRPZihwYXJlbnQpKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHByZU1hcmt1cHMuYXBwZW5kKGdldFN0YXJ0TWFya3VwKHBhcmVudCwg
dXBkYXRlZFJhbmdlLmdldCgpLCBhbm5vdGF0ZSwgYWJzb2x1dGVVUkxzKSk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBtYXJrdXBzLmFwcGVuZChnZXRFbmRNYXJrdXAocGFyZW50KSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBhY2N1bXVsYXRvci53cmFwV2l0aE5vZGUocGFyZW50LCB1cGRh
dGVkUmFuZ2UuZ2V0KCksIGFubm90YXRlLCBhYnNvbHV0ZVVSTHMpOwogICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKG5vZGVzKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVzLT5h
cHBlbmQocGFyZW50KTsKICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RDbG9zZWQgPSBwYXJl
bnQ7CkBAIC0xMDAxLDEzICsxMDI1LDEyIEBAIFN0cmluZyBjcmVhdGVNYXJrdXAoY29uc3QgUmFu
Z2UqIHJhbmdlLCAKICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bGx5U2VsZWN0ZWRSb290U3R5
bGUtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5VGV4dERlY29yYXRpb24sIENTU1ZhbHVlTm9uZSk7
CiAgICAgICAgICAgICAgICAgICAgIGlmICghcHJvcGVydHlNaXNzaW5nT3JFcXVhbFRvTm9uZShm
dWxseVNlbGVjdGVkUm9vdFN0eWxlLmdldCgpLCBDU1NQcm9wZXJ0eVdlYmtpdFRleHREZWNvcmF0
aW9uc0luRWZmZWN0KSkKICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bGx5U2VsZWN0ZWRSb290
U3R5bGUtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5V2Via2l0VGV4dERlY29yYXRpb25zSW5FZmZl
Y3QsIENTU1ZhbHVlTm9uZSk7Ci0gICAgICAgICAgICAgICAgICAgIGFkZFN0eWxlTWFya3VwKHBy
ZU1hcmt1cHMsIG1hcmt1cHMsIGZ1bGx5U2VsZWN0ZWRSb290U3R5bGUuZ2V0KCksIGRvY3VtZW50
LCB0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgYWNjdW11bGF0b3Iud3JhcFdpdGhTdHlsZU5v
ZGUoZnVsbHlTZWxlY3RlZFJvb3RTdHlsZS5nZXQoKSwgZG9jdW1lbnQsIHRydWUpOwogICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgLy8gU2lu
Y2UgdGhpcyBub2RlIGFuZCBhbGwgdGhlIG90aGVyIGFuY2VzdG9ycyBhcmUgbm90IGluIHRoZSBz
ZWxlY3Rpb24gd2Ugd2FudCB0byBzZXQgUmFuZ2VGdWxseVNlbGVjdHNOb2RlIHRvIERvZXNOb3RG
dWxseVNlbGVjdE5vZGUKICAgICAgICAgICAgICAgICAvLyBzbyB0aGF0IHN0eWxlcyB0aGF0IGFm
ZmVjdCB0aGUgZXh0ZXJpb3Igb2YgdGhlIG5vZGUgYXJlIG5vdCBpbmNsdWRlZC4KLSAgICAgICAg
ICAgICAgICBwcmVNYXJrdXBzLmFwcGVuZChnZXRTdGFydE1hcmt1cChhbmNlc3RvciwgdXBkYXRl
ZFJhbmdlLmdldCgpLCBhbm5vdGF0ZSwgYWJzb2x1dGVVUkxzLCBjb252ZXJ0QmxvY2tzVG9Jbmxp
bmVzLCAwLCBEb2VzTm90RnVsbHlTZWxlY3ROb2RlKSk7Ci0gICAgICAgICAgICAgICAgbWFya3Vw
cy5hcHBlbmQoZ2V0RW5kTWFya3VwKGFuY2VzdG9yKSk7CisgICAgICAgICAgICAgICAgYWNjdW11
bGF0b3Iud3JhcFdpdGhOb2RlKGFuY2VzdG9yLCB1cGRhdGVkUmFuZ2UuZ2V0KCksIGFubm90YXRl
LCBhYnNvbHV0ZVVSTHMsIGNvbnZlcnRCbG9ja3NUb0lubGluZXMsIERvZXNOb3RGdWxseVNlbGVj
dE5vZGUpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKG5vZGVzKQogICAgICAgICAg
ICAgICAgIG5vZGVzLT5hcHBlbmQoYW5jZXN0b3IpOwpAQCAtMTAzOSw3ICsxMDYyLDcgQEAgU3Ry
aW5nIGNyZWF0ZU1hcmt1cChjb25zdCBSYW5nZSogcmFuZ2UsIAogICAgICAgICAgICAgc3R5bGUt
PnJlbW92ZUJsb2NrUHJvcGVydGllcygpOwogCiAgICAgICAgIGlmIChzdHlsZS0+bGVuZ3RoKCkg
PiAwKQotICAgICAgICAgICAgYWRkU3R5bGVNYXJrdXAocHJlTWFya3VwcywgbWFya3Vwcywgc3R5
bGUuZ2V0KCksIGRvY3VtZW50KTsKKyAgICAgICAgICAgIGFjY3VtdWxhdG9yLndyYXBXaXRoU3R5
bGVOb2RlKHN0eWxlLmdldCgpLCBkb2N1bWVudCk7CiAgICAgfQogICAgIAogICAgIGlmIChsYXN0
Q2xvc2VkICYmIGxhc3RDbG9zZWQgIT0gZG9jdW1lbnQtPmRvY3VtZW50RWxlbWVudCgpKSB7CkBA
IC0xMDQ5LDE3ICsxMDcyLDE3IEBAIFN0cmluZyBjcmVhdGVNYXJrdXAoY29uc3QgUmFuZ2UqIHJh
bmdlLCAKICAgICAgICAgUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBkZWZhdWx0
U3R5bGUgPSBBcHBseVN0eWxlQ29tbWFuZDo6ZWRpdGluZ1N0eWxlQXRQb3NpdGlvbihQb3NpdGlv
bihkb2N1bWVudC0+ZG9jdW1lbnRFbGVtZW50KCksIDApKTsKIAogICAgICAgICBpZiAoZGVmYXVs
dFN0eWxlLT5sZW5ndGgoKSA+IDApCi0gICAgICAgICAgICBhZGRTdHlsZU1hcmt1cChwcmVNYXJr
dXBzLCBtYXJrdXBzLCBkZWZhdWx0U3R5bGUuZ2V0KCksIGRvY3VtZW50KTsKKyAgICAgICAgICAg
IGFjY3VtdWxhdG9yLndyYXBXaXRoU3R5bGVOb2RlKGRlZmF1bHRTdHlsZS5nZXQoKSwgZG9jdW1l
bnQpOwogICAgIH0KIAogICAgIC8vIEZJWE1FOiBUaGUgaW50ZXJjaGFuZ2UgbmV3bGluZSBzaG91
bGQgYmUgcGxhY2VkIGluIHRoZSBibG9jayB0aGF0IGl0J3MgaW4sIG5vdCBhZnRlciBhbGwgb2Yg
dGhlIGNvbnRlbnQsIHVuY29uZGl0aW9uYWxseS4KICAgICBpZiAoYW5ub3RhdGUgJiYgbmVlZElu
dGVyY2hhbmdlTmV3bGluZUFmdGVyKHZpc2libGVFbmQucHJldmlvdXMoKSkpCi0gICAgICAgIG1h
cmt1cHMuYXBwZW5kKGludGVyY2hhbmdlTmV3bGluZVN0cmluZyk7Ci0gICAgCisgICAgICAgIGFj
Y3VtdWxhdG9yLmluc2VydFN0cmluZyhpbnRlcmNoYW5nZU5ld2xpbmVTdHJpbmcpOworCiAgICAg
aWYgKGRlbGV0ZUJ1dHRvbikKICAgICAgICAgZGVsZXRlQnV0dG9uLT5lbmFibGUoKTsKIAotICAg
IHJldHVybiBqb2luTWFya3VwcyhwcmVNYXJrdXBzLCBtYXJrdXBzKTsKKyAgICByZXR1cm4gYWNj
dW11bGF0b3IudGFrZVJlc3VsdHMoKTsKIH0KIAogUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50
PiBjcmVhdGVGcmFnbWVudEZyb21NYXJrdXAoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBTdHJp
bmcmIG1hcmt1cCwgY29uc3QgU3RyaW5nJiBiYXNlVVJMLCBGcmFnbWVudFNjcmlwdGluZ1Blcm1p
c3Npb24gc2NyaXB0aW5nUGVybWlzc2lvbikK
</data>
<flag name="review"
          id="51474"
          type_id="1"
          status="+"
          setter="tkent"
    />
          </attachment>
      

    </bug>

</bugzilla>