<?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>52919</bug_id>
          
          <creation_ts>2011-01-21 14:05:30 -0800</creation_ts>
          <short_desc>Stop instantiating legacy editing Positions in VisiblePosition</short_desc>
          <delta_ts>2011-03-01 18:11:41 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>HTML Editing</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>54043</dependson>
          <blocked>52099</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Levi Weintraub">leviw</reporter>
          <assigned_to name="Levi Weintraub">leviw</assigned_to>
          <cc>abarth</cc>
    
    <cc>darin</cc>
    
    <cc>eric</cc>
    
    <cc>gustavo.noronha</cc>
    
    <cc>gustavo</cc>
    
    <cc>leviw</cc>
    
    <cc>ojan</cc>
    
    <cc>rniwa</cc>
    
    <cc>tony</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>338331</commentid>
    <comment_count>0</comment_count>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-01-21 14:05:30 -0800</bug_when>
    <thetext>More cleanup related to 52099</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>339785</commentid>
    <comment_count>1</comment_count>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-01-25 11:38:24 -0800</bug_when>
    <thetext>VisiblePosition also has a constructor that takes a [Node, Offset] pair that should go away. There are about 50 call sites that use it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>339984</commentid>
    <comment_count>2</comment_count>
      <attachid>80139</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-01-25 15:50:02 -0800</bug_when>
    <thetext>Created attachment 80139
Rev1

Except for in the constructor, legacy positions are done away with in VisiblePosition.cpp.

Also, all call sites in WebCore are switched to use the VisiblePosition constructor that takes a Position instead of a node, offset. I put FIXMEs on the call sites I didn&apos;t change from creating legacy editing positions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>345766</commentid>
    <comment_count>3</comment_count>
      <attachid>81280</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-02-04 13:49:48 -0800</bug_when>
    <thetext>Created attachment 81280
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>345770</commentid>
    <comment_count>4</comment_count>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-02-04 13:53:11 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; Created an attachment (id=81280) [details]
&gt; Patch

This is resulting in slightly different layout test results due to the changes made in visible_units.cpp. I&apos;m looking into why that is, but think this is otherwise correct.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>345774</commentid>
    <comment_count>5</comment_count>
    <who name="Collabora GTK+ EWS bot">gustavo.noronha</who>
    <bug_when>2011-02-04 13:59:25 -0800</bug_when>
    <thetext>Attachment 81280 did not build on gtk:
Build output: http://queues.webkit.org/results/7701131</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>345789</commentid>
    <comment_count>6</comment_count>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-02-04 14:11:48 -0800</bug_when>
    <thetext>I&apos;ll fix the GTK port (missed their usage of the legacy constructor while grepping).

I&apos;ve also gotten down to the bottom of my failing layout tests. Position::upstream and downstream are *broken* for new position types. Consider the following:

&lt;div&gt;foo&lt;img&gt;&lt;/div&gt;

A position at [img, PositionIsAfterAnchor]. Upstream for this returns [&quot;foo&quot;, 3] because it only looks at the offset, which is 0 in this case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>345885</commentid>
    <comment_count>7</comment_count>
      <attachid>81313</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-02-04 16:16:52 -0800</bug_when>
    <thetext>Created attachment 81313
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>345886</commentid>
    <comment_count>8</comment_count>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-02-04 16:18:58 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; Created an attachment (id=81313) [details]
&gt; Patch

This passes all layout tests and I believe it&apos;ll build on all platforms :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>345888</commentid>
    <comment_count>9</comment_count>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2011-02-04 16:19:49 -0800</bug_when>
    <thetext>Attachment 81313 did not build on gtk:
Build output: http://queues.webkit.org/results/7702165</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>345893</commentid>
    <comment_count>10</comment_count>
      <attachid>81315</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-02-04 16:25:42 -0800</bug_when>
    <thetext>Created attachment 81315
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>345894</commentid>
    <comment_count>11</comment_count>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-02-04 16:26:08 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; Attachment 81313 [details] did not build on gtk:
&gt; Build output: http://queues.webkit.org/results/7702165

Sheesh, missed a file, sorry about that! Trying again :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>345936</commentid>
    <comment_count>12</comment_count>
      <attachid>81315</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-02-04 17:20:52 -0800</bug_when>
    <thetext>Comment on attachment 81315
Patch

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

Thanks for tackling this!

&gt; Source/WebCore/accessibility/AXObjectCache.cpp:576
&gt; -    VisiblePosition visiblePos = VisiblePosition(textMarkerData.node, textMarkerData.offset, textMarkerData.affinity);
&gt; +    VisiblePosition visiblePos = VisiblePosition(Position(textMarkerData.node, textMarkerData.offset, Position::PositionIsOffsetInAnchor), textMarkerData.affinity);

Are you sure textMarkerData.node can always contain a position inside?  i.e. is there a guarantee that node can&apos;t be br, img, etc...?

&gt; Source/WebCore/accessibility/AccessibilityObject.cpp:339
&gt; -    return VisiblePosition(startRenderer-&gt;node(), 0, VP_DEFAULT_AFFINITY);
&gt; +    return VisiblePosition(firstPositionInOrBeforeNode(startRenderer-&gt;node()), VP_DEFAULT_AFFINITY);

I think you can just return firstPositionInOrBeforeNode(startRenderer-&gt;node() here.

&gt; Source/WebCore/accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:2493
&gt; -        VisiblePosition startPosition = VisiblePosition(node, 0, DOWNSTREAM);
&gt; +        VisiblePosition startPosition = VisiblePosition(Position(node, Position::PositionIsBeforeAnchor), DOWNSTREAM);

You should be calling positionBeforeNode(node) instead.

&gt; Source/WebCore/dom/Position.cpp:516
&gt; -    PositionIterator lastVisible = *this;
&gt; +    PositionIterator lastVisible = m_anchorType == PositionIsAfterAnchor ? Position(m_anchorNode, caretMaxOffset(m_anchorNode.get())) : *this;

You don&apos;t consider the possibility of m_anchorType == PositionIsBeforeAnchor?  Also, can&apos;t you call parentAnchoredEquivalent?  Maybe we need a variant of parentAnchoredEquivalent that uses caretMaxOffset/caretMinOffset?

&gt; Source/WebCore/dom/Range.cpp:1573
&gt; +    VisiblePosition visiblePosition(Position(m_start.container(), m_start.offset(), Position::PositionIsOffsetInAnchor), VP_DEFAULT_AFFINITY);

I think you can just do:
VisiblePosition visiblePosition = Position(m_start.container(), m_start.offset(), Position::PositionIsOffsetInAnchor)

&gt; Source/WebCore/editing/ReplaceSelectionCommand.cpp:887
&gt; -        originalVisPosBeforeEndBR = VisiblePosition(endBR, 0, DOWNSTREAM).previous();
&gt; +        originalVisPosBeforeEndBR = VisiblePosition(Position(endBR, Position::PositionIsBeforeAnchor), DOWNSTREAM).previous();

You should be calling positionBeforeNode(endBR) instead.

&gt; Source/WebCore/editing/SelectionController.cpp:1319
&gt; -    VisiblePosition beforeOwnerElement(VisiblePosition(ownerElementParent, ownerElementNodeIndex, SEL_DEFAULT_AFFINITY));
&gt; -    VisiblePosition afterOwnerElement(VisiblePosition(ownerElementParent, ownerElementNodeIndex + 1, VP_UPSTREAM_IF_POSSIBLE));
&gt; +    VisiblePosition beforeOwnerElement(VisiblePosition(Position(ownerElementParent, ownerElementNodeIndex, Position::PositionIsOffsetInAnchor), SEL_DEFAULT_AFFINITY));
&gt; +    VisiblePosition afterOwnerElement(VisiblePosition(Position(ownerElementParent, ownerElementNodeIndex + 1, Position::PositionIsOffsetInAnchor), VP_UPSTREAM_IF_POSSIBLE));

We should just get rid of SEL_DEFAULT_AFFINITY.

&gt; Source/WebCore/editing/TextIterator.cpp:881
&gt; +    VisiblePosition startPos = VisiblePosition(Position(m_startContainer, m_startOffset, Position::PositionIsOffsetInAnchor), DOWNSTREAM);

Ditto about m_startContainer can be br, img, etc...

&gt; Source/WebCore/editing/TextIterator.cpp:882
&gt; +    VisiblePosition currPos = VisiblePosition(Position(m_node, Position::PositionIsBeforeAnchor), DOWNSTREAM);

Should be calling positionBeforeNode(m_node).

&gt; Source/WebCore/editing/VisiblePosition.cpp:512
&gt; +    Text* textNode = static_cast&lt;Text*&gt;(pos.containerNode());
&gt; +    unsigned offset = pos.offsetInContainerNode();

offsetInContainerNode will hit an assertion if pos can ever be before/after anchor node.  You should probably check the anchor type above and bail out if the position was before/after a node.  But maybe we need to take care of a position before a text node?  Regardless, this change can&apos;t be right as is so r-.

&gt; Source/WebCore/editing/VisiblePosition.cpp:618
&gt; -    r-&gt;setStart(p.node(), p.deprecatedEditingOffset(), code);
&gt; +    r-&gt;setStart(p.containerNode(), p.offsetInContainerNode(), code);

Ditto about assertion in offsetInContainerNode.

&gt; Source/WebCore/editing/VisiblePosition.cpp:628
&gt; -    r-&gt;setEnd(p.node(), p.deprecatedEditingOffset(), code);
&gt; +    r-&gt;setEnd(p.containerNode(), p.offsetInContainerNode(), code);

Ditto.

&gt; Source/WebCore/editing/VisiblePosition.cpp:647
&gt; +    if (!p.node()-&gt;isDescendantOf(node))

Should this be calling containerNode?  Or will that break something?

&gt; Source/WebCore/editing/VisiblePosition.cpp:661
&gt; +    if (!p.node()-&gt;isDescendantOf(node))

Ditto about node()

&gt; Source/WebCore/editing/visible_units.cpp:-434
&gt; +    Position pos;
&gt;      if (endNode-&gt;hasTagName(brTag)) {
&gt; -        endOffset = 0;

I&apos;ve got the feeling that this should really be checking editingIgnoresContent instead of just br.

&gt; Source/WebCore/editing/visible_units.cpp:434
&gt; +        pos = Position(endNode, Position::PositionIsBeforeAnchor);

Should read: pos = positionBeforeNode(endNode)

&gt; Source/WebCore/editing/visible_units.cpp:440
&gt; +        pos = Position(endNode, endOffset, Position::PositionIsOffsetInAnchor);

If you make the change about to use editingIgnoresContent then this position will be safe but otherwise, there is a potential that endNode is img, etc...

&gt; Source/WebCore/editing/visible_units.cpp:580
&gt; +    return VisiblePosition(Position(rootElement, 0, Position::PositionIsOffsetInAnchor), DOWNSTREAM);

Should call firstPositionInNode(rootElement)

&gt; Source/WebCore/editing/visible_units.cpp:685
&gt; -    return VisiblePosition(rootElement, rootElement ? rootElement-&gt;childNodeCount() : 0, DOWNSTREAM);
&gt; +    return VisiblePosition(Position(rootElement, rootElement ? rootElement-&gt;childNodeCount() : 0, Position::PositionIsOffsetInAnchor), DOWNSTREAM);

Ditto.

&gt; Source/WebCore/editing/visible_units.cpp:803
&gt; +    
&gt; +    return VisiblePosition(Position(node, type), DOWNSTREAM);

Can we ASSERT(!offset) here?

&gt; Source/WebCore/editing/visible_units.cpp:941
&gt; -    return VisiblePosition(startBlock, startBlock-&gt;childNodeCount(), VP_DEFAULT_AFFINITY);   
&gt; +    return VisiblePosition(Position(startBlock, startBlock-&gt;childNodeCount(), Position::PositionIsOffsetInAnchor), VP_DEFAULT_AFFINITY);   

Should call lastPositionInNode(startBlock)

&gt; Source/WebCore/editing/visible_units.cpp:966
&gt; -    return VisiblePosition(node-&gt;document()-&gt;documentElement(), 0, DOWNSTREAM);
&gt; +    return VisiblePosition(Position(node-&gt;document()-&gt;documentElement(), 0, Position::PositionIsOffsetInAnchor), DOWNSTREAM);

Should call firstPositionInNode(node-&gt;document()-&gt;documentElement()).

&gt; Source/WebCore/editing/visible_units.cpp:980
&gt; -    return VisiblePosition(doc, doc-&gt;childNodeCount(), DOWNSTREAM);
&gt; +    return VisiblePosition(Position(doc, doc-&gt;childNodeCount(), Position::PositionIsOffsetInAnchor), DOWNSTREAM);

lastPositionInNode again.

&gt; Source/WebCore/editing/visible_units.cpp:1137
&gt; +                                                            : VisiblePosition(Position(logicalStartNode, Position::PositionIsBeforeAnchor), DOWNSTREAM);

Should call positionBeforeNode(logicalStartNode).

&gt; Source/WebCore/editing/visible_units.cpp:1173
&gt; +        pos = Position(logicalEndNode, Position::PositionIsBeforeAnchor);

positionBeforeNode.

&gt; Source/WebCore/editing/visible_units.cpp:1181
&gt; +        pos = Position(logicalEndNode, Position::PositionIsAfterAnchor);

positionAfterNode.

&gt; Source/WebCore/page/DOMSelection.cpp:214
&gt; -    m_frame-&gt;selection()-&gt;moveTo(VisiblePosition(node, offset, DOWNSTREAM));
&gt; +    m_frame-&gt;selection()-&gt;moveTo(VisiblePosition(Position(node, offset, Position::PositionIsOffsetInAnchor), DOWNSTREAM));

Is it always safe to create a position inside node?

&gt; Source/WebCore/page/DOMSelection.cpp:268
&gt; -    VisiblePosition visibleBase = VisiblePosition(baseNode, baseOffset, DOWNSTREAM);
&gt; -    VisiblePosition visibleExtent = VisiblePosition(extentNode, extentOffset, DOWNSTREAM);
&gt; +    VisiblePosition visibleBase = VisiblePosition(Position(baseNode, baseOffset, Position::PositionIsOffsetInAnchor), DOWNSTREAM);
&gt; +    VisiblePosition visibleExtent = VisiblePosition(Position(extentNode, extentOffset, Position::PositionIsOffsetInAnchor), DOWNSTREAM);

Ditto.

&gt; Source/WebCore/page/DOMSelection.cpp:285
&gt; -    m_frame-&gt;selection()-&gt;moveTo(VisiblePosition(node, offset, DOWNSTREAM));
&gt; +    m_frame-&gt;selection()-&gt;moveTo(VisiblePosition(Position(node, offset, Position::PositionIsOffsetInAnchor), DOWNSTREAM));

Ditto.

&gt; Source/WebCore/page/DOMSelection.cpp:356
&gt; -    m_frame-&gt;selection()-&gt;setExtent(VisiblePosition(node, offset, DOWNSTREAM));
&gt; +    m_frame-&gt;selection()-&gt;setExtent(VisiblePosition(Position(node, offset, Position::PositionIsOffsetInAnchor), DOWNSTREAM));

Ditto.

&gt; Source/WebCore/rendering/RenderObject.cpp:2657
&gt; -        return VisiblePosition(node, offset, affinity);
&gt; +        return VisiblePosition(Position(node, offset), affinity);

This is creating a legacy editing position.  Is there a reason we can&apos;t get rid of this?

&gt; Source/WebCore/svg/SVGTextContentElement.cpp:148
&gt; +    VisiblePosition start(Position(const_cast&lt;SVGTextContentElement*&gt;(this), 0, Position::PositionIsOffsetInAnchor), SEL_DEFAULT_AFFINITY);

firstPositionInNode</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>346681</commentid>
    <comment_count>13</comment_count>
      <attachid>81315</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-02-07 10:56:10 -0800</bug_when>
    <thetext>Comment on attachment 81315
Patch

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

&gt;&gt; Source/WebCore/accessibility/AXObjectCache.cpp:576
&gt;&gt; +    VisiblePosition visiblePos = VisiblePosition(Position(textMarkerData.node, textMarkerData.offset, Position::PositionIsOffsetInAnchor), textMarkerData.affinity);
&gt; 
&gt; Are you sure textMarkerData.node can always contain a position inside?  i.e. is there a guarantee that node can&apos;t be br, img, etc...?

This concern is valid.

&gt;&gt; Source/WebCore/accessibility/AccessibilityObject.cpp:339
&gt;&gt; +    return VisiblePosition(firstPositionInOrBeforeNode(startRenderer-&gt;node()), VP_DEFAULT_AFFINITY);
&gt; 
&gt; I think you can just return firstPositionInOrBeforeNode(startRenderer-&gt;node() here.

I&apos;m okay with this style change.

&gt;&gt; Source/WebCore/dom/Position.cpp:516
&gt;&gt; +    PositionIterator lastVisible = m_anchorType == PositionIsAfterAnchor ? Position(m_anchorNode, caretMaxOffset(m_anchorNode.get())) : *this;
&gt; 
&gt; You don&apos;t consider the possibility of m_anchorType == PositionIsBeforeAnchor?  Also, can&apos;t you call parentAnchoredEquivalent?  Maybe we need a variant of parentAnchoredEquivalent that uses caretMaxOffset/caretMinOffset?

This deserves a FIXME perhaps. PositionIterator doesn&apos;t check offsets, and has no notion of a position type. Because we don&apos;t store an offset for Before/After positions, we need to generate the offset to feed into PositionIterator for the After position, or it will be considered a Before one.

&gt;&gt; Source/WebCore/dom/Range.cpp:1573
&gt;&gt; +    VisiblePosition visiblePosition(Position(m_start.container(), m_start.offset(), Position::PositionIsOffsetInAnchor), VP_DEFAULT_AFFINITY);
&gt; 
&gt; I think you can just do:
&gt; VisiblePosition visiblePosition = Position(m_start.container(), m_start.offset(), Position::PositionIsOffsetInAnchor)

Good call.

&gt;&gt; Source/WebCore/editing/SelectionController.cpp:1319
&gt;&gt; +    VisiblePosition afterOwnerElement(VisiblePosition(Position(ownerElementParent, ownerElementNodeIndex + 1, Position::PositionIsOffsetInAnchor), VP_UPSTREAM_IF_POSSIBLE));
&gt; 
&gt; We should just get rid of SEL_DEFAULT_AFFINITY.

New bug! :D

&gt;&gt; Source/WebCore/editing/TextIterator.cpp:881
&gt;&gt; +    VisiblePosition startPos = VisiblePosition(Position(m_startContainer, m_startOffset, Position::PositionIsOffsetInAnchor), DOWNSTREAM);
&gt; 
&gt; Ditto about m_startContainer can be br, img, etc...

We&apos;ve already ensured m_startContainer is a container and m_node is one of its descendants.

&gt;&gt; Source/WebCore/editing/VisiblePosition.cpp:512
&gt;&gt; +    unsigned offset = pos.offsetInContainerNode();
&gt; 
&gt; offsetInContainerNode will hit an assertion if pos can ever be before/after anchor node.  You should probably check the anchor type above and bail out if the position was before/after a node.  But maybe we need to take care of a position before a text node?  Regardless, this change can&apos;t be right as is so r-.

There is an outstanding question of whether we should use before/after positions to represent text nodes. We should be dodging the assertion, and fix &quot;after&quot; positions. Before should simply use 0 as its offset.

None of this is yet an issue because Position::downstream/upstream only return legacy positions :-/

&gt;&gt; Source/WebCore/editing/VisiblePosition.cpp:618
&gt;&gt; +    r-&gt;setStart(p.containerNode(), p.offsetInContainerNode(), code);
&gt; 
&gt; Ditto about assertion in offsetInContainerNode.

Here we&apos;re explicitly constructing a parent anchored position, which fits with the usage model of offsetInContainerNode.

&gt;&gt; Source/WebCore/editing/VisiblePosition.cpp:628
&gt;&gt; +    r-&gt;setEnd(p.containerNode(), p.offsetInContainerNode(), code);
&gt; 
&gt; Ditto.

Ditto that this is being used properly.

&gt;&gt; Source/WebCore/editing/VisiblePosition.cpp:647
&gt;&gt; +    if (!p.node()-&gt;isDescendantOf(node))
&gt; 
&gt; Should this be calling containerNode?  Or will that break something?

Breaks things. I&apos;ll add a fixme.

&gt;&gt; Source/WebCore/editing/visible_units.cpp:-434
&gt;&gt; -        endOffset = 0;
&gt; 
&gt; I&apos;ve got the feeling that this should really be checking editingIgnoresContent instead of just br.

This is simply br because we explicitly want the position *before* a br. We handle Text explicitly, then all other nodes we use an after position.

&gt;&gt; Source/WebCore/editing/visible_units.cpp:440
&gt;&gt; +        pos = Position(endNode, endOffset, Position::PositionIsOffsetInAnchor);
&gt; 
&gt; If you make the change about to use editingIgnoresContent then this position will be safe but otherwise, there is a potential that endNode is img, etc...

This call is only made for text boxes. This code will never be reached for any other types of content.

&gt;&gt; Source/WebCore/editing/visible_units.cpp:803
&gt;&gt; +    return VisiblePosition(Position(node, type), DOWNSTREAM);
&gt; 
&gt; Can we ASSERT(!offset) here?

We&apos;re not explicitly trying to prevent the offset from being set here. I don&apos;t think that would add any real protection.

&gt;&gt; Source/WebCore/page/DOMSelection.cpp:214
&gt;&gt; +    m_frame-&gt;selection()-&gt;moveTo(VisiblePosition(Position(node, offset, Position::PositionIsOffsetInAnchor), DOWNSTREAM));
&gt; 
&gt; Is it always safe to create a position inside node?

As a DOMSelection, this should always be valid. I can add an ASSERT.

&gt;&gt; Source/WebCore/rendering/RenderObject.cpp:2657
&gt;&gt; +        return VisiblePosition(Position(node, offset), affinity);
&gt; 
&gt; This is creating a legacy editing position.  Is there a reason we can&apos;t get rid of this?

Unfortunately yes. Since this function lives all the way down in RenderObject, we really know nearly nothing about sort of position we&apos;re really making. This deserves another FIXME and some thought about how to refactor this functionality.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>346714</commentid>
    <comment_count>14</comment_count>
      <attachid>81315</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-02-07 12:25:03 -0800</bug_when>
    <thetext>Comment on attachment 81315
Patch

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

&gt;&gt; Source/WebCore/page/DOMSelection.cpp:268
&gt;&gt; +    VisiblePosition visibleExtent = VisiblePosition(Position(extentNode, extentOffset, Position::PositionIsOffsetInAnchor), DOWNSTREAM);
&gt; 
&gt; Ditto.

Given this is accessible via JavaScript, it seems like we kind of need the old behavior actually... It seems like we need a validation path for creating Positions from Node/Offset pairs we can&apos;t control. Adding a FIXME and sticking to legacy pending a more elegant solution.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>346957</commentid>
    <comment_count>15</comment_count>
      <attachid>81552</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-02-07 16:58:21 -0800</bug_when>
    <thetext>Created attachment 81552
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>347068</commentid>
    <comment_count>16</comment_count>
      <attachid>81552</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-02-07 21:25:45 -0800</bug_when>
    <thetext>Comment on attachment 81552
Patch

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

The patch looks better but I think we need one more iteration. r- for various nit and concerns.

&gt; Source/WebCore/dom/Position.cpp:517
&gt; +    // FIXME: PositionIterator should respect Before and After positions.
&gt; +    PositionIterator lastVisible = m_anchorType == PositionIsAfterAnchor ? Position(m_anchorNode, caretMaxOffset(m_anchorNode.get())) : *this;

This still instantiates legacy editing position but I guess your FIXME implies that as well?

&gt; Source/WebCore/dom/Position.cpp:639
&gt; +    // FIXME: PositionIterator should respect Before and After positions.
&gt; +    PositionIterator lastVisible = m_anchorType == PositionIsAfterAnchor ? Position(m_anchorNode, caretMaxOffset(m_anchorNode.get())) : *this;

Ditto.

&gt; Source/WebCore/editing/VisiblePosition.cpp:510
&gt; +    Node* node = pos.containerNode();
&gt; +    if (!node || !node-&gt;isTextNode() || pos.anchorType() == Position::PositionIsAfterAnchor)
&gt;          return 0;

You should assert that pos.anchorType() is either PositionIsBeforeAnchor or PositionIsOffsetInAnchor after this early exit in the case more types are added.

&gt; Source/WebCore/editing/VisiblePosition.cpp:647
&gt; +    Position p = visiblePosition.deepEquivalent();
&gt; +
&gt; +    if (!p.containerNode()-&gt;isDescendantOf(node))

Why can&apos;t we do visiblePosition.deepEquivalent().containerNode()-&gt;isDescendantOf(node) instead?

&gt; Source/WebCore/editing/VisiblePosition.cpp:661
&gt; +    Position p = visiblePosition.deepEquivalent();
&gt; +
&gt; +    if (!p.containerNode()-&gt;isDescendantOf(node))

Ditto.

&gt; Source/WebCore/editing/visible_units.cpp:386
&gt; -    VisiblePosition visPos = VisiblePosition(startNode, startOffset, DOWNSTREAM);
&gt; +    VisiblePosition visPos = VisiblePosition(Position(startNode, startOffset, Position::PositionIsOffsetInAnchor), DOWNSTREAM);

Why is it safe to create a position inside startNode here?  i.e. what guarantees that startNode isn&apos;t br, img, etc...?

&gt; Source/WebCore/editing/visible_units.cpp:433
&gt;      if (endNode-&gt;hasTagName(brTag)) {

Could you fix this manual check against brTag or file a followup bug?

&gt; Source/WebCore/editing/visible_units.cpp:787
&gt; -                        return VisiblePosition(n, i + 1, DOWNSTREAM);
&gt; +                        return VisiblePosition(Position(n, i + 1, type), DOWNSTREAM);

I think we should just pass Position::PositionIsOffsetInAnchor as the type instead of &quot;type&quot; so that the correctness is self-evident.

&gt; Source/WebCore/editing/visible_units.cpp:851
&gt; -                        return VisiblePosition(n, i, DOWNSTREAM);
&gt; +                        return VisiblePosition(Position(n, i, type), DOWNSTREAM);

Ditto.

&gt; Source/WebCore/editing/visible_units.cpp:1137
&gt; +    VisiblePosition visPos = logicalStartNode-&gt;isTextNode() ? VisiblePosition(Position(logicalStartNode, logicalStartBox-&gt;caretMinOffset(), Position::PositionIsOffsetInAnchor), DOWNSTREAM)
&gt; +                                                            : VisiblePosition(positionBeforeNode(logicalStartNode), DOWNSTREAM);

It&apos;s not obvious to me why logicalStartNode can always have a position inside.

&gt; Source/WebCore/editing/visible_units.cpp:1172
&gt;      if (logicalEndNode-&gt;hasTagName(brTag))

Same comment about calling editingIgnoreContents instead of manually checking against brTag.

&gt; Source/WebCore/page/DOMSelection.cpp:359
&gt; -    m_frame-&gt;selection()-&gt;setExtent(VisiblePosition(node, offset, DOWNSTREAM));
&gt; +    m_frame-&gt;selection()-&gt;setExtent(VisiblePosition(Position(node, offset, Position::PositionIsOffsetInAnchor), DOWNSTREAM));

I still don&apos;t think it&apos;s correct to create a Position with a random node.  Maybe we should throw an exception?  Auto-correcting it to the parent-anchored equivalent position is fine as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>347222</commentid>
    <comment_count>17</comment_count>
      <attachid>81552</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-02-08 00:56:18 -0800</bug_when>
    <thetext>Comment on attachment 81552
Patch

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

&gt;&gt; Source/WebCore/dom/Position.cpp:517
&gt;&gt; +    PositionIterator lastVisible = m_anchorType == PositionIsAfterAnchor ? Position(m_anchorNode, caretMaxOffset(m_anchorNode.get())) : *this;
&gt; 
&gt; This still instantiates legacy editing position but I guess your FIXME implies that as well?

Unfortunately we don&apos;t have a choice until PositionIterator is aware of AnchorTypes.

&gt;&gt; Source/WebCore/editing/visible_units.cpp:433
&gt;&gt;      if (endNode-&gt;hasTagName(brTag)) {
&gt; 
&gt; Could you fix this manual check against brTag or file a followup bug?

See my previous comment. We don&apos;t want editingIgnoresContent here. We want a position at [br, beforeAnchorNode] as it&apos;s the end of the line.

&gt;&gt; Source/WebCore/editing/visible_units.cpp:787
&gt;&gt; +                        return VisiblePosition(Position(n, i + 1, type), DOWNSTREAM);
&gt; 
&gt; I think we should just pass Position::PositionIsOffsetInAnchor as the type instead of &quot;type&quot; so that the correctness is self-evident.

If you think that improves the style...

&gt;&gt; Source/WebCore/editing/visible_units.cpp:1137
&gt;&gt; +                                                            : VisiblePosition(positionBeforeNode(logicalStartNode), DOWNSTREAM);
&gt; 
&gt; It&apos;s not obvious to me why logicalStartNode can always have a position inside.

?? It only has a position inside it when it&apos;s a text node. All other cases it&apos;s a position before the node.

&gt;&gt; Source/WebCore/editing/visible_units.cpp:1172
&gt;&gt;      if (logicalEndNode-&gt;hasTagName(brTag))
&gt; 
&gt; Same comment about calling editingIgnoreContents instead of manually checking against brTag.

This is again an end position where we want a a position before br tags. This *will* break for line and paragraph separators once we support them. I plan to file another bug that&apos;s dependent on 53203.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>347228</commentid>
    <comment_count>18</comment_count>
      <attachid>81552</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-02-08 01:04:58 -0800</bug_when>
    <thetext>Comment on attachment 81552
Patch

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

&gt;&gt;&gt; Source/WebCore/editing/visible_units.cpp:433
&gt;&gt;&gt;      if (endNode-&gt;hasTagName(brTag)) {
&gt;&gt; 
&gt;&gt; Could you fix this manual check against brTag or file a followup bug?
&gt; 
&gt; See my previous comment. We don&apos;t want editingIgnoresContent here. We want a position at [br, beforeAnchorNode] as it&apos;s the end of the line.

Ah, got it.

&gt;&gt;&gt; Source/WebCore/editing/visible_units.cpp:1137
&gt;&gt;&gt; +                                                            : VisiblePosition(positionBeforeNode(logicalStartNode), DOWNSTREAM);
&gt;&gt; 
&gt;&gt; It&apos;s not obvious to me why logicalStartNode can always have a position inside.
&gt; 
&gt; ?? It only has a position inside it when it&apos;s a text node. All other cases it&apos;s a position before the node.

Oops, I misread the code.  Right, this is safe.

&gt;&gt;&gt; Source/WebCore/editing/visible_units.cpp:1172
&gt;&gt;&gt;      if (logicalEndNode-&gt;hasTagName(brTag))
&gt;&gt; 
&gt;&gt; Same comment about calling editingIgnoreContents instead of manually checking against brTag.
&gt; 
&gt; This is again an end position where we want a a position before br tags. This *will* break for line and paragraph separators once we support them. I plan to file another bug that&apos;s dependent on 53203.

Ok.  It&apos;ll be great if you could file a bug against it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>347714</commentid>
    <comment_count>19</comment_count>
      <attachid>81698</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-02-08 14:54:51 -0800</bug_when>
    <thetext>Created attachment 81698
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>347735</commentid>
    <comment_count>20</comment_count>
      <attachid>81698</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-02-08 15:13:33 -0800</bug_when>
    <thetext>Comment on attachment 81698
Patch

Clearing flags on attachment: 81698

Committed r77980: &lt;http://trac.webkit.org/changeset/77980&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>347736</commentid>
    <comment_count>21</comment_count>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-02-08 15:13:38 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>347767</commentid>
    <comment_count>22</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-02-08 15:57:52 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/77980 might have broken Qt Linux Release
The following tests are not passing:
fast/forms/input-maxlength-unsupported.html
fast/forms/input-number-keyoperation.html
fast/forms/input-number-unacceptable-style.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>347777</commentid>
    <comment_count>23</comment_count>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-02-08 16:07:09 -0800</bug_when>
    <thetext>Crashes on Linux/Windows, but works fine on Mac... I&apos;ll get to the bottom of it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>348057</commentid>
    <comment_count>24</comment_count>
      <attachid>81769</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-02-09 01:28:48 -0800</bug_when>
    <thetext>Created attachment 81769
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>348061</commentid>
    <comment_count>25</comment_count>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-02-09 01:33:13 -0800</bug_when>
    <thetext>(In reply to comment #24)
&gt; Created an attachment (id=81769) [details]
&gt; Patch


@@ -451,10 +445,11 @@ Position VisiblePosition::canonicalPosit
     // To fix this, we need to either a) add code to all paintCarets to pass the responsibility off to
     // the appropriate renderer for VisiblePosition&apos;s like these, or b) canonicalize to the rightmost candidate
     // unless the affinity is upstream.
-    Node* node = position.node();
-    if (!node)
+    if (position.isNull())
         return Position();
 
+    Node* node = position.anchorNode();

My previous patch used containerNode() instead of anchorNode(), but there&apos;s not a guaranteed container (e.g. before/after positions in shadow nodes). Since we&apos;re only interested in the Document, we don&apos;t actually care whether it&apos;s the anchorNode or containerNode().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>348157</commentid>
    <comment_count>26</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-02-09 04:36:02 -0800</bug_when>
    <thetext>(In reply to comment #25)
&gt; My previous patch used containerNode() instead of anchorNode(), but there&apos;s not a guaranteed container (e.g. before/after positions in shadow nodes). Since we&apos;re only interested in the Document, we don&apos;t actually care whether it&apos;s the anchorNode or containerNode().

I don&apos;t think that&apos;s right.  node is also used to do:

if (node-&gt;hasTagName(htmlTag) &amp;&amp; !node-&gt;isContentEditable() &amp;&amp; node-&gt;document()-&gt;body() &amp;&amp; node-&gt;document()-&gt;body()-&gt;isContentEditable())

and

Node *originalBlock = node-&gt;enclosingBlockFlowElement();
bool nextIsOutsideOriginalBlock = !nextNode-&gt;isDescendantOf(originalBlock) &amp;&amp; nextNode != originalBlock;
bool prevIsOutsideOriginalBlock = !prevNode-&gt;isDescendantOf(originalBlock) &amp;&amp; prevNode != originalBlock;
if (nextIsOutsideOriginalBlock &amp;&amp; !prevIsOutsideOriginalBlock)
         return prev;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>348321</commentid>
    <comment_count>27</comment_count>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-02-09 09:44:27 -0800</bug_when>
    <thetext>(In reply to comment #26)
&gt; (In reply to comment #25)
&gt; &gt; My previous patch used containerNode() instead of anchorNode(), but there&apos;s not a guaranteed container (e.g. before/after positions in shadow nodes). Since we&apos;re only interested in the Document, we don&apos;t actually care whether it&apos;s the anchorNode or containerNode().
&gt; 
&gt; I don&apos;t think that&apos;s right.  node is also used to do:
&gt; 
&gt; if (node-&gt;hasTagName(htmlTag) &amp;&amp; !node-&gt;isContentEditable() &amp;&amp; node-&gt;document()-&gt;body() &amp;&amp; node-&gt;document()-&gt;body()-&gt;isContentEditable())
&gt; 
&gt; and
&gt; 
&gt; Node *originalBlock = node-&gt;enclosingBlockFlowElement();
&gt; bool nextIsOutsideOriginalBlock = !nextNode-&gt;isDescendantOf(originalBlock) &amp;&amp; nextNode != originalBlock;
&gt; bool prevIsOutsideOriginalBlock = !prevNode-&gt;isDescendantOf(originalBlock) &amp;&amp; prevNode != originalBlock;
&gt; if (nextIsOutsideOriginalBlock &amp;&amp; !prevIsOutsideOriginalBlock)
&gt;          return prev;

You&apos;re right that we use node in those cases as well, but in both of these we really want anchorNode as well! If we have a position at [HTML, 1] (as the comment implies), we really don&apos;t want the containerNode. It seems like a weird case already. Worthy of a test case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>348400</commentid>
    <comment_count>28</comment_count>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-02-09 11:19:58 -0800</bug_when>
    <thetext>(In reply to comment #27)
&gt; Worthy of a test case.

I guess that would be editing/selection/select-all-005.html...

I verified that containerNode() actually works fine in this test case, so I&apos;m inclined to go with something like this for consistency&apos;s sake.

Node* node = position.containerNode() ? position.containerNode() : position.anchorNode();

Thoughts?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>348614</commentid>
    <comment_count>29</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-02-09 15:04:40 -0800</bug_when>
    <thetext>(In reply to comment #28)
&gt; (In reply to comment #27)
&gt; &gt; Worthy of a test case.
&gt; 
&gt; I guess that would be editing/selection/select-all-005.html...
&gt; 
&gt; I verified that containerNode() actually works fine in this test case, so I&apos;m inclined to go with something like this for consistency&apos;s sake.
&gt; 
&gt; Node* node = position.containerNode() ? position.containerNode() : position.anchorNode();
&gt; 
&gt; Thoughts?

If position is before or after a root shadow element, then originalBlock should be null. containerNode should also work for

if (node-&gt;hasTagName(htmlTag) &amp;&amp; !node-&gt;isContentEditable() &amp;&amp; node-&gt;document()-&gt;body() &amp;&amp; node-&gt;document()-&gt;body()-&gt;isContentEditable())

since we can&apos;t have a html tag inside a shadow DOM.  So all we need seems to be a null-pointer check here.  Also see my patch for https://bugs.webkit.org/show_bug.cgi?id=54053.  In that patch, I&apos;m preventing to pass an invalid position into editing code in the first place.

In short, I don&apos;t think it&apos;s correct to call anchorNode here because it doesn&apos;t make any semantic sense except when obtaining the document.  We should add an inline document() to Position so that we don&apos;t call anchorNode just to get its document.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>348738</commentid>
    <comment_count>30</comment_count>
      <attachid>81900</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-02-09 17:33:48 -0800</bug_when>
    <thetext>Created attachment 81900
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>348740</commentid>
    <comment_count>31</comment_count>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-02-09 17:37:37 -0800</bug_when>
    <thetext>(In reply to comment #30)
&gt; Created an attachment (id=81900) [details]
&gt; Patch

I like the advice on Position, since it cleans up dependence on anchorNode to get a valid Document. I think we&apos;re finally good to go :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>348741</commentid>
    <comment_count>32</comment_count>
      <attachid>81900</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-02-09 17:37:58 -0800</bug_when>
    <thetext>Comment on attachment 81900
Patch

r=me provided you have ran all layout tests on Windows and/or Linux.

Thanks for the patch!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>351140</commentid>
    <comment_count>33</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-02-15 00:56:36 -0800</bug_when>
    <thetext>Levi, are you going to land this patch?  Or have you found any problems with this patch?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>360344</commentid>
    <comment_count>34</comment_count>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-03-01 16:06:29 -0800</bug_when>
    <thetext>Committed r80059: &lt;http://trac.webkit.org/changeset/80059&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>360463</commentid>
    <comment_count>35</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-03-01 18:11:41 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/80059 might have broken GTK Linux 64-bit Debug
The following tests are not passing:
fast/viewport/viewport-112.html
fast/viewport/viewport-121.html
fast/viewport/viewport-122.html
fast/viewport/viewport-125.html
fast/viewport/viewport-129.html
fast/viewport/viewport-35.html
fast/viewport/viewport-46.html
fast/viewport/viewport-52.html
fast/viewport/viewport-53.html
fast/viewport/viewport-54.html
fast/viewport/viewport-55.html
fast/viewport/viewport-66.html
fast/viewport/viewport-67.html
fast/viewport/viewport-68.html
fast/viewport/viewport-69.html
fast/viewport/viewport-70.html
fast/viewport/viewport-71.html
fast/viewport/viewport-72.html
fast/viewport/viewport-73.html
fast/viewport/viewport-74.html
fast/viewport/viewport-75.html
fast/viewport/viewport-77.html
fast/viewport/viewport-78.html
fast/viewport/viewport-79.html
fast/viewport/viewport-83.html
fast/xsl/xslt-mismatched-tags-in-xslt.xml
fast/xsl/xslt-missing-namespace-in-xslt.xml
http/tests/security/xss-DENIED-xsl-document-redirect.xml
http/tests/security/xss-DENIED-xsl-external-entity-redirect.xml
http/tests/xmlviewer/dumpAsText/wml.xml</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>80139</attachid>
            <date>2011-01-25 15:50:02 -0800</date>
            <delta_ts>2011-02-04 13:49:45 -0800</delta_ts>
            <desc>Rev1</desc>
            <filename>visiblePosition.PATCH</filename>
            <type>text/plain</type>
            <size>29256</size>
            <attacher name="Levi Weintraub">leviw</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwCmluZGV4
IGQwZDE5ZjcuLjE5YzhlNjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvQVhPYmplY3RDYWNoZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9B
WE9iamVjdENhY2hlLmNwcApAQCAtNTczLDcgKzU3Myw3IEBAIFZpc2libGVQb3NpdGlvbiBBWE9i
amVjdENhY2hlOjp2aXNpYmxlUG9zaXRpb25Gb3JUZXh0TWFya2VyRGF0YShUZXh0TWFya2VyRGF0
YSYKICAgICBpZiAoIWlzTm9kZUluVXNlKHRleHRNYXJrZXJEYXRhLm5vZGUpKQogICAgICAgICBy
ZXR1cm4gVmlzaWJsZVBvc2l0aW9uKCk7CiAgICAgCi0gICAgVmlzaWJsZVBvc2l0aW9uIHZpc2li
bGVQb3MgPSBWaXNpYmxlUG9zaXRpb24odGV4dE1hcmtlckRhdGEubm9kZSwgdGV4dE1hcmtlckRh
dGEub2Zmc2V0LCB0ZXh0TWFya2VyRGF0YS5hZmZpbml0eSk7CisgICAgVmlzaWJsZVBvc2l0aW9u
IHZpc2libGVQb3MgPSBWaXNpYmxlUG9zaXRpb24oUG9zaXRpb24odGV4dE1hcmtlckRhdGEubm9k
ZSwgdGV4dE1hcmtlckRhdGEub2Zmc2V0LCBQb3NpdGlvbjo6UG9zaXRpb25Jc09mZnNldEluQW5j
aG9yKSwgdGV4dE1hcmtlckRhdGEuYWZmaW5pdHkpOwogICAgIFBvc2l0aW9uIGRlZXBQb3MgPSB2
aXNpYmxlUG9zLmRlZXBFcXVpdmFsZW50KCk7CiAgICAgaWYgKGRlZXBQb3MuaXNOdWxsKCkpCiAg
ICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCmluZGV4IGYyYTJkN2QuLjAy
NTI1YWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eU9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3Np
YmlsaXR5T2JqZWN0LmNwcApAQCAtMzM2LDcgKzMzNiw3IEBAIHN0YXRpYyBWaXNpYmxlUG9zaXRp
b24gc3RhcnRPZlN0eWxlUmFuZ2UoY29uc3QgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3MpCiAg
ICAgICAgIHN0YXJ0UmVuZGVyZXIgPSByOwogICAgIH0KIAotICAgIHJldHVybiBWaXNpYmxlUG9z
aXRpb24oc3RhcnRSZW5kZXJlci0+bm9kZSgpLCAwLCBWUF9ERUZBVUxUX0FGRklOSVRZKTsKKyAg
ICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKGZpcnN0UG9zaXRpb25Jbk9yQmVmb3JlTm9kZShzdGFy
dFJlbmRlcmVyLT5ub2RlKCkpLCBWUF9ERUZBVUxUX0FGRklOSVRZKTsKIH0KIAogc3RhdGljIFZp
c2libGVQb3NpdGlvbiBlbmRPZlN0eWxlUmFuZ2UoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2aXNp
YmxlUG9zKQpAQCAtMzU5LDcgKzM1OSw3IEBAIHN0YXRpYyBWaXNpYmxlUG9zaXRpb24gZW5kT2ZT
dHlsZVJhbmdlKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgdmlzaWJsZVBvcykKICAgICAgICAgZW5k
UmVuZGVyZXIgPSByOwogICAgIH0KIAotICAgIHJldHVybiBsYXN0RGVlcEVkaXRpbmdQb3NpdGlv
bkZvck5vZGUoZW5kUmVuZGVyZXItPm5vZGUoKSk7CisgICAgcmV0dXJuIGxhc3RQb3NpdGlvbklu
T3JBZnRlck5vZGUoZW5kUmVuZGVyZXItPm5vZGUoKSk7CiB9CiAKIFZpc2libGVQb3NpdGlvblJh
bmdlIEFjY2Vzc2liaWxpdHlPYmplY3Q6OnN0eWxlUmFuZ2VGb3JQb3NpdGlvbihjb25zdCBWaXNp
YmxlUG9zaXRpb24mIHZpc2libGVQb3MpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwIGIvU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAppbmRleCBj
YThkNGE3Li5jYTZmN2E5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKQEAgLTI0NTksMTQgKzI0NTks
MTQgQEAgVmlzaWJsZVBvc2l0aW9uIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnZpc2libGVQ
b3NpdGlvbkZvckluZGV4KGludCBpbmRleCkgY28KICAgICAgICAgcmV0dXJuIFZpc2libGVQb3Np
dGlvbigpOwogICAgIAogICAgIGlmIChpbmRleCA8PSAwKQotICAgICAgICByZXR1cm4gVmlzaWJs
ZVBvc2l0aW9uKG5vZGUsIDAsIERPV05TVFJFQU0pOworICAgICAgICByZXR1cm4gVmlzaWJsZVBv
c2l0aW9uKGZpcnN0UG9zaXRpb25Jbk9yQmVmb3JlTm9kZShub2RlKSwgRE9XTlNUUkVBTSk7CiAg
ICAgCiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9
IFJhbmdlOjpjcmVhdGUobV9yZW5kZXJlci0+ZG9jdW1lbnQoKSk7CiAgICAgcmFuZ2UtPnNlbGVj
dE5vZGVDb250ZW50cyhub2RlLCBlYyk7CiAgICAgQ2hhcmFjdGVySXRlcmF0b3IgaXQocmFuZ2Uu
Z2V0KCkpOwogICAgIGl0LmFkdmFuY2UoaW5kZXggLSAxKTsKLSAgICByZXR1cm4gVmlzaWJsZVBv
c2l0aW9uKGl0LnJhbmdlKCktPmVuZENvbnRhaW5lcihlYyksIGl0LnJhbmdlKCktPmVuZE9mZnNl
dChlYyksIFVQU1RSRUFNKTsKKyAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKFBvc2l0aW9uKGl0
LnJhbmdlKCktPmVuZENvbnRhaW5lcihlYyksIGl0LnJhbmdlKCktPmVuZE9mZnNldChlYyksIFBv
c2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3IpLCBVUFNUUkVBTSk7CiB9CiAgICAgCiBp
bnQgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6aW5kZXhGb3JWaXNpYmxlUG9zaXRpb24oY29u
c3QgVmlzaWJsZVBvc2l0aW9uJiBwb3MpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vUmFuZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmNwcAppbmRleCBhNDFm
YzQ5Li40ODllYmUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5jcHAKQEAgLTE1NzAsNyArMTU3MCw3IEBAIFBv
c2l0aW9uIFJhbmdlOjplZGl0aW5nU3RhcnRQb3NpdGlvbigpIGNvbnN0CiAgICAgLy8gSXQgaXMg
aW1wb3J0YW50IHRvIHNraXAgY2VydGFpbiBpcnJlbGV2YW50IGNvbnRlbnQgYXQgdGhlIHN0YXJ0
IG9mIHRoZSBzZWxlY3Rpb24sIHNvIHdlIGRvIG5vdCB3aW5kIHVwIAogICAgIC8vIHdpdGggYSBz
cHVyaW91cyAibWl4ZWQiIHN0eWxlLgogICAgIAotICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxl
UG9zaXRpb24obV9zdGFydC5jb250YWluZXIoKSwgbV9zdGFydC5vZmZzZXQoKSwgVlBfREVGQVVM
VF9BRkZJTklUWSk7CisgICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3NpdGlvbihQb3NpdGlv
bihtX3N0YXJ0LmNvbnRhaW5lcigpLCBtX3N0YXJ0Lm9mZnNldCgpLCBQb3NpdGlvbjo6UG9zaXRp
b25Jc09mZnNldEluQW5jaG9yKSwgVlBfREVGQVVMVF9BRkZJTklUWSk7CiAgICAgaWYgKHZpc2li
bGVQb3NpdGlvbi5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIFBvc2l0aW9uKCk7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvRWRpdG9yLmNwcAppbmRleCAzYWNlYzI3Li5iMTAzNmMyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9FZGl0b3IuY3BwCkBAIC0yOTAsNyArMjkwLDcgQEAgYm9vbCBFZGl0b3I6OmNhbkRlbGV0
ZVJhbmdlKFJhbmdlKiByYW5nZSkgY29uc3QKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAog
ICAgIGlmIChyYW5nZS0+Y29sbGFwc2VkKGVjKSkgewotICAgICAgICBWaXNpYmxlUG9zaXRpb24g
c3RhcnQoc3RhcnRDb250YWluZXIsIHJhbmdlLT5zdGFydE9mZnNldChlYyksIERPV05TVFJFQU0p
OworICAgICAgICBWaXNpYmxlUG9zaXRpb24gc3RhcnQoUG9zaXRpb24oc3RhcnRDb250YWluZXIs
IHJhbmdlLT5zdGFydE9mZnNldChlYyksIFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNo
b3IpLCBET1dOU1RSRUFNKTsKICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHByZXZpb3VzID0gc3Rh
cnQucHJldmlvdXMoKTsKICAgICAgICAgLy8gRklYTUU6IFdlIHNvbWV0aW1lcyBhbGxvdyBkZWxl
dGlvbnMgYXQgdGhlIHN0YXJ0IG9mIGVkaXRhYmxlIHJvb3RzLCBsaWtlIHdoZW4gdGhlIGNhcmV0
IGlzIGluIGFuIGVtcHR5IGxpc3QgaXRlbS4KICAgICAgICAgaWYgKHByZXZpb3VzLmlzTnVsbCgp
IHx8IHByZXZpb3VzLmRlZXBFcXVpdmFsZW50KCkubm9kZSgpLT5yb290RWRpdGFibGVFbGVtZW50
KCkgIT0gc3RhcnRDb250YWluZXItPnJvb3RFZGl0YWJsZUVsZW1lbnQoKSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwIGIvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAKaW5kZXggMDhi
MDQ3Zi4uNzQ5YTMxOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNl
U2VsZWN0aW9uQ29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNl
U2VsZWN0aW9uQ29tbWFuZC5jcHAKQEAgLTg4NCw3ICs4ODQsNyBAQCB2b2lkIFJlcGxhY2VTZWxl
Y3Rpb25Db21tYW5kOjpkb0FwcGx5KCkKICAgICBOb2RlKiBlbmRCUiA9IGluc2VydGlvblBvcy5k
b3duc3RyZWFtKCkubm9kZSgpLT5oYXNUYWdOYW1lKGJyVGFnKSA/IGluc2VydGlvblBvcy5kb3du
c3RyZWFtKCkubm9kZSgpIDogMDsKICAgICBWaXNpYmxlUG9zaXRpb24gb3JpZ2luYWxWaXNQb3NC
ZWZvcmVFbmRCUjsKICAgICBpZiAoZW5kQlIpCi0gICAgICAgIG9yaWdpbmFsVmlzUG9zQmVmb3Jl
RW5kQlIgPSBWaXNpYmxlUG9zaXRpb24oZW5kQlIsIDAsIERPV05TVFJFQU0pLnByZXZpb3VzKCk7
CisgICAgICAgIG9yaWdpbmFsVmlzUG9zQmVmb3JlRW5kQlIgPSBWaXNpYmxlUG9zaXRpb24oUG9z
aXRpb24oZW5kQlIsIFBvc2l0aW9uOjpQb3NpdGlvbklzQmVmb3JlQW5jaG9yKSwgRE9XTlNUUkVB
TSkucHJldmlvdXMoKTsKICAgICAKICAgICBzdGFydEJsb2NrID0gZW5jbG9zaW5nQmxvY2soaW5z
ZXJ0aW9uUG9zLm5vZGUoKSk7CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TZWxl
Y3Rpb25Db250cm9sbGVyLmNwcAppbmRleCA4MmQ3YWYyLi45NzVjMGMwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvU2VsZWN0aW9uQ29udHJvbGxlci5jcHAKQEAgLTEzMTUsOCArMTMx
NSw4IEBAIHZvaWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6c2VsZWN0RnJhbWVFbGVtZW50SW5QYXJl
bnRJZkZ1bGx5U2VsZWN0ZWQoKQogCiAgICAgLy8gQ3JlYXRlIGNvbXB1dGUgcG9zaXRpb25zIGJl
Zm9yZSBhbmQgYWZ0ZXIgdGhlIGVsZW1lbnQuCiAgICAgdW5zaWduZWQgb3duZXJFbGVtZW50Tm9k
ZUluZGV4ID0gb3duZXJFbGVtZW50LT5ub2RlSW5kZXgoKTsKLSAgICBWaXNpYmxlUG9zaXRpb24g
YmVmb3JlT3duZXJFbGVtZW50KFZpc2libGVQb3NpdGlvbihvd25lckVsZW1lbnRQYXJlbnQsIG93
bmVyRWxlbWVudE5vZGVJbmRleCwgU0VMX0RFRkFVTFRfQUZGSU5JVFkpKTsKLSAgICBWaXNpYmxl
UG9zaXRpb24gYWZ0ZXJPd25lckVsZW1lbnQoVmlzaWJsZVBvc2l0aW9uKG93bmVyRWxlbWVudFBh
cmVudCwgb3duZXJFbGVtZW50Tm9kZUluZGV4ICsgMSwgVlBfVVBTVFJFQU1fSUZfUE9TU0lCTEUp
KTsKKyAgICBWaXNpYmxlUG9zaXRpb24gYmVmb3JlT3duZXJFbGVtZW50KFZpc2libGVQb3NpdGlv
bihQb3NpdGlvbihvd25lckVsZW1lbnRQYXJlbnQsIG93bmVyRWxlbWVudE5vZGVJbmRleCwgUG9z
aXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvciksIFNFTF9ERUZBVUxUX0FGRklOSVRZKSk7
CisgICAgVmlzaWJsZVBvc2l0aW9uIGFmdGVyT3duZXJFbGVtZW50KFZpc2libGVQb3NpdGlvbihQ
b3NpdGlvbihvd25lckVsZW1lbnRQYXJlbnQsIG93bmVyRWxlbWVudE5vZGVJbmRleCArIDEsIFBv
c2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3IpLCBWUF9VUFNUUkVBTV9JRl9QT1NTSUJM
RSkpOwogCiAgICAgLy8gRm9jdXMgb24gdGhlIHBhcmVudCBmcmFtZSwgYW5kIHRoZW4gc2VsZWN0
IGZyb20gYmVmb3JlIHRoaXMgZWxlbWVudCB0byBhZnRlci4KICAgICBWaXNpYmxlU2VsZWN0aW9u
IG5ld1NlbGVjdGlvbihiZWZvcmVPd25lckVsZW1lbnQsIGFmdGVyT3duZXJFbGVtZW50KTsKQEAg
LTEzODcsOCArMTM4Nyw4IEBAIGJvb2wgU2VsZWN0aW9uQ29udHJvbGxlcjo6c2V0U2VsZWN0ZWRS
YW5nZShSYW5nZSogcmFuZ2UsIEVBZmZpbml0eSBhZmZpbml0eSwgYm9vCiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAKICAgICAvLyBGSVhNRTogQ2FuIHdlIHByb3ZpZGUgZXh0ZW50QWZmaW5p
dHk/Ci0gICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVTdGFydChzdGFydENvbnRhaW5lciwgc3Rh
cnRPZmZzZXQsIGNvbGxhcHNlZCA/IGFmZmluaXR5IDogRE9XTlNUUkVBTSk7Ci0gICAgVmlzaWJs
ZVBvc2l0aW9uIHZpc2libGVFbmQoZW5kQ29udGFpbmVyLCBlbmRPZmZzZXQsIFNFTF9ERUZBVUxU
X0FGRklOSVRZKTsKKyAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVN0YXJ0KFBvc2l0aW9uKHN0
YXJ0Q29udGFpbmVyLCBzdGFydE9mZnNldCwgUG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFu
Y2hvciksIGNvbGxhcHNlZCA/IGFmZmluaXR5IDogRE9XTlNUUkVBTSk7CisgICAgVmlzaWJsZVBv
c2l0aW9uIHZpc2libGVFbmQoUG9zaXRpb24oZW5kQ29udGFpbmVyLCBlbmRPZmZzZXQsIFBvc2l0
aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3IpLCBTRUxfREVGQVVMVF9BRkZJTklUWSk7CiAg
ICAgc2V0U2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24odmlzaWJsZVN0YXJ0LCB2aXNpYmxlRW5k
KSwgY2xvc2VUeXBpbmcpOwogICAgIHJldHVybiB0cnVlOwogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9UZXh0SXRlcmF0b3IuY3BwCmluZGV4IDFmYzc2MDYuLjI1NDcxNTYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL1RleHRJdGVyYXRvci5jcHAKQEAgLTg3OCw4ICs4NzgsOCBAQCBib29sIFRleHRJ
dGVyYXRvcjo6c2hvdWxkUmVwcmVzZW50Tm9kZU9mZnNldFplcm8oKQogICAgIC8vIGFuZCBpbiB0
aGF0IGNhc2Ugd2UnbGwgZ2V0IG51bGwuIFdlIGRvbid0IHdhbnQgdG8gcHV0IGluIG5ld2xpbmVz
IGF0IHRoZSBzdGFydCBpbiB0aGF0IGNhc2UuCiAgICAgLy8gVGhlIGN1cnJQb3MuaXNOb3ROdWxs
KCkgY2hlY2sgaXMgbmVlZGVkIGJlY2F1c2UgcG9zaXRpb25zIGluIG5vbi1IVE1MIGNvbnRlbnQK
ICAgICAvLyAobGlrZSBTVkcpIGRvIG5vdCBoYXZlIHZpc2libGUgcG9zaXRpb25zLCBhbmQgd2Ug
ZG9uJ3Qgd2FudCB0byBlbWl0IGZvciB0aGVtIGVpdGhlci4KLSAgICBWaXNpYmxlUG9zaXRpb24g
c3RhcnRQb3MgPSBWaXNpYmxlUG9zaXRpb24obV9zdGFydENvbnRhaW5lciwgbV9zdGFydE9mZnNl
dCwgRE9XTlNUUkVBTSk7Ci0gICAgVmlzaWJsZVBvc2l0aW9uIGN1cnJQb3MgPSBWaXNpYmxlUG9z
aXRpb24obV9ub2RlLCAwLCBET1dOU1RSRUFNKTsKKyAgICBWaXNpYmxlUG9zaXRpb24gc3RhcnRQ
b3MgPSBWaXNpYmxlUG9zaXRpb24oUG9zaXRpb24obV9zdGFydENvbnRhaW5lciwgbV9zdGFydE9m
ZnNldCwgUG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvciksIERPV05TVFJFQU0pOwor
ICAgIFZpc2libGVQb3NpdGlvbiBjdXJyUG9zID0gVmlzaWJsZVBvc2l0aW9uKFBvc2l0aW9uKG1f
bm9kZSwgUG9zaXRpb246OlBvc2l0aW9uSXNCZWZvcmVBbmNob3IpLCBET1dOU1RSRUFNKTsKICAg
ICByZXR1cm4gc3RhcnRQb3MuaXNOb3ROdWxsKCkgJiYgY3VyclBvcy5pc05vdE51bGwoKSAmJiAh
aW5TYW1lTGluZShzdGFydFBvcywgY3VyclBvcyk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVBvc2l0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvVmlzaWJsZVBvc2l0aW9uLmNwcAppbmRleCA1OTk5ZmE2Li5hM2Y1MmI0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlUG9zaXRpb24uY3BwCkBAIC0xMDYsNyArMTA2LDcgQEAg
VmlzaWJsZVBvc2l0aW9uIFZpc2libGVQb3NpdGlvbjo6cHJldmlvdXMoYm9vbCBzdGF5SW5FZGl0
YWJsZUNvbnRlbnQpIGNvbnN0CiBQb3NpdGlvbiBWaXNpYmxlUG9zaXRpb246OmxlZnRWaXN1YWxs
eURpc3RpbmN0Q2FuZGlkYXRlKCkgY29uc3QKIHsKICAgICBQb3NpdGlvbiBwID0gbV9kZWVwUG9z
aXRpb247Ci0gICAgaWYgKCFwLm5vZGUoKSkKKyAgICBpZiAocC5pc051bGwoKSkKICAgICAgICAg
cmV0dXJuIFBvc2l0aW9uKCk7CiAKICAgICBQb3NpdGlvbiBkb3duc3RyZWFtU3RhcnQgPSBwLmRv
d25zdHJlYW0oKTsKQEAgLTI0Miw3ICsyNDIsNyBAQCBWaXNpYmxlUG9zaXRpb24gVmlzaWJsZVBv
c2l0aW9uOjpsZWZ0KGJvb2wgc3RheUluRWRpdGFibGVDb250ZW50KSBjb25zdAogUG9zaXRpb24g
VmlzaWJsZVBvc2l0aW9uOjpyaWdodFZpc3VhbGx5RGlzdGluY3RDYW5kaWRhdGUoKSBjb25zdAog
ewogICAgIFBvc2l0aW9uIHAgPSBtX2RlZXBQb3NpdGlvbjsKLSAgICBpZiAoIXAubm9kZSgpKQor
ICAgIGlmIChwLmlzTnVsbCgpKQogICAgICAgICByZXR1cm4gUG9zaXRpb24oKTsKIAogICAgIFBv
c2l0aW9uIGRvd25zdHJlYW1TdGFydCA9IHAuZG93bnN0cmVhbSgpOwpAQCAtNDUxLDEwICs0NTEs
MTEgQEAgUG9zaXRpb24gVmlzaWJsZVBvc2l0aW9uOjpjYW5vbmljYWxQb3NpdGlvbihjb25zdCBQ
b3NpdGlvbiYgcGFzc2VkUG9zaXRpb24pCiAgICAgLy8gVG8gZml4IHRoaXMsIHdlIG5lZWQgdG8g
ZWl0aGVyIGEpIGFkZCBjb2RlIHRvIGFsbCBwYWludENhcmV0cyB0byBwYXNzIHRoZSByZXNwb25z
aWJpbGl0eSBvZmYgdG8KICAgICAvLyB0aGUgYXBwcm9wcmlhdGUgcmVuZGVyZXIgZm9yIFZpc2li
bGVQb3NpdGlvbidzIGxpa2UgdGhlc2UsIG9yIGIpIGNhbm9uaWNhbGl6ZSB0byB0aGUgcmlnaHRt
b3N0IGNhbmRpZGF0ZQogICAgIC8vIHVubGVzcyB0aGUgYWZmaW5pdHkgaXMgdXBzdHJlYW0uCi0g
ICAgTm9kZSogbm9kZSA9IHBvc2l0aW9uLm5vZGUoKTsKLSAgICBpZiAoIW5vZGUpCisgICAgaWYg
KHBvc2l0aW9uLmlzTnVsbCgpKQogICAgICAgICByZXR1cm4gUG9zaXRpb24oKTsKIAorICAgIE5v
ZGUqIG5vZGUgPSBwb3NpdGlvbi5jb250YWluZXJOb2RlKCk7CisKICAgICBBU1NFUlQobm9kZS0+
ZG9jdW1lbnQoKSk7CiAgICAgbm9kZS0+ZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0SWdub3JlUGVu
ZGluZ1N0eWxlc2hlZXRzKCk7CiAKQEAgLTUxMCwxMSArNTExLDExIEBAIFVDaGFyMzIgVmlzaWJs
ZVBvc2l0aW9uOjpjaGFyYWN0ZXJBZnRlcigpIGNvbnN0CiAgICAgLy8gV2UgY2Fub25pY2FsaXpl
IHRvIHRoZSBmaXJzdCBvZiB0d28gZXF1aXZhbGVudCBjYW5kaWRhdGVzLCBidXQgdGhlIHNlY29u
ZCBvZiB0aGUgdHdvIGNhbmRpZGF0ZXMKICAgICAvLyBpcyB0aGUgb25lIHRoYXQgd2lsbCBiZSBp
bnNpZGUgdGhlIHRleHQgbm9kZSBjb250YWluaW5nIHRoZSBjaGFyYWN0ZXIgYWZ0ZXIgdGhpcyB2
aXNpYmxlIHBvc2l0aW9uLgogICAgIFBvc2l0aW9uIHBvcyA9IG1fZGVlcFBvc2l0aW9uLmRvd25z
dHJlYW0oKTsKLSAgICBOb2RlKiBub2RlID0gcG9zLm5vZGUoKTsKKyAgICBOb2RlKiBub2RlID0g
cG9zLmNvbnRhaW5lck5vZGUoKTsKICAgICBpZiAoIW5vZGUgfHwgIW5vZGUtPmlzVGV4dE5vZGUo
KSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgVGV4dCogdGV4dE5vZGUgPSBzdGF0aWNfY2FzdDxU
ZXh0Kj4ocG9zLm5vZGUoKSk7Ci0gICAgdW5zaWduZWQgb2Zmc2V0ID0gcG9zLmRlcHJlY2F0ZWRF
ZGl0aW5nT2Zmc2V0KCk7CisgICAgVGV4dCogdGV4dE5vZGUgPSBzdGF0aWNfY2FzdDxUZXh0Kj4o
cG9zLmNvbnRhaW5lck5vZGUoKSk7CisgICAgdW5zaWduZWQgb2Zmc2V0ID0gcG9zLm9mZnNldElu
Q29udGFpbmVyTm9kZSgpOwogICAgIHVuc2lnbmVkIGxlbmd0aCA9IHRleHROb2RlLT5sZW5ndGgo
KTsKICAgICBpZiAob2Zmc2V0ID49IGxlbmd0aCkKICAgICAgICAgcmV0dXJuIDA7CkBAIC01Mjcs
MTEgKzUyOCwxMSBAQCBVQ2hhcjMyIFZpc2libGVQb3NpdGlvbjo6Y2hhcmFjdGVyQWZ0ZXIoKSBj
b25zdAogCiBJbnRSZWN0IFZpc2libGVQb3NpdGlvbjo6bG9jYWxDYXJldFJlY3QoUmVuZGVyT2Jq
ZWN0KiYgcmVuZGVyZXIpIGNvbnN0CiB7Ci0gICAgTm9kZSogbm9kZSA9IG1fZGVlcFBvc2l0aW9u
Lm5vZGUoKTsKLSAgICBpZiAoIW5vZGUpIHsKKyAgICBpZiAobV9kZWVwUG9zaXRpb24uaXNOdWxs
KCkpIHsKICAgICAgICAgcmVuZGVyZXIgPSAwOwogICAgICAgICByZXR1cm4gSW50UmVjdCgpOwog
ICAgIH0KKyAgICBOb2RlKiBub2RlID0gbV9kZWVwUG9zaXRpb24uY29udGFpbmVyTm9kZSgpOwog
ICAgIAogICAgIHJlbmRlcmVyID0gbm9kZS0+cmVuZGVyZXIoKTsKICAgICBpZiAoIXJlbmRlcmVy
KQpAQCAtNTk5LDE5ICs2MDAsMTkgQEAgUGFzc1JlZlB0cjxSYW5nZT4gbWFrZVJhbmdlKGNvbnN0
IFZpc2libGVQb3NpdGlvbiAmc3RhcnQsIGNvbnN0IFZpc2libGVQb3NpdGlvbgogICAgIAogICAg
IFBvc2l0aW9uIHMgPSBzdGFydC5kZWVwRXF1aXZhbGVudCgpLnBhcmVudEFuY2hvcmVkRXF1aXZh
bGVudCgpOwogICAgIFBvc2l0aW9uIGUgPSBlbmQuZGVlcEVxdWl2YWxlbnQoKS5wYXJlbnRBbmNo
b3JlZEVxdWl2YWxlbnQoKTsKLSAgICByZXR1cm4gUmFuZ2U6OmNyZWF0ZShzLm5vZGUoKS0+ZG9j
dW1lbnQoKSwgcy5ub2RlKCksIHMuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSwgZS5ub2RlKCks
IGUuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSk7CisgICAgcmV0dXJuIFJhbmdlOjpjcmVhdGUo
cy5jb250YWluZXJOb2RlKCktPmRvY3VtZW50KCksIHMuY29udGFpbmVyTm9kZSgpLCBzLm9mZnNl
dEluQ29udGFpbmVyTm9kZSgpLCBlLmNvbnRhaW5lck5vZGUoKSwgZS5vZmZzZXRJbkNvbnRhaW5l
ck5vZGUoKSk7CiB9CiAKIFZpc2libGVQb3NpdGlvbiBzdGFydFZpc2libGVQb3NpdGlvbihjb25z
dCBSYW5nZSAqciwgRUFmZmluaXR5IGFmZmluaXR5KQogewogICAgIGludCBleGNlcHRpb24gPSAw
OwotICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oci0+c3RhcnRDb250YWluZXIoZXhjZXB0aW9u
KSwgci0+c3RhcnRPZmZzZXQoZXhjZXB0aW9uKSwgYWZmaW5pdHkpOworICAgIHJldHVybiBWaXNp
YmxlUG9zaXRpb24oUG9zaXRpb24oci0+c3RhcnRDb250YWluZXIoZXhjZXB0aW9uKSwgci0+c3Rh
cnRPZmZzZXQoZXhjZXB0aW9uKSwgUG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvciks
IGFmZmluaXR5KTsKIH0KIAogVmlzaWJsZVBvc2l0aW9uIGVuZFZpc2libGVQb3NpdGlvbihjb25z
dCBSYW5nZSAqciwgRUFmZmluaXR5IGFmZmluaXR5KQogewogICAgIGludCBleGNlcHRpb24gPSAw
OwotICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oci0+ZW5kQ29udGFpbmVyKGV4Y2VwdGlvbiks
IHItPmVuZE9mZnNldChleGNlcHRpb24pLCBhZmZpbml0eSk7CisgICAgcmV0dXJuIFZpc2libGVQ
b3NpdGlvbihQb3NpdGlvbihyLT5lbmRDb250YWluZXIoZXhjZXB0aW9uKSwgci0+ZW5kT2Zmc2V0
KGV4Y2VwdGlvbiksIFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3IpLCBhZmZpbml0
eSk7CiB9CiAKIGJvb2wgc2V0U3RhcnQoUmFuZ2UgKnIsIGNvbnN0IFZpc2libGVQb3NpdGlvbiAm
dmlzaWJsZVBvc2l0aW9uKQpAQCAtNjIwLDcgKzYyMSw3IEBAIGJvb2wgc2V0U3RhcnQoUmFuZ2Ug
KnIsIGNvbnN0IFZpc2libGVQb3NpdGlvbiAmdmlzaWJsZVBvc2l0aW9uKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgUG9zaXRpb24gcCA9IHZpc2libGVQb3NpdGlvbi5kZWVwRXF1aXZhbGVu
dCgpLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpOwogICAgIGludCBjb2RlID0gMDsKLSAgICBy
LT5zZXRTdGFydChwLm5vZGUoKSwgcC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpLCBjb2RlKTsK
KyAgICByLT5zZXRTdGFydChwLmNvbnRhaW5lck5vZGUoKSwgcC5vZmZzZXRJbkNvbnRhaW5lck5v
ZGUoKSwgY29kZSk7CiAgICAgcmV0dXJuIGNvZGUgPT0gMDsKIH0KIApAQCAtNjMwLDcgKzYzMSw3
IEBAIGJvb2wgc2V0RW5kKFJhbmdlICpyLCBjb25zdCBWaXNpYmxlUG9zaXRpb24gJnZpc2libGVQ
b3NpdGlvbikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIFBvc2l0aW9uIHAgPSB2aXNpYmxl
UG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKS5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKTsKICAg
ICBpbnQgY29kZSA9IDA7Ci0gICAgci0+c2V0RW5kKHAubm9kZSgpLCBwLmRlcHJlY2F0ZWRFZGl0
aW5nT2Zmc2V0KCksIGNvZGUpOworICAgIHItPnNldEVuZChwLmNvbnRhaW5lck5vZGUoKSwgcC5v
ZmZzZXRJbkNvbnRhaW5lck5vZGUoKSwgY29kZSk7CiAgICAgcmV0dXJuIGNvZGUgPT0gMDsKIH0K
IApAQCAtNjQ2LDEwICs2NDcsMTIgQEAgYm9vbCBpc0ZpcnN0VmlzaWJsZVBvc2l0aW9uSW5Ob2Rl
KGNvbnN0IFZpc2libGVQb3NpdGlvbiAmdmlzaWJsZVBvc2l0aW9uLCBjb25zdAogewogICAgIGlm
ICh2aXNpYmxlUG9zaXRpb24uaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAK
LSAgICBpZiAoIXZpc2libGVQb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgpLm5vZGUoKS0+aXNEZXNj
ZW5kYW50T2Yobm9kZSkpCisKKyAgICBQb3NpdGlvbiBwID0gdmlzaWJsZVBvc2l0aW9uLmRlZXBF
cXVpdmFsZW50KCk7CisKKyAgICBpZiAoIXAubm9kZSgpLT5pc0Rlc2NlbmRhbnRPZihub2RlKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAKKwogICAgIFZpc2libGVQb3NpdGlvbiBw
cmV2aW91cyA9IHZpc2libGVQb3NpdGlvbi5wcmV2aW91cygpOwogICAgIHJldHVybiBwcmV2aW91
cy5pc051bGwoKSB8fCAhcHJldmlvdXMuZGVlcEVxdWl2YWxlbnQoKS5ub2RlKCktPmlzRGVzY2Vu
ZGFudE9mKG5vZGUpOwogfQpAQCAtNjU4LDEwICs2NjEsMTIgQEAgYm9vbCBpc0xhc3RWaXNpYmxl
UG9zaXRpb25Jbk5vZGUoY29uc3QgVmlzaWJsZVBvc2l0aW9uICZ2aXNpYmxlUG9zaXRpb24sIGNv
bnN0IE4KIHsKICAgICBpZiAodmlzaWJsZVBvc2l0aW9uLmlzTnVsbCgpKQogICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgCi0gICAgaWYgKCF2aXNpYmxlUG9zaXRpb24uZGVlcEVxdWl2YWxlbnQo
KS5ub2RlKCktPmlzRGVzY2VuZGFudE9mKG5vZGUpKQorCisgICAgUG9zaXRpb24gcCA9IHZpc2li
bGVQb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgpOworCisgICAgaWYgKCFwLm5vZGUoKS0+aXNEZXNj
ZW5kYW50T2Yobm9kZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICAK
KwogICAgIFZpc2libGVQb3NpdGlvbiBuZXh0ID0gdmlzaWJsZVBvc2l0aW9uLm5leHQoKTsKICAg
ICByZXR1cm4gbmV4dC5pc051bGwoKSB8fCAhbmV4dC5kZWVwRXF1aXZhbGVudCgpLm5vZGUoKS0+
aXNEZXNjZW5kYW50T2Yobm9kZSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL2h0bWxlZGl0aW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaHRtbGVkaXRpbmcu
Y3BwCmluZGV4IGZiYTU2MGEuLmUzNDkzOWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvaHRtbGVkaXRpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaHRtbGVk
aXRpbmcuY3BwCkBAIC00MjYsNyArNDI2LDcgQEAgc3RhdGljIE5vZGUqIGZpcnN0SW5TcGVjaWFs
RWxlbWVudChjb25zdCBQb3NpdGlvbiYgcG9zKQogICAgIGZvciAoTm9kZSogbiA9IHBvcy5ub2Rl
KCk7IG4gJiYgbi0+cm9vdEVkaXRhYmxlRWxlbWVudCgpID09IHJvb3RFZGl0YWJsZUVsZW1lbnQ7
IG4gPSBuLT5wYXJlbnROb2RlKCkpCiAgICAgICAgIGlmIChpc1NwZWNpYWxFbGVtZW50KG4pKSB7
CiAgICAgICAgICAgICBWaXNpYmxlUG9zaXRpb24gdlBvcyA9IFZpc2libGVQb3NpdGlvbihwb3Ms
IERPV05TVFJFQU0pOwotICAgICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIGZpcnN0SW5FbGVtZW50
ID0gVmlzaWJsZVBvc2l0aW9uKG4sIDAsIERPV05TVFJFQU0pOworICAgICAgICAgICAgVmlzaWJs
ZVBvc2l0aW9uIGZpcnN0SW5FbGVtZW50ID0gVmlzaWJsZVBvc2l0aW9uKGZpcnN0UG9zaXRpb25J
bk9yQmVmb3JlTm9kZShuKSwgRE9XTlNUUkVBTSk7CiAgICAgICAgICAgICBpZiAoaXNUYWJsZUVs
ZW1lbnQobikgJiYgdlBvcyA9PSBmaXJzdEluRWxlbWVudC5uZXh0KCkpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIG47CiAgICAgICAgICAgICBpZiAodlBvcyA9PSBmaXJzdEluRWxlbWVudCkKQEAg
LTQ0Miw3ICs0NDIsNyBAQCBzdGF0aWMgTm9kZSogbGFzdEluU3BlY2lhbEVsZW1lbnQoY29uc3Qg
UG9zaXRpb24mIHBvcykKICAgICBmb3IgKE5vZGUqIG4gPSBwb3Mubm9kZSgpOyBuICYmIG4tPnJv
b3RFZGl0YWJsZUVsZW1lbnQoKSA9PSByb290RWRpdGFibGVFbGVtZW50OyBuID0gbi0+cGFyZW50
Tm9kZSgpKQogICAgICAgICBpZiAoaXNTcGVjaWFsRWxlbWVudChuKSkgewogICAgICAgICAgICAg
VmlzaWJsZVBvc2l0aW9uIHZQb3MgPSBWaXNpYmxlUG9zaXRpb24ocG9zLCBET1dOU1RSRUFNKTsK
LSAgICAgICAgICAgIFZpc2libGVQb3NpdGlvbiBsYXN0SW5FbGVtZW50ID0gVmlzaWJsZVBvc2l0
aW9uKG4sIG4tPmNoaWxkTm9kZUNvdW50KCksIERPV05TVFJFQU0pOworICAgICAgICAgICAgVmlz
aWJsZVBvc2l0aW9uIGxhc3RJbkVsZW1lbnQgPSBWaXNpYmxlUG9zaXRpb24oUG9zaXRpb24obiwg
bi0+Y2hpbGROb2RlQ291bnQoKSwgUG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvciks
IERPV05TVFJFQU0pOwogICAgICAgICAgICAgaWYgKGlzVGFibGVFbGVtZW50KG4pICYmIHZQb3Mg
PT0gbGFzdEluRWxlbWVudC5wcmV2aW91cygpKQogICAgICAgICAgICAgICAgIHJldHVybiBuOwog
ICAgICAgICAgICAgaWYgKHZQb3MgPT0gbGFzdEluRWxlbWVudCkKQEAgLTUxOSw3ICs1MTksNyBA
QCBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvc2l0aW9uQmVmb3JlTm9kZShOb2RlKiBub2RlKQog
ewogICAgIEFTU0VSVChub2RlKTsKICAgICBpZiAobm9kZS0+Y2hpbGROb2RlQ291bnQoKSkKLSAg
ICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihub2RlLCAwLCBET1dOU1RSRUFNKTsKKyAgICAg
ICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihmaXJzdFBvc2l0aW9uSW5PckJlZm9yZU5vZGUobm9k
ZSksIERPV05TVFJFQU0pOwogICAgIEFTU0VSVChub2RlLT5wYXJlbnROb2RlKCkpOwogICAgIHJl
dHVybiBwb3NpdGlvbkluUGFyZW50QmVmb3JlTm9kZShub2RlKTsKIH0KQEAgLTUyOSw3ICs1Mjks
NyBAQCBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvc2l0aW9uQWZ0ZXJOb2RlKE5vZGUqIG5vZGUp
CiB7CiAgICAgQVNTRVJUKG5vZGUpOwogICAgIGlmIChub2RlLT5jaGlsZE5vZGVDb3VudCgpKQot
ICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKG5vZGUsIG5vZGUtPmNoaWxkTm9kZUNvdW50
KCksIERPV05TVFJFQU0pOworICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKGxhc3RQb3Np
dGlvbkluT3JBZnRlck5vZGUobm9kZSksIERPV05TVFJFQU0pOwogICAgIEFTU0VSVChub2RlLT5w
YXJlbnROb2RlKCkpOwogICAgIHJldHVybiBwb3NpdGlvbkluUGFyZW50QWZ0ZXJOb2RlKG5vZGUp
OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy92aXNpYmxlX3VuaXRzLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvdmlzaWJsZV91bml0cy5jcHAKaW5kZXggZjU5ZDVj
OC4uMzhlYTJjMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy92aXNpYmxlX3Vu
aXRzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL3Zpc2libGVfdW5pdHMuY3BwCkBA
IC0zODMsNyArMzgzLDcgQEAgc3RhdGljIFZpc2libGVQb3NpdGlvbiBzdGFydFBvc2l0aW9uRm9y
TGluZShjb25zdCBWaXNpYmxlUG9zaXRpb24mIGMpCiAgICAgICAgIHN0YXJ0T2Zmc2V0ID0gc3Rh
cnRUZXh0Qm94LT5zdGFydCgpOwogICAgIH0KICAgCi0gICAgVmlzaWJsZVBvc2l0aW9uIHZpc1Bv
cyA9IFZpc2libGVQb3NpdGlvbihzdGFydE5vZGUsIHN0YXJ0T2Zmc2V0LCBET1dOU1RSRUFNKTsK
KyAgICBWaXNpYmxlUG9zaXRpb24gdmlzUG9zID0gVmlzaWJsZVBvc2l0aW9uKFBvc2l0aW9uKHN0
YXJ0Tm9kZSwgc3RhcnRPZmZzZXQsIFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3Ip
LCBET1dOU1RSRUFNKTsKICAgICByZXR1cm4gcG9zaXRpb25Bdm9pZGluZ0ZpcnN0UG9zaXRpb25J
blRhYmxlKHZpc1Bvcyk7CiB9CiAKQEAgLTQzOSw3ICs0MzksOCBAQCBzdGF0aWMgVmlzaWJsZVBv
c2l0aW9uIGVuZFBvc2l0aW9uRm9yTGluZShjb25zdCBWaXNpYmxlUG9zaXRpb24mIGMpCiAgICAg
ICAgICAgICBlbmRPZmZzZXQgKz0gZW5kVGV4dEJveC0+bGVuKCk7CiAgICAgfQogICAgIAotICAg
IHJldHVybiBWaXNpYmxlUG9zaXRpb24oZW5kTm9kZSwgZW5kT2Zmc2V0LCBWUF9VUFNUUkVBTV9J
Rl9QT1NTSUJMRSk7CisgICAgLy9GSVhNRTogUmVwbGFjZSB1c2FnZSBvZiBsZWdhY3kgZWRpdGlu
ZyBwb3NpdGlvbgorICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oUG9zaXRpb24oZW5kTm9kZSwg
ZW5kT2Zmc2V0KSwgVlBfVVBTVFJFQU1fSUZfUE9TU0lCTEUpOwogfQogCiBWaXNpYmxlUG9zaXRp
b24gZW5kT2ZMaW5lKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgYykKQEAgLTU3NSw3ICs1NzYsNyBA
QCBWaXNpYmxlUG9zaXRpb24gcHJldmlvdXNMaW5lUG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0
aW9uICZ2aXNpYmxlUG9zaXRpb24sIGludAogICAgIC8vIE1vdmUgdG8gdGhlIHN0YXJ0IG9mIHRo
ZSBjb250ZW50IGluIHRoaXMgYmxvY2ssIHdoaWNoIGVmZmVjdGl2ZWx5IG1vdmVzIHVzCiAgICAg
Ly8gdG8gdGhlIHN0YXJ0IG9mIHRoZSBsaW5lIHdlJ3JlIG9uLgogICAgIEVsZW1lbnQqIHJvb3RF
bGVtZW50ID0gbm9kZS0+aXNDb250ZW50RWRpdGFibGUoKSA/IG5vZGUtPnJvb3RFZGl0YWJsZUVs
ZW1lbnQoKSA6IG5vZGUtPmRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgpOwotICAgIHJldHVy
biBWaXNpYmxlUG9zaXRpb24ocm9vdEVsZW1lbnQsIDAsIERPV05TVFJFQU0pOworICAgIHJldHVy
biBWaXNpYmxlUG9zaXRpb24oUG9zaXRpb24ocm9vdEVsZW1lbnQsIDAsIFBvc2l0aW9uOjpQb3Np
dGlvbklzT2Zmc2V0SW5BbmNob3IpLCBET1dOU1RSRUFNKTsKIH0KIAogc3RhdGljIE5vZGUqIG5l
eHRMZWFmV2l0aFNhbWVFZGl0YWJpbGl0eShOb2RlKiBub2RlLCBpbnQgb2Zmc2V0KQpAQCAtNjgw
LDcgKzY4MSw3IEBAIFZpc2libGVQb3NpdGlvbiBuZXh0TGluZVBvc2l0aW9uKGNvbnN0IFZpc2li
bGVQb3NpdGlvbiAmdmlzaWJsZVBvc2l0aW9uLCBpbnQgeCkKICAgICAvLyBNb3ZlIHRvIHRoZSBl
bmQgb2YgdGhlIGNvbnRlbnQgaW4gdGhpcyBibG9jaywgd2hpY2ggZWZmZWN0aXZlbHkgbW92ZXMg
dXMKICAgICAvLyB0byB0aGUgZW5kIG9mIHRoZSBsaW5lIHdlJ3JlIG9uLgogICAgIEVsZW1lbnQq
IHJvb3RFbGVtZW50ID0gbm9kZS0+aXNDb250ZW50RWRpdGFibGUoKSA/IG5vZGUtPnJvb3RFZGl0
YWJsZUVsZW1lbnQoKSA6IG5vZGUtPmRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgpOwotICAg
IHJldHVybiBWaXNpYmxlUG9zaXRpb24ocm9vdEVsZW1lbnQsIHJvb3RFbGVtZW50ID8gcm9vdEVs
ZW1lbnQtPmNoaWxkTm9kZUNvdW50KCkgOiAwLCBET1dOU1RSRUFNKTsKKyAgICByZXR1cm4gVmlz
aWJsZVBvc2l0aW9uKFBvc2l0aW9uKHJvb3RFbGVtZW50LCByb290RWxlbWVudCA/IHJvb3RFbGVt
ZW50LT5jaGlsZE5vZGVDb3VudCgpIDogMCwgUG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFu
Y2hvciksIERPV05TVFJFQU0pOwogfQogCiAvLyAtLS0tLS0tLS0KQEAgLTc4MCw3ICs3ODEsNyBA
QCBWaXNpYmxlUG9zaXRpb24gc3RhcnRPZlBhcmFncmFwaChjb25zdCBWaXNpYmxlUG9zaXRpb24m
IGMsIEVkaXRpbmdCb3VuZGFyeUNyb3NzaQogICAgICAgICAgICAgICAgICAgICBpID0gbWF4KDAs
IG8pOwogICAgICAgICAgICAgICAgIHdoaWxlICgtLWkgPj0gMCkKICAgICAgICAgICAgICAgICAg
ICAgaWYgKGNoYXJzW2ldID09ICdcbicpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
VmlzaWJsZVBvc2l0aW9uKG4sIGkgKyAxLCBET1dOU1RSRUFNKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oUG9zaXRpb24obiwgaSArIDEsIFBvc2l0aW9u
OjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3IpLCBET1dOU1RSRUFNKTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIG5vZGUgPSBuOwogICAgICAgICAgICAgb2Zmc2V0ID0gMDsKQEAgLTc5Myw3
ICs3OTQsOCBAQCBWaXNpYmxlUG9zaXRpb24gc3RhcnRPZlBhcmFncmFwaChjb25zdCBWaXNpYmxl
UG9zaXRpb24mIGMsIEVkaXRpbmdCb3VuZGFyeUNyb3NzaQogICAgICAgICAgICAgbiA9IG4tPnRy
YXZlcnNlUHJldmlvdXNOb2RlUG9zdE9yZGVyKHN0YXJ0QmxvY2spOwogICAgIH0KIAotICAgIHJl
dHVybiBWaXNpYmxlUG9zaXRpb24obm9kZSwgb2Zmc2V0LCBET1dOU1RSRUFNKTsKKyAgICAvL0ZJ
WE1FOiBSZXBsYWNlIHVzYWdlIG9mIGxlZ2FjeSBlZGl0aW5nIHBvc2l0aW9uCisgICAgcmV0dXJu
IFZpc2libGVQb3NpdGlvbihQb3NpdGlvbihub2RlLCBvZmZzZXQpLCBET1dOU1RSRUFNKTsKIH0K
IAogVmlzaWJsZVBvc2l0aW9uIGVuZE9mUGFyYWdyYXBoKGNvbnN0IFZpc2libGVQb3NpdGlvbiAm
YywgRWRpdGluZ0JvdW5kYXJ5Q3Jvc3NpbmdSdWxlIGJvdW5kYXJ5Q3Jvc3NpbmdSdWxlKQpAQCAt
ODM5LDcgKzg0MSw3IEBAIFZpc2libGVQb3NpdGlvbiBlbmRPZlBhcmFncmFwaChjb25zdCBWaXNp
YmxlUG9zaXRpb24gJmMsIEVkaXRpbmdCb3VuZGFyeUNyb3NzaW5nCiAgICAgICAgICAgICAgICAg
aW50IG8gPSBuID09IHN0YXJ0Tm9kZSA/IG9mZnNldCA6IDA7CiAgICAgICAgICAgICAgICAgZm9y
IChpbnQgaSA9IG87IGkgPCBsZW5ndGg7ICsraSkKICAgICAgICAgICAgICAgICAgICAgaWYgKGNo
YXJzW2ldID09ICdcbicpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gVmlzaWJsZVBv
c2l0aW9uKG4sIGksIERPV05TVFJFQU0pOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IFZpc2libGVQb3NpdGlvbihQb3NpdGlvbihuLCBpLCBQb3NpdGlvbjo6UG9zaXRpb25Jc09mZnNl
dEluQW5jaG9yKSwgRE9XTlNUUkVBTSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBub2Rl
ID0gbjsKICAgICAgICAgICAgIG9mZnNldCA9IHItPmNhcmV0TWF4T2Zmc2V0KCk7CkBAIC04NTIs
NyArODU0LDggQEAgVmlzaWJsZVBvc2l0aW9uIGVuZE9mUGFyYWdyYXBoKGNvbnN0IFZpc2libGVQ
b3NpdGlvbiAmYywgRWRpdGluZ0JvdW5kYXJ5Q3Jvc3NpbmcKICAgICAgICAgICAgIG4gPSBuLT50
cmF2ZXJzZU5leHROb2RlKHN0YXlJbnNpZGVCbG9jayk7CiAgICAgfQogCi0gICAgcmV0dXJuIFZp
c2libGVQb3NpdGlvbihub2RlLCBvZmZzZXQsIERPV05TVFJFQU0pOworICAgIC8vRklYTUU6IFJl
cGxhY2UgdXNhZ2Ugb2YgbGVnYWN5IGVkaXRpbmcgcG9zaXRpb24KKyAgICByZXR1cm4gVmlzaWJs
ZVBvc2l0aW9uKFBvc2l0aW9uKG5vZGUsIG9mZnNldCksIERPV05TVFJFQU0pOwogfQogCiBWaXNp
YmxlUG9zaXRpb24gc3RhcnRPZk5leHRQYXJhZ3JhcGgoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2
aXNpYmxlUG9zaXRpb24pCkBAIC05MjYsNyArOTI5LDcgQEAgVmlzaWJsZVBvc2l0aW9uIGVuZE9m
QmxvY2soY29uc3QgVmlzaWJsZVBvc2l0aW9uICZjKQogCiAgICAgTm9kZSAqc3RhcnRCbG9jayA9
IHN0YXJ0Tm9kZS0+ZW5jbG9zaW5nQmxvY2tGbG93RWxlbWVudCgpOwogICAgIAotICAgIHJldHVy
biBWaXNpYmxlUG9zaXRpb24oc3RhcnRCbG9jaywgc3RhcnRCbG9jay0+Y2hpbGROb2RlQ291bnQo
KSwgVlBfREVGQVVMVF9BRkZJTklUWSk7ICAgCisgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihQ
b3NpdGlvbihzdGFydEJsb2NrLCBzdGFydEJsb2NrLT5jaGlsZE5vZGVDb3VudCgpLCBQb3NpdGlv
bjo6UG9zaXRpb25Jc09mZnNldEluQW5jaG9yKSwgVlBfREVGQVVMVF9BRkZJTklUWSk7ICAgCiB9
CiAKIGJvb2wgaW5TYW1lQmxvY2soY29uc3QgVmlzaWJsZVBvc2l0aW9uICZhLCBjb25zdCBWaXNp
YmxlUG9zaXRpb24gJmIpCkBAIC05NTEsNyArOTU0LDcgQEAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0
T2ZEb2N1bWVudChjb25zdCBOb2RlKiBub2RlKQogICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0
dXJuIFZpc2libGVQb3NpdGlvbigpOwogICAgIAotICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24o
bm9kZS0+ZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCksIDAsIERPV05TVFJFQU0pOworICAg
IHJldHVybiBWaXNpYmxlUG9zaXRpb24oUG9zaXRpb24obm9kZS0+ZG9jdW1lbnQoKS0+ZG9jdW1l
bnRFbGVtZW50KCksIDAsIFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3IpLCBET1dO
U1RSRUFNKTsKIH0KIAogVmlzaWJsZVBvc2l0aW9uIHN0YXJ0T2ZEb2N1bWVudChjb25zdCBWaXNp
YmxlUG9zaXRpb24gJmMpCkBAIC05NjUsNyArOTY4LDcgQEAgVmlzaWJsZVBvc2l0aW9uIGVuZE9m
RG9jdW1lbnQoY29uc3QgTm9kZSogbm9kZSkKICAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlv
bigpOwogICAgIAogICAgIEVsZW1lbnQqIGRvYyA9IG5vZGUtPmRvY3VtZW50KCktPmRvY3VtZW50
RWxlbWVudCgpOwotICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oZG9jLCBkb2MtPmNoaWxkTm9k
ZUNvdW50KCksIERPV05TVFJFQU0pOworICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oUG9zaXRp
b24oZG9jLCBkb2MtPmNoaWxkTm9kZUNvdW50KCksIFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0
SW5BbmNob3IpLCBET1dOU1RSRUFNKTsKIH0KIAogVmlzaWJsZVBvc2l0aW9uIGVuZE9mRG9jdW1l
bnQoY29uc3QgVmlzaWJsZVBvc2l0aW9uICZjKQpAQCAtMTEyMyw3ICsxMTI2LDggQEAgc3RhdGlj
IFZpc2libGVQb3NpdGlvbiBsb2dpY2FsU3RhcnRQb3NpdGlvbkZvckxpbmUoY29uc3QgVmlzaWJs
ZVBvc2l0aW9uJiBjKQogCiAgICAgaW50IHN0YXJ0T2Zmc2V0ID0gbG9naWNhbFN0YXJ0Qm94LT5j
YXJldE1pbk9mZnNldCgpOwogICAKLSAgICBWaXNpYmxlUG9zaXRpb24gdmlzUG9zID0gVmlzaWJs
ZVBvc2l0aW9uKGxvZ2ljYWxTdGFydE5vZGUsIHN0YXJ0T2Zmc2V0LCBET1dOU1RSRUFNKTsKKyAg
ICAvL0ZJWE1FOiBSZXBsYWNlIHVzYWdlIG9mIGxlZ2FjeSBlZGl0aW5nIHBvc2l0aW9uCisgICAg
VmlzaWJsZVBvc2l0aW9uIHZpc1BvcyA9IFZpc2libGVQb3NpdGlvbihQb3NpdGlvbihsb2dpY2Fs
U3RhcnROb2RlLCBzdGFydE9mZnNldCksIERPV05TVFJFQU0pOwogICAgIHJldHVybiBwb3NpdGlv
bkF2b2lkaW5nRmlyc3RQb3NpdGlvbkluVGFibGUodmlzUG9zKTsKIH0KIApAQCAtMTE2Nyw3ICsx
MTcxLDggQEAgc3RhdGljIFZpc2libGVQb3NpdGlvbiBsb2dpY2FsRW5kUG9zaXRpb25Gb3JMaW5l
KGNvbnN0IFZpc2libGVQb3NpdGlvbiYgYykKICAgICAgICAgICAgIGVuZE9mZnNldCArPSBlbmRU
ZXh0Qm94LT5sZW4oKTsKICAgICB9CiAgICAgCi0gICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihs
b2dpY2FsRW5kTm9kZSwgZW5kT2Zmc2V0LCBWUF9VUFNUUkVBTV9JRl9QT1NTSUJMRSk7CisgICAg
Ly9GSVhNRTogUmVwbGFjZSB1c2FnZSBvZiBsZWdhY3kgZWRpdGluZyBwb3NpdGlvbgorICAgIHJl
dHVybiBWaXNpYmxlUG9zaXRpb24oUG9zaXRpb24obG9naWNhbEVuZE5vZGUsIGVuZE9mZnNldCks
IFZQX1VQU1RSRUFNX0lGX1BPU1NJQkxFKTsKIH0KIAogYm9vbCBpblNhbWVMb2dpY2FsTGluZShj
b25zdCBWaXNpYmxlUG9zaXRpb24mIGEsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYgYikKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NU2VsZWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvRE9NU2VsZWN0aW9uLmNwcAppbmRleCBkYmIwOTQ0Li5lZWIxZDExIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVNlbGVjdGlvbi5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9ET01TZWxlY3Rpb24uY3BwCkBAIC0yMTEsNyArMjExLDcgQEAgdm9pZCBET01T
ZWxlY3Rpb246OmNvbGxhcHNlKE5vZGUqIG5vZGUsIGludCBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUm
IGVjKQogICAgIGlmICghaXNWYWxpZEZvclBvc2l0aW9uKG5vZGUpKQogICAgICAgICByZXR1cm47
CiAKLSAgICBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+bW92ZVRvKFZpc2libGVQb3NpdGlvbihub2Rl
LCBvZmZzZXQsIERPV05TVFJFQU0pKTsKKyAgICBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+bW92ZVRv
KFZpc2libGVQb3NpdGlvbihQb3NpdGlvbihub2RlLCBvZmZzZXQsIFBvc2l0aW9uOjpQb3NpdGlv
bklzT2Zmc2V0SW5BbmNob3IpLCBET1dOU1RSRUFNKSk7CiB9CiAKIHZvaWQgRE9NU2VsZWN0aW9u
Ojpjb2xsYXBzZVRvRW5kKEV4Y2VwdGlvbkNvZGUmIGVjKQpAQCAtMjY0LDggKzI2NCw4IEBAIHZv
aWQgRE9NU2VsZWN0aW9uOjpzZXRCYXNlQW5kRXh0ZW50KE5vZGUqIGJhc2VOb2RlLCBpbnQgYmFz
ZU9mZnNldCwgTm9kZSogZXh0ZW50CiAgICAgaWYgKCFpc1ZhbGlkRm9yUG9zaXRpb24oYmFzZU5v
ZGUpIHx8ICFpc1ZhbGlkRm9yUG9zaXRpb24oZXh0ZW50Tm9kZSkpCiAgICAgICAgIHJldHVybjsK
IAotICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlQmFzZSA9IFZpc2libGVQb3NpdGlvbihiYXNl
Tm9kZSwgYmFzZU9mZnNldCwgRE9XTlNUUkVBTSk7Ci0gICAgVmlzaWJsZVBvc2l0aW9uIHZpc2li
bGVFeHRlbnQgPSBWaXNpYmxlUG9zaXRpb24oZXh0ZW50Tm9kZSwgZXh0ZW50T2Zmc2V0LCBET1dO
U1RSRUFNKTsKKyAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZUJhc2UgPSBWaXNpYmxlUG9zaXRp
b24oUG9zaXRpb24oYmFzZU5vZGUsIGJhc2VPZmZzZXQsIFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zm
c2V0SW5BbmNob3IpLCBET1dOU1RSRUFNKTsKKyAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZUV4
dGVudCA9IFZpc2libGVQb3NpdGlvbihQb3NpdGlvbihleHRlbnROb2RlLCBleHRlbnRPZmZzZXQs
IFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3IpLCBET1dOU1RSRUFNKTsKIAogICAg
IG1fZnJhbWUtPnNlbGVjdGlvbigpLT5tb3ZlVG8odmlzaWJsZUJhc2UsIHZpc2libGVFeHRlbnQp
OwogfQpAQCAtMjgyLDcgKzI4Miw3IEBAIHZvaWQgRE9NU2VsZWN0aW9uOjpzZXRQb3NpdGlvbihO
b2RlKiBub2RlLCBpbnQgb2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykKICAgICBpZiAoIWlzVmFs
aWRGb3JQb3NpdGlvbihub2RlKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9mcmFtZS0+c2Vs
ZWN0aW9uKCktPm1vdmVUbyhWaXNpYmxlUG9zaXRpb24obm9kZSwgb2Zmc2V0LCBET1dOU1RSRUFN
KSk7CisgICAgbV9mcmFtZS0+c2VsZWN0aW9uKCktPm1vdmVUbyhWaXNpYmxlUG9zaXRpb24oUG9z
aXRpb24obm9kZSwgb2Zmc2V0LCBQb3NpdGlvbjo6UG9zaXRpb25Jc09mZnNldEluQW5jaG9yKSwg
RE9XTlNUUkVBTSkpOwogfQogCiB2b2lkIERPTVNlbGVjdGlvbjo6bW9kaWZ5KGNvbnN0IFN0cmlu
ZyYgYWx0ZXJTdHJpbmcsIGNvbnN0IFN0cmluZyYgZGlyZWN0aW9uU3RyaW5nLCBjb25zdCBTdHJp
bmcmIGdyYW51bGFyaXR5U3RyaW5nKQpAQCAtMzUzLDcgKzM1Myw3IEBAIHZvaWQgRE9NU2VsZWN0
aW9uOjpleHRlbmQoTm9kZSogbm9kZSwgaW50IG9mZnNldCwgRXhjZXB0aW9uQ29kZSYgZWMpCiAg
ICAgaWYgKCFpc1ZhbGlkRm9yUG9zaXRpb24obm9kZSkpCiAgICAgICAgIHJldHVybjsKIAotICAg
IG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zZXRFeHRlbnQoVmlzaWJsZVBvc2l0aW9uKG5vZGUsIG9m
ZnNldCwgRE9XTlNUUkVBTSkpOworICAgIG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zZXRFeHRlbnQo
VmlzaWJsZVBvc2l0aW9uKFBvc2l0aW9uKG5vZGUsIG9mZnNldCwgUG9zaXRpb246OlBvc2l0aW9u
SXNPZmZzZXRJbkFuY2hvciksIERPV05TVFJFQU0pKTsKIH0KIAogUGFzc1JlZlB0cjxSYW5nZT4g
RE9NU2VsZWN0aW9uOjpnZXRSYW5nZUF0KGludCBpbmRleCwgRXhjZXB0aW9uQ29kZSYgZWMpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKaW5kZXggOGNjODYyNi4uNDE0YmFlYSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcApAQCAtMzY4LDcgKzM2OCw3IEBAIGJvb2wg
RXZlbnRIYW5kbGVyOjpoYW5kbGVNb3VzZVByZXNzRXZlbnRTaW5nbGVDbGljayhjb25zdCBNb3Vz
ZUV2ZW50V2l0aEhpdFRlc3RSCiAKICAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvcyhpbm5l
ck5vZGUtPnJlbmRlcmVyKCktPnBvc2l0aW9uRm9yUG9pbnQoZXZlbnQubG9jYWxQb2ludCgpKSk7
CiAgICAgaWYgKHZpc2libGVQb3MuaXNOdWxsKCkpCi0gICAgICAgIHZpc2libGVQb3MgPSBWaXNp
YmxlUG9zaXRpb24oaW5uZXJOb2RlLCAwLCBET1dOU1RSRUFNKTsKKyAgICAgICAgdmlzaWJsZVBv
cyA9IFZpc2libGVQb3NpdGlvbihmaXJzdFBvc2l0aW9uSW5PckJlZm9yZU5vZGUoaW5uZXJOb2Rl
KSwgRE9XTlNUUkVBTSk7CiAgICAgUG9zaXRpb24gcG9zID0gdmlzaWJsZVBvcy5kZWVwRXF1aXZh
bGVudCgpOwogICAgIAogICAgIFZpc2libGVTZWxlY3Rpb24gbmV3U2VsZWN0aW9uID0gbV9mcmFt
ZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyT2JqZWN0LmNwcAppbmRleCBjZmFhNjVkLi41MGY3YmI4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcApAQCAtMjYyOSw3ICsyNjI5LDcgQEAgVmlzaWJsZVBv
c2l0aW9uIFJlbmRlck9iamVjdDo6Y3JlYXRlVmlzaWJsZVBvc2l0aW9uKGludCBvZmZzZXQsIEVB
ZmZpbml0eSBhZmZpbmkKICAgICAgICAgICAgIGlmIChjYW5kaWRhdGUubm9kZSgpLT5pc0NvbnRl
bnRFZGl0YWJsZSgpKQogICAgICAgICAgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oY2Fu
ZGlkYXRlLCBhZmZpbml0eSk7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIFZpc2libGVQb3Np
dGlvbihub2RlLCBvZmZzZXQsIGFmZmluaXR5KTsKKyAgICAgICAgcmV0dXJuIFZpc2libGVQb3Np
dGlvbihQb3NpdGlvbihub2RlLCBvZmZzZXQpLCBhZmZpbml0eSk7CiAgICAgfQogCiAgICAgLy8g
V2UgZG9uJ3Qgd2FudCB0byBjcm9zcyB0aGUgYm91bmRhcnkgYmV0d2VlbiBlZGl0YWJsZSBhbmQg
bm9uLWVkaXRhYmxlCkBAIC0yNjQ0LDcgKzI2NDQsNyBAQCBWaXNpYmxlUG9zaXRpb24gUmVuZGVy
T2JqZWN0OjpjcmVhdGVWaXNpYmxlUG9zaXRpb24oaW50IG9mZnNldCwgRUFmZmluaXR5IGFmZmlu
aQogICAgICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gY2hpbGQ7CiAgICAgICAgIHdoaWxl
ICgocmVuZGVyZXIgPSByZW5kZXJlci0+bmV4dEluUHJlT3JkZXIocGFyZW50KSkpIHsKICAgICAg
ICAgICAgIGlmIChOb2RlKiBub2RlID0gcmVuZGVyZXItPm5vZGUoKSkKLSAgICAgICAgICAgICAg
ICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKG5vZGUsIDAsIERPV05TVFJFQU0pOworICAgICAgICAg
ICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oZmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2Rl
KG5vZGUpLCBET1dOU1RSRUFNKTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIEZpbmQgbm9uLWFu
b255bW91cyBjb250ZW50IGJlZm9yZS4KQEAgLTI2NTMsMTIgKzI2NTMsMTIgQEAgVmlzaWJsZVBv
c2l0aW9uIFJlbmRlck9iamVjdDo6Y3JlYXRlVmlzaWJsZVBvc2l0aW9uKGludCBvZmZzZXQsIEVB
ZmZpbml0eSBhZmZpbmkKICAgICAgICAgICAgIGlmIChyZW5kZXJlciA9PSBwYXJlbnQpCiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBpZiAoTm9kZSogbm9kZSA9IHJlbmRlcmVy
LT5ub2RlKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihsYXN0RGVl
cEVkaXRpbmdQb3NpdGlvbkZvck5vZGUobm9kZSksIERPV05TVFJFQU0pOworICAgICAgICAgICAg
ICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24obGFzdFBvc2l0aW9uSW5PckFmdGVyTm9kZShub2Rl
KSwgRE9XTlNUUkVBTSk7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBVc2UgdGhlIHBhcmVudCBp
dHNlbGYgdW5sZXNzIGl0IHRvbyBpcyBhbm9ueW1vdXMuCiAgICAgICAgIGlmIChOb2RlKiBub2Rl
ID0gcGFyZW50LT5ub2RlKCkpCi0gICAgICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKG5v
ZGUsIDAsIERPV05TVFJFQU0pOworICAgICAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihm
aXJzdFBvc2l0aW9uSW5PckJlZm9yZU5vZGUobm9kZSksIERPV05TVFJFQU0pOwogCiAgICAgICAg
IC8vIFJlcGVhdCBhdCB0aGUgbmV4dCBsZXZlbCB1cC4KICAgICAgICAgY2hpbGQgPSBwYXJlbnQ7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmNwcAppbmRl
eCA5MWVkMjYyLi42ZjFlYzk4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGV4dENvbnRyb2wuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUZXh0Q29udHJvbC5jcHAKQEAgLTMyMSw3ICszMjEsNyBAQCBQYXNzUmVmUHRyPFJhbmdlPiBS
ZW5kZXJUZXh0Q29udHJvbDo6c2VsZWN0aW9uKGludCBzdGFydCwgaW50IGVuZCkgY29uc3QKIFZp
c2libGVQb3NpdGlvbiBSZW5kZXJUZXh0Q29udHJvbDo6dmlzaWJsZVBvc2l0aW9uRm9ySW5kZXgo
aW50IGluZGV4KSBjb25zdAogewogICAgIGlmIChpbmRleCA8PSAwKQotICAgICAgICByZXR1cm4g
VmlzaWJsZVBvc2l0aW9uKG1faW5uZXJUZXh0LmdldCgpLCAwLCBET1dOU1RSRUFNKTsKKyAgICAg
ICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihQb3NpdGlvbihtX2lubmVyVGV4dC5nZXQoKSwgMCwg
UG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvciksIERPV05TVFJFQU0pOwogICAgIEV4
Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBSYW5nZTo6Y3Jl
YXRlKGRvY3VtZW50KCkpOwogICAgIHJhbmdlLT5zZWxlY3ROb2RlQ29udGVudHMobV9pbm5lclRl
eHQuZ2V0KCksIGVjKTsKQEAgLTMzMiw3ICszMzIsNyBAQCBWaXNpYmxlUG9zaXRpb24gUmVuZGVy
VGV4dENvbnRyb2w6OnZpc2libGVQb3NpdGlvbkZvckluZGV4KGludCBpbmRleCkgY29uc3QKICAg
ICBBU1NFUlQoIWVjKTsKICAgICBpbnQgZW5kT2Zmc2V0ID0gaXQucmFuZ2UoKS0+ZW5kT2Zmc2V0
KGVjKTsKICAgICBBU1NFUlQoIWVjKTsKLSAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKGVuZENv
bnRhaW5lciwgZW5kT2Zmc2V0LCBVUFNUUkVBTSk7CisgICAgcmV0dXJuIFZpc2libGVQb3NpdGlv
bihQb3NpdGlvbihlbmRDb250YWluZXIsIGVuZE9mZnNldCwgUG9zaXRpb246OlBvc2l0aW9uSXNP
ZmZzZXRJbkFuY2hvciksIFVQU1RSRUFNKTsKIH0KIAogaW50IFJlbmRlclRleHRDb250cm9sOjpp
bmRleEZvclZpc2libGVQb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mIHBvcykgY29uc3QK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUZXh0Q29udGVudEVsZW1lbnQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RleHRDb250ZW50RWxlbWVudC5jcHAKaW5kZXggZjcy
M2VjYy4uMTkyYzUzMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RleHRDb250
ZW50RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RleHRDb250ZW50RWxl
bWVudC5jcHAKQEAgLTE0NSw3ICsxNDUsNyBAQCB2b2lkIFNWR1RleHRDb250ZW50RWxlbWVudDo6
c2VsZWN0U3ViU3RyaW5nKHVuc2lnbmVkIGNoYXJudW0sIHVuc2lnbmVkIG5jaGFycywgRQogICAg
ICAgICByZXR1cm47CiAKICAgICAvLyBGaW5kIHNlbGVjdGlvbiBzdGFydAotICAgIFZpc2libGVQ
b3NpdGlvbiBzdGFydChjb25zdF9jYXN0PFNWR1RleHRDb250ZW50RWxlbWVudCo+KHRoaXMpLCAw
LCBTRUxfREVGQVVMVF9BRkZJTklUWSk7CisgICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0KFBvc2l0
aW9uKGNvbnN0X2Nhc3Q8U1ZHVGV4dENvbnRlbnRFbGVtZW50Kj4odGhpcyksIDAsIFBvc2l0aW9u
OjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3IpLCBTRUxfREVGQVVMVF9BRkZJTklUWSk7CiAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNoYXJudW07ICsraSkKICAgICAgICAgc3RhcnQgPSBz
dGFydC5uZXh0KCk7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>81280</attachid>
            <date>2011-02-04 13:49:48 -0800</date>
            <delta_ts>2011-02-04 16:16:50 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-52919-20110204134947.patch</filename>
            <type>text/plain</type>
            <size>41366</size>
            <attacher name="Levi Weintraub">leviw</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc3NjY4KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsODEgQEAKKzIwMTEtMDItMDQgIExldmkgV2Vp
bnRyYXViICA8bGV2aXdAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFN0b3AgaW5zdGFudGlhdGluZyBsZWdhY3kgZWRpdGluZyBQ
b3NpdGlvbnMgaW4gVmlzaWJsZVBvc2l0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD01MjkxOQorCisgICAgICAgIENoYW5naW5nIFZpc2libGVQb3Np
dGlvbiBjb21wbGV0ZWx5IGF3YXkgZnJvbSBsZWdhY3kgcG9zaXRpb25zLgorCisgICAgICAgIE5v
IG5ldyB0ZXN0cyBzaW5jZSB0aGlzIGlzIGZ1bmN0aW9uYWx5IGVxdWl2YWxlbnQuCisKKyAgICAg
ICAgKiBXZWJDb3JlLmV4cC5pbjogUmVtb3ZpbmcgdGhlIGxlZ2FjeSBWaXNpYmxlUG9zaXRpb24g
Y29udHJ1Y3RvciBhbmQKKyAgICAgICAgYWRkaW5nIHRoZSBQb3NpdGlvbklzT2Zmc2V0SW5BbmNo
b3Igc3ltYm9sLiBJZiB3ZSBtdXN0IGNyZWF0ZSBWaXNpYmxlUG9zaXRpb25zCisgICAgICAgIGZy
b20gV2ViS2l0LCB0aGlzIHNob3VsZCBiZSB0aGUgb25seSB0eXBlIGFsbG93ZWQuCisgICAgICAg
ICogYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFY
T2JqZWN0Q2FjaGU6OnZpc2libGVQb3NpdGlvbkZvclRleHRNYXJrZXJEYXRhKToKKyAgICAgICAg
KiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6c3RhcnRPZlN0eWxlUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6ZW5kT2ZTdHlsZVJhbmdl
KToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6dmlzaWJsZVBv
c2l0aW9uRm9ySW5kZXgpOgorICAgICAgICAqIGRvbS9SYW5nZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSYW5nZTo6ZWRpdGluZ1N0YXJ0UG9zaXRpb24pOgorICAgICAgICAqIGVkaXRpbmcvRWRp
dG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Y2FuRGVsZXRlUmFuZ2UpOgorICAg
ICAgICAqIGVkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OmRvQXBwbHkpOgorICAgICAgICAqIGVkaXRp
bmcvU2VsZWN0aW9uQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb25D
b250cm9sbGVyOjpzZWxlY3RGcmFtZUVsZW1lbnRJblBhcmVudElmRnVsbHlTZWxlY3RlZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb25Db250cm9sbGVyOjpzZXRTZWxlY3RlZFJhbmdlKToK
KyAgICAgICAgKiBlZGl0aW5nL1RleHRJdGVyYXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpU
ZXh0SXRlcmF0b3I6OnNob3VsZFJlcHJlc2VudE5vZGVPZmZzZXRaZXJvKToKKyAgICAgICAgKiBl
ZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWaXNpYmxlUG9z
aXRpb246OmxlZnRWaXN1YWxseURpc3RpbmN0Q2FuZGlkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OlZpc2libGVQb3NpdGlvbjo6cmlnaHRWaXN1YWxseURpc3RpbmN0Q2FuZGlkYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlZpc2libGVQb3NpdGlvbjo6Y2Fub25pY2FsUG9zaXRpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6VmlzaWJsZVBvc2l0aW9uOjpjaGFyYWN0ZXJBZnRlcik6CisgICAgICAgIChX
ZWJDb3JlOjpWaXNpYmxlUG9zaXRpb246OmxvY2FsQ2FyZXRSZWN0KToKKyAgICAgICAgKFdlYkNv
cmU6Om1ha2VSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpzdGFydFZpc2libGVQb3NpdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjplbmRWaXNpYmxlUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6c2V0U3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6c2V0RW5kKToKKyAgICAgICAgKFdlYkNv
cmU6OmlzRmlyc3RWaXNpYmxlUG9zaXRpb25Jbk5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6aXNM
YXN0VmlzaWJsZVBvc2l0aW9uSW5Ob2RlKToKKyAgICAgICAgKiBlZGl0aW5nL1Zpc2libGVQb3Np
dGlvbi5oOgorICAgICAgICAoV2ViQ29yZTo6VmlzaWJsZVBvc2l0aW9uOjpWaXNpYmxlUG9zaXRp
b24pOgorICAgICAgICAqIGVkaXRpbmcvaHRtbGVkaXRpbmcuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Zmlyc3RJblNwZWNpYWxFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6Omxhc3RJblNwZWNp
YWxFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OnZpc2libGVQb3NpdGlvbkJlZm9yZU5vZGUp
OgorICAgICAgICAoV2ViQ29yZTo6dmlzaWJsZVBvc2l0aW9uQWZ0ZXJOb2RlKToKKyAgICAgICAg
KiBlZGl0aW5nL3Zpc2libGVfdW5pdHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6c3RhcnRQb3Np
dGlvbkZvckxpbmUpOgorICAgICAgICAoV2ViQ29yZTo6ZW5kUG9zaXRpb25Gb3JMaW5lKToKKyAg
ICAgICAgKFdlYkNvcmU6OnByZXZpb3VzTGluZVBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
Om5leHRMaW5lUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6c3RhcnRPZlBhcmFncmFwaCk6
CisgICAgICAgIChXZWJDb3JlOjplbmRPZlBhcmFncmFwaCk6CisgICAgICAgIChXZWJDb3JlOjpl
bmRPZkJsb2NrKToKKyAgICAgICAgKFdlYkNvcmU6OnN0YXJ0T2ZEb2N1bWVudCk6CisgICAgICAg
IChXZWJDb3JlOjplbmRPZkRvY3VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OmxvZ2ljYWxTdGFy
dFBvc2l0aW9uRm9yTGluZSk6CisgICAgICAgIChXZWJDb3JlOjpsb2dpY2FsRW5kUG9zaXRpb25G
b3JMaW5lKToKKyAgICAgICAgKiBwYWdlL0RPTVNlbGVjdGlvbi5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpET01TZWxlY3Rpb246OmNvbGxhcHNlKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTVNlbGVj
dGlvbjo6c2V0QmFzZUFuZEV4dGVudCk6CisgICAgICAgIChXZWJDb3JlOjpET01TZWxlY3Rpb246
OnNldFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTVNlbGVjdGlvbjo6ZXh0ZW5kKToK
KyAgICAgICAgKiBwYWdlL0V2ZW50SGFuZGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFdmVu
dEhhbmRsZXI6OmhhbmRsZU1vdXNlUHJlc3NFdmVudFNpbmdsZUNsaWNrKToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVj
dDo6Y3JlYXRlVmlzaWJsZVBvc2l0aW9uKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4
dENvbnRyb2wuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2w6OnZpc2li
bGVQb3NpdGlvbkZvckluZGV4KToKKyAgICAgICAgKiBzdmcvU1ZHVGV4dENvbnRlbnRFbGVtZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRDb250ZW50RWxlbWVudDo6c2VsZWN0U3Vi
U3RyaW5nKToKKwogMjAxMS0wMi0wNCAgRGFuIEJlcm5zdGVpbiAgPG1pdHpAYXBwbGUuY29tPgog
CiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyIGFuZCBEYXZlIEh5YXR0LgpJbmRleDog
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvV2ViQ29yZS5leHAuaW4JKHJldmlzaW9uIDc3MzgwKQorKysgU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS5leHAuaW4JKHdvcmtpbmcgY29weSkKQEAgLTM5OCw3ICszOTgsNiBAQCBfX1pON1dlYkNv
cmUxNVNjcm9sbEFsaWdubWVudDE5YWxpZ25Ub0VkCiBfX1pON1dlYkNvcmUxNVN0cmluZ1RydW5j
YXRvcjEzcmlnaHRUcnVuY2F0ZUVSS04zV1RGNlN0cmluZ0VmUktOU180Rm9udEViCiBfX1pON1dl
YkNvcmUxNVN0cmluZ1RydW5jYXRvcjE0Y2VudGVyVHJ1bmNhdGVFUktOM1dURjZTdHJpbmdFZlJL
TlNfNEZvbnRFYgogX19aTjdXZWJDb3JlMTVTdHJpbmdUcnVuY2F0b3I1d2lkdGhFUktOM1dURjZT
dHJpbmdFUktOU180Rm9udEViCi1fX1pON1dlYkNvcmUxNVZpc2libGVQb3NpdGlvbkMxRVBOU180
Tm9kZUVpTlNfOUVBZmZpbml0eUUKIF9fWk43V2ViQ29yZTE1VmlzaWJsZVBvc2l0aW9uQzFFUktO
U184UG9zaXRpb25FTlNfOUVBZmZpbml0eUUKIF9fWk43V2ViQ29yZTE1ZGVmYXVsdExhbmd1YWdl
RXYKIF9fWk43V2ViQ29yZTE1cmVwb3J0RXhjZXB0aW9uRVBOM0pTQzlFeGVjU3RhdGVFTlMwXzdK
U1ZhbHVlRQpAQCAtNzgwLDYgKzc3OSw3IEBAIF9fWk43V2ViQ29yZThHcmFkaWVudDEyYWRkQ29s
b3JTdG9wRWZSS04KIF9fWk43V2ViQ29yZThHcmFkaWVudEMxRVJLTlNfMTBGbG9hdFBvaW50RVMz
XwogX19aTjdXZWJDb3JlOEludFBvaW50QzFFUks4X05TUG9pbnQKIF9fWk43V2ViQ29yZThQb3Np
dGlvbkMxRU4zV1RGMTBQYXNzUmVmUHRySU5TXzROb2RlRUVFaQorX19aTjdXZWJDb3JlOFBvc2l0
aW9uQzFFTjNXVEYxMFBhc3NSZWZQdHJJTlNfNE5vZGVFRUVpTlMwXzEwQW5jaG9yVHlwZUUKIF9f
Wk43V2ViQ29yZThTZXR0aW5nczE0c2V0SmF2YUVuYWJsZWRFYgogX19aTjdXZWJDb3JlOFNldHRp
bmdzMTVzZXRXZWJHTEVuYWJsZWRFYgogX19aTjdXZWJDb3JlOFNldHRpbmdzMTZzZXRVc2VzUGFn
ZUNhY2hlRWIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNo
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVj
dENhY2hlLmNwcAkocmV2aXNpb24gNzczODApCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L0FYT2JqZWN0Q2FjaGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NzMsNyArNTczLDcgQEAg
VmlzaWJsZVBvc2l0aW9uIEFYT2JqZWN0Q2FjaGU6OnZpc2libGVQbwogICAgIGlmICghaXNOb2Rl
SW5Vc2UodGV4dE1hcmtlckRhdGEubm9kZSkpCiAgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRp
b24oKTsKICAgICAKLSAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvcyA9IFZpc2libGVQb3Np
dGlvbih0ZXh0TWFya2VyRGF0YS5ub2RlLCB0ZXh0TWFya2VyRGF0YS5vZmZzZXQsIHRleHRNYXJr
ZXJEYXRhLmFmZmluaXR5KTsKKyAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvcyA9IFZpc2li
bGVQb3NpdGlvbihQb3NpdGlvbih0ZXh0TWFya2VyRGF0YS5ub2RlLCB0ZXh0TWFya2VyRGF0YS5v
ZmZzZXQsIFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3IpLCB0ZXh0TWFya2VyRGF0
YS5hZmZpbml0eSk7CiAgICAgUG9zaXRpb24gZGVlcFBvcyA9IHZpc2libGVQb3MuZGVlcEVxdWl2
YWxlbnQoKTsKICAgICBpZiAoZGVlcFBvcy5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIFZpc2li
bGVQb3NpdGlvbigpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3Np
YmlsaXR5T2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCShyZXZpc2lvbiA3NzM4MCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMzNiw3ICszMzYsNyBAQCBzdGF0aWMgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0T2ZTdHls
ZVJhbmdlCiAgICAgICAgIHN0YXJ0UmVuZGVyZXIgPSByOwogICAgIH0KIAotICAgIHJldHVybiBW
aXNpYmxlUG9zaXRpb24oc3RhcnRSZW5kZXJlci0+bm9kZSgpLCAwLCBWUF9ERUZBVUxUX0FGRklO
SVRZKTsKKyAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKGZpcnN0UG9zaXRpb25Jbk9yQmVmb3Jl
Tm9kZShzdGFydFJlbmRlcmVyLT5ub2RlKCkpLCBWUF9ERUZBVUxUX0FGRklOSVRZKTsKIH0KIAog
c3RhdGljIFZpc2libGVQb3NpdGlvbiBlbmRPZlN0eWxlUmFuZ2UoY29uc3QgVmlzaWJsZVBvc2l0
aW9uJiB2aXNpYmxlUG9zKQpAQCAtMzU5LDcgKzM1OSw3IEBAIHN0YXRpYyBWaXNpYmxlUG9zaXRp
b24gZW5kT2ZTdHlsZVJhbmdlKGMKICAgICAgICAgZW5kUmVuZGVyZXIgPSByOwogICAgIH0KIAot
ICAgIHJldHVybiBsYXN0RGVlcEVkaXRpbmdQb3NpdGlvbkZvck5vZGUoZW5kUmVuZGVyZXItPm5v
ZGUoKSk7CisgICAgcmV0dXJuIGxhc3RQb3NpdGlvbkluT3JBZnRlck5vZGUoZW5kUmVuZGVyZXIt
Pm5vZGUoKSk7CiB9CiAKIFZpc2libGVQb3NpdGlvblJhbmdlIEFjY2Vzc2liaWxpdHlPYmplY3Q6
OnN0eWxlUmFuZ2VGb3JQb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mIHZpc2libGVQb3Mp
IGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlS
ZW5kZXJPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAJKHJldmlzaW9uIDc3MzgwKQorKysgU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjQ1OSwxNCArMjQ1OSwxNCBAQCBWaXNpYmxlUG9zaXRpb24gQWNj
ZXNzaWJpbGl0eVJlbmRlck9iamVjCiAgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oKTsK
ICAgICAKICAgICBpZiAoaW5kZXggPD0gMCkKLSAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlv
bihub2RlLCAwLCBET1dOU1RSRUFNKTsKKyAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihm
aXJzdFBvc2l0aW9uSW5PckJlZm9yZU5vZGUobm9kZSksIERPV05TVFJFQU0pOwogICAgIAogICAg
IEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBSYW5nZTo6
Y3JlYXRlKG1fcmVuZGVyZXItPmRvY3VtZW50KCkpOwogICAgIHJhbmdlLT5zZWxlY3ROb2RlQ29u
dGVudHMobm9kZSwgZWMpOwogICAgIENoYXJhY3Rlckl0ZXJhdG9yIGl0KHJhbmdlLmdldCgpKTsK
ICAgICBpdC5hZHZhbmNlKGluZGV4IC0gMSk7Ci0gICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihp
dC5yYW5nZSgpLT5lbmRDb250YWluZXIoZWMpLCBpdC5yYW5nZSgpLT5lbmRPZmZzZXQoZWMpLCBV
UFNUUkVBTSk7CisgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihQb3NpdGlvbihpdC5yYW5nZSgp
LT5lbmRDb250YWluZXIoZWMpLCBpdC5yYW5nZSgpLT5lbmRPZmZzZXQoZWMpLCBQb3NpdGlvbjo6
UG9zaXRpb25Jc09mZnNldEluQW5jaG9yKSwgVVBTVFJFQU0pOwogfQogICAgIAogaW50IEFjY2Vz
c2liaWxpdHlSZW5kZXJPYmplY3Q6OmluZGV4Rm9yVmlzaWJsZVBvc2l0aW9uKGNvbnN0IFZpc2li
bGVQb3NpdGlvbiYgcG9zKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuY3BwCShyZXZpc2lvbiA3
NzM4MCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE1NzAsNyArMTU3MCw3IEBAIFBvc2l0aW9uIFJhbmdlOjplZGl0aW5nU3RhcnRQb3NpdGlvbigp
IGMKICAgICAvLyBJdCBpcyBpbXBvcnRhbnQgdG8gc2tpcCBjZXJ0YWluIGlycmVsZXZhbnQgY29u
dGVudCBhdCB0aGUgc3RhcnQgb2YgdGhlIHNlbGVjdGlvbiwgc28gd2UgZG8gbm90IHdpbmQgdXAg
CiAgICAgLy8gd2l0aCBhIHNwdXJpb3VzICJtaXhlZCIgc3R5bGUuCiAgICAgCi0gICAgVmlzaWJs
ZVBvc2l0aW9uIHZpc2libGVQb3NpdGlvbihtX3N0YXJ0LmNvbnRhaW5lcigpLCBtX3N0YXJ0Lm9m
ZnNldCgpLCBWUF9ERUZBVUxUX0FGRklOSVRZKTsKKyAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJs
ZVBvc2l0aW9uKFBvc2l0aW9uKG1fc3RhcnQuY29udGFpbmVyKCksIG1fc3RhcnQub2Zmc2V0KCks
IFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3IpLCBWUF9ERUZBVUxUX0FGRklOSVRZ
KTsKICAgICBpZiAodmlzaWJsZVBvc2l0aW9uLmlzTnVsbCgpKQogICAgICAgICByZXR1cm4gUG9z
aXRpb24oKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAkocmV2aXNpb24gNzcz
ODApCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI5MCw3ICsyOTAsNyBAQCBib29sIEVkaXRvcjo6Y2FuRGVsZXRlUmFuZ2UoUmFuZ2UqIHJh
bmdlCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKICAgICBpZiAocmFuZ2UtPmNvbGxhcHNl
ZChlYykpIHsKLSAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0KHN0YXJ0Q29udGFpbmVyLCBy
YW5nZS0+c3RhcnRPZmZzZXQoZWMpLCBET1dOU1RSRUFNKTsKKyAgICAgICAgVmlzaWJsZVBvc2l0
aW9uIHN0YXJ0KFBvc2l0aW9uKHN0YXJ0Q29udGFpbmVyLCByYW5nZS0+c3RhcnRPZmZzZXQoZWMp
LCBQb3NpdGlvbjo6UG9zaXRpb25Jc09mZnNldEluQW5jaG9yKSwgRE9XTlNUUkVBTSk7CiAgICAg
ICAgIFZpc2libGVQb3NpdGlvbiBwcmV2aW91cyA9IHN0YXJ0LnByZXZpb3VzKCk7CiAgICAgICAg
IC8vIEZJWE1FOiBXZSBzb21ldGltZXMgYWxsb3cgZGVsZXRpb25zIGF0IHRoZSBzdGFydCBvZiBl
ZGl0YWJsZSByb290cywgbGlrZSB3aGVuIHRoZSBjYXJldCBpcyBpbiBhbiBlbXB0eSBsaXN0IGl0
ZW0uCiAgICAgICAgIGlmIChwcmV2aW91cy5pc051bGwoKSB8fCBwcmV2aW91cy5kZWVwRXF1aXZh
bGVudCgpLm5vZGUoKS0+cm9vdEVkaXRhYmxlRWxlbWVudCgpICE9IHN0YXJ0Q29udGFpbmVyLT5y
b290RWRpdGFibGVFbGVtZW50KCkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxh
Y2VTZWxlY3Rpb25Db21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcAkocmV2aXNpb24gNzczODApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtODg0LDcgKzg4NCw3IEBAIHZvaWQgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OmRv
QXBwbHkoKQogICAgIE5vZGUqIGVuZEJSID0gaW5zZXJ0aW9uUG9zLmRvd25zdHJlYW0oKS5ub2Rl
KCktPmhhc1RhZ05hbWUoYnJUYWcpID8gaW5zZXJ0aW9uUG9zLmRvd25zdHJlYW0oKS5ub2RlKCkg
OiAwOwogICAgIFZpc2libGVQb3NpdGlvbiBvcmlnaW5hbFZpc1Bvc0JlZm9yZUVuZEJSOwogICAg
IGlmIChlbmRCUikKLSAgICAgICAgb3JpZ2luYWxWaXNQb3NCZWZvcmVFbmRCUiA9IFZpc2libGVQ
b3NpdGlvbihlbmRCUiwgMCwgRE9XTlNUUkVBTSkucHJldmlvdXMoKTsKKyAgICAgICAgb3JpZ2lu
YWxWaXNQb3NCZWZvcmVFbmRCUiA9IFZpc2libGVQb3NpdGlvbihQb3NpdGlvbihlbmRCUiwgUG9z
aXRpb246OlBvc2l0aW9uSXNCZWZvcmVBbmNob3IpLCBET1dOU1RSRUFNKS5wcmV2aW91cygpOwog
ICAgIAogICAgIHN0YXJ0QmxvY2sgPSBlbmNsb3NpbmdCbG9jayhpbnNlcnRpb25Qb3Mubm9kZSgp
KTsKICAgICAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU2VsZWN0aW9uQ29udHJvbGxl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9TZWxlY3Rpb25Db250
cm9sbGVyLmNwcAkocmV2aXNpb24gNzczODApCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Nl
bGVjdGlvbkNvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzE1LDggKzEzMTUsOCBA
QCB2b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6OnNlbGVjdEZyYW1lRWxlCiAKICAgICAvLyBDcmVh
dGUgY29tcHV0ZSBwb3NpdGlvbnMgYmVmb3JlIGFuZCBhZnRlciB0aGUgZWxlbWVudC4KICAgICB1
bnNpZ25lZCBvd25lckVsZW1lbnROb2RlSW5kZXggPSBvd25lckVsZW1lbnQtPm5vZGVJbmRleCgp
OwotICAgIFZpc2libGVQb3NpdGlvbiBiZWZvcmVPd25lckVsZW1lbnQoVmlzaWJsZVBvc2l0aW9u
KG93bmVyRWxlbWVudFBhcmVudCwgb3duZXJFbGVtZW50Tm9kZUluZGV4LCBTRUxfREVGQVVMVF9B
RkZJTklUWSkpOwotICAgIFZpc2libGVQb3NpdGlvbiBhZnRlck93bmVyRWxlbWVudChWaXNpYmxl
UG9zaXRpb24ob3duZXJFbGVtZW50UGFyZW50LCBvd25lckVsZW1lbnROb2RlSW5kZXggKyAxLCBW
UF9VUFNUUkVBTV9JRl9QT1NTSUJMRSkpOworICAgIFZpc2libGVQb3NpdGlvbiBiZWZvcmVPd25l
ckVsZW1lbnQoVmlzaWJsZVBvc2l0aW9uKFBvc2l0aW9uKG93bmVyRWxlbWVudFBhcmVudCwgb3du
ZXJFbGVtZW50Tm9kZUluZGV4LCBQb3NpdGlvbjo6UG9zaXRpb25Jc09mZnNldEluQW5jaG9yKSwg
U0VMX0RFRkFVTFRfQUZGSU5JVFkpKTsKKyAgICBWaXNpYmxlUG9zaXRpb24gYWZ0ZXJPd25lckVs
ZW1lbnQoVmlzaWJsZVBvc2l0aW9uKFBvc2l0aW9uKG93bmVyRWxlbWVudFBhcmVudCwgb3duZXJF
bGVtZW50Tm9kZUluZGV4ICsgMSwgUG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvciks
IFZQX1VQU1RSRUFNX0lGX1BPU1NJQkxFKSk7CiAKICAgICAvLyBGb2N1cyBvbiB0aGUgcGFyZW50
IGZyYW1lLCBhbmQgdGhlbiBzZWxlY3QgZnJvbSBiZWZvcmUgdGhpcyBlbGVtZW50IHRvIGFmdGVy
LgogICAgIFZpc2libGVTZWxlY3Rpb24gbmV3U2VsZWN0aW9uKGJlZm9yZU93bmVyRWxlbWVudCwg
YWZ0ZXJPd25lckVsZW1lbnQpOwpAQCAtMTM4Nyw4ICsxMzg3LDggQEAgYm9vbCBTZWxlY3Rpb25D
b250cm9sbGVyOjpzZXRTZWxlY3RlZFJhbgogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCiAg
ICAgLy8gRklYTUU6IENhbiB3ZSBwcm92aWRlIGV4dGVudEFmZmluaXR5PwotICAgIFZpc2libGVQ
b3NpdGlvbiB2aXNpYmxlU3RhcnQoc3RhcnRDb250YWluZXIsIHN0YXJ0T2Zmc2V0LCBjb2xsYXBz
ZWQgPyBhZmZpbml0eSA6IERPV05TVFJFQU0pOwotICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxl
RW5kKGVuZENvbnRhaW5lciwgZW5kT2Zmc2V0LCBTRUxfREVGQVVMVF9BRkZJTklUWSk7CisgICAg
VmlzaWJsZVBvc2l0aW9uIHZpc2libGVTdGFydChQb3NpdGlvbihzdGFydENvbnRhaW5lciwgc3Rh
cnRPZmZzZXQsIFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3IpLCBjb2xsYXBzZWQg
PyBhZmZpbml0eSA6IERPV05TVFJFQU0pOworICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlRW5k
KFBvc2l0aW9uKGVuZENvbnRhaW5lciwgZW5kT2Zmc2V0LCBQb3NpdGlvbjo6UG9zaXRpb25Jc09m
ZnNldEluQW5jaG9yKSwgU0VMX0RFRkFVTFRfQUZGSU5JVFkpOwogICAgIHNldFNlbGVjdGlvbihW
aXNpYmxlU2VsZWN0aW9uKHZpc2libGVTdGFydCwgdmlzaWJsZUVuZCksIGNsb3NlVHlwaW5nKTsK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0
ZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVy
YXRvci5jcHAJKHJldmlzaW9uIDc3MzgwKQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0
SXRlcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NzgsOCArODc4LDggQEAgYm9vbCBUZXh0
SXRlcmF0b3I6OnNob3VsZFJlcHJlc2VudE5vZGVPZgogICAgIC8vIGFuZCBpbiB0aGF0IGNhc2Ug
d2UnbGwgZ2V0IG51bGwuIFdlIGRvbid0IHdhbnQgdG8gcHV0IGluIG5ld2xpbmVzIGF0IHRoZSBz
dGFydCBpbiB0aGF0IGNhc2UuCiAgICAgLy8gVGhlIGN1cnJQb3MuaXNOb3ROdWxsKCkgY2hlY2sg
aXMgbmVlZGVkIGJlY2F1c2UgcG9zaXRpb25zIGluIG5vbi1IVE1MIGNvbnRlbnQKICAgICAvLyAo
bGlrZSBTVkcpIGRvIG5vdCBoYXZlIHZpc2libGUgcG9zaXRpb25zLCBhbmQgd2UgZG9uJ3Qgd2Fu
dCB0byBlbWl0IGZvciB0aGVtIGVpdGhlci4KLSAgICBWaXNpYmxlUG9zaXRpb24gc3RhcnRQb3Mg
PSBWaXNpYmxlUG9zaXRpb24obV9zdGFydENvbnRhaW5lciwgbV9zdGFydE9mZnNldCwgRE9XTlNU
UkVBTSk7Ci0gICAgVmlzaWJsZVBvc2l0aW9uIGN1cnJQb3MgPSBWaXNpYmxlUG9zaXRpb24obV9u
b2RlLCAwLCBET1dOU1RSRUFNKTsKKyAgICBWaXNpYmxlUG9zaXRpb24gc3RhcnRQb3MgPSBWaXNp
YmxlUG9zaXRpb24oUG9zaXRpb24obV9zdGFydENvbnRhaW5lciwgbV9zdGFydE9mZnNldCwgUG9z
aXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvciksIERPV05TVFJFQU0pOworICAgIFZpc2li
bGVQb3NpdGlvbiBjdXJyUG9zID0gVmlzaWJsZVBvc2l0aW9uKFBvc2l0aW9uKG1fbm9kZSwgUG9z
aXRpb246OlBvc2l0aW9uSXNCZWZvcmVBbmNob3IpLCBET1dOU1RSRUFNKTsKICAgICByZXR1cm4g
c3RhcnRQb3MuaXNOb3ROdWxsKCkgJiYgY3VyclBvcy5pc05vdE51bGwoKSAmJiAhaW5TYW1lTGlu
ZShzdGFydFBvcywgY3VyclBvcyk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
VmlzaWJsZVBvc2l0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L1Zpc2libGVQb3NpdGlvbi5jcHAJKHJldmlzaW9uIDc3MzgwKQorKysgU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9WaXNpYmxlUG9zaXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OCwxMiArNDgs
NiBAQCBWaXNpYmxlUG9zaXRpb246OlZpc2libGVQb3NpdGlvbihjb25zdCBQCiAgICAgaW5pdChw
b3MsIGFmZmluaXR5KTsKIH0KIAotVmlzaWJsZVBvc2l0aW9uOjpWaXNpYmxlUG9zaXRpb24oTm9k
ZSAqbm9kZSwgaW50IG9mZnNldCwgRUFmZmluaXR5IGFmZmluaXR5KQotewotICAgIEFTU0VSVChv
ZmZzZXQgPj0gMCk7Ci0gICAgaW5pdChQb3NpdGlvbihub2RlLCBvZmZzZXQpLCBhZmZpbml0eSk7
Ci19Ci0KIHZvaWQgVmlzaWJsZVBvc2l0aW9uOjppbml0KGNvbnN0IFBvc2l0aW9uJiBwb3NpdGlv
biwgRUFmZmluaXR5IGFmZmluaXR5KQogewogICAgIG1fYWZmaW5pdHkgPSBhZmZpbml0eTsKQEAg
LTEwNiw3ICsxMDAsNyBAQCBWaXNpYmxlUG9zaXRpb24gVmlzaWJsZVBvc2l0aW9uOjpwcmV2aW91
CiBQb3NpdGlvbiBWaXNpYmxlUG9zaXRpb246OmxlZnRWaXN1YWxseURpc3RpbmN0Q2FuZGlkYXRl
KCkgY29uc3QKIHsKICAgICBQb3NpdGlvbiBwID0gbV9kZWVwUG9zaXRpb247Ci0gICAgaWYgKCFw
Lm5vZGUoKSkKKyAgICBpZiAocC5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIFBvc2l0aW9uKCk7
CiAKICAgICBQb3NpdGlvbiBkb3duc3RyZWFtU3RhcnQgPSBwLmRvd25zdHJlYW0oKTsKQEAgLTI0
Miw3ICsyMzYsNyBAQCBWaXNpYmxlUG9zaXRpb24gVmlzaWJsZVBvc2l0aW9uOjpsZWZ0KGJvCiBQ
b3NpdGlvbiBWaXNpYmxlUG9zaXRpb246OnJpZ2h0VmlzdWFsbHlEaXN0aW5jdENhbmRpZGF0ZSgp
IGNvbnN0CiB7CiAgICAgUG9zaXRpb24gcCA9IG1fZGVlcFBvc2l0aW9uOwotICAgIGlmICghcC5u
b2RlKCkpCisgICAgaWYgKHAuaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiBQb3NpdGlvbigpOwog
CiAgICAgUG9zaXRpb24gZG93bnN0cmVhbVN0YXJ0ID0gcC5kb3duc3RyZWFtKCk7CkBAIC00NTEs
MTAgKzQ0NSwxMSBAQCBQb3NpdGlvbiBWaXNpYmxlUG9zaXRpb246OmNhbm9uaWNhbFBvc2l0CiAg
ICAgLy8gVG8gZml4IHRoaXMsIHdlIG5lZWQgdG8gZWl0aGVyIGEpIGFkZCBjb2RlIHRvIGFsbCBw
YWludENhcmV0cyB0byBwYXNzIHRoZSByZXNwb25zaWJpbGl0eSBvZmYgdG8KICAgICAvLyB0aGUg
YXBwcm9wcmlhdGUgcmVuZGVyZXIgZm9yIFZpc2libGVQb3NpdGlvbidzIGxpa2UgdGhlc2UsIG9y
IGIpIGNhbm9uaWNhbGl6ZSB0byB0aGUgcmlnaHRtb3N0IGNhbmRpZGF0ZQogICAgIC8vIHVubGVz
cyB0aGUgYWZmaW5pdHkgaXMgdXBzdHJlYW0uCi0gICAgTm9kZSogbm9kZSA9IHBvc2l0aW9uLm5v
ZGUoKTsKLSAgICBpZiAoIW5vZGUpCisgICAgaWYgKHBvc2l0aW9uLmlzTnVsbCgpKQogICAgICAg
ICByZXR1cm4gUG9zaXRpb24oKTsKIAorICAgIE5vZGUqIG5vZGUgPSBwb3NpdGlvbi5jb250YWlu
ZXJOb2RlKCk7CisKICAgICBBU1NFUlQobm9kZS0+ZG9jdW1lbnQoKSk7CiAgICAgbm9kZS0+ZG9j
dW1lbnQoKS0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CiAKQEAgLTUx
MCwxMSArNTA1LDExIEBAIFVDaGFyMzIgVmlzaWJsZVBvc2l0aW9uOjpjaGFyYWN0ZXJBZnRlcigK
ICAgICAvLyBXZSBjYW5vbmljYWxpemUgdG8gdGhlIGZpcnN0IG9mIHR3byBlcXVpdmFsZW50IGNh
bmRpZGF0ZXMsIGJ1dCB0aGUgc2Vjb25kIG9mIHRoZSB0d28gY2FuZGlkYXRlcwogICAgIC8vIGlz
IHRoZSBvbmUgdGhhdCB3aWxsIGJlIGluc2lkZSB0aGUgdGV4dCBub2RlIGNvbnRhaW5pbmcgdGhl
IGNoYXJhY3RlciBhZnRlciB0aGlzIHZpc2libGUgcG9zaXRpb24uCiAgICAgUG9zaXRpb24gcG9z
ID0gbV9kZWVwUG9zaXRpb24uZG93bnN0cmVhbSgpOwotICAgIE5vZGUqIG5vZGUgPSBwb3Mubm9k
ZSgpOworICAgIE5vZGUqIG5vZGUgPSBwb3MuY29udGFpbmVyTm9kZSgpOwogICAgIGlmICghbm9k
ZSB8fCAhbm9kZS0+aXNUZXh0Tm9kZSgpKQogICAgICAgICByZXR1cm4gMDsKLSAgICBUZXh0KiB0
ZXh0Tm9kZSA9IHN0YXRpY19jYXN0PFRleHQqPihwb3Mubm9kZSgpKTsKLSAgICB1bnNpZ25lZCBv
ZmZzZXQgPSBwb3MuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKTsKKyAgICBUZXh0KiB0ZXh0Tm9k
ZSA9IHN0YXRpY19jYXN0PFRleHQqPihwb3MuY29udGFpbmVyTm9kZSgpKTsKKyAgICB1bnNpZ25l
ZCBvZmZzZXQgPSBwb3Mub2Zmc2V0SW5Db250YWluZXJOb2RlKCk7CiAgICAgdW5zaWduZWQgbGVu
Z3RoID0gdGV4dE5vZGUtPmxlbmd0aCgpOwogICAgIGlmIChvZmZzZXQgPj0gbGVuZ3RoKQogICAg
ICAgICByZXR1cm4gMDsKQEAgLTUyNywxMSArNTIyLDExIEBAIFVDaGFyMzIgVmlzaWJsZVBvc2l0
aW9uOjpjaGFyYWN0ZXJBZnRlcigKIAogSW50UmVjdCBWaXNpYmxlUG9zaXRpb246OmxvY2FsQ2Fy
ZXRSZWN0KFJlbmRlck9iamVjdComIHJlbmRlcmVyKSBjb25zdAogewotICAgIE5vZGUqIG5vZGUg
PSBtX2RlZXBQb3NpdGlvbi5ub2RlKCk7Ci0gICAgaWYgKCFub2RlKSB7CisgICAgaWYgKG1fZGVl
cFBvc2l0aW9uLmlzTnVsbCgpKSB7CiAgICAgICAgIHJlbmRlcmVyID0gMDsKICAgICAgICAgcmV0
dXJuIEludFJlY3QoKTsKICAgICB9CisgICAgTm9kZSogbm9kZSA9IG1fZGVlcFBvc2l0aW9uLmNv
bnRhaW5lck5vZGUoKTsKICAgICAKICAgICByZW5kZXJlciA9IG5vZGUtPnJlbmRlcmVyKCk7CiAg
ICAgaWYgKCFyZW5kZXJlcikKQEAgLTU5OSwxOSArNTk0LDE5IEBAIFBhc3NSZWZQdHI8UmFuZ2U+
IG1ha2VSYW5nZShjb25zdCBWaXNpYmwKICAgICAKICAgICBQb3NpdGlvbiBzID0gc3RhcnQuZGVl
cEVxdWl2YWxlbnQoKS5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKTsKICAgICBQb3NpdGlvbiBl
ID0gZW5kLmRlZXBFcXVpdmFsZW50KCkucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCk7Ci0gICAg
cmV0dXJuIFJhbmdlOjpjcmVhdGUocy5ub2RlKCktPmRvY3VtZW50KCksIHMubm9kZSgpLCBzLmRl
cHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCksIGUubm9kZSgpLCBlLmRlcHJlY2F0ZWRFZGl0aW5nT2Zm
c2V0KCkpOworICAgIHJldHVybiBSYW5nZTo6Y3JlYXRlKHMuY29udGFpbmVyTm9kZSgpLT5kb2N1
bWVudCgpLCBzLmNvbnRhaW5lck5vZGUoKSwgcy5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSwgZS5j
b250YWluZXJOb2RlKCksIGUub2Zmc2V0SW5Db250YWluZXJOb2RlKCkpOwogfQogCiBWaXNpYmxl
UG9zaXRpb24gc3RhcnRWaXNpYmxlUG9zaXRpb24oY29uc3QgUmFuZ2UgKnIsIEVBZmZpbml0eSBh
ZmZpbml0eSkKIHsKICAgICBpbnQgZXhjZXB0aW9uID0gMDsKLSAgICByZXR1cm4gVmlzaWJsZVBv
c2l0aW9uKHItPnN0YXJ0Q29udGFpbmVyKGV4Y2VwdGlvbiksIHItPnN0YXJ0T2Zmc2V0KGV4Y2Vw
dGlvbiksIGFmZmluaXR5KTsKKyAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKFBvc2l0aW9uKHIt
PnN0YXJ0Q29udGFpbmVyKGV4Y2VwdGlvbiksIHItPnN0YXJ0T2Zmc2V0KGV4Y2VwdGlvbiksIFBv
c2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3IpLCBhZmZpbml0eSk7CiB9CiAKIFZpc2li
bGVQb3NpdGlvbiBlbmRWaXNpYmxlUG9zaXRpb24oY29uc3QgUmFuZ2UgKnIsIEVBZmZpbml0eSBh
ZmZpbml0eSkKIHsKICAgICBpbnQgZXhjZXB0aW9uID0gMDsKLSAgICByZXR1cm4gVmlzaWJsZVBv
c2l0aW9uKHItPmVuZENvbnRhaW5lcihleGNlcHRpb24pLCByLT5lbmRPZmZzZXQoZXhjZXB0aW9u
KSwgYWZmaW5pdHkpOworICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oUG9zaXRpb24oci0+ZW5k
Q29udGFpbmVyKGV4Y2VwdGlvbiksIHItPmVuZE9mZnNldChleGNlcHRpb24pLCBQb3NpdGlvbjo6
UG9zaXRpb25Jc09mZnNldEluQW5jaG9yKSwgYWZmaW5pdHkpOwogfQogCiBib29sIHNldFN0YXJ0
KFJhbmdlICpyLCBjb25zdCBWaXNpYmxlUG9zaXRpb24gJnZpc2libGVQb3NpdGlvbikKQEAgLTYy
MCw3ICs2MTUsNyBAQCBib29sIHNldFN0YXJ0KFJhbmdlICpyLCBjb25zdCBWaXNpYmxlUG9zCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICBQb3NpdGlvbiBwID0gdmlzaWJsZVBvc2l0aW9uLmRl
ZXBFcXVpdmFsZW50KCkucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCk7CiAgICAgaW50IGNvZGUg
PSAwOwotICAgIHItPnNldFN0YXJ0KHAubm9kZSgpLCBwLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0
KCksIGNvZGUpOworICAgIHItPnNldFN0YXJ0KHAuY29udGFpbmVyTm9kZSgpLCBwLm9mZnNldElu
Q29udGFpbmVyTm9kZSgpLCBjb2RlKTsKICAgICByZXR1cm4gY29kZSA9PSAwOwogfQogCkBAIC02
MzAsNyArNjI1LDcgQEAgYm9vbCBzZXRFbmQoUmFuZ2UgKnIsIGNvbnN0IFZpc2libGVQb3NpdAog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgUG9zaXRpb24gcCA9IHZpc2libGVQb3NpdGlvbi5k
ZWVwRXF1aXZhbGVudCgpLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpOwogICAgIGludCBjb2Rl
ID0gMDsKLSAgICByLT5zZXRFbmQocC5ub2RlKCksIHAuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQo
KSwgY29kZSk7CisgICAgci0+c2V0RW5kKHAuY29udGFpbmVyTm9kZSgpLCBwLm9mZnNldEluQ29u
dGFpbmVyTm9kZSgpLCBjb2RlKTsKICAgICByZXR1cm4gY29kZSA9PSAwOwogfQogCkBAIC02NDYs
MTAgKzY0MSwxMiBAQCBib29sIGlzRmlyc3RWaXNpYmxlUG9zaXRpb25Jbk5vZGUoY29uc3QgCiB7
CiAgICAgaWYgKHZpc2libGVQb3NpdGlvbi5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIAotICAgIGlmICghdmlzaWJsZVBvc2l0aW9uLmRlZXBFcXVpdmFsZW50KCkubm9kZSgp
LT5pc0Rlc2NlbmRhbnRPZihub2RlKSkKKworICAgIFBvc2l0aW9uIHAgPSB2aXNpYmxlUG9zaXRp
b24uZGVlcEVxdWl2YWxlbnQoKTsKKworICAgIGlmICghcC5ub2RlKCktPmlzRGVzY2VuZGFudE9m
KG5vZGUpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIAorCiAgICAgVmlzaWJsZVBv
c2l0aW9uIHByZXZpb3VzID0gdmlzaWJsZVBvc2l0aW9uLnByZXZpb3VzKCk7CiAgICAgcmV0dXJu
IHByZXZpb3VzLmlzTnVsbCgpIHx8ICFwcmV2aW91cy5kZWVwRXF1aXZhbGVudCgpLm5vZGUoKS0+
aXNEZXNjZW5kYW50T2Yobm9kZSk7CiB9CkBAIC02NTgsMTAgKzY1NSwxMiBAQCBib29sIGlzTGFz
dFZpc2libGVQb3NpdGlvbkluTm9kZShjb25zdCBWCiB7CiAgICAgaWYgKHZpc2libGVQb3NpdGlv
bi5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIGlmICghdmlzaWJs
ZVBvc2l0aW9uLmRlZXBFcXVpdmFsZW50KCkubm9kZSgpLT5pc0Rlc2NlbmRhbnRPZihub2RlKSkK
KworICAgIFBvc2l0aW9uIHAgPSB2aXNpYmxlUG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKTsKKwor
ICAgIGlmICghcC5ub2RlKCktPmlzRGVzY2VuZGFudE9mKG5vZGUpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgICAgICAgICAgCisKICAgICBWaXNpYmxlUG9zaXRpb24gbmV4dCA9IHZp
c2libGVQb3NpdGlvbi5uZXh0KCk7CiAgICAgcmV0dXJuIG5leHQuaXNOdWxsKCkgfHwgIW5leHQu
ZGVlcEVxdWl2YWxlbnQoKS5ub2RlKCktPmlzRGVzY2VuZGFudE9mKG5vZGUpOwogfQpJbmRleDog
U291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlUG9zaXRpb24uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5oCShyZXZpc2lvbiA3NzM4MCkK
KysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVBvc2l0aW9uLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTU0LDcgKzU0LDYgQEAgcHVibGljOgogICAgIC8vIE5PVEU6IFVQU1RSRUFNIGFmZmlu
aXR5IHdpbGwgYmUgdXNlZCBvbmx5IGlmIHBvcyBpcyBhdCBlbmQgb2YgYSB3cmFwcGVkIGxpbmUs
CiAgICAgLy8gb3RoZXJ3aXNlIGl0IHdpbGwgYmUgY29udmVydGVkIHRvIERPV05TVFJFQU0KICAg
ICBWaXNpYmxlUG9zaXRpb24oKSA6IG1fYWZmaW5pdHkoVlBfREVGQVVMVF9BRkZJTklUWSkgeyB9
Ci0gICAgVmlzaWJsZVBvc2l0aW9uKE5vZGUqLCBpbnQgb2Zmc2V0LCBFQWZmaW5pdHkpOwogICAg
IFZpc2libGVQb3NpdGlvbihjb25zdCBQb3NpdGlvbiYsIEVBZmZpbml0eSA9IFZQX0RFRkFVTFRf
QUZGSU5JVFkpOwogCiAgICAgdm9pZCBjbGVhcigpIHsgbV9kZWVwUG9zaXRpb24uY2xlYXIoKTsg
fQpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5jcHAJKHJldmlzaW9uIDc3
MzgwKQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQyNiw3ICs0MjYsNyBAQCBzdGF0aWMgTm9kZSogZmlyc3RJblNwZWNpYWxFbGVt
ZW50KGNvbnN0CiAgICAgZm9yIChOb2RlKiBuID0gcG9zLm5vZGUoKTsgbiAmJiBuLT5yb290RWRp
dGFibGVFbGVtZW50KCkgPT0gcm9vdEVkaXRhYmxlRWxlbWVudDsgbiA9IG4tPnBhcmVudE5vZGUo
KSkKICAgICAgICAgaWYgKGlzU3BlY2lhbEVsZW1lbnQobikpIHsKICAgICAgICAgICAgIFZpc2li
bGVQb3NpdGlvbiB2UG9zID0gVmlzaWJsZVBvc2l0aW9uKHBvcywgRE9XTlNUUkVBTSk7Ci0gICAg
ICAgICAgICBWaXNpYmxlUG9zaXRpb24gZmlyc3RJbkVsZW1lbnQgPSBWaXNpYmxlUG9zaXRpb24o
biwgMCwgRE9XTlNUUkVBTSk7CisgICAgICAgICAgICBWaXNpYmxlUG9zaXRpb24gZmlyc3RJbkVs
ZW1lbnQgPSBWaXNpYmxlUG9zaXRpb24oZmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2RlKG4pLCBE
T1dOU1RSRUFNKTsKICAgICAgICAgICAgIGlmIChpc1RhYmxlRWxlbWVudChuKSAmJiB2UG9zID09
IGZpcnN0SW5FbGVtZW50Lm5leHQoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gbjsKICAgICAg
ICAgICAgIGlmICh2UG9zID09IGZpcnN0SW5FbGVtZW50KQpAQCAtNDQyLDcgKzQ0Miw3IEBAIHN0
YXRpYyBOb2RlKiBsYXN0SW5TcGVjaWFsRWxlbWVudChjb25zdCAKICAgICBmb3IgKE5vZGUqIG4g
PSBwb3Mubm9kZSgpOyBuICYmIG4tPnJvb3RFZGl0YWJsZUVsZW1lbnQoKSA9PSByb290RWRpdGFi
bGVFbGVtZW50OyBuID0gbi0+cGFyZW50Tm9kZSgpKQogICAgICAgICBpZiAoaXNTcGVjaWFsRWxl
bWVudChuKSkgewogICAgICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHZQb3MgPSBWaXNpYmxlUG9z
aXRpb24ocG9zLCBET1dOU1RSRUFNKTsKLSAgICAgICAgICAgIFZpc2libGVQb3NpdGlvbiBsYXN0
SW5FbGVtZW50ID0gVmlzaWJsZVBvc2l0aW9uKG4sIG4tPmNoaWxkTm9kZUNvdW50KCksIERPV05T
VFJFQU0pOworICAgICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIGxhc3RJbkVsZW1lbnQgPSBWaXNp
YmxlUG9zaXRpb24oUG9zaXRpb24obiwgbi0+Y2hpbGROb2RlQ291bnQoKSwgUG9zaXRpb246OlBv
c2l0aW9uSXNPZmZzZXRJbkFuY2hvciksIERPV05TVFJFQU0pOwogICAgICAgICAgICAgaWYgKGlz
VGFibGVFbGVtZW50KG4pICYmIHZQb3MgPT0gbGFzdEluRWxlbWVudC5wcmV2aW91cygpKQogICAg
ICAgICAgICAgICAgIHJldHVybiBuOwogICAgICAgICAgICAgaWYgKHZQb3MgPT0gbGFzdEluRWxl
bWVudCkKQEAgLTUxOSw3ICs1MTksNyBAQCBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvc2l0aW9u
QmVmb3JlTm9kCiB7CiAgICAgQVNTRVJUKG5vZGUpOwogICAgIGlmIChub2RlLT5jaGlsZE5vZGVD
b3VudCgpKQotICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKG5vZGUsIDAsIERPV05TVFJF
QU0pOworICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKGZpcnN0UG9zaXRpb25Jbk9yQmVm
b3JlTm9kZShub2RlKSwgRE9XTlNUUkVBTSk7CiAgICAgQVNTRVJUKG5vZGUtPnBhcmVudE5vZGUo
KSk7CiAgICAgcmV0dXJuIHBvc2l0aW9uSW5QYXJlbnRCZWZvcmVOb2RlKG5vZGUpOwogfQpAQCAt
NTI5LDcgKzUyOSw3IEBAIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9zaXRpb25BZnRlck5vZGUK
IHsKICAgICBBU1NFUlQobm9kZSk7CiAgICAgaWYgKG5vZGUtPmNoaWxkTm9kZUNvdW50KCkpCi0g
ICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24obm9kZSwgbm9kZS0+Y2hpbGROb2RlQ291bnQo
KSwgRE9XTlNUUkVBTSk7CisgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24obGFzdFBvc2l0
aW9uSW5PckFmdGVyTm9kZShub2RlKSwgRE9XTlNUUkVBTSk7CiAgICAgQVNTRVJUKG5vZGUtPnBh
cmVudE5vZGUoKSk7CiAgICAgcmV0dXJuIHBvc2l0aW9uSW5QYXJlbnRBZnRlck5vZGUobm9kZSk7
CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL3Zpc2libGVfdW5pdHMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvdmlzaWJsZV91bml0cy5jcHAJKHJldmlz
aW9uIDc3MzgwKQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy92aXNpYmxlX3VuaXRzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzgzLDcgKzM4Myw3IEBAIHN0YXRpYyBWaXNpYmxlUG9zaXRpb24g
c3RhcnRQb3NpdGlvbkZvckwKICAgICAgICAgc3RhcnRPZmZzZXQgPSBzdGFydFRleHRCb3gtPnN0
YXJ0KCk7CiAgICAgfQogICAKLSAgICBWaXNpYmxlUG9zaXRpb24gdmlzUG9zID0gVmlzaWJsZVBv
c2l0aW9uKHN0YXJ0Tm9kZSwgc3RhcnRPZmZzZXQsIERPV05TVFJFQU0pOworICAgIFZpc2libGVQ
b3NpdGlvbiB2aXNQb3MgPSBWaXNpYmxlUG9zaXRpb24oUG9zaXRpb24oc3RhcnROb2RlLCBzdGFy
dE9mZnNldCwgUG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvciksIERPV05TVFJFQU0p
OwogICAgIHJldHVybiBwb3NpdGlvbkF2b2lkaW5nRmlyc3RQb3NpdGlvbkluVGFibGUodmlzUG9z
KTsKIH0KIApAQCAtNDI5LDE3ICs0MjksMTkgQEAgc3RhdGljIFZpc2libGVQb3NpdGlvbiBlbmRQ
b3NpdGlvbkZvckxpbgogICAgICAgICBlbmRCb3ggPSBlbmRCb3gtPnByZXZMZWFmQ2hpbGQoKTsK
ICAgICB9CiAgICAgCi0gICAgaW50IGVuZE9mZnNldCA9IDE7CisgICAgUG9zaXRpb24gcG9zOwog
ICAgIGlmIChlbmROb2RlLT5oYXNUYWdOYW1lKGJyVGFnKSkgewotICAgICAgICBlbmRPZmZzZXQg
PSAwOworICAgICAgICBwb3MgPSBQb3NpdGlvbihlbmROb2RlLCBQb3NpdGlvbjo6UG9zaXRpb25J
c0JlZm9yZUFuY2hvcik7CiAgICAgfSBlbHNlIGlmIChlbmRCb3gtPmlzSW5saW5lVGV4dEJveCgp
KSB7CiAgICAgICAgIElubGluZVRleHRCb3ggKmVuZFRleHRCb3ggPSBzdGF0aWNfY2FzdDxJbmxp
bmVUZXh0Qm94ICo+KGVuZEJveCk7Ci0gICAgICAgIGVuZE9mZnNldCA9IGVuZFRleHRCb3gtPnN0
YXJ0KCk7CisgICAgICAgIGludCBlbmRPZmZzZXQgPSBlbmRUZXh0Qm94LT5zdGFydCgpOwogICAg
ICAgICBpZiAoIWVuZFRleHRCb3gtPmlzTGluZUJyZWFrKCkpCiAgICAgICAgICAgICBlbmRPZmZz
ZXQgKz0gZW5kVGV4dEJveC0+bGVuKCk7Ci0gICAgfQorICAgICAgICBwb3MgPSBQb3NpdGlvbihl
bmROb2RlLCBlbmRPZmZzZXQsIFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3IpOwor
ICAgIH0gZWxzZQorICAgICAgICBwb3MgPSBQb3NpdGlvbihlbmROb2RlLCBQb3NpdGlvbjo6UG9z
aXRpb25Jc0FmdGVyQW5jaG9yKTsKICAgICAKLSAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKGVu
ZE5vZGUsIGVuZE9mZnNldCwgVlBfVVBTVFJFQU1fSUZfUE9TU0lCTEUpOworICAgIHJldHVybiBW
aXNpYmxlUG9zaXRpb24ocG9zLCBWUF9VUFNUUkVBTV9JRl9QT1NTSUJMRSk7CiB9CiAKIFZpc2li
bGVQb3NpdGlvbiBlbmRPZkxpbmUoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBjKQpAQCAtNTc1LDcg
KzU3Nyw3IEBAIFZpc2libGVQb3NpdGlvbiBwcmV2aW91c0xpbmVQb3NpdGlvbihjb24KICAgICAv
LyBNb3ZlIHRvIHRoZSBzdGFydCBvZiB0aGUgY29udGVudCBpbiB0aGlzIGJsb2NrLCB3aGljaCBl
ZmZlY3RpdmVseSBtb3ZlcyB1cwogICAgIC8vIHRvIHRoZSBzdGFydCBvZiB0aGUgbGluZSB3ZSdy
ZSBvbi4KICAgICBFbGVtZW50KiByb290RWxlbWVudCA9IG5vZGUtPmlzQ29udGVudEVkaXRhYmxl
KCkgPyBub2RlLT5yb290RWRpdGFibGVFbGVtZW50KCkgOiBub2RlLT5kb2N1bWVudCgpLT5kb2N1
bWVudEVsZW1lbnQoKTsKLSAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKHJvb3RFbGVtZW50LCAw
LCBET1dOU1RSRUFNKTsKKyAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKFBvc2l0aW9uKHJvb3RF
bGVtZW50LCAwLCBQb3NpdGlvbjo6UG9zaXRpb25Jc09mZnNldEluQW5jaG9yKSwgRE9XTlNUUkVB
TSk7CiB9CiAKIHN0YXRpYyBOb2RlKiBuZXh0TGVhZldpdGhTYW1lRWRpdGFiaWxpdHkoTm9kZSog
bm9kZSwgaW50IG9mZnNldCkKQEAgLTY4MCw3ICs2ODIsNyBAQCBWaXNpYmxlUG9zaXRpb24gbmV4
dExpbmVQb3NpdGlvbihjb25zdCBWCiAgICAgLy8gTW92ZSB0byB0aGUgZW5kIG9mIHRoZSBjb250
ZW50IGluIHRoaXMgYmxvY2ssIHdoaWNoIGVmZmVjdGl2ZWx5IG1vdmVzIHVzCiAgICAgLy8gdG8g
dGhlIGVuZCBvZiB0aGUgbGluZSB3ZSdyZSBvbi4KICAgICBFbGVtZW50KiByb290RWxlbWVudCA9
IG5vZGUtPmlzQ29udGVudEVkaXRhYmxlKCkgPyBub2RlLT5yb290RWRpdGFibGVFbGVtZW50KCkg
OiBub2RlLT5kb2N1bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKTsKLSAgICByZXR1cm4gVmlzaWJs
ZVBvc2l0aW9uKHJvb3RFbGVtZW50LCByb290RWxlbWVudCA/IHJvb3RFbGVtZW50LT5jaGlsZE5v
ZGVDb3VudCgpIDogMCwgRE9XTlNUUkVBTSk7CisgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihQ
b3NpdGlvbihyb290RWxlbWVudCwgcm9vdEVsZW1lbnQgPyByb290RWxlbWVudC0+Y2hpbGROb2Rl
Q291bnQoKSA6IDAsIFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3IpLCBET1dOU1RS
RUFNKTsKIH0KIAogLy8gLS0tLS0tLS0tCkBAIC03NTIsNiArNzU0LDcgQEAgVmlzaWJsZVBvc2l0
aW9uIHN0YXJ0T2ZQYXJhZ3JhcGgoY29uc3QgVgogCiAgICAgTm9kZSAqbm9kZSA9IHN0YXJ0Tm9k
ZTsKICAgICBpbnQgb2Zmc2V0ID0gcC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpOworICAgIFBv
c2l0aW9uOjpBbmNob3JUeXBlIHR5cGUgPSBwLmFuY2hvclR5cGUoKTsKIAogICAgIE5vZGUgKm4g
PSBzdGFydE5vZGU7CiAgICAgd2hpbGUgKG4pIHsKQEAgLTc3Miw2ICs3NzUsNyBAQCBWaXNpYmxl
UG9zaXRpb24gc3RhcnRPZlBhcmFncmFwaChjb25zdCBWCiAgICAgICAgICAgICBicmVhazsKIAog
ICAgICAgICBpZiAoci0+aXNUZXh0KCkgJiYgci0+Y2FyZXRNYXhSZW5kZXJlZE9mZnNldCgpID4g
MCkgeworICAgICAgICAgICAgdHlwZSA9IFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNo
b3I7CiAgICAgICAgICAgICBpZiAoc3R5bGUtPnByZXNlcnZlTmV3bGluZSgpKSB7CiAgICAgICAg
ICAgICAgICAgY29uc3QgVUNoYXIqIGNoYXJzID0gdG9SZW5kZXJUZXh0KHIpLT5jaGFyYWN0ZXJz
KCk7CiAgICAgICAgICAgICAgICAgaW50IGkgPSB0b1JlbmRlclRleHQociktPnRleHRMZW5ndGgo
KTsKQEAgLTc4MCwyMCArNzg0LDIzIEBAIFZpc2libGVQb3NpdGlvbiBzdGFydE9mUGFyYWdyYXBo
KGNvbnN0IFYKICAgICAgICAgICAgICAgICAgICAgaSA9IG1heCgwLCBvKTsKICAgICAgICAgICAg
ICAgICB3aGlsZSAoLS1pID49IDApCiAgICAgICAgICAgICAgICAgICAgIGlmIChjaGFyc1tpXSA9
PSAnXG4nKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihu
LCBpICsgMSwgRE9XTlNUUkVBTSk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gVmlz
aWJsZVBvc2l0aW9uKFBvc2l0aW9uKG4sIGkgKyAxLCB0eXBlKSwgRE9XTlNUUkVBTSk7CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICBub2RlID0gbjsKICAgICAgICAgICAgIG9mZnNldCA9IDA7
CiAgICAgICAgICAgICBuID0gbi0+dHJhdmVyc2VQcmV2aW91c05vZGVQb3N0T3JkZXIoc3RhcnRC
bG9jayk7CiAgICAgICAgIH0gZWxzZSBpZiAoZWRpdGluZ0lnbm9yZXNDb250ZW50KG4pIHx8IGlz
VGFibGVFbGVtZW50KG4pKSB7CiAgICAgICAgICAgICBub2RlID0gbjsKLSAgICAgICAgICAgIG9m
ZnNldCA9IDA7CisgICAgICAgICAgICB0eXBlID0gUG9zaXRpb246OlBvc2l0aW9uSXNCZWZvcmVB
bmNob3I7CiAgICAgICAgICAgICBuID0gbi0+cHJldmlvdXNTaWJsaW5nKCkgPyBuLT5wcmV2aW91
c1NpYmxpbmcoKSA6IG4tPnRyYXZlcnNlUHJldmlvdXNOb2RlUG9zdE9yZGVyKHN0YXJ0QmxvY2sp
OwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIG4gPSBuLT50cmF2ZXJzZVByZXZpb3VzTm9k
ZVBvc3RPcmRlcihzdGFydEJsb2NrKTsKICAgICB9CiAKLSAgICByZXR1cm4gVmlzaWJsZVBvc2l0
aW9uKG5vZGUsIG9mZnNldCwgRE9XTlNUUkVBTSk7CisgICAgaWYgKHR5cGUgPT0gUG9zaXRpb246
OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvcikKKyAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlv
bihQb3NpdGlvbihub2RlLCBvZmZzZXQsIHR5cGUpLCBET1dOU1RSRUFNKTsKKyAgICAKKyAgICBy
ZXR1cm4gVmlzaWJsZVBvc2l0aW9uKFBvc2l0aW9uKG5vZGUsIHR5cGUpLCBET1dOU1RSRUFNKTsK
IH0KIAogVmlzaWJsZVBvc2l0aW9uIGVuZE9mUGFyYWdyYXBoKGNvbnN0IFZpc2libGVQb3NpdGlv
biAmYywgRWRpdGluZ0JvdW5kYXJ5Q3Jvc3NpbmdSdWxlIGJvdW5kYXJ5Q3Jvc3NpbmdSdWxlKQpA
QCAtODEyLDYgKzgxOSw3IEBAIFZpc2libGVQb3NpdGlvbiBlbmRPZlBhcmFncmFwaChjb25zdCBW
aXMKICAgICAKICAgICBOb2RlICpub2RlID0gc3RhcnROb2RlOwogICAgIGludCBvZmZzZXQgPSBw
LmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCk7CisgICAgUG9zaXRpb246OkFuY2hvclR5cGUgdHlw
ZSA9IHAuYW5jaG9yVHlwZSgpOwogCiAgICAgTm9kZSAqbiA9IHN0YXJ0Tm9kZTsKICAgICB3aGls
ZSAobikgewpAQCAtODM0LDI1ICs4NDIsMjkgQEAgVmlzaWJsZVBvc2l0aW9uIGVuZE9mUGFyYWdy
YXBoKGNvbnN0IFZpcwogICAgICAgICAvLyBGSVhNRTogV2UgYXZvaWQgcmV0dXJuaW5nIGEgcG9z
aXRpb24gd2hlcmUgdGhlIHJlbmRlcmVyIGNhbid0IGFjY2VwdCB0aGUgY2FyZXQuCiAgICAgICAg
IGlmIChyLT5pc1RleHQoKSAmJiByLT5jYXJldE1heFJlbmRlcmVkT2Zmc2V0KCkgPiAwKSB7CiAg
ICAgICAgICAgICBpbnQgbGVuZ3RoID0gdG9SZW5kZXJUZXh0KHIpLT50ZXh0TGVuZ3RoKCk7Cisg
ICAgICAgICAgICB0eXBlID0gUG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvcjsKICAg
ICAgICAgICAgIGlmIChzdHlsZS0+cHJlc2VydmVOZXdsaW5lKCkpIHsKICAgICAgICAgICAgICAg
ICBjb25zdCBVQ2hhciogY2hhcnMgPSB0b1JlbmRlclRleHQociktPmNoYXJhY3RlcnMoKTsKICAg
ICAgICAgICAgICAgICBpbnQgbyA9IG4gPT0gc3RhcnROb2RlID8gb2Zmc2V0IDogMDsKICAgICAg
ICAgICAgICAgICBmb3IgKGludCBpID0gbzsgaSA8IGxlbmd0aDsgKytpKQogICAgICAgICAgICAg
ICAgICAgICBpZiAoY2hhcnNbaV0gPT0gJ1xuJykKLSAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBWaXNpYmxlUG9zaXRpb24obiwgaSwgRE9XTlNUUkVBTSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKFBvc2l0aW9uKG4sIGksIHR5cGUpLCBET1dO
U1RSRUFNKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIG5vZGUgPSBuOwogICAgICAgICAg
ICAgb2Zmc2V0ID0gci0+Y2FyZXRNYXhPZmZzZXQoKTsKICAgICAgICAgICAgIG4gPSBuLT50cmF2
ZXJzZU5leHROb2RlKHN0YXlJbnNpZGVCbG9jayk7CiAgICAgICAgIH0gZWxzZSBpZiAoZWRpdGlu
Z0lnbm9yZXNDb250ZW50KG4pIHx8IGlzVGFibGVFbGVtZW50KG4pKSB7CiAgICAgICAgICAgICBu
b2RlID0gbjsKLSAgICAgICAgICAgIG9mZnNldCA9IGxhc3RPZmZzZXRGb3JFZGl0aW5nKG4pOwor
ICAgICAgICAgICAgdHlwZSA9IFBvc2l0aW9uOjpQb3NpdGlvbklzQWZ0ZXJBbmNob3I7CiAgICAg
ICAgICAgICBuID0gbi0+dHJhdmVyc2VOZXh0U2libGluZyhzdGF5SW5zaWRlQmxvY2spOwogICAg
ICAgICB9IGVsc2UKICAgICAgICAgICAgIG4gPSBuLT50cmF2ZXJzZU5leHROb2RlKHN0YXlJbnNp
ZGVCbG9jayk7CiAgICAgfQogCi0gICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihub2RlLCBvZmZz
ZXQsIERPV05TVFJFQU0pOworICAgIGlmICh0eXBlID09IFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zm
c2V0SW5BbmNob3IpCisgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oUG9zaXRpb24obm9k
ZSwgb2Zmc2V0LCB0eXBlKSwgRE9XTlNUUkVBTSk7CisKKyAgICByZXR1cm4gVmlzaWJsZVBvc2l0
aW9uKFBvc2l0aW9uKG5vZGUsIHR5cGUpLCBET1dOU1RSRUFNKTsKIH0KIAogVmlzaWJsZVBvc2l0
aW9uIHN0YXJ0T2ZOZXh0UGFyYWdyYXBoKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgdmlzaWJsZVBv
c2l0aW9uKQpAQCAtOTI2LDcgKzkzOCw3IEBAIFZpc2libGVQb3NpdGlvbiBlbmRPZkJsb2NrKGNv
bnN0IFZpc2libGUKIAogICAgIE5vZGUgKnN0YXJ0QmxvY2sgPSBzdGFydE5vZGUtPmVuY2xvc2lu
Z0Jsb2NrRmxvd0VsZW1lbnQoKTsKICAgICAKLSAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKHN0
YXJ0QmxvY2ssIHN0YXJ0QmxvY2stPmNoaWxkTm9kZUNvdW50KCksIFZQX0RFRkFVTFRfQUZGSU5J
VFkpOyAgIAorICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oUG9zaXRpb24oc3RhcnRCbG9jaywg
c3RhcnRCbG9jay0+Y2hpbGROb2RlQ291bnQoKSwgUG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJ
bkFuY2hvciksIFZQX0RFRkFVTFRfQUZGSU5JVFkpOyAgIAogfQogCiBib29sIGluU2FtZUJsb2Nr
KGNvbnN0IFZpc2libGVQb3NpdGlvbiAmYSwgY29uc3QgVmlzaWJsZVBvc2l0aW9uICZiKQpAQCAt
OTUxLDcgKzk2Myw3IEBAIFZpc2libGVQb3NpdGlvbiBzdGFydE9mRG9jdW1lbnQoY29uc3QgTm8K
ICAgICBpZiAoIW5vZGUpCiAgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oKTsKICAgICAK
LSAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKG5vZGUtPmRvY3VtZW50KCktPmRvY3VtZW50RWxl
bWVudCgpLCAwLCBET1dOU1RSRUFNKTsKKyAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKFBvc2l0
aW9uKG5vZGUtPmRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgpLCAwLCBQb3NpdGlvbjo6UG9z
aXRpb25Jc09mZnNldEluQW5jaG9yKSwgRE9XTlNUUkVBTSk7CiB9CiAKIFZpc2libGVQb3NpdGlv
biBzdGFydE9mRG9jdW1lbnQoY29uc3QgVmlzaWJsZVBvc2l0aW9uICZjKQpAQCAtOTY1LDcgKzk3
Nyw3IEBAIFZpc2libGVQb3NpdGlvbiBlbmRPZkRvY3VtZW50KGNvbnN0IE5vZGUKICAgICAgICAg
cmV0dXJuIFZpc2libGVQb3NpdGlvbigpOwogICAgIAogICAgIEVsZW1lbnQqIGRvYyA9IG5vZGUt
PmRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgpOwotICAgIHJldHVybiBWaXNpYmxlUG9zaXRp
b24oZG9jLCBkb2MtPmNoaWxkTm9kZUNvdW50KCksIERPV05TVFJFQU0pOworICAgIHJldHVybiBW
aXNpYmxlUG9zaXRpb24oUG9zaXRpb24oZG9jLCBkb2MtPmNoaWxkTm9kZUNvdW50KCksIFBvc2l0
aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3IpLCBET1dOU1RSRUFNKTsKIH0KIAogVmlzaWJs
ZVBvc2l0aW9uIGVuZE9mRG9jdW1lbnQoY29uc3QgVmlzaWJsZVBvc2l0aW9uICZjKQpAQCAtMTEy
MSw5ICsxMTMzLDggQEAgc3RhdGljIFZpc2libGVQb3NpdGlvbiBsb2dpY2FsU3RhcnRQb3NpdAog
ICAgIGlmICghbG9naWNhbFN0YXJ0Tm9kZSkKICAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlv
bigpOwogCi0gICAgaW50IHN0YXJ0T2Zmc2V0ID0gbG9naWNhbFN0YXJ0Qm94LT5jYXJldE1pbk9m
ZnNldCgpOwotICAKLSAgICBWaXNpYmxlUG9zaXRpb24gdmlzUG9zID0gVmlzaWJsZVBvc2l0aW9u
KGxvZ2ljYWxTdGFydE5vZGUsIHN0YXJ0T2Zmc2V0LCBET1dOU1RSRUFNKTsKKyAgICBWaXNpYmxl
UG9zaXRpb24gdmlzUG9zID0gbG9naWNhbFN0YXJ0Tm9kZS0+aXNUZXh0Tm9kZSgpID8gVmlzaWJs
ZVBvc2l0aW9uKFBvc2l0aW9uKGxvZ2ljYWxTdGFydE5vZGUsIGxvZ2ljYWxTdGFydEJveC0+Y2Fy
ZXRNaW5PZmZzZXQoKSwgUG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvciksIERPV05T
VFJFQU0pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA6IFZpc2libGVQb3NpdGlvbihQb3NpdGlvbihsb2dpY2FsU3RhcnROb2RlLCBQ
b3NpdGlvbjo6UG9zaXRpb25Jc0JlZm9yZUFuY2hvciksIERPV05TVFJFQU0pOwogICAgIHJldHVy
biBwb3NpdGlvbkF2b2lkaW5nRmlyc3RQb3NpdGlvbkluVGFibGUodmlzUG9zKTsKIH0KIApAQCAt
MTE1NywxNyArMTE2OCwxOSBAQCBzdGF0aWMgVmlzaWJsZVBvc2l0aW9uIGxvZ2ljYWxFbmRQb3Np
dGlvCiAgICAgaWYgKCFsb2dpY2FsRW5kTm9kZSkKICAgICAgICAgcmV0dXJuIFZpc2libGVQb3Np
dGlvbigpOwogICAgIAotICAgIGludCBlbmRPZmZzZXQgPSAxOworICAgIFBvc2l0aW9uIHBvczsK
ICAgICBpZiAobG9naWNhbEVuZE5vZGUtPmhhc1RhZ05hbWUoYnJUYWcpKQotICAgICAgICBlbmRP
ZmZzZXQgPSAwOworICAgICAgICBwb3MgPSBQb3NpdGlvbihsb2dpY2FsRW5kTm9kZSwgUG9zaXRp
b246OlBvc2l0aW9uSXNCZWZvcmVBbmNob3IpOwogICAgIGVsc2UgaWYgKGxvZ2ljYWxFbmRCb3gt
PmlzSW5saW5lVGV4dEJveCgpKSB7CiAgICAgICAgIElubGluZVRleHRCb3gqIGVuZFRleHRCb3gg
PSBzdGF0aWNfY2FzdDxJbmxpbmVUZXh0Qm94Kj4obG9naWNhbEVuZEJveCk7Ci0gICAgICAgIGVu
ZE9mZnNldCA9IGVuZFRleHRCb3gtPnN0YXJ0KCk7CisgICAgICAgIGludCBlbmRPZmZzZXQgPSBl
bmRUZXh0Qm94LT5zdGFydCgpOwogICAgICAgICBpZiAoIWVuZFRleHRCb3gtPmlzTGluZUJyZWFr
KCkpCiAgICAgICAgICAgICBlbmRPZmZzZXQgKz0gZW5kVGV4dEJveC0+bGVuKCk7Ci0gICAgfQor
ICAgICAgICBwb3MgPSBQb3NpdGlvbihsb2dpY2FsRW5kTm9kZSwgZW5kT2Zmc2V0LCBQb3NpdGlv
bjo6UG9zaXRpb25Jc09mZnNldEluQW5jaG9yKTsKKyAgICB9IGVsc2UKKyAgICAgICAgcG9zID0g
UG9zaXRpb24obG9naWNhbEVuZE5vZGUsIFBvc2l0aW9uOjpQb3NpdGlvbklzQWZ0ZXJBbmNob3Ip
OwogICAgIAotICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24obG9naWNhbEVuZE5vZGUsIGVuZE9m
ZnNldCwgVlBfVVBTVFJFQU1fSUZfUE9TU0lCTEUpOworICAgIHJldHVybiBWaXNpYmxlUG9zaXRp
b24ocG9zLCBWUF9VUFNUUkVBTV9JRl9QT1NTSUJMRSk7CiB9CiAKIGJvb2wgaW5TYW1lTG9naWNh
bExpbmUoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBhLCBjb25zdCBWaXNpYmxlUG9zaXRpb24mIGIp
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVNlbGVjdGlvbi5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGFnZS9ET01TZWxlY3Rpb24uY3BwCShyZXZpc2lvbiA3NzM4MCkK
KysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NU2VsZWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjExLDcgKzIxMSw3IEBAIHZvaWQgRE9NU2VsZWN0aW9uOjpjb2xsYXBzZShOb2RlKiBub2Rl
LCAKICAgICBpZiAoIWlzVmFsaWRGb3JQb3NpdGlvbihub2RlKSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgbV9mcmFtZS0+c2VsZWN0aW9uKCktPm1vdmVUbyhWaXNpYmxlUG9zaXRpb24obm9kZSwg
b2Zmc2V0LCBET1dOU1RSRUFNKSk7CisgICAgbV9mcmFtZS0+c2VsZWN0aW9uKCktPm1vdmVUbyhW
aXNpYmxlUG9zaXRpb24oUG9zaXRpb24obm9kZSwgb2Zmc2V0LCBQb3NpdGlvbjo6UG9zaXRpb25J
c09mZnNldEluQW5jaG9yKSwgRE9XTlNUUkVBTSkpOwogfQogCiB2b2lkIERPTVNlbGVjdGlvbjo6
Y29sbGFwc2VUb0VuZChFeGNlcHRpb25Db2RlJiBlYykKQEAgLTI2NCw4ICsyNjQsOCBAQCB2b2lk
IERPTVNlbGVjdGlvbjo6c2V0QmFzZUFuZEV4dGVudChOb2RlCiAgICAgaWYgKCFpc1ZhbGlkRm9y
UG9zaXRpb24oYmFzZU5vZGUpIHx8ICFpc1ZhbGlkRm9yUG9zaXRpb24oZXh0ZW50Tm9kZSkpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlQmFzZSA9IFZpc2li
bGVQb3NpdGlvbihiYXNlTm9kZSwgYmFzZU9mZnNldCwgRE9XTlNUUkVBTSk7Ci0gICAgVmlzaWJs
ZVBvc2l0aW9uIHZpc2libGVFeHRlbnQgPSBWaXNpYmxlUG9zaXRpb24oZXh0ZW50Tm9kZSwgZXh0
ZW50T2Zmc2V0LCBET1dOU1RSRUFNKTsKKyAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZUJhc2Ug
PSBWaXNpYmxlUG9zaXRpb24oUG9zaXRpb24oYmFzZU5vZGUsIGJhc2VPZmZzZXQsIFBvc2l0aW9u
OjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3IpLCBET1dOU1RSRUFNKTsKKyAgICBWaXNpYmxlUG9z
aXRpb24gdmlzaWJsZUV4dGVudCA9IFZpc2libGVQb3NpdGlvbihQb3NpdGlvbihleHRlbnROb2Rl
LCBleHRlbnRPZmZzZXQsIFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3IpLCBET1dO
U1RSRUFNKTsKIAogICAgIG1fZnJhbWUtPnNlbGVjdGlvbigpLT5tb3ZlVG8odmlzaWJsZUJhc2Us
IHZpc2libGVFeHRlbnQpOwogfQpAQCAtMjgyLDcgKzI4Miw3IEBAIHZvaWQgRE9NU2VsZWN0aW9u
OjpzZXRQb3NpdGlvbihOb2RlKiBub2QKICAgICBpZiAoIWlzVmFsaWRGb3JQb3NpdGlvbihub2Rl
KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9mcmFtZS0+c2VsZWN0aW9uKCktPm1vdmVUbyhW
aXNpYmxlUG9zaXRpb24obm9kZSwgb2Zmc2V0LCBET1dOU1RSRUFNKSk7CisgICAgbV9mcmFtZS0+
c2VsZWN0aW9uKCktPm1vdmVUbyhWaXNpYmxlUG9zaXRpb24oUG9zaXRpb24obm9kZSwgb2Zmc2V0
LCBQb3NpdGlvbjo6UG9zaXRpb25Jc09mZnNldEluQW5jaG9yKSwgRE9XTlNUUkVBTSkpOwogfQog
CiB2b2lkIERPTVNlbGVjdGlvbjo6bW9kaWZ5KGNvbnN0IFN0cmluZyYgYWx0ZXJTdHJpbmcsIGNv
bnN0IFN0cmluZyYgZGlyZWN0aW9uU3RyaW5nLCBjb25zdCBTdHJpbmcmIGdyYW51bGFyaXR5U3Ry
aW5nKQpAQCAtMzUzLDcgKzM1Myw3IEBAIHZvaWQgRE9NU2VsZWN0aW9uOjpleHRlbmQoTm9kZSog
bm9kZSwgaW4KICAgICBpZiAoIWlzVmFsaWRGb3JQb3NpdGlvbihub2RlKSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgbV9mcmFtZS0+c2VsZWN0aW9uKCktPnNldEV4dGVudChWaXNpYmxlUG9zaXRp
b24obm9kZSwgb2Zmc2V0LCBET1dOU1RSRUFNKSk7CisgICAgbV9mcmFtZS0+c2VsZWN0aW9uKCkt
PnNldEV4dGVudChWaXNpYmxlUG9zaXRpb24oUG9zaXRpb24obm9kZSwgb2Zmc2V0LCBQb3NpdGlv
bjo6UG9zaXRpb25Jc09mZnNldEluQW5jaG9yKSwgRE9XTlNUUkVBTSkpOwogfQogCiBQYXNzUmVm
UHRyPFJhbmdlPiBET01TZWxlY3Rpb246OmdldFJhbmdlQXQoaW50IGluZGV4LCBFeGNlcHRpb25D
b2RlJiBlYykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAJKHJldmlzaW9u
IDc3MzgwKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zNzMsNyArMzczLDcgQEAgYm9vbCBFdmVudEhhbmRsZXI6OmhhbmRsZU1vdXNl
UHJlc3NFdmVudAogCiAgICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3MoaW5uZXJOb2RlLT5y
ZW5kZXJlcigpLT5wb3NpdGlvbkZvclBvaW50KGV2ZW50LmxvY2FsUG9pbnQoKSkpOwogICAgIGlm
ICh2aXNpYmxlUG9zLmlzTnVsbCgpKQotICAgICAgICB2aXNpYmxlUG9zID0gVmlzaWJsZVBvc2l0
aW9uKGlubmVyTm9kZSwgMCwgRE9XTlNUUkVBTSk7CisgICAgICAgIHZpc2libGVQb3MgPSBWaXNp
YmxlUG9zaXRpb24oZmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2RlKGlubmVyTm9kZSksIERPV05T
VFJFQU0pOwogICAgIFBvc2l0aW9uIHBvcyA9IHZpc2libGVQb3MuZGVlcEVxdWl2YWxlbnQoKTsK
ICAgICAKICAgICBWaXNpYmxlU2VsZWN0aW9uIG5ld1NlbGVjdGlvbiA9IG1fZnJhbWUtPnNlbGVj
dGlvbigpLT5zZWxlY3Rpb24oKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJPYmplY3QuY3BwCShyZXZpc2lvbiA3NzM4MCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjU0LDcgKzI2NTQsNyBAQCBW
aXNpYmxlUG9zaXRpb24gUmVuZGVyT2JqZWN0OjpjcmVhdGVWaXNpCiAgICAgICAgICAgICBpZiAo
Y2FuZGlkYXRlLm5vZGUoKS0+aXNDb250ZW50RWRpdGFibGUoKSkKICAgICAgICAgICAgICAgICBy
ZXR1cm4gVmlzaWJsZVBvc2l0aW9uKGNhbmRpZGF0ZSwgYWZmaW5pdHkpOwogICAgICAgICB9Ci0g
ICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24obm9kZSwgb2Zmc2V0LCBhZmZpbml0eSk7Cisg
ICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oUG9zaXRpb24obm9kZSwgb2Zmc2V0KSwgYWZm
aW5pdHkpOwogICAgIH0KIAogICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gY3Jvc3MgdGhlIGJvdW5k
YXJ5IGJldHdlZW4gZWRpdGFibGUgYW5kIG5vbi1lZGl0YWJsZQpAQCAtMjY2OSw3ICsyNjY5LDcg
QEAgVmlzaWJsZVBvc2l0aW9uIFJlbmRlck9iamVjdDo6Y3JlYXRlVmlzaQogICAgICAgICBSZW5k
ZXJPYmplY3QqIHJlbmRlcmVyID0gY2hpbGQ7CiAgICAgICAgIHdoaWxlICgocmVuZGVyZXIgPSBy
ZW5kZXJlci0+bmV4dEluUHJlT3JkZXIocGFyZW50KSkpIHsKICAgICAgICAgICAgIGlmIChOb2Rl
KiBub2RlID0gcmVuZGVyZXItPm5vZGUoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gVmlzaWJs
ZVBvc2l0aW9uKG5vZGUsIDAsIERPV05TVFJFQU0pOworICAgICAgICAgICAgICAgIHJldHVybiBW
aXNpYmxlUG9zaXRpb24oZmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2RlKG5vZGUpLCBET1dOU1RS
RUFNKTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIEZpbmQgbm9uLWFub255bW91cyBjb250ZW50
IGJlZm9yZS4KQEAgLTI2NzgsMTIgKzI2NzgsMTIgQEAgVmlzaWJsZVBvc2l0aW9uIFJlbmRlck9i
amVjdDo6Y3JlYXRlVmlzaQogICAgICAgICAgICAgaWYgKHJlbmRlcmVyID09IHBhcmVudCkKICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGlmIChOb2RlKiBub2RlID0gcmVuZGVy
ZXItPm5vZGUoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKGxhc3RE
ZWVwRWRpdGluZ1Bvc2l0aW9uRm9yTm9kZShub2RlKSwgRE9XTlNUUkVBTSk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihsYXN0UG9zaXRpb25Jbk9yQWZ0ZXJOb2RlKG5v
ZGUpLCBET1dOU1RSRUFNKTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIFVzZSB0aGUgcGFyZW50
IGl0c2VsZiB1bmxlc3MgaXQgdG9vIGlzIGFub255bW91cy4KICAgICAgICAgaWYgKE5vZGUqIG5v
ZGUgPSBwYXJlbnQtPm5vZGUoKSkKLSAgICAgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24o
bm9kZSwgMCwgRE9XTlNUUkVBTSk7CisgICAgICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9u
KGZpcnN0UG9zaXRpb25Jbk9yQmVmb3JlTm9kZShub2RlKSwgRE9XTlNUUkVBTSk7CiAKICAgICAg
ICAgLy8gUmVwZWF0IGF0IHRoZSBuZXh0IGxldmVsIHVwLgogICAgICAgICBjaGlsZCA9IHBhcmVu
dDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9s
LmNwcAkocmV2aXNpb24gNzczODApCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGV4dENvbnRyb2wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMjEsNyArMzIxLDcgQEAgUGFzc1Jl
ZlB0cjxSYW5nZT4gUmVuZGVyVGV4dENvbnRyb2w6OnNlbAogVmlzaWJsZVBvc2l0aW9uIFJlbmRl
clRleHRDb250cm9sOjp2aXNpYmxlUG9zaXRpb25Gb3JJbmRleChpbnQgaW5kZXgpIGNvbnN0CiB7
CiAgICAgaWYgKGluZGV4IDw9IDApCi0gICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24obV9p
bm5lclRleHQuZ2V0KCksIDAsIERPV05TVFJFQU0pOworICAgICAgICByZXR1cm4gVmlzaWJsZVBv
c2l0aW9uKFBvc2l0aW9uKG1faW5uZXJUZXh0LmdldCgpLCAwLCBQb3NpdGlvbjo6UG9zaXRpb25J
c09mZnNldEluQW5jaG9yKSwgRE9XTlNUUkVBTSk7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7
CiAgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IFJhbmdlOjpjcmVhdGUoZG9jdW1lbnQoKSk7CiAg
ICAgcmFuZ2UtPnNlbGVjdE5vZGVDb250ZW50cyhtX2lubmVyVGV4dC5nZXQoKSwgZWMpOwpAQCAt
MzMyLDcgKzMzMiw3IEBAIFZpc2libGVQb3NpdGlvbiBSZW5kZXJUZXh0Q29udHJvbDo6dmlzaWIK
ICAgICBBU1NFUlQoIWVjKTsKICAgICBpbnQgZW5kT2Zmc2V0ID0gaXQucmFuZ2UoKS0+ZW5kT2Zm
c2V0KGVjKTsKICAgICBBU1NFUlQoIWVjKTsKLSAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKGVu
ZENvbnRhaW5lciwgZW5kT2Zmc2V0LCBVUFNUUkVBTSk7CisgICAgcmV0dXJuIFZpc2libGVQb3Np
dGlvbihQb3NpdGlvbihlbmRDb250YWluZXIsIGVuZE9mZnNldCwgUG9zaXRpb246OlBvc2l0aW9u
SXNPZmZzZXRJbkFuY2hvciksIFVQU1RSRUFNKTsKIH0KIAogaW50IFJlbmRlclRleHRDb250cm9s
OjppbmRleEZvclZpc2libGVQb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mIHBvcykgY29u
c3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUZXh0Q29udGVudEVsZW1lbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUZXh0Q29udGVudEVsZW1lbnQuY3Bw
CShyZXZpc2lvbiA3NzM4MCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUZXh0Q29udGVudEVs
ZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDUsNyArMTQ1LDcgQEAgdm9pZCBTVkdUZXh0
Q29udGVudEVsZW1lbnQ6OnNlbGVjdFN1YlN0cgogICAgICAgICByZXR1cm47CiAKICAgICAvLyBG
aW5kIHNlbGVjdGlvbiBzdGFydAotICAgIFZpc2libGVQb3NpdGlvbiBzdGFydChjb25zdF9jYXN0
PFNWR1RleHRDb250ZW50RWxlbWVudCo+KHRoaXMpLCAwLCBTRUxfREVGQVVMVF9BRkZJTklUWSk7
CisgICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0KFBvc2l0aW9uKGNvbnN0X2Nhc3Q8U1ZHVGV4dENv
bnRlbnRFbGVtZW50Kj4odGhpcyksIDAsIFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNo
b3IpLCBTRUxfREVGQVVMVF9BRkZJTklUWSk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGNoYXJudW07ICsraSkKICAgICAgICAgc3RhcnQgPSBzdGFydC5uZXh0KCk7CiAKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21h
Yy9DaGFuZ2VMb2cJKHJldmlzaW9uIDc3NjY4KQorKysgU291cmNlL1dlYktpdC9tYWMvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTEtMDItMDQgIExldmkgV2Vp
bnRyYXViICA8bGV2aXdAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFN0b3AgaW5zdGFudGlhdGluZyBsZWdhY3kgZWRpdGluZyBQ
b3NpdGlvbnMgaW4gVmlzaWJsZVBvc2l0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD01MjkxOQorCisgICAgICAgIENoYW5naW5nIHVzYWdlIG9mIGxl
Z2FjeSBWaXNpYmxlUG9zaXRpb24gY29uc3RydWN0b3IuIFNpbmNlIHdlIHdlcmUgZGVhbGluZwor
ICAgICAgICB3aXRoIHBvc2l0aW9ucyBmcm9tIERPTSBSYW5nZXMsIHdlJ3JlIGd1YXJhbnRlZWQg
YSBwYXJlbnQtYW5jaG9yZWQgcG9zaXRpb24uCisKKyAgICAgICAgKiBXZWJWaWV3L1dlYkZyYW1l
Lm1tOgorICAgICAgICAoLVtXZWJGcmFtZSBfY2FyZXRSZWN0QXRQb3NpdGlvbjphZmZpbml0eTpd
KToKKyAgICAgICAgKiBXZWJWaWV3L1dlYkZyYW1lSW50ZXJuYWwuaDoKKyAgICAgICAgKiBXZWJW
aWV3L1dlYlRleHRDb21wbGV0aW9uQ29udHJvbGxlci5tbToKKyAgICAgICAgKC1bV2ViVGV4dENv
bXBsZXRpb25Db250cm9sbGVyIGRvQ29tcGxldGlvbl0pOgorCiAyMDExLTAyLTAzICBZdXJ5IFNl
bWlraGF0c2t5ICA8eXVyeXNAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFBh
dmVsIEZlbGRtYW4uCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0JKHJl
dmlzaW9uIDc3MzgwKQorKysgU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQko
d29ya2luZyBjb3B5KQpAQCAtNjYwLDkgKzY2MCw5IEBAIC0gKE5TU3RyaW5nICopX3N0cmluZ0J5
RXZhbHVhdGluZ0phdmFTY3IKICAgICByZXR1cm4gdXN0cmluZ1RvU3RyaW5nKHJlc3VsdC50b1N0
cmluZyhfcHJpdmF0ZS0+Y29yZUZyYW1lLT5zY3JpcHQoKS0+Z2xvYmFsT2JqZWN0KG1haW5UaHJl
YWROb3JtYWxXb3JsZCgpKS0+Z2xvYmFsRXhlYygpKSk7CiB9CiAKLS0gKE5TUmVjdClfY2FyZXRS
ZWN0QXROb2RlOihET01Ob2RlICopbm9kZSBvZmZzZXQ6KGludClvZmZzZXQgYWZmaW5pdHk6KE5T
U2VsZWN0aW9uQWZmaW5pdHkpYWZmaW5pdHkKKy0gKE5TUmVjdClfY2FyZXRSZWN0QXRQb3NpdGlv
bjooY29uc3QgUG9zaXRpb24mKXBvcyBhZmZpbml0eTooTlNTZWxlY3Rpb25BZmZpbml0eSlhZmZp
bml0eQogewotICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9zaXRpb24oY29yZShub2RlKSwg
b2Zmc2V0LCBzdGF0aWNfY2FzdDxFQWZmaW5pdHk+KGFmZmluaXR5KSk7CisgICAgVmlzaWJsZVBv
c2l0aW9uIHZpc2libGVQb3NpdGlvbihwb3MsIHN0YXRpY19jYXN0PEVBZmZpbml0eT4oYWZmaW5p
dHkpKTsKICAgICByZXR1cm4gdmlzaWJsZVBvc2l0aW9uLmFic29sdXRlQ2FyZXRCb3VuZHMoKTsK
IH0KIApJbmRleDogU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZUludGVybmFsLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZUludGVybmFs
LmgJKHJldmlzaW9uIDc3MzgwKQorKysgU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFt
ZUludGVybmFsLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpbXBvcnQgIldl
YlByZWZlcmVuY2VzUHJpdmF0ZS5oIgogI2ltcG9ydCA8V2ViQ29yZS9FZGl0QWN0aW9uLmg+CiAj
aW1wb3J0IDxXZWJDb3JlL0ZyYW1lTG9hZGVyVHlwZXMuaD4KKyNpbXBvcnQgPFdlYkNvcmUvUG9z
aXRpb24uaD4KICNpbXBvcnQgPFdlYkNvcmUvU2VsZWN0aW9uQ29udHJvbGxlci5oPgogI2ltcG9y
dCA8V2ViQ29yZS9TZXR0aW5ncy5oPgogCkBAIC0xMzQsNyArMTM1LDcgQEAgQGludGVyZmFjZSBX
ZWJGcmFtZSAoV2ViSW50ZXJuYWwpCiAKIC0gKE5TU3RyaW5nICopX21hcmt1cFN0cmluZ0Zyb21S
YW5nZTooRE9NUmFuZ2UgKilyYW5nZSBub2RlczooTlNBcnJheSAqKilub2RlczsKIAotLSAoTlNS
ZWN0KV9jYXJldFJlY3RBdE5vZGU6KERPTU5vZGUgKilub2RlIG9mZnNldDooaW50KW9mZnNldCBh
ZmZpbml0eTooTlNTZWxlY3Rpb25BZmZpbml0eSlhZmZpbml0eTsKKy0gKE5TUmVjdClfY2FyZXRS
ZWN0QXRQb3NpdGlvbjooY29uc3QgV2ViQ29yZTo6UG9zaXRpb24mKXBvcyBhZmZpbml0eTooTlNT
ZWxlY3Rpb25BZmZpbml0eSlhZmZpbml0eTsKIC0gKE5TUmVjdClfZmlyc3RSZWN0Rm9yRE9NUmFu
Z2U6KERPTVJhbmdlICopcmFuZ2U7CiAtICh2b2lkKV9zY3JvbGxET01SYW5nZVRvVmlzaWJsZToo
RE9NUmFuZ2UgKilyYW5nZTsKIApJbmRleDogU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJU
ZXh0Q29tcGxldGlvbkNvbnRyb2xsZXIubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9t
YWMvV2ViVmlldy9XZWJUZXh0Q29tcGxldGlvbkNvbnRyb2xsZXIubW0JKHJldmlzaW9uIDc3Mzgw
KQorKysgU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJUZXh0Q29tcGxldGlvbkNvbnRyb2xs
ZXIubW0JKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2ltcG9ydCAiV2ViVGV4
dENvbXBsZXRpb25Db250cm9sbGVyLmgiCiAKKyNpbXBvcnQgIkRPTU5vZGVJbnRlcm5hbC5oIgog
I2ltcG9ydCAiRE9NUmFuZ2VJbnRlcm5hbC5oIgogI2ltcG9ydCAiV2ViRnJhbWVJbnRlcm5hbC5o
IgogI2ltcG9ydCAiV2ViSFRNTFZpZXdJbnRlcm5hbC5oIgpAQCAtMjAzLDcgKzIwNCw3IEBAIC0g
KHZvaWQpZG9Db21wbGV0aW9uCiAgICAgICAgICAgICBBU1NFUlQoIV9vcmlnaW5hbFN0cmluZyk7
ICAgICAgIC8vIHRoaXMgc2hvdWxkIG9ubHkgYmUgc2V0IElGRiB3ZSBoYXZlIGEgcG9wdXAgd2lu
ZG93CiAgICAgICAgICAgICBfb3JpZ2luYWxTdHJpbmcgPSBbW2ZyYW1lIF9zdHJpbmdGb3JSYW5n
ZTpzZWxlY3Rpb25dIHJldGFpbl07CiAgICAgICAgICAgICBbc2VsZiBfYnVpbGRVSV07Ci0gICAg
ICAgICAgICBOU1JlY3Qgd29yZFJlY3QgPSBbZnJhbWUgX2NhcmV0UmVjdEF0Tm9kZTpbd2hvbGVX
b3JkIHN0YXJ0Q29udGFpbmVyXSBvZmZzZXQ6W3dob2xlV29yZCBzdGFydE9mZnNldF0gYWZmaW5p
dHk6TlNTZWxlY3Rpb25BZmZpbml0eURvd25zdHJlYW1dOworICAgICAgICAgICAgTlNSZWN0IHdv
cmRSZWN0ID0gW2ZyYW1lIF9jYXJldFJlY3RBdFBvc2l0aW9uOlBvc2l0aW9uKGNvcmUoW3dob2xl
V29yZCBzdGFydENvbnRhaW5lcl0pLCBbd2hvbGVXb3JkIHN0YXJ0T2Zmc2V0XSwgUG9zaXRpb246
OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvcikgYWZmaW5pdHk6TlNTZWxlY3Rpb25BZmZpbml0eURv
d25zdHJlYW1dOwogICAgICAgICAgICAgLy8gKzEgdG8gYmUgdW5kZXIgdGhlIHdvcmQsIG5vdCB0
aGUgY2FyZXQKICAgICAgICAgICAgIC8vIEZJWE1FIC0gMzc2OTY1MiAtIFdyb25nIHBvc2l0aW9u
aW5nIGZvciByaWdodCB0byBsZWZ0IGxhbmd1YWdlcy4gIFdlIHNob3VsZCBsaW5lIHVwIHRoZSB1
cHBlcgogICAgICAgICAgICAgLy8gcmlnaHQgY29ybmVyIHdpdGggdGhlIGNhcmV0IGluc3RlYWQg
b2YgdXBwZXIgbGVmdCwgYW5kIHRoZSArMSB3b3VsZCBiZSBhIC0xLgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>81313</attachid>
            <date>2011-02-04 16:16:52 -0800</date>
            <delta_ts>2011-02-04 16:25:39 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-52919-20110204161651.patch</filename>
            <type>text/plain</type>
            <size>43684</size>
            <attacher name="Levi Weintraub">leviw</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc3NjkzKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsODUgQEAKKzIwMTEtMDItMDQgIExldmkgV2Vp
bnRyYXViICA8bGV2aXdAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFN0b3AgaW5zdGFudGlhdGluZyBsZWdhY3kgZWRpdGluZyBQ
b3NpdGlvbnMgaW4gVmlzaWJsZVBvc2l0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD01MjkxOQorCisgICAgICAgIENoYW5naW5nIFZpc2libGVQb3Np
dGlvbiBjb21wbGV0ZWx5IGF3YXkgZnJvbSBsZWdhY3kgcG9zaXRpb25zLgorCisgICAgICAgIE5v
IG5ldyB0ZXN0cyBzaW5jZSB0aGlzIGlzIGZ1bmN0aW9uYWx5IGVxdWl2YWxlbnQuCisKKyAgICAg
ICAgKiBXZWJDb3JlLmV4cC5pbjogUmVtb3ZpbmcgdGhlIGxlZ2FjeSBWaXNpYmxlUG9zaXRpb24g
Y29uc3RydWN0b3IgYW5kCisgICAgICAgIGFkZGluZyB0aGUgUG9zaXRpb25Jc09mZnNldEluQW5j
aG9yIHN5bWJvbC4gSWYgd2UgbXVzdCBjcmVhdGUgVmlzaWJsZVBvc2l0aW9ucworICAgICAgICAq
IGFjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBWE9i
amVjdENhY2hlOjp2aXNpYmxlUG9zaXRpb25Gb3JUZXh0TWFya2VyRGF0YSk6CisgICAgICAgICog
YWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OnN0YXJ0T2ZTdHlsZVJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OmVuZE9mU3R5bGVSYW5nZSk6
CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnZpc2libGVQb3Np
dGlvbkZvckluZGV4KToKKyAgICAgICAgKiBkb20vUG9zaXRpb24uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UG9zaXRpb246OnVwc3RyZWFtKTogRml4ZWQgdG8gY29ycmVjdGx5IHJlc3BlY3QgUG9z
aXRpb25Jc0FmdGVyQW5jaG9yCisgICAgICAgIChXZWJDb3JlOjpQb3NpdGlvbjo6ZG93bnN0cmVh
bSk6IGRpdHRvCisgICAgICAgICogZG9tL1JhbmdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJh
bmdlOjplZGl0aW5nU3RhcnRQb3NpdGlvbik6CisgICAgICAgICogZWRpdGluZy9FZGl0b3IuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpjYW5EZWxldGVSYW5nZSk6CisgICAgICAgICog
ZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6ZG9BcHBseSk6CisgICAgICAgICogZWRpdGluZy9TZWxl
Y3Rpb25Db250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdGlvbkNvbnRyb2xs
ZXI6OnNlbGVjdEZyYW1lRWxlbWVudEluUGFyZW50SWZGdWxseVNlbGVjdGVkKToKKyAgICAgICAg
KFdlYkNvcmU6OlNlbGVjdGlvbkNvbnRyb2xsZXI6OnNldFNlbGVjdGVkUmFuZ2UpOgorICAgICAg
ICAqIGVkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRJdGVy
YXRvcjo6c2hvdWxkUmVwcmVzZW50Tm9kZU9mZnNldFplcm8pOgorICAgICAgICAqIGVkaXRpbmcv
VHlwaW5nQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUeXBpbmdDb21tYW5kOjpkZWxl
dGVLZXlQcmVzc2VkKToKKyAgICAgICAgKiBlZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpWaXNpYmxlUG9zaXRpb246OmxlZnRWaXN1YWxseURpc3RpbmN0Q2Fu
ZGlkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlZpc2libGVQb3NpdGlvbjo6cmlnaHRWaXN1YWxs
eURpc3RpbmN0Q2FuZGlkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlZpc2libGVQb3NpdGlvbjo6
Y2Fub25pY2FsUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6VmlzaWJsZVBvc2l0aW9uOjpj
aGFyYWN0ZXJBZnRlcik6CisgICAgICAgIChXZWJDb3JlOjpWaXNpYmxlUG9zaXRpb246OmxvY2Fs
Q2FyZXRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6Om1ha2VSYW5nZSk6CisgICAgICAgIChXZWJD
b3JlOjpzdGFydFZpc2libGVQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjplbmRWaXNpYmxl
UG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6c2V0U3RhcnQpOgorICAgICAgICAoV2ViQ29y
ZTo6c2V0RW5kKToKKyAgICAgICAgKFdlYkNvcmU6OmlzRmlyc3RWaXNpYmxlUG9zaXRpb25Jbk5v
ZGUpOgorICAgICAgICAoV2ViQ29yZTo6aXNMYXN0VmlzaWJsZVBvc2l0aW9uSW5Ob2RlKToKKyAg
ICAgICAgKiBlZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5oOgorICAgICAgICAoV2ViQ29yZTo6Vmlz
aWJsZVBvc2l0aW9uOjpWaXNpYmxlUG9zaXRpb24pOgorICAgICAgICAqIGVkaXRpbmcvaHRtbGVk
aXRpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Zmlyc3RJblNwZWNpYWxFbGVtZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6Omxhc3RJblNwZWNpYWxFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OnZpc2libGVQb3NpdGlvbkJlZm9yZU5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6dmlzaWJsZVBv
c2l0aW9uQWZ0ZXJOb2RlKToKKyAgICAgICAgKiBlZGl0aW5nL3Zpc2libGVfdW5pdHMuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6c3RhcnRQb3NpdGlvbkZvckxpbmUpOgorICAgICAgICAoV2ViQ29y
ZTo6ZW5kUG9zaXRpb25Gb3JMaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OnByZXZpb3VzTGluZVBv
c2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Om5leHRMaW5lUG9zaXRpb24pOgorICAgICAgICAo
V2ViQ29yZTo6c3RhcnRPZlBhcmFncmFwaCk6CisgICAgICAgIChXZWJDb3JlOjplbmRPZlBhcmFn
cmFwaCk6CisgICAgICAgIChXZWJDb3JlOjplbmRPZkJsb2NrKToKKyAgICAgICAgKFdlYkNvcmU6
OnN0YXJ0T2ZEb2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjplbmRPZkRvY3VtZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OmxvZ2ljYWxTdGFydFBvc2l0aW9uRm9yTGluZSk6CisgICAgICAgIChX
ZWJDb3JlOjpsb2dpY2FsRW5kUG9zaXRpb25Gb3JMaW5lKToKKyAgICAgICAgKiBwYWdlL0RPTVNl
bGVjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpET01TZWxlY3Rpb246OmNvbGxhcHNlKToK
KyAgICAgICAgKFdlYkNvcmU6OkRPTVNlbGVjdGlvbjo6c2V0QmFzZUFuZEV4dGVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpET01TZWxlY3Rpb246OnNldFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OkRPTVNlbGVjdGlvbjo6ZXh0ZW5kKToKKyAgICAgICAgKiBwYWdlL0V2ZW50SGFuZGxlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OmhhbmRsZU1vdXNlUHJlc3NFdmVu
dFNpbmdsZUNsaWNrKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6Y3JlYXRlVmlzaWJsZVBvc2l0aW9uKToKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGV4dENvbnRyb2w6OnZpc2libGVQb3NpdGlvbkZvckluZGV4KToKKyAgICAgICAg
KiBzdmcvU1ZHVGV4dENvbnRlbnRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Rl
eHRDb250ZW50RWxlbWVudDo6c2VsZWN0U3ViU3RyaW5nKToKKwogMjAxMS0wMi0wNCAgSmVyIE5v
YmxlICA8amVyLm5vYmxlQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBFcmljIENh
cmxzb24uCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgkocmV2aXNpb24gNzczODApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgkod29ya2luZyBjb3B5KQpAQCAtMzk4LDcgKzM5OCw2
IEBAIF9fWk43V2ViQ29yZTE1U2Nyb2xsQWxpZ25tZW50MTlhbGlnblRvRWQKIF9fWk43V2ViQ29y
ZTE1U3RyaW5nVHJ1bmNhdG9yMTNyaWdodFRydW5jYXRlRVJLTjNXVEY2U3RyaW5nRWZSS05TXzRG
b250RWIKIF9fWk43V2ViQ29yZTE1U3RyaW5nVHJ1bmNhdG9yMTRjZW50ZXJUcnVuY2F0ZUVSS04z
V1RGNlN0cmluZ0VmUktOU180Rm9udEViCiBfX1pON1dlYkNvcmUxNVN0cmluZ1RydW5jYXRvcjV3
aWR0aEVSS04zV1RGNlN0cmluZ0VSS05TXzRGb250RWIKLV9fWk43V2ViQ29yZTE1VmlzaWJsZVBv
c2l0aW9uQzFFUE5TXzROb2RlRWlOU185RUFmZmluaXR5RQogX19aTjdXZWJDb3JlMTVWaXNpYmxl
UG9zaXRpb25DMUVSS05TXzhQb3NpdGlvbkVOU185RUFmZmluaXR5RQogX19aTjdXZWJDb3JlMTVk
ZWZhdWx0TGFuZ3VhZ2VFdgogX19aTjdXZWJDb3JlMTVyZXBvcnRFeGNlcHRpb25FUE4zSlNDOUV4
ZWNTdGF0ZUVOUzBfN0pTVmFsdWVFCkBAIC03ODAsNiArNzc5LDcgQEAgX19aTjdXZWJDb3JlOEdy
YWRpZW50MTJhZGRDb2xvclN0b3BFZlJLTgogX19aTjdXZWJDb3JlOEdyYWRpZW50QzFFUktOU18x
MEZsb2F0UG9pbnRFUzNfCiBfX1pON1dlYkNvcmU4SW50UG9pbnRDMUVSSzhfTlNQb2ludAogX19a
TjdXZWJDb3JlOFBvc2l0aW9uQzFFTjNXVEYxMFBhc3NSZWZQdHJJTlNfNE5vZGVFRUVpCitfX1pO
N1dlYkNvcmU4UG9zaXRpb25DMUVOM1dURjEwUGFzc1JlZlB0cklOU180Tm9kZUVFRWlOUzBfMTBB
bmNob3JUeXBlRQogX19aTjdXZWJDb3JlOFNldHRpbmdzMTRzZXRKYXZhRW5hYmxlZEViCiBfX1pO
N1dlYkNvcmU4U2V0dGluZ3MxNXNldFdlYkdMRW5hYmxlZEViCiBfX1pON1dlYkNvcmU4U2V0dGlu
Z3MxNnNldFVzZXNQYWdlQ2FjaGVFYgpJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BWE9iamVjdENhY2hlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwCShyZXZpc2lvbiA3NzM4MCkKKysrIFNvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3
Myw3ICs1NzMsNyBAQCBWaXNpYmxlUG9zaXRpb24gQVhPYmplY3RDYWNoZTo6dmlzaWJsZVBvCiAg
ICAgaWYgKCFpc05vZGVJblVzZSh0ZXh0TWFya2VyRGF0YS5ub2RlKSkKICAgICAgICAgcmV0dXJu
IFZpc2libGVQb3NpdGlvbigpOwogICAgIAotICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9z
ID0gVmlzaWJsZVBvc2l0aW9uKHRleHRNYXJrZXJEYXRhLm5vZGUsIHRleHRNYXJrZXJEYXRhLm9m
ZnNldCwgdGV4dE1hcmtlckRhdGEuYWZmaW5pdHkpOworICAgIFZpc2libGVQb3NpdGlvbiB2aXNp
YmxlUG9zID0gVmlzaWJsZVBvc2l0aW9uKFBvc2l0aW9uKHRleHRNYXJrZXJEYXRhLm5vZGUsIHRl
eHRNYXJrZXJEYXRhLm9mZnNldCwgUG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvciks
IHRleHRNYXJrZXJEYXRhLmFmZmluaXR5KTsKICAgICBQb3NpdGlvbiBkZWVwUG9zID0gdmlzaWJs
ZVBvcy5kZWVwRXF1aXZhbGVudCgpOwogICAgIGlmIChkZWVwUG9zLmlzTnVsbCgpKQogICAgICAg
ICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAJKHJldmlzaW9uIDc3Mzgw
KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzM2LDcgKzMzNiw3IEBAIHN0YXRpYyBWaXNpYmxlUG9zaXRp
b24gc3RhcnRPZlN0eWxlUmFuZ2UKICAgICAgICAgc3RhcnRSZW5kZXJlciA9IHI7CiAgICAgfQog
Ci0gICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihzdGFydFJlbmRlcmVyLT5ub2RlKCksIDAsIFZQ
X0RFRkFVTFRfQUZGSU5JVFkpOworICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oZmlyc3RQb3Np
dGlvbkluT3JCZWZvcmVOb2RlKHN0YXJ0UmVuZGVyZXItPm5vZGUoKSksIFZQX0RFRkFVTFRfQUZG
SU5JVFkpOwogfQogCiBzdGF0aWMgVmlzaWJsZVBvc2l0aW9uIGVuZE9mU3R5bGVSYW5nZShjb25z
dCBWaXNpYmxlUG9zaXRpb24mIHZpc2libGVQb3MpCkBAIC0zNTksNyArMzU5LDcgQEAgc3RhdGlj
IFZpc2libGVQb3NpdGlvbiBlbmRPZlN0eWxlUmFuZ2UoYwogICAgICAgICBlbmRSZW5kZXJlciA9
IHI7CiAgICAgfQogCi0gICAgcmV0dXJuIGxhc3REZWVwRWRpdGluZ1Bvc2l0aW9uRm9yTm9kZShl
bmRSZW5kZXJlci0+bm9kZSgpKTsKKyAgICByZXR1cm4gbGFzdFBvc2l0aW9uSW5PckFmdGVyTm9k
ZShlbmRSZW5kZXJlci0+bm9kZSgpKTsKIH0KIAogVmlzaWJsZVBvc2l0aW9uUmFuZ2UgQWNjZXNz
aWJpbGl0eU9iamVjdDo6c3R5bGVSYW5nZUZvclBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlv
biYgdmlzaWJsZVBvcykgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAkocmV2aXNpb24g
NzczODApCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5k
ZXJPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDU5LDE0ICsyNDU5LDE0IEBAIFZpc2li
bGVQb3NpdGlvbiBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWMKICAgICAgICAgcmV0dXJuIFZpc2li
bGVQb3NpdGlvbigpOwogICAgIAogICAgIGlmIChpbmRleCA8PSAwKQotICAgICAgICByZXR1cm4g
VmlzaWJsZVBvc2l0aW9uKG5vZGUsIDAsIERPV05TVFJFQU0pOworICAgICAgICByZXR1cm4gVmlz
aWJsZVBvc2l0aW9uKGZpcnN0UG9zaXRpb25Jbk9yQmVmb3JlTm9kZShub2RlKSwgRE9XTlNUUkVB
TSk7CiAgICAgCiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgUmVmUHRyPFJhbmdlPiBy
YW5nZSA9IFJhbmdlOjpjcmVhdGUobV9yZW5kZXJlci0+ZG9jdW1lbnQoKSk7CiAgICAgcmFuZ2Ut
PnNlbGVjdE5vZGVDb250ZW50cyhub2RlLCBlYyk7CiAgICAgQ2hhcmFjdGVySXRlcmF0b3IgaXQo
cmFuZ2UuZ2V0KCkpOwogICAgIGl0LmFkdmFuY2UoaW5kZXggLSAxKTsKLSAgICByZXR1cm4gVmlz
aWJsZVBvc2l0aW9uKGl0LnJhbmdlKCktPmVuZENvbnRhaW5lcihlYyksIGl0LnJhbmdlKCktPmVu
ZE9mZnNldChlYyksIFVQU1RSRUFNKTsKKyAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKFBvc2l0
aW9uKGl0LnJhbmdlKCktPmVuZENvbnRhaW5lcihlYyksIGl0LnJhbmdlKCktPmVuZE9mZnNldChl
YyksIFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3IpLCBVUFNUUkVBTSk7CiB9CiAg
ICAgCiBpbnQgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6aW5kZXhGb3JWaXNpYmxlUG9zaXRp
b24oY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBwb3MpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9kb20vUG9zaXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Qb3Np
dGlvbi5jcHAJKHJldmlzaW9uIDc3MzgwKQorKysgU291cmNlL1dlYkNvcmUvZG9tL1Bvc2l0aW9u
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEzLDcgKzUxMyw3IEBAIFBvc2l0aW9uIFBvc2l0aW9u
Ojp1cHN0cmVhbShFZGl0aW5nQm91bmQKICAgICAKICAgICAvLyBpdGVyYXRlIGJhY2t3YXJkIGZy
b20gdGhlcmUsIGxvb2tpbmcgZm9yIGEgcXVhbGlmaWVkIHBvc2l0aW9uCiAgICAgTm9kZSogYm91
bmRhcnkgPSBlbmNsb3NpbmdWaXN1YWxCb3VuZGFyeShzdGFydE5vZGUpOwotICAgIFBvc2l0aW9u
SXRlcmF0b3IgbGFzdFZpc2libGUgPSAqdGhpczsKKyAgICBQb3NpdGlvbkl0ZXJhdG9yIGxhc3RW
aXNpYmxlID0gbV9hbmNob3JUeXBlID09IFBvc2l0aW9uSXNBZnRlckFuY2hvciA/IFBvc2l0aW9u
KG1fYW5jaG9yTm9kZSwgY2FyZXRNYXhPZmZzZXQobV9hbmNob3JOb2RlLmdldCgpKSkgOiAqdGhp
czsKICAgICBQb3NpdGlvbkl0ZXJhdG9yIGN1cnJlbnRQb3MgPSBsYXN0VmlzaWJsZTsKICAgICBi
b29sIHN0YXJ0RWRpdGFibGUgPSBzdGFydE5vZGUtPmlzQ29udGVudEVkaXRhYmxlKCk7CiAgICAg
Tm9kZSogbGFzdE5vZGUgPSBzdGFydE5vZGU7CkBAIC02MzQsNyArNjM0LDcgQEAgUG9zaXRpb24g
UG9zaXRpb246OmRvd25zdHJlYW0oRWRpdGluZ0JvdQogCiAgICAgLy8gaXRlcmF0ZSBmb3J3YXJk
IGZyb20gdGhlcmUsIGxvb2tpbmcgZm9yIGEgcXVhbGlmaWVkIHBvc2l0aW9uCiAgICAgTm9kZSog
Ym91bmRhcnkgPSBlbmNsb3NpbmdWaXN1YWxCb3VuZGFyeShzdGFydE5vZGUpOwotICAgIFBvc2l0
aW9uSXRlcmF0b3IgbGFzdFZpc2libGUgPSAqdGhpczsKKyAgICBQb3NpdGlvbkl0ZXJhdG9yIGxh
c3RWaXNpYmxlID0gbV9hbmNob3JUeXBlID09IFBvc2l0aW9uSXNBZnRlckFuY2hvciA/IFBvc2l0
aW9uKG1fYW5jaG9yTm9kZSwgY2FyZXRNYXhPZmZzZXQobV9hbmNob3JOb2RlLmdldCgpKSkgOiAq
dGhpczsKICAgICBQb3NpdGlvbkl0ZXJhdG9yIGN1cnJlbnRQb3MgPSBsYXN0VmlzaWJsZTsKICAg
ICBib29sIHN0YXJ0RWRpdGFibGUgPSBzdGFydE5vZGUtPmlzQ29udGVudEVkaXRhYmxlKCk7CiAg
ICAgTm9kZSogbGFzdE5vZGUgPSBzdGFydE5vZGU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20v
UmFuZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5jcHAJKHJl
dmlzaW9uIDc3MzgwKQorKysgU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTU3MCw3ICsxNTcwLDcgQEAgUG9zaXRpb24gUmFuZ2U6OmVkaXRpbmdTdGFydFBv
c2l0aW9uKCkgYwogICAgIC8vIEl0IGlzIGltcG9ydGFudCB0byBza2lwIGNlcnRhaW4gaXJyZWxl
dmFudCBjb250ZW50IGF0IHRoZSBzdGFydCBvZiB0aGUgc2VsZWN0aW9uLCBzbyB3ZSBkbyBub3Qg
d2luZCB1cCAKICAgICAvLyB3aXRoIGEgc3B1cmlvdXMgIm1peGVkIiBzdHlsZS4KICAgICAKLSAg
ICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvc2l0aW9uKG1fc3RhcnQuY29udGFpbmVyKCksIG1f
c3RhcnQub2Zmc2V0KCksIFZQX0RFRkFVTFRfQUZGSU5JVFkpOworICAgIFZpc2libGVQb3NpdGlv
biB2aXNpYmxlUG9zaXRpb24oUG9zaXRpb24obV9zdGFydC5jb250YWluZXIoKSwgbV9zdGFydC5v
ZmZzZXQoKSwgUG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvciksIFZQX0RFRkFVTFRf
QUZGSU5JVFkpOwogICAgIGlmICh2aXNpYmxlUG9zaXRpb24uaXNOdWxsKCkpCiAgICAgICAgIHJl
dHVybiBQb3NpdGlvbigpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCShyZXZp
c2lvbiA3NzM4MCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjkwLDcgKzI5MCw3IEBAIGJvb2wgRWRpdG9yOjpjYW5EZWxldGVSYW5nZShS
YW5nZSogcmFuZ2UKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIGlmIChyYW5nZS0+
Y29sbGFwc2VkKGVjKSkgewotICAgICAgICBWaXNpYmxlUG9zaXRpb24gc3RhcnQoc3RhcnRDb250
YWluZXIsIHJhbmdlLT5zdGFydE9mZnNldChlYyksIERPV05TVFJFQU0pOworICAgICAgICBWaXNp
YmxlUG9zaXRpb24gc3RhcnQoUG9zaXRpb24oc3RhcnRDb250YWluZXIsIHJhbmdlLT5zdGFydE9m
ZnNldChlYyksIFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3IpLCBET1dOU1RSRUFN
KTsKICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHByZXZpb3VzID0gc3RhcnQucHJldmlvdXMoKTsK
ICAgICAgICAgLy8gRklYTUU6IFdlIHNvbWV0aW1lcyBhbGxvdyBkZWxldGlvbnMgYXQgdGhlIHN0
YXJ0IG9mIGVkaXRhYmxlIHJvb3RzLCBsaWtlIHdoZW4gdGhlIGNhcmV0IGlzIGluIGFuIGVtcHR5
IGxpc3QgaXRlbS4KICAgICAgICAgaWYgKHByZXZpb3VzLmlzTnVsbCgpIHx8IHByZXZpb3VzLmRl
ZXBFcXVpdmFsZW50KCkubm9kZSgpLT5yb290RWRpdGFibGVFbGVtZW50KCkgIT0gc3RhcnRDb250
YWluZXItPnJvb3RFZGl0YWJsZUVsZW1lbnQoKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwCShyZXZpc2lvbiA3NzM4MCkK
KysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC04ODQsNyArODg0LDcgQEAgdm9pZCBSZXBsYWNlU2VsZWN0aW9uQ29t
bWFuZDo6ZG9BcHBseSgpCiAgICAgTm9kZSogZW5kQlIgPSBpbnNlcnRpb25Qb3MuZG93bnN0cmVh
bSgpLm5vZGUoKS0+aGFzVGFnTmFtZShiclRhZykgPyBpbnNlcnRpb25Qb3MuZG93bnN0cmVhbSgp
Lm5vZGUoKSA6IDA7CiAgICAgVmlzaWJsZVBvc2l0aW9uIG9yaWdpbmFsVmlzUG9zQmVmb3JlRW5k
QlI7CiAgICAgaWYgKGVuZEJSKQotICAgICAgICBvcmlnaW5hbFZpc1Bvc0JlZm9yZUVuZEJSID0g
VmlzaWJsZVBvc2l0aW9uKGVuZEJSLCAwLCBET1dOU1RSRUFNKS5wcmV2aW91cygpOworICAgICAg
ICBvcmlnaW5hbFZpc1Bvc0JlZm9yZUVuZEJSID0gVmlzaWJsZVBvc2l0aW9uKFBvc2l0aW9uKGVu
ZEJSLCBQb3NpdGlvbjo6UG9zaXRpb25Jc0JlZm9yZUFuY2hvciksIERPV05TVFJFQU0pLnByZXZp
b3VzKCk7CiAgICAgCiAgICAgc3RhcnRCbG9jayA9IGVuY2xvc2luZ0Jsb2NrKGluc2VydGlvblBv
cy5ub2RlKCkpOwogICAgIApJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9TZWxlY3Rpb25D
b250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NlbGVj
dGlvbkNvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiA3NzM4MCkKKysrIFNvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvU2VsZWN0aW9uQ29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMTUsOCAr
MTMxNSw4IEBAIHZvaWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6c2VsZWN0RnJhbWVFbGUKIAogICAg
IC8vIENyZWF0ZSBjb21wdXRlIHBvc2l0aW9ucyBiZWZvcmUgYW5kIGFmdGVyIHRoZSBlbGVtZW50
LgogICAgIHVuc2lnbmVkIG93bmVyRWxlbWVudE5vZGVJbmRleCA9IG93bmVyRWxlbWVudC0+bm9k
ZUluZGV4KCk7Ci0gICAgVmlzaWJsZVBvc2l0aW9uIGJlZm9yZU93bmVyRWxlbWVudChWaXNpYmxl
UG9zaXRpb24ob3duZXJFbGVtZW50UGFyZW50LCBvd25lckVsZW1lbnROb2RlSW5kZXgsIFNFTF9E
RUZBVUxUX0FGRklOSVRZKSk7Ci0gICAgVmlzaWJsZVBvc2l0aW9uIGFmdGVyT3duZXJFbGVtZW50
KFZpc2libGVQb3NpdGlvbihvd25lckVsZW1lbnRQYXJlbnQsIG93bmVyRWxlbWVudE5vZGVJbmRl
eCArIDEsIFZQX1VQU1RSRUFNX0lGX1BPU1NJQkxFKSk7CisgICAgVmlzaWJsZVBvc2l0aW9uIGJl
Zm9yZU93bmVyRWxlbWVudChWaXNpYmxlUG9zaXRpb24oUG9zaXRpb24ob3duZXJFbGVtZW50UGFy
ZW50LCBvd25lckVsZW1lbnROb2RlSW5kZXgsIFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5B
bmNob3IpLCBTRUxfREVGQVVMVF9BRkZJTklUWSkpOworICAgIFZpc2libGVQb3NpdGlvbiBhZnRl
ck93bmVyRWxlbWVudChWaXNpYmxlUG9zaXRpb24oUG9zaXRpb24ob3duZXJFbGVtZW50UGFyZW50
LCBvd25lckVsZW1lbnROb2RlSW5kZXggKyAxLCBQb3NpdGlvbjo6UG9zaXRpb25Jc09mZnNldElu
QW5jaG9yKSwgVlBfVVBTVFJFQU1fSUZfUE9TU0lCTEUpKTsKIAogICAgIC8vIEZvY3VzIG9uIHRo
ZSBwYXJlbnQgZnJhbWUsIGFuZCB0aGVuIHNlbGVjdCBmcm9tIGJlZm9yZSB0aGlzIGVsZW1lbnQg
dG8gYWZ0ZXIuCiAgICAgVmlzaWJsZVNlbGVjdGlvbiBuZXdTZWxlY3Rpb24oYmVmb3JlT3duZXJF
bGVtZW50LCBhZnRlck93bmVyRWxlbWVudCk7CkBAIC0xMzg3LDggKzEzODcsOCBAQCBib29sIFNl
bGVjdGlvbkNvbnRyb2xsZXI6OnNldFNlbGVjdGVkUmFuCiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAKICAgICAvLyBGSVhNRTogQ2FuIHdlIHByb3ZpZGUgZXh0ZW50QWZmaW5pdHk/Ci0gICAg
VmlzaWJsZVBvc2l0aW9uIHZpc2libGVTdGFydChzdGFydENvbnRhaW5lciwgc3RhcnRPZmZzZXQs
IGNvbGxhcHNlZCA/IGFmZmluaXR5IDogRE9XTlNUUkVBTSk7Ci0gICAgVmlzaWJsZVBvc2l0aW9u
IHZpc2libGVFbmQoZW5kQ29udGFpbmVyLCBlbmRPZmZzZXQsIFNFTF9ERUZBVUxUX0FGRklOSVRZ
KTsKKyAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVN0YXJ0KFBvc2l0aW9uKHN0YXJ0Q29udGFp
bmVyLCBzdGFydE9mZnNldCwgUG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvciksIGNv
bGxhcHNlZCA/IGFmZmluaXR5IDogRE9XTlNUUkVBTSk7CisgICAgVmlzaWJsZVBvc2l0aW9uIHZp
c2libGVFbmQoUG9zaXRpb24oZW5kQ29udGFpbmVyLCBlbmRPZmZzZXQsIFBvc2l0aW9uOjpQb3Np
dGlvbklzT2Zmc2V0SW5BbmNob3IpLCBTRUxfREVGQVVMVF9BRkZJTklUWSk7CiAgICAgc2V0U2Vs
ZWN0aW9uKFZpc2libGVTZWxlY3Rpb24odmlzaWJsZVN0YXJ0LCB2aXNpYmxlRW5kKSwgY2xvc2VU
eXBpbmcpOwogICAgIHJldHVybiB0cnVlOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9UZXh0SXRlcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
VGV4dEl0ZXJhdG9yLmNwcAkocmV2aXNpb24gNzczODApCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL1RleHRJdGVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg3OCw4ICs4NzgsOCBAQCBi
b29sIFRleHRJdGVyYXRvcjo6c2hvdWxkUmVwcmVzZW50Tm9kZU9mCiAgICAgLy8gYW5kIGluIHRo
YXQgY2FzZSB3ZSdsbCBnZXQgbnVsbC4gV2UgZG9uJ3Qgd2FudCB0byBwdXQgaW4gbmV3bGluZXMg
YXQgdGhlIHN0YXJ0IGluIHRoYXQgY2FzZS4KICAgICAvLyBUaGUgY3VyclBvcy5pc05vdE51bGwo
KSBjaGVjayBpcyBuZWVkZWQgYmVjYXVzZSBwb3NpdGlvbnMgaW4gbm9uLUhUTUwgY29udGVudAog
ICAgIC8vIChsaWtlIFNWRykgZG8gbm90IGhhdmUgdmlzaWJsZSBwb3NpdGlvbnMsIGFuZCB3ZSBk
b24ndCB3YW50IHRvIGVtaXQgZm9yIHRoZW0gZWl0aGVyLgotICAgIFZpc2libGVQb3NpdGlvbiBz
dGFydFBvcyA9IFZpc2libGVQb3NpdGlvbihtX3N0YXJ0Q29udGFpbmVyLCBtX3N0YXJ0T2Zmc2V0
LCBET1dOU1RSRUFNKTsKLSAgICBWaXNpYmxlUG9zaXRpb24gY3VyclBvcyA9IFZpc2libGVQb3Np
dGlvbihtX25vZGUsIDAsIERPV05TVFJFQU0pOworICAgIFZpc2libGVQb3NpdGlvbiBzdGFydFBv
cyA9IFZpc2libGVQb3NpdGlvbihQb3NpdGlvbihtX3N0YXJ0Q29udGFpbmVyLCBtX3N0YXJ0T2Zm
c2V0LCBQb3NpdGlvbjo6UG9zaXRpb25Jc09mZnNldEluQW5jaG9yKSwgRE9XTlNUUkVBTSk7Cisg
ICAgVmlzaWJsZVBvc2l0aW9uIGN1cnJQb3MgPSBWaXNpYmxlUG9zaXRpb24oUG9zaXRpb24obV9u
b2RlLCBQb3NpdGlvbjo6UG9zaXRpb25Jc0JlZm9yZUFuY2hvciksIERPV05TVFJFQU0pOwogICAg
IHJldHVybiBzdGFydFBvcy5pc05vdE51bGwoKSAmJiBjdXJyUG9zLmlzTm90TnVsbCgpICYmICFp
blNhbWVMaW5lKHN0YXJ0UG9zLCBjdXJyUG9zKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwCShyZXZpc2lvbiA3NzM4MCkKKysrIFNvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvVHlwaW5nQ29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5NSw3ICs0
OTUsNyBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6OmRlbGV0ZUtleVByZXNzZWQoVGV4CiAgICAgICAg
ICAgICBzZWxlY3Rpb24ubW9kaWZ5KFNlbGVjdGlvbkNvbnRyb2xsZXI6OkFsdGVyYXRpb25FeHRl
bmQsIERpcmVjdGlvbkJhY2t3YXJkLCBncmFudWxhcml0eSk7CiAgICAgICAgIC8vIElmIHRoZSBj
YXJldCBpcyBqdXN0IGFmdGVyIGEgdGFibGUsIHNlbGVjdCB0aGUgdGFibGUgYW5kIGRvbid0IGRl
bGV0ZSBhbnl0aGluZy4KICAgICAgICAgfSBlbHNlIGlmIChOb2RlKiB0YWJsZSA9IGlzRmlyc3RQ
b3NpdGlvbkFmdGVyVGFibGUodmlzaWJsZVN0YXJ0KSkgewotICAgICAgICAgICAgc2V0RW5kaW5n
U2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24ocG9zaXRpb25BZnRlck5vZGUodGFibGUpLCBlbmRp
bmdTZWxlY3Rpb24oKS5zdGFydCgpLCBET1dOU1RSRUFNKSk7CisgICAgICAgICAgICBzZXRFbmRp
bmdTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbihwb3NpdGlvbkJlZm9yZU5vZGUodGFibGUpLCBl
bmRpbmdTZWxlY3Rpb24oKS5zdGFydCgpLCBET1dOU1RSRUFNKSk7CiAgICAgICAgICAgICB0eXBp
bmdBZGRlZFRvT3BlbkNvbW1hbmQoRGVsZXRlS2V5KTsKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlUG9zaXRpb24uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVBvc2l0aW9uLmNw
cAkocmV2aXNpb24gNzczODApCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVQb3Np
dGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDEyICs0OCw2IEBAIFZpc2libGVQb3NpdGlv
bjo6VmlzaWJsZVBvc2l0aW9uKGNvbnN0IFAKICAgICBpbml0KHBvcywgYWZmaW5pdHkpOwogfQog
Ci1WaXNpYmxlUG9zaXRpb246OlZpc2libGVQb3NpdGlvbihOb2RlICpub2RlLCBpbnQgb2Zmc2V0
LCBFQWZmaW5pdHkgYWZmaW5pdHkpCi17Ci0gICAgQVNTRVJUKG9mZnNldCA+PSAwKTsKLSAgICBp
bml0KFBvc2l0aW9uKG5vZGUsIG9mZnNldCksIGFmZmluaXR5KTsKLX0KLQogdm9pZCBWaXNpYmxl
UG9zaXRpb246OmluaXQoY29uc3QgUG9zaXRpb24mIHBvc2l0aW9uLCBFQWZmaW5pdHkgYWZmaW5p
dHkpCiB7CiAgICAgbV9hZmZpbml0eSA9IGFmZmluaXR5OwpAQCAtMTA2LDcgKzEwMCw3IEBAIFZp
c2libGVQb3NpdGlvbiBWaXNpYmxlUG9zaXRpb246OnByZXZpb3UKIFBvc2l0aW9uIFZpc2libGVQ
b3NpdGlvbjo6bGVmdFZpc3VhbGx5RGlzdGluY3RDYW5kaWRhdGUoKSBjb25zdAogewogICAgIFBv
c2l0aW9uIHAgPSBtX2RlZXBQb3NpdGlvbjsKLSAgICBpZiAoIXAubm9kZSgpKQorICAgIGlmIChw
LmlzTnVsbCgpKQogICAgICAgICByZXR1cm4gUG9zaXRpb24oKTsKIAogICAgIFBvc2l0aW9uIGRv
d25zdHJlYW1TdGFydCA9IHAuZG93bnN0cmVhbSgpOwpAQCAtMjQyLDcgKzIzNiw3IEBAIFZpc2li
bGVQb3NpdGlvbiBWaXNpYmxlUG9zaXRpb246OmxlZnQoYm8KIFBvc2l0aW9uIFZpc2libGVQb3Np
dGlvbjo6cmlnaHRWaXN1YWxseURpc3RpbmN0Q2FuZGlkYXRlKCkgY29uc3QKIHsKICAgICBQb3Np
dGlvbiBwID0gbV9kZWVwUG9zaXRpb247Ci0gICAgaWYgKCFwLm5vZGUoKSkKKyAgICBpZiAocC5p
c051bGwoKSkKICAgICAgICAgcmV0dXJuIFBvc2l0aW9uKCk7CiAKICAgICBQb3NpdGlvbiBkb3du
c3RyZWFtU3RhcnQgPSBwLmRvd25zdHJlYW0oKTsKQEAgLTQ1MSwxMCArNDQ1LDExIEBAIFBvc2l0
aW9uIFZpc2libGVQb3NpdGlvbjo6Y2Fub25pY2FsUG9zaXQKICAgICAvLyBUbyBmaXggdGhpcywg
d2UgbmVlZCB0byBlaXRoZXIgYSkgYWRkIGNvZGUgdG8gYWxsIHBhaW50Q2FyZXRzIHRvIHBhc3Mg
dGhlIHJlc3BvbnNpYmlsaXR5IG9mZiB0bwogICAgIC8vIHRoZSBhcHByb3ByaWF0ZSByZW5kZXJl
ciBmb3IgVmlzaWJsZVBvc2l0aW9uJ3MgbGlrZSB0aGVzZSwgb3IgYikgY2Fub25pY2FsaXplIHRv
IHRoZSByaWdodG1vc3QgY2FuZGlkYXRlCiAgICAgLy8gdW5sZXNzIHRoZSBhZmZpbml0eSBpcyB1
cHN0cmVhbS4KLSAgICBOb2RlKiBub2RlID0gcG9zaXRpb24ubm9kZSgpOwotICAgIGlmICghbm9k
ZSkKKyAgICBpZiAocG9zaXRpb24uaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiBQb3NpdGlvbigp
OwogCisgICAgTm9kZSogbm9kZSA9IHBvc2l0aW9uLmNvbnRhaW5lck5vZGUoKTsKKwogICAgIEFT
U0VSVChub2RlLT5kb2N1bWVudCgpKTsKICAgICBub2RlLT5kb2N1bWVudCgpLT51cGRhdGVMYXlv
dXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKIApAQCAtNTEwLDExICs1MDUsMTEgQEAgVUNo
YXIzMiBWaXNpYmxlUG9zaXRpb246OmNoYXJhY3RlckFmdGVyKAogICAgIC8vIFdlIGNhbm9uaWNh
bGl6ZSB0byB0aGUgZmlyc3Qgb2YgdHdvIGVxdWl2YWxlbnQgY2FuZGlkYXRlcywgYnV0IHRoZSBz
ZWNvbmQgb2YgdGhlIHR3byBjYW5kaWRhdGVzCiAgICAgLy8gaXMgdGhlIG9uZSB0aGF0IHdpbGwg
YmUgaW5zaWRlIHRoZSB0ZXh0IG5vZGUgY29udGFpbmluZyB0aGUgY2hhcmFjdGVyIGFmdGVyIHRo
aXMgdmlzaWJsZSBwb3NpdGlvbi4KICAgICBQb3NpdGlvbiBwb3MgPSBtX2RlZXBQb3NpdGlvbi5k
b3duc3RyZWFtKCk7Ci0gICAgTm9kZSogbm9kZSA9IHBvcy5ub2RlKCk7CisgICAgTm9kZSogbm9k
ZSA9IHBvcy5jb250YWluZXJOb2RlKCk7CiAgICAgaWYgKCFub2RlIHx8ICFub2RlLT5pc1RleHRO
b2RlKCkpCiAgICAgICAgIHJldHVybiAwOwotICAgIFRleHQqIHRleHROb2RlID0gc3RhdGljX2Nh
c3Q8VGV4dCo+KHBvcy5ub2RlKCkpOwotICAgIHVuc2lnbmVkIG9mZnNldCA9IHBvcy5kZXByZWNh
dGVkRWRpdGluZ09mZnNldCgpOworICAgIFRleHQqIHRleHROb2RlID0gc3RhdGljX2Nhc3Q8VGV4
dCo+KHBvcy5jb250YWluZXJOb2RlKCkpOworICAgIHVuc2lnbmVkIG9mZnNldCA9IHBvcy5vZmZz
ZXRJbkNvbnRhaW5lck5vZGUoKTsKICAgICB1bnNpZ25lZCBsZW5ndGggPSB0ZXh0Tm9kZS0+bGVu
Z3RoKCk7CiAgICAgaWYgKG9mZnNldCA+PSBsZW5ndGgpCiAgICAgICAgIHJldHVybiAwOwpAQCAt
NTI3LDExICs1MjIsMTEgQEAgVUNoYXIzMiBWaXNpYmxlUG9zaXRpb246OmNoYXJhY3RlckFmdGVy
KAogCiBJbnRSZWN0IFZpc2libGVQb3NpdGlvbjo6bG9jYWxDYXJldFJlY3QoUmVuZGVyT2JqZWN0
KiYgcmVuZGVyZXIpIGNvbnN0CiB7Ci0gICAgTm9kZSogbm9kZSA9IG1fZGVlcFBvc2l0aW9uLm5v
ZGUoKTsKLSAgICBpZiAoIW5vZGUpIHsKKyAgICBpZiAobV9kZWVwUG9zaXRpb24uaXNOdWxsKCkp
IHsKICAgICAgICAgcmVuZGVyZXIgPSAwOwogICAgICAgICByZXR1cm4gSW50UmVjdCgpOwogICAg
IH0KKyAgICBOb2RlKiBub2RlID0gbV9kZWVwUG9zaXRpb24uY29udGFpbmVyTm9kZSgpOwogICAg
IAogICAgIHJlbmRlcmVyID0gbm9kZS0+cmVuZGVyZXIoKTsKICAgICBpZiAoIXJlbmRlcmVyKQpA
QCAtNTk5LDE5ICs1OTQsMTkgQEAgUGFzc1JlZlB0cjxSYW5nZT4gbWFrZVJhbmdlKGNvbnN0IFZp
c2libAogICAgIAogICAgIFBvc2l0aW9uIHMgPSBzdGFydC5kZWVwRXF1aXZhbGVudCgpLnBhcmVu
dEFuY2hvcmVkRXF1aXZhbGVudCgpOwogICAgIFBvc2l0aW9uIGUgPSBlbmQuZGVlcEVxdWl2YWxl
bnQoKS5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKTsKLSAgICByZXR1cm4gUmFuZ2U6OmNyZWF0
ZShzLm5vZGUoKS0+ZG9jdW1lbnQoKSwgcy5ub2RlKCksIHMuZGVwcmVjYXRlZEVkaXRpbmdPZmZz
ZXQoKSwgZS5ub2RlKCksIGUuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSk7CisgICAgcmV0dXJu
IFJhbmdlOjpjcmVhdGUocy5jb250YWluZXJOb2RlKCktPmRvY3VtZW50KCksIHMuY29udGFpbmVy
Tm9kZSgpLCBzLm9mZnNldEluQ29udGFpbmVyTm9kZSgpLCBlLmNvbnRhaW5lck5vZGUoKSwgZS5v
ZmZzZXRJbkNvbnRhaW5lck5vZGUoKSk7CiB9CiAKIFZpc2libGVQb3NpdGlvbiBzdGFydFZpc2li
bGVQb3NpdGlvbihjb25zdCBSYW5nZSAqciwgRUFmZmluaXR5IGFmZmluaXR5KQogewogICAgIGlu
dCBleGNlcHRpb24gPSAwOwotICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oci0+c3RhcnRDb250
YWluZXIoZXhjZXB0aW9uKSwgci0+c3RhcnRPZmZzZXQoZXhjZXB0aW9uKSwgYWZmaW5pdHkpOwor
ICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oUG9zaXRpb24oci0+c3RhcnRDb250YWluZXIoZXhj
ZXB0aW9uKSwgci0+c3RhcnRPZmZzZXQoZXhjZXB0aW9uKSwgUG9zaXRpb246OlBvc2l0aW9uSXNP
ZmZzZXRJbkFuY2hvciksIGFmZmluaXR5KTsKIH0KIAogVmlzaWJsZVBvc2l0aW9uIGVuZFZpc2li
bGVQb3NpdGlvbihjb25zdCBSYW5nZSAqciwgRUFmZmluaXR5IGFmZmluaXR5KQogewogICAgIGlu
dCBleGNlcHRpb24gPSAwOwotICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oci0+ZW5kQ29udGFp
bmVyKGV4Y2VwdGlvbiksIHItPmVuZE9mZnNldChleGNlcHRpb24pLCBhZmZpbml0eSk7CisgICAg
cmV0dXJuIFZpc2libGVQb3NpdGlvbihQb3NpdGlvbihyLT5lbmRDb250YWluZXIoZXhjZXB0aW9u
KSwgci0+ZW5kT2Zmc2V0KGV4Y2VwdGlvbiksIFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5B
bmNob3IpLCBhZmZpbml0eSk7CiB9CiAKIGJvb2wgc2V0U3RhcnQoUmFuZ2UgKnIsIGNvbnN0IFZp
c2libGVQb3NpdGlvbiAmdmlzaWJsZVBvc2l0aW9uKQpAQCAtNjIwLDcgKzYxNSw3IEBAIGJvb2wg
c2V0U3RhcnQoUmFuZ2UgKnIsIGNvbnN0IFZpc2libGVQb3MKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIFBvc2l0aW9uIHAgPSB2aXNpYmxlUG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKS5wYXJl
bnRBbmNob3JlZEVxdWl2YWxlbnQoKTsKICAgICBpbnQgY29kZSA9IDA7Ci0gICAgci0+c2V0U3Rh
cnQocC5ub2RlKCksIHAuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSwgY29kZSk7CisgICAgci0+
c2V0U3RhcnQocC5jb250YWluZXJOb2RlKCksIHAub2Zmc2V0SW5Db250YWluZXJOb2RlKCksIGNv
ZGUpOwogICAgIHJldHVybiBjb2RlID09IDA7CiB9CiAKQEAgLTYzMCw3ICs2MjUsNyBAQCBib29s
IHNldEVuZChSYW5nZSAqciwgY29uc3QgVmlzaWJsZVBvc2l0CiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICBQb3NpdGlvbiBwID0gdmlzaWJsZVBvc2l0aW9uLmRlZXBFcXVpdmFsZW50KCkucGFy
ZW50QW5jaG9yZWRFcXVpdmFsZW50KCk7CiAgICAgaW50IGNvZGUgPSAwOwotICAgIHItPnNldEVu
ZChwLm5vZGUoKSwgcC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpLCBjb2RlKTsKKyAgICByLT5z
ZXRFbmQocC5jb250YWluZXJOb2RlKCksIHAub2Zmc2V0SW5Db250YWluZXJOb2RlKCksIGNvZGUp
OwogICAgIHJldHVybiBjb2RlID09IDA7CiB9CiAKQEAgLTY0NiwxMCArNjQxLDEyIEBAIGJvb2wg
aXNGaXJzdFZpc2libGVQb3NpdGlvbkluTm9kZShjb25zdCAKIHsKICAgICBpZiAodmlzaWJsZVBv
c2l0aW9uLmlzTnVsbCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgaWYgKCF2
aXNpYmxlUG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKS5ub2RlKCktPmlzRGVzY2VuZGFudE9mKG5v
ZGUpKQorCisgICAgUG9zaXRpb24gcCA9IHZpc2libGVQb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgp
OworCisgICAgaWYgKCFwLm5vZGUoKS0+aXNEZXNjZW5kYW50T2Yobm9kZSkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgCisKICAgICBWaXNpYmxlUG9zaXRpb24gcHJldmlvdXMgPSB2
aXNpYmxlUG9zaXRpb24ucHJldmlvdXMoKTsKICAgICByZXR1cm4gcHJldmlvdXMuaXNOdWxsKCkg
fHwgIXByZXZpb3VzLmRlZXBFcXVpdmFsZW50KCkubm9kZSgpLT5pc0Rlc2NlbmRhbnRPZihub2Rl
KTsKIH0KQEAgLTY1OCwxMCArNjU1LDEyIEBAIGJvb2wgaXNMYXN0VmlzaWJsZVBvc2l0aW9uSW5O
b2RlKGNvbnN0IFYKIHsKICAgICBpZiAodmlzaWJsZVBvc2l0aW9uLmlzTnVsbCgpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgaWYgKCF2aXNpYmxlUG9zaXRpb24uZGVlcEVxdWl2
YWxlbnQoKS5ub2RlKCktPmlzRGVzY2VuZGFudE9mKG5vZGUpKQorCisgICAgUG9zaXRpb24gcCA9
IHZpc2libGVQb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgpOworCisgICAgaWYgKCFwLm5vZGUoKS0+
aXNEZXNjZW5kYW50T2Yobm9kZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAg
ICAgICAKKwogICAgIFZpc2libGVQb3NpdGlvbiBuZXh0ID0gdmlzaWJsZVBvc2l0aW9uLm5leHQo
KTsKICAgICByZXR1cm4gbmV4dC5pc051bGwoKSB8fCAhbmV4dC5kZWVwRXF1aXZhbGVudCgpLm5v
ZGUoKS0+aXNEZXNjZW5kYW50T2Yobm9kZSk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL1Zpc2libGVQb3NpdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvVmlzaWJsZVBvc2l0aW9uLmgJKHJldmlzaW9uIDc3MzgwKQorKysgU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9WaXNpYmxlUG9zaXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNTQsNyArNTQsNiBA
QCBwdWJsaWM6CiAgICAgLy8gTk9URTogVVBTVFJFQU0gYWZmaW5pdHkgd2lsbCBiZSB1c2VkIG9u
bHkgaWYgcG9zIGlzIGF0IGVuZCBvZiBhIHdyYXBwZWQgbGluZSwKICAgICAvLyBvdGhlcndpc2Ug
aXQgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gRE9XTlNUUkVBTQogICAgIFZpc2libGVQb3NpdGlvbigp
IDogbV9hZmZpbml0eShWUF9ERUZBVUxUX0FGRklOSVRZKSB7IH0KLSAgICBWaXNpYmxlUG9zaXRp
b24oTm9kZSosIGludCBvZmZzZXQsIEVBZmZpbml0eSk7CiAgICAgVmlzaWJsZVBvc2l0aW9uKGNv
bnN0IFBvc2l0aW9uJiwgRUFmZmluaXR5ID0gVlBfREVGQVVMVF9BRkZJTklUWSk7CiAKICAgICB2
b2lkIGNsZWFyKCkgeyBtX2RlZXBQb3NpdGlvbi5jbGVhcigpOyB9CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcAkocmV2aXNpb24gNzczODApCisrKyBTb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDI2LDcgKzQy
Niw3IEBAIHN0YXRpYyBOb2RlKiBmaXJzdEluU3BlY2lhbEVsZW1lbnQoY29uc3QKICAgICBmb3Ig
KE5vZGUqIG4gPSBwb3Mubm9kZSgpOyBuICYmIG4tPnJvb3RFZGl0YWJsZUVsZW1lbnQoKSA9PSBy
b290RWRpdGFibGVFbGVtZW50OyBuID0gbi0+cGFyZW50Tm9kZSgpKQogICAgICAgICBpZiAoaXNT
cGVjaWFsRWxlbWVudChuKSkgewogICAgICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHZQb3MgPSBW
aXNpYmxlUG9zaXRpb24ocG9zLCBET1dOU1RSRUFNKTsKLSAgICAgICAgICAgIFZpc2libGVQb3Np
dGlvbiBmaXJzdEluRWxlbWVudCA9IFZpc2libGVQb3NpdGlvbihuLCAwLCBET1dOU1RSRUFNKTsK
KyAgICAgICAgICAgIFZpc2libGVQb3NpdGlvbiBmaXJzdEluRWxlbWVudCA9IFZpc2libGVQb3Np
dGlvbihmaXJzdFBvc2l0aW9uSW5PckJlZm9yZU5vZGUobiksIERPV05TVFJFQU0pOwogICAgICAg
ICAgICAgaWYgKGlzVGFibGVFbGVtZW50KG4pICYmIHZQb3MgPT0gZmlyc3RJbkVsZW1lbnQubmV4
dCgpKQogICAgICAgICAgICAgICAgIHJldHVybiBuOwogICAgICAgICAgICAgaWYgKHZQb3MgPT0g
Zmlyc3RJbkVsZW1lbnQpCkBAIC00NDIsNyArNDQyLDcgQEAgc3RhdGljIE5vZGUqIGxhc3RJblNw
ZWNpYWxFbGVtZW50KGNvbnN0IAogICAgIGZvciAoTm9kZSogbiA9IHBvcy5ub2RlKCk7IG4gJiYg
bi0+cm9vdEVkaXRhYmxlRWxlbWVudCgpID09IHJvb3RFZGl0YWJsZUVsZW1lbnQ7IG4gPSBuLT5w
YXJlbnROb2RlKCkpCiAgICAgICAgIGlmIChpc1NwZWNpYWxFbGVtZW50KG4pKSB7CiAgICAgICAg
ICAgICBWaXNpYmxlUG9zaXRpb24gdlBvcyA9IFZpc2libGVQb3NpdGlvbihwb3MsIERPV05TVFJF
QU0pOwotICAgICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIGxhc3RJbkVsZW1lbnQgPSBWaXNpYmxl
UG9zaXRpb24obiwgbi0+Y2hpbGROb2RlQ291bnQoKSwgRE9XTlNUUkVBTSk7CisgICAgICAgICAg
ICBWaXNpYmxlUG9zaXRpb24gbGFzdEluRWxlbWVudCA9IFZpc2libGVQb3NpdGlvbihQb3NpdGlv
bihuLCBuLT5jaGlsZE5vZGVDb3VudCgpLCBQb3NpdGlvbjo6UG9zaXRpb25Jc09mZnNldEluQW5j
aG9yKSwgRE9XTlNUUkVBTSk7CiAgICAgICAgICAgICBpZiAoaXNUYWJsZUVsZW1lbnQobikgJiYg
dlBvcyA9PSBsYXN0SW5FbGVtZW50LnByZXZpb3VzKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJu
IG47CiAgICAgICAgICAgICBpZiAodlBvcyA9PSBsYXN0SW5FbGVtZW50KQpAQCAtNTE5LDcgKzUx
OSw3IEBAIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9zaXRpb25CZWZvcmVOb2QKIHsKICAgICBB
U1NFUlQobm9kZSk7CiAgICAgaWYgKG5vZGUtPmNoaWxkTm9kZUNvdW50KCkpCi0gICAgICAgIHJl
dHVybiBWaXNpYmxlUG9zaXRpb24obm9kZSwgMCwgRE9XTlNUUkVBTSk7CisgICAgICAgIHJldHVy
biBWaXNpYmxlUG9zaXRpb24oZmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2RlKG5vZGUpLCBET1dO
U1RSRUFNKTsKICAgICBBU1NFUlQobm9kZS0+cGFyZW50Tm9kZSgpKTsKICAgICByZXR1cm4gcG9z
aXRpb25JblBhcmVudEJlZm9yZU5vZGUobm9kZSk7CiB9CkBAIC01MjksNyArNTI5LDcgQEAgVmlz
aWJsZVBvc2l0aW9uIHZpc2libGVQb3NpdGlvbkFmdGVyTm9kZQogewogICAgIEFTU0VSVChub2Rl
KTsKICAgICBpZiAobm9kZS0+Y2hpbGROb2RlQ291bnQoKSkKLSAgICAgICAgcmV0dXJuIFZpc2li
bGVQb3NpdGlvbihub2RlLCBub2RlLT5jaGlsZE5vZGVDb3VudCgpLCBET1dOU1RSRUFNKTsKKyAg
ICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihsYXN0UG9zaXRpb25Jbk9yQWZ0ZXJOb2RlKG5v
ZGUpLCBET1dOU1RSRUFNKTsKICAgICBBU1NFUlQobm9kZS0+cGFyZW50Tm9kZSgpKTsKICAgICBy
ZXR1cm4gcG9zaXRpb25JblBhcmVudEFmdGVyTm9kZShub2RlKTsKIH0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvdmlzaWJsZV91bml0cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvZWRpdGluZy92aXNpYmxlX3VuaXRzLmNwcAkocmV2aXNpb24gNzczODApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL3Zpc2libGVfdW5pdHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
ODMsNyArMzgzLDcgQEAgc3RhdGljIFZpc2libGVQb3NpdGlvbiBzdGFydFBvc2l0aW9uRm9yTAog
ICAgICAgICBzdGFydE9mZnNldCA9IHN0YXJ0VGV4dEJveC0+c3RhcnQoKTsKICAgICB9CiAgIAot
ICAgIFZpc2libGVQb3NpdGlvbiB2aXNQb3MgPSBWaXNpYmxlUG9zaXRpb24oc3RhcnROb2RlLCBz
dGFydE9mZnNldCwgRE9XTlNUUkVBTSk7CisgICAgVmlzaWJsZVBvc2l0aW9uIHZpc1BvcyA9IFZp
c2libGVQb3NpdGlvbihQb3NpdGlvbihzdGFydE5vZGUsIHN0YXJ0T2Zmc2V0LCBQb3NpdGlvbjo6
UG9zaXRpb25Jc09mZnNldEluQW5jaG9yKSwgRE9XTlNUUkVBTSk7CiAgICAgcmV0dXJuIHBvc2l0
aW9uQXZvaWRpbmdGaXJzdFBvc2l0aW9uSW5UYWJsZSh2aXNQb3MpOwogfQogCkBAIC00MjksMTcg
KzQyOSwxOSBAQCBzdGF0aWMgVmlzaWJsZVBvc2l0aW9uIGVuZFBvc2l0aW9uRm9yTGluCiAgICAg
ICAgIGVuZEJveCA9IGVuZEJveC0+cHJldkxlYWZDaGlsZCgpOwogICAgIH0KICAgICAKLSAgICBp
bnQgZW5kT2Zmc2V0ID0gMTsKKyAgICBQb3NpdGlvbiBwb3M7CiAgICAgaWYgKGVuZE5vZGUtPmhh
c1RhZ05hbWUoYnJUYWcpKSB7Ci0gICAgICAgIGVuZE9mZnNldCA9IDA7CisgICAgICAgIHBvcyA9
IFBvc2l0aW9uKGVuZE5vZGUsIFBvc2l0aW9uOjpQb3NpdGlvbklzQmVmb3JlQW5jaG9yKTsKICAg
ICB9IGVsc2UgaWYgKGVuZEJveC0+aXNJbmxpbmVUZXh0Qm94KCkpIHsKICAgICAgICAgSW5saW5l
VGV4dEJveCAqZW5kVGV4dEJveCA9IHN0YXRpY19jYXN0PElubGluZVRleHRCb3ggKj4oZW5kQm94
KTsKLSAgICAgICAgZW5kT2Zmc2V0ID0gZW5kVGV4dEJveC0+c3RhcnQoKTsKKyAgICAgICAgaW50
IGVuZE9mZnNldCA9IGVuZFRleHRCb3gtPnN0YXJ0KCk7CiAgICAgICAgIGlmICghZW5kVGV4dEJv
eC0+aXNMaW5lQnJlYWsoKSkKICAgICAgICAgICAgIGVuZE9mZnNldCArPSBlbmRUZXh0Qm94LT5s
ZW4oKTsKLSAgICB9CisgICAgICAgIHBvcyA9IFBvc2l0aW9uKGVuZE5vZGUsIGVuZE9mZnNldCwg
UG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvcik7CisgICAgfSBlbHNlCisgICAgICAg
IHBvcyA9IFBvc2l0aW9uKGVuZE5vZGUsIFBvc2l0aW9uOjpQb3NpdGlvbklzQWZ0ZXJBbmNob3Ip
OwogICAgIAotICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oZW5kTm9kZSwgZW5kT2Zmc2V0LCBW
UF9VUFNUUkVBTV9JRl9QT1NTSUJMRSk7CisgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihwb3Ms
IFZQX1VQU1RSRUFNX0lGX1BPU1NJQkxFKTsKIH0KIAogVmlzaWJsZVBvc2l0aW9uIGVuZE9mTGlu
ZShjb25zdCBWaXNpYmxlUG9zaXRpb24mIGMpCkBAIC01NzUsNyArNTc3LDcgQEAgVmlzaWJsZVBv
c2l0aW9uIHByZXZpb3VzTGluZVBvc2l0aW9uKGNvbgogICAgIC8vIE1vdmUgdG8gdGhlIHN0YXJ0
IG9mIHRoZSBjb250ZW50IGluIHRoaXMgYmxvY2ssIHdoaWNoIGVmZmVjdGl2ZWx5IG1vdmVzIHVz
CiAgICAgLy8gdG8gdGhlIHN0YXJ0IG9mIHRoZSBsaW5lIHdlJ3JlIG9uLgogICAgIEVsZW1lbnQq
IHJvb3RFbGVtZW50ID0gbm9kZS0+aXNDb250ZW50RWRpdGFibGUoKSA/IG5vZGUtPnJvb3RFZGl0
YWJsZUVsZW1lbnQoKSA6IG5vZGUtPmRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgpOwotICAg
IHJldHVybiBWaXNpYmxlUG9zaXRpb24ocm9vdEVsZW1lbnQsIDAsIERPV05TVFJFQU0pOworICAg
IHJldHVybiBWaXNpYmxlUG9zaXRpb24oUG9zaXRpb24ocm9vdEVsZW1lbnQsIDAsIFBvc2l0aW9u
OjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3IpLCBET1dOU1RSRUFNKTsKIH0KIAogc3RhdGljIE5v
ZGUqIG5leHRMZWFmV2l0aFNhbWVFZGl0YWJpbGl0eShOb2RlKiBub2RlLCBpbnQgb2Zmc2V0KQpA
QCAtNjgwLDcgKzY4Miw3IEBAIFZpc2libGVQb3NpdGlvbiBuZXh0TGluZVBvc2l0aW9uKGNvbnN0
IFYKICAgICAvLyBNb3ZlIHRvIHRoZSBlbmQgb2YgdGhlIGNvbnRlbnQgaW4gdGhpcyBibG9jaywg
d2hpY2ggZWZmZWN0aXZlbHkgbW92ZXMgdXMKICAgICAvLyB0byB0aGUgZW5kIG9mIHRoZSBsaW5l
IHdlJ3JlIG9uLgogICAgIEVsZW1lbnQqIHJvb3RFbGVtZW50ID0gbm9kZS0+aXNDb250ZW50RWRp
dGFibGUoKSA/IG5vZGUtPnJvb3RFZGl0YWJsZUVsZW1lbnQoKSA6IG5vZGUtPmRvY3VtZW50KCkt
PmRvY3VtZW50RWxlbWVudCgpOwotICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24ocm9vdEVsZW1l
bnQsIHJvb3RFbGVtZW50ID8gcm9vdEVsZW1lbnQtPmNoaWxkTm9kZUNvdW50KCkgOiAwLCBET1dO
U1RSRUFNKTsKKyAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKFBvc2l0aW9uKHJvb3RFbGVtZW50
LCByb290RWxlbWVudCA/IHJvb3RFbGVtZW50LT5jaGlsZE5vZGVDb3VudCgpIDogMCwgUG9zaXRp
b246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvciksIERPV05TVFJFQU0pOwogfQogCiAvLyAtLS0t
LS0tLS0KQEAgLTc1Miw2ICs3NTQsNyBAQCBWaXNpYmxlUG9zaXRpb24gc3RhcnRPZlBhcmFncmFw
aChjb25zdCBWCiAKICAgICBOb2RlICpub2RlID0gc3RhcnROb2RlOwogICAgIGludCBvZmZzZXQg
PSBwLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCk7CisgICAgUG9zaXRpb246OkFuY2hvclR5cGUg
dHlwZSA9IHAuYW5jaG9yVHlwZSgpOwogCiAgICAgTm9kZSAqbiA9IHN0YXJ0Tm9kZTsKICAgICB3
aGlsZSAobikgewpAQCAtNzcyLDYgKzc3NSw3IEBAIFZpc2libGVQb3NpdGlvbiBzdGFydE9mUGFy
YWdyYXBoKGNvbnN0IFYKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGlmIChyLT5pc1Rl
eHQoKSAmJiByLT5jYXJldE1heFJlbmRlcmVkT2Zmc2V0KCkgPiAwKSB7CisgICAgICAgICAgICB0
eXBlID0gUG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvcjsKICAgICAgICAgICAgIGlm
IChzdHlsZS0+cHJlc2VydmVOZXdsaW5lKCkpIHsKICAgICAgICAgICAgICAgICBjb25zdCBVQ2hh
ciogY2hhcnMgPSB0b1JlbmRlclRleHQociktPmNoYXJhY3RlcnMoKTsKICAgICAgICAgICAgICAg
ICBpbnQgaSA9IHRvUmVuZGVyVGV4dChyKS0+dGV4dExlbmd0aCgpOwpAQCAtNzgwLDIwICs3ODQs
MjMgQEAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0T2ZQYXJhZ3JhcGgoY29uc3QgVgogICAgICAgICAg
ICAgICAgICAgICBpID0gbWF4KDAsIG8pOwogICAgICAgICAgICAgICAgIHdoaWxlICgtLWkgPj0g
MCkKICAgICAgICAgICAgICAgICAgICAgaWYgKGNoYXJzW2ldID09ICdcbicpCi0gICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKG4sIGkgKyAxLCBET1dOU1RSRUFN
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oUG9zaXRp
b24obiwgaSArIDEsIHR5cGUpLCBET1dOU1RSRUFNKTsKICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIG5vZGUgPSBuOwogICAgICAgICAgICAgb2Zmc2V0ID0gMDsKICAgICAgICAgICAgIG4gPSBu
LT50cmF2ZXJzZVByZXZpb3VzTm9kZVBvc3RPcmRlcihzdGFydEJsb2NrKTsKICAgICAgICAgfSBl
bHNlIGlmIChlZGl0aW5nSWdub3Jlc0NvbnRlbnQobikgfHwgaXNUYWJsZUVsZW1lbnQobikpIHsK
ICAgICAgICAgICAgIG5vZGUgPSBuOwotICAgICAgICAgICAgb2Zmc2V0ID0gMDsKKyAgICAgICAg
ICAgIHR5cGUgPSBQb3NpdGlvbjo6UG9zaXRpb25Jc0JlZm9yZUFuY2hvcjsKICAgICAgICAgICAg
IG4gPSBuLT5wcmV2aW91c1NpYmxpbmcoKSA/IG4tPnByZXZpb3VzU2libGluZygpIDogbi0+dHJh
dmVyc2VQcmV2aW91c05vZGVQb3N0T3JkZXIoc3RhcnRCbG9jayk7CiAgICAgICAgIH0gZWxzZQog
ICAgICAgICAgICAgbiA9IG4tPnRyYXZlcnNlUHJldmlvdXNOb2RlUG9zdE9yZGVyKHN0YXJ0Qmxv
Y2spOwogICAgIH0KIAotICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24obm9kZSwgb2Zmc2V0LCBE
T1dOU1RSRUFNKTsKKyAgICBpZiAodHlwZSA9PSBQb3NpdGlvbjo6UG9zaXRpb25Jc09mZnNldElu
QW5jaG9yKQorICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKFBvc2l0aW9uKG5vZGUsIG9m
ZnNldCwgdHlwZSksIERPV05TVFJFQU0pOworICAgIAorICAgIHJldHVybiBWaXNpYmxlUG9zaXRp
b24oUG9zaXRpb24obm9kZSwgdHlwZSksIERPV05TVFJFQU0pOwogfQogCiBWaXNpYmxlUG9zaXRp
b24gZW5kT2ZQYXJhZ3JhcGgoY29uc3QgVmlzaWJsZVBvc2l0aW9uICZjLCBFZGl0aW5nQm91bmRh
cnlDcm9zc2luZ1J1bGUgYm91bmRhcnlDcm9zc2luZ1J1bGUpCkBAIC04MTIsNiArODE5LDcgQEAg
VmlzaWJsZVBvc2l0aW9uIGVuZE9mUGFyYWdyYXBoKGNvbnN0IFZpcwogICAgIAogICAgIE5vZGUg
Km5vZGUgPSBzdGFydE5vZGU7CiAgICAgaW50IG9mZnNldCA9IHAuZGVwcmVjYXRlZEVkaXRpbmdP
ZmZzZXQoKTsKKyAgICBQb3NpdGlvbjo6QW5jaG9yVHlwZSB0eXBlID0gcC5hbmNob3JUeXBlKCk7
CiAKICAgICBOb2RlICpuID0gc3RhcnROb2RlOwogICAgIHdoaWxlIChuKSB7CkBAIC04MzQsMjUg
Kzg0MiwyOSBAQCBWaXNpYmxlUG9zaXRpb24gZW5kT2ZQYXJhZ3JhcGgoY29uc3QgVmlzCiAgICAg
ICAgIC8vIEZJWE1FOiBXZSBhdm9pZCByZXR1cm5pbmcgYSBwb3NpdGlvbiB3aGVyZSB0aGUgcmVu
ZGVyZXIgY2FuJ3QgYWNjZXB0IHRoZSBjYXJldC4KICAgICAgICAgaWYgKHItPmlzVGV4dCgpICYm
IHItPmNhcmV0TWF4UmVuZGVyZWRPZmZzZXQoKSA+IDApIHsKICAgICAgICAgICAgIGludCBsZW5n
dGggPSB0b1JlbmRlclRleHQociktPnRleHRMZW5ndGgoKTsKKyAgICAgICAgICAgIHR5cGUgPSBQ
b3NpdGlvbjo6UG9zaXRpb25Jc09mZnNldEluQW5jaG9yOwogICAgICAgICAgICAgaWYgKHN0eWxl
LT5wcmVzZXJ2ZU5ld2xpbmUoKSkgewogICAgICAgICAgICAgICAgIGNvbnN0IFVDaGFyKiBjaGFy
cyA9IHRvUmVuZGVyVGV4dChyKS0+Y2hhcmFjdGVycygpOwogICAgICAgICAgICAgICAgIGludCBv
ID0gbiA9PSBzdGFydE5vZGUgPyBvZmZzZXQgOiAwOwogICAgICAgICAgICAgICAgIGZvciAoaW50
IGkgPSBvOyBpIDwgbGVuZ3RoOyArK2kpCiAgICAgICAgICAgICAgICAgICAgIGlmIChjaGFyc1tp
XSA9PSAnXG4nKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlv
bihuLCBpLCBET1dOU1RSRUFNKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBWaXNp
YmxlUG9zaXRpb24oUG9zaXRpb24obiwgaSwgdHlwZSksIERPV05TVFJFQU0pOwogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgbm9kZSA9IG47CiAgICAgICAgICAgICBvZmZzZXQgPSByLT5jYXJl
dE1heE9mZnNldCgpOwogICAgICAgICAgICAgbiA9IG4tPnRyYXZlcnNlTmV4dE5vZGUoc3RheUlu
c2lkZUJsb2NrKTsKICAgICAgICAgfSBlbHNlIGlmIChlZGl0aW5nSWdub3Jlc0NvbnRlbnQobikg
fHwgaXNUYWJsZUVsZW1lbnQobikpIHsKICAgICAgICAgICAgIG5vZGUgPSBuOwotICAgICAgICAg
ICAgb2Zmc2V0ID0gbGFzdE9mZnNldEZvckVkaXRpbmcobik7CisgICAgICAgICAgICB0eXBlID0g
UG9zaXRpb246OlBvc2l0aW9uSXNBZnRlckFuY2hvcjsKICAgICAgICAgICAgIG4gPSBuLT50cmF2
ZXJzZU5leHRTaWJsaW5nKHN0YXlJbnNpZGVCbG9jayk7CiAgICAgICAgIH0gZWxzZQogICAgICAg
ICAgICAgbiA9IG4tPnRyYXZlcnNlTmV4dE5vZGUoc3RheUluc2lkZUJsb2NrKTsKICAgICB9CiAK
LSAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKG5vZGUsIG9mZnNldCwgRE9XTlNUUkVBTSk7Cisg
ICAgaWYgKHR5cGUgPT0gUG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvcikKKyAgICAg
ICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihQb3NpdGlvbihub2RlLCBvZmZzZXQsIHR5cGUpLCBE
T1dOU1RSRUFNKTsKKworICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oUG9zaXRpb24obm9kZSwg
dHlwZSksIERPV05TVFJFQU0pOwogfQogCiBWaXNpYmxlUG9zaXRpb24gc3RhcnRPZk5leHRQYXJh
Z3JhcGgoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2aXNpYmxlUG9zaXRpb24pCkBAIC05MjYsNyAr
OTM4LDcgQEAgVmlzaWJsZVBvc2l0aW9uIGVuZE9mQmxvY2soY29uc3QgVmlzaWJsZQogCiAgICAg
Tm9kZSAqc3RhcnRCbG9jayA9IHN0YXJ0Tm9kZS0+ZW5jbG9zaW5nQmxvY2tGbG93RWxlbWVudCgp
OwogICAgIAotICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oc3RhcnRCbG9jaywgc3RhcnRCbG9j
ay0+Y2hpbGROb2RlQ291bnQoKSwgVlBfREVGQVVMVF9BRkZJTklUWSk7ICAgCisgICAgcmV0dXJu
IFZpc2libGVQb3NpdGlvbihQb3NpdGlvbihzdGFydEJsb2NrLCBzdGFydEJsb2NrLT5jaGlsZE5v
ZGVDb3VudCgpLCBQb3NpdGlvbjo6UG9zaXRpb25Jc09mZnNldEluQW5jaG9yKSwgVlBfREVGQVVM
VF9BRkZJTklUWSk7ICAgCiB9CiAKIGJvb2wgaW5TYW1lQmxvY2soY29uc3QgVmlzaWJsZVBvc2l0
aW9uICZhLCBjb25zdCBWaXNpYmxlUG9zaXRpb24gJmIpCkBAIC05NTEsNyArOTYzLDcgQEAgVmlz
aWJsZVBvc2l0aW9uIHN0YXJ0T2ZEb2N1bWVudChjb25zdCBObwogICAgIGlmICghbm9kZSkKICAg
ICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbigpOwogICAgIAotICAgIHJldHVybiBWaXNpYmxl
UG9zaXRpb24obm9kZS0+ZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCksIDAsIERPV05TVFJF
QU0pOworICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oUG9zaXRpb24obm9kZS0+ZG9jdW1lbnQo
KS0+ZG9jdW1lbnRFbGVtZW50KCksIDAsIFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNo
b3IpLCBET1dOU1RSRUFNKTsKIH0KIAogVmlzaWJsZVBvc2l0aW9uIHN0YXJ0T2ZEb2N1bWVudChj
b25zdCBWaXNpYmxlUG9zaXRpb24gJmMpCkBAIC05NjUsNyArOTc3LDcgQEAgVmlzaWJsZVBvc2l0
aW9uIGVuZE9mRG9jdW1lbnQoY29uc3QgTm9kZQogICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0
aW9uKCk7CiAgICAgCiAgICAgRWxlbWVudCogZG9jID0gbm9kZS0+ZG9jdW1lbnQoKS0+ZG9jdW1l
bnRFbGVtZW50KCk7Ci0gICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihkb2MsIGRvYy0+Y2hpbGRO
b2RlQ291bnQoKSwgRE9XTlNUUkVBTSk7CisgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihQb3Np
dGlvbihkb2MsIGRvYy0+Y2hpbGROb2RlQ291bnQoKSwgUG9zaXRpb246OlBvc2l0aW9uSXNPZmZz
ZXRJbkFuY2hvciksIERPV05TVFJFQU0pOwogfQogCiBWaXNpYmxlUG9zaXRpb24gZW5kT2ZEb2N1
bWVudChjb25zdCBWaXNpYmxlUG9zaXRpb24gJmMpCkBAIC0xMTIxLDkgKzExMzMsOCBAQCBzdGF0
aWMgVmlzaWJsZVBvc2l0aW9uIGxvZ2ljYWxTdGFydFBvc2l0CiAgICAgaWYgKCFsb2dpY2FsU3Rh
cnROb2RlKQogICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKCk7CiAKLSAgICBpbnQgc3Rh
cnRPZmZzZXQgPSBsb2dpY2FsU3RhcnRCb3gtPmNhcmV0TWluT2Zmc2V0KCk7Ci0gIAotICAgIFZp
c2libGVQb3NpdGlvbiB2aXNQb3MgPSBWaXNpYmxlUG9zaXRpb24obG9naWNhbFN0YXJ0Tm9kZSwg
c3RhcnRPZmZzZXQsIERPV05TVFJFQU0pOworICAgIFZpc2libGVQb3NpdGlvbiB2aXNQb3MgPSBs
b2dpY2FsU3RhcnROb2RlLT5pc1RleHROb2RlKCkgPyBWaXNpYmxlUG9zaXRpb24oUG9zaXRpb24o
bG9naWNhbFN0YXJ0Tm9kZSwgbG9naWNhbFN0YXJ0Qm94LT5jYXJldE1pbk9mZnNldCgpLCBQb3Np
dGlvbjo6UG9zaXRpb25Jc09mZnNldEluQW5jaG9yKSwgRE9XTlNUUkVBTSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogVmlzaWJs
ZVBvc2l0aW9uKFBvc2l0aW9uKGxvZ2ljYWxTdGFydE5vZGUsIFBvc2l0aW9uOjpQb3NpdGlvbklz
QmVmb3JlQW5jaG9yKSwgRE9XTlNUUkVBTSk7CiAgICAgcmV0dXJuIHBvc2l0aW9uQXZvaWRpbmdG
aXJzdFBvc2l0aW9uSW5UYWJsZSh2aXNQb3MpOwogfQogCkBAIC0xMTU3LDE3ICsxMTY4LDE5IEBA
IHN0YXRpYyBWaXNpYmxlUG9zaXRpb24gbG9naWNhbEVuZFBvc2l0aW8KICAgICBpZiAoIWxvZ2lj
YWxFbmROb2RlKQogICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKCk7CiAgICAgCi0gICAg
aW50IGVuZE9mZnNldCA9IDE7CisgICAgUG9zaXRpb24gcG9zOwogICAgIGlmIChsb2dpY2FsRW5k
Tm9kZS0+aGFzVGFnTmFtZShiclRhZykpCi0gICAgICAgIGVuZE9mZnNldCA9IDA7CisgICAgICAg
IHBvcyA9IFBvc2l0aW9uKGxvZ2ljYWxFbmROb2RlLCBQb3NpdGlvbjo6UG9zaXRpb25Jc0JlZm9y
ZUFuY2hvcik7CiAgICAgZWxzZSBpZiAobG9naWNhbEVuZEJveC0+aXNJbmxpbmVUZXh0Qm94KCkp
IHsKICAgICAgICAgSW5saW5lVGV4dEJveCogZW5kVGV4dEJveCA9IHN0YXRpY19jYXN0PElubGlu
ZVRleHRCb3gqPihsb2dpY2FsRW5kQm94KTsKLSAgICAgICAgZW5kT2Zmc2V0ID0gZW5kVGV4dEJv
eC0+c3RhcnQoKTsKKyAgICAgICAgaW50IGVuZE9mZnNldCA9IGVuZFRleHRCb3gtPnN0YXJ0KCk7
CiAgICAgICAgIGlmICghZW5kVGV4dEJveC0+aXNMaW5lQnJlYWsoKSkKICAgICAgICAgICAgIGVu
ZE9mZnNldCArPSBlbmRUZXh0Qm94LT5sZW4oKTsKLSAgICB9CisgICAgICAgIHBvcyA9IFBvc2l0
aW9uKGxvZ2ljYWxFbmROb2RlLCBlbmRPZmZzZXQsIFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0
SW5BbmNob3IpOworICAgIH0gZWxzZQorICAgICAgICBwb3MgPSBQb3NpdGlvbihsb2dpY2FsRW5k
Tm9kZSwgUG9zaXRpb246OlBvc2l0aW9uSXNBZnRlckFuY2hvcik7CiAgICAgCi0gICAgcmV0dXJu
IFZpc2libGVQb3NpdGlvbihsb2dpY2FsRW5kTm9kZSwgZW5kT2Zmc2V0LCBWUF9VUFNUUkVBTV9J
Rl9QT1NTSUJMRSk7CisgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihwb3MsIFZQX1VQU1RSRUFN
X0lGX1BPU1NJQkxFKTsKIH0KIAogYm9vbCBpblNhbWVMb2dpY2FsTGluZShjb25zdCBWaXNpYmxl
UG9zaXRpb24mIGEsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYgYikKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BhZ2UvRE9NU2VsZWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
YWdlL0RPTVNlbGVjdGlvbi5jcHAJKHJldmlzaW9uIDc3MzgwKQorKysgU291cmNlL1dlYkNvcmUv
cGFnZS9ET01TZWxlY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTEsNyArMjExLDcgQEAg
dm9pZCBET01TZWxlY3Rpb246OmNvbGxhcHNlKE5vZGUqIG5vZGUsIAogICAgIGlmICghaXNWYWxp
ZEZvclBvc2l0aW9uKG5vZGUpKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX2ZyYW1lLT5zZWxl
Y3Rpb24oKS0+bW92ZVRvKFZpc2libGVQb3NpdGlvbihub2RlLCBvZmZzZXQsIERPV05TVFJFQU0p
KTsKKyAgICBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+bW92ZVRvKFZpc2libGVQb3NpdGlvbihQb3Np
dGlvbihub2RlLCBvZmZzZXQsIFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3IpLCBE
T1dOU1RSRUFNKSk7CiB9CiAKIHZvaWQgRE9NU2VsZWN0aW9uOjpjb2xsYXBzZVRvRW5kKEV4Y2Vw
dGlvbkNvZGUmIGVjKQpAQCAtMjY0LDggKzI2NCw4IEBAIHZvaWQgRE9NU2VsZWN0aW9uOjpzZXRC
YXNlQW5kRXh0ZW50KE5vZGUKICAgICBpZiAoIWlzVmFsaWRGb3JQb3NpdGlvbihiYXNlTm9kZSkg
fHwgIWlzVmFsaWRGb3JQb3NpdGlvbihleHRlbnROb2RlKSkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVCYXNlID0gVmlzaWJsZVBvc2l0aW9uKGJhc2VOb2Rl
LCBiYXNlT2Zmc2V0LCBET1dOU1RSRUFNKTsKLSAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZUV4
dGVudCA9IFZpc2libGVQb3NpdGlvbihleHRlbnROb2RlLCBleHRlbnRPZmZzZXQsIERPV05TVFJF
QU0pOworICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlQmFzZSA9IFZpc2libGVQb3NpdGlvbihQ
b3NpdGlvbihiYXNlTm9kZSwgYmFzZU9mZnNldCwgUG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJ
bkFuY2hvciksIERPV05TVFJFQU0pOworICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlRXh0ZW50
ID0gVmlzaWJsZVBvc2l0aW9uKFBvc2l0aW9uKGV4dGVudE5vZGUsIGV4dGVudE9mZnNldCwgUG9z
aXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvciksIERPV05TVFJFQU0pOwogCiAgICAgbV9m
cmFtZS0+c2VsZWN0aW9uKCktPm1vdmVUbyh2aXNpYmxlQmFzZSwgdmlzaWJsZUV4dGVudCk7CiB9
CkBAIC0yODIsNyArMjgyLDcgQEAgdm9pZCBET01TZWxlY3Rpb246OnNldFBvc2l0aW9uKE5vZGUq
IG5vZAogICAgIGlmICghaXNWYWxpZEZvclBvc2l0aW9uKG5vZGUpKQogICAgICAgICByZXR1cm47
CiAKLSAgICBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+bW92ZVRvKFZpc2libGVQb3NpdGlvbihub2Rl
LCBvZmZzZXQsIERPV05TVFJFQU0pKTsKKyAgICBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+bW92ZVRv
KFZpc2libGVQb3NpdGlvbihQb3NpdGlvbihub2RlLCBvZmZzZXQsIFBvc2l0aW9uOjpQb3NpdGlv
bklzT2Zmc2V0SW5BbmNob3IpLCBET1dOU1RSRUFNKSk7CiB9CiAKIHZvaWQgRE9NU2VsZWN0aW9u
Ojptb2RpZnkoY29uc3QgU3RyaW5nJiBhbHRlclN0cmluZywgY29uc3QgU3RyaW5nJiBkaXJlY3Rp
b25TdHJpbmcsIGNvbnN0IFN0cmluZyYgZ3JhbnVsYXJpdHlTdHJpbmcpCkBAIC0zNTMsNyArMzUz
LDcgQEAgdm9pZCBET01TZWxlY3Rpb246OmV4dGVuZChOb2RlKiBub2RlLCBpbgogICAgIGlmICgh
aXNWYWxpZEZvclBvc2l0aW9uKG5vZGUpKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX2ZyYW1l
LT5zZWxlY3Rpb24oKS0+c2V0RXh0ZW50KFZpc2libGVQb3NpdGlvbihub2RlLCBvZmZzZXQsIERP
V05TVFJFQU0pKTsKKyAgICBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2V0RXh0ZW50KFZpc2libGVQ
b3NpdGlvbihQb3NpdGlvbihub2RlLCBvZmZzZXQsIFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0
SW5BbmNob3IpLCBET1dOU1RSRUFNKSk7CiB9CiAKIFBhc3NSZWZQdHI8UmFuZ2U+IERPTVNlbGVj
dGlvbjo6Z2V0UmFuZ2VBdChpbnQgaW5kZXgsIEV4Y2VwdGlvbkNvZGUmIGVjKQpJbmRleDogU291
cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAkocmV2aXNpb24gNzczODApCisrKyBTb3VyY2Uv
V2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3Myw3ICsz
NzMsNyBAQCBib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxlTW91c2VQcmVzc0V2ZW50CiAKICAgICBW
aXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvcyhpbm5lck5vZGUtPnJlbmRlcmVyKCktPnBvc2l0aW9u
Rm9yUG9pbnQoZXZlbnQubG9jYWxQb2ludCgpKSk7CiAgICAgaWYgKHZpc2libGVQb3MuaXNOdWxs
KCkpCi0gICAgICAgIHZpc2libGVQb3MgPSBWaXNpYmxlUG9zaXRpb24oaW5uZXJOb2RlLCAwLCBE
T1dOU1RSRUFNKTsKKyAgICAgICAgdmlzaWJsZVBvcyA9IFZpc2libGVQb3NpdGlvbihmaXJzdFBv
c2l0aW9uSW5PckJlZm9yZU5vZGUoaW5uZXJOb2RlKSwgRE9XTlNUUkVBTSk7CiAgICAgUG9zaXRp
b24gcG9zID0gdmlzaWJsZVBvcy5kZWVwRXF1aXZhbGVudCgpOwogICAgIAogICAgIFZpc2libGVT
ZWxlY3Rpb24gbmV3U2VsZWN0aW9uID0gbV9mcmFtZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAJKHJldmlz
aW9uIDc3MzgwKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI2NTQsNyArMjY1NCw3IEBAIFZpc2libGVQb3NpdGlvbiBSZW5k
ZXJPYmplY3Q6OmNyZWF0ZVZpc2kKICAgICAgICAgICAgIGlmIChjYW5kaWRhdGUubm9kZSgpLT5p
c0NvbnRlbnRFZGl0YWJsZSgpKQogICAgICAgICAgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRp
b24oY2FuZGlkYXRlLCBhZmZpbml0eSk7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIFZpc2li
bGVQb3NpdGlvbihub2RlLCBvZmZzZXQsIGFmZmluaXR5KTsKKyAgICAgICAgcmV0dXJuIFZpc2li
bGVQb3NpdGlvbihQb3NpdGlvbihub2RlLCBvZmZzZXQpLCBhZmZpbml0eSk7CiAgICAgfQogCiAg
ICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBjcm9zcyB0aGUgYm91bmRhcnkgYmV0d2VlbiBlZGl0YWJs
ZSBhbmQgbm9uLWVkaXRhYmxlCkBAIC0yNjY5LDcgKzI2NjksNyBAQCBWaXNpYmxlUG9zaXRpb24g
UmVuZGVyT2JqZWN0OjpjcmVhdGVWaXNpCiAgICAgICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIg
PSBjaGlsZDsKICAgICAgICAgd2hpbGUgKChyZW5kZXJlciA9IHJlbmRlcmVyLT5uZXh0SW5QcmVP
cmRlcihwYXJlbnQpKSkgewogICAgICAgICAgICAgaWYgKE5vZGUqIG5vZGUgPSByZW5kZXJlci0+
bm9kZSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24obm9kZSwgMCwg
RE9XTlNUUkVBTSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihmaXJz
dFBvc2l0aW9uSW5PckJlZm9yZU5vZGUobm9kZSksIERPV05TVFJFQU0pOwogICAgICAgICB9CiAK
ICAgICAgICAgLy8gRmluZCBub24tYW5vbnltb3VzIGNvbnRlbnQgYmVmb3JlLgpAQCAtMjY3OCwx
MiArMjY3OCwxMiBAQCBWaXNpYmxlUG9zaXRpb24gUmVuZGVyT2JqZWN0OjpjcmVhdGVWaXNpCiAg
ICAgICAgICAgICBpZiAocmVuZGVyZXIgPT0gcGFyZW50KQogICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgaWYgKE5vZGUqIG5vZGUgPSByZW5kZXJlci0+bm9kZSgpKQotICAgICAg
ICAgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24obGFzdERlZXBFZGl0aW5nUG9zaXRpb25G
b3JOb2RlKG5vZGUpLCBET1dOU1RSRUFNKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gVmlzaWJs
ZVBvc2l0aW9uKGxhc3RQb3NpdGlvbkluT3JBZnRlck5vZGUobm9kZSksIERPV05TVFJFQU0pOwog
ICAgICAgICB9CiAKICAgICAgICAgLy8gVXNlIHRoZSBwYXJlbnQgaXRzZWxmIHVubGVzcyBpdCB0
b28gaXMgYW5vbnltb3VzLgogICAgICAgICBpZiAoTm9kZSogbm9kZSA9IHBhcmVudC0+bm9kZSgp
KQotICAgICAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihub2RlLCAwLCBET1dOU1RSRUFN
KTsKKyAgICAgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oZmlyc3RQb3NpdGlvbkluT3JC
ZWZvcmVOb2RlKG5vZGUpLCBET1dOU1RSRUFNKTsKIAogICAgICAgICAvLyBSZXBlYXQgYXQgdGhl
IG5leHQgbGV2ZWwgdXAuCiAgICAgICAgIGNoaWxkID0gcGFyZW50OwpJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wuY3BwCShyZXZpc2lvbiA3NzM4
MCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMyMSw3ICszMjEsNyBAQCBQYXNzUmVmUHRyPFJhbmdlPiBSZW5kZXJU
ZXh0Q29udHJvbDo6c2VsCiBWaXNpYmxlUG9zaXRpb24gUmVuZGVyVGV4dENvbnRyb2w6OnZpc2li
bGVQb3NpdGlvbkZvckluZGV4KGludCBpbmRleCkgY29uc3QKIHsKICAgICBpZiAoaW5kZXggPD0g
MCkKLSAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihtX2lubmVyVGV4dC5nZXQoKSwgMCwg
RE9XTlNUUkVBTSk7CisgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oUG9zaXRpb24obV9p
bm5lclRleHQuZ2V0KCksIDAsIFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3IpLCBE
T1dOU1RSRUFNKTsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBSZWZQdHI8UmFuZ2U+
IHJhbmdlID0gUmFuZ2U6OmNyZWF0ZShkb2N1bWVudCgpKTsKICAgICByYW5nZS0+c2VsZWN0Tm9k
ZUNvbnRlbnRzKG1faW5uZXJUZXh0LmdldCgpLCBlYyk7CkBAIC0zMzIsNyArMzMyLDcgQEAgVmlz
aWJsZVBvc2l0aW9uIFJlbmRlclRleHRDb250cm9sOjp2aXNpYgogICAgIEFTU0VSVCghZWMpOwog
ICAgIGludCBlbmRPZmZzZXQgPSBpdC5yYW5nZSgpLT5lbmRPZmZzZXQoZWMpOwogICAgIEFTU0VS
VCghZWMpOwotICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oZW5kQ29udGFpbmVyLCBlbmRPZmZz
ZXQsIFVQU1RSRUFNKTsKKyAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKFBvc2l0aW9uKGVuZENv
bnRhaW5lciwgZW5kT2Zmc2V0LCBQb3NpdGlvbjo6UG9zaXRpb25Jc09mZnNldEluQW5jaG9yKSwg
VVBTVFJFQU0pOwogfQogCiBpbnQgUmVuZGVyVGV4dENvbnRyb2w6OmluZGV4Rm9yVmlzaWJsZVBv
c2l0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgcG9zKSBjb25zdApJbmRleDogU291cmNlL1dl
YkNvcmUvc3ZnL1NWR1RleHRDb250ZW50RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvc3ZnL1NWR1RleHRDb250ZW50RWxlbWVudC5jcHAJKHJldmlzaW9uIDc3MzgwKQor
KysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RleHRDb250ZW50RWxlbWVudC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE0NSw3ICsxNDUsNyBAQCB2b2lkIFNWR1RleHRDb250ZW50RWxlbWVudDo6c2Vs
ZWN0U3ViU3RyCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIEZpbmQgc2VsZWN0aW9uIHN0YXJ0
Ci0gICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0KGNvbnN0X2Nhc3Q8U1ZHVGV4dENvbnRlbnRFbGVt
ZW50Kj4odGhpcyksIDAsIFNFTF9ERUZBVUxUX0FGRklOSVRZKTsKKyAgICBWaXNpYmxlUG9zaXRp
b24gc3RhcnQoUG9zaXRpb24oY29uc3RfY2FzdDxTVkdUZXh0Q29udGVudEVsZW1lbnQqPih0aGlz
KSwgMCwgUG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvciksIFNFTF9ERUZBVUxUX0FG
RklOSVRZKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY2hhcm51bTsgKytpKQogICAg
ICAgICBzdGFydCA9IHN0YXJ0Lm5leHQoKTsKIApJbmRleDogU291cmNlL1dlYktpdC9tYWMvQ2hh
bmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwkocmV2aXNp
b24gNzc2OTMpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkK
QEAgLTEsMyArMSwxOSBAQAorMjAxMS0wMi0wNCAgTGV2aSBXZWludHJhdWIgIDxsZXZpd0BjaHJv
bWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgU3RvcCBpbnN0YW50aWF0aW5nIGxlZ2FjeSBlZGl0aW5nIFBvc2l0aW9ucyBpbiBWaXNpYmxl
UG9zaXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTUyOTE5CisKKyAgICAgICAgQ2hhbmdpbmcgdXNhZ2Ugb2YgbGVnYWN5IFZpc2libGVQb3NpdGlv
biBjb25zdHJ1Y3Rvci4gU2luY2Ugd2Ugd2VyZSBkZWFsaW5nCisgICAgICAgIHdpdGggcG9zaXRp
b25zIGZyb20gRE9NIFJhbmdlcywgd2UncmUgZ3VhcmFudGVlZCBhIHBhcmVudC1hbmNob3JlZCBw
b3NpdGlvbi4KKworICAgICAgICAqIFdlYlZpZXcvV2ViRnJhbWUubW06CisgICAgICAgICgtW1dl
YkZyYW1lIF9jYXJldFJlY3RBdFBvc2l0aW9uOmFmZmluaXR5Ol0pOgorICAgICAgICAqIFdlYlZp
ZXcvV2ViRnJhbWVJbnRlcm5hbC5oOgorICAgICAgICAqIFdlYlZpZXcvV2ViVGV4dENvbXBsZXRp
b25Db250cm9sbGVyLm1tOgorICAgICAgICAoLVtXZWJUZXh0Q29tcGxldGlvbkNvbnRyb2xsZXIg
ZG9Db21wbGV0aW9uXSk6CisKIDIwMTEtMDItMDMgIFl1cnkgU2VtaWtoYXRza3kgIDx5dXJ5c0Bj
aHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgUGF2ZWwgRmVsZG1hbi4KSW5kZXg6
IFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQkocmV2aXNpb24gNzczODApCisrKyBT
b3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCSh3b3JraW5nIGNvcHkpCkBAIC02
NjAsOSArNjYwLDkgQEAgLSAoTlNTdHJpbmcgKilfc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcgog
ICAgIHJldHVybiB1c3RyaW5nVG9TdHJpbmcocmVzdWx0LnRvU3RyaW5nKF9wcml2YXRlLT5jb3Jl
RnJhbWUtPnNjcmlwdCgpLT5nbG9iYWxPYmplY3QobWFpblRocmVhZE5vcm1hbFdvcmxkKCkpLT5n
bG9iYWxFeGVjKCkpKTsKIH0KIAotLSAoTlNSZWN0KV9jYXJldFJlY3RBdE5vZGU6KERPTU5vZGUg
Kilub2RlIG9mZnNldDooaW50KW9mZnNldCBhZmZpbml0eTooTlNTZWxlY3Rpb25BZmZpbml0eSlh
ZmZpbml0eQorLSAoTlNSZWN0KV9jYXJldFJlY3RBdFBvc2l0aW9uOihjb25zdCBQb3NpdGlvbiYp
cG9zIGFmZmluaXR5OihOU1NlbGVjdGlvbkFmZmluaXR5KWFmZmluaXR5CiB7Ci0gICAgVmlzaWJs
ZVBvc2l0aW9uIHZpc2libGVQb3NpdGlvbihjb3JlKG5vZGUpLCBvZmZzZXQsIHN0YXRpY19jYXN0
PEVBZmZpbml0eT4oYWZmaW5pdHkpKTsKKyAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvc2l0
aW9uKHBvcywgc3RhdGljX2Nhc3Q8RUFmZmluaXR5PihhZmZpbml0eSkpOwogICAgIHJldHVybiB2
aXNpYmxlUG9zaXRpb24uYWJzb2x1dGVDYXJldEJvdW5kcygpOwogfQogCkluZGV4OiBTb3VyY2Uv
V2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lSW50ZXJuYWwuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lSW50ZXJuYWwuaAkocmV2aXNpb24gNzczODAp
CisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lSW50ZXJuYWwuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2ltcG9ydCAiV2ViUHJlZmVyZW5jZXNQcml2YXRl
LmgiCiAjaW1wb3J0IDxXZWJDb3JlL0VkaXRBY3Rpb24uaD4KICNpbXBvcnQgPFdlYkNvcmUvRnJh
bWVMb2FkZXJUeXBlcy5oPgorI2ltcG9ydCA8V2ViQ29yZS9Qb3NpdGlvbi5oPgogI2ltcG9ydCA8
V2ViQ29yZS9TZWxlY3Rpb25Db250cm9sbGVyLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1NldHRpbmdz
Lmg+CiAKQEAgLTEzNCw3ICsxMzUsNyBAQCBAaW50ZXJmYWNlIFdlYkZyYW1lIChXZWJJbnRlcm5h
bCkKIAogLSAoTlNTdHJpbmcgKilfbWFya3VwU3RyaW5nRnJvbVJhbmdlOihET01SYW5nZSAqKXJh
bmdlIG5vZGVzOihOU0FycmF5ICoqKW5vZGVzOwogCi0tIChOU1JlY3QpX2NhcmV0UmVjdEF0Tm9k
ZTooRE9NTm9kZSAqKW5vZGUgb2Zmc2V0OihpbnQpb2Zmc2V0IGFmZmluaXR5OihOU1NlbGVjdGlv
bkFmZmluaXR5KWFmZmluaXR5OworLSAoTlNSZWN0KV9jYXJldFJlY3RBdFBvc2l0aW9uOihjb25z
dCBXZWJDb3JlOjpQb3NpdGlvbiYpcG9zIGFmZmluaXR5OihOU1NlbGVjdGlvbkFmZmluaXR5KWFm
ZmluaXR5OwogLSAoTlNSZWN0KV9maXJzdFJlY3RGb3JET01SYW5nZTooRE9NUmFuZ2UgKilyYW5n
ZTsKIC0gKHZvaWQpX3Njcm9sbERPTVJhbmdlVG9WaXNpYmxlOihET01SYW5nZSAqKXJhbmdlOwog
CkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlRleHRDb21wbGV0aW9uQ29udHJv
bGxlci5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlRleHRD
b21wbGV0aW9uQ29udHJvbGxlci5tbQkocmV2aXNpb24gNzczODApCisrKyBTb3VyY2UvV2ViS2l0
L21hYy9XZWJWaWV3L1dlYlRleHRDb21wbGV0aW9uQ29udHJvbGxlci5tbQkod29ya2luZyBjb3B5
KQpAQCAtMjgsNiArMjgsNyBAQAogCiAjaW1wb3J0ICJXZWJUZXh0Q29tcGxldGlvbkNvbnRyb2xs
ZXIuaCIKIAorI2ltcG9ydCAiRE9NTm9kZUludGVybmFsLmgiCiAjaW1wb3J0ICJET01SYW5nZUlu
dGVybmFsLmgiCiAjaW1wb3J0ICJXZWJGcmFtZUludGVybmFsLmgiCiAjaW1wb3J0ICJXZWJIVE1M
Vmlld0ludGVybmFsLmgiCkBAIC0yMDMsNyArMjA0LDcgQEAgLSAodm9pZClkb0NvbXBsZXRpb24K
ICAgICAgICAgICAgIEFTU0VSVCghX29yaWdpbmFsU3RyaW5nKTsgICAgICAgLy8gdGhpcyBzaG91
bGQgb25seSBiZSBzZXQgSUZGIHdlIGhhdmUgYSBwb3B1cCB3aW5kb3cKICAgICAgICAgICAgIF9v
cmlnaW5hbFN0cmluZyA9IFtbZnJhbWUgX3N0cmluZ0ZvclJhbmdlOnNlbGVjdGlvbl0gcmV0YWlu
XTsKICAgICAgICAgICAgIFtzZWxmIF9idWlsZFVJXTsKLSAgICAgICAgICAgIE5TUmVjdCB3b3Jk
UmVjdCA9IFtmcmFtZSBfY2FyZXRSZWN0QXROb2RlOlt3aG9sZVdvcmQgc3RhcnRDb250YWluZXJd
IG9mZnNldDpbd2hvbGVXb3JkIHN0YXJ0T2Zmc2V0XSBhZmZpbml0eTpOU1NlbGVjdGlvbkFmZmlu
aXR5RG93bnN0cmVhbV07CisgICAgICAgICAgICBOU1JlY3Qgd29yZFJlY3QgPSBbZnJhbWUgX2Nh
cmV0UmVjdEF0UG9zaXRpb246UG9zaXRpb24oY29yZShbd2hvbGVXb3JkIHN0YXJ0Q29udGFpbmVy
XSksIFt3aG9sZVdvcmQgc3RhcnRPZmZzZXRdLCBQb3NpdGlvbjo6UG9zaXRpb25Jc09mZnNldElu
QW5jaG9yKSBhZmZpbml0eTpOU1NlbGVjdGlvbkFmZmluaXR5RG93bnN0cmVhbV07CiAgICAgICAg
ICAgICAvLyArMSB0byBiZSB1bmRlciB0aGUgd29yZCwgbm90IHRoZSBjYXJldAogICAgICAgICAg
ICAgLy8gRklYTUUgLSAzNzY5NjUyIC0gV3JvbmcgcG9zaXRpb25pbmcgZm9yIHJpZ2h0IHRvIGxl
ZnQgbGFuZ3VhZ2VzLiAgV2Ugc2hvdWxkIGxpbmUgdXAgdGhlIHVwcGVyCiAgICAgICAgICAgICAv
LyByaWdodCBjb3JuZXIgd2l0aCB0aGUgY2FyZXQgaW5zdGVhZCBvZiB1cHBlciBsZWZ0LCBhbmQg
dGhlICsxIHdvdWxkIGJlIGEgLTEuCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>81315</attachid>
            <date>2011-02-04 16:25:42 -0800</date>
            <delta_ts>2011-02-07 16:58:18 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-52919-20110204162541.patch</filename>
            <type>text/plain</type>
            <size>44542</size>
            <attacher name="Levi Weintraub">leviw</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc3NjkzKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsODcgQEAKKzIwMTEtMDItMDQgIExldmkgV2Vp
bnRyYXViICA8bGV2aXdAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFN0b3AgaW5zdGFudGlhdGluZyBsZWdhY3kgZWRpdGluZyBQ
b3NpdGlvbnMgaW4gVmlzaWJsZVBvc2l0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD01MjkxOQorCisgICAgICAgIENoYW5naW5nIFZpc2libGVQb3Np
dGlvbiBjb21wbGV0ZWx5IGF3YXkgZnJvbSBsZWdhY3kgcG9zaXRpb25zLgorCisgICAgICAgIE5v
IG5ldyB0ZXN0cyBzaW5jZSB0aGlzIGlzIGZ1bmN0aW9uYWx5IGVxdWl2YWxlbnQuCisKKyAgICAg
ICAgKiBXZWJDb3JlLmV4cC5pbjogUmVtb3ZpbmcgdGhlIGxlZ2FjeSBWaXNpYmxlUG9zaXRpb24g
Y29uc3RydWN0b3IgYW5kCisgICAgICAgIGFkZGluZyB0aGUgUG9zaXRpb25Jc09mZnNldEluQW5j
aG9yIHN5bWJvbC4gSWYgd2UgbXVzdCBjcmVhdGUgVmlzaWJsZVBvc2l0aW9ucworICAgICAgICAq
IGFjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBWE9i
amVjdENhY2hlOjp2aXNpYmxlUG9zaXRpb25Gb3JUZXh0TWFya2VyRGF0YSk6CisgICAgICAgICog
YWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OnN0YXJ0T2ZTdHlsZVJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OmVuZE9mU3R5bGVSYW5nZSk6
CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnZpc2libGVQb3Np
dGlvbkZvckluZGV4KToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2d0ay9BY2Nlc3NpYmlsaXR5
T2JqZWN0V3JhcHBlckF0ay5jcHA6CisgICAgICAgIChvYmplY3RBbmRPZmZzZXRVbmlnbm9yZWQp
OgorICAgICAgICAqIGRvbS9Qb3NpdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQb3NpdGlv
bjo6dXBzdHJlYW0pOiBGaXhlZCB0byBjb3JyZWN0bHkgcmVzcGVjdCBQb3NpdGlvbklzQWZ0ZXJB
bmNob3IKKyAgICAgICAgKFdlYkNvcmU6OlBvc2l0aW9uOjpkb3duc3RyZWFtKTogZGl0dG8KKyAg
ICAgICAgKiBkb20vUmFuZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6OmVkaXRpbmdT
dGFydFBvc2l0aW9uKToKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRvci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpFZGl0b3I6OmNhbkRlbGV0ZVJhbmdlKToKKyAgICAgICAgKiBlZGl0aW5nL1JlcGxh
Y2VTZWxlY3Rpb25Db21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlcGxhY2VTZWxlY3Rp
b25Db21tYW5kOjpkb0FwcGx5KToKKyAgICAgICAgKiBlZGl0aW5nL1NlbGVjdGlvbkNvbnRyb2xs
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0aW9uQ29udHJvbGxlcjo6c2VsZWN0RnJh
bWVFbGVtZW50SW5QYXJlbnRJZkZ1bGx5U2VsZWN0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6U2Vs
ZWN0aW9uQ29udHJvbGxlcjo6c2V0U2VsZWN0ZWRSYW5nZSk6CisgICAgICAgICogZWRpdGluZy9U
ZXh0SXRlcmF0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEl0ZXJhdG9yOjpzaG91bGRS
ZXByZXNlbnROb2RlT2Zmc2V0WmVybyk6CisgICAgICAgICogZWRpdGluZy9UeXBpbmdDb21tYW5k
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlR5cGluZ0NvbW1hbmQ6OmRlbGV0ZUtleVByZXNzZWQp
OgorICAgICAgICAqIGVkaXRpbmcvVmlzaWJsZVBvc2l0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlZpc2libGVQb3NpdGlvbjo6bGVmdFZpc3VhbGx5RGlzdGluY3RDYW5kaWRhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6VmlzaWJsZVBvc2l0aW9uOjpyaWdodFZpc3VhbGx5RGlzdGluY3RDYW5k
aWRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6VmlzaWJsZVBvc2l0aW9uOjpjYW5vbmljYWxQb3Np
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpWaXNpYmxlUG9zaXRpb246OmNoYXJhY3RlckFmdGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OlZpc2libGVQb3NpdGlvbjo6bG9jYWxDYXJldFJlY3QpOgor
ICAgICAgICAoV2ViQ29yZTo6bWFrZVJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OnN0YXJ0Vmlz
aWJsZVBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmVuZFZpc2libGVQb3NpdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpzZXRTdGFydCk6CisgICAgICAgIChXZWJDb3JlOjpzZXRFbmQpOgor
ICAgICAgICAoV2ViQ29yZTo6aXNGaXJzdFZpc2libGVQb3NpdGlvbkluTm9kZSk6CisgICAgICAg
IChXZWJDb3JlOjppc0xhc3RWaXNpYmxlUG9zaXRpb25Jbk5vZGUpOgorICAgICAgICAqIGVkaXRp
bmcvVmlzaWJsZVBvc2l0aW9uLmg6CisgICAgICAgIChXZWJDb3JlOjpWaXNpYmxlUG9zaXRpb246
OlZpc2libGVQb3NpdGlvbik6CisgICAgICAgICogZWRpdGluZy9odG1sZWRpdGluZy5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpmaXJzdEluU3BlY2lhbEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6bGFzdEluU3BlY2lhbEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6dmlzaWJsZVBvc2l0
aW9uQmVmb3JlTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjp2aXNpYmxlUG9zaXRpb25BZnRlck5v
ZGUpOgorICAgICAgICAqIGVkaXRpbmcvdmlzaWJsZV91bml0cy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpzdGFydFBvc2l0aW9uRm9yTGluZSk6CisgICAgICAgIChXZWJDb3JlOjplbmRQb3NpdGlv
bkZvckxpbmUpOgorICAgICAgICAoV2ViQ29yZTo6cHJldmlvdXNMaW5lUG9zaXRpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6bmV4dExpbmVQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpzdGFy
dE9mUGFyYWdyYXBoKToKKyAgICAgICAgKFdlYkNvcmU6OmVuZE9mUGFyYWdyYXBoKToKKyAgICAg
ICAgKFdlYkNvcmU6OmVuZE9mQmxvY2spOgorICAgICAgICAoV2ViQ29yZTo6c3RhcnRPZkRvY3Vt
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OmVuZE9mRG9jdW1lbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6bG9naWNhbFN0YXJ0UG9zaXRpb25Gb3JMaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OmxvZ2lj
YWxFbmRQb3NpdGlvbkZvckxpbmUpOgorICAgICAgICAqIHBhZ2UvRE9NU2VsZWN0aW9uLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkRPTVNlbGVjdGlvbjo6Y29sbGFwc2UpOgorICAgICAgICAoV2Vi
Q29yZTo6RE9NU2VsZWN0aW9uOjpzZXRCYXNlQW5kRXh0ZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OkRPTVNlbGVjdGlvbjo6c2V0UG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6RE9NU2VsZWN0
aW9uOjpleHRlbmQpOgorICAgICAgICAqIHBhZ2UvRXZlbnRIYW5kbGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6aGFuZGxlTW91c2VQcmVzc0V2ZW50U2luZ2xlQ2xpY2sp
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyT2JqZWN0OjpjcmVhdGVWaXNpYmxlUG9zaXRpb24pOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJUZXh0Q29udHJvbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0
Q29udHJvbDo6dmlzaWJsZVBvc2l0aW9uRm9ySW5kZXgpOgorICAgICAgICAqIHN2Zy9TVkdUZXh0
Q29udGVudEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVGV4dENvbnRlbnRFbGVt
ZW50OjpzZWxlY3RTdWJTdHJpbmcpOgorCiAyMDExLTAyLTA0ICBKZXIgTm9ibGUgIDxqZXIubm9i
bGVAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEVyaWMgQ2FybHNvbi4KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL1dlYkNvcmUuZXhwLmluCShyZXZpc2lvbiA3NzM4MCkKKysrIFNvdXJjZS9XZWJDb3JlL1dl
YkNvcmUuZXhwLmluCSh3b3JraW5nIGNvcHkpCkBAIC0zOTgsNyArMzk4LDYgQEAgX19aTjdXZWJD
b3JlMTVTY3JvbGxBbGlnbm1lbnQxOWFsaWduVG9FZAogX19aTjdXZWJDb3JlMTVTdHJpbmdUcnVu
Y2F0b3IxM3JpZ2h0VHJ1bmNhdGVFUktOM1dURjZTdHJpbmdFZlJLTlNfNEZvbnRFYgogX19aTjdX
ZWJDb3JlMTVTdHJpbmdUcnVuY2F0b3IxNGNlbnRlclRydW5jYXRlRVJLTjNXVEY2U3RyaW5nRWZS
S05TXzRGb250RWIKIF9fWk43V2ViQ29yZTE1U3RyaW5nVHJ1bmNhdG9yNXdpZHRoRVJLTjNXVEY2
U3RyaW5nRVJLTlNfNEZvbnRFYgotX19aTjdXZWJDb3JlMTVWaXNpYmxlUG9zaXRpb25DMUVQTlNf
NE5vZGVFaU5TXzlFQWZmaW5pdHlFCiBfX1pON1dlYkNvcmUxNVZpc2libGVQb3NpdGlvbkMxRVJL
TlNfOFBvc2l0aW9uRU5TXzlFQWZmaW5pdHlFCiBfX1pON1dlYkNvcmUxNWRlZmF1bHRMYW5ndWFn
ZUV2CiBfX1pON1dlYkNvcmUxNXJlcG9ydEV4Y2VwdGlvbkVQTjNKU0M5RXhlY1N0YXRlRU5TMF83
SlNWYWx1ZUUKQEAgLTc4MCw2ICs3NzksNyBAQCBfX1pON1dlYkNvcmU4R3JhZGllbnQxMmFkZENv
bG9yU3RvcEVmUktOCiBfX1pON1dlYkNvcmU4R3JhZGllbnRDMUVSS05TXzEwRmxvYXRQb2ludEVT
M18KIF9fWk43V2ViQ29yZThJbnRQb2ludEMxRVJLOF9OU1BvaW50CiBfX1pON1dlYkNvcmU4UG9z
aXRpb25DMUVOM1dURjEwUGFzc1JlZlB0cklOU180Tm9kZUVFRWkKK19fWk43V2ViQ29yZThQb3Np
dGlvbkMxRU4zV1RGMTBQYXNzUmVmUHRySU5TXzROb2RlRUVFaU5TMF8xMEFuY2hvclR5cGVFCiBf
X1pON1dlYkNvcmU4U2V0dGluZ3MxNHNldEphdmFFbmFibGVkRWIKIF9fWk43V2ViQ29yZThTZXR0
aW5nczE1c2V0V2ViR0xFbmFibGVkRWIKIF9fWk43V2ViQ29yZThTZXR0aW5nczE2c2V0VXNlc1Bh
Z2VDYWNoZUViCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2Fj
aGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmpl
Y3RDYWNoZS5jcHAJKHJldmlzaW9uIDc3MzgwKQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9BWE9iamVjdENhY2hlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTczLDcgKzU3Myw3IEBA
IFZpc2libGVQb3NpdGlvbiBBWE9iamVjdENhY2hlOjp2aXNpYmxlUG8KICAgICBpZiAoIWlzTm9k
ZUluVXNlKHRleHRNYXJrZXJEYXRhLm5vZGUpKQogICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0
aW9uKCk7CiAgICAgCi0gICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3MgPSBWaXNpYmxlUG9z
aXRpb24odGV4dE1hcmtlckRhdGEubm9kZSwgdGV4dE1hcmtlckRhdGEub2Zmc2V0LCB0ZXh0TWFy
a2VyRGF0YS5hZmZpbml0eSk7CisgICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3MgPSBWaXNp
YmxlUG9zaXRpb24oUG9zaXRpb24odGV4dE1hcmtlckRhdGEubm9kZSwgdGV4dE1hcmtlckRhdGEu
b2Zmc2V0LCBQb3NpdGlvbjo6UG9zaXRpb25Jc09mZnNldEluQW5jaG9yKSwgdGV4dE1hcmtlckRh
dGEuYWZmaW5pdHkpOwogICAgIFBvc2l0aW9uIGRlZXBQb3MgPSB2aXNpYmxlUG9zLmRlZXBFcXVp
dmFsZW50KCk7CiAgICAgaWYgKGRlZXBQb3MuaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiBWaXNp
YmxlUG9zaXRpb24oKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNz
aWJpbGl0eU9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAkocmV2aXNpb24gNzczODApCisrKyBTb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zMzYsNyArMzM2LDcgQEAgc3RhdGljIFZpc2libGVQb3NpdGlvbiBzdGFydE9mU3R5
bGVSYW5nZQogICAgICAgICBzdGFydFJlbmRlcmVyID0gcjsKICAgICB9CiAKLSAgICByZXR1cm4g
VmlzaWJsZVBvc2l0aW9uKHN0YXJ0UmVuZGVyZXItPm5vZGUoKSwgMCwgVlBfREVGQVVMVF9BRkZJ
TklUWSk7CisgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihmaXJzdFBvc2l0aW9uSW5PckJlZm9y
ZU5vZGUoc3RhcnRSZW5kZXJlci0+bm9kZSgpKSwgVlBfREVGQVVMVF9BRkZJTklUWSk7CiB9CiAK
IHN0YXRpYyBWaXNpYmxlUG9zaXRpb24gZW5kT2ZTdHlsZVJhbmdlKGNvbnN0IFZpc2libGVQb3Np
dGlvbiYgdmlzaWJsZVBvcykKQEAgLTM1OSw3ICszNTksNyBAQCBzdGF0aWMgVmlzaWJsZVBvc2l0
aW9uIGVuZE9mU3R5bGVSYW5nZShjCiAgICAgICAgIGVuZFJlbmRlcmVyID0gcjsKICAgICB9CiAK
LSAgICByZXR1cm4gbGFzdERlZXBFZGl0aW5nUG9zaXRpb25Gb3JOb2RlKGVuZFJlbmRlcmVyLT5u
b2RlKCkpOworICAgIHJldHVybiBsYXN0UG9zaXRpb25Jbk9yQWZ0ZXJOb2RlKGVuZFJlbmRlcmVy
LT5ub2RlKCkpOwogfQogCiBWaXNpYmxlUG9zaXRpb25SYW5nZSBBY2Nlc3NpYmlsaXR5T2JqZWN0
OjpzdHlsZVJhbmdlRm9yUG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2aXNpYmxlUG9z
KSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
UmVuZGVyT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCShyZXZpc2lvbiA3NzM4MCkKKysrIFNv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI0NTksMTQgKzI0NTksMTQgQEAgVmlzaWJsZVBvc2l0aW9uIEFj
Y2Vzc2liaWxpdHlSZW5kZXJPYmplYwogICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKCk7
CiAgICAgCiAgICAgaWYgKGluZGV4IDw9IDApCi0gICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRp
b24obm9kZSwgMCwgRE9XTlNUUkVBTSk7CisgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24o
Zmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2RlKG5vZGUpLCBET1dOU1RSRUFNKTsKICAgICAKICAg
ICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gUmFuZ2U6
OmNyZWF0ZShtX3JlbmRlcmVyLT5kb2N1bWVudCgpKTsKICAgICByYW5nZS0+c2VsZWN0Tm9kZUNv
bnRlbnRzKG5vZGUsIGVjKTsKICAgICBDaGFyYWN0ZXJJdGVyYXRvciBpdChyYW5nZS5nZXQoKSk7
CiAgICAgaXQuYWR2YW5jZShpbmRleCAtIDEpOwotICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24o
aXQucmFuZ2UoKS0+ZW5kQ29udGFpbmVyKGVjKSwgaXQucmFuZ2UoKS0+ZW5kT2Zmc2V0KGVjKSwg
VVBTVFJFQU0pOworICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oUG9zaXRpb24oaXQucmFuZ2Uo
KS0+ZW5kQ29udGFpbmVyKGVjKSwgaXQucmFuZ2UoKS0+ZW5kT2Zmc2V0KGVjKSwgUG9zaXRpb246
OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvciksIFVQU1RSRUFNKTsKIH0KICAgICAKIGludCBBY2Nl
c3NpYmlsaXR5UmVuZGVyT2JqZWN0OjppbmRleEZvclZpc2libGVQb3NpdGlvbihjb25zdCBWaXNp
YmxlUG9zaXRpb24mIHBvcykgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvZ3RrL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQXRrLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9BY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBl
ckF0ay5jcHAJKHJldmlzaW9uIDc3MzgwKQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9ndGsvQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJBdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNDkwLDcgKzI0OTAsNyBAQCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmplY3RBbmRPZmZzZXRV
bmlnCiAKICAgICBOb2RlKiBub2RlID0gcmVhbE9iamVjdC0+bm9kZSgpOwogICAgIGlmIChub2Rl
KSB7Ci0gICAgICAgIFZpc2libGVQb3NpdGlvbiBzdGFydFBvc2l0aW9uID0gVmlzaWJsZVBvc2l0
aW9uKG5vZGUsIDAsIERPV05TVFJFQU0pOworICAgICAgICBWaXNpYmxlUG9zaXRpb24gc3RhcnRQ
b3NpdGlvbiA9IFZpc2libGVQb3NpdGlvbihQb3NpdGlvbihub2RlLCBQb3NpdGlvbjo6UG9zaXRp
b25Jc0JlZm9yZUFuY2hvciksIERPV05TVFJFQU0pOwogICAgICAgICBWaXNpYmxlUG9zaXRpb24g
ZW5kUG9zaXRpb24gPSByZWFsT2JqZWN0LT5zZWxlY3Rpb24oKS52aXNpYmxlRW5kKCk7CiAKICAg
ICAgICAgaWYgKHN0YXJ0UG9zaXRpb24gPT0gZW5kUG9zaXRpb24pCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9kb20vUG9zaXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Q
b3NpdGlvbi5jcHAJKHJldmlzaW9uIDc3MzgwKQorKysgU291cmNlL1dlYkNvcmUvZG9tL1Bvc2l0
aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEzLDcgKzUxMyw3IEBAIFBvc2l0aW9uIFBvc2l0
aW9uOjp1cHN0cmVhbShFZGl0aW5nQm91bmQKICAgICAKICAgICAvLyBpdGVyYXRlIGJhY2t3YXJk
IGZyb20gdGhlcmUsIGxvb2tpbmcgZm9yIGEgcXVhbGlmaWVkIHBvc2l0aW9uCiAgICAgTm9kZSog
Ym91bmRhcnkgPSBlbmNsb3NpbmdWaXN1YWxCb3VuZGFyeShzdGFydE5vZGUpOwotICAgIFBvc2l0
aW9uSXRlcmF0b3IgbGFzdFZpc2libGUgPSAqdGhpczsKKyAgICBQb3NpdGlvbkl0ZXJhdG9yIGxh
c3RWaXNpYmxlID0gbV9hbmNob3JUeXBlID09IFBvc2l0aW9uSXNBZnRlckFuY2hvciA/IFBvc2l0
aW9uKG1fYW5jaG9yTm9kZSwgY2FyZXRNYXhPZmZzZXQobV9hbmNob3JOb2RlLmdldCgpKSkgOiAq
dGhpczsKICAgICBQb3NpdGlvbkl0ZXJhdG9yIGN1cnJlbnRQb3MgPSBsYXN0VmlzaWJsZTsKICAg
ICBib29sIHN0YXJ0RWRpdGFibGUgPSBzdGFydE5vZGUtPmlzQ29udGVudEVkaXRhYmxlKCk7CiAg
ICAgTm9kZSogbGFzdE5vZGUgPSBzdGFydE5vZGU7CkBAIC02MzQsNyArNjM0LDcgQEAgUG9zaXRp
b24gUG9zaXRpb246OmRvd25zdHJlYW0oRWRpdGluZ0JvdQogCiAgICAgLy8gaXRlcmF0ZSBmb3J3
YXJkIGZyb20gdGhlcmUsIGxvb2tpbmcgZm9yIGEgcXVhbGlmaWVkIHBvc2l0aW9uCiAgICAgTm9k
ZSogYm91bmRhcnkgPSBlbmNsb3NpbmdWaXN1YWxCb3VuZGFyeShzdGFydE5vZGUpOwotICAgIFBv
c2l0aW9uSXRlcmF0b3IgbGFzdFZpc2libGUgPSAqdGhpczsKKyAgICBQb3NpdGlvbkl0ZXJhdG9y
IGxhc3RWaXNpYmxlID0gbV9hbmNob3JUeXBlID09IFBvc2l0aW9uSXNBZnRlckFuY2hvciA/IFBv
c2l0aW9uKG1fYW5jaG9yTm9kZSwgY2FyZXRNYXhPZmZzZXQobV9hbmNob3JOb2RlLmdldCgpKSkg
OiAqdGhpczsKICAgICBQb3NpdGlvbkl0ZXJhdG9yIGN1cnJlbnRQb3MgPSBsYXN0VmlzaWJsZTsK
ICAgICBib29sIHN0YXJ0RWRpdGFibGUgPSBzdGFydE5vZGUtPmlzQ29udGVudEVkaXRhYmxlKCk7
CiAgICAgTm9kZSogbGFzdE5vZGUgPSBzdGFydE5vZGU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9k
b20vUmFuZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5jcHAJ
KHJldmlzaW9uIDc3MzgwKQorKysgU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTU3MCw3ICsxNTcwLDcgQEAgUG9zaXRpb24gUmFuZ2U6OmVkaXRpbmdTdGFy
dFBvc2l0aW9uKCkgYwogICAgIC8vIEl0IGlzIGltcG9ydGFudCB0byBza2lwIGNlcnRhaW4gaXJy
ZWxldmFudCBjb250ZW50IGF0IHRoZSBzdGFydCBvZiB0aGUgc2VsZWN0aW9uLCBzbyB3ZSBkbyBu
b3Qgd2luZCB1cCAKICAgICAvLyB3aXRoIGEgc3B1cmlvdXMgIm1peGVkIiBzdHlsZS4KICAgICAK
LSAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvc2l0aW9uKG1fc3RhcnQuY29udGFpbmVyKCks
IG1fc3RhcnQub2Zmc2V0KCksIFZQX0RFRkFVTFRfQUZGSU5JVFkpOworICAgIFZpc2libGVQb3Np
dGlvbiB2aXNpYmxlUG9zaXRpb24oUG9zaXRpb24obV9zdGFydC5jb250YWluZXIoKSwgbV9zdGFy
dC5vZmZzZXQoKSwgUG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvciksIFZQX0RFRkFV
TFRfQUZGSU5JVFkpOwogICAgIGlmICh2aXNpYmxlUG9zaXRpb24uaXNOdWxsKCkpCiAgICAgICAg
IHJldHVybiBQb3NpdGlvbigpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRv
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCShy
ZXZpc2lvbiA3NzM4MCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjkwLDcgKzI5MCw3IEBAIGJvb2wgRWRpdG9yOjpjYW5EZWxldGVSYW5n
ZShSYW5nZSogcmFuZ2UKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIGlmIChyYW5n
ZS0+Y29sbGFwc2VkKGVjKSkgewotICAgICAgICBWaXNpYmxlUG9zaXRpb24gc3RhcnQoc3RhcnRD
b250YWluZXIsIHJhbmdlLT5zdGFydE9mZnNldChlYyksIERPV05TVFJFQU0pOworICAgICAgICBW
aXNpYmxlUG9zaXRpb24gc3RhcnQoUG9zaXRpb24oc3RhcnRDb250YWluZXIsIHJhbmdlLT5zdGFy
dE9mZnNldChlYyksIFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3IpLCBET1dOU1RS
RUFNKTsKICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHByZXZpb3VzID0gc3RhcnQucHJldmlvdXMo
KTsKICAgICAgICAgLy8gRklYTUU6IFdlIHNvbWV0aW1lcyBhbGxvdyBkZWxldGlvbnMgYXQgdGhl
IHN0YXJ0IG9mIGVkaXRhYmxlIHJvb3RzLCBsaWtlIHdoZW4gdGhlIGNhcmV0IGlzIGluIGFuIGVt
cHR5IGxpc3QgaXRlbS4KICAgICAgICAgaWYgKHByZXZpb3VzLmlzTnVsbCgpIHx8IHByZXZpb3Vz
LmRlZXBFcXVpdmFsZW50KCkubm9kZSgpLT5yb290RWRpdGFibGVFbGVtZW50KCkgIT0gc3RhcnRD
b250YWluZXItPnJvb3RFZGl0YWJsZUVsZW1lbnQoKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwCShyZXZpc2lvbiA3NzM4
MCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC04ODQsNyArODg0LDcgQEAgdm9pZCBSZXBsYWNlU2VsZWN0aW9u
Q29tbWFuZDo6ZG9BcHBseSgpCiAgICAgTm9kZSogZW5kQlIgPSBpbnNlcnRpb25Qb3MuZG93bnN0
cmVhbSgpLm5vZGUoKS0+aGFzVGFnTmFtZShiclRhZykgPyBpbnNlcnRpb25Qb3MuZG93bnN0cmVh
bSgpLm5vZGUoKSA6IDA7CiAgICAgVmlzaWJsZVBvc2l0aW9uIG9yaWdpbmFsVmlzUG9zQmVmb3Jl
RW5kQlI7CiAgICAgaWYgKGVuZEJSKQotICAgICAgICBvcmlnaW5hbFZpc1Bvc0JlZm9yZUVuZEJS
ID0gVmlzaWJsZVBvc2l0aW9uKGVuZEJSLCAwLCBET1dOU1RSRUFNKS5wcmV2aW91cygpOworICAg
ICAgICBvcmlnaW5hbFZpc1Bvc0JlZm9yZUVuZEJSID0gVmlzaWJsZVBvc2l0aW9uKFBvc2l0aW9u
KGVuZEJSLCBQb3NpdGlvbjo6UG9zaXRpb25Jc0JlZm9yZUFuY2hvciksIERPV05TVFJFQU0pLnBy
ZXZpb3VzKCk7CiAgICAgCiAgICAgc3RhcnRCbG9jayA9IGVuY2xvc2luZ0Jsb2NrKGluc2VydGlv
blBvcy5ub2RlKCkpOwogICAgIApJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9TZWxlY3Rp
b25Db250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Nl
bGVjdGlvbkNvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiA3NzM4MCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvU2VsZWN0aW9uQ29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMTUs
OCArMTMxNSw4IEBAIHZvaWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6c2VsZWN0RnJhbWVFbGUKIAog
ICAgIC8vIENyZWF0ZSBjb21wdXRlIHBvc2l0aW9ucyBiZWZvcmUgYW5kIGFmdGVyIHRoZSBlbGVt
ZW50LgogICAgIHVuc2lnbmVkIG93bmVyRWxlbWVudE5vZGVJbmRleCA9IG93bmVyRWxlbWVudC0+
bm9kZUluZGV4KCk7Ci0gICAgVmlzaWJsZVBvc2l0aW9uIGJlZm9yZU93bmVyRWxlbWVudChWaXNp
YmxlUG9zaXRpb24ob3duZXJFbGVtZW50UGFyZW50LCBvd25lckVsZW1lbnROb2RlSW5kZXgsIFNF
TF9ERUZBVUxUX0FGRklOSVRZKSk7Ci0gICAgVmlzaWJsZVBvc2l0aW9uIGFmdGVyT3duZXJFbGVt
ZW50KFZpc2libGVQb3NpdGlvbihvd25lckVsZW1lbnRQYXJlbnQsIG93bmVyRWxlbWVudE5vZGVJ
bmRleCArIDEsIFZQX1VQU1RSRUFNX0lGX1BPU1NJQkxFKSk7CisgICAgVmlzaWJsZVBvc2l0aW9u
IGJlZm9yZU93bmVyRWxlbWVudChWaXNpYmxlUG9zaXRpb24oUG9zaXRpb24ob3duZXJFbGVtZW50
UGFyZW50LCBvd25lckVsZW1lbnROb2RlSW5kZXgsIFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0
SW5BbmNob3IpLCBTRUxfREVGQVVMVF9BRkZJTklUWSkpOworICAgIFZpc2libGVQb3NpdGlvbiBh
ZnRlck93bmVyRWxlbWVudChWaXNpYmxlUG9zaXRpb24oUG9zaXRpb24ob3duZXJFbGVtZW50UGFy
ZW50LCBvd25lckVsZW1lbnROb2RlSW5kZXggKyAxLCBQb3NpdGlvbjo6UG9zaXRpb25Jc09mZnNl
dEluQW5jaG9yKSwgVlBfVVBTVFJFQU1fSUZfUE9TU0lCTEUpKTsKIAogICAgIC8vIEZvY3VzIG9u
IHRoZSBwYXJlbnQgZnJhbWUsIGFuZCB0aGVuIHNlbGVjdCBmcm9tIGJlZm9yZSB0aGlzIGVsZW1l
bnQgdG8gYWZ0ZXIuCiAgICAgVmlzaWJsZVNlbGVjdGlvbiBuZXdTZWxlY3Rpb24oYmVmb3JlT3du
ZXJFbGVtZW50LCBhZnRlck93bmVyRWxlbWVudCk7CkBAIC0xMzg3LDggKzEzODcsOCBAQCBib29s
IFNlbGVjdGlvbkNvbnRyb2xsZXI6OnNldFNlbGVjdGVkUmFuCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAKICAgICAvLyBGSVhNRTogQ2FuIHdlIHByb3ZpZGUgZXh0ZW50QWZmaW5pdHk/Ci0g
ICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVTdGFydChzdGFydENvbnRhaW5lciwgc3RhcnRPZmZz
ZXQsIGNvbGxhcHNlZCA/IGFmZmluaXR5IDogRE9XTlNUUkVBTSk7Ci0gICAgVmlzaWJsZVBvc2l0
aW9uIHZpc2libGVFbmQoZW5kQ29udGFpbmVyLCBlbmRPZmZzZXQsIFNFTF9ERUZBVUxUX0FGRklO
SVRZKTsKKyAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVN0YXJ0KFBvc2l0aW9uKHN0YXJ0Q29u
dGFpbmVyLCBzdGFydE9mZnNldCwgUG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvciks
IGNvbGxhcHNlZCA/IGFmZmluaXR5IDogRE9XTlNUUkVBTSk7CisgICAgVmlzaWJsZVBvc2l0aW9u
IHZpc2libGVFbmQoUG9zaXRpb24oZW5kQ29udGFpbmVyLCBlbmRPZmZzZXQsIFBvc2l0aW9uOjpQ
b3NpdGlvbklzT2Zmc2V0SW5BbmNob3IpLCBTRUxfREVGQVVMVF9BRkZJTklUWSk7CiAgICAgc2V0
U2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24odmlzaWJsZVN0YXJ0LCB2aXNpYmxlRW5kKSwgY2xv
c2VUeXBpbmcpOwogICAgIHJldHVybiB0cnVlOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvZWRp
dGluZy9UZXh0SXRlcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvVGV4dEl0ZXJhdG9yLmNwcAkocmV2aXNpb24gNzczODApCisrKyBTb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL1RleHRJdGVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg3OCw4ICs4NzgsOCBA
QCBib29sIFRleHRJdGVyYXRvcjo6c2hvdWxkUmVwcmVzZW50Tm9kZU9mCiAgICAgLy8gYW5kIGlu
IHRoYXQgY2FzZSB3ZSdsbCBnZXQgbnVsbC4gV2UgZG9uJ3Qgd2FudCB0byBwdXQgaW4gbmV3bGlu
ZXMgYXQgdGhlIHN0YXJ0IGluIHRoYXQgY2FzZS4KICAgICAvLyBUaGUgY3VyclBvcy5pc05vdE51
bGwoKSBjaGVjayBpcyBuZWVkZWQgYmVjYXVzZSBwb3NpdGlvbnMgaW4gbm9uLUhUTUwgY29udGVu
dAogICAgIC8vIChsaWtlIFNWRykgZG8gbm90IGhhdmUgdmlzaWJsZSBwb3NpdGlvbnMsIGFuZCB3
ZSBkb24ndCB3YW50IHRvIGVtaXQgZm9yIHRoZW0gZWl0aGVyLgotICAgIFZpc2libGVQb3NpdGlv
biBzdGFydFBvcyA9IFZpc2libGVQb3NpdGlvbihtX3N0YXJ0Q29udGFpbmVyLCBtX3N0YXJ0T2Zm
c2V0LCBET1dOU1RSRUFNKTsKLSAgICBWaXNpYmxlUG9zaXRpb24gY3VyclBvcyA9IFZpc2libGVQ
b3NpdGlvbihtX25vZGUsIDAsIERPV05TVFJFQU0pOworICAgIFZpc2libGVQb3NpdGlvbiBzdGFy
dFBvcyA9IFZpc2libGVQb3NpdGlvbihQb3NpdGlvbihtX3N0YXJ0Q29udGFpbmVyLCBtX3N0YXJ0
T2Zmc2V0LCBQb3NpdGlvbjo6UG9zaXRpb25Jc09mZnNldEluQW5jaG9yKSwgRE9XTlNUUkVBTSk7
CisgICAgVmlzaWJsZVBvc2l0aW9uIGN1cnJQb3MgPSBWaXNpYmxlUG9zaXRpb24oUG9zaXRpb24o
bV9ub2RlLCBQb3NpdGlvbjo6UG9zaXRpb25Jc0JlZm9yZUFuY2hvciksIERPV05TVFJFQU0pOwog
ICAgIHJldHVybiBzdGFydFBvcy5pc05vdE51bGwoKSAmJiBjdXJyUG9zLmlzTm90TnVsbCgpICYm
ICFpblNhbWVMaW5lKHN0YXJ0UG9zLCBjdXJyUG9zKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNv
cmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwCShyZXZpc2lvbiA3NzM4MCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5NSw3
ICs0OTUsNyBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6OmRlbGV0ZUtleVByZXNzZWQoVGV4CiAgICAg
ICAgICAgICBzZWxlY3Rpb24ubW9kaWZ5KFNlbGVjdGlvbkNvbnRyb2xsZXI6OkFsdGVyYXRpb25F
eHRlbmQsIERpcmVjdGlvbkJhY2t3YXJkLCBncmFudWxhcml0eSk7CiAgICAgICAgIC8vIElmIHRo
ZSBjYXJldCBpcyBqdXN0IGFmdGVyIGEgdGFibGUsIHNlbGVjdCB0aGUgdGFibGUgYW5kIGRvbid0
IGRlbGV0ZSBhbnl0aGluZy4KICAgICAgICAgfSBlbHNlIGlmIChOb2RlKiB0YWJsZSA9IGlzRmly
c3RQb3NpdGlvbkFmdGVyVGFibGUodmlzaWJsZVN0YXJ0KSkgewotICAgICAgICAgICAgc2V0RW5k
aW5nU2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24ocG9zaXRpb25BZnRlck5vZGUodGFibGUpLCBl
bmRpbmdTZWxlY3Rpb24oKS5zdGFydCgpLCBET1dOU1RSRUFNKSk7CisgICAgICAgICAgICBzZXRF
bmRpbmdTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbihwb3NpdGlvbkJlZm9yZU5vZGUodGFibGUp
LCBlbmRpbmdTZWxlY3Rpb24oKS5zdGFydCgpLCBET1dOU1RSRUFNKSk7CiAgICAgICAgICAgICB0
eXBpbmdBZGRlZFRvT3BlbkNvbW1hbmQoRGVsZXRlS2V5KTsKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlUG9zaXRpb24u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVBvc2l0aW9u
LmNwcAkocmV2aXNpb24gNzczODApCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVQ
b3NpdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDEyICs0OCw2IEBAIFZpc2libGVQb3Np
dGlvbjo6VmlzaWJsZVBvc2l0aW9uKGNvbnN0IFAKICAgICBpbml0KHBvcywgYWZmaW5pdHkpOwog
fQogCi1WaXNpYmxlUG9zaXRpb246OlZpc2libGVQb3NpdGlvbihOb2RlICpub2RlLCBpbnQgb2Zm
c2V0LCBFQWZmaW5pdHkgYWZmaW5pdHkpCi17Ci0gICAgQVNTRVJUKG9mZnNldCA+PSAwKTsKLSAg
ICBpbml0KFBvc2l0aW9uKG5vZGUsIG9mZnNldCksIGFmZmluaXR5KTsKLX0KLQogdm9pZCBWaXNp
YmxlUG9zaXRpb246OmluaXQoY29uc3QgUG9zaXRpb24mIHBvc2l0aW9uLCBFQWZmaW5pdHkgYWZm
aW5pdHkpCiB7CiAgICAgbV9hZmZpbml0eSA9IGFmZmluaXR5OwpAQCAtMTA2LDcgKzEwMCw3IEBA
IFZpc2libGVQb3NpdGlvbiBWaXNpYmxlUG9zaXRpb246OnByZXZpb3UKIFBvc2l0aW9uIFZpc2li
bGVQb3NpdGlvbjo6bGVmdFZpc3VhbGx5RGlzdGluY3RDYW5kaWRhdGUoKSBjb25zdAogewogICAg
IFBvc2l0aW9uIHAgPSBtX2RlZXBQb3NpdGlvbjsKLSAgICBpZiAoIXAubm9kZSgpKQorICAgIGlm
IChwLmlzTnVsbCgpKQogICAgICAgICByZXR1cm4gUG9zaXRpb24oKTsKIAogICAgIFBvc2l0aW9u
IGRvd25zdHJlYW1TdGFydCA9IHAuZG93bnN0cmVhbSgpOwpAQCAtMjQyLDcgKzIzNiw3IEBAIFZp
c2libGVQb3NpdGlvbiBWaXNpYmxlUG9zaXRpb246OmxlZnQoYm8KIFBvc2l0aW9uIFZpc2libGVQ
b3NpdGlvbjo6cmlnaHRWaXN1YWxseURpc3RpbmN0Q2FuZGlkYXRlKCkgY29uc3QKIHsKICAgICBQ
b3NpdGlvbiBwID0gbV9kZWVwUG9zaXRpb247Ci0gICAgaWYgKCFwLm5vZGUoKSkKKyAgICBpZiAo
cC5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIFBvc2l0aW9uKCk7CiAKICAgICBQb3NpdGlvbiBk
b3duc3RyZWFtU3RhcnQgPSBwLmRvd25zdHJlYW0oKTsKQEAgLTQ1MSwxMCArNDQ1LDExIEBAIFBv
c2l0aW9uIFZpc2libGVQb3NpdGlvbjo6Y2Fub25pY2FsUG9zaXQKICAgICAvLyBUbyBmaXggdGhp
cywgd2UgbmVlZCB0byBlaXRoZXIgYSkgYWRkIGNvZGUgdG8gYWxsIHBhaW50Q2FyZXRzIHRvIHBh
c3MgdGhlIHJlc3BvbnNpYmlsaXR5IG9mZiB0bwogICAgIC8vIHRoZSBhcHByb3ByaWF0ZSByZW5k
ZXJlciBmb3IgVmlzaWJsZVBvc2l0aW9uJ3MgbGlrZSB0aGVzZSwgb3IgYikgY2Fub25pY2FsaXpl
IHRvIHRoZSByaWdodG1vc3QgY2FuZGlkYXRlCiAgICAgLy8gdW5sZXNzIHRoZSBhZmZpbml0eSBp
cyB1cHN0cmVhbS4KLSAgICBOb2RlKiBub2RlID0gcG9zaXRpb24ubm9kZSgpOwotICAgIGlmICgh
bm9kZSkKKyAgICBpZiAocG9zaXRpb24uaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiBQb3NpdGlv
bigpOwogCisgICAgTm9kZSogbm9kZSA9IHBvc2l0aW9uLmNvbnRhaW5lck5vZGUoKTsKKwogICAg
IEFTU0VSVChub2RlLT5kb2N1bWVudCgpKTsKICAgICBub2RlLT5kb2N1bWVudCgpLT51cGRhdGVM
YXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKIApAQCAtNTEwLDExICs1MDUsMTEgQEAg
VUNoYXIzMiBWaXNpYmxlUG9zaXRpb246OmNoYXJhY3RlckFmdGVyKAogICAgIC8vIFdlIGNhbm9u
aWNhbGl6ZSB0byB0aGUgZmlyc3Qgb2YgdHdvIGVxdWl2YWxlbnQgY2FuZGlkYXRlcywgYnV0IHRo
ZSBzZWNvbmQgb2YgdGhlIHR3byBjYW5kaWRhdGVzCiAgICAgLy8gaXMgdGhlIG9uZSB0aGF0IHdp
bGwgYmUgaW5zaWRlIHRoZSB0ZXh0IG5vZGUgY29udGFpbmluZyB0aGUgY2hhcmFjdGVyIGFmdGVy
IHRoaXMgdmlzaWJsZSBwb3NpdGlvbi4KICAgICBQb3NpdGlvbiBwb3MgPSBtX2RlZXBQb3NpdGlv
bi5kb3duc3RyZWFtKCk7Ci0gICAgTm9kZSogbm9kZSA9IHBvcy5ub2RlKCk7CisgICAgTm9kZSog
bm9kZSA9IHBvcy5jb250YWluZXJOb2RlKCk7CiAgICAgaWYgKCFub2RlIHx8ICFub2RlLT5pc1Rl
eHROb2RlKCkpCiAgICAgICAgIHJldHVybiAwOwotICAgIFRleHQqIHRleHROb2RlID0gc3RhdGlj
X2Nhc3Q8VGV4dCo+KHBvcy5ub2RlKCkpOwotICAgIHVuc2lnbmVkIG9mZnNldCA9IHBvcy5kZXBy
ZWNhdGVkRWRpdGluZ09mZnNldCgpOworICAgIFRleHQqIHRleHROb2RlID0gc3RhdGljX2Nhc3Q8
VGV4dCo+KHBvcy5jb250YWluZXJOb2RlKCkpOworICAgIHVuc2lnbmVkIG9mZnNldCA9IHBvcy5v
ZmZzZXRJbkNvbnRhaW5lck5vZGUoKTsKICAgICB1bnNpZ25lZCBsZW5ndGggPSB0ZXh0Tm9kZS0+
bGVuZ3RoKCk7CiAgICAgaWYgKG9mZnNldCA+PSBsZW5ndGgpCiAgICAgICAgIHJldHVybiAwOwpA
QCAtNTI3LDExICs1MjIsMTEgQEAgVUNoYXIzMiBWaXNpYmxlUG9zaXRpb246OmNoYXJhY3RlckFm
dGVyKAogCiBJbnRSZWN0IFZpc2libGVQb3NpdGlvbjo6bG9jYWxDYXJldFJlY3QoUmVuZGVyT2Jq
ZWN0KiYgcmVuZGVyZXIpIGNvbnN0CiB7Ci0gICAgTm9kZSogbm9kZSA9IG1fZGVlcFBvc2l0aW9u
Lm5vZGUoKTsKLSAgICBpZiAoIW5vZGUpIHsKKyAgICBpZiAobV9kZWVwUG9zaXRpb24uaXNOdWxs
KCkpIHsKICAgICAgICAgcmVuZGVyZXIgPSAwOwogICAgICAgICByZXR1cm4gSW50UmVjdCgpOwog
ICAgIH0KKyAgICBOb2RlKiBub2RlID0gbV9kZWVwUG9zaXRpb24uY29udGFpbmVyTm9kZSgpOwog
ICAgIAogICAgIHJlbmRlcmVyID0gbm9kZS0+cmVuZGVyZXIoKTsKICAgICBpZiAoIXJlbmRlcmVy
KQpAQCAtNTk5LDE5ICs1OTQsMTkgQEAgUGFzc1JlZlB0cjxSYW5nZT4gbWFrZVJhbmdlKGNvbnN0
IFZpc2libAogICAgIAogICAgIFBvc2l0aW9uIHMgPSBzdGFydC5kZWVwRXF1aXZhbGVudCgpLnBh
cmVudEFuY2hvcmVkRXF1aXZhbGVudCgpOwogICAgIFBvc2l0aW9uIGUgPSBlbmQuZGVlcEVxdWl2
YWxlbnQoKS5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKTsKLSAgICByZXR1cm4gUmFuZ2U6OmNy
ZWF0ZShzLm5vZGUoKS0+ZG9jdW1lbnQoKSwgcy5ub2RlKCksIHMuZGVwcmVjYXRlZEVkaXRpbmdP
ZmZzZXQoKSwgZS5ub2RlKCksIGUuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSk7CisgICAgcmV0
dXJuIFJhbmdlOjpjcmVhdGUocy5jb250YWluZXJOb2RlKCktPmRvY3VtZW50KCksIHMuY29udGFp
bmVyTm9kZSgpLCBzLm9mZnNldEluQ29udGFpbmVyTm9kZSgpLCBlLmNvbnRhaW5lck5vZGUoKSwg
ZS5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSk7CiB9CiAKIFZpc2libGVQb3NpdGlvbiBzdGFydFZp
c2libGVQb3NpdGlvbihjb25zdCBSYW5nZSAqciwgRUFmZmluaXR5IGFmZmluaXR5KQogewogICAg
IGludCBleGNlcHRpb24gPSAwOwotICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oci0+c3RhcnRD
b250YWluZXIoZXhjZXB0aW9uKSwgci0+c3RhcnRPZmZzZXQoZXhjZXB0aW9uKSwgYWZmaW5pdHkp
OworICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oUG9zaXRpb24oci0+c3RhcnRDb250YWluZXIo
ZXhjZXB0aW9uKSwgci0+c3RhcnRPZmZzZXQoZXhjZXB0aW9uKSwgUG9zaXRpb246OlBvc2l0aW9u
SXNPZmZzZXRJbkFuY2hvciksIGFmZmluaXR5KTsKIH0KIAogVmlzaWJsZVBvc2l0aW9uIGVuZFZp
c2libGVQb3NpdGlvbihjb25zdCBSYW5nZSAqciwgRUFmZmluaXR5IGFmZmluaXR5KQogewogICAg
IGludCBleGNlcHRpb24gPSAwOwotICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oci0+ZW5kQ29u
dGFpbmVyKGV4Y2VwdGlvbiksIHItPmVuZE9mZnNldChleGNlcHRpb24pLCBhZmZpbml0eSk7Cisg
ICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihQb3NpdGlvbihyLT5lbmRDb250YWluZXIoZXhjZXB0
aW9uKSwgci0+ZW5kT2Zmc2V0KGV4Y2VwdGlvbiksIFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0
SW5BbmNob3IpLCBhZmZpbml0eSk7CiB9CiAKIGJvb2wgc2V0U3RhcnQoUmFuZ2UgKnIsIGNvbnN0
IFZpc2libGVQb3NpdGlvbiAmdmlzaWJsZVBvc2l0aW9uKQpAQCAtNjIwLDcgKzYxNSw3IEBAIGJv
b2wgc2V0U3RhcnQoUmFuZ2UgKnIsIGNvbnN0IFZpc2libGVQb3MKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIFBvc2l0aW9uIHAgPSB2aXNpYmxlUG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKS5w
YXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKTsKICAgICBpbnQgY29kZSA9IDA7Ci0gICAgci0+c2V0
U3RhcnQocC5ub2RlKCksIHAuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSwgY29kZSk7CisgICAg
ci0+c2V0U3RhcnQocC5jb250YWluZXJOb2RlKCksIHAub2Zmc2V0SW5Db250YWluZXJOb2RlKCks
IGNvZGUpOwogICAgIHJldHVybiBjb2RlID09IDA7CiB9CiAKQEAgLTYzMCw3ICs2MjUsNyBAQCBi
b29sIHNldEVuZChSYW5nZSAqciwgY29uc3QgVmlzaWJsZVBvc2l0CiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICBQb3NpdGlvbiBwID0gdmlzaWJsZVBvc2l0aW9uLmRlZXBFcXVpdmFsZW50KCku
cGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCk7CiAgICAgaW50IGNvZGUgPSAwOwotICAgIHItPnNl
dEVuZChwLm5vZGUoKSwgcC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpLCBjb2RlKTsKKyAgICBy
LT5zZXRFbmQocC5jb250YWluZXJOb2RlKCksIHAub2Zmc2V0SW5Db250YWluZXJOb2RlKCksIGNv
ZGUpOwogICAgIHJldHVybiBjb2RlID09IDA7CiB9CiAKQEAgLTY0NiwxMCArNjQxLDEyIEBAIGJv
b2wgaXNGaXJzdFZpc2libGVQb3NpdGlvbkluTm9kZShjb25zdCAKIHsKICAgICBpZiAodmlzaWJs
ZVBvc2l0aW9uLmlzTnVsbCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgaWYg
KCF2aXNpYmxlUG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKS5ub2RlKCktPmlzRGVzY2VuZGFudE9m
KG5vZGUpKQorCisgICAgUG9zaXRpb24gcCA9IHZpc2libGVQb3NpdGlvbi5kZWVwRXF1aXZhbGVu
dCgpOworCisgICAgaWYgKCFwLm5vZGUoKS0+aXNEZXNjZW5kYW50T2Yobm9kZSkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgCisKICAgICBWaXNpYmxlUG9zaXRpb24gcHJldmlvdXMg
PSB2aXNpYmxlUG9zaXRpb24ucHJldmlvdXMoKTsKICAgICByZXR1cm4gcHJldmlvdXMuaXNOdWxs
KCkgfHwgIXByZXZpb3VzLmRlZXBFcXVpdmFsZW50KCkubm9kZSgpLT5pc0Rlc2NlbmRhbnRPZihu
b2RlKTsKIH0KQEAgLTY1OCwxMCArNjU1LDEyIEBAIGJvb2wgaXNMYXN0VmlzaWJsZVBvc2l0aW9u
SW5Ob2RlKGNvbnN0IFYKIHsKICAgICBpZiAodmlzaWJsZVBvc2l0aW9uLmlzTnVsbCgpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgaWYgKCF2aXNpYmxlUG9zaXRpb24uZGVlcEVx
dWl2YWxlbnQoKS5ub2RlKCktPmlzRGVzY2VuZGFudE9mKG5vZGUpKQorCisgICAgUG9zaXRpb24g
cCA9IHZpc2libGVQb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgpOworCisgICAgaWYgKCFwLm5vZGUo
KS0+aXNEZXNjZW5kYW50T2Yobm9kZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
ICAgICAgICAKKwogICAgIFZpc2libGVQb3NpdGlvbiBuZXh0ID0gdmlzaWJsZVBvc2l0aW9uLm5l
eHQoKTsKICAgICByZXR1cm4gbmV4dC5pc051bGwoKSB8fCAhbmV4dC5kZWVwRXF1aXZhbGVudCgp
Lm5vZGUoKS0+aXNEZXNjZW5kYW50T2Yobm9kZSk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvVmlzaWJsZVBvc2l0aW9uLmgJKHJldmlzaW9uIDc3MzgwKQorKysgU291cmNlL1dlYkNv
cmUvZWRpdGluZy9WaXNpYmxlUG9zaXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNTQsNyArNTQs
NiBAQCBwdWJsaWM6CiAgICAgLy8gTk9URTogVVBTVFJFQU0gYWZmaW5pdHkgd2lsbCBiZSB1c2Vk
IG9ubHkgaWYgcG9zIGlzIGF0IGVuZCBvZiBhIHdyYXBwZWQgbGluZSwKICAgICAvLyBvdGhlcndp
c2UgaXQgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gRE9XTlNUUkVBTQogICAgIFZpc2libGVQb3NpdGlv
bigpIDogbV9hZmZpbml0eShWUF9ERUZBVUxUX0FGRklOSVRZKSB7IH0KLSAgICBWaXNpYmxlUG9z
aXRpb24oTm9kZSosIGludCBvZmZzZXQsIEVBZmZpbml0eSk7CiAgICAgVmlzaWJsZVBvc2l0aW9u
KGNvbnN0IFBvc2l0aW9uJiwgRUFmZmluaXR5ID0gVlBfREVGQVVMVF9BRkZJTklUWSk7CiAKICAg
ICB2b2lkIGNsZWFyKCkgeyBtX2RlZXBQb3NpdGlvbi5jbGVhcigpOyB9CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcAkocmV2aXNpb24gNzczODApCisrKyBTb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDI2LDcg
KzQyNiw3IEBAIHN0YXRpYyBOb2RlKiBmaXJzdEluU3BlY2lhbEVsZW1lbnQoY29uc3QKICAgICBm
b3IgKE5vZGUqIG4gPSBwb3Mubm9kZSgpOyBuICYmIG4tPnJvb3RFZGl0YWJsZUVsZW1lbnQoKSA9
PSByb290RWRpdGFibGVFbGVtZW50OyBuID0gbi0+cGFyZW50Tm9kZSgpKQogICAgICAgICBpZiAo
aXNTcGVjaWFsRWxlbWVudChuKSkgewogICAgICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHZQb3Mg
PSBWaXNpYmxlUG9zaXRpb24ocG9zLCBET1dOU1RSRUFNKTsKLSAgICAgICAgICAgIFZpc2libGVQ
b3NpdGlvbiBmaXJzdEluRWxlbWVudCA9IFZpc2libGVQb3NpdGlvbihuLCAwLCBET1dOU1RSRUFN
KTsKKyAgICAgICAgICAgIFZpc2libGVQb3NpdGlvbiBmaXJzdEluRWxlbWVudCA9IFZpc2libGVQ
b3NpdGlvbihmaXJzdFBvc2l0aW9uSW5PckJlZm9yZU5vZGUobiksIERPV05TVFJFQU0pOwogICAg
ICAgICAgICAgaWYgKGlzVGFibGVFbGVtZW50KG4pICYmIHZQb3MgPT0gZmlyc3RJbkVsZW1lbnQu
bmV4dCgpKQogICAgICAgICAgICAgICAgIHJldHVybiBuOwogICAgICAgICAgICAgaWYgKHZQb3Mg
PT0gZmlyc3RJbkVsZW1lbnQpCkBAIC00NDIsNyArNDQyLDcgQEAgc3RhdGljIE5vZGUqIGxhc3RJ
blNwZWNpYWxFbGVtZW50KGNvbnN0IAogICAgIGZvciAoTm9kZSogbiA9IHBvcy5ub2RlKCk7IG4g
JiYgbi0+cm9vdEVkaXRhYmxlRWxlbWVudCgpID09IHJvb3RFZGl0YWJsZUVsZW1lbnQ7IG4gPSBu
LT5wYXJlbnROb2RlKCkpCiAgICAgICAgIGlmIChpc1NwZWNpYWxFbGVtZW50KG4pKSB7CiAgICAg
ICAgICAgICBWaXNpYmxlUG9zaXRpb24gdlBvcyA9IFZpc2libGVQb3NpdGlvbihwb3MsIERPV05T
VFJFQU0pOwotICAgICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIGxhc3RJbkVsZW1lbnQgPSBWaXNp
YmxlUG9zaXRpb24obiwgbi0+Y2hpbGROb2RlQ291bnQoKSwgRE9XTlNUUkVBTSk7CisgICAgICAg
ICAgICBWaXNpYmxlUG9zaXRpb24gbGFzdEluRWxlbWVudCA9IFZpc2libGVQb3NpdGlvbihQb3Np
dGlvbihuLCBuLT5jaGlsZE5vZGVDb3VudCgpLCBQb3NpdGlvbjo6UG9zaXRpb25Jc09mZnNldElu
QW5jaG9yKSwgRE9XTlNUUkVBTSk7CiAgICAgICAgICAgICBpZiAoaXNUYWJsZUVsZW1lbnQobikg
JiYgdlBvcyA9PSBsYXN0SW5FbGVtZW50LnByZXZpb3VzKCkpCiAgICAgICAgICAgICAgICAgcmV0
dXJuIG47CiAgICAgICAgICAgICBpZiAodlBvcyA9PSBsYXN0SW5FbGVtZW50KQpAQCAtNTE5LDcg
KzUxOSw3IEBAIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9zaXRpb25CZWZvcmVOb2QKIHsKICAg
ICBBU1NFUlQobm9kZSk7CiAgICAgaWYgKG5vZGUtPmNoaWxkTm9kZUNvdW50KCkpCi0gICAgICAg
IHJldHVybiBWaXNpYmxlUG9zaXRpb24obm9kZSwgMCwgRE9XTlNUUkVBTSk7CisgICAgICAgIHJl
dHVybiBWaXNpYmxlUG9zaXRpb24oZmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2RlKG5vZGUpLCBE
T1dOU1RSRUFNKTsKICAgICBBU1NFUlQobm9kZS0+cGFyZW50Tm9kZSgpKTsKICAgICByZXR1cm4g
cG9zaXRpb25JblBhcmVudEJlZm9yZU5vZGUobm9kZSk7CiB9CkBAIC01MjksNyArNTI5LDcgQEAg
VmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3NpdGlvbkFmdGVyTm9kZQogewogICAgIEFTU0VSVChu
b2RlKTsKICAgICBpZiAobm9kZS0+Y2hpbGROb2RlQ291bnQoKSkKLSAgICAgICAgcmV0dXJuIFZp
c2libGVQb3NpdGlvbihub2RlLCBub2RlLT5jaGlsZE5vZGVDb3VudCgpLCBET1dOU1RSRUFNKTsK
KyAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihsYXN0UG9zaXRpb25Jbk9yQWZ0ZXJOb2Rl
KG5vZGUpLCBET1dOU1RSRUFNKTsKICAgICBBU1NFUlQobm9kZS0+cGFyZW50Tm9kZSgpKTsKICAg
ICByZXR1cm4gcG9zaXRpb25JblBhcmVudEFmdGVyTm9kZShub2RlKTsKIH0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvdmlzaWJsZV91bml0cy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvZWRpdGluZy92aXNpYmxlX3VuaXRzLmNwcAkocmV2aXNpb24gNzczODApCisrKyBT
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL3Zpc2libGVfdW5pdHMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zODMsNyArMzgzLDcgQEAgc3RhdGljIFZpc2libGVQb3NpdGlvbiBzdGFydFBvc2l0aW9uRm9y
TAogICAgICAgICBzdGFydE9mZnNldCA9IHN0YXJ0VGV4dEJveC0+c3RhcnQoKTsKICAgICB9CiAg
IAotICAgIFZpc2libGVQb3NpdGlvbiB2aXNQb3MgPSBWaXNpYmxlUG9zaXRpb24oc3RhcnROb2Rl
LCBzdGFydE9mZnNldCwgRE9XTlNUUkVBTSk7CisgICAgVmlzaWJsZVBvc2l0aW9uIHZpc1BvcyA9
IFZpc2libGVQb3NpdGlvbihQb3NpdGlvbihzdGFydE5vZGUsIHN0YXJ0T2Zmc2V0LCBQb3NpdGlv
bjo6UG9zaXRpb25Jc09mZnNldEluQW5jaG9yKSwgRE9XTlNUUkVBTSk7CiAgICAgcmV0dXJuIHBv
c2l0aW9uQXZvaWRpbmdGaXJzdFBvc2l0aW9uSW5UYWJsZSh2aXNQb3MpOwogfQogCkBAIC00Mjks
MTcgKzQyOSwxOSBAQCBzdGF0aWMgVmlzaWJsZVBvc2l0aW9uIGVuZFBvc2l0aW9uRm9yTGluCiAg
ICAgICAgIGVuZEJveCA9IGVuZEJveC0+cHJldkxlYWZDaGlsZCgpOwogICAgIH0KICAgICAKLSAg
ICBpbnQgZW5kT2Zmc2V0ID0gMTsKKyAgICBQb3NpdGlvbiBwb3M7CiAgICAgaWYgKGVuZE5vZGUt
Pmhhc1RhZ05hbWUoYnJUYWcpKSB7Ci0gICAgICAgIGVuZE9mZnNldCA9IDA7CisgICAgICAgIHBv
cyA9IFBvc2l0aW9uKGVuZE5vZGUsIFBvc2l0aW9uOjpQb3NpdGlvbklzQmVmb3JlQW5jaG9yKTsK
ICAgICB9IGVsc2UgaWYgKGVuZEJveC0+aXNJbmxpbmVUZXh0Qm94KCkpIHsKICAgICAgICAgSW5s
aW5lVGV4dEJveCAqZW5kVGV4dEJveCA9IHN0YXRpY19jYXN0PElubGluZVRleHRCb3ggKj4oZW5k
Qm94KTsKLSAgICAgICAgZW5kT2Zmc2V0ID0gZW5kVGV4dEJveC0+c3RhcnQoKTsKKyAgICAgICAg
aW50IGVuZE9mZnNldCA9IGVuZFRleHRCb3gtPnN0YXJ0KCk7CiAgICAgICAgIGlmICghZW5kVGV4
dEJveC0+aXNMaW5lQnJlYWsoKSkKICAgICAgICAgICAgIGVuZE9mZnNldCArPSBlbmRUZXh0Qm94
LT5sZW4oKTsKLSAgICB9CisgICAgICAgIHBvcyA9IFBvc2l0aW9uKGVuZE5vZGUsIGVuZE9mZnNl
dCwgUG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvcik7CisgICAgfSBlbHNlCisgICAg
ICAgIHBvcyA9IFBvc2l0aW9uKGVuZE5vZGUsIFBvc2l0aW9uOjpQb3NpdGlvbklzQWZ0ZXJBbmNo
b3IpOwogICAgIAotICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oZW5kTm9kZSwgZW5kT2Zmc2V0
LCBWUF9VUFNUUkVBTV9JRl9QT1NTSUJMRSk7CisgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihw
b3MsIFZQX1VQU1RSRUFNX0lGX1BPU1NJQkxFKTsKIH0KIAogVmlzaWJsZVBvc2l0aW9uIGVuZE9m
TGluZShjb25zdCBWaXNpYmxlUG9zaXRpb24mIGMpCkBAIC01NzUsNyArNTc3LDcgQEAgVmlzaWJs
ZVBvc2l0aW9uIHByZXZpb3VzTGluZVBvc2l0aW9uKGNvbgogICAgIC8vIE1vdmUgdG8gdGhlIHN0
YXJ0IG9mIHRoZSBjb250ZW50IGluIHRoaXMgYmxvY2ssIHdoaWNoIGVmZmVjdGl2ZWx5IG1vdmVz
IHVzCiAgICAgLy8gdG8gdGhlIHN0YXJ0IG9mIHRoZSBsaW5lIHdlJ3JlIG9uLgogICAgIEVsZW1l
bnQqIHJvb3RFbGVtZW50ID0gbm9kZS0+aXNDb250ZW50RWRpdGFibGUoKSA/IG5vZGUtPnJvb3RF
ZGl0YWJsZUVsZW1lbnQoKSA6IG5vZGUtPmRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgpOwot
ICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24ocm9vdEVsZW1lbnQsIDAsIERPV05TVFJFQU0pOwor
ICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oUG9zaXRpb24ocm9vdEVsZW1lbnQsIDAsIFBvc2l0
aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3IpLCBET1dOU1RSRUFNKTsKIH0KIAogc3RhdGlj
IE5vZGUqIG5leHRMZWFmV2l0aFNhbWVFZGl0YWJpbGl0eShOb2RlKiBub2RlLCBpbnQgb2Zmc2V0
KQpAQCAtNjgwLDcgKzY4Miw3IEBAIFZpc2libGVQb3NpdGlvbiBuZXh0TGluZVBvc2l0aW9uKGNv
bnN0IFYKICAgICAvLyBNb3ZlIHRvIHRoZSBlbmQgb2YgdGhlIGNvbnRlbnQgaW4gdGhpcyBibG9j
aywgd2hpY2ggZWZmZWN0aXZlbHkgbW92ZXMgdXMKICAgICAvLyB0byB0aGUgZW5kIG9mIHRoZSBs
aW5lIHdlJ3JlIG9uLgogICAgIEVsZW1lbnQqIHJvb3RFbGVtZW50ID0gbm9kZS0+aXNDb250ZW50
RWRpdGFibGUoKSA/IG5vZGUtPnJvb3RFZGl0YWJsZUVsZW1lbnQoKSA6IG5vZGUtPmRvY3VtZW50
KCktPmRvY3VtZW50RWxlbWVudCgpOwotICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24ocm9vdEVs
ZW1lbnQsIHJvb3RFbGVtZW50ID8gcm9vdEVsZW1lbnQtPmNoaWxkTm9kZUNvdW50KCkgOiAwLCBE
T1dOU1RSRUFNKTsKKyAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKFBvc2l0aW9uKHJvb3RFbGVt
ZW50LCByb290RWxlbWVudCA/IHJvb3RFbGVtZW50LT5jaGlsZE5vZGVDb3VudCgpIDogMCwgUG9z
aXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvciksIERPV05TVFJFQU0pOwogfQogCiAvLyAt
LS0tLS0tLS0KQEAgLTc1Miw2ICs3NTQsNyBAQCBWaXNpYmxlUG9zaXRpb24gc3RhcnRPZlBhcmFn
cmFwaChjb25zdCBWCiAKICAgICBOb2RlICpub2RlID0gc3RhcnROb2RlOwogICAgIGludCBvZmZz
ZXQgPSBwLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCk7CisgICAgUG9zaXRpb246OkFuY2hvclR5
cGUgdHlwZSA9IHAuYW5jaG9yVHlwZSgpOwogCiAgICAgTm9kZSAqbiA9IHN0YXJ0Tm9kZTsKICAg
ICB3aGlsZSAobikgewpAQCAtNzcyLDYgKzc3NSw3IEBAIFZpc2libGVQb3NpdGlvbiBzdGFydE9m
UGFyYWdyYXBoKGNvbnN0IFYKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGlmIChyLT5p
c1RleHQoKSAmJiByLT5jYXJldE1heFJlbmRlcmVkT2Zmc2V0KCkgPiAwKSB7CisgICAgICAgICAg
ICB0eXBlID0gUG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvcjsKICAgICAgICAgICAg
IGlmIChzdHlsZS0+cHJlc2VydmVOZXdsaW5lKCkpIHsKICAgICAgICAgICAgICAgICBjb25zdCBV
Q2hhciogY2hhcnMgPSB0b1JlbmRlclRleHQociktPmNoYXJhY3RlcnMoKTsKICAgICAgICAgICAg
ICAgICBpbnQgaSA9IHRvUmVuZGVyVGV4dChyKS0+dGV4dExlbmd0aCgpOwpAQCAtNzgwLDIwICs3
ODQsMjMgQEAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0T2ZQYXJhZ3JhcGgoY29uc3QgVgogICAgICAg
ICAgICAgICAgICAgICBpID0gbWF4KDAsIG8pOwogICAgICAgICAgICAgICAgIHdoaWxlICgtLWkg
Pj0gMCkKICAgICAgICAgICAgICAgICAgICAgaWYgKGNoYXJzW2ldID09ICdcbicpCi0gICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKG4sIGkgKyAxLCBET1dOU1RS
RUFNKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oUG9z
aXRpb24obiwgaSArIDEsIHR5cGUpLCBET1dOU1RSRUFNKTsKICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIG5vZGUgPSBuOwogICAgICAgICAgICAgb2Zmc2V0ID0gMDsKICAgICAgICAgICAgIG4g
PSBuLT50cmF2ZXJzZVByZXZpb3VzTm9kZVBvc3RPcmRlcihzdGFydEJsb2NrKTsKICAgICAgICAg
fSBlbHNlIGlmIChlZGl0aW5nSWdub3Jlc0NvbnRlbnQobikgfHwgaXNUYWJsZUVsZW1lbnQobikp
IHsKICAgICAgICAgICAgIG5vZGUgPSBuOwotICAgICAgICAgICAgb2Zmc2V0ID0gMDsKKyAgICAg
ICAgICAgIHR5cGUgPSBQb3NpdGlvbjo6UG9zaXRpb25Jc0JlZm9yZUFuY2hvcjsKICAgICAgICAg
ICAgIG4gPSBuLT5wcmV2aW91c1NpYmxpbmcoKSA/IG4tPnByZXZpb3VzU2libGluZygpIDogbi0+
dHJhdmVyc2VQcmV2aW91c05vZGVQb3N0T3JkZXIoc3RhcnRCbG9jayk7CiAgICAgICAgIH0gZWxz
ZQogICAgICAgICAgICAgbiA9IG4tPnRyYXZlcnNlUHJldmlvdXNOb2RlUG9zdE9yZGVyKHN0YXJ0
QmxvY2spOwogICAgIH0KIAotICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24obm9kZSwgb2Zmc2V0
LCBET1dOU1RSRUFNKTsKKyAgICBpZiAodHlwZSA9PSBQb3NpdGlvbjo6UG9zaXRpb25Jc09mZnNl
dEluQW5jaG9yKQorICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKFBvc2l0aW9uKG5vZGUs
IG9mZnNldCwgdHlwZSksIERPV05TVFJFQU0pOworICAgIAorICAgIHJldHVybiBWaXNpYmxlUG9z
aXRpb24oUG9zaXRpb24obm9kZSwgdHlwZSksIERPV05TVFJFQU0pOwogfQogCiBWaXNpYmxlUG9z
aXRpb24gZW5kT2ZQYXJhZ3JhcGgoY29uc3QgVmlzaWJsZVBvc2l0aW9uICZjLCBFZGl0aW5nQm91
bmRhcnlDcm9zc2luZ1J1bGUgYm91bmRhcnlDcm9zc2luZ1J1bGUpCkBAIC04MTIsNiArODE5LDcg
QEAgVmlzaWJsZVBvc2l0aW9uIGVuZE9mUGFyYWdyYXBoKGNvbnN0IFZpcwogICAgIAogICAgIE5v
ZGUgKm5vZGUgPSBzdGFydE5vZGU7CiAgICAgaW50IG9mZnNldCA9IHAuZGVwcmVjYXRlZEVkaXRp
bmdPZmZzZXQoKTsKKyAgICBQb3NpdGlvbjo6QW5jaG9yVHlwZSB0eXBlID0gcC5hbmNob3JUeXBl
KCk7CiAKICAgICBOb2RlICpuID0gc3RhcnROb2RlOwogICAgIHdoaWxlIChuKSB7CkBAIC04MzQs
MjUgKzg0MiwyOSBAQCBWaXNpYmxlUG9zaXRpb24gZW5kT2ZQYXJhZ3JhcGgoY29uc3QgVmlzCiAg
ICAgICAgIC8vIEZJWE1FOiBXZSBhdm9pZCByZXR1cm5pbmcgYSBwb3NpdGlvbiB3aGVyZSB0aGUg
cmVuZGVyZXIgY2FuJ3QgYWNjZXB0IHRoZSBjYXJldC4KICAgICAgICAgaWYgKHItPmlzVGV4dCgp
ICYmIHItPmNhcmV0TWF4UmVuZGVyZWRPZmZzZXQoKSA+IDApIHsKICAgICAgICAgICAgIGludCBs
ZW5ndGggPSB0b1JlbmRlclRleHQociktPnRleHRMZW5ndGgoKTsKKyAgICAgICAgICAgIHR5cGUg
PSBQb3NpdGlvbjo6UG9zaXRpb25Jc09mZnNldEluQW5jaG9yOwogICAgICAgICAgICAgaWYgKHN0
eWxlLT5wcmVzZXJ2ZU5ld2xpbmUoKSkgewogICAgICAgICAgICAgICAgIGNvbnN0IFVDaGFyKiBj
aGFycyA9IHRvUmVuZGVyVGV4dChyKS0+Y2hhcmFjdGVycygpOwogICAgICAgICAgICAgICAgIGlu
dCBvID0gbiA9PSBzdGFydE5vZGUgPyBvZmZzZXQgOiAwOwogICAgICAgICAgICAgICAgIGZvciAo
aW50IGkgPSBvOyBpIDwgbGVuZ3RoOyArK2kpCiAgICAgICAgICAgICAgICAgICAgIGlmIChjaGFy
c1tpXSA9PSAnXG4nKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFZpc2libGVQb3Np
dGlvbihuLCBpLCBET1dOU1RSRUFNKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBW
aXNpYmxlUG9zaXRpb24oUG9zaXRpb24obiwgaSwgdHlwZSksIERPV05TVFJFQU0pOwogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgbm9kZSA9IG47CiAgICAgICAgICAgICBvZmZzZXQgPSByLT5j
YXJldE1heE9mZnNldCgpOwogICAgICAgICAgICAgbiA9IG4tPnRyYXZlcnNlTmV4dE5vZGUoc3Rh
eUluc2lkZUJsb2NrKTsKICAgICAgICAgfSBlbHNlIGlmIChlZGl0aW5nSWdub3Jlc0NvbnRlbnQo
bikgfHwgaXNUYWJsZUVsZW1lbnQobikpIHsKICAgICAgICAgICAgIG5vZGUgPSBuOwotICAgICAg
ICAgICAgb2Zmc2V0ID0gbGFzdE9mZnNldEZvckVkaXRpbmcobik7CisgICAgICAgICAgICB0eXBl
ID0gUG9zaXRpb246OlBvc2l0aW9uSXNBZnRlckFuY2hvcjsKICAgICAgICAgICAgIG4gPSBuLT50
cmF2ZXJzZU5leHRTaWJsaW5nKHN0YXlJbnNpZGVCbG9jayk7CiAgICAgICAgIH0gZWxzZQogICAg
ICAgICAgICAgbiA9IG4tPnRyYXZlcnNlTmV4dE5vZGUoc3RheUluc2lkZUJsb2NrKTsKICAgICB9
CiAKLSAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKG5vZGUsIG9mZnNldCwgRE9XTlNUUkVBTSk7
CisgICAgaWYgKHR5cGUgPT0gUG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvcikKKyAg
ICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihQb3NpdGlvbihub2RlLCBvZmZzZXQsIHR5cGUp
LCBET1dOU1RSRUFNKTsKKworICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oUG9zaXRpb24obm9k
ZSwgdHlwZSksIERPV05TVFJFQU0pOwogfQogCiBWaXNpYmxlUG9zaXRpb24gc3RhcnRPZk5leHRQ
YXJhZ3JhcGgoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2aXNpYmxlUG9zaXRpb24pCkBAIC05MjYs
NyArOTM4LDcgQEAgVmlzaWJsZVBvc2l0aW9uIGVuZE9mQmxvY2soY29uc3QgVmlzaWJsZQogCiAg
ICAgTm9kZSAqc3RhcnRCbG9jayA9IHN0YXJ0Tm9kZS0+ZW5jbG9zaW5nQmxvY2tGbG93RWxlbWVu
dCgpOwogICAgIAotICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oc3RhcnRCbG9jaywgc3RhcnRC
bG9jay0+Y2hpbGROb2RlQ291bnQoKSwgVlBfREVGQVVMVF9BRkZJTklUWSk7ICAgCisgICAgcmV0
dXJuIFZpc2libGVQb3NpdGlvbihQb3NpdGlvbihzdGFydEJsb2NrLCBzdGFydEJsb2NrLT5jaGls
ZE5vZGVDb3VudCgpLCBQb3NpdGlvbjo6UG9zaXRpb25Jc09mZnNldEluQW5jaG9yKSwgVlBfREVG
QVVMVF9BRkZJTklUWSk7ICAgCiB9CiAKIGJvb2wgaW5TYW1lQmxvY2soY29uc3QgVmlzaWJsZVBv
c2l0aW9uICZhLCBjb25zdCBWaXNpYmxlUG9zaXRpb24gJmIpCkBAIC05NTEsNyArOTYzLDcgQEAg
VmlzaWJsZVBvc2l0aW9uIHN0YXJ0T2ZEb2N1bWVudChjb25zdCBObwogICAgIGlmICghbm9kZSkK
ICAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbigpOwogICAgIAotICAgIHJldHVybiBWaXNp
YmxlUG9zaXRpb24obm9kZS0+ZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCksIDAsIERPV05T
VFJFQU0pOworICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oUG9zaXRpb24obm9kZS0+ZG9jdW1l
bnQoKS0+ZG9jdW1lbnRFbGVtZW50KCksIDAsIFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5B
bmNob3IpLCBET1dOU1RSRUFNKTsKIH0KIAogVmlzaWJsZVBvc2l0aW9uIHN0YXJ0T2ZEb2N1bWVu
dChjb25zdCBWaXNpYmxlUG9zaXRpb24gJmMpCkBAIC05NjUsNyArOTc3LDcgQEAgVmlzaWJsZVBv
c2l0aW9uIGVuZE9mRG9jdW1lbnQoY29uc3QgTm9kZQogICAgICAgICByZXR1cm4gVmlzaWJsZVBv
c2l0aW9uKCk7CiAgICAgCiAgICAgRWxlbWVudCogZG9jID0gbm9kZS0+ZG9jdW1lbnQoKS0+ZG9j
dW1lbnRFbGVtZW50KCk7Ci0gICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihkb2MsIGRvYy0+Y2hp
bGROb2RlQ291bnQoKSwgRE9XTlNUUkVBTSk7CisgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihQ
b3NpdGlvbihkb2MsIGRvYy0+Y2hpbGROb2RlQ291bnQoKSwgUG9zaXRpb246OlBvc2l0aW9uSXNP
ZmZzZXRJbkFuY2hvciksIERPV05TVFJFQU0pOwogfQogCiBWaXNpYmxlUG9zaXRpb24gZW5kT2ZE
b2N1bWVudChjb25zdCBWaXNpYmxlUG9zaXRpb24gJmMpCkBAIC0xMTIxLDkgKzExMzMsOCBAQCBz
dGF0aWMgVmlzaWJsZVBvc2l0aW9uIGxvZ2ljYWxTdGFydFBvc2l0CiAgICAgaWYgKCFsb2dpY2Fs
U3RhcnROb2RlKQogICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKCk7CiAKLSAgICBpbnQg
c3RhcnRPZmZzZXQgPSBsb2dpY2FsU3RhcnRCb3gtPmNhcmV0TWluT2Zmc2V0KCk7Ci0gIAotICAg
IFZpc2libGVQb3NpdGlvbiB2aXNQb3MgPSBWaXNpYmxlUG9zaXRpb24obG9naWNhbFN0YXJ0Tm9k
ZSwgc3RhcnRPZmZzZXQsIERPV05TVFJFQU0pOworICAgIFZpc2libGVQb3NpdGlvbiB2aXNQb3Mg
PSBsb2dpY2FsU3RhcnROb2RlLT5pc1RleHROb2RlKCkgPyBWaXNpYmxlUG9zaXRpb24oUG9zaXRp
b24obG9naWNhbFN0YXJ0Tm9kZSwgbG9naWNhbFN0YXJ0Qm94LT5jYXJldE1pbk9mZnNldCgpLCBQ
b3NpdGlvbjo6UG9zaXRpb25Jc09mZnNldEluQW5jaG9yKSwgRE9XTlNUUkVBTSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogVmlz
aWJsZVBvc2l0aW9uKFBvc2l0aW9uKGxvZ2ljYWxTdGFydE5vZGUsIFBvc2l0aW9uOjpQb3NpdGlv
bklzQmVmb3JlQW5jaG9yKSwgRE9XTlNUUkVBTSk7CiAgICAgcmV0dXJuIHBvc2l0aW9uQXZvaWRp
bmdGaXJzdFBvc2l0aW9uSW5UYWJsZSh2aXNQb3MpOwogfQogCkBAIC0xMTU3LDE3ICsxMTY4LDE5
IEBAIHN0YXRpYyBWaXNpYmxlUG9zaXRpb24gbG9naWNhbEVuZFBvc2l0aW8KICAgICBpZiAoIWxv
Z2ljYWxFbmROb2RlKQogICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKCk7CiAgICAgCi0g
ICAgaW50IGVuZE9mZnNldCA9IDE7CisgICAgUG9zaXRpb24gcG9zOwogICAgIGlmIChsb2dpY2Fs
RW5kTm9kZS0+aGFzVGFnTmFtZShiclRhZykpCi0gICAgICAgIGVuZE9mZnNldCA9IDA7CisgICAg
ICAgIHBvcyA9IFBvc2l0aW9uKGxvZ2ljYWxFbmROb2RlLCBQb3NpdGlvbjo6UG9zaXRpb25Jc0Jl
Zm9yZUFuY2hvcik7CiAgICAgZWxzZSBpZiAobG9naWNhbEVuZEJveC0+aXNJbmxpbmVUZXh0Qm94
KCkpIHsKICAgICAgICAgSW5saW5lVGV4dEJveCogZW5kVGV4dEJveCA9IHN0YXRpY19jYXN0PElu
bGluZVRleHRCb3gqPihsb2dpY2FsRW5kQm94KTsKLSAgICAgICAgZW5kT2Zmc2V0ID0gZW5kVGV4
dEJveC0+c3RhcnQoKTsKKyAgICAgICAgaW50IGVuZE9mZnNldCA9IGVuZFRleHRCb3gtPnN0YXJ0
KCk7CiAgICAgICAgIGlmICghZW5kVGV4dEJveC0+aXNMaW5lQnJlYWsoKSkKICAgICAgICAgICAg
IGVuZE9mZnNldCArPSBlbmRUZXh0Qm94LT5sZW4oKTsKLSAgICB9CisgICAgICAgIHBvcyA9IFBv
c2l0aW9uKGxvZ2ljYWxFbmROb2RlLCBlbmRPZmZzZXQsIFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zm
c2V0SW5BbmNob3IpOworICAgIH0gZWxzZQorICAgICAgICBwb3MgPSBQb3NpdGlvbihsb2dpY2Fs
RW5kTm9kZSwgUG9zaXRpb246OlBvc2l0aW9uSXNBZnRlckFuY2hvcik7CiAgICAgCi0gICAgcmV0
dXJuIFZpc2libGVQb3NpdGlvbihsb2dpY2FsRW5kTm9kZSwgZW5kT2Zmc2V0LCBWUF9VUFNUUkVB
TV9JRl9QT1NTSUJMRSk7CisgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihwb3MsIFZQX1VQU1RS
RUFNX0lGX1BPU1NJQkxFKTsKIH0KIAogYm9vbCBpblNhbWVMb2dpY2FsTGluZShjb25zdCBWaXNp
YmxlUG9zaXRpb24mIGEsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYgYikKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BhZ2UvRE9NU2VsZWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wYWdlL0RPTVNlbGVjdGlvbi5jcHAJKHJldmlzaW9uIDc3MzgwKQorKysgU291cmNlL1dlYkNv
cmUvcGFnZS9ET01TZWxlY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTEsNyArMjExLDcg
QEAgdm9pZCBET01TZWxlY3Rpb246OmNvbGxhcHNlKE5vZGUqIG5vZGUsIAogICAgIGlmICghaXNW
YWxpZEZvclBvc2l0aW9uKG5vZGUpKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX2ZyYW1lLT5z
ZWxlY3Rpb24oKS0+bW92ZVRvKFZpc2libGVQb3NpdGlvbihub2RlLCBvZmZzZXQsIERPV05TVFJF
QU0pKTsKKyAgICBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+bW92ZVRvKFZpc2libGVQb3NpdGlvbihQ
b3NpdGlvbihub2RlLCBvZmZzZXQsIFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3Ip
LCBET1dOU1RSRUFNKSk7CiB9CiAKIHZvaWQgRE9NU2VsZWN0aW9uOjpjb2xsYXBzZVRvRW5kKEV4
Y2VwdGlvbkNvZGUmIGVjKQpAQCAtMjY0LDggKzI2NCw4IEBAIHZvaWQgRE9NU2VsZWN0aW9uOjpz
ZXRCYXNlQW5kRXh0ZW50KE5vZGUKICAgICBpZiAoIWlzVmFsaWRGb3JQb3NpdGlvbihiYXNlTm9k
ZSkgfHwgIWlzVmFsaWRGb3JQb3NpdGlvbihleHRlbnROb2RlKSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVCYXNlID0gVmlzaWJsZVBvc2l0aW9uKGJhc2VO
b2RlLCBiYXNlT2Zmc2V0LCBET1dOU1RSRUFNKTsKLSAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJs
ZUV4dGVudCA9IFZpc2libGVQb3NpdGlvbihleHRlbnROb2RlLCBleHRlbnRPZmZzZXQsIERPV05T
VFJFQU0pOworICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlQmFzZSA9IFZpc2libGVQb3NpdGlv
bihQb3NpdGlvbihiYXNlTm9kZSwgYmFzZU9mZnNldCwgUG9zaXRpb246OlBvc2l0aW9uSXNPZmZz
ZXRJbkFuY2hvciksIERPV05TVFJFQU0pOworICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlRXh0
ZW50ID0gVmlzaWJsZVBvc2l0aW9uKFBvc2l0aW9uKGV4dGVudE5vZGUsIGV4dGVudE9mZnNldCwg
UG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvciksIERPV05TVFJFQU0pOwogCiAgICAg
bV9mcmFtZS0+c2VsZWN0aW9uKCktPm1vdmVUbyh2aXNpYmxlQmFzZSwgdmlzaWJsZUV4dGVudCk7
CiB9CkBAIC0yODIsNyArMjgyLDcgQEAgdm9pZCBET01TZWxlY3Rpb246OnNldFBvc2l0aW9uKE5v
ZGUqIG5vZAogICAgIGlmICghaXNWYWxpZEZvclBvc2l0aW9uKG5vZGUpKQogICAgICAgICByZXR1
cm47CiAKLSAgICBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+bW92ZVRvKFZpc2libGVQb3NpdGlvbihu
b2RlLCBvZmZzZXQsIERPV05TVFJFQU0pKTsKKyAgICBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+bW92
ZVRvKFZpc2libGVQb3NpdGlvbihQb3NpdGlvbihub2RlLCBvZmZzZXQsIFBvc2l0aW9uOjpQb3Np
dGlvbklzT2Zmc2V0SW5BbmNob3IpLCBET1dOU1RSRUFNKSk7CiB9CiAKIHZvaWQgRE9NU2VsZWN0
aW9uOjptb2RpZnkoY29uc3QgU3RyaW5nJiBhbHRlclN0cmluZywgY29uc3QgU3RyaW5nJiBkaXJl
Y3Rpb25TdHJpbmcsIGNvbnN0IFN0cmluZyYgZ3JhbnVsYXJpdHlTdHJpbmcpCkBAIC0zNTMsNyAr
MzUzLDcgQEAgdm9pZCBET01TZWxlY3Rpb246OmV4dGVuZChOb2RlKiBub2RlLCBpbgogICAgIGlm
ICghaXNWYWxpZEZvclBvc2l0aW9uKG5vZGUpKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX2Zy
YW1lLT5zZWxlY3Rpb24oKS0+c2V0RXh0ZW50KFZpc2libGVQb3NpdGlvbihub2RlLCBvZmZzZXQs
IERPV05TVFJFQU0pKTsKKyAgICBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2V0RXh0ZW50KFZpc2li
bGVQb3NpdGlvbihQb3NpdGlvbihub2RlLCBvZmZzZXQsIFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zm
c2V0SW5BbmNob3IpLCBET1dOU1RSRUFNKSk7CiB9CiAKIFBhc3NSZWZQdHI8UmFuZ2U+IERPTVNl
bGVjdGlvbjo6Z2V0UmFuZ2VBdChpbnQgaW5kZXgsIEV4Y2VwdGlvbkNvZGUmIGVjKQpJbmRleDog
U291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAkocmV2aXNpb24gNzczODApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3Myw3
ICszNzMsNyBAQCBib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxlTW91c2VQcmVzc0V2ZW50CiAKICAg
ICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvcyhpbm5lck5vZGUtPnJlbmRlcmVyKCktPnBvc2l0
aW9uRm9yUG9pbnQoZXZlbnQubG9jYWxQb2ludCgpKSk7CiAgICAgaWYgKHZpc2libGVQb3MuaXNO
dWxsKCkpCi0gICAgICAgIHZpc2libGVQb3MgPSBWaXNpYmxlUG9zaXRpb24oaW5uZXJOb2RlLCAw
LCBET1dOU1RSRUFNKTsKKyAgICAgICAgdmlzaWJsZVBvcyA9IFZpc2libGVQb3NpdGlvbihmaXJz
dFBvc2l0aW9uSW5PckJlZm9yZU5vZGUoaW5uZXJOb2RlKSwgRE9XTlNUUkVBTSk7CiAgICAgUG9z
aXRpb24gcG9zID0gdmlzaWJsZVBvcy5kZWVwRXF1aXZhbGVudCgpOwogICAgIAogICAgIFZpc2li
bGVTZWxlY3Rpb24gbmV3U2VsZWN0aW9uID0gbV9mcmFtZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlv
bigpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAJKHJl
dmlzaW9uIDc3MzgwKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI2NTQsNyArMjY1NCw3IEBAIFZpc2libGVQb3NpdGlvbiBS
ZW5kZXJPYmplY3Q6OmNyZWF0ZVZpc2kKICAgICAgICAgICAgIGlmIChjYW5kaWRhdGUubm9kZSgp
LT5pc0NvbnRlbnRFZGl0YWJsZSgpKQogICAgICAgICAgICAgICAgIHJldHVybiBWaXNpYmxlUG9z
aXRpb24oY2FuZGlkYXRlLCBhZmZpbml0eSk7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIFZp
c2libGVQb3NpdGlvbihub2RlLCBvZmZzZXQsIGFmZmluaXR5KTsKKyAgICAgICAgcmV0dXJuIFZp
c2libGVQb3NpdGlvbihQb3NpdGlvbihub2RlLCBvZmZzZXQpLCBhZmZpbml0eSk7CiAgICAgfQog
CiAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBjcm9zcyB0aGUgYm91bmRhcnkgYmV0d2VlbiBlZGl0
YWJsZSBhbmQgbm9uLWVkaXRhYmxlCkBAIC0yNjY5LDcgKzI2NjksNyBAQCBWaXNpYmxlUG9zaXRp
b24gUmVuZGVyT2JqZWN0OjpjcmVhdGVWaXNpCiAgICAgICAgIFJlbmRlck9iamVjdCogcmVuZGVy
ZXIgPSBjaGlsZDsKICAgICAgICAgd2hpbGUgKChyZW5kZXJlciA9IHJlbmRlcmVyLT5uZXh0SW5Q
cmVPcmRlcihwYXJlbnQpKSkgewogICAgICAgICAgICAgaWYgKE5vZGUqIG5vZGUgPSByZW5kZXJl
ci0+bm9kZSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24obm9kZSwg
MCwgRE9XTlNUUkVBTSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihm
aXJzdFBvc2l0aW9uSW5PckJlZm9yZU5vZGUobm9kZSksIERPV05TVFJFQU0pOwogICAgICAgICB9
CiAKICAgICAgICAgLy8gRmluZCBub24tYW5vbnltb3VzIGNvbnRlbnQgYmVmb3JlLgpAQCAtMjY3
OCwxMiArMjY3OCwxMiBAQCBWaXNpYmxlUG9zaXRpb24gUmVuZGVyT2JqZWN0OjpjcmVhdGVWaXNp
CiAgICAgICAgICAgICBpZiAocmVuZGVyZXIgPT0gcGFyZW50KQogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgaWYgKE5vZGUqIG5vZGUgPSByZW5kZXJlci0+bm9kZSgpKQotICAg
ICAgICAgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24obGFzdERlZXBFZGl0aW5nUG9zaXRp
b25Gb3JOb2RlKG5vZGUpLCBET1dOU1RSRUFNKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gVmlz
aWJsZVBvc2l0aW9uKGxhc3RQb3NpdGlvbkluT3JBZnRlck5vZGUobm9kZSksIERPV05TVFJFQU0p
OwogICAgICAgICB9CiAKICAgICAgICAgLy8gVXNlIHRoZSBwYXJlbnQgaXRzZWxmIHVubGVzcyBp
dCB0b28gaXMgYW5vbnltb3VzLgogICAgICAgICBpZiAoTm9kZSogbm9kZSA9IHBhcmVudC0+bm9k
ZSgpKQotICAgICAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihub2RlLCAwLCBET1dOU1RS
RUFNKTsKKyAgICAgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oZmlyc3RQb3NpdGlvbklu
T3JCZWZvcmVOb2RlKG5vZGUpLCBET1dOU1RSRUFNKTsKIAogICAgICAgICAvLyBSZXBlYXQgYXQg
dGhlIG5leHQgbGV2ZWwgdXAuCiAgICAgICAgIGNoaWxkID0gcGFyZW50OwpJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wuY3BwCShyZXZpc2lvbiA3
NzM4MCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMyMSw3ICszMjEsNyBAQCBQYXNzUmVmUHRyPFJhbmdlPiBSZW5k
ZXJUZXh0Q29udHJvbDo6c2VsCiBWaXNpYmxlUG9zaXRpb24gUmVuZGVyVGV4dENvbnRyb2w6OnZp
c2libGVQb3NpdGlvbkZvckluZGV4KGludCBpbmRleCkgY29uc3QKIHsKICAgICBpZiAoaW5kZXgg
PD0gMCkKLSAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihtX2lubmVyVGV4dC5nZXQoKSwg
MCwgRE9XTlNUUkVBTSk7CisgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oUG9zaXRpb24o
bV9pbm5lclRleHQuZ2V0KCksIDAsIFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3Ip
LCBET1dOU1RSRUFNKTsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBSZWZQdHI8UmFu
Z2U+IHJhbmdlID0gUmFuZ2U6OmNyZWF0ZShkb2N1bWVudCgpKTsKICAgICByYW5nZS0+c2VsZWN0
Tm9kZUNvbnRlbnRzKG1faW5uZXJUZXh0LmdldCgpLCBlYyk7CkBAIC0zMzIsNyArMzMyLDcgQEAg
VmlzaWJsZVBvc2l0aW9uIFJlbmRlclRleHRDb250cm9sOjp2aXNpYgogICAgIEFTU0VSVCghZWMp
OwogICAgIGludCBlbmRPZmZzZXQgPSBpdC5yYW5nZSgpLT5lbmRPZmZzZXQoZWMpOwogICAgIEFT
U0VSVCghZWMpOwotICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oZW5kQ29udGFpbmVyLCBlbmRP
ZmZzZXQsIFVQU1RSRUFNKTsKKyAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKFBvc2l0aW9uKGVu
ZENvbnRhaW5lciwgZW5kT2Zmc2V0LCBQb3NpdGlvbjo6UG9zaXRpb25Jc09mZnNldEluQW5jaG9y
KSwgVVBTVFJFQU0pOwogfQogCiBpbnQgUmVuZGVyVGV4dENvbnRyb2w6OmluZGV4Rm9yVmlzaWJs
ZVBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgcG9zKSBjb25zdApJbmRleDogU291cmNl
L1dlYkNvcmUvc3ZnL1NWR1RleHRDb250ZW50RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvc3ZnL1NWR1RleHRDb250ZW50RWxlbWVudC5jcHAJKHJldmlzaW9uIDc3Mzgw
KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RleHRDb250ZW50RWxlbWVudC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE0NSw3ICsxNDUsNyBAQCB2b2lkIFNWR1RleHRDb250ZW50RWxlbWVudDo6
c2VsZWN0U3ViU3RyCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIEZpbmQgc2VsZWN0aW9uIHN0
YXJ0Ci0gICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0KGNvbnN0X2Nhc3Q8U1ZHVGV4dENvbnRlbnRF
bGVtZW50Kj4odGhpcyksIDAsIFNFTF9ERUZBVUxUX0FGRklOSVRZKTsKKyAgICBWaXNpYmxlUG9z
aXRpb24gc3RhcnQoUG9zaXRpb24oY29uc3RfY2FzdDxTVkdUZXh0Q29udGVudEVsZW1lbnQqPih0
aGlzKSwgMCwgUG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvciksIFNFTF9ERUZBVUxU
X0FGRklOSVRZKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY2hhcm51bTsgKytpKQog
ICAgICAgICBzdGFydCA9IHN0YXJ0Lm5leHQoKTsKIApJbmRleDogU291cmNlL1dlYktpdC9tYWMv
Q2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwkocmV2
aXNpb24gNzc2OTMpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMyArMSwxOSBAQAorMjAxMS0wMi0wNCAgTGV2aSBXZWludHJhdWIgIDxsZXZpd0Bj
aHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgU3RvcCBpbnN0YW50aWF0aW5nIGxlZ2FjeSBlZGl0aW5nIFBvc2l0aW9ucyBpbiBWaXNp
YmxlUG9zaXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTUyOTE5CisKKyAgICAgICAgQ2hhbmdpbmcgdXNhZ2Ugb2YgbGVnYWN5IFZpc2libGVQb3Np
dGlvbiBjb25zdHJ1Y3Rvci4gU2luY2Ugd2Ugd2VyZSBkZWFsaW5nCisgICAgICAgIHdpdGggcG9z
aXRpb25zIGZyb20gRE9NIFJhbmdlcywgd2UncmUgZ3VhcmFudGVlZCBhIHBhcmVudC1hbmNob3Jl
ZCBwb3NpdGlvbi4KKworICAgICAgICAqIFdlYlZpZXcvV2ViRnJhbWUubW06CisgICAgICAgICgt
W1dlYkZyYW1lIF9jYXJldFJlY3RBdFBvc2l0aW9uOmFmZmluaXR5Ol0pOgorICAgICAgICAqIFdl
YlZpZXcvV2ViRnJhbWVJbnRlcm5hbC5oOgorICAgICAgICAqIFdlYlZpZXcvV2ViVGV4dENvbXBs
ZXRpb25Db250cm9sbGVyLm1tOgorICAgICAgICAoLVtXZWJUZXh0Q29tcGxldGlvbkNvbnRyb2xs
ZXIgZG9Db21wbGV0aW9uXSk6CisKIDIwMTEtMDItMDMgIFl1cnkgU2VtaWtoYXRza3kgIDx5dXJ5
c0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgUGF2ZWwgRmVsZG1hbi4KSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQkocmV2aXNpb24gNzczODApCisr
KyBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCSh3b3JraW5nIGNvcHkpCkBA
IC02NjAsOSArNjYwLDkgQEAgLSAoTlNTdHJpbmcgKilfc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNj
cgogICAgIHJldHVybiB1c3RyaW5nVG9TdHJpbmcocmVzdWx0LnRvU3RyaW5nKF9wcml2YXRlLT5j
b3JlRnJhbWUtPnNjcmlwdCgpLT5nbG9iYWxPYmplY3QobWFpblRocmVhZE5vcm1hbFdvcmxkKCkp
LT5nbG9iYWxFeGVjKCkpKTsKIH0KIAotLSAoTlNSZWN0KV9jYXJldFJlY3RBdE5vZGU6KERPTU5v
ZGUgKilub2RlIG9mZnNldDooaW50KW9mZnNldCBhZmZpbml0eTooTlNTZWxlY3Rpb25BZmZpbml0
eSlhZmZpbml0eQorLSAoTlNSZWN0KV9jYXJldFJlY3RBdFBvc2l0aW9uOihjb25zdCBQb3NpdGlv
biYpcG9zIGFmZmluaXR5OihOU1NlbGVjdGlvbkFmZmluaXR5KWFmZmluaXR5CiB7Ci0gICAgVmlz
aWJsZVBvc2l0aW9uIHZpc2libGVQb3NpdGlvbihjb3JlKG5vZGUpLCBvZmZzZXQsIHN0YXRpY19j
YXN0PEVBZmZpbml0eT4oYWZmaW5pdHkpKTsKKyAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBv
c2l0aW9uKHBvcywgc3RhdGljX2Nhc3Q8RUFmZmluaXR5PihhZmZpbml0eSkpOwogICAgIHJldHVy
biB2aXNpYmxlUG9zaXRpb24uYWJzb2x1dGVDYXJldEJvdW5kcygpOwogfQogCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lSW50ZXJuYWwuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lSW50ZXJuYWwuaAkocmV2aXNpb24gNzcz
ODApCisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lSW50ZXJuYWwuaAkod29y
a2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2ltcG9ydCAiV2ViUHJlZmVyZW5jZXNQcml2
YXRlLmgiCiAjaW1wb3J0IDxXZWJDb3JlL0VkaXRBY3Rpb24uaD4KICNpbXBvcnQgPFdlYkNvcmUv
RnJhbWVMb2FkZXJUeXBlcy5oPgorI2ltcG9ydCA8V2ViQ29yZS9Qb3NpdGlvbi5oPgogI2ltcG9y
dCA8V2ViQ29yZS9TZWxlY3Rpb25Db250cm9sbGVyLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1NldHRp
bmdzLmg+CiAKQEAgLTEzNCw3ICsxMzUsNyBAQCBAaW50ZXJmYWNlIFdlYkZyYW1lIChXZWJJbnRl
cm5hbCkKIAogLSAoTlNTdHJpbmcgKilfbWFya3VwU3RyaW5nRnJvbVJhbmdlOihET01SYW5nZSAq
KXJhbmdlIG5vZGVzOihOU0FycmF5ICoqKW5vZGVzOwogCi0tIChOU1JlY3QpX2NhcmV0UmVjdEF0
Tm9kZTooRE9NTm9kZSAqKW5vZGUgb2Zmc2V0OihpbnQpb2Zmc2V0IGFmZmluaXR5OihOU1NlbGVj
dGlvbkFmZmluaXR5KWFmZmluaXR5OworLSAoTlNSZWN0KV9jYXJldFJlY3RBdFBvc2l0aW9uOihj
b25zdCBXZWJDb3JlOjpQb3NpdGlvbiYpcG9zIGFmZmluaXR5OihOU1NlbGVjdGlvbkFmZmluaXR5
KWFmZmluaXR5OwogLSAoTlNSZWN0KV9maXJzdFJlY3RGb3JET01SYW5nZTooRE9NUmFuZ2UgKily
YW5nZTsKIC0gKHZvaWQpX3Njcm9sbERPTVJhbmdlVG9WaXNpYmxlOihET01SYW5nZSAqKXJhbmdl
OwogCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlRleHRDb21wbGV0aW9uQ29u
dHJvbGxlci5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlRl
eHRDb21wbGV0aW9uQ29udHJvbGxlci5tbQkocmV2aXNpb24gNzczODApCisrKyBTb3VyY2UvV2Vi
S2l0L21hYy9XZWJWaWV3L1dlYlRleHRDb21wbGV0aW9uQ29udHJvbGxlci5tbQkod29ya2luZyBj
b3B5KQpAQCAtMjgsNiArMjgsNyBAQAogCiAjaW1wb3J0ICJXZWJUZXh0Q29tcGxldGlvbkNvbnRy
b2xsZXIuaCIKIAorI2ltcG9ydCAiRE9NTm9kZUludGVybmFsLmgiCiAjaW1wb3J0ICJET01SYW5n
ZUludGVybmFsLmgiCiAjaW1wb3J0ICJXZWJGcmFtZUludGVybmFsLmgiCiAjaW1wb3J0ICJXZWJI
VE1MVmlld0ludGVybmFsLmgiCkBAIC0yMDMsNyArMjA0LDcgQEAgLSAodm9pZClkb0NvbXBsZXRp
b24KICAgICAgICAgICAgIEFTU0VSVCghX29yaWdpbmFsU3RyaW5nKTsgICAgICAgLy8gdGhpcyBz
aG91bGQgb25seSBiZSBzZXQgSUZGIHdlIGhhdmUgYSBwb3B1cCB3aW5kb3cKICAgICAgICAgICAg
IF9vcmlnaW5hbFN0cmluZyA9IFtbZnJhbWUgX3N0cmluZ0ZvclJhbmdlOnNlbGVjdGlvbl0gcmV0
YWluXTsKICAgICAgICAgICAgIFtzZWxmIF9idWlsZFVJXTsKLSAgICAgICAgICAgIE5TUmVjdCB3
b3JkUmVjdCA9IFtmcmFtZSBfY2FyZXRSZWN0QXROb2RlOlt3aG9sZVdvcmQgc3RhcnRDb250YWlu
ZXJdIG9mZnNldDpbd2hvbGVXb3JkIHN0YXJ0T2Zmc2V0XSBhZmZpbml0eTpOU1NlbGVjdGlvbkFm
ZmluaXR5RG93bnN0cmVhbV07CisgICAgICAgICAgICBOU1JlY3Qgd29yZFJlY3QgPSBbZnJhbWUg
X2NhcmV0UmVjdEF0UG9zaXRpb246UG9zaXRpb24oY29yZShbd2hvbGVXb3JkIHN0YXJ0Q29udGFp
bmVyXSksIFt3aG9sZVdvcmQgc3RhcnRPZmZzZXRdLCBQb3NpdGlvbjo6UG9zaXRpb25Jc09mZnNl
dEluQW5jaG9yKSBhZmZpbml0eTpOU1NlbGVjdGlvbkFmZmluaXR5RG93bnN0cmVhbV07CiAgICAg
ICAgICAgICAvLyArMSB0byBiZSB1bmRlciB0aGUgd29yZCwgbm90IHRoZSBjYXJldAogICAgICAg
ICAgICAgLy8gRklYTUUgLSAzNzY5NjUyIC0gV3JvbmcgcG9zaXRpb25pbmcgZm9yIHJpZ2h0IHRv
IGxlZnQgbGFuZ3VhZ2VzLiAgV2Ugc2hvdWxkIGxpbmUgdXAgdGhlIHVwcGVyCiAgICAgICAgICAg
ICAvLyByaWdodCBjb3JuZXIgd2l0aCB0aGUgY2FyZXQgaW5zdGVhZCBvZiB1cHBlciBsZWZ0LCBh
bmQgdGhlICsxIHdvdWxkIGJlIGEgLTEuCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>81552</attachid>
            <date>2011-02-07 16:58:21 -0800</date>
            <delta_ts>2011-02-08 14:54:47 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-52919-20110207165820.patch</filename>
            <type>text/plain</type>
            <size>44510</size>
            <attacher name="Levi Weintraub">leviw</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc3ODQ3KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsODggQEAKKzIwMTEtMDItMDQgIExldmkgV2Vp
bnRyYXViICA8bGV2aXdAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFN0b3AgaW5zdGFudGlhdGluZyBsZWdhY3kgZWRpdGluZyBQ
b3NpdGlvbnMgaW4gVmlzaWJsZVBvc2l0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD01MjkxOQorCisgICAgICAgIENoYW5naW5nIFZpc2libGVQb3Np
dGlvbiBjb21wbGV0ZWx5IGF3YXkgZnJvbSBsZWdhY3kgcG9zaXRpb25zLgorCisgICAgICAgIE5v
IG5ldyB0ZXN0cyBzaW5jZSB0aGlzIGlzIGZ1bmN0aW9uYWx5IGVxdWl2YWxlbnQuCisKKyAgICAg
ICAgKiBXZWJDb3JlLmV4cC5pbjogUmVtb3ZpbmcgdGhlIGxlZ2FjeSBWaXNpYmxlUG9zaXRpb24g
Y29uc3RydWN0b3IgYW5kCisgICAgICAgIGFkZGluZyB0aGUgUG9zaXRpb25Jc09mZnNldEluQW5j
aG9yIHN5bWJvbC4gSWYgd2UgbXVzdCBjcmVhdGUgVmlzaWJsZVBvc2l0aW9ucworICAgICAgICBv
dXRzaWRlIG9mIFdlYkNvcmUsIHRoZXkgc2hvdWxkIGJlIHBhcmVudCBhbmNob3JlZC4KKyAgICAg
ICAgKiBhY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
QVhPYmplY3RDYWNoZTo6dmlzaWJsZVBvc2l0aW9uRm9yVGV4dE1hcmtlckRhdGEpOgorICAgICAg
ICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpzdGFydE9mU3R5bGVSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjplbmRPZlN0eWxlUmFu
Z2UpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojp2aXNpYmxl
UG9zaXRpb25Gb3JJbmRleCk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9ndGsvQWNjZXNzaWJp
bGl0eU9iamVjdFdyYXBwZXJBdGsuY3BwOgorICAgICAgICAob2JqZWN0QW5kT2Zmc2V0VW5pZ25v
cmVkKToKKyAgICAgICAgKiBkb20vUG9zaXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UG9z
aXRpb246OnVwc3RyZWFtKTogRml4ZWQgdG8gY29ycmVjdGx5IHJlc3BlY3QgUG9zaXRpb25Jc0Fm
dGVyQW5jaG9yCisgICAgICAgIChXZWJDb3JlOjpQb3NpdGlvbjo6ZG93bnN0cmVhbSk6IGRpdHRv
CisgICAgICAgICogZG9tL1JhbmdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlOjplZGl0
aW5nU3RhcnRQb3NpdGlvbik6CisgICAgICAgICogZWRpdGluZy9FZGl0b3IuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6RWRpdG9yOjpjYW5EZWxldGVSYW5nZSk6CisgICAgICAgICogZWRpdGluZy9S
ZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXBsYWNlU2Vs
ZWN0aW9uQ29tbWFuZDo6ZG9BcHBseSk6CisgICAgICAgICogZWRpdGluZy9TZWxlY3Rpb25Db250
cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdGlvbkNvbnRyb2xsZXI6OnNlbGVj
dEZyYW1lRWxlbWVudEluUGFyZW50SWZGdWxseVNlbGVjdGVkKToKKyAgICAgICAgKFdlYkNvcmU6
OlNlbGVjdGlvbkNvbnRyb2xsZXI6OnNldFNlbGVjdGVkUmFuZ2UpOgorICAgICAgICAqIGVkaXRp
bmcvVGV4dEl0ZXJhdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRJdGVyYXRvcjo6c2hv
dWxkUmVwcmVzZW50Tm9kZU9mZnNldFplcm8pOgorICAgICAgICAqIGVkaXRpbmcvVHlwaW5nQ29t
bWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUeXBpbmdDb21tYW5kOjpkZWxldGVLZXlQcmVz
c2VkKToKKyAgICAgICAgKiBlZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpWaXNpYmxlUG9zaXRpb246OmxlZnRWaXN1YWxseURpc3RpbmN0Q2FuZGlkYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OlZpc2libGVQb3NpdGlvbjo6cmlnaHRWaXN1YWxseURpc3RpbmN0
Q2FuZGlkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlZpc2libGVQb3NpdGlvbjo6Y2Fub25pY2Fs
UG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6VmlzaWJsZVBvc2l0aW9uOjpjaGFyYWN0ZXJB
ZnRlcik6CisgICAgICAgIChXZWJDb3JlOjpWaXNpYmxlUG9zaXRpb246OmxvY2FsQ2FyZXRSZWN0
KToKKyAgICAgICAgKFdlYkNvcmU6Om1ha2VSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpzdGFy
dFZpc2libGVQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjplbmRWaXNpYmxlUG9zaXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6c2V0U3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6c2V0RW5k
KToKKyAgICAgICAgKFdlYkNvcmU6OmlzRmlyc3RWaXNpYmxlUG9zaXRpb25Jbk5vZGUpOgorICAg
ICAgICAoV2ViQ29yZTo6aXNMYXN0VmlzaWJsZVBvc2l0aW9uSW5Ob2RlKToKKyAgICAgICAgKiBl
ZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5oOgorICAgICAgICAoV2ViQ29yZTo6VmlzaWJsZVBvc2l0
aW9uOjpWaXNpYmxlUG9zaXRpb24pOgorICAgICAgICAqIGVkaXRpbmcvaHRtbGVkaXRpbmcuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Zmlyc3RJblNwZWNpYWxFbGVtZW50KToKKyAgICAgICAgKFdl
YkNvcmU6Omxhc3RJblNwZWNpYWxFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OnZpc2libGVQ
b3NpdGlvbkJlZm9yZU5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6dmlzaWJsZVBvc2l0aW9uQWZ0
ZXJOb2RlKToKKyAgICAgICAgKiBlZGl0aW5nL3Zpc2libGVfdW5pdHMuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6c3RhcnRQb3NpdGlvbkZvckxpbmUpOgorICAgICAgICAoV2ViQ29yZTo6ZW5kUG9z
aXRpb25Gb3JMaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OnByZXZpb3VzTGluZVBvc2l0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6Om5leHRMaW5lUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
c3RhcnRPZlBhcmFncmFwaCk6CisgICAgICAgIChXZWJDb3JlOjplbmRPZlBhcmFncmFwaCk6Cisg
ICAgICAgIChXZWJDb3JlOjplbmRPZkJsb2NrKToKKyAgICAgICAgKFdlYkNvcmU6OnN0YXJ0T2ZE
b2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjplbmRPZkRvY3VtZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OmxvZ2ljYWxTdGFydFBvc2l0aW9uRm9yTGluZSk6CisgICAgICAgIChXZWJDb3JlOjps
b2dpY2FsRW5kUG9zaXRpb25Gb3JMaW5lKToKKyAgICAgICAgKiBwYWdlL0RPTVNlbGVjdGlvbi5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpET01TZWxlY3Rpb246OmNvbGxhcHNlKToKKyAgICAgICAg
KFdlYkNvcmU6OkRPTVNlbGVjdGlvbjo6c2V0QmFzZUFuZEV4dGVudCk6CisgICAgICAgIChXZWJD
b3JlOjpET01TZWxlY3Rpb246OnNldFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTVNl
bGVjdGlvbjo6ZXh0ZW5kKToKKyAgICAgICAgKiBwYWdlL0V2ZW50SGFuZGxlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OmhhbmRsZU1vdXNlUHJlc3NFdmVudFNpbmdsZUNs
aWNrKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlck9iamVjdDo6Y3JlYXRlVmlzaWJsZVBvc2l0aW9uKToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGV4dENvbnRyb2w6OnZpc2libGVQb3NpdGlvbkZvckluZGV4KToKKyAgICAgICAgKiBzdmcvU1ZH
VGV4dENvbnRlbnRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRDb250ZW50
RWxlbWVudDo6c2VsZWN0U3ViU3RyaW5nKToKKwogMjAxMS0wMi0wNyAgTHVjYXMgRm9yc2NobGVy
ICA8bGZvcnNjaGxlckBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgR2VvZmZyZXkg
R2FyZW4uCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgkocmV2aXNpb24gNzc4NTApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgkod29ya2luZyBjb3B5KQpAQCAtNDAyLDcgKzQwMiw2
IEBAIF9fWk43V2ViQ29yZTE1U2Nyb2xsQWxpZ25tZW50MTlhbGlnblRvRWQKIF9fWk43V2ViQ29y
ZTE1U3RyaW5nVHJ1bmNhdG9yMTNyaWdodFRydW5jYXRlRVJLTjNXVEY2U3RyaW5nRWZSS05TXzRG
b250RWIKIF9fWk43V2ViQ29yZTE1U3RyaW5nVHJ1bmNhdG9yMTRjZW50ZXJUcnVuY2F0ZUVSS04z
V1RGNlN0cmluZ0VmUktOU180Rm9udEViCiBfX1pON1dlYkNvcmUxNVN0cmluZ1RydW5jYXRvcjV3
aWR0aEVSS04zV1RGNlN0cmluZ0VSS05TXzRGb250RWIKLV9fWk43V2ViQ29yZTE1VmlzaWJsZVBv
c2l0aW9uQzFFUE5TXzROb2RlRWlOU185RUFmZmluaXR5RQogX19aTjdXZWJDb3JlMTVWaXNpYmxl
UG9zaXRpb25DMUVSS05TXzhQb3NpdGlvbkVOU185RUFmZmluaXR5RQogX19aTjdXZWJDb3JlMTVk
ZWZhdWx0TGFuZ3VhZ2VFdgogX19aTjdXZWJDb3JlMTVyZXBvcnRFeGNlcHRpb25FUE4zSlNDOUV4
ZWNTdGF0ZUVOUzBfN0pTVmFsdWVFCkBAIC03ODUsNiArNzg0LDcgQEAgX19aTjdXZWJDb3JlOEdy
YWRpZW50MTJhZGRDb2xvclN0b3BFZlJLTgogX19aTjdXZWJDb3JlOEdyYWRpZW50QzFFUktOU18x
MEZsb2F0UG9pbnRFUzNfCiBfX1pON1dlYkNvcmU4SW50UG9pbnRDMUVSSzhfTlNQb2ludAogX19a
TjdXZWJDb3JlOFBvc2l0aW9uQzFFTjNXVEYxMFBhc3NSZWZQdHJJTlNfNE5vZGVFRUVpCitfX1pO
N1dlYkNvcmU4UG9zaXRpb25DMUVOM1dURjEwUGFzc1JlZlB0cklOU180Tm9kZUVFRWlOUzBfMTBB
bmNob3JUeXBlRQogX19aTjdXZWJDb3JlOFNldHRpbmdzMTRzZXRKYXZhRW5hYmxlZEViCiBfX1pO
N1dlYkNvcmU4U2V0dGluZ3MxNXNldFdlYkdMRW5hYmxlZEViCiBfX1pON1dlYkNvcmU4U2V0dGlu
Z3MxNnNldFVzZXNQYWdlQ2FjaGVFYgpJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BWE9iamVjdENhY2hlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwCShyZXZpc2lvbiA3Nzg1MCkKKysrIFNvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3
Myw3ICs1NzMsOCBAQCBWaXNpYmxlUG9zaXRpb24gQVhPYmplY3RDYWNoZTo6dmlzaWJsZVBvCiAg
ICAgaWYgKCFpc05vZGVJblVzZSh0ZXh0TWFya2VyRGF0YS5ub2RlKSkKICAgICAgICAgcmV0dXJu
IFZpc2libGVQb3NpdGlvbigpOwogICAgIAotICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9z
ID0gVmlzaWJsZVBvc2l0aW9uKHRleHRNYXJrZXJEYXRhLm5vZGUsIHRleHRNYXJrZXJEYXRhLm9m
ZnNldCwgdGV4dE1hcmtlckRhdGEuYWZmaW5pdHkpOworICAgIC8vIEZJWE1FOiBBY2Nlc3NhYmls
aXR5IHNob3VsZCBtYWtlIGl0IGNsZWFyIHRoZXNlIGFyZSBET00tY29tcGxpYW50IG9mZnNldHMg
b3Igc3RvcmUgUG9zaXRpb24gb2JqZWN0cy4KKyAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBv
cyA9IFZpc2libGVQb3NpdGlvbihQb3NpdGlvbih0ZXh0TWFya2VyRGF0YS5ub2RlLCB0ZXh0TWFy
a2VyRGF0YS5vZmZzZXQpLCB0ZXh0TWFya2VyRGF0YS5hZmZpbml0eSk7CiAgICAgUG9zaXRpb24g
ZGVlcFBvcyA9IHZpc2libGVQb3MuZGVlcEVxdWl2YWxlbnQoKTsKICAgICBpZiAoZGVlcFBvcy5p
c051bGwoKSkKICAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbigpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3Bw
CShyZXZpc2lvbiA3Nzg1MCkKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNz
aWJpbGl0eU9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzNiw3ICszMzYsNyBAQCBzdGF0
aWMgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0T2ZTdHlsZVJhbmdlCiAgICAgICAgIHN0YXJ0UmVuZGVy
ZXIgPSByOwogICAgIH0KIAotICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oc3RhcnRSZW5kZXJl
ci0+bm9kZSgpLCAwLCBWUF9ERUZBVUxUX0FGRklOSVRZKTsKKyAgICByZXR1cm4gZmlyc3RQb3Np
dGlvbkluT3JCZWZvcmVOb2RlKHN0YXJ0UmVuZGVyZXItPm5vZGUoKSk7CiB9CiAKIHN0YXRpYyBW
aXNpYmxlUG9zaXRpb24gZW5kT2ZTdHlsZVJhbmdlKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgdmlz
aWJsZVBvcykKQEAgLTM1OSw3ICszNTksNyBAQCBzdGF0aWMgVmlzaWJsZVBvc2l0aW9uIGVuZE9m
U3R5bGVSYW5nZShjCiAgICAgICAgIGVuZFJlbmRlcmVyID0gcjsKICAgICB9CiAKLSAgICByZXR1
cm4gbGFzdERlZXBFZGl0aW5nUG9zaXRpb25Gb3JOb2RlKGVuZFJlbmRlcmVyLT5ub2RlKCkpOwor
ICAgIHJldHVybiBsYXN0UG9zaXRpb25Jbk9yQWZ0ZXJOb2RlKGVuZFJlbmRlcmVyLT5ub2RlKCkp
OwogfQogCiBWaXNpYmxlUG9zaXRpb25SYW5nZSBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpzdHlsZVJh
bmdlRm9yUG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2aXNpYmxlUG9zKSBjb25zdApJ
bmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2Jq
ZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vz
c2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCShyZXZpc2lvbiA3Nzg1MCkKKysrIFNvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI0NTksMTQgKzI0NTksMTQgQEAgVmlzaWJsZVBvc2l0aW9uIEFjY2Vzc2liaWxp
dHlSZW5kZXJPYmplYwogICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKCk7CiAgICAgCiAg
ICAgaWYgKGluZGV4IDw9IDApCi0gICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24obm9kZSwg
MCwgRE9XTlNUUkVBTSk7CisgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oZmlyc3RQb3Np
dGlvbkluT3JCZWZvcmVOb2RlKG5vZGUpLCBET1dOU1RSRUFNKTsKICAgICAKICAgICBFeGNlcHRp
b25Db2RlIGVjID0gMDsKICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gUmFuZ2U6OmNyZWF0ZSht
X3JlbmRlcmVyLT5kb2N1bWVudCgpKTsKICAgICByYW5nZS0+c2VsZWN0Tm9kZUNvbnRlbnRzKG5v
ZGUsIGVjKTsKICAgICBDaGFyYWN0ZXJJdGVyYXRvciBpdChyYW5nZS5nZXQoKSk7CiAgICAgaXQu
YWR2YW5jZShpbmRleCAtIDEpOwotICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oaXQucmFuZ2Uo
KS0+ZW5kQ29udGFpbmVyKGVjKSwgaXQucmFuZ2UoKS0+ZW5kT2Zmc2V0KGVjKSwgVVBTVFJFQU0p
OworICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oUG9zaXRpb24oaXQucmFuZ2UoKS0+ZW5kQ29u
dGFpbmVyKGVjKSwgaXQucmFuZ2UoKS0+ZW5kT2Zmc2V0KGVjKSwgUG9zaXRpb246OlBvc2l0aW9u
SXNPZmZzZXRJbkFuY2hvciksIFVQU1RSRUFNKTsKIH0KICAgICAKIGludCBBY2Nlc3NpYmlsaXR5
UmVuZGVyT2JqZWN0OjppbmRleEZvclZpc2libGVQb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRp
b24mIHBvcykgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL0Fj
Y2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQXRrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9BY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckF0ay5jcHAJ
KHJldmlzaW9uIDc3ODUwKQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvQWNj
ZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJBdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTAwLDcg
KzI1MDAsNyBAQCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmplY3RBbmRPZmZzZXRVbmlnCiAKICAg
ICBOb2RlKiBub2RlID0gcmVhbE9iamVjdC0+bm9kZSgpOwogICAgIGlmIChub2RlKSB7Ci0gICAg
ICAgIFZpc2libGVQb3NpdGlvbiBzdGFydFBvc2l0aW9uID0gVmlzaWJsZVBvc2l0aW9uKG5vZGUs
IDAsIERPV05TVFJFQU0pOworICAgICAgICBWaXNpYmxlUG9zaXRpb24gc3RhcnRQb3NpdGlvbiA9
IFZpc2libGVQb3NpdGlvbihwb3NpdGlvbkJlZm9yZU5vZGUobm9kZSksIERPV05TVFJFQU0pOwog
ICAgICAgICBWaXNpYmxlUG9zaXRpb24gZW5kUG9zaXRpb24gPSByZWFsT2JqZWN0LT5zZWxlY3Rp
b24oKS52aXNpYmxlRW5kKCk7CiAKICAgICAgICAgaWYgKHN0YXJ0UG9zaXRpb24gPT0gZW5kUG9z
aXRpb24pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vUG9zaXRpb24uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Qb3NpdGlvbi5jcHAJKHJldmlzaW9uIDc3ODUwKQorKysg
U291cmNlL1dlYkNvcmUvZG9tL1Bvc2l0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEzLDcg
KzUxMyw4IEBAIFBvc2l0aW9uIFBvc2l0aW9uOjp1cHN0cmVhbShFZGl0aW5nQm91bmQKICAgICAK
ICAgICAvLyBpdGVyYXRlIGJhY2t3YXJkIGZyb20gdGhlcmUsIGxvb2tpbmcgZm9yIGEgcXVhbGlm
aWVkIHBvc2l0aW9uCiAgICAgTm9kZSogYm91bmRhcnkgPSBlbmNsb3NpbmdWaXN1YWxCb3VuZGFy
eShzdGFydE5vZGUpOwotICAgIFBvc2l0aW9uSXRlcmF0b3IgbGFzdFZpc2libGUgPSAqdGhpczsK
KyAgICAvLyBGSVhNRTogUG9zaXRpb25JdGVyYXRvciBzaG91bGQgcmVzcGVjdCBCZWZvcmUgYW5k
IEFmdGVyIHBvc2l0aW9ucy4KKyAgICBQb3NpdGlvbkl0ZXJhdG9yIGxhc3RWaXNpYmxlID0gbV9h
bmNob3JUeXBlID09IFBvc2l0aW9uSXNBZnRlckFuY2hvciA/IFBvc2l0aW9uKG1fYW5jaG9yTm9k
ZSwgY2FyZXRNYXhPZmZzZXQobV9hbmNob3JOb2RlLmdldCgpKSkgOiAqdGhpczsKICAgICBQb3Np
dGlvbkl0ZXJhdG9yIGN1cnJlbnRQb3MgPSBsYXN0VmlzaWJsZTsKICAgICBib29sIHN0YXJ0RWRp
dGFibGUgPSBzdGFydE5vZGUtPmlzQ29udGVudEVkaXRhYmxlKCk7CiAgICAgTm9kZSogbGFzdE5v
ZGUgPSBzdGFydE5vZGU7CkBAIC02MzQsNyArNjM1LDggQEAgUG9zaXRpb24gUG9zaXRpb246OmRv
d25zdHJlYW0oRWRpdGluZ0JvdQogCiAgICAgLy8gaXRlcmF0ZSBmb3J3YXJkIGZyb20gdGhlcmUs
IGxvb2tpbmcgZm9yIGEgcXVhbGlmaWVkIHBvc2l0aW9uCiAgICAgTm9kZSogYm91bmRhcnkgPSBl
bmNsb3NpbmdWaXN1YWxCb3VuZGFyeShzdGFydE5vZGUpOwotICAgIFBvc2l0aW9uSXRlcmF0b3Ig
bGFzdFZpc2libGUgPSAqdGhpczsKKyAgICAvLyBGSVhNRTogUG9zaXRpb25JdGVyYXRvciBzaG91
bGQgcmVzcGVjdCBCZWZvcmUgYW5kIEFmdGVyIHBvc2l0aW9ucy4KKyAgICBQb3NpdGlvbkl0ZXJh
dG9yIGxhc3RWaXNpYmxlID0gbV9hbmNob3JUeXBlID09IFBvc2l0aW9uSXNBZnRlckFuY2hvciA/
IFBvc2l0aW9uKG1fYW5jaG9yTm9kZSwgY2FyZXRNYXhPZmZzZXQobV9hbmNob3JOb2RlLmdldCgp
KSkgOiAqdGhpczsKICAgICBQb3NpdGlvbkl0ZXJhdG9yIGN1cnJlbnRQb3MgPSBsYXN0VmlzaWJs
ZTsKICAgICBib29sIHN0YXJ0RWRpdGFibGUgPSBzdGFydE5vZGUtPmlzQ29udGVudEVkaXRhYmxl
KCk7CiAgICAgTm9kZSogbGFzdE5vZGUgPSBzdGFydE5vZGU7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9kb20vUmFuZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5j
cHAJKHJldmlzaW9uIDc3ODUwKQorKysgU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTU3MCw3ICsxNTcwLDcgQEAgUG9zaXRpb24gUmFuZ2U6OmVkaXRpbmdT
dGFydFBvc2l0aW9uKCkgYwogICAgIC8vIEl0IGlzIGltcG9ydGFudCB0byBza2lwIGNlcnRhaW4g
aXJyZWxldmFudCBjb250ZW50IGF0IHRoZSBzdGFydCBvZiB0aGUgc2VsZWN0aW9uLCBzbyB3ZSBk
byBub3Qgd2luZCB1cCAKICAgICAvLyB3aXRoIGEgc3B1cmlvdXMgIm1peGVkIiBzdHlsZS4KICAg
ICAKLSAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvc2l0aW9uKG1fc3RhcnQuY29udGFpbmVy
KCksIG1fc3RhcnQub2Zmc2V0KCksIFZQX0RFRkFVTFRfQUZGSU5JVFkpOworICAgIFZpc2libGVQ
b3NpdGlvbiB2aXNpYmxlUG9zaXRpb24gPSBQb3NpdGlvbihtX3N0YXJ0LmNvbnRhaW5lcigpLCBt
X3N0YXJ0Lm9mZnNldCgpLCBQb3NpdGlvbjo6UG9zaXRpb25Jc09mZnNldEluQW5jaG9yKTsKICAg
ICBpZiAodmlzaWJsZVBvc2l0aW9uLmlzTnVsbCgpKQogICAgICAgICByZXR1cm4gUG9zaXRpb24o
KTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAkocmV2aXNpb24gNzc4NTApCisr
KyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5
Myw3ICsyOTMsNyBAQCBib29sIEVkaXRvcjo6Y2FuRGVsZXRlUmFuZ2UoUmFuZ2UqIHJhbmdlCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKICAgICBpZiAocmFuZ2UtPmNvbGxhcHNlZChlYykp
IHsKLSAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0KHN0YXJ0Q29udGFpbmVyLCByYW5nZS0+
c3RhcnRPZmZzZXQoZWMpLCBET1dOU1RSRUFNKTsKKyAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHN0
YXJ0KFBvc2l0aW9uKHN0YXJ0Q29udGFpbmVyLCByYW5nZS0+c3RhcnRPZmZzZXQoZWMpLCBQb3Np
dGlvbjo6UG9zaXRpb25Jc09mZnNldEluQW5jaG9yKSwgRE9XTlNUUkVBTSk7CiAgICAgICAgIFZp
c2libGVQb3NpdGlvbiBwcmV2aW91cyA9IHN0YXJ0LnByZXZpb3VzKCk7CiAgICAgICAgIC8vIEZJ
WE1FOiBXZSBzb21ldGltZXMgYWxsb3cgZGVsZXRpb25zIGF0IHRoZSBzdGFydCBvZiBlZGl0YWJs
ZSByb290cywgbGlrZSB3aGVuIHRoZSBjYXJldCBpcyBpbiBhbiBlbXB0eSBsaXN0IGl0ZW0uCiAg
ICAgICAgIGlmIChwcmV2aW91cy5pc051bGwoKSB8fCBwcmV2aW91cy5kZWVwRXF1aXZhbGVudCgp
Lm5vZGUoKS0+cm9vdEVkaXRhYmxlRWxlbWVudCgpICE9IHN0YXJ0Q29udGFpbmVyLT5yb290RWRp
dGFibGVFbGVtZW50KCkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VTZWxl
Y3Rpb25Db21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Jl
cGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcAkocmV2aXNpb24gNzc4NTApCisrKyBTb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtODg0LDcgKzg4NCw3IEBAIHZvaWQgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OmRvQXBwbHko
KQogICAgIE5vZGUqIGVuZEJSID0gaW5zZXJ0aW9uUG9zLmRvd25zdHJlYW0oKS5ub2RlKCktPmhh
c1RhZ05hbWUoYnJUYWcpID8gaW5zZXJ0aW9uUG9zLmRvd25zdHJlYW0oKS5ub2RlKCkgOiAwOwog
ICAgIFZpc2libGVQb3NpdGlvbiBvcmlnaW5hbFZpc1Bvc0JlZm9yZUVuZEJSOwogICAgIGlmIChl
bmRCUikKLSAgICAgICAgb3JpZ2luYWxWaXNQb3NCZWZvcmVFbmRCUiA9IFZpc2libGVQb3NpdGlv
bihlbmRCUiwgMCwgRE9XTlNUUkVBTSkucHJldmlvdXMoKTsKKyAgICAgICAgb3JpZ2luYWxWaXNQ
b3NCZWZvcmVFbmRCUiA9IFZpc2libGVQb3NpdGlvbihwb3NpdGlvbkJlZm9yZU5vZGUoZW5kQlIp
LCBET1dOU1RSRUFNKS5wcmV2aW91cygpOwogICAgIAogICAgIHN0YXJ0QmxvY2sgPSBlbmNsb3Np
bmdCbG9jayhpbnNlcnRpb25Qb3Mubm9kZSgpKTsKICAgICAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvU2VsZWN0aW9uQ29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvZWRpdGluZy9TZWxlY3Rpb25Db250cm9sbGVyLmNwcAkocmV2aXNpb24gNzc4NTApCisr
KyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMzE1LDggKzEzMTUsOCBAQCB2b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6OnNl
bGVjdEZyYW1lRWxlCiAKICAgICAvLyBDcmVhdGUgY29tcHV0ZSBwb3NpdGlvbnMgYmVmb3JlIGFu
ZCBhZnRlciB0aGUgZWxlbWVudC4KICAgICB1bnNpZ25lZCBvd25lckVsZW1lbnROb2RlSW5kZXgg
PSBvd25lckVsZW1lbnQtPm5vZGVJbmRleCgpOwotICAgIFZpc2libGVQb3NpdGlvbiBiZWZvcmVP
d25lckVsZW1lbnQoVmlzaWJsZVBvc2l0aW9uKG93bmVyRWxlbWVudFBhcmVudCwgb3duZXJFbGVt
ZW50Tm9kZUluZGV4LCBTRUxfREVGQVVMVF9BRkZJTklUWSkpOwotICAgIFZpc2libGVQb3NpdGlv
biBhZnRlck93bmVyRWxlbWVudChWaXNpYmxlUG9zaXRpb24ob3duZXJFbGVtZW50UGFyZW50LCBv
d25lckVsZW1lbnROb2RlSW5kZXggKyAxLCBWUF9VUFNUUkVBTV9JRl9QT1NTSUJMRSkpOworICAg
IFZpc2libGVQb3NpdGlvbiBiZWZvcmVPd25lckVsZW1lbnQoVmlzaWJsZVBvc2l0aW9uKFBvc2l0
aW9uKG93bmVyRWxlbWVudFBhcmVudCwgb3duZXJFbGVtZW50Tm9kZUluZGV4LCBQb3NpdGlvbjo6
UG9zaXRpb25Jc09mZnNldEluQW5jaG9yKSkpOworICAgIFZpc2libGVQb3NpdGlvbiBhZnRlck93
bmVyRWxlbWVudChWaXNpYmxlUG9zaXRpb24oUG9zaXRpb24ob3duZXJFbGVtZW50UGFyZW50LCBv
d25lckVsZW1lbnROb2RlSW5kZXggKyAxLCBQb3NpdGlvbjo6UG9zaXRpb25Jc09mZnNldEluQW5j
aG9yKSwgVlBfVVBTVFJFQU1fSUZfUE9TU0lCTEUpKTsKIAogICAgIC8vIEZvY3VzIG9uIHRoZSBw
YXJlbnQgZnJhbWUsIGFuZCB0aGVuIHNlbGVjdCBmcm9tIGJlZm9yZSB0aGlzIGVsZW1lbnQgdG8g
YWZ0ZXIuCiAgICAgVmlzaWJsZVNlbGVjdGlvbiBuZXdTZWxlY3Rpb24oYmVmb3JlT3duZXJFbGVt
ZW50LCBhZnRlck93bmVyRWxlbWVudCk7CkBAIC0xMzg3LDggKzEzODcsOCBAQCBib29sIFNlbGVj
dGlvbkNvbnRyb2xsZXI6OnNldFNlbGVjdGVkUmFuCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAKICAgICAvLyBGSVhNRTogQ2FuIHdlIHByb3ZpZGUgZXh0ZW50QWZmaW5pdHk/Ci0gICAgVmlz
aWJsZVBvc2l0aW9uIHZpc2libGVTdGFydChzdGFydENvbnRhaW5lciwgc3RhcnRPZmZzZXQsIGNv
bGxhcHNlZCA/IGFmZmluaXR5IDogRE9XTlNUUkVBTSk7Ci0gICAgVmlzaWJsZVBvc2l0aW9uIHZp
c2libGVFbmQoZW5kQ29udGFpbmVyLCBlbmRPZmZzZXQsIFNFTF9ERUZBVUxUX0FGRklOSVRZKTsK
KyAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVN0YXJ0KFBvc2l0aW9uKHN0YXJ0Q29udGFpbmVy
LCBzdGFydE9mZnNldCwgUG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvciksIGNvbGxh
cHNlZCA/IGFmZmluaXR5IDogRE9XTlNUUkVBTSk7CisgICAgVmlzaWJsZVBvc2l0aW9uIHZpc2li
bGVFbmQoUG9zaXRpb24oZW5kQ29udGFpbmVyLCBlbmRPZmZzZXQsIFBvc2l0aW9uOjpQb3NpdGlv
bklzT2Zmc2V0SW5BbmNob3IpLCBTRUxfREVGQVVMVF9BRkZJTklUWSk7CiAgICAgc2V0U2VsZWN0
aW9uKFZpc2libGVTZWxlY3Rpb24odmlzaWJsZVN0YXJ0LCB2aXNpYmxlRW5kKSwgY2xvc2VUeXBp
bmcpOwogICAgIHJldHVybiB0cnVlOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9U
ZXh0SXRlcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4
dEl0ZXJhdG9yLmNwcAkocmV2aXNpb24gNzc4NTApCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L1RleHRJdGVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg3OCw4ICs4NzgsOCBAQCBib29s
IFRleHRJdGVyYXRvcjo6c2hvdWxkUmVwcmVzZW50Tm9kZU9mCiAgICAgLy8gYW5kIGluIHRoYXQg
Y2FzZSB3ZSdsbCBnZXQgbnVsbC4gV2UgZG9uJ3Qgd2FudCB0byBwdXQgaW4gbmV3bGluZXMgYXQg
dGhlIHN0YXJ0IGluIHRoYXQgY2FzZS4KICAgICAvLyBUaGUgY3VyclBvcy5pc05vdE51bGwoKSBj
aGVjayBpcyBuZWVkZWQgYmVjYXVzZSBwb3NpdGlvbnMgaW4gbm9uLUhUTUwgY29udGVudAogICAg
IC8vIChsaWtlIFNWRykgZG8gbm90IGhhdmUgdmlzaWJsZSBwb3NpdGlvbnMsIGFuZCB3ZSBkb24n
dCB3YW50IHRvIGVtaXQgZm9yIHRoZW0gZWl0aGVyLgotICAgIFZpc2libGVQb3NpdGlvbiBzdGFy
dFBvcyA9IFZpc2libGVQb3NpdGlvbihtX3N0YXJ0Q29udGFpbmVyLCBtX3N0YXJ0T2Zmc2V0LCBE
T1dOU1RSRUFNKTsKLSAgICBWaXNpYmxlUG9zaXRpb24gY3VyclBvcyA9IFZpc2libGVQb3NpdGlv
bihtX25vZGUsIDAsIERPV05TVFJFQU0pOworICAgIFZpc2libGVQb3NpdGlvbiBzdGFydFBvcyA9
IFZpc2libGVQb3NpdGlvbihQb3NpdGlvbihtX3N0YXJ0Q29udGFpbmVyLCBtX3N0YXJ0T2Zmc2V0
LCBQb3NpdGlvbjo6UG9zaXRpb25Jc09mZnNldEluQW5jaG9yKSwgRE9XTlNUUkVBTSk7CisgICAg
VmlzaWJsZVBvc2l0aW9uIGN1cnJQb3MgPSBWaXNpYmxlUG9zaXRpb24ocG9zaXRpb25CZWZvcmVO
b2RlKG1fbm9kZSksIERPV05TVFJFQU0pOwogICAgIHJldHVybiBzdGFydFBvcy5pc05vdE51bGwo
KSAmJiBjdXJyUG9zLmlzTm90TnVsbCgpICYmICFpblNhbWVMaW5lKHN0YXJ0UG9zLCBjdXJyUG9z
KTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwCShy
ZXZpc2lvbiA3Nzg1MCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29tbWFuZC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5NSw3ICs0OTUsNyBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6
OmRlbGV0ZUtleVByZXNzZWQoVGV4CiAgICAgICAgICAgICBzZWxlY3Rpb24ubW9kaWZ5KFNlbGVj
dGlvbkNvbnRyb2xsZXI6OkFsdGVyYXRpb25FeHRlbmQsIERpcmVjdGlvbkJhY2t3YXJkLCBncmFu
dWxhcml0eSk7CiAgICAgICAgIC8vIElmIHRoZSBjYXJldCBpcyBqdXN0IGFmdGVyIGEgdGFibGUs
IHNlbGVjdCB0aGUgdGFibGUgYW5kIGRvbid0IGRlbGV0ZSBhbnl0aGluZy4KICAgICAgICAgfSBl
bHNlIGlmIChOb2RlKiB0YWJsZSA9IGlzRmlyc3RQb3NpdGlvbkFmdGVyVGFibGUodmlzaWJsZVN0
YXJ0KSkgewotICAgICAgICAgICAgc2V0RW5kaW5nU2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24o
cG9zaXRpb25BZnRlck5vZGUodGFibGUpLCBlbmRpbmdTZWxlY3Rpb24oKS5zdGFydCgpLCBET1dO
U1RSRUFNKSk7CisgICAgICAgICAgICBzZXRFbmRpbmdTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlv
bihwb3NpdGlvbkJlZm9yZU5vZGUodGFibGUpLCBlbmRpbmdTZWxlY3Rpb24oKS5zdGFydCgpLCBE
T1dOU1RSRUFNKSk7CiAgICAgICAgICAgICB0eXBpbmdBZGRlZFRvT3BlbkNvbW1hbmQoRGVsZXRl
S2V5KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpJbmRleDogU291cmNlL1dlYkNv
cmUvZWRpdGluZy9WaXNpYmxlUG9zaXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvVmlzaWJsZVBvc2l0aW9uLmNwcAkocmV2aXNpb24gNzc4NTApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQ4LDEyICs0OCw2IEBAIFZpc2libGVQb3NpdGlvbjo6VmlzaWJsZVBvc2l0aW9uKGNvbnN0IFAK
ICAgICBpbml0KHBvcywgYWZmaW5pdHkpOwogfQogCi1WaXNpYmxlUG9zaXRpb246OlZpc2libGVQ
b3NpdGlvbihOb2RlICpub2RlLCBpbnQgb2Zmc2V0LCBFQWZmaW5pdHkgYWZmaW5pdHkpCi17Ci0g
ICAgQVNTRVJUKG9mZnNldCA+PSAwKTsKLSAgICBpbml0KFBvc2l0aW9uKG5vZGUsIG9mZnNldCks
IGFmZmluaXR5KTsKLX0KLQogdm9pZCBWaXNpYmxlUG9zaXRpb246OmluaXQoY29uc3QgUG9zaXRp
b24mIHBvc2l0aW9uLCBFQWZmaW5pdHkgYWZmaW5pdHkpCiB7CiAgICAgbV9hZmZpbml0eSA9IGFm
ZmluaXR5OwpAQCAtMTA2LDcgKzEwMCw3IEBAIFZpc2libGVQb3NpdGlvbiBWaXNpYmxlUG9zaXRp
b246OnByZXZpb3UKIFBvc2l0aW9uIFZpc2libGVQb3NpdGlvbjo6bGVmdFZpc3VhbGx5RGlzdGlu
Y3RDYW5kaWRhdGUoKSBjb25zdAogewogICAgIFBvc2l0aW9uIHAgPSBtX2RlZXBQb3NpdGlvbjsK
LSAgICBpZiAoIXAubm9kZSgpKQorICAgIGlmIChwLmlzTnVsbCgpKQogICAgICAgICByZXR1cm4g
UG9zaXRpb24oKTsKIAogICAgIFBvc2l0aW9uIGRvd25zdHJlYW1TdGFydCA9IHAuZG93bnN0cmVh
bSgpOwpAQCAtMjQyLDcgKzIzNiw3IEBAIFZpc2libGVQb3NpdGlvbiBWaXNpYmxlUG9zaXRpb246
OmxlZnQoYm8KIFBvc2l0aW9uIFZpc2libGVQb3NpdGlvbjo6cmlnaHRWaXN1YWxseURpc3RpbmN0
Q2FuZGlkYXRlKCkgY29uc3QKIHsKICAgICBQb3NpdGlvbiBwID0gbV9kZWVwUG9zaXRpb247Ci0g
ICAgaWYgKCFwLm5vZGUoKSkKKyAgICBpZiAocC5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIFBv
c2l0aW9uKCk7CiAKICAgICBQb3NpdGlvbiBkb3duc3RyZWFtU3RhcnQgPSBwLmRvd25zdHJlYW0o
KTsKQEAgLTQ1MSwxMCArNDQ1LDExIEBAIFBvc2l0aW9uIFZpc2libGVQb3NpdGlvbjo6Y2Fub25p
Y2FsUG9zaXQKICAgICAvLyBUbyBmaXggdGhpcywgd2UgbmVlZCB0byBlaXRoZXIgYSkgYWRkIGNv
ZGUgdG8gYWxsIHBhaW50Q2FyZXRzIHRvIHBhc3MgdGhlIHJlc3BvbnNpYmlsaXR5IG9mZiB0bwog
ICAgIC8vIHRoZSBhcHByb3ByaWF0ZSByZW5kZXJlciBmb3IgVmlzaWJsZVBvc2l0aW9uJ3MgbGlr
ZSB0aGVzZSwgb3IgYikgY2Fub25pY2FsaXplIHRvIHRoZSByaWdodG1vc3QgY2FuZGlkYXRlCiAg
ICAgLy8gdW5sZXNzIHRoZSBhZmZpbml0eSBpcyB1cHN0cmVhbS4KLSAgICBOb2RlKiBub2RlID0g
cG9zaXRpb24ubm9kZSgpOwotICAgIGlmICghbm9kZSkKKyAgICBpZiAocG9zaXRpb24uaXNOdWxs
KCkpCiAgICAgICAgIHJldHVybiBQb3NpdGlvbigpOwogCisgICAgTm9kZSogbm9kZSA9IHBvc2l0
aW9uLmNvbnRhaW5lck5vZGUoKTsKKwogICAgIEFTU0VSVChub2RlLT5kb2N1bWVudCgpKTsKICAg
ICBub2RlLT5kb2N1bWVudCgpLT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMo
KTsKIApAQCAtNTEwLDExICs1MDUsMTEgQEAgVUNoYXIzMiBWaXNpYmxlUG9zaXRpb246OmNoYXJh
Y3RlckFmdGVyKAogICAgIC8vIFdlIGNhbm9uaWNhbGl6ZSB0byB0aGUgZmlyc3Qgb2YgdHdvIGVx
dWl2YWxlbnQgY2FuZGlkYXRlcywgYnV0IHRoZSBzZWNvbmQgb2YgdGhlIHR3byBjYW5kaWRhdGVz
CiAgICAgLy8gaXMgdGhlIG9uZSB0aGF0IHdpbGwgYmUgaW5zaWRlIHRoZSB0ZXh0IG5vZGUgY29u
dGFpbmluZyB0aGUgY2hhcmFjdGVyIGFmdGVyIHRoaXMgdmlzaWJsZSBwb3NpdGlvbi4KICAgICBQ
b3NpdGlvbiBwb3MgPSBtX2RlZXBQb3NpdGlvbi5kb3duc3RyZWFtKCk7Ci0gICAgTm9kZSogbm9k
ZSA9IHBvcy5ub2RlKCk7Ci0gICAgaWYgKCFub2RlIHx8ICFub2RlLT5pc1RleHROb2RlKCkpCisg
ICAgTm9kZSogbm9kZSA9IHBvcy5jb250YWluZXJOb2RlKCk7CisgICAgaWYgKCFub2RlIHx8ICFu
b2RlLT5pc1RleHROb2RlKCkgfHwgcG9zLmFuY2hvclR5cGUoKSA9PSBQb3NpdGlvbjo6UG9zaXRp
b25Jc0FmdGVyQW5jaG9yKQogICAgICAgICByZXR1cm4gMDsKLSAgICBUZXh0KiB0ZXh0Tm9kZSA9
IHN0YXRpY19jYXN0PFRleHQqPihwb3Mubm9kZSgpKTsKLSAgICB1bnNpZ25lZCBvZmZzZXQgPSBw
b3MuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKTsKKyAgICBUZXh0KiB0ZXh0Tm9kZSA9IHN0YXRp
Y19jYXN0PFRleHQqPihwb3MuY29udGFpbmVyTm9kZSgpKTsKKyAgICB1bnNpZ25lZCBvZmZzZXQg
PSBwb3MuYW5jaG9yVHlwZSgpID09IFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3Ig
PyBwb3Mub2Zmc2V0SW5Db250YWluZXJOb2RlKCkgOiAwOwogICAgIHVuc2lnbmVkIGxlbmd0aCA9
IHRleHROb2RlLT5sZW5ndGgoKTsKICAgICBpZiAob2Zmc2V0ID49IGxlbmd0aCkKICAgICAgICAg
cmV0dXJuIDA7CkBAIC01MjcsMTEgKzUyMiwxMSBAQCBVQ2hhcjMyIFZpc2libGVQb3NpdGlvbjo6
Y2hhcmFjdGVyQWZ0ZXIoCiAKIEludFJlY3QgVmlzaWJsZVBvc2l0aW9uOjpsb2NhbENhcmV0UmVj
dChSZW5kZXJPYmplY3QqJiByZW5kZXJlcikgY29uc3QKIHsKLSAgICBOb2RlKiBub2RlID0gbV9k
ZWVwUG9zaXRpb24ubm9kZSgpOwotICAgIGlmICghbm9kZSkgeworICAgIGlmIChtX2RlZXBQb3Np
dGlvbi5pc051bGwoKSkgewogICAgICAgICByZW5kZXJlciA9IDA7CiAgICAgICAgIHJldHVybiBJ
bnRSZWN0KCk7CiAgICAgfQorICAgIE5vZGUqIG5vZGUgPSBtX2RlZXBQb3NpdGlvbi5jb250YWlu
ZXJOb2RlKCk7CiAgICAgCiAgICAgcmVuZGVyZXIgPSBub2RlLT5yZW5kZXJlcigpOwogICAgIGlm
ICghcmVuZGVyZXIpCkBAIC01OTksMTkgKzU5NCwxOSBAQCBQYXNzUmVmUHRyPFJhbmdlPiBtYWtl
UmFuZ2UoY29uc3QgVmlzaWJsCiAgICAgCiAgICAgUG9zaXRpb24gcyA9IHN0YXJ0LmRlZXBFcXVp
dmFsZW50KCkucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCk7CiAgICAgUG9zaXRpb24gZSA9IGVu
ZC5kZWVwRXF1aXZhbGVudCgpLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpOwotICAgIHJldHVy
biBSYW5nZTo6Y3JlYXRlKHMubm9kZSgpLT5kb2N1bWVudCgpLCBzLm5vZGUoKSwgcy5kZXByZWNh
dGVkRWRpdGluZ09mZnNldCgpLCBlLm5vZGUoKSwgZS5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgp
KTsKKyAgICByZXR1cm4gUmFuZ2U6OmNyZWF0ZShzLmNvbnRhaW5lck5vZGUoKS0+ZG9jdW1lbnQo
KSwgcy5jb250YWluZXJOb2RlKCksIHMub2Zmc2V0SW5Db250YWluZXJOb2RlKCksIGUuY29udGFp
bmVyTm9kZSgpLCBlLm9mZnNldEluQ29udGFpbmVyTm9kZSgpKTsKIH0KIAogVmlzaWJsZVBvc2l0
aW9uIHN0YXJ0VmlzaWJsZVBvc2l0aW9uKGNvbnN0IFJhbmdlICpyLCBFQWZmaW5pdHkgYWZmaW5p
dHkpCiB7CiAgICAgaW50IGV4Y2VwdGlvbiA9IDA7Ci0gICAgcmV0dXJuIFZpc2libGVQb3NpdGlv
bihyLT5zdGFydENvbnRhaW5lcihleGNlcHRpb24pLCByLT5zdGFydE9mZnNldChleGNlcHRpb24p
LCBhZmZpbml0eSk7CisgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihQb3NpdGlvbihyLT5zdGFy
dENvbnRhaW5lcihleGNlcHRpb24pLCByLT5zdGFydE9mZnNldChleGNlcHRpb24pLCBQb3NpdGlv
bjo6UG9zaXRpb25Jc09mZnNldEluQW5jaG9yKSwgYWZmaW5pdHkpOwogfQogCiBWaXNpYmxlUG9z
aXRpb24gZW5kVmlzaWJsZVBvc2l0aW9uKGNvbnN0IFJhbmdlICpyLCBFQWZmaW5pdHkgYWZmaW5p
dHkpCiB7CiAgICAgaW50IGV4Y2VwdGlvbiA9IDA7Ci0gICAgcmV0dXJuIFZpc2libGVQb3NpdGlv
bihyLT5lbmRDb250YWluZXIoZXhjZXB0aW9uKSwgci0+ZW5kT2Zmc2V0KGV4Y2VwdGlvbiksIGFm
ZmluaXR5KTsKKyAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKFBvc2l0aW9uKHItPmVuZENvbnRh
aW5lcihleGNlcHRpb24pLCByLT5lbmRPZmZzZXQoZXhjZXB0aW9uKSwgUG9zaXRpb246OlBvc2l0
aW9uSXNPZmZzZXRJbkFuY2hvciksIGFmZmluaXR5KTsKIH0KIAogYm9vbCBzZXRTdGFydChSYW5n
ZSAqciwgY29uc3QgVmlzaWJsZVBvc2l0aW9uICZ2aXNpYmxlUG9zaXRpb24pCkBAIC02MjAsNyAr
NjE1LDcgQEAgYm9vbCBzZXRTdGFydChSYW5nZSAqciwgY29uc3QgVmlzaWJsZVBvcwogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgUG9zaXRpb24gcCA9IHZpc2libGVQb3NpdGlvbi5kZWVwRXF1
aXZhbGVudCgpLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpOwogICAgIGludCBjb2RlID0gMDsK
LSAgICByLT5zZXRTdGFydChwLm5vZGUoKSwgcC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpLCBj
b2RlKTsKKyAgICByLT5zZXRTdGFydChwLmNvbnRhaW5lck5vZGUoKSwgcC5vZmZzZXRJbkNvbnRh
aW5lck5vZGUoKSwgY29kZSk7CiAgICAgcmV0dXJuIGNvZGUgPT0gMDsKIH0KIApAQCAtNjMwLDcg
KzYyNSw3IEBAIGJvb2wgc2V0RW5kKFJhbmdlICpyLCBjb25zdCBWaXNpYmxlUG9zaXQKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIFBvc2l0aW9uIHAgPSB2aXNpYmxlUG9zaXRpb24uZGVlcEVx
dWl2YWxlbnQoKS5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKTsKICAgICBpbnQgY29kZSA9IDA7
Ci0gICAgci0+c2V0RW5kKHAubm9kZSgpLCBwLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCksIGNv
ZGUpOworICAgIHItPnNldEVuZChwLmNvbnRhaW5lck5vZGUoKSwgcC5vZmZzZXRJbkNvbnRhaW5l
ck5vZGUoKSwgY29kZSk7CiAgICAgcmV0dXJuIGNvZGUgPT0gMDsKIH0KIApAQCAtNjQ2LDEwICs2
NDEsMTIgQEAgYm9vbCBpc0ZpcnN0VmlzaWJsZVBvc2l0aW9uSW5Ob2RlKGNvbnN0IAogewogICAg
IGlmICh2aXNpYmxlUG9zaXRpb24uaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAKLSAgICBpZiAoIXZpc2libGVQb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgpLm5vZGUoKS0+aXNE
ZXNjZW5kYW50T2Yobm9kZSkpCisKKyAgICBQb3NpdGlvbiBwID0gdmlzaWJsZVBvc2l0aW9uLmRl
ZXBFcXVpdmFsZW50KCk7CisKKyAgICBpZiAoIXAuY29udGFpbmVyTm9kZSgpLT5pc0Rlc2NlbmRh
bnRPZihub2RlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAKKwogICAgIFZpc2li
bGVQb3NpdGlvbiBwcmV2aW91cyA9IHZpc2libGVQb3NpdGlvbi5wcmV2aW91cygpOwogICAgIHJl
dHVybiBwcmV2aW91cy5pc051bGwoKSB8fCAhcHJldmlvdXMuZGVlcEVxdWl2YWxlbnQoKS5ub2Rl
KCktPmlzRGVzY2VuZGFudE9mKG5vZGUpOwogfQpAQCAtNjU4LDEwICs2NTUsMTIgQEAgYm9vbCBp
c0xhc3RWaXNpYmxlUG9zaXRpb25Jbk5vZGUoY29uc3QgVgogewogICAgIGlmICh2aXNpYmxlUG9z
aXRpb24uaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBpZiAoIXZp
c2libGVQb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgpLm5vZGUoKS0+aXNEZXNjZW5kYW50T2Yobm9k
ZSkpCisKKyAgICBQb3NpdGlvbiBwID0gdmlzaWJsZVBvc2l0aW9uLmRlZXBFcXVpdmFsZW50KCk7
CisKKyAgICBpZiAoIXAuY29udGFpbmVyTm9kZSgpLT5pc0Rlc2NlbmRhbnRPZihub2RlKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIAorCiAgICAgVmlzaWJsZVBvc2l0
aW9uIG5leHQgPSB2aXNpYmxlUG9zaXRpb24ubmV4dCgpOwogICAgIHJldHVybiBuZXh0LmlzTnVs
bCgpIHx8ICFuZXh0LmRlZXBFcXVpdmFsZW50KCkubm9kZSgpLT5pc0Rlc2NlbmRhbnRPZihub2Rl
KTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVBvc2l0aW9uLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlUG9zaXRpb24uaAkocmV2
aXNpb24gNzc4NTApCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5o
CSh3b3JraW5nIGNvcHkpCkBAIC01NCw3ICs1NCw2IEBAIHB1YmxpYzoKICAgICAvLyBOT1RFOiBV
UFNUUkVBTSBhZmZpbml0eSB3aWxsIGJlIHVzZWQgb25seSBpZiBwb3MgaXMgYXQgZW5kIG9mIGEg
d3JhcHBlZCBsaW5lLAogICAgIC8vIG90aGVyd2lzZSBpdCB3aWxsIGJlIGNvbnZlcnRlZCB0byBE
T1dOU1RSRUFNCiAgICAgVmlzaWJsZVBvc2l0aW9uKCkgOiBtX2FmZmluaXR5KFZQX0RFRkFVTFRf
QUZGSU5JVFkpIHsgfQotICAgIFZpc2libGVQb3NpdGlvbihOb2RlKiwgaW50IG9mZnNldCwgRUFm
ZmluaXR5KTsKICAgICBWaXNpYmxlUG9zaXRpb24oY29uc3QgUG9zaXRpb24mLCBFQWZmaW5pdHkg
PSBWUF9ERUZBVUxUX0FGRklOSVRZKTsKIAogICAgIHZvaWQgY2xlYXIoKSB7IG1fZGVlcFBvc2l0
aW9uLmNsZWFyKCk7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaHRtbGVkaXRpbmcu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaHRtbGVkaXRpbmcuY3Bw
CShyZXZpc2lvbiA3Nzg1MCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaHRtbGVkaXRpbmcu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MjYsNyArNDI2LDcgQEAgc3RhdGljIE5vZGUqIGZpcnN0
SW5TcGVjaWFsRWxlbWVudChjb25zdAogICAgIGZvciAoTm9kZSogbiA9IHBvcy5ub2RlKCk7IG4g
JiYgbi0+cm9vdEVkaXRhYmxlRWxlbWVudCgpID09IHJvb3RFZGl0YWJsZUVsZW1lbnQ7IG4gPSBu
LT5wYXJlbnROb2RlKCkpCiAgICAgICAgIGlmIChpc1NwZWNpYWxFbGVtZW50KG4pKSB7CiAgICAg
ICAgICAgICBWaXNpYmxlUG9zaXRpb24gdlBvcyA9IFZpc2libGVQb3NpdGlvbihwb3MsIERPV05T
VFJFQU0pOwotICAgICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIGZpcnN0SW5FbGVtZW50ID0gVmlz
aWJsZVBvc2l0aW9uKG4sIDAsIERPV05TVFJFQU0pOworICAgICAgICAgICAgVmlzaWJsZVBvc2l0
aW9uIGZpcnN0SW5FbGVtZW50ID0gVmlzaWJsZVBvc2l0aW9uKGZpcnN0UG9zaXRpb25Jbk9yQmVm
b3JlTm9kZShuKSwgRE9XTlNUUkVBTSk7CiAgICAgICAgICAgICBpZiAoaXNUYWJsZUVsZW1lbnQo
bikgJiYgdlBvcyA9PSBmaXJzdEluRWxlbWVudC5uZXh0KCkpCiAgICAgICAgICAgICAgICAgcmV0
dXJuIG47CiAgICAgICAgICAgICBpZiAodlBvcyA9PSBmaXJzdEluRWxlbWVudCkKQEAgLTQ0Miw3
ICs0NDIsNyBAQCBzdGF0aWMgTm9kZSogbGFzdEluU3BlY2lhbEVsZW1lbnQoY29uc3QgCiAgICAg
Zm9yIChOb2RlKiBuID0gcG9zLm5vZGUoKTsgbiAmJiBuLT5yb290RWRpdGFibGVFbGVtZW50KCkg
PT0gcm9vdEVkaXRhYmxlRWxlbWVudDsgbiA9IG4tPnBhcmVudE5vZGUoKSkKICAgICAgICAgaWYg
KGlzU3BlY2lhbEVsZW1lbnQobikpIHsKICAgICAgICAgICAgIFZpc2libGVQb3NpdGlvbiB2UG9z
ID0gVmlzaWJsZVBvc2l0aW9uKHBvcywgRE9XTlNUUkVBTSk7Ci0gICAgICAgICAgICBWaXNpYmxl
UG9zaXRpb24gbGFzdEluRWxlbWVudCA9IFZpc2libGVQb3NpdGlvbihuLCBuLT5jaGlsZE5vZGVD
b3VudCgpLCBET1dOU1RSRUFNKTsKKyAgICAgICAgICAgIFZpc2libGVQb3NpdGlvbiBsYXN0SW5F
bGVtZW50ID0gVmlzaWJsZVBvc2l0aW9uKFBvc2l0aW9uKG4sIG4tPmNoaWxkTm9kZUNvdW50KCks
IFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3IpLCBET1dOU1RSRUFNKTsKICAgICAg
ICAgICAgIGlmIChpc1RhYmxlRWxlbWVudChuKSAmJiB2UG9zID09IGxhc3RJbkVsZW1lbnQucHJl
dmlvdXMoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gbjsKICAgICAgICAgICAgIGlmICh2UG9z
ID09IGxhc3RJbkVsZW1lbnQpCkBAIC01MTksNyArNTE5LDcgQEAgVmlzaWJsZVBvc2l0aW9uIHZp
c2libGVQb3NpdGlvbkJlZm9yZU5vZAogewogICAgIEFTU0VSVChub2RlKTsKICAgICBpZiAobm9k
ZS0+Y2hpbGROb2RlQ291bnQoKSkKLSAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihub2Rl
LCAwLCBET1dOU1RSRUFNKTsKKyAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihmaXJzdFBv
c2l0aW9uSW5PckJlZm9yZU5vZGUobm9kZSksIERPV05TVFJFQU0pOwogICAgIEFTU0VSVChub2Rl
LT5wYXJlbnROb2RlKCkpOwogICAgIHJldHVybiBwb3NpdGlvbkluUGFyZW50QmVmb3JlTm9kZShu
b2RlKTsKIH0KQEAgLTUyOSw3ICs1MjksNyBAQCBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvc2l0
aW9uQWZ0ZXJOb2RlCiB7CiAgICAgQVNTRVJUKG5vZGUpOwogICAgIGlmIChub2RlLT5jaGlsZE5v
ZGVDb3VudCgpKQotICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKG5vZGUsIG5vZGUtPmNo
aWxkTm9kZUNvdW50KCksIERPV05TVFJFQU0pOworICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0
aW9uKGxhc3RQb3NpdGlvbkluT3JBZnRlck5vZGUobm9kZSksIERPV05TVFJFQU0pOwogICAgIEFT
U0VSVChub2RlLT5wYXJlbnROb2RlKCkpOwogICAgIHJldHVybiBwb3NpdGlvbkluUGFyZW50QWZ0
ZXJOb2RlKG5vZGUpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy92aXNpYmxlX3Vu
aXRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL3Zpc2libGVfdW5p
dHMuY3BwCShyZXZpc2lvbiA3Nzg1MCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvdmlzaWJs
ZV91bml0cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4Myw3ICszODMsNyBAQCBzdGF0aWMgVmlz
aWJsZVBvc2l0aW9uIHN0YXJ0UG9zaXRpb25Gb3JMCiAgICAgICAgIHN0YXJ0T2Zmc2V0ID0gc3Rh
cnRUZXh0Qm94LT5zdGFydCgpOwogICAgIH0KICAgCi0gICAgVmlzaWJsZVBvc2l0aW9uIHZpc1Bv
cyA9IFZpc2libGVQb3NpdGlvbihzdGFydE5vZGUsIHN0YXJ0T2Zmc2V0LCBET1dOU1RSRUFNKTsK
KyAgICBWaXNpYmxlUG9zaXRpb24gdmlzUG9zID0gVmlzaWJsZVBvc2l0aW9uKFBvc2l0aW9uKHN0
YXJ0Tm9kZSwgc3RhcnRPZmZzZXQsIFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3Ip
LCBET1dOU1RSRUFNKTsKICAgICByZXR1cm4gcG9zaXRpb25Bdm9pZGluZ0ZpcnN0UG9zaXRpb25J
blRhYmxlKHZpc1Bvcyk7CiB9CiAKQEAgLTQyOSwxNyArNDI5LDE5IEBAIHN0YXRpYyBWaXNpYmxl
UG9zaXRpb24gZW5kUG9zaXRpb25Gb3JMaW4KICAgICAgICAgZW5kQm94ID0gZW5kQm94LT5wcmV2
TGVhZkNoaWxkKCk7CiAgICAgfQogICAgIAotICAgIGludCBlbmRPZmZzZXQgPSAxOworICAgIFBv
c2l0aW9uIHBvczsKICAgICBpZiAoZW5kTm9kZS0+aGFzVGFnTmFtZShiclRhZykpIHsKLSAgICAg
ICAgZW5kT2Zmc2V0ID0gMDsKKyAgICAgICAgcG9zID0gcG9zaXRpb25CZWZvcmVOb2RlKGVuZE5v
ZGUpOwogICAgIH0gZWxzZSBpZiAoZW5kQm94LT5pc0lubGluZVRleHRCb3goKSkgewogICAgICAg
ICBJbmxpbmVUZXh0Qm94ICplbmRUZXh0Qm94ID0gc3RhdGljX2Nhc3Q8SW5saW5lVGV4dEJveCAq
PihlbmRCb3gpOwotICAgICAgICBlbmRPZmZzZXQgPSBlbmRUZXh0Qm94LT5zdGFydCgpOworICAg
ICAgICBpbnQgZW5kT2Zmc2V0ID0gZW5kVGV4dEJveC0+c3RhcnQoKTsKICAgICAgICAgaWYgKCFl
bmRUZXh0Qm94LT5pc0xpbmVCcmVhaygpKQogICAgICAgICAgICAgZW5kT2Zmc2V0ICs9IGVuZFRl
eHRCb3gtPmxlbigpOwotICAgIH0KKyAgICAgICAgcG9zID0gUG9zaXRpb24oZW5kTm9kZSwgZW5k
T2Zmc2V0LCBQb3NpdGlvbjo6UG9zaXRpb25Jc09mZnNldEluQW5jaG9yKTsKKyAgICB9IGVsc2UK
KyAgICAgICAgcG9zID0gcG9zaXRpb25BZnRlck5vZGUoZW5kTm9kZSk7CiAgICAgCi0gICAgcmV0
dXJuIFZpc2libGVQb3NpdGlvbihlbmROb2RlLCBlbmRPZmZzZXQsIFZQX1VQU1RSRUFNX0lGX1BP
U1NJQkxFKTsKKyAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKHBvcywgVlBfVVBTVFJFQU1fSUZf
UE9TU0lCTEUpOwogfQogCiBWaXNpYmxlUG9zaXRpb24gZW5kT2ZMaW5lKGNvbnN0IFZpc2libGVQ
b3NpdGlvbiYgYykKQEAgLTU3NSw3ICs1NzcsNyBAQCBWaXNpYmxlUG9zaXRpb24gcHJldmlvdXNM
aW5lUG9zaXRpb24oY29uCiAgICAgLy8gTW92ZSB0byB0aGUgc3RhcnQgb2YgdGhlIGNvbnRlbnQg
aW4gdGhpcyBibG9jaywgd2hpY2ggZWZmZWN0aXZlbHkgbW92ZXMgdXMKICAgICAvLyB0byB0aGUg
c3RhcnQgb2YgdGhlIGxpbmUgd2UncmUgb24uCiAgICAgRWxlbWVudCogcm9vdEVsZW1lbnQgPSBu
b2RlLT5pc0NvbnRlbnRFZGl0YWJsZSgpID8gbm9kZS0+cm9vdEVkaXRhYmxlRWxlbWVudCgpIDog
bm9kZS0+ZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCk7Ci0gICAgcmV0dXJuIFZpc2libGVQ
b3NpdGlvbihyb290RWxlbWVudCwgMCwgRE9XTlNUUkVBTSk7CisgICAgcmV0dXJuIFZpc2libGVQ
b3NpdGlvbihmaXJzdFBvc2l0aW9uSW5Ob2RlKHJvb3RFbGVtZW50KSwgRE9XTlNUUkVBTSk7CiB9
CiAKIHN0YXRpYyBOb2RlKiBuZXh0TGVhZldpdGhTYW1lRWRpdGFiaWxpdHkoTm9kZSogbm9kZSwg
aW50IG9mZnNldCkKQEAgLTY4MCw3ICs2ODIsNyBAQCBWaXNpYmxlUG9zaXRpb24gbmV4dExpbmVQ
b3NpdGlvbihjb25zdCBWCiAgICAgLy8gTW92ZSB0byB0aGUgZW5kIG9mIHRoZSBjb250ZW50IGlu
IHRoaXMgYmxvY2ssIHdoaWNoIGVmZmVjdGl2ZWx5IG1vdmVzIHVzCiAgICAgLy8gdG8gdGhlIGVu
ZCBvZiB0aGUgbGluZSB3ZSdyZSBvbi4KICAgICBFbGVtZW50KiByb290RWxlbWVudCA9IG5vZGUt
PmlzQ29udGVudEVkaXRhYmxlKCkgPyBub2RlLT5yb290RWRpdGFibGVFbGVtZW50KCkgOiBub2Rl
LT5kb2N1bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKTsKLSAgICByZXR1cm4gVmlzaWJsZVBvc2l0
aW9uKHJvb3RFbGVtZW50LCByb290RWxlbWVudCA/IHJvb3RFbGVtZW50LT5jaGlsZE5vZGVDb3Vu
dCgpIDogMCwgRE9XTlNUUkVBTSk7CisgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihsYXN0UG9z
aXRpb25Jbk5vZGUocm9vdEVsZW1lbnQpLCBET1dOU1RSRUFNKTsKIH0KIAogLy8gLS0tLS0tLS0t
CkBAIC03NTIsNiArNzU0LDcgQEAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0T2ZQYXJhZ3JhcGgoY29u
c3QgVgogCiAgICAgTm9kZSAqbm9kZSA9IHN0YXJ0Tm9kZTsKICAgICBpbnQgb2Zmc2V0ID0gcC5k
ZXByZWNhdGVkRWRpdGluZ09mZnNldCgpOworICAgIFBvc2l0aW9uOjpBbmNob3JUeXBlIHR5cGUg
PSBwLmFuY2hvclR5cGUoKTsKIAogICAgIE5vZGUgKm4gPSBzdGFydE5vZGU7CiAgICAgd2hpbGUg
KG4pIHsKQEAgLTc3Miw2ICs3NzUsNyBAQCBWaXNpYmxlUG9zaXRpb24gc3RhcnRPZlBhcmFncmFw
aChjb25zdCBWCiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBpZiAoci0+aXNUZXh0KCkg
JiYgci0+Y2FyZXRNYXhSZW5kZXJlZE9mZnNldCgpID4gMCkgeworICAgICAgICAgICAgdHlwZSA9
IFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3I7CiAgICAgICAgICAgICBpZiAoc3R5
bGUtPnByZXNlcnZlTmV3bGluZSgpKSB7CiAgICAgICAgICAgICAgICAgY29uc3QgVUNoYXIqIGNo
YXJzID0gdG9SZW5kZXJUZXh0KHIpLT5jaGFyYWN0ZXJzKCk7CiAgICAgICAgICAgICAgICAgaW50
IGkgPSB0b1JlbmRlclRleHQociktPnRleHRMZW5ndGgoKTsKQEAgLTc4MCwyMCArNzg0LDIzIEBA
IFZpc2libGVQb3NpdGlvbiBzdGFydE9mUGFyYWdyYXBoKGNvbnN0IFYKICAgICAgICAgICAgICAg
ICAgICAgaSA9IG1heCgwLCBvKTsKICAgICAgICAgICAgICAgICB3aGlsZSAoLS1pID49IDApCiAg
ICAgICAgICAgICAgICAgICAgIGlmIChjaGFyc1tpXSA9PSAnXG4nKQotICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihuLCBpICsgMSwgRE9XTlNUUkVBTSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKFBvc2l0aW9uKG4s
IGkgKyAxLCB0eXBlKSwgRE9XTlNUUkVBTSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBu
b2RlID0gbjsKICAgICAgICAgICAgIG9mZnNldCA9IDA7CiAgICAgICAgICAgICBuID0gbi0+dHJh
dmVyc2VQcmV2aW91c05vZGVQb3N0T3JkZXIoc3RhcnRCbG9jayk7CiAgICAgICAgIH0gZWxzZSBp
ZiAoZWRpdGluZ0lnbm9yZXNDb250ZW50KG4pIHx8IGlzVGFibGVFbGVtZW50KG4pKSB7CiAgICAg
ICAgICAgICBub2RlID0gbjsKLSAgICAgICAgICAgIG9mZnNldCA9IDA7CisgICAgICAgICAgICB0
eXBlID0gUG9zaXRpb246OlBvc2l0aW9uSXNCZWZvcmVBbmNob3I7CiAgICAgICAgICAgICBuID0g
bi0+cHJldmlvdXNTaWJsaW5nKCkgPyBuLT5wcmV2aW91c1NpYmxpbmcoKSA6IG4tPnRyYXZlcnNl
UHJldmlvdXNOb2RlUG9zdE9yZGVyKHN0YXJ0QmxvY2spOwogICAgICAgICB9IGVsc2UKICAgICAg
ICAgICAgIG4gPSBuLT50cmF2ZXJzZVByZXZpb3VzTm9kZVBvc3RPcmRlcihzdGFydEJsb2NrKTsK
ICAgICB9CiAKLSAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKG5vZGUsIG9mZnNldCwgRE9XTlNU
UkVBTSk7CisgICAgaWYgKHR5cGUgPT0gUG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hv
cikKKyAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihQb3NpdGlvbihub2RlLCBvZmZzZXQs
IHR5cGUpLCBET1dOU1RSRUFNKTsKKyAgICAKKyAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKFBv
c2l0aW9uKG5vZGUsIHR5cGUpLCBET1dOU1RSRUFNKTsKIH0KIAogVmlzaWJsZVBvc2l0aW9uIGVu
ZE9mUGFyYWdyYXBoKGNvbnN0IFZpc2libGVQb3NpdGlvbiAmYywgRWRpdGluZ0JvdW5kYXJ5Q3Jv
c3NpbmdSdWxlIGJvdW5kYXJ5Q3Jvc3NpbmdSdWxlKQpAQCAtODEyLDYgKzgxOSw3IEBAIFZpc2li
bGVQb3NpdGlvbiBlbmRPZlBhcmFncmFwaChjb25zdCBWaXMKICAgICAKICAgICBOb2RlICpub2Rl
ID0gc3RhcnROb2RlOwogICAgIGludCBvZmZzZXQgPSBwLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0
KCk7CisgICAgUG9zaXRpb246OkFuY2hvclR5cGUgdHlwZSA9IHAuYW5jaG9yVHlwZSgpOwogCiAg
ICAgTm9kZSAqbiA9IHN0YXJ0Tm9kZTsKICAgICB3aGlsZSAobikgewpAQCAtODM0LDI1ICs4NDIs
MjkgQEAgVmlzaWJsZVBvc2l0aW9uIGVuZE9mUGFyYWdyYXBoKGNvbnN0IFZpcwogICAgICAgICAv
LyBGSVhNRTogV2UgYXZvaWQgcmV0dXJuaW5nIGEgcG9zaXRpb24gd2hlcmUgdGhlIHJlbmRlcmVy
IGNhbid0IGFjY2VwdCB0aGUgY2FyZXQuCiAgICAgICAgIGlmIChyLT5pc1RleHQoKSAmJiByLT5j
YXJldE1heFJlbmRlcmVkT2Zmc2V0KCkgPiAwKSB7CiAgICAgICAgICAgICBpbnQgbGVuZ3RoID0g
dG9SZW5kZXJUZXh0KHIpLT50ZXh0TGVuZ3RoKCk7CisgICAgICAgICAgICB0eXBlID0gUG9zaXRp
b246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvcjsKICAgICAgICAgICAgIGlmIChzdHlsZS0+cHJl
c2VydmVOZXdsaW5lKCkpIHsKICAgICAgICAgICAgICAgICBjb25zdCBVQ2hhciogY2hhcnMgPSB0
b1JlbmRlclRleHQociktPmNoYXJhY3RlcnMoKTsKICAgICAgICAgICAgICAgICBpbnQgbyA9IG4g
PT0gc3RhcnROb2RlID8gb2Zmc2V0IDogMDsKICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0g
bzsgaSA8IGxlbmd0aDsgKytpKQogICAgICAgICAgICAgICAgICAgICBpZiAoY2hhcnNbaV0gPT0g
J1xuJykKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24obiwg
aSwgRE9XTlNUUkVBTSk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gVmlzaWJsZVBv
c2l0aW9uKFBvc2l0aW9uKG4sIGksIHR5cGUpLCBET1dOU1RSRUFNKTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIG5vZGUgPSBuOwogICAgICAgICAgICAgb2Zmc2V0ID0gci0+Y2FyZXRNYXhP
ZmZzZXQoKTsKICAgICAgICAgICAgIG4gPSBuLT50cmF2ZXJzZU5leHROb2RlKHN0YXlJbnNpZGVC
bG9jayk7CiAgICAgICAgIH0gZWxzZSBpZiAoZWRpdGluZ0lnbm9yZXNDb250ZW50KG4pIHx8IGlz
VGFibGVFbGVtZW50KG4pKSB7CiAgICAgICAgICAgICBub2RlID0gbjsKLSAgICAgICAgICAgIG9m
ZnNldCA9IGxhc3RPZmZzZXRGb3JFZGl0aW5nKG4pOworICAgICAgICAgICAgdHlwZSA9IFBvc2l0
aW9uOjpQb3NpdGlvbklzQWZ0ZXJBbmNob3I7CiAgICAgICAgICAgICBuID0gbi0+dHJhdmVyc2VO
ZXh0U2libGluZyhzdGF5SW5zaWRlQmxvY2spOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAg
IG4gPSBuLT50cmF2ZXJzZU5leHROb2RlKHN0YXlJbnNpZGVCbG9jayk7CiAgICAgfQogCi0gICAg
cmV0dXJuIFZpc2libGVQb3NpdGlvbihub2RlLCBvZmZzZXQsIERPV05TVFJFQU0pOworICAgIGlm
ICh0eXBlID09IFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3IpCisgICAgICAgIHJl
dHVybiBWaXNpYmxlUG9zaXRpb24oUG9zaXRpb24obm9kZSwgb2Zmc2V0LCB0eXBlKSwgRE9XTlNU
UkVBTSk7CisKKyAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKFBvc2l0aW9uKG5vZGUsIHR5cGUp
LCBET1dOU1RSRUFNKTsKIH0KIAogVmlzaWJsZVBvc2l0aW9uIHN0YXJ0T2ZOZXh0UGFyYWdyYXBo
KGNvbnN0IFZpc2libGVQb3NpdGlvbiYgdmlzaWJsZVBvc2l0aW9uKQpAQCAtOTI2LDcgKzkzOCw3
IEBAIFZpc2libGVQb3NpdGlvbiBlbmRPZkJsb2NrKGNvbnN0IFZpc2libGUKIAogICAgIE5vZGUg
KnN0YXJ0QmxvY2sgPSBzdGFydE5vZGUtPmVuY2xvc2luZ0Jsb2NrRmxvd0VsZW1lbnQoKTsKICAg
ICAKLSAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKHN0YXJ0QmxvY2ssIHN0YXJ0QmxvY2stPmNo
aWxkTm9kZUNvdW50KCksIFZQX0RFRkFVTFRfQUZGSU5JVFkpOyAgIAorICAgIHJldHVybiBWaXNp
YmxlUG9zaXRpb24obGFzdFBvc2l0aW9uSW5Ob2RlKHN0YXJ0QmxvY2spLCBWUF9ERUZBVUxUX0FG
RklOSVRZKTsgICAKIH0KIAogYm9vbCBpblNhbWVCbG9jayhjb25zdCBWaXNpYmxlUG9zaXRpb24g
JmEsIGNvbnN0IFZpc2libGVQb3NpdGlvbiAmYikKQEAgLTk1MSw3ICs5NjMsNyBAQCBWaXNpYmxl
UG9zaXRpb24gc3RhcnRPZkRvY3VtZW50KGNvbnN0IE5vCiAgICAgaWYgKCFub2RlKQogICAgICAg
ICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKCk7CiAgICAgCi0gICAgcmV0dXJuIFZpc2libGVQb3Np
dGlvbihub2RlLT5kb2N1bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKSwgMCwgRE9XTlNUUkVBTSk7
CisgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihmaXJzdFBvc2l0aW9uSW5Ob2RlKG5vZGUtPmRv
Y3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgpKSwgRE9XTlNUUkVBTSk7CiB9CiAKIFZpc2libGVQ
b3NpdGlvbiBzdGFydE9mRG9jdW1lbnQoY29uc3QgVmlzaWJsZVBvc2l0aW9uICZjKQpAQCAtOTY1
LDcgKzk3Nyw3IEBAIFZpc2libGVQb3NpdGlvbiBlbmRPZkRvY3VtZW50KGNvbnN0IE5vZGUKICAg
ICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbigpOwogICAgIAogICAgIEVsZW1lbnQqIGRvYyA9
IG5vZGUtPmRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgpOwotICAgIHJldHVybiBWaXNpYmxl
UG9zaXRpb24oZG9jLCBkb2MtPmNoaWxkTm9kZUNvdW50KCksIERPV05TVFJFQU0pOworICAgIHJl
dHVybiBWaXNpYmxlUG9zaXRpb24obGFzdFBvc2l0aW9uSW5Ob2RlKGRvYyksIERPV05TVFJFQU0p
OwogfQogCiBWaXNpYmxlUG9zaXRpb24gZW5kT2ZEb2N1bWVudChjb25zdCBWaXNpYmxlUG9zaXRp
b24gJmMpCkBAIC0xMTIxLDkgKzExMzMsOCBAQCBzdGF0aWMgVmlzaWJsZVBvc2l0aW9uIGxvZ2lj
YWxTdGFydFBvc2l0CiAgICAgaWYgKCFsb2dpY2FsU3RhcnROb2RlKQogICAgICAgICByZXR1cm4g
VmlzaWJsZVBvc2l0aW9uKCk7CiAKLSAgICBpbnQgc3RhcnRPZmZzZXQgPSBsb2dpY2FsU3RhcnRC
b3gtPmNhcmV0TWluT2Zmc2V0KCk7Ci0gIAotICAgIFZpc2libGVQb3NpdGlvbiB2aXNQb3MgPSBW
aXNpYmxlUG9zaXRpb24obG9naWNhbFN0YXJ0Tm9kZSwgc3RhcnRPZmZzZXQsIERPV05TVFJFQU0p
OworICAgIFZpc2libGVQb3NpdGlvbiB2aXNQb3MgPSBsb2dpY2FsU3RhcnROb2RlLT5pc1RleHRO
b2RlKCkgPyBWaXNpYmxlUG9zaXRpb24oUG9zaXRpb24obG9naWNhbFN0YXJ0Tm9kZSwgbG9naWNh
bFN0YXJ0Qm94LT5jYXJldE1pbk9mZnNldCgpLCBQb3NpdGlvbjo6UG9zaXRpb25Jc09mZnNldElu
QW5jaG9yKSwgRE9XTlNUUkVBTSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDogVmlzaWJsZVBvc2l0aW9uKHBvc2l0aW9uQmVmb3Jl
Tm9kZShsb2dpY2FsU3RhcnROb2RlKSwgRE9XTlNUUkVBTSk7CiAgICAgcmV0dXJuIHBvc2l0aW9u
QXZvaWRpbmdGaXJzdFBvc2l0aW9uSW5UYWJsZSh2aXNQb3MpOwogfQogCkBAIC0xMTU3LDE3ICsx
MTY4LDE5IEBAIHN0YXRpYyBWaXNpYmxlUG9zaXRpb24gbG9naWNhbEVuZFBvc2l0aW8KICAgICBp
ZiAoIWxvZ2ljYWxFbmROb2RlKQogICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKCk7CiAg
ICAgCi0gICAgaW50IGVuZE9mZnNldCA9IDE7CisgICAgUG9zaXRpb24gcG9zOwogICAgIGlmIChs
b2dpY2FsRW5kTm9kZS0+aGFzVGFnTmFtZShiclRhZykpCi0gICAgICAgIGVuZE9mZnNldCA9IDA7
CisgICAgICAgIHBvcyA9IHBvc2l0aW9uQmVmb3JlTm9kZShsb2dpY2FsRW5kTm9kZSk7CiAgICAg
ZWxzZSBpZiAobG9naWNhbEVuZEJveC0+aXNJbmxpbmVUZXh0Qm94KCkpIHsKICAgICAgICAgSW5s
aW5lVGV4dEJveCogZW5kVGV4dEJveCA9IHN0YXRpY19jYXN0PElubGluZVRleHRCb3gqPihsb2dp
Y2FsRW5kQm94KTsKLSAgICAgICAgZW5kT2Zmc2V0ID0gZW5kVGV4dEJveC0+c3RhcnQoKTsKKyAg
ICAgICAgaW50IGVuZE9mZnNldCA9IGVuZFRleHRCb3gtPnN0YXJ0KCk7CiAgICAgICAgIGlmICgh
ZW5kVGV4dEJveC0+aXNMaW5lQnJlYWsoKSkKICAgICAgICAgICAgIGVuZE9mZnNldCArPSBlbmRU
ZXh0Qm94LT5sZW4oKTsKLSAgICB9CisgICAgICAgIHBvcyA9IFBvc2l0aW9uKGxvZ2ljYWxFbmRO
b2RlLCBlbmRPZmZzZXQsIFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3IpOworICAg
IH0gZWxzZQorICAgICAgICBwb3MgPSBwb3NpdGlvbkFmdGVyTm9kZShsb2dpY2FsRW5kTm9kZSk7
CiAgICAgCi0gICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihsb2dpY2FsRW5kTm9kZSwgZW5kT2Zm
c2V0LCBWUF9VUFNUUkVBTV9JRl9QT1NTSUJMRSk7CisgICAgcmV0dXJuIFZpc2libGVQb3NpdGlv
bihwb3MsIFZQX1VQU1RSRUFNX0lGX1BPU1NJQkxFKTsKIH0KIAogYm9vbCBpblNhbWVMb2dpY2Fs
TGluZShjb25zdCBWaXNpYmxlUG9zaXRpb24mIGEsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYgYikK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NU2VsZWN0aW9uLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVNlbGVjdGlvbi5jcHAJKHJldmlzaW9uIDc3ODUwKQor
KysgU291cmNlL1dlYkNvcmUvcGFnZS9ET01TZWxlY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yMTEsNyArMjExLDggQEAgdm9pZCBET01TZWxlY3Rpb246OmNvbGxhcHNlKE5vZGUqIG5vZGUs
IAogICAgIGlmICghaXNWYWxpZEZvclBvc2l0aW9uKG5vZGUpKQogICAgICAgICByZXR1cm47CiAK
LSAgICBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+bW92ZVRvKFZpc2libGVQb3NpdGlvbihub2RlLCBv
ZmZzZXQsIERPV05TVFJFQU0pKTsKKyAgICAvLyBGSVhNRTogRWxpbWluYXRlIGxlZ2FjeSBlZGl0
aW5nIHBvc2l0aW9ucworICAgIG1fZnJhbWUtPnNlbGVjdGlvbigpLT5tb3ZlVG8oVmlzaWJsZVBv
c2l0aW9uKFBvc2l0aW9uKG5vZGUsIG9mZnNldCksIERPV05TVFJFQU0pKTsKIH0KIAogdm9pZCBE
T01TZWxlY3Rpb246OmNvbGxhcHNlVG9FbmQoRXhjZXB0aW9uQ29kZSYgZWMpCkBAIC0yNjQsOCAr
MjY1LDkgQEAgdm9pZCBET01TZWxlY3Rpb246OnNldEJhc2VBbmRFeHRlbnQoTm9kZQogICAgIGlm
ICghaXNWYWxpZEZvclBvc2l0aW9uKGJhc2VOb2RlKSB8fCAhaXNWYWxpZEZvclBvc2l0aW9uKGV4
dGVudE5vZGUpKQogICAgICAgICByZXR1cm47CiAKLSAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJs
ZUJhc2UgPSBWaXNpYmxlUG9zaXRpb24oYmFzZU5vZGUsIGJhc2VPZmZzZXQsIERPV05TVFJFQU0p
OwotICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlRXh0ZW50ID0gVmlzaWJsZVBvc2l0aW9uKGV4
dGVudE5vZGUsIGV4dGVudE9mZnNldCwgRE9XTlNUUkVBTSk7CisgICAgLy8gRklYTUU6IEVsaW1p
bmF0ZSBsZWdhY3kgZWRpdGluZyBwb3NpdGlvbnMKKyAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJs
ZUJhc2UgPSBWaXNpYmxlUG9zaXRpb24oUG9zaXRpb24oYmFzZU5vZGUsIGJhc2VPZmZzZXQpLCBE
T1dOU1RSRUFNKTsKKyAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZUV4dGVudCA9IFZpc2libGVQ
b3NpdGlvbihQb3NpdGlvbihleHRlbnROb2RlLCBleHRlbnRPZmZzZXQpLCBET1dOU1RSRUFNKTsK
IAogICAgIG1fZnJhbWUtPnNlbGVjdGlvbigpLT5tb3ZlVG8odmlzaWJsZUJhc2UsIHZpc2libGVF
eHRlbnQpOwogfQpAQCAtMjgyLDcgKzI4NCw4IEBAIHZvaWQgRE9NU2VsZWN0aW9uOjpzZXRQb3Np
dGlvbihOb2RlKiBub2QKICAgICBpZiAoIWlzVmFsaWRGb3JQb3NpdGlvbihub2RlKSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgbV9mcmFtZS0+c2VsZWN0aW9uKCktPm1vdmVUbyhWaXNpYmxlUG9z
aXRpb24obm9kZSwgb2Zmc2V0LCBET1dOU1RSRUFNKSk7CisgICAgLy8gRklYTUU6IEVsaW1pbmF0
ZSBsZWdhY3kgZWRpdGluZyBwb3NpdGlvbnMKKyAgICBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+bW92
ZVRvKFZpc2libGVQb3NpdGlvbihQb3NpdGlvbihub2RlLCBvZmZzZXQpLCBET1dOU1RSRUFNKSk7
CiB9CiAKIHZvaWQgRE9NU2VsZWN0aW9uOjptb2RpZnkoY29uc3QgU3RyaW5nJiBhbHRlclN0cmlu
ZywgY29uc3QgU3RyaW5nJiBkaXJlY3Rpb25TdHJpbmcsIGNvbnN0IFN0cmluZyYgZ3JhbnVsYXJp
dHlTdHJpbmcpCkBAIC0zNTMsNyArMzU2LDcgQEAgdm9pZCBET01TZWxlY3Rpb246OmV4dGVuZChO
b2RlKiBub2RlLCBpbgogICAgIGlmICghaXNWYWxpZEZvclBvc2l0aW9uKG5vZGUpKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2V0RXh0ZW50KFZpc2libGVQ
b3NpdGlvbihub2RlLCBvZmZzZXQsIERPV05TVFJFQU0pKTsKKyAgICBtX2ZyYW1lLT5zZWxlY3Rp
b24oKS0+c2V0RXh0ZW50KFZpc2libGVQb3NpdGlvbihQb3NpdGlvbihub2RlLCBvZmZzZXQsIFBv
c2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3IpLCBET1dOU1RSRUFNKSk7CiB9CiAKIFBh
c3NSZWZQdHI8UmFuZ2U+IERPTVNlbGVjdGlvbjo6Z2V0UmFuZ2VBdChpbnQgaW5kZXgsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAkocmV2
aXNpb24gNzc4NTApCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM3Myw3ICszNzMsNyBAQCBib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxl
TW91c2VQcmVzc0V2ZW50CiAKICAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvcyhpbm5lck5v
ZGUtPnJlbmRlcmVyKCktPnBvc2l0aW9uRm9yUG9pbnQoZXZlbnQubG9jYWxQb2ludCgpKSk7CiAg
ICAgaWYgKHZpc2libGVQb3MuaXNOdWxsKCkpCi0gICAgICAgIHZpc2libGVQb3MgPSBWaXNpYmxl
UG9zaXRpb24oaW5uZXJOb2RlLCAwLCBET1dOU1RSRUFNKTsKKyAgICAgICAgdmlzaWJsZVBvcyA9
IFZpc2libGVQb3NpdGlvbihmaXJzdFBvc2l0aW9uSW5PckJlZm9yZU5vZGUoaW5uZXJOb2RlKSwg
RE9XTlNUUkVBTSk7CiAgICAgUG9zaXRpb24gcG9zID0gdmlzaWJsZVBvcy5kZWVwRXF1aXZhbGVu
dCgpOwogICAgIAogICAgIFZpc2libGVTZWxlY3Rpb24gbmV3U2VsZWN0aW9uID0gbV9mcmFtZS0+
c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlck9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlck9iamVjdC5jcHAJKHJldmlzaW9uIDc3ODUwKQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlck9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2NTQsNyArMjY1NCw4
IEBAIFZpc2libGVQb3NpdGlvbiBSZW5kZXJPYmplY3Q6OmNyZWF0ZVZpc2kKICAgICAgICAgICAg
IGlmIChjYW5kaWRhdGUubm9kZSgpLT5pc0NvbnRlbnRFZGl0YWJsZSgpKQogICAgICAgICAgICAg
ICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oY2FuZGlkYXRlLCBhZmZpbml0eSk7CiAgICAgICAg
IH0KLSAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihub2RlLCBvZmZzZXQsIGFmZmluaXR5
KTsKKyAgICAgICAgLy8gRklYTUU6IEVsaW1pbmF0ZSBsZWdhY3kgZWRpdGluZyBwb3NpdGlvbnMK
KyAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihQb3NpdGlvbihub2RlLCBvZmZzZXQpLCBh
ZmZpbml0eSk7CiAgICAgfQogCiAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBjcm9zcyB0aGUgYm91
bmRhcnkgYmV0d2VlbiBlZGl0YWJsZSBhbmQgbm9uLWVkaXRhYmxlCkBAIC0yNjY5LDcgKzI2NzAs
NyBAQCBWaXNpYmxlUG9zaXRpb24gUmVuZGVyT2JqZWN0OjpjcmVhdGVWaXNpCiAgICAgICAgIFJl
bmRlck9iamVjdCogcmVuZGVyZXIgPSBjaGlsZDsKICAgICAgICAgd2hpbGUgKChyZW5kZXJlciA9
IHJlbmRlcmVyLT5uZXh0SW5QcmVPcmRlcihwYXJlbnQpKSkgewogICAgICAgICAgICAgaWYgKE5v
ZGUqIG5vZGUgPSByZW5kZXJlci0+bm9kZSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBWaXNp
YmxlUG9zaXRpb24obm9kZSwgMCwgRE9XTlNUUkVBTSk7CisgICAgICAgICAgICAgICAgcmV0dXJu
IFZpc2libGVQb3NpdGlvbihmaXJzdFBvc2l0aW9uSW5PckJlZm9yZU5vZGUobm9kZSksIERPV05T
VFJFQU0pOwogICAgICAgICB9CiAKICAgICAgICAgLy8gRmluZCBub24tYW5vbnltb3VzIGNvbnRl
bnQgYmVmb3JlLgpAQCAtMjY3OCwxMiArMjY3OSwxMiBAQCBWaXNpYmxlUG9zaXRpb24gUmVuZGVy
T2JqZWN0OjpjcmVhdGVWaXNpCiAgICAgICAgICAgICBpZiAocmVuZGVyZXIgPT0gcGFyZW50KQog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgaWYgKE5vZGUqIG5vZGUgPSByZW5k
ZXJlci0+bm9kZSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24obGFz
dERlZXBFZGl0aW5nUG9zaXRpb25Gb3JOb2RlKG5vZGUpLCBET1dOU1RSRUFNKTsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKGxhc3RQb3NpdGlvbkluT3JBZnRlck5vZGUo
bm9kZSksIERPV05TVFJFQU0pOwogICAgICAgICB9CiAKICAgICAgICAgLy8gVXNlIHRoZSBwYXJl
bnQgaXRzZWxmIHVubGVzcyBpdCB0b28gaXMgYW5vbnltb3VzLgogICAgICAgICBpZiAoTm9kZSog
bm9kZSA9IHBhcmVudC0+bm9kZSgpKQotICAgICAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlv
bihub2RlLCAwLCBET1dOU1RSRUFNKTsKKyAgICAgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRp
b24oZmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2RlKG5vZGUpLCBET1dOU1RSRUFNKTsKIAogICAg
ICAgICAvLyBSZXBlYXQgYXQgdGhlIG5leHQgbGV2ZWwgdXAuCiAgICAgICAgIGNoaWxkID0gcGFy
ZW50OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRy
b2wuY3BwCShyZXZpc2lvbiA3Nzg1MCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUZXh0Q29udHJvbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyMSw3ICszMjEsNyBAQCBQYXNz
UmVmUHRyPFJhbmdlPiBSZW5kZXJUZXh0Q29udHJvbDo6c2VsCiBWaXNpYmxlUG9zaXRpb24gUmVu
ZGVyVGV4dENvbnRyb2w6OnZpc2libGVQb3NpdGlvbkZvckluZGV4KGludCBpbmRleCkgY29uc3QK
IHsKICAgICBpZiAoaW5kZXggPD0gMCkKLSAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbiht
X2lubmVyVGV4dC5nZXQoKSwgMCwgRE9XTlNUUkVBTSk7CisgICAgICAgIHJldHVybiBWaXNpYmxl
UG9zaXRpb24oUG9zaXRpb24obV9pbm5lclRleHQuZ2V0KCksIDAsIFBvc2l0aW9uOjpQb3NpdGlv
bklzT2Zmc2V0SW5BbmNob3IpLCBET1dOU1RSRUFNKTsKICAgICBFeGNlcHRpb25Db2RlIGVjID0g
MDsKICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gUmFuZ2U6OmNyZWF0ZShkb2N1bWVudCgpKTsK
ICAgICByYW5nZS0+c2VsZWN0Tm9kZUNvbnRlbnRzKG1faW5uZXJUZXh0LmdldCgpLCBlYyk7CkBA
IC0zMzIsNyArMzMyLDcgQEAgVmlzaWJsZVBvc2l0aW9uIFJlbmRlclRleHRDb250cm9sOjp2aXNp
YgogICAgIEFTU0VSVCghZWMpOwogICAgIGludCBlbmRPZmZzZXQgPSBpdC5yYW5nZSgpLT5lbmRP
ZmZzZXQoZWMpOwogICAgIEFTU0VSVCghZWMpOwotICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24o
ZW5kQ29udGFpbmVyLCBlbmRPZmZzZXQsIFVQU1RSRUFNKTsKKyAgICByZXR1cm4gVmlzaWJsZVBv
c2l0aW9uKFBvc2l0aW9uKGVuZENvbnRhaW5lciwgZW5kT2Zmc2V0LCBQb3NpdGlvbjo6UG9zaXRp
b25Jc09mZnNldEluQW5jaG9yKSwgVVBTVFJFQU0pOwogfQogCiBpbnQgUmVuZGVyVGV4dENvbnRy
b2w6OmluZGV4Rm9yVmlzaWJsZVBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgcG9zKSBj
b25zdApJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RleHRDb250ZW50RWxlbWVudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RleHRDb250ZW50RWxlbWVudC5j
cHAJKHJldmlzaW9uIDc3ODUwKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RleHRDb250ZW50
RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0NSw3ICsxNDUsNyBAQCB2b2lkIFNWR1Rl
eHRDb250ZW50RWxlbWVudDo6c2VsZWN0U3ViU3RyCiAgICAgICAgIHJldHVybjsKIAogICAgIC8v
IEZpbmQgc2VsZWN0aW9uIHN0YXJ0Ci0gICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0KGNvbnN0X2Nh
c3Q8U1ZHVGV4dENvbnRlbnRFbGVtZW50Kj4odGhpcyksIDAsIFNFTF9ERUZBVUxUX0FGRklOSVRZ
KTsKKyAgICBWaXNpYmxlUG9zaXRpb24gc3RhcnQoZmlyc3RQb3NpdGlvbkluTm9kZShjb25zdF9j
YXN0PFNWR1RleHRDb250ZW50RWxlbWVudCo+KHRoaXMpKSk7CiAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGNoYXJudW07ICsraSkKICAgICAgICAgc3RhcnQgPSBzdGFydC5uZXh0KCk7CiAK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L21hYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDc3ODUwKQorKysgU291cmNlL1dlYktpdC9t
YWMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTEtMDItMDQg
IExldmkgV2VpbnRyYXViICA8bGV2aXdAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFN0b3AgaW5zdGFudGlhdGluZyBsZWdhY3kg
ZWRpdGluZyBQb3NpdGlvbnMgaW4gVmlzaWJsZVBvc2l0aW9uCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MjkxOQorCisgICAgICAgIENoYW5naW5nIHVz
YWdlIG9mIGxlZ2FjeSBWaXNpYmxlUG9zaXRpb24gY29uc3RydWN0b3IuIFNpbmNlIHdlIHdlcmUg
ZGVhbGluZworICAgICAgICB3aXRoIHBvc2l0aW9ucyBmcm9tIERPTSBSYW5nZXMsIHdlJ3JlIGd1
YXJhbnRlZWQgYSBwYXJlbnQtYW5jaG9yZWQgcG9zaXRpb24uCisKKyAgICAgICAgKiBXZWJWaWV3
L1dlYkZyYW1lLm1tOgorICAgICAgICAoLVtXZWJGcmFtZSBfY2FyZXRSZWN0QXRQb3NpdGlvbjph
ZmZpbml0eTpdKToKKyAgICAgICAgKiBXZWJWaWV3L1dlYkZyYW1lSW50ZXJuYWwuaDoKKyAgICAg
ICAgKiBXZWJWaWV3L1dlYlRleHRDb21wbGV0aW9uQ29udHJvbGxlci5tbToKKyAgICAgICAgKC1b
V2ViVGV4dENvbXBsZXRpb25Db250cm9sbGVyIGRvQ29tcGxldGlvbl0pOgorCiAyMDExLTAyLTAz
ICBZdXJ5IFNlbWlraGF0c2t5ICA8eXVyeXNAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IFBhdmVsIEZlbGRtYW4uCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dl
YkZyYW1lLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJh
bWUubW0JKHJldmlzaW9uIDc3ODUwKQorKysgU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJG
cmFtZS5tbQkod29ya2luZyBjb3B5KQpAQCAtNjYwLDkgKzY2MCw5IEBAIC0gKE5TU3RyaW5nICop
X3N0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3IKICAgICByZXR1cm4gdXN0cmluZ1RvU3RyaW5nKHJl
c3VsdC50b1N0cmluZyhfcHJpdmF0ZS0+Y29yZUZyYW1lLT5zY3JpcHQoKS0+Z2xvYmFsT2JqZWN0
KG1haW5UaHJlYWROb3JtYWxXb3JsZCgpKS0+Z2xvYmFsRXhlYygpKSk7CiB9CiAKLS0gKE5TUmVj
dClfY2FyZXRSZWN0QXROb2RlOihET01Ob2RlICopbm9kZSBvZmZzZXQ6KGludClvZmZzZXQgYWZm
aW5pdHk6KE5TU2VsZWN0aW9uQWZmaW5pdHkpYWZmaW5pdHkKKy0gKE5TUmVjdClfY2FyZXRSZWN0
QXRQb3NpdGlvbjooY29uc3QgUG9zaXRpb24mKXBvcyBhZmZpbml0eTooTlNTZWxlY3Rpb25BZmZp
bml0eSlhZmZpbml0eQogewotICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9zaXRpb24oY29y
ZShub2RlKSwgb2Zmc2V0LCBzdGF0aWNfY2FzdDxFQWZmaW5pdHk+KGFmZmluaXR5KSk7CisgICAg
VmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3NpdGlvbihwb3MsIHN0YXRpY19jYXN0PEVBZmZpbml0
eT4oYWZmaW5pdHkpKTsKICAgICByZXR1cm4gdmlzaWJsZVBvc2l0aW9uLmFic29sdXRlQ2FyZXRC
b3VuZHMoKTsKIH0KIApJbmRleDogU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZUlu
dGVybmFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFt
ZUludGVybmFsLmgJKHJldmlzaW9uIDc3ODUwKQorKysgU291cmNlL1dlYktpdC9tYWMvV2ViVmll
dy9XZWJGcmFtZUludGVybmFsLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNp
bXBvcnQgIldlYlByZWZlcmVuY2VzUHJpdmF0ZS5oIgogI2ltcG9ydCA8V2ViQ29yZS9FZGl0QWN0
aW9uLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lTG9hZGVyVHlwZXMuaD4KKyNpbXBvcnQgPFdl
YkNvcmUvUG9zaXRpb24uaD4KICNpbXBvcnQgPFdlYkNvcmUvU2VsZWN0aW9uQ29udHJvbGxlci5o
PgogI2ltcG9ydCA8V2ViQ29yZS9TZXR0aW5ncy5oPgogCkBAIC0xMzQsNyArMTM1LDcgQEAgQGlu
dGVyZmFjZSBXZWJGcmFtZSAoV2ViSW50ZXJuYWwpCiAKIC0gKE5TU3RyaW5nICopX21hcmt1cFN0
cmluZ0Zyb21SYW5nZTooRE9NUmFuZ2UgKilyYW5nZSBub2RlczooTlNBcnJheSAqKilub2RlczsK
IAotLSAoTlNSZWN0KV9jYXJldFJlY3RBdE5vZGU6KERPTU5vZGUgKilub2RlIG9mZnNldDooaW50
KW9mZnNldCBhZmZpbml0eTooTlNTZWxlY3Rpb25BZmZpbml0eSlhZmZpbml0eTsKKy0gKE5TUmVj
dClfY2FyZXRSZWN0QXRQb3NpdGlvbjooY29uc3QgV2ViQ29yZTo6UG9zaXRpb24mKXBvcyBhZmZp
bml0eTooTlNTZWxlY3Rpb25BZmZpbml0eSlhZmZpbml0eTsKIC0gKE5TUmVjdClfZmlyc3RSZWN0
Rm9yRE9NUmFuZ2U6KERPTVJhbmdlICopcmFuZ2U7CiAtICh2b2lkKV9zY3JvbGxET01SYW5nZVRv
VmlzaWJsZTooRE9NUmFuZ2UgKilyYW5nZTsKIApJbmRleDogU291cmNlL1dlYktpdC9tYWMvV2Vi
Vmlldy9XZWJUZXh0Q29tcGxldGlvbkNvbnRyb2xsZXIubW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9tYWMvV2ViVmlldy9XZWJUZXh0Q29tcGxldGlvbkNvbnRyb2xsZXIubW0JKHJldmlz
aW9uIDc3ODUwKQorKysgU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJUZXh0Q29tcGxldGlv
bkNvbnRyb2xsZXIubW0JKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2ltcG9y
dCAiV2ViVGV4dENvbXBsZXRpb25Db250cm9sbGVyLmgiCiAKKyNpbXBvcnQgIkRPTU5vZGVJbnRl
cm5hbC5oIgogI2ltcG9ydCAiRE9NUmFuZ2VJbnRlcm5hbC5oIgogI2ltcG9ydCAiV2ViRnJhbWVJ
bnRlcm5hbC5oIgogI2ltcG9ydCAiV2ViSFRNTFZpZXdJbnRlcm5hbC5oIgpAQCAtMjAzLDcgKzIw
NCw3IEBAIC0gKHZvaWQpZG9Db21wbGV0aW9uCiAgICAgICAgICAgICBBU1NFUlQoIV9vcmlnaW5h
bFN0cmluZyk7ICAgICAgIC8vIHRoaXMgc2hvdWxkIG9ubHkgYmUgc2V0IElGRiB3ZSBoYXZlIGEg
cG9wdXAgd2luZG93CiAgICAgICAgICAgICBfb3JpZ2luYWxTdHJpbmcgPSBbW2ZyYW1lIF9zdHJp
bmdGb3JSYW5nZTpzZWxlY3Rpb25dIHJldGFpbl07CiAgICAgICAgICAgICBbc2VsZiBfYnVpbGRV
SV07Ci0gICAgICAgICAgICBOU1JlY3Qgd29yZFJlY3QgPSBbZnJhbWUgX2NhcmV0UmVjdEF0Tm9k
ZTpbd2hvbGVXb3JkIHN0YXJ0Q29udGFpbmVyXSBvZmZzZXQ6W3dob2xlV29yZCBzdGFydE9mZnNl
dF0gYWZmaW5pdHk6TlNTZWxlY3Rpb25BZmZpbml0eURvd25zdHJlYW1dOworICAgICAgICAgICAg
TlNSZWN0IHdvcmRSZWN0ID0gW2ZyYW1lIF9jYXJldFJlY3RBdFBvc2l0aW9uOlBvc2l0aW9uKGNv
cmUoW3dob2xlV29yZCBzdGFydENvbnRhaW5lcl0pLCBbd2hvbGVXb3JkIHN0YXJ0T2Zmc2V0XSwg
UG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvcikgYWZmaW5pdHk6TlNTZWxlY3Rpb25B
ZmZpbml0eURvd25zdHJlYW1dOwogICAgICAgICAgICAgLy8gKzEgdG8gYmUgdW5kZXIgdGhlIHdv
cmQsIG5vdCB0aGUgY2FyZXQKICAgICAgICAgICAgIC8vIEZJWE1FIC0gMzc2OTY1MiAtIFdyb25n
IHBvc2l0aW9uaW5nIGZvciByaWdodCB0byBsZWZ0IGxhbmd1YWdlcy4gIFdlIHNob3VsZCBsaW5l
IHVwIHRoZSB1cHBlcgogICAgICAgICAgICAgLy8gcmlnaHQgY29ybmVyIHdpdGggdGhlIGNhcmV0
IGluc3RlYWQgb2YgdXBwZXIgbGVmdCwgYW5kIHRoZSArMSB3b3VsZCBiZSBhIC0xLgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>81698</attachid>
            <date>2011-02-08 14:54:51 -0800</date>
            <delta_ts>2011-02-09 01:28:44 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-52919-20110208145450.patch</filename>
            <type>text/plain</type>
            <size>45054</size>
            <attacher name="Levi Weintraub">leviw</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc3ODQ3KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsODggQEAKKzIwMTEtMDItMDQgIExldmkgV2Vp
bnRyYXViICA8bGV2aXdAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFN0b3AgaW5zdGFudGlhdGluZyBsZWdhY3kgZWRpdGluZyBQ
b3NpdGlvbnMgaW4gVmlzaWJsZVBvc2l0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD01MjkxOQorCisgICAgICAgIENoYW5naW5nIFZpc2libGVQb3Np
dGlvbiBjb21wbGV0ZWx5IGF3YXkgZnJvbSBsZWdhY3kgcG9zaXRpb25zLgorCisgICAgICAgIE5v
IG5ldyB0ZXN0cyBzaW5jZSB0aGlzIGlzIGZ1bmN0aW9uYWx5IGVxdWl2YWxlbnQuCisKKyAgICAg
ICAgKiBXZWJDb3JlLmV4cC5pbjogUmVtb3ZpbmcgdGhlIGxlZ2FjeSBWaXNpYmxlUG9zaXRpb24g
Y29uc3RydWN0b3IgYW5kCisgICAgICAgIGFkZGluZyB0aGUgUG9zaXRpb25Jc09mZnNldEluQW5j
aG9yIHN5bWJvbC4gSWYgd2UgbXVzdCBjcmVhdGUgVmlzaWJsZVBvc2l0aW9ucworICAgICAgICBv
dXRzaWRlIG9mIFdlYkNvcmUsIHRoZXkgc2hvdWxkIGJlIHBhcmVudCBhbmNob3JlZC4KKyAgICAg
ICAgKiBhY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
QVhPYmplY3RDYWNoZTo6dmlzaWJsZVBvc2l0aW9uRm9yVGV4dE1hcmtlckRhdGEpOgorICAgICAg
ICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpzdGFydE9mU3R5bGVSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjplbmRPZlN0eWxlUmFu
Z2UpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojp2aXNpYmxl
UG9zaXRpb25Gb3JJbmRleCk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9ndGsvQWNjZXNzaWJp
bGl0eU9iamVjdFdyYXBwZXJBdGsuY3BwOgorICAgICAgICAob2JqZWN0QW5kT2Zmc2V0VW5pZ25v
cmVkKToKKyAgICAgICAgKiBkb20vUG9zaXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UG9z
aXRpb246OnVwc3RyZWFtKTogRml4ZWQgdG8gY29ycmVjdGx5IHJlc3BlY3QgUG9zaXRpb25Jc0Fm
dGVyQW5jaG9yCisgICAgICAgIChXZWJDb3JlOjpQb3NpdGlvbjo6ZG93bnN0cmVhbSk6IGRpdHRv
CisgICAgICAgICogZG9tL1JhbmdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlOjplZGl0
aW5nU3RhcnRQb3NpdGlvbik6CisgICAgICAgICogZWRpdGluZy9FZGl0b3IuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6RWRpdG9yOjpjYW5EZWxldGVSYW5nZSk6CisgICAgICAgICogZWRpdGluZy9S
ZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXBsYWNlU2Vs
ZWN0aW9uQ29tbWFuZDo6ZG9BcHBseSk6CisgICAgICAgICogZWRpdGluZy9TZWxlY3Rpb25Db250
cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdGlvbkNvbnRyb2xsZXI6OnNlbGVj
dEZyYW1lRWxlbWVudEluUGFyZW50SWZGdWxseVNlbGVjdGVkKToKKyAgICAgICAgKFdlYkNvcmU6
OlNlbGVjdGlvbkNvbnRyb2xsZXI6OnNldFNlbGVjdGVkUmFuZ2UpOgorICAgICAgICAqIGVkaXRp
bmcvVGV4dEl0ZXJhdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRJdGVyYXRvcjo6c2hv
dWxkUmVwcmVzZW50Tm9kZU9mZnNldFplcm8pOgorICAgICAgICAqIGVkaXRpbmcvVHlwaW5nQ29t
bWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUeXBpbmdDb21tYW5kOjpkZWxldGVLZXlQcmVz
c2VkKToKKyAgICAgICAgKiBlZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpWaXNpYmxlUG9zaXRpb246OmxlZnRWaXN1YWxseURpc3RpbmN0Q2FuZGlkYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OlZpc2libGVQb3NpdGlvbjo6cmlnaHRWaXN1YWxseURpc3RpbmN0
Q2FuZGlkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlZpc2libGVQb3NpdGlvbjo6Y2Fub25pY2Fs
UG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6VmlzaWJsZVBvc2l0aW9uOjpjaGFyYWN0ZXJB
ZnRlcik6CisgICAgICAgIChXZWJDb3JlOjpWaXNpYmxlUG9zaXRpb246OmxvY2FsQ2FyZXRSZWN0
KToKKyAgICAgICAgKFdlYkNvcmU6Om1ha2VSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpzdGFy
dFZpc2libGVQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjplbmRWaXNpYmxlUG9zaXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6c2V0U3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6c2V0RW5k
KToKKyAgICAgICAgKFdlYkNvcmU6OmlzRmlyc3RWaXNpYmxlUG9zaXRpb25Jbk5vZGUpOgorICAg
ICAgICAoV2ViQ29yZTo6aXNMYXN0VmlzaWJsZVBvc2l0aW9uSW5Ob2RlKToKKyAgICAgICAgKiBl
ZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5oOgorICAgICAgICAoV2ViQ29yZTo6VmlzaWJsZVBvc2l0
aW9uOjpWaXNpYmxlUG9zaXRpb24pOgorICAgICAgICAqIGVkaXRpbmcvaHRtbGVkaXRpbmcuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Zmlyc3RJblNwZWNpYWxFbGVtZW50KToKKyAgICAgICAgKFdl
YkNvcmU6Omxhc3RJblNwZWNpYWxFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OnZpc2libGVQ
b3NpdGlvbkJlZm9yZU5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6dmlzaWJsZVBvc2l0aW9uQWZ0
ZXJOb2RlKToKKyAgICAgICAgKiBlZGl0aW5nL3Zpc2libGVfdW5pdHMuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6c3RhcnRQb3NpdGlvbkZvckxpbmUpOgorICAgICAgICAoV2ViQ29yZTo6ZW5kUG9z
aXRpb25Gb3JMaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OnByZXZpb3VzTGluZVBvc2l0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6Om5leHRMaW5lUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
c3RhcnRPZlBhcmFncmFwaCk6CisgICAgICAgIChXZWJDb3JlOjplbmRPZlBhcmFncmFwaCk6Cisg
ICAgICAgIChXZWJDb3JlOjplbmRPZkJsb2NrKToKKyAgICAgICAgKFdlYkNvcmU6OnN0YXJ0T2ZE
b2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjplbmRPZkRvY3VtZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OmxvZ2ljYWxTdGFydFBvc2l0aW9uRm9yTGluZSk6CisgICAgICAgIChXZWJDb3JlOjps
b2dpY2FsRW5kUG9zaXRpb25Gb3JMaW5lKToKKyAgICAgICAgKiBwYWdlL0RPTVNlbGVjdGlvbi5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpET01TZWxlY3Rpb246OmNvbGxhcHNlKToKKyAgICAgICAg
KFdlYkNvcmU6OkRPTVNlbGVjdGlvbjo6c2V0QmFzZUFuZEV4dGVudCk6CisgICAgICAgIChXZWJD
b3JlOjpET01TZWxlY3Rpb246OnNldFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTVNl
bGVjdGlvbjo6ZXh0ZW5kKToKKyAgICAgICAgKiBwYWdlL0V2ZW50SGFuZGxlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OmhhbmRsZU1vdXNlUHJlc3NFdmVudFNpbmdsZUNs
aWNrKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlck9iamVjdDo6Y3JlYXRlVmlzaWJsZVBvc2l0aW9uKToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGV4dENvbnRyb2w6OnZpc2libGVQb3NpdGlvbkZvckluZGV4KToKKyAgICAgICAgKiBzdmcvU1ZH
VGV4dENvbnRlbnRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRDb250ZW50
RWxlbWVudDo6c2VsZWN0U3ViU3RyaW5nKToKKwogMjAxMS0wMi0wNyAgTHVjYXMgRm9yc2NobGVy
ICA8bGZvcnNjaGxlckBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgR2VvZmZyZXkg
R2FyZW4uCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgkocmV2aXNpb24gNzc4NTApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgkod29ya2luZyBjb3B5KQpAQCAtNDAyLDcgKzQwMiw2
IEBAIF9fWk43V2ViQ29yZTE1U2Nyb2xsQWxpZ25tZW50MTlhbGlnblRvRWQKIF9fWk43V2ViQ29y
ZTE1U3RyaW5nVHJ1bmNhdG9yMTNyaWdodFRydW5jYXRlRVJLTjNXVEY2U3RyaW5nRWZSS05TXzRG
b250RWIKIF9fWk43V2ViQ29yZTE1U3RyaW5nVHJ1bmNhdG9yMTRjZW50ZXJUcnVuY2F0ZUVSS04z
V1RGNlN0cmluZ0VmUktOU180Rm9udEViCiBfX1pON1dlYkNvcmUxNVN0cmluZ1RydW5jYXRvcjV3
aWR0aEVSS04zV1RGNlN0cmluZ0VSS05TXzRGb250RWIKLV9fWk43V2ViQ29yZTE1VmlzaWJsZVBv
c2l0aW9uQzFFUE5TXzROb2RlRWlOU185RUFmZmluaXR5RQogX19aTjdXZWJDb3JlMTVWaXNpYmxl
UG9zaXRpb25DMUVSS05TXzhQb3NpdGlvbkVOU185RUFmZmluaXR5RQogX19aTjdXZWJDb3JlMTVk
ZWZhdWx0TGFuZ3VhZ2VFdgogX19aTjdXZWJDb3JlMTVyZXBvcnRFeGNlcHRpb25FUE4zSlNDOUV4
ZWNTdGF0ZUVOUzBfN0pTVmFsdWVFCkBAIC03ODUsNiArNzg0LDcgQEAgX19aTjdXZWJDb3JlOEdy
YWRpZW50MTJhZGRDb2xvclN0b3BFZlJLTgogX19aTjdXZWJDb3JlOEdyYWRpZW50QzFFUktOU18x
MEZsb2F0UG9pbnRFUzNfCiBfX1pON1dlYkNvcmU4SW50UG9pbnRDMUVSSzhfTlNQb2ludAogX19a
TjdXZWJDb3JlOFBvc2l0aW9uQzFFTjNXVEYxMFBhc3NSZWZQdHJJTlNfNE5vZGVFRUVpCitfX1pO
N1dlYkNvcmU4UG9zaXRpb25DMUVOM1dURjEwUGFzc1JlZlB0cklOU180Tm9kZUVFRWlOUzBfMTBB
bmNob3JUeXBlRQogX19aTjdXZWJDb3JlOFNldHRpbmdzMTRzZXRKYXZhRW5hYmxlZEViCiBfX1pO
N1dlYkNvcmU4U2V0dGluZ3MxNXNldFdlYkdMRW5hYmxlZEViCiBfX1pON1dlYkNvcmU4U2V0dGlu
Z3MxNnNldFVzZXNQYWdlQ2FjaGVFYgpJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BWE9iamVjdENhY2hlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwCShyZXZpc2lvbiA3Nzg1MCkKKysrIFNvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3
Myw3ICs1NzMsOCBAQCBWaXNpYmxlUG9zaXRpb24gQVhPYmplY3RDYWNoZTo6dmlzaWJsZVBvCiAg
ICAgaWYgKCFpc05vZGVJblVzZSh0ZXh0TWFya2VyRGF0YS5ub2RlKSkKICAgICAgICAgcmV0dXJu
IFZpc2libGVQb3NpdGlvbigpOwogICAgIAotICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9z
ID0gVmlzaWJsZVBvc2l0aW9uKHRleHRNYXJrZXJEYXRhLm5vZGUsIHRleHRNYXJrZXJEYXRhLm9m
ZnNldCwgdGV4dE1hcmtlckRhdGEuYWZmaW5pdHkpOworICAgIC8vIEZJWE1FOiBBY2Nlc3NhYmls
aXR5IHNob3VsZCBtYWtlIGl0IGNsZWFyIHRoZXNlIGFyZSBET00tY29tcGxpYW50IG9mZnNldHMg
b3Igc3RvcmUgUG9zaXRpb24gb2JqZWN0cy4KKyAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBv
cyA9IFZpc2libGVQb3NpdGlvbihQb3NpdGlvbih0ZXh0TWFya2VyRGF0YS5ub2RlLCB0ZXh0TWFy
a2VyRGF0YS5vZmZzZXQpLCB0ZXh0TWFya2VyRGF0YS5hZmZpbml0eSk7CiAgICAgUG9zaXRpb24g
ZGVlcFBvcyA9IHZpc2libGVQb3MuZGVlcEVxdWl2YWxlbnQoKTsKICAgICBpZiAoZGVlcFBvcy5p
c051bGwoKSkKICAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbigpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3Bw
CShyZXZpc2lvbiA3Nzg1MCkKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNz
aWJpbGl0eU9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzNiw3ICszMzYsNyBAQCBzdGF0
aWMgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0T2ZTdHlsZVJhbmdlCiAgICAgICAgIHN0YXJ0UmVuZGVy
ZXIgPSByOwogICAgIH0KIAotICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oc3RhcnRSZW5kZXJl
ci0+bm9kZSgpLCAwLCBWUF9ERUZBVUxUX0FGRklOSVRZKTsKKyAgICByZXR1cm4gZmlyc3RQb3Np
dGlvbkluT3JCZWZvcmVOb2RlKHN0YXJ0UmVuZGVyZXItPm5vZGUoKSk7CiB9CiAKIHN0YXRpYyBW
aXNpYmxlUG9zaXRpb24gZW5kT2ZTdHlsZVJhbmdlKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgdmlz
aWJsZVBvcykKQEAgLTM1OSw3ICszNTksNyBAQCBzdGF0aWMgVmlzaWJsZVBvc2l0aW9uIGVuZE9m
U3R5bGVSYW5nZShjCiAgICAgICAgIGVuZFJlbmRlcmVyID0gcjsKICAgICB9CiAKLSAgICByZXR1
cm4gbGFzdERlZXBFZGl0aW5nUG9zaXRpb25Gb3JOb2RlKGVuZFJlbmRlcmVyLT5ub2RlKCkpOwor
ICAgIHJldHVybiBsYXN0UG9zaXRpb25Jbk9yQWZ0ZXJOb2RlKGVuZFJlbmRlcmVyLT5ub2RlKCkp
OwogfQogCiBWaXNpYmxlUG9zaXRpb25SYW5nZSBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpzdHlsZVJh
bmdlRm9yUG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2aXNpYmxlUG9zKSBjb25zdApJ
bmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2Jq
ZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vz
c2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCShyZXZpc2lvbiA3Nzg1MCkKKysrIFNvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI0NTksMTQgKzI0NTksMTQgQEAgVmlzaWJsZVBvc2l0aW9uIEFjY2Vzc2liaWxp
dHlSZW5kZXJPYmplYwogICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKCk7CiAgICAgCiAg
ICAgaWYgKGluZGV4IDw9IDApCi0gICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24obm9kZSwg
MCwgRE9XTlNUUkVBTSk7CisgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oZmlyc3RQb3Np
dGlvbkluT3JCZWZvcmVOb2RlKG5vZGUpLCBET1dOU1RSRUFNKTsKICAgICAKICAgICBFeGNlcHRp
b25Db2RlIGVjID0gMDsKICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gUmFuZ2U6OmNyZWF0ZSht
X3JlbmRlcmVyLT5kb2N1bWVudCgpKTsKICAgICByYW5nZS0+c2VsZWN0Tm9kZUNvbnRlbnRzKG5v
ZGUsIGVjKTsKICAgICBDaGFyYWN0ZXJJdGVyYXRvciBpdChyYW5nZS5nZXQoKSk7CiAgICAgaXQu
YWR2YW5jZShpbmRleCAtIDEpOwotICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oaXQucmFuZ2Uo
KS0+ZW5kQ29udGFpbmVyKGVjKSwgaXQucmFuZ2UoKS0+ZW5kT2Zmc2V0KGVjKSwgVVBTVFJFQU0p
OworICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oUG9zaXRpb24oaXQucmFuZ2UoKS0+ZW5kQ29u
dGFpbmVyKGVjKSwgaXQucmFuZ2UoKS0+ZW5kT2Zmc2V0KGVjKSwgUG9zaXRpb246OlBvc2l0aW9u
SXNPZmZzZXRJbkFuY2hvciksIFVQU1RSRUFNKTsKIH0KICAgICAKIGludCBBY2Nlc3NpYmlsaXR5
UmVuZGVyT2JqZWN0OjppbmRleEZvclZpc2libGVQb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRp
b24mIHBvcykgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL0Fj
Y2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQXRrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9BY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckF0ay5jcHAJ
KHJldmlzaW9uIDc3ODUwKQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvQWNj
ZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJBdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTAwLDcg
KzI1MDAsNyBAQCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmplY3RBbmRPZmZzZXRVbmlnCiAKICAg
ICBOb2RlKiBub2RlID0gcmVhbE9iamVjdC0+bm9kZSgpOwogICAgIGlmIChub2RlKSB7Ci0gICAg
ICAgIFZpc2libGVQb3NpdGlvbiBzdGFydFBvc2l0aW9uID0gVmlzaWJsZVBvc2l0aW9uKG5vZGUs
IDAsIERPV05TVFJFQU0pOworICAgICAgICBWaXNpYmxlUG9zaXRpb24gc3RhcnRQb3NpdGlvbiA9
IFZpc2libGVQb3NpdGlvbihwb3NpdGlvbkJlZm9yZU5vZGUobm9kZSksIERPV05TVFJFQU0pOwog
ICAgICAgICBWaXNpYmxlUG9zaXRpb24gZW5kUG9zaXRpb24gPSByZWFsT2JqZWN0LT5zZWxlY3Rp
b24oKS52aXNpYmxlRW5kKCk7CiAKICAgICAgICAgaWYgKHN0YXJ0UG9zaXRpb24gPT0gZW5kUG9z
aXRpb24pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vUG9zaXRpb24uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Qb3NpdGlvbi5jcHAJKHJldmlzaW9uIDc3ODUwKQorKysg
U291cmNlL1dlYkNvcmUvZG9tL1Bvc2l0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEzLDcg
KzUxMyw4IEBAIFBvc2l0aW9uIFBvc2l0aW9uOjp1cHN0cmVhbShFZGl0aW5nQm91bmQKICAgICAK
ICAgICAvLyBpdGVyYXRlIGJhY2t3YXJkIGZyb20gdGhlcmUsIGxvb2tpbmcgZm9yIGEgcXVhbGlm
aWVkIHBvc2l0aW9uCiAgICAgTm9kZSogYm91bmRhcnkgPSBlbmNsb3NpbmdWaXN1YWxCb3VuZGFy
eShzdGFydE5vZGUpOwotICAgIFBvc2l0aW9uSXRlcmF0b3IgbGFzdFZpc2libGUgPSAqdGhpczsK
KyAgICAvLyBGSVhNRTogUG9zaXRpb25JdGVyYXRvciBzaG91bGQgcmVzcGVjdCBCZWZvcmUgYW5k
IEFmdGVyIHBvc2l0aW9ucy4KKyAgICBQb3NpdGlvbkl0ZXJhdG9yIGxhc3RWaXNpYmxlID0gbV9h
bmNob3JUeXBlID09IFBvc2l0aW9uSXNBZnRlckFuY2hvciA/IFBvc2l0aW9uKG1fYW5jaG9yTm9k
ZSwgY2FyZXRNYXhPZmZzZXQobV9hbmNob3JOb2RlLmdldCgpKSkgOiAqdGhpczsKICAgICBQb3Np
dGlvbkl0ZXJhdG9yIGN1cnJlbnRQb3MgPSBsYXN0VmlzaWJsZTsKICAgICBib29sIHN0YXJ0RWRp
dGFibGUgPSBzdGFydE5vZGUtPmlzQ29udGVudEVkaXRhYmxlKCk7CiAgICAgTm9kZSogbGFzdE5v
ZGUgPSBzdGFydE5vZGU7CkBAIC02MzQsNyArNjM1LDggQEAgUG9zaXRpb24gUG9zaXRpb246OmRv
d25zdHJlYW0oRWRpdGluZ0JvdQogCiAgICAgLy8gaXRlcmF0ZSBmb3J3YXJkIGZyb20gdGhlcmUs
IGxvb2tpbmcgZm9yIGEgcXVhbGlmaWVkIHBvc2l0aW9uCiAgICAgTm9kZSogYm91bmRhcnkgPSBl
bmNsb3NpbmdWaXN1YWxCb3VuZGFyeShzdGFydE5vZGUpOwotICAgIFBvc2l0aW9uSXRlcmF0b3Ig
bGFzdFZpc2libGUgPSAqdGhpczsKKyAgICAvLyBGSVhNRTogUG9zaXRpb25JdGVyYXRvciBzaG91
bGQgcmVzcGVjdCBCZWZvcmUgYW5kIEFmdGVyIHBvc2l0aW9ucy4KKyAgICBQb3NpdGlvbkl0ZXJh
dG9yIGxhc3RWaXNpYmxlID0gbV9hbmNob3JUeXBlID09IFBvc2l0aW9uSXNBZnRlckFuY2hvciA/
IFBvc2l0aW9uKG1fYW5jaG9yTm9kZSwgY2FyZXRNYXhPZmZzZXQobV9hbmNob3JOb2RlLmdldCgp
KSkgOiAqdGhpczsKICAgICBQb3NpdGlvbkl0ZXJhdG9yIGN1cnJlbnRQb3MgPSBsYXN0VmlzaWJs
ZTsKICAgICBib29sIHN0YXJ0RWRpdGFibGUgPSBzdGFydE5vZGUtPmlzQ29udGVudEVkaXRhYmxl
KCk7CiAgICAgTm9kZSogbGFzdE5vZGUgPSBzdGFydE5vZGU7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9kb20vUmFuZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5j
cHAJKHJldmlzaW9uIDc3ODUwKQorKysgU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTU3MCw3ICsxNTcwLDcgQEAgUG9zaXRpb24gUmFuZ2U6OmVkaXRpbmdT
dGFydFBvc2l0aW9uKCkgYwogICAgIC8vIEl0IGlzIGltcG9ydGFudCB0byBza2lwIGNlcnRhaW4g
aXJyZWxldmFudCBjb250ZW50IGF0IHRoZSBzdGFydCBvZiB0aGUgc2VsZWN0aW9uLCBzbyB3ZSBk
byBub3Qgd2luZCB1cCAKICAgICAvLyB3aXRoIGEgc3B1cmlvdXMgIm1peGVkIiBzdHlsZS4KICAg
ICAKLSAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvc2l0aW9uKG1fc3RhcnQuY29udGFpbmVy
KCksIG1fc3RhcnQub2Zmc2V0KCksIFZQX0RFRkFVTFRfQUZGSU5JVFkpOworICAgIFZpc2libGVQ
b3NpdGlvbiB2aXNpYmxlUG9zaXRpb24gPSBQb3NpdGlvbihtX3N0YXJ0LmNvbnRhaW5lcigpLCBt
X3N0YXJ0Lm9mZnNldCgpLCBQb3NpdGlvbjo6UG9zaXRpb25Jc09mZnNldEluQW5jaG9yKTsKICAg
ICBpZiAodmlzaWJsZVBvc2l0aW9uLmlzTnVsbCgpKQogICAgICAgICByZXR1cm4gUG9zaXRpb24o
KTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAkocmV2aXNpb24gNzc4NTApCisr
KyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5
Myw3ICsyOTMsNyBAQCBib29sIEVkaXRvcjo6Y2FuRGVsZXRlUmFuZ2UoUmFuZ2UqIHJhbmdlCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKICAgICBpZiAocmFuZ2UtPmNvbGxhcHNlZChlYykp
IHsKLSAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0KHN0YXJ0Q29udGFpbmVyLCByYW5nZS0+
c3RhcnRPZmZzZXQoZWMpLCBET1dOU1RSRUFNKTsKKyAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHN0
YXJ0KFBvc2l0aW9uKHN0YXJ0Q29udGFpbmVyLCByYW5nZS0+c3RhcnRPZmZzZXQoZWMpLCBQb3Np
dGlvbjo6UG9zaXRpb25Jc09mZnNldEluQW5jaG9yKSwgRE9XTlNUUkVBTSk7CiAgICAgICAgIFZp
c2libGVQb3NpdGlvbiBwcmV2aW91cyA9IHN0YXJ0LnByZXZpb3VzKCk7CiAgICAgICAgIC8vIEZJ
WE1FOiBXZSBzb21ldGltZXMgYWxsb3cgZGVsZXRpb25zIGF0IHRoZSBzdGFydCBvZiBlZGl0YWJs
ZSByb290cywgbGlrZSB3aGVuIHRoZSBjYXJldCBpcyBpbiBhbiBlbXB0eSBsaXN0IGl0ZW0uCiAg
ICAgICAgIGlmIChwcmV2aW91cy5pc051bGwoKSB8fCBwcmV2aW91cy5kZWVwRXF1aXZhbGVudCgp
Lm5vZGUoKS0+cm9vdEVkaXRhYmxlRWxlbWVudCgpICE9IHN0YXJ0Q29udGFpbmVyLT5yb290RWRp
dGFibGVFbGVtZW50KCkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VTZWxl
Y3Rpb25Db21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Jl
cGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcAkocmV2aXNpb24gNzc4NTApCisrKyBTb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtODg0LDcgKzg4NCw3IEBAIHZvaWQgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OmRvQXBwbHko
KQogICAgIE5vZGUqIGVuZEJSID0gaW5zZXJ0aW9uUG9zLmRvd25zdHJlYW0oKS5ub2RlKCktPmhh
c1RhZ05hbWUoYnJUYWcpID8gaW5zZXJ0aW9uUG9zLmRvd25zdHJlYW0oKS5ub2RlKCkgOiAwOwog
ICAgIFZpc2libGVQb3NpdGlvbiBvcmlnaW5hbFZpc1Bvc0JlZm9yZUVuZEJSOwogICAgIGlmIChl
bmRCUikKLSAgICAgICAgb3JpZ2luYWxWaXNQb3NCZWZvcmVFbmRCUiA9IFZpc2libGVQb3NpdGlv
bihlbmRCUiwgMCwgRE9XTlNUUkVBTSkucHJldmlvdXMoKTsKKyAgICAgICAgb3JpZ2luYWxWaXNQ
b3NCZWZvcmVFbmRCUiA9IFZpc2libGVQb3NpdGlvbihwb3NpdGlvbkJlZm9yZU5vZGUoZW5kQlIp
LCBET1dOU1RSRUFNKS5wcmV2aW91cygpOwogICAgIAogICAgIHN0YXJ0QmxvY2sgPSBlbmNsb3Np
bmdCbG9jayhpbnNlcnRpb25Qb3Mubm9kZSgpKTsKICAgICAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvU2VsZWN0aW9uQ29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvZWRpdGluZy9TZWxlY3Rpb25Db250cm9sbGVyLmNwcAkocmV2aXNpb24gNzc4NTApCisr
KyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMzE1LDggKzEzMTUsOCBAQCB2b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6OnNl
bGVjdEZyYW1lRWxlCiAKICAgICAvLyBDcmVhdGUgY29tcHV0ZSBwb3NpdGlvbnMgYmVmb3JlIGFu
ZCBhZnRlciB0aGUgZWxlbWVudC4KICAgICB1bnNpZ25lZCBvd25lckVsZW1lbnROb2RlSW5kZXgg
PSBvd25lckVsZW1lbnQtPm5vZGVJbmRleCgpOwotICAgIFZpc2libGVQb3NpdGlvbiBiZWZvcmVP
d25lckVsZW1lbnQoVmlzaWJsZVBvc2l0aW9uKG93bmVyRWxlbWVudFBhcmVudCwgb3duZXJFbGVt
ZW50Tm9kZUluZGV4LCBTRUxfREVGQVVMVF9BRkZJTklUWSkpOwotICAgIFZpc2libGVQb3NpdGlv
biBhZnRlck93bmVyRWxlbWVudChWaXNpYmxlUG9zaXRpb24ob3duZXJFbGVtZW50UGFyZW50LCBv
d25lckVsZW1lbnROb2RlSW5kZXggKyAxLCBWUF9VUFNUUkVBTV9JRl9QT1NTSUJMRSkpOworICAg
IFZpc2libGVQb3NpdGlvbiBiZWZvcmVPd25lckVsZW1lbnQoVmlzaWJsZVBvc2l0aW9uKFBvc2l0
aW9uKG93bmVyRWxlbWVudFBhcmVudCwgb3duZXJFbGVtZW50Tm9kZUluZGV4LCBQb3NpdGlvbjo6
UG9zaXRpb25Jc09mZnNldEluQW5jaG9yKSkpOworICAgIFZpc2libGVQb3NpdGlvbiBhZnRlck93
bmVyRWxlbWVudChWaXNpYmxlUG9zaXRpb24oUG9zaXRpb24ob3duZXJFbGVtZW50UGFyZW50LCBv
d25lckVsZW1lbnROb2RlSW5kZXggKyAxLCBQb3NpdGlvbjo6UG9zaXRpb25Jc09mZnNldEluQW5j
aG9yKSwgVlBfVVBTVFJFQU1fSUZfUE9TU0lCTEUpKTsKIAogICAgIC8vIEZvY3VzIG9uIHRoZSBw
YXJlbnQgZnJhbWUsIGFuZCB0aGVuIHNlbGVjdCBmcm9tIGJlZm9yZSB0aGlzIGVsZW1lbnQgdG8g
YWZ0ZXIuCiAgICAgVmlzaWJsZVNlbGVjdGlvbiBuZXdTZWxlY3Rpb24oYmVmb3JlT3duZXJFbGVt
ZW50LCBhZnRlck93bmVyRWxlbWVudCk7CkBAIC0xMzg3LDggKzEzODcsOCBAQCBib29sIFNlbGVj
dGlvbkNvbnRyb2xsZXI6OnNldFNlbGVjdGVkUmFuCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAKICAgICAvLyBGSVhNRTogQ2FuIHdlIHByb3ZpZGUgZXh0ZW50QWZmaW5pdHk/Ci0gICAgVmlz
aWJsZVBvc2l0aW9uIHZpc2libGVTdGFydChzdGFydENvbnRhaW5lciwgc3RhcnRPZmZzZXQsIGNv
bGxhcHNlZCA/IGFmZmluaXR5IDogRE9XTlNUUkVBTSk7Ci0gICAgVmlzaWJsZVBvc2l0aW9uIHZp
c2libGVFbmQoZW5kQ29udGFpbmVyLCBlbmRPZmZzZXQsIFNFTF9ERUZBVUxUX0FGRklOSVRZKTsK
KyAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVN0YXJ0KFBvc2l0aW9uKHN0YXJ0Q29udGFpbmVy
LCBzdGFydE9mZnNldCwgUG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvciksIGNvbGxh
cHNlZCA/IGFmZmluaXR5IDogRE9XTlNUUkVBTSk7CisgICAgVmlzaWJsZVBvc2l0aW9uIHZpc2li
bGVFbmQoUG9zaXRpb24oZW5kQ29udGFpbmVyLCBlbmRPZmZzZXQsIFBvc2l0aW9uOjpQb3NpdGlv
bklzT2Zmc2V0SW5BbmNob3IpLCBTRUxfREVGQVVMVF9BRkZJTklUWSk7CiAgICAgc2V0U2VsZWN0
aW9uKFZpc2libGVTZWxlY3Rpb24odmlzaWJsZVN0YXJ0LCB2aXNpYmxlRW5kKSwgY2xvc2VUeXBp
bmcpOwogICAgIHJldHVybiB0cnVlOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9U
ZXh0SXRlcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4
dEl0ZXJhdG9yLmNwcAkocmV2aXNpb24gNzc4NTApCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L1RleHRJdGVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg3OCw4ICs4NzgsOCBAQCBib29s
IFRleHRJdGVyYXRvcjo6c2hvdWxkUmVwcmVzZW50Tm9kZU9mCiAgICAgLy8gYW5kIGluIHRoYXQg
Y2FzZSB3ZSdsbCBnZXQgbnVsbC4gV2UgZG9uJ3Qgd2FudCB0byBwdXQgaW4gbmV3bGluZXMgYXQg
dGhlIHN0YXJ0IGluIHRoYXQgY2FzZS4KICAgICAvLyBUaGUgY3VyclBvcy5pc05vdE51bGwoKSBj
aGVjayBpcyBuZWVkZWQgYmVjYXVzZSBwb3NpdGlvbnMgaW4gbm9uLUhUTUwgY29udGVudAogICAg
IC8vIChsaWtlIFNWRykgZG8gbm90IGhhdmUgdmlzaWJsZSBwb3NpdGlvbnMsIGFuZCB3ZSBkb24n
dCB3YW50IHRvIGVtaXQgZm9yIHRoZW0gZWl0aGVyLgotICAgIFZpc2libGVQb3NpdGlvbiBzdGFy
dFBvcyA9IFZpc2libGVQb3NpdGlvbihtX3N0YXJ0Q29udGFpbmVyLCBtX3N0YXJ0T2Zmc2V0LCBE
T1dOU1RSRUFNKTsKLSAgICBWaXNpYmxlUG9zaXRpb24gY3VyclBvcyA9IFZpc2libGVQb3NpdGlv
bihtX25vZGUsIDAsIERPV05TVFJFQU0pOworICAgIFZpc2libGVQb3NpdGlvbiBzdGFydFBvcyA9
IFZpc2libGVQb3NpdGlvbihQb3NpdGlvbihtX3N0YXJ0Q29udGFpbmVyLCBtX3N0YXJ0T2Zmc2V0
LCBQb3NpdGlvbjo6UG9zaXRpb25Jc09mZnNldEluQW5jaG9yKSwgRE9XTlNUUkVBTSk7CisgICAg
VmlzaWJsZVBvc2l0aW9uIGN1cnJQb3MgPSBWaXNpYmxlUG9zaXRpb24ocG9zaXRpb25CZWZvcmVO
b2RlKG1fbm9kZSksIERPV05TVFJFQU0pOwogICAgIHJldHVybiBzdGFydFBvcy5pc05vdE51bGwo
KSAmJiBjdXJyUG9zLmlzTm90TnVsbCgpICYmICFpblNhbWVMaW5lKHN0YXJ0UG9zLCBjdXJyUG9z
KTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwCShy
ZXZpc2lvbiA3Nzg1MCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29tbWFuZC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5NSw3ICs0OTUsNyBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6
OmRlbGV0ZUtleVByZXNzZWQoVGV4CiAgICAgICAgICAgICBzZWxlY3Rpb24ubW9kaWZ5KFNlbGVj
dGlvbkNvbnRyb2xsZXI6OkFsdGVyYXRpb25FeHRlbmQsIERpcmVjdGlvbkJhY2t3YXJkLCBncmFu
dWxhcml0eSk7CiAgICAgICAgIC8vIElmIHRoZSBjYXJldCBpcyBqdXN0IGFmdGVyIGEgdGFibGUs
IHNlbGVjdCB0aGUgdGFibGUgYW5kIGRvbid0IGRlbGV0ZSBhbnl0aGluZy4KICAgICAgICAgfSBl
bHNlIGlmIChOb2RlKiB0YWJsZSA9IGlzRmlyc3RQb3NpdGlvbkFmdGVyVGFibGUodmlzaWJsZVN0
YXJ0KSkgewotICAgICAgICAgICAgc2V0RW5kaW5nU2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24o
cG9zaXRpb25BZnRlck5vZGUodGFibGUpLCBlbmRpbmdTZWxlY3Rpb24oKS5zdGFydCgpLCBET1dO
U1RSRUFNKSk7CisgICAgICAgICAgICBzZXRFbmRpbmdTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlv
bihwb3NpdGlvbkJlZm9yZU5vZGUodGFibGUpLCBlbmRpbmdTZWxlY3Rpb24oKS5zdGFydCgpLCBE
T1dOU1RSRUFNKSk7CiAgICAgICAgICAgICB0eXBpbmdBZGRlZFRvT3BlbkNvbW1hbmQoRGVsZXRl
S2V5KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpJbmRleDogU291cmNlL1dlYkNv
cmUvZWRpdGluZy9WaXNpYmxlUG9zaXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvVmlzaWJsZVBvc2l0aW9uLmNwcAkocmV2aXNpb24gNzc4NTApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQ4LDEyICs0OCw2IEBAIFZpc2libGVQb3NpdGlvbjo6VmlzaWJsZVBvc2l0aW9uKGNvbnN0IFAK
ICAgICBpbml0KHBvcywgYWZmaW5pdHkpOwogfQogCi1WaXNpYmxlUG9zaXRpb246OlZpc2libGVQ
b3NpdGlvbihOb2RlICpub2RlLCBpbnQgb2Zmc2V0LCBFQWZmaW5pdHkgYWZmaW5pdHkpCi17Ci0g
ICAgQVNTRVJUKG9mZnNldCA+PSAwKTsKLSAgICBpbml0KFBvc2l0aW9uKG5vZGUsIG9mZnNldCks
IGFmZmluaXR5KTsKLX0KLQogdm9pZCBWaXNpYmxlUG9zaXRpb246OmluaXQoY29uc3QgUG9zaXRp
b24mIHBvc2l0aW9uLCBFQWZmaW5pdHkgYWZmaW5pdHkpCiB7CiAgICAgbV9hZmZpbml0eSA9IGFm
ZmluaXR5OwpAQCAtMTA2LDcgKzEwMCw3IEBAIFZpc2libGVQb3NpdGlvbiBWaXNpYmxlUG9zaXRp
b246OnByZXZpb3UKIFBvc2l0aW9uIFZpc2libGVQb3NpdGlvbjo6bGVmdFZpc3VhbGx5RGlzdGlu
Y3RDYW5kaWRhdGUoKSBjb25zdAogewogICAgIFBvc2l0aW9uIHAgPSBtX2RlZXBQb3NpdGlvbjsK
LSAgICBpZiAoIXAubm9kZSgpKQorICAgIGlmIChwLmlzTnVsbCgpKQogICAgICAgICByZXR1cm4g
UG9zaXRpb24oKTsKIAogICAgIFBvc2l0aW9uIGRvd25zdHJlYW1TdGFydCA9IHAuZG93bnN0cmVh
bSgpOwpAQCAtMjQyLDcgKzIzNiw3IEBAIFZpc2libGVQb3NpdGlvbiBWaXNpYmxlUG9zaXRpb246
OmxlZnQoYm8KIFBvc2l0aW9uIFZpc2libGVQb3NpdGlvbjo6cmlnaHRWaXN1YWxseURpc3RpbmN0
Q2FuZGlkYXRlKCkgY29uc3QKIHsKICAgICBQb3NpdGlvbiBwID0gbV9kZWVwUG9zaXRpb247Ci0g
ICAgaWYgKCFwLm5vZGUoKSkKKyAgICBpZiAocC5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIFBv
c2l0aW9uKCk7CiAKICAgICBQb3NpdGlvbiBkb3duc3RyZWFtU3RhcnQgPSBwLmRvd25zdHJlYW0o
KTsKQEAgLTQ1MSwxMCArNDQ1LDExIEBAIFBvc2l0aW9uIFZpc2libGVQb3NpdGlvbjo6Y2Fub25p
Y2FsUG9zaXQKICAgICAvLyBUbyBmaXggdGhpcywgd2UgbmVlZCB0byBlaXRoZXIgYSkgYWRkIGNv
ZGUgdG8gYWxsIHBhaW50Q2FyZXRzIHRvIHBhc3MgdGhlIHJlc3BvbnNpYmlsaXR5IG9mZiB0bwog
ICAgIC8vIHRoZSBhcHByb3ByaWF0ZSByZW5kZXJlciBmb3IgVmlzaWJsZVBvc2l0aW9uJ3MgbGlr
ZSB0aGVzZSwgb3IgYikgY2Fub25pY2FsaXplIHRvIHRoZSByaWdodG1vc3QgY2FuZGlkYXRlCiAg
ICAgLy8gdW5sZXNzIHRoZSBhZmZpbml0eSBpcyB1cHN0cmVhbS4KLSAgICBOb2RlKiBub2RlID0g
cG9zaXRpb24ubm9kZSgpOwotICAgIGlmICghbm9kZSkKKyAgICBpZiAocG9zaXRpb24uaXNOdWxs
KCkpCiAgICAgICAgIHJldHVybiBQb3NpdGlvbigpOwogCisgICAgTm9kZSogbm9kZSA9IHBvc2l0
aW9uLmNvbnRhaW5lck5vZGUoKTsKKwogICAgIEFTU0VSVChub2RlLT5kb2N1bWVudCgpKTsKICAg
ICBub2RlLT5kb2N1bWVudCgpLT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMo
KTsKIApAQCAtNTEwLDExICs1MDUsMTIgQEAgVUNoYXIzMiBWaXNpYmxlUG9zaXRpb246OmNoYXJh
Y3RlckFmdGVyKAogICAgIC8vIFdlIGNhbm9uaWNhbGl6ZSB0byB0aGUgZmlyc3Qgb2YgdHdvIGVx
dWl2YWxlbnQgY2FuZGlkYXRlcywgYnV0IHRoZSBzZWNvbmQgb2YgdGhlIHR3byBjYW5kaWRhdGVz
CiAgICAgLy8gaXMgdGhlIG9uZSB0aGF0IHdpbGwgYmUgaW5zaWRlIHRoZSB0ZXh0IG5vZGUgY29u
dGFpbmluZyB0aGUgY2hhcmFjdGVyIGFmdGVyIHRoaXMgdmlzaWJsZSBwb3NpdGlvbi4KICAgICBQ
b3NpdGlvbiBwb3MgPSBtX2RlZXBQb3NpdGlvbi5kb3duc3RyZWFtKCk7Ci0gICAgTm9kZSogbm9k
ZSA9IHBvcy5ub2RlKCk7Ci0gICAgaWYgKCFub2RlIHx8ICFub2RlLT5pc1RleHROb2RlKCkpCisg
ICAgTm9kZSogbm9kZSA9IHBvcy5jb250YWluZXJOb2RlKCk7CisgICAgaWYgKCFub2RlIHx8ICFu
b2RlLT5pc1RleHROb2RlKCkgfHwgcG9zLmFuY2hvclR5cGUoKSA9PSBQb3NpdGlvbjo6UG9zaXRp
b25Jc0FmdGVyQW5jaG9yKQogICAgICAgICByZXR1cm4gMDsKLSAgICBUZXh0KiB0ZXh0Tm9kZSA9
IHN0YXRpY19jYXN0PFRleHQqPihwb3Mubm9kZSgpKTsKLSAgICB1bnNpZ25lZCBvZmZzZXQgPSBw
b3MuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKTsKKyAgICBBU1NFUlQocG9zLmFuY2hvclR5cGUo
KSA9PSBQb3NpdGlvbjo6UG9zaXRpb25Jc0JlZm9yZUFuY2hvciB8fCBwb3MuYW5jaG9yVHlwZSgp
ID09IFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3IpOworICAgIFRleHQqIHRleHRO
b2RlID0gc3RhdGljX2Nhc3Q8VGV4dCo+KHBvcy5jb250YWluZXJOb2RlKCkpOworICAgIHVuc2ln
bmVkIG9mZnNldCA9IHBvcy5hbmNob3JUeXBlKCkgPT0gUG9zaXRpb246OlBvc2l0aW9uSXNPZmZz
ZXRJbkFuY2hvciA/IHBvcy5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSA6IDA7CiAgICAgdW5zaWdu
ZWQgbGVuZ3RoID0gdGV4dE5vZGUtPmxlbmd0aCgpOwogICAgIGlmIChvZmZzZXQgPj0gbGVuZ3Ro
KQogICAgICAgICByZXR1cm4gMDsKQEAgLTUyNywxMSArNTIzLDExIEBAIFVDaGFyMzIgVmlzaWJs
ZVBvc2l0aW9uOjpjaGFyYWN0ZXJBZnRlcigKIAogSW50UmVjdCBWaXNpYmxlUG9zaXRpb246Omxv
Y2FsQ2FyZXRSZWN0KFJlbmRlck9iamVjdComIHJlbmRlcmVyKSBjb25zdAogewotICAgIE5vZGUq
IG5vZGUgPSBtX2RlZXBQb3NpdGlvbi5ub2RlKCk7Ci0gICAgaWYgKCFub2RlKSB7CisgICAgaWYg
KG1fZGVlcFBvc2l0aW9uLmlzTnVsbCgpKSB7CiAgICAgICAgIHJlbmRlcmVyID0gMDsKICAgICAg
ICAgcmV0dXJuIEludFJlY3QoKTsKICAgICB9CisgICAgTm9kZSogbm9kZSA9IG1fZGVlcFBvc2l0
aW9uLmNvbnRhaW5lck5vZGUoKTsKICAgICAKICAgICByZW5kZXJlciA9IG5vZGUtPnJlbmRlcmVy
KCk7CiAgICAgaWYgKCFyZW5kZXJlcikKQEAgLTU5OSwxOSArNTk1LDE5IEBAIFBhc3NSZWZQdHI8
UmFuZ2U+IG1ha2VSYW5nZShjb25zdCBWaXNpYmwKICAgICAKICAgICBQb3NpdGlvbiBzID0gc3Rh
cnQuZGVlcEVxdWl2YWxlbnQoKS5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKTsKICAgICBQb3Np
dGlvbiBlID0gZW5kLmRlZXBFcXVpdmFsZW50KCkucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCk7
Ci0gICAgcmV0dXJuIFJhbmdlOjpjcmVhdGUocy5ub2RlKCktPmRvY3VtZW50KCksIHMubm9kZSgp
LCBzLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCksIGUubm9kZSgpLCBlLmRlcHJlY2F0ZWRFZGl0
aW5nT2Zmc2V0KCkpOworICAgIHJldHVybiBSYW5nZTo6Y3JlYXRlKHMuY29udGFpbmVyTm9kZSgp
LT5kb2N1bWVudCgpLCBzLmNvbnRhaW5lck5vZGUoKSwgcy5vZmZzZXRJbkNvbnRhaW5lck5vZGUo
KSwgZS5jb250YWluZXJOb2RlKCksIGUub2Zmc2V0SW5Db250YWluZXJOb2RlKCkpOwogfQogCiBW
aXNpYmxlUG9zaXRpb24gc3RhcnRWaXNpYmxlUG9zaXRpb24oY29uc3QgUmFuZ2UgKnIsIEVBZmZp
bml0eSBhZmZpbml0eSkKIHsKICAgICBpbnQgZXhjZXB0aW9uID0gMDsKLSAgICByZXR1cm4gVmlz
aWJsZVBvc2l0aW9uKHItPnN0YXJ0Q29udGFpbmVyKGV4Y2VwdGlvbiksIHItPnN0YXJ0T2Zmc2V0
KGV4Y2VwdGlvbiksIGFmZmluaXR5KTsKKyAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKFBvc2l0
aW9uKHItPnN0YXJ0Q29udGFpbmVyKGV4Y2VwdGlvbiksIHItPnN0YXJ0T2Zmc2V0KGV4Y2VwdGlv
biksIFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3IpLCBhZmZpbml0eSk7CiB9CiAK
IFZpc2libGVQb3NpdGlvbiBlbmRWaXNpYmxlUG9zaXRpb24oY29uc3QgUmFuZ2UgKnIsIEVBZmZp
bml0eSBhZmZpbml0eSkKIHsKICAgICBpbnQgZXhjZXB0aW9uID0gMDsKLSAgICByZXR1cm4gVmlz
aWJsZVBvc2l0aW9uKHItPmVuZENvbnRhaW5lcihleGNlcHRpb24pLCByLT5lbmRPZmZzZXQoZXhj
ZXB0aW9uKSwgYWZmaW5pdHkpOworICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oUG9zaXRpb24o
ci0+ZW5kQ29udGFpbmVyKGV4Y2VwdGlvbiksIHItPmVuZE9mZnNldChleGNlcHRpb24pLCBQb3Np
dGlvbjo6UG9zaXRpb25Jc09mZnNldEluQW5jaG9yKSwgYWZmaW5pdHkpOwogfQogCiBib29sIHNl
dFN0YXJ0KFJhbmdlICpyLCBjb25zdCBWaXNpYmxlUG9zaXRpb24gJnZpc2libGVQb3NpdGlvbikK
QEAgLTYyMCw3ICs2MTYsNyBAQCBib29sIHNldFN0YXJ0KFJhbmdlICpyLCBjb25zdCBWaXNpYmxl
UG9zCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBQb3NpdGlvbiBwID0gdmlzaWJsZVBvc2l0
aW9uLmRlZXBFcXVpdmFsZW50KCkucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCk7CiAgICAgaW50
IGNvZGUgPSAwOwotICAgIHItPnNldFN0YXJ0KHAubm9kZSgpLCBwLmRlcHJlY2F0ZWRFZGl0aW5n
T2Zmc2V0KCksIGNvZGUpOworICAgIHItPnNldFN0YXJ0KHAuY29udGFpbmVyTm9kZSgpLCBwLm9m
ZnNldEluQ29udGFpbmVyTm9kZSgpLCBjb2RlKTsKICAgICByZXR1cm4gY29kZSA9PSAwOwogfQog
CkBAIC02MzAsNyArNjI2LDcgQEAgYm9vbCBzZXRFbmQoUmFuZ2UgKnIsIGNvbnN0IFZpc2libGVQ
b3NpdAogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgUG9zaXRpb24gcCA9IHZpc2libGVQb3Np
dGlvbi5kZWVwRXF1aXZhbGVudCgpLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpOwogICAgIGlu
dCBjb2RlID0gMDsKLSAgICByLT5zZXRFbmQocC5ub2RlKCksIHAuZGVwcmVjYXRlZEVkaXRpbmdP
ZmZzZXQoKSwgY29kZSk7CisgICAgci0+c2V0RW5kKHAuY29udGFpbmVyTm9kZSgpLCBwLm9mZnNl
dEluQ29udGFpbmVyTm9kZSgpLCBjb2RlKTsKICAgICByZXR1cm4gY29kZSA9PSAwOwogfQogCkBA
IC02NDYsMTAgKzY0MiwxMCBAQCBib29sIGlzRmlyc3RWaXNpYmxlUG9zaXRpb25Jbk5vZGUoY29u
c3QgCiB7CiAgICAgaWYgKHZpc2libGVQb3NpdGlvbi5pc051bGwoKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIAotICAgIGlmICghdmlzaWJsZVBvc2l0aW9uLmRlZXBFcXVpdmFsZW50KCku
bm9kZSgpLT5pc0Rlc2NlbmRhbnRPZihub2RlKSkKKworICAgIGlmICghdmlzaWJsZVBvc2l0aW9u
LmRlZXBFcXVpdmFsZW50KCkuY29udGFpbmVyTm9kZSgpLT5pc0Rlc2NlbmRhbnRPZihub2RlKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAKKwogICAgIFZpc2libGVQb3NpdGlvbiBw
cmV2aW91cyA9IHZpc2libGVQb3NpdGlvbi5wcmV2aW91cygpOwogICAgIHJldHVybiBwcmV2aW91
cy5pc051bGwoKSB8fCAhcHJldmlvdXMuZGVlcEVxdWl2YWxlbnQoKS5ub2RlKCktPmlzRGVzY2Vu
ZGFudE9mKG5vZGUpOwogfQpAQCAtNjU4LDEwICs2NTQsMTAgQEAgYm9vbCBpc0xhc3RWaXNpYmxl
UG9zaXRpb25Jbk5vZGUoY29uc3QgVgogewogICAgIGlmICh2aXNpYmxlUG9zaXRpb24uaXNOdWxs
KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBpZiAoIXZpc2libGVQb3NpdGlv
bi5kZWVwRXF1aXZhbGVudCgpLm5vZGUoKS0+aXNEZXNjZW5kYW50T2Yobm9kZSkpCisKKyAgICBp
ZiAoIXZpc2libGVQb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgpLmNvbnRhaW5lck5vZGUoKS0+aXNE
ZXNjZW5kYW50T2Yobm9kZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAg
ICAKKwogICAgIFZpc2libGVQb3NpdGlvbiBuZXh0ID0gdmlzaWJsZVBvc2l0aW9uLm5leHQoKTsK
ICAgICByZXR1cm4gbmV4dC5pc051bGwoKSB8fCAhbmV4dC5kZWVwRXF1aXZhbGVudCgpLm5vZGUo
KS0+aXNEZXNjZW5kYW50T2Yobm9kZSk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L1Zpc2libGVQb3NpdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
VmlzaWJsZVBvc2l0aW9uLmgJKHJldmlzaW9uIDc3ODUwKQorKysgU291cmNlL1dlYkNvcmUvZWRp
dGluZy9WaXNpYmxlUG9zaXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNTQsNyArNTQsNiBAQCBw
dWJsaWM6CiAgICAgLy8gTk9URTogVVBTVFJFQU0gYWZmaW5pdHkgd2lsbCBiZSB1c2VkIG9ubHkg
aWYgcG9zIGlzIGF0IGVuZCBvZiBhIHdyYXBwZWQgbGluZSwKICAgICAvLyBvdGhlcndpc2UgaXQg
d2lsbCBiZSBjb252ZXJ0ZWQgdG8gRE9XTlNUUkVBTQogICAgIFZpc2libGVQb3NpdGlvbigpIDog
bV9hZmZpbml0eShWUF9ERUZBVUxUX0FGRklOSVRZKSB7IH0KLSAgICBWaXNpYmxlUG9zaXRpb24o
Tm9kZSosIGludCBvZmZzZXQsIEVBZmZpbml0eSk7CiAgICAgVmlzaWJsZVBvc2l0aW9uKGNvbnN0
IFBvc2l0aW9uJiwgRUFmZmluaXR5ID0gVlBfREVGQVVMVF9BRkZJTklUWSk7CiAKICAgICB2b2lk
IGNsZWFyKCkgeyBtX2RlZXBQb3NpdGlvbi5jbGVhcigpOyB9CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL2h0bWxlZGl0aW5nLmNwcAkocmV2aXNpb24gNzc4NTApCisrKyBTb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDI2LDcgKzQyNiw3
IEBAIHN0YXRpYyBOb2RlKiBmaXJzdEluU3BlY2lhbEVsZW1lbnQoY29uc3QKICAgICBmb3IgKE5v
ZGUqIG4gPSBwb3Mubm9kZSgpOyBuICYmIG4tPnJvb3RFZGl0YWJsZUVsZW1lbnQoKSA9PSByb290
RWRpdGFibGVFbGVtZW50OyBuID0gbi0+cGFyZW50Tm9kZSgpKQogICAgICAgICBpZiAoaXNTcGVj
aWFsRWxlbWVudChuKSkgewogICAgICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHZQb3MgPSBWaXNp
YmxlUG9zaXRpb24ocG9zLCBET1dOU1RSRUFNKTsKLSAgICAgICAgICAgIFZpc2libGVQb3NpdGlv
biBmaXJzdEluRWxlbWVudCA9IFZpc2libGVQb3NpdGlvbihuLCAwLCBET1dOU1RSRUFNKTsKKyAg
ICAgICAgICAgIFZpc2libGVQb3NpdGlvbiBmaXJzdEluRWxlbWVudCA9IFZpc2libGVQb3NpdGlv
bihmaXJzdFBvc2l0aW9uSW5PckJlZm9yZU5vZGUobiksIERPV05TVFJFQU0pOwogICAgICAgICAg
ICAgaWYgKGlzVGFibGVFbGVtZW50KG4pICYmIHZQb3MgPT0gZmlyc3RJbkVsZW1lbnQubmV4dCgp
KQogICAgICAgICAgICAgICAgIHJldHVybiBuOwogICAgICAgICAgICAgaWYgKHZQb3MgPT0gZmly
c3RJbkVsZW1lbnQpCkBAIC00NDIsNyArNDQyLDcgQEAgc3RhdGljIE5vZGUqIGxhc3RJblNwZWNp
YWxFbGVtZW50KGNvbnN0IAogICAgIGZvciAoTm9kZSogbiA9IHBvcy5ub2RlKCk7IG4gJiYgbi0+
cm9vdEVkaXRhYmxlRWxlbWVudCgpID09IHJvb3RFZGl0YWJsZUVsZW1lbnQ7IG4gPSBuLT5wYXJl
bnROb2RlKCkpCiAgICAgICAgIGlmIChpc1NwZWNpYWxFbGVtZW50KG4pKSB7CiAgICAgICAgICAg
ICBWaXNpYmxlUG9zaXRpb24gdlBvcyA9IFZpc2libGVQb3NpdGlvbihwb3MsIERPV05TVFJFQU0p
OwotICAgICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIGxhc3RJbkVsZW1lbnQgPSBWaXNpYmxlUG9z
aXRpb24obiwgbi0+Y2hpbGROb2RlQ291bnQoKSwgRE9XTlNUUkVBTSk7CisgICAgICAgICAgICBW
aXNpYmxlUG9zaXRpb24gbGFzdEluRWxlbWVudCA9IFZpc2libGVQb3NpdGlvbihQb3NpdGlvbihu
LCBuLT5jaGlsZE5vZGVDb3VudCgpLCBQb3NpdGlvbjo6UG9zaXRpb25Jc09mZnNldEluQW5jaG9y
KSwgRE9XTlNUUkVBTSk7CiAgICAgICAgICAgICBpZiAoaXNUYWJsZUVsZW1lbnQobikgJiYgdlBv
cyA9PSBsYXN0SW5FbGVtZW50LnByZXZpb3VzKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG47
CiAgICAgICAgICAgICBpZiAodlBvcyA9PSBsYXN0SW5FbGVtZW50KQpAQCAtNTE5LDcgKzUxOSw3
IEBAIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9zaXRpb25CZWZvcmVOb2QKIHsKICAgICBBU1NF
UlQobm9kZSk7CiAgICAgaWYgKG5vZGUtPmNoaWxkTm9kZUNvdW50KCkpCi0gICAgICAgIHJldHVy
biBWaXNpYmxlUG9zaXRpb24obm9kZSwgMCwgRE9XTlNUUkVBTSk7CisgICAgICAgIHJldHVybiBW
aXNpYmxlUG9zaXRpb24oZmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2RlKG5vZGUpLCBET1dOU1RS
RUFNKTsKICAgICBBU1NFUlQobm9kZS0+cGFyZW50Tm9kZSgpKTsKICAgICByZXR1cm4gcG9zaXRp
b25JblBhcmVudEJlZm9yZU5vZGUobm9kZSk7CiB9CkBAIC01MjksNyArNTI5LDcgQEAgVmlzaWJs
ZVBvc2l0aW9uIHZpc2libGVQb3NpdGlvbkFmdGVyTm9kZQogewogICAgIEFTU0VSVChub2RlKTsK
ICAgICBpZiAobm9kZS0+Y2hpbGROb2RlQ291bnQoKSkKLSAgICAgICAgcmV0dXJuIFZpc2libGVQ
b3NpdGlvbihub2RlLCBub2RlLT5jaGlsZE5vZGVDb3VudCgpLCBET1dOU1RSRUFNKTsKKyAgICAg
ICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihsYXN0UG9zaXRpb25Jbk9yQWZ0ZXJOb2RlKG5vZGUp
LCBET1dOU1RSRUFNKTsKICAgICBBU1NFUlQobm9kZS0+cGFyZW50Tm9kZSgpKTsKICAgICByZXR1
cm4gcG9zaXRpb25JblBhcmVudEFmdGVyTm9kZShub2RlKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvdmlzaWJsZV91bml0cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvZWRpdGluZy92aXNpYmxlX3VuaXRzLmNwcAkocmV2aXNpb24gNzc4NTApCisrKyBTb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL3Zpc2libGVfdW5pdHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNzcs
MTMgKzM3Nyw4IEBAIHN0YXRpYyBWaXNpYmxlUG9zaXRpb24gc3RhcnRQb3NpdGlvbkZvckwKICAg
ICAgICAgc3RhcnRCb3ggPSBzdGFydEJveC0+bmV4dExlYWZDaGlsZCgpOwogICAgIH0KICAgICAK
LSAgICBpbnQgc3RhcnRPZmZzZXQgPSAwOwotICAgIGlmIChzdGFydEJveC0+aXNJbmxpbmVUZXh0
Qm94KCkpIHsKLSAgICAgICAgSW5saW5lVGV4dEJveCAqc3RhcnRUZXh0Qm94ID0gc3RhdGljX2Nh
c3Q8SW5saW5lVGV4dEJveCAqPihzdGFydEJveCk7Ci0gICAgICAgIHN0YXJ0T2Zmc2V0ID0gc3Rh
cnRUZXh0Qm94LT5zdGFydCgpOwotICAgIH0KLSAgCi0gICAgVmlzaWJsZVBvc2l0aW9uIHZpc1Bv
cyA9IFZpc2libGVQb3NpdGlvbihzdGFydE5vZGUsIHN0YXJ0T2Zmc2V0LCBET1dOU1RSRUFNKTsK
KyAgICBWaXNpYmxlUG9zaXRpb24gdmlzUG9zID0gc3RhcnRCb3gtPmlzSW5saW5lVGV4dEJveCgp
ID8gVmlzaWJsZVBvc2l0aW9uKFBvc2l0aW9uKHN0YXJ0Tm9kZSwgc3RhdGljX2Nhc3Q8SW5saW5l
VGV4dEJveCAqPihzdGFydEJveCktPnN0YXJ0KCksIFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0
SW5BbmNob3IpLCBET1dOU1RSRUFNKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgOiBWaXNpYmxlUG9zaXRpb24ocG9zaXRpb25CZWZvcmVO
b2RlKHN0YXJ0Tm9kZSksIERPV05TVFJFQU0pOwogICAgIHJldHVybiBwb3NpdGlvbkF2b2lkaW5n
Rmlyc3RQb3NpdGlvbkluVGFibGUodmlzUG9zKTsKIH0KIApAQCAtNDI5LDE3ICs0MjQsMTkgQEAg
c3RhdGljIFZpc2libGVQb3NpdGlvbiBlbmRQb3NpdGlvbkZvckxpbgogICAgICAgICBlbmRCb3gg
PSBlbmRCb3gtPnByZXZMZWFmQ2hpbGQoKTsKICAgICB9CiAgICAgCi0gICAgaW50IGVuZE9mZnNl
dCA9IDE7CisgICAgUG9zaXRpb24gcG9zOwogICAgIGlmIChlbmROb2RlLT5oYXNUYWdOYW1lKGJy
VGFnKSkgewotICAgICAgICBlbmRPZmZzZXQgPSAwOworICAgICAgICBwb3MgPSBwb3NpdGlvbkJl
Zm9yZU5vZGUoZW5kTm9kZSk7CiAgICAgfSBlbHNlIGlmIChlbmRCb3gtPmlzSW5saW5lVGV4dEJv
eCgpKSB7CiAgICAgICAgIElubGluZVRleHRCb3ggKmVuZFRleHRCb3ggPSBzdGF0aWNfY2FzdDxJ
bmxpbmVUZXh0Qm94ICo+KGVuZEJveCk7Ci0gICAgICAgIGVuZE9mZnNldCA9IGVuZFRleHRCb3gt
PnN0YXJ0KCk7CisgICAgICAgIGludCBlbmRPZmZzZXQgPSBlbmRUZXh0Qm94LT5zdGFydCgpOwog
ICAgICAgICBpZiAoIWVuZFRleHRCb3gtPmlzTGluZUJyZWFrKCkpCiAgICAgICAgICAgICBlbmRP
ZmZzZXQgKz0gZW5kVGV4dEJveC0+bGVuKCk7Ci0gICAgfQorICAgICAgICBwb3MgPSBQb3NpdGlv
bihlbmROb2RlLCBlbmRPZmZzZXQsIFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3Ip
OworICAgIH0gZWxzZQorICAgICAgICBwb3MgPSBwb3NpdGlvbkFmdGVyTm9kZShlbmROb2RlKTsK
ICAgICAKLSAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKGVuZE5vZGUsIGVuZE9mZnNldCwgVlBf
VVBTVFJFQU1fSUZfUE9TU0lCTEUpOworICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24ocG9zLCBW
UF9VUFNUUkVBTV9JRl9QT1NTSUJMRSk7CiB9CiAKIFZpc2libGVQb3NpdGlvbiBlbmRPZkxpbmUo
Y29uc3QgVmlzaWJsZVBvc2l0aW9uJiBjKQpAQCAtNTc1LDcgKzU3Miw3IEBAIFZpc2libGVQb3Np
dGlvbiBwcmV2aW91c0xpbmVQb3NpdGlvbihjb24KICAgICAvLyBNb3ZlIHRvIHRoZSBzdGFydCBv
ZiB0aGUgY29udGVudCBpbiB0aGlzIGJsb2NrLCB3aGljaCBlZmZlY3RpdmVseSBtb3ZlcyB1cwog
ICAgIC8vIHRvIHRoZSBzdGFydCBvZiB0aGUgbGluZSB3ZSdyZSBvbi4KICAgICBFbGVtZW50KiBy
b290RWxlbWVudCA9IG5vZGUtPmlzQ29udGVudEVkaXRhYmxlKCkgPyBub2RlLT5yb290RWRpdGFi
bGVFbGVtZW50KCkgOiBub2RlLT5kb2N1bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKTsKLSAgICBy
ZXR1cm4gVmlzaWJsZVBvc2l0aW9uKHJvb3RFbGVtZW50LCAwLCBET1dOU1RSRUFNKTsKKyAgICBy
ZXR1cm4gVmlzaWJsZVBvc2l0aW9uKGZpcnN0UG9zaXRpb25Jbk5vZGUocm9vdEVsZW1lbnQpLCBE
T1dOU1RSRUFNKTsKIH0KIAogc3RhdGljIE5vZGUqIG5leHRMZWFmV2l0aFNhbWVFZGl0YWJpbGl0
eShOb2RlKiBub2RlLCBpbnQgb2Zmc2V0KQpAQCAtNjgwLDcgKzY3Nyw3IEBAIFZpc2libGVQb3Np
dGlvbiBuZXh0TGluZVBvc2l0aW9uKGNvbnN0IFYKICAgICAvLyBNb3ZlIHRvIHRoZSBlbmQgb2Yg
dGhlIGNvbnRlbnQgaW4gdGhpcyBibG9jaywgd2hpY2ggZWZmZWN0aXZlbHkgbW92ZXMgdXMKICAg
ICAvLyB0byB0aGUgZW5kIG9mIHRoZSBsaW5lIHdlJ3JlIG9uLgogICAgIEVsZW1lbnQqIHJvb3RF
bGVtZW50ID0gbm9kZS0+aXNDb250ZW50RWRpdGFibGUoKSA/IG5vZGUtPnJvb3RFZGl0YWJsZUVs
ZW1lbnQoKSA6IG5vZGUtPmRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgpOwotICAgIHJldHVy
biBWaXNpYmxlUG9zaXRpb24ocm9vdEVsZW1lbnQsIHJvb3RFbGVtZW50ID8gcm9vdEVsZW1lbnQt
PmNoaWxkTm9kZUNvdW50KCkgOiAwLCBET1dOU1RSRUFNKTsKKyAgICByZXR1cm4gVmlzaWJsZVBv
c2l0aW9uKGxhc3RQb3NpdGlvbkluTm9kZShyb290RWxlbWVudCksIERPV05TVFJFQU0pOwogfQog
CiAvLyAtLS0tLS0tLS0KQEAgLTc1Miw2ICs3NDksNyBAQCBWaXNpYmxlUG9zaXRpb24gc3RhcnRP
ZlBhcmFncmFwaChjb25zdCBWCiAKICAgICBOb2RlICpub2RlID0gc3RhcnROb2RlOwogICAgIGlu
dCBvZmZzZXQgPSBwLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCk7CisgICAgUG9zaXRpb246OkFu
Y2hvclR5cGUgdHlwZSA9IHAuYW5jaG9yVHlwZSgpOwogCiAgICAgTm9kZSAqbiA9IHN0YXJ0Tm9k
ZTsKICAgICB3aGlsZSAobikgewpAQCAtNzcyLDYgKzc3MCw3IEBAIFZpc2libGVQb3NpdGlvbiBz
dGFydE9mUGFyYWdyYXBoKGNvbnN0IFYKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGlm
IChyLT5pc1RleHQoKSAmJiByLT5jYXJldE1heFJlbmRlcmVkT2Zmc2V0KCkgPiAwKSB7CisgICAg
ICAgICAgICB0eXBlID0gUG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvcjsKICAgICAg
ICAgICAgIGlmIChzdHlsZS0+cHJlc2VydmVOZXdsaW5lKCkpIHsKICAgICAgICAgICAgICAgICBj
b25zdCBVQ2hhciogY2hhcnMgPSB0b1JlbmRlclRleHQociktPmNoYXJhY3RlcnMoKTsKICAgICAg
ICAgICAgICAgICBpbnQgaSA9IHRvUmVuZGVyVGV4dChyKS0+dGV4dExlbmd0aCgpOwpAQCAtNzgw
LDIwICs3NzksMjMgQEAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0T2ZQYXJhZ3JhcGgoY29uc3QgVgog
ICAgICAgICAgICAgICAgICAgICBpID0gbWF4KDAsIG8pOwogICAgICAgICAgICAgICAgIHdoaWxl
ICgtLWkgPj0gMCkKICAgICAgICAgICAgICAgICAgICAgaWYgKGNoYXJzW2ldID09ICdcbicpCi0g
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKG4sIGkgKyAxLCBE
T1dOU1RSRUFNKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRp
b24oUG9zaXRpb24obiwgaSArIDEsIFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3Ip
LCBET1dOU1RSRUFNKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIG5vZGUgPSBuOwogICAg
ICAgICAgICAgb2Zmc2V0ID0gMDsKICAgICAgICAgICAgIG4gPSBuLT50cmF2ZXJzZVByZXZpb3Vz
Tm9kZVBvc3RPcmRlcihzdGFydEJsb2NrKTsKICAgICAgICAgfSBlbHNlIGlmIChlZGl0aW5nSWdu
b3Jlc0NvbnRlbnQobikgfHwgaXNUYWJsZUVsZW1lbnQobikpIHsKICAgICAgICAgICAgIG5vZGUg
PSBuOwotICAgICAgICAgICAgb2Zmc2V0ID0gMDsKKyAgICAgICAgICAgIHR5cGUgPSBQb3NpdGlv
bjo6UG9zaXRpb25Jc0JlZm9yZUFuY2hvcjsKICAgICAgICAgICAgIG4gPSBuLT5wcmV2aW91c1Np
YmxpbmcoKSA/IG4tPnByZXZpb3VzU2libGluZygpIDogbi0+dHJhdmVyc2VQcmV2aW91c05vZGVQ
b3N0T3JkZXIoc3RhcnRCbG9jayk7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgbiA9IG4t
PnRyYXZlcnNlUHJldmlvdXNOb2RlUG9zdE9yZGVyKHN0YXJ0QmxvY2spOwogICAgIH0KIAotICAg
IHJldHVybiBWaXNpYmxlUG9zaXRpb24obm9kZSwgb2Zmc2V0LCBET1dOU1RSRUFNKTsKKyAgICBp
ZiAodHlwZSA9PSBQb3NpdGlvbjo6UG9zaXRpb25Jc09mZnNldEluQW5jaG9yKQorICAgICAgICBy
ZXR1cm4gVmlzaWJsZVBvc2l0aW9uKFBvc2l0aW9uKG5vZGUsIG9mZnNldCwgdHlwZSksIERPV05T
VFJFQU0pOworICAgIAorICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oUG9zaXRpb24obm9kZSwg
dHlwZSksIERPV05TVFJFQU0pOwogfQogCiBWaXNpYmxlUG9zaXRpb24gZW5kT2ZQYXJhZ3JhcGgo
Y29uc3QgVmlzaWJsZVBvc2l0aW9uICZjLCBFZGl0aW5nQm91bmRhcnlDcm9zc2luZ1J1bGUgYm91
bmRhcnlDcm9zc2luZ1J1bGUpCkBAIC04MTIsNiArODE0LDcgQEAgVmlzaWJsZVBvc2l0aW9uIGVu
ZE9mUGFyYWdyYXBoKGNvbnN0IFZpcwogICAgIAogICAgIE5vZGUgKm5vZGUgPSBzdGFydE5vZGU7
CiAgICAgaW50IG9mZnNldCA9IHAuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKTsKKyAgICBQb3Np
dGlvbjo6QW5jaG9yVHlwZSB0eXBlID0gcC5hbmNob3JUeXBlKCk7CiAKICAgICBOb2RlICpuID0g
c3RhcnROb2RlOwogICAgIHdoaWxlIChuKSB7CkBAIC04MzQsMjUgKzgzNywyOSBAQCBWaXNpYmxl
UG9zaXRpb24gZW5kT2ZQYXJhZ3JhcGgoY29uc3QgVmlzCiAgICAgICAgIC8vIEZJWE1FOiBXZSBh
dm9pZCByZXR1cm5pbmcgYSBwb3NpdGlvbiB3aGVyZSB0aGUgcmVuZGVyZXIgY2FuJ3QgYWNjZXB0
IHRoZSBjYXJldC4KICAgICAgICAgaWYgKHItPmlzVGV4dCgpICYmIHItPmNhcmV0TWF4UmVuZGVy
ZWRPZmZzZXQoKSA+IDApIHsKICAgICAgICAgICAgIGludCBsZW5ndGggPSB0b1JlbmRlclRleHQo
ciktPnRleHRMZW5ndGgoKTsKKyAgICAgICAgICAgIHR5cGUgPSBQb3NpdGlvbjo6UG9zaXRpb25J
c09mZnNldEluQW5jaG9yOwogICAgICAgICAgICAgaWYgKHN0eWxlLT5wcmVzZXJ2ZU5ld2xpbmUo
KSkgewogICAgICAgICAgICAgICAgIGNvbnN0IFVDaGFyKiBjaGFycyA9IHRvUmVuZGVyVGV4dChy
KS0+Y2hhcmFjdGVycygpOwogICAgICAgICAgICAgICAgIGludCBvID0gbiA9PSBzdGFydE5vZGUg
PyBvZmZzZXQgOiAwOwogICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSBvOyBpIDwgbGVuZ3Ro
OyArK2kpCiAgICAgICAgICAgICAgICAgICAgIGlmIChjaGFyc1tpXSA9PSAnXG4nKQotICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihuLCBpLCBET1dOU1RSRUFN
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oUG9zaXRp
b24obiwgaSwgUG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvciksIERPV05TVFJFQU0p
OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbm9kZSA9IG47CiAgICAgICAgICAgICBvZmZz
ZXQgPSByLT5jYXJldE1heE9mZnNldCgpOwogICAgICAgICAgICAgbiA9IG4tPnRyYXZlcnNlTmV4
dE5vZGUoc3RheUluc2lkZUJsb2NrKTsKICAgICAgICAgfSBlbHNlIGlmIChlZGl0aW5nSWdub3Jl
c0NvbnRlbnQobikgfHwgaXNUYWJsZUVsZW1lbnQobikpIHsKICAgICAgICAgICAgIG5vZGUgPSBu
OwotICAgICAgICAgICAgb2Zmc2V0ID0gbGFzdE9mZnNldEZvckVkaXRpbmcobik7CisgICAgICAg
ICAgICB0eXBlID0gUG9zaXRpb246OlBvc2l0aW9uSXNBZnRlckFuY2hvcjsKICAgICAgICAgICAg
IG4gPSBuLT50cmF2ZXJzZU5leHRTaWJsaW5nKHN0YXlJbnNpZGVCbG9jayk7CiAgICAgICAgIH0g
ZWxzZQogICAgICAgICAgICAgbiA9IG4tPnRyYXZlcnNlTmV4dE5vZGUoc3RheUluc2lkZUJsb2Nr
KTsKICAgICB9CiAKLSAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKG5vZGUsIG9mZnNldCwgRE9X
TlNUUkVBTSk7CisgICAgaWYgKHR5cGUgPT0gUG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFu
Y2hvcikKKyAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihQb3NpdGlvbihub2RlLCBvZmZz
ZXQsIHR5cGUpLCBET1dOU1RSRUFNKTsKKworICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oUG9z
aXRpb24obm9kZSwgdHlwZSksIERPV05TVFJFQU0pOwogfQogCiBWaXNpYmxlUG9zaXRpb24gc3Rh
cnRPZk5leHRQYXJhZ3JhcGgoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2aXNpYmxlUG9zaXRpb24p
CkBAIC05MjYsNyArOTMzLDcgQEAgVmlzaWJsZVBvc2l0aW9uIGVuZE9mQmxvY2soY29uc3QgVmlz
aWJsZQogCiAgICAgTm9kZSAqc3RhcnRCbG9jayA9IHN0YXJ0Tm9kZS0+ZW5jbG9zaW5nQmxvY2tG
bG93RWxlbWVudCgpOwogICAgIAotICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oc3RhcnRCbG9j
aywgc3RhcnRCbG9jay0+Y2hpbGROb2RlQ291bnQoKSwgVlBfREVGQVVMVF9BRkZJTklUWSk7ICAg
CisgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihsYXN0UG9zaXRpb25Jbk5vZGUoc3RhcnRCbG9j
ayksIFZQX0RFRkFVTFRfQUZGSU5JVFkpOyAgIAogfQogCiBib29sIGluU2FtZUJsb2NrKGNvbnN0
IFZpc2libGVQb3NpdGlvbiAmYSwgY29uc3QgVmlzaWJsZVBvc2l0aW9uICZiKQpAQCAtOTUxLDcg
Kzk1OCw3IEBAIFZpc2libGVQb3NpdGlvbiBzdGFydE9mRG9jdW1lbnQoY29uc3QgTm8KICAgICBp
ZiAoIW5vZGUpCiAgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oKTsKICAgICAKLSAgICBy
ZXR1cm4gVmlzaWJsZVBvc2l0aW9uKG5vZGUtPmRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgp
LCAwLCBET1dOU1RSRUFNKTsKKyAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKGZpcnN0UG9zaXRp
b25Jbk5vZGUobm9kZS0+ZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCkpLCBET1dOU1RSRUFN
KTsKIH0KIAogVmlzaWJsZVBvc2l0aW9uIHN0YXJ0T2ZEb2N1bWVudChjb25zdCBWaXNpYmxlUG9z
aXRpb24gJmMpCkBAIC05NjUsNyArOTcyLDcgQEAgVmlzaWJsZVBvc2l0aW9uIGVuZE9mRG9jdW1l
bnQoY29uc3QgTm9kZQogICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKCk7CiAgICAgCiAg
ICAgRWxlbWVudCogZG9jID0gbm9kZS0+ZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCk7Ci0g
ICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihkb2MsIGRvYy0+Y2hpbGROb2RlQ291bnQoKSwgRE9X
TlNUUkVBTSk7CisgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihsYXN0UG9zaXRpb25Jbk5vZGUo
ZG9jKSwgRE9XTlNUUkVBTSk7CiB9CiAKIFZpc2libGVQb3NpdGlvbiBlbmRPZkRvY3VtZW50KGNv
bnN0IFZpc2libGVQb3NpdGlvbiAmYykKQEAgLTExMjEsOSArMTEyOCw4IEBAIHN0YXRpYyBWaXNp
YmxlUG9zaXRpb24gbG9naWNhbFN0YXJ0UG9zaXQKICAgICBpZiAoIWxvZ2ljYWxTdGFydE5vZGUp
CiAgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oKTsKIAotICAgIGludCBzdGFydE9mZnNl
dCA9IGxvZ2ljYWxTdGFydEJveC0+Y2FyZXRNaW5PZmZzZXQoKTsKLSAgCi0gICAgVmlzaWJsZVBv
c2l0aW9uIHZpc1BvcyA9IFZpc2libGVQb3NpdGlvbihsb2dpY2FsU3RhcnROb2RlLCBzdGFydE9m
ZnNldCwgRE9XTlNUUkVBTSk7CisgICAgVmlzaWJsZVBvc2l0aW9uIHZpc1BvcyA9IGxvZ2ljYWxT
dGFydE5vZGUtPmlzVGV4dE5vZGUoKSA/IFZpc2libGVQb3NpdGlvbihQb3NpdGlvbihsb2dpY2Fs
U3RhcnROb2RlLCBsb2dpY2FsU3RhcnRCb3gtPmNhcmV0TWluT2Zmc2V0KCksIFBvc2l0aW9uOjpQ
b3NpdGlvbklzT2Zmc2V0SW5BbmNob3IpLCBET1dOU1RSRUFNKQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBWaXNpYmxlUG9zaXRp
b24ocG9zaXRpb25CZWZvcmVOb2RlKGxvZ2ljYWxTdGFydE5vZGUpLCBET1dOU1RSRUFNKTsKICAg
ICByZXR1cm4gcG9zaXRpb25Bdm9pZGluZ0ZpcnN0UG9zaXRpb25JblRhYmxlKHZpc1Bvcyk7CiB9
CiAKQEAgLTExNTcsMTcgKzExNjMsMTkgQEAgc3RhdGljIFZpc2libGVQb3NpdGlvbiBsb2dpY2Fs
RW5kUG9zaXRpbwogICAgIGlmICghbG9naWNhbEVuZE5vZGUpCiAgICAgICAgIHJldHVybiBWaXNp
YmxlUG9zaXRpb24oKTsKICAgICAKLSAgICBpbnQgZW5kT2Zmc2V0ID0gMTsKKyAgICBQb3NpdGlv
biBwb3M7CiAgICAgaWYgKGxvZ2ljYWxFbmROb2RlLT5oYXNUYWdOYW1lKGJyVGFnKSkKLSAgICAg
ICAgZW5kT2Zmc2V0ID0gMDsKKyAgICAgICAgcG9zID0gcG9zaXRpb25CZWZvcmVOb2RlKGxvZ2lj
YWxFbmROb2RlKTsKICAgICBlbHNlIGlmIChsb2dpY2FsRW5kQm94LT5pc0lubGluZVRleHRCb3go
KSkgewogICAgICAgICBJbmxpbmVUZXh0Qm94KiBlbmRUZXh0Qm94ID0gc3RhdGljX2Nhc3Q8SW5s
aW5lVGV4dEJveCo+KGxvZ2ljYWxFbmRCb3gpOwotICAgICAgICBlbmRPZmZzZXQgPSBlbmRUZXh0
Qm94LT5zdGFydCgpOworICAgICAgICBpbnQgZW5kT2Zmc2V0ID0gZW5kVGV4dEJveC0+c3RhcnQo
KTsKICAgICAgICAgaWYgKCFlbmRUZXh0Qm94LT5pc0xpbmVCcmVhaygpKQogICAgICAgICAgICAg
ZW5kT2Zmc2V0ICs9IGVuZFRleHRCb3gtPmxlbigpOwotICAgIH0KKyAgICAgICAgcG9zID0gUG9z
aXRpb24obG9naWNhbEVuZE5vZGUsIGVuZE9mZnNldCwgUG9zaXRpb246OlBvc2l0aW9uSXNPZmZz
ZXRJbkFuY2hvcik7CisgICAgfSBlbHNlCisgICAgICAgIHBvcyA9IHBvc2l0aW9uQWZ0ZXJOb2Rl
KGxvZ2ljYWxFbmROb2RlKTsKICAgICAKLSAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKGxvZ2lj
YWxFbmROb2RlLCBlbmRPZmZzZXQsIFZQX1VQU1RSRUFNX0lGX1BPU1NJQkxFKTsKKyAgICByZXR1
cm4gVmlzaWJsZVBvc2l0aW9uKHBvcywgVlBfVVBTVFJFQU1fSUZfUE9TU0lCTEUpOwogfQogCiBi
b29sIGluU2FtZUxvZ2ljYWxMaW5lKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgYSwgY29uc3QgVmlz
aWJsZVBvc2l0aW9uJiBiKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9ET01TZWxlY3Rpb24u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NU2VsZWN0aW9uLmNwcAko
cmV2aXNpb24gNzc4NTApCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVNlbGVjdGlvbi5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTIxMSw3ICsyMTEsOCBAQCB2b2lkIERPTVNlbGVjdGlvbjo6Y29s
bGFwc2UoTm9kZSogbm9kZSwgCiAgICAgaWYgKCFpc1ZhbGlkRm9yUG9zaXRpb24obm9kZSkpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIG1fZnJhbWUtPnNlbGVjdGlvbigpLT5tb3ZlVG8oVmlzaWJs
ZVBvc2l0aW9uKG5vZGUsIG9mZnNldCwgRE9XTlNUUkVBTSkpOworICAgIC8vIEZJWE1FOiBFbGlt
aW5hdGUgbGVnYWN5IGVkaXRpbmcgcG9zaXRpb25zCisgICAgbV9mcmFtZS0+c2VsZWN0aW9uKCkt
Pm1vdmVUbyhWaXNpYmxlUG9zaXRpb24oUG9zaXRpb24obm9kZSwgb2Zmc2V0KSwgRE9XTlNUUkVB
TSkpOwogfQogCiB2b2lkIERPTVNlbGVjdGlvbjo6Y29sbGFwc2VUb0VuZChFeGNlcHRpb25Db2Rl
JiBlYykKQEAgLTI2NCw4ICsyNjUsOSBAQCB2b2lkIERPTVNlbGVjdGlvbjo6c2V0QmFzZUFuZEV4
dGVudChOb2RlCiAgICAgaWYgKCFpc1ZhbGlkRm9yUG9zaXRpb24oYmFzZU5vZGUpIHx8ICFpc1Zh
bGlkRm9yUG9zaXRpb24oZXh0ZW50Tm9kZSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFZpc2li
bGVQb3NpdGlvbiB2aXNpYmxlQmFzZSA9IFZpc2libGVQb3NpdGlvbihiYXNlTm9kZSwgYmFzZU9m
ZnNldCwgRE9XTlNUUkVBTSk7Ci0gICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVFeHRlbnQgPSBW
aXNpYmxlUG9zaXRpb24oZXh0ZW50Tm9kZSwgZXh0ZW50T2Zmc2V0LCBET1dOU1RSRUFNKTsKKyAg
ICAvLyBGSVhNRTogRWxpbWluYXRlIGxlZ2FjeSBlZGl0aW5nIHBvc2l0aW9ucworICAgIFZpc2li
bGVQb3NpdGlvbiB2aXNpYmxlQmFzZSA9IFZpc2libGVQb3NpdGlvbihQb3NpdGlvbihiYXNlTm9k
ZSwgYmFzZU9mZnNldCksIERPV05TVFJFQU0pOworICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxl
RXh0ZW50ID0gVmlzaWJsZVBvc2l0aW9uKFBvc2l0aW9uKGV4dGVudE5vZGUsIGV4dGVudE9mZnNl
dCksIERPV05TVFJFQU0pOwogCiAgICAgbV9mcmFtZS0+c2VsZWN0aW9uKCktPm1vdmVUbyh2aXNp
YmxlQmFzZSwgdmlzaWJsZUV4dGVudCk7CiB9CkBAIC0yODIsNyArMjg0LDggQEAgdm9pZCBET01T
ZWxlY3Rpb246OnNldFBvc2l0aW9uKE5vZGUqIG5vZAogICAgIGlmICghaXNWYWxpZEZvclBvc2l0
aW9uKG5vZGUpKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+
bW92ZVRvKFZpc2libGVQb3NpdGlvbihub2RlLCBvZmZzZXQsIERPV05TVFJFQU0pKTsKKyAgICAv
LyBGSVhNRTogRWxpbWluYXRlIGxlZ2FjeSBlZGl0aW5nIHBvc2l0aW9ucworICAgIG1fZnJhbWUt
PnNlbGVjdGlvbigpLT5tb3ZlVG8oVmlzaWJsZVBvc2l0aW9uKFBvc2l0aW9uKG5vZGUsIG9mZnNl
dCksIERPV05TVFJFQU0pKTsKIH0KIAogdm9pZCBET01TZWxlY3Rpb246Om1vZGlmeShjb25zdCBT
dHJpbmcmIGFsdGVyU3RyaW5nLCBjb25zdCBTdHJpbmcmIGRpcmVjdGlvblN0cmluZywgY29uc3Qg
U3RyaW5nJiBncmFudWxhcml0eVN0cmluZykKQEAgLTM1Myw3ICszNTYsOCBAQCB2b2lkIERPTVNl
bGVjdGlvbjo6ZXh0ZW5kKE5vZGUqIG5vZGUsIGluCiAgICAgaWYgKCFpc1ZhbGlkRm9yUG9zaXRp
b24obm9kZSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fZnJhbWUtPnNlbGVjdGlvbigpLT5z
ZXRFeHRlbnQoVmlzaWJsZVBvc2l0aW9uKG5vZGUsIG9mZnNldCwgRE9XTlNUUkVBTSkpOworICAg
IC8vIEZJWE1FOiBFbGltaW5hdGUgbGVnYWN5IGVkaXRpbmcgcG9zaXRpb25zCisgICAgbV9mcmFt
ZS0+c2VsZWN0aW9uKCktPnNldEV4dGVudChWaXNpYmxlUG9zaXRpb24oUG9zaXRpb24obm9kZSwg
b2Zmc2V0KSwgRE9XTlNUUkVBTSkpOwogfQogCiBQYXNzUmVmUHRyPFJhbmdlPiBET01TZWxlY3Rp
b246OmdldFJhbmdlQXQoaW50IGluZGV4LCBFeGNlcHRpb25Db2RlJiBlYykKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAJKHJldmlzaW9uIDc3ODUwKQorKysgU291cmNlL1dl
YkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNzMsNyArMzcz
LDcgQEAgYm9vbCBFdmVudEhhbmRsZXI6OmhhbmRsZU1vdXNlUHJlc3NFdmVudAogCiAgICAgVmlz
aWJsZVBvc2l0aW9uIHZpc2libGVQb3MoaW5uZXJOb2RlLT5yZW5kZXJlcigpLT5wb3NpdGlvbkZv
clBvaW50KGV2ZW50LmxvY2FsUG9pbnQoKSkpOwogICAgIGlmICh2aXNpYmxlUG9zLmlzTnVsbCgp
KQotICAgICAgICB2aXNpYmxlUG9zID0gVmlzaWJsZVBvc2l0aW9uKGlubmVyTm9kZSwgMCwgRE9X
TlNUUkVBTSk7CisgICAgICAgIHZpc2libGVQb3MgPSBWaXNpYmxlUG9zaXRpb24oZmlyc3RQb3Np
dGlvbkluT3JCZWZvcmVOb2RlKGlubmVyTm9kZSksIERPV05TVFJFQU0pOwogICAgIFBvc2l0aW9u
IHBvcyA9IHZpc2libGVQb3MuZGVlcEVxdWl2YWxlbnQoKTsKICAgICAKICAgICBWaXNpYmxlU2Vs
ZWN0aW9uIG5ld1NlbGVjdGlvbiA9IG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCShyZXZpc2lv
biA3Nzg1MCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yNjU0LDcgKzI2NTQsOCBAQCBWaXNpYmxlUG9zaXRpb24gUmVuZGVy
T2JqZWN0OjpjcmVhdGVWaXNpCiAgICAgICAgICAgICBpZiAoY2FuZGlkYXRlLm5vZGUoKS0+aXND
b250ZW50RWRpdGFibGUoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9u
KGNhbmRpZGF0ZSwgYWZmaW5pdHkpOwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBWaXNpYmxl
UG9zaXRpb24obm9kZSwgb2Zmc2V0LCBhZmZpbml0eSk7CisgICAgICAgIC8vIEZJWE1FOiBFbGlt
aW5hdGUgbGVnYWN5IGVkaXRpbmcgcG9zaXRpb25zCisgICAgICAgIHJldHVybiBWaXNpYmxlUG9z
aXRpb24oUG9zaXRpb24obm9kZSwgb2Zmc2V0KSwgYWZmaW5pdHkpOwogICAgIH0KIAogICAgIC8v
IFdlIGRvbid0IHdhbnQgdG8gY3Jvc3MgdGhlIGJvdW5kYXJ5IGJldHdlZW4gZWRpdGFibGUgYW5k
IG5vbi1lZGl0YWJsZQpAQCAtMjY2OSw3ICsyNjcwLDcgQEAgVmlzaWJsZVBvc2l0aW9uIFJlbmRl
ck9iamVjdDo6Y3JlYXRlVmlzaQogICAgICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gY2hp
bGQ7CiAgICAgICAgIHdoaWxlICgocmVuZGVyZXIgPSByZW5kZXJlci0+bmV4dEluUHJlT3JkZXIo
cGFyZW50KSkpIHsKICAgICAgICAgICAgIGlmIChOb2RlKiBub2RlID0gcmVuZGVyZXItPm5vZGUo
KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKG5vZGUsIDAsIERPV05T
VFJFQU0pOworICAgICAgICAgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oZmlyc3RQb3Np
dGlvbkluT3JCZWZvcmVOb2RlKG5vZGUpLCBET1dOU1RSRUFNKTsKICAgICAgICAgfQogCiAgICAg
ICAgIC8vIEZpbmQgbm9uLWFub255bW91cyBjb250ZW50IGJlZm9yZS4KQEAgLTI2NzgsMTIgKzI2
NzksMTIgQEAgVmlzaWJsZVBvc2l0aW9uIFJlbmRlck9iamVjdDo6Y3JlYXRlVmlzaQogICAgICAg
ICAgICAgaWYgKHJlbmRlcmVyID09IHBhcmVudCkKICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIGlmIChOb2RlKiBub2RlID0gcmVuZGVyZXItPm5vZGUoKSkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKGxhc3REZWVwRWRpdGluZ1Bvc2l0aW9uRm9yTm9k
ZShub2RlKSwgRE9XTlNUUkVBTSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIFZpc2libGVQb3Np
dGlvbihsYXN0UG9zaXRpb25Jbk9yQWZ0ZXJOb2RlKG5vZGUpLCBET1dOU1RSRUFNKTsKICAgICAg
ICAgfQogCiAgICAgICAgIC8vIFVzZSB0aGUgcGFyZW50IGl0c2VsZiB1bmxlc3MgaXQgdG9vIGlz
IGFub255bW91cy4KICAgICAgICAgaWYgKE5vZGUqIG5vZGUgPSBwYXJlbnQtPm5vZGUoKSkKLSAg
ICAgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24obm9kZSwgMCwgRE9XTlNUUkVBTSk7Cisg
ICAgICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKGZpcnN0UG9zaXRpb25Jbk9yQmVmb3Jl
Tm9kZShub2RlKSwgRE9XTlNUUkVBTSk7CiAKICAgICAgICAgLy8gUmVwZWF0IGF0IHRoZSBuZXh0
IGxldmVsIHVwLgogICAgICAgICBjaGlsZCA9IHBhcmVudDsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmNwcAkocmV2aXNpb24gNzc4NTApCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMjEsNyArMzIxLDcgQEAgUGFzc1JlZlB0cjxSYW5nZT4gUmVuZGVyVGV4dENv
bnRyb2w6OnNlbAogVmlzaWJsZVBvc2l0aW9uIFJlbmRlclRleHRDb250cm9sOjp2aXNpYmxlUG9z
aXRpb25Gb3JJbmRleChpbnQgaW5kZXgpIGNvbnN0CiB7CiAgICAgaWYgKGluZGV4IDw9IDApCi0g
ICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24obV9pbm5lclRleHQuZ2V0KCksIDAsIERPV05T
VFJFQU0pOworICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKFBvc2l0aW9uKG1faW5uZXJU
ZXh0LmdldCgpLCAwLCBQb3NpdGlvbjo6UG9zaXRpb25Jc09mZnNldEluQW5jaG9yKSwgRE9XTlNU
UkVBTSk7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgUmVmUHRyPFJhbmdlPiByYW5n
ZSA9IFJhbmdlOjpjcmVhdGUoZG9jdW1lbnQoKSk7CiAgICAgcmFuZ2UtPnNlbGVjdE5vZGVDb250
ZW50cyhtX2lubmVyVGV4dC5nZXQoKSwgZWMpOwpAQCAtMzMyLDcgKzMzMiw3IEBAIFZpc2libGVQ
b3NpdGlvbiBSZW5kZXJUZXh0Q29udHJvbDo6dmlzaWIKICAgICBBU1NFUlQoIWVjKTsKICAgICBp
bnQgZW5kT2Zmc2V0ID0gaXQucmFuZ2UoKS0+ZW5kT2Zmc2V0KGVjKTsKICAgICBBU1NFUlQoIWVj
KTsKLSAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKGVuZENvbnRhaW5lciwgZW5kT2Zmc2V0LCBV
UFNUUkVBTSk7CisgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihQb3NpdGlvbihlbmRDb250YWlu
ZXIsIGVuZE9mZnNldCwgUG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvciksIFVQU1RS
RUFNKTsKIH0KIAogaW50IFJlbmRlclRleHRDb250cm9sOjppbmRleEZvclZpc2libGVQb3NpdGlv
bihjb25zdCBWaXNpYmxlUG9zaXRpb24mIHBvcykgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdUZXh0Q29udGVudEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdUZXh0Q29udGVudEVsZW1lbnQuY3BwCShyZXZpc2lvbiA3Nzg1MCkKKysrIFNv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdUZXh0Q29udGVudEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xNDUsNyArMTQ1LDcgQEAgdm9pZCBTVkdUZXh0Q29udGVudEVsZW1lbnQ6OnNlbGVjdFN1
YlN0cgogICAgICAgICByZXR1cm47CiAKICAgICAvLyBGaW5kIHNlbGVjdGlvbiBzdGFydAotICAg
IFZpc2libGVQb3NpdGlvbiBzdGFydChjb25zdF9jYXN0PFNWR1RleHRDb250ZW50RWxlbWVudCo+
KHRoaXMpLCAwLCBTRUxfREVGQVVMVF9BRkZJTklUWSk7CisgICAgVmlzaWJsZVBvc2l0aW9uIHN0
YXJ0KGZpcnN0UG9zaXRpb25Jbk5vZGUoY29uc3RfY2FzdDxTVkdUZXh0Q29udGVudEVsZW1lbnQq
Pih0aGlzKSkpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjaGFybnVtOyArK2kpCiAg
ICAgICAgIHN0YXJ0ID0gc3RhcnQubmV4dCgpOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9D
aGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCShyZXZp
c2lvbiA3Nzg1MCkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwkod29ya2luZyBjb3B5
KQpAQCAtMSwzICsxLDE5IEBACisyMDExLTAyLTA0ICBMZXZpIFdlaW50cmF1YiAgPGxldml3QGNo
cm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBTdG9wIGluc3RhbnRpYXRpbmcgbGVnYWN5IGVkaXRpbmcgUG9zaXRpb25zIGluIFZpc2li
bGVQb3NpdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NTI5MTkKKworICAgICAgICBDaGFuZ2luZyB1c2FnZSBvZiBsZWdhY3kgVmlzaWJsZVBvc2l0
aW9uIGNvbnN0cnVjdG9yLiBTaW5jZSB3ZSB3ZXJlIGRlYWxpbmcKKyAgICAgICAgd2l0aCBwb3Np
dGlvbnMgZnJvbSBET00gUmFuZ2VzLCB3ZSdyZSBndWFyYW50ZWVkIGEgcGFyZW50LWFuY2hvcmVk
IHBvc2l0aW9uLgorCisgICAgICAgICogV2ViVmlldy9XZWJGcmFtZS5tbToKKyAgICAgICAgKC1b
V2ViRnJhbWUgX2NhcmV0UmVjdEF0UG9zaXRpb246YWZmaW5pdHk6XSk6CisgICAgICAgICogV2Vi
Vmlldy9XZWJGcmFtZUludGVybmFsLmg6CisgICAgICAgICogV2ViVmlldy9XZWJUZXh0Q29tcGxl
dGlvbkNvbnRyb2xsZXIubW06CisgICAgICAgICgtW1dlYlRleHRDb21wbGV0aW9uQ29udHJvbGxl
ciBkb0NvbXBsZXRpb25dKToKKwogMjAxMS0wMi0wMyAgWXVyeSBTZW1pa2hhdHNreSAgPHl1cnlz
QGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBQYXZlbCBGZWxkbWFuLgpJbmRl
eDogU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCShyZXZpc2lvbiA3Nzg1MCkKKysr
IFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0JKHdvcmtpbmcgY29weSkKQEAg
LTY2MCw5ICs2NjAsOSBAQCAtIChOU1N0cmluZyAqKV9zdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2Ny
CiAgICAgcmV0dXJuIHVzdHJpbmdUb1N0cmluZyhyZXN1bHQudG9TdHJpbmcoX3ByaXZhdGUtPmNv
cmVGcmFtZS0+c2NyaXB0KCktPmdsb2JhbE9iamVjdChtYWluVGhyZWFkTm9ybWFsV29ybGQoKSkt
Pmdsb2JhbEV4ZWMoKSkpOwogfQogCi0tIChOU1JlY3QpX2NhcmV0UmVjdEF0Tm9kZTooRE9NTm9k
ZSAqKW5vZGUgb2Zmc2V0OihpbnQpb2Zmc2V0IGFmZmluaXR5OihOU1NlbGVjdGlvbkFmZmluaXR5
KWFmZmluaXR5CistIChOU1JlY3QpX2NhcmV0UmVjdEF0UG9zaXRpb246KGNvbnN0IFBvc2l0aW9u
Jilwb3MgYWZmaW5pdHk6KE5TU2VsZWN0aW9uQWZmaW5pdHkpYWZmaW5pdHkKIHsKLSAgICBWaXNp
YmxlUG9zaXRpb24gdmlzaWJsZVBvc2l0aW9uKGNvcmUobm9kZSksIG9mZnNldCwgc3RhdGljX2Nh
c3Q8RUFmZmluaXR5PihhZmZpbml0eSkpOworICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9z
aXRpb24ocG9zLCBzdGF0aWNfY2FzdDxFQWZmaW5pdHk+KGFmZmluaXR5KSk7CiAgICAgcmV0dXJu
IHZpc2libGVQb3NpdGlvbi5hYnNvbHV0ZUNhcmV0Qm91bmRzKCk7CiB9CiAKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWVJbnRlcm5hbC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWVJbnRlcm5hbC5oCShyZXZpc2lvbiA3Nzg1
MCkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWVJbnRlcm5hbC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAjaW1wb3J0ICJXZWJQcmVmZXJlbmNlc1ByaXZh
dGUuaCIKICNpbXBvcnQgPFdlYkNvcmUvRWRpdEFjdGlvbi5oPgogI2ltcG9ydCA8V2ViQ29yZS9G
cmFtZUxvYWRlclR5cGVzLmg+CisjaW1wb3J0IDxXZWJDb3JlL1Bvc2l0aW9uLmg+CiAjaW1wb3J0
IDxXZWJDb3JlL1NlbGVjdGlvbkNvbnRyb2xsZXIuaD4KICNpbXBvcnQgPFdlYkNvcmUvU2V0dGlu
Z3MuaD4KIApAQCAtMTM0LDcgKzEzNSw3IEBAIEBpbnRlcmZhY2UgV2ViRnJhbWUgKFdlYkludGVy
bmFsKQogCiAtIChOU1N0cmluZyAqKV9tYXJrdXBTdHJpbmdGcm9tUmFuZ2U6KERPTVJhbmdlICop
cmFuZ2Ugbm9kZXM6KE5TQXJyYXkgKiopbm9kZXM7CiAKLS0gKE5TUmVjdClfY2FyZXRSZWN0QXRO
b2RlOihET01Ob2RlICopbm9kZSBvZmZzZXQ6KGludClvZmZzZXQgYWZmaW5pdHk6KE5TU2VsZWN0
aW9uQWZmaW5pdHkpYWZmaW5pdHk7CistIChOU1JlY3QpX2NhcmV0UmVjdEF0UG9zaXRpb246KGNv
bnN0IFdlYkNvcmU6OlBvc2l0aW9uJilwb3MgYWZmaW5pdHk6KE5TU2VsZWN0aW9uQWZmaW5pdHkp
YWZmaW5pdHk7CiAtIChOU1JlY3QpX2ZpcnN0UmVjdEZvckRPTVJhbmdlOihET01SYW5nZSAqKXJh
bmdlOwogLSAodm9pZClfc2Nyb2xsRE9NUmFuZ2VUb1Zpc2libGU6KERPTVJhbmdlICopcmFuZ2U7
CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVGV4dENvbXBsZXRpb25Db250
cm9sbGVyLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVGV4
dENvbXBsZXRpb25Db250cm9sbGVyLm1tCShyZXZpc2lvbiA3Nzg1MCkKKysrIFNvdXJjZS9XZWJL
aXQvbWFjL1dlYlZpZXcvV2ViVGV4dENvbXBsZXRpb25Db250cm9sbGVyLm1tCSh3b3JraW5nIGNv
cHkpCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpbXBvcnQgIldlYlRleHRDb21wbGV0aW9uQ29udHJv
bGxlci5oIgogCisjaW1wb3J0ICJET01Ob2RlSW50ZXJuYWwuaCIKICNpbXBvcnQgIkRPTVJhbmdl
SW50ZXJuYWwuaCIKICNpbXBvcnQgIldlYkZyYW1lSW50ZXJuYWwuaCIKICNpbXBvcnQgIldlYkhU
TUxWaWV3SW50ZXJuYWwuaCIKQEAgLTIwMyw3ICsyMDQsNyBAQCAtICh2b2lkKWRvQ29tcGxldGlv
bgogICAgICAgICAgICAgQVNTRVJUKCFfb3JpZ2luYWxTdHJpbmcpOyAgICAgICAvLyB0aGlzIHNo
b3VsZCBvbmx5IGJlIHNldCBJRkYgd2UgaGF2ZSBhIHBvcHVwIHdpbmRvdwogICAgICAgICAgICAg
X29yaWdpbmFsU3RyaW5nID0gW1tmcmFtZSBfc3RyaW5nRm9yUmFuZ2U6c2VsZWN0aW9uXSByZXRh
aW5dOwogICAgICAgICAgICAgW3NlbGYgX2J1aWxkVUldOwotICAgICAgICAgICAgTlNSZWN0IHdv
cmRSZWN0ID0gW2ZyYW1lIF9jYXJldFJlY3RBdE5vZGU6W3dob2xlV29yZCBzdGFydENvbnRhaW5l
cl0gb2Zmc2V0Olt3aG9sZVdvcmQgc3RhcnRPZmZzZXRdIGFmZmluaXR5Ok5TU2VsZWN0aW9uQWZm
aW5pdHlEb3duc3RyZWFtXTsKKyAgICAgICAgICAgIE5TUmVjdCB3b3JkUmVjdCA9IFtmcmFtZSBf
Y2FyZXRSZWN0QXRQb3NpdGlvbjpQb3NpdGlvbihjb3JlKFt3aG9sZVdvcmQgc3RhcnRDb250YWlu
ZXJdKSwgW3dob2xlV29yZCBzdGFydE9mZnNldF0sIFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0
SW5BbmNob3IpIGFmZmluaXR5Ok5TU2VsZWN0aW9uQWZmaW5pdHlEb3duc3RyZWFtXTsKICAgICAg
ICAgICAgIC8vICsxIHRvIGJlIHVuZGVyIHRoZSB3b3JkLCBub3QgdGhlIGNhcmV0CiAgICAgICAg
ICAgICAvLyBGSVhNRSAtIDM3Njk2NTIgLSBXcm9uZyBwb3NpdGlvbmluZyBmb3IgcmlnaHQgdG8g
bGVmdCBsYW5ndWFnZXMuICBXZSBzaG91bGQgbGluZSB1cCB0aGUgdXBwZXIKICAgICAgICAgICAg
IC8vIHJpZ2h0IGNvcm5lciB3aXRoIHRoZSBjYXJldCBpbnN0ZWFkIG9mIHVwcGVyIGxlZnQsIGFu
ZCB0aGUgKzEgd291bGQgYmUgYSAtMS4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>81769</attachid>
            <date>2011-02-09 01:28:48 -0800</date>
            <delta_ts>2011-02-09 17:33:45 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-52919-20110209012847.patch</filename>
            <type>text/plain</type>
            <size>45056</size>
            <attacher name="Levi Weintraub">leviw</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc4MDI3KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsODggQEAKKzIwMTEtMDItMDggIExldmkgV2Vp
bnRyYXViICA8bGV2aXdAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFN0b3AgaW5zdGFudGlhdGluZyBsZWdhY3kgZWRpdGluZyBQ
b3NpdGlvbnMgaW4gVmlzaWJsZVBvc2l0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD01MjkxOQorCisgICAgICAgIENoYW5naW5nIFZpc2libGVQb3Np
dGlvbiBjb21wbGV0ZWx5IGF3YXkgZnJvbSBsZWdhY3kgcG9zaXRpb25zLgorCisgICAgICAgIE5v
IG5ldyB0ZXN0cyBzaW5jZSB0aGlzIGlzIGZ1bmN0aW9uYWx5IGVxdWl2YWxlbnQuCisKKyAgICAg
ICAgKiBXZWJDb3JlLmV4cC5pbjogUmVtb3ZpbmcgdGhlIGxlZ2FjeSBWaXNpYmxlUG9zaXRpb24g
Y29uc3RydWN0b3IgYW5kCisgICAgICAgIGFkZGluZyB0aGUgUG9zaXRpb25Jc09mZnNldEluQW5j
aG9yIHN5bWJvbC4gSWYgd2UgbXVzdCBjcmVhdGUgVmlzaWJsZVBvc2l0aW9ucworICAgICAgICBv
dXRzaWRlIG9mIFdlYkNvcmUsIHRoZXkgc2hvdWxkIGJlIHBhcmVudCBhbmNob3JlZC4KKyAgICAg
ICAgKiBhY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
QVhPYmplY3RDYWNoZTo6dmlzaWJsZVBvc2l0aW9uRm9yVGV4dE1hcmtlckRhdGEpOgorICAgICAg
ICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpzdGFydE9mU3R5bGVSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjplbmRPZlN0eWxlUmFu
Z2UpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojp2aXNpYmxl
UG9zaXRpb25Gb3JJbmRleCk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9ndGsvQWNjZXNzaWJp
bGl0eU9iamVjdFdyYXBwZXJBdGsuY3BwOgorICAgICAgICAob2JqZWN0QW5kT2Zmc2V0VW5pZ25v
cmVkKToKKyAgICAgICAgKiBkb20vUG9zaXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UG9z
aXRpb246OnVwc3RyZWFtKTogRml4ZWQgdG8gY29ycmVjdGx5IHJlc3BlY3QgUG9zaXRpb25Jc0Fm
dGVyQW5jaG9yCisgICAgICAgIChXZWJDb3JlOjpQb3NpdGlvbjo6ZG93bnN0cmVhbSk6IGRpdHRv
CisgICAgICAgICogZG9tL1JhbmdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlOjplZGl0
aW5nU3RhcnRQb3NpdGlvbik6CisgICAgICAgICogZWRpdGluZy9FZGl0b3IuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6RWRpdG9yOjpjYW5EZWxldGVSYW5nZSk6CisgICAgICAgICogZWRpdGluZy9S
ZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXBsYWNlU2Vs
ZWN0aW9uQ29tbWFuZDo6ZG9BcHBseSk6CisgICAgICAgICogZWRpdGluZy9TZWxlY3Rpb25Db250
cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdGlvbkNvbnRyb2xsZXI6OnNlbGVj
dEZyYW1lRWxlbWVudEluUGFyZW50SWZGdWxseVNlbGVjdGVkKToKKyAgICAgICAgKFdlYkNvcmU6
OlNlbGVjdGlvbkNvbnRyb2xsZXI6OnNldFNlbGVjdGVkUmFuZ2UpOgorICAgICAgICAqIGVkaXRp
bmcvVGV4dEl0ZXJhdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRJdGVyYXRvcjo6c2hv
dWxkUmVwcmVzZW50Tm9kZU9mZnNldFplcm8pOgorICAgICAgICAqIGVkaXRpbmcvVHlwaW5nQ29t
bWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUeXBpbmdDb21tYW5kOjpkZWxldGVLZXlQcmVz
c2VkKToKKyAgICAgICAgKiBlZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpWaXNpYmxlUG9zaXRpb246OmxlZnRWaXN1YWxseURpc3RpbmN0Q2FuZGlkYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OlZpc2libGVQb3NpdGlvbjo6cmlnaHRWaXN1YWxseURpc3RpbmN0
Q2FuZGlkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlZpc2libGVQb3NpdGlvbjo6Y2Fub25pY2Fs
UG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6VmlzaWJsZVBvc2l0aW9uOjpjaGFyYWN0ZXJB
ZnRlcik6CisgICAgICAgIChXZWJDb3JlOjpWaXNpYmxlUG9zaXRpb246OmxvY2FsQ2FyZXRSZWN0
KToKKyAgICAgICAgKFdlYkNvcmU6Om1ha2VSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpzdGFy
dFZpc2libGVQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjplbmRWaXNpYmxlUG9zaXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6c2V0U3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6c2V0RW5k
KToKKyAgICAgICAgKFdlYkNvcmU6OmlzRmlyc3RWaXNpYmxlUG9zaXRpb25Jbk5vZGUpOgorICAg
ICAgICAoV2ViQ29yZTo6aXNMYXN0VmlzaWJsZVBvc2l0aW9uSW5Ob2RlKToKKyAgICAgICAgKiBl
ZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5oOgorICAgICAgICAoV2ViQ29yZTo6VmlzaWJsZVBvc2l0
aW9uOjpWaXNpYmxlUG9zaXRpb24pOgorICAgICAgICAqIGVkaXRpbmcvaHRtbGVkaXRpbmcuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Zmlyc3RJblNwZWNpYWxFbGVtZW50KToKKyAgICAgICAgKFdl
YkNvcmU6Omxhc3RJblNwZWNpYWxFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OnZpc2libGVQ
b3NpdGlvbkJlZm9yZU5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6dmlzaWJsZVBvc2l0aW9uQWZ0
ZXJOb2RlKToKKyAgICAgICAgKiBlZGl0aW5nL3Zpc2libGVfdW5pdHMuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6c3RhcnRQb3NpdGlvbkZvckxpbmUpOgorICAgICAgICAoV2ViQ29yZTo6ZW5kUG9z
aXRpb25Gb3JMaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OnByZXZpb3VzTGluZVBvc2l0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6Om5leHRMaW5lUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
c3RhcnRPZlBhcmFncmFwaCk6CisgICAgICAgIChXZWJDb3JlOjplbmRPZlBhcmFncmFwaCk6Cisg
ICAgICAgIChXZWJDb3JlOjplbmRPZkJsb2NrKToKKyAgICAgICAgKFdlYkNvcmU6OnN0YXJ0T2ZE
b2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjplbmRPZkRvY3VtZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OmxvZ2ljYWxTdGFydFBvc2l0aW9uRm9yTGluZSk6CisgICAgICAgIChXZWJDb3JlOjps
b2dpY2FsRW5kUG9zaXRpb25Gb3JMaW5lKToKKyAgICAgICAgKiBwYWdlL0RPTVNlbGVjdGlvbi5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpET01TZWxlY3Rpb246OmNvbGxhcHNlKToKKyAgICAgICAg
KFdlYkNvcmU6OkRPTVNlbGVjdGlvbjo6c2V0QmFzZUFuZEV4dGVudCk6CisgICAgICAgIChXZWJD
b3JlOjpET01TZWxlY3Rpb246OnNldFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTVNl
bGVjdGlvbjo6ZXh0ZW5kKToKKyAgICAgICAgKiBwYWdlL0V2ZW50SGFuZGxlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OmhhbmRsZU1vdXNlUHJlc3NFdmVudFNpbmdsZUNs
aWNrKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlck9iamVjdDo6Y3JlYXRlVmlzaWJsZVBvc2l0aW9uKToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGV4dENvbnRyb2w6OnZpc2libGVQb3NpdGlvbkZvckluZGV4KToKKyAgICAgICAgKiBzdmcvU1ZH
VGV4dENvbnRlbnRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRDb250ZW50
RWxlbWVudDo6c2VsZWN0U3ViU3RyaW5nKToKKwogMjAxMS0wMi0wOCAgUnlvc3VrZSBOaXdhICA8
cm5pd2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUuZXhwLmluCShyZXZpc2lvbiA3ODAyNykKKysrIFNvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUuZXhwLmluCSh3b3JraW5nIGNvcHkpCkBAIC00MDIsNyArNDAyLDYgQEAgX19aTjdX
ZWJDb3JlMTVTY3JvbGxBbGlnbm1lbnQxOWFsaWduVG9FZAogX19aTjdXZWJDb3JlMTVTdHJpbmdU
cnVuY2F0b3IxM3JpZ2h0VHJ1bmNhdGVFUktOM1dURjZTdHJpbmdFZlJLTlNfNEZvbnRFYgogX19a
TjdXZWJDb3JlMTVTdHJpbmdUcnVuY2F0b3IxNGNlbnRlclRydW5jYXRlRVJLTjNXVEY2U3RyaW5n
RWZSS05TXzRGb250RWIKIF9fWk43V2ViQ29yZTE1U3RyaW5nVHJ1bmNhdG9yNXdpZHRoRVJLTjNX
VEY2U3RyaW5nRVJLTlNfNEZvbnRFYgotX19aTjdXZWJDb3JlMTVWaXNpYmxlUG9zaXRpb25DMUVQ
TlNfNE5vZGVFaU5TXzlFQWZmaW5pdHlFCiBfX1pON1dlYkNvcmUxNVZpc2libGVQb3NpdGlvbkMx
RVJLTlNfOFBvc2l0aW9uRU5TXzlFQWZmaW5pdHlFCiBfX1pON1dlYkNvcmUxNWRlZmF1bHRMYW5n
dWFnZUV2CiBfX1pON1dlYkNvcmUxNXJlcG9ydEV4Y2VwdGlvbkVQTjNKU0M5RXhlY1N0YXRlRU5T
MF83SlNWYWx1ZUUKQEAgLTc4NSw2ICs3ODQsNyBAQCBfX1pON1dlYkNvcmU4R3JhZGllbnQxMmFk
ZENvbG9yU3RvcEVmUktOCiBfX1pON1dlYkNvcmU4R3JhZGllbnRDMUVSS05TXzEwRmxvYXRQb2lu
dEVTM18KIF9fWk43V2ViQ29yZThJbnRQb2ludEMxRVJLOF9OU1BvaW50CiBfX1pON1dlYkNvcmU4
UG9zaXRpb25DMUVOM1dURjEwUGFzc1JlZlB0cklOU180Tm9kZUVFRWkKK19fWk43V2ViQ29yZThQ
b3NpdGlvbkMxRU4zV1RGMTBQYXNzUmVmUHRySU5TXzROb2RlRUVFaU5TMF8xMEFuY2hvclR5cGVF
CiBfX1pON1dlYkNvcmU4U2V0dGluZ3MxNHNldEphdmFFbmFibGVkRWIKIF9fWk43V2ViQ29yZThT
ZXR0aW5nczE1c2V0V2ViR0xFbmFibGVkRWIKIF9fWk43V2ViQ29yZThTZXR0aW5nczE2c2V0VXNl
c1BhZ2VDYWNoZUViCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0
Q2FjaGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhP
YmplY3RDYWNoZS5jcHAJKHJldmlzaW9uIDc4MDI3KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTczLDcgKzU3Myw4
IEBAIFZpc2libGVQb3NpdGlvbiBBWE9iamVjdENhY2hlOjp2aXNpYmxlUG8KICAgICBpZiAoIWlz
Tm9kZUluVXNlKHRleHRNYXJrZXJEYXRhLm5vZGUpKQogICAgICAgICByZXR1cm4gVmlzaWJsZVBv
c2l0aW9uKCk7CiAgICAgCi0gICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3MgPSBWaXNpYmxl
UG9zaXRpb24odGV4dE1hcmtlckRhdGEubm9kZSwgdGV4dE1hcmtlckRhdGEub2Zmc2V0LCB0ZXh0
TWFya2VyRGF0YS5hZmZpbml0eSk7CisgICAgLy8gRklYTUU6IEFjY2Vzc2FiaWxpdHkgc2hvdWxk
IG1ha2UgaXQgY2xlYXIgdGhlc2UgYXJlIERPTS1jb21wbGlhbnQgb2Zmc2V0cyBvciBzdG9yZSBQ
b3NpdGlvbiBvYmplY3RzLgorICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9zID0gVmlzaWJs
ZVBvc2l0aW9uKFBvc2l0aW9uKHRleHRNYXJrZXJEYXRhLm5vZGUsIHRleHRNYXJrZXJEYXRhLm9m
ZnNldCksIHRleHRNYXJrZXJEYXRhLmFmZmluaXR5KTsKICAgICBQb3NpdGlvbiBkZWVwUG9zID0g
dmlzaWJsZVBvcy5kZWVwRXF1aXZhbGVudCgpOwogICAgIGlmIChkZWVwUG9zLmlzTnVsbCgpKQog
ICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAJKHJldmlzaW9u
IDc4MDI3KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2Jq
ZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzM2LDcgKzMzNiw3IEBAIHN0YXRpYyBWaXNpYmxl
UG9zaXRpb24gc3RhcnRPZlN0eWxlUmFuZ2UKICAgICAgICAgc3RhcnRSZW5kZXJlciA9IHI7CiAg
ICAgfQogCi0gICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihzdGFydFJlbmRlcmVyLT5ub2RlKCks
IDAsIFZQX0RFRkFVTFRfQUZGSU5JVFkpOworICAgIHJldHVybiBmaXJzdFBvc2l0aW9uSW5PckJl
Zm9yZU5vZGUoc3RhcnRSZW5kZXJlci0+bm9kZSgpKTsKIH0KIAogc3RhdGljIFZpc2libGVQb3Np
dGlvbiBlbmRPZlN0eWxlUmFuZ2UoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2aXNpYmxlUG9zKQpA
QCAtMzU5LDcgKzM1OSw3IEBAIHN0YXRpYyBWaXNpYmxlUG9zaXRpb24gZW5kT2ZTdHlsZVJhbmdl
KGMKICAgICAgICAgZW5kUmVuZGVyZXIgPSByOwogICAgIH0KIAotICAgIHJldHVybiBsYXN0RGVl
cEVkaXRpbmdQb3NpdGlvbkZvck5vZGUoZW5kUmVuZGVyZXItPm5vZGUoKSk7CisgICAgcmV0dXJu
IGxhc3RQb3NpdGlvbkluT3JBZnRlck5vZGUoZW5kUmVuZGVyZXItPm5vZGUoKSk7CiB9CiAKIFZp
c2libGVQb3NpdGlvblJhbmdlIEFjY2Vzc2liaWxpdHlPYmplY3Q6OnN0eWxlUmFuZ2VGb3JQb3Np
dGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mIHZpc2libGVQb3MpIGNvbnN0CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJl
bmRlck9iamVjdC5jcHAJKHJldmlzaW9uIDc4MDI3KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjQ1OSwxNCArMjQ1OSwxNCBAQCBWaXNpYmxlUG9zaXRpb24gQWNjZXNzaWJpbGl0eVJlbmRlck9i
amVjCiAgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oKTsKICAgICAKICAgICBpZiAoaW5k
ZXggPD0gMCkKLSAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihub2RlLCAwLCBET1dOU1RS
RUFNKTsKKyAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihmaXJzdFBvc2l0aW9uSW5PckJl
Zm9yZU5vZGUobm9kZSksIERPV05TVFJFQU0pOwogICAgIAogICAgIEV4Y2VwdGlvbkNvZGUgZWMg
PSAwOwogICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKG1fcmVuZGVyZXIt
PmRvY3VtZW50KCkpOwogICAgIHJhbmdlLT5zZWxlY3ROb2RlQ29udGVudHMobm9kZSwgZWMpOwog
ICAgIENoYXJhY3Rlckl0ZXJhdG9yIGl0KHJhbmdlLmdldCgpKTsKICAgICBpdC5hZHZhbmNlKGlu
ZGV4IC0gMSk7Ci0gICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihpdC5yYW5nZSgpLT5lbmRDb250
YWluZXIoZWMpLCBpdC5yYW5nZSgpLT5lbmRPZmZzZXQoZWMpLCBVUFNUUkVBTSk7CisgICAgcmV0
dXJuIFZpc2libGVQb3NpdGlvbihQb3NpdGlvbihpdC5yYW5nZSgpLT5lbmRDb250YWluZXIoZWMp
LCBpdC5yYW5nZSgpLT5lbmRPZmZzZXQoZWMpLCBQb3NpdGlvbjo6UG9zaXRpb25Jc09mZnNldElu
QW5jaG9yKSwgVVBTVFJFQU0pOwogfQogICAgIAogaW50IEFjY2Vzc2liaWxpdHlSZW5kZXJPYmpl
Y3Q6OmluZGV4Rm9yVmlzaWJsZVBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgcG9zKSBj
b25zdApJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvQWNjZXNzaWJpbGl0
eU9iamVjdFdyYXBwZXJBdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvZ3RrL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQXRrLmNwcAkocmV2aXNpb24g
NzgwMjcpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9BY2Nlc3NpYmlsaXR5
T2JqZWN0V3JhcHBlckF0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1MDAsNyArMjUwMCw3IEBA
IEFjY2Vzc2liaWxpdHlPYmplY3QqIG9iamVjdEFuZE9mZnNldFVuaWcKIAogICAgIE5vZGUqIG5v
ZGUgPSByZWFsT2JqZWN0LT5ub2RlKCk7CiAgICAgaWYgKG5vZGUpIHsKLSAgICAgICAgVmlzaWJs
ZVBvc2l0aW9uIHN0YXJ0UG9zaXRpb24gPSBWaXNpYmxlUG9zaXRpb24obm9kZSwgMCwgRE9XTlNU
UkVBTSk7CisgICAgICAgIFZpc2libGVQb3NpdGlvbiBzdGFydFBvc2l0aW9uID0gVmlzaWJsZVBv
c2l0aW9uKHBvc2l0aW9uQmVmb3JlTm9kZShub2RlKSwgRE9XTlNUUkVBTSk7CiAgICAgICAgIFZp
c2libGVQb3NpdGlvbiBlbmRQb3NpdGlvbiA9IHJlYWxPYmplY3QtPnNlbGVjdGlvbigpLnZpc2li
bGVFbmQoKTsKIAogICAgICAgICBpZiAoc3RhcnRQb3NpdGlvbiA9PSBlbmRQb3NpdGlvbikKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Qb3NpdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvZG9tL1Bvc2l0aW9uLmNwcAkocmV2aXNpb24gNzgwMjcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9kb20vUG9zaXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MTMsNyArNTEzLDggQEAg
UG9zaXRpb24gUG9zaXRpb246OnVwc3RyZWFtKEVkaXRpbmdCb3VuZAogICAgIAogICAgIC8vIGl0
ZXJhdGUgYmFja3dhcmQgZnJvbSB0aGVyZSwgbG9va2luZyBmb3IgYSBxdWFsaWZpZWQgcG9zaXRp
b24KICAgICBOb2RlKiBib3VuZGFyeSA9IGVuY2xvc2luZ1Zpc3VhbEJvdW5kYXJ5KHN0YXJ0Tm9k
ZSk7Ci0gICAgUG9zaXRpb25JdGVyYXRvciBsYXN0VmlzaWJsZSA9ICp0aGlzOworICAgIC8vIEZJ
WE1FOiBQb3NpdGlvbkl0ZXJhdG9yIHNob3VsZCByZXNwZWN0IEJlZm9yZSBhbmQgQWZ0ZXIgcG9z
aXRpb25zLgorICAgIFBvc2l0aW9uSXRlcmF0b3IgbGFzdFZpc2libGUgPSBtX2FuY2hvclR5cGUg
PT0gUG9zaXRpb25Jc0FmdGVyQW5jaG9yID8gUG9zaXRpb24obV9hbmNob3JOb2RlLCBjYXJldE1h
eE9mZnNldChtX2FuY2hvck5vZGUuZ2V0KCkpKSA6ICp0aGlzOwogICAgIFBvc2l0aW9uSXRlcmF0
b3IgY3VycmVudFBvcyA9IGxhc3RWaXNpYmxlOwogICAgIGJvb2wgc3RhcnRFZGl0YWJsZSA9IHN0
YXJ0Tm9kZS0+aXNDb250ZW50RWRpdGFibGUoKTsKICAgICBOb2RlKiBsYXN0Tm9kZSA9IHN0YXJ0
Tm9kZTsKQEAgLTYzNCw3ICs2MzUsOCBAQCBQb3NpdGlvbiBQb3NpdGlvbjo6ZG93bnN0cmVhbShF
ZGl0aW5nQm91CiAKICAgICAvLyBpdGVyYXRlIGZvcndhcmQgZnJvbSB0aGVyZSwgbG9va2luZyBm
b3IgYSBxdWFsaWZpZWQgcG9zaXRpb24KICAgICBOb2RlKiBib3VuZGFyeSA9IGVuY2xvc2luZ1Zp
c3VhbEJvdW5kYXJ5KHN0YXJ0Tm9kZSk7Ci0gICAgUG9zaXRpb25JdGVyYXRvciBsYXN0VmlzaWJs
ZSA9ICp0aGlzOworICAgIC8vIEZJWE1FOiBQb3NpdGlvbkl0ZXJhdG9yIHNob3VsZCByZXNwZWN0
IEJlZm9yZSBhbmQgQWZ0ZXIgcG9zaXRpb25zLgorICAgIFBvc2l0aW9uSXRlcmF0b3IgbGFzdFZp
c2libGUgPSBtX2FuY2hvclR5cGUgPT0gUG9zaXRpb25Jc0FmdGVyQW5jaG9yID8gUG9zaXRpb24o
bV9hbmNob3JOb2RlLCBjYXJldE1heE9mZnNldChtX2FuY2hvck5vZGUuZ2V0KCkpKSA6ICp0aGlz
OwogICAgIFBvc2l0aW9uSXRlcmF0b3IgY3VycmVudFBvcyA9IGxhc3RWaXNpYmxlOwogICAgIGJv
b2wgc3RhcnRFZGl0YWJsZSA9IHN0YXJ0Tm9kZS0+aXNDb250ZW50RWRpdGFibGUoKTsKICAgICBO
b2RlKiBsYXN0Tm9kZSA9IHN0YXJ0Tm9kZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9SYW5n
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmNwcAkocmV2aXNp
b24gNzgwMjcpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xNTcwLDcgKzE1NzAsNyBAQCBQb3NpdGlvbiBSYW5nZTo6ZWRpdGluZ1N0YXJ0UG9zaXRp
b24oKSBjCiAgICAgLy8gSXQgaXMgaW1wb3J0YW50IHRvIHNraXAgY2VydGFpbiBpcnJlbGV2YW50
IGNvbnRlbnQgYXQgdGhlIHN0YXJ0IG9mIHRoZSBzZWxlY3Rpb24sIHNvIHdlIGRvIG5vdCB3aW5k
IHVwIAogICAgIC8vIHdpdGggYSBzcHVyaW91cyAibWl4ZWQiIHN0eWxlLgogICAgIAotICAgIFZp
c2libGVQb3NpdGlvbiB2aXNpYmxlUG9zaXRpb24obV9zdGFydC5jb250YWluZXIoKSwgbV9zdGFy
dC5vZmZzZXQoKSwgVlBfREVGQVVMVF9BRkZJTklUWSk7CisgICAgVmlzaWJsZVBvc2l0aW9uIHZp
c2libGVQb3NpdGlvbiA9IFBvc2l0aW9uKG1fc3RhcnQuY29udGFpbmVyKCksIG1fc3RhcnQub2Zm
c2V0KCksIFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3IpOwogICAgIGlmICh2aXNp
YmxlUG9zaXRpb24uaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiBQb3NpdGlvbigpOwogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCShyZXZpc2lvbiA3ODAyNykKKysrIFNvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjkzLDcgKzI5Myw3
IEBAIGJvb2wgRWRpdG9yOjpjYW5EZWxldGVSYW5nZShSYW5nZSogcmFuZ2UKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIAogICAgIGlmIChyYW5nZS0+Y29sbGFwc2VkKGVjKSkgewotICAgICAg
ICBWaXNpYmxlUG9zaXRpb24gc3RhcnQoc3RhcnRDb250YWluZXIsIHJhbmdlLT5zdGFydE9mZnNl
dChlYyksIERPV05TVFJFQU0pOworICAgICAgICBWaXNpYmxlUG9zaXRpb24gc3RhcnQoUG9zaXRp
b24oc3RhcnRDb250YWluZXIsIHJhbmdlLT5zdGFydE9mZnNldChlYyksIFBvc2l0aW9uOjpQb3Np
dGlvbklzT2Zmc2V0SW5BbmNob3IpLCBET1dOU1RSRUFNKTsKICAgICAgICAgVmlzaWJsZVBvc2l0
aW9uIHByZXZpb3VzID0gc3RhcnQucHJldmlvdXMoKTsKICAgICAgICAgLy8gRklYTUU6IFdlIHNv
bWV0aW1lcyBhbGxvdyBkZWxldGlvbnMgYXQgdGhlIHN0YXJ0IG9mIGVkaXRhYmxlIHJvb3RzLCBs
aWtlIHdoZW4gdGhlIGNhcmV0IGlzIGluIGFuIGVtcHR5IGxpc3QgaXRlbS4KICAgICAgICAgaWYg
KHByZXZpb3VzLmlzTnVsbCgpIHx8IHByZXZpb3VzLmRlZXBFcXVpdmFsZW50KCkubm9kZSgpLT5y
b290RWRpdGFibGVFbGVtZW50KCkgIT0gc3RhcnRDb250YWluZXItPnJvb3RFZGl0YWJsZUVsZW1l
bnQoKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1h
bmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVj
dGlvbkNvbW1hbmQuY3BwCShyZXZpc2lvbiA3ODAyNykKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04ODQsNyAr
ODg0LDcgQEAgdm9pZCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6ZG9BcHBseSgpCiAgICAgTm9k
ZSogZW5kQlIgPSBpbnNlcnRpb25Qb3MuZG93bnN0cmVhbSgpLm5vZGUoKS0+aGFzVGFnTmFtZShi
clRhZykgPyBpbnNlcnRpb25Qb3MuZG93bnN0cmVhbSgpLm5vZGUoKSA6IDA7CiAgICAgVmlzaWJs
ZVBvc2l0aW9uIG9yaWdpbmFsVmlzUG9zQmVmb3JlRW5kQlI7CiAgICAgaWYgKGVuZEJSKQotICAg
ICAgICBvcmlnaW5hbFZpc1Bvc0JlZm9yZUVuZEJSID0gVmlzaWJsZVBvc2l0aW9uKGVuZEJSLCAw
LCBET1dOU1RSRUFNKS5wcmV2aW91cygpOworICAgICAgICBvcmlnaW5hbFZpc1Bvc0JlZm9yZUVu
ZEJSID0gVmlzaWJsZVBvc2l0aW9uKHBvc2l0aW9uQmVmb3JlTm9kZShlbmRCUiksIERPV05TVFJF
QU0pLnByZXZpb3VzKCk7CiAgICAgCiAgICAgc3RhcnRCbG9jayA9IGVuY2xvc2luZ0Jsb2NrKGlu
c2VydGlvblBvcy5ub2RlKCkpOwogICAgIApJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9T
ZWxlY3Rpb25Db250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiA3ODAyNykKKysrIFNvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvU2VsZWN0aW9uQ29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEzMTUsOCArMTMxNSw4IEBAIHZvaWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6c2VsZWN0RnJhbWVF
bGUKIAogICAgIC8vIENyZWF0ZSBjb21wdXRlIHBvc2l0aW9ucyBiZWZvcmUgYW5kIGFmdGVyIHRo
ZSBlbGVtZW50LgogICAgIHVuc2lnbmVkIG93bmVyRWxlbWVudE5vZGVJbmRleCA9IG93bmVyRWxl
bWVudC0+bm9kZUluZGV4KCk7Ci0gICAgVmlzaWJsZVBvc2l0aW9uIGJlZm9yZU93bmVyRWxlbWVu
dChWaXNpYmxlUG9zaXRpb24ob3duZXJFbGVtZW50UGFyZW50LCBvd25lckVsZW1lbnROb2RlSW5k
ZXgsIFNFTF9ERUZBVUxUX0FGRklOSVRZKSk7Ci0gICAgVmlzaWJsZVBvc2l0aW9uIGFmdGVyT3du
ZXJFbGVtZW50KFZpc2libGVQb3NpdGlvbihvd25lckVsZW1lbnRQYXJlbnQsIG93bmVyRWxlbWVu
dE5vZGVJbmRleCArIDEsIFZQX1VQU1RSRUFNX0lGX1BPU1NJQkxFKSk7CisgICAgVmlzaWJsZVBv
c2l0aW9uIGJlZm9yZU93bmVyRWxlbWVudChWaXNpYmxlUG9zaXRpb24oUG9zaXRpb24ob3duZXJF
bGVtZW50UGFyZW50LCBvd25lckVsZW1lbnROb2RlSW5kZXgsIFBvc2l0aW9uOjpQb3NpdGlvbklz
T2Zmc2V0SW5BbmNob3IpKSk7CisgICAgVmlzaWJsZVBvc2l0aW9uIGFmdGVyT3duZXJFbGVtZW50
KFZpc2libGVQb3NpdGlvbihQb3NpdGlvbihvd25lckVsZW1lbnRQYXJlbnQsIG93bmVyRWxlbWVu
dE5vZGVJbmRleCArIDEsIFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3IpLCBWUF9V
UFNUUkVBTV9JRl9QT1NTSUJMRSkpOwogCiAgICAgLy8gRm9jdXMgb24gdGhlIHBhcmVudCBmcmFt
ZSwgYW5kIHRoZW4gc2VsZWN0IGZyb20gYmVmb3JlIHRoaXMgZWxlbWVudCB0byBhZnRlci4KICAg
ICBWaXNpYmxlU2VsZWN0aW9uIG5ld1NlbGVjdGlvbihiZWZvcmVPd25lckVsZW1lbnQsIGFmdGVy
T3duZXJFbGVtZW50KTsKQEAgLTEzODcsOCArMTM4Nyw4IEBAIGJvb2wgU2VsZWN0aW9uQ29udHJv
bGxlcjo6c2V0U2VsZWN0ZWRSYW4KICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIC8v
IEZJWE1FOiBDYW4gd2UgcHJvdmlkZSBleHRlbnRBZmZpbml0eT8KLSAgICBWaXNpYmxlUG9zaXRp
b24gdmlzaWJsZVN0YXJ0KHN0YXJ0Q29udGFpbmVyLCBzdGFydE9mZnNldCwgY29sbGFwc2VkID8g
YWZmaW5pdHkgOiBET1dOU1RSRUFNKTsKLSAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZUVuZChl
bmRDb250YWluZXIsIGVuZE9mZnNldCwgU0VMX0RFRkFVTFRfQUZGSU5JVFkpOworICAgIFZpc2li
bGVQb3NpdGlvbiB2aXNpYmxlU3RhcnQoUG9zaXRpb24oc3RhcnRDb250YWluZXIsIHN0YXJ0T2Zm
c2V0LCBQb3NpdGlvbjo6UG9zaXRpb25Jc09mZnNldEluQW5jaG9yKSwgY29sbGFwc2VkID8gYWZm
aW5pdHkgOiBET1dOU1RSRUFNKTsKKyAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZUVuZChQb3Np
dGlvbihlbmRDb250YWluZXIsIGVuZE9mZnNldCwgUG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJ
bkFuY2hvciksIFNFTF9ERUZBVUxUX0FGRklOSVRZKTsKICAgICBzZXRTZWxlY3Rpb24oVmlzaWJs
ZVNlbGVjdGlvbih2aXNpYmxlU3RhcnQsIHZpc2libGVFbmQpLCBjbG9zZVR5cGluZyk7CiAgICAg
cmV0dXJuIHRydWU7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRv
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3Iu
Y3BwCShyZXZpc2lvbiA3ODAyNykKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJh
dG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODc4LDggKzg3OCw4IEBAIGJvb2wgVGV4dEl0ZXJh
dG9yOjpzaG91bGRSZXByZXNlbnROb2RlT2YKICAgICAvLyBhbmQgaW4gdGhhdCBjYXNlIHdlJ2xs
IGdldCBudWxsLiBXZSBkb24ndCB3YW50IHRvIHB1dCBpbiBuZXdsaW5lcyBhdCB0aGUgc3RhcnQg
aW4gdGhhdCBjYXNlLgogICAgIC8vIFRoZSBjdXJyUG9zLmlzTm90TnVsbCgpIGNoZWNrIGlzIG5l
ZWRlZCBiZWNhdXNlIHBvc2l0aW9ucyBpbiBub24tSFRNTCBjb250ZW50CiAgICAgLy8gKGxpa2Ug
U1ZHKSBkbyBub3QgaGF2ZSB2aXNpYmxlIHBvc2l0aW9ucywgYW5kIHdlIGRvbid0IHdhbnQgdG8g
ZW1pdCBmb3IgdGhlbSBlaXRoZXIuCi0gICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0UG9zID0gVmlz
aWJsZVBvc2l0aW9uKG1fc3RhcnRDb250YWluZXIsIG1fc3RhcnRPZmZzZXQsIERPV05TVFJFQU0p
OwotICAgIFZpc2libGVQb3NpdGlvbiBjdXJyUG9zID0gVmlzaWJsZVBvc2l0aW9uKG1fbm9kZSwg
MCwgRE9XTlNUUkVBTSk7CisgICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0UG9zID0gVmlzaWJsZVBv
c2l0aW9uKFBvc2l0aW9uKG1fc3RhcnRDb250YWluZXIsIG1fc3RhcnRPZmZzZXQsIFBvc2l0aW9u
OjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3IpLCBET1dOU1RSRUFNKTsKKyAgICBWaXNpYmxlUG9z
aXRpb24gY3VyclBvcyA9IFZpc2libGVQb3NpdGlvbihwb3NpdGlvbkJlZm9yZU5vZGUobV9ub2Rl
KSwgRE9XTlNUUkVBTSk7CiAgICAgcmV0dXJuIHN0YXJ0UG9zLmlzTm90TnVsbCgpICYmIGN1cnJQ
b3MuaXNOb3ROdWxsKCkgJiYgIWluU2FtZUxpbmUoc3RhcnRQb3MsIGN1cnJQb3MpOwogfQogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29tbWFuZC5jcHAJKHJldmlzaW9uIDc4
MDI3KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDk1LDcgKzQ5NSw3IEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6ZGVsZXRlS2V5
UHJlc3NlZChUZXgKICAgICAgICAgICAgIHNlbGVjdGlvbi5tb2RpZnkoU2VsZWN0aW9uQ29udHJv
bGxlcjo6QWx0ZXJhdGlvbkV4dGVuZCwgRGlyZWN0aW9uQmFja3dhcmQsIGdyYW51bGFyaXR5KTsK
ICAgICAgICAgLy8gSWYgdGhlIGNhcmV0IGlzIGp1c3QgYWZ0ZXIgYSB0YWJsZSwgc2VsZWN0IHRo
ZSB0YWJsZSBhbmQgZG9uJ3QgZGVsZXRlIGFueXRoaW5nLgogICAgICAgICB9IGVsc2UgaWYgKE5v
ZGUqIHRhYmxlID0gaXNGaXJzdFBvc2l0aW9uQWZ0ZXJUYWJsZSh2aXNpYmxlU3RhcnQpKSB7Ci0g
ICAgICAgICAgICBzZXRFbmRpbmdTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbihwb3NpdGlvbkFm
dGVyTm9kZSh0YWJsZSksIGVuZGluZ1NlbGVjdGlvbigpLnN0YXJ0KCksIERPV05TVFJFQU0pKTsK
KyAgICAgICAgICAgIHNldEVuZGluZ1NlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKHBvc2l0aW9u
QmVmb3JlTm9kZSh0YWJsZSksIGVuZGluZ1NlbGVjdGlvbigpLnN0YXJ0KCksIERPV05TVFJFQU0p
KTsKICAgICAgICAgICAgIHR5cGluZ0FkZGVkVG9PcGVuQ29tbWFuZChEZWxldGVLZXkpOwogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L1Zpc2libGVQb3NpdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9WaXNpYmxlUG9zaXRpb24uY3BwCShyZXZpc2lvbiA3ODAyNykKKysrIFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvVmlzaWJsZVBvc2l0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgsMTIgKzQ4
LDYgQEAgVmlzaWJsZVBvc2l0aW9uOjpWaXNpYmxlUG9zaXRpb24oY29uc3QgUAogICAgIGluaXQo
cG9zLCBhZmZpbml0eSk7CiB9CiAKLVZpc2libGVQb3NpdGlvbjo6VmlzaWJsZVBvc2l0aW9uKE5v
ZGUgKm5vZGUsIGludCBvZmZzZXQsIEVBZmZpbml0eSBhZmZpbml0eSkKLXsKLSAgICBBU1NFUlQo
b2Zmc2V0ID49IDApOwotICAgIGluaXQoUG9zaXRpb24obm9kZSwgb2Zmc2V0KSwgYWZmaW5pdHkp
OwotfQotCiB2b2lkIFZpc2libGVQb3NpdGlvbjo6aW5pdChjb25zdCBQb3NpdGlvbiYgcG9zaXRp
b24sIEVBZmZpbml0eSBhZmZpbml0eSkKIHsKICAgICBtX2FmZmluaXR5ID0gYWZmaW5pdHk7CkBA
IC0xMDYsNyArMTAwLDcgQEAgVmlzaWJsZVBvc2l0aW9uIFZpc2libGVQb3NpdGlvbjo6cHJldmlv
dQogUG9zaXRpb24gVmlzaWJsZVBvc2l0aW9uOjpsZWZ0VmlzdWFsbHlEaXN0aW5jdENhbmRpZGF0
ZSgpIGNvbnN0CiB7CiAgICAgUG9zaXRpb24gcCA9IG1fZGVlcFBvc2l0aW9uOwotICAgIGlmICgh
cC5ub2RlKCkpCisgICAgaWYgKHAuaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiBQb3NpdGlvbigp
OwogCiAgICAgUG9zaXRpb24gZG93bnN0cmVhbVN0YXJ0ID0gcC5kb3duc3RyZWFtKCk7CkBAIC0y
NDIsNyArMjM2LDcgQEAgVmlzaWJsZVBvc2l0aW9uIFZpc2libGVQb3NpdGlvbjo6bGVmdChibwog
UG9zaXRpb24gVmlzaWJsZVBvc2l0aW9uOjpyaWdodFZpc3VhbGx5RGlzdGluY3RDYW5kaWRhdGUo
KSBjb25zdAogewogICAgIFBvc2l0aW9uIHAgPSBtX2RlZXBQb3NpdGlvbjsKLSAgICBpZiAoIXAu
bm9kZSgpKQorICAgIGlmIChwLmlzTnVsbCgpKQogICAgICAgICByZXR1cm4gUG9zaXRpb24oKTsK
IAogICAgIFBvc2l0aW9uIGRvd25zdHJlYW1TdGFydCA9IHAuZG93bnN0cmVhbSgpOwpAQCAtNDUx
LDEwICs0NDUsMTEgQEAgUG9zaXRpb24gVmlzaWJsZVBvc2l0aW9uOjpjYW5vbmljYWxQb3NpdAog
ICAgIC8vIFRvIGZpeCB0aGlzLCB3ZSBuZWVkIHRvIGVpdGhlciBhKSBhZGQgY29kZSB0byBhbGwg
cGFpbnRDYXJldHMgdG8gcGFzcyB0aGUgcmVzcG9uc2liaWxpdHkgb2ZmIHRvCiAgICAgLy8gdGhl
IGFwcHJvcHJpYXRlIHJlbmRlcmVyIGZvciBWaXNpYmxlUG9zaXRpb24ncyBsaWtlIHRoZXNlLCBv
ciBiKSBjYW5vbmljYWxpemUgdG8gdGhlIHJpZ2h0bW9zdCBjYW5kaWRhdGUKICAgICAvLyB1bmxl
c3MgdGhlIGFmZmluaXR5IGlzIHVwc3RyZWFtLgotICAgIE5vZGUqIG5vZGUgPSBwb3NpdGlvbi5u
b2RlKCk7Ci0gICAgaWYgKCFub2RlKQorICAgIGlmIChwb3NpdGlvbi5pc051bGwoKSkKICAgICAg
ICAgcmV0dXJuIFBvc2l0aW9uKCk7CiAKKyAgICBOb2RlKiBub2RlID0gcG9zaXRpb24uYW5jaG9y
Tm9kZSgpOworCiAgICAgQVNTRVJUKG5vZGUtPmRvY3VtZW50KCkpOwogICAgIG5vZGUtPmRvY3Vt
ZW50KCktPnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwogCkBAIC01MTAs
MTEgKzUwNSwxMiBAQCBVQ2hhcjMyIFZpc2libGVQb3NpdGlvbjo6Y2hhcmFjdGVyQWZ0ZXIoCiAg
ICAgLy8gV2UgY2Fub25pY2FsaXplIHRvIHRoZSBmaXJzdCBvZiB0d28gZXF1aXZhbGVudCBjYW5k
aWRhdGVzLCBidXQgdGhlIHNlY29uZCBvZiB0aGUgdHdvIGNhbmRpZGF0ZXMKICAgICAvLyBpcyB0
aGUgb25lIHRoYXQgd2lsbCBiZSBpbnNpZGUgdGhlIHRleHQgbm9kZSBjb250YWluaW5nIHRoZSBj
aGFyYWN0ZXIgYWZ0ZXIgdGhpcyB2aXNpYmxlIHBvc2l0aW9uLgogICAgIFBvc2l0aW9uIHBvcyA9
IG1fZGVlcFBvc2l0aW9uLmRvd25zdHJlYW0oKTsKLSAgICBOb2RlKiBub2RlID0gcG9zLm5vZGUo
KTsKLSAgICBpZiAoIW5vZGUgfHwgIW5vZGUtPmlzVGV4dE5vZGUoKSkKKyAgICBOb2RlKiBub2Rl
ID0gcG9zLmNvbnRhaW5lck5vZGUoKTsKKyAgICBpZiAoIW5vZGUgfHwgIW5vZGUtPmlzVGV4dE5v
ZGUoKSB8fCBwb3MuYW5jaG9yVHlwZSgpID09IFBvc2l0aW9uOjpQb3NpdGlvbklzQWZ0ZXJBbmNo
b3IpCiAgICAgICAgIHJldHVybiAwOwotICAgIFRleHQqIHRleHROb2RlID0gc3RhdGljX2Nhc3Q8
VGV4dCo+KHBvcy5ub2RlKCkpOwotICAgIHVuc2lnbmVkIG9mZnNldCA9IHBvcy5kZXByZWNhdGVk
RWRpdGluZ09mZnNldCgpOworICAgIEFTU0VSVChwb3MuYW5jaG9yVHlwZSgpID09IFBvc2l0aW9u
OjpQb3NpdGlvbklzQmVmb3JlQW5jaG9yIHx8IHBvcy5hbmNob3JUeXBlKCkgPT0gUG9zaXRpb246
OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvcik7CisgICAgVGV4dCogdGV4dE5vZGUgPSBzdGF0aWNf
Y2FzdDxUZXh0Kj4ocG9zLmNvbnRhaW5lck5vZGUoKSk7CisgICAgdW5zaWduZWQgb2Zmc2V0ID0g
cG9zLmFuY2hvclR5cGUoKSA9PSBQb3NpdGlvbjo6UG9zaXRpb25Jc09mZnNldEluQW5jaG9yID8g
cG9zLm9mZnNldEluQ29udGFpbmVyTm9kZSgpIDogMDsKICAgICB1bnNpZ25lZCBsZW5ndGggPSB0
ZXh0Tm9kZS0+bGVuZ3RoKCk7CiAgICAgaWYgKG9mZnNldCA+PSBsZW5ndGgpCiAgICAgICAgIHJl
dHVybiAwOwpAQCAtNTI3LDExICs1MjMsMTEgQEAgVUNoYXIzMiBWaXNpYmxlUG9zaXRpb246OmNo
YXJhY3RlckFmdGVyKAogCiBJbnRSZWN0IFZpc2libGVQb3NpdGlvbjo6bG9jYWxDYXJldFJlY3Qo
UmVuZGVyT2JqZWN0KiYgcmVuZGVyZXIpIGNvbnN0CiB7Ci0gICAgTm9kZSogbm9kZSA9IG1fZGVl
cFBvc2l0aW9uLm5vZGUoKTsKLSAgICBpZiAoIW5vZGUpIHsKKyAgICBpZiAobV9kZWVwUG9zaXRp
b24uaXNOdWxsKCkpIHsKICAgICAgICAgcmVuZGVyZXIgPSAwOwogICAgICAgICByZXR1cm4gSW50
UmVjdCgpOwogICAgIH0KKyAgICBOb2RlKiBub2RlID0gbV9kZWVwUG9zaXRpb24uY29udGFpbmVy
Tm9kZSgpOwogICAgIAogICAgIHJlbmRlcmVyID0gbm9kZS0+cmVuZGVyZXIoKTsKICAgICBpZiAo
IXJlbmRlcmVyKQpAQCAtNTk5LDE5ICs1OTUsMTkgQEAgUGFzc1JlZlB0cjxSYW5nZT4gbWFrZVJh
bmdlKGNvbnN0IFZpc2libAogICAgIAogICAgIFBvc2l0aW9uIHMgPSBzdGFydC5kZWVwRXF1aXZh
bGVudCgpLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpOwogICAgIFBvc2l0aW9uIGUgPSBlbmQu
ZGVlcEVxdWl2YWxlbnQoKS5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKTsKLSAgICByZXR1cm4g
UmFuZ2U6OmNyZWF0ZShzLm5vZGUoKS0+ZG9jdW1lbnQoKSwgcy5ub2RlKCksIHMuZGVwcmVjYXRl
ZEVkaXRpbmdPZmZzZXQoKSwgZS5ub2RlKCksIGUuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSk7
CisgICAgcmV0dXJuIFJhbmdlOjpjcmVhdGUocy5jb250YWluZXJOb2RlKCktPmRvY3VtZW50KCks
IHMuY29udGFpbmVyTm9kZSgpLCBzLm9mZnNldEluQ29udGFpbmVyTm9kZSgpLCBlLmNvbnRhaW5l
ck5vZGUoKSwgZS5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSk7CiB9CiAKIFZpc2libGVQb3NpdGlv
biBzdGFydFZpc2libGVQb3NpdGlvbihjb25zdCBSYW5nZSAqciwgRUFmZmluaXR5IGFmZmluaXR5
KQogewogICAgIGludCBleGNlcHRpb24gPSAwOwotICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24o
ci0+c3RhcnRDb250YWluZXIoZXhjZXB0aW9uKSwgci0+c3RhcnRPZmZzZXQoZXhjZXB0aW9uKSwg
YWZmaW5pdHkpOworICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oUG9zaXRpb24oci0+c3RhcnRD
b250YWluZXIoZXhjZXB0aW9uKSwgci0+c3RhcnRPZmZzZXQoZXhjZXB0aW9uKSwgUG9zaXRpb246
OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvciksIGFmZmluaXR5KTsKIH0KIAogVmlzaWJsZVBvc2l0
aW9uIGVuZFZpc2libGVQb3NpdGlvbihjb25zdCBSYW5nZSAqciwgRUFmZmluaXR5IGFmZmluaXR5
KQogewogICAgIGludCBleGNlcHRpb24gPSAwOwotICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24o
ci0+ZW5kQ29udGFpbmVyKGV4Y2VwdGlvbiksIHItPmVuZE9mZnNldChleGNlcHRpb24pLCBhZmZp
bml0eSk7CisgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihQb3NpdGlvbihyLT5lbmRDb250YWlu
ZXIoZXhjZXB0aW9uKSwgci0+ZW5kT2Zmc2V0KGV4Y2VwdGlvbiksIFBvc2l0aW9uOjpQb3NpdGlv
bklzT2Zmc2V0SW5BbmNob3IpLCBhZmZpbml0eSk7CiB9CiAKIGJvb2wgc2V0U3RhcnQoUmFuZ2Ug
KnIsIGNvbnN0IFZpc2libGVQb3NpdGlvbiAmdmlzaWJsZVBvc2l0aW9uKQpAQCAtNjIwLDcgKzYx
Niw3IEBAIGJvb2wgc2V0U3RhcnQoUmFuZ2UgKnIsIGNvbnN0IFZpc2libGVQb3MKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIFBvc2l0aW9uIHAgPSB2aXNpYmxlUG9zaXRpb24uZGVlcEVxdWl2
YWxlbnQoKS5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKTsKICAgICBpbnQgY29kZSA9IDA7Ci0g
ICAgci0+c2V0U3RhcnQocC5ub2RlKCksIHAuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSwgY29k
ZSk7CisgICAgci0+c2V0U3RhcnQocC5jb250YWluZXJOb2RlKCksIHAub2Zmc2V0SW5Db250YWlu
ZXJOb2RlKCksIGNvZGUpOwogICAgIHJldHVybiBjb2RlID09IDA7CiB9CiAKQEAgLTYzMCw3ICs2
MjYsNyBAQCBib29sIHNldEVuZChSYW5nZSAqciwgY29uc3QgVmlzaWJsZVBvc2l0CiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICBQb3NpdGlvbiBwID0gdmlzaWJsZVBvc2l0aW9uLmRlZXBFcXVp
dmFsZW50KCkucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCk7CiAgICAgaW50IGNvZGUgPSAwOwot
ICAgIHItPnNldEVuZChwLm5vZGUoKSwgcC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpLCBjb2Rl
KTsKKyAgICByLT5zZXRFbmQocC5jb250YWluZXJOb2RlKCksIHAub2Zmc2V0SW5Db250YWluZXJO
b2RlKCksIGNvZGUpOwogICAgIHJldHVybiBjb2RlID09IDA7CiB9CiAKQEAgLTY0NiwxMCArNjQy
LDEwIEBAIGJvb2wgaXNGaXJzdFZpc2libGVQb3NpdGlvbkluTm9kZShjb25zdCAKIHsKICAgICBp
ZiAodmlzaWJsZVBvc2l0aW9uLmlzTnVsbCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
Ci0gICAgaWYgKCF2aXNpYmxlUG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKS5ub2RlKCktPmlzRGVz
Y2VuZGFudE9mKG5vZGUpKQorCisgICAgaWYgKCF2aXNpYmxlUG9zaXRpb24uZGVlcEVxdWl2YWxl
bnQoKS5jb250YWluZXJOb2RlKCktPmlzRGVzY2VuZGFudE9mKG5vZGUpKQogICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgIAorCiAgICAgVmlzaWJsZVBvc2l0aW9uIHByZXZpb3VzID0gdmlz
aWJsZVBvc2l0aW9uLnByZXZpb3VzKCk7CiAgICAgcmV0dXJuIHByZXZpb3VzLmlzTnVsbCgpIHx8
ICFwcmV2aW91cy5kZWVwRXF1aXZhbGVudCgpLm5vZGUoKS0+aXNEZXNjZW5kYW50T2Yobm9kZSk7
CiB9CkBAIC02NTgsMTAgKzY1NCwxMCBAQCBib29sIGlzTGFzdFZpc2libGVQb3NpdGlvbkluTm9k
ZShjb25zdCBWCiB7CiAgICAgaWYgKHZpc2libGVQb3NpdGlvbi5pc051bGwoKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIAotICAgIGlmICghdmlzaWJsZVBvc2l0aW9uLmRlZXBFcXVpdmFs
ZW50KCkubm9kZSgpLT5pc0Rlc2NlbmRhbnRPZihub2RlKSkKKworICAgIGlmICghdmlzaWJsZVBv
c2l0aW9uLmRlZXBFcXVpdmFsZW50KCkuY29udGFpbmVyTm9kZSgpLT5pc0Rlc2NlbmRhbnRPZihu
b2RlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIAorCiAgICAgVmlz
aWJsZVBvc2l0aW9uIG5leHQgPSB2aXNpYmxlUG9zaXRpb24ubmV4dCgpOwogICAgIHJldHVybiBu
ZXh0LmlzTnVsbCgpIHx8ICFuZXh0LmRlZXBFcXVpdmFsZW50KCkubm9kZSgpLT5pc0Rlc2NlbmRh
bnRPZihub2RlKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVBvc2l0
aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlUG9zaXRp
b24uaAkocmV2aXNpb24gNzgwMjcpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVQ
b3NpdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC01NCw3ICs1NCw2IEBAIHB1YmxpYzoKICAgICAv
LyBOT1RFOiBVUFNUUkVBTSBhZmZpbml0eSB3aWxsIGJlIHVzZWQgb25seSBpZiBwb3MgaXMgYXQg
ZW5kIG9mIGEgd3JhcHBlZCBsaW5lLAogICAgIC8vIG90aGVyd2lzZSBpdCB3aWxsIGJlIGNvbnZl
cnRlZCB0byBET1dOU1RSRUFNCiAgICAgVmlzaWJsZVBvc2l0aW9uKCkgOiBtX2FmZmluaXR5KFZQ
X0RFRkFVTFRfQUZGSU5JVFkpIHsgfQotICAgIFZpc2libGVQb3NpdGlvbihOb2RlKiwgaW50IG9m
ZnNldCwgRUFmZmluaXR5KTsKICAgICBWaXNpYmxlUG9zaXRpb24oY29uc3QgUG9zaXRpb24mLCBF
QWZmaW5pdHkgPSBWUF9ERUZBVUxUX0FGRklOSVRZKTsKIAogICAgIHZvaWQgY2xlYXIoKSB7IG1f
ZGVlcFBvc2l0aW9uLmNsZWFyKCk7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaHRt
bGVkaXRpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaHRtbGVk
aXRpbmcuY3BwCShyZXZpc2lvbiA3ODAyNykKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaHRt
bGVkaXRpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MjYsNyArNDI2LDcgQEAgc3RhdGljIE5v
ZGUqIGZpcnN0SW5TcGVjaWFsRWxlbWVudChjb25zdAogICAgIGZvciAoTm9kZSogbiA9IHBvcy5u
b2RlKCk7IG4gJiYgbi0+cm9vdEVkaXRhYmxlRWxlbWVudCgpID09IHJvb3RFZGl0YWJsZUVsZW1l
bnQ7IG4gPSBuLT5wYXJlbnROb2RlKCkpCiAgICAgICAgIGlmIChpc1NwZWNpYWxFbGVtZW50KG4p
KSB7CiAgICAgICAgICAgICBWaXNpYmxlUG9zaXRpb24gdlBvcyA9IFZpc2libGVQb3NpdGlvbihw
b3MsIERPV05TVFJFQU0pOwotICAgICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIGZpcnN0SW5FbGVt
ZW50ID0gVmlzaWJsZVBvc2l0aW9uKG4sIDAsIERPV05TVFJFQU0pOworICAgICAgICAgICAgVmlz
aWJsZVBvc2l0aW9uIGZpcnN0SW5FbGVtZW50ID0gVmlzaWJsZVBvc2l0aW9uKGZpcnN0UG9zaXRp
b25Jbk9yQmVmb3JlTm9kZShuKSwgRE9XTlNUUkVBTSk7CiAgICAgICAgICAgICBpZiAoaXNUYWJs
ZUVsZW1lbnQobikgJiYgdlBvcyA9PSBmaXJzdEluRWxlbWVudC5uZXh0KCkpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIG47CiAgICAgICAgICAgICBpZiAodlBvcyA9PSBmaXJzdEluRWxlbWVudCkK
QEAgLTQ0Miw3ICs0NDIsNyBAQCBzdGF0aWMgTm9kZSogbGFzdEluU3BlY2lhbEVsZW1lbnQoY29u
c3QgCiAgICAgZm9yIChOb2RlKiBuID0gcG9zLm5vZGUoKTsgbiAmJiBuLT5yb290RWRpdGFibGVF
bGVtZW50KCkgPT0gcm9vdEVkaXRhYmxlRWxlbWVudDsgbiA9IG4tPnBhcmVudE5vZGUoKSkKICAg
ICAgICAgaWYgKGlzU3BlY2lhbEVsZW1lbnQobikpIHsKICAgICAgICAgICAgIFZpc2libGVQb3Np
dGlvbiB2UG9zID0gVmlzaWJsZVBvc2l0aW9uKHBvcywgRE9XTlNUUkVBTSk7Ci0gICAgICAgICAg
ICBWaXNpYmxlUG9zaXRpb24gbGFzdEluRWxlbWVudCA9IFZpc2libGVQb3NpdGlvbihuLCBuLT5j
aGlsZE5vZGVDb3VudCgpLCBET1dOU1RSRUFNKTsKKyAgICAgICAgICAgIFZpc2libGVQb3NpdGlv
biBsYXN0SW5FbGVtZW50ID0gVmlzaWJsZVBvc2l0aW9uKFBvc2l0aW9uKG4sIG4tPmNoaWxkTm9k
ZUNvdW50KCksIFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3IpLCBET1dOU1RSRUFN
KTsKICAgICAgICAgICAgIGlmIChpc1RhYmxlRWxlbWVudChuKSAmJiB2UG9zID09IGxhc3RJbkVs
ZW1lbnQucHJldmlvdXMoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gbjsKICAgICAgICAgICAg
IGlmICh2UG9zID09IGxhc3RJbkVsZW1lbnQpCkBAIC01MTksNyArNTE5LDcgQEAgVmlzaWJsZVBv
c2l0aW9uIHZpc2libGVQb3NpdGlvbkJlZm9yZU5vZAogewogICAgIEFTU0VSVChub2RlKTsKICAg
ICBpZiAobm9kZS0+Y2hpbGROb2RlQ291bnQoKSkKLSAgICAgICAgcmV0dXJuIFZpc2libGVQb3Np
dGlvbihub2RlLCAwLCBET1dOU1RSRUFNKTsKKyAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlv
bihmaXJzdFBvc2l0aW9uSW5PckJlZm9yZU5vZGUobm9kZSksIERPV05TVFJFQU0pOwogICAgIEFT
U0VSVChub2RlLT5wYXJlbnROb2RlKCkpOwogICAgIHJldHVybiBwb3NpdGlvbkluUGFyZW50QmVm
b3JlTm9kZShub2RlKTsKIH0KQEAgLTUyOSw3ICs1MjksNyBAQCBWaXNpYmxlUG9zaXRpb24gdmlz
aWJsZVBvc2l0aW9uQWZ0ZXJOb2RlCiB7CiAgICAgQVNTRVJUKG5vZGUpOwogICAgIGlmIChub2Rl
LT5jaGlsZE5vZGVDb3VudCgpKQotICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKG5vZGUs
IG5vZGUtPmNoaWxkTm9kZUNvdW50KCksIERPV05TVFJFQU0pOworICAgICAgICByZXR1cm4gVmlz
aWJsZVBvc2l0aW9uKGxhc3RQb3NpdGlvbkluT3JBZnRlck5vZGUobm9kZSksIERPV05TVFJFQU0p
OwogICAgIEFTU0VSVChub2RlLT5wYXJlbnROb2RlKCkpOwogICAgIHJldHVybiBwb3NpdGlvbklu
UGFyZW50QWZ0ZXJOb2RlKG5vZGUpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy92
aXNpYmxlX3VuaXRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL3Zp
c2libGVfdW5pdHMuY3BwCShyZXZpc2lvbiA3ODAyNykKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvdmlzaWJsZV91bml0cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3NywxMyArMzc3LDggQEAg
c3RhdGljIFZpc2libGVQb3NpdGlvbiBzdGFydFBvc2l0aW9uRm9yTAogICAgICAgICBzdGFydEJv
eCA9IHN0YXJ0Qm94LT5uZXh0TGVhZkNoaWxkKCk7CiAgICAgfQogICAgIAotICAgIGludCBzdGFy
dE9mZnNldCA9IDA7Ci0gICAgaWYgKHN0YXJ0Qm94LT5pc0lubGluZVRleHRCb3goKSkgewotICAg
ICAgICBJbmxpbmVUZXh0Qm94ICpzdGFydFRleHRCb3ggPSBzdGF0aWNfY2FzdDxJbmxpbmVUZXh0
Qm94ICo+KHN0YXJ0Qm94KTsKLSAgICAgICAgc3RhcnRPZmZzZXQgPSBzdGFydFRleHRCb3gtPnN0
YXJ0KCk7Ci0gICAgfQotICAKLSAgICBWaXNpYmxlUG9zaXRpb24gdmlzUG9zID0gVmlzaWJsZVBv
c2l0aW9uKHN0YXJ0Tm9kZSwgc3RhcnRPZmZzZXQsIERPV05TVFJFQU0pOworICAgIFZpc2libGVQ
b3NpdGlvbiB2aXNQb3MgPSBzdGFydEJveC0+aXNJbmxpbmVUZXh0Qm94KCkgPyBWaXNpYmxlUG9z
aXRpb24oUG9zaXRpb24oc3RhcnROb2RlLCBzdGF0aWNfY2FzdDxJbmxpbmVUZXh0Qm94ICo+KHN0
YXJ0Qm94KS0+c3RhcnQoKSwgUG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvciksIERP
V05TVFJFQU0pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA6IFZpc2libGVQb3NpdGlvbihwb3NpdGlvbkJlZm9yZU5vZGUoc3RhcnROb2Rl
KSwgRE9XTlNUUkVBTSk7CiAgICAgcmV0dXJuIHBvc2l0aW9uQXZvaWRpbmdGaXJzdFBvc2l0aW9u
SW5UYWJsZSh2aXNQb3MpOwogfQogCkBAIC00MjksMTcgKzQyNCwxOSBAQCBzdGF0aWMgVmlzaWJs
ZVBvc2l0aW9uIGVuZFBvc2l0aW9uRm9yTGluCiAgICAgICAgIGVuZEJveCA9IGVuZEJveC0+cHJl
dkxlYWZDaGlsZCgpOwogICAgIH0KICAgICAKLSAgICBpbnQgZW5kT2Zmc2V0ID0gMTsKKyAgICBQ
b3NpdGlvbiBwb3M7CiAgICAgaWYgKGVuZE5vZGUtPmhhc1RhZ05hbWUoYnJUYWcpKSB7Ci0gICAg
ICAgIGVuZE9mZnNldCA9IDA7CisgICAgICAgIHBvcyA9IHBvc2l0aW9uQmVmb3JlTm9kZShlbmRO
b2RlKTsKICAgICB9IGVsc2UgaWYgKGVuZEJveC0+aXNJbmxpbmVUZXh0Qm94KCkpIHsKICAgICAg
ICAgSW5saW5lVGV4dEJveCAqZW5kVGV4dEJveCA9IHN0YXRpY19jYXN0PElubGluZVRleHRCb3gg
Kj4oZW5kQm94KTsKLSAgICAgICAgZW5kT2Zmc2V0ID0gZW5kVGV4dEJveC0+c3RhcnQoKTsKKyAg
ICAgICAgaW50IGVuZE9mZnNldCA9IGVuZFRleHRCb3gtPnN0YXJ0KCk7CiAgICAgICAgIGlmICgh
ZW5kVGV4dEJveC0+aXNMaW5lQnJlYWsoKSkKICAgICAgICAgICAgIGVuZE9mZnNldCArPSBlbmRU
ZXh0Qm94LT5sZW4oKTsKLSAgICB9CisgICAgICAgIHBvcyA9IFBvc2l0aW9uKGVuZE5vZGUsIGVu
ZE9mZnNldCwgUG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvcik7CisgICAgfSBlbHNl
CisgICAgICAgIHBvcyA9IHBvc2l0aW9uQWZ0ZXJOb2RlKGVuZE5vZGUpOwogICAgIAotICAgIHJl
dHVybiBWaXNpYmxlUG9zaXRpb24oZW5kTm9kZSwgZW5kT2Zmc2V0LCBWUF9VUFNUUkVBTV9JRl9Q
T1NTSUJMRSk7CisgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihwb3MsIFZQX1VQU1RSRUFNX0lG
X1BPU1NJQkxFKTsKIH0KIAogVmlzaWJsZVBvc2l0aW9uIGVuZE9mTGluZShjb25zdCBWaXNpYmxl
UG9zaXRpb24mIGMpCkBAIC01NzUsNyArNTcyLDcgQEAgVmlzaWJsZVBvc2l0aW9uIHByZXZpb3Vz
TGluZVBvc2l0aW9uKGNvbgogICAgIC8vIE1vdmUgdG8gdGhlIHN0YXJ0IG9mIHRoZSBjb250ZW50
IGluIHRoaXMgYmxvY2ssIHdoaWNoIGVmZmVjdGl2ZWx5IG1vdmVzIHVzCiAgICAgLy8gdG8gdGhl
IHN0YXJ0IG9mIHRoZSBsaW5lIHdlJ3JlIG9uLgogICAgIEVsZW1lbnQqIHJvb3RFbGVtZW50ID0g
bm9kZS0+aXNDb250ZW50RWRpdGFibGUoKSA/IG5vZGUtPnJvb3RFZGl0YWJsZUVsZW1lbnQoKSA6
IG5vZGUtPmRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgpOwotICAgIHJldHVybiBWaXNpYmxl
UG9zaXRpb24ocm9vdEVsZW1lbnQsIDAsIERPV05TVFJFQU0pOworICAgIHJldHVybiBWaXNpYmxl
UG9zaXRpb24oZmlyc3RQb3NpdGlvbkluTm9kZShyb290RWxlbWVudCksIERPV05TVFJFQU0pOwog
fQogCiBzdGF0aWMgTm9kZSogbmV4dExlYWZXaXRoU2FtZUVkaXRhYmlsaXR5KE5vZGUqIG5vZGUs
IGludCBvZmZzZXQpCkBAIC02ODAsNyArNjc3LDcgQEAgVmlzaWJsZVBvc2l0aW9uIG5leHRMaW5l
UG9zaXRpb24oY29uc3QgVgogICAgIC8vIE1vdmUgdG8gdGhlIGVuZCBvZiB0aGUgY29udGVudCBp
biB0aGlzIGJsb2NrLCB3aGljaCBlZmZlY3RpdmVseSBtb3ZlcyB1cwogICAgIC8vIHRvIHRoZSBl
bmQgb2YgdGhlIGxpbmUgd2UncmUgb24uCiAgICAgRWxlbWVudCogcm9vdEVsZW1lbnQgPSBub2Rl
LT5pc0NvbnRlbnRFZGl0YWJsZSgpID8gbm9kZS0+cm9vdEVkaXRhYmxlRWxlbWVudCgpIDogbm9k
ZS0+ZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCk7Ci0gICAgcmV0dXJuIFZpc2libGVQb3Np
dGlvbihyb290RWxlbWVudCwgcm9vdEVsZW1lbnQgPyByb290RWxlbWVudC0+Y2hpbGROb2RlQ291
bnQoKSA6IDAsIERPV05TVFJFQU0pOworICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24obGFzdFBv
c2l0aW9uSW5Ob2RlKHJvb3RFbGVtZW50KSwgRE9XTlNUUkVBTSk7CiB9CiAKIC8vIC0tLS0tLS0t
LQpAQCAtNzUyLDYgKzc0OSw3IEBAIFZpc2libGVQb3NpdGlvbiBzdGFydE9mUGFyYWdyYXBoKGNv
bnN0IFYKIAogICAgIE5vZGUgKm5vZGUgPSBzdGFydE5vZGU7CiAgICAgaW50IG9mZnNldCA9IHAu
ZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKTsKKyAgICBQb3NpdGlvbjo6QW5jaG9yVHlwZSB0eXBl
ID0gcC5hbmNob3JUeXBlKCk7CiAKICAgICBOb2RlICpuID0gc3RhcnROb2RlOwogICAgIHdoaWxl
IChuKSB7CkBAIC03NzIsNiArNzcwLDcgQEAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0T2ZQYXJhZ3Jh
cGgoY29uc3QgVgogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgaWYgKHItPmlzVGV4dCgp
ICYmIHItPmNhcmV0TWF4UmVuZGVyZWRPZmZzZXQoKSA+IDApIHsKKyAgICAgICAgICAgIHR5cGUg
PSBQb3NpdGlvbjo6UG9zaXRpb25Jc09mZnNldEluQW5jaG9yOwogICAgICAgICAgICAgaWYgKHN0
eWxlLT5wcmVzZXJ2ZU5ld2xpbmUoKSkgewogICAgICAgICAgICAgICAgIGNvbnN0IFVDaGFyKiBj
aGFycyA9IHRvUmVuZGVyVGV4dChyKS0+Y2hhcmFjdGVycygpOwogICAgICAgICAgICAgICAgIGlu
dCBpID0gdG9SZW5kZXJUZXh0KHIpLT50ZXh0TGVuZ3RoKCk7CkBAIC03ODAsMjAgKzc3OSwyMyBA
QCBWaXNpYmxlUG9zaXRpb24gc3RhcnRPZlBhcmFncmFwaChjb25zdCBWCiAgICAgICAgICAgICAg
ICAgICAgIGkgPSBtYXgoMCwgbyk7CiAgICAgICAgICAgICAgICAgd2hpbGUgKC0taSA+PSAwKQog
ICAgICAgICAgICAgICAgICAgICBpZiAoY2hhcnNbaV0gPT0gJ1xuJykKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24obiwgaSArIDEsIERPV05TVFJFQU0pOwor
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihQb3NpdGlvbihu
LCBpICsgMSwgUG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvciksIERPV05TVFJFQU0p
OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbm9kZSA9IG47CiAgICAgICAgICAgICBvZmZz
ZXQgPSAwOwogICAgICAgICAgICAgbiA9IG4tPnRyYXZlcnNlUHJldmlvdXNOb2RlUG9zdE9yZGVy
KHN0YXJ0QmxvY2spOwogICAgICAgICB9IGVsc2UgaWYgKGVkaXRpbmdJZ25vcmVzQ29udGVudChu
KSB8fCBpc1RhYmxlRWxlbWVudChuKSkgewogICAgICAgICAgICAgbm9kZSA9IG47Ci0gICAgICAg
ICAgICBvZmZzZXQgPSAwOworICAgICAgICAgICAgdHlwZSA9IFBvc2l0aW9uOjpQb3NpdGlvbklz
QmVmb3JlQW5jaG9yOwogICAgICAgICAgICAgbiA9IG4tPnByZXZpb3VzU2libGluZygpID8gbi0+
cHJldmlvdXNTaWJsaW5nKCkgOiBuLT50cmF2ZXJzZVByZXZpb3VzTm9kZVBvc3RPcmRlcihzdGFy
dEJsb2NrKTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBuID0gbi0+dHJhdmVyc2VQcmV2
aW91c05vZGVQb3N0T3JkZXIoc3RhcnRCbG9jayk7CiAgICAgfQogCi0gICAgcmV0dXJuIFZpc2li
bGVQb3NpdGlvbihub2RlLCBvZmZzZXQsIERPV05TVFJFQU0pOworICAgIGlmICh0eXBlID09IFBv
c2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3IpCisgICAgICAgIHJldHVybiBWaXNpYmxl
UG9zaXRpb24oUG9zaXRpb24obm9kZSwgb2Zmc2V0LCB0eXBlKSwgRE9XTlNUUkVBTSk7CisgICAg
CisgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihQb3NpdGlvbihub2RlLCB0eXBlKSwgRE9XTlNU
UkVBTSk7CiB9CiAKIFZpc2libGVQb3NpdGlvbiBlbmRPZlBhcmFncmFwaChjb25zdCBWaXNpYmxl
UG9zaXRpb24gJmMsIEVkaXRpbmdCb3VuZGFyeUNyb3NzaW5nUnVsZSBib3VuZGFyeUNyb3NzaW5n
UnVsZSkKQEAgLTgxMiw2ICs4MTQsNyBAQCBWaXNpYmxlUG9zaXRpb24gZW5kT2ZQYXJhZ3JhcGgo
Y29uc3QgVmlzCiAgICAgCiAgICAgTm9kZSAqbm9kZSA9IHN0YXJ0Tm9kZTsKICAgICBpbnQgb2Zm
c2V0ID0gcC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpOworICAgIFBvc2l0aW9uOjpBbmNob3JU
eXBlIHR5cGUgPSBwLmFuY2hvclR5cGUoKTsKIAogICAgIE5vZGUgKm4gPSBzdGFydE5vZGU7CiAg
ICAgd2hpbGUgKG4pIHsKQEAgLTgzNCwyNSArODM3LDI5IEBAIFZpc2libGVQb3NpdGlvbiBlbmRP
ZlBhcmFncmFwaChjb25zdCBWaXMKICAgICAgICAgLy8gRklYTUU6IFdlIGF2b2lkIHJldHVybmlu
ZyBhIHBvc2l0aW9uIHdoZXJlIHRoZSByZW5kZXJlciBjYW4ndCBhY2NlcHQgdGhlIGNhcmV0Lgog
ICAgICAgICBpZiAoci0+aXNUZXh0KCkgJiYgci0+Y2FyZXRNYXhSZW5kZXJlZE9mZnNldCgpID4g
MCkgewogICAgICAgICAgICAgaW50IGxlbmd0aCA9IHRvUmVuZGVyVGV4dChyKS0+dGV4dExlbmd0
aCgpOworICAgICAgICAgICAgdHlwZSA9IFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNo
b3I7CiAgICAgICAgICAgICBpZiAoc3R5bGUtPnByZXNlcnZlTmV3bGluZSgpKSB7CiAgICAgICAg
ICAgICAgICAgY29uc3QgVUNoYXIqIGNoYXJzID0gdG9SZW5kZXJUZXh0KHIpLT5jaGFyYWN0ZXJz
KCk7CiAgICAgICAgICAgICAgICAgaW50IG8gPSBuID09IHN0YXJ0Tm9kZSA/IG9mZnNldCA6IDA7
CiAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IG87IGkgPCBsZW5ndGg7ICsraSkKICAgICAg
ICAgICAgICAgICAgICAgaWYgKGNoYXJzW2ldID09ICdcbicpCi0gICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKG4sIGksIERPV05TVFJFQU0pOworICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihQb3NpdGlvbihuLCBpLCBQb3Np
dGlvbjo6UG9zaXRpb25Jc09mZnNldEluQW5jaG9yKSwgRE9XTlNUUkVBTSk7CiAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICBub2RlID0gbjsKICAgICAgICAgICAgIG9mZnNldCA9IHItPmNhcmV0
TWF4T2Zmc2V0KCk7CiAgICAgICAgICAgICBuID0gbi0+dHJhdmVyc2VOZXh0Tm9kZShzdGF5SW5z
aWRlQmxvY2spOwogICAgICAgICB9IGVsc2UgaWYgKGVkaXRpbmdJZ25vcmVzQ29udGVudChuKSB8
fCBpc1RhYmxlRWxlbWVudChuKSkgewogICAgICAgICAgICAgbm9kZSA9IG47Ci0gICAgICAgICAg
ICBvZmZzZXQgPSBsYXN0T2Zmc2V0Rm9yRWRpdGluZyhuKTsKKyAgICAgICAgICAgIHR5cGUgPSBQ
b3NpdGlvbjo6UG9zaXRpb25Jc0FmdGVyQW5jaG9yOwogICAgICAgICAgICAgbiA9IG4tPnRyYXZl
cnNlTmV4dFNpYmxpbmcoc3RheUluc2lkZUJsb2NrKTsKICAgICAgICAgfSBlbHNlCiAgICAgICAg
ICAgICBuID0gbi0+dHJhdmVyc2VOZXh0Tm9kZShzdGF5SW5zaWRlQmxvY2spOwogICAgIH0KIAot
ICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24obm9kZSwgb2Zmc2V0LCBET1dOU1RSRUFNKTsKKyAg
ICBpZiAodHlwZSA9PSBQb3NpdGlvbjo6UG9zaXRpb25Jc09mZnNldEluQW5jaG9yKQorICAgICAg
ICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKFBvc2l0aW9uKG5vZGUsIG9mZnNldCwgdHlwZSksIERP
V05TVFJFQU0pOworCisgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihQb3NpdGlvbihub2RlLCB0
eXBlKSwgRE9XTlNUUkVBTSk7CiB9CiAKIFZpc2libGVQb3NpdGlvbiBzdGFydE9mTmV4dFBhcmFn
cmFwaChjb25zdCBWaXNpYmxlUG9zaXRpb24mIHZpc2libGVQb3NpdGlvbikKQEAgLTkyNiw3ICs5
MzMsNyBAQCBWaXNpYmxlUG9zaXRpb24gZW5kT2ZCbG9jayhjb25zdCBWaXNpYmxlCiAKICAgICBO
b2RlICpzdGFydEJsb2NrID0gc3RhcnROb2RlLT5lbmNsb3NpbmdCbG9ja0Zsb3dFbGVtZW50KCk7
CiAgICAgCi0gICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihzdGFydEJsb2NrLCBzdGFydEJsb2Nr
LT5jaGlsZE5vZGVDb3VudCgpLCBWUF9ERUZBVUxUX0FGRklOSVRZKTsgICAKKyAgICByZXR1cm4g
VmlzaWJsZVBvc2l0aW9uKGxhc3RQb3NpdGlvbkluTm9kZShzdGFydEJsb2NrKSwgVlBfREVGQVVM
VF9BRkZJTklUWSk7ICAgCiB9CiAKIGJvb2wgaW5TYW1lQmxvY2soY29uc3QgVmlzaWJsZVBvc2l0
aW9uICZhLCBjb25zdCBWaXNpYmxlUG9zaXRpb24gJmIpCkBAIC05NTEsNyArOTU4LDcgQEAgVmlz
aWJsZVBvc2l0aW9uIHN0YXJ0T2ZEb2N1bWVudChjb25zdCBObwogICAgIGlmICghbm9kZSkKICAg
ICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbigpOwogICAgIAotICAgIHJldHVybiBWaXNpYmxl
UG9zaXRpb24obm9kZS0+ZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCksIDAsIERPV05TVFJF
QU0pOworICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oZmlyc3RQb3NpdGlvbkluTm9kZShub2Rl
LT5kb2N1bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKSksIERPV05TVFJFQU0pOwogfQogCiBWaXNp
YmxlUG9zaXRpb24gc3RhcnRPZkRvY3VtZW50KGNvbnN0IFZpc2libGVQb3NpdGlvbiAmYykKQEAg
LTk2NSw3ICs5NzIsNyBAQCBWaXNpYmxlUG9zaXRpb24gZW5kT2ZEb2N1bWVudChjb25zdCBOb2Rl
CiAgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oKTsKICAgICAKICAgICBFbGVtZW50KiBk
b2MgPSBub2RlLT5kb2N1bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKTsKLSAgICByZXR1cm4gVmlz
aWJsZVBvc2l0aW9uKGRvYywgZG9jLT5jaGlsZE5vZGVDb3VudCgpLCBET1dOU1RSRUFNKTsKKyAg
ICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKGxhc3RQb3NpdGlvbkluTm9kZShkb2MpLCBET1dOU1RS
RUFNKTsKIH0KIAogVmlzaWJsZVBvc2l0aW9uIGVuZE9mRG9jdW1lbnQoY29uc3QgVmlzaWJsZVBv
c2l0aW9uICZjKQpAQCAtMTEyMSw5ICsxMTI4LDggQEAgc3RhdGljIFZpc2libGVQb3NpdGlvbiBs
b2dpY2FsU3RhcnRQb3NpdAogICAgIGlmICghbG9naWNhbFN0YXJ0Tm9kZSkKICAgICAgICAgcmV0
dXJuIFZpc2libGVQb3NpdGlvbigpOwogCi0gICAgaW50IHN0YXJ0T2Zmc2V0ID0gbG9naWNhbFN0
YXJ0Qm94LT5jYXJldE1pbk9mZnNldCgpOwotICAKLSAgICBWaXNpYmxlUG9zaXRpb24gdmlzUG9z
ID0gVmlzaWJsZVBvc2l0aW9uKGxvZ2ljYWxTdGFydE5vZGUsIHN0YXJ0T2Zmc2V0LCBET1dOU1RS
RUFNKTsKKyAgICBWaXNpYmxlUG9zaXRpb24gdmlzUG9zID0gbG9naWNhbFN0YXJ0Tm9kZS0+aXNU
ZXh0Tm9kZSgpID8gVmlzaWJsZVBvc2l0aW9uKFBvc2l0aW9uKGxvZ2ljYWxTdGFydE5vZGUsIGxv
Z2ljYWxTdGFydEJveC0+Y2FyZXRNaW5PZmZzZXQoKSwgUG9zaXRpb246OlBvc2l0aW9uSXNPZmZz
ZXRJbkFuY2hvciksIERPV05TVFJFQU0pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFZpc2libGVQb3NpdGlvbihwb3NpdGlvbkJl
Zm9yZU5vZGUobG9naWNhbFN0YXJ0Tm9kZSksIERPV05TVFJFQU0pOwogICAgIHJldHVybiBwb3Np
dGlvbkF2b2lkaW5nRmlyc3RQb3NpdGlvbkluVGFibGUodmlzUG9zKTsKIH0KIApAQCAtMTE1Nywx
NyArMTE2MywxOSBAQCBzdGF0aWMgVmlzaWJsZVBvc2l0aW9uIGxvZ2ljYWxFbmRQb3NpdGlvCiAg
ICAgaWYgKCFsb2dpY2FsRW5kTm9kZSkKICAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbigp
OwogICAgIAotICAgIGludCBlbmRPZmZzZXQgPSAxOworICAgIFBvc2l0aW9uIHBvczsKICAgICBp
ZiAobG9naWNhbEVuZE5vZGUtPmhhc1RhZ05hbWUoYnJUYWcpKQotICAgICAgICBlbmRPZmZzZXQg
PSAwOworICAgICAgICBwb3MgPSBwb3NpdGlvbkJlZm9yZU5vZGUobG9naWNhbEVuZE5vZGUpOwog
ICAgIGVsc2UgaWYgKGxvZ2ljYWxFbmRCb3gtPmlzSW5saW5lVGV4dEJveCgpKSB7CiAgICAgICAg
IElubGluZVRleHRCb3gqIGVuZFRleHRCb3ggPSBzdGF0aWNfY2FzdDxJbmxpbmVUZXh0Qm94Kj4o
bG9naWNhbEVuZEJveCk7Ci0gICAgICAgIGVuZE9mZnNldCA9IGVuZFRleHRCb3gtPnN0YXJ0KCk7
CisgICAgICAgIGludCBlbmRPZmZzZXQgPSBlbmRUZXh0Qm94LT5zdGFydCgpOwogICAgICAgICBp
ZiAoIWVuZFRleHRCb3gtPmlzTGluZUJyZWFrKCkpCiAgICAgICAgICAgICBlbmRPZmZzZXQgKz0g
ZW5kVGV4dEJveC0+bGVuKCk7Ci0gICAgfQorICAgICAgICBwb3MgPSBQb3NpdGlvbihsb2dpY2Fs
RW5kTm9kZSwgZW5kT2Zmc2V0LCBQb3NpdGlvbjo6UG9zaXRpb25Jc09mZnNldEluQW5jaG9yKTsK
KyAgICB9IGVsc2UKKyAgICAgICAgcG9zID0gcG9zaXRpb25BZnRlck5vZGUobG9naWNhbEVuZE5v
ZGUpOwogICAgIAotICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24obG9naWNhbEVuZE5vZGUsIGVu
ZE9mZnNldCwgVlBfVVBTVFJFQU1fSUZfUE9TU0lCTEUpOworICAgIHJldHVybiBWaXNpYmxlUG9z
aXRpb24ocG9zLCBWUF9VUFNUUkVBTV9JRl9QT1NTSUJMRSk7CiB9CiAKIGJvb2wgaW5TYW1lTG9n
aWNhbExpbmUoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBhLCBjb25zdCBWaXNpYmxlUG9zaXRpb24m
IGIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVNlbGVjdGlvbi5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9ET01TZWxlY3Rpb24uY3BwCShyZXZpc2lvbiA3ODAy
NykKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NU2VsZWN0aW9uLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjExLDcgKzIxMSw4IEBAIHZvaWQgRE9NU2VsZWN0aW9uOjpjb2xsYXBzZShOb2RlKiBu
b2RlLCAKICAgICBpZiAoIWlzVmFsaWRGb3JQb3NpdGlvbihub2RlKSkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgbV9mcmFtZS0+c2VsZWN0aW9uKCktPm1vdmVUbyhWaXNpYmxlUG9zaXRpb24obm9k
ZSwgb2Zmc2V0LCBET1dOU1RSRUFNKSk7CisgICAgLy8gRklYTUU6IEVsaW1pbmF0ZSBsZWdhY3kg
ZWRpdGluZyBwb3NpdGlvbnMKKyAgICBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+bW92ZVRvKFZpc2li
bGVQb3NpdGlvbihQb3NpdGlvbihub2RlLCBvZmZzZXQpLCBET1dOU1RSRUFNKSk7CiB9CiAKIHZv
aWQgRE9NU2VsZWN0aW9uOjpjb2xsYXBzZVRvRW5kKEV4Y2VwdGlvbkNvZGUmIGVjKQpAQCAtMjY0
LDggKzI2NSw5IEBAIHZvaWQgRE9NU2VsZWN0aW9uOjpzZXRCYXNlQW5kRXh0ZW50KE5vZGUKICAg
ICBpZiAoIWlzVmFsaWRGb3JQb3NpdGlvbihiYXNlTm9kZSkgfHwgIWlzVmFsaWRGb3JQb3NpdGlv
bihleHRlbnROb2RlKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgVmlzaWJsZVBvc2l0aW9uIHZp
c2libGVCYXNlID0gVmlzaWJsZVBvc2l0aW9uKGJhc2VOb2RlLCBiYXNlT2Zmc2V0LCBET1dOU1RS
RUFNKTsKLSAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZUV4dGVudCA9IFZpc2libGVQb3NpdGlv
bihleHRlbnROb2RlLCBleHRlbnRPZmZzZXQsIERPV05TVFJFQU0pOworICAgIC8vIEZJWE1FOiBF
bGltaW5hdGUgbGVnYWN5IGVkaXRpbmcgcG9zaXRpb25zCisgICAgVmlzaWJsZVBvc2l0aW9uIHZp
c2libGVCYXNlID0gVmlzaWJsZVBvc2l0aW9uKFBvc2l0aW9uKGJhc2VOb2RlLCBiYXNlT2Zmc2V0
KSwgRE9XTlNUUkVBTSk7CisgICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVFeHRlbnQgPSBWaXNp
YmxlUG9zaXRpb24oUG9zaXRpb24oZXh0ZW50Tm9kZSwgZXh0ZW50T2Zmc2V0KSwgRE9XTlNUUkVB
TSk7CiAKICAgICBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+bW92ZVRvKHZpc2libGVCYXNlLCB2aXNp
YmxlRXh0ZW50KTsKIH0KQEAgLTI4Miw3ICsyODQsOCBAQCB2b2lkIERPTVNlbGVjdGlvbjo6c2V0
UG9zaXRpb24oTm9kZSogbm9kCiAgICAgaWYgKCFpc1ZhbGlkRm9yUG9zaXRpb24obm9kZSkpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIG1fZnJhbWUtPnNlbGVjdGlvbigpLT5tb3ZlVG8oVmlzaWJs
ZVBvc2l0aW9uKG5vZGUsIG9mZnNldCwgRE9XTlNUUkVBTSkpOworICAgIC8vIEZJWE1FOiBFbGlt
aW5hdGUgbGVnYWN5IGVkaXRpbmcgcG9zaXRpb25zCisgICAgbV9mcmFtZS0+c2VsZWN0aW9uKCkt
Pm1vdmVUbyhWaXNpYmxlUG9zaXRpb24oUG9zaXRpb24obm9kZSwgb2Zmc2V0KSwgRE9XTlNUUkVB
TSkpOwogfQogCiB2b2lkIERPTVNlbGVjdGlvbjo6bW9kaWZ5KGNvbnN0IFN0cmluZyYgYWx0ZXJT
dHJpbmcsIGNvbnN0IFN0cmluZyYgZGlyZWN0aW9uU3RyaW5nLCBjb25zdCBTdHJpbmcmIGdyYW51
bGFyaXR5U3RyaW5nKQpAQCAtMzUzLDcgKzM1Niw4IEBAIHZvaWQgRE9NU2VsZWN0aW9uOjpleHRl
bmQoTm9kZSogbm9kZSwgaW4KICAgICBpZiAoIWlzVmFsaWRGb3JQb3NpdGlvbihub2RlKSkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgbV9mcmFtZS0+c2VsZWN0aW9uKCktPnNldEV4dGVudChWaXNp
YmxlUG9zaXRpb24obm9kZSwgb2Zmc2V0LCBET1dOU1RSRUFNKSk7CisgICAgLy8gRklYTUU6IEVs
aW1pbmF0ZSBsZWdhY3kgZWRpdGluZyBwb3NpdGlvbnMKKyAgICBtX2ZyYW1lLT5zZWxlY3Rpb24o
KS0+c2V0RXh0ZW50KFZpc2libGVQb3NpdGlvbihQb3NpdGlvbihub2RlLCBvZmZzZXQpLCBET1dO
U1RSRUFNKSk7CiB9CiAKIFBhc3NSZWZQdHI8UmFuZ2U+IERPTVNlbGVjdGlvbjo6Z2V0UmFuZ2VB
dChpbnQgaW5kZXgsIEV4Y2VwdGlvbkNvZGUmIGVjKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFn
ZS9FdmVudEhhbmRsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRXZl
bnRIYW5kbGVyLmNwcAkocmV2aXNpb24gNzgwMjcpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0V2
ZW50SGFuZGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3Myw3ICszNzMsNyBAQCBib29sIEV2
ZW50SGFuZGxlcjo6aGFuZGxlTW91c2VQcmVzc0V2ZW50CiAKICAgICBWaXNpYmxlUG9zaXRpb24g
dmlzaWJsZVBvcyhpbm5lck5vZGUtPnJlbmRlcmVyKCktPnBvc2l0aW9uRm9yUG9pbnQoZXZlbnQu
bG9jYWxQb2ludCgpKSk7CiAgICAgaWYgKHZpc2libGVQb3MuaXNOdWxsKCkpCi0gICAgICAgIHZp
c2libGVQb3MgPSBWaXNpYmxlUG9zaXRpb24oaW5uZXJOb2RlLCAwLCBET1dOU1RSRUFNKTsKKyAg
ICAgICAgdmlzaWJsZVBvcyA9IFZpc2libGVQb3NpdGlvbihmaXJzdFBvc2l0aW9uSW5PckJlZm9y
ZU5vZGUoaW5uZXJOb2RlKSwgRE9XTlNUUkVBTSk7CiAgICAgUG9zaXRpb24gcG9zID0gdmlzaWJs
ZVBvcy5kZWVwRXF1aXZhbGVudCgpOwogICAgIAogICAgIFZpc2libGVTZWxlY3Rpb24gbmV3U2Vs
ZWN0aW9uID0gbV9mcmFtZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAJKHJldmlzaW9uIDc4MDI3KQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI2NTQsNyArMjY1NCw4IEBAIFZpc2libGVQb3NpdGlvbiBSZW5kZXJPYmplY3Q6OmNyZWF0
ZVZpc2kKICAgICAgICAgICAgIGlmIChjYW5kaWRhdGUubm9kZSgpLT5pc0NvbnRlbnRFZGl0YWJs
ZSgpKQogICAgICAgICAgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oY2FuZGlkYXRlLCBh
ZmZpbml0eSk7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihub2Rl
LCBvZmZzZXQsIGFmZmluaXR5KTsKKyAgICAgICAgLy8gRklYTUU6IEVsaW1pbmF0ZSBsZWdhY3kg
ZWRpdGluZyBwb3NpdGlvbnMKKyAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihQb3NpdGlv
bihub2RlLCBvZmZzZXQpLCBhZmZpbml0eSk7CiAgICAgfQogCiAgICAgLy8gV2UgZG9uJ3Qgd2Fu
dCB0byBjcm9zcyB0aGUgYm91bmRhcnkgYmV0d2VlbiBlZGl0YWJsZSBhbmQgbm9uLWVkaXRhYmxl
CkBAIC0yNjY5LDcgKzI2NzAsNyBAQCBWaXNpYmxlUG9zaXRpb24gUmVuZGVyT2JqZWN0OjpjcmVh
dGVWaXNpCiAgICAgICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBjaGlsZDsKICAgICAgICAg
d2hpbGUgKChyZW5kZXJlciA9IHJlbmRlcmVyLT5uZXh0SW5QcmVPcmRlcihwYXJlbnQpKSkgewog
ICAgICAgICAgICAgaWYgKE5vZGUqIG5vZGUgPSByZW5kZXJlci0+bm9kZSgpKQotICAgICAgICAg
ICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24obm9kZSwgMCwgRE9XTlNUUkVBTSk7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihmaXJzdFBvc2l0aW9uSW5PckJlZm9y
ZU5vZGUobm9kZSksIERPV05TVFJFQU0pOwogICAgICAgICB9CiAKICAgICAgICAgLy8gRmluZCBu
b24tYW5vbnltb3VzIGNvbnRlbnQgYmVmb3JlLgpAQCAtMjY3OCwxMiArMjY3OSwxMiBAQCBWaXNp
YmxlUG9zaXRpb24gUmVuZGVyT2JqZWN0OjpjcmVhdGVWaXNpCiAgICAgICAgICAgICBpZiAocmVu
ZGVyZXIgPT0gcGFyZW50KQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgaWYg
KE5vZGUqIG5vZGUgPSByZW5kZXJlci0+bm9kZSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBW
aXNpYmxlUG9zaXRpb24obGFzdERlZXBFZGl0aW5nUG9zaXRpb25Gb3JOb2RlKG5vZGUpLCBET1dO
U1RSRUFNKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKGxhc3RQb3Np
dGlvbkluT3JBZnRlck5vZGUobm9kZSksIERPV05TVFJFQU0pOwogICAgICAgICB9CiAKICAgICAg
ICAgLy8gVXNlIHRoZSBwYXJlbnQgaXRzZWxmIHVubGVzcyBpdCB0b28gaXMgYW5vbnltb3VzLgog
ICAgICAgICBpZiAoTm9kZSogbm9kZSA9IHBhcmVudC0+bm9kZSgpKQotICAgICAgICAgICAgcmV0
dXJuIFZpc2libGVQb3NpdGlvbihub2RlLCAwLCBET1dOU1RSRUFNKTsKKyAgICAgICAgICAgIHJl
dHVybiBWaXNpYmxlUG9zaXRpb24oZmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2RlKG5vZGUpLCBE
T1dOU1RSRUFNKTsKIAogICAgICAgICAvLyBSZXBlYXQgYXQgdGhlIG5leHQgbGV2ZWwgdXAuCiAg
ICAgICAgIGNoaWxkID0gcGFyZW50OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRleHRDb250cm9sLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGV4dENvbnRyb2wuY3BwCShyZXZpc2lvbiA3ODAyNykKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMy
MSw3ICszMjEsNyBAQCBQYXNzUmVmUHRyPFJhbmdlPiBSZW5kZXJUZXh0Q29udHJvbDo6c2VsCiBW
aXNpYmxlUG9zaXRpb24gUmVuZGVyVGV4dENvbnRyb2w6OnZpc2libGVQb3NpdGlvbkZvckluZGV4
KGludCBpbmRleCkgY29uc3QKIHsKICAgICBpZiAoaW5kZXggPD0gMCkKLSAgICAgICAgcmV0dXJu
IFZpc2libGVQb3NpdGlvbihtX2lubmVyVGV4dC5nZXQoKSwgMCwgRE9XTlNUUkVBTSk7CisgICAg
ICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oUG9zaXRpb24obV9pbm5lclRleHQuZ2V0KCksIDAs
IFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3IpLCBET1dOU1RSRUFNKTsKICAgICBF
eGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gUmFuZ2U6OmNy
ZWF0ZShkb2N1bWVudCgpKTsKICAgICByYW5nZS0+c2VsZWN0Tm9kZUNvbnRlbnRzKG1faW5uZXJU
ZXh0LmdldCgpLCBlYyk7CkBAIC0zMzIsNyArMzMyLDcgQEAgVmlzaWJsZVBvc2l0aW9uIFJlbmRl
clRleHRDb250cm9sOjp2aXNpYgogICAgIEFTU0VSVCghZWMpOwogICAgIGludCBlbmRPZmZzZXQg
PSBpdC5yYW5nZSgpLT5lbmRPZmZzZXQoZWMpOwogICAgIEFTU0VSVCghZWMpOwotICAgIHJldHVy
biBWaXNpYmxlUG9zaXRpb24oZW5kQ29udGFpbmVyLCBlbmRPZmZzZXQsIFVQU1RSRUFNKTsKKyAg
ICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKFBvc2l0aW9uKGVuZENvbnRhaW5lciwgZW5kT2Zmc2V0
LCBQb3NpdGlvbjo6UG9zaXRpb25Jc09mZnNldEluQW5jaG9yKSwgVVBTVFJFQU0pOwogfQogCiBp
bnQgUmVuZGVyVGV4dENvbnRyb2w6OmluZGV4Rm9yVmlzaWJsZVBvc2l0aW9uKGNvbnN0IFZpc2li
bGVQb3NpdGlvbiYgcG9zKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RleHRD
b250ZW50RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1Rl
eHRDb250ZW50RWxlbWVudC5jcHAJKHJldmlzaW9uIDc4MDI3KQorKysgU291cmNlL1dlYkNvcmUv
c3ZnL1NWR1RleHRDb250ZW50RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0NSw3ICsx
NDUsNyBAQCB2b2lkIFNWR1RleHRDb250ZW50RWxlbWVudDo6c2VsZWN0U3ViU3RyCiAgICAgICAg
IHJldHVybjsKIAogICAgIC8vIEZpbmQgc2VsZWN0aW9uIHN0YXJ0Ci0gICAgVmlzaWJsZVBvc2l0
aW9uIHN0YXJ0KGNvbnN0X2Nhc3Q8U1ZHVGV4dENvbnRlbnRFbGVtZW50Kj4odGhpcyksIDAsIFNF
TF9ERUZBVUxUX0FGRklOSVRZKTsKKyAgICBWaXNpYmxlUG9zaXRpb24gc3RhcnQoZmlyc3RQb3Np
dGlvbkluTm9kZShjb25zdF9jYXN0PFNWR1RleHRDb250ZW50RWxlbWVudCo+KHRoaXMpKSk7CiAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNoYXJudW07ICsraSkKICAgICAgICAgc3RhcnQg
PSBzdGFydC5uZXh0KCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDc4MDI3KQor
KysgU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEs
MTkgQEAKKzIwMTEtMDItMDggIExldmkgV2VpbnRyYXViICA8bGV2aXdAY2hyb21pdW0ub3JnPgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFN0b3AgaW5z
dGFudGlhdGluZyBsZWdhY3kgZWRpdGluZyBQb3NpdGlvbnMgaW4gVmlzaWJsZVBvc2l0aW9uCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MjkxOQorCisg
ICAgICAgIENoYW5naW5nIHVzYWdlIG9mIGxlZ2FjeSBWaXNpYmxlUG9zaXRpb24gY29uc3RydWN0
b3IuIFNpbmNlIHdlIHdlcmUgZGVhbGluZworICAgICAgICB3aXRoIHBvc2l0aW9ucyBmcm9tIERP
TSBSYW5nZXMsIHdlJ3JlIGd1YXJhbnRlZWQgYSBwYXJlbnQtYW5jaG9yZWQgcG9zaXRpb24uCisK
KyAgICAgICAgKiBXZWJWaWV3L1dlYkZyYW1lLm1tOgorICAgICAgICAoLVtXZWJGcmFtZSBfY2Fy
ZXRSZWN0QXRQb3NpdGlvbjphZmZpbml0eTpdKToKKyAgICAgICAgKiBXZWJWaWV3L1dlYkZyYW1l
SW50ZXJuYWwuaDoKKyAgICAgICAgKiBXZWJWaWV3L1dlYlRleHRDb21wbGV0aW9uQ29udHJvbGxl
ci5tbToKKyAgICAgICAgKC1bV2ViVGV4dENvbXBsZXRpb25Db250cm9sbGVyIGRvQ29tcGxldGlv
bl0pOgorCiAyMDExLTAyLTA4ICBEYW4gQmVybnN0ZWluICA8bWl0ekBhcHBsZS5jb20+CiAKICAg
ICAgICAgUmV2aWV3ZWQgYnkgSm9uIEhvbmV5Y3V0dCBhbmQgTWFjaWVqIFN0YWNob3dpYWsuCklu
ZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0JKHJldmlzaW9uIDc4MDI3KQor
KysgU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQkod29ya2luZyBjb3B5KQpA
QCAtNjYwLDkgKzY2MCw5IEBAIC0gKE5TU3RyaW5nICopX3N0cmluZ0J5RXZhbHVhdGluZ0phdmFT
Y3IKICAgICByZXR1cm4gdXN0cmluZ1RvU3RyaW5nKHJlc3VsdC50b1N0cmluZyhfcHJpdmF0ZS0+
Y29yZUZyYW1lLT5zY3JpcHQoKS0+Z2xvYmFsT2JqZWN0KG1haW5UaHJlYWROb3JtYWxXb3JsZCgp
KS0+Z2xvYmFsRXhlYygpKSk7CiB9CiAKLS0gKE5TUmVjdClfY2FyZXRSZWN0QXROb2RlOihET01O
b2RlICopbm9kZSBvZmZzZXQ6KGludClvZmZzZXQgYWZmaW5pdHk6KE5TU2VsZWN0aW9uQWZmaW5p
dHkpYWZmaW5pdHkKKy0gKE5TUmVjdClfY2FyZXRSZWN0QXRQb3NpdGlvbjooY29uc3QgUG9zaXRp
b24mKXBvcyBhZmZpbml0eTooTlNTZWxlY3Rpb25BZmZpbml0eSlhZmZpbml0eQogewotICAgIFZp
c2libGVQb3NpdGlvbiB2aXNpYmxlUG9zaXRpb24oY29yZShub2RlKSwgb2Zmc2V0LCBzdGF0aWNf
Y2FzdDxFQWZmaW5pdHk+KGFmZmluaXR5KSk7CisgICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQ
b3NpdGlvbihwb3MsIHN0YXRpY19jYXN0PEVBZmZpbml0eT4oYWZmaW5pdHkpKTsKICAgICByZXR1
cm4gdmlzaWJsZVBvc2l0aW9uLmFic29sdXRlQ2FyZXRCb3VuZHMoKTsKIH0KIApJbmRleDogU291
cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZUludGVybmFsLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZUludGVybmFsLmgJKHJldmlzaW9uIDc4
MDI3KQorKysgU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZUludGVybmFsLmgJKHdv
cmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpbXBvcnQgIldlYlByZWZlcmVuY2VzUHJp
dmF0ZS5oIgogI2ltcG9ydCA8V2ViQ29yZS9FZGl0QWN0aW9uLmg+CiAjaW1wb3J0IDxXZWJDb3Jl
L0ZyYW1lTG9hZGVyVHlwZXMuaD4KKyNpbXBvcnQgPFdlYkNvcmUvUG9zaXRpb24uaD4KICNpbXBv
cnQgPFdlYkNvcmUvU2VsZWN0aW9uQ29udHJvbGxlci5oPgogI2ltcG9ydCA8V2ViQ29yZS9TZXR0
aW5ncy5oPgogCkBAIC0xMzQsNyArMTM1LDcgQEAgQGludGVyZmFjZSBXZWJGcmFtZSAoV2ViSW50
ZXJuYWwpCiAKIC0gKE5TU3RyaW5nICopX21hcmt1cFN0cmluZ0Zyb21SYW5nZTooRE9NUmFuZ2Ug
KilyYW5nZSBub2RlczooTlNBcnJheSAqKilub2RlczsKIAotLSAoTlNSZWN0KV9jYXJldFJlY3RB
dE5vZGU6KERPTU5vZGUgKilub2RlIG9mZnNldDooaW50KW9mZnNldCBhZmZpbml0eTooTlNTZWxl
Y3Rpb25BZmZpbml0eSlhZmZpbml0eTsKKy0gKE5TUmVjdClfY2FyZXRSZWN0QXRQb3NpdGlvbjoo
Y29uc3QgV2ViQ29yZTo6UG9zaXRpb24mKXBvcyBhZmZpbml0eTooTlNTZWxlY3Rpb25BZmZpbml0
eSlhZmZpbml0eTsKIC0gKE5TUmVjdClfZmlyc3RSZWN0Rm9yRE9NUmFuZ2U6KERPTVJhbmdlICop
cmFuZ2U7CiAtICh2b2lkKV9zY3JvbGxET01SYW5nZVRvVmlzaWJsZTooRE9NUmFuZ2UgKilyYW5n
ZTsKIApJbmRleDogU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJUZXh0Q29tcGxldGlvbkNv
bnRyb2xsZXIubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJU
ZXh0Q29tcGxldGlvbkNvbnRyb2xsZXIubW0JKHJldmlzaW9uIDc4MDI3KQorKysgU291cmNlL1dl
YktpdC9tYWMvV2ViVmlldy9XZWJUZXh0Q29tcGxldGlvbkNvbnRyb2xsZXIubW0JKHdvcmtpbmcg
Y29weSkKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2ltcG9ydCAiV2ViVGV4dENvbXBsZXRpb25Db250
cm9sbGVyLmgiCiAKKyNpbXBvcnQgIkRPTU5vZGVJbnRlcm5hbC5oIgogI2ltcG9ydCAiRE9NUmFu
Z2VJbnRlcm5hbC5oIgogI2ltcG9ydCAiV2ViRnJhbWVJbnRlcm5hbC5oIgogI2ltcG9ydCAiV2Vi
SFRNTFZpZXdJbnRlcm5hbC5oIgpAQCAtMjAzLDcgKzIwNCw3IEBAIC0gKHZvaWQpZG9Db21wbGV0
aW9uCiAgICAgICAgICAgICBBU1NFUlQoIV9vcmlnaW5hbFN0cmluZyk7ICAgICAgIC8vIHRoaXMg
c2hvdWxkIG9ubHkgYmUgc2V0IElGRiB3ZSBoYXZlIGEgcG9wdXAgd2luZG93CiAgICAgICAgICAg
ICBfb3JpZ2luYWxTdHJpbmcgPSBbW2ZyYW1lIF9zdHJpbmdGb3JSYW5nZTpzZWxlY3Rpb25dIHJl
dGFpbl07CiAgICAgICAgICAgICBbc2VsZiBfYnVpbGRVSV07Ci0gICAgICAgICAgICBOU1JlY3Qg
d29yZFJlY3QgPSBbZnJhbWUgX2NhcmV0UmVjdEF0Tm9kZTpbd2hvbGVXb3JkIHN0YXJ0Q29udGFp
bmVyXSBvZmZzZXQ6W3dob2xlV29yZCBzdGFydE9mZnNldF0gYWZmaW5pdHk6TlNTZWxlY3Rpb25B
ZmZpbml0eURvd25zdHJlYW1dOworICAgICAgICAgICAgTlNSZWN0IHdvcmRSZWN0ID0gW2ZyYW1l
IF9jYXJldFJlY3RBdFBvc2l0aW9uOlBvc2l0aW9uKGNvcmUoW3dob2xlV29yZCBzdGFydENvbnRh
aW5lcl0pLCBbd2hvbGVXb3JkIHN0YXJ0T2Zmc2V0XSwgUG9zaXRpb246OlBvc2l0aW9uSXNPZmZz
ZXRJbkFuY2hvcikgYWZmaW5pdHk6TlNTZWxlY3Rpb25BZmZpbml0eURvd25zdHJlYW1dOwogICAg
ICAgICAgICAgLy8gKzEgdG8gYmUgdW5kZXIgdGhlIHdvcmQsIG5vdCB0aGUgY2FyZXQKICAgICAg
ICAgICAgIC8vIEZJWE1FIC0gMzc2OTY1MiAtIFdyb25nIHBvc2l0aW9uaW5nIGZvciByaWdodCB0
byBsZWZ0IGxhbmd1YWdlcy4gIFdlIHNob3VsZCBsaW5lIHVwIHRoZSB1cHBlcgogICAgICAgICAg
ICAgLy8gcmlnaHQgY29ybmVyIHdpdGggdGhlIGNhcmV0IGluc3RlYWQgb2YgdXBwZXIgbGVmdCwg
YW5kIHRoZSArMSB3b3VsZCBiZSBhIC0xLgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>81900</attachid>
            <date>2011-02-09 17:33:48 -0800</date>
            <delta_ts>2011-02-09 17:37:58 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-52919-20110209173347.patch</filename>
            <type>text/plain</type>
            <size>47301</size>
            <attacher name="Levi Weintraub">leviw</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc4MTYyKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsOTAgQEAKKzIwMTEtMDItMDkgIExldmkgV2Vp
bnRyYXViICA8bGV2aXdAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFN0b3AgaW5zdGFudGlhdGluZyBsZWdhY3kgZWRpdGluZyBQ
b3NpdGlvbnMgaW4gVmlzaWJsZVBvc2l0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD01MjkxOQorCisgICAgICAgIENoYW5naW5nIFZpc2libGVQb3Np
dGlvbiBjb21wbGV0ZWx5IGF3YXkgZnJvbSBsZWdhY3kgcG9zaXRpb25zLgorCisgICAgICAgIE5v
IG5ldyB0ZXN0cyBzaW5jZSB0aGlzIGlzIGZ1bmN0aW9uYWx5IGVxdWl2YWxlbnQuCisKKyAgICAg
ICAgKiBXZWJDb3JlLmV4cC5pbjogUmVtb3ZpbmcgdGhlIGxlZ2FjeSBWaXNpYmxlUG9zaXRpb24g
Y29uc3RydWN0b3IgYW5kCisgICAgICAgIGFkZGluZyB0aGUgUG9zaXRpb25Jc09mZnNldEluQW5j
aG9yIHN5bWJvbC4gSWYgd2UgbXVzdCBjcmVhdGUgVmlzaWJsZVBvc2l0aW9ucworICAgICAgICBv
dXRzaWRlIG9mIFdlYkNvcmUsIHRoZXkgc2hvdWxkIGJlIHBhcmVudCBhbmNob3JlZC4KKyAgICAg
ICAgKiBhY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
QVhPYmplY3RDYWNoZTo6dmlzaWJsZVBvc2l0aW9uRm9yVGV4dE1hcmtlckRhdGEpOgorICAgICAg
ICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpzdGFydE9mU3R5bGVSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjplbmRPZlN0eWxlUmFu
Z2UpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojp2aXNpYmxl
UG9zaXRpb25Gb3JJbmRleCk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9ndGsvQWNjZXNzaWJp
bGl0eU9iamVjdFdyYXBwZXJBdGsuY3BwOgorICAgICAgICAob2JqZWN0QW5kT2Zmc2V0VW5pZ25v
cmVkKToKKyAgICAgICAgKiBkb20vUG9zaXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UG9z
aXRpb246OmRvY3VtZW50KTogQWRkZWQgdGhpcyBpbmxpbmUgZnVuY3Rpb24gdG8gYXZvaWQgdGhl
IG5lY2Vzc2l0eQorICAgICAgICBvZiBjYWxsaW5nIGFuY2hvck5vZGUgdG8gYXNzdXJlIGEgZG9j
dW1lbnQgZnJvbSBhIFBvc2l0aW9uLgorICAgICAgICAoV2ViQ29yZTo6UG9zaXRpb246OnVwc3Ry
ZWFtKTogRml4ZWQgdG8gY29ycmVjdGx5IHJlc3BlY3QgUG9zaXRpb25Jc0FmdGVyQW5jaG9yCisg
ICAgICAgIChXZWJDb3JlOjpQb3NpdGlvbjo6ZG93bnN0cmVhbSk6IGRpdHRvCisgICAgICAgICog
ZG9tL1JhbmdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlOjplZGl0aW5nU3RhcnRQb3Np
dGlvbik6CisgICAgICAgICogZWRpdGluZy9FZGl0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RWRpdG9yOjpjYW5EZWxldGVSYW5nZSk6CisgICAgICAgICogZWRpdGluZy9SZXBsYWNlU2VsZWN0
aW9uQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXBsYWNlU2VsZWN0aW9uQ29tbWFu
ZDo6ZG9BcHBseSk6CisgICAgICAgICogZWRpdGluZy9TZWxlY3Rpb25Db250cm9sbGVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdGlvbkNvbnRyb2xsZXI6OnNlbGVjdEZyYW1lRWxlbWVu
dEluUGFyZW50SWZGdWxseVNlbGVjdGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdGlvbkNv
bnRyb2xsZXI6OnNldFNlbGVjdGVkUmFuZ2UpOgorICAgICAgICAqIGVkaXRpbmcvVGV4dEl0ZXJh
dG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRJdGVyYXRvcjo6c2hvdWxkUmVwcmVzZW50
Tm9kZU9mZnNldFplcm8pOgorICAgICAgICAqIGVkaXRpbmcvVHlwaW5nQ29tbWFuZC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpUeXBpbmdDb21tYW5kOjpkZWxldGVLZXlQcmVzc2VkKToKKyAgICAg
ICAgKiBlZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWaXNp
YmxlUG9zaXRpb246OmxlZnRWaXN1YWxseURpc3RpbmN0Q2FuZGlkYXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OlZpc2libGVQb3NpdGlvbjo6cmlnaHRWaXN1YWxseURpc3RpbmN0Q2FuZGlkYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OlZpc2libGVQb3NpdGlvbjo6Y2Fub25pY2FsUG9zaXRpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6VmlzaWJsZVBvc2l0aW9uOjpjaGFyYWN0ZXJBZnRlcik6CisgICAg
ICAgIChXZWJDb3JlOjpWaXNpYmxlUG9zaXRpb246OmxvY2FsQ2FyZXRSZWN0KToKKyAgICAgICAg
KFdlYkNvcmU6Om1ha2VSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpzdGFydFZpc2libGVQb3Np
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjplbmRWaXNpYmxlUG9zaXRpb24pOgorICAgICAgICAo
V2ViQ29yZTo6c2V0U3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6c2V0RW5kKToKKyAgICAgICAg
KFdlYkNvcmU6OmlzRmlyc3RWaXNpYmxlUG9zaXRpb25Jbk5vZGUpOgorICAgICAgICAoV2ViQ29y
ZTo6aXNMYXN0VmlzaWJsZVBvc2l0aW9uSW5Ob2RlKToKKyAgICAgICAgKiBlZGl0aW5nL1Zpc2li
bGVQb3NpdGlvbi5oOgorICAgICAgICAoV2ViQ29yZTo6VmlzaWJsZVBvc2l0aW9uOjpWaXNpYmxl
UG9zaXRpb24pOgorICAgICAgICAqIGVkaXRpbmcvaHRtbGVkaXRpbmcuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Zmlyc3RJblNwZWNpYWxFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6Omxhc3RJ
blNwZWNpYWxFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OnZpc2libGVQb3NpdGlvbkJlZm9y
ZU5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6dmlzaWJsZVBvc2l0aW9uQWZ0ZXJOb2RlKToKKyAg
ICAgICAgKiBlZGl0aW5nL3Zpc2libGVfdW5pdHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6c3Rh
cnRQb3NpdGlvbkZvckxpbmUpOgorICAgICAgICAoV2ViQ29yZTo6ZW5kUG9zaXRpb25Gb3JMaW5l
KToKKyAgICAgICAgKFdlYkNvcmU6OnByZXZpb3VzTGluZVBvc2l0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6Om5leHRMaW5lUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6c3RhcnRPZlBhcmFn
cmFwaCk6CisgICAgICAgIChXZWJDb3JlOjplbmRPZlBhcmFncmFwaCk6CisgICAgICAgIChXZWJD
b3JlOjplbmRPZkJsb2NrKToKKyAgICAgICAgKFdlYkNvcmU6OnN0YXJ0T2ZEb2N1bWVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjplbmRPZkRvY3VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OmxvZ2lj
YWxTdGFydFBvc2l0aW9uRm9yTGluZSk6CisgICAgICAgIChXZWJDb3JlOjpsb2dpY2FsRW5kUG9z
aXRpb25Gb3JMaW5lKToKKyAgICAgICAgKiBwYWdlL0RPTVNlbGVjdGlvbi5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpET01TZWxlY3Rpb246OmNvbGxhcHNlKToKKyAgICAgICAgKFdlYkNvcmU6OkRP
TVNlbGVjdGlvbjo6c2V0QmFzZUFuZEV4dGVudCk6CisgICAgICAgIChXZWJDb3JlOjpET01TZWxl
Y3Rpb246OnNldFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTVNlbGVjdGlvbjo6ZXh0
ZW5kKToKKyAgICAgICAgKiBwYWdlL0V2ZW50SGFuZGxlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpFdmVudEhhbmRsZXI6OmhhbmRsZU1vdXNlUHJlc3NFdmVudFNpbmdsZUNsaWNrKToKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ck9iamVjdDo6Y3JlYXRlVmlzaWJsZVBvc2l0aW9uKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyVGV4dENvbnRyb2wuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2w6
OnZpc2libGVQb3NpdGlvbkZvckluZGV4KToKKyAgICAgICAgKiBzdmcvU1ZHVGV4dENvbnRlbnRF
bGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRDb250ZW50RWxlbWVudDo6c2Vs
ZWN0U3ViU3RyaW5nKToKKwogMjAxMS0wMi0wOSAgQmV0aCBEYWtpbiAgPGJkYWtpbkBhcHBsZS5j
b20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU2ltb24gRnJhc2VyLgpJbmRleDogU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5leHAuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS5leHAuaW4JKHJldmlzaW9uIDc4MTYyKQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAu
aW4JKHdvcmtpbmcgY29weSkKQEAgLTQwMiw3ICs0MDIsNiBAQCBfX1pON1dlYkNvcmUxNVNjcm9s
bEFsaWdubWVudDE5YWxpZ25Ub0VkCiBfX1pON1dlYkNvcmUxNVN0cmluZ1RydW5jYXRvcjEzcmln
aHRUcnVuY2F0ZUVSS04zV1RGNlN0cmluZ0VmUktOU180Rm9udEViCiBfX1pON1dlYkNvcmUxNVN0
cmluZ1RydW5jYXRvcjE0Y2VudGVyVHJ1bmNhdGVFUktOM1dURjZTdHJpbmdFZlJLTlNfNEZvbnRF
YgogX19aTjdXZWJDb3JlMTVTdHJpbmdUcnVuY2F0b3I1d2lkdGhFUktOM1dURjZTdHJpbmdFUktO
U180Rm9udEViCi1fX1pON1dlYkNvcmUxNVZpc2libGVQb3NpdGlvbkMxRVBOU180Tm9kZUVpTlNf
OUVBZmZpbml0eUUKIF9fWk43V2ViQ29yZTE1VmlzaWJsZVBvc2l0aW9uQzFFUktOU184UG9zaXRp
b25FTlNfOUVBZmZpbml0eUUKIF9fWk43V2ViQ29yZTE1ZGVmYXVsdExhbmd1YWdlRXYKIF9fWk43
V2ViQ29yZTE1cmVwb3J0RXhjZXB0aW9uRVBOM0pTQzlFeGVjU3RhdGVFTlMwXzdKU1ZhbHVlRQpA
QCAtNzg1LDYgKzc4NCw3IEBAIF9fWk43V2ViQ29yZThHcmFkaWVudDEyYWRkQ29sb3JTdG9wRWZS
S04KIF9fWk43V2ViQ29yZThHcmFkaWVudEMxRVJLTlNfMTBGbG9hdFBvaW50RVMzXwogX19aTjdX
ZWJDb3JlOEludFBvaW50QzFFUks4X05TUG9pbnQKIF9fWk43V2ViQ29yZThQb3NpdGlvbkMxRU4z
V1RGMTBQYXNzUmVmUHRySU5TXzROb2RlRUVFaQorX19aTjdXZWJDb3JlOFBvc2l0aW9uQzFFTjNX
VEYxMFBhc3NSZWZQdHJJTlNfNE5vZGVFRUVpTlMwXzEwQW5jaG9yVHlwZUUKIF9fWk43V2ViQ29y
ZThTZXR0aW5nczE0c2V0SmF2YUVuYWJsZWRFYgogX19aTjdXZWJDb3JlOFNldHRpbmdzMTVzZXRX
ZWJHTEVuYWJsZWRFYgogX19aTjdXZWJDb3JlOFNldHRpbmdzMTZzZXRVc2VzUGFnZUNhY2hlRWIK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNw
cAkocmV2aXNpb24gNzgxNjIpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2Jq
ZWN0Q2FjaGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NzMsNyArNTczLDggQEAgVmlzaWJsZVBv
c2l0aW9uIEFYT2JqZWN0Q2FjaGU6OnZpc2libGVQbwogICAgIGlmICghaXNOb2RlSW5Vc2UodGV4
dE1hcmtlckRhdGEubm9kZSkpCiAgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oKTsKICAg
ICAKLSAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvcyA9IFZpc2libGVQb3NpdGlvbih0ZXh0
TWFya2VyRGF0YS5ub2RlLCB0ZXh0TWFya2VyRGF0YS5vZmZzZXQsIHRleHRNYXJrZXJEYXRhLmFm
ZmluaXR5KTsKKyAgICAvLyBGSVhNRTogQWNjZXNzYWJpbGl0eSBzaG91bGQgbWFrZSBpdCBjbGVh
ciB0aGVzZSBhcmUgRE9NLWNvbXBsaWFudCBvZmZzZXRzIG9yIHN0b3JlIFBvc2l0aW9uIG9iamVj
dHMuCisgICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3MgPSBWaXNpYmxlUG9zaXRpb24oUG9z
aXRpb24odGV4dE1hcmtlckRhdGEubm9kZSwgdGV4dE1hcmtlckRhdGEub2Zmc2V0KSwgdGV4dE1h
cmtlckRhdGEuYWZmaW5pdHkpOwogICAgIFBvc2l0aW9uIGRlZXBQb3MgPSB2aXNpYmxlUG9zLmRl
ZXBFcXVpdmFsZW50KCk7CiAgICAgaWYgKGRlZXBQb3MuaXNOdWxsKCkpCiAgICAgICAgIHJldHVy
biBWaXNpYmxlUG9zaXRpb24oKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
QWNjZXNzaWJpbGl0eU9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAkocmV2aXNpb24gNzgxNjIpCisrKyBT
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMzYsNyArMzM2LDcgQEAgc3RhdGljIFZpc2libGVQb3NpdGlvbiBzdGFy
dE9mU3R5bGVSYW5nZQogICAgICAgICBzdGFydFJlbmRlcmVyID0gcjsKICAgICB9CiAKLSAgICBy
ZXR1cm4gVmlzaWJsZVBvc2l0aW9uKHN0YXJ0UmVuZGVyZXItPm5vZGUoKSwgMCwgVlBfREVGQVVM
VF9BRkZJTklUWSk7CisgICAgcmV0dXJuIGZpcnN0UG9zaXRpb25Jbk9yQmVmb3JlTm9kZShzdGFy
dFJlbmRlcmVyLT5ub2RlKCkpOwogfQogCiBzdGF0aWMgVmlzaWJsZVBvc2l0aW9uIGVuZE9mU3R5
bGVSYW5nZShjb25zdCBWaXNpYmxlUG9zaXRpb24mIHZpc2libGVQb3MpCkBAIC0zNTksNyArMzU5
LDcgQEAgc3RhdGljIFZpc2libGVQb3NpdGlvbiBlbmRPZlN0eWxlUmFuZ2UoYwogICAgICAgICBl
bmRSZW5kZXJlciA9IHI7CiAgICAgfQogCi0gICAgcmV0dXJuIGxhc3REZWVwRWRpdGluZ1Bvc2l0
aW9uRm9yTm9kZShlbmRSZW5kZXJlci0+bm9kZSgpKTsKKyAgICByZXR1cm4gbGFzdFBvc2l0aW9u
SW5PckFmdGVyTm9kZShlbmRSZW5kZXJlci0+bm9kZSgpKTsKIH0KIAogVmlzaWJsZVBvc2l0aW9u
UmFuZ2UgQWNjZXNzaWJpbGl0eU9iamVjdDo6c3R5bGVSYW5nZUZvclBvc2l0aW9uKGNvbnN0IFZp
c2libGVQb3NpdGlvbiYgdmlzaWJsZVBvcykgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNw
cAkocmV2aXNpb24gNzgxNjIpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vz
c2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDU5LDE0ICsyNDU5
LDE0IEBAIFZpc2libGVQb3NpdGlvbiBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWMKICAgICAgICAg
cmV0dXJuIFZpc2libGVQb3NpdGlvbigpOwogICAgIAogICAgIGlmIChpbmRleCA8PSAwKQotICAg
ICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKG5vZGUsIDAsIERPV05TVFJFQU0pOworICAgICAg
ICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKGZpcnN0UG9zaXRpb25Jbk9yQmVmb3JlTm9kZShub2Rl
KSwgRE9XTlNUUkVBTSk7CiAgICAgCiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgUmVm
UHRyPFJhbmdlPiByYW5nZSA9IFJhbmdlOjpjcmVhdGUobV9yZW5kZXJlci0+ZG9jdW1lbnQoKSk7
CiAgICAgcmFuZ2UtPnNlbGVjdE5vZGVDb250ZW50cyhub2RlLCBlYyk7CiAgICAgQ2hhcmFjdGVy
SXRlcmF0b3IgaXQocmFuZ2UuZ2V0KCkpOwogICAgIGl0LmFkdmFuY2UoaW5kZXggLSAxKTsKLSAg
ICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKGl0LnJhbmdlKCktPmVuZENvbnRhaW5lcihlYyksIGl0
LnJhbmdlKCktPmVuZE9mZnNldChlYyksIFVQU1RSRUFNKTsKKyAgICByZXR1cm4gVmlzaWJsZVBv
c2l0aW9uKFBvc2l0aW9uKGl0LnJhbmdlKCktPmVuZENvbnRhaW5lcihlYyksIGl0LnJhbmdlKCkt
PmVuZE9mZnNldChlYyksIFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3IpLCBVUFNU
UkVBTSk7CiB9CiAgICAgCiBpbnQgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6aW5kZXhGb3JW
aXNpYmxlUG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBwb3MpIGNvbnN0CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9BY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBl
ckF0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsv
QWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJBdGsuY3BwCShyZXZpc2lvbiA3ODE2MikKKysrIFNv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVy
QXRrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUwMCw3ICsyNTAwLDcgQEAgQWNjZXNzaWJpbGl0
eU9iamVjdCogb2JqZWN0QW5kT2Zmc2V0VW5pZwogCiAgICAgTm9kZSogbm9kZSA9IHJlYWxPYmpl
Y3QtPm5vZGUoKTsKICAgICBpZiAobm9kZSkgewotICAgICAgICBWaXNpYmxlUG9zaXRpb24gc3Rh
cnRQb3NpdGlvbiA9IFZpc2libGVQb3NpdGlvbihub2RlLCAwLCBET1dOU1RSRUFNKTsKKyAgICAg
ICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0UG9zaXRpb24gPSBWaXNpYmxlUG9zaXRpb24ocG9zaXRp
b25CZWZvcmVOb2RlKG5vZGUpLCBET1dOU1RSRUFNKTsKICAgICAgICAgVmlzaWJsZVBvc2l0aW9u
IGVuZFBvc2l0aW9uID0gcmVhbE9iamVjdC0+c2VsZWN0aW9uKCkudmlzaWJsZUVuZCgpOwogCiAg
ICAgICAgIGlmIChzdGFydFBvc2l0aW9uID09IGVuZFBvc2l0aW9uKQpJbmRleDogU291cmNlL1dl
YkNvcmUvZG9tL1Bvc2l0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20v
UG9zaXRpb24uY3BwCShyZXZpc2lvbiA3ODE2MikKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Qb3Np
dGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxMyw3ICs1MTMsOCBAQCBQb3NpdGlvbiBQb3Np
dGlvbjo6dXBzdHJlYW0oRWRpdGluZ0JvdW5kCiAgICAgCiAgICAgLy8gaXRlcmF0ZSBiYWNrd2Fy
ZCBmcm9tIHRoZXJlLCBsb29raW5nIGZvciBhIHF1YWxpZmllZCBwb3NpdGlvbgogICAgIE5vZGUq
IGJvdW5kYXJ5ID0gZW5jbG9zaW5nVmlzdWFsQm91bmRhcnkoc3RhcnROb2RlKTsKLSAgICBQb3Np
dGlvbkl0ZXJhdG9yIGxhc3RWaXNpYmxlID0gKnRoaXM7CisgICAgLy8gRklYTUU6IFBvc2l0aW9u
SXRlcmF0b3Igc2hvdWxkIHJlc3BlY3QgQmVmb3JlIGFuZCBBZnRlciBwb3NpdGlvbnMuCisgICAg
UG9zaXRpb25JdGVyYXRvciBsYXN0VmlzaWJsZSA9IG1fYW5jaG9yVHlwZSA9PSBQb3NpdGlvbklz
QWZ0ZXJBbmNob3IgPyBQb3NpdGlvbihtX2FuY2hvck5vZGUsIGNhcmV0TWF4T2Zmc2V0KG1fYW5j
aG9yTm9kZS5nZXQoKSkpIDogKnRoaXM7CiAgICAgUG9zaXRpb25JdGVyYXRvciBjdXJyZW50UG9z
ID0gbGFzdFZpc2libGU7CiAgICAgYm9vbCBzdGFydEVkaXRhYmxlID0gc3RhcnROb2RlLT5pc0Nv
bnRlbnRFZGl0YWJsZSgpOwogICAgIE5vZGUqIGxhc3ROb2RlID0gc3RhcnROb2RlOwpAQCAtNjM0
LDcgKzYzNSw4IEBAIFBvc2l0aW9uIFBvc2l0aW9uOjpkb3duc3RyZWFtKEVkaXRpbmdCb3UKIAog
ICAgIC8vIGl0ZXJhdGUgZm9yd2FyZCBmcm9tIHRoZXJlLCBsb29raW5nIGZvciBhIHF1YWxpZmll
ZCBwb3NpdGlvbgogICAgIE5vZGUqIGJvdW5kYXJ5ID0gZW5jbG9zaW5nVmlzdWFsQm91bmRhcnko
c3RhcnROb2RlKTsKLSAgICBQb3NpdGlvbkl0ZXJhdG9yIGxhc3RWaXNpYmxlID0gKnRoaXM7Cisg
ICAgLy8gRklYTUU6IFBvc2l0aW9uSXRlcmF0b3Igc2hvdWxkIHJlc3BlY3QgQmVmb3JlIGFuZCBB
ZnRlciBwb3NpdGlvbnMuCisgICAgUG9zaXRpb25JdGVyYXRvciBsYXN0VmlzaWJsZSA9IG1fYW5j
aG9yVHlwZSA9PSBQb3NpdGlvbklzQWZ0ZXJBbmNob3IgPyBQb3NpdGlvbihtX2FuY2hvck5vZGUs
IGNhcmV0TWF4T2Zmc2V0KG1fYW5jaG9yTm9kZS5nZXQoKSkpIDogKnRoaXM7CiAgICAgUG9zaXRp
b25JdGVyYXRvciBjdXJyZW50UG9zID0gbGFzdFZpc2libGU7CiAgICAgYm9vbCBzdGFydEVkaXRh
YmxlID0gc3RhcnROb2RlLT5pc0NvbnRlbnRFZGl0YWJsZSgpOwogICAgIE5vZGUqIGxhc3ROb2Rl
ID0gc3RhcnROb2RlOwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1Bvc2l0aW9uLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1Bvc2l0aW9uLmgJKHJldmlzaW9uIDc4MTYyKQor
KysgU291cmNlL1dlYkNvcmUvZG9tL1Bvc2l0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNyw2
ICsxMDcsOCBAQCBwdWJsaWM6CiAgICAgLy8gd2lsbCBiZSB0cmVhdGVkIGFzIGJlZm9yZSBpZ25v
cmVkTm9kZSAodGh1cyBub2RlKCkgaXMgcmVhbGx5IGFmdGVyIHRoZSBwb3NpdGlvbiwgbm90IGNv
bnRhaW5pbmcgaXQpLgogICAgIE5vZGUqIG5vZGUoKSBjb25zdCB7IHJldHVybiBtX2FuY2hvck5v
ZGUuZ2V0KCk7IH0KIAorICAgIERvY3VtZW50KiBkb2N1bWVudCgpIGNvbnN0IHsgcmV0dXJuIG1f
YW5jaG9yTm9kZSA/IG1fYW5jaG9yTm9kZS0+ZG9jdW1lbnQoKSA6IDA7IH0KKwogICAgIC8vIFRo
ZXNlIHNob3VsZCBvbmx5IGJlIHVzZWQgZm9yIFBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvciBwb3Np
dGlvbnMsIHVubGVzcwogICAgIC8vIHRoZSBwb3NpdGlvbiBpcyBhIGxlZ2FjeSBlZGl0aW5nIHBv
c2l0aW9uLgogICAgIHZvaWQgbW92ZVRvUG9zaXRpb24oUGFzc1JlZlB0cjxOb2RlPiBhbmNob3JO
b2RlLCBpbnQgb2Zmc2V0KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmNwcAkocmV2aXNpb24gNzgxNjIp
CisrKyBTb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTcw
LDcgKzE1NzAsNyBAQCBQb3NpdGlvbiBSYW5nZTo6ZWRpdGluZ1N0YXJ0UG9zaXRpb24oKSBjCiAg
ICAgLy8gSXQgaXMgaW1wb3J0YW50IHRvIHNraXAgY2VydGFpbiBpcnJlbGV2YW50IGNvbnRlbnQg
YXQgdGhlIHN0YXJ0IG9mIHRoZSBzZWxlY3Rpb24sIHNvIHdlIGRvIG5vdCB3aW5kIHVwIAogICAg
IC8vIHdpdGggYSBzcHVyaW91cyAibWl4ZWQiIHN0eWxlLgogICAgIAotICAgIFZpc2libGVQb3Np
dGlvbiB2aXNpYmxlUG9zaXRpb24obV9zdGFydC5jb250YWluZXIoKSwgbV9zdGFydC5vZmZzZXQo
KSwgVlBfREVGQVVMVF9BRkZJTklUWSk7CisgICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3Np
dGlvbiA9IFBvc2l0aW9uKG1fc3RhcnQuY29udGFpbmVyKCksIG1fc3RhcnQub2Zmc2V0KCksIFBv
c2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3IpOwogICAgIGlmICh2aXNpYmxlUG9zaXRp
b24uaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiBQb3NpdGlvbigpOwogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9FZGl0b3IuY3BwCShyZXZpc2lvbiA3ODE2MikKKysrIFNvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvRWRpdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjkzLDcgKzI5Myw3IEBAIGJvb2wg
RWRpdG9yOjpjYW5EZWxldGVSYW5nZShSYW5nZSogcmFuZ2UKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIAogICAgIGlmIChyYW5nZS0+Y29sbGFwc2VkKGVjKSkgewotICAgICAgICBWaXNpYmxl
UG9zaXRpb24gc3RhcnQoc3RhcnRDb250YWluZXIsIHJhbmdlLT5zdGFydE9mZnNldChlYyksIERP
V05TVFJFQU0pOworICAgICAgICBWaXNpYmxlUG9zaXRpb24gc3RhcnQoUG9zaXRpb24oc3RhcnRD
b250YWluZXIsIHJhbmdlLT5zdGFydE9mZnNldChlYyksIFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zm
c2V0SW5BbmNob3IpLCBET1dOU1RSRUFNKTsKICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHByZXZp
b3VzID0gc3RhcnQucHJldmlvdXMoKTsKICAgICAgICAgLy8gRklYTUU6IFdlIHNvbWV0aW1lcyBh
bGxvdyBkZWxldGlvbnMgYXQgdGhlIHN0YXJ0IG9mIGVkaXRhYmxlIHJvb3RzLCBsaWtlIHdoZW4g
dGhlIGNhcmV0IGlzIGluIGFuIGVtcHR5IGxpc3QgaXRlbS4KICAgICAgICAgaWYgKHByZXZpb3Vz
LmlzTnVsbCgpIHx8IHByZXZpb3VzLmRlZXBFcXVpdmFsZW50KCkubm9kZSgpLT5yb290RWRpdGFi
bGVFbGVtZW50KCkgIT0gc3RhcnRDb250YWluZXItPnJvb3RFZGl0YWJsZUVsZW1lbnQoKSkKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1h
bmQuY3BwCShyZXZpc2lvbiA3ODE2MikKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFj
ZVNlbGVjdGlvbkNvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04ODQsNyArODg0LDcgQEAg
dm9pZCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6ZG9BcHBseSgpCiAgICAgTm9kZSogZW5kQlIg
PSBpbnNlcnRpb25Qb3MuZG93bnN0cmVhbSgpLm5vZGUoKS0+aGFzVGFnTmFtZShiclRhZykgPyBp
bnNlcnRpb25Qb3MuZG93bnN0cmVhbSgpLm5vZGUoKSA6IDA7CiAgICAgVmlzaWJsZVBvc2l0aW9u
IG9yaWdpbmFsVmlzUG9zQmVmb3JlRW5kQlI7CiAgICAgaWYgKGVuZEJSKQotICAgICAgICBvcmln
aW5hbFZpc1Bvc0JlZm9yZUVuZEJSID0gVmlzaWJsZVBvc2l0aW9uKGVuZEJSLCAwLCBET1dOU1RS
RUFNKS5wcmV2aW91cygpOworICAgICAgICBvcmlnaW5hbFZpc1Bvc0JlZm9yZUVuZEJSID0gVmlz
aWJsZVBvc2l0aW9uKHBvc2l0aW9uQmVmb3JlTm9kZShlbmRCUiksIERPV05TVFJFQU0pLnByZXZp
b3VzKCk7CiAgICAgCiAgICAgc3RhcnRCbG9jayA9IGVuY2xvc2luZ0Jsb2NrKGluc2VydGlvblBv
cy5ub2RlKCkpOwogICAgIApJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9TZWxlY3Rpb25D
b250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NlbGVj
dGlvbkNvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiA3ODE2MikKKysrIFNvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvU2VsZWN0aW9uQ29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMTUsOCAr
MTMxNSw4IEBAIHZvaWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6c2VsZWN0RnJhbWVFbGUKIAogICAg
IC8vIENyZWF0ZSBjb21wdXRlIHBvc2l0aW9ucyBiZWZvcmUgYW5kIGFmdGVyIHRoZSBlbGVtZW50
LgogICAgIHVuc2lnbmVkIG93bmVyRWxlbWVudE5vZGVJbmRleCA9IG93bmVyRWxlbWVudC0+bm9k
ZUluZGV4KCk7Ci0gICAgVmlzaWJsZVBvc2l0aW9uIGJlZm9yZU93bmVyRWxlbWVudChWaXNpYmxl
UG9zaXRpb24ob3duZXJFbGVtZW50UGFyZW50LCBvd25lckVsZW1lbnROb2RlSW5kZXgsIFNFTF9E
RUZBVUxUX0FGRklOSVRZKSk7Ci0gICAgVmlzaWJsZVBvc2l0aW9uIGFmdGVyT3duZXJFbGVtZW50
KFZpc2libGVQb3NpdGlvbihvd25lckVsZW1lbnRQYXJlbnQsIG93bmVyRWxlbWVudE5vZGVJbmRl
eCArIDEsIFZQX1VQU1RSRUFNX0lGX1BPU1NJQkxFKSk7CisgICAgVmlzaWJsZVBvc2l0aW9uIGJl
Zm9yZU93bmVyRWxlbWVudChWaXNpYmxlUG9zaXRpb24oUG9zaXRpb24ob3duZXJFbGVtZW50UGFy
ZW50LCBvd25lckVsZW1lbnROb2RlSW5kZXgsIFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5B
bmNob3IpKSk7CisgICAgVmlzaWJsZVBvc2l0aW9uIGFmdGVyT3duZXJFbGVtZW50KFZpc2libGVQ
b3NpdGlvbihQb3NpdGlvbihvd25lckVsZW1lbnRQYXJlbnQsIG93bmVyRWxlbWVudE5vZGVJbmRl
eCArIDEsIFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3IpLCBWUF9VUFNUUkVBTV9J
Rl9QT1NTSUJMRSkpOwogCiAgICAgLy8gRm9jdXMgb24gdGhlIHBhcmVudCBmcmFtZSwgYW5kIHRo
ZW4gc2VsZWN0IGZyb20gYmVmb3JlIHRoaXMgZWxlbWVudCB0byBhZnRlci4KICAgICBWaXNpYmxl
U2VsZWN0aW9uIG5ld1NlbGVjdGlvbihiZWZvcmVPd25lckVsZW1lbnQsIGFmdGVyT3duZXJFbGVt
ZW50KTsKQEAgLTEzODcsOCArMTM4Nyw4IEBAIGJvb2wgU2VsZWN0aW9uQ29udHJvbGxlcjo6c2V0
U2VsZWN0ZWRSYW4KICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIC8vIEZJWE1FOiBD
YW4gd2UgcHJvdmlkZSBleHRlbnRBZmZpbml0eT8KLSAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJs
ZVN0YXJ0KHN0YXJ0Q29udGFpbmVyLCBzdGFydE9mZnNldCwgY29sbGFwc2VkID8gYWZmaW5pdHkg
OiBET1dOU1RSRUFNKTsKLSAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZUVuZChlbmRDb250YWlu
ZXIsIGVuZE9mZnNldCwgU0VMX0RFRkFVTFRfQUZGSU5JVFkpOworICAgIFZpc2libGVQb3NpdGlv
biB2aXNpYmxlU3RhcnQoUG9zaXRpb24oc3RhcnRDb250YWluZXIsIHN0YXJ0T2Zmc2V0LCBQb3Np
dGlvbjo6UG9zaXRpb25Jc09mZnNldEluQW5jaG9yKSwgY29sbGFwc2VkID8gYWZmaW5pdHkgOiBE
T1dOU1RSRUFNKTsKKyAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZUVuZChQb3NpdGlvbihlbmRD
b250YWluZXIsIGVuZE9mZnNldCwgUG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvciks
IFNFTF9ERUZBVUxUX0FGRklOSVRZKTsKICAgICBzZXRTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlv
bih2aXNpYmxlU3RhcnQsIHZpc2libGVFbmQpLCBjbG9zZVR5cGluZyk7CiAgICAgcmV0dXJuIHRy
dWU7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwCShyZXZp
c2lvbiA3ODE2MikKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtODc4LDggKzg3OCw4IEBAIGJvb2wgVGV4dEl0ZXJhdG9yOjpzaG91
bGRSZXByZXNlbnROb2RlT2YKICAgICAvLyBhbmQgaW4gdGhhdCBjYXNlIHdlJ2xsIGdldCBudWxs
LiBXZSBkb24ndCB3YW50IHRvIHB1dCBpbiBuZXdsaW5lcyBhdCB0aGUgc3RhcnQgaW4gdGhhdCBj
YXNlLgogICAgIC8vIFRoZSBjdXJyUG9zLmlzTm90TnVsbCgpIGNoZWNrIGlzIG5lZWRlZCBiZWNh
dXNlIHBvc2l0aW9ucyBpbiBub24tSFRNTCBjb250ZW50CiAgICAgLy8gKGxpa2UgU1ZHKSBkbyBu
b3QgaGF2ZSB2aXNpYmxlIHBvc2l0aW9ucywgYW5kIHdlIGRvbid0IHdhbnQgdG8gZW1pdCBmb3Ig
dGhlbSBlaXRoZXIuCi0gICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0UG9zID0gVmlzaWJsZVBvc2l0
aW9uKG1fc3RhcnRDb250YWluZXIsIG1fc3RhcnRPZmZzZXQsIERPV05TVFJFQU0pOwotICAgIFZp
c2libGVQb3NpdGlvbiBjdXJyUG9zID0gVmlzaWJsZVBvc2l0aW9uKG1fbm9kZSwgMCwgRE9XTlNU
UkVBTSk7CisgICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0UG9zID0gVmlzaWJsZVBvc2l0aW9uKFBv
c2l0aW9uKG1fc3RhcnRDb250YWluZXIsIG1fc3RhcnRPZmZzZXQsIFBvc2l0aW9uOjpQb3NpdGlv
bklzT2Zmc2V0SW5BbmNob3IpLCBET1dOU1RSRUFNKTsKKyAgICBWaXNpYmxlUG9zaXRpb24gY3Vy
clBvcyA9IFZpc2libGVQb3NpdGlvbihwb3NpdGlvbkJlZm9yZU5vZGUobV9ub2RlKSwgRE9XTlNU
UkVBTSk7CiAgICAgcmV0dXJuIHN0YXJ0UG9zLmlzTm90TnVsbCgpICYmIGN1cnJQb3MuaXNOb3RO
dWxsKCkgJiYgIWluU2FtZUxpbmUoc3RhcnRQb3MsIGN1cnJQb3MpOwogfQogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29tbWFuZC5jcHAJKHJldmlzaW9uIDc4MTYyKQorKysg
U291cmNlL1dlYkNvcmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDk1LDcgKzQ5NSw3IEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6ZGVsZXRlS2V5UHJlc3NlZChU
ZXgKICAgICAgICAgICAgIHNlbGVjdGlvbi5tb2RpZnkoU2VsZWN0aW9uQ29udHJvbGxlcjo6QWx0
ZXJhdGlvbkV4dGVuZCwgRGlyZWN0aW9uQmFja3dhcmQsIGdyYW51bGFyaXR5KTsKICAgICAgICAg
Ly8gSWYgdGhlIGNhcmV0IGlzIGp1c3QgYWZ0ZXIgYSB0YWJsZSwgc2VsZWN0IHRoZSB0YWJsZSBh
bmQgZG9uJ3QgZGVsZXRlIGFueXRoaW5nLgogICAgICAgICB9IGVsc2UgaWYgKE5vZGUqIHRhYmxl
ID0gaXNGaXJzdFBvc2l0aW9uQWZ0ZXJUYWJsZSh2aXNpYmxlU3RhcnQpKSB7Ci0gICAgICAgICAg
ICBzZXRFbmRpbmdTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbihwb3NpdGlvbkFmdGVyTm9kZSh0
YWJsZSksIGVuZGluZ1NlbGVjdGlvbigpLnN0YXJ0KCksIERPV05TVFJFQU0pKTsKKyAgICAgICAg
ICAgIHNldEVuZGluZ1NlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKHBvc2l0aW9uQmVmb3JlTm9k
ZSh0YWJsZSksIGVuZGluZ1NlbGVjdGlvbigpLnN0YXJ0KCksIERPV05TVFJFQU0pKTsKICAgICAg
ICAgICAgIHR5cGluZ0FkZGVkVG9PcGVuQ29tbWFuZChEZWxldGVLZXkpOwogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVQ
b3NpdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxl
UG9zaXRpb24uY3BwCShyZXZpc2lvbiA3ODE2MikKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
VmlzaWJsZVBvc2l0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgsMTIgKzQ4LDYgQEAgVmlz
aWJsZVBvc2l0aW9uOjpWaXNpYmxlUG9zaXRpb24oY29uc3QgUAogICAgIGluaXQocG9zLCBhZmZp
bml0eSk7CiB9CiAKLVZpc2libGVQb3NpdGlvbjo6VmlzaWJsZVBvc2l0aW9uKE5vZGUgKm5vZGUs
IGludCBvZmZzZXQsIEVBZmZpbml0eSBhZmZpbml0eSkKLXsKLSAgICBBU1NFUlQob2Zmc2V0ID49
IDApOwotICAgIGluaXQoUG9zaXRpb24obm9kZSwgb2Zmc2V0KSwgYWZmaW5pdHkpOwotfQotCiB2
b2lkIFZpc2libGVQb3NpdGlvbjo6aW5pdChjb25zdCBQb3NpdGlvbiYgcG9zaXRpb24sIEVBZmZp
bml0eSBhZmZpbml0eSkKIHsKICAgICBtX2FmZmluaXR5ID0gYWZmaW5pdHk7CkBAIC0xMDYsNyAr
MTAwLDcgQEAgVmlzaWJsZVBvc2l0aW9uIFZpc2libGVQb3NpdGlvbjo6cHJldmlvdQogUG9zaXRp
b24gVmlzaWJsZVBvc2l0aW9uOjpsZWZ0VmlzdWFsbHlEaXN0aW5jdENhbmRpZGF0ZSgpIGNvbnN0
CiB7CiAgICAgUG9zaXRpb24gcCA9IG1fZGVlcFBvc2l0aW9uOwotICAgIGlmICghcC5ub2RlKCkp
CisgICAgaWYgKHAuaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiBQb3NpdGlvbigpOwogCiAgICAg
UG9zaXRpb24gZG93bnN0cmVhbVN0YXJ0ID0gcC5kb3duc3RyZWFtKCk7CkBAIC0yNDIsNyArMjM2
LDcgQEAgVmlzaWJsZVBvc2l0aW9uIFZpc2libGVQb3NpdGlvbjo6bGVmdChibwogUG9zaXRpb24g
VmlzaWJsZVBvc2l0aW9uOjpyaWdodFZpc3VhbGx5RGlzdGluY3RDYW5kaWRhdGUoKSBjb25zdAog
ewogICAgIFBvc2l0aW9uIHAgPSBtX2RlZXBQb3NpdGlvbjsKLSAgICBpZiAoIXAubm9kZSgpKQor
ICAgIGlmIChwLmlzTnVsbCgpKQogICAgICAgICByZXR1cm4gUG9zaXRpb24oKTsKIAogICAgIFBv
c2l0aW9uIGRvd25zdHJlYW1TdGFydCA9IHAuZG93bnN0cmVhbSgpOwpAQCAtNDUxLDEyICs0NDUs
MTMgQEAgUG9zaXRpb24gVmlzaWJsZVBvc2l0aW9uOjpjYW5vbmljYWxQb3NpdAogICAgIC8vIFRv
IGZpeCB0aGlzLCB3ZSBuZWVkIHRvIGVpdGhlciBhKSBhZGQgY29kZSB0byBhbGwgcGFpbnRDYXJl
dHMgdG8gcGFzcyB0aGUgcmVzcG9uc2liaWxpdHkgb2ZmIHRvCiAgICAgLy8gdGhlIGFwcHJvcHJp
YXRlIHJlbmRlcmVyIGZvciBWaXNpYmxlUG9zaXRpb24ncyBsaWtlIHRoZXNlLCBvciBiKSBjYW5v
bmljYWxpemUgdG8gdGhlIHJpZ2h0bW9zdCBjYW5kaWRhdGUKICAgICAvLyB1bmxlc3MgdGhlIGFm
ZmluaXR5IGlzIHVwc3RyZWFtLgotICAgIE5vZGUqIG5vZGUgPSBwb3NpdGlvbi5ub2RlKCk7Ci0g
ICAgaWYgKCFub2RlKQorICAgIGlmIChwb3NpdGlvbi5pc051bGwoKSkKICAgICAgICAgcmV0dXJu
IFBvc2l0aW9uKCk7CiAKLSAgICBBU1NFUlQobm9kZS0+ZG9jdW1lbnQoKSk7Ci0gICAgbm9kZS0+
ZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CisgICAg
Tm9kZSogbm9kZSA9IHBvc2l0aW9uLmNvbnRhaW5lck5vZGUoKTsKKworICAgIEFTU0VSVChwb3Np
dGlvbi5kb2N1bWVudCgpKTsKKyAgICBwb3NpdGlvbi5kb2N1bWVudCgpLT51cGRhdGVMYXlvdXRJ
Z25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKIAogICAgIFBvc2l0aW9uIGNhbmRpZGF0ZSA9IHBv
c2l0aW9uLnVwc3RyZWFtKCk7CiAgICAgaWYgKGNhbmRpZGF0ZS5pc0NhbmRpZGF0ZSgpKQpAQCAt
NDc0LDcgKzQ2OSw3IEBAIFBvc2l0aW9uIFZpc2libGVQb3NpdGlvbjo6Y2Fub25pY2FsUG9zaXQK
IAogICAgIC8vIFRoZSBuZXcgcG9zaXRpb24gbXVzdCBiZSBpbiB0aGUgc2FtZSBlZGl0YWJsZSBl
bGVtZW50LiBFbmZvcmNlIHRoYXQgZmlyc3QuCiAgICAgLy8gVW5sZXNzIHRoZSBkZXNjZW50IGlz
IGZyb20gYSBub24tZWRpdGFibGUgaHRtbCBlbGVtZW50IHRvIGFuIGVkaXRhYmxlIGJvZHkuCi0g
ICAgaWYgKG5vZGUtPmhhc1RhZ05hbWUoaHRtbFRhZykgJiYgIW5vZGUtPmlzQ29udGVudEVkaXRh
YmxlKCkgJiYgbm9kZS0+ZG9jdW1lbnQoKS0+Ym9keSgpICYmIG5vZGUtPmRvY3VtZW50KCktPmJv
ZHkoKS0+aXNDb250ZW50RWRpdGFibGUoKSkKKyAgICBpZiAobm9kZSAmJiBub2RlLT5oYXNUYWdO
YW1lKGh0bWxUYWcpICYmICFub2RlLT5pc0NvbnRlbnRFZGl0YWJsZSgpICYmIG5vZGUtPmRvY3Vt
ZW50KCktPmJvZHkoKSAmJiBub2RlLT5kb2N1bWVudCgpLT5ib2R5KCktPmlzQ29udGVudEVkaXRh
YmxlKCkpCiAgICAgICAgIHJldHVybiBuZXh0LmlzTm90TnVsbCgpID8gbmV4dCA6IHByZXY7CiAK
ICAgICBOb2RlKiBlZGl0aW5nUm9vdCA9IGVkaXRhYmxlUm9vdEZvclBvc2l0aW9uKHBvc2l0aW9u
KTsKQEAgLTQ5Niw3ICs0OTEsNyBAQCBQb3NpdGlvbiBWaXNpYmxlUG9zaXRpb246OmNhbm9uaWNh
bFBvc2l0CiAgICAgICAgIHJldHVybiBQb3NpdGlvbigpOwogCiAgICAgLy8gVGhlIG5ldyBwb3Np
dGlvbiBzaG91bGQgYmUgaW4gdGhlIHNhbWUgYmxvY2sgZmxvdyBlbGVtZW50LiBGYXZvciB0aGF0
LgotICAgIE5vZGUgKm9yaWdpbmFsQmxvY2sgPSBub2RlLT5lbmNsb3NpbmdCbG9ja0Zsb3dFbGVt
ZW50KCk7CisgICAgTm9kZSogb3JpZ2luYWxCbG9jayA9IG5vZGUgPyBub2RlLT5lbmNsb3NpbmdC
bG9ja0Zsb3dFbGVtZW50KCkgOiAwOwogICAgIGJvb2wgbmV4dElzT3V0c2lkZU9yaWdpbmFsQmxv
Y2sgPSAhbmV4dE5vZGUtPmlzRGVzY2VuZGFudE9mKG9yaWdpbmFsQmxvY2spICYmIG5leHROb2Rl
ICE9IG9yaWdpbmFsQmxvY2s7CiAgICAgYm9vbCBwcmV2SXNPdXRzaWRlT3JpZ2luYWxCbG9jayA9
ICFwcmV2Tm9kZS0+aXNEZXNjZW5kYW50T2Yob3JpZ2luYWxCbG9jaykgJiYgcHJldk5vZGUgIT0g
b3JpZ2luYWxCbG9jazsKICAgICBpZiAobmV4dElzT3V0c2lkZU9yaWdpbmFsQmxvY2sgJiYgIXBy
ZXZJc091dHNpZGVPcmlnaW5hbEJsb2NrKQpAQCAtNTEwLDExICs1MDUsMTIgQEAgVUNoYXIzMiBW
aXNpYmxlUG9zaXRpb246OmNoYXJhY3RlckFmdGVyKAogICAgIC8vIFdlIGNhbm9uaWNhbGl6ZSB0
byB0aGUgZmlyc3Qgb2YgdHdvIGVxdWl2YWxlbnQgY2FuZGlkYXRlcywgYnV0IHRoZSBzZWNvbmQg
b2YgdGhlIHR3byBjYW5kaWRhdGVzCiAgICAgLy8gaXMgdGhlIG9uZSB0aGF0IHdpbGwgYmUgaW5z
aWRlIHRoZSB0ZXh0IG5vZGUgY29udGFpbmluZyB0aGUgY2hhcmFjdGVyIGFmdGVyIHRoaXMgdmlz
aWJsZSBwb3NpdGlvbi4KICAgICBQb3NpdGlvbiBwb3MgPSBtX2RlZXBQb3NpdGlvbi5kb3duc3Ry
ZWFtKCk7Ci0gICAgTm9kZSogbm9kZSA9IHBvcy5ub2RlKCk7Ci0gICAgaWYgKCFub2RlIHx8ICFu
b2RlLT5pc1RleHROb2RlKCkpCisgICAgTm9kZSogbm9kZSA9IHBvcy5jb250YWluZXJOb2RlKCk7
CisgICAgaWYgKCFub2RlIHx8ICFub2RlLT5pc1RleHROb2RlKCkgfHwgcG9zLmFuY2hvclR5cGUo
KSA9PSBQb3NpdGlvbjo6UG9zaXRpb25Jc0FmdGVyQW5jaG9yKQogICAgICAgICByZXR1cm4gMDsK
LSAgICBUZXh0KiB0ZXh0Tm9kZSA9IHN0YXRpY19jYXN0PFRleHQqPihwb3Mubm9kZSgpKTsKLSAg
ICB1bnNpZ25lZCBvZmZzZXQgPSBwb3MuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKTsKKyAgICBB
U1NFUlQocG9zLmFuY2hvclR5cGUoKSA9PSBQb3NpdGlvbjo6UG9zaXRpb25Jc0JlZm9yZUFuY2hv
ciB8fCBwb3MuYW5jaG9yVHlwZSgpID09IFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNo
b3IpOworICAgIFRleHQqIHRleHROb2RlID0gc3RhdGljX2Nhc3Q8VGV4dCo+KHBvcy5jb250YWlu
ZXJOb2RlKCkpOworICAgIHVuc2lnbmVkIG9mZnNldCA9IHBvcy5hbmNob3JUeXBlKCkgPT0gUG9z
aXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvciA/IHBvcy5vZmZzZXRJbkNvbnRhaW5lck5v
ZGUoKSA6IDA7CiAgICAgdW5zaWduZWQgbGVuZ3RoID0gdGV4dE5vZGUtPmxlbmd0aCgpOwogICAg
IGlmIChvZmZzZXQgPj0gbGVuZ3RoKQogICAgICAgICByZXR1cm4gMDsKQEAgLTUyNywxMSArNTIz
LDExIEBAIFVDaGFyMzIgVmlzaWJsZVBvc2l0aW9uOjpjaGFyYWN0ZXJBZnRlcigKIAogSW50UmVj
dCBWaXNpYmxlUG9zaXRpb246OmxvY2FsQ2FyZXRSZWN0KFJlbmRlck9iamVjdComIHJlbmRlcmVy
KSBjb25zdAogewotICAgIE5vZGUqIG5vZGUgPSBtX2RlZXBQb3NpdGlvbi5ub2RlKCk7Ci0gICAg
aWYgKCFub2RlKSB7CisgICAgaWYgKG1fZGVlcFBvc2l0aW9uLmlzTnVsbCgpKSB7CiAgICAgICAg
IHJlbmRlcmVyID0gMDsKICAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKICAgICB9CisgICAgTm9k
ZSogbm9kZSA9IG1fZGVlcFBvc2l0aW9uLmNvbnRhaW5lck5vZGUoKTsKICAgICAKICAgICByZW5k
ZXJlciA9IG5vZGUtPnJlbmRlcmVyKCk7CiAgICAgaWYgKCFyZW5kZXJlcikKQEAgLTU5OSwxOSAr
NTk1LDE5IEBAIFBhc3NSZWZQdHI8UmFuZ2U+IG1ha2VSYW5nZShjb25zdCBWaXNpYmwKICAgICAK
ICAgICBQb3NpdGlvbiBzID0gc3RhcnQuZGVlcEVxdWl2YWxlbnQoKS5wYXJlbnRBbmNob3JlZEVx
dWl2YWxlbnQoKTsKICAgICBQb3NpdGlvbiBlID0gZW5kLmRlZXBFcXVpdmFsZW50KCkucGFyZW50
QW5jaG9yZWRFcXVpdmFsZW50KCk7Ci0gICAgcmV0dXJuIFJhbmdlOjpjcmVhdGUocy5ub2RlKCkt
PmRvY3VtZW50KCksIHMubm9kZSgpLCBzLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCksIGUubm9k
ZSgpLCBlLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkpOworICAgIHJldHVybiBSYW5nZTo6Y3Jl
YXRlKHMuY29udGFpbmVyTm9kZSgpLT5kb2N1bWVudCgpLCBzLmNvbnRhaW5lck5vZGUoKSwgcy5v
ZmZzZXRJbkNvbnRhaW5lck5vZGUoKSwgZS5jb250YWluZXJOb2RlKCksIGUub2Zmc2V0SW5Db250
YWluZXJOb2RlKCkpOwogfQogCiBWaXNpYmxlUG9zaXRpb24gc3RhcnRWaXNpYmxlUG9zaXRpb24o
Y29uc3QgUmFuZ2UgKnIsIEVBZmZpbml0eSBhZmZpbml0eSkKIHsKICAgICBpbnQgZXhjZXB0aW9u
ID0gMDsKLSAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKHItPnN0YXJ0Q29udGFpbmVyKGV4Y2Vw
dGlvbiksIHItPnN0YXJ0T2Zmc2V0KGV4Y2VwdGlvbiksIGFmZmluaXR5KTsKKyAgICByZXR1cm4g
VmlzaWJsZVBvc2l0aW9uKFBvc2l0aW9uKHItPnN0YXJ0Q29udGFpbmVyKGV4Y2VwdGlvbiksIHIt
PnN0YXJ0T2Zmc2V0KGV4Y2VwdGlvbiksIFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNo
b3IpLCBhZmZpbml0eSk7CiB9CiAKIFZpc2libGVQb3NpdGlvbiBlbmRWaXNpYmxlUG9zaXRpb24o
Y29uc3QgUmFuZ2UgKnIsIEVBZmZpbml0eSBhZmZpbml0eSkKIHsKICAgICBpbnQgZXhjZXB0aW9u
ID0gMDsKLSAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKHItPmVuZENvbnRhaW5lcihleGNlcHRp
b24pLCByLT5lbmRPZmZzZXQoZXhjZXB0aW9uKSwgYWZmaW5pdHkpOworICAgIHJldHVybiBWaXNp
YmxlUG9zaXRpb24oUG9zaXRpb24oci0+ZW5kQ29udGFpbmVyKGV4Y2VwdGlvbiksIHItPmVuZE9m
ZnNldChleGNlcHRpb24pLCBQb3NpdGlvbjo6UG9zaXRpb25Jc09mZnNldEluQW5jaG9yKSwgYWZm
aW5pdHkpOwogfQogCiBib29sIHNldFN0YXJ0KFJhbmdlICpyLCBjb25zdCBWaXNpYmxlUG9zaXRp
b24gJnZpc2libGVQb3NpdGlvbikKQEAgLTYyMCw3ICs2MTYsNyBAQCBib29sIHNldFN0YXJ0KFJh
bmdlICpyLCBjb25zdCBWaXNpYmxlUG9zCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBQb3Np
dGlvbiBwID0gdmlzaWJsZVBvc2l0aW9uLmRlZXBFcXVpdmFsZW50KCkucGFyZW50QW5jaG9yZWRF
cXVpdmFsZW50KCk7CiAgICAgaW50IGNvZGUgPSAwOwotICAgIHItPnNldFN0YXJ0KHAubm9kZSgp
LCBwLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCksIGNvZGUpOworICAgIHItPnNldFN0YXJ0KHAu
Y29udGFpbmVyTm9kZSgpLCBwLm9mZnNldEluQ29udGFpbmVyTm9kZSgpLCBjb2RlKTsKICAgICBy
ZXR1cm4gY29kZSA9PSAwOwogfQogCkBAIC02MzAsNyArNjI2LDcgQEAgYm9vbCBzZXRFbmQoUmFu
Z2UgKnIsIGNvbnN0IFZpc2libGVQb3NpdAogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgUG9z
aXRpb24gcCA9IHZpc2libGVQb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgpLnBhcmVudEFuY2hvcmVk
RXF1aXZhbGVudCgpOwogICAgIGludCBjb2RlID0gMDsKLSAgICByLT5zZXRFbmQocC5ub2RlKCks
IHAuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSwgY29kZSk7CisgICAgci0+c2V0RW5kKHAuY29u
dGFpbmVyTm9kZSgpLCBwLm9mZnNldEluQ29udGFpbmVyTm9kZSgpLCBjb2RlKTsKICAgICByZXR1
cm4gY29kZSA9PSAwOwogfQogCkBAIC02NDYsMTAgKzY0MiwxMCBAQCBib29sIGlzRmlyc3RWaXNp
YmxlUG9zaXRpb25Jbk5vZGUoY29uc3QgCiB7CiAgICAgaWYgKHZpc2libGVQb3NpdGlvbi5pc051
bGwoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIGlmICghdmlzaWJsZVBvc2l0
aW9uLmRlZXBFcXVpdmFsZW50KCkubm9kZSgpLT5pc0Rlc2NlbmRhbnRPZihub2RlKSkKKworICAg
IGlmICghdmlzaWJsZVBvc2l0aW9uLmRlZXBFcXVpdmFsZW50KCkuY29udGFpbmVyTm9kZSgpLT5p
c0Rlc2NlbmRhbnRPZihub2RlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAKKwog
ICAgIFZpc2libGVQb3NpdGlvbiBwcmV2aW91cyA9IHZpc2libGVQb3NpdGlvbi5wcmV2aW91cygp
OwogICAgIHJldHVybiBwcmV2aW91cy5pc051bGwoKSB8fCAhcHJldmlvdXMuZGVlcEVxdWl2YWxl
bnQoKS5ub2RlKCktPmlzRGVzY2VuZGFudE9mKG5vZGUpOwogfQpAQCAtNjU4LDEwICs2NTQsMTAg
QEAgYm9vbCBpc0xhc3RWaXNpYmxlUG9zaXRpb25Jbk5vZGUoY29uc3QgVgogewogICAgIGlmICh2
aXNpYmxlUG9zaXRpb24uaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAg
ICBpZiAoIXZpc2libGVQb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgpLm5vZGUoKS0+aXNEZXNjZW5k
YW50T2Yobm9kZSkpCisKKyAgICBpZiAoIXZpc2libGVQb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgp
LmNvbnRhaW5lck5vZGUoKS0+aXNEZXNjZW5kYW50T2Yobm9kZSkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgICAgICAgICAKKwogICAgIFZpc2libGVQb3NpdGlvbiBuZXh0ID0gdmlz
aWJsZVBvc2l0aW9uLm5leHQoKTsKICAgICByZXR1cm4gbmV4dC5pc051bGwoKSB8fCAhbmV4dC5k
ZWVwRXF1aXZhbGVudCgpLm5vZGUoKS0+aXNEZXNjZW5kYW50T2Yobm9kZSk7CiB9CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVBvc2l0aW9uLmgJKHJldmlzaW9uIDc4MTYyKQor
KysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlUG9zaXRpb24uaAkod29ya2luZyBjb3B5
KQpAQCAtNTQsNyArNTQsNiBAQCBwdWJsaWM6CiAgICAgLy8gTk9URTogVVBTVFJFQU0gYWZmaW5p
dHkgd2lsbCBiZSB1c2VkIG9ubHkgaWYgcG9zIGlzIGF0IGVuZCBvZiBhIHdyYXBwZWQgbGluZSwK
ICAgICAvLyBvdGhlcndpc2UgaXQgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gRE9XTlNUUkVBTQogICAg
IFZpc2libGVQb3NpdGlvbigpIDogbV9hZmZpbml0eShWUF9ERUZBVUxUX0FGRklOSVRZKSB7IH0K
LSAgICBWaXNpYmxlUG9zaXRpb24oTm9kZSosIGludCBvZmZzZXQsIEVBZmZpbml0eSk7CiAgICAg
VmlzaWJsZVBvc2l0aW9uKGNvbnN0IFBvc2l0aW9uJiwgRUFmZmluaXR5ID0gVlBfREVGQVVMVF9B
RkZJTklUWSk7CiAKICAgICB2b2lkIGNsZWFyKCkgeyBtX2RlZXBQb3NpdGlvbi5jbGVhcigpOyB9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcAkocmV2aXNpb24gNzgx
NjIpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDI2LDcgKzQyNiw3IEBAIHN0YXRpYyBOb2RlKiBmaXJzdEluU3BlY2lhbEVsZW1l
bnQoY29uc3QKICAgICBmb3IgKE5vZGUqIG4gPSBwb3Mubm9kZSgpOyBuICYmIG4tPnJvb3RFZGl0
YWJsZUVsZW1lbnQoKSA9PSByb290RWRpdGFibGVFbGVtZW50OyBuID0gbi0+cGFyZW50Tm9kZSgp
KQogICAgICAgICBpZiAoaXNTcGVjaWFsRWxlbWVudChuKSkgewogICAgICAgICAgICAgVmlzaWJs
ZVBvc2l0aW9uIHZQb3MgPSBWaXNpYmxlUG9zaXRpb24ocG9zLCBET1dOU1RSRUFNKTsKLSAgICAg
ICAgICAgIFZpc2libGVQb3NpdGlvbiBmaXJzdEluRWxlbWVudCA9IFZpc2libGVQb3NpdGlvbihu
LCAwLCBET1dOU1RSRUFNKTsKKyAgICAgICAgICAgIFZpc2libGVQb3NpdGlvbiBmaXJzdEluRWxl
bWVudCA9IFZpc2libGVQb3NpdGlvbihmaXJzdFBvc2l0aW9uSW5PckJlZm9yZU5vZGUobiksIERP
V05TVFJFQU0pOwogICAgICAgICAgICAgaWYgKGlzVGFibGVFbGVtZW50KG4pICYmIHZQb3MgPT0g
Zmlyc3RJbkVsZW1lbnQubmV4dCgpKQogICAgICAgICAgICAgICAgIHJldHVybiBuOwogICAgICAg
ICAgICAgaWYgKHZQb3MgPT0gZmlyc3RJbkVsZW1lbnQpCkBAIC00NDIsNyArNDQyLDcgQEAgc3Rh
dGljIE5vZGUqIGxhc3RJblNwZWNpYWxFbGVtZW50KGNvbnN0IAogICAgIGZvciAoTm9kZSogbiA9
IHBvcy5ub2RlKCk7IG4gJiYgbi0+cm9vdEVkaXRhYmxlRWxlbWVudCgpID09IHJvb3RFZGl0YWJs
ZUVsZW1lbnQ7IG4gPSBuLT5wYXJlbnROb2RlKCkpCiAgICAgICAgIGlmIChpc1NwZWNpYWxFbGVt
ZW50KG4pKSB7CiAgICAgICAgICAgICBWaXNpYmxlUG9zaXRpb24gdlBvcyA9IFZpc2libGVQb3Np
dGlvbihwb3MsIERPV05TVFJFQU0pOwotICAgICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIGxhc3RJ
bkVsZW1lbnQgPSBWaXNpYmxlUG9zaXRpb24obiwgbi0+Y2hpbGROb2RlQ291bnQoKSwgRE9XTlNU
UkVBTSk7CisgICAgICAgICAgICBWaXNpYmxlUG9zaXRpb24gbGFzdEluRWxlbWVudCA9IFZpc2li
bGVQb3NpdGlvbihQb3NpdGlvbihuLCBuLT5jaGlsZE5vZGVDb3VudCgpLCBQb3NpdGlvbjo6UG9z
aXRpb25Jc09mZnNldEluQW5jaG9yKSwgRE9XTlNUUkVBTSk7CiAgICAgICAgICAgICBpZiAoaXNU
YWJsZUVsZW1lbnQobikgJiYgdlBvcyA9PSBsYXN0SW5FbGVtZW50LnByZXZpb3VzKCkpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIG47CiAgICAgICAgICAgICBpZiAodlBvcyA9PSBsYXN0SW5FbGVt
ZW50KQpAQCAtNTE5LDcgKzUxOSw3IEBAIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9zaXRpb25C
ZWZvcmVOb2QKIHsKICAgICBBU1NFUlQobm9kZSk7CiAgICAgaWYgKG5vZGUtPmNoaWxkTm9kZUNv
dW50KCkpCi0gICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24obm9kZSwgMCwgRE9XTlNUUkVB
TSk7CisgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oZmlyc3RQb3NpdGlvbkluT3JCZWZv
cmVOb2RlKG5vZGUpLCBET1dOU1RSRUFNKTsKICAgICBBU1NFUlQobm9kZS0+cGFyZW50Tm9kZSgp
KTsKICAgICByZXR1cm4gcG9zaXRpb25JblBhcmVudEJlZm9yZU5vZGUobm9kZSk7CiB9CkBAIC01
MjksNyArNTI5LDcgQEAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3NpdGlvbkFmdGVyTm9kZQog
ewogICAgIEFTU0VSVChub2RlKTsKICAgICBpZiAobm9kZS0+Y2hpbGROb2RlQ291bnQoKSkKLSAg
ICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihub2RlLCBub2RlLT5jaGlsZE5vZGVDb3VudCgp
LCBET1dOU1RSRUFNKTsKKyAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihsYXN0UG9zaXRp
b25Jbk9yQWZ0ZXJOb2RlKG5vZGUpLCBET1dOU1RSRUFNKTsKICAgICBBU1NFUlQobm9kZS0+cGFy
ZW50Tm9kZSgpKTsKICAgICByZXR1cm4gcG9zaXRpb25JblBhcmVudEFmdGVyTm9kZShub2RlKTsK
IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvdmlzaWJsZV91bml0cy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy92aXNpYmxlX3VuaXRzLmNwcAkocmV2aXNp
b24gNzgxNjIpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL3Zpc2libGVfdW5pdHMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zNzcsMTMgKzM3Nyw4IEBAIHN0YXRpYyBWaXNpYmxlUG9zaXRpb24g
c3RhcnRQb3NpdGlvbkZvckwKICAgICAgICAgc3RhcnRCb3ggPSBzdGFydEJveC0+bmV4dExlYWZD
aGlsZCgpOwogICAgIH0KICAgICAKLSAgICBpbnQgc3RhcnRPZmZzZXQgPSAwOwotICAgIGlmIChz
dGFydEJveC0+aXNJbmxpbmVUZXh0Qm94KCkpIHsKLSAgICAgICAgSW5saW5lVGV4dEJveCAqc3Rh
cnRUZXh0Qm94ID0gc3RhdGljX2Nhc3Q8SW5saW5lVGV4dEJveCAqPihzdGFydEJveCk7Ci0gICAg
ICAgIHN0YXJ0T2Zmc2V0ID0gc3RhcnRUZXh0Qm94LT5zdGFydCgpOwotICAgIH0KLSAgCi0gICAg
VmlzaWJsZVBvc2l0aW9uIHZpc1BvcyA9IFZpc2libGVQb3NpdGlvbihzdGFydE5vZGUsIHN0YXJ0
T2Zmc2V0LCBET1dOU1RSRUFNKTsKKyAgICBWaXNpYmxlUG9zaXRpb24gdmlzUG9zID0gc3RhcnRC
b3gtPmlzSW5saW5lVGV4dEJveCgpID8gVmlzaWJsZVBvc2l0aW9uKFBvc2l0aW9uKHN0YXJ0Tm9k
ZSwgc3RhdGljX2Nhc3Q8SW5saW5lVGV4dEJveCAqPihzdGFydEJveCktPnN0YXJ0KCksIFBvc2l0
aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3IpLCBET1dOU1RSRUFNKQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBWaXNpYmxlUG9z
aXRpb24ocG9zaXRpb25CZWZvcmVOb2RlKHN0YXJ0Tm9kZSksIERPV05TVFJFQU0pOwogICAgIHJl
dHVybiBwb3NpdGlvbkF2b2lkaW5nRmlyc3RQb3NpdGlvbkluVGFibGUodmlzUG9zKTsKIH0KIApA
QCAtNDI5LDE3ICs0MjQsMTkgQEAgc3RhdGljIFZpc2libGVQb3NpdGlvbiBlbmRQb3NpdGlvbkZv
ckxpbgogICAgICAgICBlbmRCb3ggPSBlbmRCb3gtPnByZXZMZWFmQ2hpbGQoKTsKICAgICB9CiAg
ICAgCi0gICAgaW50IGVuZE9mZnNldCA9IDE7CisgICAgUG9zaXRpb24gcG9zOwogICAgIGlmIChl
bmROb2RlLT5oYXNUYWdOYW1lKGJyVGFnKSkgewotICAgICAgICBlbmRPZmZzZXQgPSAwOworICAg
ICAgICBwb3MgPSBwb3NpdGlvbkJlZm9yZU5vZGUoZW5kTm9kZSk7CiAgICAgfSBlbHNlIGlmIChl
bmRCb3gtPmlzSW5saW5lVGV4dEJveCgpKSB7CiAgICAgICAgIElubGluZVRleHRCb3ggKmVuZFRl
eHRCb3ggPSBzdGF0aWNfY2FzdDxJbmxpbmVUZXh0Qm94ICo+KGVuZEJveCk7Ci0gICAgICAgIGVu
ZE9mZnNldCA9IGVuZFRleHRCb3gtPnN0YXJ0KCk7CisgICAgICAgIGludCBlbmRPZmZzZXQgPSBl
bmRUZXh0Qm94LT5zdGFydCgpOwogICAgICAgICBpZiAoIWVuZFRleHRCb3gtPmlzTGluZUJyZWFr
KCkpCiAgICAgICAgICAgICBlbmRPZmZzZXQgKz0gZW5kVGV4dEJveC0+bGVuKCk7Ci0gICAgfQor
ICAgICAgICBwb3MgPSBQb3NpdGlvbihlbmROb2RlLCBlbmRPZmZzZXQsIFBvc2l0aW9uOjpQb3Np
dGlvbklzT2Zmc2V0SW5BbmNob3IpOworICAgIH0gZWxzZQorICAgICAgICBwb3MgPSBwb3NpdGlv
bkFmdGVyTm9kZShlbmROb2RlKTsKICAgICAKLSAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKGVu
ZE5vZGUsIGVuZE9mZnNldCwgVlBfVVBTVFJFQU1fSUZfUE9TU0lCTEUpOworICAgIHJldHVybiBW
aXNpYmxlUG9zaXRpb24ocG9zLCBWUF9VUFNUUkVBTV9JRl9QT1NTSUJMRSk7CiB9CiAKIFZpc2li
bGVQb3NpdGlvbiBlbmRPZkxpbmUoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBjKQpAQCAtNTc1LDcg
KzU3Miw3IEBAIFZpc2libGVQb3NpdGlvbiBwcmV2aW91c0xpbmVQb3NpdGlvbihjb24KICAgICAv
LyBNb3ZlIHRvIHRoZSBzdGFydCBvZiB0aGUgY29udGVudCBpbiB0aGlzIGJsb2NrLCB3aGljaCBl
ZmZlY3RpdmVseSBtb3ZlcyB1cwogICAgIC8vIHRvIHRoZSBzdGFydCBvZiB0aGUgbGluZSB3ZSdy
ZSBvbi4KICAgICBFbGVtZW50KiByb290RWxlbWVudCA9IG5vZGUtPmlzQ29udGVudEVkaXRhYmxl
KCkgPyBub2RlLT5yb290RWRpdGFibGVFbGVtZW50KCkgOiBub2RlLT5kb2N1bWVudCgpLT5kb2N1
bWVudEVsZW1lbnQoKTsKLSAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKHJvb3RFbGVtZW50LCAw
LCBET1dOU1RSRUFNKTsKKyAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKGZpcnN0UG9zaXRpb25J
bk5vZGUocm9vdEVsZW1lbnQpLCBET1dOU1RSRUFNKTsKIH0KIAogc3RhdGljIE5vZGUqIG5leHRM
ZWFmV2l0aFNhbWVFZGl0YWJpbGl0eShOb2RlKiBub2RlLCBpbnQgb2Zmc2V0KQpAQCAtNjgwLDcg
KzY3Nyw3IEBAIFZpc2libGVQb3NpdGlvbiBuZXh0TGluZVBvc2l0aW9uKGNvbnN0IFYKICAgICAv
LyBNb3ZlIHRvIHRoZSBlbmQgb2YgdGhlIGNvbnRlbnQgaW4gdGhpcyBibG9jaywgd2hpY2ggZWZm
ZWN0aXZlbHkgbW92ZXMgdXMKICAgICAvLyB0byB0aGUgZW5kIG9mIHRoZSBsaW5lIHdlJ3JlIG9u
LgogICAgIEVsZW1lbnQqIHJvb3RFbGVtZW50ID0gbm9kZS0+aXNDb250ZW50RWRpdGFibGUoKSA/
IG5vZGUtPnJvb3RFZGl0YWJsZUVsZW1lbnQoKSA6IG5vZGUtPmRvY3VtZW50KCktPmRvY3VtZW50
RWxlbWVudCgpOwotICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24ocm9vdEVsZW1lbnQsIHJvb3RF
bGVtZW50ID8gcm9vdEVsZW1lbnQtPmNoaWxkTm9kZUNvdW50KCkgOiAwLCBET1dOU1RSRUFNKTsK
KyAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKGxhc3RQb3NpdGlvbkluTm9kZShyb290RWxlbWVu
dCksIERPV05TVFJFQU0pOwogfQogCiAvLyAtLS0tLS0tLS0KQEAgLTc1Miw2ICs3NDksNyBAQCBW
aXNpYmxlUG9zaXRpb24gc3RhcnRPZlBhcmFncmFwaChjb25zdCBWCiAKICAgICBOb2RlICpub2Rl
ID0gc3RhcnROb2RlOwogICAgIGludCBvZmZzZXQgPSBwLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0
KCk7CisgICAgUG9zaXRpb246OkFuY2hvclR5cGUgdHlwZSA9IHAuYW5jaG9yVHlwZSgpOwogCiAg
ICAgTm9kZSAqbiA9IHN0YXJ0Tm9kZTsKICAgICB3aGlsZSAobikgewpAQCAtNzcyLDYgKzc3MCw3
IEBAIFZpc2libGVQb3NpdGlvbiBzdGFydE9mUGFyYWdyYXBoKGNvbnN0IFYKICAgICAgICAgICAg
IGJyZWFrOwogCiAgICAgICAgIGlmIChyLT5pc1RleHQoKSAmJiByLT5jYXJldE1heFJlbmRlcmVk
T2Zmc2V0KCkgPiAwKSB7CisgICAgICAgICAgICB0eXBlID0gUG9zaXRpb246OlBvc2l0aW9uSXNP
ZmZzZXRJbkFuY2hvcjsKICAgICAgICAgICAgIGlmIChzdHlsZS0+cHJlc2VydmVOZXdsaW5lKCkp
IHsKICAgICAgICAgICAgICAgICBjb25zdCBVQ2hhciogY2hhcnMgPSB0b1JlbmRlclRleHQocikt
PmNoYXJhY3RlcnMoKTsKICAgICAgICAgICAgICAgICBpbnQgaSA9IHRvUmVuZGVyVGV4dChyKS0+
dGV4dExlbmd0aCgpOwpAQCAtNzgwLDIwICs3NzksMjMgQEAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0
T2ZQYXJhZ3JhcGgoY29uc3QgVgogICAgICAgICAgICAgICAgICAgICBpID0gbWF4KDAsIG8pOwog
ICAgICAgICAgICAgICAgIHdoaWxlICgtLWkgPj0gMCkKICAgICAgICAgICAgICAgICAgICAgaWYg
KGNoYXJzW2ldID09ICdcbicpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gVmlzaWJs
ZVBvc2l0aW9uKG4sIGkgKyAxLCBET1dOU1RSRUFNKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBWaXNpYmxlUG9zaXRpb24oUG9zaXRpb24obiwgaSArIDEsIFBvc2l0aW9uOjpQb3Np
dGlvbklzT2Zmc2V0SW5BbmNob3IpLCBET1dOU1RSRUFNKTsKICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIG5vZGUgPSBuOwogICAgICAgICAgICAgb2Zmc2V0ID0gMDsKICAgICAgICAgICAgIG4g
PSBuLT50cmF2ZXJzZVByZXZpb3VzTm9kZVBvc3RPcmRlcihzdGFydEJsb2NrKTsKICAgICAgICAg
fSBlbHNlIGlmIChlZGl0aW5nSWdub3Jlc0NvbnRlbnQobikgfHwgaXNUYWJsZUVsZW1lbnQobikp
IHsKICAgICAgICAgICAgIG5vZGUgPSBuOwotICAgICAgICAgICAgb2Zmc2V0ID0gMDsKKyAgICAg
ICAgICAgIHR5cGUgPSBQb3NpdGlvbjo6UG9zaXRpb25Jc0JlZm9yZUFuY2hvcjsKICAgICAgICAg
ICAgIG4gPSBuLT5wcmV2aW91c1NpYmxpbmcoKSA/IG4tPnByZXZpb3VzU2libGluZygpIDogbi0+
dHJhdmVyc2VQcmV2aW91c05vZGVQb3N0T3JkZXIoc3RhcnRCbG9jayk7CiAgICAgICAgIH0gZWxz
ZQogICAgICAgICAgICAgbiA9IG4tPnRyYXZlcnNlUHJldmlvdXNOb2RlUG9zdE9yZGVyKHN0YXJ0
QmxvY2spOwogICAgIH0KIAotICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24obm9kZSwgb2Zmc2V0
LCBET1dOU1RSRUFNKTsKKyAgICBpZiAodHlwZSA9PSBQb3NpdGlvbjo6UG9zaXRpb25Jc09mZnNl
dEluQW5jaG9yKQorICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKFBvc2l0aW9uKG5vZGUs
IG9mZnNldCwgdHlwZSksIERPV05TVFJFQU0pOworICAgIAorICAgIHJldHVybiBWaXNpYmxlUG9z
aXRpb24oUG9zaXRpb24obm9kZSwgdHlwZSksIERPV05TVFJFQU0pOwogfQogCiBWaXNpYmxlUG9z
aXRpb24gZW5kT2ZQYXJhZ3JhcGgoY29uc3QgVmlzaWJsZVBvc2l0aW9uICZjLCBFZGl0aW5nQm91
bmRhcnlDcm9zc2luZ1J1bGUgYm91bmRhcnlDcm9zc2luZ1J1bGUpCkBAIC04MTIsNiArODE0LDcg
QEAgVmlzaWJsZVBvc2l0aW9uIGVuZE9mUGFyYWdyYXBoKGNvbnN0IFZpcwogICAgIAogICAgIE5v
ZGUgKm5vZGUgPSBzdGFydE5vZGU7CiAgICAgaW50IG9mZnNldCA9IHAuZGVwcmVjYXRlZEVkaXRp
bmdPZmZzZXQoKTsKKyAgICBQb3NpdGlvbjo6QW5jaG9yVHlwZSB0eXBlID0gcC5hbmNob3JUeXBl
KCk7CiAKICAgICBOb2RlICpuID0gc3RhcnROb2RlOwogICAgIHdoaWxlIChuKSB7CkBAIC04MzQs
MjUgKzgzNywyOSBAQCBWaXNpYmxlUG9zaXRpb24gZW5kT2ZQYXJhZ3JhcGgoY29uc3QgVmlzCiAg
ICAgICAgIC8vIEZJWE1FOiBXZSBhdm9pZCByZXR1cm5pbmcgYSBwb3NpdGlvbiB3aGVyZSB0aGUg
cmVuZGVyZXIgY2FuJ3QgYWNjZXB0IHRoZSBjYXJldC4KICAgICAgICAgaWYgKHItPmlzVGV4dCgp
ICYmIHItPmNhcmV0TWF4UmVuZGVyZWRPZmZzZXQoKSA+IDApIHsKICAgICAgICAgICAgIGludCBs
ZW5ndGggPSB0b1JlbmRlclRleHQociktPnRleHRMZW5ndGgoKTsKKyAgICAgICAgICAgIHR5cGUg
PSBQb3NpdGlvbjo6UG9zaXRpb25Jc09mZnNldEluQW5jaG9yOwogICAgICAgICAgICAgaWYgKHN0
eWxlLT5wcmVzZXJ2ZU5ld2xpbmUoKSkgewogICAgICAgICAgICAgICAgIGNvbnN0IFVDaGFyKiBj
aGFycyA9IHRvUmVuZGVyVGV4dChyKS0+Y2hhcmFjdGVycygpOwogICAgICAgICAgICAgICAgIGlu
dCBvID0gbiA9PSBzdGFydE5vZGUgPyBvZmZzZXQgOiAwOwogICAgICAgICAgICAgICAgIGZvciAo
aW50IGkgPSBvOyBpIDwgbGVuZ3RoOyArK2kpCiAgICAgICAgICAgICAgICAgICAgIGlmIChjaGFy
c1tpXSA9PSAnXG4nKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFZpc2libGVQb3Np
dGlvbihuLCBpLCBET1dOU1RSRUFNKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBW
aXNpYmxlUG9zaXRpb24oUG9zaXRpb24obiwgaSwgUG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJ
bkFuY2hvciksIERPV05TVFJFQU0pOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbm9kZSA9
IG47CiAgICAgICAgICAgICBvZmZzZXQgPSByLT5jYXJldE1heE9mZnNldCgpOwogICAgICAgICAg
ICAgbiA9IG4tPnRyYXZlcnNlTmV4dE5vZGUoc3RheUluc2lkZUJsb2NrKTsKICAgICAgICAgfSBl
bHNlIGlmIChlZGl0aW5nSWdub3Jlc0NvbnRlbnQobikgfHwgaXNUYWJsZUVsZW1lbnQobikpIHsK
ICAgICAgICAgICAgIG5vZGUgPSBuOwotICAgICAgICAgICAgb2Zmc2V0ID0gbGFzdE9mZnNldEZv
ckVkaXRpbmcobik7CisgICAgICAgICAgICB0eXBlID0gUG9zaXRpb246OlBvc2l0aW9uSXNBZnRl
ckFuY2hvcjsKICAgICAgICAgICAgIG4gPSBuLT50cmF2ZXJzZU5leHRTaWJsaW5nKHN0YXlJbnNp
ZGVCbG9jayk7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgbiA9IG4tPnRyYXZlcnNlTmV4
dE5vZGUoc3RheUluc2lkZUJsb2NrKTsKICAgICB9CiAKLSAgICByZXR1cm4gVmlzaWJsZVBvc2l0
aW9uKG5vZGUsIG9mZnNldCwgRE9XTlNUUkVBTSk7CisgICAgaWYgKHR5cGUgPT0gUG9zaXRpb246
OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvcikKKyAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlv
bihQb3NpdGlvbihub2RlLCBvZmZzZXQsIHR5cGUpLCBET1dOU1RSRUFNKTsKKworICAgIHJldHVy
biBWaXNpYmxlUG9zaXRpb24oUG9zaXRpb24obm9kZSwgdHlwZSksIERPV05TVFJFQU0pOwogfQog
CiBWaXNpYmxlUG9zaXRpb24gc3RhcnRPZk5leHRQYXJhZ3JhcGgoY29uc3QgVmlzaWJsZVBvc2l0
aW9uJiB2aXNpYmxlUG9zaXRpb24pCkBAIC05MjYsNyArOTMzLDcgQEAgVmlzaWJsZVBvc2l0aW9u
IGVuZE9mQmxvY2soY29uc3QgVmlzaWJsZQogCiAgICAgTm9kZSAqc3RhcnRCbG9jayA9IHN0YXJ0
Tm9kZS0+ZW5jbG9zaW5nQmxvY2tGbG93RWxlbWVudCgpOwogICAgIAotICAgIHJldHVybiBWaXNp
YmxlUG9zaXRpb24oc3RhcnRCbG9jaywgc3RhcnRCbG9jay0+Y2hpbGROb2RlQ291bnQoKSwgVlBf
REVGQVVMVF9BRkZJTklUWSk7ICAgCisgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihsYXN0UG9z
aXRpb25Jbk5vZGUoc3RhcnRCbG9jayksIFZQX0RFRkFVTFRfQUZGSU5JVFkpOyAgIAogfQogCiBi
b29sIGluU2FtZUJsb2NrKGNvbnN0IFZpc2libGVQb3NpdGlvbiAmYSwgY29uc3QgVmlzaWJsZVBv
c2l0aW9uICZiKQpAQCAtOTUxLDcgKzk1OCw3IEBAIFZpc2libGVQb3NpdGlvbiBzdGFydE9mRG9j
dW1lbnQoY29uc3QgTm8KICAgICBpZiAoIW5vZGUpCiAgICAgICAgIHJldHVybiBWaXNpYmxlUG9z
aXRpb24oKTsKICAgICAKLSAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKG5vZGUtPmRvY3VtZW50
KCktPmRvY3VtZW50RWxlbWVudCgpLCAwLCBET1dOU1RSRUFNKTsKKyAgICByZXR1cm4gVmlzaWJs
ZVBvc2l0aW9uKGZpcnN0UG9zaXRpb25Jbk5vZGUobm9kZS0+ZG9jdW1lbnQoKS0+ZG9jdW1lbnRF
bGVtZW50KCkpLCBET1dOU1RSRUFNKTsKIH0KIAogVmlzaWJsZVBvc2l0aW9uIHN0YXJ0T2ZEb2N1
bWVudChjb25zdCBWaXNpYmxlUG9zaXRpb24gJmMpCkBAIC05NjUsNyArOTcyLDcgQEAgVmlzaWJs
ZVBvc2l0aW9uIGVuZE9mRG9jdW1lbnQoY29uc3QgTm9kZQogICAgICAgICByZXR1cm4gVmlzaWJs
ZVBvc2l0aW9uKCk7CiAgICAgCiAgICAgRWxlbWVudCogZG9jID0gbm9kZS0+ZG9jdW1lbnQoKS0+
ZG9jdW1lbnRFbGVtZW50KCk7Ci0gICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihkb2MsIGRvYy0+
Y2hpbGROb2RlQ291bnQoKSwgRE9XTlNUUkVBTSk7CisgICAgcmV0dXJuIFZpc2libGVQb3NpdGlv
bihsYXN0UG9zaXRpb25Jbk5vZGUoZG9jKSwgRE9XTlNUUkVBTSk7CiB9CiAKIFZpc2libGVQb3Np
dGlvbiBlbmRPZkRvY3VtZW50KGNvbnN0IFZpc2libGVQb3NpdGlvbiAmYykKQEAgLTExMjEsOSAr
MTEyOCw4IEBAIHN0YXRpYyBWaXNpYmxlUG9zaXRpb24gbG9naWNhbFN0YXJ0UG9zaXQKICAgICBp
ZiAoIWxvZ2ljYWxTdGFydE5vZGUpCiAgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oKTsK
IAotICAgIGludCBzdGFydE9mZnNldCA9IGxvZ2ljYWxTdGFydEJveC0+Y2FyZXRNaW5PZmZzZXQo
KTsKLSAgCi0gICAgVmlzaWJsZVBvc2l0aW9uIHZpc1BvcyA9IFZpc2libGVQb3NpdGlvbihsb2dp
Y2FsU3RhcnROb2RlLCBzdGFydE9mZnNldCwgRE9XTlNUUkVBTSk7CisgICAgVmlzaWJsZVBvc2l0
aW9uIHZpc1BvcyA9IGxvZ2ljYWxTdGFydE5vZGUtPmlzVGV4dE5vZGUoKSA/IFZpc2libGVQb3Np
dGlvbihQb3NpdGlvbihsb2dpY2FsU3RhcnROb2RlLCBsb2dpY2FsU3RhcnRCb3gtPmNhcmV0TWlu
T2Zmc2V0KCksIFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3IpLCBET1dOU1RSRUFN
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgOiBWaXNpYmxlUG9zaXRpb24ocG9zaXRpb25CZWZvcmVOb2RlKGxvZ2ljYWxTdGFydE5v
ZGUpLCBET1dOU1RSRUFNKTsKICAgICByZXR1cm4gcG9zaXRpb25Bdm9pZGluZ0ZpcnN0UG9zaXRp
b25JblRhYmxlKHZpc1Bvcyk7CiB9CiAKQEAgLTExNTcsMTcgKzExNjMsMTkgQEAgc3RhdGljIFZp
c2libGVQb3NpdGlvbiBsb2dpY2FsRW5kUG9zaXRpbwogICAgIGlmICghbG9naWNhbEVuZE5vZGUp
CiAgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oKTsKICAgICAKLSAgICBpbnQgZW5kT2Zm
c2V0ID0gMTsKKyAgICBQb3NpdGlvbiBwb3M7CiAgICAgaWYgKGxvZ2ljYWxFbmROb2RlLT5oYXNU
YWdOYW1lKGJyVGFnKSkKLSAgICAgICAgZW5kT2Zmc2V0ID0gMDsKKyAgICAgICAgcG9zID0gcG9z
aXRpb25CZWZvcmVOb2RlKGxvZ2ljYWxFbmROb2RlKTsKICAgICBlbHNlIGlmIChsb2dpY2FsRW5k
Qm94LT5pc0lubGluZVRleHRCb3goKSkgewogICAgICAgICBJbmxpbmVUZXh0Qm94KiBlbmRUZXh0
Qm94ID0gc3RhdGljX2Nhc3Q8SW5saW5lVGV4dEJveCo+KGxvZ2ljYWxFbmRCb3gpOwotICAgICAg
ICBlbmRPZmZzZXQgPSBlbmRUZXh0Qm94LT5zdGFydCgpOworICAgICAgICBpbnQgZW5kT2Zmc2V0
ID0gZW5kVGV4dEJveC0+c3RhcnQoKTsKICAgICAgICAgaWYgKCFlbmRUZXh0Qm94LT5pc0xpbmVC
cmVhaygpKQogICAgICAgICAgICAgZW5kT2Zmc2V0ICs9IGVuZFRleHRCb3gtPmxlbigpOwotICAg
IH0KKyAgICAgICAgcG9zID0gUG9zaXRpb24obG9naWNhbEVuZE5vZGUsIGVuZE9mZnNldCwgUG9z
aXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvcik7CisgICAgfSBlbHNlCisgICAgICAgIHBv
cyA9IHBvc2l0aW9uQWZ0ZXJOb2RlKGxvZ2ljYWxFbmROb2RlKTsKICAgICAKLSAgICByZXR1cm4g
VmlzaWJsZVBvc2l0aW9uKGxvZ2ljYWxFbmROb2RlLCBlbmRPZmZzZXQsIFZQX1VQU1RSRUFNX0lG
X1BPU1NJQkxFKTsKKyAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKHBvcywgVlBfVVBTVFJFQU1f
SUZfUE9TU0lCTEUpOwogfQogCiBib29sIGluU2FtZUxvZ2ljYWxMaW5lKGNvbnN0IFZpc2libGVQ
b3NpdGlvbiYgYSwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBiKQpJbmRleDogU291cmNlL1dlYkNv
cmUvcGFnZS9ET01TZWxlY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bh
Z2UvRE9NU2VsZWN0aW9uLmNwcAkocmV2aXNpb24gNzgxNjIpCisrKyBTb3VyY2UvV2ViQ29yZS9w
YWdlL0RPTVNlbGVjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxMSw3ICsyMTEsOCBAQCB2
b2lkIERPTVNlbGVjdGlvbjo6Y29sbGFwc2UoTm9kZSogbm9kZSwgCiAgICAgaWYgKCFpc1ZhbGlk
Rm9yUG9zaXRpb24obm9kZSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fZnJhbWUtPnNlbGVj
dGlvbigpLT5tb3ZlVG8oVmlzaWJsZVBvc2l0aW9uKG5vZGUsIG9mZnNldCwgRE9XTlNUUkVBTSkp
OworICAgIC8vIEZJWE1FOiBFbGltaW5hdGUgbGVnYWN5IGVkaXRpbmcgcG9zaXRpb25zCisgICAg
bV9mcmFtZS0+c2VsZWN0aW9uKCktPm1vdmVUbyhWaXNpYmxlUG9zaXRpb24oUG9zaXRpb24obm9k
ZSwgb2Zmc2V0KSwgRE9XTlNUUkVBTSkpOwogfQogCiB2b2lkIERPTVNlbGVjdGlvbjo6Y29sbGFw
c2VUb0VuZChFeGNlcHRpb25Db2RlJiBlYykKQEAgLTI2NCw4ICsyNjUsOSBAQCB2b2lkIERPTVNl
bGVjdGlvbjo6c2V0QmFzZUFuZEV4dGVudChOb2RlCiAgICAgaWYgKCFpc1ZhbGlkRm9yUG9zaXRp
b24oYmFzZU5vZGUpIHx8ICFpc1ZhbGlkRm9yUG9zaXRpb24oZXh0ZW50Tm9kZSkpCiAgICAgICAg
IHJldHVybjsKIAotICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlQmFzZSA9IFZpc2libGVQb3Np
dGlvbihiYXNlTm9kZSwgYmFzZU9mZnNldCwgRE9XTlNUUkVBTSk7Ci0gICAgVmlzaWJsZVBvc2l0
aW9uIHZpc2libGVFeHRlbnQgPSBWaXNpYmxlUG9zaXRpb24oZXh0ZW50Tm9kZSwgZXh0ZW50T2Zm
c2V0LCBET1dOU1RSRUFNKTsKKyAgICAvLyBGSVhNRTogRWxpbWluYXRlIGxlZ2FjeSBlZGl0aW5n
IHBvc2l0aW9ucworICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlQmFzZSA9IFZpc2libGVQb3Np
dGlvbihQb3NpdGlvbihiYXNlTm9kZSwgYmFzZU9mZnNldCksIERPV05TVFJFQU0pOworICAgIFZp
c2libGVQb3NpdGlvbiB2aXNpYmxlRXh0ZW50ID0gVmlzaWJsZVBvc2l0aW9uKFBvc2l0aW9uKGV4
dGVudE5vZGUsIGV4dGVudE9mZnNldCksIERPV05TVFJFQU0pOwogCiAgICAgbV9mcmFtZS0+c2Vs
ZWN0aW9uKCktPm1vdmVUbyh2aXNpYmxlQmFzZSwgdmlzaWJsZUV4dGVudCk7CiB9CkBAIC0yODIs
NyArMjg0LDggQEAgdm9pZCBET01TZWxlY3Rpb246OnNldFBvc2l0aW9uKE5vZGUqIG5vZAogICAg
IGlmICghaXNWYWxpZEZvclBvc2l0aW9uKG5vZGUpKQogICAgICAgICByZXR1cm47CiAKLSAgICBt
X2ZyYW1lLT5zZWxlY3Rpb24oKS0+bW92ZVRvKFZpc2libGVQb3NpdGlvbihub2RlLCBvZmZzZXQs
IERPV05TVFJFQU0pKTsKKyAgICAvLyBGSVhNRTogRWxpbWluYXRlIGxlZ2FjeSBlZGl0aW5nIHBv
c2l0aW9ucworICAgIG1fZnJhbWUtPnNlbGVjdGlvbigpLT5tb3ZlVG8oVmlzaWJsZVBvc2l0aW9u
KFBvc2l0aW9uKG5vZGUsIG9mZnNldCksIERPV05TVFJFQU0pKTsKIH0KIAogdm9pZCBET01TZWxl
Y3Rpb246Om1vZGlmeShjb25zdCBTdHJpbmcmIGFsdGVyU3RyaW5nLCBjb25zdCBTdHJpbmcmIGRp
cmVjdGlvblN0cmluZywgY29uc3QgU3RyaW5nJiBncmFudWxhcml0eVN0cmluZykKQEAgLTM1Myw3
ICszNTYsOCBAQCB2b2lkIERPTVNlbGVjdGlvbjo6ZXh0ZW5kKE5vZGUqIG5vZGUsIGluCiAgICAg
aWYgKCFpc1ZhbGlkRm9yUG9zaXRpb24obm9kZSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1f
ZnJhbWUtPnNlbGVjdGlvbigpLT5zZXRFeHRlbnQoVmlzaWJsZVBvc2l0aW9uKG5vZGUsIG9mZnNl
dCwgRE9XTlNUUkVBTSkpOworICAgIC8vIEZJWE1FOiBFbGltaW5hdGUgbGVnYWN5IGVkaXRpbmcg
cG9zaXRpb25zCisgICAgbV9mcmFtZS0+c2VsZWN0aW9uKCktPnNldEV4dGVudChWaXNpYmxlUG9z
aXRpb24oUG9zaXRpb24obm9kZSwgb2Zmc2V0KSwgRE9XTlNUUkVBTSkpOwogfQogCiBQYXNzUmVm
UHRyPFJhbmdlPiBET01TZWxlY3Rpb246OmdldFJhbmdlQXQoaW50IGluZGV4LCBFeGNlcHRpb25D
b2RlJiBlYykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAJKHJldmlzaW9u
IDc4MTYyKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zNzMsNyArMzczLDcgQEAgYm9vbCBFdmVudEhhbmRsZXI6OmhhbmRsZU1vdXNl
UHJlc3NFdmVudAogCiAgICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3MoaW5uZXJOb2RlLT5y
ZW5kZXJlcigpLT5wb3NpdGlvbkZvclBvaW50KGV2ZW50LmxvY2FsUG9pbnQoKSkpOwogICAgIGlm
ICh2aXNpYmxlUG9zLmlzTnVsbCgpKQotICAgICAgICB2aXNpYmxlUG9zID0gVmlzaWJsZVBvc2l0
aW9uKGlubmVyTm9kZSwgMCwgRE9XTlNUUkVBTSk7CisgICAgICAgIHZpc2libGVQb3MgPSBWaXNp
YmxlUG9zaXRpb24oZmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2RlKGlubmVyTm9kZSksIERPV05T
VFJFQU0pOwogICAgIFBvc2l0aW9uIHBvcyA9IHZpc2libGVQb3MuZGVlcEVxdWl2YWxlbnQoKTsK
ICAgICAKICAgICBWaXNpYmxlU2VsZWN0aW9uIG5ld1NlbGVjdGlvbiA9IG1fZnJhbWUtPnNlbGVj
dGlvbigpLT5zZWxlY3Rpb24oKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJPYmplY3QuY3BwCShyZXZpc2lvbiA3ODE2MikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjU0LDcgKzI2NTQsOCBAQCBW
aXNpYmxlUG9zaXRpb24gUmVuZGVyT2JqZWN0OjpjcmVhdGVWaXNpCiAgICAgICAgICAgICBpZiAo
Y2FuZGlkYXRlLm5vZGUoKS0+aXNDb250ZW50RWRpdGFibGUoKSkKICAgICAgICAgICAgICAgICBy
ZXR1cm4gVmlzaWJsZVBvc2l0aW9uKGNhbmRpZGF0ZSwgYWZmaW5pdHkpOwogICAgICAgICB9Ci0g
ICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24obm9kZSwgb2Zmc2V0LCBhZmZpbml0eSk7Cisg
ICAgICAgIC8vIEZJWE1FOiBFbGltaW5hdGUgbGVnYWN5IGVkaXRpbmcgcG9zaXRpb25zCisgICAg
ICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oUG9zaXRpb24obm9kZSwgb2Zmc2V0KSwgYWZmaW5p
dHkpOwogICAgIH0KIAogICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gY3Jvc3MgdGhlIGJvdW5kYXJ5
IGJldHdlZW4gZWRpdGFibGUgYW5kIG5vbi1lZGl0YWJsZQpAQCAtMjY2OSw3ICsyNjcwLDcgQEAg
VmlzaWJsZVBvc2l0aW9uIFJlbmRlck9iamVjdDo6Y3JlYXRlVmlzaQogICAgICAgICBSZW5kZXJP
YmplY3QqIHJlbmRlcmVyID0gY2hpbGQ7CiAgICAgICAgIHdoaWxlICgocmVuZGVyZXIgPSByZW5k
ZXJlci0+bmV4dEluUHJlT3JkZXIocGFyZW50KSkpIHsKICAgICAgICAgICAgIGlmIChOb2RlKiBu
b2RlID0gcmVuZGVyZXItPm5vZGUoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gVmlzaWJsZVBv
c2l0aW9uKG5vZGUsIDAsIERPV05TVFJFQU0pOworICAgICAgICAgICAgICAgIHJldHVybiBWaXNp
YmxlUG9zaXRpb24oZmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2RlKG5vZGUpLCBET1dOU1RSRUFN
KTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIEZpbmQgbm9uLWFub255bW91cyBjb250ZW50IGJl
Zm9yZS4KQEAgLTI2NzgsMTIgKzI2NzksMTIgQEAgVmlzaWJsZVBvc2l0aW9uIFJlbmRlck9iamVj
dDo6Y3JlYXRlVmlzaQogICAgICAgICAgICAgaWYgKHJlbmRlcmVyID09IHBhcmVudCkKICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGlmIChOb2RlKiBub2RlID0gcmVuZGVyZXIt
Pm5vZGUoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKGxhc3REZWVw
RWRpdGluZ1Bvc2l0aW9uRm9yTm9kZShub2RlKSwgRE9XTlNUUkVBTSk7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihsYXN0UG9zaXRpb25Jbk9yQWZ0ZXJOb2RlKG5vZGUp
LCBET1dOU1RSRUFNKTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIFVzZSB0aGUgcGFyZW50IGl0
c2VsZiB1bmxlc3MgaXQgdG9vIGlzIGFub255bW91cy4KICAgICAgICAgaWYgKE5vZGUqIG5vZGUg
PSBwYXJlbnQtPm5vZGUoKSkKLSAgICAgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24obm9k
ZSwgMCwgRE9XTlNUUkVBTSk7CisgICAgICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKGZp
cnN0UG9zaXRpb25Jbk9yQmVmb3JlTm9kZShub2RlKSwgRE9XTlNUUkVBTSk7CiAKICAgICAgICAg
Ly8gUmVwZWF0IGF0IHRoZSBuZXh0IGxldmVsIHVwLgogICAgICAgICBjaGlsZCA9IHBhcmVudDsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmNw
cAkocmV2aXNpb24gNzgxNjIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4
dENvbnRyb2wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMjEsNyArMzIxLDcgQEAgUGFzc1JlZlB0
cjxSYW5nZT4gUmVuZGVyVGV4dENvbnRyb2w6OnNlbAogVmlzaWJsZVBvc2l0aW9uIFJlbmRlclRl
eHRDb250cm9sOjp2aXNpYmxlUG9zaXRpb25Gb3JJbmRleChpbnQgaW5kZXgpIGNvbnN0CiB7CiAg
ICAgaWYgKGluZGV4IDw9IDApCi0gICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24obV9pbm5l
clRleHQuZ2V0KCksIDAsIERPV05TVFJFQU0pOworICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0
aW9uKFBvc2l0aW9uKG1faW5uZXJUZXh0LmdldCgpLCAwLCBQb3NpdGlvbjo6UG9zaXRpb25Jc09m
ZnNldEluQW5jaG9yKSwgRE9XTlNUUkVBTSk7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAg
ICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IFJhbmdlOjpjcmVhdGUoZG9jdW1lbnQoKSk7CiAgICAg
cmFuZ2UtPnNlbGVjdE5vZGVDb250ZW50cyhtX2lubmVyVGV4dC5nZXQoKSwgZWMpOwpAQCAtMzMy
LDcgKzMzMiw3IEBAIFZpc2libGVQb3NpdGlvbiBSZW5kZXJUZXh0Q29udHJvbDo6dmlzaWIKICAg
ICBBU1NFUlQoIWVjKTsKICAgICBpbnQgZW5kT2Zmc2V0ID0gaXQucmFuZ2UoKS0+ZW5kT2Zmc2V0
KGVjKTsKICAgICBBU1NFUlQoIWVjKTsKLSAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKGVuZENv
bnRhaW5lciwgZW5kT2Zmc2V0LCBVUFNUUkVBTSk7CisgICAgcmV0dXJuIFZpc2libGVQb3NpdGlv
bihQb3NpdGlvbihlbmRDb250YWluZXIsIGVuZE9mZnNldCwgUG9zaXRpb246OlBvc2l0aW9uSXNP
ZmZzZXRJbkFuY2hvciksIFVQU1RSRUFNKTsKIH0KIAogaW50IFJlbmRlclRleHRDb250cm9sOjpp
bmRleEZvclZpc2libGVQb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mIHBvcykgY29uc3QK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUZXh0Q29udGVudEVsZW1lbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUZXh0Q29udGVudEVsZW1lbnQuY3BwCShy
ZXZpc2lvbiA3ODE2MikKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUZXh0Q29udGVudEVsZW1l
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDUsNyArMTQ1LDcgQEAgdm9pZCBTVkdUZXh0Q29u
dGVudEVsZW1lbnQ6OnNlbGVjdFN1YlN0cgogICAgICAgICByZXR1cm47CiAKICAgICAvLyBGaW5k
IHNlbGVjdGlvbiBzdGFydAotICAgIFZpc2libGVQb3NpdGlvbiBzdGFydChjb25zdF9jYXN0PFNW
R1RleHRDb250ZW50RWxlbWVudCo+KHRoaXMpLCAwLCBTRUxfREVGQVVMVF9BRkZJTklUWSk7Cisg
ICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0KGZpcnN0UG9zaXRpb25Jbk5vZGUoY29uc3RfY2FzdDxT
VkdUZXh0Q29udGVudEVsZW1lbnQqPih0aGlzKSkpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBjaGFybnVtOyArK2kpCiAgICAgICAgIHN0YXJ0ID0gc3RhcnQubmV4dCgpOwogCkluZGV4
OiBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9tYWMvQ2hhbmdlTG9nCShyZXZpc2lvbiA3ODE2MikKKysrIFNvdXJjZS9XZWJLaXQvbWFjL0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5IEBACisyMDExLTAyLTA5ICBMZXZp
IFdlaW50cmF1YiAgPGxldml3QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTdG9wIGluc3RhbnRpYXRpbmcgbGVnYWN5IGVkaXRp
bmcgUG9zaXRpb25zIGluIFZpc2libGVQb3NpdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTI5MTkKKworICAgICAgICBDaGFuZ2luZyB1c2FnZSBv
ZiBsZWdhY3kgVmlzaWJsZVBvc2l0aW9uIGNvbnN0cnVjdG9yLiBTaW5jZSB3ZSB3ZXJlIGRlYWxp
bmcKKyAgICAgICAgd2l0aCBwb3NpdGlvbnMgZnJvbSBET00gUmFuZ2VzLCB3ZSdyZSBndWFyYW50
ZWVkIGEgcGFyZW50LWFuY2hvcmVkIHBvc2l0aW9uLgorCisgICAgICAgICogV2ViVmlldy9XZWJG
cmFtZS5tbToKKyAgICAgICAgKC1bV2ViRnJhbWUgX2NhcmV0UmVjdEF0UG9zaXRpb246YWZmaW5p
dHk6XSk6CisgICAgICAgICogV2ViVmlldy9XZWJGcmFtZUludGVybmFsLmg6CisgICAgICAgICog
V2ViVmlldy9XZWJUZXh0Q29tcGxldGlvbkNvbnRyb2xsZXIubW06CisgICAgICAgICgtW1dlYlRl
eHRDb21wbGV0aW9uQ29udHJvbGxlciBkb0NvbXBsZXRpb25dKToKKwogMjAxMS0wMi0wOSAgUGF2
ZWwgRmVsZG1hbiAgPHBmZWxkbWFuQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBi
eSBZdXJ5IFNlbWlraGF0c2t5LgpJbmRleDogU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJG
cmFtZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1l
Lm1tCShyZXZpc2lvbiA3ODE2MikKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJh
bWUubW0JKHdvcmtpbmcgY29weSkKQEAgLTY2MCw5ICs2NjAsOSBAQCAtIChOU1N0cmluZyAqKV9z
dHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyCiAgICAgcmV0dXJuIHVzdHJpbmdUb1N0cmluZyhyZXN1
bHQudG9TdHJpbmcoX3ByaXZhdGUtPmNvcmVGcmFtZS0+c2NyaXB0KCktPmdsb2JhbE9iamVjdCht
YWluVGhyZWFkTm9ybWFsV29ybGQoKSktPmdsb2JhbEV4ZWMoKSkpOwogfQogCi0tIChOU1JlY3Qp
X2NhcmV0UmVjdEF0Tm9kZTooRE9NTm9kZSAqKW5vZGUgb2Zmc2V0OihpbnQpb2Zmc2V0IGFmZmlu
aXR5OihOU1NlbGVjdGlvbkFmZmluaXR5KWFmZmluaXR5CistIChOU1JlY3QpX2NhcmV0UmVjdEF0
UG9zaXRpb246KGNvbnN0IFBvc2l0aW9uJilwb3MgYWZmaW5pdHk6KE5TU2VsZWN0aW9uQWZmaW5p
dHkpYWZmaW5pdHkKIHsKLSAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvc2l0aW9uKGNvcmUo
bm9kZSksIG9mZnNldCwgc3RhdGljX2Nhc3Q8RUFmZmluaXR5PihhZmZpbml0eSkpOworICAgIFZp
c2libGVQb3NpdGlvbiB2aXNpYmxlUG9zaXRpb24ocG9zLCBzdGF0aWNfY2FzdDxFQWZmaW5pdHk+
KGFmZmluaXR5KSk7CiAgICAgcmV0dXJuIHZpc2libGVQb3NpdGlvbi5hYnNvbHV0ZUNhcmV0Qm91
bmRzKCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWVJbnRl
cm5hbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWVJ
bnRlcm5hbC5oCShyZXZpc2lvbiA3ODE2MikKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcv
V2ViRnJhbWVJbnRlcm5hbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAjaW1w
b3J0ICJXZWJQcmVmZXJlbmNlc1ByaXZhdGUuaCIKICNpbXBvcnQgPFdlYkNvcmUvRWRpdEFjdGlv
bi5oPgogI2ltcG9ydCA8V2ViQ29yZS9GcmFtZUxvYWRlclR5cGVzLmg+CisjaW1wb3J0IDxXZWJD
b3JlL1Bvc2l0aW9uLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1NlbGVjdGlvbkNvbnRyb2xsZXIuaD4K
ICNpbXBvcnQgPFdlYkNvcmUvU2V0dGluZ3MuaD4KIApAQCAtMTM0LDcgKzEzNSw3IEBAIEBpbnRl
cmZhY2UgV2ViRnJhbWUgKFdlYkludGVybmFsKQogCiAtIChOU1N0cmluZyAqKV9tYXJrdXBTdHJp
bmdGcm9tUmFuZ2U6KERPTVJhbmdlICopcmFuZ2Ugbm9kZXM6KE5TQXJyYXkgKiopbm9kZXM7CiAK
LS0gKE5TUmVjdClfY2FyZXRSZWN0QXROb2RlOihET01Ob2RlICopbm9kZSBvZmZzZXQ6KGludClv
ZmZzZXQgYWZmaW5pdHk6KE5TU2VsZWN0aW9uQWZmaW5pdHkpYWZmaW5pdHk7CistIChOU1JlY3Qp
X2NhcmV0UmVjdEF0UG9zaXRpb246KGNvbnN0IFdlYkNvcmU6OlBvc2l0aW9uJilwb3MgYWZmaW5p
dHk6KE5TU2VsZWN0aW9uQWZmaW5pdHkpYWZmaW5pdHk7CiAtIChOU1JlY3QpX2ZpcnN0UmVjdEZv
ckRPTVJhbmdlOihET01SYW5nZSAqKXJhbmdlOwogLSAodm9pZClfc2Nyb2xsRE9NUmFuZ2VUb1Zp
c2libGU6KERPTVJhbmdlICopcmFuZ2U7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZp
ZXcvV2ViVGV4dENvbXBsZXRpb25Db250cm9sbGVyLm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvbWFjL1dlYlZpZXcvV2ViVGV4dENvbXBsZXRpb25Db250cm9sbGVyLm1tCShyZXZpc2lv
biA3ODE2MikKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVGV4dENvbXBsZXRpb25D
b250cm9sbGVyLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpbXBvcnQg
IldlYlRleHRDb21wbGV0aW9uQ29udHJvbGxlci5oIgogCisjaW1wb3J0ICJET01Ob2RlSW50ZXJu
YWwuaCIKICNpbXBvcnQgIkRPTVJhbmdlSW50ZXJuYWwuaCIKICNpbXBvcnQgIldlYkZyYW1lSW50
ZXJuYWwuaCIKICNpbXBvcnQgIldlYkhUTUxWaWV3SW50ZXJuYWwuaCIKQEAgLTIwMyw3ICsyMDQs
NyBAQCAtICh2b2lkKWRvQ29tcGxldGlvbgogICAgICAgICAgICAgQVNTRVJUKCFfb3JpZ2luYWxT
dHJpbmcpOyAgICAgICAvLyB0aGlzIHNob3VsZCBvbmx5IGJlIHNldCBJRkYgd2UgaGF2ZSBhIHBv
cHVwIHdpbmRvdwogICAgICAgICAgICAgX29yaWdpbmFsU3RyaW5nID0gW1tmcmFtZSBfc3RyaW5n
Rm9yUmFuZ2U6c2VsZWN0aW9uXSByZXRhaW5dOwogICAgICAgICAgICAgW3NlbGYgX2J1aWxkVUld
OwotICAgICAgICAgICAgTlNSZWN0IHdvcmRSZWN0ID0gW2ZyYW1lIF9jYXJldFJlY3RBdE5vZGU6
W3dob2xlV29yZCBzdGFydENvbnRhaW5lcl0gb2Zmc2V0Olt3aG9sZVdvcmQgc3RhcnRPZmZzZXRd
IGFmZmluaXR5Ok5TU2VsZWN0aW9uQWZmaW5pdHlEb3duc3RyZWFtXTsKKyAgICAgICAgICAgIE5T
UmVjdCB3b3JkUmVjdCA9IFtmcmFtZSBfY2FyZXRSZWN0QXRQb3NpdGlvbjpQb3NpdGlvbihjb3Jl
KFt3aG9sZVdvcmQgc3RhcnRDb250YWluZXJdKSwgW3dob2xlV29yZCBzdGFydE9mZnNldF0sIFBv
c2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3IpIGFmZmluaXR5Ok5TU2VsZWN0aW9uQWZm
aW5pdHlEb3duc3RyZWFtXTsKICAgICAgICAgICAgIC8vICsxIHRvIGJlIHVuZGVyIHRoZSB3b3Jk
LCBub3QgdGhlIGNhcmV0CiAgICAgICAgICAgICAvLyBGSVhNRSAtIDM3Njk2NTIgLSBXcm9uZyBw
b3NpdGlvbmluZyBmb3IgcmlnaHQgdG8gbGVmdCBsYW5ndWFnZXMuICBXZSBzaG91bGQgbGluZSB1
cCB0aGUgdXBwZXIKICAgICAgICAgICAgIC8vIHJpZ2h0IGNvcm5lciB3aXRoIHRoZSBjYXJldCBp
bnN0ZWFkIG9mIHVwcGVyIGxlZnQsIGFuZCB0aGUgKzEgd291bGQgYmUgYSAtMS4K
</data>
<flag name="review"
          id="73512"
          type_id="1"
          status="+"
          setter="rniwa"
    />
          </attachment>
      

    </bug>

</bugzilla>