<?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>44229</bug_id>
          
          <creation_ts>2010-08-18 20:31:57 -0700</creation_ts>
          <short_desc>Range, EAnnotateForInterchange, and EAbsoluteURLs should be member variables of MarkupAccumulator</short_desc>
          <delta_ts>2010-08-19 12:50:22 -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>
          <dependson>43936</dependson>
          <blocked>44288</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>abarth</cc>
    
    <cc>darin</cc>
    
    <cc>ojan</cc>
    
    <cc>tkent</cc>
    
    <cc>tony</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>266526</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-08-18 20:31:57 -0700</bug_when>
    <thetext>We currently pass Range, EAnnotateForInterchange, and EAbsoluteURLs variables through various member functions of MarkupAccumulator.  But we should make all three member variables of MarkupAccumulator so that we don&apos;t pass around them needlessly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>266531</commentid>
    <comment_count>1</comment_count>
      <attachid>64807</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-08-18 20:51:30 -0700</bug_when>
    <thetext>Created attachment 64807
cleanup</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>266583</commentid>
    <comment_count>2</comment_count>
      <attachid>64807</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-08-19 00:49:13 -0700</bug_when>
    <thetext>Comment on attachment 64807
cleanup

&gt; +    inline bool shouldResolveURLs() { return m_shouldResolveURLs == AbsoluteURLs; }
&gt; +    inline bool shouldAnnotate() { return m_shouldAnnotate == AnnotateForInterchange; }

No need for the inline keyword here. All function bodies in a class definition are treated as if marked within line.

&gt; +    const Range* m_range;

Since you&apos;re doing all the const, this could be const Range* const to make it clear that the range pointer is also constant. Not that I think the const is all that helpful.

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>266807</commentid>
    <comment_count>3</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-08-19 10:13:50 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 64807 [details])
&gt; &gt; +    inline bool shouldResolveURLs() { return m_shouldResolveURLs == AbsoluteURLs; }
&gt; &gt; +    inline bool shouldAnnotate() { return m_shouldAnnotate == AnnotateForInterchange; }
&gt; 
&gt; No need for the inline keyword here. All function bodies in a class definition are treated as if marked within line.

Will remove inline keyword.

&gt; &gt; +    const Range* m_range;
&gt; 
&gt; Since you&apos;re doing all the const, this could be const Range* const to make it clear that the range pointer is also constant. Not that I think the const is all that helpful.

Will add const to m_nodes and m_range.  Having const signifies the fact m_range isn&apos;t supposed to change and neither is the Range object pointed by m_range.  IMHO, it helps people reading the code because we then don&apos;t have to worry about the possibility of m_range being used as a shared state between member functions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>266808</commentid>
    <comment_count>4</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-08-19 10:16:22 -0700</bug_when>
    <thetext>Committed r65680: &lt;http://trac.webkit.org/changeset/65680&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>64807</attachid>
            <date>2010-08-18 20:51:30 -0700</date>
            <delta_ts>2010-08-19 00:49:13 -0700</delta_ts>
            <desc>cleanup</desc>
            <filename>fix44229</filename>
            <type>text/plain</type>
            <size>18992</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NTY0OCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjQgQEAKKzIwMTAtMDgtMTggIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmFu
Z2UsIEVBbm5vdGF0ZUZvckludGVyY2hhbmdlLCBhbmQgRUFic29sdXRlVVJMcyBzaG91bGQgYmUg
bWVtYmVyIHZhcmlhYmxlcyBvZiBNYXJrdXBBY2N1bXVsYXRvcgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDQyMjkKKworICAgICAgICBObyBuZXcgdGVz
dHMuIChPT1BTISkKKworICAgICAgICAqIGVkaXRpbmcvbWFya3VwLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Ok1hcmt1cEFjY3VtdWxhdG9yOjpNYXJrdXBBY2N1bXVsYXRvcik6IEFkZGVkIHNob3Vs
ZFJlc29sdmVVUkxzLCBzaG91bGRBbm5vdGF0ZSwgYW5kIHJhbmdlLgorICAgICAgICAoV2ViQ29y
ZTo6TWFya3VwQWNjdW11bGF0b3I6OnNob3VsZFJlc29sdmVVUkxzKTogUHJpdmF0ZSBpbmxpbmUg
YWNjZXNzb3IgZm9yIG1fc2hvdWxkUmVzb2x2ZVVSTHMuCisgICAgICAgIChXZWJDb3JlOjpNYXJr
dXBBY2N1bXVsYXRvcjo6c2hvdWxkQW5ub3RhdGUpOiBQcml2YXRlIGlubGluZSBhY2Nlc3NvciBm
b3IgbV9zaG91bGRBbm5vdGF0ZS4KKyAgICAgICAgKFdlYkNvcmU6Ok1hcmt1cEFjY3VtdWxhdG9y
OjphcHBlbmRFbmRUYWcpOiBSZW5hbWVkIGxvY2FsIHZhcmlhYmxlIHJlc3VsdCB0byBtYXJrdXAu
CisgICAgICAgIChXZWJDb3JlOjpNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kU3RhcnRUYWcpOiBS
ZW1vdmVkIHJhbmdlLCBhbm5vdGF0ZSwgc2hvdWxkUmVzb2x2ZVVSTHMgZnJvbSB0aGUgZnVuY3Rp
b24gYXJndW1lbnRzLgorICAgICAgICAoV2ViQ29yZTo6TWFya3VwQWNjdW11bGF0b3I6OndyYXBX
aXRoTm9kZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWFya3VwQWNjdW11bGF0b3I6OmFw
cGVuZFN0YXJ0TWFya3VwKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpzZXJpYWxpemVOb2Rl
cyk6IERpdHRvIGFuZCB1c2VzIE1hcmt1cEFjY3VtdWxhdG9yLgorICAgICAgICAoV2ViQ29yZTo6
Y3JlYXRlTWFya3VwKTogVXNlcyBNYXJrdXBBY2N1bXVsYXRvci4KKyAgICAgICAgKFdlYkNvcmU6
OnNlcmlhbGl6ZU5vZGVzV2l0aE5hbWVzcGFjZXMpOiBEaXR0by4KKwogMjAxMC0wOC0xOCAgUnlv
c3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJp
biBBZGxlci4KSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3BwCShyZXZpc2lvbiA2NTY0OCkKKysrIFdlYkNvcmUv
ZWRpdGluZy9tYXJrdXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NywxNCArOTcsMTcgQEAgY2xh
c3MgTWFya3VwQWNjdW11bGF0b3IgewogcHVibGljOgogICAgIGVudW0gUmFuZ2VGdWxseVNlbGVj
dHNOb2RlIHsgRG9lc0Z1bGx5U2VsZWN0Tm9kZSwgRG9lc05vdEZ1bGx5U2VsZWN0Tm9kZSB9Owog
Ci0gICAgTWFya3VwQWNjdW11bGF0b3IoVmVjdG9yPE5vZGUqPiogbm9kZXMpCisgICAgTWFya3Vw
QWNjdW11bGF0b3IoVmVjdG9yPE5vZGUqPiogbm9kZXMsIEVBYnNvbHV0ZVVSTHMgc2hvdWxkUmVz
b2x2ZVVSTHMsIEVBbm5vdGF0ZUZvckludGVyY2hhbmdlIHNob3VsZEFubm90YXRlLCBjb25zdCBS
YW5nZSogcmFuZ2UgPSAwKQogICAgICAgICA6IG1fbm9kZXMobm9kZXMpCisgICAgICAgICwgbV9z
aG91bGRSZXNvbHZlVVJMcyhzaG91bGRSZXNvbHZlVVJMcykKKyAgICAgICAgLCBtX3Nob3VsZEFu
bm90YXRlKHNob3VsZEFubm90YXRlKQorICAgICAgICAsIG1fcmFuZ2UocmFuZ2UpCiAgICAgewog
ICAgIH0KICAgICB2b2lkIGFwcGVuZFN0cmluZyhjb25zdCBTdHJpbmcmKTsKLSAgICB2b2lkIGFw
cGVuZFN0YXJ0VGFnKE5vZGUqLCBjb25zdCBSYW5nZSosIEVBbm5vdGF0ZUZvckludGVyY2hhbmdl
LCBFQWJzb2x1dGVVUkxzLCBib29sIGNvbnZlcnRCbG9ja3NUb0lubGluZXMgPSBmYWxzZSwgTmFt
ZXNwYWNlcyogbmFtZXNwYWNlcyA9IDAsIFJhbmdlRnVsbHlTZWxlY3RzTm9kZSA9IERvZXNGdWxs
eVNlbGVjdE5vZGUpOworICAgIHZvaWQgYXBwZW5kU3RhcnRUYWcoTm9kZSosIE5hbWVzcGFjZXMq
ID0gMCk7CiAgICAgdm9pZCBhcHBlbmRFbmRUYWcoTm9kZSopOwotICAgIHZvaWQgd3JhcFdpdGhO
b2RlKE5vZGUqLCBjb25zdCBSYW5nZSosIEVBbm5vdGF0ZUZvckludGVyY2hhbmdlLCBFQWJzb2x1
dGVVUkxzLCBib29sIGNvbnZlcnRCbG9ja3NUb0lubGluZXMgPSBmYWxzZSwgTmFtZXNwYWNlcyog
bmFtZXNwYWNlcyA9IDAsIFJhbmdlRnVsbHlTZWxlY3RzTm9kZSA9IERvZXNGdWxseVNlbGVjdE5v
ZGUpOworICAgIHZvaWQgd3JhcFdpdGhOb2RlKE5vZGUqLCBib29sIGNvbnZlcnRCbG9ja3NUb0lu
bGluZXMgPSBmYWxzZSwgUmFuZ2VGdWxseVNlbGVjdHNOb2RlID0gRG9lc0Z1bGx5U2VsZWN0Tm9k
ZSk7CiAgICAgdm9pZCB3cmFwV2l0aFN0eWxlTm9kZShDU1NTdHlsZURlY2xhcmF0aW9uKiwgRG9j
dW1lbnQqLCBib29sIGlzQmxvY2sgPSBmYWxzZSk7CiAgICAgU3RyaW5nIHRha2VSZXN1bHRzKCk7
CiAKQEAgLTExNywxNSArMTIwLDIxIEBAIHByaXZhdGU6CiAgICAgdm9pZCBhcHBlbmRVQ2hhclJh
bmdlKFZlY3RvcjxVQ2hhcj4mIHJlc3VsdCwgY29uc3QgcGFpcjxjb25zdCBVQ2hhciosIHNpemVf
dD4mIHJhbmdlKTsKICAgICBTdHJpbmcgcmVuZGVyZWRUZXh0KGNvbnN0IE5vZGUqLCBjb25zdCBS
YW5nZSopOwogICAgIGJvb2wgc2hvdWxkQWRkTmFtZXNwYWNlRWxlbWVudChjb25zdCBFbGVtZW50
Kik7Ci0gICAgYm9vbCBzaG91bGRBZGROYW1lc3BhY2VBdHRyaWJ1dGUoY29uc3QgQXR0cmlidXRl
KiwgTmFtZXNwYWNlcyYgbmFtZXNwYWNlcyk7Ci0gICAgdm9pZCBhcHBlbmROYW1lc3BhY2UoVmVj
dG9yPFVDaGFyPiYgcmVzdWx0LCBjb25zdCBBdG9taWNTdHJpbmcmIHByZWZpeCwgY29uc3QgQXRv
bWljU3RyaW5nJiBuYW1lc3BhY2VVUkksIE5hbWVzcGFjZXMmIG5hbWVzcGFjZXMpOworICAgIGJv
b2wgc2hvdWxkQWRkTmFtZXNwYWNlQXR0cmlidXRlKGNvbnN0IEF0dHJpYnV0ZSosIE5hbWVzcGFj
ZXMmKTsKKyAgICB2b2lkIGFwcGVuZE5hbWVzcGFjZShWZWN0b3I8VUNoYXI+JiByZXN1bHQsIGNv
bnN0IEF0b21pY1N0cmluZyYgcHJlZml4LCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVzcGFjZVVS
SSwgTmFtZXNwYWNlcyYpOwogICAgIHZvaWQgYXBwZW5kRG9jdW1lbnRUeXBlKFZlY3RvcjxVQ2hh
cj4mIHJlc3VsdCwgY29uc3QgRG9jdW1lbnRUeXBlKik7CiAgICAgdm9pZCByZW1vdmVFeHRlcmlv
clN0eWxlcyhDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiopOwotICAgIHZvaWQgYXBwZW5kU3Rh
cnRNYXJrdXAoVmVjdG9yPFVDaGFyPiYgcmVzdWx0LCBjb25zdCBOb2RlKiwgY29uc3QgUmFuZ2Uq
LCBFQW5ub3RhdGVGb3JJbnRlcmNoYW5nZSwgRUFic29sdXRlVVJMcywgYm9vbCBjb252ZXJ0Qmxv
Y2tzVG9JbmxpbmVzLCBOYW1lc3BhY2VzKiBuYW1lc3BhY2VzLCBSYW5nZUZ1bGx5U2VsZWN0c05v
ZGUpOworICAgIHZvaWQgYXBwZW5kU3RhcnRNYXJrdXAoVmVjdG9yPFVDaGFyPiYgcmVzdWx0LCBj
b25zdCBOb2RlKiwgYm9vbCBjb252ZXJ0QmxvY2tzVG9JbmxpbmVzLCBOYW1lc3BhY2VzKiwgUmFu
Z2VGdWxseVNlbGVjdHNOb2RlKTsKICAgICBib29sIHNob3VsZFNlbGZDbG9zZShjb25zdCBOb2Rl
Kik7CiAgICAgdm9pZCBhcHBlbmRFbmRNYXJrdXAoVmVjdG9yPFVDaGFyPiYgcmVzdWx0LCBjb25z
dCBOb2RlKik7CiAKKyAgICBpbmxpbmUgYm9vbCBzaG91bGRSZXNvbHZlVVJMcygpIHsgcmV0dXJu
IG1fc2hvdWxkUmVzb2x2ZVVSTHMgPT0gQWJzb2x1dGVVUkxzOyB9CisgICAgaW5saW5lIGJvb2wg
c2hvdWxkQW5ub3RhdGUoKSB7IHJldHVybiBtX3Nob3VsZEFubm90YXRlID09IEFubm90YXRlRm9y
SW50ZXJjaGFuZ2U7IH0KKwogICAgIFZlY3RvcjxOb2RlKj4qIG1fbm9kZXM7CisgICAgY29uc3Qg
Ym9vbCBtX3Nob3VsZFJlc29sdmVVUkxzOworICAgIGNvbnN0IEVBbm5vdGF0ZUZvckludGVyY2hh
bmdlIG1fc2hvdWxkQW5ub3RhdGU7CisgICAgY29uc3QgUmFuZ2UqIG1fcmFuZ2U7CiAgICAgVmVj
dG9yPFN0cmluZz4gbV9yZXZlcnNlZFByZWNlZGluZ01hcmt1cDsKICAgICBWZWN0b3I8U3RyaW5n
PiBtX3N1Y2NlZWRpbmdNYXJrdXA7CiB9OwpAQCAtMTM1LDI3ICsxNDQsMjcgQEAgdm9pZCBNYXJr
dXBBY2N1bXVsYXRvcjo6YXBwZW5kU3RyaW5nKGNvbgogICAgIG1fc3VjY2VlZGluZ01hcmt1cC5h
cHBlbmQoc3RyaW5nKTsKIH0KIAotdm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kU3RhcnRU
YWcoTm9kZSogbm9kZSwgY29uc3QgUmFuZ2UqIHJhbmdlLCBFQW5ub3RhdGVGb3JJbnRlcmNoYW5n
ZSBhbm5vdGF0ZSwgRUFic29sdXRlVVJMcyBzaG91bGRSZXNvbHZlVVJMcywgYm9vbCBjb252ZXJ0
QmxvY2tzVG9JbmxpbmVzLCBOYW1lc3BhY2VzKiBuYW1lc3BhY2VzLCBSYW5nZUZ1bGx5U2VsZWN0
c05vZGUgcmFuZ2VGdWxseVNlbGVjdHNOb2RlKQordm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBw
ZW5kU3RhcnRUYWcoTm9kZSogbm9kZSwgTmFtZXNwYWNlcyogbmFtZXNwYWNlcykKIHsKLSAgICBW
ZWN0b3I8VUNoYXI+IHJlc3VsdDsKLSAgICBhcHBlbmRTdGFydE1hcmt1cChyZXN1bHQsIG5vZGUs
IHJhbmdlLCBhbm5vdGF0ZSwgc2hvdWxkUmVzb2x2ZVVSTHMsIGNvbnZlcnRCbG9ja3NUb0lubGlu
ZXMsIG5hbWVzcGFjZXMsIHJhbmdlRnVsbHlTZWxlY3RzTm9kZSk7Ci0gICAgbV9zdWNjZWVkaW5n
TWFya3VwLmFwcGVuZChTdHJpbmc6OmFkb3B0KHJlc3VsdCkpOworICAgIFZlY3RvcjxVQ2hhcj4g
bWFya3VwOworICAgIGFwcGVuZFN0YXJ0TWFya3VwKG1hcmt1cCwgbm9kZSwgZmFsc2UsIG5hbWVz
cGFjZXMsIERvZXNGdWxseVNlbGVjdE5vZGUpOworICAgIG1fc3VjY2VlZGluZ01hcmt1cC5hcHBl
bmQoU3RyaW5nOjphZG9wdChtYXJrdXApKTsKICAgICBpZiAobV9ub2RlcykKICAgICAgICAgbV9u
b2Rlcy0+YXBwZW5kKG5vZGUpOwogfQogCiB2b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRF
bmRUYWcoTm9kZSogbm9kZSkKIHsKLSAgICBWZWN0b3I8VUNoYXI+IHJlc3VsdDsKLSAgICBhcHBl
bmRFbmRNYXJrdXAocmVzdWx0LCBub2RlKTsKLSAgICBtX3N1Y2NlZWRpbmdNYXJrdXAuYXBwZW5k
KFN0cmluZzo6YWRvcHQocmVzdWx0KSk7CisgICAgVmVjdG9yPFVDaGFyPiBtYXJrdXA7CisgICAg
YXBwZW5kRW5kTWFya3VwKG1hcmt1cCwgbm9kZSk7CisgICAgbV9zdWNjZWVkaW5nTWFya3VwLmFw
cGVuZChTdHJpbmc6OmFkb3B0KG1hcmt1cCkpOwogfQogCi12b2lkIE1hcmt1cEFjY3VtdWxhdG9y
Ojp3cmFwV2l0aE5vZGUoTm9kZSogbm9kZSwgY29uc3QgUmFuZ2UqIHJhbmdlLCBFQW5ub3RhdGVG
b3JJbnRlcmNoYW5nZSBhbm5vdGF0ZSwgRUFic29sdXRlVVJMcyBzaG91bGRSZXNvbHZlVVJMcywg
Ym9vbCBjb252ZXJ0QmxvY2tzVG9JbmxpbmVzLCBOYW1lc3BhY2VzKiBuYW1lc3BhY2VzLCBSYW5n
ZUZ1bGx5U2VsZWN0c05vZGUgcmFuZ2VGdWxseVNlbGVjdHNOb2RlKQordm9pZCBNYXJrdXBBY2N1
bXVsYXRvcjo6d3JhcFdpdGhOb2RlKE5vZGUqIG5vZGUsIGJvb2wgY29udmVydEJsb2Nrc1RvSW5s
aW5lcywgUmFuZ2VGdWxseVNlbGVjdHNOb2RlIHJhbmdlRnVsbHlTZWxlY3RzTm9kZSkKIHsKLSAg
ICBWZWN0b3I8VUNoYXI+IHJlc3VsdDsKLSAgICBhcHBlbmRTdGFydE1hcmt1cChyZXN1bHQsIG5v
ZGUsIHJhbmdlLCBhbm5vdGF0ZSwgc2hvdWxkUmVzb2x2ZVVSTHMsIGNvbnZlcnRCbG9ja3NUb0lu
bGluZXMsIG5hbWVzcGFjZXMsIHJhbmdlRnVsbHlTZWxlY3RzTm9kZSk7Ci0gICAgbV9yZXZlcnNl
ZFByZWNlZGluZ01hcmt1cC5hcHBlbmQoU3RyaW5nOjphZG9wdChyZXN1bHQpKTsKKyAgICBWZWN0
b3I8VUNoYXI+IG1hcmt1cDsKKyAgICBhcHBlbmRTdGFydE1hcmt1cChtYXJrdXAsIG5vZGUsIGNv
bnZlcnRCbG9ja3NUb0lubGluZXMsIDAsIHJhbmdlRnVsbHlTZWxlY3RzTm9kZSk7CisgICAgbV9y
ZXZlcnNlZFByZWNlZGluZ01hcmt1cC5hcHBlbmQoU3RyaW5nOjphZG9wdChtYXJrdXApKTsKICAg
ICBhcHBlbmRFbmRUYWcobm9kZSk7CiAgICAgaWYgKG1fbm9kZXMpCiAgICAgICAgIG1fbm9kZXMt
PmFwcGVuZChub2RlKTsKQEAgLTUwNSw3ICs1MTQsNyBAQCB2b2lkIE1hcmt1cEFjY3VtdWxhdG9y
OjpyZW1vdmVFeHRlcmlvclN0CiAgICAgc3R5bGUtPnJlbW92ZVByb3BlcnR5KENTU1Byb3BlcnR5
RmxvYXQpOwogfQogCi12b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRTdGFydE1hcmt1cChW
ZWN0b3I8VUNoYXI+JiByZXN1bHQsIGNvbnN0IE5vZGUqIG5vZGUsIGNvbnN0IFJhbmdlKiByYW5n
ZSwgRUFubm90YXRlRm9ySW50ZXJjaGFuZ2UgYW5ub3RhdGUsIEVBYnNvbHV0ZVVSTHMgYWJzb2x1
dGVVUkxzLCBib29sIGNvbnZlcnRCbG9ja3NUb0lubGluZXMsIE5hbWVzcGFjZXMqIG5hbWVzcGFj
ZXMsIFJhbmdlRnVsbHlTZWxlY3RzTm9kZSByYW5nZUZ1bGx5U2VsZWN0c05vZGUpCit2b2lkIE1h
cmt1cEFjY3VtdWxhdG9yOjphcHBlbmRTdGFydE1hcmt1cChWZWN0b3I8VUNoYXI+JiByZXN1bHQs
IGNvbnN0IE5vZGUqIG5vZGUsIGJvb2wgY29udmVydEJsb2Nrc1RvSW5saW5lcywgTmFtZXNwYWNl
cyogbmFtZXNwYWNlcywgUmFuZ2VGdWxseVNlbGVjdHNOb2RlIHJhbmdlRnVsbHlTZWxlY3RzTm9k
ZSkKIHsKICAgICBpZiAobmFtZXNwYWNlcykKICAgICAgICAgbmFtZXNwYWNlcy0+Y2hlY2tDb25z
aXN0ZW5jeSgpOwpAQCAtNTE3LDIwICs1MjYsMjAgQEAgdm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6
YXBwZW5kU3RhcnRNYXJrdQogICAgICAgICAgICAgICAgIGlmIChwYXJlbnQtPmhhc1RhZ05hbWUo
c2NyaXB0VGFnKQogICAgICAgICAgICAgICAgICAgICB8fCBwYXJlbnQtPmhhc1RhZ05hbWUoc3R5
bGVUYWcpCiAgICAgICAgICAgICAgICAgICAgIHx8IHBhcmVudC0+aGFzVGFnTmFtZSh4bXBUYWcp
KSB7Ci0gICAgICAgICAgICAgICAgICAgIGFwcGVuZFVDaGFyUmFuZ2UocmVzdWx0LCB1Y2hhclJh
bmdlKG5vZGUsIHJhbmdlKSk7CisgICAgICAgICAgICAgICAgICAgIGFwcGVuZFVDaGFyUmFuZ2Uo
cmVzdWx0LCB1Y2hhclJhbmdlKG5vZGUsIG1fcmFuZ2UpKTsKICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwYXJlbnQtPmhhc1RhZ05hbWUodGV4
dGFyZWFUYWcpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGFwcGVuZEVzY2FwZWRDb250ZW50KHJl
c3VsdCwgdWNoYXJSYW5nZShub2RlLCByYW5nZSksIGRvY3VtZW50SXNIVE1MKTsgICAgICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBhcHBlbmRFc2NhcGVkQ29udGVudChyZXN1
bHQsIHVjaGFyUmFuZ2Uobm9kZSwgbV9yYW5nZSksIGRvY3VtZW50SXNIVE1MKTsgICAgICAgICAg
ICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoIWFubm90YXRlKSB7Ci0gICAgICAgICAg
ICAgICAgYXBwZW5kRXNjYXBlZENvbnRlbnQocmVzdWx0LCB1Y2hhclJhbmdlKG5vZGUsIHJhbmdl
KSwgZG9jdW1lbnRJc0hUTUwpOworICAgICAgICAgICAgaWYgKCFzaG91bGRBbm5vdGF0ZSgpKSB7
CisgICAgICAgICAgICAgICAgYXBwZW5kRXNjYXBlZENvbnRlbnQocmVzdWx0LCB1Y2hhclJhbmdl
KG5vZGUsIG1fcmFuZ2UpLCBkb2N1bWVudElzSFRNTCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGJvb2wgdXNlUmVuZGVy
ZWRUZXh0ID0gIWVuY2xvc2luZ05vZGVXaXRoVGFnKFBvc2l0aW9uKGNvbnN0X2Nhc3Q8Tm9kZSo+
KG5vZGUpLCAwKSwgc2VsZWN0VGFnKTsKLSAgICAgICAgICAgIFN0cmluZyBtYXJrdXAgPSBlc2Nh
cGVDb250ZW50VGV4dCh1c2VSZW5kZXJlZFRleHQgPyByZW5kZXJlZFRleHQobm9kZSwgcmFuZ2Up
IDogc3RyaW5nVmFsdWVGb3JSYW5nZShub2RlLCByYW5nZSksIGZhbHNlKTsKKyAgICAgICAgICAg
IFN0cmluZyBtYXJrdXAgPSBlc2NhcGVDb250ZW50VGV4dCh1c2VSZW5kZXJlZFRleHQgPyByZW5k
ZXJlZFRleHQobm9kZSwgbV9yYW5nZSkgOiBzdHJpbmdWYWx1ZUZvclJhbmdlKG5vZGUsIG1fcmFu
Z2UpLCBmYWxzZSk7CiAgICAgICAgICAgICBtYXJrdXAgPSBjb252ZXJ0SFRNTFRleHRUb0ludGVy
Y2hhbmdlRm9ybWF0KG1hcmt1cCwgc3RhdGljX2Nhc3Q8Y29uc3QgVGV4dCo+KG5vZGUpKTsKICAg
ICAgICAgICAgIGFwcGVuZChyZXN1bHQsIG1hcmt1cCk7CiAgICAgICAgICAgICBicmVhazsKQEAg
LTU3MCw3ICs1NzksNyBAQCB2b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRTdGFydE1hcmt1
CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7
CiAgICAgICAgICAgICAgICAgQXR0cmlidXRlICphdHRyID0gYXR0cnMtPmF0dHJpYnV0ZUl0ZW0o
aSk7CiAgICAgICAgICAgICAgICAgLy8gV2UnbGwgaGFuZGxlIHRoZSBzdHlsZSBhdHRyaWJ1dGUg
c2VwYXJhdGVseSwgYmVsb3cuCi0gICAgICAgICAgICAgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBz
dHlsZUF0dHIgJiYgZWwtPmlzSFRNTEVsZW1lbnQoKSAmJiAoYW5ub3RhdGUgfHwgY29udmVydCkp
CisgICAgICAgICAgICAgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBzdHlsZUF0dHIgJiYgZWwtPmlz
SFRNTEVsZW1lbnQoKSAmJiAoc2hvdWxkQW5ub3RhdGUoKSB8fCBjb252ZXJ0KSkKICAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICcp
OwogCkBAIC01ODQsNyArNTkzLDcgQEAgdm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kU3Rh
cnRNYXJrdQogICAgICAgICAgICAgICAgIGlmIChlbC0+aXNVUkxBdHRyaWJ1dGUoYXR0cikpIHsK
ICAgICAgICAgICAgICAgICAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBjb21wbGV0ZSBmaWxlOi8v
LyBVUkxzIGJlY2F1c2UgaXQgbWF5IGNvbnRhaW4gc2Vuc2l0aXZlIGluZm9ybWF0aW9uCiAgICAg
ICAgICAgICAgICAgICAgIC8vIGFib3V0IHRoZSB1c2VyJ3Mgc3lzdGVtLgotICAgICAgICAgICAg
ICAgICAgICBpZiAoYWJzb2x1dGVVUkxzID09IEFic29sdXRlVVJMcyAmJiAhbm9kZS0+ZG9jdW1l
bnQoKS0+dXJsKCkuaXNMb2NhbEZpbGUoKSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKHNob3Vs
ZFJlc29sdmVVUkxzKCkgJiYgIW5vZGUtPmRvY3VtZW50KCktPnVybCgpLmlzTG9jYWxGaWxlKCkp
CiAgICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRRdW90ZWRVUkxBdHRyaWJ1dGVWYWx1ZShy
ZXN1bHQsIG5vZGUtPmRvY3VtZW50KCktPmNvbXBsZXRlVVJMKGF0dHItPnZhbHVlKCkpLnN0cmlu
ZygpKTsKICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAg
YXBwZW5kUXVvdGVkVVJMQXR0cmlidXRlVmFsdWUocmVzdWx0LCBhdHRyLT52YWx1ZSgpLnN0cmlu
ZygpKTsKQEAgLTU5OCwxMCArNjA3LDEwIEBAIHZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVu
ZFN0YXJ0TWFya3UKICAgICAgICAgICAgICAgICAgICAgYXBwZW5kTmFtZXNwYWNlKHJlc3VsdCwg
YXR0ci0+cHJlZml4KCksIGF0dHItPm5hbWVzcGFjZVVSSSgpLCAqbmFtZXNwYWNlcyk7CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChlbC0+aXNIVE1MRWxlbWVu
dCgpICYmIChhbm5vdGF0ZSB8fCBjb252ZXJ0KSkgeworICAgICAgICAgICAgaWYgKGVsLT5pc0hU
TUxFbGVtZW50KCkgJiYgKHNob3VsZEFubm90YXRlKCkgfHwgY29udmVydCkpIHsKICAgICAgICAg
ICAgICAgICBFbGVtZW50KiBlbGVtZW50ID0gY29uc3RfY2FzdDxFbGVtZW50Kj4oZWwpOwogICAg
ICAgICAgICAgICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gc3R5bGUgPSBz
dGF0aWNfY2FzdDxIVE1MRWxlbWVudCo+KGVsZW1lbnQpLT5nZXRJbmxpbmVTdHlsZURlY2woKS0+
Y29weSgpOwotICAgICAgICAgICAgICAgIGlmIChhbm5vdGF0ZSkgeworICAgICAgICAgICAgICAg
IGlmIChzaG91bGRBbm5vdGF0ZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgIFJlZlB0cjxDU1NN
dXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gc3R5bGVGcm9tTWF0Y2hlZFJ1bGVzID0gc3R5bGVGcm9t
TWF0Y2hlZFJ1bGVzRm9yRWxlbWVudChjb25zdF9jYXN0PEVsZW1lbnQqPihlbCkpOwogICAgICAg
ICAgICAgICAgICAgICAvLyBTdHlsZXMgZnJvbSB0aGUgaW5saW5lIHN0eWxlIGRlY2xhcmF0aW9u
LCBoZWxkIGluIHRoZSB2YXJpYWJsZSAic3R5bGUiLCB0YWtlIHByZWNlZGVuY2UgCiAgICAgICAg
ICAgICAgICAgICAgIC8vIG92ZXIgdGhvc2UgZnJvbSBtYXRjaGVkIHJ1bGVzLgpAQCAtODAyLDcg
KzgxMSw3IEBAIHN0YXRpYyBib29sIHNob3VsZEluY2x1ZGVXcmFwcGVyRm9yRnVsbHkKICAgICAg
ICAgICAgc3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29s
b3IpOwogfQogCi1zdGF0aWMgTm9kZSogc2VyaWFsaXplTm9kZXMoTWFya3VwQWNjdW11bGF0b3Im
IGFjY3VtdWxhdG9yLCBOb2RlKiBzdGFydE5vZGUsIE5vZGUqIHBhc3RFbmQsIGNvbnN0IFJhbmdl
KiByYW5nZSwgRUFubm90YXRlRm9ySW50ZXJjaGFuZ2UgYW5ub3RhdGUsIEVBYnNvbHV0ZVVSTHMg
YWJzb2x1dGVVUkxzKQorc3RhdGljIE5vZGUqIHNlcmlhbGl6ZU5vZGVzKE1hcmt1cEFjY3VtdWxh
dG9yJiBhY2N1bXVsYXRvciwgTm9kZSogc3RhcnROb2RlLCBOb2RlKiBwYXN0RW5kKQogewogICAg
IFZlY3RvcjxOb2RlKj4gYW5jZXN0b3JzVG9DbG9zZTsKICAgICBOb2RlKiBuZXh0OwpAQCAtODMw
LDcgKzgzOSw3IEBAIHN0YXRpYyBOb2RlKiBzZXJpYWxpemVOb2RlcyhNYXJrdXBBY2N1bXUKICAg
ICAgICAgICAgICAgICBuZXh0ID0gcGFzdEVuZDsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgIC8vIEFkZCB0aGUgbm9kZSB0byB0aGUgbWFya3VwIGlmIHdlJ3JlIG5vdCBza2lwcGluZyB0
aGUgZGVzY2VuZGFudHMKLSAgICAgICAgICAgIGFjY3VtdWxhdG9yLmFwcGVuZFN0YXJ0VGFnKG4s
IHJhbmdlLCBhbm5vdGF0ZSwgYWJzb2x1dGVVUkxzKTsKKyAgICAgICAgICAgIGFjY3VtdWxhdG9y
LmFwcGVuZFN0YXJ0VGFnKG4pOwogCiAgICAgICAgICAgICAvLyBJZiBub2RlIGhhcyBubyBjaGls
ZHJlbiwgY2xvc2UgdGhlIHRhZyBub3cuCiAgICAgICAgICAgICBpZiAoIW4tPmNoaWxkTm9kZUNv
dW50KCkpIHsKQEAgLTg2Niw3ICs4NzUsNyBAQCBzdGF0aWMgTm9kZSogc2VyaWFsaXplTm9kZXMo
TWFya3VwQWNjdW11CiAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
ICAgICAgICAgICAgLy8gb3IgYikgYW5jZXN0b3JzIHRoYXQgd2UgbmV2ZXIgZW5jb3VudGVyZWQg
ZHVyaW5nIGEgcHJlLW9yZGVyIHRyYXZlcnNhbCBzdGFydGluZyBhdCBzdGFydE5vZGU6CiAgICAg
ICAgICAgICAgICAgICAgIEFTU0VSVChzdGFydE5vZGUtPmlzRGVzY2VuZGFudE9mKHBhcmVudCkp
OwotICAgICAgICAgICAgICAgICAgICBhY2N1bXVsYXRvci53cmFwV2l0aE5vZGUocGFyZW50LCBy
YW5nZSwgYW5ub3RhdGUsIGFic29sdXRlVVJMcyk7CisgICAgICAgICAgICAgICAgICAgIGFjY3Vt
dWxhdG9yLndyYXBXaXRoTm9kZShwYXJlbnQpOwogICAgICAgICAgICAgICAgICAgICBsYXN0Q2xv
c2VkID0gcGFyZW50OwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTg3OCw3
ICs4ODcsNyBAQCBzdGF0aWMgTm9kZSogc2VyaWFsaXplTm9kZXMoTWFya3VwQWNjdW11CiAKIC8v
IEZJWE1FOiBTaG91bGRuJ3Qgd2Ugb21pdCBzdHlsZSBpbmZvIHdoZW4gYW5ub3RhdGUgPT0gRG9O
b3RBbm5vdGF0ZUZvckludGVyY2hhbmdlPyAKIC8vIEZJWE1FOiBBdCBsZWFzdCwgYW5ub3RhdGlv
biBhbmQgc3R5bGUgaW5mbyBzaG91bGQgcHJvYmFibHkgbm90IGJlIGluY2x1ZGVkIGluIHJhbmdl
Lm1hcmt1cFN0cmluZygpCi1TdHJpbmcgY3JlYXRlTWFya3VwKGNvbnN0IFJhbmdlKiByYW5nZSwg
VmVjdG9yPE5vZGUqPiogbm9kZXMsIEVBbm5vdGF0ZUZvckludGVyY2hhbmdlIGFubm90YXRlLCBi
b29sIGNvbnZlcnRCbG9ja3NUb0lubGluZXMsIEVBYnNvbHV0ZVVSTHMgYWJzb2x1dGVVUkxzKQor
U3RyaW5nIGNyZWF0ZU1hcmt1cChjb25zdCBSYW5nZSogcmFuZ2UsIFZlY3RvcjxOb2RlKj4qIG5v
ZGVzLCBFQW5ub3RhdGVGb3JJbnRlcmNoYW5nZSBzaG91bGRBbm5vdGF0ZSwgYm9vbCBjb252ZXJ0
QmxvY2tzVG9JbmxpbmVzLCBFQWJzb2x1dGVVUkxzIHNob3VsZFJlc29sdmVVUkxzKQogewogICAg
IERFRklORV9TVEFUSUNfTE9DQUwoY29uc3QgU3RyaW5nLCBpbnRlcmNoYW5nZU5ld2xpbmVTdHJp
bmcsICgiPGJyIGNsYXNzPVwiIiBBcHBsZUludGVyY2hhbmdlTmV3bGluZSAiXCI+IikpOwogCkBA
IC05MTIsMTMgKzkyMSwxMyBAQCBTdHJpbmcgY3JlYXRlTWFya3VwKGNvbnN0IFJhbmdlKiByYW5n
ZSwgCiAKICAgICBkb2N1bWVudC0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRz
KCk7CiAKLSAgICBNYXJrdXBBY2N1bXVsYXRvciBhY2N1bXVsYXRvcihub2Rlcyk7CisgICAgTWFy
a3VwQWNjdW11bGF0b3IgYWNjdW11bGF0b3Iobm9kZXMsIHNob3VsZFJlc29sdmVVUkxzLCBzaG91
bGRBbm5vdGF0ZSwgdXBkYXRlZFJhbmdlLmdldCgpKTsKICAgICBOb2RlKiBwYXN0RW5kID0gdXBk
YXRlZFJhbmdlLT5wYXN0TGFzdE5vZGUoKTsKIAogICAgIE5vZGUqIHN0YXJ0Tm9kZSA9IHVwZGF0
ZWRSYW5nZS0+Zmlyc3ROb2RlKCk7CiAgICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVTdGFydCh1
cGRhdGVkUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSwgVlBfREVGQVVMVF9BRkZJTklUWSk7CiAgICAg
VmlzaWJsZVBvc2l0aW9uIHZpc2libGVFbmQodXBkYXRlZFJhbmdlLT5lbmRQb3NpdGlvbigpLCBW
UF9ERUZBVUxUX0FGRklOSVRZKTsKLSAgICBpZiAoYW5ub3RhdGUgJiYgbmVlZEludGVyY2hhbmdl
TmV3bGluZUFmdGVyKHZpc2libGVTdGFydCkpIHsKKyAgICBpZiAoc2hvdWxkQW5ub3RhdGUgPT0g
QW5ub3RhdGVGb3JJbnRlcmNoYW5nZSAmJiBuZWVkSW50ZXJjaGFuZ2VOZXdsaW5lQWZ0ZXIodmlz
aWJsZVN0YXJ0KSkgewogICAgICAgICBpZiAodmlzaWJsZVN0YXJ0ID09IHZpc2libGVFbmQucHJl
dmlvdXMoKSkgewogICAgICAgICAgICAgaWYgKGRlbGV0ZUJ1dHRvbikKICAgICAgICAgICAgICAg
ICBkZWxldGVCdXR0b24tPmVuYWJsZSgpOwpAQCAtOTM1LDEzICs5NDQsMTMgQEAgU3RyaW5nIGNy
ZWF0ZU1hcmt1cChjb25zdCBSYW5nZSogcmFuZ2UsIAogICAgICAgICB9CiAgICAgfQogCi0gICAg
Tm9kZSogbGFzdENsb3NlZCA9IHNlcmlhbGl6ZU5vZGVzKGFjY3VtdWxhdG9yLCBzdGFydE5vZGUs
IHBhc3RFbmQsIHJhbmdlLCBhbm5vdGF0ZSwgYWJzb2x1dGVVUkxzKTsKKyAgICBOb2RlKiBsYXN0
Q2xvc2VkID0gc2VyaWFsaXplTm9kZXMoYWNjdW11bGF0b3IsIHN0YXJ0Tm9kZSwgcGFzdEVuZCk7
CiAKICAgICAvLyBJbmNsdWRlIGFuY2VzdG9ycyB0aGF0IGFyZW4ndCBjb21wbGV0ZWx5IGluc2lk
ZSB0aGUgcmFuZ2UgYnV0IGFyZSByZXF1aXJlZCB0byByZXRhaW4gCiAgICAgLy8gdGhlIHN0cnVj
dHVyZSBhbmQgYXBwZWFyYW5jZSBvZiB0aGUgY29waWVkIG1hcmt1cC4KICAgICBOb2RlKiBzcGVj
aWFsQ29tbW9uQW5jZXN0b3IgPSAwOwogICAgIE5vZGUqIGNvbW1vbkFuY2VzdG9yQmxvY2sgPSBj
b21tb25BbmNlc3RvciA/IGVuY2xvc2luZ0Jsb2NrKGNvbW1vbkFuY2VzdG9yKSA6IDA7Ci0gICAg
aWYgKGFubm90YXRlICYmIGNvbW1vbkFuY2VzdG9yQmxvY2spIHsKKyAgICBpZiAoc2hvdWxkQW5u
b3RhdGUgPT0gQW5ub3RhdGVGb3JJbnRlcmNoYW5nZSAmJiBjb21tb25BbmNlc3RvckJsb2NrKSB7
CiAgICAgICAgIGlmIChjb21tb25BbmNlc3RvckJsb2NrLT5oYXNUYWdOYW1lKHRib2R5VGFnKSB8
fCBjb21tb25BbmNlc3RvckJsb2NrLT5oYXNUYWdOYW1lKHRyVGFnKSkgewogICAgICAgICAgICAg
Tm9kZSogdGFibGUgPSBjb21tb25BbmNlc3RvckJsb2NrLT5wYXJlbnROb2RlKCk7CiAgICAgICAg
ICAgICB3aGlsZSAodGFibGUgJiYgIXRhYmxlLT5oYXNUYWdOYW1lKHRhYmxlVGFnKSkKQEAgLTk1
Myw3ICs5NjIsNyBAQCBTdHJpbmcgY3JlYXRlTWFya3VwKGNvbnN0IFJhbmdlKiByYW5nZSwgCiAg
ICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAvLyBSZXRh
aW4gdGhlIE1haWwgcXVvdGUgbGV2ZWwgYnkgaW5jbHVkaW5nIGFsbCBhbmNlc3RvciBtYWlsIGJs
b2NrIHF1b3Rlcy4KLSAgICBpZiAobGFzdENsb3NlZCAmJiBhbm5vdGF0ZSkgeworICAgIGlmIChs
YXN0Q2xvc2VkICYmIHNob3VsZEFubm90YXRlID09IEFubm90YXRlRm9ySW50ZXJjaGFuZ2UpIHsK
ICAgICAgICAgZm9yIChOb2RlICphbmNlc3RvciA9IGxhc3RDbG9zZWQtPnBhcmVudE5vZGUoKTsg
YW5jZXN0b3I7IGFuY2VzdG9yID0gYW5jZXN0b3ItPnBhcmVudE5vZGUoKSkKICAgICAgICAgICAg
IGlmIChpc01haWxCbG9ja3F1b3RlKGFuY2VzdG9yKSkKICAgICAgICAgICAgICAgICBzcGVjaWFs
Q29tbW9uQW5jZXN0b3IgPSBhbmNlc3RvcjsKQEAgLTk4Miw3ICs5OTEsNyBAQCBTdHJpbmcgY3Jl
YXRlTWFya3VwKGNvbnN0IFJhbmdlKiByYW5nZSwgCiAgICAgLy8gRklYTUU6IERvIHRoaXMgZm9y
IGFsbCBmdWxseSBzZWxlY3RlZCBibG9ja3MsIG5vdCBqdXN0IHRoZSBib2R5LgogICAgIE5vZGUq
IGZ1bGx5U2VsZWN0ZWRSb290ID0gYm9keSAmJiBhcmVSYW5nZXNFcXVhbChWaXNpYmxlU2VsZWN0
aW9uOjpzZWxlY3Rpb25Gcm9tQ29udGVudHNPZk5vZGUoYm9keSkudG9Ob3JtYWxpemVkUmFuZ2Uo
KS5nZXQoKSwgdXBkYXRlZFJhbmdlLmdldCgpKSA/IGJvZHkgOiAwOwogICAgIFJlZlB0cjxDU1NN
dXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gZnVsbHlTZWxlY3RlZFJvb3RTdHlsZSA9IGZ1bGx5U2Vs
ZWN0ZWRSb290ID8gc3R5bGVGcm9tTWF0Y2hlZFJ1bGVzQW5kSW5saW5lRGVjbChmdWxseVNlbGVj
dGVkUm9vdCkgOiAwOwotICAgIGlmIChhbm5vdGF0ZSAmJiBmdWxseVNlbGVjdGVkUm9vdCkgewor
ICAgIGlmIChzaG91bGRBbm5vdGF0ZSA9PSBBbm5vdGF0ZUZvckludGVyY2hhbmdlICYmIGZ1bGx5
U2VsZWN0ZWRSb290KSB7CiAgICAgICAgIGlmIChzaG91bGRJbmNsdWRlV3JhcHBlckZvckZ1bGx5
U2VsZWN0ZWRSb290KGZ1bGx5U2VsZWN0ZWRSb290LCBmdWxseVNlbGVjdGVkUm9vdFN0eWxlLmdl
dCgpKSkKICAgICAgICAgICAgIHNwZWNpYWxDb21tb25BbmNlc3RvciA9IGZ1bGx5U2VsZWN0ZWRS
b290OwogICAgIH0KQEAgLTEwMTAsNyArMTAxOSw3IEBAIFN0cmluZyBjcmVhdGVNYXJrdXAoY29u
c3QgUmFuZ2UqIHJhbmdlLCAKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAg
Ly8gU2luY2UgdGhpcyBub2RlIGFuZCBhbGwgdGhlIG90aGVyIGFuY2VzdG9ycyBhcmUgbm90IGlu
IHRoZSBzZWxlY3Rpb24gd2Ugd2FudCB0byBzZXQgUmFuZ2VGdWxseVNlbGVjdHNOb2RlIHRvIERv
ZXNOb3RGdWxseVNlbGVjdE5vZGUKICAgICAgICAgICAgICAgICAvLyBzbyB0aGF0IHN0eWxlcyB0
aGF0IGFmZmVjdCB0aGUgZXh0ZXJpb3Igb2YgdGhlIG5vZGUgYXJlIG5vdCBpbmNsdWRlZC4KLSAg
ICAgICAgICAgICAgICBhY2N1bXVsYXRvci53cmFwV2l0aE5vZGUoYW5jZXN0b3IsIHVwZGF0ZWRS
YW5nZS5nZXQoKSwgYW5ub3RhdGUsIGFic29sdXRlVVJMcywgY29udmVydEJsb2Nrc1RvSW5saW5l
cywgMCwgTWFya3VwQWNjdW11bGF0b3I6OkRvZXNOb3RGdWxseVNlbGVjdE5vZGUpOworICAgICAg
ICAgICAgICAgIGFjY3VtdWxhdG9yLndyYXBXaXRoTm9kZShhbmNlc3RvciwgY29udmVydEJsb2Nr
c1RvSW5saW5lcywgTWFya3VwQWNjdW11bGF0b3I6OkRvZXNOb3RGdWxseVNlbGVjdE5vZGUpOwog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKG5vZGVzKQogICAgICAgICAgICAgICAgIG5v
ZGVzLT5hcHBlbmQoYW5jZXN0b3IpOwpAQCAtMTA1Niw3ICsxMDY1LDcgQEAgU3RyaW5nIGNyZWF0
ZU1hcmt1cChjb25zdCBSYW5nZSogcmFuZ2UsIAogICAgIH0KIAogICAgIC8vIEZJWE1FOiBUaGUg
aW50ZXJjaGFuZ2UgbmV3bGluZSBzaG91bGQgYmUgcGxhY2VkIGluIHRoZSBibG9jayB0aGF0IGl0
J3MgaW4sIG5vdCBhZnRlciBhbGwgb2YgdGhlIGNvbnRlbnQsIHVuY29uZGl0aW9uYWxseS4KLSAg
ICBpZiAoYW5ub3RhdGUgJiYgbmVlZEludGVyY2hhbmdlTmV3bGluZUFmdGVyKHZpc2libGVFbmQu
cHJldmlvdXMoKSkpCisgICAgaWYgKHNob3VsZEFubm90YXRlID09IEFubm90YXRlRm9ySW50ZXJj
aGFuZ2UgJiYgbmVlZEludGVyY2hhbmdlTmV3bGluZUFmdGVyKHZpc2libGVFbmQucHJldmlvdXMo
KSkpCiAgICAgICAgIGFjY3VtdWxhdG9yLmFwcGVuZFN0cmluZyhpbnRlcmNoYW5nZU5ld2xpbmVT
dHJpbmcpOwogCiAgICAgaWYgKGRlbGV0ZUJ1dHRvbikKQEAgLTEwNzYsNyArMTA4NSw3IEBAIFBh
c3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gY3JlYXRlRnJhZ20KICAgICByZXR1cm4gZnJhZ21l
bnQucmVsZWFzZSgpOwogfQogCi1zdGF0aWMgdm9pZCBzZXJpYWxpemVOb2Rlc1dpdGhOYW1lc3Bh
Y2VzKE1hcmt1cEFjY3VtdWxhdG9yJiBhY2N1bXVsYXRvciwgTm9kZSogbm9kZSwgTm9kZSogbm9k
ZVRvU2tpcCwgRUNoaWxkcmVuT25seSBjaGlsZHJlbk9ubHksIEVBYnNvbHV0ZVVSTHMgYWJzb2x1
dGVVUkxzLCBjb25zdCBOYW1lc3BhY2VzKiBuYW1lc3BhY2VzKQorc3RhdGljIHZvaWQgc2VyaWFs
aXplTm9kZXNXaXRoTmFtZXNwYWNlcyhNYXJrdXBBY2N1bXVsYXRvciYgYWNjdW11bGF0b3IsIE5v
ZGUqIG5vZGUsIE5vZGUqIG5vZGVUb1NraXAsIEVDaGlsZHJlbk9ubHkgY2hpbGRyZW5Pbmx5LCBj
b25zdCBOYW1lc3BhY2VzKiBuYW1lc3BhY2VzKQogewogICAgIGlmIChub2RlID09IG5vZGVUb1Nr
aXApCiAgICAgICAgIHJldHVybjsKQEAgLTEwODYsMTggKzEwOTUsMTggQEAgc3RhdGljIHZvaWQg
c2VyaWFsaXplTm9kZXNXaXRoTmFtZXNwYWNlcwogICAgICAgICBuYW1lc3BhY2VIYXNoID0gKm5h
bWVzcGFjZXM7CiAKICAgICBpZiAoIWNoaWxkcmVuT25seSkKLSAgICAgICAgYWNjdW11bGF0b3Iu
YXBwZW5kU3RhcnRUYWcobm9kZSwgMCwgRG9Ob3RBbm5vdGF0ZUZvckludGVyY2hhbmdlLCBhYnNv
bHV0ZVVSTHMsIGZhbHNlLCAmbmFtZXNwYWNlSGFzaCk7CisgICAgICAgIGFjY3VtdWxhdG9yLmFw
cGVuZFN0YXJ0VGFnKG5vZGUsICZuYW1lc3BhY2VIYXNoKTsKIAogICAgIGlmICghKG5vZGUtPmRv
Y3VtZW50KCktPmlzSFRNTERvY3VtZW50KCkgJiYgZG9lc0hUTUxGb3JiaWRFbmRUYWcobm9kZSkp
KSB7CiAgICAgICAgIGZvciAoTm9kZSogY3VycmVudCA9IG5vZGUtPmZpcnN0Q2hpbGQoKTsgY3Vy
cmVudDsgY3VycmVudCA9IGN1cnJlbnQtPm5leHRTaWJsaW5nKCkpCi0gICAgICAgICAgICBzZXJp
YWxpemVOb2Rlc1dpdGhOYW1lc3BhY2VzKGFjY3VtdWxhdG9yLCBjdXJyZW50LCBub2RlVG9Ta2lw
LCBJbmNsdWRlTm9kZSwgYWJzb2x1dGVVUkxzLCAmbmFtZXNwYWNlSGFzaCk7CisgICAgICAgICAg
ICBzZXJpYWxpemVOb2Rlc1dpdGhOYW1lc3BhY2VzKGFjY3VtdWxhdG9yLCBjdXJyZW50LCBub2Rl
VG9Ta2lwLCBJbmNsdWRlTm9kZSwgJm5hbWVzcGFjZUhhc2gpOwogICAgIH0KIAogICAgIGlmICgh
Y2hpbGRyZW5Pbmx5KQogICAgICAgICBhY2N1bXVsYXRvci5hcHBlbmRFbmRUYWcobm9kZSk7CiB9
CiAKLVN0cmluZyBjcmVhdGVNYXJrdXAoY29uc3QgTm9kZSogbm9kZSwgRUNoaWxkcmVuT25seSBj
aGlsZHJlbk9ubHksIFZlY3RvcjxOb2RlKj4qIG5vZGVzLCBFQWJzb2x1dGVVUkxzIGFic29sdXRl
VVJMcykKK1N0cmluZyBjcmVhdGVNYXJrdXAoY29uc3QgTm9kZSogbm9kZSwgRUNoaWxkcmVuT25s
eSBjaGlsZHJlbk9ubHksIFZlY3RvcjxOb2RlKj4qIG5vZGVzLCBFQWJzb2x1dGVVUkxzIHNob3Vs
ZFJlc29sdmVVUkxzKQogewogICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuICIiOwpAQCAt
MTEwOSw4ICsxMTE4LDggQEAgU3RyaW5nIGNyZWF0ZU1hcmt1cChjb25zdCBOb2RlKiBub2RlLCBF
QwogICAgICAgICAgICAgcmV0dXJuICIiOwogICAgIH0KIAotICAgIE1hcmt1cEFjY3VtdWxhdG9y
IGFjY3VtdWxhdG9yKG5vZGVzKTsKLSAgICBzZXJpYWxpemVOb2Rlc1dpdGhOYW1lc3BhY2VzKGFj
Y3VtdWxhdG9yLCBjb25zdF9jYXN0PE5vZGUqPihub2RlKSwgZGVsZXRlQnV0dG9uQ29udGFpbmVy
RWxlbWVudCwgY2hpbGRyZW5Pbmx5LCBhYnNvbHV0ZVVSTHMsIDApOworICAgIE1hcmt1cEFjY3Vt
dWxhdG9yIGFjY3VtdWxhdG9yKG5vZGVzLCBzaG91bGRSZXNvbHZlVVJMcywgRG9Ob3RBbm5vdGF0
ZUZvckludGVyY2hhbmdlKTsKKyAgICBzZXJpYWxpemVOb2Rlc1dpdGhOYW1lc3BhY2VzKGFjY3Vt
dWxhdG9yLCBjb25zdF9jYXN0PE5vZGUqPihub2RlKSwgZGVsZXRlQnV0dG9uQ29udGFpbmVyRWxl
bWVudCwgY2hpbGRyZW5Pbmx5LCAwKTsKICAgICByZXR1cm4gYWNjdW11bGF0b3IudGFrZVJlc3Vs
dHMoKTsKIH0KIAo=
</data>
<flag name="review"
          id="53451"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>