<?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>52250</bug_id>
          
          <creation_ts>2011-01-11 14:06:52 -0800</creation_ts>
          <short_desc>Stop instantiating legacy editing positions in ApplyBlockElementCommand and ApplyStyleCommand</short_desc>
          <delta_ts>2011-01-14 14:10:34 -0800</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>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>52099</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>darin</cc>
    
    <cc>enrica</cc>
    
    <cc>eric</cc>
    
    <cc>kalman</cc>
    
    <cc>lweintraub</cc>
    
    <cc>ojan</cc>
    
    <cc>tony</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>332638</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-01-11 14:06:52 -0800</bug_when>
    <thetext>This is a cleanup.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>332643</commentid>
    <comment_count>1</comment_count>
      <attachid>78597</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-01-11 14:09:52 -0800</bug_when>
    <thetext>Created attachment 78597
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>332739</commentid>
    <comment_count>2</comment_count>
      <attachid>78597</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-01-11 15:37:57 -0800</bug_when>
    <thetext>Comment on attachment 78597
Patch

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

&gt; WebCore/editing/ApplyStyleCommand.cpp:571
&gt; +    Position rangeStart = firstPositionInNode(scope);

Does this cause ref-churn for scope?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>332771</commentid>
    <comment_count>3</comment_count>
      <attachid>78618</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-01-11 16:18:12 -0800</bug_when>
    <thetext>Created attachment 78618
cleanup</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>332772</commentid>
    <comment_count>4</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-01-11 16:18:49 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 78597 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=78597&amp;action=review
&gt; 
&gt; &gt; WebCore/editing/ApplyStyleCommand.cpp:571
&gt; &gt; +    Position rangeStart = firstPositionInNode(scope);
&gt; 
&gt; Does this cause ref-churn for scope?

Good point. Removed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>332803</commentid>
    <comment_count>5</comment_count>
      <attachid>78618</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-01-11 16:54:27 -0800</bug_when>
    <thetext>Comment on attachment 78618
cleanup

On my second thought, I have to be more careful about what kind of Position I&apos;m creating.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>332838</commentid>
    <comment_count>6</comment_count>
      <attachid>78633</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-01-11 18:03:57 -0800</bug_when>
    <thetext>Created attachment 78633
don&apos;t generate bogus position like [br, 0]</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>333436</commentid>
    <comment_count>7</comment_count>
      <attachid>78633</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-01-12 17:06:07 -0800</bug_when>
    <thetext>Comment on attachment 78633
don&apos;t generate bogus position like [br, 0]

Seems sane.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>333507</commentid>
    <comment_count>8</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-01-12 19:04:21 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 78633 [details])
&gt; Seems sane.

Thanks for the review, Eric.  Landing now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>334600</commentid>
    <comment_count>9</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-01-14 14:10:34 -0800</bug_when>
    <thetext>Landed as http://trac.webkit.org/changeset/75672 and http://trac.webkit.org/changeset/75674.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>78597</attachid>
            <date>2011-01-11 14:09:52 -0800</date>
            <delta_ts>2011-01-11 16:18:07 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-52250-20110111140951.patch</filename>
            <type>text/plain</type>
            <size>14966</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvZWRpdGluZy9BcHBseUJsb2NrRWxlbWVudENvbW1hbmQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9BcHBseUJsb2NrRWxlbWVudENvbW1hbmQuY3BwCShy
ZXZpc2lvbiA3NTMwNCkKKysrIFdlYkNvcmUvZWRpdGluZy9BcHBseUJsb2NrRWxlbWVudENvbW1h
bmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDIsNyArMTAyLDcgQEAgdm9pZCBBcHBseUJsb2Nr
RWxlbWVudENvbW1hbmQ6OmZvcm1hdFNlbAogICAgICAgICBpbnNlcnROb2RlQXQoYmxvY2txdW90
ZSwgc3RhcnQpOwogICAgICAgICBSZWZQdHI8RWxlbWVudD4gcGxhY2Vob2xkZXIgPSBjcmVhdGVC
cmVha0VsZW1lbnQoZG9jdW1lbnQoKSk7CiAgICAgICAgIGFwcGVuZE5vZGUocGxhY2Vob2xkZXIs
IGJsb2NrcXVvdGUpOwotICAgICAgICBzZXRFbmRpbmdTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlv
bihQb3NpdGlvbihwbGFjZWhvbGRlci5nZXQoKSwgMCksIERPV05TVFJFQU0pKTsKKyAgICAgICAg
c2V0RW5kaW5nU2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24ocG9zaXRpb25CZWZvcmVOb2RlKHBs
YWNlaG9sZGVyLmdldCgpKSwgRE9XTlNUUkVBTSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
CkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAJKHJldmlzaW9uIDc1MzA0
KQorKysgV2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTY4LDcgKzU2OCw3IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OmFwcGx5QmxvY2tT
dHlsZSgKICAgICAvLyBhZGRCbG9ja1N0eWxlSWZOZWVkZWQgbWF5IG1vdmVQYXJhZ3JhcGhzLCB3
aGljaCBjYW4gcmVtb3ZlIHRoZXNlIGVuZHBvaW50cy4KICAgICAvLyBDYWxjdWxhdGUgc3RhcnQg
YW5kIGVuZCBpbmRpY2VzIGZyb20gdGhlIHN0YXJ0IG9mIHRoZSB0cmVlIHRoYXQgdGhleSdyZSBp
bi4KICAgICBOb2RlKiBzY29wZSA9IGhpZ2hlc3RBbmNlc3Rvcih2aXNpYmxlU3RhcnQuZGVlcEVx
dWl2YWxlbnQoKS5ub2RlKCkpOwotICAgIFBvc2l0aW9uIHJhbmdlU3RhcnQoc2NvcGUsIDApOwor
ICAgIFBvc2l0aW9uIHJhbmdlU3RhcnQgPSBmaXJzdFBvc2l0aW9uSW5Ob2RlKHNjb3BlKTsKICAg
ICBSZWZQdHI8UmFuZ2U+IHN0YXJ0UmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKGRvY3VtZW50KCksIHJh
bmdlU3RhcnQsIHJhbmdlQ29tcGxpYW50RXF1aXZhbGVudCh2aXNpYmxlU3RhcnQuZGVlcEVxdWl2
YWxlbnQoKSkpOwogICAgIFJlZlB0cjxSYW5nZT4gZW5kUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKGRv
Y3VtZW50KCksIHJhbmdlU3RhcnQsIHJhbmdlQ29tcGxpYW50RXF1aXZhbGVudCh2aXNpYmxlRW5k
LmRlZXBFcXVpdmFsZW50KCkpKTsKICAgICBpbnQgc3RhcnRJbmRleCA9IFRleHRJdGVyYXRvcjo6
cmFuZ2VMZW5ndGgoc3RhcnRSYW5nZS5nZXQoKSwgdHJ1ZSk7CkBAIC05ODIsNyArOTgyLDcgQEAg
dm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6Zml4UmFuZ2VBbmRBcHBseQogCiAgICAgaWYgKHN0YXJ0
LmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkgPj0gY2FyZXRNYXhPZmZzZXQoc3RhcnQubm9kZSgp
KSkgewogICAgICAgICBzdGFydE5vZGUgPSBzdGFydE5vZGUtPnRyYXZlcnNlTmV4dE5vZGUoKTsK
LSAgICAgICAgaWYgKCFzdGFydE5vZGUgfHwgY29tcGFyZVBvc2l0aW9ucyhlbmQsIFBvc2l0aW9u
KHN0YXJ0Tm9kZSwgMCkpIDwgMCkKKyAgICAgICAgaWYgKCFzdGFydE5vZGUgfHwgY29tcGFyZVBv
c2l0aW9ucyhlbmQsIGZpcnN0UG9zaXRpb25Jbk5vZGUoc3RhcnROb2RlKSkgPCAwKQogICAgICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMTMzMyw3ICsxMzMzLDcgQEAgSFRNTEVsZW1lbnQq
IEFwcGx5U3R5bGVDb21tYW5kOjpoaWdoZXN0QQogICAgICAgICByZXR1cm4gMDsKIAogICAgIEhU
TUxFbGVtZW50KiByZXN1bHQgPSAwOwotICAgIE5vZGUqIHVuc3BsaXR0YWJsZUVsZW1lbnQgPSB1
bnNwbGl0dGFibGVFbGVtZW50Rm9yUG9zaXRpb24oUG9zaXRpb24obm9kZSwgMCkpOworICAgIE5v
ZGUqIHVuc3BsaXR0YWJsZUVsZW1lbnQgPSB1bnNwbGl0dGFibGVFbGVtZW50Rm9yUG9zaXRpb24o
Zmlyc3RQb3NpdGlvbkluTm9kZShub2RlKSk7CiAKICAgICBmb3IgKE5vZGUgKm4gPSBub2RlOyBu
OyBuID0gbi0+cGFyZW50Tm9kZSgpKSB7CiAgICAgICAgIGlmIChuLT5pc0hUTUxFbGVtZW50KCkg
JiYgc2hvdWxkUmVtb3ZlSW5saW5lU3R5bGVGcm9tRWxlbWVudChzdHlsZSwgc3RhdGljX2Nhc3Q8
SFRNTEVsZW1lbnQqPihuKSkpCkBAIC0xNTE2LDE0ICsxNTE2LDE0IEBAIHZvaWQgQXBwbHlTdHls
ZUNvbW1hbmQ6OnJlbW92ZUlubGluZVN0eWwKICAgICAgICAgICAgICAgICAgICAgLy8gU2luY2Ug
ZWxlbSBtdXN0IGhhdmUgYmVlbiBmdWxseSBzZWxlY3RlZCwgYW5kIGl0IGlzIGF0IHRoZSBzdGFy
dAogICAgICAgICAgICAgICAgICAgICAvLyBvZiB0aGUgc2VsZWN0aW9uLCBpdCBpcyBjbGVhciB3
ZSBjYW4gc2V0IHRoZSBuZXcgcyBvZmZzZXQgdG8gMC4KICAgICAgICAgICAgICAgICAgICAgQVNT
RVJUKHMuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSA8PSBjYXJldE1pbk9mZnNldChzLm5vZGUo
KSkpOwotICAgICAgICAgICAgICAgICAgICBzID0gUG9zaXRpb24obmV4dCwgMCk7CisgICAgICAg
ICAgICAgICAgICAgIHMgPSBmaXJzdFBvc2l0aW9uSW5Ob2RlKG5leHQuZ2V0KCkpOwogICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBpZiAoZS5ub2RlKCkgPT0gZWxlbSkgewogICAg
ICAgICAgICAgICAgICAgICAvLyBTaW5jZSBlbGVtIG11c3QgaGF2ZSBiZWVuIGZ1bGx5IHNlbGVj
dGVkLCBhbmQgaXQgaXMgYXQgdGhlIGVuZAogICAgICAgICAgICAgICAgICAgICAvLyBvZiB0aGUg
c2VsZWN0aW9uLCBpdCBpcyBjbGVhciB3ZSBjYW4gc2V0IHRoZSBuZXcgZSBvZmZzZXQgdG8KICAg
ICAgICAgICAgICAgICAgICAgLy8gdGhlIG1heCByYW5nZSBvZmZzZXQgb2YgcHJldi4KICAgICAg
ICAgICAgICAgICAgICAgQVNTRVJUKGUuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSA+PSBsYXN0
T2Zmc2V0Rm9yRWRpdGluZyhlLm5vZGUoKSkpOwotICAgICAgICAgICAgICAgICAgICBlID0gUG9z
aXRpb24ocHJldiwgbGFzdE9mZnNldEZvckVkaXRpbmcocHJldi5nZXQoKSkpOworICAgICAgICAg
ICAgICAgICAgICBlID0gbGFzdFBvc2l0aW9uSW5Ob2RlKHByZXYuZ2V0KCkpOwogICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIH0KIApAQCAtMTU0NSw4ICsxNTQ1LDcgQEAgYm9vbCBBcHBs
eVN0eWxlQ29tbWFuZDo6bm9kZUZ1bGx5U2VsZWN0ZQogICAgIEFTU0VSVChub2RlKTsKICAgICBB
U1NFUlQobm9kZS0+aXNFbGVtZW50Tm9kZSgpKTsKIAotICAgIFBvc2l0aW9uIHBvcyA9IFBvc2l0
aW9uKG5vZGUsIG5vZGUtPmNoaWxkTm9kZUNvdW50KCkpLnVwc3RyZWFtKCk7Ci0gICAgcmV0dXJu
IGNvbXBhcmVQb3NpdGlvbnMoUG9zaXRpb24obm9kZSwgMCksIHN0YXJ0KSA+PSAwICYmIGNvbXBh
cmVQb3NpdGlvbnMocG9zLCBlbmQpIDw9IDA7CisgICAgcmV0dXJuIGNvbXBhcmVQb3NpdGlvbnMo
Zmlyc3RQb3NpdGlvbkluTm9kZShub2RlKSwgc3RhcnQpID49IDAgJiYgY29tcGFyZVBvc2l0aW9u
cyhsYXN0UG9zaXRpb25Jbk5vZGUobm9kZSkudXBzdHJlYW0oKSwgZW5kKSA8PSAwOwogfQogCiBi
b29sIEFwcGx5U3R5bGVDb21tYW5kOjpub2RlRnVsbHlVbnNlbGVjdGVkKE5vZGUgKm5vZGUsIGNv
bnN0IFBvc2l0aW9uICZzdGFydCwgY29uc3QgUG9zaXRpb24gJmVuZCkgY29uc3QKQEAgLTE1NTYs
NDkgKzE1NTUsNjcgQEAgYm9vbCBBcHBseVN0eWxlQ29tbWFuZDo6bm9kZUZ1bGx5VW5zZWxlYwog
CiAgICAgUG9zaXRpb24gcG9zID0gUG9zaXRpb24obm9kZSwgbm9kZS0+Y2hpbGROb2RlQ291bnQo
KSkudXBzdHJlYW0oKTsKICAgICBib29sIGlzRnVsbHlCZWZvcmVTdGFydCA9IGNvbXBhcmVQb3Np
dGlvbnMocG9zLCBzdGFydCkgPCAwOwotICAgIGJvb2wgaXNGdWxseUFmdGVyRW5kID0gY29tcGFy
ZVBvc2l0aW9ucyhQb3NpdGlvbihub2RlLCAwKSwgZW5kKSA+IDA7CisgICAgYm9vbCBpc0Z1bGx5
QWZ0ZXJFbmQgPSBjb21wYXJlUG9zaXRpb25zKGZpcnN0UG9zaXRpb25Jbk5vZGUobm9kZSksIGVu
ZCkgPiAwOwogCiAgICAgcmV0dXJuIGlzRnVsbHlCZWZvcmVTdGFydCB8fCBpc0Z1bGx5QWZ0ZXJF
bmQ7CiB9CiAKIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OnNwbGl0VGV4dEF0U3RhcnQoY29uc3Qg
UG9zaXRpb24mIHN0YXJ0LCBjb25zdCBQb3NpdGlvbiYgZW5kKQogewotICAgIGludCBlbmRPZmZz
ZXRBZGp1c3RtZW50ID0gc3RhcnQubm9kZSgpID09IGVuZC5ub2RlKCkgPyBzdGFydC5kZXByZWNh
dGVkRWRpdGluZ09mZnNldCgpIDogMDsKKyAgICBBU1NFUlQoc3RhcnQuYW5jaG9yVHlwZSgpID09
IFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3IpOworCisgICAgUG9zaXRpb24gbmV3
RW5kOworICAgIGlmIChlbmQuYW5jaG9yVHlwZSgpID09IFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zm
c2V0SW5BbmNob3IgJiYgc3RhcnQuY29udGFpbmVyTm9kZSgpID09IGVuZC5jb250YWluZXJOb2Rl
KCkpCisgICAgICAgIG5ld0VuZCA9IFBvc2l0aW9uKGVuZC5jb250YWluZXJOb2RlKCksIGVuZC5v
ZmZzZXRJbkNvbnRhaW5lck5vZGUoKSAtIHN0YXJ0Lm9mZnNldEluQ29udGFpbmVyTm9kZSgpLCBQ
b3NpdGlvbjo6UG9zaXRpb25Jc09mZnNldEluQW5jaG9yKTsKKyAgICBlbHNlCisgICAgICAgIG5l
d0VuZCA9IGVuZDsKKwogICAgIFRleHQqIHRleHQgPSBzdGF0aWNfY2FzdDxUZXh0Kj4oc3RhcnQu
bm9kZSgpKTsKLSAgICBzcGxpdFRleHROb2RlKHRleHQsIHN0YXJ0LmRlcHJlY2F0ZWRFZGl0aW5n
T2Zmc2V0KCkpOwotICAgIHVwZGF0ZVN0YXJ0RW5kKFBvc2l0aW9uKHN0YXJ0Lm5vZGUoKSwgMCks
IFBvc2l0aW9uKGVuZC5ub2RlKCksIGVuZC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpIC0gZW5k
T2Zmc2V0QWRqdXN0bWVudCkpOworICAgIHNwbGl0VGV4dE5vZGUodGV4dCwgc3RhcnQub2Zmc2V0
SW5Db250YWluZXJOb2RlKCkpOworICAgIHVwZGF0ZVN0YXJ0RW5kKGZpcnN0UG9zaXRpb25Jbk5v
ZGUoc3RhcnQubm9kZSgpKSwgbmV3RW5kKTsKIH0KIAogdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6
c3BsaXRUZXh0QXRFbmQoY29uc3QgUG9zaXRpb24mIHN0YXJ0LCBjb25zdCBQb3NpdGlvbiYgZW5k
KQogeworICAgIEFTU0VSVChlbmQuYW5jaG9yVHlwZSgpID09IFBvc2l0aW9uOjpQb3NpdGlvbklz
T2Zmc2V0SW5BbmNob3IpOworCisgICAgYm9vbCBzaG91bGRVcGRhdGVTdGFydCA9IHN0YXJ0LmFu
Y2hvclR5cGUoKSA9PSBQb3NpdGlvbjo6UG9zaXRpb25Jc09mZnNldEluQW5jaG9yICYmIHN0YXJ0
LmNvbnRhaW5lck5vZGUoKSA9PSBlbmQuY29udGFpbmVyTm9kZSgpOwogICAgIFRleHQqIHRleHQg
PSBzdGF0aWNfY2FzdDxUZXh0ICo+KGVuZC5ub2RlKCkpOwotICAgIHNwbGl0VGV4dE5vZGUodGV4
dCwgZW5kLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkpOworICAgIHNwbGl0VGV4dE5vZGUodGV4
dCwgZW5kLm9mZnNldEluQ29udGFpbmVyTm9kZSgpKTsKIAogICAgIE5vZGUqIHByZXZOb2RlID0g
dGV4dC0+cHJldmlvdXNTaWJsaW5nKCk7CiAgICAgQVNTRVJUKHByZXZOb2RlKTsKLSAgICBOb2Rl
KiBzdGFydE5vZGUgPSBzdGFydC5ub2RlKCkgPT0gZW5kLm5vZGUoKSA/IHByZXZOb2RlIDogc3Rh
cnQubm9kZSgpOwotICAgIEFTU0VSVChzdGFydE5vZGUpOwotICAgIHVwZGF0ZVN0YXJ0RW5kKFBv
c2l0aW9uKHN0YXJ0Tm9kZSwgc3RhcnQuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSksIFBvc2l0
aW9uKHByZXZOb2RlLCBjYXJldE1heE9mZnNldChwcmV2Tm9kZSkpKTsKKyAgICBQb3NpdGlvbiBu
ZXdTdGFydCA9IHNob3VsZFVwZGF0ZVN0YXJ0ID8gUG9zaXRpb24ocHJldk5vZGUsIHN0YXJ0Lm9m
ZnNldEluQ29udGFpbmVyTm9kZSgpLCBQb3NpdGlvbjo6UG9zaXRpb25Jc09mZnNldEluQW5jaG9y
KSA6IHN0YXJ0OworICAgIHVwZGF0ZVN0YXJ0RW5kKG5ld1N0YXJ0LCBsYXN0UG9zaXRpb25Jbk5v
ZGUocHJldk5vZGUpKTsKIH0KIAogdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6c3BsaXRUZXh0RWxl
bWVudEF0U3RhcnQoY29uc3QgUG9zaXRpb24mIHN0YXJ0LCBjb25zdCBQb3NpdGlvbiYgZW5kKQog
ewotICAgIGludCBlbmRPZmZzZXRBZGp1c3RtZW50ID0gc3RhcnQubm9kZSgpID09IGVuZC5ub2Rl
KCkgPyBzdGFydC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpIDogMDsKKyAgICBBU1NFUlQoc3Rh
cnQuYW5jaG9yVHlwZSgpID09IFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3IpOwor
CisgICAgUG9zaXRpb24gbmV3RW5kOworICAgIGlmIChlbmQuYW5jaG9yVHlwZSgpID09IFBvc2l0
aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3IgJiYgc3RhcnQuY29udGFpbmVyTm9kZSgpID09
IGVuZC5jb250YWluZXJOb2RlKCkpCisgICAgICAgIG5ld0VuZCA9IFBvc2l0aW9uKGVuZC5jb250
YWluZXJOb2RlKCksIGVuZC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSAtIHN0YXJ0Lm9mZnNldElu
Q29udGFpbmVyTm9kZSgpLCBQb3NpdGlvbjo6UG9zaXRpb25Jc09mZnNldEluQW5jaG9yKTsKKyAg
ICBlbHNlCisgICAgICAgIG5ld0VuZCA9IGVuZDsKKwogICAgIFRleHQqIHRleHQgPSBzdGF0aWNf
Y2FzdDxUZXh0Kj4oc3RhcnQubm9kZSgpKTsKICAgICBzcGxpdFRleHROb2RlQ29udGFpbmluZ0Vs
ZW1lbnQodGV4dCwgc3RhcnQuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSk7Ci0gICAgdXBkYXRl
U3RhcnRFbmQoUG9zaXRpb24oc3RhcnQubm9kZSgpLT5wYXJlbnROb2RlKCksIHN0YXJ0Lm5vZGUo
KS0+bm9kZUluZGV4KCkpLCBQb3NpdGlvbihlbmQubm9kZSgpLCBlbmQuZGVwcmVjYXRlZEVkaXRp
bmdPZmZzZXQoKSAtIGVuZE9mZnNldEFkanVzdG1lbnQpKTsKKyAgICB1cGRhdGVTdGFydEVuZChQ
b3NpdGlvbihzdGFydC5ub2RlKCktPnBhcmVudE5vZGUoKSwgc3RhcnQubm9kZSgpLT5ub2RlSW5k
ZXgoKSwgUG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvciksIG5ld0VuZCk7CiB9CiAK
IHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OnNwbGl0VGV4dEVsZW1lbnRBdEVuZChjb25zdCBQb3Np
dGlvbiYgc3RhcnQsIGNvbnN0IFBvc2l0aW9uJiBlbmQpCiB7CisgICAgQVNTRVJUKGVuZC5hbmNo
b3JUeXBlKCkgPT0gUG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvcik7CisKKyAgICBi
b29sIHNob3VsZFVwZGF0ZVN0YXJ0ID0gc3RhcnQuYW5jaG9yVHlwZSgpID09IFBvc2l0aW9uOjpQ
b3NpdGlvbklzT2Zmc2V0SW5BbmNob3IgJiYgc3RhcnQuY29udGFpbmVyTm9kZSgpID09IGVuZC5j
b250YWluZXJOb2RlKCk7CiAgICAgVGV4dCogdGV4dCA9IHN0YXRpY19jYXN0PFRleHQqPihlbmQu
bm9kZSgpKTsKICAgICBzcGxpdFRleHROb2RlQ29udGFpbmluZ0VsZW1lbnQodGV4dCwgZW5kLmRl
cHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkpOwogCiAgICAgTm9kZSogcHJldk5vZGUgPSB0ZXh0LT5w
YXJlbnROb2RlKCktPnByZXZpb3VzU2libGluZygpLT5sYXN0Q2hpbGQoKTsKICAgICBBU1NFUlQo
cHJldk5vZGUpOwotICAgIE5vZGUqIHN0YXJ0Tm9kZSA9IHN0YXJ0Lm5vZGUoKSA9PSBlbmQubm9k
ZSgpID8gcHJldk5vZGUgOiBzdGFydC5ub2RlKCk7Ci0gICAgQVNTRVJUKHN0YXJ0Tm9kZSk7Ci0g
ICAgdXBkYXRlU3RhcnRFbmQoUG9zaXRpb24oc3RhcnROb2RlLCBzdGFydC5kZXByZWNhdGVkRWRp
dGluZ09mZnNldCgpKSwgUG9zaXRpb24ocHJldk5vZGUtPnBhcmVudE5vZGUoKSwgcHJldk5vZGUt
Pm5vZGVJbmRleCgpICsgMSkpOworICAgIFBvc2l0aW9uIG5ld1N0YXJ0ID0gc2hvdWxkVXBkYXRl
U3RhcnQgPyBQb3NpdGlvbihwcmV2Tm9kZSwgc3RhcnQub2Zmc2V0SW5Db250YWluZXJOb2RlKCks
IFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3IpIDogc3RhcnQ7CisgICAgdXBkYXRl
U3RhcnRFbmQobmV3U3RhcnQsIFBvc2l0aW9uKHByZXZOb2RlLT5wYXJlbnROb2RlKCksIHByZXZO
b2RlLT5ub2RlSW5kZXgoKSArIDEsIFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3Ip
KTsKIH0KIAogYm9vbCBBcHBseVN0eWxlQ29tbWFuZDo6c2hvdWxkU3BsaXRUZXh0RWxlbWVudChF
bGVtZW50KiBlbGVtZW50LCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUpCkBAIC0x
NjExLDExICsxNjI4LDExIEBAIGJvb2wgQXBwbHlTdHlsZUNvbW1hbmQ6OnNob3VsZFNwbGl0VGV4
dEUKIAogYm9vbCBBcHBseVN0eWxlQ29tbWFuZDo6aXNWYWxpZENhcmV0UG9zaXRpb25JblRleHRO
b2RlKGNvbnN0IFBvc2l0aW9uJiBwb3NpdGlvbikKIHsKLSAgICBOb2RlKiBub2RlID0gcG9zaXRp
b24ubm9kZSgpOwotICAgIGlmICghbm9kZS0+aXNUZXh0Tm9kZSgpKQorICAgIE5vZGUqIG5vZGUg
PSBwb3NpdGlvbi5jb250YWluZXJOb2RlKCk7CisgICAgaWYgKHBvc2l0aW9uLmFuY2hvclR5cGUo
KSAhPSBQb3NpdGlvbjo6UG9zaXRpb25Jc09mZnNldEluQW5jaG9yIHx8ICFub2RlLT5pc1RleHRO
b2RlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpbnQgb2Zmc2V0SW5UZXh0ID0gcG9z
aXRpb24uZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKTsKLSAgICByZXR1cm4gKG9mZnNldEluVGV4
dCA+IGNhcmV0TWluT2Zmc2V0KG5vZGUpICYmIG9mZnNldEluVGV4dCA8IGNhcmV0TWF4T2Zmc2V0
KG5vZGUpKTsKKyAgICBpbnQgb2Zmc2V0SW5UZXh0ID0gcG9zaXRpb24ub2Zmc2V0SW5Db250YWlu
ZXJOb2RlKCk7CisgICAgcmV0dXJuIG9mZnNldEluVGV4dCA+IGNhcmV0TWluT2Zmc2V0KG5vZGUp
ICYmIG9mZnNldEluVGV4dCA8IGNhcmV0TWF4T2Zmc2V0KG5vZGUpOwogfQogCiBzdGF0aWMgYm9v
bCBhcmVJZGVudGljYWxFbGVtZW50cyhOb2RlICpmaXJzdCwgTm9kZSAqc2Vjb25kKQpAQCAtMTY1
Myw0MiArMTY3MCwzOSBAQCBzdGF0aWMgYm9vbCBhcmVJZGVudGljYWxFbGVtZW50cyhOb2RlICpm
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgQXBwbHlTdHlsZUNvbW1hbmQ6Om1lcmdlU3Rh
cnRXaXRoUHJldmlvdXNJZklkZW50aWNhbChjb25zdCBQb3NpdGlvbiAmc3RhcnQsIGNvbnN0IFBv
c2l0aW9uICZlbmQpCitib29sIEFwcGx5U3R5bGVDb21tYW5kOjptZXJnZVN0YXJ0V2l0aFByZXZp
b3VzSWZJZGVudGljYWwoY29uc3QgUG9zaXRpb24mIHN0YXJ0LCBjb25zdCBQb3NpdGlvbiYgZW5k
KQogewotICAgIE5vZGUgKnN0YXJ0Tm9kZSA9IHN0YXJ0Lm5vZGUoKTsKLSAgICBpbnQgc3RhcnRP
ZmZzZXQgPSBzdGFydC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpOwotCi0gICAgaWYgKGlzQXRv
bWljTm9kZShzdGFydC5ub2RlKCkpKSB7Ci0gICAgICAgIGlmIChzdGFydC5kZXByZWNhdGVkRWRp
dGluZ09mZnNldCgpICE9IDApCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgTm9kZSog
c3RhcnROb2RlID0gc3RhcnQuY29udGFpbmVyTm9kZSgpOworICAgIGludCBzdGFydE9mZnNldCA9
IHN0YXJ0LmNvbXB1dGVPZmZzZXRJbkNvbnRhaW5lck5vZGUoKTsKKyAgICBpZiAoc3RhcnRPZmZz
ZXQpCisgICAgICAgIHJldHVybiBmYWxzZTsKIAorICAgIGlmIChpc0F0b21pY05vZGUoc3RhcnRO
b2RlKSkgewogICAgICAgICAvLyBub3RlOiBwcmlvciBzaWJsaW5ncyBjb3VsZCBiZSB1bnJlbmRl
cmVkIGVsZW1lbnRzLiBpdCdzIHNpbGx5IHRvIG1pc3MgdGhlCiAgICAgICAgIC8vIG1lcmdlIG9w
cG9ydHVuaXR5IGp1c3QgZm9yIHRoYXQuCi0gICAgICAgIGlmIChzdGFydC5ub2RlKCktPnByZXZp
b3VzU2libGluZygpKQorICAgICAgICBpZiAoc3RhcnROb2RlLT5wcmV2aW91c1NpYmxpbmcoKSkK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICBzdGFydE5vZGUgPSBzdGFydC5u
b2RlKCktPnBhcmVudE5vZGUoKTsKKyAgICAgICAgc3RhcnROb2RlID0gc3RhcnROb2RlLT5wYXJl
bnROb2RlKCk7CiAgICAgICAgIHN0YXJ0T2Zmc2V0ID0gMDsKICAgICB9CiAKICAgICBpZiAoIXN0
YXJ0Tm9kZS0+aXNFbGVtZW50Tm9kZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBp
ZiAoc3RhcnRPZmZzZXQgIT0gMCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgTm9kZSAq
cHJldmlvdXNTaWJsaW5nID0gc3RhcnROb2RlLT5wcmV2aW91c1NpYmxpbmcoKTsKKyAgICBOb2Rl
KiBwcmV2aW91c1NpYmxpbmcgPSBzdGFydE5vZGUtPnByZXZpb3VzU2libGluZygpOwogCiAgICAg
aWYgKHByZXZpb3VzU2libGluZyAmJiBhcmVJZGVudGljYWxFbGVtZW50cyhzdGFydE5vZGUsIHBy
ZXZpb3VzU2libGluZykpIHsKLSAgICAgICAgRWxlbWVudCAqcHJldmlvdXNFbGVtZW50ID0gc3Rh
dGljX2Nhc3Q8RWxlbWVudCAqPihwcmV2aW91c1NpYmxpbmcpOwotICAgICAgICBFbGVtZW50ICpl
bGVtZW50ID0gc3RhdGljX2Nhc3Q8RWxlbWVudCAqPihzdGFydE5vZGUpOwotICAgICAgICBOb2Rl
ICpzdGFydENoaWxkID0gZWxlbWVudC0+Zmlyc3RDaGlsZCgpOworICAgICAgICBFbGVtZW50KiBw
cmV2aW91c0VsZW1lbnQgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4ocHJldmlvdXNTaWJsaW5nKTsK
KyAgICAgICAgRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihzdGFydE5v
ZGUpOworICAgICAgICBOb2RlKiBzdGFydENoaWxkID0gZWxlbWVudC0+Zmlyc3RDaGlsZCgpOwog
ICAgICAgICBBU1NFUlQoc3RhcnRDaGlsZCk7CiAgICAgICAgIG1lcmdlSWRlbnRpY2FsRWxlbWVu
dHMocHJldmlvdXNFbGVtZW50LCBlbGVtZW50KTsKIAogICAgICAgICBpbnQgc3RhcnRPZmZzZXRB
ZGp1c3RtZW50ID0gc3RhcnRDaGlsZC0+bm9kZUluZGV4KCk7CiAgICAgICAgIGludCBlbmRPZmZz
ZXRBZGp1c3RtZW50ID0gc3RhcnROb2RlID09IGVuZC5ub2RlKCkgPyBzdGFydE9mZnNldEFkanVz
dG1lbnQgOiAwOwotICAgICAgICB1cGRhdGVTdGFydEVuZChQb3NpdGlvbihzdGFydE5vZGUsIHN0
YXJ0T2Zmc2V0QWRqdXN0bWVudCksIFBvc2l0aW9uKGVuZC5ub2RlKCksIGVuZC5kZXByZWNhdGVk
RWRpdGluZ09mZnNldCgpICsgZW5kT2Zmc2V0QWRqdXN0bWVudCkpOyAKKyAgICAgICAgdXBkYXRl
U3RhcnRFbmQoUG9zaXRpb24oc3RhcnROb2RlLCBzdGFydE9mZnNldEFkanVzdG1lbnQsIFBvc2l0
aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3IpLAorICAgICAgICAgICAgICAgICAgICAgICBQ
b3NpdGlvbihlbmQubm9kZSgpLCBlbmQuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSArIGVuZE9m
ZnNldEFkanVzdG1lbnQsIFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3IpKTsgCiAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApAQCAtMTg4MCw0MSArMTg5NCw0MCBAQCB2b2lk
IEFwcGx5U3R5bGVDb21tYW5kOjphZGRJbmxpbmVTdHlsZUlmCiAgICAgICAgIHN1cnJvdW5kTm9k
ZVJhbmdlV2l0aEVsZW1lbnQoc3RhcnROb2RlLCBlbmROb2RlLCBtX3N0eWxlZElubGluZUVsZW1l
bnQtPmNsb25lRWxlbWVudFdpdGhvdXRDaGlsZHJlbigpKTsKIH0KIAotZmxvYXQgQXBwbHlTdHls
ZUNvbW1hbmQ6OmNvbXB1dGVkRm9udFNpemUoY29uc3QgTm9kZSAqbm9kZSkKK2Zsb2F0IEFwcGx5
U3R5bGVDb21tYW5kOjpjb21wdXRlZEZvbnRTaXplKE5vZGUqIG5vZGUpCiB7CiAgICAgaWYgKCFu
b2RlKQogICAgICAgICByZXR1cm4gMDsKLSAgICAKLSAgICBQb3NpdGlvbiBwb3MoY29uc3RfY2Fz
dDxOb2RlICo+KG5vZGUpLCAwKTsKLSAgICBSZWZQdHI8Q1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0
aW9uPiBjb21wdXRlZFN0eWxlID0gcG9zLmNvbXB1dGVkU3R5bGUoKTsKLSAgICBpZiAoIWNvbXB1
dGVkU3R5bGUpCisKKyAgICBSZWZQdHI8Q1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uPiBzdHls
ZSA9IGNvbXB1dGVkU3R5bGUobm9kZSk7CisgICAgaWYgKCFzdHlsZSkKICAgICAgICAgcmV0dXJu
IDA7CiAKLSAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHZhbHVlID0gc3RhdGljX3BvaW50
ZXJfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oY29tcHV0ZWRTdHlsZS0+Z2V0UHJvcGVydHlDU1NW
YWx1ZShDU1NQcm9wZXJ0eUZvbnRTaXplKSk7CisgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVl
PiB2YWx1ZSA9IHN0YXRpY19wb2ludGVyX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHN0eWxlLT5n
ZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5Rm9udFNpemUpKTsKICAgICBpZiAoIXZhbHVl
KQogICAgICAgICByZXR1cm4gMDsKIAogICAgIHJldHVybiB2YWx1ZS0+Z2V0RmxvYXRWYWx1ZShD
U1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BYKTsKIH0KIAotdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6
am9pbkNoaWxkVGV4dE5vZGVzKE5vZGUgKm5vZGUsIGNvbnN0IFBvc2l0aW9uICZzdGFydCwgY29u
c3QgUG9zaXRpb24gJmVuZCkKK3ZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OmpvaW5DaGlsZFRleHRO
b2RlcyhOb2RlKiBub2RlLCBjb25zdCBQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IFBvc2l0aW9uJiBl
bmQpCiB7CiAgICAgaWYgKCFub2RlKQogICAgICAgICByZXR1cm47CiAKICAgICBQb3NpdGlvbiBu
ZXdTdGFydCA9IHN0YXJ0OwogICAgIFBvc2l0aW9uIG5ld0VuZCA9IGVuZDsKLSAgICAKLSAgICBO
b2RlICpjaGlsZCA9IG5vZGUtPmZpcnN0Q2hpbGQoKTsKKworICAgIE5vZGUqIGNoaWxkID0gbm9k
ZS0+Zmlyc3RDaGlsZCgpOwogICAgIHdoaWxlIChjaGlsZCkgewotICAgICAgICBOb2RlICpuZXh0
ID0gY2hpbGQtPm5leHRTaWJsaW5nKCk7CisgICAgICAgIE5vZGUqIG5leHQgPSBjaGlsZC0+bmV4
dFNpYmxpbmcoKTsKICAgICAgICAgaWYgKGNoaWxkLT5pc1RleHROb2RlKCkgJiYgbmV4dCAmJiBu
ZXh0LT5pc1RleHROb2RlKCkpIHsKLSAgICAgICAgICAgIFRleHQgKmNoaWxkVGV4dCA9IHN0YXRp
Y19jYXN0PFRleHQgKj4oY2hpbGQpOwotICAgICAgICAgICAgVGV4dCAqbmV4dFRleHQgPSBzdGF0
aWNfY2FzdDxUZXh0ICo+KG5leHQpOwotICAgICAgICAgICAgaWYgKG5leHQgPT0gc3RhcnQubm9k
ZSgpKQotICAgICAgICAgICAgICAgIG5ld1N0YXJ0ID0gUG9zaXRpb24oY2hpbGRUZXh0LCBjaGls
ZFRleHQtPmxlbmd0aCgpICsgc3RhcnQuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSk7Ci0gICAg
ICAgICAgICBpZiAobmV4dCA9PSBlbmQubm9kZSgpKQotICAgICAgICAgICAgICAgIG5ld0VuZCA9
IFBvc2l0aW9uKGNoaWxkVGV4dCwgY2hpbGRUZXh0LT5sZW5ndGgoKSArIGVuZC5kZXByZWNhdGVk
RWRpdGluZ09mZnNldCgpKTsKKyAgICAgICAgICAgIFRleHQqIGNoaWxkVGV4dCA9IHN0YXRpY19j
YXN0PFRleHQgKj4oY2hpbGQpOworICAgICAgICAgICAgVGV4dCogbmV4dFRleHQgPSBzdGF0aWNf
Y2FzdDxUZXh0ICo+KG5leHQpOworICAgICAgICAgICAgaWYgKHN0YXJ0LmFuY2hvclR5cGUoKSA9
PSBQb3NpdGlvbjo6UG9zaXRpb25Jc09mZnNldEluQW5jaG9yICYmIG5leHQgPT0gc3RhcnQuY29u
dGFpbmVyTm9kZSgpKQorICAgICAgICAgICAgICAgIG5ld1N0YXJ0ID0gUG9zaXRpb24oY2hpbGRU
ZXh0LCBjaGlsZFRleHQtPmxlbmd0aCgpICsgc3RhcnQub2Zmc2V0SW5Db250YWluZXJOb2RlKCks
IFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3IpOworICAgICAgICAgICAgaWYgKGVu
ZC5hbmNob3JUeXBlKCkgPT0gUG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvciAmJiBu
ZXh0ID09IGVuZC5jb250YWluZXJOb2RlKCkpCisgICAgICAgICAgICAgICAgbmV3RW5kID0gUG9z
aXRpb24oY2hpbGRUZXh0LCBjaGlsZFRleHQtPmxlbmd0aCgpICsgZW5kLm9mZnNldEluQ29udGFp
bmVyTm9kZSgpLCBQb3NpdGlvbjo6UG9zaXRpb25Jc09mZnNldEluQW5jaG9yKTsKICAgICAgICAg
ICAgIFN0cmluZyB0ZXh0VG9Nb3ZlID0gbmV4dFRleHQtPmRhdGEoKTsKICAgICAgICAgICAgIGlu
c2VydFRleHRJbnRvTm9kZShjaGlsZFRleHQsIGNoaWxkVGV4dC0+bGVuZ3RoKCksIHRleHRUb01v
dmUpOwogICAgICAgICAgICAgcmVtb3ZlTm9kZShuZXh0KTsKSW5kZXg6IFdlYkNvcmUvZWRpdGlu
Zy9BcHBseVN0eWxlQ29tbWFuZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9BcHBs
eVN0eWxlQ29tbWFuZC5oCShyZXZpc2lvbiA3NTMwNCkKKysrIFdlYkNvcmUvZWRpdGluZy9BcHBs
eVN0eWxlQ29tbWFuZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDgsNyArMTA4LDcgQEAgcHJpdmF0
ZToKICAgICB2b2lkIGNsZWFudXBVbnN0eWxlZEFwcGxlU3R5bGVTcGFucyhOb2RlKiBkdW1teVNw
YW5BbmNlc3Rvcik7CiAKICAgICB2b2lkIHN1cnJvdW5kTm9kZVJhbmdlV2l0aEVsZW1lbnQoUGFz
c1JlZlB0cjxOb2RlPiBzdGFydCwgUGFzc1JlZlB0cjxOb2RlPiBlbmQsIFBhc3NSZWZQdHI8RWxl
bWVudD4pOwotICAgIGZsb2F0IGNvbXB1dGVkRm9udFNpemUoY29uc3QgTm9kZSopOworICAgIGZs
b2F0IGNvbXB1dGVkRm9udFNpemUoTm9kZSopOwogICAgIHZvaWQgam9pbkNoaWxkVGV4dE5vZGVz
KE5vZGUqLCBjb25zdCBQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IFBvc2l0aW9uJiBlbmQpOwogCiAg
ICAgSFRNTEVsZW1lbnQqIHNwbGl0QW5jZXN0b3JzV2l0aFVuaWNvZGVCaWRpKE5vZGUqLCBib29s
IGJlZm9yZSwgaW50IGFsbG93ZWREaXJlY3Rpb24pOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>78618</attachid>
            <date>2011-01-11 16:18:12 -0800</date>
            <delta_ts>2011-01-11 16:54:27 -0800</delta_ts>
            <desc>cleanup</desc>
            <filename>bug-52250-20110111161811.patch</filename>
            <type>text/plain</type>
            <size>17612</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc1NTY1KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzQgQEAKKzIwMTEtMDEtMTEgIFJ5b3N1a2Ug
Tml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgU3RvcCBpbnN0YW50aWF0aW5nIGxlZ2FjeSBlZGl0aW5nIHBvc2l0
aW9ucyBpbiBBcHBseUJsb2NrRWxlbWVudENvbW1hbmQgYW5kIEFwcGx5U3R5bGVDb21tYW5kCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MjI1MAorCisg
ICAgICAgIFJlbW92ZWQgaW5zdGFudGlhdGlvbiBvZiBsZWdhY3kgZWRpdGluZyBwb3NpdGlvbnMu
IENhbGxzIHRvIFBvc2l0aW9uOjpQb3NpdGlvbiBhcmUgcmVwbGFjZWQKKyAgICAgICAgYnkgY2Fs
bHMgdG8gUG9zaXRpb24ncyBjb252ZW5pZW5jZSBmdW5jdGlvbnMuCisKKyAgICAgICAgTm8gdGVz
dHMgYXJlIGFkZGVkIHNpbmNlIHRoaXMgaXMgYSBjbGVhbnVwLgorCisgICAgICAgICogZWRpdGlu
Zy9BcHBseUJsb2NrRWxlbWVudENvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlC
bG9ja0VsZW1lbnRDb21tYW5kOjpmb3JtYXRTZWxlY3Rpb24pOgorICAgICAgICAqIGVkaXRpbmcv
QXBwbHlTdHlsZUNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1h
bmQ6OmFwcGx5QmxvY2tTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFu
ZDo6Zml4UmFuZ2VBbmRBcHBseUlubGluZVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5
U3R5bGVDb21tYW5kOjpoaWdoZXN0QW5jZXN0b3JXaXRoQ29uZmxpY3RpbmdJbmxpbmVTdHlsZSk6
CisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6cmVtb3ZlSW5saW5lU3R5bGUp
OgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1hbmQ6Om5vZGVGdWxseVNlbGVjdGVk
KToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5kOjpub2RlRnVsbHlVbnNlbGVj
dGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5kOjpzcGxpdFRleHRBdFN0
YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5kOjpzcGxpdFRleHRBdEVu
ZCk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6c3BsaXRUZXh0RWxlbWVu
dEF0U3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1hbmQ6OnNwbGl0VGV4
dEVsZW1lbnRBdEVuZCk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6aXNW
YWxpZENhcmV0UG9zaXRpb25JblRleHROb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5
bGVDb21tYW5kOjptZXJnZVN0YXJ0V2l0aFByZXZpb3VzSWZJZGVudGljYWwpOgorICAgICAgICAo
V2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1hbmQ6OmNvbXB1dGVkRm9udFNpemUpOgorICAgICAgICAo
V2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1hbmQ6OmpvaW5DaGlsZFRleHROb2Rlcyk6CisgICAgICAg
ICogZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5oOgorCiAyMDExLTAxLTExICBKYW1lcyBTaW1v
bnNlbiAgPHNpbW9uamFtQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBFcmlj
IFNlaWRlbC4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlCbG9ja0VsZW1lbnRD
b21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGx5Qmxv
Y2tFbGVtZW50Q29tbWFuZC5jcHAJKHJldmlzaW9uIDc1NTY1KQorKysgU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9BcHBseUJsb2NrRWxlbWVudENvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MDIsNyArMTAyLDcgQEAgdm9pZCBBcHBseUJsb2NrRWxlbWVudENvbW1hbmQ6OmZvcm1hdFNlbAog
ICAgICAgICBpbnNlcnROb2RlQXQoYmxvY2txdW90ZSwgc3RhcnQpOwogICAgICAgICBSZWZQdHI8
RWxlbWVudD4gcGxhY2Vob2xkZXIgPSBjcmVhdGVCcmVha0VsZW1lbnQoZG9jdW1lbnQoKSk7CiAg
ICAgICAgIGFwcGVuZE5vZGUocGxhY2Vob2xkZXIsIGJsb2NrcXVvdGUpOwotICAgICAgICBzZXRF
bmRpbmdTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbihQb3NpdGlvbihwbGFjZWhvbGRlci5nZXQo
KSwgMCksIERPV05TVFJFQU0pKTsKKyAgICAgICAgc2V0RW5kaW5nU2VsZWN0aW9uKFZpc2libGVT
ZWxlY3Rpb24ocG9zaXRpb25CZWZvcmVOb2RlKHBsYWNlaG9sZGVyLmdldCgpKSwgRE9XTlNUUkVB
TSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcAkocmV2aXNpb24gNzU1NjUpCisrKyBTb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTYzLDE3ICs1NjMsMTYgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlCbG9ja1N0eWxl
KAogCiAgICAgaWYgKHZpc2libGVTdGFydC5pc051bGwoKSB8fCB2aXNpYmxlU3RhcnQuaXNPcnBo
YW4oKSB8fCB2aXNpYmxlRW5kLmlzTnVsbCgpIHx8IHZpc2libGVFbmQuaXNPcnBoYW4oKSkKICAg
ICAgICAgcmV0dXJuOwotICAgIAorCiAgICAgLy8gU2F2ZSBhbmQgcmVzdG9yZSB0aGUgc2VsZWN0
aW9uIGVuZHBvaW50cyB1c2luZyB0aGVpciBpbmRpY2VzIGluIHRoZSBkb2N1bWVudCwgc2luY2UK
ICAgICAvLyBhZGRCbG9ja1N0eWxlSWZOZWVkZWQgbWF5IG1vdmVQYXJhZ3JhcGhzLCB3aGljaCBj
YW4gcmVtb3ZlIHRoZXNlIGVuZHBvaW50cy4KICAgICAvLyBDYWxjdWxhdGUgc3RhcnQgYW5kIGVu
ZCBpbmRpY2VzIGZyb20gdGhlIHN0YXJ0IG9mIHRoZSB0cmVlIHRoYXQgdGhleSdyZSBpbi4KICAg
ICBOb2RlKiBzY29wZSA9IGhpZ2hlc3RBbmNlc3Rvcih2aXNpYmxlU3RhcnQuZGVlcEVxdWl2YWxl
bnQoKS5ub2RlKCkpOwotICAgIFBvc2l0aW9uIHJhbmdlU3RhcnQoc2NvcGUsIDApOwotICAgIFJl
ZlB0cjxSYW5nZT4gc3RhcnRSYW5nZSA9IFJhbmdlOjpjcmVhdGUoZG9jdW1lbnQoKSwgcmFuZ2VT
dGFydCwgcmFuZ2VDb21wbGlhbnRFcXVpdmFsZW50KHZpc2libGVTdGFydC5kZWVwRXF1aXZhbGVu
dCgpKSk7Ci0gICAgUmVmUHRyPFJhbmdlPiBlbmRSYW5nZSA9IFJhbmdlOjpjcmVhdGUoZG9jdW1l
bnQoKSwgcmFuZ2VTdGFydCwgcmFuZ2VDb21wbGlhbnRFcXVpdmFsZW50KHZpc2libGVFbmQuZGVl
cEVxdWl2YWxlbnQoKSkpOworICAgIFJlZlB0cjxSYW5nZT4gc3RhcnRSYW5nZSA9IFJhbmdlOjpj
cmVhdGUoZG9jdW1lbnQoKSwgZmlyc3RQb3NpdGlvbkluTm9kZShzY29wZSksIHJhbmdlQ29tcGxp
YW50RXF1aXZhbGVudCh2aXNpYmxlU3RhcnQuZGVlcEVxdWl2YWxlbnQoKSkpOworICAgIFJlZlB0
cjxSYW5nZT4gZW5kUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKGRvY3VtZW50KCksIGZpcnN0UG9zaXRp
b25Jbk5vZGUoc2NvcGUpLCByYW5nZUNvbXBsaWFudEVxdWl2YWxlbnQodmlzaWJsZUVuZC5kZWVw
RXF1aXZhbGVudCgpKSk7CiAgICAgaW50IHN0YXJ0SW5kZXggPSBUZXh0SXRlcmF0b3I6OnJhbmdl
TGVuZ3RoKHN0YXJ0UmFuZ2UuZ2V0KCksIHRydWUpOwogICAgIGludCBlbmRJbmRleCA9IFRleHRJ
dGVyYXRvcjo6cmFuZ2VMZW5ndGgoZW5kUmFuZ2UuZ2V0KCksIHRydWUpOwotICAgIAorCiAgICAg
VmlzaWJsZVBvc2l0aW9uIHBhcmFncmFwaFN0YXJ0KHN0YXJ0T2ZQYXJhZ3JhcGgodmlzaWJsZVN0
YXJ0KSk7CiAgICAgVmlzaWJsZVBvc2l0aW9uIG5leHRQYXJhZ3JhcGhTdGFydChlbmRPZlBhcmFn
cmFwaChwYXJhZ3JhcGhTdGFydCkubmV4dCgpKTsKICAgICBWaXNpYmxlUG9zaXRpb24gYmV5b25k
RW5kKGVuZE9mUGFyYWdyYXBoKHZpc2libGVFbmQpLm5leHQoKSk7CkBAIC05ODIsNyArOTgxLDcg
QEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6Zml4UmFuZ2VBbmRBcHBseQogCiAgICAgaWYgKHN0
YXJ0LmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkgPj0gY2FyZXRNYXhPZmZzZXQoc3RhcnQubm9k
ZSgpKSkgewogICAgICAgICBzdGFydE5vZGUgPSBzdGFydE5vZGUtPnRyYXZlcnNlTmV4dE5vZGUo
KTsKLSAgICAgICAgaWYgKCFzdGFydE5vZGUgfHwgY29tcGFyZVBvc2l0aW9ucyhlbmQsIFBvc2l0
aW9uKHN0YXJ0Tm9kZSwgMCkpIDwgMCkKKyAgICAgICAgaWYgKCFzdGFydE5vZGUgfHwgY29tcGFy
ZVBvc2l0aW9ucyhlbmQsIGZpcnN0UG9zaXRpb25Jbk5vZGUoc3RhcnROb2RlKSkgPCAwKQogICAg
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMTMzMyw3ICsxMzMyLDcgQEAgSFRNTEVsZW1l
bnQqIEFwcGx5U3R5bGVDb21tYW5kOjpoaWdoZXN0QQogICAgICAgICByZXR1cm4gMDsKIAogICAg
IEhUTUxFbGVtZW50KiByZXN1bHQgPSAwOwotICAgIE5vZGUqIHVuc3BsaXR0YWJsZUVsZW1lbnQg
PSB1bnNwbGl0dGFibGVFbGVtZW50Rm9yUG9zaXRpb24oUG9zaXRpb24obm9kZSwgMCkpOworICAg
IE5vZGUqIHVuc3BsaXR0YWJsZUVsZW1lbnQgPSB1bnNwbGl0dGFibGVFbGVtZW50Rm9yUG9zaXRp
b24oZmlyc3RQb3NpdGlvbkluTm9kZShub2RlKSk7CiAKICAgICBmb3IgKE5vZGUgKm4gPSBub2Rl
OyBuOyBuID0gbi0+cGFyZW50Tm9kZSgpKSB7CiAgICAgICAgIGlmIChuLT5pc0hUTUxFbGVtZW50
KCkgJiYgc2hvdWxkUmVtb3ZlSW5saW5lU3R5bGVGcm9tRWxlbWVudChzdHlsZSwgc3RhdGljX2Nh
c3Q8SFRNTEVsZW1lbnQqPihuKSkpCkBAIC0xNTE2LDE0ICsxNTE1LDE0IEBAIHZvaWQgQXBwbHlT
dHlsZUNvbW1hbmQ6OnJlbW92ZUlubGluZVN0eWwKICAgICAgICAgICAgICAgICAgICAgLy8gU2lu
Y2UgZWxlbSBtdXN0IGhhdmUgYmVlbiBmdWxseSBzZWxlY3RlZCwgYW5kIGl0IGlzIGF0IHRoZSBz
dGFydAogICAgICAgICAgICAgICAgICAgICAvLyBvZiB0aGUgc2VsZWN0aW9uLCBpdCBpcyBjbGVh
ciB3ZSBjYW4gc2V0IHRoZSBuZXcgcyBvZmZzZXQgdG8gMC4KICAgICAgICAgICAgICAgICAgICAg
QVNTRVJUKHMuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSA8PSBjYXJldE1pbk9mZnNldChzLm5v
ZGUoKSkpOwotICAgICAgICAgICAgICAgICAgICBzID0gUG9zaXRpb24obmV4dCwgMCk7CisgICAg
ICAgICAgICAgICAgICAgIHMgPSBmaXJzdFBvc2l0aW9uSW5Ob2RlKG5leHQuZ2V0KCkpOwogICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBpZiAoZS5ub2RlKCkgPT0gZWxlbSkgewog
ICAgICAgICAgICAgICAgICAgICAvLyBTaW5jZSBlbGVtIG11c3QgaGF2ZSBiZWVuIGZ1bGx5IHNl
bGVjdGVkLCBhbmQgaXQgaXMgYXQgdGhlIGVuZAogICAgICAgICAgICAgICAgICAgICAvLyBvZiB0
aGUgc2VsZWN0aW9uLCBpdCBpcyBjbGVhciB3ZSBjYW4gc2V0IHRoZSBuZXcgZSBvZmZzZXQgdG8K
ICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIG1heCByYW5nZSBvZmZzZXQgb2YgcHJldi4KICAg
ICAgICAgICAgICAgICAgICAgQVNTRVJUKGUuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSA+PSBs
YXN0T2Zmc2V0Rm9yRWRpdGluZyhlLm5vZGUoKSkpOwotICAgICAgICAgICAgICAgICAgICBlID0g
UG9zaXRpb24ocHJldiwgbGFzdE9mZnNldEZvckVkaXRpbmcocHJldi5nZXQoKSkpOworICAgICAg
ICAgICAgICAgICAgICBlID0gbGFzdFBvc2l0aW9uSW5Ob2RlKHByZXYuZ2V0KCkpOwogICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIH0KIApAQCAtMTU0NSw4ICsxNTQ0LDcgQEAgYm9vbCBB
cHBseVN0eWxlQ29tbWFuZDo6bm9kZUZ1bGx5U2VsZWN0ZQogICAgIEFTU0VSVChub2RlKTsKICAg
ICBBU1NFUlQobm9kZS0+aXNFbGVtZW50Tm9kZSgpKTsKIAotICAgIFBvc2l0aW9uIHBvcyA9IFBv
c2l0aW9uKG5vZGUsIG5vZGUtPmNoaWxkTm9kZUNvdW50KCkpLnVwc3RyZWFtKCk7Ci0gICAgcmV0
dXJuIGNvbXBhcmVQb3NpdGlvbnMoUG9zaXRpb24obm9kZSwgMCksIHN0YXJ0KSA+PSAwICYmIGNv
bXBhcmVQb3NpdGlvbnMocG9zLCBlbmQpIDw9IDA7CisgICAgcmV0dXJuIGNvbXBhcmVQb3NpdGlv
bnMoZmlyc3RQb3NpdGlvbkluTm9kZShub2RlKSwgc3RhcnQpID49IDAgJiYgY29tcGFyZVBvc2l0
aW9ucyhsYXN0UG9zaXRpb25Jbk5vZGUobm9kZSkudXBzdHJlYW0oKSwgZW5kKSA8PSAwOwogfQog
CiBib29sIEFwcGx5U3R5bGVDb21tYW5kOjpub2RlRnVsbHlVbnNlbGVjdGVkKE5vZGUgKm5vZGUs
IGNvbnN0IFBvc2l0aW9uICZzdGFydCwgY29uc3QgUG9zaXRpb24gJmVuZCkgY29uc3QKQEAgLTE1
NTYsNDkgKzE1NTQsNjcgQEAgYm9vbCBBcHBseVN0eWxlQ29tbWFuZDo6bm9kZUZ1bGx5VW5zZWxl
YwogCiAgICAgUG9zaXRpb24gcG9zID0gUG9zaXRpb24obm9kZSwgbm9kZS0+Y2hpbGROb2RlQ291
bnQoKSkudXBzdHJlYW0oKTsKICAgICBib29sIGlzRnVsbHlCZWZvcmVTdGFydCA9IGNvbXBhcmVQ
b3NpdGlvbnMocG9zLCBzdGFydCkgPCAwOwotICAgIGJvb2wgaXNGdWxseUFmdGVyRW5kID0gY29t
cGFyZVBvc2l0aW9ucyhQb3NpdGlvbihub2RlLCAwKSwgZW5kKSA+IDA7CisgICAgYm9vbCBpc0Z1
bGx5QWZ0ZXJFbmQgPSBjb21wYXJlUG9zaXRpb25zKGZpcnN0UG9zaXRpb25Jbk5vZGUobm9kZSks
IGVuZCkgPiAwOwogCiAgICAgcmV0dXJuIGlzRnVsbHlCZWZvcmVTdGFydCB8fCBpc0Z1bGx5QWZ0
ZXJFbmQ7CiB9CiAKIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OnNwbGl0VGV4dEF0U3RhcnQoY29u
c3QgUG9zaXRpb24mIHN0YXJ0LCBjb25zdCBQb3NpdGlvbiYgZW5kKQogewotICAgIGludCBlbmRP
ZmZzZXRBZGp1c3RtZW50ID0gc3RhcnQubm9kZSgpID09IGVuZC5ub2RlKCkgPyBzdGFydC5kZXBy
ZWNhdGVkRWRpdGluZ09mZnNldCgpIDogMDsKKyAgICBBU1NFUlQoc3RhcnQuYW5jaG9yVHlwZSgp
ID09IFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3IpOworCisgICAgUG9zaXRpb24g
bmV3RW5kOworICAgIGlmIChlbmQuYW5jaG9yVHlwZSgpID09IFBvc2l0aW9uOjpQb3NpdGlvbklz
T2Zmc2V0SW5BbmNob3IgJiYgc3RhcnQuY29udGFpbmVyTm9kZSgpID09IGVuZC5jb250YWluZXJO
b2RlKCkpCisgICAgICAgIG5ld0VuZCA9IFBvc2l0aW9uKGVuZC5jb250YWluZXJOb2RlKCksIGVu
ZC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSAtIHN0YXJ0Lm9mZnNldEluQ29udGFpbmVyTm9kZSgp
LCBQb3NpdGlvbjo6UG9zaXRpb25Jc09mZnNldEluQW5jaG9yKTsKKyAgICBlbHNlCisgICAgICAg
IG5ld0VuZCA9IGVuZDsKKwogICAgIFRleHQqIHRleHQgPSBzdGF0aWNfY2FzdDxUZXh0Kj4oc3Rh
cnQubm9kZSgpKTsKLSAgICBzcGxpdFRleHROb2RlKHRleHQsIHN0YXJ0LmRlcHJlY2F0ZWRFZGl0
aW5nT2Zmc2V0KCkpOwotICAgIHVwZGF0ZVN0YXJ0RW5kKFBvc2l0aW9uKHN0YXJ0Lm5vZGUoKSwg
MCksIFBvc2l0aW9uKGVuZC5ub2RlKCksIGVuZC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpIC0g
ZW5kT2Zmc2V0QWRqdXN0bWVudCkpOworICAgIHNwbGl0VGV4dE5vZGUodGV4dCwgc3RhcnQub2Zm
c2V0SW5Db250YWluZXJOb2RlKCkpOworICAgIHVwZGF0ZVN0YXJ0RW5kKGZpcnN0UG9zaXRpb25J
bk5vZGUoc3RhcnQubm9kZSgpKSwgbmV3RW5kKTsKIH0KIAogdm9pZCBBcHBseVN0eWxlQ29tbWFu
ZDo6c3BsaXRUZXh0QXRFbmQoY29uc3QgUG9zaXRpb24mIHN0YXJ0LCBjb25zdCBQb3NpdGlvbiYg
ZW5kKQogeworICAgIEFTU0VSVChlbmQuYW5jaG9yVHlwZSgpID09IFBvc2l0aW9uOjpQb3NpdGlv
bklzT2Zmc2V0SW5BbmNob3IpOworCisgICAgYm9vbCBzaG91bGRVcGRhdGVTdGFydCA9IHN0YXJ0
LmFuY2hvclR5cGUoKSA9PSBQb3NpdGlvbjo6UG9zaXRpb25Jc09mZnNldEluQW5jaG9yICYmIHN0
YXJ0LmNvbnRhaW5lck5vZGUoKSA9PSBlbmQuY29udGFpbmVyTm9kZSgpOwogICAgIFRleHQqIHRl
eHQgPSBzdGF0aWNfY2FzdDxUZXh0ICo+KGVuZC5ub2RlKCkpOwotICAgIHNwbGl0VGV4dE5vZGUo
dGV4dCwgZW5kLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkpOworICAgIHNwbGl0VGV4dE5vZGUo
dGV4dCwgZW5kLm9mZnNldEluQ29udGFpbmVyTm9kZSgpKTsKIAogICAgIE5vZGUqIHByZXZOb2Rl
ID0gdGV4dC0+cHJldmlvdXNTaWJsaW5nKCk7CiAgICAgQVNTRVJUKHByZXZOb2RlKTsKLSAgICBO
b2RlKiBzdGFydE5vZGUgPSBzdGFydC5ub2RlKCkgPT0gZW5kLm5vZGUoKSA/IHByZXZOb2RlIDog
c3RhcnQubm9kZSgpOwotICAgIEFTU0VSVChzdGFydE5vZGUpOwotICAgIHVwZGF0ZVN0YXJ0RW5k
KFBvc2l0aW9uKHN0YXJ0Tm9kZSwgc3RhcnQuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSksIFBv
c2l0aW9uKHByZXZOb2RlLCBjYXJldE1heE9mZnNldChwcmV2Tm9kZSkpKTsKKyAgICBQb3NpdGlv
biBuZXdTdGFydCA9IHNob3VsZFVwZGF0ZVN0YXJ0ID8gUG9zaXRpb24ocHJldk5vZGUsIHN0YXJ0
Lm9mZnNldEluQ29udGFpbmVyTm9kZSgpLCBQb3NpdGlvbjo6UG9zaXRpb25Jc09mZnNldEluQW5j
aG9yKSA6IHN0YXJ0OworICAgIHVwZGF0ZVN0YXJ0RW5kKG5ld1N0YXJ0LCBsYXN0UG9zaXRpb25J
bk5vZGUocHJldk5vZGUpKTsKIH0KIAogdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6c3BsaXRUZXh0
RWxlbWVudEF0U3RhcnQoY29uc3QgUG9zaXRpb24mIHN0YXJ0LCBjb25zdCBQb3NpdGlvbiYgZW5k
KQogewotICAgIGludCBlbmRPZmZzZXRBZGp1c3RtZW50ID0gc3RhcnQubm9kZSgpID09IGVuZC5u
b2RlKCkgPyBzdGFydC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpIDogMDsKKyAgICBBU1NFUlQo
c3RhcnQuYW5jaG9yVHlwZSgpID09IFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3Ip
OworCisgICAgUG9zaXRpb24gbmV3RW5kOworICAgIGlmIChlbmQuYW5jaG9yVHlwZSgpID09IFBv
c2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3IgJiYgc3RhcnQuY29udGFpbmVyTm9kZSgp
ID09IGVuZC5jb250YWluZXJOb2RlKCkpCisgICAgICAgIG5ld0VuZCA9IFBvc2l0aW9uKGVuZC5j
b250YWluZXJOb2RlKCksIGVuZC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSAtIHN0YXJ0Lm9mZnNl
dEluQ29udGFpbmVyTm9kZSgpLCBQb3NpdGlvbjo6UG9zaXRpb25Jc09mZnNldEluQW5jaG9yKTsK
KyAgICBlbHNlCisgICAgICAgIG5ld0VuZCA9IGVuZDsKKwogICAgIFRleHQqIHRleHQgPSBzdGF0
aWNfY2FzdDxUZXh0Kj4oc3RhcnQubm9kZSgpKTsKICAgICBzcGxpdFRleHROb2RlQ29udGFpbmlu
Z0VsZW1lbnQodGV4dCwgc3RhcnQuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSk7Ci0gICAgdXBk
YXRlU3RhcnRFbmQoUG9zaXRpb24oc3RhcnQubm9kZSgpLT5wYXJlbnROb2RlKCksIHN0YXJ0Lm5v
ZGUoKS0+bm9kZUluZGV4KCkpLCBQb3NpdGlvbihlbmQubm9kZSgpLCBlbmQuZGVwcmVjYXRlZEVk
aXRpbmdPZmZzZXQoKSAtIGVuZE9mZnNldEFkanVzdG1lbnQpKTsKKyAgICB1cGRhdGVTdGFydEVu
ZChQb3NpdGlvbihzdGFydC5ub2RlKCktPnBhcmVudE5vZGUoKSwgc3RhcnQubm9kZSgpLT5ub2Rl
SW5kZXgoKSwgUG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvciksIG5ld0VuZCk7CiB9
CiAKIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OnNwbGl0VGV4dEVsZW1lbnRBdEVuZChjb25zdCBQ
b3NpdGlvbiYgc3RhcnQsIGNvbnN0IFBvc2l0aW9uJiBlbmQpCiB7CisgICAgQVNTRVJUKGVuZC5h
bmNob3JUeXBlKCkgPT0gUG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvcik7CisKKyAg
ICBib29sIHNob3VsZFVwZGF0ZVN0YXJ0ID0gc3RhcnQuYW5jaG9yVHlwZSgpID09IFBvc2l0aW9u
OjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3IgJiYgc3RhcnQuY29udGFpbmVyTm9kZSgpID09IGVu
ZC5jb250YWluZXJOb2RlKCk7CiAgICAgVGV4dCogdGV4dCA9IHN0YXRpY19jYXN0PFRleHQqPihl
bmQubm9kZSgpKTsKICAgICBzcGxpdFRleHROb2RlQ29udGFpbmluZ0VsZW1lbnQodGV4dCwgZW5k
LmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkpOwogCiAgICAgTm9kZSogcHJldk5vZGUgPSB0ZXh0
LT5wYXJlbnROb2RlKCktPnByZXZpb3VzU2libGluZygpLT5sYXN0Q2hpbGQoKTsKICAgICBBU1NF
UlQocHJldk5vZGUpOwotICAgIE5vZGUqIHN0YXJ0Tm9kZSA9IHN0YXJ0Lm5vZGUoKSA9PSBlbmQu
bm9kZSgpID8gcHJldk5vZGUgOiBzdGFydC5ub2RlKCk7Ci0gICAgQVNTRVJUKHN0YXJ0Tm9kZSk7
Ci0gICAgdXBkYXRlU3RhcnRFbmQoUG9zaXRpb24oc3RhcnROb2RlLCBzdGFydC5kZXByZWNhdGVk
RWRpdGluZ09mZnNldCgpKSwgUG9zaXRpb24ocHJldk5vZGUtPnBhcmVudE5vZGUoKSwgcHJldk5v
ZGUtPm5vZGVJbmRleCgpICsgMSkpOworICAgIFBvc2l0aW9uIG5ld1N0YXJ0ID0gc2hvdWxkVXBk
YXRlU3RhcnQgPyBQb3NpdGlvbihwcmV2Tm9kZSwgc3RhcnQub2Zmc2V0SW5Db250YWluZXJOb2Rl
KCksIFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3IpIDogc3RhcnQ7CisgICAgdXBk
YXRlU3RhcnRFbmQobmV3U3RhcnQsIFBvc2l0aW9uKHByZXZOb2RlLT5wYXJlbnROb2RlKCksIHBy
ZXZOb2RlLT5ub2RlSW5kZXgoKSArIDEsIFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNo
b3IpKTsKIH0KIAogYm9vbCBBcHBseVN0eWxlQ29tbWFuZDo6c2hvdWxkU3BsaXRUZXh0RWxlbWVu
dChFbGVtZW50KiBlbGVtZW50LCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUpCkBA
IC0xNjExLDExICsxNjI3LDExIEBAIGJvb2wgQXBwbHlTdHlsZUNvbW1hbmQ6OnNob3VsZFNwbGl0
VGV4dEUKIAogYm9vbCBBcHBseVN0eWxlQ29tbWFuZDo6aXNWYWxpZENhcmV0UG9zaXRpb25JblRl
eHROb2RlKGNvbnN0IFBvc2l0aW9uJiBwb3NpdGlvbikKIHsKLSAgICBOb2RlKiBub2RlID0gcG9z
aXRpb24ubm9kZSgpOwotICAgIGlmICghbm9kZS0+aXNUZXh0Tm9kZSgpKQorICAgIE5vZGUqIG5v
ZGUgPSBwb3NpdGlvbi5jb250YWluZXJOb2RlKCk7CisgICAgaWYgKHBvc2l0aW9uLmFuY2hvclR5
cGUoKSAhPSBQb3NpdGlvbjo6UG9zaXRpb25Jc09mZnNldEluQW5jaG9yIHx8ICFub2RlLT5pc1Rl
eHROb2RlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpbnQgb2Zmc2V0SW5UZXh0ID0g
cG9zaXRpb24uZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKTsKLSAgICByZXR1cm4gKG9mZnNldElu
VGV4dCA+IGNhcmV0TWluT2Zmc2V0KG5vZGUpICYmIG9mZnNldEluVGV4dCA8IGNhcmV0TWF4T2Zm
c2V0KG5vZGUpKTsKKyAgICBpbnQgb2Zmc2V0SW5UZXh0ID0gcG9zaXRpb24ub2Zmc2V0SW5Db250
YWluZXJOb2RlKCk7CisgICAgcmV0dXJuIG9mZnNldEluVGV4dCA+IGNhcmV0TWluT2Zmc2V0KG5v
ZGUpICYmIG9mZnNldEluVGV4dCA8IGNhcmV0TWF4T2Zmc2V0KG5vZGUpOwogfQogCiBzdGF0aWMg
Ym9vbCBhcmVJZGVudGljYWxFbGVtZW50cyhOb2RlICpmaXJzdCwgTm9kZSAqc2Vjb25kKQpAQCAt
MTY1Myw0MiArMTY2OSwzOSBAQCBzdGF0aWMgYm9vbCBhcmVJZGVudGljYWxFbGVtZW50cyhOb2Rl
ICpmCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgQXBwbHlTdHlsZUNvbW1hbmQ6Om1lcmdl
U3RhcnRXaXRoUHJldmlvdXNJZklkZW50aWNhbChjb25zdCBQb3NpdGlvbiAmc3RhcnQsIGNvbnN0
IFBvc2l0aW9uICZlbmQpCitib29sIEFwcGx5U3R5bGVDb21tYW5kOjptZXJnZVN0YXJ0V2l0aFBy
ZXZpb3VzSWZJZGVudGljYWwoY29uc3QgUG9zaXRpb24mIHN0YXJ0LCBjb25zdCBQb3NpdGlvbiYg
ZW5kKQogewotICAgIE5vZGUgKnN0YXJ0Tm9kZSA9IHN0YXJ0Lm5vZGUoKTsKLSAgICBpbnQgc3Rh
cnRPZmZzZXQgPSBzdGFydC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpOwotCi0gICAgaWYgKGlz
QXRvbWljTm9kZShzdGFydC5ub2RlKCkpKSB7Ci0gICAgICAgIGlmIChzdGFydC5kZXByZWNhdGVk
RWRpdGluZ09mZnNldCgpICE9IDApCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgTm9k
ZSogc3RhcnROb2RlID0gc3RhcnQuY29udGFpbmVyTm9kZSgpOworICAgIGludCBzdGFydE9mZnNl
dCA9IHN0YXJ0LmNvbXB1dGVPZmZzZXRJbkNvbnRhaW5lck5vZGUoKTsKKyAgICBpZiAoc3RhcnRP
ZmZzZXQpCisgICAgICAgIHJldHVybiBmYWxzZTsKIAorICAgIGlmIChpc0F0b21pY05vZGUoc3Rh
cnROb2RlKSkgewogICAgICAgICAvLyBub3RlOiBwcmlvciBzaWJsaW5ncyBjb3VsZCBiZSB1bnJl
bmRlcmVkIGVsZW1lbnRzLiBpdCdzIHNpbGx5IHRvIG1pc3MgdGhlCiAgICAgICAgIC8vIG1lcmdl
IG9wcG9ydHVuaXR5IGp1c3QgZm9yIHRoYXQuCi0gICAgICAgIGlmIChzdGFydC5ub2RlKCktPnBy
ZXZpb3VzU2libGluZygpKQorICAgICAgICBpZiAoc3RhcnROb2RlLT5wcmV2aW91c1NpYmxpbmco
KSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICBzdGFydE5vZGUgPSBzdGFy
dC5ub2RlKCktPnBhcmVudE5vZGUoKTsKKyAgICAgICAgc3RhcnROb2RlID0gc3RhcnROb2RlLT5w
YXJlbnROb2RlKCk7CiAgICAgICAgIHN0YXJ0T2Zmc2V0ID0gMDsKICAgICB9CiAKICAgICBpZiAo
IXN0YXJ0Tm9kZS0+aXNFbGVtZW50Tm9kZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAg
ICBpZiAoc3RhcnRPZmZzZXQgIT0gMCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgTm9k
ZSAqcHJldmlvdXNTaWJsaW5nID0gc3RhcnROb2RlLT5wcmV2aW91c1NpYmxpbmcoKTsKKyAgICBO
b2RlKiBwcmV2aW91c1NpYmxpbmcgPSBzdGFydE5vZGUtPnByZXZpb3VzU2libGluZygpOwogCiAg
ICAgaWYgKHByZXZpb3VzU2libGluZyAmJiBhcmVJZGVudGljYWxFbGVtZW50cyhzdGFydE5vZGUs
IHByZXZpb3VzU2libGluZykpIHsKLSAgICAgICAgRWxlbWVudCAqcHJldmlvdXNFbGVtZW50ID0g
c3RhdGljX2Nhc3Q8RWxlbWVudCAqPihwcmV2aW91c1NpYmxpbmcpOwotICAgICAgICBFbGVtZW50
ICplbGVtZW50ID0gc3RhdGljX2Nhc3Q8RWxlbWVudCAqPihzdGFydE5vZGUpOwotICAgICAgICBO
b2RlICpzdGFydENoaWxkID0gZWxlbWVudC0+Zmlyc3RDaGlsZCgpOworICAgICAgICBFbGVtZW50
KiBwcmV2aW91c0VsZW1lbnQgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4ocHJldmlvdXNTaWJsaW5n
KTsKKyAgICAgICAgRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihzdGFy
dE5vZGUpOworICAgICAgICBOb2RlKiBzdGFydENoaWxkID0gZWxlbWVudC0+Zmlyc3RDaGlsZCgp
OwogICAgICAgICBBU1NFUlQoc3RhcnRDaGlsZCk7CiAgICAgICAgIG1lcmdlSWRlbnRpY2FsRWxl
bWVudHMocHJldmlvdXNFbGVtZW50LCBlbGVtZW50KTsKIAogICAgICAgICBpbnQgc3RhcnRPZmZz
ZXRBZGp1c3RtZW50ID0gc3RhcnRDaGlsZC0+bm9kZUluZGV4KCk7CiAgICAgICAgIGludCBlbmRP
ZmZzZXRBZGp1c3RtZW50ID0gc3RhcnROb2RlID09IGVuZC5ub2RlKCkgPyBzdGFydE9mZnNldEFk
anVzdG1lbnQgOiAwOwotICAgICAgICB1cGRhdGVTdGFydEVuZChQb3NpdGlvbihzdGFydE5vZGUs
IHN0YXJ0T2Zmc2V0QWRqdXN0bWVudCksIFBvc2l0aW9uKGVuZC5ub2RlKCksIGVuZC5kZXByZWNh
dGVkRWRpdGluZ09mZnNldCgpICsgZW5kT2Zmc2V0QWRqdXN0bWVudCkpOyAKKyAgICAgICAgdXBk
YXRlU3RhcnRFbmQoUG9zaXRpb24oc3RhcnROb2RlLCBzdGFydE9mZnNldEFkanVzdG1lbnQsIFBv
c2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3IpLAorICAgICAgICAgICAgICAgICAgICAg
ICBQb3NpdGlvbihlbmQubm9kZSgpLCBlbmQuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSArIGVu
ZE9mZnNldEFkanVzdG1lbnQsIFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3IpKTsg
CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApAQCAtMTg4MCw0MSArMTg5Myw0MCBAQCB2
b2lkIEFwcGx5U3R5bGVDb21tYW5kOjphZGRJbmxpbmVTdHlsZUlmCiAgICAgICAgIHN1cnJvdW5k
Tm9kZVJhbmdlV2l0aEVsZW1lbnQoc3RhcnROb2RlLCBlbmROb2RlLCBtX3N0eWxlZElubGluZUVs
ZW1lbnQtPmNsb25lRWxlbWVudFdpdGhvdXRDaGlsZHJlbigpKTsKIH0KIAotZmxvYXQgQXBwbHlT
dHlsZUNvbW1hbmQ6OmNvbXB1dGVkRm9udFNpemUoY29uc3QgTm9kZSAqbm9kZSkKK2Zsb2F0IEFw
cGx5U3R5bGVDb21tYW5kOjpjb21wdXRlZEZvbnRTaXplKE5vZGUqIG5vZGUpCiB7CiAgICAgaWYg
KCFub2RlKQogICAgICAgICByZXR1cm4gMDsKLSAgICAKLSAgICBQb3NpdGlvbiBwb3MoY29uc3Rf
Y2FzdDxOb2RlICo+KG5vZGUpLCAwKTsKLSAgICBSZWZQdHI8Q1NTQ29tcHV0ZWRTdHlsZURlY2xh
cmF0aW9uPiBjb21wdXRlZFN0eWxlID0gcG9zLmNvbXB1dGVkU3R5bGUoKTsKLSAgICBpZiAoIWNv
bXB1dGVkU3R5bGUpCisKKyAgICBSZWZQdHI8Q1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uPiBz
dHlsZSA9IGNvbXB1dGVkU3R5bGUobm9kZSk7CisgICAgaWYgKCFzdHlsZSkKICAgICAgICAgcmV0
dXJuIDA7CiAKLSAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHZhbHVlID0gc3RhdGljX3Bv
aW50ZXJfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oY29tcHV0ZWRTdHlsZS0+Z2V0UHJvcGVydHlD
U1NWYWx1ZShDU1NQcm9wZXJ0eUZvbnRTaXplKSk7CisgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZh
bHVlPiB2YWx1ZSA9IHN0YXRpY19wb2ludGVyX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHN0eWxl
LT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5Rm9udFNpemUpKTsKICAgICBpZiAoIXZh
bHVlKQogICAgICAgICByZXR1cm4gMDsKIAogICAgIHJldHVybiB2YWx1ZS0+Z2V0RmxvYXRWYWx1
ZShDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BYKTsKIH0KIAotdm9pZCBBcHBseVN0eWxlQ29tbWFu
ZDo6am9pbkNoaWxkVGV4dE5vZGVzKE5vZGUgKm5vZGUsIGNvbnN0IFBvc2l0aW9uICZzdGFydCwg
Y29uc3QgUG9zaXRpb24gJmVuZCkKK3ZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OmpvaW5DaGlsZFRl
eHROb2RlcyhOb2RlKiBub2RlLCBjb25zdCBQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IFBvc2l0aW9u
JiBlbmQpCiB7CiAgICAgaWYgKCFub2RlKQogICAgICAgICByZXR1cm47CiAKICAgICBQb3NpdGlv
biBuZXdTdGFydCA9IHN0YXJ0OwogICAgIFBvc2l0aW9uIG5ld0VuZCA9IGVuZDsKLSAgICAKLSAg
ICBOb2RlICpjaGlsZCA9IG5vZGUtPmZpcnN0Q2hpbGQoKTsKKworICAgIE5vZGUqIGNoaWxkID0g
bm9kZS0+Zmlyc3RDaGlsZCgpOwogICAgIHdoaWxlIChjaGlsZCkgewotICAgICAgICBOb2RlICpu
ZXh0ID0gY2hpbGQtPm5leHRTaWJsaW5nKCk7CisgICAgICAgIE5vZGUqIG5leHQgPSBjaGlsZC0+
bmV4dFNpYmxpbmcoKTsKICAgICAgICAgaWYgKGNoaWxkLT5pc1RleHROb2RlKCkgJiYgbmV4dCAm
JiBuZXh0LT5pc1RleHROb2RlKCkpIHsKLSAgICAgICAgICAgIFRleHQgKmNoaWxkVGV4dCA9IHN0
YXRpY19jYXN0PFRleHQgKj4oY2hpbGQpOwotICAgICAgICAgICAgVGV4dCAqbmV4dFRleHQgPSBz
dGF0aWNfY2FzdDxUZXh0ICo+KG5leHQpOwotICAgICAgICAgICAgaWYgKG5leHQgPT0gc3RhcnQu
bm9kZSgpKQotICAgICAgICAgICAgICAgIG5ld1N0YXJ0ID0gUG9zaXRpb24oY2hpbGRUZXh0LCBj
aGlsZFRleHQtPmxlbmd0aCgpICsgc3RhcnQuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSk7Ci0g
ICAgICAgICAgICBpZiAobmV4dCA9PSBlbmQubm9kZSgpKQotICAgICAgICAgICAgICAgIG5ld0Vu
ZCA9IFBvc2l0aW9uKGNoaWxkVGV4dCwgY2hpbGRUZXh0LT5sZW5ndGgoKSArIGVuZC5kZXByZWNh
dGVkRWRpdGluZ09mZnNldCgpKTsKKyAgICAgICAgICAgIFRleHQqIGNoaWxkVGV4dCA9IHN0YXRp
Y19jYXN0PFRleHQgKj4oY2hpbGQpOworICAgICAgICAgICAgVGV4dCogbmV4dFRleHQgPSBzdGF0
aWNfY2FzdDxUZXh0ICo+KG5leHQpOworICAgICAgICAgICAgaWYgKHN0YXJ0LmFuY2hvclR5cGUo
KSA9PSBQb3NpdGlvbjo6UG9zaXRpb25Jc09mZnNldEluQW5jaG9yICYmIG5leHQgPT0gc3RhcnQu
Y29udGFpbmVyTm9kZSgpKQorICAgICAgICAgICAgICAgIG5ld1N0YXJ0ID0gUG9zaXRpb24oY2hp
bGRUZXh0LCBjaGlsZFRleHQtPmxlbmd0aCgpICsgc3RhcnQub2Zmc2V0SW5Db250YWluZXJOb2Rl
KCksIFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3IpOworICAgICAgICAgICAgaWYg
KGVuZC5hbmNob3JUeXBlKCkgPT0gUG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvciAm
JiBuZXh0ID09IGVuZC5jb250YWluZXJOb2RlKCkpCisgICAgICAgICAgICAgICAgbmV3RW5kID0g
UG9zaXRpb24oY2hpbGRUZXh0LCBjaGlsZFRleHQtPmxlbmd0aCgpICsgZW5kLm9mZnNldEluQ29u
dGFpbmVyTm9kZSgpLCBQb3NpdGlvbjo6UG9zaXRpb25Jc09mZnNldEluQW5jaG9yKTsKICAgICAg
ICAgICAgIFN0cmluZyB0ZXh0VG9Nb3ZlID0gbmV4dFRleHQtPmRhdGEoKTsKICAgICAgICAgICAg
IGluc2VydFRleHRJbnRvTm9kZShjaGlsZFRleHQsIGNoaWxkVGV4dC0+bGVuZ3RoKCksIHRleHRU
b01vdmUpOwogICAgICAgICAgICAgcmVtb3ZlTm9kZShuZXh0KTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmgJKHJldmlzaW9uIDc1NTY1KQorKysgU291
cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xMDgsNyArMTA4LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNsZWFudXBVbnN0eWxlZEFwcGxl
U3R5bGVTcGFucyhOb2RlKiBkdW1teVNwYW5BbmNlc3Rvcik7CiAKICAgICB2b2lkIHN1cnJvdW5k
Tm9kZVJhbmdlV2l0aEVsZW1lbnQoUGFzc1JlZlB0cjxOb2RlPiBzdGFydCwgUGFzc1JlZlB0cjxO
b2RlPiBlbmQsIFBhc3NSZWZQdHI8RWxlbWVudD4pOwotICAgIGZsb2F0IGNvbXB1dGVkRm9udFNp
emUoY29uc3QgTm9kZSopOworICAgIGZsb2F0IGNvbXB1dGVkRm9udFNpemUoTm9kZSopOwogICAg
IHZvaWQgam9pbkNoaWxkVGV4dE5vZGVzKE5vZGUqLCBjb25zdCBQb3NpdGlvbiYgc3RhcnQsIGNv
bnN0IFBvc2l0aW9uJiBlbmQpOwogCiAgICAgSFRNTEVsZW1lbnQqIHNwbGl0QW5jZXN0b3JzV2l0
aFVuaWNvZGVCaWRpKE5vZGUqLCBib29sIGJlZm9yZSwgaW50IGFsbG93ZWREaXJlY3Rpb24pOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>78633</attachid>
            <date>2011-01-11 18:03:57 -0800</date>
            <delta_ts>2011-01-12 17:06:07 -0800</delta_ts>
            <desc>don&apos;t generate bogus position like [br, 0]</desc>
            <filename>bug-52250-20110111180356.patch</filename>
            <type>text/plain</type>
            <size>21858</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc1NTc5KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDEgQEAKKzIwMTEtMDEtMTEgIFJ5b3N1a2Ug
Tml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgUmVtb3ZlZCBpbnN0YW50aWF0aW9uIG9mIGxlZ2FjeSBlZGl0aW5n
IHBvc2l0aW9ucy4KKyAgICAgICAgQ2FsbHMgdG8gUG9zaXRpb246OlBvc2l0aW9uIGFyZSByZXBs
YWNlZCBieSBjYWxscyB0byBQb3NpdGlvbidzIGNvbnZlbmllbmNlIGZ1bmN0aW9ucy4KKworICAg
ICAgICBBbHNvIGFkZGVkIGZpcnN0UG9zaXRpb25Jbk9yQmVmb3JlTm9kZSBhbmQgbGFzdFBvc2l0
aW9uSW5PckFmdGVyTm9kZSwKKyAgICAgICAgd2hpY2ggYXJlIGZ1bmN0aW9ucyB0aGF0IHJldHVy
biBmaXJzdFBvc2l0aW9uSW5Ob2RlIGFuZCBsYXN0UG9zaXRpb25Jbk5vZGUgcmVzcGVjdGl2ZWx5
CisgICAgICAgIHdoZW4gdGhlIHNwZWNpZmllZCBub2RlIGNhbiBoYXZlIGNoaWxkcmVuIGZvciBl
ZGl0aW5nIHB1cnBvc2UgYW5kIHJldHVybiBwb3NpdGlvbkJlZm9yZU5vZGUKKyAgICAgICAgYW5k
IHBvc2l0aW9uQWZ0ZXJOb2RlIHJlc3BlY3RpdmVseSBvdGhlcndpc2UuIFRoZXkgY2FuIGJlIHVz
ZWQgdG8gZ3VhcmFudGVlIHRoYXQgd2UgbmV2ZXIKKyAgICAgICAgY3JlYXRlIGEgYm9ndXMgcG9z
aXRpb24gbGlrZSBbaW1nLCAwXSBvciBbYnIsIDBdLgorCisgICAgICAgIE5vIHRlc3RzIGFyZSBh
ZGRlZCBzaW5jZSB0aGlzIGlzIGEgY2xlYW51cC4KKworICAgICAgICAqIGVkaXRpbmcvQXBwbHlC
bG9ja0VsZW1lbnRDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5QmxvY2tFbGVt
ZW50Q29tbWFuZDo6Zm9ybWF0U2VsZWN0aW9uKToKKyAgICAgICAgKiBlZGl0aW5nL0FwcGx5U3R5
bGVDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5kOjphcHBs
eUJsb2NrU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1hbmQ6OmZpeFJh
bmdlQW5kQXBwbHlJbmxpbmVTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29t
bWFuZDo6aGlnaGVzdEFuY2VzdG9yV2l0aENvbmZsaWN0aW5nSW5saW5lU3R5bGUpOgorICAgICAg
ICAoV2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1hbmQ6OnJlbW92ZUlubGluZVN0eWxlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5kOjpub2RlRnVsbHlTZWxlY3RlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6bm9kZUZ1bGx5VW5zZWxlY3RlZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6c3BsaXRUZXh0QXRTdGFydCk6Cisg
ICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6c3BsaXRUZXh0QXRFbmQpOgorICAg
ICAgICAoV2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1hbmQ6OnNwbGl0VGV4dEVsZW1lbnRBdFN0YXJ0
KToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5kOjpzcGxpdFRleHRFbGVtZW50
QXRFbmQpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1hbmQ6OmlzVmFsaWRDYXJl
dFBvc2l0aW9uSW5UZXh0Tm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFu
ZDo6bWVyZ2VTdGFydFdpdGhQcmV2aW91c0lmSWRlbnRpY2FsKToKKyAgICAgICAgKFdlYkNvcmU6
OkFwcGx5U3R5bGVDb21tYW5kOjptZXJnZUVuZFdpdGhOZXh0SWZJZGVudGljYWwpOgorICAgICAg
ICAoV2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1hbmQ6OmNvbXB1dGVkRm9udFNpemUpOgorICAgICAg
ICAoV2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1hbmQ6OmpvaW5DaGlsZFRleHROb2Rlcyk6CisgICAg
ICAgICogZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5oOgorICAgICAgICAqIGVkaXRpbmcvaHRt
bGVkaXRpbmcuaDoKKyAgICAgICAgKFdlYkNvcmU6OmZpcnN0UG9zaXRpb25Jbk9yQmVmb3JlTm9k
ZSk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6bGFzdFBvc2l0aW9uSW5PckFmdGVyTm9kZSk6
IEFkZGVkLgorCiAyMDExLTAxLTExICBQYXRyaWNrIEdhbnN0ZXJlciAgPHBhcm9nYUB3ZWJraXQu
b3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEVyaWMgU2VpZGVsLgpJbmRleDogU291cmNlL1dl
YkNvcmUvZWRpdGluZy9BcHBseUJsb2NrRWxlbWVudENvbW1hbmQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlCbG9ja0VsZW1lbnRDb21tYW5kLmNwcAkocmV2
aXNpb24gNzU1NjUpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGx5QmxvY2tFbGVtZW50
Q29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMiw3ICsxMDIsNyBAQCB2b2lkIEFwcGx5
QmxvY2tFbGVtZW50Q29tbWFuZDo6Zm9ybWF0U2VsCiAgICAgICAgIGluc2VydE5vZGVBdChibG9j
a3F1b3RlLCBzdGFydCk7CiAgICAgICAgIFJlZlB0cjxFbGVtZW50PiBwbGFjZWhvbGRlciA9IGNy
ZWF0ZUJyZWFrRWxlbWVudChkb2N1bWVudCgpKTsKICAgICAgICAgYXBwZW5kTm9kZShwbGFjZWhv
bGRlciwgYmxvY2txdW90ZSk7Ci0gICAgICAgIHNldEVuZGluZ1NlbGVjdGlvbihWaXNpYmxlU2Vs
ZWN0aW9uKFBvc2l0aW9uKHBsYWNlaG9sZGVyLmdldCgpLCAwKSwgRE9XTlNUUkVBTSkpOworICAg
ICAgICBzZXRFbmRpbmdTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbihwb3NpdGlvbkJlZm9yZU5v
ZGUocGxhY2Vob2xkZXIuZ2V0KCkpLCBET1dOU1RSRUFNKSk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQu
Y3BwCShyZXZpc2lvbiA3NTU2NSkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHls
ZUNvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NjMsMTcgKzU2MywxNiBAQCB2b2lkIEFw
cGx5U3R5bGVDb21tYW5kOjphcHBseUJsb2NrU3R5bGUoCiAKICAgICBpZiAodmlzaWJsZVN0YXJ0
LmlzTnVsbCgpIHx8IHZpc2libGVTdGFydC5pc09ycGhhbigpIHx8IHZpc2libGVFbmQuaXNOdWxs
KCkgfHwgdmlzaWJsZUVuZC5pc09ycGhhbigpKQogICAgICAgICByZXR1cm47Ci0gICAgCisKICAg
ICAvLyBTYXZlIGFuZCByZXN0b3JlIHRoZSBzZWxlY3Rpb24gZW5kcG9pbnRzIHVzaW5nIHRoZWly
IGluZGljZXMgaW4gdGhlIGRvY3VtZW50LCBzaW5jZQogICAgIC8vIGFkZEJsb2NrU3R5bGVJZk5l
ZWRlZCBtYXkgbW92ZVBhcmFncmFwaHMsIHdoaWNoIGNhbiByZW1vdmUgdGhlc2UgZW5kcG9pbnRz
LgogICAgIC8vIENhbGN1bGF0ZSBzdGFydCBhbmQgZW5kIGluZGljZXMgZnJvbSB0aGUgc3RhcnQg
b2YgdGhlIHRyZWUgdGhhdCB0aGV5J3JlIGluLgogICAgIE5vZGUqIHNjb3BlID0gaGlnaGVzdEFu
Y2VzdG9yKHZpc2libGVTdGFydC5kZWVwRXF1aXZhbGVudCgpLm5vZGUoKSk7Ci0gICAgUG9zaXRp
b24gcmFuZ2VTdGFydChzY29wZSwgMCk7Ci0gICAgUmVmUHRyPFJhbmdlPiBzdGFydFJhbmdlID0g
UmFuZ2U6OmNyZWF0ZShkb2N1bWVudCgpLCByYW5nZVN0YXJ0LCByYW5nZUNvbXBsaWFudEVxdWl2
YWxlbnQodmlzaWJsZVN0YXJ0LmRlZXBFcXVpdmFsZW50KCkpKTsKLSAgICBSZWZQdHI8UmFuZ2U+
IGVuZFJhbmdlID0gUmFuZ2U6OmNyZWF0ZShkb2N1bWVudCgpLCByYW5nZVN0YXJ0LCByYW5nZUNv
bXBsaWFudEVxdWl2YWxlbnQodmlzaWJsZUVuZC5kZWVwRXF1aXZhbGVudCgpKSk7CisgICAgUmVm
UHRyPFJhbmdlPiBzdGFydFJhbmdlID0gUmFuZ2U6OmNyZWF0ZShkb2N1bWVudCgpLCBmaXJzdFBv
c2l0aW9uSW5Ob2RlKHNjb3BlKSwgcmFuZ2VDb21wbGlhbnRFcXVpdmFsZW50KHZpc2libGVTdGFy
dC5kZWVwRXF1aXZhbGVudCgpKSk7CisgICAgUmVmUHRyPFJhbmdlPiBlbmRSYW5nZSA9IFJhbmdl
OjpjcmVhdGUoZG9jdW1lbnQoKSwgZmlyc3RQb3NpdGlvbkluTm9kZShzY29wZSksIHJhbmdlQ29t
cGxpYW50RXF1aXZhbGVudCh2aXNpYmxlRW5kLmRlZXBFcXVpdmFsZW50KCkpKTsKICAgICBpbnQg
c3RhcnRJbmRleCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgoc3RhcnRSYW5nZS5nZXQoKSwg
dHJ1ZSk7CiAgICAgaW50IGVuZEluZGV4ID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChlbmRS
YW5nZS5nZXQoKSwgdHJ1ZSk7Ci0gICAgCisKICAgICBWaXNpYmxlUG9zaXRpb24gcGFyYWdyYXBo
U3RhcnQoc3RhcnRPZlBhcmFncmFwaCh2aXNpYmxlU3RhcnQpKTsKICAgICBWaXNpYmxlUG9zaXRp
b24gbmV4dFBhcmFncmFwaFN0YXJ0KGVuZE9mUGFyYWdyYXBoKHBhcmFncmFwaFN0YXJ0KS5uZXh0
KCkpOwogICAgIFZpc2libGVQb3NpdGlvbiBiZXlvbmRFbmQoZW5kT2ZQYXJhZ3JhcGgodmlzaWJs
ZUVuZCkubmV4dCgpKTsKQEAgLTk4Miw3ICs5ODEsNyBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5k
OjpmaXhSYW5nZUFuZEFwcGx5CiAKICAgICBpZiAoc3RhcnQuZGVwcmVjYXRlZEVkaXRpbmdPZmZz
ZXQoKSA+PSBjYXJldE1heE9mZnNldChzdGFydC5ub2RlKCkpKSB7CiAgICAgICAgIHN0YXJ0Tm9k
ZSA9IHN0YXJ0Tm9kZS0+dHJhdmVyc2VOZXh0Tm9kZSgpOwotICAgICAgICBpZiAoIXN0YXJ0Tm9k
ZSB8fCBjb21wYXJlUG9zaXRpb25zKGVuZCwgUG9zaXRpb24oc3RhcnROb2RlLCAwKSkgPCAwKQor
ICAgICAgICBpZiAoIXN0YXJ0Tm9kZSB8fCBjb21wYXJlUG9zaXRpb25zKGVuZCwgZmlyc3RQb3Np
dGlvbkluT3JCZWZvcmVOb2RlKHN0YXJ0Tm9kZSkpIDwgMCkKICAgICAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKQEAgLTEzMzMsNyArMTMzMiw3IEBAIEhUTUxFbGVtZW50KiBBcHBseVN0eWxlQ29t
bWFuZDo6aGlnaGVzdEEKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICBIVE1MRWxlbWVudCogcmVz
dWx0ID0gMDsKLSAgICBOb2RlKiB1bnNwbGl0dGFibGVFbGVtZW50ID0gdW5zcGxpdHRhYmxlRWxl
bWVudEZvclBvc2l0aW9uKFBvc2l0aW9uKG5vZGUsIDApKTsKKyAgICBOb2RlKiB1bnNwbGl0dGFi
bGVFbGVtZW50ID0gdW5zcGxpdHRhYmxlRWxlbWVudEZvclBvc2l0aW9uKGZpcnN0UG9zaXRpb25J
bk9yQmVmb3JlTm9kZShub2RlKSk7CiAKICAgICBmb3IgKE5vZGUgKm4gPSBub2RlOyBuOyBuID0g
bi0+cGFyZW50Tm9kZSgpKSB7CiAgICAgICAgIGlmIChuLT5pc0hUTUxFbGVtZW50KCkgJiYgc2hv
dWxkUmVtb3ZlSW5saW5lU3R5bGVGcm9tRWxlbWVudChzdHlsZSwgc3RhdGljX2Nhc3Q8SFRNTEVs
ZW1lbnQqPihuKSkpCkBAIC0xNTE1LDE1ICsxNTE0LDE2IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1h
bmQ6OnJlbW92ZUlubGluZVN0eWwKICAgICAgICAgICAgICAgICBpZiAocy5ub2RlKCkgPT0gZWxl
bSkgewogICAgICAgICAgICAgICAgICAgICAvLyBTaW5jZSBlbGVtIG11c3QgaGF2ZSBiZWVuIGZ1
bGx5IHNlbGVjdGVkLCBhbmQgaXQgaXMgYXQgdGhlIHN0YXJ0CiAgICAgICAgICAgICAgICAgICAg
IC8vIG9mIHRoZSBzZWxlY3Rpb24sIGl0IGlzIGNsZWFyIHdlIGNhbiBzZXQgdGhlIG5ldyBzIG9m
ZnNldCB0byAwLgotICAgICAgICAgICAgICAgICAgICBBU1NFUlQocy5kZXByZWNhdGVkRWRpdGlu
Z09mZnNldCgpIDw9IGNhcmV0TWluT2Zmc2V0KHMubm9kZSgpKSk7Ci0gICAgICAgICAgICAgICAg
ICAgIHMgPSBQb3NpdGlvbihuZXh0LCAwKTsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHMu
YW5jaG9yVHlwZSgpID09IFBvc2l0aW9uOjpQb3NpdGlvbklzQmVmb3JlQW5jaG9yIHx8IHMub2Zm
c2V0SW5Db250YWluZXJOb2RlKCkgPD0gMCk7CisgICAgICAgICAgICAgICAgICAgIHMgPSBmaXJz
dFBvc2l0aW9uSW5PckJlZm9yZU5vZGUobmV4dC5nZXQoKSk7CiAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgIGlmIChlLm5vZGUoKSA9PSBlbGVtKSB7CiAgICAgICAgICAgICAgICAg
ICAgIC8vIFNpbmNlIGVsZW0gbXVzdCBoYXZlIGJlZW4gZnVsbHkgc2VsZWN0ZWQsIGFuZCBpdCBp
cyBhdCB0aGUgZW5kCiAgICAgICAgICAgICAgICAgICAgIC8vIG9mIHRoZSBzZWxlY3Rpb24sIGl0
IGlzIGNsZWFyIHdlIGNhbiBzZXQgdGhlIG5ldyBlIG9mZnNldCB0bwogICAgICAgICAgICAgICAg
ICAgICAvLyB0aGUgbWF4IHJhbmdlIG9mZnNldCBvZiBwcmV2LgotICAgICAgICAgICAgICAgICAg
ICBBU1NFUlQoZS5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpID49IGxhc3RPZmZzZXRGb3JFZGl0
aW5nKGUubm9kZSgpKSk7Ci0gICAgICAgICAgICAgICAgICAgIGUgPSBQb3NpdGlvbihwcmV2LCBs
YXN0T2Zmc2V0Rm9yRWRpdGluZyhwcmV2LmdldCgpKSk7CisgICAgICAgICAgICAgICAgICAgIEFT
U0VSVChzLmFuY2hvclR5cGUoKSA9PSBQb3NpdGlvbjo6UG9zaXRpb25Jc0FmdGVyQW5jaG9yCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBzLm9mZnNldEluQ29udGFpbmVyTm9kZSgpID49
IGxhc3RPZmZzZXRJbk5vZGUocy5jb250YWluZXJOb2RlKCkpKTsKKyAgICAgICAgICAgICAgICAg
ICAgZSA9IGxhc3RQb3NpdGlvbkluT3JBZnRlck5vZGUocHJldi5nZXQoKSk7CiAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgfQogCkBAIC0xNTQ1LDggKzE1NDUsOCBAQCBib29sIEFwcGx5
U3R5bGVDb21tYW5kOjpub2RlRnVsbHlTZWxlY3RlCiAgICAgQVNTRVJUKG5vZGUpOwogICAgIEFT
U0VSVChub2RlLT5pc0VsZW1lbnROb2RlKCkpOwogCi0gICAgUG9zaXRpb24gcG9zID0gUG9zaXRp
b24obm9kZSwgbm9kZS0+Y2hpbGROb2RlQ291bnQoKSkudXBzdHJlYW0oKTsKLSAgICByZXR1cm4g
Y29tcGFyZVBvc2l0aW9ucyhQb3NpdGlvbihub2RlLCAwKSwgc3RhcnQpID49IDAgJiYgY29tcGFy
ZVBvc2l0aW9ucyhwb3MsIGVuZCkgPD0gMDsKKyAgICByZXR1cm4gY29tcGFyZVBvc2l0aW9ucyhm
aXJzdFBvc2l0aW9uSW5PckJlZm9yZU5vZGUobm9kZSksIHN0YXJ0KSA+PSAwCisgICAgICAgICYm
IGNvbXBhcmVQb3NpdGlvbnMobGFzdFBvc2l0aW9uSW5PckFmdGVyTm9kZShub2RlKS51cHN0cmVh
bSgpLCBlbmQpIDw9IDA7CiB9CiAKIGJvb2wgQXBwbHlTdHlsZUNvbW1hbmQ6Om5vZGVGdWxseVVu
c2VsZWN0ZWQoTm9kZSAqbm9kZSwgY29uc3QgUG9zaXRpb24gJnN0YXJ0LCBjb25zdCBQb3NpdGlv
biAmZW5kKSBjb25zdApAQCAtMTU1NCw1MSArMTU1NCw2OCBAQCBib29sIEFwcGx5U3R5bGVDb21t
YW5kOjpub2RlRnVsbHlVbnNlbGVjCiAgICAgQVNTRVJUKG5vZGUpOwogICAgIEFTU0VSVChub2Rl
LT5pc0VsZW1lbnROb2RlKCkpOwogCi0gICAgUG9zaXRpb24gcG9zID0gUG9zaXRpb24obm9kZSwg
bm9kZS0+Y2hpbGROb2RlQ291bnQoKSkudXBzdHJlYW0oKTsKLSAgICBib29sIGlzRnVsbHlCZWZv
cmVTdGFydCA9IGNvbXBhcmVQb3NpdGlvbnMocG9zLCBzdGFydCkgPCAwOwotICAgIGJvb2wgaXNG
dWxseUFmdGVyRW5kID0gY29tcGFyZVBvc2l0aW9ucyhQb3NpdGlvbihub2RlLCAwKSwgZW5kKSA+
IDA7CisgICAgYm9vbCBpc0Z1bGx5QmVmb3JlU3RhcnQgPSBjb21wYXJlUG9zaXRpb25zKGxhc3RQ
b3NpdGlvbkluT3JBZnRlck5vZGUobm9kZSkudXBzdHJlYW0oKSwgc3RhcnQpIDwgMDsKKyAgICBi
b29sIGlzRnVsbHlBZnRlckVuZCA9IGNvbXBhcmVQb3NpdGlvbnMoZmlyc3RQb3NpdGlvbkluT3JC
ZWZvcmVOb2RlKG5vZGUpLCBlbmQpID4gMDsKIAogICAgIHJldHVybiBpc0Z1bGx5QmVmb3JlU3Rh
cnQgfHwgaXNGdWxseUFmdGVyRW5kOwogfQogCiB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjpzcGxp
dFRleHRBdFN0YXJ0KGNvbnN0IFBvc2l0aW9uJiBzdGFydCwgY29uc3QgUG9zaXRpb24mIGVuZCkK
IHsKLSAgICBpbnQgZW5kT2Zmc2V0QWRqdXN0bWVudCA9IHN0YXJ0Lm5vZGUoKSA9PSBlbmQubm9k
ZSgpID8gc3RhcnQuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSA6IDA7CisgICAgQVNTRVJUKHN0
YXJ0LmFuY2hvclR5cGUoKSA9PSBQb3NpdGlvbjo6UG9zaXRpb25Jc09mZnNldEluQW5jaG9yKTsK
KworICAgIFBvc2l0aW9uIG5ld0VuZDsKKyAgICBpZiAoZW5kLmFuY2hvclR5cGUoKSA9PSBQb3Np
dGlvbjo6UG9zaXRpb25Jc09mZnNldEluQW5jaG9yICYmIHN0YXJ0LmNvbnRhaW5lck5vZGUoKSA9
PSBlbmQuY29udGFpbmVyTm9kZSgpKQorICAgICAgICBuZXdFbmQgPSBQb3NpdGlvbihlbmQuY29u
dGFpbmVyTm9kZSgpLCBlbmQub2Zmc2V0SW5Db250YWluZXJOb2RlKCkgLSBzdGFydC5vZmZzZXRJ
bkNvbnRhaW5lck5vZGUoKSwgUG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvcik7Cisg
ICAgZWxzZQorICAgICAgICBuZXdFbmQgPSBlbmQ7CisKICAgICBUZXh0KiB0ZXh0ID0gc3RhdGlj
X2Nhc3Q8VGV4dCo+KHN0YXJ0Lm5vZGUoKSk7Ci0gICAgc3BsaXRUZXh0Tm9kZSh0ZXh0LCBzdGFy
dC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpKTsKLSAgICB1cGRhdGVTdGFydEVuZChQb3NpdGlv
bihzdGFydC5ub2RlKCksIDApLCBQb3NpdGlvbihlbmQubm9kZSgpLCBlbmQuZGVwcmVjYXRlZEVk
aXRpbmdPZmZzZXQoKSAtIGVuZE9mZnNldEFkanVzdG1lbnQpKTsKKyAgICBzcGxpdFRleHROb2Rl
KHRleHQsIHN0YXJ0Lm9mZnNldEluQ29udGFpbmVyTm9kZSgpKTsKKyAgICB1cGRhdGVTdGFydEVu
ZChmaXJzdFBvc2l0aW9uSW5Ob2RlKHN0YXJ0Lm5vZGUoKSksIG5ld0VuZCk7CiB9CiAKIHZvaWQg
QXBwbHlTdHlsZUNvbW1hbmQ6OnNwbGl0VGV4dEF0RW5kKGNvbnN0IFBvc2l0aW9uJiBzdGFydCwg
Y29uc3QgUG9zaXRpb24mIGVuZCkKIHsKKyAgICBBU1NFUlQoZW5kLmFuY2hvclR5cGUoKSA9PSBQ
b3NpdGlvbjo6UG9zaXRpb25Jc09mZnNldEluQW5jaG9yKTsKKworICAgIGJvb2wgc2hvdWxkVXBk
YXRlU3RhcnQgPSBzdGFydC5hbmNob3JUeXBlKCkgPT0gUG9zaXRpb246OlBvc2l0aW9uSXNPZmZz
ZXRJbkFuY2hvciAmJiBzdGFydC5jb250YWluZXJOb2RlKCkgPT0gZW5kLmNvbnRhaW5lck5vZGUo
KTsKICAgICBUZXh0KiB0ZXh0ID0gc3RhdGljX2Nhc3Q8VGV4dCAqPihlbmQubm9kZSgpKTsKLSAg
ICBzcGxpdFRleHROb2RlKHRleHQsIGVuZC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpKTsKKyAg
ICBzcGxpdFRleHROb2RlKHRleHQsIGVuZC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSk7CiAKICAg
ICBOb2RlKiBwcmV2Tm9kZSA9IHRleHQtPnByZXZpb3VzU2libGluZygpOwogICAgIEFTU0VSVChw
cmV2Tm9kZSk7Ci0gICAgTm9kZSogc3RhcnROb2RlID0gc3RhcnQubm9kZSgpID09IGVuZC5ub2Rl
KCkgPyBwcmV2Tm9kZSA6IHN0YXJ0Lm5vZGUoKTsKLSAgICBBU1NFUlQoc3RhcnROb2RlKTsKLSAg
ICB1cGRhdGVTdGFydEVuZChQb3NpdGlvbihzdGFydE5vZGUsIHN0YXJ0LmRlcHJlY2F0ZWRFZGl0
aW5nT2Zmc2V0KCkpLCBQb3NpdGlvbihwcmV2Tm9kZSwgY2FyZXRNYXhPZmZzZXQocHJldk5vZGUp
KSk7CisgICAgUG9zaXRpb24gbmV3U3RhcnQgPSBzaG91bGRVcGRhdGVTdGFydCA/IFBvc2l0aW9u
KHByZXZOb2RlLCBzdGFydC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSwgUG9zaXRpb246OlBvc2l0
aW9uSXNPZmZzZXRJbkFuY2hvcikgOiBzdGFydDsKKyAgICB1cGRhdGVTdGFydEVuZChuZXdTdGFy
dCwgbGFzdFBvc2l0aW9uSW5Ob2RlKHByZXZOb2RlKSk7CiB9CiAKIHZvaWQgQXBwbHlTdHlsZUNv
bW1hbmQ6OnNwbGl0VGV4dEVsZW1lbnRBdFN0YXJ0KGNvbnN0IFBvc2l0aW9uJiBzdGFydCwgY29u
c3QgUG9zaXRpb24mIGVuZCkKIHsKLSAgICBpbnQgZW5kT2Zmc2V0QWRqdXN0bWVudCA9IHN0YXJ0
Lm5vZGUoKSA9PSBlbmQubm9kZSgpID8gc3RhcnQuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSA6
IDA7CisgICAgQVNTRVJUKHN0YXJ0LmFuY2hvclR5cGUoKSA9PSBQb3NpdGlvbjo6UG9zaXRpb25J
c09mZnNldEluQW5jaG9yKTsKKworICAgIFBvc2l0aW9uIG5ld0VuZDsKKyAgICBpZiAoZW5kLmFu
Y2hvclR5cGUoKSA9PSBQb3NpdGlvbjo6UG9zaXRpb25Jc09mZnNldEluQW5jaG9yICYmIHN0YXJ0
LmNvbnRhaW5lck5vZGUoKSA9PSBlbmQuY29udGFpbmVyTm9kZSgpKQorICAgICAgICBuZXdFbmQg
PSBQb3NpdGlvbihlbmQuY29udGFpbmVyTm9kZSgpLCBlbmQub2Zmc2V0SW5Db250YWluZXJOb2Rl
KCkgLSBzdGFydC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSwgUG9zaXRpb246OlBvc2l0aW9uSXNP
ZmZzZXRJbkFuY2hvcik7CisgICAgZWxzZQorICAgICAgICBuZXdFbmQgPSBlbmQ7CisKICAgICBU
ZXh0KiB0ZXh0ID0gc3RhdGljX2Nhc3Q8VGV4dCo+KHN0YXJ0Lm5vZGUoKSk7CiAgICAgc3BsaXRU
ZXh0Tm9kZUNvbnRhaW5pbmdFbGVtZW50KHRleHQsIHN0YXJ0LmRlcHJlY2F0ZWRFZGl0aW5nT2Zm
c2V0KCkpOwotICAgIHVwZGF0ZVN0YXJ0RW5kKFBvc2l0aW9uKHN0YXJ0Lm5vZGUoKS0+cGFyZW50
Tm9kZSgpLCBzdGFydC5ub2RlKCktPm5vZGVJbmRleCgpKSwgUG9zaXRpb24oZW5kLm5vZGUoKSwg
ZW5kLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkgLSBlbmRPZmZzZXRBZGp1c3RtZW50KSk7Cisg
ICAgdXBkYXRlU3RhcnRFbmQoUG9zaXRpb24oc3RhcnQubm9kZSgpLT5wYXJlbnROb2RlKCksIHN0
YXJ0Lm5vZGUoKS0+bm9kZUluZGV4KCksIFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNo
b3IpLCBuZXdFbmQpOwogfQogCiB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjpzcGxpdFRleHRFbGVt
ZW50QXRFbmQoY29uc3QgUG9zaXRpb24mIHN0YXJ0LCBjb25zdCBQb3NpdGlvbiYgZW5kKQogewor
ICAgIEFTU0VSVChlbmQuYW5jaG9yVHlwZSgpID09IFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0
SW5BbmNob3IpOworCisgICAgYm9vbCBzaG91bGRVcGRhdGVTdGFydCA9IHN0YXJ0LmFuY2hvclR5
cGUoKSA9PSBQb3NpdGlvbjo6UG9zaXRpb25Jc09mZnNldEluQW5jaG9yICYmIHN0YXJ0LmNvbnRh
aW5lck5vZGUoKSA9PSBlbmQuY29udGFpbmVyTm9kZSgpOwogICAgIFRleHQqIHRleHQgPSBzdGF0
aWNfY2FzdDxUZXh0Kj4oZW5kLm5vZGUoKSk7CiAgICAgc3BsaXRUZXh0Tm9kZUNvbnRhaW5pbmdF
bGVtZW50KHRleHQsIGVuZC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpKTsKIAogICAgIE5vZGUq
IHByZXZOb2RlID0gdGV4dC0+cGFyZW50Tm9kZSgpLT5wcmV2aW91c1NpYmxpbmcoKS0+bGFzdENo
aWxkKCk7CiAgICAgQVNTRVJUKHByZXZOb2RlKTsKLSAgICBOb2RlKiBzdGFydE5vZGUgPSBzdGFy
dC5ub2RlKCkgPT0gZW5kLm5vZGUoKSA/IHByZXZOb2RlIDogc3RhcnQubm9kZSgpOwotICAgIEFT
U0VSVChzdGFydE5vZGUpOwotICAgIHVwZGF0ZVN0YXJ0RW5kKFBvc2l0aW9uKHN0YXJ0Tm9kZSwg
c3RhcnQuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSksIFBvc2l0aW9uKHByZXZOb2RlLT5wYXJl
bnROb2RlKCksIHByZXZOb2RlLT5ub2RlSW5kZXgoKSArIDEpKTsKKyAgICBQb3NpdGlvbiBuZXdT
dGFydCA9IHNob3VsZFVwZGF0ZVN0YXJ0ID8gUG9zaXRpb24ocHJldk5vZGUsIHN0YXJ0Lm9mZnNl
dEluQ29udGFpbmVyTm9kZSgpLCBQb3NpdGlvbjo6UG9zaXRpb25Jc09mZnNldEluQW5jaG9yKSA6
IHN0YXJ0OworICAgIHVwZGF0ZVN0YXJ0RW5kKG5ld1N0YXJ0LCBQb3NpdGlvbihwcmV2Tm9kZS0+
cGFyZW50Tm9kZSgpLCBwcmV2Tm9kZS0+bm9kZUluZGV4KCkgKyAxLCBQb3NpdGlvbjo6UG9zaXRp
b25Jc09mZnNldEluQW5jaG9yKSk7CiB9CiAKIGJvb2wgQXBwbHlTdHlsZUNvbW1hbmQ6OnNob3Vs
ZFNwbGl0VGV4dEVsZW1lbnQoRWxlbWVudCogZWxlbWVudCwgQ1NTTXV0YWJsZVN0eWxlRGVjbGFy
YXRpb24qIHN0eWxlKQpAQCAtMTYxMSwxMSArMTYyOCwxMSBAQCBib29sIEFwcGx5U3R5bGVDb21t
YW5kOjpzaG91bGRTcGxpdFRleHRFCiAKIGJvb2wgQXBwbHlTdHlsZUNvbW1hbmQ6OmlzVmFsaWRD
YXJldFBvc2l0aW9uSW5UZXh0Tm9kZShjb25zdCBQb3NpdGlvbiYgcG9zaXRpb24pCiB7Ci0gICAg
Tm9kZSogbm9kZSA9IHBvc2l0aW9uLm5vZGUoKTsKLSAgICBpZiAoIW5vZGUtPmlzVGV4dE5vZGUo
KSkKKyAgICBOb2RlKiBub2RlID0gcG9zaXRpb24uY29udGFpbmVyTm9kZSgpOworICAgIGlmIChw
b3NpdGlvbi5hbmNob3JUeXBlKCkgIT0gUG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hv
ciB8fCAhbm9kZS0+aXNUZXh0Tm9kZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaW50
IG9mZnNldEluVGV4dCA9IHBvc2l0aW9uLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCk7Ci0gICAg
cmV0dXJuIChvZmZzZXRJblRleHQgPiBjYXJldE1pbk9mZnNldChub2RlKSAmJiBvZmZzZXRJblRl
eHQgPCBjYXJldE1heE9mZnNldChub2RlKSk7CisgICAgaW50IG9mZnNldEluVGV4dCA9IHBvc2l0
aW9uLm9mZnNldEluQ29udGFpbmVyTm9kZSgpOworICAgIHJldHVybiBvZmZzZXRJblRleHQgPiBj
YXJldE1pbk9mZnNldChub2RlKSAmJiBvZmZzZXRJblRleHQgPCBjYXJldE1heE9mZnNldChub2Rl
KTsKIH0KIAogc3RhdGljIGJvb2wgYXJlSWRlbnRpY2FsRWxlbWVudHMoTm9kZSAqZmlyc3QsIE5v
ZGUgKnNlY29uZCkKQEAgLTE2NTMsNTUgKzE2NzAsNTIgQEAgc3RhdGljIGJvb2wgYXJlSWRlbnRp
Y2FsRWxlbWVudHMoTm9kZSAqZgogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIEFwcGx5U3R5
bGVDb21tYW5kOjptZXJnZVN0YXJ0V2l0aFByZXZpb3VzSWZJZGVudGljYWwoY29uc3QgUG9zaXRp
b24gJnN0YXJ0LCBjb25zdCBQb3NpdGlvbiAmZW5kKQorYm9vbCBBcHBseVN0eWxlQ29tbWFuZDo6
bWVyZ2VTdGFydFdpdGhQcmV2aW91c0lmSWRlbnRpY2FsKGNvbnN0IFBvc2l0aW9uJiBzdGFydCwg
Y29uc3QgUG9zaXRpb24mIGVuZCkKIHsKLSAgICBOb2RlICpzdGFydE5vZGUgPSBzdGFydC5ub2Rl
KCk7Ci0gICAgaW50IHN0YXJ0T2Zmc2V0ID0gc3RhcnQuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQo
KTsKLQotICAgIGlmIChpc0F0b21pY05vZGUoc3RhcnQubm9kZSgpKSkgewotICAgICAgICBpZiAo
c3RhcnQuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSAhPSAwKQotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIE5vZGUqIHN0YXJ0Tm9kZSA9IHN0YXJ0LmNvbnRhaW5lck5vZGUoKTsKKyAg
ICBpbnQgc3RhcnRPZmZzZXQgPSBzdGFydC5jb21wdXRlT2Zmc2V0SW5Db250YWluZXJOb2RlKCk7
CisgICAgaWYgKHN0YXJ0T2Zmc2V0KQorICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyAgICBpZiAo
aXNBdG9taWNOb2RlKHN0YXJ0Tm9kZSkpIHsKICAgICAgICAgLy8gbm90ZTogcHJpb3Igc2libGlu
Z3MgY291bGQgYmUgdW5yZW5kZXJlZCBlbGVtZW50cy4gaXQncyBzaWxseSB0byBtaXNzIHRoZQog
ICAgICAgICAvLyBtZXJnZSBvcHBvcnR1bml0eSBqdXN0IGZvciB0aGF0LgotICAgICAgICBpZiAo
c3RhcnQubm9kZSgpLT5wcmV2aW91c1NpYmxpbmcoKSkKKyAgICAgICAgaWYgKHN0YXJ0Tm9kZS0+
cHJldmlvdXNTaWJsaW5nKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAg
c3RhcnROb2RlID0gc3RhcnQubm9kZSgpLT5wYXJlbnROb2RlKCk7CisgICAgICAgIHN0YXJ0Tm9k
ZSA9IHN0YXJ0Tm9kZS0+cGFyZW50Tm9kZSgpOwogICAgICAgICBzdGFydE9mZnNldCA9IDA7CiAg
ICAgfQogCiAgICAgaWYgKCFzdGFydE5vZGUtPmlzRWxlbWVudE5vZGUoKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgaWYgKHN0YXJ0T2Zmc2V0ICE9IDApCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIE5vZGUgKnByZXZpb3VzU2libGluZyA9IHN0YXJ0Tm9kZS0+cHJldmlvdXNT
aWJsaW5nKCk7CisgICAgTm9kZSogcHJldmlvdXNTaWJsaW5nID0gc3RhcnROb2RlLT5wcmV2aW91
c1NpYmxpbmcoKTsKIAogICAgIGlmIChwcmV2aW91c1NpYmxpbmcgJiYgYXJlSWRlbnRpY2FsRWxl
bWVudHMoc3RhcnROb2RlLCBwcmV2aW91c1NpYmxpbmcpKSB7Ci0gICAgICAgIEVsZW1lbnQgKnBy
ZXZpb3VzRWxlbWVudCA9IHN0YXRpY19jYXN0PEVsZW1lbnQgKj4ocHJldmlvdXNTaWJsaW5nKTsK
LSAgICAgICAgRWxlbWVudCAqZWxlbWVudCA9IHN0YXRpY19jYXN0PEVsZW1lbnQgKj4oc3RhcnRO
b2RlKTsKLSAgICAgICAgTm9kZSAqc3RhcnRDaGlsZCA9IGVsZW1lbnQtPmZpcnN0Q2hpbGQoKTsK
KyAgICAgICAgRWxlbWVudCogcHJldmlvdXNFbGVtZW50ID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+
KHByZXZpb3VzU2libGluZyk7CisgICAgICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2Fz
dDxFbGVtZW50Kj4oc3RhcnROb2RlKTsKKyAgICAgICAgTm9kZSogc3RhcnRDaGlsZCA9IGVsZW1l
bnQtPmZpcnN0Q2hpbGQoKTsKICAgICAgICAgQVNTRVJUKHN0YXJ0Q2hpbGQpOwogICAgICAgICBt
ZXJnZUlkZW50aWNhbEVsZW1lbnRzKHByZXZpb3VzRWxlbWVudCwgZWxlbWVudCk7CiAKICAgICAg
ICAgaW50IHN0YXJ0T2Zmc2V0QWRqdXN0bWVudCA9IHN0YXJ0Q2hpbGQtPm5vZGVJbmRleCgpOwog
ICAgICAgICBpbnQgZW5kT2Zmc2V0QWRqdXN0bWVudCA9IHN0YXJ0Tm9kZSA9PSBlbmQubm9kZSgp
ID8gc3RhcnRPZmZzZXRBZGp1c3RtZW50IDogMDsKLSAgICAgICAgdXBkYXRlU3RhcnRFbmQoUG9z
aXRpb24oc3RhcnROb2RlLCBzdGFydE9mZnNldEFkanVzdG1lbnQpLCBQb3NpdGlvbihlbmQubm9k
ZSgpLCBlbmQuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSArIGVuZE9mZnNldEFkanVzdG1lbnQp
KTsgCisgICAgICAgIHVwZGF0ZVN0YXJ0RW5kKFBvc2l0aW9uKHN0YXJ0Tm9kZSwgc3RhcnRPZmZz
ZXRBZGp1c3RtZW50LCBQb3NpdGlvbjo6UG9zaXRpb25Jc09mZnNldEluQW5jaG9yKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgUG9zaXRpb24oZW5kLm5vZGUoKSwgZW5kLmRlcHJlY2F0ZWRFZGl0
aW5nT2Zmc2V0KCkgKyBlbmRPZmZzZXRBZGp1c3RtZW50LCBQb3NpdGlvbjo6UG9zaXRpb25Jc09m
ZnNldEluQW5jaG9yKSk7IAogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKICAgICByZXR1
cm4gZmFsc2U7CiB9CiAKLWJvb2wgQXBwbHlTdHlsZUNvbW1hbmQ6Om1lcmdlRW5kV2l0aE5leHRJ
ZklkZW50aWNhbChjb25zdCBQb3NpdGlvbiAmc3RhcnQsIGNvbnN0IFBvc2l0aW9uICZlbmQpCiti
b29sIEFwcGx5U3R5bGVDb21tYW5kOjptZXJnZUVuZFdpdGhOZXh0SWZJZGVudGljYWwoY29uc3Qg
UG9zaXRpb24mIHN0YXJ0LCBjb25zdCBQb3NpdGlvbiYgZW5kKQogewotICAgIE5vZGUgKmVuZE5v
ZGUgPSBlbmQubm9kZSgpOwotICAgIGludCBlbmRPZmZzZXQgPSBlbmQuZGVwcmVjYXRlZEVkaXRp
bmdPZmZzZXQoKTsKKyAgICBOb2RlKiBlbmROb2RlID0gZW5kLmNvbnRhaW5lck5vZGUoKTsKKyAg
ICBpbnQgZW5kT2Zmc2V0ID0gZW5kLmNvbXB1dGVPZmZzZXRJbkNvbnRhaW5lck5vZGUoKTsKIAog
ICAgIGlmIChpc0F0b21pY05vZGUoZW5kTm9kZSkpIHsKLSAgICAgICAgaWYgKGVuZE9mZnNldCA8
IGNhcmV0TWF4T2Zmc2V0KGVuZE5vZGUpKQorICAgICAgICBpZiAoZW5kT2Zmc2V0IDwgbGFzdE9m
ZnNldEluTm9kZShlbmROb2RlKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAg
ICB1bnNpZ25lZCBwYXJlbnRMYXN0T2Zmc2V0ID0gZW5kLm5vZGUoKS0+cGFyZW50Tm9kZSgpLT5j
aGlsZE5vZGVzKCktPmxlbmd0aCgpIC0gMTsKQEAgLTE3MTUsMjAgKzE3MjksMTggQEAgYm9vbCBB
cHBseVN0eWxlQ29tbWFuZDo6bWVyZ2VFbmRXaXRoTmV4dAogICAgIGlmICghZW5kTm9kZS0+aXNF
bGVtZW50Tm9kZSgpIHx8IGVuZE5vZGUtPmhhc1RhZ05hbWUoYnJUYWcpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICBOb2RlICpuZXh0U2libGluZyA9IGVuZE5vZGUtPm5leHRTaWJsaW5n
KCk7Ci0KKyAgICBOb2RlKiBuZXh0U2libGluZyA9IGVuZE5vZGUtPm5leHRTaWJsaW5nKCk7CiAg
ICAgaWYgKG5leHRTaWJsaW5nICYmIGFyZUlkZW50aWNhbEVsZW1lbnRzKGVuZE5vZGUsIG5leHRT
aWJsaW5nKSkgewotICAgICAgICBFbGVtZW50ICpuZXh0RWxlbWVudCA9IHN0YXRpY19jYXN0PEVs
ZW1lbnQgKj4obmV4dFNpYmxpbmcpOwotICAgICAgICBFbGVtZW50ICplbGVtZW50ID0gc3RhdGlj
X2Nhc3Q8RWxlbWVudCAqPihlbmROb2RlKTsKLSAgICAgICAgTm9kZSAqbmV4dENoaWxkID0gbmV4
dEVsZW1lbnQtPmZpcnN0Q2hpbGQoKTsKKyAgICAgICAgRWxlbWVudCogbmV4dEVsZW1lbnQgPSBz
dGF0aWNfY2FzdDxFbGVtZW50ICo+KG5leHRTaWJsaW5nKTsKKyAgICAgICAgRWxlbWVudCogZWxl
bWVudCA9IHN0YXRpY19jYXN0PEVsZW1lbnQgKj4oZW5kTm9kZSk7CisgICAgICAgIE5vZGUqIG5l
eHRDaGlsZCA9IG5leHRFbGVtZW50LT5maXJzdENoaWxkKCk7CiAKICAgICAgICAgbWVyZ2VJZGVu
dGljYWxFbGVtZW50cyhlbGVtZW50LCBuZXh0RWxlbWVudCk7CiAKLSAgICAgICAgTm9kZSAqc3Rh
cnROb2RlID0gc3RhcnQubm9kZSgpID09IGVuZE5vZGUgPyBuZXh0RWxlbWVudCA6IHN0YXJ0Lm5v
ZGUoKTsKLSAgICAgICAgQVNTRVJUKHN0YXJ0Tm9kZSk7Ci0KKyAgICAgICAgYm9vbCBzaG91bGRV
cGRhdGVTdGFydCA9IHN0YXJ0LmNvbnRhaW5lck5vZGUoKSA9PSBlbmROb2RlOwogICAgICAgICBp
bnQgZW5kT2Zmc2V0ID0gbmV4dENoaWxkID8gbmV4dENoaWxkLT5ub2RlSW5kZXgoKSA6IG5leHRF
bGVtZW50LT5jaGlsZE5vZGVzKCktPmxlbmd0aCgpOwotICAgICAgICB1cGRhdGVTdGFydEVuZChQ
b3NpdGlvbihzdGFydE5vZGUsIHN0YXJ0LmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkpLCBQb3Np
dGlvbihuZXh0RWxlbWVudCwgZW5kT2Zmc2V0KSk7CisgICAgICAgIHVwZGF0ZVN0YXJ0RW5kKHNo
b3VsZFVwZGF0ZVN0YXJ0ID8gUG9zaXRpb24obmV4dEVsZW1lbnQsIHN0YXJ0Lm9mZnNldEluQ29u
dGFpbmVyTm9kZSgpLCBQb3NpdGlvbjo6UG9zaXRpb25Jc09mZnNldEluQW5jaG9yKSA6IHN0YXJ0
LAorICAgICAgICAgICAgICAgICAgICAgICBQb3NpdGlvbihuZXh0RWxlbWVudCwgZW5kT2Zmc2V0
LCBQb3NpdGlvbjo6UG9zaXRpb25Jc09mZnNldEluQW5jaG9yKSk7CiAgICAgICAgIHJldHVybiB0
cnVlOwogICAgIH0KIApAQCAtMTg4MCw0MSArMTg5Miw0MCBAQCB2b2lkIEFwcGx5U3R5bGVDb21t
YW5kOjphZGRJbmxpbmVTdHlsZUlmCiAgICAgICAgIHN1cnJvdW5kTm9kZVJhbmdlV2l0aEVsZW1l
bnQoc3RhcnROb2RlLCBlbmROb2RlLCBtX3N0eWxlZElubGluZUVsZW1lbnQtPmNsb25lRWxlbWVu
dFdpdGhvdXRDaGlsZHJlbigpKTsKIH0KIAotZmxvYXQgQXBwbHlTdHlsZUNvbW1hbmQ6OmNvbXB1
dGVkRm9udFNpemUoY29uc3QgTm9kZSAqbm9kZSkKK2Zsb2F0IEFwcGx5U3R5bGVDb21tYW5kOjpj
b21wdXRlZEZvbnRTaXplKE5vZGUqIG5vZGUpCiB7CiAgICAgaWYgKCFub2RlKQogICAgICAgICBy
ZXR1cm4gMDsKLSAgICAKLSAgICBQb3NpdGlvbiBwb3MoY29uc3RfY2FzdDxOb2RlICo+KG5vZGUp
LCAwKTsKLSAgICBSZWZQdHI8Q1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uPiBjb21wdXRlZFN0
eWxlID0gcG9zLmNvbXB1dGVkU3R5bGUoKTsKLSAgICBpZiAoIWNvbXB1dGVkU3R5bGUpCisKKyAg
ICBSZWZQdHI8Q1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uPiBzdHlsZSA9IGNvbXB1dGVkU3R5
bGUobm9kZSk7CisgICAgaWYgKCFzdHlsZSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBSZWZQ
dHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHZhbHVlID0gc3RhdGljX3BvaW50ZXJfY2FzdDxDU1NQcmlt
aXRpdmVWYWx1ZT4oY29tcHV0ZWRTdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0
eUZvbnRTaXplKSk7CisgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiB2YWx1ZSA9IHN0YXRp
Y19wb2ludGVyX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHN0eWxlLT5nZXRQcm9wZXJ0eUNTU1Zh
bHVlKENTU1Byb3BlcnR5Rm9udFNpemUpKTsKICAgICBpZiAoIXZhbHVlKQogICAgICAgICByZXR1
cm4gMDsKIAogICAgIHJldHVybiB2YWx1ZS0+Z2V0RmxvYXRWYWx1ZShDU1NQcmltaXRpdmVWYWx1
ZTo6Q1NTX1BYKTsKIH0KIAotdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6am9pbkNoaWxkVGV4dE5v
ZGVzKE5vZGUgKm5vZGUsIGNvbnN0IFBvc2l0aW9uICZzdGFydCwgY29uc3QgUG9zaXRpb24gJmVu
ZCkKK3ZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OmpvaW5DaGlsZFRleHROb2RlcyhOb2RlKiBub2Rl
LCBjb25zdCBQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IFBvc2l0aW9uJiBlbmQpCiB7CiAgICAgaWYg
KCFub2RlKQogICAgICAgICByZXR1cm47CiAKICAgICBQb3NpdGlvbiBuZXdTdGFydCA9IHN0YXJ0
OwogICAgIFBvc2l0aW9uIG5ld0VuZCA9IGVuZDsKLSAgICAKLSAgICBOb2RlICpjaGlsZCA9IG5v
ZGUtPmZpcnN0Q2hpbGQoKTsKKworICAgIE5vZGUqIGNoaWxkID0gbm9kZS0+Zmlyc3RDaGlsZCgp
OwogICAgIHdoaWxlIChjaGlsZCkgewotICAgICAgICBOb2RlICpuZXh0ID0gY2hpbGQtPm5leHRT
aWJsaW5nKCk7CisgICAgICAgIE5vZGUqIG5leHQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKTsKICAg
ICAgICAgaWYgKGNoaWxkLT5pc1RleHROb2RlKCkgJiYgbmV4dCAmJiBuZXh0LT5pc1RleHROb2Rl
KCkpIHsKLSAgICAgICAgICAgIFRleHQgKmNoaWxkVGV4dCA9IHN0YXRpY19jYXN0PFRleHQgKj4o
Y2hpbGQpOwotICAgICAgICAgICAgVGV4dCAqbmV4dFRleHQgPSBzdGF0aWNfY2FzdDxUZXh0ICo+
KG5leHQpOwotICAgICAgICAgICAgaWYgKG5leHQgPT0gc3RhcnQubm9kZSgpKQotICAgICAgICAg
ICAgICAgIG5ld1N0YXJ0ID0gUG9zaXRpb24oY2hpbGRUZXh0LCBjaGlsZFRleHQtPmxlbmd0aCgp
ICsgc3RhcnQuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSk7Ci0gICAgICAgICAgICBpZiAobmV4
dCA9PSBlbmQubm9kZSgpKQotICAgICAgICAgICAgICAgIG5ld0VuZCA9IFBvc2l0aW9uKGNoaWxk
VGV4dCwgY2hpbGRUZXh0LT5sZW5ndGgoKSArIGVuZC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgp
KTsKKyAgICAgICAgICAgIFRleHQqIGNoaWxkVGV4dCA9IHN0YXRpY19jYXN0PFRleHQgKj4oY2hp
bGQpOworICAgICAgICAgICAgVGV4dCogbmV4dFRleHQgPSBzdGF0aWNfY2FzdDxUZXh0ICo+KG5l
eHQpOworICAgICAgICAgICAgaWYgKHN0YXJ0LmFuY2hvclR5cGUoKSA9PSBQb3NpdGlvbjo6UG9z
aXRpb25Jc09mZnNldEluQW5jaG9yICYmIG5leHQgPT0gc3RhcnQuY29udGFpbmVyTm9kZSgpKQor
ICAgICAgICAgICAgICAgIG5ld1N0YXJ0ID0gUG9zaXRpb24oY2hpbGRUZXh0LCBjaGlsZFRleHQt
Pmxlbmd0aCgpICsgc3RhcnQub2Zmc2V0SW5Db250YWluZXJOb2RlKCksIFBvc2l0aW9uOjpQb3Np
dGlvbklzT2Zmc2V0SW5BbmNob3IpOworICAgICAgICAgICAgaWYgKGVuZC5hbmNob3JUeXBlKCkg
PT0gUG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvciAmJiBuZXh0ID09IGVuZC5jb250
YWluZXJOb2RlKCkpCisgICAgICAgICAgICAgICAgbmV3RW5kID0gUG9zaXRpb24oY2hpbGRUZXh0
LCBjaGlsZFRleHQtPmxlbmd0aCgpICsgZW5kLm9mZnNldEluQ29udGFpbmVyTm9kZSgpLCBQb3Np
dGlvbjo6UG9zaXRpb25Jc09mZnNldEluQW5jaG9yKTsKICAgICAgICAgICAgIFN0cmluZyB0ZXh0
VG9Nb3ZlID0gbmV4dFRleHQtPmRhdGEoKTsKICAgICAgICAgICAgIGluc2VydFRleHRJbnRvTm9k
ZShjaGlsZFRleHQsIGNoaWxkVGV4dC0+bGVuZ3RoKCksIHRleHRUb01vdmUpOwogICAgICAgICAg
ICAgcmVtb3ZlTm9kZShuZXh0KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlT
dHlsZUNvbW1hbmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGx5
U3R5bGVDb21tYW5kLmgJKHJldmlzaW9uIDc1NTY1KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9BcHBseVN0eWxlQ29tbWFuZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDgsNyArMTA4LDcgQEAg
cHJpdmF0ZToKICAgICB2b2lkIGNsZWFudXBVbnN0eWxlZEFwcGxlU3R5bGVTcGFucyhOb2RlKiBk
dW1teVNwYW5BbmNlc3Rvcik7CiAKICAgICB2b2lkIHN1cnJvdW5kTm9kZVJhbmdlV2l0aEVsZW1l
bnQoUGFzc1JlZlB0cjxOb2RlPiBzdGFydCwgUGFzc1JlZlB0cjxOb2RlPiBlbmQsIFBhc3NSZWZQ
dHI8RWxlbWVudD4pOwotICAgIGZsb2F0IGNvbXB1dGVkRm9udFNpemUoY29uc3QgTm9kZSopOwor
ICAgIGZsb2F0IGNvbXB1dGVkRm9udFNpemUoTm9kZSopOwogICAgIHZvaWQgam9pbkNoaWxkVGV4
dE5vZGVzKE5vZGUqLCBjb25zdCBQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IFBvc2l0aW9uJiBlbmQp
OwogCiAgICAgSFRNTEVsZW1lbnQqIHNwbGl0QW5jZXN0b3JzV2l0aFVuaWNvZGVCaWRpKE5vZGUq
LCBib29sIGJlZm9yZSwgaW50IGFsbG93ZWREaXJlY3Rpb24pOwpJbmRleDogU291cmNlL1dlYkNv
cmUvZWRpdGluZy9odG1sZWRpdGluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvaHRtbGVkaXRpbmcuaAkocmV2aXNpb24gNzU1NjUpCisrKyBTb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL2h0bWxlZGl0aW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTExNCw3ICsxMTQsMTcgQEAg
UG9zaXRpb24gcG9zaXRpb25CZWZvcmVUYWJTcGFuKGNvbnN0IFBvcwogUG9zaXRpb24gcG9zaXRp
b25CZWZvcmVDb250YWluaW5nU3BlY2lhbEVsZW1lbnQoY29uc3QgUG9zaXRpb24mLCBOb2RlKiog
Y29udGFpbmluZ1NwZWNpYWxFbGVtZW50PTApOwogUG9zaXRpb24gcG9zaXRpb25BZnRlckNvbnRh
aW5pbmdTcGVjaWFsRWxlbWVudChjb25zdCBQb3NpdGlvbiYsIE5vZGUqKiBjb250YWluaW5nU3Bl
Y2lhbEVsZW1lbnQ9MCk7CiBQb3NpdGlvbiBwb3NpdGlvbk91dHNpZGVDb250YWluaW5nU3BlY2lh
bEVsZW1lbnQoY29uc3QgUG9zaXRpb24mLCBOb2RlKiogY29udGFpbmluZ1NwZWNpYWxFbGVtZW50
PTApOwotICAgIAorCitpbmxpbmUgUG9zaXRpb24gZmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2Rl
KE5vZGUqIG5vZGUpCit7CisgICAgcmV0dXJuIGNhbkhhdmVDaGlsZHJlbkZvckVkaXRpbmcobm9k
ZSkgPyBmaXJzdFBvc2l0aW9uSW5Ob2RlKG5vZGUpIDogcG9zaXRpb25CZWZvcmVOb2RlKG5vZGUp
OworfQorCitpbmxpbmUgUG9zaXRpb24gbGFzdFBvc2l0aW9uSW5PckFmdGVyTm9kZShOb2RlKiBu
b2RlKQoreworICAgIHJldHVybiBjYW5IYXZlQ2hpbGRyZW5Gb3JFZGl0aW5nKG5vZGUpID8gbGFz
dFBvc2l0aW9uSW5Ob2RlKG5vZGUpIDogcG9zaXRpb25BZnRlck5vZGUobm9kZSk7Cit9CisKIC8v
IFBvc2l0aW9uIGNyZWF0aW9uIGZ1bmN0aW9ucyBhcmUgaW5saW5lIHRvIHByZXZlbnQgcmVmLWNo
dXJuLgogLy8gT3RoZXIgUG9zaXRpb24gY3JlYXRpb24gZnVuY3Rpb25zIGFyZSBpbiBQb3NpdGlv
bi5oCiAvLyBidXQgdGhlc2UgZGVwZW5kIG9uIGxhc3RPZmZzZXRGb3JFZGl0aW5nIHdoaWNoIGlz
IGRlZmluZWQgaW4gaHRtbGVkaXRpbmcuaC4K
</data>
<flag name="review"
          id="69984"
          type_id="1"
          status="+"
          setter="eric"
    />
          </attachment>
      

    </bug>

</bugzilla>