<?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>68875</bug_id>
          
          <creation_ts>2011-09-27 00:26:58 -0700</creation_ts>
          <short_desc>Encapsulate m_firstNodeInserted and m_lastLeafInserted in node insertion logic</short_desc>
          <delta_ts>2011-09-27 01:59:20 -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>darin</cc>
    
    <cc>enrica</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>473737</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-09-27 00:26:58 -0700</bug_when>
    <thetext>As the first part of the bug 68874, we need to encapsulate m_firstNodeInserted and m_lastLeafInserted in ReplaceSelectionCommand&apos;s node insertion logic.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>473750</commentid>
    <comment_count>1</comment_count>
      <attachid>108800</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-09-27 00:39:02 -0700</bug_when>
    <thetext>Created attachment 108800
refactoring</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>473753</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-27 00:40:32 -0700</bug_when>
    <thetext>Attachment 108800 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1

Source/WebCore/editing/ReplaceSelectionCommand.cpp:557:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
Total errors found: 1 in 5 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>473754</commentid>
    <comment_count>3</comment_count>
      <attachid>108802</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-09-27 00:40:44 -0700</bug_when>
    <thetext>Created attachment 108802
Added the forgotten DeleteSelectionCommand change</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>473755</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-27 00:43:01 -0700</bug_when>
    <thetext>Attachment 108802 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1

Source/WebCore/editing/ReplaceSelectionCommand.cpp:557:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
Total errors found: 1 in 6 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>473756</commentid>
    <comment_count>5</comment_count>
      <attachid>108802</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-09-27 00:43:24 -0700</bug_when>
    <thetext>Comment on attachment 108802
Added the forgotten DeleteSelectionCommand change

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

&gt; Source/WebCore/editing/ReplaceSelectionCommand.cpp:558
&gt; -    if (!m_firstNodeInserted-&gt;renderer() &amp;&amp; 
&gt; +    if (!m_firstNodeInserted-&gt;renderer() &amp;&amp;
&gt;          m_firstNodeInserted-&gt;isTextNode()) {

Style bot is complaining about this existing line. I&apos;ll revert this whitespace change or fix the style if the reviewer is so inclined.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>473773</commentid>
    <comment_count>6</comment_count>
      <attachid>108802</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2011-09-27 01:20:06 -0700</bug_when>
    <thetext>Comment on attachment 108802
Added the forgotten DeleteSelectionCommand change

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

&gt; Source/WebCore/editing/ReplaceSelectionCommand.h:82
&gt; +        void respondToNodeInsertion(Node* node)
&gt; +        {
&gt; +            if (!node)
&gt; +                return;
&gt; +            
&gt; +            if (!m_firstNodeInserted)
&gt; +                m_firstNodeInserted = node;
&gt; +            
&gt; +            m_lastNodeInserted = node;
&gt; +        }
&gt; +        void willRemoveNode(Node* node)
&gt; +        {
&gt; +            if (m_firstNodeInserted == node)
&gt; +                m_firstNodeInserted = node-&gt;traverseNextNode();
&gt; +            if (m_lastNodeInserted == node)
&gt; +                m_lastNodeInserted = node-&gt;lastChild() ? node-&gt;lastChild() : node-&gt;traverseNextSibling();
&gt; +        }

nit: I&apos;d like to move these function definitions to ReplaceSelectionCommand.cpp in order to reduce the header size.

&gt; Source/WebCore/editing/ReplaceSelectionCommand.h:85
&gt; +        Node* firstNodeInserted() { return m_firstNodeInserted.get(); }
&gt; +        Node* lastLeafInserted() { return m_lastNodeInserted-&gt;lastDescendant(); }
&gt; +        Node* pastLastLeaf() { return m_firstNodeInserted ? lastLeafInserted()-&gt;traverseNextNode() : 0; }

nit: These function should be &quot;const&quot;.

&gt; Source/WebCore/editing/ReplaceSelectionCommand.h:86
&gt; +    private:

Need a blank line before the private: label.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>473776</commentid>
    <comment_count>7</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-09-27 01:38:37 -0700</bug_when>
    <thetext>Thanks for the review! Will land safely after addressing your comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>473778</commentid>
    <comment_count>8</comment_count>
      <attachid>108809</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-09-27 01:40:23 -0700</bug_when>
    <thetext>Created attachment 108809
patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>473792</commentid>
    <comment_count>9</comment_count>
      <attachid>108809</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-27 01:59:15 -0700</bug_when>
    <thetext>Comment on attachment 108809
patch for landing

Clearing flags on attachment: 108809

Committed r96084: &lt;http://trac.webkit.org/changeset/96084&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>473793</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-27 01:59:20 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>108800</attachid>
            <date>2011-09-27 00:39:02 -0700</date>
            <delta_ts>2011-09-27 00:40:44 -0700</delta_ts>
            <desc>refactoring</desc>
            <filename>fix68875</filename>
            <type>text/plain</type>
            <size>13802</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNv
bW1hbmQuY3BwCShyZXZpc2lvbiA5NTAzMSkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVw
bGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NzYsMTEgKzQ3Niwx
MSBAQAogCiAvLyBTdHlsZSBydWxlcyB0aGF0IG1hdGNoIGp1c3QgaW5zZXJ0ZWQgZWxlbWVudHMg
Y291bGQgY2hhbmdlIHRoZWlyIGFwcGVhcmFuY2UsIGxpa2UKIC8vIGEgZGl2IGluc2VydGVkIGlu
dG8gYSBkb2N1bWVudCB3aXRoIGRpdiB7IGRpc3BsYXk6aW5saW5lOyB9Lgotdm9pZCBSZXBsYWNl
U2VsZWN0aW9uQ29tbWFuZDo6cmVtb3ZlUmVkdW5kYW50U3R5bGVzQW5kS2VlcFN0eWxlU3Bhbklu
bGluZSgpCit2b2lkIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpyZW1vdmVSZWR1bmRhbnRTdHls
ZXNBbmRLZWVwU3R5bGVTcGFuSW5saW5lKEluc2VydGVkTm9kZXMmIGluc2VydGVkTm9kZXMpCiB7
Ci0gICAgUmVmUHRyPE5vZGU+IHBhc3RFbmROb2RlID0gbV9sYXN0TGVhZkluc2VydGVkID8gbV9s
YXN0TGVhZkluc2VydGVkLT50cmF2ZXJzZU5leHROb2RlKCkgOiAwOworICAgIFJlZlB0cjxOb2Rl
PiBwYXN0RW5kTm9kZSA9IGluc2VydGVkTm9kZXMucGFzdExhc3RMZWFmKCk7CiAgICAgUmVmUHRy
PE5vZGU+IG5leHQ7Ci0gICAgZm9yIChSZWZQdHI8Tm9kZT4gbm9kZSA9IG1fZmlyc3ROb2RlSW5z
ZXJ0ZWQuZ2V0KCk7IG5vZGUgJiYgbm9kZSAhPSBwYXN0RW5kTm9kZTsgbm9kZSA9IG5leHQpIHsK
KyAgICBmb3IgKFJlZlB0cjxOb2RlPiBub2RlID0gaW5zZXJ0ZWROb2Rlcy5maXJzdE5vZGVJbnNl
cnRlZCgpOyBub2RlICYmIG5vZGUgIT0gcGFzdEVuZE5vZGU7IG5vZGUgPSBuZXh0KSB7CiAgICAg
ICAgIC8vIEZJWE1FOiA8cmRhcjovL3Byb2JsZW0vNTM3MTUzNj4gU3R5bGUgcnVsZXMgdGhhdCBt
YXRjaCBwYXN0ZWQgY29udGVudCBjYW4gY2hhbmdlIGl0J3MgYXBwZWFyYW5jZQogCiAgICAgICAg
IG5leHQgPSBub2RlLT50cmF2ZXJzZU5leHROb2RlKCk7CkBAIC01MDQsOSArNTA0LDEwIEBACiAg
ICAgICAgIH0KIAogICAgICAgICBpZiAoIWlubGluZVN0eWxlIHx8IG5ld0lubGluZVN0eWxlLT5p
c0VtcHR5KCkpIHsKLSAgICAgICAgICAgIGlmIChpc1N0eWxlU3Bhbk9yU3BhbldpdGhPbmx5U3R5
bGVBdHRyaWJ1dGUoZWxlbWVudCkpCisgICAgICAgICAgICBpZiAoaXNTdHlsZVNwYW5PclNwYW5X
aXRoT25seVN0eWxlQXR0cmlidXRlKGVsZW1lbnQpKSB7CisgICAgICAgICAgICAgICAgaW5zZXJ0
ZWROb2Rlcy53aWxsUmVtb3ZlTm9kZShlbGVtZW50KTsKICAgICAgICAgICAgICAgICByZW1vdmVO
b2RlUHJlc2VydmluZ0NoaWxkcmVuKGVsZW1lbnQpOwotICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgcmVtb3ZlTm9kZUF0dHJpYnV0ZShlbGVtZW50
LCBzdHlsZUF0dHIpOwogICAgICAgICB9IGVsc2UgaWYgKG5ld0lubGluZVN0eWxlLT5zdHlsZSgp
LT5sZW5ndGgoKSAhPSBpbmxpbmVTdHlsZS0+bGVuZ3RoKCkpCiAgICAgICAgICAgICBzZXROb2Rl
QXR0cmlidXRlKGVsZW1lbnQsIHN0eWxlQXR0ciwgbmV3SW5saW5lU3R5bGUtPnN0eWxlKCktPmNz
c1RleHQoKSk7CkBAIC01MTUsNiArNTE2LDcgQEAKICAgICAgICAgLy8gS2VlcCB0aGlzIGNvZGUg
YXJvdW5kIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5CiAgICAgICAgIGlmIChpc0xlZ2FjeUFw
cGxlU3R5bGVTcGFuKGVsZW1lbnQpKSB7CiAgICAgICAgICAgICBpZiAoIWVsZW1lbnQtPmZpcnN0
Q2hpbGQoKSkgeworICAgICAgICAgICAgICAgIGluc2VydGVkTm9kZXMud2lsbFJlbW92ZU5vZGUo
ZWxlbWVudCk7CiAgICAgICAgICAgICAgICAgcmVtb3ZlTm9kZVByZXNlcnZpbmdDaGlsZHJlbihl
bGVtZW50KTsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KQEAgLTU1
Miw3ICs1NTQsNyBAQAogICAgIAogICAgIC8vIFdlIGRvbid0IGhhdmUgdG8gbWFrZSBzdXJlIHRo
YXQgbV9maXJzdE5vZGVJbnNlcnRlZCBpc24ndCBpbnNpZGUgYSBzZWxlY3Qgb3Igc2NyaXB0IGVs
ZW1lbnQsIGJlY2F1c2UKICAgICAvLyBpdCBpcyBhIHRvcCBsZXZlbCBub2RlIGluIHRoZSBmcmFn
bWVudCBhbmQgdGhlIHVzZXIgY2FuJ3QgaW5zZXJ0IGludG8gdGhvc2UgZWxlbWVudHMuCi0gICAg
aWYgKCFtX2ZpcnN0Tm9kZUluc2VydGVkLT5yZW5kZXJlcigpICYmIAorICAgIGlmICghbV9maXJz
dE5vZGVJbnNlcnRlZC0+cmVuZGVyZXIoKSAmJgogICAgICAgICBtX2ZpcnN0Tm9kZUluc2VydGVk
LT5pc1RleHROb2RlKCkpIHsKICAgICAgICAgaWYgKG1fZmlyc3ROb2RlSW5zZXJ0ZWQgPT0gbV9s
YXN0TGVhZkluc2VydGVkKSB7CiAgICAgICAgICAgICByZW1vdmVOb2RlKG1fZmlyc3ROb2RlSW5z
ZXJ0ZWQuZ2V0KCkpOwpAQCAtODAzLDcgKzgwNSw3IEBACiAKICAgICByZXR1cm4gRWRpdGluZ1N0
eWxlOjplbGVtZW50SXNTdHlsZWRTcGFuT3JIVE1MRXF1aXZhbGVudChlbGVtZW50KTsKIH0KLSAg
ICAKKwogdm9pZCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6ZG9BcHBseSgpCiB7CiAgICAgVmlz
aWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBlbmRpbmdTZWxlY3Rpb24oKTsKQEAgLTk4Niw3ICs5
ODgsOCBAQAogICAgIC8vIDYpIFNlbGVjdCB0aGUgcmVwbGFjZW1lbnQgaWYgcmVxdWVzdGVkLCBh
bmQgbWF0Y2ggc3R5bGUgaWYgcmVxdWVzdGVkLgogICAgIAogICAgIFZpc2libGVQb3NpdGlvbiBz
dGFydE9mSW5zZXJ0ZWRDb250ZW50LCBlbmRPZkluc2VydGVkQ29udGVudDsKLSAgICAKKworICAg
IEluc2VydGVkTm9kZXMgaW5zZXJ0ZWROb2RlczsKICAgICBSZWZQdHI8Tm9kZT4gcmVmTm9kZSA9
IGZyYWdtZW50LmZpcnN0Q2hpbGQoKTsKICAgICBSZWZQdHI8Tm9kZT4gbm9kZSA9IHJlZk5vZGUt
Pm5leHRTaWJsaW5nKCk7CiAgICAgCkBAIC05OTUsOSArOTk4LDExIEBACiAgICAgTm9kZSogYmxv
Y2tTdGFydCA9IGVuY2xvc2luZ0Jsb2NrKGluc2VydGlvblBvcy5kZXByZWNhdGVkTm9kZSgpKTsK
ICAgICBpZiAoKGlzTGlzdEVsZW1lbnQocmVmTm9kZS5nZXQoKSkgfHwgKGlzTGVnYWN5QXBwbGVT
dHlsZVNwYW4ocmVmTm9kZS5nZXQoKSkgJiYgaXNMaXN0RWxlbWVudChyZWZOb2RlLT5maXJzdENo
aWxkKCkpKSkKICAgICAgICAgJiYgYmxvY2tTdGFydCAmJiBibG9ja1N0YXJ0LT5yZW5kZXJlcigp
LT5pc0xpc3RJdGVtKCkpCi0gICAgICAgIHJlZk5vZGUgPSBpbnNlcnRBc0xpc3RJdGVtcyhyZWZO
b2RlLCBibG9ja1N0YXJ0LCBpbnNlcnRpb25Qb3MpOwotICAgIGVsc2UKLSAgICAgICAgaW5zZXJ0
Tm9kZUF0QW5kVXBkYXRlTm9kZXNJbnNlcnRlZChyZWZOb2RlLCBpbnNlcnRpb25Qb3MpOworICAg
ICAgICByZWZOb2RlID0gaW5zZXJ0QXNMaXN0SXRlbXMocmVmTm9kZSwgYmxvY2tTdGFydCwgaW5z
ZXJ0aW9uUG9zLCBpbnNlcnRlZE5vZGVzKTsKKyAgICBlbHNlIHsKKyAgICAgICAgaW5zZXJ0Tm9k
ZUF0KHJlZk5vZGUsIGluc2VydGlvblBvcyk7CisgICAgICAgIGluc2VydGVkTm9kZXMucmVzcG9u
ZFRvTm9kZUluc2VydGlvbihyZWZOb2RlLmdldCgpKTsKKyAgICB9CiAKICAgICAvLyBNdXRhdGlv
biBldmVudHMgKGJ1ZyAyMjYzNCkgbWF5IGhhdmUgYWxyZWFkeSByZW1vdmVkIHRoZSBpbnNlcnRl
ZCBjb250ZW50CiAgICAgaWYgKCFyZWZOb2RlLT5pbkRvY3VtZW50KCkpCkBAIC0xMDA4LDcgKzEw
MTMsOCBAQAogICAgIHdoaWxlIChub2RlKSB7CiAgICAgICAgIFJlZlB0cjxOb2RlPiBuZXh0ID0g
bm9kZS0+bmV4dFNpYmxpbmcoKTsKICAgICAgICAgZnJhZ21lbnQucmVtb3ZlTm9kZShub2RlLmdl
dCgpKTsKLSAgICAgICAgaW5zZXJ0Tm9kZUFmdGVyQW5kVXBkYXRlTm9kZXNJbnNlcnRlZChub2Rl
LCByZWZOb2RlLmdldCgpKTsKKyAgICAgICAgaW5zZXJ0Tm9kZUFmdGVyKG5vZGUsIHJlZk5vZGUu
Z2V0KCkpOworICAgICAgICBpbnNlcnRlZE5vZGVzLnJlc3BvbmRUb05vZGVJbnNlcnRpb24obm9k
ZS5nZXQoKSk7CiAKICAgICAgICAgLy8gTXV0YXRpb24gZXZlbnRzIChidWcgMjI2MzQpIG1heSBo
YXZlIGFscmVhZHkgcmVtb3ZlZCB0aGUgaW5zZXJ0ZWQgY29udGVudAogICAgICAgICBpZiAoIW5v
ZGUtPmluRG9jdW1lbnQoKSkKQEAgLTEwMTksMTEgKzEwMjUsMTQgQEAKICAgICAgICAgICAgIHBs
YWluVGV4dEZyYWdtZW50ID0gaXNQbGFpblRleHRNYXJrdXAobm9kZS5nZXQoKSk7CiAgICAgICAg
IG5vZGUgPSBuZXh0OwogICAgIH0KLSAgICAKKworICAgIHJlbW92ZVJlZHVuZGFudFN0eWxlc0Fu
ZEtlZXBTdHlsZVNwYW5JbmxpbmUoaW5zZXJ0ZWROb2Rlcyk7CisKKyAgICBtX2ZpcnN0Tm9kZUlu
c2VydGVkID0gaW5zZXJ0ZWROb2Rlcy5maXJzdE5vZGVJbnNlcnRlZCgpOworICAgIG1fbGFzdExl
YWZJbnNlcnRlZCA9IGluc2VydGVkTm9kZXMubGFzdExlYWZJbnNlcnRlZCgpOworCiAgICAgcmVt
b3ZlVW5yZW5kZXJlZFRleHROb2Rlc0F0RW5kcygpOwotICAgIAotICAgIHJlbW92ZVJlZHVuZGFu
dFN0eWxlc0FuZEtlZXBTdHlsZVNwYW5JbmxpbmUoKTsKLSAgICAKKwogICAgIGlmICghaGFuZGxl
ZFN0eWxlU3BhbnMpCiAgICAgICAgIGhhbmRsZVN0eWxlU3BhbnMoKTsKICAgICAKQEAgLTExMzcs
NyArMTE0Niw4IEBACiAgICAgICAgICAgICAgICAgaW5zZXJ0VGV4dEludG9Ob2RlKHRleHQsIHRl
eHQtPmxlbmd0aCgpLCBjb2xsYXBzZVdoaXRlU3BhY2UgPyBub25CcmVha2luZ1NwYWNlU3RyaW5n
KCkgOiAiICIpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBSZWZQdHI8
Tm9kZT4gbm9kZSA9IGRvY3VtZW50KCktPmNyZWF0ZUVkaXRpbmdUZXh0Tm9kZShjb2xsYXBzZVdo
aXRlU3BhY2UgPyBub25CcmVha2luZ1NwYWNlU3RyaW5nKCkgOiAiICIpOwotICAgICAgICAgICAg
ICAgIGluc2VydE5vZGVBZnRlckFuZFVwZGF0ZU5vZGVzSW5zZXJ0ZWQobm9kZSwgZW5kTm9kZSk7
CisgICAgICAgICAgICAgICAgaW5zZXJ0Tm9kZUFmdGVyKG5vZGUsIGVuZE5vZGUpOworICAgICAg
ICAgICAgICAgIHVwZGF0ZU5vZGVzSW5zZXJ0ZWQobm9kZS5nZXQoKSk7CiAgICAgICAgICAgICB9
CiAgICAgICAgIH0KICAgICAKQEAgLTEyMjcsMzAgKzEyMzcsOSBAQAogICAgIHJldHVybiBtX2Vk
aXRBY3Rpb247CiB9CiAKLXZvaWQgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6Omluc2VydE5vZGVB
ZnRlckFuZFVwZGF0ZU5vZGVzSW5zZXJ0ZWQoUGFzc1JlZlB0cjxOb2RlPiBpbnNlcnRDaGlsZCwg
Tm9kZSogcmVmQ2hpbGQpCi17Ci0gICAgTm9kZSogbm9kZVRvVXBkYXRlID0gaW5zZXJ0Q2hpbGQu
Z2V0KCk7IC8vIGluc2VydENoaWxkIHdpbGwgYmUgY2xlYXJlZCB3aGVuIHBhc3NlZAotICAgIGlu
c2VydE5vZGVBZnRlcihpbnNlcnRDaGlsZCwgcmVmQ2hpbGQpOwotICAgIHVwZGF0ZU5vZGVzSW5z
ZXJ0ZWQobm9kZVRvVXBkYXRlKTsKLX0KLQotdm9pZCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6
aW5zZXJ0Tm9kZUF0QW5kVXBkYXRlTm9kZXNJbnNlcnRlZChQYXNzUmVmUHRyPE5vZGU+IGluc2Vy
dENoaWxkLCBjb25zdCBQb3NpdGlvbiYgcCkKLXsKLSAgICBOb2RlKiBub2RlVG9VcGRhdGUgPSBp
bnNlcnRDaGlsZC5nZXQoKTsgLy8gaW5zZXJ0Q2hpbGQgd2lsbCBiZSBjbGVhcmVkIHdoZW4gcGFz
c2VkCi0gICAgaW5zZXJ0Tm9kZUF0KGluc2VydENoaWxkLCBwKTsKLSAgICB1cGRhdGVOb2Rlc0lu
c2VydGVkKG5vZGVUb1VwZGF0ZSk7Ci19Ci0KLXZvaWQgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6
Omluc2VydE5vZGVCZWZvcmVBbmRVcGRhdGVOb2Rlc0luc2VydGVkKFBhc3NSZWZQdHI8Tm9kZT4g
aW5zZXJ0Q2hpbGQsIE5vZGUqIHJlZkNoaWxkKQotewotICAgIE5vZGUqIG5vZGVUb1VwZGF0ZSA9
IGluc2VydENoaWxkLmdldCgpOyAvLyBpbnNlcnRDaGlsZCB3aWxsIGJlIGNsZWFyZWQgd2hlbiBw
YXNzZWQKLSAgICBpbnNlcnROb2RlQmVmb3JlKGluc2VydENoaWxkLCByZWZDaGlsZCk7Ci0gICAg
dXBkYXRlTm9kZXNJbnNlcnRlZChub2RlVG9VcGRhdGUpOwotfQotCiAvLyBJZiB0aGUgdXNlciBp
cyBpbnNlcnRpbmcgYSBsaXN0IGludG8gYW4gZXhpc3RpbmcgbGlzdCwgaW5zdGVhZCBvZiBuZXN0
aW5nIHRoZSBsaXN0LAogLy8gd2UgcHV0IHRoZSBsaXN0IGl0ZW1zIGludG8gdGhlIGV4aXN0aW5n
IGxpc3QuCi1Ob2RlKiBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6aW5zZXJ0QXNMaXN0SXRlbXMo
UGFzc1JlZlB0cjxOb2RlPiBwcnBMaXN0RWxlbWVudCwgTm9kZSogaW5zZXJ0aW9uQmxvY2ssIGNv
bnN0IFBvc2l0aW9uJiBpbnNlcnRQb3MpCitOb2RlKiBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6
aW5zZXJ0QXNMaXN0SXRlbXMoUGFzc1JlZlB0cjxOb2RlPiBwcnBMaXN0RWxlbWVudCwgTm9kZSog
aW5zZXJ0aW9uQmxvY2ssIGNvbnN0IFBvc2l0aW9uJiBpbnNlcnRQb3MsIEluc2VydGVkTm9kZXMm
IGluc2VydGVkTm9kZXMpCiB7CiAgICAgUmVmUHRyPE5vZGU+IGxpc3RFbGVtZW50ID0gcHJwTGlz
dEVsZW1lbnQ7CiAKQEAgLTEyNzUsMTAgKzEyNjQsMTIgQEAKICAgICAgICAgRXhjZXB0aW9uQ29k
ZSBlYyA9IDA7CiAgICAgICAgIHRvQ29udGFpbmVyTm9kZShsaXN0RWxlbWVudC5nZXQoKSktPnJl
bW92ZUNoaWxkKGxpc3RJdGVtLmdldCgpLCBlYyk7CiAgICAgICAgIEFTU0VSVCghZWMpOwotICAg
ICAgICBpZiAoaXNTdGFydCB8fCBpc01pZGRsZSkKKyAgICAgICAgaWYgKGlzU3RhcnQgfHwgaXNN
aWRkbGUpIHsKICAgICAgICAgICAgIGluc2VydE5vZGVCZWZvcmUobGlzdEl0ZW0sIGxhc3ROb2Rl
KTsKLSAgICAgICAgZWxzZSBpZiAoaXNFbmQpIHsKKyAgICAgICAgICAgIGluc2VydGVkTm9kZXMu
cmVzcG9uZFRvTm9kZUluc2VydGlvbihsaXN0SXRlbS5nZXQoKSk7CisgICAgICAgIH0gZWxzZSBp
ZiAoaXNFbmQpIHsKICAgICAgICAgICAgIGluc2VydE5vZGVBZnRlcihsaXN0SXRlbSwgbGFzdE5v
ZGUpOworICAgICAgICAgICAgaW5zZXJ0ZWROb2Rlcy5yZXNwb25kVG9Ob2RlSW5zZXJ0aW9uKGxp
c3RJdGVtLmdldCgpKTsKICAgICAgICAgICAgIGxhc3ROb2RlID0gbGlzdEl0ZW0uZ2V0KCk7CiAg
ICAgICAgIH0gZWxzZQogICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0xMjg3
LDcgKzEyNzgsNiBAQAogICAgICAgICBsYXN0Tm9kZSA9IGxhc3ROb2RlLT5wcmV2aW91c1NpYmxp
bmcoKTsKICAgICBpZiAoaXNNaWRkbGUpCiAgICAgICAgIGluc2VydE5vZGVBZnRlcihjcmVhdGVM
aXN0SXRlbUVsZW1lbnQoZG9jdW1lbnQoKSksIGxhc3ROb2RlKTsKLSAgICB1cGRhdGVOb2Rlc0lu
c2VydGVkKGxhc3ROb2RlKTsKICAgICByZXR1cm4gbGFzdE5vZGU7CiB9CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmgJKHJldmlz
aW9uIDk1MDMxKQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29t
bWFuZC5oCSh3b3JraW5nIGNvcHkpCkBAIC02MCwxMSArNjAsMzUgQEAKICAgICB2aXJ0dWFsIEVk
aXRBY3Rpb24gZWRpdGluZ0FjdGlvbigpIGNvbnN0OwogCiAgICAgdm9pZCBjb21wbGV0ZUhUTUxS
ZXBsYWNlbWVudChjb25zdCBQb3NpdGlvbiYgbGFzdFBvc2l0aW9uVG9TZWxlY3QpOworICAgIAor
ICAgIGNsYXNzIEluc2VydGVkTm9kZXMgeworICAgIHB1YmxpYzoKKyAgICAgICAgdm9pZCByZXNw
b25kVG9Ob2RlSW5zZXJ0aW9uKE5vZGUqIG5vZGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlm
ICghbm9kZSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIGlmICghbV9maXJzdE5vZGVJbnNlcnRlZCkKKyAgICAgICAgICAgICAgICBtX2ZpcnN0Tm9k
ZUluc2VydGVkID0gbm9kZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9sYXN0Tm9kZUlu
c2VydGVkID0gbm9kZTsKKyAgICAgICAgfQorICAgICAgICB2b2lkIHdpbGxSZW1vdmVOb2RlKE5v
ZGUqIG5vZGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtX2ZpcnN0Tm9kZUluc2VydGVk
ID09IG5vZGUpCisgICAgICAgICAgICAgICAgbV9maXJzdE5vZGVJbnNlcnRlZCA9IG5vZGUtPnRy
YXZlcnNlTmV4dE5vZGUoKTsKKyAgICAgICAgICAgIGlmIChtX2xhc3ROb2RlSW5zZXJ0ZWQgPT0g
bm9kZSkKKyAgICAgICAgICAgICAgICBtX2xhc3ROb2RlSW5zZXJ0ZWQgPSBub2RlLT5sYXN0Q2hp
bGQoKSA/IG5vZGUtPmxhc3RDaGlsZCgpIDogbm9kZS0+dHJhdmVyc2VOZXh0U2libGluZygpOwor
ICAgICAgICB9CisgICAgICAgIE5vZGUqIGZpcnN0Tm9kZUluc2VydGVkKCkgeyByZXR1cm4gbV9m
aXJzdE5vZGVJbnNlcnRlZC5nZXQoKTsgfQorICAgICAgICBOb2RlKiBsYXN0TGVhZkluc2VydGVk
KCkgeyByZXR1cm4gbV9sYXN0Tm9kZUluc2VydGVkLT5sYXN0RGVzY2VuZGFudCgpOyB9CisgICAg
ICAgIE5vZGUqIHBhc3RMYXN0TGVhZigpIHsgcmV0dXJuIG1fZmlyc3ROb2RlSW5zZXJ0ZWQgPyBs
YXN0TGVhZkluc2VydGVkKCktPnRyYXZlcnNlTmV4dE5vZGUoKSA6IDA7IH0KKyAgICBwcml2YXRl
OgorICAgICAgICBSZWZQdHI8Tm9kZT4gbV9maXJzdE5vZGVJbnNlcnRlZDsKKyAgICAgICAgUmVm
UHRyPE5vZGU+IG1fbGFzdE5vZGVJbnNlcnRlZDsKKyAgICB9OwogCi0gICAgdm9pZCBpbnNlcnRO
b2RlQWZ0ZXJBbmRVcGRhdGVOb2Rlc0luc2VydGVkKFBhc3NSZWZQdHI8Tm9kZT4gaW5zZXJ0Q2hp
bGQsIE5vZGUqIHJlZkNoaWxkKTsKLSAgICB2b2lkIGluc2VydE5vZGVBdEFuZFVwZGF0ZU5vZGVz
SW5zZXJ0ZWQoUGFzc1JlZlB0cjxOb2RlPiwgY29uc3QgUG9zaXRpb24mKTsKLSAgICB2b2lkIGlu
c2VydE5vZGVCZWZvcmVBbmRVcGRhdGVOb2Rlc0luc2VydGVkKFBhc3NSZWZQdHI8Tm9kZT4gaW5z
ZXJ0Q2hpbGQsIE5vZGUqIHJlZkNoaWxkKTsKLSAgICBOb2RlKiBpbnNlcnRBc0xpc3RJdGVtcyhQ
YXNzUmVmUHRyPE5vZGU+LCBOb2RlKiBpbnNlcnRpb25Ob2RlLCBjb25zdCBQb3NpdGlvbiYpOwor
ICAgIE5vZGUqIGluc2VydEFzTGlzdEl0ZW1zKFBhc3NSZWZQdHI8Tm9kZT4sIE5vZGUqIGluc2Vy
dGlvbk5vZGUsIGNvbnN0IFBvc2l0aW9uJiwgSW5zZXJ0ZWROb2RlcyYpOwogCiAgICAgdm9pZCB1
cGRhdGVOb2Rlc0luc2VydGVkKE5vZGUqKTsKICAgICBib29sIHNob3VsZFJlbW92ZUVuZEJSKE5v
ZGUqLCBjb25zdCBWaXNpYmxlUG9zaXRpb24mKTsKQEAgLTc3LDcgKzEwMSw3IEBACiAgICAgCiAg
ICAgdm9pZCByZW1vdmVVbnJlbmRlcmVkVGV4dE5vZGVzQXRFbmRzKCk7CiAgICAgCi0gICAgdm9p
ZCByZW1vdmVSZWR1bmRhbnRTdHlsZXNBbmRLZWVwU3R5bGVTcGFuSW5saW5lKCk7CisgICAgdm9p
ZCByZW1vdmVSZWR1bmRhbnRTdHlsZXNBbmRLZWVwU3R5bGVTcGFuSW5saW5lKEluc2VydGVkTm9k
ZXMmKTsKICAgICB2b2lkIGhhbmRsZVN0eWxlU3BhbnMoKTsKICAgICB2b2lkIGNvcHlTdHlsZVRv
Q2hpbGRyZW4oTm9kZSogcGFyZW50Tm9kZSwgY29uc3QgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRp
b24qIHBhcmVudFN0eWxlKTsKICAgICB2b2lkIGhhbmRsZVBhc3RlQXNRdW90YXRpb25Ob2RlKCk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcAkocmV2aXNpb24gOTUw
MzEpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtOTIzLDYgKzkyMywzNiBAQAogICAgIHJldHVybiBudW07CiB9CiAKK3ZvaWQgdXBk
YXRlUG9zaXRpb25Gb3JOb2RlUmVtb3ZhbChQb3NpdGlvbiYgcG9zaXRpb24sIE5vZGUqIG5vZGUp
Cit7CisgICAgaWYgKHBvc2l0aW9uLmlzTnVsbCgpKQorICAgICAgICByZXR1cm47CisgICAgc3dp
dGNoIChwb3NpdGlvbi5hbmNob3JUeXBlKCkpIHsKKyAgICBjYXNlIFBvc2l0aW9uOjpQb3NpdGlv
bklzQmVmb3JlQ2hpbGRyZW46CisgICAgICAgIGlmIChwb3NpdGlvbi5jb250YWluZXJOb2RlKCkg
PT0gbm9kZSkKKyAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25JblBhcmVudEJlZm9yZU5v
ZGUobm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUG9zaXRpb246OlBvc2l0aW9uSXNB
ZnRlckNoaWxkcmVuOgorICAgICAgICBpZiAocG9zaXRpb24uY29udGFpbmVyTm9kZSgpID09IG5v
ZGUpCisgICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uSW5QYXJlbnRBZnRlck5vZGUobm9k
ZSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJ
bkFuY2hvcjoKKyAgICAgICAgaWYgKHBvc2l0aW9uLmNvbnRhaW5lck5vZGUoKSA9PSBub2RlLT5w
YXJlbnROb2RlKCkgJiYgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHBvc2l0aW9uLm9mZnNldEluQ29u
dGFpbmVyTm9kZSgpKSA+IG5vZGUtPm5vZGVJbmRleCgpKQorICAgICAgICAgICAgcG9zaXRpb24u
bW92ZVRvT2Zmc2V0KHBvc2l0aW9uLm9mZnNldEluQ29udGFpbmVyTm9kZSgpIC0gMSk7CisgICAg
ICAgIGVsc2UgaWYgKG5vZGUtPmNvbnRhaW5zKHBvc2l0aW9uLmNvbnRhaW5lck5vZGUoKSkpCisg
ICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uSW5QYXJlbnRCZWZvcmVOb2RlKG5vZGUpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIFBvc2l0aW9uOjpQb3NpdGlvbklzQWZ0ZXJBbmNob3I6
CisgICAgICAgIGlmIChub2RlLT5jb250YWlucyhwb3NpdGlvbi5hbmNob3JOb2RlKCkpKQorICAg
ICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbkluUGFyZW50QWZ0ZXJOb2RlKG5vZGUpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIFBvc2l0aW9uOjpQb3NpdGlvbklzQmVmb3JlQW5jaG9yOgor
ICAgICAgICBpZiAobm9kZS0+Y29udGFpbnMocG9zaXRpb24uYW5jaG9yTm9kZSgpKSkKKyAgICAg
ICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25JblBhcmVudEJlZm9yZU5vZGUobm9kZSk7CisgICAg
ICAgIGJyZWFrOworICAgIH0KK30KKwogYm9vbCBpc01haWxCbG9ja3F1b3RlKGNvbnN0IE5vZGUg
Km5vZGUpCiB7CiAgICAgaWYgKCFub2RlIHx8ICFub2RlLT5oYXNUYWdOYW1lKGJsb2NrcXVvdGVU
YWcpKQpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaHRtbGVkaXRpbmcuaAkocmV2aXNpb24gOTUw
MzEpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTE1OSw2ICsxNTksNyBAQAogLy8gbWlzY2VsbGFuZW91cyBmdW5jdGlvbnMgb24gUG9z
aXRpb24KIAogdW5zaWduZWQgbnVtRW5jbG9zaW5nTWFpbEJsb2NrcXVvdGVzKGNvbnN0IFBvc2l0
aW9uJik7Cit2b2lkIHVwZGF0ZVBvc2l0aW9uRm9yTm9kZVJlbW92YWwoUG9zaXRpb24mLCBOb2Rl
Kik7CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vIFZpc2libGVQb3NpdGlvbgpJbmRleDogU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkocmV2aXNpb24gOTYwNzcpCisrKyBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtp
bmcgY29weSkKQEAgLTEsMyArMSwzMCBAQAorMjAxMS0wOS0yNyAgUnlvc3VrZSBOaXdhICA8cm5p
d2FAd2Via2l0Lm9yZz4KKworICAgICAgICBFbmNhcHN1bGF0ZSBtX2ZpcnN0Tm9kZUluc2VydGVk
IGFuZCBtX2xhc3RMZWFmSW5zZXJ0ZWQgaW4gbm9kZSBpbnNlcnRpb24gbG9naWMKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY4ODc1CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgSW5zZXJ0ZWROb2Rl
IGNsYXNzIGluc2lkZSBSZXBsYWNlU2VsZWN0aW9uIHRvIGVuY2Fwc3VsYXRlIG1fZmlyc3ROb2Rl
SW5zZXJ0ZWQgYW5kIG1fbGFzdExlYWZJbnNlcnRlZC4KKyAgICAgICAgRGVwbG95ZWQgaXQgaW4g
cmVtb3ZlUmVkdW5kYW50U3R5bGVzQW5kS2VlcFN0eWxlU3BhbklubGluZSwgZG9BcHBseSwgYW5k
IGluc2VydEFzTGlzdEl0ZW1zIG9mIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kLgorCisgICAgICAg
ICogZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkRlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OnJlbW92ZU5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6
RGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6aGFuZGxlR2VuZXJhbERlbGV0ZSk6CisgICAgICAgICog
ZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6cmVtb3ZlUmVkdW5kYW50U3R5bGVzQW5kS2VlcFN0eWxl
U3BhbklubGluZSk6CisgICAgICAgIChXZWJDb3JlOjpSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6
ZG9BcHBseSk6CisgICAgICAgIChXZWJDb3JlOjpSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6aW5z
ZXJ0QXNMaXN0SXRlbXMpOgorICAgICAgICAqIGVkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1h
bmQuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpJbnNlcnRl
ZE5vZGVzOjpyZXNwb25kVG9Ob2RlSW5zZXJ0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlcGxh
Y2VTZWxlY3Rpb25Db21tYW5kOjpJbnNlcnRlZE5vZGVzOjp3aWxsUmVtb3ZlTm9kZSk6CisgICAg
ICAgIChXZWJDb3JlOjpSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6SW5zZXJ0ZWROb2Rlczo6Zmly
c3ROb2RlSW5zZXJ0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVwbGFjZVNlbGVjdGlvbkNvbW1h
bmQ6Okluc2VydGVkTm9kZXM6Omxhc3RMZWFmSW5zZXJ0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6
UmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6Okluc2VydGVkTm9kZXM6OnBhc3RMYXN0TGVhZik6Cisg
ICAgICAgICogZWRpdGluZy9odG1sZWRpdGluZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjp1cGRh
dGVQb3NpdGlvbkZvck5vZGVSZW1vdmFsKTogTW92ZWQgZnJvbSBEZWxldGVTZWxlY3Rpb25Db21t
YW5kLmNwcC4KKyAgICAgICAgKiBlZGl0aW5nL2h0bWxlZGl0aW5nLmg6CisKIDIwMTEtMDktMjYg
IEtlbnRhcm8gSGFyYSAgPGhhcmFrZW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIEltcGxlbWVu
dCBQb3BTdGF0ZUV2ZW50LnN0YXRlIHdpdGggU2VyaWFsaXplZFNjcmlwdFZhbHVlIGFuZCBTY3Jp
cHRWYWx1ZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>108802</attachid>
            <date>2011-09-27 00:40:44 -0700</date>
            <delta_ts>2011-09-27 01:40:23 -0700</delta_ts>
            <desc>Added the forgotten DeleteSelectionCommand change</desc>
            <filename>fix68875b</filename>
            <type>text/plain</type>
            <size>16494</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk2MDc3KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzAgQEAKKzIwMTEtMDktMjcgIFJ5b3N1a2Ug
Tml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAgICAgICAgRW5jYXBzdWxhdGUgbV9maXJzdE5v
ZGVJbnNlcnRlZCBhbmQgbV9sYXN0TGVhZkluc2VydGVkIGluIG5vZGUgaW5zZXJ0aW9uIGxvZ2lj
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02ODg3NQor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIElu
c2VydGVkTm9kZSBjbGFzcyBpbnNpZGUgUmVwbGFjZVNlbGVjdGlvbiB0byBlbmNhcHN1bGF0ZSBt
X2ZpcnN0Tm9kZUluc2VydGVkIGFuZCBtX2xhc3RMZWFmSW5zZXJ0ZWQuCisgICAgICAgIERlcGxv
eWVkIGl0IGluIHJlbW92ZVJlZHVuZGFudFN0eWxlc0FuZEtlZXBTdHlsZVNwYW5JbmxpbmUsIGRv
QXBwbHksIGFuZCBpbnNlcnRBc0xpc3RJdGVtcyBvZiBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC4K
KworICAgICAgICAqIGVkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpyZW1vdmVOb2RlKToKKyAgICAgICAg
KFdlYkNvcmU6OkRlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmhhbmRsZUdlbmVyYWxEZWxldGUpOgor
ICAgICAgICAqIGVkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OnJlbW92ZVJlZHVuZGFudFN0eWxlc0Fu
ZEtlZXBTdHlsZVNwYW5JbmxpbmUpOgorICAgICAgICAoV2ViQ29yZTo6UmVwbGFjZVNlbGVjdGlv
bkNvbW1hbmQ6OmRvQXBwbHkpOgorICAgICAgICAoV2ViQ29yZTo6UmVwbGFjZVNlbGVjdGlvbkNv
bW1hbmQ6Omluc2VydEFzTGlzdEl0ZW1zKToKKyAgICAgICAgKiBlZGl0aW5nL1JlcGxhY2VTZWxl
Y3Rpb25Db21tYW5kLmg6CisgICAgICAgIChXZWJDb3JlOjpSZXBsYWNlU2VsZWN0aW9uQ29tbWFu
ZDo6SW5zZXJ0ZWROb2Rlczo6cmVzcG9uZFRvTm9kZUluc2VydGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6SW5zZXJ0ZWROb2Rlczo6d2lsbFJlbW92ZU5v
ZGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6Okluc2VydGVk
Tm9kZXM6OmZpcnN0Tm9kZUluc2VydGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlcGxhY2VTZWxl
Y3Rpb25Db21tYW5kOjpJbnNlcnRlZE5vZGVzOjpsYXN0TGVhZkluc2VydGVkKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpJbnNlcnRlZE5vZGVzOjpwYXN0TGFz
dExlYWYpOgorICAgICAgICAqIGVkaXRpbmcvaHRtbGVkaXRpbmcuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6dXBkYXRlUG9zaXRpb25Gb3JOb2RlUmVtb3ZhbCk6IE1vdmVkIGZyb20gRGVsZXRlU2Vs
ZWN0aW9uQ29tbWFuZC5jcHAuCisgICAgICAgICogZWRpdGluZy9odG1sZWRpdGluZy5oOgorCiAy
MDExLTA5LTI2ICBLZW50YXJvIEhhcmEgIDxoYXJha2VuQGNocm9taXVtLm9yZz4KIAogICAgICAg
ICBJbXBsZW1lbnQgUG9wU3RhdGVFdmVudC5zdGF0ZSB3aXRoIFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZSBhbmQgU2NyaXB0VmFsdWUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNl
bGVjdGlvbkNvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
UmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwCShyZXZpc2lvbiA5NTAzMSkKKysrIFNvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00NzYsMTEgKzQ3NiwxMSBAQAogCiAvLyBTdHlsZSBydWxlcyB0aGF0IG1hdGNoIGp1c3Qg
aW5zZXJ0ZWQgZWxlbWVudHMgY291bGQgY2hhbmdlIHRoZWlyIGFwcGVhcmFuY2UsIGxpa2UKIC8v
IGEgZGl2IGluc2VydGVkIGludG8gYSBkb2N1bWVudCB3aXRoIGRpdiB7IGRpc3BsYXk6aW5saW5l
OyB9Lgotdm9pZCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6cmVtb3ZlUmVkdW5kYW50U3R5bGVz
QW5kS2VlcFN0eWxlU3BhbklubGluZSgpCit2b2lkIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpy
ZW1vdmVSZWR1bmRhbnRTdHlsZXNBbmRLZWVwU3R5bGVTcGFuSW5saW5lKEluc2VydGVkTm9kZXMm
IGluc2VydGVkTm9kZXMpCiB7Ci0gICAgUmVmUHRyPE5vZGU+IHBhc3RFbmROb2RlID0gbV9sYXN0
TGVhZkluc2VydGVkID8gbV9sYXN0TGVhZkluc2VydGVkLT50cmF2ZXJzZU5leHROb2RlKCkgOiAw
OworICAgIFJlZlB0cjxOb2RlPiBwYXN0RW5kTm9kZSA9IGluc2VydGVkTm9kZXMucGFzdExhc3RM
ZWFmKCk7CiAgICAgUmVmUHRyPE5vZGU+IG5leHQ7Ci0gICAgZm9yIChSZWZQdHI8Tm9kZT4gbm9k
ZSA9IG1fZmlyc3ROb2RlSW5zZXJ0ZWQuZ2V0KCk7IG5vZGUgJiYgbm9kZSAhPSBwYXN0RW5kTm9k
ZTsgbm9kZSA9IG5leHQpIHsKKyAgICBmb3IgKFJlZlB0cjxOb2RlPiBub2RlID0gaW5zZXJ0ZWRO
b2Rlcy5maXJzdE5vZGVJbnNlcnRlZCgpOyBub2RlICYmIG5vZGUgIT0gcGFzdEVuZE5vZGU7IG5v
ZGUgPSBuZXh0KSB7CiAgICAgICAgIC8vIEZJWE1FOiA8cmRhcjovL3Byb2JsZW0vNTM3MTUzNj4g
U3R5bGUgcnVsZXMgdGhhdCBtYXRjaCBwYXN0ZWQgY29udGVudCBjYW4gY2hhbmdlIGl0J3MgYXBw
ZWFyYW5jZQogCiAgICAgICAgIG5leHQgPSBub2RlLT50cmF2ZXJzZU5leHROb2RlKCk7CkBAIC01
MDQsOSArNTA0LDEwIEBACiAgICAgICAgIH0KIAogICAgICAgICBpZiAoIWlubGluZVN0eWxlIHx8
IG5ld0lubGluZVN0eWxlLT5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIGlmIChpc1N0eWxlU3Bh
bk9yU3BhbldpdGhPbmx5U3R5bGVBdHRyaWJ1dGUoZWxlbWVudCkpCisgICAgICAgICAgICBpZiAo
aXNTdHlsZVNwYW5PclNwYW5XaXRoT25seVN0eWxlQXR0cmlidXRlKGVsZW1lbnQpKSB7CisgICAg
ICAgICAgICAgICAgaW5zZXJ0ZWROb2Rlcy53aWxsUmVtb3ZlTm9kZShlbGVtZW50KTsKICAgICAg
ICAgICAgICAgICByZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuKGVsZW1lbnQpOwotICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgcmVtb3ZlTm9k
ZUF0dHJpYnV0ZShlbGVtZW50LCBzdHlsZUF0dHIpOwogICAgICAgICB9IGVsc2UgaWYgKG5ld0lu
bGluZVN0eWxlLT5zdHlsZSgpLT5sZW5ndGgoKSAhPSBpbmxpbmVTdHlsZS0+bGVuZ3RoKCkpCiAg
ICAgICAgICAgICBzZXROb2RlQXR0cmlidXRlKGVsZW1lbnQsIHN0eWxlQXR0ciwgbmV3SW5saW5l
U3R5bGUtPnN0eWxlKCktPmNzc1RleHQoKSk7CkBAIC01MTUsNiArNTE2LDcgQEAKICAgICAgICAg
Ly8gS2VlcCB0aGlzIGNvZGUgYXJvdW5kIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5CiAgICAg
ICAgIGlmIChpc0xlZ2FjeUFwcGxlU3R5bGVTcGFuKGVsZW1lbnQpKSB7CiAgICAgICAgICAgICBp
ZiAoIWVsZW1lbnQtPmZpcnN0Q2hpbGQoKSkgeworICAgICAgICAgICAgICAgIGluc2VydGVkTm9k
ZXMud2lsbFJlbW92ZU5vZGUoZWxlbWVudCk7CiAgICAgICAgICAgICAgICAgcmVtb3ZlTm9kZVBy
ZXNlcnZpbmdDaGlsZHJlbihlbGVtZW50KTsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAg
ICAgICAgICAgIH0KQEAgLTU1Miw3ICs1NTQsNyBAQAogICAgIAogICAgIC8vIFdlIGRvbid0IGhh
dmUgdG8gbWFrZSBzdXJlIHRoYXQgbV9maXJzdE5vZGVJbnNlcnRlZCBpc24ndCBpbnNpZGUgYSBz
ZWxlY3Qgb3Igc2NyaXB0IGVsZW1lbnQsIGJlY2F1c2UKICAgICAvLyBpdCBpcyBhIHRvcCBsZXZl
bCBub2RlIGluIHRoZSBmcmFnbWVudCBhbmQgdGhlIHVzZXIgY2FuJ3QgaW5zZXJ0IGludG8gdGhv
c2UgZWxlbWVudHMuCi0gICAgaWYgKCFtX2ZpcnN0Tm9kZUluc2VydGVkLT5yZW5kZXJlcigpICYm
IAorICAgIGlmICghbV9maXJzdE5vZGVJbnNlcnRlZC0+cmVuZGVyZXIoKSAmJgogICAgICAgICBt
X2ZpcnN0Tm9kZUluc2VydGVkLT5pc1RleHROb2RlKCkpIHsKICAgICAgICAgaWYgKG1fZmlyc3RO
b2RlSW5zZXJ0ZWQgPT0gbV9sYXN0TGVhZkluc2VydGVkKSB7CiAgICAgICAgICAgICByZW1vdmVO
b2RlKG1fZmlyc3ROb2RlSW5zZXJ0ZWQuZ2V0KCkpOwpAQCAtODAzLDcgKzgwNSw3IEBACiAKICAg
ICByZXR1cm4gRWRpdGluZ1N0eWxlOjplbGVtZW50SXNTdHlsZWRTcGFuT3JIVE1MRXF1aXZhbGVu
dChlbGVtZW50KTsKIH0KLSAgICAKKwogdm9pZCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6ZG9B
cHBseSgpCiB7CiAgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBlbmRpbmdTZWxlY3Rp
b24oKTsKQEAgLTk4Niw3ICs5ODgsOCBAQAogICAgIC8vIDYpIFNlbGVjdCB0aGUgcmVwbGFjZW1l
bnQgaWYgcmVxdWVzdGVkLCBhbmQgbWF0Y2ggc3R5bGUgaWYgcmVxdWVzdGVkLgogICAgIAogICAg
IFZpc2libGVQb3NpdGlvbiBzdGFydE9mSW5zZXJ0ZWRDb250ZW50LCBlbmRPZkluc2VydGVkQ29u
dGVudDsKLSAgICAKKworICAgIEluc2VydGVkTm9kZXMgaW5zZXJ0ZWROb2RlczsKICAgICBSZWZQ
dHI8Tm9kZT4gcmVmTm9kZSA9IGZyYWdtZW50LmZpcnN0Q2hpbGQoKTsKICAgICBSZWZQdHI8Tm9k
ZT4gbm9kZSA9IHJlZk5vZGUtPm5leHRTaWJsaW5nKCk7CiAgICAgCkBAIC05OTUsOSArOTk4LDEx
IEBACiAgICAgTm9kZSogYmxvY2tTdGFydCA9IGVuY2xvc2luZ0Jsb2NrKGluc2VydGlvblBvcy5k
ZXByZWNhdGVkTm9kZSgpKTsKICAgICBpZiAoKGlzTGlzdEVsZW1lbnQocmVmTm9kZS5nZXQoKSkg
fHwgKGlzTGVnYWN5QXBwbGVTdHlsZVNwYW4ocmVmTm9kZS5nZXQoKSkgJiYgaXNMaXN0RWxlbWVu
dChyZWZOb2RlLT5maXJzdENoaWxkKCkpKSkKICAgICAgICAgJiYgYmxvY2tTdGFydCAmJiBibG9j
a1N0YXJ0LT5yZW5kZXJlcigpLT5pc0xpc3RJdGVtKCkpCi0gICAgICAgIHJlZk5vZGUgPSBpbnNl
cnRBc0xpc3RJdGVtcyhyZWZOb2RlLCBibG9ja1N0YXJ0LCBpbnNlcnRpb25Qb3MpOwotICAgIGVs
c2UKLSAgICAgICAgaW5zZXJ0Tm9kZUF0QW5kVXBkYXRlTm9kZXNJbnNlcnRlZChyZWZOb2RlLCBp
bnNlcnRpb25Qb3MpOworICAgICAgICByZWZOb2RlID0gaW5zZXJ0QXNMaXN0SXRlbXMocmVmTm9k
ZSwgYmxvY2tTdGFydCwgaW5zZXJ0aW9uUG9zLCBpbnNlcnRlZE5vZGVzKTsKKyAgICBlbHNlIHsK
KyAgICAgICAgaW5zZXJ0Tm9kZUF0KHJlZk5vZGUsIGluc2VydGlvblBvcyk7CisgICAgICAgIGlu
c2VydGVkTm9kZXMucmVzcG9uZFRvTm9kZUluc2VydGlvbihyZWZOb2RlLmdldCgpKTsKKyAgICB9
CiAKICAgICAvLyBNdXRhdGlvbiBldmVudHMgKGJ1ZyAyMjYzNCkgbWF5IGhhdmUgYWxyZWFkeSBy
ZW1vdmVkIHRoZSBpbnNlcnRlZCBjb250ZW50CiAgICAgaWYgKCFyZWZOb2RlLT5pbkRvY3VtZW50
KCkpCkBAIC0xMDA4LDcgKzEwMTMsOCBAQAogICAgIHdoaWxlIChub2RlKSB7CiAgICAgICAgIFJl
ZlB0cjxOb2RlPiBuZXh0ID0gbm9kZS0+bmV4dFNpYmxpbmcoKTsKICAgICAgICAgZnJhZ21lbnQu
cmVtb3ZlTm9kZShub2RlLmdldCgpKTsKLSAgICAgICAgaW5zZXJ0Tm9kZUFmdGVyQW5kVXBkYXRl
Tm9kZXNJbnNlcnRlZChub2RlLCByZWZOb2RlLmdldCgpKTsKKyAgICAgICAgaW5zZXJ0Tm9kZUFm
dGVyKG5vZGUsIHJlZk5vZGUuZ2V0KCkpOworICAgICAgICBpbnNlcnRlZE5vZGVzLnJlc3BvbmRU
b05vZGVJbnNlcnRpb24obm9kZS5nZXQoKSk7CiAKICAgICAgICAgLy8gTXV0YXRpb24gZXZlbnRz
IChidWcgMjI2MzQpIG1heSBoYXZlIGFscmVhZHkgcmVtb3ZlZCB0aGUgaW5zZXJ0ZWQgY29udGVu
dAogICAgICAgICBpZiAoIW5vZGUtPmluRG9jdW1lbnQoKSkKQEAgLTEwMTksMTEgKzEwMjUsMTQg
QEAKICAgICAgICAgICAgIHBsYWluVGV4dEZyYWdtZW50ID0gaXNQbGFpblRleHRNYXJrdXAobm9k
ZS5nZXQoKSk7CiAgICAgICAgIG5vZGUgPSBuZXh0OwogICAgIH0KLSAgICAKKworICAgIHJlbW92
ZVJlZHVuZGFudFN0eWxlc0FuZEtlZXBTdHlsZVNwYW5JbmxpbmUoaW5zZXJ0ZWROb2Rlcyk7CisK
KyAgICBtX2ZpcnN0Tm9kZUluc2VydGVkID0gaW5zZXJ0ZWROb2Rlcy5maXJzdE5vZGVJbnNlcnRl
ZCgpOworICAgIG1fbGFzdExlYWZJbnNlcnRlZCA9IGluc2VydGVkTm9kZXMubGFzdExlYWZJbnNl
cnRlZCgpOworCiAgICAgcmVtb3ZlVW5yZW5kZXJlZFRleHROb2Rlc0F0RW5kcygpOwotICAgIAot
ICAgIHJlbW92ZVJlZHVuZGFudFN0eWxlc0FuZEtlZXBTdHlsZVNwYW5JbmxpbmUoKTsKLSAgICAK
KwogICAgIGlmICghaGFuZGxlZFN0eWxlU3BhbnMpCiAgICAgICAgIGhhbmRsZVN0eWxlU3BhbnMo
KTsKICAgICAKQEAgLTExMzcsNyArMTE0Niw4IEBACiAgICAgICAgICAgICAgICAgaW5zZXJ0VGV4
dEludG9Ob2RlKHRleHQsIHRleHQtPmxlbmd0aCgpLCBjb2xsYXBzZVdoaXRlU3BhY2UgPyBub25C
cmVha2luZ1NwYWNlU3RyaW5nKCkgOiAiICIpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAg
ICAgICAgICAgICBSZWZQdHI8Tm9kZT4gbm9kZSA9IGRvY3VtZW50KCktPmNyZWF0ZUVkaXRpbmdU
ZXh0Tm9kZShjb2xsYXBzZVdoaXRlU3BhY2UgPyBub25CcmVha2luZ1NwYWNlU3RyaW5nKCkgOiAi
ICIpOwotICAgICAgICAgICAgICAgIGluc2VydE5vZGVBZnRlckFuZFVwZGF0ZU5vZGVzSW5zZXJ0
ZWQobm9kZSwgZW5kTm9kZSk7CisgICAgICAgICAgICAgICAgaW5zZXJ0Tm9kZUFmdGVyKG5vZGUs
IGVuZE5vZGUpOworICAgICAgICAgICAgICAgIHVwZGF0ZU5vZGVzSW5zZXJ0ZWQobm9kZS5nZXQo
KSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAKQEAgLTEyMjcsMzAgKzEyMzcsOSBA
QAogICAgIHJldHVybiBtX2VkaXRBY3Rpb247CiB9CiAKLXZvaWQgUmVwbGFjZVNlbGVjdGlvbkNv
bW1hbmQ6Omluc2VydE5vZGVBZnRlckFuZFVwZGF0ZU5vZGVzSW5zZXJ0ZWQoUGFzc1JlZlB0cjxO
b2RlPiBpbnNlcnRDaGlsZCwgTm9kZSogcmVmQ2hpbGQpCi17Ci0gICAgTm9kZSogbm9kZVRvVXBk
YXRlID0gaW5zZXJ0Q2hpbGQuZ2V0KCk7IC8vIGluc2VydENoaWxkIHdpbGwgYmUgY2xlYXJlZCB3
aGVuIHBhc3NlZAotICAgIGluc2VydE5vZGVBZnRlcihpbnNlcnRDaGlsZCwgcmVmQ2hpbGQpOwot
ICAgIHVwZGF0ZU5vZGVzSW5zZXJ0ZWQobm9kZVRvVXBkYXRlKTsKLX0KLQotdm9pZCBSZXBsYWNl
U2VsZWN0aW9uQ29tbWFuZDo6aW5zZXJ0Tm9kZUF0QW5kVXBkYXRlTm9kZXNJbnNlcnRlZChQYXNz
UmVmUHRyPE5vZGU+IGluc2VydENoaWxkLCBjb25zdCBQb3NpdGlvbiYgcCkKLXsKLSAgICBOb2Rl
KiBub2RlVG9VcGRhdGUgPSBpbnNlcnRDaGlsZC5nZXQoKTsgLy8gaW5zZXJ0Q2hpbGQgd2lsbCBi
ZSBjbGVhcmVkIHdoZW4gcGFzc2VkCi0gICAgaW5zZXJ0Tm9kZUF0KGluc2VydENoaWxkLCBwKTsK
LSAgICB1cGRhdGVOb2Rlc0luc2VydGVkKG5vZGVUb1VwZGF0ZSk7Ci19Ci0KLXZvaWQgUmVwbGFj
ZVNlbGVjdGlvbkNvbW1hbmQ6Omluc2VydE5vZGVCZWZvcmVBbmRVcGRhdGVOb2Rlc0luc2VydGVk
KFBhc3NSZWZQdHI8Tm9kZT4gaW5zZXJ0Q2hpbGQsIE5vZGUqIHJlZkNoaWxkKQotewotICAgIE5v
ZGUqIG5vZGVUb1VwZGF0ZSA9IGluc2VydENoaWxkLmdldCgpOyAvLyBpbnNlcnRDaGlsZCB3aWxs
IGJlIGNsZWFyZWQgd2hlbiBwYXNzZWQKLSAgICBpbnNlcnROb2RlQmVmb3JlKGluc2VydENoaWxk
LCByZWZDaGlsZCk7Ci0gICAgdXBkYXRlTm9kZXNJbnNlcnRlZChub2RlVG9VcGRhdGUpOwotfQot
CiAvLyBJZiB0aGUgdXNlciBpcyBpbnNlcnRpbmcgYSBsaXN0IGludG8gYW4gZXhpc3RpbmcgbGlz
dCwgaW5zdGVhZCBvZiBuZXN0aW5nIHRoZSBsaXN0LAogLy8gd2UgcHV0IHRoZSBsaXN0IGl0ZW1z
IGludG8gdGhlIGV4aXN0aW5nIGxpc3QuCi1Ob2RlKiBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6
aW5zZXJ0QXNMaXN0SXRlbXMoUGFzc1JlZlB0cjxOb2RlPiBwcnBMaXN0RWxlbWVudCwgTm9kZSog
aW5zZXJ0aW9uQmxvY2ssIGNvbnN0IFBvc2l0aW9uJiBpbnNlcnRQb3MpCitOb2RlKiBSZXBsYWNl
U2VsZWN0aW9uQ29tbWFuZDo6aW5zZXJ0QXNMaXN0SXRlbXMoUGFzc1JlZlB0cjxOb2RlPiBwcnBM
aXN0RWxlbWVudCwgTm9kZSogaW5zZXJ0aW9uQmxvY2ssIGNvbnN0IFBvc2l0aW9uJiBpbnNlcnRQ
b3MsIEluc2VydGVkTm9kZXMmIGluc2VydGVkTm9kZXMpCiB7CiAgICAgUmVmUHRyPE5vZGU+IGxp
c3RFbGVtZW50ID0gcHJwTGlzdEVsZW1lbnQ7CiAKQEAgLTEyNzUsMTAgKzEyNjQsMTIgQEAKICAg
ICAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgICAgIHRvQ29udGFpbmVyTm9kZShsaXN0
RWxlbWVudC5nZXQoKSktPnJlbW92ZUNoaWxkKGxpc3RJdGVtLmdldCgpLCBlYyk7CiAgICAgICAg
IEFTU0VSVCghZWMpOwotICAgICAgICBpZiAoaXNTdGFydCB8fCBpc01pZGRsZSkKKyAgICAgICAg
aWYgKGlzU3RhcnQgfHwgaXNNaWRkbGUpIHsKICAgICAgICAgICAgIGluc2VydE5vZGVCZWZvcmUo
bGlzdEl0ZW0sIGxhc3ROb2RlKTsKLSAgICAgICAgZWxzZSBpZiAoaXNFbmQpIHsKKyAgICAgICAg
ICAgIGluc2VydGVkTm9kZXMucmVzcG9uZFRvTm9kZUluc2VydGlvbihsaXN0SXRlbS5nZXQoKSk7
CisgICAgICAgIH0gZWxzZSBpZiAoaXNFbmQpIHsKICAgICAgICAgICAgIGluc2VydE5vZGVBZnRl
cihsaXN0SXRlbSwgbGFzdE5vZGUpOworICAgICAgICAgICAgaW5zZXJ0ZWROb2Rlcy5yZXNwb25k
VG9Ob2RlSW5zZXJ0aW9uKGxpc3RJdGVtLmdldCgpKTsKICAgICAgICAgICAgIGxhc3ROb2RlID0g
bGlzdEl0ZW0uZ2V0KCk7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CkBAIC0xMjg3LDcgKzEyNzgsNiBAQAogICAgICAgICBsYXN0Tm9kZSA9IGxhc3RO
b2RlLT5wcmV2aW91c1NpYmxpbmcoKTsKICAgICBpZiAoaXNNaWRkbGUpCiAgICAgICAgIGluc2Vy
dE5vZGVBZnRlcihjcmVhdGVMaXN0SXRlbUVsZW1lbnQoZG9jdW1lbnQoKSksIGxhc3ROb2RlKTsK
LSAgICB1cGRhdGVOb2Rlc0luc2VydGVkKGxhc3ROb2RlKTsKICAgICByZXR1cm4gbGFzdE5vZGU7
CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1h
bmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rp
b25Db21tYW5kLmgJKHJldmlzaW9uIDk1MDMxKQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9S
ZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5oCSh3b3JraW5nIGNvcHkpCkBAIC02MCwxMSArNjAsMzUg
QEAKICAgICB2aXJ0dWFsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdGlvbigpIGNvbnN0OwogCiAgICAg
dm9pZCBjb21wbGV0ZUhUTUxSZXBsYWNlbWVudChjb25zdCBQb3NpdGlvbiYgbGFzdFBvc2l0aW9u
VG9TZWxlY3QpOworICAgIAorICAgIGNsYXNzIEluc2VydGVkTm9kZXMgeworICAgIHB1YmxpYzoK
KyAgICAgICAgdm9pZCByZXNwb25kVG9Ob2RlSW5zZXJ0aW9uKE5vZGUqIG5vZGUpCisgICAgICAg
IHsKKyAgICAgICAgICAgIGlmICghbm9kZSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIGlmICghbV9maXJzdE5vZGVJbnNlcnRlZCkKKyAgICAgICAg
ICAgICAgICBtX2ZpcnN0Tm9kZUluc2VydGVkID0gbm9kZTsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgbV9sYXN0Tm9kZUluc2VydGVkID0gbm9kZTsKKyAgICAgICAgfQorICAgICAgICB2b2lk
IHdpbGxSZW1vdmVOb2RlKE5vZGUqIG5vZGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICht
X2ZpcnN0Tm9kZUluc2VydGVkID09IG5vZGUpCisgICAgICAgICAgICAgICAgbV9maXJzdE5vZGVJ
bnNlcnRlZCA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUoKTsKKyAgICAgICAgICAgIGlmIChtX2xh
c3ROb2RlSW5zZXJ0ZWQgPT0gbm9kZSkKKyAgICAgICAgICAgICAgICBtX2xhc3ROb2RlSW5zZXJ0
ZWQgPSBub2RlLT5sYXN0Q2hpbGQoKSA/IG5vZGUtPmxhc3RDaGlsZCgpIDogbm9kZS0+dHJhdmVy
c2VOZXh0U2libGluZygpOworICAgICAgICB9CisgICAgICAgIE5vZGUqIGZpcnN0Tm9kZUluc2Vy
dGVkKCkgeyByZXR1cm4gbV9maXJzdE5vZGVJbnNlcnRlZC5nZXQoKTsgfQorICAgICAgICBOb2Rl
KiBsYXN0TGVhZkluc2VydGVkKCkgeyByZXR1cm4gbV9sYXN0Tm9kZUluc2VydGVkLT5sYXN0RGVz
Y2VuZGFudCgpOyB9CisgICAgICAgIE5vZGUqIHBhc3RMYXN0TGVhZigpIHsgcmV0dXJuIG1fZmly
c3ROb2RlSW5zZXJ0ZWQgPyBsYXN0TGVhZkluc2VydGVkKCktPnRyYXZlcnNlTmV4dE5vZGUoKSA6
IDA7IH0KKyAgICBwcml2YXRlOgorICAgICAgICBSZWZQdHI8Tm9kZT4gbV9maXJzdE5vZGVJbnNl
cnRlZDsKKyAgICAgICAgUmVmUHRyPE5vZGU+IG1fbGFzdE5vZGVJbnNlcnRlZDsKKyAgICB9Owog
Ci0gICAgdm9pZCBpbnNlcnROb2RlQWZ0ZXJBbmRVcGRhdGVOb2Rlc0luc2VydGVkKFBhc3NSZWZQ
dHI8Tm9kZT4gaW5zZXJ0Q2hpbGQsIE5vZGUqIHJlZkNoaWxkKTsKLSAgICB2b2lkIGluc2VydE5v
ZGVBdEFuZFVwZGF0ZU5vZGVzSW5zZXJ0ZWQoUGFzc1JlZlB0cjxOb2RlPiwgY29uc3QgUG9zaXRp
b24mKTsKLSAgICB2b2lkIGluc2VydE5vZGVCZWZvcmVBbmRVcGRhdGVOb2Rlc0luc2VydGVkKFBh
c3NSZWZQdHI8Tm9kZT4gaW5zZXJ0Q2hpbGQsIE5vZGUqIHJlZkNoaWxkKTsKLSAgICBOb2RlKiBp
bnNlcnRBc0xpc3RJdGVtcyhQYXNzUmVmUHRyPE5vZGU+LCBOb2RlKiBpbnNlcnRpb25Ob2RlLCBj
b25zdCBQb3NpdGlvbiYpOworICAgIE5vZGUqIGluc2VydEFzTGlzdEl0ZW1zKFBhc3NSZWZQdHI8
Tm9kZT4sIE5vZGUqIGluc2VydGlvbk5vZGUsIGNvbnN0IFBvc2l0aW9uJiwgSW5zZXJ0ZWROb2Rl
cyYpOwogCiAgICAgdm9pZCB1cGRhdGVOb2Rlc0luc2VydGVkKE5vZGUqKTsKICAgICBib29sIHNo
b3VsZFJlbW92ZUVuZEJSKE5vZGUqLCBjb25zdCBWaXNpYmxlUG9zaXRpb24mKTsKQEAgLTc3LDcg
KzEwMSw3IEBACiAgICAgCiAgICAgdm9pZCByZW1vdmVVbnJlbmRlcmVkVGV4dE5vZGVzQXRFbmRz
KCk7CiAgICAgCi0gICAgdm9pZCByZW1vdmVSZWR1bmRhbnRTdHlsZXNBbmRLZWVwU3R5bGVTcGFu
SW5saW5lKCk7CisgICAgdm9pZCByZW1vdmVSZWR1bmRhbnRTdHlsZXNBbmRLZWVwU3R5bGVTcGFu
SW5saW5lKEluc2VydGVkTm9kZXMmKTsKICAgICB2b2lkIGhhbmRsZVN0eWxlU3BhbnMoKTsKICAg
ICB2b2lkIGNvcHlTdHlsZVRvQ2hpbGRyZW4oTm9kZSogcGFyZW50Tm9kZSwgY29uc3QgQ1NTTXV0
YWJsZVN0eWxlRGVjbGFyYXRpb24qIHBhcmVudFN0eWxlKTsKICAgICB2b2lkIGhhbmRsZVBhc3Rl
QXNRdW90YXRpb25Ob2RlKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0
aW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5n
LmNwcAkocmV2aXNpb24gOTUwMzEpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0
aW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTIzLDYgKzkyMywzNiBAQAogICAgIHJldHVybiBu
dW07CiB9CiAKK3ZvaWQgdXBkYXRlUG9zaXRpb25Gb3JOb2RlUmVtb3ZhbChQb3NpdGlvbiYgcG9z
aXRpb24sIE5vZGUqIG5vZGUpCit7CisgICAgaWYgKHBvc2l0aW9uLmlzTnVsbCgpKQorICAgICAg
ICByZXR1cm47CisgICAgc3dpdGNoIChwb3NpdGlvbi5hbmNob3JUeXBlKCkpIHsKKyAgICBjYXNl
IFBvc2l0aW9uOjpQb3NpdGlvbklzQmVmb3JlQ2hpbGRyZW46CisgICAgICAgIGlmIChwb3NpdGlv
bi5jb250YWluZXJOb2RlKCkgPT0gbm9kZSkKKyAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRp
b25JblBhcmVudEJlZm9yZU5vZGUobm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUG9z
aXRpb246OlBvc2l0aW9uSXNBZnRlckNoaWxkcmVuOgorICAgICAgICBpZiAocG9zaXRpb24uY29u
dGFpbmVyTm9kZSgpID09IG5vZGUpCisgICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uSW5Q
YXJlbnRBZnRlck5vZGUobm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUG9zaXRpb246
OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvcjoKKyAgICAgICAgaWYgKHBvc2l0aW9uLmNvbnRhaW5l
ck5vZGUoKSA9PSBub2RlLT5wYXJlbnROb2RlKCkgJiYgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHBv
c2l0aW9uLm9mZnNldEluQ29udGFpbmVyTm9kZSgpKSA+IG5vZGUtPm5vZGVJbmRleCgpKQorICAg
ICAgICAgICAgcG9zaXRpb24ubW92ZVRvT2Zmc2V0KHBvc2l0aW9uLm9mZnNldEluQ29udGFpbmVy
Tm9kZSgpIC0gMSk7CisgICAgICAgIGVsc2UgaWYgKG5vZGUtPmNvbnRhaW5zKHBvc2l0aW9uLmNv
bnRhaW5lck5vZGUoKSkpCisgICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uSW5QYXJlbnRC
ZWZvcmVOb2RlKG5vZGUpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBvc2l0aW9uOjpQb3Np
dGlvbklzQWZ0ZXJBbmNob3I6CisgICAgICAgIGlmIChub2RlLT5jb250YWlucyhwb3NpdGlvbi5h
bmNob3JOb2RlKCkpKQorICAgICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbkluUGFyZW50QWZ0
ZXJOb2RlKG5vZGUpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBvc2l0aW9uOjpQb3NpdGlv
bklzQmVmb3JlQW5jaG9yOgorICAgICAgICBpZiAobm9kZS0+Y29udGFpbnMocG9zaXRpb24uYW5j
aG9yTm9kZSgpKSkKKyAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25JblBhcmVudEJlZm9y
ZU5vZGUobm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKwogYm9vbCBpc01haWxCbG9j
a3F1b3RlKGNvbnN0IE5vZGUgKm5vZGUpCiB7CiAgICAgaWYgKCFub2RlIHx8ICFub2RlLT5oYXNU
YWdOYW1lKGJsb2NrcXVvdGVUYWcpKQpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9odG1s
ZWRpdGluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaHRtbGVkaXRp
bmcuaAkocmV2aXNpb24gOTUwMzEpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0
aW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1OSw2ICsxNTksNyBAQAogLy8gbWlzY2VsbGFuZW91
cyBmdW5jdGlvbnMgb24gUG9zaXRpb24KIAogdW5zaWduZWQgbnVtRW5jbG9zaW5nTWFpbEJsb2Nr
cXVvdGVzKGNvbnN0IFBvc2l0aW9uJik7Cit2b2lkIHVwZGF0ZVBvc2l0aW9uRm9yTm9kZVJlbW92
YWwoUG9zaXRpb24mLCBOb2RlKik7CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vIFZpc2libGVQ
b3NpdGlvbgpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21t
YW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZVNlbGVj
dGlvbkNvbW1hbmQuY3BwCShyZXZpc2lvbiA5NTAzMSkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxNCwzNiAr
MzE0LDYgQEAKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXN0YXRpYyB2b2lkIHVwZGF0ZVBvc2l0
aW9uRm9yTm9kZVJlbW92YWwoTm9kZSogbm9kZSwgUG9zaXRpb24mIHBvc2l0aW9uKQotewotICAg
IGlmIChwb3NpdGlvbi5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIHN3aXRjaCAocG9z
aXRpb24uYW5jaG9yVHlwZSgpKSB7Ci0gICAgY2FzZSBQb3NpdGlvbjo6UG9zaXRpb25Jc0JlZm9y
ZUNoaWxkcmVuOgotICAgICAgICBpZiAocG9zaXRpb24uY29udGFpbmVyTm9kZSgpID09IG5vZGUp
Ci0gICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uSW5QYXJlbnRCZWZvcmVOb2RlKG5vZGUp
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFBvc2l0aW9uOjpQb3NpdGlvbklzQWZ0ZXJDaGls
ZHJlbjoKLSAgICAgICAgaWYgKHBvc2l0aW9uLmNvbnRhaW5lck5vZGUoKSA9PSBub2RlKQotICAg
ICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbkluUGFyZW50QWZ0ZXJOb2RlKG5vZGUpOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3I6
Ci0gICAgICAgIGlmIChwb3NpdGlvbi5jb250YWluZXJOb2RlKCkgPT0gbm9kZS0+cGFyZW50Tm9k
ZSgpICYmIHN0YXRpY19jYXN0PHVuc2lnbmVkPihwb3NpdGlvbi5vZmZzZXRJbkNvbnRhaW5lck5v
ZGUoKSkgPiBub2RlLT5ub2RlSW5kZXgoKSkKLSAgICAgICAgICAgIHBvc2l0aW9uLm1vdmVUb09m
ZnNldChwb3NpdGlvbi5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSAtIDEpOwotICAgICAgICBlbHNl
IGlmIChub2RlLT5jb250YWlucyhwb3NpdGlvbi5jb250YWluZXJOb2RlKCkpKQotICAgICAgICAg
ICAgcG9zaXRpb24gPSBwb3NpdGlvbkluUGFyZW50QmVmb3JlTm9kZShub2RlKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBQb3NpdGlvbjo6UG9zaXRpb25Jc0FmdGVyQW5jaG9yOgotICAgICAg
ICBpZiAobm9kZS0+Y29udGFpbnMocG9zaXRpb24uYW5jaG9yTm9kZSgpKSkKLSAgICAgICAgICAg
IHBvc2l0aW9uID0gcG9zaXRpb25JblBhcmVudEFmdGVyTm9kZShub2RlKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBQb3NpdGlvbjo6UG9zaXRpb25Jc0JlZm9yZUFuY2hvcjoKLSAgICAgICAg
aWYgKG5vZGUtPmNvbnRhaW5zKHBvc2l0aW9uLmFuY2hvck5vZGUoKSkpCi0gICAgICAgICAgICBw
b3NpdGlvbiA9IHBvc2l0aW9uSW5QYXJlbnRCZWZvcmVOb2RlKG5vZGUpOwotICAgICAgICBicmVh
azsKLSAgICB9Ci19Ci0KIHN0YXRpYyBQb3NpdGlvbiBmaXJzdEVkaXRhYmxlUG9zaXRpb25Jbk5v
ZGUoTm9kZSogbm9kZSkKIHsKICAgICBBU1NFUlQobm9kZSk7CkBAIC00MDcsOSArMzc3LDkgQEAK
ICAgICAgICAgbV9uZWVkUGxhY2Vob2xkZXIgPSB0cnVlOwogICAgIAogICAgIC8vIEZJWE1FOiBV
cGRhdGUgdGhlIGVuZHBvaW50cyBvZiB0aGUgcmFuZ2UgYmVpbmcgZGVsZXRlZC4KLSAgICB1cGRh
dGVQb3NpdGlvbkZvck5vZGVSZW1vdmFsKG5vZGUuZ2V0KCksIG1fZW5kaW5nUG9zaXRpb24pOwot
ICAgIHVwZGF0ZVBvc2l0aW9uRm9yTm9kZVJlbW92YWwobm9kZS5nZXQoKSwgbV9sZWFkaW5nV2hp
dGVzcGFjZSk7Ci0gICAgdXBkYXRlUG9zaXRpb25Gb3JOb2RlUmVtb3ZhbChub2RlLmdldCgpLCBt
X3RyYWlsaW5nV2hpdGVzcGFjZSk7CisgICAgdXBkYXRlUG9zaXRpb25Gb3JOb2RlUmVtb3ZhbCht
X2VuZGluZ1Bvc2l0aW9uLCBub2RlLmdldCgpKTsKKyAgICB1cGRhdGVQb3NpdGlvbkZvck5vZGVS
ZW1vdmFsKG1fbGVhZGluZ1doaXRlc3BhY2UsIG5vZGUuZ2V0KCkpOworICAgIHVwZGF0ZVBvc2l0
aW9uRm9yTm9kZVJlbW92YWwobV90cmFpbGluZ1doaXRlc3BhY2UsIG5vZGUuZ2V0KCkpOwogICAg
IAogICAgIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpyZW1vdmVOb2RlKG5vZGUpOwogfQpAQCAtNTA2
LDcgKzQ3Niw3IEBACiAgICAgICAgICAgICAgICAgUmVmUHRyPE5vZGU+IG5leHROb2RlID0gbm9k
ZS0+dHJhdmVyc2VOZXh0U2libGluZygpOwogICAgICAgICAgICAgICAgIC8vIGlmIHdlIGp1c3Qg
cmVtb3ZlZCBhIG5vZGUgZnJvbSB0aGUgZW5kIGNvbnRhaW5lciwgdXBkYXRlIGVuZCBwb3NpdGlv
biBzbyB0aGUKICAgICAgICAgICAgICAgICAvLyBjaGVjayBhYm92ZSB3aWxsIHdvcmsKLSAgICAg
ICAgICAgICAgICB1cGRhdGVQb3NpdGlvbkZvck5vZGVSZW1vdmFsKG5vZGUuZ2V0KCksIG1fZG93
bnN0cmVhbUVuZCk7CisgICAgICAgICAgICAgICAgdXBkYXRlUG9zaXRpb25Gb3JOb2RlUmVtb3Zh
bChtX2Rvd25zdHJlYW1FbmQsIG5vZGUuZ2V0KCkpOwogICAgICAgICAgICAgICAgIHJlbW92ZU5v
ZGUobm9kZS5nZXQoKSk7CiAgICAgICAgICAgICAgICAgbm9kZSA9IG5leHROb2RlLmdldCgpOwog
ICAgICAgICAgICAgfSBlbHNlIHsK
</data>
<flag name="review"
          id="105857"
          type_id="1"
          status="+"
          setter="tkent"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>108809</attachid>
            <date>2011-09-27 01:40:23 -0700</date>
            <delta_ts>2011-09-27 01:59:15 -0700</delta_ts>
            <desc>patch for landing</desc>
            <filename>fix68875c</filename>
            <type>text/plain</type>
            <size>16855</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk2MDc3KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzAgQEAKKzIwMTEtMDktMjcgIFJ5b3N1a2Ug
Tml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAgICAgICAgRW5jYXBzdWxhdGUgbV9maXJzdE5v
ZGVJbnNlcnRlZCBhbmQgbV9sYXN0TGVhZkluc2VydGVkIGluIG5vZGUgaW5zZXJ0aW9uIGxvZ2lj
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02ODg3NQor
CisgICAgICAgIFJldmlld2VkIGJ5IEtlbnQgVGFtdXJhLgorCisgICAgICAgIEFkZGVkIEluc2Vy
dGVkTm9kZSBjbGFzcyBpbnNpZGUgUmVwbGFjZVNlbGVjdGlvbiB0byBlbmNhcHN1bGF0ZSBtX2Zp
cnN0Tm9kZUluc2VydGVkIGFuZCBtX2xhc3RMZWFmSW5zZXJ0ZWQuCisgICAgICAgIERlcGxveWVk
IGl0IGluIHJlbW92ZVJlZHVuZGFudFN0eWxlc0FuZEtlZXBTdHlsZVNwYW5JbmxpbmUsIGRvQXBw
bHksIGFuZCBpbnNlcnRBc0xpc3RJdGVtcyBvZiBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC4KKwor
ICAgICAgICAqIGVkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpyZW1vdmVOb2RlKToKKyAgICAgICAgKFdl
YkNvcmU6OkRlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmhhbmRsZUdlbmVyYWxEZWxldGUpOgorICAg
ICAgICAqIGVkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OnJlbW92ZVJlZHVuZGFudFN0eWxlc0FuZEtl
ZXBTdHlsZVNwYW5JbmxpbmUpOgorICAgICAgICAoV2ViQ29yZTo6UmVwbGFjZVNlbGVjdGlvbkNv
bW1hbmQ6OmRvQXBwbHkpOgorICAgICAgICAoV2ViQ29yZTo6UmVwbGFjZVNlbGVjdGlvbkNvbW1h
bmQ6Omluc2VydEFzTGlzdEl0ZW1zKToKKyAgICAgICAgKiBlZGl0aW5nL1JlcGxhY2VTZWxlY3Rp
b25Db21tYW5kLmg6CisgICAgICAgIChXZWJDb3JlOjpSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6
SW5zZXJ0ZWROb2Rlczo6cmVzcG9uZFRvTm9kZUluc2VydGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6SW5zZXJ0ZWROb2Rlczo6d2lsbFJlbW92ZU5vZGUp
OgorICAgICAgICAoV2ViQ29yZTo6UmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6Okluc2VydGVkTm9k
ZXM6OmZpcnN0Tm9kZUluc2VydGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlcGxhY2VTZWxlY3Rp
b25Db21tYW5kOjpJbnNlcnRlZE5vZGVzOjpsYXN0TGVhZkluc2VydGVkKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpJbnNlcnRlZE5vZGVzOjpwYXN0TGFzdExl
YWYpOgorICAgICAgICAqIGVkaXRpbmcvaHRtbGVkaXRpbmcuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6dXBkYXRlUG9zaXRpb25Gb3JOb2RlUmVtb3ZhbCk6IE1vdmVkIGZyb20gRGVsZXRlU2VsZWN0
aW9uQ29tbWFuZC5jcHAuCisgICAgICAgICogZWRpdGluZy9odG1sZWRpdGluZy5oOgorCiAyMDEx
LTA5LTI2ICBLZW50YXJvIEhhcmEgIDxoYXJha2VuQGNocm9taXVtLm9yZz4KIAogICAgICAgICBJ
bXBsZW1lbnQgUG9wU3RhdGVFdmVudC5zdGF0ZSB3aXRoIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSBh
bmQgU2NyaXB0VmFsdWUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVj
dGlvbkNvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVw
bGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwCShyZXZpc2lvbiA5NTAzMSkKKysrIFNvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zNDcsNiArMzQ3LDI1IEBACiAgICAgfQogfQogCitpbmxpbmUgdm9pZCBSZXBsYWNlU2VsZWN0
aW9uQ29tbWFuZDo6SW5zZXJ0ZWROb2Rlczo6cmVzcG9uZFRvTm9kZUluc2VydGlvbihOb2RlKiBu
b2RlKQoreworICAgIGlmICghbm9kZSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGlmICgh
bV9maXJzdE5vZGVJbnNlcnRlZCkKKyAgICAgICAgbV9maXJzdE5vZGVJbnNlcnRlZCA9IG5vZGU7
CisgICAgCisgICAgbV9sYXN0Tm9kZUluc2VydGVkID0gbm9kZTsKK30KKworaW5saW5lIHZvaWQg
UmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6Okluc2VydGVkTm9kZXM6OndpbGxSZW1vdmVOb2RlKE5v
ZGUqIG5vZGUpCit7CisgICAgaWYgKG1fZmlyc3ROb2RlSW5zZXJ0ZWQgPT0gbm9kZSkKKyAgICAg
ICAgbV9maXJzdE5vZGVJbnNlcnRlZCA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUoKTsKKyAgICBp
ZiAobV9sYXN0Tm9kZUluc2VydGVkID09IG5vZGUpCisgICAgICAgIG1fbGFzdE5vZGVJbnNlcnRl
ZCA9IG5vZGUtPmxhc3RDaGlsZCgpID8gbm9kZS0+bGFzdENoaWxkKCkgOiBub2RlLT50cmF2ZXJz
ZU5leHRTaWJsaW5nKCk7Cit9CisKIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpSZXBsYWNlU2Vs
ZWN0aW9uQ29tbWFuZChEb2N1bWVudCogZG9jdW1lbnQsIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFn
bWVudD4gZnJhZ21lbnQsIENvbW1hbmRPcHRpb25zIG9wdGlvbnMsIEVkaXRBY3Rpb24gZWRpdEFj
dGlvbikKICAgICA6IENvbXBvc2l0ZUVkaXRDb21tYW5kKGRvY3VtZW50KQogICAgICwgbV9zZWxl
Y3RSZXBsYWNlbWVudChvcHRpb25zICYgU2VsZWN0UmVwbGFjZW1lbnQpCkBAIC00NzYsMTEgKzQ5
NSwxMSBAQAogCiAvLyBTdHlsZSBydWxlcyB0aGF0IG1hdGNoIGp1c3QgaW5zZXJ0ZWQgZWxlbWVu
dHMgY291bGQgY2hhbmdlIHRoZWlyIGFwcGVhcmFuY2UsIGxpa2UKIC8vIGEgZGl2IGluc2VydGVk
IGludG8gYSBkb2N1bWVudCB3aXRoIGRpdiB7IGRpc3BsYXk6aW5saW5lOyB9Lgotdm9pZCBSZXBs
YWNlU2VsZWN0aW9uQ29tbWFuZDo6cmVtb3ZlUmVkdW5kYW50U3R5bGVzQW5kS2VlcFN0eWxlU3Bh
bklubGluZSgpCit2b2lkIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpyZW1vdmVSZWR1bmRhbnRT
dHlsZXNBbmRLZWVwU3R5bGVTcGFuSW5saW5lKEluc2VydGVkTm9kZXMmIGluc2VydGVkTm9kZXMp
CiB7Ci0gICAgUmVmUHRyPE5vZGU+IHBhc3RFbmROb2RlID0gbV9sYXN0TGVhZkluc2VydGVkID8g
bV9sYXN0TGVhZkluc2VydGVkLT50cmF2ZXJzZU5leHROb2RlKCkgOiAwOworICAgIFJlZlB0cjxO
b2RlPiBwYXN0RW5kTm9kZSA9IGluc2VydGVkTm9kZXMucGFzdExhc3RMZWFmKCk7CiAgICAgUmVm
UHRyPE5vZGU+IG5leHQ7Ci0gICAgZm9yIChSZWZQdHI8Tm9kZT4gbm9kZSA9IG1fZmlyc3ROb2Rl
SW5zZXJ0ZWQuZ2V0KCk7IG5vZGUgJiYgbm9kZSAhPSBwYXN0RW5kTm9kZTsgbm9kZSA9IG5leHQp
IHsKKyAgICBmb3IgKFJlZlB0cjxOb2RlPiBub2RlID0gaW5zZXJ0ZWROb2Rlcy5maXJzdE5vZGVJ
bnNlcnRlZCgpOyBub2RlICYmIG5vZGUgIT0gcGFzdEVuZE5vZGU7IG5vZGUgPSBuZXh0KSB7CiAg
ICAgICAgIC8vIEZJWE1FOiA8cmRhcjovL3Byb2JsZW0vNTM3MTUzNj4gU3R5bGUgcnVsZXMgdGhh
dCBtYXRjaCBwYXN0ZWQgY29udGVudCBjYW4gY2hhbmdlIGl0J3MgYXBwZWFyYW5jZQogCiAgICAg
ICAgIG5leHQgPSBub2RlLT50cmF2ZXJzZU5leHROb2RlKCk7CkBAIC01MDQsOSArNTIzLDEwIEBA
CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoIWlubGluZVN0eWxlIHx8IG5ld0lubGluZVN0eWxl
LT5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIGlmIChpc1N0eWxlU3Bhbk9yU3BhbldpdGhPbmx5
U3R5bGVBdHRyaWJ1dGUoZWxlbWVudCkpCisgICAgICAgICAgICBpZiAoaXNTdHlsZVNwYW5PclNw
YW5XaXRoT25seVN0eWxlQXR0cmlidXRlKGVsZW1lbnQpKSB7CisgICAgICAgICAgICAgICAgaW5z
ZXJ0ZWROb2Rlcy53aWxsUmVtb3ZlTm9kZShlbGVtZW50KTsKICAgICAgICAgICAgICAgICByZW1v
dmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuKGVsZW1lbnQpOwotICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgcmVtb3ZlTm9kZUF0dHJpYnV0ZShlbGVt
ZW50LCBzdHlsZUF0dHIpOwogICAgICAgICB9IGVsc2UgaWYgKG5ld0lubGluZVN0eWxlLT5zdHls
ZSgpLT5sZW5ndGgoKSAhPSBpbmxpbmVTdHlsZS0+bGVuZ3RoKCkpCiAgICAgICAgICAgICBzZXRO
b2RlQXR0cmlidXRlKGVsZW1lbnQsIHN0eWxlQXR0ciwgbmV3SW5saW5lU3R5bGUtPnN0eWxlKCkt
PmNzc1RleHQoKSk7CkBAIC01MTUsNiArNTM1LDcgQEAKICAgICAgICAgLy8gS2VlcCB0aGlzIGNv
ZGUgYXJvdW5kIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5CiAgICAgICAgIGlmIChpc0xlZ2Fj
eUFwcGxlU3R5bGVTcGFuKGVsZW1lbnQpKSB7CiAgICAgICAgICAgICBpZiAoIWVsZW1lbnQtPmZp
cnN0Q2hpbGQoKSkgeworICAgICAgICAgICAgICAgIGluc2VydGVkTm9kZXMud2lsbFJlbW92ZU5v
ZGUoZWxlbWVudCk7CiAgICAgICAgICAgICAgICAgcmVtb3ZlTm9kZVByZXNlcnZpbmdDaGlsZHJl
bihlbGVtZW50KTsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KQEAg
LTU1Miw3ICs1NzMsNyBAQAogICAgIAogICAgIC8vIFdlIGRvbid0IGhhdmUgdG8gbWFrZSBzdXJl
IHRoYXQgbV9maXJzdE5vZGVJbnNlcnRlZCBpc24ndCBpbnNpZGUgYSBzZWxlY3Qgb3Igc2NyaXB0
IGVsZW1lbnQsIGJlY2F1c2UKICAgICAvLyBpdCBpcyBhIHRvcCBsZXZlbCBub2RlIGluIHRoZSBm
cmFnbWVudCBhbmQgdGhlIHVzZXIgY2FuJ3QgaW5zZXJ0IGludG8gdGhvc2UgZWxlbWVudHMuCi0g
ICAgaWYgKCFtX2ZpcnN0Tm9kZUluc2VydGVkLT5yZW5kZXJlcigpICYmIAorICAgIGlmICghbV9m
aXJzdE5vZGVJbnNlcnRlZC0+cmVuZGVyZXIoKSAmJgogICAgICAgICBtX2ZpcnN0Tm9kZUluc2Vy
dGVkLT5pc1RleHROb2RlKCkpIHsKICAgICAgICAgaWYgKG1fZmlyc3ROb2RlSW5zZXJ0ZWQgPT0g
bV9sYXN0TGVhZkluc2VydGVkKSB7CiAgICAgICAgICAgICByZW1vdmVOb2RlKG1fZmlyc3ROb2Rl
SW5zZXJ0ZWQuZ2V0KCkpOwpAQCAtODAzLDcgKzgyNCw3IEBACiAKICAgICByZXR1cm4gRWRpdGlu
Z1N0eWxlOjplbGVtZW50SXNTdHlsZWRTcGFuT3JIVE1MRXF1aXZhbGVudChlbGVtZW50KTsKIH0K
LSAgICAKKwogdm9pZCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6ZG9BcHBseSgpCiB7CiAgICAg
VmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBlbmRpbmdTZWxlY3Rpb24oKTsKQEAgLTk4Niw3
ICsxMDA3LDggQEAKICAgICAvLyA2KSBTZWxlY3QgdGhlIHJlcGxhY2VtZW50IGlmIHJlcXVlc3Rl
ZCwgYW5kIG1hdGNoIHN0eWxlIGlmIHJlcXVlc3RlZC4KICAgICAKICAgICBWaXNpYmxlUG9zaXRp
b24gc3RhcnRPZkluc2VydGVkQ29udGVudCwgZW5kT2ZJbnNlcnRlZENvbnRlbnQ7Ci0gICAgCisK
KyAgICBJbnNlcnRlZE5vZGVzIGluc2VydGVkTm9kZXM7CiAgICAgUmVmUHRyPE5vZGU+IHJlZk5v
ZGUgPSBmcmFnbWVudC5maXJzdENoaWxkKCk7CiAgICAgUmVmUHRyPE5vZGU+IG5vZGUgPSByZWZO
b2RlLT5uZXh0U2libGluZygpOwogICAgIApAQCAtOTk1LDkgKzEwMTcsMTEgQEAKICAgICBOb2Rl
KiBibG9ja1N0YXJ0ID0gZW5jbG9zaW5nQmxvY2soaW5zZXJ0aW9uUG9zLmRlcHJlY2F0ZWROb2Rl
KCkpOwogICAgIGlmICgoaXNMaXN0RWxlbWVudChyZWZOb2RlLmdldCgpKSB8fCAoaXNMZWdhY3lB
cHBsZVN0eWxlU3BhbihyZWZOb2RlLmdldCgpKSAmJiBpc0xpc3RFbGVtZW50KHJlZk5vZGUtPmZp
cnN0Q2hpbGQoKSkpKQogICAgICAgICAmJiBibG9ja1N0YXJ0ICYmIGJsb2NrU3RhcnQtPnJlbmRl
cmVyKCktPmlzTGlzdEl0ZW0oKSkKLSAgICAgICAgcmVmTm9kZSA9IGluc2VydEFzTGlzdEl0ZW1z
KHJlZk5vZGUsIGJsb2NrU3RhcnQsIGluc2VydGlvblBvcyk7Ci0gICAgZWxzZQotICAgICAgICBp
bnNlcnROb2RlQXRBbmRVcGRhdGVOb2Rlc0luc2VydGVkKHJlZk5vZGUsIGluc2VydGlvblBvcyk7
CisgICAgICAgIHJlZk5vZGUgPSBpbnNlcnRBc0xpc3RJdGVtcyhyZWZOb2RlLCBibG9ja1N0YXJ0
LCBpbnNlcnRpb25Qb3MsIGluc2VydGVkTm9kZXMpOworICAgIGVsc2UgeworICAgICAgICBpbnNl
cnROb2RlQXQocmVmTm9kZSwgaW5zZXJ0aW9uUG9zKTsKKyAgICAgICAgaW5zZXJ0ZWROb2Rlcy5y
ZXNwb25kVG9Ob2RlSW5zZXJ0aW9uKHJlZk5vZGUuZ2V0KCkpOworICAgIH0KIAogICAgIC8vIE11
dGF0aW9uIGV2ZW50cyAoYnVnIDIyNjM0KSBtYXkgaGF2ZSBhbHJlYWR5IHJlbW92ZWQgdGhlIGlu
c2VydGVkIGNvbnRlbnQKICAgICBpZiAoIXJlZk5vZGUtPmluRG9jdW1lbnQoKSkKQEAgLTEwMDgs
NyArMTAzMiw4IEBACiAgICAgd2hpbGUgKG5vZGUpIHsKICAgICAgICAgUmVmUHRyPE5vZGU+IG5l
eHQgPSBub2RlLT5uZXh0U2libGluZygpOwogICAgICAgICBmcmFnbWVudC5yZW1vdmVOb2RlKG5v
ZGUuZ2V0KCkpOwotICAgICAgICBpbnNlcnROb2RlQWZ0ZXJBbmRVcGRhdGVOb2Rlc0luc2VydGVk
KG5vZGUsIHJlZk5vZGUuZ2V0KCkpOworICAgICAgICBpbnNlcnROb2RlQWZ0ZXIobm9kZSwgcmVm
Tm9kZS5nZXQoKSk7CisgICAgICAgIGluc2VydGVkTm9kZXMucmVzcG9uZFRvTm9kZUluc2VydGlv
bihub2RlLmdldCgpKTsKIAogICAgICAgICAvLyBNdXRhdGlvbiBldmVudHMgKGJ1ZyAyMjYzNCkg
bWF5IGhhdmUgYWxyZWFkeSByZW1vdmVkIHRoZSBpbnNlcnRlZCBjb250ZW50CiAgICAgICAgIGlm
ICghbm9kZS0+aW5Eb2N1bWVudCgpKQpAQCAtMTAxOSwxMSArMTA0NCwxNCBAQAogICAgICAgICAg
ICAgcGxhaW5UZXh0RnJhZ21lbnQgPSBpc1BsYWluVGV4dE1hcmt1cChub2RlLmdldCgpKTsKICAg
ICAgICAgbm9kZSA9IG5leHQ7CiAgICAgfQotICAgIAorCisgICAgcmVtb3ZlUmVkdW5kYW50U3R5
bGVzQW5kS2VlcFN0eWxlU3BhbklubGluZShpbnNlcnRlZE5vZGVzKTsKKworICAgIG1fZmlyc3RO
b2RlSW5zZXJ0ZWQgPSBpbnNlcnRlZE5vZGVzLmZpcnN0Tm9kZUluc2VydGVkKCk7CisgICAgbV9s
YXN0TGVhZkluc2VydGVkID0gaW5zZXJ0ZWROb2Rlcy5sYXN0TGVhZkluc2VydGVkKCk7CisKICAg
ICByZW1vdmVVbnJlbmRlcmVkVGV4dE5vZGVzQXRFbmRzKCk7Ci0gICAgCi0gICAgcmVtb3ZlUmVk
dW5kYW50U3R5bGVzQW5kS2VlcFN0eWxlU3BhbklubGluZSgpOwotICAgIAorCiAgICAgaWYgKCFo
YW5kbGVkU3R5bGVTcGFucykKICAgICAgICAgaGFuZGxlU3R5bGVTcGFucygpOwogICAgIApAQCAt
MTEzNyw3ICsxMTY1LDggQEAKICAgICAgICAgICAgICAgICBpbnNlcnRUZXh0SW50b05vZGUodGV4
dCwgdGV4dC0+bGVuZ3RoKCksIGNvbGxhcHNlV2hpdGVTcGFjZSA/IG5vbkJyZWFraW5nU3BhY2VT
dHJpbmcoKSA6ICIgIik7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIFJl
ZlB0cjxOb2RlPiBub2RlID0gZG9jdW1lbnQoKS0+Y3JlYXRlRWRpdGluZ1RleHROb2RlKGNvbGxh
cHNlV2hpdGVTcGFjZSA/IG5vbkJyZWFraW5nU3BhY2VTdHJpbmcoKSA6ICIgIik7Ci0gICAgICAg
ICAgICAgICAgaW5zZXJ0Tm9kZUFmdGVyQW5kVXBkYXRlTm9kZXNJbnNlcnRlZChub2RlLCBlbmRO
b2RlKTsKKyAgICAgICAgICAgICAgICBpbnNlcnROb2RlQWZ0ZXIobm9kZSwgZW5kTm9kZSk7Cisg
ICAgICAgICAgICAgICAgdXBkYXRlTm9kZXNJbnNlcnRlZChub2RlLmdldCgpKTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgfQogICAgIApAQCAtMTIyNywzMCArMTI1Niw5IEBACiAgICAgcmV0dXJu
IG1fZWRpdEFjdGlvbjsKIH0KIAotdm9pZCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6aW5zZXJ0
Tm9kZUFmdGVyQW5kVXBkYXRlTm9kZXNJbnNlcnRlZChQYXNzUmVmUHRyPE5vZGU+IGluc2VydENo
aWxkLCBOb2RlKiByZWZDaGlsZCkKLXsKLSAgICBOb2RlKiBub2RlVG9VcGRhdGUgPSBpbnNlcnRD
aGlsZC5nZXQoKTsgLy8gaW5zZXJ0Q2hpbGQgd2lsbCBiZSBjbGVhcmVkIHdoZW4gcGFzc2VkCi0g
ICAgaW5zZXJ0Tm9kZUFmdGVyKGluc2VydENoaWxkLCByZWZDaGlsZCk7Ci0gICAgdXBkYXRlTm9k
ZXNJbnNlcnRlZChub2RlVG9VcGRhdGUpOwotfQotCi12b2lkIFJlcGxhY2VTZWxlY3Rpb25Db21t
YW5kOjppbnNlcnROb2RlQXRBbmRVcGRhdGVOb2Rlc0luc2VydGVkKFBhc3NSZWZQdHI8Tm9kZT4g
aW5zZXJ0Q2hpbGQsIGNvbnN0IFBvc2l0aW9uJiBwKQotewotICAgIE5vZGUqIG5vZGVUb1VwZGF0
ZSA9IGluc2VydENoaWxkLmdldCgpOyAvLyBpbnNlcnRDaGlsZCB3aWxsIGJlIGNsZWFyZWQgd2hl
biBwYXNzZWQKLSAgICBpbnNlcnROb2RlQXQoaW5zZXJ0Q2hpbGQsIHApOwotICAgIHVwZGF0ZU5v
ZGVzSW5zZXJ0ZWQobm9kZVRvVXBkYXRlKTsKLX0KLQotdm9pZCBSZXBsYWNlU2VsZWN0aW9uQ29t
bWFuZDo6aW5zZXJ0Tm9kZUJlZm9yZUFuZFVwZGF0ZU5vZGVzSW5zZXJ0ZWQoUGFzc1JlZlB0cjxO
b2RlPiBpbnNlcnRDaGlsZCwgTm9kZSogcmVmQ2hpbGQpCi17Ci0gICAgTm9kZSogbm9kZVRvVXBk
YXRlID0gaW5zZXJ0Q2hpbGQuZ2V0KCk7IC8vIGluc2VydENoaWxkIHdpbGwgYmUgY2xlYXJlZCB3
aGVuIHBhc3NlZAotICAgIGluc2VydE5vZGVCZWZvcmUoaW5zZXJ0Q2hpbGQsIHJlZkNoaWxkKTsK
LSAgICB1cGRhdGVOb2Rlc0luc2VydGVkKG5vZGVUb1VwZGF0ZSk7Ci19Ci0KIC8vIElmIHRoZSB1
c2VyIGlzIGluc2VydGluZyBhIGxpc3QgaW50byBhbiBleGlzdGluZyBsaXN0LCBpbnN0ZWFkIG9m
IG5lc3RpbmcgdGhlIGxpc3QsCiAvLyB3ZSBwdXQgdGhlIGxpc3QgaXRlbXMgaW50byB0aGUgZXhp
c3RpbmcgbGlzdC4KLU5vZGUqIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjppbnNlcnRBc0xpc3RJ
dGVtcyhQYXNzUmVmUHRyPE5vZGU+IHBycExpc3RFbGVtZW50LCBOb2RlKiBpbnNlcnRpb25CbG9j
aywgY29uc3QgUG9zaXRpb24mIGluc2VydFBvcykKK05vZGUqIFJlcGxhY2VTZWxlY3Rpb25Db21t
YW5kOjppbnNlcnRBc0xpc3RJdGVtcyhQYXNzUmVmUHRyPE5vZGU+IHBycExpc3RFbGVtZW50LCBO
b2RlKiBpbnNlcnRpb25CbG9jaywgY29uc3QgUG9zaXRpb24mIGluc2VydFBvcywgSW5zZXJ0ZWRO
b2RlcyYgaW5zZXJ0ZWROb2RlcykKIHsKICAgICBSZWZQdHI8Tm9kZT4gbGlzdEVsZW1lbnQgPSBw
cnBMaXN0RWxlbWVudDsKIApAQCAtMTI3NSwxMCArMTI4MywxMiBAQAogICAgICAgICBFeGNlcHRp
b25Db2RlIGVjID0gMDsKICAgICAgICAgdG9Db250YWluZXJOb2RlKGxpc3RFbGVtZW50LmdldCgp
KS0+cmVtb3ZlQ2hpbGQobGlzdEl0ZW0uZ2V0KCksIGVjKTsKICAgICAgICAgQVNTRVJUKCFlYyk7
Ci0gICAgICAgIGlmIChpc1N0YXJ0IHx8IGlzTWlkZGxlKQorICAgICAgICBpZiAoaXNTdGFydCB8
fCBpc01pZGRsZSkgewogICAgICAgICAgICAgaW5zZXJ0Tm9kZUJlZm9yZShsaXN0SXRlbSwgbGFz
dE5vZGUpOwotICAgICAgICBlbHNlIGlmIChpc0VuZCkgeworICAgICAgICAgICAgaW5zZXJ0ZWRO
b2Rlcy5yZXNwb25kVG9Ob2RlSW5zZXJ0aW9uKGxpc3RJdGVtLmdldCgpKTsKKyAgICAgICAgfSBl
bHNlIGlmIChpc0VuZCkgewogICAgICAgICAgICAgaW5zZXJ0Tm9kZUFmdGVyKGxpc3RJdGVtLCBs
YXN0Tm9kZSk7CisgICAgICAgICAgICBpbnNlcnRlZE5vZGVzLnJlc3BvbmRUb05vZGVJbnNlcnRp
b24obGlzdEl0ZW0uZ2V0KCkpOwogICAgICAgICAgICAgbGFzdE5vZGUgPSBsaXN0SXRlbS5nZXQo
KTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAg
LTEyODcsNyArMTI5Nyw2IEBACiAgICAgICAgIGxhc3ROb2RlID0gbGFzdE5vZGUtPnByZXZpb3Vz
U2libGluZygpOwogICAgIGlmIChpc01pZGRsZSkKICAgICAgICAgaW5zZXJ0Tm9kZUFmdGVyKGNy
ZWF0ZUxpc3RJdGVtRWxlbWVudChkb2N1bWVudCgpKSwgbGFzdE5vZGUpOwotICAgIHVwZGF0ZU5v
ZGVzSW5zZXJ0ZWQobGFzdE5vZGUpOwogICAgIHJldHVybiBsYXN0Tm9kZTsKIH0KIApJbmRleDog
U291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuaAko
cmV2aXNpb24gOTUwMzEpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rp
b25Db21tYW5kLmgJKHdvcmtpbmcgY29weSkKQEAgLTYwLDEyICs2MCwyMiBAQAogICAgIHZpcnR1
YWwgRWRpdEFjdGlvbiBlZGl0aW5nQWN0aW9uKCkgY29uc3Q7CiAKICAgICB2b2lkIGNvbXBsZXRl
SFRNTFJlcGxhY2VtZW50KGNvbnN0IFBvc2l0aW9uJiBsYXN0UG9zaXRpb25Ub1NlbGVjdCk7Cisg
ICAgCisgICAgY2xhc3MgSW5zZXJ0ZWROb2RlcyB7CisgICAgcHVibGljOgorICAgICAgICB2b2lk
IHJlc3BvbmRUb05vZGVJbnNlcnRpb24oTm9kZSogbm9kZSk7CisgICAgICAgIHZvaWQgd2lsbFJl
bW92ZU5vZGUoTm9kZSogbm9kZSk7CisgICAgICAgIE5vZGUqIGZpcnN0Tm9kZUluc2VydGVkKCkg
Y29uc3QgeyByZXR1cm4gbV9maXJzdE5vZGVJbnNlcnRlZC5nZXQoKTsgfQorICAgICAgICBOb2Rl
KiBsYXN0TGVhZkluc2VydGVkKCkgY29uc3QgeyByZXR1cm4gbV9sYXN0Tm9kZUluc2VydGVkLT5s
YXN0RGVzY2VuZGFudCgpOyB9CisgICAgICAgIE5vZGUqIHBhc3RMYXN0TGVhZigpIGNvbnN0IHsg
cmV0dXJuIG1fZmlyc3ROb2RlSW5zZXJ0ZWQgPyBsYXN0TGVhZkluc2VydGVkKCktPnRyYXZlcnNl
TmV4dE5vZGUoKSA6IDA7IH0KIAotICAgIHZvaWQgaW5zZXJ0Tm9kZUFmdGVyQW5kVXBkYXRlTm9k
ZXNJbnNlcnRlZChQYXNzUmVmUHRyPE5vZGU+IGluc2VydENoaWxkLCBOb2RlKiByZWZDaGlsZCk7
Ci0gICAgdm9pZCBpbnNlcnROb2RlQXRBbmRVcGRhdGVOb2Rlc0luc2VydGVkKFBhc3NSZWZQdHI8
Tm9kZT4sIGNvbnN0IFBvc2l0aW9uJik7Ci0gICAgdm9pZCBpbnNlcnROb2RlQmVmb3JlQW5kVXBk
YXRlTm9kZXNJbnNlcnRlZChQYXNzUmVmUHRyPE5vZGU+IGluc2VydENoaWxkLCBOb2RlKiByZWZD
aGlsZCk7Ci0gICAgTm9kZSogaW5zZXJ0QXNMaXN0SXRlbXMoUGFzc1JlZlB0cjxOb2RlPiwgTm9k
ZSogaW5zZXJ0aW9uTm9kZSwgY29uc3QgUG9zaXRpb24mKTsKKyAgICBwcml2YXRlOgorICAgICAg
ICBSZWZQdHI8Tm9kZT4gbV9maXJzdE5vZGVJbnNlcnRlZDsKKyAgICAgICAgUmVmUHRyPE5vZGU+
IG1fbGFzdE5vZGVJbnNlcnRlZDsKKyAgICB9OwogCisgICAgTm9kZSogaW5zZXJ0QXNMaXN0SXRl
bXMoUGFzc1JlZlB0cjxOb2RlPiwgTm9kZSogaW5zZXJ0aW9uTm9kZSwgY29uc3QgUG9zaXRpb24m
LCBJbnNlcnRlZE5vZGVzJik7CisKICAgICB2b2lkIHVwZGF0ZU5vZGVzSW5zZXJ0ZWQoTm9kZSop
OwogICAgIGJvb2wgc2hvdWxkUmVtb3ZlRW5kQlIoTm9kZSosIGNvbnN0IFZpc2libGVQb3NpdGlv
biYpOwogICAgIApAQCAtNzcsNyArODcsNyBAQAogICAgIAogICAgIHZvaWQgcmVtb3ZlVW5yZW5k
ZXJlZFRleHROb2Rlc0F0RW5kcygpOwogICAgIAotICAgIHZvaWQgcmVtb3ZlUmVkdW5kYW50U3R5
bGVzQW5kS2VlcFN0eWxlU3BhbklubGluZSgpOworICAgIHZvaWQgcmVtb3ZlUmVkdW5kYW50U3R5
bGVzQW5kS2VlcFN0eWxlU3BhbklubGluZShJbnNlcnRlZE5vZGVzJik7CiAgICAgdm9pZCBoYW5k
bGVTdHlsZVNwYW5zKCk7CiAgICAgdm9pZCBjb3B5U3R5bGVUb0NoaWxkcmVuKE5vZGUqIHBhcmVu
dE5vZGUsIGNvbnN0IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiBwYXJlbnRTdHlsZSk7CiAg
ICAgdm9pZCBoYW5kbGVQYXN0ZUFzUXVvdGF0aW9uTm9kZSgpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvZWRpdGluZy9odG1sZWRpdGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9odG1sZWRpdGluZy5jcHAJKHJldmlzaW9uIDk1MDMxKQorKysgU291cmNlL1dlYkNv
cmUvZWRpdGluZy9odG1sZWRpdGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkyMyw2ICs5MjMs
MzYgQEAKICAgICByZXR1cm4gbnVtOwogfQogCit2b2lkIHVwZGF0ZVBvc2l0aW9uRm9yTm9kZVJl
bW92YWwoUG9zaXRpb24mIHBvc2l0aW9uLCBOb2RlKiBub2RlKQoreworICAgIGlmIChwb3NpdGlv
bi5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuOworICAgIHN3aXRjaCAocG9zaXRpb24uYW5jaG9y
VHlwZSgpKSB7CisgICAgY2FzZSBQb3NpdGlvbjo6UG9zaXRpb25Jc0JlZm9yZUNoaWxkcmVuOgor
ICAgICAgICBpZiAocG9zaXRpb24uY29udGFpbmVyTm9kZSgpID09IG5vZGUpCisgICAgICAgICAg
ICBwb3NpdGlvbiA9IHBvc2l0aW9uSW5QYXJlbnRCZWZvcmVOb2RlKG5vZGUpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIFBvc2l0aW9uOjpQb3NpdGlvbklzQWZ0ZXJDaGlsZHJlbjoKKyAgICAg
ICAgaWYgKHBvc2l0aW9uLmNvbnRhaW5lck5vZGUoKSA9PSBub2RlKQorICAgICAgICAgICAgcG9z
aXRpb24gPSBwb3NpdGlvbkluUGFyZW50QWZ0ZXJOb2RlKG5vZGUpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3I6CisgICAgICAgIGlm
IChwb3NpdGlvbi5jb250YWluZXJOb2RlKCkgPT0gbm9kZS0+cGFyZW50Tm9kZSgpICYmIHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihwb3NpdGlvbi5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSkgPiBub2Rl
LT5ub2RlSW5kZXgoKSkKKyAgICAgICAgICAgIHBvc2l0aW9uLm1vdmVUb09mZnNldChwb3NpdGlv
bi5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSAtIDEpOworICAgICAgICBlbHNlIGlmIChub2RlLT5j
b250YWlucyhwb3NpdGlvbi5jb250YWluZXJOb2RlKCkpKQorICAgICAgICAgICAgcG9zaXRpb24g
PSBwb3NpdGlvbkluUGFyZW50QmVmb3JlTm9kZShub2RlKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBQb3NpdGlvbjo6UG9zaXRpb25Jc0FmdGVyQW5jaG9yOgorICAgICAgICBpZiAobm9kZS0+
Y29udGFpbnMocG9zaXRpb24uYW5jaG9yTm9kZSgpKSkKKyAgICAgICAgICAgIHBvc2l0aW9uID0g
cG9zaXRpb25JblBhcmVudEFmdGVyTm9kZShub2RlKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBQb3NpdGlvbjo6UG9zaXRpb25Jc0JlZm9yZUFuY2hvcjoKKyAgICAgICAgaWYgKG5vZGUtPmNv
bnRhaW5zKHBvc2l0aW9uLmFuY2hvck5vZGUoKSkpCisgICAgICAgICAgICBwb3NpdGlvbiA9IHBv
c2l0aW9uSW5QYXJlbnRCZWZvcmVOb2RlKG5vZGUpOworICAgICAgICBicmVhazsKKyAgICB9Cit9
CisKIGJvb2wgaXNNYWlsQmxvY2txdW90ZShjb25zdCBOb2RlICpub2RlKQogewogICAgIGlmICgh
bm9kZSB8fCAhbm9kZS0+aGFzVGFnTmFtZShibG9ja3F1b3RlVGFnKSkKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvaHRtbGVkaXRpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmgJKHJldmlzaW9uIDk1MDMxKQorKysgU291cmNlL1dlYkNv
cmUvZWRpdGluZy9odG1sZWRpdGluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTksNiArMTU5LDcg
QEAKIC8vIG1pc2NlbGxhbmVvdXMgZnVuY3Rpb25zIG9uIFBvc2l0aW9uCiAKIHVuc2lnbmVkIG51
bUVuY2xvc2luZ01haWxCbG9ja3F1b3Rlcyhjb25zdCBQb3NpdGlvbiYpOwordm9pZCB1cGRhdGVQ
b3NpdGlvbkZvck5vZGVSZW1vdmFsKFBvc2l0aW9uJiwgTm9kZSopOwogCiAvLyAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCiAvLyBWaXNpYmxlUG9zaXRpb24KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
RGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcAkocmV2aXNpb24gOTUwMzEpCisrKyBT
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMTQsMzYgKzMxNCw2IEBACiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1zdGF0
aWMgdm9pZCB1cGRhdGVQb3NpdGlvbkZvck5vZGVSZW1vdmFsKE5vZGUqIG5vZGUsIFBvc2l0aW9u
JiBwb3NpdGlvbikKLXsKLSAgICBpZiAocG9zaXRpb24uaXNOdWxsKCkpCi0gICAgICAgIHJldHVy
bjsKLSAgICBzd2l0Y2ggKHBvc2l0aW9uLmFuY2hvclR5cGUoKSkgewotICAgIGNhc2UgUG9zaXRp
b246OlBvc2l0aW9uSXNCZWZvcmVDaGlsZHJlbjoKLSAgICAgICAgaWYgKHBvc2l0aW9uLmNvbnRh
aW5lck5vZGUoKSA9PSBub2RlKQotICAgICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbkluUGFy
ZW50QmVmb3JlTm9kZShub2RlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQb3NpdGlvbjo6
UG9zaXRpb25Jc0FmdGVyQ2hpbGRyZW46Ci0gICAgICAgIGlmIChwb3NpdGlvbi5jb250YWluZXJO
b2RlKCkgPT0gbm9kZSkKLSAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25JblBhcmVudEFm
dGVyTm9kZShub2RlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQb3NpdGlvbjo6UG9zaXRp
b25Jc09mZnNldEluQW5jaG9yOgotICAgICAgICBpZiAocG9zaXRpb24uY29udGFpbmVyTm9kZSgp
ID09IG5vZGUtPnBhcmVudE5vZGUoKSAmJiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocG9zaXRpb24u
b2Zmc2V0SW5Db250YWluZXJOb2RlKCkpID4gbm9kZS0+bm9kZUluZGV4KCkpCi0gICAgICAgICAg
ICBwb3NpdGlvbi5tb3ZlVG9PZmZzZXQocG9zaXRpb24ub2Zmc2V0SW5Db250YWluZXJOb2RlKCkg
LSAxKTsKLSAgICAgICAgZWxzZSBpZiAobm9kZS0+Y29udGFpbnMocG9zaXRpb24uY29udGFpbmVy
Tm9kZSgpKSkKLSAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25JblBhcmVudEJlZm9yZU5v
ZGUobm9kZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUG9zaXRpb246OlBvc2l0aW9uSXNB
ZnRlckFuY2hvcjoKLSAgICAgICAgaWYgKG5vZGUtPmNvbnRhaW5zKHBvc2l0aW9uLmFuY2hvck5v
ZGUoKSkpCi0gICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uSW5QYXJlbnRBZnRlck5vZGUo
bm9kZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUG9zaXRpb246OlBvc2l0aW9uSXNCZWZv
cmVBbmNob3I6Ci0gICAgICAgIGlmIChub2RlLT5jb250YWlucyhwb3NpdGlvbi5hbmNob3JOb2Rl
KCkpKQotICAgICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbkluUGFyZW50QmVmb3JlTm9kZShu
b2RlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotfQotCiBzdGF0aWMgUG9zaXRpb24gZmlyc3RF
ZGl0YWJsZVBvc2l0aW9uSW5Ob2RlKE5vZGUqIG5vZGUpCiB7CiAgICAgQVNTRVJUKG5vZGUpOwpA
QCAtNDA3LDkgKzM3Nyw5IEBACiAgICAgICAgIG1fbmVlZFBsYWNlaG9sZGVyID0gdHJ1ZTsKICAg
ICAKICAgICAvLyBGSVhNRTogVXBkYXRlIHRoZSBlbmRwb2ludHMgb2YgdGhlIHJhbmdlIGJlaW5n
IGRlbGV0ZWQuCi0gICAgdXBkYXRlUG9zaXRpb25Gb3JOb2RlUmVtb3ZhbChub2RlLmdldCgpLCBt
X2VuZGluZ1Bvc2l0aW9uKTsKLSAgICB1cGRhdGVQb3NpdGlvbkZvck5vZGVSZW1vdmFsKG5vZGUu
Z2V0KCksIG1fbGVhZGluZ1doaXRlc3BhY2UpOwotICAgIHVwZGF0ZVBvc2l0aW9uRm9yTm9kZVJl
bW92YWwobm9kZS5nZXQoKSwgbV90cmFpbGluZ1doaXRlc3BhY2UpOworICAgIHVwZGF0ZVBvc2l0
aW9uRm9yTm9kZVJlbW92YWwobV9lbmRpbmdQb3NpdGlvbiwgbm9kZS5nZXQoKSk7CisgICAgdXBk
YXRlUG9zaXRpb25Gb3JOb2RlUmVtb3ZhbChtX2xlYWRpbmdXaGl0ZXNwYWNlLCBub2RlLmdldCgp
KTsKKyAgICB1cGRhdGVQb3NpdGlvbkZvck5vZGVSZW1vdmFsKG1fdHJhaWxpbmdXaGl0ZXNwYWNl
LCBub2RlLmdldCgpKTsKICAgICAKICAgICBDb21wb3NpdGVFZGl0Q29tbWFuZDo6cmVtb3ZlTm9k
ZShub2RlKTsKIH0KQEAgLTUwNiw3ICs0NzYsNyBAQAogICAgICAgICAgICAgICAgIFJlZlB0cjxO
b2RlPiBuZXh0Tm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dFNpYmxpbmcoKTsKICAgICAgICAgICAg
ICAgICAvLyBpZiB3ZSBqdXN0IHJlbW92ZWQgYSBub2RlIGZyb20gdGhlIGVuZCBjb250YWluZXIs
IHVwZGF0ZSBlbmQgcG9zaXRpb24gc28gdGhlCiAgICAgICAgICAgICAgICAgLy8gY2hlY2sgYWJv
dmUgd2lsbCB3b3JrCi0gICAgICAgICAgICAgICAgdXBkYXRlUG9zaXRpb25Gb3JOb2RlUmVtb3Zh
bChub2RlLmdldCgpLCBtX2Rvd25zdHJlYW1FbmQpOworICAgICAgICAgICAgICAgIHVwZGF0ZVBv
c2l0aW9uRm9yTm9kZVJlbW92YWwobV9kb3duc3RyZWFtRW5kLCBub2RlLmdldCgpKTsKICAgICAg
ICAgICAgICAgICByZW1vdmVOb2RlKG5vZGUuZ2V0KCkpOwogICAgICAgICAgICAgICAgIG5vZGUg
PSBuZXh0Tm9kZS5nZXQoKTsKICAgICAgICAgICAgIH0gZWxzZSB7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>