<?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>69023</bug_id>
          
          <creation_ts>2011-09-28 13:30:57 -0700</creation_ts>
          <short_desc>Remove direct reads to m_firstNodeInserted and m_lastLeafInserted in ReplaceSelectionCommand</short_desc>
          <delta_ts>2011-09-29 13:30:53 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>HTML Editing</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</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>68874</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>adele</cc>
    
    <cc>darin</cc>
    
    <cc>enrica</cc>
    
    <cc>eric</cc>
    
    <cc>justin.garcia</cc>
    
    <cc>morrita</cc>
    
    <cc>ojan</cc>
    
    <cc>tkent</cc>
    
    <cc>tony</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>474966</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-09-28 13:30:57 -0700</bug_when>
    <thetext>To resolve the bug 68874, we need to encapsulate all access to m_firstNodeInserted and m_lastLeafInserted except updates.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>474976</commentid>
    <comment_count>1</comment_count>
      <attachid>109066</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-09-28 13:42:18 -0700</bug_when>
    <thetext>Created attachment 109066
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>475529</commentid>
    <comment_count>2</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-09-29 11:00:31 -0700</bug_when>
    <thetext>Any reviewers?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>475540</commentid>
    <comment_count>3</comment_count>
      <attachid>109066</attachid>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2011-09-29 11:18:45 -0700</bug_when>
    <thetext>Comment on attachment 109066
Patch

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

Looks good to me.

&gt; Source/WebCore/editing/ReplaceSelectionCommand.cpp:1226
&gt; +        }

I know the original code was already like this, but it would be nice to have methods to update m_firstNodeInserted and m_lastLeafInserted in a consistent way. It is a bit unclear when reading this code that, in the case of the trailing space there is no explicit update of m_lastLeafInserted, but there is an explicit updated of m_firstNodeInserted in case of the leading space. Only reading the comment above helps you understand.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>475542</commentid>
    <comment_count>4</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-09-29 11:27:21 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 109066 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=109066&amp;action=review
&gt; 
&gt; Looks good to me.
&gt; 
&gt; &gt; Source/WebCore/editing/ReplaceSelectionCommand.cpp:1226
&gt; &gt; +        }
&gt; 
&gt; I know the original code was already like this, but it would be nice to have methods to update m_firstNodeInserted and m_lastLeafInserted in a consistent way. It is a bit unclear when reading this code that, in the case of the trailing space there is no explicit update of m_lastLeafInserted, but there is an explicit updated of m_firstNodeInserted in case of the leading space. Only reading the comment above helps you understand.

Right. The next patch should be able to eliminate all of that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>475642</commentid>
    <comment_count>5</comment_count>
      <attachid>109066</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-29 13:30:49 -0700</bug_when>
    <thetext>Comment on attachment 109066
Patch

Clearing flags on attachment: 109066

Committed r96353: &lt;http://trac.webkit.org/changeset/96353&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>475643</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-29 13:30:53 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>109066</attachid>
            <date>2011-09-28 13:42:18 -0700</date>
            <delta_ts>2011-09-29 13:30:48 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-69023-20110928134217.patch</filename>
            <type>text/plain</type>
            <size>23951</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk2MjU0KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDEgQEAKKzIwMTEtMDktMjggIFJ5b3N1a2Ug
Tml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmVtb3ZlIGRpcmVjdCByZWFkcyB0
byBtX2ZpcnN0Tm9kZUluc2VydGVkIGFuZCBtX2xhc3RMZWFmSW5zZXJ0ZWQgaW4gUmVwbGFjZVNl
bGVjdGlvbkNvbW1hbmQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTY5MDIzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgQ29udmVydGVkIHRvIHJlbW92ZVVucmVuZGVyZWRUZXh0Tm9kZXNBdEVuZHMgdG8gdXNl
IEluc2VydGVkTm9kZXMgaW5zdGVhZCBvZiBtX2ZpcnN0Tm9kZUluc2VydGVkCisgICAgICAgIGFu
ZCBtX2xhc3RMZWFmSW5zZXJ0ZWQuIEV4dHJhY3RlZCB0aGUgbG9naWMgdG8gdXBkYXRlIG5vZGVz
IGFzIEluc2VydGVkTm9kZXM6OndpbGxSZW1vdmVOb2RlCisgICAgICAgIChvbGQgb25lIHdhcyBy
ZW5hbWVkIHRvIEluc2VydGVkTm9kZXM6OndpbGxSZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxkcmVu
KS4KKworICAgICAgICBBbHNvIGV4dHJhY3RlZCBzaG91bGRQZXJmb3JtU21hcnRSZXBsYWNlIGFu
ZCBhZGRTcGFjZXNGb3JTbWFydFJlcGxhY2Ugb3V0IG9mIGRvQXBwbHksCisgICAgICAgIGFuZCBy
ZXdyb3RlIHRoZSBsb2dpYyB0byBvYnRhaW4gZW5kTm9kZSBhbmQgc3RhcnROb2RlIHVzaW5nIHN0
YXJ0T2ZJbnNlcnRlZENvbnRlbnQgYW5kCisgICAgICAgIGVuZE9mSW5zZXJ0ZWRDb250ZW50IGlu
c3RlYWQgb2YgbV9maXJzdE5vZGVJbnNlcnRlZCBhbmQgbV9sYXN0TGVhZkluc2VydGVkLgorCisg
ICAgICAgIEZpbmFsbHksIHJlcGxhY2VkIHRoZSBudWxsaXR5IGNoZWNrcyBvZiBtX2ZpcnN0Tm9k
ZUluc2VydGVkIGFuZCBtX2xhc3RMZWFmSW5zZXJ0ZWQgaW4KKyAgICAgICAgY29tcGxldGVIVE1M
UmVwbGFjZW1lbnQgYnkgbnVsbGl0eSBjaGVja3Mgb2Ygc3RhcnQgYW5kIGVuZCBwb3NpdGlvbnMu
CisKKyAgICAgICAgKiBkb20vTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjp0cmF2
ZXJzZVByZXZpb3VzU2libGluZyk6IEFkZGVkLgorICAgICAgICAqIGRvbS9Ob2RlLmg6CisgICAg
ICAgICogZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6SW5zZXJ0ZWROb2Rlczo6d2lsbFJlbW92ZU5v
ZGVQcmVzZXJ2aW5nQ2hpbGRyZW4pOiBSZW5hbWVkIGZyb20KKyAgICAgICAgd2lsbFJlbW92ZU5v
ZGUuCisgICAgICAgIChXZWJDb3JlOjpSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6SW5zZXJ0ZWRO
b2Rlczo6d2lsbFJlbW92ZU5vZGUpOiBFeHRyYWN0ZWQgZnJvbQorICAgICAgICByZW1vdmVVbnJl
bmRlcmVkVGV4dE5vZGVzQXRFbmRzLgorICAgICAgICAoV2ViQ29yZTo6UmVwbGFjZVNlbGVjdGlv
bkNvbW1hbmQ6OnJlbW92ZVJlZHVuZGFudFN0eWxlc0FuZEtlZXBTdHlsZVNwYW5JbmxpbmUpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OnJlbW92ZVVucmVuZGVy
ZWRUZXh0Tm9kZXNBdEVuZHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVwbGFjZVNlbGVjdGlvbkNv
bW1hbmQ6OnBvc2l0aW9uQXRFbmRPZkluc2VydGVkQ29udGVudCk6IE1hZGUgY29uc3QuCisgICAg
ICAgIChXZWJDb3JlOjpSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6cG9zaXRpb25BdFN0YXJ0T2ZJ
bnNlcnRlZENvbnRlbnQpOiBNYWRlIGNvbnN0LgorICAgICAgICAoV2ViQ29yZTo6UmVwbGFjZVNl
bGVjdGlvbkNvbW1hbmQ6OmhhbmRsZVN0eWxlU3BhbnMpOiBUYWtlcyBmaXJzdE5vZGVJbnNlcnRl
ZCBpbnN0ZWFkIG9mIGRpcmVjdGx5CisgICAgICAgIGFjY2Vzc2luZyBtX2ZpcnN0Tm9kZUluc2Vy
dGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OmRvQXBwbHkp
OgorICAgICAgICAoV2ViQ29yZTo6UmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OnNob3VsZFBlcmZv
cm1TbWFydFJlcGxhY2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVwbGFjZVNlbGVjdGlvbkNvbW1h
bmQ6OmFkZFNwYWNlc0ZvclNtYXJ0UmVwbGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpSZXBsYWNl
U2VsZWN0aW9uQ29tbWFuZDo6Y29tcGxldGVIVE1MUmVwbGFjZW1lbnQpOgorICAgICAgICAqIGVk
aXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuaDoKKwogMjAxMS0wOS0yOCAgSm9zZXBoIFBl
Y29yYXJvICA8am9lcGVja0B3ZWJraXQub3JnPgogCiAgICAgICAgIEZUUERpcmVjdG9yeURvY3Vt
ZW50IFNob3dzIEdhcmJsZWQgU3RyaW5nIGZvciBMYXN0IE1vZGlmaWVkIERhdGUKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9k
b20vTm9kZS5jcHAJKHJldmlzaW9uIDk2MjI5KQorKysgU291cmNlL1dlYkNvcmUvZG9tL05vZGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTkzLDYgKzExOTMsMjAgQEAgTm9kZSogTm9kZTo6dHJh
dmVyc2VQcmV2aW91c05vZGUoY29uc3QgTgogICAgIHJldHVybiBwYXJlbnROb2RlKCk7CiB9CiAK
K05vZGUqIE5vZGU6OnRyYXZlcnNlUHJldmlvdXNTaWJsaW5nKGNvbnN0IE5vZGUqIHN0YXlXaXRo
aW4pIGNvbnN0Cit7CisgICAgaWYgKHRoaXMgPT0gc3RheVdpdGhpbikKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgaWYgKHByZXZpb3VzU2libGluZygpKQorICAgICAgICByZXR1cm4gcHJldmlvdXNT
aWJsaW5nKCk7CisgICAgY29uc3QgTm9kZSAqbiA9IHRoaXM7CisgICAgd2hpbGUgKG4gJiYgIW4t
PnByZXZpb3VzU2libGluZygpICYmICghc3RheVdpdGhpbiB8fCBuLT5wYXJlbnROb2RlKCkgIT0g
c3RheVdpdGhpbikpCisgICAgICAgIG4gPSBuLT5wYXJlbnROb2RlKCk7CisgICAgaWYgKG4pCisg
ICAgICAgIHJldHVybiBuLT5wcmV2aW91c1NpYmxpbmcoKTsKKyAgICByZXR1cm4gMDsKK30KKwog
Tm9kZSogTm9kZTo6dHJhdmVyc2VQcmV2aW91c05vZGVQb3N0T3JkZXIoY29uc3QgTm9kZSogc3Rh
eVdpdGhpbikgY29uc3QKIHsKICAgICBpZiAobGFzdENoaWxkKCkpCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9kb20vTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgJ
KHJldmlzaW9uIDk2MjI5KQorKysgU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaAkod29ya2luZyBj
b3B5KQpAQCAtMzk5LDYgKzM5OSw5IEBAIHB1YmxpYzoKICAgICAvLyBEb2VzIGEgcmV2ZXJzZSBw
cmUtb3JkZXIgdHJhdmVyc2FsIHRvIGZpbmQgdGhlIG5vZGUgdGhhdCBjb21lcyBiZWZvcmUgdGhl
IGN1cnJlbnQgb25lIGluIGRvY3VtZW50IG9yZGVyCiAgICAgTm9kZSogdHJhdmVyc2VQcmV2aW91
c05vZGUoY29uc3QgTm9kZSogc3RheVdpdGhpbiA9IDApIGNvbnN0OwogCisgICAgLy8gTGlrZSB0
cmF2ZXJzZVByZXZpb3VzTm9kZSwgYnV0IHNraXBzIGNoaWxkcmVuIGFuZCBzdGFydHMgd2l0aCB0
aGUgbmV4dCBzaWJsaW5nLgorICAgIE5vZGUqIHRyYXZlcnNlUHJldmlvdXNTaWJsaW5nKGNvbnN0
IE5vZGUqIHN0YXlXaXRoaW4gPSAwKSBjb25zdDsKKwogICAgIC8vIExpa2UgdHJhdmVyc2VOZXh0
Tm9kZSwgYnV0IHZpc2l0cyBwYXJlbnRzIGFmdGVyIHRoZWlyIGNoaWxkcmVuLgogICAgIE5vZGUq
IHRyYXZlcnNlTmV4dE5vZGVQb3N0T3JkZXIoKSBjb25zdDsKIApJbmRleDogU291cmNlL1dlYkNv
cmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAJKHJldmlzaW9u
IDk2MjI5KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFu
ZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1OSw3ICszNTksNyBAQCBpbmxpbmUgdm9pZCBSZXBs
YWNlU2VsZWN0aW9uQ29tbWFuZDo6SW5zCiAgICAgbV9sYXN0Tm9kZUluc2VydGVkID0gbm9kZTsK
IH0KIAotaW5saW5lIHZvaWQgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6Okluc2VydGVkTm9kZXM6
OndpbGxSZW1vdmVOb2RlKE5vZGUqIG5vZGUpCitpbmxpbmUgdm9pZCBSZXBsYWNlU2VsZWN0aW9u
Q29tbWFuZDo6SW5zZXJ0ZWROb2Rlczo6d2lsbFJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW4o
Tm9kZSogbm9kZSkKIHsKICAgICBpZiAobV9maXJzdE5vZGVJbnNlcnRlZCA9PSBub2RlKQogICAg
ICAgICBtX2ZpcnN0Tm9kZUluc2VydGVkID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZSgpOwpAQCAt
MzY3LDYgKzM2NywxNyBAQCBpbmxpbmUgdm9pZCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6SW5z
CiAgICAgICAgIG1fbGFzdE5vZGVJbnNlcnRlZCA9IG5vZGUtPmxhc3RDaGlsZCgpID8gbm9kZS0+
bGFzdENoaWxkKCkgOiBub2RlLT50cmF2ZXJzZU5leHRTaWJsaW5nKCk7CiB9CiAKK2lubGluZSB2
b2lkIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpJbnNlcnRlZE5vZGVzOjp3aWxsUmVtb3ZlTm9k
ZShOb2RlKiBub2RlKQoreworICAgIGlmIChtX2ZpcnN0Tm9kZUluc2VydGVkID09IG5vZGUgJiYg
bV9sYXN0Tm9kZUluc2VydGVkID09IG5vZGUpIHsKKyAgICAgICAgbV9maXJzdE5vZGVJbnNlcnRl
ZCA9IDA7CisgICAgICAgIG1fbGFzdE5vZGVJbnNlcnRlZCA9IDA7CisgICAgfSBlbHNlIGlmICht
X2ZpcnN0Tm9kZUluc2VydGVkID09IG5vZGUpCisgICAgICAgIG1fZmlyc3ROb2RlSW5zZXJ0ZWQg
PSBtX2ZpcnN0Tm9kZUluc2VydGVkLT50cmF2ZXJzZU5leHRTaWJsaW5nKCk7CisgICAgZWxzZSBp
ZiAobV9sYXN0Tm9kZUluc2VydGVkID09IG5vZGUpCisgICAgICAgIG1fbGFzdE5vZGVJbnNlcnRl
ZCA9IG1fbGFzdE5vZGVJbnNlcnRlZC0+dHJhdmVyc2VQcmV2aW91c1NpYmxpbmcoKTsKK30KKwog
UmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OlJlcGxhY2VTZWxlY3Rpb25Db21tYW5kKERvY3VtZW50
KiBkb2N1bWVudCwgUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCwgQ29tbWFu
ZE9wdGlvbnMgb3B0aW9ucywgRWRpdEFjdGlvbiBlZGl0QWN0aW9uKQogICAgIDogQ29tcG9zaXRl
RWRpdENvbW1hbmQoZG9jdW1lbnQpCiAgICAgLCBtX3NlbGVjdFJlcGxhY2VtZW50KG9wdGlvbnMg
JiBTZWxlY3RSZXBsYWNlbWVudCkKQEAgLTUyNSw3ICs1MzYsNyBAQCB2b2lkIFJlcGxhY2VTZWxl
Y3Rpb25Db21tYW5kOjpyZW1vdmVSZWR1CiAKICAgICAgICAgaWYgKCFpbmxpbmVTdHlsZSB8fCBu
ZXdJbmxpbmVTdHlsZS0+aXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBpZiAoaXNTdHlsZVNwYW5P
clNwYW5XaXRoT25seVN0eWxlQXR0cmlidXRlKGVsZW1lbnQpKSB7Ci0gICAgICAgICAgICAgICAg
aW5zZXJ0ZWROb2Rlcy53aWxsUmVtb3ZlTm9kZShlbGVtZW50KTsKKyAgICAgICAgICAgICAgICBp
bnNlcnRlZE5vZGVzLndpbGxSZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuKGVsZW1lbnQpOwog
ICAgICAgICAgICAgICAgIHJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW4oZWxlbWVudCk7CiAg
ICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICByZW1vdmVOb2RlQXR0cmlidXRlKGVs
ZW1lbnQsIHN0eWxlQXR0cik7CkBAIC01MzYsNyArNTQ3LDcgQEAgdm9pZCBSZXBsYWNlU2VsZWN0
aW9uQ29tbWFuZDo6cmVtb3ZlUmVkdQogICAgICAgICAvLyBLZWVwIHRoaXMgY29kZSBhcm91bmQg
Zm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkKICAgICAgICAgaWYgKGlzTGVnYWN5QXBwbGVTdHls
ZVNwYW4oZWxlbWVudCkpIHsKICAgICAgICAgICAgIGlmICghZWxlbWVudC0+Zmlyc3RDaGlsZCgp
KSB7Ci0gICAgICAgICAgICAgICAgaW5zZXJ0ZWROb2Rlcy53aWxsUmVtb3ZlTm9kZShlbGVtZW50
KTsKKyAgICAgICAgICAgICAgICBpbnNlcnRlZE5vZGVzLndpbGxSZW1vdmVOb2RlUHJlc2Vydmlu
Z0NoaWxkcmVuKGVsZW1lbnQpOwogICAgICAgICAgICAgICAgIHJlbW92ZU5vZGVQcmVzZXJ2aW5n
Q2hpbGRyZW4oZWxlbWVudCk7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAg
ICB9CkBAIC01NTksNDYgKzU3MCwyOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbm9kZUhhc1Zpc2li
bGVSZW5kZXJUCiAgICAgcmV0dXJuIHRleHQtPnJlbmRlcmVyKCkgJiYgdG9SZW5kZXJUZXh0KHRl
eHQtPnJlbmRlcmVyKCkpLT5yZW5kZXJlZFRleHRMZW5ndGgoKSA+IDA7CiB9CiAKLXZvaWQgUmVw
bGFjZVNlbGVjdGlvbkNvbW1hbmQ6OnJlbW92ZVVucmVuZGVyZWRUZXh0Tm9kZXNBdEVuZHMoKQor
dm9pZCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6cmVtb3ZlVW5yZW5kZXJlZFRleHROb2Rlc0F0
RW5kcyhJbnNlcnRlZE5vZGVzJiBpbnNlcnRlZE5vZGVzKQogewogICAgIGRvY3VtZW50KCktPnVw
ZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwotICAgIGlmIChtX2xhc3RMZWFm
SW5zZXJ0ZWQtPmlzVGV4dE5vZGUoKSAmJiAhbm9kZUhhc1Zpc2libGVSZW5kZXJUZXh0KHN0YXRp
Y19jYXN0PFRleHQqPihtX2xhc3RMZWFmSW5zZXJ0ZWQuZ2V0KCkpKQotICAgICAgICAmJiAhZW5j
bG9zaW5nTm9kZVdpdGhUYWcoZmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2RlKG1fbGFzdExlYWZJ
bnNlcnRlZC5nZXQoKSksIHNlbGVjdFRhZykKLSAgICAgICAgJiYgIWVuY2xvc2luZ05vZGVXaXRo
VGFnKGZpcnN0UG9zaXRpb25Jbk9yQmVmb3JlTm9kZShtX2xhc3RMZWFmSW5zZXJ0ZWQuZ2V0KCkp
LCBzY3JpcHRUYWcpKSB7Ci0gICAgICAgIGlmIChtX2ZpcnN0Tm9kZUluc2VydGVkID09IG1fbGFz
dExlYWZJbnNlcnRlZCkgewotICAgICAgICAgICAgcmVtb3ZlTm9kZShtX2xhc3RMZWFmSW5zZXJ0
ZWQuZ2V0KCkpOwotICAgICAgICAgICAgbV9sYXN0TGVhZkluc2VydGVkID0gMDsKLSAgICAgICAg
ICAgIG1fZmlyc3ROb2RlSW5zZXJ0ZWQgPSAwOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICB9Ci0gICAgICAgIFJlZlB0cjxOb2RlPiBwcmV2aW91cyA9IG1fbGFzdExlYWZJbnNlcnRlZC0+
dHJhdmVyc2VQcmV2aW91c05vZGUoKTsKLSAgICAgICAgcmVtb3ZlTm9kZShtX2xhc3RMZWFmSW5z
ZXJ0ZWQuZ2V0KCkpOwotICAgICAgICBtX2xhc3RMZWFmSW5zZXJ0ZWQgPSBwcmV2aW91czsKKwor
ICAgIE5vZGUqIGxhc3RMZWFmSW5zZXJ0ZWQgPSBpbnNlcnRlZE5vZGVzLmxhc3RMZWFmSW5zZXJ0
ZWQoKTsKKyAgICBpZiAobGFzdExlYWZJbnNlcnRlZCAmJiBsYXN0TGVhZkluc2VydGVkLT5pc1Rl
eHROb2RlKCkgJiYgIW5vZGVIYXNWaXNpYmxlUmVuZGVyVGV4dChzdGF0aWNfY2FzdDxUZXh0Kj4o
bGFzdExlYWZJbnNlcnRlZCkpCisgICAgICAgICYmICFlbmNsb3NpbmdOb2RlV2l0aFRhZyhmaXJz
dFBvc2l0aW9uSW5PckJlZm9yZU5vZGUobGFzdExlYWZJbnNlcnRlZCksIHNlbGVjdFRhZykKKyAg
ICAgICAgJiYgIWVuY2xvc2luZ05vZGVXaXRoVGFnKGZpcnN0UG9zaXRpb25Jbk9yQmVmb3JlTm9k
ZShsYXN0TGVhZkluc2VydGVkKSwgc2NyaXB0VGFnKSkgeworICAgICAgICBpbnNlcnRlZE5vZGVz
LndpbGxSZW1vdmVOb2RlKGxhc3RMZWFmSW5zZXJ0ZWQpOworICAgICAgICByZW1vdmVOb2RlKGxh
c3RMZWFmSW5zZXJ0ZWQpOwogICAgIH0KLSAgICAKKwogICAgIC8vIFdlIGRvbid0IGhhdmUgdG8g
bWFrZSBzdXJlIHRoYXQgbV9maXJzdE5vZGVJbnNlcnRlZCBpc24ndCBpbnNpZGUgYSBzZWxlY3Qg
b3Igc2NyaXB0IGVsZW1lbnQsIGJlY2F1c2UKICAgICAvLyBpdCBpcyBhIHRvcCBsZXZlbCBub2Rl
IGluIHRoZSBmcmFnbWVudCBhbmQgdGhlIHVzZXIgY2FuJ3QgaW5zZXJ0IGludG8gdGhvc2UgZWxl
bWVudHMuCi0gICAgaWYgKG1fZmlyc3ROb2RlSW5zZXJ0ZWQtPmlzVGV4dE5vZGUoKSAmJiAhbm9k
ZUhhc1Zpc2libGVSZW5kZXJUZXh0KHN0YXRpY19jYXN0PFRleHQqPihtX2ZpcnN0Tm9kZUluc2Vy
dGVkLmdldCgpKSkpIHsKLSAgICAgICAgaWYgKG1fZmlyc3ROb2RlSW5zZXJ0ZWQgPT0gbV9sYXN0
TGVhZkluc2VydGVkKSB7Ci0gICAgICAgICAgICByZW1vdmVOb2RlKG1fZmlyc3ROb2RlSW5zZXJ0
ZWQuZ2V0KCkpOwotICAgICAgICAgICAgbV9maXJzdE5vZGVJbnNlcnRlZCA9IDA7Ci0gICAgICAg
ICAgICBtX2xhc3RMZWFmSW5zZXJ0ZWQgPSAwOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICB9Ci0gICAgICAgIFJlZlB0cjxOb2RlPiBuZXh0ID0gbV9maXJzdE5vZGVJbnNlcnRlZC0+dHJh
dmVyc2VOZXh0U2libGluZygpOwotICAgICAgICByZW1vdmVOb2RlKG1fZmlyc3ROb2RlSW5zZXJ0
ZWQuZ2V0KCkpOwotICAgICAgICBtX2ZpcnN0Tm9kZUluc2VydGVkID0gbmV4dDsKKyAgICBOb2Rl
KiBmaXJzdE5vZGVJbnNlcnRlZCA9IGluc2VydGVkTm9kZXMuZmlyc3ROb2RlSW5zZXJ0ZWQoKTsK
KyAgICBsYXN0TGVhZkluc2VydGVkID0gaW5zZXJ0ZWROb2Rlcy5sYXN0TGVhZkluc2VydGVkKCk7
CisgICAgaWYgKGZpcnN0Tm9kZUluc2VydGVkICYmIGZpcnN0Tm9kZUluc2VydGVkLT5pc1RleHRO
b2RlKCkgJiYgIW5vZGVIYXNWaXNpYmxlUmVuZGVyVGV4dChzdGF0aWNfY2FzdDxUZXh0Kj4oZmly
c3ROb2RlSW5zZXJ0ZWQpKSkgeworICAgICAgICBpbnNlcnRlZE5vZGVzLndpbGxSZW1vdmVOb2Rl
KGZpcnN0Tm9kZUluc2VydGVkKTsKKyAgICAgICAgcmVtb3ZlTm9kZShmaXJzdE5vZGVJbnNlcnRl
ZCk7CiAgICAgfQogfQogCi12b2lkIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpoYW5kbGVQYXN0
ZUFzUXVvdGF0aW9uTm9kZSgpCi17Ci0gICAgTm9kZSogbm9kZSA9IG1fZmlyc3ROb2RlSW5zZXJ0
ZWQuZ2V0KCk7Ci0gICAgaWYgKGlzTWFpbFBhc3RlQXNRdW90YXRpb25Ob2RlKG5vZGUpKQotICAg
ICAgICByZW1vdmVOb2RlQXR0cmlidXRlKHN0YXRpY19jYXN0PEVsZW1lbnQqPihub2RlKSwgY2xh
c3NBdHRyKTsKLX0KLQotVmlzaWJsZVBvc2l0aW9uIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpw
b3NpdGlvbkF0RW5kT2ZJbnNlcnRlZENvbnRlbnQoKQorVmlzaWJsZVBvc2l0aW9uIFJlcGxhY2VT
ZWxlY3Rpb25Db21tYW5kOjpwb3NpdGlvbkF0RW5kT2ZJbnNlcnRlZENvbnRlbnQoKSBjb25zdAog
ewogICAgIE5vZGUqIGxhc3ROb2RlID0gbV9sYXN0TGVhZkluc2VydGVkLmdldCgpOwogICAgIC8v
IEZJWE1FOiBXaHkgaXMgdGhpcyBoYWNrIGhlcmU/ICBXaGF0J3Mgc3BlY2lhbCBhYm91dCA8c2Vs
ZWN0PiB0YWdzPwpAQCAtNjA4LDcgKzYwMiw3IEBAIFZpc2libGVQb3NpdGlvbiBSZXBsYWNlU2Vs
ZWN0aW9uQ29tbWFuZDoKICAgICByZXR1cm4gbGFzdFBvc2l0aW9uSW5PckFmdGVyTm9kZShsYXN0
Tm9kZSk7CiB9CiAKLVZpc2libGVQb3NpdGlvbiBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6cG9z
aXRpb25BdFN0YXJ0T2ZJbnNlcnRlZENvbnRlbnQoKQorVmlzaWJsZVBvc2l0aW9uIFJlcGxhY2VT
ZWxlY3Rpb25Db21tYW5kOjpwb3NpdGlvbkF0U3RhcnRPZkluc2VydGVkQ29udGVudCgpIGNvbnN0
CiB7CiAgICAgcmV0dXJuIGZpcnN0UG9zaXRpb25Jbk9yQmVmb3JlTm9kZShtX2ZpcnN0Tm9kZUlu
c2VydGVkLmdldCgpKTsKIH0KQEAgLTY2NiwxMyArNjYwLDEzIEBAIHN0YXRpYyBib29sIGhhbmRs
ZVN0eWxlU3BhbnNCZWZvcmVJbnNlcnQKIC8vIFdlIHNob3VsZCByZW1vdmUgdGhlIEFwcGxlLXN0
eWxlLXNwYW4gY2xhc3Mgd2hlbiB3ZSdyZSBkb25lLCBzZWUgPHJkYXI6Ly9wcm9ibGVtLzU2ODU2
MDA+LgogLy8gV2Ugc2hvdWxkIHJlbW92ZSBzdHlsZXMgZnJvbSBzcGFucyB0aGF0IGFyZSBvdmVy
cmlkZGVuIGJ5IGFsbCBvZiB0aGVpciBjaGlsZHJlbiwgZWl0aGVyIGhlcmUKIC8vIG9yIGF0IGNv
cHkgdGltZS4KLXZvaWQgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OmhhbmRsZVN0eWxlU3BhbnMo
KQordm9pZCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6aGFuZGxlU3R5bGVTcGFucyhOb2RlKiBm
aXJzdE5vZGVJbnNlcnRlZCkKIHsKICAgICBIVE1MRWxlbWVudCogd3JhcHBpbmdTdHlsZVNwYW4g
PSAwOwogICAgIC8vIFRoZSBzdHlsZSBzcGFuIHRoYXQgY29udGFpbnMgdGhlIHNvdXJjZSBkb2N1
bWVudCdzIGRlZmF1bHQgc3R5bGUgc2hvdWxkIGJlIGF0CiAgICAgLy8gdGhlIHRvcCBvZiB0aGUg
ZnJhZ21lbnQsIGJ1dCBNYWlsIHNvbWV0aW1lcyBhZGRzIGEgd3JhcHBlciAoZm9yIFBhc3RlIEFz
IFF1b3RhdGlvbiksCiAgICAgLy8gc28gc2VhcmNoIGZvciB0aGUgdG9wIGxldmVsIHN0eWxlIHNw
YW4gaW5zdGVhZCBvZiBhc3N1bWluZyBpdCdzIGF0IHRoZSB0b3AuCi0gICAgZm9yIChOb2RlKiBu
b2RlID0gbV9maXJzdE5vZGVJbnNlcnRlZC5nZXQoKTsgbm9kZTsgbm9kZSA9IG5vZGUtPnRyYXZl
cnNlTmV4dE5vZGUoKSkgeworICAgIGZvciAoTm9kZSogbm9kZSA9IGZpcnN0Tm9kZUluc2VydGVk
OyBub2RlOyBub2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZSgpKSB7CiAgICAgICAgIGlmIChp
c0xlZ2FjeUFwcGxlU3R5bGVTcGFuKG5vZGUpKSB7CiAgICAgICAgICAgICB3cmFwcGluZ1N0eWxl
U3BhbiA9IHRvSFRNTEVsZW1lbnQobm9kZSk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTgzNSwx
MiArODI5LDggQEAgdm9pZCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6ZG9BcHBseSgpCiAgICAg
QVNTRVJUKHNlbGVjdGlvbi5zdGFydCgpLmRlcHJlY2F0ZWROb2RlKCkpOwogICAgIGlmICghc2Vs
ZWN0aW9uLmlzTm9uT3JwaGFuZWRDYXJldE9yUmFuZ2UoKSB8fCAhc2VsZWN0aW9uLnN0YXJ0KCku
ZGVwcmVjYXRlZE5vZGUoKSkKICAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGJvb2wgc2VsZWN0
aW9uSXNQbGFpblRleHQgPSAhc2VsZWN0aW9uLmlzQ29udGVudFJpY2hseUVkaXRhYmxlKCk7Ci0g
ICAgCi0gICAgRWxlbWVudCogY3VycmVudFJvb3QgPSBzZWxlY3Rpb24ucm9vdEVkaXRhYmxlRWxl
bWVudCgpOworCiAgICAgUmVwbGFjZW1lbnRGcmFnbWVudCBmcmFnbWVudChkb2N1bWVudCgpLCBt
X2RvY3VtZW50RnJhZ21lbnQuZ2V0KCksIG1fbWF0Y2hTdHlsZSwgc2VsZWN0aW9uKTsKLSAgICAK
ICAgICBpZiAocGVyZm9ybVRyaXZpYWxSZXBsYWNlKGZyYWdtZW50KSkKICAgICAgICAgcmV0dXJu
OwogICAgIApAQCAtODY0LDYgKzg1NCw4IEBAIHZvaWQgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6
OmRvQXBwbHkoKQogICAgIAogICAgIFBvc2l0aW9uIGluc2VydGlvblBvcyA9IHNlbGVjdGlvbi5z
dGFydCgpOwogICAgIGJvb2wgc3RhcnRJc0luc2lkZU1haWxCbG9ja3F1b3RlID0gZW5jbG9zaW5n
Tm9kZU9mVHlwZShpbnNlcnRpb25Qb3MsIGlzTWFpbEJsb2NrcXVvdGUsIENhbkNyb3NzRWRpdGlu
Z0JvdW5kYXJ5KTsKKyAgICBib29sIHNlbGVjdGlvbklzUGxhaW5UZXh0ID0gIXNlbGVjdGlvbi5p
c0NvbnRlbnRSaWNobHlFZGl0YWJsZSgpOworICAgIEVsZW1lbnQqIGN1cnJlbnRSb290ID0gc2Vs
ZWN0aW9uLnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsKIAogICAgIGlmICgoc2VsZWN0aW9uU3RhcnRX
YXNTdGFydE9mUGFyYWdyYXBoICYmIHNlbGVjdGlvbkVuZFdhc0VuZE9mUGFyYWdyYXBoICYmICFz
dGFydElzSW5zaWRlTWFpbEJsb2NrcXVvdGUpIHx8CiAgICAgICAgIHN0YXJ0QmxvY2sgPT0gY3Vy
cmVudFJvb3QgfHwgaXNMaXN0SXRlbShzdGFydEJsb2NrKSB8fCBzZWxlY3Rpb25Jc1BsYWluVGV4
dCkKQEAgLTEwNTAsMTQgKzEwNDIsMTQgQEAgdm9pZCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6
ZG9BcHBseSgpCiAKICAgICByZW1vdmVSZWR1bmRhbnRTdHlsZXNBbmRLZWVwU3R5bGVTcGFuSW5s
aW5lKGluc2VydGVkTm9kZXMpOwogCisgICAgcmVtb3ZlVW5yZW5kZXJlZFRleHROb2Rlc0F0RW5k
cyhpbnNlcnRlZE5vZGVzKTsKKyAgICAKICAgICBtX2ZpcnN0Tm9kZUluc2VydGVkID0gaW5zZXJ0
ZWROb2Rlcy5maXJzdE5vZGVJbnNlcnRlZCgpOwogICAgIG1fbGFzdExlYWZJbnNlcnRlZCA9IGlu
c2VydGVkTm9kZXMubGFzdExlYWZJbnNlcnRlZCgpOwogCi0gICAgcmVtb3ZlVW5yZW5kZXJlZFRl
eHROb2Rlc0F0RW5kcygpOwotCiAgICAgaWYgKCFoYW5kbGVkU3R5bGVTcGFucykKLSAgICAgICAg
aGFuZGxlU3R5bGVTcGFucygpOwotICAgIAorICAgICAgICBoYW5kbGVTdHlsZVNwYW5zKG1fZmly
c3ROb2RlSW5zZXJ0ZWQuZ2V0KCkpOworCiAgICAgLy8gTXV0YXRpb24gZXZlbnRzIChidWcgMjAx
NjEpIG1heSBoYXZlIGFscmVhZHkgcmVtb3ZlZCB0aGUgaW5zZXJ0ZWQgY29udGVudAogICAgIGlm
ICghbV9maXJzdE5vZGVJbnNlcnRlZCB8fCAhbV9maXJzdE5vZGVJbnNlcnRlZC0+aW5Eb2N1bWVu
dCgpKQogICAgICAgICByZXR1cm47CkBAIC0xMDY5LDkgKzEwNjEsNyBAQCB2b2lkIFJlcGxhY2VT
ZWxlY3Rpb25Db21tYW5kOjpkb0FwcGx5KCkKICAgICAvLyBkaWRuJ3QgaGF2ZSBhIGJyIGFmdGVy
IGl0LCBzbyB0aGUgaW5zZXJ0ZWQgY29udGVudCBlbmRlZCB1cCBpbiB0aGUgc2FtZSBwYXJhZ3Jh
cGguCiAgICAgaWYgKHN0YXJ0QmxvY2sgJiYgaW5zZXJ0aW9uUG9zLmRlcHJlY2F0ZWROb2RlKCkg
PT0gc3RhcnRCbG9jay0+cGFyZW50Tm9kZSgpICYmICh1bnNpZ25lZClpbnNlcnRpb25Qb3MuZGVw
cmVjYXRlZEVkaXRpbmdPZmZzZXQoKSA8IHN0YXJ0QmxvY2stPm5vZGVJbmRleCgpICYmICFpc1N0
YXJ0T2ZQYXJhZ3JhcGgoc3RhcnRPZkluc2VydGVkQ29udGVudCkpCiAgICAgICAgIGluc2VydE5v
ZGVBdChjcmVhdGVCcmVha0VsZW1lbnQoZG9jdW1lbnQoKSkuZ2V0KCksIHN0YXJ0T2ZJbnNlcnRl
ZENvbnRlbnQuZGVlcEVxdWl2YWxlbnQoKSk7Ci0gICAgCi0gICAgUG9zaXRpb24gbGFzdFBvc2l0
aW9uVG9TZWxlY3Q7Ci0gICAgCisKICAgICBib29sIGludGVyY2hhbmdlTmV3bGluZUF0RW5kID0g
ZnJhZ21lbnQuaGFzSW50ZXJjaGFuZ2VOZXdsaW5lQXRFbmQoKTsKIAogICAgIGlmIChlbmRCUiAm
JiAocGxhaW5UZXh0RnJhZ21lbnQgfHwgc2hvdWxkUmVtb3ZlRW5kQlIoZW5kQlIsIG9yaWdpbmFs
VmlzUG9zQmVmb3JlRW5kQlIpKSkKQEAgLTExMTYsNyArMTEwNiw4IEBAIHZvaWQgUmVwbGFjZVNl
bGVjdGlvbkNvbW1hbmQ6OmRvQXBwbHkoKQogICAgICAgICAgICAgCiAgICAgZW5kT2ZJbnNlcnRl
ZENvbnRlbnQgPSBwb3NpdGlvbkF0RW5kT2ZJbnNlcnRlZENvbnRlbnQoKTsKICAgICBzdGFydE9m
SW5zZXJ0ZWRDb250ZW50ID0gcG9zaXRpb25BdFN0YXJ0T2ZJbnNlcnRlZENvbnRlbnQoKTsKLSAg
ICAKKworICAgIFBvc2l0aW9uIGxhc3RQb3NpdGlvblRvU2VsZWN0OwogICAgIGlmIChpbnRlcmNo
YW5nZU5ld2xpbmVBdEVuZCkgewogICAgICAgICBWaXNpYmxlUG9zaXRpb24gbmV4dCA9IGVuZE9m
SW5zZXJ0ZWRDb250ZW50Lm5leHQoQ2Fubm90Q3Jvc3NFZGl0aW5nQm91bmRhcnkpOwogCkBAIC0x
MTQ0LDU1ICsxMTM1LDEzIEBAIHZvaWQgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OmRvQXBwbHko
KQogICAgICAgICAKICAgICB9IGVsc2UKICAgICAgICAgbWVyZ2VFbmRJZk5lZWRlZCgpOwotICAg
IAotICAgIGhhbmRsZVBhc3RlQXNRdW90YXRpb25Ob2RlKCk7Ci0gICAgCi0gICAgZW5kT2ZJbnNl
cnRlZENvbnRlbnQgPSBwb3NpdGlvbkF0RW5kT2ZJbnNlcnRlZENvbnRlbnQoKTsKLSAgICBzdGFy
dE9mSW5zZXJ0ZWRDb250ZW50ID0gcG9zaXRpb25BdFN0YXJ0T2ZJbnNlcnRlZENvbnRlbnQoKTsK
LSAgICAKLSAgICAvLyBBZGQgc3BhY2VzIGZvciBzbWFydCByZXBsYWNlLgotICAgIGlmIChtX3Nt
YXJ0UmVwbGFjZSAmJiBjdXJyZW50Um9vdCkgewotICAgICAgICBFbGVtZW50KiB0ZXh0Q29udHJv
bCA9IGVuY2xvc2luZ1RleHRGb3JtQ29udHJvbChmaXJzdFBvc2l0aW9uSW5Ob2RlKGN1cnJlbnRS
b290KSk7Ci0gICAgICAgIGlmICh0ZXh0Q29udHJvbCAmJiB0ZXh0Q29udHJvbC0+aGFzVGFnTmFt
ZShpbnB1dFRhZykgJiYgc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+KHRleHRDb250cm9s
KS0+aXNQYXNzd29yZEZpZWxkKCkpCi0gICAgICAgICAgICBtX3NtYXJ0UmVwbGFjZSA9IGZhbHNl
OyAvLyBEaXNhYmxlIHNtYXJ0IHJlcGxhY2UgZm9yIHBhc3N3b3JkIGZpZWxkcy4KLSAgICB9Ci0g
ICAgaWYgKG1fc21hcnRSZXBsYWNlKSB7Ci0gICAgICAgIGJvb2wgbmVlZHNUcmFpbGluZ1NwYWNl
ID0gIWlzRW5kT2ZQYXJhZ3JhcGgoZW5kT2ZJbnNlcnRlZENvbnRlbnQpICYmCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIWlzQ2hhcmFjdGVyU21hcnRSZXBsYWNlRXhlbXB0KGVu
ZE9mSW5zZXJ0ZWRDb250ZW50LmNoYXJhY3RlckFmdGVyKCksIGZhbHNlKTsKLSAgICAgICAgaWYg
KG5lZWRzVHJhaWxpbmdTcGFjZSkgewotICAgICAgICAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJl
ciA9IG1fbGFzdExlYWZJbnNlcnRlZC0+cmVuZGVyZXIoKTsKLSAgICAgICAgICAgIGJvb2wgY29s
bGFwc2VXaGl0ZVNwYWNlID0gIXJlbmRlcmVyIHx8IHJlbmRlcmVyLT5zdHlsZSgpLT5jb2xsYXBz
ZVdoaXRlU3BhY2UoKTsKLSAgICAgICAgICAgIE5vZGUqIGVuZE5vZGUgPSBwb3NpdGlvbkF0RW5k
T2ZJbnNlcnRlZENvbnRlbnQoKS5kZWVwRXF1aXZhbGVudCgpLnVwc3RyZWFtKCkuZGVwcmVjYXRl
ZE5vZGUoKTsKLSAgICAgICAgICAgIGlmIChlbmROb2RlLT5pc1RleHROb2RlKCkpIHsKLSAgICAg
ICAgICAgICAgICBUZXh0KiB0ZXh0ID0gc3RhdGljX2Nhc3Q8VGV4dCo+KGVuZE5vZGUpOwotICAg
ICAgICAgICAgICAgIGluc2VydFRleHRJbnRvTm9kZSh0ZXh0LCB0ZXh0LT5sZW5ndGgoKSwgY29s
bGFwc2VXaGl0ZVNwYWNlID8gbm9uQnJlYWtpbmdTcGFjZVN0cmluZygpIDogIiAiKTsKLSAgICAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgUmVmUHRyPE5vZGU+IG5vZGUgPSBkb2N1
bWVudCgpLT5jcmVhdGVFZGl0aW5nVGV4dE5vZGUoY29sbGFwc2VXaGl0ZVNwYWNlID8gbm9uQnJl
YWtpbmdTcGFjZVN0cmluZygpIDogIiAiKTsKLSAgICAgICAgICAgICAgICBpbnNlcnROb2RlQWZ0
ZXIobm9kZSwgZW5kTm9kZSk7Ci0gICAgICAgICAgICAgICAgdXBkYXRlTm9kZXNJbnNlcnRlZChu
b2RlLmdldCgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIAotICAgICAgICBib29s
IG5lZWRzTGVhZGluZ1NwYWNlID0gIWlzU3RhcnRPZlBhcmFncmFwaChzdGFydE9mSW5zZXJ0ZWRD
b250ZW50KSAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIWlzQ2hhcmFjdGVy
U21hcnRSZXBsYWNlRXhlbXB0KHN0YXJ0T2ZJbnNlcnRlZENvbnRlbnQucHJldmlvdXMoKS5jaGFy
YWN0ZXJBZnRlcigpLCB0cnVlKTsKLSAgICAgICAgaWYgKG5lZWRzTGVhZGluZ1NwYWNlKSB7Ci0g
ICAgICAgICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gbV9sYXN0TGVhZkluc2VydGVkLT5y
ZW5kZXJlcigpOwotICAgICAgICAgICAgYm9vbCBjb2xsYXBzZVdoaXRlU3BhY2UgPSAhcmVuZGVy
ZXIgfHwgcmVuZGVyZXItPnN0eWxlKCktPmNvbGxhcHNlV2hpdGVTcGFjZSgpOwotICAgICAgICAg
ICAgTm9kZSogc3RhcnROb2RlID0gcG9zaXRpb25BdFN0YXJ0T2ZJbnNlcnRlZENvbnRlbnQoKS5k
ZWVwRXF1aXZhbGVudCgpLmRvd25zdHJlYW0oKS5kZXByZWNhdGVkTm9kZSgpOwotICAgICAgICAg
ICAgaWYgKHN0YXJ0Tm9kZS0+aXNUZXh0Tm9kZSgpKSB7Ci0gICAgICAgICAgICAgICAgVGV4dCog
dGV4dCA9IHN0YXRpY19jYXN0PFRleHQqPihzdGFydE5vZGUpOwotICAgICAgICAgICAgICAgIGlu
c2VydFRleHRJbnRvTm9kZSh0ZXh0LCAwLCBjb2xsYXBzZVdoaXRlU3BhY2UgPyBub25CcmVha2lu
Z1NwYWNlU3RyaW5nKCkgOiAiICIpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
ICAgICBSZWZQdHI8Tm9kZT4gbm9kZSA9IGRvY3VtZW50KCktPmNyZWF0ZUVkaXRpbmdUZXh0Tm9k
ZShjb2xsYXBzZVdoaXRlU3BhY2UgPyBub25CcmVha2luZ1NwYWNlU3RyaW5nKCkgOiAiICIpOwot
ICAgICAgICAgICAgICAgIC8vIERvbid0IHVwZGF0ZU5vZGVzSW5zZXJ0ZWQuICBEb2luZyBzbyB3
b3VsZCBzZXQgbV9sYXN0TGVhZkluc2VydGVkIHRvIGJlIHRoZSBub2RlIGNvbnRhaW5pbmcgdGhl
IAotICAgICAgICAgICAgICAgIC8vIGxlYWRpbmcgc3BhY2UsIGJ1dCBtX2xhc3RMZWFmSW5zZXJ0
ZWQgaXMgc3VwcG9zZWQgdG8gbWFyayB0aGUgZW5kIG9mIHBhc3RlZCBjb250ZW50LgotICAgICAg
ICAgICAgICAgIGluc2VydE5vZGVCZWZvcmUobm9kZSwgc3RhcnROb2RlKTsKLSAgICAgICAgICAg
ICAgICAvLyBGSVhNRTogVXNlIHBvc2l0aW9ucyB0byB0cmFjayB0aGUgc3RhcnQvZW5kIG9mIGlu
c2VydGVkIGNvbnRlbnQuCi0gICAgICAgICAgICAgICAgbV9maXJzdE5vZGVJbnNlcnRlZCA9IG5v
ZGU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCisKKyAgICBpZiAoTm9k
ZSogbWFpbEJsb2NrcXVvdGUgPSBlbmNsb3NpbmdOb2RlT2ZUeXBlKHBvc2l0aW9uQXRTdGFydE9m
SW5zZXJ0ZWRDb250ZW50KCkuZGVlcEVxdWl2YWxlbnQoKSwgaXNNYWlsUGFzdGVBc1F1b3RhdGlv
bk5vZGUpKQorICAgICAgICByZW1vdmVOb2RlQXR0cmlidXRlKHN0YXRpY19jYXN0PEVsZW1lbnQq
PihtYWlsQmxvY2txdW90ZSksIGNsYXNzQXR0cik7CisKKyAgICBpZiAoc2hvdWxkUGVyZm9ybVNt
YXJ0UmVwbGFjZSgpKQorICAgICAgICBhZGRTcGFjZXNGb3JTbWFydFJlcGxhY2UoKTsKKwogICAg
IC8vIElmIHdlIGFyZSBkZWFsaW5nIHdpdGggYSBmcmFnbWVudCBjcmVhdGVkIGZyb20gcGxhaW4g
dGV4dAogICAgIC8vIG5vIHN0eWxlIG1hdGNoaW5nIGlzIG5lY2Vzc2FyeS4KICAgICBpZiAocGxh
aW5UZXh0RnJhZ21lbnQpCkBAIC0xMjIxLDE3ICsxMTcwLDcwIEBAIGJvb2wgUmVwbGFjZVNlbGVj
dGlvbkNvbW1hbmQ6OnNob3VsZFJlbW8KICAgICByZXR1cm4gaXNTdGFydE9mUGFyYWdyYXBoKHZp
c2libGVQb3MpICYmIGlzRW5kT2ZQYXJhZ3JhcGgodmlzaWJsZVBvcyk7CiB9CiAKK2Jvb2wgUmVw
bGFjZVNlbGVjdGlvbkNvbW1hbmQ6OnNob3VsZFBlcmZvcm1TbWFydFJlcGxhY2UoKSBjb25zdAor
eworICAgIGlmICghbV9zbWFydFJlcGxhY2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IEVsZW1lbnQqIHRleHRDb250cm9sID0gZW5jbG9zaW5nVGV4dEZvcm1Db250cm9sKHBvc2l0aW9u
QXRTdGFydE9mSW5zZXJ0ZWRDb250ZW50KCkuZGVlcEVxdWl2YWxlbnQoKSk7CisgICAgaWYgKHRl
eHRDb250cm9sICYmIHRleHRDb250cm9sLT5oYXNUYWdOYW1lKGlucHV0VGFnKSAmJiBzdGF0aWNf
Y2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4odGV4dENvbnRyb2wpLT5pc1Bhc3N3b3JkRmllbGQoKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBEaXNhYmxlIHNtYXJ0IHJlcGxhY2UgZm9yIHBhc3N3
b3JkIGZpZWxkcy4KKworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFJlcGxhY2VTZWxlY3Rp
b25Db21tYW5kOjphZGRTcGFjZXNGb3JTbWFydFJlcGxhY2UoKQoreworICAgIFZpc2libGVQb3Np
dGlvbiBzdGFydE9mSW5zZXJ0ZWRDb250ZW50ID0gcG9zaXRpb25BdFN0YXJ0T2ZJbnNlcnRlZENv
bnRlbnQoKTsKKyAgICBWaXNpYmxlUG9zaXRpb24gZW5kT2ZJbnNlcnRlZENvbnRlbnQgPSBwb3Np
dGlvbkF0RW5kT2ZJbnNlcnRlZENvbnRlbnQoKTsKKworICAgIFBvc2l0aW9uIGVuZFVwc3RyZWFt
ID0gZW5kT2ZJbnNlcnRlZENvbnRlbnQuZGVlcEVxdWl2YWxlbnQoKS51cHN0cmVhbSgpOworICAg
IE5vZGUqIGVuZE5vZGUgPSBlbmRVcHN0cmVhbS5jb21wdXRlTm9kZUJlZm9yZVBvc2l0aW9uKCk7
CisgICAgaWYgKGVuZFVwc3RyZWFtLmFuY2hvclR5cGUoKSA9PSBQb3NpdGlvbjo6UG9zaXRpb25J
c09mZnNldEluQW5jaG9yKQorICAgICAgICBlbmROb2RlID0gZW5kVXBzdHJlYW0uY29udGFpbmVy
Tm9kZSgpOworCisgICAgYm9vbCBuZWVkc1RyYWlsaW5nU3BhY2UgPSAhaXNFbmRPZlBhcmFncmFw
aChlbmRPZkluc2VydGVkQ29udGVudCkgJiYgIWlzQ2hhcmFjdGVyU21hcnRSZXBsYWNlRXhlbXB0
KGVuZE9mSW5zZXJ0ZWRDb250ZW50LmNoYXJhY3RlckFmdGVyKCksIGZhbHNlKTsKKyAgICBpZiAo
bmVlZHNUcmFpbGluZ1NwYWNlICYmIGVuZE5vZGUpIHsKKyAgICAgICAgYm9vbCBjb2xsYXBzZVdo
aXRlU3BhY2UgPSAhZW5kTm9kZS0+cmVuZGVyZXIoKSB8fCBlbmROb2RlLT5yZW5kZXJlcigpLT5z
dHlsZSgpLT5jb2xsYXBzZVdoaXRlU3BhY2UoKTsKKyAgICAgICAgaWYgKGVuZE5vZGUtPmlzVGV4
dE5vZGUoKSkgeworICAgICAgICAgICAgVGV4dCogdGV4dCA9IHN0YXRpY19jYXN0PFRleHQqPihl
bmROb2RlKTsKKyAgICAgICAgICAgIGluc2VydFRleHRJbnRvTm9kZSh0ZXh0LCB0ZXh0LT5sZW5n
dGgoKSwgY29sbGFwc2VXaGl0ZVNwYWNlID8gbm9uQnJlYWtpbmdTcGFjZVN0cmluZygpIDogIiAi
KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFJlZlB0cjxOb2RlPiBub2RlID0gZG9j
dW1lbnQoKS0+Y3JlYXRlRWRpdGluZ1RleHROb2RlKGNvbGxhcHNlV2hpdGVTcGFjZSA/IG5vbkJy
ZWFraW5nU3BhY2VTdHJpbmcoKSA6ICIgIik7CisgICAgICAgICAgICBpbnNlcnROb2RlQWZ0ZXIo
bm9kZSwgZW5kTm9kZSk7CisgICAgICAgICAgICB1cGRhdGVOb2Rlc0luc2VydGVkKG5vZGUuZ2V0
KCkpOworICAgICAgICB9CisgICAgfQorCisgICAgUG9zaXRpb24gc3RhcnREb3duc3RyZWFtID0g
c3RhcnRPZkluc2VydGVkQ29udGVudC5kZWVwRXF1aXZhbGVudCgpLmRvd25zdHJlYW0oKTsKKyAg
ICBOb2RlKiBzdGFydE5vZGUgPSBzdGFydERvd25zdHJlYW0uY29tcHV0ZU5vZGVBZnRlclBvc2l0
aW9uKCk7CisgICAgaWYgKHN0YXJ0RG93bnN0cmVhbS5hbmNob3JUeXBlKCkgPT0gUG9zaXRpb246
OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvcikKKyAgICAgICAgc3RhcnROb2RlID0gc3RhcnREb3du
c3RyZWFtLmNvbnRhaW5lck5vZGUoKTsKKworICAgIGJvb2wgbmVlZHNMZWFkaW5nU3BhY2UgPSAh
aXNTdGFydE9mUGFyYWdyYXBoKHN0YXJ0T2ZJbnNlcnRlZENvbnRlbnQpICYmICFpc0NoYXJhY3Rl
clNtYXJ0UmVwbGFjZUV4ZW1wdChzdGFydE9mSW5zZXJ0ZWRDb250ZW50LnByZXZpb3VzKCkuY2hh
cmFjdGVyQWZ0ZXIoKSwgdHJ1ZSk7CisgICAgaWYgKG5lZWRzTGVhZGluZ1NwYWNlICYmIHN0YXJ0
Tm9kZSkgeworICAgICAgICBib29sIGNvbGxhcHNlV2hpdGVTcGFjZSA9ICFzdGFydE5vZGUtPnJl
bmRlcmVyKCkgfHwgc3RhcnROb2RlLT5yZW5kZXJlcigpLT5zdHlsZSgpLT5jb2xsYXBzZVdoaXRl
U3BhY2UoKTsKKyAgICAgICAgaWYgKHN0YXJ0Tm9kZS0+aXNUZXh0Tm9kZSgpKSB7CisgICAgICAg
ICAgICBUZXh0KiB0ZXh0ID0gc3RhdGljX2Nhc3Q8VGV4dCo+KHN0YXJ0Tm9kZSk7CisgICAgICAg
ICAgICBpbnNlcnRUZXh0SW50b05vZGUodGV4dCwgMCwgY29sbGFwc2VXaGl0ZVNwYWNlID8gbm9u
QnJlYWtpbmdTcGFjZVN0cmluZygpIDogIiAiKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIFJlZlB0cjxOb2RlPiBub2RlID0gZG9jdW1lbnQoKS0+Y3JlYXRlRWRpdGluZ1RleHROb2Rl
KGNvbGxhcHNlV2hpdGVTcGFjZSA/IG5vbkJyZWFraW5nU3BhY2VTdHJpbmcoKSA6ICIgIik7Cisg
ICAgICAgICAgICAvLyBEb24ndCB1cGRhdGVOb2Rlc0luc2VydGVkLiBEb2luZyBzbyB3b3VsZCBz
ZXQgbV9sYXN0TGVhZkluc2VydGVkIHRvIGJlIHRoZSBub2RlIGNvbnRhaW5pbmcgdGhlIGxlYWRp
bmcgc3BhY2UsCisgICAgICAgICAgICAvLyBidXQgbV9sYXN0TGVhZkluc2VydGVkIGlzIHN1cHBv
c2VkIHRvIG1hcmsgdGhlIGVuZCBvZiBwYXN0ZWQgY29udGVudC4KKyAgICAgICAgICAgIGluc2Vy
dE5vZGVCZWZvcmUobm9kZSwgc3RhcnROb2RlKTsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBVc2Ug
cG9zaXRpb25zIHRvIHRyYWNrIHRoZSBzdGFydC9lbmQgb2YgaW5zZXJ0ZWQgY29udGVudC4KKyAg
ICAgICAgICAgIG1fZmlyc3ROb2RlSW5zZXJ0ZWQgPSBub2RlOworICAgICAgICB9CisgICAgfQor
fQorCiB2b2lkIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpjb21wbGV0ZUhUTUxSZXBsYWNlbWVu
dChjb25zdCBQb3NpdGlvbiAmbGFzdFBvc2l0aW9uVG9TZWxlY3QpCiB7Ci0gICAgUG9zaXRpb24g
c3RhcnQ7Ci0gICAgUG9zaXRpb24gZW5kOworICAgIFBvc2l0aW9uIHN0YXJ0ID0gcG9zaXRpb25B
dFN0YXJ0T2ZJbnNlcnRlZENvbnRlbnQoKS5kZWVwRXF1aXZhbGVudCgpOworICAgIFBvc2l0aW9u
IGVuZCA9IHBvc2l0aW9uQXRFbmRPZkluc2VydGVkQ29udGVudCgpLmRlZXBFcXVpdmFsZW50KCk7
CiAKLSAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgbmV2ZXIgbm90IGJlIHRoZSBjYXNlLgotICAg
IGlmIChtX2ZpcnN0Tm9kZUluc2VydGVkICYmIG1fZmlyc3ROb2RlSW5zZXJ0ZWQtPmluRG9jdW1l
bnQoKSAmJiBtX2xhc3RMZWFmSW5zZXJ0ZWQgJiYgbV9sYXN0TGVhZkluc2VydGVkLT5pbkRvY3Vt
ZW50KCkpIHsKLSAgICAgICAgCi0gICAgICAgIHN0YXJ0ID0gcG9zaXRpb25BdFN0YXJ0T2ZJbnNl
cnRlZENvbnRlbnQoKS5kZWVwRXF1aXZhbGVudCgpOwotICAgICAgICBlbmQgPSBwb3NpdGlvbkF0
RW5kT2ZJbnNlcnRlZENvbnRlbnQoKS5kZWVwRXF1aXZhbGVudCgpOwotICAgICAgICAKKyAgICAv
LyBNdXRhdGlvbiBldmVudHMgbWF5IGhhdmUgZGVsZXRlZCBzdGFydCBvciBlbmQKKyAgICBpZiAo
c3RhcnQuaXNOb3ROdWxsKCkgJiYgIXN0YXJ0LmlzT3JwaGFuKCkgJiYgZW5kLmlzTm90TnVsbCgp
ICYmICFlbmQuaXNPcnBoYW4oKSkgewogICAgICAgICAvLyBGSVhNRSAoMTE0NzUpOiBSZW1vdmUg
dGhpcyBhbmQgcmVxdWlyZSB0aGF0IHRoZSBjcmVhdG9yIG9mIHRoZSBmcmFnbWVudCB0byB1c2Ug
bmJzcHMuCiAgICAgICAgIHJlYmFsYW5jZVdoaXRlc3BhY2VBdChzdGFydCk7CiAgICAgICAgIHJl
YmFsYW5jZVdoaXRlc3BhY2VBdChlbmQpOwpAQCAtMTI0MCwxNCArMTI0MiwxNCBAQCB2b2lkIFJl
cGxhY2VTZWxlY3Rpb25Db21tYW5kOjpjb21wbGV0ZUhUCiAgICAgICAgICAgICBBU1NFUlQobV9p
bnNlcnRpb25TdHlsZSk7CiAgICAgICAgICAgICBhcHBseVN0eWxlKG1faW5zZXJ0aW9uU3R5bGUu
Z2V0KCksIHN0YXJ0LCBlbmQpOwogICAgICAgICB9ICAgIAotICAgICAgICAKKwogICAgICAgICBp
ZiAobGFzdFBvc2l0aW9uVG9TZWxlY3QuaXNOb3ROdWxsKCkpCiAgICAgICAgICAgICBlbmQgPSBs
YXN0UG9zaXRpb25Ub1NlbGVjdDsKICAgICB9IGVsc2UgaWYgKGxhc3RQb3NpdGlvblRvU2VsZWN0
LmlzTm90TnVsbCgpKQogICAgICAgICBzdGFydCA9IGVuZCA9IGxhc3RQb3NpdGlvblRvU2VsZWN0
OwogICAgIGVsc2UKICAgICAgICAgcmV0dXJuOwotICAgIAorCiAgICAgaWYgKG1fc2VsZWN0UmVw
bGFjZW1lbnQpCiAgICAgICAgIHNldEVuZGluZ1NlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKHN0
YXJ0LCBlbmQsIFNFTF9ERUZBVUxUX0FGRklOSVRZLCBlbmRpbmdTZWxlY3Rpb24oKS5pc0RpcmVj
dGlvbmFsKCkpKTsKICAgICBlbHNlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxh
Y2VTZWxlY3Rpb25Db21tYW5kLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5oCShyZXZpc2lvbiA5NjIyOSkKKysrIFNvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuaAkod29ya2luZyBjb3B5KQpA
QCAtNTgsMTMgKzU4LDEzIEBAIHByaXZhdGU6CiAKICAgICB2aXJ0dWFsIHZvaWQgZG9BcHBseSgp
OwogICAgIHZpcnR1YWwgRWRpdEFjdGlvbiBlZGl0aW5nQWN0aW9uKCkgY29uc3Q7Ci0KLSAgICB2
b2lkIGNvbXBsZXRlSFRNTFJlcGxhY2VtZW50KGNvbnN0IFBvc2l0aW9uJiBsYXN0UG9zaXRpb25U
b1NlbGVjdCk7CiAgICAgCiAgICAgY2xhc3MgSW5zZXJ0ZWROb2RlcyB7CiAgICAgcHVibGljOgot
ICAgICAgICB2b2lkIHJlc3BvbmRUb05vZGVJbnNlcnRpb24oTm9kZSogbm9kZSk7Ci0gICAgICAg
IHZvaWQgd2lsbFJlbW92ZU5vZGUoTm9kZSogbm9kZSk7CisgICAgICAgIHZvaWQgcmVzcG9uZFRv
Tm9kZUluc2VydGlvbihOb2RlKik7CisgICAgICAgIHZvaWQgd2lsbFJlbW92ZU5vZGVQcmVzZXJ2
aW5nQ2hpbGRyZW4oTm9kZSopOworICAgICAgICB2b2lkIHdpbGxSZW1vdmVOb2RlKE5vZGUqKTsK
KwogICAgICAgICBOb2RlKiBmaXJzdE5vZGVJbnNlcnRlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZmly
c3ROb2RlSW5zZXJ0ZWQuZ2V0KCk7IH0KICAgICAgICAgTm9kZSogbGFzdExlYWZJbnNlcnRlZCgp
IGNvbnN0IHsgcmV0dXJuIG1fbGFzdE5vZGVJbnNlcnRlZC0+bGFzdERlc2NlbmRhbnQoKTsgfQog
ICAgICAgICBOb2RlKiBwYXN0TGFzdExlYWYoKSBjb25zdCB7IHJldHVybiBtX2ZpcnN0Tm9kZUlu
c2VydGVkID8gbGFzdExlYWZJbnNlcnRlZCgpLT50cmF2ZXJzZU5leHROb2RlKCkgOiAwOyB9CkBA
IC04NSwxOSArODUsMjMgQEAgcHJpdmF0ZToKICAgICAKICAgICB2b2lkIG1lcmdlRW5kSWZOZWVk
ZWQoKTsKICAgICAKLSAgICB2b2lkIHJlbW92ZVVucmVuZGVyZWRUZXh0Tm9kZXNBdEVuZHMoKTsK
KyAgICB2b2lkIHJlbW92ZVVucmVuZGVyZWRUZXh0Tm9kZXNBdEVuZHMoSW5zZXJ0ZWROb2RlcyYp
OwogICAgIAogICAgIHZvaWQgcmVtb3ZlUmVkdW5kYW50U3R5bGVzQW5kS2VlcFN0eWxlU3Bhbklu
bGluZShJbnNlcnRlZE5vZGVzJik7Ci0gICAgdm9pZCBoYW5kbGVTdHlsZVNwYW5zKCk7CisgICAg
dm9pZCBoYW5kbGVTdHlsZVNwYW5zKE5vZGUqIGZpcnN0Tm9kZUluc2VydGVkKTsKICAgICB2b2lk
IGNvcHlTdHlsZVRvQ2hpbGRyZW4oTm9kZSogcGFyZW50Tm9kZSwgY29uc3QgQ1NTTXV0YWJsZVN0
eWxlRGVjbGFyYXRpb24qIHBhcmVudFN0eWxlKTsKICAgICB2b2lkIGhhbmRsZVBhc3RlQXNRdW90
YXRpb25Ob2RlKCk7CiAgICAgCiAgICAgdmlydHVhbCB2b2lkIHJlbW92ZU5vZGVQcmVzZXJ2aW5n
Q2hpbGRyZW4oTm9kZSopOwogICAgIHZpcnR1YWwgdm9pZCByZW1vdmVOb2RlQW5kUHJ1bmVBbmNl
c3RvcnMoTm9kZSopOwogICAgIAotICAgIFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbkF0U3RhcnRP
Zkluc2VydGVkQ29udGVudCgpOwotICAgIFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbkF0RW5kT2ZJ
bnNlcnRlZENvbnRlbnQoKTsKLSAgICAKKyAgICBWaXNpYmxlUG9zaXRpb24gcG9zaXRpb25BdFN0
YXJ0T2ZJbnNlcnRlZENvbnRlbnQoKSBjb25zdDsKKyAgICBWaXNpYmxlUG9zaXRpb24gcG9zaXRp
b25BdEVuZE9mSW5zZXJ0ZWRDb250ZW50KCkgY29uc3Q7CisKKyAgICBib29sIHNob3VsZFBlcmZv
cm1TbWFydFJlcGxhY2UoKSBjb25zdDsKKyAgICB2b2lkIGFkZFNwYWNlc0ZvclNtYXJ0UmVwbGFj
ZSgpOworICAgIHZvaWQgY29tcGxldGVIVE1MUmVwbGFjZW1lbnQoY29uc3QgUG9zaXRpb24mIGxh
c3RQb3NpdGlvblRvU2VsZWN0KTsKKwogICAgIGJvb2wgcGVyZm9ybVRyaXZpYWxSZXBsYWNlKGNv
bnN0IFJlcGxhY2VtZW50RnJhZ21lbnQmKTsKIAogICAgIFJlZlB0cjxOb2RlPiBtX2ZpcnN0Tm9k
ZUluc2VydGVkOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>