<?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>53911</bug_id>
          
          <creation_ts>2011-02-07 01:33:04 -0800</creation_ts>
          <short_desc>Deploy EditingStyle in applyBlockStyle and applyInlineStyle</short_desc>
          <delta_ts>2011-02-12 04:38:26 -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>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>49956</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>ojan</cc>
    
    <cc>tony</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>346517</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-02-07 01:33:04 -0800</bug_when>
    <thetext>ApplyStyleCommand::applyBlockStyle and ApplyStyleCommand::applyInlineStyle should take EditingStyle* instead of CSSMutableStyleDeclaration* and they should also use EditingStyle&apos;s methods.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>346520</commentid>
    <comment_count>1</comment_count>
      <attachid>81464</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-02-07 01:47:56 -0800</bug_when>
    <thetext>Created attachment 81464
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>348779</commentid>
    <comment_count>2</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-02-09 19:43:39 -0800</bug_when>
    <thetext>Could someone review this patch?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>349149</commentid>
    <comment_count>3</comment_count>
      <attachid>81464</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2011-02-10 09:59:01 -0800</bug_when>
    <thetext>Comment on attachment 81464
Patch

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

&gt; Source/WebCore/ChangeLog:21
&gt; +        (WebCore::ApplyStyleCommand::removeInlineStyleFromElement): Allows style to be null; exit early instead.

Is this because of the changes to removeInlineStyle() at ApplyStyleCommand.cpp:917,921?

&gt; Source/WebCore/editing/ApplyStyleCommand.cpp:895
&gt; +        style-&gt;textDirection(textDirection);

Nit: Do you need to check the return value here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>349503</commentid>
    <comment_count>4</comment_count>
      <attachid>81464</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-02-10 16:41:36 -0800</bug_when>
    <thetext>Comment on attachment 81464
Patch

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

Thanks for the review, Tony.

&gt;&gt; Source/WebCore/ChangeLog:21
&gt;&gt; +        (WebCore::ApplyStyleCommand::removeInlineStyleFromElement): Allows style to be null; exit early instead.
&gt; 
&gt; Is this because of the changes to removeInlineStyle() at ApplyStyleCommand.cpp:917,921?

Not really.  The reason is that EditingStyle::style() can return a null-pointer, and these functions previously assumed that the style is always not null.

&gt;&gt; Source/WebCore/editing/ApplyStyleCommand.cpp:895
&gt;&gt; +        style-&gt;textDirection(textDirection);
&gt; 
&gt; Nit: Do you need to check the return value here?

Oops, I must have done:
ASSERT(style-&gt;textDirection(textDirection));</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>349510</commentid>
    <comment_count>5</comment_count>
    <who name="Tony Chang">tony</who>
    <bug_when>2011-02-10 16:58:23 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; &gt; Is this because of the changes to removeInlineStyle() at ApplyStyleCommand.cpp:917,921?
&gt; 
&gt; Not really.  The reason is that EditingStyle::style() can return a null-pointer, and these functions previously assumed that the style is always not null.

I think the change is fine, but it would be nice if you had a test case that showed this possibility.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>349515</commentid>
    <comment_count>6</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-02-10 17:04:08 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; (In reply to comment #4)
&gt; &gt; &gt; Is this because of the changes to removeInlineStyle() at ApplyStyleCommand.cpp:917,921?
&gt; &gt; 
&gt; &gt; Not really.  The reason is that EditingStyle::style() can return a null-pointer, and these functions previously assumed that the style is always not null.
&gt; 
&gt; I think the change is fine, but it would be nice if you had a test case that showed this possibility.

Oh, indeed some existing tests crash without this change because any test that inserts anchor element has null style pointer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>350259</commentid>
    <comment_count>7</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-02-12 04:38:26 -0800</bug_when>
    <thetext>Committed r78417: &lt;http://trac.webkit.org/changeset/78417&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>81464</attachid>
            <date>2011-02-07 01:47:56 -0800</date>
            <delta_ts>2011-02-10 16:41:36 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-53911-20110207014755.patch</filename>
            <type>text/plain</type>
            <size>20345</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc3NzkzKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzQgQEAKKzIwMTEtMDItMDcgIFJ5b3N1a2Ug
Tml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgRGVwbG95IEVkaXRpbmdTdHlsZSBpbiBhcHBseUJsb2NrU3R5bGUg
YW5kIGFwcGx5SW5saW5lU3R5bGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTUzOTExCisKKyAgICAgICAgRGVwbG95ZWQgRWRpdGluZ1N0eWxlIGluIEFw
cGx5U3R5bGVDb21tYW5kOjphcHBseUJsb2NrU3R5bGUgYW5kIEFwcGx5U3R5bGVDb21tYW5kOjph
cHBseUlubGluZVN0eWxlLgorICAgICAgICBFeHRyYWN0ZWQgRWRpdGluZ1N0eWxlOjpleHRyYWN0
QW5kUmVtb3ZlVGV4dERpcmVjdGlvbiBmcm9tIGFwcGx5SW5saW5lU3R5bGUuCisgICAgICAgIEFs
c28gYWRkZWQgcHJvcGVydGllc1RvSW5jbHVkZSB0byB0aGUgYXJndW1lbnQgbGlzdCBvZiBFZGl0
aW5nU3R5bGUncyBjb25zdHJ1Y3RvciB0aGF0IHRha2VzIE5vZGUqCisgICAgICAgIHNvIHRoYXQg
c3BsaXRBbmNlc3RvcnNXaXRoVW5pY29kZUJpZGkgY2FuIGNhbGwgRWRpdGluZ1N0eWxlOjp0ZXh0
RGlyZWN0aW9uIHRvIG9idGFpbiB0aGUgdGV4dCBkaXJlY3Rpb24uCisKKyAgICAgICAgTm8gbmV3
IHRlc3RzIGFyZSBhZGRlZCBzaW5jZSB0aGlzIGlzIGEgcmVmYWN0b3JpbmcuCisKKyAgICAgICAg
KiBlZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5
U3R5bGVDb21tYW5kOjpkb0FwcGx5KTogUGFzc2VzIEVkaXRpbmdTdHlsZSogdG8gYXBwbHlCbG9j
a1N0eWxlIGFuZCBhcHBseUlubGluZVN0eWxlLgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlTdHls
ZUNvbW1hbmQ6OmFwcGx5QmxvY2tTdHlsZSk6IFRha2VzIEVkaXRpbmdTdHlsZSouCisgICAgICAg
IChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6c3BsaXRBbmNlc3RvcnNXaXRoVW5pY29kZUJp
ZGkpOiBDaGFuZ2VkIHRoZSB0eXBlIG9mIGFsbG93ZWREaXJlY3Rpb24KKyAgICAgICAgZnJvbSBp
bnQgdG8gV3JpdGluZ0RpcmVjdGlvbi4gVXNlcyBFZGl0aW5nU3R5bGUncyB0ZXh0RGlyZWN0aW9u
IHRvIG9idGFpbiB0aGUgd3JpdGluZyBkaXJlY3Rpb24uCisgICAgICAgIChXZWJDb3JlOjpBcHBs
eVN0eWxlQ29tbWFuZDo6YXBwbHlJbmxpbmVTdHlsZSk6IFRha2VzIEVkaXRpbmdTdHlsZSouCisg
ICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6cmVtb3ZlSW5saW5lU3R5bGVGcm9t
RWxlbWVudCk6IEFsbG93cyBzdHlsZSB0byBiZSBudWxsOyBleGl0IGVhcmx5IGluc3RlYWQuCisg
ICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6cmVtb3ZlSW1wbGljaXRseVN0eWxl
ZEVsZW1lbnQpOiBBc3NlcnRzIHRoYXQgc3R5bGUgaXMgbm90IG51bGwuCisgICAgICAgIChXZWJD
b3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6cmVtb3ZlSW5saW5lU3R5bGUpOiBBbGxvd3Mgc3R5bGUg
dG8gYmUgbnVsbC4KKyAgICAgICAgKiBlZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmg6IEluY2x1
ZGVzIFdyaXRpbmdEaXJlY3Rpb24uaDsgcHJvdG90eXBlIGNoYW5nZXMuCisgICAgICAgICogZWRp
dGluZy9FZGl0aW5nU3R5bGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWRpdGluZ1N0eWxlOjpF
ZGl0aW5nU3R5bGUpOiBBZGRlZCBQcm9wZXJ0aWVzVG9JbmNsdWRlIHRvIHRoZSBhcmd1bWVudC4K
KyAgICAgICAgKFdlYkNvcmU6OkVkaXRpbmdTdHlsZTo6aW5pdCk6IFN1cHBvcnRzIFByb3BlcnRp
ZXNUb0luY2x1ZGUuCisgICAgICAgIChXZWJDb3JlOjpFZGl0aW5nU3R5bGU6OmV4dHJhY3RBbmRS
ZW1vdmVUZXh0RGlyZWN0aW9uKTogRXh0cmFjdGVkIGZyb20gYXBwbHlJbmxpbmVTdHlsZS4KKyAg
ICAgICAgKiBlZGl0aW5nL0VkaXRpbmdTdHlsZS5oOgorICAgICAgICAoV2ViQ29yZTo6RWRpdGlu
Z1N0eWxlOjpjcmVhdGUpOiBTdXBwb3J0cyBQcm9wZXJ0aWVzVG9JbmNsdWRlLgorCiAyMDExLTAy
LTA2ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2Vk
IGJ5IERhcmluIEFkbGVyLgpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxl
Q29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBseVN0
eWxlQ29tbWFuZC5jcHAJKHJldmlzaW9uIDc3Nzg4KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9BcHBseVN0eWxlQ29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyMiwxOCArNTIyLDE3
IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OmRvQXBwbHkoKQogICAgICAgICAvLyBBcHBseSB0
aGUgYmxvY2stY2VudHJpYyBwcm9wZXJ0aWVzIG9mIHRoZSBzdHlsZS4KICAgICAgICAgUmVmUHRy
PEVkaXRpbmdTdHlsZT4gYmxvY2tTdHlsZSA9IG1fc3R5bGUtPmV4dHJhY3RBbmRSZW1vdmVCbG9j
a1Byb3BlcnRpZXMoKTsKICAgICAgICAgaWYgKCFibG9ja1N0eWxlLT5pc0VtcHR5KCkpCi0gICAg
ICAgICAgICBhcHBseUJsb2NrU3R5bGUoYmxvY2tTdHlsZS0+c3R5bGUoKSk7CisgICAgICAgICAg
ICBhcHBseUJsb2NrU3R5bGUoYmxvY2tTdHlsZS5nZXQoKSk7CiAgICAgICAgIC8vIEFwcGx5IGFu
eSByZW1haW5pbmcgc3R5bGVzIHRvIHRoZSBpbmxpbmUgZWxlbWVudHMuCiAgICAgICAgIGlmICgh
bV9zdHlsZS0+aXNFbXB0eSgpIHx8IG1fc3R5bGVkSW5saW5lRWxlbWVudCB8fCBtX2lzSW5saW5l
RWxlbWVudFRvUmVtb3ZlRnVuY3Rpb24pIHsKLSAgICAgICAgICAgIFJlZlB0cjxDU1NNdXRhYmxl
U3R5bGVEZWNsYXJhdGlvbj4gc3R5bGUgPSBtX3N0eWxlLT5zdHlsZSgpID8gbV9zdHlsZS0+c3R5
bGUoKSA6IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpjcmVhdGUoKTsKICAgICAgICAgICAg
IGFwcGx5UmVsYXRpdmVGb250U3R5bGVDaGFuZ2UobV9zdHlsZS5nZXQoKSk7Ci0gICAgICAgICAg
ICBhcHBseUlubGluZVN0eWxlKHN0eWxlLmdldCgpKTsKKyAgICAgICAgICAgIGFwcGx5SW5saW5l
U3R5bGUobV9zdHlsZS5nZXQoKSk7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgfQog
ICAgIGNhc2UgRm9yY2VCbG9ja1Byb3BlcnRpZXM6CiAgICAgICAgIC8vIEZvcmNlIGFsbCBwcm9w
ZXJ0aWVzIHRvIGJlIGFwcGxpZWQgYXMgYmxvY2sgc3R5bGVzLgotICAgICAgICBhcHBseUJsb2Nr
U3R5bGUobV9zdHlsZS0+c3R5bGUoKSk7CisgICAgICAgIGFwcGx5QmxvY2tTdHlsZShtX3N0eWxl
LmdldCgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogfQpAQCAtNTQzLDcgKzU0Miw3IEBAIEVk
aXRBY3Rpb24gQXBwbHlTdHlsZUNvbW1hbmQ6OmVkaXRpbmdBY3QKICAgICByZXR1cm4gbV9lZGl0
aW5nQWN0aW9uOwogfQogCi12b2lkIEFwcGx5U3R5bGVDb21tYW5kOjphcHBseUJsb2NrU3R5bGUo
Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24gKnN0eWxlKQordm9pZCBBcHBseVN0eWxlQ29tbWFu
ZDo6YXBwbHlCbG9ja1N0eWxlKEVkaXRpbmdTdHlsZSAqc3R5bGUpCiB7CiAgICAgLy8gdXBkYXRl
IGRvY3VtZW50IGxheW91dCBvbmNlIGJlZm9yZSByZW1vdmluZyBzdHlsZXMKICAgICAvLyBzbyB0
aGF0IHdlIGF2b2lkIHRoZSBleHBlbnNlIG9mIHVwZGF0aW5nIGJlZm9yZSBlYWNoIGFuZCBldmVy
eSBjYWxsCkBAIC01NzgsNyArNTc3LDcgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlC
bG9ja1N0eWxlKAogICAgIFZpc2libGVQb3NpdGlvbiBuZXh0UGFyYWdyYXBoU3RhcnQoZW5kT2ZQ
YXJhZ3JhcGgocGFyYWdyYXBoU3RhcnQpLm5leHQoKSk7CiAgICAgVmlzaWJsZVBvc2l0aW9uIGJl
eW9uZEVuZChlbmRPZlBhcmFncmFwaCh2aXNpYmxlRW5kKS5uZXh0KCkpOwogICAgIHdoaWxlIChw
YXJhZ3JhcGhTdGFydC5pc05vdE51bGwoKSAmJiBwYXJhZ3JhcGhTdGFydCAhPSBiZXlvbmRFbmQp
IHsKLSAgICAgICAgU3R5bGVDaGFuZ2Ugc3R5bGVDaGFuZ2Uoc3R5bGUsIHBhcmFncmFwaFN0YXJ0
LmRlZXBFcXVpdmFsZW50KCkpOworICAgICAgICBTdHlsZUNoYW5nZSBzdHlsZUNoYW5nZShzdHls
ZS0+c3R5bGUoKSwgcGFyYWdyYXBoU3RhcnQuZGVlcEVxdWl2YWxlbnQoKSk7CiAgICAgICAgIGlm
IChzdHlsZUNoYW5nZS5jc3NTdHlsZSgpLmxlbmd0aCgpIHx8IG1fcmVtb3ZlT25seSkgewogICAg
ICAgICAgICAgUmVmUHRyPE5vZGU+IGJsb2NrID0gZW5jbG9zaW5nQmxvY2socGFyYWdyYXBoU3Rh
cnQuZGVlcEVxdWl2YWxlbnQoKS5ub2RlKCkpOwogICAgICAgICAgICAgaWYgKCFtX3JlbW92ZU9u
bHkpIHsKQEAgLTU4OCw3ICs1ODcsNyBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjphcHBseUJs
b2NrU3R5bGUoCiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBBU1NFUlQoYmxvY2stPmlzSFRN
TEVsZW1lbnQoKSk7CiAgICAgICAgICAgICBpZiAoYmxvY2stPmlzSFRNTEVsZW1lbnQoKSkgewot
ICAgICAgICAgICAgICAgIHJlbW92ZUNTU1N0eWxlKHN0eWxlLCBzdGF0aWNfY2FzdDxIVE1MRWxl
bWVudCo+KGJsb2NrLmdldCgpKSk7CisgICAgICAgICAgICAgICAgcmVtb3ZlQ1NTU3R5bGUoc3R5
bGUtPnN0eWxlKCksIHN0YXRpY19jYXN0PEhUTUxFbGVtZW50Kj4oYmxvY2suZ2V0KCkpKTsKICAg
ICAgICAgICAgICAgICBpZiAoIW1fcmVtb3ZlT25seSkKICAgICAgICAgICAgICAgICAgICAgYWRk
QmxvY2tTdHlsZShzdHlsZUNoYW5nZSwgc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnQqPihibG9jay5n
ZXQoKSkpOwogICAgICAgICAgICAgfQpAQCAtNzQxLDcgKzc0MCw3IEBAIHZvaWQgQXBwbHlTdHls
ZUNvbW1hbmQ6OmNsZWFudXBVbnN0eWxlZEEKICAgICB9CiB9CiAKLUhUTUxFbGVtZW50KiBBcHBs
eVN0eWxlQ29tbWFuZDo6c3BsaXRBbmNlc3RvcnNXaXRoVW5pY29kZUJpZGkoTm9kZSogbm9kZSwg
Ym9vbCBiZWZvcmUsIGludCBhbGxvd2VkRGlyZWN0aW9uKQorSFRNTEVsZW1lbnQqIEFwcGx5U3R5
bGVDb21tYW5kOjpzcGxpdEFuY2VzdG9yc1dpdGhVbmljb2RlQmlkaShOb2RlKiBub2RlLCBib29s
IGJlZm9yZSwgV3JpdGluZ0RpcmVjdGlvbiBhbGxvd2VkRGlyZWN0aW9uKQogewogICAgIC8vIFdl
IGFyZSBhbGxvd2VkIHRvIGxlYXZlIHRoZSBoaWdoZXN0IGFuY2VzdG9yIHdpdGggdW5pY29kZS1i
aWRpIHVuc3BsaXQgaWYgaXQgaXMgdW5pY29kZS1iaWRpOiBlbWJlZCBhbmQgZGlyZWN0aW9uOiBh
bGxvd2VkRGlyZWN0aW9uLgogICAgIC8vIEluIHRoYXQgY2FzZSwgd2UgcmV0dXJuIHRoZSB1bnNw
bGl0IGFuY2VzdG9yLiBPdGhlcndpc2UsIHdlIHJldHVybiAwLgpAQCAtNzY2LDkgKzc2NSwxMiBA
QCBIVE1MRWxlbWVudCogQXBwbHlTdHlsZUNvbW1hbmQ6OnNwbGl0QW5jCiAKICAgICBIVE1MRWxl
bWVudCogdW5zcGxpdEFuY2VzdG9yID0gMDsKIAotICAgIGlmIChhbGxvd2VkRGlyZWN0aW9uICYm
IGhpZ2hlc3RBbmNlc3RvclVuaWNvZGVCaWRpICE9IENTU1ZhbHVlQmlkaU92ZXJyaWRlCi0gICAg
ICAgICYmIGdldElkZW50aWZpZXJWYWx1ZShjb21wdXRlZFN0eWxlKGhpZ2hlc3RBbmNlc3Rvcldp
dGhVbmljb2RlQmlkaSkuZ2V0KCksIENTU1Byb3BlcnR5RGlyZWN0aW9uKSA9PSBhbGxvd2VkRGly
ZWN0aW9uCi0gICAgICAgICYmIGhpZ2hlc3RBbmNlc3RvcldpdGhVbmljb2RlQmlkaS0+aXNIVE1M
RWxlbWVudCgpKSB7CisgICAgV3JpdGluZ0RpcmVjdGlvbiBoaWdoZXN0QW5jZXN0b3JEaXJlY3Rp
b247CisgICAgaWYgKGFsbG93ZWREaXJlY3Rpb24gIT0gTmF0dXJhbFdyaXRpbmdEaXJlY3Rpb24K
KyAgICAgICAgJiYgaGlnaGVzdEFuY2VzdG9yVW5pY29kZUJpZGkgIT0gQ1NTVmFsdWVCaWRpT3Zl
cnJpZGUKKyAgICAgICAgJiYgaGlnaGVzdEFuY2VzdG9yV2l0aFVuaWNvZGVCaWRpLT5pc0hUTUxF
bGVtZW50KCkKKyAgICAgICAgJiYgRWRpdGluZ1N0eWxlOjpjcmVhdGUoaGlnaGVzdEFuY2VzdG9y
V2l0aFVuaWNvZGVCaWRpLCBFZGl0aW5nU3R5bGU6OkFsbFByb3BlcnRpZXMpLT50ZXh0RGlyZWN0
aW9uKGhpZ2hlc3RBbmNlc3RvckRpcmVjdGlvbikKKyAgICAgICAgJiYgaGlnaGVzdEFuY2VzdG9y
RGlyZWN0aW9uID09IGFsbG93ZWREaXJlY3Rpb24pIHsKICAgICAgICAgaWYgKCFuZXh0SGlnaGVz
dEFuY2VzdG9yV2l0aFVuaWNvZGVCaWRpKQogICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PEhUTUxFbGVtZW50Kj4oaGlnaGVzdEFuY2VzdG9yV2l0aFVuaWNvZGVCaWRpKTsKIApAQCAtODM2
LDcgKzgzOCw3IEBAIHN0YXRpYyBOb2RlKiBoaWdoZXN0RW1iZWRkaW5nQW5jZXN0b3IoTm8KICAg
ICByZXR1cm4gMDsKIH0KIAotdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlJbmxpbmVTdHls
ZShDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiAqc3R5bGUpCit2b2lkIEFwcGx5U3R5bGVDb21t
YW5kOjphcHBseUlubGluZVN0eWxlKEVkaXRpbmdTdHlsZSogc3R5bGUpCiB7CiAgICAgTm9kZSog
c3RhcnREdW1teVNwYW5BbmNlc3RvciA9IDA7CiAgICAgTm9kZSogZW5kRHVtbXlTcGFuQW5jZXN0
b3IgPSAwOwpAQCAtODU4LDcgKzg2MCw3IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OmFwcGx5
SW5saW5lU3R5bGUKICAgICAvLyBzcGxpdCB0aGUgc3RhcnQgbm9kZSBhbmQgY29udGFpbmluZyBl
bGVtZW50IGlmIHRoZSBzZWxlY3Rpb24gc3RhcnRzIGluc2lkZSBvZiBpdAogICAgIGJvb2wgc3Bs
aXRTdGFydCA9IGlzVmFsaWRDYXJldFBvc2l0aW9uSW5UZXh0Tm9kZShzdGFydCk7CiAgICAgaWYg
KHNwbGl0U3RhcnQpIHsKLSAgICAgICAgaWYgKHNob3VsZFNwbGl0VGV4dEVsZW1lbnQoc3RhcnQu
bm9kZSgpLT5wYXJlbnRFbGVtZW50KCksIHN0eWxlKSkKKyAgICAgICAgaWYgKHNob3VsZFNwbGl0
VGV4dEVsZW1lbnQoc3RhcnQubm9kZSgpLT5wYXJlbnRFbGVtZW50KCksIHN0eWxlLT5zdHlsZSgp
KSkKICAgICAgICAgICAgIHNwbGl0VGV4dEVsZW1lbnRBdFN0YXJ0KHN0YXJ0LCBlbmQpOwogICAg
ICAgICBlbHNlCiAgICAgICAgICAgICBzcGxpdFRleHRBdFN0YXJ0KHN0YXJ0LCBlbmQpOwpAQCAt
ODcwLDcgKzg3Miw3IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OmFwcGx5SW5saW5lU3R5bGUK
ICAgICAvLyBzcGxpdCB0aGUgZW5kIG5vZGUgYW5kIGNvbnRhaW5pbmcgZWxlbWVudCBpZiB0aGUg
c2VsZWN0aW9uIGVuZHMgaW5zaWRlIG9mIGl0CiAgICAgYm9vbCBzcGxpdEVuZCA9IGlzVmFsaWRD
YXJldFBvc2l0aW9uSW5UZXh0Tm9kZShlbmQpOwogICAgIGlmIChzcGxpdEVuZCkgewotICAgICAg
ICBpZiAoc2hvdWxkU3BsaXRUZXh0RWxlbWVudChlbmQubm9kZSgpLT5wYXJlbnRFbGVtZW50KCks
IHN0eWxlKSkKKyAgICAgICAgaWYgKHNob3VsZFNwbGl0VGV4dEVsZW1lbnQoZW5kLm5vZGUoKS0+
cGFyZW50RWxlbWVudCgpLCBzdHlsZS0+c3R5bGUoKSkpCiAgICAgICAgICAgICBzcGxpdFRleHRF
bGVtZW50QXRFbmQoc3RhcnQsIGVuZCk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHNwbGl0
VGV4dEF0RW5kKHN0YXJ0LCBlbmQpOwpAQCAtODg1LDE1ICs4ODcsMTYgQEAgdm9pZCBBcHBseVN0
eWxlQ29tbWFuZDo6YXBwbHlJbmxpbmVTdHlsZQogICAgIC8vIGFuZCBwcmV2ZW50IHVzIGZyb20g
YWRkaW5nIHJlZHVuZGFudCBvbmVzLCBhcyBkZXNjcmliZWQgaW46CiAgICAgLy8gPHJkYXI6Ly9w
cm9ibGVtLzM3MjQzNDQ+IEJvbGRpbmcgYW5kIHVuYm9sZGluZyBjcmVhdGVzIGV4dHJhbmVvdXMg
dGFncwogICAgIFBvc2l0aW9uIHJlbW92ZVN0YXJ0ID0gc3RhcnQudXBzdHJlYW0oKTsKLSAgICBp
bnQgdW5pY29kZUJpZGkgPSBnZXRJZGVudGlmaWVyVmFsdWUoc3R5bGUsIENTU1Byb3BlcnR5VW5p
Y29kZUJpZGkpOwotICAgIGludCBkaXJlY3Rpb24gPSAwOwotICAgIFJlZlB0cjxDU1NNdXRhYmxl
U3R5bGVEZWNsYXJhdGlvbj4gc3R5bGVXaXRob3V0RW1iZWRkaW5nOworICAgIGludCB1bmljb2Rl
QmlkaSA9IGdldElkZW50aWZpZXJWYWx1ZShzdHlsZS0+c3R5bGUoKSwgQ1NTUHJvcGVydHlVbmlj
b2RlQmlkaSk7CisgICAgUmVmUHRyPEVkaXRpbmdTdHlsZT4gc3R5bGVXaXRob3V0RW1iZWRkaW5n
OworICAgIFJlZlB0cjxFZGl0aW5nU3R5bGU+IGVtYmVkZGluZ1N0eWxlOwogICAgIGlmICh1bmlj
b2RlQmlkaSkgeworICAgICAgICBXcml0aW5nRGlyZWN0aW9uIHRleHREaXJlY3Rpb24gPSBOYXR1
cmFsV3JpdGluZ0RpcmVjdGlvbjsKKyAgICAgICAgc3R5bGUtPnRleHREaXJlY3Rpb24odGV4dERp
cmVjdGlvbik7CisKICAgICAgICAgLy8gTGVhdmUgYWxvbmUgYW4gYW5jZXN0b3IgdGhhdCBwcm92
aWRlcyB0aGUgZGVzaXJlZCBzaW5nbGUgbGV2ZWwgZW1iZWRkaW5nLCBpZiB0aGVyZSBpcyBvbmUu
Ci0gICAgICAgIGlmICh1bmljb2RlQmlkaSA9PSBDU1NWYWx1ZUVtYmVkKQotICAgICAgICAgICAg
ZGlyZWN0aW9uID0gZ2V0SWRlbnRpZmllclZhbHVlKHN0eWxlLCBDU1NQcm9wZXJ0eURpcmVjdGlv
bik7Ci0gICAgICAgIEhUTUxFbGVtZW50KiBzdGFydFVuc3BsaXRBbmNlc3RvciA9IHNwbGl0QW5j
ZXN0b3JzV2l0aFVuaWNvZGVCaWRpKHN0YXJ0Lm5vZGUoKSwgdHJ1ZSwgZGlyZWN0aW9uKTsKLSAg
ICAgICAgSFRNTEVsZW1lbnQqIGVuZFVuc3BsaXRBbmNlc3RvciA9IHNwbGl0QW5jZXN0b3JzV2l0
aFVuaWNvZGVCaWRpKGVuZC5ub2RlKCksIGZhbHNlLCBkaXJlY3Rpb24pOworICAgICAgICBIVE1M
RWxlbWVudCogc3RhcnRVbnNwbGl0QW5jZXN0b3IgPSBzcGxpdEFuY2VzdG9yc1dpdGhVbmljb2Rl
QmlkaShzdGFydC5ub2RlKCksIHRydWUsIHRleHREaXJlY3Rpb24pOworICAgICAgICBIVE1MRWxl
bWVudCogZW5kVW5zcGxpdEFuY2VzdG9yID0gc3BsaXRBbmNlc3RvcnNXaXRoVW5pY29kZUJpZGko
ZW5kLm5vZGUoKSwgZmFsc2UsIHRleHREaXJlY3Rpb24pOwogICAgICAgICByZW1vdmVFbWJlZGRp
bmdVcFRvRW5jbG9zaW5nQmxvY2soc3RhcnQubm9kZSgpLCBzdGFydFVuc3BsaXRBbmNlc3Rvcik7
CiAgICAgICAgIHJlbW92ZUVtYmVkZGluZ1VwVG9FbmNsb3NpbmdCbG9jayhlbmQubm9kZSgpLCBl
bmRVbnNwbGl0QW5jZXN0b3IpOwogCkBAIC05MDcsMTggKzkxMCwxNSBAQCB2b2lkIEFwcGx5U3R5
bGVDb21tYW5kOjphcHBseUlubGluZVN0eWxlCiAgICAgICAgICAgICBlbWJlZGRpbmdSZW1vdmVF
bmQgPSBwb3NpdGlvbkluUGFyZW50QmVmb3JlTm9kZShlbmRVbnNwbGl0QW5jZXN0b3IpLmRvd25z
dHJlYW0oKTsKIAogICAgICAgICBpZiAoZW1iZWRkaW5nUmVtb3ZlRW5kICE9IHJlbW92ZVN0YXJ0
IHx8IGVtYmVkZGluZ1JlbW92ZUVuZCAhPSBlbmQpIHsKLSAgICAgICAgICAgIFJlZlB0cjxDU1NN
dXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gZW1iZWRkaW5nU3R5bGUgPSBDU1NNdXRhYmxlU3R5bGVE
ZWNsYXJhdGlvbjo6Y3JlYXRlKCk7Ci0gICAgICAgICAgICBlbWJlZGRpbmdTdHlsZS0+c2V0UHJv
cGVydHkoQ1NTUHJvcGVydHlVbmljb2RlQmlkaSwgQ1NTVmFsdWVFbWJlZCk7Ci0gICAgICAgICAg
ICBlbWJlZGRpbmdTdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlEaXJlY3Rpb24sIGRpcmVj
dGlvbik7Ci0gICAgICAgICAgICBpZiAoY29tcGFyZVBvc2l0aW9ucyhlbWJlZGRpbmdSZW1vdmVT
dGFydCwgZW1iZWRkaW5nUmVtb3ZlRW5kKSA8PSAwKQotICAgICAgICAgICAgICAgIHJlbW92ZUlu
bGluZVN0eWxlKGVtYmVkZGluZ1N0eWxlLCBlbWJlZGRpbmdSZW1vdmVTdGFydCwgZW1iZWRkaW5n
UmVtb3ZlRW5kKTsKICAgICAgICAgICAgIHN0eWxlV2l0aG91dEVtYmVkZGluZyA9IHN0eWxlLT5j
b3B5KCk7Ci0gICAgICAgICAgICBzdHlsZVdpdGhvdXRFbWJlZGRpbmctPnJlbW92ZVByb3BlcnR5
KENTU1Byb3BlcnR5VW5pY29kZUJpZGkpOwotICAgICAgICAgICAgc3R5bGVXaXRob3V0RW1iZWRk
aW5nLT5yZW1vdmVQcm9wZXJ0eShDU1NQcm9wZXJ0eURpcmVjdGlvbik7CisgICAgICAgICAgICBl
bWJlZGRpbmdTdHlsZSA9IHN0eWxlV2l0aG91dEVtYmVkZGluZy0+ZXh0cmFjdEFuZFJlbW92ZVRl
eHREaXJlY3Rpb24oKTsKKworICAgICAgICAgICAgaWYgKGNvbXBhcmVQb3NpdGlvbnMoZW1iZWRk
aW5nUmVtb3ZlU3RhcnQsIGVtYmVkZGluZ1JlbW92ZUVuZCkgPD0gMCkKKyAgICAgICAgICAgICAg
ICByZW1vdmVJbmxpbmVTdHlsZShlbWJlZGRpbmdTdHlsZS0+c3R5bGUoKSwgZW1iZWRkaW5nUmVt
b3ZlU3RhcnQsIGVtYmVkZGluZ1JlbW92ZUVuZCk7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBy
ZW1vdmVJbmxpbmVTdHlsZShzdHlsZVdpdGhvdXRFbWJlZGRpbmcgPyBzdHlsZVdpdGhvdXRFbWJl
ZGRpbmcuZ2V0KCkgOiBzdHlsZSwgcmVtb3ZlU3RhcnQsIGVuZCk7CisgICAgcmVtb3ZlSW5saW5l
U3R5bGUoc3R5bGVXaXRob3V0RW1iZWRkaW5nID8gc3R5bGVXaXRob3V0RW1iZWRkaW5nLT5zdHls
ZSgpIDogc3R5bGUtPnN0eWxlKCksIHJlbW92ZVN0YXJ0LCBlbmQpOwogICAgIHN0YXJ0ID0gc3Rh
cnRQb3NpdGlvbigpOwogICAgIGVuZCA9IGVuZFBvc2l0aW9uKCk7CiAgICAgaWYgKHN0YXJ0Lmlz
TnVsbCgpIHx8IHN0YXJ0LmlzT3JwaGFuKCkgfHwgZW5kLmlzTnVsbCgpIHx8IGVuZC5pc09ycGhh
bigpKQpAQCAtOTQyLDcgKzk0Miw3IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OmFwcGx5SW5s
aW5lU3R5bGUKICAgICAvLyB0byBjaGVjayBhIGNvbXB1dGVkIHN0eWxlCiAgICAgdXBkYXRlTGF5
b3V0KCk7CiAKLSAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IHN0eWxlVG9B
cHBseSA9IHN0eWxlOworICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gc3R5
bGVUb0FwcGx5ID0gc3R5bGUtPmlzRW1wdHkoKSA/IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9u
OjpjcmVhdGUoKSA6IHN0eWxlLT5zdHlsZSgpOwogICAgIGlmICh1bmljb2RlQmlkaSkgewogICAg
ICAgICAvLyBBdm9pZCBhcHBseWluZyB0aGUgdW5pY29kZS1iaWRpIGFuZCBkaXJlY3Rpb24gcHJv
cGVydGllcyBiZW5lYXRoIGFuY2VzdG9ycyB0aGF0IGFscmVhZHkgaGF2ZSB0aGVtLgogICAgICAg
ICBOb2RlKiBlbWJlZGRpbmdTdGFydE5vZGUgPSBoaWdoZXN0RW1iZWRkaW5nQW5jZXN0b3Ioc3Rh
cnQubm9kZSgpLCBlbmNsb3NpbmdCbG9jayhzdGFydC5ub2RlKCkpKTsKQEAgLTk1MywxOCArOTUz
LDEzIEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OmFwcGx5SW5saW5lU3R5bGUKICAgICAgICAg
ICAgIFBvc2l0aW9uIGVtYmVkZGluZ0FwcGx5RW5kID0gZW1iZWRkaW5nRW5kTm9kZSA/IHBvc2l0
aW9uSW5QYXJlbnRCZWZvcmVOb2RlKGVtYmVkZGluZ0VuZE5vZGUpIDogZW5kOwogICAgICAgICAg
ICAgQVNTRVJUKGVtYmVkZGluZ0FwcGx5U3RhcnQuaXNOb3ROdWxsKCkgJiYgZW1iZWRkaW5nQXBw
bHlFbmQuaXNOb3ROdWxsKCkpOwogCi0gICAgICAgICAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxl
RGVjbGFyYXRpb24+IGVtYmVkZGluZ1N0eWxlID0gQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246
OmNyZWF0ZSgpOwotICAgICAgICAgICAgZW1iZWRkaW5nU3R5bGUtPnNldFByb3BlcnR5KENTU1By
b3BlcnR5VW5pY29kZUJpZGksIENTU1ZhbHVlRW1iZWQpOwotICAgICAgICAgICAgZW1iZWRkaW5n
U3R5bGUtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5RGlyZWN0aW9uLCBkaXJlY3Rpb24pOwotICAg
ICAgICAgICAgZml4UmFuZ2VBbmRBcHBseUlubGluZVN0eWxlKGVtYmVkZGluZ1N0eWxlLmdldCgp
LCBlbWJlZGRpbmdBcHBseVN0YXJ0LCBlbWJlZGRpbmdBcHBseUVuZCk7Ci0KLSAgICAgICAgICAg
IGlmIChzdHlsZVdpdGhvdXRFbWJlZGRpbmcpCi0gICAgICAgICAgICAgICAgc3R5bGVUb0FwcGx5
ID0gc3R5bGVXaXRob3V0RW1iZWRkaW5nOwotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgc3R5bGVUb0FwcGx5ID0gc3R5bGUtPmNvcHkoKTsKLSAgICAgICAgICAgICAgICBzdHls
ZVRvQXBwbHktPnJlbW92ZVByb3BlcnR5KENTU1Byb3BlcnR5VW5pY29kZUJpZGkpOwotICAgICAg
ICAgICAgICAgIHN0eWxlVG9BcHBseS0+cmVtb3ZlUHJvcGVydHkoQ1NTUHJvcGVydHlEaXJlY3Rp
b24pOworICAgICAgICAgICAgaWYgKCFlbWJlZGRpbmdTdHlsZSkgeworICAgICAgICAgICAgICAg
IHN0eWxlV2l0aG91dEVtYmVkZGluZyA9IHN0eWxlLT5jb3B5KCk7CisgICAgICAgICAgICAgICAg
ZW1iZWRkaW5nU3R5bGUgPSBzdHlsZVdpdGhvdXRFbWJlZGRpbmctPmV4dHJhY3RBbmRSZW1vdmVU
ZXh0RGlyZWN0aW9uKCk7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICBmaXhSYW5nZUFuZEFw
cGx5SW5saW5lU3R5bGUoZW1iZWRkaW5nU3R5bGUtPnN0eWxlKCksIGVtYmVkZGluZ0FwcGx5U3Rh
cnQsIGVtYmVkZGluZ0FwcGx5RW5kKTsKKworICAgICAgICAgICAgc3R5bGVUb0FwcGx5ID0gc3R5
bGVXaXRob3V0RW1iZWRkaW5nLT5zdHlsZSgpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0xMTI1
LDcgKzExMjAsNiBAQCBib29sIEFwcGx5U3R5bGVDb21tYW5kOjpyZW1vdmVTdHlsZUZyb21SCiAK
IGJvb2wgQXBwbHlTdHlsZUNvbW1hbmQ6OnJlbW92ZUlubGluZVN0eWxlRnJvbUVsZW1lbnQoQ1NT
TXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIHN0eWxlLCBQYXNzUmVmUHRyPEhUTUxFbGVtZW50PiBl
bGVtZW50LCBJbmxpbmVTdHlsZVJlbW92YWxNb2RlIG1vZGUsIENTU011dGFibGVTdHlsZURlY2xh
cmF0aW9uKiBleHRyYWN0ZWRTdHlsZSkKIHsKLSAgICBBU1NFUlQoc3R5bGUpOwogICAgIEFTU0VS
VChlbGVtZW50KTsKIAogICAgIGlmICghZWxlbWVudC0+cGFyZW50Tm9kZSgpIHx8ICFlbGVtZW50
LT5wYXJlbnROb2RlKCktPmlzQ29udGVudEVkaXRhYmxlKCkpCkBAIC0xMTQxLDYgKzExMzUsOSBA
QCBib29sIEFwcGx5U3R5bGVDb21tYW5kOjpyZW1vdmVJbmxpbmVTdHlsCiAgICAgICAgIHJldHVy
biB0cnVlOwogICAgIH0KIAorICAgIGlmICghc3R5bGUpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KwogICAgIGJvb2wgcmVtb3ZlZCA9IGZhbHNlOwogICAgIGlmIChyZW1vdmVJbXBsaWNpdGx5U3R5
bGVkRWxlbWVudChzdHlsZSwgZWxlbWVudC5nZXQoKSwgbW9kZSwgZXh0cmFjdGVkU3R5bGUpKQog
ICAgICAgICByZW1vdmVkID0gdHJ1ZTsKQEAgLTEyMTQsNiArMTIxMSw3IEBAIHN0YXRpYyBjb25z
dCBIVE1MRXF1aXZhbGVudCBIVE1MRXF1aXZhbGUKIGJvb2wgQXBwbHlTdHlsZUNvbW1hbmQ6OnJl
bW92ZUltcGxpY2l0bHlTdHlsZWRFbGVtZW50KENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiBz
dHlsZSwgSFRNTEVsZW1lbnQqIGVsZW1lbnQsIElubGluZVN0eWxlUmVtb3ZhbE1vZGUgbW9kZSwg
Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIGV4dHJhY3RlZFN0eWxlKQogewogICAgIC8vIEN1
cnJlbnQgaW1wbGVtZW50YXRpb24gZG9lcyBub3Qgc3VwcG9ydCBzdHlsZVB1c2hlZERvd24gd2hl
biBtb2RlID09IFJlbW92ZU5vbmUgYmVjYXVzZSBvZiBlYXJseSBleGl0LgorICAgIEFTU0VSVChz
dHlsZSk7CiAgICAgQVNTRVJUKCFleHRyYWN0ZWRTdHlsZSB8fCBtb2RlICE9IFJlbW92ZU5vbmUp
OwogICAgIGJvb2wgcmVtb3ZlZCA9IGZhbHNlOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
V1RGX0FSUkFZX0xFTkdUSChIVE1MRXF1aXZhbGVudHMpOyArK2kpIHsKQEAgLTE0NjksOCArMTQ2
Nyw4IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OnJlbW92ZUlubGluZVN0eWwKICAgICBBU1NF
UlQoc3RhcnQubm9kZSgpLT5pbkRvY3VtZW50KCkpOwogICAgIEFTU0VSVChlbmQubm9kZSgpLT5p
bkRvY3VtZW50KCkpOwogICAgIEFTU0VSVChjb21wYXJlUG9zaXRpb25zKHN0YXJ0LCBlbmQpIDw9
IDApOwotICAgIAotICAgIFJlZlB0cjxDU1NWYWx1ZT4gdGV4dERlY29yYXRpb25TcGVjaWFsUHJv
cGVydHkgPSBzdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eVdlYmtpdFRleHRE
ZWNvcmF0aW9uc0luRWZmZWN0KTsKKworICAgIFJlZlB0cjxDU1NWYWx1ZT4gdGV4dERlY29yYXRp
b25TcGVjaWFsUHJvcGVydHkgPSBzdHlsZSA/IHN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENT
U1Byb3BlcnR5V2Via2l0VGV4dERlY29yYXRpb25zSW5FZmZlY3QpIDogMDsKICAgICBpZiAodGV4
dERlY29yYXRpb25TcGVjaWFsUHJvcGVydHkpIHsKICAgICAgICAgc3R5bGUgPSBzdHlsZS0+Y29w
eSgpOwogICAgICAgICBzdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlUZXh0RGVjb3JhdGlv
biwgdGV4dERlY29yYXRpb25TcGVjaWFsUHJvcGVydHktPmNzc1RleHQoKSwgc3R5bGUtPmdldFBy
b3BlcnR5UHJpb3JpdHkoQ1NTUHJvcGVydHlXZWJraXRUZXh0RGVjb3JhdGlvbnNJbkVmZmVjdCkp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuaAkocmV2
aXNpb24gNzc3ODgpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5k
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUgIkNvbXBvc2l0
ZUVkaXRDb21tYW5kLmgiCiAjaW5jbHVkZSAiSFRNTEVsZW1lbnQuaCIKKyNpbmNsdWRlICJXcml0
aW5nRGlyZWN0aW9uLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtOTAsOSArOTEsOSBA
QCBwcml2YXRlOgogICAgIGJvb2wgbm9kZUZ1bGx5VW5zZWxlY3RlZChOb2RlKiwgY29uc3QgUG9z
aXRpb24mIHN0YXJ0LCBjb25zdCBQb3NpdGlvbiYgZW5kKSBjb25zdDsKIAogICAgIC8vIHN0eWxl
LWFwcGxpY2F0aW9uIGhlbHBlcnMKLSAgICB2b2lkIGFwcGx5QmxvY2tTdHlsZShDU1NNdXRhYmxl
U3R5bGVEZWNsYXJhdGlvbiopOworICAgIHZvaWQgYXBwbHlCbG9ja1N0eWxlKEVkaXRpbmdTdHls
ZSopOwogICAgIHZvaWQgYXBwbHlSZWxhdGl2ZUZvbnRTdHlsZUNoYW5nZShFZGl0aW5nU3R5bGUq
KTsKLSAgICB2b2lkIGFwcGx5SW5saW5lU3R5bGUoQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24q
KTsKKyAgICB2b2lkIGFwcGx5SW5saW5lU3R5bGUoRWRpdGluZ1N0eWxlKik7CiAgICAgdm9pZCBm
aXhSYW5nZUFuZEFwcGx5SW5saW5lU3R5bGUoQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qLCBj
b25zdCBQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IFBvc2l0aW9uJiBlbmQpOwogICAgIHZvaWQgYXBw
bHlJbmxpbmVTdHlsZVRvTm9kZVJhbmdlKENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiwgTm9k
ZSogc3RhcnROb2RlLCBOb2RlKiBwYXN0RW5kTm9kZSk7CiAgICAgdm9pZCBhZGRCbG9ja1N0eWxl
KGNvbnN0IFN0eWxlQ2hhbmdlJiwgSFRNTEVsZW1lbnQqKTsKQEAgLTExMSw3ICsxMTIsNyBAQCBw
cml2YXRlOgogICAgIGZsb2F0IGNvbXB1dGVkRm9udFNpemUoTm9kZSopOwogICAgIHZvaWQgam9p
bkNoaWxkVGV4dE5vZGVzKE5vZGUqLCBjb25zdCBQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IFBvc2l0
aW9uJiBlbmQpOwogCi0gICAgSFRNTEVsZW1lbnQqIHNwbGl0QW5jZXN0b3JzV2l0aFVuaWNvZGVC
aWRpKE5vZGUqLCBib29sIGJlZm9yZSwgaW50IGFsbG93ZWREaXJlY3Rpb24pOworICAgIEhUTUxF
bGVtZW50KiBzcGxpdEFuY2VzdG9yc1dpdGhVbmljb2RlQmlkaShOb2RlKiwgYm9vbCBiZWZvcmUs
IFdyaXRpbmdEaXJlY3Rpb24gYWxsb3dlZERpcmVjdGlvbik7CiAgICAgdm9pZCByZW1vdmVFbWJl
ZGRpbmdVcFRvRW5jbG9zaW5nQmxvY2soTm9kZSogbm9kZSwgTm9kZSogdW5zcGxpdEFuY2VzdG9y
KTsKIAogICAgIHZvaWQgdXBkYXRlU3RhcnRFbmQoY29uc3QgUG9zaXRpb24mIG5ld1N0YXJ0LCBj
b25zdCBQb3NpdGlvbiYgbmV3RW5kKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRp
dGluZ1N0eWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRp
bmdTdHlsZS5jcHAJKHJldmlzaW9uIDc3Nzg4KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9F
ZGl0aW5nU3R5bGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MCwxOCArOTAsMTggQEAgRWRpdGlu
Z1N0eWxlOjpFZGl0aW5nU3R5bGUoKQogewogfQogCi1FZGl0aW5nU3R5bGU6OkVkaXRpbmdTdHls
ZShOb2RlKiBub2RlKQorRWRpdGluZ1N0eWxlOjpFZGl0aW5nU3R5bGUoTm9kZSogbm9kZSwgUHJv
cGVydGllc1RvSW5jbHVkZSBwcm9wZXJ0aWVzVG9JbmNsdWRlKQogICAgIDogbV9zaG91bGRVc2VG
aXhlZERlZmF1bHRGb250U2l6ZShmYWxzZSkKICAgICAsIG1fZm9udFNpemVEZWx0YShOb0ZvbnRE
ZWx0YSkKIHsKLSAgICBpbml0KG5vZGUpOworICAgIGluaXQobm9kZSwgcHJvcGVydGllc1RvSW5j
bHVkZSk7CiB9CiAKIEVkaXRpbmdTdHlsZTo6RWRpdGluZ1N0eWxlKGNvbnN0IFBvc2l0aW9uJiBw
b3NpdGlvbikKICAgICA6IG1fc2hvdWxkVXNlRml4ZWREZWZhdWx0Rm9udFNpemUoZmFsc2UpCiAg
ICAgLCBtX2ZvbnRTaXplRGVsdGEoTm9Gb250RGVsdGEpCiB7Ci0gICAgaW5pdChwb3NpdGlvbi5u
b2RlKCkpOworICAgIGluaXQocG9zaXRpb24ubm9kZSgpLCBPbmx5SW5oZXJpdGFibGVQcm9wZXJ0
aWVzKTsKIH0KIAogRWRpdGluZ1N0eWxlOjpFZGl0aW5nU3R5bGUoY29uc3QgQ1NTU3R5bGVEZWNs
YXJhdGlvbiogc3R5bGUpCkBAIC0xMTYsMTAgKzExNiwxMCBAQCBFZGl0aW5nU3R5bGU6On5FZGl0
aW5nU3R5bGUoKQogewogfQogCi12b2lkIEVkaXRpbmdTdHlsZTo6aW5pdChOb2RlKiBub2RlKQor
dm9pZCBFZGl0aW5nU3R5bGU6OmluaXQoTm9kZSogbm9kZSwgUHJvcGVydGllc1RvSW5jbHVkZSBw
cm9wZXJ0aWVzVG9JbmNsdWRlKQogewogICAgIFJlZlB0cjxDU1NDb21wdXRlZFN0eWxlRGVjbGFy
YXRpb24+IGNvbXB1dGVkU3R5bGVBdFBvc2l0aW9uID0gY29tcHV0ZWRTdHlsZShub2RlKTsKLSAg
ICBtX211dGFibGVTdHlsZSA9IGVkaXRpbmdTdHlsZUZyb21Db21wdXRlZFN0eWxlKGNvbXB1dGVk
U3R5bGVBdFBvc2l0aW9uKTsKKyAgICBtX211dGFibGVTdHlsZSA9IHByb3BlcnRpZXNUb0luY2x1
ZGUgPT0gQWxsUHJvcGVydGllcyAmJiBjb21wdXRlZFN0eWxlQXRQb3NpdGlvbiA/IGNvbXB1dGVk
U3R5bGVBdFBvc2l0aW9uLT5jb3B5KCkgOiBlZGl0aW5nU3R5bGVGcm9tQ29tcHV0ZWRTdHlsZShj
b21wdXRlZFN0eWxlQXRQb3NpdGlvbik7CiAKICAgICBpZiAobm9kZSAmJiBub2RlLT5jb21wdXRl
ZFN0eWxlKCkpIHsKICAgICAgICAgUmVuZGVyU3R5bGUqIHJlbmRlclN0eWxlID0gbm9kZS0+Y29t
cHV0ZWRTdHlsZSgpOwpAQCAtMjU1LDYgKzI1NSwyMCBAQCBQYXNzUmVmUHRyPEVkaXRpbmdTdHls
ZT4gRWRpdGluZ1N0eWxlOjplCiAgICAgcmV0dXJuIGJsb2NrUHJvcGVydGllczsKIH0KIAorUGFz
c1JlZlB0cjxFZGl0aW5nU3R5bGU+IEVkaXRpbmdTdHlsZTo6ZXh0cmFjdEFuZFJlbW92ZVRleHRE
aXJlY3Rpb24oKQoreworICAgIFJlZlB0cjxFZGl0aW5nU3R5bGU+IHRleHREaXJlY3Rpb24gPSBF
ZGl0aW5nU3R5bGU6OmNyZWF0ZSgpOworICAgIHRleHREaXJlY3Rpb24tPm1fbXV0YWJsZVN0eWxl
ID0gQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmNyZWF0ZSgpOworICAgIHRleHREaXJlY3Rp
b24tPm1fbXV0YWJsZVN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eVVuaWNvZGVCaWRpLCBD
U1NWYWx1ZUVtYmVkLCBtX211dGFibGVTdHlsZS0+Z2V0UHJvcGVydHlQcmlvcml0eShDU1NQcm9w
ZXJ0eVVuaWNvZGVCaWRpKSk7CisgICAgdGV4dERpcmVjdGlvbi0+bV9tdXRhYmxlU3R5bGUtPnNl
dFByb3BlcnR5KENTU1Byb3BlcnR5RGlyZWN0aW9uLCBtX211dGFibGVTdHlsZS0+Z2V0UHJvcGVy
dHlWYWx1ZShDU1NQcm9wZXJ0eURpcmVjdGlvbiksCisgICAgICAgIG1fbXV0YWJsZVN0eWxlLT5n
ZXRQcm9wZXJ0eVByaW9yaXR5KENTU1Byb3BlcnR5RGlyZWN0aW9uKSk7CisKKyAgICBtX211dGFi
bGVTdHlsZS0+cmVtb3ZlUHJvcGVydHkoQ1NTUHJvcGVydHlVbmljb2RlQmlkaSk7CisgICAgbV9t
dXRhYmxlU3R5bGUtPnJlbW92ZVByb3BlcnR5KENTU1Byb3BlcnR5RGlyZWN0aW9uKTsKKworICAg
IHJldHVybiB0ZXh0RGlyZWN0aW9uOworfQorCiB2b2lkIEVkaXRpbmdTdHlsZTo6cmVtb3ZlQmxv
Y2tQcm9wZXJ0aWVzKCkKIHsKICAgICBpZiAoIW1fbXV0YWJsZVN0eWxlKQpJbmRleDogU291cmNl
L1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5bGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5oCShyZXZpc2lvbiA3Nzc4OCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDYgKzQ3
LDcgQEAgY2xhc3MgUmVuZGVyU3R5bGU7CiBjbGFzcyBFZGl0aW5nU3R5bGUgOiBwdWJsaWMgUmVm
Q291bnRlZDxFZGl0aW5nU3R5bGU+IHsKIHB1YmxpYzoKIAorICAgIGVudW0gUHJvcGVydGllc1Rv
SW5jbHVkZSB7IEFsbFByb3BlcnRpZXMsIE9ubHlJbmhlcml0YWJsZVByb3BlcnRpZXMgfTsKICAg
ICBlbnVtIFNob3VsZFByZXNlcnZlV3JpdGluZ0RpcmVjdGlvbiB7IFByZXNlcnZlV3JpdGluZ0Rp
cmVjdGlvbiwgRG9Ob3RQcmVzZXJ2ZVdyaXRpbmdEaXJlY3Rpb24gfTsKICAgICBzdGF0aWMgZmxv
YXQgTm9Gb250RGVsdGE7CiAKQEAgLTU1LDkgKzU2LDkgQEAgcHVibGljOgogICAgICAgICByZXR1
cm4gYWRvcHRSZWYobmV3IEVkaXRpbmdTdHlsZSgpKTsKICAgICB9CiAKLSAgICBzdGF0aWMgUGFz
c1JlZlB0cjxFZGl0aW5nU3R5bGU+IGNyZWF0ZShOb2RlKiBub2RlKQorICAgIHN0YXRpYyBQYXNz
UmVmUHRyPEVkaXRpbmdTdHlsZT4gY3JlYXRlKE5vZGUqIG5vZGUsIFByb3BlcnRpZXNUb0luY2x1
ZGUgcHJvcGVydGllc1RvSW5jbHVkZSA9IE9ubHlJbmhlcml0YWJsZVByb3BlcnRpZXMpCiAgICAg
ewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEVkaXRpbmdTdHlsZShub2RlKSk7CisgICAg
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgRWRpdGluZ1N0eWxlKG5vZGUsIHByb3BlcnRpZXNUb0lu
Y2x1ZGUpKTsKICAgICB9CiAKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxFZGl0aW5nU3R5bGU+IGNy
ZWF0ZShjb25zdCBQb3NpdGlvbiYgcG9zaXRpb24pCkBAIC04MCw2ICs4MSw3IEBAIHB1YmxpYzoK
ICAgICB2b2lkIGNsZWFyKCk7CiAgICAgUGFzc1JlZlB0cjxFZGl0aW5nU3R5bGU+IGNvcHkoKSBj
b25zdDsKICAgICBQYXNzUmVmUHRyPEVkaXRpbmdTdHlsZT4gZXh0cmFjdEFuZFJlbW92ZUJsb2Nr
UHJvcGVydGllcygpOworICAgIFBhc3NSZWZQdHI8RWRpdGluZ1N0eWxlPiBleHRyYWN0QW5kUmVt
b3ZlVGV4dERpcmVjdGlvbigpOwogICAgIHZvaWQgcmVtb3ZlQmxvY2tQcm9wZXJ0aWVzKCk7CiAg
ICAgdm9pZCByZW1vdmVTdHlsZUFkZGVkQnlOb2RlKE5vZGUqKTsKICAgICB2b2lkIHJlbW92ZVN0
eWxlQ29uZmxpY3RpbmdXaXRoU3R5bGVPZk5vZGUoTm9kZSopOwpAQCAtOTEsMTAgKzkzLDEwIEBA
IHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICBFZGl0aW5nU3R5bGUoKTsKLSAgICBFZGl0aW5nU3R5
bGUoTm9kZSopOworICAgIEVkaXRpbmdTdHlsZShOb2RlKiwgUHJvcGVydGllc1RvSW5jbHVkZSk7
CiAgICAgRWRpdGluZ1N0eWxlKGNvbnN0IFBvc2l0aW9uJik7CiAgICAgRWRpdGluZ1N0eWxlKGNv
bnN0IENTU1N0eWxlRGVjbGFyYXRpb24qKTsKLSAgICB2b2lkIGluaXQoTm9kZSopOworICAgIHZv
aWQgaW5pdChOb2RlKiwgUHJvcGVydGllc1RvSW5jbHVkZSk7CiAgICAgdm9pZCByZW1vdmVUZXh0
RmlsbEFuZFN0cm9rZUNvbG9yc0lmTmVlZGVkKFJlbmRlclN0eWxlKik7CiAgICAgdm9pZCByZXBs
YWNlRm9udFNpemVCeUtleXdvcmRJZlBvc3NpYmxlKFJlbmRlclN0eWxlKiwgQ1NTQ29tcHV0ZWRT
dHlsZURlY2xhcmF0aW9uKik7CiAgICAgdm9pZCBleHRyYWN0Rm9udFNpemVEZWx0YSgpOwo=
</data>
<flag name="review"
          id="73052"
          type_id="1"
          status="+"
          setter="tony"
    />
          </attachment>
      

    </bug>

</bugzilla>