<?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>24586</bug_id>
          
          <creation_ts>2009-03-13 13:20:39 -0700</creation_ts>
          <short_desc>maxDeepOffset is confusing and should be removed</short_desc>
          <delta_ts>2009-03-20 11:45:35 -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>Mac</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Eric Seidel (no email)">eric</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>jparent</cc>
    
    <cc>justin.garcia</cc>
    
    <cc>kocienda</cc>
    
    <cc>ojan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>113670</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-03-13 13:20:39 -0700</bug_when>
    <thetext>maxDeepOffset is confusing and should be removed

I&apos;ll attach some patches here to try and do so.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>113671</commentid>
    <comment_count>1</comment_count>
      <attachid>28593</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-03-13 13:21:41 -0700</bug_when>
    <thetext>Created attachment 28593
First attempt to kill maxDeepOffset

 WebCore/ChangeLog                           |   50 +++++++++++++++++++++++++++
 WebCore/dom/Position.cpp                    |   20 ++++++++--
 WebCore/dom/Position.h                      |    5 +++
 WebCore/editing/CompositeEditCommand.cpp    |    4 +-
 WebCore/editing/DeleteSelectionCommand.cpp  |    8 ++---
 WebCore/editing/Editor.cpp                  |    1 +
 WebCore/editing/InsertLineBreakCommand.cpp  |    3 +-
 WebCore/editing/InsertListCommand.cpp       |    4 +-
 WebCore/editing/ReplaceSelectionCommand.cpp |    5 ++-
 WebCore/editing/TypingCommand.cpp           |    2 +-
 WebCore/editing/VisibleSelection.cpp        |    6 ++--
 WebCore/editing/htmlediting.cpp             |   26 +++++++------
 WebCore/editing/visible_units.cpp           |    6 ++--
 WebCore/page/AccessibilityObject.cpp        |    4 +-
 WebCore/page/AccessibilityRenderObject.cpp  |   13 ++++---
 WebCore/rendering/RenderBox.cpp             |    9 ++---
 16 files changed, 118 insertions(+), 48 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>113713</commentid>
    <comment_count>2</comment_count>
      <attachid>28605</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-03-13 15:23:24 -0700</bug_when>
    <thetext>Created attachment 28605
Further efforts to remove maxDeepOffset

 WebCore/ChangeLog                          |   57 ++++++++++++++++++++++++++++
 WebCore/dom/Position.cpp                   |   44 +++++++++++++--------
 WebCore/dom/Position.h                     |    7 ++-
 WebCore/dom/PositionIterator.cpp           |   18 ++++++---
 WebCore/editing/DeleteSelectionCommand.cpp |    9 ++--
 WebCore/editing/Editor.cpp                 |    4 +-
 WebCore/editing/VisiblePosition.cpp        |   12 +++--
 WebCore/editing/htmlediting.cpp            |   18 +++++----
 WebCore/editing/htmlediting.h              |    2 +-
 WebCore/editing/visible_units.cpp          |   21 +++++-----
 10 files changed, 135 insertions(+), 57 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>113811</commentid>
    <comment_count>3</comment_count>
    <who name="Justin Garcia">justin.garcia</who>
    <bug_when>2009-03-15 02:36:22 -0700</bug_when>
    <thetext>+        Rename maxDeepOffset to lastOffsetInNode

I think that lastOffsetInNode is misleading because the offset returned isn&apos;t necessarily &quot;in&quot; the node given to the function.  I think it&apos;s a good description of what maxDeepOffset returns for text nodes and containers, but not so good for what it returns for tables, images, br, etc.  I think you could sp</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>113896</commentid>
    <comment_count>4</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-03-16 11:16:48 -0700</bug_when>
    <thetext>
&gt; I think that lastOffsetInNode is misleading because the offset returned isn&apos;t
&gt; necessarily &quot;in&quot; the node given to the function.  I think it&apos;s a good
&gt; description of what maxDeepOffset returns for text nodes and containers, but
&gt; not so good for what it returns for tables, images, br, etc.  I think you could
&gt; sp

Looks like your comment got cut off.

The offset that lastOffsetInNode returns is actually *in* the node.  Or rather, the position is.  Even if the editing code doesn&apos;t interpret it as being inside the node.   [img, 1], that position is still &quot;in&quot; img, even though it&apos;s invalid, so the editing code treats it as after the img.

Anyway, very interested in seeing the rest of your comment.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>113898</commentid>
    <comment_count>5</comment_count>
    <who name="Justin Garcia">justin.garcia</who>
    <bug_when>2009-03-16 11:32:43 -0700</bug_when>
    <thetext>&gt; the editing code doesn&apos;t interpret it as being inside the node.

This was exactly my point.  What do you think about lastOffsetInNodeForEditing or lastEditingOffsetInNode?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>114355</commentid>
    <comment_count>6</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-03-19 13:02:11 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; &gt; the editing code doesn&apos;t interpret it as being inside the node.
&gt; 
&gt; This was exactly my point.  What do you think about lastOffsetInNodeForEditing
&gt; or lastEditingOffsetInNode?

Maybe lastNodeOffsetForEditing?
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>114361</commentid>
    <comment_count>7</comment_count>
    <who name="Justin Garcia">justin.garcia</who>
    <bug_when>2009-03-19 13:12:22 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (In reply to comment #5)
&gt; &gt; &gt; the editing code doesn&apos;t interpret it as being inside the node.
&gt; &gt; 
&gt; &gt; This was exactly my point.  What do you think about lastOffsetInNodeForEditing
&gt; &gt; or lastEditingOffsetInNode?
&gt; 
&gt; Maybe lastNodeOffsetForEditing?

Sounds good to me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>114381</commentid>
    <comment_count>8</comment_count>
    <who name="Justin Garcia">justin.garcia</who>
    <bug_when>2009-03-19 14:47:42 -0700</bug_when>
    <thetext>This is definitely the right direction.

-    if (startNode-&gt;renderer()
-        &amp;&amp; ((startNode-&gt;renderer()-&gt;isTable() &amp;&amp; !startNode-&gt;renderer()-&gt;isInline())
-            || startNode-&gt;renderer()-&gt;isHR())
-        &amp;&amp; p.m_offset == maxDeepOffset(startNode))
-        return VisiblePosition(Position(startNode, 0));
+    if (renderedAsNonInlineTableOrHR(startNode-&gt;renderer()) &amp;&amp; p.atEndOfNode())
+        return firstPositionInNode(startNode);

That said, I think that  &quot;atEndOfNode&quot; is inaccurate.  [hr, 1] is demonstrative of this.  [hr, 1] isn&apos;t at the &quot;end of&quot; the hr, it&apos;s after it.  Same for a table, an image, etc.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>114395</commentid>
    <comment_count>9</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-03-19 15:46:42 -0700</bug_when>
    <thetext>Ok, my current thinking for new names are:

firstPositionInNode and lastPositionInNode become:
// These functions match the 0/maxDeepOffset behavior,
// &quot;deep&quot; is intended to convey that they will prefer the deeper
// of two editing positions corresponding to a node
lastDeepEditingPositionForNode(node)
firstDeepEditingPositionForNode(node)


// lastOffsetInNode will become
int lastNodeOffsetForEditing(node)

// the new functions atStartOfNode and atEndOfNode will become:
atFirstEditingPositionForNode()
atLastEditingPositionForNode()

Once we have the ability to tell if a position is container relative or neighbor relative, we can add more specific check functions for just before the node, just inside the node, etc.

Sound good?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>114423</commentid>
    <comment_count>10</comment_count>
      <attachid>28775</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-03-19 18:14:18 -0700</bug_when>
    <thetext>Created attachment 28775
Rename first/lastPositionInNode to first/lastDeepEditingPositionForNode

 WebCore/dom/Position.cpp                    |   15 ++++++++-------
 WebCore/dom/Position.h                      |    9 +++++----
 WebCore/dom/PositionIterator.cpp            |    2 +-
 WebCore/editing/CompositeEditCommand.cpp    |    4 ++--
 WebCore/editing/DeleteSelectionCommand.cpp  |    6 +++---
 WebCore/editing/InsertLineBreakCommand.cpp  |    2 +-
 WebCore/editing/InsertListCommand.cpp       |    4 ++--
 WebCore/editing/ReplaceSelectionCommand.cpp |    4 ++--
 WebCore/editing/TypingCommand.cpp           |    2 +-
 WebCore/editing/VisibleSelection.cpp        |    6 +++---
 WebCore/editing/htmlediting.cpp             |   16 ++++++++--------
 WebCore/editing/visible_units.cpp           |    8 ++++----
 WebCore/page/AccessibilityObject.cpp        |    2 +-
 WebCore/page/AccessibilityRenderObject.cpp  |    4 ++--
 WebCore/rendering/RenderBox.cpp             |    8 ++++----
 15 files changed, 47 insertions(+), 45 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>114424</commentid>
    <comment_count>11</comment_count>
      <attachid>28776</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-03-19 18:14:19 -0700</bug_when>
    <thetext>Created attachment 28776
Rename lastOffsetInNode to lastOffsetForEditing and atStart/atEndOfNode to atFirst/atLastEditingPositionForNode

 WebCore/dom/Position.cpp                   |   18 +++++++++---------
 WebCore/dom/Position.h                     |    6 ++++--
 WebCore/dom/PositionIterator.cpp           |   10 +++++-----
 WebCore/editing/DeleteSelectionCommand.cpp |    6 +++---
 WebCore/editing/Editor.cpp                 |    4 ++--
 WebCore/editing/htmlediting.cpp            |    8 ++++----
 WebCore/editing/htmlediting.h              |    2 +-
 WebCore/editing/visible_units.cpp          |    6 +++---
 8 files changed, 31 insertions(+), 29 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>114425</commentid>
    <comment_count>12</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-03-19 18:14:54 -0700</bug_when>
    <thetext>I&apos;ve made the renames locally, and will squash these down into 2 patches.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>114510</commentid>
    <comment_count>13</comment_count>
      <attachid>28788</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-03-20 10:18:26 -0700</bug_when>
    <thetext>Created attachment 28788
Squashed patch with renames

 WebCore/ChangeLog                           |   98 +++++++++++++++++++++++++++
 WebCore/dom/Position.cpp                    |   63 ++++++++++++------
 WebCore/dom/Position.h                      |   15 ++++-
 WebCore/dom/PositionIterator.cpp            |   18 +++--
 WebCore/editing/CompositeEditCommand.cpp    |    4 +-
 WebCore/editing/DeleteSelectionCommand.cpp  |   17 ++---
 WebCore/editing/Editor.cpp                  |    3 +-
 WebCore/editing/InsertLineBreakCommand.cpp  |    3 +-
 WebCore/editing/InsertListCommand.cpp       |    4 +-
 WebCore/editing/ReplaceSelectionCommand.cpp |    5 +-
 WebCore/editing/TypingCommand.cpp           |    2 +-
 WebCore/editing/VisiblePosition.cpp         |   12 ++--
 WebCore/editing/VisibleSelection.cpp        |    6 +-
 WebCore/editing/htmlediting.cpp             |   44 +++++++------
 WebCore/editing/htmlediting.h               |    2 +-
 WebCore/editing/visible_units.cpp           |   27 ++++----
 WebCore/page/AccessibilityObject.cpp        |    4 +-
 WebCore/page/AccessibilityRenderObject.cpp  |   13 ++--
 WebCore/rendering/RenderBox.cpp             |    9 +--
 19 files changed, 246 insertions(+), 103 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>114511</commentid>
    <comment_count>14</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-03-20 10:20:53 -0700</bug_when>
    <thetext>The last patch is the combination of the previous 4 patches.  I tried squashing it down into 2 and it ended up more trouble than it was worth.  I updated the ChangeLog when combining the two original patches into one.  This is ready for review again. :)  Once this lands I will get to work on removing the use of Position::offset() from our code, and making actual position offsets opaque to the editing code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>114520</commentid>
    <comment_count>15</comment_count>
      <attachid>28788</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-03-20 11:32:56 -0700</bug_when>
    <thetext>Comment on attachment 28788
Squashed patch with renames

Justin reviewed this over IRC (from the shuttle).  

His comments:

some weird formatting in the change log

FIXED.

in the second line of the section that starts with &quot;editing positions&quot;
don&apos;t really need &quot;deep&quot;

I&apos;m going to leave it for now.  The point was to identify that it was inside the node if possible.  We can change it later (since this code is still very in flux.)

the rest of the editing code will treat [img, 0]
+// as &quot;the first position before the image&quot;
just &quot;the position before the image&quot; i think

Will fix.

Thanks again Justin!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>114521</commentid>
    <comment_count>16</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-03-20 11:45:35 -0700</bug_when>
    <thetext>Committing to http://svn.webkit.org/repository/webkit/trunk ...
	M	WebCore/ChangeLog
	M	WebCore/dom/Position.cpp
	M	WebCore/dom/Position.h
	M	WebCore/dom/PositionIterator.cpp
	M	WebCore/editing/CompositeEditCommand.cpp
	M	WebCore/editing/DeleteSelectionCommand.cpp
	M	WebCore/editing/Editor.cpp
	M	WebCore/editing/InsertLineBreakCommand.cpp
	M	WebCore/editing/InsertListCommand.cpp
	M	WebCore/editing/ReplaceSelectionCommand.cpp
	M	WebCore/editing/TypingCommand.cpp
	M	WebCore/editing/VisiblePosition.cpp
	M	WebCore/editing/VisibleSelection.cpp
	M	WebCore/editing/htmlediting.cpp
	M	WebCore/editing/htmlediting.h
	M	WebCore/editing/visible_units.cpp
	M	WebCore/page/AccessibilityObject.cpp
	M	WebCore/page/AccessibilityRenderObject.cpp
	M	WebCore/rendering/RenderBox.cpp
Committed r41863
</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>28593</attachid>
            <date>2009-03-13 13:21:41 -0700</date>
            <delta_ts>2009-03-20 10:18:45 -0700</delta_ts>
            <desc>First attempt to kill maxDeepOffset</desc>
            <filename>First-attempt-to-kill-maxDeepOffset.patch</filename>
            <type>text/plain</type>
            <size>22352</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">Y2IzYjNhNGYxMjY4YmE1ZGMzNGJkM2E3NDBmMTkzNWY4ZDZhYjkxNgpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAzNTA5M2UzLi4zMTgzMzBh
IDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDUzIEBACisyMDA5LTAzLTEzICBFcmljIFNlaWRlbCAgPGVyaWNAd2Via2l0Lm9y
Zz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBGaXJz
dCBhdHRlbXB0IHRvIGtpbGwgbWF4RGVlcE9mZnNldAorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjQ1ODYKKyAgICAgICAgCisgICAgICAgIEFkZCBmaXJz
dFBvc2l0aW9uSW5Ob2RlIGFuZCBsYXN0UG9zaXRpb25Jbk5vZGUgUG9zaXRpb24gY3JlYXRpb24g
ZnVuY3Rpb25zCisgICAgICAgIGFuZCBkZXBsb3kgdGhlbSB0byBwbGFjZXMgd2UgdXNlZCB0byBj
YWxsIG1heERlZXBPZmZzZXQuCisKKyAgICAgICAgKiBkb20vUG9zaXRpb24uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UG9zaXRpb246OnByZXZpb3VzKToKKyAgICAgICAgKFdlYkNvcmU6OlBvc2l0
aW9uOjpuZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OlBvc2l0aW9uOjp1cHN0cmVhbSk6CisgICAg
ICAgIChXZWJDb3JlOjpmaXJzdFBvc2l0aW9uSW5Ob2RlKToKKyAgICAgICAgKFdlYkNvcmU6Omxh
c3RQb3NpdGlvbkluTm9kZSk6CisgICAgICAgICogZG9tL1Bvc2l0aW9uLmg6CisgICAgICAgICog
ZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb21w
b3NpdGVFZGl0Q29tbWFuZDo6cG9zaXRpb25Bdm9pZGluZ1NwZWNpYWxFbGVtZW50Qm91bmRhcnkp
OgorICAgICAgICAqIGVkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjppc1RhYmxlQ2VsbEVtcHR5KToKKyAgICAgICAgKFdlYkNvcmU6OkRlbGV0ZVNl
bGVjdGlvbkNvbW1hbmQ6OnJlbW92ZU5vZGUpOgorICAgICAgICAqIGVkaXRpbmcvRWRpdG9yLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6YWR2YW5jZVRvTmV4dE1pc3NwZWxsaW5nKToK
KyAgICAgICAgKiBlZGl0aW5nL0luc2VydExpbmVCcmVha0NvbW1hbmQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SW5zZXJ0TGluZUJyZWFrQ29tbWFuZDo6ZG9BcHBseSk6CisgICAgICAgICogZWRp
dGluZy9JbnNlcnRMaXN0Q29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNlcnRMaXN0
Q29tbWFuZDo6ZG9BcHBseSk6CisgICAgICAgICogZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29t
bWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6cG9z
aXRpb25BdEVuZE9mSW5zZXJ0ZWRDb250ZW50KToKKyAgICAgICAgKiBlZGl0aW5nL1R5cGluZ0Nv
bW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6Zm9yd2FyZERlbGV0
ZUtleVByZXNzZWQpOgorICAgICAgICAqIGVkaXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpWaXNpYmxlU2VsZWN0aW9uOjpzZWxlY3Rpb25Gcm9tQ29udGVudHNP
Zk5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6VmlzaWJsZVNlbGVjdGlvbjo6YWRqdXN0U2VsZWN0
aW9uVG9Bdm9pZENyb3NzaW5nRWRpdGluZ0JvdW5kYXJpZXMpOgorICAgICAgICAqIGVkaXRpbmcv
aHRtbGVkaXRpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Zmlyc3RFZGl0YWJsZVBvc2l0aW9u
QWZ0ZXJQb3NpdGlvbkluUm9vdCk6CisgICAgICAgIChXZWJDb3JlOjpsYXN0RWRpdGFibGVQb3Np
dGlvbkJlZm9yZVBvc2l0aW9uSW5Sb290KToKKyAgICAgICAgKFdlYkNvcmU6OmVuY2xvc2luZ0Vt
cHR5TGlzdEl0ZW0pOgorICAgICAgICAqIGVkaXRpbmcvdmlzaWJsZV91bml0cy5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjplbmRPZlBhcmFncmFwaCk6CisgICAgICAgIChXZWJDb3JlOjpzdGFydE9m
RWRpdGFibGVDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OmVuZE9mRWRpdGFibGVDb250ZW50
KToKKyAgICAgICAgKiBwYWdlL0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6ZW5kT2ZTdHlsZVJhbmdlKToKKyAgICAgICAgKiBwYWdlL0FjY2Vzc2liaWxpdHlSZW5k
ZXJPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVj
dDo6dmlzaWJsZVBvc2l0aW9uUmFuZ2UpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3gu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpwb3NpdGlvbkZvclBvaW50KToKKwog
MjAwOS0wMy0xMyAgRGF2aWQgTGV2aW4gIDxsZXZpbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAg
UmV2aWV3ZWQgYnkgRGltaXRyaSBHbGF6a292LgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vUG9z
aXRpb24uY3BwIGIvV2ViQ29yZS9kb20vUG9zaXRpb24uY3BwCmluZGV4IGRjMDE0N2YuLjJmMWI1
YmIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL1Bvc2l0aW9uLmNwcAorKysgYi9XZWJDb3JlL2Rv
bS9Qb3NpdGlvbi5jcHAKQEAgLTExMCw3ICsxMTAsNyBAQCBQb3NpdGlvbiBQb3NpdGlvbjo6cHJl
dmlvdXMoUG9zaXRpb25Nb3ZlVHlwZSBtb3ZlVHlwZSkgY29uc3QKICAgICBpZiAobyA+IDApIHsK
ICAgICAgICAgTm9kZSogY2hpbGQgPSBuLT5jaGlsZE5vZGUobyAtIDEpOwogICAgICAgICBpZiAo
Y2hpbGQpCi0gICAgICAgICAgICByZXR1cm4gUG9zaXRpb24oY2hpbGQsIG1heERlZXBPZmZzZXQo
Y2hpbGQpKTsKKyAgICAgICAgICAgIHJldHVybiBsYXN0UG9zaXRpb25Jbk5vZGUoY2hpbGQpOwog
CiAgICAgICAgIC8vIFRoZXJlIGFyZSB0d28gcmVhc29ucyBjaGlsZCBtaWdodCBiZSAwOgogICAg
ICAgICAvLyAgIDEpIFRoZSBub2RlIGlzIG5vZGUgbGlrZSBhIHRleHQgbm9kZSB0aGF0IGlzIG5v
dCBhbiBlbGVtZW50LCBhbmQgdGhlcmVmb3JlIGhhcyBubyBjaGlsZHJlbi4KQEAgLTE0OSw4ICsx
NDksOCBAQCBQb3NpdGlvbiBQb3NpdGlvbjo6bmV4dChQb3NpdGlvbk1vdmVUeXBlIG1vdmVUeXBl
KSBjb25zdAogICAgIE5vZGUqIGNoaWxkID0gbi0+Y2hpbGROb2RlKG8pOwogICAgIGlmIChjaGls
ZCB8fCAhbi0+aGFzQ2hpbGROb2RlcygpICYmIG8gPCBtYXhEZWVwT2Zmc2V0KG4pKSB7CiAgICAg
ICAgIGlmIChjaGlsZCkKLSAgICAgICAgICAgIHJldHVybiBQb3NpdGlvbihjaGlsZCwgMCk7Ci0g
ICAgICAgICAgICAKKyAgICAgICAgICAgIHJldHVybiBmaXJzdFBvc2l0aW9uSW5Ob2RlKGNoaWxk
KTsKKwogICAgICAgICAvLyBUaGVyZSBhcmUgdHdvIHJlYXNvbnMgY2hpbGQgbWlnaHQgYmUgMDoK
ICAgICAgICAgLy8gICAxKSBUaGUgbm9kZSBpcyBub2RlIGxpa2UgYSB0ZXh0IG5vZGUgdGhhdCBp
cyBub3QgYW4gZWxlbWVudCwgYW5kIHRoZXJlZm9yZSBoYXMgbm8gY2hpbGRyZW4uCiAgICAgICAg
IC8vICAgICAgR29pbmcgZm9yd2FyZCBvbmUgY2hhcmFjdGVyIGF0IGEgdGltZSBpcyBjb3JyZWN0
LgpAQCAtMzczLDcgKzM3Myw3IEBAIFBvc2l0aW9uIFBvc2l0aW9uOjp1cHN0cmVhbSgpIGNvbnN0
CiAgICAgICAgIC8vIFJldHVybiBwb3NpdGlvbiBhZnRlciB0YWJsZXMgYW5kIG5vZGVzIHdoaWNo
IGhhdmUgY29udGVudCB0aGF0IGNhbiBiZSBpZ25vcmVkLgogICAgICAgICBpZiAoZWRpdGluZ0ln
bm9yZXNDb250ZW50KGN1cnJlbnROb2RlKSB8fCBpc1RhYmxlRWxlbWVudChjdXJyZW50Tm9kZSkp
IHsKICAgICAgICAgICAgIGlmIChjdXJyZW50UG9zLmF0RW5kT2ZOb2RlKCkpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIFBvc2l0aW9uKGN1cnJlbnROb2RlLCBtYXhEZWVwT2Zmc2V0KGN1cnJlbnRO
b2RlKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGxhc3RQb3NpdGlvbkluTm9kZShjdXJyZW50
Tm9kZSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCkBAIC05OTgsNiArOTk4
LDE4IEBAIFBvc2l0aW9uIGVuZFBvc2l0aW9uKGNvbnN0IFJhbmdlKiByKQogICAgIHJldHVybiBy
ID8gci0+ZW5kUG9zaXRpb24oKSA6IFBvc2l0aW9uKCk7CiB9CiAKKy8vIE5PVEU6IGZpcnN0L2xh
c3RQb3NpdGlvbkluTm9kZSByZXR1cm4gImVkaXRpbmcgcG9zaXRpb25zIiAobGlrZSBbaW1nLCAw
XSkKKy8vIHdoaWNoIHRoZSByZXN0IG9mIHRoZSBlZGl0aW5nIGNvZGUgd2lsbCB0cmVhdCBhcyAi
dGhlIGZpcnN0IHBvc2l0aW9uIGJlZm9yZSB0aGUgaW1hZ2UiCitQb3NpdGlvbiBmaXJzdFBvc2l0
aW9uSW5Ob2RlKE5vZGUqIG5vZGUpCit7CisgICAgcmV0dXJuIFBvc2l0aW9uKG5vZGUsIDApOwor
fQorCitQb3NpdGlvbiBsYXN0UG9zaXRpb25Jbk5vZGUoTm9kZSogbm9kZSkKK3sKKyAgICByZXR1
cm4gUG9zaXRpb24obm9kZSwgbWF4RGVlcE9mZnNldChub2RlKSk7Cit9CisKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKIAogI2lmbmRlZiBOREVCVUcKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL1Bv
c2l0aW9uLmggYi9XZWJDb3JlL2RvbS9Qb3NpdGlvbi5oCmluZGV4IDcxZWUyNDcuLjNhN2FiNTMg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL1Bvc2l0aW9uLmgKKysrIGIvV2ViQ29yZS9kb20vUG9z
aXRpb24uaApAQCAtMTI4LDYgKzEyOCwxMSBAQCBpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0
IFBvc2l0aW9uJiBhLCBjb25zdCBQb3NpdGlvbiYgYikKIFBvc2l0aW9uIHN0YXJ0UG9zaXRpb24o
Y29uc3QgUmFuZ2UqKTsKIFBvc2l0aW9uIGVuZFBvc2l0aW9uKGNvbnN0IFJhbmdlKik7CiAKKy8v
IE5PVEU6IGZpcnN0L2xhc3RQb3NpdGlvbkluTm9kZSByZXR1cm4gImVkaXRpbmcgcG9zaXRpb25z
IiAobGlrZSBbaW1nLCAwXSkKKy8vIHdoaWNoIHRoZSByZXN0IG9mIHRoZSBlZGl0aW5nIGNvZGUg
d2lsbCB0cmVhdCBhcyAidGhlIGZpcnN0IHBvc2l0aW9uIGJlZm9yZSB0aGUgaW1hZ2UiCitQb3Np
dGlvbiBmaXJzdFBvc2l0aW9uSW5Ob2RlKE5vZGUqKTsKK1Bvc2l0aW9uIGxhc3RQb3NpdGlvbklu
Tm9kZShOb2RlKik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2lmbmRlZiBOREVCVUcK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAgYi9X
ZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCmluZGV4IDM1MDYwOWYuLjZj
ODI2OTYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5j
cHAKKysrIGIvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcApAQCAtOTc5
LDggKzk3OSw4IEBAIFBvc2l0aW9uIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpwb3NpdGlvbkF2b2lk
aW5nU3BlY2lhbEVsZW1lbnRCb3VuZGFyeShjb25zdCBQb3NpCiAgICAgUG9zaXRpb24gcmVzdWx0
ID0gb3JpZ2luYWw7CiAgICAgLy8gRG9uJ3QgYXZvaWQgYmxvY2sgbGV2ZWwgYW5jaG9ycywgYmVj
YXVzZSB0aGF0IHdvdWxkIGluc2VydCBjb250ZW50IGludG8gdGhlIHdyb25nIHBhcmFncmFwaC4K
ICAgICBpZiAoZW5jbG9zaW5nQW5jaG9yICYmICFpc0Jsb2NrKGVuY2xvc2luZ0FuY2hvcikpIHsK
LSAgICAgICAgVmlzaWJsZVBvc2l0aW9uIGZpcnN0SW5BbmNob3IoUG9zaXRpb24oZW5jbG9zaW5n
QW5jaG9yLCAwKSk7Ci0gICAgICAgIFZpc2libGVQb3NpdGlvbiBsYXN0SW5BbmNob3IoUG9zaXRp
b24oZW5jbG9zaW5nQW5jaG9yLCBtYXhEZWVwT2Zmc2V0KGVuY2xvc2luZ0FuY2hvcikpKTsKKyAg
ICAgICAgVmlzaWJsZVBvc2l0aW9uIGZpcnN0SW5BbmNob3IoZmlyc3RQb3NpdGlvbkluTm9kZShl
bmNsb3NpbmdBbmNob3IpKTsKKyAgICAgICAgVmlzaWJsZVBvc2l0aW9uIGxhc3RJbkFuY2hvcihs
YXN0UG9zaXRpb25Jbk5vZGUoZW5jbG9zaW5nQW5jaG9yKSk7CiAgICAgICAgIC8vIElmIHZpc3Vh
bGx5IGp1c3QgYWZ0ZXIgdGhlIGFuY2hvciwgaW5zZXJ0ICppbnNpZGUqIHRoZSBhbmNob3IgdW5s
ZXNzIGl0J3MgdGhlIGxhc3QgCiAgICAgICAgIC8vIFZpc2libGVQb3NpdGlvbiBpbiB0aGUgZG9j
dW1lbnQsIHRvIG1hdGNoIE5TVGV4dFZpZXcuCiAgICAgICAgIGlmICh2aXNpYmxlUG9zID09IGxh
c3RJbkFuY2hvcikgewpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZVNlbGVjdGlv
bkNvbW1hbmQuY3BwIGIvV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3Bw
CmluZGV4IDg1MGMxZTUuLmUyYjE1MDIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZWRpdGluZy9EZWxl
dGVTZWxlY3Rpb25Db21tYW5kLmNwcAorKysgYi9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0
aW9uQ29tbWFuZC5jcHAKQEAgLTU2LDkgKzU2LDcgQEAgc3RhdGljIGJvb2wgaXNUYWJsZVJvdyhj
b25zdCBOb2RlKiBub2RlKQogc3RhdGljIGJvb2wgaXNUYWJsZUNlbGxFbXB0eShOb2RlKiBjZWxs
KQogewogICAgIEFTU0VSVChpc1RhYmxlQ2VsbChjZWxsKSk7Ci0gICAgVmlzaWJsZVBvc2l0aW9u
IGZpcnN0SW5DZWxsKFBvc2l0aW9uKGNlbGwsIDApKTsKLSAgICBWaXNpYmxlUG9zaXRpb24gbGFz
dEluQ2VsbChQb3NpdGlvbihjZWxsLCBtYXhEZWVwT2Zmc2V0KGNlbGwpKSk7Ci0gICAgcmV0dXJu
IGZpcnN0SW5DZWxsID09IGxhc3RJbkNlbGw7CisgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihm
aXJzdFBvc2l0aW9uSW5Ob2RlKGNlbGwpKSA9PSBWaXNpYmxlUG9zaXRpb24obGFzdFBvc2l0aW9u
SW5Ob2RlKGNlbGwpKTsKIH0KIAogc3RhdGljIGJvb2wgaXNUYWJsZVJvd0VtcHR5KE5vZGUqIHJv
dykKQEAgLTM2Myw5ICszNjEsOSBAQCB2b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OnJlbW92
ZU5vZGUoUGFzc1JlZlB0cjxOb2RlPiBub2RlKQogICAgICAgICByZXR1cm47CiAgICAgfQogICAg
IAotICAgIGlmIChub2RlID09IG1fc3RhcnRCbG9jayAmJiAhaXNFbmRPZkJsb2NrKFZpc2libGVQ
b3NpdGlvbihtX3N0YXJ0QmxvY2suZ2V0KCksIDAsIERPV05TVFJFQU0pLnByZXZpb3VzKCkpKQor
ICAgIGlmIChub2RlID09IG1fc3RhcnRCbG9jayAmJiAhaXNFbmRPZkJsb2NrKFZpc2libGVQb3Np
dGlvbihmaXJzdFBvc2l0aW9uSW5Ob2RlKG1fc3RhcnRCbG9jay5nZXQoKSkpLnByZXZpb3VzKCkp
KQogICAgICAgICBtX25lZWRQbGFjZWhvbGRlciA9IHRydWU7Ci0gICAgZWxzZSBpZiAobm9kZSA9
PSBtX2VuZEJsb2NrICYmICFpc1N0YXJ0T2ZCbG9jayhWaXNpYmxlUG9zaXRpb24obV9lbmRCbG9j
ay5nZXQoKSwgbWF4RGVlcE9mZnNldChtX2VuZEJsb2NrLmdldCgpKSwgRE9XTlNUUkVBTSkubmV4
dCgpKSkKKyAgICBlbHNlIGlmIChub2RlID09IG1fZW5kQmxvY2sgJiYgIWlzU3RhcnRPZkJsb2Nr
KFZpc2libGVQb3NpdGlvbihsYXN0UG9zaXRpb25Jbk5vZGUobV9zdGFydEJsb2NrLmdldCgpKSku
bmV4dCgpKSkKICAgICAgICAgbV9uZWVkUGxhY2Vob2xkZXIgPSB0cnVlOwogICAgIAogICAgIC8v
IEZJWE1FOiBVcGRhdGUgdGhlIGVuZHBvaW50cyBvZiB0aGUgcmFuZ2UgYmVpbmcgZGVsZXRlZC4K
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwIGIvV2ViQ29yZS9lZGl0aW5n
L0VkaXRvci5jcHAKaW5kZXggZWYyOTc0Ny4uZGIzYzlmOCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9l
ZGl0aW5nL0VkaXRvci5jcHAKKysrIGIvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKQEAgLTE3
MDIsNiArMTcwMiw3IEBAIHZvaWQgRWRpdG9yOjphZHZhbmNlVG9OZXh0TWlzc3BlbGxpbmcoYm9v
bCBzdGFydEJlZm9yZVNlbGVjdGlvbikKICAgICAKICAgICAvLyB0b3BOb2RlIGRlZmluZXMgdGhl
IHdob2xlIHJhbmdlIHdlIHdhbnQgdG8gb3BlcmF0ZSBvbiAKICAgICBOb2RlKiB0b3BOb2RlID0g
aGlnaGVzdEVkaXRhYmxlUm9vdChwb3NpdGlvbik7CisgICAgLy8gRklYTUU6IG1heERlZXBPZmZz
ZXQoKSBpcyB3cm9uZyBoZXJlIGlmIGVkaXRpbmdJZ25vcmVzQ29udGVudChoaWdoZXN0RWRpdGFi
bGVSb290KCkpIHJldHVybnMgdHJ1ZSAoZS5nLiBhIDx0YWJsZT4pCiAgICAgc3BlbGxpbmdTZWFy
Y2hSYW5nZS0+c2V0RW5kKHRvcE5vZGUsIG1heERlZXBPZmZzZXQodG9wTm9kZSksIGVjKTsKIAog
ICAgIC8vIElmIHNwZWxsaW5nU2VhcmNoUmFuZ2Ugc3RhcnRzIGluIHRoZSBtaWRkbGUgb2YgYSB3
b3JkLCBhZHZhbmNlIHRvIHRoZSBuZXh0IHdvcmQgc28gd2Ugc3RhcnQgY2hlY2tpbmcKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRMaW5lQnJlYWtDb21tYW5kLmNwcCBiL1dlYkNv
cmUvZWRpdGluZy9JbnNlcnRMaW5lQnJlYWtDb21tYW5kLmNwcAppbmRleCA5ODRjNmYxLi5kZjJk
Y2U2IDEwMDY0NAotLS0gYS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0TGluZUJyZWFrQ29tbWFuZC5j
cHAKKysrIGIvV2ViQ29yZS9lZGl0aW5nL0luc2VydExpbmVCcmVha0NvbW1hbmQuY3BwCkBAIC0x
NzAsOCArMTcwLDcgQEAgdm9pZCBJbnNlcnRMaW5lQnJlYWtDb21tYW5kOjpkb0FwcGx5KCkKICAg
ICAgICAgLy8gbGVhdmVzIGFuZCB0aGVuIGNvbWVzIGJhY2ssIG5ldyBpbnB1dCB3aWxsIGhhdmUg
dGhlIHJpZ2h0IHN0eWxlLgogICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkbid0IGFsd2F5cyBh
cHBseSB0aGUgdHlwaW5nIHN0eWxlIHRvIHRoZSBsaW5lIGJyZWFrIGhlcmUsCiAgICAgICAgIC8v
IHNlZSA8cmRhcjovL3Byb2JsZW0vNTc5NDQ2Mj4uCi0gICAgICAgIGFwcGx5U3R5bGUodHlwaW5n
U3R5bGUsIFBvc2l0aW9uKG5vZGVUb0luc2VydC5nZXQoKSwgMCksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFBvc2l0aW9uKG5vZGVUb0luc2VydC5nZXQoKSwgbWF4RGVlcE9mZnNl
dChub2RlVG9JbnNlcnQuZ2V0KCkpKSk7CisgICAgICAgIGFwcGx5U3R5bGUodHlwaW5nU3R5bGUs
IGZpcnN0UG9zaXRpb25Jbk5vZGUobm9kZVRvSW5zZXJ0LmdldCgpKSwgbGFzdFBvc2l0aW9uSW5O
b2RlKG5vZGVUb0luc2VydC5nZXQoKSkpOwogICAgICAgICAvLyBFdmVuIHRob3VnaCB0aGlzIGFw
cGx5U3R5bGUgb3BlcmF0ZXMgb24gYSBSYW5nZSwgaXQgc3RpbGwgc2V0cyBhbiBlbmRpbmdTZWxl
Y3Rpb24oKS4KICAgICAgICAgLy8gSXQgdHJpZXMgdG8gc2V0IGEgVmlzaWJsZVNlbGVjdGlvbiBh
cm91bmQgdGhlIGNvbnRlbnQgaXQgb3BlcmF0ZWQgb24uIFNvLCB0aGF0IFZpc2libGVTZWxlY3Rp
b24KICAgICAgICAgLy8gd2lsbCBlaXRoZXIgKGEpIHNlbGVjdCB0aGUgbGluZSBicmVhayB3ZSBp
bnNlcnRlZCwgb3IgaXQgd2lsbCAoYikgYmUgYSBjYXJldCBqdXN0IApkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9lZGl0aW5nL0luc2VydExpc3RDb21tYW5kLmNwcCBiL1dlYkNvcmUvZWRpdGluZy9JbnNl
cnRMaXN0Q29tbWFuZC5jcHAKaW5kZXggZTNkZDliMi4uZDFmNjQ3MyAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9lZGl0aW5nL0luc2VydExpc3RDb21tYW5kLmNwcAorKysgYi9XZWJDb3JlL2VkaXRpbmcv
SW5zZXJ0TGlzdENvbW1hbmQuY3BwCkBAIC0xNDgsOCArMTQ4LDggQEAgdm9pZCBJbnNlcnRMaXN0
Q29tbWFuZDo6ZG9BcHBseSgpCiAgICAgICAgIFZpc2libGVQb3NpdGlvbiBzdGFydDsKICAgICAg
ICAgVmlzaWJsZVBvc2l0aW9uIGVuZDsKICAgICAgICAgaWYgKGxpc3RDaGlsZE5vZGUtPmhhc1Rh
Z05hbWUobGlUYWcpKSB7Ci0gICAgICAgICAgICBzdGFydCA9IFZpc2libGVQb3NpdGlvbihQb3Np
dGlvbihsaXN0Q2hpbGROb2RlLCAwKSk7Ci0gICAgICAgICAgICBlbmQgPSBWaXNpYmxlUG9zaXRp
b24oUG9zaXRpb24obGlzdENoaWxkTm9kZSwgbWF4RGVlcE9mZnNldChsaXN0Q2hpbGROb2RlKSkp
OworICAgICAgICAgICAgc3RhcnQgPSBmaXJzdFBvc2l0aW9uSW5Ob2RlKGxpc3RDaGlsZE5vZGUp
OworICAgICAgICAgICAgZW5kID0gbGFzdFBvc2l0aW9uSW5Ob2RlKGxpc3RDaGlsZE5vZGUpOwog
ICAgICAgICAgICAgbmV4dExpc3RDaGlsZCA9IGxpc3RDaGlsZE5vZGUtPm5leHRTaWJsaW5nKCk7
CiAgICAgICAgICAgICBwcmV2aW91c0xpc3RDaGlsZCA9IGxpc3RDaGlsZE5vZGUtPnByZXZpb3Vz
U2libGluZygpOwogICAgICAgICB9IGVsc2UgewpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9lZGl0aW5n
L1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcCBiL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2Vs
ZWN0aW9uQ29tbWFuZC5jcHAKaW5kZXggZTIwN2ZmZi4uM2ExYTY5NCAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcAorKysgYi9XZWJDb3JlL2Vk
aXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwCkBAIC01MDksMTAgKzUwOSwxMSBAQCB2
b2lkIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpoYW5kbGVQYXN0ZUFzUXVvdGF0aW9uTm9kZSgp
CiBWaXNpYmxlUG9zaXRpb24gUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OnBvc2l0aW9uQXRFbmRP
Zkluc2VydGVkQ29udGVudCgpCiB7CiAgICAgTm9kZSogbGFzdE5vZGUgPSBtX2xhc3RMZWFmSW5z
ZXJ0ZWQuZ2V0KCk7Ci0gICAgTm9kZSogZW5jbG9zaW5nU2VsZWN0ID0gZW5jbG9zaW5nTm9kZVdp
dGhUYWcoUG9zaXRpb24obGFzdE5vZGUsIDApLCBzZWxlY3RUYWcpOworICAgIC8vIEZJWE1FOiBX
aHkgaXMgdGhpcyBoYWNrIGhlcmU/ICBXaGF0J3Mgc3BlY2lhbCBhYm91dCA8c2VsZWN0PiB0YWdz
PworICAgIE5vZGUqIGVuY2xvc2luZ1NlbGVjdCA9IGVuY2xvc2luZ05vZGVXaXRoVGFnKGZpcnN0
UG9zaXRpb25Jbk5vZGUobGFzdE5vZGUpLCBzZWxlY3RUYWcpOwogICAgIGlmIChlbmNsb3NpbmdT
ZWxlY3QpCiAgICAgICAgIGxhc3ROb2RlID0gZW5jbG9zaW5nU2VsZWN0OwotICAgIHJldHVybiBW
aXNpYmxlUG9zaXRpb24oUG9zaXRpb24obGFzdE5vZGUsIG1heERlZXBPZmZzZXQobGFzdE5vZGUp
KSk7CisgICAgcmV0dXJuIGxhc3RQb3NpdGlvbkluTm9kZShsYXN0Tm9kZSk7CiB9CiAKIFZpc2li
bGVQb3NpdGlvbiBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6cG9zaXRpb25BdFN0YXJ0T2ZJbnNl
cnRlZENvbnRlbnQoKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQu
Y3BwIGIvV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwCmluZGV4IGRkZDJmMzEuLmMz
ZGY2NTIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcAorKysg
Yi9XZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29tbWFuZC5jcHAKQEAgLTQ3Nyw3ICs0NzcsNyBAQCB2
b2lkIFR5cGluZ0NvbW1hbmQ6OmZvcndhcmREZWxldGVLZXlQcmVzc2VkKFRleHRHcmFudWxhcml0
eSBncmFudWxhcml0eSwgYm9vbCBraQogICAgICAgICAgICAgICAgIGRvd25zdHJlYW1FbmQgPSB2
aXNpYmxlRW5kLm5leHQodHJ1ZSkuZGVlcEVxdWl2YWxlbnQoKS5kb3duc3RyZWFtKCk7CiAgICAg
ICAgICAgICAvLyBXaGVuIGRlbGV0aW5nIHRhYmxlczogU2VsZWN0IHRoZSB0YWJsZSBmaXJzdCwg
dGhlbiBwZXJmb3JtIHRoZSBkZWxldGlvbgogICAgICAgICAgICAgaWYgKGRvd25zdHJlYW1FbmQu
bm9kZSgpICYmIGRvd25zdHJlYW1FbmQubm9kZSgpLT5yZW5kZXJlcigpICYmIGRvd25zdHJlYW1F
bmQubm9kZSgpLT5yZW5kZXJlcigpLT5pc1RhYmxlKCkgJiYgZG93bnN0cmVhbUVuZC5tX29mZnNl
dCA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgc2V0RW5kaW5nU2VsZWN0aW9uKFZpc2libGVTZWxl
Y3Rpb24oZW5kaW5nU2VsZWN0aW9uKCkuZW5kKCksIFBvc2l0aW9uKGRvd25zdHJlYW1FbmQubm9k
ZSgpLCBtYXhEZWVwT2Zmc2V0KGRvd25zdHJlYW1FbmQubm9kZSgpKSksIERPV05TVFJFQU0pKTsK
KyAgICAgICAgICAgICAgICBzZXRFbmRpbmdTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbihlbmRp
bmdTZWxlY3Rpb24oKS5lbmQoKSwgbGFzdFBvc2l0aW9uSW5Ob2RlKGRvd25zdHJlYW1FbmQubm9k
ZSgpKSwgRE9XTlNUUkVBTSkpOwogICAgICAgICAgICAgICAgIHR5cGluZ0FkZGVkVG9PcGVuQ29t
bWFuZCgpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KZGlmZiAtLWdp
dCBhL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlU2VsZWN0aW9uLmNwcCBiL1dlYkNvcmUvZWRpdGlu
Zy9WaXNpYmxlU2VsZWN0aW9uLmNwcAppbmRleCBmMjYzY2RlLi44NDExMjE2IDEwMDY0NAotLS0g
YS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5jcHAKKysrIGIvV2ViQ29yZS9lZGl0
aW5nL1Zpc2libGVTZWxlY3Rpb24uY3BwCkBAIC05Niw3ICs5Niw3IEBAIFZpc2libGVTZWxlY3Rp
b246OlZpc2libGVTZWxlY3Rpb24oY29uc3QgUmFuZ2UqIHJhbmdlLCBFQWZmaW5pdHkgYWZmaW5p
dHkpCiAKIFZpc2libGVTZWxlY3Rpb24gVmlzaWJsZVNlbGVjdGlvbjo6c2VsZWN0aW9uRnJvbUNv
bnRlbnRzT2ZOb2RlKE5vZGUqIG5vZGUpCiB7Ci0gICAgcmV0dXJuIFZpc2libGVTZWxlY3Rpb24o
UG9zaXRpb24obm9kZSwgMCksIFBvc2l0aW9uKG5vZGUsIG1heERlZXBPZmZzZXQobm9kZSkpLCBE
T1dOU1RSRUFNKTsKKyAgICByZXR1cm4gVmlzaWJsZVNlbGVjdGlvbihmaXJzdFBvc2l0aW9uSW5O
b2RlKG5vZGUpLCBsYXN0UG9zaXRpb25Jbk5vZGUobm9kZSksIERPV05TVFJFQU0pOwogfQogCiB2
b2lkIFZpc2libGVTZWxlY3Rpb246OnNldEJhc2UoY29uc3QgUG9zaXRpb24mIHBvc2l0aW9uKQpA
QCAtNTAyLDEzICs1MDIsMTMgQEAgdm9pZCBWaXNpYmxlU2VsZWN0aW9uOjphZGp1c3RTZWxlY3Rp
b25Ub0F2b2lkQ3Jvc3NpbmdFZGl0aW5nQm91bmRhcmllcygpCiAgICAgICAgICAgICBQb3NpdGlv
biBwID0gcHJldmlvdXNWaXN1YWxseURpc3RpbmN0Q2FuZGlkYXRlKG1fZW5kKTsKICAgICAgICAg
ICAgIE5vZGUqIHNoYWRvd0FuY2VzdG9yID0gZW5kUm9vdCA/IGVuZFJvb3QtPnNoYWRvd0FuY2Vz
dG9yTm9kZSgpIDogMDsKICAgICAgICAgICAgIGlmIChwLmlzTnVsbCgpICYmIGVuZFJvb3QgJiYg
KHNoYWRvd0FuY2VzdG9yICE9IGVuZFJvb3QpKQotICAgICAgICAgICAgICAgIHAgPSBQb3NpdGlv
bihzaGFkb3dBbmNlc3RvciwgbWF4RGVlcE9mZnNldChzaGFkb3dBbmNlc3RvcikpOworICAgICAg
ICAgICAgICAgIHAgPSBsYXN0UG9zaXRpb25Jbk5vZGUoc2hhZG93QW5jZXN0b3IpOwogICAgICAg
ICAgICAgd2hpbGUgKHAuaXNOb3ROdWxsKCkgJiYgIShsb3dlc3RFZGl0YWJsZUFuY2VzdG9yKHAu
bm9kZSgpKSA9PSBiYXNlRWRpdGFibGVBbmNlc3RvciAmJiAhaXNFZGl0YWJsZVBvc2l0aW9uKHAp
KSkgewogICAgICAgICAgICAgICAgIE5vZGUqIHJvb3QgPSBlZGl0YWJsZVJvb3RGb3JQb3NpdGlv
bihwKTsKICAgICAgICAgICAgICAgICBzaGFkb3dBbmNlc3RvciA9IHJvb3QgPyByb290LT5zaGFk
b3dBbmNlc3Rvck5vZGUoKSA6IDA7CiAgICAgICAgICAgICAgICAgcCA9IGlzQXRvbWljTm9kZShw
Lm5vZGUoKSkgPyBwb3NpdGlvbkJlZm9yZU5vZGUocC5ub2RlKCkpIDogcHJldmlvdXNWaXN1YWxs
eURpc3RpbmN0Q2FuZGlkYXRlKHApOwogICAgICAgICAgICAgICAgIGlmIChwLmlzTnVsbCgpICYm
IChzaGFkb3dBbmNlc3RvciAhPSByb290KSkKLSAgICAgICAgICAgICAgICAgICAgcCA9IFBvc2l0
aW9uKHNoYWRvd0FuY2VzdG9yLCBtYXhEZWVwT2Zmc2V0KHNoYWRvd0FuY2VzdG9yKSk7CisgICAg
ICAgICAgICAgICAgICAgIHAgPSBsYXN0UG9zaXRpb25Jbk5vZGUoc2hhZG93QW5jZXN0b3IpOwog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHByZXZpb3VzKHApOwog
CmRpZmYgLS1naXQgYS9XZWJDb3JlL2VkaXRpbmcvaHRtbGVkaXRpbmcuY3BwIGIvV2ViQ29yZS9l
ZGl0aW5nL2h0bWxlZGl0aW5nLmNwcAppbmRleCAzN2E2ZGIxLi45NTcwMzMyIDEwMDY0NAotLS0g
YS9XZWJDb3JlL2VkaXRpbmcvaHRtbGVkaXRpbmcuY3BwCisrKyBiL1dlYkNvcmUvZWRpdGluZy9o
dG1sZWRpdGluZy5jcHAKQEAgLTI1NSwxNCArMjU1LDE0IEBAIFBvc2l0aW9uIHByZXZpb3VzVmlz
dWFsbHlEaXN0aW5jdENhbmRpZGF0ZShjb25zdCBQb3NpdGlvbiYgcG9zaXRpb24pCiBWaXNpYmxl
UG9zaXRpb24gZmlyc3RFZGl0YWJsZVBvc2l0aW9uQWZ0ZXJQb3NpdGlvbkluUm9vdChjb25zdCBQ
b3NpdGlvbiYgcG9zaXRpb24sIE5vZGUqIGhpZ2hlc3RSb290KQogewogICAgIC8vIHBvc2l0aW9u
IGZhbGxzIGJlZm9yZSBoaWdoZXN0Um9vdC4KLSAgICBpZiAoY29tcGFyZVBvc2l0aW9ucyhwb3Np
dGlvbiwgUG9zaXRpb24oaGlnaGVzdFJvb3QsIDApKSA9PSAtMSAmJiBoaWdoZXN0Um9vdC0+aXND
b250ZW50RWRpdGFibGUoKSkKLSAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihQb3NpdGlv
bihoaWdoZXN0Um9vdCwgMCkpOwotICAgICAgICAKKyAgICBpZiAoY29tcGFyZVBvc2l0aW9ucyhw
b3NpdGlvbiwgZmlyc3RQb3NpdGlvbkluTm9kZShoaWdoZXN0Um9vdCkpID09IC0xICYmIGhpZ2hl
c3RSb290LT5pc0NvbnRlbnRFZGl0YWJsZSgpKQorICAgICAgICByZXR1cm4gZmlyc3RQb3NpdGlv
bkluTm9kZShoaWdoZXN0Um9vdCk7CisKICAgICBQb3NpdGlvbiBwID0gcG9zaXRpb247CiAgICAg
CiAgICAgaWYgKE5vZGUqIHNoYWRvd0FuY2VzdG9yID0gcC5ub2RlKCktPnNoYWRvd0FuY2VzdG9y
Tm9kZSgpKQogICAgICAgICBpZiAoc2hhZG93QW5jZXN0b3IgIT0gcC5ub2RlKCkpCi0gICAgICAg
ICAgICBwID0gUG9zaXRpb24oc2hhZG93QW5jZXN0b3IsIG1heERlZXBPZmZzZXQoc2hhZG93QW5j
ZXN0b3IpKTsKKyAgICAgICAgICAgIHAgPSBsYXN0UG9zaXRpb25Jbk5vZGUoc2hhZG93QW5jZXN0
b3IpOwogICAgIAogICAgIHdoaWxlIChwLm5vZGUoKSAmJiAhaXNFZGl0YWJsZVBvc2l0aW9uKHAp
ICYmIHAubm9kZSgpLT5pc0Rlc2NlbmRhbnRPZihoaWdoZXN0Um9vdCkpCiAgICAgICAgIHAgPSBp
c0F0b21pY05vZGUocC5ub2RlKCkpID8gcG9zaXRpb25BZnRlck5vZGUocC5ub2RlKCkpIDogbmV4
dFZpc3VhbGx5RGlzdGluY3RDYW5kaWRhdGUocCk7CkBAIC0yNzYsMTQgKzI3NiwxNCBAQCBWaXNp
YmxlUG9zaXRpb24gZmlyc3RFZGl0YWJsZVBvc2l0aW9uQWZ0ZXJQb3NpdGlvbkluUm9vdChjb25z
dCBQb3NpdGlvbiYgcG9zaXRpbwogVmlzaWJsZVBvc2l0aW9uIGxhc3RFZGl0YWJsZVBvc2l0aW9u
QmVmb3JlUG9zaXRpb25JblJvb3QoY29uc3QgUG9zaXRpb24mIHBvc2l0aW9uLCBOb2RlKiBoaWdo
ZXN0Um9vdCkKIHsKICAgICAvLyBXaGVuIHBvc2l0aW9uIGZhbGxzIGFmdGVyIGhpZ2hlc3RSb290
LCB0aGUgcmVzdWx0IGlzIGVhc3kgdG8gY29tcHV0ZS4KLSAgICBpZiAoY29tcGFyZVBvc2l0aW9u
cyhwb3NpdGlvbiwgUG9zaXRpb24oaGlnaGVzdFJvb3QsIG1heERlZXBPZmZzZXQoaGlnaGVzdFJv
b3QpKSkgPT0gMSkKLSAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihQb3NpdGlvbihoaWdo
ZXN0Um9vdCwgbWF4RGVlcE9mZnNldChoaWdoZXN0Um9vdCkpKTsKLSAgICAgICAgCisgICAgaWYg
KGNvbXBhcmVQb3NpdGlvbnMocG9zaXRpb24sIGxhc3RQb3NpdGlvbkluTm9kZShoaWdoZXN0Um9v
dCkpID09IDEpCisgICAgICAgIHJldHVybiBsYXN0UG9zaXRpb25Jbk5vZGUoaGlnaGVzdFJvb3Qp
OworCiAgICAgUG9zaXRpb24gcCA9IHBvc2l0aW9uOwogICAgIAogICAgIGlmIChOb2RlKiBzaGFk
b3dBbmNlc3RvciA9IHAubm9kZSgpLT5zaGFkb3dBbmNlc3Rvck5vZGUoKSkKICAgICAgICAgaWYg
KHNoYWRvd0FuY2VzdG9yICE9IHAubm9kZSgpKQotICAgICAgICAgICAgcCA9IFBvc2l0aW9uKHNo
YWRvd0FuY2VzdG9yLCAwKTsKKyAgICAgICAgICAgIHAgPSBmaXJzdFBvc2l0aW9uSW5Ob2RlKHNo
YWRvd0FuY2VzdG9yKTsKICAgICAKICAgICB3aGlsZSAocC5ub2RlKCkgJiYgIWlzRWRpdGFibGVQ
b3NpdGlvbihwKSAmJiBwLm5vZGUoKS0+aXNEZXNjZW5kYW50T2YoaGlnaGVzdFJvb3QpKQogICAg
ICAgICBwID0gaXNBdG9taWNOb2RlKHAubm9kZSgpKSA/IHBvc2l0aW9uQmVmb3JlTm9kZShwLm5v
ZGUoKSkgOiBwcmV2aW91c1Zpc3VhbGx5RGlzdGluY3RDYW5kaWRhdGUocCk7CkBAIC0yOTQsNiAr
Mjk0LDcgQEAgVmlzaWJsZVBvc2l0aW9uIGxhc3RFZGl0YWJsZVBvc2l0aW9uQmVmb3JlUG9zaXRp
b25JblJvb3QoY29uc3QgUG9zaXRpb24mIHBvc2l0aW8KICAgICByZXR1cm4gVmlzaWJsZVBvc2l0
aW9uKHApOwogfQogCisvLyBGSVhNRTogVGhlIG1ldGhvZCBuYW1lLCBjb21tZW50LCBhbmQgY29k
ZSBzYXkgdGhyZWUgZGlmZmVyZW50IHRoaW5ncyBoZXJlIQogLy8gV2hldGhlciBvciBub3QgY29u
dGVudCBiZWZvcmUgYW5kIGFmdGVyIHRoaXMgbm9kZSB3aWxsIGNvbGxhcHNlIG9udG8gdGhlIHNh
bWUgbGluZSBhcyBpdC4KIGJvb2wgaXNCbG9jayhjb25zdCBOb2RlKiBub2RlKQogewpAQCAtNjk5
LDE2ICs3MDAsMTcgQEAgc3RhdGljIE5vZGUqIGFwcGVuZGVkU3VibGlzdChOb2RlKiBsaXN0SXRl
bSkKICAgICByZXR1cm4gMDsKIH0KIAorLy8gRklYTUU6IFRoaXMgbWV0aG9kIHNob3VsZCBub3Qg
bmVlZCB0byBjYWxsIGlzU3RhcnRPZlBhcmFncmFwaC9pc0VuZE9mUGFyYWdyYXBoCiBOb2RlKiBl
bmNsb3NpbmdFbXB0eUxpc3RJdGVtKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgdmlzaWJsZVBvcykK
IHsKICAgICAvLyBDaGVjayB0aGF0IHBvc2l0aW9uIGlzIG9uIGEgbGluZSBieSBpdHNlbGYgaW5z
aWRlIGEgbGlzdCBpdGVtCiAgICAgTm9kZSogbGlzdENoaWxkTm9kZSA9IGVuY2xvc2luZ0xpc3RD
aGlsZCh2aXNpYmxlUG9zLmRlZXBFcXVpdmFsZW50KCkubm9kZSgpKTsKICAgICBpZiAoIWxpc3RD
aGlsZE5vZGUgfHwgIWlzU3RhcnRPZlBhcmFncmFwaCh2aXNpYmxlUG9zKSB8fCAhaXNFbmRPZlBh
cmFncmFwaCh2aXNpYmxlUG9zKSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIAotICAgIFZp
c2libGVQb3NpdGlvbiBmaXJzdEluTGlzdENoaWxkKFBvc2l0aW9uKGxpc3RDaGlsZE5vZGUsIDAp
KTsKLSAgICBWaXNpYmxlUG9zaXRpb24gbGFzdEluTGlzdENoaWxkKFBvc2l0aW9uKGxpc3RDaGls
ZE5vZGUsIG1heERlZXBPZmZzZXQobGlzdENoaWxkTm9kZSkpKTsKLSAgICAKKworICAgIFZpc2li
bGVQb3NpdGlvbiBmaXJzdEluTGlzdENoaWxkKGZpcnN0UG9zaXRpb25Jbk5vZGUobGlzdENoaWxk
Tm9kZSkpOworICAgIFZpc2libGVQb3NpdGlvbiBsYXN0SW5MaXN0Q2hpbGQobGFzdFBvc2l0aW9u
SW5Ob2RlKGxpc3RDaGlsZE5vZGUpKTsKKwogICAgIGlmIChmaXJzdEluTGlzdENoaWxkICE9IHZp
c2libGVQb3MgfHwgbGFzdEluTGlzdENoaWxkICE9IHZpc2libGVQb3MpCiAgICAgICAgIHJldHVy
biAwOwogICAgIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9lZGl0aW5nL3Zpc2libGVfdW5pdHMuY3Bw
IGIvV2ViQ29yZS9lZGl0aW5nL3Zpc2libGVfdW5pdHMuY3BwCmluZGV4IDNiOWFlZWYuLjMxMWE5
OTkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZWRpdGluZy92aXNpYmxlX3VuaXRzLmNwcAorKysgYi9X
ZWJDb3JlL2VkaXRpbmcvdmlzaWJsZV91bml0cy5jcHAKQEAgLTgwOSw3ICs4MDksNyBAQCBWaXNp
YmxlUG9zaXRpb24gZW5kT2ZQYXJhZ3JhcGgoY29uc3QgVmlzaWJsZVBvc2l0aW9uICZjKQogICAg
ICAgICAmJiAoKHN0YXJ0Tm9kZS0+cmVuZGVyZXIoKS0+aXNUYWJsZSgpICYmICFzdGFydE5vZGUt
PnJlbmRlcmVyKCktPmlzSW5saW5lKCkpCiAgICAgICAgICAgICB8fCBzdGFydE5vZGUtPnJlbmRl
cmVyKCktPmlzSFIoKSkKICAgICAgICAgJiYgcC5tX29mZnNldCA9PSAwKQotICAgICAgICByZXR1
cm4gVmlzaWJsZVBvc2l0aW9uKFBvc2l0aW9uKHN0YXJ0Tm9kZSwgbWF4RGVlcE9mZnNldChzdGFy
dE5vZGUpKSk7CisgICAgICAgIHJldHVybiBsYXN0UG9zaXRpb25Jbk5vZGUoc3RhcnROb2RlKTsK
ICAgICAKICAgICBOb2RlKiBzdGFydEJsb2NrID0gZW5jbG9zaW5nQmxvY2soc3RhcnROb2RlKTsK
ICAgICBOb2RlICpzdGF5SW5zaWRlQmxvY2sgPSBzdGFydEJsb2NrOwpAQCAtMTAxMCw3ICsxMDEw
LDcgQEAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0T2ZFZGl0YWJsZUNvbnRlbnQoY29uc3QgVmlzaWJs
ZVBvc2l0aW9uJiB2aXNpYmxlUG9zaXRpb24pCiAgICAgaWYgKCFoaWdoZXN0Um9vdCkKICAgICAg
ICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbigpOwogCi0gICAgcmV0dXJuIFZpc2libGVQb3NpdGlv
bihoaWdoZXN0Um9vdCwgMCwgRE9XTlNUUkVBTSk7CisgICAgcmV0dXJuIGZpcnN0UG9zaXRpb25J
bk5vZGUoaGlnaGVzdFJvb3QpOwogfQogCiBWaXNpYmxlUG9zaXRpb24gZW5kT2ZFZGl0YWJsZUNv
bnRlbnQoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2aXNpYmxlUG9zaXRpb24pCkBAIC0xMDE5LDcg
KzEwMTksNyBAQCBWaXNpYmxlUG9zaXRpb24gZW5kT2ZFZGl0YWJsZUNvbnRlbnQoY29uc3QgVmlz
aWJsZVBvc2l0aW9uJiB2aXNpYmxlUG9zaXRpb24pCiAgICAgaWYgKCFoaWdoZXN0Um9vdCkKICAg
ICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbigpOwogCi0gICAgcmV0dXJuIFZpc2libGVQb3Np
dGlvbihoaWdoZXN0Um9vdCwgbWF4RGVlcE9mZnNldChoaWdoZXN0Um9vdCksIERPV05TVFJFQU0p
OworICAgIHJldHVybiBsYXN0UG9zaXRpb25Jbk5vZGUoaGlnaGVzdFJvb3QpOwogfQogCiB9CmRp
ZmYgLS1naXQgYS9XZWJDb3JlL3BhZ2UvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAgYi9XZWJDb3Jl
L3BhZ2UvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAKaW5kZXggYzZlMDc5NS4uOGQwOTk1OSAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9wYWdlL0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCisrKyBiL1dlYkNv
cmUvcGFnZS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcApAQCAtNTE4LDcgKzUxOCw3IEBAIHN0YXRp
YyBWaXNpYmxlUG9zaXRpb24gc3RhcnRPZlN0eWxlUmFuZ2UoY29uc3QgVmlzaWJsZVBvc2l0aW9u
IHZpc2libGVQb3MpCiAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihzdGFydFJlbmRlcmVyLT5u
b2RlKCksIDAsIFZQX0RFRkFVTFRfQUZGSU5JVFkpOwogfQogCi1zdGF0aWMgVmlzaWJsZVBvc2l0
aW9uIGVuZE9mU3R5bGVSYW5nZShjb25zdCBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvcykKK3N0
YXRpYyBWaXNpYmxlUG9zaXRpb24gZW5kT2ZTdHlsZVJhbmdlKGNvbnN0IFZpc2libGVQb3NpdGlv
biYgdmlzaWJsZVBvcykKIHsKICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gdmlzaWJsZVBv
cy5kZWVwRXF1aXZhbGVudCgpLm5vZGUoKS0+cmVuZGVyZXIoKTsKICAgICBSZW5kZXJPYmplY3Qq
IGVuZFJlbmRlcmVyID0gcmVuZGVyZXI7CkBAIC01MzgsNyArNTM4LDcgQEAgc3RhdGljIFZpc2li
bGVQb3NpdGlvbiBlbmRPZlN0eWxlUmFuZ2UoY29uc3QgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQ
b3MpCiAgICAgICAgIGVuZFJlbmRlcmVyID0gcjsKICAgICB9CiAKLSAgICByZXR1cm4gVmlzaWJs
ZVBvc2l0aW9uKGVuZFJlbmRlcmVyLT5ub2RlKCksIG1heERlZXBPZmZzZXQoZW5kUmVuZGVyZXIt
Pm5vZGUoKSksIFZQX0RFRkFVTFRfQUZGSU5JVFkpOworICAgIHJldHVybiBsYXN0UG9zaXRpb25J
bk5vZGUoZW5kUmVuZGVyZXItPm5vZGUoKSk7CiB9CiAKIFZpc2libGVQb3NpdGlvblJhbmdlIEFj
Y2Vzc2liaWxpdHlPYmplY3Q6OnN0eWxlUmFuZ2VGb3JQb3NpdGlvbihjb25zdCBWaXNpYmxlUG9z
aXRpb24mIHZpc2libGVQb3MpIGNvbnN0CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BhZ2UvQWNjZXNz
aWJpbGl0eVJlbmRlck9iamVjdC5jcHAgYi9XZWJDb3JlL3BhZ2UvQWNjZXNzaWJpbGl0eVJlbmRl
ck9iamVjdC5jcHAKaW5kZXggMTBkNzhhYS4uMmJhYzJmYSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9w
YWdlL0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCisrKyBiL1dlYkNvcmUvcGFnZS9BY2Nl
c3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcApAQCAtMTYwMCwxNyArMTYwMCwyMCBAQCBWaXNpYmxl
UG9zaXRpb25SYW5nZSBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojp2aXNpYmxlUG9zaXRpb25S
YW5nZSgpIGNvbnN0CiAgICAgTm9kZSogbm9kZSA9IG1fcmVuZGVyZXItPm5vZGUoKTsKICAgICBp
ZiAoIW5vZGUpCiAgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb25SYW5nZSgpOwotICAgIAot
ICAgIFZpc2libGVQb3NpdGlvbiBzdGFydFBvcyA9IFZpc2libGVQb3NpdGlvbihub2RlLCAwLCBW
UF9ERUZBVUxUX0FGRklOSVRZKTsKLSAgICBWaXNpYmxlUG9zaXRpb24gZW5kUG9zID0gVmlzaWJs
ZVBvc2l0aW9uKG5vZGUsIG1heERlZXBPZmZzZXQobm9kZSksIFZQX0RFRkFVTFRfQUZGSU5JVFkp
OwotICAgIAorCisgICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0UG9zID0gZmlyc3RQb3NpdGlvbklu
Tm9kZShub2RlKTsKKyAgICBWaXNpYmxlUG9zaXRpb24gZW5kUG9zID0gbGFzdFBvc2l0aW9uSW5O
b2RlKG5vZGUpOworCiAgICAgLy8gdGhlIFZpc2libGVQb3NpdGlvbnMgYXJlIGVxdWFsIGZvciBu
b2RlcyBsaWtlIGJ1dHRvbnMsIHNvIGFkanVzdCBmb3IgdGhhdAorICAgIC8vIEZJWE1FOiBSZWFs
bHk/ICBbYnV0dG9uLCAwXSBhbmQgW2J1dHRvbiwgMV0gYXJlIGRpc3RpbmN0IChiZWZvcmUgYW5k
IGFmdGVyIHRoZSBidXR0b24pCisgICAgLy8gSSBleHBlY3QgdGhpcyBjb2RlIGlzIG9ubHkgaGl0
IGZvciB0aGluZ3MgbGlrZSBlbXB0eSBkaXZzPyAgSW4gd2hpY2ggY2FzZSBJIGRvbid0IHRoaW5r
CisgICAgLy8gdGhlIGJlaGF2aW9yIGlzIGNvcnJlY3QgaGVyZSAtLSBlc2VpZGVsCiAgICAgaWYg
KHN0YXJ0UG9zID09IGVuZFBvcykgewogICAgICAgICBlbmRQb3MgPSBlbmRQb3MubmV4dCgpOwog
ICAgICAgICBpZiAoZW5kUG9zLmlzTnVsbCgpKQogICAgICAgICAgICAgZW5kUG9zID0gc3RhcnRQ
b3M7CiAgICAgfQotICAgIAorCiAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvblJhbmdlKHN0YXJ0
UG9zLCBlbmRQb3MpOwogfQogCmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJC
b3guY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAppbmRleCBlYjJkMzBlLi4z
ZjI2ODVhIDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCisrKyBi
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKQEAgLTI2NzQsNyArMjY3NCw3IEBAIFZp
c2libGVQb3NpdGlvbiBSZW5kZXJCb3g6OnBvc2l0aW9uRm9yUG9pbnQoY29uc3QgSW50UG9pbnQm
IHBvaW50KQogewogICAgIC8vIG5vIGNoaWxkcmVuLi4ucmV0dXJuIHRoaXMgcmVuZGVyIG9iamVj
dCdzIGVsZW1lbnQsIGlmIHRoZXJlIGlzIG9uZSwgYW5kIG9mZnNldCAwCiAgICAgaWYgKCFmaXJz
dENoaWxkKCkpCi0gICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24obm9kZSgpLCAwLCBET1dO
U1RSRUFNKTsKKyAgICAgICAgcmV0dXJuIGZpcnN0UG9zaXRpb25Jbk5vZGUobm9kZSgpKTsKIAog
ICAgIGludCB4UG9zID0gcG9pbnQueCgpOwogICAgIGludCB5UG9zID0gcG9pbnQueSgpOwpAQCAt
MjY4NSw5ICsyNjg1LDggQEAgVmlzaWJsZVBvc2l0aW9uIFJlbmRlckJveDo6cG9zaXRpb25Gb3JQ
b2ludChjb25zdCBJbnRQb2ludCYgcG9pbnQpCiAgICAgICAgIAogICAgICAgICBpZiAoeFBvcyA8
IDAgfHwgeFBvcyA+IHJpZ2h0IHx8IHlQb3MgPCAwIHx8IHlQb3MgPiBib3R0b20pIHsKICAgICAg
ICAgICAgIGlmICh4UG9zIDw9IHJpZ2h0IC8gMikKLSAgICAgICAgICAgICAgICByZXR1cm4gVmlz
aWJsZVBvc2l0aW9uKFBvc2l0aW9uKG5vZGUoKSwgMCkpOwotICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oUG9zaXRpb24obm9kZSgpLCBtYXhE
ZWVwT2Zmc2V0KG5vZGUoKSkpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmlyc3RQb3NpdGlv
bkluTm9kZShub2RlKCkpOworICAgICAgICAgICAgcmV0dXJuIGxhc3RQb3NpdGlvbkluTm9kZShu
b2RlKCkpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0yNzU4LDcgKzI3NTcsNyBAQCBWaXNpYmxl
UG9zaXRpb24gUmVuZGVyQm94Ojpwb3NpdGlvbkZvclBvaW50KGNvbnN0IEludFBvaW50JiBwb2lu
dCkKICAgICBpZiAoY2xvc2VzdFJlbmRlcmVyKQogICAgICAgICByZXR1cm4gY2xvc2VzdFJlbmRl
cmVyLT5wb3NpdGlvbkZvckNvb3JkaW5hdGVzKG5ld1ggLSBjbG9zZXN0UmVuZGVyZXItPngoKSwg
bmV3WSAtIGNsb3Nlc3RSZW5kZXJlci0+eSgpKTsKICAgICAKLSAgICByZXR1cm4gVmlzaWJsZVBv
c2l0aW9uKG5vZGUoKSwgMCwgRE9XTlNUUkVBTSk7CisgICAgcmV0dXJuIGZpcnN0UG9zaXRpb25J
bk5vZGUobm9kZSgpKTsKIH0KIAogYm9vbCBSZW5kZXJCb3g6OnNocmlua1RvQXZvaWRGbG9hdHMo
KSBjb25zdAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>28605</attachid>
            <date>2009-03-13 15:23:24 -0700</date>
            <delta_ts>2009-03-20 10:18:56 -0700</delta_ts>
            <desc>Further efforts to remove maxDeepOffset</desc>
            <filename>Further-efforts-to-remove-maxDeepOffset.patch</filename>
            <type>text/plain</type>
            <size>21630</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">YjhjY2M4NGIzZjAwOWM2OGUzNzEwZGM5ZGExM2JiODU0OTdjZmQ1MwpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAzMTgzMzBhLi4zYTAxZTM4
IDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpA
QCAtMiw2ICsyLDYzIEBACiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCiAK
KyAgICAgICAgbWF4RGVlcE9mZnNldCBpcyBjb25mdXNpbmcgYW5kIHNob3VsZCBiZSByZW1vdmVk
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNDU4Ngor
CisgICAgICAgIFJlbmFtZSBQb3NpdGlvbjo6YXRTdGFydCBhbmQgYXRFbmQgdG8gYXRTdGFydE9m
VHJlZSBhdEVuZE9mVHJlZQorICAgICAgICBBZGQgYSBuZXcgUG9zaXRpb246OmF0U3RhcnRPZk5v
ZGUsIGF0RW5kT2ZOb2RlIGFuZCB1c2UgdGhlc2UKKyAgICAgICAgdG8gcmVwbGFjZSBhIGZldyBt
b3JlIGNhbGxlcnMgZm9yIG1heERlZXBPZmZzZXQoKQorICAgICAgICAKKyAgICAgICAgUmVuYW1l
IG1heERlZXBPZmZzZXQgdG8gbGFzdE9mZnNldEluTm9kZSAoc28gdGhhdCB3ZSBtZXJlIG1vcnRh
bHMgaGF2ZSBzb21lIGNsdWUgd2hhdCBpdCBkb2VzKQorICAgICAgICAKKyAgICAgICAgQWJzdHJh
Y3Qgc29tZSBoYXJkLXRvLXJlYWQgKGJ1dCBzaGFyZWQpIGxvZ2ljIGludG8gYSBuZXcgcmVuZGVy
ZWRBc05vbklubGluZVRhYmxlT3JIUiBmdW5jdGlvbi4KKworICAgICAgICAqIGRvbS9Qb3NpdGlv
bi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQb3NpdGlvbjo6bmV4dCk6CisgICAgICAgIChXZWJD
b3JlOjpQb3NpdGlvbjo6YXRTdGFydE9mTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpQb3NpdGlv
bjo6YXRFbmRPZk5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6UG9zaXRpb246OmF0U3RhcnRPZlRy
ZWUpOgorICAgICAgICAoV2ViQ29yZTo6UG9zaXRpb246OmF0RW5kT2ZUcmVlKToKKyAgICAgICAg
KFdlYkNvcmU6OlBvc2l0aW9uOjpwcmV2aW91c0NoYXJhY3RlclBvc2l0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OlBvc2l0aW9uOjpuZXh0Q2hhcmFjdGVyUG9zaXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6UG9zaXRpb246OmlzQ2FuZGlkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6Omxhc3RQb3Np
dGlvbkluTm9kZSk6CisgICAgICAgICogZG9tL1Bvc2l0aW9uLmg6CisgICAgICAgICogZG9tL1Bv
c2l0aW9uSXRlcmF0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UG9zaXRpb25JdGVyYXRvcjo6
b3BlcmF0b3IgUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UG9zaXRpb25JdGVyYXRvcjo6
aW5jcmVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBvc2l0aW9uSXRlcmF0b3I6OmRlY3JlbWVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpQb3NpdGlvbkl0ZXJhdG9yOjphdEVuZCk6CisgICAgICAg
IChXZWJDb3JlOjpQb3NpdGlvbkl0ZXJhdG9yOjphdEVuZE9mTm9kZSk6CisgICAgICAgICogZWRp
dGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRlbGV0
ZVNlbGVjdGlvbkNvbW1hbmQ6OmhhbmRsZUdlbmVyYWxEZWxldGUpOgorICAgICAgICAqIGVkaXRp
bmcvRWRpdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6YWR2YW5jZVRvTmV4dE1p
c3NwZWxsaW5nKToKKyAgICAgICAgKiBlZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpWaXNpYmxlUG9zaXRpb246OnByZXZpb3VzKToKKyAgICAgICAgKFdlYkNv
cmU6OlZpc2libGVQb3NpdGlvbjo6bGVmdFZpc3VhbGx5RGlzdGluY3RDYW5kaWRhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6VmlzaWJsZVBvc2l0aW9uOjpsZWZ0KToKKyAgICAgICAgKFdlYkNvcmU6
OlZpc2libGVQb3NpdGlvbjo6cmlnaHRWaXN1YWxseURpc3RpbmN0Q2FuZGlkYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlZpc2libGVQb3NpdGlvbjo6cmlnaHQpOgorICAgICAgICAqIGVkaXRpbmcv
aHRtbGVkaXRpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bmV4dFZpc3VhbGx5RGlzdGluY3RD
YW5kaWRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6cHJldmlvdXNWaXN1YWxseURpc3RpbmN0Q2Fu
ZGlkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6Omxhc3RPZmZzZXRJbk5vZGUpOgorICAgICAgICAo
V2ViQ29yZTo6aXNGaXJzdFBvc2l0aW9uQWZ0ZXJUYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpp
c0xhc3RQb3NpdGlvbkJlZm9yZVRhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OnBvc2l0aW9uQmVm
b3JlTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpwb3NpdGlvbkFmdGVyTm9kZSk6CisgICAgICAg
IChXZWJDb3JlOjpjYXJldE1heE9mZnNldCk6CisgICAgICAgICogZWRpdGluZy9odG1sZWRpdGlu
Zy5oOgorICAgICAgICAqIGVkaXRpbmcvdmlzaWJsZV91bml0cy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpyZW5kZXJlZEFzTm9uSW5saW5lVGFibGVPckhSKToKKyAgICAgICAgKFdlYkNvcmU6OnN0
YXJ0T2ZQYXJhZ3JhcGgpOgorICAgICAgICAoV2ViQ29yZTo6ZW5kT2ZQYXJhZ3JhcGgpOgorCisy
MDA5LTAzLTEzICBFcmljIFNlaWRlbCAgPGVyaWNAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwogICAgICAgICBGaXJzdCBhdHRlbXB0IHRvIGtpbGwg
bWF4RGVlcE9mZnNldAogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjQ1ODYKICAgICAgICAgCmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9Qb3NpdGlvbi5j
cHAgYi9XZWJDb3JlL2RvbS9Qb3NpdGlvbi5jcHAKaW5kZXggMmYxYjViYi4uZmZmZDU0YiAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9kb20vUG9zaXRpb24uY3BwCisrKyBiL1dlYkNvcmUvZG9tL1Bvc2l0
aW9uLmNwcApAQCAtMTQ3LDcgKzE0Nyw3IEBAIFBvc2l0aW9uIFBvc2l0aW9uOjpuZXh0KFBvc2l0
aW9uTW92ZVR5cGUgbW92ZVR5cGUpIGNvbnN0CiAgICAgQVNTRVJUKG8gPj0gMCk7CiAKICAgICBO
b2RlKiBjaGlsZCA9IG4tPmNoaWxkTm9kZShvKTsKLSAgICBpZiAoY2hpbGQgfHwgIW4tPmhhc0No
aWxkTm9kZXMoKSAmJiBvIDwgbWF4RGVlcE9mZnNldChuKSkgeworICAgIGlmIChjaGlsZCB8fCAh
bi0+aGFzQ2hpbGROb2RlcygpICYmIG8gPCBsYXN0T2Zmc2V0SW5Ob2RlKG4pKSB7CiAgICAgICAg
IGlmIChjaGlsZCkKICAgICAgICAgICAgIHJldHVybiBmaXJzdFBvc2l0aW9uSW5Ob2RlKGNoaWxk
KTsKIApAQCAtMTgxLDIyICsxODEsMzIgQEAgaW50IFBvc2l0aW9uOjp1bmNoZWNrZWROZXh0T2Zm
c2V0KGNvbnN0IE5vZGUqIG4sIGludCBjdXJyZW50KQogICAgIHJldHVybiBuLT5yZW5kZXJlcigp
ID8gbi0+cmVuZGVyZXIoKS0+bmV4dE9mZnNldChjdXJyZW50KSA6IGN1cnJlbnQgKyAxOwogfQog
Ci1ib29sIFBvc2l0aW9uOjphdFN0YXJ0KCkgY29uc3QKK2Jvb2wgUG9zaXRpb246OmF0U3RhcnRP
Zk5vZGUoKSBjb25zdAogewotICAgIE5vZGUgKm4gPSBub2RlKCk7Ci0gICAgaWYgKCFuKQorICAg
IGlmIChpc051bGwoKSkKICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgCi0gICAgcmV0dXJuIG1f
b2Zmc2V0IDw9IDAgJiYgbi0+cGFyZW50KCkgPT0gMDsKKyAgICByZXR1cm4gbV9vZmZzZXQgPD0g
MDsKIH0KIAotYm9vbCBQb3NpdGlvbjo6YXRFbmQoKSBjb25zdAorYm9vbCBQb3NpdGlvbjo6YXRF
bmRPZk5vZGUoKSBjb25zdAogewotICAgIE5vZGUgKm4gPSBub2RlKCk7Ci0gICAgaWYgKCFuKQor
ICAgIGlmIChpc051bGwoKSkKICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgCi0gICAgcmV0dXJu
IG4tPnBhcmVudCgpID09IDAgJiYgbV9vZmZzZXQgPj0gbWF4RGVlcE9mZnNldChuKTsKKyAgICBy
ZXR1cm4gbV9vZmZzZXQgPj0gbGFzdE9mZnNldEluTm9kZShub2RlKCkpOworfQorCitib29sIFBv
c2l0aW9uOjphdFN0YXJ0T2ZUcmVlKCkgY29uc3QKK3sKKyAgICBpZiAoaXNOdWxsKCkpCisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiAhbm9kZSgpLT5wYXJlbnROb2RlKCkgJiYgbV9v
ZmZzZXQgPD0gMDsKK30KKworYm9vbCBQb3NpdGlvbjo6YXRFbmRPZlRyZWUoKSBjb25zdAorewor
ICAgIGlmIChpc051bGwoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuICFub2Rl
KCktPnBhcmVudE5vZGUoKSAmJiBtX29mZnNldCA+PSBsYXN0T2Zmc2V0SW5Ob2RlKG5vZGUoKSk7
CiB9CiAKIGludCBQb3NpdGlvbjo6cmVuZGVyZWRPZmZzZXQoKSBjb25zdApAQCAtMjM1LDcgKzI0
NSw3IEBAIFBvc2l0aW9uIFBvc2l0aW9uOjpwcmV2aW91c0NoYXJhY3RlclBvc2l0aW9uKEVBZmZp
bml0eSBhZmZpbml0eSkgY29uc3QKICAgICBib29sIHJlbmRlcmVkID0gaXNDYW5kaWRhdGUoKTsK
ICAgICAKICAgICBQb3NpdGlvbiBjdXJyZW50UG9zID0gKnRoaXM7Ci0gICAgd2hpbGUgKCFjdXJy
ZW50UG9zLmF0U3RhcnQoKSkgeworICAgIHdoaWxlICghY3VycmVudFBvcy5hdFN0YXJ0T2ZUcmVl
KCkpIHsKICAgICAgICAgY3VycmVudFBvcyA9IGN1cnJlbnRQb3MucHJldmlvdXMoKTsKIAogICAg
ICAgICBpZiAoY3VycmVudFBvcy5ub2RlKCktPnJvb3RFZGl0YWJsZUVsZW1lbnQoKSAhPSBmcm9t
Um9vdEVkaXRhYmxlRWxlbWVudCkKQEAgLTI2Myw3ICsyNzMsNyBAQCBQb3NpdGlvbiBQb3NpdGlv
bjo6bmV4dENoYXJhY3RlclBvc2l0aW9uKEVBZmZpbml0eSBhZmZpbml0eSkgY29uc3QKICAgICBi
b29sIHJlbmRlcmVkID0gaXNDYW5kaWRhdGUoKTsKICAgICAKICAgICBQb3NpdGlvbiBjdXJyZW50
UG9zID0gKnRoaXM7Ci0gICAgd2hpbGUgKCFjdXJyZW50UG9zLmF0RW5kKCkpIHsKKyAgICB3aGls
ZSAoIWN1cnJlbnRQb3MuYXRFbmRPZlRyZWUoKSkgewogICAgICAgICBjdXJyZW50UG9zID0gY3Vy
cmVudFBvcy5uZXh0KCk7CiAKICAgICAgICAgaWYgKGN1cnJlbnRQb3Mubm9kZSgpLT5yb290RWRp
dGFibGVFbGVtZW50KCkgIT0gZnJvbVJvb3RFZGl0YWJsZUVsZW1lbnQpCkBAIC0yNzksNyArMjg5
LDcgQEAgUG9zaXRpb24gUG9zaXRpb246Om5leHRDaGFyYWN0ZXJQb3NpdGlvbihFQWZmaW5pdHkg
YWZmaW5pdHkpIGNvbnN0CiAgICAgcmV0dXJuICp0aGlzOwogfQogCi0vLyBXaGV0aGVyIG9yIG5v
dCBbbm9kZSwgMF0gYW5kIFtub2RlLCBtYXhEZWVwT2Zmc2V0KG5vZGUpXSBhcmUgdGhlaXIgb3du
IFZpc2libGVQb3NpdGlvbnMuCisvLyBXaGV0aGVyIG9yIG5vdCBbbm9kZSwgMF0gYW5kIFtub2Rl
LCBsYXN0T2Zmc2V0SW5Ob2RlKG5vZGUpXSBhcmUgdGhlaXIgb3duIFZpc2libGVQb3NpdGlvbnMu
CiAvLyBJZiB0cnVlLCBhZGphY2VudCBjYW5kaWRhdGVzIGFyZSB2aXN1YWxseSBkaXN0aW5jdC4K
IC8vIEZJWE1FOiBEaXNyZWdhcmQgbm9kZXMgd2l0aCByZW5kZXJlcnMgdGhhdCBoYXZlIG5vIGhl
aWdodCwgYXMgd2UgZG8gaW4gaXNDYW5kaWRhdGUuCiAvLyBGSVhNRTogU2hhcmUgY29kZSB3aXRo
IGlzQ2FuZGlkYXRlLCBpZiBwb3NzaWJsZS4KQEAgLTU4MCwxMSArNTkwLDExIEBAIGJvb2wgUG9z
aXRpb246OmlzQ2FuZGlkYXRlKCkgY29uc3QKICAgICAgICAgcmV0dXJuIGluUmVuZGVyZWRUZXh0
KCkgJiYgIW5vZGVJc1VzZXJTZWxlY3ROb25lKG5vZGUoKSk7CiAKICAgICBpZiAoaXNUYWJsZUVs
ZW1lbnQobm9kZSgpKSB8fCBlZGl0aW5nSWdub3Jlc0NvbnRlbnQobm9kZSgpKSkKLSAgICAgICAg
cmV0dXJuIChtX29mZnNldCA9PSAwIHx8IG1fb2Zmc2V0ID09IG1heERlZXBPZmZzZXQobm9kZSgp
KSkgJiYgIW5vZGVJc1VzZXJTZWxlY3ROb25lKG5vZGUoKS0+cGFyZW50KCkpOworICAgICAgICBy
ZXR1cm4gKGF0U3RhcnRPZk5vZGUoKSB8fCBhdEVuZE9mTm9kZSgpKSAmJiAhbm9kZUlzVXNlclNl
bGVjdE5vbmUobm9kZSgpLT5wYXJlbnQoKSk7CiAKICAgICBpZiAoIW5vZGUoKS0+aGFzVGFnTmFt
ZShodG1sVGFnKSAmJiByZW5kZXJlci0+aXNCbG9ja0Zsb3coKSAmJiAhaGFzUmVuZGVyZWROb25B
bm9ueW1vdXNEZXNjZW5kYW50c1dpdGhIZWlnaHQocmVuZGVyZXIpICYmCiAgICAgICAgKHRvUmVu
ZGVyQm94KHJlbmRlcmVyKS0+aGVpZ2h0KCkgfHwgbm9kZSgpLT5oYXNUYWdOYW1lKGJvZHlUYWcp
KSkKLSAgICAgICAgcmV0dXJuIG1fb2Zmc2V0ID09IDAgJiYgIW5vZGVJc1VzZXJTZWxlY3ROb25l
KG5vZGUoKSk7CisgICAgICAgIHJldHVybiBhdFN0YXJ0T2ZOb2RlKCkgJiYgIW5vZGVJc1VzZXJT
ZWxlY3ROb25lKG5vZGUoKSk7CiAgICAgCiAgICAgcmV0dXJuIGZhbHNlOwogfQpAQCAtMTAwNyw3
ICsxMDE3LDcgQEAgUG9zaXRpb24gZmlyc3RQb3NpdGlvbkluTm9kZShOb2RlKiBub2RlKQogCiBQ
b3NpdGlvbiBsYXN0UG9zaXRpb25Jbk5vZGUoTm9kZSogbm9kZSkKIHsKLSAgICByZXR1cm4gUG9z
aXRpb24obm9kZSwgbWF4RGVlcE9mZnNldChub2RlKSk7CisgICAgcmV0dXJuIFBvc2l0aW9uKG5v
ZGUsIGxhc3RPZmZzZXRJbk5vZGUobm9kZSkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9Qb3NpdGlvbi5oIGIvV2ViQ29yZS9kb20vUG9zaXRp
b24uaAppbmRleCAzYTdhYjUzLi5jY2YyOGU0IDEwMDY0NAotLS0gYS9XZWJDb3JlL2RvbS9Qb3Np
dGlvbi5oCisrKyBiL1dlYkNvcmUvZG9tL1Bvc2l0aW9uLmgKQEAgLTc4LDggKzc4LDExIEBAIHB1
YmxpYzoKICAgICBzdGF0aWMgaW50IHVuY2hlY2tlZFByZXZpb3VzT2Zmc2V0Rm9yQmFja3dhcmRE
ZWxldGlvbihjb25zdCBOb2RlKiwgaW50IGN1cnJlbnQpOwogICAgIHN0YXRpYyBpbnQgdW5jaGVj
a2VkTmV4dE9mZnNldChjb25zdCBOb2RlKiwgaW50IGN1cnJlbnQpOwogCi0gICAgYm9vbCBhdFN0
YXJ0KCkgY29uc3Q7Ci0gICAgYm9vbCBhdEVuZCgpIGNvbnN0OworICAgIGJvb2wgYXRTdGFydE9m
Tm9kZSgpIGNvbnN0OworICAgIGJvb2wgYXRFbmRPZk5vZGUoKSBjb25zdDsKKworICAgIGJvb2wg
YXRTdGFydE9mVHJlZSgpIGNvbnN0OworICAgIGJvb2wgYXRFbmRPZlRyZWUoKSBjb25zdDsKIAog
ICAgIC8vIEZJWE1FOiBNYWtlIHRoZXNlIG5vbi1tZW1iZXIgZnVuY3Rpb25zIGFuZCBwdXQgdGhl
bSBzb21ld2hlcmUgaW4gdGhlIGVkaXRpbmcgZGlyZWN0b3J5LgogICAgIC8vIFRoZXNlIGFyZW4n
dCByZWFsbHkgYmFzaWMgInBvc2l0aW9uIiBvcGVyYXRpb25zLiBNb3JlIGhpZ2ggbGV2ZWwgZWRp
dGluZyBoZWxwZXIgZnVuY3Rpb25zLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vUG9zaXRpb25J
dGVyYXRvci5jcHAgYi9XZWJDb3JlL2RvbS9Qb3NpdGlvbkl0ZXJhdG9yLmNwcAppbmRleCBkZDkx
MjhkLi5lNDkwZjZkIDEwMDY0NAotLS0gYS9XZWJDb3JlL2RvbS9Qb3NpdGlvbkl0ZXJhdG9yLmNw
cAorKysgYi9XZWJDb3JlL2RvbS9Qb3NpdGlvbkl0ZXJhdG9yLmNwcApAQCAtMzYsNyArMzYsMTMg
QEAgdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAogUG9zaXRpb25JdGVyYXRvcjo6b3BlcmF0
b3IgUG9zaXRpb24oKSBjb25zdAogewotICAgIHJldHVybiBQb3NpdGlvbihtX3BhcmVudCwgbV9j
aGlsZCA/IG1fY2hpbGQtPm5vZGVJbmRleCgpIDogKG1fcGFyZW50LT5oYXNDaGlsZE5vZGVzKCkg
PyBtYXhEZWVwT2Zmc2V0KG1fcGFyZW50KSA6IG1fb2Zmc2V0KSk7CisgICAgaWYgKG1fY2hpbGQp
IHsKKyAgICAgICAgQVNTRVJUKG1fY2hpbGQtPnBhcmVudE5vZGUoKSA9PSBtX3BhcmVudCk7Cisg
ICAgICAgIHJldHVybiBwb3NpdGlvbkJlZm9yZU5vZGUobV9jaGlsZCk7CisgICAgfQorICAgIGlm
IChtX3BhcmVudC0+aGFzQ2hpbGROb2RlcygpKQorICAgICAgICByZXR1cm4gbGFzdFBvc2l0aW9u
SW5Ob2RlKG1fcGFyZW50KTsKKyAgICByZXR1cm4gUG9zaXRpb24obV9wYXJlbnQsIG1fb2Zmc2V0
KTsKIH0KIAogdm9pZCBQb3NpdGlvbkl0ZXJhdG9yOjppbmNyZW1lbnQoKQpAQCAtNTEsNyArNTcs
NyBAQCB2b2lkIFBvc2l0aW9uSXRlcmF0b3I6OmluY3JlbWVudCgpCiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKLSAgICBpZiAoIW1fcGFyZW50LT5oYXNDaGlsZE5vZGVzKCkgJiYgbV9vZmZzZXQg
PCBtYXhEZWVwT2Zmc2V0KG1fcGFyZW50KSkKKyAgICBpZiAoIW1fcGFyZW50LT5oYXNDaGlsZE5v
ZGVzKCkgJiYgbV9vZmZzZXQgPCBsYXN0T2Zmc2V0SW5Ob2RlKG1fcGFyZW50KSkKICAgICAgICAg
bV9vZmZzZXQgPSBQb3NpdGlvbjo6dW5jaGVja2VkTmV4dE9mZnNldChtX3BhcmVudCwgbV9vZmZz
ZXQpOwogICAgIGVsc2UgewogICAgICAgICBtX2NoaWxkID0gbV9wYXJlbnQ7CkBAIC03MCw3ICs3
Niw3IEBAIHZvaWQgUG9zaXRpb25JdGVyYXRvcjo6ZGVjcmVtZW50KCkKICAgICAgICAgbV9wYXJl
bnQgPSBtX2NoaWxkLT5wcmV2aW91c1NpYmxpbmcoKTsKICAgICAgICAgaWYgKG1fcGFyZW50KSB7
CiAgICAgICAgICAgICBtX2NoaWxkID0gMDsKLSAgICAgICAgICAgIG1fb2Zmc2V0ID0gbV9wYXJl
bnQtPmhhc0NoaWxkTm9kZXMoKSA/IDAgOiBtYXhEZWVwT2Zmc2V0KG1fcGFyZW50KTsKKyAgICAg
ICAgICAgIG1fb2Zmc2V0ID0gbV9wYXJlbnQtPmhhc0NoaWxkTm9kZXMoKSA/IDAgOiBsYXN0T2Zm
c2V0SW5Ob2RlKG1fcGFyZW50KTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIG1fY2hp
bGQgPSBtX2NoaWxkLT5wYXJlbnROb2RlKCk7CiAgICAgICAgICAgICBtX3BhcmVudCA9IG1fY2hp
bGQtPnBhcmVudE5vZGUoKTsKQEAgLTg1LDcgKzkxLDcgQEAgdm9pZCBQb3NpdGlvbkl0ZXJhdG9y
OjpkZWNyZW1lbnQoKQogICAgICAgICBpZiAobV9wYXJlbnQtPmhhc0NoaWxkTm9kZXMoKSkgewog
ICAgICAgICAgICAgbV9wYXJlbnQgPSBtX3BhcmVudC0+bGFzdENoaWxkKCk7CiAgICAgICAgICAg
ICBpZiAoIW1fcGFyZW50LT5oYXNDaGlsZE5vZGVzKCkpCi0gICAgICAgICAgICAgICAgbV9vZmZz
ZXQgPSBtYXhEZWVwT2Zmc2V0KG1fcGFyZW50KTsKKyAgICAgICAgICAgICAgICBtX29mZnNldCA9
IGxhc3RPZmZzZXRJbk5vZGUobV9wYXJlbnQpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAg
ICAgbV9jaGlsZCA9IG1fcGFyZW50OwogICAgICAgICAgICAgbV9wYXJlbnQgPSBtX3BhcmVudC0+
cGFyZW50Tm9kZSgpOwpAQCAtMTA4LDcgKzExNCw3IEBAIGJvb2wgUG9zaXRpb25JdGVyYXRvcjo6
YXRFbmQoKSBjb25zdAogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBpZiAobV9jaGlsZCkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiAhbV9wYXJlbnQtPnBhcmVudE5vZGUoKSAm
JiAobV9wYXJlbnQtPmhhc0NoaWxkTm9kZXMoKSB8fCBtX29mZnNldCA+PSBtYXhEZWVwT2Zmc2V0
KG1fcGFyZW50KSk7CisgICAgcmV0dXJuICFtX3BhcmVudC0+cGFyZW50Tm9kZSgpICYmIChtX3Bh
cmVudC0+aGFzQ2hpbGROb2RlcygpIHx8IG1fb2Zmc2V0ID49IGxhc3RPZmZzZXRJbk5vZGUobV9w
YXJlbnQpKTsKIH0KIAogYm9vbCBQb3NpdGlvbkl0ZXJhdG9yOjphdFN0YXJ0T2ZOb2RlKCkgY29u
c3QKQEAgLTEyNiw3ICsxMzIsNyBAQCBib29sIFBvc2l0aW9uSXRlcmF0b3I6OmF0RW5kT2ZOb2Rl
KCkgY29uc3QKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgaWYgKG1fY2hpbGQpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gbV9wYXJlbnQtPmhhc0NoaWxkTm9kZXMoKSB8fCBt
X29mZnNldCA+PSBtYXhEZWVwT2Zmc2V0KG1fcGFyZW50KTsKKyAgICByZXR1cm4gbV9wYXJlbnQt
Pmhhc0NoaWxkTm9kZXMoKSB8fCBtX29mZnNldCA+PSBsYXN0T2Zmc2V0SW5Ob2RlKG1fcGFyZW50
KTsKIH0KIAogYm9vbCBQb3NpdGlvbkl0ZXJhdG9yOjppc0NhbmRpZGF0ZSgpIGNvbnN0CmRpZmYg
LS1naXQgYS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAgYi9XZWJD
b3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAKaW5kZXggZTJiMTUwMi4uZDdi
MDAzNCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQu
Y3BwCisrKyBiL1dlYkNvcmUvZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcApAQCAt
NDExLDcgKzQxMSw3IEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6aGFuZGxlR2VuZXJh
bERlbGV0ZSgpCiAgICAgICAgICAgICBkZWxldGVUZXh0RnJvbU5vZGUodGV4dCwgY2FyZXRNYXhP
ZmZzZXQoc3RhcnROb2RlKSwgdGV4dC0+bGVuZ3RoKCkgLSBjYXJldE1heE9mZnNldChzdGFydE5v
ZGUpKTsKICAgICB9CiAKLSAgICBpZiAoc3RhcnRPZmZzZXQgPj0gbWF4RGVlcE9mZnNldChzdGFy
dE5vZGUpKSB7CisgICAgaWYgKHN0YXJ0T2Zmc2V0ID49IGxhc3RPZmZzZXRJbk5vZGUoc3RhcnRO
b2RlKSkgewogICAgICAgICBzdGFydE5vZGUgPSBzdGFydE5vZGUtPnRyYXZlcnNlTmV4dFNpYmxp
bmcoKTsKICAgICAgICAgc3RhcnRPZmZzZXQgPSAwOwogICAgIH0KQEAgLTQyMiwxNCArNDIyLDEz
IEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6aGFuZGxlR2VuZXJhbERlbGV0ZSgpCiAK
ICAgICBpZiAoc3RhcnROb2RlID09IG1fZG93bnN0cmVhbUVuZC5ub2RlKCkpIHsKICAgICAgICAg
Ly8gVGhlIHNlbGVjdGlvbiB0byBkZWxldGUgaXMgYWxsIGluIG9uZSBub2RlLgotICAgICAgICBp
ZiAoIXN0YXJ0Tm9kZS0+cmVuZGVyZXIoKSB8fCAKLSAgICAgICAgICAgIChzdGFydE9mZnNldCA9
PSAwICYmIG1fZG93bnN0cmVhbUVuZC5tX29mZnNldCA+PSBtYXhEZWVwT2Zmc2V0KHN0YXJ0Tm9k
ZSkpKSB7CisgICAgICAgIGlmICghc3RhcnROb2RlLT5yZW5kZXJlcigpIHx8IChzdGFydE9mZnNl
dCA9PSAwICYmIG1fZG93bnN0cmVhbUVuZC5hdEVuZE9mTm9kZSgpKSkgewogICAgICAgICAgICAg
Ly8ganVzdCBkZWxldGUKICAgICAgICAgICAgIHJlbW92ZU5vZGUoc3RhcnROb2RlKTsKICAgICAg
ICAgfSBlbHNlIGlmIChtX2Rvd25zdHJlYW1FbmQubV9vZmZzZXQgLSBzdGFydE9mZnNldCA+IDAp
IHsKICAgICAgICAgICAgIGlmIChzdGFydE5vZGUtPmlzVGV4dE5vZGUoKSkgewogICAgICAgICAg
ICAgICAgIC8vIGluIGEgdGV4dCBub2RlIHRoYXQgbmVlZHMgdG8gYmUgdHJpbW1lZAotICAgICAg
ICAgICAgICAgIFRleHQgKnRleHQgPSBzdGF0aWNfY2FzdDxUZXh0ICo+KHN0YXJ0Tm9kZSk7Cisg
ICAgICAgICAgICAgICAgVGV4dCogdGV4dCA9IHN0YXRpY19jYXN0PFRleHQqPihzdGFydE5vZGUp
OwogICAgICAgICAgICAgICAgIGRlbGV0ZVRleHRGcm9tTm9kZSh0ZXh0LCBzdGFydE9mZnNldCwg
bV9kb3duc3RyZWFtRW5kLm1fb2Zmc2V0IC0gc3RhcnRPZmZzZXQpOwogICAgICAgICAgICAgfSBl
bHNlIHsKICAgICAgICAgICAgICAgICByZW1vdmVDaGlsZHJlbkluUmFuZ2Uoc3RhcnROb2RlLCBz
dGFydE9mZnNldCwgbV9kb3duc3RyZWFtRW5kLm1fb2Zmc2V0KTsKQEAgLTQ3OSw3ICs0NzgsNyBA
QCB2b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmhhbmRsZUdlbmVyYWxEZWxldGUoKQogICAg
ICAgICB9CiAgICAgICAgIAogICAgICAgICBpZiAobV9kb3duc3RyZWFtRW5kLm5vZGUoKSAhPSBz
dGFydE5vZGUgJiYgIW1fdXBzdHJlYW1TdGFydC5ub2RlKCktPmlzRGVzY2VuZGFudE9mKG1fZG93
bnN0cmVhbUVuZC5ub2RlKCkpICYmIG1fZG93bnN0cmVhbUVuZC5ub2RlKCktPmluRG9jdW1lbnQo
KSAmJiBtX2Rvd25zdHJlYW1FbmQubV9vZmZzZXQgPj0gY2FyZXRNaW5PZmZzZXQobV9kb3duc3Ry
ZWFtRW5kLm5vZGUoKSkpIHsKLSAgICAgICAgICAgIGlmIChtX2Rvd25zdHJlYW1FbmQubV9vZmZz
ZXQgPj0gbWF4RGVlcE9mZnNldChtX2Rvd25zdHJlYW1FbmQubm9kZSgpKSAmJiAhY2FuSGF2ZUNo
aWxkcmVuRm9yRWRpdGluZyhtX2Rvd25zdHJlYW1FbmQubm9kZSgpKSkgeworICAgICAgICAgICAg
aWYgKG1fZG93bnN0cmVhbUVuZC5hdEVuZE9mTm9kZSgpICYmICFjYW5IYXZlQ2hpbGRyZW5Gb3JF
ZGl0aW5nKG1fZG93bnN0cmVhbUVuZC5ub2RlKCkpKSB7CiAgICAgICAgICAgICAgICAgLy8gVGhl
IG5vZGUgaXRzZWxmIGlzIGZ1bGx5IHNlbGVjdGVkLCBub3QganVzdCBpdHMgY29udGVudHMuICBE
ZWxldGUgaXQuCiAgICAgICAgICAgICAgICAgcmVtb3ZlTm9kZShtX2Rvd25zdHJlYW1FbmQubm9k
ZSgpKTsKICAgICAgICAgICAgIH0gZWxzZSB7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2VkaXRpbmcv
RWRpdG9yLmNwcCBiL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCmluZGV4IGRiM2M5ZjguLjIx
NjE0NDUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCisrKyBiL1dlYkNv
cmUvZWRpdGluZy9FZGl0b3IuY3BwCkBAIC0xNzAyLDggKzE3MDIsOCBAQCB2b2lkIEVkaXRvcjo6
YWR2YW5jZVRvTmV4dE1pc3NwZWxsaW5nKGJvb2wgc3RhcnRCZWZvcmVTZWxlY3Rpb24pCiAgICAg
CiAgICAgLy8gdG9wTm9kZSBkZWZpbmVzIHRoZSB3aG9sZSByYW5nZSB3ZSB3YW50IHRvIG9wZXJh
dGUgb24gCiAgICAgTm9kZSogdG9wTm9kZSA9IGhpZ2hlc3RFZGl0YWJsZVJvb3QocG9zaXRpb24p
OwotICAgIC8vIEZJWE1FOiBtYXhEZWVwT2Zmc2V0KCkgaXMgd3JvbmcgaGVyZSBpZiBlZGl0aW5n
SWdub3Jlc0NvbnRlbnQoaGlnaGVzdEVkaXRhYmxlUm9vdCgpKSByZXR1cm5zIHRydWUgKGUuZy4g
YSA8dGFibGU+KQotICAgIHNwZWxsaW5nU2VhcmNoUmFuZ2UtPnNldEVuZCh0b3BOb2RlLCBtYXhE
ZWVwT2Zmc2V0KHRvcE5vZGUpLCBlYyk7CisgICAgLy8gRklYTUU6IGxhc3RPZmZzZXRJbk5vZGUo
KSBpcyB3cm9uZyBoZXJlIGlmIGVkaXRpbmdJZ25vcmVzQ29udGVudChoaWdoZXN0RWRpdGFibGVS
b290KCkpIHJldHVybnMgdHJ1ZSAoZS5nLiBhIDx0YWJsZT4pCisgICAgc3BlbGxpbmdTZWFyY2hS
YW5nZS0+c2V0RW5kKHRvcE5vZGUsIGxhc3RPZmZzZXRJbk5vZGUodG9wTm9kZSksIGVjKTsKIAog
ICAgIC8vIElmIHNwZWxsaW5nU2VhcmNoUmFuZ2Ugc3RhcnRzIGluIHRoZSBtaWRkbGUgb2YgYSB3
b3JkLCBhZHZhbmNlIHRvIHRoZSBuZXh0IHdvcmQgc28gd2Ugc3RhcnQgY2hlY2tpbmcKICAgICAv
LyBhdCBhIHdvcmQgYm91bmRhcnkuIEdvaW5nIGJhY2sgYnkgb25lIGNoYXIgYW5kIHRoZW4gZm9y
d2FyZCBieSBhIHdvcmQgZG9lcyB0aGUgdHJpY2suCmRpZmYgLS1naXQgYS9XZWJDb3JlL2VkaXRp
bmcvVmlzaWJsZVBvc2l0aW9uLmNwcCBiL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlUG9zaXRpb24u
Y3BwCmluZGV4IDQ5NWM4ZDguLmZmNjJlY2YgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZWRpdGluZy9W
aXNpYmxlUG9zaXRpb24uY3BwCisrKyBiL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlUG9zaXRpb24u
Y3BwCkBAIC04MSw3ICs4MSw3IEBAIFZpc2libGVQb3NpdGlvbiBWaXNpYmxlUG9zaXRpb246OnBy
ZXZpb3VzKGJvb2wgc3RheUluRWRpdGFibGVDb250ZW50KSBjb25zdAogICAgIFBvc2l0aW9uIHBv
cyA9IHByZXZpb3VzVmlzdWFsbHlEaXN0aW5jdENhbmRpZGF0ZShtX2RlZXBQb3NpdGlvbik7CiAg
ICAgCiAgICAgLy8gcmV0dXJuIG51bGwgdmlzaWJsZSBwb3NpdGlvbiBpZiB0aGVyZSBpcyBubyBw
cmV2aW91cyB2aXNpYmxlIHBvc2l0aW9uCi0gICAgaWYgKHBvcy5hdFN0YXJ0KCkpCisgICAgaWYg
KHBvcy5hdFN0YXJ0T2ZUcmVlKCkpCiAgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oKTsK
ICAgICAgICAgCiAgICAgVmlzaWJsZVBvc2l0aW9uIHByZXYgPSBWaXNpYmxlUG9zaXRpb24ocG9z
LCBET1dOU1RSRUFNKTsKQEAgLTIyMyw3ICsyMjMsNyBAQCBQb3NpdGlvbiBWaXNpYmxlUG9zaXRp
b246OmxlZnRWaXN1YWxseURpc3RpbmN0Q2FuZGlkYXRlKCkgY29uc3QKIAogICAgICAgICBwID0g
UG9zaXRpb24ocmVuZGVyZXItPm5vZGUoKSwgb2Zmc2V0KTsKIAotICAgICAgICBpZiAocC5pc0Nh
bmRpZGF0ZSgpICYmIHAuZG93bnN0cmVhbSgpICE9IGRvd25zdHJlYW1TdGFydCB8fCBwLmF0U3Rh
cnQoKSB8fCBwLmF0RW5kKCkpCisgICAgICAgIGlmIChwLmlzQ2FuZGlkYXRlKCkgJiYgcC5kb3du
c3RyZWFtKCkgIT0gZG93bnN0cmVhbVN0YXJ0IHx8IHAuYXRTdGFydE9mVHJlZSgpIHx8IHAuYXRF
bmRPZlRyZWUoKSkKICAgICAgICAgICAgIHJldHVybiBwOwogICAgIH0KIH0KQEAgLTIzMSw3ICsy
MzEsOCBAQCBQb3NpdGlvbiBWaXNpYmxlUG9zaXRpb246OmxlZnRWaXN1YWxseURpc3RpbmN0Q2Fu
ZGlkYXRlKCkgY29uc3QKIFZpc2libGVQb3NpdGlvbiBWaXNpYmxlUG9zaXRpb246OmxlZnQoYm9v
bCBzdGF5SW5FZGl0YWJsZUNvbnRlbnQpIGNvbnN0CiB7CiAgICAgUG9zaXRpb24gcG9zID0gbGVm
dFZpc3VhbGx5RGlzdGluY3RDYW5kaWRhdGUoKTsKLSAgICBpZiAocG9zLmF0U3RhcnQoKSB8fCBw
b3MuYXRFbmQoKSkKKyAgICAvLyBGSVhNRTogV2h5IGNhbid0IHdlIG1vdmUgbGVmdCBmcm9tIHRo
ZSBsYXN0IHBvc2l0aW9uIGluIGEgdHJlZT8KKyAgICBpZiAocG9zLmF0U3RhcnRPZlRyZWUoKSB8
fCBwb3MuYXRFbmRPZlRyZWUoKSkKICAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbigpOwog
CiAgICAgVmlzaWJsZVBvc2l0aW9uIGxlZnQgPSBWaXNpYmxlUG9zaXRpb24ocG9zLCBET1dOU1RS
RUFNKTsKQEAgLTM2NSw3ICszNjYsNyBAQCBQb3NpdGlvbiBWaXNpYmxlUG9zaXRpb246OnJpZ2h0
VmlzdWFsbHlEaXN0aW5jdENhbmRpZGF0ZSgpIGNvbnN0CiAKICAgICAgICAgcCA9IFBvc2l0aW9u
KHJlbmRlcmVyLT5ub2RlKCksIG9mZnNldCk7CiAKLSAgICAgICAgaWYgKHAuaXNDYW5kaWRhdGUo
KSAmJiBwLmRvd25zdHJlYW0oKSAhPSBkb3duc3RyZWFtU3RhcnQgfHwgcC5hdFN0YXJ0KCkgfHwg
cC5hdEVuZCgpKQorICAgICAgICBpZiAocC5pc0NhbmRpZGF0ZSgpICYmIHAuZG93bnN0cmVhbSgp
ICE9IGRvd25zdHJlYW1TdGFydCB8fCBwLmF0U3RhcnRPZlRyZWUoKSB8fCBwLmF0RW5kT2ZUcmVl
KCkpCiAgICAgICAgICAgICByZXR1cm4gcDsKICAgICB9CiB9CkBAIC0zNzMsNyArMzc0LDggQEAg
UG9zaXRpb24gVmlzaWJsZVBvc2l0aW9uOjpyaWdodFZpc3VhbGx5RGlzdGluY3RDYW5kaWRhdGUo
KSBjb25zdAogVmlzaWJsZVBvc2l0aW9uIFZpc2libGVQb3NpdGlvbjo6cmlnaHQoYm9vbCBzdGF5
SW5FZGl0YWJsZUNvbnRlbnQpIGNvbnN0CiB7CiAgICAgUG9zaXRpb24gcG9zID0gcmlnaHRWaXN1
YWxseURpc3RpbmN0Q2FuZGlkYXRlKCk7Ci0gICAgaWYgKHBvcy5hdFN0YXJ0KCkgfHwgcG9zLmF0
RW5kKCkpCisgICAgLy8gRklYTUU6IFdoeSBjYW4ndCB3ZSBtb3ZlIGxlZnQgZnJvbSB0aGUgbGFz
dCBwb3NpdGlvbiBpbiBhIHRyZWU/CisgICAgaWYgKHBvcy5hdFN0YXJ0T2ZUcmVlKCkgfHwgcG9z
LmF0RW5kT2ZUcmVlKCkpCiAgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oKTsKIAogICAg
IFZpc2libGVQb3NpdGlvbiByaWdodCA9IFZpc2libGVQb3NpdGlvbihwb3MsIERPV05TVFJFQU0p
OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcCBiL1dlYkNvcmUv
ZWRpdGluZy9odG1sZWRpdGluZy5jcHAKaW5kZXggOTU3MDMzMi4uOTBjNDM3YyAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcAorKysgYi9XZWJDb3JlL2VkaXRpbmcv
aHRtbGVkaXRpbmcuY3BwCkBAIC0yMjEsNyArMjIxLDcgQEAgUG9zaXRpb24gbmV4dFZpc3VhbGx5
RGlzdGluY3RDYW5kaWRhdGUoY29uc3QgUG9zaXRpb24mIHBvc2l0aW9uKQogewogICAgIFBvc2l0
aW9uIHAgPSBwb3NpdGlvbjsKICAgICBQb3NpdGlvbiBkb3duc3RyZWFtU3RhcnQgPSBwLmRvd25z
dHJlYW0oKTsKLSAgICB3aGlsZSAoIXAuYXRFbmQoKSkgeworICAgIHdoaWxlICghcC5hdEVuZE9m
VHJlZSgpKSB7CiAgICAgICAgIHAgPSBwLm5leHQoQ2hhcmFjdGVyKTsKICAgICAgICAgaWYgKHAu
aXNDYW5kaWRhdGUoKSAmJiBwLmRvd25zdHJlYW0oKSAhPSBkb3duc3RyZWFtU3RhcnQpCiAgICAg
ICAgICAgICByZXR1cm4gcDsKQEAgLTI0NCw3ICsyNDQsNyBAQCBQb3NpdGlvbiBwcmV2aW91c1Zp
c3VhbGx5RGlzdGluY3RDYW5kaWRhdGUoY29uc3QgUG9zaXRpb24mIHBvc2l0aW9uKQogewogICAg
IFBvc2l0aW9uIHAgPSBwb3NpdGlvbjsKICAgICBQb3NpdGlvbiBkb3duc3RyZWFtU3RhcnQgPSBw
LmRvd25zdHJlYW0oKTsKLSAgICB3aGlsZSAoIXAuYXRTdGFydCgpKSB7CisgICAgd2hpbGUgKCFw
LmF0U3RhcnRPZlRyZWUoKSkgewogICAgICAgICBwID0gcC5wcmV2aW91cyhDaGFyYWN0ZXIpOwog
ICAgICAgICBpZiAocC5pc0NhbmRpZGF0ZSgpICYmIHAuZG93bnN0cmVhbSgpICE9IGRvd25zdHJl
YW1TdGFydCkKICAgICAgICAgICAgIHJldHVybiBwOwpAQCAtMzYyLDcgKzM2Miw3IEBAIFBvc2l0
aW9uIHJhbmdlQ29tcGxpYW50RXF1aXZhbGVudChjb25zdCBWaXNpYmxlUG9zaXRpb24mIHZwb3Mp
CiAvLyBpbiBhIG5vZGUuICBJdCByZXR1cm5zIDEgZm9yIHNvbWUgZWxlbWVudHMgZXZlbiB0aG91
Z2ggdGhleSBkbyBub3QgaGF2ZSBjaGlsZHJlbiwgd2hpY2gKIC8vIGNyZWF0ZXMgdGVjaG5pY2Fs
bHkgaW52YWxpZCBET00gUG9zaXRpb25zLiAgQmUgc3VyZSB0byBjYWxsIHJhbmdlQ29tcGxpYW50
RXF1aXZhbGVudAogLy8gb24gYSBQb3NpdGlvbiBiZWZvcmUgdXNpbmcgaXQgdG8gY3JlYXRlIGEg
RE9NIFJhbmdlLCBvciBhbiBleGNlcHRpb24gd2lsbCBiZSB0aHJvd24uCi1pbnQgbWF4RGVlcE9m
ZnNldChjb25zdCBOb2RlICpub2RlKQoraW50IGxhc3RPZmZzZXRJbk5vZGUoY29uc3QgTm9kZSog
bm9kZSkKIHsKICAgICBBU1NFUlQobm9kZSk7CiAgICAgaWYgKCFub2RlKQpAQCAtNTQyLDcgKzU0
Miw3IEBAIFBvc2l0aW9uIHBvc2l0aW9uT3V0c2lkZUNvbnRhaW5pbmdTcGVjaWFsRWxlbWVudChj
b25zdCBQb3NpdGlvbiAmcG9zLCBOb2RlICoqY29uCiBOb2RlKiBpc0ZpcnN0UG9zaXRpb25BZnRl
clRhYmxlKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgdmlzaWJsZVBvc2l0aW9uKQogewogICAgIFBv
c2l0aW9uIHVwc3RyZWFtKHZpc2libGVQb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgpLnVwc3RyZWFt
KCkpOwotICAgIGlmICh1cHN0cmVhbS5ub2RlKCkgJiYgdXBzdHJlYW0ubm9kZSgpLT5yZW5kZXJl
cigpICYmIHVwc3RyZWFtLm5vZGUoKS0+cmVuZGVyZXIoKS0+aXNUYWJsZSgpICYmIHVwc3RyZWFt
Lm1fb2Zmc2V0ID09IG1heERlZXBPZmZzZXQodXBzdHJlYW0ubm9kZSgpKSkKKyAgICBpZiAodXBz
dHJlYW0ubm9kZSgpICYmIHVwc3RyZWFtLm5vZGUoKS0+cmVuZGVyZXIoKSAmJiB1cHN0cmVhbS5u
b2RlKCktPnJlbmRlcmVyKCktPmlzVGFibGUoKSAmJiB1cHN0cmVhbS5hdEVuZE9mTm9kZSgpKQog
ICAgICAgICByZXR1cm4gdXBzdHJlYW0ubm9kZSgpOwogICAgIAogICAgIHJldHVybiAwOwpAQCAt
NTUxLDE5ICs1NTEsMjEgQEAgTm9kZSogaXNGaXJzdFBvc2l0aW9uQWZ0ZXJUYWJsZShjb25zdCBW
aXNpYmxlUG9zaXRpb24mIHZpc2libGVQb3NpdGlvbikKIE5vZGUqIGlzTGFzdFBvc2l0aW9uQmVm
b3JlVGFibGUoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2aXNpYmxlUG9zaXRpb24pCiB7CiAgICAg
UG9zaXRpb24gZG93bnN0cmVhbSh2aXNpYmxlUG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKS5kb3du
c3RyZWFtKCkpOwotICAgIGlmIChkb3duc3RyZWFtLm5vZGUoKSAmJiBkb3duc3RyZWFtLm5vZGUo
KS0+cmVuZGVyZXIoKSAmJiBkb3duc3RyZWFtLm5vZGUoKS0+cmVuZGVyZXIoKS0+aXNUYWJsZSgp
ICYmIGRvd25zdHJlYW0ubV9vZmZzZXQgPT0gMCkKKyAgICBpZiAoZG93bnN0cmVhbS5ub2RlKCkg
JiYgZG93bnN0cmVhbS5ub2RlKCktPnJlbmRlcmVyKCkgJiYgZG93bnN0cmVhbS5ub2RlKCktPnJl
bmRlcmVyKCktPmlzVGFibGUoKSAmJiBkb3duc3RyZWFtLmF0U3RhcnRPZk5vZGUoKSkKICAgICAg
ICAgcmV0dXJuIGRvd25zdHJlYW0ubm9kZSgpOwogICAgIAogICAgIHJldHVybiAwOwogfQogCi1Q
b3NpdGlvbiBwb3NpdGlvbkJlZm9yZU5vZGUoY29uc3QgTm9kZSAqbm9kZSkKK1Bvc2l0aW9uIHBv
c2l0aW9uQmVmb3JlTm9kZShjb25zdCBOb2RlKiBub2RlKQogeworICAgIC8vIEZJWE1FOiBUaGlz
IHNob3VsZCBBU1NFUlQobm9kZS0+cGFyZW50Tm9kZSgpKQogICAgIHJldHVybiBQb3NpdGlvbihu
b2RlLT5wYXJlbnROb2RlKCksIG5vZGUtPm5vZGVJbmRleCgpKTsKIH0KIAotUG9zaXRpb24gcG9z
aXRpb25BZnRlck5vZGUoY29uc3QgTm9kZSAqbm9kZSkKK1Bvc2l0aW9uIHBvc2l0aW9uQWZ0ZXJO
b2RlKGNvbnN0IE5vZGUqIG5vZGUpCiB7CisgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIEFTU0VS
VChub2RlLT5wYXJlbnROb2RlKCkpCiAgICAgcmV0dXJuIFBvc2l0aW9uKG5vZGUtPnBhcmVudE5v
ZGUoKSwgbm9kZS0+bm9kZUluZGV4KCkgKyAxKTsKIH0KIApAQCAtOTAxLDcgKzkwMyw3IEBAIGlu
dCBjYXJldE1heE9mZnNldChjb25zdCBOb2RlKiBuKQogICAgIGlmIChuLT5pc1RleHROb2RlKCkg
JiYgbi0+cmVuZGVyZXIoKSkKICAgICAgICAgcmV0dXJuIG4tPnJlbmRlcmVyKCktPmNhcmV0TWF4
T2Zmc2V0KCk7CiAgICAgLy8gRm9yIGNvbnRhaW5lcnMgcmV0dXJuIHRoZSBudW1iZXIgb2YgY2hp
bGRyZW4uICBGb3Igb3RoZXJzIGRvIHRoZSBzYW1lIGFzIGFib3ZlLgotICAgIHJldHVybiBtYXhE
ZWVwT2Zmc2V0KG4pOworICAgIHJldHVybiBsYXN0T2Zmc2V0SW5Ob2RlKG4pOwogfQogCiBib29s
IGxpbmVCcmVha0V4aXN0c0F0UG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2aXNpYmxl
UG9zaXRpb24pCmRpZmYgLS1naXQgYS9XZWJDb3JlL2VkaXRpbmcvaHRtbGVkaXRpbmcuaCBiL1dl
YkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5oCmluZGV4IDNhNzUyM2UuLjVjNGI2MzggMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5oCisrKyBiL1dlYkNvcmUvZWRpdGlu
Zy9odG1sZWRpdGluZy5oCkBAIC00Myw3ICs0Myw3IEBAIGNsYXNzIFZpc2libGVQb3NpdGlvbjsK
IAogUG9zaXRpb24gcmFuZ2VDb21wbGlhbnRFcXVpdmFsZW50KGNvbnN0IFBvc2l0aW9uJik7CiBQ
b3NpdGlvbiByYW5nZUNvbXBsaWFudEVxdWl2YWxlbnQoY29uc3QgVmlzaWJsZVBvc2l0aW9uJik7
Ci1pbnQgbWF4RGVlcE9mZnNldChjb25zdCBOb2RlKik7CitpbnQgbGFzdE9mZnNldEluTm9kZShj
b25zdCBOb2RlKik7CiBib29sIGlzQXRvbWljTm9kZShjb25zdCBOb2RlKik7CiBib29sIGVkaXRp
bmdJZ25vcmVzQ29udGVudChjb25zdCBOb2RlKik7CiBib29sIGNhbkhhdmVDaGlsZHJlbkZvckVk
aXRpbmcoY29uc3QgTm9kZSopOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9lZGl0aW5nL3Zpc2libGVf
dW5pdHMuY3BwIGIvV2ViQ29yZS9lZGl0aW5nL3Zpc2libGVfdW5pdHMuY3BwCmluZGV4IDMxMWE5
OTkuLjY2ZDNkZGIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZWRpdGluZy92aXNpYmxlX3VuaXRzLmNw
cAorKysgYi9XZWJDb3JlL2VkaXRpbmcvdmlzaWJsZV91bml0cy5jcHAKQEAgLTczMyw4ICs3MzMs
MTMgQEAgVmlzaWJsZVBvc2l0aW9uIG5leHRTZW50ZW5jZVBvc2l0aW9uKGNvbnN0IFZpc2libGVQ
b3NpdGlvbiAmYykKICAgICByZXR1cm4gYy5ob25vckVkaXRhYmxlQm91bmRhcnlBdE9yQmVmb3Jl
KG5leHQpOwogfQogCitzdGF0aWMgYm9vbCByZW5kZXJlZEFzTm9uSW5saW5lVGFibGVPckhSKFJl
bmRlck9iamVjdCogcmVuZGVyZXIpCit7CisgICAgcmV0dXJuIHJlbmRlcmVyICYmICgocmVuZGVy
ZXItPmlzVGFibGUoKSAmJiAhcmVuZGVyZXItPmlzSW5saW5lKCkpIHx8IHJlbmRlcmVyLT5pc0hS
KCkpOworfQorCiAvLyBGSVhNRTogQnJva2VuIGZvciBwb3NpdGlvbnMgYmVmb3JlL2FmdGVyIGlt
YWdlcyB0aGF0IGFyZW4ndCBpbmxpbmUgKDUwMjc3MDIpCi1WaXNpYmxlUG9zaXRpb24gc3RhcnRP
ZlBhcmFncmFwaChjb25zdCBWaXNpYmxlUG9zaXRpb24gJmMpCitWaXNpYmxlUG9zaXRpb24gc3Rh
cnRPZlBhcmFncmFwaChjb25zdCBWaXNpYmxlUG9zaXRpb24mIGMpCiB7CiAgICAgUG9zaXRpb24g
cCA9IGMuZGVlcEVxdWl2YWxlbnQoKTsKICAgICBOb2RlICpzdGFydE5vZGUgPSBwLm5vZGUoKTsK
QEAgLTc0MiwxMSArNzQ3LDggQEAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0T2ZQYXJhZ3JhcGgoY29u
c3QgVmlzaWJsZVBvc2l0aW9uICZjKQogICAgIGlmICghc3RhcnROb2RlKQogICAgICAgICByZXR1
cm4gVmlzaWJsZVBvc2l0aW9uKCk7CiAgICAgCi0gICAgaWYgKHN0YXJ0Tm9kZS0+cmVuZGVyZXIo
KQotICAgICAgICAmJiAoKHN0YXJ0Tm9kZS0+cmVuZGVyZXIoKS0+aXNUYWJsZSgpICYmICFzdGFy
dE5vZGUtPnJlbmRlcmVyKCktPmlzSW5saW5lKCkpCi0gICAgICAgICAgICB8fCBzdGFydE5vZGUt
PnJlbmRlcmVyKCktPmlzSFIoKSkKLSAgICAgICAgJiYgcC5tX29mZnNldCA9PSBtYXhEZWVwT2Zm
c2V0KHN0YXJ0Tm9kZSkpCi0gICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oUG9zaXRpb24o
c3RhcnROb2RlLCAwKSk7CisgICAgaWYgKHJlbmRlcmVkQXNOb25JbmxpbmVUYWJsZU9ySFIoc3Rh
cnROb2RlLT5yZW5kZXJlcigpKSAmJiBwLmF0RW5kT2ZOb2RlKCkpCisgICAgICAgIHJldHVybiBm
aXJzdFBvc2l0aW9uSW5Ob2RlKHN0YXJ0Tm9kZSk7CiAKICAgICBOb2RlKiBzdGFydEJsb2NrID0g
ZW5jbG9zaW5nQmxvY2soc3RhcnROb2RlKTsKIApAQCAtODA1LDEwICs4MDcsNyBAQCBWaXNpYmxl
UG9zaXRpb24gZW5kT2ZQYXJhZ3JhcGgoY29uc3QgVmlzaWJsZVBvc2l0aW9uICZjKQogICAgIFBv
c2l0aW9uIHAgPSBjLmRlZXBFcXVpdmFsZW50KCk7CiAgICAgTm9kZSogc3RhcnROb2RlID0gcC5u
b2RlKCk7CiAKLSAgICBpZiAoc3RhcnROb2RlLT5yZW5kZXJlcigpCi0gICAgICAgICYmICgoc3Rh
cnROb2RlLT5yZW5kZXJlcigpLT5pc1RhYmxlKCkgJiYgIXN0YXJ0Tm9kZS0+cmVuZGVyZXIoKS0+
aXNJbmxpbmUoKSkKLSAgICAgICAgICAgIHx8IHN0YXJ0Tm9kZS0+cmVuZGVyZXIoKS0+aXNIUigp
KQotICAgICAgICAmJiBwLm1fb2Zmc2V0ID09IDApCisgICAgaWYgKHJlbmRlcmVkQXNOb25Jbmxp
bmVUYWJsZU9ySFIoc3RhcnROb2RlLT5yZW5kZXJlcigpKSAmJiBwLmF0U3RhcnRPZk5vZGUoKSkK
ICAgICAgICAgcmV0dXJuIGxhc3RQb3NpdGlvbkluTm9kZShzdGFydE5vZGUpOwogICAgIAogICAg
IE5vZGUqIHN0YXJ0QmxvY2sgPSBlbmNsb3NpbmdCbG9jayhzdGFydE5vZGUpOwpAQCAtODUxLDcg
Kzg1MCw3IEBAIFZpc2libGVQb3NpdGlvbiBlbmRPZlBhcmFncmFwaChjb25zdCBWaXNpYmxlUG9z
aXRpb24gJmMpCiAgICAgICAgICAgICBuID0gbi0+dHJhdmVyc2VOZXh0Tm9kZShzdGF5SW5zaWRl
QmxvY2spOwogICAgICAgICB9IGVsc2UgaWYgKGVkaXRpbmdJZ25vcmVzQ29udGVudChuKSB8fCBp
c1RhYmxlRWxlbWVudChuKSkgewogICAgICAgICAgICAgbm9kZSA9IG47Ci0gICAgICAgICAgICBv
ZmZzZXQgPSBtYXhEZWVwT2Zmc2V0KG4pOworICAgICAgICAgICAgb2Zmc2V0ID0gbGFzdE9mZnNl
dEluTm9kZShuKTsKICAgICAgICAgICAgIG4gPSBuLT50cmF2ZXJzZU5leHRTaWJsaW5nKHN0YXlJ
bnNpZGVCbG9jayk7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgbiA9IG4tPnRyYXZlcnNl
TmV4dE5vZGUoc3RheUluc2lkZUJsb2NrKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>28775</attachid>
            <date>2009-03-19 18:14:18 -0700</date>
            <delta_ts>2009-03-20 10:19:08 -0700</delta_ts>
            <desc>Rename first/lastPositionInNode to first/lastDeepEditingPositionForNode</desc>
            <filename>Rename-first-lastPositionInNode-to-first-lastDeepEditingPositionForNode.patch</filename>
            <type>text/plain</type>
            <size>18779</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">YTRhMTM0NmZiNjc4YzQzZTRiYTY4NjkzMGVjZGUzNzVjOTJjNWQxOQpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9kb20vUG9zaXRpb24uY3BwIGIvV2ViQ29yZS9kb20vUG9zaXRpb24uY3BwCmluZGV4IGZm
ZmQ1NGIuLjVhNDM0ZmEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL1Bvc2l0aW9uLmNwcAorKysg
Yi9XZWJDb3JlL2RvbS9Qb3NpdGlvbi5jcHAKQEAgLTExMCw3ICsxMTAsNyBAQCBQb3NpdGlvbiBQ
b3NpdGlvbjo6cHJldmlvdXMoUG9zaXRpb25Nb3ZlVHlwZSBtb3ZlVHlwZSkgY29uc3QKICAgICBp
ZiAobyA+IDApIHsKICAgICAgICAgTm9kZSogY2hpbGQgPSBuLT5jaGlsZE5vZGUobyAtIDEpOwog
ICAgICAgICBpZiAoY2hpbGQpCi0gICAgICAgICAgICByZXR1cm4gbGFzdFBvc2l0aW9uSW5Ob2Rl
KGNoaWxkKTsKKyAgICAgICAgICAgIHJldHVybiBsYXN0RGVlcEVkaXRpbmdQb3NpdGlvbkZvck5v
ZGUoY2hpbGQpOwogCiAgICAgICAgIC8vIFRoZXJlIGFyZSB0d28gcmVhc29ucyBjaGlsZCBtaWdo
dCBiZSAwOgogICAgICAgICAvLyAgIDEpIFRoZSBub2RlIGlzIG5vZGUgbGlrZSBhIHRleHQgbm9k
ZSB0aGF0IGlzIG5vdCBhbiBlbGVtZW50LCBhbmQgdGhlcmVmb3JlIGhhcyBubyBjaGlsZHJlbi4K
QEAgLTE0OSw3ICsxNDksNyBAQCBQb3NpdGlvbiBQb3NpdGlvbjo6bmV4dChQb3NpdGlvbk1vdmVU
eXBlIG1vdmVUeXBlKSBjb25zdAogICAgIE5vZGUqIGNoaWxkID0gbi0+Y2hpbGROb2RlKG8pOwog
ICAgIGlmIChjaGlsZCB8fCAhbi0+aGFzQ2hpbGROb2RlcygpICYmIG8gPCBsYXN0T2Zmc2V0SW5O
b2RlKG4pKSB7CiAgICAgICAgIGlmIChjaGlsZCkKLSAgICAgICAgICAgIHJldHVybiBmaXJzdFBv
c2l0aW9uSW5Ob2RlKGNoaWxkKTsKKyAgICAgICAgICAgIHJldHVybiBmaXJzdERlZXBFZGl0aW5n
UG9zaXRpb25Gb3JOb2RlKGNoaWxkKTsKIAogICAgICAgICAvLyBUaGVyZSBhcmUgdHdvIHJlYXNv
bnMgY2hpbGQgbWlnaHQgYmUgMDoKICAgICAgICAgLy8gICAxKSBUaGUgbm9kZSBpcyBub2RlIGxp
a2UgYSB0ZXh0IG5vZGUgdGhhdCBpcyBub3QgYW4gZWxlbWVudCwgYW5kIHRoZXJlZm9yZSBoYXMg
bm8gY2hpbGRyZW4uCkBAIC0zODMsNyArMzgzLDcgQEAgUG9zaXRpb24gUG9zaXRpb246OnVwc3Ry
ZWFtKCkgY29uc3QKICAgICAgICAgLy8gUmV0dXJuIHBvc2l0aW9uIGFmdGVyIHRhYmxlcyBhbmQg
bm9kZXMgd2hpY2ggaGF2ZSBjb250ZW50IHRoYXQgY2FuIGJlIGlnbm9yZWQuCiAgICAgICAgIGlm
IChlZGl0aW5nSWdub3Jlc0NvbnRlbnQoY3VycmVudE5vZGUpIHx8IGlzVGFibGVFbGVtZW50KGN1
cnJlbnROb2RlKSkgewogICAgICAgICAgICAgaWYgKGN1cnJlbnRQb3MuYXRFbmRPZk5vZGUoKSkK
LSAgICAgICAgICAgICAgICByZXR1cm4gbGFzdFBvc2l0aW9uSW5Ob2RlKGN1cnJlbnROb2RlKTsK
KyAgICAgICAgICAgICAgICByZXR1cm4gbGFzdERlZXBFZGl0aW5nUG9zaXRpb25Gb3JOb2RlKGN1
cnJlbnROb2RlKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKQEAgLTEwMDgs
MTQgKzEwMDgsMTUgQEAgUG9zaXRpb24gZW5kUG9zaXRpb24oY29uc3QgUmFuZ2UqIHIpCiAgICAg
cmV0dXJuIHIgPyByLT5lbmRQb3NpdGlvbigpIDogUG9zaXRpb24oKTsKIH0KIAotLy8gTk9URTog
Zmlyc3QvbGFzdFBvc2l0aW9uSW5Ob2RlIHJldHVybiAiZWRpdGluZyBwb3NpdGlvbnMiIChsaWtl
IFtpbWcsIDBdKQotLy8gd2hpY2ggdGhlIHJlc3Qgb2YgdGhlIGVkaXRpbmcgY29kZSB3aWxsIHRy
ZWF0IGFzICJ0aGUgZmlyc3QgcG9zaXRpb24gYmVmb3JlIHRoZSBpbWFnZSIKLVBvc2l0aW9uIGZp
cnN0UG9zaXRpb25Jbk5vZGUoTm9kZSogbm9kZSkKKy8vIE5PVEU6IGZpcnN0L2xhc3REZWVwRWRp
dGluZ1Bvc2l0aW9uRm9yTm9kZSBjYW4gcmV0dXJuICJlZGl0aW5nIHBvc2l0aW9ucyIgKGxpa2Ug
W2ltZywgMF0pCisvLyBmb3IgZWxlbWVudHMgd2hpY2ggZWRpdGluZyAiaWdub3JlcyIuICB0aGUg
cmVzdCBvZiB0aGUgZWRpdGluZyBjb2RlIHdpbGwgdHJlYXQgW2ltZywgMF0KKy8vIGFzICJ0aGUg
Zmlyc3QgcG9zaXRpb24gYmVmb3JlIHRoZSBpbWFnZSIKK1Bvc2l0aW9uIGZpcnN0RGVlcEVkaXRp
bmdQb3NpdGlvbkZvck5vZGUoTm9kZSogbm9kZSkKIHsKICAgICByZXR1cm4gUG9zaXRpb24obm9k
ZSwgMCk7CiB9CiAKLVBvc2l0aW9uIGxhc3RQb3NpdGlvbkluTm9kZShOb2RlKiBub2RlKQorUG9z
aXRpb24gbGFzdERlZXBFZGl0aW5nUG9zaXRpb25Gb3JOb2RlKE5vZGUqIG5vZGUpCiB7CiAgICAg
cmV0dXJuIFBvc2l0aW9uKG5vZGUsIGxhc3RPZmZzZXRJbk5vZGUobm9kZSkpOwogfQpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9kb20vUG9zaXRpb24uaCBiL1dlYkNvcmUvZG9tL1Bvc2l0aW9uLmgKaW5k
ZXggY2NmMjhlNC4uZGY5NzU1NiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vUG9zaXRpb24uaAor
KysgYi9XZWJDb3JlL2RvbS9Qb3NpdGlvbi5oCkBAIC0xMzEsMTAgKzEzMSwxMSBAQCBpbmxpbmUg
Ym9vbCBvcGVyYXRvciE9KGNvbnN0IFBvc2l0aW9uJiBhLCBjb25zdCBQb3NpdGlvbiYgYikKIFBv
c2l0aW9uIHN0YXJ0UG9zaXRpb24oY29uc3QgUmFuZ2UqKTsKIFBvc2l0aW9uIGVuZFBvc2l0aW9u
KGNvbnN0IFJhbmdlKik7CiAKLS8vIE5PVEU6IGZpcnN0L2xhc3RQb3NpdGlvbkluTm9kZSByZXR1
cm4gImVkaXRpbmcgcG9zaXRpb25zIiAobGlrZSBbaW1nLCAwXSkKLS8vIHdoaWNoIHRoZSByZXN0
IG9mIHRoZSBlZGl0aW5nIGNvZGUgd2lsbCB0cmVhdCBhcyAidGhlIGZpcnN0IHBvc2l0aW9uIGJl
Zm9yZSB0aGUgaW1hZ2UiCi1Qb3NpdGlvbiBmaXJzdFBvc2l0aW9uSW5Ob2RlKE5vZGUqKTsKLVBv
c2l0aW9uIGxhc3RQb3NpdGlvbkluTm9kZShOb2RlKik7CisvLyBOT1RFOiBmaXJzdC9sYXN0RGVl
cEVkaXRpbmdQb3NpdGlvbkZvck5vZGUgY2FuIHJldHVybiAiZWRpdGluZyBwb3NpdGlvbnMiIChs
aWtlIFtpbWcsIDBdKQorLy8gZm9yIGVsZW1lbnRzIHdoaWNoIGVkaXRpbmcgImlnbm9yZXMiLiAg
dGhlIHJlc3Qgb2YgdGhlIGVkaXRpbmcgY29kZSB3aWxsIHRyZWF0IFtpbWcsIDBdCisvLyBhcyAi
dGhlIGZpcnN0IHBvc2l0aW9uIGJlZm9yZSB0aGUgaW1hZ2UiCitQb3NpdGlvbiBmaXJzdERlZXBF
ZGl0aW5nUG9zaXRpb25Gb3JOb2RlKE5vZGUqKTsKK1Bvc2l0aW9uIGxhc3REZWVwRWRpdGluZ1Bv
c2l0aW9uRm9yTm9kZShOb2RlKik7CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9kb20vUG9zaXRpb25JdGVyYXRvci5jcHAgYi9XZWJDb3JlL2RvbS9Qb3Np
dGlvbkl0ZXJhdG9yLmNwcAppbmRleCBlNDkwZjZkLi45NGM4NDM0IDEwMDY0NAotLS0gYS9XZWJD
b3JlL2RvbS9Qb3NpdGlvbkl0ZXJhdG9yLmNwcAorKysgYi9XZWJDb3JlL2RvbS9Qb3NpdGlvbkl0
ZXJhdG9yLmNwcApAQCAtNDEsNyArNDEsNyBAQCBQb3NpdGlvbkl0ZXJhdG9yOjpvcGVyYXRvciBQ
b3NpdGlvbigpIGNvbnN0CiAgICAgICAgIHJldHVybiBwb3NpdGlvbkJlZm9yZU5vZGUobV9jaGls
ZCk7CiAgICAgfQogICAgIGlmIChtX3BhcmVudC0+aGFzQ2hpbGROb2RlcygpKQotICAgICAgICBy
ZXR1cm4gbGFzdFBvc2l0aW9uSW5Ob2RlKG1fcGFyZW50KTsKKyAgICAgICAgcmV0dXJuIGxhc3RE
ZWVwRWRpdGluZ1Bvc2l0aW9uRm9yTm9kZShtX3BhcmVudCk7CiAgICAgcmV0dXJuIFBvc2l0aW9u
KG1fcGFyZW50LCBtX29mZnNldCk7CiB9CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZWRpdGluZy9D
b21wb3NpdGVFZGl0Q29tbWFuZC5jcHAgYi9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENv
bW1hbmQuY3BwCmluZGV4IDZjODI2OTYuLjkwNTI1ODIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZWRp
dGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAKKysrIGIvV2ViQ29yZS9lZGl0aW5nL0NvbXBv
c2l0ZUVkaXRDb21tYW5kLmNwcApAQCAtOTc5LDggKzk3OSw4IEBAIFBvc2l0aW9uIENvbXBvc2l0
ZUVkaXRDb21tYW5kOjpwb3NpdGlvbkF2b2lkaW5nU3BlY2lhbEVsZW1lbnRCb3VuZGFyeShjb25z
dCBQb3NpCiAgICAgUG9zaXRpb24gcmVzdWx0ID0gb3JpZ2luYWw7CiAgICAgLy8gRG9uJ3QgYXZv
aWQgYmxvY2sgbGV2ZWwgYW5jaG9ycywgYmVjYXVzZSB0aGF0IHdvdWxkIGluc2VydCBjb250ZW50
IGludG8gdGhlIHdyb25nIHBhcmFncmFwaC4KICAgICBpZiAoZW5jbG9zaW5nQW5jaG9yICYmICFp
c0Jsb2NrKGVuY2xvc2luZ0FuY2hvcikpIHsKLSAgICAgICAgVmlzaWJsZVBvc2l0aW9uIGZpcnN0
SW5BbmNob3IoZmlyc3RQb3NpdGlvbkluTm9kZShlbmNsb3NpbmdBbmNob3IpKTsKLSAgICAgICAg
VmlzaWJsZVBvc2l0aW9uIGxhc3RJbkFuY2hvcihsYXN0UG9zaXRpb25Jbk5vZGUoZW5jbG9zaW5n
QW5jaG9yKSk7CisgICAgICAgIFZpc2libGVQb3NpdGlvbiBmaXJzdEluQW5jaG9yKGZpcnN0RGVl
cEVkaXRpbmdQb3NpdGlvbkZvck5vZGUoZW5jbG9zaW5nQW5jaG9yKSk7CisgICAgICAgIFZpc2li
bGVQb3NpdGlvbiBsYXN0SW5BbmNob3IobGFzdERlZXBFZGl0aW5nUG9zaXRpb25Gb3JOb2RlKGVu
Y2xvc2luZ0FuY2hvcikpOwogICAgICAgICAvLyBJZiB2aXN1YWxseSBqdXN0IGFmdGVyIHRoZSBh
bmNob3IsIGluc2VydCAqaW5zaWRlKiB0aGUgYW5jaG9yIHVubGVzcyBpdCdzIHRoZSBsYXN0IAog
ICAgICAgICAvLyBWaXNpYmxlUG9zaXRpb24gaW4gdGhlIGRvY3VtZW50LCB0byBtYXRjaCBOU1Rl
eHRWaWV3LgogICAgICAgICBpZiAodmlzaWJsZVBvcyA9PSBsYXN0SW5BbmNob3IpIHsKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcCBiL1dlYkNv
cmUvZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcAppbmRleCBkN2IwMDM0Li4wYjc4
MGNkIDEwMDY0NAotLS0gYS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5j
cHAKKysrIGIvV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwCkBAIC01
Niw3ICs1Niw3IEBAIHN0YXRpYyBib29sIGlzVGFibGVSb3coY29uc3QgTm9kZSogbm9kZSkKIHN0
YXRpYyBib29sIGlzVGFibGVDZWxsRW1wdHkoTm9kZSogY2VsbCkKIHsKICAgICBBU1NFUlQoaXNU
YWJsZUNlbGwoY2VsbCkpOwotICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oZmlyc3RQb3NpdGlv
bkluTm9kZShjZWxsKSkgPT0gVmlzaWJsZVBvc2l0aW9uKGxhc3RQb3NpdGlvbkluTm9kZShjZWxs
KSk7CisgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihmaXJzdERlZXBFZGl0aW5nUG9zaXRpb25G
b3JOb2RlKGNlbGwpKSA9PSBWaXNpYmxlUG9zaXRpb24obGFzdERlZXBFZGl0aW5nUG9zaXRpb25G
b3JOb2RlKGNlbGwpKTsKIH0KIAogc3RhdGljIGJvb2wgaXNUYWJsZVJvd0VtcHR5KE5vZGUqIHJv
dykKQEAgLTM2MSw5ICszNjEsOSBAQCB2b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OnJlbW92
ZU5vZGUoUGFzc1JlZlB0cjxOb2RlPiBub2RlKQogICAgICAgICByZXR1cm47CiAgICAgfQogICAg
IAotICAgIGlmIChub2RlID09IG1fc3RhcnRCbG9jayAmJiAhaXNFbmRPZkJsb2NrKFZpc2libGVQ
b3NpdGlvbihmaXJzdFBvc2l0aW9uSW5Ob2RlKG1fc3RhcnRCbG9jay5nZXQoKSkpLnByZXZpb3Vz
KCkpKQorICAgIGlmIChub2RlID09IG1fc3RhcnRCbG9jayAmJiAhaXNFbmRPZkJsb2NrKFZpc2li
bGVQb3NpdGlvbihmaXJzdERlZXBFZGl0aW5nUG9zaXRpb25Gb3JOb2RlKG1fc3RhcnRCbG9jay5n
ZXQoKSkpLnByZXZpb3VzKCkpKQogICAgICAgICBtX25lZWRQbGFjZWhvbGRlciA9IHRydWU7Ci0g
ICAgZWxzZSBpZiAobm9kZSA9PSBtX2VuZEJsb2NrICYmICFpc1N0YXJ0T2ZCbG9jayhWaXNpYmxl
UG9zaXRpb24obGFzdFBvc2l0aW9uSW5Ob2RlKG1fc3RhcnRCbG9jay5nZXQoKSkpLm5leHQoKSkp
CisgICAgZWxzZSBpZiAobm9kZSA9PSBtX2VuZEJsb2NrICYmICFpc1N0YXJ0T2ZCbG9jayhWaXNp
YmxlUG9zaXRpb24obGFzdERlZXBFZGl0aW5nUG9zaXRpb25Gb3JOb2RlKG1fc3RhcnRCbG9jay5n
ZXQoKSkpLm5leHQoKSkpCiAgICAgICAgIG1fbmVlZFBsYWNlaG9sZGVyID0gdHJ1ZTsKICAgICAK
ICAgICAvLyBGSVhNRTogVXBkYXRlIHRoZSBlbmRwb2ludHMgb2YgdGhlIHJhbmdlIGJlaW5nIGRl
bGV0ZWQuCmRpZmYgLS1naXQgYS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0TGluZUJyZWFrQ29tbWFu
ZC5jcHAgYi9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0TGluZUJyZWFrQ29tbWFuZC5jcHAKaW5kZXgg
ZGYyZGNlNi4uYTVjNTg4ZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9lZGl0aW5nL0luc2VydExpbmVC
cmVha0NvbW1hbmQuY3BwCisrKyBiL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRMaW5lQnJlYWtDb21t
YW5kLmNwcApAQCAtMTcwLDcgKzE3MCw3IEBAIHZvaWQgSW5zZXJ0TGluZUJyZWFrQ29tbWFuZDo6
ZG9BcHBseSgpCiAgICAgICAgIC8vIGxlYXZlcyBhbmQgdGhlbiBjb21lcyBiYWNrLCBuZXcgaW5w
dXQgd2lsbCBoYXZlIHRoZSByaWdodCBzdHlsZS4KICAgICAgICAgLy8gRklYTUU6IFdlIHNob3Vs
ZG4ndCBhbHdheXMgYXBwbHkgdGhlIHR5cGluZyBzdHlsZSB0byB0aGUgbGluZSBicmVhayBoZXJl
LAogICAgICAgICAvLyBzZWUgPHJkYXI6Ly9wcm9ibGVtLzU3OTQ0NjI+LgotICAgICAgICBhcHBs
eVN0eWxlKHR5cGluZ1N0eWxlLCBmaXJzdFBvc2l0aW9uSW5Ob2RlKG5vZGVUb0luc2VydC5nZXQo
KSksIGxhc3RQb3NpdGlvbkluTm9kZShub2RlVG9JbnNlcnQuZ2V0KCkpKTsKKyAgICAgICAgYXBw
bHlTdHlsZSh0eXBpbmdTdHlsZSwgZmlyc3REZWVwRWRpdGluZ1Bvc2l0aW9uRm9yTm9kZShub2Rl
VG9JbnNlcnQuZ2V0KCkpLCBsYXN0RGVlcEVkaXRpbmdQb3NpdGlvbkZvck5vZGUobm9kZVRvSW5z
ZXJ0LmdldCgpKSk7CiAgICAgICAgIC8vIEV2ZW4gdGhvdWdoIHRoaXMgYXBwbHlTdHlsZSBvcGVy
YXRlcyBvbiBhIFJhbmdlLCBpdCBzdGlsbCBzZXRzIGFuIGVuZGluZ1NlbGVjdGlvbigpLgogICAg
ICAgICAvLyBJdCB0cmllcyB0byBzZXQgYSBWaXNpYmxlU2VsZWN0aW9uIGFyb3VuZCB0aGUgY29u
dGVudCBpdCBvcGVyYXRlZCBvbi4gU28sIHRoYXQgVmlzaWJsZVNlbGVjdGlvbgogICAgICAgICAv
LyB3aWxsIGVpdGhlciAoYSkgc2VsZWN0IHRoZSBsaW5lIGJyZWFrIHdlIGluc2VydGVkLCBvciBp
dCB3aWxsIChiKSBiZSBhIGNhcmV0IGp1c3QgCmRpZmYgLS1naXQgYS9XZWJDb3JlL2VkaXRpbmcv
SW5zZXJ0TGlzdENvbW1hbmQuY3BwIGIvV2ViQ29yZS9lZGl0aW5nL0luc2VydExpc3RDb21tYW5k
LmNwcAppbmRleCBkMWY2NDczLi5hYTQ4NzYxIDEwMDY0NAotLS0gYS9XZWJDb3JlL2VkaXRpbmcv
SW5zZXJ0TGlzdENvbW1hbmQuY3BwCisrKyBiL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRMaXN0Q29t
bWFuZC5jcHAKQEAgLTE0OCw4ICsxNDgsOCBAQCB2b2lkIEluc2VydExpc3RDb21tYW5kOjpkb0Fw
cGx5KCkKICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0OwogICAgICAgICBWaXNpYmxlUG9z
aXRpb24gZW5kOwogICAgICAgICBpZiAobGlzdENoaWxkTm9kZS0+aGFzVGFnTmFtZShsaVRhZykp
IHsKLSAgICAgICAgICAgIHN0YXJ0ID0gZmlyc3RQb3NpdGlvbkluTm9kZShsaXN0Q2hpbGROb2Rl
KTsKLSAgICAgICAgICAgIGVuZCA9IGxhc3RQb3NpdGlvbkluTm9kZShsaXN0Q2hpbGROb2RlKTsK
KyAgICAgICAgICAgIHN0YXJ0ID0gZmlyc3REZWVwRWRpdGluZ1Bvc2l0aW9uRm9yTm9kZShsaXN0
Q2hpbGROb2RlKTsKKyAgICAgICAgICAgIGVuZCA9IGxhc3REZWVwRWRpdGluZ1Bvc2l0aW9uRm9y
Tm9kZShsaXN0Q2hpbGROb2RlKTsKICAgICAgICAgICAgIG5leHRMaXN0Q2hpbGQgPSBsaXN0Q2hp
bGROb2RlLT5uZXh0U2libGluZygpOwogICAgICAgICAgICAgcHJldmlvdXNMaXN0Q2hpbGQgPSBs
aXN0Q2hpbGROb2RlLT5wcmV2aW91c1NpYmxpbmcoKTsKICAgICAgICAgfSBlbHNlIHsKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAgYi9XZWJD
b3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwCmluZGV4IDNhMWE2OTQuLmM3
ZDY2N2UgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFu
ZC5jcHAKKysrIGIvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcApA
QCAtNTEwLDEwICs1MTAsMTAgQEAgVmlzaWJsZVBvc2l0aW9uIFJlcGxhY2VTZWxlY3Rpb25Db21t
YW5kOjpwb3NpdGlvbkF0RW5kT2ZJbnNlcnRlZENvbnRlbnQoKQogewogICAgIE5vZGUqIGxhc3RO
b2RlID0gbV9sYXN0TGVhZkluc2VydGVkLmdldCgpOwogICAgIC8vIEZJWE1FOiBXaHkgaXMgdGhp
cyBoYWNrIGhlcmU/ICBXaGF0J3Mgc3BlY2lhbCBhYm91dCA8c2VsZWN0PiB0YWdzPwotICAgIE5v
ZGUqIGVuY2xvc2luZ1NlbGVjdCA9IGVuY2xvc2luZ05vZGVXaXRoVGFnKGZpcnN0UG9zaXRpb25J
bk5vZGUobGFzdE5vZGUpLCBzZWxlY3RUYWcpOworICAgIE5vZGUqIGVuY2xvc2luZ1NlbGVjdCA9
IGVuY2xvc2luZ05vZGVXaXRoVGFnKGZpcnN0RGVlcEVkaXRpbmdQb3NpdGlvbkZvck5vZGUobGFz
dE5vZGUpLCBzZWxlY3RUYWcpOwogICAgIGlmIChlbmNsb3NpbmdTZWxlY3QpCiAgICAgICAgIGxh
c3ROb2RlID0gZW5jbG9zaW5nU2VsZWN0OwotICAgIHJldHVybiBsYXN0UG9zaXRpb25Jbk5vZGUo
bGFzdE5vZGUpOworICAgIHJldHVybiBsYXN0RGVlcEVkaXRpbmdQb3NpdGlvbkZvck5vZGUobGFz
dE5vZGUpOwogfQogCiBWaXNpYmxlUG9zaXRpb24gUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OnBv
c2l0aW9uQXRTdGFydE9mSW5zZXJ0ZWRDb250ZW50KCkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZWRp
dGluZy9UeXBpbmdDb21tYW5kLmNwcCBiL1dlYkNvcmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmNw
cAppbmRleCBjM2RmNjUyLi4xZTFhNzMyIDEwMDY0NAotLS0gYS9XZWJDb3JlL2VkaXRpbmcvVHlw
aW5nQ29tbWFuZC5jcHAKKysrIGIvV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwCkBA
IC00NzcsNyArNDc3LDcgQEAgdm9pZCBUeXBpbmdDb21tYW5kOjpmb3J3YXJkRGVsZXRlS2V5UHJl
c3NlZChUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGJvb2wga2kKICAgICAgICAgICAgICAg
ICBkb3duc3RyZWFtRW5kID0gdmlzaWJsZUVuZC5uZXh0KHRydWUpLmRlZXBFcXVpdmFsZW50KCku
ZG93bnN0cmVhbSgpOwogICAgICAgICAgICAgLy8gV2hlbiBkZWxldGluZyB0YWJsZXM6IFNlbGVj
dCB0aGUgdGFibGUgZmlyc3QsIHRoZW4gcGVyZm9ybSB0aGUgZGVsZXRpb24KICAgICAgICAgICAg
IGlmIChkb3duc3RyZWFtRW5kLm5vZGUoKSAmJiBkb3duc3RyZWFtRW5kLm5vZGUoKS0+cmVuZGVy
ZXIoKSAmJiBkb3duc3RyZWFtRW5kLm5vZGUoKS0+cmVuZGVyZXIoKS0+aXNUYWJsZSgpICYmIGRv
d25zdHJlYW1FbmQubV9vZmZzZXQgPT0gMCkgewotICAgICAgICAgICAgICAgIHNldEVuZGluZ1Nl
bGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKGVuZGluZ1NlbGVjdGlvbigpLmVuZCgpLCBsYXN0UG9z
aXRpb25Jbk5vZGUoZG93bnN0cmVhbUVuZC5ub2RlKCkpLCBET1dOU1RSRUFNKSk7CisgICAgICAg
ICAgICAgICAgc2V0RW5kaW5nU2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24oZW5kaW5nU2VsZWN0
aW9uKCkuZW5kKCksIGxhc3REZWVwRWRpdGluZ1Bvc2l0aW9uRm9yTm9kZShkb3duc3RyZWFtRW5k
Lm5vZGUoKSksIERPV05TVFJFQU0pKTsKICAgICAgICAgICAgICAgICB0eXBpbmdBZGRlZFRvT3Bl
bkNvbW1hbmQoKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CmRpZmYg
LS1naXQgYS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5jcHAgYi9XZWJDb3JlL2Vk
aXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5jcHAKaW5kZXggODQxMTIxNi4uMjc5YWRmMiAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVTZWxlY3Rpb24uY3BwCisrKyBiL1dlYkNvcmUv
ZWRpdGluZy9WaXNpYmxlU2VsZWN0aW9uLmNwcApAQCAtOTYsNyArOTYsNyBAQCBWaXNpYmxlU2Vs
ZWN0aW9uOjpWaXNpYmxlU2VsZWN0aW9uKGNvbnN0IFJhbmdlKiByYW5nZSwgRUFmZmluaXR5IGFm
ZmluaXR5KQogCiBWaXNpYmxlU2VsZWN0aW9uIFZpc2libGVTZWxlY3Rpb246OnNlbGVjdGlvbkZy
b21Db250ZW50c09mTm9kZShOb2RlKiBub2RlKQogewotICAgIHJldHVybiBWaXNpYmxlU2VsZWN0
aW9uKGZpcnN0UG9zaXRpb25Jbk5vZGUobm9kZSksIGxhc3RQb3NpdGlvbkluTm9kZShub2RlKSwg
RE9XTlNUUkVBTSk7CisgICAgcmV0dXJuIFZpc2libGVTZWxlY3Rpb24oZmlyc3REZWVwRWRpdGlu
Z1Bvc2l0aW9uRm9yTm9kZShub2RlKSwgbGFzdERlZXBFZGl0aW5nUG9zaXRpb25Gb3JOb2RlKG5v
ZGUpLCBET1dOU1RSRUFNKTsKIH0KIAogdm9pZCBWaXNpYmxlU2VsZWN0aW9uOjpzZXRCYXNlKGNv
bnN0IFBvc2l0aW9uJiBwb3NpdGlvbikKQEAgLTUwMiwxMyArNTAyLDEzIEBAIHZvaWQgVmlzaWJs
ZVNlbGVjdGlvbjo6YWRqdXN0U2VsZWN0aW9uVG9Bdm9pZENyb3NzaW5nRWRpdGluZ0JvdW5kYXJp
ZXMoKQogICAgICAgICAgICAgUG9zaXRpb24gcCA9IHByZXZpb3VzVmlzdWFsbHlEaXN0aW5jdENh
bmRpZGF0ZShtX2VuZCk7CiAgICAgICAgICAgICBOb2RlKiBzaGFkb3dBbmNlc3RvciA9IGVuZFJv
b3QgPyBlbmRSb290LT5zaGFkb3dBbmNlc3Rvck5vZGUoKSA6IDA7CiAgICAgICAgICAgICBpZiAo
cC5pc051bGwoKSAmJiBlbmRSb290ICYmIChzaGFkb3dBbmNlc3RvciAhPSBlbmRSb290KSkKLSAg
ICAgICAgICAgICAgICBwID0gbGFzdFBvc2l0aW9uSW5Ob2RlKHNoYWRvd0FuY2VzdG9yKTsKKyAg
ICAgICAgICAgICAgICBwID0gbGFzdERlZXBFZGl0aW5nUG9zaXRpb25Gb3JOb2RlKHNoYWRvd0Fu
Y2VzdG9yKTsKICAgICAgICAgICAgIHdoaWxlIChwLmlzTm90TnVsbCgpICYmICEobG93ZXN0RWRp
dGFibGVBbmNlc3RvcihwLm5vZGUoKSkgPT0gYmFzZUVkaXRhYmxlQW5jZXN0b3IgJiYgIWlzRWRp
dGFibGVQb3NpdGlvbihwKSkpIHsKICAgICAgICAgICAgICAgICBOb2RlKiByb290ID0gZWRpdGFi
bGVSb290Rm9yUG9zaXRpb24ocCk7CiAgICAgICAgICAgICAgICAgc2hhZG93QW5jZXN0b3IgPSBy
b290ID8gcm9vdC0+c2hhZG93QW5jZXN0b3JOb2RlKCkgOiAwOwogICAgICAgICAgICAgICAgIHAg
PSBpc0F0b21pY05vZGUocC5ub2RlKCkpID8gcG9zaXRpb25CZWZvcmVOb2RlKHAubm9kZSgpKSA6
IHByZXZpb3VzVmlzdWFsbHlEaXN0aW5jdENhbmRpZGF0ZShwKTsKICAgICAgICAgICAgICAgICBp
ZiAocC5pc051bGwoKSAmJiAoc2hhZG93QW5jZXN0b3IgIT0gcm9vdCkpCi0gICAgICAgICAgICAg
ICAgICAgIHAgPSBsYXN0UG9zaXRpb25Jbk5vZGUoc2hhZG93QW5jZXN0b3IpOworICAgICAgICAg
ICAgICAgICAgICBwID0gbGFzdERlZXBFZGl0aW5nUG9zaXRpb25Gb3JOb2RlKHNoYWRvd0FuY2Vz
dG9yKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIFZpc2libGVQb3NpdGlvbiBwcmV2aW91
cyhwKTsKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcCBiL1dl
YkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5jcHAKaW5kZXggOTBjNDM3Yy4uMjU4YjUzYiAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcAorKysgYi9XZWJDb3JlL2Vk
aXRpbmcvaHRtbGVkaXRpbmcuY3BwCkBAIC0yNTUsMTQgKzI1NSwxNCBAQCBQb3NpdGlvbiBwcmV2
aW91c1Zpc3VhbGx5RGlzdGluY3RDYW5kaWRhdGUoY29uc3QgUG9zaXRpb24mIHBvc2l0aW9uKQog
VmlzaWJsZVBvc2l0aW9uIGZpcnN0RWRpdGFibGVQb3NpdGlvbkFmdGVyUG9zaXRpb25JblJvb3Qo
Y29uc3QgUG9zaXRpb24mIHBvc2l0aW9uLCBOb2RlKiBoaWdoZXN0Um9vdCkKIHsKICAgICAvLyBw
b3NpdGlvbiBmYWxscyBiZWZvcmUgaGlnaGVzdFJvb3QuCi0gICAgaWYgKGNvbXBhcmVQb3NpdGlv
bnMocG9zaXRpb24sIGZpcnN0UG9zaXRpb25Jbk5vZGUoaGlnaGVzdFJvb3QpKSA9PSAtMSAmJiBo
aWdoZXN0Um9vdC0+aXNDb250ZW50RWRpdGFibGUoKSkKLSAgICAgICAgcmV0dXJuIGZpcnN0UG9z
aXRpb25Jbk5vZGUoaGlnaGVzdFJvb3QpOworICAgIGlmIChjb21wYXJlUG9zaXRpb25zKHBvc2l0
aW9uLCBmaXJzdERlZXBFZGl0aW5nUG9zaXRpb25Gb3JOb2RlKGhpZ2hlc3RSb290KSkgPT0gLTEg
JiYgaGlnaGVzdFJvb3QtPmlzQ29udGVudEVkaXRhYmxlKCkpCisgICAgICAgIHJldHVybiBmaXJz
dERlZXBFZGl0aW5nUG9zaXRpb25Gb3JOb2RlKGhpZ2hlc3RSb290KTsKIAogICAgIFBvc2l0aW9u
IHAgPSBwb3NpdGlvbjsKICAgICAKICAgICBpZiAoTm9kZSogc2hhZG93QW5jZXN0b3IgPSBwLm5v
ZGUoKS0+c2hhZG93QW5jZXN0b3JOb2RlKCkpCiAgICAgICAgIGlmIChzaGFkb3dBbmNlc3RvciAh
PSBwLm5vZGUoKSkKLSAgICAgICAgICAgIHAgPSBsYXN0UG9zaXRpb25Jbk5vZGUoc2hhZG93QW5j
ZXN0b3IpOworICAgICAgICAgICAgcCA9IGxhc3REZWVwRWRpdGluZ1Bvc2l0aW9uRm9yTm9kZShz
aGFkb3dBbmNlc3Rvcik7CiAgICAgCiAgICAgd2hpbGUgKHAubm9kZSgpICYmICFpc0VkaXRhYmxl
UG9zaXRpb24ocCkgJiYgcC5ub2RlKCktPmlzRGVzY2VuZGFudE9mKGhpZ2hlc3RSb290KSkKICAg
ICAgICAgcCA9IGlzQXRvbWljTm9kZShwLm5vZGUoKSkgPyBwb3NpdGlvbkFmdGVyTm9kZShwLm5v
ZGUoKSkgOiBuZXh0VmlzdWFsbHlEaXN0aW5jdENhbmRpZGF0ZShwKTsKQEAgLTI3NiwxNCArMjc2
LDE0IEBAIFZpc2libGVQb3NpdGlvbiBmaXJzdEVkaXRhYmxlUG9zaXRpb25BZnRlclBvc2l0aW9u
SW5Sb290KGNvbnN0IFBvc2l0aW9uJiBwb3NpdGlvCiBWaXNpYmxlUG9zaXRpb24gbGFzdEVkaXRh
YmxlUG9zaXRpb25CZWZvcmVQb3NpdGlvbkluUm9vdChjb25zdCBQb3NpdGlvbiYgcG9zaXRpb24s
IE5vZGUqIGhpZ2hlc3RSb290KQogewogICAgIC8vIFdoZW4gcG9zaXRpb24gZmFsbHMgYWZ0ZXIg
aGlnaGVzdFJvb3QsIHRoZSByZXN1bHQgaXMgZWFzeSB0byBjb21wdXRlLgotICAgIGlmIChjb21w
YXJlUG9zaXRpb25zKHBvc2l0aW9uLCBsYXN0UG9zaXRpb25Jbk5vZGUoaGlnaGVzdFJvb3QpKSA9
PSAxKQotICAgICAgICByZXR1cm4gbGFzdFBvc2l0aW9uSW5Ob2RlKGhpZ2hlc3RSb290KTsKKyAg
ICBpZiAoY29tcGFyZVBvc2l0aW9ucyhwb3NpdGlvbiwgbGFzdERlZXBFZGl0aW5nUG9zaXRpb25G
b3JOb2RlKGhpZ2hlc3RSb290KSkgPT0gMSkKKyAgICAgICAgcmV0dXJuIGxhc3REZWVwRWRpdGlu
Z1Bvc2l0aW9uRm9yTm9kZShoaWdoZXN0Um9vdCk7CiAKICAgICBQb3NpdGlvbiBwID0gcG9zaXRp
b247CiAgICAgCiAgICAgaWYgKE5vZGUqIHNoYWRvd0FuY2VzdG9yID0gcC5ub2RlKCktPnNoYWRv
d0FuY2VzdG9yTm9kZSgpKQogICAgICAgICBpZiAoc2hhZG93QW5jZXN0b3IgIT0gcC5ub2RlKCkp
Ci0gICAgICAgICAgICBwID0gZmlyc3RQb3NpdGlvbkluTm9kZShzaGFkb3dBbmNlc3Rvcik7Cisg
ICAgICAgICAgICBwID0gZmlyc3REZWVwRWRpdGluZ1Bvc2l0aW9uRm9yTm9kZShzaGFkb3dBbmNl
c3Rvcik7CiAgICAgCiAgICAgd2hpbGUgKHAubm9kZSgpICYmICFpc0VkaXRhYmxlUG9zaXRpb24o
cCkgJiYgcC5ub2RlKCktPmlzRGVzY2VuZGFudE9mKGhpZ2hlc3RSb290KSkKICAgICAgICAgcCA9
IGlzQXRvbWljTm9kZShwLm5vZGUoKSkgPyBwb3NpdGlvbkJlZm9yZU5vZGUocC5ub2RlKCkpIDog
cHJldmlvdXNWaXN1YWxseURpc3RpbmN0Q2FuZGlkYXRlKHApOwpAQCAtNzEwLDggKzcxMCw4IEBA
IE5vZGUqIGVuY2xvc2luZ0VtcHR5TGlzdEl0ZW0oY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2aXNp
YmxlUG9zKQogICAgIGlmICghbGlzdENoaWxkTm9kZSB8fCAhaXNTdGFydE9mUGFyYWdyYXBoKHZp
c2libGVQb3MpIHx8ICFpc0VuZE9mUGFyYWdyYXBoKHZpc2libGVQb3MpKQogICAgICAgICByZXR1
cm4gMDsKIAotICAgIFZpc2libGVQb3NpdGlvbiBmaXJzdEluTGlzdENoaWxkKGZpcnN0UG9zaXRp
b25Jbk5vZGUobGlzdENoaWxkTm9kZSkpOwotICAgIFZpc2libGVQb3NpdGlvbiBsYXN0SW5MaXN0
Q2hpbGQobGFzdFBvc2l0aW9uSW5Ob2RlKGxpc3RDaGlsZE5vZGUpKTsKKyAgICBWaXNpYmxlUG9z
aXRpb24gZmlyc3RJbkxpc3RDaGlsZChmaXJzdERlZXBFZGl0aW5nUG9zaXRpb25Gb3JOb2RlKGxp
c3RDaGlsZE5vZGUpKTsKKyAgICBWaXNpYmxlUG9zaXRpb24gbGFzdEluTGlzdENoaWxkKGxhc3RE
ZWVwRWRpdGluZ1Bvc2l0aW9uRm9yTm9kZShsaXN0Q2hpbGROb2RlKSk7CiAKICAgICBpZiAoZmly
c3RJbkxpc3RDaGlsZCAhPSB2aXNpYmxlUG9zIHx8IGxhc3RJbkxpc3RDaGlsZCAhPSB2aXNpYmxl
UG9zKQogICAgICAgICByZXR1cm4gMDsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZWRpdGluZy92aXNp
YmxlX3VuaXRzLmNwcCBiL1dlYkNvcmUvZWRpdGluZy92aXNpYmxlX3VuaXRzLmNwcAppbmRleCAx
NjQ4NWNjLi5kYjc1OTdiIDEwMDY0NAotLS0gYS9XZWJDb3JlL2VkaXRpbmcvdmlzaWJsZV91bml0
cy5jcHAKKysrIGIvV2ViQ29yZS9lZGl0aW5nL3Zpc2libGVfdW5pdHMuY3BwCkBAIC03NDgsNyAr
NzQ4LDcgQEAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0T2ZQYXJhZ3JhcGgoY29uc3QgVmlzaWJsZVBv
c2l0aW9uJiBjKQogICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKCk7CiAgICAgCiAgICAg
aWYgKHJlbmRlcmVkQXNOb25JbmxpbmVUYWJsZU9ySFIoc3RhcnROb2RlLT5yZW5kZXJlcigpKSAm
JiBwLmF0RW5kT2ZOb2RlKCkpCi0gICAgICAgIHJldHVybiBmaXJzdFBvc2l0aW9uSW5Ob2RlKHN0
YXJ0Tm9kZSk7CisgICAgICAgIHJldHVybiBmaXJzdERlZXBFZGl0aW5nUG9zaXRpb25Gb3JOb2Rl
KHN0YXJ0Tm9kZSk7CiAKICAgICBOb2RlKiBzdGFydEJsb2NrID0gZW5jbG9zaW5nQmxvY2soc3Rh
cnROb2RlKTsKIApAQCAtODA4LDcgKzgwOCw3IEBAIFZpc2libGVQb3NpdGlvbiBlbmRPZlBhcmFn
cmFwaChjb25zdCBWaXNpYmxlUG9zaXRpb24gJmMpCiAgICAgTm9kZSogc3RhcnROb2RlID0gcC5u
b2RlKCk7CiAKICAgICBpZiAocmVuZGVyZWRBc05vbklubGluZVRhYmxlT3JIUihzdGFydE5vZGUt
PnJlbmRlcmVyKCkpICYmIHAuYXRTdGFydE9mTm9kZSgpKQotICAgICAgICByZXR1cm4gbGFzdFBv
c2l0aW9uSW5Ob2RlKHN0YXJ0Tm9kZSk7CisgICAgICAgIHJldHVybiBsYXN0RGVlcEVkaXRpbmdQ
b3NpdGlvbkZvck5vZGUoc3RhcnROb2RlKTsKICAgICAKICAgICBOb2RlKiBzdGFydEJsb2NrID0g
ZW5jbG9zaW5nQmxvY2soc3RhcnROb2RlKTsKICAgICBOb2RlICpzdGF5SW5zaWRlQmxvY2sgPSBz
dGFydEJsb2NrOwpAQCAtMTAwOSw3ICsxMDA5LDcgQEAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0T2ZF
ZGl0YWJsZUNvbnRlbnQoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2aXNpYmxlUG9zaXRpb24pCiAg
ICAgaWYgKCFoaWdoZXN0Um9vdCkKICAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbigpOwog
Ci0gICAgcmV0dXJuIGZpcnN0UG9zaXRpb25Jbk5vZGUoaGlnaGVzdFJvb3QpOworICAgIHJldHVy
biBmaXJzdERlZXBFZGl0aW5nUG9zaXRpb25Gb3JOb2RlKGhpZ2hlc3RSb290KTsKIH0KIAogVmlz
aWJsZVBvc2l0aW9uIGVuZE9mRWRpdGFibGVDb250ZW50KGNvbnN0IFZpc2libGVQb3NpdGlvbiYg
dmlzaWJsZVBvc2l0aW9uKQpAQCAtMTAxOCw3ICsxMDE4LDcgQEAgVmlzaWJsZVBvc2l0aW9uIGVu
ZE9mRWRpdGFibGVDb250ZW50KGNvbnN0IFZpc2libGVQb3NpdGlvbiYgdmlzaWJsZVBvc2l0aW9u
KQogICAgIGlmICghaGlnaGVzdFJvb3QpCiAgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24o
KTsKIAotICAgIHJldHVybiBsYXN0UG9zaXRpb25Jbk5vZGUoaGlnaGVzdFJvb3QpOworICAgIHJl
dHVybiBsYXN0RGVlcEVkaXRpbmdQb3NpdGlvbkZvck5vZGUoaGlnaGVzdFJvb3QpOwogfQogCiB9
CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BhZ2UvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAgYi9XZWJD
b3JlL3BhZ2UvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAKaW5kZXggOGQwOTk1OS4uNWFkNTQwNyAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9wYWdlL0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCisrKyBiL1dl
YkNvcmUvcGFnZS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcApAQCAtNTM4LDcgKzUzOCw3IEBAIHN0
YXRpYyBWaXNpYmxlUG9zaXRpb24gZW5kT2ZTdHlsZVJhbmdlKGNvbnN0IFZpc2libGVQb3NpdGlv
biYgdmlzaWJsZVBvcykKICAgICAgICAgZW5kUmVuZGVyZXIgPSByOwogICAgIH0KIAotICAgIHJl
dHVybiBsYXN0UG9zaXRpb25Jbk5vZGUoZW5kUmVuZGVyZXItPm5vZGUoKSk7CisgICAgcmV0dXJu
IGxhc3REZWVwRWRpdGluZ1Bvc2l0aW9uRm9yTm9kZShlbmRSZW5kZXJlci0+bm9kZSgpKTsKIH0K
IAogVmlzaWJsZVBvc2l0aW9uUmFuZ2UgQWNjZXNzaWJpbGl0eU9iamVjdDo6c3R5bGVSYW5nZUZv
clBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgdmlzaWJsZVBvcykgY29uc3QKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvcGFnZS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcCBiL1dlYkNv
cmUvcGFnZS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAppbmRleCAyYmFjMmZhLi44ZWQz
NTJhIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BhZ2UvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5j
cHAKKysrIGIvV2ViQ29yZS9wYWdlL0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCkBAIC0x
NjAxLDggKzE2MDEsOCBAQCBWaXNpYmxlUG9zaXRpb25SYW5nZSBBY2Nlc3NpYmlsaXR5UmVuZGVy
T2JqZWN0Ojp2aXNpYmxlUG9zaXRpb25SYW5nZSgpIGNvbnN0CiAgICAgaWYgKCFub2RlKQogICAg
ICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uUmFuZ2UoKTsKIAotICAgIFZpc2libGVQb3NpdGlv
biBzdGFydFBvcyA9IGZpcnN0UG9zaXRpb25Jbk5vZGUobm9kZSk7Ci0gICAgVmlzaWJsZVBvc2l0
aW9uIGVuZFBvcyA9IGxhc3RQb3NpdGlvbkluTm9kZShub2RlKTsKKyAgICBWaXNpYmxlUG9zaXRp
b24gc3RhcnRQb3MgPSBmaXJzdERlZXBFZGl0aW5nUG9zaXRpb25Gb3JOb2RlKG5vZGUpOworICAg
IFZpc2libGVQb3NpdGlvbiBlbmRQb3MgPSBsYXN0RGVlcEVkaXRpbmdQb3NpdGlvbkZvck5vZGUo
bm9kZSk7CiAKICAgICAvLyB0aGUgVmlzaWJsZVBvc2l0aW9ucyBhcmUgZXF1YWwgZm9yIG5vZGVz
IGxpa2UgYnV0dG9ucywgc28gYWRqdXN0IGZvciB0aGF0CiAgICAgLy8gRklYTUU6IFJlYWxseT8g
IFtidXR0b24sIDBdIGFuZCBbYnV0dG9uLCAxXSBhcmUgZGlzdGluY3QgKGJlZm9yZSBhbmQgYWZ0
ZXIgdGhlIGJ1dHRvbikKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5j
cHAgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCmluZGV4IDNmMjY4NWEuLjJiYTE4
MmUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKKysrIGIvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcApAQCAtMjY3NCw3ICsyNjc0LDcgQEAgVmlzaWJs
ZVBvc2l0aW9uIFJlbmRlckJveDo6cG9zaXRpb25Gb3JQb2ludChjb25zdCBJbnRQb2ludCYgcG9p
bnQpCiB7CiAgICAgLy8gbm8gY2hpbGRyZW4uLi5yZXR1cm4gdGhpcyByZW5kZXIgb2JqZWN0J3Mg
ZWxlbWVudCwgaWYgdGhlcmUgaXMgb25lLCBhbmQgb2Zmc2V0IDAKICAgICBpZiAoIWZpcnN0Q2hp
bGQoKSkKLSAgICAgICAgcmV0dXJuIGZpcnN0UG9zaXRpb25Jbk5vZGUobm9kZSgpKTsKKyAgICAg
ICAgcmV0dXJuIGZpcnN0RGVlcEVkaXRpbmdQb3NpdGlvbkZvck5vZGUobm9kZSgpKTsKIAogICAg
IGludCB4UG9zID0gcG9pbnQueCgpOwogICAgIGludCB5UG9zID0gcG9pbnQueSgpOwpAQCAtMjY4
NSw4ICsyNjg1LDggQEAgVmlzaWJsZVBvc2l0aW9uIFJlbmRlckJveDo6cG9zaXRpb25Gb3JQb2lu
dChjb25zdCBJbnRQb2ludCYgcG9pbnQpCiAgICAgICAgIAogICAgICAgICBpZiAoeFBvcyA8IDAg
fHwgeFBvcyA+IHJpZ2h0IHx8IHlQb3MgPCAwIHx8IHlQb3MgPiBib3R0b20pIHsKICAgICAgICAg
ICAgIGlmICh4UG9zIDw9IHJpZ2h0IC8gMikKLSAgICAgICAgICAgICAgICByZXR1cm4gZmlyc3RQ
b3NpdGlvbkluTm9kZShub2RlKCkpOwotICAgICAgICAgICAgcmV0dXJuIGxhc3RQb3NpdGlvbklu
Tm9kZShub2RlKCkpOworICAgICAgICAgICAgICAgIHJldHVybiBmaXJzdERlZXBFZGl0aW5nUG9z
aXRpb25Gb3JOb2RlKG5vZGUoKSk7CisgICAgICAgICAgICByZXR1cm4gbGFzdERlZXBFZGl0aW5n
UG9zaXRpb25Gb3JOb2RlKG5vZGUoKSk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTI3NTcsNyAr
Mjc1Nyw3IEBAIFZpc2libGVQb3NpdGlvbiBSZW5kZXJCb3g6OnBvc2l0aW9uRm9yUG9pbnQoY29u
c3QgSW50UG9pbnQmIHBvaW50KQogICAgIGlmIChjbG9zZXN0UmVuZGVyZXIpCiAgICAgICAgIHJl
dHVybiBjbG9zZXN0UmVuZGVyZXItPnBvc2l0aW9uRm9yQ29vcmRpbmF0ZXMobmV3WCAtIGNsb3Nl
c3RSZW5kZXJlci0+eCgpLCBuZXdZIC0gY2xvc2VzdFJlbmRlcmVyLT55KCkpOwogICAgIAotICAg
IHJldHVybiBmaXJzdFBvc2l0aW9uSW5Ob2RlKG5vZGUoKSk7CisgICAgcmV0dXJuIGZpcnN0RGVl
cEVkaXRpbmdQb3NpdGlvbkZvck5vZGUobm9kZSgpKTsKIH0KIAogYm9vbCBSZW5kZXJCb3g6OnNo
cmlua1RvQXZvaWRGbG9hdHMoKSBjb25zdAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>28776</attachid>
            <date>2009-03-19 18:14:19 -0700</date>
            <delta_ts>2009-03-20 10:19:20 -0700</delta_ts>
            <desc>Rename lastOffsetInNode to lastOffsetForEditing and atStart/atEndOfNode to atFirst/atLastEditingPositionForNode</desc>
            <filename>InNode-to-lastOffsetForEditing-and-atStart-atEndOfNode-to-atFirst-atLastEditingPositionForNode.patch</filename>
            <type>text/plain</type>
            <size>12899</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">YjFiOTQ1NTgzODc4MDhjM2RlMzVmNDM3MWNhM2FkZGM5ZjllMDk1YwpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9kb20vUG9zaXRpb24uY3BwIGIvV2ViQ29yZS9kb20vUG9zaXRpb24uY3BwCmluZGV4IDVh
NDM0ZmEuLjZiNzkyZmMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL1Bvc2l0aW9uLmNwcAorKysg
Yi9XZWJDb3JlL2RvbS9Qb3NpdGlvbi5jcHAKQEAgLTE0Nyw3ICsxNDcsNyBAQCBQb3NpdGlvbiBQ
b3NpdGlvbjo6bmV4dChQb3NpdGlvbk1vdmVUeXBlIG1vdmVUeXBlKSBjb25zdAogICAgIEFTU0VS
VChvID49IDApOwogCiAgICAgTm9kZSogY2hpbGQgPSBuLT5jaGlsZE5vZGUobyk7Ci0gICAgaWYg
KGNoaWxkIHx8ICFuLT5oYXNDaGlsZE5vZGVzKCkgJiYgbyA8IGxhc3RPZmZzZXRJbk5vZGUobikp
IHsKKyAgICBpZiAoY2hpbGQgfHwgIW4tPmhhc0NoaWxkTm9kZXMoKSAmJiBvIDwgbGFzdE9mZnNl
dEZvckVkaXRpbmcobikpIHsKICAgICAgICAgaWYgKGNoaWxkKQogICAgICAgICAgICAgcmV0dXJu
IGZpcnN0RGVlcEVkaXRpbmdQb3NpdGlvbkZvck5vZGUoY2hpbGQpOwogCkBAIC0xODEsMTggKzE4
MSwxOCBAQCBpbnQgUG9zaXRpb246OnVuY2hlY2tlZE5leHRPZmZzZXQoY29uc3QgTm9kZSogbiwg
aW50IGN1cnJlbnQpCiAgICAgcmV0dXJuIG4tPnJlbmRlcmVyKCkgPyBuLT5yZW5kZXJlcigpLT5u
ZXh0T2Zmc2V0KGN1cnJlbnQpIDogY3VycmVudCArIDE7CiB9CiAKLWJvb2wgUG9zaXRpb246OmF0
U3RhcnRPZk5vZGUoKSBjb25zdAorYm9vbCBQb3NpdGlvbjo6YXRGaXJzdEVkaXRpbmdQb3NpdGlv
bkZvck5vZGUoKSBjb25zdAogewogICAgIGlmIChpc051bGwoKSkKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgcmV0dXJuIG1fb2Zmc2V0IDw9IDA7CiB9CiAKLWJvb2wgUG9zaXRpb246OmF0RW5k
T2ZOb2RlKCkgY29uc3QKK2Jvb2wgUG9zaXRpb246OmF0TGFzdEVkaXRpbmdQb3NpdGlvbkZvck5v
ZGUoKSBjb25zdAogewogICAgIGlmIChpc051bGwoKSkKICAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgcmV0dXJuIG1fb2Zmc2V0ID49IGxhc3RPZmZzZXRJbk5vZGUobm9kZSgpKTsKKyAgICByZXR1
cm4gbV9vZmZzZXQgPj0gbGFzdE9mZnNldEZvckVkaXRpbmcobm9kZSgpKTsKIH0KIAogYm9vbCBQ
b3NpdGlvbjo6YXRTdGFydE9mVHJlZSgpIGNvbnN0CkBAIC0yMDYsNyArMjA2LDcgQEAgYm9vbCBQ
b3NpdGlvbjo6YXRFbmRPZlRyZWUoKSBjb25zdAogewogICAgIGlmIChpc051bGwoKSkKICAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgcmV0dXJuICFub2RlKCktPnBhcmVudE5vZGUoKSAmJiBtX29m
ZnNldCA+PSBsYXN0T2Zmc2V0SW5Ob2RlKG5vZGUoKSk7CisgICAgcmV0dXJuICFub2RlKCktPnBh
cmVudE5vZGUoKSAmJiBtX29mZnNldCA+PSBsYXN0T2Zmc2V0Rm9yRWRpdGluZyhub2RlKCkpOwog
fQogCiBpbnQgUG9zaXRpb246OnJlbmRlcmVkT2Zmc2V0KCkgY29uc3QKQEAgLTI4OSw3ICsyODks
NyBAQCBQb3NpdGlvbiBQb3NpdGlvbjo6bmV4dENoYXJhY3RlclBvc2l0aW9uKEVBZmZpbml0eSBh
ZmZpbml0eSkgY29uc3QKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKLS8vIFdoZXRoZXIgb3Igbm90
IFtub2RlLCAwXSBhbmQgW25vZGUsIGxhc3RPZmZzZXRJbk5vZGUobm9kZSldIGFyZSB0aGVpciBv
d24gVmlzaWJsZVBvc2l0aW9ucy4KKy8vIFdoZXRoZXIgb3Igbm90IFtub2RlLCAwXSBhbmQgW25v
ZGUsIGxhc3RPZmZzZXRGb3JFZGl0aW5nKG5vZGUpXSBhcmUgdGhlaXIgb3duIFZpc2libGVQb3Np
dGlvbnMuCiAvLyBJZiB0cnVlLCBhZGphY2VudCBjYW5kaWRhdGVzIGFyZSB2aXN1YWxseSBkaXN0
aW5jdC4KIC8vIEZJWE1FOiBEaXNyZWdhcmQgbm9kZXMgd2l0aCByZW5kZXJlcnMgdGhhdCBoYXZl
IG5vIGhlaWdodCwgYXMgd2UgZG8gaW4gaXNDYW5kaWRhdGUuCiAvLyBGSVhNRTogU2hhcmUgY29k
ZSB3aXRoIGlzQ2FuZGlkYXRlLCBpZiBwb3NzaWJsZS4KQEAgLTU5MCwxMSArNTkwLDExIEBAIGJv
b2wgUG9zaXRpb246OmlzQ2FuZGlkYXRlKCkgY29uc3QKICAgICAgICAgcmV0dXJuIGluUmVuZGVy
ZWRUZXh0KCkgJiYgIW5vZGVJc1VzZXJTZWxlY3ROb25lKG5vZGUoKSk7CiAKICAgICBpZiAoaXNU
YWJsZUVsZW1lbnQobm9kZSgpKSB8fCBlZGl0aW5nSWdub3Jlc0NvbnRlbnQobm9kZSgpKSkKLSAg
ICAgICAgcmV0dXJuIChhdFN0YXJ0T2ZOb2RlKCkgfHwgYXRFbmRPZk5vZGUoKSkgJiYgIW5vZGVJ
c1VzZXJTZWxlY3ROb25lKG5vZGUoKS0+cGFyZW50KCkpOworICAgICAgICByZXR1cm4gKGF0Rmly
c3RFZGl0aW5nUG9zaXRpb25Gb3JOb2RlKCkgfHwgYXRMYXN0RWRpdGluZ1Bvc2l0aW9uRm9yTm9k
ZSgpKSAmJiAhbm9kZUlzVXNlclNlbGVjdE5vbmUobm9kZSgpLT5wYXJlbnQoKSk7CiAKICAgICBp
ZiAoIW5vZGUoKS0+aGFzVGFnTmFtZShodG1sVGFnKSAmJiByZW5kZXJlci0+aXNCbG9ja0Zsb3co
KSAmJiAhaGFzUmVuZGVyZWROb25Bbm9ueW1vdXNEZXNjZW5kYW50c1dpdGhIZWlnaHQocmVuZGVy
ZXIpICYmCiAgICAgICAgKHRvUmVuZGVyQm94KHJlbmRlcmVyKS0+aGVpZ2h0KCkgfHwgbm9kZSgp
LT5oYXNUYWdOYW1lKGJvZHlUYWcpKSkKLSAgICAgICAgcmV0dXJuIGF0U3RhcnRPZk5vZGUoKSAm
JiAhbm9kZUlzVXNlclNlbGVjdE5vbmUobm9kZSgpKTsKKyAgICAgICAgcmV0dXJuIGF0Rmlyc3RF
ZGl0aW5nUG9zaXRpb25Gb3JOb2RlKCkgJiYgIW5vZGVJc1VzZXJTZWxlY3ROb25lKG5vZGUoKSk7
CiAgICAgCiAgICAgcmV0dXJuIGZhbHNlOwogfQpAQCAtMTAxOCw3ICsxMDE4LDcgQEAgUG9zaXRp
b24gZmlyc3REZWVwRWRpdGluZ1Bvc2l0aW9uRm9yTm9kZShOb2RlKiBub2RlKQogCiBQb3NpdGlv
biBsYXN0RGVlcEVkaXRpbmdQb3NpdGlvbkZvck5vZGUoTm9kZSogbm9kZSkKIHsKLSAgICByZXR1
cm4gUG9zaXRpb24obm9kZSwgbGFzdE9mZnNldEluTm9kZShub2RlKSk7CisgICAgcmV0dXJuIFBv
c2l0aW9uKG5vZGUsIGxhc3RPZmZzZXRGb3JFZGl0aW5nKG5vZGUpKTsKIH0KIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vUG9zaXRpb24uaCBiL1dlYkNv
cmUvZG9tL1Bvc2l0aW9uLmgKaW5kZXggZGY5NzU1Ni4uYWQ5MTUzZiAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9kb20vUG9zaXRpb24uaAorKysgYi9XZWJDb3JlL2RvbS9Qb3NpdGlvbi5oCkBAIC03OCw4
ICs3OCwxMCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGludCB1bmNoZWNrZWRQcmV2aW91c09mZnNl
dEZvckJhY2t3YXJkRGVsZXRpb24oY29uc3QgTm9kZSosIGludCBjdXJyZW50KTsKICAgICBzdGF0
aWMgaW50IHVuY2hlY2tlZE5leHRPZmZzZXQoY29uc3QgTm9kZSosIGludCBjdXJyZW50KTsKIAot
ICAgIGJvb2wgYXRTdGFydE9mTm9kZSgpIGNvbnN0OwotICAgIGJvb2wgYXRFbmRPZk5vZGUoKSBj
b25zdDsKKyAgICAvLyBUaGVzZSBjYW4gYmUgZWl0aGVyIGluc2lkZSBvciBqdXN0IGJlZm9yZS9h
ZnRlciB0aGUgbm9kZSwgZGVwZW5kaW5nIG9uCisgICAgLy8gaWYgdGhlIG5vZGUgaXMgaWdub3Jl
ZCBieSBlZGl0aW5nIG9yIG5vdC4KKyAgICBib29sIGF0Rmlyc3RFZGl0aW5nUG9zaXRpb25Gb3JO
b2RlKCkgY29uc3Q7CisgICAgYm9vbCBhdExhc3RFZGl0aW5nUG9zaXRpb25Gb3JOb2RlKCkgY29u
c3Q7CiAKICAgICBib29sIGF0U3RhcnRPZlRyZWUoKSBjb25zdDsKICAgICBib29sIGF0RW5kT2ZU
cmVlKCkgY29uc3Q7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9Qb3NpdGlvbkl0ZXJhdG9yLmNw
cCBiL1dlYkNvcmUvZG9tL1Bvc2l0aW9uSXRlcmF0b3IuY3BwCmluZGV4IDk0Yzg0MzQuLmIyNmRh
ZDcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL1Bvc2l0aW9uSXRlcmF0b3IuY3BwCisrKyBiL1dl
YkNvcmUvZG9tL1Bvc2l0aW9uSXRlcmF0b3IuY3BwCkBAIC01Nyw3ICs1Nyw3IEBAIHZvaWQgUG9z
aXRpb25JdGVyYXRvcjo6aW5jcmVtZW50KCkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAg
IGlmICghbV9wYXJlbnQtPmhhc0NoaWxkTm9kZXMoKSAmJiBtX29mZnNldCA8IGxhc3RPZmZzZXRJ
bk5vZGUobV9wYXJlbnQpKQorICAgIGlmICghbV9wYXJlbnQtPmhhc0NoaWxkTm9kZXMoKSAmJiBt
X29mZnNldCA8IGxhc3RPZmZzZXRGb3JFZGl0aW5nKG1fcGFyZW50KSkKICAgICAgICAgbV9vZmZz
ZXQgPSBQb3NpdGlvbjo6dW5jaGVja2VkTmV4dE9mZnNldChtX3BhcmVudCwgbV9vZmZzZXQpOwog
ICAgIGVsc2UgewogICAgICAgICBtX2NoaWxkID0gbV9wYXJlbnQ7CkBAIC03Niw3ICs3Niw3IEBA
IHZvaWQgUG9zaXRpb25JdGVyYXRvcjo6ZGVjcmVtZW50KCkKICAgICAgICAgbV9wYXJlbnQgPSBt
X2NoaWxkLT5wcmV2aW91c1NpYmxpbmcoKTsKICAgICAgICAgaWYgKG1fcGFyZW50KSB7CiAgICAg
ICAgICAgICBtX2NoaWxkID0gMDsKLSAgICAgICAgICAgIG1fb2Zmc2V0ID0gbV9wYXJlbnQtPmhh
c0NoaWxkTm9kZXMoKSA/IDAgOiBsYXN0T2Zmc2V0SW5Ob2RlKG1fcGFyZW50KTsKKyAgICAgICAg
ICAgIG1fb2Zmc2V0ID0gbV9wYXJlbnQtPmhhc0NoaWxkTm9kZXMoKSA/IDAgOiBsYXN0T2Zmc2V0
Rm9yRWRpdGluZyhtX3BhcmVudCk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBtX2No
aWxkID0gbV9jaGlsZC0+cGFyZW50Tm9kZSgpOwogICAgICAgICAgICAgbV9wYXJlbnQgPSBtX2No
aWxkLT5wYXJlbnROb2RlKCk7CkBAIC05MSw3ICs5MSw3IEBAIHZvaWQgUG9zaXRpb25JdGVyYXRv
cjo6ZGVjcmVtZW50KCkKICAgICAgICAgaWYgKG1fcGFyZW50LT5oYXNDaGlsZE5vZGVzKCkpIHsK
ICAgICAgICAgICAgIG1fcGFyZW50ID0gbV9wYXJlbnQtPmxhc3RDaGlsZCgpOwogICAgICAgICAg
ICAgaWYgKCFtX3BhcmVudC0+aGFzQ2hpbGROb2RlcygpKQotICAgICAgICAgICAgICAgIG1fb2Zm
c2V0ID0gbGFzdE9mZnNldEluTm9kZShtX3BhcmVudCk7CisgICAgICAgICAgICAgICAgbV9vZmZz
ZXQgPSBsYXN0T2Zmc2V0Rm9yRWRpdGluZyhtX3BhcmVudCk7CiAgICAgICAgIH0gZWxzZSB7CiAg
ICAgICAgICAgICBtX2NoaWxkID0gbV9wYXJlbnQ7CiAgICAgICAgICAgICBtX3BhcmVudCA9IG1f
cGFyZW50LT5wYXJlbnROb2RlKCk7CkBAIC0xMTQsNyArMTE0LDcgQEAgYm9vbCBQb3NpdGlvbkl0
ZXJhdG9yOjphdEVuZCgpIGNvbnN0CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIGlmIChtX2No
aWxkKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuICFtX3BhcmVudC0+cGFyZW50
Tm9kZSgpICYmIChtX3BhcmVudC0+aGFzQ2hpbGROb2RlcygpIHx8IG1fb2Zmc2V0ID49IGxhc3RP
ZmZzZXRJbk5vZGUobV9wYXJlbnQpKTsKKyAgICByZXR1cm4gIW1fcGFyZW50LT5wYXJlbnROb2Rl
KCkgJiYgKG1fcGFyZW50LT5oYXNDaGlsZE5vZGVzKCkgfHwgbV9vZmZzZXQgPj0gbGFzdE9mZnNl
dEZvckVkaXRpbmcobV9wYXJlbnQpKTsKIH0KIAogYm9vbCBQb3NpdGlvbkl0ZXJhdG9yOjphdFN0
YXJ0T2ZOb2RlKCkgY29uc3QKQEAgLTEzMiw3ICsxMzIsNyBAQCBib29sIFBvc2l0aW9uSXRlcmF0
b3I6OmF0RW5kT2ZOb2RlKCkgY29uc3QKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgaWYgKG1f
Y2hpbGQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gbV9wYXJlbnQtPmhhc0No
aWxkTm9kZXMoKSB8fCBtX29mZnNldCA+PSBsYXN0T2Zmc2V0SW5Ob2RlKG1fcGFyZW50KTsKKyAg
ICByZXR1cm4gbV9wYXJlbnQtPmhhc0NoaWxkTm9kZXMoKSB8fCBtX29mZnNldCA+PSBsYXN0T2Zm
c2V0Rm9yRWRpdGluZyhtX3BhcmVudCk7CiB9CiAKIGJvb2wgUG9zaXRpb25JdGVyYXRvcjo6aXND
YW5kaWRhdGUoKSBjb25zdApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZVNlbGVj
dGlvbkNvbW1hbmQuY3BwIGIvV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQu
Y3BwCmluZGV4IDBiNzgwY2QuLjA5Mjg4ZWUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZWRpdGluZy9E
ZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcAorKysgYi9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2Vs
ZWN0aW9uQ29tbWFuZC5jcHAKQEAgLTQxMSw3ICs0MTEsNyBAQCB2b2lkIERlbGV0ZVNlbGVjdGlv
bkNvbW1hbmQ6OmhhbmRsZUdlbmVyYWxEZWxldGUoKQogICAgICAgICAgICAgZGVsZXRlVGV4dEZy
b21Ob2RlKHRleHQsIGNhcmV0TWF4T2Zmc2V0KHN0YXJ0Tm9kZSksIHRleHQtPmxlbmd0aCgpIC0g
Y2FyZXRNYXhPZmZzZXQoc3RhcnROb2RlKSk7CiAgICAgfQogCi0gICAgaWYgKHN0YXJ0T2Zmc2V0
ID49IGxhc3RPZmZzZXRJbk5vZGUoc3RhcnROb2RlKSkgeworICAgIGlmIChzdGFydE9mZnNldCA+
PSBsYXN0T2Zmc2V0Rm9yRWRpdGluZyhzdGFydE5vZGUpKSB7CiAgICAgICAgIHN0YXJ0Tm9kZSA9
IHN0YXJ0Tm9kZS0+dHJhdmVyc2VOZXh0U2libGluZygpOwogICAgICAgICBzdGFydE9mZnNldCA9
IDA7CiAgICAgfQpAQCAtNDIyLDcgKzQyMiw3IEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFu
ZDo6aGFuZGxlR2VuZXJhbERlbGV0ZSgpCiAKICAgICBpZiAoc3RhcnROb2RlID09IG1fZG93bnN0
cmVhbUVuZC5ub2RlKCkpIHsKICAgICAgICAgLy8gVGhlIHNlbGVjdGlvbiB0byBkZWxldGUgaXMg
YWxsIGluIG9uZSBub2RlLgotICAgICAgICBpZiAoIXN0YXJ0Tm9kZS0+cmVuZGVyZXIoKSB8fCAo
c3RhcnRPZmZzZXQgPT0gMCAmJiBtX2Rvd25zdHJlYW1FbmQuYXRFbmRPZk5vZGUoKSkpIHsKKyAg
ICAgICAgaWYgKCFzdGFydE5vZGUtPnJlbmRlcmVyKCkgfHwgKHN0YXJ0T2Zmc2V0ID09IDAgJiYg
bV9kb3duc3RyZWFtRW5kLmF0TGFzdEVkaXRpbmdQb3NpdGlvbkZvck5vZGUoKSkpIHsKICAgICAg
ICAgICAgIC8vIGp1c3QgZGVsZXRlCiAgICAgICAgICAgICByZW1vdmVOb2RlKHN0YXJ0Tm9kZSk7
CiAgICAgICAgIH0gZWxzZSBpZiAobV9kb3duc3RyZWFtRW5kLm1fb2Zmc2V0IC0gc3RhcnRPZmZz
ZXQgPiAwKSB7CkBAIC00NzgsNyArNDc4LDcgQEAgdm9pZCBEZWxldGVTZWxlY3Rpb25Db21tYW5k
OjpoYW5kbGVHZW5lcmFsRGVsZXRlKCkKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgaWYg
KG1fZG93bnN0cmVhbUVuZC5ub2RlKCkgIT0gc3RhcnROb2RlICYmICFtX3Vwc3RyZWFtU3RhcnQu
bm9kZSgpLT5pc0Rlc2NlbmRhbnRPZihtX2Rvd25zdHJlYW1FbmQubm9kZSgpKSAmJiBtX2Rvd25z
dHJlYW1FbmQubm9kZSgpLT5pbkRvY3VtZW50KCkgJiYgbV9kb3duc3RyZWFtRW5kLm1fb2Zmc2V0
ID49IGNhcmV0TWluT2Zmc2V0KG1fZG93bnN0cmVhbUVuZC5ub2RlKCkpKSB7Ci0gICAgICAgICAg
ICBpZiAobV9kb3duc3RyZWFtRW5kLmF0RW5kT2ZOb2RlKCkgJiYgIWNhbkhhdmVDaGlsZHJlbkZv
ckVkaXRpbmcobV9kb3duc3RyZWFtRW5kLm5vZGUoKSkpIHsKKyAgICAgICAgICAgIGlmIChtX2Rv
d25zdHJlYW1FbmQuYXRMYXN0RWRpdGluZ1Bvc2l0aW9uRm9yTm9kZSgpICYmICFjYW5IYXZlQ2hp
bGRyZW5Gb3JFZGl0aW5nKG1fZG93bnN0cmVhbUVuZC5ub2RlKCkpKSB7CiAgICAgICAgICAgICAg
ICAgLy8gVGhlIG5vZGUgaXRzZWxmIGlzIGZ1bGx5IHNlbGVjdGVkLCBub3QganVzdCBpdHMgY29u
dGVudHMuICBEZWxldGUgaXQuCiAgICAgICAgICAgICAgICAgcmVtb3ZlTm9kZShtX2Rvd25zdHJl
YW1FbmQubm9kZSgpKTsKICAgICAgICAgICAgIH0gZWxzZSB7CmRpZmYgLS1naXQgYS9XZWJDb3Jl
L2VkaXRpbmcvRWRpdG9yLmNwcCBiL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCmluZGV4IDli
ZTU2OTAuLmJhMjdiOGMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCisr
KyBiL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCkBAIC0xNzAyLDggKzE3MDIsOCBAQCB2b2lk
IEVkaXRvcjo6YWR2YW5jZVRvTmV4dE1pc3NwZWxsaW5nKGJvb2wgc3RhcnRCZWZvcmVTZWxlY3Rp
b24pCiAgICAgCiAgICAgLy8gdG9wTm9kZSBkZWZpbmVzIHRoZSB3aG9sZSByYW5nZSB3ZSB3YW50
IHRvIG9wZXJhdGUgb24gCiAgICAgTm9kZSogdG9wTm9kZSA9IGhpZ2hlc3RFZGl0YWJsZVJvb3Qo
cG9zaXRpb24pOwotICAgIC8vIEZJWE1FOiBsYXN0T2Zmc2V0SW5Ob2RlKCkgaXMgd3JvbmcgaGVy
ZSBpZiBlZGl0aW5nSWdub3Jlc0NvbnRlbnQoaGlnaGVzdEVkaXRhYmxlUm9vdCgpKSByZXR1cm5z
IHRydWUgKGUuZy4gYSA8dGFibGU+KQotICAgIHNwZWxsaW5nU2VhcmNoUmFuZ2UtPnNldEVuZCh0
b3BOb2RlLCBsYXN0T2Zmc2V0SW5Ob2RlKHRvcE5vZGUpLCBlYyk7CisgICAgLy8gRklYTUU6IGxh
c3RPZmZzZXRGb3JFZGl0aW5nKCkgaXMgd3JvbmcgaGVyZSBpZiBlZGl0aW5nSWdub3Jlc0NvbnRl
bnQoaGlnaGVzdEVkaXRhYmxlUm9vdCgpKSByZXR1cm5zIHRydWUgKGUuZy4gYSA8dGFibGU+KQor
ICAgIHNwZWxsaW5nU2VhcmNoUmFuZ2UtPnNldEVuZCh0b3BOb2RlLCBsYXN0T2Zmc2V0Rm9yRWRp
dGluZyh0b3BOb2RlKSwgZWMpOwogCiAgICAgLy8gSWYgc3BlbGxpbmdTZWFyY2hSYW5nZSBzdGFy
dHMgaW4gdGhlIG1pZGRsZSBvZiBhIHdvcmQsIGFkdmFuY2UgdG8gdGhlIG5leHQgd29yZCBzbyB3
ZSBzdGFydCBjaGVja2luZwogICAgIC8vIGF0IGEgd29yZCBib3VuZGFyeS4gR29pbmcgYmFjayBi
eSBvbmUgY2hhciBhbmQgdGhlbiBmb3J3YXJkIGJ5IGEgd29yZCBkb2VzIHRoZSB0cmljay4KZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5jcHAgYi9XZWJDb3JlL2VkaXRp
bmcvaHRtbGVkaXRpbmcuY3BwCmluZGV4IDI1OGI1M2IuLmFjM2U2ZjcgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5jcHAKKysrIGIvV2ViQ29yZS9lZGl0aW5nL2h0bWxl
ZGl0aW5nLmNwcApAQCAtMzYyLDcgKzM2Miw3IEBAIFBvc2l0aW9uIHJhbmdlQ29tcGxpYW50RXF1
aXZhbGVudChjb25zdCBWaXNpYmxlUG9zaXRpb24mIHZwb3MpCiAvLyBpbiBhIG5vZGUuICBJdCBy
ZXR1cm5zIDEgZm9yIHNvbWUgZWxlbWVudHMgZXZlbiB0aG91Z2ggdGhleSBkbyBub3QgaGF2ZSBj
aGlsZHJlbiwgd2hpY2gKIC8vIGNyZWF0ZXMgdGVjaG5pY2FsbHkgaW52YWxpZCBET00gUG9zaXRp
b25zLiAgQmUgc3VyZSB0byBjYWxsIHJhbmdlQ29tcGxpYW50RXF1aXZhbGVudAogLy8gb24gYSBQ
b3NpdGlvbiBiZWZvcmUgdXNpbmcgaXQgdG8gY3JlYXRlIGEgRE9NIFJhbmdlLCBvciBhbiBleGNl
cHRpb24gd2lsbCBiZSB0aHJvd24uCi1pbnQgbGFzdE9mZnNldEluTm9kZShjb25zdCBOb2RlKiBu
b2RlKQoraW50IGxhc3RPZmZzZXRGb3JFZGl0aW5nKGNvbnN0IE5vZGUqIG5vZGUpCiB7CiAgICAg
QVNTRVJUKG5vZGUpOwogICAgIGlmICghbm9kZSkKQEAgLTU0Miw3ICs1NDIsNyBAQCBQb3NpdGlv
biBwb3NpdGlvbk91dHNpZGVDb250YWluaW5nU3BlY2lhbEVsZW1lbnQoY29uc3QgUG9zaXRpb24g
JnBvcywgTm9kZSAqKmNvbgogTm9kZSogaXNGaXJzdFBvc2l0aW9uQWZ0ZXJUYWJsZShjb25zdCBW
aXNpYmxlUG9zaXRpb24mIHZpc2libGVQb3NpdGlvbikKIHsKICAgICBQb3NpdGlvbiB1cHN0cmVh
bSh2aXNpYmxlUG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKS51cHN0cmVhbSgpKTsKLSAgICBpZiAo
dXBzdHJlYW0ubm9kZSgpICYmIHVwc3RyZWFtLm5vZGUoKS0+cmVuZGVyZXIoKSAmJiB1cHN0cmVh
bS5ub2RlKCktPnJlbmRlcmVyKCktPmlzVGFibGUoKSAmJiB1cHN0cmVhbS5hdEVuZE9mTm9kZSgp
KQorICAgIGlmICh1cHN0cmVhbS5ub2RlKCkgJiYgdXBzdHJlYW0ubm9kZSgpLT5yZW5kZXJlcigp
ICYmIHVwc3RyZWFtLm5vZGUoKS0+cmVuZGVyZXIoKS0+aXNUYWJsZSgpICYmIHVwc3RyZWFtLmF0
TGFzdEVkaXRpbmdQb3NpdGlvbkZvck5vZGUoKSkKICAgICAgICAgcmV0dXJuIHVwc3RyZWFtLm5v
ZGUoKTsKICAgICAKICAgICByZXR1cm4gMDsKQEAgLTU1MSw3ICs1NTEsNyBAQCBOb2RlKiBpc0Zp
cnN0UG9zaXRpb25BZnRlclRhYmxlKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgdmlzaWJsZVBvc2l0
aW9uKQogTm9kZSogaXNMYXN0UG9zaXRpb25CZWZvcmVUYWJsZShjb25zdCBWaXNpYmxlUG9zaXRp
b24mIHZpc2libGVQb3NpdGlvbikKIHsKICAgICBQb3NpdGlvbiBkb3duc3RyZWFtKHZpc2libGVQ
b3NpdGlvbi5kZWVwRXF1aXZhbGVudCgpLmRvd25zdHJlYW0oKSk7Ci0gICAgaWYgKGRvd25zdHJl
YW0ubm9kZSgpICYmIGRvd25zdHJlYW0ubm9kZSgpLT5yZW5kZXJlcigpICYmIGRvd25zdHJlYW0u
bm9kZSgpLT5yZW5kZXJlcigpLT5pc1RhYmxlKCkgJiYgZG93bnN0cmVhbS5hdFN0YXJ0T2ZOb2Rl
KCkpCisgICAgaWYgKGRvd25zdHJlYW0ubm9kZSgpICYmIGRvd25zdHJlYW0ubm9kZSgpLT5yZW5k
ZXJlcigpICYmIGRvd25zdHJlYW0ubm9kZSgpLT5yZW5kZXJlcigpLT5pc1RhYmxlKCkgJiYgZG93
bnN0cmVhbS5hdEZpcnN0RWRpdGluZ1Bvc2l0aW9uRm9yTm9kZSgpKQogICAgICAgICByZXR1cm4g
ZG93bnN0cmVhbS5ub2RlKCk7CiAgICAgCiAgICAgcmV0dXJuIDA7CkBAIC05MDMsNyArOTAzLDcg
QEAgaW50IGNhcmV0TWF4T2Zmc2V0KGNvbnN0IE5vZGUqIG4pCiAgICAgaWYgKG4tPmlzVGV4dE5v
ZGUoKSAmJiBuLT5yZW5kZXJlcigpKQogICAgICAgICByZXR1cm4gbi0+cmVuZGVyZXIoKS0+Y2Fy
ZXRNYXhPZmZzZXQoKTsKICAgICAvLyBGb3IgY29udGFpbmVycyByZXR1cm4gdGhlIG51bWJlciBv
ZiBjaGlsZHJlbi4gIEZvciBvdGhlcnMgZG8gdGhlIHNhbWUgYXMgYWJvdmUuCi0gICAgcmV0dXJu
IGxhc3RPZmZzZXRJbk5vZGUobik7CisgICAgcmV0dXJuIGxhc3RPZmZzZXRGb3JFZGl0aW5nKG4p
OwogfQogCiBib29sIGxpbmVCcmVha0V4aXN0c0F0UG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0
aW9uJiB2aXNpYmxlUG9zaXRpb24pCmRpZmYgLS1naXQgYS9XZWJDb3JlL2VkaXRpbmcvaHRtbGVk
aXRpbmcuaCBiL1dlYkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5oCmluZGV4IDVjNGI2MzguLmVj
ZTVlMjkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5oCisrKyBiL1dl
YkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5oCkBAIC00Myw3ICs0Myw3IEBAIGNsYXNzIFZpc2li
bGVQb3NpdGlvbjsKIAogUG9zaXRpb24gcmFuZ2VDb21wbGlhbnRFcXVpdmFsZW50KGNvbnN0IFBv
c2l0aW9uJik7CiBQb3NpdGlvbiByYW5nZUNvbXBsaWFudEVxdWl2YWxlbnQoY29uc3QgVmlzaWJs
ZVBvc2l0aW9uJik7Ci1pbnQgbGFzdE9mZnNldEluTm9kZShjb25zdCBOb2RlKik7CitpbnQgbGFz
dE9mZnNldEZvckVkaXRpbmcoY29uc3QgTm9kZSopOwogYm9vbCBpc0F0b21pY05vZGUoY29uc3Qg
Tm9kZSopOwogYm9vbCBlZGl0aW5nSWdub3Jlc0NvbnRlbnQoY29uc3QgTm9kZSopOwogYm9vbCBj
YW5IYXZlQ2hpbGRyZW5Gb3JFZGl0aW5nKGNvbnN0IE5vZGUqKTsKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvZWRpdGluZy92aXNpYmxlX3VuaXRzLmNwcCBiL1dlYkNvcmUvZWRpdGluZy92aXNpYmxlX3Vu
aXRzLmNwcAppbmRleCBkYjc1OTdiLi4xZThiMDViIDEwMDY0NAotLS0gYS9XZWJDb3JlL2VkaXRp
bmcvdmlzaWJsZV91bml0cy5jcHAKKysrIGIvV2ViQ29yZS9lZGl0aW5nL3Zpc2libGVfdW5pdHMu
Y3BwCkBAIC03NDcsNyArNzQ3LDcgQEAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0T2ZQYXJhZ3JhcGgo
Y29uc3QgVmlzaWJsZVBvc2l0aW9uJiBjKQogICAgIGlmICghc3RhcnROb2RlKQogICAgICAgICBy
ZXR1cm4gVmlzaWJsZVBvc2l0aW9uKCk7CiAgICAgCi0gICAgaWYgKHJlbmRlcmVkQXNOb25Jbmxp
bmVUYWJsZU9ySFIoc3RhcnROb2RlLT5yZW5kZXJlcigpKSAmJiBwLmF0RW5kT2ZOb2RlKCkpCisg
ICAgaWYgKHJlbmRlcmVkQXNOb25JbmxpbmVUYWJsZU9ySFIoc3RhcnROb2RlLT5yZW5kZXJlcigp
KSAmJiBwLmF0TGFzdEVkaXRpbmdQb3NpdGlvbkZvck5vZGUoKSkKICAgICAgICAgcmV0dXJuIGZp
cnN0RGVlcEVkaXRpbmdQb3NpdGlvbkZvck5vZGUoc3RhcnROb2RlKTsKIAogICAgIE5vZGUqIHN0
YXJ0QmxvY2sgPSBlbmNsb3NpbmdCbG9jayhzdGFydE5vZGUpOwpAQCAtODA3LDcgKzgwNyw3IEBA
IFZpc2libGVQb3NpdGlvbiBlbmRPZlBhcmFncmFwaChjb25zdCBWaXNpYmxlUG9zaXRpb24gJmMp
CiAgICAgUG9zaXRpb24gcCA9IGMuZGVlcEVxdWl2YWxlbnQoKTsKICAgICBOb2RlKiBzdGFydE5v
ZGUgPSBwLm5vZGUoKTsKIAotICAgIGlmIChyZW5kZXJlZEFzTm9uSW5saW5lVGFibGVPckhSKHN0
YXJ0Tm9kZS0+cmVuZGVyZXIoKSkgJiYgcC5hdFN0YXJ0T2ZOb2RlKCkpCisgICAgaWYgKHJlbmRl
cmVkQXNOb25JbmxpbmVUYWJsZU9ySFIoc3RhcnROb2RlLT5yZW5kZXJlcigpKSAmJiBwLmF0Rmly
c3RFZGl0aW5nUG9zaXRpb25Gb3JOb2RlKCkpCiAgICAgICAgIHJldHVybiBsYXN0RGVlcEVkaXRp
bmdQb3NpdGlvbkZvck5vZGUoc3RhcnROb2RlKTsKICAgICAKICAgICBOb2RlKiBzdGFydEJsb2Nr
ID0gZW5jbG9zaW5nQmxvY2soc3RhcnROb2RlKTsKQEAgLTg1MCw3ICs4NTAsNyBAQCBWaXNpYmxl
UG9zaXRpb24gZW5kT2ZQYXJhZ3JhcGgoY29uc3QgVmlzaWJsZVBvc2l0aW9uICZjKQogICAgICAg
ICAgICAgbiA9IG4tPnRyYXZlcnNlTmV4dE5vZGUoc3RheUluc2lkZUJsb2NrKTsKICAgICAgICAg
fSBlbHNlIGlmIChlZGl0aW5nSWdub3Jlc0NvbnRlbnQobikgfHwgaXNUYWJsZUVsZW1lbnQobikp
IHsKICAgICAgICAgICAgIG5vZGUgPSBuOwotICAgICAgICAgICAgb2Zmc2V0ID0gbGFzdE9mZnNl
dEluTm9kZShuKTsKKyAgICAgICAgICAgIG9mZnNldCA9IGxhc3RPZmZzZXRGb3JFZGl0aW5nKG4p
OwogICAgICAgICAgICAgbiA9IG4tPnRyYXZlcnNlTmV4dFNpYmxpbmcoc3RheUluc2lkZUJsb2Nr
KTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBuID0gbi0+dHJhdmVyc2VOZXh0Tm9kZShz
dGF5SW5zaWRlQmxvY2spOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>28788</attachid>
            <date>2009-03-20 10:18:26 -0700</date>
            <delta_ts>2009-03-20 11:32:56 -0700</delta_ts>
            <desc>Squashed patch with renames</desc>
            <filename>Squashed-patch-with-renames.patch</filename>
            <type>text/plain</type>
            <size>42254</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">MzJiYTI5MTM0MzUzZmQ5OTE5NTVmODk4MzY3MGFhNWM1ZjJjMTdmMQpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBiZjY3YzgxLi5iMjVlMTVm
IDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDEwMSBAQAorMjAwOS0wMy0yMCAgRXJpYyBTZWlkZWwgIDxlcmljQHdlYmtpdC5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgbWF4
RGVlcE9mZnNldCBpcyBjb25mdXNpbmcgYW5kIHNob3VsZCBiZSByZW1vdmVkCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNDU4NgorCisgICAgICAgIEFi
c3RyYWN0IHNvbWUgaGFyZC10by1yZWFkIChidXQgc2hhcmVkKSBsb2dpYyBpbnRvIGEgbmV3IHJl
bmRlcmVkQXNOb25JbmxpbmVUYWJsZU9ySFIgZnVuY3Rpb24uCisgICAgICAgIEFkZCBmaXJzdC9s
YXN0RGVlcEVkaXRpbmdQb3NpdGlvbkZvck5vZGUgUG9zaXRpb24gY3JlYXRpb24gZnVuY3Rpb25z
CisgICAgICAgIGFuZCBkZXBsb3kgdGhlbSB0byBwbGFjZXMgd2UgdXNlZCB0byBjYWxsIG1heERl
ZXBPZmZzZXQuCisKKyAgICAgICAgUmVuYW1lIFBvc2l0aW9uOjphdFN0YXJ0IGFuZCBhdEVuZCB0
byBhdFN0YXJ0T2ZUcmVlIGF0RW5kT2ZUcmVlCisgICAgICAgIEFkZCBhIG5ldyBQb3NpdGlvbjo6
YXRGaXJzdC9hdExhc3RFZGl0aW5nUG9zaXRpb25Gb3JOb2RlKCkgYW5kIHVzZSB0aGVzZQorICAg
ICAgICB0byByZXBsYWNlIGEgZmV3IG1vcmUgY2FsbGVycyBmb3IgbWF4RGVlcE9mZnNldCgpCisg
ICAgICAgIAorICAgICAgICBSZW5hbWUgbWF4RGVlcE9mZnNldCB0byBsYXN0RWRpdGluZ09mZnNl
dEZvck5vZGUgKHNvIHRoYXQgd2UgbWVyZSBtb3J0YWxzIGhhdmUgc29tZSBjbHVlIHdoYXQgaXQg
ZG9lcykKKworICAgICAgICAiRWRpdGluZyBwb3NpdGlvbnMiIGFyZSBjb25mdXNpbmcgYmVjYXVz
ZSB0aGV5IGhhdmUgb25lCisJb2YgdHdvIGJlaGF2aW9ycywgZGVwZW5kaW5nIG9uIGlmIHRoZSBj
b250YWluZXIgbm9kZSBpcyBpZ25vcmVkCisJYnkgZWRpdGluZyAoaWYgZWRpdGluZ0lnbm9yZXND
b250ZW50KG5vZGUpIHJldHVybnMgdHJ1ZSkgb3Igbm90LgorCVBvc2l0aW9ucyByZWZlcnJpbmcg
dG8gbm9kZXMgaWdub3JlZCBieSBlZGl0aW5nIGFyZQorCW5laWdoYm9yLXJlbGF0aXZlICh0aGV5
IGFyZSBiZWZvcmUgb3IgYWZ0ZXIgdGhlIG5vZGUpIHdoZXJlIGFzCisJcG9zaXRpb25zIHJlZmZl
cmluZyB0byBvdGhlciBub2RlcyBhcmUgY29udGFpbmVyLXJlbGF0aXZlCisJKHRoZXkgYXJlIGJl
dHdlZW4gdHdvIGNoaWxkIG5vZGVzIG9mIHRoZSBjb250YWluZXIsIGlkZW50aWZpZWQKKwlieSB0
aGUgb2Zmc2V0KCkgbWVtYmVyKS4gIEkgd2lsbCBiZSBmaXhpbmcgdGhpcyBjb25mdXNpb24gaW4K
KwlmdXR1cmUgcGF0Y2hlcy4gIFRoZXNlIHJlbmFtZXMgaG9wZWZ1bGx5IG1ha2UgdGhlIGN1cnJl
bnQgYmVoYXZpb3IgY2xlYXJlci4KKworICAgICAgICAqIGRvbS9Qb3NpdGlvbi5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpQb3NpdGlvbjo6cHJldmlvdXMpOgorICAgICAgICAoV2ViQ29yZTo6UG9z
aXRpb246Om5leHQpOgorICAgICAgICAoV2ViQ29yZTo6UG9zaXRpb246OmF0Rmlyc3RFZGl0aW5n
UG9zaXRpb25Gb3JOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlBvc2l0aW9uOjphdExhc3RFZGl0
aW5nUG9zaXRpb25Gb3JOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlBvc2l0aW9uOjphdFN0YXJ0
T2ZUcmVlKToKKyAgICAgICAgKFdlYkNvcmU6OlBvc2l0aW9uOjphdEVuZE9mVHJlZSk6CisgICAg
ICAgIChXZWJDb3JlOjpQb3NpdGlvbjo6cHJldmlvdXNDaGFyYWN0ZXJQb3NpdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpQb3NpdGlvbjo6bmV4dENoYXJhY3RlclBvc2l0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OlBvc2l0aW9uOjp1cHN0cmVhbSk6CisgICAgICAgIChXZWJDb3JlOjpQb3NpdGlv
bjo6aXNDYW5kaWRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Zmlyc3REZWVwRWRpdGluZ1Bvc2l0
aW9uRm9yTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpsYXN0RGVlcEVkaXRpbmdQb3NpdGlvbkZv
ck5vZGUpOgorICAgICAgICAqIGRvbS9Qb3NpdGlvbi5oOgorICAgICAgICAqIGRvbS9Qb3NpdGlv
bkl0ZXJhdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBvc2l0aW9uSXRlcmF0b3I6Om9wZXJh
dG9yIFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlBvc2l0aW9uSXRlcmF0b3I6OmluY3Jl
bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpQb3NpdGlvbkl0ZXJhdG9yOjpkZWNyZW1lbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6UG9zaXRpb25JdGVyYXRvcjo6YXRFbmQpOgorICAgICAgICAoV2Vi
Q29yZTo6UG9zaXRpb25JdGVyYXRvcjo6YXRFbmRPZk5vZGUpOgorICAgICAgICAqIGVkaXRpbmcv
Q29tcG9zaXRlRWRpdENvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlRWRp
dENvbW1hbmQ6OnBvc2l0aW9uQXZvaWRpbmdTcGVjaWFsRWxlbWVudEJvdW5kYXJ5KToKKyAgICAg
ICAgKiBlZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6aXNUYWJsZUNlbGxFbXB0eSk6CisgICAgICAgIChXZWJDb3JlOjpEZWxldGVTZWxlY3Rpb25D
b21tYW5kOjpyZW1vdmVOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkRlbGV0ZVNlbGVjdGlvbkNv
bW1hbmQ6OmhhbmRsZUdlbmVyYWxEZWxldGUpOgorICAgICAgICAqIGVkaXRpbmcvRWRpdG9yLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6YWR2YW5jZVRvTmV4dE1pc3NwZWxsaW5nKToK
KyAgICAgICAgKiBlZGl0aW5nL0luc2VydExpbmVCcmVha0NvbW1hbmQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SW5zZXJ0TGluZUJyZWFrQ29tbWFuZDo6ZG9BcHBseSk6CisgICAgICAgICogZWRp
dGluZy9JbnNlcnRMaXN0Q29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNlcnRMaXN0
Q29tbWFuZDo6ZG9BcHBseSk6CisgICAgICAgICogZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29t
bWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6cG9z
aXRpb25BdEVuZE9mSW5zZXJ0ZWRDb250ZW50KToKKyAgICAgICAgKiBlZGl0aW5nL1R5cGluZ0Nv
bW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6Zm9yd2FyZERlbGV0
ZUtleVByZXNzZWQpOgorICAgICAgICAqIGVkaXRpbmcvVmlzaWJsZVBvc2l0aW9uLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlZpc2libGVQb3NpdGlvbjo6cHJldmlvdXMpOgorICAgICAgICAoV2Vi
Q29yZTo6VmlzaWJsZVBvc2l0aW9uOjpsZWZ0VmlzdWFsbHlEaXN0aW5jdENhbmRpZGF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpWaXNpYmxlUG9zaXRpb246OmxlZnQpOgorICAgICAgICAoV2ViQ29y
ZTo6VmlzaWJsZVBvc2l0aW9uOjpyaWdodFZpc3VhbGx5RGlzdGluY3RDYW5kaWRhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6VmlzaWJsZVBvc2l0aW9uOjpyaWdodCk6CisgICAgICAgICogZWRpdGlu
Zy9WaXNpYmxlU2VsZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlZpc2libGVTZWxlY3Rp
b246OnNlbGVjdGlvbkZyb21Db250ZW50c09mTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpWaXNp
YmxlU2VsZWN0aW9uOjphZGp1c3RTZWxlY3Rpb25Ub0F2b2lkQ3Jvc3NpbmdFZGl0aW5nQm91bmRh
cmllcyk6CisgICAgICAgICogZWRpdGluZy9odG1sZWRpdGluZy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpuZXh0VmlzdWFsbHlEaXN0aW5jdENhbmRpZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpw
cmV2aW91c1Zpc3VhbGx5RGlzdGluY3RDYW5kaWRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Zmly
c3RFZGl0YWJsZVBvc2l0aW9uQWZ0ZXJQb3NpdGlvbkluUm9vdCk6CisgICAgICAgIChXZWJDb3Jl
OjpsYXN0RWRpdGFibGVQb3NpdGlvbkJlZm9yZVBvc2l0aW9uSW5Sb290KToKKyAgICAgICAgKFdl
YkNvcmU6Omxhc3RPZmZzZXRGb3JFZGl0aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OmlzRmlyc3RQ
b3NpdGlvbkFmdGVyVGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6aXNMYXN0UG9zaXRpb25CZWZv
cmVUYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpwb3NpdGlvbkJlZm9yZU5vZGUpOgorICAgICAg
ICAoV2ViQ29yZTo6cG9zaXRpb25BZnRlck5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6ZW5jbG9z
aW5nRW1wdHlMaXN0SXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpjYXJldE1heE9mZnNldCk6Cisg
ICAgICAgICogZWRpdGluZy9odG1sZWRpdGluZy5oOgorICAgICAgICAqIGVkaXRpbmcvdmlzaWJs
ZV91bml0cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpyZW5kZXJlZEFzTm9uSW5saW5lVGFibGVP
ckhSKToKKyAgICAgICAgKFdlYkNvcmU6OnN0YXJ0T2ZQYXJhZ3JhcGgpOgorICAgICAgICAoV2Vi
Q29yZTo6ZW5kT2ZQYXJhZ3JhcGgpOgorICAgICAgICAoV2ViQ29yZTo6c3RhcnRPZkVkaXRhYmxl
Q29udGVudCk6CisgICAgICAgIChXZWJDb3JlOjplbmRPZkVkaXRhYmxlQ29udGVudCk6CisgICAg
ICAgICogcGFnZS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmVu
ZE9mU3R5bGVSYW5nZSk6CisgICAgICAgICogcGFnZS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnZpc2li
bGVQb3NpdGlvblJhbmdlKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6cG9zaXRpb25Gb3JQb2ludCk6CisKIDIwMDktMDMt
MjAgIFN0ZXBoZW4gV2hpdGUgIDxzZW5vcmJsYW5jb0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAg
UmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwuCmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9Qb3NpdGlv
bi5jcHAgYi9XZWJDb3JlL2RvbS9Qb3NpdGlvbi5jcHAKaW5kZXggZGMwMTQ3Zi4uNmI3OTJmYyAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vUG9zaXRpb24uY3BwCisrKyBiL1dlYkNvcmUvZG9tL1Bv
c2l0aW9uLmNwcApAQCAtMTEwLDcgKzExMCw3IEBAIFBvc2l0aW9uIFBvc2l0aW9uOjpwcmV2aW91
cyhQb3NpdGlvbk1vdmVUeXBlIG1vdmVUeXBlKSBjb25zdAogICAgIGlmIChvID4gMCkgewogICAg
ICAgICBOb2RlKiBjaGlsZCA9IG4tPmNoaWxkTm9kZShvIC0gMSk7CiAgICAgICAgIGlmIChjaGls
ZCkKLSAgICAgICAgICAgIHJldHVybiBQb3NpdGlvbihjaGlsZCwgbWF4RGVlcE9mZnNldChjaGls
ZCkpOworICAgICAgICAgICAgcmV0dXJuIGxhc3REZWVwRWRpdGluZ1Bvc2l0aW9uRm9yTm9kZShj
aGlsZCk7CiAKICAgICAgICAgLy8gVGhlcmUgYXJlIHR3byByZWFzb25zIGNoaWxkIG1pZ2h0IGJl
IDA6CiAgICAgICAgIC8vICAgMSkgVGhlIG5vZGUgaXMgbm9kZSBsaWtlIGEgdGV4dCBub2RlIHRo
YXQgaXMgbm90IGFuIGVsZW1lbnQsIGFuZCB0aGVyZWZvcmUgaGFzIG5vIGNoaWxkcmVuLgpAQCAt
MTQ3LDEwICsxNDcsMTAgQEAgUG9zaXRpb24gUG9zaXRpb246Om5leHQoUG9zaXRpb25Nb3ZlVHlw
ZSBtb3ZlVHlwZSkgY29uc3QKICAgICBBU1NFUlQobyA+PSAwKTsKIAogICAgIE5vZGUqIGNoaWxk
ID0gbi0+Y2hpbGROb2RlKG8pOwotICAgIGlmIChjaGlsZCB8fCAhbi0+aGFzQ2hpbGROb2Rlcygp
ICYmIG8gPCBtYXhEZWVwT2Zmc2V0KG4pKSB7CisgICAgaWYgKGNoaWxkIHx8ICFuLT5oYXNDaGls
ZE5vZGVzKCkgJiYgbyA8IGxhc3RPZmZzZXRGb3JFZGl0aW5nKG4pKSB7CiAgICAgICAgIGlmIChj
aGlsZCkKLSAgICAgICAgICAgIHJldHVybiBQb3NpdGlvbihjaGlsZCwgMCk7Ci0gICAgICAgICAg
ICAKKyAgICAgICAgICAgIHJldHVybiBmaXJzdERlZXBFZGl0aW5nUG9zaXRpb25Gb3JOb2RlKGNo
aWxkKTsKKwogICAgICAgICAvLyBUaGVyZSBhcmUgdHdvIHJlYXNvbnMgY2hpbGQgbWlnaHQgYmUg
MDoKICAgICAgICAgLy8gICAxKSBUaGUgbm9kZSBpcyBub2RlIGxpa2UgYSB0ZXh0IG5vZGUgdGhh
dCBpcyBub3QgYW4gZWxlbWVudCwgYW5kIHRoZXJlZm9yZSBoYXMgbm8gY2hpbGRyZW4uCiAgICAg
ICAgIC8vICAgICAgR29pbmcgZm9yd2FyZCBvbmUgY2hhcmFjdGVyIGF0IGEgdGltZSBpcyBjb3Jy
ZWN0LgpAQCAtMTgxLDIyICsxODEsMzIgQEAgaW50IFBvc2l0aW9uOjp1bmNoZWNrZWROZXh0T2Zm
c2V0KGNvbnN0IE5vZGUqIG4sIGludCBjdXJyZW50KQogICAgIHJldHVybiBuLT5yZW5kZXJlcigp
ID8gbi0+cmVuZGVyZXIoKS0+bmV4dE9mZnNldChjdXJyZW50KSA6IGN1cnJlbnQgKyAxOwogfQog
Ci1ib29sIFBvc2l0aW9uOjphdFN0YXJ0KCkgY29uc3QKK2Jvb2wgUG9zaXRpb246OmF0Rmlyc3RF
ZGl0aW5nUG9zaXRpb25Gb3JOb2RlKCkgY29uc3QKIHsKLSAgICBOb2RlICpuID0gbm9kZSgpOwot
ICAgIGlmICghbikKKyAgICBpZiAoaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwotICAg
IAotICAgIHJldHVybiBtX29mZnNldCA8PSAwICYmIG4tPnBhcmVudCgpID09IDA7CisgICAgcmV0
dXJuIG1fb2Zmc2V0IDw9IDA7CiB9CiAKLWJvb2wgUG9zaXRpb246OmF0RW5kKCkgY29uc3QKK2Jv
b2wgUG9zaXRpb246OmF0TGFzdEVkaXRpbmdQb3NpdGlvbkZvck5vZGUoKSBjb25zdAogewotICAg
IE5vZGUgKm4gPSBub2RlKCk7Ci0gICAgaWYgKCFuKQorICAgIGlmIChpc051bGwoKSkKICAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgCi0gICAgcmV0dXJuIG4tPnBhcmVudCgpID09IDAgJiYgbV9v
ZmZzZXQgPj0gbWF4RGVlcE9mZnNldChuKTsKKyAgICByZXR1cm4gbV9vZmZzZXQgPj0gbGFzdE9m
ZnNldEZvckVkaXRpbmcobm9kZSgpKTsKK30KKworYm9vbCBQb3NpdGlvbjo6YXRTdGFydE9mVHJl
ZSgpIGNvbnN0Cit7CisgICAgaWYgKGlzTnVsbCgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICByZXR1cm4gIW5vZGUoKS0+cGFyZW50Tm9kZSgpICYmIG1fb2Zmc2V0IDw9IDA7Cit9CisKK2Jv
b2wgUG9zaXRpb246OmF0RW5kT2ZUcmVlKCkgY29uc3QKK3sKKyAgICBpZiAoaXNOdWxsKCkpCisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiAhbm9kZSgpLT5wYXJlbnROb2RlKCkgJiYg
bV9vZmZzZXQgPj0gbGFzdE9mZnNldEZvckVkaXRpbmcobm9kZSgpKTsKIH0KIAogaW50IFBvc2l0
aW9uOjpyZW5kZXJlZE9mZnNldCgpIGNvbnN0CkBAIC0yMzUsNyArMjQ1LDcgQEAgUG9zaXRpb24g
UG9zaXRpb246OnByZXZpb3VzQ2hhcmFjdGVyUG9zaXRpb24oRUFmZmluaXR5IGFmZmluaXR5KSBj
b25zdAogICAgIGJvb2wgcmVuZGVyZWQgPSBpc0NhbmRpZGF0ZSgpOwogICAgIAogICAgIFBvc2l0
aW9uIGN1cnJlbnRQb3MgPSAqdGhpczsKLSAgICB3aGlsZSAoIWN1cnJlbnRQb3MuYXRTdGFydCgp
KSB7CisgICAgd2hpbGUgKCFjdXJyZW50UG9zLmF0U3RhcnRPZlRyZWUoKSkgewogICAgICAgICBj
dXJyZW50UG9zID0gY3VycmVudFBvcy5wcmV2aW91cygpOwogCiAgICAgICAgIGlmIChjdXJyZW50
UG9zLm5vZGUoKS0+cm9vdEVkaXRhYmxlRWxlbWVudCgpICE9IGZyb21Sb290RWRpdGFibGVFbGVt
ZW50KQpAQCAtMjYzLDcgKzI3Myw3IEBAIFBvc2l0aW9uIFBvc2l0aW9uOjpuZXh0Q2hhcmFjdGVy
UG9zaXRpb24oRUFmZmluaXR5IGFmZmluaXR5KSBjb25zdAogICAgIGJvb2wgcmVuZGVyZWQgPSBp
c0NhbmRpZGF0ZSgpOwogICAgIAogICAgIFBvc2l0aW9uIGN1cnJlbnRQb3MgPSAqdGhpczsKLSAg
ICB3aGlsZSAoIWN1cnJlbnRQb3MuYXRFbmQoKSkgeworICAgIHdoaWxlICghY3VycmVudFBvcy5h
dEVuZE9mVHJlZSgpKSB7CiAgICAgICAgIGN1cnJlbnRQb3MgPSBjdXJyZW50UG9zLm5leHQoKTsK
IAogICAgICAgICBpZiAoY3VycmVudFBvcy5ub2RlKCktPnJvb3RFZGl0YWJsZUVsZW1lbnQoKSAh
PSBmcm9tUm9vdEVkaXRhYmxlRWxlbWVudCkKQEAgLTI3OSw3ICsyODksNyBAQCBQb3NpdGlvbiBQ
b3NpdGlvbjo6bmV4dENoYXJhY3RlclBvc2l0aW9uKEVBZmZpbml0eSBhZmZpbml0eSkgY29uc3QK
ICAgICByZXR1cm4gKnRoaXM7CiB9CiAKLS8vIFdoZXRoZXIgb3Igbm90IFtub2RlLCAwXSBhbmQg
W25vZGUsIG1heERlZXBPZmZzZXQobm9kZSldIGFyZSB0aGVpciBvd24gVmlzaWJsZVBvc2l0aW9u
cy4KKy8vIFdoZXRoZXIgb3Igbm90IFtub2RlLCAwXSBhbmQgW25vZGUsIGxhc3RPZmZzZXRGb3JF
ZGl0aW5nKG5vZGUpXSBhcmUgdGhlaXIgb3duIFZpc2libGVQb3NpdGlvbnMuCiAvLyBJZiB0cnVl
LCBhZGphY2VudCBjYW5kaWRhdGVzIGFyZSB2aXN1YWxseSBkaXN0aW5jdC4KIC8vIEZJWE1FOiBE
aXNyZWdhcmQgbm9kZXMgd2l0aCByZW5kZXJlcnMgdGhhdCBoYXZlIG5vIGhlaWdodCwgYXMgd2Ug
ZG8gaW4gaXNDYW5kaWRhdGUuCiAvLyBGSVhNRTogU2hhcmUgY29kZSB3aXRoIGlzQ2FuZGlkYXRl
LCBpZiBwb3NzaWJsZS4KQEAgLTM3Myw3ICszODMsNyBAQCBQb3NpdGlvbiBQb3NpdGlvbjo6dXBz
dHJlYW0oKSBjb25zdAogICAgICAgICAvLyBSZXR1cm4gcG9zaXRpb24gYWZ0ZXIgdGFibGVzIGFu
ZCBub2RlcyB3aGljaCBoYXZlIGNvbnRlbnQgdGhhdCBjYW4gYmUgaWdub3JlZC4KICAgICAgICAg
aWYgKGVkaXRpbmdJZ25vcmVzQ29udGVudChjdXJyZW50Tm9kZSkgfHwgaXNUYWJsZUVsZW1lbnQo
Y3VycmVudE5vZGUpKSB7CiAgICAgICAgICAgICBpZiAoY3VycmVudFBvcy5hdEVuZE9mTm9kZSgp
KQotICAgICAgICAgICAgICAgIHJldHVybiBQb3NpdGlvbihjdXJyZW50Tm9kZSwgbWF4RGVlcE9m
ZnNldChjdXJyZW50Tm9kZSkpOworICAgICAgICAgICAgICAgIHJldHVybiBsYXN0RGVlcEVkaXRp
bmdQb3NpdGlvbkZvck5vZGUoY3VycmVudE5vZGUpOwogICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgIH0KIApAQCAtNTgwLDExICs1OTAsMTEgQEAgYm9vbCBQb3NpdGlvbjo6aXNDYW5kaWRh
dGUoKSBjb25zdAogICAgICAgICByZXR1cm4gaW5SZW5kZXJlZFRleHQoKSAmJiAhbm9kZUlzVXNl
clNlbGVjdE5vbmUobm9kZSgpKTsKIAogICAgIGlmIChpc1RhYmxlRWxlbWVudChub2RlKCkpIHx8
IGVkaXRpbmdJZ25vcmVzQ29udGVudChub2RlKCkpKQotICAgICAgICByZXR1cm4gKG1fb2Zmc2V0
ID09IDAgfHwgbV9vZmZzZXQgPT0gbWF4RGVlcE9mZnNldChub2RlKCkpKSAmJiAhbm9kZUlzVXNl
clNlbGVjdE5vbmUobm9kZSgpLT5wYXJlbnQoKSk7CisgICAgICAgIHJldHVybiAoYXRGaXJzdEVk
aXRpbmdQb3NpdGlvbkZvck5vZGUoKSB8fCBhdExhc3RFZGl0aW5nUG9zaXRpb25Gb3JOb2RlKCkp
ICYmICFub2RlSXNVc2VyU2VsZWN0Tm9uZShub2RlKCktPnBhcmVudCgpKTsKIAogICAgIGlmICgh
bm9kZSgpLT5oYXNUYWdOYW1lKGh0bWxUYWcpICYmIHJlbmRlcmVyLT5pc0Jsb2NrRmxvdygpICYm
ICFoYXNSZW5kZXJlZE5vbkFub255bW91c0Rlc2NlbmRhbnRzV2l0aEhlaWdodChyZW5kZXJlcikg
JiYKICAgICAgICAodG9SZW5kZXJCb3gocmVuZGVyZXIpLT5oZWlnaHQoKSB8fCBub2RlKCktPmhh
c1RhZ05hbWUoYm9keVRhZykpKQotICAgICAgICByZXR1cm4gbV9vZmZzZXQgPT0gMCAmJiAhbm9k
ZUlzVXNlclNlbGVjdE5vbmUobm9kZSgpKTsKKyAgICAgICAgcmV0dXJuIGF0Rmlyc3RFZGl0aW5n
UG9zaXRpb25Gb3JOb2RlKCkgJiYgIW5vZGVJc1VzZXJTZWxlY3ROb25lKG5vZGUoKSk7CiAgICAg
CiAgICAgcmV0dXJuIGZhbHNlOwogfQpAQCAtOTk4LDYgKzEwMDgsMTkgQEAgUG9zaXRpb24gZW5k
UG9zaXRpb24oY29uc3QgUmFuZ2UqIHIpCiAgICAgcmV0dXJuIHIgPyByLT5lbmRQb3NpdGlvbigp
IDogUG9zaXRpb24oKTsKIH0KIAorLy8gTk9URTogZmlyc3QvbGFzdERlZXBFZGl0aW5nUG9zaXRp
b25Gb3JOb2RlIGNhbiByZXR1cm4gImVkaXRpbmcgcG9zaXRpb25zIiAobGlrZSBbaW1nLCAwXSkK
Ky8vIGZvciBlbGVtZW50cyB3aGljaCBlZGl0aW5nICJpZ25vcmVzIi4gIHRoZSByZXN0IG9mIHRo
ZSBlZGl0aW5nIGNvZGUgd2lsbCB0cmVhdCBbaW1nLCAwXQorLy8gYXMgInRoZSBmaXJzdCBwb3Np
dGlvbiBiZWZvcmUgdGhlIGltYWdlIgorUG9zaXRpb24gZmlyc3REZWVwRWRpdGluZ1Bvc2l0aW9u
Rm9yTm9kZShOb2RlKiBub2RlKQoreworICAgIHJldHVybiBQb3NpdGlvbihub2RlLCAwKTsKK30K
KworUG9zaXRpb24gbGFzdERlZXBFZGl0aW5nUG9zaXRpb25Gb3JOb2RlKE5vZGUqIG5vZGUpCit7
CisgICAgcmV0dXJuIFBvc2l0aW9uKG5vZGUsIGxhc3RPZmZzZXRGb3JFZGl0aW5nKG5vZGUpKTsK
K30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjaWZuZGVmIE5ERUJVRwpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9kb20vUG9zaXRpb24uaCBiL1dlYkNvcmUvZG9tL1Bvc2l0aW9uLmgKaW5kZXgg
NzFlZTI0Ny4uYWQ5MTUzZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vUG9zaXRpb24uaAorKysg
Yi9XZWJDb3JlL2RvbS9Qb3NpdGlvbi5oCkBAIC03OCw4ICs3OCwxMyBAQCBwdWJsaWM6CiAgICAg
c3RhdGljIGludCB1bmNoZWNrZWRQcmV2aW91c09mZnNldEZvckJhY2t3YXJkRGVsZXRpb24oY29u
c3QgTm9kZSosIGludCBjdXJyZW50KTsKICAgICBzdGF0aWMgaW50IHVuY2hlY2tlZE5leHRPZmZz
ZXQoY29uc3QgTm9kZSosIGludCBjdXJyZW50KTsKIAotICAgIGJvb2wgYXRTdGFydCgpIGNvbnN0
OwotICAgIGJvb2wgYXRFbmQoKSBjb25zdDsKKyAgICAvLyBUaGVzZSBjYW4gYmUgZWl0aGVyIGlu
c2lkZSBvciBqdXN0IGJlZm9yZS9hZnRlciB0aGUgbm9kZSwgZGVwZW5kaW5nIG9uCisgICAgLy8g
aWYgdGhlIG5vZGUgaXMgaWdub3JlZCBieSBlZGl0aW5nIG9yIG5vdC4KKyAgICBib29sIGF0Rmly
c3RFZGl0aW5nUG9zaXRpb25Gb3JOb2RlKCkgY29uc3Q7CisgICAgYm9vbCBhdExhc3RFZGl0aW5n
UG9zaXRpb25Gb3JOb2RlKCkgY29uc3Q7CisKKyAgICBib29sIGF0U3RhcnRPZlRyZWUoKSBjb25z
dDsKKyAgICBib29sIGF0RW5kT2ZUcmVlKCkgY29uc3Q7CiAKICAgICAvLyBGSVhNRTogTWFrZSB0
aGVzZSBub24tbWVtYmVyIGZ1bmN0aW9ucyBhbmQgcHV0IHRoZW0gc29tZXdoZXJlIGluIHRoZSBl
ZGl0aW5nIGRpcmVjdG9yeS4KICAgICAvLyBUaGVzZSBhcmVuJ3QgcmVhbGx5IGJhc2ljICJwb3Np
dGlvbiIgb3BlcmF0aW9ucy4gTW9yZSBoaWdoIGxldmVsIGVkaXRpbmcgaGVscGVyIGZ1bmN0aW9u
cy4KQEAgLTEyOCw2ICsxMzMsMTIgQEAgaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBQb3Np
dGlvbiYgYSwgY29uc3QgUG9zaXRpb24mIGIpCiBQb3NpdGlvbiBzdGFydFBvc2l0aW9uKGNvbnN0
IFJhbmdlKik7CiBQb3NpdGlvbiBlbmRQb3NpdGlvbihjb25zdCBSYW5nZSopOwogCisvLyBOT1RF
OiBmaXJzdC9sYXN0RGVlcEVkaXRpbmdQb3NpdGlvbkZvck5vZGUgY2FuIHJldHVybiAiZWRpdGlu
ZyBwb3NpdGlvbnMiIChsaWtlIFtpbWcsIDBdKQorLy8gZm9yIGVsZW1lbnRzIHdoaWNoIGVkaXRp
bmcgImlnbm9yZXMiLiAgdGhlIHJlc3Qgb2YgdGhlIGVkaXRpbmcgY29kZSB3aWxsIHRyZWF0IFtp
bWcsIDBdCisvLyBhcyAidGhlIGZpcnN0IHBvc2l0aW9uIGJlZm9yZSB0aGUgaW1hZ2UiCitQb3Np
dGlvbiBmaXJzdERlZXBFZGl0aW5nUG9zaXRpb25Gb3JOb2RlKE5vZGUqKTsKK1Bvc2l0aW9uIGxh
c3REZWVwRWRpdGluZ1Bvc2l0aW9uRm9yTm9kZShOb2RlKik7CisKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKIAogI2lmbmRlZiBOREVCVUcKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL1Bvc2l0aW9u
SXRlcmF0b3IuY3BwIGIvV2ViQ29yZS9kb20vUG9zaXRpb25JdGVyYXRvci5jcHAKaW5kZXggZGQ5
MTI4ZC4uYjI2ZGFkNyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vUG9zaXRpb25JdGVyYXRvci5j
cHAKKysrIGIvV2ViQ29yZS9kb20vUG9zaXRpb25JdGVyYXRvci5jcHAKQEAgLTM2LDcgKzM2LDEz
IEBAIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKIFBvc2l0aW9uSXRlcmF0b3I6Om9wZXJh
dG9yIFBvc2l0aW9uKCkgY29uc3QKIHsKLSAgICByZXR1cm4gUG9zaXRpb24obV9wYXJlbnQsIG1f
Y2hpbGQgPyBtX2NoaWxkLT5ub2RlSW5kZXgoKSA6IChtX3BhcmVudC0+aGFzQ2hpbGROb2Rlcygp
ID8gbWF4RGVlcE9mZnNldChtX3BhcmVudCkgOiBtX29mZnNldCkpOworICAgIGlmIChtX2NoaWxk
KSB7CisgICAgICAgIEFTU0VSVChtX2NoaWxkLT5wYXJlbnROb2RlKCkgPT0gbV9wYXJlbnQpOwor
ICAgICAgICByZXR1cm4gcG9zaXRpb25CZWZvcmVOb2RlKG1fY2hpbGQpOworICAgIH0KKyAgICBp
ZiAobV9wYXJlbnQtPmhhc0NoaWxkTm9kZXMoKSkKKyAgICAgICAgcmV0dXJuIGxhc3REZWVwRWRp
dGluZ1Bvc2l0aW9uRm9yTm9kZShtX3BhcmVudCk7CisgICAgcmV0dXJuIFBvc2l0aW9uKG1fcGFy
ZW50LCBtX29mZnNldCk7CiB9CiAKIHZvaWQgUG9zaXRpb25JdGVyYXRvcjo6aW5jcmVtZW50KCkK
QEAgLTUxLDcgKzU3LDcgQEAgdm9pZCBQb3NpdGlvbkl0ZXJhdG9yOjppbmNyZW1lbnQoKQogICAg
ICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKCFtX3BhcmVudC0+aGFzQ2hpbGROb2Rlcygp
ICYmIG1fb2Zmc2V0IDwgbWF4RGVlcE9mZnNldChtX3BhcmVudCkpCisgICAgaWYgKCFtX3BhcmVu
dC0+aGFzQ2hpbGROb2RlcygpICYmIG1fb2Zmc2V0IDwgbGFzdE9mZnNldEZvckVkaXRpbmcobV9w
YXJlbnQpKQogICAgICAgICBtX29mZnNldCA9IFBvc2l0aW9uOjp1bmNoZWNrZWROZXh0T2Zmc2V0
KG1fcGFyZW50LCBtX29mZnNldCk7CiAgICAgZWxzZSB7CiAgICAgICAgIG1fY2hpbGQgPSBtX3Bh
cmVudDsKQEAgLTcwLDcgKzc2LDcgQEAgdm9pZCBQb3NpdGlvbkl0ZXJhdG9yOjpkZWNyZW1lbnQo
KQogICAgICAgICBtX3BhcmVudCA9IG1fY2hpbGQtPnByZXZpb3VzU2libGluZygpOwogICAgICAg
ICBpZiAobV9wYXJlbnQpIHsKICAgICAgICAgICAgIG1fY2hpbGQgPSAwOwotICAgICAgICAgICAg
bV9vZmZzZXQgPSBtX3BhcmVudC0+aGFzQ2hpbGROb2RlcygpID8gMCA6IG1heERlZXBPZmZzZXQo
bV9wYXJlbnQpOworICAgICAgICAgICAgbV9vZmZzZXQgPSBtX3BhcmVudC0+aGFzQ2hpbGROb2Rl
cygpID8gMCA6IGxhc3RPZmZzZXRGb3JFZGl0aW5nKG1fcGFyZW50KTsKICAgICAgICAgfSBlbHNl
IHsKICAgICAgICAgICAgIG1fY2hpbGQgPSBtX2NoaWxkLT5wYXJlbnROb2RlKCk7CiAgICAgICAg
ICAgICBtX3BhcmVudCA9IG1fY2hpbGQtPnBhcmVudE5vZGUoKTsKQEAgLTg1LDcgKzkxLDcgQEAg
dm9pZCBQb3NpdGlvbkl0ZXJhdG9yOjpkZWNyZW1lbnQoKQogICAgICAgICBpZiAobV9wYXJlbnQt
Pmhhc0NoaWxkTm9kZXMoKSkgewogICAgICAgICAgICAgbV9wYXJlbnQgPSBtX3BhcmVudC0+bGFz
dENoaWxkKCk7CiAgICAgICAgICAgICBpZiAoIW1fcGFyZW50LT5oYXNDaGlsZE5vZGVzKCkpCi0g
ICAgICAgICAgICAgICAgbV9vZmZzZXQgPSBtYXhEZWVwT2Zmc2V0KG1fcGFyZW50KTsKKyAgICAg
ICAgICAgICAgICBtX29mZnNldCA9IGxhc3RPZmZzZXRGb3JFZGl0aW5nKG1fcGFyZW50KTsKICAg
ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIG1fY2hpbGQgPSBtX3BhcmVudDsKICAgICAgICAg
ICAgIG1fcGFyZW50ID0gbV9wYXJlbnQtPnBhcmVudE5vZGUoKTsKQEAgLTEwOCw3ICsxMTQsNyBA
QCBib29sIFBvc2l0aW9uSXRlcmF0b3I6OmF0RW5kKCkgY29uc3QKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgaWYgKG1fY2hpbGQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4g
IW1fcGFyZW50LT5wYXJlbnROb2RlKCkgJiYgKG1fcGFyZW50LT5oYXNDaGlsZE5vZGVzKCkgfHwg
bV9vZmZzZXQgPj0gbWF4RGVlcE9mZnNldChtX3BhcmVudCkpOworICAgIHJldHVybiAhbV9wYXJl
bnQtPnBhcmVudE5vZGUoKSAmJiAobV9wYXJlbnQtPmhhc0NoaWxkTm9kZXMoKSB8fCBtX29mZnNl
dCA+PSBsYXN0T2Zmc2V0Rm9yRWRpdGluZyhtX3BhcmVudCkpOwogfQogCiBib29sIFBvc2l0aW9u
SXRlcmF0b3I6OmF0U3RhcnRPZk5vZGUoKSBjb25zdApAQCAtMTI2LDcgKzEzMiw3IEBAIGJvb2wg
UG9zaXRpb25JdGVyYXRvcjo6YXRFbmRPZk5vZGUoKSBjb25zdAogICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICBpZiAobV9jaGlsZCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiBt
X3BhcmVudC0+aGFzQ2hpbGROb2RlcygpIHx8IG1fb2Zmc2V0ID49IG1heERlZXBPZmZzZXQobV9w
YXJlbnQpOworICAgIHJldHVybiBtX3BhcmVudC0+aGFzQ2hpbGROb2RlcygpIHx8IG1fb2Zmc2V0
ID49IGxhc3RPZmZzZXRGb3JFZGl0aW5nKG1fcGFyZW50KTsKIH0KIAogYm9vbCBQb3NpdGlvbkl0
ZXJhdG9yOjppc0NhbmRpZGF0ZSgpIGNvbnN0CmRpZmYgLS1naXQgYS9XZWJDb3JlL2VkaXRpbmcv
Q29tcG9zaXRlRWRpdENvbW1hbmQuY3BwIGIvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRD
b21tYW5kLmNwcAppbmRleCAzNTA2MDlmLi45MDUyNTgyIDEwMDY0NAotLS0gYS9XZWJDb3JlL2Vk
aXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCisrKyBiL1dlYkNvcmUvZWRpdGluZy9Db21w
b3NpdGVFZGl0Q29tbWFuZC5jcHAKQEAgLTk3OSw4ICs5NzksOCBAQCBQb3NpdGlvbiBDb21wb3Np
dGVFZGl0Q29tbWFuZDo6cG9zaXRpb25Bdm9pZGluZ1NwZWNpYWxFbGVtZW50Qm91bmRhcnkoY29u
c3QgUG9zaQogICAgIFBvc2l0aW9uIHJlc3VsdCA9IG9yaWdpbmFsOwogICAgIC8vIERvbid0IGF2
b2lkIGJsb2NrIGxldmVsIGFuY2hvcnMsIGJlY2F1c2UgdGhhdCB3b3VsZCBpbnNlcnQgY29udGVu
dCBpbnRvIHRoZSB3cm9uZyBwYXJhZ3JhcGguCiAgICAgaWYgKGVuY2xvc2luZ0FuY2hvciAmJiAh
aXNCbG9jayhlbmNsb3NpbmdBbmNob3IpKSB7Ci0gICAgICAgIFZpc2libGVQb3NpdGlvbiBmaXJz
dEluQW5jaG9yKFBvc2l0aW9uKGVuY2xvc2luZ0FuY2hvciwgMCkpOwotICAgICAgICBWaXNpYmxl
UG9zaXRpb24gbGFzdEluQW5jaG9yKFBvc2l0aW9uKGVuY2xvc2luZ0FuY2hvciwgbWF4RGVlcE9m
ZnNldChlbmNsb3NpbmdBbmNob3IpKSk7CisgICAgICAgIFZpc2libGVQb3NpdGlvbiBmaXJzdElu
QW5jaG9yKGZpcnN0RGVlcEVkaXRpbmdQb3NpdGlvbkZvck5vZGUoZW5jbG9zaW5nQW5jaG9yKSk7
CisgICAgICAgIFZpc2libGVQb3NpdGlvbiBsYXN0SW5BbmNob3IobGFzdERlZXBFZGl0aW5nUG9z
aXRpb25Gb3JOb2RlKGVuY2xvc2luZ0FuY2hvcikpOwogICAgICAgICAvLyBJZiB2aXN1YWxseSBq
dXN0IGFmdGVyIHRoZSBhbmNob3IsIGluc2VydCAqaW5zaWRlKiB0aGUgYW5jaG9yIHVubGVzcyBp
dCdzIHRoZSBsYXN0IAogICAgICAgICAvLyBWaXNpYmxlUG9zaXRpb24gaW4gdGhlIGRvY3VtZW50
LCB0byBtYXRjaCBOU1RleHRWaWV3LgogICAgICAgICBpZiAodmlzaWJsZVBvcyA9PSBsYXN0SW5B
bmNob3IpIHsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21t
YW5kLmNwcCBiL1dlYkNvcmUvZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcAppbmRl
eCA4NTBjMWU1Li4wOTI4OGVlIDEwMDY0NAotLS0gYS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2Vs
ZWN0aW9uQ29tbWFuZC5jcHAKKysrIGIvV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNv
bW1hbmQuY3BwCkBAIC01Niw5ICs1Niw3IEBAIHN0YXRpYyBib29sIGlzVGFibGVSb3coY29uc3Qg
Tm9kZSogbm9kZSkKIHN0YXRpYyBib29sIGlzVGFibGVDZWxsRW1wdHkoTm9kZSogY2VsbCkKIHsK
ICAgICBBU1NFUlQoaXNUYWJsZUNlbGwoY2VsbCkpOwotICAgIFZpc2libGVQb3NpdGlvbiBmaXJz
dEluQ2VsbChQb3NpdGlvbihjZWxsLCAwKSk7Ci0gICAgVmlzaWJsZVBvc2l0aW9uIGxhc3RJbkNl
bGwoUG9zaXRpb24oY2VsbCwgbWF4RGVlcE9mZnNldChjZWxsKSkpOwotICAgIHJldHVybiBmaXJz
dEluQ2VsbCA9PSBsYXN0SW5DZWxsOworICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oZmlyc3RE
ZWVwRWRpdGluZ1Bvc2l0aW9uRm9yTm9kZShjZWxsKSkgPT0gVmlzaWJsZVBvc2l0aW9uKGxhc3RE
ZWVwRWRpdGluZ1Bvc2l0aW9uRm9yTm9kZShjZWxsKSk7CiB9CiAKIHN0YXRpYyBib29sIGlzVGFi
bGVSb3dFbXB0eShOb2RlKiByb3cpCkBAIC0zNjMsOSArMzYxLDkgQEAgdm9pZCBEZWxldGVTZWxl
Y3Rpb25Db21tYW5kOjpyZW1vdmVOb2RlKFBhc3NSZWZQdHI8Tm9kZT4gbm9kZSkKICAgICAgICAg
cmV0dXJuOwogICAgIH0KICAgICAKLSAgICBpZiAobm9kZSA9PSBtX3N0YXJ0QmxvY2sgJiYgIWlz
RW5kT2ZCbG9jayhWaXNpYmxlUG9zaXRpb24obV9zdGFydEJsb2NrLmdldCgpLCAwLCBET1dOU1RS
RUFNKS5wcmV2aW91cygpKSkKKyAgICBpZiAobm9kZSA9PSBtX3N0YXJ0QmxvY2sgJiYgIWlzRW5k
T2ZCbG9jayhWaXNpYmxlUG9zaXRpb24oZmlyc3REZWVwRWRpdGluZ1Bvc2l0aW9uRm9yTm9kZSht
X3N0YXJ0QmxvY2suZ2V0KCkpKS5wcmV2aW91cygpKSkKICAgICAgICAgbV9uZWVkUGxhY2Vob2xk
ZXIgPSB0cnVlOwotICAgIGVsc2UgaWYgKG5vZGUgPT0gbV9lbmRCbG9jayAmJiAhaXNTdGFydE9m
QmxvY2soVmlzaWJsZVBvc2l0aW9uKG1fZW5kQmxvY2suZ2V0KCksIG1heERlZXBPZmZzZXQobV9l
bmRCbG9jay5nZXQoKSksIERPV05TVFJFQU0pLm5leHQoKSkpCisgICAgZWxzZSBpZiAobm9kZSA9
PSBtX2VuZEJsb2NrICYmICFpc1N0YXJ0T2ZCbG9jayhWaXNpYmxlUG9zaXRpb24obGFzdERlZXBF
ZGl0aW5nUG9zaXRpb25Gb3JOb2RlKG1fc3RhcnRCbG9jay5nZXQoKSkpLm5leHQoKSkpCiAgICAg
ICAgIG1fbmVlZFBsYWNlaG9sZGVyID0gdHJ1ZTsKICAgICAKICAgICAvLyBGSVhNRTogVXBkYXRl
IHRoZSBlbmRwb2ludHMgb2YgdGhlIHJhbmdlIGJlaW5nIGRlbGV0ZWQuCkBAIC00MTMsNyArNDEx
LDcgQEAgdm9pZCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpoYW5kbGVHZW5lcmFsRGVsZXRlKCkK
ICAgICAgICAgICAgIGRlbGV0ZVRleHRGcm9tTm9kZSh0ZXh0LCBjYXJldE1heE9mZnNldChzdGFy
dE5vZGUpLCB0ZXh0LT5sZW5ndGgoKSAtIGNhcmV0TWF4T2Zmc2V0KHN0YXJ0Tm9kZSkpOwogICAg
IH0KIAotICAgIGlmIChzdGFydE9mZnNldCA+PSBtYXhEZWVwT2Zmc2V0KHN0YXJ0Tm9kZSkpIHsK
KyAgICBpZiAoc3RhcnRPZmZzZXQgPj0gbGFzdE9mZnNldEZvckVkaXRpbmcoc3RhcnROb2RlKSkg
ewogICAgICAgICBzdGFydE5vZGUgPSBzdGFydE5vZGUtPnRyYXZlcnNlTmV4dFNpYmxpbmcoKTsK
ICAgICAgICAgc3RhcnRPZmZzZXQgPSAwOwogICAgIH0KQEAgLTQyNCwxNCArNDIyLDEzIEBAIHZv
aWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6aGFuZGxlR2VuZXJhbERlbGV0ZSgpCiAKICAgICBp
ZiAoc3RhcnROb2RlID09IG1fZG93bnN0cmVhbUVuZC5ub2RlKCkpIHsKICAgICAgICAgLy8gVGhl
IHNlbGVjdGlvbiB0byBkZWxldGUgaXMgYWxsIGluIG9uZSBub2RlLgotICAgICAgICBpZiAoIXN0
YXJ0Tm9kZS0+cmVuZGVyZXIoKSB8fCAKLSAgICAgICAgICAgIChzdGFydE9mZnNldCA9PSAwICYm
IG1fZG93bnN0cmVhbUVuZC5tX29mZnNldCA+PSBtYXhEZWVwT2Zmc2V0KHN0YXJ0Tm9kZSkpKSB7
CisgICAgICAgIGlmICghc3RhcnROb2RlLT5yZW5kZXJlcigpIHx8IChzdGFydE9mZnNldCA9PSAw
ICYmIG1fZG93bnN0cmVhbUVuZC5hdExhc3RFZGl0aW5nUG9zaXRpb25Gb3JOb2RlKCkpKSB7CiAg
ICAgICAgICAgICAvLyBqdXN0IGRlbGV0ZQogICAgICAgICAgICAgcmVtb3ZlTm9kZShzdGFydE5v
ZGUpOwogICAgICAgICB9IGVsc2UgaWYgKG1fZG93bnN0cmVhbUVuZC5tX29mZnNldCAtIHN0YXJ0
T2Zmc2V0ID4gMCkgewogICAgICAgICAgICAgaWYgKHN0YXJ0Tm9kZS0+aXNUZXh0Tm9kZSgpKSB7
CiAgICAgICAgICAgICAgICAgLy8gaW4gYSB0ZXh0IG5vZGUgdGhhdCBuZWVkcyB0byBiZSB0cmlt
bWVkCi0gICAgICAgICAgICAgICAgVGV4dCAqdGV4dCA9IHN0YXRpY19jYXN0PFRleHQgKj4oc3Rh
cnROb2RlKTsKKyAgICAgICAgICAgICAgICBUZXh0KiB0ZXh0ID0gc3RhdGljX2Nhc3Q8VGV4dCo+
KHN0YXJ0Tm9kZSk7CiAgICAgICAgICAgICAgICAgZGVsZXRlVGV4dEZyb21Ob2RlKHRleHQsIHN0
YXJ0T2Zmc2V0LCBtX2Rvd25zdHJlYW1FbmQubV9vZmZzZXQgLSBzdGFydE9mZnNldCk7CiAgICAg
ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIHJlbW92ZUNoaWxkcmVuSW5SYW5nZShz
dGFydE5vZGUsIHN0YXJ0T2Zmc2V0LCBtX2Rvd25zdHJlYW1FbmQubV9vZmZzZXQpOwpAQCAtNDgx
LDcgKzQ3OCw3IEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6aGFuZGxlR2VuZXJhbERl
bGV0ZSgpCiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGlmIChtX2Rvd25zdHJlYW1FbmQu
bm9kZSgpICE9IHN0YXJ0Tm9kZSAmJiAhbV91cHN0cmVhbVN0YXJ0Lm5vZGUoKS0+aXNEZXNjZW5k
YW50T2YobV9kb3duc3RyZWFtRW5kLm5vZGUoKSkgJiYgbV9kb3duc3RyZWFtRW5kLm5vZGUoKS0+
aW5Eb2N1bWVudCgpICYmIG1fZG93bnN0cmVhbUVuZC5tX29mZnNldCA+PSBjYXJldE1pbk9mZnNl
dChtX2Rvd25zdHJlYW1FbmQubm9kZSgpKSkgewotICAgICAgICAgICAgaWYgKG1fZG93bnN0cmVh
bUVuZC5tX29mZnNldCA+PSBtYXhEZWVwT2Zmc2V0KG1fZG93bnN0cmVhbUVuZC5ub2RlKCkpICYm
ICFjYW5IYXZlQ2hpbGRyZW5Gb3JFZGl0aW5nKG1fZG93bnN0cmVhbUVuZC5ub2RlKCkpKSB7Cisg
ICAgICAgICAgICBpZiAobV9kb3duc3RyZWFtRW5kLmF0TGFzdEVkaXRpbmdQb3NpdGlvbkZvck5v
ZGUoKSAmJiAhY2FuSGF2ZUNoaWxkcmVuRm9yRWRpdGluZyhtX2Rvd25zdHJlYW1FbmQubm9kZSgp
KSkgewogICAgICAgICAgICAgICAgIC8vIFRoZSBub2RlIGl0c2VsZiBpcyBmdWxseSBzZWxlY3Rl
ZCwgbm90IGp1c3QgaXRzIGNvbnRlbnRzLiAgRGVsZXRlIGl0LgogICAgICAgICAgICAgICAgIHJl
bW92ZU5vZGUobV9kb3duc3RyZWFtRW5kLm5vZGUoKSk7CiAgICAgICAgICAgICB9IGVsc2Ugewpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAgYi9XZWJDb3JlL2VkaXRpbmcv
RWRpdG9yLmNwcAppbmRleCAwZDQ1NTkyLi5iYTI3YjhjIDEwMDY0NAotLS0gYS9XZWJDb3JlL2Vk
aXRpbmcvRWRpdG9yLmNwcAorKysgYi9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcApAQCAtMTcw
Miw3ICsxNzAyLDggQEAgdm9pZCBFZGl0b3I6OmFkdmFuY2VUb05leHRNaXNzcGVsbGluZyhib29s
IHN0YXJ0QmVmb3JlU2VsZWN0aW9uKQogICAgIAogICAgIC8vIHRvcE5vZGUgZGVmaW5lcyB0aGUg
d2hvbGUgcmFuZ2Ugd2Ugd2FudCB0byBvcGVyYXRlIG9uIAogICAgIE5vZGUqIHRvcE5vZGUgPSBo
aWdoZXN0RWRpdGFibGVSb290KHBvc2l0aW9uKTsKLSAgICBzcGVsbGluZ1NlYXJjaFJhbmdlLT5z
ZXRFbmQodG9wTm9kZSwgbWF4RGVlcE9mZnNldCh0b3BOb2RlKSwgZWMpOworICAgIC8vIEZJWE1F
OiBsYXN0T2Zmc2V0Rm9yRWRpdGluZygpIGlzIHdyb25nIGhlcmUgaWYgZWRpdGluZ0lnbm9yZXND
b250ZW50KGhpZ2hlc3RFZGl0YWJsZVJvb3QoKSkgcmV0dXJucyB0cnVlIChlLmcuIGEgPHRhYmxl
PikKKyAgICBzcGVsbGluZ1NlYXJjaFJhbmdlLT5zZXRFbmQodG9wTm9kZSwgbGFzdE9mZnNldEZv
ckVkaXRpbmcodG9wTm9kZSksIGVjKTsKIAogICAgIC8vIElmIHNwZWxsaW5nU2VhcmNoUmFuZ2Ug
c3RhcnRzIGluIHRoZSBtaWRkbGUgb2YgYSB3b3JkLCBhZHZhbmNlIHRvIHRoZSBuZXh0IHdvcmQg
c28gd2Ugc3RhcnQgY2hlY2tpbmcKICAgICAvLyBhdCBhIHdvcmQgYm91bmRhcnkuIEdvaW5nIGJh
Y2sgYnkgb25lIGNoYXIgYW5kIHRoZW4gZm9yd2FyZCBieSBhIHdvcmQgZG9lcyB0aGUgdHJpY2su
CmRpZmYgLS1naXQgYS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0TGluZUJyZWFrQ29tbWFuZC5jcHAg
Yi9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0TGluZUJyZWFrQ29tbWFuZC5jcHAKaW5kZXggOTg0YzZm
MS4uYTVjNTg4ZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9lZGl0aW5nL0luc2VydExpbmVCcmVha0Nv
bW1hbmQuY3BwCisrKyBiL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRMaW5lQnJlYWtDb21tYW5kLmNw
cApAQCAtMTcwLDggKzE3MCw3IEBAIHZvaWQgSW5zZXJ0TGluZUJyZWFrQ29tbWFuZDo6ZG9BcHBs
eSgpCiAgICAgICAgIC8vIGxlYXZlcyBhbmQgdGhlbiBjb21lcyBiYWNrLCBuZXcgaW5wdXQgd2ls
bCBoYXZlIHRoZSByaWdodCBzdHlsZS4KICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZG4ndCBh
bHdheXMgYXBwbHkgdGhlIHR5cGluZyBzdHlsZSB0byB0aGUgbGluZSBicmVhayBoZXJlLAogICAg
ICAgICAvLyBzZWUgPHJkYXI6Ly9wcm9ibGVtLzU3OTQ0NjI+LgotICAgICAgICBhcHBseVN0eWxl
KHR5cGluZ1N0eWxlLCBQb3NpdGlvbihub2RlVG9JbnNlcnQuZ2V0KCksIDApLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBQb3NpdGlvbihub2RlVG9JbnNlcnQuZ2V0KCksIG1heERl
ZXBPZmZzZXQobm9kZVRvSW5zZXJ0LmdldCgpKSkpOworICAgICAgICBhcHBseVN0eWxlKHR5cGlu
Z1N0eWxlLCBmaXJzdERlZXBFZGl0aW5nUG9zaXRpb25Gb3JOb2RlKG5vZGVUb0luc2VydC5nZXQo
KSksIGxhc3REZWVwRWRpdGluZ1Bvc2l0aW9uRm9yTm9kZShub2RlVG9JbnNlcnQuZ2V0KCkpKTsK
ICAgICAgICAgLy8gRXZlbiB0aG91Z2ggdGhpcyBhcHBseVN0eWxlIG9wZXJhdGVzIG9uIGEgUmFu
Z2UsIGl0IHN0aWxsIHNldHMgYW4gZW5kaW5nU2VsZWN0aW9uKCkuCiAgICAgICAgIC8vIEl0IHRy
aWVzIHRvIHNldCBhIFZpc2libGVTZWxlY3Rpb24gYXJvdW5kIHRoZSBjb250ZW50IGl0IG9wZXJh
dGVkIG9uLiBTbywgdGhhdCBWaXNpYmxlU2VsZWN0aW9uCiAgICAgICAgIC8vIHdpbGwgZWl0aGVy
IChhKSBzZWxlY3QgdGhlIGxpbmUgYnJlYWsgd2UgaW5zZXJ0ZWQsIG9yIGl0IHdpbGwgKGIpIGJl
IGEgY2FyZXQganVzdCAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRMaXN0Q29t
bWFuZC5jcHAgYi9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0TGlzdENvbW1hbmQuY3BwCmluZGV4IGUz
ZGQ5YjIuLmFhNDg3NjEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRMaXN0Q29t
bWFuZC5jcHAKKysrIGIvV2ViQ29yZS9lZGl0aW5nL0luc2VydExpc3RDb21tYW5kLmNwcApAQCAt
MTQ4LDggKzE0OCw4IEBAIHZvaWQgSW5zZXJ0TGlzdENvbW1hbmQ6OmRvQXBwbHkoKQogICAgICAg
ICBWaXNpYmxlUG9zaXRpb24gc3RhcnQ7CiAgICAgICAgIFZpc2libGVQb3NpdGlvbiBlbmQ7CiAg
ICAgICAgIGlmIChsaXN0Q2hpbGROb2RlLT5oYXNUYWdOYW1lKGxpVGFnKSkgewotICAgICAgICAg
ICAgc3RhcnQgPSBWaXNpYmxlUG9zaXRpb24oUG9zaXRpb24obGlzdENoaWxkTm9kZSwgMCkpOwot
ICAgICAgICAgICAgZW5kID0gVmlzaWJsZVBvc2l0aW9uKFBvc2l0aW9uKGxpc3RDaGlsZE5vZGUs
IG1heERlZXBPZmZzZXQobGlzdENoaWxkTm9kZSkpKTsKKyAgICAgICAgICAgIHN0YXJ0ID0gZmly
c3REZWVwRWRpdGluZ1Bvc2l0aW9uRm9yTm9kZShsaXN0Q2hpbGROb2RlKTsKKyAgICAgICAgICAg
IGVuZCA9IGxhc3REZWVwRWRpdGluZ1Bvc2l0aW9uRm9yTm9kZShsaXN0Q2hpbGROb2RlKTsKICAg
ICAgICAgICAgIG5leHRMaXN0Q2hpbGQgPSBsaXN0Q2hpbGROb2RlLT5uZXh0U2libGluZygpOwog
ICAgICAgICAgICAgcHJldmlvdXNMaXN0Q2hpbGQgPSBsaXN0Q2hpbGROb2RlLT5wcmV2aW91c1Np
YmxpbmcoKTsKICAgICAgICAgfSBlbHNlIHsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZWRpdGluZy9S
ZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAgYi9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVj
dGlvbkNvbW1hbmQuY3BwCmluZGV4IGUyMDdmZmYuLmM3ZDY2N2UgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAKKysrIGIvV2ViQ29yZS9lZGl0
aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcApAQCAtNTA5LDEwICs1MDksMTEgQEAgdm9p
ZCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6aGFuZGxlUGFzdGVBc1F1b3RhdGlvbk5vZGUoKQog
VmlzaWJsZVBvc2l0aW9uIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpwb3NpdGlvbkF0RW5kT2ZJ
bnNlcnRlZENvbnRlbnQoKQogewogICAgIE5vZGUqIGxhc3ROb2RlID0gbV9sYXN0TGVhZkluc2Vy
dGVkLmdldCgpOwotICAgIE5vZGUqIGVuY2xvc2luZ1NlbGVjdCA9IGVuY2xvc2luZ05vZGVXaXRo
VGFnKFBvc2l0aW9uKGxhc3ROb2RlLCAwKSwgc2VsZWN0VGFnKTsKKyAgICAvLyBGSVhNRTogV2h5
IGlzIHRoaXMgaGFjayBoZXJlPyAgV2hhdCdzIHNwZWNpYWwgYWJvdXQgPHNlbGVjdD4gdGFncz8K
KyAgICBOb2RlKiBlbmNsb3NpbmdTZWxlY3QgPSBlbmNsb3NpbmdOb2RlV2l0aFRhZyhmaXJzdERl
ZXBFZGl0aW5nUG9zaXRpb25Gb3JOb2RlKGxhc3ROb2RlKSwgc2VsZWN0VGFnKTsKICAgICBpZiAo
ZW5jbG9zaW5nU2VsZWN0KQogICAgICAgICBsYXN0Tm9kZSA9IGVuY2xvc2luZ1NlbGVjdDsKLSAg
ICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKFBvc2l0aW9uKGxhc3ROb2RlLCBtYXhEZWVwT2Zmc2V0
KGxhc3ROb2RlKSkpOworICAgIHJldHVybiBsYXN0RGVlcEVkaXRpbmdQb3NpdGlvbkZvck5vZGUo
bGFzdE5vZGUpOwogfQogCiBWaXNpYmxlUG9zaXRpb24gUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6
OnBvc2l0aW9uQXRTdGFydE9mSW5zZXJ0ZWRDb250ZW50KCkKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
ZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcCBiL1dlYkNvcmUvZWRpdGluZy9UeXBpbmdDb21tYW5k
LmNwcAppbmRleCBkZGQyZjMxLi4xZTFhNzMyIDEwMDY0NAotLS0gYS9XZWJDb3JlL2VkaXRpbmcv
VHlwaW5nQ29tbWFuZC5jcHAKKysrIGIvV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3Bw
CkBAIC00NzcsNyArNDc3LDcgQEAgdm9pZCBUeXBpbmdDb21tYW5kOjpmb3J3YXJkRGVsZXRlS2V5
UHJlc3NlZChUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGJvb2wga2kKICAgICAgICAgICAg
ICAgICBkb3duc3RyZWFtRW5kID0gdmlzaWJsZUVuZC5uZXh0KHRydWUpLmRlZXBFcXVpdmFsZW50
KCkuZG93bnN0cmVhbSgpOwogICAgICAgICAgICAgLy8gV2hlbiBkZWxldGluZyB0YWJsZXM6IFNl
bGVjdCB0aGUgdGFibGUgZmlyc3QsIHRoZW4gcGVyZm9ybSB0aGUgZGVsZXRpb24KICAgICAgICAg
ICAgIGlmIChkb3duc3RyZWFtRW5kLm5vZGUoKSAmJiBkb3duc3RyZWFtRW5kLm5vZGUoKS0+cmVu
ZGVyZXIoKSAmJiBkb3duc3RyZWFtRW5kLm5vZGUoKS0+cmVuZGVyZXIoKS0+aXNUYWJsZSgpICYm
IGRvd25zdHJlYW1FbmQubV9vZmZzZXQgPT0gMCkgewotICAgICAgICAgICAgICAgIHNldEVuZGlu
Z1NlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKGVuZGluZ1NlbGVjdGlvbigpLmVuZCgpLCBQb3Np
dGlvbihkb3duc3RyZWFtRW5kLm5vZGUoKSwgbWF4RGVlcE9mZnNldChkb3duc3RyZWFtRW5kLm5v
ZGUoKSkpLCBET1dOU1RSRUFNKSk7CisgICAgICAgICAgICAgICAgc2V0RW5kaW5nU2VsZWN0aW9u
KFZpc2libGVTZWxlY3Rpb24oZW5kaW5nU2VsZWN0aW9uKCkuZW5kKCksIGxhc3REZWVwRWRpdGlu
Z1Bvc2l0aW9uRm9yTm9kZShkb3duc3RyZWFtRW5kLm5vZGUoKSksIERPV05TVFJFQU0pKTsKICAg
ICAgICAgICAgICAgICB0eXBpbmdBZGRlZFRvT3BlbkNvbW1hbmQoKTsKICAgICAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL2VkaXRpbmcvVmlz
aWJsZVBvc2l0aW9uLmNwcCBiL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlUG9zaXRpb24uY3BwCmlu
ZGV4IDQ5NWM4ZDguLmZmNjJlY2YgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxl
UG9zaXRpb24uY3BwCisrKyBiL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlUG9zaXRpb24uY3BwCkBA
IC04MSw3ICs4MSw3IEBAIFZpc2libGVQb3NpdGlvbiBWaXNpYmxlUG9zaXRpb246OnByZXZpb3Vz
KGJvb2wgc3RheUluRWRpdGFibGVDb250ZW50KSBjb25zdAogICAgIFBvc2l0aW9uIHBvcyA9IHBy
ZXZpb3VzVmlzdWFsbHlEaXN0aW5jdENhbmRpZGF0ZShtX2RlZXBQb3NpdGlvbik7CiAgICAgCiAg
ICAgLy8gcmV0dXJuIG51bGwgdmlzaWJsZSBwb3NpdGlvbiBpZiB0aGVyZSBpcyBubyBwcmV2aW91
cyB2aXNpYmxlIHBvc2l0aW9uCi0gICAgaWYgKHBvcy5hdFN0YXJ0KCkpCisgICAgaWYgKHBvcy5h
dFN0YXJ0T2ZUcmVlKCkpCiAgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oKTsKICAgICAg
ICAgCiAgICAgVmlzaWJsZVBvc2l0aW9uIHByZXYgPSBWaXNpYmxlUG9zaXRpb24ocG9zLCBET1dO
U1RSRUFNKTsKQEAgLTIyMyw3ICsyMjMsNyBAQCBQb3NpdGlvbiBWaXNpYmxlUG9zaXRpb246Omxl
ZnRWaXN1YWxseURpc3RpbmN0Q2FuZGlkYXRlKCkgY29uc3QKIAogICAgICAgICBwID0gUG9zaXRp
b24ocmVuZGVyZXItPm5vZGUoKSwgb2Zmc2V0KTsKIAotICAgICAgICBpZiAocC5pc0NhbmRpZGF0
ZSgpICYmIHAuZG93bnN0cmVhbSgpICE9IGRvd25zdHJlYW1TdGFydCB8fCBwLmF0U3RhcnQoKSB8
fCBwLmF0RW5kKCkpCisgICAgICAgIGlmIChwLmlzQ2FuZGlkYXRlKCkgJiYgcC5kb3duc3RyZWFt
KCkgIT0gZG93bnN0cmVhbVN0YXJ0IHx8IHAuYXRTdGFydE9mVHJlZSgpIHx8IHAuYXRFbmRPZlRy
ZWUoKSkKICAgICAgICAgICAgIHJldHVybiBwOwogICAgIH0KIH0KQEAgLTIzMSw3ICsyMzEsOCBA
QCBQb3NpdGlvbiBWaXNpYmxlUG9zaXRpb246OmxlZnRWaXN1YWxseURpc3RpbmN0Q2FuZGlkYXRl
KCkgY29uc3QKIFZpc2libGVQb3NpdGlvbiBWaXNpYmxlUG9zaXRpb246OmxlZnQoYm9vbCBzdGF5
SW5FZGl0YWJsZUNvbnRlbnQpIGNvbnN0CiB7CiAgICAgUG9zaXRpb24gcG9zID0gbGVmdFZpc3Vh
bGx5RGlzdGluY3RDYW5kaWRhdGUoKTsKLSAgICBpZiAocG9zLmF0U3RhcnQoKSB8fCBwb3MuYXRF
bmQoKSkKKyAgICAvLyBGSVhNRTogV2h5IGNhbid0IHdlIG1vdmUgbGVmdCBmcm9tIHRoZSBsYXN0
IHBvc2l0aW9uIGluIGEgdHJlZT8KKyAgICBpZiAocG9zLmF0U3RhcnRPZlRyZWUoKSB8fCBwb3Mu
YXRFbmRPZlRyZWUoKSkKICAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbigpOwogCiAgICAg
VmlzaWJsZVBvc2l0aW9uIGxlZnQgPSBWaXNpYmxlUG9zaXRpb24ocG9zLCBET1dOU1RSRUFNKTsK
QEAgLTM2NSw3ICszNjYsNyBAQCBQb3NpdGlvbiBWaXNpYmxlUG9zaXRpb246OnJpZ2h0VmlzdWFs
bHlEaXN0aW5jdENhbmRpZGF0ZSgpIGNvbnN0CiAKICAgICAgICAgcCA9IFBvc2l0aW9uKHJlbmRl
cmVyLT5ub2RlKCksIG9mZnNldCk7CiAKLSAgICAgICAgaWYgKHAuaXNDYW5kaWRhdGUoKSAmJiBw
LmRvd25zdHJlYW0oKSAhPSBkb3duc3RyZWFtU3RhcnQgfHwgcC5hdFN0YXJ0KCkgfHwgcC5hdEVu
ZCgpKQorICAgICAgICBpZiAocC5pc0NhbmRpZGF0ZSgpICYmIHAuZG93bnN0cmVhbSgpICE9IGRv
d25zdHJlYW1TdGFydCB8fCBwLmF0U3RhcnRPZlRyZWUoKSB8fCBwLmF0RW5kT2ZUcmVlKCkpCiAg
ICAgICAgICAgICByZXR1cm4gcDsKICAgICB9CiB9CkBAIC0zNzMsNyArMzc0LDggQEAgUG9zaXRp
b24gVmlzaWJsZVBvc2l0aW9uOjpyaWdodFZpc3VhbGx5RGlzdGluY3RDYW5kaWRhdGUoKSBjb25z
dAogVmlzaWJsZVBvc2l0aW9uIFZpc2libGVQb3NpdGlvbjo6cmlnaHQoYm9vbCBzdGF5SW5FZGl0
YWJsZUNvbnRlbnQpIGNvbnN0CiB7CiAgICAgUG9zaXRpb24gcG9zID0gcmlnaHRWaXN1YWxseURp
c3RpbmN0Q2FuZGlkYXRlKCk7Ci0gICAgaWYgKHBvcy5hdFN0YXJ0KCkgfHwgcG9zLmF0RW5kKCkp
CisgICAgLy8gRklYTUU6IFdoeSBjYW4ndCB3ZSBtb3ZlIGxlZnQgZnJvbSB0aGUgbGFzdCBwb3Np
dGlvbiBpbiBhIHRyZWU/CisgICAgaWYgKHBvcy5hdFN0YXJ0T2ZUcmVlKCkgfHwgcG9zLmF0RW5k
T2ZUcmVlKCkpCiAgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oKTsKIAogICAgIFZpc2li
bGVQb3NpdGlvbiByaWdodCA9IFZpc2libGVQb3NpdGlvbihwb3MsIERPV05TVFJFQU0pOwpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVTZWxlY3Rpb24uY3BwIGIvV2ViQ29yZS9l
ZGl0aW5nL1Zpc2libGVTZWxlY3Rpb24uY3BwCmluZGV4IGYyNjNjZGUuLjI3OWFkZjIgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlU2VsZWN0aW9uLmNwcAorKysgYi9XZWJDb3Jl
L2VkaXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5jcHAKQEAgLTk2LDcgKzk2LDcgQEAgVmlzaWJsZVNl
bGVjdGlvbjo6VmlzaWJsZVNlbGVjdGlvbihjb25zdCBSYW5nZSogcmFuZ2UsIEVBZmZpbml0eSBh
ZmZpbml0eSkKIAogVmlzaWJsZVNlbGVjdGlvbiBWaXNpYmxlU2VsZWN0aW9uOjpzZWxlY3Rpb25G
cm9tQ29udGVudHNPZk5vZGUoTm9kZSogbm9kZSkKIHsKLSAgICByZXR1cm4gVmlzaWJsZVNlbGVj
dGlvbihQb3NpdGlvbihub2RlLCAwKSwgUG9zaXRpb24obm9kZSwgbWF4RGVlcE9mZnNldChub2Rl
KSksIERPV05TVFJFQU0pOworICAgIHJldHVybiBWaXNpYmxlU2VsZWN0aW9uKGZpcnN0RGVlcEVk
aXRpbmdQb3NpdGlvbkZvck5vZGUobm9kZSksIGxhc3REZWVwRWRpdGluZ1Bvc2l0aW9uRm9yTm9k
ZShub2RlKSwgRE9XTlNUUkVBTSk7CiB9CiAKIHZvaWQgVmlzaWJsZVNlbGVjdGlvbjo6c2V0QmFz
ZShjb25zdCBQb3NpdGlvbiYgcG9zaXRpb24pCkBAIC01MDIsMTMgKzUwMiwxMyBAQCB2b2lkIFZp
c2libGVTZWxlY3Rpb246OmFkanVzdFNlbGVjdGlvblRvQXZvaWRDcm9zc2luZ0VkaXRpbmdCb3Vu
ZGFyaWVzKCkKICAgICAgICAgICAgIFBvc2l0aW9uIHAgPSBwcmV2aW91c1Zpc3VhbGx5RGlzdGlu
Y3RDYW5kaWRhdGUobV9lbmQpOwogICAgICAgICAgICAgTm9kZSogc2hhZG93QW5jZXN0b3IgPSBl
bmRSb290ID8gZW5kUm9vdC0+c2hhZG93QW5jZXN0b3JOb2RlKCkgOiAwOwogICAgICAgICAgICAg
aWYgKHAuaXNOdWxsKCkgJiYgZW5kUm9vdCAmJiAoc2hhZG93QW5jZXN0b3IgIT0gZW5kUm9vdCkp
Ci0gICAgICAgICAgICAgICAgcCA9IFBvc2l0aW9uKHNoYWRvd0FuY2VzdG9yLCBtYXhEZWVwT2Zm
c2V0KHNoYWRvd0FuY2VzdG9yKSk7CisgICAgICAgICAgICAgICAgcCA9IGxhc3REZWVwRWRpdGlu
Z1Bvc2l0aW9uRm9yTm9kZShzaGFkb3dBbmNlc3Rvcik7CiAgICAgICAgICAgICB3aGlsZSAocC5p
c05vdE51bGwoKSAmJiAhKGxvd2VzdEVkaXRhYmxlQW5jZXN0b3IocC5ub2RlKCkpID09IGJhc2VF
ZGl0YWJsZUFuY2VzdG9yICYmICFpc0VkaXRhYmxlUG9zaXRpb24ocCkpKSB7CiAgICAgICAgICAg
ICAgICAgTm9kZSogcm9vdCA9IGVkaXRhYmxlUm9vdEZvclBvc2l0aW9uKHApOwogICAgICAgICAg
ICAgICAgIHNoYWRvd0FuY2VzdG9yID0gcm9vdCA/IHJvb3QtPnNoYWRvd0FuY2VzdG9yTm9kZSgp
IDogMDsKICAgICAgICAgICAgICAgICBwID0gaXNBdG9taWNOb2RlKHAubm9kZSgpKSA/IHBvc2l0
aW9uQmVmb3JlTm9kZShwLm5vZGUoKSkgOiBwcmV2aW91c1Zpc3VhbGx5RGlzdGluY3RDYW5kaWRh
dGUocCk7CiAgICAgICAgICAgICAgICAgaWYgKHAuaXNOdWxsKCkgJiYgKHNoYWRvd0FuY2VzdG9y
ICE9IHJvb3QpKQotICAgICAgICAgICAgICAgICAgICBwID0gUG9zaXRpb24oc2hhZG93QW5jZXN0
b3IsIG1heERlZXBPZmZzZXQoc2hhZG93QW5jZXN0b3IpKTsKKyAgICAgICAgICAgICAgICAgICAg
cCA9IGxhc3REZWVwRWRpdGluZ1Bvc2l0aW9uRm9yTm9kZShzaGFkb3dBbmNlc3Rvcik7CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICBWaXNpYmxlUG9zaXRpb24gcHJldmlvdXMocCk7CiAKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5jcHAgYi9XZWJDb3JlL2VkaXRp
bmcvaHRtbGVkaXRpbmcuY3BwCmluZGV4IDM3YTZkYjEuLmFjM2U2ZjcgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5jcHAKKysrIGIvV2ViQ29yZS9lZGl0aW5nL2h0bWxl
ZGl0aW5nLmNwcApAQCAtMjIxLDcgKzIyMSw3IEBAIFBvc2l0aW9uIG5leHRWaXN1YWxseURpc3Rp
bmN0Q2FuZGlkYXRlKGNvbnN0IFBvc2l0aW9uJiBwb3NpdGlvbikKIHsKICAgICBQb3NpdGlvbiBw
ID0gcG9zaXRpb247CiAgICAgUG9zaXRpb24gZG93bnN0cmVhbVN0YXJ0ID0gcC5kb3duc3RyZWFt
KCk7Ci0gICAgd2hpbGUgKCFwLmF0RW5kKCkpIHsKKyAgICB3aGlsZSAoIXAuYXRFbmRPZlRyZWUo
KSkgewogICAgICAgICBwID0gcC5uZXh0KENoYXJhY3Rlcik7CiAgICAgICAgIGlmIChwLmlzQ2Fu
ZGlkYXRlKCkgJiYgcC5kb3duc3RyZWFtKCkgIT0gZG93bnN0cmVhbVN0YXJ0KQogICAgICAgICAg
ICAgcmV0dXJuIHA7CkBAIC0yNDQsNyArMjQ0LDcgQEAgUG9zaXRpb24gcHJldmlvdXNWaXN1YWxs
eURpc3RpbmN0Q2FuZGlkYXRlKGNvbnN0IFBvc2l0aW9uJiBwb3NpdGlvbikKIHsKICAgICBQb3Np
dGlvbiBwID0gcG9zaXRpb247CiAgICAgUG9zaXRpb24gZG93bnN0cmVhbVN0YXJ0ID0gcC5kb3du
c3RyZWFtKCk7Ci0gICAgd2hpbGUgKCFwLmF0U3RhcnQoKSkgeworICAgIHdoaWxlICghcC5hdFN0
YXJ0T2ZUcmVlKCkpIHsKICAgICAgICAgcCA9IHAucHJldmlvdXMoQ2hhcmFjdGVyKTsKICAgICAg
ICAgaWYgKHAuaXNDYW5kaWRhdGUoKSAmJiBwLmRvd25zdHJlYW0oKSAhPSBkb3duc3RyZWFtU3Rh
cnQpCiAgICAgICAgICAgICByZXR1cm4gcDsKQEAgLTI1NSwxNCArMjU1LDE0IEBAIFBvc2l0aW9u
IHByZXZpb3VzVmlzdWFsbHlEaXN0aW5jdENhbmRpZGF0ZShjb25zdCBQb3NpdGlvbiYgcG9zaXRp
b24pCiBWaXNpYmxlUG9zaXRpb24gZmlyc3RFZGl0YWJsZVBvc2l0aW9uQWZ0ZXJQb3NpdGlvbklu
Um9vdChjb25zdCBQb3NpdGlvbiYgcG9zaXRpb24sIE5vZGUqIGhpZ2hlc3RSb290KQogewogICAg
IC8vIHBvc2l0aW9uIGZhbGxzIGJlZm9yZSBoaWdoZXN0Um9vdC4KLSAgICBpZiAoY29tcGFyZVBv
c2l0aW9ucyhwb3NpdGlvbiwgUG9zaXRpb24oaGlnaGVzdFJvb3QsIDApKSA9PSAtMSAmJiBoaWdo
ZXN0Um9vdC0+aXNDb250ZW50RWRpdGFibGUoKSkKLSAgICAgICAgcmV0dXJuIFZpc2libGVQb3Np
dGlvbihQb3NpdGlvbihoaWdoZXN0Um9vdCwgMCkpOwotICAgICAgICAKKyAgICBpZiAoY29tcGFy
ZVBvc2l0aW9ucyhwb3NpdGlvbiwgZmlyc3REZWVwRWRpdGluZ1Bvc2l0aW9uRm9yTm9kZShoaWdo
ZXN0Um9vdCkpID09IC0xICYmIGhpZ2hlc3RSb290LT5pc0NvbnRlbnRFZGl0YWJsZSgpKQorICAg
ICAgICByZXR1cm4gZmlyc3REZWVwRWRpdGluZ1Bvc2l0aW9uRm9yTm9kZShoaWdoZXN0Um9vdCk7
CisKICAgICBQb3NpdGlvbiBwID0gcG9zaXRpb247CiAgICAgCiAgICAgaWYgKE5vZGUqIHNoYWRv
d0FuY2VzdG9yID0gcC5ub2RlKCktPnNoYWRvd0FuY2VzdG9yTm9kZSgpKQogICAgICAgICBpZiAo
c2hhZG93QW5jZXN0b3IgIT0gcC5ub2RlKCkpCi0gICAgICAgICAgICBwID0gUG9zaXRpb24oc2hh
ZG93QW5jZXN0b3IsIG1heERlZXBPZmZzZXQoc2hhZG93QW5jZXN0b3IpKTsKKyAgICAgICAgICAg
IHAgPSBsYXN0RGVlcEVkaXRpbmdQb3NpdGlvbkZvck5vZGUoc2hhZG93QW5jZXN0b3IpOwogICAg
IAogICAgIHdoaWxlIChwLm5vZGUoKSAmJiAhaXNFZGl0YWJsZVBvc2l0aW9uKHApICYmIHAubm9k
ZSgpLT5pc0Rlc2NlbmRhbnRPZihoaWdoZXN0Um9vdCkpCiAgICAgICAgIHAgPSBpc0F0b21pY05v
ZGUocC5ub2RlKCkpID8gcG9zaXRpb25BZnRlck5vZGUocC5ub2RlKCkpIDogbmV4dFZpc3VhbGx5
RGlzdGluY3RDYW5kaWRhdGUocCk7CkBAIC0yNzYsMTQgKzI3NiwxNCBAQCBWaXNpYmxlUG9zaXRp
b24gZmlyc3RFZGl0YWJsZVBvc2l0aW9uQWZ0ZXJQb3NpdGlvbkluUm9vdChjb25zdCBQb3NpdGlv
biYgcG9zaXRpbwogVmlzaWJsZVBvc2l0aW9uIGxhc3RFZGl0YWJsZVBvc2l0aW9uQmVmb3JlUG9z
aXRpb25JblJvb3QoY29uc3QgUG9zaXRpb24mIHBvc2l0aW9uLCBOb2RlKiBoaWdoZXN0Um9vdCkK
IHsKICAgICAvLyBXaGVuIHBvc2l0aW9uIGZhbGxzIGFmdGVyIGhpZ2hlc3RSb290LCB0aGUgcmVz
dWx0IGlzIGVhc3kgdG8gY29tcHV0ZS4KLSAgICBpZiAoY29tcGFyZVBvc2l0aW9ucyhwb3NpdGlv
biwgUG9zaXRpb24oaGlnaGVzdFJvb3QsIG1heERlZXBPZmZzZXQoaGlnaGVzdFJvb3QpKSkgPT0g
MSkKLSAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihQb3NpdGlvbihoaWdoZXN0Um9vdCwg
bWF4RGVlcE9mZnNldChoaWdoZXN0Um9vdCkpKTsKLSAgICAgICAgCisgICAgaWYgKGNvbXBhcmVQ
b3NpdGlvbnMocG9zaXRpb24sIGxhc3REZWVwRWRpdGluZ1Bvc2l0aW9uRm9yTm9kZShoaWdoZXN0
Um9vdCkpID09IDEpCisgICAgICAgIHJldHVybiBsYXN0RGVlcEVkaXRpbmdQb3NpdGlvbkZvck5v
ZGUoaGlnaGVzdFJvb3QpOworCiAgICAgUG9zaXRpb24gcCA9IHBvc2l0aW9uOwogICAgIAogICAg
IGlmIChOb2RlKiBzaGFkb3dBbmNlc3RvciA9IHAubm9kZSgpLT5zaGFkb3dBbmNlc3Rvck5vZGUo
KSkKICAgICAgICAgaWYgKHNoYWRvd0FuY2VzdG9yICE9IHAubm9kZSgpKQotICAgICAgICAgICAg
cCA9IFBvc2l0aW9uKHNoYWRvd0FuY2VzdG9yLCAwKTsKKyAgICAgICAgICAgIHAgPSBmaXJzdERl
ZXBFZGl0aW5nUG9zaXRpb25Gb3JOb2RlKHNoYWRvd0FuY2VzdG9yKTsKICAgICAKICAgICB3aGls
ZSAocC5ub2RlKCkgJiYgIWlzRWRpdGFibGVQb3NpdGlvbihwKSAmJiBwLm5vZGUoKS0+aXNEZXNj
ZW5kYW50T2YoaGlnaGVzdFJvb3QpKQogICAgICAgICBwID0gaXNBdG9taWNOb2RlKHAubm9kZSgp
KSA/IHBvc2l0aW9uQmVmb3JlTm9kZShwLm5vZGUoKSkgOiBwcmV2aW91c1Zpc3VhbGx5RGlzdGlu
Y3RDYW5kaWRhdGUocCk7CkBAIC0yOTQsNiArMjk0LDcgQEAgVmlzaWJsZVBvc2l0aW9uIGxhc3RF
ZGl0YWJsZVBvc2l0aW9uQmVmb3JlUG9zaXRpb25JblJvb3QoY29uc3QgUG9zaXRpb24mIHBvc2l0
aW8KICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKHApOwogfQogCisvLyBGSVhNRTogVGhlIG1l
dGhvZCBuYW1lLCBjb21tZW50LCBhbmQgY29kZSBzYXkgdGhyZWUgZGlmZmVyZW50IHRoaW5ncyBo
ZXJlIQogLy8gV2hldGhlciBvciBub3QgY29udGVudCBiZWZvcmUgYW5kIGFmdGVyIHRoaXMgbm9k
ZSB3aWxsIGNvbGxhcHNlIG9udG8gdGhlIHNhbWUgbGluZSBhcyBpdC4KIGJvb2wgaXNCbG9jayhj
b25zdCBOb2RlKiBub2RlKQogewpAQCAtMzYxLDcgKzM2Miw3IEBAIFBvc2l0aW9uIHJhbmdlQ29t
cGxpYW50RXF1aXZhbGVudChjb25zdCBWaXNpYmxlUG9zaXRpb24mIHZwb3MpCiAvLyBpbiBhIG5v
ZGUuICBJdCByZXR1cm5zIDEgZm9yIHNvbWUgZWxlbWVudHMgZXZlbiB0aG91Z2ggdGhleSBkbyBu
b3QgaGF2ZSBjaGlsZHJlbiwgd2hpY2gKIC8vIGNyZWF0ZXMgdGVjaG5pY2FsbHkgaW52YWxpZCBE
T00gUG9zaXRpb25zLiAgQmUgc3VyZSB0byBjYWxsIHJhbmdlQ29tcGxpYW50RXF1aXZhbGVudAog
Ly8gb24gYSBQb3NpdGlvbiBiZWZvcmUgdXNpbmcgaXQgdG8gY3JlYXRlIGEgRE9NIFJhbmdlLCBv
ciBhbiBleGNlcHRpb24gd2lsbCBiZSB0aHJvd24uCi1pbnQgbWF4RGVlcE9mZnNldChjb25zdCBO
b2RlICpub2RlKQoraW50IGxhc3RPZmZzZXRGb3JFZGl0aW5nKGNvbnN0IE5vZGUqIG5vZGUpCiB7
CiAgICAgQVNTRVJUKG5vZGUpOwogICAgIGlmICghbm9kZSkKQEAgLTU0MSw3ICs1NDIsNyBAQCBQ
b3NpdGlvbiBwb3NpdGlvbk91dHNpZGVDb250YWluaW5nU3BlY2lhbEVsZW1lbnQoY29uc3QgUG9z
aXRpb24gJnBvcywgTm9kZSAqKmNvbgogTm9kZSogaXNGaXJzdFBvc2l0aW9uQWZ0ZXJUYWJsZShj
b25zdCBWaXNpYmxlUG9zaXRpb24mIHZpc2libGVQb3NpdGlvbikKIHsKICAgICBQb3NpdGlvbiB1
cHN0cmVhbSh2aXNpYmxlUG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKS51cHN0cmVhbSgpKTsKLSAg
ICBpZiAodXBzdHJlYW0ubm9kZSgpICYmIHVwc3RyZWFtLm5vZGUoKS0+cmVuZGVyZXIoKSAmJiB1
cHN0cmVhbS5ub2RlKCktPnJlbmRlcmVyKCktPmlzVGFibGUoKSAmJiB1cHN0cmVhbS5tX29mZnNl
dCA9PSBtYXhEZWVwT2Zmc2V0KHVwc3RyZWFtLm5vZGUoKSkpCisgICAgaWYgKHVwc3RyZWFtLm5v
ZGUoKSAmJiB1cHN0cmVhbS5ub2RlKCktPnJlbmRlcmVyKCkgJiYgdXBzdHJlYW0ubm9kZSgpLT5y
ZW5kZXJlcigpLT5pc1RhYmxlKCkgJiYgdXBzdHJlYW0uYXRMYXN0RWRpdGluZ1Bvc2l0aW9uRm9y
Tm9kZSgpKQogICAgICAgICByZXR1cm4gdXBzdHJlYW0ubm9kZSgpOwogICAgIAogICAgIHJldHVy
biAwOwpAQCAtNTUwLDE5ICs1NTEsMjEgQEAgTm9kZSogaXNGaXJzdFBvc2l0aW9uQWZ0ZXJUYWJs
ZShjb25zdCBWaXNpYmxlUG9zaXRpb24mIHZpc2libGVQb3NpdGlvbikKIE5vZGUqIGlzTGFzdFBv
c2l0aW9uQmVmb3JlVGFibGUoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2aXNpYmxlUG9zaXRpb24p
CiB7CiAgICAgUG9zaXRpb24gZG93bnN0cmVhbSh2aXNpYmxlUG9zaXRpb24uZGVlcEVxdWl2YWxl
bnQoKS5kb3duc3RyZWFtKCkpOwotICAgIGlmIChkb3duc3RyZWFtLm5vZGUoKSAmJiBkb3duc3Ry
ZWFtLm5vZGUoKS0+cmVuZGVyZXIoKSAmJiBkb3duc3RyZWFtLm5vZGUoKS0+cmVuZGVyZXIoKS0+
aXNUYWJsZSgpICYmIGRvd25zdHJlYW0ubV9vZmZzZXQgPT0gMCkKKyAgICBpZiAoZG93bnN0cmVh
bS5ub2RlKCkgJiYgZG93bnN0cmVhbS5ub2RlKCktPnJlbmRlcmVyKCkgJiYgZG93bnN0cmVhbS5u
b2RlKCktPnJlbmRlcmVyKCktPmlzVGFibGUoKSAmJiBkb3duc3RyZWFtLmF0Rmlyc3RFZGl0aW5n
UG9zaXRpb25Gb3JOb2RlKCkpCiAgICAgICAgIHJldHVybiBkb3duc3RyZWFtLm5vZGUoKTsKICAg
ICAKICAgICByZXR1cm4gMDsKIH0KIAotUG9zaXRpb24gcG9zaXRpb25CZWZvcmVOb2RlKGNvbnN0
IE5vZGUgKm5vZGUpCitQb3NpdGlvbiBwb3NpdGlvbkJlZm9yZU5vZGUoY29uc3QgTm9kZSogbm9k
ZSkKIHsKKyAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgQVNTRVJUKG5vZGUtPnBhcmVudE5vZGUo
KSkKICAgICByZXR1cm4gUG9zaXRpb24obm9kZS0+cGFyZW50Tm9kZSgpLCBub2RlLT5ub2RlSW5k
ZXgoKSk7CiB9CiAKLVBvc2l0aW9uIHBvc2l0aW9uQWZ0ZXJOb2RlKGNvbnN0IE5vZGUgKm5vZGUp
CitQb3NpdGlvbiBwb3NpdGlvbkFmdGVyTm9kZShjb25zdCBOb2RlKiBub2RlKQogeworICAgIC8v
IEZJWE1FOiBUaGlzIHNob3VsZCBBU1NFUlQobm9kZS0+cGFyZW50Tm9kZSgpKQogICAgIHJldHVy
biBQb3NpdGlvbihub2RlLT5wYXJlbnROb2RlKCksIG5vZGUtPm5vZGVJbmRleCgpICsgMSk7CiB9
CiAKQEAgLTY5OSwxNiArNzAyLDE3IEBAIHN0YXRpYyBOb2RlKiBhcHBlbmRlZFN1Ymxpc3QoTm9k
ZSogbGlzdEl0ZW0pCiAgICAgcmV0dXJuIDA7CiB9CiAKKy8vIEZJWE1FOiBUaGlzIG1ldGhvZCBz
aG91bGQgbm90IG5lZWQgdG8gY2FsbCBpc1N0YXJ0T2ZQYXJhZ3JhcGgvaXNFbmRPZlBhcmFncmFw
aAogTm9kZSogZW5jbG9zaW5nRW1wdHlMaXN0SXRlbShjb25zdCBWaXNpYmxlUG9zaXRpb24mIHZp
c2libGVQb3MpCiB7CiAgICAgLy8gQ2hlY2sgdGhhdCBwb3NpdGlvbiBpcyBvbiBhIGxpbmUgYnkg
aXRzZWxmIGluc2lkZSBhIGxpc3QgaXRlbQogICAgIE5vZGUqIGxpc3RDaGlsZE5vZGUgPSBlbmNs
b3NpbmdMaXN0Q2hpbGQodmlzaWJsZVBvcy5kZWVwRXF1aXZhbGVudCgpLm5vZGUoKSk7CiAgICAg
aWYgKCFsaXN0Q2hpbGROb2RlIHx8ICFpc1N0YXJ0T2ZQYXJhZ3JhcGgodmlzaWJsZVBvcykgfHwg
IWlzRW5kT2ZQYXJhZ3JhcGgodmlzaWJsZVBvcykpCiAgICAgICAgIHJldHVybiAwOwotICAgICAg
ICAKLSAgICBWaXNpYmxlUG9zaXRpb24gZmlyc3RJbkxpc3RDaGlsZChQb3NpdGlvbihsaXN0Q2hp
bGROb2RlLCAwKSk7Ci0gICAgVmlzaWJsZVBvc2l0aW9uIGxhc3RJbkxpc3RDaGlsZChQb3NpdGlv
bihsaXN0Q2hpbGROb2RlLCBtYXhEZWVwT2Zmc2V0KGxpc3RDaGlsZE5vZGUpKSk7Ci0gICAgCisK
KyAgICBWaXNpYmxlUG9zaXRpb24gZmlyc3RJbkxpc3RDaGlsZChmaXJzdERlZXBFZGl0aW5nUG9z
aXRpb25Gb3JOb2RlKGxpc3RDaGlsZE5vZGUpKTsKKyAgICBWaXNpYmxlUG9zaXRpb24gbGFzdElu
TGlzdENoaWxkKGxhc3REZWVwRWRpdGluZ1Bvc2l0aW9uRm9yTm9kZShsaXN0Q2hpbGROb2RlKSk7
CisKICAgICBpZiAoZmlyc3RJbkxpc3RDaGlsZCAhPSB2aXNpYmxlUG9zIHx8IGxhc3RJbkxpc3RD
aGlsZCAhPSB2aXNpYmxlUG9zKQogICAgICAgICByZXR1cm4gMDsKICAgICAKQEAgLTg5OSw3ICs5
MDMsNyBAQCBpbnQgY2FyZXRNYXhPZmZzZXQoY29uc3QgTm9kZSogbikKICAgICBpZiAobi0+aXNU
ZXh0Tm9kZSgpICYmIG4tPnJlbmRlcmVyKCkpCiAgICAgICAgIHJldHVybiBuLT5yZW5kZXJlcigp
LT5jYXJldE1heE9mZnNldCgpOwogICAgIC8vIEZvciBjb250YWluZXJzIHJldHVybiB0aGUgbnVt
YmVyIG9mIGNoaWxkcmVuLiAgRm9yIG90aGVycyBkbyB0aGUgc2FtZSBhcyBhYm92ZS4KLSAgICBy
ZXR1cm4gbWF4RGVlcE9mZnNldChuKTsKKyAgICByZXR1cm4gbGFzdE9mZnNldEZvckVkaXRpbmco
bik7CiB9CiAKIGJvb2wgbGluZUJyZWFrRXhpc3RzQXRQb3NpdGlvbihjb25zdCBWaXNpYmxlUG9z
aXRpb24mIHZpc2libGVQb3NpdGlvbikKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZWRpdGluZy9odG1s
ZWRpdGluZy5oIGIvV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmgKaW5kZXggM2E3NTIzZS4u
ZWNlNWUyOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmgKKysrIGIv
V2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmgKQEAgLTQzLDcgKzQzLDcgQEAgY2xhc3MgVmlz
aWJsZVBvc2l0aW9uOwogCiBQb3NpdGlvbiByYW5nZUNvbXBsaWFudEVxdWl2YWxlbnQoY29uc3Qg
UG9zaXRpb24mKTsKIFBvc2l0aW9uIHJhbmdlQ29tcGxpYW50RXF1aXZhbGVudChjb25zdCBWaXNp
YmxlUG9zaXRpb24mKTsKLWludCBtYXhEZWVwT2Zmc2V0KGNvbnN0IE5vZGUqKTsKK2ludCBsYXN0
T2Zmc2V0Rm9yRWRpdGluZyhjb25zdCBOb2RlKik7CiBib29sIGlzQXRvbWljTm9kZShjb25zdCBO
b2RlKik7CiBib29sIGVkaXRpbmdJZ25vcmVzQ29udGVudChjb25zdCBOb2RlKik7CiBib29sIGNh
bkhhdmVDaGlsZHJlbkZvckVkaXRpbmcoY29uc3QgTm9kZSopOwpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9lZGl0aW5nL3Zpc2libGVfdW5pdHMuY3BwIGIvV2ViQ29yZS9lZGl0aW5nL3Zpc2libGVfdW5p
dHMuY3BwCmluZGV4IDMyYTIwNzguLjFlOGIwNWIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZWRpdGlu
Zy92aXNpYmxlX3VuaXRzLmNwcAorKysgYi9XZWJDb3JlL2VkaXRpbmcvdmlzaWJsZV91bml0cy5j
cHAKQEAgLTczMyw4ICs3MzMsMTMgQEAgVmlzaWJsZVBvc2l0aW9uIG5leHRTZW50ZW5jZVBvc2l0
aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiAmYykKICAgICByZXR1cm4gYy5ob25vckVkaXRhYmxl
Qm91bmRhcnlBdE9yQmVmb3JlKG5leHQpOwogfQogCitzdGF0aWMgYm9vbCByZW5kZXJlZEFzTm9u
SW5saW5lVGFibGVPckhSKFJlbmRlck9iamVjdCogcmVuZGVyZXIpCit7CisgICAgcmV0dXJuIHJl
bmRlcmVyICYmICgocmVuZGVyZXItPmlzVGFibGUoKSAmJiAhcmVuZGVyZXItPmlzSW5saW5lKCkp
IHx8IHJlbmRlcmVyLT5pc0hSKCkpOworfQorCiAvLyBGSVhNRTogQnJva2VuIGZvciBwb3NpdGlv
bnMgYmVmb3JlL2FmdGVyIGltYWdlcyB0aGF0IGFyZW4ndCBpbmxpbmUgKDUwMjc3MDIpCi1WaXNp
YmxlUG9zaXRpb24gc3RhcnRPZlBhcmFncmFwaChjb25zdCBWaXNpYmxlUG9zaXRpb24gJmMpCitW
aXNpYmxlUG9zaXRpb24gc3RhcnRPZlBhcmFncmFwaChjb25zdCBWaXNpYmxlUG9zaXRpb24mIGMp
CiB7CiAgICAgUG9zaXRpb24gcCA9IGMuZGVlcEVxdWl2YWxlbnQoKTsKICAgICBOb2RlICpzdGFy
dE5vZGUgPSBwLm5vZGUoKTsKQEAgLTc0MiwxMSArNzQ3LDggQEAgVmlzaWJsZVBvc2l0aW9uIHN0
YXJ0T2ZQYXJhZ3JhcGgoY29uc3QgVmlzaWJsZVBvc2l0aW9uICZjKQogICAgIGlmICghc3RhcnRO
b2RlKQogICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKCk7CiAgICAgCi0gICAgaWYgKHN0
YXJ0Tm9kZS0+cmVuZGVyZXIoKQotICAgICAgICAmJiAoKHN0YXJ0Tm9kZS0+cmVuZGVyZXIoKS0+
aXNUYWJsZSgpICYmICFzdGFydE5vZGUtPnJlbmRlcmVyKCktPmlzSW5saW5lKCkpCi0gICAgICAg
ICAgICB8fCBzdGFydE5vZGUtPnJlbmRlcmVyKCktPmlzSFIoKSkKLSAgICAgICAgJiYgcC5tX29m
ZnNldCA9PSBtYXhEZWVwT2Zmc2V0KHN0YXJ0Tm9kZSkpCi0gICAgICAgIHJldHVybiBWaXNpYmxl
UG9zaXRpb24oUG9zaXRpb24oc3RhcnROb2RlLCAwKSk7CisgICAgaWYgKHJlbmRlcmVkQXNOb25J
bmxpbmVUYWJsZU9ySFIoc3RhcnROb2RlLT5yZW5kZXJlcigpKSAmJiBwLmF0TGFzdEVkaXRpbmdQ
b3NpdGlvbkZvck5vZGUoKSkKKyAgICAgICAgcmV0dXJuIGZpcnN0RGVlcEVkaXRpbmdQb3NpdGlv
bkZvck5vZGUoc3RhcnROb2RlKTsKIAogICAgIE5vZGUqIHN0YXJ0QmxvY2sgPSBlbmNsb3NpbmdC
bG9jayhzdGFydE5vZGUpOwogCkBAIC04MDUsMTEgKzgwNyw4IEBAIFZpc2libGVQb3NpdGlvbiBl
bmRPZlBhcmFncmFwaChjb25zdCBWaXNpYmxlUG9zaXRpb24gJmMpCiAgICAgUG9zaXRpb24gcCA9
IGMuZGVlcEVxdWl2YWxlbnQoKTsKICAgICBOb2RlKiBzdGFydE5vZGUgPSBwLm5vZGUoKTsKIAot
ICAgIGlmIChzdGFydE5vZGUtPnJlbmRlcmVyKCkKLSAgICAgICAgJiYgKChzdGFydE5vZGUtPnJl
bmRlcmVyKCktPmlzVGFibGUoKSAmJiAhc3RhcnROb2RlLT5yZW5kZXJlcigpLT5pc0lubGluZSgp
KQotICAgICAgICAgICAgfHwgc3RhcnROb2RlLT5yZW5kZXJlcigpLT5pc0hSKCkpCi0gICAgICAg
ICYmIHAubV9vZmZzZXQgPT0gMCkKLSAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihQb3Np
dGlvbihzdGFydE5vZGUsIG1heERlZXBPZmZzZXQoc3RhcnROb2RlKSkpOworICAgIGlmIChyZW5k
ZXJlZEFzTm9uSW5saW5lVGFibGVPckhSKHN0YXJ0Tm9kZS0+cmVuZGVyZXIoKSkgJiYgcC5hdEZp
cnN0RWRpdGluZ1Bvc2l0aW9uRm9yTm9kZSgpKQorICAgICAgICByZXR1cm4gbGFzdERlZXBFZGl0
aW5nUG9zaXRpb25Gb3JOb2RlKHN0YXJ0Tm9kZSk7CiAgICAgCiAgICAgTm9kZSogc3RhcnRCbG9j
ayA9IGVuY2xvc2luZ0Jsb2NrKHN0YXJ0Tm9kZSk7CiAgICAgTm9kZSAqc3RheUluc2lkZUJsb2Nr
ID0gc3RhcnRCbG9jazsKQEAgLTg1MSw3ICs4NTAsNyBAQCBWaXNpYmxlUG9zaXRpb24gZW5kT2ZQ
YXJhZ3JhcGgoY29uc3QgVmlzaWJsZVBvc2l0aW9uICZjKQogICAgICAgICAgICAgbiA9IG4tPnRy
YXZlcnNlTmV4dE5vZGUoc3RheUluc2lkZUJsb2NrKTsKICAgICAgICAgfSBlbHNlIGlmIChlZGl0
aW5nSWdub3Jlc0NvbnRlbnQobikgfHwgaXNUYWJsZUVsZW1lbnQobikpIHsKICAgICAgICAgICAg
IG5vZGUgPSBuOwotICAgICAgICAgICAgb2Zmc2V0ID0gbWF4RGVlcE9mZnNldChuKTsKKyAgICAg
ICAgICAgIG9mZnNldCA9IGxhc3RPZmZzZXRGb3JFZGl0aW5nKG4pOwogICAgICAgICAgICAgbiA9
IG4tPnRyYXZlcnNlTmV4dFNpYmxpbmcoc3RheUluc2lkZUJsb2NrKTsKICAgICAgICAgfSBlbHNl
CiAgICAgICAgICAgICBuID0gbi0+dHJhdmVyc2VOZXh0Tm9kZShzdGF5SW5zaWRlQmxvY2spOwpA
QCAtMTAxMCw3ICsxMDA5LDcgQEAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0T2ZFZGl0YWJsZUNvbnRl
bnQoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2aXNpYmxlUG9zaXRpb24pCiAgICAgaWYgKCFoaWdo
ZXN0Um9vdCkKICAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbigpOwogCi0gICAgcmV0dXJu
IFZpc2libGVQb3NpdGlvbihoaWdoZXN0Um9vdCwgMCwgRE9XTlNUUkVBTSk7CisgICAgcmV0dXJu
IGZpcnN0RGVlcEVkaXRpbmdQb3NpdGlvbkZvck5vZGUoaGlnaGVzdFJvb3QpOwogfQogCiBWaXNp
YmxlUG9zaXRpb24gZW5kT2ZFZGl0YWJsZUNvbnRlbnQoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2
aXNpYmxlUG9zaXRpb24pCkBAIC0xMDE5LDcgKzEwMTgsNyBAQCBWaXNpYmxlUG9zaXRpb24gZW5k
T2ZFZGl0YWJsZUNvbnRlbnQoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2aXNpYmxlUG9zaXRpb24p
CiAgICAgaWYgKCFoaWdoZXN0Um9vdCkKICAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbigp
OwogCi0gICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihoaWdoZXN0Um9vdCwgbWF4RGVlcE9mZnNl
dChoaWdoZXN0Um9vdCksIERPV05TVFJFQU0pOworICAgIHJldHVybiBsYXN0RGVlcEVkaXRpbmdQ
b3NpdGlvbkZvck5vZGUoaGlnaGVzdFJvb3QpOwogfQogCiB9CmRpZmYgLS1naXQgYS9XZWJDb3Jl
L3BhZ2UvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAgYi9XZWJDb3JlL3BhZ2UvQWNjZXNzaWJpbGl0
eU9iamVjdC5jcHAKaW5kZXggYzZlMDc5NS4uNWFkNTQwNyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9w
YWdlL0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCisrKyBiL1dlYkNvcmUvcGFnZS9BY2Nlc3NpYmls
aXR5T2JqZWN0LmNwcApAQCAtNTE4LDcgKzUxOCw3IEBAIHN0YXRpYyBWaXNpYmxlUG9zaXRpb24g
c3RhcnRPZlN0eWxlUmFuZ2UoY29uc3QgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3MpCiAgICAg
cmV0dXJuIFZpc2libGVQb3NpdGlvbihzdGFydFJlbmRlcmVyLT5ub2RlKCksIDAsIFZQX0RFRkFV
TFRfQUZGSU5JVFkpOwogfQogCi1zdGF0aWMgVmlzaWJsZVBvc2l0aW9uIGVuZE9mU3R5bGVSYW5n
ZShjb25zdCBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvcykKK3N0YXRpYyBWaXNpYmxlUG9zaXRp
b24gZW5kT2ZTdHlsZVJhbmdlKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgdmlzaWJsZVBvcykKIHsK
ICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gdmlzaWJsZVBvcy5kZWVwRXF1aXZhbGVudCgp
Lm5vZGUoKS0+cmVuZGVyZXIoKTsKICAgICBSZW5kZXJPYmplY3QqIGVuZFJlbmRlcmVyID0gcmVu
ZGVyZXI7CkBAIC01MzgsNyArNTM4LDcgQEAgc3RhdGljIFZpc2libGVQb3NpdGlvbiBlbmRPZlN0
eWxlUmFuZ2UoY29uc3QgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3MpCiAgICAgICAgIGVuZFJl
bmRlcmVyID0gcjsKICAgICB9CiAKLSAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKGVuZFJlbmRl
cmVyLT5ub2RlKCksIG1heERlZXBPZmZzZXQoZW5kUmVuZGVyZXItPm5vZGUoKSksIFZQX0RFRkFV
TFRfQUZGSU5JVFkpOworICAgIHJldHVybiBsYXN0RGVlcEVkaXRpbmdQb3NpdGlvbkZvck5vZGUo
ZW5kUmVuZGVyZXItPm5vZGUoKSk7CiB9CiAKIFZpc2libGVQb3NpdGlvblJhbmdlIEFjY2Vzc2li
aWxpdHlPYmplY3Q6OnN0eWxlUmFuZ2VGb3JQb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24m
IHZpc2libGVQb3MpIGNvbnN0CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BhZ2UvQWNjZXNzaWJpbGl0
eVJlbmRlck9iamVjdC5jcHAgYi9XZWJDb3JlL3BhZ2UvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVj
dC5jcHAKaW5kZXggMTBkNzhhYS4uOGVkMzUyYSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wYWdlL0Fj
Y2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCisrKyBiL1dlYkNvcmUvcGFnZS9BY2Nlc3NpYmls
aXR5UmVuZGVyT2JqZWN0LmNwcApAQCAtMTYwMCwxNyArMTYwMCwyMCBAQCBWaXNpYmxlUG9zaXRp
b25SYW5nZSBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojp2aXNpYmxlUG9zaXRpb25SYW5nZSgp
IGNvbnN0CiAgICAgTm9kZSogbm9kZSA9IG1fcmVuZGVyZXItPm5vZGUoKTsKICAgICBpZiAoIW5v
ZGUpCiAgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb25SYW5nZSgpOwotICAgIAotICAgIFZp
c2libGVQb3NpdGlvbiBzdGFydFBvcyA9IFZpc2libGVQb3NpdGlvbihub2RlLCAwLCBWUF9ERUZB
VUxUX0FGRklOSVRZKTsKLSAgICBWaXNpYmxlUG9zaXRpb24gZW5kUG9zID0gVmlzaWJsZVBvc2l0
aW9uKG5vZGUsIG1heERlZXBPZmZzZXQobm9kZSksIFZQX0RFRkFVTFRfQUZGSU5JVFkpOwotICAg
IAorCisgICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0UG9zID0gZmlyc3REZWVwRWRpdGluZ1Bvc2l0
aW9uRm9yTm9kZShub2RlKTsKKyAgICBWaXNpYmxlUG9zaXRpb24gZW5kUG9zID0gbGFzdERlZXBF
ZGl0aW5nUG9zaXRpb25Gb3JOb2RlKG5vZGUpOworCiAgICAgLy8gdGhlIFZpc2libGVQb3NpdGlv
bnMgYXJlIGVxdWFsIGZvciBub2RlcyBsaWtlIGJ1dHRvbnMsIHNvIGFkanVzdCBmb3IgdGhhdAor
ICAgIC8vIEZJWE1FOiBSZWFsbHk/ICBbYnV0dG9uLCAwXSBhbmQgW2J1dHRvbiwgMV0gYXJlIGRp
c3RpbmN0IChiZWZvcmUgYW5kIGFmdGVyIHRoZSBidXR0b24pCisgICAgLy8gSSBleHBlY3QgdGhp
cyBjb2RlIGlzIG9ubHkgaGl0IGZvciB0aGluZ3MgbGlrZSBlbXB0eSBkaXZzPyAgSW4gd2hpY2gg
Y2FzZSBJIGRvbid0IHRoaW5rCisgICAgLy8gdGhlIGJlaGF2aW9yIGlzIGNvcnJlY3QgaGVyZSAt
LSBlc2VpZGVsCiAgICAgaWYgKHN0YXJ0UG9zID09IGVuZFBvcykgewogICAgICAgICBlbmRQb3Mg
PSBlbmRQb3MubmV4dCgpOwogICAgICAgICBpZiAoZW5kUG9zLmlzTnVsbCgpKQogICAgICAgICAg
ICAgZW5kUG9zID0gc3RhcnRQb3M7CiAgICAgfQotICAgIAorCiAgICAgcmV0dXJuIFZpc2libGVQ
b3NpdGlvblJhbmdlKHN0YXJ0UG9zLCBlbmRQb3MpOwogfQogCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCb3guY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNw
cAppbmRleCBlYjJkMzBlLi4yYmExODJlIDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCb3guY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKQEAgLTI2
NzQsNyArMjY3NCw3IEBAIFZpc2libGVQb3NpdGlvbiBSZW5kZXJCb3g6OnBvc2l0aW9uRm9yUG9p
bnQoY29uc3QgSW50UG9pbnQmIHBvaW50KQogewogICAgIC8vIG5vIGNoaWxkcmVuLi4ucmV0dXJu
IHRoaXMgcmVuZGVyIG9iamVjdCdzIGVsZW1lbnQsIGlmIHRoZXJlIGlzIG9uZSwgYW5kIG9mZnNl
dCAwCiAgICAgaWYgKCFmaXJzdENoaWxkKCkpCi0gICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRp
b24obm9kZSgpLCAwLCBET1dOU1RSRUFNKTsKKyAgICAgICAgcmV0dXJuIGZpcnN0RGVlcEVkaXRp
bmdQb3NpdGlvbkZvck5vZGUobm9kZSgpKTsKIAogICAgIGludCB4UG9zID0gcG9pbnQueCgpOwog
ICAgIGludCB5UG9zID0gcG9pbnQueSgpOwpAQCAtMjY4NSw5ICsyNjg1LDggQEAgVmlzaWJsZVBv
c2l0aW9uIFJlbmRlckJveDo6cG9zaXRpb25Gb3JQb2ludChjb25zdCBJbnRQb2ludCYgcG9pbnQp
CiAgICAgICAgIAogICAgICAgICBpZiAoeFBvcyA8IDAgfHwgeFBvcyA+IHJpZ2h0IHx8IHlQb3Mg
PCAwIHx8IHlQb3MgPiBib3R0b20pIHsKICAgICAgICAgICAgIGlmICh4UG9zIDw9IHJpZ2h0IC8g
MikKLSAgICAgICAgICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKFBvc2l0aW9uKG5vZGUo
KSwgMCkpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHJldHVybiBWaXNpYmxl
UG9zaXRpb24oUG9zaXRpb24obm9kZSgpLCBtYXhEZWVwT2Zmc2V0KG5vZGUoKSkpKTsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZmlyc3REZWVwRWRpdGluZ1Bvc2l0aW9uRm9yTm9kZShub2RlKCkp
OworICAgICAgICAgICAgcmV0dXJuIGxhc3REZWVwRWRpdGluZ1Bvc2l0aW9uRm9yTm9kZShub2Rl
KCkpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0yNzU4LDcgKzI3NTcsNyBAQCBWaXNpYmxlUG9z
aXRpb24gUmVuZGVyQm94Ojpwb3NpdGlvbkZvclBvaW50KGNvbnN0IEludFBvaW50JiBwb2ludCkK
ICAgICBpZiAoY2xvc2VzdFJlbmRlcmVyKQogICAgICAgICByZXR1cm4gY2xvc2VzdFJlbmRlcmVy
LT5wb3NpdGlvbkZvckNvb3JkaW5hdGVzKG5ld1ggLSBjbG9zZXN0UmVuZGVyZXItPngoKSwgbmV3
WSAtIGNsb3Nlc3RSZW5kZXJlci0+eSgpKTsKICAgICAKLSAgICByZXR1cm4gVmlzaWJsZVBvc2l0
aW9uKG5vZGUoKSwgMCwgRE9XTlNUUkVBTSk7CisgICAgcmV0dXJuIGZpcnN0RGVlcEVkaXRpbmdQ
b3NpdGlvbkZvck5vZGUobm9kZSgpKTsKIH0KIAogYm9vbCBSZW5kZXJCb3g6OnNocmlua1RvQXZv
aWRGbG9hdHMoKSBjb25zdAo=
</data>
<flag name="review"
          id="14204"
          type_id="1"
          status="+"
          setter="eric"
    />
          </attachment>
      

    </bug>

</bugzilla>