<?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>65528</bug_id>
          
          <creation_ts>2011-08-02 05:10:42 -0700</creation_ts>
          <short_desc>[Qt][WK2] Create scene graph nodes for tiles in QTouchWebView instead of using imperative painting.</short_desc>
          <delta_ts>2011-08-23 11:47:45 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>65541</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Jocelyn Turcotte">jturcotte</reporter>
          <assigned_to name="Jocelyn Turcotte">jturcotte</assigned_to>
          <cc>benjamin</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>hausmann</cc>
    
    <cc>igor.oliveira</cc>
    
    <cc>kling</cc>
    
    <cc>ostap73</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>yael</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>445196</commentid>
    <comment_count>0</comment_count>
    <who name="Jocelyn Turcotte">jturcotte</who>
    <bug_when>2011-08-02 05:10:42 -0700</bug_when>
    <thetext>[Qt][WK2] Create scene graph nodes for tiles in QTouchWebView instead of using imperative painting.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>445210</commentid>
    <comment_count>1</comment_count>
      <attachid>102638</attachid>
    <who name="Jocelyn Turcotte">jturcotte</who>
    <bug_when>2011-08-02 05:31:48 -0700</bug_when>
    <thetext>Created attachment 102638
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>445211</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-02 05:33:41 -0700</bug_when>
    <thetext>Attachment 102638 did not pass style-queue:

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

Source/WebKit2/UIProcess/API/qt/qtouchwebpage.cpp:26:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 1 in 15 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>445231</commentid>
    <comment_count>3</comment_count>
      <attachid>102638</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2011-08-02 06:33:14 -0700</bug_when>
    <thetext>Comment on attachment 102638
Patch

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

Quick look, I&apos;ll do a review later.

&gt; Source/WebKit2/UIProcess/API/qt/qtouchwebpage.cpp:73
&gt; +    // This takes ownership of itemNode and it&apos;s children.

&quot;This&quot; is a bit ambiguous, I have no clue who takes ownership here :)

&gt; Source/WebKit2/UIProcess/qt/SGAgent.cpp:38
&gt; +    enum Type {
&gt; +        CreateTile,
&gt; +        CreateScale,
&gt; +        Remove,
&gt; +        SetTexture
&gt; +    };

I think you also need to implement some kind of barrier to make the queue work, because the operations are not atomic.

If you take this code for example:
 if (!m_nodeID)
     m_nodeID = m_sgAgent-&gt;createTileNode(m_parentNodeID);
 ASSERT(m_nodeID);
 QRect sourceRect(0, 0, m_rect.width(), m_rect.height());
 m_sgAgent-&gt;setNodeTexture(m_nodeID, m_backBuffer, sourceRect, m_rect);

Without a barrier, nothing prevent the updatePaintNode() thread from only getting CreateTile because SetTexture has not been executed yet.

&gt; Source/WebKit2/UIProcess/qt/TiledDrawingAreaTileQt.cpp:115
&gt; +    ASSERT(false);

ASSERT_NOT_REACHED() :)

&gt; Source/WebKit2/UIProcess/qt/TiledDrawingAreaTileQt.cpp:139
&gt; +    QPainter painter;
&gt; +    painter.begin(&amp;m_backBuffer);
&gt;      IntSize drawPoint = updateChunkRect.location() - m_rect.location();
&gt;      painter.drawImage(QPoint(drawPoint.width(), drawPoint.height()), image);
&gt; +    painter.end();

Maybe just create a scope for a Qainter(&amp;m_backbuffer) to avoid calling end() manually?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>445255</commentid>
    <comment_count>4</comment_count>
    <who name="Viatcheslav Ostapenko">ostap73</who>
    <bug_when>2011-08-02 07:34:53 -0700</bug_when>
    <thetext>(In reply to comment #1)
&gt; Created an attachment (id=102638) [details]
&gt; Patch

1. You do not need scale nodes. If you call setRect on QSGSimpleTexture node with rect size not equal to texture size, than texture will be scaled.
2. In SGAgent::updatePaintNode why do you call parentNode-&gt;prependChildNode ?
3. Wouldn&apos;t it be better to replace both front/back buffers with textures and upload update chunks directly to textures?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>445256</commentid>
    <comment_count>5</comment_count>
    <who name="Jocelyn Turcotte">jturcotte</who>
    <bug_when>2011-08-02 07:36:56 -0700</bug_when>
    <thetext>(In reply to comment #3)
Cool thx, then I&apos;ll wait for the full review, meanwhile:
&gt; I think you also need to implement some kind of barrier to make the queue work, because the operations are not atomic.
&gt; 
&gt; If you take this code for example:
&gt;  if (!m_nodeID)
&gt;      m_nodeID = m_sgAgent-&gt;createTileNode(m_parentNodeID);
&gt;  ASSERT(m_nodeID);
&gt;  QRect sourceRect(0, 0, m_rect.width(), m_rect.height());
&gt;  m_sgAgent-&gt;setNodeTexture(m_nodeID, m_backBuffer, sourceRect, m_rect);
&gt; 
&gt; Without a barrier, nothing prevent the updatePaintNode() thread from only getting CreateTile because SetTexture has not been executed yet.

The GUI thread will never run at the same time as updatePaintNode(). The barrier is kind of QSGCanvas::paintEvent and it gets unlocked when the graph&apos;s update is over and rendering starts (see QSGCanvasRenderThread::run). We get guaranteed atomicity until we return to the event loop.

&gt; Maybe just create a scope for a Qainter(&amp;m_backbuffer) to avoid calling end() manually?

I thought it to be a bit more readable but safer might be better, I can change it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>445264</commentid>
    <comment_count>6</comment_count>
    <who name="Jocelyn Turcotte">jturcotte</who>
    <bug_when>2011-08-02 07:51:28 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; 1. You do not need scale nodes. If you call setRect on QSGSimpleTexture node with rect size not equal to texture size, than texture will be scaled.
I&apos;d like to keep all tile bound together on an integer coordinate system and scale the whole coordinate system like it is currently with QPainter on the TiledDrawingAreaProxy.
This is to make it simpler to prevent fractional transformed sizes/positions and avoid slight scaling/filtering. I have a pending patch to further enforce that.

&gt; 2. In SGAgent::updatePaintNode why do you call parentNode-&gt;prependChildNode ?
To add the node the the scene tree, I use prepend instead of append like explained in the comment to paint complete/older tile sets on top of the newest one (we could have a more flexible mechanism but hardcoding prepend should do for now). I could use append for SGTileNodes, but it doesn&apos;t really matter since they don&apos;t overlap.

&gt; 3. Wouldn&apos;t it be better to replace both front/back buffers with textures and upload update chunks directly to textures?
I tried that but we really need to do the texture upload on the scene graph thread for performance and maintainability reasons, else we need to spawn a shared context between threads and it&apos;s not worth it for now.

We need at least to keep one QImage back buffer to receive partial updates from the WebProcess. To copy a texture over another one we need to use use a FBO, it&apos;s complex and I think we should keep it simple until we know if we can get the web process to render directly to hardware shared memory (for supported mobile architectures) and pass the shared buffer handle directly to the scene graph to bind it to a texture.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>445309</commentid>
    <comment_count>7</comment_count>
      <attachid>102659</attachid>
    <who name="Jocelyn Turcotte">jturcotte</who>
    <bug_when>2011-08-02 09:15:12 -0700</bug_when>
    <thetext>Created attachment 102659
Patch

- Fixed stuff asked in comment #3
- Destroyed any NodeUpdates still in the queue in ~SGAgent
- Removed locks in SGAgent after discussion with Benjamin since the locked GUI thread also protects us there.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>445311</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-02 09:17:21 -0700</bug_when>
    <thetext>Attachment 102659 did not pass style-queue:

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

Source/WebKit2/UIProcess/API/qt/qtouchwebpage.cpp:26:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 1 in 15 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>445690</commentid>
    <comment_count>9</comment_count>
      <attachid>102659</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2011-08-02 19:27:53 -0700</bug_when>
    <thetext>Comment on attachment 102659
Patch

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

Little comments before going to bed :)

&gt; Source/WebKit2/UIProcess/API/qt/qtouchwebpage.h:57
&gt; +    virtual QSGNode* updatePaintNode(QSGNode* oldNode, UpdatePaintNodeData*);

oldNode -&gt; itemNode for consistency with the implementation?

&gt; Source/WebKit2/UIProcess/API/qt/qtouchwebpage_p.h:50
&gt; +    QScopedPointer&lt;WebKit::SGAgent&gt; sgAgent;

What about just having SGAgent by value instead of a pointer so it is allocated along QTouchWebPagePrivate?

&gt; Source/WebKit2/UIProcess/qt/SGAgent.cpp:114
&gt; +    int nodeID = nextNodeID++;
&gt; +    nodeUpdatesQueue.append(new NodeUpdateCreateTile(nodeID, parentNodeID));
&gt; +    item-&gt;update();
&gt; +    return nodeID;
&gt; +}
&gt; +
&gt; +int SGAgent::createScaleNode(int parentNodeID, float scale)
&gt; +{
&gt; +    int nodeID = nextNodeID++;
&gt; +    nodeUpdatesQueue.append(new NodeUpdateCreateScale(nodeID, parentNodeID, scale));
&gt; +    item-&gt;update();
&gt; +    return nodeID;

Ok, call me paranoid, but I am always scared when I see an ID than can wrap around on overflow AND for which one value has a special meaning.
Just to be on the correct side, you could have:
int nextNodeID() const {
        int nodeID = m_nextNodeID++;
        if (!nodeID)
           nodeID = m_nextNodeID++;
        ASSERT(nodeID);
        return nodeID;
}

Too much paranoia? :)

&gt; Source/WebKit2/UIProcess/qt/TiledDrawingAreaTileQt.cpp:52
&gt; +    , m_parentNodeID()

Uh? :)
Missing 0? :)

&gt; Source/WebKit2/UIProcess/qt/TiledDrawingAreaTileQt.cpp:81
&gt;  bool TiledDrawingAreaTile::isReadyToPaint() const
&gt;  {
&gt; -    return m_isFrontBufferValid;
&gt; +    return m_nodeID;

return !!m_nodeID; for clarity?

I have the feeling that is not really the meaning of isReadyToPaint() but I&apos;ll check the code another time :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>445691</commentid>
    <comment_count>10</comment_count>
      <attachid>102659</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2011-08-02 19:27:55 -0700</bug_when>
    <thetext>Comment on attachment 102659
Patch

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

Little comments before going to bed :)

&gt; Source/WebKit2/UIProcess/API/qt/qtouchwebpage.h:57
&gt; +    virtual QSGNode* updatePaintNode(QSGNode* oldNode, UpdatePaintNodeData*);

oldNode -&gt; itemNode for consistency with the implementation?

&gt; Source/WebKit2/UIProcess/API/qt/qtouchwebpage_p.h:50
&gt; +    QScopedPointer&lt;WebKit::SGAgent&gt; sgAgent;

What about just having SGAgent by value instead of a pointer so it is allocated along QTouchWebPagePrivate?

&gt; Source/WebKit2/UIProcess/qt/SGAgent.cpp:114
&gt; +    int nodeID = nextNodeID++;
&gt; +    nodeUpdatesQueue.append(new NodeUpdateCreateTile(nodeID, parentNodeID));
&gt; +    item-&gt;update();
&gt; +    return nodeID;
&gt; +}
&gt; +
&gt; +int SGAgent::createScaleNode(int parentNodeID, float scale)
&gt; +{
&gt; +    int nodeID = nextNodeID++;
&gt; +    nodeUpdatesQueue.append(new NodeUpdateCreateScale(nodeID, parentNodeID, scale));
&gt; +    item-&gt;update();
&gt; +    return nodeID;

Ok, call me paranoid, but I am always scared when I see an ID than can wrap around on overflow AND for which one value has a special meaning.
Just to be on the correct side, you could have:
int nextNodeID() const {
        int nodeID = m_nextNodeID++;
        if (!nodeID)
           nodeID = m_nextNodeID++;
        ASSERT(nodeID);
        return nodeID;
}

Too much paranoia? :)

&gt; Source/WebKit2/UIProcess/qt/TiledDrawingAreaTileQt.cpp:52
&gt; +    , m_parentNodeID()

Uh? :)
Missing 0? :)

&gt; Source/WebKit2/UIProcess/qt/TiledDrawingAreaTileQt.cpp:81
&gt;  bool TiledDrawingAreaTile::isReadyToPaint() const
&gt;  {
&gt; -    return m_isFrontBufferValid;
&gt; +    return m_nodeID;

return !!m_nodeID; for clarity?

I have the feeling that is not really the meaning of isReadyToPaint() but I&apos;ll check the code another time :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>445843</commentid>
    <comment_count>11</comment_count>
      <attachid>102776</attachid>
    <who name="Jocelyn Turcotte">jturcotte</who>
    <bug_when>2011-08-03 06:26:19 -0700</bug_when>
    <thetext>Created attachment 102776
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>445844</commentid>
    <comment_count>12</comment_count>
    <who name="Jocelyn Turcotte">jturcotte</who>
    <bug_when>2011-08-03 06:27:20 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; oldNode -&gt; itemNode for consistency with the implementation?
Renamed itemNode to oldNode, like in QSGItem.

&gt; What about just having SGAgent by value instead of a pointer so it is allocated along QTouchWebPagePrivate?
Changed

&gt; Ok, call me paranoid, but I am always scared when I see an ID than can wrap around on overflow AND for which one value has a special meaning.
&gt; Too much paranoia? :)
From my calculations, if you generate 10 tiles per second non-stop, it would take 10 years :P

&gt; Uh? :)
&gt; Missing 0? :)
Oh, that&apos;s embarassing...

&gt; return !!m_nodeID; for clarity?
Changed

&gt; I have the feeling that is not really the meaning of isReadyToPaint() but I&apos;ll check the code another time :)
We need it for now for the coverageRatio method, we will have to refactor the tiling soon so we could change the name there.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>446422</commentid>
    <comment_count>13</comment_count>
      <attachid>102776</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2011-08-04 03:16:18 -0700</bug_when>
    <thetext>Comment on attachment 102776
Patch

Quick comment before lunch :)

&gt; Source/WebKit2/UIProcess/qt/SGTileNode.h:37
&gt; +
&gt; +class SGTileNode : public QSGGeometryNode {
&gt; +public:
&gt; +    SGTileNode();
&gt; +

This is awefully similar to QSGSimpleTextureNode (the way the source rect is handled is different but the end result should be exactly the same as far as I can tell).
Any reason why we cannot use QSGSimpleTextureNode?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>446435</commentid>
    <comment_count>14</comment_count>
    <who name="Jocelyn Turcotte">jturcotte</who>
    <bug_when>2011-08-04 05:13:37 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; This is awefully similar to QSGSimpleTextureNode (the way the source rect is handled is different but the end result should be exactly the same as far as I can tell).
&gt; Any reason why we cannot use QSGSimpleTextureNode?

Like just talked, I needed two additional features that QSGSimpleTextureNode doesn&apos;t provide:
- Allow a source rect to be specified for edge tiles.
- Own the QSGTexture object for proper destruction on the sg thread after the QSGItem is destroyed on the GUI thread.

The first point could be handled by having textures created for the size of the visible content, but we still need our own node type for the owning part. We can see later if we still need it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>446445</commentid>
    <comment_count>15</comment_count>
      <attachid>102776</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2011-08-04 05:31:33 -0700</bug_when>
    <thetext>Comment on attachment 102776
Patch

Yeah, I finally found something meaningfull to complain about :-D

&gt; Source/WebKit2/UIProcess/qt/SGAgent.cpp:99
&gt; +SGAgent::~SGAgent()
&gt; +{
&gt; +    foreach (NodeUpdate* nodeUpdate, nodeUpdatesQueue)
&gt; +        delete nodeUpdate;
&gt; +}

Deque of OwnPtr and you could remove this, see comment later

&gt; Source/WebKit2/UIProcess/qt/SGAgent.h:54
&gt; +    QLinkedList&lt;NodeUpdate*&gt; nodeUpdatesQueue;

QLinkedList is a piece of shit, what about using WTF&apos;s deque?
Something else really nice Deque is it has template insertion and accessor. That means you can use it with OwnPtr and have super clean memory management in SGAgent :-D

&gt; Source/WebKit2/UIProcess/qt/SGAgent.h:55
&gt; +    QHash&lt;int, QSGNode*&gt; nodes;

QHash is also a piece of shit :)
WTF&apos;s hash table is much better.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>446452</commentid>
    <comment_count>16</comment_count>
      <attachid>102776</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2011-08-04 06:03:26 -0700</bug_when>
    <thetext>Comment on attachment 102776
Patch

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

&gt; Source/WebKit2/UIProcess/API/qt/qtouchwebpage_p.h:35
&gt;  
&gt; +
&gt;  class QTouchWebPagePrivate {

hum :)

&gt; Source/WebKit2/UIProcess/TiledDrawingAreaProxy.cpp:111
&gt;  
&gt; -
&gt;  static IntPoint innerBottomRight(const IntRect&amp; rect)

Uh :)

&gt;&gt; Source/WebKit2/UIProcess/qt/SGAgent.cpp:99
&gt;&gt; +SGAgent::~SGAgent()
&gt;&gt; +{
&gt;&gt; +    foreach (NodeUpdate* nodeUpdate, nodeUpdatesQueue)
&gt;&gt; +        delete nodeUpdate;
&gt;&gt; +}
&gt; 
&gt; Deque of OwnPtr and you could remove this, see comment later

Deque of OwnPtr and you could remove this, see comment later

&gt; Source/WebKit2/UIProcess/qt/SGAgent.cpp:136
&gt; +            SGTileNode* tileNode  = new SGTileNode;

One space too many before the equal sign.

&gt; Source/WebKit2/UIProcess/qt/SGAgent.cpp:137
&gt; +            QSGNode* parentNode = createTileUpdate-&gt;parentNodeID ? nodes.value(createTileUpdate-&gt;parentNodeID) : itemNode;

Wouldn&apos;t that mean something went horribly wrong if createTileUpdate-&gt;parentNodeID is 0?
I guess the tile should always be in the scale node of the tileset.

&gt; Source/WebKit2/UIProcess/qt/SGAgent.cpp:144
&gt; +            QSGTransformNode* scaleNode  = new QSGTransformNode;

One space too many before the equal sign.

&gt; Source/WebKit2/UIProcess/qt/SGAgent.cpp:172
&gt; +            ASSERT(false);

ASSERT_NOT_REACHED();</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>446518</commentid>
    <comment_count>17</comment_count>
    <who name="Jocelyn Turcotte">jturcotte</who>
    <bug_when>2011-08-04 08:43:05 -0700</bug_when>
    <thetext>Committed r92376: &lt;http://trac.webkit.org/changeset/92376&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>455557</commentid>
    <comment_count>18</comment_count>
    <who name="Jocelyn Turcotte">jturcotte</who>
    <bug_when>2011-08-23 11:47:45 -0700</bug_when>
    <thetext>Committed a fix for a memory leak introduced by this patch in
r93620: &lt;http://trac.webkit.org/changeset/93620&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>102638</attachid>
            <date>2011-08-02 05:31:48 -0700</date>
            <delta_ts>2011-08-02 09:15:04 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-65528-20110802143149.patch</filename>
            <type>text/plain</type>
            <size>34393</size>
            <attacher name="Jocelyn Turcotte">jturcotte</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTE5OTcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCA0NTM3ZDUzMzcwODc1ZDEx
NWE2ZjZiYzZmODIzMDEzYmVlYWZiNjE0Li5hYjc3YzcxYzk5OWQxMTE4MTA0Nzg0NWVkYjNkNGI3
NWI1NGE2YzNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjMgQEAKKzIwMTEtMDgtMDIgIEpvY2Vs
eW4gVHVyY290dGUgIDxqb2NlbHluLnR1cmNvdHRlQG5va2lhLmNvbT4KKworICAgICAgICBbUXRd
W1dLMl0gQ3JlYXRlIHNjZW5lIGdyYXBoIG5vZGVzIGZvciB0aWxlcyBpbiBRVG91Y2hXZWJWaWV3
IGluc3RlYWQgb2YgdXNpbmcgaW1wZXJhdGl2ZSBwYWludGluZy4KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY1NTI4CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ29udmVydHMgUVRvdWNoV2ViUGFnZSBmcm9t
IFFTR1BhaW50ZWRJdGVtIHRvIGEgc3RyYWlnaHQgUVNHSXRlbS4KKyAgICAgICAgLSBBIFNHVGls
ZU5vZGUgaXMgY3JlYXRlZCBhbmQgYWRkZWQgdG8gdGhlIHNjZW5lIGdyYXBoIGZvciBlYWNoIHRp
bGUsCisgICAgICAgICAgcG9zaXRpb25pbmcgdGhlbSByZWxhdGl2ZWx5IHRvIHRoZSBwYWdlLgor
ICAgICAgICAgIEl0J3MgYmFzaWNhbGx5IGEgUVNHU2ltcGxlVGV4dHVyZU5vZGUgd2l0aCBzdXBw
b3J0IGZvciBzcGVjaWZ5aW5nIGEKKyAgICAgICAgICBzb3VyY2UgcmVjdCBwbHVzIGZvciBvd25p
bmcgdGhlIFFTR1RleHR1cmUgZm9yIHByb3BlciBkZXN0cnVjdGlvbiBvbgorICAgICAgICAgIHNo
dXRkb3duIGJ5IHRoZSByZW5kZXJpbmcgdGhyZWFkLgorICAgICAgICAtIFNjYWxlIG5vZGVzIGFy
ZSB1c2VkIGFzIHBhcmVudCBvZiB0aWxlIG5vZGVzIHRvIHJldmVydCB0aGUgc2NhbGluZyBzZXQg
b24gdGhlCisgICAgICAgICAgUVRvdWNoV2ViUGFnZSBhbmQgYWxsb3cgdXMgdG8ga2VlcCB1c2lu
ZyBpbnRlZ2VyIGNvb3JkaW5hdGVzLgorICAgICAgICAtIFRoZSBTR0FnZW50IGNsYXNzIGlzIGlu
dHJvZHVjZWQgdG8gY2Fycnkgc2NlbmUgZ3JhcGggdXBkYXRlIHJlcXVlc3QgdXAgdG8gdGhlCisg
ICAgICAgICAgdXBkYXRlUGFpbnROb2RlIGNhbGwgb2YgdGhlIGl0ZW0sIHdoaWNoIG1heSBiZSBv
biB0aGUgc2NlbmUgZ3JhcGggcmVuZGVyaW5nIHRocmVhZC4KKworICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvcXQvcXRvdWNod2VicGFnZS5jcHA6CisgICAgICAgIChRVG91Y2hXZWJQYWdlOjpRVG91
Y2hXZWJQYWdlKToKKyAgICAgICAgKFFUb3VjaFdlYlBhZ2U6OnVwZGF0ZVBhaW50Tm9kZSk6Cisg
ICAgICAgIERlbGVnYXRlIHNjZW5lIGdyYXBoIHVwZGF0ZXMgdG8gdGhlIFNHQWdlbnQgd2hpY2gg
cmVjZWl2ZWQgdXBkYXRlIHJlcXVlc3RzIGZyb20gdGhlIHRpbGVkIGRyYXdpbmcgYXJlYS4KKyAg
ICAgICAgKFFUb3VjaFdlYlBhZ2U6OmV2ZW50KToKKyAgICAgICAgKFFUb3VjaFdlYlBhZ2U6Omdl
b21ldHJ5Q2hhbmdlZCk6CisgICAgICAgIChRVG91Y2hXZWJQYWdlUHJpdmF0ZTo6UVRvdWNoV2Vi
UGFnZVByaXZhdGUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvcXQvcXRvdWNod2VicGFnZS5o
OgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvcXQvcXRvdWNod2VicGFnZV9wLmg6CisgICAgICAg
ICogVUlQcm9jZXNzL1RpbGVkRHJhd2luZ0FyZWFQcm94eS5jcHA6CisgICAgICAgIE1hbmFnZSB0
aGUgc2NhbGUgbm9kZSBpbiB0aGUgVGlsZVNldCwgaXQgd2lsbCBiZSB0aGUgcGFyZW50IG5vZGUg
b2YgVGlsZSBub2Rlcy4KKyAgICAgICAgKFdlYktpdDo6VGlsZWREcmF3aW5nQXJlYVRpbGVTZXQ6
OnNnTm9kZUlEKToKKyAgICAgICAgKFdlYktpdDo6VGlsZWREcmF3aW5nQXJlYVRpbGVTZXQ6OlRp
bGVkRHJhd2luZ0FyZWFUaWxlU2V0KToKKyAgICAgICAgKFdlYktpdDo6VGlsZWREcmF3aW5nQXJl
YVRpbGVTZXQ6On5UaWxlZERyYXdpbmdBcmVhVGlsZVNldCk6CisgICAgICAgIChXZWJLaXQ6OlRp
bGVkRHJhd2luZ0FyZWFQcm94eTo6VGlsZWREcmF3aW5nQXJlYVByb3h5KToKKyAgICAgICAgKFdl
YktpdDo6VGlsZWREcmF3aW5nQXJlYVByb3h5OjpzZXRDb250ZW50c1NjYWxlKToKKyAgICAgICAg
KFdlYktpdDo6VGlsZWREcmF3aW5nQXJlYVByb3h5OjpjcmVhdGVUaWxlcyk6CisgICAgICAgIChX
ZWJLaXQ6OlRpbGVkRHJhd2luZ0FyZWFQcm94eTo6cmVtb3ZlQWxsVGlsZXMpOgorICAgICAgICAq
IFVJUHJvY2Vzcy9UaWxlZERyYXdpbmdBcmVhVGlsZS5oOgorICAgICAgICAoV2ViS2l0OjpUaWxl
ZERyYXdpbmdBcmVhVGlsZTo6Y3JlYXRlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvcXQvU0dBZ2Vu
dC5jcHA6IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9xdC9TR0FnZW50Lmg6IEFkZGVkLgor
ICAgICAgICAqIFVJUHJvY2Vzcy9xdC9TR1RpbGVOb2RlLmNwcDogQWRkZWQuCisgICAgICAgICog
VUlQcm9jZXNzL3F0L1NHVGlsZU5vZGUuaDogQWRkZWQuCisgICAgICAgICogVUlQcm9jZXNzL3F0
L1RpbGVkRHJhd2luZ0FyZWFQcm94eVF0LmNwcDoKKyAgICAgICAgRGlzYWJsZSB0aGUgcGFpbnQg
Y2FsbCBhbmQgdXBkYXRlIHRoZSBzY2VuZSBncmFwaCBvbiBpbmNvcnBvcmF0ZVVwZGF0ZSB0aHJv
dWdoIHRoZSBTR0FnZW50LgorICAgICAgICAoV2ViS2l0OjpUaWxlZERyYXdpbmdBcmVhUHJveHk6
OnVwZGF0ZVdlYlZpZXcpOgorICAgICAgICAqIFVJUHJvY2Vzcy9xdC9UaWxlZERyYXdpbmdBcmVh
VGlsZVF0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6VGlsZWREcmF3aW5nQXJlYVRpbGU6OlRpbGVk
RHJhd2luZ0FyZWFUaWxlKToKKyAgICAgICAgKFdlYktpdDo6VGlsZWREcmF3aW5nQXJlYVRpbGU6
On5UaWxlZERyYXdpbmdBcmVhVGlsZSk6CisgICAgICAgIChXZWJLaXQ6OlRpbGVkRHJhd2luZ0Fy
ZWFUaWxlOjppc1JlYWR5VG9QYWludCk6CisgICAgICAgIChXZWJLaXQ6OlRpbGVkRHJhd2luZ0Fy
ZWFUaWxlOjpzd2FwQmFja0J1ZmZlclRvRnJvbnQpOgorICAgICAgICAoV2ViS2l0OjpUaWxlZERy
YXdpbmdBcmVhVGlsZTo6cGFpbnQpOgorICAgICAgICAoV2ViS2l0OjpUaWxlZERyYXdpbmdBcmVh
VGlsZTo6aW5jb3Jwb3JhdGVVcGRhdGUpOgorICAgICAgICAoV2ViS2l0OjpUaWxlZERyYXdpbmdB
cmVhVGlsZTo6ZGlzYWJsZVVwZGF0ZXMpOgorICAgICAgICAoV2ViS2l0OjpUaWxlZERyYXdpbmdB
cmVhVGlsZTo6c2V0UGFyZW50Tm9kZUlEKToKKyAgICAgICAgKiBVSVByb2Nlc3MvcXQvVG91Y2hW
aWV3SW50ZXJmYWNlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6VG91Y2hWaWV3SW50ZXJmYWNlOjpz
Y2VuZUdyYXBoQWdlbnQpOgorICAgICAgICAoV2ViS2l0OjpUb3VjaFZpZXdJbnRlcmZhY2U6OnNl
dFZpZXdOZWVkc0Rpc3BsYXkpOgorICAgICAgICAqIFVJUHJvY2Vzcy9xdC9Ub3VjaFZpZXdJbnRl
cmZhY2UuaDoKKyAgICAgICAgKiBXZWJLaXQyLnBybzoKKwogMjAxMS0wNy0yOSAgSm9jZWx5biBU
dXJjb3R0ZSAgPGpvY2VseW4udHVyY290dGVAbm9raWEuY29tPgogCiAgICAgICAgIEZpeCB0aGUg
UVRvdWNoV2ViVmlldyBpbiBkZWJ1ZyBzZWdmYXVsdCBvbiBzaHV0ZG93biBpbnRyb2R1Y2VkIGlu
IDkxOTc5LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xdG91
Y2h3ZWJwYWdlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXRvdWNod2Vi
cGFnZS5jcHAKaW5kZXggOGZjYWJmNmY0NTg0ZTVmNDczMDE4MjIzM2JiYzFhMDJkNTVhNjY4MC4u
MzkxN2U5MjBmYWI4NmI1ZGY3MTc1OGVjNjAzNDgzYmFhYjViNjYxZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xdG91Y2h3ZWJwYWdlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3F0b3VjaHdlYnBhZ2UuY3BwCkBAIC0yMSwxOCAr
MjEsMjAgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJxdG91Y2h3ZWJwYWdlLmgi
CiAjaW5jbHVkZSAicXRvdWNod2VicGFnZV9wLmgiCi0jaW5jbHVkZSAicXRvdWNod2VicGFnZXBy
b3h5LmgiCiAKKyNpbmNsdWRlICJxdG91Y2h3ZWJwYWdlcHJveHkuaCIKKyNpbmNsdWRlICJTR0Fn
ZW50LmgiCiAjaW5jbHVkZSA8UUFwcGxpY2F0aW9uPgogI2luY2x1ZGUgPFFHcmFwaGljc1NjZW5l
TW91c2VFdmVudD4KICNpbmNsdWRlIDxRUGFpbnRlcj4KKyNpbmNsdWRlIDxRU0dOb2RlPgogI2lu
Y2x1ZGUgPFFVcmw+Ci0jaW5jbHVkZSA8UXREZWJ1Zz4KIAogUVRvdWNoV2ViUGFnZTo6UVRvdWNo
V2ViUGFnZShRU0dJdGVtKiBwYXJlbnQpCi0gICAgOiBRU0dQYWludGVkSXRlbShwYXJlbnQpCisg
ICAgOiBRU0dJdGVtKHBhcmVudCkKICAgICAsIGQobmV3IFFUb3VjaFdlYlBhZ2VQcml2YXRlKHRo
aXMpKQogeworICAgIHNldEZsYWcoSXRlbUhhc0NvbnRlbnRzKTsKIH0KIAogUVRvdWNoV2ViUGFn
ZTo6flFUb3VjaFdlYlBhZ2UoKQpAQCAtNDAsMTEgKzQyLDYgQEAgUVRvdWNoV2ViUGFnZTo6flFU
b3VjaFdlYlBhZ2UoKQogICAgIGRlbGV0ZSBkOwogfQogCi12b2lkIFFUb3VjaFdlYlBhZ2U6OnBh
aW50KFFQYWludGVyKiBwYWludGVyKQotewotICAgIGQtPnBhZ2UtPnBhaW50KHBhaW50ZXIsIGJv
dW5kaW5nUmVjdCgpLnRvQWxpZ25lZFJlY3QoKSk7Ci19Ci0KIHZvaWQgUVRvdWNoV2ViUGFnZTo6
bG9hZChjb25zdCBRVXJsJiB1cmwpCiB7CiAgICAgZC0+cGFnZS0+bG9hZCh1cmwpOwpAQCAtNjcs
NiArNjQsMTggQEAgaW50IFFUb3VjaFdlYlBhZ2U6OmxvYWRQcm9ncmVzcygpIGNvbnN0CiAKIC8q
ISBccmVpbXAKICovCitRU0dOb2RlKiBRVG91Y2hXZWJQYWdlOjp1cGRhdGVQYWludE5vZGUoUVNH
Tm9kZSogaXRlbU5vZGUsIFVwZGF0ZVBhaW50Tm9kZURhdGEqKQoreworICAgIGlmICghaXRlbU5v
ZGUpCisgICAgICAgIGl0ZW1Ob2RlID0gbmV3IFFTR05vZGU7CisgICAgZC0+c2dBZ2VudC0+dXBk
YXRlUGFpbnROb2RlKGl0ZW1Ob2RlKTsKKworICAgIC8vIFRoaXMgdGFrZXMgb3duZXJzaGlwIG9m
IGl0ZW1Ob2RlIGFuZCBpdCdzIGNoaWxkcmVuLgorICAgIHJldHVybiBpdGVtTm9kZTsKK30KKwor
LyohIFxyZWltcAorKi8KIGJvb2wgUVRvdWNoV2ViUGFnZTo6ZXZlbnQoUUV2ZW50KiBldikKIHsK
ICAgICBzd2l0Y2ggKGV2LT50eXBlKCkpIHsKQEAgLTgyLDcgKzkxLDcgQEAgYm9vbCBRVG91Y2hX
ZWJQYWdlOjpldmVudChRRXZlbnQqIGV2KQogCiAgICAgaWYgKGQtPnBhZ2UtPmhhbmRsZUV2ZW50
KGV2KSkKICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgcmV0dXJuIFFTR1BhaW50ZWRJdGVtOjpl
dmVudChldik7CisgICAgcmV0dXJuIFFTR0l0ZW06OmV2ZW50KGV2KTsKIH0KIAogdm9pZCBRVG91
Y2hXZWJQYWdlOjprZXlQcmVzc0V2ZW50KFFLZXlFdmVudCogZXZlbnQpCkBAIC0xMTcsNyArMTI2
LDcgQEAgdm9pZCBRVG91Y2hXZWJQYWdlOjp0b3VjaEV2ZW50KFFUb3VjaEV2ZW50KiBldmVudCkK
IAogdm9pZCBRVG91Y2hXZWJQYWdlOjpnZW9tZXRyeUNoYW5nZWQoY29uc3QgUVJlY3RGJiBuZXdH
ZW9tZXRyeSwgY29uc3QgUVJlY3RGJiBvbGRHZW9tZXRyeSkKIHsKLSAgICBRU0dQYWludGVkSXRl
bTo6Z2VvbWV0cnlDaGFuZ2VkKG5ld0dlb21ldHJ5LCBvbGRHZW9tZXRyeSk7CisgICAgUVNHSXRl
bTo6Z2VvbWV0cnlDaGFuZ2VkKG5ld0dlb21ldHJ5LCBvbGRHZW9tZXRyeSk7CiAgICAgaWYgKG5l
d0dlb21ldHJ5LnNpemUoKSAhPSBvbGRHZW9tZXRyeS5zaXplKCkpCiAgICAgICAgIGQtPnBhZ2Ut
PnNldERyYXdpbmdBcmVhU2l6ZShuZXdHZW9tZXRyeS5zaXplKCkudG9TaXplKCkpOwogfQpAQCAt
MTMwLDYgKzEzOSw3IEBAIFFBY3Rpb24qIFFUb3VjaFdlYlBhZ2U6Om5hdmlnYXRpb25BY3Rpb24o
UXRXZWJLaXQ6Ok5hdmlnYXRpb25BY3Rpb24gd2hpY2gpCiBRVG91Y2hXZWJQYWdlUHJpdmF0ZTo6
UVRvdWNoV2ViUGFnZVByaXZhdGUoUVRvdWNoV2ViUGFnZSogdmlldykKICAgICA6IHEodmlldykK
ICAgICAsIHBhZ2UoMCkKKyAgICAsIHNnQWdlbnQobmV3IFNHQWdlbnQodmlldykpCiB7CiB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXRvdWNod2VicGFn
ZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xdG91Y2h3ZWJwYWdlLmgKaW5k
ZXggZDNhMWFiYzFlNmM0MTI2Y2Y1ODA3MGI3YTFlZTliNGJjYzNhZjMzMi4uZDFjZmE5MGYyNDg5
NDNiZGY1ZWNjZmY4ZWIzNjdhZTI0OTk3Njc4NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9xdC9xdG91Y2h3ZWJwYWdlLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9xdC9xdG91Y2h3ZWJwYWdlLmgKQEAgLTI0LDcgKzI0LDcgQEAKICNpbmNsdWRl
ICJxd2Via2l0Z2xvYmFsLmgiCiAjaW5jbHVkZSAicXdlYmtpdHR5cGVzLmgiCiAKLSNpbmNsdWRl
IDxRdERlY2xhcmF0aXZlL3FzZ3BhaW50ZWRpdGVtLmg+CisjaW5jbHVkZSA8UXREZWNsYXJhdGl2
ZS9xc2dpdGVtLmg+CiAjaW5jbHVkZSA8UVNoYXJlZFBvaW50ZXI+CiAKIGNsYXNzIFFUb3VjaFdl
YlBhZ2VQcml2YXRlOwpAQCAtMzUsNyArMzUsNyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKICAgICBj
bGFzcyBUb3VjaFZpZXdJbnRlcmZhY2U7CiB9CiAKLWNsYXNzIFFXRUJLSVRfRVhQT1JUIFFUb3Vj
aFdlYlBhZ2UgOiBwdWJsaWMgUVNHUGFpbnRlZEl0ZW0geworY2xhc3MgUVdFQktJVF9FWFBPUlQg
UVRvdWNoV2ViUGFnZSA6IHB1YmxpYyBRU0dJdGVtIHsKICAgICBRX09CSkVDVAogICAgIFFfUFJP
UEVSVFkoUVN0cmluZyB0aXRsZSBSRUFEIHRpdGxlIE5PVElGWSB0aXRsZUNoYW5nZWQpCiAgICAg
UV9QUk9QRVJUWShRVXJsIHVybCBSRUFEIHVybCBOT1RJRlkgdXJsQ2hhbmdlZCkKQEAgLTU0LDcg
KzU0LDcgQEAgcHVibGljOgogCiAgICAgUUFjdGlvbiogbmF2aWdhdGlvbkFjdGlvbihRdFdlYktp
dDo6TmF2aWdhdGlvbkFjdGlvbiB3aGljaCk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUVBh
aW50ZXIqKTsKKyAgICB2aXJ0dWFsIFFTR05vZGUqIHVwZGF0ZVBhaW50Tm9kZShRU0dOb2RlKiBv
bGROb2RlLCBVcGRhdGVQYWludE5vZGVEYXRhKik7CiAgICAgdmlydHVhbCBib29sIGV2ZW50KFFF
dmVudCopOwogCiBRX1NJR05BTFM6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL3F0L3F0b3VjaHdlYnBhZ2VfcC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9xdC9xdG91Y2h3ZWJwYWdlX3AuaAppbmRleCA0Y2NhMzBlNDVkMDA0NzA3ZTU0ZTRiODA1ODI2
YzcxNjk3OWIwMjA5Li5mODViNzg5MzE1YzM0YmZmNmM4YjI2YjRjMDg2NmExODgyYTAwMmE2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3F0b3VjaHdlYnBhZ2Vf
cC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXRvdWNod2VicGFnZV9w
LmgKQEAgLTI1LDEwICsyNSwxNSBAQAogI2luY2x1ZGUgInF0b3VjaHdlYnBhZ2UuaCIKIAogY2xh
c3MgUVJlY3RGOworY2xhc3MgUVNHTm9kZTsKIGNsYXNzIFFTdHJpbmc7CiBjbGFzcyBRVG91Y2hX
ZWJQYWdlOwogY2xhc3MgUVRvdWNoV2ViUGFnZVByb3h5OwogCituYW1lc3BhY2UgV2ViS2l0IHsK
K2NsYXNzIFNHQWdlbnQ7Cit9CisKIGNsYXNzIFFUb3VjaFdlYlBhZ2VQcml2YXRlIHsKIHB1Ymxp
YzoKICAgICBRVG91Y2hXZWJQYWdlUHJpdmF0ZShRVG91Y2hXZWJQYWdlKiB2aWV3KTsKQEAgLTQy
LDYgKzQ3LDcgQEAgcHVibGljOgogCiAgICAgUVRvdWNoV2ViUGFnZSogY29uc3QgcTsKICAgICBR
VG91Y2hXZWJQYWdlUHJveHkqIHBhZ2U7CisgICAgUVNjb3BlZFBvaW50ZXI8V2ViS2l0OjpTR0Fn
ZW50PiBzZ0FnZW50OwogfTsKIAogI2VuZGlmIC8qIHF0b3VjaHdlYnBhZ2VfcF9oICovCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvVGlsZWREcmF3aW5nQXJlYVByb3h5LmNw
cCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9UaWxlZERyYXdpbmdBcmVhUHJveHkuY3BwCmlu
ZGV4IGU4MDhkOWNjYWE4NDY3OTViNzRhZjc3NjgwNmE2YjEwMDdkNTY4YjEuLjI2NmUyZGRlMjk5
NmYyODhhOTU2N2I1ZWI3MzE4ODIzZDg3NTMyNzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9UaWxlZERyYXdpbmdBcmVhUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9UaWxlZERyYXdpbmdBcmVhUHJveHkuY3BwCkBAIC0zNSw2ICszNSwxMSBAQAog
I2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgogI2luY2x1ZGUgIldlYlByb2Nlc3NQcm94eS5oIgog
CisjaWYgUExBVEZPUk0oUVQpCisjaW5jbHVkZSAiU0dBZ2VudC5oIgorI2luY2x1ZGUgIlRvdWNo
Vmlld0ludGVyZmFjZS5oIgorI2VuZGlmCisKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBu
YW1lc3BhY2UgV2ViS2l0IHsKQEAgLTQ4LDI0ICs1Myw0NSBAQCBjbGFzcyBUaWxlZERyYXdpbmdB
cmVhVGlsZVNldCB7CiBwdWJsaWM6CiAgICAgdHlwZWRlZiBIYXNoTWFwPFRpbGVkRHJhd2luZ0Fy
ZWFUaWxlOjpDb29yZGluYXRlLCBSZWZQdHI8VGlsZWREcmF3aW5nQXJlYVRpbGU+ID4gVGlsZU1h
cDsKIAotICAgIFRpbGVkRHJhd2luZ0FyZWFUaWxlU2V0KGZsb2F0IGNvbnRlbnRzU2NhbGUgPSAx
LjBmKTsKKyAgICBUaWxlZERyYXdpbmdBcmVhVGlsZVNldChQbGF0Zm9ybVdlYlZpZXcqLCBmbG9h
dCBjb250ZW50c1NjYWxlID0gMS4wZik7CisgICAgflRpbGVkRHJhd2luZ0FyZWFUaWxlU2V0KCk7
CiAKICAgICBXZWJDb3JlOjpJbnRSZWN0IG1hcFRvQ29udGVudHMoY29uc3QgV2ViQ29yZTo6SW50
UmVjdCYpIGNvbnN0OwogICAgIFdlYkNvcmU6OkludFJlY3QgbWFwRnJvbUNvbnRlbnRzKGNvbnN0
IFdlYkNvcmU6OkludFJlY3QmKSBjb25zdDsKIAogICAgIFRpbGVNYXAmIHRpbGVzKCkgeyByZXR1
cm4gbV90aWxlczsgfQogICAgIGZsb2F0IGNvbnRlbnRzU2NhbGUoKSBjb25zdCB7IHJldHVybiBt
X2NvbnRlbnRzU2NhbGU7IH0KKyNpZiBQTEFURk9STShRVCkKKyAgICBpbnQgc2dOb2RlSUQoKSBj
b25zdCB7IHJldHVybiBtX3NnTm9kZUlEOyB9CisjZW5kaWYKIAogcHJpdmF0ZToKICAgICBUaWxl
TWFwIG1fdGlsZXM7CiAgICAgZmxvYXQgbV9jb250ZW50c1NjYWxlOworI2lmIFBMQVRGT1JNKFFU
KQorICAgIFNHQWdlbnQqIG1fc2dBZ2VudDsKKyAgICBpbnQgbV9zZ05vZGVJRDsKKyNlbmRpZgog
fTsKIAotVGlsZWREcmF3aW5nQXJlYVRpbGVTZXQ6OlRpbGVkRHJhd2luZ0FyZWFUaWxlU2V0KGZs
b2F0IGNvbnRlbnRzU2NhbGUpCitUaWxlZERyYXdpbmdBcmVhVGlsZVNldDo6VGlsZWREcmF3aW5n
QXJlYVRpbGVTZXQoUGxhdGZvcm1XZWJWaWV3KiB3ZWJWaWV3LCBmbG9hdCBjb250ZW50c1NjYWxl
KQogICAgIDogbV9jb250ZW50c1NjYWxlKGNvbnRlbnRzU2NhbGUpCisjaWYgUExBVEZPUk0oUVQp
CisgICAgLCBtX3NnQWdlbnQod2ViVmlldy0+c2NlbmVHcmFwaEFnZW50KCkpCisgICAgLCBtX3Nn
Tm9kZUlEKG1fc2dBZ2VudC0+Y3JlYXRlU2NhbGVOb2RlKDAsIDEgLyBjb250ZW50c1NjYWxlKSkK
KyNlbmRpZgogewogfQogCitUaWxlZERyYXdpbmdBcmVhVGlsZVNldDo6flRpbGVkRHJhd2luZ0Fy
ZWFUaWxlU2V0KCkKK3sKKyNpZiBQTEFURk9STShRVCkKKyAgICAvLyBGb3JjaW5nIHRoZSB0aWxl
cyBkZXN0cnVjdGlvbiB0byByZW1vdmUgdGhlaXIgc2cgbm9kZSBiZWZvcmUgcmVtb3ZpbmcgdGhl
aXIgcGFyZW50IG5vZGUuCisgICAgbV90aWxlcy5jbGVhcigpOworICAgIG1fc2dBZ2VudC0+cmVt
b3ZlTm9kZShtX3NnTm9kZUlEKTsKKyNlbmRpZgorfQorCiBJbnRSZWN0IFRpbGVkRHJhd2luZ0Fy
ZWFUaWxlU2V0OjptYXBUb0NvbnRlbnRzKGNvbnN0IEludFJlY3QmIHJlY3QpIGNvbnN0CiB7CiAg
ICAgcmV0dXJuIGVuY2xvc2luZ0ludFJlY3QoRmxvYXRSZWN0KHJlY3QueCgpIC8gbV9jb250ZW50
c1NjYWxlLApAQCAtODIsNyArMTA4LDYgQEAgSW50UmVjdCBUaWxlZERyYXdpbmdBcmVhVGlsZVNl
dDo6bWFwRnJvbUNvbnRlbnRzKGNvbnN0IEludFJlY3QmIHJlY3QpIGNvbnN0CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY3QuaGVpZ2h0KCkgKiBtX2NvbnRlbnRzU2Nh
bGUpKTsKIH0KIAotCiBzdGF0aWMgSW50UG9pbnQgaW5uZXJCb3R0b21SaWdodChjb25zdCBJbnRS
ZWN0JiByZWN0KQogewogICAgIC8vIEFjdHVhbGx5LCB0aGUgcmVjdCBkb2VzIG5vdCBjb250YWlu
IHJlY3QubWF4WCgpLiBSZWZlciB0byBJbnRSZWN0Ojpjb250YWluLgpAQCAtOTksNyArMTI0LDcg
QEAgVGlsZWREcmF3aW5nQXJlYVByb3h5OjpUaWxlZERyYXdpbmdBcmVhUHJveHkoUGxhdGZvcm1X
ZWJWaWV3KiB3ZWJWaWV3LCBXZWJQYWdlUHIKICAgICAsIG1faXNXYWl0aW5nRm9yRGlkU2V0RnJh
bWVOb3RpZmljYXRpb24oZmFsc2UpCiAgICAgLCBtX2lzVmlzaWJsZSh0cnVlKQogICAgICwgbV93
ZWJWaWV3KHdlYlZpZXcpCi0gICAgLCBtX2N1cnJlbnRUaWxlU2V0KGFkb3B0UHRyKG5ldyBUaWxl
ZERyYXdpbmdBcmVhVGlsZVNldCkpCisgICAgLCBtX2N1cnJlbnRUaWxlU2V0KGFkb3B0UHRyKG5l
dyBUaWxlZERyYXdpbmdBcmVhVGlsZVNldCh3ZWJWaWV3KSkpCiAgICAgLCBtX3RpbGVCdWZmZXJV
cGRhdGVUaW1lcihSdW5Mb29wOjptYWluKCksIHRoaXMsICZUaWxlZERyYXdpbmdBcmVhUHJveHk6
OnRpbGVCdWZmZXJVcGRhdGVUaW1lckZpcmVkKQogICAgICwgbV90aWxlQ3JlYXRpb25UaW1lcihS
dW5Mb29wOjptYWluKCksIHRoaXMsICZUaWxlZERyYXdpbmdBcmVhUHJveHk6OnRpbGVDcmVhdGlv
blRpbWVyRmlyZWQpCiAgICAgLCBtX3RpbGVTaXplKGRlZmF1bHRUaWxlV2lkdGgsIGRlZmF1bHRU
aWxlSGVpZ2h0KQpAQCAtNDA4LDcgKzQzMyw3IEBAIHZvaWQgVGlsZWREcmF3aW5nQXJlYVByb3h5
OjpzZXRDb250ZW50c1NjYWxlKGZsb2F0IHNjYWxlKQogICAgICAgICBtX3ByZXZpb3VzVGlsZVNl
dCA9IG1fY3VycmVudFRpbGVTZXQucmVsZWFzZSgpOwogICAgICAgICBkaXNhYmxlVGlsZVNldFVw
ZGF0ZXMobV9wcmV2aW91c1RpbGVTZXQuZ2V0KCkpOwogICAgIH0KLSAgICBtX2N1cnJlbnRUaWxl
U2V0ID0gYWRvcHRQdHIobmV3IFRpbGVkRHJhd2luZ0FyZWFUaWxlU2V0KHNjYWxlKSk7CisgICAg
bV9jdXJyZW50VGlsZVNldCA9IGFkb3B0UHRyKG5ldyBUaWxlZERyYXdpbmdBcmVhVGlsZVNldCht
X3dlYlZpZXcsIHNjYWxlKSk7CiAgICAgY3JlYXRlVGlsZXMoKTsKIH0KIApAQCAtNDk2LDcgKzUy
MSwxMCBAQCB2b2lkIFRpbGVkRHJhd2luZ0FyZWFQcm94eTo6Y3JlYXRlVGlsZXMoKQogICAgIHVu
c2lnbmVkIHRpbGVzVG9DcmVhdGVDb3VudCA9IHRpbGVzVG9DcmVhdGUuc2l6ZSgpOwogICAgIGZv
ciAodW5zaWduZWQgbiA9IDA7IG4gPCB0aWxlc1RvQ3JlYXRlQ291bnQ7ICsrbikgewogICAgICAg
ICBUaWxlZERyYXdpbmdBcmVhVGlsZTo6Q29vcmRpbmF0ZSBjb29yZGluYXRlID0gdGlsZXNUb0Ny
ZWF0ZVtuXTsKLSAgICAgICAgUmVmUHRyPFRpbGVkRHJhd2luZ0FyZWFUaWxlPiB0aWxlID0gVGls
ZWREcmF3aW5nQXJlYVRpbGU6OmNyZWF0ZSh0aGlzLCBjb29yZGluYXRlKTsKKyAgICAgICAgUmVm
UHRyPFRpbGVkRHJhd2luZ0FyZWFUaWxlPiB0aWxlID0gVGlsZWREcmF3aW5nQXJlYVRpbGU6OmNy
ZWF0ZSh0aGlzLCBtX3dlYlZpZXcsIGNvb3JkaW5hdGUpOworI2lmIFBMQVRGT1JNKFFUKQorICAg
ICAgICB0aWxlLT5zZXRQYXJlbnROb2RlSUQobV9jdXJyZW50VGlsZVNldC0+c2dOb2RlSUQoKSk7
CisjZW5kaWYKICAgICAgICAgbV9jdXJyZW50VGlsZVNldC0+dGlsZXMoKS5zZXQoY29vcmRpbmF0
ZSwgdGlsZSk7CiAgICAgfQogCkBAIC01NjEsNyArNTg5LDcgQEAgdm9pZCBUaWxlZERyYXdpbmdB
cmVhUHJveHk6OmRpc2FibGVUaWxlU2V0VXBkYXRlcyhUaWxlZERyYXdpbmdBcmVhVGlsZVNldCog
dGlsZVMKIAogdm9pZCBUaWxlZERyYXdpbmdBcmVhUHJveHk6OnJlbW92ZUFsbFRpbGVzKCkKIHsK
LSAgICBtX2N1cnJlbnRUaWxlU2V0ID0gYWRvcHRQdHIobmV3IFRpbGVkRHJhd2luZ0FyZWFUaWxl
U2V0KG1fY3VycmVudFRpbGVTZXQtPmNvbnRlbnRzU2NhbGUoKSkpOworICAgIG1fY3VycmVudFRp
bGVTZXQgPSBhZG9wdFB0cihuZXcgVGlsZWREcmF3aW5nQXJlYVRpbGVTZXQobV93ZWJWaWV3LCBt
X2N1cnJlbnRUaWxlU2V0LT5jb250ZW50c1NjYWxlKCkpKTsKIH0KIAogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvVGlsZWREcmF3aW5nQXJlYVRpbGUuaCBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9UaWxlZERyYXdpbmdBcmVhVGlsZS5oCmluZGV4IDJiOWI1MGQ0ZDMx
ZTQ0ZDIxNmNiNmQwODBmNWVmYTBlMzQzZTkzNTEuLmU1NTM3OGMxYWMxZGUwMmIzZmQxYjA4MTFh
ZmJkYzk1ODBlZGQ3MjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9UaWxl
ZERyYXdpbmdBcmVhVGlsZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9UaWxlZERy
YXdpbmdBcmVhVGlsZS5oCkBAIC00MywxMSArNDMsMjIgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiBj
bGFzcyBUaWxlZERyYXdpbmdBcmVhUHJveHk7CiBjbGFzcyBVcGRhdGVJbmZvOwogCisjaWYgUExB
VEZPUk0oTUFDKQordHlwZWRlZiBXS1ZpZXcgUGxhdGZvcm1XZWJWaWV3OworI2VsaWYgUExBVEZP
Uk0oV0lOKQorY2xhc3MgV2ViVmlldzsKK3R5cGVkZWYgV2ViVmlldyBQbGF0Zm9ybVdlYlZpZXc7
CisjZWxpZiBQTEFURk9STShRVCkKK2NsYXNzIFNHQWdlbnQ7CitjbGFzcyBUb3VjaFZpZXdJbnRl
cmZhY2U7Cit0eXBlZGVmIFRvdWNoVmlld0ludGVyZmFjZSBQbGF0Zm9ybVdlYlZpZXc7CisjZW5k
aWYKKwogY2xhc3MgVGlsZWREcmF3aW5nQXJlYVRpbGUgOiBwdWJsaWMgUmVmQ291bnRlZDxUaWxl
ZERyYXdpbmdBcmVhVGlsZT4gewogcHVibGljOgogICAgIHR5cGVkZWYgV2ViQ29yZTo6SW50UG9p
bnQgQ29vcmRpbmF0ZTsKIAotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRpbGVkRHJhd2luZ0FyZWFU
aWxlPiBjcmVhdGUoVGlsZWREcmF3aW5nQXJlYVByb3h5KiBwcm94eSwgY29uc3QgQ29vcmRpbmF0
ZSYgdGlsZUNvb3JkaW5hdGUpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBUaWxlZERyYXdpbmdBcmVh
VGlsZShwcm94eSwgdGlsZUNvb3JkaW5hdGUpKTsgfQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRp
bGVkRHJhd2luZ0FyZWFUaWxlPiBjcmVhdGUoVGlsZWREcmF3aW5nQXJlYVByb3h5KiBwcm94eSwg
UGxhdGZvcm1XZWJWaWV3KiB3ZWJWaWV3LCBjb25zdCBDb29yZGluYXRlJiB0aWxlQ29vcmRpbmF0
ZSkgeyByZXR1cm4gYWRvcHRSZWYobmV3IFRpbGVkRHJhd2luZ0FyZWFUaWxlKHByb3h5LCB3ZWJW
aWV3LCB0aWxlQ29vcmRpbmF0ZSkpOyB9CiAgICAgflRpbGVkRHJhd2luZ0FyZWFUaWxlKCk7CiAK
ICAgICBib29sIGlzRGlydHkoKSBjb25zdDsKQEAgLTY3LDkgKzc4LDEyIEBAIHB1YmxpYzoKICAg
ICB2b2lkIGRpc2FibGVVcGRhdGVzKCk7CiAKICAgICBpbnQgSUQoKSBjb25zdCB7IHJldHVybiBt
X0lEOyB9CisjaWYgUExBVEZPUk0oUVQpCisgICAgdm9pZCBzZXRQYXJlbnROb2RlSUQoaW50KTsK
KyNlbmRpZgogCiBwcml2YXRlOgotICAgIFRpbGVkRHJhd2luZ0FyZWFUaWxlKFRpbGVkRHJhd2lu
Z0FyZWFQcm94eSogcHJveHksIGNvbnN0IFRpbGVkRHJhd2luZ0FyZWFUaWxlOjpDb29yZGluYXRl
JiB0aWxlQ29vcmRpbmF0ZSk7CisgICAgVGlsZWREcmF3aW5nQXJlYVRpbGUoVGlsZWREcmF3aW5n
QXJlYVByb3h5KiwgUGxhdGZvcm1XZWJWaWV3KiwgY29uc3QgVGlsZWREcmF3aW5nQXJlYVRpbGU6
OkNvb3JkaW5hdGUmIHRpbGVDb29yZGluYXRlKTsKIAogICAgIFRpbGVkRHJhd2luZ0FyZWFQcm94
eSogbV9wcm94eTsKICAgICBDb29yZGluYXRlIG1fY29vcmRpbmF0ZTsKQEAgLTc5LDEwICs5Mywx
MSBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9oYXNVcGRhdGVQZW5kaW5nOwogCiAjaWYgUExBVEZP
Uk0oUVQpCi0gICAgUVBpeG1hcCBtX2J1ZmZlcjsKLSAgICBRUGl4bWFwIG1fYmFja0J1ZmZlcjsK
KyAgICBRSW1hZ2UgbV9iYWNrQnVmZmVyOworICAgIFNHQWdlbnQqIG1fc2dBZ2VudDsKKyAgICBp
bnQgbV9ub2RlSUQ7CisgICAgaW50IG1fcGFyZW50Tm9kZUlEOwogICAgIGJvb2wgbV9pc0JhY2tC
dWZmZXJWYWxpZDsKLSAgICBib29sIG1faXNGcm9udEJ1ZmZlclZhbGlkOwogICAgIFFSZWdpb24g
bV9kaXJ0eVJlZ2lvbjsKICNlbmRpZgogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9xdC9TR0FnZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9TR0Fn
ZW50LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5iYjk4NWEwNGVmMGZlMTBmMzEwZTYxMTMwZDY5NGE2MTc3ZDNi
N2JjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1NHQWdl
bnQuY3BwCkBAIC0wLDAgKzEsMTkxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDEx
IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dy
YW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNHQWdlbnQuaCIKKworI2luY2x1ZGUgIlNHVGlsZU5v
ZGUuaCIKKyNpbmNsdWRlIDxRTXV0ZXhMb2NrZXI+CisjaW5jbHVkZSA8UVNHRW5naW5lPgorI2lu
Y2x1ZGUgPFFTR0l0ZW0+CisjaW5jbHVkZSA8UVNHVGV4dHVyZT4KKworbmFtZXNwYWNlIFdlYktp
dCB7CisKK3N0cnVjdCBOb2RlVXBkYXRlIHsKKyAgICBlbnVtIFR5cGUgeworICAgICAgICBDcmVh
dGVUaWxlLAorICAgICAgICBDcmVhdGVTY2FsZSwKKyAgICAgICAgUmVtb3ZlLAorICAgICAgICBT
ZXRUZXh0dXJlCisgICAgfTsKKyAgICBOb2RlVXBkYXRlKFR5cGUgdHlwZSkKKyAgICAgICAgOiB0
eXBlKHR5cGUpCisgICAgeyB9CisgICAgVHlwZSB0eXBlOworfTsKKworc3RydWN0IE5vZGVVcGRh
dGVDcmVhdGVUaWxlIDogcHVibGljIE5vZGVVcGRhdGUgeworICAgIE5vZGVVcGRhdGVDcmVhdGVU
aWxlKGludCBub2RlSUQsIGludCBwYXJlbnROb2RlSUQpCisgICAgICAgIDogTm9kZVVwZGF0ZShD
cmVhdGVUaWxlKQorICAgICAgICAsIG5vZGVJRChub2RlSUQpCisgICAgICAgICwgcGFyZW50Tm9k
ZUlEKHBhcmVudE5vZGVJRCkKKyAgICB7IH0KKyAgICBpbnQgbm9kZUlEOworICAgIGludCBwYXJl
bnROb2RlSUQ7Cit9OworCitzdHJ1Y3QgTm9kZVVwZGF0ZUNyZWF0ZVNjYWxlIDogcHVibGljIE5v
ZGVVcGRhdGUgeworICAgIE5vZGVVcGRhdGVDcmVhdGVTY2FsZShpbnQgbm9kZUlELCBpbnQgcGFy
ZW50Tm9kZUlELCBmbG9hdCBzY2FsZSkKKyAgICAgICAgOiBOb2RlVXBkYXRlKENyZWF0ZVNjYWxl
KQorICAgICAgICAsIG5vZGVJRChub2RlSUQpCisgICAgICAgICwgcGFyZW50Tm9kZUlEKHBhcmVu
dE5vZGVJRCkKKyAgICAgICAgLCBzY2FsZShzY2FsZSkKKyAgICB7IH0KKyAgICBpbnQgbm9kZUlE
OworICAgIGludCBwYXJlbnROb2RlSUQ7CisgICAgZmxvYXQgc2NhbGU7Cit9OworCitzdHJ1Y3Qg
Tm9kZVVwZGF0ZVJlbW92ZSA6IHB1YmxpYyBOb2RlVXBkYXRlIHsKKyAgICBOb2RlVXBkYXRlUmVt
b3ZlKGludCBub2RlSUQpCisgICAgICAgIDogTm9kZVVwZGF0ZShSZW1vdmUpCisgICAgICAgICwg
bm9kZUlEKG5vZGVJRCkKKyAgICB7IH0KKyAgICBpbnQgbm9kZUlEOworfTsKKworc3RydWN0IE5v
ZGVVcGRhdGVTZXRUZXh0dXJlIDogcHVibGljIE5vZGVVcGRhdGUgeworICAgIE5vZGVVcGRhdGVT
ZXRUZXh0dXJlKGludCBub2RlSUQsIGNvbnN0IFFJbWFnZSYgdGV4dHVyZSwgY29uc3QgUVJlY3Qm
IHNvdXJjZVJlY3QsIGNvbnN0IFFSZWN0JiB0YXJnZXRSZWN0KQorICAgICAgICA6IE5vZGVVcGRh
dGUoU2V0VGV4dHVyZSkKKyAgICAgICAgLCBub2RlSUQobm9kZUlEKQorICAgICAgICAsIHRleHR1
cmUodGV4dHVyZSkKKyAgICAgICAgLCBzb3VyY2VSZWN0KHNvdXJjZVJlY3QpCisgICAgICAgICwg
dGFyZ2V0UmVjdCh0YXJnZXRSZWN0KQorICAgIHsgfQorICAgIGludCBub2RlSUQ7CisgICAgUUlt
YWdlIHRleHR1cmU7CisgICAgUVJlY3Qgc291cmNlUmVjdDsKKyAgICBRUmVjdCB0YXJnZXRSZWN0
OworfTsKKworCitTR0FnZW50OjpTR0FnZW50KFFTR0l0ZW0qIGl0ZW0pCisgICAgOiBpdGVtKGl0
ZW0pCisgICAgLCBuZXh0Tm9kZUlEKDEpCit7Cit9CisKK2ludCBTR0FnZW50OjpjcmVhdGVUaWxl
Tm9kZShpbnQgcGFyZW50Tm9kZUlEKQoreworICAgIGludCBub2RlSUQgPSBuZXh0Tm9kZUlEKys7
CisgICAgeworICAgICAgICBRTXV0ZXhMb2NrZXIgbG9ja2VyKCZtdXRleCk7CisgICAgICAgIG5v
ZGVVcGRhdGVzUXVldWUuYXBwZW5kKG5ldyBOb2RlVXBkYXRlQ3JlYXRlVGlsZShub2RlSUQsIHBh
cmVudE5vZGVJRCkpOworICAgIH0KKyAgICBpdGVtLT51cGRhdGUoKTsKKyAgICByZXR1cm4gbm9k
ZUlEOworfQorCitpbnQgU0dBZ2VudDo6Y3JlYXRlU2NhbGVOb2RlKGludCBwYXJlbnROb2RlSUQs
IGZsb2F0IHNjYWxlKQoreworICAgIGludCBub2RlSUQgPSBuZXh0Tm9kZUlEKys7CisgICAgewor
ICAgICAgICBRTXV0ZXhMb2NrZXIgbG9ja2VyKCZtdXRleCk7CisgICAgICAgIG5vZGVVcGRhdGVz
UXVldWUuYXBwZW5kKG5ldyBOb2RlVXBkYXRlQ3JlYXRlU2NhbGUobm9kZUlELCBwYXJlbnROb2Rl
SUQsIHNjYWxlKSk7CisgICAgfQorICAgIGl0ZW0tPnVwZGF0ZSgpOworICAgIHJldHVybiBub2Rl
SUQ7Cit9CisKK3ZvaWQgU0dBZ2VudDo6cmVtb3ZlTm9kZShpbnQgbm9kZUlEKQoreworICAgIHsK
KyAgICAgICAgUU11dGV4TG9ja2VyIGxvY2tlcigmbXV0ZXgpOworICAgICAgICBub2RlVXBkYXRl
c1F1ZXVlLmFwcGVuZChuZXcgTm9kZVVwZGF0ZVJlbW92ZShub2RlSUQpKTsKKyAgICB9CisgICAg
aXRlbS0+dXBkYXRlKCk7Cit9CisKK3ZvaWQgU0dBZ2VudDo6c2V0Tm9kZVRleHR1cmUoaW50IG5v
ZGVJRCwgY29uc3QgUUltYWdlJiB0ZXh0dXJlLCBjb25zdCBRUmVjdCYgc291cmNlUmVjdCwgY29u
c3QgUVJlY3QmIHRhcmdldFJlY3QpCit7CisgICAgeworICAgICAgICBRTXV0ZXhMb2NrZXIgbG9j
a2VyKCZtdXRleCk7CisgICAgICAgIG5vZGVVcGRhdGVzUXVldWUuYXBwZW5kKG5ldyBOb2RlVXBk
YXRlU2V0VGV4dHVyZShub2RlSUQsIHRleHR1cmUsIHNvdXJjZVJlY3QsIHRhcmdldFJlY3QpKTsK
KyAgICB9CisgICAgaXRlbS0+dXBkYXRlKCk7Cit9CisKK3ZvaWQgU0dBZ2VudDo6dXBkYXRlUGFp
bnROb2RlKFFTR05vZGUqIGl0ZW1Ob2RlKQoreworICAgIFFMaW5rZWRMaXN0PE5vZGVVcGRhdGUq
PiBub2RlVXBkYXRlc1F1ZXVlQ29weTsKKyAgICB7CisgICAgICAgIFFNdXRleExvY2tlciBsb2Nr
ZXIoJm11dGV4KTsKKyAgICAgICAgbm9kZVVwZGF0ZXNRdWV1ZUNvcHkgPSBub2RlVXBkYXRlc1F1
ZXVlOworICAgICAgICBub2RlVXBkYXRlc1F1ZXVlID0gUUxpbmtlZExpc3Q8Tm9kZVVwZGF0ZSo+
KCk7CisgICAgfQorCisgICAgd2hpbGUgKCFub2RlVXBkYXRlc1F1ZXVlQ29weS5pc0VtcHR5KCkp
IHsKKyAgICAgICAgUVNjb3BlZFBvaW50ZXI8Tm9kZVVwZGF0ZT4gbm9kZVVwZGF0ZShub2RlVXBk
YXRlc1F1ZXVlQ29weS50YWtlRmlyc3QoKSk7CisgICAgICAgIHN3aXRjaCAobm9kZVVwZGF0ZS0+
dHlwZSkgeworICAgICAgICBjYXNlIE5vZGVVcGRhdGU6OkNyZWF0ZVRpbGU6IHsKKyAgICAgICAg
ICAgIE5vZGVVcGRhdGVDcmVhdGVUaWxlKiBjcmVhdGVUaWxlVXBkYXRlID0gc3RhdGljX2Nhc3Q8
Tm9kZVVwZGF0ZUNyZWF0ZVRpbGUqPihub2RlVXBkYXRlLmRhdGEoKSk7CisgICAgICAgICAgICBT
R1RpbGVOb2RlKiB0aWxlTm9kZSAgPSBuZXcgU0dUaWxlTm9kZTsKKyAgICAgICAgICAgIFFTR05v
ZGUqIHBhcmVudE5vZGUgPSBjcmVhdGVUaWxlVXBkYXRlLT5wYXJlbnROb2RlSUQgPyBub2Rlcy52
YWx1ZShjcmVhdGVUaWxlVXBkYXRlLT5wYXJlbnROb2RlSUQpIDogaXRlbU5vZGU7CisgICAgICAg
ICAgICBwYXJlbnROb2RlLT5wcmVwZW5kQ2hpbGROb2RlKHRpbGVOb2RlKTsKKyAgICAgICAgICAg
IG5vZGVzLmluc2VydChjcmVhdGVUaWxlVXBkYXRlLT5ub2RlSUQsIHRpbGVOb2RlKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgTm9kZVVwZGF0ZTo6Q3JlYXRl
U2NhbGU6IHsKKyAgICAgICAgICAgIE5vZGVVcGRhdGVDcmVhdGVTY2FsZSogY3JlYXRlU2NhbGVV
cGRhdGUgPSBzdGF0aWNfY2FzdDxOb2RlVXBkYXRlQ3JlYXRlU2NhbGUqPihub2RlVXBkYXRlLmRh
dGEoKSk7CisgICAgICAgICAgICBRU0dUcmFuc2Zvcm1Ob2RlKiBzY2FsZU5vZGUgID0gbmV3IFFT
R1RyYW5zZm9ybU5vZGU7CisgICAgICAgICAgICBRTWF0cml4NHg0IHNjYWxlTWF0cml4OworICAg
ICAgICAgICAgLy8gVXNlIHNjYWxlKGZsb2F0LGZsb2F0KSB0byBwcmV2ZW50IHNjYWxpbmcgdGhl
IFogY29tcG9uZW50LgorICAgICAgICAgICAgc2NhbGVNYXRyaXguc2NhbGUoY3JlYXRlU2NhbGVV
cGRhdGUtPnNjYWxlLCBjcmVhdGVTY2FsZVVwZGF0ZS0+c2NhbGUpOworICAgICAgICAgICAgc2Nh
bGVOb2RlLT5zZXRNYXRyaXgoc2NhbGVNYXRyaXgpOworICAgICAgICAgICAgUVNHTm9kZSogcGFy
ZW50Tm9kZSA9IGNyZWF0ZVNjYWxlVXBkYXRlLT5wYXJlbnROb2RlSUQgPyBub2Rlcy52YWx1ZShj
cmVhdGVTY2FsZVVwZGF0ZS0+cGFyZW50Tm9kZUlEKSA6IGl0ZW1Ob2RlOworICAgICAgICAgICAg
Ly8gUHJlcGVuZCBpbnN0ZWFkIG9mIGFwcGVuZCB0byBwYWludCB0aGUgbmV3LCBpbmNvbXBsZXRl
LCB0aWxlc2V0IGJlZm9yZS9iZWhpbmQgdGhlIHByZXZpb3VzIG9uZS4KKyAgICAgICAgICAgIHBh
cmVudE5vZGUtPnByZXBlbmRDaGlsZE5vZGUoc2NhbGVOb2RlKTsKKyAgICAgICAgICAgIG5vZGVz
Lmluc2VydChjcmVhdGVTY2FsZVVwZGF0ZS0+bm9kZUlELCBzY2FsZU5vZGUpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBOb2RlVXBkYXRlOjpSZW1vdmU6IHsK
KyAgICAgICAgICAgIE5vZGVVcGRhdGVSZW1vdmUqIHJlbW92ZVVwZGF0ZSA9IHN0YXRpY19jYXN0
PE5vZGVVcGRhdGVSZW1vdmUqPihub2RlVXBkYXRlLmRhdGEoKSk7CisgICAgICAgICAgICBkZWxl
dGUgbm9kZXMudGFrZShyZW1vdmVVcGRhdGUtPm5vZGVJRCk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICBjYXNlIE5vZGVVcGRhdGU6OlNldFRleHR1cmU6IHsKKyAgICAg
ICAgICAgIE5vZGVVcGRhdGVTZXRUZXh0dXJlKiBzZXRUZXh0dXJlVXBkYXRlID0gc3RhdGljX2Nh
c3Q8Tm9kZVVwZGF0ZVNldFRleHR1cmUqPihub2RlVXBkYXRlLmRhdGEoKSk7CisgICAgICAgICAg
ICBTR1RpbGVOb2RlKiB0aWxlTm9kZSA9IHN0YXRpY19jYXN0PFNHVGlsZU5vZGUqPihub2Rlcy52
YWx1ZShzZXRUZXh0dXJlVXBkYXRlLT5ub2RlSUQpKTsKKyAgICAgICAgICAgIGlmICh0aWxlTm9k
ZSkgeworICAgICAgICAgICAgICAgIFFTR1RleHR1cmUqIHRleHR1cmUgPSBpdGVtLT5zY2VuZUdy
YXBoRW5naW5lKCktPmNyZWF0ZVRleHR1cmVGcm9tSW1hZ2Uoc2V0VGV4dHVyZVVwZGF0ZS0+dGV4
dHVyZSk7CisgICAgICAgICAgICAgICAgdGlsZU5vZGUtPnNldFRleHR1cmUodGV4dHVyZSk7Cisg
ICAgICAgICAgICAgICAgdGlsZU5vZGUtPnNldFRhcmdldFJlY3Qoc2V0VGV4dHVyZVVwZGF0ZS0+
dGFyZ2V0UmVjdCk7CisgICAgICAgICAgICAgICAgdGlsZU5vZGUtPnNldFNvdXJjZVJlY3QodGV4
dHVyZS0+Y29udmVydFRvTm9ybWFsaXplZFNvdXJjZVJlY3Qoc2V0VGV4dHVyZVVwZGF0ZS0+c291
cmNlUmVjdCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVChmYWxzZSk7CisgICAgICAgIH0K
KyAgICB9Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9T
R0FnZW50LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvU0dBZ2VudC5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjgyYjIxYWQwNmNhNTUzNjlmNDJiODQ1NTQwZGViNTBmYTU5ZjQ2OTUKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvU0dBZ2VudC5oCkBAIC0wLDAgKzEs
NjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29y
IGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaWZuZGVmIFNHQWdlbnRfaAorI2RlZmluZSBTR0Fn
ZW50X2gKKworI2luY2x1ZGUgPFFIYXNoPgorI2luY2x1ZGUgPFFMaW5rZWRMaXN0PgorI2luY2x1
ZGUgPFFNdXRleD4KKworY2xhc3MgUUltYWdlOworY2xhc3MgUVJlY3Q7CitjbGFzcyBRU0dJdGVt
OworY2xhc3MgUVNHTm9kZTsKK2NsYXNzIFFTaXplOworCituYW1lc3BhY2UgV2ViS2l0IHsKKwor
Y2xhc3MgTm9kZVVwZGF0ZTsKK2NsYXNzIFBhZ2VOb2RlOworCisvLyBUYWtlcyBjYXJlIG9mIHRh
a2luZyB1cGRhdGUgcmVxdWVzdHMgdGhlbiBmdWxmaWxsaW5nIHRoZW0gYXN5bmNocm9ub3VzbHkg
b24gdGhlIHNjZW5lIGdyYXBoIHRocmVhZC4KK2NsYXNzIFNHQWdlbnQgeworcHVibGljOgorICAg
IFNHQWdlbnQoUVNHSXRlbSopOworCisgICAgaW50IGNyZWF0ZVRpbGVOb2RlKGludCBwYXJlbnRO
b2RlSUQpOworICAgIGludCBjcmVhdGVTY2FsZU5vZGUoaW50IHBhcmVudE5vZGVJRCwgZmxvYXQg
c2NhbGUpOworICAgIHZvaWQgcmVtb3ZlTm9kZShpbnQgbm9kZUlEKTsKKyAgICB2b2lkIHNldE5v
ZGVUZXh0dXJlKGludCBub2RlSUQsIGNvbnN0IFFJbWFnZSYgdGV4dHVyZSwgY29uc3QgUVJlY3Qm
IHNvdXJjZVJlY3QsIGNvbnN0IFFSZWN0JiB0YXJnZXRSZWN0KTsKKworICAgIC8vIENhbGxlZCBi
eSB0aGUgUVNHSXRlbS4KKyAgICB2b2lkIHVwZGF0ZVBhaW50Tm9kZShRU0dOb2RlKiByb290Tm9k
ZSk7CisKK3ByaXZhdGU6CisgICAgUVNHSXRlbSogaXRlbTsKKyAgICBRTGlua2VkTGlzdDxOb2Rl
VXBkYXRlKj4gbm9kZVVwZGF0ZXNRdWV1ZTsKKyAgICBRSGFzaDxpbnQsIFFTR05vZGUqPiBub2Rl
czsKKyAgICBpbnQgbmV4dE5vZGVJRDsKKyAgICBRTXV0ZXggbXV0ZXg7Cit9OworCit9CisKKyNl
bmRpZiAvKiBTR0FnZW50X2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9xdC9TR1RpbGVOb2RlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9TR1RpbGVO
b2RlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi40NzdiOGMzMzdhM2Y5Y2VlZDk1MWZjZjYxNWI4NTdkZWYzZjA2
ZWIzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1NHVGls
ZU5vZGUuY3BwCkBAIC0wLDAgKzEsNjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIw
MTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJv
Z3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU0dUaWxlTm9kZS5oIgorCituYW1lc3BhY2UgV2Vi
S2l0IHsKKworU0dUaWxlTm9kZTo6U0dUaWxlTm9kZSgpCisgICAgOiBtX2dlb21ldHJ5KFFTR0dl
b21ldHJ5OjpkZWZhdWx0QXR0cmlidXRlc19UZXh0dXJlZFBvaW50MkQoKSwgNCkKK3sKKyAgICBz
ZXRHZW9tZXRyeSgmbV9nZW9tZXRyeSk7CisgICAgc2V0TWF0ZXJpYWwoJm1fbWF0ZXJpYWwpOwor
ICAgIHNldE9wYXF1ZU1hdGVyaWFsKCZtX29wYXF1ZU1hdGVyaWFsKTsKK30KKwordm9pZCBTR1Rp
bGVOb2RlOjpzZXRUYXJnZXRSZWN0KGNvbnN0IFFSZWN0RiYgcikKK3sKKyAgICBpZiAobV90YXJn
ZXRSZWN0ID09IHIpCisgICAgICAgIHJldHVybjsKKyAgICBtX3RhcmdldFJlY3QgPSByOworICAg
IFFTR0dlb21ldHJ5Ojp1cGRhdGVUZXh0dXJlZFJlY3RHZW9tZXRyeSgmbV9nZW9tZXRyeSwgbV90
YXJnZXRSZWN0LCBtX3NvdXJjZVJlY3QpOworICAgIG1hcmtEaXJ0eShEaXJ0eUdlb21ldHJ5KTsK
K30KKwordm9pZCBTR1RpbGVOb2RlOjpzZXRTb3VyY2VSZWN0KGNvbnN0IFFSZWN0RiYgcikKK3sK
KyAgICBpZiAobV9zb3VyY2VSZWN0ID09IHIpCisgICAgICAgIHJldHVybjsKKyAgICBtX3NvdXJj
ZVJlY3QgPSByOworICAgIFFTR0dlb21ldHJ5Ojp1cGRhdGVUZXh0dXJlZFJlY3RHZW9tZXRyeSgm
bV9nZW9tZXRyeSwgbV90YXJnZXRSZWN0LCBtX3NvdXJjZVJlY3QpOworICAgIG1hcmtEaXJ0eShE
aXJ0eUdlb21ldHJ5KTsKK30KKwordm9pZCBTR1RpbGVOb2RlOjpzZXRUZXh0dXJlKFFTR1RleHR1
cmUqIHRleHR1cmUpCit7CisgICAgaWYgKG1fbWF0ZXJpYWwudGV4dHVyZSgpID09IHRleHR1cmUp
CisgICAgICAgIHJldHVybjsKKyAgICBtX21hdGVyaWFsLnNldFRleHR1cmUodGV4dHVyZSk7Cisg
ICAgbV9vcGFxdWVNYXRlcmlhbC5zZXRUZXh0dXJlKHRleHR1cmUpOworICAgIG1fdGV4dHVyZS5y
ZXNldCh0ZXh0dXJlKTsKKyAgICBtYXJrRGlydHkoRGlydHlNYXRlcmlhbCk7Cit9CisKK30KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9TR1RpbGVOb2RlLmggYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvU0dUaWxlTm9kZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk2YmEwNDEw
MGE3ZmFmOWFiZjUwNTVjMTA3OTQ0YTI2ODg1OTQ3OTUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvU0dUaWxlTm9kZS5oCkBAIC0wLDAgKzEsNTUgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJz
aWRpYXJ5KC1pZXMpCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
KiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgorICoKKyAqLworCisjaWZuZGVmIFNHVGlsZU5vZGVfaAorI2RlZmluZSBTR1RpbGVOb2Rl
X2gKKworI2luY2x1ZGUgPFFTR0dlb21ldHJ5Tm9kZT4KKyNpbmNsdWRlIDxRU0dPcGFxdWVUZXh0
dXJlTWF0ZXJpYWw+CisjaW5jbHVkZSA8UVNHVGV4dHVyZU1hdGVyaWFsPgorCitRVF9CRUdJTl9O
QU1FU1BBQ0UKK2NsYXNzIFFTR1RleHR1cmU7CitRVF9FTkRfTkFNRVNQQUNFCisKK25hbWVzcGFj
ZSBXZWJLaXQgeworCitjbGFzcyBTR1RpbGVOb2RlIDogcHVibGljIFFTR0dlb21ldHJ5Tm9kZSB7
CitwdWJsaWM6CisgICAgU0dUaWxlTm9kZSgpOworCisgICAgdm9pZCBzZXRUYXJnZXRSZWN0KGNv
bnN0IFFSZWN0RiYpOworICAgIHZvaWQgc2V0U291cmNlUmVjdChjb25zdCBRUmVjdEYmKTsKKyAg
ICAvLyBUaGlzIHRha2VzIG93bmVyc2hpcCBvZiB0ZXh0dXJlLgorICAgIHZvaWQgc2V0VGV4dHVy
ZShRU0dUZXh0dXJlKik7CisKK3ByaXZhdGU6CisgICAgUVNHR2VvbWV0cnkgbV9nZW9tZXRyeTsK
KyAgICBRU0dPcGFxdWVUZXh0dXJlTWF0ZXJpYWwgbV9vcGFxdWVNYXRlcmlhbDsKKyAgICBRU0dU
ZXh0dXJlTWF0ZXJpYWwgbV9tYXRlcmlhbDsKKyAgICBRU2NvcGVkUG9pbnRlcjxRU0dUZXh0dXJl
PiBtX3RleHR1cmU7CisKKyAgICBRUmVjdEYgbV90YXJnZXRSZWN0OworICAgIFFSZWN0RiBtX3Nv
dXJjZVJlY3Q7Cit9OworCit9CisKKyNlbmRpZiAvKiBTR1RpbGVOb2RlX2ggKi8KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9UaWxlZERyYXdpbmdBcmVhUHJveHlRdC5j
cHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvVGlsZWREcmF3aW5nQXJlYVByb3h5UXQu
Y3BwCmluZGV4IDA5MjMyMjM2NGQxMWE0M2E1NjIyNmNlMzgzMjQ4Y2I1NDcxMWQxYWMuLjMwYWVh
NmEzOTA3NjJkMzEwN2U0YzI4OTk3MDgxOWMxNzA3ODVmNTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9xdC9UaWxlZERyYXdpbmdBcmVhUHJveHlRdC5jcHAKKysrIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1RpbGVkRHJhd2luZ0FyZWFQcm94eVF0LmNwcApAQCAt
MzksMTIgKzM5LDcgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKIHZvaWQgVGlsZWREcmF3aW5nQXJl
YVByb3h5Ojp1cGRhdGVXZWJWaWV3KGNvbnN0IFZlY3RvcjxJbnRSZWN0PiYgcGFpbnRlZEFyZWEp
CiB7Ci0gICAgaWYgKCFwYWdlKCkgfHwgIXBhZ2UoKS0+aXNWYWxpZCgpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICB1bnNpZ25lZCBzaXplID0gcGFpbnRlZEFyZWEuc2l6ZSgpOwotICAgIGZvciAo
dW5zaWduZWQgbiA9IDA7IG4gPCBzaXplOyArK24pCi0gICAgICAgIHN0YXRpY19jYXN0PFZpZXdJ
bnRlcmZhY2UqPihtX3dlYlZpZXcpLT5zZXRWaWV3TmVlZHNEaXNwbGF5KFFSZWN0KHBhaW50ZWRB
cmVhW25dKSk7CisgICAgLy8gU0cgdXBkYXRlcyBhcmUgdHJpZ2dlcmVkIHRocm91Z2ggU0dBZ2Vu
dC4KIH0KIAogV2ViUGFnZVByb3h5KiBUaWxlZERyYXdpbmdBcmVhUHJveHk6OnBhZ2UoKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1RpbGVkRHJhd2luZ0FyZWFUaWxl
UXQuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1RpbGVkRHJhd2luZ0FyZWFUaWxl
UXQuY3BwCmluZGV4IDI1OWRmZDFiZTRkMjU2MDcwY2NmMTQ4MTFjN2MwNzE1ZWZkNzQ0MWEuLmFh
NDNiZTc0Y2MwM2RiODdhOGFmMjM2OWRjMjEyZmFmYjNlYjkwZjkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9UaWxlZERyYXdpbmdBcmVhVGlsZVF0LmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvVGlsZWREcmF3aW5nQXJlYVRpbGVRdC5jcHAKQEAg
LTI3LDggKzI3LDEwIEBACiAjaW5jbHVkZSAiVGlsZWREcmF3aW5nQXJlYVRpbGUuaCIKIAogI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIlNHQWdlbnQuaCIKICNpbmNsdWRl
ICJTaGFyZWFibGVCaXRtYXAuaCIKICNpbmNsdWRlICJUaWxlZERyYXdpbmdBcmVhUHJveHkuaCIK
KyNpbmNsdWRlICJUb3VjaFZpZXdJbnRlcmZhY2UuaCIKICNpbmNsdWRlICJVcGRhdGVJbmZvLmgi
CiAjaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzc1Byb3h5Lmgi
CkBAIC00MCwxMyArNDIsMTUgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIG5hbWVzcGFj
ZSBXZWJLaXQgewogCi1UaWxlZERyYXdpbmdBcmVhVGlsZTo6VGlsZWREcmF3aW5nQXJlYVRpbGUo
VGlsZWREcmF3aW5nQXJlYVByb3h5KiBwcm94eSwgY29uc3QgQ29vcmRpbmF0ZSYgdGlsZUNvb3Jk
aW5hdGUpCitUaWxlZERyYXdpbmdBcmVhVGlsZTo6VGlsZWREcmF3aW5nQXJlYVRpbGUoVGlsZWRE
cmF3aW5nQXJlYVByb3h5KiBwcm94eSwgUGxhdGZvcm1XZWJWaWV3KiB3ZWJWaWV3LCBjb25zdCBD
b29yZGluYXRlJiB0aWxlQ29vcmRpbmF0ZSkKICAgICA6IG1fcHJveHkocHJveHkpCiAgICAgLCBt
X2Nvb3JkaW5hdGUodGlsZUNvb3JkaW5hdGUpCiAgICAgLCBtX3JlY3QocHJveHktPnRpbGVSZWN0
Rm9yQ29vcmRpbmF0ZSh0aWxlQ29vcmRpbmF0ZSkpCiAgICAgLCBtX2hhc1VwZGF0ZVBlbmRpbmco
ZmFsc2UpCisgICAgLCBtX3NnQWdlbnQod2ViVmlldy0+c2NlbmVHcmFwaEFnZW50KCkpCisgICAg
LCBtX25vZGVJRCgwKQorICAgICwgbV9wYXJlbnROb2RlSUQoKQogICAgICwgbV9pc0JhY2tCdWZm
ZXJWYWxpZChmYWxzZSkKLSAgICAsIG1faXNGcm9udEJ1ZmZlclZhbGlkKGZhbHNlKQogICAgICwg
bV9kaXJ0eVJlZ2lvbihtX3JlY3QpCiB7CiAgICAgc3RhdGljIGludCBpZCA9IDA7CkBAIC02Myw2
ICs2Nyw4IEBAIFRpbGVkRHJhd2luZ0FyZWFUaWxlOjp+VGlsZWREcmF3aW5nQXJlYVRpbGUoKQog
ICAgIHFEZWJ1ZygpIDw8ICJkZWxldGluZyB0aWxlIGlkPSIgPDwgbV9JRDsKICNlbmRpZgogICAg
IGRpc2FibGVVcGRhdGVzKCk7CisgICAgaWYgKG1fbm9kZUlEKQorICAgICAgICBtX3NnQWdlbnQt
PnJlbW92ZU5vZGUobV9ub2RlSUQpOwogfQogCiBib29sIFRpbGVkRHJhd2luZ0FyZWFUaWxlOjpp
c0RpcnR5KCkgY29uc3QKQEAgLTcyLDcgKzc4LDcgQEAgYm9vbCBUaWxlZERyYXdpbmdBcmVhVGls
ZTo6aXNEaXJ0eSgpIGNvbnN0CiAKIGJvb2wgVGlsZWREcmF3aW5nQXJlYVRpbGU6OmlzUmVhZHlU
b1BhaW50KCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9pc0Zyb250QnVmZmVyVmFsaWQ7CisgICAg
cmV0dXJuIG1fbm9kZUlEOwogfQogCiBib29sIFRpbGVkRHJhd2luZ0FyZWFUaWxlOjpoYXNSZWFk
eUJhY2tCdWZmZXIoKSBjb25zdApAQCAtMTAxLDI2ICsxMDcsMTIgQEAgdm9pZCBUaWxlZERyYXdp
bmdBcmVhVGlsZTo6cmVzaXplKGNvbnN0IEludFNpemUmIG5ld1NpemUpCiAKIHZvaWQgVGlsZWRE
cmF3aW5nQXJlYVRpbGU6OnN3YXBCYWNrQnVmZmVyVG9Gcm9udCgpCiB7Ci0gICAgQVNTRVJUKCFt
X2JhY2tCdWZmZXIuaXNOdWxsKCkpOwotCi0gICAgY29uc3QgUVBpeG1hcCBzd2FwID0gbV9idWZm
ZXI7Ci0gICAgbV9idWZmZXIgPSBtX2JhY2tCdWZmZXI7Ci0gICAgbV9pc0Zyb250QnVmZmVyVmFs
aWQgPSBtX2lzQmFja0J1ZmZlclZhbGlkOwotICAgIG1faXNCYWNrQnVmZmVyVmFsaWQgPSBmYWxz
ZTsKLSAgICBtX2JhY2tCdWZmZXIgPSBzd2FwOworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgb25j
ZSB3ZSBjYW4gdGlnaHQgaW52YWxpZGF0ZWQgdGlsZSB1cGRhdGVzIHRvZ2V0aGVyLgogfQogCiB2
b2lkIFRpbGVkRHJhd2luZ0FyZWFUaWxlOjpwYWludChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQs
IGNvbnN0IEludFJlY3QmIHJlY3QpCiB7Ci0gICAgQVNTRVJUKCFtX2J1ZmZlci5pc051bGwoKSk7
Ci0KLSAgICBJbnRSZWN0IHRhcmdldCA9IGludGVyc2VjdGlvbihyZWN0LCBtX3JlY3QpOwotICAg
IEludFJlY3Qgc291cmNlKCh0YXJnZXQueCgpIC0gbV9yZWN0LngoKSksCi0gICAgICAgICAgICAg
ICAgICAgKHRhcmdldC55KCkgLSBtX3JlY3QueSgpKSwKLSAgICAgICAgICAgICAgICAgICB0YXJn
ZXQud2lkdGgoKSwKLSAgICAgICAgICAgICAgICAgICB0YXJnZXQuaGVpZ2h0KCkpOwotCi0gICAg
Y29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmRyYXdQaXhtYXAodGFyZ2V0LCBtX2J1ZmZlciwg
c291cmNlKTsKKyAgICBBU1NFUlQoZmFsc2UpOwogfQogCiB2b2lkIFRpbGVkRHJhd2luZ0FyZWFU
aWxlOjppbmNvcnBvcmF0ZVVwZGF0ZShjb25zdCBVcGRhdGVJbmZvJiB1cGRhdGVJbmZvLCBmbG9h
dCkKQEAgLTEzNiwxNCArMTI4LDIxIEBAIHZvaWQgVGlsZWREcmF3aW5nQXJlYVRpbGU6OmluY29y
cG9yYXRlVXBkYXRlKGNvbnN0IFVwZGF0ZUluZm8mIHVwZGF0ZUluZm8sIGZsb2F0CiAgICAgY29u
c3QgUVNpemUgdGlsZVNpemUgPSBtX3Byb3h5LT50aWxlU2l6ZSgpOwogCiAgICAgaWYgKG1fYmFj
a0J1ZmZlci5zaXplKCkgIT0gdGlsZVNpemUpIHsKLSAgICAgICAgbV9iYWNrQnVmZmVyID0gUVBp
eG1hcCh0aWxlU2l6ZSk7CisgICAgICAgIG1fYmFja0J1ZmZlciA9IFFJbWFnZSh0aWxlU2l6ZSwg
aW1hZ2UuZm9ybWF0KCkpOwogICAgICAgICBtX2JhY2tCdWZmZXIuZmlsbChRdDo6dHJhbnNwYXJl
bnQpOwogICAgIH0KIAotICAgIFFQYWludGVyIHBhaW50ZXIoJm1fYmFja0J1ZmZlcik7Ci0gICAg
cGFpbnRlci5kcmF3UGl4bWFwKDAsIDAsIG1fYnVmZmVyKTsKKyAgICBRUGFpbnRlciBwYWludGVy
OworICAgIHBhaW50ZXIuYmVnaW4oJm1fYmFja0J1ZmZlcik7CiAgICAgSW50U2l6ZSBkcmF3UG9p
bnQgPSB1cGRhdGVDaHVua1JlY3QubG9jYXRpb24oKSAtIG1fcmVjdC5sb2NhdGlvbigpOwogICAg
IHBhaW50ZXIuZHJhd0ltYWdlKFFQb2ludChkcmF3UG9pbnQud2lkdGgoKSwgZHJhd1BvaW50Lmhl
aWdodCgpKSwgaW1hZ2UpOworICAgIHBhaW50ZXIuZW5kKCk7CisKKyAgICBpZiAoIW1fbm9kZUlE
KQorICAgICAgICBtX25vZGVJRCA9IG1fc2dBZ2VudC0+Y3JlYXRlVGlsZU5vZGUobV9wYXJlbnRO
b2RlSUQpOworICAgIEFTU0VSVChtX25vZGVJRCk7CisgICAgUVJlY3Qgc291cmNlUmVjdCgwLCAw
LCBtX3JlY3Qud2lkdGgoKSwgbV9yZWN0LmhlaWdodCgpKTsKKyAgICBtX3NnQWdlbnQtPnNldE5v
ZGVUZXh0dXJlKG1fbm9kZUlELCBtX2JhY2tCdWZmZXIsIHNvdXJjZVJlY3QsIG1fcmVjdCk7CiB9
CiAKIHZvaWQgVGlsZWREcmF3aW5nQXJlYVRpbGU6OmRpc2FibGVVcGRhdGVzKCkKQEAgLTE1Nywx
MSArMTU2LDE3IEBAIHZvaWQgVGlsZWREcmF3aW5nQXJlYVRpbGU6OmRpc2FibGVVcGRhdGVzKCkK
ICAgICB9CiAKICAgICBtX3Byb3h5LT51bnJlZ2lzdGVyVGlsZShtX0lEKTsKLSAgICBtX2JhY2tC
dWZmZXIgPSBRUGl4bWFwKCk7CisgICAgbV9iYWNrQnVmZmVyID0gUUltYWdlKCk7CiAgICAgbV9p
c0JhY2tCdWZmZXJWYWxpZCA9IGZhbHNlOwogICAgIG1fcHJveHkgPSAwOwogfQogCit2b2lkIFRp
bGVkRHJhd2luZ0FyZWFUaWxlOjpzZXRQYXJlbnROb2RlSUQoaW50IG5vZGVJRCkKK3sKKyAgICBB
U1NFUlQoIW1fbm9kZUlEKTsKKyAgICBtX3BhcmVudE5vZGVJRCA9IG5vZGVJRDsKK30KKwogdm9p
ZCBUaWxlZERyYXdpbmdBcmVhVGlsZTo6dXBkYXRlQmFja0J1ZmZlcigpCiB7CiAgICAgQVNTRVJU
KG1fcHJveHkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1RvdWNo
Vmlld0ludGVyZmFjZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvVG91Y2hWaWV3
SW50ZXJmYWNlLmNwcAppbmRleCBmYTU3OTY0ZGIzYWE0Yjc4YWFjNWJiMDM3NDkxMmM5ODk0M2M3
ZDU0Li4yMjBjZTlkYjdhZjE2MTMzNDczNDhkNjU4ZWNmNWY5Zjc5MDU5Yjg0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvVG91Y2hWaWV3SW50ZXJmYWNlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvVG91Y2hWaWV3SW50ZXJmYWNlLmNwcApAQCAt
OTEsOSArOTEsMTMgQEAgdm9pZCBUb3VjaFZpZXdJbnRlcmZhY2U6OnBpbmNoR2VzdHVyZUVuZGVk
KCkKICAgICBtX3ZpZXdwb3J0Vmlldy0+ZC0+dmlld3BvcnRSZWN0VXBkYXRlZCgpOwogfQogCi12
b2lkIFRvdWNoVmlld0ludGVyZmFjZTo6c2V0Vmlld05lZWRzRGlzcGxheShjb25zdCBRUmVjdCYg
aW52YWxpZGF0ZWRSZWN0KQorU0dBZ2VudCogVG91Y2hWaWV3SW50ZXJmYWNlOjpzY2VuZUdyYXBo
QWdlbnQoKSBjb25zdAoreworICAgIHJldHVybiBtX3BhZ2VWaWV3LT5kLT5zZ0FnZW50LmRhdGEo
KTsKK30KKwordm9pZCBUb3VjaFZpZXdJbnRlcmZhY2U6OnNldFZpZXdOZWVkc0Rpc3BsYXkoY29u
c3QgUVJlY3QmKQogewotICAgIG1fcGFnZVZpZXctPnVwZGF0ZShpbnZhbGlkYXRlZFJlY3QpOwog
fQogCiBRU2l6ZSBUb3VjaFZpZXdJbnRlcmZhY2U6OmRyYXdpbmdBcmVhU2l6ZSgpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvVG91Y2hWaWV3SW50ZXJmYWNlLmggYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvVG91Y2hWaWV3SW50ZXJmYWNlLmgKaW5kZXggOTBj
ZTdlMmNiNzVjMDAyN2Q2OWExODU0NDk0NzBjM2UyYjk5YzJkYS4uNjNjOTdjOWU5NzM3NmMxOGI1
YTg1MTY0YzUwNWM0MzI5MDgwNmQ1YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL3F0L1RvdWNoVmlld0ludGVyZmFjZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9xdC9Ub3VjaFZpZXdJbnRlcmZhY2UuaApAQCAtMjksNiArMjksOCBAQCBjbGFzcyBRVG91Y2hX
ZWJWaWV3OwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAorY2xhc3MgU0dBZ2VudDsKKwogY2xhc3Mg
VG91Y2hWaWV3SW50ZXJmYWNlIDogcHVibGljIFZpZXdJbnRlcmZhY2UKIHsKIHB1YmxpYzoKQEAg
LTQzLDYgKzQ1LDggQEAgcHVibGljOgogICAgIHZvaWQgcGluY2hHZXN0dXJlUmVxdWVzdFVwZGF0
ZShjb25zdCBRUG9pbnRGJiwgcXJlYWwpOwogICAgIHZvaWQgcGluY2hHZXN0dXJlRW5kZWQoKTsK
IAorICAgIFNHQWdlbnQqIHNjZW5lR3JhcGhBZ2VudCgpIGNvbnN0OworCiBwcml2YXRlOgogICAg
IC8qIEltcGxlbWVudGF0aW9uIG9mIFZpZXdJbnRlcmZhY2UgKi8KICAgICB2aXJ0dWFsIHZvaWQg
c2V0Vmlld05lZWRzRGlzcGxheShjb25zdCBRUmVjdCYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvV2ViS2l0Mi5wcm8gYi9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnBybwppbmRleCA2YjM4
OWI3YzcxZTE5NTg5YjFmNzQxZjhjMDE2OTk4M2U3OGYwYTYwLi5iNzg2Nzg1MGQ5YTJjOWQxOTNh
MzlkMWYwNGYxMGFiOGRmMmM1N2VhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQy
LnBybworKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnBybwpAQCAtMjUwLDYgKzI1MCw4IEBA
IEhFQURFUlMgKz0gXAogICAgIFVJUHJvY2Vzcy9xdC9xd2toaXN0b3J5X3AuaCBcCiAgICAgVUlQ
cm9jZXNzL3F0L3F3a3ByZWZlcmVuY2VzLmggXAogICAgIFVJUHJvY2Vzcy9xdC9xd2twcmVmZXJl
bmNlc19wLmggXAorICAgIFVJUHJvY2Vzcy9xdC9TR0FnZW50LmggXAorICAgIFVJUHJvY2Vzcy9x
dC9TR1RpbGVOb2RlLmggXAogICAgIFVJUHJvY2Vzcy9xdC9WaWV3SW50ZXJmYWNlLmggXAogICAg
IFVJUHJvY2Vzcy9xdC9XZWJVbmRvQ29tbWFuZFF0LmggXAogICAgIFVJUHJvY2Vzcy9xdC9XZWJD
b250ZXh0TWVudVByb3h5UXQuaCBcCkBAIC00NzgsNiArNDgwLDggQEAgU09VUkNFUyArPSBcCiAg
ICAgVUlQcm9jZXNzL3F0L3F3a2NvbnRleHQuY3BwIFwKICAgICBVSVByb2Nlc3MvcXQvcXdraGlz
dG9yeS5jcHAgXAogICAgIFVJUHJvY2Vzcy9xdC9xd2twcmVmZXJlbmNlcy5jcHAgXAorICAgIFVJ
UHJvY2Vzcy9xdC9TR0FnZW50LmNwcCBcCisgICAgVUlQcm9jZXNzL3F0L1NHVGlsZU5vZGUuY3Bw
IFwKICAgICBVSVByb2Nlc3MvcXQvVGlsZWREcmF3aW5nQXJlYVByb3h5UXQuY3BwIFwKICAgICBV
SVByb2Nlc3MvcXQvVGlsZWREcmF3aW5nQXJlYVRpbGVRdC5jcHAgXAogICAgIFVJUHJvY2Vzcy9x
dC9UZXh0Q2hlY2tlclF0LmNwcCBcCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>102659</attachid>
            <date>2011-08-02 09:15:12 -0700</date>
            <delta_ts>2011-08-03 06:26:10 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-65528-20110802181513.patch</filename>
            <type>text/plain</type>
            <size>34216</size>
            <attacher name="Jocelyn Turcotte">jturcotte</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTE5OTcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCA0NTM3ZDUzMzcwODc1ZDEx
NWE2ZjZiYzZmODIzMDEzYmVlYWZiNjE0Li5hYjc3YzcxYzk5OWQxMTE4MTA0Nzg0NWVkYjNkNGI3
NWI1NGE2YzNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjMgQEAKKzIwMTEtMDgtMDIgIEpvY2Vs
eW4gVHVyY290dGUgIDxqb2NlbHluLnR1cmNvdHRlQG5va2lhLmNvbT4KKworICAgICAgICBbUXRd
W1dLMl0gQ3JlYXRlIHNjZW5lIGdyYXBoIG5vZGVzIGZvciB0aWxlcyBpbiBRVG91Y2hXZWJWaWV3
IGluc3RlYWQgb2YgdXNpbmcgaW1wZXJhdGl2ZSBwYWludGluZy4KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY1NTI4CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ29udmVydHMgUVRvdWNoV2ViUGFnZSBmcm9t
IFFTR1BhaW50ZWRJdGVtIHRvIGEgc3RyYWlnaHQgUVNHSXRlbS4KKyAgICAgICAgLSBBIFNHVGls
ZU5vZGUgaXMgY3JlYXRlZCBhbmQgYWRkZWQgdG8gdGhlIHNjZW5lIGdyYXBoIGZvciBlYWNoIHRp
bGUsCisgICAgICAgICAgcG9zaXRpb25pbmcgdGhlbSByZWxhdGl2ZWx5IHRvIHRoZSBwYWdlLgor
ICAgICAgICAgIEl0J3MgYmFzaWNhbGx5IGEgUVNHU2ltcGxlVGV4dHVyZU5vZGUgd2l0aCBzdXBw
b3J0IGZvciBzcGVjaWZ5aW5nIGEKKyAgICAgICAgICBzb3VyY2UgcmVjdCBwbHVzIGZvciBvd25p
bmcgdGhlIFFTR1RleHR1cmUgZm9yIHByb3BlciBkZXN0cnVjdGlvbiBvbgorICAgICAgICAgIHNo
dXRkb3duIGJ5IHRoZSByZW5kZXJpbmcgdGhyZWFkLgorICAgICAgICAtIFNjYWxlIG5vZGVzIGFy
ZSB1c2VkIGFzIHBhcmVudCBvZiB0aWxlIG5vZGVzIHRvIHJldmVydCB0aGUgc2NhbGluZyBzZXQg
b24gdGhlCisgICAgICAgICAgUVRvdWNoV2ViUGFnZSBhbmQgYWxsb3cgdXMgdG8ga2VlcCB1c2lu
ZyBpbnRlZ2VyIGNvb3JkaW5hdGVzLgorICAgICAgICAtIFRoZSBTR0FnZW50IGNsYXNzIGlzIGlu
dHJvZHVjZWQgdG8gY2Fycnkgc2NlbmUgZ3JhcGggdXBkYXRlIHJlcXVlc3QgdXAgdG8gdGhlCisg
ICAgICAgICAgdXBkYXRlUGFpbnROb2RlIGNhbGwgb2YgdGhlIGl0ZW0sIHdoaWNoIG1heSBiZSBv
biB0aGUgc2NlbmUgZ3JhcGggcmVuZGVyaW5nIHRocmVhZC4KKworICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvcXQvcXRvdWNod2VicGFnZS5jcHA6CisgICAgICAgIChRVG91Y2hXZWJQYWdlOjpRVG91
Y2hXZWJQYWdlKToKKyAgICAgICAgKFFUb3VjaFdlYlBhZ2U6OnVwZGF0ZVBhaW50Tm9kZSk6Cisg
ICAgICAgIERlbGVnYXRlIHNjZW5lIGdyYXBoIHVwZGF0ZXMgdG8gdGhlIFNHQWdlbnQgd2hpY2gg
cmVjZWl2ZWQgdXBkYXRlIHJlcXVlc3RzIGZyb20gdGhlIHRpbGVkIGRyYXdpbmcgYXJlYS4KKyAg
ICAgICAgKFFUb3VjaFdlYlBhZ2U6OmV2ZW50KToKKyAgICAgICAgKFFUb3VjaFdlYlBhZ2U6Omdl
b21ldHJ5Q2hhbmdlZCk6CisgICAgICAgIChRVG91Y2hXZWJQYWdlUHJpdmF0ZTo6UVRvdWNoV2Vi
UGFnZVByaXZhdGUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvcXQvcXRvdWNod2VicGFnZS5o
OgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvcXQvcXRvdWNod2VicGFnZV9wLmg6CisgICAgICAg
ICogVUlQcm9jZXNzL1RpbGVkRHJhd2luZ0FyZWFQcm94eS5jcHA6CisgICAgICAgIE1hbmFnZSB0
aGUgc2NhbGUgbm9kZSBpbiB0aGUgVGlsZVNldCwgaXQgd2lsbCBiZSB0aGUgcGFyZW50IG5vZGUg
b2YgVGlsZSBub2Rlcy4KKyAgICAgICAgKFdlYktpdDo6VGlsZWREcmF3aW5nQXJlYVRpbGVTZXQ6
OnNnTm9kZUlEKToKKyAgICAgICAgKFdlYktpdDo6VGlsZWREcmF3aW5nQXJlYVRpbGVTZXQ6OlRp
bGVkRHJhd2luZ0FyZWFUaWxlU2V0KToKKyAgICAgICAgKFdlYktpdDo6VGlsZWREcmF3aW5nQXJl
YVRpbGVTZXQ6On5UaWxlZERyYXdpbmdBcmVhVGlsZVNldCk6CisgICAgICAgIChXZWJLaXQ6OlRp
bGVkRHJhd2luZ0FyZWFQcm94eTo6VGlsZWREcmF3aW5nQXJlYVByb3h5KToKKyAgICAgICAgKFdl
YktpdDo6VGlsZWREcmF3aW5nQXJlYVByb3h5OjpzZXRDb250ZW50c1NjYWxlKToKKyAgICAgICAg
KFdlYktpdDo6VGlsZWREcmF3aW5nQXJlYVByb3h5OjpjcmVhdGVUaWxlcyk6CisgICAgICAgIChX
ZWJLaXQ6OlRpbGVkRHJhd2luZ0FyZWFQcm94eTo6cmVtb3ZlQWxsVGlsZXMpOgorICAgICAgICAq
IFVJUHJvY2Vzcy9UaWxlZERyYXdpbmdBcmVhVGlsZS5oOgorICAgICAgICAoV2ViS2l0OjpUaWxl
ZERyYXdpbmdBcmVhVGlsZTo6Y3JlYXRlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvcXQvU0dBZ2Vu
dC5jcHA6IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9xdC9TR0FnZW50Lmg6IEFkZGVkLgor
ICAgICAgICAqIFVJUHJvY2Vzcy9xdC9TR1RpbGVOb2RlLmNwcDogQWRkZWQuCisgICAgICAgICog
VUlQcm9jZXNzL3F0L1NHVGlsZU5vZGUuaDogQWRkZWQuCisgICAgICAgICogVUlQcm9jZXNzL3F0
L1RpbGVkRHJhd2luZ0FyZWFQcm94eVF0LmNwcDoKKyAgICAgICAgRGlzYWJsZSB0aGUgcGFpbnQg
Y2FsbCBhbmQgdXBkYXRlIHRoZSBzY2VuZSBncmFwaCBvbiBpbmNvcnBvcmF0ZVVwZGF0ZSB0aHJv
dWdoIHRoZSBTR0FnZW50LgorICAgICAgICAoV2ViS2l0OjpUaWxlZERyYXdpbmdBcmVhUHJveHk6
OnVwZGF0ZVdlYlZpZXcpOgorICAgICAgICAqIFVJUHJvY2Vzcy9xdC9UaWxlZERyYXdpbmdBcmVh
VGlsZVF0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6VGlsZWREcmF3aW5nQXJlYVRpbGU6OlRpbGVk
RHJhd2luZ0FyZWFUaWxlKToKKyAgICAgICAgKFdlYktpdDo6VGlsZWREcmF3aW5nQXJlYVRpbGU6
On5UaWxlZERyYXdpbmdBcmVhVGlsZSk6CisgICAgICAgIChXZWJLaXQ6OlRpbGVkRHJhd2luZ0Fy
ZWFUaWxlOjppc1JlYWR5VG9QYWludCk6CisgICAgICAgIChXZWJLaXQ6OlRpbGVkRHJhd2luZ0Fy
ZWFUaWxlOjpzd2FwQmFja0J1ZmZlclRvRnJvbnQpOgorICAgICAgICAoV2ViS2l0OjpUaWxlZERy
YXdpbmdBcmVhVGlsZTo6cGFpbnQpOgorICAgICAgICAoV2ViS2l0OjpUaWxlZERyYXdpbmdBcmVh
VGlsZTo6aW5jb3Jwb3JhdGVVcGRhdGUpOgorICAgICAgICAoV2ViS2l0OjpUaWxlZERyYXdpbmdB
cmVhVGlsZTo6ZGlzYWJsZVVwZGF0ZXMpOgorICAgICAgICAoV2ViS2l0OjpUaWxlZERyYXdpbmdB
cmVhVGlsZTo6c2V0UGFyZW50Tm9kZUlEKToKKyAgICAgICAgKiBVSVByb2Nlc3MvcXQvVG91Y2hW
aWV3SW50ZXJmYWNlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6VG91Y2hWaWV3SW50ZXJmYWNlOjpz
Y2VuZUdyYXBoQWdlbnQpOgorICAgICAgICAoV2ViS2l0OjpUb3VjaFZpZXdJbnRlcmZhY2U6OnNl
dFZpZXdOZWVkc0Rpc3BsYXkpOgorICAgICAgICAqIFVJUHJvY2Vzcy9xdC9Ub3VjaFZpZXdJbnRl
cmZhY2UuaDoKKyAgICAgICAgKiBXZWJLaXQyLnBybzoKKwogMjAxMS0wNy0yOSAgSm9jZWx5biBU
dXJjb3R0ZSAgPGpvY2VseW4udHVyY290dGVAbm9raWEuY29tPgogCiAgICAgICAgIEZpeCB0aGUg
UVRvdWNoV2ViVmlldyBpbiBkZWJ1ZyBzZWdmYXVsdCBvbiBzaHV0ZG93biBpbnRyb2R1Y2VkIGlu
IDkxOTc5LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xdG91
Y2h3ZWJwYWdlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXRvdWNod2Vi
cGFnZS5jcHAKaW5kZXggOGZjYWJmNmY0NTg0ZTVmNDczMDE4MjIzM2JiYzFhMDJkNTVhNjY4MC4u
YzE5M2Q0ZGQ0MzkyOWM3NjZkNzNiODlkMDFlM2JiMmU3ZjU3NmRmZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xdG91Y2h3ZWJwYWdlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3F0b3VjaHdlYnBhZ2UuY3BwCkBAIC0yMSwxOCAr
MjEsMjAgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJxdG91Y2h3ZWJwYWdlLmgi
CiAjaW5jbHVkZSAicXRvdWNod2VicGFnZV9wLmgiCi0jaW5jbHVkZSAicXRvdWNod2VicGFnZXBy
b3h5LmgiCiAKKyNpbmNsdWRlICJxdG91Y2h3ZWJwYWdlcHJveHkuaCIKKyNpbmNsdWRlICJTR0Fn
ZW50LmgiCiAjaW5jbHVkZSA8UUFwcGxpY2F0aW9uPgogI2luY2x1ZGUgPFFHcmFwaGljc1NjZW5l
TW91c2VFdmVudD4KICNpbmNsdWRlIDxRUGFpbnRlcj4KKyNpbmNsdWRlIDxRU0dOb2RlPgogI2lu
Y2x1ZGUgPFFVcmw+Ci0jaW5jbHVkZSA8UXREZWJ1Zz4KIAogUVRvdWNoV2ViUGFnZTo6UVRvdWNo
V2ViUGFnZShRU0dJdGVtKiBwYXJlbnQpCi0gICAgOiBRU0dQYWludGVkSXRlbShwYXJlbnQpCisg
ICAgOiBRU0dJdGVtKHBhcmVudCkKICAgICAsIGQobmV3IFFUb3VjaFdlYlBhZ2VQcml2YXRlKHRo
aXMpKQogeworICAgIHNldEZsYWcoSXRlbUhhc0NvbnRlbnRzKTsKIH0KIAogUVRvdWNoV2ViUGFn
ZTo6flFUb3VjaFdlYlBhZ2UoKQpAQCAtNDAsMTEgKzQyLDYgQEAgUVRvdWNoV2ViUGFnZTo6flFU
b3VjaFdlYlBhZ2UoKQogICAgIGRlbGV0ZSBkOwogfQogCi12b2lkIFFUb3VjaFdlYlBhZ2U6OnBh
aW50KFFQYWludGVyKiBwYWludGVyKQotewotICAgIGQtPnBhZ2UtPnBhaW50KHBhaW50ZXIsIGJv
dW5kaW5nUmVjdCgpLnRvQWxpZ25lZFJlY3QoKSk7Ci19Ci0KIHZvaWQgUVRvdWNoV2ViUGFnZTo6
bG9hZChjb25zdCBRVXJsJiB1cmwpCiB7CiAgICAgZC0+cGFnZS0+bG9hZCh1cmwpOwpAQCAtNjcs
NiArNjQsMTggQEAgaW50IFFUb3VjaFdlYlBhZ2U6OmxvYWRQcm9ncmVzcygpIGNvbnN0CiAKIC8q
ISBccmVpbXAKICovCitRU0dOb2RlKiBRVG91Y2hXZWJQYWdlOjp1cGRhdGVQYWludE5vZGUoUVNH
Tm9kZSogaXRlbU5vZGUsIFVwZGF0ZVBhaW50Tm9kZURhdGEqKQoreworICAgIGlmICghaXRlbU5v
ZGUpCisgICAgICAgIGl0ZW1Ob2RlID0gbmV3IFFTR05vZGU7CisgICAgZC0+c2dBZ2VudC0+dXBk
YXRlUGFpbnROb2RlKGl0ZW1Ob2RlKTsKKworICAgIC8vIFFTR0l0ZW0gdGFrZXMgb3duZXJzaGlw
IG9mIHRoaXMgcmV0dXJuIHZhbHVlIGFuZCBpdCdzIGNoaWxkcmVuIGJldHdlZW4gYW5kIGFmdGVy
IHVwZGF0ZVBhaW50Tm9kZSBjYWxscy4KKyAgICByZXR1cm4gaXRlbU5vZGU7Cit9CisKKy8qISBc
cmVpbXAKKyovCiBib29sIFFUb3VjaFdlYlBhZ2U6OmV2ZW50KFFFdmVudCogZXYpCiB7CiAgICAg
c3dpdGNoIChldi0+dHlwZSgpKSB7CkBAIC04Miw3ICs5MSw3IEBAIGJvb2wgUVRvdWNoV2ViUGFn
ZTo6ZXZlbnQoUUV2ZW50KiBldikKIAogICAgIGlmIChkLT5wYWdlLT5oYW5kbGVFdmVudChldikp
CiAgICAgICAgIHJldHVybiB0cnVlOwotICAgIHJldHVybiBRU0dQYWludGVkSXRlbTo6ZXZlbnQo
ZXYpOworICAgIHJldHVybiBRU0dJdGVtOjpldmVudChldik7CiB9CiAKIHZvaWQgUVRvdWNoV2Vi
UGFnZTo6a2V5UHJlc3NFdmVudChRS2V5RXZlbnQqIGV2ZW50KQpAQCAtMTE3LDcgKzEyNiw3IEBA
IHZvaWQgUVRvdWNoV2ViUGFnZTo6dG91Y2hFdmVudChRVG91Y2hFdmVudCogZXZlbnQpCiAKIHZv
aWQgUVRvdWNoV2ViUGFnZTo6Z2VvbWV0cnlDaGFuZ2VkKGNvbnN0IFFSZWN0RiYgbmV3R2VvbWV0
cnksIGNvbnN0IFFSZWN0RiYgb2xkR2VvbWV0cnkpCiB7Ci0gICAgUVNHUGFpbnRlZEl0ZW06Omdl
b21ldHJ5Q2hhbmdlZChuZXdHZW9tZXRyeSwgb2xkR2VvbWV0cnkpOworICAgIFFTR0l0ZW06Omdl
b21ldHJ5Q2hhbmdlZChuZXdHZW9tZXRyeSwgb2xkR2VvbWV0cnkpOwogICAgIGlmIChuZXdHZW9t
ZXRyeS5zaXplKCkgIT0gb2xkR2VvbWV0cnkuc2l6ZSgpKQogICAgICAgICBkLT5wYWdlLT5zZXRE
cmF3aW5nQXJlYVNpemUobmV3R2VvbWV0cnkuc2l6ZSgpLnRvU2l6ZSgpKTsKIH0KQEAgLTEzMCw2
ICsxMzksNyBAQCBRQWN0aW9uKiBRVG91Y2hXZWJQYWdlOjpuYXZpZ2F0aW9uQWN0aW9uKFF0V2Vi
S2l0OjpOYXZpZ2F0aW9uQWN0aW9uIHdoaWNoKQogUVRvdWNoV2ViUGFnZVByaXZhdGU6OlFUb3Vj
aFdlYlBhZ2VQcml2YXRlKFFUb3VjaFdlYlBhZ2UqIHZpZXcpCiAgICAgOiBxKHZpZXcpCiAgICAg
LCBwYWdlKDApCisgICAgLCBzZ0FnZW50KG5ldyBTR0FnZW50KHZpZXcpKQogewogfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3F0b3VjaHdlYnBhZ2UuaCBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXRvdWNod2VicGFnZS5oCmluZGV4IGQz
YTFhYmMxZTZjNDEyNmNmNTgwNzBiN2ExZWU5YjRiY2MzYWYzMzIuLmQxY2ZhOTBmMjQ4OTQzYmRm
NWVjY2ZmOGViMzY3YWUyNDk5NzY3ODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvcXQvcXRvdWNod2VicGFnZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvcXQvcXRvdWNod2VicGFnZS5oCkBAIC0yNCw3ICsyNCw3IEBACiAjaW5jbHVkZSAicXdl
YmtpdGdsb2JhbC5oIgogI2luY2x1ZGUgInF3ZWJraXR0eXBlcy5oIgogCi0jaW5jbHVkZSA8UXRE
ZWNsYXJhdGl2ZS9xc2dwYWludGVkaXRlbS5oPgorI2luY2x1ZGUgPFF0RGVjbGFyYXRpdmUvcXNn
aXRlbS5oPgogI2luY2x1ZGUgPFFTaGFyZWRQb2ludGVyPgogCiBjbGFzcyBRVG91Y2hXZWJQYWdl
UHJpdmF0ZTsKQEAgLTM1LDcgKzM1LDcgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAgICAgY2xhc3Mg
VG91Y2hWaWV3SW50ZXJmYWNlOwogfQogCi1jbGFzcyBRV0VCS0lUX0VYUE9SVCBRVG91Y2hXZWJQ
YWdlIDogcHVibGljIFFTR1BhaW50ZWRJdGVtIHsKK2NsYXNzIFFXRUJLSVRfRVhQT1JUIFFUb3Vj
aFdlYlBhZ2UgOiBwdWJsaWMgUVNHSXRlbSB7CiAgICAgUV9PQkpFQ1QKICAgICBRX1BST1BFUlRZ
KFFTdHJpbmcgdGl0bGUgUkVBRCB0aXRsZSBOT1RJRlkgdGl0bGVDaGFuZ2VkKQogICAgIFFfUFJP
UEVSVFkoUVVybCB1cmwgUkVBRCB1cmwgTk9USUZZIHVybENoYW5nZWQpCkBAIC01NCw3ICs1NCw3
IEBAIHB1YmxpYzoKIAogICAgIFFBY3Rpb24qIG5hdmlnYXRpb25BY3Rpb24oUXRXZWJLaXQ6Ok5h
dmlnYXRpb25BY3Rpb24gd2hpY2gpOwogCi0gICAgdmlydHVhbCB2b2lkIHBhaW50KFFQYWludGVy
Kik7CisgICAgdmlydHVhbCBRU0dOb2RlKiB1cGRhdGVQYWludE5vZGUoUVNHTm9kZSogb2xkTm9k
ZSwgVXBkYXRlUGFpbnROb2RlRGF0YSopOwogICAgIHZpcnR1YWwgYm9vbCBldmVudChRRXZlbnQq
KTsKIAogUV9TSUdOQUxTOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9xdC9xdG91Y2h3ZWJwYWdlX3AuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQv
cXRvdWNod2VicGFnZV9wLmgKaW5kZXggNGNjYTMwZTQ1ZDAwNDcwN2U1NGU0YjgwNTgyNmM3MTY5
NzliMDIwOS4uZjg1Yjc4OTMxNWMzNGJmZjZjOGIyNmI0YzA4NjZhMTg4MmEwMDJhNiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xdG91Y2h3ZWJwYWdlX3AuaAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3F0b3VjaHdlYnBhZ2VfcC5oCkBA
IC0yNSwxMCArMjUsMTUgQEAKICNpbmNsdWRlICJxdG91Y2h3ZWJwYWdlLmgiCiAKIGNsYXNzIFFS
ZWN0RjsKK2NsYXNzIFFTR05vZGU7CiBjbGFzcyBRU3RyaW5nOwogY2xhc3MgUVRvdWNoV2ViUGFn
ZTsKIGNsYXNzIFFUb3VjaFdlYlBhZ2VQcm94eTsKIAorbmFtZXNwYWNlIFdlYktpdCB7CitjbGFz
cyBTR0FnZW50OworfQorCiBjbGFzcyBRVG91Y2hXZWJQYWdlUHJpdmF0ZSB7CiBwdWJsaWM6CiAg
ICAgUVRvdWNoV2ViUGFnZVByaXZhdGUoUVRvdWNoV2ViUGFnZSogdmlldyk7CkBAIC00Miw2ICs0
Nyw3IEBAIHB1YmxpYzoKIAogICAgIFFUb3VjaFdlYlBhZ2UqIGNvbnN0IHE7CiAgICAgUVRvdWNo
V2ViUGFnZVByb3h5KiBwYWdlOworICAgIFFTY29wZWRQb2ludGVyPFdlYktpdDo6U0dBZ2VudD4g
c2dBZ2VudDsKIH07CiAKICNlbmRpZiAvKiBxdG91Y2h3ZWJwYWdlX3BfaCAqLwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1RpbGVkRHJhd2luZ0FyZWFQcm94eS5jcHAgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvVGlsZWREcmF3aW5nQXJlYVByb3h5LmNwcAppbmRleCBl
ODA4ZDljY2FhODQ2Nzk1Yjc0YWY3NzY4MDZhNmIxMDA3ZDU2OGIxLi4yNjZlMmRkZTI5OTZmMjg4
YTk1NjdiNWViNzMxODgyM2Q4NzUzMjc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvVGlsZWREcmF3aW5nQXJlYVByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvVGlsZWREcmF3aW5nQXJlYVByb3h5LmNwcApAQCAtMzUsNiArMzUsMTEgQEAKICNpbmNs
dWRlICJXZWJQYWdlUHJveHkuaCIKICNpbmNsdWRlICJXZWJQcm9jZXNzUHJveHkuaCIKIAorI2lm
IFBMQVRGT1JNKFFUKQorI2luY2x1ZGUgIlNHQWdlbnQuaCIKKyNpbmNsdWRlICJUb3VjaFZpZXdJ
bnRlcmZhY2UuaCIKKyNlbmRpZgorCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogbmFtZXNw
YWNlIFdlYktpdCB7CkBAIC00OCwyNCArNTMsNDUgQEAgY2xhc3MgVGlsZWREcmF3aW5nQXJlYVRp
bGVTZXQgewogcHVibGljOgogICAgIHR5cGVkZWYgSGFzaE1hcDxUaWxlZERyYXdpbmdBcmVhVGls
ZTo6Q29vcmRpbmF0ZSwgUmVmUHRyPFRpbGVkRHJhd2luZ0FyZWFUaWxlPiA+IFRpbGVNYXA7CiAK
LSAgICBUaWxlZERyYXdpbmdBcmVhVGlsZVNldChmbG9hdCBjb250ZW50c1NjYWxlID0gMS4wZik7
CisgICAgVGlsZWREcmF3aW5nQXJlYVRpbGVTZXQoUGxhdGZvcm1XZWJWaWV3KiwgZmxvYXQgY29u
dGVudHNTY2FsZSA9IDEuMGYpOworICAgIH5UaWxlZERyYXdpbmdBcmVhVGlsZVNldCgpOwogCiAg
ICAgV2ViQ29yZTo6SW50UmVjdCBtYXBUb0NvbnRlbnRzKGNvbnN0IFdlYkNvcmU6OkludFJlY3Qm
KSBjb25zdDsKICAgICBXZWJDb3JlOjpJbnRSZWN0IG1hcEZyb21Db250ZW50cyhjb25zdCBXZWJD
b3JlOjpJbnRSZWN0JikgY29uc3Q7CiAKICAgICBUaWxlTWFwJiB0aWxlcygpIHsgcmV0dXJuIG1f
dGlsZXM7IH0KICAgICBmbG9hdCBjb250ZW50c1NjYWxlKCkgY29uc3QgeyByZXR1cm4gbV9jb250
ZW50c1NjYWxlOyB9CisjaWYgUExBVEZPUk0oUVQpCisgICAgaW50IHNnTm9kZUlEKCkgY29uc3Qg
eyByZXR1cm4gbV9zZ05vZGVJRDsgfQorI2VuZGlmCiAKIHByaXZhdGU6CiAgICAgVGlsZU1hcCBt
X3RpbGVzOwogICAgIGZsb2F0IG1fY29udGVudHNTY2FsZTsKKyNpZiBQTEFURk9STShRVCkKKyAg
ICBTR0FnZW50KiBtX3NnQWdlbnQ7CisgICAgaW50IG1fc2dOb2RlSUQ7CisjZW5kaWYKIH07CiAK
LVRpbGVkRHJhd2luZ0FyZWFUaWxlU2V0OjpUaWxlZERyYXdpbmdBcmVhVGlsZVNldChmbG9hdCBj
b250ZW50c1NjYWxlKQorVGlsZWREcmF3aW5nQXJlYVRpbGVTZXQ6OlRpbGVkRHJhd2luZ0FyZWFU
aWxlU2V0KFBsYXRmb3JtV2ViVmlldyogd2ViVmlldywgZmxvYXQgY29udGVudHNTY2FsZSkKICAg
ICA6IG1fY29udGVudHNTY2FsZShjb250ZW50c1NjYWxlKQorI2lmIFBMQVRGT1JNKFFUKQorICAg
ICwgbV9zZ0FnZW50KHdlYlZpZXctPnNjZW5lR3JhcGhBZ2VudCgpKQorICAgICwgbV9zZ05vZGVJ
RChtX3NnQWdlbnQtPmNyZWF0ZVNjYWxlTm9kZSgwLCAxIC8gY29udGVudHNTY2FsZSkpCisjZW5k
aWYKIHsKIH0KIAorVGlsZWREcmF3aW5nQXJlYVRpbGVTZXQ6On5UaWxlZERyYXdpbmdBcmVhVGls
ZVNldCgpCit7CisjaWYgUExBVEZPUk0oUVQpCisgICAgLy8gRm9yY2luZyB0aGUgdGlsZXMgZGVz
dHJ1Y3Rpb24gdG8gcmVtb3ZlIHRoZWlyIHNnIG5vZGUgYmVmb3JlIHJlbW92aW5nIHRoZWlyIHBh
cmVudCBub2RlLgorICAgIG1fdGlsZXMuY2xlYXIoKTsKKyAgICBtX3NnQWdlbnQtPnJlbW92ZU5v
ZGUobV9zZ05vZGVJRCk7CisjZW5kaWYKK30KKwogSW50UmVjdCBUaWxlZERyYXdpbmdBcmVhVGls
ZVNldDo6bWFwVG9Db250ZW50cyhjb25zdCBJbnRSZWN0JiByZWN0KSBjb25zdAogewogICAgIHJl
dHVybiBlbmNsb3NpbmdJbnRSZWN0KEZsb2F0UmVjdChyZWN0LngoKSAvIG1fY29udGVudHNTY2Fs
ZSwKQEAgLTgyLDcgKzEwOCw2IEBAIEludFJlY3QgVGlsZWREcmF3aW5nQXJlYVRpbGVTZXQ6Om1h
cEZyb21Db250ZW50cyhjb25zdCBJbnRSZWN0JiByZWN0KSBjb25zdAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZWN0LmhlaWdodCgpICogbV9jb250ZW50c1NjYWxlKSk7
CiB9CiAKLQogc3RhdGljIEludFBvaW50IGlubmVyQm90dG9tUmlnaHQoY29uc3QgSW50UmVjdCYg
cmVjdCkKIHsKICAgICAvLyBBY3R1YWxseSwgdGhlIHJlY3QgZG9lcyBub3QgY29udGFpbiByZWN0
Lm1heFgoKS4gUmVmZXIgdG8gSW50UmVjdDo6Y29udGFpbi4KQEAgLTk5LDcgKzEyNCw3IEBAIFRp
bGVkRHJhd2luZ0FyZWFQcm94eTo6VGlsZWREcmF3aW5nQXJlYVByb3h5KFBsYXRmb3JtV2ViVmll
dyogd2ViVmlldywgV2ViUGFnZVByCiAgICAgLCBtX2lzV2FpdGluZ0ZvckRpZFNldEZyYW1lTm90
aWZpY2F0aW9uKGZhbHNlKQogICAgICwgbV9pc1Zpc2libGUodHJ1ZSkKICAgICAsIG1fd2ViVmll
dyh3ZWJWaWV3KQotICAgICwgbV9jdXJyZW50VGlsZVNldChhZG9wdFB0cihuZXcgVGlsZWREcmF3
aW5nQXJlYVRpbGVTZXQpKQorICAgICwgbV9jdXJyZW50VGlsZVNldChhZG9wdFB0cihuZXcgVGls
ZWREcmF3aW5nQXJlYVRpbGVTZXQod2ViVmlldykpKQogICAgICwgbV90aWxlQnVmZmVyVXBkYXRl
VGltZXIoUnVuTG9vcDo6bWFpbigpLCB0aGlzLCAmVGlsZWREcmF3aW5nQXJlYVByb3h5Ojp0aWxl
QnVmZmVyVXBkYXRlVGltZXJGaXJlZCkKICAgICAsIG1fdGlsZUNyZWF0aW9uVGltZXIoUnVuTG9v
cDo6bWFpbigpLCB0aGlzLCAmVGlsZWREcmF3aW5nQXJlYVByb3h5Ojp0aWxlQ3JlYXRpb25UaW1l
ckZpcmVkKQogICAgICwgbV90aWxlU2l6ZShkZWZhdWx0VGlsZVdpZHRoLCBkZWZhdWx0VGlsZUhl
aWdodCkKQEAgLTQwOCw3ICs0MzMsNyBAQCB2b2lkIFRpbGVkRHJhd2luZ0FyZWFQcm94eTo6c2V0
Q29udGVudHNTY2FsZShmbG9hdCBzY2FsZSkKICAgICAgICAgbV9wcmV2aW91c1RpbGVTZXQgPSBt
X2N1cnJlbnRUaWxlU2V0LnJlbGVhc2UoKTsKICAgICAgICAgZGlzYWJsZVRpbGVTZXRVcGRhdGVz
KG1fcHJldmlvdXNUaWxlU2V0LmdldCgpKTsKICAgICB9Ci0gICAgbV9jdXJyZW50VGlsZVNldCA9
IGFkb3B0UHRyKG5ldyBUaWxlZERyYXdpbmdBcmVhVGlsZVNldChzY2FsZSkpOworICAgIG1fY3Vy
cmVudFRpbGVTZXQgPSBhZG9wdFB0cihuZXcgVGlsZWREcmF3aW5nQXJlYVRpbGVTZXQobV93ZWJW
aWV3LCBzY2FsZSkpOwogICAgIGNyZWF0ZVRpbGVzKCk7CiB9CiAKQEAgLTQ5Niw3ICs1MjEsMTAg
QEAgdm9pZCBUaWxlZERyYXdpbmdBcmVhUHJveHk6OmNyZWF0ZVRpbGVzKCkKICAgICB1bnNpZ25l
ZCB0aWxlc1RvQ3JlYXRlQ291bnQgPSB0aWxlc1RvQ3JlYXRlLnNpemUoKTsKICAgICBmb3IgKHVu
c2lnbmVkIG4gPSAwOyBuIDwgdGlsZXNUb0NyZWF0ZUNvdW50OyArK24pIHsKICAgICAgICAgVGls
ZWREcmF3aW5nQXJlYVRpbGU6OkNvb3JkaW5hdGUgY29vcmRpbmF0ZSA9IHRpbGVzVG9DcmVhdGVb
bl07Ci0gICAgICAgIFJlZlB0cjxUaWxlZERyYXdpbmdBcmVhVGlsZT4gdGlsZSA9IFRpbGVkRHJh
d2luZ0FyZWFUaWxlOjpjcmVhdGUodGhpcywgY29vcmRpbmF0ZSk7CisgICAgICAgIFJlZlB0cjxU
aWxlZERyYXdpbmdBcmVhVGlsZT4gdGlsZSA9IFRpbGVkRHJhd2luZ0FyZWFUaWxlOjpjcmVhdGUo
dGhpcywgbV93ZWJWaWV3LCBjb29yZGluYXRlKTsKKyNpZiBQTEFURk9STShRVCkKKyAgICAgICAg
dGlsZS0+c2V0UGFyZW50Tm9kZUlEKG1fY3VycmVudFRpbGVTZXQtPnNnTm9kZUlEKCkpOworI2Vu
ZGlmCiAgICAgICAgIG1fY3VycmVudFRpbGVTZXQtPnRpbGVzKCkuc2V0KGNvb3JkaW5hdGUsIHRp
bGUpOwogICAgIH0KIApAQCAtNTYxLDcgKzU4OSw3IEBAIHZvaWQgVGlsZWREcmF3aW5nQXJlYVBy
b3h5OjpkaXNhYmxlVGlsZVNldFVwZGF0ZXMoVGlsZWREcmF3aW5nQXJlYVRpbGVTZXQqIHRpbGVT
CiAKIHZvaWQgVGlsZWREcmF3aW5nQXJlYVByb3h5OjpyZW1vdmVBbGxUaWxlcygpCiB7Ci0gICAg
bV9jdXJyZW50VGlsZVNldCA9IGFkb3B0UHRyKG5ldyBUaWxlZERyYXdpbmdBcmVhVGlsZVNldCht
X2N1cnJlbnRUaWxlU2V0LT5jb250ZW50c1NjYWxlKCkpKTsKKyAgICBtX2N1cnJlbnRUaWxlU2V0
ID0gYWRvcHRQdHIobmV3IFRpbGVkRHJhd2luZ0FyZWFUaWxlU2V0KG1fd2ViVmlldywgbV9jdXJy
ZW50VGlsZVNldC0+Y29udGVudHNTY2FsZSgpKSk7CiB9CiAKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL1RpbGVkRHJhd2luZ0FyZWFUaWxlLmggYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvVGlsZWREcmF3aW5nQXJlYVRpbGUuaAppbmRleCAyYjliNTBkNGQzMWU0NGQy
MTZjYjZkMDgwZjVlZmEwZTM0M2U5MzUxLi5lNTUzNzhjMWFjMWRlMDJiM2ZkMWIwODExYWZiZGM5
NTgwZWRkNzIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvVGlsZWREcmF3
aW5nQXJlYVRpbGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvVGlsZWREcmF3aW5n
QXJlYVRpbGUuaApAQCAtNDMsMTEgKzQzLDIyIEBAIG5hbWVzcGFjZSBXZWJLaXQgewogY2xhc3Mg
VGlsZWREcmF3aW5nQXJlYVByb3h5OwogY2xhc3MgVXBkYXRlSW5mbzsKIAorI2lmIFBMQVRGT1JN
KE1BQykKK3R5cGVkZWYgV0tWaWV3IFBsYXRmb3JtV2ViVmlldzsKKyNlbGlmIFBMQVRGT1JNKFdJ
TikKK2NsYXNzIFdlYlZpZXc7Cit0eXBlZGVmIFdlYlZpZXcgUGxhdGZvcm1XZWJWaWV3OworI2Vs
aWYgUExBVEZPUk0oUVQpCitjbGFzcyBTR0FnZW50OworY2xhc3MgVG91Y2hWaWV3SW50ZXJmYWNl
OwordHlwZWRlZiBUb3VjaFZpZXdJbnRlcmZhY2UgUGxhdGZvcm1XZWJWaWV3OworI2VuZGlmCisK
IGNsYXNzIFRpbGVkRHJhd2luZ0FyZWFUaWxlIDogcHVibGljIFJlZkNvdW50ZWQ8VGlsZWREcmF3
aW5nQXJlYVRpbGU+IHsKIHB1YmxpYzoKICAgICB0eXBlZGVmIFdlYkNvcmU6OkludFBvaW50IENv
b3JkaW5hdGU7CiAKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxUaWxlZERyYXdpbmdBcmVhVGlsZT4g
Y3JlYXRlKFRpbGVkRHJhd2luZ0FyZWFQcm94eSogcHJveHksIGNvbnN0IENvb3JkaW5hdGUmIHRp
bGVDb29yZGluYXRlKSB7IHJldHVybiBhZG9wdFJlZihuZXcgVGlsZWREcmF3aW5nQXJlYVRpbGUo
cHJveHksIHRpbGVDb29yZGluYXRlKSk7IH0KKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxUaWxlZERy
YXdpbmdBcmVhVGlsZT4gY3JlYXRlKFRpbGVkRHJhd2luZ0FyZWFQcm94eSogcHJveHksIFBsYXRm
b3JtV2ViVmlldyogd2ViVmlldywgY29uc3QgQ29vcmRpbmF0ZSYgdGlsZUNvb3JkaW5hdGUpIHsg
cmV0dXJuIGFkb3B0UmVmKG5ldyBUaWxlZERyYXdpbmdBcmVhVGlsZShwcm94eSwgd2ViVmlldywg
dGlsZUNvb3JkaW5hdGUpKTsgfQogICAgIH5UaWxlZERyYXdpbmdBcmVhVGlsZSgpOwogCiAgICAg
Ym9vbCBpc0RpcnR5KCkgY29uc3Q7CkBAIC02Nyw5ICs3OCwxMiBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBkaXNhYmxlVXBkYXRlcygpOwogCiAgICAgaW50IElEKCkgY29uc3QgeyByZXR1cm4gbV9JRDsg
fQorI2lmIFBMQVRGT1JNKFFUKQorICAgIHZvaWQgc2V0UGFyZW50Tm9kZUlEKGludCk7CisjZW5k
aWYKIAogcHJpdmF0ZToKLSAgICBUaWxlZERyYXdpbmdBcmVhVGlsZShUaWxlZERyYXdpbmdBcmVh
UHJveHkqIHByb3h5LCBjb25zdCBUaWxlZERyYXdpbmdBcmVhVGlsZTo6Q29vcmRpbmF0ZSYgdGls
ZUNvb3JkaW5hdGUpOworICAgIFRpbGVkRHJhd2luZ0FyZWFUaWxlKFRpbGVkRHJhd2luZ0FyZWFQ
cm94eSosIFBsYXRmb3JtV2ViVmlldyosIGNvbnN0IFRpbGVkRHJhd2luZ0FyZWFUaWxlOjpDb29y
ZGluYXRlJiB0aWxlQ29vcmRpbmF0ZSk7CiAKICAgICBUaWxlZERyYXdpbmdBcmVhUHJveHkqIG1f
cHJveHk7CiAgICAgQ29vcmRpbmF0ZSBtX2Nvb3JkaW5hdGU7CkBAIC03OSwxMCArOTMsMTEgQEAg
cHJpdmF0ZToKICAgICBib29sIG1faGFzVXBkYXRlUGVuZGluZzsKIAogI2lmIFBMQVRGT1JNKFFU
KQotICAgIFFQaXhtYXAgbV9idWZmZXI7Ci0gICAgUVBpeG1hcCBtX2JhY2tCdWZmZXI7CisgICAg
UUltYWdlIG1fYmFja0J1ZmZlcjsKKyAgICBTR0FnZW50KiBtX3NnQWdlbnQ7CisgICAgaW50IG1f
bm9kZUlEOworICAgIGludCBtX3BhcmVudE5vZGVJRDsKICAgICBib29sIG1faXNCYWNrQnVmZmVy
VmFsaWQ7Ci0gICAgYm9vbCBtX2lzRnJvbnRCdWZmZXJWYWxpZDsKICAgICBRUmVnaW9uIG1fZGly
dHlSZWdpb247CiAjZW5kaWYKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvcXQvU0dBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvU0dBZ2VudC5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uMGUxZGUwM2I3ZmEzYzkwNTA0ZTFjZGQ5OTk2ZjY0OGQ5ZTkyZGZhMQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9TR0FnZW50LmNw
cApAQCAtMCwwICsxLDE3NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxMSBOb2tp
YSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJTR0FnZW50LmgiCisKKyNpbmNsdWRlICJTR1RpbGVOb2RlLmgi
CisjaW5jbHVkZSA8UVNHRW5naW5lPgorI2luY2x1ZGUgPFFTR0l0ZW0+CisjaW5jbHVkZSA8UVNH
VGV4dHVyZT4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3N0cnVjdCBOb2RlVXBkYXRlIHsKKyAg
ICBlbnVtIFR5cGUgeworICAgICAgICBDcmVhdGVUaWxlLAorICAgICAgICBDcmVhdGVTY2FsZSwK
KyAgICAgICAgUmVtb3ZlLAorICAgICAgICBTZXRUZXh0dXJlCisgICAgfTsKKyAgICBOb2RlVXBk
YXRlKFR5cGUgdHlwZSkKKyAgICAgICAgOiB0eXBlKHR5cGUpCisgICAgeyB9CisgICAgVHlwZSB0
eXBlOworfTsKKworc3RydWN0IE5vZGVVcGRhdGVDcmVhdGVUaWxlIDogcHVibGljIE5vZGVVcGRh
dGUgeworICAgIE5vZGVVcGRhdGVDcmVhdGVUaWxlKGludCBub2RlSUQsIGludCBwYXJlbnROb2Rl
SUQpCisgICAgICAgIDogTm9kZVVwZGF0ZShDcmVhdGVUaWxlKQorICAgICAgICAsIG5vZGVJRChu
b2RlSUQpCisgICAgICAgICwgcGFyZW50Tm9kZUlEKHBhcmVudE5vZGVJRCkKKyAgICB7IH0KKyAg
ICBpbnQgbm9kZUlEOworICAgIGludCBwYXJlbnROb2RlSUQ7Cit9OworCitzdHJ1Y3QgTm9kZVVw
ZGF0ZUNyZWF0ZVNjYWxlIDogcHVibGljIE5vZGVVcGRhdGUgeworICAgIE5vZGVVcGRhdGVDcmVh
dGVTY2FsZShpbnQgbm9kZUlELCBpbnQgcGFyZW50Tm9kZUlELCBmbG9hdCBzY2FsZSkKKyAgICAg
ICAgOiBOb2RlVXBkYXRlKENyZWF0ZVNjYWxlKQorICAgICAgICAsIG5vZGVJRChub2RlSUQpCisg
ICAgICAgICwgcGFyZW50Tm9kZUlEKHBhcmVudE5vZGVJRCkKKyAgICAgICAgLCBzY2FsZShzY2Fs
ZSkKKyAgICB7IH0KKyAgICBpbnQgbm9kZUlEOworICAgIGludCBwYXJlbnROb2RlSUQ7CisgICAg
ZmxvYXQgc2NhbGU7Cit9OworCitzdHJ1Y3QgTm9kZVVwZGF0ZVJlbW92ZSA6IHB1YmxpYyBOb2Rl
VXBkYXRlIHsKKyAgICBOb2RlVXBkYXRlUmVtb3ZlKGludCBub2RlSUQpCisgICAgICAgIDogTm9k
ZVVwZGF0ZShSZW1vdmUpCisgICAgICAgICwgbm9kZUlEKG5vZGVJRCkKKyAgICB7IH0KKyAgICBp
bnQgbm9kZUlEOworfTsKKworc3RydWN0IE5vZGVVcGRhdGVTZXRUZXh0dXJlIDogcHVibGljIE5v
ZGVVcGRhdGUgeworICAgIE5vZGVVcGRhdGVTZXRUZXh0dXJlKGludCBub2RlSUQsIGNvbnN0IFFJ
bWFnZSYgdGV4dHVyZSwgY29uc3QgUVJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IFFSZWN0JiB0YXJn
ZXRSZWN0KQorICAgICAgICA6IE5vZGVVcGRhdGUoU2V0VGV4dHVyZSkKKyAgICAgICAgLCBub2Rl
SUQobm9kZUlEKQorICAgICAgICAsIHRleHR1cmUodGV4dHVyZSkKKyAgICAgICAgLCBzb3VyY2VS
ZWN0KHNvdXJjZVJlY3QpCisgICAgICAgICwgdGFyZ2V0UmVjdCh0YXJnZXRSZWN0KQorICAgIHsg
fQorICAgIGludCBub2RlSUQ7CisgICAgUUltYWdlIHRleHR1cmU7CisgICAgUVJlY3Qgc291cmNl
UmVjdDsKKyAgICBRUmVjdCB0YXJnZXRSZWN0OworfTsKKworCitTR0FnZW50OjpTR0FnZW50KFFT
R0l0ZW0qIGl0ZW0pCisgICAgOiBpdGVtKGl0ZW0pCisgICAgLCBuZXh0Tm9kZUlEKDEpCit7Cit9
CisKK1NHQWdlbnQ6On5TR0FnZW50KCkKK3sKKyAgICBmb3JlYWNoIChOb2RlVXBkYXRlKiBub2Rl
VXBkYXRlLCBub2RlVXBkYXRlc1F1ZXVlKQorICAgICAgICBkZWxldGUgbm9kZVVwZGF0ZTsKK30K
KworaW50IFNHQWdlbnQ6OmNyZWF0ZVRpbGVOb2RlKGludCBwYXJlbnROb2RlSUQpCit7CisgICAg
aW50IG5vZGVJRCA9IG5leHROb2RlSUQrKzsKKyAgICBub2RlVXBkYXRlc1F1ZXVlLmFwcGVuZChu
ZXcgTm9kZVVwZGF0ZUNyZWF0ZVRpbGUobm9kZUlELCBwYXJlbnROb2RlSUQpKTsKKyAgICBpdGVt
LT51cGRhdGUoKTsKKyAgICByZXR1cm4gbm9kZUlEOworfQorCitpbnQgU0dBZ2VudDo6Y3JlYXRl
U2NhbGVOb2RlKGludCBwYXJlbnROb2RlSUQsIGZsb2F0IHNjYWxlKQoreworICAgIGludCBub2Rl
SUQgPSBuZXh0Tm9kZUlEKys7CisgICAgbm9kZVVwZGF0ZXNRdWV1ZS5hcHBlbmQobmV3IE5vZGVV
cGRhdGVDcmVhdGVTY2FsZShub2RlSUQsIHBhcmVudE5vZGVJRCwgc2NhbGUpKTsKKyAgICBpdGVt
LT51cGRhdGUoKTsKKyAgICByZXR1cm4gbm9kZUlEOworfQorCit2b2lkIFNHQWdlbnQ6OnJlbW92
ZU5vZGUoaW50IG5vZGVJRCkKK3sKKyAgICBub2RlVXBkYXRlc1F1ZXVlLmFwcGVuZChuZXcgTm9k
ZVVwZGF0ZVJlbW92ZShub2RlSUQpKTsKKyAgICBpdGVtLT51cGRhdGUoKTsKK30KKwordm9pZCBT
R0FnZW50OjpzZXROb2RlVGV4dHVyZShpbnQgbm9kZUlELCBjb25zdCBRSW1hZ2UmIHRleHR1cmUs
IGNvbnN0IFFSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBRUmVjdCYgdGFyZ2V0UmVjdCkKK3sKKyAg
ICBub2RlVXBkYXRlc1F1ZXVlLmFwcGVuZChuZXcgTm9kZVVwZGF0ZVNldFRleHR1cmUobm9kZUlE
LCB0ZXh0dXJlLCBzb3VyY2VSZWN0LCB0YXJnZXRSZWN0KSk7CisgICAgaXRlbS0+dXBkYXRlKCk7
Cit9CisKK3ZvaWQgU0dBZ2VudDo6dXBkYXRlUGFpbnROb2RlKFFTR05vZGUqIGl0ZW1Ob2RlKQor
eworICAgIHdoaWxlICghbm9kZVVwZGF0ZXNRdWV1ZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgUVNj
b3BlZFBvaW50ZXI8Tm9kZVVwZGF0ZT4gbm9kZVVwZGF0ZShub2RlVXBkYXRlc1F1ZXVlLnRha2VG
aXJzdCgpKTsKKyAgICAgICAgc3dpdGNoIChub2RlVXBkYXRlLT50eXBlKSB7CisgICAgICAgIGNh
c2UgTm9kZVVwZGF0ZTo6Q3JlYXRlVGlsZTogeworICAgICAgICAgICAgTm9kZVVwZGF0ZUNyZWF0
ZVRpbGUqIGNyZWF0ZVRpbGVVcGRhdGUgPSBzdGF0aWNfY2FzdDxOb2RlVXBkYXRlQ3JlYXRlVGls
ZSo+KG5vZGVVcGRhdGUuZGF0YSgpKTsKKyAgICAgICAgICAgIFNHVGlsZU5vZGUqIHRpbGVOb2Rl
ICA9IG5ldyBTR1RpbGVOb2RlOworICAgICAgICAgICAgUVNHTm9kZSogcGFyZW50Tm9kZSA9IGNy
ZWF0ZVRpbGVVcGRhdGUtPnBhcmVudE5vZGVJRCA/IG5vZGVzLnZhbHVlKGNyZWF0ZVRpbGVVcGRh
dGUtPnBhcmVudE5vZGVJRCkgOiBpdGVtTm9kZTsKKyAgICAgICAgICAgIHBhcmVudE5vZGUtPnBy
ZXBlbmRDaGlsZE5vZGUodGlsZU5vZGUpOworICAgICAgICAgICAgbm9kZXMuaW5zZXJ0KGNyZWF0
ZVRpbGVVcGRhdGUtPm5vZGVJRCwgdGlsZU5vZGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICAgICAgY2FzZSBOb2RlVXBkYXRlOjpDcmVhdGVTY2FsZTogeworICAgICAgICAg
ICAgTm9kZVVwZGF0ZUNyZWF0ZVNjYWxlKiBjcmVhdGVTY2FsZVVwZGF0ZSA9IHN0YXRpY19jYXN0
PE5vZGVVcGRhdGVDcmVhdGVTY2FsZSo+KG5vZGVVcGRhdGUuZGF0YSgpKTsKKyAgICAgICAgICAg
IFFTR1RyYW5zZm9ybU5vZGUqIHNjYWxlTm9kZSAgPSBuZXcgUVNHVHJhbnNmb3JtTm9kZTsKKyAg
ICAgICAgICAgIFFNYXRyaXg0eDQgc2NhbGVNYXRyaXg7CisgICAgICAgICAgICAvLyBVc2Ugc2Nh
bGUoZmxvYXQsZmxvYXQpIHRvIHByZXZlbnQgc2NhbGluZyB0aGUgWiBjb21wb25lbnQuCisgICAg
ICAgICAgICBzY2FsZU1hdHJpeC5zY2FsZShjcmVhdGVTY2FsZVVwZGF0ZS0+c2NhbGUsIGNyZWF0
ZVNjYWxlVXBkYXRlLT5zY2FsZSk7CisgICAgICAgICAgICBzY2FsZU5vZGUtPnNldE1hdHJpeChz
Y2FsZU1hdHJpeCk7CisgICAgICAgICAgICBRU0dOb2RlKiBwYXJlbnROb2RlID0gY3JlYXRlU2Nh
bGVVcGRhdGUtPnBhcmVudE5vZGVJRCA/IG5vZGVzLnZhbHVlKGNyZWF0ZVNjYWxlVXBkYXRlLT5w
YXJlbnROb2RlSUQpIDogaXRlbU5vZGU7CisgICAgICAgICAgICAvLyBQcmVwZW5kIGluc3RlYWQg
b2YgYXBwZW5kIHRvIHBhaW50IHRoZSBuZXcsIGluY29tcGxldGUsIHRpbGVzZXQgYmVmb3JlL2Jl
aGluZCB0aGUgcHJldmlvdXMgb25lLgorICAgICAgICAgICAgcGFyZW50Tm9kZS0+cHJlcGVuZENo
aWxkTm9kZShzY2FsZU5vZGUpOworICAgICAgICAgICAgbm9kZXMuaW5zZXJ0KGNyZWF0ZVNjYWxl
VXBkYXRlLT5ub2RlSUQsIHNjYWxlTm9kZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgICAgICBjYXNlIE5vZGVVcGRhdGU6OlJlbW92ZTogeworICAgICAgICAgICAgTm9kZVVw
ZGF0ZVJlbW92ZSogcmVtb3ZlVXBkYXRlID0gc3RhdGljX2Nhc3Q8Tm9kZVVwZGF0ZVJlbW92ZSo+
KG5vZGVVcGRhdGUuZGF0YSgpKTsKKyAgICAgICAgICAgIGRlbGV0ZSBub2Rlcy50YWtlKHJlbW92
ZVVwZGF0ZS0+bm9kZUlEKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAg
IGNhc2UgTm9kZVVwZGF0ZTo6U2V0VGV4dHVyZTogeworICAgICAgICAgICAgTm9kZVVwZGF0ZVNl
dFRleHR1cmUqIHNldFRleHR1cmVVcGRhdGUgPSBzdGF0aWNfY2FzdDxOb2RlVXBkYXRlU2V0VGV4
dHVyZSo+KG5vZGVVcGRhdGUuZGF0YSgpKTsKKyAgICAgICAgICAgIFNHVGlsZU5vZGUqIHRpbGVO
b2RlID0gc3RhdGljX2Nhc3Q8U0dUaWxlTm9kZSo+KG5vZGVzLnZhbHVlKHNldFRleHR1cmVVcGRh
dGUtPm5vZGVJRCkpOworICAgICAgICAgICAgaWYgKHRpbGVOb2RlKSB7CisgICAgICAgICAgICAg
ICAgUVNHVGV4dHVyZSogdGV4dHVyZSA9IGl0ZW0tPnNjZW5lR3JhcGhFbmdpbmUoKS0+Y3JlYXRl
VGV4dHVyZUZyb21JbWFnZShzZXRUZXh0dXJlVXBkYXRlLT50ZXh0dXJlKTsKKyAgICAgICAgICAg
ICAgICB0aWxlTm9kZS0+c2V0VGV4dHVyZSh0ZXh0dXJlKTsKKyAgICAgICAgICAgICAgICB0aWxl
Tm9kZS0+c2V0VGFyZ2V0UmVjdChzZXRUZXh0dXJlVXBkYXRlLT50YXJnZXRSZWN0KTsKKyAgICAg
ICAgICAgICAgICB0aWxlTm9kZS0+c2V0U291cmNlUmVjdCh0ZXh0dXJlLT5jb252ZXJ0VG9Ob3Jt
YWxpemVkU291cmNlUmVjdChzZXRUZXh0dXJlVXBkYXRlLT5zb3VyY2VSZWN0KSk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgQVNTRVJUKGZhbHNlKTsKKyAgICAgICAgfQorICAgIH0KK30KKworfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1NHQWdlbnQuaCBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9xdC9TR0FnZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmE5NDQ3ZTEzMWMwOWIy
NGYyZWRhYTJjMjMyMzk0MjYwMmU2NjExZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9xdC9TR0FnZW50LmgKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWll
cykKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBw
cm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdp
dGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgor
ICovCisKKyNpZm5kZWYgU0dBZ2VudF9oCisjZGVmaW5lIFNHQWdlbnRfaAorCisjaW5jbHVkZSA8
UUhhc2g+CisjaW5jbHVkZSA8UUxpbmtlZExpc3Q+CisKK2NsYXNzIFFJbWFnZTsKK2NsYXNzIFFS
ZWN0OworY2xhc3MgUVNHSXRlbTsKK2NsYXNzIFFTR05vZGU7CitjbGFzcyBRU2l6ZTsKKworbmFt
ZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIE5vZGVVcGRhdGU7CitjbGFzcyBQYWdlTm9kZTsKKwor
Ly8gVGFrZXMgY2FyZSBvZiB0YWtpbmcgdXBkYXRlIHJlcXVlc3RzIHRoZW4gZnVsZmlsbGluZyB0
aGVtIGFzeW5jaHJvbm91c2x5IG9uIHRoZSBzY2VuZSBncmFwaCB0aHJlYWQuCitjbGFzcyBTR0Fn
ZW50IHsKK3B1YmxpYzoKKyAgICBTR0FnZW50KFFTR0l0ZW0qKTsKKyAgICB+U0dBZ2VudCgpOwor
CisgICAgaW50IGNyZWF0ZVRpbGVOb2RlKGludCBwYXJlbnROb2RlSUQpOworICAgIGludCBjcmVh
dGVTY2FsZU5vZGUoaW50IHBhcmVudE5vZGVJRCwgZmxvYXQgc2NhbGUpOworICAgIHZvaWQgcmVt
b3ZlTm9kZShpbnQgbm9kZUlEKTsKKyAgICB2b2lkIHNldE5vZGVUZXh0dXJlKGludCBub2RlSUQs
IGNvbnN0IFFJbWFnZSYgdGV4dHVyZSwgY29uc3QgUVJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IFFS
ZWN0JiB0YXJnZXRSZWN0KTsKKworICAgIC8vIENhbGxlZCBieSB0aGUgUVNHSXRlbS4KKyAgICB2
b2lkIHVwZGF0ZVBhaW50Tm9kZShRU0dOb2RlKiBpdGVtTm9kZSk7CisKK3ByaXZhdGU6CisgICAg
UVNHSXRlbSogaXRlbTsKKyAgICBRTGlua2VkTGlzdDxOb2RlVXBkYXRlKj4gbm9kZVVwZGF0ZXNR
dWV1ZTsKKyAgICBRSGFzaDxpbnQsIFFTR05vZGUqPiBub2RlczsKKyAgICBpbnQgbmV4dE5vZGVJ
RDsKK307CisKK30KKworI2VuZGlmIC8qIFNHQWdlbnRfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL3F0L1NHVGlsZU5vZGUuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL3F0L1NHVGlsZU5vZGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ3N2I4YzMzN2EzZjljZWVkOTUx
ZmNmNjE1Yjg1N2RlZjNmMDZlYjMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvcXQvU0dUaWxlTm9kZS5jcHAKQEAgLTAsMCArMSw2MiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMCwgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlh
cnkoLWllcykKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
VGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFs
b25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTR1RpbGVOb2RlLmgi
CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitTR1RpbGVOb2RlOjpTR1RpbGVOb2RlKCkKKyAgICA6
IG1fZ2VvbWV0cnkoUVNHR2VvbWV0cnk6OmRlZmF1bHRBdHRyaWJ1dGVzX1RleHR1cmVkUG9pbnQy
RCgpLCA0KQoreworICAgIHNldEdlb21ldHJ5KCZtX2dlb21ldHJ5KTsKKyAgICBzZXRNYXRlcmlh
bCgmbV9tYXRlcmlhbCk7CisgICAgc2V0T3BhcXVlTWF0ZXJpYWwoJm1fb3BhcXVlTWF0ZXJpYWwp
OworfQorCit2b2lkIFNHVGlsZU5vZGU6OnNldFRhcmdldFJlY3QoY29uc3QgUVJlY3RGJiByKQor
eworICAgIGlmIChtX3RhcmdldFJlY3QgPT0gcikKKyAgICAgICAgcmV0dXJuOworICAgIG1fdGFy
Z2V0UmVjdCA9IHI7CisgICAgUVNHR2VvbWV0cnk6OnVwZGF0ZVRleHR1cmVkUmVjdEdlb21ldHJ5
KCZtX2dlb21ldHJ5LCBtX3RhcmdldFJlY3QsIG1fc291cmNlUmVjdCk7CisgICAgbWFya0RpcnR5
KERpcnR5R2VvbWV0cnkpOworfQorCit2b2lkIFNHVGlsZU5vZGU6OnNldFNvdXJjZVJlY3QoY29u
c3QgUVJlY3RGJiByKQoreworICAgIGlmIChtX3NvdXJjZVJlY3QgPT0gcikKKyAgICAgICAgcmV0
dXJuOworICAgIG1fc291cmNlUmVjdCA9IHI7CisgICAgUVNHR2VvbWV0cnk6OnVwZGF0ZVRleHR1
cmVkUmVjdEdlb21ldHJ5KCZtX2dlb21ldHJ5LCBtX3RhcmdldFJlY3QsIG1fc291cmNlUmVjdCk7
CisgICAgbWFya0RpcnR5KERpcnR5R2VvbWV0cnkpOworfQorCit2b2lkIFNHVGlsZU5vZGU6OnNl
dFRleHR1cmUoUVNHVGV4dHVyZSogdGV4dHVyZSkKK3sKKyAgICBpZiAobV9tYXRlcmlhbC50ZXh0
dXJlKCkgPT0gdGV4dHVyZSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fbWF0ZXJpYWwuc2V0VGV4
dHVyZSh0ZXh0dXJlKTsKKyAgICBtX29wYXF1ZU1hdGVyaWFsLnNldFRleHR1cmUodGV4dHVyZSk7
CisgICAgbV90ZXh0dXJlLnJlc2V0KHRleHR1cmUpOworICAgIG1hcmtEaXJ0eShEaXJ0eU1hdGVy
aWFsKTsKK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1NH
VGlsZU5vZGUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9TR1RpbGVOb2RlLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uMTlhYjY1YmNhYzc4NGNlZjNmNjQ1NjliNTgxOThhYTUxZTc2Y2M4NwotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9TR1RpbGVOb2RlLmgKQEAg
LTAsMCArMSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlv
biBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgU0dUaWxlTm9kZV9oCisj
ZGVmaW5lIFNHVGlsZU5vZGVfaAorCisjaW5jbHVkZSA8UVNHR2VvbWV0cnlOb2RlPgorI2luY2x1
ZGUgPFFTR09wYXF1ZVRleHR1cmVNYXRlcmlhbD4KKyNpbmNsdWRlIDxRU0dUZXh0dXJlTWF0ZXJp
YWw+CisKK1FUX0JFR0lOX05BTUVTUEFDRQorY2xhc3MgUVNHVGV4dHVyZTsKK1FUX0VORF9OQU1F
U1BBQ0UKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFNHVGlsZU5vZGUgOiBwdWJsaWMg
UVNHR2VvbWV0cnlOb2RlIHsKK3B1YmxpYzoKKyAgICBTR1RpbGVOb2RlKCk7CisKKyAgICB2b2lk
IHNldFRhcmdldFJlY3QoY29uc3QgUVJlY3RGJik7CisgICAgdm9pZCBzZXRTb3VyY2VSZWN0KGNv
bnN0IFFSZWN0RiYpOworICAgIC8vIFRoaXMgdGFrZXMgb3duZXJzaGlwIG9mIHRoZSB0ZXh0dXJl
LgorICAgIHZvaWQgc2V0VGV4dHVyZShRU0dUZXh0dXJlKik7CisKK3ByaXZhdGU6CisgICAgUVNH
R2VvbWV0cnkgbV9nZW9tZXRyeTsKKyAgICBRU0dPcGFxdWVUZXh0dXJlTWF0ZXJpYWwgbV9vcGFx
dWVNYXRlcmlhbDsKKyAgICBRU0dUZXh0dXJlTWF0ZXJpYWwgbV9tYXRlcmlhbDsKKyAgICBRU2Nv
cGVkUG9pbnRlcjxRU0dUZXh0dXJlPiBtX3RleHR1cmU7CisKKyAgICBRUmVjdEYgbV90YXJnZXRS
ZWN0OworICAgIFFSZWN0RiBtX3NvdXJjZVJlY3Q7Cit9OworCit9CisKKyNlbmRpZiAvKiBTR1Rp
bGVOb2RlX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9UaWxl
ZERyYXdpbmdBcmVhUHJveHlRdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvVGls
ZWREcmF3aW5nQXJlYVByb3h5UXQuY3BwCmluZGV4IDA5MjMyMjM2NGQxMWE0M2E1NjIyNmNlMzgz
MjQ4Y2I1NDcxMWQxYWMuLjMwYWVhNmEzOTA3NjJkMzEwN2U0YzI4OTk3MDgxOWMxNzA3ODVmNTAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9UaWxlZERyYXdpbmdBcmVh
UHJveHlRdC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1RpbGVkRHJhd2lu
Z0FyZWFQcm94eVF0LmNwcApAQCAtMzksMTIgKzM5LDcgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAK
IHZvaWQgVGlsZWREcmF3aW5nQXJlYVByb3h5Ojp1cGRhdGVXZWJWaWV3KGNvbnN0IFZlY3RvcjxJ
bnRSZWN0PiYgcGFpbnRlZEFyZWEpCiB7Ci0gICAgaWYgKCFwYWdlKCkgfHwgIXBhZ2UoKS0+aXNW
YWxpZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICB1bnNpZ25lZCBzaXplID0gcGFpbnRlZEFy
ZWEuc2l6ZSgpOwotICAgIGZvciAodW5zaWduZWQgbiA9IDA7IG4gPCBzaXplOyArK24pCi0gICAg
ICAgIHN0YXRpY19jYXN0PFZpZXdJbnRlcmZhY2UqPihtX3dlYlZpZXcpLT5zZXRWaWV3TmVlZHNE
aXNwbGF5KFFSZWN0KHBhaW50ZWRBcmVhW25dKSk7CisgICAgLy8gU0cgdXBkYXRlcyBhcmUgdHJp
Z2dlcmVkIHRocm91Z2ggU0dBZ2VudC4KIH0KIAogV2ViUGFnZVByb3h5KiBUaWxlZERyYXdpbmdB
cmVhUHJveHk6OnBhZ2UoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0
L1RpbGVkRHJhd2luZ0FyZWFUaWxlUXQuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0
L1RpbGVkRHJhd2luZ0FyZWFUaWxlUXQuY3BwCmluZGV4IDI1OWRmZDFiZTRkMjU2MDcwY2NmMTQ4
MTFjN2MwNzE1ZWZkNzQ0MWEuLjNiYWViZjVhZGQwZWYxMjJmMzVhNDNhZmUwYWViYzhkZTU0NWE5
M2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9UaWxlZERyYXdpbmdB
cmVhVGlsZVF0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvVGlsZWREcmF3
aW5nQXJlYVRpbGVRdC5jcHAKQEAgLTI3LDggKzI3LDEwIEBACiAjaW5jbHVkZSAiVGlsZWREcmF3
aW5nQXJlYVRpbGUuaCIKIAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUg
IlNHQWdlbnQuaCIKICNpbmNsdWRlICJTaGFyZWFibGVCaXRtYXAuaCIKICNpbmNsdWRlICJUaWxl
ZERyYXdpbmdBcmVhUHJveHkuaCIKKyNpbmNsdWRlICJUb3VjaFZpZXdJbnRlcmZhY2UuaCIKICNp
bmNsdWRlICJVcGRhdGVJbmZvLmgiCiAjaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCiAjaW5jbHVk
ZSAiV2ViUHJvY2Vzc1Byb3h5LmgiCkBAIC00MCwxMyArNDIsMTUgQEAgdXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1UaWxlZERyYXdpbmdBcmVhVGlsZTo6
VGlsZWREcmF3aW5nQXJlYVRpbGUoVGlsZWREcmF3aW5nQXJlYVByb3h5KiBwcm94eSwgY29uc3Qg
Q29vcmRpbmF0ZSYgdGlsZUNvb3JkaW5hdGUpCitUaWxlZERyYXdpbmdBcmVhVGlsZTo6VGlsZWRE
cmF3aW5nQXJlYVRpbGUoVGlsZWREcmF3aW5nQXJlYVByb3h5KiBwcm94eSwgUGxhdGZvcm1XZWJW
aWV3KiB3ZWJWaWV3LCBjb25zdCBDb29yZGluYXRlJiB0aWxlQ29vcmRpbmF0ZSkKICAgICA6IG1f
cHJveHkocHJveHkpCiAgICAgLCBtX2Nvb3JkaW5hdGUodGlsZUNvb3JkaW5hdGUpCiAgICAgLCBt
X3JlY3QocHJveHktPnRpbGVSZWN0Rm9yQ29vcmRpbmF0ZSh0aWxlQ29vcmRpbmF0ZSkpCiAgICAg
LCBtX2hhc1VwZGF0ZVBlbmRpbmcoZmFsc2UpCisgICAgLCBtX3NnQWdlbnQod2ViVmlldy0+c2Nl
bmVHcmFwaEFnZW50KCkpCisgICAgLCBtX25vZGVJRCgwKQorICAgICwgbV9wYXJlbnROb2RlSUQo
KQogICAgICwgbV9pc0JhY2tCdWZmZXJWYWxpZChmYWxzZSkKLSAgICAsIG1faXNGcm9udEJ1ZmZl
clZhbGlkKGZhbHNlKQogICAgICwgbV9kaXJ0eVJlZ2lvbihtX3JlY3QpCiB7CiAgICAgc3RhdGlj
IGludCBpZCA9IDA7CkBAIC02Myw2ICs2Nyw4IEBAIFRpbGVkRHJhd2luZ0FyZWFUaWxlOjp+VGls
ZWREcmF3aW5nQXJlYVRpbGUoKQogICAgIHFEZWJ1ZygpIDw8ICJkZWxldGluZyB0aWxlIGlkPSIg
PDwgbV9JRDsKICNlbmRpZgogICAgIGRpc2FibGVVcGRhdGVzKCk7CisgICAgaWYgKG1fbm9kZUlE
KQorICAgICAgICBtX3NnQWdlbnQtPnJlbW92ZU5vZGUobV9ub2RlSUQpOwogfQogCiBib29sIFRp
bGVkRHJhd2luZ0FyZWFUaWxlOjppc0RpcnR5KCkgY29uc3QKQEAgLTcyLDcgKzc4LDcgQEAgYm9v
bCBUaWxlZERyYXdpbmdBcmVhVGlsZTo6aXNEaXJ0eSgpIGNvbnN0CiAKIGJvb2wgVGlsZWREcmF3
aW5nQXJlYVRpbGU6OmlzUmVhZHlUb1BhaW50KCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9pc0Zy
b250QnVmZmVyVmFsaWQ7CisgICAgcmV0dXJuIG1fbm9kZUlEOwogfQogCiBib29sIFRpbGVkRHJh
d2luZ0FyZWFUaWxlOjpoYXNSZWFkeUJhY2tCdWZmZXIoKSBjb25zdApAQCAtMTAxLDI2ICsxMDcs
MTIgQEAgdm9pZCBUaWxlZERyYXdpbmdBcmVhVGlsZTo6cmVzaXplKGNvbnN0IEludFNpemUmIG5l
d1NpemUpCiAKIHZvaWQgVGlsZWREcmF3aW5nQXJlYVRpbGU6OnN3YXBCYWNrQnVmZmVyVG9Gcm9u
dCgpCiB7Ci0gICAgQVNTRVJUKCFtX2JhY2tCdWZmZXIuaXNOdWxsKCkpOwotCi0gICAgY29uc3Qg
UVBpeG1hcCBzd2FwID0gbV9idWZmZXI7Ci0gICAgbV9idWZmZXIgPSBtX2JhY2tCdWZmZXI7Ci0g
ICAgbV9pc0Zyb250QnVmZmVyVmFsaWQgPSBtX2lzQmFja0J1ZmZlclZhbGlkOwotICAgIG1faXNC
YWNrQnVmZmVyVmFsaWQgPSBmYWxzZTsKLSAgICBtX2JhY2tCdWZmZXIgPSBzd2FwOworICAgIC8v
IEZJWE1FOiBJbXBsZW1lbnQgb25jZSB3ZSBjYW4gdGlnaHQgaW52YWxpZGF0ZWQgdGlsZSB1cGRh
dGVzIHRvZ2V0aGVyLgogfQogCiB2b2lkIFRpbGVkRHJhd2luZ0FyZWFUaWxlOjpwYWludChHcmFw
aGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7Ci0gICAgQVNTRVJU
KCFtX2J1ZmZlci5pc051bGwoKSk7Ci0KLSAgICBJbnRSZWN0IHRhcmdldCA9IGludGVyc2VjdGlv
bihyZWN0LCBtX3JlY3QpOwotICAgIEludFJlY3Qgc291cmNlKCh0YXJnZXQueCgpIC0gbV9yZWN0
LngoKSksCi0gICAgICAgICAgICAgICAgICAgKHRhcmdldC55KCkgLSBtX3JlY3QueSgpKSwKLSAg
ICAgICAgICAgICAgICAgICB0YXJnZXQud2lkdGgoKSwKLSAgICAgICAgICAgICAgICAgICB0YXJn
ZXQuaGVpZ2h0KCkpOwotCi0gICAgY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmRyYXdQaXht
YXAodGFyZ2V0LCBtX2J1ZmZlciwgc291cmNlKTsKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
IH0KIAogdm9pZCBUaWxlZERyYXdpbmdBcmVhVGlsZTo6aW5jb3Jwb3JhdGVVcGRhdGUoY29uc3Qg
VXBkYXRlSW5mbyYgdXBkYXRlSW5mbywgZmxvYXQpCkBAIC0xMzYsMTQgKzEyOCwyMSBAQCB2b2lk
IFRpbGVkRHJhd2luZ0FyZWFUaWxlOjppbmNvcnBvcmF0ZVVwZGF0ZShjb25zdCBVcGRhdGVJbmZv
JiB1cGRhdGVJbmZvLCBmbG9hdAogICAgIGNvbnN0IFFTaXplIHRpbGVTaXplID0gbV9wcm94eS0+
dGlsZVNpemUoKTsKIAogICAgIGlmIChtX2JhY2tCdWZmZXIuc2l6ZSgpICE9IHRpbGVTaXplKSB7
Ci0gICAgICAgIG1fYmFja0J1ZmZlciA9IFFQaXhtYXAodGlsZVNpemUpOworICAgICAgICBtX2Jh
Y2tCdWZmZXIgPSBRSW1hZ2UodGlsZVNpemUsIGltYWdlLmZvcm1hdCgpKTsKICAgICAgICAgbV9i
YWNrQnVmZmVyLmZpbGwoUXQ6OnRyYW5zcGFyZW50KTsKICAgICB9CiAKLSAgICBRUGFpbnRlciBw
YWludGVyKCZtX2JhY2tCdWZmZXIpOwotICAgIHBhaW50ZXIuZHJhd1BpeG1hcCgwLCAwLCBtX2J1
ZmZlcik7Ci0gICAgSW50U2l6ZSBkcmF3UG9pbnQgPSB1cGRhdGVDaHVua1JlY3QubG9jYXRpb24o
KSAtIG1fcmVjdC5sb2NhdGlvbigpOwotICAgIHBhaW50ZXIuZHJhd0ltYWdlKFFQb2ludChkcmF3
UG9pbnQud2lkdGgoKSwgZHJhd1BvaW50LmhlaWdodCgpKSwgaW1hZ2UpOworICAgIHsKKyAgICAg
ICAgUVBhaW50ZXIgcGFpbnRlcigmbV9iYWNrQnVmZmVyKTsKKyAgICAgICAgSW50U2l6ZSBkcmF3
UG9pbnQgPSB1cGRhdGVDaHVua1JlY3QubG9jYXRpb24oKSAtIG1fcmVjdC5sb2NhdGlvbigpOwor
ICAgICAgICBwYWludGVyLmRyYXdJbWFnZShRUG9pbnQoZHJhd1BvaW50LndpZHRoKCksIGRyYXdQ
b2ludC5oZWlnaHQoKSksIGltYWdlKTsKKyAgICB9CisKKyAgICBpZiAoIW1fbm9kZUlEKQorICAg
ICAgICBtX25vZGVJRCA9IG1fc2dBZ2VudC0+Y3JlYXRlVGlsZU5vZGUobV9wYXJlbnROb2RlSUQp
OworICAgIEFTU0VSVChtX25vZGVJRCk7CisgICAgUVJlY3Qgc291cmNlUmVjdCgwLCAwLCBtX3Jl
Y3Qud2lkdGgoKSwgbV9yZWN0LmhlaWdodCgpKTsKKyAgICBtX3NnQWdlbnQtPnNldE5vZGVUZXh0
dXJlKG1fbm9kZUlELCBtX2JhY2tCdWZmZXIsIHNvdXJjZVJlY3QsIG1fcmVjdCk7CiB9CiAKIHZv
aWQgVGlsZWREcmF3aW5nQXJlYVRpbGU6OmRpc2FibGVVcGRhdGVzKCkKQEAgLTE1NywxMSArMTU2
LDE3IEBAIHZvaWQgVGlsZWREcmF3aW5nQXJlYVRpbGU6OmRpc2FibGVVcGRhdGVzKCkKICAgICB9
CiAKICAgICBtX3Byb3h5LT51bnJlZ2lzdGVyVGlsZShtX0lEKTsKLSAgICBtX2JhY2tCdWZmZXIg
PSBRUGl4bWFwKCk7CisgICAgbV9iYWNrQnVmZmVyID0gUUltYWdlKCk7CiAgICAgbV9pc0JhY2tC
dWZmZXJWYWxpZCA9IGZhbHNlOwogICAgIG1fcHJveHkgPSAwOwogfQogCit2b2lkIFRpbGVkRHJh
d2luZ0FyZWFUaWxlOjpzZXRQYXJlbnROb2RlSUQoaW50IG5vZGVJRCkKK3sKKyAgICBBU1NFUlQo
IW1fbm9kZUlEKTsKKyAgICBtX3BhcmVudE5vZGVJRCA9IG5vZGVJRDsKK30KKwogdm9pZCBUaWxl
ZERyYXdpbmdBcmVhVGlsZTo6dXBkYXRlQmFja0J1ZmZlcigpCiB7CiAgICAgQVNTRVJUKG1fcHJv
eHkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1RvdWNoVmlld0lu
dGVyZmFjZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvVG91Y2hWaWV3SW50ZXJm
YWNlLmNwcAppbmRleCBmYTU3OTY0ZGIzYWE0Yjc4YWFjNWJiMDM3NDkxMmM5ODk0M2M3ZDU0Li4y
MjBjZTlkYjdhZjE2MTMzNDczNDhkNjU4ZWNmNWY5Zjc5MDU5Yjg0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvVG91Y2hWaWV3SW50ZXJmYWNlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvVG91Y2hWaWV3SW50ZXJmYWNlLmNwcApAQCAtOTEsOSAr
OTEsMTMgQEAgdm9pZCBUb3VjaFZpZXdJbnRlcmZhY2U6OnBpbmNoR2VzdHVyZUVuZGVkKCkKICAg
ICBtX3ZpZXdwb3J0Vmlldy0+ZC0+dmlld3BvcnRSZWN0VXBkYXRlZCgpOwogfQogCi12b2lkIFRv
dWNoVmlld0ludGVyZmFjZTo6c2V0Vmlld05lZWRzRGlzcGxheShjb25zdCBRUmVjdCYgaW52YWxp
ZGF0ZWRSZWN0KQorU0dBZ2VudCogVG91Y2hWaWV3SW50ZXJmYWNlOjpzY2VuZUdyYXBoQWdlbnQo
KSBjb25zdAoreworICAgIHJldHVybiBtX3BhZ2VWaWV3LT5kLT5zZ0FnZW50LmRhdGEoKTsKK30K
Kwordm9pZCBUb3VjaFZpZXdJbnRlcmZhY2U6OnNldFZpZXdOZWVkc0Rpc3BsYXkoY29uc3QgUVJl
Y3QmKQogewotICAgIG1fcGFnZVZpZXctPnVwZGF0ZShpbnZhbGlkYXRlZFJlY3QpOwogfQogCiBR
U2l6ZSBUb3VjaFZpZXdJbnRlcmZhY2U6OmRyYXdpbmdBcmVhU2l6ZSgpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvVG91Y2hWaWV3SW50ZXJmYWNlLmggYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvcXQvVG91Y2hWaWV3SW50ZXJmYWNlLmgKaW5kZXggOTBjZTdlMmNi
NzVjMDAyN2Q2OWExODU0NDk0NzBjM2UyYjk5YzJkYS4uNjNjOTdjOWU5NzM3NmMxOGI1YTg1MTY0
YzUwNWM0MzI5MDgwNmQ1YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0
L1RvdWNoVmlld0ludGVyZmFjZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9U
b3VjaFZpZXdJbnRlcmZhY2UuaApAQCAtMjksNiArMjksOCBAQCBjbGFzcyBRVG91Y2hXZWJWaWV3
OwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAorY2xhc3MgU0dBZ2VudDsKKwogY2xhc3MgVG91Y2hW
aWV3SW50ZXJmYWNlIDogcHVibGljIFZpZXdJbnRlcmZhY2UKIHsKIHB1YmxpYzoKQEAgLTQzLDYg
KzQ1LDggQEAgcHVibGljOgogICAgIHZvaWQgcGluY2hHZXN0dXJlUmVxdWVzdFVwZGF0ZShjb25z
dCBRUG9pbnRGJiwgcXJlYWwpOwogICAgIHZvaWQgcGluY2hHZXN0dXJlRW5kZWQoKTsKIAorICAg
IFNHQWdlbnQqIHNjZW5lR3JhcGhBZ2VudCgpIGNvbnN0OworCiBwcml2YXRlOgogICAgIC8qIElt
cGxlbWVudGF0aW9uIG9mIFZpZXdJbnRlcmZhY2UgKi8KICAgICB2aXJ0dWFsIHZvaWQgc2V0Vmll
d05lZWRzRGlzcGxheShjb25zdCBRUmVjdCYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
V2ViS2l0Mi5wcm8gYi9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnBybwppbmRleCA2YjM4OWI3Yzcx
ZTE5NTg5YjFmNzQxZjhjMDE2OTk4M2U3OGYwYTYwLi5iNzg2Nzg1MGQ5YTJjOWQxOTNhMzlkMWYw
NGYxMGFiOGRmMmM1N2VhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnBybwor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnBybwpAQCAtMjUwLDYgKzI1MCw4IEBAIEhFQURF
UlMgKz0gXAogICAgIFVJUHJvY2Vzcy9xdC9xd2toaXN0b3J5X3AuaCBcCiAgICAgVUlQcm9jZXNz
L3F0L3F3a3ByZWZlcmVuY2VzLmggXAogICAgIFVJUHJvY2Vzcy9xdC9xd2twcmVmZXJlbmNlc19w
LmggXAorICAgIFVJUHJvY2Vzcy9xdC9TR0FnZW50LmggXAorICAgIFVJUHJvY2Vzcy9xdC9TR1Rp
bGVOb2RlLmggXAogICAgIFVJUHJvY2Vzcy9xdC9WaWV3SW50ZXJmYWNlLmggXAogICAgIFVJUHJv
Y2Vzcy9xdC9XZWJVbmRvQ29tbWFuZFF0LmggXAogICAgIFVJUHJvY2Vzcy9xdC9XZWJDb250ZXh0
TWVudVByb3h5UXQuaCBcCkBAIC00NzgsNiArNDgwLDggQEAgU09VUkNFUyArPSBcCiAgICAgVUlQ
cm9jZXNzL3F0L3F3a2NvbnRleHQuY3BwIFwKICAgICBVSVByb2Nlc3MvcXQvcXdraGlzdG9yeS5j
cHAgXAogICAgIFVJUHJvY2Vzcy9xdC9xd2twcmVmZXJlbmNlcy5jcHAgXAorICAgIFVJUHJvY2Vz
cy9xdC9TR0FnZW50LmNwcCBcCisgICAgVUlQcm9jZXNzL3F0L1NHVGlsZU5vZGUuY3BwIFwKICAg
ICBVSVByb2Nlc3MvcXQvVGlsZWREcmF3aW5nQXJlYVByb3h5UXQuY3BwIFwKICAgICBVSVByb2Nl
c3MvcXQvVGlsZWREcmF3aW5nQXJlYVRpbGVRdC5jcHAgXAogICAgIFVJUHJvY2Vzcy9xdC9UZXh0
Q2hlY2tlclF0LmNwcCBcCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>102776</attachid>
            <date>2011-08-03 06:26:19 -0700</date>
            <delta_ts>2011-08-04 06:03:26 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-65528-20110803152622.patch</filename>
            <type>text/plain</type>
            <size>34227</size>
            <attacher name="Jocelyn Turcotte">jturcotte</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTIyMDYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCA0ZGUzZjIyMjdkMmIzYjFk
N2JjNzFjYzZjNDk5MDk1ZDg2N2UwNjc4Li44OTUyYzVlNWJkYTYxZGRiNzUwODk1ZDExMzQyMTAz
ZDViYmI0NDRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjMgQEAKKzIwMTEtMDgtMDIgIEpvY2Vs
eW4gVHVyY290dGUgIDxqb2NlbHluLnR1cmNvdHRlQG5va2lhLmNvbT4KKworICAgICAgICBbUXRd
W1dLMl0gQ3JlYXRlIHNjZW5lIGdyYXBoIG5vZGVzIGZvciB0aWxlcyBpbiBRVG91Y2hXZWJWaWV3
IGluc3RlYWQgb2YgdXNpbmcgaW1wZXJhdGl2ZSBwYWludGluZy4KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY1NTI4CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ29udmVydHMgUVRvdWNoV2ViUGFnZSBmcm9t
IFFTR1BhaW50ZWRJdGVtIHRvIGEgc3RyYWlnaHQgUVNHSXRlbS4KKyAgICAgICAgLSBBIFNHVGls
ZU5vZGUgaXMgY3JlYXRlZCBhbmQgYWRkZWQgdG8gdGhlIHNjZW5lIGdyYXBoIGZvciBlYWNoIHRp
bGUsCisgICAgICAgICAgcG9zaXRpb25pbmcgdGhlbSByZWxhdGl2ZWx5IHRvIHRoZSBwYWdlLgor
ICAgICAgICAgIEl0J3MgYmFzaWNhbGx5IGEgUVNHU2ltcGxlVGV4dHVyZU5vZGUgd2l0aCBzdXBw
b3J0IGZvciBzcGVjaWZ5aW5nIGEKKyAgICAgICAgICBzb3VyY2UgcmVjdCBwbHVzIGZvciBvd25p
bmcgdGhlIFFTR1RleHR1cmUgZm9yIHByb3BlciBkZXN0cnVjdGlvbiBvbgorICAgICAgICAgIHNo
dXRkb3duIGJ5IHRoZSByZW5kZXJpbmcgdGhyZWFkLgorICAgICAgICAtIFNjYWxlIG5vZGVzIGFy
ZSB1c2VkIGFzIHBhcmVudCBvZiB0aWxlIG5vZGVzIHRvIHJldmVydCB0aGUgc2NhbGluZyBzZXQg
b24gdGhlCisgICAgICAgICAgUVRvdWNoV2ViUGFnZSBhbmQgYWxsb3cgdXMgdG8ga2VlcCB1c2lu
ZyBpbnRlZ2VyIGNvb3JkaW5hdGVzLgorICAgICAgICAtIFRoZSBTR0FnZW50IGNsYXNzIGlzIGlu
dHJvZHVjZWQgdG8gY2Fycnkgc2NlbmUgZ3JhcGggdXBkYXRlIHJlcXVlc3QgdXAgdG8gdGhlCisg
ICAgICAgICAgdXBkYXRlUGFpbnROb2RlIGNhbGwgb2YgdGhlIGl0ZW0sIHdoaWNoIG1heSBiZSBv
biB0aGUgc2NlbmUgZ3JhcGggcmVuZGVyaW5nIHRocmVhZC4KKworICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvcXQvcXRvdWNod2VicGFnZS5jcHA6CisgICAgICAgIChRVG91Y2hXZWJQYWdlOjpRVG91
Y2hXZWJQYWdlKToKKyAgICAgICAgKFFUb3VjaFdlYlBhZ2U6OnVwZGF0ZVBhaW50Tm9kZSk6Cisg
ICAgICAgIERlbGVnYXRlIHNjZW5lIGdyYXBoIHVwZGF0ZXMgdG8gdGhlIFNHQWdlbnQgd2hpY2gg
cmVjZWl2ZWQgdXBkYXRlIHJlcXVlc3RzIGZyb20gdGhlIHRpbGVkIGRyYXdpbmcgYXJlYS4KKyAg
ICAgICAgKFFUb3VjaFdlYlBhZ2U6OmV2ZW50KToKKyAgICAgICAgKFFUb3VjaFdlYlBhZ2U6Omdl
b21ldHJ5Q2hhbmdlZCk6CisgICAgICAgIChRVG91Y2hXZWJQYWdlUHJpdmF0ZTo6UVRvdWNoV2Vi
UGFnZVByaXZhdGUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvcXQvcXRvdWNod2VicGFnZS5o
OgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvcXQvcXRvdWNod2VicGFnZV9wLmg6CisgICAgICAg
ICogVUlQcm9jZXNzL1RpbGVkRHJhd2luZ0FyZWFQcm94eS5jcHA6CisgICAgICAgIE1hbmFnZSB0
aGUgc2NhbGUgbm9kZSBpbiB0aGUgVGlsZVNldCwgaXQgd2lsbCBiZSB0aGUgcGFyZW50IG5vZGUg
b2YgVGlsZSBub2Rlcy4KKyAgICAgICAgKFdlYktpdDo6VGlsZWREcmF3aW5nQXJlYVRpbGVTZXQ6
OnNnTm9kZUlEKToKKyAgICAgICAgKFdlYktpdDo6VGlsZWREcmF3aW5nQXJlYVRpbGVTZXQ6OlRp
bGVkRHJhd2luZ0FyZWFUaWxlU2V0KToKKyAgICAgICAgKFdlYktpdDo6VGlsZWREcmF3aW5nQXJl
YVRpbGVTZXQ6On5UaWxlZERyYXdpbmdBcmVhVGlsZVNldCk6CisgICAgICAgIChXZWJLaXQ6OlRp
bGVkRHJhd2luZ0FyZWFQcm94eTo6VGlsZWREcmF3aW5nQXJlYVByb3h5KToKKyAgICAgICAgKFdl
YktpdDo6VGlsZWREcmF3aW5nQXJlYVByb3h5OjpzZXRDb250ZW50c1NjYWxlKToKKyAgICAgICAg
KFdlYktpdDo6VGlsZWREcmF3aW5nQXJlYVByb3h5OjpjcmVhdGVUaWxlcyk6CisgICAgICAgIChX
ZWJLaXQ6OlRpbGVkRHJhd2luZ0FyZWFQcm94eTo6cmVtb3ZlQWxsVGlsZXMpOgorICAgICAgICAq
IFVJUHJvY2Vzcy9UaWxlZERyYXdpbmdBcmVhVGlsZS5oOgorICAgICAgICAoV2ViS2l0OjpUaWxl
ZERyYXdpbmdBcmVhVGlsZTo6Y3JlYXRlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvcXQvU0dBZ2Vu
dC5jcHA6IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9xdC9TR0FnZW50Lmg6IEFkZGVkLgor
ICAgICAgICAqIFVJUHJvY2Vzcy9xdC9TR1RpbGVOb2RlLmNwcDogQWRkZWQuCisgICAgICAgICog
VUlQcm9jZXNzL3F0L1NHVGlsZU5vZGUuaDogQWRkZWQuCisgICAgICAgICogVUlQcm9jZXNzL3F0
L1RpbGVkRHJhd2luZ0FyZWFQcm94eVF0LmNwcDoKKyAgICAgICAgRGlzYWJsZSB0aGUgcGFpbnQg
Y2FsbCBhbmQgdXBkYXRlIHRoZSBzY2VuZSBncmFwaCBvbiBpbmNvcnBvcmF0ZVVwZGF0ZSB0aHJv
dWdoIHRoZSBTR0FnZW50LgorICAgICAgICAoV2ViS2l0OjpUaWxlZERyYXdpbmdBcmVhUHJveHk6
OnVwZGF0ZVdlYlZpZXcpOgorICAgICAgICAqIFVJUHJvY2Vzcy9xdC9UaWxlZERyYXdpbmdBcmVh
VGlsZVF0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6VGlsZWREcmF3aW5nQXJlYVRpbGU6OlRpbGVk
RHJhd2luZ0FyZWFUaWxlKToKKyAgICAgICAgKFdlYktpdDo6VGlsZWREcmF3aW5nQXJlYVRpbGU6
On5UaWxlZERyYXdpbmdBcmVhVGlsZSk6CisgICAgICAgIChXZWJLaXQ6OlRpbGVkRHJhd2luZ0Fy
ZWFUaWxlOjppc1JlYWR5VG9QYWludCk6CisgICAgICAgIChXZWJLaXQ6OlRpbGVkRHJhd2luZ0Fy
ZWFUaWxlOjpzd2FwQmFja0J1ZmZlclRvRnJvbnQpOgorICAgICAgICAoV2ViS2l0OjpUaWxlZERy
YXdpbmdBcmVhVGlsZTo6cGFpbnQpOgorICAgICAgICAoV2ViS2l0OjpUaWxlZERyYXdpbmdBcmVh
VGlsZTo6aW5jb3Jwb3JhdGVVcGRhdGUpOgorICAgICAgICAoV2ViS2l0OjpUaWxlZERyYXdpbmdB
cmVhVGlsZTo6ZGlzYWJsZVVwZGF0ZXMpOgorICAgICAgICAoV2ViS2l0OjpUaWxlZERyYXdpbmdB
cmVhVGlsZTo6c2V0UGFyZW50Tm9kZUlEKToKKyAgICAgICAgKiBVSVByb2Nlc3MvcXQvVG91Y2hW
aWV3SW50ZXJmYWNlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6VG91Y2hWaWV3SW50ZXJmYWNlOjpz
Y2VuZUdyYXBoQWdlbnQpOgorICAgICAgICAoV2ViS2l0OjpUb3VjaFZpZXdJbnRlcmZhY2U6OnNl
dFZpZXdOZWVkc0Rpc3BsYXkpOgorICAgICAgICAqIFVJUHJvY2Vzcy9xdC9Ub3VjaFZpZXdJbnRl
cmZhY2UuaDoKKyAgICAgICAgKiBXZWJLaXQyLnBybzoKKwogMjAxMS0wNy0yOSAgSm9jZWx5biBU
dXJjb3R0ZSAgPGpvY2VseW4udHVyY290dGVAbm9raWEuY29tPgogCiAgICAgICAgIFtRdF0gQWRk
IFF0V2ViUHJvY2VzcyBpbiBQQVRIIGF0IHJ1bnRpbWUgZm9yIFdlYktpdDIgQVBJIGF1dG8gdGVz
dHMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3F0b3VjaHdl
YnBhZ2UuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xdG91Y2h3ZWJwYWdl
LmNwcAppbmRleCA4ZmNhYmY2ZjQ1ODRlNWY0NzMwMTgyMjMzYmJjMWEwMmQ1NWE2NjgwLi45NGVl
YzdmZTc3NDkxY2RjNDVlMDk5NDc5NzcxMmZjZDM4MzQ5YjA1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3F0b3VjaHdlYnBhZ2UuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXRvdWNod2VicGFnZS5jcHAKQEAgLTIxLDE4ICsyMSwx
OSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgInF0b3VjaHdlYnBhZ2UuaCIKICNp
bmNsdWRlICJxdG91Y2h3ZWJwYWdlX3AuaCIKLSNpbmNsdWRlICJxdG91Y2h3ZWJwYWdlcHJveHku
aCIKIAorI2luY2x1ZGUgInF0b3VjaHdlYnBhZ2Vwcm94eS5oIgogI2luY2x1ZGUgPFFBcHBsaWNh
dGlvbj4KICNpbmNsdWRlIDxRR3JhcGhpY3NTY2VuZU1vdXNlRXZlbnQ+CiAjaW5jbHVkZSA8UVBh
aW50ZXI+CisjaW5jbHVkZSA8UVNHTm9kZT4KICNpbmNsdWRlIDxRVXJsPgotI2luY2x1ZGUgPFF0
RGVidWc+CiAKIFFUb3VjaFdlYlBhZ2U6OlFUb3VjaFdlYlBhZ2UoUVNHSXRlbSogcGFyZW50KQot
ICAgIDogUVNHUGFpbnRlZEl0ZW0ocGFyZW50KQorICAgIDogUVNHSXRlbShwYXJlbnQpCiAgICAg
LCBkKG5ldyBRVG91Y2hXZWJQYWdlUHJpdmF0ZSh0aGlzKSkKIHsKKyAgICBzZXRGbGFnKEl0ZW1I
YXNDb250ZW50cyk7CiB9CiAKIFFUb3VjaFdlYlBhZ2U6On5RVG91Y2hXZWJQYWdlKCkKQEAgLTQw
LDExICs0MSw2IEBAIFFUb3VjaFdlYlBhZ2U6On5RVG91Y2hXZWJQYWdlKCkKICAgICBkZWxldGUg
ZDsKIH0KIAotdm9pZCBRVG91Y2hXZWJQYWdlOjpwYWludChRUGFpbnRlciogcGFpbnRlcikKLXsK
LSAgICBkLT5wYWdlLT5wYWludChwYWludGVyLCBib3VuZGluZ1JlY3QoKS50b0FsaWduZWRSZWN0
KCkpOwotfQotCiB2b2lkIFFUb3VjaFdlYlBhZ2U6OmxvYWQoY29uc3QgUVVybCYgdXJsKQogewog
ICAgIGQtPnBhZ2UtPmxvYWQodXJsKTsKQEAgLTY3LDYgKzYzLDE4IEBAIGludCBRVG91Y2hXZWJQ
YWdlOjpsb2FkUHJvZ3Jlc3MoKSBjb25zdAogCiAvKiEgXHJlaW1wCiAqLworUVNHTm9kZSogUVRv
dWNoV2ViUGFnZTo6dXBkYXRlUGFpbnROb2RlKFFTR05vZGUqIG9sZE5vZGUsIFVwZGF0ZVBhaW50
Tm9kZURhdGEqKQoreworICAgIGlmICghb2xkTm9kZSkKKyAgICAgICAgb2xkTm9kZSA9IG5ldyBR
U0dOb2RlOworICAgIGQtPnNnQWdlbnQudXBkYXRlUGFpbnROb2RlKG9sZE5vZGUpOworCisgICAg
Ly8gUVNHSXRlbSB0YWtlcyBvd25lcnNoaXAgb2YgdGhpcyByZXR1cm4gdmFsdWUgYW5kIGl0J3Mg
Y2hpbGRyZW4gYmV0d2VlbiBhbmQgYWZ0ZXIgdXBkYXRlUGFpbnROb2RlIGNhbGxzLgorICAgIHJl
dHVybiBvbGROb2RlOworfQorCisvKiEgXHJlaW1wCisqLwogYm9vbCBRVG91Y2hXZWJQYWdlOjpl
dmVudChRRXZlbnQqIGV2KQogewogICAgIHN3aXRjaCAoZXYtPnR5cGUoKSkgewpAQCAtODIsNyAr
OTAsNyBAQCBib29sIFFUb3VjaFdlYlBhZ2U6OmV2ZW50KFFFdmVudCogZXYpCiAKICAgICBpZiAo
ZC0+cGFnZS0+aGFuZGxlRXZlbnQoZXYpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICByZXR1
cm4gUVNHUGFpbnRlZEl0ZW06OmV2ZW50KGV2KTsKKyAgICByZXR1cm4gUVNHSXRlbTo6ZXZlbnQo
ZXYpOwogfQogCiB2b2lkIFFUb3VjaFdlYlBhZ2U6OmtleVByZXNzRXZlbnQoUUtleUV2ZW50KiBl
dmVudCkKQEAgLTExNyw3ICsxMjUsNyBAQCB2b2lkIFFUb3VjaFdlYlBhZ2U6OnRvdWNoRXZlbnQo
UVRvdWNoRXZlbnQqIGV2ZW50KQogCiB2b2lkIFFUb3VjaFdlYlBhZ2U6Omdlb21ldHJ5Q2hhbmdl
ZChjb25zdCBRUmVjdEYmIG5ld0dlb21ldHJ5LCBjb25zdCBRUmVjdEYmIG9sZEdlb21ldHJ5KQog
ewotICAgIFFTR1BhaW50ZWRJdGVtOjpnZW9tZXRyeUNoYW5nZWQobmV3R2VvbWV0cnksIG9sZEdl
b21ldHJ5KTsKKyAgICBRU0dJdGVtOjpnZW9tZXRyeUNoYW5nZWQobmV3R2VvbWV0cnksIG9sZEdl
b21ldHJ5KTsKICAgICBpZiAobmV3R2VvbWV0cnkuc2l6ZSgpICE9IG9sZEdlb21ldHJ5LnNpemUo
KSkKICAgICAgICAgZC0+cGFnZS0+c2V0RHJhd2luZ0FyZWFTaXplKG5ld0dlb21ldHJ5LnNpemUo
KS50b1NpemUoKSk7CiB9CkBAIC0xMzAsNiArMTM4LDcgQEAgUUFjdGlvbiogUVRvdWNoV2ViUGFn
ZTo6bmF2aWdhdGlvbkFjdGlvbihRdFdlYktpdDo6TmF2aWdhdGlvbkFjdGlvbiB3aGljaCkKIFFU
b3VjaFdlYlBhZ2VQcml2YXRlOjpRVG91Y2hXZWJQYWdlUHJpdmF0ZShRVG91Y2hXZWJQYWdlKiB2
aWV3KQogICAgIDogcSh2aWV3KQogICAgICwgcGFnZSgwKQorICAgICwgc2dBZ2VudCh2aWV3KQog
ewogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3F0b3Vj
aHdlYnBhZ2UuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXRvdWNod2VicGFn
ZS5oCmluZGV4IGQzYTFhYmMxZTZjNDEyNmNmNTgwNzBiN2ExZWU5YjRiY2MzYWYzMzIuLmQxY2Zh
OTBmMjQ4OTQzYmRmNWVjY2ZmOGViMzY3YWUyNDk5NzY3ODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXRvdWNod2VicGFnZS5oCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXRvdWNod2VicGFnZS5oCkBAIC0yNCw3ICsyNCw3IEBACiAj
aW5jbHVkZSAicXdlYmtpdGdsb2JhbC5oIgogI2luY2x1ZGUgInF3ZWJraXR0eXBlcy5oIgogCi0j
aW5jbHVkZSA8UXREZWNsYXJhdGl2ZS9xc2dwYWludGVkaXRlbS5oPgorI2luY2x1ZGUgPFF0RGVj
bGFyYXRpdmUvcXNnaXRlbS5oPgogI2luY2x1ZGUgPFFTaGFyZWRQb2ludGVyPgogCiBjbGFzcyBR
VG91Y2hXZWJQYWdlUHJpdmF0ZTsKQEAgLTM1LDcgKzM1LDcgQEAgbmFtZXNwYWNlIFdlYktpdCB7
CiAgICAgY2xhc3MgVG91Y2hWaWV3SW50ZXJmYWNlOwogfQogCi1jbGFzcyBRV0VCS0lUX0VYUE9S
VCBRVG91Y2hXZWJQYWdlIDogcHVibGljIFFTR1BhaW50ZWRJdGVtIHsKK2NsYXNzIFFXRUJLSVRf
RVhQT1JUIFFUb3VjaFdlYlBhZ2UgOiBwdWJsaWMgUVNHSXRlbSB7CiAgICAgUV9PQkpFQ1QKICAg
ICBRX1BST1BFUlRZKFFTdHJpbmcgdGl0bGUgUkVBRCB0aXRsZSBOT1RJRlkgdGl0bGVDaGFuZ2Vk
KQogICAgIFFfUFJPUEVSVFkoUVVybCB1cmwgUkVBRCB1cmwgTk9USUZZIHVybENoYW5nZWQpCkBA
IC01NCw3ICs1NCw3IEBAIHB1YmxpYzoKIAogICAgIFFBY3Rpb24qIG5hdmlnYXRpb25BY3Rpb24o
UXRXZWJLaXQ6Ok5hdmlnYXRpb25BY3Rpb24gd2hpY2gpOwogCi0gICAgdmlydHVhbCB2b2lkIHBh
aW50KFFQYWludGVyKik7CisgICAgdmlydHVhbCBRU0dOb2RlKiB1cGRhdGVQYWludE5vZGUoUVNH
Tm9kZSogb2xkTm9kZSwgVXBkYXRlUGFpbnROb2RlRGF0YSopOwogICAgIHZpcnR1YWwgYm9vbCBl
dmVudChRRXZlbnQqKTsKIAogUV9TSUdOQUxTOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9xdC9xdG91Y2h3ZWJwYWdlX3AuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvcXQvcXRvdWNod2VicGFnZV9wLmgKaW5kZXggNGNjYTMwZTQ1ZDAwNDcwN2U1NGU0
YjgwNTgyNmM3MTY5NzliMDIwOS4uYTFmZjI2MjlkZDFhZDVkZTQyNmEzMmJhYTI2YjcxNzRhMjE0
MGMwYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xdG91Y2h3
ZWJwYWdlX3AuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3F0b3VjaHdl
YnBhZ2VfcC5oCkBAIC0yMSwxNCArMjEsMTcgQEAKICNpZm5kZWYgcXRvdWNod2VicGFnZV9wX2gK
ICNkZWZpbmUgcXRvdWNod2VicGFnZV9wX2gKIAotI2luY2x1ZGUgPFFNZW51PgorI2luY2x1ZGUg
IlNHQWdlbnQuaCIKICNpbmNsdWRlICJxdG91Y2h3ZWJwYWdlLmgiCisjaW5jbHVkZSA8UU1lbnU+
CiAKIGNsYXNzIFFSZWN0RjsKK2NsYXNzIFFTR05vZGU7CiBjbGFzcyBRU3RyaW5nOwogY2xhc3Mg
UVRvdWNoV2ViUGFnZTsKIGNsYXNzIFFUb3VjaFdlYlBhZ2VQcm94eTsKIAorCiBjbGFzcyBRVG91
Y2hXZWJQYWdlUHJpdmF0ZSB7CiBwdWJsaWM6CiAgICAgUVRvdWNoV2ViUGFnZVByaXZhdGUoUVRv
dWNoV2ViUGFnZSogdmlldyk7CkBAIC00Miw2ICs0NSw3IEBAIHB1YmxpYzoKIAogICAgIFFUb3Vj
aFdlYlBhZ2UqIGNvbnN0IHE7CiAgICAgUVRvdWNoV2ViUGFnZVByb3h5KiBwYWdlOworICAgIFdl
YktpdDo6U0dBZ2VudCBzZ0FnZW50OwogfTsKIAogI2VuZGlmIC8qIHF0b3VjaHdlYnBhZ2VfcF9o
ICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvVGlsZWREcmF3aW5nQXJl
YVByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9UaWxlZERyYXdpbmdBcmVhUHJv
eHkuY3BwCmluZGV4IGU4MDhkOWNjYWE4NDY3OTViNzRhZjc3NjgwNmE2YjEwMDdkNTY4YjEuLjI2
NmUyZGRlMjk5NmYyODhhOTU2N2I1ZWI3MzE4ODIzZDg3NTMyNzQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9UaWxlZERyYXdpbmdBcmVhUHJveHkuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9UaWxlZERyYXdpbmdBcmVhUHJveHkuY3BwCkBAIC0zNSw2ICsz
NSwxMSBAQAogI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgogI2luY2x1ZGUgIldlYlByb2Nlc3NQ
cm94eS5oIgogCisjaWYgUExBVEZPUk0oUVQpCisjaW5jbHVkZSAiU0dBZ2VudC5oIgorI2luY2x1
ZGUgIlRvdWNoVmlld0ludGVyZmFjZS5oIgorI2VuZGlmCisKIHVzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKQEAgLTQ4LDI0ICs1Myw0NSBAQCBjbGFzcyBUaWxl
ZERyYXdpbmdBcmVhVGlsZVNldCB7CiBwdWJsaWM6CiAgICAgdHlwZWRlZiBIYXNoTWFwPFRpbGVk
RHJhd2luZ0FyZWFUaWxlOjpDb29yZGluYXRlLCBSZWZQdHI8VGlsZWREcmF3aW5nQXJlYVRpbGU+
ID4gVGlsZU1hcDsKIAotICAgIFRpbGVkRHJhd2luZ0FyZWFUaWxlU2V0KGZsb2F0IGNvbnRlbnRz
U2NhbGUgPSAxLjBmKTsKKyAgICBUaWxlZERyYXdpbmdBcmVhVGlsZVNldChQbGF0Zm9ybVdlYlZp
ZXcqLCBmbG9hdCBjb250ZW50c1NjYWxlID0gMS4wZik7CisgICAgflRpbGVkRHJhd2luZ0FyZWFU
aWxlU2V0KCk7CiAKICAgICBXZWJDb3JlOjpJbnRSZWN0IG1hcFRvQ29udGVudHMoY29uc3QgV2Vi
Q29yZTo6SW50UmVjdCYpIGNvbnN0OwogICAgIFdlYkNvcmU6OkludFJlY3QgbWFwRnJvbUNvbnRl
bnRzKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSBjb25zdDsKIAogICAgIFRpbGVNYXAmIHRpbGVz
KCkgeyByZXR1cm4gbV90aWxlczsgfQogICAgIGZsb2F0IGNvbnRlbnRzU2NhbGUoKSBjb25zdCB7
IHJldHVybiBtX2NvbnRlbnRzU2NhbGU7IH0KKyNpZiBQTEFURk9STShRVCkKKyAgICBpbnQgc2dO
b2RlSUQoKSBjb25zdCB7IHJldHVybiBtX3NnTm9kZUlEOyB9CisjZW5kaWYKIAogcHJpdmF0ZToK
ICAgICBUaWxlTWFwIG1fdGlsZXM7CiAgICAgZmxvYXQgbV9jb250ZW50c1NjYWxlOworI2lmIFBM
QVRGT1JNKFFUKQorICAgIFNHQWdlbnQqIG1fc2dBZ2VudDsKKyAgICBpbnQgbV9zZ05vZGVJRDsK
KyNlbmRpZgogfTsKIAotVGlsZWREcmF3aW5nQXJlYVRpbGVTZXQ6OlRpbGVkRHJhd2luZ0FyZWFU
aWxlU2V0KGZsb2F0IGNvbnRlbnRzU2NhbGUpCitUaWxlZERyYXdpbmdBcmVhVGlsZVNldDo6VGls
ZWREcmF3aW5nQXJlYVRpbGVTZXQoUGxhdGZvcm1XZWJWaWV3KiB3ZWJWaWV3LCBmbG9hdCBjb250
ZW50c1NjYWxlKQogICAgIDogbV9jb250ZW50c1NjYWxlKGNvbnRlbnRzU2NhbGUpCisjaWYgUExB
VEZPUk0oUVQpCisgICAgLCBtX3NnQWdlbnQod2ViVmlldy0+c2NlbmVHcmFwaEFnZW50KCkpCisg
ICAgLCBtX3NnTm9kZUlEKG1fc2dBZ2VudC0+Y3JlYXRlU2NhbGVOb2RlKDAsIDEgLyBjb250ZW50
c1NjYWxlKSkKKyNlbmRpZgogewogfQogCitUaWxlZERyYXdpbmdBcmVhVGlsZVNldDo6flRpbGVk
RHJhd2luZ0FyZWFUaWxlU2V0KCkKK3sKKyNpZiBQTEFURk9STShRVCkKKyAgICAvLyBGb3JjaW5n
IHRoZSB0aWxlcyBkZXN0cnVjdGlvbiB0byByZW1vdmUgdGhlaXIgc2cgbm9kZSBiZWZvcmUgcmVt
b3ZpbmcgdGhlaXIgcGFyZW50IG5vZGUuCisgICAgbV90aWxlcy5jbGVhcigpOworICAgIG1fc2dB
Z2VudC0+cmVtb3ZlTm9kZShtX3NnTm9kZUlEKTsKKyNlbmRpZgorfQorCiBJbnRSZWN0IFRpbGVk
RHJhd2luZ0FyZWFUaWxlU2V0OjptYXBUb0NvbnRlbnRzKGNvbnN0IEludFJlY3QmIHJlY3QpIGNv
bnN0CiB7CiAgICAgcmV0dXJuIGVuY2xvc2luZ0ludFJlY3QoRmxvYXRSZWN0KHJlY3QueCgpIC8g
bV9jb250ZW50c1NjYWxlLApAQCAtODIsNyArMTA4LDYgQEAgSW50UmVjdCBUaWxlZERyYXdpbmdB
cmVhVGlsZVNldDo6bWFwRnJvbUNvbnRlbnRzKGNvbnN0IEludFJlY3QmIHJlY3QpIGNvbnN0CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY3QuaGVpZ2h0KCkgKiBtX2Nv
bnRlbnRzU2NhbGUpKTsKIH0KIAotCiBzdGF0aWMgSW50UG9pbnQgaW5uZXJCb3R0b21SaWdodChj
b25zdCBJbnRSZWN0JiByZWN0KQogewogICAgIC8vIEFjdHVhbGx5LCB0aGUgcmVjdCBkb2VzIG5v
dCBjb250YWluIHJlY3QubWF4WCgpLiBSZWZlciB0byBJbnRSZWN0Ojpjb250YWluLgpAQCAtOTks
NyArMTI0LDcgQEAgVGlsZWREcmF3aW5nQXJlYVByb3h5OjpUaWxlZERyYXdpbmdBcmVhUHJveHko
UGxhdGZvcm1XZWJWaWV3KiB3ZWJWaWV3LCBXZWJQYWdlUHIKICAgICAsIG1faXNXYWl0aW5nRm9y
RGlkU2V0RnJhbWVOb3RpZmljYXRpb24oZmFsc2UpCiAgICAgLCBtX2lzVmlzaWJsZSh0cnVlKQog
ICAgICwgbV93ZWJWaWV3KHdlYlZpZXcpCi0gICAgLCBtX2N1cnJlbnRUaWxlU2V0KGFkb3B0UHRy
KG5ldyBUaWxlZERyYXdpbmdBcmVhVGlsZVNldCkpCisgICAgLCBtX2N1cnJlbnRUaWxlU2V0KGFk
b3B0UHRyKG5ldyBUaWxlZERyYXdpbmdBcmVhVGlsZVNldCh3ZWJWaWV3KSkpCiAgICAgLCBtX3Rp
bGVCdWZmZXJVcGRhdGVUaW1lcihSdW5Mb29wOjptYWluKCksIHRoaXMsICZUaWxlZERyYXdpbmdB
cmVhUHJveHk6OnRpbGVCdWZmZXJVcGRhdGVUaW1lckZpcmVkKQogICAgICwgbV90aWxlQ3JlYXRp
b25UaW1lcihSdW5Mb29wOjptYWluKCksIHRoaXMsICZUaWxlZERyYXdpbmdBcmVhUHJveHk6OnRp
bGVDcmVhdGlvblRpbWVyRmlyZWQpCiAgICAgLCBtX3RpbGVTaXplKGRlZmF1bHRUaWxlV2lkdGgs
IGRlZmF1bHRUaWxlSGVpZ2h0KQpAQCAtNDA4LDcgKzQzMyw3IEBAIHZvaWQgVGlsZWREcmF3aW5n
QXJlYVByb3h5OjpzZXRDb250ZW50c1NjYWxlKGZsb2F0IHNjYWxlKQogICAgICAgICBtX3ByZXZp
b3VzVGlsZVNldCA9IG1fY3VycmVudFRpbGVTZXQucmVsZWFzZSgpOwogICAgICAgICBkaXNhYmxl
VGlsZVNldFVwZGF0ZXMobV9wcmV2aW91c1RpbGVTZXQuZ2V0KCkpOwogICAgIH0KLSAgICBtX2N1
cnJlbnRUaWxlU2V0ID0gYWRvcHRQdHIobmV3IFRpbGVkRHJhd2luZ0FyZWFUaWxlU2V0KHNjYWxl
KSk7CisgICAgbV9jdXJyZW50VGlsZVNldCA9IGFkb3B0UHRyKG5ldyBUaWxlZERyYXdpbmdBcmVh
VGlsZVNldChtX3dlYlZpZXcsIHNjYWxlKSk7CiAgICAgY3JlYXRlVGlsZXMoKTsKIH0KIApAQCAt
NDk2LDcgKzUyMSwxMCBAQCB2b2lkIFRpbGVkRHJhd2luZ0FyZWFQcm94eTo6Y3JlYXRlVGlsZXMo
KQogICAgIHVuc2lnbmVkIHRpbGVzVG9DcmVhdGVDb3VudCA9IHRpbGVzVG9DcmVhdGUuc2l6ZSgp
OwogICAgIGZvciAodW5zaWduZWQgbiA9IDA7IG4gPCB0aWxlc1RvQ3JlYXRlQ291bnQ7ICsrbikg
ewogICAgICAgICBUaWxlZERyYXdpbmdBcmVhVGlsZTo6Q29vcmRpbmF0ZSBjb29yZGluYXRlID0g
dGlsZXNUb0NyZWF0ZVtuXTsKLSAgICAgICAgUmVmUHRyPFRpbGVkRHJhd2luZ0FyZWFUaWxlPiB0
aWxlID0gVGlsZWREcmF3aW5nQXJlYVRpbGU6OmNyZWF0ZSh0aGlzLCBjb29yZGluYXRlKTsKKyAg
ICAgICAgUmVmUHRyPFRpbGVkRHJhd2luZ0FyZWFUaWxlPiB0aWxlID0gVGlsZWREcmF3aW5nQXJl
YVRpbGU6OmNyZWF0ZSh0aGlzLCBtX3dlYlZpZXcsIGNvb3JkaW5hdGUpOworI2lmIFBMQVRGT1JN
KFFUKQorICAgICAgICB0aWxlLT5zZXRQYXJlbnROb2RlSUQobV9jdXJyZW50VGlsZVNldC0+c2dO
b2RlSUQoKSk7CisjZW5kaWYKICAgICAgICAgbV9jdXJyZW50VGlsZVNldC0+dGlsZXMoKS5zZXQo
Y29vcmRpbmF0ZSwgdGlsZSk7CiAgICAgfQogCkBAIC01NjEsNyArNTg5LDcgQEAgdm9pZCBUaWxl
ZERyYXdpbmdBcmVhUHJveHk6OmRpc2FibGVUaWxlU2V0VXBkYXRlcyhUaWxlZERyYXdpbmdBcmVh
VGlsZVNldCogdGlsZVMKIAogdm9pZCBUaWxlZERyYXdpbmdBcmVhUHJveHk6OnJlbW92ZUFsbFRp
bGVzKCkKIHsKLSAgICBtX2N1cnJlbnRUaWxlU2V0ID0gYWRvcHRQdHIobmV3IFRpbGVkRHJhd2lu
Z0FyZWFUaWxlU2V0KG1fY3VycmVudFRpbGVTZXQtPmNvbnRlbnRzU2NhbGUoKSkpOworICAgIG1f
Y3VycmVudFRpbGVTZXQgPSBhZG9wdFB0cihuZXcgVGlsZWREcmF3aW5nQXJlYVRpbGVTZXQobV93
ZWJWaWV3LCBtX2N1cnJlbnRUaWxlU2V0LT5jb250ZW50c1NjYWxlKCkpKTsKIH0KIAogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvVGlsZWREcmF3aW5nQXJlYVRpbGUuaCBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9UaWxlZERyYXdpbmdBcmVhVGlsZS5oCmluZGV4IDJi
OWI1MGQ0ZDMxZTQ0ZDIxNmNiNmQwODBmNWVmYTBlMzQzZTkzNTEuLmU1NTM3OGMxYWMxZGUwMmIz
ZmQxYjA4MTFhZmJkYzk1ODBlZGQ3MjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9UaWxlZERyYXdpbmdBcmVhVGlsZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9UaWxlZERyYXdpbmdBcmVhVGlsZS5oCkBAIC00MywxMSArNDMsMjIgQEAgbmFtZXNwYWNlIFdl
YktpdCB7CiBjbGFzcyBUaWxlZERyYXdpbmdBcmVhUHJveHk7CiBjbGFzcyBVcGRhdGVJbmZvOwog
CisjaWYgUExBVEZPUk0oTUFDKQordHlwZWRlZiBXS1ZpZXcgUGxhdGZvcm1XZWJWaWV3OworI2Vs
aWYgUExBVEZPUk0oV0lOKQorY2xhc3MgV2ViVmlldzsKK3R5cGVkZWYgV2ViVmlldyBQbGF0Zm9y
bVdlYlZpZXc7CisjZWxpZiBQTEFURk9STShRVCkKK2NsYXNzIFNHQWdlbnQ7CitjbGFzcyBUb3Vj
aFZpZXdJbnRlcmZhY2U7Cit0eXBlZGVmIFRvdWNoVmlld0ludGVyZmFjZSBQbGF0Zm9ybVdlYlZp
ZXc7CisjZW5kaWYKKwogY2xhc3MgVGlsZWREcmF3aW5nQXJlYVRpbGUgOiBwdWJsaWMgUmVmQ291
bnRlZDxUaWxlZERyYXdpbmdBcmVhVGlsZT4gewogcHVibGljOgogICAgIHR5cGVkZWYgV2ViQ29y
ZTo6SW50UG9pbnQgQ29vcmRpbmF0ZTsKIAotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRpbGVkRHJh
d2luZ0FyZWFUaWxlPiBjcmVhdGUoVGlsZWREcmF3aW5nQXJlYVByb3h5KiBwcm94eSwgY29uc3Qg
Q29vcmRpbmF0ZSYgdGlsZUNvb3JkaW5hdGUpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBUaWxlZERy
YXdpbmdBcmVhVGlsZShwcm94eSwgdGlsZUNvb3JkaW5hdGUpKTsgfQorICAgIHN0YXRpYyBQYXNz
UmVmUHRyPFRpbGVkRHJhd2luZ0FyZWFUaWxlPiBjcmVhdGUoVGlsZWREcmF3aW5nQXJlYVByb3h5
KiBwcm94eSwgUGxhdGZvcm1XZWJWaWV3KiB3ZWJWaWV3LCBjb25zdCBDb29yZGluYXRlJiB0aWxl
Q29vcmRpbmF0ZSkgeyByZXR1cm4gYWRvcHRSZWYobmV3IFRpbGVkRHJhd2luZ0FyZWFUaWxlKHBy
b3h5LCB3ZWJWaWV3LCB0aWxlQ29vcmRpbmF0ZSkpOyB9CiAgICAgflRpbGVkRHJhd2luZ0FyZWFU
aWxlKCk7CiAKICAgICBib29sIGlzRGlydHkoKSBjb25zdDsKQEAgLTY3LDkgKzc4LDEyIEBAIHB1
YmxpYzoKICAgICB2b2lkIGRpc2FibGVVcGRhdGVzKCk7CiAKICAgICBpbnQgSUQoKSBjb25zdCB7
IHJldHVybiBtX0lEOyB9CisjaWYgUExBVEZPUk0oUVQpCisgICAgdm9pZCBzZXRQYXJlbnROb2Rl
SUQoaW50KTsKKyNlbmRpZgogCiBwcml2YXRlOgotICAgIFRpbGVkRHJhd2luZ0FyZWFUaWxlKFRp
bGVkRHJhd2luZ0FyZWFQcm94eSogcHJveHksIGNvbnN0IFRpbGVkRHJhd2luZ0FyZWFUaWxlOjpD
b29yZGluYXRlJiB0aWxlQ29vcmRpbmF0ZSk7CisgICAgVGlsZWREcmF3aW5nQXJlYVRpbGUoVGls
ZWREcmF3aW5nQXJlYVByb3h5KiwgUGxhdGZvcm1XZWJWaWV3KiwgY29uc3QgVGlsZWREcmF3aW5n
QXJlYVRpbGU6OkNvb3JkaW5hdGUmIHRpbGVDb29yZGluYXRlKTsKIAogICAgIFRpbGVkRHJhd2lu
Z0FyZWFQcm94eSogbV9wcm94eTsKICAgICBDb29yZGluYXRlIG1fY29vcmRpbmF0ZTsKQEAgLTc5
LDEwICs5MywxMSBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9oYXNVcGRhdGVQZW5kaW5nOwogCiAj
aWYgUExBVEZPUk0oUVQpCi0gICAgUVBpeG1hcCBtX2J1ZmZlcjsKLSAgICBRUGl4bWFwIG1fYmFj
a0J1ZmZlcjsKKyAgICBRSW1hZ2UgbV9iYWNrQnVmZmVyOworICAgIFNHQWdlbnQqIG1fc2dBZ2Vu
dDsKKyAgICBpbnQgbV9ub2RlSUQ7CisgICAgaW50IG1fcGFyZW50Tm9kZUlEOwogICAgIGJvb2wg
bV9pc0JhY2tCdWZmZXJWYWxpZDsKLSAgICBib29sIG1faXNGcm9udEJ1ZmZlclZhbGlkOwogICAg
IFFSZWdpb24gbV9kaXJ0eVJlZ2lvbjsKICNlbmRpZgogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9xdC9TR0FnZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9xdC9TR0FnZW50LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wZTFkZTAzYjdmYTNjOTA1MDRlMWNkZDk5OTZm
NjQ4ZDllOTJkZmExCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L3F0L1NHQWdlbnQuY3BwCkBAIC0wLDAgKzEsMTc3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEwLCAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dy
YW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0
aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
KyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNHQWdlbnQuaCIKKworI2luY2x1ZGUg
IlNHVGlsZU5vZGUuaCIKKyNpbmNsdWRlIDxRU0dFbmdpbmU+CisjaW5jbHVkZSA8UVNHSXRlbT4K
KyNpbmNsdWRlIDxRU0dUZXh0dXJlPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworc3RydWN0IE5v
ZGVVcGRhdGUgeworICAgIGVudW0gVHlwZSB7CisgICAgICAgIENyZWF0ZVRpbGUsCisgICAgICAg
IENyZWF0ZVNjYWxlLAorICAgICAgICBSZW1vdmUsCisgICAgICAgIFNldFRleHR1cmUKKyAgICB9
OworICAgIE5vZGVVcGRhdGUoVHlwZSB0eXBlKQorICAgICAgICA6IHR5cGUodHlwZSkKKyAgICB7
IH0KKyAgICBUeXBlIHR5cGU7Cit9OworCitzdHJ1Y3QgTm9kZVVwZGF0ZUNyZWF0ZVRpbGUgOiBw
dWJsaWMgTm9kZVVwZGF0ZSB7CisgICAgTm9kZVVwZGF0ZUNyZWF0ZVRpbGUoaW50IG5vZGVJRCwg
aW50IHBhcmVudE5vZGVJRCkKKyAgICAgICAgOiBOb2RlVXBkYXRlKENyZWF0ZVRpbGUpCisgICAg
ICAgICwgbm9kZUlEKG5vZGVJRCkKKyAgICAgICAgLCBwYXJlbnROb2RlSUQocGFyZW50Tm9kZUlE
KQorICAgIHsgfQorICAgIGludCBub2RlSUQ7CisgICAgaW50IHBhcmVudE5vZGVJRDsKK307CisK
K3N0cnVjdCBOb2RlVXBkYXRlQ3JlYXRlU2NhbGUgOiBwdWJsaWMgTm9kZVVwZGF0ZSB7CisgICAg
Tm9kZVVwZGF0ZUNyZWF0ZVNjYWxlKGludCBub2RlSUQsIGludCBwYXJlbnROb2RlSUQsIGZsb2F0
IHNjYWxlKQorICAgICAgICA6IE5vZGVVcGRhdGUoQ3JlYXRlU2NhbGUpCisgICAgICAgICwgbm9k
ZUlEKG5vZGVJRCkKKyAgICAgICAgLCBwYXJlbnROb2RlSUQocGFyZW50Tm9kZUlEKQorICAgICAg
ICAsIHNjYWxlKHNjYWxlKQorICAgIHsgfQorICAgIGludCBub2RlSUQ7CisgICAgaW50IHBhcmVu
dE5vZGVJRDsKKyAgICBmbG9hdCBzY2FsZTsKK307CisKK3N0cnVjdCBOb2RlVXBkYXRlUmVtb3Zl
IDogcHVibGljIE5vZGVVcGRhdGUgeworICAgIE5vZGVVcGRhdGVSZW1vdmUoaW50IG5vZGVJRCkK
KyAgICAgICAgOiBOb2RlVXBkYXRlKFJlbW92ZSkKKyAgICAgICAgLCBub2RlSUQobm9kZUlEKQor
ICAgIHsgfQorICAgIGludCBub2RlSUQ7Cit9OworCitzdHJ1Y3QgTm9kZVVwZGF0ZVNldFRleHR1
cmUgOiBwdWJsaWMgTm9kZVVwZGF0ZSB7CisgICAgTm9kZVVwZGF0ZVNldFRleHR1cmUoaW50IG5v
ZGVJRCwgY29uc3QgUUltYWdlJiB0ZXh0dXJlLCBjb25zdCBRUmVjdCYgc291cmNlUmVjdCwgY29u
c3QgUVJlY3QmIHRhcmdldFJlY3QpCisgICAgICAgIDogTm9kZVVwZGF0ZShTZXRUZXh0dXJlKQor
ICAgICAgICAsIG5vZGVJRChub2RlSUQpCisgICAgICAgICwgdGV4dHVyZSh0ZXh0dXJlKQorICAg
ICAgICAsIHNvdXJjZVJlY3Qoc291cmNlUmVjdCkKKyAgICAgICAgLCB0YXJnZXRSZWN0KHRhcmdl
dFJlY3QpCisgICAgeyB9CisgICAgaW50IG5vZGVJRDsKKyAgICBRSW1hZ2UgdGV4dHVyZTsKKyAg
ICBRUmVjdCBzb3VyY2VSZWN0OworICAgIFFSZWN0IHRhcmdldFJlY3Q7Cit9OworCisKK1NHQWdl
bnQ6OlNHQWdlbnQoUVNHSXRlbSogaXRlbSkKKyAgICA6IGl0ZW0oaXRlbSkKKyAgICAsIG5leHRO
b2RlSUQoMSkKK3sKK30KKworU0dBZ2VudDo6flNHQWdlbnQoKQoreworICAgIGZvcmVhY2ggKE5v
ZGVVcGRhdGUqIG5vZGVVcGRhdGUsIG5vZGVVcGRhdGVzUXVldWUpCisgICAgICAgIGRlbGV0ZSBu
b2RlVXBkYXRlOworfQorCitpbnQgU0dBZ2VudDo6Y3JlYXRlVGlsZU5vZGUoaW50IHBhcmVudE5v
ZGVJRCkKK3sKKyAgICBpbnQgbm9kZUlEID0gbmV4dE5vZGVJRCsrOworICAgIG5vZGVVcGRhdGVz
UXVldWUuYXBwZW5kKG5ldyBOb2RlVXBkYXRlQ3JlYXRlVGlsZShub2RlSUQsIHBhcmVudE5vZGVJ
RCkpOworICAgIGl0ZW0tPnVwZGF0ZSgpOworICAgIHJldHVybiBub2RlSUQ7Cit9CisKK2ludCBT
R0FnZW50OjpjcmVhdGVTY2FsZU5vZGUoaW50IHBhcmVudE5vZGVJRCwgZmxvYXQgc2NhbGUpCit7
CisgICAgaW50IG5vZGVJRCA9IG5leHROb2RlSUQrKzsKKyAgICBub2RlVXBkYXRlc1F1ZXVlLmFw
cGVuZChuZXcgTm9kZVVwZGF0ZUNyZWF0ZVNjYWxlKG5vZGVJRCwgcGFyZW50Tm9kZUlELCBzY2Fs
ZSkpOworICAgIGl0ZW0tPnVwZGF0ZSgpOworICAgIHJldHVybiBub2RlSUQ7Cit9CisKK3ZvaWQg
U0dBZ2VudDo6cmVtb3ZlTm9kZShpbnQgbm9kZUlEKQoreworICAgIG5vZGVVcGRhdGVzUXVldWUu
YXBwZW5kKG5ldyBOb2RlVXBkYXRlUmVtb3ZlKG5vZGVJRCkpOworICAgIGl0ZW0tPnVwZGF0ZSgp
OworfQorCit2b2lkIFNHQWdlbnQ6OnNldE5vZGVUZXh0dXJlKGludCBub2RlSUQsIGNvbnN0IFFJ
bWFnZSYgdGV4dHVyZSwgY29uc3QgUVJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IFFSZWN0JiB0YXJn
ZXRSZWN0KQoreworICAgIG5vZGVVcGRhdGVzUXVldWUuYXBwZW5kKG5ldyBOb2RlVXBkYXRlU2V0
VGV4dHVyZShub2RlSUQsIHRleHR1cmUsIHNvdXJjZVJlY3QsIHRhcmdldFJlY3QpKTsKKyAgICBp
dGVtLT51cGRhdGUoKTsKK30KKwordm9pZCBTR0FnZW50Ojp1cGRhdGVQYWludE5vZGUoUVNHTm9k
ZSogaXRlbU5vZGUpCit7CisgICAgd2hpbGUgKCFub2RlVXBkYXRlc1F1ZXVlLmlzRW1wdHkoKSkg
eworICAgICAgICBRU2NvcGVkUG9pbnRlcjxOb2RlVXBkYXRlPiBub2RlVXBkYXRlKG5vZGVVcGRh
dGVzUXVldWUudGFrZUZpcnN0KCkpOworICAgICAgICBzd2l0Y2ggKG5vZGVVcGRhdGUtPnR5cGUp
IHsKKyAgICAgICAgY2FzZSBOb2RlVXBkYXRlOjpDcmVhdGVUaWxlOiB7CisgICAgICAgICAgICBO
b2RlVXBkYXRlQ3JlYXRlVGlsZSogY3JlYXRlVGlsZVVwZGF0ZSA9IHN0YXRpY19jYXN0PE5vZGVV
cGRhdGVDcmVhdGVUaWxlKj4obm9kZVVwZGF0ZS5kYXRhKCkpOworICAgICAgICAgICAgU0dUaWxl
Tm9kZSogdGlsZU5vZGUgID0gbmV3IFNHVGlsZU5vZGU7CisgICAgICAgICAgICBRU0dOb2RlKiBw
YXJlbnROb2RlID0gY3JlYXRlVGlsZVVwZGF0ZS0+cGFyZW50Tm9kZUlEID8gbm9kZXMudmFsdWUo
Y3JlYXRlVGlsZVVwZGF0ZS0+cGFyZW50Tm9kZUlEKSA6IGl0ZW1Ob2RlOworICAgICAgICAgICAg
cGFyZW50Tm9kZS0+cHJlcGVuZENoaWxkTm9kZSh0aWxlTm9kZSk7CisgICAgICAgICAgICBub2Rl
cy5pbnNlcnQoY3JlYXRlVGlsZVVwZGF0ZS0+bm9kZUlELCB0aWxlTm9kZSk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIE5vZGVVcGRhdGU6OkNyZWF0ZVNjYWxl
OiB7CisgICAgICAgICAgICBOb2RlVXBkYXRlQ3JlYXRlU2NhbGUqIGNyZWF0ZVNjYWxlVXBkYXRl
ID0gc3RhdGljX2Nhc3Q8Tm9kZVVwZGF0ZUNyZWF0ZVNjYWxlKj4obm9kZVVwZGF0ZS5kYXRhKCkp
OworICAgICAgICAgICAgUVNHVHJhbnNmb3JtTm9kZSogc2NhbGVOb2RlICA9IG5ldyBRU0dUcmFu
c2Zvcm1Ob2RlOworICAgICAgICAgICAgUU1hdHJpeDR4NCBzY2FsZU1hdHJpeDsKKyAgICAgICAg
ICAgIC8vIFVzZSBzY2FsZShmbG9hdCxmbG9hdCkgdG8gcHJldmVudCBzY2FsaW5nIHRoZSBaIGNv
bXBvbmVudC4KKyAgICAgICAgICAgIHNjYWxlTWF0cml4LnNjYWxlKGNyZWF0ZVNjYWxlVXBkYXRl
LT5zY2FsZSwgY3JlYXRlU2NhbGVVcGRhdGUtPnNjYWxlKTsKKyAgICAgICAgICAgIHNjYWxlTm9k
ZS0+c2V0TWF0cml4KHNjYWxlTWF0cml4KTsKKyAgICAgICAgICAgIFFTR05vZGUqIHBhcmVudE5v
ZGUgPSBjcmVhdGVTY2FsZVVwZGF0ZS0+cGFyZW50Tm9kZUlEID8gbm9kZXMudmFsdWUoY3JlYXRl
U2NhbGVVcGRhdGUtPnBhcmVudE5vZGVJRCkgOiBpdGVtTm9kZTsKKyAgICAgICAgICAgIC8vIFBy
ZXBlbmQgaW5zdGVhZCBvZiBhcHBlbmQgdG8gcGFpbnQgdGhlIG5ldywgaW5jb21wbGV0ZSwgdGls
ZXNldCBiZWZvcmUvYmVoaW5kIHRoZSBwcmV2aW91cyBvbmUuCisgICAgICAgICAgICBwYXJlbnRO
b2RlLT5wcmVwZW5kQ2hpbGROb2RlKHNjYWxlTm9kZSk7CisgICAgICAgICAgICBub2Rlcy5pbnNl
cnQoY3JlYXRlU2NhbGVVcGRhdGUtPm5vZGVJRCwgc2NhbGVOb2RlKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgTm9kZVVwZGF0ZTo6UmVtb3ZlOiB7CisgICAg
ICAgICAgICBOb2RlVXBkYXRlUmVtb3ZlKiByZW1vdmVVcGRhdGUgPSBzdGF0aWNfY2FzdDxOb2Rl
VXBkYXRlUmVtb3ZlKj4obm9kZVVwZGF0ZS5kYXRhKCkpOworICAgICAgICAgICAgZGVsZXRlIG5v
ZGVzLnRha2UocmVtb3ZlVXBkYXRlLT5ub2RlSUQpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICAgICAgY2FzZSBOb2RlVXBkYXRlOjpTZXRUZXh0dXJlOiB7CisgICAgICAgICAg
ICBOb2RlVXBkYXRlU2V0VGV4dHVyZSogc2V0VGV4dHVyZVVwZGF0ZSA9IHN0YXRpY19jYXN0PE5v
ZGVVcGRhdGVTZXRUZXh0dXJlKj4obm9kZVVwZGF0ZS5kYXRhKCkpOworICAgICAgICAgICAgU0dU
aWxlTm9kZSogdGlsZU5vZGUgPSBzdGF0aWNfY2FzdDxTR1RpbGVOb2RlKj4obm9kZXMudmFsdWUo
c2V0VGV4dHVyZVVwZGF0ZS0+bm9kZUlEKSk7CisgICAgICAgICAgICBpZiAodGlsZU5vZGUpIHsK
KyAgICAgICAgICAgICAgICBRU0dUZXh0dXJlKiB0ZXh0dXJlID0gaXRlbS0+c2NlbmVHcmFwaEVu
Z2luZSgpLT5jcmVhdGVUZXh0dXJlRnJvbUltYWdlKHNldFRleHR1cmVVcGRhdGUtPnRleHR1cmUp
OworICAgICAgICAgICAgICAgIHRpbGVOb2RlLT5zZXRUZXh0dXJlKHRleHR1cmUpOworICAgICAg
ICAgICAgICAgIHRpbGVOb2RlLT5zZXRUYXJnZXRSZWN0KHNldFRleHR1cmVVcGRhdGUtPnRhcmdl
dFJlY3QpOworICAgICAgICAgICAgICAgIHRpbGVOb2RlLT5zZXRTb3VyY2VSZWN0KHRleHR1cmUt
PmNvbnZlcnRUb05vcm1hbGl6ZWRTb3VyY2VSZWN0KHNldFRleHR1cmVVcGRhdGUtPnNvdXJjZVJl
Y3QpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlQoZmFsc2UpOworICAgICAgICB9CisgICAg
fQorfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvU0dBZ2Vu
dC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1NHQWdlbnQuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5i
YTk0NDdlMTMxYzA5YjI0ZjJlZGFhMmMyMzIzOTQyNjAyZTY2MTFmCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1NHQWdlbnQuaApAQCAtMCwwICsxLDYxIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMg
c3Vic2lkaWFyeSgtaWVzKQorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBTR0FnZW50X2gKKyNkZWZpbmUgU0dBZ2VudF9o
CisKKyNpbmNsdWRlIDxRSGFzaD4KKyNpbmNsdWRlIDxRTGlua2VkTGlzdD4KKworY2xhc3MgUUlt
YWdlOworY2xhc3MgUVJlY3Q7CitjbGFzcyBRU0dJdGVtOworY2xhc3MgUVNHTm9kZTsKK2NsYXNz
IFFTaXplOworCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgTm9kZVVwZGF0ZTsKK2NsYXNz
IFBhZ2VOb2RlOworCisvLyBUYWtlcyBjYXJlIG9mIHRha2luZyB1cGRhdGUgcmVxdWVzdHMgdGhl
biBmdWxmaWxsaW5nIHRoZW0gYXN5bmNocm9ub3VzbHkgb24gdGhlIHNjZW5lIGdyYXBoIHRocmVh
ZC4KK2NsYXNzIFNHQWdlbnQgeworcHVibGljOgorICAgIFNHQWdlbnQoUVNHSXRlbSopOworICAg
IH5TR0FnZW50KCk7CisKKyAgICBpbnQgY3JlYXRlVGlsZU5vZGUoaW50IHBhcmVudE5vZGVJRCk7
CisgICAgaW50IGNyZWF0ZVNjYWxlTm9kZShpbnQgcGFyZW50Tm9kZUlELCBmbG9hdCBzY2FsZSk7
CisgICAgdm9pZCByZW1vdmVOb2RlKGludCBub2RlSUQpOworICAgIHZvaWQgc2V0Tm9kZVRleHR1
cmUoaW50IG5vZGVJRCwgY29uc3QgUUltYWdlJiB0ZXh0dXJlLCBjb25zdCBRUmVjdCYgc291cmNl
UmVjdCwgY29uc3QgUVJlY3QmIHRhcmdldFJlY3QpOworCisgICAgLy8gQ2FsbGVkIGJ5IHRoZSBR
U0dJdGVtLgorICAgIHZvaWQgdXBkYXRlUGFpbnROb2RlKFFTR05vZGUqIGl0ZW1Ob2RlKTsKKwor
cHJpdmF0ZToKKyAgICBRU0dJdGVtKiBpdGVtOworICAgIFFMaW5rZWRMaXN0PE5vZGVVcGRhdGUq
PiBub2RlVXBkYXRlc1F1ZXVlOworICAgIFFIYXNoPGludCwgUVNHTm9kZSo+IG5vZGVzOworICAg
IGludCBuZXh0Tm9kZUlEOworfTsKKworfQorCisjZW5kaWYgLyogU0dBZ2VudF9oICovCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvU0dUaWxlTm9kZS5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvU0dUaWxlTm9kZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDc3Yjhj
MzM3YTNmOWNlZWQ5NTFmY2Y2MTViODU3ZGVmM2YwNmViMwotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9TR1RpbGVOb2RlLmNwcApAQCAtMCwwICsxLDYyIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9v
ciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IlNHVGlsZU5vZGUuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1NHVGlsZU5vZGU6OlNHVGls
ZU5vZGUoKQorICAgIDogbV9nZW9tZXRyeShRU0dHZW9tZXRyeTo6ZGVmYXVsdEF0dHJpYnV0ZXNf
VGV4dHVyZWRQb2ludDJEKCksIDQpCit7CisgICAgc2V0R2VvbWV0cnkoJm1fZ2VvbWV0cnkpOwor
ICAgIHNldE1hdGVyaWFsKCZtX21hdGVyaWFsKTsKKyAgICBzZXRPcGFxdWVNYXRlcmlhbCgmbV9v
cGFxdWVNYXRlcmlhbCk7Cit9CisKK3ZvaWQgU0dUaWxlTm9kZTo6c2V0VGFyZ2V0UmVjdChjb25z
dCBRUmVjdEYmIHIpCit7CisgICAgaWYgKG1fdGFyZ2V0UmVjdCA9PSByKQorICAgICAgICByZXR1
cm47CisgICAgbV90YXJnZXRSZWN0ID0gcjsKKyAgICBRU0dHZW9tZXRyeTo6dXBkYXRlVGV4dHVy
ZWRSZWN0R2VvbWV0cnkoJm1fZ2VvbWV0cnksIG1fdGFyZ2V0UmVjdCwgbV9zb3VyY2VSZWN0KTsK
KyAgICBtYXJrRGlydHkoRGlydHlHZW9tZXRyeSk7Cit9CisKK3ZvaWQgU0dUaWxlTm9kZTo6c2V0
U291cmNlUmVjdChjb25zdCBRUmVjdEYmIHIpCit7CisgICAgaWYgKG1fc291cmNlUmVjdCA9PSBy
KQorICAgICAgICByZXR1cm47CisgICAgbV9zb3VyY2VSZWN0ID0gcjsKKyAgICBRU0dHZW9tZXRy
eTo6dXBkYXRlVGV4dHVyZWRSZWN0R2VvbWV0cnkoJm1fZ2VvbWV0cnksIG1fdGFyZ2V0UmVjdCwg
bV9zb3VyY2VSZWN0KTsKKyAgICBtYXJrRGlydHkoRGlydHlHZW9tZXRyeSk7Cit9CisKK3ZvaWQg
U0dUaWxlTm9kZTo6c2V0VGV4dHVyZShRU0dUZXh0dXJlKiB0ZXh0dXJlKQoreworICAgIGlmICht
X21hdGVyaWFsLnRleHR1cmUoKSA9PSB0ZXh0dXJlKQorICAgICAgICByZXR1cm47CisgICAgbV9t
YXRlcmlhbC5zZXRUZXh0dXJlKHRleHR1cmUpOworICAgIG1fb3BhcXVlTWF0ZXJpYWwuc2V0VGV4
dHVyZSh0ZXh0dXJlKTsKKyAgICBtX3RleHR1cmUucmVzZXQodGV4dHVyZSk7CisgICAgbWFya0Rp
cnR5KERpcnR5TWF0ZXJpYWwpOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvcXQvU0dUaWxlTm9kZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1NH
VGlsZU5vZGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xOWFiNjViY2FjNzg0Y2VmM2Y2NDU2OWI1ODE5OGFhNTFl
NzZjYzg3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1NH
VGlsZU5vZGUuaApAQCAtMCwwICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIE5v
a2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBT
R1RpbGVOb2RlX2gKKyNkZWZpbmUgU0dUaWxlTm9kZV9oCisKKyNpbmNsdWRlIDxRU0dHZW9tZXRy
eU5vZGU+CisjaW5jbHVkZSA8UVNHT3BhcXVlVGV4dHVyZU1hdGVyaWFsPgorI2luY2x1ZGUgPFFT
R1RleHR1cmVNYXRlcmlhbD4KKworUVRfQkVHSU5fTkFNRVNQQUNFCitjbGFzcyBRU0dUZXh0dXJl
OworUVRfRU5EX05BTUVTUEFDRQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgU0dUaWxl
Tm9kZSA6IHB1YmxpYyBRU0dHZW9tZXRyeU5vZGUgeworcHVibGljOgorICAgIFNHVGlsZU5vZGUo
KTsKKworICAgIHZvaWQgc2V0VGFyZ2V0UmVjdChjb25zdCBRUmVjdEYmKTsKKyAgICB2b2lkIHNl
dFNvdXJjZVJlY3QoY29uc3QgUVJlY3RGJik7CisgICAgLy8gVGhpcyB0YWtlcyBvd25lcnNoaXAg
b2YgdGhlIHRleHR1cmUuCisgICAgdm9pZCBzZXRUZXh0dXJlKFFTR1RleHR1cmUqKTsKKworcHJp
dmF0ZToKKyAgICBRU0dHZW9tZXRyeSBtX2dlb21ldHJ5OworICAgIFFTR09wYXF1ZVRleHR1cmVN
YXRlcmlhbCBtX29wYXF1ZU1hdGVyaWFsOworICAgIFFTR1RleHR1cmVNYXRlcmlhbCBtX21hdGVy
aWFsOworICAgIFFTY29wZWRQb2ludGVyPFFTR1RleHR1cmU+IG1fdGV4dHVyZTsKKworICAgIFFS
ZWN0RiBtX3RhcmdldFJlY3Q7CisgICAgUVJlY3RGIG1fc291cmNlUmVjdDsKK307CisKK30KKwor
I2VuZGlmIC8qIFNHVGlsZU5vZGVfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL3F0L1RpbGVkRHJhd2luZ0FyZWFQcm94eVF0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9xdC9UaWxlZERyYXdpbmdBcmVhUHJveHlRdC5jcHAKaW5kZXggMDkyMzIyMzY0ZDEx
YTQzYTU2MjI2Y2UzODMyNDhjYjU0NzExZDFhYy4uMzBhZWE2YTM5MDc2MmQzMTA3ZTRjMjg5OTcw
ODE5YzE3MDc4NWY1MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1Rp
bGVkRHJhd2luZ0FyZWFQcm94eVF0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
cXQvVGlsZWREcmF3aW5nQXJlYVByb3h5UXQuY3BwCkBAIC0zOSwxMiArMzksNyBAQCBuYW1lc3Bh
Y2UgV2ViS2l0IHsKIAogdm9pZCBUaWxlZERyYXdpbmdBcmVhUHJveHk6OnVwZGF0ZVdlYlZpZXco
Y29uc3QgVmVjdG9yPEludFJlY3Q+JiBwYWludGVkQXJlYSkKIHsKLSAgICBpZiAoIXBhZ2UoKSB8
fCAhcGFnZSgpLT5pc1ZhbGlkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHVuc2lnbmVkIHNp
emUgPSBwYWludGVkQXJlYS5zaXplKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBuID0gMDsgbiA8IHNp
emU7ICsrbikKLSAgICAgICAgc3RhdGljX2Nhc3Q8Vmlld0ludGVyZmFjZSo+KG1fd2ViVmlldykt
PnNldFZpZXdOZWVkc0Rpc3BsYXkoUVJlY3QocGFpbnRlZEFyZWFbbl0pKTsKKyAgICAvLyBTRyB1
cGRhdGVzIGFyZSB0cmlnZ2VyZWQgdGhyb3VnaCBTR0FnZW50LgogfQogCiBXZWJQYWdlUHJveHkq
IFRpbGVkRHJhd2luZ0FyZWFQcm94eTo6cGFnZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvcXQvVGlsZWREcmF3aW5nQXJlYVRpbGVRdC5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvcXQvVGlsZWREcmF3aW5nQXJlYVRpbGVRdC5jcHAKaW5kZXggMjU5ZGZkMWJl
NGQyNTYwNzBjY2YxNDgxMWM3YzA3MTVlZmQ3NDQxYS4uZDE0NzlhZThkOGNlMThhNDNlZjczMjk1
YmNkOTAxYjYyNTQ3ODg4ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0
L1RpbGVkRHJhd2luZ0FyZWFUaWxlUXQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9xdC9UaWxlZERyYXdpbmdBcmVhVGlsZVF0LmNwcApAQCAtMjcsOCArMjcsMTAgQEAKICNpbmNs
dWRlICJUaWxlZERyYXdpbmdBcmVhVGlsZS5oIgogCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
LmgiCisjaW5jbHVkZSAiU0dBZ2VudC5oIgogI2luY2x1ZGUgIlNoYXJlYWJsZUJpdG1hcC5oIgog
I2luY2x1ZGUgIlRpbGVkRHJhd2luZ0FyZWFQcm94eS5oIgorI2luY2x1ZGUgIlRvdWNoVmlld0lu
dGVyZmFjZS5oIgogI2luY2x1ZGUgIlVwZGF0ZUluZm8uaCIKICNpbmNsdWRlICJXZWJQYWdlUHJv
eHkuaCIKICNpbmNsdWRlICJXZWJQcm9jZXNzUHJveHkuaCIKQEAgLTQwLDEzICs0MiwxNSBAQCB1
c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLVRpbGVkRHJh
d2luZ0FyZWFUaWxlOjpUaWxlZERyYXdpbmdBcmVhVGlsZShUaWxlZERyYXdpbmdBcmVhUHJveHkq
IHByb3h5LCBjb25zdCBDb29yZGluYXRlJiB0aWxlQ29vcmRpbmF0ZSkKK1RpbGVkRHJhd2luZ0Fy
ZWFUaWxlOjpUaWxlZERyYXdpbmdBcmVhVGlsZShUaWxlZERyYXdpbmdBcmVhUHJveHkqIHByb3h5
LCBQbGF0Zm9ybVdlYlZpZXcqIHdlYlZpZXcsIGNvbnN0IENvb3JkaW5hdGUmIHRpbGVDb29yZGlu
YXRlKQogICAgIDogbV9wcm94eShwcm94eSkKICAgICAsIG1fY29vcmRpbmF0ZSh0aWxlQ29vcmRp
bmF0ZSkKICAgICAsIG1fcmVjdChwcm94eS0+dGlsZVJlY3RGb3JDb29yZGluYXRlKHRpbGVDb29y
ZGluYXRlKSkKICAgICAsIG1faGFzVXBkYXRlUGVuZGluZyhmYWxzZSkKKyAgICAsIG1fc2dBZ2Vu
dCh3ZWJWaWV3LT5zY2VuZUdyYXBoQWdlbnQoKSkKKyAgICAsIG1fbm9kZUlEKDApCisgICAgLCBt
X3BhcmVudE5vZGVJRCgwKQogICAgICwgbV9pc0JhY2tCdWZmZXJWYWxpZChmYWxzZSkKLSAgICAs
IG1faXNGcm9udEJ1ZmZlclZhbGlkKGZhbHNlKQogICAgICwgbV9kaXJ0eVJlZ2lvbihtX3JlY3Qp
CiB7CiAgICAgc3RhdGljIGludCBpZCA9IDA7CkBAIC02Myw2ICs2Nyw4IEBAIFRpbGVkRHJhd2lu
Z0FyZWFUaWxlOjp+VGlsZWREcmF3aW5nQXJlYVRpbGUoKQogICAgIHFEZWJ1ZygpIDw8ICJkZWxl
dGluZyB0aWxlIGlkPSIgPDwgbV9JRDsKICNlbmRpZgogICAgIGRpc2FibGVVcGRhdGVzKCk7Cisg
ICAgaWYgKG1fbm9kZUlEKQorICAgICAgICBtX3NnQWdlbnQtPnJlbW92ZU5vZGUobV9ub2RlSUQp
OwogfQogCiBib29sIFRpbGVkRHJhd2luZ0FyZWFUaWxlOjppc0RpcnR5KCkgY29uc3QKQEAgLTcy
LDcgKzc4LDcgQEAgYm9vbCBUaWxlZERyYXdpbmdBcmVhVGlsZTo6aXNEaXJ0eSgpIGNvbnN0CiAK
IGJvb2wgVGlsZWREcmF3aW5nQXJlYVRpbGU6OmlzUmVhZHlUb1BhaW50KCkgY29uc3QKIHsKLSAg
ICByZXR1cm4gbV9pc0Zyb250QnVmZmVyVmFsaWQ7CisgICAgcmV0dXJuICEhbV9ub2RlSUQ7CiB9
CiAKIGJvb2wgVGlsZWREcmF3aW5nQXJlYVRpbGU6Omhhc1JlYWR5QmFja0J1ZmZlcigpIGNvbnN0
CkBAIC0xMDEsMjYgKzEwNywxMiBAQCB2b2lkIFRpbGVkRHJhd2luZ0FyZWFUaWxlOjpyZXNpemUo
Y29uc3QgSW50U2l6ZSYgbmV3U2l6ZSkKIAogdm9pZCBUaWxlZERyYXdpbmdBcmVhVGlsZTo6c3dh
cEJhY2tCdWZmZXJUb0Zyb250KCkKIHsKLSAgICBBU1NFUlQoIW1fYmFja0J1ZmZlci5pc051bGwo
KSk7Ci0KLSAgICBjb25zdCBRUGl4bWFwIHN3YXAgPSBtX2J1ZmZlcjsKLSAgICBtX2J1ZmZlciA9
IG1fYmFja0J1ZmZlcjsKLSAgICBtX2lzRnJvbnRCdWZmZXJWYWxpZCA9IG1faXNCYWNrQnVmZmVy
VmFsaWQ7Ci0gICAgbV9pc0JhY2tCdWZmZXJWYWxpZCA9IGZhbHNlOwotICAgIG1fYmFja0J1ZmZl
ciA9IHN3YXA7CisgICAgLy8gRklYTUU6IEltcGxlbWVudCBvbmNlIHdlIGNhbiB0aWdodCBpbnZh
bGlkYXRlZCB0aWxlIHVwZGF0ZXMgdG9nZXRoZXIuCiB9CiAKIHZvaWQgVGlsZWREcmF3aW5nQXJl
YVRpbGU6OnBhaW50KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgcmVj
dCkKIHsKLSAgICBBU1NFUlQoIW1fYnVmZmVyLmlzTnVsbCgpKTsKLQotICAgIEludFJlY3QgdGFy
Z2V0ID0gaW50ZXJzZWN0aW9uKHJlY3QsIG1fcmVjdCk7Ci0gICAgSW50UmVjdCBzb3VyY2UoKHRh
cmdldC54KCkgLSBtX3JlY3QueCgpKSwKLSAgICAgICAgICAgICAgICAgICAodGFyZ2V0LnkoKSAt
IG1fcmVjdC55KCkpLAotICAgICAgICAgICAgICAgICAgIHRhcmdldC53aWR0aCgpLAotICAgICAg
ICAgICAgICAgICAgIHRhcmdldC5oZWlnaHQoKSk7Ci0KLSAgICBjb250ZXh0LT5wbGF0Zm9ybUNv
bnRleHQoKS0+ZHJhd1BpeG1hcCh0YXJnZXQsIG1fYnVmZmVyLCBzb3VyY2UpOworICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwogfQogCiB2b2lkIFRpbGVkRHJhd2luZ0FyZWFUaWxlOjppbmNvcnBv
cmF0ZVVwZGF0ZShjb25zdCBVcGRhdGVJbmZvJiB1cGRhdGVJbmZvLCBmbG9hdCkKQEAgLTEzNiwx
NCArMTI4LDIxIEBAIHZvaWQgVGlsZWREcmF3aW5nQXJlYVRpbGU6OmluY29ycG9yYXRlVXBkYXRl
KGNvbnN0IFVwZGF0ZUluZm8mIHVwZGF0ZUluZm8sIGZsb2F0CiAgICAgY29uc3QgUVNpemUgdGls
ZVNpemUgPSBtX3Byb3h5LT50aWxlU2l6ZSgpOwogCiAgICAgaWYgKG1fYmFja0J1ZmZlci5zaXpl
KCkgIT0gdGlsZVNpemUpIHsKLSAgICAgICAgbV9iYWNrQnVmZmVyID0gUVBpeG1hcCh0aWxlU2l6
ZSk7CisgICAgICAgIG1fYmFja0J1ZmZlciA9IFFJbWFnZSh0aWxlU2l6ZSwgaW1hZ2UuZm9ybWF0
KCkpOwogICAgICAgICBtX2JhY2tCdWZmZXIuZmlsbChRdDo6dHJhbnNwYXJlbnQpOwogICAgIH0K
IAotICAgIFFQYWludGVyIHBhaW50ZXIoJm1fYmFja0J1ZmZlcik7Ci0gICAgcGFpbnRlci5kcmF3
UGl4bWFwKDAsIDAsIG1fYnVmZmVyKTsKLSAgICBJbnRTaXplIGRyYXdQb2ludCA9IHVwZGF0ZUNo
dW5rUmVjdC5sb2NhdGlvbigpIC0gbV9yZWN0LmxvY2F0aW9uKCk7Ci0gICAgcGFpbnRlci5kcmF3
SW1hZ2UoUVBvaW50KGRyYXdQb2ludC53aWR0aCgpLCBkcmF3UG9pbnQuaGVpZ2h0KCkpLCBpbWFn
ZSk7CisgICAgeworICAgICAgICBRUGFpbnRlciBwYWludGVyKCZtX2JhY2tCdWZmZXIpOworICAg
ICAgICBJbnRTaXplIGRyYXdQb2ludCA9IHVwZGF0ZUNodW5rUmVjdC5sb2NhdGlvbigpIC0gbV9y
ZWN0LmxvY2F0aW9uKCk7CisgICAgICAgIHBhaW50ZXIuZHJhd0ltYWdlKFFQb2ludChkcmF3UG9p
bnQud2lkdGgoKSwgZHJhd1BvaW50LmhlaWdodCgpKSwgaW1hZ2UpOworICAgIH0KKworICAgIGlm
ICghbV9ub2RlSUQpCisgICAgICAgIG1fbm9kZUlEID0gbV9zZ0FnZW50LT5jcmVhdGVUaWxlTm9k
ZShtX3BhcmVudE5vZGVJRCk7CisgICAgQVNTRVJUKG1fbm9kZUlEKTsKKyAgICBRUmVjdCBzb3Vy
Y2VSZWN0KDAsIDAsIG1fcmVjdC53aWR0aCgpLCBtX3JlY3QuaGVpZ2h0KCkpOworICAgIG1fc2dB
Z2VudC0+c2V0Tm9kZVRleHR1cmUobV9ub2RlSUQsIG1fYmFja0J1ZmZlciwgc291cmNlUmVjdCwg
bV9yZWN0KTsKIH0KIAogdm9pZCBUaWxlZERyYXdpbmdBcmVhVGlsZTo6ZGlzYWJsZVVwZGF0ZXMo
KQpAQCAtMTU3LDExICsxNTYsMTcgQEAgdm9pZCBUaWxlZERyYXdpbmdBcmVhVGlsZTo6ZGlzYWJs
ZVVwZGF0ZXMoKQogICAgIH0KIAogICAgIG1fcHJveHktPnVucmVnaXN0ZXJUaWxlKG1fSUQpOwot
ICAgIG1fYmFja0J1ZmZlciA9IFFQaXhtYXAoKTsKKyAgICBtX2JhY2tCdWZmZXIgPSBRSW1hZ2Uo
KTsKICAgICBtX2lzQmFja0J1ZmZlclZhbGlkID0gZmFsc2U7CiAgICAgbV9wcm94eSA9IDA7CiB9
CiAKK3ZvaWQgVGlsZWREcmF3aW5nQXJlYVRpbGU6OnNldFBhcmVudE5vZGVJRChpbnQgbm9kZUlE
KQoreworICAgIEFTU0VSVCghbV9ub2RlSUQpOworICAgIG1fcGFyZW50Tm9kZUlEID0gbm9kZUlE
OworfQorCiB2b2lkIFRpbGVkRHJhd2luZ0FyZWFUaWxlOjp1cGRhdGVCYWNrQnVmZmVyKCkKIHsK
ICAgICBBU1NFUlQobV9wcm94eSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvcXQvVG91Y2hWaWV3SW50ZXJmYWNlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9x
dC9Ub3VjaFZpZXdJbnRlcmZhY2UuY3BwCmluZGV4IGZhNTc5NjRkYjNhYTRiNzhhYWM1YmIwMzc0
OTEyYzk4OTQzYzdkNTQuLmRjZTkxMzc5OTYwYTZkZmMwOTc4ZjY1ZDUyNTZjNjlkZmI0Y2FkNDEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9Ub3VjaFZpZXdJbnRlcmZh
Y2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9Ub3VjaFZpZXdJbnRlcmZh
Y2UuY3BwCkBAIC05MSw5ICs5MSwxMyBAQCB2b2lkIFRvdWNoVmlld0ludGVyZmFjZTo6cGluY2hH
ZXN0dXJlRW5kZWQoKQogICAgIG1fdmlld3BvcnRWaWV3LT5kLT52aWV3cG9ydFJlY3RVcGRhdGVk
KCk7CiB9CiAKLXZvaWQgVG91Y2hWaWV3SW50ZXJmYWNlOjpzZXRWaWV3TmVlZHNEaXNwbGF5KGNv
bnN0IFFSZWN0JiBpbnZhbGlkYXRlZFJlY3QpCitTR0FnZW50KiBUb3VjaFZpZXdJbnRlcmZhY2U6
OnNjZW5lR3JhcGhBZ2VudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuICZtX3BhZ2VWaWV3LT5kLT5z
Z0FnZW50OworfQorCit2b2lkIFRvdWNoVmlld0ludGVyZmFjZTo6c2V0Vmlld05lZWRzRGlzcGxh
eShjb25zdCBRUmVjdCYpCiB7Ci0gICAgbV9wYWdlVmlldy0+dXBkYXRlKGludmFsaWRhdGVkUmVj
dCk7CiB9CiAKIFFTaXplIFRvdWNoVmlld0ludGVyZmFjZTo6ZHJhd2luZ0FyZWFTaXplKCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9Ub3VjaFZpZXdJbnRlcmZhY2Uu
aCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9Ub3VjaFZpZXdJbnRlcmZhY2UuaAppbmRl
eCA5MGNlN2UyY2I3NWMwMDI3ZDY5YTE4NTQ0OTQ3MGMzZTJiOTljMmRhLi42M2M5N2M5ZTk3Mzc2
YzE4YjVhODUxNjRjNTA1YzQzMjkwODA2ZDViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvcXQvVG91Y2hWaWV3SW50ZXJmYWNlLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL3F0L1RvdWNoVmlld0ludGVyZmFjZS5oCkBAIC0yOSw2ICsyOSw4IEBAIGNsYXNzIFFU
b3VjaFdlYlZpZXc7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCitjbGFzcyBTR0FnZW50OworCiBj
bGFzcyBUb3VjaFZpZXdJbnRlcmZhY2UgOiBwdWJsaWMgVmlld0ludGVyZmFjZQogewogcHVibGlj
OgpAQCAtNDMsNiArNDUsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBwaW5jaEdlc3R1cmVSZXF1ZXN0
VXBkYXRlKGNvbnN0IFFQb2ludEYmLCBxcmVhbCk7CiAgICAgdm9pZCBwaW5jaEdlc3R1cmVFbmRl
ZCgpOwogCisgICAgU0dBZ2VudCogc2NlbmVHcmFwaEFnZW50KCkgY29uc3Q7CisKIHByaXZhdGU6
CiAgICAgLyogSW1wbGVtZW50YXRpb24gb2YgVmlld0ludGVyZmFjZSAqLwogICAgIHZpcnR1YWwg
dm9pZCBzZXRWaWV3TmVlZHNEaXNwbGF5KGNvbnN0IFFSZWN0Jik7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJLaXQyLnBybyBiL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIucHJvCmluZGV4
IDgyNTk4YmE2OWNhNTVhOThmMjU2NGZhYTUzMDZjZDg1N2ZmZGE0ZDguLjQ0ZWJiNjljZGMyZGRk
MjVhYTEyNTgzYWJkYjk1ZGYxMTM4YzYyNzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dl
YktpdDIucHJvCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIucHJvCkBAIC0yNDksNiArMjQ5
LDggQEAgSEVBREVSUyArPSBcCiAgICAgVUlQcm9jZXNzL3F0L3F3a2hpc3RvcnlfcC5oIFwKICAg
ICBVSVByb2Nlc3MvcXQvcXdrcHJlZmVyZW5jZXMuaCBcCiAgICAgVUlQcm9jZXNzL3F0L3F3a3By
ZWZlcmVuY2VzX3AuaCBcCisgICAgVUlQcm9jZXNzL3F0L1NHQWdlbnQuaCBcCisgICAgVUlQcm9j
ZXNzL3F0L1NHVGlsZU5vZGUuaCBcCiAgICAgVUlQcm9jZXNzL3F0L1ZpZXdJbnRlcmZhY2UuaCBc
CiAgICAgVUlQcm9jZXNzL3F0L1dlYlVuZG9Db21tYW5kUXQuaCBcCiAgICAgVUlQcm9jZXNzL3F0
L1dlYkNvbnRleHRNZW51UHJveHlRdC5oIFwKQEAgLTQ3Niw2ICs0NzgsOCBAQCBTT1VSQ0VTICs9
IFwKICAgICBVSVByb2Nlc3MvcXQvcXdrY29udGV4dC5jcHAgXAogICAgIFVJUHJvY2Vzcy9xdC9x
d2toaXN0b3J5LmNwcCBcCiAgICAgVUlQcm9jZXNzL3F0L3F3a3ByZWZlcmVuY2VzLmNwcCBcCisg
ICAgVUlQcm9jZXNzL3F0L1NHQWdlbnQuY3BwIFwKKyAgICBVSVByb2Nlc3MvcXQvU0dUaWxlTm9k
ZS5jcHAgXAogICAgIFVJUHJvY2Vzcy9xdC9UaWxlZERyYXdpbmdBcmVhUHJveHlRdC5jcHAgXAog
ICAgIFVJUHJvY2Vzcy9xdC9UaWxlZERyYXdpbmdBcmVhVGlsZVF0LmNwcCBcCiAgICAgVUlQcm9j
ZXNzL3F0L1RleHRDaGVja2VyUXQuY3BwIFwK
</data>
<flag name="review"
          id="98134"
          type_id="1"
          status="+"
          setter="benjamin"
    />
    <flag name="commit-queue"
          id="98310"
          type_id="3"
          status="-"
          setter="benjamin"
    />
          </attachment>
      

    </bug>

</bugzilla>