<?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>49155</bug_id>
          
          <creation_ts>2010-11-07 20:22:44 -0800</creation_ts>
          <short_desc>Remove the remaining editing-style functions from ApplyStyleCommand</short_desc>
          <delta_ts>2010-11-08 12:15:51 -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>
          <dependson>46335</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>darin</cc>
    
    <cc>eric</cc>
    
    <cc>ojan</cc>
    
    <cc>tony</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>305959</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-11-07 20:22:44 -0800</bug_when>
    <thetext>This is a follow up to the bug 46335, which introduced EditingStyle.  In this follow up, we remove removeNonEditingProperties, editingStyleAtPosition, prepareEditingStyleToApplyAt, and removeStylesAddedByNode from ApplyStyleCommand.cpp/h.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>305989</commentid>
    <comment_count>1</comment_count>
      <attachid>73211</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-11-07 22:04:11 -0800</bug_when>
    <thetext>Created attachment 73211
cleanup</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>306206</commentid>
    <comment_count>2</comment_count>
      <attachid>73211</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-11-08 10:43:40 -0800</bug_when>
    <thetext>Comment on attachment 73211
cleanup

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

Seems good. Refactoring looks like it was done correctly.

&gt; WebCore/editing/EditingStyle.h:72
&gt; +    void removeStyleAddedByNode(Node* node);
&gt; +    void removeStyleConflictingWithStyleOfNode(Node* node);

No need for argument names here in these function declarations.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>306281</commentid>
    <comment_count>3</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-11-08 12:15:51 -0800</bug_when>
    <thetext>Committed r71556: &lt;http://trac.webkit.org/changeset/71556&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>73211</attachid>
            <date>2010-11-07 22:04:11 -0800</date>
            <delta_ts>2010-11-08 10:43:40 -0800</delta_ts>
            <desc>cleanup</desc>
            <filename>bug-49155-20101107220410.patch</filename>
            <type>text/plain</type>
            <size>36139</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MTQ5MikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTAgQEAKKzIwMTAtMTEtMDcgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVt
b3ZlIHRoZSByZW1haW5pbmcgZWRpdGluZy1zdHlsZSBmdW5jdGlvbnMgZnJvbSBBcHBseVN0eWxl
Q29tbWFuZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NDkxNTUKKworICAgICAgICBSZXBsYWNlZCByZW1vdmVOb25FZGl0aW5nUHJvcGVydGllcywgZWRp
dGluZ1N0eWxlQXRQb3NpdGlvbiwgcHJlcGFyZUVkaXRpbmdTdHlsZVRvQXBwbHlBdCwKKyAgICAg
ICAgYW5kIHJlbW92ZVN0eWxlc0FkZGVkQnlOb2RlIGluIEFwcGx5U3R5bGVDb21tYW5kLmNwcCBi
eSByZW1vdmVOb25FZGl0aW5nUHJvcGVydGllcywgRWRpdGluZ1N0eWxlOjpjcmVhdGUsCisgICAg
ICAgIHByZXBhcmVUb0FwcGx5QXQsIGFuZCByZW1vdmVTdHlsZUFkZGVkQnlOb2RlIGluIEVkaXRp
bmdTdHlsZS5jcHAuCisKKyAgICAgICAgQWxzbyByZW1vdmVkIHVubmVjZXNzYXJ5IGhlYWRlciBp
bmNsdWRlcyBmcm9tIHZhcmlvdXMgY3BwIGZpbGVzLgorCisgICAgICAgIE5vIHRlc3RzIGFyZSBh
ZGRlZCBzaW5jZSB0aGlzIGlzIGEgY2xlYW51cC4KKworICAgICAgICAqIGVkaXRpbmcvQXBwbHlT
dHlsZUNvbW1hbmQuY3BwOiBSZW1vdmVkIHJlbW92ZU5vbkVkaXRpbmdQcm9wZXJ0aWVzLCBlZGl0
aW5nU3R5bGVBdFBvc2l0aW9uLAorICAgICAgICBwcmVwYXJlRWRpdGluZ1N0eWxlVG9BcHBseUF0
LCBhbmQgcmVtb3ZlU3R5bGVzQWRkZWRCeU5vZGUuCisgICAgICAgICogZWRpdGluZy9BcHBseVN0
eWxlQ29tbWFuZC5oOiBEaXR0by4KKyAgICAgICAgKiBlZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNv
bW1hbmQuY3BwOiBSZW1vdmVkIHJlbW92ZUVuY2xvc2luZ0FuY2hvclN0eWxlLgorICAgICAgICAo
V2ViQ29yZTo6RGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6c2F2ZVR5cGluZ1N0eWxlU3RhdGUpOiBD
YWxscyByZW1vdmVTdHlsZXNBZGRlZEJ5Tm9kZSBpbnN0ZWFkLgorICAgICAgICAqIGVkaXRpbmcv
RWRpdGluZ1N0eWxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNvcHlFZGl0aW5nUHJvcGVydGll
cyk6IE1vdmVkIGFuZCByZW5hbWVkIEFwcGx5U3R5bGVDb21tYW5kOjpyZW1vdmVOb25FZGl0aW5n
UHJvcGVydGllcy4KKyAgICAgICAgKFdlYkNvcmU6OmVkaXRpbmdTdHlsZUZyb21Db21wdXRlZFN0
eWxlKTogQ2FsbHMgY29weUVkaXRpbmdQcm9wZXJ0aWVzLiBDaGFuZ2VkIHRoZSBhcmd1bWVudCB0
byBQYXNzUmVmUHRyCisgICAgICAgIGFzIHN1cHBvc2VkIHRvIGEgcmF3IHBvaW50ZXIgZm9yIGNv
bnZlbmllbmNlLgorICAgICAgICAoV2ViQ29yZTo6RWRpdGluZ1N0eWxlOjppbml0KTogQ2FsbHMg
ZWRpdGluZ1N0eWxlRnJvbUNvbXB1dGVkU3R5bGUuCisgICAgICAgIChXZWJDb3JlOjpFZGl0aW5n
U3R5bGU6OnJlbW92ZVN0eWxlQWRkZWRCeU5vZGUpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkVkaXRpbmdTdHlsZTo6cmVtb3ZlU3R5bGVDb25mbGljdGluZ1dpdGhTdHlsZU9mTm9kZSk6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6RWRpdGluZ1N0eWxlOjpyZW1vdmVOb25FZGl0aW5nUHJv
cGVydGllcyk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6ZWRpdGluZ1N0eWxlSW5jbHVkaW5n
VHlwaW5nU3R5bGUpOiBDYWxscyBjb3B5RWRpdGluZ1Byb3BlcnRpZXMuCisgICAgICAgICogZWRp
dGluZy9FZGl0aW5nU3R5bGUuaDogQWRkZWQgcHJvdG90eXBlcy4KKyAgICAgICAgKiBlZGl0aW5n
L0VkaXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnNlbGVjdGlvbkNvbXB1dGVk
U3R5bGUpOiBVc2VzIEVkaXRpbmdTdHlsZS4KKyAgICAgICAgKiBlZGl0aW5nL0luc2VydFBhcmFn
cmFwaFNlcGFyYXRvckNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zZXJ0UGFyYWdy
YXBoU2VwYXJhdG9yQ29tbWFuZDo6Y2FsY3VsYXRlU3R5bGVCZWZvcmVJbnNlcnRpb24pOiBEaXR0
by4KKyAgICAgICAgKFdlYkNvcmU6Okluc2VydFBhcmFncmFwaFNlcGFyYXRvckNvbW1hbmQ6OmFw
cGx5U3R5bGVBZnRlckluc2VydGlvbik6IERpdHRvLgorICAgICAgICAqIGVkaXRpbmcvSW5zZXJ0
UGFyYWdyYXBoU2VwYXJhdG9yQ29tbWFuZC5oOgorICAgICAgICAqIGVkaXRpbmcvUmVtb3ZlRm9y
bWF0Q29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW1vdmVGb3JtYXRDb21tYW5kOjpk
b0FwcGx5KTogRGl0dG8uCisgICAgICAgICogZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFu
ZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpoYW5kbGVTdHlsZVNwYW5zQmVmb3JlSW5zZXJ0aW9u
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6aGFu
ZGxlU3R5bGVTcGFucyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVwbGFjZVNlbGVjdGlv
bkNvbW1hbmQ6OmRvQXBwbHkpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJlcGxhY2VTZWxl
Y3Rpb25Db21tYW5kOjpjb21wbGV0ZUhUTUxSZXBsYWNlbWVudCk6IERpdHRvLgorICAgICAgICAq
IGVkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuaDoKKyAgICAgICAgKiBlZGl0aW5nL21h
cmt1cC5jcHA6IFJlbW92ZWQgcmVtb3ZlRW5jbG9zaW5nTWFpbEJsb2NrcXVvdGVTdHlsZSBhbmQg
cmVtb3ZlRGVmYXVsdFN0eWxlcy4KKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZU1hcmt1cCk6IFVz
ZXMgRWRpdGluZ1N0eWxlLgorCiAyMDEwLTExLTA3ICBFcmljIFNlaWRlbCAgPGVyaWNAd2Via2l0
Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBBZGFtIEJhcnRoLgpJbmRleDogV2ViQ29yZS9l
ZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRp
bmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwCShyZXZpc2lvbiA3MTQ4MykKKysrIFdlYkNvcmUvZWRp
dGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyOSwxMDQgKzQy
OSw2IEBAIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gZ2V0UHIKICAgICByZXR1
cm4gcmVzdWx0OwogfQogCi0vLyBFZGl0aW5nIHN0eWxlIHByb3BlcnRpZXMgbXVzdCBiZSBwcmVz
ZXJ2ZWQgZHVyaW5nIGVkaXRpbmcgb3BlcmF0aW9uLgotLy8gZS5nLiB3aGVuIGEgdXNlciBpbnNl
cnRzIGEgbmV3IHBhcmFncmFwaCwgYWxsIHByb3BlcnRpZXMgbGlzdGVkIGhlcmUgbXVzdCBiZSBj
b3BpZWQgdG8gdGhlIG5ldyBwYXJhZ3JhcGguCi0vLyBGSVhNRTogVGhlIGN1cnJlbnQgZWRpdGlu
Z1N0eWxlUHJvcGVydGllcyBjb250YWlucyBhbGwgaW5oZXJpdGFibGVQcm9wZXJ0aWVzIGJ1dCB3
ZSBtYXkgbm90IG5lZWQgdG8gcHJlc2VydmUgYWxsIGluaGVyaXRhYmxlIHByb3BlcnRpZXMKLXN0
YXRpYyBjb25zdCBpbnQgZWRpdGluZ1N0eWxlUHJvcGVydGllc1tdID0gewotICAgIC8vIENTUyBp
bmhlcml0YWJsZSBwcm9wZXJ0aWVzCi0gICAgQ1NTUHJvcGVydHlCb3JkZXJDb2xsYXBzZSwKLSAg
ICBDU1NQcm9wZXJ0eUNvbG9yLAotICAgIENTU1Byb3BlcnR5Rm9udEZhbWlseSwKLSAgICBDU1NQ
cm9wZXJ0eUZvbnRTaXplLAotICAgIENTU1Byb3BlcnR5Rm9udFN0eWxlLAotICAgIENTU1Byb3Bl
cnR5Rm9udFZhcmlhbnQsCi0gICAgQ1NTUHJvcGVydHlGb250V2VpZ2h0LAotICAgIENTU1Byb3Bl
cnR5TGV0dGVyU3BhY2luZywKLSAgICBDU1NQcm9wZXJ0eUxpbmVIZWlnaHQsCi0gICAgQ1NTUHJv
cGVydHlPcnBoYW5zLAotICAgIENTU1Byb3BlcnR5VGV4dEFsaWduLAotICAgIENTU1Byb3BlcnR5
VGV4dEluZGVudCwKLSAgICBDU1NQcm9wZXJ0eVRleHRUcmFuc2Zvcm0sCi0gICAgQ1NTUHJvcGVy
dHlXaGl0ZVNwYWNlLAotICAgIENTU1Byb3BlcnR5V2lkb3dzLAotICAgIENTU1Byb3BlcnR5V29y
ZFNwYWNpbmcsCi0gICAgQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJIb3Jpem9udGFsU3BhY2luZywK
LSAgICBDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlclZlcnRpY2FsU3BhY2luZywKLSAgICBDU1NQcm9w
ZXJ0eVdlYmtpdFRleHREZWNvcmF0aW9uc0luRWZmZWN0LAotICAgIENTU1Byb3BlcnR5V2Via2l0
VGV4dEZpbGxDb2xvciwKLSAgICBDU1NQcm9wZXJ0eVdlYmtpdFRleHRTaXplQWRqdXN0LAotICAg
IENTU1Byb3BlcnR5V2Via2l0VGV4dFN0cm9rZUNvbG9yLAotICAgIENTU1Byb3BlcnR5V2Via2l0
VGV4dFN0cm9rZVdpZHRoLAotfTsKLXNpemVfdCBudW1FZGl0aW5nU3R5bGVQcm9wZXJ0aWVzID0g
c2l6ZW9mKGVkaXRpbmdTdHlsZVByb3BlcnRpZXMpL3NpemVvZihlZGl0aW5nU3R5bGVQcm9wZXJ0
aWVzWzBdKTsKLQotUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBBcHBseVN0eWxl
Q29tbWFuZDo6cmVtb3ZlTm9uRWRpdGluZ1Byb3BlcnRpZXMoQ1NTU3R5bGVEZWNsYXJhdGlvbiog
c3R5bGUpCi17Ci0gICAgcmV0dXJuIHN0eWxlLT5jb3B5UHJvcGVydGllc0luU2V0KGVkaXRpbmdT
dHlsZVByb3BlcnRpZXMsIG51bUVkaXRpbmdTdHlsZVByb3BlcnRpZXMpOwotfQotCi1QYXNzUmVm
UHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBBcHBseVN0eWxlQ29tbWFuZDo6ZWRpdGlu
Z1N0eWxlQXRQb3NpdGlvbihQb3NpdGlvbiBwb3MsIFNob3VsZEluY2x1ZGVUeXBpbmdTdHlsZSBz
aG91bGRJbmNsdWRlVHlwaW5nU3R5bGUpCi17Ci0gICAgUmVmUHRyPENTU0NvbXB1dGVkU3R5bGVE
ZWNsYXJhdGlvbj4gY29tcHV0ZWRTdHlsZUF0UG9zaXRpb24gPSBwb3MuY29tcHV0ZWRTdHlsZSgp
OwotICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gc3R5bGU7Ci0gICAgaWYg
KCFjb21wdXRlZFN0eWxlQXRQb3NpdGlvbikKLSAgICAgICAgc3R5bGUgPSBDU1NNdXRhYmxlU3R5
bGVEZWNsYXJhdGlvbjo6Y3JlYXRlKCk7Ci0gICAgZWxzZQotICAgICAgICBzdHlsZSA9IHJlbW92
ZU5vbkVkaXRpbmdQcm9wZXJ0aWVzKGNvbXB1dGVkU3R5bGVBdFBvc2l0aW9uLmdldCgpKTsKLQot
ICAgIGlmIChzdHlsZSAmJiBwb3Mubm9kZSgpICYmIHBvcy5ub2RlKCktPmNvbXB1dGVkU3R5bGUo
KSkgewotICAgICAgICBSZW5kZXJTdHlsZSogcmVuZGVyU3R5bGUgPSBwb3Mubm9kZSgpLT5jb21w
dXRlZFN0eWxlKCk7Ci0gICAgICAgIC8vIElmIGEgbm9kZSdzIHRleHQgZmlsbCBjb2xvciBpcyBp
bnZhbGlkLCB0aGVuIGl0cyBjaGlsZHJlbiB1c2UgCi0gICAgICAgIC8vIHRoZWlyIGZvbnQtY29s
b3IgYXMgdGhlaXIgdGV4dCBmaWxsIGNvbG9yICh0aGV5IGRvbid0Ci0gICAgICAgIC8vIGluaGVy
aXQgaXQpLiAgTGlrZXdpc2UgZm9yIHN0cm9rZSBjb2xvci4KLSAgICAgICAgRXhjZXB0aW9uQ29k
ZSBlYyA9IDA7Ci0gICAgICAgIGlmICghcmVuZGVyU3R5bGUtPnRleHRGaWxsQ29sb3IoKS5pc1Zh
bGlkKCkpCi0gICAgICAgICAgICBzdHlsZS0+cmVtb3ZlUHJvcGVydHkoQ1NTUHJvcGVydHlXZWJr
aXRUZXh0RmlsbENvbG9yLCBlYyk7Ci0gICAgICAgIGlmICghcmVuZGVyU3R5bGUtPnRleHRTdHJv
a2VDb2xvcigpLmlzVmFsaWQoKSkKLSAgICAgICAgICAgIHN0eWxlLT5yZW1vdmVQcm9wZXJ0eShD
U1NQcm9wZXJ0eVdlYmtpdFRleHRTdHJva2VDb2xvciwgZWMpOwotICAgICAgICBBU1NFUlQoZWMg
PT0gMCk7Ci0gICAgICAgIGlmIChyZW5kZXJTdHlsZS0+Zm9udERlc2NyaXB0aW9uKCkua2V5d29y
ZFNpemUoKSkKLSAgICAgICAgICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRT
aXplLCBjb21wdXRlZFN0eWxlQXRQb3NpdGlvbi0+Z2V0Rm9udFNpemVDU1NWYWx1ZVByZWZlcnJp
bmdLZXl3b3JkKCktPmNzc1RleHQoKSk7Ci0gICAgfQotCi0gICAgaWYgKHNob3VsZEluY2x1ZGVU
eXBpbmdTdHlsZSA9PSBJbmNsdWRlVHlwaW5nU3R5bGUpIHsKLSAgICAgICAgUmVmUHRyPENTU011
dGFibGVTdHlsZURlY2xhcmF0aW9uPiB0eXBpbmdTdHlsZSA9IHBvcy5ub2RlKCktPmRvY3VtZW50
KCktPmZyYW1lKCktPnNlbGVjdGlvbigpLT50eXBpbmdTdHlsZSgpOwotICAgICAgICBpZiAodHlw
aW5nU3R5bGUpCi0gICAgICAgICAgICBzdHlsZS0+bWVyZ2UodHlwaW5nU3R5bGUuZ2V0KCkpOwot
ICAgIH0KLQotICAgIHJldHVybiBzdHlsZS5yZWxlYXNlKCk7Ci19Ci0KLXZvaWQgcHJlcGFyZUVk
aXRpbmdTdHlsZVRvQXBwbHlBdChDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogZWRpdGluZ1N0
eWxlLCBQb3NpdGlvbiBwb3MpCi17Ci0gICAgLy8gUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6Omhh
bmRsZVN0eWxlU3BhbnMoKSByZXF1aXJlcyB0aGF0IHRoaXMgZnVuY3Rpb24gb25seSByZW1vdmVz
IHRoZSBlZGl0aW5nIHN0eWxlLgotICAgIC8vIElmIHRoaXMgZnVuY3Rpb24gd2FzIG1vZGlmaWVk
IGluIHRoZSBmdXR1cmUgdG8gZGVsZXRlIGFsbCByZWR1bmRhbnQgcHJvcGVydGllcywgdGhlbiBh
ZGQgYSBib29sZWFuIHZhbHVlIHRvIGluZGljYXRlCi0gICAgLy8gd2hpY2ggb25lIG9mIGVkaXRp
bmdTdHlsZUF0UG9zaXRpb24gb3IgY29tcHV0ZWRTdHlsZSBpcyBjYWxsZWQuCi0gICAgUmVmUHRy
PENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBzdHlsZSA9IEFwcGx5U3R5bGVDb21tYW5kOjpl
ZGl0aW5nU3R5bGVBdFBvc2l0aW9uKHBvcyk7Ci0gICAgc3R5bGUtPmRpZmYoZWRpdGluZ1N0eWxl
KTsKLQotICAgIC8vIGlmIGFscGhhIHZhbHVlIGlzIHplcm8sIHdlIGRvbid0IGFkZCB0aGUgYmFj
a2dyb3VuZCBjb2xvci4KLSAgICBSZWZQdHI8Q1NTVmFsdWU+IGJhY2tncm91bmRDb2xvciA9IGVk
aXRpbmdTdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xv
cik7Ci0gICAgaWYgKGJhY2tncm91bmRDb2xvciAmJiBiYWNrZ3JvdW5kQ29sb3ItPmlzUHJpbWl0
aXZlVmFsdWUoKSkgewotICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUg
PSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KGJhY2tncm91bmRDb2xvci5nZXQoKSk7
Ci0gICAgICAgIENvbG9yIGNvbG9yID0gQ29sb3IocHJpbWl0aXZlVmFsdWUtPmdldFJHQkEzMlZh
bHVlKCkpOwotICAgICAgICBFeGNlcHRpb25Db2RlIGVjOwotICAgICAgICBpZiAoY29sb3IuYWxw
aGEoKSA9PSAwKQotICAgICAgICAgICAgZWRpdGluZ1N0eWxlLT5yZW1vdmVQcm9wZXJ0eShDU1NQ
cm9wZXJ0eUJhY2tncm91bmRDb2xvciwgZWMpOwotICAgIH0KLX0KLQotdm9pZCByZW1vdmVTdHls
ZXNBZGRlZEJ5Tm9kZShDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogZWRpdGluZ1N0eWxlLCBO
b2RlKiBub2RlKQotewotICAgIEFTU0VSVChub2RlKTsKLSAgICBBU1NFUlQobm9kZS0+cGFyZW50
Tm9kZSgpKTsKLSAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IHBhcmVudFN0
eWxlID0gQXBwbHlTdHlsZUNvbW1hbmQ6OmVkaXRpbmdTdHlsZUF0UG9zaXRpb24oUG9zaXRpb24o
bm9kZS0+cGFyZW50Tm9kZSgpLCAwKSk7Ci0gICAgUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xh
cmF0aW9uPiBzdHlsZSA9IEFwcGx5U3R5bGVDb21tYW5kOjplZGl0aW5nU3R5bGVBdFBvc2l0aW9u
KFBvc2l0aW9uKG5vZGUsIDApKTsKLSAgICBwYXJlbnRTdHlsZS0+ZGlmZihzdHlsZS5nZXQoKSk7
Ci0gICAgc3R5bGUtPmRpZmYoZWRpdGluZ1N0eWxlKTsKLX0KLQogQXBwbHlTdHlsZUNvbW1hbmQ6
OkFwcGx5U3R5bGVDb21tYW5kKERvY3VtZW50KiBkb2N1bWVudCwgQ1NTU3R5bGVEZWNsYXJhdGlv
biogc3R5bGUsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdGlvbiwgRVByb3BlcnR5TGV2ZWwgcHJvcGVy
dHlMZXZlbCkKICAgICA6IENvbXBvc2l0ZUVkaXRDb21tYW5kKGRvY3VtZW50KQogICAgICwgbV9z
dHlsZShzdHlsZS0+bWFrZU11dGFibGUoKSkKSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9BcHBseVN0
eWxlQ29tbWFuZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29t
bWFuZC5oCShyZXZpc2lvbiA3MTQ4MykKKysrIFdlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29t
bWFuZC5oCSh3b3JraW5nIGNvcHkpCkBAIC02NCw5ICs2NCw2IEBAIHB1YmxpYzoKICAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBBcHBseVN0eWxlQ29tbWFuZChkb2N1bWVudCwgc3R5bGUsIGlz
SW5saW5lRWxlbWVudFRvUmVtb3ZlRnVuY3Rpb24sIGFjdGlvbikpOwogICAgIH0KIAotICAgIHN0
YXRpYyBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IHJlbW92ZU5vbkVkaXRpbmdQ
cm9wZXJ0aWVzKENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlKTsKLSAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gZWRpdGluZ1N0eWxlQXRQb3NpdGlvbihQ
b3NpdGlvbiBwb3MsIFNob3VsZEluY2x1ZGVUeXBpbmdTdHlsZSBzaG91bGRJbmNsdWRlVHlwaW5n
U3R5bGUgPSBJZ25vcmVUeXBpbmdTdHlsZSk7Ci0KIHByaXZhdGU6CiAgICAgQXBwbHlTdHlsZUNv
bW1hbmQoRG9jdW1lbnQqLCBDU1NTdHlsZURlY2xhcmF0aW9uKiwgRWRpdEFjdGlvbiwgRVByb3Bl
cnR5TGV2ZWwpOwogICAgIEFwcGx5U3R5bGVDb21tYW5kKERvY3VtZW50KiwgQ1NTU3R5bGVEZWNs
YXJhdGlvbiosIGNvbnN0IFBvc2l0aW9uJiBzdGFydCwgY29uc3QgUG9zaXRpb24mIGVuZCwgRWRp
dEFjdGlvbiwgRVByb3BlcnR5TGV2ZWwpOwpAQCAtMTM3LDkgKzEzNCw2IEBAIGJvb2wgaXNTdHls
ZVNwYW4oY29uc3QgTm9kZSopOwogUGFzc1JlZlB0cjxIVE1MRWxlbWVudD4gY3JlYXRlU3R5bGVT
cGFuRWxlbWVudChEb2N1bWVudCopOwogUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9u
PiBnZXRQcm9wZXJ0aWVzTm90SW4oQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGVXaXRoUmVkdW5k
YW50UHJvcGVydGllcywgQ1NTU3R5bGVEZWNsYXJhdGlvbiogYmFzZVN0eWxlKTsKIAotdm9pZCBw
cmVwYXJlRWRpdGluZ1N0eWxlVG9BcHBseUF0KENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiwg
UG9zaXRpb24pOwotdm9pZCByZW1vdmVTdHlsZXNBZGRlZEJ5Tm9kZShDU1NNdXRhYmxlU3R5bGVE
ZWNsYXJhdGlvbiosIE5vZGUqKTsKLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYK
SW5kZXg6IFdlYkNvcmUvZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAJKHJldmlz
aW9uIDcxNDgzKQorKysgV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yNiwyNSArMjYsMTggQEAKICNpbmNsdWRlICJjb25maWcuaCIK
ICNpbmNsdWRlICJEZWxldGVTZWxlY3Rpb25Db21tYW5kLmgiCiAKLSNpbmNsdWRlICJDU1NNdXRh
YmxlU3R5bGVEZWNsYXJhdGlvbi5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAi
RG9jdW1lbnRGcmFnbWVudC5oIgogI2luY2x1ZGUgIkVkaXRvci5oIgogI2luY2x1ZGUgIkVkaXRv
ckNsaWVudC5oIgogI2luY2x1ZGUgIkVsZW1lbnQuaCIKICNpbmNsdWRlICJGcmFtZS5oIgotI2lu
Y2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNsdWRlICJDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24u
aCIKICNpbmNsdWRlICJodG1sZWRpdGluZy5oIgogI2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQu
aCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKLSNpbmNsdWRlICJtYXJrdXAuaCIKICNpbmNsdWRl
ICJSZW5kZXJUYWJsZUNlbGwuaCIKLSNpbmNsdWRlICJSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5o
IgogI2luY2x1ZGUgIlRleHQuaCIKLSNpbmNsdWRlICJUZXh0SXRlcmF0b3IuaCIKICNpbmNsdWRl
ICJ2aXNpYmxlX3VuaXRzLmgiCi0jaW5jbHVkZSAiQXBwbHlTdHlsZUNvbW1hbmQuaCIKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCkBAIC0yNzIsMTUgKzI2NSw2IEBAIHZvaWQgRGVsZXRlU2VsZWN0
aW9uQ29tbWFuZDo6aW5pdGlhbGl6ZVAKICAgICBtX2VuZEJsb2NrID0gZW5jbG9zaW5nTm9kZU9m
VHlwZShyYW5nZUNvbXBsaWFudEVxdWl2YWxlbnQobV91cHN0cmVhbUVuZCksICZpc0Jsb2NrLCBm
YWxzZSk7CiB9CiAKLXN0YXRpYyB2b2lkIHJlbW92ZUVuY2xvc2luZ0FuY2hvclN0eWxlKENTU011
dGFibGVTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSwgY29uc3QgUG9zaXRpb24mIHBvc2l0aW9uKQot
ewotICAgIE5vZGUqIGVuY2xvc2luZ0FuY2hvciA9IGVuY2xvc2luZ0FuY2hvckVsZW1lbnQocG9z
aXRpb24pOwotICAgIGlmICghZW5jbG9zaW5nQW5jaG9yIHx8ICFlbmNsb3NpbmdBbmNob3ItPnBh
cmVudE5vZGUoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIHJlbW92ZVN0eWxlc0FkZGVk
QnlOb2RlKHN0eWxlLCBlbmNsb3NpbmdBbmNob3IpOwotfQotCiB2b2lkIERlbGV0ZVNlbGVjdGlv
bkNvbW1hbmQ6OnNhdmVUeXBpbmdTdHlsZVN0YXRlKCkKIHsKICAgICAvLyBBIGNvbW1vbiBjYXNl
IGlzIGRlbGV0aW5nIGNoYXJhY3RlcnMgdGhhdCBhcmUgYWxsIGZyb20gdGhlIHNhbWUgdGV4dCBu
b2RlLiBJbiAKQEAgLTI5NSw4ICsyNzksNyBAQCB2b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6
OnNhdmVUeXBpbmdTCiAKICAgICAvLyBGaWd1cmUgb3V0IHRoZSB0eXBpbmcgc3R5bGUgaW4gZWZm
ZWN0IGJlZm9yZSB0aGUgZGVsZXRlIGlzIGRvbmUuCiAgICAgbV90eXBpbmdTdHlsZSA9IEVkaXRp
bmdTdHlsZTo6Y3JlYXRlKHBvc2l0aW9uQmVmb3JlVGFiU3BhbihtX3NlbGVjdGlvblRvRGVsZXRl
LnN0YXJ0KCkpKTsKLQotICAgIHJlbW92ZUVuY2xvc2luZ0FuY2hvclN0eWxlKG1fdHlwaW5nU3R5
bGUtPnN0eWxlKCksIG1fc2VsZWN0aW9uVG9EZWxldGUuc3RhcnQoKSk7CisgICAgbV90eXBpbmdT
dHlsZS0+cmVtb3ZlU3R5bGVBZGRlZEJ5Tm9kZShlbmNsb3NpbmdBbmNob3JFbGVtZW50KG1fc2Vs
ZWN0aW9uVG9EZWxldGUuc3RhcnQoKSkpOwogCiAgICAgLy8gSWYgd2UncmUgZGVsZXRpbmcgaW50
byBhIE1haWwgYmxvY2txdW90ZSwgc2F2ZSB0aGUgc3R5bGUgYXQgZW5kKCkgaW5zdGVhZCBvZiBz
dGFydCgpCiAgICAgLy8gV2UnbGwgdXNlIHRoaXMgbGF0ZXIgaW4gY29tcHV0ZVR5cGluZ1N0eWxl
QWZ0ZXJEZWxldGUgaWYgd2UgZW5kIHVwIG91dHNpZGUgb2YgYSBNYWlsIGJsb2NrcXVvdGUKSW5k
ZXg6IFdlYkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwCShyZXZpc2lvbiA3MTQ4MykKKysrIFdlYkNvcmUv
ZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiwxMSArMzYsNDcg
QEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0aWMgUGFzc1JlZlB0cjxDU1NNdXRhYmxl
U3R5bGVEZWNsYXJhdGlvbj4gZWRpdGluZ1N0eWxlRnJvbUNvbXB1dGVkU3R5bGUoQ1NTQ29tcHV0
ZWRTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSkKKy8vIEVkaXRpbmcgc3R5bGUgcHJvcGVydGllcyBt
dXN0IGJlIHByZXNlcnZlZCBkdXJpbmcgZWRpdGluZyBvcGVyYXRpb24uCisvLyBlLmcuIHdoZW4g
YSB1c2VyIGluc2VydHMgYSBuZXcgcGFyYWdyYXBoLCBhbGwgcHJvcGVydGllcyBsaXN0ZWQgaGVy
ZSBtdXN0IGJlIGNvcGllZCB0byB0aGUgbmV3IHBhcmFncmFwaC4KKy8vIEZJWE1FOiBUaGUgY3Vy
cmVudCBlZGl0aW5nU3R5bGVQcm9wZXJ0aWVzIGNvbnRhaW5zIGFsbCBpbmhlcml0YWJsZVByb3Bl
cnRpZXMgYnV0IHdlIG1heSBub3QgbmVlZCB0byBwcmVzZXJ2ZSBhbGwgaW5oZXJpdGFibGUgcHJv
cGVydGllcworc3RhdGljIGNvbnN0IGludCBlZGl0aW5nU3R5bGVQcm9wZXJ0aWVzW10gPSB7Cisg
ICAgLy8gQ1NTIGluaGVyaXRhYmxlIHByb3BlcnRpZXMKKyAgICBDU1NQcm9wZXJ0eUJvcmRlckNv
bGxhcHNlLAorICAgIENTU1Byb3BlcnR5Q29sb3IsCisgICAgQ1NTUHJvcGVydHlGb250RmFtaWx5
LAorICAgIENTU1Byb3BlcnR5Rm9udFNpemUsCisgICAgQ1NTUHJvcGVydHlGb250U3R5bGUsCisg
ICAgQ1NTUHJvcGVydHlGb250VmFyaWFudCwKKyAgICBDU1NQcm9wZXJ0eUZvbnRXZWlnaHQsCisg
ICAgQ1NTUHJvcGVydHlMZXR0ZXJTcGFjaW5nLAorICAgIENTU1Byb3BlcnR5TGluZUhlaWdodCwK
KyAgICBDU1NQcm9wZXJ0eU9ycGhhbnMsCisgICAgQ1NTUHJvcGVydHlUZXh0QWxpZ24sCisgICAg
Q1NTUHJvcGVydHlUZXh0SW5kZW50LAorICAgIENTU1Byb3BlcnR5VGV4dFRyYW5zZm9ybSwKKyAg
ICBDU1NQcm9wZXJ0eVdoaXRlU3BhY2UsCisgICAgQ1NTUHJvcGVydHlXaWRvd3MsCisgICAgQ1NT
UHJvcGVydHlXb3JkU3BhY2luZywKKyAgICBDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlckhvcml6b250
YWxTcGFjaW5nLAorICAgIENTU1Byb3BlcnR5V2Via2l0Qm9yZGVyVmVydGljYWxTcGFjaW5nLAor
ICAgIENTU1Byb3BlcnR5V2Via2l0VGV4dERlY29yYXRpb25zSW5FZmZlY3QsCisgICAgQ1NTUHJv
cGVydHlXZWJraXRUZXh0RmlsbENvbG9yLAorICAgIENTU1Byb3BlcnR5V2Via2l0VGV4dFNpemVB
ZGp1c3QsCisgICAgQ1NTUHJvcGVydHlXZWJraXRUZXh0U3Ryb2tlQ29sb3IsCisgICAgQ1NTUHJv
cGVydHlXZWJraXRUZXh0U3Ryb2tlV2lkdGgsCit9Oworc2l6ZV90IG51bUVkaXRpbmdTdHlsZVBy
b3BlcnRpZXMgPSBzaXplb2YoZWRpdGluZ1N0eWxlUHJvcGVydGllcykgLyBzaXplb2YoZWRpdGlu
Z1N0eWxlUHJvcGVydGllc1swXSk7CisKK3N0YXRpYyBQYXNzUmVmUHRyPENTU011dGFibGVTdHls
ZURlY2xhcmF0aW9uPiBjb3B5RWRpdGluZ1Byb3BlcnRpZXMoQ1NTU3R5bGVEZWNsYXJhdGlvbiog
c3R5bGUpCit7CisgICAgcmV0dXJuIHN0eWxlLT5jb3B5UHJvcGVydGllc0luU2V0KGVkaXRpbmdT
dHlsZVByb3BlcnRpZXMsIG51bUVkaXRpbmdTdHlsZVByb3BlcnRpZXMpOworfQorCitzdGF0aWMg
UGFzc1JlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gZWRpdGluZ1N0eWxlRnJvbUNv
bXB1dGVkU3R5bGUoUGFzc1JlZlB0cjxDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24+IHN0eWxl
KQogewogICAgIGlmICghc3R5bGUpCiAgICAgICAgIHJldHVybiBDU1NNdXRhYmxlU3R5bGVEZWNs
YXJhdGlvbjo6Y3JlYXRlKCk7Ci0gICAgcmV0dXJuIEFwcGx5U3R5bGVDb21tYW5kOjpyZW1vdmVO
b25FZGl0aW5nUHJvcGVydGllcyhzdHlsZSk7CisgICAgcmV0dXJuIGNvcHlFZGl0aW5nUHJvcGVy
dGllcyhzdHlsZS5nZXQoKSk7CiB9CiAKIEVkaXRpbmdTdHlsZTo6RWRpdGluZ1N0eWxlKCkKQEAg
LTY5LDcgKzEwNSw3IEBAIEVkaXRpbmdTdHlsZTo6RWRpdGluZ1N0eWxlKGNvbnN0IENTU1N0eWwK
IHZvaWQgRWRpdGluZ1N0eWxlOjppbml0KE5vZGUqIG5vZGUpCiB7CiAgICAgUmVmUHRyPENTU0Nv
bXB1dGVkU3R5bGVEZWNsYXJhdGlvbj4gY29tcHV0ZWRTdHlsZUF0UG9zaXRpb24gPSBjb21wdXRl
ZFN0eWxlKG5vZGUpOwotICAgIG1fbXV0YWJsZVN0eWxlID0gZWRpdGluZ1N0eWxlRnJvbUNvbXB1
dGVkU3R5bGUoY29tcHV0ZWRTdHlsZUF0UG9zaXRpb24uZ2V0KCkpOworICAgIG1fbXV0YWJsZVN0
eWxlID0gZWRpdGluZ1N0eWxlRnJvbUNvbXB1dGVkU3R5bGUoY29tcHV0ZWRTdHlsZUF0UG9zaXRp
b24pOwogCiAgICAgaWYgKG5vZGUgJiYgbm9kZS0+Y29tcHV0ZWRTdHlsZSgpKSB7CiAgICAgICAg
IFJlbmRlclN0eWxlKiByZW5kZXJTdHlsZSA9IG5vZGUtPmNvbXB1dGVkU3R5bGUoKTsKQEAgLTEy
Nyw2ICsxNjMsMzUgQEAgdm9pZCBFZGl0aW5nU3R5bGU6OnJlbW92ZUJsb2NrUHJvcGVydGllcwog
ICAgIG1fbXV0YWJsZVN0eWxlLT5yZW1vdmVCbG9ja1Byb3BlcnRpZXMoKTsKIH0KIAordm9pZCBF
ZGl0aW5nU3R5bGU6OnJlbW92ZVN0eWxlQWRkZWRCeU5vZGUoTm9kZSogbm9kZSkKK3sKKyAgICBp
ZiAoIW5vZGUgfHwgIW5vZGUtPnBhcmVudE5vZGUoKSkKKyAgICAgICAgcmV0dXJuOworICAgIFJl
ZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gcGFyZW50U3R5bGUgPSBlZGl0aW5nU3R5
bGVGcm9tQ29tcHV0ZWRTdHlsZShjb21wdXRlZFN0eWxlKG5vZGUtPnBhcmVudE5vZGUoKSkpOwor
ICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gbm9kZVN0eWxlID0gZWRpdGlu
Z1N0eWxlRnJvbUNvbXB1dGVkU3R5bGUoY29tcHV0ZWRTdHlsZShub2RlKSk7CisgICAgcGFyZW50
U3R5bGUtPmRpZmYobm9kZVN0eWxlLmdldCgpKTsKKyAgICBub2RlU3R5bGUtPmRpZmYobV9tdXRh
YmxlU3R5bGUuZ2V0KCkpOworfQorCit2b2lkIEVkaXRpbmdTdHlsZTo6cmVtb3ZlU3R5bGVDb25m
bGljdGluZ1dpdGhTdHlsZU9mTm9kZShOb2RlKiBub2RlKQoreworICAgIGlmICghbm9kZSB8fCAh
bm9kZS0+cGFyZW50Tm9kZSgpKQorICAgICAgICByZXR1cm47CisgICAgUmVmUHRyPENTU011dGFi
bGVTdHlsZURlY2xhcmF0aW9uPiBwYXJlbnRTdHlsZSA9IGVkaXRpbmdTdHlsZUZyb21Db21wdXRl
ZFN0eWxlKGNvbXB1dGVkU3R5bGUobm9kZS0+cGFyZW50Tm9kZSgpKSk7CisgICAgUmVmUHRyPENT
U011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBub2RlU3R5bGUgPSBlZGl0aW5nU3R5bGVGcm9tQ29t
cHV0ZWRTdHlsZShjb21wdXRlZFN0eWxlKG5vZGUpKTsKKyAgICBwYXJlbnRTdHlsZS0+ZGlmZihu
b2RlU3R5bGUuZ2V0KCkpOworCisgICAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmNvbnN0
X2l0ZXJhdG9yIGVuZCA9IG5vZGVTdHlsZS0+ZW5kKCk7CisgICAgZm9yIChDU1NNdXRhYmxlU3R5
bGVEZWNsYXJhdGlvbjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBub2RlU3R5bGUtPmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkKKyAgICAgICAgbV9tdXRhYmxlU3R5bGUtPnJlbW92ZVByb3BlcnR5KGl0
LT5pZCgpKTsKK30KKwordm9pZCBFZGl0aW5nU3R5bGU6OnJlbW92ZU5vbkVkaXRpbmdQcm9wZXJ0
aWVzKCkKK3sKKyAgICBpZiAobV9tdXRhYmxlU3R5bGUpCisgICAgICAgIG1fbXV0YWJsZVN0eWxl
ID0gY29weUVkaXRpbmdQcm9wZXJ0aWVzKG1fbXV0YWJsZVN0eWxlLmdldCgpKTsKK30KKwogdm9p
ZCBFZGl0aW5nU3R5bGU6OnByZXBhcmVUb0FwcGx5QXQoY29uc3QgUG9zaXRpb24mIHBvc2l0aW9u
KQogewogICAgIC8vIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpoYW5kbGVTdHlsZVNwYW5zKCkg
cmVxdWlyZXMgdGhhdCB0aGlzIGZ1bmN0aW9uIG9ubHkgcmVtb3ZlcyB0aGUgZWRpdGluZyBzdHls
ZS4KQEAgLTE0OCwxMSArMjEzLDggQEAgUGFzc1JlZlB0cjxFZGl0aW5nU3R5bGU+IGVkaXRpbmdT
dHlsZUluYwogewogICAgIFJlZlB0cjxFZGl0aW5nU3R5bGU+IGVkaXRpbmdTdHlsZSA9IEVkaXRp
bmdTdHlsZTo6Y3JlYXRlKHBvc2l0aW9uKTsKICAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVj
bGFyYXRpb24+IHR5cGluZ1N0eWxlID0gcG9zaXRpb24ubm9kZSgpLT5kb2N1bWVudCgpLT5mcmFt
ZSgpLT5zZWxlY3Rpb24oKS0+dHlwaW5nU3R5bGUoKTsKLSAgICBpZiAodHlwaW5nU3R5bGUpIHsK
LSAgICAgICAgUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBpbmhlcml0YWJsZVR5
cGluZ1N0eWxlID0gdHlwaW5nU3R5bGUtPmNvcHkoKTsKLSAgICAgICAgQXBwbHlTdHlsZUNvbW1h
bmQ6OnJlbW92ZU5vbkVkaXRpbmdQcm9wZXJ0aWVzKGluaGVyaXRhYmxlVHlwaW5nU3R5bGUuZ2V0
KCkpOwotICAgICAgICBlZGl0aW5nU3R5bGUtPnN0eWxlKCktPm1lcmdlKGluaGVyaXRhYmxlVHlw
aW5nU3R5bGUuZ2V0KCksIHRydWUpOwotICAgIH0KKyAgICBpZiAodHlwaW5nU3R5bGUpCisgICAg
ICAgIGVkaXRpbmdTdHlsZS0+c3R5bGUoKS0+bWVyZ2UoY29weUVkaXRpbmdQcm9wZXJ0aWVzKHR5
cGluZ1N0eWxlLmdldCgpKS5nZXQoKSk7CiAgICAgcmV0dXJuIGVkaXRpbmdTdHlsZTsKIH0KICAg
ICAKSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5bGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmgJKHJldmlzaW9uIDcxNDgzKQorKysgV2ViQ29y
ZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02OCw2ICs2OCw5IEBA
IHB1YmxpYzoKICAgICB2b2lkIHNldFN0eWxlKFBhc3NSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVj
bGFyYXRpb24+KTsKICAgICB2b2lkIGNsZWFyKCk7CiAgICAgdm9pZCByZW1vdmVCbG9ja1Byb3Bl
cnRpZXMoKTsKKyAgICB2b2lkIHJlbW92ZVN0eWxlQWRkZWRCeU5vZGUoTm9kZSogbm9kZSk7Cisg
ICAgdm9pZCByZW1vdmVTdHlsZUNvbmZsaWN0aW5nV2l0aFN0eWxlT2ZOb2RlKE5vZGUqIG5vZGUp
OworICAgIHZvaWQgcmVtb3ZlTm9uRWRpdGluZ1Byb3BlcnRpZXMoKTsKICAgICB2b2lkIHByZXBh
cmVUb0FwcGx5QXQoY29uc3QgUG9zaXRpb24mKTsKIAogcHJpdmF0ZToKSW5kZXg6IFdlYkNvcmUv
ZWRpdGluZy9FZGl0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9FZGl0b3Iu
Y3BwCShyZXZpc2lvbiA3MTQ4MykKKysrIFdlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMDg1LDEwICszMDg1LDEwIEBAIFBhc3NSZWZQdHI8Q1NTTXV0YWJsZVN0
eWxlRGVjbGFyYXRpb24+IEUKICAgICBpZiAoIW1fZnJhbWUtPnNlbGVjdGlvbigpLT50eXBpbmdT
dHlsZSgpKQogICAgICAgICByZXR1cm4gbXV0YWJsZVN0eWxlOwogCi0gICAgUmVmUHRyPENTU011
dGFibGVTdHlsZURlY2xhcmF0aW9uPiB0eXBpbmdTdHlsZSA9IG1fZnJhbWUtPnNlbGVjdGlvbigp
LT50eXBpbmdTdHlsZSgpLT5jb3B5KCk7Ci0gICAgQXBwbHlTdHlsZUNvbW1hbmQ6OnJlbW92ZU5v
bkVkaXRpbmdQcm9wZXJ0aWVzKHR5cGluZ1N0eWxlLmdldCgpKTsKLSAgICBwcmVwYXJlRWRpdGlu
Z1N0eWxlVG9BcHBseUF0KHR5cGluZ1N0eWxlLmdldCgpLCBwb3NpdGlvbik7Ci0gICAgbXV0YWJs
ZVN0eWxlLT5tZXJnZSh0eXBpbmdTdHlsZS5nZXQoKSk7CisgICAgUmVmUHRyPEVkaXRpbmdTdHls
ZT4gdHlwaW5nU3R5bGUgPSBFZGl0aW5nU3R5bGU6OmNyZWF0ZShtX2ZyYW1lLT5zZWxlY3Rpb24o
KS0+dHlwaW5nU3R5bGUoKSk7CisgICAgdHlwaW5nU3R5bGUtPnJlbW92ZU5vbkVkaXRpbmdQcm9w
ZXJ0aWVzKCk7CisgICAgdHlwaW5nU3R5bGUtPnByZXBhcmVUb0FwcGx5QXQocG9zaXRpb24pOwor
ICAgIG11dGFibGVTdHlsZS0+bWVyZ2UodHlwaW5nU3R5bGUtPnN0eWxlKCkpOwogCiAgICAgcmV0
dXJuIG11dGFibGVTdHlsZTsKIH0KSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9JbnNlcnRQYXJhZ3Jh
cGhTZXBhcmF0b3JDb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvSW5z
ZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQ29tbWFuZC5jcHAJKHJldmlzaW9uIDcxNDgzKQorKysgV2Vi
Q29yZS9lZGl0aW5nL0luc2VydFBhcmFncmFwaFNlcGFyYXRvckNvbW1hbmQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yNiwxOSArMjYsMTYgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRl
ICJJbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21tYW5kLmgiCiAKLSNpbmNsdWRlICJDU1NDb21w
dXRlZFN0eWxlRGVjbGFyYXRpb24uaCIKLSNpbmNsdWRlICJDU1NNdXRhYmxlU3R5bGVEZWNsYXJh
dGlvbi5oIgogI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKICNpbmNsdWRlICJEb2N1bWVu
dC5oIgorI2luY2x1ZGUgIkVkaXRpbmdTdHlsZS5oIgogI2luY2x1ZGUgIkhUTUxFbGVtZW50Lmgi
CiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSW5zZXJ0TGluZUJyZWFrQ29tbWFu
ZC5oIgotI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKICNp
bmNsdWRlICJUZXh0LmgiCiAjaW5jbHVkZSAiaHRtbGVkaXRpbmcuaCIKICNpbmNsdWRlICJ2aXNp
YmxlX3VuaXRzLmgiCi0jaW5jbHVkZSAiQXBwbHlTdHlsZUNvbW1hbmQuaCIKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCkBAIC04Miw3ICs3OSw3IEBAIHZvaWQgSW5zZXJ0UGFyYWdyYXBoU2VwYXJh
dG9yQ29tbWFuZDo6Y2EKICAgICBpZiAoIWlzU3RhcnRPZlBhcmFncmFwaCh2aXNpYmxlUG9zKSAm
JiAhaXNFbmRPZlBhcmFncmFwaCh2aXNpYmxlUG9zKSkKICAgICAgICAgcmV0dXJuOwogICAgIAot
ICAgIG1fc3R5bGUgPSBBcHBseVN0eWxlQ29tbWFuZDo6ZWRpdGluZ1N0eWxlQXRQb3NpdGlvbihw
b3MsIEluY2x1ZGVUeXBpbmdTdHlsZSk7CisgICAgbV9zdHlsZSA9IGVkaXRpbmdTdHlsZUluY2x1
ZGluZ1R5cGluZ1N0eWxlKHBvcyk7CiB9CiAKIHZvaWQgSW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9y
Q29tbWFuZDo6YXBwbHlTdHlsZUFmdGVySW5zZXJ0aW9uKE5vZGUqIG9yaWdpbmFsRW5jbG9zaW5n
QmxvY2spCkBAIC05NSwxNCArOTIsMTMgQEAgdm9pZCBJbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JD
b21tYW5kOjphcAogICAgICAgICBvcmlnaW5hbEVuY2xvc2luZ0Jsb2NrLT5oYXNUYWdOYW1lKGg0
VGFnKSB8fAogICAgICAgICBvcmlnaW5hbEVuY2xvc2luZ0Jsb2NrLT5oYXNUYWdOYW1lKGg1VGFn
KSkKICAgICAgICAgcmV0dXJuOwotICAgICAgICAKKwogICAgIGlmICghbV9zdHlsZSkKICAgICAg
ICAgcmV0dXJuOwotICAgIAotICAgIHByZXBhcmVFZGl0aW5nU3R5bGVUb0FwcGx5QXQobV9zdHls
ZS5nZXQoKSwgZW5kaW5nU2VsZWN0aW9uKCkuc3RhcnQoKSk7CiAKLSAgICBpZiAobV9zdHlsZS0+
bGVuZ3RoKCkgPiAwKQotICAgICAgICBhcHBseVN0eWxlKG1fc3R5bGUuZ2V0KCkpOworICAgIG1f
c3R5bGUtPnByZXBhcmVUb0FwcGx5QXQoZW5kaW5nU2VsZWN0aW9uKCkuc3RhcnQoKSk7CisgICAg
aWYgKCFtX3N0eWxlLT5pc0VtcHR5KCkpCisgICAgICAgIGFwcGx5U3R5bGUobV9zdHlsZS0+c3R5
bGUoKSk7CiB9CiAKIGJvb2wgSW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQ29tbWFuZDo6c2hvdWxk
VXNlRGVmYXVsdFBhcmFncmFwaEVsZW1lbnQoTm9kZSogZW5jbG9zaW5nQmxvY2spIGNvbnN0Cklu
ZGV4OiBXZWJDb3JlL2VkaXRpbmcvSW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQ29tbWFuZC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9JbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21t
YW5kLmgJKHJldmlzaW9uIDcxNDgzKQorKysgV2ViQ29yZS9lZGl0aW5nL0luc2VydFBhcmFncmFw
aFNlcGFyYXRvckNvbW1hbmQuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsOCBAQAogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIEVkaXRpbmdTdHlsZTsKKwogY2xhc3MgSW5zZXJ0
UGFyYWdyYXBoU2VwYXJhdG9yQ29tbWFuZCA6IHB1YmxpYyBDb21wb3NpdGVFZGl0Q29tbWFuZCB7
CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9y
Q29tbWFuZD4gY3JlYXRlKERvY3VtZW50KiBkb2N1bWVudCwgYm9vbCB1c2VEZWZhdWx0UGFyYWdy
YXBoRWxlbWVudCA9IGZhbHNlKQpAQCAtNDYsMTMgKzQ4LDEzIEBAIHByaXZhdGU6CiAgICAgdm9p
ZCBhcHBseVN0eWxlQWZ0ZXJJbnNlcnRpb24oTm9kZSogb3JpZ2luYWxFbmNsb3NpbmdCbG9jayk7
CiAgICAgdm9pZCBnZXRBbmNlc3RvcnNJbnNpZGVCbG9jayhjb25zdCBOb2RlKiBpbnNlcnRpb25O
b2RlLCBFbGVtZW50KiBvdXRlckJsb2NrLCBWZWN0b3I8RWxlbWVudCo+JiBhbmNlc3RvcnMpOwog
ICAgIFBhc3NSZWZQdHI8RWxlbWVudD4gY2xvbmVIaWVyYXJjaHlVbmRlck5ld0Jsb2NrKGNvbnN0
IFZlY3RvcjxFbGVtZW50Kj4mIGFuY2VzdG9ycywgUGFzc1JlZlB0cjxFbGVtZW50PiBibG9ja1Rv
SW5zZXJ0KTsKLSAgICAKKwogICAgIGJvb2wgc2hvdWxkVXNlRGVmYXVsdFBhcmFncmFwaEVsZW1l
bnQoTm9kZSopIGNvbnN0OwogCiAgICAgdmlydHVhbCBib29sIHByZXNlcnZlc1R5cGluZ1N0eWxl
KCkgY29uc3Q7CiAKLSAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IG1fc3R5
bGU7Ci0gICAgCisgICAgUmVmUHRyPEVkaXRpbmdTdHlsZT4gbV9zdHlsZTsKKwogICAgIGJvb2wg
bV9tdXN0VXNlRGVmYXVsdFBhcmFncmFwaEVsZW1lbnQ7CiB9OwogCkluZGV4OiBXZWJDb3JlL2Vk
aXRpbmcvUmVtb3ZlRm9ybWF0Q29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0
aW5nL1JlbW92ZUZvcm1hdENvbW1hbmQuY3BwCShyZXZpc2lvbiA3MTQ4MykKKysrIFdlYkNvcmUv
ZWRpdGluZy9SZW1vdmVGb3JtYXRDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsMTgg
KzI4LDExIEBACiAjaW5jbHVkZSAiUmVtb3ZlRm9ybWF0Q29tbWFuZC5oIgogCiAjaW5jbHVkZSAi
QXBwbHlTdHlsZUNvbW1hbmQuaCIKLSNpbmNsdWRlICJDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRp
b24uaCIKLSNpbmNsdWRlICJDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbi5oIgotI2luY2x1ZGUg
IkNTU1ZhbHVlS2V5d29yZHMuaCIKLSNpbmNsdWRlICJFZGl0b3IuaCIKKyNpbmNsdWRlICJFZGl0
aW5nU3R5bGUuaCIKKyNpbmNsdWRlICJFbGVtZW50LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKLSNp
bmNsdWRlICJIVE1MRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgotI2luY2x1ZGUg
IlZpc2libGVTZWxlY3Rpb24uaCIKICNpbmNsdWRlICJTZWxlY3Rpb25Db250cm9sbGVyLmgiCi0j
aW5jbHVkZSAiVGV4dEl0ZXJhdG9yLmgiCi0jaW5jbHVkZSAiVHlwaW5nQ29tbWFuZC5oIgotI2lu
Y2x1ZGUgImh0bWxlZGl0aW5nLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtOTIsOSAr
ODUsOSBAQCB2b2lkIFJlbW92ZUZvcm1hdENvbW1hbmQ6OmRvQXBwbHkoKQogICAgIC8vIEdldCB0
aGUgZGVmYXVsdCBzdHlsZSBmb3IgdGhpcyBlZGl0YWJsZSByb290LCBpdCdzIHRoZSBzdHlsZSB0
aGF0IHdlJ2xsIGdpdmUgdGhlCiAgICAgLy8gY29udGVudCB0aGF0IHdlJ3JlIG9wZXJhdGluZyBv
bi4KICAgICBOb2RlKiByb290ID0gZnJhbWUtPnNlbGVjdGlvbigpLT5yb290RWRpdGFibGVFbGVt
ZW50KCk7Ci0gICAgUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBkZWZhdWx0U3R5
bGUgPSBBcHBseVN0eWxlQ29tbWFuZDo6ZWRpdGluZ1N0eWxlQXRQb3NpdGlvbihQb3NpdGlvbihy
b290LCAwKSk7CisgICAgUmVmUHRyPEVkaXRpbmdTdHlsZT4gZGVmYXVsdFN0eWxlID0gRWRpdGlu
Z1N0eWxlOjpjcmVhdGUocm9vdCk7CiAKLSAgICBhcHBseUNvbW1hbmRUb0NvbXBvc2l0ZShBcHBs
eVN0eWxlQ29tbWFuZDo6Y3JlYXRlKGRvY3VtZW50KCksIGRlZmF1bHRTdHlsZS5nZXQoKSwgaXNF
bGVtZW50Rm9yUmVtb3ZlRm9ybWF0Q29tbWFuZCwgZWRpdGluZ0FjdGlvbigpKSk7CisgICAgYXBw
bHlDb21tYW5kVG9Db21wb3NpdGUoQXBwbHlTdHlsZUNvbW1hbmQ6OmNyZWF0ZShkb2N1bWVudCgp
LCBkZWZhdWx0U3R5bGUtPnN0eWxlKCksIGlzRWxlbWVudEZvclJlbW92ZUZvcm1hdENvbW1hbmQs
IGVkaXRpbmdBY3Rpb24oKSkpOwogfQogCiB9CkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvUmVwbGFj
ZVNlbGVjdGlvbkNvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9SZXBs
YWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAJKHJldmlzaW9uIDcxNDgzKQorKysgV2ViQ29yZS9lZGl0
aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyAr
MzEsNiBAQAogI2luY2x1ZGUgIkJyZWFrQmxvY2txdW90ZUNvbW1hbmQuaCIKICNpbmNsdWRlICJD
U1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uaCIKICNpbmNsdWRlICJDU1NNdXRhYmxlU3R5bGVE
ZWNsYXJhdGlvbi5oIgotI2luY2x1ZGUgIkNTU1Byb3BlcnR5LmgiCiAjaW5jbHVkZSAiQ1NTUHJv
cGVydHlOYW1lcy5oIgogI2luY2x1ZGUgIkNTU1ZhbHVlS2V5d29yZHMuaCIKICNpbmNsdWRlICJE
b2N1bWVudC5oIgpAQCAtNTUyLDM1ICs1NTEsMzYgQEAgVmlzaWJsZVBvc2l0aW9uIFJlcGxhY2VT
ZWxlY3Rpb25Db21tYW5kOgogc3RhdGljIGJvb2wgaGFuZGxlU3R5bGVTcGFuc0JlZm9yZUluc2Vy
dGlvbihSZXBsYWNlbWVudEZyYWdtZW50JiBmcmFnbWVudCwgY29uc3QgUG9zaXRpb24mIGluc2Vy
dGlvblBvcykKIHsKICAgICBOb2RlKiB0b3BOb2RlID0gZnJhZ21lbnQuZmlyc3RDaGlsZCgpOwot
ICAgIAorCiAgICAgLy8gSGFuZGxpbmcgdGhlIGNhc2Ugd2hlcmUgd2UgYXJlIGRvaW5nIFBhc3Rl
IGFzIFF1b3RhdGlvbiBvciBwYXN0aW5nIGludG8gcXVvdGVkIGNvbnRlbnQgaXMgbW9yZSBjb21w
bGljYXRlZCAoc2VlIGhhbmRsZVN0eWxlU3BhbnMpCiAgICAgLy8gYW5kIGRvZXNuJ3QgcmVjZWl2
ZSB0aGUgb3B0aW1pemF0aW9uLgogICAgIGlmIChpc01haWxQYXN0ZUFzUXVvdGF0aW9uTm9kZSh0
b3BOb2RlKSB8fCBuZWFyZXN0TWFpbEJsb2NrcXVvdGUodG9wTm9kZSkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAKKwogICAgIC8vIEVpdGhlciB0aGVyZSBhcmUgbm8gc3R5bGUgc3BhbnMg
aW4gdGhlIGZyYWdtZW50IG9yIGEgV2ViS2l0IGNsaWVudCBoYXMgYWRkZWQgY29udGVudCB0byB0
aGUgZnJhZ21lbnQKICAgICAvLyBiZWZvcmUgaW5zZXJ0aW5nIGl0LiAgTG9vayBmb3IgYW5kIGhh
bmRsZSBzdHlsZSBzcGFucyBhZnRlciBpbnNlcnRpb24uCiAgICAgaWYgKCFpc1N0eWxlU3Bhbih0
b3BOb2RlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAorCiAgICAgTm9kZSogc291cmNl
RG9jdW1lbnRTdHlsZVNwYW4gPSB0b3BOb2RlOwogICAgIFJlZlB0cjxOb2RlPiBjb3BpZWRSYW5n
ZVN0eWxlU3BhbiA9IHNvdXJjZURvY3VtZW50U3R5bGVTcGFuLT5maXJzdENoaWxkKCk7CiAKLSAg
ICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IHN0eWxlQXRJbnNlcnRpb25Qb3Mg
PSBBcHBseVN0eWxlQ29tbWFuZDo6ZWRpdGluZ1N0eWxlQXRQb3NpdGlvbihyYW5nZUNvbXBsaWFu
dEVxdWl2YWxlbnQoaW5zZXJ0aW9uUG9zKSk7CisgICAgUmVmUHRyPEVkaXRpbmdTdHlsZT4gc3R5
bGVBdEluc2VydGlvblBvcyA9IEVkaXRpbmdTdHlsZTo6Y3JlYXRlKHJhbmdlQ29tcGxpYW50RXF1
aXZhbGVudChpbnNlcnRpb25Qb3MpKTsKKyAgICBTdHJpbmcgc3R5bGVUZXh0ID0gc3R5bGVBdElu
c2VydGlvblBvcy0+c3R5bGUoKS0+Y3NzVGV4dCgpOwogCi0gICAgU3RyaW5nIHN0eWxlVGV4dCA9
IHN0eWxlQXRJbnNlcnRpb25Qb3MtPmNzc1RleHQoKTsKLSAgICAKKyAgICAvLyBGSVhNRTogVGhp
cyBzdHJpbmcgY29tcGFyaXNvbiBpcyBhIG5haXZlIHdheSBvZiBjb21wYXJpbmcgdHdvIHN0eWxl
cy4KKyAgICAvLyBXZSBzaG91bGQgYmUgdGFraW5nIHRoZSBkaWZmIGFuZCBjaGVjayB0aGF0IHRo
ZSBkaWZmIGlzIGVtcHR5LgogICAgIGlmIChzdHlsZVRleHQgPT0gc3RhdGljX2Nhc3Q8RWxlbWVu
dCo+KHNvdXJjZURvY3VtZW50U3R5bGVTcGFuKS0+Z2V0QXR0cmlidXRlKHN0eWxlQXR0cikpIHsK
ICAgICAgICAgZnJhZ21lbnQucmVtb3ZlTm9kZVByZXNlcnZpbmdDaGlsZHJlbihzb3VyY2VEb2N1
bWVudFN0eWxlU3Bhbik7CiAgICAgICAgIGlmICghaXNTdHlsZVNwYW4oY29waWVkUmFuZ2VTdHls
ZVNwYW4uZ2V0KCkpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQotICAgICAgICAK
KwogICAgIGlmIChpc1N0eWxlU3Bhbihjb3BpZWRSYW5nZVN0eWxlU3Bhbi5nZXQoKSkgJiYgc3R5
bGVUZXh0ID09IHN0YXRpY19jYXN0PEVsZW1lbnQqPihjb3BpZWRSYW5nZVN0eWxlU3Bhbi5nZXQo
KSktPmdldEF0dHJpYnV0ZShzdHlsZUF0dHIpKSB7CiAgICAgICAgIGZyYWdtZW50LnJlbW92ZU5v
ZGVQcmVzZXJ2aW5nQ2hpbGRyZW4oY29waWVkUmFuZ2VTdHlsZVNwYW4uZ2V0KCkpOwogICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICB9Ci0gICAgCisKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKQEAg
LTYxNSwyOSArNjE1LDIwIEBAIHZvaWQgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OmhhbmRsZVN0
eWwKICAgICAvLyB3ZSBhcmUgaGVyZSBiZWNhdXNlIG9mIGEgZG9jdW1lbnQuZXhlY0NvbW1hbmQo
Ikluc2VydEhUTUwiLCAuLi4pIGNhbGwuCiAgICAgaWYgKCFzb3VyY2VEb2N1bWVudFN0eWxlU3Bh
bikKICAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxl
RGVjbGFyYXRpb24+IHNvdXJjZURvY3VtZW50U3R5bGUgPSBzdGF0aWNfY2FzdDxIVE1MRWxlbWVu
dCo+KHNvdXJjZURvY3VtZW50U3R5bGVTcGFuKS0+Z2V0SW5saW5lU3R5bGVEZWNsKCktPmNvcHko
KTsKKworICAgIFJlZlB0cjxFZGl0aW5nU3R5bGU+IHNvdXJjZURvY3VtZW50U3R5bGUgPSBFZGl0
aW5nU3R5bGU6OmNyZWF0ZShzdGF0aWNfY2FzdDxIVE1MRWxlbWVudCo+KHNvdXJjZURvY3VtZW50
U3R5bGVTcGFuKS0+Z2V0SW5saW5lU3R5bGVEZWNsKCkpOwogICAgIENvbnRhaW5lck5vZGUqIGNv
bnRleHQgPSBzb3VyY2VEb2N1bWVudFN0eWxlU3Bhbi0+cGFyZW50Tm9kZSgpOwotICAgIAorCiAg
ICAgLy8gSWYgTWFpbCB3cmFwcyB0aGUgZnJhZ21lbnQgd2l0aCBhIFBhc3RlIGFzIFF1b3RhdGlv
biBibG9ja3F1b3RlLCBvciBpZiB5b3UncmUgcGFzdGluZyBpbnRvIGEgcXVvdGVkIHJlZ2lvbiwK
ICAgICAvLyBzdHlsZXMgZnJvbSBibG9ja3F1b3RlTm9kZSBhcmUgYWxsb3dlZCB0byBvdmVycmlk
ZSB0aG9zZSBmcm9tIHRoZSBzb3VyY2UgZG9jdW1lbnQsIHNlZSA8cmRhcjovL3Byb2JsZW0vNDkz
MDk4Nj4gYW5kIDxyZGFyOi8vcHJvYmxlbS81MDg5MzI3Pi4KICAgICBOb2RlKiBibG9ja3F1b3Rl
Tm9kZSA9IGlzTWFpbFBhc3RlQXNRdW90YXRpb25Ob2RlKGNvbnRleHQpID8gY29udGV4dCA6IG5l
YXJlc3RNYWlsQmxvY2txdW90ZShjb250ZXh0KTsKICAgICBpZiAoYmxvY2txdW90ZU5vZGUpIHsK
LSAgICAgICAgUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBibG9ja3F1b3RlU3R5
bGUgPSBBcHBseVN0eWxlQ29tbWFuZDo6ZWRpdGluZ1N0eWxlQXRQb3NpdGlvbihQb3NpdGlvbihi
bG9ja3F1b3RlTm9kZSwgMCkpOwotICAgICAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFy
YXRpb24+IHBhcmVudFN0eWxlID0gQXBwbHlTdHlsZUNvbW1hbmQ6OmVkaXRpbmdTdHlsZUF0UG9z
aXRpb24oUG9zaXRpb24oYmxvY2txdW90ZU5vZGUtPnBhcmVudE5vZGUoKSwgMCkpOwotICAgICAg
ICBwYXJlbnRTdHlsZS0+ZGlmZihibG9ja3F1b3RlU3R5bGUuZ2V0KCkpOwotCi0gICAgICAgIENT
U011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpjb25zdF9pdGVyYXRvciBlbmQgPSBibG9ja3F1b3Rl
U3R5bGUtPmVuZCgpOwotICAgICAgICBmb3IgKENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpj
b25zdF9pdGVyYXRvciBpdCA9IGJsb2NrcXVvdGVTdHlsZS0+YmVnaW4oKTsgaXQgIT0gZW5kOyAr
K2l0KSB7Ci0gICAgICAgICAgICBjb25zdCBDU1NQcm9wZXJ0eSYgcHJvcGVydHkgPSAqaXQ7Ci0g
ICAgICAgICAgICBzb3VyY2VEb2N1bWVudFN0eWxlLT5yZW1vdmVQcm9wZXJ0eShwcm9wZXJ0eS5p
ZCgpKTsKLSAgICAgICAgfSAgICAgICAgCi0KKyAgICAgICAgc291cmNlRG9jdW1lbnRTdHlsZS0+
cmVtb3ZlU3R5bGVDb25mbGljdGluZ1dpdGhTdHlsZU9mTm9kZShibG9ja3F1b3RlTm9kZSk7CiAg
ICAgICAgIGNvbnRleHQgPSBibG9ja3F1b3RlTm9kZS0+cGFyZW50Tm9kZSgpOwogICAgIH0KIAog
ICAgIC8vIFRoaXMgb3BlcmF0aW9uIHJlcXVpcmVzIHRoYXQgb25seSBlZGl0aW5nIHN0eWxlcyB0
byBiZSByZW1vdmVkIGZyb20gc291cmNlRG9jdW1lbnRTdHlsZS4KLSAgICBwcmVwYXJlRWRpdGlu
Z1N0eWxlVG9BcHBseUF0KHNvdXJjZURvY3VtZW50U3R5bGUuZ2V0KCksIFBvc2l0aW9uKGNvbnRl
eHQsIDApKTsKKyAgICBzb3VyY2VEb2N1bWVudFN0eWxlLT5wcmVwYXJlVG9BcHBseUF0KGZpcnN0
UG9zaXRpb25Jbk5vZGUoY29udGV4dCkpOwogCiAgICAgLy8gUmVtb3ZlIGJsb2NrIHByb3BlcnRp
ZXMgaW4gdGhlIHNwYW4ncyBzdHlsZS4gVGhpcyBwcmV2ZW50cyBwcm9wZXJ0aWVzIHRoYXQgcHJv
YmFibHkgaGF2ZSBubyBlZmZlY3QgCiAgICAgLy8gY3VycmVudGx5IGZyb20gYWZmZWN0aW5nIGJs
b2NrcyBsYXRlciBpZiB0aGUgc3R5bGUgaXMgY2xvbmVkIGZvciBhIG5ldyBibG9jayBlbGVtZW50
IGR1cmluZyBhIGZ1dHVyZSAKQEAgLTY0NSw0OSArNjM2LDQ0IEBAIHZvaWQgUmVwbGFjZVNlbGVj
dGlvbkNvbW1hbmQ6OmhhbmRsZVN0eWwKICAgICAvLyBGSVhNRTogVGhleSAqY2FuKiBoYXZlIGFu
IGVmZmVjdCBjdXJyZW50bHkgaWYgYmxvY2tzIGJlbmVhdGggdGhlIHN0eWxlIHNwYW4gYXJlbid0
IGluZGl2aWR1YWxseSBtYXJrZWQKICAgICAvLyB3aXRoIGJsb2NrIHN0eWxlcyBieSB0aGUgZWRp
dGluZyBlbmdpbmUgdXNlZCB0byBzdHlsZSB0aGVtLiAgV2ViS2l0IGRvZXNuJ3QgZG8gdGhpcywg
YnV0IG90aGVycyBtaWdodC4KICAgICBzb3VyY2VEb2N1bWVudFN0eWxlLT5yZW1vdmVCbG9ja1By
b3BlcnRpZXMoKTsKLSAgICAKKwogICAgIC8vIFRoZSBzdHlsZXMgb24gc291cmNlRG9jdW1lbnRT
dHlsZVNwYW4gYXJlIGFsbCByZWR1bmRhbnQsIGFuZCB0aGVyZSBpcyBubyBjb3BpZWRSYW5nZVN0
eWxlU3BhbgogICAgIC8vIHRvIGNvbnNpZGVyLiAgV2UncmUgZmluaXNoZWQuCi0gICAgaWYgKHNv
dXJjZURvY3VtZW50U3R5bGUtPmxlbmd0aCgpID09IDAgJiYgIWNvcGllZFJhbmdlU3R5bGVTcGFu
KSB7CisgICAgaWYgKHNvdXJjZURvY3VtZW50U3R5bGUtPmlzRW1wdHkoKSAmJiAhY29waWVkUmFu
Z2VTdHlsZVNwYW4pIHsKICAgICAgICAgcmVtb3ZlTm9kZVByZXNlcnZpbmdDaGlsZHJlbihzb3Vy
Y2VEb2N1bWVudFN0eWxlU3Bhbik7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgCisKICAg
ICAvLyBUaGVyZSBhcmUgbm9uLXJlZHVuZGFudCBzdHlsZXMgb24gc291cmNlRG9jdW1lbnRTdHls
ZVNwYW4sIGJ1dCB0aGVyZSBpcyBubwogICAgIC8vIGNvcGllZFJhbmdlU3R5bGVTcGFuLiAgUmVt
b3ZlIHRoZSBzcGFuLCBiZWNhdXNlIGl0IGNvdWxkIGJlIHN1cnJvdW5kaW5nIGJsb2NrIGVsZW1l
bnRzLAogICAgIC8vIGFuZCBhcHBseSB0aGUgc3R5bGVzIHRvIGl0cyBjaGlsZHJlbi4KLSAgICBp
ZiAoc291cmNlRG9jdW1lbnRTdHlsZS0+bGVuZ3RoKCkgPiAwICYmICFjb3BpZWRSYW5nZVN0eWxl
U3BhbikgewotICAgICAgICBjb3B5U3R5bGVUb0NoaWxkcmVuKHNvdXJjZURvY3VtZW50U3R5bGVT
cGFuLCBzb3VyY2VEb2N1bWVudFN0eWxlLmdldCgpKTsgCisgICAgaWYgKCFzb3VyY2VEb2N1bWVu
dFN0eWxlLT5pc0VtcHR5KCkgJiYgIWNvcGllZFJhbmdlU3R5bGVTcGFuKSB7CisgICAgICAgIGNv
cHlTdHlsZVRvQ2hpbGRyZW4oc291cmNlRG9jdW1lbnRTdHlsZVNwYW4sIHNvdXJjZURvY3VtZW50
U3R5bGUtPnN0eWxlKCkpOyAKICAgICAgICAgcmVtb3ZlTm9kZVByZXNlcnZpbmdDaGlsZHJlbihz
b3VyY2VEb2N1bWVudFN0eWxlU3Bhbik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCi0g
ICAgUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBjb3BpZWRSYW5nZVN0eWxlID0g
c3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnQqPihjb3BpZWRSYW5nZVN0eWxlU3BhbiktPmdldElubGlu
ZVN0eWxlRGVjbCgpLT5jb3B5KCk7Ci0gICAgCisgICAgUmVmUHRyPEVkaXRpbmdTdHlsZT4gY29w
aWVkUmFuZ2VTdHlsZSA9IEVkaXRpbmdTdHlsZTo6Y3JlYXRlKHN0YXRpY19jYXN0PEhUTUxFbGVt
ZW50Kj4oY29waWVkUmFuZ2VTdHlsZVNwYW4pLT5nZXRJbmxpbmVTdHlsZURlY2woKSk7CisKICAg
ICAvLyBXZSdyZSBnb2luZyB0byBwdXQgc291cmNlRG9jdW1lbnRTdHlsZVNwYW4ncyBub24tcmVk
dW5kYW50IHN0eWxlcyBvbnRvIGNvcGllZFJhbmdlU3R5bGVTcGFuLAogICAgIC8vIGFzIGxvbmcg
YXMgdGhleSBhcmVuJ3Qgb3ZlcnJpZGRlbiBieSBvbmVzIG9uIGNvcGllZFJhbmdlU3R5bGVTcGFu
LgotICAgIHNvdXJjZURvY3VtZW50U3R5bGUtPm1lcmdlKGNvcGllZFJhbmdlU3R5bGUuZ2V0KCks
IHRydWUpOwotICAgIGNvcGllZFJhbmdlU3R5bGUgPSBzb3VyY2VEb2N1bWVudFN0eWxlOwotICAg
IAorICAgIGNvcGllZFJhbmdlU3R5bGUtPnN0eWxlKCktPm1lcmdlKHNvdXJjZURvY3VtZW50U3R5
bGUtPnN0eWxlKCksIGZhbHNlKTsKKwogICAgIHJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW4o
c291cmNlRG9jdW1lbnRTdHlsZVNwYW4pOwotICAgIAorCiAgICAgLy8gUmVtb3ZlIHJlZHVuZGFu
dCBzdHlsZXMuCiAgICAgY29udGV4dCA9IGNvcGllZFJhbmdlU3R5bGVTcGFuLT5wYXJlbnROb2Rl
KCk7Ci0gICAgcHJlcGFyZUVkaXRpbmdTdHlsZVRvQXBwbHlBdChjb3BpZWRSYW5nZVN0eWxlLmdl
dCgpLCBQb3NpdGlvbihjb250ZXh0LCAwKSk7Ci0KLSAgICAvLyBTZWUgdGhlIGNvbW1lbnRzIGFi
b3ZlIGFib3V0IHJlbW92aW5nIGJsb2NrIHByb3BlcnRpZXMuCisgICAgY29waWVkUmFuZ2VTdHls
ZS0+cHJlcGFyZVRvQXBwbHlBdChmaXJzdFBvc2l0aW9uSW5Ob2RlKGNvbnRleHQpKTsKICAgICBj
b3BpZWRSYW5nZVN0eWxlLT5yZW1vdmVCbG9ja1Byb3BlcnRpZXMoKTsKLQotICAgIC8vIEFsbCB0
aGUgc3R5bGVzIG9uIGNvcGllZFJhbmdlU3R5bGVTcGFuIGFyZSByZWR1bmRhbnQsIHJlbW92ZSBp
dC4KLSAgICBpZiAoY29waWVkUmFuZ2VTdHlsZS0+bGVuZ3RoKCkgPT0gMCkgeworICAgIGlmIChj
b3BpZWRSYW5nZVN0eWxlLT5pc0VtcHR5KCkpIHsKICAgICAgICAgcmVtb3ZlTm9kZVByZXNlcnZp
bmdDaGlsZHJlbihjb3BpZWRSYW5nZVN0eWxlU3Bhbik7CiAgICAgICAgIHJldHVybjsKICAgICB9
Ci0gICAgCisKICAgICAvLyBDbGVhciB0aGUgcmVkdW5kYW50IHN0eWxlcyBmcm9tIHRoZSBzcGFu
J3Mgc3R5bGUgYXR0cmlidXRlLgogICAgIC8vIEZJWE1FOiBJZiBmb250LWZhbWlseTotd2Via2l0
LW1vbm9zcGFjZSBpcyBub24tcmVkdW5kYW50LCB0aGVuIHRoZSBmb250LXNpemUgc2hvdWxkIHN0
YXksIGV2ZW4gaWYgaXQKICAgICAvLyBhcHBlYXJzIHJlZHVuZGFudC4KLSAgICBzZXROb2RlQXR0
cmlidXRlKHN0YXRpY19jYXN0PEVsZW1lbnQqPihjb3BpZWRSYW5nZVN0eWxlU3BhbiksIHN0eWxl
QXR0ciwgY29waWVkUmFuZ2VTdHlsZS0+Y3NzVGV4dCgpKTsKKyAgICBzZXROb2RlQXR0cmlidXRl
KHN0YXRpY19jYXN0PEVsZW1lbnQqPihjb3BpZWRSYW5nZVN0eWxlU3BhbiksIHN0eWxlQXR0ciwg
Y29waWVkUmFuZ2VTdHlsZS0+c3R5bGUoKS0+Y3NzVGV4dCgpKTsKIH0KIAogLy8gVGFrZSB0aGUg
c3R5bGUgYXR0cmlidXRlIG9mIGEgc3BhbiBhbmQgYXBwbHkgaXQgdG8gaXQncyBjaGlsZHJlbiBp
bnN0ZWFkLiAgVGhpcyBhbGxvd3MgdXMgdG8KQEAgLTgwNSw4ICs3OTEsOCBAQCB2b2lkIFJlcGxh
Y2VTZWxlY3Rpb25Db21tYW5kOjpkb0FwcGx5KCkKICAgICAgICAgbV9tYXRjaFN0eWxlID0gZmFs
c2U7CiAgICAgCiAgICAgaWYgKG1fbWF0Y2hTdHlsZSkKLSAgICAgICAgbV9pbnNlcnRpb25TdHls
ZSA9IEFwcGx5U3R5bGVDb21tYW5kOjplZGl0aW5nU3R5bGVBdFBvc2l0aW9uKHNlbGVjdGlvbi5z
dGFydCgpLCBJbmNsdWRlVHlwaW5nU3R5bGUpOwotICAgIAorICAgICAgICBtX2luc2VydGlvblN0
eWxlID0gZWRpdGluZ1N0eWxlSW5jbHVkaW5nVHlwaW5nU3R5bGUoc2VsZWN0aW9uLnN0YXJ0KCkp
OworCiAgICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVTdGFydCA9IHNlbGVjdGlvbi52aXNpYmxl
U3RhcnQoKTsKICAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZUVuZCA9IHNlbGVjdGlvbi52aXNp
YmxlRW5kKCk7CiAgICAgCkBAIC0xMTU3LDcgKzExNDMsNyBAQCB2b2lkIFJlcGxhY2VTZWxlY3Rp
b25Db21tYW5kOjpjb21wbGV0ZUhUCiAKICAgICAgICAgaWYgKG1fbWF0Y2hTdHlsZSkgewogICAg
ICAgICAgICAgQVNTRVJUKG1faW5zZXJ0aW9uU3R5bGUpOwotICAgICAgICAgICAgYXBwbHlTdHls
ZShtX2luc2VydGlvblN0eWxlLmdldCgpLCBzdGFydCwgZW5kKTsKKyAgICAgICAgICAgIGFwcGx5
U3R5bGUobV9pbnNlcnRpb25TdHlsZS0+c3R5bGUoKSwgc3RhcnQsIGVuZCk7CiAgICAgICAgIH0g
ICAgCiAgICAgICAgIAogICAgICAgICBpZiAobGFzdFBvc2l0aW9uVG9TZWxlY3QuaXNOb3ROdWxs
KCkpCkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuaAkocmV2
aXNpb24gNzE0ODMpCisrKyBXZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQu
aAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CiBjbGFzcyBEb2N1bWVudEZyYWdtZW50OworY2xhc3MgRWRpdGluZ1N0eWxlOwogY2xhc3MgUmVw
bGFjZW1lbnRGcmFnbWVudDsKIAogY2xhc3MgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQgOiBwdWJs
aWMgQ29tcG9zaXRlRWRpdENvbW1hbmQgewpAQCAtODIsNyArODMsNyBAQCBwcml2YXRlOgogCiAg
ICAgUmVmUHRyPE5vZGU+IG1fZmlyc3ROb2RlSW5zZXJ0ZWQ7CiAgICAgUmVmUHRyPE5vZGU+IG1f
bGFzdExlYWZJbnNlcnRlZDsKLSAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+
IG1faW5zZXJ0aW9uU3R5bGU7CisgICAgUmVmUHRyPEVkaXRpbmdTdHlsZT4gbV9pbnNlcnRpb25T
dHlsZTsKICAgICBib29sIG1fc2VsZWN0UmVwbGFjZW1lbnQ7CiAgICAgYm9vbCBtX3NtYXJ0UmVw
bGFjZTsKICAgICBib29sIG1fbWF0Y2hTdHlsZTsKSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9tYXJr
dXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3BwCShyZXZpc2lv
biA3MTQ4MykKKysrIFdlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNiwxMCArMjYsOCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIm1hcmt1cC5o
IgogCi0jaW5jbHVkZSAiQXBwbHlTdHlsZUNvbW1hbmQuaCIKICNpbmNsdWRlICJDREFUQVNlY3Rp
b24uaCIKICNpbmNsdWRlICJDaGFyYWN0ZXJOYW1lcy5oIgotI2luY2x1ZGUgIkNvbW1lbnQuaCIK
ICNpbmNsdWRlICJDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uaCIKICNpbmNsdWRlICJDU1NN
dXRhYmxlU3R5bGVEZWNsYXJhdGlvbi5oIgogI2luY2x1ZGUgIkNTU1ByaW1pdGl2ZVZhbHVlLmgi
CkBAIC00OSwxMSArNDcsOCBAQAogI2luY2x1ZGUgIkhUTUxCb2R5RWxlbWVudC5oIgogI2luY2x1
ZGUgIkhUTUxFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCi0jaW5jbHVkZSAiSW5s
aW5lVGV4dEJveC5oIgogI2luY2x1ZGUgIktVUkwuaCIKLSNpbmNsdWRlICJMb2dnaW5nLmgiCiAj
aW5jbHVkZSAiTWFya3VwQWNjdW11bGF0b3IuaCIKLSNpbmNsdWRlICJQcm9jZXNzaW5nSW5zdHJ1
Y3Rpb24uaCIKICNpbmNsdWRlICJSYW5nZS5oIgogI2luY2x1ZGUgIlRleHRJdGVyYXRvci5oIgog
I2luY2x1ZGUgIlZpc2libGVTZWxlY3Rpb24uaCIKQEAgLTUyNSwyMyArNTIwLDYgQEAgc3RhdGlj
IE5vZGUqIGhpZ2hlc3RBbmNlc3RvclRvV3JhcE1hcmt1cAogICAgIHJldHVybiBzcGVjaWFsQ29t
bW9uQW5jZXN0b3I7CiB9CiAKLXN0YXRpYyB2b2lkIHJlbW92ZUVuY2xvc2luZ01haWxCbG9ja3F1
b3RlU3R5bGUoQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIHN0eWxlLCBOb2RlKiBub2RlKQot
ewotICAgIE5vZGUqIGJsb2NrcXVvdGUgPSBuZWFyZXN0TWFpbEJsb2NrcXVvdGUobm9kZSk7Ci0g
ICAgaWYgKCFibG9ja3F1b3RlIHx8ICFibG9ja3F1b3RlLT5wYXJlbnROb2RlKCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIHJlbW92ZVN0eWxlc0FkZGVkQnlOb2RlKHN0eWxlLCBibG9ja3F1b3Rl
KTsKLX0KLQotc3RhdGljIHZvaWQgcmVtb3ZlRGVmYXVsdFN0eWxlcyhDU1NNdXRhYmxlU3R5bGVE
ZWNsYXJhdGlvbiogc3R5bGUsIERvY3VtZW50KiBkb2N1bWVudCkKLXsKLSAgICBpZiAoIWRvY3Vt
ZW50IHx8ICFkb2N1bWVudC0+ZG9jdW1lbnRFbGVtZW50KCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIHByZXBhcmVFZGl0aW5nU3R5bGVUb0FwcGx5QXQoc3R5bGUsIFBvc2l0aW9uKGRvY3VtZW50
LT5kb2N1bWVudEVsZW1lbnQoKSwgMCkpOwotfQotCiAvLyBGSVhNRTogU2hvdWxkbid0IHdlIG9t
aXQgc3R5bGUgaW5mbyB3aGVuIGFubm90YXRlID09IERvTm90QW5ub3RhdGVGb3JJbnRlcmNoYW5n
ZT8gCiAvLyBGSVhNRTogQXQgbGVhc3QsIGFubm90YXRpb24gYW5kIHN0eWxlIGluZm8gc2hvdWxk
IHByb2JhYmx5IG5vdCBiZSBpbmNsdWRlZCBpbiByYW5nZS5tYXJrdXBTdHJpbmcoKQogU3RyaW5n
IGNyZWF0ZU1hcmt1cChjb25zdCBSYW5nZSogcmFuZ2UsIFZlY3RvcjxOb2RlKj4qIG5vZGVzLCBF
QW5ub3RhdGVGb3JJbnRlcmNoYW5nZSBzaG91bGRBbm5vdGF0ZSwgYm9vbCBjb252ZXJ0QmxvY2tz
VG9JbmxpbmVzLCBFQWJzb2x1dGVVUkxzIHNob3VsZFJlc29sdmVVUkxzKQpAQCAtNjUwLDM0ICs2
MjgsMzQgQEAgU3RyaW5nIGNyZWF0ZU1hcmt1cChjb25zdCBSYW5nZSogcmFuZ2UsIAogICAgIC8v
IEFkZCBhIHdyYXBwZXIgc3BhbiB3aXRoIHRoZSBzdHlsZXMgdGhhdCBhbGwgb2YgdGhlIG5vZGVz
IGluIHRoZSBtYXJrdXAgaW5oZXJpdC4KICAgICBDb250YWluZXJOb2RlKiBwYXJlbnRPZkxhc3RD
bG9zZWQgPSBsYXN0Q2xvc2VkID8gbGFzdENsb3NlZC0+cGFyZW50Tm9kZSgpIDogMDsKICAgICBp
ZiAocGFyZW50T2ZMYXN0Q2xvc2VkICYmIHBhcmVudE9mTGFzdENsb3NlZC0+cmVuZGVyZXIoKSkg
ewotICAgICAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IHN0eWxlID0gQXBw
bHlTdHlsZUNvbW1hbmQ6OmVkaXRpbmdTdHlsZUF0UG9zaXRpb24oUG9zaXRpb24ocGFyZW50T2ZM
YXN0Q2xvc2VkLCAwKSk7CisgICAgICAgIFJlZlB0cjxFZGl0aW5nU3R5bGU+IHN0eWxlID0gRWRp
dGluZ1N0eWxlOjpjcmVhdGUocGFyZW50T2ZMYXN0Q2xvc2VkKTsKIAogICAgICAgICAvLyBTdHls
ZXMgdGhhdCBNYWlsIGJsb2NrcXVvdGVzIGNvbnRyaWJ1dGUgc2hvdWxkIG9ubHkgYmUgcGxhY2Vk
IG9uIHRoZSBNYWlsIGJsb2NrcXVvdGUsIHRvIGhlbHAKICAgICAgICAgLy8gdXMgZGlmZmVyZW50
aWF0ZSB0aG9zZSBzdHlsZXMgZnJvbSBvbmVzIHRoYXQgdGhlIHVzZXIgaGFzIGFwcGxpZWQuICBU
aGlzIGhlbHBzIHVzCiAgICAgICAgIC8vIGdldCB0aGUgY29sb3Igb2YgY29udGVudCBwYXN0ZWQg
aW50byBibG9ja3F1b3RlcyByaWdodC4KLSAgICAgICAgcmVtb3ZlRW5jbG9zaW5nTWFpbEJsb2Nr
cXVvdGVTdHlsZShzdHlsZS5nZXQoKSwgcGFyZW50T2ZMYXN0Q2xvc2VkKTsKLSAgICAgICAgCisg
ICAgICAgIHN0eWxlLT5yZW1vdmVTdHlsZUFkZGVkQnlOb2RlKG5lYXJlc3RNYWlsQmxvY2txdW90
ZShwYXJlbnRPZkxhc3RDbG9zZWQpKTsKKwogICAgICAgICAvLyBEb2N1bWVudCBkZWZhdWx0IHN0
eWxlcyB3aWxsIGJlIGFkZGVkIG9uIGFub3RoZXIgd3JhcHBlciBzcGFuLgotICAgICAgICByZW1v
dmVEZWZhdWx0U3R5bGVzKHN0eWxlLmdldCgpLCBkb2N1bWVudCk7Ci0gICAgICAgIAorICAgICAg
ICBpZiAoZG9jdW1lbnQgJiYgZG9jdW1lbnQtPmRvY3VtZW50RWxlbWVudCgpKQorICAgICAgICAg
ICAgc3R5bGUtPnByZXBhcmVUb0FwcGx5QXQoZmlyc3RQb3NpdGlvbkluTm9kZShkb2N1bWVudC0+
ZG9jdW1lbnRFbGVtZW50KCkpKTsKKwogICAgICAgICAvLyBTaW5jZSB3ZSBhcmUgY29udmVydGlu
ZyBibG9ja3MgdG8gaW5saW5lcywgcmVtb3ZlIGFueSBpbmhlcml0ZWQgYmxvY2sgcHJvcGVydGll
cyB0aGF0IGFyZSBpbiB0aGUgc3R5bGUuCiAgICAgICAgIC8vIFRoaXMgY3V0cyBvdXQgbWVhbmlu
Z2xlc3MgcHJvcGVydGllcyBhbmQgcHJldmVudHMgcHJvcGVydGllcyBmcm9tIG1hZ2ljYWxseSBh
ZmZlY3RpbmcgYmxvY2tzIGxhdGVyCiAgICAgICAgIC8vIGlmIHRoZSBzdHlsZSBpcyBjbG9uZWQg
Zm9yIGEgbmV3IGJsb2NrIGVsZW1lbnQgZHVyaW5nIGEgZnV0dXJlIGVkaXRpbmcgb3BlcmF0aW9u
LgogICAgICAgICBpZiAoY29udmVydEJsb2Nrc1RvSW5saW5lcykKICAgICAgICAgICAgIHN0eWxl
LT5yZW1vdmVCbG9ja1Byb3BlcnRpZXMoKTsKIAotICAgICAgICBpZiAoc3R5bGUtPmxlbmd0aCgp
ID4gMCkKLSAgICAgICAgICAgIGFjY3VtdWxhdG9yLndyYXBXaXRoU3R5bGVOb2RlKHN0eWxlLmdl
dCgpLCBkb2N1bWVudCk7CisgICAgICAgIGlmICghc3R5bGUtPmlzRW1wdHkoKSkKKyAgICAgICAg
ICAgIGFjY3VtdWxhdG9yLndyYXBXaXRoU3R5bGVOb2RlKHN0eWxlLT5zdHlsZSgpLCBkb2N1bWVu
dCk7CiAgICAgfQogICAgIAogICAgIGlmIChsYXN0Q2xvc2VkICYmIGxhc3RDbG9zZWQgIT0gZG9j
dW1lbnQtPmRvY3VtZW50RWxlbWVudCgpKSB7CiAgICAgICAgIC8vIEFkZCBhIHN0eWxlIHNwYW4g
d2l0aCB0aGUgZG9jdW1lbnQncyBkZWZhdWx0IHN0eWxlcy4gIFdlIGFkZCB0aGVzZSBpbiBhIHNl
cGFyYXRlCiAgICAgICAgIC8vIHNwYW4gc28gdGhhdCBhdCBwYXN0ZSB0aW1lIHdlIGNhbiBkaWZm
ZXJlbnRpYXRlIGJldHdlZW4gZG9jdW1lbnQgZGVmYXVsdHMgYW5kIHVzZXIKICAgICAgICAgLy8g
YXBwbGllZCBzdHlsZXMuCi0gICAgICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlv
bj4gZGVmYXVsdFN0eWxlID0gQXBwbHlTdHlsZUNvbW1hbmQ6OmVkaXRpbmdTdHlsZUF0UG9zaXRp
b24oUG9zaXRpb24oZG9jdW1lbnQtPmRvY3VtZW50RWxlbWVudCgpLCAwKSk7Ci0KLSAgICAgICAg
aWYgKGRlZmF1bHRTdHlsZS0+bGVuZ3RoKCkgPiAwKQotICAgICAgICAgICAgYWNjdW11bGF0b3Iu
d3JhcFdpdGhTdHlsZU5vZGUoZGVmYXVsdFN0eWxlLmdldCgpLCBkb2N1bWVudCk7CisgICAgICAg
IFJlZlB0cjxFZGl0aW5nU3R5bGU+IGRlZmF1bHRTdHlsZSA9IEVkaXRpbmdTdHlsZTo6Y3JlYXRl
KGRvY3VtZW50LT5kb2N1bWVudEVsZW1lbnQoKSk7CisgICAgICAgIGlmICghZGVmYXVsdFN0eWxl
LT5pc0VtcHR5KCkpCisgICAgICAgICAgICBhY2N1bXVsYXRvci53cmFwV2l0aFN0eWxlTm9kZShk
ZWZhdWx0U3R5bGUtPnN0eWxlKCksIGRvY3VtZW50KTsKICAgICB9CiAKICAgICAvLyBGSVhNRTog
VGhlIGludGVyY2hhbmdlIG5ld2xpbmUgc2hvdWxkIGJlIHBsYWNlZCBpbiB0aGUgYmxvY2sgdGhh
dCBpdCdzIGluLCBub3QgYWZ0ZXIgYWxsIG9mIHRoZSBjb250ZW50LCB1bmNvbmRpdGlvbmFsbHku
Cg==
</data>
<flag name="review"
          id="63595"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>