<?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>137164</bug_id>
          
          <creation_ts>2014-09-26 18:35:03 -0700</creation_ts>
          <short_desc>Move PageOverlay[Controller] to WebCore</short_desc>
          <delta_ts>2014-10-21 07:41:00 -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>WebCore Misc.</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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>137384</dependson>
    
    <dependson>137443</dependson>
    
    <dependson>137848</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Tim Horton">thorton</reporter>
          <assigned_to name="Tim Horton">thorton</assigned_to>
          <cc>andersca</cc>
    
    <cc>ap</cc>
    
    <cc>beidson</cc>
    
    <cc>bfulgham</cc>
    
    <cc>cfleizach</cc>
    
    <cc>cgarcia</cc>
    
    <cc>clopez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>japhet</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>mitz</cc>
    
    <cc>ossy</cc>
    
    <cc>pnormand</cc>
    
    <cc>sam</cc>
    
    <cc>sergio</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1037603</commentid>
    <comment_count>0</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2014-09-26 18:35:03 -0700</bug_when>
    <thetext>It&apos;s useful for both WebKits, and fairly Kit-agnostic at this point.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1037660</commentid>
    <comment_count>1</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2014-09-27 04:25:02 -0700</bug_when>
    <thetext>WIP patch; needs a changelog and to test iOS and accessibility (I can&apos;t figure out how to use that part even before my patch).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1037661</commentid>
    <comment_count>2</comment_count>
      <attachid>238773</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2014-09-27 04:25:18 -0700</bug_when>
    <thetext>Created attachment 238773
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1037757</commentid>
    <comment_count>3</comment_count>
      <attachid>238807</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2014-09-28 00:26:42 -0700</bug_when>
    <thetext>Created attachment 238807
wip

iOS is good, now just need to test accessibility + changelog it</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1037762</commentid>
    <comment_count>4</comment_count>
      <attachid>238809</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2014-09-28 00:34:12 -0700</bug_when>
    <thetext>Created attachment 238809
cmake</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1037824</commentid>
    <comment_count>5</comment_count>
      <attachid>238773</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-09-28 17:22:26 -0700</bug_when>
    <thetext>Comment on attachment 238773
patch

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

Started reviewing this because I misunderstood the mail about the review flag being cleared. A few stray comments.

&gt; Source/WebCore/loader/EmptyClients.h:185
&gt; +    virtual void attachViewOverlayGraphicsLayer(Frame*, GraphicsLayer*) override { }

Please consider making these references instead of pointers if either is guaranteed to be non-null, even if that means not matching the older function above.

&gt; Source/WebCore/page/Page.h:598
&gt; +    std::unique_ptr&lt;PageOverlayController&gt; m_pageOverlayController;

You could consider putting this on MainFrame instead of Page. That makes it easier to get to with fewer null checks needed.

&gt; Source/WebCore/page/PageOverlay.h:62
&gt; +        virtual void pageOverlayDestroyed(PageOverlay*) = 0;
&gt; +        virtual void willMoveToPage(PageOverlay*, Page*) = 0;
&gt; +        virtual void didMoveToPage(PageOverlay*, Page*) = 0;
&gt; +        virtual void drawRect(PageOverlay*, GraphicsContext&amp;, const IntRect&amp; dirtyRect) = 0;
&gt; +        virtual bool mouseEvent(PageOverlay*, const PlatformMouseEvent&amp;) = 0;
&gt; +        virtual void didScrollFrame(PageOverlay*, Frame&amp;) { }
&gt; +
&gt; +        virtual bool copyAccessibilityAttributeStringValueForPoint(PageOverlay*, String /* attribute */, FloatPoint /* parameter */, String&amp; /* value */) { return false; }
&gt; +        virtual bool copyAccessibilityAttributeBoolValueForPoint(PageOverlay*, String /* attribute */, FloatPoint /* parameter */, bool&amp; /* value */)  { return false; }
&gt; +        virtual Vector&lt;String&gt; copyAccessibilityAttributeNames(PageOverlay*, bool /* parameterizedNames */)  { return Vector&lt;String&gt;(); }

Should consider using references rather than pointers if any of these are things that can’t be null.

&gt; Source/WebCore/page/PageOverlay.h:70
&gt; +    static PassRefPtr&lt;PageOverlay&gt; create(Client*, OverlayType = OverlayType::View);

Should consider a reference rather than a pointer if Client can’t be null.

&gt; Source/WebCore/page/PageOverlay.h:91
&gt; +    Client* client() const { return m_client; }

Should consider a reference rather than a pointer if client can’t be null.

&gt; Source/WebCore/page/PageOverlay.h:104
&gt; +    GraphicsLayer* layer();

Should consider a reference rather than a pointer if layer can’t be null.

&gt; Source/WebCore/page/PageOverlay.h:107
&gt; +protected:
&gt; +    explicit PageOverlay(Client*, OverlayType);

Why protected instead of private? Is there going to be a class derived from this one?

&gt; Source/WebCore/page/PageOverlay.h:114
&gt; +    Page* m_page;

Should be a reference rather than a pointer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1037850</commentid>
    <comment_count>6</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2014-09-28 18:32:15 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 238773 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=238773&amp;action=review
&gt; 
&gt; Started reviewing this because I misunderstood the mail about the review flag being cleared. A few stray comments.

It was mostly ready for review anyway, so this all works out!

&gt; &gt; Source/WebCore/loader/EmptyClients.h:185
&gt; &gt; +    virtual void attachViewOverlayGraphicsLayer(Frame*, GraphicsLayer*) override { }
&gt; 
&gt; Please consider making these references instead of pointers if either is guaranteed to be non-null, even if that means not matching the older function above.

I will make more things (this and the others) references, absolutely :)

&gt; &gt; Source/WebCore/page/Page.h:598
&gt; &gt; +    std::unique_ptr&lt;PageOverlayController&gt; m_pageOverlayController;
&gt; 
&gt; You could consider putting this on MainFrame instead of Page. That makes it easier to get to with fewer null checks needed.

That seems like a reasonable idea!

&gt; &gt; Source/WebCore/page/PageOverlay.h:107
&gt; &gt; +protected:
&gt; &gt; +    explicit PageOverlay(Client*, OverlayType);
&gt; 
&gt; Why protected instead of private? Is there going to be a class derived from this one?

I think not, in the end.

&gt; &gt; Source/WebCore/page/PageOverlay.h:114
&gt; &gt; +    Page* m_page;
&gt; 
&gt; Should be a reference rather than a pointer.

An overlay can exist without a page (and can move between pages), so I&apos;m not sure about that one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1038007</commentid>
    <comment_count>7</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2014-09-29 12:18:45 -0700</bug_when>
    <thetext>Looks like this patch breaks Mac WK2.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1038129</commentid>
    <comment_count>8</comment_count>
      <attachid>238902</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2014-09-29 19:28:59 -0700</bug_when>
    <thetext>Created attachment 238902
wip</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1038290</commentid>
    <comment_count>9</comment_count>
      <attachid>238946</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2014-09-30 12:24:35 -0700</bug_when>
    <thetext>Created attachment 238946
windows</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1038307</commentid>
    <comment_count>10</comment_count>
      <attachid>238948</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2014-09-30 12:54:44 -0700</bug_when>
    <thetext>Created attachment 238948
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1038376</commentid>
    <comment_count>11</comment_count>
      <attachid>238971</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2014-09-30 15:30:17 -0700</bug_when>
    <thetext>Created attachment 238971
windows</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1038390</commentid>
    <comment_count>12</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2014-09-30 16:17:31 -0700</bug_when>
    <thetext>GTK and EFL failures are only in WebKit2.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1038391</commentid>
    <comment_count>13</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2014-09-30 16:17:31 -0700</bug_when>
    <thetext>&lt;rdar://problem/18508258&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1038429</commentid>
    <comment_count>14</comment_count>
      <attachid>238985</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2014-09-30 18:19:01 -0700</bug_when>
    <thetext>Created attachment 238985
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1038430</commentid>
    <comment_count>15</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2014-09-30 18:26:24 -0700</bug_when>
    <thetext>Darin&apos;s comment about moving PageOverlayController to MainFrame is still not done, I need to poke around a bit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1038617</commentid>
    <comment_count>16</comment_count>
      <attachid>239042</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2014-10-01 12:49:48 -0700</bug_when>
    <thetext>Created attachment 239042
on mainframe instead of page</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1038633</commentid>
    <comment_count>17</comment_count>
      <attachid>239045</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2014-10-01 13:46:48 -0700</bug_when>
    <thetext>Created attachment 239045
fix iOS build</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1038825</commentid>
    <comment_count>18</comment_count>
      <attachid>239096</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2014-10-02 02:31:00 -0700</bug_when>
    <thetext>Created attachment 239096
add some null checks

Found some issues while writing tests, adjusting the patch slightly to account for them (PageOverlayController::installPageOverlay, ::deviceScaleFactor, and ::notifyFlushRequired). Updated changelog as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1038929</commentid>
    <comment_count>19</comment_count>
      <attachid>239096</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2014-10-02 12:15:56 -0700</bug_when>
    <thetext>Comment on attachment 239096
add some null checks

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

&gt; Source/WebCore/page/PageOverlay.cpp:36
&gt; +#include &lt;wtf/CurrentTime.h&gt;

Should use &lt;chrono&gt;, but you don&apos;t have to do it as part of this patch.

&gt; Source/WebCore/page/PageOverlay.cpp:40
&gt; +static const double fadeAnimationDuration = 0.2;

This should be std::chrono::milliseconds (but you don&apos;t have to do it as part of this patch).

&gt; Source/WebCore/page/PageOverlayController.cpp:310
&gt; +    if (!m_pageOverlays.size())

if (m_pageOverlays.isEmpty())

&gt; Source/WebCore/page/PageOverlayController.cpp:311
&gt; +        return Vector&lt;String&gt;();

Can just be

return { };

&gt; Source/WebCore/page/PageOverlayController.cpp:319
&gt; +    return Vector&lt;String&gt;();

Can just be

return { };

&gt; Source/WebCore/page/PageOverlayController.cpp:324
&gt; +    for (auto it = m_overlayGraphicsLayers.begin(), end = m_overlayGraphicsLayers.end(); it != end; ++it) {

Modern for loop.

&gt; Source/WebCore/rendering/RenderLayerCompositor.cpp:648
&gt; +    return layerCount &gt; (rootLayer.isComposited() ? 1 : 0);

This reads a little weird, but OK.

&gt; Source/WebKit/mac/WebCoreSupport/WebChromeClient.mm:929
&gt; +    // FIXME: If we want view-relative page overlays in WebKit1, this would be the place to hook them up.

Legacy WebKit.

&gt; Source/WebKit/win/WebCoreSupport/WebChromeClient.cpp:757
&gt; +    // FIXME: If we want view-relative page overlays in WebKit1 on Windows, this would be the place to hook them up.

Legacy WebKit.

&gt; Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundlePageOverlay.cpp:139
&gt; +        WKRetainPtr&lt;WKTypeRef&gt; wkType = m_accessibilityClient.client().copyAccessibilityAttributeValue(toAPI(&amp;pageOverlay), toCopiedAPI(attribute), WKPointCreate(WKPointMake(parameter.x(), parameter.y())), m_accessibilityClient.client().base.clientInfo);

auto wkType =

&gt; Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundlePageOverlay.cpp:150
&gt; +        WKRetainPtr&lt;WKTypeRef&gt; wkType = m_accessibilityClient.client().copyAccessibilityAttributeValue(toAPI(&amp;pageOverlay), toCopiedAPI(attribute), WKPointCreate(WKPointMake(parameter.x(), parameter.y())), m_accessibilityClient.client().base.clientInfo);

auto wkType =

&gt; Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundlePageOverlay.cpp:162
&gt; +        WKRetainPtr&lt;WKArrayRef&gt; wkNames = m_accessibilityClient.client().copyAccessibilityAttributeNames(toAPI(&amp;pageOverlay), paramerizedNames, m_accessibilityClient.client().base.clientInfo);

auto wkNames =

&gt; Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundlePageOverlay.cpp:197
&gt; -    static_cast&lt;PageOverlayClientImpl*&gt;(toImpl(bundlePageOverlayRef)-&gt;client())-&gt;setAccessibilityClient(client);
&gt; +    static_cast&lt;PageOverlayClientImpl*&gt;(&amp;toImpl(bundlePageOverlayRef)-&gt;client())-&gt;setAccessibilityClient(client);

Can static_cast to PageOverlayClientImpl&amp; here instead.

&gt; Source/WebKit2/WebProcess/WebCoreSupport/WebChromeClient.cpp:844
&gt; +    if (auto drawingArea = m_page-&gt;drawingArea())
&gt; +        return drawingArea-&gt;graphicsLayerFactory();

Not liking that drawingArea can return null...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1038973</commentid>
    <comment_count>20</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2014-10-02 14:08:27 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/174231</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1039106</commentid>
    <comment_count>21</comment_count>
    <who name="Carlos Alberto Lopez Perez">clopez</who>
    <bug_when>2014-10-02 20:07:02 -0700</bug_when>
    <thetext>(In reply to comment #20)
&gt; http://trac.webkit.org/changeset/174231

This broke both the GTK and EFL ports :\</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1039108</commentid>
    <comment_count>22</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2014-10-02 20:18:00 -0700</bug_when>
    <thetext>(In reply to comment #21)
&gt; (In reply to comment #20)
&gt; &gt; http://trac.webkit.org/changeset/174231
&gt; 
&gt; This broke both the GTK and EFL ports :\

Hopefully only WebKit2, though? I thought I got the WebCore part building.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>238773</attachid>
            <date>2014-09-27 04:25:18 -0700</date>
            <delta_ts>2014-09-28 17:22:26 -0700</delta_ts>
            <desc>patch</desc>
            <filename>pageoverlay.diff</filename>
            <type>text/plain</type>
            <size>159129</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluIGIvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS5leHAuaW4KaW5kZXggNDQ0NWQ1MC4uNDI0YTJmZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5l
eHAuaW4KQEAgLTE4Nyw2ICsxODcsMTIgQEAgX19aTjdXZWJDb3JlMTFNZW1vcnlDYWNoZTE4cmVz
b3VyY2VGb3JSZXF1ZXN0RVJLTlNfMTVSZXNvdXJjZVJlcXVlc3RFTlNfOVNlc3Npb24KIF9fWk43
V2ViQ29yZTExTWVtb3J5Q2FjaGUxOWdldE9yaWdpbnNXaXRoQ2FjaGVFUk4zV1RGN0hhc2hTZXRJ
TlMxXzZSZWZQdHJJTlNfMTRTZWN1cml0eU9yaWdpbkVFRU5TXzE4U2VjdXJpdHlPcmlnaW5IYXNo
RU5TMV8xMEhhc2hUcmFpdHNJUzVfRUVFRQogX19aTjdXZWJDb3JlMTFNZW1vcnlDYWNoZTIwcmVt
b3ZlSW1hZ2VGcm9tQ2FjaGVFUktOU18zVVJMRVJLTjNXVEY2U3RyaW5nRQogX19aTjdXZWJDb3Jl
MTFNZW1vcnlDYWNoZTI1cmVtb3ZlUmVzb3VyY2VzV2l0aE9yaWdpbkVQTlNfMTRTZWN1cml0eU9y
aWdpbkUKK19fWk43V2ViQ29yZTExUGFnZU92ZXJsYXkxNXNldE5lZWRzRGlzcGxheUVSS05TXzdJ
bnRSZWN0RQorX19aTjdXZWJDb3JlMTFQYWdlT3ZlcmxheTE1c2V0TmVlZHNEaXNwbGF5RXYKK19f
Wk43V2ViQ29yZTExUGFnZU92ZXJsYXkyMHN0b3BGYWRlT3V0QW5pbWF0aW9uRXYKK19fWk43V2Vi
Q29yZTExUGFnZU92ZXJsYXk1Y2xlYXJFdgorX19aTjdXZWJDb3JlMTFQYWdlT3ZlcmxheTVsYXll
ckV2CitfX1pON1dlYkNvcmUxMVBhZ2VPdmVybGF5NmNyZWF0ZUVQTlMwXzZDbGllbnRFTlMwXzEx
T3ZlcmxheVR5cGVFCiBfX1pON1dlYkNvcmUxMVNRTFJlc3VsdE9rRQogX19aTjdXZWJDb3JlMTFV
UkxXaXRoRGF0YUVQNk5TRGF0YVA1TlNVUkwKIF9fWk43V2ViQ29yZTExZ2V0VVJMQnl0ZXNFUEs3
X19DRlVSTFJOM1dURjZWZWN0b3JJY0xtNTEyRU5TM18xNUNyYXNoT25PdmVyZmxvd0VFRQpAQCAt
OTA5LDYgKzkxNSwxMSBAQCBfX1pON1dlYkNvcmUyMU1lbW9yeVByZXNzdXJlSGFuZGxlcjdpbnN0
YWxsRXYKIF9fWk43V2ViQ29yZTIxTmV0d29ya1N0b3JhZ2VTZXNzaW9uMjFkZWZhdWx0U3RvcmFn
ZVNlc3Npb25FdgogX19aTjdXZWJDb3JlMjFOZXR3b3JrU3RvcmFnZVNlc3Npb24yNXN3aXRjaFRv
TmV3VGVzdGluZ1Nlc3Npb25FdgogX19aTjdXZWJDb3JlMjFOZXR3b3JrU3RvcmFnZVNlc3Npb24y
OGNyZWF0ZVByaXZhdGVCcm93c2luZ1Nlc3Npb25FUktOM1dURjZTdHJpbmdFCitfX1pON1dlYkNv
cmUyMVBhZ2VPdmVybGF5Q29udHJvbGxlcjE4aW5zdGFsbFBhZ2VPdmVybGF5RU4zV1RGMTBQYXNz
UmVmUHRySU5TXzExUGFnZU92ZXJsYXlFRUVOUzNfOEZhZGVNb2RlRQorX19aTjdXZWJDb3JlMjFQ
YWdlT3ZlcmxheUNvbnRyb2xsZXIyMHVuaW5zdGFsbFBhZ2VPdmVybGF5RVBOU18xMVBhZ2VPdmVy
bGF5RU5TMV84RmFkZU1vZGVFCitfX1pON1dlYkNvcmUyMVBhZ2VPdmVybGF5Q29udHJvbGxlcjMy
Y29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVzTmFtZXNFYgorX19aTjdXZWJDb3JlMjFQYWdlT3Zl
cmxheUNvbnRyb2xsZXI0M2NvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlQm9vbFZhbHVlRm9yUG9p
bnRFTjNXVEY2U3RyaW5nRU5TXzEwRmxvYXRQb2ludEVSYgorX19aTjdXZWJDb3JlMjFQYWdlT3Zl
cmxheUNvbnRyb2xsZXI0NWNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlU3RyaW5nVmFsdWVGb3JQ
b2ludEVOM1dURjZTdHJpbmdFTlNfMTBGbG9hdFBvaW50RVJTMl8KIF9fWk43V2ViQ29yZTIxUGxh
dGZvcm1LZXlib2FyZEV2ZW50MjRkaXNhbWJpZ3VhdGVLZXlEb3duRXZlbnRFTlNfMTNQbGF0Zm9y
bUV2ZW50NFR5cGVFYgogX19aTjdXZWJDb3JlMjFSZW1vdGVDb21tYW5kTGlzdGVuZXI2Y3JlYXRl
RVJOU18yN1JlbW90ZUNvbW1hbmRMaXN0ZW5lckNsaWVudEUKIF9fWk43V2ViQ29yZTIxUmVzb3Vy
Y2VMb2FkU2NoZWR1bGVyMjBzZXJ2ZVBlbmRpbmdSZXF1ZXN0c0VOU18yMFJlc291cmNlTG9hZFBy
aW9yaXR5RQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCmluZGV4IGE2OWU5NmMuLmNjMDE4NzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTEwOTAsNiArMTA5MCwxMCBAQAog
CQkyRDVBNTkyRjE1MjUyNTIzMDAzNkVFNTEgLyogSW1hZ2VPcmllbnRhdGlvbi5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODc0OEQ3NDEyQ0MzRjg5
MDAxRkJBNDEgLyogSW1hZ2VPcmllbnRhdGlvbi5jcHAgKi87IH07CiAJCTJENUE1OTMxMTUyNTI1
RDAwMDM2RUU1MSAvKiBJbWFnZU9yaWVudGF0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODc0OEQ2NjEyQ0MzNzYzMDAxRkJBNDEgLyogSW1hZ2VP
cmllbnRhdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTJENUJDNDI3MTZGODgyRUUwMDcwNDhEMCAvKiBTZWN1cml0eVBvbGljeVZpb2xhdGlv
bkV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAy
RDVCQzQyNTE2Rjg4MkJFMDA3MDQ4RDAgLyogU2VjdXJpdHlQb2xpY3lWaW9sYXRpb25FdmVudC5o
ICovOyB9OworCQkyRDVDOUNGRjE5QzdCNTJFMDBCM0M1QzEgLyogUGFnZU92ZXJsYXkuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkQ1QzlDRkIxOUM3
QjUyRTAwQjNDNUMxIC8qIFBhZ2VPdmVybGF5LmNwcCAqLzsgfTsKKwkJMkQ1QzlEMDAxOUM3QjUy
RTAwQjNDNUMxIC8qIFBhZ2VPdmVybGF5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAyRDVDOUNGQzE5QzdCNTJFMDBCM0M1QzEgLyogUGFnZU92ZXJsYXku
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkyRDVD
OUQwMTE5QzdCNTJFMDBCM0M1QzEgLyogUGFnZU92ZXJsYXlDb250cm9sbGVyLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJENUM5Q0ZEMTlDN0I1MkUw
MEIzQzVDMSAvKiBQYWdlT3ZlcmxheUNvbnRyb2xsZXIuY3BwICovOyB9OworCQkyRDVDOUQwMjE5
QzdCNTJFMDBCM0M1QzEgLyogUGFnZU92ZXJsYXlDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRDVDOUNGRTE5QzdCNTJFMDBCM0M1QzEg
LyogUGFnZU92ZXJsYXlDb250cm9sbGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJMkQ2RTQ2ODQxN0Q2NjBGNTAwRUNGOEJCIC8qIFBERkRvY3Vt
ZW50SW1hZ2VNYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAyRDZFNDY4MjE3RDY2MEY1MDBFQ0Y4QkIgLyogUERGRG9jdW1lbnRJbWFnZU1hYy5tbSAq
LzsgfTsKIAkJMkQ3MEJBMTMxODA3NERERjAwMDE5MDhBIC8qIFBsYXRmb3JtQ0FMYXllck1hYy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkQ3MEJBMTIx
ODA3NERERjAwMDE5MDhBIC8qIFBsYXRmb3JtQ0FMYXllck1hYy5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTJENzBCQTE1MTgwNzRGODYwMDAxOTA4
QSAvKiBQbGF0Zm9ybUNBTGF5ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMkQ3MEJBMTQxODA3NEY4NTAwMDE5MDhBIC8qIFBsYXRmb3JtQ0FMYXll
ci5jcHAgKi87IH07CkBAIC04MDgxLDYgKzgwODUsMTAgQEAKIAkJMkQ0NkYwNEYxN0I5NkZEMjAw
NTY0N0YwIC8qIEludFNpemUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gSW50U2l6ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJENUJDNDI1MTZG
ODgyQkUwMDcwNDhEMCAvKiBTZWN1cml0eVBvbGljeVZpb2xhdGlvbkV2ZW50LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNlY3VyaXR5UG9saWN5VmlvbGF0aW9uRXZlbnQuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkQ1QkM0MjYxNkY4ODJCRTAwNzA0OEQwIC8q
IFNlY3VyaXR5UG9saWN5VmlvbGF0aW9uRXZlbnQuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9
IFNlY3VyaXR5UG9saWN5VmlvbGF0aW9uRXZlbnQuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkyRDVDOUNGQjE5QzdCNTJFMDBCM0M1QzEgLyogUGFnZU92ZXJsYXkuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUGFnZU92ZXJsYXkuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkyRDVDOUNGQzE5QzdCNTJFMDBCM0M1QzEgLyogUGFnZU92
ZXJsYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGFnZU92ZXJsYXkuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMkQ1QzlDRkQxOUM3QjUyRTAwQjNDNUMxIC8q
IFBhZ2VPdmVybGF5Q29udHJvbGxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBQYWdlT3ZlcmxheUNvbnRyb2xsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkyRDVDOUNGRTE5QzdCNTJFMDBCM0M1QzEgLyogUGFnZU92ZXJsYXlDb250cm9sbGVy
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBhZ2VPdmVybGF5Q29udHJvbGxl
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyRDZFNDY4MjE3RDY2MEY1MDBFQ0Y4
QkIgLyogUERGRG9jdW1lbnRJbWFnZU1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9i
amNwcDsgcGF0aCA9IFBERkRvY3VtZW50SW1hZ2VNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTJENzBCQTEyMTgwNzREREYwMDAxOTA4QSAvKiBQbGF0Zm9ybUNBTGF5ZXJNYWMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gUGxhdGZvcm1DQUxheWVyTWFjLmg7
IHBhdGggPSBjYS9tYWMvUGxhdGZvcm1DQUxheWVyTWFjLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTJENzBCQTE0MTgwNzRGODUwMDAxOTA4QSAvKiBQbGF0Zm9ybUNBTGF5ZXIuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gUGxhdGZvcm1DQUxheWVyLmNw
cDsgcGF0aCA9IGNhL1BsYXRmb3JtQ0FMYXllci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC0xNjU5MCw2ICsxNjU5OCwxMCBAQAogCQkJCTkzMDJCMEJFMEQ3OUY4MkMwMEM3RUU4
MyAvKiBQYWdlR3JvdXAuaCAqLywKIAkJCQk3QTY3NEJEOTBGOUVCRjRFMDA2Q0YwOTkgLyogUGFn
ZUdyb3VwTG9hZERlZmVycmVyLmNwcCAqLywKIAkJCQk3QTY3NEJEQTBGOUVCRjRFMDA2Q0YwOTkg
LyogUGFnZUdyb3VwTG9hZERlZmVycmVyLmggKi8sCisJCQkJMkQ1QzlDRkIxOUM3QjUyRTAwQjND
NUMxIC8qIFBhZ2VPdmVybGF5LmNwcCAqLywKKwkJCQkyRDVDOUNGQzE5QzdCNTJFMDBCM0M1QzEg
LyogUGFnZU92ZXJsYXkuaCAqLywKKwkJCQkyRDVDOUNGRDE5QzdCNTJFMDBCM0M1QzEgLyogUGFn
ZU92ZXJsYXlDb250cm9sbGVyLmNwcCAqLywKKwkJCQkyRDVDOUNGRTE5QzdCNTJFMDBCM0M1QzEg
LyogUGFnZU92ZXJsYXlDb250cm9sbGVyLmggKi8sCiAJCQkJMzcxRTY1Q0QxMzY2MUVFRDAwQkVF
REIwIC8qIFBhZ2VTZXJpYWxpemVyLmNwcCAqLywKIAkJCQkzNzFFNjVDQjEzNjYxRURDMDBCRUVE
QjAgLyogUGFnZVNlcmlhbGl6ZXIuaCAqLywKIAkJCQlBNzE5N0YyNTE3NTY4QUU1MDA3Qjk0NDIg
LyogUGFnZVRocm90dGxlci5jcHAgKi8sCkBAIC0yMzY1Myw2ICsyMzY2NSw3IEBACiAJCQkJOTdC
QzZBMjExNTA1RjA4MTAwMUI3NEFDIC8qIERhdGFiYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5
N0JDNkEyNDE1MDVGMDgxMDAxQjc0QUMgLyogRGF0YWJhc2VBdXRob3JpemVyLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlGRTE2Q0ZENDE2OUQxREVEMDBEM0EwQzcgLyogRGF0YWJhc2VCYWNrZW5kLmgg
aW4gSGVhZGVycyAqLywKKwkJCQkyRDVDOUQwMjE5QzdCNTJFMDBCM0M1QzEgLyogUGFnZU92ZXJs
YXlDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk5N0JDNjlEQjE1MDVGMDc2MDAxQjc0
QUMgLyogRGF0YWJhc2VCYWNrZW5kQmFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkU2RjZBQjAx
NjlFMDU3NTAwRkMzMEEyIC8qIERhdGFiYXNlQmFja2VuZENvbnRleHQuaCBpbiBIZWFkZXJzICov
LAogCQkJCUZFMTZDRkQ2MTY5RDFERUQwMEQzQTBDNyAvKiBEYXRhYmFzZUJhY2tlbmRTeW5jLmgg
aW4gSGVhZGVycyAqLywKQEAgLTI1NjE4LDYgKzI1NjMxLDcgQEAKIAkJCQk0MzkwNDZFQzEyREEy
NUU4MDBBRjgwQTkgLyogUmVuZGVyTWF0aE1MVG9rZW4uaCBpbiBIZWFkZXJzICovLAogCQkJCTQz
OTA0NkVBMTJEQTI1RTgwMEFGODBBMiAvKiBSZW5kZXJNYXRoTUxVbmRlck92ZXIuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUU0QzI3OTU5MENGOTc0MTkwMEU5N0I5OCAvKiBSZW5kZXJNZWRpYS5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJMkQ1QzlEMDAxOUM3QjUyRTAwQjNDNUMxIC8qIFBhZ2VPdmVybGF5
LmggaW4gSGVhZGVycyAqLywKIAkJCQlERUJDQ0REMjE2NjQ2RTgyMDBBNDUyRTEgLyogUmVuZGVy
TWVkaWFDb250cm9sRWxlbWVudHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTQxRkEzMDNGMTMxNkMy
OUMwMEMwQkZDNSAvKiBSZW5kZXJNZWRpYUNvbnRyb2xzLmggaW4gSGVhZGVycyAqLywKIAkJCQlB
QkRERkU3QTBBNUM2RTcwMDBBM0UxMUQgLyogUmVuZGVyTWVudUxpc3QuaCBpbiBIZWFkZXJzICov
LApAQCAtMjgwMDUsNiArMjgwMTksNyBAQAogCQkJCUE1ODQwRTFDMTg3Qjc0RDUwMDg0M0IxMCAv
KiBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
NzFCMUUxMjYxNjQwNDkxQTAwQjE4ODBBIC8qIEluc3BlY3RvckxheWVyVHJlZUFnZW50LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTUwNEFBQ0NEMTgzNDQ1NTkwMEUzRDlCQyAvKiBJbnNwZWN0b3JO
b2RlRmluZGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTJENUM5RDAxMTlDN0I1MkUwMEIzQzVD
MSAvKiBQYWdlT3ZlcmxheUNvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0M1MjJE
NEIxNUI0NzdFODAwOUI3Qzk1IC8qIEluc3BlY3Rvck92ZXJsYXkuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJNEY2RkRENjQxMzQxREVERDAwMUY4RUUzIC8qIEluc3BlY3RvclBhZ2VBZ2VudC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk5OUNDMEI2NjE4QkU5RjE1MDA2Q0VCQ0MgLyogSW5zcGVjdG9y
UmVwbGF5QWdlbnQuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yODA3Myw2ICsyODA4OCw3IEBACiAJ
CQkJQkNDMDY1ODcwRjNDRTJBNzAwQ0QyRDg3IC8qIEpTQ2xpZW50UmVjdC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlCQ0MwNjU4OTBGM0NFMkE3MDBDRDJEODcgLyogSlNDbGllbnRSZWN0TGlzdC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk1QzQzMDRCNTE5MUFFRjQ2MDAwRTJCQzAgLyogSlNFWFRT
aGFkZXJUZXh0dXJlTE9ELmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTJENUM5Q0ZGMTlDN0I1MkUw
MEIzQzVDMSAvKiBQYWdlT3ZlcmxheS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3NkZCOUZGODE5
QTczRTNBMDA0MjA1NjIgLyogSlNBdXRvY29tcGxldGVFcnJvckV2ZW50LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUJDQTgzRTRGMEQ3Q0UxRTkwMDM0MjFBOCAvKiBKU0RhdGFUcmFuc2Zlci5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlCQ0E4M0U1MjBEN0NFMjA1MDAzNDIxQTggLyogSlNEYXRhVHJh
bnNmZXJDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvRW1wdHlDbGllbnRzLmggYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGll
bnRzLmgKaW5kZXggZmYwOGY2MC4uOWNkMTJiNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
bG9hZGVyL0VtcHR5Q2xpZW50cy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9FbXB0eUNs
aWVudHMuaApAQCAtMTgyLDYgKzE4Miw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc2Ny
b2xsUmVjdEludG9WaWV3KGNvbnN0IEludFJlY3QmKSBjb25zdCBvdmVycmlkZSB7IH0KIAogICAg
IHZpcnR1YWwgdm9pZCBhdHRhY2hSb290R3JhcGhpY3NMYXllcihGcmFtZSosIEdyYXBoaWNzTGF5
ZXIqKSBvdmVycmlkZSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoVmlld092ZXJsYXlHcmFw
aGljc0xheWVyKEZyYW1lKiwgR3JhcGhpY3NMYXllciopIG92ZXJyaWRlIHsgfQogICAgIHZpcnR1
YWwgdm9pZCBzZXROZWVkc09uZVNob3REcmF3aW5nU3luY2hyb25pemF0aW9uKCkgb3ZlcnJpZGUg
eyB9CiAgICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlQ29tcG9zaXRpbmdMYXllckZsdXNoKCkgb3Zl
cnJpZGUgeyB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50
LmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZUNsaWVudC5oCmluZGV4IDBjYTA0NmMuLjM5
NjM3ZWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaApAQCAtMzAwLDYgKzMwMCw3IEBA
IHB1YmxpYzoKIAogICAgIC8vIFBhc3MgMCBhcyB0aGUgR3JhcGhpY3NMYXllciB0byBkZXRhdGNo
IHRoZSByb290IGxheWVyLgogICAgIHZpcnR1YWwgdm9pZCBhdHRhY2hSb290R3JhcGhpY3NMYXll
cihGcmFtZSosIEdyYXBoaWNzTGF5ZXIqKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGF0dGFjaFZp
ZXdPdmVybGF5R3JhcGhpY3NMYXllcihGcmFtZSosIEdyYXBoaWNzTGF5ZXIqKSA9IDA7CiAgICAg
Ly8gU2V0cyBhIGZsYWcgdG8gc3BlY2lmeSB0aGF0IHRoZSBuZXh0IHRpbWUgY29udGVudCBpcyBk
cmF3biB0byB0aGUgd2luZG93LAogICAgIC8vIHRoZSBjaGFuZ2VzIGFwcGVhciBvbiB0aGUgc2Ny
ZWVuIGluIHN5bmNocm9ueSB3aXRoIHVwZGF0ZXMgdG8gR3JhcGhpY3NMYXllcnMuCiAgICAgdmly
dHVhbCB2b2lkIHNldE5lZWRzT25lU2hvdERyYXdpbmdTeW5jaHJvbml6YXRpb24oKSA9IDA7CkBA
IC0zMDksOCArMzEwLDYgQEAgcHVibGljOgogICAgIC8vIFJldHVybnMgd2hldGhlciBvciBub3Qg
dGhlIGNsaWVudCBjYW4gcmVuZGVyIHRoZSBjb21wb3NpdGVkIGxheWVyLAogICAgIC8vIHJlZ2Fy
ZGxlc3Mgb2YgdGhlIHNldHRpbmdzLgogICAgIHZpcnR1YWwgYm9vbCBhbGxvd3NBY2NlbGVyYXRl
ZENvbXBvc2l0aW5nKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQotICAgIC8vIFN1cHBseSBhIGxh
eWVyIHRoYXQgd2lsbCBhZGRlZCBhcyBhbiBvdmVybGF5IG92ZXIgb3RoZXIgZG9jdW1lbnQgbGF5
ZXJzIChzY3JvbGxpbmcgd2l0aCB0aGUgZG9jdW1lbnQpLgotICAgIHZpcnR1YWwgR3JhcGhpY3NM
YXllciogZG9jdW1lbnRPdmVybGF5TGF5ZXJGb3JGcmFtZShGcmFtZSYpIHsgcmV0dXJuIG51bGxw
dHI7IH0KIAogICAgIGVudW0gQ29tcG9zaXRpbmdUcmlnZ2VyIHsKICAgICAgICAgVGhyZWVEVHJh
bnNmb3JtVHJpZ2dlciA9IDEgPDwgMCwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
RXZlbnRIYW5kbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcApp
bmRleCAzYzE1MjE3Li44YWQwNTY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2
ZW50SGFuZGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3Bw
CkBAIC02Niw2ICs2Niw3IEBACiAjaW5jbHVkZSAiTW91c2VFdmVudC5oIgogI2luY2x1ZGUgIk1v
dXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMuaCIKICNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVk
ZSAiUGFnZU92ZXJsYXlDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1FdmVudC5oIgog
I2luY2x1ZGUgIlBsYXRmb3JtS2V5Ym9hcmRFdmVudC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtV2hl
ZWxFdmVudC5oIgpAQCAtMTY0NCw2ICsxNjQ1LDEwIEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpoYW5k
bGVNb3VzZVByZXNzRXZlbnQoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBwbGF0Zm9ybU1vdXNl
CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAorICAgIFBhZ2UqIHBhZ2UgPSBtX2ZyYW1l
LnBhZ2UoKTsKKyAgICBpZiAocGFnZSAmJiBwYWdlLT5wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKS5o
YW5kbGVNb3VzZUV2ZW50KHBsYXRmb3JtTW91c2VFdmVudCkpCisgICAgICAgIHJldHVybiB0cnVl
OworCiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKICAgICBib29sIGRlZmF1bHRQcmV2ZW50ZWQg
PSBkaXNwYXRjaFN5bnRoZXRpY1RvdWNoRXZlbnRJZkVuYWJsZWQocGxhdGZvcm1Nb3VzZUV2ZW50
KTsKICAgICBpZiAoZGVmYXVsdFByZXZlbnRlZCkKQEAgLTE4MzcsMTAgKzE4NDIsMTMgQEAgYm9v
bCBFdmVudEhhbmRsZXI6Om1vdXNlTW92ZWQoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBldmVu
dCkKICAgICBSZWZQdHI8RnJhbWVWaWV3PiBwcm90ZWN0b3IobV9mcmFtZS52aWV3KCkpOwogICAg
IE1heGltdW1EdXJhdGlvblRyYWNrZXIgbWF4RHVyYXRpb25UcmFja2VyKCZtX21heE1vdXNlTW92
ZWREdXJhdGlvbik7CiAKKyAgICBQYWdlKiBwYWdlID0gbV9mcmFtZS5wYWdlKCk7CisgICAgaWYg
KHBhZ2UgJiYgcGFnZS0+cGFnZU92ZXJsYXlDb250cm9sbGVyKCkuaGFuZGxlTW91c2VFdmVudChl
dmVudCkpCisgICAgICAgIHJldHVybiB0cnVlOworCiAgICAgSGl0VGVzdFJlc3VsdCBob3ZlcmVk
Tm9kZSA9IEhpdFRlc3RSZXN1bHQoTGF5b3V0UG9pbnQoKSk7CiAgICAgYm9vbCByZXN1bHQgPSBo
YW5kbGVNb3VzZU1vdmVFdmVudChldmVudCwgJmhvdmVyZWROb2RlKTsKIAotICAgIFBhZ2UqIHBh
Z2UgPSBtX2ZyYW1lLnBhZ2UoKTsKICAgICBpZiAoIXBhZ2UpCiAgICAgICAgIHJldHVybiByZXN1
bHQ7CiAKQEAgLTIwMjAsNiArMjAyOCwxMCBAQCBib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxlTW91
c2VSZWxlYXNlRXZlbnQoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBwbGF0Zm9ybU1vdQogCiAg
ICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5zZXRDYXJldEJsaW5raW5nU3VzcGVuZGVkKGZhbHNlKTsK
IAorICAgIFBhZ2UqIHBhZ2UgPSBtX2ZyYW1lLnBhZ2UoKTsKKyAgICBpZiAocGFnZSAmJiBwYWdl
LT5wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKS5oYW5kbGVNb3VzZUV2ZW50KHBsYXRmb3JtTW91c2VF
dmVudCkpCisgICAgICAgIHJldHVybiB0cnVlOworCiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykK
ICAgICBib29sIGRlZmF1bHRQcmV2ZW50ZWQgPSBkaXNwYXRjaFN5bnRoZXRpY1RvdWNoRXZlbnRJ
ZkVuYWJsZWQocGxhdGZvcm1Nb3VzZUV2ZW50KTsKICAgICBpZiAoZGVmYXVsdFByZXZlbnRlZCkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAppbmRleCBkZjZmZWU0Li41MDlmNTQxYiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvRnJhbWVWaWV3LmNwcApAQCAtNjAsNiArNjAsNyBAQAogI2luY2x1ZGUgIk1lbW9y
eUNhY2hlLmgiCiAjaW5jbHVkZSAiTWVtb3J5UHJlc3N1cmVIYW5kbGVyLmgiCiAjaW5jbHVkZSAi
T3ZlcmZsb3dFdmVudC5oIgorI2luY2x1ZGUgIlBhZ2VPdmVybGF5Q29udHJvbGxlci5oIgogI2lu
Y2x1ZGUgIlByb2dyZXNzVHJhY2tlci5oIgogI2luY2x1ZGUgIlJlbmRlckVtYmVkZGVkT2JqZWN0
LmgiCiAjaW5jbHVkZSAiUmVuZGVyRnVsbFNjcmVlbi5oIgpAQCAtNDMwLDEwICs0MzEsMTEgQEAg
dm9pZCBGcmFtZVZpZXc6OnNldEZyYW1lUmVjdChjb25zdCBJbnRSZWN0JiBuZXdSZWN0KQogICAg
IGlmIChuZXdSZWN0ID09IG9sZFJlY3QpCiAgICAgICAgIHJldHVybjsKIAorICAgIFBhZ2UqIHBh
Z2UgPSBmcmFtZSgpLnBhZ2UoKTsKKwogI2lmIEVOQUJMRShURVhUX0FVVE9TSVpJTkcpCiAgICAg
Ly8gQXV0b3NpemVkIGZvbnQgc2l6ZXMgZGVwZW5kIG9uIHRoZSB3aWR0aCBvZiB0aGUgdmlld2lu
ZyBhcmVhLgogICAgIGlmIChuZXdSZWN0LndpZHRoKCkgIT0gb2xkUmVjdC53aWR0aCgpKSB7Ci0g
ICAgICAgIFBhZ2UqIHBhZ2UgPSBmcmFtZSgpLnBhZ2UoKTsKICAgICAgICAgaWYgKGZyYW1lKCku
aXNNYWluRnJhbWUoKSAmJiBwYWdlLT5zZXR0aW5ncygpLnRleHRBdXRvc2l6aW5nRW5hYmxlZCgp
KSB7CiAgICAgICAgICAgICBmb3IgKEZyYW1lKiBmcmFtZSA9ICZwYWdlLT5tYWluRnJhbWUoKTsg
ZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQoKSkKICAgICAgICAgICAg
ICAgICBmcmFtZSgpLmRvY3VtZW50KCktPnRleHRBdXRvc2l6ZXIoKS0+cmVjYWxjdWxhdGVNdWx0
aXBsaWVycygpOwpAQCAtNDQ5LDYgKzQ1MSw5IEBAIHZvaWQgRnJhbWVWaWV3OjpzZXRGcmFtZVJl
Y3QoY29uc3QgSW50UmVjdCYgbmV3UmVjdCkKICAgICAgICAgaWYgKHJlbmRlclZpZXctPnVzZXND
b21wb3NpdGluZygpKQogICAgICAgICAgICAgcmVuZGVyVmlldy0+Y29tcG9zaXRvcigpLmZyYW1l
Vmlld0RpZENoYW5nZVNpemUoKTsKICAgICB9CisKKyAgICBpZiAoZnJhbWUoKS5pc01haW5GcmFt
ZSgpKQorICAgICAgICBwYWdlLT5wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKS5kaWRDaGFuZ2VWaWV3
U2l6ZSgpOwogfQogCiAjaWYgRU5BQkxFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FKQpAQCAtNTYy
LDYgKzU2Nyw5IEBAIHZvaWQgRnJhbWVWaWV3OjpzZXRDb250ZW50c1NpemUoY29uc3QgSW50U2l6
ZSYgc2l6ZSkKIAogICAgIHBhZ2UtPmNocm9tZSgpLmNvbnRlbnRzU2l6ZUNoYW5nZWQoJmZyYW1l
KCksIHNpemUpOyAvLyBOb3RpZnkgb25seS4KIAorICAgIGlmIChmcmFtZSgpLmlzTWFpbkZyYW1l
KCkpCisgICAgICAgIHBhZ2UtPnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLmRpZENoYW5nZURvY3Vt
ZW50U2l6ZSgpOworCiAgICAgQVNTRVJUKG1fZGVmZXJTZXROZWVkc0xheW91dHMpOwogICAgIG1f
ZGVmZXJTZXROZWVkc0xheW91dHMtLTsKICAgICAKQEAgLTIwNDgsNyArMjA1Niw3IEBAIHZvaWQg
RnJhbWVWaWV3OjpzZXRGaXhlZFZpc2libGVDb250ZW50UmVjdChjb25zdCBJbnRSZWN0JiB2aXNp
YmxlQ29udGVudFJlY3QpCiAgICAgICAgIC8vIFVwZGF0ZSB0aGUgc2Nyb2xsLWJhcnMgdG8gY2Fs
Y3VsYXRlIG5ldyBwYWdlLXN0ZXAgc2l6ZS4KICAgICAgICAgdXBkYXRlU2Nyb2xsYmFycyhzY3Jv
bGxPZmZzZXQoKSk7CiAgICAgfQotICAgIGZyYW1lKCkubG9hZGVyKCkuY2xpZW50KCkuZGlkQ2hh
bmdlU2Nyb2xsT2Zmc2V0KCk7CisgICAgZGlkQ2hhbmdlU2Nyb2xsT2Zmc2V0KCk7CiB9CiAjZW5k
aWYKIApAQCAtMjA2MSw2ICsyMDY5LDE0IEBAIHZvaWQgRnJhbWVWaWV3OjpzZXRWaWV3cG9ydENv
bnN0cmFpbmVkT2JqZWN0c05lZWRMYXlvdXQoKQogICAgICAgICByZW5kZXJlci0+c2V0TmVlZHNM
YXlvdXQoKTsKIH0KIAordm9pZCBGcmFtZVZpZXc6OmRpZENoYW5nZVNjcm9sbE9mZnNldCgpCit7
CisgICAgaWYgKFBhZ2UqIHBhZ2UgPSBmcmFtZSgpLnBhZ2UoKSkKKyAgICAgICAgcGFnZS0+cGFn
ZU92ZXJsYXlDb250cm9sbGVyKCkuZGlkU2Nyb2xsRnJhbWUoZnJhbWUoKSk7CisKKyAgICBmcmFt
ZSgpLmxvYWRlcigpLmNsaWVudCgpLmRpZENoYW5nZVNjcm9sbE9mZnNldCgpOworfQorCiB2b2lk
IEZyYW1lVmlldzo6c2Nyb2xsUG9zaXRpb25DaGFuZ2VkVmlhUGxhdGZvcm1XaWRnZXQoY29uc3Qg
SW50UG9pbnQmIG9sZFBvc2l0aW9uLCBjb25zdCBJbnRQb2ludCYgbmV3UG9zaXRpb24pCiB7CiAg
ICAgdXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNjcm9sbGluZygpOwpAQCAtMzIyMyw3ICszMjM5
LDcgQEAgdm9pZCBGcmFtZVZpZXc6OnNjcm9sbFRvKGNvbnN0IEludFNpemUmIG5ld09mZnNldCkK
ICAgICBTY3JvbGxWaWV3OjpzY3JvbGxUbyhuZXdPZmZzZXQpOwogICAgIGlmIChvZmZzZXQgIT0g
c2Nyb2xsT2Zmc2V0KCkpCiAgICAgICAgIHNjcm9sbFBvc2l0aW9uQ2hhbmdlZChvbGRQb3NpdGlv
biwgc2Nyb2xsUG9zaXRpb24oKSk7Ci0gICAgZnJhbWUoKS5sb2FkZXIoKS5jbGllbnQoKS5kaWRD
aGFuZ2VTY3JvbGxPZmZzZXQoKTsKKyAgICBkaWRDaGFuZ2VTY3JvbGxPZmZzZXQoKTsKIH0KIAog
ZmxvYXQgRnJhbWVWaWV3OjphZGp1c3RTY3JvbGxTdGVwRm9yRml4ZWRDb250ZW50KGZsb2F0IHN0
ZXAsIFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBn
cmFudWxhcml0eSkKQEAgLTQyOTIsNyArNDMwOCw3IEBAIGJvb2wgRnJhbWVWaWV3Ojp3aGVlbEV2
ZW50KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYgd2hlZWxFdmVudCkKICAgICAgICAgaWYgKG9m
ZnNldCAhPSBuZXdPZmZzZXQpIHsKICAgICAgICAgICAgIFNjcm9sbFZpZXc6OnNjcm9sbFRvKG5l
d09mZnNldCk7CiAgICAgICAgICAgICBzY3JvbGxQb3NpdGlvbkNoYW5nZWQob2xkUG9zaXRpb24s
IHNjcm9sbFBvc2l0aW9uKCkpOwotICAgICAgICAgICAgZnJhbWUoKS5sb2FkZXIoKS5jbGllbnQo
KS5kaWRDaGFuZ2VTY3JvbGxPZmZzZXQoKTsKKyAgICAgICAgICAgIGRpZENoYW5nZVNjcm9sbE9m
ZnNldCgpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KQEAgLTQ2MTUs
NiArNDYzMSw5IEBAIHZvaWQgRnJhbWVWaWV3OjpzZXRFeHBvc2VkUmVjdChGbG9hdFJlY3QgZXhw
b3NlZFJlY3QpCiAKICAgICBpZiAoYXV0byogdmlldyA9IHJlbmRlclZpZXcoKSkKICAgICAgICAg
dmlldy0+Y29tcG9zaXRvcigpLnNjaGVkdWxlTGF5ZXJGbHVzaChmYWxzZSAvKiBjYW5UaHJvdHRs
ZSAqLyk7CisKKyAgICBpZiAoYXV0byogcGFnZSA9IGZyYW1lKCkucGFnZSgpKQorICAgICAgICBw
YWdlLT5wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKS5kaWRDaGFuZ2VFeHBvc2VkUmVjdCgpOwogfQog
ICAgIAogdm9pZCBGcmFtZVZpZXc6OnNldFZpZXdwb3J0U2l6ZUZvckNTU1ZpZXdwb3J0VW5pdHMo
SW50U2l6ZSBzaXplKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcu
aCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmgKaW5kZXggMzc1Njk2YS4uOTJhYTli
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5oCkBAIC01MTEsNiArNTExLDggQEAgcHVibGljOgog
CiAgICAgdmlydHVhbCBmbG9hdCBhZGp1c3RTY3JvbGxTdGVwRm9yRml4ZWRDb250ZW50KGZsb2F0
IHN0ZXAsIFNjcm9sbGJhck9yaWVudGF0aW9uLCBTY3JvbGxHcmFudWxhcml0eSkgb3ZlcnJpZGU7
CiAKKyAgICB2b2lkIGRpZENoYW5nZVNjcm9sbE9mZnNldCgpOworCiBwcm90ZWN0ZWQ6CiAgICAg
dmlydHVhbCBib29sIHNjcm9sbENvbnRlbnRzRmFzdFBhdGgoY29uc3QgSW50U2l6ZSYgc2Nyb2xs
RGVsdGEsIGNvbnN0IEludFJlY3QmIHJlY3RUb1Njcm9sbCwgY29uc3QgSW50UmVjdCYgY2xpcFJl
Y3QpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxDb250ZW50c1Nsb3dQYXRoKGNv
bnN0IEludFJlY3QmIHVwZGF0ZVJlY3QpIG92ZXJyaWRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGFnZS9QYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAKaW5kZXgg
MjZiOGQxNy4uNTM4ZGZkNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCkBAIC02MCw2ICs2MCw3IEBACiAj
aW5jbHVkZSAiUGFnZUNvbnNvbGVDbGllbnQuaCIKICNpbmNsdWRlICJQYWdlRGVidWdnYWJsZS5o
IgogI2luY2x1ZGUgIlBhZ2VHcm91cC5oIgorI2luY2x1ZGUgIlBhZ2VPdmVybGF5Q29udHJvbGxl
ci5oIgogI2luY2x1ZGUgIlBhZ2VUaHJvdHRsZXIuaCIKICNpbmNsdWRlICJQbHVnSW5DbGllbnQu
aCIKICNpbmNsdWRlICJQbHVnaW5EYXRhLmgiCkBAIC0yMDMsNiArMjA0LDcgQEAgUGFnZTo6UGFn
ZShQYWdlQ2xpZW50cyYgcGFnZUNsaWVudHMpCiAgICAgLCBtX3Zpc2l0ZWRMaW5rU3RvcmUoV1RG
Ojptb3ZlKHBhZ2VDbGllbnRzLnZpc2l0ZWRMaW5rU3RvcmUpKQogICAgICwgbV9zZXNzaW9uSUQo
U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpCiAgICAgLCBtX2lzQ2xvc2luZyhmYWxzZSkK
KyAgICAsIG1fcGFnZU92ZXJsYXlDb250cm9sbGVyKHN0ZDo6bWFrZV91bmlxdWU8UGFnZU92ZXJs
YXlDb250cm9sbGVyPigqdGhpcykpCiB7CiAgICAgQVNTRVJUKG1fZWRpdG9yQ2xpZW50KTsKICAg
ICAKQEAgLTgxMSw2ICs4MTMsOCBAQCB2b2lkIFBhZ2U6OnNldERldmljZVNjYWxlRmFjdG9yKGZs
b2F0IHNjYWxlRmFjdG9yKQogCiAgICAgcGFnZUNhY2hlKCktPm1hcmtQYWdlc0ZvckZ1bGxTdHls
ZVJlY2FsYyh0aGlzKTsKICAgICBHcmFwaGljc0NvbnRleHQ6OnVwZGF0ZURvY3VtZW50TWFya2Vy
UmVzb3VyY2VzKCk7CisKKyAgICBtX3BhZ2VPdmVybGF5Q29udHJvbGxlci0+ZGlkQ2hhbmdlRGV2
aWNlU2NhbGVGYWN0b3IoKTsKIH0KIAogdm9pZCBQYWdlOjpzZXRUb3BDb250ZW50SW5zZXQoZmxv
YXQgY29udGVudEluc2V0KQpAQCAtMTYxOCw3ICsxNjIyLDYgQEAgdm9pZCBQYWdlOjpzZXRTZXNz
aW9uSUQoU2Vzc2lvbklEIHNlc3Npb25JRCkKIAogICAgIGZvciAoYXV0byYgdmlldyA6IHBsdWdp
blZpZXdzKCkpCiAgICAgICAgIHZpZXctPnByaXZhdGVCcm93c2luZ1N0YXRlQ2hhbmdlZChzZXNz
aW9uSUQuaXNFcGhlbWVyYWwoKSk7Ci0KIH0KIAogUGFnZTo6UGFnZUNsaWVudHM6OlBhZ2VDbGll
bnRzKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5oIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9QYWdlLmgKaW5kZXggODZmMmFmZC4uNjk3MDBmNiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmgK
QEAgLTg0LDYgKzg0LDcgQEAgY2xhc3MgUGFnZUFjdGl2aXR5QXNzZXJ0aW9uVG9rZW47CiBjbGFz
cyBQYWdlQ29uc29sZUNsaWVudDsKIGNsYXNzIFBhZ2VEZWJ1Z2dhYmxlOwogY2xhc3MgUGFnZUdy
b3VwOworY2xhc3MgUGFnZU92ZXJsYXlDb250cm9sbGVyOwogY2xhc3MgUGFnZVRocm90dGxlcjsK
IGNsYXNzIFBsdWdJbkNsaWVudDsKIGNsYXNzIFBsdWdpbkRhdGE7CkBAIC0xNjgsNiArMTY5LDgg
QEAgcHVibGljOgogICAgIE1haW5GcmFtZSYgbWFpbkZyYW1lKCkgeyBBU1NFUlQobV9tYWluRnJh
bWUpOyByZXR1cm4gKm1fbWFpbkZyYW1lOyB9CiAgICAgY29uc3QgTWFpbkZyYW1lJiBtYWluRnJh
bWUoKSBjb25zdCB7IEFTU0VSVChtX21haW5GcmFtZSk7IHJldHVybiAqbV9tYWluRnJhbWU7IH0K
IAorICAgIFBhZ2VPdmVybGF5Q29udHJvbGxlciYgcGFnZU92ZXJsYXlDb250cm9sbGVyKCkgeyBy
ZXR1cm4gKm1fcGFnZU92ZXJsYXlDb250cm9sbGVyOyB9CisKICAgICBib29sIG9wZW5lZEJ5RE9N
KCkgY29uc3Q7CiAgICAgdm9pZCBzZXRPcGVuZWRCeURPTSgpOwogCkBAIC01OTEsNiArNTk0LDgg
QEAgcHJpdmF0ZToKICAgICBTZXNzaW9uSUQgbV9zZXNzaW9uSUQ7CiAKICAgICBib29sIG1faXND
bG9zaW5nOworCisgICAgc3RkOjp1bmlxdWVfcHRyPFBhZ2VPdmVybGF5Q29udHJvbGxlcj4gbV9w
YWdlT3ZlcmxheUNvbnRyb2xsZXI7CiB9OwogCiBpbmxpbmUgUGFnZUdyb3VwJiBQYWdlOjpncm91
cCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VPdmVybGF5LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvUGFnZU92ZXJsYXkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjcwY2E3MTEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL1BhZ2VPdmVybGF5LmNwcApAQCAtMCwwICsxLDI1NyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQYWdlT3ZlcmxheS5oIgorCisjaW5jbHVkZSAiRnJh
bWVWaWV3LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiTWFpbkZy
YW1lLmgiCisjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlBhZ2VPdmVybGF5Q29udHJvbGxl
ci5oIgorI2luY2x1ZGUgIlBsYXRmb3JtTW91c2VFdmVudC5oIgorI2luY2x1ZGUgIlNjcm9sbGJh
clRoZW1lLmgiCisjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworc3RhdGljIGNvbnN0IGRvdWJsZSBmYWRlQW5pbWF0aW9uRHVyYXRpb24gPSAwLjI7
CitzdGF0aWMgY29uc3QgZG91YmxlIGZhZGVBbmltYXRpb25GcmFtZVJhdGUgPSAzMDsKKworUGFz
c1JlZlB0cjxQYWdlT3ZlcmxheT4gUGFnZU92ZXJsYXk6OmNyZWF0ZShDbGllbnQqIGNsaWVudCwg
T3ZlcmxheVR5cGUgb3ZlcmxheVR5cGUpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBQYWdl
T3ZlcmxheShjbGllbnQsIG92ZXJsYXlUeXBlKSk7Cit9CisKK1BhZ2VPdmVybGF5OjpQYWdlT3Zl
cmxheShDbGllbnQqIGNsaWVudCwgT3ZlcmxheVR5cGUgb3ZlcmxheVR5cGUpCisgICAgOiBtX2Ns
aWVudChjbGllbnQpCisgICAgLCBtX3BhZ2UobnVsbHB0cikKKyAgICAsIG1fZmFkZUFuaW1hdGlv
blRpbWVyKFJ1bkxvb3A6Om1haW4oKSwgdGhpcywgJlBhZ2VPdmVybGF5OjpmYWRlQW5pbWF0aW9u
VGltZXJGaXJlZCkKKyAgICAsIG1fZmFkZUFuaW1hdGlvblN0YXJ0VGltZSgwKQorICAgICwgbV9m
YWRlQW5pbWF0aW9uRHVyYXRpb24oZmFkZUFuaW1hdGlvbkR1cmF0aW9uKQorICAgICwgbV9mYWRl
QW5pbWF0aW9uVHlwZShOb0FuaW1hdGlvbikKKyAgICAsIG1fZnJhY3Rpb25GYWRlZEluKDEpCisg
ICAgLCBtX292ZXJsYXlUeXBlKG92ZXJsYXlUeXBlKQorICAgICwgbV9iYWNrZ3JvdW5kQ29sb3Io
Q29sb3I6OnRyYW5zcGFyZW50KQoreworfQorCitQYWdlT3ZlcmxheTo6flBhZ2VPdmVybGF5KCkK
K3sKK30KKworSW50UmVjdCBQYWdlT3ZlcmxheTo6Ym91bmRzKCkgY29uc3QKK3sKKyAgICBpZiAo
IW1fb3ZlcnJpZGVGcmFtZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBJbnRSZWN0KEludFBv
aW50KCksIG1fb3ZlcnJpZGVGcmFtZS5zaXplKCkpOworCisgICAgRnJhbWVWaWV3KiBmcmFtZVZp
ZXcgPSBtX3BhZ2UtPm1haW5GcmFtZSgpLnZpZXcoKTsKKworICAgIGlmICghZnJhbWVWaWV3KQor
ICAgICAgICByZXR1cm4gSW50UmVjdCgpOworCisgICAgc3dpdGNoIChtX292ZXJsYXlUeXBlKSB7
CisgICAgY2FzZSBPdmVybGF5VHlwZTo6VmlldzogeworICAgICAgICBpbnQgd2lkdGggPSBmcmFt
ZVZpZXctPndpZHRoKCk7CisgICAgICAgIGludCBoZWlnaHQgPSBmcmFtZVZpZXctPmhlaWdodCgp
OworCisgICAgICAgIGlmICghU2Nyb2xsYmFyVGhlbWU6OnRoZW1lKCktPnVzZXNPdmVybGF5U2Ny
b2xsYmFycygpKSB7CisgICAgICAgICAgICBpZiAoZnJhbWVWaWV3LT52ZXJ0aWNhbFNjcm9sbGJh
cigpKQorICAgICAgICAgICAgICAgIHdpZHRoIC09IGZyYW1lVmlldy0+dmVydGljYWxTY3JvbGxi
YXIoKS0+d2lkdGgoKTsKKyAgICAgICAgICAgIGlmIChmcmFtZVZpZXctPmhvcml6b250YWxTY3Jv
bGxiYXIoKSkKKyAgICAgICAgICAgICAgICBoZWlnaHQgLT0gZnJhbWVWaWV3LT5ob3Jpem9udGFs
U2Nyb2xsYmFyKCktPmhlaWdodCgpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBJbnRSZWN0
KDAsIDAsIHdpZHRoLCBoZWlnaHQpOworICAgIH0KKyAgICBjYXNlIE92ZXJsYXlUeXBlOjpEb2N1
bWVudDoKKyAgICAgICAgcmV0dXJuIEludFJlY3QoSW50UG9pbnQoKSwgZnJhbWVWaWV3LT5jb250
ZW50c1NpemUoKSk7CisgICAgfTsKKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJl
dHVybiBJbnRSZWN0KEludFBvaW50KCksIGZyYW1lVmlldy0+Y29udGVudHNTaXplKCkpOworfQor
CitJbnRSZWN0IFBhZ2VPdmVybGF5OjpmcmFtZSgpIGNvbnN0Cit7CisgICAgaWYgKCFtX292ZXJy
aWRlRnJhbWUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gbV9vdmVycmlkZUZyYW1lOworCisg
ICAgcmV0dXJuIGJvdW5kcygpOworfQorCit2b2lkIFBhZ2VPdmVybGF5OjpzZXRGcmFtZShJbnRS
ZWN0IGZyYW1lKQoreworICAgIGlmIChtX292ZXJyaWRlRnJhbWUgPT0gZnJhbWUpCisgICAgICAg
IHJldHVybjsKKworICAgIG1fb3ZlcnJpZGVGcmFtZSA9IGZyYW1lOworCisgICAgaWYgKG1fcGFn
ZSkKKyAgICAgICAgbV9wYWdlLT5wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKS5kaWRDaGFuZ2VPdmVy
bGF5RnJhbWUoKnRoaXMpOworfQorCit2b2lkIFBhZ2VPdmVybGF5OjpzZXRCYWNrZ3JvdW5kQ29s
b3IoUkdCQTMyIGJhY2tncm91bmRDb2xvcikKK3sKKyAgICBpZiAobV9iYWNrZ3JvdW5kQ29sb3Ig
PT0gYmFja2dyb3VuZENvbG9yKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2JhY2tncm91bmRD
b2xvciA9IGJhY2tncm91bmRDb2xvcjsKKworICAgIGlmIChtX3BhZ2UpCisgICAgICAgIG1fcGFn
ZS0+cGFnZU92ZXJsYXlDb250cm9sbGVyKCkuZGlkQ2hhbmdlT3ZlcmxheUJhY2tncm91bmRDb2xv
cigqdGhpcyk7Cit9CisKK3ZvaWQgUGFnZU92ZXJsYXk6OnNldFBhZ2UoUGFnZSogcGFnZSkKK3sK
KyAgICBtX2NsaWVudC0+d2lsbE1vdmVUb1BhZ2UodGhpcywgcGFnZSk7CisgICAgbV9wYWdlID0g
cGFnZTsKKyAgICBtX2NsaWVudC0+ZGlkTW92ZVRvUGFnZSh0aGlzLCBwYWdlKTsKKworICAgIG1f
ZmFkZUFuaW1hdGlvblRpbWVyLnN0b3AoKTsKK30KKwordm9pZCBQYWdlT3ZlcmxheTo6c2V0TmVl
ZHNEaXNwbGF5KGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCkKK3sKKyAgICBpZiAoIW1fcGFnZSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgbV9wYWdlLT5wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKS5z
ZXRQYWdlT3ZlcmxheU9wYWNpdHkoKnRoaXMsIG1fZnJhY3Rpb25GYWRlZEluKTsKKyAgICBtX3Bh
Z2UtPnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLnNldFBhZ2VPdmVybGF5TmVlZHNEaXNwbGF5KCp0
aGlzLCBkaXJ0eVJlY3QpOworfQorCit2b2lkIFBhZ2VPdmVybGF5OjpzZXROZWVkc0Rpc3BsYXko
KQoreworICAgIHNldE5lZWRzRGlzcGxheShib3VuZHMoKSk7Cit9CisKK3ZvaWQgUGFnZU92ZXJs
YXk6OmRyYXdSZWN0KEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBJbnRS
ZWN0JiBkaXJ0eVJlY3QpCit7CisgICAgLy8gSWYgdGhlIGRpcnR5IHJlY3QgaXMgb3V0c2lkZSB0
aGUgYm91bmRzLCBpZ25vcmUgaXQuCisgICAgSW50UmVjdCBwYWludFJlY3QgPSBpbnRlcnNlY3Rp
b24oZGlydHlSZWN0LCBib3VuZHMoKSk7CisgICAgaWYgKHBhaW50UmVjdC5pc0VtcHR5KCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZl
cihncmFwaGljc0NvbnRleHQpOworICAgIG1fY2xpZW50LT5kcmF3UmVjdCh0aGlzLCBncmFwaGlj
c0NvbnRleHQsIHBhaW50UmVjdCk7Cit9CisgICAgCitib29sIFBhZ2VPdmVybGF5Ojptb3VzZUV2
ZW50KGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgbW91c2VFdmVudCkKK3sKKyAgICBJbnRQb2lu
dCBtb3VzZVBvc2l0aW9uSW5PdmVybGF5Q29vcmRpbmF0ZXMobW91c2VFdmVudC5wb3NpdGlvbigp
KTsKKworICAgIGlmIChtX292ZXJsYXlUeXBlID09IFBhZ2VPdmVybGF5OjpPdmVybGF5VHlwZTo6
RG9jdW1lbnQpCisgICAgICAgIG1vdXNlUG9zaXRpb25Jbk92ZXJsYXlDb29yZGluYXRlcyA9IG1f
cGFnZS0+bWFpbkZyYW1lKCkudmlldygpLT5yb290Vmlld1RvQ29udGVudHMobW91c2VQb3NpdGlv
bkluT3ZlcmxheUNvb3JkaW5hdGVzKTsKKworICAgIC8vIElnbm9yZSBldmVudHMgb3V0c2lkZSB0
aGUgYm91bmRzLgorICAgIGlmICghYm91bmRzKCkuY29udGFpbnMobW91c2VQb3NpdGlvbkluT3Zl
cmxheUNvb3JkaW5hdGVzKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIG1f
Y2xpZW50LT5tb3VzZUV2ZW50KHRoaXMsIG1vdXNlRXZlbnQpOworfQorCit2b2lkIFBhZ2VPdmVy
bGF5OjpkaWRTY3JvbGxGcmFtZShGcmFtZSYgZnJhbWUpCit7CisgICAgbV9jbGllbnQtPmRpZFNj
cm9sbEZyYW1lKHRoaXMsIGZyYW1lKTsKK30KKworYm9vbCBQYWdlT3ZlcmxheTo6Y29weUFjY2Vz
c2liaWxpdHlBdHRyaWJ1dGVTdHJpbmdWYWx1ZUZvclBvaW50KFN0cmluZyBhdHRyaWJ1dGUsIEZs
b2F0UG9pbnQgcGFyYW1ldGVyLCBTdHJpbmcmIHZhbHVlKQoreworICAgIHJldHVybiBtX2NsaWVu
dC0+Y29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVTdHJpbmdWYWx1ZUZvclBvaW50KHRoaXMsIGF0
dHJpYnV0ZSwgcGFyYW1ldGVyLCB2YWx1ZSk7Cit9CisKK2Jvb2wgUGFnZU92ZXJsYXk6OmNvcHlB
Y2Nlc3NpYmlsaXR5QXR0cmlidXRlQm9vbFZhbHVlRm9yUG9pbnQoU3RyaW5nIGF0dHJpYnV0ZSwg
RmxvYXRQb2ludCBwYXJhbWV0ZXIsIGJvb2wmIHZhbHVlKQoreworICAgIHJldHVybiBtX2NsaWVu
dC0+Y29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVCb29sVmFsdWVGb3JQb2ludCh0aGlzLCBhdHRy
aWJ1dGUsIHBhcmFtZXRlciwgdmFsdWUpOworfQorCitWZWN0b3I8U3RyaW5nPiBQYWdlT3Zlcmxh
eTo6Y29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVOYW1lcyhib29sIHBhcmFtZXRlcml6ZWROYW1l
cykKK3sKKyAgICByZXR1cm4gbV9jbGllbnQtPmNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlTmFt
ZXModGhpcywgcGFyYW1ldGVyaXplZE5hbWVzKTsKK30KKwordm9pZCBQYWdlT3ZlcmxheTo6c3Rh
cnRGYWRlSW5BbmltYXRpb24oKQoreworICAgIG1fZnJhY3Rpb25GYWRlZEluID0gMDsKKyAgICBt
X2ZhZGVBbmltYXRpb25UeXBlID0gRmFkZUluQW5pbWF0aW9uOworCisgICAgc3RhcnRGYWRlQW5p
bWF0aW9uKCk7Cit9CisKK3ZvaWQgUGFnZU92ZXJsYXk6OnN0YXJ0RmFkZU91dEFuaW1hdGlvbigp
Cit7CisgICAgbV9mcmFjdGlvbkZhZGVkSW4gPSAxOworICAgIG1fZmFkZUFuaW1hdGlvblR5cGUg
PSBGYWRlT3V0QW5pbWF0aW9uOworCisgICAgc3RhcnRGYWRlQW5pbWF0aW9uKCk7Cit9CisKK3Zv
aWQgUGFnZU92ZXJsYXk6OnN0b3BGYWRlT3V0QW5pbWF0aW9uKCkKK3sKKyAgICBtX2ZyYWN0aW9u
RmFkZWRJbiA9IDEuMDsKKyAgICBtX2ZhZGVBbmltYXRpb25UaW1lci5zdG9wKCk7Cit9CisKK3Zv
aWQgUGFnZU92ZXJsYXk6OnN0YXJ0RmFkZUFuaW1hdGlvbigpCit7CisgICAgbV9mYWRlQW5pbWF0
aW9uU3RhcnRUaW1lID0gY3VycmVudFRpbWUoKTsKKyAgICBtX2ZhZGVBbmltYXRpb25UaW1lci5z
dGFydFJlcGVhdGluZygxIC8gZmFkZUFuaW1hdGlvbkZyYW1lUmF0ZSk7Cit9CisKK3ZvaWQgUGFn
ZU92ZXJsYXk6OmZhZGVBbmltYXRpb25UaW1lckZpcmVkKCkKK3sKKyAgICBmbG9hdCBhbmltYXRp
b25Qcm9ncmVzcyA9IChjdXJyZW50VGltZSgpIC0gbV9mYWRlQW5pbWF0aW9uU3RhcnRUaW1lKSAv
IG1fZmFkZUFuaW1hdGlvbkR1cmF0aW9uOworCisgICAgaWYgKGFuaW1hdGlvblByb2dyZXNzID49
IDEuMCkKKyAgICAgICAgYW5pbWF0aW9uUHJvZ3Jlc3MgPSAxLjA7CisKKyAgICBkb3VibGUgc2lu
ZSA9IHNpbihwaU92ZXJUd29GbG9hdCAqIGFuaW1hdGlvblByb2dyZXNzKTsKKyAgICBmbG9hdCBm
YWRlQW5pbWF0aW9uVmFsdWUgPSBzaW5lICogc2luZTsKKworICAgIG1fZnJhY3Rpb25GYWRlZElu
ID0gKG1fZmFkZUFuaW1hdGlvblR5cGUgPT0gRmFkZUluQW5pbWF0aW9uKSA/IGZhZGVBbmltYXRp
b25WYWx1ZSA6IDEgLSBmYWRlQW5pbWF0aW9uVmFsdWU7CisgICAgbV9wYWdlLT5wYWdlT3Zlcmxh
eUNvbnRyb2xsZXIoKS5zZXRQYWdlT3ZlcmxheU9wYWNpdHkoKnRoaXMsIG1fZnJhY3Rpb25GYWRl
ZEluKTsKKworICAgIGlmIChhbmltYXRpb25Qcm9ncmVzcyA9PSAxLjApIHsKKyAgICAgICAgbV9m
YWRlQW5pbWF0aW9uVGltZXIuc3RvcCgpOworCisgICAgICAgIGJvb2wgd2FzRmFkaW5nT3V0ID0g
bV9mYWRlQW5pbWF0aW9uVHlwZSA9PSBGYWRlT3V0QW5pbWF0aW9uOworICAgICAgICBtX2ZhZGVB
bmltYXRpb25UeXBlID0gTm9BbmltYXRpb247CisKKyAgICAgICAgLy8gSWYgdGhpcyB3YXMgYSBm
YWRlIG91dCwgZ28gYWhlYWQgYW5kIHVuaW5zdGFsbCB0aGUgcGFnZSBvdmVybGF5LgorICAgICAg
ICBpZiAod2FzRmFkaW5nT3V0KQorICAgICAgICAgICAgbV9wYWdlLT5wYWdlT3ZlcmxheUNvbnRy
b2xsZXIoKS51bmluc3RhbGxQYWdlT3ZlcmxheSh0aGlzLCBQYWdlT3ZlcmxheTo6RmFkZU1vZGU6
OkRvTm90RmFkZSk7CisgICAgfQorfQorCit2b2lkIFBhZ2VPdmVybGF5OjpjbGVhcigpCit7Cisg
ICAgbV9wYWdlLT5wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKS5jbGVhclBhZ2VPdmVybGF5KCp0aGlz
KTsKK30KKworR3JhcGhpY3NMYXllciogUGFnZU92ZXJsYXk6OmxheWVyKCkKK3sKKyAgICByZXR1
cm4gbV9wYWdlLT5wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKS5sYXllckZvck92ZXJsYXkoKnRoaXMp
OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvUGFnZU92ZXJsYXkuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZU92ZXJsYXkuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMWE5ZmM1Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlT3ZlcmxheS5oCkBAIC0wLDAgKzEsMTM3IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2lmbmRlZiBQYWdlT3ZlcmxheV9oCisjZGVmaW5lIFBhZ2VPdmVybGF5
X2gKKworI2luY2x1ZGUgIkNvbG9yLmgiCisjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgorI2luY2x1
ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0
Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitjbGFzcyBGcmFtZTsKK2NsYXNzIEdyYXBoaWNzQ29udGV4dDsKK2NsYXNzIEdy
YXBoaWNzTGF5ZXI7CitjbGFzcyBQYWdlOworY2xhc3MgUGxhdGZvcm1Nb3VzZUV2ZW50OworCitj
bGFzcyBQYWdlT3ZlcmxheSA6IHB1YmxpYyBSZWZDb3VudGVkPFBhZ2VPdmVybGF5PiB7CisgICAg
V1RGX01BS0VfTk9OQ09QWUFCTEUoUGFnZU92ZXJsYXkpOworICAgIFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOworcHVibGljOgorICAgIGNsYXNzIENsaWVudCB7CisgICAgcHJvdGVjdGVkOgorICAg
ICAgICB2aXJ0dWFsIH5DbGllbnQoKSB7IH0KKyAgICAKKyAgICBwdWJsaWM6CisgICAgICAgIHZp
cnR1YWwgdm9pZCBwYWdlT3ZlcmxheURlc3Ryb3llZChQYWdlT3ZlcmxheSopID0gMDsKKyAgICAg
ICAgdmlydHVhbCB2b2lkIHdpbGxNb3ZlVG9QYWdlKFBhZ2VPdmVybGF5KiwgUGFnZSopID0gMDsK
KyAgICAgICAgdmlydHVhbCB2b2lkIGRpZE1vdmVUb1BhZ2UoUGFnZU92ZXJsYXkqLCBQYWdlKikg
PSAwOworICAgICAgICB2aXJ0dWFsIHZvaWQgZHJhd1JlY3QoUGFnZU92ZXJsYXkqLCBHcmFwaGlj
c0NvbnRleHQmLCBjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpID0gMDsKKyAgICAgICAgdmlydHVh
bCBib29sIG1vdXNlRXZlbnQoUGFnZU92ZXJsYXkqLCBjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQm
KSA9IDA7CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRTY3JvbGxGcmFtZShQYWdlT3ZlcmxheSos
IEZyYW1lJikgeyB9CisKKyAgICAgICAgdmlydHVhbCBib29sIGNvcHlBY2Nlc3NpYmlsaXR5QXR0
cmlidXRlU3RyaW5nVmFsdWVGb3JQb2ludChQYWdlT3ZlcmxheSosIFN0cmluZyAvKiBhdHRyaWJ1
dGUgKi8sIEZsb2F0UG9pbnQgLyogcGFyYW1ldGVyICovLCBTdHJpbmcmIC8qIHZhbHVlICovKSB7
IHJldHVybiBmYWxzZTsgfQorICAgICAgICB2aXJ0dWFsIGJvb2wgY29weUFjY2Vzc2liaWxpdHlB
dHRyaWJ1dGVCb29sVmFsdWVGb3JQb2ludChQYWdlT3ZlcmxheSosIFN0cmluZyAvKiBhdHRyaWJ1
dGUgKi8sIEZsb2F0UG9pbnQgLyogcGFyYW1ldGVyICovLCBib29sJiAvKiB2YWx1ZSAqLykgIHsg
cmV0dXJuIGZhbHNlOyB9CisgICAgICAgIHZpcnR1YWwgVmVjdG9yPFN0cmluZz4gY29weUFjY2Vz
c2liaWxpdHlBdHRyaWJ1dGVOYW1lcyhQYWdlT3ZlcmxheSosIGJvb2wgLyogcGFyYW1ldGVyaXpl
ZE5hbWVzICovKSAgeyByZXR1cm4gVmVjdG9yPFN0cmluZz4oKTsgfQorICAgIH07CisKKyAgICBl
bnVtIGNsYXNzIE92ZXJsYXlUeXBlIHsKKyAgICAgICAgVmlldywgLy8gRml4ZWQgdG8gdGhlIHZp
ZXcgc2l6ZTsgZG9lcyBub3Qgc2NhbGUgb3Igc2Nyb2xsIHdpdGggdGhlIGRvY3VtZW50LCByZXBh
aW50cyBvbiBzY3JvbGwuCisgICAgICAgIERvY3VtZW50LCAvLyBTY2FsZXMgYW5kIHNjcm9sbHMg
d2l0aCB0aGUgZG9jdW1lbnQuCisgICAgfTsKKworICAgIHN0YXRpYyBQYXNzUmVmUHRyPFBhZ2VP
dmVybGF5PiBjcmVhdGUoQ2xpZW50KiwgT3ZlcmxheVR5cGUgPSBPdmVybGF5VHlwZTo6Vmlldyk7
CisgICAgdmlydHVhbCB+UGFnZU92ZXJsYXkoKTsKKworICAgIHZvaWQgc2V0UGFnZShQYWdlKik7
CisgICAgdm9pZCBzZXROZWVkc0Rpc3BsYXkoY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KTsKKyAg
ICB2b2lkIHNldE5lZWRzRGlzcGxheSgpOworCisgICAgdm9pZCBkcmF3UmVjdChHcmFwaGljc0Nv
bnRleHQmLCBjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpOworICAgIGJvb2wgbW91c2VFdmVudChj
b25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmKTsKKyAgICB2b2lkIGRpZFNjcm9sbEZyYW1lKEZyYW1l
Jik7CisKKyAgICBib29sIGNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlU3RyaW5nVmFsdWVGb3JQ
b2ludChTdHJpbmcgYXR0cmlidXRlLCBGbG9hdFBvaW50IHBhcmFtZXRlciwgU3RyaW5nJiB2YWx1
ZSk7CisgICAgYm9vbCBjb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZUJvb2xWYWx1ZUZvclBvaW50
KFN0cmluZyBhdHRyaWJ1dGUsIEZsb2F0UG9pbnQgcGFyYW1ldGVyLCBib29sJiB2YWx1ZSk7Cisg
ICAgVmVjdG9yPFN0cmluZz4gY29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVOYW1lcyhib29sIHBh
cmFtZXRlcml6ZWROYW1lcyk7CisgICAgCisgICAgdm9pZCBzdGFydEZhZGVJbkFuaW1hdGlvbigp
OworICAgIHZvaWQgc3RhcnRGYWRlT3V0QW5pbWF0aW9uKCk7CisgICAgdm9pZCBzdG9wRmFkZU91
dEFuaW1hdGlvbigpOworCisgICAgdm9pZCBjbGVhcigpOworCisgICAgQ2xpZW50KiBjbGllbnQo
KSBjb25zdCB7IHJldHVybiBtX2NsaWVudDsgfQorCisgICAgZW51bSBjbGFzcyBGYWRlTW9kZSB7
IERvTm90RmFkZSwgRmFkZSB9OworCisgICAgT3ZlcmxheVR5cGUgb3ZlcmxheVR5cGUoKSB7IHJl
dHVybiBtX292ZXJsYXlUeXBlOyB9CisKKyAgICBJbnRSZWN0IGJvdW5kcygpIGNvbnN0OworICAg
IEludFJlY3QgZnJhbWUoKSBjb25zdDsKKyAgICB2b2lkIHNldEZyYW1lKEludFJlY3QpOworCisg
ICAgUkdCQTMyIGJhY2tncm91bmRDb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2dyb3VuZENv
bG9yOyB9CisgICAgdm9pZCBzZXRCYWNrZ3JvdW5kQ29sb3IoUkdCQTMyKTsKKworICAgIEdyYXBo
aWNzTGF5ZXIqIGxheWVyKCk7CisgICAgCitwcm90ZWN0ZWQ6CisgICAgZXhwbGljaXQgUGFnZU92
ZXJsYXkoQ2xpZW50KiwgT3ZlcmxheVR5cGUpOworCitwcml2YXRlOgorICAgIHZvaWQgc3RhcnRG
YWRlQW5pbWF0aW9uKCk7CisgICAgdm9pZCBmYWRlQW5pbWF0aW9uVGltZXJGaXJlZCgpOworCisg
ICAgQ2xpZW50KiBtX2NsaWVudDsKKyAgICBQYWdlKiBtX3BhZ2U7CisKKyAgICBSdW5Mb29wOjpU
aW1lcjxQYWdlT3ZlcmxheT4gbV9mYWRlQW5pbWF0aW9uVGltZXI7CisgICAgZG91YmxlIG1fZmFk
ZUFuaW1hdGlvblN0YXJ0VGltZTsKKyAgICBkb3VibGUgbV9mYWRlQW5pbWF0aW9uRHVyYXRpb247
CisKKyAgICBlbnVtIEZhZGVBbmltYXRpb25UeXBlIHsKKyAgICAgICAgTm9BbmltYXRpb24sCisg
ICAgICAgIEZhZGVJbkFuaW1hdGlvbiwKKyAgICAgICAgRmFkZU91dEFuaW1hdGlvbiwKKyAgICB9
OworCisgICAgRmFkZUFuaW1hdGlvblR5cGUgbV9mYWRlQW5pbWF0aW9uVHlwZTsKKyAgICBmbG9h
dCBtX2ZyYWN0aW9uRmFkZWRJbjsKKworICAgIE92ZXJsYXlUeXBlIG1fb3ZlcmxheVR5cGU7Cisg
ICAgSW50UmVjdCBtX292ZXJyaWRlRnJhbWU7CisKKyAgICBSR0JBMzIgbV9iYWNrZ3JvdW5kQ29s
b3I7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFBhZ2VPdmVybGF5
X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZU92ZXJsYXlDb250cm9sbGVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZU92ZXJsYXlDb250cm9sbGVyLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNDQwM2IzCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlT3ZlcmxheUNvbnRyb2xsZXIuY3BwCkBAIC0wLDAg
KzEsMzQwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBh
Z2VPdmVybGF5Q29udHJvbGxlci5oIgorCisjaW5jbHVkZSAiQ2hyb21lLmgiCisjaW5jbHVkZSAi
Q2hyb21lQ2xpZW50LmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZVZpZXcu
aCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJHcmFwaGljc0xheWVy
LmgiCisjaW5jbHVkZSAiTWFpbkZyYW1lLmgiCisjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUg
IlBhZ2VPdmVybGF5LmgiCisjaW5jbHVkZSAiU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaCIKKyNpbmNs
dWRlICJTZXR0aW5ncy5oIgorI2luY2x1ZGUgIlRpbGVkQmFja2luZy5oIgorCisvLyBGSVhNRTog
U29tZW9uZSBuZWVkcyB0byBjYWxsIGRpZENoYW5nZVNldHRpbmdzKCkKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitQYWdlT3ZlcmxheUNvbnRyb2xsZXI6OlBhZ2VPdmVybGF5Q29udHJvbGxlcihQ
YWdlJiBwYWdlKQorICAgIDogbV9wYWdlKHBhZ2UpCisgICAgLCBtX2luaXRpYWxpemVkKGZhbHNl
KQoreworfQorCit2b2lkIFBhZ2VPdmVybGF5Q29udHJvbGxlcjo6Y3JlYXRlUm9vdExheWVyc0lm
TmVlZGVkKCkKK3sKKyAgICBpZiAobV9pbml0aWFsaXplZCkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgbV9pbml0aWFsaXplZCA9IHRydWU7CisKKyAgICBBU1NFUlQoIW1fZG9jdW1lbnRPdmVybGF5
Um9vdExheWVyKTsKKyAgICBBU1NFUlQoIW1fdmlld092ZXJsYXlSb290TGF5ZXIpOworCisgICAg
bV9kb2N1bWVudE92ZXJsYXlSb290TGF5ZXIgPSBHcmFwaGljc0xheWVyOjpjcmVhdGUobV9wYWdl
LmNocm9tZSgpLmNsaWVudCgpLmdyYXBoaWNzTGF5ZXJGYWN0b3J5KCksICp0aGlzKTsKKyAgICBt
X3ZpZXdPdmVybGF5Um9vdExheWVyID0gR3JhcGhpY3NMYXllcjo6Y3JlYXRlKG1fcGFnZS5jaHJv
bWUoKS5jbGllbnQoKS5ncmFwaGljc0xheWVyRmFjdG9yeSgpLCAqdGhpcyk7CisjaWZuZGVmIE5E
RUJVRworICAgIG1fZG9jdW1lbnRPdmVybGF5Um9vdExheWVyLT5zZXROYW1lKCJQYWdlIE92ZXJs
YXkgY29udGFpbmVyIChkb2N1bWVudC1yZWxhdGl2ZSkiKTsKKyAgICBtX3ZpZXdPdmVybGF5Um9v
dExheWVyLT5zZXROYW1lKCJQYWdlIE92ZXJsYXkgY29udGFpbmVyICh2aWV3LXJlbGF0aXZlKSIp
OworI2VuZGlmCit9CisKK3N0YXRpYyB2b2lkIHVwZGF0ZU92ZXJsYXlHZW9tZXRyeShQYWdlT3Zl
cmxheSYgb3ZlcmxheSwgR3JhcGhpY3NMYXllciYgZ3JhcGhpY3NMYXllcikKK3sKKyAgICBJbnRS
ZWN0IG92ZXJsYXlGcmFtZSA9IG92ZXJsYXkuZnJhbWUoKTsKKworICAgIGlmIChvdmVybGF5RnJh
bWUubG9jYXRpb24oKSA9PSBncmFwaGljc0xheWVyLnBvc2l0aW9uKCkgJiYgb3ZlcmxheUZyYW1l
LnNpemUoKSA9PSBncmFwaGljc0xheWVyLnNpemUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
Z3JhcGhpY3NMYXllci5zZXRQb3NpdGlvbihvdmVybGF5RnJhbWUubG9jYXRpb24oKSk7CisgICAg
Z3JhcGhpY3NMYXllci5zZXRTaXplKG92ZXJsYXlGcmFtZS5zaXplKCkpOworfQorCit2b2lkIFBh
Z2VPdmVybGF5Q29udHJvbGxlcjo6aW5zdGFsbFBhZ2VPdmVybGF5KFBhc3NSZWZQdHI8UGFnZU92
ZXJsYXk+IHBhZ2VPdmVybGF5LCBQYWdlT3ZlcmxheTo6RmFkZU1vZGUgZmFkZU1vZGUpCit7Cisg
ICAgY3JlYXRlUm9vdExheWVyc0lmTmVlZGVkKCk7CisKKyAgICBSZWZQdHI8UGFnZU92ZXJsYXk+
IG92ZXJsYXkgPSBwYWdlT3ZlcmxheTsKKworICAgIGlmIChtX3BhZ2VPdmVybGF5cy5jb250YWlu
cyhvdmVybGF5KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9wYWdlT3ZlcmxheXMuYXBwZW5k
KG92ZXJsYXkpOworICAgIG92ZXJsYXktPnNldFBhZ2UoJm1fcGFnZSk7CisKKyAgICBpZiAoZmFk
ZU1vZGUgPT0gUGFnZU92ZXJsYXk6OkZhZGVNb2RlOjpGYWRlKQorICAgICAgICBvdmVybGF5LT5z
dGFydEZhZGVJbkFuaW1hdGlvbigpOworCisgICAgc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzTGF5
ZXI+IGxheWVyID0gR3JhcGhpY3NMYXllcjo6Y3JlYXRlKG1fcGFnZS5jaHJvbWUoKS5jbGllbnQo
KS5ncmFwaGljc0xheWVyRmFjdG9yeSgpLCAqdGhpcyk7CisgICAgbGF5ZXItPnNldEFuY2hvclBv
aW50KEZsb2F0UG9pbnQzRCgpKTsKKyAgICBsYXllci0+c2V0QmFja2dyb3VuZENvbG9yKG92ZXJs
YXktPmJhY2tncm91bmRDb2xvcigpKTsKKyAgICB1cGRhdGVPdmVybGF5R2VvbWV0cnkoKm92ZXJs
YXksICpsYXllcik7CisjaWZuZGVmIE5ERUJVRworICAgIGxheWVyLT5zZXROYW1lKCJQYWdlIE92
ZXJsYXkgY29udGVudCIpOworI2VuZGlmCisKKyAgICB1cGRhdGVTZXR0aW5nc0ZvckxheWVyKCps
YXllcik7CisKKyAgICBzd2l0Y2ggKG92ZXJsYXktPm92ZXJsYXlUeXBlKCkpIHsKKyAgICBjYXNl
IFBhZ2VPdmVybGF5OjpPdmVybGF5VHlwZTo6VmlldzoKKyAgICAgICAgbV92aWV3T3ZlcmxheVJv
b3RMYXllci0+YWRkQ2hpbGQobGF5ZXIuZ2V0KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IFBhZ2VPdmVybGF5OjpPdmVybGF5VHlwZTo6RG9jdW1lbnQ6CisgICAgICAgIG1fZG9jdW1lbnRP
dmVybGF5Um9vdExheWVyLT5hZGRDaGlsZChsYXllci5nZXQoKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKworICAgIG1fb3ZlcmxheUdyYXBoaWNzTGF5ZXJzLnNldChvdmVybGF5LmdldCgpLCBX
VEY6Om1vdmUobGF5ZXIpKTsKKworICAgIHVwZGF0ZUZvcmNlU3luY2hyb25vdXNTY3JvbGxMYXll
clBvc2l0aW9uVXBkYXRlcygpOworCisgICAgaWYgKEZyYW1lVmlldyogZnJhbWVWaWV3ID0gbV9w
YWdlLm1haW5GcmFtZSgpLnZpZXcoKSkKKyAgICAgICAgZnJhbWVWaWV3LT5lbnRlckNvbXBvc2l0
aW5nTW9kZSgpOworfQorCit2b2lkIFBhZ2VPdmVybGF5Q29udHJvbGxlcjo6dW5pbnN0YWxsUGFn
ZU92ZXJsYXkoUGFnZU92ZXJsYXkqIG92ZXJsYXksIFBhZ2VPdmVybGF5OjpGYWRlTW9kZSBmYWRl
TW9kZSkKK3sKKyAgICBpZiAoZmFkZU1vZGUgPT0gUGFnZU92ZXJsYXk6OkZhZGVNb2RlOjpGYWRl
KSB7CisgICAgICAgIG92ZXJsYXktPnN0YXJ0RmFkZU91dEFuaW1hdGlvbigpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgb3ZlcmxheS0+c2V0UGFnZShudWxscHRyKTsKKworICAgIG1f
b3ZlcmxheUdyYXBoaWNzTGF5ZXJzLnRha2Uob3ZlcmxheSktPnJlbW92ZUZyb21QYXJlbnQoKTsK
KworICAgIHNpemVfdCBvdmVybGF5SW5kZXggPSBtX3BhZ2VPdmVybGF5cy5maW5kKG92ZXJsYXkp
OworICAgIEFTU0VSVChvdmVybGF5SW5kZXggIT0gbm90Rm91bmQpOworICAgIG1fcGFnZU92ZXJs
YXlzLnJlbW92ZShvdmVybGF5SW5kZXgpOworCisgICAgdXBkYXRlRm9yY2VTeW5jaHJvbm91c1Nj
cm9sbExheWVyUG9zaXRpb25VcGRhdGVzKCk7Cit9CisKK3ZvaWQgUGFnZU92ZXJsYXlDb250cm9s
bGVyOjp1cGRhdGVGb3JjZVN5bmNocm9ub3VzU2Nyb2xsTGF5ZXJQb3NpdGlvblVwZGF0ZXMoKQor
eworI2lmIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpCisgICAgYm9vbCBmb3JjZVN5bmNocm9ub3Vz
U2Nyb2xsTGF5ZXJQb3NpdGlvblVwZGF0ZXMgPSBmYWxzZTsKKworICAgIGZvciAoYXV0byYgb3Zl
cmxheSA6IG1fcGFnZU92ZXJsYXlzKSB7CisgICAgICAgIGlmIChvdmVybGF5LT5vdmVybGF5VHlw
ZSgpID09IFBhZ2VPdmVybGF5OjpPdmVybGF5VHlwZTo6VmlldykKKyAgICAgICAgICAgIGZvcmNl
U3luY2hyb25vdXNTY3JvbGxMYXllclBvc2l0aW9uVXBkYXRlcyA9IHRydWU7CisgICAgfQorCisg
ICAgaWYgKFNjcm9sbGluZ0Nvb3JkaW5hdG9yKiBzY3JvbGxpbmdDb29yZGluYXRvciA9IG1fcGFn
ZS5zY3JvbGxpbmdDb29yZGluYXRvcigpKQorICAgICAgICBzY3JvbGxpbmdDb29yZGluYXRvci0+
c2V0Rm9yY2VTeW5jaHJvbm91c1Njcm9sbExheWVyUG9zaXRpb25VcGRhdGVzKGZvcmNlU3luY2hy
b25vdXNTY3JvbGxMYXllclBvc2l0aW9uVXBkYXRlcyk7CisjZW5kaWYKK30KKwordm9pZCBQYWdl
T3ZlcmxheUNvbnRyb2xsZXI6OnNldFBhZ2VPdmVybGF5TmVlZHNEaXNwbGF5KFBhZ2VPdmVybGF5
JiBvdmVybGF5LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBkaXJ0eVJlY3QpCit7CisgICAgQVNT
RVJUKG1fcGFnZU92ZXJsYXlzLmNvbnRhaW5zKCZvdmVybGF5KSk7CisgICAgR3JhcGhpY3NMYXll
ciYgZ3JhcGhpY3NMYXllciA9ICptX292ZXJsYXlHcmFwaGljc0xheWVycy5nZXQoJm92ZXJsYXkp
OworCisgICAgaWYgKCFncmFwaGljc0xheWVyLmRyYXdzQ29udGVudCgpKSB7CisgICAgICAgIGdy
YXBoaWNzTGF5ZXIuc2V0RHJhd3NDb250ZW50KHRydWUpOworICAgICAgICB1cGRhdGVPdmVybGF5
R2VvbWV0cnkob3ZlcmxheSwgZ3JhcGhpY3NMYXllcik7CisgICAgfQorCisgICAgZ3JhcGhpY3NM
YXllci5zZXROZWVkc0Rpc3BsYXlJblJlY3QoZGlydHlSZWN0KTsKK30KKwordm9pZCBQYWdlT3Zl
cmxheUNvbnRyb2xsZXI6OnNldFBhZ2VPdmVybGF5T3BhY2l0eShQYWdlT3ZlcmxheSYgb3Zlcmxh
eSwgZmxvYXQgb3BhY2l0eSkKK3sKKyAgICBBU1NFUlQobV9wYWdlT3ZlcmxheXMuY29udGFpbnMo
Jm92ZXJsYXkpKTsKKyAgICBtX292ZXJsYXlHcmFwaGljc0xheWVycy5nZXQoJm92ZXJsYXkpLT5z
ZXRPcGFjaXR5KG9wYWNpdHkpOworfQorCit2b2lkIFBhZ2VPdmVybGF5Q29udHJvbGxlcjo6Y2xl
YXJQYWdlT3ZlcmxheShQYWdlT3ZlcmxheSYgb3ZlcmxheSkKK3sKKyAgICBBU1NFUlQobV9wYWdl
T3ZlcmxheXMuY29udGFpbnMoJm92ZXJsYXkpKTsKKyAgICBtX292ZXJsYXlHcmFwaGljc0xheWVy
cy5nZXQoJm92ZXJsYXkpLT5zZXREcmF3c0NvbnRlbnQoZmFsc2UpOworfQorCitHcmFwaGljc0xh
eWVyKiBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6OmxheWVyRm9yT3ZlcmxheShQYWdlT3ZlcmxheSYg
b3ZlcmxheSkgY29uc3QKK3sKKyAgICBBU1NFUlQobV9wYWdlT3ZlcmxheXMuY29udGFpbnMoJm92
ZXJsYXkpKTsKKyAgICByZXR1cm4gbV9vdmVybGF5R3JhcGhpY3NMYXllcnMuZ2V0KCZvdmVybGF5
KTsKK30KKwordm9pZCBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6OndpbGxBdHRhY2hSb290TGF5ZXIo
KQoreworICAgIGNyZWF0ZVJvb3RMYXllcnNJZk5lZWRlZCgpOworCisgICAgZm9yIChhdXRvJiBv
dmVybGF5QW5kTGF5ZXIgOiBtX292ZXJsYXlHcmFwaGljc0xheWVycykKKyAgICAgICAgdXBkYXRl
T3ZlcmxheUdlb21ldHJ5KCpvdmVybGF5QW5kTGF5ZXIua2V5LCAqb3ZlcmxheUFuZExheWVyLnZh
bHVlKTsKK30KKwordm9pZCBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6OmRpZENoYW5nZVZpZXdTaXpl
KCkKK3sKKyAgICBmb3IgKGF1dG8mIG92ZXJsYXlBbmRMYXllciA6IG1fb3ZlcmxheUdyYXBoaWNz
TGF5ZXJzKSB7CisgICAgICAgIGlmIChvdmVybGF5QW5kTGF5ZXIua2V5LT5vdmVybGF5VHlwZSgp
ID09IFBhZ2VPdmVybGF5OjpPdmVybGF5VHlwZTo6VmlldykKKyAgICAgICAgICAgIHVwZGF0ZU92
ZXJsYXlHZW9tZXRyeSgqb3ZlcmxheUFuZExheWVyLmtleSwgKm92ZXJsYXlBbmRMYXllci52YWx1
ZSk7CisgICAgfQorfQorCit2b2lkIFBhZ2VPdmVybGF5Q29udHJvbGxlcjo6ZGlkQ2hhbmdlRG9j
dW1lbnRTaXplKCkKK3sKKyAgICBmb3IgKGF1dG8mIG92ZXJsYXlBbmRMYXllciA6IG1fb3Zlcmxh
eUdyYXBoaWNzTGF5ZXJzKSB7CisgICAgICAgIGlmIChvdmVybGF5QW5kTGF5ZXIua2V5LT5vdmVy
bGF5VHlwZSgpID09IFBhZ2VPdmVybGF5OjpPdmVybGF5VHlwZTo6RG9jdW1lbnQpCisgICAgICAg
ICAgICB1cGRhdGVPdmVybGF5R2VvbWV0cnkoKm92ZXJsYXlBbmRMYXllci5rZXksICpvdmVybGF5
QW5kTGF5ZXIudmFsdWUpOworICAgIH0KK30KKwordm9pZCBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6
OmRpZENoYW5nZVNldHRpbmdzKCkKK3sKKyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGFwcGx5IHRo
ZXNlIHNldHRpbmdzIHRvIGFsbCBvdmVybGF5IHN1YmxheWVycyByZWN1cnNpdmVseS4KKyAgICBm
b3IgKGF1dG8mIGdyYXBoaWNzTGF5ZXIgOiBtX292ZXJsYXlHcmFwaGljc0xheWVycy52YWx1ZXMo
KSkKKyAgICAgICAgdXBkYXRlU2V0dGluZ3NGb3JMYXllcigqZ3JhcGhpY3NMYXllcik7Cit9CisK
K3ZvaWQgUGFnZU92ZXJsYXlDb250cm9sbGVyOjpkaWRDaGFuZ2VEZXZpY2VTY2FsZUZhY3Rvcigp
Cit7CisgICAgY3JlYXRlUm9vdExheWVyc0lmTmVlZGVkKCk7CisKKyAgICBtX2RvY3VtZW50T3Zl
cmxheVJvb3RMYXllci0+bm90ZURldmljZU9yUGFnZVNjYWxlRmFjdG9yQ2hhbmdlZEluY2x1ZGlu
Z0Rlc2NlbmRhbnRzKCk7CisgICAgbV92aWV3T3ZlcmxheVJvb3RMYXllci0+bm90ZURldmljZU9y
UGFnZVNjYWxlRmFjdG9yQ2hhbmdlZEluY2x1ZGluZ0Rlc2NlbmRhbnRzKCk7CisKKyAgICBmb3Ig
KGF1dG8mIGdyYXBoaWNzTGF5ZXIgOiBtX292ZXJsYXlHcmFwaGljc0xheWVycy52YWx1ZXMoKSkK
KyAgICAgICAgZ3JhcGhpY3NMYXllci0+c2V0TmVlZHNEaXNwbGF5KCk7Cit9CisKK3ZvaWQgUGFn
ZU92ZXJsYXlDb250cm9sbGVyOjpkaWRDaGFuZ2VFeHBvc2VkUmVjdCgpCit7CisgICAgbV9wYWdl
LmNocm9tZSgpLmNsaWVudCgpLnNjaGVkdWxlQ29tcG9zaXRpbmdMYXllckZsdXNoKCk7Cit9CisK
K3ZvaWQgUGFnZU92ZXJsYXlDb250cm9sbGVyOjpkaWRTY3JvbGxGcmFtZShGcmFtZSYgZnJhbWUp
Cit7CisgICAgZm9yIChhdXRvJiBvdmVybGF5QW5kTGF5ZXIgOiBtX292ZXJsYXlHcmFwaGljc0xh
eWVycykgeworICAgICAgICBpZiAob3ZlcmxheUFuZExheWVyLmtleS0+b3ZlcmxheVR5cGUoKSA9
PSBQYWdlT3ZlcmxheTo6T3ZlcmxheVR5cGU6OlZpZXcgfHwgIWZyYW1lLmlzTWFpbkZyYW1lKCkp
CisgICAgICAgICAgICBvdmVybGF5QW5kTGF5ZXIudmFsdWUtPnNldE5lZWRzRGlzcGxheSgpOwor
ICAgICAgICBvdmVybGF5QW5kTGF5ZXIua2V5LT5kaWRTY3JvbGxGcmFtZShmcmFtZSk7CisgICAg
fQorfQorCit2b2lkIFBhZ2VPdmVybGF5Q29udHJvbGxlcjo6dXBkYXRlU2V0dGluZ3NGb3JMYXll
cihHcmFwaGljc0xheWVyJiBsYXllcikKK3sKKyAgICBTZXR0aW5ncyYgc2V0dGluZ3MgPSBtX3Bh
Z2Uuc2V0dGluZ3MoKTsKKyAgICBsYXllci5zZXRBY2NlbGVyYXRlc0RyYXdpbmcoc2V0dGluZ3Mu
YWNjZWxlcmF0ZWREcmF3aW5nRW5hYmxlZCgpKTsKKyAgICBsYXllci5zZXRTaG93RGVidWdCb3Jk
ZXIoc2V0dGluZ3Muc2hvd0RlYnVnQm9yZGVycygpKTsKKyAgICBsYXllci5zZXRTaG93UmVwYWlu
dENvdW50ZXIoc2V0dGluZ3Muc2hvd1JlcGFpbnRDb3VudGVyKCkpOworfQorCitib29sIFBhZ2VP
dmVybGF5Q29udHJvbGxlcjo6aGFuZGxlTW91c2VFdmVudChjb25zdCBQbGF0Zm9ybU1vdXNlRXZl
bnQmIG1vdXNlRXZlbnQpCit7CisgICAgaWYgKCFtX3BhZ2VPdmVybGF5cy5zaXplKCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIGZvciAoYXV0byBpdCA9IG1fcGFnZU92ZXJsYXlzLnJi
ZWdpbigpLCBlbmQgPSBtX3BhZ2VPdmVybGF5cy5yZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgewor
ICAgICAgICBpZiAoKCppdCktPm1vdXNlRXZlbnQobW91c2VFdmVudCkpCisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUGFnZU92
ZXJsYXlDb250cm9sbGVyOjpjb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVN0cmluZ1ZhbHVlRm9y
UG9pbnQoU3RyaW5nIGF0dHJpYnV0ZSwgRmxvYXRQb2ludCBwYXJhbWV0ZXIsIFN0cmluZyYgdmFs
dWUpCit7CisgICAgaWYgKCFtX3BhZ2VPdmVybGF5cy5zaXplKCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIGZvciAoYXV0byBpdCA9IG1fcGFnZU92ZXJsYXlzLnJiZWdpbigpLCBlbmQg
PSBtX3BhZ2VPdmVybGF5cy5yZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBpZiAo
KCppdCktPmNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlU3RyaW5nVmFsdWVGb3JQb2ludChhdHRy
aWJ1dGUsIHBhcmFtZXRlciwgdmFsdWUpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFBhZ2VPdmVybGF5Q29udHJvbGxlcjo6
Y29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVCb29sVmFsdWVGb3JQb2ludChTdHJpbmcgYXR0cmli
dXRlLCBGbG9hdFBvaW50IHBhcmFtZXRlciwgYm9vbCYgdmFsdWUpCit7CisgICAgaWYgKCFtX3Bh
Z2VPdmVybGF5cy5zaXplKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGZvciAoYXV0
byBpdCA9IG1fcGFnZU92ZXJsYXlzLnJiZWdpbigpLCBlbmQgPSBtX3BhZ2VPdmVybGF5cy5yZW5k
KCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBpZiAoKCppdCktPmNvcHlBY2Nlc3NpYmls
aXR5QXR0cmlidXRlQm9vbFZhbHVlRm9yUG9pbnQoYXR0cmlidXRlLCBwYXJhbWV0ZXIsIHZhbHVl
KSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKK1ZlY3RvcjxTdHJpbmc+IFBhZ2VPdmVybGF5Q29udHJvbGxlcjo6Y29weUFjY2Vz
c2liaWxpdHlBdHRyaWJ1dGVzTmFtZXMoYm9vbCBwYXJhbWV0ZXJpemVkTmFtZXMpCit7CisgICAg
aWYgKCFtX3BhZ2VPdmVybGF5cy5zaXplKCkpCisgICAgICAgIHJldHVybiBWZWN0b3I8U3RyaW5n
PigpOworCisgICAgZm9yIChhdXRvIGl0ID0gbV9wYWdlT3ZlcmxheXMucmJlZ2luKCksIGVuZCA9
IG1fcGFnZU92ZXJsYXlzLnJlbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIFZlY3Rv
cjxTdHJpbmc+IG5hbWVzID0gKCppdCktPmNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlTmFtZXMo
cGFyYW1ldGVyaXplZE5hbWVzKTsKKyAgICAgICAgaWYgKCFuYW1lcy5pc0VtcHR5KCkpCisgICAg
ICAgICAgICByZXR1cm4gbmFtZXM7CisgICAgfQorCisgICAgcmV0dXJuIFZlY3RvcjxTdHJpbmc+
KCk7Cit9CisKK3ZvaWQgUGFnZU92ZXJsYXlDb250cm9sbGVyOjpwYWludENvbnRlbnRzKGNvbnN0
IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqIGdyYXBoaWNzTGF5ZXIsIFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dCYgZ3JhcGhpY3NDb250ZXh0LCBXZWJDb3JlOjpHcmFwaGljc0xheWVyUGFpbnRpbmdQ
aGFzZSwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBjbGlwUmVjdCkKK3sKKyAgICBmb3IgKGF1
dG8gaXQgPSBtX292ZXJsYXlHcmFwaGljc0xheWVycy5iZWdpbigpLCBlbmQgPSBtX292ZXJsYXlH
cmFwaGljc0xheWVycy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIGlmIChpdC0+
dmFsdWUuZ2V0KCkgIT0gZ3JhcGhpY3NMYXllcikKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisg
ICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihncmFwaGljc0NvbnRl
eHQpOworICAgICAgICBncmFwaGljc0NvbnRleHQuY2xpcChjbGlwUmVjdCk7CisgICAgICAgIGl0
LT5rZXktPmRyYXdSZWN0KGdyYXBoaWNzQ29udGV4dCwgZW5jbG9zaW5nSW50UmVjdChjbGlwUmVj
dCkpOworCisgICAgICAgIHJldHVybjsKKyAgICB9Cit9CisKK2Zsb2F0IFBhZ2VPdmVybGF5Q29u
dHJvbGxlcjo6ZGV2aWNlU2NhbGVGYWN0b3IoKSBjb25zdAoreworICAgIHJldHVybiBtX3BhZ2Uu
ZGV2aWNlU2NhbGVGYWN0b3IoKTsKK30KKwordm9pZCBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6Om5v
dGlmeUZsdXNoUmVxdWlyZWQoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciopCit7CisgICAg
bV9wYWdlLmNocm9tZSgpLmNsaWVudCgpLnNjaGVkdWxlQ29tcG9zaXRpbmdMYXllckZsdXNoKCk7
Cit9CisKK3ZvaWQgUGFnZU92ZXJsYXlDb250cm9sbGVyOjpkaWRDaGFuZ2VPdmVybGF5RnJhbWUo
UGFnZU92ZXJsYXkmIG92ZXJsYXkpCit7CisgICAgQVNTRVJUKG1fcGFnZU92ZXJsYXlzLmNvbnRh
aW5zKCZvdmVybGF5KSk7CisgICAgdXBkYXRlT3ZlcmxheUdlb21ldHJ5KG92ZXJsYXksICptX292
ZXJsYXlHcmFwaGljc0xheWVycy5nZXQoJm92ZXJsYXkpKTsKK30KKwordm9pZCBQYWdlT3Zlcmxh
eUNvbnRyb2xsZXI6OmRpZENoYW5nZU92ZXJsYXlCYWNrZ3JvdW5kQ29sb3IoUGFnZU92ZXJsYXkm
IG92ZXJsYXkpCit7CisgICAgQVNTRVJUKG1fcGFnZU92ZXJsYXlzLmNvbnRhaW5zKCZvdmVybGF5
KSk7CisgICAgbV9vdmVybGF5R3JhcGhpY3NMYXllcnMuZ2V0KCZvdmVybGF5KS0+c2V0QmFja2dy
b3VuZENvbG9yKG92ZXJsYXkuYmFja2dyb3VuZENvbG9yKCkpOworfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZU92ZXJsYXlDb250
cm9sbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VPdmVybGF5Q29udHJvbGxlci5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0MTJlMTAKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VPdmVybGF5Q29udHJvbGxlci5oCkBAIC0wLDAg
KzEsMTAwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBQYWdlT3ZlcmxheUNvbnRyb2xsZXJfaAor
I2RlZmluZSBQYWdlT3ZlcmxheUNvbnRyb2xsZXJfaAorCisjaW5jbHVkZSAiR3JhcGhpY3NMYXll
ckNsaWVudC5oIgorI2luY2x1ZGUgIlBhZ2VPdmVybGF5LmgiCisjaW5jbHVkZSA8d3RmL0hhc2hN
YXAuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZyYW1lOworY2xhc3MgUGFnZTsKK2NsYXNz
IFBsYXRmb3JtTW91c2VFdmVudDsKKworY2xhc3MgUGFnZU92ZXJsYXlDb250cm9sbGVyIDogcHVi
bGljIEdyYXBoaWNzTGF5ZXJDbGllbnQgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFBhZ2VP
dmVybGF5Q29udHJvbGxlcik7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6
CisgICAgUGFnZU92ZXJsYXlDb250cm9sbGVyKFBhZ2UmKTsKKworICAgIEdyYXBoaWNzTGF5ZXIq
IGRvY3VtZW50T3ZlcmxheVJvb3RMYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fZG9jdW1lbnRPdmVy
bGF5Um9vdExheWVyLmdldCgpOyB9CisgICAgR3JhcGhpY3NMYXllciogdmlld092ZXJsYXlSb290
TGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX3ZpZXdPdmVybGF5Um9vdExheWVyLmdldCgpOyB9CisK
KyAgICB2b2lkIGluc3RhbGxQYWdlT3ZlcmxheShQYXNzUmVmUHRyPFBhZ2VPdmVybGF5PiwgUGFn
ZU92ZXJsYXk6OkZhZGVNb2RlKTsKKyAgICB2b2lkIHVuaW5zdGFsbFBhZ2VPdmVybGF5KFBhZ2VP
dmVybGF5KiwgUGFnZU92ZXJsYXk6OkZhZGVNb2RlKTsKKworICAgIHZvaWQgc2V0UGFnZU92ZXJs
YXlOZWVkc0Rpc3BsYXkoUGFnZU92ZXJsYXkmLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdm9pZCBz
ZXRQYWdlT3ZlcmxheU9wYWNpdHkoUGFnZU92ZXJsYXkmLCBmbG9hdCk7CisgICAgdm9pZCBjbGVh
clBhZ2VPdmVybGF5KFBhZ2VPdmVybGF5Jik7CisgICAgR3JhcGhpY3NMYXllciogbGF5ZXJGb3JP
dmVybGF5KFBhZ2VPdmVybGF5JikgY29uc3Q7CisKKyAgICB2b2lkIHdpbGxBdHRhY2hSb290TGF5
ZXIoKTsKKworICAgIHZvaWQgZGlkQ2hhbmdlVmlld1NpemUoKTsKKyAgICB2b2lkIGRpZENoYW5n
ZURvY3VtZW50U2l6ZSgpOworICAgIHZvaWQgZGlkQ2hhbmdlU2V0dGluZ3MoKTsKKyAgICB2b2lk
IGRpZENoYW5nZURldmljZVNjYWxlRmFjdG9yKCk7CisgICAgdm9pZCBkaWRDaGFuZ2VFeHBvc2Vk
UmVjdCgpOworICAgIHZvaWQgZGlkU2Nyb2xsRnJhbWUoRnJhbWUmKTsKKworICAgIHZvaWQgZGlk
Q2hhbmdlT3ZlcmxheUZyYW1lKFBhZ2VPdmVybGF5Jik7CisgICAgdm9pZCBkaWRDaGFuZ2VPdmVy
bGF5QmFja2dyb3VuZENvbG9yKFBhZ2VPdmVybGF5Jik7CisKKyAgICBpbnQgb3ZlcmxheUNvdW50
KCkgY29uc3QgeyByZXR1cm4gbV9vdmVybGF5R3JhcGhpY3NMYXllcnMuc2l6ZSgpOyB9CisKKyAg
ICBib29sIGhhbmRsZU1vdXNlRXZlbnQoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50Jik7CisKKyAg
ICBib29sIGNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlU3RyaW5nVmFsdWVGb3JQb2ludChTdHJp
bmcgYXR0cmlidXRlLCBGbG9hdFBvaW50LCBTdHJpbmcmIHZhbHVlKTsKKyAgICBib29sIGNvcHlB
Y2Nlc3NpYmlsaXR5QXR0cmlidXRlQm9vbFZhbHVlRm9yUG9pbnQoU3RyaW5nIGF0dHJpYnV0ZSwg
RmxvYXRQb2ludCwgYm9vbCYgdmFsdWUpOworICAgIFZlY3RvcjxTdHJpbmc+IGNvcHlBY2Nlc3Np
YmlsaXR5QXR0cmlidXRlc05hbWVzKGJvb2wgcGFyYW1ldGVyaXplZE5hbWVzKTsKKworcHJpdmF0
ZToKKyAgICB2b2lkIGNyZWF0ZVJvb3RMYXllcnNJZk5lZWRlZCgpOworCisgICAgdm9pZCB1cGRh
dGVTZXR0aW5nc0ZvckxheWVyKEdyYXBoaWNzTGF5ZXImKTsKKyAgICB2b2lkIHVwZGF0ZUZvcmNl
U3luY2hyb25vdXNTY3JvbGxMYXllclBvc2l0aW9uVXBkYXRlcygpOworCisgICAgLy8gR3JhcGhp
Y3NMYXllckNsaWVudAorICAgIHZpcnR1YWwgdm9pZCBub3RpZnlGbHVzaFJlcXVpcmVkKGNvbnN0
IEdyYXBoaWNzTGF5ZXIqKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50
cyhjb25zdCBHcmFwaGljc0xheWVyKiwgR3JhcGhpY3NDb250ZXh0JiwgR3JhcGhpY3NMYXllclBh
aW50aW5nUGhhc2UsIGNvbnN0IEZsb2F0UmVjdCYgY2xpcFJlY3QpIG92ZXJyaWRlOworICAgIHZp
cnR1YWwgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IoKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0
dWFsIGJvb2wgc2hvdWxkU2tpcExheWVySW5EdW1wKGNvbnN0IEdyYXBoaWNzTGF5ZXIqKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhp
Y3NMYXllcj4gbV9kb2N1bWVudE92ZXJsYXlSb290TGF5ZXI7CisgICAgc3RkOjp1bmlxdWVfcHRy
PEdyYXBoaWNzTGF5ZXI+IG1fdmlld092ZXJsYXlSb290TGF5ZXI7CisgICAgSGFzaE1hcDxQYWdl
T3ZlcmxheSosIHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0xheWVyPj4gbV9vdmVybGF5R3JhcGhp
Y3NMYXllcnM7CisgICAgVmVjdG9yPFJlZlB0cjxQYWdlT3ZlcmxheT4+IG1fcGFnZU92ZXJsYXlz
OworICAgIFBhZ2UmIG1fcGFnZTsKKyAgICBib29sIG1faW5pdGlhbGl6ZWQ7Cit9OworCit9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFBhZ2VPdmVybGF5Q29udHJvbGxlcl9oCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVy
Q2xpZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVy
Q2xpZW50LmgKaW5kZXggOGE0ODMzMy4uMjU5MjJjYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllckNsaWVudC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXJDbGllbnQuaApAQCAtMjYsNiAr
MjYsOCBAQAogI2lmbmRlZiBHcmFwaGljc0xheWVyQ2xpZW50X2gKICNkZWZpbmUgR3JhcGhpY3NM
YXllckNsaWVudF9oCiAKKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIGNsYXNzIEZsb2F0UG9pbnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxheWVyLmNwcAppbmRleCA1ZjNhNDk3Li43ODBmYzAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMYXllci5jcHAKQEAgLTIzMjIsNyArMjMyMiw3IEBAIHZvaWQgUmVuZGVyTGF5
ZXI6OnNjcm9sbFRvKGludCB4LCBpbnQgeSkKIAogICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlv
bjo6ZGlkU2Nyb2xsTGF5ZXIoJmZyYW1lKTsKICAgICBpZiAoc2Nyb2xsc092ZXJmbG93KCkpCi0g
ICAgICAgIGZyYW1lLmxvYWRlcigpLmNsaWVudCgpLmRpZENoYW5nZVNjcm9sbE9mZnNldCgpOwor
ICAgICAgICB2aWV3LmZyYW1lVmlldygpLmRpZENoYW5nZVNjcm9sbE9mZnNldCgpOwogCiAgICAg
dmlldy5mcmFtZVZpZXcoKS5yZXN1bWVWaXNpYmxlSW1hZ2VBbmltYXRpb25zSW5jbHVkaW5nU3Vi
ZnJhbWVzKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGF5ZXJDb21wb3NpdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXll
ckNvbXBvc2l0b3IuY3BwCmluZGV4IDRiZTQ2OTEuLmQyYzI2OTAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwCkBAIC00NSw2ICs0
NSw3IEBACiAjaW5jbHVkZSAiTWFpbkZyYW1lLmgiCiAjaW5jbHVkZSAiTm9kZUxpc3QuaCIKICNp
bmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiUGFnZU92ZXJsYXlDb250cm9sbGVyLmgiCiAjaW5j
bHVkZSAiUmVuZGVyRW1iZWRkZWRPYmplY3QuaCIKICNpbmNsdWRlICJSZW5kZXJGbG93VGhyZWFk
LmgiCiAjaW5jbHVkZSAiUmVuZGVyRnVsbFNjcmVlbi5oIgpAQCAtNjQzLDcgKzY0NCw4IEBAIHZv
aWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVDb21wb3NpdGluZ0xheWVyc1RpbWVyRmly
ZWQoVGltZXI8UmVuZGVyTGF5ZXJDCiAKIGJvb2wgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpoYXNB
bnlBZGRpdGlvbmFsQ29tcG9zaXRlZExheWVycyhjb25zdCBSZW5kZXJMYXllciYgcm9vdExheWVy
KSBjb25zdAogewotICAgIHJldHVybiBtX2NvbXBvc2l0ZWRMYXllckNvdW50ID4gKHJvb3RMYXll
ci5pc0NvbXBvc2l0ZWQoKSA/IDEgOiAwKTsKKyAgICBpbnQgbGF5ZXJDb3VudCA9IG1fY29tcG9z
aXRlZExheWVyQ291bnQgKyBtX3JlbmRlclZpZXcuZnJhbWUoKS5wYWdlKCktPnBhZ2VPdmVybGF5
Q29udHJvbGxlcigpLm92ZXJsYXlDb3VudCgpOworICAgIHJldHVybiBsYXllckNvdW50ID4gKHJv
b3RMYXllci5pc0NvbXBvc2l0ZWQoKSA/IDEgOiAwKTsKIH0KIAogdm9pZCBSZW5kZXJMYXllckNv
bXBvc2l0b3I6OmNhbmNlbENvbXBvc2l0aW5nTGF5ZXJVcGRhdGUoKQpAQCAtNjY1LDcgKzY2Nyw3
IEBAIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVDb21wb3NpdGluZ0xheWVycyhD
b21wb3NpdGluZ1VwZGF0ZVR5cGUgdXBkYXRlCiAgICAgaWYgKG1fcmVuZGVyVmlldy5uZWVkc0xh
eW91dCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAobV9mb3JjZUNvbXBvc2l0aW5nTW9k
ZSAmJiAhbV9jb21wb3NpdGluZykKKyAgICBpZiAoKG1fZm9yY2VDb21wb3NpdGluZ01vZGUgfHwg
bV9yZW5kZXJWaWV3LmZyYW1lKCkucGFnZSgpLT5wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKS5vdmVy
bGF5Q291bnQoKSkgJiYgIW1fY29tcG9zaXRpbmcpCiAgICAgICAgIGVuYWJsZUNvbXBvc2l0aW5n
TW9kZSh0cnVlKTsKIAogICAgIGlmICghbV9yZWV2YWx1YXRlQ29tcG9zaXRpbmdBZnRlckxheW91
dCAmJiAhbV9jb21wb3NpdGluZykKQEAgLTc0OCw3ICs3NTAsNyBAQCB2b2lkIFJlbmRlckxheWVy
Q29tcG9zaXRvcjo6dXBkYXRlQ29tcG9zaXRpbmdMYXllcnMoQ29tcG9zaXRpbmdVcGRhdGVUeXBl
IHVwZGF0ZQogCiAgICAgICAgIC8vIEhvc3QgdGhlIGRvY3VtZW50IGxheWVyIGluIHRoZSBSZW5k
ZXJWaWV3J3Mgcm9vdCBsYXllci4KICAgICAgICAgaWYgKGlzRnVsbFVwZGF0ZSkgewotICAgICAg
ICAgICAgYXBwZW5kT3ZlcmxheUxheWVycyhjaGlsZExpc3QpOworICAgICAgICAgICAgYXBwZW5k
RG9jdW1lbnRPdmVybGF5TGF5ZXJzKGNoaWxkTGlzdCk7CiAgICAgICAgICAgICAvLyBFdmVuIHdo
ZW4gY2hpbGRMaXN0IGlzIGVtcHR5LCBkb24ndCBkcm9wIG91dCBvZiBjb21wb3NpdGluZyBtb2Rl
IGlmIHRoZXJlIGFyZQogICAgICAgICAgICAgLy8gY29tcG9zaXRlZCBsYXllcnMgdGhhdCB3ZSBk
aWRuJ3QgaGl0IGluIG91ciB0cmF2ZXJzYWwgKGUuZy4gYmVjYXVzZSBvZiB2aXNpYmlsaXR5Omhp
ZGRlbikuCiAgICAgICAgICAgICBpZiAoY2hpbGRMaXN0LmlzRW1wdHkoKSAmJiAhaGFzQW55QWRk
aXRpb25hbENvbXBvc2l0ZWRMYXllcnMoKnVwZGF0ZVJvb3QpKQpAQCAtNzg0LDE0ICs3ODYsMTgg
QEAgdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJzKENv
bXBvc2l0aW5nVXBkYXRlVHlwZSB1cGRhdGUKICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246
OmxheWVyVHJlZURpZENoYW5nZShwYWdlKCkpOwogfQogCi12b2lkIFJlbmRlckxheWVyQ29tcG9z
aXRvcjo6YXBwZW5kT3ZlcmxheUxheWVycyhWZWN0b3I8R3JhcGhpY3NMYXllcio+JiBjaGlsZExp
c3QpCit2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6YXBwZW5kRG9jdW1lbnRPdmVybGF5TGF5
ZXJzKFZlY3RvcjxHcmFwaGljc0xheWVyKj4mIGNoaWxkTGlzdCkKIHsKICAgICBGcmFtZSYgZnJh
bWUgPSBtX3JlbmRlclZpZXcuZnJhbWVWaWV3KCkuZnJhbWUoKTsKKyAgICBpZiAoIWZyYW1lLmlz
TWFpbkZyYW1lKCkpCisgICAgICAgIHJldHVybjsKKwogICAgIFBhZ2UqIHBhZ2UgPSBmcmFtZS5w
YWdlKCk7CiAgICAgaWYgKCFwYWdlKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoR3JhcGhp
Y3NMYXllciogb3ZlcmxheUxheWVyID0gcGFnZS0+Y2hyb21lKCkuY2xpZW50KCkuZG9jdW1lbnRP
dmVybGF5TGF5ZXJGb3JGcmFtZShmcmFtZSkpCisgICAgcGFnZS0+cGFnZU92ZXJsYXlDb250cm9s
bGVyKCkud2lsbEF0dGFjaFJvb3RMYXllcigpOworICAgIGlmIChHcmFwaGljc0xheWVyKiBvdmVy
bGF5TGF5ZXIgPSBwYWdlLT5wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKS5kb2N1bWVudE92ZXJsYXlS
b290TGF5ZXIoKSkKICAgICAgICAgY2hpbGRMaXN0LmFwcGVuZChvdmVybGF5TGF5ZXIpOwogfQog
CkBAIC0zMzY2LDYgKzMzNzIsMTAgQEAgdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmF0dGFj
aFJvb3RMYXllcihSb290TGF5ZXJBdHRhY2htZW50IGF0dGFjaG1lbnQpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuOwogCiAgICAgICAgICAgICBwYWdlLT5jaHJvbWUoKS5jbGllbnQoKS5hdHRhY2hS
b290R3JhcGhpY3NMYXllcigmZnJhbWUsIHJvb3RHcmFwaGljc0xheWVyKCkpOworICAgICAgICAg
ICAgaWYgKGZyYW1lLmlzTWFpbkZyYW1lKCkpIHsKKyAgICAgICAgICAgICAgICBwYWdlLT5wYWdl
T3ZlcmxheUNvbnRyb2xsZXIoKS53aWxsQXR0YWNoUm9vdExheWVyKCk7CisgICAgICAgICAgICAg
ICAgcGFnZS0+Y2hyb21lKCkuY2xpZW50KCkuYXR0YWNoVmlld092ZXJsYXlHcmFwaGljc0xheWVy
KCZmcmFtZSwgcGFnZS0+cGFnZU92ZXJsYXlDb250cm9sbGVyKCkudmlld092ZXJsYXlSb290TGF5
ZXIoKSk7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAg
ICAgICBjYXNlIFJvb3RMYXllckF0dGFjaGVkVmlhRW5jbG9zaW5nRnJhbWU6IHsKQEAgLTM0MTAs
NiArMzQyMCw4IEBAIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpkZXRhY2hSb290TGF5ZXIo
KQogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIHBhZ2UtPmNocm9tZSgpLmNsaWVudCgp
LmF0dGFjaFJvb3RHcmFwaGljc0xheWVyKCZmcmFtZSwgMCk7CisgICAgICAgIGlmIChmcmFtZS5p
c01haW5GcmFtZSgpKQorICAgICAgICAgICAgcGFnZS0+Y2hyb21lKCkuY2xpZW50KCkuYXR0YWNo
Vmlld092ZXJsYXlHcmFwaGljc0xheWVyKCZmcmFtZSwgMCk7CiAgICAgfQogICAgIGJyZWFrOwog
ICAgIGNhc2UgUm9vdExheWVyVW5hdHRhY2hlZDoKQEAgLTM0NDQsNyArMzQ1NiwxMSBAQCB2b2lk
IFJlbmRlckxheWVyQ29tcG9zaXRvcjo6cm9vdExheWVyQXR0YWNobWVudENoYW5nZWQoKQogICAg
IGlmIChSZW5kZXJMYXllckJhY2tpbmcqIGJhY2tpbmcgPSBsYXllciA/IGxheWVyLT5iYWNraW5n
KCkgOiBudWxscHRyKQogICAgICAgICBiYWNraW5nLT51cGRhdGVEcmF3c0NvbnRlbnQoKTsKIAot
ICAgIGlmIChHcmFwaGljc0xheWVyKiBvdmVybGF5TGF5ZXIgPSBwYWdlLT5jaHJvbWUoKS5jbGll
bnQoKS5kb2N1bWVudE92ZXJsYXlMYXllckZvckZyYW1lKGZyYW1lKSkKKyAgICBpZiAoIWZyYW1l
LmlzTWFpbkZyYW1lKCkpCisgICAgICAgIHJldHVybjsKKworICAgIHBhZ2UtPnBhZ2VPdmVybGF5
Q29udHJvbGxlcigpLndpbGxBdHRhY2hSb290TGF5ZXIoKTsKKyAgICBpZiAoR3JhcGhpY3NMYXll
ciogb3ZlcmxheUxheWVyID0gcGFnZS0+cGFnZU92ZXJsYXlDb250cm9sbGVyKCkuZG9jdW1lbnRP
dmVybGF5Um9vdExheWVyKCkpCiAgICAgICAgIG1fcm9vdENvbnRlbnRMYXllci0+YWRkQ2hpbGQo
b3ZlcmxheUxheWVyKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxheWVyQ29tcG9zaXRvci5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxheWVyQ29tcG9zaXRvci5oCmluZGV4IDdiZDI0MGEuLmQ5YTg3NGIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgKQEAgLTM2Miw3ICsz
NjIsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgbGF5ZXJIYXMzRENvbnRlbnQoY29uc3QgUmVuZGVy
TGF5ZXImKSBjb25zdDsKICAgICBib29sIGlzUnVubmluZ0FjY2VsZXJhdGVkVHJhbnNmb3JtQW5p
bWF0aW9uKFJlbmRlckxheWVyTW9kZWxPYmplY3QmKSBjb25zdDsKIAotICAgIHZvaWQgYXBwZW5k
T3ZlcmxheUxheWVycyhWZWN0b3I8R3JhcGhpY3NMYXllcio+Jik7CisgICAgdm9pZCBhcHBlbmRE
b2N1bWVudE92ZXJsYXlMYXllcnMoVmVjdG9yPEdyYXBoaWNzTGF5ZXIqPiYpOwogICAgIGJvb2wg
aGFzQW55QWRkaXRpb25hbENvbXBvc2l0ZWRMYXllcnMoY29uc3QgUmVuZGVyTGF5ZXImIHJvb3RM
YXllcikgY29uc3Q7CiAKICAgICB2b2lkIGVuc3VyZVJvb3RMYXllcigpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmggYi9Tb3Vy
Y2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaAppbmRleCAzZTNh
NWE4Li5jNmMwNjcxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9y
dC9XZWJDaHJvbWVDbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9y
dC9XZWJDaHJvbWVDbGllbnQuaApAQCAtMTYzLDYgKzE2Myw3IEBAIHB1YmxpYzoKICAgICB2aXJ0
dWFsIGJvb2wgc2hvdWxkUGFpbnRFbnRpcmVDb250ZW50cygpIGNvbnN0IG92ZXJyaWRlOwogCiAg
ICAgdmlydHVhbCB2b2lkIGF0dGFjaFJvb3RHcmFwaGljc0xheWVyKFdlYkNvcmU6OkZyYW1lKiwg
V2ViQ29yZTo6R3JhcGhpY3NMYXllciopIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBhdHRh
Y2hWaWV3T3ZlcmxheUdyYXBoaWNzTGF5ZXIoV2ViQ29yZTo6RnJhbWUqLCBXZWJDb3JlOjpHcmFw
aGljc0xheWVyKikgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzT25lU2hvdERy
YXdpbmdTeW5jaHJvbml6YXRpb24oKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgc2NoZWR1
bGVDb21wb3NpdGluZ0xheWVyRmx1c2goKSBvdmVycmlkZTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lm1tIGIvU291cmNlL1dl
YktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lm1tCmluZGV4IDkzNmY0NTQu
LjE5YWRiZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dl
YkNocm9tZUNsaWVudC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9X
ZWJDaHJvbWVDbGllbnQubW0KQEAgLTkyNCw2ICs5MjQsMTEgQEAgdm9pZCBXZWJDaHJvbWVDbGll
bnQ6OmF0dGFjaFJvb3RHcmFwaGljc0xheWVyKEZyYW1lKiBmcmFtZSwgR3JhcGhpY3NMYXllciog
Z3JhcGgKICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwogfQogCit2b2lkIFdlYkNocm9t
ZUNsaWVudDo6YXR0YWNoVmlld092ZXJsYXlHcmFwaGljc0xheWVyKEZyYW1lKiwgR3JhcGhpY3NM
YXllciopCit7CisgICAgLy8gRklYTUU6IElmIHdlIHdhbnQgdmlldy1yZWxhdGl2ZSBwYWdlIG92
ZXJsYXlzIGluIFdlYktpdDEsIHRoaXMgd291bGQgYmUgdGhlIHBsYWNlIHRvIGhvb2sgdGhlbSB1
cC4KK30KKwogdm9pZCBXZWJDaHJvbWVDbGllbnQ6OnNldE5lZWRzT25lU2hvdERyYXdpbmdTeW5j
aHJvbml6YXRpb24oKQogewogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBi
L1NvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBk
MGE5MmY5Li4yZDdlYzNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCkBAIC0zMDcsOCArMzA3LDYgQEAKIAkJMUE5MEMxRUUxMjY0RkQ1
MDAwM0U0NEQ0IC8qIFdlYkZpbmRPcHRpb25zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAxQTkwQzFFRDEyNjRGRDUwMDAzRTQ0RDQgLyogV2ViRmluZE9w
dGlvbnMuaCAqLzsgfTsKIAkJMUE5MEMxRjQxMjY0RkQ3MTAwM0U0NEQ0IC8qIEZpbmRDb250cm9s
bGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTkw
QzFGMjEyNjRGRDcxMDAzRTQ0RDQgLyogRmluZENvbnRyb2xsZXIuaCAqLzsgfTsKIAkJMUE5MEMx
RjUxMjY0RkQ3MTAwM0U0NEQ0IC8qIEZpbmRDb250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBOTBDMUYzMTI2NEZENzEwMDNFNDRENCAv
KiBGaW5kQ29udHJvbGxlci5jcHAgKi87IH07Ci0JCTFBOTBDMjM3MTI2NTA3MTcwMDNFNDRENCAv
KiBQYWdlT3ZlcmxheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMUE5MEMyMzUxMjY1MDcxNzAwM0U0NEQ0IC8qIFBhZ2VPdmVybGF5LmggKi87IH07Ci0J
CTFBOTBDMjM4MTI2NTA3MTcwMDNFNDRENCAvKiBQYWdlT3ZlcmxheS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTkwQzIzNjEyNjUwNzE3MDAzRTQ0
RDQgLyogUGFnZU92ZXJsYXkuY3BwICovOyB9OwogCQkxQTkxMDA3MTEyNjY3NUM0MDAxODQyRjUg
LyogRmluZEluZGljYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMUE5MTAwNkYxMjY2NzVDMzAwMTg0MkY1IC8qIEZpbmRJbmRpY2F0b3IuaCAqLzsg
fTsKIAkJMUE5MTAwNzIxMjY2NzVDNDAwMTg0MkY1IC8qIEZpbmRJbmRpY2F0b3IuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE5MTAwNzAxMjY2NzVD
NDAwMTg0MkY1IC8qIEZpbmRJbmRpY2F0b3IuY3BwICovOyB9OwogCQkxQTkyREMxMTEyRjhCQTQ2
MDAxN0FGNjUgLyogTGF5ZXJUcmVlQ29udGV4dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMUE5MkRDMTAxMkY4QkE0NjAwMTdBRjY1IC8qIExheWVyVHJl
ZUNvbnRleHQuaCAqLzsgfTsKQEAgLTU2OCw4ICs1NjYsNiBAQAogCQkyOUQ1NURGMjE2MUJGOUYx
MDAzMUEyRTMgLyogV2ViUGFnZUdyb3VwUHJveHlNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjlENTVERjAxNjFCRjlGMTAwMzFBMkUzIC8q
IFdlYlBhZ2VHcm91cFByb3h5TWVzc2FnZXMuaCAqLzsgfTsKIAkJMkQxMjVDNUUxODU3RUEwNTAw
M0JBM0NCIC8qIFZpZXdHZXN0dXJlQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkQxMjVDNUMxODU3RUEwNTAwM0JBM0NCIC8qIFZpZXdH
ZXN0dXJlQ29udHJvbGxlci5oICovOyB9OwogCQkyRDEyNUM1RjE4NTdFQTA1MDAzQkEzQ0IgLyog
Vmlld0dlc3R1cmVDb250cm9sbGVyTWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMkQxMjVDNUQxODU3RUEwNTAwM0JBM0NCIC8qIFZpZXdHZXN0dXJl
Q29udHJvbGxlck1hYy5tbSAqLzsgfTsKLQkJMkQxNDBFQUYxOEYzN0JFMDAwNUU3NUEwIC8qIFBh
Z2VPdmVybGF5Q29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAyRDE0MEVBRDE4RjM3QkUwMDA1RTc1QTAgLyogUGFnZU92ZXJsYXlDb250
cm9sbGVyLmNwcCAqLzsgfTsKLQkJMkQxNDBFQjAxOEYzN0JFMDAwNUU3NUEwIC8qIFBhZ2VPdmVy
bGF5Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMkQxNDBFQUUxOEYzN0JFMDAwNUU3NUEwIC8qIFBhZ2VPdmVybGF5Q29udHJvbGxlci5o
ICovOyB9OwogCQkyRDFCNUQ1RDE4NTg2OUM4MDA2QzY1OTYgLyogVmlld0dlc3R1cmVDb250cm9s
bGVyTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDJEMUI1RDVCMTg1ODY5QzgwMDZDNjU5NiAvKiBWaWV3R2VzdHVyZUNvbnRy
b2xsZXJNZXNzYWdlUmVjZWl2ZXIuY3BwICovOyB9OwogCQkyRDFCNUQ1RTE4NTg2OUM4MDA2QzY1
OTYgLyogVmlld0dlc3R1cmVDb250cm9sbGVyTWVzc2FnZXMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJEMUI1RDVDMTg1ODY5QzgwMDZDNjU5NiAvKiBW
aWV3R2VzdHVyZUNvbnRyb2xsZXJNZXNzYWdlcy5oICovOyB9OwogCQkyRDI4RjNFNDE4ODVDQ0Mx
MDA0QjlFQUUgLyogV2ViQ2hyb21lQ2xpZW50SU9TLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkQyOEYzRTAxODg1Q0NDMTAwNEI5RUFFIC8qIFdlYkNo
cm9tZUNsaWVudElPUy5tbSAqLzsgfTsKQEAgLTU4Niw2ICs1ODIsOCBAQAogCQkyRDQyOUJGRDE3
MjFFMkM3MDBFQzY4MUYgLyogUERGUGx1Z2luUGFzc3dvcmRGaWVsZC5tbSBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJENDI5QkZCMTcyMUUyQkEwMEVDNjgx
RiAvKiBQREZQbHVnaW5QYXNzd29yZEZpZWxkLm1tICovOyB9OwogCQkyRDQ3QjU2QzE4MTA3MTRF
MDAzQTNBRUUgLyogUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmUubW0gaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRDQ3QjU2QTE4MTA3MTRFMDAzQTNBRUUgLyog
UmVtb3RlTGF5ZXJCYWNraW5nU3RvcmUubW0gKi87IH07CiAJCTJENDdCNTZEMTgxMDcxNEUwMDNB
M0FFRSAvKiBSZW1vdGVMYXllckJhY2tpbmdTdG9yZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkQ0N0I1NkIxODEwNzE0RTAwM0EzQUVFIC8qIFJlbW90
ZUxheWVyQmFja2luZ1N0b3JlLmggKi87IH07CisJCTJENUM5RDA1MTlDODFEOEYwMEIzQzVDMSAv
KiBXZWJQYWdlT3ZlcmxheS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAyRDVDOUQwMzE5QzgxRDhGMDBCM0M1QzEgLyogV2ViUGFnZU92ZXJsYXkuY3Bw
ICovOyB9OworCQkyRDVDOUQwNjE5QzgxRDhGMDBCM0M1QzEgLyogV2ViUGFnZU92ZXJsYXkuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJENUM5RDA0MTlD
ODFEOEYwMEIzQzVDMSAvKiBXZWJQYWdlT3ZlcmxheS5oICovOyB9OwogCQkyRDZBQjU0MTE5MkIx
QzRBMDAzQTlGRDEgLyogV0tQREZQYWdlTnVtYmVySW5kaWNhdG9yLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRDZBQjUzRjE5MkIxQzRBMDAzQTlGRDEg
LyogV0tQREZQYWdlTnVtYmVySW5kaWNhdG9yLmggKi87IH07CiAJCTJENkFCNTQyMTkyQjFDNEEw
MDNBOUZEMSAvKiBXS1BERlBhZ2VOdW1iZXJJbmRpY2F0b3IubW0gaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRDZBQjU0MDE5MkIxQzRBMDAzQTlGRDEgLyog
V0tQREZQYWdlTnVtYmVySW5kaWNhdG9yLm1tICovOyB9OwogCQkyRDZCMzcxQjE4QTk2N0FEMDA0
MkFFODAgLyogX1dLVGh1bWJuYWlsVmlldy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMkQ2QjM3MTkxOEE5NjdBRDAwNDJBRTgwIC8qIF9XS1RodW1ibmFp
bFZpZXcuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpA
QCAtMjI3MSw4ICsyMjY5LDYgQEAKIAkJMUE5MEMxRUQxMjY0RkQ1MDAwM0U0NEQ0IC8qIFdlYkZp
bmRPcHRpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkZpbmRPcHRp
b25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBOTBDMUYyMTI2NEZENzEwMDNF
NDRENCAvKiBGaW5kQ29udHJvbGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBGaW5kQ29udHJvbGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQTkwQzFG
MzEyNjRGRDcxMDAzRTQ0RDQgLyogRmluZENvbnRyb2xsZXIuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gRmluZENvbnRyb2xsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQkxQTkwQzIzNTEyNjUwNzE3MDAzRTQ0RDQgLyogUGFnZU92ZXJsYXkuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGFnZU92ZXJsYXkuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMUE5MEMyMzYxMjY1MDcxNzAwM0U0NEQ0IC8qIFBhZ2VPdmVy
bGF5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBhZ2VPdmVybGF5
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUE5MTAwNkYxMjY2NzVDMzAwMTg0
MkY1IC8qIEZpbmRJbmRpY2F0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
RmluZEluZGljYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQTkxMDA3MDEy
NjY3NUM0MDAxODQyRjUgLyogRmluZEluZGljYXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBGaW5kSW5kaWNhdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMUE5MkRDMTAxMkY4QkE0NjAwMTdBRjY1IC8qIExheWVyVHJlZUNvbnRleHQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGF5ZXJUcmVlQ29udGV4dC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjU1OCw4ICsyNTU0LDYgQEAKIAkJMjlENTVERjAx
NjFCRjlGMTAwMzFBMkUzIC8qIFdlYlBhZ2VHcm91cFByb3h5TWVzc2FnZXMuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViUGFnZUdyb3VwUHJveHlNZXNzYWdlcy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyRDEyNUM1QzE4NTdFQTA1MDAzQkEzQ0IgLyogVmll
d0dlc3R1cmVDb250cm9sbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZp
ZXdHZXN0dXJlQ29udHJvbGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyRDEy
NUM1RDE4NTdFQTA1MDAzQkEzQ0IgLyogVmlld0dlc3R1cmVDb250cm9sbGVyTWFjLm1tICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gVmlld0dlc3R1cmVDb250cm9sbGVy
TWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkyRDE0MEVBRDE4RjM3QkUwMDA1
RTc1QTAgLyogUGFnZU92ZXJsYXlDb250cm9sbGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFBhZ2VPdmVybGF5Q29udHJvbGxlci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCTJEMTQwRUFFMThGMzdCRTAwMDVFNzVBMCAvKiBQYWdlT3ZlcmxheUNv
bnRyb2xsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGFnZU92ZXJsYXlD
b250cm9sbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJEMUI1RDVBMTg1ODY1
OTkwMDZDNjU5NiAvKiBWaWV3R2VzdHVyZUNvbnRyb2xsZXIubWVzc2FnZXMuaW4gKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gVmll
d0dlc3R1cmVDb250cm9sbGVyLm1lc3NhZ2VzLmluOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkyRDFCNUQ1QjE4NTg2OUM4MDA2QzY1OTYgLyogVmlld0dlc3R1cmVDb250cm9sbGVyTWVz
c2FnZVJlY2VpdmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFZp
ZXdHZXN0dXJlQ29udHJvbGxlck1lc3NhZ2VSZWNlaXZlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTJEMUI1RDVDMTg1ODY5QzgwMDZDNjU5NiAvKiBWaWV3R2VzdHVyZUNvbnRy
b2xsZXJNZXNzYWdlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWaWV3R2Vz
dHVyZUNvbnRyb2xsZXJNZXNzYWdlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
MjU4Miw2ICsyNTc2LDggQEAKIAkJMkQ0MjlCRkIxNzIxRTJCQTAwRUM2ODFGIC8qIFBERlBsdWdp
blBhc3N3b3JkRmllbGQubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUg
PSBQREZQbHVnaW5QYXNzd29yZEZpZWxkLm1tOyBwYXRoID0gUERGL1BERlBsdWdpblBhc3N3b3Jk
RmllbGQubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJENDdCNTZBMTgxMDcxNEUw
MDNBM0FFRSAvKiBSZW1vdGVMYXllckJhY2tpbmdTdG9yZS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLm9iamNwcDsgcGF0aCA9IFJlbW90ZUxheWVyQmFja2luZ1N0b3JlLm1tOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkyRDQ3QjU2QjE4MTA3MTRFMDAzQTNBRUUgLyogUmVtb3Rl
TGF5ZXJCYWNraW5nU3RvcmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVt
b3RlTGF5ZXJCYWNraW5nU3RvcmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMkQ1
QzlEMDMxOUM4MUQ4RjAwQjNDNUMxIC8qIFdlYlBhZ2VPdmVybGF5LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYlBhZ2VPdmVybGF5LmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMkQ1QzlEMDQxOUM4MUQ4RjAwQjNDNUMxIC8qIFdlYlBhZ2VPdmVy
bGF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlBhZ2VPdmVybGF5Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJENkFCNTNGMTkyQjFDNEEwMDNBOUZEMSAv
KiBXS1BERlBhZ2VOdW1iZXJJbmRpY2F0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gV0tQREZQYWdlTnVtYmVySW5kaWNhdG9yLmg7IHBhdGggPSBpb3MvV0tQREZQYWdlTnVt
YmVySW5kaWNhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJENkFCNTQwMTky
QjFDNEEwMDNBOUZEMSAvKiBXS1BERlBhZ2VOdW1iZXJJbmRpY2F0b3IubW0gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBXS1BERlBhZ2VOdW1iZXJJbmRpY2F0b3IubW07
IHBhdGggPSBpb3MvV0tQREZQYWdlTnVtYmVySW5kaWNhdG9yLm1tOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkyRDZCMzcxOTE4QTk2N0FEMDA0MkFFODAgLyogX1dLVGh1bWJuYWlsVmll
dy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBfV0tUaHVtYm5haWxWaWV3Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01NzAxLDEwICs1Njk3LDggQEAKIAkJCQkx
QTkwQzFGMjEyNjRGRDcxMDAzRTQ0RDQgLyogRmluZENvbnRyb2xsZXIuaCAqLywKIAkJCQk3QzM4
NzQzMzE3MkY1NjE1MDAxQkQ4OEEgLyogUGFnZUJhbm5lci5jcHAgKi8sCiAJCQkJN0NGNDdGRjkx
NzI3NUM1NzAwOEFDQjkxIC8qIFBhZ2VCYW5uZXIuaCAqLywKLQkJCQkxQTkwQzIzNjEyNjUwNzE3
MDAzRTQ0RDQgLyogUGFnZU92ZXJsYXkuY3BwICovLAotCQkJCTFBOTBDMjM1MTI2NTA3MTcwMDNF
NDRENCAvKiBQYWdlT3ZlcmxheS5oICovLAotCQkJCTJEMTQwRUFEMThGMzdCRTAwMDVFNzVBMCAv
KiBQYWdlT3ZlcmxheUNvbnRyb2xsZXIuY3BwICovLAotCQkJCTJEMTQwRUFFMThGMzdCRTAwMDVF
NzVBMCAvKiBQYWdlT3ZlcmxheUNvbnRyb2xsZXIuaCAqLywKKwkJCQkyRDVDOUQwMzE5QzgxRDhG
MDBCM0M1QzEgLyogV2ViUGFnZU92ZXJsYXkuY3BwICovLAorCQkJCTJENUM5RDA0MTlDODFEOEYw
MEIzQzVDMSAvKiBXZWJQYWdlT3ZlcmxheS5oICovLAogCQkJCTUxOTJENTcxMTk2MUZBMkYwMENE
MTlBQSAvKiBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyLmggKi8sCiAJCQkJMkQ4MTlCOTkxODYy
NzVCMzAwMUYwM0QxIC8qIFZpZXdHZXN0dXJlR2VvbWV0cnlDb2xsZWN0b3IuY3BwICovLAogCQkJ
CTJEODE5QjlBMTg2Mjc1QjMwMDFGMDNEMSAvKiBWaWV3R2VzdHVyZUdlb21ldHJ5Q29sbGVjdG9y
LmggKi8sCkBAIC03MDQ2LDYgKzcwNDAsNyBAQAogCQkJCTdDODVGRDgwMTkzNDE2NjUwMDAxNzdD
NCAvKiBXZWJQcmVmZXJlbmNlc0tleXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxMkY1ODk3MTJB
ODgzODgwMDYyOTUzMCAvKiBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZVByb3h5LmggaW4gSGVhZGVy
cyAqLywKIAkJCQkxQTQ0NUI5RjE4NEQ1RkI1MDA0QjM0MTQgLyogV0tDb250ZXh0SW5qZWN0ZWRC
dW5kbGVDbGllbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTJENUM5RDA2MTlDODFEOEYwMEIzQzVD
MSAvKiBXZWJQYWdlT3ZlcmxheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTEyRjU4OTkxMkE4ODM4
ODAwNjI5NTMwIC8qIEF1dGhlbnRpY2F0aW9uRGVjaXNpb25MaXN0ZW5lci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJNTE4RThFRjkxNkIyMDkxQzAwRTkxNDI5IC8qIEF1dGhlbnRpY2F0aW9uTWFuYWdl
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTEyRjU4QTMxMkE4ODNBRDAwNjI5NTMwIC8qIEF1dGhl
bnRpY2F0aW9uTWFuYWdlck1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLywKQEAgLTcxNTMsNyArNzE0
OCw2IEBACiAJCQkJMUFFNTJGOTIxOTIwMURBNzAwQTFGQTM3IC8qIEFQSUNvbnRleHRDb25maWd1
cmF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk3QzM2MUQ3MzE5MjdGQTM2MDAzNkE1OUQgLyog
V2ViU2NyaXB0TWVzc2FnZUhhbmRsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUUxMDVGRTU0MThE
N0I5REUwMDhGNTdBOCAvKiBFZGl0aW5nUmFuZ2UuaCBpbiBIZWFkZXJzICovLAotCQkJCTJEMTQw
RUIwMThGMzdCRTAwMDVFNzVBMCAvKiBQYWdlT3ZlcmxheUNvbnRyb2xsZXIuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUJDMTc3NTNGMTE4QkFCRjAwMDdEOUU5QSAvKiBHZW5lcmljQ2FsbGJhY2suaCBp
biBIZWFkZXJzICovLAogCQkJCTM3OUE4NzM2MThCQkZBNDMwMDU4OEFGMiAvKiBfV0tBY3RpdmF0
ZWRFbGVtZW50SW5mb0ludGVybmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzA2RjQyRjEyREJC
OUI2MDAyRDc4REUgLyogR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXIuaCBpbiBI
ZWFkZXJzICovLApAQCAtNzI3Niw3ICs3MjcwLDYgQEAKIAkJCQkxQTVCMUM1MTE4OTg2MDZGMDA0
RkNGOUIgLyogV0tOYXZpZ2F0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk3Q0Y0N0ZGQjE3Mjc1
QzU3MDA4QUNCOTEgLyogUGFnZUJhbm5lci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM2RURBQTYx
MTEyNzFDNjAwRTc2NzhCIC8qIFBhZ2VDbGllbnQuaCBpbiBIZWFkZXJzICovLAotCQkJCTFBOTBD
MjM3MTI2NTA3MTcwMDNFNDRENCAvKiBQYWdlT3ZlcmxheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QzU3NEE1ODExMkU2NjY4MTAwMkRGRTk4IC8qIFBhc3RlYm9hcmRUeXBlcy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJRTE5NTgyRDMxNTNDQkZENzAwQjYwODc1IC8qIFBERktpdEltcG9ydHMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTFBRTAwRDRGMTgyRDZGNTAwMDA4N0RENyAvKiBXS0Jyb3dzaW5nQ29u
dGV4dEhhbmRsZUludGVybmFsLmggaW4gSGVhZGVycyAqLywKQEAgLTg5MjgsNyArODkyMSw2IEBA
CiAJCQkJNTFFMzUxRjUxODBGNUM3NTAwRTUzQkU5IC8qIFdlYklEQkZhY3RvcnlCYWNrZW5kLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTdDMzg3NDM0MTcyRjU2MTUwMDFCRDg4QSAvKiBQYWdlQmFu
bmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdDNkQzN0ZDMTcyRjU1NUYwMDlEMjg0NyAvKiBQ
YWdlQmFubmVyTWFjLm1tIGluIFNvdXJjZXMgKi8sCi0JCQkJMUE5MEMyMzgxMjY1MDcxNzAwM0U0
NEQ0IC8qIFBhZ2VPdmVybGF5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUM1NzRBNTgyMTJFNjY2
ODEwMDJERkU5OCAvKiBQYXN0ZWJvYXJkVHlwZXMubW0gaW4gU291cmNlcyAqLywKIAkJCQlFMTk1
ODJENjE1M0NDMDU0MDBCNjA4NzUgLyogUERGS2l0SW1wb3J0cy5tbSBpbiBTb3VyY2VzICovLAog
CQkJCTJEODcwRDEwMTYyMzRGRkUwMDBBM0YyMCAvKiBQREZQbHVnaW4ubW0gaW4gU291cmNlcyAq
LywKQEAgLTkxMjgsNyArOTEyMCw2IEBACiAJCQkJQTU0MjkzQTUxOTVBNDNERDAwMjc4MkM3IC8q
IFdLSW5zcGVjdG9yTm9kZVNlYXJjaEdlc3R1cmVSZWNvZ25pemVyLm1tIGluIFNvdXJjZXMgKi8s
CiAJCQkJQzAzMzdEQUUxMjdBMjRGRTAwOEZGNEY0IC8qIFdlYkV2ZW50LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUJDMDMyREJBMTBGNDM4MEYwMDU4QzE1QSAvKiBXZWJFdmVudENvbnZlcnNpb24u
Y3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMkQxNDBFQUYxOEYzN0JFMDAwNUU3NUEwIC8qIFBhZ2VP
dmVybGF5Q29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzExMUI1RTExMkY2Mjk4
MDAzMzdCQUIgLyogV2ViRXZlbnRGYWN0b3J5Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQTExOEE5
RUUxOTA3QUQ2RjAwRjdDOTJCIC8qIFF1aWNrTG9va0RvY3VtZW50RGF0YS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkxQTNERDFGRDEyNUU1OUYzMDA0NTE1RTYgLyogV2ViRmluZENsaWVudC5jcHAg
aW4gU291cmNlcyAqLywKQEAgLTkyMTIsNiArOTIwMyw3IEBACiAJCQkJQzA2QzYwOTUxMjRDMTQ0
QjAwMDE2ODJGIC8qIFdlYlBhZ2VDcmVhdGlvblBhcmFtZXRlcnMuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQzU5QzRBNTgxOEI4MTE3NDAwN0JEQ0I2IC8qIEFzc2lzdGVkTm9kZUluZm9ybWF0aW9u
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDN0I2MjA3MTI5QTBBNjcwMEQxNzRBNCAvKiBXZWJQ
YWdlR3JvdXAuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMkQ1QzlEMDUxOUM4MUQ4RjAwQjNDNUMx
IC8qIFdlYlBhZ2VPdmVybGF5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDN0I2MjUzMTJBNDND
OTYwMEQxNzRBNCAvKiBXZWJQYWdlR3JvdXBEYXRhLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJD
N0I2MjE2MTJBNDIxOUEwMEQxNzRBNCAvKiBXZWJQYWdlR3JvdXBQcm94eS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkyOUQ1NURGMTE2MUJGOUYxMDAzMUEyRTMgLyogV2ViUGFnZUdyb3VwUHJveHlN
ZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlQVBJQ2FzdC5oIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZUFQ
SUNhc3QuaAppbmRleCBlNjM1NDA4Li4wZDViN2M3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlQVBJQ2FzdC5oCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVB
UElDYXN0LmgKQEAgLTQ5LDExICs0OSwxMSBAQCBjbGFzcyBJbmplY3RlZEJ1bmRsZU5vZGVIYW5k
bGU7CiBjbGFzcyBJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlOwogY2xhc3MgSW5qZWN0ZWRCdW5k
bGVTY3JpcHRXb3JsZDsKIGNsYXNzIFBhZ2VCYW5uZXI7Ci1jbGFzcyBQYWdlT3ZlcmxheTsKIGNs
YXNzIFdlYkZyYW1lOwogY2xhc3MgV2ViSW5zcGVjdG9yOwogY2xhc3MgV2ViUGFnZTsKIGNsYXNz
IFdlYlBhZ2VHcm91cFByb3h5OworY2xhc3MgV2ViUGFnZU92ZXJsYXk7CiAKIFdLX0FERF9BUElf
TUFQUElORyhXS0J1bmRsZUJhY2tGb3J3YXJkTGlzdEl0ZW1SZWYsIEluamVjdGVkQnVuZGxlQmFj
a0ZvcndhcmRMaXN0SXRlbSkKIFdLX0FERF9BUElfTUFQUElORyhXS0J1bmRsZUJhY2tGb3J3YXJk
TGlzdFJlZiwgSW5qZWN0ZWRCdW5kbGVCYWNrRm9yd2FyZExpc3QpCkBAIC02Niw3ICs2Niw3IEBA
IFdLX0FERF9BUElfTUFQUElORyhXS0J1bmRsZU5hdmlnYXRpb25BY3Rpb25SZWYsIEluamVjdGVk
QnVuZGxlTmF2aWdhdGlvbkFjdGlvbikKIFdLX0FERF9BUElfTUFQUElORyhXS0J1bmRsZU5vZGVI
YW5kbGVSZWYsIEluamVjdGVkQnVuZGxlTm9kZUhhbmRsZSkKIFdLX0FERF9BUElfTUFQUElORyhX
S0J1bmRsZVBhZ2VCYW5uZXJSZWYsIFBhZ2VCYW5uZXIpCiBXS19BRERfQVBJX01BUFBJTkcoV0tC
dW5kbGVQYWdlR3JvdXBSZWYsIFdlYlBhZ2VHcm91cFByb3h5KQotV0tfQUREX0FQSV9NQVBQSU5H
KFdLQnVuZGxlUGFnZU92ZXJsYXlSZWYsIFBhZ2VPdmVybGF5KQorV0tfQUREX0FQSV9NQVBQSU5H
KFdLQnVuZGxlUGFnZU92ZXJsYXlSZWYsIFdlYlBhZ2VPdmVybGF5KQogV0tfQUREX0FQSV9NQVBQ
SU5HKFdLQnVuZGxlUGFnZVJlZiwgV2ViUGFnZSkKIFdLX0FERF9BUElfTUFQUElORyhXS0J1bmRs
ZVJhbmdlSGFuZGxlUmVmLCBJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlKQogV0tfQUREX0FQSV9N
QVBQSU5HKFdLQnVuZGxlUmVmLCBJbmplY3RlZEJ1bmRsZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVQYWdlLmNwcCBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVQ
YWdlLmNwcAppbmRleCAyMTE0ZjU4Li4yOTQwNWI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlUGFnZS5jcHAKKysrIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZVBh
Z2UuY3BwCkBAIC00NywxMiArNDcsMTUgQEAKICNpbmNsdWRlICJXZWJGdWxsU2NyZWVuTWFuYWdl
ci5oIgogI2luY2x1ZGUgIldlYkltYWdlLmgiCiAjaW5jbHVkZSAiV2ViUGFnZS5oIgorI2luY2x1
ZGUgIldlYlBhZ2VPdmVybGF5LmgiCiAjaW5jbHVkZSAiV2ViUmVuZGVyTGF5ZXIuaCIKICNpbmNs
dWRlICJXZWJSZW5kZXJPYmplY3QuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0FYT2JqZWN0Q2FjaGUu
aD4KICNpbmNsdWRlIDxXZWJDb3JlL0FjY2Vzc2liaWxpdHlPYmplY3QuaD4KICNpbmNsdWRlIDxX
ZWJDb3JlL01haW5GcmFtZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUGFnZS5oPgorI2luY2x1ZGUg
PFdlYkNvcmUvUGFnZU92ZXJsYXkuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1BhZ2VPdmVybGF5Q29u
dHJvbGxlci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvVVJMLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExp
YkV4dHJhcy5oPgogCkBAIC0zNTQsMjIgKzM1NywyMiBAQCBXS0J1bmRsZUJhY2tGb3J3YXJkTGlz
dFJlZiBXS0J1bmRsZVBhZ2VHZXRCYWNrRm9yd2FyZExpc3QoV0tCdW5kbGVQYWdlUmVmIHBhZ2VS
ZQogCiB2b2lkIFdLQnVuZGxlUGFnZUluc3RhbGxQYWdlT3ZlcmxheShXS0J1bmRsZVBhZ2VSZWYg
cGFnZVJlZiwgV0tCdW5kbGVQYWdlT3ZlcmxheVJlZiBwYWdlT3ZlcmxheVJlZikKIHsKLSAgICB0
b0ltcGwocGFnZVJlZiktPmluc3RhbGxQYWdlT3ZlcmxheSh0b0ltcGwocGFnZU92ZXJsYXlSZWYp
KTsKKyAgICB0b0ltcGwocGFnZVJlZiktPmNvcmVQYWdlKCktPnBhZ2VPdmVybGF5Q29udHJvbGxl
cigpLmluc3RhbGxQYWdlT3ZlcmxheSh0b0ltcGwocGFnZU92ZXJsYXlSZWYpLT5jb3JlT3Zlcmxh
eSgpLCBXZWJDb3JlOjpQYWdlT3ZlcmxheTo6RmFkZU1vZGU6OkRvTm90RmFkZSk7CiB9CiAKIHZv
aWQgV0tCdW5kbGVQYWdlVW5pbnN0YWxsUGFnZU92ZXJsYXkoV0tCdW5kbGVQYWdlUmVmIHBhZ2VS
ZWYsIFdLQnVuZGxlUGFnZU92ZXJsYXlSZWYgcGFnZU92ZXJsYXlSZWYpCiB7Ci0gICAgdG9JbXBs
KHBhZ2VSZWYpLT51bmluc3RhbGxQYWdlT3ZlcmxheSh0b0ltcGwocGFnZU92ZXJsYXlSZWYpKTsK
KyAgICB0b0ltcGwocGFnZVJlZiktPmNvcmVQYWdlKCktPnBhZ2VPdmVybGF5Q29udHJvbGxlcigp
LnVuaW5zdGFsbFBhZ2VPdmVybGF5KHRvSW1wbChwYWdlT3ZlcmxheVJlZiktPmNvcmVPdmVybGF5
KCksIFdlYkNvcmU6OlBhZ2VPdmVybGF5OjpGYWRlTW9kZTo6RG9Ob3RGYWRlKTsKIH0KIAogdm9p
ZCBXS0J1bmRsZVBhZ2VJbnN0YWxsUGFnZU92ZXJsYXlXaXRoQW5pbWF0aW9uKFdLQnVuZGxlUGFn
ZVJlZiBwYWdlUmVmLCBXS0J1bmRsZVBhZ2VPdmVybGF5UmVmIHBhZ2VPdmVybGF5UmVmKQogewot
ICAgIHRvSW1wbChwYWdlUmVmKS0+aW5zdGFsbFBhZ2VPdmVybGF5KHRvSW1wbChwYWdlT3Zlcmxh
eVJlZiksIFBhZ2VPdmVybGF5OjpGYWRlTW9kZTo6RmFkZSk7CisgICAgdG9JbXBsKHBhZ2VSZWYp
LT5jb3JlUGFnZSgpLT5wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKS5pbnN0YWxsUGFnZU92ZXJsYXko
dG9JbXBsKHBhZ2VPdmVybGF5UmVmKS0+Y29yZU92ZXJsYXkoKSwgV2ViQ29yZTo6UGFnZU92ZXJs
YXk6OkZhZGVNb2RlOjpGYWRlKTsKIH0KIAogdm9pZCBXS0J1bmRsZVBhZ2VVbmluc3RhbGxQYWdl
T3ZlcmxheVdpdGhBbmltYXRpb24oV0tCdW5kbGVQYWdlUmVmIHBhZ2VSZWYsIFdLQnVuZGxlUGFn
ZU92ZXJsYXlSZWYgcGFnZU92ZXJsYXlSZWYpCiB7Ci0gICAgdG9JbXBsKHBhZ2VSZWYpLT51bmlu
c3RhbGxQYWdlT3ZlcmxheSh0b0ltcGwocGFnZU92ZXJsYXlSZWYpLCBQYWdlT3ZlcmxheTo6RmFk
ZU1vZGU6OkZhZGUpOworICAgIHRvSW1wbChwYWdlUmVmKS0+Y29yZVBhZ2UoKS0+cGFnZU92ZXJs
YXlDb250cm9sbGVyKCkudW5pbnN0YWxsUGFnZU92ZXJsYXkodG9JbXBsKHBhZ2VPdmVybGF5UmVm
KS0+Y29yZU92ZXJsYXkoKSwgV2ViQ29yZTo6UGFnZU92ZXJsYXk6OkZhZGVNb2RlOjpGYWRlKTsK
IH0KIAogdm9pZCBXS0J1bmRsZVBhZ2VTZXRUb3BPdmVyaGFuZ0ltYWdlKFdLQnVuZGxlUGFnZVJl
ZiBwYWdlUmVmLCBXS0ltYWdlUmVmIGltYWdlUmVmKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZVBhZ2VPdmVybGF5LmNw
cCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5k
bGVQYWdlT3ZlcmxheS5jcHAKaW5kZXggYmJhODYyNi4uMTNjMzE2YyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZVBhZ2VP
dmVybGF5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9jL1dLQnVuZGxlUGFnZU92ZXJsYXkuY3BwCkBAIC0yNywxMCArMjcsMTcgQEAKICNpbmNs
dWRlICJXS0J1bmRsZVBhZ2VPdmVybGF5LmgiCiAKICNpbmNsdWRlICJBUElDbGllbnQuaCIKLSNp
bmNsdWRlICJQYWdlT3ZlcmxheS5oIgogI2luY2x1ZGUgIldLQVBJQ2FzdC5oIgorI2luY2x1ZGUg
IldLQXJyYXkuaCIKICNpbmNsdWRlICJXS0J1bmRsZUFQSUNhc3QuaCIKKyNpbmNsdWRlICJXS051
bWJlci5oIgorI2luY2x1ZGUgIldLUmV0YWluUHRyLmgiCisjaW5jbHVkZSAiV0tTaGFyZWRBUElD
YXN0LmgiCisjaW5jbHVkZSAiV0tTdHJpbmdQcml2YXRlLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9H
cmFwaGljc0NvbnRleHQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1BhZ2VPdmVybGF5Lmg+CisjaW5j
bHVkZSA8V2ViQ29yZS9QbGF0Zm9ybU1vdXNlRXZlbnQuaD4KKyNpbmNsdWRlIDxXZWJLaXQvV2Vi
UGFnZU92ZXJsYXkuaD4KIAogbmFtZXNwYWNlIEFQSSB7CiAKQEAgLTQ3LDcgKzU0LDcgQEAgdGVt
cGxhdGU8PiBzdHJ1Y3QgQ2xpZW50VHJhaXRzPFdLQnVuZGxlUGFnZU92ZXJsYXlBY2Nlc3NpYmls
aXR5Q2xpZW50QmFzZT4gewogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiB1c2luZyBuYW1lc3Bh
Y2UgV2ViS2l0OwogCi1jbGFzcyBQYWdlT3ZlcmxheUNsaWVudEltcGwgOiBBUEk6OkNsaWVudDxX
S0J1bmRsZVBhZ2VPdmVybGF5Q2xpZW50QmFzZT4sIHB1YmxpYyBQYWdlT3ZlcmxheTo6Q2xpZW50
IHsKK2NsYXNzIFBhZ2VPdmVybGF5Q2xpZW50SW1wbCA6IEFQSTo6Q2xpZW50PFdLQnVuZGxlUGFn
ZU92ZXJsYXlDbGllbnRCYXNlPiwgcHVibGljIFdlYlBhZ2VPdmVybGF5OjpDbGllbnQgewogcHVi
bGljOgogICAgIGV4cGxpY2l0IFBhZ2VPdmVybGF5Q2xpZW50SW1wbChXS0J1bmRsZVBhZ2VPdmVy
bGF5Q2xpZW50QmFzZSogY2xpZW50KQogICAgIHsKQEAgLTYwLDEzICs2NywxMyBAQCBwdWJsaWM6
CiAgICAgfQogCiBwcml2YXRlOgotICAgIC8vIFBhZ2VPdmVybGF5OjpDbGllbnQuCi0gICAgdmly
dHVhbCB2b2lkIHBhZ2VPdmVybGF5RGVzdHJveWVkKFBhZ2VPdmVybGF5KikKKyAgICAvLyBXZWJQ
YWdlT3ZlcmxheTo6Q2xpZW50LgorICAgIHZpcnR1YWwgdm9pZCBwYWdlT3ZlcmxheURlc3Ryb3ll
ZChXZWJQYWdlT3ZlcmxheSopIG92ZXJyaWRlCiAgICAgewogICAgICAgICBkZWxldGUgdGhpczsK
ICAgICB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgd2lsbE1vdmVUb1dlYlBhZ2UoUGFnZU92ZXJsYXkq
IHBhZ2VPdmVybGF5LCBXZWJQYWdlKiBwYWdlKQorICAgIHZpcnR1YWwgdm9pZCB3aWxsTW92ZVRv
UGFnZShXZWJQYWdlT3ZlcmxheSogcGFnZU92ZXJsYXksIFdlYlBhZ2UqIHBhZ2UpIG92ZXJyaWRl
CiAgICAgewogICAgICAgICBpZiAoIW1fY2xpZW50LndpbGxNb3ZlVG9QYWdlKQogICAgICAgICAg
ICAgcmV0dXJuOwpAQCAtNzQsNyArODEsNyBAQCBwcml2YXRlOgogICAgICAgICBtX2NsaWVudC53
aWxsTW92ZVRvUGFnZSh0b0FQSShwYWdlT3ZlcmxheSksIHRvQVBJKHBhZ2UpLCBtX2NsaWVudC5i
YXNlLmNsaWVudEluZm8pOwogICAgIH0KICAgICAKLSAgICB2aXJ0dWFsIHZvaWQgZGlkTW92ZVRv
V2ViUGFnZShQYWdlT3ZlcmxheSogcGFnZU92ZXJsYXksIFdlYlBhZ2UqIHBhZ2UpCisgICAgdmly
dHVhbCB2b2lkIGRpZE1vdmVUb1BhZ2UoV2ViUGFnZU92ZXJsYXkqIHBhZ2VPdmVybGF5LCBXZWJQ
YWdlKiBwYWdlKSBvdmVycmlkZQogICAgIHsKICAgICAgICAgaWYgKCFtX2NsaWVudC5kaWRNb3Zl
VG9QYWdlKQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtODIsNyArODksNyBAQCBwcml2YXRlOgog
ICAgICAgICBtX2NsaWVudC5kaWRNb3ZlVG9QYWdlKHRvQVBJKHBhZ2VPdmVybGF5KSwgdG9BUEko
cGFnZSksIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7CiAgICAgfQogCi0gICAgdmlydHVhbCB2
b2lkIGRyYXdSZWN0KFBhZ2VPdmVybGF5KiBwYWdlT3ZlcmxheSwgR3JhcGhpY3NDb250ZXh0JiBn
cmFwaGljc0NvbnRleHQsIGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCkKKyAgICB2aXJ0dWFsIHZv
aWQgZHJhd1JlY3QoV2ViUGFnZU92ZXJsYXkqIHBhZ2VPdmVybGF5LCBHcmFwaGljc0NvbnRleHQm
IGdyYXBoaWNzQ29udGV4dCwgY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KSBvdmVycmlkZQogICAg
IHsKICAgICAgICAgaWYgKCFtX2NsaWVudC5kcmF3UmVjdCkKICAgICAgICAgICAgIHJldHVybjsK
QEAgLTkwLDIzICs5NywyMyBAQCBwcml2YXRlOgogICAgICAgICBtX2NsaWVudC5kcmF3UmVjdCh0
b0FQSShwYWdlT3ZlcmxheSksIGdyYXBoaWNzQ29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKSwgdG9B
UEkoZGlydHlSZWN0KSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKICAgICB9CiAgICAgCi0g
ICAgdmlydHVhbCBib29sIG1vdXNlRXZlbnQoUGFnZU92ZXJsYXkqIHBhZ2VPdmVybGF5LCBjb25z
dCBXZWJNb3VzZUV2ZW50JiBldmVudCkKKyAgICB2aXJ0dWFsIGJvb2wgbW91c2VFdmVudChXZWJQ
YWdlT3ZlcmxheSogcGFnZU92ZXJsYXksIGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgZXZlbnQp
IG92ZXJyaWRlCiAgICAgewogICAgICAgICBzd2l0Y2ggKGV2ZW50LnR5cGUoKSkgewotICAgICAg
ICBjYXNlIFdlYkV2ZW50OjpNb3VzZURvd246IHsKKyAgICAgICAgY2FzZSBQbGF0Zm9ybU1vdXNl
RXZlbnQ6OlR5cGU6Ok1vdXNlUHJlc3NlZDogewogICAgICAgICAgICAgaWYgKCFtX2NsaWVudC5t
b3VzZURvd24pCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgICAgICBy
ZXR1cm4gbV9jbGllbnQubW91c2VEb3duKHRvQVBJKHBhZ2VPdmVybGF5KSwgdG9BUEkoZXZlbnQu
cG9zaXRpb24oKSksIHRvQVBJKGV2ZW50LmJ1dHRvbigpKSwgbV9jbGllbnQuYmFzZS5jbGllbnRJ
bmZvKTsKICAgICAgICAgfQotICAgICAgICBjYXNlIFdlYkV2ZW50OjpNb3VzZVVwOiB7CisgICAg
ICAgIGNhc2UgUGxhdGZvcm1Nb3VzZUV2ZW50OjpUeXBlOjpNb3VzZVJlbGVhc2VkOiB7CiAgICAg
ICAgICAgICBpZiAoIW1fY2xpZW50Lm1vdXNlVXApCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCiAgICAgICAgICAgICByZXR1cm4gbV9jbGllbnQubW91c2VVcCh0b0FQSShwYWdlT3Zl
cmxheSksIHRvQVBJKGV2ZW50LnBvc2l0aW9uKCkpLCB0b0FQSShldmVudC5idXR0b24oKSksIG1f
Y2xpZW50LmJhc2UuY2xpZW50SW5mbyk7CiAgICAgICAgIH0KLSAgICAgICAgY2FzZSBXZWJFdmVu
dDo6TW91c2VNb3ZlOiB7Ci0gICAgICAgICAgICBpZiAoZXZlbnQuYnV0dG9uKCkgPT0gV2ViTW91
c2VFdmVudDo6Tm9CdXR0b24pIHsKKyAgICAgICAgY2FzZSBQbGF0Zm9ybU1vdXNlRXZlbnQ6OlR5
cGU6Ok1vdXNlTW92ZWQ6IHsKKyAgICAgICAgICAgIGlmIChldmVudC5idXR0b24oKSA9PSBNb3Vz
ZUJ1dHRvbjo6Tm9CdXR0b24pIHsKICAgICAgICAgICAgICAgICBpZiAoIW1fY2xpZW50Lm1vdXNl
TW92ZWQpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtMTI1LDE4ICsx
MzIsNDMgQEAgcHJpdmF0ZToKICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICB2aXJ0dWFsIFdL
VHlwZVJlZiBjb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlKFBhZ2VPdmVybGF5KiBwYWdl
T3ZlcmxheSwgV0tTdHJpbmdSZWYgYXR0cmlidXRlLCBXS1R5cGVSZWYgcGFyYW1ldGVyKQorICAg
IHZpcnR1YWwgYm9vbCBjb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVN0cmluZ1ZhbHVlRm9yUG9p
bnQoV2ViUGFnZU92ZXJsYXkqIHBhZ2VPdmVybGF5LCBTdHJpbmcgYXR0cmlidXRlLCBXZWJDb3Jl
OjpGbG9hdFBvaW50IHBhcmFtZXRlciwgU3RyaW5nJiB2YWx1ZSkgb3ZlcnJpZGUKICAgICB7CiAg
ICAgICAgIGlmICghbV9hY2Nlc3NpYmlsaXR5Q2xpZW50LmNsaWVudCgpLmNvcHlBY2Nlc3NpYmls
aXR5QXR0cmlidXRlVmFsdWUpCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgcmV0dXJu
IG1fYWNjZXNzaWJpbGl0eUNsaWVudC5jbGllbnQoKS5jb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0
ZVZhbHVlKHRvQVBJKHBhZ2VPdmVybGF5KSwgYXR0cmlidXRlLCBwYXJhbWV0ZXIsIG1fYWNjZXNz
aWJpbGl0eUNsaWVudC5jbGllbnQoKS5iYXNlLmNsaWVudEluZm8pOworICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICBXS1JldGFpblB0cjxXS1R5cGVSZWY+IHdrVHlwZSA9IG1fYWNj
ZXNzaWJpbGl0eUNsaWVudC5jbGllbnQoKS5jb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVl
KHRvQVBJKHBhZ2VPdmVybGF5KSwgdG9Db3BpZWRBUEkoYXR0cmlidXRlKSwgV0tQb2ludENyZWF0
ZShXS1BvaW50TWFrZShwYXJhbWV0ZXIueCgpLCBwYXJhbWV0ZXIueSgpKSksIG1fYWNjZXNzaWJp
bGl0eUNsaWVudC5jbGllbnQoKS5iYXNlLmNsaWVudEluZm8pOworICAgICAgICBpZiAodG9JbXBs
KHdrVHlwZS5nZXQoKSktPnR5cGUoKSAhPSBBUEk6OlN0cmluZzo6QVBJVHlwZSkKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgdmFsdWUgPSB0b1dURlN0cmluZyhzdGF0aWNfY2Fz
dDxXS1N0cmluZ1JlZj4od2tUeXBlLmdldCgpKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0KKworICAgIHZpcnR1YWwgYm9vbCBjb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZUJvb2xWYWx1
ZUZvclBvaW50KFdlYlBhZ2VPdmVybGF5KiBwYWdlT3ZlcmxheSwgU3RyaW5nIGF0dHJpYnV0ZSwg
V2ViQ29yZTo6RmxvYXRQb2ludCBwYXJhbWV0ZXIsIGJvb2wmIHZhbHVlKSBvdmVycmlkZQorICAg
IHsKKyAgICAgICAgaWYgKCFtX2FjY2Vzc2liaWxpdHlDbGllbnQuY2xpZW50KCkuY29weUFjY2Vz
c2liaWxpdHlBdHRyaWJ1dGVWYWx1ZSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiB3a1R5cGUgPSBtX2FjY2Vzc2liaWxpdHlDbGllbnQu
Y2xpZW50KCkuY29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZSh0b0FQSShwYWdlT3Zlcmxh
eSksIHRvQ29waWVkQVBJKGF0dHJpYnV0ZSksIFdLUG9pbnRDcmVhdGUoV0tQb2ludE1ha2UocGFy
YW1ldGVyLngoKSwgcGFyYW1ldGVyLnkoKSkpLCBtX2FjY2Vzc2liaWxpdHlDbGllbnQuY2xpZW50
KCkuYmFzZS5jbGllbnRJbmZvKTsKKyAgICAgICAgaWYgKHRvSW1wbCh3a1R5cGUuZ2V0KCkpLT50
eXBlKCkgIT0gQVBJOjpCb29sZWFuOjpBUElUeXBlKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICB2YWx1ZSA9IFdLQm9vbGVhbkdldFZhbHVlKHN0YXRpY19jYXN0PFdLQm9vbGVh
blJlZj4od2tUeXBlLmdldCgpKSk7CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAg
IHZpcnR1YWwgV0tBcnJheVJlZiBjb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZU5hbWVzKFBhZ2VP
dmVybGF5KiBwYWdlT3ZlcmxheSwgYm9vbCBwYXJhbWVyaXplZE5hbWVzKQorICAgIHZpcnR1YWwg
VmVjdG9yPFN0cmluZz4gY29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVOYW1lcyhXZWJQYWdlT3Zl
cmxheSogcGFnZU92ZXJsYXksIGJvb2wgcGFyYW1lcml6ZWROYW1lcykgb3ZlcnJpZGUKICAgICB7
CisgICAgICAgIFZlY3RvcjxTdHJpbmc+IG5hbWVzOwogICAgICAgICBpZiAoIW1fYWNjZXNzaWJp
bGl0eUNsaWVudC5jbGllbnQoKS5jb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZU5hbWVzKQotICAg
ICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIHJldHVybiBtX2FjY2Vzc2liaWxpdHlDbGllbnQu
Y2xpZW50KCkuY29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVOYW1lcyh0b0FQSShwYWdlT3Zlcmxh
eSksIHBhcmFtZXJpemVkTmFtZXMsIG1fYWNjZXNzaWJpbGl0eUNsaWVudC5jbGllbnQoKS5iYXNl
LmNsaWVudEluZm8pOworICAgICAgICAgICAgcmV0dXJuIG5hbWVzOworICAgICAgICBXS1JldGFp
blB0cjxXS0FycmF5UmVmPiB3a05hbWVzID0gbV9hY2Nlc3NpYmlsaXR5Q2xpZW50LmNsaWVudCgp
LmNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlTmFtZXModG9BUEkocGFnZU92ZXJsYXkpLCBwYXJh
bWVyaXplZE5hbWVzLCBtX2FjY2Vzc2liaWxpdHlDbGllbnQuY2xpZW50KCkuYmFzZS5jbGllbnRJ
bmZvKTsKKworICAgICAgICBzaXplX3QgY291bnQgPSBXS0FycmF5R2V0U2l6ZSh3a05hbWVzLmdl
dCgpKTsKKyAgICAgICAgZm9yIChzaXplX3QgayA9IDA7IGsgPCBjb3VudDsgaysrKSB7CisgICAg
ICAgICAgICBXS1R5cGVSZWYgaXRlbSA9IFdLQXJyYXlHZXRJdGVtQXRJbmRleCh3a05hbWVzLmdl
dCgpLCBrKTsKKyAgICAgICAgICAgIGlmICh0b0ltcGwoaXRlbSktPnR5cGUoKSA9PSBBUEk6OlN0
cmluZzo6QVBJVHlwZSkKKyAgICAgICAgICAgICAgICBuYW1lcy5hcHBlbmQodG9XVEZTdHJpbmco
c3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KGl0ZW0pKSk7CisgICAgICAgIH0KKworICAgICAgICBy
ZXR1cm4gbmFtZXM7CiAgICAgfQogICAgIAogICAgIEFQSTo6Q2xpZW50PFdLQnVuZGxlUGFnZU92
ZXJsYXlBY2Nlc3NpYmlsaXR5Q2xpZW50QmFzZT4gbV9hY2Nlc3NpYmlsaXR5Q2xpZW50OwpAQCAt
MTQ0LDcgKzE3Niw3IEBAIHByaXZhdGU6CiAKIFdLVHlwZUlEIFdLQnVuZGxlUGFnZU92ZXJsYXlH
ZXRUeXBlSUQoKQogewotICAgIHJldHVybiB0b0FQSShQYWdlT3ZlcmxheTo6QVBJVHlwZSk7Cisg
ICAgcmV0dXJuIHRvQVBJKFdlYlBhZ2VPdmVybGF5OjpBUElUeXBlKTsKIH0KIAogV0tCdW5kbGVQ
YWdlT3ZlcmxheVJlZiBXS0J1bmRsZVBhZ2VPdmVybGF5Q3JlYXRlKFdLQnVuZGxlUGFnZU92ZXJs
YXlDbGllbnRCYXNlKiB3a0NsaWVudCkKQEAgLTE1NSw3ICsxODcsNyBAQCBXS0J1bmRsZVBhZ2VP
dmVybGF5UmVmIFdLQnVuZGxlUGFnZU92ZXJsYXlDcmVhdGUoV0tCdW5kbGVQYWdlT3ZlcmxheUNs
aWVudEJhc2UqCiAgICAgYXV0byBjbGllbnRJbXBsID0gc3RkOjptYWtlX3VuaXF1ZTxQYWdlT3Zl
cmxheUNsaWVudEltcGw+KHdrQ2xpZW50KTsKIAogICAgIC8vIEZJWE1FOiBMb29rcyBsaWtlIHRo
aXMgbGVha3MgdGhlIGNsaWVudEltcGwuCi0gICAgcmV0dXJuIHRvQVBJKFBhZ2VPdmVybGF5Ojpj
cmVhdGUoY2xpZW50SW1wbC5yZWxlYXNlKCkpLmxlYWtSZWYoKSk7CisgICAgcmV0dXJuIHRvQVBJ
KFdlYlBhZ2VPdmVybGF5OjpjcmVhdGUoY2xpZW50SW1wbC5yZWxlYXNlKCkpLmxlYWtSZWYoKSk7
CiB9CiAKIHZvaWQgV0tCdW5kbGVQYWdlT3ZlcmxheVNldEFjY2Vzc2liaWxpdHlDbGllbnQoV0tC
dW5kbGVQYWdlT3ZlcmxheVJlZiBidW5kbGVQYWdlT3ZlcmxheVJlZiwgV0tCdW5kbGVQYWdlT3Zl
cmxheUFjY2Vzc2liaWxpdHlDbGllbnRCYXNlKiBjbGllbnQpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAgYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5j
cHAKaW5kZXggYzJkNTExMDcuLmEyMDk3YjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAKQEAg
LTg0MCw3ICs4NDAsOSBAQCBQYXNzUmVmUHRyPFdlYkNvcmU6OlNlYXJjaFBvcHVwTWVudT4gV2Vi
Q2hyb21lQ2xpZW50OjpjcmVhdGVTZWFyY2hQb3B1cE1lbnUoV2ViQwogCiBHcmFwaGljc0xheWVy
RmFjdG9yeSogV2ViQ2hyb21lQ2xpZW50OjpncmFwaGljc0xheWVyRmFjdG9yeSgpIGNvbnN0CiB7
Ci0gICAgcmV0dXJuIG1fcGFnZS0+ZHJhd2luZ0FyZWEoKS0+Z3JhcGhpY3NMYXllckZhY3Rvcnko
KTsKKyAgICBpZiAoYXV0byBkcmF3aW5nQXJlYSA9IG1fcGFnZS0+ZHJhd2luZ0FyZWEoKSkKKyAg
ICAgICAgcmV0dXJuIGRyYXdpbmdBcmVhLT5ncmFwaGljc0xheWVyRmFjdG9yeSgpOworICAgIHJl
dHVybiBudWxscHRyOwogfQogCiAjaWYgVVNFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FX0RJU1BM
QVlfTU9OSVRPUikKQEAgLTg1OCwxMiArODYwLDEwIEBAIHZvaWQgV2ViQ2hyb21lQ2xpZW50Ojph
dHRhY2hSb290R3JhcGhpY3NMYXllcihGcmFtZSosIEdyYXBoaWNzTGF5ZXIqIGxheWVyKQogICAg
ICAgICBtX3BhZ2UtPmV4aXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSgpOwogfQogCi1HcmFw
aGljc0xheWVyKiBXZWJDaHJvbWVDbGllbnQ6OmRvY3VtZW50T3ZlcmxheUxheWVyRm9yRnJhbWUo
RnJhbWUmIGZyYW1lKQordm9pZCBXZWJDaHJvbWVDbGllbnQ6OmF0dGFjaFZpZXdPdmVybGF5R3Jh
cGhpY3NMYXllcihGcmFtZSogZnJhbWUsIEdyYXBoaWNzTGF5ZXIqIGdyYXBoaWNzTGF5ZXIpCiB7
Ci0gICAgaWYgKCZmcmFtZSA9PSAmbV9wYWdlLT5jb3JlUGFnZSgpLT5tYWluRnJhbWUoKSkKLSAg
ICAgICAgcmV0dXJuIG1fcGFnZS0+cGFnZU92ZXJsYXlDb250cm9sbGVyKCkuZG9jdW1lbnRPdmVy
bGF5Um9vdExheWVyKCk7Ci0KLSAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBpZiAoYXV0byBkcmF3
aW5nQXJlYSA9IG1fcGFnZS0+ZHJhd2luZ0FyZWEoKSkKKyAgICAgICAgZHJhd2luZ0FyZWEtPmF0
dGFjaFZpZXdPdmVybGF5R3JhcGhpY3NMYXllcihmcmFtZSwgZ3JhcGhpY3NMYXllcik7CiB9CiAK
IHZvaWQgV2ViQ2hyb21lQ2xpZW50OjpzZXROZWVkc09uZVNob3REcmF3aW5nU3luY2hyb25pemF0
aW9uKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBv
cnQvV2ViQ2hyb21lQ2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVT
dXBwb3J0L1dlYkNocm9tZUNsaWVudC5oCmluZGV4IDk4MmVhYWUuLmQwZTUzODcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xp
ZW50LmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJD
aHJvbWVDbGllbnQuaApAQCAtMjE1LDEwICsyMTUsMTAgQEAgcHJpdmF0ZToKIAogICAgIHZpcnR1
YWwgV2ViQ29yZTo6R3JhcGhpY3NMYXllckZhY3RvcnkqIGdyYXBoaWNzTGF5ZXJGYWN0b3J5KCkg
Y29uc3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIGF0dGFjaFJvb3RHcmFwaGljc0xheWVy
KFdlYkNvcmU6OkZyYW1lKiwgV2ViQ29yZTo6R3JhcGhpY3NMYXllciopIG92ZXJyaWRlOworICAg
IHZpcnR1YWwgdm9pZCBhdHRhY2hWaWV3T3ZlcmxheUdyYXBoaWNzTGF5ZXIoV2ViQ29yZTo6RnJh
bWUqLCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKikgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lk
IHNldE5lZWRzT25lU2hvdERyYXdpbmdTeW5jaHJvbml6YXRpb24oKSBvdmVycmlkZTsKICAgICB2
aXJ0dWFsIHZvaWQgc2NoZWR1bGVDb21wb3NpdGluZ0xheWVyRmx1c2goKSBvdmVycmlkZTsKICAg
ICB2aXJ0dWFsIGJvb2wgYWRqdXN0TGF5ZXJGbHVzaFRocm90dGxpbmcoV2ViQ29yZTo6TGF5ZXJG
bHVzaFRocm90dGxlU3RhdGU6OkZsYWdzKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIFdlYkNvcmU6
OkdyYXBoaWNzTGF5ZXIqIGRvY3VtZW50T3ZlcmxheUxheWVyRm9yRnJhbWUoV2ViQ29yZTo6RnJh
bWUmKSBvdmVycmlkZTsKIAogI2lmIFVTRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRV9ESVNQTEFZ
X01PTklUT1IpCiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPFdlYkNvcmU6OkRpc3BsYXlSZWZyZXNo
TW9uaXRvcj4gY3JlYXRlRGlzcGxheVJlZnJlc2hNb25pdG9yKFBsYXRmb3JtRGlzcGxheUlEKSBj
b25zdCBvdmVycmlkZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
Q29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50LmNwcAppbmRleCA4NTkzNThi
Li44OGNlMjJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVT
dXBwb3J0L1dlYkluc3BlY3RvckNsaWVudC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JDbGllbnQuY3BwCkBAIC0zMyw2ICszMyw3
IEBACiAjaW5jbHVkZSAiV2ViUGFnZS5oIgogI2luY2x1ZGUgPFdlYkNvcmUvSW5zcGVjdG9yQ29u
dHJvbGxlci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUGFnZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUv
UGFnZU92ZXJsYXlDb250cm9sbGVyLmg+CiAjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CiAK
ICNpZiBQTEFURk9STShJT1MpCkBAIC03Myw3ICs3NCw3IEBAIFdlYkluc3BlY3RvckNsaWVudDo6
fldlYkluc3BlY3RvckNsaWVudCgpCiAgICAgfQogCiAgICAgaWYgKG1fcGFpbnRSZWN0T3Zlcmxh
eSkKLSAgICAgICAgbV9wYWdlLT51bmluc3RhbGxQYWdlT3ZlcmxheShtX3BhaW50UmVjdE92ZXJs
YXkuZ2V0KCkpOworICAgICAgICBtX3BhZ2UtPmNvcmVQYWdlKCktPnBhZ2VPdmVybGF5Q29udHJv
bGxlcigpLnVuaW5zdGFsbFBhZ2VPdmVybGF5KG1fcGFpbnRSZWN0T3ZlcmxheS5nZXQoKSwgUGFn
ZU92ZXJsYXk6OkZhZGVNb2RlOjpGYWRlKTsKIH0KIAogdm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6
Omluc3BlY3RvckRlc3Ryb3llZCgpCkBAIC0xMTMsNyArMTE0LDcgQEAgdm9pZCBXZWJJbnNwZWN0
b3JDbGllbnQ6OmhpZ2hsaWdodCgpCiAgICAgaWYgKCFtX2hpZ2hsaWdodE92ZXJsYXkpIHsKICAg
ICAgICAgUmVmUHRyPFBhZ2VPdmVybGF5PiBoaWdobGlnaHRPdmVybGF5ID0gUGFnZU92ZXJsYXk6
OmNyZWF0ZSh0aGlzKTsKICAgICAgICAgbV9oaWdobGlnaHRPdmVybGF5ID0gaGlnaGxpZ2h0T3Zl
cmxheS5nZXQoKTsKLSAgICAgICAgbV9wYWdlLT5pbnN0YWxsUGFnZU92ZXJsYXkoaGlnaGxpZ2h0
T3ZlcmxheS5yZWxlYXNlKCksIFBhZ2VPdmVybGF5OjpGYWRlTW9kZTo6RmFkZSk7CisgICAgICAg
IG1fcGFnZS0+Y29yZVBhZ2UoKS0+cGFnZU92ZXJsYXlDb250cm9sbGVyKCkuaW5zdGFsbFBhZ2VP
dmVybGF5KGhpZ2hsaWdodE92ZXJsYXkucmVsZWFzZSgpLCBQYWdlT3ZlcmxheTo6RmFkZU1vZGU6
OkZhZGUpOwogICAgICAgICBtX2hpZ2hsaWdodE92ZXJsYXktPnNldE5lZWRzRGlzcGxheSgpOwog
ICAgIH0gZWxzZSB7CiAgICAgICAgIG1faGlnaGxpZ2h0T3ZlcmxheS0+c3RvcEZhZGVPdXRBbmlt
YXRpb24oKTsKQEAgLTEzMCw3ICsxMzEsNyBAQCB2b2lkIFdlYkluc3BlY3RvckNsaWVudDo6aGlk
ZUhpZ2hsaWdodCgpCiB7CiAjaWYgIVBMQVRGT1JNKElPUykKICAgICBpZiAobV9oaWdobGlnaHRP
dmVybGF5KQotICAgICAgICBtX3BhZ2UtPnVuaW5zdGFsbFBhZ2VPdmVybGF5KG1faGlnaGxpZ2h0
T3ZlcmxheSwgUGFnZU92ZXJsYXk6OkZhZGVNb2RlOjpGYWRlKTsKKyAgICAgICAgbV9wYWdlLT5j
b3JlUGFnZSgpLT5wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKS51bmluc3RhbGxQYWdlT3ZlcmxheSht
X2hpZ2hsaWdodE92ZXJsYXksIFBhZ2VPdmVybGF5OjpGYWRlTW9kZTo6RmFkZSk7CiAjZWxzZQog
ICAgIG1fcGFnZS0+aGlkZUluc3BlY3RvckhpZ2hsaWdodCgpOwogI2VuZGlmCkBAIC0xNDAsNyAr
MTQxLDcgQEAgdm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6OnNob3dQYWludFJlY3QoY29uc3QgRmxv
YXRSZWN0JiByZWN0KQogewogICAgIGlmICghbV9wYWludFJlY3RPdmVybGF5KSB7CiAgICAgICAg
IG1fcGFpbnRSZWN0T3ZlcmxheSA9IFBhZ2VPdmVybGF5OjpjcmVhdGUodGhpcywgUGFnZU92ZXJs
YXk6Ok92ZXJsYXlUeXBlOjpEb2N1bWVudCk7Ci0gICAgICAgIG1fcGFnZS0+aW5zdGFsbFBhZ2VP
dmVybGF5KG1fcGFpbnRSZWN0T3ZlcmxheSwgUGFnZU92ZXJsYXk6OkZhZGVNb2RlOjpEb05vdEZh
ZGUpOworICAgICAgICBtX3BhZ2UtPmNvcmVQYWdlKCktPnBhZ2VPdmVybGF5Q29udHJvbGxlcigp
Lmluc3RhbGxQYWdlT3ZlcmxheShtX3BhaW50UmVjdE92ZXJsYXksIFBhZ2VPdmVybGF5OjpGYWRl
TW9kZTo6RG9Ob3RGYWRlKTsKICAgICB9CiAKICAgICBpZiAoIW1fcGFpbnRJbmRpY2F0b3JMYXll
ckNsaWVudCkKQEAgLTIwMiw5ICsyMDMsOSBAQCB2b2lkIFdlYkluc3BlY3RvckNsaWVudDo6cGFn
ZU92ZXJsYXlEZXN0cm95ZWQoUGFnZU92ZXJsYXkqKQogewogfQogCi12b2lkIFdlYkluc3BlY3Rv
ckNsaWVudDo6d2lsbE1vdmVUb1dlYlBhZ2UoUGFnZU92ZXJsYXkqLCBXZWJQYWdlKiB3ZWJQYWdl
KQordm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6OndpbGxNb3ZlVG9QYWdlKFBhZ2VPdmVybGF5Kiwg
UGFnZSogcGFnZSkKIHsKLSAgICBpZiAod2ViUGFnZSkKKyAgICBpZiAocGFnZSkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgLy8gVGhlIHBhZ2Ugb3ZlcmxheSBpcyBtb3ZpbmcgYXdheSBmcm9tIHRo
ZSB3ZWIgcGFnZSwgcmVzZXQgaXQuCkBAIC0yMTIsNyArMjEzLDcgQEAgdm9pZCBXZWJJbnNwZWN0
b3JDbGllbnQ6OndpbGxNb3ZlVG9XZWJQYWdlKFBhZ2VPdmVybGF5KiwgV2ViUGFnZSogd2ViUGFn
ZSkKICAgICBtX2hpZ2hsaWdodE92ZXJsYXkgPSAwOwogfQogCi12b2lkIFdlYkluc3BlY3RvckNs
aWVudDo6ZGlkTW92ZVRvV2ViUGFnZShQYWdlT3ZlcmxheSosIFdlYlBhZ2UqKQordm9pZCBXZWJJ
bnNwZWN0b3JDbGllbnQ6OmRpZE1vdmVUb1BhZ2UoUGFnZU92ZXJsYXkqLCBQYWdlKikKIHsKIH0K
IApAQCAtMjIxLDcgKzIyMiw3IEBAIHZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50OjpkcmF3UmVjdChQ
YWdlT3ZlcmxheSosIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYgY29udGV4CiAgICAgbV9wYWdl
LT5jb3JlUGFnZSgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCkuZHJhd0hpZ2hsaWdodChjb250ZXh0
KTsKIH0KIAotYm9vbCBXZWJJbnNwZWN0b3JDbGllbnQ6Om1vdXNlRXZlbnQoUGFnZU92ZXJsYXkq
LCBjb25zdCBXZWJNb3VzZUV2ZW50JikKK2Jvb2wgV2ViSW5zcGVjdG9yQ2xpZW50Ojptb3VzZUV2
ZW50KFBhZ2VPdmVybGF5KiwgY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JikKIHsKICAgICByZXR1
cm4gZmFsc2U7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNv
cmVTdXBwb3J0L1dlYkluc3BlY3RvckNsaWVudC5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JDbGllbnQuaAppbmRleCA3OThjYWM3Li43YTYz
MDAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0
L1dlYkluc3BlY3RvckNsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
Q29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50LmgKQEAgLTI4LDE2ICsyOCwxNiBAQAogCiAj
aWYgRU5BQkxFKElOU1BFQ1RPUikKIAotI2luY2x1ZGUgIlBhZ2VPdmVybGF5LmgiCi0KICNpbmNs
dWRlIDxXZWJDb3JlL0luc3BlY3RvckNsaWVudC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvSW5zcGVj
dG9yRm9yd2FyZGluZy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUGFnZU92ZXJsYXkuaD4KICNpbmNs
dWRlIDx3dGYvSGFzaFNldC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBHcmFwaGlj
c0NvbnRleHQ7CiBjbGFzcyBHcmFwaGljc0xheWVyOwogY2xhc3MgSW50UmVjdDsKK2NsYXNzIFBh
Z2VPdmVybGF5OwogfQogCiBuYW1lc3BhY2UgV2ViS2l0IHsKQEAgLTQ1LDcgKzQ1LDcgQEAgbmFt
ZXNwYWNlIFdlYktpdCB7CiBjbGFzcyBXZWJQYWdlOwogY2xhc3MgUmVwYWludEluZGljYXRvckxh
eWVyQ2xpZW50OwogCi1jbGFzcyBXZWJJbnNwZWN0b3JDbGllbnQgOiBwdWJsaWMgV2ViQ29yZTo6
SW5zcGVjdG9yQ2xpZW50LCBwcml2YXRlIFBhZ2VPdmVybGF5OjpDbGllbnQgeworY2xhc3MgV2Vi
SW5zcGVjdG9yQ2xpZW50IDogcHVibGljIFdlYkNvcmU6Okluc3BlY3RvckNsaWVudCwgcHJpdmF0
ZSBXZWJDb3JlOjpQYWdlT3ZlcmxheTo6Q2xpZW50IHsKIGZyaWVuZCBjbGFzcyBSZXBhaW50SW5k
aWNhdG9yTGF5ZXJDbGllbnQ7CiBwdWJsaWM6CiAgICAgV2ViSW5zcGVjdG9yQ2xpZW50KFdlYlBh
Z2UqKTsKQEAgLTc0LDE4ICs3NCwxOCBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBzaG93
UGFpbnRSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIG92ZXJyaWRlOwogCiAgICAgLy8g
UGFnZU92ZXJsYXk6OkNsaWVudAotICAgIHZpcnR1YWwgdm9pZCBwYWdlT3ZlcmxheURlc3Ryb3ll
ZChQYWdlT3ZlcmxheSopIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCB3aWxsTW92ZVRvV2Vi
UGFnZShQYWdlT3ZlcmxheSosIFdlYlBhZ2UqKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQg
ZGlkTW92ZVRvV2ViUGFnZShQYWdlT3ZlcmxheSosIFdlYlBhZ2UqKSBvdmVycmlkZTsKLSAgICB2
aXJ0dWFsIHZvaWQgZHJhd1JlY3QoUGFnZU92ZXJsYXkqLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQmLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBib29s
IG1vdXNlRXZlbnQoUGFnZU92ZXJsYXkqLCBjb25zdCBXZWJNb3VzZUV2ZW50Jikgb3ZlcnJpZGU7
CisgICAgdmlydHVhbCB2b2lkIHBhZ2VPdmVybGF5RGVzdHJveWVkKFdlYkNvcmU6OlBhZ2VPdmVy
bGF5Kikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHdpbGxNb3ZlVG9QYWdlKFdlYkNvcmU6
OlBhZ2VPdmVybGF5KiwgV2ViQ29yZTo6UGFnZSopIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9p
ZCBkaWRNb3ZlVG9QYWdlKFdlYkNvcmU6OlBhZ2VPdmVybGF5KiwgV2ViQ29yZTo6UGFnZSopIG92
ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBkcmF3UmVjdChXZWJDb3JlOjpQYWdlT3ZlcmxheSos
IFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSBvdmVy
cmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wgbW91c2VFdmVudChXZWJDb3JlOjpQYWdlT3ZlcmxheSos
IGNvbnN0IFdlYkNvcmU6OlBsYXRmb3JtTW91c2VFdmVudCYpIG92ZXJyaWRlOwogCiAgICAgdm9p
ZCBhbmltYXRpb25FbmRlZEZvckxheWVyKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKTsK
IAogICAgIFdlYlBhZ2UqIG1fcGFnZTsKLSAgICBQYWdlT3ZlcmxheSogbV9oaWdobGlnaHRPdmVy
bGF5OworICAgIFdlYkNvcmU6OlBhZ2VPdmVybGF5KiBtX2hpZ2hsaWdodE92ZXJsYXk7CiAgICAg
Ci0gICAgUmVmUHRyPFBhZ2VPdmVybGF5PiBtX3BhaW50UmVjdE92ZXJsYXk7CisgICAgUmVmUHRy
PFdlYkNvcmU6OlBhZ2VPdmVybGF5PiBtX3BhaW50UmVjdE92ZXJsYXk7CiAgICAgc3RkOjp1bmlx
dWVfcHRyPFJlcGFpbnRJbmRpY2F0b3JMYXllckNsaWVudD4gbV9wYWludEluZGljYXRvckxheWVy
Q2xpZW50OwogICAgIEhhc2hTZXQ8V2ViQ29yZTo6R3JhcGhpY3NMYXllcio+IG1fcGFpbnRSZWN0
TGF5ZXJzOyAvLyBJZGVhbGx5IHRoaXMgd291bGQgYmUgSGFzaFNldDxzdGQ6OnVuaXF1ZV9wdHI8
R3JhcGhpY3NMYXllcj4+IGJ1dCB0aGF0IGRvZXNuJ3Qgd29yayB5ZXQuIHdlYmtpdC5vcmcvYi8x
MzYxNjYKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
RHJhd2luZ0FyZWEuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5n
QXJlYS5oCmluZGV4IGY3NGI0ZGUuLmRiM2I4M2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYS5oCkBAIC00NSw2ICs0NSw3IEBAIGNsYXNzIE1l
c3NhZ2VEZWNvZGVyOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBEaXNwbGF5UmVmcmVz
aE1vbml0b3I7CitjbGFzcyBGcmFtZTsKIGNsYXNzIEZyYW1lVmlldzsKIGNsYXNzIEdyYXBoaWNz
TGF5ZXI7CiBjbGFzcyBHcmFwaGljc0xheWVyRmFjdG9yeTsKQEAgLTEyMCw2ICsxMjEsOCBAQCBw
dWJsaWM6CiAKICAgICB2aXJ0dWFsIGJvb2wgYWRqdXN0TGF5ZXJGbHVzaFRocm90dGxpbmcoV2Vi
Q29yZTo6TGF5ZXJGbHVzaFRocm90dGxlU3RhdGU6OkZsYWdzKSB7IHJldHVybiBmYWxzZTsgfQog
CisgICAgdmlydHVhbCB2b2lkIGF0dGFjaFZpZXdPdmVybGF5R3JhcGhpY3NMYXllcihXZWJDb3Jl
OjpGcmFtZSosIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKSB7IH0KKwogcHJvdGVjdGVkOgogICAg
IERyYXdpbmdBcmVhKERyYXdpbmdBcmVhVHlwZSwgV2ViUGFnZSYpOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuY3BwIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNwcAppbmRleCAx
ZTM0NjJiLi4wYjkxYWMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvRmluZENvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9GaW5kQ29udHJvbGxlci5jcHAKQEAgLTQwLDYgKzQwLDggQEAKICNpbmNsdWRlIDxX
ZWJDb3JlL0dyYXBoaWNzQ29udGV4dC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvTWFpbkZyYW1lLmg+
CiAjaW5jbHVkZSA8V2ViQ29yZS9QYWdlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9QYWdlT3Zlcmxh
eUNvbnRyb2xsZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtTW91c2VFdmVudC5oPgog
I2luY2x1ZGUgPFdlYkNvcmUvUGx1Z2luRG9jdW1lbnQuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdl
YkNvcmU7CkBAIC02Myw3ICs2NSw3IEBAIHN0YXRpYyBXZWJDb3JlOjpGaW5kT3B0aW9ucyBjb3Jl
KEZpbmRPcHRpb25zIG9wdGlvbnMpCiAKIEZpbmRDb250cm9sbGVyOjpGaW5kQ29udHJvbGxlcihX
ZWJQYWdlKiB3ZWJQYWdlKQogICAgIDogbV93ZWJQYWdlKHdlYlBhZ2UpCi0gICAgLCBtX2ZpbmRQ
YWdlT3ZlcmxheSgwKQorICAgICwgbV9maW5kUGFnZU92ZXJsYXkobnVsbHB0cikKICAgICAsIG1f
aXNTaG93aW5nRmluZEluZGljYXRvcihmYWxzZSkKICAgICAsIG1fZm91bmRTdHJpbmdNYXRjaElu
ZGV4KC0xKQogewpAQCAtMTgyLDEyICsxODQsMTIgQEAgdm9pZCBGaW5kQ29udHJvbGxlcjo6dXBk
YXRlRmluZFVJQWZ0ZXJQYWdlU2Nyb2xsKGJvb2wgZm91bmQsIGNvbnN0IFN0cmluZyYgc3RyaW4K
IAogICAgIGlmICghc2hvdWxkU2hvd092ZXJsYXkpIHsKICAgICAgICAgaWYgKG1fZmluZFBhZ2VP
dmVybGF5KQotICAgICAgICAgICAgbV93ZWJQYWdlLT51bmluc3RhbGxQYWdlT3ZlcmxheShtX2Zp
bmRQYWdlT3ZlcmxheSwgUGFnZU92ZXJsYXk6OkZhZGVNb2RlOjpGYWRlKTsKKyAgICAgICAgICAg
IG1fd2ViUGFnZS0+Y29yZVBhZ2UoKS0+cGFnZU92ZXJsYXlDb250cm9sbGVyKCkudW5pbnN0YWxs
UGFnZU92ZXJsYXkobV9maW5kUGFnZU92ZXJsYXksIFBhZ2VPdmVybGF5OjpGYWRlTW9kZTo6RmFk
ZSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKCFtX2ZpbmRQYWdlT3ZlcmxheSkgewogICAg
ICAgICAgICAgUmVmUHRyPFBhZ2VPdmVybGF5PiBmaW5kUGFnZU92ZXJsYXkgPSBQYWdlT3Zlcmxh
eTo6Y3JlYXRlKHRoaXMpOwogICAgICAgICAgICAgbV9maW5kUGFnZU92ZXJsYXkgPSBmaW5kUGFn
ZU92ZXJsYXkuZ2V0KCk7Ci0gICAgICAgICAgICBtX3dlYlBhZ2UtPmluc3RhbGxQYWdlT3Zlcmxh
eShmaW5kUGFnZU92ZXJsYXkucmVsZWFzZSgpLCBQYWdlT3ZlcmxheTo6RmFkZU1vZGU6OkZhZGUp
OworICAgICAgICAgICAgbV93ZWJQYWdlLT5jb3JlUGFnZSgpLT5wYWdlT3ZlcmxheUNvbnRyb2xs
ZXIoKS5pbnN0YWxsUGFnZU92ZXJsYXkoZmluZFBhZ2VPdmVybGF5LnJlbGVhc2UoKSwgUGFnZU92
ZXJsYXk6OkZhZGVNb2RlOjpGYWRlKTsKICAgICAgICAgfQogICAgICAgICBtX2ZpbmRQYWdlT3Zl
cmxheS0+c2V0TmVlZHNEaXNwbGF5KCk7CiAgICAgfQpAQCAtMzMwLDcgKzMzMiw3IEBAIHZvaWQg
RmluZENvbnRyb2xsZXI6OmhpZGVGaW5kVUkoKQogewogICAgIG1fZmluZE1hdGNoZXMuY2xlYXIo
KTsKICAgICBpZiAobV9maW5kUGFnZU92ZXJsYXkpCi0gICAgICAgIG1fd2ViUGFnZS0+dW5pbnN0
YWxsUGFnZU92ZXJsYXkobV9maW5kUGFnZU92ZXJsYXksIFBhZ2VPdmVybGF5OjpGYWRlTW9kZTo6
RmFkZSk7CisgICAgICAgIG1fd2ViUGFnZS0+Y29yZVBhZ2UoKS0+cGFnZU92ZXJsYXlDb250cm9s
bGVyKCkudW5pbnN0YWxsUGFnZU92ZXJsYXkobV9maW5kUGFnZU92ZXJsYXksIFBhZ2VPdmVybGF5
OjpGYWRlTW9kZTo6RmFkZSk7CiAKICAgICBQbHVnaW5WaWV3KiBwbHVnaW5WaWV3ID0gcGx1Z2lu
Vmlld0ZvckZyYW1lKG1fd2ViUGFnZS0+bWFpbkZyYW1lKCkpOwogICAgIApAQCAtNDQzLDE2ICs0
NDUsMTYgQEAgdm9pZCBGaW5kQ29udHJvbGxlcjo6cGFnZU92ZXJsYXlEZXN0cm95ZWQoUGFnZU92
ZXJsYXkqKQogewogfQogCi12b2lkIEZpbmRDb250cm9sbGVyOjp3aWxsTW92ZVRvV2ViUGFnZShQ
YWdlT3ZlcmxheSosIFdlYlBhZ2UqIHdlYlBhZ2UpCit2b2lkIEZpbmRDb250cm9sbGVyOjp3aWxs
TW92ZVRvUGFnZShQYWdlT3ZlcmxheSosIFBhZ2UqIHBhZ2UpCiB7Ci0gICAgaWYgKHdlYlBhZ2Up
CisgICAgaWYgKHBhZ2UpCiAgICAgICAgIHJldHVybjsKIAogICAgIEFTU0VSVChtX2ZpbmRQYWdl
T3ZlcmxheSk7CiAgICAgbV9maW5kUGFnZU92ZXJsYXkgPSAwOwogfQogICAgIAotdm9pZCBGaW5k
Q29udHJvbGxlcjo6ZGlkTW92ZVRvV2ViUGFnZShQYWdlT3ZlcmxheSosIFdlYlBhZ2UqKQordm9p
ZCBGaW5kQ29udHJvbGxlcjo6ZGlkTW92ZVRvUGFnZShQYWdlT3ZlcmxheSosIFBhZ2UqKQogewog
fQogCkBAIC01MDYsOSArNTA4LDkgQEAgdm9pZCBGaW5kQ29udHJvbGxlcjo6ZHJhd1JlY3QoUGFn
ZU92ZXJsYXkqLCBHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgY28KICAgICB9CiB9
CiAKLWJvb2wgRmluZENvbnRyb2xsZXI6Om1vdXNlRXZlbnQoUGFnZU92ZXJsYXkqLCBjb25zdCBX
ZWJNb3VzZUV2ZW50JiBtb3VzZUV2ZW50KQorYm9vbCBGaW5kQ29udHJvbGxlcjo6bW91c2VFdmVu
dChQYWdlT3ZlcmxheSosIGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgbW91c2VFdmVudCkKIHsK
LSAgICBpZiAobW91c2VFdmVudC50eXBlKCkgPT0gV2ViRXZlbnQ6Ok1vdXNlRG93bikKKyAgICBp
ZiAobW91c2VFdmVudC50eXBlKCkgPT0gUGxhdGZvcm1FdmVudDo6TW91c2VQcmVzc2VkKQogICAg
ICAgICBoaWRlRmluZFVJKCk7CiAKICAgICByZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuaCBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5oCmluZGV4IDI4MDYzZmMu
LjAyNmNkMTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9G
aW5kQ29udHJvbGxlci5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9G
aW5kQ29udHJvbGxlci5oCkBAIC0yNiwxMCArMjYsMTAgQEAKICNpZm5kZWYgRmluZENvbnRyb2xs
ZXJfaAogI2RlZmluZSBGaW5kQ29udHJvbGxlcl9oCiAKLSNpbmNsdWRlICJQYWdlT3ZlcmxheS5o
IgogI2luY2x1ZGUgIlNoYXJlYWJsZUJpdG1hcC5oIgogI2luY2x1ZGUgIldlYkZpbmRPcHRpb25z
LmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9JbnRSZWN0Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9QYWdl
T3ZlcmxheS5oPgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNv
cHlhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgpAQCAtNDUsMTAgKzQ1LDkgQEAgY2xh
c3MgUmFuZ2U7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1jbGFzcyBQYWdlT3ZlcmxheTsKIGNs
YXNzIFdlYlBhZ2U7CiAKLWNsYXNzIEZpbmRDb250cm9sbGVyIDogcHJpdmF0ZSBQYWdlT3Zlcmxh
eTo6Q2xpZW50IHsKK2NsYXNzIEZpbmRDb250cm9sbGVyIDogcHJpdmF0ZSBXZWJDb3JlOjpQYWdl
T3ZlcmxheTo6Q2xpZW50IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShGaW5kQ29udHJvbGxl
cik7CiAKIHB1YmxpYzoKQEAgLTcxLDExICs3MCwxMSBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAg
ICAgLy8gUGFnZU92ZXJsYXk6OkNsaWVudC4KLSAgICB2aXJ0dWFsIHZvaWQgcGFnZU92ZXJsYXlE
ZXN0cm95ZWQoUGFnZU92ZXJsYXkqKTsKLSAgICB2aXJ0dWFsIHZvaWQgd2lsbE1vdmVUb1dlYlBh
Z2UoUGFnZU92ZXJsYXkqLCBXZWJQYWdlKik7Ci0gICAgdmlydHVhbCB2b2lkIGRpZE1vdmVUb1dl
YlBhZ2UoUGFnZU92ZXJsYXkqLCBXZWJQYWdlKik7Ci0gICAgdmlydHVhbCBib29sIG1vdXNlRXZl
bnQoUGFnZU92ZXJsYXkqLCBjb25zdCBXZWJNb3VzZUV2ZW50Jik7Ci0gICAgdmlydHVhbCB2b2lk
IGRyYXdSZWN0KFBhZ2VPdmVybGF5KiwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiwgY29uc3Qg
V2ViQ29yZTo6SW50UmVjdCYgZGlydHlSZWN0KTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFnZU92ZXJs
YXlEZXN0cm95ZWQoV2ViQ29yZTo6UGFnZU92ZXJsYXkqKTsKKyAgICB2aXJ0dWFsIHZvaWQgd2ls
bE1vdmVUb1BhZ2UoV2ViQ29yZTo6UGFnZU92ZXJsYXkqLCBXZWJDb3JlOjpQYWdlKik7CisgICAg
dmlydHVhbCB2b2lkIGRpZE1vdmVUb1BhZ2UoV2ViQ29yZTo6UGFnZU92ZXJsYXkqLCBXZWJDb3Jl
OjpQYWdlKik7CisgICAgdmlydHVhbCBib29sIG1vdXNlRXZlbnQoV2ViQ29yZTo6UGFnZU92ZXJs
YXkqLCBjb25zdCBXZWJDb3JlOjpQbGF0Zm9ybU1vdXNlRXZlbnQmKTsKKyAgICB2aXJ0dWFsIHZv
aWQgZHJhd1JlY3QoV2ViQ29yZTo6UGFnZU92ZXJsYXkqLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQmLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBkaXJ0eVJlY3QpOwogCiAgICAgVmVjdG9yPFdl
YkNvcmU6OkludFJlY3Q+IHJlY3RzRm9yVGV4dE1hdGNoZXMoKTsKICAgICBib29sIGdldEZpbmRJ
bmRpY2F0b3JCaXRtYXBBbmRSZWN0KFdlYkNvcmU6OkZyYW1lJiwgU2hhcmVhYmxlQml0bWFwOjpI
YW5kbGUmLCBXZWJDb3JlOjpJbnRSZWN0JiBzZWxlY3Rpb25SZWN0KTsKQEAgLTg4LDcgKzg3LDcg
QEAgcHJpdmF0ZToKICAgICB2b2lkIGRpZEhpZGVGaW5kSW5kaWNhdG9yKCk7CiAKICAgICBXZWJQ
YWdlKiBtX3dlYlBhZ2U7Ci0gICAgUGFnZU92ZXJsYXkqIG1fZmluZFBhZ2VPdmVybGF5OworICAg
IFdlYkNvcmU6OlBhZ2VPdmVybGF5KiBtX2ZpbmRQYWdlT3ZlcmxheTsKIAogICAgIC8vIFdoZXRo
ZXIgdGhlIFVJIHByb2Nlc3MgaXMgc2hvd2luZyB0aGUgZmluZCBpbmRpY2F0b3IuIE5vdGUgdGhh
dCB0aGlzIGNhbiBiZSB0cnVlIGV2ZW4gaWYKICAgICAvLyB0aGUgZmluZCBpbmRpY2F0b3IgaXNu
J3Qgc2hvd2luZywgYnV0IGl0IHdpbGwgbmV2ZXIgYmUgZmFsc2Ugd2hlbiBpdCBpcyBzaG93aW5n
LgpAQCAtOTksNyArOTgsNyBAQCBwcml2YXRlOgogICAgIGludCBtX2ZvdW5kU3RyaW5nTWF0Y2hJ
bmRleDsKIAogI2lmIFBMQVRGT1JNKElPUykKLSAgICBSZWZQdHI8UGFnZU92ZXJsYXk+IG1fZmlu
ZEluZGljYXRvck92ZXJsYXk7CisgICAgUmVmUHRyPFdlYkNvcmU6OlBhZ2VPdmVybGF5PiBtX2Zp
bmRJbmRpY2F0b3JPdmVybGF5OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxGaW5kSW5kaWNhdG9yT3Zl
cmxheUNsaWVudElPUz4gbV9maW5kSW5kaWNhdG9yT3ZlcmxheUNsaWVudDsKICNlbmRpZgogfTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVI
b3N0LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlSG9zdC5o
CmluZGV4IDNmZDQ5NTQuLjY0ZWVjNTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9MYXllclRyZWVIb3N0LmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL0xheWVyVHJlZUhvc3QuaApAQCAtNDcsNyArNDcsNiBAQCBjbGFzcyBHcmFw
aGljc0xheWVyRmFjdG9yeTsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLWNsYXNzIFBhZ2VPdmVy
bGF5OwogY2xhc3MgVXBkYXRlSW5mbzsKIGNsYXNzIFdlYlBhZ2U7CiAKQEAgLTcyLDExICs3MSw2
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZGV2aWNlT3JQYWdlU2NhbGVGYWN0b3JDaGFu
Z2VkKCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBwYWdlQmFja2dyb3VuZFRyYW5zcGFyZW5jeUNo
YW5nZWQoKSA9IDA7CiAKLSAgICB2aXJ0dWFsIHZvaWQgZGlkSW5zdGFsbFBhZ2VPdmVybGF5KFBh
Z2VPdmVybGF5KikgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGRpZFVuaW5zdGFsbFBhZ2VPdmVybGF5
KFBhZ2VPdmVybGF5KikgeyB9Ci0gICAgdmlydHVhbCB2b2lkIHNldFBhZ2VPdmVybGF5TmVlZHNE
aXNwbGF5KFBhZ2VPdmVybGF5KiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpIHsgfQotICAgIHZp
cnR1YWwgdm9pZCBzZXRQYWdlT3ZlcmxheU9wYWNpdHkoUGFnZU92ZXJsYXkqLCBmbG9hdCkgeyB9
Ci0KICAgICB2aXJ0dWFsIHZvaWQgcGF1c2VSZW5kZXJpbmcoKSB7IH0KICAgICB2aXJ0dWFsIHZv
aWQgcmVzdW1lUmVuZGVyaW5nKCkgeyB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9QYWdlT3ZlcmxheS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvUGFnZU92ZXJsYXkuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCA4ZDg4MWI2Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9QYWdlT3ZlcmxheS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyNTEgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJQYWdlT3ZlcmxheS5oIgotCi0j
aW5jbHVkZSAiV2ViUGFnZS5oIgotI2luY2x1ZGUgIldlYlByb2Nlc3MuaCIKLSNpbmNsdWRlIDxX
ZWJDb3JlL0ZyYW1lVmlldy5oPgotI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+
Ci0jaW5jbHVkZSA8V2ViQ29yZS9NYWluRnJhbWUuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1BhZ2Uu
aD4KLSNpbmNsdWRlIDxXZWJDb3JlL1Njcm9sbGJhclRoZW1lLmg+Ci0jaW5jbHVkZSA8d3RmL0N1
cnJlbnRUaW1lLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1uYW1lc3BhY2UgV2Vi
S2l0IHsKLQotc3RhdGljIGNvbnN0IGRvdWJsZSBmYWRlQW5pbWF0aW9uRHVyYXRpb24gPSAwLjI7
Ci1zdGF0aWMgY29uc3QgZG91YmxlIGZhZGVBbmltYXRpb25GcmFtZVJhdGUgPSAzMDsKLQotUGFz
c1JlZlB0cjxQYWdlT3ZlcmxheT4gUGFnZU92ZXJsYXk6OmNyZWF0ZShDbGllbnQqIGNsaWVudCwg
T3ZlcmxheVR5cGUgb3ZlcmxheVR5cGUpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBQYWdl
T3ZlcmxheShjbGllbnQsIG92ZXJsYXlUeXBlKSk7Ci19Ci0KLVBhZ2VPdmVybGF5OjpQYWdlT3Zl
cmxheShDbGllbnQqIGNsaWVudCwgT3ZlcmxheVR5cGUgb3ZlcmxheVR5cGUpCi0gICAgOiBtX2Ns
aWVudChjbGllbnQpCi0gICAgLCBtX3dlYlBhZ2UobnVsbHB0cikKLSAgICAsIG1fZmFkZUFuaW1h
dGlvblRpbWVyKFJ1bkxvb3A6Om1haW4oKSwgdGhpcywgJlBhZ2VPdmVybGF5OjpmYWRlQW5pbWF0
aW9uVGltZXJGaXJlZCkKLSAgICAsIG1fZmFkZUFuaW1hdGlvblN0YXJ0VGltZSgwKQotICAgICwg
bV9mYWRlQW5pbWF0aW9uRHVyYXRpb24oZmFkZUFuaW1hdGlvbkR1cmF0aW9uKQotICAgICwgbV9m
YWRlQW5pbWF0aW9uVHlwZShOb0FuaW1hdGlvbikKLSAgICAsIG1fZnJhY3Rpb25GYWRlZEluKDEp
Ci0gICAgLCBtX292ZXJsYXlUeXBlKG92ZXJsYXlUeXBlKQotICAgICwgbV9iYWNrZ3JvdW5kQ29s
b3IoQ29sb3I6OnRyYW5zcGFyZW50KQotewotfQotCi1QYWdlT3ZlcmxheTo6flBhZ2VPdmVybGF5
KCkKLXsKLX0KLQotSW50UmVjdCBQYWdlT3ZlcmxheTo6Ym91bmRzKCkgY29uc3QKLXsKLSAgICBp
ZiAoIW1fb3ZlcnJpZGVGcmFtZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBJbnRSZWN0KElu
dFBvaW50KCksIG1fb3ZlcnJpZGVGcmFtZS5zaXplKCkpOwotCi0gICAgRnJhbWVWaWV3KiBmcmFt
ZVZpZXcgPSBtX3dlYlBhZ2UtPm1haW5GcmFtZVZpZXcoKTsKLQotICAgIHN3aXRjaCAobV9vdmVy
bGF5VHlwZSkgewotICAgIGNhc2UgT3ZlcmxheVR5cGU6OlZpZXc6IHsKLSAgICAgICAgaW50IHdp
ZHRoID0gZnJhbWVWaWV3LT53aWR0aCgpOwotICAgICAgICBpbnQgaGVpZ2h0ID0gZnJhbWVWaWV3
LT5oZWlnaHQoKTsKLQotICAgICAgICBpZiAoIVNjcm9sbGJhclRoZW1lOjp0aGVtZSgpLT51c2Vz
T3ZlcmxheVNjcm9sbGJhcnMoKSkgewotICAgICAgICAgICAgaWYgKGZyYW1lVmlldy0+dmVydGlj
YWxTY3JvbGxiYXIoKSkKLSAgICAgICAgICAgICAgICB3aWR0aCAtPSBmcmFtZVZpZXctPnZlcnRp
Y2FsU2Nyb2xsYmFyKCktPndpZHRoKCk7Ci0gICAgICAgICAgICBpZiAoZnJhbWVWaWV3LT5ob3Jp
em9udGFsU2Nyb2xsYmFyKCkpCi0gICAgICAgICAgICAgICAgaGVpZ2h0IC09IGZyYW1lVmlldy0+
aG9yaXpvbnRhbFNjcm9sbGJhcigpLT5oZWlnaHQoKTsKLSAgICAgICAgfQotICAgICAgICByZXR1
cm4gSW50UmVjdCgwLCAwLCB3aWR0aCwgaGVpZ2h0KTsKLSAgICB9Ci0gICAgY2FzZSBPdmVybGF5
VHlwZTo6RG9jdW1lbnQ6Ci0gICAgICAgIHJldHVybiBJbnRSZWN0KEludFBvaW50KCksIGZyYW1l
Vmlldy0+Y29udGVudHNTaXplKCkpOwotICAgIH07Ci0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLSAgICByZXR1cm4gSW50UmVjdChJbnRQb2ludCgpLCBmcmFtZVZpZXctPmNvbnRlbnRzU2l6
ZSgpKTsKLX0KLQotSW50UmVjdCBQYWdlT3ZlcmxheTo6ZnJhbWUoKSBjb25zdAotewotICAgIGlm
ICghbV9vdmVycmlkZUZyYW1lLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIG1fb3ZlcnJpZGVG
cmFtZTsKLQotICAgIHJldHVybiBib3VuZHMoKTsKLX0KLQotdm9pZCBQYWdlT3ZlcmxheTo6c2V0
RnJhbWUoSW50UmVjdCBmcmFtZSkKLXsKLSAgICBpZiAobV9vdmVycmlkZUZyYW1lID09IGZyYW1l
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX292ZXJyaWRlRnJhbWUgPSBmcmFtZTsKLQotICAg
IGlmIChtX3dlYlBhZ2UpCi0gICAgICAgIG1fd2ViUGFnZS0+cGFnZU92ZXJsYXlDb250cm9sbGVy
KCkuZGlkQ2hhbmdlT3ZlcmxheUZyYW1lKCp0aGlzKTsKLX0KLQotdm9pZCBQYWdlT3ZlcmxheTo6
c2V0QmFja2dyb3VuZENvbG9yKFJHQkEzMiBiYWNrZ3JvdW5kQ29sb3IpCi17Ci0gICAgaWYgKG1f
YmFja2dyb3VuZENvbG9yID09IGJhY2tncm91bmRDb2xvcikKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgbV9iYWNrZ3JvdW5kQ29sb3IgPSBiYWNrZ3JvdW5kQ29sb3I7Ci0KLSAgICBpZiAobV93ZWJQ
YWdlKQotICAgICAgICBtX3dlYlBhZ2UtPnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLmRpZENoYW5n
ZU92ZXJsYXlCYWNrZ3JvdW5kQ29sb3IoKnRoaXMpOwotfQotCi12b2lkIFBhZ2VPdmVybGF5Ojpz
ZXRQYWdlKFdlYlBhZ2UqIHdlYlBhZ2UpCi17Ci0gICAgbV9jbGllbnQtPndpbGxNb3ZlVG9XZWJQ
YWdlKHRoaXMsIHdlYlBhZ2UpOwotICAgIG1fd2ViUGFnZSA9IHdlYlBhZ2U7Ci0gICAgbV9jbGll
bnQtPmRpZE1vdmVUb1dlYlBhZ2UodGhpcywgd2ViUGFnZSk7Ci0KLSAgICBtX2ZhZGVBbmltYXRp
b25UaW1lci5zdG9wKCk7Ci19Ci0KLXZvaWQgUGFnZU92ZXJsYXk6OnNldE5lZWRzRGlzcGxheShj
b25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpCi17Ci0gICAgaWYgKCFtX3dlYlBhZ2UpCi0gICAgICAg
IHJldHVybjsKLQotICAgIG1fd2ViUGFnZS0+cGFnZU92ZXJsYXlDb250cm9sbGVyKCkuc2V0UGFn
ZU92ZXJsYXlPcGFjaXR5KCp0aGlzLCBtX2ZyYWN0aW9uRmFkZWRJbik7Ci0gICAgbV93ZWJQYWdl
LT5wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKS5zZXRQYWdlT3ZlcmxheU5lZWRzRGlzcGxheSgqdGhp
cywgZGlydHlSZWN0KTsKLX0KLQotdm9pZCBQYWdlT3ZlcmxheTo6c2V0TmVlZHNEaXNwbGF5KCkK
LXsKLSAgICBzZXROZWVkc0Rpc3BsYXkoYm91bmRzKCkpOwotfQotCi12b2lkIFBhZ2VPdmVybGF5
OjpkcmF3UmVjdChHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgSW50UmVj
dCYgZGlydHlSZWN0KQotewotICAgIC8vIElmIHRoZSBkaXJ0eSByZWN0IGlzIG91dHNpZGUgdGhl
IGJvdW5kcywgaWdub3JlIGl0LgotICAgIEludFJlY3QgcGFpbnRSZWN0ID0gaW50ZXJzZWN0aW9u
KGRpcnR5UmVjdCwgYm91bmRzKCkpOwotICAgIGlmIChwYWludFJlY3QuaXNFbXB0eSgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIo
Z3JhcGhpY3NDb250ZXh0KTsKLSAgICBtX2NsaWVudC0+ZHJhd1JlY3QodGhpcywgZ3JhcGhpY3ND
b250ZXh0LCBwYWludFJlY3QpOwotfQotICAgIAotYm9vbCBQYWdlT3ZlcmxheTo6bW91c2VFdmVu
dChjb25zdCBXZWJNb3VzZUV2ZW50JiBtb3VzZUV2ZW50KQotewotICAgIEludFBvaW50IG1vdXNl
UG9zaXRpb25Jbk92ZXJsYXlDb29yZGluYXRlcyhtb3VzZUV2ZW50LnBvc2l0aW9uKCkpOwotCi0g
ICAgaWYgKG1fb3ZlcmxheVR5cGUgPT0gUGFnZU92ZXJsYXk6Ok92ZXJsYXlUeXBlOjpEb2N1bWVu
dCkKLSAgICAgICAgbW91c2VQb3NpdGlvbkluT3ZlcmxheUNvb3JkaW5hdGVzID0gbV93ZWJQYWdl
LT5jb3JlUGFnZSgpLT5tYWluRnJhbWUoKS52aWV3KCktPnJvb3RWaWV3VG9Db250ZW50cyhtb3Vz
ZVBvc2l0aW9uSW5PdmVybGF5Q29vcmRpbmF0ZXMpOwotCi0gICAgLy8gSWdub3JlIGV2ZW50cyBv
dXRzaWRlIHRoZSBib3VuZHMuCi0gICAgaWYgKCFib3VuZHMoKS5jb250YWlucyhtb3VzZVBvc2l0
aW9uSW5PdmVybGF5Q29vcmRpbmF0ZXMpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBy
ZXR1cm4gbV9jbGllbnQtPm1vdXNlRXZlbnQodGhpcywgbW91c2VFdmVudCk7Ci19Ci0KLXZvaWQg
UGFnZU92ZXJsYXk6OmRpZFNjcm9sbEZyYW1lKEZyYW1lKiBmcmFtZSkKLXsKLSAgICBtX2NsaWVu
dC0+ZGlkU2Nyb2xsRnJhbWUodGhpcywgZnJhbWUpOwotfQotCi1XS1R5cGVSZWYgUGFnZU92ZXJs
YXk6OmNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWUoV0tTdHJpbmdSZWYgYXR0cmlidXRl
LCBXS1R5cGVSZWYgcGFyYW1ldGVyKQotewotICAgIHJldHVybiBtX2NsaWVudC0+Y29weUFjY2Vz
c2liaWxpdHlBdHRyaWJ1dGVWYWx1ZSh0aGlzLCBhdHRyaWJ1dGUsIHBhcmFtZXRlcik7Ci19Ci0K
LVdLQXJyYXlSZWYgUGFnZU92ZXJsYXk6OmNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlTmFtZXMo
Ym9vbCBwYXJhbWV0ZXJpemVkTmFtZXMpCi17Ci0gICAgcmV0dXJuIG1fY2xpZW50LT5jb3B5QWNj
ZXNzaWJpbGl0eUF0dHJpYnV0ZU5hbWVzKHRoaXMsIHBhcmFtZXRlcml6ZWROYW1lcyk7Ci19Ci0K
LXZvaWQgUGFnZU92ZXJsYXk6OnN0YXJ0RmFkZUluQW5pbWF0aW9uKCkKLXsKLSAgICBtX2ZyYWN0
aW9uRmFkZWRJbiA9IDA7Ci0gICAgbV9mYWRlQW5pbWF0aW9uVHlwZSA9IEZhZGVJbkFuaW1hdGlv
bjsKLQotICAgIHN0YXJ0RmFkZUFuaW1hdGlvbigpOwotfQotCi12b2lkIFBhZ2VPdmVybGF5Ojpz
dGFydEZhZGVPdXRBbmltYXRpb24oKQotewotICAgIG1fZnJhY3Rpb25GYWRlZEluID0gMTsKLSAg
ICBtX2ZhZGVBbmltYXRpb25UeXBlID0gRmFkZU91dEFuaW1hdGlvbjsKLQotICAgIHN0YXJ0RmFk
ZUFuaW1hdGlvbigpOwotfQotCi12b2lkIFBhZ2VPdmVybGF5OjpzdG9wRmFkZU91dEFuaW1hdGlv
bigpCi17Ci0gICAgbV9mcmFjdGlvbkZhZGVkSW4gPSAxLjA7Ci0gICAgbV9mYWRlQW5pbWF0aW9u
VGltZXIuc3RvcCgpOwotfQotCi12b2lkIFBhZ2VPdmVybGF5OjpzdGFydEZhZGVBbmltYXRpb24o
KQotewotICAgIG1fZmFkZUFuaW1hdGlvblN0YXJ0VGltZSA9IGN1cnJlbnRUaW1lKCk7Ci0gICAg
bV9mYWRlQW5pbWF0aW9uVGltZXIuc3RhcnRSZXBlYXRpbmcoMSAvIGZhZGVBbmltYXRpb25GcmFt
ZVJhdGUpOwotfQotCi12b2lkIFBhZ2VPdmVybGF5OjpmYWRlQW5pbWF0aW9uVGltZXJGaXJlZCgp
Ci17Ci0gICAgZmxvYXQgYW5pbWF0aW9uUHJvZ3Jlc3MgPSAoY3VycmVudFRpbWUoKSAtIG1fZmFk
ZUFuaW1hdGlvblN0YXJ0VGltZSkgLyBtX2ZhZGVBbmltYXRpb25EdXJhdGlvbjsKLQotICAgIGlm
IChhbmltYXRpb25Qcm9ncmVzcyA+PSAxLjApCi0gICAgICAgIGFuaW1hdGlvblByb2dyZXNzID0g
MS4wOwotCi0gICAgZG91YmxlIHNpbmUgPSBzaW4ocGlPdmVyVHdvRmxvYXQgKiBhbmltYXRpb25Q
cm9ncmVzcyk7Ci0gICAgZmxvYXQgZmFkZUFuaW1hdGlvblZhbHVlID0gc2luZSAqIHNpbmU7Ci0K
LSAgICBtX2ZyYWN0aW9uRmFkZWRJbiA9IChtX2ZhZGVBbmltYXRpb25UeXBlID09IEZhZGVJbkFu
aW1hdGlvbikgPyBmYWRlQW5pbWF0aW9uVmFsdWUgOiAxIC0gZmFkZUFuaW1hdGlvblZhbHVlOwot
ICAgIG1fd2ViUGFnZS0+cGFnZU92ZXJsYXlDb250cm9sbGVyKCkuc2V0UGFnZU92ZXJsYXlPcGFj
aXR5KCp0aGlzLCBtX2ZyYWN0aW9uRmFkZWRJbik7Ci0KLSAgICBpZiAoYW5pbWF0aW9uUHJvZ3Jl
c3MgPT0gMS4wKSB7Ci0gICAgICAgIG1fZmFkZUFuaW1hdGlvblRpbWVyLnN0b3AoKTsKLQotICAg
ICAgICBib29sIHdhc0ZhZGluZ091dCA9IG1fZmFkZUFuaW1hdGlvblR5cGUgPT0gRmFkZU91dEFu
aW1hdGlvbjsKLSAgICAgICAgbV9mYWRlQW5pbWF0aW9uVHlwZSA9IE5vQW5pbWF0aW9uOwotCi0g
ICAgICAgIC8vIElmIHRoaXMgd2FzIGEgZmFkZSBvdXQsIGdvIGFoZWFkIGFuZCB1bmluc3RhbGwg
dGhlIHBhZ2Ugb3ZlcmxheS4KLSAgICAgICAgaWYgKHdhc0ZhZGluZ091dCkKLSAgICAgICAgICAg
IG1fd2ViUGFnZS0+dW5pbnN0YWxsUGFnZU92ZXJsYXkodGhpcywgUGFnZU92ZXJsYXk6OkZhZGVN
b2RlOjpEb05vdEZhZGUpOwotICAgIH0KLX0KLQotdm9pZCBQYWdlT3ZlcmxheTo6Y2xlYXIoKQot
ewotICAgIG1fd2ViUGFnZS0+cGFnZU92ZXJsYXlDb250cm9sbGVyKCkuY2xlYXJQYWdlT3Zlcmxh
eSgqdGhpcyk7Ci19Ci0KLVdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqIFBhZ2VPdmVybGF5OjpsYXll
cigpCi17Ci0gICAgcmV0dXJuIG1fd2ViUGFnZS0+cGFnZU92ZXJsYXlDb250cm9sbGVyKCkubGF5
ZXJGb3JPdmVybGF5KCp0aGlzKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvUGFnZU92ZXJsYXkuaCBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9QYWdlT3ZlcmxheS5oCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAzMjI1ZjBkLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9QYWdlT3ZlcmxheS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTM3
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFBhZ2VPdmVybGF5X2gKLSNkZWZpbmUgUGFn
ZU92ZXJsYXlfaAotCi0jaW5jbHVkZSAiQVBJT2JqZWN0LmgiCi0jaW5jbHVkZSAiV0tCYXNlLmgi
Ci0jaW5jbHVkZSA8V2ViQ29yZS9Db2xvci5oPgotI2luY2x1ZGUgPFdlYkNvcmUvSW50UmVjdC5o
PgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4K
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotY2xhc3MgRnJhbWU7Ci1jbGFzcyBHcmFwaGljc0NvbnRl
eHQ7Ci1jbGFzcyBHcmFwaGljc0xheWVyOwotfQotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xh
c3MgV2ViRnJhbWU7Ci1jbGFzcyBXZWJNb3VzZUV2ZW50OwotY2xhc3MgV2ViUGFnZTsKLQotY2xh
c3MgUGFnZU92ZXJsYXkgOiBwdWJsaWMgQVBJOjpPYmplY3RJbXBsPEFQSTo6T2JqZWN0OjpUeXBl
OjpCdW5kbGVQYWdlT3ZlcmxheT4gewotcHVibGljOgotICAgIGNsYXNzIENsaWVudCB7Ci0gICAg
cHJvdGVjdGVkOgotICAgICAgICB2aXJ0dWFsIH5DbGllbnQoKSB7IH0KLSAgICAKLSAgICBwdWJs
aWM6Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBwYWdlT3ZlcmxheURlc3Ryb3llZChQYWdlT3Zlcmxh
eSopID0gMDsKLSAgICAgICAgdmlydHVhbCB2b2lkIHdpbGxNb3ZlVG9XZWJQYWdlKFBhZ2VPdmVy
bGF5KiwgV2ViUGFnZSopID0gMDsKLSAgICAgICAgdmlydHVhbCB2b2lkIGRpZE1vdmVUb1dlYlBh
Z2UoUGFnZU92ZXJsYXkqLCBXZWJQYWdlKikgPSAwOwotICAgICAgICB2aXJ0dWFsIHZvaWQgZHJh
d1JlY3QoUGFnZU92ZXJsYXkqLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmLCBjb25zdCBXZWJD
b3JlOjpJbnRSZWN0JiBkaXJ0eVJlY3QpID0gMDsKLSAgICAgICAgdmlydHVhbCBib29sIG1vdXNl
RXZlbnQoUGFnZU92ZXJsYXkqLCBjb25zdCBXZWJNb3VzZUV2ZW50JikgPSAwOwotICAgICAgICB2
aXJ0dWFsIHZvaWQgZGlkU2Nyb2xsRnJhbWUoUGFnZU92ZXJsYXkqLCBXZWJDb3JlOjpGcmFtZSop
IHsgfQotCi0gICAgICAgIHZpcnR1YWwgV0tUeXBlUmVmIGNvcHlBY2Nlc3NpYmlsaXR5QXR0cmli
dXRlVmFsdWUoUGFnZU92ZXJsYXkqLCBXS1N0cmluZ1JlZiAvKiBhdHRyaWJ1dGUgKi8sIFdLVHlw
ZVJlZiAvKiBwYXJhbWV0ZXIgKi8pIHsgcmV0dXJuIDA7IH0KLSAgICAgICAgdmlydHVhbCBXS0Fy
cmF5UmVmIGNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlTmFtZXMoUGFnZU92ZXJsYXkqLCBib29s
IC8qIHBhcmFtZXRlcml6ZWROYW1lcyAqLykgeyByZXR1cm4gMDsgfQotICAgIH07Ci0KLSAgICBl
bnVtIGNsYXNzIE92ZXJsYXlUeXBlIHsKLSAgICAgICAgVmlldywgLy8gRml4ZWQgdG8gdGhlIHZp
ZXcgc2l6ZTsgZG9lcyBub3Qgc2NhbGUgb3Igc2Nyb2xsIHdpdGggdGhlIGRvY3VtZW50LCByZXBh
aW50cyBvbiBzY3JvbGwuCi0gICAgICAgIERvY3VtZW50LCAvLyBTY2FsZXMgYW5kIHNjcm9sbHMg
d2l0aCB0aGUgZG9jdW1lbnQuCi0gICAgfTsKLQotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFBhZ2VP
dmVybGF5PiBjcmVhdGUoQ2xpZW50KiwgT3ZlcmxheVR5cGUgPSBPdmVybGF5VHlwZTo6Vmlldyk7
Ci0gICAgdmlydHVhbCB+UGFnZU92ZXJsYXkoKTsKLQotICAgIHZvaWQgc2V0UGFnZShXZWJQYWdl
Kik7Ci0gICAgdm9pZCBzZXROZWVkc0Rpc3BsYXkoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgZGly
dHlSZWN0KTsKLSAgICB2b2lkIHNldE5lZWRzRGlzcGxheSgpOwotCi0gICAgdm9pZCBkcmF3UmVj
dChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBkaXJ0
eVJlY3QpOwotICAgIGJvb2wgbW91c2VFdmVudChjb25zdCBXZWJNb3VzZUV2ZW50Jik7Ci0gICAg
dm9pZCBkaWRTY3JvbGxGcmFtZShXZWJDb3JlOjpGcmFtZSopOwotCi0gICAgV0tUeXBlUmVmIGNv
cHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWUoV0tTdHJpbmdSZWYgYXR0cmlidXRlLCBXS1R5
cGVSZWYgcGFyYW1ldGVyKTsKLSAgICBXS0FycmF5UmVmIGNvcHlBY2Nlc3NpYmlsaXR5QXR0cmli
dXRlTmFtZXMoYm9vbCBwYXJhbWV0ZXJpemVkTmFtZXMpOwotICAgIAotICAgIHZvaWQgc3RhcnRG
YWRlSW5BbmltYXRpb24oKTsKLSAgICB2b2lkIHN0YXJ0RmFkZU91dEFuaW1hdGlvbigpOwotICAg
IHZvaWQgc3RvcEZhZGVPdXRBbmltYXRpb24oKTsKLQotICAgIHZvaWQgY2xlYXIoKTsKLQotICAg
IENsaWVudCogY2xpZW50KCkgY29uc3QgeyByZXR1cm4gbV9jbGllbnQ7IH0KLQotICAgIGVudW0g
Y2xhc3MgRmFkZU1vZGUgeyBEb05vdEZhZGUsIEZhZGUgfTsKLQotICAgIE92ZXJsYXlUeXBlIG92
ZXJsYXlUeXBlKCkgeyByZXR1cm4gbV9vdmVybGF5VHlwZTsgfQotCi0gICAgV2ViQ29yZTo6SW50
UmVjdCBib3VuZHMoKSBjb25zdDsKLSAgICBXZWJDb3JlOjpJbnRSZWN0IGZyYW1lKCkgY29uc3Q7
Ci0gICAgdm9pZCBzZXRGcmFtZShXZWJDb3JlOjpJbnRSZWN0KTsKLQotICAgIFdlYkNvcmU6OlJH
QkEzMiBiYWNrZ3JvdW5kQ29sb3IoKSBjb25zdCB7IHJldHVybiBtX2JhY2tncm91bmRDb2xvcjsg
fQotICAgIHZvaWQgc2V0QmFja2dyb3VuZENvbG9yKFdlYkNvcmU6OlJHQkEzMik7Ci0KLSAgICBX
ZWJDb3JlOjpHcmFwaGljc0xheWVyKiBsYXllcigpOwotICAgIAotcHJvdGVjdGVkOgotICAgIGV4
cGxpY2l0IFBhZ2VPdmVybGF5KENsaWVudCosIE92ZXJsYXlUeXBlKTsKLQotcHJpdmF0ZToKLSAg
ICB2b2lkIHN0YXJ0RmFkZUFuaW1hdGlvbigpOwotICAgIHZvaWQgZmFkZUFuaW1hdGlvblRpbWVy
RmlyZWQoKTsKLQotICAgIENsaWVudCogbV9jbGllbnQ7Ci0gICAgV2ViUGFnZSogbV93ZWJQYWdl
OwotCi0gICAgUnVuTG9vcDo6VGltZXI8UGFnZU92ZXJsYXk+IG1fZmFkZUFuaW1hdGlvblRpbWVy
OwotICAgIGRvdWJsZSBtX2ZhZGVBbmltYXRpb25TdGFydFRpbWU7Ci0gICAgZG91YmxlIG1fZmFk
ZUFuaW1hdGlvbkR1cmF0aW9uOwotCi0gICAgZW51bSBGYWRlQW5pbWF0aW9uVHlwZSB7Ci0gICAg
ICAgIE5vQW5pbWF0aW9uLAotICAgICAgICBGYWRlSW5BbmltYXRpb24sCi0gICAgICAgIEZhZGVP
dXRBbmltYXRpb24sCi0gICAgfTsKLQotICAgIEZhZGVBbmltYXRpb25UeXBlIG1fZmFkZUFuaW1h
dGlvblR5cGU7Ci0gICAgZmxvYXQgbV9mcmFjdGlvbkZhZGVkSW47Ci0KLSAgICBPdmVybGF5VHlw
ZSBtX292ZXJsYXlUeXBlOwotICAgIFdlYkNvcmU6OkludFJlY3QgbV9vdmVycmlkZUZyYW1lOwot
Ci0gICAgV2ViQ29yZTo6UkdCQTMyIG1fYmFja2dyb3VuZENvbG9yOwotfTsKLQotfSAvLyBuYW1l
c3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBQYWdlT3ZlcmxheV9oCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvUGFnZU92ZXJsYXlDb250cm9sbGVyLmNwcCBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9QYWdlT3ZlcmxheUNvbnRyb2xsZXIu
Y3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NjQ1N2M1Li4wMDAwMDAwCi0tLSBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9QYWdlT3ZlcmxheUNvbnRyb2xsZXIu
Y3BwCisrKyAvZGV2L251bGwKQEAgLTEsMzE0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUGFnZU92ZXJsYXlDb250cm9sbGVyLmgiCi0KLSNpbmNs
dWRlICJEcmF3aW5nQXJlYS5oIgotI2luY2x1ZGUgIlBhZ2VPdmVybGF5LmgiCi0jaW5jbHVkZSAi
V2ViUGFnZS5oIgotI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWUuaD4KLSNpbmNsdWRlIDxXZWJDb3Jl
L0ZyYW1lVmlldy5oPgotI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+Ci0jaW5j
bHVkZSA8V2ViQ29yZS9HcmFwaGljc0xheWVyLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9NYWluRnJh
bWUuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmg+Ci0jaW5jbHVk
ZSA8V2ViQ29yZS9TZXR0aW5ncy5oPgotI2luY2x1ZGUgPFdlYkNvcmUvVGlsZWRCYWNraW5nLmg+
Ci0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotUGFn
ZU92ZXJsYXlDb250cm9sbGVyOjpQYWdlT3ZlcmxheUNvbnRyb2xsZXIoV2ViUGFnZSYgd2ViUGFn
ZSkKLSAgICA6IG1fd2ViUGFnZSh3ZWJQYWdlKQotewotfQotCi12b2lkIFBhZ2VPdmVybGF5Q29u
dHJvbGxlcjo6aW5pdGlhbGl6ZSgpCi17Ci0gICAgQVNTRVJUKCFtX2RvY3VtZW50T3ZlcmxheVJv
b3RMYXllcik7Ci0gICAgQVNTRVJUKCFtX3ZpZXdPdmVybGF5Um9vdExheWVyKTsKLQotICAgIG1f
ZG9jdW1lbnRPdmVybGF5Um9vdExheWVyID0gR3JhcGhpY3NMYXllcjo6Y3JlYXRlKG1fd2ViUGFn
ZS5kcmF3aW5nQXJlYSgpLT5ncmFwaGljc0xheWVyRmFjdG9yeSgpLCAqdGhpcyk7Ci0gICAgbV92
aWV3T3ZlcmxheVJvb3RMYXllciA9IEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZShtX3dlYlBhZ2UuZHJh
d2luZ0FyZWEoKS0+Z3JhcGhpY3NMYXllckZhY3RvcnkoKSwgKnRoaXMpOwotI2lmbmRlZiBOREVC
VUcKLSAgICBtX2RvY3VtZW50T3ZlcmxheVJvb3RMYXllci0+c2V0TmFtZSgiUGFnZSBPdmVybGF5
IGNvbnRhaW5lciAoZG9jdW1lbnQtcmVsYXRpdmUpIik7Ci0gICAgbV92aWV3T3ZlcmxheVJvb3RM
YXllci0+c2V0TmFtZSgiUGFnZSBPdmVybGF5IGNvbnRhaW5lciAodmlldy1yZWxhdGl2ZSkiKTsK
LSNlbmRpZgotfQotCi1zdGF0aWMgdm9pZCB1cGRhdGVPdmVybGF5R2VvbWV0cnkoUGFnZU92ZXJs
YXkmIG92ZXJsYXksIEdyYXBoaWNzTGF5ZXImIGdyYXBoaWNzTGF5ZXIpCi17Ci0gICAgSW50UmVj
dCBvdmVybGF5RnJhbWUgPSBvdmVybGF5LmZyYW1lKCk7Ci0KLSAgICBpZiAob3ZlcmxheUZyYW1l
LmxvY2F0aW9uKCkgPT0gZ3JhcGhpY3NMYXllci5wb3NpdGlvbigpICYmIG92ZXJsYXlGcmFtZS5z
aXplKCkgPT0gZ3JhcGhpY3NMYXllci5zaXplKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGdy
YXBoaWNzTGF5ZXIuc2V0UG9zaXRpb24ob3ZlcmxheUZyYW1lLmxvY2F0aW9uKCkpOwotICAgIGdy
YXBoaWNzTGF5ZXIuc2V0U2l6ZShvdmVybGF5RnJhbWUuc2l6ZSgpKTsKLX0KLQotdm9pZCBQYWdl
T3ZlcmxheUNvbnRyb2xsZXI6Omluc3RhbGxQYWdlT3ZlcmxheShQYXNzUmVmUHRyPFBhZ2VPdmVy
bGF5PiBwYWdlT3ZlcmxheSwgUGFnZU92ZXJsYXk6OkZhZGVNb2RlIGZhZGVNb2RlKQotewotICAg
IEFTU0VSVChtX2RvY3VtZW50T3ZlcmxheVJvb3RMYXllcik7Ci0gICAgQVNTRVJUKG1fdmlld092
ZXJsYXlSb290TGF5ZXIpOwotCi0gICAgUmVmUHRyPFBhZ2VPdmVybGF5PiBvdmVybGF5ID0gcGFn
ZU92ZXJsYXk7Ci0KLSAgICBpZiAobV9wYWdlT3ZlcmxheXMuY29udGFpbnMob3ZlcmxheSkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIG1fcGFnZU92ZXJsYXlzLmFwcGVuZChvdmVybGF5KTsKLSAg
ICBvdmVybGF5LT5zZXRQYWdlKCZtX3dlYlBhZ2UpOwotCi0gICAgaWYgKGZhZGVNb2RlID09IFBh
Z2VPdmVybGF5OjpGYWRlTW9kZTo6RmFkZSkKLSAgICAgICAgb3ZlcmxheS0+c3RhcnRGYWRlSW5B
bmltYXRpb24oKTsKLQotICAgIHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0xheWVyPiBsYXllciA9
IEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZShtX3dlYlBhZ2UuZHJhd2luZ0FyZWEoKS0+Z3JhcGhpY3NM
YXllckZhY3RvcnkoKSwgKnRoaXMpOwotICAgIGxheWVyLT5zZXRBbmNob3JQb2ludChGbG9hdFBv
aW50M0QoKSk7Ci0gICAgbGF5ZXItPnNldEJhY2tncm91bmRDb2xvcihvdmVybGF5LT5iYWNrZ3Jv
dW5kQ29sb3IoKSk7Ci0gICAgdXBkYXRlT3ZlcmxheUdlb21ldHJ5KCpvdmVybGF5LCAqbGF5ZXIp
OwotI2lmbmRlZiBOREVCVUcKLSAgICBsYXllci0+c2V0TmFtZSgiUGFnZSBPdmVybGF5IGNvbnRl
bnQiKTsKLSNlbmRpZgotCi0gICAgdXBkYXRlU2V0dGluZ3NGb3JMYXllcigqbGF5ZXIpOwotCi0g
ICAgc3dpdGNoIChvdmVybGF5LT5vdmVybGF5VHlwZSgpKSB7Ci0gICAgY2FzZSBQYWdlT3Zlcmxh
eTo6T3ZlcmxheVR5cGU6OlZpZXc6Ci0gICAgICAgIG1fdmlld092ZXJsYXlSb290TGF5ZXItPmFk
ZENoaWxkKGxheWVyLmdldCgpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQYWdlT3Zlcmxh
eTo6T3ZlcmxheVR5cGU6OkRvY3VtZW50OgotICAgICAgICBtX2RvY3VtZW50T3ZlcmxheVJvb3RM
YXllci0+YWRkQ2hpbGQobGF5ZXIuZ2V0KCkpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAg
ICBtX292ZXJsYXlHcmFwaGljc0xheWVycy5zZXQob3ZlcmxheS5nZXQoKSwgV1RGOjptb3ZlKGxh
eWVyKSk7Ci0KLSAgICB1cGRhdGVGb3JjZVN5bmNocm9ub3VzU2Nyb2xsTGF5ZXJQb3NpdGlvblVw
ZGF0ZXMoKTsKLX0KLQotdm9pZCBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6OnVuaW5zdGFsbFBhZ2VP
dmVybGF5KFBhZ2VPdmVybGF5KiBvdmVybGF5LCBQYWdlT3ZlcmxheTo6RmFkZU1vZGUgZmFkZU1v
ZGUpCi17Ci0gICAgaWYgKGZhZGVNb2RlID09IFBhZ2VPdmVybGF5OjpGYWRlTW9kZTo6RmFkZSkg
ewotICAgICAgICBvdmVybGF5LT5zdGFydEZhZGVPdXRBbmltYXRpb24oKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIG92ZXJsYXktPnNldFBhZ2UobnVsbHB0cik7Ci0KLSAgICBtX292
ZXJsYXlHcmFwaGljc0xheWVycy50YWtlKG92ZXJsYXkpLT5yZW1vdmVGcm9tUGFyZW50KCk7Ci0K
LSAgICBzaXplX3Qgb3ZlcmxheUluZGV4ID0gbV9wYWdlT3ZlcmxheXMuZmluZChvdmVybGF5KTsK
LSAgICBBU1NFUlQob3ZlcmxheUluZGV4ICE9IG5vdEZvdW5kKTsKLSAgICBtX3BhZ2VPdmVybGF5
cy5yZW1vdmUob3ZlcmxheUluZGV4KTsKLQotICAgIHVwZGF0ZUZvcmNlU3luY2hyb25vdXNTY3Jv
bGxMYXllclBvc2l0aW9uVXBkYXRlcygpOwotfQotCi12b2lkIFBhZ2VPdmVybGF5Q29udHJvbGxl
cjo6dXBkYXRlRm9yY2VTeW5jaHJvbm91c1Njcm9sbExheWVyUG9zaXRpb25VcGRhdGVzKCkKLXsK
LSNpZiBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKQotICAgIGJvb2wgZm9yY2VTeW5jaHJvbm91c1Nj
cm9sbExheWVyUG9zaXRpb25VcGRhdGVzID0gZmFsc2U7Ci0KLSAgICBmb3IgKGF1dG8mIG92ZXJs
YXkgOiBtX3BhZ2VPdmVybGF5cykgewotICAgICAgICBpZiAob3ZlcmxheS0+b3ZlcmxheVR5cGUo
KSA9PSBQYWdlT3ZlcmxheTo6T3ZlcmxheVR5cGU6OlZpZXcpCi0gICAgICAgICAgICBmb3JjZVN5
bmNocm9ub3VzU2Nyb2xsTGF5ZXJQb3NpdGlvblVwZGF0ZXMgPSB0cnVlOwotICAgIH0KLQotICAg
IGlmIChQYWdlKiBwYWdlID0gbV93ZWJQYWdlLmNvcmVQYWdlKCkpIHsKLSAgICAgICAgaWYgKFNj
cm9sbGluZ0Nvb3JkaW5hdG9yKiBzY3JvbGxpbmdDb29yZGluYXRvciA9IHBhZ2UtPnNjcm9sbGlu
Z0Nvb3JkaW5hdG9yKCkpCi0gICAgICAgICAgICBzY3JvbGxpbmdDb29yZGluYXRvci0+c2V0Rm9y
Y2VTeW5jaHJvbm91c1Njcm9sbExheWVyUG9zaXRpb25VcGRhdGVzKGZvcmNlU3luY2hyb25vdXNT
Y3JvbGxMYXllclBvc2l0aW9uVXBkYXRlcyk7Ci0gICAgfQotI2VuZGlmCi19Ci0KLXZvaWQgUGFn
ZU92ZXJsYXlDb250cm9sbGVyOjpzZXRQYWdlT3ZlcmxheU5lZWRzRGlzcGxheShQYWdlT3Zlcmxh
eSYgb3ZlcmxheSwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgZGlydHlSZWN0KQotewotICAgIEFT
U0VSVChtX3BhZ2VPdmVybGF5cy5jb250YWlucygmb3ZlcmxheSkpOwotICAgIEdyYXBoaWNzTGF5
ZXImIGdyYXBoaWNzTGF5ZXIgPSAqbV9vdmVybGF5R3JhcGhpY3NMYXllcnMuZ2V0KCZvdmVybGF5
KTsKLQotICAgIGlmICghZ3JhcGhpY3NMYXllci5kcmF3c0NvbnRlbnQoKSkgewotICAgICAgICBn
cmFwaGljc0xheWVyLnNldERyYXdzQ29udGVudCh0cnVlKTsKLSAgICAgICAgdXBkYXRlT3Zlcmxh
eUdlb21ldHJ5KG92ZXJsYXksIGdyYXBoaWNzTGF5ZXIpOwotICAgIH0KLQotICAgIGdyYXBoaWNz
TGF5ZXIuc2V0TmVlZHNEaXNwbGF5SW5SZWN0KGRpcnR5UmVjdCk7Ci19Ci0KLXZvaWQgUGFnZU92
ZXJsYXlDb250cm9sbGVyOjpzZXRQYWdlT3ZlcmxheU9wYWNpdHkoUGFnZU92ZXJsYXkmIG92ZXJs
YXksIGZsb2F0IG9wYWNpdHkpCi17Ci0gICAgQVNTRVJUKG1fcGFnZU92ZXJsYXlzLmNvbnRhaW5z
KCZvdmVybGF5KSk7Ci0gICAgbV9vdmVybGF5R3JhcGhpY3NMYXllcnMuZ2V0KCZvdmVybGF5KS0+
c2V0T3BhY2l0eShvcGFjaXR5KTsKLX0KLQotdm9pZCBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6OmNs
ZWFyUGFnZU92ZXJsYXkoUGFnZU92ZXJsYXkmIG92ZXJsYXkpCi17Ci0gICAgQVNTRVJUKG1fcGFn
ZU92ZXJsYXlzLmNvbnRhaW5zKCZvdmVybGF5KSk7Ci0gICAgbV9vdmVybGF5R3JhcGhpY3NMYXll
cnMuZ2V0KCZvdmVybGF5KS0+c2V0RHJhd3NDb250ZW50KGZhbHNlKTsKLX0KLQotR3JhcGhpY3NM
YXllciogUGFnZU92ZXJsYXlDb250cm9sbGVyOjpsYXllckZvck92ZXJsYXkoUGFnZU92ZXJsYXkm
IG92ZXJsYXkpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKG1fcGFnZU92ZXJsYXlzLmNvbnRhaW5zKCZv
dmVybGF5KSk7Ci0gICAgcmV0dXJuIG1fb3ZlcmxheUdyYXBoaWNzTGF5ZXJzLmdldCgmb3Zlcmxh
eSk7Ci19Ci0KLXZvaWQgUGFnZU92ZXJsYXlDb250cm9sbGVyOjpkaWRDaGFuZ2VWaWV3U2l6ZSgp
Ci17Ci0gICAgZm9yIChhdXRvJiBvdmVybGF5QW5kTGF5ZXIgOiBtX292ZXJsYXlHcmFwaGljc0xh
eWVycykgewotICAgICAgICBpZiAob3ZlcmxheUFuZExheWVyLmtleS0+b3ZlcmxheVR5cGUoKSA9
PSBQYWdlT3ZlcmxheTo6T3ZlcmxheVR5cGU6OlZpZXcpCi0gICAgICAgICAgICB1cGRhdGVPdmVy
bGF5R2VvbWV0cnkoKm92ZXJsYXlBbmRMYXllci5rZXksICpvdmVybGF5QW5kTGF5ZXIudmFsdWUp
OwotICAgIH0KLX0KLQotdm9pZCBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6OmRpZENoYW5nZURvY3Vt
ZW50U2l6ZSgpCi17Ci0gICAgZm9yIChhdXRvJiBvdmVybGF5QW5kTGF5ZXIgOiBtX292ZXJsYXlH
cmFwaGljc0xheWVycykgewotICAgICAgICBpZiAob3ZlcmxheUFuZExheWVyLmtleS0+b3Zlcmxh
eVR5cGUoKSA9PSBQYWdlT3ZlcmxheTo6T3ZlcmxheVR5cGU6OkRvY3VtZW50KQotICAgICAgICAg
ICAgdXBkYXRlT3ZlcmxheUdlb21ldHJ5KCpvdmVybGF5QW5kTGF5ZXIua2V5LCAqb3ZlcmxheUFu
ZExheWVyLnZhbHVlKTsKLSAgICB9Ci19Ci0KLXZvaWQgUGFnZU92ZXJsYXlDb250cm9sbGVyOjpk
aWRDaGFuZ2VQcmVmZXJlbmNlcygpCi17Ci0gICAgZm9yIChhdXRvJiBncmFwaGljc0xheWVyIDog
bV9vdmVybGF5R3JhcGhpY3NMYXllcnMudmFsdWVzKCkpCi0gICAgICAgIHVwZGF0ZVNldHRpbmdz
Rm9yTGF5ZXIoKmdyYXBoaWNzTGF5ZXIpOwotfQotCi12b2lkIFBhZ2VPdmVybGF5Q29udHJvbGxl
cjo6ZGlkQ2hhbmdlRGV2aWNlU2NhbGVGYWN0b3IoKQotewotICAgIG1fZG9jdW1lbnRPdmVybGF5
Um9vdExheWVyLT5ub3RlRGV2aWNlT3JQYWdlU2NhbGVGYWN0b3JDaGFuZ2VkSW5jbHVkaW5nRGVz
Y2VuZGFudHMoKTsKLSAgICBtX3ZpZXdPdmVybGF5Um9vdExheWVyLT5ub3RlRGV2aWNlT3JQYWdl
U2NhbGVGYWN0b3JDaGFuZ2VkSW5jbHVkaW5nRGVzY2VuZGFudHMoKTsKLQotICAgIGZvciAoYXV0
byYgZ3JhcGhpY3NMYXllciA6IG1fb3ZlcmxheUdyYXBoaWNzTGF5ZXJzLnZhbHVlcygpKQotICAg
ICAgICBncmFwaGljc0xheWVyLT5zZXROZWVkc0Rpc3BsYXkoKTsKLX0KLQotdm9pZCBQYWdlT3Zl
cmxheUNvbnRyb2xsZXI6OmRpZENoYW5nZUV4cG9zZWRSZWN0KCkKLXsKLSAgICBtX3dlYlBhZ2Uu
ZHJhd2luZ0FyZWEoKS0+c2NoZWR1bGVDb21wb3NpdGluZ0xheWVyRmx1c2goKTsKLX0KLQotdm9p
ZCBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6OmRpZFNjcm9sbEZyYW1lKEZyYW1lKiBmcmFtZSkKLXsK
LSAgICBmb3IgKGF1dG8mIG92ZXJsYXlBbmRMYXllciA6IG1fb3ZlcmxheUdyYXBoaWNzTGF5ZXJz
KSB7Ci0gICAgICAgIGlmIChvdmVybGF5QW5kTGF5ZXIua2V5LT5vdmVybGF5VHlwZSgpID09IFBh
Z2VPdmVybGF5OjpPdmVybGF5VHlwZTo6VmlldyB8fCAhZnJhbWUtPmlzTWFpbkZyYW1lKCkpCi0g
ICAgICAgICAgICBvdmVybGF5QW5kTGF5ZXIudmFsdWUtPnNldE5lZWRzRGlzcGxheSgpOwotICAg
ICAgICBvdmVybGF5QW5kTGF5ZXIua2V5LT5kaWRTY3JvbGxGcmFtZShmcmFtZSk7Ci0gICAgfQot
fQotCi12b2lkIFBhZ2VPdmVybGF5Q29udHJvbGxlcjo6Zmx1c2hQYWdlT3ZlcmxheUxheWVycyhG
bG9hdFJlY3QgdmlzaWJsZVJlY3QpCi17Ci0gICAgbV92aWV3T3ZlcmxheVJvb3RMYXllci0+Zmx1
c2hDb21wb3NpdGluZ1N0YXRlKHZpc2libGVSZWN0KTsKLX0KLQotdm9pZCBQYWdlT3ZlcmxheUNv
bnRyb2xsZXI6OnVwZGF0ZVNldHRpbmdzRm9yTGF5ZXIoR3JhcGhpY3NMYXllciYgbGF5ZXIpCi17
Ci0gICAgU2V0dGluZ3MmIHNldHRpbmdzID0gbV93ZWJQYWdlLmNvcmVQYWdlKCktPnNldHRpbmdz
KCk7Ci0gICAgbGF5ZXIuc2V0QWNjZWxlcmF0ZXNEcmF3aW5nKHNldHRpbmdzLmFjY2VsZXJhdGVk
RHJhd2luZ0VuYWJsZWQoKSk7Ci0gICAgbGF5ZXIuc2V0U2hvd0RlYnVnQm9yZGVyKHNldHRpbmdz
LnNob3dEZWJ1Z0JvcmRlcnMoKSk7Ci0gICAgbGF5ZXIuc2V0U2hvd1JlcGFpbnRDb3VudGVyKHNl
dHRpbmdzLnNob3dSZXBhaW50Q291bnRlcigpKTsKLX0KLQotYm9vbCBQYWdlT3ZlcmxheUNvbnRy
b2xsZXI6OmhhbmRsZU1vdXNlRXZlbnQoY29uc3QgV2ViTW91c2VFdmVudCYgbW91c2VFdmVudCkK
LXsKLSAgICBpZiAoIW1fcGFnZU92ZXJsYXlzLnNpemUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgZm9yIChhdXRvIGl0ID0gbV9wYWdlT3ZlcmxheXMucmJlZ2luKCksIGVuZCA9IG1f
cGFnZU92ZXJsYXlzLnJlbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGlmICgoKml0
KS0+bW91c2VFdmVudChtb3VzZUV2ZW50KSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAg
IH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotV0tUeXBlUmVmIFBhZ2VPdmVybGF5Q29udHJv
bGxlcjo6Y29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZShXS1N0cmluZ1JlZiBhdHRyaWJ1
dGUsIFdLVHlwZVJlZiBwYXJhbWV0ZXIpCi17Ci0gICAgaWYgKCFtX3BhZ2VPdmVybGF5cy5zaXpl
KCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgZm9yIChhdXRvIGl0ID0gbV9wYWdl
T3ZlcmxheXMucmJlZ2luKCksIGVuZCA9IG1fcGFnZU92ZXJsYXlzLnJlbmQoKTsgaXQgIT0gZW5k
OyArK2l0KSB7Ci0gICAgICAgIGlmIChXS1R5cGVSZWYgdmFsdWUgPSAoKml0KS0+Y29weUFjY2Vz
c2liaWxpdHlBdHRyaWJ1dGVWYWx1ZShhdHRyaWJ1dGUsIHBhcmFtZXRlcikpCi0gICAgICAgICAg
ICByZXR1cm4gdmFsdWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLVdLQXJy
YXlSZWYgUGFnZU92ZXJsYXlDb250cm9sbGVyOjpjb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZXNO
YW1lcyhib29sIHBhcmFtZXRlcml6ZWROYW1lcykKLXsKLSAgICBpZiAoIW1fcGFnZU92ZXJsYXlz
LnNpemUoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBmb3IgKGF1dG8gaXQgPSBt
X3BhZ2VPdmVybGF5cy5yYmVnaW4oKSwgZW5kID0gbV9wYWdlT3ZlcmxheXMucmVuZCgpOyBpdCAh
PSBlbmQ7ICsraXQpIHsKLSAgICAgICAgaWYgKFdLQXJyYXlSZWYgdmFsdWUgPSAoKml0KS0+Y29w
eUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVOYW1lcyhwYXJhbWV0ZXJpemVkTmFtZXMpKQotICAgICAg
ICAgICAgcmV0dXJuIHZhbHVlOwotICAgIH0KLQotICAgIHJldHVybiBudWxscHRyOwotfQotCi12
b2lkIFBhZ2VPdmVybGF5Q29udHJvbGxlcjo6cGFpbnRDb250ZW50cyhjb25zdCBXZWJDb3JlOjpH
cmFwaGljc0xheWVyKiBncmFwaGljc0xheWVyLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmIGdy
YXBoaWNzQ29udGV4dCwgV2ViQ29yZTo6R3JhcGhpY3NMYXllclBhaW50aW5nUGhhc2UsIGNvbnN0
IFdlYkNvcmU6OkZsb2F0UmVjdCYgY2xpcFJlY3QpCi17Ci0gICAgZm9yIChhdXRvIGl0ID0gbV9v
dmVybGF5R3JhcGhpY3NMYXllcnMuYmVnaW4oKSwgZW5kID0gbV9vdmVybGF5R3JhcGhpY3NMYXll
cnMuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBpZiAoaXQtPnZhbHVlLmdldCgp
ICE9IGdyYXBoaWNzTGF5ZXIpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBHcmFw
aGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoZ3JhcGhpY3NDb250ZXh0KTsKLSAgICAg
ICAgZ3JhcGhpY3NDb250ZXh0LmNsaXAoY2xpcFJlY3QpOwotICAgICAgICBpdC0+a2V5LT5kcmF3
UmVjdChncmFwaGljc0NvbnRleHQsIGVuY2xvc2luZ0ludFJlY3QoY2xpcFJlY3QpKTsKLQotICAg
ICAgICByZXR1cm47Ci0gICAgfQotfQotCi1mbG9hdCBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6OmRl
dmljZVNjYWxlRmFjdG9yKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV93ZWJQYWdlLmNvcmVQYWdl
KCktPmRldmljZVNjYWxlRmFjdG9yKCk7Ci19Ci0KLXZvaWQgUGFnZU92ZXJsYXlDb250cm9sbGVy
Ojpub3RpZnlGbHVzaFJlcXVpcmVkKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKQotewot
ICAgIGlmIChtX3dlYlBhZ2UuZHJhd2luZ0FyZWEoKSkKLSAgICAgICAgbV93ZWJQYWdlLmRyYXdp
bmdBcmVhKCktPnNjaGVkdWxlQ29tcG9zaXRpbmdMYXllckZsdXNoKCk7Ci19Ci0KLXZvaWQgUGFn
ZU92ZXJsYXlDb250cm9sbGVyOjpkaWRDaGFuZ2VPdmVybGF5RnJhbWUoUGFnZU92ZXJsYXkmIG92
ZXJsYXkpCi17Ci0gICAgQVNTRVJUKG1fcGFnZU92ZXJsYXlzLmNvbnRhaW5zKCZvdmVybGF5KSk7
Ci0gICAgdXBkYXRlT3ZlcmxheUdlb21ldHJ5KG92ZXJsYXksICptX292ZXJsYXlHcmFwaGljc0xh
eWVycy5nZXQoJm92ZXJsYXkpKTsKLX0KLQotdm9pZCBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6OmRp
ZENoYW5nZU92ZXJsYXlCYWNrZ3JvdW5kQ29sb3IoUGFnZU92ZXJsYXkmIG92ZXJsYXkpCi17Ci0g
ICAgQVNTRVJUKG1fcGFnZU92ZXJsYXlzLmNvbnRhaW5zKCZvdmVybGF5KSk7Ci0gICAgbV9vdmVy
bGF5R3JhcGhpY3NMYXllcnMuZ2V0KCZvdmVybGF5KS0+c2V0QmFja2dyb3VuZENvbG9yKG92ZXJs
YXkuYmFja2dyb3VuZENvbG9yKCkpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9QYWdlT3ZlcmxheUNvbnRy
b2xsZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9QYWdlT3ZlcmxheUNv
bnRyb2xsZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjUxODJkNS4uMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvUGFnZU92ZXJsYXlDb250
cm9sbGVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw5OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lm
bmRlZiBQYWdlT3ZlcmxheUNvbnRyb2xsZXJfaAotI2RlZmluZSBQYWdlT3ZlcmxheUNvbnRyb2xs
ZXJfaAotCi0jaW5jbHVkZSAiUGFnZU92ZXJsYXkuaCIKLSNpbmNsdWRlICJXS0Jhc2UuaCIKLSNp
bmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzTGF5ZXJDbGllbnQuaD4KLSNpbmNsdWRlIDx3dGYvSGFz
aE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLWNsYXNzIEZyYW1lOwotfQotCi1uYW1lc3BhY2UgV2Vi
S2l0IHsKLQotY2xhc3MgV2ViTW91c2VFdmVudDsKLWNsYXNzIFdlYlBhZ2U7Ci0KLWNsYXNzIFBh
Z2VPdmVybGF5Q29udHJvbGxlciA6IHB1YmxpYyBXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2xpZW50
IHsKLXB1YmxpYzoKLSAgICBQYWdlT3ZlcmxheUNvbnRyb2xsZXIoV2ViUGFnZSYpOwotCi0gICAg
dm9pZCBpbml0aWFsaXplKCk7Ci0KLSAgICBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiBkb2N1bWVu
dE92ZXJsYXlSb290TGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX2RvY3VtZW50T3ZlcmxheVJvb3RM
YXllci5nZXQoKTsgfQotICAgIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqIHZpZXdPdmVybGF5Um9v
dExheWVyKCkgY29uc3QgeyByZXR1cm4gbV92aWV3T3ZlcmxheVJvb3RMYXllci5nZXQoKTsgfQot
Ci0gICAgdm9pZCBpbnN0YWxsUGFnZU92ZXJsYXkoUGFzc1JlZlB0cjxQYWdlT3ZlcmxheT4sIFBh
Z2VPdmVybGF5OjpGYWRlTW9kZSk7Ci0gICAgdm9pZCB1bmluc3RhbGxQYWdlT3ZlcmxheShQYWdl
T3ZlcmxheSosIFBhZ2VPdmVybGF5OjpGYWRlTW9kZSk7Ci0KLSAgICB2b2lkIHNldFBhZ2VPdmVy
bGF5TmVlZHNEaXNwbGF5KFBhZ2VPdmVybGF5JiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOwot
ICAgIHZvaWQgc2V0UGFnZU92ZXJsYXlPcGFjaXR5KFBhZ2VPdmVybGF5JiwgZmxvYXQpOwotICAg
IHZvaWQgY2xlYXJQYWdlT3ZlcmxheShQYWdlT3ZlcmxheSYpOwotICAgIFdlYkNvcmU6OkdyYXBo
aWNzTGF5ZXIqIGxheWVyRm9yT3ZlcmxheShQYWdlT3ZlcmxheSYpIGNvbnN0OwotCi0gICAgdm9p
ZCBkaWRDaGFuZ2VWaWV3U2l6ZSgpOwotICAgIHZvaWQgZGlkQ2hhbmdlRG9jdW1lbnRTaXplKCk7
Ci0gICAgdm9pZCBkaWRDaGFuZ2VQcmVmZXJlbmNlcygpOwotICAgIHZvaWQgZGlkQ2hhbmdlRGV2
aWNlU2NhbGVGYWN0b3IoKTsKLSAgICB2b2lkIGRpZENoYW5nZUV4cG9zZWRSZWN0KCk7Ci0gICAg
dm9pZCBkaWRTY3JvbGxGcmFtZShXZWJDb3JlOjpGcmFtZSopOwotCi0gICAgdm9pZCBkaWRDaGFu
Z2VPdmVybGF5RnJhbWUoUGFnZU92ZXJsYXkmKTsKLSAgICB2b2lkIGRpZENoYW5nZU92ZXJsYXlC
YWNrZ3JvdW5kQ29sb3IoUGFnZU92ZXJsYXkmKTsKLQotICAgIHZvaWQgZmx1c2hQYWdlT3Zlcmxh
eUxheWVycyhXZWJDb3JlOjpGbG9hdFJlY3QpOwotCi0gICAgYm9vbCBoYW5kbGVNb3VzZUV2ZW50
KGNvbnN0IFdlYk1vdXNlRXZlbnQmKTsKLQotICAgIC8vIEZJWE1FOiBXZSBzaG91bGRuJ3QgdXNl
IEFQSSB0eXBlcyBoZXJlLgotICAgIFdLVHlwZVJlZiBjb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0
ZVZhbHVlKFdLU3RyaW5nUmVmIGF0dHJpYnV0ZSwgV0tUeXBlUmVmIHBhcmFtZXRlcik7Ci0gICAg
V0tBcnJheVJlZiBjb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZXNOYW1lcyhib29sIHBhcmFtZXRl
cml6ZWROYW1lcyk7Ci0KLXByaXZhdGU6Ci0gICAgdm9pZCB1cGRhdGVTZXR0aW5nc0ZvckxheWVy
KFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXImKTsKLSAgICB2b2lkIHVwZGF0ZUZvcmNlU3luY2hyb25v
dXNTY3JvbGxMYXllclBvc2l0aW9uVXBkYXRlcygpOwotCi0gICAgLy8gV2ViQ29yZTo6R3JhcGhp
Y3NMYXllckNsaWVudAotICAgIHZpcnR1YWwgdm9pZCBub3RpZnlGbHVzaFJlcXVpcmVkKGNvbnN0
IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgcGFp
bnRDb250ZW50cyhjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiwgV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0JiwgV2ViQ29yZTo6R3JhcGhpY3NMYXllclBhaW50aW5nUGhhc2UsIGNvbnN0IFdl
YkNvcmU6OkZsb2F0UmVjdCYgY2xpcFJlY3QpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgZmxvYXQg
ZGV2aWNlU2NhbGVGYWN0b3IoKSBjb25zdCBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIGJvb2wgc2hv
dWxkU2tpcExheWVySW5EdW1wKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiB0cnVlOyB9Ci0KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6
R3JhcGhpY3NMYXllcj4gbV9kb2N1bWVudE92ZXJsYXlSb290TGF5ZXI7Ci0gICAgc3RkOjp1bmlx
dWVfcHRyPFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI+IG1fdmlld092ZXJsYXlSb290TGF5ZXI7Ci0g
ICAgSGFzaE1hcDxQYWdlT3ZlcmxheSosIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpHcmFwaGlj
c0xheWVyPj4gbV9vdmVybGF5R3JhcGhpY3NMYXllcnM7Ci0gICAgVmVjdG9yPFJlZlB0cjxQYWdl
T3ZlcmxheT4+IG1fcGFnZU92ZXJsYXlzOwotICAgIFdlYlBhZ2UmIG1fd2ViUGFnZTsKLX07Ci0K
LX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gUGFnZU92ZXJsYXlDb250cm9sbGVy
X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9TZXJ2aWNl
c092ZXJsYXlDb250cm9sbGVyLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
U2VydmljZXNPdmVybGF5Q29udHJvbGxlci5oCmluZGV4IDNiMDlkM2QuLjhlZDMxMmIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9TZXJ2aWNlc092ZXJsYXlD
b250cm9sbGVyLmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1NlcnZp
Y2VzT3ZlcmxheUNvbnRyb2xsZXIuaApAQCAtMjgsOSArMjgsOSBAQAogCiAjaWYgRU5BQkxFKFNF
UlZJQ0VfQ09OVFJPTFMpIHx8IEVOQUJMRShURUxFUEhPTkVfTlVNQkVSX0RFVEVDVElPTikKIAot
I2luY2x1ZGUgIlBhZ2VPdmVybGF5LmgiCiAjaW5jbHVkZSAiV2ViRnJhbWUuaCIKICNpbmNsdWRl
IDxXZWJDb3JlL0dyYXBoaWNzTGF5ZXJDbGllbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1BhZ2VP
dmVybGF5Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SYW5nZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUv
VGltZXIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgpAQCAtMzksNyArMzksNiBAQCB0
eXBlZGVmIHZvaWQqIERESGlnaGxpZ2h0UmVmOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFz
cyBMYXlvdXRSZWN0OwotCiBzdHJ1Y3QgR2FwUmVjdHM7CiB9CiAKQEAgLTQ3LDcgKzQ2LDcgQEAg
bmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIFdlYlBhZ2U7CiAKLWNsYXNzIFNlcnZpY2VzT3Zl
cmxheUNvbnRyb2xsZXIgOiBwcml2YXRlIFBhZ2VPdmVybGF5OjpDbGllbnQgeworY2xhc3MgU2Vy
dmljZXNPdmVybGF5Q29udHJvbGxlciA6IHByaXZhdGUgV2ViQ29yZTo6UGFnZU92ZXJsYXk6OkNs
aWVudCB7CiBwdWJsaWM6CiAgICAgU2VydmljZXNPdmVybGF5Q29udHJvbGxlcihXZWJQYWdlJik7
CiAgICAgflNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIoKTsKQEAgLTk4LDEyICs5NywxMiBAQCBw
cml2YXRlOgogICAgIH07CiAKICAgICAvLyBQYWdlT3ZlcmxheTo6Q2xpZW50Ci0gICAgdmlydHVh
bCB2b2lkIHBhZ2VPdmVybGF5RGVzdHJveWVkKFBhZ2VPdmVybGF5Kikgb3ZlcnJpZGU7Ci0gICAg
dmlydHVhbCB2b2lkIHdpbGxNb3ZlVG9XZWJQYWdlKFBhZ2VPdmVybGF5KiwgV2ViUGFnZSopIG92
ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBkaWRNb3ZlVG9XZWJQYWdlKFBhZ2VPdmVybGF5Kiwg
V2ViUGFnZSopIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBkcmF3UmVjdChQYWdlT3Zlcmxh
eSosIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGRp
cnR5UmVjdCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBib29sIG1vdXNlRXZlbnQoUGFnZU92ZXJs
YXkqLCBjb25zdCBXZWJNb3VzZUV2ZW50Jikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGRp
ZFNjcm9sbEZyYW1lKFBhZ2VPdmVybGF5KiwgV2ViQ29yZTo6RnJhbWUqKSBvdmVycmlkZTsKKyAg
ICB2aXJ0dWFsIHZvaWQgcGFnZU92ZXJsYXlEZXN0cm95ZWQoV2ViQ29yZTo6UGFnZU92ZXJsYXkq
KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgd2lsbE1vdmVUb1BhZ2UoV2ViQ29yZTo6UGFn
ZU92ZXJsYXkqLCBXZWJDb3JlOjpQYWdlKikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGRp
ZE1vdmVUb1BhZ2UoV2ViQ29yZTo6UGFnZU92ZXJsYXkqLCBXZWJDb3JlOjpQYWdlKikgb3ZlcnJp
ZGU7CisgICAgdmlydHVhbCB2b2lkIGRyYXdSZWN0KFdlYkNvcmU6OlBhZ2VPdmVybGF5KiwgV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0JiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgZGlydHlSZWN0
KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wgbW91c2VFdmVudChXZWJDb3JlOjpQYWdlT3Zl
cmxheSosIGNvbnN0IFdlYkNvcmU6OlBsYXRmb3JtTW91c2VFdmVudCYpIG92ZXJyaWRlOworICAg
IHZpcnR1YWwgdm9pZCBkaWRTY3JvbGxGcmFtZShXZWJDb3JlOjpQYWdlT3ZlcmxheSosIFdlYkNv
cmU6OkZyYW1lJikgb3ZlcnJpZGU7CiAKICAgICB2b2lkIGNyZWF0ZU92ZXJsYXlJZk5lZWRlZCgp
OwogICAgIHZvaWQgaGFuZGxlQ2xpY2soY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmLCBIaWdobGln
aHQmKTsKQEAgLTEzOSw3ICsxMzgsNyBAQCBwcml2YXRlOgogICAgIFdlYlBhZ2UmIHdlYlBhZ2Uo
KSBjb25zdCB7IHJldHVybiBtX3dlYlBhZ2U7IH0KIAogICAgIFdlYlBhZ2UmIG1fd2ViUGFnZTsK
LSAgICBQYWdlT3ZlcmxheSogbV9zZXJ2aWNlc092ZXJsYXk7CisgICAgV2ViQ29yZTo6UGFnZU92
ZXJsYXkqIG1fc2VydmljZXNPdmVybGF5OwogCiAgICAgUmVmUHRyPEhpZ2hsaWdodD4gbV9hY3Rp
dmVIaWdobGlnaHQ7CiAgICAgUmVmUHRyPEhpZ2hsaWdodD4gbV9uZXh0QWN0aXZlSGlnaGxpZ2h0
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2Uu
Y3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCmluZGV4
IGNjYzYzYjUuLmZjZjAzMzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJQYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViUGFnZS5jcHAKQEAgLTMyNiw3ICszMjYsNiBAQCBXZWJQYWdlOjpXZWJQYWdlKHVpbnQ2
NF90IHBhZ2VJRCwgY29uc3QgV2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVycyYgcGFyYW1ldGVycykK
ICNpZiBFTkFCTEUoV0VCR0wpCiAgICAgLCBtX3N5c3RlbVdlYkdMUG9saWN5KFdlYkdMQWxsb3dD
cmVhdGlvbikKICNlbmRpZgotICAgICwgbV9wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKnRoaXMpCiB7
CiAgICAgQVNTRVJUKG1fcGFnZUlEKTsKICAgICAvLyBGSVhNRTogVGhpcyBpcyBhIG5vbi1pZGVh
bCBsb2NhdGlvbiBmb3IgdGhpcyBTZXR0aW5nIGFuZApAQCAtMzY1LDcgKzM2NCw2IEBAIFdlYlBh
Z2U6OldlYlBhZ2UodWludDY0X3QgcGFnZUlELCBjb25zdCBXZWJQYWdlQ3JlYXRpb25QYXJhbWV0
ZXJzJiBwYXJhbWV0ZXJzKQogCiAgICAgbV9kcmF3aW5nQXJlYSA9IERyYXdpbmdBcmVhOjpjcmVh
dGUoKnRoaXMsIHBhcmFtZXRlcnMpOwogICAgIG1fZHJhd2luZ0FyZWEtPnNldFBhaW50aW5nRW5h
YmxlZChmYWxzZSk7Ci0gICAgbV9wYWdlT3ZlcmxheUNvbnRyb2xsZXIuaW5pdGlhbGl6ZSgpOwog
CiAjaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykKICAgICBtX3VzZUFzeW5jU2Nyb2xsaW5nID0g
cGFyYW1ldGVycy5zdG9yZS5nZXRCb29sVmFsdWVGb3JLZXkoV2ViUHJlZmVyZW5jZXNLZXk6OnRo
cmVhZGVkU2Nyb2xsaW5nRW5hYmxlZEtleSgpKTsKQEAgLTEyMTMsOCArMTIxMSw2IEBAIHZvaWQg
V2ViUGFnZTo6c2V0U2l6ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiB2aWV3U2l6ZSkKICAgICBp
ZiAodmlldy0+dXNlRml4ZWRMYXlvdXQoKSkKICAgICAgICAgc2VuZFZpZXdwb3J0QXR0cmlidXRl
c0NoYW5nZWQoKTsKICNlbmRpZgotCi0gICAgbV9wYWdlT3ZlcmxheUNvbnRyb2xsZXIuZGlkQ2hh
bmdlVmlld1NpemUoKTsKIH0KIAogI2lmIFVTRShUSUxFRF9CQUNLSU5HX1NUT1JFKQpAQCAtMTQ0
MCw4ICsxNDM2LDYgQEAgdm9pZCBXZWJQYWdlOjpzZXREZXZpY2VTY2FsZUZhY3RvcihmbG9hdCBz
Y2FsZUZhY3RvcikKIAogICAgIGlmIChtX2RyYXdpbmdBcmVhLT5sYXllclRyZWVIb3N0KCkpCiAg
ICAgICAgIG1fZHJhd2luZ0FyZWEtPmxheWVyVHJlZUhvc3QoKS0+ZGV2aWNlT3JQYWdlU2NhbGVG
YWN0b3JDaGFuZ2VkKCk7Ci0KLSAgICBtX3BhZ2VPdmVybGF5Q29udHJvbGxlci5kaWRDaGFuZ2VE
ZXZpY2VTY2FsZUZhY3RvcigpOwogfQogCiBmbG9hdCBXZWJQYWdlOjpkZXZpY2VTY2FsZUZhY3Rv
cigpIGNvbnN0CkBAIC0xNTY0LDE2ICsxNTU4LDYgQEAgdm9pZCBXZWJQYWdlOjpwb3N0SW5qZWN0
ZWRCdW5kbGVNZXNzYWdlKGNvbnN0IFN0cmluZyYgbWVzc2FnZU5hbWUsIElQQzo6TWVzc2FnZUQK
ICAgICBpbmplY3RlZEJ1bmRsZS0+ZGlkUmVjZWl2ZU1lc3NhZ2VUb1BhZ2UodGhpcywgbWVzc2Fn
ZU5hbWUsIG1lc3NhZ2VCb2R5LmdldCgpKTsKIH0KIAotdm9pZCBXZWJQYWdlOjppbnN0YWxsUGFn
ZU92ZXJsYXkoUGFzc1JlZlB0cjxQYWdlT3ZlcmxheT4gcGFnZU92ZXJsYXksIFBhZ2VPdmVybGF5
OjpGYWRlTW9kZSBmYWRlTW9kZSkKLXsKLSAgICBtX3BhZ2VPdmVybGF5Q29udHJvbGxlci5pbnN0
YWxsUGFnZU92ZXJsYXkocGFnZU92ZXJsYXksIGZhZGVNb2RlKTsKLX0KLQotdm9pZCBXZWJQYWdl
Ojp1bmluc3RhbGxQYWdlT3ZlcmxheShQYWdlT3ZlcmxheSogcGFnZU92ZXJsYXksIFBhZ2VPdmVy
bGF5OjpGYWRlTW9kZSBmYWRlTW9kZSkKLXsKLSAgICBtX3BhZ2VPdmVybGF5Q29udHJvbGxlci51
bmluc3RhbGxQYWdlT3ZlcmxheShwYWdlT3ZlcmxheSwgZmFkZU1vZGUpOwotfQotCiAjaWYgIVBM
QVRGT1JNKElPUykKIHZvaWQgV2ViUGFnZTo6c2V0SGVhZGVyUGFnZUJhbm5lcihQYXNzUmVmUHRy
PFBhZ2VCYW5uZXI+IHBhZ2VCYW5uZXIpCiB7CkBAIC0xOTAxLDcgKzE4ODUsNyBAQCB2b2lkIFdl
YlBhZ2U6Om1vdXNlRXZlbnQoY29uc3QgV2ViTW91c2VFdmVudCYgbW91c2VFdmVudCkKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KICNlbmRpZgotICAgIGJvb2wgaGFuZGxlZCA9IG1fcGFnZU92ZXJs
YXlDb250cm9sbGVyLmhhbmRsZU1vdXNlRXZlbnQobW91c2VFdmVudCk7CisgICAgYm9vbCBoYW5k
bGVkID0gZmFsc2U7CiAKICNpZiAhUExBVEZPUk0oSU9TKQogICAgIGlmICghaGFuZGxlZCAmJiBt
X2hlYWRlckJhbm5lcikKQEAgLTE5MjcsNyArMTkxMSw3IEBAIHZvaWQgV2ViUGFnZTo6bW91c2VF
dmVudChjb25zdCBXZWJNb3VzZUV2ZW50JiBtb3VzZUV2ZW50KQogCiB2b2lkIFdlYlBhZ2U6Om1v
dXNlRXZlbnRTeW5jRm9yVGVzdGluZyhjb25zdCBXZWJNb3VzZUV2ZW50JiBtb3VzZUV2ZW50LCBi
b29sJiBoYW5kbGVkKQogewotICAgIGhhbmRsZWQgPSBtX3BhZ2VPdmVybGF5Q29udHJvbGxlci5o
YW5kbGVNb3VzZUV2ZW50KG1vdXNlRXZlbnQpOworICAgIGhhbmRsZWQgPSBmYWxzZTsKICNpZiAh
UExBVEZPUk0oSU9TKQogICAgIGlmICghaGFuZGxlZCAmJiBtX2hlYWRlckJhbm5lcikKICAgICAg
ICAgaGFuZGxlZCA9IG1faGVhZGVyQmFubmVyLT5tb3VzZUV2ZW50KG1vdXNlRXZlbnQpOwpAQCAt
Mjg1Niw4ICsyODQwLDYgQEAgdm9pZCBXZWJQYWdlOjp1cGRhdGVQcmVmZXJlbmNlcyhjb25zdCBX
ZWJQcmVmZXJlbmNlc1N0b3JlJiBzdG9yZSkKIAogICAgIGlmIChtX2RyYXdpbmdBcmVhKQogICAg
ICAgICBtX2RyYXdpbmdBcmVhLT51cGRhdGVQcmVmZXJlbmNlcyhzdG9yZSk7Ci0KLSAgICBtX3Bh
Z2VPdmVybGF5Q29udHJvbGxlci5kaWRDaGFuZ2VQcmVmZXJlbmNlcygpOwogfQogCiAjaWYgUExB
VEZPUk0oQ09DT0EpCkBAIC00Nzk4LDggKzQ3ODAsNiBAQCBTZXJ2aWNlc092ZXJsYXlDb250cm9s
bGVyJiBXZWJQYWdlOjpzZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyKCkKIAogdm9pZCBXZWJQYWdl
OjpkaWRDaGFuZ2VTY3JvbGxPZmZzZXRGb3JGcmFtZShGcmFtZSogZnJhbWUpCiB7Ci0gICAgbV9w
YWdlT3ZlcmxheUNvbnRyb2xsZXIuZGlkU2Nyb2xsRnJhbWUoZnJhbWUpOwotCiAgICAgaWYgKCFm
cmFtZS0+aXNNYWluRnJhbWUoKSkKICAgICAgICAgcmV0dXJuOwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAppbmRleCBiN2Q0NDhjLi45YWI3OWI1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKQEAgLTQxLDcgKzQx
LDYgQEAKICNpbmNsdWRlICJMYXllclRyZWVIb3N0LmgiCiAjaW5jbHVkZSAiTWVzc2FnZVJlY2Vp
dmVyLmgiCiAjaW5jbHVkZSAiTWVzc2FnZVNlbmRlci5oIgotI2luY2x1ZGUgIlBhZ2VPdmVybGF5
Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIlBsdWdpbi5oIgogI2luY2x1ZGUgIlNhbmRib3hFeHRl
bnNpb24uaCIKICNpbmNsdWRlICJTaGFyZWFibGVCaXRtYXAuaCIKQEAgLTE0MCw3ICsxMzksNiBA
QCBjbGFzcyBEcmF3aW5nQXJlYTsKIGNsYXNzIEluamVjdGVkQnVuZGxlQmFja0ZvcndhcmRMaXN0
OwogY2xhc3MgTm90aWZpY2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyOwogY2xhc3MgUGFn
ZUJhbm5lcjsKLWNsYXNzIFBhZ2VPdmVybGF5OwogY2xhc3MgUGx1Z2luVmlldzsKIGNsYXNzIFNl
cnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI7CiBjbGFzcyBWaXNpYmxlQ29udGVudFJlY3RVcGRhdGVJ
bmZvOwpAQCAtMjA2LDggKzIwNCw2IEBAIHB1YmxpYzoKICAgICAKICAgICBJbmplY3RlZEJ1bmRs
ZUJhY2tGb3J3YXJkTGlzdCogYmFja0ZvcndhcmRMaXN0KCk7CiAgICAgRHJhd2luZ0FyZWEqIGRy
YXdpbmdBcmVhKCkgY29uc3QgeyByZXR1cm4gbV9kcmF3aW5nQXJlYS5nZXQoKTsgfQotICAgIGNv
bnN0IFBhZ2VPdmVybGF5Q29udHJvbGxlciYgcGFnZU92ZXJsYXlDb250cm9sbGVyKCkgY29uc3Qg
eyByZXR1cm4gbV9wYWdlT3ZlcmxheUNvbnRyb2xsZXI7IH0KLSAgICBQYWdlT3ZlcmxheUNvbnRy
b2xsZXImIHBhZ2VPdmVybGF5Q29udHJvbGxlcigpIHsgcmV0dXJuIG1fcGFnZU92ZXJsYXlDb250
cm9sbGVyOyB9CiAjaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykKICAgICBXZWJDb3JlOjpTY3Jv
bGxpbmdDb29yZGluYXRvciogc2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSBjb25zdDsKICNlbmRpZgpA
QCAtNDE2LDggKzQxMiw2IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgd2luZG93SXNGb2N1c2VkKCkg
Y29uc3Q7CiAgICAgYm9vbCB3aW5kb3dBbmRXZWJQYWdlQXJlRm9jdXNlZCgpIGNvbnN0OwotICAg
IHZvaWQgaW5zdGFsbFBhZ2VPdmVybGF5KFBhc3NSZWZQdHI8UGFnZU92ZXJsYXk+LCBQYWdlT3Zl
cmxheTo6RmFkZU1vZGUgPSBQYWdlT3ZlcmxheTo6RmFkZU1vZGU6OkRvTm90RmFkZSk7Ci0gICAg
dm9pZCB1bmluc3RhbGxQYWdlT3ZlcmxheShQYWdlT3ZlcmxheSosIFBhZ2VPdmVybGF5OjpGYWRl
TW9kZSA9IFBhZ2VPdmVybGF5OjpGYWRlTW9kZTo6RG9Ob3RGYWRlKTsKIAogI2lmICFQTEFURk9S
TShJT1MpCiAgICAgdm9pZCBzZXRIZWFkZXJQYWdlQmFubmVyKFBhc3NSZWZQdHI8UGFnZUJhbm5l
cj4pOwpAQCAtODIyLDkgKzgxNiw2IEBAIHB1YmxpYzoKICAgICBXZWJDb3JlOjpTY3JvbGxQaW5u
aW5nQmVoYXZpb3Igc2Nyb2xsUGlubmluZ0JlaGF2aW9yKCkgeyByZXR1cm4gbV9zY3JvbGxQaW5u
aW5nQmVoYXZpb3I7IH0KICAgICB2b2lkIHNldFNjcm9sbFBpbm5pbmdCZWhhdmlvcih1aW50MzJf
dCAvKiBXZWJDb3JlOjpTY3JvbGxQaW5uaW5nQmVoYXZpb3IgKi8gcGlubmluZyk7CiAKLSAgICBX
S1R5cGVSZWYgcGFnZU92ZXJsYXlDb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlKFdLU3Ry
aW5nUmVmIGF0dHJpYnV0ZSwgV0tUeXBlUmVmIHBhcmFtZXRlcik7Ci0gICAgV0tBcnJheVJlZiBw
YWdlT3ZlcmxheUNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlc05hbWVzKGJvb2wgcGFyYW1ldGVy
aXplZE5hbWVzKTsKLQogICAgIFBhc3NSZWZQdHI8V2ViQ29yZTo6RG9jdW1lbnRMb2FkZXI+IGNy
ZWF0ZURvY3VtZW50TG9hZGVyKFdlYkNvcmU6OkZyYW1lJiwgY29uc3QgV2ViQ29yZTo6UmVzb3Vy
Y2VSZXF1ZXN0JiwgY29uc3QgV2ViQ29yZTo6U3Vic3RpdHV0ZURhdGEmKTsKIAogICAgIHZvaWQg
Z2V0Qnl0ZWNvZGVQcm9maWxlKHVpbnQ2NF90IGNhbGxiYWNrSUQpOwpAQCAtMTI3Nyw4ICsxMjY4
LDYgQEAgcHJpdmF0ZToKICNpZiBFTkFCTEUoU0VSVklDRV9DT05UUk9MUykgfHwgRU5BQkxFKFRF
TEVQSE9ORV9OVU1CRVJfREVURUNUSU9OKQogICAgIHN0ZDo6dW5pcXVlX3B0cjxTZXJ2aWNlc092
ZXJsYXlDb250cm9sbGVyPiBtX3NlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI7CiAjZW5kaWYKLQot
ICAgIFBhZ2VPdmVybGF5Q29udHJvbGxlciBtX3BhZ2VPdmVybGF5Q29udHJvbGxlcjsKIH07CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYlBhZ2VPdmVybGF5LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9XZWJQYWdlT3ZlcmxheS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uNjdlMDYxYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9XZWJQYWdlT3ZlcmxheS5jcHAKQEAgLTAsMCArMSwxMTMgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViUGFnZU92ZXJsYXkuaCIK
KworI2luY2x1ZGUgIldlYkZyYW1lLmgiCisjaW5jbHVkZSAiV2ViUGFnZS5oIgorI2luY2x1ZGUg
PFdlYkNvcmUvR3JhcGhpY3NMYXllci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUGFnZU92ZXJsYXku
aD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitQ
YXNzUmVmUHRyPFdlYlBhZ2VPdmVybGF5PiBXZWJQYWdlT3ZlcmxheTo6Y3JlYXRlKFdlYlBhZ2VP
dmVybGF5OjpDbGllbnQqIGNsaWVudCwgUGFnZU92ZXJsYXk6Ok92ZXJsYXlUeXBlIG92ZXJsYXlU
eXBlKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgV2ViUGFnZU92ZXJsYXkoY2xpZW50LCBv
dmVybGF5VHlwZSkpOworfQorCitXZWJQYWdlT3ZlcmxheTo6V2ViUGFnZU92ZXJsYXkoV2ViUGFn
ZU92ZXJsYXk6OkNsaWVudCogY2xpZW50LCBQYWdlT3ZlcmxheTo6T3ZlcmxheVR5cGUgb3Zlcmxh
eVR5cGUpCisgICAgOiBtX292ZXJsYXkoUGFnZU92ZXJsYXk6OmNyZWF0ZSh0aGlzLCBvdmVybGF5
VHlwZSkpCisgICAgLCBtX2NsaWVudChjbGllbnQpCit7Cit9CisKK1dlYlBhZ2VPdmVybGF5Ojp+
V2ViUGFnZU92ZXJsYXkoKQoreworfQorCit2b2lkIFdlYlBhZ2VPdmVybGF5OjpzZXROZWVkc0Rp
c3BsYXkoY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KQoreworICAgIG1fb3ZlcmxheS0+c2V0TmVl
ZHNEaXNwbGF5KGRpcnR5UmVjdCk7Cit9CisKK3ZvaWQgV2ViUGFnZU92ZXJsYXk6OnNldE5lZWRz
RGlzcGxheSgpCit7CisgICAgbV9vdmVybGF5LT5zZXROZWVkc0Rpc3BsYXkoKTsKK30KKwordm9p
ZCBXZWJQYWdlT3ZlcmxheTo6Y2xlYXIoKQoreworICAgIG1fb3ZlcmxheS0+Y2xlYXIoKTsKK30K
Kwordm9pZCBXZWJQYWdlT3ZlcmxheTo6cGFnZU92ZXJsYXlEZXN0cm95ZWQoUGFnZU92ZXJsYXkq
KQoreworICAgIG1fY2xpZW50LT5wYWdlT3ZlcmxheURlc3Ryb3llZCh0aGlzKTsKK30KKwordm9p
ZCBXZWJQYWdlT3ZlcmxheTo6d2lsbE1vdmVUb1BhZ2UoUGFnZU92ZXJsYXkqLCBQYWdlKiBwYWdl
KQoreworICAgIG1fY2xpZW50LT53aWxsTW92ZVRvUGFnZSh0aGlzLCBwYWdlID8gV2ViUGFnZTo6
ZnJvbUNvcmVQYWdlKHBhZ2UpIDogbnVsbHB0cik7Cit9CisKK3ZvaWQgV2ViUGFnZU92ZXJsYXk6
OmRpZE1vdmVUb1BhZ2UoUGFnZU92ZXJsYXkqLCBQYWdlKiBwYWdlKQoreworICAgIG1fY2xpZW50
LT5kaWRNb3ZlVG9QYWdlKHRoaXMsIHBhZ2UgPyBXZWJQYWdlOjpmcm9tQ29yZVBhZ2UocGFnZSkg
OiBudWxscHRyKTsKK30KKwordm9pZCBXZWJQYWdlT3ZlcmxheTo6ZHJhd1JlY3QoUGFnZU92ZXJs
YXkqLCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCkK
K3sKKyAgICBtX2NsaWVudC0+ZHJhd1JlY3QodGhpcywgY29udGV4dCwgZGlydHlSZWN0KTsKK30K
KworYm9vbCBXZWJQYWdlT3ZlcmxheTo6bW91c2VFdmVudChQYWdlT3ZlcmxheSosIGNvbnN0IFBs
YXRmb3JtTW91c2VFdmVudCYgZXZlbnQpCit7CisgICAgcmV0dXJuIG1fY2xpZW50LT5tb3VzZUV2
ZW50KHRoaXMsIGV2ZW50KTsKK30KKwordm9pZCBXZWJQYWdlT3ZlcmxheTo6ZGlkU2Nyb2xsRnJh
bWUoUGFnZU92ZXJsYXkqLCBGcmFtZSYgZnJhbWUpCit7CisgICAgbV9jbGllbnQtPmRpZFNjcm9s
bEZyYW1lKHRoaXMsIFdlYkZyYW1lOjpmcm9tQ29yZUZyYW1lKGZyYW1lKSk7Cit9CisKK2Jvb2wg
V2ViUGFnZU92ZXJsYXk6OmNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlU3RyaW5nVmFsdWVGb3JQ
b2ludChQYWdlT3ZlcmxheSosIFN0cmluZyBhdHRyaWJ1dGUsIEZsb2F0UG9pbnQgcGFyYW1ldGVy
LCBTdHJpbmcmIHZhbHVlKQoreworICAgIHJldHVybiBtX2NsaWVudC0+Y29weUFjY2Vzc2liaWxp
dHlBdHRyaWJ1dGVTdHJpbmdWYWx1ZUZvclBvaW50KHRoaXMsIGF0dHJpYnV0ZSwgcGFyYW1ldGVy
LCB2YWx1ZSk7Cit9CisKK2Jvb2wgV2ViUGFnZU92ZXJsYXk6OmNvcHlBY2Nlc3NpYmlsaXR5QXR0
cmlidXRlQm9vbFZhbHVlRm9yUG9pbnQoUGFnZU92ZXJsYXkqLCBTdHJpbmcgYXR0cmlidXRlLCBG
bG9hdFBvaW50IHBhcmFtZXRlciwgYm9vbCYgdmFsdWUpCit7CisgICAgcmV0dXJuIG1fY2xpZW50
LT5jb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZUJvb2xWYWx1ZUZvclBvaW50KHRoaXMsIGF0dHJp
YnV0ZSwgcGFyYW1ldGVyLCB2YWx1ZSk7Cit9CisKK1ZlY3RvcjxTdHJpbmc+IFdlYlBhZ2VPdmVy
bGF5Ojpjb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZU5hbWVzKFBhZ2VPdmVybGF5KiwgYm9vbCBw
YXJhbWV0ZXJpemVkTmFtZXMpCit7CisgICAgcmV0dXJuIG1fY2xpZW50LT5jb3B5QWNjZXNzaWJp
bGl0eUF0dHJpYnV0ZU5hbWVzKHRoaXMsIHBhcmFtZXRlcml6ZWROYW1lcyk7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL1dlYlBhZ2VPdmVybGF5LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViUGFnZU92ZXJsYXkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5m
ZTQyMTNiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYlBhZ2VPdmVybGF5LmgKQEAgLTAsMCArMSw5MiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5k
ZWYgV2ViUGFnZU92ZXJsYXlfaAorI2RlZmluZSBXZWJQYWdlT3ZlcmxheV9oCisKKyNpbmNsdWRl
ICJBUElPYmplY3QuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0Zsb2F0UG9pbnQuaD4KKyNpbmNsdWRl
IDxXZWJDb3JlL0ludFJlY3QuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1BhZ2VPdmVybGF5Lmg+Cisj
aW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNz
IFdlYkZyYW1lOworY2xhc3MgV2ViUGFnZTsKKworY2xhc3MgV2ViUGFnZU92ZXJsYXkgOiBwdWJs
aWMgQVBJOjpPYmplY3RJbXBsPEFQSTo6T2JqZWN0OjpUeXBlOjpCdW5kbGVQYWdlT3ZlcmxheT4s
IHByaXZhdGUgV2ViQ29yZTo6UGFnZU92ZXJsYXk6OkNsaWVudCB7CitwdWJsaWM6CisgICAgY2xh
c3MgQ2xpZW50IHsKKyAgICBwcm90ZWN0ZWQ6CisgICAgICAgIHZpcnR1YWwgfkNsaWVudCgpIHsg
fQorCisgICAgcHVibGljOgorICAgICAgICB2aXJ0dWFsIHZvaWQgcGFnZU92ZXJsYXlEZXN0cm95
ZWQoV2ViUGFnZU92ZXJsYXkqKSA9IDA7CisgICAgICAgIHZpcnR1YWwgdm9pZCB3aWxsTW92ZVRv
UGFnZShXZWJQYWdlT3ZlcmxheSosIFdlYlBhZ2UqKSA9IDA7CisgICAgICAgIHZpcnR1YWwgdm9p
ZCBkaWRNb3ZlVG9QYWdlKFdlYlBhZ2VPdmVybGF5KiwgV2ViUGFnZSopID0gMDsKKyAgICAgICAg
dmlydHVhbCB2b2lkIGRyYXdSZWN0KFdlYlBhZ2VPdmVybGF5KiwgV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0JiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgZGlydHlSZWN0KSA9IDA7CisgICAgICAg
IHZpcnR1YWwgYm9vbCBtb3VzZUV2ZW50KFdlYlBhZ2VPdmVybGF5KiwgY29uc3QgV2ViQ29yZTo6
UGxhdGZvcm1Nb3VzZUV2ZW50JikgPSAwOworICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkU2Nyb2xs
RnJhbWUoV2ViUGFnZU92ZXJsYXkqLCBXZWJGcmFtZSopIHsgfQorCisgICAgICAgIHZpcnR1YWwg
Ym9vbCBjb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVN0cmluZ1ZhbHVlRm9yUG9pbnQoV2ViUGFn
ZU92ZXJsYXkqLCBTdHJpbmcgLyogYXR0cmlidXRlICovLCBXZWJDb3JlOjpGbG9hdFBvaW50IC8q
IHBhcmFtZXRlciAqLywgU3RyaW5nJiB2YWx1ZSkgeyByZXR1cm4gZmFsc2U7IH0KKyAgICAgICAg
dmlydHVhbCBib29sIGNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlQm9vbFZhbHVlRm9yUG9pbnQo
V2ViUGFnZU92ZXJsYXkqLCBTdHJpbmcgLyogYXR0cmlidXRlICovLCBXZWJDb3JlOjpGbG9hdFBv
aW50IC8qIHBhcmFtZXRlciAqLywgYm9vbCYgdmFsdWUpIHsgcmV0dXJuIGZhbHNlOyB9CisgICAg
ICAgIHZpcnR1YWwgVmVjdG9yPFN0cmluZz4gY29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVOYW1l
cyhXZWJQYWdlT3ZlcmxheSosIGJvb2wgLyogcGFyYW1ldGVyaXplZE5hbWVzICovKSB7IHJldHVy
biBWZWN0b3I8U3RyaW5nPigpOyB9CisgICAgfTsKKworICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdl
YlBhZ2VPdmVybGF5PiBjcmVhdGUoQ2xpZW50KiwgV2ViQ29yZTo6UGFnZU92ZXJsYXk6Ok92ZXJs
YXlUeXBlID0gV2ViQ29yZTo6UGFnZU92ZXJsYXk6Ok92ZXJsYXlUeXBlOjpWaWV3KTsKKyAgICB2
aXJ0dWFsIH5XZWJQYWdlT3ZlcmxheSgpOworCisgICAgdm9pZCBzZXROZWVkc0Rpc3BsYXkoY29u
c3QgV2ViQ29yZTo6SW50UmVjdCYgZGlydHlSZWN0KTsKKyAgICB2b2lkIHNldE5lZWRzRGlzcGxh
eSgpOworCisgICAgdm9pZCBjbGVhcigpOworCisgICAgV2ViQ29yZTo6UGFnZU92ZXJsYXkqIGNv
cmVPdmVybGF5KCkgY29uc3QgeyByZXR1cm4gbV9vdmVybGF5LmdldCgpOyB9CisgICAgQ2xpZW50
KiBjbGllbnQoKSBjb25zdCB7IHJldHVybiBtX2NsaWVudDsgfQorCitwcml2YXRlOgorICAgIFdl
YlBhZ2VPdmVybGF5KENsaWVudCosIFdlYkNvcmU6OlBhZ2VPdmVybGF5OjpPdmVybGF5VHlwZSk7
CisKKyAgICAvLyBXZWJDb3JlOjpQYWdlT3ZlcmxheTo6Q2xpZW50CisgICAgdmlydHVhbCB2b2lk
IHBhZ2VPdmVybGF5RGVzdHJveWVkKFdlYkNvcmU6OlBhZ2VPdmVybGF5Kikgb3ZlcnJpZGU7Cisg
ICAgdmlydHVhbCB2b2lkIHdpbGxNb3ZlVG9QYWdlKFdlYkNvcmU6OlBhZ2VPdmVybGF5KiwgV2Vi
Q29yZTo6UGFnZSopIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBkaWRNb3ZlVG9QYWdlKFdl
YkNvcmU6OlBhZ2VPdmVybGF5KiwgV2ViQ29yZTo6UGFnZSopIG92ZXJyaWRlOworICAgIHZpcnR1
YWwgdm9pZCBkcmF3UmVjdChXZWJDb3JlOjpQYWdlT3ZlcmxheSosIFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dCYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGRpcnR5UmVjdCkgb3ZlcnJpZGU7Cisg
ICAgdmlydHVhbCBib29sIG1vdXNlRXZlbnQoV2ViQ29yZTo6UGFnZU92ZXJsYXkqLCBjb25zdCBX
ZWJDb3JlOjpQbGF0Zm9ybU1vdXNlRXZlbnQmKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQg
ZGlkU2Nyb2xsRnJhbWUoV2ViQ29yZTo6UGFnZU92ZXJsYXkqLCBXZWJDb3JlOjpGcmFtZSYpIG92
ZXJyaWRlOworCisgICAgdmlydHVhbCBib29sIGNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlU3Ry
aW5nVmFsdWVGb3JQb2ludChXZWJDb3JlOjpQYWdlT3ZlcmxheSosIFN0cmluZyAvKiBhdHRyaWJ1
dGUgKi8sIFdlYkNvcmU6OkZsb2F0UG9pbnQgLyogcGFyYW1ldGVyICovLCBTdHJpbmcmIHZhbHVl
KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wgY29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVC
b29sVmFsdWVGb3JQb2ludChXZWJDb3JlOjpQYWdlT3ZlcmxheSosIFN0cmluZyAvKiBhdHRyaWJ1
dGUgKi8sIFdlYkNvcmU6OkZsb2F0UG9pbnQgLyogcGFyYW1ldGVyICovLCBib29sJiB2YWx1ZSkg
b3ZlcnJpZGU7CisgICAgdmlydHVhbCBWZWN0b3I8U3RyaW5nPiBjb3B5QWNjZXNzaWJpbGl0eUF0
dHJpYnV0ZU5hbWVzKFdlYkNvcmU6OlBhZ2VPdmVybGF5KiwgYm9vbCAvKiBwYXJhbWV0ZXJpemVk
TmFtZXMgKi8pIG92ZXJyaWRlOworCisKKyAgICBSZWZQdHI8V2ViQ29yZTo6UGFnZU92ZXJsYXk+
IG1fb3ZlcmxheTsKKyAgICBDbGllbnQqIG1fY2xpZW50OworfTsKKworfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CisKKyNlbmRpZiAvLyBXZWJQYWdlT3ZlcmxheV9oCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL0ZpbmRJbmRpY2F0b3JPdmVybGF5Q2xpZW50
SU9TLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL0ZpbmRJbmRpY2F0
b3JPdmVybGF5Q2xpZW50SU9TLmgKaW5kZXggMzEwMTc2Ny4uZjJlOTc2MCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9GaW5kSW5kaWNhdG9yT3Zlcmxh
eUNsaWVudElPUy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9pb3Mv
RmluZEluZGljYXRvck92ZXJsYXlDbGllbnRJT1MuaApAQCAtNDQsNyArNDQsNyBAQCBwcml2YXRl
OgogICAgIHZpcnR1YWwgdm9pZCB3aWxsTW92ZVRvV2ViUGFnZShQYWdlT3ZlcmxheSosIFdlYlBh
Z2UqKSBvdmVycmlkZSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgZGlkTW92ZVRvV2ViUGFnZShQYWdl
T3ZlcmxheSosIFdlYlBhZ2UqKSBvdmVycmlkZSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgZHJhd1Jl
Y3QoUGFnZU92ZXJsYXkqLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmLCBjb25zdCBXZWJDb3Jl
OjpJbnRSZWN0JiBkaXJ0eVJlY3QpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgYm9vbCBtb3VzZUV2
ZW50KFBhZ2VPdmVybGF5KiwgY29uc3QgV2ViTW91c2VFdmVudCYpIG92ZXJyaWRlIHsgcmV0dXJu
IGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIG1vdXNlRXZlbnQoUGFnZU92ZXJsYXkqLCBjb25z
dCBXZWJDb3JlOjpQbGF0Zm9ybU1vdXNlRXZlbnQmKSBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsg
fQogCiAgICAgV2ViQ29yZTo6RnJhbWUmIG1fZnJhbWU7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9SZW1vdGVMYXllclRyZWVEcmF3aW5nQXJl
YS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9SZW1vdGVMYXllclRy
ZWVEcmF3aW5nQXJlYS5oCmluZGV4IDFjYjUxMDAuLmM1MmEzYmYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0Fy
ZWEuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1JlbW90ZUxh
eWVyVHJlZURyYXdpbmdBcmVhLmgKQEAgLTY3LDYgKzY3LDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0
dWFsIHZvaWQgc2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIoV2ViQ29yZTo6R3JhcGhpY3NMYXllciop
IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBzY2hlZHVsZUNvbXBvc2l0aW5nTGF5ZXJGbHVz
aCgpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBzY2hlZHVsZUNvbXBvc2l0aW5nTGF5ZXJG
bHVzaEltbWVkaWF0ZWx5KCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGF0dGFjaFZpZXdP
dmVybGF5R3JhcGhpY3NMYXllcihXZWJDb3JlOjpGcmFtZSosIFdlYkNvcmU6OkdyYXBoaWNzTGF5
ZXIqKSBvdmVycmlkZTsKIAogICAgIHZpcnR1YWwgdm9pZCBhZGRUcmFuc2FjdGlvbkNhbGxiYWNr
SUQodWludDY0X3QgY2FsbGJhY2tJRCkgb3ZlcnJpZGU7CiAKQEAgLTEwNyw2ICsxMDgsNyBAQCBw
cml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBhZGp1c3RMYXllckZsdXNoVGhyb3R0bGluZyhXZWJD
b3JlOjpMYXllckZsdXNoVGhyb3R0bGVTdGF0ZTo6RmxhZ3MpIG92ZXJyaWRlOwogCiAgICAgdm9p
ZCB1cGRhdGVTY3JvbGxlZEV4cG9zZWRSZWN0KCk7CisgICAgdm9pZCB1cGRhdGVSb290TGF5ZXJz
KCk7CiAKICAgICB2b2lkIGxheWVyRmx1c2hUaW1lckZpcmVkKFdlYkNvcmU6OlRpbWVyPFJlbW90
ZUxheWVyVHJlZURyYXdpbmdBcmVhPiopOwogICAgIHZvaWQgZmx1c2hMYXllcnMoKTsKQEAgLTE2
MCw2ICsxNjIsOSBAQCBwcml2YXRlOgogCiAgICAgdWludDY0X3QgbV9jdXJyZW50VHJhbnNhY3Rp
b25JRDsKICAgICBWZWN0b3I8UmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb246OlRyYW5zYWN0aW9u
Q2FsbGJhY2tJRD4gbV9wZW5kaW5nQ2FsbGJhY2tJRHM7CisKKyAgICBXZWJDb3JlOjpHcmFwaGlj
c0xheWVyKiBtX2NvbnRlbnRMYXllcjsKKyAgICBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiBtX3Zp
ZXdPdmVybGF5Um9vdExheWVyOwogfTsKIAogRFJBV0lOR19BUkVBX1RZUEVfQ0FTVFMoUmVtb3Rl
TGF5ZXJUcmVlRHJhd2luZ0FyZWEsIHR5cGUoKSA9PSBEcmF3aW5nQXJlYVR5cGVSZW1vdGVMYXll
clRyZWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21h
Yy9SZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYS5tbSBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9tYWMvUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWEubW0KaW5kZXggMzdjODk0
Ny4uMmVjMjk4YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L21hYy9SZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1JlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhLm1tCkBAIC00
MCw2ICs0MCw3IEBACiAjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lLmg+CiAjaW1wb3J0IDxXZWJDb3Jl
L0ZyYW1lVmlldy5oPgogI2ltcG9ydCA8V2ViQ29yZS9NYWluRnJhbWUuaD4KKyNpbXBvcnQgPFdl
YkNvcmUvUGFnZU92ZXJsYXlDb250cm9sbGVyLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1JlbmRlckxh
eWVyQ29tcG9zaXRvci5oPgogI2ltcG9ydCA8V2ViQ29yZS9SZW5kZXJWaWV3Lmg+CiAjaW1wb3J0
IDxXZWJDb3JlL1NldHRpbmdzLmg+CkBAIC0xMTMsMTUgKzExNCwzMSBAQCB2b2lkIFJlbW90ZUxh
eWVyVHJlZURyYXdpbmdBcmVhOjp3aWxsRGVzdHJveURpc3BsYXlSZWZyZXNoTW9uaXRvcihEaXNw
bGF5UmVmcmVzaAogICAgICAgICBtX2Rpc3BsYXlSZWZyZXNoTW9uaXRvcnNUb05vdGlmeS0+cmVt
b3ZlKHJlbW90ZU1vbml0b3IpOwogfQogCi12b2lkIFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVh
OjpzZXRSb290Q29tcG9zaXRpbmdMYXllcihHcmFwaGljc0xheWVyKiByb290TGF5ZXIpCit2b2lk
IFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhOjp1cGRhdGVSb290TGF5ZXJzKCkKIHsKICAgICBW
ZWN0b3I8R3JhcGhpY3NMYXllcio+IGNoaWxkcmVuOwotICAgIGlmIChyb290TGF5ZXIpIHsKLSAg
ICAgICAgY2hpbGRyZW4uYXBwZW5kKHJvb3RMYXllcik7Ci0gICAgICAgIGNoaWxkcmVuLmFwcGVu
ZChtX3dlYlBhZ2UucGFnZU92ZXJsYXlDb250cm9sbGVyKCkudmlld092ZXJsYXlSb290TGF5ZXIo
KSk7CisgICAgaWYgKG1fY29udGVudExheWVyKSB7CisgICAgICAgIGNoaWxkcmVuLmFwcGVuZCht
X2NvbnRlbnRMYXllcik7CisgICAgICAgIGlmIChtX3ZpZXdPdmVybGF5Um9vdExheWVyKQorICAg
ICAgICAgICAgY2hpbGRyZW4uYXBwZW5kKG1fdmlld092ZXJsYXlSb290TGF5ZXIpOwogICAgIH0K
KwogICAgIG1fcm9vdExheWVyLT5zZXRDaGlsZHJlbihjaGlsZHJlbik7Cit9CisKK3ZvaWQgUmVt
b3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWE6OmF0dGFjaFZpZXdPdmVybGF5R3JhcGhpY3NMYXllcihG
cmFtZSogZnJhbWUsIEdyYXBoaWNzTGF5ZXIqIHZpZXdPdmVybGF5Um9vdExheWVyKQoreworICAg
IGlmICghZnJhbWUtPmlzTWFpbkZyYW1lKCkpCisgICAgICAgIHJldHVybjsKIAorICAgIG1fdmll
d092ZXJsYXlSb290TGF5ZXIgPSB2aWV3T3ZlcmxheVJvb3RMYXllcjsKKyAgICB1cGRhdGVSb290
TGF5ZXJzKCk7Cit9CisKK3ZvaWQgUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWE6OnNldFJvb3RD
b21wb3NpdGluZ0xheWVyKEdyYXBoaWNzTGF5ZXIqIHJvb3RMYXllcikKK3sKKyAgICBtX2NvbnRl
bnRMYXllciA9IHJvb3RMYXllcjsKKyAgICB1cGRhdGVSb290TGF5ZXJzKCk7CiAgICAgc2NoZWR1
bGVDb21wb3NpdGluZ0xheWVyRmx1c2goKTsKIH0KIApAQCAtMjM0LDggKzI1MSw2IEBAIHZvaWQg
UmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWE6OnVwZGF0ZVNjcm9sbGVkRXhwb3NlZFJlY3QoKQog
I2VuZGlmCiAKICAgICBmcmFtZVZpZXctPnNldEV4cG9zZWRSZWN0KG1fc2Nyb2xsZWRFeHBvc2Vk
UmVjdCk7Ci0KLSAgICBtX3dlYlBhZ2UucGFnZU92ZXJsYXlDb250cm9sbGVyKCkuZGlkQ2hhbmdl
RXhwb3NlZFJlY3QoKTsKIH0KIAogVGlsZWRCYWNraW5nKiBSZW1vdGVMYXllclRyZWVEcmF3aW5n
QXJlYTo6bWFpbkZyYW1lVGlsZWRCYWNraW5nKCkgY29uc3QKQEAgLTMyMSw3ICszMzYsNyBAQCB2
b2lkIFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhOjpmbHVzaExheWVycygpCiAKICAgICBGbG9h
dFJlY3QgdmlzaWJsZVJlY3QoRmxvYXRQb2ludCgpLCBtX3ZpZXdTaXplKTsKICAgICB2aXNpYmxl
UmVjdC5pbnRlcnNlY3QobV9zY3JvbGxlZEV4cG9zZWRSZWN0KTsKLSAgICBtX3dlYlBhZ2UucGFn
ZU92ZXJsYXlDb250cm9sbGVyKCkuZmx1c2hQYWdlT3ZlcmxheUxheWVycyh2aXNpYmxlUmVjdCk7
CisKICAgICBtX3dlYlBhZ2UubWFpbkZyYW1lVmlldygpLT5mbHVzaENvbXBvc2l0aW5nU3RhdGVJ
bmNsdWRpbmdTdWJmcmFtZXMoKTsKICAgICBtX3Jvb3RMYXllci0+Zmx1c2hDb21wb3NpdGluZ1N0
YXRlRm9yVGhpc0xheWVyT25seSgpOwogCkBAIC00MTAsNyArNDI1LDYgQEAgdm9pZCBSZW1vdGVM
YXllclRyZWVEcmF3aW5nQXJlYTo6ZGlkVXBkYXRlKCkKIHZvaWQgUmVtb3RlTGF5ZXJUcmVlRHJh
d2luZ0FyZWE6Om1haW5GcmFtZUNvbnRlbnRTaXplQ2hhbmdlZChjb25zdCBJbnRTaXplJiBjb250
ZW50c1NpemUpCiB7CiAgICAgbV9yb290TGF5ZXItPnNldFNpemUoY29udGVudHNTaXplKTsKLSAg
ICBtX3dlYlBhZ2UucGFnZU92ZXJsYXlDb250cm9sbGVyKCkuZGlkQ2hhbmdlRG9jdW1lbnRTaXpl
KCk7CiB9CiAKIGJvb2wgUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWE6Om1hcmtMYXllcnNWb2xh
dGlsZUltbWVkaWF0ZWx5SWZQb3NzaWJsZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1NlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIubW0gYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1NlcnZpY2VzT3ZlcmxheUNvbnRyb2xs
ZXIubW0KaW5kZXggZmI2OGI3YS4uMDZlNWExYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9TZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyLm1tCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvU2VydmljZXNPdmVybGF5Q29u
dHJvbGxlci5tbQpAQCAtNDIsNiArNDIsNyBAQAogI2ltcG9ydCA8V2ViQ29yZS9HcmFwaGljc0xh
eWVyLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0dyYXBoaWNzTGF5ZXJDQS5oPgogI2ltcG9ydCA8V2Vi
Q29yZS9NYWluRnJhbWUuaD4KKyNpbXBvcnQgPFdlYkNvcmUvUGFnZU92ZXJsYXlDb250cm9sbGVy
Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL1BsYXRmb3JtQ0FBbmltYXRpb25NYWMuaD4KICNpbXBvcnQg
PFdlYkNvcmUvU29mdExpbmtpbmcuaD4KIApAQCAtMjMyLDE2ICsyMzMsMTYgQEAgdm9pZCBTZXJ2
aWNlc092ZXJsYXlDb250cm9sbGVyOjpwYWdlT3ZlcmxheURlc3Ryb3llZChQYWdlT3ZlcmxheSop
CiAgICAgQVNTRVJUKCFtX3NlcnZpY2VzT3ZlcmxheSk7CiB9CiAKLXZvaWQgU2VydmljZXNPdmVy
bGF5Q29udHJvbGxlcjo6d2lsbE1vdmVUb1dlYlBhZ2UoUGFnZU92ZXJsYXkqLCBXZWJQYWdlKiB3
ZWJQYWdlKQordm9pZCBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjp3aWxsTW92ZVRvUGFnZShQ
YWdlT3ZlcmxheSosIFBhZ2UqIHBhZ2UpCiB7Ci0gICAgaWYgKHdlYlBhZ2UpCisgICAgaWYgKHBh
Z2UpCiAgICAgICAgIHJldHVybjsKIAogICAgIEFTU0VSVChtX3NlcnZpY2VzT3ZlcmxheSk7CiAg
ICAgbV9zZXJ2aWNlc092ZXJsYXkgPSBudWxscHRyOwogfQogCi12b2lkIFNlcnZpY2VzT3Zlcmxh
eUNvbnRyb2xsZXI6OmRpZE1vdmVUb1dlYlBhZ2UoUGFnZU92ZXJsYXkqLCBXZWJQYWdlKikKK3Zv
aWQgU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6ZGlkTW92ZVRvUGFnZShQYWdlT3ZlcmxheSos
IFBhZ2UqKQogewogfQogCkBAIC01ODMsNyArNTg0LDcgQEAgdm9pZCBTZXJ2aWNlc092ZXJsYXlD
b250cm9sbGVyOjpkaWRSZWJ1aWxkUG90ZW50aWFsSGlnaGxpZ2h0cygpCiB7CiAgICAgaWYgKG1f
cG90ZW50aWFsSGlnaGxpZ2h0cy5pc0VtcHR5KCkpIHsKICAgICAgICAgaWYgKG1fc2VydmljZXNP
dmVybGF5KQotICAgICAgICAgICAgbV93ZWJQYWdlLnVuaW5zdGFsbFBhZ2VPdmVybGF5KG1fc2Vy
dmljZXNPdmVybGF5KTsKKyAgICAgICAgICAgIG1fd2ViUGFnZS5jb3JlUGFnZSgpLT5wYWdlT3Zl
cmxheUNvbnRyb2xsZXIoKS51bmluc3RhbGxQYWdlT3ZlcmxheShtX3NlcnZpY2VzT3ZlcmxheSwg
UGFnZU92ZXJsYXk6OkZhZGVNb2RlOjpEb05vdEZhZGUpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogCkBAIC02MDMsNyArNjA0LDcgQEAgdm9pZCBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpj
cmVhdGVPdmVybGF5SWZOZWVkZWQoKQogCiAgICAgUmVmUHRyPFBhZ2VPdmVybGF5PiBvdmVybGF5
ID0gUGFnZU92ZXJsYXk6OmNyZWF0ZSh0aGlzLCBQYWdlT3ZlcmxheTo6T3ZlcmxheVR5cGU6OkRv
Y3VtZW50KTsKICAgICBtX3NlcnZpY2VzT3ZlcmxheSA9IG92ZXJsYXkuZ2V0KCk7Ci0gICAgbV93
ZWJQYWdlLmluc3RhbGxQYWdlT3ZlcmxheShvdmVybGF5LnJlbGVhc2UoKSwgUGFnZU92ZXJsYXk6
OkZhZGVNb2RlOjpEb05vdEZhZGUpOworICAgIG1fd2ViUGFnZS5jb3JlUGFnZSgpLT5wYWdlT3Zl
cmxheUNvbnRyb2xsZXIoKS5pbnN0YWxsUGFnZU92ZXJsYXkob3ZlcmxheS5yZWxlYXNlKCksIFBh
Z2VPdmVybGF5OjpGYWRlTW9kZTo6RG9Ob3RGYWRlKTsKIH0KIAogVmVjdG9yPFJlZlB0cjxSYW5n
ZT4+IFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OnRlbGVwaG9uZU51bWJlclJhbmdlc0ZvckZv
Y3VzZWRGcmFtZSgpCkBAIC03MjMsNyArNzI0LDcgQEAgdm9pZCBTZXJ2aWNlc092ZXJsYXlDb250
cm9sbGVyOjpkZXRlcm1pbmVBY3RpdmVIaWdobGlnaHQoYm9vbCYgbW91c2VJc092ZXJBY3RpdmUK
ICAgICB9CiB9CiAKLWJvb2wgU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6bW91c2VFdmVudChQ
YWdlT3ZlcmxheSosIGNvbnN0IFdlYk1vdXNlRXZlbnQmIGV2ZW50KQorYm9vbCBTZXJ2aWNlc092
ZXJsYXlDb250cm9sbGVyOjptb3VzZUV2ZW50KFBhZ2VPdmVybGF5KiwgY29uc3QgUGxhdGZvcm1N
b3VzZUV2ZW50JiBldmVudCkKIHsKICAgICBtX21vdXNlUG9zaXRpb24gPSBtX3dlYlBhZ2UuY29y
ZVBhZ2UoKS0+bWFpbkZyYW1lKCkudmlldygpLT5yb290Vmlld1RvQ29udGVudHMoZXZlbnQucG9z
aXRpb24oKSk7CiAKQEAgLTczMSwxMyArNzMyLDEzIEBAIGJvb2wgU2VydmljZXNPdmVybGF5Q29u
dHJvbGxlcjo6bW91c2VFdmVudChQYWdlT3ZlcmxheSosIGNvbnN0IFdlYk1vdXNlRXZlbnQmIGV2
CiAgICAgZGV0ZXJtaW5lQWN0aXZlSGlnaGxpZ2h0KG1vdXNlSXNPdmVyQWN0aXZlSGlnaGxpZ2h0
QnV0dG9uKTsKIAogICAgIC8vIENhbmNlbCB0aGUgcG90ZW50aWFsIGNsaWNrIGlmIGFueSBidXR0
b24gb3RoZXIgdGhhbiB0aGUgbGVmdCBidXR0b24gY2hhbmdlcyBzdGF0ZSwgYW5kIGlnbm9yZSB0
aGUgZXZlbnQuCi0gICAgaWYgKGV2ZW50LmJ1dHRvbigpICE9IFdlYk1vdXNlRXZlbnQ6OkxlZnRC
dXR0b24pIHsKKyAgICBpZiAoZXZlbnQuYnV0dG9uKCkgIT0gTW91c2VCdXR0b246OkxlZnRCdXR0
b24pIHsKICAgICAgICAgbV9jdXJyZW50TW91c2VEb3duT25CdXR0b25IaWdobGlnaHQgPSBudWxs
cHRyOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAgLy8gSWYgdGhlIG1vdXNl
IGxpZnRlZCB3aGlsZSBzdGlsbCBvdmVyIHRoZSBoaWdobGlnaHQgYnV0dG9uIHRoYXQgaXQgd2Vu
dCBkb3duIG9uLCB0aGVuIHRoYXQgaXMgYSBjbGljay4KLSAgICBpZiAoZXZlbnQudHlwZSgpID09
IFdlYkV2ZW50OjpNb3VzZVVwKSB7CisgICAgaWYgKGV2ZW50LnR5cGUoKSA9PSBQbGF0Zm9ybUV2
ZW50OjpNb3VzZVJlbGVhc2VkKSB7CiAgICAgICAgIFJlZlB0cjxIaWdobGlnaHQ+IG1vdXNlRG93
bkhpZ2hsaWdodCA9IG1fY3VycmVudE1vdXNlRG93bk9uQnV0dG9uSGlnaGxpZ2h0OwogICAgICAg
ICBtX2N1cnJlbnRNb3VzZURvd25PbkJ1dHRvbkhpZ2hsaWdodCA9IG51bGxwdHI7CiAKQEAgLTc1
Miw3ICs3NTMsNyBAQCBib29sIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6Om1vdXNlRXZlbnQo
UGFnZU92ZXJsYXkqLCBjb25zdCBXZWJNb3VzZUV2ZW50JiBldgogICAgIH0KIAogICAgIC8vIElm
IHRoZSBtb3VzZSBtb3ZlZCBvdXRzaWRlIG9mIHRoZSBidXR0b24gdHJhY2tpbmcgYSBwb3RlbnRp
YWwgY2xpY2ssIHN0b3AgdHJhY2tpbmcgdGhlIGNsaWNrLgotICAgIGlmIChldmVudC50eXBlKCkg
PT0gV2ViRXZlbnQ6Ok1vdXNlTW92ZSkgeworICAgIGlmIChldmVudC50eXBlKCkgPT0gUGxhdGZv
cm1FdmVudDo6TW91c2VNb3ZlZCkgewogICAgICAgICBpZiAobV9jdXJyZW50TW91c2VEb3duT25C
dXR0b25IaWdobGlnaHQgJiYgbW91c2VJc092ZXJBY3RpdmVIaWdobGlnaHRCdXR0b24pCiAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKIApAQCAtNzYxLDcgKzc2Miw3IEBAIGJvb2wgU2VydmljZXNP
dmVybGF5Q29udHJvbGxlcjo6bW91c2VFdmVudChQYWdlT3ZlcmxheSosIGNvbnN0IFdlYk1vdXNl
RXZlbnQmIGV2CiAgICAgfQogCiAgICAgLy8gSWYgdGhlIG1vdXNlIHdlbnQgZG93biBvdmVyIHRo
ZSBhY3RpdmUgaGlnaGxpZ2h0J3MgYnV0dG9uLCB0cmFjayB0aGlzIGFzIGEgcG90ZW50aWFsIGNs
aWNrLgotICAgIGlmIChldmVudC50eXBlKCkgPT0gV2ViRXZlbnQ6Ok1vdXNlRG93bikgeworICAg
IGlmIChldmVudC50eXBlKCkgPT0gUGxhdGZvcm1FdmVudDo6TW91c2VQcmVzc2VkKSB7CiAgICAg
ICAgIGlmIChtX2FjdGl2ZUhpZ2hsaWdodCAmJiBtb3VzZUlzT3ZlckFjdGl2ZUhpZ2hsaWdodEJ1
dHRvbikgewogICAgICAgICAgICAgbV9jdXJyZW50TW91c2VEb3duT25CdXR0b25IaWdobGlnaHQg
PSBtX2FjdGl2ZUhpZ2hsaWdodDsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtNzczLDkg
Kzc3NCw5IEBAIGJvb2wgU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6bW91c2VFdmVudChQYWdl
T3ZlcmxheSosIGNvbnN0IFdlYk1vdXNlRXZlbnQmIGV2CiAgICAgcmV0dXJuIGZhbHNlOwogfQog
Ci12b2lkIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OmRpZFNjcm9sbEZyYW1lKFBhZ2VPdmVy
bGF5KiwgRnJhbWUqIGZyYW1lKQordm9pZCBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpkaWRT
Y3JvbGxGcmFtZShQYWdlT3ZlcmxheSosIEZyYW1lJiBmcmFtZSkKIHsKLSAgICBpZiAoZnJhbWUt
PmlzTWFpbkZyYW1lKCkpCisgICAgaWYgKGZyYW1lLmlzTWFpbkZyYW1lKCkpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIGJ1aWxkUGhvbmVOdW1iZXJIaWdobGlnaHRzKCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1RpbGVkQ29yZUFuaW1hdGlvbkRy
YXdpbmdBcmVhLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1RpbGVk
Q29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhLmgKaW5kZXggYjgxYTRhNC4uOWU1YWJkYSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9UaWxlZENvcmVBbmlt
YXRpb25EcmF3aW5nQXJlYS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9tYWMvVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWEuaApAQCAtODQsNiArODQsOCBAQCBw
cml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCB2aWV3U3RhdGVEaWRDaGFuZ2UoV2ViQ29yZTo6Vmll
d1N0YXRlOjpGbGFncyBjaGFuZ2VkLCBib29sIHdhbnRzRGlkVXBkYXRlVmlld1N0YXRlKSBvdmVy
cmlkZTsKICAgICB2b2lkIGRpZFVwZGF0ZVZpZXdTdGF0ZVRpbWVyRmlyZWQoKTsKIAorICAgIHZp
cnR1YWwgdm9pZCBhdHRhY2hWaWV3T3ZlcmxheUdyYXBoaWNzTGF5ZXIoV2ViQ29yZTo6RnJhbWUq
LCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKikgb3ZlcnJpZGU7CisKICAgICAvLyBXZWJDb3JlOjpM
YXllckZsdXNoU2NoZWR1bGVyQ2xpZW50CiAgICAgdmlydHVhbCBib29sIGZsdXNoTGF5ZXJzKCkg
b3ZlcnJpZGU7CiAKQEAgLTEwNiw2ICsxMDgsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgdXBkYXRl
TGF5ZXJIb3N0aW5nQ29udGV4dCgpOwogCiAgICAgdm9pZCBzZXRSb290Q29tcG9zaXRpbmdMYXll
cihDQUxheWVyICopOworICAgIHZvaWQgdXBkYXRlUm9vdExheWVycygpOwogCiAgICAgV2ViQ29y
ZTo6VGlsZWRCYWNraW5nKiBtYWluRnJhbWVUaWxlZEJhY2tpbmcoKSBjb25zdDsKICAgICB2b2lk
IHVwZGF0ZURlYnVnSW5mb0xheWVyKGJvb2wgc2hvd0xheWVyKTsKQEAgLTEzOCw2ICsxNDEsOCBA
QCBwcml2YXRlOgogICAgIFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4IG1fdHJhbnNmb3Jt
OwogCiAgICAgUnVuTG9vcDo6VGltZXI8VGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWE+IG1f
c2VuZERpZFVwZGF0ZVZpZXdTdGF0ZVRpbWVyOworCisgICAgV2ViQ29yZTo6R3JhcGhpY3NMYXll
ciogbV92aWV3T3ZlcmxheVJvb3RMYXllcjsKIH07CiAKIERSQVdJTkdfQVJFQV9UWVBFX0NBU1RT
KFRpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhLCB0eXBlKCkgPT0gRHJhd2luZ0FyZWFUeXBl
VGlsZWRDb3JlQW5pbWF0aW9uKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9tYWMvVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWEubW0gYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1RpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdB
cmVhLm1tCmluZGV4IGU3NzU5MTkuLjg5ZDI1ZjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWEubW0K
KysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9UaWxlZENvcmVBbmlt
YXRpb25EcmF3aW5nQXJlYS5tbQpAQCAtNDQsNiArNDQsNyBAQAogI2ltcG9ydCA8V2ViQ29yZS9H
cmFwaGljc0xheWVyQ0EuaD4KICNpbXBvcnQgPFdlYkNvcmUvTWFpbkZyYW1lLmg+CiAjaW1wb3J0
IDxXZWJDb3JlL1BhZ2UuaD4KKyNpbXBvcnQgPFdlYkNvcmUvUGFnZU92ZXJsYXlDb250cm9sbGVy
Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL1BsYXRmb3JtQ0FBbmltYXRpb25NYWMuaD4KICNpbXBvcnQg
PFdlYkNvcmUvUmVuZGVyTGF5ZXJCYWNraW5nLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1JlbmRlckxh
eWVyQ29tcG9zaXRvci5oPgpAQCAtNzYsNiArNzcsNyBAQCBUaWxlZENvcmVBbmltYXRpb25EcmF3
aW5nQXJlYTo6VGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWEoV2ViUGFnZSYgd2ViUGFnZSwg
YwogICAgICwgbV9zY3JvbGxlZEV4cG9zZWRSZWN0KEZsb2F0UmVjdDo6aW5maW5pdGVSZWN0KCkp
CiAgICAgLCBtX3RyYW5zaWVudFpvb21TY2FsZSgxKQogICAgICwgbV9zZW5kRGlkVXBkYXRlVmll
d1N0YXRlVGltZXIoUnVuTG9vcDo6bWFpbigpLCB0aGlzLCAmVGlsZWRDb3JlQW5pbWF0aW9uRHJh
d2luZ0FyZWE6OmRpZFVwZGF0ZVZpZXdTdGF0ZVRpbWVyRmlyZWQpCisgICAgLCBtX3ZpZXdPdmVy
bGF5Um9vdExheWVyKG51bGxwdHIpCiB7CiAgICAgbV93ZWJQYWdlLmNvcmVQYWdlKCktPnNldHRp
bmdzKCkuc2V0Rm9yY2VDb21wb3NpdGluZ01vZGUodHJ1ZSk7CiAKQEAgLTg0LDYgKzg2LDggQEAg
VGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWE6OlRpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdB
cmVhKFdlYlBhZ2UmIHdlYlBhZ2UsIGMKICAgICBbbV9ob3N0aW5nTGF5ZXIgc2V0T3BhcXVlOllF
U107CiAgICAgW21faG9zdGluZ0xheWVyIHNldEdlb21ldHJ5RmxpcHBlZDpZRVNdOwogCisgICAg
W21faG9zdGluZ0xheWVyIHNldE5hbWU6QCJUQ0FEQSBST09UIl07CisKICAgICB1cGRhdGVMYXll
ckhvc3RpbmdDb250ZXh0KCk7CiAgICAgc2V0Q29sb3JTcGFjZShwYXJhbWV0ZXJzLmNvbG9yU3Bh
Y2UpOwogCkBAIC0yMDQsOSArMjA4LDI4IEBAIHZvaWQgVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2lu
Z0FyZWE6OnVwZGF0ZVByZWZlcmVuY2VzKGNvbnN0IFdlYlByZWZlcmVuY2VzU3RvcmUmCiAgICAg
dXBkYXRlRGVidWdJbmZvTGF5ZXIoc2hvd1RpbGVkU2Nyb2xsaW5nSW5kaWNhdG9yKTsKIH0KIAor
dm9pZCBUaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYTo6dXBkYXRlUm9vdExheWVycygpCit7
CisgICAgaWYgKCFtX3Jvb3RMYXllcikgeworICAgICAgICBbbV9ob3N0aW5nTGF5ZXIgc2V0U3Vi
bGF5ZXJzOkBbIF1dOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgW21faG9zdGluZ0xh
eWVyIHNldFN1YmxheWVyczptX3ZpZXdPdmVybGF5Um9vdExheWVyID8gQFsgbV9yb290TGF5ZXIu
Z2V0KCksIG1fdmlld092ZXJsYXlSb290TGF5ZXItPnBsYXRmb3JtTGF5ZXIoKSBdIDogQFsgbV9y
b290TGF5ZXIuZ2V0KCkgXV07Cit9CisKK3ZvaWQgVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0Fy
ZWE6OmF0dGFjaFZpZXdPdmVybGF5R3JhcGhpY3NMYXllcihGcmFtZSogZnJhbWUsIEdyYXBoaWNz
TGF5ZXIqIHZpZXdPdmVybGF5Um9vdExheWVyKQoreworICAgIGlmICghZnJhbWUtPmlzTWFpbkZy
YW1lKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fdmlld092ZXJsYXlSb290TGF5ZXIgPSB2
aWV3T3ZlcmxheVJvb3RMYXllcjsKKyAgICB1cGRhdGVSb290TGF5ZXJzKCk7Cit9CisKIHZvaWQg
VGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWE6Om1haW5GcmFtZUNvbnRlbnRTaXplQ2hhbmdl
ZChjb25zdCBJbnRTaXplJiBzaXplKQogewotICAgIG1fd2ViUGFnZS5wYWdlT3ZlcmxheUNvbnRy
b2xsZXIoKS5kaWRDaGFuZ2VEb2N1bWVudFNpemUoKTsKKwogfQogCiB2b2lkIFRpbGVkQ29yZUFu
aW1hdGlvbkRyYXdpbmdBcmVhOjp1cGRhdGVJbnRyaW5zaWNDb250ZW50U2l6ZUlmTmVlZGVkKCkK
QEAgLTI4Myw3ICszMDYsOSBAQCBib29sIFRpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhOjpm
bHVzaExheWVycygpCiAKICAgICBGbG9hdFJlY3QgdmlzaWJsZVJlY3QgPSBbbV9ob3N0aW5nTGF5
ZXIgZnJhbWVdOwogICAgIHZpc2libGVSZWN0LmludGVyc2VjdChtX3Njcm9sbGVkRXhwb3NlZFJl
Y3QpOwotICAgIG1fd2ViUGFnZS5wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKS5mbHVzaFBhZ2VPdmVy
bGF5TGF5ZXJzKHZpc2libGVSZWN0KTsKKworICAgIC8vIEJlY2F1c2Ugb3VyIHZpZXctcmVsYXRp
dmUgb3ZlcmxheSByb290IGxheWVyIGlzIG5vdCBhdHRhY2hlZCB0byB0aGUgbWFpbiBHcmFwaGlj
c0xheWVyIHRyZWUsIHdlIG5lZWQgdG8gZmx1c2ggaXQgbWFudWFsbHkuCisgICAgbV93ZWJQYWdl
LmNvcmVQYWdlKCktPnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLnZpZXdPdmVybGF5Um9vdExheWVy
KCktPmZsdXNoQ29tcG9zaXRpbmdTdGF0ZSh2aXNpYmxlUmVjdCk7CiAKICAgICBib29sIHJldHVy
blZhbHVlID0gbV93ZWJQYWdlLm1haW5GcmFtZVZpZXcoKS0+Zmx1c2hDb21wb3NpdGluZ1N0YXRl
SW5jbHVkaW5nU3ViZnJhbWVzKCk7CiAjaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykKQEAgLTM2
Myw4ICszODgsNiBAQCB2b2lkIFRpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhOjp1cGRhdGVT
Y3JvbGxlZEV4cG9zZWRSZWN0KCkKICNlbmRpZgogCiAgICAgZnJhbWVWaWV3LT5zZXRFeHBvc2Vk
UmVjdChtX3Njcm9sbGVkRXhwb3NlZFJlY3QpOwotCi0gICAgbV93ZWJQYWdlLnBhZ2VPdmVybGF5
Q29udHJvbGxlcigpLmRpZENoYW5nZUV4cG9zZWRSZWN0KCk7CiB9CiAKIHZvaWQgVGlsZWRDb3Jl
QW5pbWF0aW9uRHJhd2luZ0FyZWE6OnVwZGF0ZUdlb21ldHJ5KGNvbnN0IEludFNpemUmIHZpZXdT
aXplLCBjb25zdCBJbnRTaXplJiBsYXllclBvc2l0aW9uKQpAQCAtNDY0LDEyICs0ODcsMTIgQEAg
dm9pZCBUaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYTo6c2V0Um9vdENvbXBvc2l0aW5nTGF5
ZXIoQ0FMYXllciAqbGF5ZXIpCiAgICAgW0NBVHJhbnNhY3Rpb24gYmVnaW5dOwogICAgIFtDQVRy
YW5zYWN0aW9uIHNldERpc2FibGVBY3Rpb25zOllFU107CiAKLSAgICBbbV9ob3N0aW5nTGF5ZXIg
c2V0U3VibGF5ZXJzOmxheWVyID8gQFsgbGF5ZXIsIG1fd2ViUGFnZS5wYWdlT3ZlcmxheUNvbnRy
b2xsZXIoKS52aWV3T3ZlcmxheVJvb3RMYXllcigpLT5wbGF0Zm9ybUxheWVyKCkgXSA6IEBbIF1d
OwotCiAgICAgYm9vbCBoYWRSb290TGF5ZXIgPSAhIW1fcm9vdExheWVyOwogICAgIG1fcm9vdExh
eWVyID0gbGF5ZXI7CiAgICAgW21fcm9vdExheWVyIHNldFN1YmxheWVyVHJhbnNmb3JtOm1fdHJh
bnNmb3JtXTsKIAorICAgIHVwZGF0ZVJvb3RMYXllcnMoKTsKKwogICAgIGlmIChoYWRSb290TGF5
ZXIgIT0gISFsYXllcikKICAgICAgICAgbV9sYXllckhvc3RpbmdDb250ZXh0LT5zZXRSb290TGF5
ZXIobGF5ZXIgPyBtX2hvc3RpbmdMYXllci5nZXQoKSA6IDApOwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dLQWNjZXNzaWJpbGl0eVdlYlBhZ2VP
YmplY3RNYWMubW0gYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dLQWNj
ZXNzaWJpbGl0eVdlYlBhZ2VPYmplY3RNYWMubW0KaW5kZXggMzgzMzliYS4uNTRkZDQ0NCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XS0FjY2Vzc2li
aWxpdHlXZWJQYWdlT2JqZWN0TWFjLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9tYWMvV0tBY2Nlc3NpYmlsaXR5V2ViUGFnZU9iamVjdE1hYy5tbQpAQCAtNDAsNiAr
NDAsNyBAQAogI2ltcG9ydCA8V2ViQ29yZS9GcmFtZVZpZXcuaD4KICNpbXBvcnQgPFdlYkNvcmUv
TWFpbkZyYW1lLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1BhZ2UuaD4KKyNpbXBvcnQgPFdlYkNvcmUv
UGFnZU92ZXJsYXlDb250cm9sbGVyLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1Njcm9sbFZpZXcuaD4K
ICNpbXBvcnQgPFdlYkNvcmUvU2Nyb2xsYmFyLmg+CiAjaW1wb3J0IDxXZWJLaXRTeXN0ZW1JbnRl
cmZhY2UuaD4KQEAgLTc1LDE5ICs3NiwxMyBAQCB1c2luZyBuYW1lc3BhY2UgV2ViS2l0OwogCiAt
IChOU0FycmF5ICopYWNjZXNzaWJpbGl0eVBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVOYW1lcwogewot
ICAgIFdLUmV0YWluUHRyPFdLQXJyYXlSZWY+IHJlc3VsdCA9IGFkb3B0V0sobV9wYWdlLT5wYWdl
T3ZlcmxheUNvbnRyb2xsZXIoKS5jb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZXNOYW1lcyh0cnVl
KSk7Ci0gICAgaWYgKCFyZXN1bHQpCisgICAgVmVjdG9yPFN0cmluZz4gcmVzdWx0ID0gbV9wYWdl
LT5jb3JlUGFnZSgpLT5wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKS5jb3B5QWNjZXNzaWJpbGl0eUF0
dHJpYnV0ZXNOYW1lcyh0cnVlKTsKKyAgICBpZiAocmVzdWx0LmlzRW1wdHkoKSkKICAgICAgICAg
cmV0dXJuIG5pbDsKICAgICAKICAgICBOU011dGFibGVBcnJheSAqbmFtZXMgPSBbTlNNdXRhYmxl
QXJyYXkgYXJyYXldOwotICAgIHNpemVfdCBjb3VudCA9IFdLQXJyYXlHZXRTaXplKHJlc3VsdC5n
ZXQoKSk7Ci0gICAgZm9yIChzaXplX3QgayA9IDA7IGsgPCBjb3VudDsgaysrKSB7Ci0gICAgICAg
IFdLVHlwZVJlZiBpdGVtID0gV0tBcnJheUdldEl0ZW1BdEluZGV4KHJlc3VsdC5nZXQoKSwgayk7
Ci0gICAgICAgIGlmICh0b0ltcGwoaXRlbSktPnR5cGUoKSA9PSBBUEk6OlN0cmluZzo6QVBJVHlw
ZSkgewotICAgICAgICAgICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBuYW1lID0gYWRvcHRDRihX
S1N0cmluZ0NvcHlDRlN0cmluZyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAoV0tTdHJpbmdSZWYpaXRl
bSkpOwotICAgICAgICAgICAgW25hbWVzIGFkZE9iamVjdDooTlNTdHJpbmcgKiluYW1lLmdldCgp
XTsKLSAgICAgICAgfQotICAgIH0KKyAgICBmb3IgKGF1dG8mIG5hbWUgOiByZXN1bHQpCisgICAg
ICAgIFtuYW1lcyBhZGRPYmplY3Q6KE5TU3RyaW5nICopbmFtZV07CiAgICAgCiAgICAgcmV0dXJu
IG5hbWVzOwogfQpAQCAtMTY0LDIzICsxNTksMjYgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsK
IAogLSAoaWQpYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlOihOU1N0cmluZyAqKWF0dHJpYnV0
ZSBmb3JQYXJhbWV0ZXI6KGlkKXBhcmFtZXRlcgogewotICAgIFdLUmV0YWluUHRyPFdLVHlwZVJl
Zj4gcGFnZU92ZXJsYXlQYXJhbWV0ZXIgPSAwOwotICAgIAotICAgIGlmIChbcGFyYW1ldGVyIGlz
S2luZE9mQ2xhc3M6W05TVmFsdWUgY2xhc3NdXSAmJiBzdHJjbXAoWyhOU1ZhbHVlKilwYXJhbWV0
ZXIgb2JqQ1R5cGVdLCBAZW5jb2RlKE5TUG9pbnQpKSA9PSAwKSB7Ci0gICAgICAgIE5TUG9pbnQg
cG9pbnQgPSBbc2VsZiBjb252ZXJ0U2NyZWVuUG9pbnRUb1Jvb3RWaWV3OlsoTlNWYWx1ZSAqKXBh
cmFtZXRlciBwb2ludFZhbHVlXV07Ci0gICAgICAgIHBhZ2VPdmVybGF5UGFyYW1ldGVyID0gV0tQ
b2ludENyZWF0ZShXS1BvaW50TWFrZShwb2ludC54LCBwb2ludC55KSk7Ci0gICAgfQotICAgIAot
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBhdHRyaWJ1dGVSZWYgPSBhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aENGU3RyaW5nKChDRlN0cmluZ1JlZilhdHRyaWJ1dGUpKTsKLSAgICBXS1Jl
dGFpblB0cjxXS1R5cGVSZWY+IHJlc3VsdCA9IGFkb3B0V0sobV9wYWdlLT5wYWdlT3ZlcmxheUNv
bnRyb2xsZXIoKS5jb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlKGF0dHJpYnV0ZVJlZi5n
ZXQoKSwgcGFnZU92ZXJsYXlQYXJhbWV0ZXIuZ2V0KCkpKTsKLSAgICBpZiAoIXJlc3VsdCkKKyAg
ICBXZWJDb3JlOjpGbG9hdFBvaW50IHBhZ2VPdmVybGF5UG9pbnQ7CisgICAgaWYgKFtwYXJhbWV0
ZXIgaXNLaW5kT2ZDbGFzczpbTlNWYWx1ZSBjbGFzc11dICYmICFzdHJjbXAoWyhOU1ZhbHVlICop
cGFyYW1ldGVyIG9iakNUeXBlXSwgQGVuY29kZShOU1BvaW50KSkpCisgICAgICAgIHBhZ2VPdmVy
bGF5UG9pbnQgPSBbc2VsZiBjb252ZXJ0U2NyZWVuUG9pbnRUb1Jvb3RWaWV3OlsoTlNWYWx1ZSAq
KXBhcmFtZXRlciBwb2ludFZhbHVlXV07CisgICAgZWxzZQogICAgICAgICByZXR1cm4gbmlsOwot
ICAgIAotICAgIGlmICh0b0ltcGwocmVzdWx0LmdldCgpKS0+dHlwZSgpID09IEFQSTo6U3RyaW5n
OjpBUElUeXBlKQotICAgICAgICByZXR1cm4gQ0ZCcmlkZ2luZ1JlbGVhc2UoV0tTdHJpbmdDb3B5
Q0ZTdHJpbmcoa0NGQWxsb2NhdG9yRGVmYXVsdCwgKFdLU3RyaW5nUmVmKXJlc3VsdC5nZXQoKSkp
OwotICAgIGlmICh0b0ltcGwocmVzdWx0LmdldCgpKS0+dHlwZSgpID09IEFQSTo6Qm9vbGVhbjo6
QVBJVHlwZSkKLSAgICAgICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRoQm9vbDpXS0Jvb2xl
YW5HZXRWYWx1ZShzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KHJlc3VsdC5nZXQoKSkpXTsKLSAg
ICAKKworICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpAIkFYRGF0YURldGVjdG9y
RXhpc3RzQXRQb2ludCJdIHx8IFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOkAiQVhEaWRTaG93
RGF0YURldGVjdG9yTWVudUF0UG9pbnQiXSkgeworICAgICAgICBib29sIHZhbHVlOworICAgICAg
ICBpZiAoIW1fcGFnZS0+Y29yZVBhZ2UoKS0+cGFnZU92ZXJsYXlDb250cm9sbGVyKCkuY29weUFj
Y2Vzc2liaWxpdHlBdHRyaWJ1dGVCb29sVmFsdWVGb3JQb2ludChhdHRyaWJ1dGUsIHBhZ2VPdmVy
bGF5UG9pbnQsIHZhbHVlKSkKKyAgICAgICAgICAgIHJldHVybiBuaWw7CisgICAgICAgIHJldHVy
biBbTlNOdW1iZXIgbnVtYmVyV2l0aEJvb2w6dmFsdWVdOworICAgIH0KKworICAgIGlmIChbYXR0
cmlidXRlIGlzRXF1YWxUb1N0cmluZzpAIkFYRGF0YURldGVjdG9yVHlwZUF0UG9pbnQiXSkgewor
ICAgICAgICBTdHJpbmcgdmFsdWU7CisgICAgICAgIGlmICghbV9wYWdlLT5jb3JlUGFnZSgpLT5w
YWdlT3ZlcmxheUNvbnRyb2xsZXIoKS5jb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVN0cmluZ1Zh
bHVlRm9yUG9pbnQoYXR0cmlidXRlLCBwYWdlT3ZlcmxheVBvaW50LCB2YWx1ZSkpCisgICAgICAg
ICAgICByZXR1cm4gbmlsOworICAgICAgICByZXR1cm4gW05TU3RyaW5nIHN0cmluZ1dpdGhTdHJp
bmc6dmFsdWVdOworICAgIH0KKwogICAgIHJldHVybiBuaWw7CiB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>238807</attachid>
            <date>2014-09-28 00:26:42 -0700</date>
            <delta_ts>2014-09-28 00:34:12 -0700</delta_ts>
            <desc>wip</desc>
            <filename>pageoverlay.diff</filename>
            <type>text/plain</type>
            <size>163183</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluIGIvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS5leHAuaW4KaW5kZXggNDQ0NWQ1MC4uZTMyNzBjZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5l
eHAuaW4KQEAgLTE4Nyw2ICsxODcsMTMgQEAgX19aTjdXZWJDb3JlMTFNZW1vcnlDYWNoZTE4cmVz
b3VyY2VGb3JSZXF1ZXN0RVJLTlNfMTVSZXNvdXJjZVJlcXVlc3RFTlNfOVNlc3Npb24KIF9fWk43
V2ViQ29yZTExTWVtb3J5Q2FjaGUxOWdldE9yaWdpbnNXaXRoQ2FjaGVFUk4zV1RGN0hhc2hTZXRJ
TlMxXzZSZWZQdHJJTlNfMTRTZWN1cml0eU9yaWdpbkVFRU5TXzE4U2VjdXJpdHlPcmlnaW5IYXNo
RU5TMV8xMEhhc2hUcmFpdHNJUzVfRUVFRQogX19aTjdXZWJDb3JlMTFNZW1vcnlDYWNoZTIwcmVt
b3ZlSW1hZ2VGcm9tQ2FjaGVFUktOU18zVVJMRVJLTjNXVEY2U3RyaW5nRQogX19aTjdXZWJDb3Jl
MTFNZW1vcnlDYWNoZTI1cmVtb3ZlUmVzb3VyY2VzV2l0aE9yaWdpbkVQTlNfMTRTZWN1cml0eU9y
aWdpbkUKK19fWk43V2ViQ29yZTExUGFnZU92ZXJsYXkxNXNldE5lZWRzRGlzcGxheUVSS05TXzdJ
bnRSZWN0RQorX19aTjdXZWJDb3JlMTFQYWdlT3ZlcmxheTE1c2V0TmVlZHNEaXNwbGF5RXYKK19f
Wk43V2ViQ29yZTExUGFnZU92ZXJsYXkyMHN0b3BGYWRlT3V0QW5pbWF0aW9uRXYKK19fWk43V2Vi
Q29yZTExUGFnZU92ZXJsYXk1Y2xlYXJFdgorX19aTjdXZWJDb3JlMTFQYWdlT3ZlcmxheTVsYXll
ckV2CitfX1pON1dlYkNvcmUxMVBhZ2VPdmVybGF5NmNyZWF0ZUVQTlMwXzZDbGllbnRFTlMwXzEx
T3ZlcmxheVR5cGVFCitfX1pON1dlYkNvcmUxMVBhZ2VPdmVybGF5OHNldEZyYW1lRU5TXzdJbnRS
ZWN0RQogX19aTjdXZWJDb3JlMTFTUUxSZXN1bHRPa0UKIF9fWk43V2ViQ29yZTExVVJMV2l0aERh
dGFFUDZOU0RhdGFQNU5TVVJMCiBfX1pON1dlYkNvcmUxMWdldFVSTEJ5dGVzRVBLN19fQ0ZVUkxS
TjNXVEY2VmVjdG9ySWNMbTUxMkVOUzNfMTVDcmFzaE9uT3ZlcmZsb3dFRUUKQEAgLTkwOSw2ICs5
MTYsMTEgQEAgX19aTjdXZWJDb3JlMjFNZW1vcnlQcmVzc3VyZUhhbmRsZXI3aW5zdGFsbEV2CiBf
X1pON1dlYkNvcmUyMU5ldHdvcmtTdG9yYWdlU2Vzc2lvbjIxZGVmYXVsdFN0b3JhZ2VTZXNzaW9u
RXYKIF9fWk43V2ViQ29yZTIxTmV0d29ya1N0b3JhZ2VTZXNzaW9uMjVzd2l0Y2hUb05ld1Rlc3Rp
bmdTZXNzaW9uRXYKIF9fWk43V2ViQ29yZTIxTmV0d29ya1N0b3JhZ2VTZXNzaW9uMjhjcmVhdGVQ
cml2YXRlQnJvd3NpbmdTZXNzaW9uRVJLTjNXVEY2U3RyaW5nRQorX19aTjdXZWJDb3JlMjFQYWdl
T3ZlcmxheUNvbnRyb2xsZXIxOGluc3RhbGxQYWdlT3ZlcmxheUVOM1dURjEwUGFzc1JlZlB0cklO
U18xMVBhZ2VPdmVybGF5RUVFTlMzXzhGYWRlTW9kZUUKK19fWk43V2ViQ29yZTIxUGFnZU92ZXJs
YXlDb250cm9sbGVyMjB1bmluc3RhbGxQYWdlT3ZlcmxheUVQTlNfMTFQYWdlT3ZlcmxheUVOUzFf
OEZhZGVNb2RlRQorX19aTjdXZWJDb3JlMjFQYWdlT3ZlcmxheUNvbnRyb2xsZXIzMmNvcHlBY2Nl
c3NpYmlsaXR5QXR0cmlidXRlc05hbWVzRWIKK19fWk43V2ViQ29yZTIxUGFnZU92ZXJsYXlDb250
cm9sbGVyNDNjb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZUJvb2xWYWx1ZUZvclBvaW50RU4zV1RG
NlN0cmluZ0VOU18xMEZsb2F0UG9pbnRFUmIKK19fWk43V2ViQ29yZTIxUGFnZU92ZXJsYXlDb250
cm9sbGVyNDVjb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVN0cmluZ1ZhbHVlRm9yUG9pbnRFTjNX
VEY2U3RyaW5nRU5TXzEwRmxvYXRQb2ludEVSUzJfCiBfX1pON1dlYkNvcmUyMVBsYXRmb3JtS2V5
Ym9hcmRFdmVudDI0ZGlzYW1iaWd1YXRlS2V5RG93bkV2ZW50RU5TXzEzUGxhdGZvcm1FdmVudDRU
eXBlRWIKIF9fWk43V2ViQ29yZTIxUmVtb3RlQ29tbWFuZExpc3RlbmVyNmNyZWF0ZUVSTlNfMjdS
ZW1vdGVDb21tYW5kTGlzdGVuZXJDbGllbnRFCiBfX1pON1dlYkNvcmUyMVJlc291cmNlTG9hZFNj
aGVkdWxlcjIwc2VydmVQZW5kaW5nUmVxdWVzdHNFTlNfMjBSZXNvdXJjZUxvYWRQcmlvcml0eUUK
QEAgLTE2MDMsNiArMTYxNSw4IEBAIF9fWk5LN1dlYkNvcmUxMUhpc3RvcnlJdGVtOGNoaWxkcmVu
RXYKIF9fWk5LN1dlYkNvcmUxMUhpc3RvcnlJdGVtOHJlZmVycmVyRXYKIF9fWk5LN1dlYkNvcmUx
MUhpc3RvcnlJdGVtOXVybFN0cmluZ0V2CiBfX1pOSzdXZWJDb3JlMTFIaXN0b3J5SXRlbTl2aWV3
U3RhdGVFdgorX19aTks3V2ViQ29yZTExUGFnZU92ZXJsYXk1ZnJhbWVFdgorX19aTks3V2ViQ29y
ZTExUGFnZU92ZXJsYXk2Ym91bmRzRXYKIF9fWk5LN1dlYkNvcmUxMVJlbmRlckJsb2NrMjVpbmxp
bmVFbGVtZW50Q29udGludWF0aW9uRXYKIF9fWk5LN1dlYkNvcmUxMVJlbmRlckxheWVyMTlhYnNv
bHV0ZUJvdW5kaW5nQm94RXYKIF9fWk5LN1dlYkNvcmUxMVJlbmRlckxheWVyMjRuZWVkc0NvbXBv
c2l0ZWRTY3JvbGxpbmdFdgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCmluZGV4IGE2OWU5NmMuLmNjMDE4NzEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTEwOTAsNiArMTA5
MCwxMCBAQAogCQkyRDVBNTkyRjE1MjUyNTIzMDAzNkVFNTEgLyogSW1hZ2VPcmllbnRhdGlvbi5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODc0OEQ3
NDEyQ0MzRjg5MDAxRkJBNDEgLyogSW1hZ2VPcmllbnRhdGlvbi5jcHAgKi87IH07CiAJCTJENUE1
OTMxMTUyNTI1RDAwMDM2RUU1MSAvKiBJbWFnZU9yaWVudGF0aW9uLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODc0OEQ2NjEyQ0MzNzYzMDAxRkJBNDEg
LyogSW1hZ2VPcmllbnRhdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTJENUJDNDI3MTZGODgyRUUwMDcwNDhEMCAvKiBTZWN1cml0eVBvbGlj
eVZpb2xhdGlvbkV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAyRDVCQzQyNTE2Rjg4MkJFMDA3MDQ4RDAgLyogU2VjdXJpdHlQb2xpY3lWaW9sYXRp
b25FdmVudC5oICovOyB9OworCQkyRDVDOUNGRjE5QzdCNTJFMDBCM0M1QzEgLyogUGFnZU92ZXJs
YXkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkQ1
QzlDRkIxOUM3QjUyRTAwQjNDNUMxIC8qIFBhZ2VPdmVybGF5LmNwcCAqLzsgfTsKKwkJMkQ1QzlE
MDAxOUM3QjUyRTAwQjNDNUMxIC8qIFBhZ2VPdmVybGF5LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRDVDOUNGQzE5QzdCNTJFMDBCM0M1QzEgLyogUGFn
ZU92ZXJsYXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OworCQkyRDVDOUQwMTE5QzdCNTJFMDBCM0M1QzEgLyogUGFnZU92ZXJsYXlDb250cm9sbGVyLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJENUM5Q0ZE
MTlDN0I1MkUwMEIzQzVDMSAvKiBQYWdlT3ZlcmxheUNvbnRyb2xsZXIuY3BwICovOyB9OworCQky
RDVDOUQwMjE5QzdCNTJFMDBCM0M1QzEgLyogUGFnZU92ZXJsYXlDb250cm9sbGVyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRDVDOUNGRTE5QzdCNTJF
MDBCM0M1QzEgLyogUGFnZU92ZXJsYXlDb250cm9sbGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMkQ2RTQ2ODQxN0Q2NjBGNTAwRUNGOEJCIC8q
IFBERkRvY3VtZW50SW1hZ2VNYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAyRDZFNDY4MjE3RDY2MEY1MDBFQ0Y4QkIgLyogUERGRG9jdW1lbnRJbWFn
ZU1hYy5tbSAqLzsgfTsKIAkJMkQ3MEJBMTMxODA3NERERjAwMDE5MDhBIC8qIFBsYXRmb3JtQ0FM
YXllck1hYy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MkQ3MEJBMTIxODA3NERERjAwMDE5MDhBIC8qIFBsYXRmb3JtQ0FMYXllck1hYy5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTJENzBCQTE1MTgwNzRG
ODYwMDAxOTA4QSAvKiBQbGF0Zm9ybUNBTGF5ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkQ3MEJBMTQxODA3NEY4NTAwMDE5MDhBIC8qIFBsYXRm
b3JtQ0FMYXllci5jcHAgKi87IH07CkBAIC04MDgxLDYgKzgwODUsMTAgQEAKIAkJMkQ0NkYwNEYx
N0I5NkZEMjAwNTY0N0YwIC8qIEludFNpemUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSW50U2l6ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJE
NUJDNDI1MTZGODgyQkUwMDcwNDhEMCAvKiBTZWN1cml0eVBvbGljeVZpb2xhdGlvbkV2ZW50Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNlY3VyaXR5UG9saWN5VmlvbGF0aW9u
RXZlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkQ1QkM0MjYxNkY4ODJCRTAw
NzA0OEQwIC8qIFNlY3VyaXR5UG9saWN5VmlvbGF0aW9uRXZlbnQuaWRsICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4
dDsgcGF0aCA9IFNlY3VyaXR5UG9saWN5VmlvbGF0aW9uRXZlbnQuaWRsOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkyRDVDOUNGQjE5QzdCNTJFMDBCM0M1QzEgLyogUGFnZU92ZXJsYXku
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUGFnZU92ZXJsYXkuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyRDVDOUNGQzE5QzdCNTJFMDBCM0M1QzEg
LyogUGFnZU92ZXJsYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGFnZU92
ZXJsYXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMkQ1QzlDRkQxOUM3QjUyRTAw
QjNDNUMxIC8qIFBhZ2VPdmVybGF5Q29udHJvbGxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBQYWdlT3ZlcmxheUNvbnRyb2xsZXIuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkyRDVDOUNGRTE5QzdCNTJFMDBCM0M1QzEgLyogUGFnZU92ZXJsYXlD
b250cm9sbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBhZ2VPdmVybGF5
Q29udHJvbGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyRDZFNDY4MjE3RDY2
MEY1MDBFQ0Y4QkIgLyogUERGRG9jdW1lbnRJbWFnZU1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLm9iamNwcDsgcGF0aCA9IFBERkRvY3VtZW50SW1hZ2VNYWMubW07IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTJENzBCQTEyMTgwNzREREYwMDAxOTA4QSAvKiBQbGF0Zm9ybUNB
TGF5ZXJNYWMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gUGxhdGZvcm1DQUxh
eWVyTWFjLmg7IHBhdGggPSBjYS9tYWMvUGxhdGZvcm1DQUxheWVyTWFjLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTJENzBCQTE0MTgwNzRGODUwMDAxOTA4QSAvKiBQbGF0Zm9ybUNB
TGF5ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gUGxhdGZvcm1D
QUxheWVyLmNwcDsgcGF0aCA9IGNhL1BsYXRmb3JtQ0FMYXllci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC0xNjU5MCw2ICsxNjU5OCwxMCBAQAogCQkJCTkzMDJCMEJFMEQ3OUY4
MkMwMEM3RUU4MyAvKiBQYWdlR3JvdXAuaCAqLywKIAkJCQk3QTY3NEJEOTBGOUVCRjRFMDA2Q0Yw
OTkgLyogUGFnZUdyb3VwTG9hZERlZmVycmVyLmNwcCAqLywKIAkJCQk3QTY3NEJEQTBGOUVCRjRF
MDA2Q0YwOTkgLyogUGFnZUdyb3VwTG9hZERlZmVycmVyLmggKi8sCisJCQkJMkQ1QzlDRkIxOUM3
QjUyRTAwQjNDNUMxIC8qIFBhZ2VPdmVybGF5LmNwcCAqLywKKwkJCQkyRDVDOUNGQzE5QzdCNTJF
MDBCM0M1QzEgLyogUGFnZU92ZXJsYXkuaCAqLywKKwkJCQkyRDVDOUNGRDE5QzdCNTJFMDBCM0M1
QzEgLyogUGFnZU92ZXJsYXlDb250cm9sbGVyLmNwcCAqLywKKwkJCQkyRDVDOUNGRTE5QzdCNTJF
MDBCM0M1QzEgLyogUGFnZU92ZXJsYXlDb250cm9sbGVyLmggKi8sCiAJCQkJMzcxRTY1Q0QxMzY2
MUVFRDAwQkVFREIwIC8qIFBhZ2VTZXJpYWxpemVyLmNwcCAqLywKIAkJCQkzNzFFNjVDQjEzNjYx
RURDMDBCRUVEQjAgLyogUGFnZVNlcmlhbGl6ZXIuaCAqLywKIAkJCQlBNzE5N0YyNTE3NTY4QUU1
MDA3Qjk0NDIgLyogUGFnZVRocm90dGxlci5jcHAgKi8sCkBAIC0yMzY1Myw2ICsyMzY2NSw3IEBA
CiAJCQkJOTdCQzZBMjExNTA1RjA4MTAwMUI3NEFDIC8qIERhdGFiYXNlLmggaW4gSGVhZGVycyAq
LywKIAkJCQk5N0JDNkEyNDE1MDVGMDgxMDAxQjc0QUMgLyogRGF0YWJhc2VBdXRob3JpemVyLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlGRTE2Q0ZENDE2OUQxREVEMDBEM0EwQzcgLyogRGF0YWJhc2VC
YWNrZW5kLmggaW4gSGVhZGVycyAqLywKKwkJCQkyRDVDOUQwMjE5QzdCNTJFMDBCM0M1QzEgLyog
UGFnZU92ZXJsYXlDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk5N0JDNjlEQjE1MDVG
MDc2MDAxQjc0QUMgLyogRGF0YWJhc2VCYWNrZW5kQmFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
RkU2RjZBQjAxNjlFMDU3NTAwRkMzMEEyIC8qIERhdGFiYXNlQmFja2VuZENvbnRleHQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUZFMTZDRkQ2MTY5RDFERUQwMEQzQTBDNyAvKiBEYXRhYmFzZUJhY2tl
bmRTeW5jLmggaW4gSGVhZGVycyAqLywKQEAgLTI1NjE4LDYgKzI1NjMxLDcgQEAKIAkJCQk0Mzkw
NDZFQzEyREEyNUU4MDBBRjgwQTkgLyogUmVuZGVyTWF0aE1MVG9rZW4uaCBpbiBIZWFkZXJzICov
LAogCQkJCTQzOTA0NkVBMTJEQTI1RTgwMEFGODBBMiAvKiBSZW5kZXJNYXRoTUxVbmRlck92ZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCUU0QzI3OTU5MENGOTc0MTkwMEU5N0I5OCAvKiBSZW5kZXJN
ZWRpYS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMkQ1QzlEMDAxOUM3QjUyRTAwQjNDNUMxIC8qIFBh
Z2VPdmVybGF5LmggaW4gSGVhZGVycyAqLywKIAkJCQlERUJDQ0REMjE2NjQ2RTgyMDBBNDUyRTEg
LyogUmVuZGVyTWVkaWFDb250cm9sRWxlbWVudHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTQxRkEz
MDNGMTMxNkMyOUMwMEMwQkZDNSAvKiBSZW5kZXJNZWRpYUNvbnRyb2xzLmggaW4gSGVhZGVycyAq
LywKIAkJCQlBQkRERkU3QTBBNUM2RTcwMDBBM0UxMUQgLyogUmVuZGVyTWVudUxpc3QuaCBpbiBI
ZWFkZXJzICovLApAQCAtMjgwMDUsNiArMjgwMTksNyBAQAogCQkJCUE1ODQwRTFDMTg3Qjc0RDUw
MDg0M0IxMCAvKiBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJNzFCMUUxMjYxNjQwNDkxQTAwQjE4ODBBIC8qIEluc3BlY3RvckxheWVyVHJlZUFn
ZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUwNEFBQ0NEMTgzNDQ1NTkwMEUzRDlCQyAvKiBJ
bnNwZWN0b3JOb2RlRmluZGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTJENUM5RDAxMTlDN0I1
MkUwMEIzQzVDMSAvKiBQYWdlT3ZlcmxheUNvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJN0M1MjJENEIxNUI0NzdFODAwOUI3Qzk1IC8qIEluc3BlY3Rvck92ZXJsYXkuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJNEY2RkRENjQxMzQxREVERDAwMUY4RUUzIC8qIEluc3BlY3RvclBhZ2VB
Z2VudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5OUNDMEI2NjE4QkU5RjE1MDA2Q0VCQ0MgLyog
SW5zcGVjdG9yUmVwbGF5QWdlbnQuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yODA3Myw2ICsyODA4
OCw3IEBACiAJCQkJQkNDMDY1ODcwRjNDRTJBNzAwQ0QyRDg3IC8qIEpTQ2xpZW50UmVjdC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlCQ0MwNjU4OTBGM0NFMkE3MDBDRDJEODcgLyogSlNDbGllbnRS
ZWN0TGlzdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1QzQzMDRCNTE5MUFFRjQ2MDAwRTJCQzAg
LyogSlNFWFRTaGFkZXJUZXh0dXJlTE9ELmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTJENUM5Q0ZG
MTlDN0I1MkUwMEIzQzVDMSAvKiBQYWdlT3ZlcmxheS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3
NkZCOUZGODE5QTczRTNBMDA0MjA1NjIgLyogSlNBdXRvY29tcGxldGVFcnJvckV2ZW50LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUJDQTgzRTRGMEQ3Q0UxRTkwMDM0MjFBOCAvKiBKU0RhdGFUcmFu
c2Zlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQ0E4M0U1MjBEN0NFMjA1MDAzNDIxQTggLyog
SlNEYXRhVHJhbnNmZXJDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmggYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIv
RW1wdHlDbGllbnRzLmgKaW5kZXggZmYwOGY2MC4uOWNkMTJiNyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRl
ci9FbXB0eUNsaWVudHMuaApAQCAtMTgyLDYgKzE4Miw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFs
IHZvaWQgc2Nyb2xsUmVjdEludG9WaWV3KGNvbnN0IEludFJlY3QmKSBjb25zdCBvdmVycmlkZSB7
IH0KIAogICAgIHZpcnR1YWwgdm9pZCBhdHRhY2hSb290R3JhcGhpY3NMYXllcihGcmFtZSosIEdy
YXBoaWNzTGF5ZXIqKSBvdmVycmlkZSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoVmlld092
ZXJsYXlHcmFwaGljc0xheWVyKEZyYW1lKiwgR3JhcGhpY3NMYXllciopIG92ZXJyaWRlIHsgfQog
ICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc09uZVNob3REcmF3aW5nU3luY2hyb25pemF0aW9uKCkg
b3ZlcnJpZGUgeyB9CiAgICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlQ29tcG9zaXRpbmdMYXllckZs
dXNoKCkgb3ZlcnJpZGUgeyB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hy
b21lQ2xpZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZUNsaWVudC5oCmluZGV4IDBj
YTA0NmMuLjM5NjM3ZWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lQ2xp
ZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaApAQCAtMzAwLDYg
KzMwMCw3IEBAIHB1YmxpYzoKIAogICAgIC8vIFBhc3MgMCBhcyB0aGUgR3JhcGhpY3NMYXllciB0
byBkZXRhdGNoIHRoZSByb290IGxheWVyLgogICAgIHZpcnR1YWwgdm9pZCBhdHRhY2hSb290R3Jh
cGhpY3NMYXllcihGcmFtZSosIEdyYXBoaWNzTGF5ZXIqKSA9IDA7CisgICAgdmlydHVhbCB2b2lk
IGF0dGFjaFZpZXdPdmVybGF5R3JhcGhpY3NMYXllcihGcmFtZSosIEdyYXBoaWNzTGF5ZXIqKSA9
IDA7CiAgICAgLy8gU2V0cyBhIGZsYWcgdG8gc3BlY2lmeSB0aGF0IHRoZSBuZXh0IHRpbWUgY29u
dGVudCBpcyBkcmF3biB0byB0aGUgd2luZG93LAogICAgIC8vIHRoZSBjaGFuZ2VzIGFwcGVhciBv
biB0aGUgc2NyZWVuIGluIHN5bmNocm9ueSB3aXRoIHVwZGF0ZXMgdG8gR3JhcGhpY3NMYXllcnMu
CiAgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzT25lU2hvdERyYXdpbmdTeW5jaHJvbml6YXRpb24o
KSA9IDA7CkBAIC0zMDksOCArMzEwLDYgQEAgcHVibGljOgogICAgIC8vIFJldHVybnMgd2hldGhl
ciBvciBub3QgdGhlIGNsaWVudCBjYW4gcmVuZGVyIHRoZSBjb21wb3NpdGVkIGxheWVyLAogICAg
IC8vIHJlZ2FyZGxlc3Mgb2YgdGhlIHNldHRpbmdzLgogICAgIHZpcnR1YWwgYm9vbCBhbGxvd3NB
Y2NlbGVyYXRlZENvbXBvc2l0aW5nKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQotICAgIC8vIFN1
cHBseSBhIGxheWVyIHRoYXQgd2lsbCBhZGRlZCBhcyBhbiBvdmVybGF5IG92ZXIgb3RoZXIgZG9j
dW1lbnQgbGF5ZXJzIChzY3JvbGxpbmcgd2l0aCB0aGUgZG9jdW1lbnQpLgotICAgIHZpcnR1YWwg
R3JhcGhpY3NMYXllciogZG9jdW1lbnRPdmVybGF5TGF5ZXJGb3JGcmFtZShGcmFtZSYpIHsgcmV0
dXJuIG51bGxwdHI7IH0KIAogICAgIGVudW0gQ29tcG9zaXRpbmdUcmlnZ2VyIHsKICAgICAgICAg
VGhyZWVEVHJhbnNmb3JtVHJpZ2dlciA9IDEgPDwgMCwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5k
bGVyLmNwcAppbmRleCAzYzE1MjE3Li44YWQwNTY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhh
bmRsZXIuY3BwCkBAIC02Niw2ICs2Niw3IEBACiAjaW5jbHVkZSAiTW91c2VFdmVudC5oIgogI2lu
Y2x1ZGUgIk1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMuaCIKICNpbmNsdWRlICJQYWdlLmgi
CisjaW5jbHVkZSAiUGFnZU92ZXJsYXlDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1F
dmVudC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtS2V5Ym9hcmRFdmVudC5oIgogI2luY2x1ZGUgIlBs
YXRmb3JtV2hlZWxFdmVudC5oIgpAQCAtMTY0NCw2ICsxNjQ1LDEwIEBAIGJvb2wgRXZlbnRIYW5k
bGVyOjpoYW5kbGVNb3VzZVByZXNzRXZlbnQoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBwbGF0
Zm9ybU1vdXNlCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAorICAgIFBhZ2UqIHBhZ2Ug
PSBtX2ZyYW1lLnBhZ2UoKTsKKyAgICBpZiAocGFnZSAmJiBwYWdlLT5wYWdlT3ZlcmxheUNvbnRy
b2xsZXIoKS5oYW5kbGVNb3VzZUV2ZW50KHBsYXRmb3JtTW91c2VFdmVudCkpCisgICAgICAgIHJl
dHVybiB0cnVlOworCiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKICAgICBib29sIGRlZmF1bHRQ
cmV2ZW50ZWQgPSBkaXNwYXRjaFN5bnRoZXRpY1RvdWNoRXZlbnRJZkVuYWJsZWQocGxhdGZvcm1N
b3VzZUV2ZW50KTsKICAgICBpZiAoZGVmYXVsdFByZXZlbnRlZCkKQEAgLTE4MzcsMTAgKzE4NDIs
MTMgQEAgYm9vbCBFdmVudEhhbmRsZXI6Om1vdXNlTW92ZWQoY29uc3QgUGxhdGZvcm1Nb3VzZUV2
ZW50JiBldmVudCkKICAgICBSZWZQdHI8RnJhbWVWaWV3PiBwcm90ZWN0b3IobV9mcmFtZS52aWV3
KCkpOwogICAgIE1heGltdW1EdXJhdGlvblRyYWNrZXIgbWF4RHVyYXRpb25UcmFja2VyKCZtX21h
eE1vdXNlTW92ZWREdXJhdGlvbik7CiAKKyAgICBQYWdlKiBwYWdlID0gbV9mcmFtZS5wYWdlKCk7
CisgICAgaWYgKHBhZ2UgJiYgcGFnZS0+cGFnZU92ZXJsYXlDb250cm9sbGVyKCkuaGFuZGxlTW91
c2VFdmVudChldmVudCkpCisgICAgICAgIHJldHVybiB0cnVlOworCiAgICAgSGl0VGVzdFJlc3Vs
dCBob3ZlcmVkTm9kZSA9IEhpdFRlc3RSZXN1bHQoTGF5b3V0UG9pbnQoKSk7CiAgICAgYm9vbCBy
ZXN1bHQgPSBoYW5kbGVNb3VzZU1vdmVFdmVudChldmVudCwgJmhvdmVyZWROb2RlKTsKIAotICAg
IFBhZ2UqIHBhZ2UgPSBtX2ZyYW1lLnBhZ2UoKTsKICAgICBpZiAoIXBhZ2UpCiAgICAgICAgIHJl
dHVybiByZXN1bHQ7CiAKQEAgLTIwMjAsNiArMjAyOCwxMCBAQCBib29sIEV2ZW50SGFuZGxlcjo6
aGFuZGxlTW91c2VSZWxlYXNlRXZlbnQoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBwbGF0Zm9y
bU1vdQogCiAgICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5zZXRDYXJldEJsaW5raW5nU3VzcGVuZGVk
KGZhbHNlKTsKIAorICAgIFBhZ2UqIHBhZ2UgPSBtX2ZyYW1lLnBhZ2UoKTsKKyAgICBpZiAocGFn
ZSAmJiBwYWdlLT5wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKS5oYW5kbGVNb3VzZUV2ZW50KHBsYXRm
b3JtTW91c2VFdmVudCkpCisgICAgICAgIHJldHVybiB0cnVlOworCiAjaWYgRU5BQkxFKFRPVUNI
X0VWRU5UUykKICAgICBib29sIGRlZmF1bHRQcmV2ZW50ZWQgPSBkaXNwYXRjaFN5bnRoZXRpY1Rv
dWNoRXZlbnRJZkVuYWJsZWQocGxhdGZvcm1Nb3VzZUV2ZW50KTsKICAgICBpZiAoZGVmYXVsdFBy
ZXZlbnRlZCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAppbmRleCBkZjZmZWU0Li41MDlmNTQx
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcApAQCAtNjAsNiArNjAsNyBAQAogI2luY2x1
ZGUgIk1lbW9yeUNhY2hlLmgiCiAjaW5jbHVkZSAiTWVtb3J5UHJlc3N1cmVIYW5kbGVyLmgiCiAj
aW5jbHVkZSAiT3ZlcmZsb3dFdmVudC5oIgorI2luY2x1ZGUgIlBhZ2VPdmVybGF5Q29udHJvbGxl
ci5oIgogI2luY2x1ZGUgIlByb2dyZXNzVHJhY2tlci5oIgogI2luY2x1ZGUgIlJlbmRlckVtYmVk
ZGVkT2JqZWN0LmgiCiAjaW5jbHVkZSAiUmVuZGVyRnVsbFNjcmVlbi5oIgpAQCAtNDMwLDEwICs0
MzEsMTEgQEAgdm9pZCBGcmFtZVZpZXc6OnNldEZyYW1lUmVjdChjb25zdCBJbnRSZWN0JiBuZXdS
ZWN0KQogICAgIGlmIChuZXdSZWN0ID09IG9sZFJlY3QpCiAgICAgICAgIHJldHVybjsKIAorICAg
IFBhZ2UqIHBhZ2UgPSBmcmFtZSgpLnBhZ2UoKTsKKwogI2lmIEVOQUJMRShURVhUX0FVVE9TSVpJ
TkcpCiAgICAgLy8gQXV0b3NpemVkIGZvbnQgc2l6ZXMgZGVwZW5kIG9uIHRoZSB3aWR0aCBvZiB0
aGUgdmlld2luZyBhcmVhLgogICAgIGlmIChuZXdSZWN0LndpZHRoKCkgIT0gb2xkUmVjdC53aWR0
aCgpKSB7Ci0gICAgICAgIFBhZ2UqIHBhZ2UgPSBmcmFtZSgpLnBhZ2UoKTsKICAgICAgICAgaWYg
KGZyYW1lKCkuaXNNYWluRnJhbWUoKSAmJiBwYWdlLT5zZXR0aW5ncygpLnRleHRBdXRvc2l6aW5n
RW5hYmxlZCgpKSB7CiAgICAgICAgICAgICBmb3IgKEZyYW1lKiBmcmFtZSA9ICZwYWdlLT5tYWlu
RnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQoKSkKICAg
ICAgICAgICAgICAgICBmcmFtZSgpLmRvY3VtZW50KCktPnRleHRBdXRvc2l6ZXIoKS0+cmVjYWxj
dWxhdGVNdWx0aXBsaWVycygpOwpAQCAtNDQ5LDYgKzQ1MSw5IEBAIHZvaWQgRnJhbWVWaWV3Ojpz
ZXRGcmFtZVJlY3QoY29uc3QgSW50UmVjdCYgbmV3UmVjdCkKICAgICAgICAgaWYgKHJlbmRlclZp
ZXctPnVzZXNDb21wb3NpdGluZygpKQogICAgICAgICAgICAgcmVuZGVyVmlldy0+Y29tcG9zaXRv
cigpLmZyYW1lVmlld0RpZENoYW5nZVNpemUoKTsKICAgICB9CisKKyAgICBpZiAoZnJhbWUoKS5p
c01haW5GcmFtZSgpKQorICAgICAgICBwYWdlLT5wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKS5kaWRD
aGFuZ2VWaWV3U2l6ZSgpOwogfQogCiAjaWYgRU5BQkxFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1F
KQpAQCAtNTYyLDYgKzU2Nyw5IEBAIHZvaWQgRnJhbWVWaWV3OjpzZXRDb250ZW50c1NpemUoY29u
c3QgSW50U2l6ZSYgc2l6ZSkKIAogICAgIHBhZ2UtPmNocm9tZSgpLmNvbnRlbnRzU2l6ZUNoYW5n
ZWQoJmZyYW1lKCksIHNpemUpOyAvLyBOb3RpZnkgb25seS4KIAorICAgIGlmIChmcmFtZSgpLmlz
TWFpbkZyYW1lKCkpCisgICAgICAgIHBhZ2UtPnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLmRpZENo
YW5nZURvY3VtZW50U2l6ZSgpOworCiAgICAgQVNTRVJUKG1fZGVmZXJTZXROZWVkc0xheW91dHMp
OwogICAgIG1fZGVmZXJTZXROZWVkc0xheW91dHMtLTsKICAgICAKQEAgLTIwNDgsNyArMjA1Niw3
IEBAIHZvaWQgRnJhbWVWaWV3OjpzZXRGaXhlZFZpc2libGVDb250ZW50UmVjdChjb25zdCBJbnRS
ZWN0JiB2aXNpYmxlQ29udGVudFJlY3QpCiAgICAgICAgIC8vIFVwZGF0ZSB0aGUgc2Nyb2xsLWJh
cnMgdG8gY2FsY3VsYXRlIG5ldyBwYWdlLXN0ZXAgc2l6ZS4KICAgICAgICAgdXBkYXRlU2Nyb2xs
YmFycyhzY3JvbGxPZmZzZXQoKSk7CiAgICAgfQotICAgIGZyYW1lKCkubG9hZGVyKCkuY2xpZW50
KCkuZGlkQ2hhbmdlU2Nyb2xsT2Zmc2V0KCk7CisgICAgZGlkQ2hhbmdlU2Nyb2xsT2Zmc2V0KCk7
CiB9CiAjZW5kaWYKIApAQCAtMjA2MSw2ICsyMDY5LDE0IEBAIHZvaWQgRnJhbWVWaWV3OjpzZXRW
aWV3cG9ydENvbnN0cmFpbmVkT2JqZWN0c05lZWRMYXlvdXQoKQogICAgICAgICByZW5kZXJlci0+
c2V0TmVlZHNMYXlvdXQoKTsKIH0KIAordm9pZCBGcmFtZVZpZXc6OmRpZENoYW5nZVNjcm9sbE9m
ZnNldCgpCit7CisgICAgaWYgKFBhZ2UqIHBhZ2UgPSBmcmFtZSgpLnBhZ2UoKSkKKyAgICAgICAg
cGFnZS0+cGFnZU92ZXJsYXlDb250cm9sbGVyKCkuZGlkU2Nyb2xsRnJhbWUoZnJhbWUoKSk7CisK
KyAgICBmcmFtZSgpLmxvYWRlcigpLmNsaWVudCgpLmRpZENoYW5nZVNjcm9sbE9mZnNldCgpOwor
fQorCiB2b2lkIEZyYW1lVmlldzo6c2Nyb2xsUG9zaXRpb25DaGFuZ2VkVmlhUGxhdGZvcm1XaWRn
ZXQoY29uc3QgSW50UG9pbnQmIG9sZFBvc2l0aW9uLCBjb25zdCBJbnRQb2ludCYgbmV3UG9zaXRp
b24pCiB7CiAgICAgdXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNjcm9sbGluZygpOwpAQCAtMzIy
Myw3ICszMjM5LDcgQEAgdm9pZCBGcmFtZVZpZXc6OnNjcm9sbFRvKGNvbnN0IEludFNpemUmIG5l
d09mZnNldCkKICAgICBTY3JvbGxWaWV3OjpzY3JvbGxUbyhuZXdPZmZzZXQpOwogICAgIGlmIChv
ZmZzZXQgIT0gc2Nyb2xsT2Zmc2V0KCkpCiAgICAgICAgIHNjcm9sbFBvc2l0aW9uQ2hhbmdlZChv
bGRQb3NpdGlvbiwgc2Nyb2xsUG9zaXRpb24oKSk7Ci0gICAgZnJhbWUoKS5sb2FkZXIoKS5jbGll
bnQoKS5kaWRDaGFuZ2VTY3JvbGxPZmZzZXQoKTsKKyAgICBkaWRDaGFuZ2VTY3JvbGxPZmZzZXQo
KTsKIH0KIAogZmxvYXQgRnJhbWVWaWV3OjphZGp1c3RTY3JvbGxTdGVwRm9yRml4ZWRDb250ZW50
KGZsb2F0IHN0ZXAsIFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uLCBTY3JvbGxHcmFu
dWxhcml0eSBncmFudWxhcml0eSkKQEAgLTQyOTIsNyArNDMwOCw3IEBAIGJvb2wgRnJhbWVWaWV3
Ojp3aGVlbEV2ZW50KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYgd2hlZWxFdmVudCkKICAgICAg
ICAgaWYgKG9mZnNldCAhPSBuZXdPZmZzZXQpIHsKICAgICAgICAgICAgIFNjcm9sbFZpZXc6OnNj
cm9sbFRvKG5ld09mZnNldCk7CiAgICAgICAgICAgICBzY3JvbGxQb3NpdGlvbkNoYW5nZWQob2xk
UG9zaXRpb24sIHNjcm9sbFBvc2l0aW9uKCkpOwotICAgICAgICAgICAgZnJhbWUoKS5sb2FkZXIo
KS5jbGllbnQoKS5kaWRDaGFuZ2VTY3JvbGxPZmZzZXQoKTsKKyAgICAgICAgICAgIGRpZENoYW5n
ZVNjcm9sbE9mZnNldCgpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0K
QEAgLTQ2MTUsNiArNDYzMSw5IEBAIHZvaWQgRnJhbWVWaWV3OjpzZXRFeHBvc2VkUmVjdChGbG9h
dFJlY3QgZXhwb3NlZFJlY3QpCiAKICAgICBpZiAoYXV0byogdmlldyA9IHJlbmRlclZpZXcoKSkK
ICAgICAgICAgdmlldy0+Y29tcG9zaXRvcigpLnNjaGVkdWxlTGF5ZXJGbHVzaChmYWxzZSAvKiBj
YW5UaHJvdHRsZSAqLyk7CisKKyAgICBpZiAoYXV0byogcGFnZSA9IGZyYW1lKCkucGFnZSgpKQor
ICAgICAgICBwYWdlLT5wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKS5kaWRDaGFuZ2VFeHBvc2VkUmVj
dCgpOwogfQogICAgIAogdm9pZCBGcmFtZVZpZXc6OnNldFZpZXdwb3J0U2l6ZUZvckNTU1ZpZXdw
b3J0VW5pdHMoSW50U2l6ZSBzaXplKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9G
cmFtZVZpZXcuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmgKaW5kZXggMzc1Njk2
YS4uOTJhYTliOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5oCkBAIC01MTEsNiArNTExLDggQEAg
cHVibGljOgogCiAgICAgdmlydHVhbCBmbG9hdCBhZGp1c3RTY3JvbGxTdGVwRm9yRml4ZWRDb250
ZW50KGZsb2F0IHN0ZXAsIFNjcm9sbGJhck9yaWVudGF0aW9uLCBTY3JvbGxHcmFudWxhcml0eSkg
b3ZlcnJpZGU7CiAKKyAgICB2b2lkIGRpZENoYW5nZVNjcm9sbE9mZnNldCgpOworCiBwcm90ZWN0
ZWQ6CiAgICAgdmlydHVhbCBib29sIHNjcm9sbENvbnRlbnRzRmFzdFBhdGgoY29uc3QgSW50U2l6
ZSYgc2Nyb2xsRGVsdGEsIGNvbnN0IEludFJlY3QmIHJlY3RUb1Njcm9sbCwgY29uc3QgSW50UmVj
dCYgY2xpcFJlY3QpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxDb250ZW50c1Ns
b3dQYXRoKGNvbnN0IEludFJlY3QmIHVwZGF0ZVJlY3QpIG92ZXJyaWRlOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5j
cHAKaW5kZXggMjZiOGQxNy4uNTM4ZGZkNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9QYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCkBAIC02MCw2ICs2
MCw3IEBACiAjaW5jbHVkZSAiUGFnZUNvbnNvbGVDbGllbnQuaCIKICNpbmNsdWRlICJQYWdlRGVi
dWdnYWJsZS5oIgogI2luY2x1ZGUgIlBhZ2VHcm91cC5oIgorI2luY2x1ZGUgIlBhZ2VPdmVybGF5
Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIlBhZ2VUaHJvdHRsZXIuaCIKICNpbmNsdWRlICJQbHVn
SW5DbGllbnQuaCIKICNpbmNsdWRlICJQbHVnaW5EYXRhLmgiCkBAIC0yMDMsNiArMjA0LDcgQEAg
UGFnZTo6UGFnZShQYWdlQ2xpZW50cyYgcGFnZUNsaWVudHMpCiAgICAgLCBtX3Zpc2l0ZWRMaW5r
U3RvcmUoV1RGOjptb3ZlKHBhZ2VDbGllbnRzLnZpc2l0ZWRMaW5rU3RvcmUpKQogICAgICwgbV9z
ZXNzaW9uSUQoU2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpCiAgICAgLCBtX2lzQ2xvc2lu
ZyhmYWxzZSkKKyAgICAsIG1fcGFnZU92ZXJsYXlDb250cm9sbGVyKHN0ZDo6bWFrZV91bmlxdWU8
UGFnZU92ZXJsYXlDb250cm9sbGVyPigqdGhpcykpCiB7CiAgICAgQVNTRVJUKG1fZWRpdG9yQ2xp
ZW50KTsKICAgICAKQEAgLTgxMSw2ICs4MTMsOCBAQCB2b2lkIFBhZ2U6OnNldERldmljZVNjYWxl
RmFjdG9yKGZsb2F0IHNjYWxlRmFjdG9yKQogCiAgICAgcGFnZUNhY2hlKCktPm1hcmtQYWdlc0Zv
ckZ1bGxTdHlsZVJlY2FsYyh0aGlzKTsKICAgICBHcmFwaGljc0NvbnRleHQ6OnVwZGF0ZURvY3Vt
ZW50TWFya2VyUmVzb3VyY2VzKCk7CisKKyAgICBtX3BhZ2VPdmVybGF5Q29udHJvbGxlci0+ZGlk
Q2hhbmdlRGV2aWNlU2NhbGVGYWN0b3IoKTsKIH0KIAogdm9pZCBQYWdlOjpzZXRUb3BDb250ZW50
SW5zZXQoZmxvYXQgY29udGVudEluc2V0KQpAQCAtMTYxOCw3ICsxNjIyLDYgQEAgdm9pZCBQYWdl
OjpzZXRTZXNzaW9uSUQoU2Vzc2lvbklEIHNlc3Npb25JRCkKIAogICAgIGZvciAoYXV0byYgdmll
dyA6IHBsdWdpblZpZXdzKCkpCiAgICAgICAgIHZpZXctPnByaXZhdGVCcm93c2luZ1N0YXRlQ2hh
bmdlZChzZXNzaW9uSUQuaXNFcGhlbWVyYWwoKSk7Ci0KIH0KIAogUGFnZTo6UGFnZUNsaWVudHM6
OlBhZ2VDbGllbnRzKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5oIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmgKaW5kZXggODZmMmFmZC4uNjk3MDBmNiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9QYWdlLmgKQEAgLTg0LDYgKzg0LDcgQEAgY2xhc3MgUGFnZUFjdGl2aXR5QXNzZXJ0aW9uVG9r
ZW47CiBjbGFzcyBQYWdlQ29uc29sZUNsaWVudDsKIGNsYXNzIFBhZ2VEZWJ1Z2dhYmxlOwogY2xh
c3MgUGFnZUdyb3VwOworY2xhc3MgUGFnZU92ZXJsYXlDb250cm9sbGVyOwogY2xhc3MgUGFnZVRo
cm90dGxlcjsKIGNsYXNzIFBsdWdJbkNsaWVudDsKIGNsYXNzIFBsdWdpbkRhdGE7CkBAIC0xNjgs
NiArMTY5LDggQEAgcHVibGljOgogICAgIE1haW5GcmFtZSYgbWFpbkZyYW1lKCkgeyBBU1NFUlQo
bV9tYWluRnJhbWUpOyByZXR1cm4gKm1fbWFpbkZyYW1lOyB9CiAgICAgY29uc3QgTWFpbkZyYW1l
JiBtYWluRnJhbWUoKSBjb25zdCB7IEFTU0VSVChtX21haW5GcmFtZSk7IHJldHVybiAqbV9tYWlu
RnJhbWU7IH0KIAorICAgIFBhZ2VPdmVybGF5Q29udHJvbGxlciYgcGFnZU92ZXJsYXlDb250cm9s
bGVyKCkgeyByZXR1cm4gKm1fcGFnZU92ZXJsYXlDb250cm9sbGVyOyB9CisKICAgICBib29sIG9w
ZW5lZEJ5RE9NKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRPcGVuZWRCeURPTSgpOwogCkBAIC01OTEs
NiArNTk0LDggQEAgcHJpdmF0ZToKICAgICBTZXNzaW9uSUQgbV9zZXNzaW9uSUQ7CiAKICAgICBi
b29sIG1faXNDbG9zaW5nOworCisgICAgc3RkOjp1bmlxdWVfcHRyPFBhZ2VPdmVybGF5Q29udHJv
bGxlcj4gbV9wYWdlT3ZlcmxheUNvbnRyb2xsZXI7CiB9OwogCiBpbmxpbmUgUGFnZUdyb3VwJiBQ
YWdlOjpncm91cCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VPdmVybGF5
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZU92ZXJsYXkuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwY2E3MTEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL1BhZ2VPdmVybGF5LmNwcApAQCAtMCwwICsxLDI1NyBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQYWdlT3ZlcmxheS5oIgorCisjaW5j
bHVkZSAiRnJhbWVWaWV3LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVk
ZSAiTWFpbkZyYW1lLmgiCisjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlBhZ2VPdmVybGF5
Q29udHJvbGxlci5oIgorI2luY2x1ZGUgIlBsYXRmb3JtTW91c2VFdmVudC5oIgorI2luY2x1ZGUg
IlNjcm9sbGJhclRoZW1lLmgiCisjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGNvbnN0IGRvdWJsZSBmYWRlQW5pbWF0aW9uRHVyYXRp
b24gPSAwLjI7CitzdGF0aWMgY29uc3QgZG91YmxlIGZhZGVBbmltYXRpb25GcmFtZVJhdGUgPSAz
MDsKKworUGFzc1JlZlB0cjxQYWdlT3ZlcmxheT4gUGFnZU92ZXJsYXk6OmNyZWF0ZShDbGllbnQq
IGNsaWVudCwgT3ZlcmxheVR5cGUgb3ZlcmxheVR5cGUpCit7CisgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBQYWdlT3ZlcmxheShjbGllbnQsIG92ZXJsYXlUeXBlKSk7Cit9CisKK1BhZ2VPdmVybGF5
OjpQYWdlT3ZlcmxheShDbGllbnQqIGNsaWVudCwgT3ZlcmxheVR5cGUgb3ZlcmxheVR5cGUpCisg
ICAgOiBtX2NsaWVudChjbGllbnQpCisgICAgLCBtX3BhZ2UobnVsbHB0cikKKyAgICAsIG1fZmFk
ZUFuaW1hdGlvblRpbWVyKFJ1bkxvb3A6Om1haW4oKSwgdGhpcywgJlBhZ2VPdmVybGF5OjpmYWRl
QW5pbWF0aW9uVGltZXJGaXJlZCkKKyAgICAsIG1fZmFkZUFuaW1hdGlvblN0YXJ0VGltZSgwKQor
ICAgICwgbV9mYWRlQW5pbWF0aW9uRHVyYXRpb24oZmFkZUFuaW1hdGlvbkR1cmF0aW9uKQorICAg
ICwgbV9mYWRlQW5pbWF0aW9uVHlwZShOb0FuaW1hdGlvbikKKyAgICAsIG1fZnJhY3Rpb25GYWRl
ZEluKDEpCisgICAgLCBtX292ZXJsYXlUeXBlKG92ZXJsYXlUeXBlKQorICAgICwgbV9iYWNrZ3Jv
dW5kQ29sb3IoQ29sb3I6OnRyYW5zcGFyZW50KQoreworfQorCitQYWdlT3ZlcmxheTo6flBhZ2VP
dmVybGF5KCkKK3sKK30KKworSW50UmVjdCBQYWdlT3ZlcmxheTo6Ym91bmRzKCkgY29uc3QKK3sK
KyAgICBpZiAoIW1fb3ZlcnJpZGVGcmFtZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBJbnRS
ZWN0KEludFBvaW50KCksIG1fb3ZlcnJpZGVGcmFtZS5zaXplKCkpOworCisgICAgRnJhbWVWaWV3
KiBmcmFtZVZpZXcgPSBtX3BhZ2UtPm1haW5GcmFtZSgpLnZpZXcoKTsKKworICAgIGlmICghZnJh
bWVWaWV3KQorICAgICAgICByZXR1cm4gSW50UmVjdCgpOworCisgICAgc3dpdGNoIChtX292ZXJs
YXlUeXBlKSB7CisgICAgY2FzZSBPdmVybGF5VHlwZTo6VmlldzogeworICAgICAgICBpbnQgd2lk
dGggPSBmcmFtZVZpZXctPndpZHRoKCk7CisgICAgICAgIGludCBoZWlnaHQgPSBmcmFtZVZpZXct
PmhlaWdodCgpOworCisgICAgICAgIGlmICghU2Nyb2xsYmFyVGhlbWU6OnRoZW1lKCktPnVzZXNP
dmVybGF5U2Nyb2xsYmFycygpKSB7CisgICAgICAgICAgICBpZiAoZnJhbWVWaWV3LT52ZXJ0aWNh
bFNjcm9sbGJhcigpKQorICAgICAgICAgICAgICAgIHdpZHRoIC09IGZyYW1lVmlldy0+dmVydGlj
YWxTY3JvbGxiYXIoKS0+d2lkdGgoKTsKKyAgICAgICAgICAgIGlmIChmcmFtZVZpZXctPmhvcml6
b250YWxTY3JvbGxiYXIoKSkKKyAgICAgICAgICAgICAgICBoZWlnaHQgLT0gZnJhbWVWaWV3LT5o
b3Jpem9udGFsU2Nyb2xsYmFyKCktPmhlaWdodCgpOworICAgICAgICB9CisgICAgICAgIHJldHVy
biBJbnRSZWN0KDAsIDAsIHdpZHRoLCBoZWlnaHQpOworICAgIH0KKyAgICBjYXNlIE92ZXJsYXlU
eXBlOjpEb2N1bWVudDoKKyAgICAgICAgcmV0dXJuIEludFJlY3QoSW50UG9pbnQoKSwgZnJhbWVW
aWV3LT5jb250ZW50c1NpemUoKSk7CisgICAgfTsKKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgIHJldHVybiBJbnRSZWN0KEludFBvaW50KCksIGZyYW1lVmlldy0+Y29udGVudHNTaXpl
KCkpOworfQorCitJbnRSZWN0IFBhZ2VPdmVybGF5OjpmcmFtZSgpIGNvbnN0Cit7CisgICAgaWYg
KCFtX292ZXJyaWRlRnJhbWUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gbV9vdmVycmlkZUZy
YW1lOworCisgICAgcmV0dXJuIGJvdW5kcygpOworfQorCit2b2lkIFBhZ2VPdmVybGF5OjpzZXRG
cmFtZShJbnRSZWN0IGZyYW1lKQoreworICAgIGlmIChtX292ZXJyaWRlRnJhbWUgPT0gZnJhbWUp
CisgICAgICAgIHJldHVybjsKKworICAgIG1fb3ZlcnJpZGVGcmFtZSA9IGZyYW1lOworCisgICAg
aWYgKG1fcGFnZSkKKyAgICAgICAgbV9wYWdlLT5wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKS5kaWRD
aGFuZ2VPdmVybGF5RnJhbWUoKnRoaXMpOworfQorCit2b2lkIFBhZ2VPdmVybGF5OjpzZXRCYWNr
Z3JvdW5kQ29sb3IoUkdCQTMyIGJhY2tncm91bmRDb2xvcikKK3sKKyAgICBpZiAobV9iYWNrZ3Jv
dW5kQ29sb3IgPT0gYmFja2dyb3VuZENvbG9yKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2Jh
Y2tncm91bmRDb2xvciA9IGJhY2tncm91bmRDb2xvcjsKKworICAgIGlmIChtX3BhZ2UpCisgICAg
ICAgIG1fcGFnZS0+cGFnZU92ZXJsYXlDb250cm9sbGVyKCkuZGlkQ2hhbmdlT3ZlcmxheUJhY2tn
cm91bmRDb2xvcigqdGhpcyk7Cit9CisKK3ZvaWQgUGFnZU92ZXJsYXk6OnNldFBhZ2UoUGFnZSog
cGFnZSkKK3sKKyAgICBtX2NsaWVudC0+d2lsbE1vdmVUb1BhZ2UodGhpcywgcGFnZSk7CisgICAg
bV9wYWdlID0gcGFnZTsKKyAgICBtX2NsaWVudC0+ZGlkTW92ZVRvUGFnZSh0aGlzLCBwYWdlKTsK
KworICAgIG1fZmFkZUFuaW1hdGlvblRpbWVyLnN0b3AoKTsKK30KKwordm9pZCBQYWdlT3Zlcmxh
eTo6c2V0TmVlZHNEaXNwbGF5KGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCkKK3sKKyAgICBpZiAo
IW1fcGFnZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9wYWdlLT5wYWdlT3ZlcmxheUNvbnRy
b2xsZXIoKS5zZXRQYWdlT3ZlcmxheU9wYWNpdHkoKnRoaXMsIG1fZnJhY3Rpb25GYWRlZEluKTsK
KyAgICBtX3BhZ2UtPnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLnNldFBhZ2VPdmVybGF5TmVlZHNE
aXNwbGF5KCp0aGlzLCBkaXJ0eVJlY3QpOworfQorCit2b2lkIFBhZ2VPdmVybGF5OjpzZXROZWVk
c0Rpc3BsYXkoKQoreworICAgIHNldE5lZWRzRGlzcGxheShib3VuZHMoKSk7Cit9CisKK3ZvaWQg
UGFnZU92ZXJsYXk6OmRyYXdSZWN0KEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0LCBj
b25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpCit7CisgICAgLy8gSWYgdGhlIGRpcnR5IHJlY3QgaXMg
b3V0c2lkZSB0aGUgYm91bmRzLCBpZ25vcmUgaXQuCisgICAgSW50UmVjdCBwYWludFJlY3QgPSBp
bnRlcnNlY3Rpb24oZGlydHlSZWN0LCBib3VuZHMoKSk7CisgICAgaWYgKHBhaW50UmVjdC5pc0Vt
cHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIg
c3RhdGVTYXZlcihncmFwaGljc0NvbnRleHQpOworICAgIG1fY2xpZW50LT5kcmF3UmVjdCh0aGlz
LCBncmFwaGljc0NvbnRleHQsIHBhaW50UmVjdCk7Cit9CisgICAgCitib29sIFBhZ2VPdmVybGF5
Ojptb3VzZUV2ZW50KGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgbW91c2VFdmVudCkKK3sKKyAg
ICBJbnRQb2ludCBtb3VzZVBvc2l0aW9uSW5PdmVybGF5Q29vcmRpbmF0ZXMobW91c2VFdmVudC5w
b3NpdGlvbigpKTsKKworICAgIGlmIChtX292ZXJsYXlUeXBlID09IFBhZ2VPdmVybGF5OjpPdmVy
bGF5VHlwZTo6RG9jdW1lbnQpCisgICAgICAgIG1vdXNlUG9zaXRpb25Jbk92ZXJsYXlDb29yZGlu
YXRlcyA9IG1fcGFnZS0+bWFpbkZyYW1lKCkudmlldygpLT5yb290Vmlld1RvQ29udGVudHMobW91
c2VQb3NpdGlvbkluT3ZlcmxheUNvb3JkaW5hdGVzKTsKKworICAgIC8vIElnbm9yZSBldmVudHMg
b3V0c2lkZSB0aGUgYm91bmRzLgorICAgIGlmICghYm91bmRzKCkuY29udGFpbnMobW91c2VQb3Np
dGlvbkluT3ZlcmxheUNvb3JkaW5hdGVzKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
cmV0dXJuIG1fY2xpZW50LT5tb3VzZUV2ZW50KHRoaXMsIG1vdXNlRXZlbnQpOworfQorCit2b2lk
IFBhZ2VPdmVybGF5OjpkaWRTY3JvbGxGcmFtZShGcmFtZSYgZnJhbWUpCit7CisgICAgbV9jbGll
bnQtPmRpZFNjcm9sbEZyYW1lKHRoaXMsIGZyYW1lKTsKK30KKworYm9vbCBQYWdlT3ZlcmxheTo6
Y29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVTdHJpbmdWYWx1ZUZvclBvaW50KFN0cmluZyBhdHRy
aWJ1dGUsIEZsb2F0UG9pbnQgcGFyYW1ldGVyLCBTdHJpbmcmIHZhbHVlKQoreworICAgIHJldHVy
biBtX2NsaWVudC0+Y29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVTdHJpbmdWYWx1ZUZvclBvaW50
KHRoaXMsIGF0dHJpYnV0ZSwgcGFyYW1ldGVyLCB2YWx1ZSk7Cit9CisKK2Jvb2wgUGFnZU92ZXJs
YXk6OmNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlQm9vbFZhbHVlRm9yUG9pbnQoU3RyaW5nIGF0
dHJpYnV0ZSwgRmxvYXRQb2ludCBwYXJhbWV0ZXIsIGJvb2wmIHZhbHVlKQoreworICAgIHJldHVy
biBtX2NsaWVudC0+Y29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVCb29sVmFsdWVGb3JQb2ludCh0
aGlzLCBhdHRyaWJ1dGUsIHBhcmFtZXRlciwgdmFsdWUpOworfQorCitWZWN0b3I8U3RyaW5nPiBQ
YWdlT3ZlcmxheTo6Y29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVOYW1lcyhib29sIHBhcmFtZXRl
cml6ZWROYW1lcykKK3sKKyAgICByZXR1cm4gbV9jbGllbnQtPmNvcHlBY2Nlc3NpYmlsaXR5QXR0
cmlidXRlTmFtZXModGhpcywgcGFyYW1ldGVyaXplZE5hbWVzKTsKK30KKwordm9pZCBQYWdlT3Zl
cmxheTo6c3RhcnRGYWRlSW5BbmltYXRpb24oKQoreworICAgIG1fZnJhY3Rpb25GYWRlZEluID0g
MDsKKyAgICBtX2ZhZGVBbmltYXRpb25UeXBlID0gRmFkZUluQW5pbWF0aW9uOworCisgICAgc3Rh
cnRGYWRlQW5pbWF0aW9uKCk7Cit9CisKK3ZvaWQgUGFnZU92ZXJsYXk6OnN0YXJ0RmFkZU91dEFu
aW1hdGlvbigpCit7CisgICAgbV9mcmFjdGlvbkZhZGVkSW4gPSAxOworICAgIG1fZmFkZUFuaW1h
dGlvblR5cGUgPSBGYWRlT3V0QW5pbWF0aW9uOworCisgICAgc3RhcnRGYWRlQW5pbWF0aW9uKCk7
Cit9CisKK3ZvaWQgUGFnZU92ZXJsYXk6OnN0b3BGYWRlT3V0QW5pbWF0aW9uKCkKK3sKKyAgICBt
X2ZyYWN0aW9uRmFkZWRJbiA9IDEuMDsKKyAgICBtX2ZhZGVBbmltYXRpb25UaW1lci5zdG9wKCk7
Cit9CisKK3ZvaWQgUGFnZU92ZXJsYXk6OnN0YXJ0RmFkZUFuaW1hdGlvbigpCit7CisgICAgbV9m
YWRlQW5pbWF0aW9uU3RhcnRUaW1lID0gY3VycmVudFRpbWUoKTsKKyAgICBtX2ZhZGVBbmltYXRp
b25UaW1lci5zdGFydFJlcGVhdGluZygxIC8gZmFkZUFuaW1hdGlvbkZyYW1lUmF0ZSk7Cit9CisK
K3ZvaWQgUGFnZU92ZXJsYXk6OmZhZGVBbmltYXRpb25UaW1lckZpcmVkKCkKK3sKKyAgICBmbG9h
dCBhbmltYXRpb25Qcm9ncmVzcyA9IChjdXJyZW50VGltZSgpIC0gbV9mYWRlQW5pbWF0aW9uU3Rh
cnRUaW1lKSAvIG1fZmFkZUFuaW1hdGlvbkR1cmF0aW9uOworCisgICAgaWYgKGFuaW1hdGlvblBy
b2dyZXNzID49IDEuMCkKKyAgICAgICAgYW5pbWF0aW9uUHJvZ3Jlc3MgPSAxLjA7CisKKyAgICBk
b3VibGUgc2luZSA9IHNpbihwaU92ZXJUd29GbG9hdCAqIGFuaW1hdGlvblByb2dyZXNzKTsKKyAg
ICBmbG9hdCBmYWRlQW5pbWF0aW9uVmFsdWUgPSBzaW5lICogc2luZTsKKworICAgIG1fZnJhY3Rp
b25GYWRlZEluID0gKG1fZmFkZUFuaW1hdGlvblR5cGUgPT0gRmFkZUluQW5pbWF0aW9uKSA/IGZh
ZGVBbmltYXRpb25WYWx1ZSA6IDEgLSBmYWRlQW5pbWF0aW9uVmFsdWU7CisgICAgbV9wYWdlLT5w
YWdlT3ZlcmxheUNvbnRyb2xsZXIoKS5zZXRQYWdlT3ZlcmxheU9wYWNpdHkoKnRoaXMsIG1fZnJh
Y3Rpb25GYWRlZEluKTsKKworICAgIGlmIChhbmltYXRpb25Qcm9ncmVzcyA9PSAxLjApIHsKKyAg
ICAgICAgbV9mYWRlQW5pbWF0aW9uVGltZXIuc3RvcCgpOworCisgICAgICAgIGJvb2wgd2FzRmFk
aW5nT3V0ID0gbV9mYWRlQW5pbWF0aW9uVHlwZSA9PSBGYWRlT3V0QW5pbWF0aW9uOworICAgICAg
ICBtX2ZhZGVBbmltYXRpb25UeXBlID0gTm9BbmltYXRpb247CisKKyAgICAgICAgLy8gSWYgdGhp
cyB3YXMgYSBmYWRlIG91dCwgZ28gYWhlYWQgYW5kIHVuaW5zdGFsbCB0aGUgcGFnZSBvdmVybGF5
LgorICAgICAgICBpZiAod2FzRmFkaW5nT3V0KQorICAgICAgICAgICAgbV9wYWdlLT5wYWdlT3Zl
cmxheUNvbnRyb2xsZXIoKS51bmluc3RhbGxQYWdlT3ZlcmxheSh0aGlzLCBQYWdlT3ZlcmxheTo6
RmFkZU1vZGU6OkRvTm90RmFkZSk7CisgICAgfQorfQorCit2b2lkIFBhZ2VPdmVybGF5OjpjbGVh
cigpCit7CisgICAgbV9wYWdlLT5wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKS5jbGVhclBhZ2VPdmVy
bGF5KCp0aGlzKTsKK30KKworR3JhcGhpY3NMYXllciogUGFnZU92ZXJsYXk6OmxheWVyKCkKK3sK
KyAgICByZXR1cm4gbV9wYWdlLT5wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKS5sYXllckZvck92ZXJs
YXkoKnRoaXMpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvUGFnZU92ZXJsYXkuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZU92
ZXJsYXkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZWI2ZmI4Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlT3ZlcmxheS5oCkBAIC0wLDAg
KzEsMTM4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBQYWdlT3ZlcmxheV9oCisjZGVmaW5lIFBh
Z2VPdmVybGF5X2gKKworI2luY2x1ZGUgIkNvbG9yLmgiCisjaW5jbHVkZSAiRmxvYXRQb2ludC5o
IgorI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2lu
Y2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KKyNpbmNs
dWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFz
cyBGcmFtZTsKK2NsYXNzIEdyYXBoaWNzQ29udGV4dDsKK2NsYXNzIEdyYXBoaWNzTGF5ZXI7Citj
bGFzcyBQYWdlOworY2xhc3MgUGxhdGZvcm1Nb3VzZUV2ZW50OworCitjbGFzcyBQYWdlT3Zlcmxh
eSA6IHB1YmxpYyBSZWZDb3VudGVkPFBhZ2VPdmVybGF5PiB7CisgICAgV1RGX01BS0VfTk9OQ09Q
WUFCTEUoUGFnZU92ZXJsYXkpOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGlj
OgorICAgIGNsYXNzIENsaWVudCB7CisgICAgcHJvdGVjdGVkOgorICAgICAgICB2aXJ0dWFsIH5D
bGllbnQoKSB7IH0KKyAgICAKKyAgICBwdWJsaWM6CisgICAgICAgIHZpcnR1YWwgdm9pZCBwYWdl
T3ZlcmxheURlc3Ryb3llZChQYWdlT3ZlcmxheSopID0gMDsKKyAgICAgICAgdmlydHVhbCB2b2lk
IHdpbGxNb3ZlVG9QYWdlKFBhZ2VPdmVybGF5KiwgUGFnZSopID0gMDsKKyAgICAgICAgdmlydHVh
bCB2b2lkIGRpZE1vdmVUb1BhZ2UoUGFnZU92ZXJsYXkqLCBQYWdlKikgPSAwOworICAgICAgICB2
aXJ0dWFsIHZvaWQgZHJhd1JlY3QoUGFnZU92ZXJsYXkqLCBHcmFwaGljc0NvbnRleHQmLCBjb25z
dCBJbnRSZWN0JiBkaXJ0eVJlY3QpID0gMDsKKyAgICAgICAgdmlydHVhbCBib29sIG1vdXNlRXZl
bnQoUGFnZU92ZXJsYXkqLCBjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmKSA9IDA7CisgICAgICAg
IHZpcnR1YWwgdm9pZCBkaWRTY3JvbGxGcmFtZShQYWdlT3ZlcmxheSosIEZyYW1lJikgeyB9CisK
KyAgICAgICAgdmlydHVhbCBib29sIGNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlU3RyaW5nVmFs
dWVGb3JQb2ludChQYWdlT3ZlcmxheSosIFN0cmluZyAvKiBhdHRyaWJ1dGUgKi8sIEZsb2F0UG9p
bnQgLyogcGFyYW1ldGVyICovLCBTdHJpbmcmIC8qIHZhbHVlICovKSB7IHJldHVybiBmYWxzZTsg
fQorICAgICAgICB2aXJ0dWFsIGJvb2wgY29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVCb29sVmFs
dWVGb3JQb2ludChQYWdlT3ZlcmxheSosIFN0cmluZyAvKiBhdHRyaWJ1dGUgKi8sIEZsb2F0UG9p
bnQgLyogcGFyYW1ldGVyICovLCBib29sJiAvKiB2YWx1ZSAqLykgIHsgcmV0dXJuIGZhbHNlOyB9
CisgICAgICAgIHZpcnR1YWwgVmVjdG9yPFN0cmluZz4gY29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1
dGVOYW1lcyhQYWdlT3ZlcmxheSosIGJvb2wgLyogcGFyYW1ldGVyaXplZE5hbWVzICovKSAgeyBy
ZXR1cm4gVmVjdG9yPFN0cmluZz4oKTsgfQorICAgIH07CisKKyAgICBlbnVtIGNsYXNzIE92ZXJs
YXlUeXBlIHsKKyAgICAgICAgVmlldywgLy8gRml4ZWQgdG8gdGhlIHZpZXcgc2l6ZTsgZG9lcyBu
b3Qgc2NhbGUgb3Igc2Nyb2xsIHdpdGggdGhlIGRvY3VtZW50LCByZXBhaW50cyBvbiBzY3JvbGwu
CisgICAgICAgIERvY3VtZW50LCAvLyBTY2FsZXMgYW5kIHNjcm9sbHMgd2l0aCB0aGUgZG9jdW1l
bnQuCisgICAgfTsKKworICAgIHN0YXRpYyBQYXNzUmVmUHRyPFBhZ2VPdmVybGF5PiBjcmVhdGUo
Q2xpZW50KiwgT3ZlcmxheVR5cGUgPSBPdmVybGF5VHlwZTo6Vmlldyk7CisgICAgdmlydHVhbCB+
UGFnZU92ZXJsYXkoKTsKKworICAgIHZvaWQgc2V0UGFnZShQYWdlKik7CisgICAgdm9pZCBzZXRO
ZWVkc0Rpc3BsYXkoY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KTsKKyAgICB2b2lkIHNldE5lZWRz
RGlzcGxheSgpOworCisgICAgdm9pZCBkcmF3UmVjdChHcmFwaGljc0NvbnRleHQmLCBjb25zdCBJ
bnRSZWN0JiBkaXJ0eVJlY3QpOworICAgIGJvb2wgbW91c2VFdmVudChjb25zdCBQbGF0Zm9ybU1v
dXNlRXZlbnQmKTsKKyAgICB2b2lkIGRpZFNjcm9sbEZyYW1lKEZyYW1lJik7CisKKyAgICBib29s
IGNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlU3RyaW5nVmFsdWVGb3JQb2ludChTdHJpbmcgYXR0
cmlidXRlLCBGbG9hdFBvaW50IHBhcmFtZXRlciwgU3RyaW5nJiB2YWx1ZSk7CisgICAgYm9vbCBj
b3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZUJvb2xWYWx1ZUZvclBvaW50KFN0cmluZyBhdHRyaWJ1
dGUsIEZsb2F0UG9pbnQgcGFyYW1ldGVyLCBib29sJiB2YWx1ZSk7CisgICAgVmVjdG9yPFN0cmlu
Zz4gY29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVOYW1lcyhib29sIHBhcmFtZXRlcml6ZWROYW1l
cyk7CisgICAgCisgICAgdm9pZCBzdGFydEZhZGVJbkFuaW1hdGlvbigpOworICAgIHZvaWQgc3Rh
cnRGYWRlT3V0QW5pbWF0aW9uKCk7CisgICAgdm9pZCBzdG9wRmFkZU91dEFuaW1hdGlvbigpOwor
CisgICAgdm9pZCBjbGVhcigpOworCisgICAgQ2xpZW50KiBjbGllbnQoKSBjb25zdCB7IHJldHVy
biBtX2NsaWVudDsgfQorCisgICAgZW51bSBjbGFzcyBGYWRlTW9kZSB7IERvTm90RmFkZSwgRmFk
ZSB9OworCisgICAgT3ZlcmxheVR5cGUgb3ZlcmxheVR5cGUoKSB7IHJldHVybiBtX292ZXJsYXlU
eXBlOyB9CisKKyAgICBJbnRSZWN0IGJvdW5kcygpIGNvbnN0OworICAgIEludFJlY3QgZnJhbWUo
KSBjb25zdDsKKyAgICB2b2lkIHNldEZyYW1lKEludFJlY3QpOworCisgICAgUkdCQTMyIGJhY2tn
cm91bmRDb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2dyb3VuZENvbG9yOyB9CisgICAgdm9p
ZCBzZXRCYWNrZ3JvdW5kQ29sb3IoUkdCQTMyKTsKKworICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVy
KCk7CisgICAgCitwcm90ZWN0ZWQ6CisgICAgZXhwbGljaXQgUGFnZU92ZXJsYXkoQ2xpZW50Kiwg
T3ZlcmxheVR5cGUpOworCitwcml2YXRlOgorICAgIHZvaWQgc3RhcnRGYWRlQW5pbWF0aW9uKCk7
CisgICAgdm9pZCBmYWRlQW5pbWF0aW9uVGltZXJGaXJlZCgpOworCisgICAgQ2xpZW50KiBtX2Ns
aWVudDsKKyAgICBQYWdlKiBtX3BhZ2U7CisKKyAgICBSdW5Mb29wOjpUaW1lcjxQYWdlT3Zlcmxh
eT4gbV9mYWRlQW5pbWF0aW9uVGltZXI7CisgICAgZG91YmxlIG1fZmFkZUFuaW1hdGlvblN0YXJ0
VGltZTsKKyAgICBkb3VibGUgbV9mYWRlQW5pbWF0aW9uRHVyYXRpb247CisKKyAgICBlbnVtIEZh
ZGVBbmltYXRpb25UeXBlIHsKKyAgICAgICAgTm9BbmltYXRpb24sCisgICAgICAgIEZhZGVJbkFu
aW1hdGlvbiwKKyAgICAgICAgRmFkZU91dEFuaW1hdGlvbiwKKyAgICB9OworCisgICAgRmFkZUFu
aW1hdGlvblR5cGUgbV9mYWRlQW5pbWF0aW9uVHlwZTsKKyAgICBmbG9hdCBtX2ZyYWN0aW9uRmFk
ZWRJbjsKKworICAgIE92ZXJsYXlUeXBlIG1fb3ZlcmxheVR5cGU7CisgICAgSW50UmVjdCBtX292
ZXJyaWRlRnJhbWU7CisKKyAgICBSR0JBMzIgbV9iYWNrZ3JvdW5kQ29sb3I7Cit9OworCit9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFBhZ2VPdmVybGF5X2gKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZU92ZXJsYXlDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvUGFnZU92ZXJsYXlDb250cm9sbGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi5mNDQwM2IzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9QYWdlT3ZlcmxheUNvbnRyb2xsZXIuY3BwCkBAIC0wLDAgKzEsMzQwIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBhZ2VPdmVybGF5Q29udHJv
bGxlci5oIgorCisjaW5jbHVkZSAiQ2hyb21lLmgiCisjaW5jbHVkZSAiQ2hyb21lQ2xpZW50Lmgi
CisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJHcmFwaGljc0xheWVyLmgiCisjaW5jbHVkZSAi
TWFpbkZyYW1lLmgiCisjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlBhZ2VPdmVybGF5Lmgi
CisjaW5jbHVkZSAiU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaCIKKyNpbmNsdWRlICJTZXR0aW5ncy5o
IgorI2luY2x1ZGUgIlRpbGVkQmFja2luZy5oIgorCisvLyBGSVhNRTogU29tZW9uZSBuZWVkcyB0
byBjYWxsIGRpZENoYW5nZVNldHRpbmdzKCkKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitQYWdl
T3ZlcmxheUNvbnRyb2xsZXI6OlBhZ2VPdmVybGF5Q29udHJvbGxlcihQYWdlJiBwYWdlKQorICAg
IDogbV9wYWdlKHBhZ2UpCisgICAgLCBtX2luaXRpYWxpemVkKGZhbHNlKQoreworfQorCit2b2lk
IFBhZ2VPdmVybGF5Q29udHJvbGxlcjo6Y3JlYXRlUm9vdExheWVyc0lmTmVlZGVkKCkKK3sKKyAg
ICBpZiAobV9pbml0aWFsaXplZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9pbml0aWFsaXpl
ZCA9IHRydWU7CisKKyAgICBBU1NFUlQoIW1fZG9jdW1lbnRPdmVybGF5Um9vdExheWVyKTsKKyAg
ICBBU1NFUlQoIW1fdmlld092ZXJsYXlSb290TGF5ZXIpOworCisgICAgbV9kb2N1bWVudE92ZXJs
YXlSb290TGF5ZXIgPSBHcmFwaGljc0xheWVyOjpjcmVhdGUobV9wYWdlLmNocm9tZSgpLmNsaWVu
dCgpLmdyYXBoaWNzTGF5ZXJGYWN0b3J5KCksICp0aGlzKTsKKyAgICBtX3ZpZXdPdmVybGF5Um9v
dExheWVyID0gR3JhcGhpY3NMYXllcjo6Y3JlYXRlKG1fcGFnZS5jaHJvbWUoKS5jbGllbnQoKS5n
cmFwaGljc0xheWVyRmFjdG9yeSgpLCAqdGhpcyk7CisjaWZuZGVmIE5ERUJVRworICAgIG1fZG9j
dW1lbnRPdmVybGF5Um9vdExheWVyLT5zZXROYW1lKCJQYWdlIE92ZXJsYXkgY29udGFpbmVyIChk
b2N1bWVudC1yZWxhdGl2ZSkiKTsKKyAgICBtX3ZpZXdPdmVybGF5Um9vdExheWVyLT5zZXROYW1l
KCJQYWdlIE92ZXJsYXkgY29udGFpbmVyICh2aWV3LXJlbGF0aXZlKSIpOworI2VuZGlmCit9CisK
K3N0YXRpYyB2b2lkIHVwZGF0ZU92ZXJsYXlHZW9tZXRyeShQYWdlT3ZlcmxheSYgb3ZlcmxheSwg
R3JhcGhpY3NMYXllciYgZ3JhcGhpY3NMYXllcikKK3sKKyAgICBJbnRSZWN0IG92ZXJsYXlGcmFt
ZSA9IG92ZXJsYXkuZnJhbWUoKTsKKworICAgIGlmIChvdmVybGF5RnJhbWUubG9jYXRpb24oKSA9
PSBncmFwaGljc0xheWVyLnBvc2l0aW9uKCkgJiYgb3ZlcmxheUZyYW1lLnNpemUoKSA9PSBncmFw
aGljc0xheWVyLnNpemUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZ3JhcGhpY3NMYXllci5z
ZXRQb3NpdGlvbihvdmVybGF5RnJhbWUubG9jYXRpb24oKSk7CisgICAgZ3JhcGhpY3NMYXllci5z
ZXRTaXplKG92ZXJsYXlGcmFtZS5zaXplKCkpOworfQorCit2b2lkIFBhZ2VPdmVybGF5Q29udHJv
bGxlcjo6aW5zdGFsbFBhZ2VPdmVybGF5KFBhc3NSZWZQdHI8UGFnZU92ZXJsYXk+IHBhZ2VPdmVy
bGF5LCBQYWdlT3ZlcmxheTo6RmFkZU1vZGUgZmFkZU1vZGUpCit7CisgICAgY3JlYXRlUm9vdExh
eWVyc0lmTmVlZGVkKCk7CisKKyAgICBSZWZQdHI8UGFnZU92ZXJsYXk+IG92ZXJsYXkgPSBwYWdl
T3ZlcmxheTsKKworICAgIGlmIChtX3BhZ2VPdmVybGF5cy5jb250YWlucyhvdmVybGF5KSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgbV9wYWdlT3ZlcmxheXMuYXBwZW5kKG92ZXJsYXkpOworICAg
IG92ZXJsYXktPnNldFBhZ2UoJm1fcGFnZSk7CisKKyAgICBpZiAoZmFkZU1vZGUgPT0gUGFnZU92
ZXJsYXk6OkZhZGVNb2RlOjpGYWRlKQorICAgICAgICBvdmVybGF5LT5zdGFydEZhZGVJbkFuaW1h
dGlvbigpOworCisgICAgc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzTGF5ZXI+IGxheWVyID0gR3Jh
cGhpY3NMYXllcjo6Y3JlYXRlKG1fcGFnZS5jaHJvbWUoKS5jbGllbnQoKS5ncmFwaGljc0xheWVy
RmFjdG9yeSgpLCAqdGhpcyk7CisgICAgbGF5ZXItPnNldEFuY2hvclBvaW50KEZsb2F0UG9pbnQz
RCgpKTsKKyAgICBsYXllci0+c2V0QmFja2dyb3VuZENvbG9yKG92ZXJsYXktPmJhY2tncm91bmRD
b2xvcigpKTsKKyAgICB1cGRhdGVPdmVybGF5R2VvbWV0cnkoKm92ZXJsYXksICpsYXllcik7Cisj
aWZuZGVmIE5ERUJVRworICAgIGxheWVyLT5zZXROYW1lKCJQYWdlIE92ZXJsYXkgY29udGVudCIp
OworI2VuZGlmCisKKyAgICB1cGRhdGVTZXR0aW5nc0ZvckxheWVyKCpsYXllcik7CisKKyAgICBz
d2l0Y2ggKG92ZXJsYXktPm92ZXJsYXlUeXBlKCkpIHsKKyAgICBjYXNlIFBhZ2VPdmVybGF5OjpP
dmVybGF5VHlwZTo6VmlldzoKKyAgICAgICAgbV92aWV3T3ZlcmxheVJvb3RMYXllci0+YWRkQ2hp
bGQobGF5ZXIuZ2V0KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBhZ2VPdmVybGF5OjpP
dmVybGF5VHlwZTo6RG9jdW1lbnQ6CisgICAgICAgIG1fZG9jdW1lbnRPdmVybGF5Um9vdExheWVy
LT5hZGRDaGlsZChsYXllci5nZXQoKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIG1f
b3ZlcmxheUdyYXBoaWNzTGF5ZXJzLnNldChvdmVybGF5LmdldCgpLCBXVEY6Om1vdmUobGF5ZXIp
KTsKKworICAgIHVwZGF0ZUZvcmNlU3luY2hyb25vdXNTY3JvbGxMYXllclBvc2l0aW9uVXBkYXRl
cygpOworCisgICAgaWYgKEZyYW1lVmlldyogZnJhbWVWaWV3ID0gbV9wYWdlLm1haW5GcmFtZSgp
LnZpZXcoKSkKKyAgICAgICAgZnJhbWVWaWV3LT5lbnRlckNvbXBvc2l0aW5nTW9kZSgpOworfQor
Cit2b2lkIFBhZ2VPdmVybGF5Q29udHJvbGxlcjo6dW5pbnN0YWxsUGFnZU92ZXJsYXkoUGFnZU92
ZXJsYXkqIG92ZXJsYXksIFBhZ2VPdmVybGF5OjpGYWRlTW9kZSBmYWRlTW9kZSkKK3sKKyAgICBp
ZiAoZmFkZU1vZGUgPT0gUGFnZU92ZXJsYXk6OkZhZGVNb2RlOjpGYWRlKSB7CisgICAgICAgIG92
ZXJsYXktPnN0YXJ0RmFkZU91dEFuaW1hdGlvbigpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgb3ZlcmxheS0+c2V0UGFnZShudWxscHRyKTsKKworICAgIG1fb3ZlcmxheUdyYXBoaWNz
TGF5ZXJzLnRha2Uob3ZlcmxheSktPnJlbW92ZUZyb21QYXJlbnQoKTsKKworICAgIHNpemVfdCBv
dmVybGF5SW5kZXggPSBtX3BhZ2VPdmVybGF5cy5maW5kKG92ZXJsYXkpOworICAgIEFTU0VSVChv
dmVybGF5SW5kZXggIT0gbm90Rm91bmQpOworICAgIG1fcGFnZU92ZXJsYXlzLnJlbW92ZShvdmVy
bGF5SW5kZXgpOworCisgICAgdXBkYXRlRm9yY2VTeW5jaHJvbm91c1Njcm9sbExheWVyUG9zaXRp
b25VcGRhdGVzKCk7Cit9CisKK3ZvaWQgUGFnZU92ZXJsYXlDb250cm9sbGVyOjp1cGRhdGVGb3Jj
ZVN5bmNocm9ub3VzU2Nyb2xsTGF5ZXJQb3NpdGlvblVwZGF0ZXMoKQoreworI2lmIEVOQUJMRShB
U1lOQ19TQ1JPTExJTkcpCisgICAgYm9vbCBmb3JjZVN5bmNocm9ub3VzU2Nyb2xsTGF5ZXJQb3Np
dGlvblVwZGF0ZXMgPSBmYWxzZTsKKworICAgIGZvciAoYXV0byYgb3ZlcmxheSA6IG1fcGFnZU92
ZXJsYXlzKSB7CisgICAgICAgIGlmIChvdmVybGF5LT5vdmVybGF5VHlwZSgpID09IFBhZ2VPdmVy
bGF5OjpPdmVybGF5VHlwZTo6VmlldykKKyAgICAgICAgICAgIGZvcmNlU3luY2hyb25vdXNTY3Jv
bGxMYXllclBvc2l0aW9uVXBkYXRlcyA9IHRydWU7CisgICAgfQorCisgICAgaWYgKFNjcm9sbGlu
Z0Nvb3JkaW5hdG9yKiBzY3JvbGxpbmdDb29yZGluYXRvciA9IG1fcGFnZS5zY3JvbGxpbmdDb29y
ZGluYXRvcigpKQorICAgICAgICBzY3JvbGxpbmdDb29yZGluYXRvci0+c2V0Rm9yY2VTeW5jaHJv
bm91c1Njcm9sbExheWVyUG9zaXRpb25VcGRhdGVzKGZvcmNlU3luY2hyb25vdXNTY3JvbGxMYXll
clBvc2l0aW9uVXBkYXRlcyk7CisjZW5kaWYKK30KKwordm9pZCBQYWdlT3ZlcmxheUNvbnRyb2xs
ZXI6OnNldFBhZ2VPdmVybGF5TmVlZHNEaXNwbGF5KFBhZ2VPdmVybGF5JiBvdmVybGF5LCBjb25z
dCBXZWJDb3JlOjpJbnRSZWN0JiBkaXJ0eVJlY3QpCit7CisgICAgQVNTRVJUKG1fcGFnZU92ZXJs
YXlzLmNvbnRhaW5zKCZvdmVybGF5KSk7CisgICAgR3JhcGhpY3NMYXllciYgZ3JhcGhpY3NMYXll
ciA9ICptX292ZXJsYXlHcmFwaGljc0xheWVycy5nZXQoJm92ZXJsYXkpOworCisgICAgaWYgKCFn
cmFwaGljc0xheWVyLmRyYXdzQ29udGVudCgpKSB7CisgICAgICAgIGdyYXBoaWNzTGF5ZXIuc2V0
RHJhd3NDb250ZW50KHRydWUpOworICAgICAgICB1cGRhdGVPdmVybGF5R2VvbWV0cnkob3Zlcmxh
eSwgZ3JhcGhpY3NMYXllcik7CisgICAgfQorCisgICAgZ3JhcGhpY3NMYXllci5zZXROZWVkc0Rp
c3BsYXlJblJlY3QoZGlydHlSZWN0KTsKK30KKwordm9pZCBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6
OnNldFBhZ2VPdmVybGF5T3BhY2l0eShQYWdlT3ZlcmxheSYgb3ZlcmxheSwgZmxvYXQgb3BhY2l0
eSkKK3sKKyAgICBBU1NFUlQobV9wYWdlT3ZlcmxheXMuY29udGFpbnMoJm92ZXJsYXkpKTsKKyAg
ICBtX292ZXJsYXlHcmFwaGljc0xheWVycy5nZXQoJm92ZXJsYXkpLT5zZXRPcGFjaXR5KG9wYWNp
dHkpOworfQorCit2b2lkIFBhZ2VPdmVybGF5Q29udHJvbGxlcjo6Y2xlYXJQYWdlT3ZlcmxheShQ
YWdlT3ZlcmxheSYgb3ZlcmxheSkKK3sKKyAgICBBU1NFUlQobV9wYWdlT3ZlcmxheXMuY29udGFp
bnMoJm92ZXJsYXkpKTsKKyAgICBtX292ZXJsYXlHcmFwaGljc0xheWVycy5nZXQoJm92ZXJsYXkp
LT5zZXREcmF3c0NvbnRlbnQoZmFsc2UpOworfQorCitHcmFwaGljc0xheWVyKiBQYWdlT3Zlcmxh
eUNvbnRyb2xsZXI6OmxheWVyRm9yT3ZlcmxheShQYWdlT3ZlcmxheSYgb3ZlcmxheSkgY29uc3QK
K3sKKyAgICBBU1NFUlQobV9wYWdlT3ZlcmxheXMuY29udGFpbnMoJm92ZXJsYXkpKTsKKyAgICBy
ZXR1cm4gbV9vdmVybGF5R3JhcGhpY3NMYXllcnMuZ2V0KCZvdmVybGF5KTsKK30KKwordm9pZCBQ
YWdlT3ZlcmxheUNvbnRyb2xsZXI6OndpbGxBdHRhY2hSb290TGF5ZXIoKQoreworICAgIGNyZWF0
ZVJvb3RMYXllcnNJZk5lZWRlZCgpOworCisgICAgZm9yIChhdXRvJiBvdmVybGF5QW5kTGF5ZXIg
OiBtX292ZXJsYXlHcmFwaGljc0xheWVycykKKyAgICAgICAgdXBkYXRlT3ZlcmxheUdlb21ldHJ5
KCpvdmVybGF5QW5kTGF5ZXIua2V5LCAqb3ZlcmxheUFuZExheWVyLnZhbHVlKTsKK30KKwordm9p
ZCBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6OmRpZENoYW5nZVZpZXdTaXplKCkKK3sKKyAgICBmb3Ig
KGF1dG8mIG92ZXJsYXlBbmRMYXllciA6IG1fb3ZlcmxheUdyYXBoaWNzTGF5ZXJzKSB7CisgICAg
ICAgIGlmIChvdmVybGF5QW5kTGF5ZXIua2V5LT5vdmVybGF5VHlwZSgpID09IFBhZ2VPdmVybGF5
OjpPdmVybGF5VHlwZTo6VmlldykKKyAgICAgICAgICAgIHVwZGF0ZU92ZXJsYXlHZW9tZXRyeSgq
b3ZlcmxheUFuZExheWVyLmtleSwgKm92ZXJsYXlBbmRMYXllci52YWx1ZSk7CisgICAgfQorfQor
Cit2b2lkIFBhZ2VPdmVybGF5Q29udHJvbGxlcjo6ZGlkQ2hhbmdlRG9jdW1lbnRTaXplKCkKK3sK
KyAgICBmb3IgKGF1dG8mIG92ZXJsYXlBbmRMYXllciA6IG1fb3ZlcmxheUdyYXBoaWNzTGF5ZXJz
KSB7CisgICAgICAgIGlmIChvdmVybGF5QW5kTGF5ZXIua2V5LT5vdmVybGF5VHlwZSgpID09IFBh
Z2VPdmVybGF5OjpPdmVybGF5VHlwZTo6RG9jdW1lbnQpCisgICAgICAgICAgICB1cGRhdGVPdmVy
bGF5R2VvbWV0cnkoKm92ZXJsYXlBbmRMYXllci5rZXksICpvdmVybGF5QW5kTGF5ZXIudmFsdWUp
OworICAgIH0KK30KKwordm9pZCBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6OmRpZENoYW5nZVNldHRp
bmdzKCkKK3sKKyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGFwcGx5IHRoZXNlIHNldHRpbmdzIHRv
IGFsbCBvdmVybGF5IHN1YmxheWVycyByZWN1cnNpdmVseS4KKyAgICBmb3IgKGF1dG8mIGdyYXBo
aWNzTGF5ZXIgOiBtX292ZXJsYXlHcmFwaGljc0xheWVycy52YWx1ZXMoKSkKKyAgICAgICAgdXBk
YXRlU2V0dGluZ3NGb3JMYXllcigqZ3JhcGhpY3NMYXllcik7Cit9CisKK3ZvaWQgUGFnZU92ZXJs
YXlDb250cm9sbGVyOjpkaWRDaGFuZ2VEZXZpY2VTY2FsZUZhY3RvcigpCit7CisgICAgY3JlYXRl
Um9vdExheWVyc0lmTmVlZGVkKCk7CisKKyAgICBtX2RvY3VtZW50T3ZlcmxheVJvb3RMYXllci0+
bm90ZURldmljZU9yUGFnZVNjYWxlRmFjdG9yQ2hhbmdlZEluY2x1ZGluZ0Rlc2NlbmRhbnRzKCk7
CisgICAgbV92aWV3T3ZlcmxheVJvb3RMYXllci0+bm90ZURldmljZU9yUGFnZVNjYWxlRmFjdG9y
Q2hhbmdlZEluY2x1ZGluZ0Rlc2NlbmRhbnRzKCk7CisKKyAgICBmb3IgKGF1dG8mIGdyYXBoaWNz
TGF5ZXIgOiBtX292ZXJsYXlHcmFwaGljc0xheWVycy52YWx1ZXMoKSkKKyAgICAgICAgZ3JhcGhp
Y3NMYXllci0+c2V0TmVlZHNEaXNwbGF5KCk7Cit9CisKK3ZvaWQgUGFnZU92ZXJsYXlDb250cm9s
bGVyOjpkaWRDaGFuZ2VFeHBvc2VkUmVjdCgpCit7CisgICAgbV9wYWdlLmNocm9tZSgpLmNsaWVu
dCgpLnNjaGVkdWxlQ29tcG9zaXRpbmdMYXllckZsdXNoKCk7Cit9CisKK3ZvaWQgUGFnZU92ZXJs
YXlDb250cm9sbGVyOjpkaWRTY3JvbGxGcmFtZShGcmFtZSYgZnJhbWUpCit7CisgICAgZm9yIChh
dXRvJiBvdmVybGF5QW5kTGF5ZXIgOiBtX292ZXJsYXlHcmFwaGljc0xheWVycykgeworICAgICAg
ICBpZiAob3ZlcmxheUFuZExheWVyLmtleS0+b3ZlcmxheVR5cGUoKSA9PSBQYWdlT3ZlcmxheTo6
T3ZlcmxheVR5cGU6OlZpZXcgfHwgIWZyYW1lLmlzTWFpbkZyYW1lKCkpCisgICAgICAgICAgICBv
dmVybGF5QW5kTGF5ZXIudmFsdWUtPnNldE5lZWRzRGlzcGxheSgpOworICAgICAgICBvdmVybGF5
QW5kTGF5ZXIua2V5LT5kaWRTY3JvbGxGcmFtZShmcmFtZSk7CisgICAgfQorfQorCit2b2lkIFBh
Z2VPdmVybGF5Q29udHJvbGxlcjo6dXBkYXRlU2V0dGluZ3NGb3JMYXllcihHcmFwaGljc0xheWVy
JiBsYXllcikKK3sKKyAgICBTZXR0aW5ncyYgc2V0dGluZ3MgPSBtX3BhZ2Uuc2V0dGluZ3MoKTsK
KyAgICBsYXllci5zZXRBY2NlbGVyYXRlc0RyYXdpbmcoc2V0dGluZ3MuYWNjZWxlcmF0ZWREcmF3
aW5nRW5hYmxlZCgpKTsKKyAgICBsYXllci5zZXRTaG93RGVidWdCb3JkZXIoc2V0dGluZ3Muc2hv
d0RlYnVnQm9yZGVycygpKTsKKyAgICBsYXllci5zZXRTaG93UmVwYWludENvdW50ZXIoc2V0dGlu
Z3Muc2hvd1JlcGFpbnRDb3VudGVyKCkpOworfQorCitib29sIFBhZ2VPdmVybGF5Q29udHJvbGxl
cjo6aGFuZGxlTW91c2VFdmVudChjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIG1vdXNlRXZlbnQp
Cit7CisgICAgaWYgKCFtX3BhZ2VPdmVybGF5cy5zaXplKCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIGZvciAoYXV0byBpdCA9IG1fcGFnZU92ZXJsYXlzLnJiZWdpbigpLCBlbmQgPSBt
X3BhZ2VPdmVybGF5cy5yZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBpZiAoKCpp
dCktPm1vdXNlRXZlbnQobW91c2VFdmVudCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUGFnZU92ZXJsYXlDb250cm9sbGVy
Ojpjb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVN0cmluZ1ZhbHVlRm9yUG9pbnQoU3RyaW5nIGF0
dHJpYnV0ZSwgRmxvYXRQb2ludCBwYXJhbWV0ZXIsIFN0cmluZyYgdmFsdWUpCit7CisgICAgaWYg
KCFtX3BhZ2VPdmVybGF5cy5zaXplKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGZv
ciAoYXV0byBpdCA9IG1fcGFnZU92ZXJsYXlzLnJiZWdpbigpLCBlbmQgPSBtX3BhZ2VPdmVybGF5
cy5yZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBpZiAoKCppdCktPmNvcHlBY2Nl
c3NpYmlsaXR5QXR0cmlidXRlU3RyaW5nVmFsdWVGb3JQb2ludChhdHRyaWJ1dGUsIHBhcmFtZXRl
ciwgdmFsdWUpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0dXJu
IGZhbHNlOworfQorCitib29sIFBhZ2VPdmVybGF5Q29udHJvbGxlcjo6Y29weUFjY2Vzc2liaWxp
dHlBdHRyaWJ1dGVCb29sVmFsdWVGb3JQb2ludChTdHJpbmcgYXR0cmlidXRlLCBGbG9hdFBvaW50
IHBhcmFtZXRlciwgYm9vbCYgdmFsdWUpCit7CisgICAgaWYgKCFtX3BhZ2VPdmVybGF5cy5zaXpl
KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGZvciAoYXV0byBpdCA9IG1fcGFnZU92
ZXJsYXlzLnJiZWdpbigpLCBlbmQgPSBtX3BhZ2VPdmVybGF5cy5yZW5kKCk7IGl0ICE9IGVuZDsg
KytpdCkgeworICAgICAgICBpZiAoKCppdCktPmNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlQm9v
bFZhbHVlRm9yUG9pbnQoYXR0cmlidXRlLCBwYXJhbWV0ZXIsIHZhbHVlKSkKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK1ZlY3Rv
cjxTdHJpbmc+IFBhZ2VPdmVybGF5Q29udHJvbGxlcjo6Y29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1
dGVzTmFtZXMoYm9vbCBwYXJhbWV0ZXJpemVkTmFtZXMpCit7CisgICAgaWYgKCFtX3BhZ2VPdmVy
bGF5cy5zaXplKCkpCisgICAgICAgIHJldHVybiBWZWN0b3I8U3RyaW5nPigpOworCisgICAgZm9y
IChhdXRvIGl0ID0gbV9wYWdlT3ZlcmxheXMucmJlZ2luKCksIGVuZCA9IG1fcGFnZU92ZXJsYXlz
LnJlbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIFZlY3RvcjxTdHJpbmc+IG5hbWVz
ID0gKCppdCktPmNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlTmFtZXMocGFyYW1ldGVyaXplZE5h
bWVzKTsKKyAgICAgICAgaWYgKCFuYW1lcy5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm4g
bmFtZXM7CisgICAgfQorCisgICAgcmV0dXJuIFZlY3RvcjxTdHJpbmc+KCk7Cit9CisKK3ZvaWQg
UGFnZU92ZXJsYXlDb250cm9sbGVyOjpwYWludENvbnRlbnRzKGNvbnN0IFdlYkNvcmU6OkdyYXBo
aWNzTGF5ZXIqIGdyYXBoaWNzTGF5ZXIsIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYgZ3JhcGhp
Y3NDb250ZXh0LCBXZWJDb3JlOjpHcmFwaGljc0xheWVyUGFpbnRpbmdQaGFzZSwgY29uc3QgV2Vi
Q29yZTo6RmxvYXRSZWN0JiBjbGlwUmVjdCkKK3sKKyAgICBmb3IgKGF1dG8gaXQgPSBtX292ZXJs
YXlHcmFwaGljc0xheWVycy5iZWdpbigpLCBlbmQgPSBtX292ZXJsYXlHcmFwaGljc0xheWVycy5l
bmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIGlmIChpdC0+dmFsdWUuZ2V0KCkgIT0g
Z3JhcGhpY3NMYXllcikKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIEdyYXBoaWNz
Q29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihncmFwaGljc0NvbnRleHQpOworICAgICAgICBn
cmFwaGljc0NvbnRleHQuY2xpcChjbGlwUmVjdCk7CisgICAgICAgIGl0LT5rZXktPmRyYXdSZWN0
KGdyYXBoaWNzQ29udGV4dCwgZW5jbG9zaW5nSW50UmVjdChjbGlwUmVjdCkpOworCisgICAgICAg
IHJldHVybjsKKyAgICB9Cit9CisKK2Zsb2F0IFBhZ2VPdmVybGF5Q29udHJvbGxlcjo6ZGV2aWNl
U2NhbGVGYWN0b3IoKSBjb25zdAoreworICAgIHJldHVybiBtX3BhZ2UuZGV2aWNlU2NhbGVGYWN0
b3IoKTsKK30KKwordm9pZCBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6Om5vdGlmeUZsdXNoUmVxdWly
ZWQoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciopCit7CisgICAgbV9wYWdlLmNocm9tZSgp
LmNsaWVudCgpLnNjaGVkdWxlQ29tcG9zaXRpbmdMYXllckZsdXNoKCk7Cit9CisKK3ZvaWQgUGFn
ZU92ZXJsYXlDb250cm9sbGVyOjpkaWRDaGFuZ2VPdmVybGF5RnJhbWUoUGFnZU92ZXJsYXkmIG92
ZXJsYXkpCit7CisgICAgQVNTRVJUKG1fcGFnZU92ZXJsYXlzLmNvbnRhaW5zKCZvdmVybGF5KSk7
CisgICAgdXBkYXRlT3ZlcmxheUdlb21ldHJ5KG92ZXJsYXksICptX292ZXJsYXlHcmFwaGljc0xh
eWVycy5nZXQoJm92ZXJsYXkpKTsKK30KKwordm9pZCBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6OmRp
ZENoYW5nZU92ZXJsYXlCYWNrZ3JvdW5kQ29sb3IoUGFnZU92ZXJsYXkmIG92ZXJsYXkpCit7Cisg
ICAgQVNTRVJUKG1fcGFnZU92ZXJsYXlzLmNvbnRhaW5zKCZvdmVybGF5KSk7CisgICAgbV9vdmVy
bGF5R3JhcGhpY3NMYXllcnMuZ2V0KCZvdmVybGF5KS0+c2V0QmFja2dyb3VuZENvbG9yKG92ZXJs
YXkuYmFja2dyb3VuZENvbG9yKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZU92ZXJsYXlDb250cm9sbGVyLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL1BhZ2VPdmVybGF5Q29udHJvbGxlci5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLmM0MTJlMTAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL1BhZ2VPdmVybGF5Q29udHJvbGxlci5oCkBAIC0wLDAgKzEsMTAwIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2lmbmRlZiBQYWdlT3ZlcmxheUNvbnRyb2xsZXJfaAorI2RlZmluZSBQYWdlT3Zl
cmxheUNvbnRyb2xsZXJfaAorCisjaW5jbHVkZSAiR3JhcGhpY3NMYXllckNsaWVudC5oIgorI2lu
Y2x1ZGUgIlBhZ2VPdmVybGF5LmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRl
IDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2NsYXNzIEZyYW1lOworY2xhc3MgUGFnZTsKK2NsYXNzIFBsYXRmb3JtTW91c2VF
dmVudDsKKworY2xhc3MgUGFnZU92ZXJsYXlDb250cm9sbGVyIDogcHVibGljIEdyYXBoaWNzTGF5
ZXJDbGllbnQgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFBhZ2VPdmVybGF5Q29udHJvbGxl
cik7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgUGFnZU92ZXJs
YXlDb250cm9sbGVyKFBhZ2UmKTsKKworICAgIEdyYXBoaWNzTGF5ZXIqIGRvY3VtZW50T3Zlcmxh
eVJvb3RMYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fZG9jdW1lbnRPdmVybGF5Um9vdExheWVyLmdl
dCgpOyB9CisgICAgR3JhcGhpY3NMYXllciogdmlld092ZXJsYXlSb290TGF5ZXIoKSBjb25zdCB7
IHJldHVybiBtX3ZpZXdPdmVybGF5Um9vdExheWVyLmdldCgpOyB9CisKKyAgICB2b2lkIGluc3Rh
bGxQYWdlT3ZlcmxheShQYXNzUmVmUHRyPFBhZ2VPdmVybGF5PiwgUGFnZU92ZXJsYXk6OkZhZGVN
b2RlKTsKKyAgICB2b2lkIHVuaW5zdGFsbFBhZ2VPdmVybGF5KFBhZ2VPdmVybGF5KiwgUGFnZU92
ZXJsYXk6OkZhZGVNb2RlKTsKKworICAgIHZvaWQgc2V0UGFnZU92ZXJsYXlOZWVkc0Rpc3BsYXko
UGFnZU92ZXJsYXkmLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdm9pZCBzZXRQYWdlT3ZlcmxheU9w
YWNpdHkoUGFnZU92ZXJsYXkmLCBmbG9hdCk7CisgICAgdm9pZCBjbGVhclBhZ2VPdmVybGF5KFBh
Z2VPdmVybGF5Jik7CisgICAgR3JhcGhpY3NMYXllciogbGF5ZXJGb3JPdmVybGF5KFBhZ2VPdmVy
bGF5JikgY29uc3Q7CisKKyAgICB2b2lkIHdpbGxBdHRhY2hSb290TGF5ZXIoKTsKKworICAgIHZv
aWQgZGlkQ2hhbmdlVmlld1NpemUoKTsKKyAgICB2b2lkIGRpZENoYW5nZURvY3VtZW50U2l6ZSgp
OworICAgIHZvaWQgZGlkQ2hhbmdlU2V0dGluZ3MoKTsKKyAgICB2b2lkIGRpZENoYW5nZURldmlj
ZVNjYWxlRmFjdG9yKCk7CisgICAgdm9pZCBkaWRDaGFuZ2VFeHBvc2VkUmVjdCgpOworICAgIHZv
aWQgZGlkU2Nyb2xsRnJhbWUoRnJhbWUmKTsKKworICAgIHZvaWQgZGlkQ2hhbmdlT3ZlcmxheUZy
YW1lKFBhZ2VPdmVybGF5Jik7CisgICAgdm9pZCBkaWRDaGFuZ2VPdmVybGF5QmFja2dyb3VuZENv
bG9yKFBhZ2VPdmVybGF5Jik7CisKKyAgICBpbnQgb3ZlcmxheUNvdW50KCkgY29uc3QgeyByZXR1
cm4gbV9vdmVybGF5R3JhcGhpY3NMYXllcnMuc2l6ZSgpOyB9CisKKyAgICBib29sIGhhbmRsZU1v
dXNlRXZlbnQoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50Jik7CisKKyAgICBib29sIGNvcHlBY2Nl
c3NpYmlsaXR5QXR0cmlidXRlU3RyaW5nVmFsdWVGb3JQb2ludChTdHJpbmcgYXR0cmlidXRlLCBG
bG9hdFBvaW50LCBTdHJpbmcmIHZhbHVlKTsKKyAgICBib29sIGNvcHlBY2Nlc3NpYmlsaXR5QXR0
cmlidXRlQm9vbFZhbHVlRm9yUG9pbnQoU3RyaW5nIGF0dHJpYnV0ZSwgRmxvYXRQb2ludCwgYm9v
bCYgdmFsdWUpOworICAgIFZlY3RvcjxTdHJpbmc+IGNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRl
c05hbWVzKGJvb2wgcGFyYW1ldGVyaXplZE5hbWVzKTsKKworcHJpdmF0ZToKKyAgICB2b2lkIGNy
ZWF0ZVJvb3RMYXllcnNJZk5lZWRlZCgpOworCisgICAgdm9pZCB1cGRhdGVTZXR0aW5nc0Zvckxh
eWVyKEdyYXBoaWNzTGF5ZXImKTsKKyAgICB2b2lkIHVwZGF0ZUZvcmNlU3luY2hyb25vdXNTY3Jv
bGxMYXllclBvc2l0aW9uVXBkYXRlcygpOworCisgICAgLy8gR3JhcGhpY3NMYXllckNsaWVudAor
ICAgIHZpcnR1YWwgdm9pZCBub3RpZnlGbHVzaFJlcXVpcmVkKGNvbnN0IEdyYXBoaWNzTGF5ZXIq
KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50cyhjb25zdCBHcmFwaGlj
c0xheWVyKiwgR3JhcGhpY3NDb250ZXh0JiwgR3JhcGhpY3NMYXllclBhaW50aW5nUGhhc2UsIGNv
bnN0IEZsb2F0UmVjdCYgY2xpcFJlY3QpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgZmxvYXQgZGV2
aWNlU2NhbGVGYWN0b3IoKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wgc2hvdWxk
U2tpcExheWVySW5EdW1wKGNvbnN0IEdyYXBoaWNzTGF5ZXIqKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiB0cnVlOyB9CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NMYXllcj4gbV9kb2N1
bWVudE92ZXJsYXlSb290TGF5ZXI7CisgICAgc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzTGF5ZXI+
IG1fdmlld092ZXJsYXlSb290TGF5ZXI7CisgICAgSGFzaE1hcDxQYWdlT3ZlcmxheSosIHN0ZDo6
dW5pcXVlX3B0cjxHcmFwaGljc0xheWVyPj4gbV9vdmVybGF5R3JhcGhpY3NMYXllcnM7CisgICAg
VmVjdG9yPFJlZlB0cjxQYWdlT3ZlcmxheT4+IG1fcGFnZU92ZXJsYXlzOworICAgIFBhZ2UmIG1f
cGFnZTsKKyAgICBib29sIG1faW5pdGlhbGl6ZWQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKKworI2VuZGlmIC8vIFBhZ2VPdmVybGF5Q29udHJvbGxlcl9oCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyQ2xpZW50LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyQ2xpZW50LmgKaW5kZXgg
OGE0ODMzMy4uMjU5MjJjYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NMYXllckNsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXJDbGllbnQuaApAQCAtMjYsNiArMjYsOCBAQAogI2lmbmRl
ZiBHcmFwaGljc0xheWVyQ2xpZW50X2gKICNkZWZpbmUgR3JhcGhpY3NMYXllckNsaWVudF9oCiAK
KyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNz
IEZsb2F0UG9pbnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGF5ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAppbmRl
eCA1ZjNhNDk3Li43ODBmYzAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGF5ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXll
ci5jcHAKQEAgLTIzMjIsNyArMjMyMiw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnNjcm9sbFRvKGlu
dCB4LCBpbnQgeSkKIAogICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkU2Nyb2xsTGF5
ZXIoJmZyYW1lKTsKICAgICBpZiAoc2Nyb2xsc092ZXJmbG93KCkpCi0gICAgICAgIGZyYW1lLmxv
YWRlcigpLmNsaWVudCgpLmRpZENoYW5nZVNjcm9sbE9mZnNldCgpOworICAgICAgICB2aWV3LmZy
YW1lVmlldygpLmRpZENoYW5nZVNjcm9sbE9mZnNldCgpOwogCiAgICAgdmlldy5mcmFtZVZpZXco
KS5yZXN1bWVWaXNpYmxlSW1hZ2VBbmltYXRpb25zSW5jbHVkaW5nU3ViZnJhbWVzKCk7CiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9y
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3Bw
CmluZGV4IDRiZTQ2OTEuLmQyYzI2OTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwCkBAIC00NSw2ICs0NSw3IEBACiAjaW5jbHVk
ZSAiTWFpbkZyYW1lLmgiCiAjaW5jbHVkZSAiTm9kZUxpc3QuaCIKICNpbmNsdWRlICJQYWdlLmgi
CisjaW5jbHVkZSAiUGFnZU92ZXJsYXlDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyRW1i
ZWRkZWRPYmplY3QuaCIKICNpbmNsdWRlICJSZW5kZXJGbG93VGhyZWFkLmgiCiAjaW5jbHVkZSAi
UmVuZGVyRnVsbFNjcmVlbi5oIgpAQCAtNjQzLDcgKzY0NCw4IEBAIHZvaWQgUmVuZGVyTGF5ZXJD
b21wb3NpdG9yOjp1cGRhdGVDb21wb3NpdGluZ0xheWVyc1RpbWVyRmlyZWQoVGltZXI8UmVuZGVy
TGF5ZXJDCiAKIGJvb2wgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpoYXNBbnlBZGRpdGlvbmFsQ29t
cG9zaXRlZExheWVycyhjb25zdCBSZW5kZXJMYXllciYgcm9vdExheWVyKSBjb25zdAogewotICAg
IHJldHVybiBtX2NvbXBvc2l0ZWRMYXllckNvdW50ID4gKHJvb3RMYXllci5pc0NvbXBvc2l0ZWQo
KSA/IDEgOiAwKTsKKyAgICBpbnQgbGF5ZXJDb3VudCA9IG1fY29tcG9zaXRlZExheWVyQ291bnQg
KyBtX3JlbmRlclZpZXcuZnJhbWUoKS5wYWdlKCktPnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLm92
ZXJsYXlDb3VudCgpOworICAgIHJldHVybiBsYXllckNvdW50ID4gKHJvb3RMYXllci5pc0NvbXBv
c2l0ZWQoKSA/IDEgOiAwKTsKIH0KIAogdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmNhbmNl
bENvbXBvc2l0aW5nTGF5ZXJVcGRhdGUoKQpAQCAtNjY1LDcgKzY2Nyw3IEBAIHZvaWQgUmVuZGVy
TGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVDb21wb3NpdGluZ0xheWVycyhDb21wb3NpdGluZ1VwZGF0
ZVR5cGUgdXBkYXRlCiAgICAgaWYgKG1fcmVuZGVyVmlldy5uZWVkc0xheW91dCgpKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBpZiAobV9mb3JjZUNvbXBvc2l0aW5nTW9kZSAmJiAhbV9jb21wb3Np
dGluZykKKyAgICBpZiAoKG1fZm9yY2VDb21wb3NpdGluZ01vZGUgfHwgbV9yZW5kZXJWaWV3LmZy
YW1lKCkucGFnZSgpLT5wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKS5vdmVybGF5Q291bnQoKSkgJiYg
IW1fY29tcG9zaXRpbmcpCiAgICAgICAgIGVuYWJsZUNvbXBvc2l0aW5nTW9kZSh0cnVlKTsKIAog
ICAgIGlmICghbV9yZWV2YWx1YXRlQ29tcG9zaXRpbmdBZnRlckxheW91dCAmJiAhbV9jb21wb3Np
dGluZykKQEAgLTc0OCw3ICs3NTAsNyBAQCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6dXBk
YXRlQ29tcG9zaXRpbmdMYXllcnMoQ29tcG9zaXRpbmdVcGRhdGVUeXBlIHVwZGF0ZQogCiAgICAg
ICAgIC8vIEhvc3QgdGhlIGRvY3VtZW50IGxheWVyIGluIHRoZSBSZW5kZXJWaWV3J3Mgcm9vdCBs
YXllci4KICAgICAgICAgaWYgKGlzRnVsbFVwZGF0ZSkgewotICAgICAgICAgICAgYXBwZW5kT3Zl
cmxheUxheWVycyhjaGlsZExpc3QpOworICAgICAgICAgICAgYXBwZW5kRG9jdW1lbnRPdmVybGF5
TGF5ZXJzKGNoaWxkTGlzdCk7CiAgICAgICAgICAgICAvLyBFdmVuIHdoZW4gY2hpbGRMaXN0IGlz
IGVtcHR5LCBkb24ndCBkcm9wIG91dCBvZiBjb21wb3NpdGluZyBtb2RlIGlmIHRoZXJlIGFyZQog
ICAgICAgICAgICAgLy8gY29tcG9zaXRlZCBsYXllcnMgdGhhdCB3ZSBkaWRuJ3QgaGl0IGluIG91
ciB0cmF2ZXJzYWwgKGUuZy4gYmVjYXVzZSBvZiB2aXNpYmlsaXR5OmhpZGRlbikuCiAgICAgICAg
ICAgICBpZiAoY2hpbGRMaXN0LmlzRW1wdHkoKSAmJiAhaGFzQW55QWRkaXRpb25hbENvbXBvc2l0
ZWRMYXllcnMoKnVwZGF0ZVJvb3QpKQpAQCAtNzg0LDE0ICs3ODYsMTggQEAgdm9pZCBSZW5kZXJM
YXllckNvbXBvc2l0b3I6OnVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJzKENvbXBvc2l0aW5nVXBkYXRl
VHlwZSB1cGRhdGUKICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmxheWVyVHJlZURpZENo
YW5nZShwYWdlKCkpOwogfQogCi12b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6YXBwZW5kT3Zl
cmxheUxheWVycyhWZWN0b3I8R3JhcGhpY3NMYXllcio+JiBjaGlsZExpc3QpCit2b2lkIFJlbmRl
ckxheWVyQ29tcG9zaXRvcjo6YXBwZW5kRG9jdW1lbnRPdmVybGF5TGF5ZXJzKFZlY3RvcjxHcmFw
aGljc0xheWVyKj4mIGNoaWxkTGlzdCkKIHsKICAgICBGcmFtZSYgZnJhbWUgPSBtX3JlbmRlclZp
ZXcuZnJhbWVWaWV3KCkuZnJhbWUoKTsKKyAgICBpZiAoIWZyYW1lLmlzTWFpbkZyYW1lKCkpCisg
ICAgICAgIHJldHVybjsKKwogICAgIFBhZ2UqIHBhZ2UgPSBmcmFtZS5wYWdlKCk7CiAgICAgaWYg
KCFwYWdlKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoR3JhcGhpY3NMYXllciogb3Zlcmxh
eUxheWVyID0gcGFnZS0+Y2hyb21lKCkuY2xpZW50KCkuZG9jdW1lbnRPdmVybGF5TGF5ZXJGb3JG
cmFtZShmcmFtZSkpCisgICAgcGFnZS0+cGFnZU92ZXJsYXlDb250cm9sbGVyKCkud2lsbEF0dGFj
aFJvb3RMYXllcigpOworICAgIGlmIChHcmFwaGljc0xheWVyKiBvdmVybGF5TGF5ZXIgPSBwYWdl
LT5wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKS5kb2N1bWVudE92ZXJsYXlSb290TGF5ZXIoKSkKICAg
ICAgICAgY2hpbGRMaXN0LmFwcGVuZChvdmVybGF5TGF5ZXIpOwogfQogCkBAIC0zMzY2LDYgKzMz
NzIsMTAgQEAgdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmF0dGFjaFJvb3RMYXllcihSb290
TGF5ZXJBdHRhY2htZW50IGF0dGFjaG1lbnQpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogCiAg
ICAgICAgICAgICBwYWdlLT5jaHJvbWUoKS5jbGllbnQoKS5hdHRhY2hSb290R3JhcGhpY3NMYXll
cigmZnJhbWUsIHJvb3RHcmFwaGljc0xheWVyKCkpOworICAgICAgICAgICAgaWYgKGZyYW1lLmlz
TWFpbkZyYW1lKCkpIHsKKyAgICAgICAgICAgICAgICBwYWdlLT5wYWdlT3ZlcmxheUNvbnRyb2xs
ZXIoKS53aWxsQXR0YWNoUm9vdExheWVyKCk7CisgICAgICAgICAgICAgICAgcGFnZS0+Y2hyb21l
KCkuY2xpZW50KCkuYXR0YWNoVmlld092ZXJsYXlHcmFwaGljc0xheWVyKCZmcmFtZSwgcGFnZS0+
cGFnZU92ZXJsYXlDb250cm9sbGVyKCkudmlld092ZXJsYXlSb290TGF5ZXIoKSk7CisgICAgICAg
ICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIFJvb3RM
YXllckF0dGFjaGVkVmlhRW5jbG9zaW5nRnJhbWU6IHsKQEAgLTM0MTAsNiArMzQyMCw4IEBAIHZv
aWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpkZXRhY2hSb290TGF5ZXIoKQogICAgICAgICAgICAg
cmV0dXJuOwogCiAgICAgICAgIHBhZ2UtPmNocm9tZSgpLmNsaWVudCgpLmF0dGFjaFJvb3RHcmFw
aGljc0xheWVyKCZmcmFtZSwgMCk7CisgICAgICAgIGlmIChmcmFtZS5pc01haW5GcmFtZSgpKQor
ICAgICAgICAgICAgcGFnZS0+Y2hyb21lKCkuY2xpZW50KCkuYXR0YWNoVmlld092ZXJsYXlHcmFw
aGljc0xheWVyKCZmcmFtZSwgMCk7CiAgICAgfQogICAgIGJyZWFrOwogICAgIGNhc2UgUm9vdExh
eWVyVW5hdHRhY2hlZDoKQEAgLTM0NDQsNyArMzQ1NiwxMSBAQCB2b2lkIFJlbmRlckxheWVyQ29t
cG9zaXRvcjo6cm9vdExheWVyQXR0YWNobWVudENoYW5nZWQoKQogICAgIGlmIChSZW5kZXJMYXll
ckJhY2tpbmcqIGJhY2tpbmcgPSBsYXllciA/IGxheWVyLT5iYWNraW5nKCkgOiBudWxscHRyKQog
ICAgICAgICBiYWNraW5nLT51cGRhdGVEcmF3c0NvbnRlbnQoKTsKIAotICAgIGlmIChHcmFwaGlj
c0xheWVyKiBvdmVybGF5TGF5ZXIgPSBwYWdlLT5jaHJvbWUoKS5jbGllbnQoKS5kb2N1bWVudE92
ZXJsYXlMYXllckZvckZyYW1lKGZyYW1lKSkKKyAgICBpZiAoIWZyYW1lLmlzTWFpbkZyYW1lKCkp
CisgICAgICAgIHJldHVybjsKKworICAgIHBhZ2UtPnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLndp
bGxBdHRhY2hSb290TGF5ZXIoKTsKKyAgICBpZiAoR3JhcGhpY3NMYXllciogb3ZlcmxheUxheWVy
ID0gcGFnZS0+cGFnZU92ZXJsYXlDb250cm9sbGVyKCkuZG9jdW1lbnRPdmVybGF5Um9vdExheWVy
KCkpCiAgICAgICAgIG1fcm9vdENvbnRlbnRMYXllci0+YWRkQ2hpbGQob3ZlcmxheUxheWVyKTsK
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29t
cG9zaXRvci5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRv
ci5oCmluZGV4IDdiZDI0MGEuLmQ5YTg3NGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgKQEAgLTM2Miw3ICszNjIsNyBAQCBwcml2YXRl
OgogICAgIGJvb2wgbGF5ZXJIYXMzRENvbnRlbnQoY29uc3QgUmVuZGVyTGF5ZXImKSBjb25zdDsK
ICAgICBib29sIGlzUnVubmluZ0FjY2VsZXJhdGVkVHJhbnNmb3JtQW5pbWF0aW9uKFJlbmRlckxh
eWVyTW9kZWxPYmplY3QmKSBjb25zdDsKIAotICAgIHZvaWQgYXBwZW5kT3ZlcmxheUxheWVycyhW
ZWN0b3I8R3JhcGhpY3NMYXllcio+Jik7CisgICAgdm9pZCBhcHBlbmREb2N1bWVudE92ZXJsYXlM
YXllcnMoVmVjdG9yPEdyYXBoaWNzTGF5ZXIqPiYpOwogICAgIGJvb2wgaGFzQW55QWRkaXRpb25h
bENvbXBvc2l0ZWRMYXllcnMoY29uc3QgUmVuZGVyTGF5ZXImIHJvb3RMYXllcikgY29uc3Q7CiAK
ICAgICB2b2lkIGVuc3VyZVJvb3RMYXllcigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9t
YWMvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0L21hYy9X
ZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaAppbmRleCAzZTNhNWE4Li5jNmMwNjcxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGll
bnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGll
bnQuaApAQCAtMTYzLDYgKzE2Myw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxk
UGFpbnRFbnRpcmVDb250ZW50cygpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgdmlydHVhbCB2b2lk
IGF0dGFjaFJvb3RHcmFwaGljc0xheWVyKFdlYkNvcmU6OkZyYW1lKiwgV2ViQ29yZTo6R3JhcGhp
Y3NMYXllciopIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBhdHRhY2hWaWV3T3ZlcmxheUdy
YXBoaWNzTGF5ZXIoV2ViQ29yZTo6RnJhbWUqLCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKikgb3Zl
cnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzT25lU2hvdERyYXdpbmdTeW5jaHJvbml6
YXRpb24oKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVDb21wb3NpdGluZ0xh
eWVyRmx1c2goKSBvdmVycmlkZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvV2Vi
Q29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lm1tIGIvU291cmNlL1dlYktpdC9tYWMvV2ViQ29y
ZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lm1tCmluZGV4IDkzNmY0NTQuLjE5YWRiZGQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5t
bQorKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQu
bW0KQEAgLTkyNCw2ICs5MjQsMTEgQEAgdm9pZCBXZWJDaHJvbWVDbGllbnQ6OmF0dGFjaFJvb3RH
cmFwaGljc0xheWVyKEZyYW1lKiBmcmFtZSwgR3JhcGhpY3NMYXllciogZ3JhcGgKICAgICBFTkRf
QkxPQ0tfT0JKQ19FWENFUFRJT05TOwogfQogCit2b2lkIFdlYkNocm9tZUNsaWVudDo6YXR0YWNo
Vmlld092ZXJsYXlHcmFwaGljc0xheWVyKEZyYW1lKiwgR3JhcGhpY3NMYXllciopCit7CisgICAg
Ly8gRklYTUU6IElmIHdlIHdhbnQgdmlldy1yZWxhdGl2ZSBwYWdlIG92ZXJsYXlzIGluIFdlYktp
dDEsIHRoaXMgd291bGQgYmUgdGhlIHBsYWNlIHRvIGhvb2sgdGhlbSB1cC4KK30KKwogdm9pZCBX
ZWJDaHJvbWVDbGllbnQ6OnNldE5lZWRzT25lU2hvdERyYXdpbmdTeW5jaHJvbml6YXRpb24oKQog
ewogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJLaXQy
L1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBkMGE5MmY5Li4yZDdlYzNm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKKysrIGIvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCkBAIC0zMDcsOCArMzA3LDYgQEAKIAkJMUE5MEMxRUUxMjY0RkQ1MDAwM0U0NEQ0IC8qIFdl
YkZpbmRPcHRpb25zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAxQTkwQzFFRDEyNjRGRDUwMDAzRTQ0RDQgLyogV2ViRmluZE9wdGlvbnMuaCAqLzsgfTsK
IAkJMUE5MEMxRjQxMjY0RkQ3MTAwM0U0NEQ0IC8qIEZpbmRDb250cm9sbGVyLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTkwQzFGMjEyNjRGRDcxMDAz
RTQ0RDQgLyogRmluZENvbnRyb2xsZXIuaCAqLzsgfTsKIAkJMUE5MEMxRjUxMjY0RkQ3MTAwM0U0
NEQ0IC8qIEZpbmRDb250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDFBOTBDMUYzMTI2NEZENzEwMDNFNDRENCAvKiBGaW5kQ29udHJvbGxl
ci5jcHAgKi87IH07Ci0JCTFBOTBDMjM3MTI2NTA3MTcwMDNFNDRENCAvKiBQYWdlT3ZlcmxheS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE5MEMyMzUx
MjY1MDcxNzAwM0U0NEQ0IC8qIFBhZ2VPdmVybGF5LmggKi87IH07Ci0JCTFBOTBDMjM4MTI2NTA3
MTcwMDNFNDRENCAvKiBQYWdlT3ZlcmxheS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAxQTkwQzIzNjEyNjUwNzE3MDAzRTQ0RDQgLyogUGFnZU92ZXJs
YXkuY3BwICovOyB9OwogCQkxQTkxMDA3MTEyNjY3NUM0MDAxODQyRjUgLyogRmluZEluZGljYXRv
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE5MTAw
NkYxMjY2NzVDMzAwMTg0MkY1IC8qIEZpbmRJbmRpY2F0b3IuaCAqLzsgfTsKIAkJMUE5MTAwNzIx
MjY2NzVDNDAwMTg0MkY1IC8qIEZpbmRJbmRpY2F0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE5MTAwNzAxMjY2NzVDNDAwMTg0MkY1IC8qIEZp
bmRJbmRpY2F0b3IuY3BwICovOyB9OwogCQkxQTkyREMxMTEyRjhCQTQ2MDAxN0FGNjUgLyogTGF5
ZXJUcmVlQ29udGV4dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMUE5MkRDMTAxMkY4QkE0NjAwMTdBRjY1IC8qIExheWVyVHJlZUNvbnRleHQuaCAqLzsg
fTsKQEAgLTU2OCw4ICs1NjYsNiBAQAogCQkyOUQ1NURGMjE2MUJGOUYxMDAzMUEyRTMgLyogV2Vi
UGFnZUdyb3VwUHJveHlNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMjlENTVERjAxNjFCRjlGMTAwMzFBMkUzIC8qIFdlYlBhZ2VHcm91cFBy
b3h5TWVzc2FnZXMuaCAqLzsgfTsKIAkJMkQxMjVDNUUxODU3RUEwNTAwM0JBM0NCIC8qIFZpZXdH
ZXN0dXJlQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMkQxMjVDNUMxODU3RUEwNTAwM0JBM0NCIC8qIFZpZXdHZXN0dXJlQ29udHJvbGxl
ci5oICovOyB9OwogCQkyRDEyNUM1RjE4NTdFQTA1MDAzQkEzQ0IgLyogVmlld0dlc3R1cmVDb250
cm9sbGVyTWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMkQxMjVDNUQxODU3RUEwNTAwM0JBM0NCIC8qIFZpZXdHZXN0dXJlQ29udHJvbGxlck1hYy5t
bSAqLzsgfTsKLQkJMkQxNDBFQUYxOEYzN0JFMDAwNUU3NUEwIC8qIFBhZ2VPdmVybGF5Q29udHJv
bGxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAy
RDE0MEVBRDE4RjM3QkUwMDA1RTc1QTAgLyogUGFnZU92ZXJsYXlDb250cm9sbGVyLmNwcCAqLzsg
fTsKLQkJMkQxNDBFQjAxOEYzN0JFMDAwNUU3NUEwIC8qIFBhZ2VPdmVybGF5Q29udHJvbGxlci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkQxNDBFQUUx
OEYzN0JFMDAwNUU3NUEwIC8qIFBhZ2VPdmVybGF5Q29udHJvbGxlci5oICovOyB9OwogCQkyRDFC
NUQ1RDE4NTg2OUM4MDA2QzY1OTYgLyogVmlld0dlc3R1cmVDb250cm9sbGVyTWVzc2FnZVJlY2Vp
dmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJE
MUI1RDVCMTg1ODY5QzgwMDZDNjU5NiAvKiBWaWV3R2VzdHVyZUNvbnRyb2xsZXJNZXNzYWdlUmVj
ZWl2ZXIuY3BwICovOyB9OwogCQkyRDFCNUQ1RTE4NTg2OUM4MDA2QzY1OTYgLyogVmlld0dlc3R1
cmVDb250cm9sbGVyTWVzc2FnZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDJEMUI1RDVDMTg1ODY5QzgwMDZDNjU5NiAvKiBWaWV3R2VzdHVyZUNvbnRy
b2xsZXJNZXNzYWdlcy5oICovOyB9OwogCQkyRDI4RjNFNDE4ODVDQ0MxMDA0QjlFQUUgLyogV2Vi
Q2hyb21lQ2xpZW50SU9TLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMkQyOEYzRTAxODg1Q0NDMTAwNEI5RUFFIC8qIFdlYkNocm9tZUNsaWVudElPUy5t
bSAqLzsgfTsKQEAgLTU4Niw2ICs1ODIsOCBAQAogCQkyRDQyOUJGRDE3MjFFMkM3MDBFQzY4MUYg
LyogUERGUGx1Z2luUGFzc3dvcmRGaWVsZC5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDJENDI5QkZCMTcyMUUyQkEwMEVDNjgxRiAvKiBQREZQbHVnaW5Q
YXNzd29yZEZpZWxkLm1tICovOyB9OwogCQkyRDQ3QjU2QzE4MTA3MTRFMDAzQTNBRUUgLyogUmVt
b3RlTGF5ZXJCYWNraW5nU3RvcmUubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAyRDQ3QjU2QTE4MTA3MTRFMDAzQTNBRUUgLyogUmVtb3RlTGF5ZXJCYWNr
aW5nU3RvcmUubW0gKi87IH07CiAJCTJENDdCNTZEMTgxMDcxNEUwMDNBM0FFRSAvKiBSZW1vdGVM
YXllckJhY2tpbmdTdG9yZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMkQ0N0I1NkIxODEwNzE0RTAwM0EzQUVFIC8qIFJlbW90ZUxheWVyQmFja2luZ1N0
b3JlLmggKi87IH07CisJCTJENUM5RDA1MTlDODFEOEYwMEIzQzVDMSAvKiBXZWJQYWdlT3Zlcmxh
eS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRDVD
OUQwMzE5QzgxRDhGMDBCM0M1QzEgLyogV2ViUGFnZU92ZXJsYXkuY3BwICovOyB9OworCQkyRDVD
OUQwNjE5QzgxRDhGMDBCM0M1QzEgLyogV2ViUGFnZU92ZXJsYXkuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJENUM5RDA0MTlDODFEOEYwMEIzQzVDMSAv
KiBXZWJQYWdlT3ZlcmxheS5oICovOyB9OwogCQkyRDZBQjU0MTE5MkIxQzRBMDAzQTlGRDEgLyog
V0tQREZQYWdlTnVtYmVySW5kaWNhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAyRDZBQjUzRjE5MkIxQzRBMDAzQTlGRDEgLyogV0tQREZQYWdlTnVt
YmVySW5kaWNhdG9yLmggKi87IH07CiAJCTJENkFCNTQyMTkyQjFDNEEwMDNBOUZEMSAvKiBXS1BE
RlBhZ2VOdW1iZXJJbmRpY2F0b3IubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAyRDZBQjU0MDE5MkIxQzRBMDAzQTlGRDEgLyogV0tQREZQYWdlTnVtYmVy
SW5kaWNhdG9yLm1tICovOyB9OwogCQkyRDZCMzcxQjE4QTk2N0FEMDA0MkFFODAgLyogX1dLVGh1
bWJuYWlsVmlldy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMkQ2QjM3MTkxOEE5NjdBRDAwNDJBRTgwIC8qIF9XS1RodW1ibmFpbFZpZXcuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMjI3MSw4ICsyMjY5
LDYgQEAKIAkJMUE5MEMxRUQxMjY0RkQ1MDAwM0U0NEQ0IC8qIFdlYkZpbmRPcHRpb25zLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkZpbmRPcHRpb25zLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBOTBDMUYyMTI2NEZENzEwMDNFNDRENCAvKiBGaW5kQ29u
dHJvbGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGaW5kQ29udHJvbGxl
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQTkwQzFGMzEyNjRGRDcxMDAzRTQ0
RDQgLyogRmluZENvbnRyb2xsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gRmluZENvbnRyb2xsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkx
QTkwQzIzNTEyNjUwNzE3MDAzRTQ0RDQgLyogUGFnZU92ZXJsYXkuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gUGFnZU92ZXJsYXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJMUE5MEMyMzYxMjY1MDcxNzAwM0U0NEQ0IC8qIFBhZ2VPdmVybGF5LmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBhZ2VPdmVybGF5LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUE5MTAwNkYxMjY2NzVDMzAwMTg0MkY1IC8qIEZpbmRJbmRp
Y2F0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmluZEluZGljYXRvci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQTkxMDA3MDEyNjY3NUM0MDAxODQyRjUg
LyogRmluZEluZGljYXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBGaW5kSW5kaWNhdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUE5MkRD
MTAxMkY4QkE0NjAwMTdBRjY1IC8qIExheWVyVHJlZUNvbnRleHQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gTGF5ZXJUcmVlQ29udGV4dC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtMjU1OCw4ICsyNTU0LDYgQEAKIAkJMjlENTVERjAxNjFCRjlGMTAwMzFBMkUz
IC8qIFdlYlBhZ2VHcm91cFByb3h5TWVzc2FnZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gV2ViUGFnZUdyb3VwUHJveHlNZXNzYWdlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkyRDEyNUM1QzE4NTdFQTA1MDAzQkEzQ0IgLyogVmlld0dlc3R1cmVDb250cm9s
bGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZpZXdHZXN0dXJlQ29udHJv
bGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyRDEyNUM1RDE4NTdFQTA1MDAz
QkEzQ0IgLyogVmlld0dlc3R1cmVDb250cm9sbGVyTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAub2JqY3BwOyBwYXRoID0gVmlld0dlc3R1cmVDb250cm9sbGVyTWFjLm1tOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQkyRDE0MEVBRDE4RjM3QkUwMDA1RTc1QTAgLyogUGFnZU92
ZXJsYXlDb250cm9sbGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFBhZ2VPdmVybGF5Q29udHJvbGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CTJEMTQwRUFFMThGMzdCRTAwMDVFNzVBMCAvKiBQYWdlT3ZlcmxheUNvbnRyb2xsZXIuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGFnZU92ZXJsYXlDb250cm9sbGVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJEMUI1RDVBMTg1ODY1OTkwMDZDNjU5NiAvKiBW
aWV3R2VzdHVyZUNvbnRyb2xsZXIubWVzc2FnZXMuaW4gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gVmlld0dlc3R1cmVDb250cm9s
bGVyLm1lc3NhZ2VzLmluOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyRDFCNUQ1QjE4
NTg2OUM4MDA2QzY1OTYgLyogVmlld0dlc3R1cmVDb250cm9sbGVyTWVzc2FnZVJlY2VpdmVyLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFZpZXdHZXN0dXJlQ29udHJv
bGxlck1lc3NhZ2VSZWNlaXZlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJE
MUI1RDVDMTg1ODY5QzgwMDZDNjU5NiAvKiBWaWV3R2VzdHVyZUNvbnRyb2xsZXJNZXNzYWdlcy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWaWV3R2VzdHVyZUNvbnRyb2xsZXJN
ZXNzYWdlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjU4Miw2ICsyNTc2LDgg
QEAKIAkJMkQ0MjlCRkIxNzIxRTJCQTAwRUM2ODFGIC8qIFBERlBsdWdpblBhc3N3b3JkRmllbGQu
bW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBQREZQbHVnaW5QYXNz
d29yZEZpZWxkLm1tOyBwYXRoID0gUERGL1BERlBsdWdpblBhc3N3b3JkRmllbGQubW07IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJENDdCNTZBMTgxMDcxNEUwMDNBM0FFRSAvKiBSZW1v
dGVMYXllckJhY2tpbmdTdG9yZS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsg
cGF0aCA9IFJlbW90ZUxheWVyQmFja2luZ1N0b3JlLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkyRDQ3QjU2QjE4MTA3MTRFMDAzQTNBRUUgLyogUmVtb3RlTGF5ZXJCYWNraW5nU3Rv
cmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVtb3RlTGF5ZXJCYWNraW5n
U3RvcmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMkQ1QzlEMDMxOUM4MUQ4RjAw
QjNDNUMxIC8qIFdlYlBhZ2VPdmVybGF5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFdlYlBhZ2VPdmVybGF5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMkQ1QzlEMDQxOUM4MUQ4RjAwQjNDNUMxIC8qIFdlYlBhZ2VPdmVybGF5LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlBhZ2VPdmVybGF5Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTJENkFCNTNGMTkyQjFDNEEwMDNBOUZEMSAvKiBXS1BERlBhZ2VOdW1i
ZXJJbmRpY2F0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV0tQREZQYWdl
TnVtYmVySW5kaWNhdG9yLmg7IHBhdGggPSBpb3MvV0tQREZQYWdlTnVtYmVySW5kaWNhdG9yLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJENkFCNTQwMTkyQjFDNEEwMDNBOUZEMSAv
KiBXS1BERlBhZ2VOdW1iZXJJbmRpY2F0b3IubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5v
YmpjcHA7IG5hbWUgPSBXS1BERlBhZ2VOdW1iZXJJbmRpY2F0b3IubW07IHBhdGggPSBpb3MvV0tQ
REZQYWdlTnVtYmVySW5kaWNhdG9yLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQky
RDZCMzcxOTE4QTk2N0FEMDA0MkFFODAgLyogX1dLVGh1bWJuYWlsVmlldy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBfV0tUaHVtYm5haWxWaWV3Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC01NzAxLDEwICs1Njk3LDggQEAKIAkJCQkxQTkwQzFGMjEyNjRGRDcx
MDAzRTQ0RDQgLyogRmluZENvbnRyb2xsZXIuaCAqLywKIAkJCQk3QzM4NzQzMzE3MkY1NjE1MDAx
QkQ4OEEgLyogUGFnZUJhbm5lci5jcHAgKi8sCiAJCQkJN0NGNDdGRjkxNzI3NUM1NzAwOEFDQjkx
IC8qIFBhZ2VCYW5uZXIuaCAqLywKLQkJCQkxQTkwQzIzNjEyNjUwNzE3MDAzRTQ0RDQgLyogUGFn
ZU92ZXJsYXkuY3BwICovLAotCQkJCTFBOTBDMjM1MTI2NTA3MTcwMDNFNDRENCAvKiBQYWdlT3Zl
cmxheS5oICovLAotCQkJCTJEMTQwRUFEMThGMzdCRTAwMDVFNzVBMCAvKiBQYWdlT3ZlcmxheUNv
bnRyb2xsZXIuY3BwICovLAotCQkJCTJEMTQwRUFFMThGMzdCRTAwMDVFNzVBMCAvKiBQYWdlT3Zl
cmxheUNvbnRyb2xsZXIuaCAqLywKKwkJCQkyRDVDOUQwMzE5QzgxRDhGMDBCM0M1QzEgLyogV2Vi
UGFnZU92ZXJsYXkuY3BwICovLAorCQkJCTJENUM5RDA0MTlDODFEOEYwMEIzQzVDMSAvKiBXZWJQ
YWdlT3ZlcmxheS5oICovLAogCQkJCTUxOTJENTcxMTk2MUZBMkYwMENEMTlBQSAvKiBTZXJ2aWNl
c092ZXJsYXlDb250cm9sbGVyLmggKi8sCiAJCQkJMkQ4MTlCOTkxODYyNzVCMzAwMUYwM0QxIC8q
IFZpZXdHZXN0dXJlR2VvbWV0cnlDb2xsZWN0b3IuY3BwICovLAogCQkJCTJEODE5QjlBMTg2Mjc1
QjMwMDFGMDNEMSAvKiBWaWV3R2VzdHVyZUdlb21ldHJ5Q29sbGVjdG9yLmggKi8sCkBAIC03MDQ2
LDYgKzcwNDAsNyBAQAogCQkJCTdDODVGRDgwMTkzNDE2NjUwMDAxNzdDNCAvKiBXZWJQcmVmZXJl
bmNlc0tleXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxMkY1ODk3MTJBODgzODgwMDYyOTUzMCAv
KiBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZVByb3h5LmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTQ0
NUI5RjE4NEQ1RkI1MDA0QjM0MTQgLyogV0tDb250ZXh0SW5qZWN0ZWRCdW5kbGVDbGllbnQuaCBp
biBIZWFkZXJzICovLAorCQkJCTJENUM5RDA2MTlDODFEOEYwMEIzQzVDMSAvKiBXZWJQYWdlT3Zl
cmxheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTEyRjU4OTkxMkE4ODM4ODAwNjI5NTMwIC8qIEF1
dGhlbnRpY2F0aW9uRGVjaXNpb25MaXN0ZW5lci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE4RThF
RjkxNkIyMDkxQzAwRTkxNDI5IC8qIEF1dGhlbnRpY2F0aW9uTWFuYWdlci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJNTEyRjU4QTMxMkE4ODNBRDAwNjI5NTMwIC8qIEF1dGhlbnRpY2F0aW9uTWFuYWdl
ck1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLywKQEAgLTcxNTMsNyArNzE0OCw2IEBACiAJCQkJMUFF
NTJGOTIxOTIwMURBNzAwQTFGQTM3IC8qIEFQSUNvbnRleHRDb25maWd1cmF0aW9uLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk3QzM2MUQ3MzE5MjdGQTM2MDAzNkE1OUQgLyogV2ViU2NyaXB0TWVzc2Fn
ZUhhbmRsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUUxMDVGRTU0MThEN0I5REUwMDhGNTdBOCAv
KiBFZGl0aW5nUmFuZ2UuaCBpbiBIZWFkZXJzICovLAotCQkJCTJEMTQwRUIwMThGMzdCRTAwMDVF
NzVBMCAvKiBQYWdlT3ZlcmxheUNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMTc3
NTNGMTE4QkFCRjAwMDdEOUU5QSAvKiBHZW5lcmljQ2FsbGJhY2suaCBpbiBIZWFkZXJzICovLAog
CQkJCTM3OUE4NzM2MThCQkZBNDMwMDU4OEFGMiAvKiBfV0tBY3RpdmF0ZWRFbGVtZW50SW5mb0lu
dGVybmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzA2RjQyRjEyREJCOUI2MDAyRDc4REUgLyog
R2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXIuaCBpbiBIZWFkZXJzICovLApAQCAt
NzI3Niw3ICs3MjcwLDYgQEAKIAkJCQkxQTVCMUM1MTE4OTg2MDZGMDA0RkNGOUIgLyogV0tOYXZp
Z2F0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk3Q0Y0N0ZGQjE3Mjc1QzU3MDA4QUNCOTEgLyog
UGFnZUJhbm5lci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM2RURBQTYxMTEyNzFDNjAwRTc2NzhC
IC8qIFBhZ2VDbGllbnQuaCBpbiBIZWFkZXJzICovLAotCQkJCTFBOTBDMjM3MTI2NTA3MTcwMDNF
NDRENCAvKiBQYWdlT3ZlcmxheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzU3NEE1ODExMkU2NjY4
MTAwMkRGRTk4IC8qIFBhc3RlYm9hcmRUeXBlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTE5NTgy
RDMxNTNDQkZENzAwQjYwODc1IC8qIFBERktpdEltcG9ydHMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTFBRTAwRDRGMTgyRDZGNTAwMDA4N0RENyAvKiBXS0Jyb3dzaW5nQ29udGV4dEhhbmRsZUludGVy
bmFsLmggaW4gSGVhZGVycyAqLywKQEAgLTg5MjgsNyArODkyMSw2IEBACiAJCQkJNTFFMzUxRjUx
ODBGNUM3NTAwRTUzQkU5IC8qIFdlYklEQkZhY3RvcnlCYWNrZW5kLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTdDMzg3NDM0MTcyRjU2MTUwMDFCRDg4QSAvKiBQYWdlQmFubmVyLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTdDNkQzN0ZDMTcyRjU1NUYwMDlEMjg0NyAvKiBQYWdlQmFubmVyTWFjLm1t
IGluIFNvdXJjZXMgKi8sCi0JCQkJMUE5MEMyMzgxMjY1MDcxNzAwM0U0NEQ0IC8qIFBhZ2VPdmVy
bGF5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUM1NzRBNTgyMTJFNjY2ODEwMDJERkU5OCAvKiBQ
YXN0ZWJvYXJkVHlwZXMubW0gaW4gU291cmNlcyAqLywKIAkJCQlFMTk1ODJENjE1M0NDMDU0MDBC
NjA4NzUgLyogUERGS2l0SW1wb3J0cy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTJEODcwRDEwMTYy
MzRGRkUwMDBBM0YyMCAvKiBQREZQbHVnaW4ubW0gaW4gU291cmNlcyAqLywKQEAgLTkxMjgsNyAr
OTEyMCw2IEBACiAJCQkJQTU0MjkzQTUxOTVBNDNERDAwMjc4MkM3IC8qIFdLSW5zcGVjdG9yTm9k
ZVNlYXJjaEdlc3R1cmVSZWNvZ25pemVyLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQzAzMzdEQUUx
MjdBMjRGRTAwOEZGNEY0IC8qIFdlYkV2ZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDMDMy
REJBMTBGNDM4MEYwMDU4QzE1QSAvKiBXZWJFdmVudENvbnZlcnNpb24uY3BwIGluIFNvdXJjZXMg
Ki8sCi0JCQkJMkQxNDBFQUYxOEYzN0JFMDAwNUU3NUEwIC8qIFBhZ2VPdmVybGF5Q29udHJvbGxl
ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzExMUI1RTExMkY2Mjk4MDAzMzdCQUIgLyogV2Vi
RXZlbnRGYWN0b3J5Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQTExOEE5RUUxOTA3QUQ2RjAwRjdD
OTJCIC8qIFF1aWNrTG9va0RvY3VtZW50RGF0YS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQTNE
RDFGRDEyNUU1OUYzMDA0NTE1RTYgLyogV2ViRmluZENsaWVudC5jcHAgaW4gU291cmNlcyAqLywK
QEAgLTkyMTIsNiArOTIwMyw3IEBACiAJCQkJQzA2QzYwOTUxMjRDMTQ0QjAwMDE2ODJGIC8qIFdl
YlBhZ2VDcmVhdGlvblBhcmFtZXRlcnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQzU5QzRBNTgx
OEI4MTE3NDAwN0JEQ0I2IC8qIEFzc2lzdGVkTm9kZUluZm9ybWF0aW9uLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUJDN0I2MjA3MTI5QTBBNjcwMEQxNzRBNCAvKiBXZWJQYWdlR3JvdXAuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJMkQ1QzlEMDUxOUM4MUQ4RjAwQjNDNUMxIC8qIFdlYlBhZ2VPdmVy
bGF5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDN0I2MjUzMTJBNDNDOTYwMEQxNzRBNCAvKiBX
ZWJQYWdlR3JvdXBEYXRhLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDN0I2MjE2MTJBNDIxOUEw
MEQxNzRBNCAvKiBXZWJQYWdlR3JvdXBQcm94eS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyOUQ1
NURGMTE2MUJGOUYxMDAzMUEyRTMgLyogV2ViUGFnZUdyb3VwUHJveHlNZXNzYWdlUmVjZWl2ZXIu
Y3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlQVBJQ2FzdC5oIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZUFQSUNhc3QuaAppbmRleCBl
NjM1NDA4Li4wZDViN2M3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlQVBJQ2FzdC5oCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVBUElDYXN0LmgKQEAgLTQ5
LDExICs0OSwxMSBAQCBjbGFzcyBJbmplY3RlZEJ1bmRsZU5vZGVIYW5kbGU7CiBjbGFzcyBJbmpl
Y3RlZEJ1bmRsZVJhbmdlSGFuZGxlOwogY2xhc3MgSW5qZWN0ZWRCdW5kbGVTY3JpcHRXb3JsZDsK
IGNsYXNzIFBhZ2VCYW5uZXI7Ci1jbGFzcyBQYWdlT3ZlcmxheTsKIGNsYXNzIFdlYkZyYW1lOwog
Y2xhc3MgV2ViSW5zcGVjdG9yOwogY2xhc3MgV2ViUGFnZTsKIGNsYXNzIFdlYlBhZ2VHcm91cFBy
b3h5OworY2xhc3MgV2ViUGFnZU92ZXJsYXk7CiAKIFdLX0FERF9BUElfTUFQUElORyhXS0J1bmRs
ZUJhY2tGb3J3YXJkTGlzdEl0ZW1SZWYsIEluamVjdGVkQnVuZGxlQmFja0ZvcndhcmRMaXN0SXRl
bSkKIFdLX0FERF9BUElfTUFQUElORyhXS0J1bmRsZUJhY2tGb3J3YXJkTGlzdFJlZiwgSW5qZWN0
ZWRCdW5kbGVCYWNrRm9yd2FyZExpc3QpCkBAIC02Niw3ICs2Niw3IEBAIFdLX0FERF9BUElfTUFQ
UElORyhXS0J1bmRsZU5hdmlnYXRpb25BY3Rpb25SZWYsIEluamVjdGVkQnVuZGxlTmF2aWdhdGlv
bkFjdGlvbikKIFdLX0FERF9BUElfTUFQUElORyhXS0J1bmRsZU5vZGVIYW5kbGVSZWYsIEluamVj
dGVkQnVuZGxlTm9kZUhhbmRsZSkKIFdLX0FERF9BUElfTUFQUElORyhXS0J1bmRsZVBhZ2VCYW5u
ZXJSZWYsIFBhZ2VCYW5uZXIpCiBXS19BRERfQVBJX01BUFBJTkcoV0tCdW5kbGVQYWdlR3JvdXBS
ZWYsIFdlYlBhZ2VHcm91cFByb3h5KQotV0tfQUREX0FQSV9NQVBQSU5HKFdLQnVuZGxlUGFnZU92
ZXJsYXlSZWYsIFBhZ2VPdmVybGF5KQorV0tfQUREX0FQSV9NQVBQSU5HKFdLQnVuZGxlUGFnZU92
ZXJsYXlSZWYsIFdlYlBhZ2VPdmVybGF5KQogV0tfQUREX0FQSV9NQVBQSU5HKFdLQnVuZGxlUGFn
ZVJlZiwgV2ViUGFnZSkKIFdLX0FERF9BUElfTUFQUElORyhXS0J1bmRsZVJhbmdlSGFuZGxlUmVm
LCBJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlKQogV0tfQUREX0FQSV9NQVBQSU5HKFdLQnVuZGxl
UmVmLCBJbmplY3RlZEJ1bmRsZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVQYWdlLmNwcCBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVQYWdlLmNwcAppbmRleCAy
MTE0ZjU4Li4yOTQwNWI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlUGFnZS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZVBhZ2UuY3BwCkBAIC00Nywx
MiArNDcsMTUgQEAKICNpbmNsdWRlICJXZWJGdWxsU2NyZWVuTWFuYWdlci5oIgogI2luY2x1ZGUg
IldlYkltYWdlLmgiCiAjaW5jbHVkZSAiV2ViUGFnZS5oIgorI2luY2x1ZGUgIldlYlBhZ2VPdmVy
bGF5LmgiCiAjaW5jbHVkZSAiV2ViUmVuZGVyTGF5ZXIuaCIKICNpbmNsdWRlICJXZWJSZW5kZXJP
YmplY3QuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0FYT2JqZWN0Q2FjaGUuaD4KICNpbmNsdWRlIDxX
ZWJDb3JlL0FjY2Vzc2liaWxpdHlPYmplY3QuaD4KICNpbmNsdWRlIDxXZWJDb3JlL01haW5GcmFt
ZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUGFnZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUGFnZU92
ZXJsYXkuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1BhZ2VPdmVybGF5Q29udHJvbGxlci5oPgogI2lu
Y2x1ZGUgPFdlYkNvcmUvVVJMLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogCkBA
IC0zNTQsMjIgKzM1NywyMiBAQCBXS0J1bmRsZUJhY2tGb3J3YXJkTGlzdFJlZiBXS0J1bmRsZVBh
Z2VHZXRCYWNrRm9yd2FyZExpc3QoV0tCdW5kbGVQYWdlUmVmIHBhZ2VSZQogCiB2b2lkIFdLQnVu
ZGxlUGFnZUluc3RhbGxQYWdlT3ZlcmxheShXS0J1bmRsZVBhZ2VSZWYgcGFnZVJlZiwgV0tCdW5k
bGVQYWdlT3ZlcmxheVJlZiBwYWdlT3ZlcmxheVJlZikKIHsKLSAgICB0b0ltcGwocGFnZVJlZikt
Pmluc3RhbGxQYWdlT3ZlcmxheSh0b0ltcGwocGFnZU92ZXJsYXlSZWYpKTsKKyAgICB0b0ltcGwo
cGFnZVJlZiktPmNvcmVQYWdlKCktPnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLmluc3RhbGxQYWdl
T3ZlcmxheSh0b0ltcGwocGFnZU92ZXJsYXlSZWYpLT5jb3JlT3ZlcmxheSgpLCBXZWJDb3JlOjpQ
YWdlT3ZlcmxheTo6RmFkZU1vZGU6OkRvTm90RmFkZSk7CiB9CiAKIHZvaWQgV0tCdW5kbGVQYWdl
VW5pbnN0YWxsUGFnZU92ZXJsYXkoV0tCdW5kbGVQYWdlUmVmIHBhZ2VSZWYsIFdLQnVuZGxlUGFn
ZU92ZXJsYXlSZWYgcGFnZU92ZXJsYXlSZWYpCiB7Ci0gICAgdG9JbXBsKHBhZ2VSZWYpLT51bmlu
c3RhbGxQYWdlT3ZlcmxheSh0b0ltcGwocGFnZU92ZXJsYXlSZWYpKTsKKyAgICB0b0ltcGwocGFn
ZVJlZiktPmNvcmVQYWdlKCktPnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLnVuaW5zdGFsbFBhZ2VP
dmVybGF5KHRvSW1wbChwYWdlT3ZlcmxheVJlZiktPmNvcmVPdmVybGF5KCksIFdlYkNvcmU6OlBh
Z2VPdmVybGF5OjpGYWRlTW9kZTo6RG9Ob3RGYWRlKTsKIH0KIAogdm9pZCBXS0J1bmRsZVBhZ2VJ
bnN0YWxsUGFnZU92ZXJsYXlXaXRoQW5pbWF0aW9uKFdLQnVuZGxlUGFnZVJlZiBwYWdlUmVmLCBX
S0J1bmRsZVBhZ2VPdmVybGF5UmVmIHBhZ2VPdmVybGF5UmVmKQogewotICAgIHRvSW1wbChwYWdl
UmVmKS0+aW5zdGFsbFBhZ2VPdmVybGF5KHRvSW1wbChwYWdlT3ZlcmxheVJlZiksIFBhZ2VPdmVy
bGF5OjpGYWRlTW9kZTo6RmFkZSk7CisgICAgdG9JbXBsKHBhZ2VSZWYpLT5jb3JlUGFnZSgpLT5w
YWdlT3ZlcmxheUNvbnRyb2xsZXIoKS5pbnN0YWxsUGFnZU92ZXJsYXkodG9JbXBsKHBhZ2VPdmVy
bGF5UmVmKS0+Y29yZU92ZXJsYXkoKSwgV2ViQ29yZTo6UGFnZU92ZXJsYXk6OkZhZGVNb2RlOjpG
YWRlKTsKIH0KIAogdm9pZCBXS0J1bmRsZVBhZ2VVbmluc3RhbGxQYWdlT3ZlcmxheVdpdGhBbmlt
YXRpb24oV0tCdW5kbGVQYWdlUmVmIHBhZ2VSZWYsIFdLQnVuZGxlUGFnZU92ZXJsYXlSZWYgcGFn
ZU92ZXJsYXlSZWYpCiB7Ci0gICAgdG9JbXBsKHBhZ2VSZWYpLT51bmluc3RhbGxQYWdlT3Zlcmxh
eSh0b0ltcGwocGFnZU92ZXJsYXlSZWYpLCBQYWdlT3ZlcmxheTo6RmFkZU1vZGU6OkZhZGUpOwor
ICAgIHRvSW1wbChwYWdlUmVmKS0+Y29yZVBhZ2UoKS0+cGFnZU92ZXJsYXlDb250cm9sbGVyKCku
dW5pbnN0YWxsUGFnZU92ZXJsYXkodG9JbXBsKHBhZ2VPdmVybGF5UmVmKS0+Y29yZU92ZXJsYXko
KSwgV2ViQ29yZTo6UGFnZU92ZXJsYXk6OkZhZGVNb2RlOjpGYWRlKTsKIH0KIAogdm9pZCBXS0J1
bmRsZVBhZ2VTZXRUb3BPdmVyaGFuZ0ltYWdlKFdLQnVuZGxlUGFnZVJlZiBwYWdlUmVmLCBXS0lt
YWdlUmVmIGltYWdlUmVmKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZVBhZ2VPdmVybGF5LmNwcCBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVQYWdlT3ZlcmxheS5j
cHAKaW5kZXggYmJhODYyNi4uMTNjMzE2YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZVBhZ2VPdmVybGF5LmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxl
UGFnZU92ZXJsYXkuY3BwCkBAIC0yNywxMCArMjcsMTcgQEAKICNpbmNsdWRlICJXS0J1bmRsZVBh
Z2VPdmVybGF5LmgiCiAKICNpbmNsdWRlICJBUElDbGllbnQuaCIKLSNpbmNsdWRlICJQYWdlT3Zl
cmxheS5oIgogI2luY2x1ZGUgIldLQVBJQ2FzdC5oIgorI2luY2x1ZGUgIldLQXJyYXkuaCIKICNp
bmNsdWRlICJXS0J1bmRsZUFQSUNhc3QuaCIKKyNpbmNsdWRlICJXS051bWJlci5oIgorI2luY2x1
ZGUgIldLUmV0YWluUHRyLmgiCisjaW5jbHVkZSAiV0tTaGFyZWRBUElDYXN0LmgiCisjaW5jbHVk
ZSAiV0tTdHJpbmdQcml2YXRlLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHQu
aD4KKyNpbmNsdWRlIDxXZWJDb3JlL1BhZ2VPdmVybGF5Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9Q
bGF0Zm9ybU1vdXNlRXZlbnQuaD4KKyNpbmNsdWRlIDxXZWJLaXQvV2ViUGFnZU92ZXJsYXkuaD4K
IAogbmFtZXNwYWNlIEFQSSB7CiAKQEAgLTQ3LDcgKzU0LDcgQEAgdGVtcGxhdGU8PiBzdHJ1Y3Qg
Q2xpZW50VHJhaXRzPFdLQnVuZGxlUGFnZU92ZXJsYXlBY2Nlc3NpYmlsaXR5Q2xpZW50QmFzZT4g
ewogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiB1c2luZyBuYW1lc3BhY2UgV2ViS2l0OwogCi1j
bGFzcyBQYWdlT3ZlcmxheUNsaWVudEltcGwgOiBBUEk6OkNsaWVudDxXS0J1bmRsZVBhZ2VPdmVy
bGF5Q2xpZW50QmFzZT4sIHB1YmxpYyBQYWdlT3ZlcmxheTo6Q2xpZW50IHsKK2NsYXNzIFBhZ2VP
dmVybGF5Q2xpZW50SW1wbCA6IEFQSTo6Q2xpZW50PFdLQnVuZGxlUGFnZU92ZXJsYXlDbGllbnRC
YXNlPiwgcHVibGljIFdlYlBhZ2VPdmVybGF5OjpDbGllbnQgewogcHVibGljOgogICAgIGV4cGxp
Y2l0IFBhZ2VPdmVybGF5Q2xpZW50SW1wbChXS0J1bmRsZVBhZ2VPdmVybGF5Q2xpZW50QmFzZSog
Y2xpZW50KQogICAgIHsKQEAgLTYwLDEzICs2NywxMyBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2
YXRlOgotICAgIC8vIFBhZ2VPdmVybGF5OjpDbGllbnQuCi0gICAgdmlydHVhbCB2b2lkIHBhZ2VP
dmVybGF5RGVzdHJveWVkKFBhZ2VPdmVybGF5KikKKyAgICAvLyBXZWJQYWdlT3ZlcmxheTo6Q2xp
ZW50LgorICAgIHZpcnR1YWwgdm9pZCBwYWdlT3ZlcmxheURlc3Ryb3llZChXZWJQYWdlT3Zlcmxh
eSopIG92ZXJyaWRlCiAgICAgewogICAgICAgICBkZWxldGUgdGhpczsKICAgICB9CiAKLSAgICB2
aXJ0dWFsIHZvaWQgd2lsbE1vdmVUb1dlYlBhZ2UoUGFnZU92ZXJsYXkqIHBhZ2VPdmVybGF5LCBX
ZWJQYWdlKiBwYWdlKQorICAgIHZpcnR1YWwgdm9pZCB3aWxsTW92ZVRvUGFnZShXZWJQYWdlT3Zl
cmxheSogcGFnZU92ZXJsYXksIFdlYlBhZ2UqIHBhZ2UpIG92ZXJyaWRlCiAgICAgewogICAgICAg
ICBpZiAoIW1fY2xpZW50LndpbGxNb3ZlVG9QYWdlKQogICAgICAgICAgICAgcmV0dXJuOwpAQCAt
NzQsNyArODEsNyBAQCBwcml2YXRlOgogICAgICAgICBtX2NsaWVudC53aWxsTW92ZVRvUGFnZSh0
b0FQSShwYWdlT3ZlcmxheSksIHRvQVBJKHBhZ2UpLCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8p
OwogICAgIH0KICAgICAKLSAgICB2aXJ0dWFsIHZvaWQgZGlkTW92ZVRvV2ViUGFnZShQYWdlT3Zl
cmxheSogcGFnZU92ZXJsYXksIFdlYlBhZ2UqIHBhZ2UpCisgICAgdmlydHVhbCB2b2lkIGRpZE1v
dmVUb1BhZ2UoV2ViUGFnZU92ZXJsYXkqIHBhZ2VPdmVybGF5LCBXZWJQYWdlKiBwYWdlKSBvdmVy
cmlkZQogICAgIHsKICAgICAgICAgaWYgKCFtX2NsaWVudC5kaWRNb3ZlVG9QYWdlKQogICAgICAg
ICAgICAgcmV0dXJuOwpAQCAtODIsNyArODksNyBAQCBwcml2YXRlOgogICAgICAgICBtX2NsaWVu
dC5kaWRNb3ZlVG9QYWdlKHRvQVBJKHBhZ2VPdmVybGF5KSwgdG9BUEkocGFnZSksIG1fY2xpZW50
LmJhc2UuY2xpZW50SW5mbyk7CiAgICAgfQogCi0gICAgdmlydHVhbCB2b2lkIGRyYXdSZWN0KFBh
Z2VPdmVybGF5KiBwYWdlT3ZlcmxheSwgR3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQs
IGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCkKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd1JlY3QoV2Vi
UGFnZU92ZXJsYXkqIHBhZ2VPdmVybGF5LCBHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4
dCwgY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KSBvdmVycmlkZQogICAgIHsKICAgICAgICAgaWYg
KCFtX2NsaWVudC5kcmF3UmVjdCkKICAgICAgICAgICAgIHJldHVybjsKQEAgLTkwLDIzICs5Nywy
MyBAQCBwcml2YXRlOgogICAgICAgICBtX2NsaWVudC5kcmF3UmVjdCh0b0FQSShwYWdlT3Zlcmxh
eSksIGdyYXBoaWNzQ29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKSwgdG9BUEkoZGlydHlSZWN0KSwg
bV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKICAgICB9CiAgICAgCi0gICAgdmlydHVhbCBib29s
IG1vdXNlRXZlbnQoUGFnZU92ZXJsYXkqIHBhZ2VPdmVybGF5LCBjb25zdCBXZWJNb3VzZUV2ZW50
JiBldmVudCkKKyAgICB2aXJ0dWFsIGJvb2wgbW91c2VFdmVudChXZWJQYWdlT3ZlcmxheSogcGFn
ZU92ZXJsYXksIGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgZXZlbnQpIG92ZXJyaWRlCiAgICAg
ewogICAgICAgICBzd2l0Y2ggKGV2ZW50LnR5cGUoKSkgewotICAgICAgICBjYXNlIFdlYkV2ZW50
OjpNb3VzZURvd246IHsKKyAgICAgICAgY2FzZSBQbGF0Zm9ybU1vdXNlRXZlbnQ6OlR5cGU6Ok1v
dXNlUHJlc3NlZDogewogICAgICAgICAgICAgaWYgKCFtX2NsaWVudC5tb3VzZURvd24pCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgICAgICByZXR1cm4gbV9jbGllbnQu
bW91c2VEb3duKHRvQVBJKHBhZ2VPdmVybGF5KSwgdG9BUEkoZXZlbnQucG9zaXRpb24oKSksIHRv
QVBJKGV2ZW50LmJ1dHRvbigpKSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKICAgICAgICAg
fQotICAgICAgICBjYXNlIFdlYkV2ZW50OjpNb3VzZVVwOiB7CisgICAgICAgIGNhc2UgUGxhdGZv
cm1Nb3VzZUV2ZW50OjpUeXBlOjpNb3VzZVJlbGVhc2VkOiB7CiAgICAgICAgICAgICBpZiAoIW1f
Y2xpZW50Lm1vdXNlVXApCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAg
ICAgICByZXR1cm4gbV9jbGllbnQubW91c2VVcCh0b0FQSShwYWdlT3ZlcmxheSksIHRvQVBJKGV2
ZW50LnBvc2l0aW9uKCkpLCB0b0FQSShldmVudC5idXR0b24oKSksIG1fY2xpZW50LmJhc2UuY2xp
ZW50SW5mbyk7CiAgICAgICAgIH0KLSAgICAgICAgY2FzZSBXZWJFdmVudDo6TW91c2VNb3ZlOiB7
Ci0gICAgICAgICAgICBpZiAoZXZlbnQuYnV0dG9uKCkgPT0gV2ViTW91c2VFdmVudDo6Tm9CdXR0
b24pIHsKKyAgICAgICAgY2FzZSBQbGF0Zm9ybU1vdXNlRXZlbnQ6OlR5cGU6Ok1vdXNlTW92ZWQ6
IHsKKyAgICAgICAgICAgIGlmIChldmVudC5idXR0b24oKSA9PSBNb3VzZUJ1dHRvbjo6Tm9CdXR0
b24pIHsKICAgICAgICAgICAgICAgICBpZiAoIW1fY2xpZW50Lm1vdXNlTW92ZWQpCiAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtMTI1LDE4ICsxMzIsNDMgQEAgcHJpdmF0
ZToKICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICB2aXJ0dWFsIFdLVHlwZVJlZiBjb3B5QWNj
ZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlKFBhZ2VPdmVybGF5KiBwYWdlT3ZlcmxheSwgV0tTdHJp
bmdSZWYgYXR0cmlidXRlLCBXS1R5cGVSZWYgcGFyYW1ldGVyKQorICAgIHZpcnR1YWwgYm9vbCBj
b3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVN0cmluZ1ZhbHVlRm9yUG9pbnQoV2ViUGFnZU92ZXJs
YXkqIHBhZ2VPdmVybGF5LCBTdHJpbmcgYXR0cmlidXRlLCBXZWJDb3JlOjpGbG9hdFBvaW50IHBh
cmFtZXRlciwgU3RyaW5nJiB2YWx1ZSkgb3ZlcnJpZGUKICAgICB7CiAgICAgICAgIGlmICghbV9h
Y2Nlc3NpYmlsaXR5Q2xpZW50LmNsaWVudCgpLmNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFs
dWUpCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgcmV0dXJuIG1fYWNjZXNzaWJpbGl0
eUNsaWVudC5jbGllbnQoKS5jb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlKHRvQVBJKHBh
Z2VPdmVybGF5KSwgYXR0cmlidXRlLCBwYXJhbWV0ZXIsIG1fYWNjZXNzaWJpbGl0eUNsaWVudC5j
bGllbnQoKS5iYXNlLmNsaWVudEluZm8pOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICBXS1JldGFpblB0cjxXS1R5cGVSZWY+IHdrVHlwZSA9IG1fYWNjZXNzaWJpbGl0eUNsaWVu
dC5jbGllbnQoKS5jb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlKHRvQVBJKHBhZ2VPdmVy
bGF5KSwgdG9Db3BpZWRBUEkoYXR0cmlidXRlKSwgV0tQb2ludENyZWF0ZShXS1BvaW50TWFrZShw
YXJhbWV0ZXIueCgpLCBwYXJhbWV0ZXIueSgpKSksIG1fYWNjZXNzaWJpbGl0eUNsaWVudC5jbGll
bnQoKS5iYXNlLmNsaWVudEluZm8pOworICAgICAgICBpZiAodG9JbXBsKHdrVHlwZS5nZXQoKSkt
PnR5cGUoKSAhPSBBUEk6OlN0cmluZzo6QVBJVHlwZSkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgdmFsdWUgPSB0b1dURlN0cmluZyhzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4o
d2tUeXBlLmdldCgpKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHZpcnR1
YWwgYm9vbCBjb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZUJvb2xWYWx1ZUZvclBvaW50KFdlYlBh
Z2VPdmVybGF5KiBwYWdlT3ZlcmxheSwgU3RyaW5nIGF0dHJpYnV0ZSwgV2ViQ29yZTo6RmxvYXRQ
b2ludCBwYXJhbWV0ZXIsIGJvb2wmIHZhbHVlKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYg
KCFtX2FjY2Vzc2liaWxpdHlDbGllbnQuY2xpZW50KCkuY29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1
dGVWYWx1ZSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgV0tSZXRhaW5QdHI8
V0tUeXBlUmVmPiB3a1R5cGUgPSBtX2FjY2Vzc2liaWxpdHlDbGllbnQuY2xpZW50KCkuY29weUFj
Y2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZSh0b0FQSShwYWdlT3ZlcmxheSksIHRvQ29waWVkQVBJ
KGF0dHJpYnV0ZSksIFdLUG9pbnRDcmVhdGUoV0tQb2ludE1ha2UocGFyYW1ldGVyLngoKSwgcGFy
YW1ldGVyLnkoKSkpLCBtX2FjY2Vzc2liaWxpdHlDbGllbnQuY2xpZW50KCkuYmFzZS5jbGllbnRJ
bmZvKTsKKyAgICAgICAgaWYgKHRvSW1wbCh3a1R5cGUuZ2V0KCkpLT50eXBlKCkgIT0gQVBJOjpC
b29sZWFuOjpBUElUeXBlKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB2YWx1
ZSA9IFdLQm9vbGVhbkdldFZhbHVlKHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4od2tUeXBlLmdl
dCgpKSk7CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIHZpcnR1YWwgV0tBcnJh
eVJlZiBjb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZU5hbWVzKFBhZ2VPdmVybGF5KiBwYWdlT3Zl
cmxheSwgYm9vbCBwYXJhbWVyaXplZE5hbWVzKQorICAgIHZpcnR1YWwgVmVjdG9yPFN0cmluZz4g
Y29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVOYW1lcyhXZWJQYWdlT3ZlcmxheSogcGFnZU92ZXJs
YXksIGJvb2wgcGFyYW1lcml6ZWROYW1lcykgb3ZlcnJpZGUKICAgICB7CisgICAgICAgIFZlY3Rv
cjxTdHJpbmc+IG5hbWVzOwogICAgICAgICBpZiAoIW1fYWNjZXNzaWJpbGl0eUNsaWVudC5jbGll
bnQoKS5jb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZU5hbWVzKQotICAgICAgICAgICAgcmV0dXJu
IDA7Ci0gICAgICAgIHJldHVybiBtX2FjY2Vzc2liaWxpdHlDbGllbnQuY2xpZW50KCkuY29weUFj
Y2Vzc2liaWxpdHlBdHRyaWJ1dGVOYW1lcyh0b0FQSShwYWdlT3ZlcmxheSksIHBhcmFtZXJpemVk
TmFtZXMsIG1fYWNjZXNzaWJpbGl0eUNsaWVudC5jbGllbnQoKS5iYXNlLmNsaWVudEluZm8pOwor
ICAgICAgICAgICAgcmV0dXJuIG5hbWVzOworICAgICAgICBXS1JldGFpblB0cjxXS0FycmF5UmVm
PiB3a05hbWVzID0gbV9hY2Nlc3NpYmlsaXR5Q2xpZW50LmNsaWVudCgpLmNvcHlBY2Nlc3NpYmls
aXR5QXR0cmlidXRlTmFtZXModG9BUEkocGFnZU92ZXJsYXkpLCBwYXJhbWVyaXplZE5hbWVzLCBt
X2FjY2Vzc2liaWxpdHlDbGllbnQuY2xpZW50KCkuYmFzZS5jbGllbnRJbmZvKTsKKworICAgICAg
ICBzaXplX3QgY291bnQgPSBXS0FycmF5R2V0U2l6ZSh3a05hbWVzLmdldCgpKTsKKyAgICAgICAg
Zm9yIChzaXplX3QgayA9IDA7IGsgPCBjb3VudDsgaysrKSB7CisgICAgICAgICAgICBXS1R5cGVS
ZWYgaXRlbSA9IFdLQXJyYXlHZXRJdGVtQXRJbmRleCh3a05hbWVzLmdldCgpLCBrKTsKKyAgICAg
ICAgICAgIGlmICh0b0ltcGwoaXRlbSktPnR5cGUoKSA9PSBBUEk6OlN0cmluZzo6QVBJVHlwZSkK
KyAgICAgICAgICAgICAgICBuYW1lcy5hcHBlbmQodG9XVEZTdHJpbmcoc3RhdGljX2Nhc3Q8V0tT
dHJpbmdSZWY+KGl0ZW0pKSk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gbmFtZXM7CiAg
ICAgfQogICAgIAogICAgIEFQSTo6Q2xpZW50PFdLQnVuZGxlUGFnZU92ZXJsYXlBY2Nlc3NpYmls
aXR5Q2xpZW50QmFzZT4gbV9hY2Nlc3NpYmlsaXR5Q2xpZW50OwpAQCAtMTQ0LDcgKzE3Niw3IEBA
IHByaXZhdGU6CiAKIFdLVHlwZUlEIFdLQnVuZGxlUGFnZU92ZXJsYXlHZXRUeXBlSUQoKQogewot
ICAgIHJldHVybiB0b0FQSShQYWdlT3ZlcmxheTo6QVBJVHlwZSk7CisgICAgcmV0dXJuIHRvQVBJ
KFdlYlBhZ2VPdmVybGF5OjpBUElUeXBlKTsKIH0KIAogV0tCdW5kbGVQYWdlT3ZlcmxheVJlZiBX
S0J1bmRsZVBhZ2VPdmVybGF5Q3JlYXRlKFdLQnVuZGxlUGFnZU92ZXJsYXlDbGllbnRCYXNlKiB3
a0NsaWVudCkKQEAgLTE1NSw3ICsxODcsNyBAQCBXS0J1bmRsZVBhZ2VPdmVybGF5UmVmIFdLQnVu
ZGxlUGFnZU92ZXJsYXlDcmVhdGUoV0tCdW5kbGVQYWdlT3ZlcmxheUNsaWVudEJhc2UqCiAgICAg
YXV0byBjbGllbnRJbXBsID0gc3RkOjptYWtlX3VuaXF1ZTxQYWdlT3ZlcmxheUNsaWVudEltcGw+
KHdrQ2xpZW50KTsKIAogICAgIC8vIEZJWE1FOiBMb29rcyBsaWtlIHRoaXMgbGVha3MgdGhlIGNs
aWVudEltcGwuCi0gICAgcmV0dXJuIHRvQVBJKFBhZ2VPdmVybGF5OjpjcmVhdGUoY2xpZW50SW1w
bC5yZWxlYXNlKCkpLmxlYWtSZWYoKSk7CisgICAgcmV0dXJuIHRvQVBJKFdlYlBhZ2VPdmVybGF5
OjpjcmVhdGUoY2xpZW50SW1wbC5yZWxlYXNlKCkpLmxlYWtSZWYoKSk7CiB9CiAKIHZvaWQgV0tC
dW5kbGVQYWdlT3ZlcmxheVNldEFjY2Vzc2liaWxpdHlDbGllbnQoV0tCdW5kbGVQYWdlT3Zlcmxh
eVJlZiBidW5kbGVQYWdlT3ZlcmxheVJlZiwgV0tCdW5kbGVQYWdlT3ZlcmxheUFjY2Vzc2liaWxp
dHlDbGllbnRCYXNlKiBjbGllbnQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAKaW5kZXggYzJkNTEx
MDcuLmEyMDk3YjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29y
ZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAKQEAgLTg0MCw3ICs4NDAsOSBA
QCBQYXNzUmVmUHRyPFdlYkNvcmU6OlNlYXJjaFBvcHVwTWVudT4gV2ViQ2hyb21lQ2xpZW50Ojpj
cmVhdGVTZWFyY2hQb3B1cE1lbnUoV2ViQwogCiBHcmFwaGljc0xheWVyRmFjdG9yeSogV2ViQ2hy
b21lQ2xpZW50OjpncmFwaGljc0xheWVyRmFjdG9yeSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1f
cGFnZS0+ZHJhd2luZ0FyZWEoKS0+Z3JhcGhpY3NMYXllckZhY3RvcnkoKTsKKyAgICBpZiAoYXV0
byBkcmF3aW5nQXJlYSA9IG1fcGFnZS0+ZHJhd2luZ0FyZWEoKSkKKyAgICAgICAgcmV0dXJuIGRy
YXdpbmdBcmVhLT5ncmFwaGljc0xheWVyRmFjdG9yeSgpOworICAgIHJldHVybiBudWxscHRyOwog
fQogCiAjaWYgVVNFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FX0RJU1BMQVlfTU9OSVRPUikKQEAg
LTg1OCwxMiArODYwLDEwIEBAIHZvaWQgV2ViQ2hyb21lQ2xpZW50OjphdHRhY2hSb290R3JhcGhp
Y3NMYXllcihGcmFtZSosIEdyYXBoaWNzTGF5ZXIqIGxheWVyKQogICAgICAgICBtX3BhZ2UtPmV4
aXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSgpOwogfQogCi1HcmFwaGljc0xheWVyKiBXZWJD
aHJvbWVDbGllbnQ6OmRvY3VtZW50T3ZlcmxheUxheWVyRm9yRnJhbWUoRnJhbWUmIGZyYW1lKQor
dm9pZCBXZWJDaHJvbWVDbGllbnQ6OmF0dGFjaFZpZXdPdmVybGF5R3JhcGhpY3NMYXllcihGcmFt
ZSogZnJhbWUsIEdyYXBoaWNzTGF5ZXIqIGdyYXBoaWNzTGF5ZXIpCiB7Ci0gICAgaWYgKCZmcmFt
ZSA9PSAmbV9wYWdlLT5jb3JlUGFnZSgpLT5tYWluRnJhbWUoKSkKLSAgICAgICAgcmV0dXJuIG1f
cGFnZS0+cGFnZU92ZXJsYXlDb250cm9sbGVyKCkuZG9jdW1lbnRPdmVybGF5Um9vdExheWVyKCk7
Ci0KLSAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBpZiAoYXV0byBkcmF3aW5nQXJlYSA9IG1fcGFn
ZS0+ZHJhd2luZ0FyZWEoKSkKKyAgICAgICAgZHJhd2luZ0FyZWEtPmF0dGFjaFZpZXdPdmVybGF5
R3JhcGhpY3NMYXllcihmcmFtZSwgZ3JhcGhpY3NMYXllcik7CiB9CiAKIHZvaWQgV2ViQ2hyb21l
Q2xpZW50OjpzZXROZWVkc09uZVNob3REcmF3aW5nU3luY2hyb25pemF0aW9uKCkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xp
ZW50LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9t
ZUNsaWVudC5oCmluZGV4IDk4MmVhYWUuLmQwZTUzODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgKKysrIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaApA
QCAtMjE1LDEwICsyMTUsMTAgQEAgcHJpdmF0ZToKIAogICAgIHZpcnR1YWwgV2ViQ29yZTo6R3Jh
cGhpY3NMYXllckZhY3RvcnkqIGdyYXBoaWNzTGF5ZXJGYWN0b3J5KCkgY29uc3Qgb3ZlcnJpZGU7
CiAgICAgdmlydHVhbCB2b2lkIGF0dGFjaFJvb3RHcmFwaGljc0xheWVyKFdlYkNvcmU6OkZyYW1l
KiwgV2ViQ29yZTo6R3JhcGhpY3NMYXllciopIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBh
dHRhY2hWaWV3T3ZlcmxheUdyYXBoaWNzTGF5ZXIoV2ViQ29yZTo6RnJhbWUqLCBXZWJDb3JlOjpH
cmFwaGljc0xheWVyKikgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzT25lU2hv
dERyYXdpbmdTeW5jaHJvbml6YXRpb24oKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgc2No
ZWR1bGVDb21wb3NpdGluZ0xheWVyRmx1c2goKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIGJvb2wg
YWRqdXN0TGF5ZXJGbHVzaFRocm90dGxpbmcoV2ViQ29yZTo6TGF5ZXJGbHVzaFRocm90dGxlU3Rh
dGU6OkZsYWdzKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIq
IGRvY3VtZW50T3ZlcmxheUxheWVyRm9yRnJhbWUoV2ViQ29yZTo6RnJhbWUmKSBvdmVycmlkZTsK
IAogI2lmIFVTRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRV9ESVNQTEFZX01PTklUT1IpCiAgICAg
dmlydHVhbCBQYXNzUmVmUHRyPFdlYkNvcmU6OkRpc3BsYXlSZWZyZXNoTW9uaXRvcj4gY3JlYXRl
RGlzcGxheVJlZnJlc2hNb25pdG9yKFBsYXRmb3JtRGlzcGxheUlEKSBjb25zdCBvdmVycmlkZTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2Vi
SW5zcGVjdG9yQ2xpZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1
cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50LmNwcAppbmRleCA4NTkzNThiLi44OGNlMjJjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkluc3Bl
Y3RvckNsaWVudC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3Vw
cG9ydC9XZWJJbnNwZWN0b3JDbGllbnQuY3BwCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAi
V2ViUGFnZS5oIgogI2luY2x1ZGUgPFdlYkNvcmUvSW5zcGVjdG9yQ29udHJvbGxlci5oPgogI2lu
Y2x1ZGUgPFdlYkNvcmUvUGFnZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUGFnZU92ZXJsYXlDb250
cm9sbGVyLmg+CiAjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CiAKICNpZiBQTEFURk9STShJ
T1MpCkBAIC03Myw3ICs3NCw3IEBAIFdlYkluc3BlY3RvckNsaWVudDo6fldlYkluc3BlY3RvckNs
aWVudCgpCiAgICAgfQogCiAgICAgaWYgKG1fcGFpbnRSZWN0T3ZlcmxheSkKLSAgICAgICAgbV9w
YWdlLT51bmluc3RhbGxQYWdlT3ZlcmxheShtX3BhaW50UmVjdE92ZXJsYXkuZ2V0KCkpOworICAg
ICAgICBtX3BhZ2UtPmNvcmVQYWdlKCktPnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLnVuaW5zdGFs
bFBhZ2VPdmVybGF5KG1fcGFpbnRSZWN0T3ZlcmxheS5nZXQoKSwgUGFnZU92ZXJsYXk6OkZhZGVN
b2RlOjpGYWRlKTsKIH0KIAogdm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6Omluc3BlY3RvckRlc3Ry
b3llZCgpCkBAIC0xMTMsNyArMTE0LDcgQEAgdm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6OmhpZ2hs
aWdodCgpCiAgICAgaWYgKCFtX2hpZ2hsaWdodE92ZXJsYXkpIHsKICAgICAgICAgUmVmUHRyPFBh
Z2VPdmVybGF5PiBoaWdobGlnaHRPdmVybGF5ID0gUGFnZU92ZXJsYXk6OmNyZWF0ZSh0aGlzKTsK
ICAgICAgICAgbV9oaWdobGlnaHRPdmVybGF5ID0gaGlnaGxpZ2h0T3ZlcmxheS5nZXQoKTsKLSAg
ICAgICAgbV9wYWdlLT5pbnN0YWxsUGFnZU92ZXJsYXkoaGlnaGxpZ2h0T3ZlcmxheS5yZWxlYXNl
KCksIFBhZ2VPdmVybGF5OjpGYWRlTW9kZTo6RmFkZSk7CisgICAgICAgIG1fcGFnZS0+Y29yZVBh
Z2UoKS0+cGFnZU92ZXJsYXlDb250cm9sbGVyKCkuaW5zdGFsbFBhZ2VPdmVybGF5KGhpZ2hsaWdo
dE92ZXJsYXkucmVsZWFzZSgpLCBQYWdlT3ZlcmxheTo6RmFkZU1vZGU6OkZhZGUpOwogICAgICAg
ICBtX2hpZ2hsaWdodE92ZXJsYXktPnNldE5lZWRzRGlzcGxheSgpOwogICAgIH0gZWxzZSB7CiAg
ICAgICAgIG1faGlnaGxpZ2h0T3ZlcmxheS0+c3RvcEZhZGVPdXRBbmltYXRpb24oKTsKQEAgLTEz
MCw3ICsxMzEsNyBAQCB2b2lkIFdlYkluc3BlY3RvckNsaWVudDo6aGlkZUhpZ2hsaWdodCgpCiB7
CiAjaWYgIVBMQVRGT1JNKElPUykKICAgICBpZiAobV9oaWdobGlnaHRPdmVybGF5KQotICAgICAg
ICBtX3BhZ2UtPnVuaW5zdGFsbFBhZ2VPdmVybGF5KG1faGlnaGxpZ2h0T3ZlcmxheSwgUGFnZU92
ZXJsYXk6OkZhZGVNb2RlOjpGYWRlKTsKKyAgICAgICAgbV9wYWdlLT5jb3JlUGFnZSgpLT5wYWdl
T3ZlcmxheUNvbnRyb2xsZXIoKS51bmluc3RhbGxQYWdlT3ZlcmxheShtX2hpZ2hsaWdodE92ZXJs
YXksIFBhZ2VPdmVybGF5OjpGYWRlTW9kZTo6RmFkZSk7CiAjZWxzZQogICAgIG1fcGFnZS0+aGlk
ZUluc3BlY3RvckhpZ2hsaWdodCgpOwogI2VuZGlmCkBAIC0xNDAsNyArMTQxLDcgQEAgdm9pZCBX
ZWJJbnNwZWN0b3JDbGllbnQ6OnNob3dQYWludFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQog
ewogICAgIGlmICghbV9wYWludFJlY3RPdmVybGF5KSB7CiAgICAgICAgIG1fcGFpbnRSZWN0T3Zl
cmxheSA9IFBhZ2VPdmVybGF5OjpjcmVhdGUodGhpcywgUGFnZU92ZXJsYXk6Ok92ZXJsYXlUeXBl
OjpEb2N1bWVudCk7Ci0gICAgICAgIG1fcGFnZS0+aW5zdGFsbFBhZ2VPdmVybGF5KG1fcGFpbnRS
ZWN0T3ZlcmxheSwgUGFnZU92ZXJsYXk6OkZhZGVNb2RlOjpEb05vdEZhZGUpOworICAgICAgICBt
X3BhZ2UtPmNvcmVQYWdlKCktPnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLmluc3RhbGxQYWdlT3Zl
cmxheShtX3BhaW50UmVjdE92ZXJsYXksIFBhZ2VPdmVybGF5OjpGYWRlTW9kZTo6RG9Ob3RGYWRl
KTsKICAgICB9CiAKICAgICBpZiAoIW1fcGFpbnRJbmRpY2F0b3JMYXllckNsaWVudCkKQEAgLTIw
Miw5ICsyMDMsOSBAQCB2b2lkIFdlYkluc3BlY3RvckNsaWVudDo6cGFnZU92ZXJsYXlEZXN0cm95
ZWQoUGFnZU92ZXJsYXkqKQogewogfQogCi12b2lkIFdlYkluc3BlY3RvckNsaWVudDo6d2lsbE1v
dmVUb1dlYlBhZ2UoUGFnZU92ZXJsYXkqLCBXZWJQYWdlKiB3ZWJQYWdlKQordm9pZCBXZWJJbnNw
ZWN0b3JDbGllbnQ6OndpbGxNb3ZlVG9QYWdlKFBhZ2VPdmVybGF5KiwgUGFnZSogcGFnZSkKIHsK
LSAgICBpZiAod2ViUGFnZSkKKyAgICBpZiAocGFnZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
Ly8gVGhlIHBhZ2Ugb3ZlcmxheSBpcyBtb3ZpbmcgYXdheSBmcm9tIHRoZSB3ZWIgcGFnZSwgcmVz
ZXQgaXQuCkBAIC0yMTIsNyArMjEzLDcgQEAgdm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6OndpbGxN
b3ZlVG9XZWJQYWdlKFBhZ2VPdmVybGF5KiwgV2ViUGFnZSogd2ViUGFnZSkKICAgICBtX2hpZ2hs
aWdodE92ZXJsYXkgPSAwOwogfQogCi12b2lkIFdlYkluc3BlY3RvckNsaWVudDo6ZGlkTW92ZVRv
V2ViUGFnZShQYWdlT3ZlcmxheSosIFdlYlBhZ2UqKQordm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6
OmRpZE1vdmVUb1BhZ2UoUGFnZU92ZXJsYXkqLCBQYWdlKikKIHsKIH0KIApAQCAtMjIxLDcgKzIy
Miw3IEBAIHZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50OjpkcmF3UmVjdChQYWdlT3ZlcmxheSosIFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dCYgY29udGV4CiAgICAgbV9wYWdlLT5jb3JlUGFnZSgpLT5p
bnNwZWN0b3JDb250cm9sbGVyKCkuZHJhd0hpZ2hsaWdodChjb250ZXh0KTsKIH0KIAotYm9vbCBX
ZWJJbnNwZWN0b3JDbGllbnQ6Om1vdXNlRXZlbnQoUGFnZU92ZXJsYXkqLCBjb25zdCBXZWJNb3Vz
ZUV2ZW50JikKK2Jvb2wgV2ViSW5zcGVjdG9yQ2xpZW50Ojptb3VzZUV2ZW50KFBhZ2VPdmVybGF5
KiwgY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JikKIHsKICAgICByZXR1cm4gZmFsc2U7CiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYklu
c3BlY3RvckNsaWVudC5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9y
dC9XZWJJbnNwZWN0b3JDbGllbnQuaAppbmRleCA3OThjYWM3Li43YTYzMDAyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckNs
aWVudC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2Vi
SW5zcGVjdG9yQ2xpZW50LmgKQEAgLTI4LDE2ICsyOCwxNiBAQAogCiAjaWYgRU5BQkxFKElOU1BF
Q1RPUikKIAotI2luY2x1ZGUgIlBhZ2VPdmVybGF5LmgiCi0KICNpbmNsdWRlIDxXZWJDb3JlL0lu
c3BlY3RvckNsaWVudC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvSW5zcGVjdG9yRm9yd2FyZGluZy5o
PgorI2luY2x1ZGUgPFdlYkNvcmUvUGFnZU92ZXJsYXkuaD4KICNpbmNsdWRlIDx3dGYvSGFzaFNl
dC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBHcmFwaGljc0NvbnRleHQ7CiBjbGFz
cyBHcmFwaGljc0xheWVyOwogY2xhc3MgSW50UmVjdDsKK2NsYXNzIFBhZ2VPdmVybGF5OwogfQog
CiBuYW1lc3BhY2UgV2ViS2l0IHsKQEAgLTQ1LDcgKzQ1LDcgQEAgbmFtZXNwYWNlIFdlYktpdCB7
CiBjbGFzcyBXZWJQYWdlOwogY2xhc3MgUmVwYWludEluZGljYXRvckxheWVyQ2xpZW50OwogCi1j
bGFzcyBXZWJJbnNwZWN0b3JDbGllbnQgOiBwdWJsaWMgV2ViQ29yZTo6SW5zcGVjdG9yQ2xpZW50
LCBwcml2YXRlIFBhZ2VPdmVybGF5OjpDbGllbnQgeworY2xhc3MgV2ViSW5zcGVjdG9yQ2xpZW50
IDogcHVibGljIFdlYkNvcmU6Okluc3BlY3RvckNsaWVudCwgcHJpdmF0ZSBXZWJDb3JlOjpQYWdl
T3ZlcmxheTo6Q2xpZW50IHsKIGZyaWVuZCBjbGFzcyBSZXBhaW50SW5kaWNhdG9yTGF5ZXJDbGll
bnQ7CiBwdWJsaWM6CiAgICAgV2ViSW5zcGVjdG9yQ2xpZW50KFdlYlBhZ2UqKTsKQEAgLTc0LDE4
ICs3NCwxOCBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBzaG93UGFpbnRSZWN0KGNvbnN0
IFdlYkNvcmU6OkZsb2F0UmVjdCYpIG92ZXJyaWRlOwogCiAgICAgLy8gUGFnZU92ZXJsYXk6OkNs
aWVudAotICAgIHZpcnR1YWwgdm9pZCBwYWdlT3ZlcmxheURlc3Ryb3llZChQYWdlT3ZlcmxheSop
IG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCB3aWxsTW92ZVRvV2ViUGFnZShQYWdlT3Zlcmxh
eSosIFdlYlBhZ2UqKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkTW92ZVRvV2ViUGFn
ZShQYWdlT3ZlcmxheSosIFdlYlBhZ2UqKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgZHJh
d1JlY3QoUGFnZU92ZXJsYXkqLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmLCBjb25zdCBXZWJD
b3JlOjpJbnRSZWN0Jikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBib29sIG1vdXNlRXZlbnQoUGFn
ZU92ZXJsYXkqLCBjb25zdCBXZWJNb3VzZUV2ZW50Jikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2
b2lkIHBhZ2VPdmVybGF5RGVzdHJveWVkKFdlYkNvcmU6OlBhZ2VPdmVybGF5Kikgb3ZlcnJpZGU7
CisgICAgdmlydHVhbCB2b2lkIHdpbGxNb3ZlVG9QYWdlKFdlYkNvcmU6OlBhZ2VPdmVybGF5Kiwg
V2ViQ29yZTo6UGFnZSopIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBkaWRNb3ZlVG9QYWdl
KFdlYkNvcmU6OlBhZ2VPdmVybGF5KiwgV2ViQ29yZTo6UGFnZSopIG92ZXJyaWRlOworICAgIHZp
cnR1YWwgdm9pZCBkcmF3UmVjdChXZWJDb3JlOjpQYWdlT3ZlcmxheSosIFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dCYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSBvdmVycmlkZTsKKyAgICB2aXJ0
dWFsIGJvb2wgbW91c2VFdmVudChXZWJDb3JlOjpQYWdlT3ZlcmxheSosIGNvbnN0IFdlYkNvcmU6
OlBsYXRmb3JtTW91c2VFdmVudCYpIG92ZXJyaWRlOwogCiAgICAgdm9pZCBhbmltYXRpb25FbmRl
ZEZvckxheWVyKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKTsKIAogICAgIFdlYlBhZ2Uq
IG1fcGFnZTsKLSAgICBQYWdlT3ZlcmxheSogbV9oaWdobGlnaHRPdmVybGF5OworICAgIFdlYkNv
cmU6OlBhZ2VPdmVybGF5KiBtX2hpZ2hsaWdodE92ZXJsYXk7CiAgICAgCi0gICAgUmVmUHRyPFBh
Z2VPdmVybGF5PiBtX3BhaW50UmVjdE92ZXJsYXk7CisgICAgUmVmUHRyPFdlYkNvcmU6OlBhZ2VP
dmVybGF5PiBtX3BhaW50UmVjdE92ZXJsYXk7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFJlcGFpbnRJ
bmRpY2F0b3JMYXllckNsaWVudD4gbV9wYWludEluZGljYXRvckxheWVyQ2xpZW50OwogICAgIEhh
c2hTZXQ8V2ViQ29yZTo6R3JhcGhpY3NMYXllcio+IG1fcGFpbnRSZWN0TGF5ZXJzOyAvLyBJZGVh
bGx5IHRoaXMgd291bGQgYmUgSGFzaFNldDxzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NMYXllcj4+
IGJ1dCB0aGF0IGRvZXNuJ3Qgd29yayB5ZXQuIHdlYmtpdC5vcmcvYi8xMzYxNjYKIH07CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWEuaCBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYS5oCmluZGV4IGY3
NGI0ZGUuLmRiM2I4M2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9EcmF3aW5nQXJlYS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9EcmF3aW5nQXJlYS5oCkBAIC00NSw2ICs0NSw3IEBAIGNsYXNzIE1lc3NhZ2VEZWNvZGVyOwog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBEaXNwbGF5UmVmcmVzaE1vbml0b3I7CitjbGFz
cyBGcmFtZTsKIGNsYXNzIEZyYW1lVmlldzsKIGNsYXNzIEdyYXBoaWNzTGF5ZXI7CiBjbGFzcyBH
cmFwaGljc0xheWVyRmFjdG9yeTsKQEAgLTEyMCw2ICsxMjEsOCBAQCBwdWJsaWM6CiAKICAgICB2
aXJ0dWFsIGJvb2wgYWRqdXN0TGF5ZXJGbHVzaFRocm90dGxpbmcoV2ViQ29yZTo6TGF5ZXJGbHVz
aFRocm90dGxlU3RhdGU6OkZsYWdzKSB7IHJldHVybiBmYWxzZTsgfQogCisgICAgdmlydHVhbCB2
b2lkIGF0dGFjaFZpZXdPdmVybGF5R3JhcGhpY3NMYXllcihXZWJDb3JlOjpGcmFtZSosIFdlYkNv
cmU6OkdyYXBoaWNzTGF5ZXIqKSB7IH0KKwogcHJvdGVjdGVkOgogICAgIERyYXdpbmdBcmVhKERy
YXdpbmdBcmVhVHlwZSwgV2ViUGFnZSYpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNwcAppbmRleCAxZTM0NjJiLi4wYjkxYWMx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRy
b2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29u
dHJvbGxlci5jcHAKQEAgLTQwLDYgKzQwLDggQEAKICNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNz
Q29udGV4dC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvTWFpbkZyYW1lLmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9QYWdlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9QYWdlT3ZlcmxheUNvbnRyb2xsZXIuaD4K
KyNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtTW91c2VFdmVudC5oPgogI2luY2x1ZGUgPFdlYkNv
cmUvUGx1Z2luRG9jdW1lbnQuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CkBAIC02Myw3
ICs2NSw3IEBAIHN0YXRpYyBXZWJDb3JlOjpGaW5kT3B0aW9ucyBjb3JlKEZpbmRPcHRpb25zIG9w
dGlvbnMpCiAKIEZpbmRDb250cm9sbGVyOjpGaW5kQ29udHJvbGxlcihXZWJQYWdlKiB3ZWJQYWdl
KQogICAgIDogbV93ZWJQYWdlKHdlYlBhZ2UpCi0gICAgLCBtX2ZpbmRQYWdlT3ZlcmxheSgwKQor
ICAgICwgbV9maW5kUGFnZU92ZXJsYXkobnVsbHB0cikKICAgICAsIG1faXNTaG93aW5nRmluZElu
ZGljYXRvcihmYWxzZSkKICAgICAsIG1fZm91bmRTdHJpbmdNYXRjaEluZGV4KC0xKQogewpAQCAt
MTgyLDEyICsxODQsMTIgQEAgdm9pZCBGaW5kQ29udHJvbGxlcjo6dXBkYXRlRmluZFVJQWZ0ZXJQ
YWdlU2Nyb2xsKGJvb2wgZm91bmQsIGNvbnN0IFN0cmluZyYgc3RyaW4KIAogICAgIGlmICghc2hv
dWxkU2hvd092ZXJsYXkpIHsKICAgICAgICAgaWYgKG1fZmluZFBhZ2VPdmVybGF5KQotICAgICAg
ICAgICAgbV93ZWJQYWdlLT51bmluc3RhbGxQYWdlT3ZlcmxheShtX2ZpbmRQYWdlT3ZlcmxheSwg
UGFnZU92ZXJsYXk6OkZhZGVNb2RlOjpGYWRlKTsKKyAgICAgICAgICAgIG1fd2ViUGFnZS0+Y29y
ZVBhZ2UoKS0+cGFnZU92ZXJsYXlDb250cm9sbGVyKCkudW5pbnN0YWxsUGFnZU92ZXJsYXkobV9m
aW5kUGFnZU92ZXJsYXksIFBhZ2VPdmVybGF5OjpGYWRlTW9kZTo6RmFkZSk7CiAgICAgfSBlbHNl
IHsKICAgICAgICAgaWYgKCFtX2ZpbmRQYWdlT3ZlcmxheSkgewogICAgICAgICAgICAgUmVmUHRy
PFBhZ2VPdmVybGF5PiBmaW5kUGFnZU92ZXJsYXkgPSBQYWdlT3ZlcmxheTo6Y3JlYXRlKHRoaXMp
OwogICAgICAgICAgICAgbV9maW5kUGFnZU92ZXJsYXkgPSBmaW5kUGFnZU92ZXJsYXkuZ2V0KCk7
Ci0gICAgICAgICAgICBtX3dlYlBhZ2UtPmluc3RhbGxQYWdlT3ZlcmxheShmaW5kUGFnZU92ZXJs
YXkucmVsZWFzZSgpLCBQYWdlT3ZlcmxheTo6RmFkZU1vZGU6OkZhZGUpOworICAgICAgICAgICAg
bV93ZWJQYWdlLT5jb3JlUGFnZSgpLT5wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKS5pbnN0YWxsUGFn
ZU92ZXJsYXkoZmluZFBhZ2VPdmVybGF5LnJlbGVhc2UoKSwgUGFnZU92ZXJsYXk6OkZhZGVNb2Rl
OjpGYWRlKTsKICAgICAgICAgfQogICAgICAgICBtX2ZpbmRQYWdlT3ZlcmxheS0+c2V0TmVlZHNE
aXNwbGF5KCk7CiAgICAgfQpAQCAtMzMwLDcgKzMzMiw3IEBAIHZvaWQgRmluZENvbnRyb2xsZXI6
OmhpZGVGaW5kVUkoKQogewogICAgIG1fZmluZE1hdGNoZXMuY2xlYXIoKTsKICAgICBpZiAobV9m
aW5kUGFnZU92ZXJsYXkpCi0gICAgICAgIG1fd2ViUGFnZS0+dW5pbnN0YWxsUGFnZU92ZXJsYXko
bV9maW5kUGFnZU92ZXJsYXksIFBhZ2VPdmVybGF5OjpGYWRlTW9kZTo6RmFkZSk7CisgICAgICAg
IG1fd2ViUGFnZS0+Y29yZVBhZ2UoKS0+cGFnZU92ZXJsYXlDb250cm9sbGVyKCkudW5pbnN0YWxs
UGFnZU92ZXJsYXkobV9maW5kUGFnZU92ZXJsYXksIFBhZ2VPdmVybGF5OjpGYWRlTW9kZTo6RmFk
ZSk7CiAKICAgICBQbHVnaW5WaWV3KiBwbHVnaW5WaWV3ID0gcGx1Z2luVmlld0ZvckZyYW1lKG1f
d2ViUGFnZS0+bWFpbkZyYW1lKCkpOwogICAgIApAQCAtNDQzLDE2ICs0NDUsMTYgQEAgdm9pZCBG
aW5kQ29udHJvbGxlcjo6cGFnZU92ZXJsYXlEZXN0cm95ZWQoUGFnZU92ZXJsYXkqKQogewogfQog
Ci12b2lkIEZpbmRDb250cm9sbGVyOjp3aWxsTW92ZVRvV2ViUGFnZShQYWdlT3ZlcmxheSosIFdl
YlBhZ2UqIHdlYlBhZ2UpCit2b2lkIEZpbmRDb250cm9sbGVyOjp3aWxsTW92ZVRvUGFnZShQYWdl
T3ZlcmxheSosIFBhZ2UqIHBhZ2UpCiB7Ci0gICAgaWYgKHdlYlBhZ2UpCisgICAgaWYgKHBhZ2Up
CiAgICAgICAgIHJldHVybjsKIAogICAgIEFTU0VSVChtX2ZpbmRQYWdlT3ZlcmxheSk7CiAgICAg
bV9maW5kUGFnZU92ZXJsYXkgPSAwOwogfQogICAgIAotdm9pZCBGaW5kQ29udHJvbGxlcjo6ZGlk
TW92ZVRvV2ViUGFnZShQYWdlT3ZlcmxheSosIFdlYlBhZ2UqKQordm9pZCBGaW5kQ29udHJvbGxl
cjo6ZGlkTW92ZVRvUGFnZShQYWdlT3ZlcmxheSosIFBhZ2UqKQogewogfQogCkBAIC01MDYsOSAr
NTA4LDkgQEAgdm9pZCBGaW5kQ29udHJvbGxlcjo6ZHJhd1JlY3QoUGFnZU92ZXJsYXkqLCBHcmFw
aGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgY28KICAgICB9CiB9CiAKLWJvb2wgRmluZENv
bnRyb2xsZXI6Om1vdXNlRXZlbnQoUGFnZU92ZXJsYXkqLCBjb25zdCBXZWJNb3VzZUV2ZW50JiBt
b3VzZUV2ZW50KQorYm9vbCBGaW5kQ29udHJvbGxlcjo6bW91c2VFdmVudChQYWdlT3ZlcmxheSos
IGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgbW91c2VFdmVudCkKIHsKLSAgICBpZiAobW91c2VF
dmVudC50eXBlKCkgPT0gV2ViRXZlbnQ6Ok1vdXNlRG93bikKKyAgICBpZiAobW91c2VFdmVudC50
eXBlKCkgPT0gUGxhdGZvcm1FdmVudDo6TW91c2VQcmVzc2VkKQogICAgICAgICBoaWRlRmluZFVJ
KCk7CiAKICAgICByZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5oCmluZGV4IDI4MDYzZmMuLjAyNmNkMTAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5o
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5o
CkBAIC0yNiwxMCArMjYsMTAgQEAKICNpZm5kZWYgRmluZENvbnRyb2xsZXJfaAogI2RlZmluZSBG
aW5kQ29udHJvbGxlcl9oCiAKLSNpbmNsdWRlICJQYWdlT3ZlcmxheS5oIgogI2luY2x1ZGUgIlNo
YXJlYWJsZUJpdG1hcC5oIgogI2luY2x1ZGUgIldlYkZpbmRPcHRpb25zLmgiCiAjaW5jbHVkZSA8
V2ViQ29yZS9JbnRSZWN0Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9QYWdlT3ZlcmxheS5oPgogI2lu
Y2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgpAQCAtNDUsMTAgKzQ1LDkgQEAgY2xhc3MgUmFuZ2U7CiAKIG5h
bWVzcGFjZSBXZWJLaXQgewogCi1jbGFzcyBQYWdlT3ZlcmxheTsKIGNsYXNzIFdlYlBhZ2U7CiAK
LWNsYXNzIEZpbmRDb250cm9sbGVyIDogcHJpdmF0ZSBQYWdlT3ZlcmxheTo6Q2xpZW50IHsKK2Ns
YXNzIEZpbmRDb250cm9sbGVyIDogcHJpdmF0ZSBXZWJDb3JlOjpQYWdlT3ZlcmxheTo6Q2xpZW50
IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShGaW5kQ29udHJvbGxlcik7CiAKIHB1YmxpYzoK
QEAgLTcxLDExICs3MCwxMSBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgLy8gUGFnZU92ZXJs
YXk6OkNsaWVudC4KLSAgICB2aXJ0dWFsIHZvaWQgcGFnZU92ZXJsYXlEZXN0cm95ZWQoUGFnZU92
ZXJsYXkqKTsKLSAgICB2aXJ0dWFsIHZvaWQgd2lsbE1vdmVUb1dlYlBhZ2UoUGFnZU92ZXJsYXkq
LCBXZWJQYWdlKik7Ci0gICAgdmlydHVhbCB2b2lkIGRpZE1vdmVUb1dlYlBhZ2UoUGFnZU92ZXJs
YXkqLCBXZWJQYWdlKik7Ci0gICAgdmlydHVhbCBib29sIG1vdXNlRXZlbnQoUGFnZU92ZXJsYXkq
LCBjb25zdCBXZWJNb3VzZUV2ZW50Jik7Ci0gICAgdmlydHVhbCB2b2lkIGRyYXdSZWN0KFBhZ2VP
dmVybGF5KiwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiwgY29uc3QgV2ViQ29yZTo6SW50UmVj
dCYgZGlydHlSZWN0KTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFnZU92ZXJsYXlEZXN0cm95ZWQoV2Vi
Q29yZTo6UGFnZU92ZXJsYXkqKTsKKyAgICB2aXJ0dWFsIHZvaWQgd2lsbE1vdmVUb1BhZ2UoV2Vi
Q29yZTo6UGFnZU92ZXJsYXkqLCBXZWJDb3JlOjpQYWdlKik7CisgICAgdmlydHVhbCB2b2lkIGRp
ZE1vdmVUb1BhZ2UoV2ViQ29yZTo6UGFnZU92ZXJsYXkqLCBXZWJDb3JlOjpQYWdlKik7CisgICAg
dmlydHVhbCBib29sIG1vdXNlRXZlbnQoV2ViQ29yZTo6UGFnZU92ZXJsYXkqLCBjb25zdCBXZWJD
b3JlOjpQbGF0Zm9ybU1vdXNlRXZlbnQmKTsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd1JlY3QoV2Vi
Q29yZTo6UGFnZU92ZXJsYXkqLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmLCBjb25zdCBXZWJD
b3JlOjpJbnRSZWN0JiBkaXJ0eVJlY3QpOwogCiAgICAgVmVjdG9yPFdlYkNvcmU6OkludFJlY3Q+
IHJlY3RzRm9yVGV4dE1hdGNoZXMoKTsKICAgICBib29sIGdldEZpbmRJbmRpY2F0b3JCaXRtYXBB
bmRSZWN0KFdlYkNvcmU6OkZyYW1lJiwgU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUmLCBXZWJDb3Jl
OjpJbnRSZWN0JiBzZWxlY3Rpb25SZWN0KTsKQEAgLTg4LDcgKzg3LDcgQEAgcHJpdmF0ZToKICAg
ICB2b2lkIGRpZEhpZGVGaW5kSW5kaWNhdG9yKCk7CiAKICAgICBXZWJQYWdlKiBtX3dlYlBhZ2U7
Ci0gICAgUGFnZU92ZXJsYXkqIG1fZmluZFBhZ2VPdmVybGF5OworICAgIFdlYkNvcmU6OlBhZ2VP
dmVybGF5KiBtX2ZpbmRQYWdlT3ZlcmxheTsKIAogICAgIC8vIFdoZXRoZXIgdGhlIFVJIHByb2Nl
c3MgaXMgc2hvd2luZyB0aGUgZmluZCBpbmRpY2F0b3IuIE5vdGUgdGhhdCB0aGlzIGNhbiBiZSB0
cnVlIGV2ZW4gaWYKICAgICAvLyB0aGUgZmluZCBpbmRpY2F0b3IgaXNuJ3Qgc2hvd2luZywgYnV0
IGl0IHdpbGwgbmV2ZXIgYmUgZmFsc2Ugd2hlbiBpdCBpcyBzaG93aW5nLgpAQCAtOTksNyArOTgs
NyBAQCBwcml2YXRlOgogICAgIGludCBtX2ZvdW5kU3RyaW5nTWF0Y2hJbmRleDsKIAogI2lmIFBM
QVRGT1JNKElPUykKLSAgICBSZWZQdHI8UGFnZU92ZXJsYXk+IG1fZmluZEluZGljYXRvck92ZXJs
YXk7CisgICAgUmVmUHRyPFdlYkNvcmU6OlBhZ2VPdmVybGF5PiBtX2ZpbmRJbmRpY2F0b3JPdmVy
bGF5OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxGaW5kSW5kaWNhdG9yT3ZlcmxheUNsaWVudElPUz4g
bV9maW5kSW5kaWNhdG9yT3ZlcmxheUNsaWVudDsKICNlbmRpZgogfTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVIb3N0LmggYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlSG9zdC5oCmluZGV4IDNmZDQ5NTQu
LjY0ZWVjNTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9M
YXllclRyZWVIb3N0LmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0xh
eWVyVHJlZUhvc3QuaApAQCAtNDcsNyArNDcsNiBAQCBjbGFzcyBHcmFwaGljc0xheWVyRmFjdG9y
eTsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLWNsYXNzIFBhZ2VPdmVybGF5OwogY2xhc3MgVXBk
YXRlSW5mbzsKIGNsYXNzIFdlYlBhZ2U7CiAKQEAgLTcyLDExICs3MSw2IEBAIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIHZvaWQgZGV2aWNlT3JQYWdlU2NhbGVGYWN0b3JDaGFuZ2VkKCkgPSAwOwogICAg
IHZpcnR1YWwgdm9pZCBwYWdlQmFja2dyb3VuZFRyYW5zcGFyZW5jeUNoYW5nZWQoKSA9IDA7CiAK
LSAgICB2aXJ0dWFsIHZvaWQgZGlkSW5zdGFsbFBhZ2VPdmVybGF5KFBhZ2VPdmVybGF5KikgeyB9
Ci0gICAgdmlydHVhbCB2b2lkIGRpZFVuaW5zdGFsbFBhZ2VPdmVybGF5KFBhZ2VPdmVybGF5Kikg
eyB9Ci0gICAgdmlydHVhbCB2b2lkIHNldFBhZ2VPdmVybGF5TmVlZHNEaXNwbGF5KFBhZ2VPdmVy
bGF5KiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBzZXRQ
YWdlT3ZlcmxheU9wYWNpdHkoUGFnZU92ZXJsYXkqLCBmbG9hdCkgeyB9Ci0KICAgICB2aXJ0dWFs
IHZvaWQgcGF1c2VSZW5kZXJpbmcoKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgcmVzdW1lUmVuZGVy
aW5nKCkgeyB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9QYWdlT3ZlcmxheS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvUGFn
ZU92ZXJsYXkuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZDg4MWI2Li4wMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9QYWdlT3ZlcmxheS5j
cHAKKysrIC9kZXYvbnVsbApAQCAtMSwyNTEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlICJQYWdlT3ZlcmxheS5oIgotCi0jaW5jbHVkZSAiV2ViUGFn
ZS5oIgotI2luY2x1ZGUgIldlYlByb2Nlc3MuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lVmll
dy5oPgotI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+Ci0jaW5jbHVkZSA8V2Vi
Q29yZS9NYWluRnJhbWUuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1BhZ2UuaD4KLSNpbmNsdWRlIDxX
ZWJDb3JlL1Njcm9sbGJhclRoZW1lLmg+Ci0jaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+Ci0K
LXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotc3RhdGlj
IGNvbnN0IGRvdWJsZSBmYWRlQW5pbWF0aW9uRHVyYXRpb24gPSAwLjI7Ci1zdGF0aWMgY29uc3Qg
ZG91YmxlIGZhZGVBbmltYXRpb25GcmFtZVJhdGUgPSAzMDsKLQotUGFzc1JlZlB0cjxQYWdlT3Zl
cmxheT4gUGFnZU92ZXJsYXk6OmNyZWF0ZShDbGllbnQqIGNsaWVudCwgT3ZlcmxheVR5cGUgb3Zl
cmxheVR5cGUpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBQYWdlT3ZlcmxheShjbGllbnQs
IG92ZXJsYXlUeXBlKSk7Ci19Ci0KLVBhZ2VPdmVybGF5OjpQYWdlT3ZlcmxheShDbGllbnQqIGNs
aWVudCwgT3ZlcmxheVR5cGUgb3ZlcmxheVR5cGUpCi0gICAgOiBtX2NsaWVudChjbGllbnQpCi0g
ICAgLCBtX3dlYlBhZ2UobnVsbHB0cikKLSAgICAsIG1fZmFkZUFuaW1hdGlvblRpbWVyKFJ1bkxv
b3A6Om1haW4oKSwgdGhpcywgJlBhZ2VPdmVybGF5OjpmYWRlQW5pbWF0aW9uVGltZXJGaXJlZCkK
LSAgICAsIG1fZmFkZUFuaW1hdGlvblN0YXJ0VGltZSgwKQotICAgICwgbV9mYWRlQW5pbWF0aW9u
RHVyYXRpb24oZmFkZUFuaW1hdGlvbkR1cmF0aW9uKQotICAgICwgbV9mYWRlQW5pbWF0aW9uVHlw
ZShOb0FuaW1hdGlvbikKLSAgICAsIG1fZnJhY3Rpb25GYWRlZEluKDEpCi0gICAgLCBtX292ZXJs
YXlUeXBlKG92ZXJsYXlUeXBlKQotICAgICwgbV9iYWNrZ3JvdW5kQ29sb3IoQ29sb3I6OnRyYW5z
cGFyZW50KQotewotfQotCi1QYWdlT3ZlcmxheTo6flBhZ2VPdmVybGF5KCkKLXsKLX0KLQotSW50
UmVjdCBQYWdlT3ZlcmxheTo6Ym91bmRzKCkgY29uc3QKLXsKLSAgICBpZiAoIW1fb3ZlcnJpZGVG
cmFtZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBJbnRSZWN0KEludFBvaW50KCksIG1fb3Zl
cnJpZGVGcmFtZS5zaXplKCkpOwotCi0gICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBtX3dlYlBh
Z2UtPm1haW5GcmFtZVZpZXcoKTsKLQotICAgIHN3aXRjaCAobV9vdmVybGF5VHlwZSkgewotICAg
IGNhc2UgT3ZlcmxheVR5cGU6OlZpZXc6IHsKLSAgICAgICAgaW50IHdpZHRoID0gZnJhbWVWaWV3
LT53aWR0aCgpOwotICAgICAgICBpbnQgaGVpZ2h0ID0gZnJhbWVWaWV3LT5oZWlnaHQoKTsKLQot
ICAgICAgICBpZiAoIVNjcm9sbGJhclRoZW1lOjp0aGVtZSgpLT51c2VzT3ZlcmxheVNjcm9sbGJh
cnMoKSkgewotICAgICAgICAgICAgaWYgKGZyYW1lVmlldy0+dmVydGljYWxTY3JvbGxiYXIoKSkK
LSAgICAgICAgICAgICAgICB3aWR0aCAtPSBmcmFtZVZpZXctPnZlcnRpY2FsU2Nyb2xsYmFyKCkt
PndpZHRoKCk7Ci0gICAgICAgICAgICBpZiAoZnJhbWVWaWV3LT5ob3Jpem9udGFsU2Nyb2xsYmFy
KCkpCi0gICAgICAgICAgICAgICAgaGVpZ2h0IC09IGZyYW1lVmlldy0+aG9yaXpvbnRhbFNjcm9s
bGJhcigpLT5oZWlnaHQoKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gSW50UmVjdCgwLCAw
LCB3aWR0aCwgaGVpZ2h0KTsKLSAgICB9Ci0gICAgY2FzZSBPdmVybGF5VHlwZTo6RG9jdW1lbnQ6
Ci0gICAgICAgIHJldHVybiBJbnRSZWN0KEludFBvaW50KCksIGZyYW1lVmlldy0+Y29udGVudHNT
aXplKCkpOwotICAgIH07Ci0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4g
SW50UmVjdChJbnRQb2ludCgpLCBmcmFtZVZpZXctPmNvbnRlbnRzU2l6ZSgpKTsKLX0KLQotSW50
UmVjdCBQYWdlT3ZlcmxheTo6ZnJhbWUoKSBjb25zdAotewotICAgIGlmICghbV9vdmVycmlkZUZy
YW1lLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIG1fb3ZlcnJpZGVGcmFtZTsKLQotICAgIHJl
dHVybiBib3VuZHMoKTsKLX0KLQotdm9pZCBQYWdlT3ZlcmxheTo6c2V0RnJhbWUoSW50UmVjdCBm
cmFtZSkKLXsKLSAgICBpZiAobV9vdmVycmlkZUZyYW1lID09IGZyYW1lKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBtX292ZXJyaWRlRnJhbWUgPSBmcmFtZTsKLQotICAgIGlmIChtX3dlYlBhZ2Up
Ci0gICAgICAgIG1fd2ViUGFnZS0+cGFnZU92ZXJsYXlDb250cm9sbGVyKCkuZGlkQ2hhbmdlT3Zl
cmxheUZyYW1lKCp0aGlzKTsKLX0KLQotdm9pZCBQYWdlT3ZlcmxheTo6c2V0QmFja2dyb3VuZENv
bG9yKFJHQkEzMiBiYWNrZ3JvdW5kQ29sb3IpCi17Ci0gICAgaWYgKG1fYmFja2dyb3VuZENvbG9y
ID09IGJhY2tncm91bmRDb2xvcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9iYWNrZ3JvdW5k
Q29sb3IgPSBiYWNrZ3JvdW5kQ29sb3I7Ci0KLSAgICBpZiAobV93ZWJQYWdlKQotICAgICAgICBt
X3dlYlBhZ2UtPnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLmRpZENoYW5nZU92ZXJsYXlCYWNrZ3Jv
dW5kQ29sb3IoKnRoaXMpOwotfQotCi12b2lkIFBhZ2VPdmVybGF5OjpzZXRQYWdlKFdlYlBhZ2Uq
IHdlYlBhZ2UpCi17Ci0gICAgbV9jbGllbnQtPndpbGxNb3ZlVG9XZWJQYWdlKHRoaXMsIHdlYlBh
Z2UpOwotICAgIG1fd2ViUGFnZSA9IHdlYlBhZ2U7Ci0gICAgbV9jbGllbnQtPmRpZE1vdmVUb1dl
YlBhZ2UodGhpcywgd2ViUGFnZSk7Ci0KLSAgICBtX2ZhZGVBbmltYXRpb25UaW1lci5zdG9wKCk7
Ci19Ci0KLXZvaWQgUGFnZU92ZXJsYXk6OnNldE5lZWRzRGlzcGxheShjb25zdCBJbnRSZWN0JiBk
aXJ0eVJlY3QpCi17Ci0gICAgaWYgKCFtX3dlYlBhZ2UpCi0gICAgICAgIHJldHVybjsKLQotICAg
IG1fd2ViUGFnZS0+cGFnZU92ZXJsYXlDb250cm9sbGVyKCkuc2V0UGFnZU92ZXJsYXlPcGFjaXR5
KCp0aGlzLCBtX2ZyYWN0aW9uRmFkZWRJbik7Ci0gICAgbV93ZWJQYWdlLT5wYWdlT3ZlcmxheUNv
bnRyb2xsZXIoKS5zZXRQYWdlT3ZlcmxheU5lZWRzRGlzcGxheSgqdGhpcywgZGlydHlSZWN0KTsK
LX0KLQotdm9pZCBQYWdlT3ZlcmxheTo6c2V0TmVlZHNEaXNwbGF5KCkKLXsKLSAgICBzZXROZWVk
c0Rpc3BsYXkoYm91bmRzKCkpOwotfQotCi12b2lkIFBhZ2VPdmVybGF5OjpkcmF3UmVjdChHcmFw
aGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KQot
ewotICAgIC8vIElmIHRoZSBkaXJ0eSByZWN0IGlzIG91dHNpZGUgdGhlIGJvdW5kcywgaWdub3Jl
IGl0LgotICAgIEludFJlY3QgcGFpbnRSZWN0ID0gaW50ZXJzZWN0aW9uKGRpcnR5UmVjdCwgYm91
bmRzKCkpOwotICAgIGlmIChwYWludFJlY3QuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoZ3JhcGhpY3NDb250ZXh0
KTsKLSAgICBtX2NsaWVudC0+ZHJhd1JlY3QodGhpcywgZ3JhcGhpY3NDb250ZXh0LCBwYWludFJl
Y3QpOwotfQotICAgIAotYm9vbCBQYWdlT3ZlcmxheTo6bW91c2VFdmVudChjb25zdCBXZWJNb3Vz
ZUV2ZW50JiBtb3VzZUV2ZW50KQotewotICAgIEludFBvaW50IG1vdXNlUG9zaXRpb25Jbk92ZXJs
YXlDb29yZGluYXRlcyhtb3VzZUV2ZW50LnBvc2l0aW9uKCkpOwotCi0gICAgaWYgKG1fb3Zlcmxh
eVR5cGUgPT0gUGFnZU92ZXJsYXk6Ok92ZXJsYXlUeXBlOjpEb2N1bWVudCkKLSAgICAgICAgbW91
c2VQb3NpdGlvbkluT3ZlcmxheUNvb3JkaW5hdGVzID0gbV93ZWJQYWdlLT5jb3JlUGFnZSgpLT5t
YWluRnJhbWUoKS52aWV3KCktPnJvb3RWaWV3VG9Db250ZW50cyhtb3VzZVBvc2l0aW9uSW5PdmVy
bGF5Q29vcmRpbmF0ZXMpOwotCi0gICAgLy8gSWdub3JlIGV2ZW50cyBvdXRzaWRlIHRoZSBib3Vu
ZHMuCi0gICAgaWYgKCFib3VuZHMoKS5jb250YWlucyhtb3VzZVBvc2l0aW9uSW5PdmVybGF5Q29v
cmRpbmF0ZXMpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gbV9jbGllbnQt
Pm1vdXNlRXZlbnQodGhpcywgbW91c2VFdmVudCk7Ci19Ci0KLXZvaWQgUGFnZU92ZXJsYXk6OmRp
ZFNjcm9sbEZyYW1lKEZyYW1lKiBmcmFtZSkKLXsKLSAgICBtX2NsaWVudC0+ZGlkU2Nyb2xsRnJh
bWUodGhpcywgZnJhbWUpOwotfQotCi1XS1R5cGVSZWYgUGFnZU92ZXJsYXk6OmNvcHlBY2Nlc3Np
YmlsaXR5QXR0cmlidXRlVmFsdWUoV0tTdHJpbmdSZWYgYXR0cmlidXRlLCBXS1R5cGVSZWYgcGFy
YW1ldGVyKQotewotICAgIHJldHVybiBtX2NsaWVudC0+Y29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1
dGVWYWx1ZSh0aGlzLCBhdHRyaWJ1dGUsIHBhcmFtZXRlcik7Ci19Ci0KLVdLQXJyYXlSZWYgUGFn
ZU92ZXJsYXk6OmNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlTmFtZXMoYm9vbCBwYXJhbWV0ZXJp
emVkTmFtZXMpCi17Ci0gICAgcmV0dXJuIG1fY2xpZW50LT5jb3B5QWNjZXNzaWJpbGl0eUF0dHJp
YnV0ZU5hbWVzKHRoaXMsIHBhcmFtZXRlcml6ZWROYW1lcyk7Ci19Ci0KLXZvaWQgUGFnZU92ZXJs
YXk6OnN0YXJ0RmFkZUluQW5pbWF0aW9uKCkKLXsKLSAgICBtX2ZyYWN0aW9uRmFkZWRJbiA9IDA7
Ci0gICAgbV9mYWRlQW5pbWF0aW9uVHlwZSA9IEZhZGVJbkFuaW1hdGlvbjsKLQotICAgIHN0YXJ0
RmFkZUFuaW1hdGlvbigpOwotfQotCi12b2lkIFBhZ2VPdmVybGF5OjpzdGFydEZhZGVPdXRBbmlt
YXRpb24oKQotewotICAgIG1fZnJhY3Rpb25GYWRlZEluID0gMTsKLSAgICBtX2ZhZGVBbmltYXRp
b25UeXBlID0gRmFkZU91dEFuaW1hdGlvbjsKLQotICAgIHN0YXJ0RmFkZUFuaW1hdGlvbigpOwot
fQotCi12b2lkIFBhZ2VPdmVybGF5OjpzdG9wRmFkZU91dEFuaW1hdGlvbigpCi17Ci0gICAgbV9m
cmFjdGlvbkZhZGVkSW4gPSAxLjA7Ci0gICAgbV9mYWRlQW5pbWF0aW9uVGltZXIuc3RvcCgpOwot
fQotCi12b2lkIFBhZ2VPdmVybGF5OjpzdGFydEZhZGVBbmltYXRpb24oKQotewotICAgIG1fZmFk
ZUFuaW1hdGlvblN0YXJ0VGltZSA9IGN1cnJlbnRUaW1lKCk7Ci0gICAgbV9mYWRlQW5pbWF0aW9u
VGltZXIuc3RhcnRSZXBlYXRpbmcoMSAvIGZhZGVBbmltYXRpb25GcmFtZVJhdGUpOwotfQotCi12
b2lkIFBhZ2VPdmVybGF5OjpmYWRlQW5pbWF0aW9uVGltZXJGaXJlZCgpCi17Ci0gICAgZmxvYXQg
YW5pbWF0aW9uUHJvZ3Jlc3MgPSAoY3VycmVudFRpbWUoKSAtIG1fZmFkZUFuaW1hdGlvblN0YXJ0
VGltZSkgLyBtX2ZhZGVBbmltYXRpb25EdXJhdGlvbjsKLQotICAgIGlmIChhbmltYXRpb25Qcm9n
cmVzcyA+PSAxLjApCi0gICAgICAgIGFuaW1hdGlvblByb2dyZXNzID0gMS4wOwotCi0gICAgZG91
YmxlIHNpbmUgPSBzaW4ocGlPdmVyVHdvRmxvYXQgKiBhbmltYXRpb25Qcm9ncmVzcyk7Ci0gICAg
ZmxvYXQgZmFkZUFuaW1hdGlvblZhbHVlID0gc2luZSAqIHNpbmU7Ci0KLSAgICBtX2ZyYWN0aW9u
RmFkZWRJbiA9IChtX2ZhZGVBbmltYXRpb25UeXBlID09IEZhZGVJbkFuaW1hdGlvbikgPyBmYWRl
QW5pbWF0aW9uVmFsdWUgOiAxIC0gZmFkZUFuaW1hdGlvblZhbHVlOwotICAgIG1fd2ViUGFnZS0+
cGFnZU92ZXJsYXlDb250cm9sbGVyKCkuc2V0UGFnZU92ZXJsYXlPcGFjaXR5KCp0aGlzLCBtX2Zy
YWN0aW9uRmFkZWRJbik7Ci0KLSAgICBpZiAoYW5pbWF0aW9uUHJvZ3Jlc3MgPT0gMS4wKSB7Ci0g
ICAgICAgIG1fZmFkZUFuaW1hdGlvblRpbWVyLnN0b3AoKTsKLQotICAgICAgICBib29sIHdhc0Zh
ZGluZ091dCA9IG1fZmFkZUFuaW1hdGlvblR5cGUgPT0gRmFkZU91dEFuaW1hdGlvbjsKLSAgICAg
ICAgbV9mYWRlQW5pbWF0aW9uVHlwZSA9IE5vQW5pbWF0aW9uOwotCi0gICAgICAgIC8vIElmIHRo
aXMgd2FzIGEgZmFkZSBvdXQsIGdvIGFoZWFkIGFuZCB1bmluc3RhbGwgdGhlIHBhZ2Ugb3Zlcmxh
eS4KLSAgICAgICAgaWYgKHdhc0ZhZGluZ091dCkKLSAgICAgICAgICAgIG1fd2ViUGFnZS0+dW5p
bnN0YWxsUGFnZU92ZXJsYXkodGhpcywgUGFnZU92ZXJsYXk6OkZhZGVNb2RlOjpEb05vdEZhZGUp
OwotICAgIH0KLX0KLQotdm9pZCBQYWdlT3ZlcmxheTo6Y2xlYXIoKQotewotICAgIG1fd2ViUGFn
ZS0+cGFnZU92ZXJsYXlDb250cm9sbGVyKCkuY2xlYXJQYWdlT3ZlcmxheSgqdGhpcyk7Ci19Ci0K
LVdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqIFBhZ2VPdmVybGF5OjpsYXllcigpCi17Ci0gICAgcmV0
dXJuIG1fd2ViUGFnZS0+cGFnZU92ZXJsYXlDb250cm9sbGVyKCkubGF5ZXJGb3JPdmVybGF5KCp0
aGlzKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvUGFnZU92ZXJsYXkuaCBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9QYWdlT3ZlcmxheS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAzMjI1ZjBkLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9QYWdlT3ZlcmxheS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTM3ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jaWZuZGVmIFBhZ2VPdmVybGF5X2gKLSNkZWZpbmUgUGFnZU92ZXJsYXlfaAotCi0j
aW5jbHVkZSAiQVBJT2JqZWN0LmgiCi0jaW5jbHVkZSAiV0tCYXNlLmgiCi0jaW5jbHVkZSA8V2Vi
Q29yZS9Db2xvci5oPgotI2luY2x1ZGUgPFdlYkNvcmUvSW50UmVjdC5oPgotI2luY2x1ZGUgPHd0
Zi9QYXNzUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotY2xhc3MgRnJhbWU7Ci1jbGFzcyBHcmFwaGljc0NvbnRleHQ7Ci1jbGFzcyBHcmFw
aGljc0xheWVyOwotfQotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgV2ViRnJhbWU7Ci1j
bGFzcyBXZWJNb3VzZUV2ZW50OwotY2xhc3MgV2ViUGFnZTsKLQotY2xhc3MgUGFnZU92ZXJsYXkg
OiBwdWJsaWMgQVBJOjpPYmplY3RJbXBsPEFQSTo6T2JqZWN0OjpUeXBlOjpCdW5kbGVQYWdlT3Zl
cmxheT4gewotcHVibGljOgotICAgIGNsYXNzIENsaWVudCB7Ci0gICAgcHJvdGVjdGVkOgotICAg
ICAgICB2aXJ0dWFsIH5DbGllbnQoKSB7IH0KLSAgICAKLSAgICBwdWJsaWM6Ci0gICAgICAgIHZp
cnR1YWwgdm9pZCBwYWdlT3ZlcmxheURlc3Ryb3llZChQYWdlT3ZlcmxheSopID0gMDsKLSAgICAg
ICAgdmlydHVhbCB2b2lkIHdpbGxNb3ZlVG9XZWJQYWdlKFBhZ2VPdmVybGF5KiwgV2ViUGFnZSop
ID0gMDsKLSAgICAgICAgdmlydHVhbCB2b2lkIGRpZE1vdmVUb1dlYlBhZ2UoUGFnZU92ZXJsYXkq
LCBXZWJQYWdlKikgPSAwOwotICAgICAgICB2aXJ0dWFsIHZvaWQgZHJhd1JlY3QoUGFnZU92ZXJs
YXkqLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBk
aXJ0eVJlY3QpID0gMDsKLSAgICAgICAgdmlydHVhbCBib29sIG1vdXNlRXZlbnQoUGFnZU92ZXJs
YXkqLCBjb25zdCBXZWJNb3VzZUV2ZW50JikgPSAwOwotICAgICAgICB2aXJ0dWFsIHZvaWQgZGlk
U2Nyb2xsRnJhbWUoUGFnZU92ZXJsYXkqLCBXZWJDb3JlOjpGcmFtZSopIHsgfQotCi0gICAgICAg
IHZpcnR1YWwgV0tUeXBlUmVmIGNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWUoUGFnZU92
ZXJsYXkqLCBXS1N0cmluZ1JlZiAvKiBhdHRyaWJ1dGUgKi8sIFdLVHlwZVJlZiAvKiBwYXJhbWV0
ZXIgKi8pIHsgcmV0dXJuIDA7IH0KLSAgICAgICAgdmlydHVhbCBXS0FycmF5UmVmIGNvcHlBY2Nl
c3NpYmlsaXR5QXR0cmlidXRlTmFtZXMoUGFnZU92ZXJsYXkqLCBib29sIC8qIHBhcmFtZXRlcml6
ZWROYW1lcyAqLykgeyByZXR1cm4gMDsgfQotICAgIH07Ci0KLSAgICBlbnVtIGNsYXNzIE92ZXJs
YXlUeXBlIHsKLSAgICAgICAgVmlldywgLy8gRml4ZWQgdG8gdGhlIHZpZXcgc2l6ZTsgZG9lcyBu
b3Qgc2NhbGUgb3Igc2Nyb2xsIHdpdGggdGhlIGRvY3VtZW50LCByZXBhaW50cyBvbiBzY3JvbGwu
Ci0gICAgICAgIERvY3VtZW50LCAvLyBTY2FsZXMgYW5kIHNjcm9sbHMgd2l0aCB0aGUgZG9jdW1l
bnQuCi0gICAgfTsKLQotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFBhZ2VPdmVybGF5PiBjcmVhdGUo
Q2xpZW50KiwgT3ZlcmxheVR5cGUgPSBPdmVybGF5VHlwZTo6Vmlldyk7Ci0gICAgdmlydHVhbCB+
UGFnZU92ZXJsYXkoKTsKLQotICAgIHZvaWQgc2V0UGFnZShXZWJQYWdlKik7Ci0gICAgdm9pZCBz
ZXROZWVkc0Rpc3BsYXkoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgZGlydHlSZWN0KTsKLSAgICB2
b2lkIHNldE5lZWRzRGlzcGxheSgpOwotCi0gICAgdm9pZCBkcmF3UmVjdChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQmLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBkaXJ0eVJlY3QpOwotICAgIGJv
b2wgbW91c2VFdmVudChjb25zdCBXZWJNb3VzZUV2ZW50Jik7Ci0gICAgdm9pZCBkaWRTY3JvbGxG
cmFtZShXZWJDb3JlOjpGcmFtZSopOwotCi0gICAgV0tUeXBlUmVmIGNvcHlBY2Nlc3NpYmlsaXR5
QXR0cmlidXRlVmFsdWUoV0tTdHJpbmdSZWYgYXR0cmlidXRlLCBXS1R5cGVSZWYgcGFyYW1ldGVy
KTsKLSAgICBXS0FycmF5UmVmIGNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlTmFtZXMoYm9vbCBw
YXJhbWV0ZXJpemVkTmFtZXMpOwotICAgIAotICAgIHZvaWQgc3RhcnRGYWRlSW5BbmltYXRpb24o
KTsKLSAgICB2b2lkIHN0YXJ0RmFkZU91dEFuaW1hdGlvbigpOwotICAgIHZvaWQgc3RvcEZhZGVP
dXRBbmltYXRpb24oKTsKLQotICAgIHZvaWQgY2xlYXIoKTsKLQotICAgIENsaWVudCogY2xpZW50
KCkgY29uc3QgeyByZXR1cm4gbV9jbGllbnQ7IH0KLQotICAgIGVudW0gY2xhc3MgRmFkZU1vZGUg
eyBEb05vdEZhZGUsIEZhZGUgfTsKLQotICAgIE92ZXJsYXlUeXBlIG92ZXJsYXlUeXBlKCkgeyBy
ZXR1cm4gbV9vdmVybGF5VHlwZTsgfQotCi0gICAgV2ViQ29yZTo6SW50UmVjdCBib3VuZHMoKSBj
b25zdDsKLSAgICBXZWJDb3JlOjpJbnRSZWN0IGZyYW1lKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRG
cmFtZShXZWJDb3JlOjpJbnRSZWN0KTsKLQotICAgIFdlYkNvcmU6OlJHQkEzMiBiYWNrZ3JvdW5k
Q29sb3IoKSBjb25zdCB7IHJldHVybiBtX2JhY2tncm91bmRDb2xvcjsgfQotICAgIHZvaWQgc2V0
QmFja2dyb3VuZENvbG9yKFdlYkNvcmU6OlJHQkEzMik7Ci0KLSAgICBXZWJDb3JlOjpHcmFwaGlj
c0xheWVyKiBsYXllcigpOwotICAgIAotcHJvdGVjdGVkOgotICAgIGV4cGxpY2l0IFBhZ2VPdmVy
bGF5KENsaWVudCosIE92ZXJsYXlUeXBlKTsKLQotcHJpdmF0ZToKLSAgICB2b2lkIHN0YXJ0RmFk
ZUFuaW1hdGlvbigpOwotICAgIHZvaWQgZmFkZUFuaW1hdGlvblRpbWVyRmlyZWQoKTsKLQotICAg
IENsaWVudCogbV9jbGllbnQ7Ci0gICAgV2ViUGFnZSogbV93ZWJQYWdlOwotCi0gICAgUnVuTG9v
cDo6VGltZXI8UGFnZU92ZXJsYXk+IG1fZmFkZUFuaW1hdGlvblRpbWVyOwotICAgIGRvdWJsZSBt
X2ZhZGVBbmltYXRpb25TdGFydFRpbWU7Ci0gICAgZG91YmxlIG1fZmFkZUFuaW1hdGlvbkR1cmF0
aW9uOwotCi0gICAgZW51bSBGYWRlQW5pbWF0aW9uVHlwZSB7Ci0gICAgICAgIE5vQW5pbWF0aW9u
LAotICAgICAgICBGYWRlSW5BbmltYXRpb24sCi0gICAgICAgIEZhZGVPdXRBbmltYXRpb24sCi0g
ICAgfTsKLQotICAgIEZhZGVBbmltYXRpb25UeXBlIG1fZmFkZUFuaW1hdGlvblR5cGU7Ci0gICAg
ZmxvYXQgbV9mcmFjdGlvbkZhZGVkSW47Ci0KLSAgICBPdmVybGF5VHlwZSBtX292ZXJsYXlUeXBl
OwotICAgIFdlYkNvcmU6OkludFJlY3QgbV9vdmVycmlkZUZyYW1lOwotCi0gICAgV2ViQ29yZTo6
UkdCQTMyIG1fYmFja2dyb3VuZENvbG9yOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0K
LSNlbmRpZiAvLyBQYWdlT3ZlcmxheV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvUGFnZU92ZXJsYXlDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9QYWdlT3ZlcmxheUNvbnRyb2xsZXIuY3BwCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCA4NjQ1N2M1Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9QYWdlT3ZlcmxheUNvbnRyb2xsZXIuY3BwCisrKyAvZGV2L251
bGwKQEAgLTEsMzE0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0j
aW5jbHVkZSAiUGFnZU92ZXJsYXlDb250cm9sbGVyLmgiCi0KLSNpbmNsdWRlICJEcmF3aW5nQXJl
YS5oIgotI2luY2x1ZGUgIlBhZ2VPdmVybGF5LmgiCi0jaW5jbHVkZSAiV2ViUGFnZS5oIgotI2lu
Y2x1ZGUgPFdlYkNvcmUvRnJhbWUuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lVmlldy5oPgot
I2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9H
cmFwaGljc0xheWVyLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9NYWluRnJhbWUuaD4KLSNpbmNsdWRl
IDxXZWJDb3JlL1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9TZXR0
aW5ncy5oPgotI2luY2x1ZGUgPFdlYkNvcmUvVGlsZWRCYWNraW5nLmg+Ci0KLXVzaW5nIG5hbWVz
cGFjZSBXZWJDb3JlOwotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotUGFnZU92ZXJsYXlDb250cm9s
bGVyOjpQYWdlT3ZlcmxheUNvbnRyb2xsZXIoV2ViUGFnZSYgd2ViUGFnZSkKLSAgICA6IG1fd2Vi
UGFnZSh3ZWJQYWdlKQotewotfQotCi12b2lkIFBhZ2VPdmVybGF5Q29udHJvbGxlcjo6aW5pdGlh
bGl6ZSgpCi17Ci0gICAgQVNTRVJUKCFtX2RvY3VtZW50T3ZlcmxheVJvb3RMYXllcik7Ci0gICAg
QVNTRVJUKCFtX3ZpZXdPdmVybGF5Um9vdExheWVyKTsKLQotICAgIG1fZG9jdW1lbnRPdmVybGF5
Um9vdExheWVyID0gR3JhcGhpY3NMYXllcjo6Y3JlYXRlKG1fd2ViUGFnZS5kcmF3aW5nQXJlYSgp
LT5ncmFwaGljc0xheWVyRmFjdG9yeSgpLCAqdGhpcyk7Ci0gICAgbV92aWV3T3ZlcmxheVJvb3RM
YXllciA9IEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZShtX3dlYlBhZ2UuZHJhd2luZ0FyZWEoKS0+Z3Jh
cGhpY3NMYXllckZhY3RvcnkoKSwgKnRoaXMpOwotI2lmbmRlZiBOREVCVUcKLSAgICBtX2RvY3Vt
ZW50T3ZlcmxheVJvb3RMYXllci0+c2V0TmFtZSgiUGFnZSBPdmVybGF5IGNvbnRhaW5lciAoZG9j
dW1lbnQtcmVsYXRpdmUpIik7Ci0gICAgbV92aWV3T3ZlcmxheVJvb3RMYXllci0+c2V0TmFtZSgi
UGFnZSBPdmVybGF5IGNvbnRhaW5lciAodmlldy1yZWxhdGl2ZSkiKTsKLSNlbmRpZgotfQotCi1z
dGF0aWMgdm9pZCB1cGRhdGVPdmVybGF5R2VvbWV0cnkoUGFnZU92ZXJsYXkmIG92ZXJsYXksIEdy
YXBoaWNzTGF5ZXImIGdyYXBoaWNzTGF5ZXIpCi17Ci0gICAgSW50UmVjdCBvdmVybGF5RnJhbWUg
PSBvdmVybGF5LmZyYW1lKCk7Ci0KLSAgICBpZiAob3ZlcmxheUZyYW1lLmxvY2F0aW9uKCkgPT0g
Z3JhcGhpY3NMYXllci5wb3NpdGlvbigpICYmIG92ZXJsYXlGcmFtZS5zaXplKCkgPT0gZ3JhcGhp
Y3NMYXllci5zaXplKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGdyYXBoaWNzTGF5ZXIuc2V0
UG9zaXRpb24ob3ZlcmxheUZyYW1lLmxvY2F0aW9uKCkpOwotICAgIGdyYXBoaWNzTGF5ZXIuc2V0
U2l6ZShvdmVybGF5RnJhbWUuc2l6ZSgpKTsKLX0KLQotdm9pZCBQYWdlT3ZlcmxheUNvbnRyb2xs
ZXI6Omluc3RhbGxQYWdlT3ZlcmxheShQYXNzUmVmUHRyPFBhZ2VPdmVybGF5PiBwYWdlT3Zlcmxh
eSwgUGFnZU92ZXJsYXk6OkZhZGVNb2RlIGZhZGVNb2RlKQotewotICAgIEFTU0VSVChtX2RvY3Vt
ZW50T3ZlcmxheVJvb3RMYXllcik7Ci0gICAgQVNTRVJUKG1fdmlld092ZXJsYXlSb290TGF5ZXIp
OwotCi0gICAgUmVmUHRyPFBhZ2VPdmVybGF5PiBvdmVybGF5ID0gcGFnZU92ZXJsYXk7Ci0KLSAg
ICBpZiAobV9wYWdlT3ZlcmxheXMuY29udGFpbnMob3ZlcmxheSkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIG1fcGFnZU92ZXJsYXlzLmFwcGVuZChvdmVybGF5KTsKLSAgICBvdmVybGF5LT5zZXRQ
YWdlKCZtX3dlYlBhZ2UpOwotCi0gICAgaWYgKGZhZGVNb2RlID09IFBhZ2VPdmVybGF5OjpGYWRl
TW9kZTo6RmFkZSkKLSAgICAgICAgb3ZlcmxheS0+c3RhcnRGYWRlSW5BbmltYXRpb24oKTsKLQot
ICAgIHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0xheWVyPiBsYXllciA9IEdyYXBoaWNzTGF5ZXI6
OmNyZWF0ZShtX3dlYlBhZ2UuZHJhd2luZ0FyZWEoKS0+Z3JhcGhpY3NMYXllckZhY3RvcnkoKSwg
KnRoaXMpOwotICAgIGxheWVyLT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50M0QoKSk7Ci0gICAg
bGF5ZXItPnNldEJhY2tncm91bmRDb2xvcihvdmVybGF5LT5iYWNrZ3JvdW5kQ29sb3IoKSk7Ci0g
ICAgdXBkYXRlT3ZlcmxheUdlb21ldHJ5KCpvdmVybGF5LCAqbGF5ZXIpOwotI2lmbmRlZiBOREVC
VUcKLSAgICBsYXllci0+c2V0TmFtZSgiUGFnZSBPdmVybGF5IGNvbnRlbnQiKTsKLSNlbmRpZgot
Ci0gICAgdXBkYXRlU2V0dGluZ3NGb3JMYXllcigqbGF5ZXIpOwotCi0gICAgc3dpdGNoIChvdmVy
bGF5LT5vdmVybGF5VHlwZSgpKSB7Ci0gICAgY2FzZSBQYWdlT3ZlcmxheTo6T3ZlcmxheVR5cGU6
OlZpZXc6Ci0gICAgICAgIG1fdmlld092ZXJsYXlSb290TGF5ZXItPmFkZENoaWxkKGxheWVyLmdl
dCgpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQYWdlT3ZlcmxheTo6T3ZlcmxheVR5cGU6
OkRvY3VtZW50OgotICAgICAgICBtX2RvY3VtZW50T3ZlcmxheVJvb3RMYXllci0+YWRkQ2hpbGQo
bGF5ZXIuZ2V0KCkpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBtX292ZXJsYXlHcmFw
aGljc0xheWVycy5zZXQob3ZlcmxheS5nZXQoKSwgV1RGOjptb3ZlKGxheWVyKSk7Ci0KLSAgICB1
cGRhdGVGb3JjZVN5bmNocm9ub3VzU2Nyb2xsTGF5ZXJQb3NpdGlvblVwZGF0ZXMoKTsKLX0KLQot
dm9pZCBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6OnVuaW5zdGFsbFBhZ2VPdmVybGF5KFBhZ2VPdmVy
bGF5KiBvdmVybGF5LCBQYWdlT3ZlcmxheTo6RmFkZU1vZGUgZmFkZU1vZGUpCi17Ci0gICAgaWYg
KGZhZGVNb2RlID09IFBhZ2VPdmVybGF5OjpGYWRlTW9kZTo6RmFkZSkgewotICAgICAgICBvdmVy
bGF5LT5zdGFydEZhZGVPdXRBbmltYXRpb24oKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIG92ZXJsYXktPnNldFBhZ2UobnVsbHB0cik7Ci0KLSAgICBtX292ZXJsYXlHcmFwaGljc0xh
eWVycy50YWtlKG92ZXJsYXkpLT5yZW1vdmVGcm9tUGFyZW50KCk7Ci0KLSAgICBzaXplX3Qgb3Zl
cmxheUluZGV4ID0gbV9wYWdlT3ZlcmxheXMuZmluZChvdmVybGF5KTsKLSAgICBBU1NFUlQob3Zl
cmxheUluZGV4ICE9IG5vdEZvdW5kKTsKLSAgICBtX3BhZ2VPdmVybGF5cy5yZW1vdmUob3Zlcmxh
eUluZGV4KTsKLQotICAgIHVwZGF0ZUZvcmNlU3luY2hyb25vdXNTY3JvbGxMYXllclBvc2l0aW9u
VXBkYXRlcygpOwotfQotCi12b2lkIFBhZ2VPdmVybGF5Q29udHJvbGxlcjo6dXBkYXRlRm9yY2VT
eW5jaHJvbm91c1Njcm9sbExheWVyUG9zaXRpb25VcGRhdGVzKCkKLXsKLSNpZiBFTkFCTEUoQVNZ
TkNfU0NST0xMSU5HKQotICAgIGJvb2wgZm9yY2VTeW5jaHJvbm91c1Njcm9sbExheWVyUG9zaXRp
b25VcGRhdGVzID0gZmFsc2U7Ci0KLSAgICBmb3IgKGF1dG8mIG92ZXJsYXkgOiBtX3BhZ2VPdmVy
bGF5cykgewotICAgICAgICBpZiAob3ZlcmxheS0+b3ZlcmxheVR5cGUoKSA9PSBQYWdlT3Zlcmxh
eTo6T3ZlcmxheVR5cGU6OlZpZXcpCi0gICAgICAgICAgICBmb3JjZVN5bmNocm9ub3VzU2Nyb2xs
TGF5ZXJQb3NpdGlvblVwZGF0ZXMgPSB0cnVlOwotICAgIH0KLQotICAgIGlmIChQYWdlKiBwYWdl
ID0gbV93ZWJQYWdlLmNvcmVQYWdlKCkpIHsKLSAgICAgICAgaWYgKFNjcm9sbGluZ0Nvb3JkaW5h
dG9yKiBzY3JvbGxpbmdDb29yZGluYXRvciA9IHBhZ2UtPnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkp
Ci0gICAgICAgICAgICBzY3JvbGxpbmdDb29yZGluYXRvci0+c2V0Rm9yY2VTeW5jaHJvbm91c1Nj
cm9sbExheWVyUG9zaXRpb25VcGRhdGVzKGZvcmNlU3luY2hyb25vdXNTY3JvbGxMYXllclBvc2l0
aW9uVXBkYXRlcyk7Ci0gICAgfQotI2VuZGlmCi19Ci0KLXZvaWQgUGFnZU92ZXJsYXlDb250cm9s
bGVyOjpzZXRQYWdlT3ZlcmxheU5lZWRzRGlzcGxheShQYWdlT3ZlcmxheSYgb3ZlcmxheSwgY29u
c3QgV2ViQ29yZTo6SW50UmVjdCYgZGlydHlSZWN0KQotewotICAgIEFTU0VSVChtX3BhZ2VPdmVy
bGF5cy5jb250YWlucygmb3ZlcmxheSkpOwotICAgIEdyYXBoaWNzTGF5ZXImIGdyYXBoaWNzTGF5
ZXIgPSAqbV9vdmVybGF5R3JhcGhpY3NMYXllcnMuZ2V0KCZvdmVybGF5KTsKLQotICAgIGlmICgh
Z3JhcGhpY3NMYXllci5kcmF3c0NvbnRlbnQoKSkgewotICAgICAgICBncmFwaGljc0xheWVyLnNl
dERyYXdzQ29udGVudCh0cnVlKTsKLSAgICAgICAgdXBkYXRlT3ZlcmxheUdlb21ldHJ5KG92ZXJs
YXksIGdyYXBoaWNzTGF5ZXIpOwotICAgIH0KLQotICAgIGdyYXBoaWNzTGF5ZXIuc2V0TmVlZHNE
aXNwbGF5SW5SZWN0KGRpcnR5UmVjdCk7Ci19Ci0KLXZvaWQgUGFnZU92ZXJsYXlDb250cm9sbGVy
OjpzZXRQYWdlT3ZlcmxheU9wYWNpdHkoUGFnZU92ZXJsYXkmIG92ZXJsYXksIGZsb2F0IG9wYWNp
dHkpCi17Ci0gICAgQVNTRVJUKG1fcGFnZU92ZXJsYXlzLmNvbnRhaW5zKCZvdmVybGF5KSk7Ci0g
ICAgbV9vdmVybGF5R3JhcGhpY3NMYXllcnMuZ2V0KCZvdmVybGF5KS0+c2V0T3BhY2l0eShvcGFj
aXR5KTsKLX0KLQotdm9pZCBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6OmNsZWFyUGFnZU92ZXJsYXko
UGFnZU92ZXJsYXkmIG92ZXJsYXkpCi17Ci0gICAgQVNTRVJUKG1fcGFnZU92ZXJsYXlzLmNvbnRh
aW5zKCZvdmVybGF5KSk7Ci0gICAgbV9vdmVybGF5R3JhcGhpY3NMYXllcnMuZ2V0KCZvdmVybGF5
KS0+c2V0RHJhd3NDb250ZW50KGZhbHNlKTsKLX0KLQotR3JhcGhpY3NMYXllciogUGFnZU92ZXJs
YXlDb250cm9sbGVyOjpsYXllckZvck92ZXJsYXkoUGFnZU92ZXJsYXkmIG92ZXJsYXkpIGNvbnN0
Ci17Ci0gICAgQVNTRVJUKG1fcGFnZU92ZXJsYXlzLmNvbnRhaW5zKCZvdmVybGF5KSk7Ci0gICAg
cmV0dXJuIG1fb3ZlcmxheUdyYXBoaWNzTGF5ZXJzLmdldCgmb3ZlcmxheSk7Ci19Ci0KLXZvaWQg
UGFnZU92ZXJsYXlDb250cm9sbGVyOjpkaWRDaGFuZ2VWaWV3U2l6ZSgpCi17Ci0gICAgZm9yIChh
dXRvJiBvdmVybGF5QW5kTGF5ZXIgOiBtX292ZXJsYXlHcmFwaGljc0xheWVycykgewotICAgICAg
ICBpZiAob3ZlcmxheUFuZExheWVyLmtleS0+b3ZlcmxheVR5cGUoKSA9PSBQYWdlT3ZlcmxheTo6
T3ZlcmxheVR5cGU6OlZpZXcpCi0gICAgICAgICAgICB1cGRhdGVPdmVybGF5R2VvbWV0cnkoKm92
ZXJsYXlBbmRMYXllci5rZXksICpvdmVybGF5QW5kTGF5ZXIudmFsdWUpOwotICAgIH0KLX0KLQot
dm9pZCBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6OmRpZENoYW5nZURvY3VtZW50U2l6ZSgpCi17Ci0g
ICAgZm9yIChhdXRvJiBvdmVybGF5QW5kTGF5ZXIgOiBtX292ZXJsYXlHcmFwaGljc0xheWVycykg
ewotICAgICAgICBpZiAob3ZlcmxheUFuZExheWVyLmtleS0+b3ZlcmxheVR5cGUoKSA9PSBQYWdl
T3ZlcmxheTo6T3ZlcmxheVR5cGU6OkRvY3VtZW50KQotICAgICAgICAgICAgdXBkYXRlT3Zlcmxh
eUdlb21ldHJ5KCpvdmVybGF5QW5kTGF5ZXIua2V5LCAqb3ZlcmxheUFuZExheWVyLnZhbHVlKTsK
LSAgICB9Ci19Ci0KLXZvaWQgUGFnZU92ZXJsYXlDb250cm9sbGVyOjpkaWRDaGFuZ2VQcmVmZXJl
bmNlcygpCi17Ci0gICAgZm9yIChhdXRvJiBncmFwaGljc0xheWVyIDogbV9vdmVybGF5R3JhcGhp
Y3NMYXllcnMudmFsdWVzKCkpCi0gICAgICAgIHVwZGF0ZVNldHRpbmdzRm9yTGF5ZXIoKmdyYXBo
aWNzTGF5ZXIpOwotfQotCi12b2lkIFBhZ2VPdmVybGF5Q29udHJvbGxlcjo6ZGlkQ2hhbmdlRGV2
aWNlU2NhbGVGYWN0b3IoKQotewotICAgIG1fZG9jdW1lbnRPdmVybGF5Um9vdExheWVyLT5ub3Rl
RGV2aWNlT3JQYWdlU2NhbGVGYWN0b3JDaGFuZ2VkSW5jbHVkaW5nRGVzY2VuZGFudHMoKTsKLSAg
ICBtX3ZpZXdPdmVybGF5Um9vdExheWVyLT5ub3RlRGV2aWNlT3JQYWdlU2NhbGVGYWN0b3JDaGFu
Z2VkSW5jbHVkaW5nRGVzY2VuZGFudHMoKTsKLQotICAgIGZvciAoYXV0byYgZ3JhcGhpY3NMYXll
ciA6IG1fb3ZlcmxheUdyYXBoaWNzTGF5ZXJzLnZhbHVlcygpKQotICAgICAgICBncmFwaGljc0xh
eWVyLT5zZXROZWVkc0Rpc3BsYXkoKTsKLX0KLQotdm9pZCBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6
OmRpZENoYW5nZUV4cG9zZWRSZWN0KCkKLXsKLSAgICBtX3dlYlBhZ2UuZHJhd2luZ0FyZWEoKS0+
c2NoZWR1bGVDb21wb3NpdGluZ0xheWVyRmx1c2goKTsKLX0KLQotdm9pZCBQYWdlT3ZlcmxheUNv
bnRyb2xsZXI6OmRpZFNjcm9sbEZyYW1lKEZyYW1lKiBmcmFtZSkKLXsKLSAgICBmb3IgKGF1dG8m
IG92ZXJsYXlBbmRMYXllciA6IG1fb3ZlcmxheUdyYXBoaWNzTGF5ZXJzKSB7Ci0gICAgICAgIGlm
IChvdmVybGF5QW5kTGF5ZXIua2V5LT5vdmVybGF5VHlwZSgpID09IFBhZ2VPdmVybGF5OjpPdmVy
bGF5VHlwZTo6VmlldyB8fCAhZnJhbWUtPmlzTWFpbkZyYW1lKCkpCi0gICAgICAgICAgICBvdmVy
bGF5QW5kTGF5ZXIudmFsdWUtPnNldE5lZWRzRGlzcGxheSgpOwotICAgICAgICBvdmVybGF5QW5k
TGF5ZXIua2V5LT5kaWRTY3JvbGxGcmFtZShmcmFtZSk7Ci0gICAgfQotfQotCi12b2lkIFBhZ2VP
dmVybGF5Q29udHJvbGxlcjo6Zmx1c2hQYWdlT3ZlcmxheUxheWVycyhGbG9hdFJlY3QgdmlzaWJs
ZVJlY3QpCi17Ci0gICAgbV92aWV3T3ZlcmxheVJvb3RMYXllci0+Zmx1c2hDb21wb3NpdGluZ1N0
YXRlKHZpc2libGVSZWN0KTsKLX0KLQotdm9pZCBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6OnVwZGF0
ZVNldHRpbmdzRm9yTGF5ZXIoR3JhcGhpY3NMYXllciYgbGF5ZXIpCi17Ci0gICAgU2V0dGluZ3Mm
IHNldHRpbmdzID0gbV93ZWJQYWdlLmNvcmVQYWdlKCktPnNldHRpbmdzKCk7Ci0gICAgbGF5ZXIu
c2V0QWNjZWxlcmF0ZXNEcmF3aW5nKHNldHRpbmdzLmFjY2VsZXJhdGVkRHJhd2luZ0VuYWJsZWQo
KSk7Ci0gICAgbGF5ZXIuc2V0U2hvd0RlYnVnQm9yZGVyKHNldHRpbmdzLnNob3dEZWJ1Z0JvcmRl
cnMoKSk7Ci0gICAgbGF5ZXIuc2V0U2hvd1JlcGFpbnRDb3VudGVyKHNldHRpbmdzLnNob3dSZXBh
aW50Q291bnRlcigpKTsKLX0KLQotYm9vbCBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6OmhhbmRsZU1v
dXNlRXZlbnQoY29uc3QgV2ViTW91c2VFdmVudCYgbW91c2VFdmVudCkKLXsKLSAgICBpZiAoIW1f
cGFnZU92ZXJsYXlzLnNpemUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgZm9yIChh
dXRvIGl0ID0gbV9wYWdlT3ZlcmxheXMucmJlZ2luKCksIGVuZCA9IG1fcGFnZU92ZXJsYXlzLnJl
bmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGlmICgoKml0KS0+bW91c2VFdmVudCht
b3VzZUV2ZW50KSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHJldHVy
biBmYWxzZTsKLX0KLQotV0tUeXBlUmVmIFBhZ2VPdmVybGF5Q29udHJvbGxlcjo6Y29weUFjY2Vz
c2liaWxpdHlBdHRyaWJ1dGVWYWx1ZShXS1N0cmluZ1JlZiBhdHRyaWJ1dGUsIFdLVHlwZVJlZiBw
YXJhbWV0ZXIpCi17Ci0gICAgaWYgKCFtX3BhZ2VPdmVybGF5cy5zaXplKCkpCi0gICAgICAgIHJl
dHVybiBudWxscHRyOwotCi0gICAgZm9yIChhdXRvIGl0ID0gbV9wYWdlT3ZlcmxheXMucmJlZ2lu
KCksIGVuZCA9IG1fcGFnZU92ZXJsYXlzLnJlbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAg
ICAgIGlmIChXS1R5cGVSZWYgdmFsdWUgPSAoKml0KS0+Y29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1
dGVWYWx1ZShhdHRyaWJ1dGUsIHBhcmFtZXRlcikpCi0gICAgICAgICAgICByZXR1cm4gdmFsdWU7
Ci0gICAgfQotCi0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLVdLQXJyYXlSZWYgUGFnZU92ZXJs
YXlDb250cm9sbGVyOjpjb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZXNOYW1lcyhib29sIHBhcmFt
ZXRlcml6ZWROYW1lcykKLXsKLSAgICBpZiAoIW1fcGFnZU92ZXJsYXlzLnNpemUoKSkKLSAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBmb3IgKGF1dG8gaXQgPSBtX3BhZ2VPdmVybGF5cy5y
YmVnaW4oKSwgZW5kID0gbV9wYWdlT3ZlcmxheXMucmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsK
LSAgICAgICAgaWYgKFdLQXJyYXlSZWYgdmFsdWUgPSAoKml0KS0+Y29weUFjY2Vzc2liaWxpdHlB
dHRyaWJ1dGVOYW1lcyhwYXJhbWV0ZXJpemVkTmFtZXMpKQotICAgICAgICAgICAgcmV0dXJuIHZh
bHVlOwotICAgIH0KLQotICAgIHJldHVybiBudWxscHRyOwotfQotCi12b2lkIFBhZ2VPdmVybGF5
Q29udHJvbGxlcjo6cGFpbnRDb250ZW50cyhjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiBn
cmFwaGljc0xheWVyLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwg
V2ViQ29yZTo6R3JhcGhpY3NMYXllclBhaW50aW5nUGhhc2UsIGNvbnN0IFdlYkNvcmU6OkZsb2F0
UmVjdCYgY2xpcFJlY3QpCi17Ci0gICAgZm9yIChhdXRvIGl0ID0gbV9vdmVybGF5R3JhcGhpY3NM
YXllcnMuYmVnaW4oKSwgZW5kID0gbV9vdmVybGF5R3JhcGhpY3NMYXllcnMuZW5kKCk7IGl0ICE9
IGVuZDsgKytpdCkgewotICAgICAgICBpZiAoaXQtPnZhbHVlLmdldCgpICE9IGdyYXBoaWNzTGF5
ZXIpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0
ZVNhdmVyIHN0YXRlU2F2ZXIoZ3JhcGhpY3NDb250ZXh0KTsKLSAgICAgICAgZ3JhcGhpY3NDb250
ZXh0LmNsaXAoY2xpcFJlY3QpOwotICAgICAgICBpdC0+a2V5LT5kcmF3UmVjdChncmFwaGljc0Nv
bnRleHQsIGVuY2xvc2luZ0ludFJlY3QoY2xpcFJlY3QpKTsKLQotICAgICAgICByZXR1cm47Ci0g
ICAgfQotfQotCi1mbG9hdCBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6OmRldmljZVNjYWxlRmFjdG9y
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV93ZWJQYWdlLmNvcmVQYWdlKCktPmRldmljZVNjYWxl
RmFjdG9yKCk7Ci19Ci0KLXZvaWQgUGFnZU92ZXJsYXlDb250cm9sbGVyOjpub3RpZnlGbHVzaFJl
cXVpcmVkKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKQotewotICAgIGlmIChtX3dlYlBh
Z2UuZHJhd2luZ0FyZWEoKSkKLSAgICAgICAgbV93ZWJQYWdlLmRyYXdpbmdBcmVhKCktPnNjaGVk
dWxlQ29tcG9zaXRpbmdMYXllckZsdXNoKCk7Ci19Ci0KLXZvaWQgUGFnZU92ZXJsYXlDb250cm9s
bGVyOjpkaWRDaGFuZ2VPdmVybGF5RnJhbWUoUGFnZU92ZXJsYXkmIG92ZXJsYXkpCi17Ci0gICAg
QVNTRVJUKG1fcGFnZU92ZXJsYXlzLmNvbnRhaW5zKCZvdmVybGF5KSk7Ci0gICAgdXBkYXRlT3Zl
cmxheUdlb21ldHJ5KG92ZXJsYXksICptX292ZXJsYXlHcmFwaGljc0xheWVycy5nZXQoJm92ZXJs
YXkpKTsKLX0KLQotdm9pZCBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6OmRpZENoYW5nZU92ZXJsYXlC
YWNrZ3JvdW5kQ29sb3IoUGFnZU92ZXJsYXkmIG92ZXJsYXkpCi17Ci0gICAgQVNTRVJUKG1fcGFn
ZU92ZXJsYXlzLmNvbnRhaW5zKCZvdmVybGF5KSk7Ci0gICAgbV9vdmVybGF5R3JhcGhpY3NMYXll
cnMuZ2V0KCZvdmVybGF5KS0+c2V0QmFja2dyb3VuZENvbG9yKG92ZXJsYXkuYmFja2dyb3VuZENv
bG9yKCkpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9QYWdlT3ZlcmxheUNvbnRyb2xsZXIuaCBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9QYWdlT3ZlcmxheUNvbnRyb2xsZXIuaApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjUxODJkNS4uMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvUGFnZU92ZXJsYXlDb250cm9sbGVyLmgKKysrIC9k
ZXYvbnVsbApAQCAtMSw5OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBQYWdlT3Zlcmxh
eUNvbnRyb2xsZXJfaAotI2RlZmluZSBQYWdlT3ZlcmxheUNvbnRyb2xsZXJfaAotCi0jaW5jbHVk
ZSAiUGFnZU92ZXJsYXkuaCIKLSNpbmNsdWRlICJXS0Jhc2UuaCIKLSNpbmNsdWRlIDxXZWJDb3Jl
L0dyYXBoaWNzTGF5ZXJDbGllbnQuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1
ZGUgPHd0Zi9SZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLWNsYXNzIEZyYW1lOwotfQotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3Mg
V2ViTW91c2VFdmVudDsKLWNsYXNzIFdlYlBhZ2U7Ci0KLWNsYXNzIFBhZ2VPdmVybGF5Q29udHJv
bGxlciA6IHB1YmxpYyBXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2xpZW50IHsKLXB1YmxpYzoKLSAg
ICBQYWdlT3ZlcmxheUNvbnRyb2xsZXIoV2ViUGFnZSYpOwotCi0gICAgdm9pZCBpbml0aWFsaXpl
KCk7Ci0KLSAgICBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiBkb2N1bWVudE92ZXJsYXlSb290TGF5
ZXIoKSBjb25zdCB7IHJldHVybiBtX2RvY3VtZW50T3ZlcmxheVJvb3RMYXllci5nZXQoKTsgfQot
ICAgIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqIHZpZXdPdmVybGF5Um9vdExheWVyKCkgY29uc3Qg
eyByZXR1cm4gbV92aWV3T3ZlcmxheVJvb3RMYXllci5nZXQoKTsgfQotCi0gICAgdm9pZCBpbnN0
YWxsUGFnZU92ZXJsYXkoUGFzc1JlZlB0cjxQYWdlT3ZlcmxheT4sIFBhZ2VPdmVybGF5OjpGYWRl
TW9kZSk7Ci0gICAgdm9pZCB1bmluc3RhbGxQYWdlT3ZlcmxheShQYWdlT3ZlcmxheSosIFBhZ2VP
dmVybGF5OjpGYWRlTW9kZSk7Ci0KLSAgICB2b2lkIHNldFBhZ2VPdmVybGF5TmVlZHNEaXNwbGF5
KFBhZ2VPdmVybGF5JiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOwotICAgIHZvaWQgc2V0UGFn
ZU92ZXJsYXlPcGFjaXR5KFBhZ2VPdmVybGF5JiwgZmxvYXQpOwotICAgIHZvaWQgY2xlYXJQYWdl
T3ZlcmxheShQYWdlT3ZlcmxheSYpOwotICAgIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqIGxheWVy
Rm9yT3ZlcmxheShQYWdlT3ZlcmxheSYpIGNvbnN0OwotCi0gICAgdm9pZCBkaWRDaGFuZ2VWaWV3
U2l6ZSgpOwotICAgIHZvaWQgZGlkQ2hhbmdlRG9jdW1lbnRTaXplKCk7Ci0gICAgdm9pZCBkaWRD
aGFuZ2VQcmVmZXJlbmNlcygpOwotICAgIHZvaWQgZGlkQ2hhbmdlRGV2aWNlU2NhbGVGYWN0b3Io
KTsKLSAgICB2b2lkIGRpZENoYW5nZUV4cG9zZWRSZWN0KCk7Ci0gICAgdm9pZCBkaWRTY3JvbGxG
cmFtZShXZWJDb3JlOjpGcmFtZSopOwotCi0gICAgdm9pZCBkaWRDaGFuZ2VPdmVybGF5RnJhbWUo
UGFnZU92ZXJsYXkmKTsKLSAgICB2b2lkIGRpZENoYW5nZU92ZXJsYXlCYWNrZ3JvdW5kQ29sb3Io
UGFnZU92ZXJsYXkmKTsKLQotICAgIHZvaWQgZmx1c2hQYWdlT3ZlcmxheUxheWVycyhXZWJDb3Jl
OjpGbG9hdFJlY3QpOwotCi0gICAgYm9vbCBoYW5kbGVNb3VzZUV2ZW50KGNvbnN0IFdlYk1vdXNl
RXZlbnQmKTsKLQotICAgIC8vIEZJWE1FOiBXZSBzaG91bGRuJ3QgdXNlIEFQSSB0eXBlcyBoZXJl
LgotICAgIFdLVHlwZVJlZiBjb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlKFdLU3RyaW5n
UmVmIGF0dHJpYnV0ZSwgV0tUeXBlUmVmIHBhcmFtZXRlcik7Ci0gICAgV0tBcnJheVJlZiBjb3B5
QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZXNOYW1lcyhib29sIHBhcmFtZXRlcml6ZWROYW1lcyk7Ci0K
LXByaXZhdGU6Ci0gICAgdm9pZCB1cGRhdGVTZXR0aW5nc0ZvckxheWVyKFdlYkNvcmU6OkdyYXBo
aWNzTGF5ZXImKTsKLSAgICB2b2lkIHVwZGF0ZUZvcmNlU3luY2hyb25vdXNTY3JvbGxMYXllclBv
c2l0aW9uVXBkYXRlcygpOwotCi0gICAgLy8gV2ViQ29yZTo6R3JhcGhpY3NMYXllckNsaWVudAot
ICAgIHZpcnR1YWwgdm9pZCBub3RpZnlGbHVzaFJlcXVpcmVkKGNvbnN0IFdlYkNvcmU6OkdyYXBo
aWNzTGF5ZXIqKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50cyhjb25z
dCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiwgV2Vi
Q29yZTo6R3JhcGhpY3NMYXllclBhaW50aW5nUGhhc2UsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVj
dCYgY2xpcFJlY3QpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgZmxvYXQgZGV2aWNlU2NhbGVGYWN0
b3IoKSBjb25zdCBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkU2tpcExheWVySW5E
dW1wKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKSBjb25zdCBvdmVycmlkZSB7IHJldHVy
biB0cnVlOyB9Ci0KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6R3JhcGhpY3NMYXllcj4g
bV9kb2N1bWVudE92ZXJsYXlSb290TGF5ZXI7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6
OkdyYXBoaWNzTGF5ZXI+IG1fdmlld092ZXJsYXlSb290TGF5ZXI7Ci0gICAgSGFzaE1hcDxQYWdl
T3ZlcmxheSosIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpHcmFwaGljc0xheWVyPj4gbV9vdmVy
bGF5R3JhcGhpY3NMYXllcnM7Ci0gICAgVmVjdG9yPFJlZlB0cjxQYWdlT3ZlcmxheT4+IG1fcGFn
ZU92ZXJsYXlzOwotICAgIFdlYlBhZ2UmIG1fd2ViUGFnZTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNl
IFdlYktpdAotCi0jZW5kaWYgLy8gUGFnZU92ZXJsYXlDb250cm9sbGVyX2gKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9TZXJ2aWNlc092ZXJsYXlDb250cm9s
bGVyLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvU2VydmljZXNPdmVybGF5
Q29udHJvbGxlci5oCmluZGV4IDNiMDlkM2QuLjhlZDMxMmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9TZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyLmgKKysr
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1NlcnZpY2VzT3ZlcmxheUNvbnRy
b2xsZXIuaApAQCAtMjgsOSArMjgsOSBAQAogCiAjaWYgRU5BQkxFKFNFUlZJQ0VfQ09OVFJPTFMp
IHx8IEVOQUJMRShURUxFUEhPTkVfTlVNQkVSX0RFVEVDVElPTikKIAotI2luY2x1ZGUgIlBhZ2VP
dmVybGF5LmgiCiAjaW5jbHVkZSAiV2ViRnJhbWUuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0dyYXBo
aWNzTGF5ZXJDbGllbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1BhZ2VPdmVybGF5Lmg+CiAjaW5j
bHVkZSA8V2ViQ29yZS9SYW5nZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvVGltZXIuaD4KICNpbmNs
dWRlIDx3dGYvUmVmQ291bnRlZC5oPgpAQCAtMzksNyArMzksNiBAQCB0eXBlZGVmIHZvaWQqIERE
SGlnaGxpZ2h0UmVmOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBMYXlvdXRSZWN0Owot
CiBzdHJ1Y3QgR2FwUmVjdHM7CiB9CiAKQEAgLTQ3LDcgKzQ2LDcgQEAgbmFtZXNwYWNlIFdlYktp
dCB7CiAKIGNsYXNzIFdlYlBhZ2U7CiAKLWNsYXNzIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIg
OiBwcml2YXRlIFBhZ2VPdmVybGF5OjpDbGllbnQgeworY2xhc3MgU2VydmljZXNPdmVybGF5Q29u
dHJvbGxlciA6IHByaXZhdGUgV2ViQ29yZTo6UGFnZU92ZXJsYXk6OkNsaWVudCB7CiBwdWJsaWM6
CiAgICAgU2VydmljZXNPdmVybGF5Q29udHJvbGxlcihXZWJQYWdlJik7CiAgICAgflNlcnZpY2Vz
T3ZlcmxheUNvbnRyb2xsZXIoKTsKQEAgLTk4LDEyICs5NywxMiBAQCBwcml2YXRlOgogICAgIH07
CiAKICAgICAvLyBQYWdlT3ZlcmxheTo6Q2xpZW50Ci0gICAgdmlydHVhbCB2b2lkIHBhZ2VPdmVy
bGF5RGVzdHJveWVkKFBhZ2VPdmVybGF5Kikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHdp
bGxNb3ZlVG9XZWJQYWdlKFBhZ2VPdmVybGF5KiwgV2ViUGFnZSopIG92ZXJyaWRlOwotICAgIHZp
cnR1YWwgdm9pZCBkaWRNb3ZlVG9XZWJQYWdlKFBhZ2VPdmVybGF5KiwgV2ViUGFnZSopIG92ZXJy
aWRlOwotICAgIHZpcnR1YWwgdm9pZCBkcmF3UmVjdChQYWdlT3ZlcmxheSosIFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dCYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGRpcnR5UmVjdCkgb3ZlcnJp
ZGU7Ci0gICAgdmlydHVhbCBib29sIG1vdXNlRXZlbnQoUGFnZU92ZXJsYXkqLCBjb25zdCBXZWJN
b3VzZUV2ZW50Jikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGRpZFNjcm9sbEZyYW1lKFBh
Z2VPdmVybGF5KiwgV2ViQ29yZTo6RnJhbWUqKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQg
cGFnZU92ZXJsYXlEZXN0cm95ZWQoV2ViQ29yZTo6UGFnZU92ZXJsYXkqKSBvdmVycmlkZTsKKyAg
ICB2aXJ0dWFsIHZvaWQgd2lsbE1vdmVUb1BhZ2UoV2ViQ29yZTo6UGFnZU92ZXJsYXkqLCBXZWJD
b3JlOjpQYWdlKikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGRpZE1vdmVUb1BhZ2UoV2Vi
Q29yZTo6UGFnZU92ZXJsYXkqLCBXZWJDb3JlOjpQYWdlKikgb3ZlcnJpZGU7CisgICAgdmlydHVh
bCB2b2lkIGRyYXdSZWN0KFdlYkNvcmU6OlBhZ2VPdmVybGF5KiwgV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0JiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgZGlydHlSZWN0KSBvdmVycmlkZTsKKyAg
ICB2aXJ0dWFsIGJvb2wgbW91c2VFdmVudChXZWJDb3JlOjpQYWdlT3ZlcmxheSosIGNvbnN0IFdl
YkNvcmU6OlBsYXRmb3JtTW91c2VFdmVudCYpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBk
aWRTY3JvbGxGcmFtZShXZWJDb3JlOjpQYWdlT3ZlcmxheSosIFdlYkNvcmU6OkZyYW1lJikgb3Zl
cnJpZGU7CiAKICAgICB2b2lkIGNyZWF0ZU92ZXJsYXlJZk5lZWRlZCgpOwogICAgIHZvaWQgaGFu
ZGxlQ2xpY2soY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmLCBIaWdobGlnaHQmKTsKQEAgLTEzOSw3
ICsxMzgsNyBAQCBwcml2YXRlOgogICAgIFdlYlBhZ2UmIHdlYlBhZ2UoKSBjb25zdCB7IHJldHVy
biBtX3dlYlBhZ2U7IH0KIAogICAgIFdlYlBhZ2UmIG1fd2ViUGFnZTsKLSAgICBQYWdlT3Zlcmxh
eSogbV9zZXJ2aWNlc092ZXJsYXk7CisgICAgV2ViQ29yZTo6UGFnZU92ZXJsYXkqIG1fc2Vydmlj
ZXNPdmVybGF5OwogCiAgICAgUmVmUHRyPEhpZ2hsaWdodD4gbV9hY3RpdmVIaWdobGlnaHQ7CiAg
ICAgUmVmUHRyPEhpZ2hsaWdodD4gbV9uZXh0QWN0aXZlSGlnaGxpZ2h0OwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCmluZGV4IGNjYzYzYjUuLmZjZjAz
MzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdl
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAK
QEAgLTMyNiw3ICszMjYsNiBAQCBXZWJQYWdlOjpXZWJQYWdlKHVpbnQ2NF90IHBhZ2VJRCwgY29u
c3QgV2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVycyYgcGFyYW1ldGVycykKICNpZiBFTkFCTEUoV0VC
R0wpCiAgICAgLCBtX3N5c3RlbVdlYkdMUG9saWN5KFdlYkdMQWxsb3dDcmVhdGlvbikKICNlbmRp
ZgotICAgICwgbV9wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKnRoaXMpCiB7CiAgICAgQVNTRVJUKG1f
cGFnZUlEKTsKICAgICAvLyBGSVhNRTogVGhpcyBpcyBhIG5vbi1pZGVhbCBsb2NhdGlvbiBmb3Ig
dGhpcyBTZXR0aW5nIGFuZApAQCAtMzY1LDcgKzM2NCw2IEBAIFdlYlBhZ2U6OldlYlBhZ2UodWlu
dDY0X3QgcGFnZUlELCBjb25zdCBXZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzJiBwYXJhbWV0ZXJz
KQogCiAgICAgbV9kcmF3aW5nQXJlYSA9IERyYXdpbmdBcmVhOjpjcmVhdGUoKnRoaXMsIHBhcmFt
ZXRlcnMpOwogICAgIG1fZHJhd2luZ0FyZWEtPnNldFBhaW50aW5nRW5hYmxlZChmYWxzZSk7Ci0g
ICAgbV9wYWdlT3ZlcmxheUNvbnRyb2xsZXIuaW5pdGlhbGl6ZSgpOwogCiAjaWYgRU5BQkxFKEFT
WU5DX1NDUk9MTElORykKICAgICBtX3VzZUFzeW5jU2Nyb2xsaW5nID0gcGFyYW1ldGVycy5zdG9y
ZS5nZXRCb29sVmFsdWVGb3JLZXkoV2ViUHJlZmVyZW5jZXNLZXk6OnRocmVhZGVkU2Nyb2xsaW5n
RW5hYmxlZEtleSgpKTsKQEAgLTEyMTMsOCArMTIxMSw2IEBAIHZvaWQgV2ViUGFnZTo6c2V0U2l6
ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiB2aWV3U2l6ZSkKICAgICBpZiAodmlldy0+dXNlRml4
ZWRMYXlvdXQoKSkKICAgICAgICAgc2VuZFZpZXdwb3J0QXR0cmlidXRlc0NoYW5nZWQoKTsKICNl
bmRpZgotCi0gICAgbV9wYWdlT3ZlcmxheUNvbnRyb2xsZXIuZGlkQ2hhbmdlVmlld1NpemUoKTsK
IH0KIAogI2lmIFVTRShUSUxFRF9CQUNLSU5HX1NUT1JFKQpAQCAtMTQ0MCw4ICsxNDM2LDYgQEAg
dm9pZCBXZWJQYWdlOjpzZXREZXZpY2VTY2FsZUZhY3RvcihmbG9hdCBzY2FsZUZhY3RvcikKIAog
ICAgIGlmIChtX2RyYXdpbmdBcmVhLT5sYXllclRyZWVIb3N0KCkpCiAgICAgICAgIG1fZHJhd2lu
Z0FyZWEtPmxheWVyVHJlZUhvc3QoKS0+ZGV2aWNlT3JQYWdlU2NhbGVGYWN0b3JDaGFuZ2VkKCk7
Ci0KLSAgICBtX3BhZ2VPdmVybGF5Q29udHJvbGxlci5kaWRDaGFuZ2VEZXZpY2VTY2FsZUZhY3Rv
cigpOwogfQogCiBmbG9hdCBXZWJQYWdlOjpkZXZpY2VTY2FsZUZhY3RvcigpIGNvbnN0CkBAIC0x
NTY0LDE2ICsxNTU4LDYgQEAgdm9pZCBXZWJQYWdlOjpwb3N0SW5qZWN0ZWRCdW5kbGVNZXNzYWdl
KGNvbnN0IFN0cmluZyYgbWVzc2FnZU5hbWUsIElQQzo6TWVzc2FnZUQKICAgICBpbmplY3RlZEJ1
bmRsZS0+ZGlkUmVjZWl2ZU1lc3NhZ2VUb1BhZ2UodGhpcywgbWVzc2FnZU5hbWUsIG1lc3NhZ2VC
b2R5LmdldCgpKTsKIH0KIAotdm9pZCBXZWJQYWdlOjppbnN0YWxsUGFnZU92ZXJsYXkoUGFzc1Jl
ZlB0cjxQYWdlT3ZlcmxheT4gcGFnZU92ZXJsYXksIFBhZ2VPdmVybGF5OjpGYWRlTW9kZSBmYWRl
TW9kZSkKLXsKLSAgICBtX3BhZ2VPdmVybGF5Q29udHJvbGxlci5pbnN0YWxsUGFnZU92ZXJsYXko
cGFnZU92ZXJsYXksIGZhZGVNb2RlKTsKLX0KLQotdm9pZCBXZWJQYWdlOjp1bmluc3RhbGxQYWdl
T3ZlcmxheShQYWdlT3ZlcmxheSogcGFnZU92ZXJsYXksIFBhZ2VPdmVybGF5OjpGYWRlTW9kZSBm
YWRlTW9kZSkKLXsKLSAgICBtX3BhZ2VPdmVybGF5Q29udHJvbGxlci51bmluc3RhbGxQYWdlT3Zl
cmxheShwYWdlT3ZlcmxheSwgZmFkZU1vZGUpOwotfQotCiAjaWYgIVBMQVRGT1JNKElPUykKIHZv
aWQgV2ViUGFnZTo6c2V0SGVhZGVyUGFnZUJhbm5lcihQYXNzUmVmUHRyPFBhZ2VCYW5uZXI+IHBh
Z2VCYW5uZXIpCiB7CkBAIC0xOTAxLDcgKzE4ODUsNyBAQCB2b2lkIFdlYlBhZ2U6Om1vdXNlRXZl
bnQoY29uc3QgV2ViTW91c2VFdmVudCYgbW91c2VFdmVudCkKICAgICAgICAgcmV0dXJuOwogICAg
IH0KICNlbmRpZgotICAgIGJvb2wgaGFuZGxlZCA9IG1fcGFnZU92ZXJsYXlDb250cm9sbGVyLmhh
bmRsZU1vdXNlRXZlbnQobW91c2VFdmVudCk7CisgICAgYm9vbCBoYW5kbGVkID0gZmFsc2U7CiAK
ICNpZiAhUExBVEZPUk0oSU9TKQogICAgIGlmICghaGFuZGxlZCAmJiBtX2hlYWRlckJhbm5lcikK
QEAgLTE5MjcsNyArMTkxMSw3IEBAIHZvaWQgV2ViUGFnZTo6bW91c2VFdmVudChjb25zdCBXZWJN
b3VzZUV2ZW50JiBtb3VzZUV2ZW50KQogCiB2b2lkIFdlYlBhZ2U6Om1vdXNlRXZlbnRTeW5jRm9y
VGVzdGluZyhjb25zdCBXZWJNb3VzZUV2ZW50JiBtb3VzZUV2ZW50LCBib29sJiBoYW5kbGVkKQog
ewotICAgIGhhbmRsZWQgPSBtX3BhZ2VPdmVybGF5Q29udHJvbGxlci5oYW5kbGVNb3VzZUV2ZW50
KG1vdXNlRXZlbnQpOworICAgIGhhbmRsZWQgPSBmYWxzZTsKICNpZiAhUExBVEZPUk0oSU9TKQog
ICAgIGlmICghaGFuZGxlZCAmJiBtX2hlYWRlckJhbm5lcikKICAgICAgICAgaGFuZGxlZCA9IG1f
aGVhZGVyQmFubmVyLT5tb3VzZUV2ZW50KG1vdXNlRXZlbnQpOwpAQCAtMjg1Niw4ICsyODQwLDYg
QEAgdm9pZCBXZWJQYWdlOjp1cGRhdGVQcmVmZXJlbmNlcyhjb25zdCBXZWJQcmVmZXJlbmNlc1N0
b3JlJiBzdG9yZSkKIAogICAgIGlmIChtX2RyYXdpbmdBcmVhKQogICAgICAgICBtX2RyYXdpbmdB
cmVhLT51cGRhdGVQcmVmZXJlbmNlcyhzdG9yZSk7Ci0KLSAgICBtX3BhZ2VPdmVybGF5Q29udHJv
bGxlci5kaWRDaGFuZ2VQcmVmZXJlbmNlcygpOwogfQogCiAjaWYgUExBVEZPUk0oQ09DT0EpCkBA
IC00Nzk4LDggKzQ3ODAsNiBAQCBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyJiBXZWJQYWdlOjpz
ZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyKCkKIAogdm9pZCBXZWJQYWdlOjpkaWRDaGFuZ2VTY3Jv
bGxPZmZzZXRGb3JGcmFtZShGcmFtZSogZnJhbWUpCiB7Ci0gICAgbV9wYWdlT3ZlcmxheUNvbnRy
b2xsZXIuZGlkU2Nyb2xsRnJhbWUoZnJhbWUpOwotCiAgICAgaWYgKCFmcmFtZS0+aXNNYWluRnJh
bWUoKSkKICAgICAgICAgcmV0dXJuOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYlBhZ2UuaAppbmRleCBiN2Q0NDhjLi45YWI3OWI1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKQEAgLTQxLDcgKzQxLDYgQEAKICNpbmNsdWRl
ICJMYXllclRyZWVIb3N0LmgiCiAjaW5jbHVkZSAiTWVzc2FnZVJlY2VpdmVyLmgiCiAjaW5jbHVk
ZSAiTWVzc2FnZVNlbmRlci5oIgotI2luY2x1ZGUgIlBhZ2VPdmVybGF5Q29udHJvbGxlci5oIgog
I2luY2x1ZGUgIlBsdWdpbi5oIgogI2luY2x1ZGUgIlNhbmRib3hFeHRlbnNpb24uaCIKICNpbmNs
dWRlICJTaGFyZWFibGVCaXRtYXAuaCIKQEAgLTE0MCw3ICsxMzksNiBAQCBjbGFzcyBEcmF3aW5n
QXJlYTsKIGNsYXNzIEluamVjdGVkQnVuZGxlQmFja0ZvcndhcmRMaXN0OwogY2xhc3MgTm90aWZp
Y2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyOwogY2xhc3MgUGFnZUJhbm5lcjsKLWNsYXNz
IFBhZ2VPdmVybGF5OwogY2xhc3MgUGx1Z2luVmlldzsKIGNsYXNzIFNlcnZpY2VzT3ZlcmxheUNv
bnRyb2xsZXI7CiBjbGFzcyBWaXNpYmxlQ29udGVudFJlY3RVcGRhdGVJbmZvOwpAQCAtMjA2LDgg
KzIwNCw2IEBAIHB1YmxpYzoKICAgICAKICAgICBJbmplY3RlZEJ1bmRsZUJhY2tGb3J3YXJkTGlz
dCogYmFja0ZvcndhcmRMaXN0KCk7CiAgICAgRHJhd2luZ0FyZWEqIGRyYXdpbmdBcmVhKCkgY29u
c3QgeyByZXR1cm4gbV9kcmF3aW5nQXJlYS5nZXQoKTsgfQotICAgIGNvbnN0IFBhZ2VPdmVybGF5
Q29udHJvbGxlciYgcGFnZU92ZXJsYXlDb250cm9sbGVyKCkgY29uc3QgeyByZXR1cm4gbV9wYWdl
T3ZlcmxheUNvbnRyb2xsZXI7IH0KLSAgICBQYWdlT3ZlcmxheUNvbnRyb2xsZXImIHBhZ2VPdmVy
bGF5Q29udHJvbGxlcigpIHsgcmV0dXJuIG1fcGFnZU92ZXJsYXlDb250cm9sbGVyOyB9CiAjaWYg
RU5BQkxFKEFTWU5DX1NDUk9MTElORykKICAgICBXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRv
ciogc2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSBjb25zdDsKICNlbmRpZgpAQCAtNDE2LDggKzQxMiw2
IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgd2luZG93SXNGb2N1c2VkKCkgY29uc3Q7CiAgICAgYm9v
bCB3aW5kb3dBbmRXZWJQYWdlQXJlRm9jdXNlZCgpIGNvbnN0OwotICAgIHZvaWQgaW5zdGFsbFBh
Z2VPdmVybGF5KFBhc3NSZWZQdHI8UGFnZU92ZXJsYXk+LCBQYWdlT3ZlcmxheTo6RmFkZU1vZGUg
PSBQYWdlT3ZlcmxheTo6RmFkZU1vZGU6OkRvTm90RmFkZSk7Ci0gICAgdm9pZCB1bmluc3RhbGxQ
YWdlT3ZlcmxheShQYWdlT3ZlcmxheSosIFBhZ2VPdmVybGF5OjpGYWRlTW9kZSA9IFBhZ2VPdmVy
bGF5OjpGYWRlTW9kZTo6RG9Ob3RGYWRlKTsKIAogI2lmICFQTEFURk9STShJT1MpCiAgICAgdm9p
ZCBzZXRIZWFkZXJQYWdlQmFubmVyKFBhc3NSZWZQdHI8UGFnZUJhbm5lcj4pOwpAQCAtODIyLDkg
KzgxNiw2IEBAIHB1YmxpYzoKICAgICBXZWJDb3JlOjpTY3JvbGxQaW5uaW5nQmVoYXZpb3Igc2Ny
b2xsUGlubmluZ0JlaGF2aW9yKCkgeyByZXR1cm4gbV9zY3JvbGxQaW5uaW5nQmVoYXZpb3I7IH0K
ICAgICB2b2lkIHNldFNjcm9sbFBpbm5pbmdCZWhhdmlvcih1aW50MzJfdCAvKiBXZWJDb3JlOjpT
Y3JvbGxQaW5uaW5nQmVoYXZpb3IgKi8gcGlubmluZyk7CiAKLSAgICBXS1R5cGVSZWYgcGFnZU92
ZXJsYXlDb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlKFdLU3RyaW5nUmVmIGF0dHJpYnV0
ZSwgV0tUeXBlUmVmIHBhcmFtZXRlcik7Ci0gICAgV0tBcnJheVJlZiBwYWdlT3ZlcmxheUNvcHlB
Y2Nlc3NpYmlsaXR5QXR0cmlidXRlc05hbWVzKGJvb2wgcGFyYW1ldGVyaXplZE5hbWVzKTsKLQog
ICAgIFBhc3NSZWZQdHI8V2ViQ29yZTo6RG9jdW1lbnRMb2FkZXI+IGNyZWF0ZURvY3VtZW50TG9h
ZGVyKFdlYkNvcmU6OkZyYW1lJiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgY29u
c3QgV2ViQ29yZTo6U3Vic3RpdHV0ZURhdGEmKTsKIAogICAgIHZvaWQgZ2V0Qnl0ZWNvZGVQcm9m
aWxlKHVpbnQ2NF90IGNhbGxiYWNrSUQpOwpAQCAtMTI3Nyw4ICsxMjY4LDYgQEAgcHJpdmF0ZToK
ICNpZiBFTkFCTEUoU0VSVklDRV9DT05UUk9MUykgfHwgRU5BQkxFKFRFTEVQSE9ORV9OVU1CRVJf
REVURUNUSU9OKQogICAgIHN0ZDo6dW5pcXVlX3B0cjxTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVy
PiBtX3NlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI7CiAjZW5kaWYKLQotICAgIFBhZ2VPdmVybGF5
Q29udHJvbGxlciBtX3BhZ2VPdmVybGF5Q29udHJvbGxlcjsKIH07CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dl
YlBhZ2VPdmVybGF5LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQ
YWdlT3ZlcmxheS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjdlMDYx
YQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJQYWdlT3ZlcmxheS5jcHAKQEAgLTAsMCArMSwxMTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViUGFnZU92ZXJsYXkuaCIKKworI2luY2x1ZGUgIldl
YkZyYW1lLmgiCisjaW5jbHVkZSAiV2ViUGFnZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhp
Y3NMYXllci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUGFnZU92ZXJsYXkuaD4KKwordXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitQYXNzUmVmUHRyPFdlYlBh
Z2VPdmVybGF5PiBXZWJQYWdlT3ZlcmxheTo6Y3JlYXRlKFdlYlBhZ2VPdmVybGF5OjpDbGllbnQq
IGNsaWVudCwgUGFnZU92ZXJsYXk6Ok92ZXJsYXlUeXBlIG92ZXJsYXlUeXBlKQoreworICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgV2ViUGFnZU92ZXJsYXkoY2xpZW50LCBvdmVybGF5VHlwZSkpOwor
fQorCitXZWJQYWdlT3ZlcmxheTo6V2ViUGFnZU92ZXJsYXkoV2ViUGFnZU92ZXJsYXk6OkNsaWVu
dCogY2xpZW50LCBQYWdlT3ZlcmxheTo6T3ZlcmxheVR5cGUgb3ZlcmxheVR5cGUpCisgICAgOiBt
X292ZXJsYXkoUGFnZU92ZXJsYXk6OmNyZWF0ZSh0aGlzLCBvdmVybGF5VHlwZSkpCisgICAgLCBt
X2NsaWVudChjbGllbnQpCit7Cit9CisKK1dlYlBhZ2VPdmVybGF5Ojp+V2ViUGFnZU92ZXJsYXko
KQoreworfQorCit2b2lkIFdlYlBhZ2VPdmVybGF5OjpzZXROZWVkc0Rpc3BsYXkoY29uc3QgSW50
UmVjdCYgZGlydHlSZWN0KQoreworICAgIG1fb3ZlcmxheS0+c2V0TmVlZHNEaXNwbGF5KGRpcnR5
UmVjdCk7Cit9CisKK3ZvaWQgV2ViUGFnZU92ZXJsYXk6OnNldE5lZWRzRGlzcGxheSgpCit7Cisg
ICAgbV9vdmVybGF5LT5zZXROZWVkc0Rpc3BsYXkoKTsKK30KKwordm9pZCBXZWJQYWdlT3Zlcmxh
eTo6Y2xlYXIoKQoreworICAgIG1fb3ZlcmxheS0+Y2xlYXIoKTsKK30KKwordm9pZCBXZWJQYWdl
T3ZlcmxheTo6cGFnZU92ZXJsYXlEZXN0cm95ZWQoUGFnZU92ZXJsYXkqKQoreworICAgIG1fY2xp
ZW50LT5wYWdlT3ZlcmxheURlc3Ryb3llZCh0aGlzKTsKK30KKwordm9pZCBXZWJQYWdlT3Zlcmxh
eTo6d2lsbE1vdmVUb1BhZ2UoUGFnZU92ZXJsYXkqLCBQYWdlKiBwYWdlKQoreworICAgIG1fY2xp
ZW50LT53aWxsTW92ZVRvUGFnZSh0aGlzLCBwYWdlID8gV2ViUGFnZTo6ZnJvbUNvcmVQYWdlKHBh
Z2UpIDogbnVsbHB0cik7Cit9CisKK3ZvaWQgV2ViUGFnZU92ZXJsYXk6OmRpZE1vdmVUb1BhZ2Uo
UGFnZU92ZXJsYXkqLCBQYWdlKiBwYWdlKQoreworICAgIG1fY2xpZW50LT5kaWRNb3ZlVG9QYWdl
KHRoaXMsIHBhZ2UgPyBXZWJQYWdlOjpmcm9tQ29yZVBhZ2UocGFnZSkgOiBudWxscHRyKTsKK30K
Kwordm9pZCBXZWJQYWdlT3ZlcmxheTo6ZHJhd1JlY3QoUGFnZU92ZXJsYXkqLCBHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCkKK3sKKyAgICBtX2NsaWVu
dC0+ZHJhd1JlY3QodGhpcywgY29udGV4dCwgZGlydHlSZWN0KTsKK30KKworYm9vbCBXZWJQYWdl
T3ZlcmxheTo6bW91c2VFdmVudChQYWdlT3ZlcmxheSosIGNvbnN0IFBsYXRmb3JtTW91c2VFdmVu
dCYgZXZlbnQpCit7CisgICAgcmV0dXJuIG1fY2xpZW50LT5tb3VzZUV2ZW50KHRoaXMsIGV2ZW50
KTsKK30KKwordm9pZCBXZWJQYWdlT3ZlcmxheTo6ZGlkU2Nyb2xsRnJhbWUoUGFnZU92ZXJsYXkq
LCBGcmFtZSYgZnJhbWUpCit7CisgICAgbV9jbGllbnQtPmRpZFNjcm9sbEZyYW1lKHRoaXMsIFdl
YkZyYW1lOjpmcm9tQ29yZUZyYW1lKGZyYW1lKSk7Cit9CisKK2Jvb2wgV2ViUGFnZU92ZXJsYXk6
OmNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlU3RyaW5nVmFsdWVGb3JQb2ludChQYWdlT3Zlcmxh
eSosIFN0cmluZyBhdHRyaWJ1dGUsIEZsb2F0UG9pbnQgcGFyYW1ldGVyLCBTdHJpbmcmIHZhbHVl
KQoreworICAgIHJldHVybiBtX2NsaWVudC0+Y29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVTdHJp
bmdWYWx1ZUZvclBvaW50KHRoaXMsIGF0dHJpYnV0ZSwgcGFyYW1ldGVyLCB2YWx1ZSk7Cit9CisK
K2Jvb2wgV2ViUGFnZU92ZXJsYXk6OmNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlQm9vbFZhbHVl
Rm9yUG9pbnQoUGFnZU92ZXJsYXkqLCBTdHJpbmcgYXR0cmlidXRlLCBGbG9hdFBvaW50IHBhcmFt
ZXRlciwgYm9vbCYgdmFsdWUpCit7CisgICAgcmV0dXJuIG1fY2xpZW50LT5jb3B5QWNjZXNzaWJp
bGl0eUF0dHJpYnV0ZUJvb2xWYWx1ZUZvclBvaW50KHRoaXMsIGF0dHJpYnV0ZSwgcGFyYW1ldGVy
LCB2YWx1ZSk7Cit9CisKK1ZlY3RvcjxTdHJpbmc+IFdlYlBhZ2VPdmVybGF5Ojpjb3B5QWNjZXNz
aWJpbGl0eUF0dHJpYnV0ZU5hbWVzKFBhZ2VPdmVybGF5KiwgYm9vbCBwYXJhbWV0ZXJpemVkTmFt
ZXMpCit7CisgICAgcmV0dXJuIG1fY2xpZW50LT5jb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZU5h
bWVzKHRoaXMsIHBhcmFtZXRlcml6ZWROYW1lcyk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktp
dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VP
dmVybGF5LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZU92ZXJs
YXkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZTQyMTNiCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VPdmVy
bGF5LmgKQEAgLTAsMCArMSw5MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViUGFnZU92ZXJs
YXlfaAorI2RlZmluZSBXZWJQYWdlT3ZlcmxheV9oCisKKyNpbmNsdWRlICJBUElPYmplY3QuaCIK
KyNpbmNsdWRlIDxXZWJDb3JlL0Zsb2F0UG9pbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ludFJl
Y3QuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1BhZ2VPdmVybGF5Lmg+CisjaW5jbHVkZSA8d3RmL1Bh
c3NSZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYkZyYW1lOworY2xh
c3MgV2ViUGFnZTsKKworY2xhc3MgV2ViUGFnZU92ZXJsYXkgOiBwdWJsaWMgQVBJOjpPYmplY3RJ
bXBsPEFQSTo6T2JqZWN0OjpUeXBlOjpCdW5kbGVQYWdlT3ZlcmxheT4sIHByaXZhdGUgV2ViQ29y
ZTo6UGFnZU92ZXJsYXk6OkNsaWVudCB7CitwdWJsaWM6CisgICAgY2xhc3MgQ2xpZW50IHsKKyAg
ICBwcm90ZWN0ZWQ6CisgICAgICAgIHZpcnR1YWwgfkNsaWVudCgpIHsgfQorCisgICAgcHVibGlj
OgorICAgICAgICB2aXJ0dWFsIHZvaWQgcGFnZU92ZXJsYXlEZXN0cm95ZWQoV2ViUGFnZU92ZXJs
YXkqKSA9IDA7CisgICAgICAgIHZpcnR1YWwgdm9pZCB3aWxsTW92ZVRvUGFnZShXZWJQYWdlT3Zl
cmxheSosIFdlYlBhZ2UqKSA9IDA7CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRNb3ZlVG9QYWdl
KFdlYlBhZ2VPdmVybGF5KiwgV2ViUGFnZSopID0gMDsKKyAgICAgICAgdmlydHVhbCB2b2lkIGRy
YXdSZWN0KFdlYlBhZ2VPdmVybGF5KiwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiwgY29uc3Qg
V2ViQ29yZTo6SW50UmVjdCYgZGlydHlSZWN0KSA9IDA7CisgICAgICAgIHZpcnR1YWwgYm9vbCBt
b3VzZUV2ZW50KFdlYlBhZ2VPdmVybGF5KiwgY29uc3QgV2ViQ29yZTo6UGxhdGZvcm1Nb3VzZUV2
ZW50JikgPSAwOworICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkU2Nyb2xsRnJhbWUoV2ViUGFnZU92
ZXJsYXkqLCBXZWJGcmFtZSopIHsgfQorCisgICAgICAgIHZpcnR1YWwgYm9vbCBjb3B5QWNjZXNz
aWJpbGl0eUF0dHJpYnV0ZVN0cmluZ1ZhbHVlRm9yUG9pbnQoV2ViUGFnZU92ZXJsYXkqLCBTdHJp
bmcgLyogYXR0cmlidXRlICovLCBXZWJDb3JlOjpGbG9hdFBvaW50IC8qIHBhcmFtZXRlciAqLywg
U3RyaW5nJiB2YWx1ZSkgeyByZXR1cm4gZmFsc2U7IH0KKyAgICAgICAgdmlydHVhbCBib29sIGNv
cHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlQm9vbFZhbHVlRm9yUG9pbnQoV2ViUGFnZU92ZXJsYXkq
LCBTdHJpbmcgLyogYXR0cmlidXRlICovLCBXZWJDb3JlOjpGbG9hdFBvaW50IC8qIHBhcmFtZXRl
ciAqLywgYm9vbCYgdmFsdWUpIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgICAgIHZpcnR1YWwgVmVj
dG9yPFN0cmluZz4gY29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVOYW1lcyhXZWJQYWdlT3Zlcmxh
eSosIGJvb2wgLyogcGFyYW1ldGVyaXplZE5hbWVzICovKSB7IHJldHVybiBWZWN0b3I8U3RyaW5n
PigpOyB9CisgICAgfTsKKworICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYlBhZ2VPdmVybGF5PiBj
cmVhdGUoQ2xpZW50KiwgV2ViQ29yZTo6UGFnZU92ZXJsYXk6Ok92ZXJsYXlUeXBlID0gV2ViQ29y
ZTo6UGFnZU92ZXJsYXk6Ok92ZXJsYXlUeXBlOjpWaWV3KTsKKyAgICB2aXJ0dWFsIH5XZWJQYWdl
T3ZlcmxheSgpOworCisgICAgdm9pZCBzZXROZWVkc0Rpc3BsYXkoY29uc3QgV2ViQ29yZTo6SW50
UmVjdCYgZGlydHlSZWN0KTsKKyAgICB2b2lkIHNldE5lZWRzRGlzcGxheSgpOworCisgICAgdm9p
ZCBjbGVhcigpOworCisgICAgV2ViQ29yZTo6UGFnZU92ZXJsYXkqIGNvcmVPdmVybGF5KCkgY29u
c3QgeyByZXR1cm4gbV9vdmVybGF5LmdldCgpOyB9CisgICAgQ2xpZW50KiBjbGllbnQoKSBjb25z
dCB7IHJldHVybiBtX2NsaWVudDsgfQorCitwcml2YXRlOgorICAgIFdlYlBhZ2VPdmVybGF5KENs
aWVudCosIFdlYkNvcmU6OlBhZ2VPdmVybGF5OjpPdmVybGF5VHlwZSk7CisKKyAgICAvLyBXZWJD
b3JlOjpQYWdlT3ZlcmxheTo6Q2xpZW50CisgICAgdmlydHVhbCB2b2lkIHBhZ2VPdmVybGF5RGVz
dHJveWVkKFdlYkNvcmU6OlBhZ2VPdmVybGF5Kikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lk
IHdpbGxNb3ZlVG9QYWdlKFdlYkNvcmU6OlBhZ2VPdmVybGF5KiwgV2ViQ29yZTo6UGFnZSopIG92
ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBkaWRNb3ZlVG9QYWdlKFdlYkNvcmU6OlBhZ2VPdmVy
bGF5KiwgV2ViQ29yZTo6UGFnZSopIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBkcmF3UmVj
dChXZWJDb3JlOjpQYWdlT3ZlcmxheSosIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYsIGNvbnN0
IFdlYkNvcmU6OkludFJlY3QmIGRpcnR5UmVjdCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29s
IG1vdXNlRXZlbnQoV2ViQ29yZTo6UGFnZU92ZXJsYXkqLCBjb25zdCBXZWJDb3JlOjpQbGF0Zm9y
bU1vdXNlRXZlbnQmKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkU2Nyb2xsRnJhbWUo
V2ViQ29yZTo6UGFnZU92ZXJsYXkqLCBXZWJDb3JlOjpGcmFtZSYpIG92ZXJyaWRlOworCisgICAg
dmlydHVhbCBib29sIGNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlU3RyaW5nVmFsdWVGb3JQb2lu
dChXZWJDb3JlOjpQYWdlT3ZlcmxheSosIFN0cmluZyAvKiBhdHRyaWJ1dGUgKi8sIFdlYkNvcmU6
OkZsb2F0UG9pbnQgLyogcGFyYW1ldGVyICovLCBTdHJpbmcmIHZhbHVlKSBvdmVycmlkZTsKKyAg
ICB2aXJ0dWFsIGJvb2wgY29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVCb29sVmFsdWVGb3JQb2lu
dChXZWJDb3JlOjpQYWdlT3ZlcmxheSosIFN0cmluZyAvKiBhdHRyaWJ1dGUgKi8sIFdlYkNvcmU6
OkZsb2F0UG9pbnQgLyogcGFyYW1ldGVyICovLCBib29sJiB2YWx1ZSkgb3ZlcnJpZGU7CisgICAg
dmlydHVhbCBWZWN0b3I8U3RyaW5nPiBjb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZU5hbWVzKFdl
YkNvcmU6OlBhZ2VPdmVybGF5KiwgYm9vbCAvKiBwYXJhbWV0ZXJpemVkTmFtZXMgKi8pIG92ZXJy
aWRlOworCisKKyAgICBSZWZQdHI8V2ViQ29yZTo6UGFnZU92ZXJsYXk+IG1fb3ZlcmxheTsKKyAg
ICBDbGllbnQqIG1fY2xpZW50OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRp
ZiAvLyBXZWJQYWdlT3ZlcmxheV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvaW9zL0ZpbmRDb250cm9sbGVySU9TLm1tIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL2lvcy9GaW5kQ29udHJvbGxlcklPUy5tbQppbmRleCAwOTA3YmRmLi41
OTQ4MzdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9z
L0ZpbmRDb250cm9sbGVySU9TLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9pb3MvRmluZENvbnRyb2xsZXJJT1MubW0KQEAgLTM2LDYgKzM2LDcgQEAKICNpbXBvcnQg
PFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL01haW5GcmFtZS5o
PgogI2ltcG9ydCA8V2ViQ29yZS9QYWdlLmg+CisjaW1wb3J0IDxXZWJDb3JlL1BhZ2VPdmVybGF5
Q29udHJvbGxlci5oPgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIApAQCAtNTIsNyArNTMs
NyBAQCBzdGF0aWMgQ29sb3IgaGlnaGxpZ2h0Q29sb3IoKQogCiBuYW1lc3BhY2UgV2ViS2l0IHsK
IAotdm9pZCBGaW5kSW5kaWNhdG9yT3ZlcmxheUNsaWVudElPUzo6ZHJhd1JlY3QoUGFnZU92ZXJs
YXkqIG92ZXJsYXksIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgV2Vi
Q29yZTo6SW50UmVjdCYgZGlydHlSZWN0KQordm9pZCBGaW5kSW5kaWNhdG9yT3ZlcmxheUNsaWVu
dElPUzo6ZHJhd1JlY3QoUGFnZU92ZXJsYXkqIG92ZXJsYXksIEdyYXBoaWNzQ29udGV4dCYgY29u
dGV4dCwgY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KQogewogICAgIC8vIEZJWE1FOiBTdXBwb3J0
IG11bHRpcGxlIHRleHQgcmVjdHMuCiAKQEAgLTg1LDExICs4NiwxMSBAQCBib29sIEZpbmRDb250
cm9sbGVyOjp1cGRhdGVGaW5kSW5kaWNhdG9yKEZyYW1lJiBzZWxlY3RlZEZyYW1lLCBib29sIGlz
U2hvd2luZ092ZQogICAgIG1hdGNoUmVjdC5pbmZsYXRlWSh0b3RhbFZlcnRpY2FsTWFyZ2luKTsK
IAogICAgIGlmIChtX2ZpbmRJbmRpY2F0b3JPdmVybGF5KQotICAgICAgICBtX3dlYlBhZ2UtPnVu
aW5zdGFsbFBhZ2VPdmVybGF5KG1fZmluZEluZGljYXRvck92ZXJsYXkuZ2V0KCkpOworICAgICAg
ICBtX3dlYlBhZ2UtPmNvcmVQYWdlKCktPnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLnVuaW5zdGFs
bFBhZ2VPdmVybGF5KG1fZmluZEluZGljYXRvck92ZXJsYXkuZ2V0KCksIFBhZ2VPdmVybGF5OjpG
YWRlTW9kZTo6RG9Ob3RGYWRlKTsKIAogICAgIG1fZmluZEluZGljYXRvck92ZXJsYXlDbGllbnQg
PSBzdGQ6Om1ha2VfdW5pcXVlPEZpbmRJbmRpY2F0b3JPdmVybGF5Q2xpZW50SU9TPihzZWxlY3Rl
ZEZyYW1lKTsKICAgICBtX2ZpbmRJbmRpY2F0b3JPdmVybGF5ID0gUGFnZU92ZXJsYXk6OmNyZWF0
ZShtX2ZpbmRJbmRpY2F0b3JPdmVybGF5Q2xpZW50LmdldCgpLCBQYWdlT3ZlcmxheTo6T3Zlcmxh
eVR5cGU6OkRvY3VtZW50KTsKLSAgICBtX3dlYlBhZ2UtPmluc3RhbGxQYWdlT3ZlcmxheShtX2Zp
bmRJbmRpY2F0b3JPdmVybGF5KTsKKyAgICBtX3dlYlBhZ2UtPmNvcmVQYWdlKCktPnBhZ2VPdmVy
bGF5Q29udHJvbGxlcigpLmluc3RhbGxQYWdlT3ZlcmxheShtX2ZpbmRJbmRpY2F0b3JPdmVybGF5
LCBQYWdlT3ZlcmxheTo6RmFkZU1vZGU6OkRvTm90RmFkZSk7CiAKICAgICBtX2ZpbmRJbmRpY2F0
b3JPdmVybGF5LT5zZXRGcmFtZShtYXRjaFJlY3QpOwogICAgIG1fZmluZEluZGljYXRvck92ZXJs
YXktPnNldE5lZWRzRGlzcGxheSgpOwpAQCAtMTA2LDcgKzEwNyw3IEBAIHZvaWQgRmluZENvbnRy
b2xsZXI6OmhpZGVGaW5kSW5kaWNhdG9yKCkKICAgICBpZiAoIW1faXNTaG93aW5nRmluZEluZGlj
YXRvcikKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV93ZWJQYWdlLT51bmluc3RhbGxQYWdlT3Zl
cmxheShtX2ZpbmRJbmRpY2F0b3JPdmVybGF5LmdldCgpKTsKKyAgICBtX3dlYlBhZ2UtPmNvcmVQ
YWdlKCktPnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLnVuaW5zdGFsbFBhZ2VPdmVybGF5KG1fZmlu
ZEluZGljYXRvck92ZXJsYXkuZ2V0KCksIFBhZ2VPdmVybGF5OjpGYWRlTW9kZTo6RG9Ob3RGYWRl
KTsKICAgICBtX2ZpbmRJbmRpY2F0b3JPdmVybGF5ID0gbnVsbHB0cjsKICAgICBtX2lzU2hvd2lu
Z0ZpbmRJbmRpY2F0b3IgPSBmYWxzZTsKICAgICBtX2ZvdW5kU3RyaW5nTWF0Y2hJbmRleCA9IC0x
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9GaW5k
SW5kaWNhdG9yT3ZlcmxheUNsaWVudElPUy5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL2lvcy9GaW5kSW5kaWNhdG9yT3ZlcmxheUNsaWVudElPUy5oCmluZGV4IDMxMDE3Njcu
LmE0ZTQzZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9p
b3MvRmluZEluZGljYXRvck92ZXJsYXlDbGllbnRJT1MuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL0ZpbmRJbmRpY2F0b3JPdmVybGF5Q2xpZW50SU9TLmgKQEAg
LTI2LDEzICsyNiwxMyBAQAogI2lmbmRlZiBGaW5kSW5kaWNhdG9yT3ZlcmxheUNsaWVudElPU19o
CiAjZGVmaW5lIEZpbmRJbmRpY2F0b3JPdmVybGF5Q2xpZW50SU9TX2gKIAotI2ltcG9ydCAiUGFn
ZU92ZXJsYXkuaCIKICNpbXBvcnQgPFdlYkNvcmUvRnJhbWUuaD4KICNpbXBvcnQgPFdlYkNvcmUv
R3JhcGhpY3NDb250ZXh0Lmg+CisjaW1wb3J0IDxXZWJDb3JlL1BhZ2VPdmVybGF5Lmg+CiAKIG5h
bWVzcGFjZSBXZWJLaXQgewogCi1jbGFzcyBGaW5kSW5kaWNhdG9yT3ZlcmxheUNsaWVudElPUyA6
IHB1YmxpYyBQYWdlT3ZlcmxheTo6Q2xpZW50IHsKK2NsYXNzIEZpbmRJbmRpY2F0b3JPdmVybGF5
Q2xpZW50SU9TIDogcHVibGljIFdlYkNvcmU6OlBhZ2VPdmVybGF5OjpDbGllbnQgewogcHVibGlj
OgogICAgIEZpbmRJbmRpY2F0b3JPdmVybGF5Q2xpZW50SU9TKFdlYkNvcmU6OkZyYW1lJiBmcmFt
ZSkKICAgICAgICAgOiBtX2ZyYW1lKGZyYW1lKQpAQCAtNDAsMTEgKzQwLDExIEBAIHB1YmxpYzoK
ICAgICB9CiAKIHByaXZhdGU6Ci0gICAgdmlydHVhbCB2b2lkIHBhZ2VPdmVybGF5RGVzdHJveWVk
KFBhZ2VPdmVybGF5Kikgb3ZlcnJpZGUgeyB9Ci0gICAgdmlydHVhbCB2b2lkIHdpbGxNb3ZlVG9X
ZWJQYWdlKFBhZ2VPdmVybGF5KiwgV2ViUGFnZSopIG92ZXJyaWRlIHsgfQotICAgIHZpcnR1YWwg
dm9pZCBkaWRNb3ZlVG9XZWJQYWdlKFBhZ2VPdmVybGF5KiwgV2ViUGFnZSopIG92ZXJyaWRlIHsg
fQotICAgIHZpcnR1YWwgdm9pZCBkcmF3UmVjdChQYWdlT3ZlcmxheSosIFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dCYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGRpcnR5UmVjdCkgb3ZlcnJpZGU7
Ci0gICAgdmlydHVhbCBib29sIG1vdXNlRXZlbnQoUGFnZU92ZXJsYXkqLCBjb25zdCBXZWJNb3Vz
ZUV2ZW50Jikgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcGFn
ZU92ZXJsYXlEZXN0cm95ZWQoV2ViQ29yZTo6UGFnZU92ZXJsYXkqKSBvdmVycmlkZSB7IH0KKyAg
ICB2aXJ0dWFsIHZvaWQgd2lsbE1vdmVUb1BhZ2UoV2ViQ29yZTo6UGFnZU92ZXJsYXkqLCBXZWJD
b3JlOjpQYWdlKikgb3ZlcnJpZGUgeyB9CisgICAgdmlydHVhbCB2b2lkIGRpZE1vdmVUb1BhZ2Uo
V2ViQ29yZTo6UGFnZU92ZXJsYXkqLCBXZWJDb3JlOjpQYWdlKikgb3ZlcnJpZGUgeyB9CisgICAg
dmlydHVhbCB2b2lkIGRyYXdSZWN0KFdlYkNvcmU6OlBhZ2VPdmVybGF5KiwgV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0JiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgZGlydHlSZWN0KSBvdmVycmlk
ZTsKKyAgICB2aXJ0dWFsIGJvb2wgbW91c2VFdmVudChXZWJDb3JlOjpQYWdlT3ZlcmxheSosIGNv
bnN0IFdlYkNvcmU6OlBsYXRmb3JtTW91c2VFdmVudCYpIG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNl
OyB9CiAKICAgICBXZWJDb3JlOjpGcmFtZSYgbV9mcmFtZTsKIH07CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1JlbW90ZUxheWVyVHJlZURyYXdpbmdB
cmVhLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1JlbW90ZUxheWVy
VHJlZURyYXdpbmdBcmVhLmgKaW5kZXggMWNiNTEwMC4uYzUyYTNiZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9SZW1vdGVMYXllclRyZWVEcmF3aW5n
QXJlYS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvUmVtb3Rl
TGF5ZXJUcmVlRHJhd2luZ0FyZWEuaApAQCAtNjcsNiArNjcsNyBAQCBwcml2YXRlOgogICAgIHZp
cnR1YWwgdm9pZCBzZXRSb290Q29tcG9zaXRpbmdMYXllcihXZWJDb3JlOjpHcmFwaGljc0xheWVy
Kikgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlQ29tcG9zaXRpbmdMYXllckZs
dXNoKCkgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlQ29tcG9zaXRpbmdMYXll
ckZsdXNoSW1tZWRpYXRlbHkoKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoVmll
d092ZXJsYXlHcmFwaGljc0xheWVyKFdlYkNvcmU6OkZyYW1lKiwgV2ViQ29yZTo6R3JhcGhpY3NM
YXllciopIG92ZXJyaWRlOwogCiAgICAgdmlydHVhbCB2b2lkIGFkZFRyYW5zYWN0aW9uQ2FsbGJh
Y2tJRCh1aW50NjRfdCBjYWxsYmFja0lEKSBvdmVycmlkZTsKIApAQCAtMTA3LDYgKzEwOCw3IEBA
IHByaXZhdGU6CiAgICAgdmlydHVhbCBib29sIGFkanVzdExheWVyRmx1c2hUaHJvdHRsaW5nKFdl
YkNvcmU6OkxheWVyRmx1c2hUaHJvdHRsZVN0YXRlOjpGbGFncykgb3ZlcnJpZGU7CiAKICAgICB2
b2lkIHVwZGF0ZVNjcm9sbGVkRXhwb3NlZFJlY3QoKTsKKyAgICB2b2lkIHVwZGF0ZVJvb3RMYXll
cnMoKTsKIAogICAgIHZvaWQgbGF5ZXJGbHVzaFRpbWVyRmlyZWQoV2ViQ29yZTo6VGltZXI8UmVt
b3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWE+Kik7CiAgICAgdm9pZCBmbHVzaExheWVycygpOwpAQCAt
MTYwLDYgKzE2Miw5IEBAIHByaXZhdGU6CiAKICAgICB1aW50NjRfdCBtX2N1cnJlbnRUcmFuc2Fj
dGlvbklEOwogICAgIFZlY3RvcjxSZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbjo6VHJhbnNhY3Rp
b25DYWxsYmFja0lEPiBtX3BlbmRpbmdDYWxsYmFja0lEczsKKworICAgIFdlYkNvcmU6OkdyYXBo
aWNzTGF5ZXIqIG1fY29udGVudExheWVyOworICAgIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqIG1f
dmlld092ZXJsYXlSb290TGF5ZXI7CiB9OwogCiBEUkFXSU5HX0FSRUFfVFlQRV9DQVNUUyhSZW1v
dGVMYXllclRyZWVEcmF3aW5nQXJlYSwgdHlwZSgpID09IERyYXdpbmdBcmVhVHlwZVJlbW90ZUxh
eWVyVHJlZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
bWFjL1JlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhLm1tIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL21hYy9SZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYS5tbQppbmRleCAzN2M4
OTQ3Li45ZTQ4YjU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvbWFjL1JlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWEubW0KQEAg
LTQwLDYgKzQwLDcgQEAKICNpbXBvcnQgPFdlYkNvcmUvRnJhbWUuaD4KICNpbXBvcnQgPFdlYkNv
cmUvRnJhbWVWaWV3Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL01haW5GcmFtZS5oPgorI2ltcG9ydCA8
V2ViQ29yZS9QYWdlT3ZlcmxheUNvbnRyb2xsZXIuaD4KICNpbXBvcnQgPFdlYkNvcmUvUmVuZGVy
TGF5ZXJDb21wb3NpdG9yLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1JlbmRlclZpZXcuaD4KICNpbXBv
cnQgPFdlYkNvcmUvU2V0dGluZ3MuaD4KQEAgLTY2LDYgKzY3LDggQEAgUmVtb3RlTGF5ZXJUcmVl
RHJhd2luZ0FyZWE6OlJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhKFdlYlBhZ2UmIHdlYlBhZ2Us
IGNvbnN0IFcKICAgICAsIG1faGFkRmx1c2hEZWZlcnJlZFdoaWxlV2FpdGluZ0ZvckJhY2tpbmdT
dG9yZVN3YXAoZmFsc2UpCiAgICAgLCBtX2Rpc3BsYXlSZWZyZXNoTW9uaXRvcnNUb05vdGlmeShu
dWxscHRyKQogICAgICwgbV9jdXJyZW50VHJhbnNhY3Rpb25JRCgwKQorICAgICwgbV9jb250ZW50
TGF5ZXIobnVsbHB0cikKKyAgICAsIG1fdmlld092ZXJsYXlSb290TGF5ZXIobnVsbHB0cikKIHsK
ICAgICB3ZWJQYWdlLmNvcmVQYWdlKCktPnNldHRpbmdzKCkuc2V0Rm9yY2VDb21wb3NpdGluZ01v
ZGUodHJ1ZSk7CiAjaWYgUExBVEZPUk0oSU9TKQpAQCAtMTEzLDE1ICsxMTYsMzEgQEAgdm9pZCBS
ZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYTo6d2lsbERlc3Ryb3lEaXNwbGF5UmVmcmVzaE1vbml0
b3IoRGlzcGxheVJlZnJlc2gKICAgICAgICAgbV9kaXNwbGF5UmVmcmVzaE1vbml0b3JzVG9Ob3Rp
ZnktPnJlbW92ZShyZW1vdGVNb25pdG9yKTsKIH0KIAotdm9pZCBSZW1vdGVMYXllclRyZWVEcmF3
aW5nQXJlYTo6c2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIoR3JhcGhpY3NMYXllciogcm9vdExheWVy
KQordm9pZCBSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYTo6dXBkYXRlUm9vdExheWVycygpCiB7
CiAgICAgVmVjdG9yPEdyYXBoaWNzTGF5ZXIqPiBjaGlsZHJlbjsKLSAgICBpZiAocm9vdExheWVy
KSB7Ci0gICAgICAgIGNoaWxkcmVuLmFwcGVuZChyb290TGF5ZXIpOwotICAgICAgICBjaGlsZHJl
bi5hcHBlbmQobV93ZWJQYWdlLnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLnZpZXdPdmVybGF5Um9v
dExheWVyKCkpOworICAgIGlmIChtX2NvbnRlbnRMYXllcikgeworICAgICAgICBjaGlsZHJlbi5h
cHBlbmQobV9jb250ZW50TGF5ZXIpOworICAgICAgICBpZiAobV92aWV3T3ZlcmxheVJvb3RMYXll
cikKKyAgICAgICAgICAgIGNoaWxkcmVuLmFwcGVuZChtX3ZpZXdPdmVybGF5Um9vdExheWVyKTsK
ICAgICB9CisKICAgICBtX3Jvb3RMYXllci0+c2V0Q2hpbGRyZW4oY2hpbGRyZW4pOworfQorCit2
b2lkIFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhOjphdHRhY2hWaWV3T3ZlcmxheUdyYXBoaWNz
TGF5ZXIoRnJhbWUqIGZyYW1lLCBHcmFwaGljc0xheWVyKiB2aWV3T3ZlcmxheVJvb3RMYXllcikK
K3sKKyAgICBpZiAoIWZyYW1lLT5pc01haW5GcmFtZSgpKQorICAgICAgICByZXR1cm47CiAKKyAg
ICBtX3ZpZXdPdmVybGF5Um9vdExheWVyID0gdmlld092ZXJsYXlSb290TGF5ZXI7CisgICAgdXBk
YXRlUm9vdExheWVycygpOworfQorCit2b2lkIFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhOjpz
ZXRSb290Q29tcG9zaXRpbmdMYXllcihHcmFwaGljc0xheWVyKiByb290TGF5ZXIpCit7CisgICAg
bV9jb250ZW50TGF5ZXIgPSByb290TGF5ZXI7CisgICAgdXBkYXRlUm9vdExheWVycygpOwogICAg
IHNjaGVkdWxlQ29tcG9zaXRpbmdMYXllckZsdXNoKCk7CiB9CiAKQEAgLTIzNCw4ICsyNTMsNiBA
QCB2b2lkIFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhOjp1cGRhdGVTY3JvbGxlZEV4cG9zZWRS
ZWN0KCkKICNlbmRpZgogCiAgICAgZnJhbWVWaWV3LT5zZXRFeHBvc2VkUmVjdChtX3Njcm9sbGVk
RXhwb3NlZFJlY3QpOwotCi0gICAgbV93ZWJQYWdlLnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLmRp
ZENoYW5nZUV4cG9zZWRSZWN0KCk7CiB9CiAKIFRpbGVkQmFja2luZyogUmVtb3RlTGF5ZXJUcmVl
RHJhd2luZ0FyZWE6Om1haW5GcmFtZVRpbGVkQmFja2luZygpIGNvbnN0CkBAIC0zMjEsNyArMzM4
LDcgQEAgdm9pZCBSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYTo6Zmx1c2hMYXllcnMoKQogCiAg
ICAgRmxvYXRSZWN0IHZpc2libGVSZWN0KEZsb2F0UG9pbnQoKSwgbV92aWV3U2l6ZSk7CiAgICAg
dmlzaWJsZVJlY3QuaW50ZXJzZWN0KG1fc2Nyb2xsZWRFeHBvc2VkUmVjdCk7Ci0gICAgbV93ZWJQ
YWdlLnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLmZsdXNoUGFnZU92ZXJsYXlMYXllcnModmlzaWJs
ZVJlY3QpOworCiAgICAgbV93ZWJQYWdlLm1haW5GcmFtZVZpZXcoKS0+Zmx1c2hDb21wb3NpdGlu
Z1N0YXRlSW5jbHVkaW5nU3ViZnJhbWVzKCk7CiAgICAgbV9yb290TGF5ZXItPmZsdXNoQ29tcG9z
aXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKTsKIApAQCAtNDEwLDcgKzQyNyw2IEBAIHZvaWQg
UmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWE6OmRpZFVwZGF0ZSgpCiB2b2lkIFJlbW90ZUxheWVy
VHJlZURyYXdpbmdBcmVhOjptYWluRnJhbWVDb250ZW50U2l6ZUNoYW5nZWQoY29uc3QgSW50U2l6
ZSYgY29udGVudHNTaXplKQogewogICAgIG1fcm9vdExheWVyLT5zZXRTaXplKGNvbnRlbnRzU2l6
ZSk7Ci0gICAgbV93ZWJQYWdlLnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLmRpZENoYW5nZURvY3Vt
ZW50U2l6ZSgpOwogfQogCiBib29sIFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhOjptYXJrTGF5
ZXJzVm9sYXRpbGVJbW1lZGlhdGVseUlmUG9zc2libGUoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9TZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyLm1t
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9TZXJ2aWNlc092ZXJsYXlD
b250cm9sbGVyLm1tCmluZGV4IGZiNjhiN2EuLjA2ZTVhMWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvU2VydmljZXNPdmVybGF5Q29udHJvbGxlci5t
bQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1NlcnZpY2VzT3Zl
cmxheUNvbnRyb2xsZXIubW0KQEAgLTQyLDYgKzQyLDcgQEAKICNpbXBvcnQgPFdlYkNvcmUvR3Jh
cGhpY3NMYXllci5oPgogI2ltcG9ydCA8V2ViQ29yZS9HcmFwaGljc0xheWVyQ0EuaD4KICNpbXBv
cnQgPFdlYkNvcmUvTWFpbkZyYW1lLmg+CisjaW1wb3J0IDxXZWJDb3JlL1BhZ2VPdmVybGF5Q29u
dHJvbGxlci5oPgogI2ltcG9ydCA8V2ViQ29yZS9QbGF0Zm9ybUNBQW5pbWF0aW9uTWFjLmg+CiAj
aW1wb3J0IDxXZWJDb3JlL1NvZnRMaW5raW5nLmg+CiAKQEAgLTIzMiwxNiArMjMzLDE2IEBAIHZv
aWQgU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6cGFnZU92ZXJsYXlEZXN0cm95ZWQoUGFnZU92
ZXJsYXkqKQogICAgIEFTU0VSVCghbV9zZXJ2aWNlc092ZXJsYXkpOwogfQogCi12b2lkIFNlcnZp
Y2VzT3ZlcmxheUNvbnRyb2xsZXI6OndpbGxNb3ZlVG9XZWJQYWdlKFBhZ2VPdmVybGF5KiwgV2Vi
UGFnZSogd2ViUGFnZSkKK3ZvaWQgU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6d2lsbE1vdmVU
b1BhZ2UoUGFnZU92ZXJsYXkqLCBQYWdlKiBwYWdlKQogewotICAgIGlmICh3ZWJQYWdlKQorICAg
IGlmIChwYWdlKQogICAgICAgICByZXR1cm47CiAKICAgICBBU1NFUlQobV9zZXJ2aWNlc092ZXJs
YXkpOwogICAgIG1fc2VydmljZXNPdmVybGF5ID0gbnVsbHB0cjsKIH0KIAotdm9pZCBTZXJ2aWNl
c092ZXJsYXlDb250cm9sbGVyOjpkaWRNb3ZlVG9XZWJQYWdlKFBhZ2VPdmVybGF5KiwgV2ViUGFn
ZSopCit2b2lkIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OmRpZE1vdmVUb1BhZ2UoUGFnZU92
ZXJsYXkqLCBQYWdlKikKIHsKIH0KIApAQCAtNTgzLDcgKzU4NCw3IEBAIHZvaWQgU2VydmljZXNP
dmVybGF5Q29udHJvbGxlcjo6ZGlkUmVidWlsZFBvdGVudGlhbEhpZ2hsaWdodHMoKQogewogICAg
IGlmIChtX3BvdGVudGlhbEhpZ2hsaWdodHMuaXNFbXB0eSgpKSB7CiAgICAgICAgIGlmIChtX3Nl
cnZpY2VzT3ZlcmxheSkKLSAgICAgICAgICAgIG1fd2ViUGFnZS51bmluc3RhbGxQYWdlT3Zlcmxh
eShtX3NlcnZpY2VzT3ZlcmxheSk7CisgICAgICAgICAgICBtX3dlYlBhZ2UuY29yZVBhZ2UoKS0+
cGFnZU92ZXJsYXlDb250cm9sbGVyKCkudW5pbnN0YWxsUGFnZU92ZXJsYXkobV9zZXJ2aWNlc092
ZXJsYXksIFBhZ2VPdmVybGF5OjpGYWRlTW9kZTo6RG9Ob3RGYWRlKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIApAQCAtNjAzLDcgKzYwNCw3IEBAIHZvaWQgU2VydmljZXNPdmVybGF5Q29udHJv
bGxlcjo6Y3JlYXRlT3ZlcmxheUlmTmVlZGVkKCkKIAogICAgIFJlZlB0cjxQYWdlT3ZlcmxheT4g
b3ZlcmxheSA9IFBhZ2VPdmVybGF5OjpjcmVhdGUodGhpcywgUGFnZU92ZXJsYXk6Ok92ZXJsYXlU
eXBlOjpEb2N1bWVudCk7CiAgICAgbV9zZXJ2aWNlc092ZXJsYXkgPSBvdmVybGF5LmdldCgpOwot
ICAgIG1fd2ViUGFnZS5pbnN0YWxsUGFnZU92ZXJsYXkob3ZlcmxheS5yZWxlYXNlKCksIFBhZ2VP
dmVybGF5OjpGYWRlTW9kZTo6RG9Ob3RGYWRlKTsKKyAgICBtX3dlYlBhZ2UuY29yZVBhZ2UoKS0+
cGFnZU92ZXJsYXlDb250cm9sbGVyKCkuaW5zdGFsbFBhZ2VPdmVybGF5KG92ZXJsYXkucmVsZWFz
ZSgpLCBQYWdlT3ZlcmxheTo6RmFkZU1vZGU6OkRvTm90RmFkZSk7CiB9CiAKIFZlY3RvcjxSZWZQ
dHI8UmFuZ2U+PiBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjp0ZWxlcGhvbmVOdW1iZXJSYW5n
ZXNGb3JGb2N1c2VkRnJhbWUoKQpAQCAtNzIzLDcgKzcyNCw3IEBAIHZvaWQgU2VydmljZXNPdmVy
bGF5Q29udHJvbGxlcjo6ZGV0ZXJtaW5lQWN0aXZlSGlnaGxpZ2h0KGJvb2wmIG1vdXNlSXNPdmVy
QWN0aXZlCiAgICAgfQogfQogCi1ib29sIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6Om1vdXNl
RXZlbnQoUGFnZU92ZXJsYXkqLCBjb25zdCBXZWJNb3VzZUV2ZW50JiBldmVudCkKK2Jvb2wgU2Vy
dmljZXNPdmVybGF5Q29udHJvbGxlcjo6bW91c2VFdmVudChQYWdlT3ZlcmxheSosIGNvbnN0IFBs
YXRmb3JtTW91c2VFdmVudCYgZXZlbnQpCiB7CiAgICAgbV9tb3VzZVBvc2l0aW9uID0gbV93ZWJQ
YWdlLmNvcmVQYWdlKCktPm1haW5GcmFtZSgpLnZpZXcoKS0+cm9vdFZpZXdUb0NvbnRlbnRzKGV2
ZW50LnBvc2l0aW9uKCkpOwogCkBAIC03MzEsMTMgKzczMiwxMyBAQCBib29sIFNlcnZpY2VzT3Zl
cmxheUNvbnRyb2xsZXI6Om1vdXNlRXZlbnQoUGFnZU92ZXJsYXkqLCBjb25zdCBXZWJNb3VzZUV2
ZW50JiBldgogICAgIGRldGVybWluZUFjdGl2ZUhpZ2hsaWdodChtb3VzZUlzT3ZlckFjdGl2ZUhp
Z2hsaWdodEJ1dHRvbik7CiAKICAgICAvLyBDYW5jZWwgdGhlIHBvdGVudGlhbCBjbGljayBpZiBh
bnkgYnV0dG9uIG90aGVyIHRoYW4gdGhlIGxlZnQgYnV0dG9uIGNoYW5nZXMgc3RhdGUsIGFuZCBp
Z25vcmUgdGhlIGV2ZW50LgotICAgIGlmIChldmVudC5idXR0b24oKSAhPSBXZWJNb3VzZUV2ZW50
OjpMZWZ0QnV0dG9uKSB7CisgICAgaWYgKGV2ZW50LmJ1dHRvbigpICE9IE1vdXNlQnV0dG9uOjpM
ZWZ0QnV0dG9uKSB7CiAgICAgICAgIG1fY3VycmVudE1vdXNlRG93bk9uQnV0dG9uSGlnaGxpZ2h0
ID0gbnVsbHB0cjsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAogICAgIC8vIElmIHRo
ZSBtb3VzZSBsaWZ0ZWQgd2hpbGUgc3RpbGwgb3ZlciB0aGUgaGlnaGxpZ2h0IGJ1dHRvbiB0aGF0
IGl0IHdlbnQgZG93biBvbiwgdGhlbiB0aGF0IGlzIGEgY2xpY2suCi0gICAgaWYgKGV2ZW50LnR5
cGUoKSA9PSBXZWJFdmVudDo6TW91c2VVcCkgeworICAgIGlmIChldmVudC50eXBlKCkgPT0gUGxh
dGZvcm1FdmVudDo6TW91c2VSZWxlYXNlZCkgewogICAgICAgICBSZWZQdHI8SGlnaGxpZ2h0PiBt
b3VzZURvd25IaWdobGlnaHQgPSBtX2N1cnJlbnRNb3VzZURvd25PbkJ1dHRvbkhpZ2hsaWdodDsK
ICAgICAgICAgbV9jdXJyZW50TW91c2VEb3duT25CdXR0b25IaWdobGlnaHQgPSBudWxscHRyOwog
CkBAIC03NTIsNyArNzUzLDcgQEAgYm9vbCBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjptb3Vz
ZUV2ZW50KFBhZ2VPdmVybGF5KiwgY29uc3QgV2ViTW91c2VFdmVudCYgZXYKICAgICB9CiAKICAg
ICAvLyBJZiB0aGUgbW91c2UgbW92ZWQgb3V0c2lkZSBvZiB0aGUgYnV0dG9uIHRyYWNraW5nIGEg
cG90ZW50aWFsIGNsaWNrLCBzdG9wIHRyYWNraW5nIHRoZSBjbGljay4KLSAgICBpZiAoZXZlbnQu
dHlwZSgpID09IFdlYkV2ZW50OjpNb3VzZU1vdmUpIHsKKyAgICBpZiAoZXZlbnQudHlwZSgpID09
IFBsYXRmb3JtRXZlbnQ6Ok1vdXNlTW92ZWQpIHsKICAgICAgICAgaWYgKG1fY3VycmVudE1vdXNl
RG93bk9uQnV0dG9uSGlnaGxpZ2h0ICYmIG1vdXNlSXNPdmVyQWN0aXZlSGlnaGxpZ2h0QnV0dG9u
KQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAKQEAgLTc2MSw3ICs3NjIsNyBAQCBib29sIFNl
cnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6Om1vdXNlRXZlbnQoUGFnZU92ZXJsYXkqLCBjb25zdCBX
ZWJNb3VzZUV2ZW50JiBldgogICAgIH0KIAogICAgIC8vIElmIHRoZSBtb3VzZSB3ZW50IGRvd24g
b3ZlciB0aGUgYWN0aXZlIGhpZ2hsaWdodCdzIGJ1dHRvbiwgdHJhY2sgdGhpcyBhcyBhIHBvdGVu
dGlhbCBjbGljay4KLSAgICBpZiAoZXZlbnQudHlwZSgpID09IFdlYkV2ZW50OjpNb3VzZURvd24p
IHsKKyAgICBpZiAoZXZlbnQudHlwZSgpID09IFBsYXRmb3JtRXZlbnQ6Ok1vdXNlUHJlc3NlZCkg
ewogICAgICAgICBpZiAobV9hY3RpdmVIaWdobGlnaHQgJiYgbW91c2VJc092ZXJBY3RpdmVIaWdo
bGlnaHRCdXR0b24pIHsKICAgICAgICAgICAgIG1fY3VycmVudE1vdXNlRG93bk9uQnV0dG9uSGln
aGxpZ2h0ID0gbV9hY3RpdmVIaWdobGlnaHQ7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAg
LTc3Myw5ICs3NzQsOSBAQCBib29sIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6Om1vdXNlRXZl
bnQoUGFnZU92ZXJsYXkqLCBjb25zdCBXZWJNb3VzZUV2ZW50JiBldgogICAgIHJldHVybiBmYWxz
ZTsKIH0KIAotdm9pZCBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpkaWRTY3JvbGxGcmFtZShQ
YWdlT3ZlcmxheSosIEZyYW1lKiBmcmFtZSkKK3ZvaWQgU2VydmljZXNPdmVybGF5Q29udHJvbGxl
cjo6ZGlkU2Nyb2xsRnJhbWUoUGFnZU92ZXJsYXkqLCBGcmFtZSYgZnJhbWUpCiB7Ci0gICAgaWYg
KGZyYW1lLT5pc01haW5GcmFtZSgpKQorICAgIGlmIChmcmFtZS5pc01haW5GcmFtZSgpKQogICAg
ICAgICByZXR1cm47CiAKICAgICBidWlsZFBob25lTnVtYmVySGlnaGxpZ2h0cygpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9UaWxlZENvcmVBbmlt
YXRpb25EcmF3aW5nQXJlYS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21h
Yy9UaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYS5oCmluZGV4IGI4MWE0YTQuLjllNWFiZGEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvVGlsZWRD
b3JlQW5pbWF0aW9uRHJhd2luZ0FyZWEuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvbWFjL1RpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhLmgKQEAgLTg0LDYgKzg0
LDggQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgdmlld1N0YXRlRGlkQ2hhbmdlKFdlYkNv
cmU6OlZpZXdTdGF0ZTo6RmxhZ3MgY2hhbmdlZCwgYm9vbCB3YW50c0RpZFVwZGF0ZVZpZXdTdGF0
ZSkgb3ZlcnJpZGU7CiAgICAgdm9pZCBkaWRVcGRhdGVWaWV3U3RhdGVUaW1lckZpcmVkKCk7CiAK
KyAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoVmlld092ZXJsYXlHcmFwaGljc0xheWVyKFdlYkNvcmU6
OkZyYW1lKiwgV2ViQ29yZTo6R3JhcGhpY3NMYXllciopIG92ZXJyaWRlOworCiAgICAgLy8gV2Vi
Q29yZTo6TGF5ZXJGbHVzaFNjaGVkdWxlckNsaWVudAogICAgIHZpcnR1YWwgYm9vbCBmbHVzaExh
eWVycygpIG92ZXJyaWRlOwogCkBAIC0xMDYsNiArMTA4LDcgQEAgcHJpdmF0ZToKICAgICB2b2lk
IHVwZGF0ZUxheWVySG9zdGluZ0NvbnRleHQoKTsKIAogICAgIHZvaWQgc2V0Um9vdENvbXBvc2l0
aW5nTGF5ZXIoQ0FMYXllciAqKTsKKyAgICB2b2lkIHVwZGF0ZVJvb3RMYXllcnMoKTsKIAogICAg
IFdlYkNvcmU6OlRpbGVkQmFja2luZyogbWFpbkZyYW1lVGlsZWRCYWNraW5nKCkgY29uc3Q7CiAg
ICAgdm9pZCB1cGRhdGVEZWJ1Z0luZm9MYXllcihib29sIHNob3dMYXllcik7CkBAIC0xMzgsNiAr
MTQxLDggQEAgcHJpdmF0ZToKICAgICBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtX3Ry
YW5zZm9ybTsKIAogICAgIFJ1bkxvb3A6OlRpbWVyPFRpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdB
cmVhPiBtX3NlbmREaWRVcGRhdGVWaWV3U3RhdGVUaW1lcjsKKworICAgIFdlYkNvcmU6OkdyYXBo
aWNzTGF5ZXIqIG1fdmlld092ZXJsYXlSb290TGF5ZXI7CiB9OwogCiBEUkFXSU5HX0FSRUFfVFlQ
RV9DQVNUUyhUaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYSwgdHlwZSgpID09IERyYXdpbmdB
cmVhVHlwZVRpbGVkQ29yZUFuaW1hdGlvbik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1RpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhLm1tIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9UaWxlZENvcmVBbmltYXRpb25E
cmF3aW5nQXJlYS5tbQppbmRleCBlNzc1OTE5Li44OWQyNWY1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1RpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdB
cmVhLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvVGlsZWRD
b3JlQW5pbWF0aW9uRHJhd2luZ0FyZWEubW0KQEAgLTQ0LDYgKzQ0LDcgQEAKICNpbXBvcnQgPFdl
YkNvcmUvR3JhcGhpY3NMYXllckNBLmg+CiAjaW1wb3J0IDxXZWJDb3JlL01haW5GcmFtZS5oPgog
I2ltcG9ydCA8V2ViQ29yZS9QYWdlLmg+CisjaW1wb3J0IDxXZWJDb3JlL1BhZ2VPdmVybGF5Q29u
dHJvbGxlci5oPgogI2ltcG9ydCA8V2ViQ29yZS9QbGF0Zm9ybUNBQW5pbWF0aW9uTWFjLmg+CiAj
aW1wb3J0IDxXZWJDb3JlL1JlbmRlckxheWVyQmFja2luZy5oPgogI2ltcG9ydCA8V2ViQ29yZS9S
ZW5kZXJMYXllckNvbXBvc2l0b3IuaD4KQEAgLTc2LDYgKzc3LDcgQEAgVGlsZWRDb3JlQW5pbWF0
aW9uRHJhd2luZ0FyZWE6OlRpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhKFdlYlBhZ2UmIHdl
YlBhZ2UsIGMKICAgICAsIG1fc2Nyb2xsZWRFeHBvc2VkUmVjdChGbG9hdFJlY3Q6OmluZmluaXRl
UmVjdCgpKQogICAgICwgbV90cmFuc2llbnRab29tU2NhbGUoMSkKICAgICAsIG1fc2VuZERpZFVw
ZGF0ZVZpZXdTdGF0ZVRpbWVyKFJ1bkxvb3A6Om1haW4oKSwgdGhpcywgJlRpbGVkQ29yZUFuaW1h
dGlvbkRyYXdpbmdBcmVhOjpkaWRVcGRhdGVWaWV3U3RhdGVUaW1lckZpcmVkKQorICAgICwgbV92
aWV3T3ZlcmxheVJvb3RMYXllcihudWxscHRyKQogewogICAgIG1fd2ViUGFnZS5jb3JlUGFnZSgp
LT5zZXR0aW5ncygpLnNldEZvcmNlQ29tcG9zaXRpbmdNb2RlKHRydWUpOwogCkBAIC04NCw2ICs4
Niw4IEBAIFRpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhOjpUaWxlZENvcmVBbmltYXRpb25E
cmF3aW5nQXJlYShXZWJQYWdlJiB3ZWJQYWdlLCBjCiAgICAgW21faG9zdGluZ0xheWVyIHNldE9w
YXF1ZTpZRVNdOwogICAgIFttX2hvc3RpbmdMYXllciBzZXRHZW9tZXRyeUZsaXBwZWQ6WUVTXTsK
IAorICAgIFttX2hvc3RpbmdMYXllciBzZXROYW1lOkAiVENBREEgUk9PVCJdOworCiAgICAgdXBk
YXRlTGF5ZXJIb3N0aW5nQ29udGV4dCgpOwogICAgIHNldENvbG9yU3BhY2UocGFyYW1ldGVycy5j
b2xvclNwYWNlKTsKIApAQCAtMjA0LDkgKzIwOCwyOCBAQCB2b2lkIFRpbGVkQ29yZUFuaW1hdGlv
bkRyYXdpbmdBcmVhOjp1cGRhdGVQcmVmZXJlbmNlcyhjb25zdCBXZWJQcmVmZXJlbmNlc1N0b3Jl
JgogICAgIHVwZGF0ZURlYnVnSW5mb0xheWVyKHNob3dUaWxlZFNjcm9sbGluZ0luZGljYXRvcik7
CiB9CiAKK3ZvaWQgVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWE6OnVwZGF0ZVJvb3RMYXll
cnMoKQoreworICAgIGlmICghbV9yb290TGF5ZXIpIHsKKyAgICAgICAgW21faG9zdGluZ0xheWVy
IHNldFN1YmxheWVyczpAWyBdXTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFttX2hv
c3RpbmdMYXllciBzZXRTdWJsYXllcnM6bV92aWV3T3ZlcmxheVJvb3RMYXllciA/IEBbIG1fcm9v
dExheWVyLmdldCgpLCBtX3ZpZXdPdmVybGF5Um9vdExheWVyLT5wbGF0Zm9ybUxheWVyKCkgXSA6
IEBbIG1fcm9vdExheWVyLmdldCgpIF1dOworfQorCit2b2lkIFRpbGVkQ29yZUFuaW1hdGlvbkRy
YXdpbmdBcmVhOjphdHRhY2hWaWV3T3ZlcmxheUdyYXBoaWNzTGF5ZXIoRnJhbWUqIGZyYW1lLCBH
cmFwaGljc0xheWVyKiB2aWV3T3ZlcmxheVJvb3RMYXllcikKK3sKKyAgICBpZiAoIWZyYW1lLT5p
c01haW5GcmFtZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3ZpZXdPdmVybGF5Um9vdExh
eWVyID0gdmlld092ZXJsYXlSb290TGF5ZXI7CisgICAgdXBkYXRlUm9vdExheWVycygpOworfQor
CiB2b2lkIFRpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhOjptYWluRnJhbWVDb250ZW50U2l6
ZUNoYW5nZWQoY29uc3QgSW50U2l6ZSYgc2l6ZSkKIHsKLSAgICBtX3dlYlBhZ2UucGFnZU92ZXJs
YXlDb250cm9sbGVyKCkuZGlkQ2hhbmdlRG9jdW1lbnRTaXplKCk7CisKIH0KIAogdm9pZCBUaWxl
ZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYTo6dXBkYXRlSW50cmluc2ljQ29udGVudFNpemVJZk5l
ZWRlZCgpCkBAIC0yODMsNyArMzA2LDkgQEAgYm9vbCBUaWxlZENvcmVBbmltYXRpb25EcmF3aW5n
QXJlYTo6Zmx1c2hMYXllcnMoKQogCiAgICAgRmxvYXRSZWN0IHZpc2libGVSZWN0ID0gW21faG9z
dGluZ0xheWVyIGZyYW1lXTsKICAgICB2aXNpYmxlUmVjdC5pbnRlcnNlY3QobV9zY3JvbGxlZEV4
cG9zZWRSZWN0KTsKLSAgICBtX3dlYlBhZ2UucGFnZU92ZXJsYXlDb250cm9sbGVyKCkuZmx1c2hQ
YWdlT3ZlcmxheUxheWVycyh2aXNpYmxlUmVjdCk7CisKKyAgICAvLyBCZWNhdXNlIG91ciB2aWV3
LXJlbGF0aXZlIG92ZXJsYXkgcm9vdCBsYXllciBpcyBub3QgYXR0YWNoZWQgdG8gdGhlIG1haW4g
R3JhcGhpY3NMYXllciB0cmVlLCB3ZSBuZWVkIHRvIGZsdXNoIGl0IG1hbnVhbGx5LgorICAgIG1f
d2ViUGFnZS5jb3JlUGFnZSgpLT5wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKS52aWV3T3ZlcmxheVJv
b3RMYXllcigpLT5mbHVzaENvbXBvc2l0aW5nU3RhdGUodmlzaWJsZVJlY3QpOwogCiAgICAgYm9v
bCByZXR1cm5WYWx1ZSA9IG1fd2ViUGFnZS5tYWluRnJhbWVWaWV3KCktPmZsdXNoQ29tcG9zaXRp
bmdTdGF0ZUluY2x1ZGluZ1N1YmZyYW1lcygpOwogI2lmIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcp
CkBAIC0zNjMsOCArMzg4LDYgQEAgdm9pZCBUaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYTo6
dXBkYXRlU2Nyb2xsZWRFeHBvc2VkUmVjdCgpCiAjZW5kaWYKIAogICAgIGZyYW1lVmlldy0+c2V0
RXhwb3NlZFJlY3QobV9zY3JvbGxlZEV4cG9zZWRSZWN0KTsKLQotICAgIG1fd2ViUGFnZS5wYWdl
T3ZlcmxheUNvbnRyb2xsZXIoKS5kaWRDaGFuZ2VFeHBvc2VkUmVjdCgpOwogfQogCiB2b2lkIFRp
bGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhOjp1cGRhdGVHZW9tZXRyeShjb25zdCBJbnRTaXpl
JiB2aWV3U2l6ZSwgY29uc3QgSW50U2l6ZSYgbGF5ZXJQb3NpdGlvbikKQEAgLTQ2NCwxMiArNDg3
LDEyIEBAIHZvaWQgVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWE6OnNldFJvb3RDb21wb3Np
dGluZ0xheWVyKENBTGF5ZXIgKmxheWVyKQogICAgIFtDQVRyYW5zYWN0aW9uIGJlZ2luXTsKICAg
ICBbQ0FUcmFuc2FjdGlvbiBzZXREaXNhYmxlQWN0aW9uczpZRVNdOwogCi0gICAgW21faG9zdGlu
Z0xheWVyIHNldFN1YmxheWVyczpsYXllciA/IEBbIGxheWVyLCBtX3dlYlBhZ2UucGFnZU92ZXJs
YXlDb250cm9sbGVyKCkudmlld092ZXJsYXlSb290TGF5ZXIoKS0+cGxhdGZvcm1MYXllcigpIF0g
OiBAWyBdXTsKLQogICAgIGJvb2wgaGFkUm9vdExheWVyID0gISFtX3Jvb3RMYXllcjsKICAgICBt
X3Jvb3RMYXllciA9IGxheWVyOwogICAgIFttX3Jvb3RMYXllciBzZXRTdWJsYXllclRyYW5zZm9y
bTptX3RyYW5zZm9ybV07CiAKKyAgICB1cGRhdGVSb290TGF5ZXJzKCk7CisKICAgICBpZiAoaGFk
Um9vdExheWVyICE9ICEhbGF5ZXIpCiAgICAgICAgIG1fbGF5ZXJIb3N0aW5nQ29udGV4dC0+c2V0
Um9vdExheWVyKGxheWVyID8gbV9ob3N0aW5nTGF5ZXIuZ2V0KCkgOiAwKTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XS0FjY2Vzc2liaWxpdHlX
ZWJQYWdlT2JqZWN0TWFjLm1tIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21h
Yy9XS0FjY2Vzc2liaWxpdHlXZWJQYWdlT2JqZWN0TWFjLm1tCmluZGV4IDM4MzM5YmEuLjU0ZGQ0
NDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV0tB
Y2Nlc3NpYmlsaXR5V2ViUGFnZU9iamVjdE1hYy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvbWFjL1dLQWNjZXNzaWJpbGl0eVdlYlBhZ2VPYmplY3RNYWMubW0KQEAg
LTQwLDYgKzQwLDcgQEAKICNpbXBvcnQgPFdlYkNvcmUvRnJhbWVWaWV3Lmg+CiAjaW1wb3J0IDxX
ZWJDb3JlL01haW5GcmFtZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9QYWdlLmg+CisjaW1wb3J0IDxX
ZWJDb3JlL1BhZ2VPdmVybGF5Q29udHJvbGxlci5oPgogI2ltcG9ydCA8V2ViQ29yZS9TY3JvbGxW
aWV3Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL1Njcm9sbGJhci5oPgogI2ltcG9ydCA8V2ViS2l0U3lz
dGVtSW50ZXJmYWNlLmg+CkBAIC03NSwxOSArNzYsMTMgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYktp
dDsKIAogLSAoTlNBcnJheSAqKWFjY2Vzc2liaWxpdHlQYXJhbWV0ZXJpemVkQXR0cmlidXRlTmFt
ZXMKIHsKLSAgICBXS1JldGFpblB0cjxXS0FycmF5UmVmPiByZXN1bHQgPSBhZG9wdFdLKG1fcGFn
ZS0+cGFnZU92ZXJsYXlDb250cm9sbGVyKCkuY29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVzTmFt
ZXModHJ1ZSkpOwotICAgIGlmICghcmVzdWx0KQorICAgIFZlY3RvcjxTdHJpbmc+IHJlc3VsdCA9
IG1fcGFnZS0+Y29yZVBhZ2UoKS0+cGFnZU92ZXJsYXlDb250cm9sbGVyKCkuY29weUFjY2Vzc2li
aWxpdHlBdHRyaWJ1dGVzTmFtZXModHJ1ZSk7CisgICAgaWYgKHJlc3VsdC5pc0VtcHR5KCkpCiAg
ICAgICAgIHJldHVybiBuaWw7CiAgICAgCiAgICAgTlNNdXRhYmxlQXJyYXkgKm5hbWVzID0gW05T
TXV0YWJsZUFycmF5IGFycmF5XTsKLSAgICBzaXplX3QgY291bnQgPSBXS0FycmF5R2V0U2l6ZShy
ZXN1bHQuZ2V0KCkpOwotICAgIGZvciAoc2l6ZV90IGsgPSAwOyBrIDwgY291bnQ7IGsrKykgewot
ICAgICAgICBXS1R5cGVSZWYgaXRlbSA9IFdLQXJyYXlHZXRJdGVtQXRJbmRleChyZXN1bHQuZ2V0
KCksIGspOwotICAgICAgICBpZiAodG9JbXBsKGl0ZW0pLT50eXBlKCkgPT0gQVBJOjpTdHJpbmc6
OkFQSVR5cGUpIHsKLSAgICAgICAgICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gbmFtZSA9IGFk
b3B0Q0YoV0tTdHJpbmdDb3B5Q0ZTdHJpbmcoa0NGQWxsb2NhdG9yRGVmYXVsdCwgKFdLU3RyaW5n
UmVmKWl0ZW0pKTsKLSAgICAgICAgICAgIFtuYW1lcyBhZGRPYmplY3Q6KE5TU3RyaW5nICopbmFt
ZS5nZXQoKV07Ci0gICAgICAgIH0KLSAgICB9CisgICAgZm9yIChhdXRvJiBuYW1lIDogcmVzdWx0
KQorICAgICAgICBbbmFtZXMgYWRkT2JqZWN0OihOU1N0cmluZyAqKW5hbWVdOwogICAgIAogICAg
IHJldHVybiBuYW1lczsKIH0KQEAgLTE2NCwyMyArMTU5LDI2IEBAIHVzaW5nIG5hbWVzcGFjZSBX
ZWJLaXQ7CiAKIC0gKGlkKWFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZTooTlNTdHJpbmcgKilh
dHRyaWJ1dGUgZm9yUGFyYW1ldGVyOihpZClwYXJhbWV0ZXIKIHsKLSAgICBXS1JldGFpblB0cjxX
S1R5cGVSZWY+IHBhZ2VPdmVybGF5UGFyYW1ldGVyID0gMDsKLSAgICAKLSAgICBpZiAoW3BhcmFt
ZXRlciBpc0tpbmRPZkNsYXNzOltOU1ZhbHVlIGNsYXNzXV0gJiYgc3RyY21wKFsoTlNWYWx1ZSop
cGFyYW1ldGVyIG9iakNUeXBlXSwgQGVuY29kZShOU1BvaW50KSkgPT0gMCkgewotICAgICAgICBO
U1BvaW50IHBvaW50ID0gW3NlbGYgY29udmVydFNjcmVlblBvaW50VG9Sb290VmlldzpbKE5TVmFs
dWUgKilwYXJhbWV0ZXIgcG9pbnRWYWx1ZV1dOwotICAgICAgICBwYWdlT3ZlcmxheVBhcmFtZXRl
ciA9IFdLUG9pbnRDcmVhdGUoV0tQb2ludE1ha2UocG9pbnQueCwgcG9pbnQueSkpOwotICAgIH0K
LSAgICAKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gYXR0cmlidXRlUmVmID0gYWRvcHRX
SyhXS1N0cmluZ0NyZWF0ZVdpdGhDRlN0cmluZygoQ0ZTdHJpbmdSZWYpYXR0cmlidXRlKSk7Ci0g
ICAgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiByZXN1bHQgPSBhZG9wdFdLKG1fcGFnZS0+cGFnZU92
ZXJsYXlDb250cm9sbGVyKCkuY29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZShhdHRyaWJ1
dGVSZWYuZ2V0KCksIHBhZ2VPdmVybGF5UGFyYW1ldGVyLmdldCgpKSk7Ci0gICAgaWYgKCFyZXN1
bHQpCisgICAgV2ViQ29yZTo6RmxvYXRQb2ludCBwYWdlT3ZlcmxheVBvaW50OworICAgIGlmIChb
cGFyYW1ldGVyIGlzS2luZE9mQ2xhc3M6W05TVmFsdWUgY2xhc3NdXSAmJiAhc3RyY21wKFsoTlNW
YWx1ZSAqKXBhcmFtZXRlciBvYmpDVHlwZV0sIEBlbmNvZGUoTlNQb2ludCkpKQorICAgICAgICBw
YWdlT3ZlcmxheVBvaW50ID0gW3NlbGYgY29udmVydFNjcmVlblBvaW50VG9Sb290VmlldzpbKE5T
VmFsdWUgKilwYXJhbWV0ZXIgcG9pbnRWYWx1ZV1dOworICAgIGVsc2UKICAgICAgICAgcmV0dXJu
IG5pbDsKLSAgICAKLSAgICBpZiAodG9JbXBsKHJlc3VsdC5nZXQoKSktPnR5cGUoKSA9PSBBUEk6
OlN0cmluZzo6QVBJVHlwZSkKLSAgICAgICAgcmV0dXJuIENGQnJpZGdpbmdSZWxlYXNlKFdLU3Ry
aW5nQ29weUNGU3RyaW5nKGtDRkFsbG9jYXRvckRlZmF1bHQsIChXS1N0cmluZ1JlZilyZXN1bHQu
Z2V0KCkpKTsKLSAgICBpZiAodG9JbXBsKHJlc3VsdC5nZXQoKSktPnR5cGUoKSA9PSBBUEk6OkJv
b2xlYW46OkFQSVR5cGUpCi0gICAgICAgIHJldHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0aEJvb2w6
V0tCb29sZWFuR2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihyZXN1bHQuZ2V0KCkp
KV07Ci0gICAgCisKKyAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6QCJBWERhdGFE
ZXRlY3RvckV4aXN0c0F0UG9pbnQiXSB8fCBbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpAIkFY
RGlkU2hvd0RhdGFEZXRlY3Rvck1lbnVBdFBvaW50Il0pIHsKKyAgICAgICAgYm9vbCB2YWx1ZTsK
KyAgICAgICAgaWYgKCFtX3BhZ2UtPmNvcmVQYWdlKCktPnBhZ2VPdmVybGF5Q29udHJvbGxlcigp
LmNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlQm9vbFZhbHVlRm9yUG9pbnQoYXR0cmlidXRlLCBw
YWdlT3ZlcmxheVBvaW50LCB2YWx1ZSkpCisgICAgICAgICAgICByZXR1cm4gbmlsOworICAgICAg
ICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhCb29sOnZhbHVlXTsKKyAgICB9CisKKyAgICBp
ZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6QCJBWERhdGFEZXRlY3RvclR5cGVBdFBvaW50
Il0pIHsKKyAgICAgICAgU3RyaW5nIHZhbHVlOworICAgICAgICBpZiAoIW1fcGFnZS0+Y29yZVBh
Z2UoKS0+cGFnZU92ZXJsYXlDb250cm9sbGVyKCkuY29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVT
dHJpbmdWYWx1ZUZvclBvaW50KGF0dHJpYnV0ZSwgcGFnZU92ZXJsYXlQb2ludCwgdmFsdWUpKQor
ICAgICAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAgICAgcmV0dXJuIFtOU1N0cmluZyBzdHJpbmdX
aXRoU3RyaW5nOnZhbHVlXTsKKyAgICB9CisKICAgICByZXR1cm4gbmlsOwogfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>238809</attachid>
            <date>2014-09-28 00:34:12 -0700</date>
            <delta_ts>2014-09-29 19:28:59 -0700</delta_ts>
            <desc>cmake</desc>
            <filename>pageoverlay.diff</filename>
            <type>text/plain</type>
            <size>164542</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNv
cmUvQ01ha2VMaXN0cy50eHQKaW5kZXggOGRiN2Q3ZC4uZWZkYjBmNyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKQEAgLTE5NDAsNiArMTk0MCw4IEBAIHNldChXZWJDb3JlX1NPVVJDRVMKICAgICBwYWdl
L1BhZ2VDb25zb2xlQ2xpZW50LmNwcAogICAgIHBhZ2UvUGFnZUdyb3VwLmNwcAogICAgIHBhZ2Uv
UGFnZUdyb3VwTG9hZERlZmVycmVyLmNwcAorICAgIHBhZ2UvUGFnZU92ZXJsYXkuY3BwCisgICAg
cGFnZS9QYWdlT3ZlcmxheUNvbnRyb2xsZXIuY3BwCiAgICAgcGFnZS9QYWdlU2VyaWFsaXplci5j
cHAKICAgICBwYWdlL1BhZ2VUaHJvdHRsZXIuY3BwCiAgICAgcGFnZS9QYWdlVmlzaWJpbGl0eVN0
YXRlLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4gYi9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgppbmRleCA0NDQ1ZDUwLi5lMzI3MGNmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgorKysgYi9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLmV4cC5pbgpAQCAtMTg3LDYgKzE4NywxMyBAQCBfX1pON1dlYkNvcmUxMU1lbW9yeUNh
Y2hlMThyZXNvdXJjZUZvclJlcXVlc3RFUktOU18xNVJlc291cmNlUmVxdWVzdEVOU185U2Vzc2lv
bgogX19aTjdXZWJDb3JlMTFNZW1vcnlDYWNoZTE5Z2V0T3JpZ2luc1dpdGhDYWNoZUVSTjNXVEY3
SGFzaFNldElOUzFfNlJlZlB0cklOU18xNFNlY3VyaXR5T3JpZ2luRUVFTlNfMThTZWN1cml0eU9y
aWdpbkhhc2hFTlMxXzEwSGFzaFRyYWl0c0lTNV9FRUVFCiBfX1pON1dlYkNvcmUxMU1lbW9yeUNh
Y2hlMjByZW1vdmVJbWFnZUZyb21DYWNoZUVSS05TXzNVUkxFUktOM1dURjZTdHJpbmdFCiBfX1pO
N1dlYkNvcmUxMU1lbW9yeUNhY2hlMjVyZW1vdmVSZXNvdXJjZXNXaXRoT3JpZ2luRVBOU18xNFNl
Y3VyaXR5T3JpZ2luRQorX19aTjdXZWJDb3JlMTFQYWdlT3ZlcmxheTE1c2V0TmVlZHNEaXNwbGF5
RVJLTlNfN0ludFJlY3RFCitfX1pON1dlYkNvcmUxMVBhZ2VPdmVybGF5MTVzZXROZWVkc0Rpc3Bs
YXlFdgorX19aTjdXZWJDb3JlMTFQYWdlT3ZlcmxheTIwc3RvcEZhZGVPdXRBbmltYXRpb25Fdgor
X19aTjdXZWJDb3JlMTFQYWdlT3ZlcmxheTVjbGVhckV2CitfX1pON1dlYkNvcmUxMVBhZ2VPdmVy
bGF5NWxheWVyRXYKK19fWk43V2ViQ29yZTExUGFnZU92ZXJsYXk2Y3JlYXRlRVBOUzBfNkNsaWVu
dEVOUzBfMTFPdmVybGF5VHlwZUUKK19fWk43V2ViQ29yZTExUGFnZU92ZXJsYXk4c2V0RnJhbWVF
TlNfN0ludFJlY3RFCiBfX1pON1dlYkNvcmUxMVNRTFJlc3VsdE9rRQogX19aTjdXZWJDb3JlMTFV
UkxXaXRoRGF0YUVQNk5TRGF0YVA1TlNVUkwKIF9fWk43V2ViQ29yZTExZ2V0VVJMQnl0ZXNFUEs3
X19DRlVSTFJOM1dURjZWZWN0b3JJY0xtNTEyRU5TM18xNUNyYXNoT25PdmVyZmxvd0VFRQpAQCAt
OTA5LDYgKzkxNiwxMSBAQCBfX1pON1dlYkNvcmUyMU1lbW9yeVByZXNzdXJlSGFuZGxlcjdpbnN0
YWxsRXYKIF9fWk43V2ViQ29yZTIxTmV0d29ya1N0b3JhZ2VTZXNzaW9uMjFkZWZhdWx0U3RvcmFn
ZVNlc3Npb25FdgogX19aTjdXZWJDb3JlMjFOZXR3b3JrU3RvcmFnZVNlc3Npb24yNXN3aXRjaFRv
TmV3VGVzdGluZ1Nlc3Npb25FdgogX19aTjdXZWJDb3JlMjFOZXR3b3JrU3RvcmFnZVNlc3Npb24y
OGNyZWF0ZVByaXZhdGVCcm93c2luZ1Nlc3Npb25FUktOM1dURjZTdHJpbmdFCitfX1pON1dlYkNv
cmUyMVBhZ2VPdmVybGF5Q29udHJvbGxlcjE4aW5zdGFsbFBhZ2VPdmVybGF5RU4zV1RGMTBQYXNz
UmVmUHRySU5TXzExUGFnZU92ZXJsYXlFRUVOUzNfOEZhZGVNb2RlRQorX19aTjdXZWJDb3JlMjFQ
YWdlT3ZlcmxheUNvbnRyb2xsZXIyMHVuaW5zdGFsbFBhZ2VPdmVybGF5RVBOU18xMVBhZ2VPdmVy
bGF5RU5TMV84RmFkZU1vZGVFCitfX1pON1dlYkNvcmUyMVBhZ2VPdmVybGF5Q29udHJvbGxlcjMy
Y29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVzTmFtZXNFYgorX19aTjdXZWJDb3JlMjFQYWdlT3Zl
cmxheUNvbnRyb2xsZXI0M2NvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlQm9vbFZhbHVlRm9yUG9p
bnRFTjNXVEY2U3RyaW5nRU5TXzEwRmxvYXRQb2ludEVSYgorX19aTjdXZWJDb3JlMjFQYWdlT3Zl
cmxheUNvbnRyb2xsZXI0NWNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlU3RyaW5nVmFsdWVGb3JQ
b2ludEVOM1dURjZTdHJpbmdFTlNfMTBGbG9hdFBvaW50RVJTMl8KIF9fWk43V2ViQ29yZTIxUGxh
dGZvcm1LZXlib2FyZEV2ZW50MjRkaXNhbWJpZ3VhdGVLZXlEb3duRXZlbnRFTlNfMTNQbGF0Zm9y
bUV2ZW50NFR5cGVFYgogX19aTjdXZWJDb3JlMjFSZW1vdGVDb21tYW5kTGlzdGVuZXI2Y3JlYXRl
RVJOU18yN1JlbW90ZUNvbW1hbmRMaXN0ZW5lckNsaWVudEUKIF9fWk43V2ViQ29yZTIxUmVzb3Vy
Y2VMb2FkU2NoZWR1bGVyMjBzZXJ2ZVBlbmRpbmdSZXF1ZXN0c0VOU18yMFJlc291cmNlTG9hZFBy
aW9yaXR5RQpAQCAtMTYwMyw2ICsxNjE1LDggQEAgX19aTks3V2ViQ29yZTExSGlzdG9yeUl0ZW04
Y2hpbGRyZW5FdgogX19aTks3V2ViQ29yZTExSGlzdG9yeUl0ZW04cmVmZXJyZXJFdgogX19aTks3
V2ViQ29yZTExSGlzdG9yeUl0ZW05dXJsU3RyaW5nRXYKIF9fWk5LN1dlYkNvcmUxMUhpc3RvcnlJ
dGVtOXZpZXdTdGF0ZUV2CitfX1pOSzdXZWJDb3JlMTFQYWdlT3ZlcmxheTVmcmFtZUV2CitfX1pO
SzdXZWJDb3JlMTFQYWdlT3ZlcmxheTZib3VuZHNFdgogX19aTks3V2ViQ29yZTExUmVuZGVyQmxv
Y2syNWlubGluZUVsZW1lbnRDb250aW51YXRpb25FdgogX19aTks3V2ViQ29yZTExUmVuZGVyTGF5
ZXIxOWFic29sdXRlQm91bmRpbmdCb3hFdgogX19aTks3V2ViQ29yZTExUmVuZGVyTGF5ZXIyNG5l
ZWRzQ29tcG9zaXRlZFNjcm9sbGluZ0V2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggYTY5ZTk2Yy4uY2MwMTg3MSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBi
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTA5
MCw2ICsxMDkwLDEwIEBACiAJCTJENUE1OTJGMTUyNTI1MjMwMDM2RUU1MSAvKiBJbWFnZU9yaWVu
dGF0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEE4NzQ4RDc0MTJDQzNGODkwMDFGQkE0MSAvKiBJbWFnZU9yaWVudGF0aW9uLmNwcCAqLzsgfTsK
IAkJMkQ1QTU5MzExNTI1MjVEMDAwMzZFRTUxIC8qIEltYWdlT3JpZW50YXRpb24uaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4NzQ4RDY2MTJDQzM3NjMw
MDFGQkE0MSAvKiBJbWFnZU9yaWVudGF0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMkQ1QkM0MjcxNkY4ODJFRTAwNzA0OEQwIC8qIFNlY3Vy
aXR5UG9saWN5VmlvbGF0aW9uRXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDJENUJDNDI1MTZGODgyQkUwMDcwNDhEMCAvKiBTZWN1cml0eVBvbGlj
eVZpb2xhdGlvbkV2ZW50LmggKi87IH07CisJCTJENUM5Q0ZGMTlDN0I1MkUwMEIzQzVDMSAvKiBQ
YWdlT3ZlcmxheS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAyRDVDOUNGQjE5QzdCNTJFMDBCM0M1QzEgLyogUGFnZU92ZXJsYXkuY3BwICovOyB9Owor
CQkyRDVDOUQwMDE5QzdCNTJFMDBCM0M1QzEgLyogUGFnZU92ZXJsYXkuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJENUM5Q0ZDMTlDN0I1MkUwMEIzQzVD
MSAvKiBQYWdlT3ZlcmxheS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CisJCTJENUM5RDAxMTlDN0I1MkUwMEIzQzVDMSAvKiBQYWdlT3ZlcmxheUNvbnRy
b2xsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MkQ1QzlDRkQxOUM3QjUyRTAwQjNDNUMxIC8qIFBhZ2VPdmVybGF5Q29udHJvbGxlci5jcHAgKi87
IH07CisJCTJENUM5RDAyMTlDN0I1MkUwMEIzQzVDMSAvKiBQYWdlT3ZlcmxheUNvbnRyb2xsZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJENUM5Q0ZF
MTlDN0I1MkUwMEIzQzVDMSAvKiBQYWdlT3ZlcmxheUNvbnRyb2xsZXIuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkyRDZFNDY4NDE3RDY2MEY1MDBF
Q0Y4QkIgLyogUERGRG9jdW1lbnRJbWFnZU1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJENkU0NjgyMTdENjYwRjUwMEVDRjhCQiAvKiBQREZEb2N1
bWVudEltYWdlTWFjLm1tICovOyB9OwogCQkyRDcwQkExMzE4MDc0RERGMDAwMTkwOEEgLyogUGxh
dGZvcm1DQUxheWVyTWFjLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAyRDcwQkExMjE4MDc0RERGMDAwMTkwOEEgLyogUGxhdGZvcm1DQUxheWVyTWFjLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMkQ3MEJB
MTUxODA3NEY4NjAwMDE5MDhBIC8qIFBsYXRmb3JtQ0FMYXllci5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRDcwQkExNDE4MDc0Rjg1MDAwMTkwOEEg
LyogUGxhdGZvcm1DQUxheWVyLmNwcCAqLzsgfTsKQEAgLTgwODEsNiArODA4NSwxMCBAQAogCQky
RDQ2RjA0RjE3Qjk2RkQyMDA1NjQ3RjAgLyogSW50U2l6ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBJbnRTaXplLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMkQ1QkM0MjUxNkY4ODJCRTAwNzA0OEQwIC8qIFNlY3VyaXR5UG9saWN5VmlvbGF0aW9u
RXZlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2VjdXJpdHlQb2xpY3lW
aW9sYXRpb25FdmVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyRDVCQzQyNjE2
Rjg4MkJFMDA3MDQ4RDAgLyogU2VjdXJpdHlQb2xpY3lWaW9sYXRpb25FdmVudC5pZGwgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSB0ZXh0OyBwYXRoID0gU2VjdXJpdHlQb2xpY3lWaW9sYXRpb25FdmVudC5pZGw7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTJENUM5Q0ZCMTlDN0I1MkUwMEIzQzVDMSAvKiBQYWdl
T3ZlcmxheS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQYWdlT3Zl
cmxheS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTJENUM5Q0ZDMTlDN0I1MkUw
MEIzQzVDMSAvKiBQYWdlT3ZlcmxheS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBQYWdlT3ZlcmxheS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyRDVDOUNGRDE5
QzdCNTJFMDBCM0M1QzEgLyogUGFnZU92ZXJsYXlDb250cm9sbGVyLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBhZ2VPdmVybGF5Q29udHJvbGxlci5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTJENUM5Q0ZFMTlDN0I1MkUwMEIzQzVDMSAvKiBQYWdl
T3ZlcmxheUNvbnRyb2xsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGFn
ZU92ZXJsYXlDb250cm9sbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJENkU0
NjgyMTdENjYwRjUwMEVDRjhCQiAvKiBQREZEb2N1bWVudEltYWdlTWFjLm1tICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gUERGRG9jdW1lbnRJbWFnZU1hYy5tbTsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkQ3MEJBMTIxODA3NERERjAwMDE5MDhBIC8qIFBs
YXRmb3JtQ0FMYXllck1hYy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBQbGF0
Zm9ybUNBTGF5ZXJNYWMuaDsgcGF0aCA9IGNhL21hYy9QbGF0Zm9ybUNBTGF5ZXJNYWMuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkQ3MEJBMTQxODA3NEY4NTAwMDE5MDhBIC8qIFBs
YXRmb3JtQ0FMYXllci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBQ
bGF0Zm9ybUNBTGF5ZXIuY3BwOyBwYXRoID0gY2EvUGxhdGZvcm1DQUxheWVyLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE2NTkwLDYgKzE2NTk4LDEwIEBACiAJCQkJOTMwMkIw
QkUwRDc5RjgyQzAwQzdFRTgzIC8qIFBhZ2VHcm91cC5oICovLAogCQkJCTdBNjc0QkQ5MEY5RUJG
NEUwMDZDRjA5OSAvKiBQYWdlR3JvdXBMb2FkRGVmZXJyZXIuY3BwICovLAogCQkJCTdBNjc0QkRB
MEY5RUJGNEUwMDZDRjA5OSAvKiBQYWdlR3JvdXBMb2FkRGVmZXJyZXIuaCAqLywKKwkJCQkyRDVD
OUNGQjE5QzdCNTJFMDBCM0M1QzEgLyogUGFnZU92ZXJsYXkuY3BwICovLAorCQkJCTJENUM5Q0ZD
MTlDN0I1MkUwMEIzQzVDMSAvKiBQYWdlT3ZlcmxheS5oICovLAorCQkJCTJENUM5Q0ZEMTlDN0I1
MkUwMEIzQzVDMSAvKiBQYWdlT3ZlcmxheUNvbnRyb2xsZXIuY3BwICovLAorCQkJCTJENUM5Q0ZF
MTlDN0I1MkUwMEIzQzVDMSAvKiBQYWdlT3ZlcmxheUNvbnRyb2xsZXIuaCAqLywKIAkJCQkzNzFF
NjVDRDEzNjYxRUVEMDBCRUVEQjAgLyogUGFnZVNlcmlhbGl6ZXIuY3BwICovLAogCQkJCTM3MUU2
NUNCMTM2NjFFREMwMEJFRURCMCAvKiBQYWdlU2VyaWFsaXplci5oICovLAogCQkJCUE3MTk3RjI1
MTc1NjhBRTUwMDdCOTQ0MiAvKiBQYWdlVGhyb3R0bGVyLmNwcCAqLywKQEAgLTIzNjUzLDYgKzIz
NjY1LDcgQEAKIAkJCQk5N0JDNkEyMTE1MDVGMDgxMDAxQjc0QUMgLyogRGF0YWJhc2UuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTk3QkM2QTI0MTUwNUYwODEwMDFCNzRBQyAvKiBEYXRhYmFzZUF1dGhv
cml6ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFMTZDRkQ0MTY5RDFERUQwMEQzQTBDNyAvKiBE
YXRhYmFzZUJhY2tlbmQuaCBpbiBIZWFkZXJzICovLAorCQkJCTJENUM5RDAyMTlDN0I1MkUwMEIz
QzVDMSAvKiBQYWdlT3ZlcmxheUNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3QkM2
OURCMTUwNUYwNzYwMDFCNzRBQyAvKiBEYXRhYmFzZUJhY2tlbmRCYXNlLmggaW4gSGVhZGVycyAq
LywKIAkJCQlGRTZGNkFCMDE2OUUwNTc1MDBGQzMwQTIgLyogRGF0YWJhc2VCYWNrZW5kQ29udGV4
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkUxNkNGRDYxNjlEMURFRDAwRDNBMEM3IC8qIERhdGFi
YXNlQmFja2VuZFN5bmMuaCBpbiBIZWFkZXJzICovLApAQCAtMjU2MTgsNiArMjU2MzEsNyBAQAog
CQkJCTQzOTA0NkVDMTJEQTI1RTgwMEFGODBBOSAvKiBSZW5kZXJNYXRoTUxUb2tlbi5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNDM5MDQ2RUExMkRBMjVFODAwQUY4MEEyIC8qIFJlbmRlck1hdGhNTFVu
ZGVyT3Zlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTRDMjc5NTkwQ0Y5NzQxOTAwRTk3Qjk4IC8q
IFJlbmRlck1lZGlhLmggaW4gSGVhZGVycyAqLywKKwkJCQkyRDVDOUQwMDE5QzdCNTJFMDBCM0M1
QzEgLyogUGFnZU92ZXJsYXkuaCBpbiBIZWFkZXJzICovLAogCQkJCURFQkNDREQyMTY2NDZFODIw
MEE0NTJFMSAvKiBSZW5kZXJNZWRpYUNvbnRyb2xFbGVtZW50cy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNDFGQTMwM0YxMzE2QzI5QzAwQzBCRkM1IC8qIFJlbmRlck1lZGlhQ29udHJvbHMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUFCRERGRTdBMEE1QzZFNzAwMEEzRTExRCAvKiBSZW5kZXJNZW51TGlz
dC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yODAwNSw2ICsyODAxOSw3IEBACiAJCQkJQTU4NDBFMUMx
ODdCNzRENTAwODQzQjEwIC8qIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQk3MUIxRTEyNjE2NDA0OTFBMDBCMTg4MEEgLyogSW5zcGVjdG9yTGF5
ZXJUcmVlQWdlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTA0QUFDQ0QxODM0NDU1OTAwRTNE
OUJDIC8qIEluc3BlY3Rvck5vZGVGaW5kZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMkQ1QzlE
MDExOUM3QjUyRTAwQjNDNUMxIC8qIFBhZ2VPdmVybGF5Q29udHJvbGxlci5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk3QzUyMkQ0QjE1QjQ3N0U4MDA5QjdDOTUgLyogSW5zcGVjdG9yT3ZlcmxheS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk0RjZGREQ2NDEzNDFERUREMDAxRjhFRTMgLyogSW5zcGVj
dG9yUGFnZUFnZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk5Q0MwQjY2MThCRTlGMTUwMDZD
RUJDQyAvKiBJbnNwZWN0b3JSZXBsYXlBZ2VudC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI4MDcz
LDYgKzI4MDg4LDcgQEAKIAkJCQlCQ0MwNjU4NzBGM0NFMkE3MDBDRDJEODcgLyogSlNDbGllbnRS
ZWN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDQzA2NTg5MEYzQ0UyQTcwMENEMkQ4NyAvKiBK
U0NsaWVudFJlY3RMaXN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTVDNDMwNEI1MTkxQUVGNDYw
MDBFMkJDMCAvKiBKU0VYVFNoYWRlclRleHR1cmVMT0QuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
MkQ1QzlDRkYxOUM3QjUyRTAwQjNDNUMxIC8qIFBhZ2VPdmVybGF5LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTc2RkI5RkY4MTlBNzNFM0EwMDQyMDU2MiAvKiBKU0F1dG9jb21wbGV0ZUVycm9yRXZl
bnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNBODNFNEYwRDdDRTFFOTAwMzQyMUE4IC8qIEpT
RGF0YVRyYW5zZmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDQTgzRTUyMEQ3Q0UyMDUwMDM0
MjFBOCAvKiBKU0RhdGFUcmFuc2ZlckN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9FbXB0eUNsaWVudHMuaCBiL1NvdXJjZS9XZWJDb3Jl
L2xvYWRlci9FbXB0eUNsaWVudHMuaAppbmRleCBmZjA4ZjYwLi45Y2QxMmI3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5oCkBAIC0xODIsNiArMTgyLDcgQEAgcHVibGljOgogICAg
IHZpcnR1YWwgdm9pZCBzY3JvbGxSZWN0SW50b1ZpZXcoY29uc3QgSW50UmVjdCYpIGNvbnN0IG92
ZXJyaWRlIHsgfQogCiAgICAgdmlydHVhbCB2b2lkIGF0dGFjaFJvb3RHcmFwaGljc0xheWVyKEZy
YW1lKiwgR3JhcGhpY3NMYXllciopIG92ZXJyaWRlIHsgfQorICAgIHZpcnR1YWwgdm9pZCBhdHRh
Y2hWaWV3T3ZlcmxheUdyYXBoaWNzTGF5ZXIoRnJhbWUqLCBHcmFwaGljc0xheWVyKikgb3ZlcnJp
ZGUgeyB9CiAgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzT25lU2hvdERyYXdpbmdTeW5jaHJvbml6
YXRpb24oKSBvdmVycmlkZSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVDb21wb3NpdGlu
Z0xheWVyRmx1c2goKSBvdmVycmlkZSB7IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGFnZS9DaHJvbWVDbGllbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmgK
aW5kZXggMGNhMDQ2Yy4uMzk2MzdlYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9D
aHJvbWVDbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZUNsaWVudC5oCkBA
IC0zMDAsNiArMzAwLDcgQEAgcHVibGljOgogCiAgICAgLy8gUGFzcyAwIGFzIHRoZSBHcmFwaGlj
c0xheWVyIHRvIGRldGF0Y2ggdGhlIHJvb3QgbGF5ZXIuCiAgICAgdmlydHVhbCB2b2lkIGF0dGFj
aFJvb3RHcmFwaGljc0xheWVyKEZyYW1lKiwgR3JhcGhpY3NMYXllciopID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgYXR0YWNoVmlld092ZXJsYXlHcmFwaGljc0xheWVyKEZyYW1lKiwgR3JhcGhpY3NM
YXllciopID0gMDsKICAgICAvLyBTZXRzIGEgZmxhZyB0byBzcGVjaWZ5IHRoYXQgdGhlIG5leHQg
dGltZSBjb250ZW50IGlzIGRyYXduIHRvIHRoZSB3aW5kb3csCiAgICAgLy8gdGhlIGNoYW5nZXMg
YXBwZWFyIG9uIHRoZSBzY3JlZW4gaW4gc3luY2hyb255IHdpdGggdXBkYXRlcyB0byBHcmFwaGlj
c0xheWVycy4KICAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNPbmVTaG90RHJhd2luZ1N5bmNocm9u
aXphdGlvbigpID0gMDsKQEAgLTMwOSw4ICszMTAsNiBAQCBwdWJsaWM6CiAgICAgLy8gUmV0dXJu
cyB3aGV0aGVyIG9yIG5vdCB0aGUgY2xpZW50IGNhbiByZW5kZXIgdGhlIGNvbXBvc2l0ZWQgbGF5
ZXIsCiAgICAgLy8gcmVnYXJkbGVzcyBvZiB0aGUgc2V0dGluZ3MuCiAgICAgdmlydHVhbCBib29s
IGFsbG93c0FjY2VsZXJhdGVkQ29tcG9zaXRpbmcoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9Ci0g
ICAgLy8gU3VwcGx5IGEgbGF5ZXIgdGhhdCB3aWxsIGFkZGVkIGFzIGFuIG92ZXJsYXkgb3ZlciBv
dGhlciBkb2N1bWVudCBsYXllcnMgKHNjcm9sbGluZyB3aXRoIHRoZSBkb2N1bWVudCkuCi0gICAg
dmlydHVhbCBHcmFwaGljc0xheWVyKiBkb2N1bWVudE92ZXJsYXlMYXllckZvckZyYW1lKEZyYW1l
JikgeyByZXR1cm4gbnVsbHB0cjsgfQogCiAgICAgZW51bSBDb21wb3NpdGluZ1RyaWdnZXIgewog
ICAgICAgICBUaHJlZURUcmFuc2Zvcm1UcmlnZ2VyID0gMSA8PCAwLApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9F
dmVudEhhbmRsZXIuY3BwCmluZGV4IDNjMTUyMTcuLjhhZDA1NjYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L0V2ZW50SGFuZGxlci5jcHAKQEAgLTY2LDYgKzY2LDcgQEAKICNpbmNsdWRlICJNb3VzZUV2ZW50
LmgiCiAjaW5jbHVkZSAiTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cy5oIgogI2luY2x1ZGUg
IlBhZ2UuaCIKKyNpbmNsdWRlICJQYWdlT3ZlcmxheUNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJQ
bGF0Zm9ybUV2ZW50LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1LZXlib2FyZEV2ZW50LmgiCiAjaW5j
bHVkZSAiUGxhdGZvcm1XaGVlbEV2ZW50LmgiCkBAIC0xNjQ0LDYgKzE2NDUsMTAgQEAgYm9vbCBF
dmVudEhhbmRsZXI6OmhhbmRsZU1vdXNlUHJlc3NFdmVudChjb25zdCBQbGF0Zm9ybU1vdXNlRXZl
bnQmIHBsYXRmb3JtTW91c2UKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCisgICAgUGFn
ZSogcGFnZSA9IG1fZnJhbWUucGFnZSgpOworICAgIGlmIChwYWdlICYmIHBhZ2UtPnBhZ2VPdmVy
bGF5Q29udHJvbGxlcigpLmhhbmRsZU1vdXNlRXZlbnQocGxhdGZvcm1Nb3VzZUV2ZW50KSkKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQogICAgIGJvb2wg
ZGVmYXVsdFByZXZlbnRlZCA9IGRpc3BhdGNoU3ludGhldGljVG91Y2hFdmVudElmRW5hYmxlZChw
bGF0Zm9ybU1vdXNlRXZlbnQpOwogICAgIGlmIChkZWZhdWx0UHJldmVudGVkKQpAQCAtMTgzNywx
MCArMTg0MiwxMyBAQCBib29sIEV2ZW50SGFuZGxlcjo6bW91c2VNb3ZlZChjb25zdCBQbGF0Zm9y
bU1vdXNlRXZlbnQmIGV2ZW50KQogICAgIFJlZlB0cjxGcmFtZVZpZXc+IHByb3RlY3RvcihtX2Zy
YW1lLnZpZXcoKSk7CiAgICAgTWF4aW11bUR1cmF0aW9uVHJhY2tlciBtYXhEdXJhdGlvblRyYWNr
ZXIoJm1fbWF4TW91c2VNb3ZlZER1cmF0aW9uKTsKIAorICAgIFBhZ2UqIHBhZ2UgPSBtX2ZyYW1l
LnBhZ2UoKTsKKyAgICBpZiAocGFnZSAmJiBwYWdlLT5wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKS5o
YW5kbGVNb3VzZUV2ZW50KGV2ZW50KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKICAgICBIaXRU
ZXN0UmVzdWx0IGhvdmVyZWROb2RlID0gSGl0VGVzdFJlc3VsdChMYXlvdXRQb2ludCgpKTsKICAg
ICBib29sIHJlc3VsdCA9IGhhbmRsZU1vdXNlTW92ZUV2ZW50KGV2ZW50LCAmaG92ZXJlZE5vZGUp
OwogCi0gICAgUGFnZSogcGFnZSA9IG1fZnJhbWUucGFnZSgpOwogICAgIGlmICghcGFnZSkKICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKIApAQCAtMjAyMCw2ICsyMDI4LDEwIEBAIGJvb2wgRXZlbnRI
YW5kbGVyOjpoYW5kbGVNb3VzZVJlbGVhc2VFdmVudChjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQm
IHBsYXRmb3JtTW91CiAKICAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLnNldENhcmV0QmxpbmtpbmdT
dXNwZW5kZWQoZmFsc2UpOwogCisgICAgUGFnZSogcGFnZSA9IG1fZnJhbWUucGFnZSgpOworICAg
IGlmIChwYWdlICYmIHBhZ2UtPnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLmhhbmRsZU1vdXNlRXZl
bnQocGxhdGZvcm1Nb3VzZUV2ZW50KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKICNpZiBFTkFC
TEUoVE9VQ0hfRVZFTlRTKQogICAgIGJvb2wgZGVmYXVsdFByZXZlbnRlZCA9IGRpc3BhdGNoU3lu
dGhldGljVG91Y2hFdmVudElmRW5hYmxlZChwbGF0Zm9ybU1vdXNlRXZlbnQpOwogICAgIGlmIChk
ZWZhdWx0UHJldmVudGVkKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZp
ZXcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCmluZGV4IGRmNmZlZTQu
LjUwOWY1NDFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCkBAIC02MCw2ICs2MCw3IEBA
CiAjaW5jbHVkZSAiTWVtb3J5Q2FjaGUuaCIKICNpbmNsdWRlICJNZW1vcnlQcmVzc3VyZUhhbmRs
ZXIuaCIKICNpbmNsdWRlICJPdmVyZmxvd0V2ZW50LmgiCisjaW5jbHVkZSAiUGFnZU92ZXJsYXlD
b250cm9sbGVyLmgiCiAjaW5jbHVkZSAiUHJvZ3Jlc3NUcmFja2VyLmgiCiAjaW5jbHVkZSAiUmVu
ZGVyRW1iZWRkZWRPYmplY3QuaCIKICNpbmNsdWRlICJSZW5kZXJGdWxsU2NyZWVuLmgiCkBAIC00
MzAsMTAgKzQzMSwxMSBAQCB2b2lkIEZyYW1lVmlldzo6c2V0RnJhbWVSZWN0KGNvbnN0IEludFJl
Y3QmIG5ld1JlY3QpCiAgICAgaWYgKG5ld1JlY3QgPT0gb2xkUmVjdCkKICAgICAgICAgcmV0dXJu
OwogCisgICAgUGFnZSogcGFnZSA9IGZyYW1lKCkucGFnZSgpOworCiAjaWYgRU5BQkxFKFRFWFRf
QVVUT1NJWklORykKICAgICAvLyBBdXRvc2l6ZWQgZm9udCBzaXplcyBkZXBlbmQgb24gdGhlIHdp
ZHRoIG9mIHRoZSB2aWV3aW5nIGFyZWEuCiAgICAgaWYgKG5ld1JlY3Qud2lkdGgoKSAhPSBvbGRS
ZWN0LndpZHRoKCkpIHsKLSAgICAgICAgUGFnZSogcGFnZSA9IGZyYW1lKCkucGFnZSgpOwogICAg
ICAgICBpZiAoZnJhbWUoKS5pc01haW5GcmFtZSgpICYmIHBhZ2UtPnNldHRpbmdzKCkudGV4dEF1
dG9zaXppbmdFbmFibGVkKCkpIHsKICAgICAgICAgICAgIGZvciAoRnJhbWUqIGZyYW1lID0gJnBh
Z2UtPm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4
dCgpKQogICAgICAgICAgICAgICAgIGZyYW1lKCkuZG9jdW1lbnQoKS0+dGV4dEF1dG9zaXplcigp
LT5yZWNhbGN1bGF0ZU11bHRpcGxpZXJzKCk7CkBAIC00NDksNiArNDUxLDkgQEAgdm9pZCBGcmFt
ZVZpZXc6OnNldEZyYW1lUmVjdChjb25zdCBJbnRSZWN0JiBuZXdSZWN0KQogICAgICAgICBpZiAo
cmVuZGVyVmlldy0+dXNlc0NvbXBvc2l0aW5nKCkpCiAgICAgICAgICAgICByZW5kZXJWaWV3LT5j
b21wb3NpdG9yKCkuZnJhbWVWaWV3RGlkQ2hhbmdlU2l6ZSgpOwogICAgIH0KKworICAgIGlmIChm
cmFtZSgpLmlzTWFpbkZyYW1lKCkpCisgICAgICAgIHBhZ2UtPnBhZ2VPdmVybGF5Q29udHJvbGxl
cigpLmRpZENoYW5nZVZpZXdTaXplKCk7CiB9CiAKICNpZiBFTkFCTEUoUkVRVUVTVF9BTklNQVRJ
T05fRlJBTUUpCkBAIC01NjIsNiArNTY3LDkgQEAgdm9pZCBGcmFtZVZpZXc6OnNldENvbnRlbnRz
U2l6ZShjb25zdCBJbnRTaXplJiBzaXplKQogCiAgICAgcGFnZS0+Y2hyb21lKCkuY29udGVudHNT
aXplQ2hhbmdlZCgmZnJhbWUoKSwgc2l6ZSk7IC8vIE5vdGlmeSBvbmx5LgogCisgICAgaWYgKGZy
YW1lKCkuaXNNYWluRnJhbWUoKSkKKyAgICAgICAgcGFnZS0+cGFnZU92ZXJsYXlDb250cm9sbGVy
KCkuZGlkQ2hhbmdlRG9jdW1lbnRTaXplKCk7CisKICAgICBBU1NFUlQobV9kZWZlclNldE5lZWRz
TGF5b3V0cyk7CiAgICAgbV9kZWZlclNldE5lZWRzTGF5b3V0cy0tOwogICAgIApAQCAtMjA0OCw3
ICsyMDU2LDcgQEAgdm9pZCBGcmFtZVZpZXc6OnNldEZpeGVkVmlzaWJsZUNvbnRlbnRSZWN0KGNv
bnN0IEludFJlY3QmIHZpc2libGVDb250ZW50UmVjdCkKICAgICAgICAgLy8gVXBkYXRlIHRoZSBz
Y3JvbGwtYmFycyB0byBjYWxjdWxhdGUgbmV3IHBhZ2Utc3RlcCBzaXplLgogICAgICAgICB1cGRh
dGVTY3JvbGxiYXJzKHNjcm9sbE9mZnNldCgpKTsKICAgICB9Ci0gICAgZnJhbWUoKS5sb2FkZXIo
KS5jbGllbnQoKS5kaWRDaGFuZ2VTY3JvbGxPZmZzZXQoKTsKKyAgICBkaWRDaGFuZ2VTY3JvbGxP
ZmZzZXQoKTsKIH0KICNlbmRpZgogCkBAIC0yMDYxLDYgKzIwNjksMTQgQEAgdm9pZCBGcmFtZVZp
ZXc6OnNldFZpZXdwb3J0Q29uc3RyYWluZWRPYmplY3RzTmVlZExheW91dCgpCiAgICAgICAgIHJl
bmRlcmVyLT5zZXROZWVkc0xheW91dCgpOwogfQogCit2b2lkIEZyYW1lVmlldzo6ZGlkQ2hhbmdl
U2Nyb2xsT2Zmc2V0KCkKK3sKKyAgICBpZiAoUGFnZSogcGFnZSA9IGZyYW1lKCkucGFnZSgpKQor
ICAgICAgICBwYWdlLT5wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKS5kaWRTY3JvbGxGcmFtZShmcmFt
ZSgpKTsKKworICAgIGZyYW1lKCkubG9hZGVyKCkuY2xpZW50KCkuZGlkQ2hhbmdlU2Nyb2xsT2Zm
c2V0KCk7Cit9CisKIHZvaWQgRnJhbWVWaWV3OjpzY3JvbGxQb3NpdGlvbkNoYW5nZWRWaWFQbGF0
Zm9ybVdpZGdldChjb25zdCBJbnRQb2ludCYgb2xkUG9zaXRpb24sIGNvbnN0IEludFBvaW50JiBu
ZXdQb3NpdGlvbikKIHsKICAgICB1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyU2Nyb2xsaW5nKCk7
CkBAIC0zMjIzLDcgKzMyMzksNyBAQCB2b2lkIEZyYW1lVmlldzo6c2Nyb2xsVG8oY29uc3QgSW50
U2l6ZSYgbmV3T2Zmc2V0KQogICAgIFNjcm9sbFZpZXc6OnNjcm9sbFRvKG5ld09mZnNldCk7CiAg
ICAgaWYgKG9mZnNldCAhPSBzY3JvbGxPZmZzZXQoKSkKICAgICAgICAgc2Nyb2xsUG9zaXRpb25D
aGFuZ2VkKG9sZFBvc2l0aW9uLCBzY3JvbGxQb3NpdGlvbigpKTsKLSAgICBmcmFtZSgpLmxvYWRl
cigpLmNsaWVudCgpLmRpZENoYW5nZVNjcm9sbE9mZnNldCgpOworICAgIGRpZENoYW5nZVNjcm9s
bE9mZnNldCgpOwogfQogCiBmbG9hdCBGcmFtZVZpZXc6OmFkanVzdFNjcm9sbFN0ZXBGb3JGaXhl
ZENvbnRlbnQoZmxvYXQgc3RlcCwgU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24sIFNj
cm9sbEdyYW51bGFyaXR5IGdyYW51bGFyaXR5KQpAQCAtNDI5Miw3ICs0MzA4LDcgQEAgYm9vbCBG
cmFtZVZpZXc6OndoZWVsRXZlbnQoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JiB3aGVlbEV2ZW50
KQogICAgICAgICBpZiAob2Zmc2V0ICE9IG5ld09mZnNldCkgewogICAgICAgICAgICAgU2Nyb2xs
Vmlldzo6c2Nyb2xsVG8obmV3T2Zmc2V0KTsKICAgICAgICAgICAgIHNjcm9sbFBvc2l0aW9uQ2hh
bmdlZChvbGRQb3NpdGlvbiwgc2Nyb2xsUG9zaXRpb24oKSk7Ci0gICAgICAgICAgICBmcmFtZSgp
LmxvYWRlcigpLmNsaWVudCgpLmRpZENoYW5nZVNjcm9sbE9mZnNldCgpOworICAgICAgICAgICAg
ZGlkQ2hhbmdlU2Nyb2xsT2Zmc2V0KCk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgfQpAQCAtNDYxNSw2ICs0NjMxLDkgQEAgdm9pZCBGcmFtZVZpZXc6OnNldEV4cG9zZWRS
ZWN0KEZsb2F0UmVjdCBleHBvc2VkUmVjdCkKIAogICAgIGlmIChhdXRvKiB2aWV3ID0gcmVuZGVy
VmlldygpKQogICAgICAgICB2aWV3LT5jb21wb3NpdG9yKCkuc2NoZWR1bGVMYXllckZsdXNoKGZh
bHNlIC8qIGNhblRocm90dGxlICovKTsKKworICAgIGlmIChhdXRvKiBwYWdlID0gZnJhbWUoKS5w
YWdlKCkpCisgICAgICAgIHBhZ2UtPnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLmRpZENoYW5nZUV4
cG9zZWRSZWN0KCk7CiB9CiAgICAgCiB2b2lkIEZyYW1lVmlldzo6c2V0Vmlld3BvcnRTaXplRm9y
Q1NTVmlld3BvcnRVbml0cyhJbnRTaXplIHNpemUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL0ZyYW1lVmlldy5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuaAppbmRl
eCAzNzU2OTZhLi45MmFhOWI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1l
Vmlldy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmgKQEAgLTUxMSw2ICs1
MTEsOCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIGZsb2F0IGFkanVzdFNjcm9sbFN0ZXBGb3JG
aXhlZENvbnRlbnQoZmxvYXQgc3RlcCwgU2Nyb2xsYmFyT3JpZW50YXRpb24sIFNjcm9sbEdyYW51
bGFyaXR5KSBvdmVycmlkZTsKIAorICAgIHZvaWQgZGlkQ2hhbmdlU2Nyb2xsT2Zmc2V0KCk7CisK
IHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIGJvb2wgc2Nyb2xsQ29udGVudHNGYXN0UGF0aChjb25z
dCBJbnRTaXplJiBzY3JvbGxEZWx0YSwgY29uc3QgSW50UmVjdCYgcmVjdFRvU2Nyb2xsLCBjb25z
dCBJbnRSZWN0JiBjbGlwUmVjdCkgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIHNjcm9sbENv
bnRlbnRzU2xvd1BhdGgoY29uc3QgSW50UmVjdCYgdXBkYXRlUmVjdCkgb3ZlcnJpZGU7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9QYWdlLmNwcAppbmRleCAyNmI4ZDE3Li41MzhkZmQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL1BhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAKQEAg
LTYwLDYgKzYwLDcgQEAKICNpbmNsdWRlICJQYWdlQ29uc29sZUNsaWVudC5oIgogI2luY2x1ZGUg
IlBhZ2VEZWJ1Z2dhYmxlLmgiCiAjaW5jbHVkZSAiUGFnZUdyb3VwLmgiCisjaW5jbHVkZSAiUGFn
ZU92ZXJsYXlDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiUGFnZVRocm90dGxlci5oIgogI2luY2x1
ZGUgIlBsdWdJbkNsaWVudC5oIgogI2luY2x1ZGUgIlBsdWdpbkRhdGEuaCIKQEAgLTIwMyw2ICsy
MDQsNyBAQCBQYWdlOjpQYWdlKFBhZ2VDbGllbnRzJiBwYWdlQ2xpZW50cykKICAgICAsIG1fdmlz
aXRlZExpbmtTdG9yZShXVEY6Om1vdmUocGFnZUNsaWVudHMudmlzaXRlZExpbmtTdG9yZSkpCiAg
ICAgLCBtX3Nlc3Npb25JRChTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSkKICAgICAsIG1f
aXNDbG9zaW5nKGZhbHNlKQorICAgICwgbV9wYWdlT3ZlcmxheUNvbnRyb2xsZXIoc3RkOjptYWtl
X3VuaXF1ZTxQYWdlT3ZlcmxheUNvbnRyb2xsZXI+KCp0aGlzKSkKIHsKICAgICBBU1NFUlQobV9l
ZGl0b3JDbGllbnQpOwogICAgIApAQCAtODExLDYgKzgxMyw4IEBAIHZvaWQgUGFnZTo6c2V0RGV2
aWNlU2NhbGVGYWN0b3IoZmxvYXQgc2NhbGVGYWN0b3IpCiAKICAgICBwYWdlQ2FjaGUoKS0+bWFy
a1BhZ2VzRm9yRnVsbFN0eWxlUmVjYWxjKHRoaXMpOwogICAgIEdyYXBoaWNzQ29udGV4dDo6dXBk
YXRlRG9jdW1lbnRNYXJrZXJSZXNvdXJjZXMoKTsKKworICAgIG1fcGFnZU92ZXJsYXlDb250cm9s
bGVyLT5kaWRDaGFuZ2VEZXZpY2VTY2FsZUZhY3RvcigpOwogfQogCiB2b2lkIFBhZ2U6OnNldFRv
cENvbnRlbnRJbnNldChmbG9hdCBjb250ZW50SW5zZXQpCkBAIC0xNjE4LDcgKzE2MjIsNiBAQCB2
b2lkIFBhZ2U6OnNldFNlc3Npb25JRChTZXNzaW9uSUQgc2Vzc2lvbklEKQogCiAgICAgZm9yIChh
dXRvJiB2aWV3IDogcGx1Z2luVmlld3MoKSkKICAgICAgICAgdmlldy0+cHJpdmF0ZUJyb3dzaW5n
U3RhdGVDaGFuZ2VkKHNlc3Npb25JRC5pc0VwaGVtZXJhbCgpKTsKLQogfQogCiBQYWdlOjpQYWdl
Q2xpZW50czo6UGFnZUNsaWVudHMoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9Q
YWdlLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuaAppbmRleCA4NmYyYWZkLi42OTcwMGY2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL1BhZ2UuaApAQCAtODQsNiArODQsNyBAQCBjbGFzcyBQYWdlQWN0aXZpdHlBc3Nl
cnRpb25Ub2tlbjsKIGNsYXNzIFBhZ2VDb25zb2xlQ2xpZW50OwogY2xhc3MgUGFnZURlYnVnZ2Fi
bGU7CiBjbGFzcyBQYWdlR3JvdXA7CitjbGFzcyBQYWdlT3ZlcmxheUNvbnRyb2xsZXI7CiBjbGFz
cyBQYWdlVGhyb3R0bGVyOwogY2xhc3MgUGx1Z0luQ2xpZW50OwogY2xhc3MgUGx1Z2luRGF0YTsK
QEAgLTE2OCw2ICsxNjksOCBAQCBwdWJsaWM6CiAgICAgTWFpbkZyYW1lJiBtYWluRnJhbWUoKSB7
IEFTU0VSVChtX21haW5GcmFtZSk7IHJldHVybiAqbV9tYWluRnJhbWU7IH0KICAgICBjb25zdCBN
YWluRnJhbWUmIG1haW5GcmFtZSgpIGNvbnN0IHsgQVNTRVJUKG1fbWFpbkZyYW1lKTsgcmV0dXJu
ICptX21haW5GcmFtZTsgfQogCisgICAgUGFnZU92ZXJsYXlDb250cm9sbGVyJiBwYWdlT3Zlcmxh
eUNvbnRyb2xsZXIoKSB7IHJldHVybiAqbV9wYWdlT3ZlcmxheUNvbnRyb2xsZXI7IH0KKwogICAg
IGJvb2wgb3BlbmVkQnlET00oKSBjb25zdDsKICAgICB2b2lkIHNldE9wZW5lZEJ5RE9NKCk7CiAK
QEAgLTU5MSw2ICs1OTQsOCBAQCBwcml2YXRlOgogICAgIFNlc3Npb25JRCBtX3Nlc3Npb25JRDsK
IAogICAgIGJvb2wgbV9pc0Nsb3Npbmc7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8UGFnZU92ZXJs
YXlDb250cm9sbGVyPiBtX3BhZ2VPdmVybGF5Q29udHJvbGxlcjsKIH07CiAKIGlubGluZSBQYWdl
R3JvdXAmIFBhZ2U6Omdyb3VwKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFn
ZU92ZXJsYXkuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlT3ZlcmxheS5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzBjYTcxMQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZU92ZXJsYXkuY3BwCkBAIC0wLDAgKzEsMjU3IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBhZ2VPdmVybGF5Lmgi
CisKKyNpbmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIK
KyNpbmNsdWRlICJNYWluRnJhbWUuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiUGFn
ZU92ZXJsYXlDb250cm9sbGVyLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1Nb3VzZUV2ZW50LmgiCisj
aW5jbHVkZSAiU2Nyb2xsYmFyVGhlbWUuaCIKKyNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgY29uc3QgZG91YmxlIGZhZGVBbmltYXRp
b25EdXJhdGlvbiA9IDAuMjsKK3N0YXRpYyBjb25zdCBkb3VibGUgZmFkZUFuaW1hdGlvbkZyYW1l
UmF0ZSA9IDMwOworCitQYXNzUmVmUHRyPFBhZ2VPdmVybGF5PiBQYWdlT3ZlcmxheTo6Y3JlYXRl
KENsaWVudCogY2xpZW50LCBPdmVybGF5VHlwZSBvdmVybGF5VHlwZSkKK3sKKyAgICByZXR1cm4g
YWRvcHRSZWYobmV3IFBhZ2VPdmVybGF5KGNsaWVudCwgb3ZlcmxheVR5cGUpKTsKK30KKworUGFn
ZU92ZXJsYXk6OlBhZ2VPdmVybGF5KENsaWVudCogY2xpZW50LCBPdmVybGF5VHlwZSBvdmVybGF5
VHlwZSkKKyAgICA6IG1fY2xpZW50KGNsaWVudCkKKyAgICAsIG1fcGFnZShudWxscHRyKQorICAg
ICwgbV9mYWRlQW5pbWF0aW9uVGltZXIoUnVuTG9vcDo6bWFpbigpLCB0aGlzLCAmUGFnZU92ZXJs
YXk6OmZhZGVBbmltYXRpb25UaW1lckZpcmVkKQorICAgICwgbV9mYWRlQW5pbWF0aW9uU3RhcnRU
aW1lKDApCisgICAgLCBtX2ZhZGVBbmltYXRpb25EdXJhdGlvbihmYWRlQW5pbWF0aW9uRHVyYXRp
b24pCisgICAgLCBtX2ZhZGVBbmltYXRpb25UeXBlKE5vQW5pbWF0aW9uKQorICAgICwgbV9mcmFj
dGlvbkZhZGVkSW4oMSkKKyAgICAsIG1fb3ZlcmxheVR5cGUob3ZlcmxheVR5cGUpCisgICAgLCBt
X2JhY2tncm91bmRDb2xvcihDb2xvcjo6dHJhbnNwYXJlbnQpCit7Cit9CisKK1BhZ2VPdmVybGF5
Ojp+UGFnZU92ZXJsYXkoKQoreworfQorCitJbnRSZWN0IFBhZ2VPdmVybGF5Ojpib3VuZHMoKSBj
b25zdAoreworICAgIGlmICghbV9vdmVycmlkZUZyYW1lLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0
dXJuIEludFJlY3QoSW50UG9pbnQoKSwgbV9vdmVycmlkZUZyYW1lLnNpemUoKSk7CisKKyAgICBG
cmFtZVZpZXcqIGZyYW1lVmlldyA9IG1fcGFnZS0+bWFpbkZyYW1lKCkudmlldygpOworCisgICAg
aWYgKCFmcmFtZVZpZXcpCisgICAgICAgIHJldHVybiBJbnRSZWN0KCk7CisKKyAgICBzd2l0Y2gg
KG1fb3ZlcmxheVR5cGUpIHsKKyAgICBjYXNlIE92ZXJsYXlUeXBlOjpWaWV3OiB7CisgICAgICAg
IGludCB3aWR0aCA9IGZyYW1lVmlldy0+d2lkdGgoKTsKKyAgICAgICAgaW50IGhlaWdodCA9IGZy
YW1lVmlldy0+aGVpZ2h0KCk7CisKKyAgICAgICAgaWYgKCFTY3JvbGxiYXJUaGVtZTo6dGhlbWUo
KS0+dXNlc092ZXJsYXlTY3JvbGxiYXJzKCkpIHsKKyAgICAgICAgICAgIGlmIChmcmFtZVZpZXct
PnZlcnRpY2FsU2Nyb2xsYmFyKCkpCisgICAgICAgICAgICAgICAgd2lkdGggLT0gZnJhbWVWaWV3
LT52ZXJ0aWNhbFNjcm9sbGJhcigpLT53aWR0aCgpOworICAgICAgICAgICAgaWYgKGZyYW1lVmll
dy0+aG9yaXpvbnRhbFNjcm9sbGJhcigpKQorICAgICAgICAgICAgICAgIGhlaWdodCAtPSBmcmFt
ZVZpZXctPmhvcml6b250YWxTY3JvbGxiYXIoKS0+aGVpZ2h0KCk7CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIEludFJlY3QoMCwgMCwgd2lkdGgsIGhlaWdodCk7CisgICAgfQorICAgIGNhc2Ug
T3ZlcmxheVR5cGU6OkRvY3VtZW50OgorICAgICAgICByZXR1cm4gSW50UmVjdChJbnRQb2ludCgp
LCBmcmFtZVZpZXctPmNvbnRlbnRzU2l6ZSgpKTsKKyAgICB9OworCisgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgcmV0dXJuIEludFJlY3QoSW50UG9pbnQoKSwgZnJhbWVWaWV3LT5jb250
ZW50c1NpemUoKSk7Cit9CisKK0ludFJlY3QgUGFnZU92ZXJsYXk6OmZyYW1lKCkgY29uc3QKK3sK
KyAgICBpZiAoIW1fb3ZlcnJpZGVGcmFtZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBtX292
ZXJyaWRlRnJhbWU7CisKKyAgICByZXR1cm4gYm91bmRzKCk7Cit9CisKK3ZvaWQgUGFnZU92ZXJs
YXk6OnNldEZyYW1lKEludFJlY3QgZnJhbWUpCit7CisgICAgaWYgKG1fb3ZlcnJpZGVGcmFtZSA9
PSBmcmFtZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9vdmVycmlkZUZyYW1lID0gZnJhbWU7
CisKKyAgICBpZiAobV9wYWdlKQorICAgICAgICBtX3BhZ2UtPnBhZ2VPdmVybGF5Q29udHJvbGxl
cigpLmRpZENoYW5nZU92ZXJsYXlGcmFtZSgqdGhpcyk7Cit9CisKK3ZvaWQgUGFnZU92ZXJsYXk6
OnNldEJhY2tncm91bmRDb2xvcihSR0JBMzIgYmFja2dyb3VuZENvbG9yKQoreworICAgIGlmICht
X2JhY2tncm91bmRDb2xvciA9PSBiYWNrZ3JvdW5kQ29sb3IpCisgICAgICAgIHJldHVybjsKKwor
ICAgIG1fYmFja2dyb3VuZENvbG9yID0gYmFja2dyb3VuZENvbG9yOworCisgICAgaWYgKG1fcGFn
ZSkKKyAgICAgICAgbV9wYWdlLT5wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKS5kaWRDaGFuZ2VPdmVy
bGF5QmFja2dyb3VuZENvbG9yKCp0aGlzKTsKK30KKwordm9pZCBQYWdlT3ZlcmxheTo6c2V0UGFn
ZShQYWdlKiBwYWdlKQoreworICAgIG1fY2xpZW50LT53aWxsTW92ZVRvUGFnZSh0aGlzLCBwYWdl
KTsKKyAgICBtX3BhZ2UgPSBwYWdlOworICAgIG1fY2xpZW50LT5kaWRNb3ZlVG9QYWdlKHRoaXMs
IHBhZ2UpOworCisgICAgbV9mYWRlQW5pbWF0aW9uVGltZXIuc3RvcCgpOworfQorCit2b2lkIFBh
Z2VPdmVybGF5OjpzZXROZWVkc0Rpc3BsYXkoY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KQorewor
ICAgIGlmICghbV9wYWdlKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3BhZ2UtPnBhZ2VPdmVy
bGF5Q29udHJvbGxlcigpLnNldFBhZ2VPdmVybGF5T3BhY2l0eSgqdGhpcywgbV9mcmFjdGlvbkZh
ZGVkSW4pOworICAgIG1fcGFnZS0+cGFnZU92ZXJsYXlDb250cm9sbGVyKCkuc2V0UGFnZU92ZXJs
YXlOZWVkc0Rpc3BsYXkoKnRoaXMsIGRpcnR5UmVjdCk7Cit9CisKK3ZvaWQgUGFnZU92ZXJsYXk6
OnNldE5lZWRzRGlzcGxheSgpCit7CisgICAgc2V0TmVlZHNEaXNwbGF5KGJvdW5kcygpKTsKK30K
Kwordm9pZCBQYWdlT3ZlcmxheTo6ZHJhd1JlY3QoR3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0Nv
bnRleHQsIGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCkKK3sKKyAgICAvLyBJZiB0aGUgZGlydHkg
cmVjdCBpcyBvdXRzaWRlIHRoZSBib3VuZHMsIGlnbm9yZSBpdC4KKyAgICBJbnRSZWN0IHBhaW50
UmVjdCA9IGludGVyc2VjdGlvbihkaXJ0eVJlY3QsIGJvdW5kcygpKTsKKyAgICBpZiAocGFpbnRS
ZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgR3JhcGhpY3NDb250ZXh0U3Rh
dGVTYXZlciBzdGF0ZVNhdmVyKGdyYXBoaWNzQ29udGV4dCk7CisgICAgbV9jbGllbnQtPmRyYXdS
ZWN0KHRoaXMsIGdyYXBoaWNzQ29udGV4dCwgcGFpbnRSZWN0KTsKK30KKyAgICAKK2Jvb2wgUGFn
ZU92ZXJsYXk6Om1vdXNlRXZlbnQoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBtb3VzZUV2ZW50
KQoreworICAgIEludFBvaW50IG1vdXNlUG9zaXRpb25Jbk92ZXJsYXlDb29yZGluYXRlcyhtb3Vz
ZUV2ZW50LnBvc2l0aW9uKCkpOworCisgICAgaWYgKG1fb3ZlcmxheVR5cGUgPT0gUGFnZU92ZXJs
YXk6Ok92ZXJsYXlUeXBlOjpEb2N1bWVudCkKKyAgICAgICAgbW91c2VQb3NpdGlvbkluT3Zlcmxh
eUNvb3JkaW5hdGVzID0gbV9wYWdlLT5tYWluRnJhbWUoKS52aWV3KCktPnJvb3RWaWV3VG9Db250
ZW50cyhtb3VzZVBvc2l0aW9uSW5PdmVybGF5Q29vcmRpbmF0ZXMpOworCisgICAgLy8gSWdub3Jl
IGV2ZW50cyBvdXRzaWRlIHRoZSBib3VuZHMuCisgICAgaWYgKCFib3VuZHMoKS5jb250YWlucyht
b3VzZVBvc2l0aW9uSW5PdmVybGF5Q29vcmRpbmF0ZXMpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICByZXR1cm4gbV9jbGllbnQtPm1vdXNlRXZlbnQodGhpcywgbW91c2VFdmVudCk7Cit9
CisKK3ZvaWQgUGFnZU92ZXJsYXk6OmRpZFNjcm9sbEZyYW1lKEZyYW1lJiBmcmFtZSkKK3sKKyAg
ICBtX2NsaWVudC0+ZGlkU2Nyb2xsRnJhbWUodGhpcywgZnJhbWUpOworfQorCitib29sIFBhZ2VP
dmVybGF5Ojpjb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVN0cmluZ1ZhbHVlRm9yUG9pbnQoU3Ry
aW5nIGF0dHJpYnV0ZSwgRmxvYXRQb2ludCBwYXJhbWV0ZXIsIFN0cmluZyYgdmFsdWUpCit7Cisg
ICAgcmV0dXJuIG1fY2xpZW50LT5jb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVN0cmluZ1ZhbHVl
Rm9yUG9pbnQodGhpcywgYXR0cmlidXRlLCBwYXJhbWV0ZXIsIHZhbHVlKTsKK30KKworYm9vbCBQ
YWdlT3ZlcmxheTo6Y29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVCb29sVmFsdWVGb3JQb2ludChT
dHJpbmcgYXR0cmlidXRlLCBGbG9hdFBvaW50IHBhcmFtZXRlciwgYm9vbCYgdmFsdWUpCit7Cisg
ICAgcmV0dXJuIG1fY2xpZW50LT5jb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZUJvb2xWYWx1ZUZv
clBvaW50KHRoaXMsIGF0dHJpYnV0ZSwgcGFyYW1ldGVyLCB2YWx1ZSk7Cit9CisKK1ZlY3RvcjxT
dHJpbmc+IFBhZ2VPdmVybGF5Ojpjb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZU5hbWVzKGJvb2wg
cGFyYW1ldGVyaXplZE5hbWVzKQoreworICAgIHJldHVybiBtX2NsaWVudC0+Y29weUFjY2Vzc2li
aWxpdHlBdHRyaWJ1dGVOYW1lcyh0aGlzLCBwYXJhbWV0ZXJpemVkTmFtZXMpOworfQorCit2b2lk
IFBhZ2VPdmVybGF5OjpzdGFydEZhZGVJbkFuaW1hdGlvbigpCit7CisgICAgbV9mcmFjdGlvbkZh
ZGVkSW4gPSAwOworICAgIG1fZmFkZUFuaW1hdGlvblR5cGUgPSBGYWRlSW5BbmltYXRpb247CisK
KyAgICBzdGFydEZhZGVBbmltYXRpb24oKTsKK30KKwordm9pZCBQYWdlT3ZlcmxheTo6c3RhcnRG
YWRlT3V0QW5pbWF0aW9uKCkKK3sKKyAgICBtX2ZyYWN0aW9uRmFkZWRJbiA9IDE7CisgICAgbV9m
YWRlQW5pbWF0aW9uVHlwZSA9IEZhZGVPdXRBbmltYXRpb247CisKKyAgICBzdGFydEZhZGVBbmlt
YXRpb24oKTsKK30KKwordm9pZCBQYWdlT3ZlcmxheTo6c3RvcEZhZGVPdXRBbmltYXRpb24oKQor
eworICAgIG1fZnJhY3Rpb25GYWRlZEluID0gMS4wOworICAgIG1fZmFkZUFuaW1hdGlvblRpbWVy
LnN0b3AoKTsKK30KKwordm9pZCBQYWdlT3ZlcmxheTo6c3RhcnRGYWRlQW5pbWF0aW9uKCkKK3sK
KyAgICBtX2ZhZGVBbmltYXRpb25TdGFydFRpbWUgPSBjdXJyZW50VGltZSgpOworICAgIG1fZmFk
ZUFuaW1hdGlvblRpbWVyLnN0YXJ0UmVwZWF0aW5nKDEgLyBmYWRlQW5pbWF0aW9uRnJhbWVSYXRl
KTsKK30KKwordm9pZCBQYWdlT3ZlcmxheTo6ZmFkZUFuaW1hdGlvblRpbWVyRmlyZWQoKQorewor
ICAgIGZsb2F0IGFuaW1hdGlvblByb2dyZXNzID0gKGN1cnJlbnRUaW1lKCkgLSBtX2ZhZGVBbmlt
YXRpb25TdGFydFRpbWUpIC8gbV9mYWRlQW5pbWF0aW9uRHVyYXRpb247CisKKyAgICBpZiAoYW5p
bWF0aW9uUHJvZ3Jlc3MgPj0gMS4wKQorICAgICAgICBhbmltYXRpb25Qcm9ncmVzcyA9IDEuMDsK
KworICAgIGRvdWJsZSBzaW5lID0gc2luKHBpT3ZlclR3b0Zsb2F0ICogYW5pbWF0aW9uUHJvZ3Jl
c3MpOworICAgIGZsb2F0IGZhZGVBbmltYXRpb25WYWx1ZSA9IHNpbmUgKiBzaW5lOworCisgICAg
bV9mcmFjdGlvbkZhZGVkSW4gPSAobV9mYWRlQW5pbWF0aW9uVHlwZSA9PSBGYWRlSW5BbmltYXRp
b24pID8gZmFkZUFuaW1hdGlvblZhbHVlIDogMSAtIGZhZGVBbmltYXRpb25WYWx1ZTsKKyAgICBt
X3BhZ2UtPnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLnNldFBhZ2VPdmVybGF5T3BhY2l0eSgqdGhp
cywgbV9mcmFjdGlvbkZhZGVkSW4pOworCisgICAgaWYgKGFuaW1hdGlvblByb2dyZXNzID09IDEu
MCkgeworICAgICAgICBtX2ZhZGVBbmltYXRpb25UaW1lci5zdG9wKCk7CisKKyAgICAgICAgYm9v
bCB3YXNGYWRpbmdPdXQgPSBtX2ZhZGVBbmltYXRpb25UeXBlID09IEZhZGVPdXRBbmltYXRpb247
CisgICAgICAgIG1fZmFkZUFuaW1hdGlvblR5cGUgPSBOb0FuaW1hdGlvbjsKKworICAgICAgICAv
LyBJZiB0aGlzIHdhcyBhIGZhZGUgb3V0LCBnbyBhaGVhZCBhbmQgdW5pbnN0YWxsIHRoZSBwYWdl
IG92ZXJsYXkuCisgICAgICAgIGlmICh3YXNGYWRpbmdPdXQpCisgICAgICAgICAgICBtX3BhZ2Ut
PnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLnVuaW5zdGFsbFBhZ2VPdmVybGF5KHRoaXMsIFBhZ2VP
dmVybGF5OjpGYWRlTW9kZTo6RG9Ob3RGYWRlKTsKKyAgICB9Cit9CisKK3ZvaWQgUGFnZU92ZXJs
YXk6OmNsZWFyKCkKK3sKKyAgICBtX3BhZ2UtPnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLmNsZWFy
UGFnZU92ZXJsYXkoKnRoaXMpOworfQorCitHcmFwaGljc0xheWVyKiBQYWdlT3ZlcmxheTo6bGF5
ZXIoKQoreworICAgIHJldHVybiBtX3BhZ2UtPnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLmxheWVy
Rm9yT3ZlcmxheSgqdGhpcyk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlT3ZlcmxheS5oIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9QYWdlT3ZlcmxheS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlYjZm
YjgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VPdmVybGF5LmgK
QEAgLTAsMCArMSwxMzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFBhZ2VPdmVybGF5X2gKKyNk
ZWZpbmUgUGFnZU92ZXJsYXlfaAorCisjaW5jbHVkZSAiQ29sb3IuaCIKKyNpbmNsdWRlICJGbG9h
dFBvaW50LmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRy
Lmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUnVuTG9vcC5o
PgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2NsYXNzIEZyYW1lOworY2xhc3MgR3JhcGhpY3NDb250ZXh0OworY2xhc3MgR3JhcGhpY3NM
YXllcjsKK2NsYXNzIFBhZ2U7CitjbGFzcyBQbGF0Zm9ybU1vdXNlRXZlbnQ7CisKK2NsYXNzIFBh
Z2VPdmVybGF5IDogcHVibGljIFJlZkNvdW50ZWQ8UGFnZU92ZXJsYXk+IHsKKyAgICBXVEZfTUFL
RV9OT05DT1BZQUJMRShQYWdlT3ZlcmxheSk7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CitwdWJsaWM6CisgICAgY2xhc3MgQ2xpZW50IHsKKyAgICBwcm90ZWN0ZWQ6CisgICAgICAgIHZp
cnR1YWwgfkNsaWVudCgpIHsgfQorICAgIAorICAgIHB1YmxpYzoKKyAgICAgICAgdmlydHVhbCB2
b2lkIHBhZ2VPdmVybGF5RGVzdHJveWVkKFBhZ2VPdmVybGF5KikgPSAwOworICAgICAgICB2aXJ0
dWFsIHZvaWQgd2lsbE1vdmVUb1BhZ2UoUGFnZU92ZXJsYXkqLCBQYWdlKikgPSAwOworICAgICAg
ICB2aXJ0dWFsIHZvaWQgZGlkTW92ZVRvUGFnZShQYWdlT3ZlcmxheSosIFBhZ2UqKSA9IDA7Cisg
ICAgICAgIHZpcnR1YWwgdm9pZCBkcmF3UmVjdChQYWdlT3ZlcmxheSosIEdyYXBoaWNzQ29udGV4
dCYsIGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCkgPSAwOworICAgICAgICB2aXJ0dWFsIGJvb2wg
bW91c2VFdmVudChQYWdlT3ZlcmxheSosIGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYpID0gMDsK
KyAgICAgICAgdmlydHVhbCB2b2lkIGRpZFNjcm9sbEZyYW1lKFBhZ2VPdmVybGF5KiwgRnJhbWUm
KSB7IH0KKworICAgICAgICB2aXJ0dWFsIGJvb2wgY29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVT
dHJpbmdWYWx1ZUZvclBvaW50KFBhZ2VPdmVybGF5KiwgU3RyaW5nIC8qIGF0dHJpYnV0ZSAqLywg
RmxvYXRQb2ludCAvKiBwYXJhbWV0ZXIgKi8sIFN0cmluZyYgLyogdmFsdWUgKi8pIHsgcmV0dXJu
IGZhbHNlOyB9CisgICAgICAgIHZpcnR1YWwgYm9vbCBjb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0
ZUJvb2xWYWx1ZUZvclBvaW50KFBhZ2VPdmVybGF5KiwgU3RyaW5nIC8qIGF0dHJpYnV0ZSAqLywg
RmxvYXRQb2ludCAvKiBwYXJhbWV0ZXIgKi8sIGJvb2wmIC8qIHZhbHVlICovKSAgeyByZXR1cm4g
ZmFsc2U7IH0KKyAgICAgICAgdmlydHVhbCBWZWN0b3I8U3RyaW5nPiBjb3B5QWNjZXNzaWJpbGl0
eUF0dHJpYnV0ZU5hbWVzKFBhZ2VPdmVybGF5KiwgYm9vbCAvKiBwYXJhbWV0ZXJpemVkTmFtZXMg
Ki8pICB7IHJldHVybiBWZWN0b3I8U3RyaW5nPigpOyB9CisgICAgfTsKKworICAgIGVudW0gY2xh
c3MgT3ZlcmxheVR5cGUgeworICAgICAgICBWaWV3LCAvLyBGaXhlZCB0byB0aGUgdmlldyBzaXpl
OyBkb2VzIG5vdCBzY2FsZSBvciBzY3JvbGwgd2l0aCB0aGUgZG9jdW1lbnQsIHJlcGFpbnRzIG9u
IHNjcm9sbC4KKyAgICAgICAgRG9jdW1lbnQsIC8vIFNjYWxlcyBhbmQgc2Nyb2xscyB3aXRoIHRo
ZSBkb2N1bWVudC4KKyAgICB9OworCisgICAgc3RhdGljIFBhc3NSZWZQdHI8UGFnZU92ZXJsYXk+
IGNyZWF0ZShDbGllbnQqLCBPdmVybGF5VHlwZSA9IE92ZXJsYXlUeXBlOjpWaWV3KTsKKyAgICB2
aXJ0dWFsIH5QYWdlT3ZlcmxheSgpOworCisgICAgdm9pZCBzZXRQYWdlKFBhZ2UqKTsKKyAgICB2
b2lkIHNldE5lZWRzRGlzcGxheShjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpOworICAgIHZvaWQg
c2V0TmVlZHNEaXNwbGF5KCk7CisKKyAgICB2b2lkIGRyYXdSZWN0KEdyYXBoaWNzQ29udGV4dCYs
IGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCk7CisgICAgYm9vbCBtb3VzZUV2ZW50KGNvbnN0IFBs
YXRmb3JtTW91c2VFdmVudCYpOworICAgIHZvaWQgZGlkU2Nyb2xsRnJhbWUoRnJhbWUmKTsKKwor
ICAgIGJvb2wgY29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVTdHJpbmdWYWx1ZUZvclBvaW50KFN0
cmluZyBhdHRyaWJ1dGUsIEZsb2F0UG9pbnQgcGFyYW1ldGVyLCBTdHJpbmcmIHZhbHVlKTsKKyAg
ICBib29sIGNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlQm9vbFZhbHVlRm9yUG9pbnQoU3RyaW5n
IGF0dHJpYnV0ZSwgRmxvYXRQb2ludCBwYXJhbWV0ZXIsIGJvb2wmIHZhbHVlKTsKKyAgICBWZWN0
b3I8U3RyaW5nPiBjb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZU5hbWVzKGJvb2wgcGFyYW1ldGVy
aXplZE5hbWVzKTsKKyAgICAKKyAgICB2b2lkIHN0YXJ0RmFkZUluQW5pbWF0aW9uKCk7CisgICAg
dm9pZCBzdGFydEZhZGVPdXRBbmltYXRpb24oKTsKKyAgICB2b2lkIHN0b3BGYWRlT3V0QW5pbWF0
aW9uKCk7CisKKyAgICB2b2lkIGNsZWFyKCk7CisKKyAgICBDbGllbnQqIGNsaWVudCgpIGNvbnN0
IHsgcmV0dXJuIG1fY2xpZW50OyB9CisKKyAgICBlbnVtIGNsYXNzIEZhZGVNb2RlIHsgRG9Ob3RG
YWRlLCBGYWRlIH07CisKKyAgICBPdmVybGF5VHlwZSBvdmVybGF5VHlwZSgpIHsgcmV0dXJuIG1f
b3ZlcmxheVR5cGU7IH0KKworICAgIEludFJlY3QgYm91bmRzKCkgY29uc3Q7CisgICAgSW50UmVj
dCBmcmFtZSgpIGNvbnN0OworICAgIHZvaWQgc2V0RnJhbWUoSW50UmVjdCk7CisKKyAgICBSR0JB
MzIgYmFja2dyb3VuZENvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZ3JvdW5kQ29sb3I7IH0K
KyAgICB2b2lkIHNldEJhY2tncm91bmRDb2xvcihSR0JBMzIpOworCisgICAgR3JhcGhpY3NMYXll
ciogbGF5ZXIoKTsKKyAgICAKK3Byb3RlY3RlZDoKKyAgICBleHBsaWNpdCBQYWdlT3ZlcmxheShD
bGllbnQqLCBPdmVybGF5VHlwZSk7CisKK3ByaXZhdGU6CisgICAgdm9pZCBzdGFydEZhZGVBbmlt
YXRpb24oKTsKKyAgICB2b2lkIGZhZGVBbmltYXRpb25UaW1lckZpcmVkKCk7CisKKyAgICBDbGll
bnQqIG1fY2xpZW50OworICAgIFBhZ2UqIG1fcGFnZTsKKworICAgIFJ1bkxvb3A6OlRpbWVyPFBh
Z2VPdmVybGF5PiBtX2ZhZGVBbmltYXRpb25UaW1lcjsKKyAgICBkb3VibGUgbV9mYWRlQW5pbWF0
aW9uU3RhcnRUaW1lOworICAgIGRvdWJsZSBtX2ZhZGVBbmltYXRpb25EdXJhdGlvbjsKKworICAg
IGVudW0gRmFkZUFuaW1hdGlvblR5cGUgeworICAgICAgICBOb0FuaW1hdGlvbiwKKyAgICAgICAg
RmFkZUluQW5pbWF0aW9uLAorICAgICAgICBGYWRlT3V0QW5pbWF0aW9uLAorICAgIH07CisKKyAg
ICBGYWRlQW5pbWF0aW9uVHlwZSBtX2ZhZGVBbmltYXRpb25UeXBlOworICAgIGZsb2F0IG1fZnJh
Y3Rpb25GYWRlZEluOworCisgICAgT3ZlcmxheVR5cGUgbV9vdmVybGF5VHlwZTsKKyAgICBJbnRS
ZWN0IG1fb3ZlcnJpZGVGcmFtZTsKKworICAgIFJHQkEzMiBtX2JhY2tncm91bmRDb2xvcjsKK307
CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gUGFnZU92ZXJsYXlfaApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlT3ZlcmxheUNvbnRyb2xsZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9QYWdlT3ZlcmxheUNvbnRyb2xsZXIuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0NDAzYjMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL1BhZ2VPdmVybGF5Q29udHJvbGxlci5jcHAKQEAgLTAsMCArMSwzNDAg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUGFnZU92ZXJs
YXlDb250cm9sbGVyLmgiCisKKyNpbmNsdWRlICJDaHJvbWUuaCIKKyNpbmNsdWRlICJDaHJvbWVD
bGllbnQuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkZyYW1lVmlldy5oIgorI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKKyNp
bmNsdWRlICJNYWluRnJhbWUuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiUGFnZU92
ZXJsYXkuaCIKKyNpbmNsdWRlICJTY3JvbGxpbmdDb29yZGluYXRvci5oIgorI2luY2x1ZGUgIlNl
dHRpbmdzLmgiCisjaW5jbHVkZSAiVGlsZWRCYWNraW5nLmgiCisKKy8vIEZJWE1FOiBTb21lb25l
IG5lZWRzIHRvIGNhbGwgZGlkQ2hhbmdlU2V0dGluZ3MoKQorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK1BhZ2VPdmVybGF5Q29udHJvbGxlcjo6UGFnZU92ZXJsYXlDb250cm9sbGVyKFBhZ2UmIHBh
Z2UpCisgICAgOiBtX3BhZ2UocGFnZSkKKyAgICAsIG1faW5pdGlhbGl6ZWQoZmFsc2UpCit7Cit9
CisKK3ZvaWQgUGFnZU92ZXJsYXlDb250cm9sbGVyOjpjcmVhdGVSb290TGF5ZXJzSWZOZWVkZWQo
KQoreworICAgIGlmIChtX2luaXRpYWxpemVkKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2lu
aXRpYWxpemVkID0gdHJ1ZTsKKworICAgIEFTU0VSVCghbV9kb2N1bWVudE92ZXJsYXlSb290TGF5
ZXIpOworICAgIEFTU0VSVCghbV92aWV3T3ZlcmxheVJvb3RMYXllcik7CisKKyAgICBtX2RvY3Vt
ZW50T3ZlcmxheVJvb3RMYXllciA9IEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZShtX3BhZ2UuY2hyb21l
KCkuY2xpZW50KCkuZ3JhcGhpY3NMYXllckZhY3RvcnkoKSwgKnRoaXMpOworICAgIG1fdmlld092
ZXJsYXlSb290TGF5ZXIgPSBHcmFwaGljc0xheWVyOjpjcmVhdGUobV9wYWdlLmNocm9tZSgpLmNs
aWVudCgpLmdyYXBoaWNzTGF5ZXJGYWN0b3J5KCksICp0aGlzKTsKKyNpZm5kZWYgTkRFQlVHCisg
ICAgbV9kb2N1bWVudE92ZXJsYXlSb290TGF5ZXItPnNldE5hbWUoIlBhZ2UgT3ZlcmxheSBjb250
YWluZXIgKGRvY3VtZW50LXJlbGF0aXZlKSIpOworICAgIG1fdmlld092ZXJsYXlSb290TGF5ZXIt
PnNldE5hbWUoIlBhZ2UgT3ZlcmxheSBjb250YWluZXIgKHZpZXctcmVsYXRpdmUpIik7CisjZW5k
aWYKK30KKworc3RhdGljIHZvaWQgdXBkYXRlT3ZlcmxheUdlb21ldHJ5KFBhZ2VPdmVybGF5JiBv
dmVybGF5LCBHcmFwaGljc0xheWVyJiBncmFwaGljc0xheWVyKQoreworICAgIEludFJlY3Qgb3Zl
cmxheUZyYW1lID0gb3ZlcmxheS5mcmFtZSgpOworCisgICAgaWYgKG92ZXJsYXlGcmFtZS5sb2Nh
dGlvbigpID09IGdyYXBoaWNzTGF5ZXIucG9zaXRpb24oKSAmJiBvdmVybGF5RnJhbWUuc2l6ZSgp
ID09IGdyYXBoaWNzTGF5ZXIuc2l6ZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBncmFwaGlj
c0xheWVyLnNldFBvc2l0aW9uKG92ZXJsYXlGcmFtZS5sb2NhdGlvbigpKTsKKyAgICBncmFwaGlj
c0xheWVyLnNldFNpemUob3ZlcmxheUZyYW1lLnNpemUoKSk7Cit9CisKK3ZvaWQgUGFnZU92ZXJs
YXlDb250cm9sbGVyOjppbnN0YWxsUGFnZU92ZXJsYXkoUGFzc1JlZlB0cjxQYWdlT3ZlcmxheT4g
cGFnZU92ZXJsYXksIFBhZ2VPdmVybGF5OjpGYWRlTW9kZSBmYWRlTW9kZSkKK3sKKyAgICBjcmVh
dGVSb290TGF5ZXJzSWZOZWVkZWQoKTsKKworICAgIFJlZlB0cjxQYWdlT3ZlcmxheT4gb3Zlcmxh
eSA9IHBhZ2VPdmVybGF5OworCisgICAgaWYgKG1fcGFnZU92ZXJsYXlzLmNvbnRhaW5zKG92ZXJs
YXkpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3BhZ2VPdmVybGF5cy5hcHBlbmQob3Zlcmxh
eSk7CisgICAgb3ZlcmxheS0+c2V0UGFnZSgmbV9wYWdlKTsKKworICAgIGlmIChmYWRlTW9kZSA9
PSBQYWdlT3ZlcmxheTo6RmFkZU1vZGU6OkZhZGUpCisgICAgICAgIG92ZXJsYXktPnN0YXJ0RmFk
ZUluQW5pbWF0aW9uKCk7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NMYXllcj4gbGF5
ZXIgPSBHcmFwaGljc0xheWVyOjpjcmVhdGUobV9wYWdlLmNocm9tZSgpLmNsaWVudCgpLmdyYXBo
aWNzTGF5ZXJGYWN0b3J5KCksICp0aGlzKTsKKyAgICBsYXllci0+c2V0QW5jaG9yUG9pbnQoRmxv
YXRQb2ludDNEKCkpOworICAgIGxheWVyLT5zZXRCYWNrZ3JvdW5kQ29sb3Iob3ZlcmxheS0+YmFj
a2dyb3VuZENvbG9yKCkpOworICAgIHVwZGF0ZU92ZXJsYXlHZW9tZXRyeSgqb3ZlcmxheSwgKmxh
eWVyKTsKKyNpZm5kZWYgTkRFQlVHCisgICAgbGF5ZXItPnNldE5hbWUoIlBhZ2UgT3ZlcmxheSBj
b250ZW50Iik7CisjZW5kaWYKKworICAgIHVwZGF0ZVNldHRpbmdzRm9yTGF5ZXIoKmxheWVyKTsK
KworICAgIHN3aXRjaCAob3ZlcmxheS0+b3ZlcmxheVR5cGUoKSkgeworICAgIGNhc2UgUGFnZU92
ZXJsYXk6Ok92ZXJsYXlUeXBlOjpWaWV3OgorICAgICAgICBtX3ZpZXdPdmVybGF5Um9vdExheWVy
LT5hZGRDaGlsZChsYXllci5nZXQoKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUGFnZU92
ZXJsYXk6Ok92ZXJsYXlUeXBlOjpEb2N1bWVudDoKKyAgICAgICAgbV9kb2N1bWVudE92ZXJsYXlS
b290TGF5ZXItPmFkZENoaWxkKGxheWVyLmdldCgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgbV9vdmVybGF5R3JhcGhpY3NMYXllcnMuc2V0KG92ZXJsYXkuZ2V0KCksIFdURjo6bW92
ZShsYXllcikpOworCisgICAgdXBkYXRlRm9yY2VTeW5jaHJvbm91c1Njcm9sbExheWVyUG9zaXRp
b25VcGRhdGVzKCk7CisKKyAgICBpZiAoRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBtX3BhZ2UubWFp
bkZyYW1lKCkudmlldygpKQorICAgICAgICBmcmFtZVZpZXctPmVudGVyQ29tcG9zaXRpbmdNb2Rl
KCk7Cit9CisKK3ZvaWQgUGFnZU92ZXJsYXlDb250cm9sbGVyOjp1bmluc3RhbGxQYWdlT3Zlcmxh
eShQYWdlT3ZlcmxheSogb3ZlcmxheSwgUGFnZU92ZXJsYXk6OkZhZGVNb2RlIGZhZGVNb2RlKQor
eworICAgIGlmIChmYWRlTW9kZSA9PSBQYWdlT3ZlcmxheTo6RmFkZU1vZGU6OkZhZGUpIHsKKyAg
ICAgICAgb3ZlcmxheS0+c3RhcnRGYWRlT3V0QW5pbWF0aW9uKCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBvdmVybGF5LT5zZXRQYWdlKG51bGxwdHIpOworCisgICAgbV9vdmVybGF5
R3JhcGhpY3NMYXllcnMudGFrZShvdmVybGF5KS0+cmVtb3ZlRnJvbVBhcmVudCgpOworCisgICAg
c2l6ZV90IG92ZXJsYXlJbmRleCA9IG1fcGFnZU92ZXJsYXlzLmZpbmQob3ZlcmxheSk7CisgICAg
QVNTRVJUKG92ZXJsYXlJbmRleCAhPSBub3RGb3VuZCk7CisgICAgbV9wYWdlT3ZlcmxheXMucmVt
b3ZlKG92ZXJsYXlJbmRleCk7CisKKyAgICB1cGRhdGVGb3JjZVN5bmNocm9ub3VzU2Nyb2xsTGF5
ZXJQb3NpdGlvblVwZGF0ZXMoKTsKK30KKwordm9pZCBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6OnVw
ZGF0ZUZvcmNlU3luY2hyb25vdXNTY3JvbGxMYXllclBvc2l0aW9uVXBkYXRlcygpCit7CisjaWYg
RU5BQkxFKEFTWU5DX1NDUk9MTElORykKKyAgICBib29sIGZvcmNlU3luY2hyb25vdXNTY3JvbGxM
YXllclBvc2l0aW9uVXBkYXRlcyA9IGZhbHNlOworCisgICAgZm9yIChhdXRvJiBvdmVybGF5IDog
bV9wYWdlT3ZlcmxheXMpIHsKKyAgICAgICAgaWYgKG92ZXJsYXktPm92ZXJsYXlUeXBlKCkgPT0g
UGFnZU92ZXJsYXk6Ok92ZXJsYXlUeXBlOjpWaWV3KQorICAgICAgICAgICAgZm9yY2VTeW5jaHJv
bm91c1Njcm9sbExheWVyUG9zaXRpb25VcGRhdGVzID0gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAo
U2Nyb2xsaW5nQ29vcmRpbmF0b3IqIHNjcm9sbGluZ0Nvb3JkaW5hdG9yID0gbV9wYWdlLnNjcm9s
bGluZ0Nvb3JkaW5hdG9yKCkpCisgICAgICAgIHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT5zZXRGb3Jj
ZVN5bmNocm9ub3VzU2Nyb2xsTGF5ZXJQb3NpdGlvblVwZGF0ZXMoZm9yY2VTeW5jaHJvbm91c1Nj
cm9sbExheWVyUG9zaXRpb25VcGRhdGVzKTsKKyNlbmRpZgorfQorCit2b2lkIFBhZ2VPdmVybGF5
Q29udHJvbGxlcjo6c2V0UGFnZU92ZXJsYXlOZWVkc0Rpc3BsYXkoUGFnZU92ZXJsYXkmIG92ZXJs
YXksIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGRpcnR5UmVjdCkKK3sKKyAgICBBU1NFUlQobV9w
YWdlT3ZlcmxheXMuY29udGFpbnMoJm92ZXJsYXkpKTsKKyAgICBHcmFwaGljc0xheWVyJiBncmFw
aGljc0xheWVyID0gKm1fb3ZlcmxheUdyYXBoaWNzTGF5ZXJzLmdldCgmb3ZlcmxheSk7CisKKyAg
ICBpZiAoIWdyYXBoaWNzTGF5ZXIuZHJhd3NDb250ZW50KCkpIHsKKyAgICAgICAgZ3JhcGhpY3NM
YXllci5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7CisgICAgICAgIHVwZGF0ZU92ZXJsYXlHZW9tZXRy
eShvdmVybGF5LCBncmFwaGljc0xheWVyKTsKKyAgICB9CisKKyAgICBncmFwaGljc0xheWVyLnNl
dE5lZWRzRGlzcGxheUluUmVjdChkaXJ0eVJlY3QpOworfQorCit2b2lkIFBhZ2VPdmVybGF5Q29u
dHJvbGxlcjo6c2V0UGFnZU92ZXJsYXlPcGFjaXR5KFBhZ2VPdmVybGF5JiBvdmVybGF5LCBmbG9h
dCBvcGFjaXR5KQoreworICAgIEFTU0VSVChtX3BhZ2VPdmVybGF5cy5jb250YWlucygmb3Zlcmxh
eSkpOworICAgIG1fb3ZlcmxheUdyYXBoaWNzTGF5ZXJzLmdldCgmb3ZlcmxheSktPnNldE9wYWNp
dHkob3BhY2l0eSk7Cit9CisKK3ZvaWQgUGFnZU92ZXJsYXlDb250cm9sbGVyOjpjbGVhclBhZ2VP
dmVybGF5KFBhZ2VPdmVybGF5JiBvdmVybGF5KQoreworICAgIEFTU0VSVChtX3BhZ2VPdmVybGF5
cy5jb250YWlucygmb3ZlcmxheSkpOworICAgIG1fb3ZlcmxheUdyYXBoaWNzTGF5ZXJzLmdldCgm
b3ZlcmxheSktPnNldERyYXdzQ29udGVudChmYWxzZSk7Cit9CisKK0dyYXBoaWNzTGF5ZXIqIFBh
Z2VPdmVybGF5Q29udHJvbGxlcjo6bGF5ZXJGb3JPdmVybGF5KFBhZ2VPdmVybGF5JiBvdmVybGF5
KSBjb25zdAoreworICAgIEFTU0VSVChtX3BhZ2VPdmVybGF5cy5jb250YWlucygmb3ZlcmxheSkp
OworICAgIHJldHVybiBtX292ZXJsYXlHcmFwaGljc0xheWVycy5nZXQoJm92ZXJsYXkpOworfQor
Cit2b2lkIFBhZ2VPdmVybGF5Q29udHJvbGxlcjo6d2lsbEF0dGFjaFJvb3RMYXllcigpCit7Cisg
ICAgY3JlYXRlUm9vdExheWVyc0lmTmVlZGVkKCk7CisKKyAgICBmb3IgKGF1dG8mIG92ZXJsYXlB
bmRMYXllciA6IG1fb3ZlcmxheUdyYXBoaWNzTGF5ZXJzKQorICAgICAgICB1cGRhdGVPdmVybGF5
R2VvbWV0cnkoKm92ZXJsYXlBbmRMYXllci5rZXksICpvdmVybGF5QW5kTGF5ZXIudmFsdWUpOwor
fQorCit2b2lkIFBhZ2VPdmVybGF5Q29udHJvbGxlcjo6ZGlkQ2hhbmdlVmlld1NpemUoKQorewor
ICAgIGZvciAoYXV0byYgb3ZlcmxheUFuZExheWVyIDogbV9vdmVybGF5R3JhcGhpY3NMYXllcnMp
IHsKKyAgICAgICAgaWYgKG92ZXJsYXlBbmRMYXllci5rZXktPm92ZXJsYXlUeXBlKCkgPT0gUGFn
ZU92ZXJsYXk6Ok92ZXJsYXlUeXBlOjpWaWV3KQorICAgICAgICAgICAgdXBkYXRlT3ZlcmxheUdl
b21ldHJ5KCpvdmVybGF5QW5kTGF5ZXIua2V5LCAqb3ZlcmxheUFuZExheWVyLnZhbHVlKTsKKyAg
ICB9Cit9CisKK3ZvaWQgUGFnZU92ZXJsYXlDb250cm9sbGVyOjpkaWRDaGFuZ2VEb2N1bWVudFNp
emUoKQoreworICAgIGZvciAoYXV0byYgb3ZlcmxheUFuZExheWVyIDogbV9vdmVybGF5R3JhcGhp
Y3NMYXllcnMpIHsKKyAgICAgICAgaWYgKG92ZXJsYXlBbmRMYXllci5rZXktPm92ZXJsYXlUeXBl
KCkgPT0gUGFnZU92ZXJsYXk6Ok92ZXJsYXlUeXBlOjpEb2N1bWVudCkKKyAgICAgICAgICAgIHVw
ZGF0ZU92ZXJsYXlHZW9tZXRyeSgqb3ZlcmxheUFuZExheWVyLmtleSwgKm92ZXJsYXlBbmRMYXll
ci52YWx1ZSk7CisgICAgfQorfQorCit2b2lkIFBhZ2VPdmVybGF5Q29udHJvbGxlcjo6ZGlkQ2hh
bmdlU2V0dGluZ3MoKQoreworICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYXBwbHkgdGhlc2Ugc2V0
dGluZ3MgdG8gYWxsIG92ZXJsYXkgc3VibGF5ZXJzIHJlY3Vyc2l2ZWx5LgorICAgIGZvciAoYXV0
byYgZ3JhcGhpY3NMYXllciA6IG1fb3ZlcmxheUdyYXBoaWNzTGF5ZXJzLnZhbHVlcygpKQorICAg
ICAgICB1cGRhdGVTZXR0aW5nc0ZvckxheWVyKCpncmFwaGljc0xheWVyKTsKK30KKwordm9pZCBQ
YWdlT3ZlcmxheUNvbnRyb2xsZXI6OmRpZENoYW5nZURldmljZVNjYWxlRmFjdG9yKCkKK3sKKyAg
ICBjcmVhdGVSb290TGF5ZXJzSWZOZWVkZWQoKTsKKworICAgIG1fZG9jdW1lbnRPdmVybGF5Um9v
dExheWVyLT5ub3RlRGV2aWNlT3JQYWdlU2NhbGVGYWN0b3JDaGFuZ2VkSW5jbHVkaW5nRGVzY2Vu
ZGFudHMoKTsKKyAgICBtX3ZpZXdPdmVybGF5Um9vdExheWVyLT5ub3RlRGV2aWNlT3JQYWdlU2Nh
bGVGYWN0b3JDaGFuZ2VkSW5jbHVkaW5nRGVzY2VuZGFudHMoKTsKKworICAgIGZvciAoYXV0byYg
Z3JhcGhpY3NMYXllciA6IG1fb3ZlcmxheUdyYXBoaWNzTGF5ZXJzLnZhbHVlcygpKQorICAgICAg
ICBncmFwaGljc0xheWVyLT5zZXROZWVkc0Rpc3BsYXkoKTsKK30KKwordm9pZCBQYWdlT3Zlcmxh
eUNvbnRyb2xsZXI6OmRpZENoYW5nZUV4cG9zZWRSZWN0KCkKK3sKKyAgICBtX3BhZ2UuY2hyb21l
KCkuY2xpZW50KCkuc2NoZWR1bGVDb21wb3NpdGluZ0xheWVyRmx1c2goKTsKK30KKwordm9pZCBQ
YWdlT3ZlcmxheUNvbnRyb2xsZXI6OmRpZFNjcm9sbEZyYW1lKEZyYW1lJiBmcmFtZSkKK3sKKyAg
ICBmb3IgKGF1dG8mIG92ZXJsYXlBbmRMYXllciA6IG1fb3ZlcmxheUdyYXBoaWNzTGF5ZXJzKSB7
CisgICAgICAgIGlmIChvdmVybGF5QW5kTGF5ZXIua2V5LT5vdmVybGF5VHlwZSgpID09IFBhZ2VP
dmVybGF5OjpPdmVybGF5VHlwZTo6VmlldyB8fCAhZnJhbWUuaXNNYWluRnJhbWUoKSkKKyAgICAg
ICAgICAgIG92ZXJsYXlBbmRMYXllci52YWx1ZS0+c2V0TmVlZHNEaXNwbGF5KCk7CisgICAgICAg
IG92ZXJsYXlBbmRMYXllci5rZXktPmRpZFNjcm9sbEZyYW1lKGZyYW1lKTsKKyAgICB9Cit9CisK
K3ZvaWQgUGFnZU92ZXJsYXlDb250cm9sbGVyOjp1cGRhdGVTZXR0aW5nc0ZvckxheWVyKEdyYXBo
aWNzTGF5ZXImIGxheWVyKQoreworICAgIFNldHRpbmdzJiBzZXR0aW5ncyA9IG1fcGFnZS5zZXR0
aW5ncygpOworICAgIGxheWVyLnNldEFjY2VsZXJhdGVzRHJhd2luZyhzZXR0aW5ncy5hY2NlbGVy
YXRlZERyYXdpbmdFbmFibGVkKCkpOworICAgIGxheWVyLnNldFNob3dEZWJ1Z0JvcmRlcihzZXR0
aW5ncy5zaG93RGVidWdCb3JkZXJzKCkpOworICAgIGxheWVyLnNldFNob3dSZXBhaW50Q291bnRl
cihzZXR0aW5ncy5zaG93UmVwYWludENvdW50ZXIoKSk7Cit9CisKK2Jvb2wgUGFnZU92ZXJsYXlD
b250cm9sbGVyOjpoYW5kbGVNb3VzZUV2ZW50KGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgbW91
c2VFdmVudCkKK3sKKyAgICBpZiAoIW1fcGFnZU92ZXJsYXlzLnNpemUoKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgZm9yIChhdXRvIGl0ID0gbV9wYWdlT3ZlcmxheXMucmJlZ2luKCks
IGVuZCA9IG1fcGFnZU92ZXJsYXlzLnJlbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAg
IGlmICgoKml0KS0+bW91c2VFdmVudChtb3VzZUV2ZW50KSkKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBQYWdlT3ZlcmxheUNv
bnRyb2xsZXI6OmNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlU3RyaW5nVmFsdWVGb3JQb2ludChT
dHJpbmcgYXR0cmlidXRlLCBGbG9hdFBvaW50IHBhcmFtZXRlciwgU3RyaW5nJiB2YWx1ZSkKK3sK
KyAgICBpZiAoIW1fcGFnZU92ZXJsYXlzLnNpemUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgZm9yIChhdXRvIGl0ID0gbV9wYWdlT3ZlcmxheXMucmJlZ2luKCksIGVuZCA9IG1fcGFn
ZU92ZXJsYXlzLnJlbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIGlmICgoKml0KS0+
Y29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVTdHJpbmdWYWx1ZUZvclBvaW50KGF0dHJpYnV0ZSwg
cGFyYW1ldGVyLCB2YWx1ZSkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUGFnZU92ZXJsYXlDb250cm9sbGVyOjpjb3B5QWNj
ZXNzaWJpbGl0eUF0dHJpYnV0ZUJvb2xWYWx1ZUZvclBvaW50KFN0cmluZyBhdHRyaWJ1dGUsIEZs
b2F0UG9pbnQgcGFyYW1ldGVyLCBib29sJiB2YWx1ZSkKK3sKKyAgICBpZiAoIW1fcGFnZU92ZXJs
YXlzLnNpemUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgZm9yIChhdXRvIGl0ID0g
bV9wYWdlT3ZlcmxheXMucmJlZ2luKCksIGVuZCA9IG1fcGFnZU92ZXJsYXlzLnJlbmQoKTsgaXQg
IT0gZW5kOyArK2l0KSB7CisgICAgICAgIGlmICgoKml0KS0+Y29weUFjY2Vzc2liaWxpdHlBdHRy
aWJ1dGVCb29sVmFsdWVGb3JQb2ludChhdHRyaWJ1dGUsIHBhcmFtZXRlciwgdmFsdWUpKQorICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIHJldHVybiBmYWxzZTsKK30K
KworVmVjdG9yPFN0cmluZz4gUGFnZU92ZXJsYXlDb250cm9sbGVyOjpjb3B5QWNjZXNzaWJpbGl0
eUF0dHJpYnV0ZXNOYW1lcyhib29sIHBhcmFtZXRlcml6ZWROYW1lcykKK3sKKyAgICBpZiAoIW1f
cGFnZU92ZXJsYXlzLnNpemUoKSkKKyAgICAgICAgcmV0dXJuIFZlY3RvcjxTdHJpbmc+KCk7CisK
KyAgICBmb3IgKGF1dG8gaXQgPSBtX3BhZ2VPdmVybGF5cy5yYmVnaW4oKSwgZW5kID0gbV9wYWdl
T3ZlcmxheXMucmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgVmVjdG9yPFN0cmlu
Zz4gbmFtZXMgPSAoKml0KS0+Y29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVOYW1lcyhwYXJhbWV0
ZXJpemVkTmFtZXMpOworICAgICAgICBpZiAoIW5hbWVzLmlzRW1wdHkoKSkKKyAgICAgICAgICAg
IHJldHVybiBuYW1lczsKKyAgICB9CisKKyAgICByZXR1cm4gVmVjdG9yPFN0cmluZz4oKTsKK30K
Kwordm9pZCBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6OnBhaW50Q29udGVudHMoY29uc3QgV2ViQ29y
ZTo6R3JhcGhpY3NMYXllciogZ3JhcGhpY3NMYXllciwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
JiBncmFwaGljc0NvbnRleHQsIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJQYWludGluZ1BoYXNlLCBj
b25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGNsaXBSZWN0KQoreworICAgIGZvciAoYXV0byBpdCA9
IG1fb3ZlcmxheUdyYXBoaWNzTGF5ZXJzLmJlZ2luKCksIGVuZCA9IG1fb3ZlcmxheUdyYXBoaWNz
TGF5ZXJzLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgaWYgKGl0LT52YWx1ZS5n
ZXQoKSAhPSBncmFwaGljc0xheWVyKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAg
R3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGdyYXBoaWNzQ29udGV4dCk7Cisg
ICAgICAgIGdyYXBoaWNzQ29udGV4dC5jbGlwKGNsaXBSZWN0KTsKKyAgICAgICAgaXQtPmtleS0+
ZHJhd1JlY3QoZ3JhcGhpY3NDb250ZXh0LCBlbmNsb3NpbmdJbnRSZWN0KGNsaXBSZWN0KSk7CisK
KyAgICAgICAgcmV0dXJuOworICAgIH0KK30KKworZmxvYXQgUGFnZU92ZXJsYXlDb250cm9sbGVy
OjpkZXZpY2VTY2FsZUZhY3RvcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcGFnZS5kZXZpY2VT
Y2FsZUZhY3RvcigpOworfQorCit2b2lkIFBhZ2VPdmVybGF5Q29udHJvbGxlcjo6bm90aWZ5Rmx1
c2hSZXF1aXJlZChjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKikKK3sKKyAgICBtX3BhZ2Uu
Y2hyb21lKCkuY2xpZW50KCkuc2NoZWR1bGVDb21wb3NpdGluZ0xheWVyRmx1c2goKTsKK30KKwor
dm9pZCBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6OmRpZENoYW5nZU92ZXJsYXlGcmFtZShQYWdlT3Zl
cmxheSYgb3ZlcmxheSkKK3sKKyAgICBBU1NFUlQobV9wYWdlT3ZlcmxheXMuY29udGFpbnMoJm92
ZXJsYXkpKTsKKyAgICB1cGRhdGVPdmVybGF5R2VvbWV0cnkob3ZlcmxheSwgKm1fb3ZlcmxheUdy
YXBoaWNzTGF5ZXJzLmdldCgmb3ZlcmxheSkpOworfQorCit2b2lkIFBhZ2VPdmVybGF5Q29udHJv
bGxlcjo6ZGlkQ2hhbmdlT3ZlcmxheUJhY2tncm91bmRDb2xvcihQYWdlT3ZlcmxheSYgb3Zlcmxh
eSkKK3sKKyAgICBBU1NFUlQobV9wYWdlT3ZlcmxheXMuY29udGFpbnMoJm92ZXJsYXkpKTsKKyAg
ICBtX292ZXJsYXlHcmFwaGljc0xheWVycy5nZXQoJm92ZXJsYXkpLT5zZXRCYWNrZ3JvdW5kQ29s
b3Iob3ZlcmxheS5iYWNrZ3JvdW5kQ29sb3IoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktp
dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlT3ZlcmxheUNvbnRyb2xsZXIu
aCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZU92ZXJsYXlDb250cm9sbGVyLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQxMmUxMAotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvUGFnZU92ZXJsYXlDb250cm9sbGVyLmgKQEAgLTAsMCArMSwxMDAg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaWZuZGVmIFBhZ2VPdmVybGF5Q29udHJvbGxlcl9oCisjZGVmaW5l
IFBhZ2VPdmVybGF5Q29udHJvbGxlcl9oCisKKyNpbmNsdWRlICJHcmFwaGljc0xheWVyQ2xpZW50
LmgiCisjaW5jbHVkZSAiUGFnZU92ZXJsYXkuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgor
I2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRnJhbWU7CitjbGFzcyBQYWdlOworY2xhc3MgUGxhdGZv
cm1Nb3VzZUV2ZW50OworCitjbGFzcyBQYWdlT3ZlcmxheUNvbnRyb2xsZXIgOiBwdWJsaWMgR3Jh
cGhpY3NMYXllckNsaWVudCB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUGFnZU92ZXJsYXlD
b250cm9sbGVyKTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBQ
YWdlT3ZlcmxheUNvbnRyb2xsZXIoUGFnZSYpOworCisgICAgR3JhcGhpY3NMYXllciogZG9jdW1l
bnRPdmVybGF5Um9vdExheWVyKCkgY29uc3QgeyByZXR1cm4gbV9kb2N1bWVudE92ZXJsYXlSb290
TGF5ZXIuZ2V0KCk7IH0KKyAgICBHcmFwaGljc0xheWVyKiB2aWV3T3ZlcmxheVJvb3RMYXllcigp
IGNvbnN0IHsgcmV0dXJuIG1fdmlld092ZXJsYXlSb290TGF5ZXIuZ2V0KCk7IH0KKworICAgIHZv
aWQgaW5zdGFsbFBhZ2VPdmVybGF5KFBhc3NSZWZQdHI8UGFnZU92ZXJsYXk+LCBQYWdlT3Zlcmxh
eTo6RmFkZU1vZGUpOworICAgIHZvaWQgdW5pbnN0YWxsUGFnZU92ZXJsYXkoUGFnZU92ZXJsYXkq
LCBQYWdlT3ZlcmxheTo6RmFkZU1vZGUpOworCisgICAgdm9pZCBzZXRQYWdlT3ZlcmxheU5lZWRz
RGlzcGxheShQYWdlT3ZlcmxheSYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2b2lkIHNldFBhZ2VP
dmVybGF5T3BhY2l0eShQYWdlT3ZlcmxheSYsIGZsb2F0KTsKKyAgICB2b2lkIGNsZWFyUGFnZU92
ZXJsYXkoUGFnZU92ZXJsYXkmKTsKKyAgICBHcmFwaGljc0xheWVyKiBsYXllckZvck92ZXJsYXko
UGFnZU92ZXJsYXkmKSBjb25zdDsKKworICAgIHZvaWQgd2lsbEF0dGFjaFJvb3RMYXllcigpOwor
CisgICAgdm9pZCBkaWRDaGFuZ2VWaWV3U2l6ZSgpOworICAgIHZvaWQgZGlkQ2hhbmdlRG9jdW1l
bnRTaXplKCk7CisgICAgdm9pZCBkaWRDaGFuZ2VTZXR0aW5ncygpOworICAgIHZvaWQgZGlkQ2hh
bmdlRGV2aWNlU2NhbGVGYWN0b3IoKTsKKyAgICB2b2lkIGRpZENoYW5nZUV4cG9zZWRSZWN0KCk7
CisgICAgdm9pZCBkaWRTY3JvbGxGcmFtZShGcmFtZSYpOworCisgICAgdm9pZCBkaWRDaGFuZ2VP
dmVybGF5RnJhbWUoUGFnZU92ZXJsYXkmKTsKKyAgICB2b2lkIGRpZENoYW5nZU92ZXJsYXlCYWNr
Z3JvdW5kQ29sb3IoUGFnZU92ZXJsYXkmKTsKKworICAgIGludCBvdmVybGF5Q291bnQoKSBjb25z
dCB7IHJldHVybiBtX292ZXJsYXlHcmFwaGljc0xheWVycy5zaXplKCk7IH0KKworICAgIGJvb2wg
aGFuZGxlTW91c2VFdmVudChjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmKTsKKworICAgIGJvb2wg
Y29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVTdHJpbmdWYWx1ZUZvclBvaW50KFN0cmluZyBhdHRy
aWJ1dGUsIEZsb2F0UG9pbnQsIFN0cmluZyYgdmFsdWUpOworICAgIGJvb2wgY29weUFjY2Vzc2li
aWxpdHlBdHRyaWJ1dGVCb29sVmFsdWVGb3JQb2ludChTdHJpbmcgYXR0cmlidXRlLCBGbG9hdFBv
aW50LCBib29sJiB2YWx1ZSk7CisgICAgVmVjdG9yPFN0cmluZz4gY29weUFjY2Vzc2liaWxpdHlB
dHRyaWJ1dGVzTmFtZXMoYm9vbCBwYXJhbWV0ZXJpemVkTmFtZXMpOworCitwcml2YXRlOgorICAg
IHZvaWQgY3JlYXRlUm9vdExheWVyc0lmTmVlZGVkKCk7CisKKyAgICB2b2lkIHVwZGF0ZVNldHRp
bmdzRm9yTGF5ZXIoR3JhcGhpY3NMYXllciYpOworICAgIHZvaWQgdXBkYXRlRm9yY2VTeW5jaHJv
bm91c1Njcm9sbExheWVyUG9zaXRpb25VcGRhdGVzKCk7CisKKyAgICAvLyBHcmFwaGljc0xheWVy
Q2xpZW50CisgICAgdmlydHVhbCB2b2lkIG5vdGlmeUZsdXNoUmVxdWlyZWQoY29uc3QgR3JhcGhp
Y3NMYXllciopIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBwYWludENvbnRlbnRzKGNvbnN0
IEdyYXBoaWNzTGF5ZXIqLCBHcmFwaGljc0NvbnRleHQmLCBHcmFwaGljc0xheWVyUGFpbnRpbmdQ
aGFzZSwgY29uc3QgRmxvYXRSZWN0JiBjbGlwUmVjdCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBm
bG9hdCBkZXZpY2VTY2FsZUZhY3RvcigpIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9v
bCBzaG91bGRTa2lwTGF5ZXJJbkR1bXAoY29uc3QgR3JhcGhpY3NMYXllciopIGNvbnN0IG92ZXJy
aWRlIHsgcmV0dXJuIHRydWU7IH0KKworICAgIHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0xheWVy
PiBtX2RvY3VtZW50T3ZlcmxheVJvb3RMYXllcjsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhp
Y3NMYXllcj4gbV92aWV3T3ZlcmxheVJvb3RMYXllcjsKKyAgICBIYXNoTWFwPFBhZ2VPdmVybGF5
Kiwgc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzTGF5ZXI+PiBtX292ZXJsYXlHcmFwaGljc0xheWVy
czsKKyAgICBWZWN0b3I8UmVmUHRyPFBhZ2VPdmVybGF5Pj4gbV9wYWdlT3ZlcmxheXM7CisgICAg
UGFnZSYgbV9wYWdlOworICAgIGJvb2wgbV9pbml0aWFsaXplZDsKK307CisKK30gLy8gbmFtZXNw
YWNlIFdlYktpdAorCisjZW5kaWYgLy8gUGFnZU92ZXJsYXlDb250cm9sbGVyX2gKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXJDbGllbnQu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXJDbGllbnQu
aAppbmRleCA4YTQ4MzMzLi4yNTkyMmNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyQ2xpZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllckNsaWVudC5oCkBAIC0yNiw2ICsyNiw4IEBA
CiAjaWZuZGVmIEdyYXBoaWNzTGF5ZXJDbGllbnRfaAogI2RlZmluZSBHcmFwaGljc0xheWVyQ2xp
ZW50X2gKIAorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogY2xhc3MgRmxvYXRQb2ludDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMYXllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIu
Y3BwCmluZGV4IDVmM2E0OTcuLjc4MGZjMDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMYXllci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxheWVyLmNwcApAQCAtMjMyMiw3ICsyMzIyLDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6c2Ny
b2xsVG8oaW50IHgsIGludCB5KQogCiAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRT
Y3JvbGxMYXllcigmZnJhbWUpOwogICAgIGlmIChzY3JvbGxzT3ZlcmZsb3coKSkKLSAgICAgICAg
ZnJhbWUubG9hZGVyKCkuY2xpZW50KCkuZGlkQ2hhbmdlU2Nyb2xsT2Zmc2V0KCk7CisgICAgICAg
IHZpZXcuZnJhbWVWaWV3KCkuZGlkQ2hhbmdlU2Nyb2xsT2Zmc2V0KCk7CiAKICAgICB2aWV3LmZy
YW1lVmlldygpLnJlc3VtZVZpc2libGVJbWFnZUFuaW1hdGlvbnNJbmNsdWRpbmdTdWJmcmFtZXMo
KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNv
bXBvc2l0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9z
aXRvci5jcHAKaW5kZXggNGJlNDY5MS4uZDJjMjY5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAKQEAgLTQ1LDYgKzQ1LDcgQEAK
ICNpbmNsdWRlICJNYWluRnJhbWUuaCIKICNpbmNsdWRlICJOb2RlTGlzdC5oIgogI2luY2x1ZGUg
IlBhZ2UuaCIKKyNpbmNsdWRlICJQYWdlT3ZlcmxheUNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJS
ZW5kZXJFbWJlZGRlZE9iamVjdC5oIgogI2luY2x1ZGUgIlJlbmRlckZsb3dUaHJlYWQuaCIKICNp
bmNsdWRlICJSZW5kZXJGdWxsU2NyZWVuLmgiCkBAIC02NDMsNyArNjQ0LDggQEAgdm9pZCBSZW5k
ZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJzVGltZXJGaXJlZChUaW1l
cjxSZW5kZXJMYXllckMKIAogYm9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6Omhhc0FueUFkZGl0
aW9uYWxDb21wb3NpdGVkTGF5ZXJzKGNvbnN0IFJlbmRlckxheWVyJiByb290TGF5ZXIpIGNvbnN0
CiB7Ci0gICAgcmV0dXJuIG1fY29tcG9zaXRlZExheWVyQ291bnQgPiAocm9vdExheWVyLmlzQ29t
cG9zaXRlZCgpID8gMSA6IDApOworICAgIGludCBsYXllckNvdW50ID0gbV9jb21wb3NpdGVkTGF5
ZXJDb3VudCArIG1fcmVuZGVyVmlldy5mcmFtZSgpLnBhZ2UoKS0+cGFnZU92ZXJsYXlDb250cm9s
bGVyKCkub3ZlcmxheUNvdW50KCk7CisgICAgcmV0dXJuIGxheWVyQ291bnQgPiAocm9vdExheWVy
LmlzQ29tcG9zaXRlZCgpID8gMSA6IDApOwogfQogCiB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRv
cjo6Y2FuY2VsQ29tcG9zaXRpbmdMYXllclVwZGF0ZSgpCkBAIC02NjUsNyArNjY3LDcgQEAgdm9p
ZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJzKENvbXBvc2l0
aW5nVXBkYXRlVHlwZSB1cGRhdGUKICAgICBpZiAobV9yZW5kZXJWaWV3Lm5lZWRzTGF5b3V0KCkp
CiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChtX2ZvcmNlQ29tcG9zaXRpbmdNb2RlICYmICFt
X2NvbXBvc2l0aW5nKQorICAgIGlmICgobV9mb3JjZUNvbXBvc2l0aW5nTW9kZSB8fCBtX3JlbmRl
clZpZXcuZnJhbWUoKS5wYWdlKCktPnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLm92ZXJsYXlDb3Vu
dCgpKSAmJiAhbV9jb21wb3NpdGluZykKICAgICAgICAgZW5hYmxlQ29tcG9zaXRpbmdNb2RlKHRy
dWUpOwogCiAgICAgaWYgKCFtX3JlZXZhbHVhdGVDb21wb3NpdGluZ0FmdGVyTGF5b3V0ICYmICFt
X2NvbXBvc2l0aW5nKQpAQCAtNzQ4LDcgKzc1MCw3IEBAIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3Np
dG9yOjp1cGRhdGVDb21wb3NpdGluZ0xheWVycyhDb21wb3NpdGluZ1VwZGF0ZVR5cGUgdXBkYXRl
CiAKICAgICAgICAgLy8gSG9zdCB0aGUgZG9jdW1lbnQgbGF5ZXIgaW4gdGhlIFJlbmRlclZpZXcn
cyByb290IGxheWVyLgogICAgICAgICBpZiAoaXNGdWxsVXBkYXRlKSB7Ci0gICAgICAgICAgICBh
cHBlbmRPdmVybGF5TGF5ZXJzKGNoaWxkTGlzdCk7CisgICAgICAgICAgICBhcHBlbmREb2N1bWVu
dE92ZXJsYXlMYXllcnMoY2hpbGRMaXN0KTsKICAgICAgICAgICAgIC8vIEV2ZW4gd2hlbiBjaGls
ZExpc3QgaXMgZW1wdHksIGRvbid0IGRyb3Agb3V0IG9mIGNvbXBvc2l0aW5nIG1vZGUgaWYgdGhl
cmUgYXJlCiAgICAgICAgICAgICAvLyBjb21wb3NpdGVkIGxheWVycyB0aGF0IHdlIGRpZG4ndCBo
aXQgaW4gb3VyIHRyYXZlcnNhbCAoZS5nLiBiZWNhdXNlIG9mIHZpc2liaWxpdHk6aGlkZGVuKS4K
ICAgICAgICAgICAgIGlmIChjaGlsZExpc3QuaXNFbXB0eSgpICYmICFoYXNBbnlBZGRpdGlvbmFs
Q29tcG9zaXRlZExheWVycygqdXBkYXRlUm9vdCkpCkBAIC03ODQsMTQgKzc4NiwxOCBAQCB2b2lk
IFJlbmRlckxheWVyQ29tcG9zaXRvcjo6dXBkYXRlQ29tcG9zaXRpbmdMYXllcnMoQ29tcG9zaXRp
bmdVcGRhdGVUeXBlIHVwZGF0ZQogICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6bGF5ZXJU
cmVlRGlkQ2hhbmdlKHBhZ2UoKSk7CiB9CiAKLXZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjph
cHBlbmRPdmVybGF5TGF5ZXJzKFZlY3RvcjxHcmFwaGljc0xheWVyKj4mIGNoaWxkTGlzdCkKK3Zv
aWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjphcHBlbmREb2N1bWVudE92ZXJsYXlMYXllcnMoVmVj
dG9yPEdyYXBoaWNzTGF5ZXIqPiYgY2hpbGRMaXN0KQogewogICAgIEZyYW1lJiBmcmFtZSA9IG1f
cmVuZGVyVmlldy5mcmFtZVZpZXcoKS5mcmFtZSgpOworICAgIGlmICghZnJhbWUuaXNNYWluRnJh
bWUoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgUGFnZSogcGFnZSA9IGZyYW1lLnBhZ2UoKTsK
ICAgICBpZiAoIXBhZ2UpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChHcmFwaGljc0xheWVy
KiBvdmVybGF5TGF5ZXIgPSBwYWdlLT5jaHJvbWUoKS5jbGllbnQoKS5kb2N1bWVudE92ZXJsYXlM
YXllckZvckZyYW1lKGZyYW1lKSkKKyAgICBwYWdlLT5wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKS53
aWxsQXR0YWNoUm9vdExheWVyKCk7CisgICAgaWYgKEdyYXBoaWNzTGF5ZXIqIG92ZXJsYXlMYXll
ciA9IHBhZ2UtPnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLmRvY3VtZW50T3ZlcmxheVJvb3RMYXll
cigpKQogICAgICAgICBjaGlsZExpc3QuYXBwZW5kKG92ZXJsYXlMYXllcik7CiB9CiAKQEAgLTMz
NjYsNiArMzM3MiwxMCBAQCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6YXR0YWNoUm9vdExh
eWVyKFJvb3RMYXllckF0dGFjaG1lbnQgYXR0YWNobWVudCkKICAgICAgICAgICAgICAgICByZXR1
cm47CiAKICAgICAgICAgICAgIHBhZ2UtPmNocm9tZSgpLmNsaWVudCgpLmF0dGFjaFJvb3RHcmFw
aGljc0xheWVyKCZmcmFtZSwgcm9vdEdyYXBoaWNzTGF5ZXIoKSk7CisgICAgICAgICAgICBpZiAo
ZnJhbWUuaXNNYWluRnJhbWUoKSkgeworICAgICAgICAgICAgICAgIHBhZ2UtPnBhZ2VPdmVybGF5
Q29udHJvbGxlcigpLndpbGxBdHRhY2hSb290TGF5ZXIoKTsKKyAgICAgICAgICAgICAgICBwYWdl
LT5jaHJvbWUoKS5jbGllbnQoKS5hdHRhY2hWaWV3T3ZlcmxheUdyYXBoaWNzTGF5ZXIoJmZyYW1l
LCBwYWdlLT5wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKS52aWV3T3ZlcmxheVJvb3RMYXllcigpKTsK
KyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNh
c2UgUm9vdExheWVyQXR0YWNoZWRWaWFFbmNsb3NpbmdGcmFtZTogewpAQCAtMzQxMCw2ICszNDIw
LDggQEAgdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmRldGFjaFJvb3RMYXllcigpCiAgICAg
ICAgICAgICByZXR1cm47CiAKICAgICAgICAgcGFnZS0+Y2hyb21lKCkuY2xpZW50KCkuYXR0YWNo
Um9vdEdyYXBoaWNzTGF5ZXIoJmZyYW1lLCAwKTsKKyAgICAgICAgaWYgKGZyYW1lLmlzTWFpbkZy
YW1lKCkpCisgICAgICAgICAgICBwYWdlLT5jaHJvbWUoKS5jbGllbnQoKS5hdHRhY2hWaWV3T3Zl
cmxheUdyYXBoaWNzTGF5ZXIoJmZyYW1lLCAwKTsKICAgICB9CiAgICAgYnJlYWs7CiAgICAgY2Fz
ZSBSb290TGF5ZXJVbmF0dGFjaGVkOgpAQCAtMzQ0NCw3ICszNDU2LDExIEBAIHZvaWQgUmVuZGVy
TGF5ZXJDb21wb3NpdG9yOjpyb290TGF5ZXJBdHRhY2htZW50Q2hhbmdlZCgpCiAgICAgaWYgKFJl
bmRlckxheWVyQmFja2luZyogYmFja2luZyA9IGxheWVyID8gbGF5ZXItPmJhY2tpbmcoKSA6IG51
bGxwdHIpCiAgICAgICAgIGJhY2tpbmctPnVwZGF0ZURyYXdzQ29udGVudCgpOwogCi0gICAgaWYg
KEdyYXBoaWNzTGF5ZXIqIG92ZXJsYXlMYXllciA9IHBhZ2UtPmNocm9tZSgpLmNsaWVudCgpLmRv
Y3VtZW50T3ZlcmxheUxheWVyRm9yRnJhbWUoZnJhbWUpKQorICAgIGlmICghZnJhbWUuaXNNYWlu
RnJhbWUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgcGFnZS0+cGFnZU92ZXJsYXlDb250cm9s
bGVyKCkud2lsbEF0dGFjaFJvb3RMYXllcigpOworICAgIGlmIChHcmFwaGljc0xheWVyKiBvdmVy
bGF5TGF5ZXIgPSBwYWdlLT5wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKS5kb2N1bWVudE92ZXJsYXlS
b290TGF5ZXIoKSkKICAgICAgICAgbV9yb290Q29udGVudExheWVyLT5hZGRDaGlsZChvdmVybGF5
TGF5ZXIpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGF5ZXJDb21wb3NpdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJD
b21wb3NpdG9yLmgKaW5kZXggN2JkMjQwYS4uZDlhODc0YiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuaApAQCAtMzYyLDcgKzM2Miw3IEBA
IHByaXZhdGU6CiAgICAgYm9vbCBsYXllckhhczNEQ29udGVudChjb25zdCBSZW5kZXJMYXllciYp
IGNvbnN0OwogICAgIGJvb2wgaXNSdW5uaW5nQWNjZWxlcmF0ZWRUcmFuc2Zvcm1BbmltYXRpb24o
UmVuZGVyTGF5ZXJNb2RlbE9iamVjdCYpIGNvbnN0OwogCi0gICAgdm9pZCBhcHBlbmRPdmVybGF5
TGF5ZXJzKFZlY3RvcjxHcmFwaGljc0xheWVyKj4mKTsKKyAgICB2b2lkIGFwcGVuZERvY3VtZW50
T3ZlcmxheUxheWVycyhWZWN0b3I8R3JhcGhpY3NMYXllcio+Jik7CiAgICAgYm9vbCBoYXNBbnlB
ZGRpdGlvbmFsQ29tcG9zaXRlZExheWVycyhjb25zdCBSZW5kZXJMYXllciYgcm9vdExheWVyKSBj
b25zdDsKIAogICAgIHZvaWQgZW5zdXJlUm9vdExheWVyKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaCBiL1NvdXJjZS9XZWJL
aXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oCmluZGV4IDNlM2E1YTguLmM2
YzA2NzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNo
cm9tZUNsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNo
cm9tZUNsaWVudC5oCkBAIC0xNjMsNiArMTYzLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9v
bCBzaG91bGRQYWludEVudGlyZUNvbnRlbnRzKCkgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICB2aXJ0
dWFsIHZvaWQgYXR0YWNoUm9vdEdyYXBoaWNzTGF5ZXIoV2ViQ29yZTo6RnJhbWUqLCBXZWJDb3Jl
OjpHcmFwaGljc0xheWVyKikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGF0dGFjaFZpZXdP
dmVybGF5R3JhcGhpY3NMYXllcihXZWJDb3JlOjpGcmFtZSosIFdlYkNvcmU6OkdyYXBoaWNzTGF5
ZXIqKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNPbmVTaG90RHJhd2luZ1N5
bmNocm9uaXphdGlvbigpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBzY2hlZHVsZUNvbXBv
c2l0aW5nTGF5ZXJGbHVzaCgpIG92ZXJyaWRlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQubW0gYi9Tb3VyY2UvV2ViS2l0L21h
Yy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQubW0KaW5kZXggOTM2ZjQ1NC4uMTlhZGJk
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21l
Q2xpZW50Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9t
ZUNsaWVudC5tbQpAQCAtOTI0LDYgKzkyNCwxMSBAQCB2b2lkIFdlYkNocm9tZUNsaWVudDo6YXR0
YWNoUm9vdEdyYXBoaWNzTGF5ZXIoRnJhbWUqIGZyYW1lLCBHcmFwaGljc0xheWVyKiBncmFwaAog
ICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiB9CiAKK3ZvaWQgV2ViQ2hyb21lQ2xpZW50
OjphdHRhY2hWaWV3T3ZlcmxheUdyYXBoaWNzTGF5ZXIoRnJhbWUqLCBHcmFwaGljc0xheWVyKikK
K3sKKyAgICAvLyBGSVhNRTogSWYgd2Ugd2FudCB2aWV3LXJlbGF0aXZlIHBhZ2Ugb3ZlcmxheXMg
aW4gV2ViS2l0MSwgdGhpcyB3b3VsZCBiZSB0aGUgcGxhY2UgdG8gaG9vayB0aGVtIHVwLgorfQor
CiB2b2lkIFdlYkNocm9tZUNsaWVudDo6c2V0TmVlZHNPbmVTaG90RHJhd2luZ1N5bmNocm9uaXph
dGlvbigpCiB7CiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV2ViS2l0Mi9DTWFrZUxpc3Rz
LnR4dAppbmRleCA2YmRjNTlkLi40YTQ2NTQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9D
TWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9DTWFrZUxpc3RzLnR4dApAQCAtNTQz
LDggKzU0Myw2IEBAIHNldChXZWJLaXQyX1NPVVJDRVMKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2Uv
RmluZENvbnRyb2xsZXIuY3BwCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUhvc3Qu
Y3BwCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1BhZ2VCYW5uZXIuY3BwCi0gICAgV2ViUHJvY2Vz
cy9XZWJQYWdlL1BhZ2VPdmVybGF5LmNwcAotICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9QYWdlT3Zl
cmxheUNvbnRyb2xsZXIuY3BwCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1RhcEhpZ2hsaWdodENv
bnRyb2xsZXIuY3BwCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkJhY2tGb3J3YXJkTGlzdFBy
b3h5LmNwcAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJDb250ZXh0TWVudS5jcHAKQEAgLTU1
NSw2ICs1NTMsNyBAQCBzZXQoV2ViS2l0Ml9TT1VSQ0VTCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYk9wZW5QYW5lbFJlc3VsdExpc3RlbmVyLmNwcAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJQYWdlLmNwcAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlR3JvdXBQcm94eS5jcHAK
KyAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZU92ZXJsYXkuY3BwCiAgICAgV2ViUHJvY2Vz
cy9XZWJQYWdlL1Zpc2l0ZWRMaW5rVGFibGVDb250cm9sbGVyLmNwcAogICAgIFdlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJVbmRvU3RlcC5jcHAKICkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dl
YktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBkMGE5MmY5Li4yZDdlYzNmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysr
IGIvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0z
MDcsOCArMzA3LDYgQEAKIAkJMUE5MEMxRUUxMjY0RkQ1MDAwM0U0NEQ0IC8qIFdlYkZpbmRPcHRp
b25zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTkw
QzFFRDEyNjRGRDUwMDAzRTQ0RDQgLyogV2ViRmluZE9wdGlvbnMuaCAqLzsgfTsKIAkJMUE5MEMx
RjQxMjY0RkQ3MTAwM0U0NEQ0IC8qIEZpbmRDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTkwQzFGMjEyNjRGRDcxMDAzRTQ0RDQgLyog
RmluZENvbnRyb2xsZXIuaCAqLzsgfTsKIAkJMUE5MEMxRjUxMjY0RkQ3MTAwM0U0NEQ0IC8qIEZp
bmRDb250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDFBOTBDMUYzMTI2NEZENzEwMDNFNDRENCAvKiBGaW5kQ29udHJvbGxlci5jcHAgKi87
IH07Ci0JCTFBOTBDMjM3MTI2NTA3MTcwMDNFNDRENCAvKiBQYWdlT3ZlcmxheS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE5MEMyMzUxMjY1MDcxNzAw
M0U0NEQ0IC8qIFBhZ2VPdmVybGF5LmggKi87IH07Ci0JCTFBOTBDMjM4MTI2NTA3MTcwMDNFNDRE
NCAvKiBQYWdlT3ZlcmxheS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAxQTkwQzIzNjEyNjUwNzE3MDAzRTQ0RDQgLyogUGFnZU92ZXJsYXkuY3BwICov
OyB9OwogCQkxQTkxMDA3MTEyNjY3NUM0MDAxODQyRjUgLyogRmluZEluZGljYXRvci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE5MTAwNkYxMjY2NzVD
MzAwMTg0MkY1IC8qIEZpbmRJbmRpY2F0b3IuaCAqLzsgfTsKIAkJMUE5MTAwNzIxMjY2NzVDNDAw
MTg0MkY1IC8qIEZpbmRJbmRpY2F0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMUE5MTAwNzAxMjY2NzVDNDAwMTg0MkY1IC8qIEZpbmRJbmRpY2F0
b3IuY3BwICovOyB9OwogCQkxQTkyREMxMTEyRjhCQTQ2MDAxN0FGNjUgLyogTGF5ZXJUcmVlQ29u
dGV4dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE5
MkRDMTAxMkY4QkE0NjAwMTdBRjY1IC8qIExheWVyVHJlZUNvbnRleHQuaCAqLzsgfTsKQEAgLTU2
OCw4ICs1NjYsNiBAQAogCQkyOUQ1NURGMjE2MUJGOUYxMDAzMUEyRTMgLyogV2ViUGFnZUdyb3Vw
UHJveHlNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMjlENTVERjAxNjFCRjlGMTAwMzFBMkUzIC8qIFdlYlBhZ2VHcm91cFByb3h5TWVzc2Fn
ZXMuaCAqLzsgfTsKIAkJMkQxMjVDNUUxODU3RUEwNTAwM0JBM0NCIC8qIFZpZXdHZXN0dXJlQ29u
dHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MkQxMjVDNUMxODU3RUEwNTAwM0JBM0NCIC8qIFZpZXdHZXN0dXJlQ29udHJvbGxlci5oICovOyB9
OwogCQkyRDEyNUM1RjE4NTdFQTA1MDAzQkEzQ0IgLyogVmlld0dlc3R1cmVDb250cm9sbGVyTWFj
Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkQxMjVD
NUQxODU3RUEwNTAwM0JBM0NCIC8qIFZpZXdHZXN0dXJlQ29udHJvbGxlck1hYy5tbSAqLzsgfTsK
LQkJMkQxNDBFQUYxOEYzN0JFMDAwNUU3NUEwIC8qIFBhZ2VPdmVybGF5Q29udHJvbGxlci5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRDE0MEVBRDE4
RjM3QkUwMDA1RTc1QTAgLyogUGFnZU92ZXJsYXlDb250cm9sbGVyLmNwcCAqLzsgfTsKLQkJMkQx
NDBFQjAxOEYzN0JFMDAwNUU3NUEwIC8qIFBhZ2VPdmVybGF5Q29udHJvbGxlci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkQxNDBFQUUxOEYzN0JFMDAw
NUU3NUEwIC8qIFBhZ2VPdmVybGF5Q29udHJvbGxlci5oICovOyB9OwogCQkyRDFCNUQ1RDE4NTg2
OUM4MDA2QzY1OTYgLyogVmlld0dlc3R1cmVDb250cm9sbGVyTWVzc2FnZVJlY2VpdmVyLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJEMUI1RDVCMTg1
ODY5QzgwMDZDNjU5NiAvKiBWaWV3R2VzdHVyZUNvbnRyb2xsZXJNZXNzYWdlUmVjZWl2ZXIuY3Bw
ICovOyB9OwogCQkyRDFCNUQ1RTE4NTg2OUM4MDA2QzY1OTYgLyogVmlld0dlc3R1cmVDb250cm9s
bGVyTWVzc2FnZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDJEMUI1RDVDMTg1ODY5QzgwMDZDNjU5NiAvKiBWaWV3R2VzdHVyZUNvbnRyb2xsZXJNZXNz
YWdlcy5oICovOyB9OwogCQkyRDI4RjNFNDE4ODVDQ0MxMDA0QjlFQUUgLyogV2ViQ2hyb21lQ2xp
ZW50SU9TLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MkQyOEYzRTAxODg1Q0NDMTAwNEI5RUFFIC8qIFdlYkNocm9tZUNsaWVudElPUy5tbSAqLzsgfTsK
QEAgLTU4Niw2ICs1ODIsOCBAQAogCQkyRDQyOUJGRDE3MjFFMkM3MDBFQzY4MUYgLyogUERGUGx1
Z2luUGFzc3dvcmRGaWVsZC5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDJENDI5QkZCMTcyMUUyQkEwMEVDNjgxRiAvKiBQREZQbHVnaW5QYXNzd29yZEZp
ZWxkLm1tICovOyB9OwogCQkyRDQ3QjU2QzE4MTA3MTRFMDAzQTNBRUUgLyogUmVtb3RlTGF5ZXJC
YWNraW5nU3RvcmUubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAyRDQ3QjU2QTE4MTA3MTRFMDAzQTNBRUUgLyogUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmUu
bW0gKi87IH07CiAJCTJENDdCNTZEMTgxMDcxNEUwMDNBM0FFRSAvKiBSZW1vdGVMYXllckJhY2tp
bmdTdG9yZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MkQ0N0I1NkIxODEwNzE0RTAwM0EzQUVFIC8qIFJlbW90ZUxheWVyQmFja2luZ1N0b3JlLmggKi87
IH07CisJCTJENUM5RDA1MTlDODFEOEYwMEIzQzVDMSAvKiBXZWJQYWdlT3ZlcmxheS5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRDVDOUQwMzE5Qzgx
RDhGMDBCM0M1QzEgLyogV2ViUGFnZU92ZXJsYXkuY3BwICovOyB9OworCQkyRDVDOUQwNjE5Qzgx
RDhGMDBCM0M1QzEgLyogV2ViUGFnZU92ZXJsYXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJENUM5RDA0MTlDODFEOEYwMEIzQzVDMSAvKiBXZWJQYWdl
T3ZlcmxheS5oICovOyB9OwogCQkyRDZBQjU0MTE5MkIxQzRBMDAzQTlGRDEgLyogV0tQREZQYWdl
TnVtYmVySW5kaWNhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAyRDZBQjUzRjE5MkIxQzRBMDAzQTlGRDEgLyogV0tQREZQYWdlTnVtYmVySW5kaWNh
dG9yLmggKi87IH07CiAJCTJENkFCNTQyMTkyQjFDNEEwMDNBOUZEMSAvKiBXS1BERlBhZ2VOdW1i
ZXJJbmRpY2F0b3IubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAyRDZBQjU0MDE5MkIxQzRBMDAzQTlGRDEgLyogV0tQREZQYWdlTnVtYmVySW5kaWNhdG9y
Lm1tICovOyB9OwogCQkyRDZCMzcxQjE4QTk2N0FEMDA0MkFFODAgLyogX1dLVGh1bWJuYWlsVmll
dy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkQ2QjM3
MTkxOEE5NjdBRDAwNDJBRTgwIC8qIF9XS1RodW1ibmFpbFZpZXcuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMjI3MSw4ICsyMjY5LDYgQEAKIAkJ
MUE5MEMxRUQxMjY0RkQ1MDAwM0U0NEQ0IC8qIFdlYkZpbmRPcHRpb25zLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkZpbmRPcHRpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTFBOTBDMUYyMTI2NEZENzEwMDNFNDRENCAvKiBGaW5kQ29udHJvbGxlci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGaW5kQ29udHJvbGxlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQTkwQzFGMzEyNjRGRDcxMDAzRTQ0RDQgLyogRmlu
ZENvbnRyb2xsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRmlu
ZENvbnRyb2xsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxQTkwQzIzNTEy
NjUwNzE3MDAzRTQ0RDQgLyogUGFnZU92ZXJsYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gUGFnZU92ZXJsYXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMUE5
MEMyMzYxMjY1MDcxNzAwM0U0NEQ0IC8qIFBhZ2VPdmVybGF5LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBhZ2VPdmVybGF5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMUE5MTAwNkYxMjY2NzVDMzAwMTg0MkY1IC8qIEZpbmRJbmRpY2F0b3IuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmluZEluZGljYXRvci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkxQTkxMDA3MDEyNjY3NUM0MDAxODQyRjUgLyogRmluZElu
ZGljYXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGaW5kSW5k
aWNhdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUE5MkRDMTAxMkY4QkE0
NjAwMTdBRjY1IC8qIExheWVyVHJlZUNvbnRleHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gTGF5ZXJUcmVlQ29udGV4dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtMjU1OCw4ICsyNTU0LDYgQEAKIAkJMjlENTVERjAxNjFCRjlGMTAwMzFBMkUzIC8qIFdlYlBh
Z2VHcm91cFByb3h5TWVzc2FnZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
V2ViUGFnZUdyb3VwUHJveHlNZXNzYWdlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkyRDEyNUM1QzE4NTdFQTA1MDAzQkEzQ0IgLyogVmlld0dlc3R1cmVDb250cm9sbGVyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZpZXdHZXN0dXJlQ29udHJvbGxlci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyRDEyNUM1RDE4NTdFQTA1MDAzQkEzQ0IgLyog
Vmlld0dlc3R1cmVDb250cm9sbGVyTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2Jq
Y3BwOyBwYXRoID0gVmlld0dlc3R1cmVDb250cm9sbGVyTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQkyRDE0MEVBRDE4RjM3QkUwMDA1RTc1QTAgLyogUGFnZU92ZXJsYXlDb250
cm9sbGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBhZ2VPdmVy
bGF5Q29udHJvbGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTJEMTQwRUFF
MThGMzdCRTAwMDVFNzVBMCAvKiBQYWdlT3ZlcmxheUNvbnRyb2xsZXIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gUGFnZU92ZXJsYXlDb250cm9sbGVyLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTJEMUI1RDVBMTg1ODY1OTkwMDZDNjU5NiAvKiBWaWV3R2VzdHVy
ZUNvbnRyb2xsZXIubWVzc2FnZXMuaW4gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gVmlld0dlc3R1cmVDb250cm9sbGVyLm1lc3Nh
Z2VzLmluOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyRDFCNUQ1QjE4NTg2OUM4MDA2
QzY1OTYgLyogVmlld0dlc3R1cmVDb250cm9sbGVyTWVzc2FnZVJlY2VpdmVyLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFZpZXdHZXN0dXJlQ29udHJvbGxlck1lc3Nh
Z2VSZWNlaXZlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJEMUI1RDVDMTg1
ODY5QzgwMDZDNjU5NiAvKiBWaWV3R2VzdHVyZUNvbnRyb2xsZXJNZXNzYWdlcy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWaWV3R2VzdHVyZUNvbnRyb2xsZXJNZXNzYWdlcy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjU4Miw2ICsyNTc2LDggQEAKIAkJMkQ0
MjlCRkIxNzIxRTJCQTAwRUM2ODFGIC8qIFBERlBsdWdpblBhc3N3b3JkRmllbGQubW0gKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBQREZQbHVnaW5QYXNzd29yZEZpZWxk
Lm1tOyBwYXRoID0gUERGL1BERlBsdWdpblBhc3N3b3JkRmllbGQubW07IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTJENDdCNTZBMTgxMDcxNEUwMDNBM0FFRSAvKiBSZW1vdGVMYXllckJh
Y2tpbmdTdG9yZS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFJl
bW90ZUxheWVyQmFja2luZ1N0b3JlLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQky
RDQ3QjU2QjE4MTA3MTRFMDAzQTNBRUUgLyogUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMkQ1QzlEMDMxOUM4MUQ4RjAwQjNDNUMxIC8q
IFdlYlBhZ2VPdmVybGF5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFdlYlBhZ2VPdmVybGF5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMkQ1QzlE
MDQxOUM4MUQ4RjAwQjNDNUMxIC8qIFdlYlBhZ2VPdmVybGF5LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFdlYlBhZ2VPdmVybGF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTJENkFCNTNGMTkyQjFDNEEwMDNBOUZEMSAvKiBXS1BERlBhZ2VOdW1iZXJJbmRpY2F0
b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV0tQREZQYWdlTnVtYmVySW5k
aWNhdG9yLmg7IHBhdGggPSBpb3MvV0tQREZQYWdlTnVtYmVySW5kaWNhdG9yLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJENkFCNTQwMTkyQjFDNEEwMDNBOUZEMSAvKiBXS1BERlBh
Z2VOdW1iZXJJbmRpY2F0b3IubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5h
bWUgPSBXS1BERlBhZ2VOdW1iZXJJbmRpY2F0b3IubW07IHBhdGggPSBpb3MvV0tQREZQYWdlTnVt
YmVySW5kaWNhdG9yLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyRDZCMzcxOTE4
QTk2N0FEMDA0MkFFODAgLyogX1dLVGh1bWJuYWlsVmlldy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBfV0tUaHVtYm5haWxWaWV3Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC01NzAxLDEwICs1Njk3LDggQEAKIAkJCQkxQTkwQzFGMjEyNjRGRDcxMDAzRTQ0RDQg
LyogRmluZENvbnRyb2xsZXIuaCAqLywKIAkJCQk3QzM4NzQzMzE3MkY1NjE1MDAxQkQ4OEEgLyog
UGFnZUJhbm5lci5jcHAgKi8sCiAJCQkJN0NGNDdGRjkxNzI3NUM1NzAwOEFDQjkxIC8qIFBhZ2VC
YW5uZXIuaCAqLywKLQkJCQkxQTkwQzIzNjEyNjUwNzE3MDAzRTQ0RDQgLyogUGFnZU92ZXJsYXku
Y3BwICovLAotCQkJCTFBOTBDMjM1MTI2NTA3MTcwMDNFNDRENCAvKiBQYWdlT3ZlcmxheS5oICov
LAotCQkJCTJEMTQwRUFEMThGMzdCRTAwMDVFNzVBMCAvKiBQYWdlT3ZlcmxheUNvbnRyb2xsZXIu
Y3BwICovLAotCQkJCTJEMTQwRUFFMThGMzdCRTAwMDVFNzVBMCAvKiBQYWdlT3ZlcmxheUNvbnRy
b2xsZXIuaCAqLywKKwkJCQkyRDVDOUQwMzE5QzgxRDhGMDBCM0M1QzEgLyogV2ViUGFnZU92ZXJs
YXkuY3BwICovLAorCQkJCTJENUM5RDA0MTlDODFEOEYwMEIzQzVDMSAvKiBXZWJQYWdlT3Zlcmxh
eS5oICovLAogCQkJCTUxOTJENTcxMTk2MUZBMkYwMENEMTlBQSAvKiBTZXJ2aWNlc092ZXJsYXlD
b250cm9sbGVyLmggKi8sCiAJCQkJMkQ4MTlCOTkxODYyNzVCMzAwMUYwM0QxIC8qIFZpZXdHZXN0
dXJlR2VvbWV0cnlDb2xsZWN0b3IuY3BwICovLAogCQkJCTJEODE5QjlBMTg2Mjc1QjMwMDFGMDNE
MSAvKiBWaWV3R2VzdHVyZUdlb21ldHJ5Q29sbGVjdG9yLmggKi8sCkBAIC03MDQ2LDYgKzcwNDAs
NyBAQAogCQkJCTdDODVGRDgwMTkzNDE2NjUwMDAxNzdDNCAvKiBXZWJQcmVmZXJlbmNlc0tleXMu
aCBpbiBIZWFkZXJzICovLAogCQkJCTUxMkY1ODk3MTJBODgzODgwMDYyOTUzMCAvKiBBdXRoZW50
aWNhdGlvbkNoYWxsZW5nZVByb3h5LmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTQ0NUI5RjE4NEQ1
RkI1MDA0QjM0MTQgLyogV0tDb250ZXh0SW5qZWN0ZWRCdW5kbGVDbGllbnQuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTJENUM5RDA2MTlDODFEOEYwMEIzQzVDMSAvKiBXZWJQYWdlT3ZlcmxheS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNTEyRjU4OTkxMkE4ODM4ODAwNjI5NTMwIC8qIEF1dGhlbnRpY2F0
aW9uRGVjaXNpb25MaXN0ZW5lci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE4RThFRjkxNkIyMDkx
QzAwRTkxNDI5IC8qIEF1dGhlbnRpY2F0aW9uTWFuYWdlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
NTEyRjU4QTMxMkE4ODNBRDAwNjI5NTMwIC8qIEF1dGhlbnRpY2F0aW9uTWFuYWdlck1lc3NhZ2Vz
LmggaW4gSGVhZGVycyAqLywKQEAgLTcxNTMsNyArNzE0OCw2IEBACiAJCQkJMUFFNTJGOTIxOTIw
MURBNzAwQTFGQTM3IC8qIEFQSUNvbnRleHRDb25maWd1cmF0aW9uLmggaW4gSGVhZGVycyAqLywK
IAkJCQk3QzM2MUQ3MzE5MjdGQTM2MDAzNkE1OUQgLyogV2ViU2NyaXB0TWVzc2FnZUhhbmRsZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCUUxMDVGRTU0MThEN0I5REUwMDhGNTdBOCAvKiBFZGl0aW5n
UmFuZ2UuaCBpbiBIZWFkZXJzICovLAotCQkJCTJEMTQwRUIwMThGMzdCRTAwMDVFNzVBMCAvKiBQ
YWdlT3ZlcmxheUNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMTc3NTNGMTE4QkFC
RjAwMDdEOUU5QSAvKiBHZW5lcmljQ2FsbGJhY2suaCBpbiBIZWFkZXJzICovLAogCQkJCTM3OUE4
NzM2MThCQkZBNDMwMDU4OEFGMiAvKiBfV0tBY3RpdmF0ZWRFbGVtZW50SW5mb0ludGVybmFsLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlCQzA2RjQyRjEyREJCOUI2MDAyRDc4REUgLyogR2VvbG9jYXRp
b25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXIuaCBpbiBIZWFkZXJzICovLApAQCAtNzI3Niw3ICs3
MjcwLDYgQEAKIAkJCQkxQTVCMUM1MTE4OTg2MDZGMDA0RkNGOUIgLyogV0tOYXZpZ2F0aW9uLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk3Q0Y0N0ZGQjE3Mjc1QzU3MDA4QUNCOTEgLyogUGFnZUJhbm5l
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM2RURBQTYxMTEyNzFDNjAwRTc2NzhCIC8qIFBhZ2VD
bGllbnQuaCBpbiBIZWFkZXJzICovLAotCQkJCTFBOTBDMjM3MTI2NTA3MTcwMDNFNDRENCAvKiBQ
YWdlT3ZlcmxheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzU3NEE1ODExMkU2NjY4MTAwMkRGRTk4
IC8qIFBhc3RlYm9hcmRUeXBlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTE5NTgyRDMxNTNDQkZE
NzAwQjYwODc1IC8qIFBERktpdEltcG9ydHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBRTAwRDRG
MTgyRDZGNTAwMDA4N0RENyAvKiBXS0Jyb3dzaW5nQ29udGV4dEhhbmRsZUludGVybmFsLmggaW4g
SGVhZGVycyAqLywKQEAgLTg5MjgsNyArODkyMSw2IEBACiAJCQkJNTFFMzUxRjUxODBGNUM3NTAw
RTUzQkU5IC8qIFdlYklEQkZhY3RvcnlCYWNrZW5kLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdD
Mzg3NDM0MTcyRjU2MTUwMDFCRDg4QSAvKiBQYWdlQmFubmVyLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTdDNkQzN0ZDMTcyRjU1NUYwMDlEMjg0NyAvKiBQYWdlQmFubmVyTWFjLm1tIGluIFNvdXJj
ZXMgKi8sCi0JCQkJMUE5MEMyMzgxMjY1MDcxNzAwM0U0NEQ0IC8qIFBhZ2VPdmVybGF5LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUM1NzRBNTgyMTJFNjY2ODEwMDJERkU5OCAvKiBQYXN0ZWJvYXJk
VHlwZXMubW0gaW4gU291cmNlcyAqLywKIAkJCQlFMTk1ODJENjE1M0NDMDU0MDBCNjA4NzUgLyog
UERGS2l0SW1wb3J0cy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTJEODcwRDEwMTYyMzRGRkUwMDBB
M0YyMCAvKiBQREZQbHVnaW4ubW0gaW4gU291cmNlcyAqLywKQEAgLTkxMjgsNyArOTEyMCw2IEBA
CiAJCQkJQTU0MjkzQTUxOTVBNDNERDAwMjc4MkM3IC8qIFdLSW5zcGVjdG9yTm9kZVNlYXJjaEdl
c3R1cmVSZWNvZ25pemVyLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQzAzMzdEQUUxMjdBMjRGRTAw
OEZGNEY0IC8qIFdlYkV2ZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDMDMyREJBMTBGNDM4
MEYwMDU4QzE1QSAvKiBXZWJFdmVudENvbnZlcnNpb24uY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJ
MkQxNDBFQUYxOEYzN0JFMDAwNUU3NUEwIC8qIFBhZ2VPdmVybGF5Q29udHJvbGxlci5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlCQzExMUI1RTExMkY2Mjk4MDAzMzdCQUIgLyogV2ViRXZlbnRGYWN0
b3J5Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQTExOEE5RUUxOTA3QUQ2RjAwRjdDOTJCIC8qIFF1
aWNrTG9va0RvY3VtZW50RGF0YS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQTNERDFGRDEyNUU1
OUYzMDA0NTE1RTYgLyogV2ViRmluZENsaWVudC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTkyMTIs
NiArOTIwMyw3IEBACiAJCQkJQzA2QzYwOTUxMjRDMTQ0QjAwMDE2ODJGIC8qIFdlYlBhZ2VDcmVh
dGlvblBhcmFtZXRlcnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQzU5QzRBNTgxOEI4MTE3NDAw
N0JEQ0I2IC8qIEFzc2lzdGVkTm9kZUluZm9ybWF0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUJDN0I2MjA3MTI5QTBBNjcwMEQxNzRBNCAvKiBXZWJQYWdlR3JvdXAuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJMkQ1QzlEMDUxOUM4MUQ4RjAwQjNDNUMxIC8qIFdlYlBhZ2VPdmVybGF5LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUJDN0I2MjUzMTJBNDNDOTYwMEQxNzRBNCAvKiBXZWJQYWdlR3Jv
dXBEYXRhLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDN0I2MjE2MTJBNDIxOUEwMEQxNzRBNCAv
KiBXZWJQYWdlR3JvdXBQcm94eS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyOUQ1NURGMTE2MUJG
OUYxMDAzMUEyRTMgLyogV2ViUGFnZUdyb3VwUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNv
dXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0FQSS9jL1dLQnVuZGxlQVBJQ2FzdC5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZUFQSUNhc3QuaAppbmRleCBlNjM1NDA4Li4w
ZDViN2M3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0FQSS9jL1dLQnVuZGxlQVBJQ2FzdC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVBUElDYXN0LmgKQEAgLTQ5LDExICs0OSwx
MSBAQCBjbGFzcyBJbmplY3RlZEJ1bmRsZU5vZGVIYW5kbGU7CiBjbGFzcyBJbmplY3RlZEJ1bmRs
ZVJhbmdlSGFuZGxlOwogY2xhc3MgSW5qZWN0ZWRCdW5kbGVTY3JpcHRXb3JsZDsKIGNsYXNzIFBh
Z2VCYW5uZXI7Ci1jbGFzcyBQYWdlT3ZlcmxheTsKIGNsYXNzIFdlYkZyYW1lOwogY2xhc3MgV2Vi
SW5zcGVjdG9yOwogY2xhc3MgV2ViUGFnZTsKIGNsYXNzIFdlYlBhZ2VHcm91cFByb3h5OworY2xh
c3MgV2ViUGFnZU92ZXJsYXk7CiAKIFdLX0FERF9BUElfTUFQUElORyhXS0J1bmRsZUJhY2tGb3J3
YXJkTGlzdEl0ZW1SZWYsIEluamVjdGVkQnVuZGxlQmFja0ZvcndhcmRMaXN0SXRlbSkKIFdLX0FE
RF9BUElfTUFQUElORyhXS0J1bmRsZUJhY2tGb3J3YXJkTGlzdFJlZiwgSW5qZWN0ZWRCdW5kbGVC
YWNrRm9yd2FyZExpc3QpCkBAIC02Niw3ICs2Niw3IEBAIFdLX0FERF9BUElfTUFQUElORyhXS0J1
bmRsZU5hdmlnYXRpb25BY3Rpb25SZWYsIEluamVjdGVkQnVuZGxlTmF2aWdhdGlvbkFjdGlvbikK
IFdLX0FERF9BUElfTUFQUElORyhXS0J1bmRsZU5vZGVIYW5kbGVSZWYsIEluamVjdGVkQnVuZGxl
Tm9kZUhhbmRsZSkKIFdLX0FERF9BUElfTUFQUElORyhXS0J1bmRsZVBhZ2VCYW5uZXJSZWYsIFBh
Z2VCYW5uZXIpCiBXS19BRERfQVBJX01BUFBJTkcoV0tCdW5kbGVQYWdlR3JvdXBSZWYsIFdlYlBh
Z2VHcm91cFByb3h5KQotV0tfQUREX0FQSV9NQVBQSU5HKFdLQnVuZGxlUGFnZU92ZXJsYXlSZWYs
IFBhZ2VPdmVybGF5KQorV0tfQUREX0FQSV9NQVBQSU5HKFdLQnVuZGxlUGFnZU92ZXJsYXlSZWYs
IFdlYlBhZ2VPdmVybGF5KQogV0tfQUREX0FQSV9NQVBQSU5HKFdLQnVuZGxlUGFnZVJlZiwgV2Vi
UGFnZSkKIFdLX0FERF9BUElfTUFQUElORyhXS0J1bmRsZVJhbmdlSGFuZGxlUmVmLCBJbmplY3Rl
ZEJ1bmRsZVJhbmdlSGFuZGxlKQogV0tfQUREX0FQSV9NQVBQSU5HKFdLQnVuZGxlUmVmLCBJbmpl
Y3RlZEJ1bmRsZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVQYWdlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVQYWdlLmNwcAppbmRleCAyMTE0ZjU4Li4y
OTQwNWI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0FQSS9jL1dLQnVuZGxlUGFnZS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZVBhZ2UuY3BwCkBAIC00NywxMiArNDcsMTUg
QEAKICNpbmNsdWRlICJXZWJGdWxsU2NyZWVuTWFuYWdlci5oIgogI2luY2x1ZGUgIldlYkltYWdl
LmgiCiAjaW5jbHVkZSAiV2ViUGFnZS5oIgorI2luY2x1ZGUgIldlYlBhZ2VPdmVybGF5LmgiCiAj
aW5jbHVkZSAiV2ViUmVuZGVyTGF5ZXIuaCIKICNpbmNsdWRlICJXZWJSZW5kZXJPYmplY3QuaCIK
ICNpbmNsdWRlIDxXZWJDb3JlL0FYT2JqZWN0Q2FjaGUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0Fj
Y2Vzc2liaWxpdHlPYmplY3QuaD4KICNpbmNsdWRlIDxXZWJDb3JlL01haW5GcmFtZS5oPgogI2lu
Y2x1ZGUgPFdlYkNvcmUvUGFnZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUGFnZU92ZXJsYXkuaD4K
KyNpbmNsdWRlIDxXZWJDb3JlL1BhZ2VPdmVybGF5Q29udHJvbGxlci5oPgogI2luY2x1ZGUgPFdl
YkNvcmUvVVJMLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogCkBAIC0zNTQsMjIg
KzM1NywyMiBAQCBXS0J1bmRsZUJhY2tGb3J3YXJkTGlzdFJlZiBXS0J1bmRsZVBhZ2VHZXRCYWNr
Rm9yd2FyZExpc3QoV0tCdW5kbGVQYWdlUmVmIHBhZ2VSZQogCiB2b2lkIFdLQnVuZGxlUGFnZUlu
c3RhbGxQYWdlT3ZlcmxheShXS0J1bmRsZVBhZ2VSZWYgcGFnZVJlZiwgV0tCdW5kbGVQYWdlT3Zl
cmxheVJlZiBwYWdlT3ZlcmxheVJlZikKIHsKLSAgICB0b0ltcGwocGFnZVJlZiktPmluc3RhbGxQ
YWdlT3ZlcmxheSh0b0ltcGwocGFnZU92ZXJsYXlSZWYpKTsKKyAgICB0b0ltcGwocGFnZVJlZikt
PmNvcmVQYWdlKCktPnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLmluc3RhbGxQYWdlT3ZlcmxheSh0
b0ltcGwocGFnZU92ZXJsYXlSZWYpLT5jb3JlT3ZlcmxheSgpLCBXZWJDb3JlOjpQYWdlT3Zlcmxh
eTo6RmFkZU1vZGU6OkRvTm90RmFkZSk7CiB9CiAKIHZvaWQgV0tCdW5kbGVQYWdlVW5pbnN0YWxs
UGFnZU92ZXJsYXkoV0tCdW5kbGVQYWdlUmVmIHBhZ2VSZWYsIFdLQnVuZGxlUGFnZU92ZXJsYXlS
ZWYgcGFnZU92ZXJsYXlSZWYpCiB7Ci0gICAgdG9JbXBsKHBhZ2VSZWYpLT51bmluc3RhbGxQYWdl
T3ZlcmxheSh0b0ltcGwocGFnZU92ZXJsYXlSZWYpKTsKKyAgICB0b0ltcGwocGFnZVJlZiktPmNv
cmVQYWdlKCktPnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLnVuaW5zdGFsbFBhZ2VPdmVybGF5KHRv
SW1wbChwYWdlT3ZlcmxheVJlZiktPmNvcmVPdmVybGF5KCksIFdlYkNvcmU6OlBhZ2VPdmVybGF5
OjpGYWRlTW9kZTo6RG9Ob3RGYWRlKTsKIH0KIAogdm9pZCBXS0J1bmRsZVBhZ2VJbnN0YWxsUGFn
ZU92ZXJsYXlXaXRoQW5pbWF0aW9uKFdLQnVuZGxlUGFnZVJlZiBwYWdlUmVmLCBXS0J1bmRsZVBh
Z2VPdmVybGF5UmVmIHBhZ2VPdmVybGF5UmVmKQogewotICAgIHRvSW1wbChwYWdlUmVmKS0+aW5z
dGFsbFBhZ2VPdmVybGF5KHRvSW1wbChwYWdlT3ZlcmxheVJlZiksIFBhZ2VPdmVybGF5OjpGYWRl
TW9kZTo6RmFkZSk7CisgICAgdG9JbXBsKHBhZ2VSZWYpLT5jb3JlUGFnZSgpLT5wYWdlT3Zlcmxh
eUNvbnRyb2xsZXIoKS5pbnN0YWxsUGFnZU92ZXJsYXkodG9JbXBsKHBhZ2VPdmVybGF5UmVmKS0+
Y29yZU92ZXJsYXkoKSwgV2ViQ29yZTo6UGFnZU92ZXJsYXk6OkZhZGVNb2RlOjpGYWRlKTsKIH0K
IAogdm9pZCBXS0J1bmRsZVBhZ2VVbmluc3RhbGxQYWdlT3ZlcmxheVdpdGhBbmltYXRpb24oV0tC
dW5kbGVQYWdlUmVmIHBhZ2VSZWYsIFdLQnVuZGxlUGFnZU92ZXJsYXlSZWYgcGFnZU92ZXJsYXlS
ZWYpCiB7Ci0gICAgdG9JbXBsKHBhZ2VSZWYpLT51bmluc3RhbGxQYWdlT3ZlcmxheSh0b0ltcGwo
cGFnZU92ZXJsYXlSZWYpLCBQYWdlT3ZlcmxheTo6RmFkZU1vZGU6OkZhZGUpOworICAgIHRvSW1w
bChwYWdlUmVmKS0+Y29yZVBhZ2UoKS0+cGFnZU92ZXJsYXlDb250cm9sbGVyKCkudW5pbnN0YWxs
UGFnZU92ZXJsYXkodG9JbXBsKHBhZ2VPdmVybGF5UmVmKS0+Y29yZU92ZXJsYXkoKSwgV2ViQ29y
ZTo6UGFnZU92ZXJsYXk6OkZhZGVNb2RlOjpGYWRlKTsKIH0KIAogdm9pZCBXS0J1bmRsZVBhZ2VT
ZXRUb3BPdmVyaGFuZ0ltYWdlKFdLQnVuZGxlUGFnZVJlZiBwYWdlUmVmLCBXS0ltYWdlUmVmIGlt
YWdlUmVmKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvYy9XS0J1bmRsZVBhZ2VPdmVybGF5LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVQYWdlT3ZlcmxheS5jcHAKaW5kZXgg
YmJhODYyNi4uMTNjMzE2YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZVBhZ2VPdmVybGF5LmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlUGFnZU92ZXJs
YXkuY3BwCkBAIC0yNywxMCArMjcsMTcgQEAKICNpbmNsdWRlICJXS0J1bmRsZVBhZ2VPdmVybGF5
LmgiCiAKICNpbmNsdWRlICJBUElDbGllbnQuaCIKLSNpbmNsdWRlICJQYWdlT3ZlcmxheS5oIgog
I2luY2x1ZGUgIldLQVBJQ2FzdC5oIgorI2luY2x1ZGUgIldLQXJyYXkuaCIKICNpbmNsdWRlICJX
S0J1bmRsZUFQSUNhc3QuaCIKKyNpbmNsdWRlICJXS051bWJlci5oIgorI2luY2x1ZGUgIldLUmV0
YWluUHRyLmgiCisjaW5jbHVkZSAiV0tTaGFyZWRBUElDYXN0LmgiCisjaW5jbHVkZSAiV0tTdHJp
bmdQcml2YXRlLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHQuaD4KKyNpbmNs
dWRlIDxXZWJDb3JlL1BhZ2VPdmVybGF5Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9QbGF0Zm9ybU1v
dXNlRXZlbnQuaD4KKyNpbmNsdWRlIDxXZWJLaXQvV2ViUGFnZU92ZXJsYXkuaD4KIAogbmFtZXNw
YWNlIEFQSSB7CiAKQEAgLTQ3LDcgKzU0LDcgQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgQ2xpZW50VHJh
aXRzPFdLQnVuZGxlUGFnZU92ZXJsYXlBY2Nlc3NpYmlsaXR5Q2xpZW50QmFzZT4gewogdXNpbmcg
bmFtZXNwYWNlIFdlYkNvcmU7CiB1c2luZyBuYW1lc3BhY2UgV2ViS2l0OwogCi1jbGFzcyBQYWdl
T3ZlcmxheUNsaWVudEltcGwgOiBBUEk6OkNsaWVudDxXS0J1bmRsZVBhZ2VPdmVybGF5Q2xpZW50
QmFzZT4sIHB1YmxpYyBQYWdlT3ZlcmxheTo6Q2xpZW50IHsKK2NsYXNzIFBhZ2VPdmVybGF5Q2xp
ZW50SW1wbCA6IEFQSTo6Q2xpZW50PFdLQnVuZGxlUGFnZU92ZXJsYXlDbGllbnRCYXNlPiwgcHVi
bGljIFdlYlBhZ2VPdmVybGF5OjpDbGllbnQgewogcHVibGljOgogICAgIGV4cGxpY2l0IFBhZ2VP
dmVybGF5Q2xpZW50SW1wbChXS0J1bmRsZVBhZ2VPdmVybGF5Q2xpZW50QmFzZSogY2xpZW50KQog
ICAgIHsKQEAgLTYwLDEzICs2NywxMyBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgotICAg
IC8vIFBhZ2VPdmVybGF5OjpDbGllbnQuCi0gICAgdmlydHVhbCB2b2lkIHBhZ2VPdmVybGF5RGVz
dHJveWVkKFBhZ2VPdmVybGF5KikKKyAgICAvLyBXZWJQYWdlT3ZlcmxheTo6Q2xpZW50LgorICAg
IHZpcnR1YWwgdm9pZCBwYWdlT3ZlcmxheURlc3Ryb3llZChXZWJQYWdlT3ZlcmxheSopIG92ZXJy
aWRlCiAgICAgewogICAgICAgICBkZWxldGUgdGhpczsKICAgICB9CiAKLSAgICB2aXJ0dWFsIHZv
aWQgd2lsbE1vdmVUb1dlYlBhZ2UoUGFnZU92ZXJsYXkqIHBhZ2VPdmVybGF5LCBXZWJQYWdlKiBw
YWdlKQorICAgIHZpcnR1YWwgdm9pZCB3aWxsTW92ZVRvUGFnZShXZWJQYWdlT3ZlcmxheSogcGFn
ZU92ZXJsYXksIFdlYlBhZ2UqIHBhZ2UpIG92ZXJyaWRlCiAgICAgewogICAgICAgICBpZiAoIW1f
Y2xpZW50LndpbGxNb3ZlVG9QYWdlKQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtNzQsNyArODEs
NyBAQCBwcml2YXRlOgogICAgICAgICBtX2NsaWVudC53aWxsTW92ZVRvUGFnZSh0b0FQSShwYWdl
T3ZlcmxheSksIHRvQVBJKHBhZ2UpLCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pOwogICAgIH0K
ICAgICAKLSAgICB2aXJ0dWFsIHZvaWQgZGlkTW92ZVRvV2ViUGFnZShQYWdlT3ZlcmxheSogcGFn
ZU92ZXJsYXksIFdlYlBhZ2UqIHBhZ2UpCisgICAgdmlydHVhbCB2b2lkIGRpZE1vdmVUb1BhZ2Uo
V2ViUGFnZU92ZXJsYXkqIHBhZ2VPdmVybGF5LCBXZWJQYWdlKiBwYWdlKSBvdmVycmlkZQogICAg
IHsKICAgICAgICAgaWYgKCFtX2NsaWVudC5kaWRNb3ZlVG9QYWdlKQogICAgICAgICAgICAgcmV0
dXJuOwpAQCAtODIsNyArODksNyBAQCBwcml2YXRlOgogICAgICAgICBtX2NsaWVudC5kaWRNb3Zl
VG9QYWdlKHRvQVBJKHBhZ2VPdmVybGF5KSwgdG9BUEkocGFnZSksIG1fY2xpZW50LmJhc2UuY2xp
ZW50SW5mbyk7CiAgICAgfQogCi0gICAgdmlydHVhbCB2b2lkIGRyYXdSZWN0KFBhZ2VPdmVybGF5
KiBwYWdlT3ZlcmxheSwgR3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQsIGNvbnN0IElu
dFJlY3QmIGRpcnR5UmVjdCkKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd1JlY3QoV2ViUGFnZU92ZXJs
YXkqIHBhZ2VPdmVybGF5LCBHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgY29uc3Qg
SW50UmVjdCYgZGlydHlSZWN0KSBvdmVycmlkZQogICAgIHsKICAgICAgICAgaWYgKCFtX2NsaWVu
dC5kcmF3UmVjdCkKICAgICAgICAgICAgIHJldHVybjsKQEAgLTkwLDIzICs5NywyMyBAQCBwcml2
YXRlOgogICAgICAgICBtX2NsaWVudC5kcmF3UmVjdCh0b0FQSShwYWdlT3ZlcmxheSksIGdyYXBo
aWNzQ29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKSwgdG9BUEkoZGlydHlSZWN0KSwgbV9jbGllbnQu
YmFzZS5jbGllbnRJbmZvKTsKICAgICB9CiAgICAgCi0gICAgdmlydHVhbCBib29sIG1vdXNlRXZl
bnQoUGFnZU92ZXJsYXkqIHBhZ2VPdmVybGF5LCBjb25zdCBXZWJNb3VzZUV2ZW50JiBldmVudCkK
KyAgICB2aXJ0dWFsIGJvb2wgbW91c2VFdmVudChXZWJQYWdlT3ZlcmxheSogcGFnZU92ZXJsYXks
IGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgZXZlbnQpIG92ZXJyaWRlCiAgICAgewogICAgICAg
ICBzd2l0Y2ggKGV2ZW50LnR5cGUoKSkgewotICAgICAgICBjYXNlIFdlYkV2ZW50OjpNb3VzZURv
d246IHsKKyAgICAgICAgY2FzZSBQbGF0Zm9ybU1vdXNlRXZlbnQ6OlR5cGU6Ok1vdXNlUHJlc3Nl
ZDogewogICAgICAgICAgICAgaWYgKCFtX2NsaWVudC5tb3VzZURvd24pCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgICAgICByZXR1cm4gbV9jbGllbnQubW91c2VEb3du
KHRvQVBJKHBhZ2VPdmVybGF5KSwgdG9BUEkoZXZlbnQucG9zaXRpb24oKSksIHRvQVBJKGV2ZW50
LmJ1dHRvbigpKSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKICAgICAgICAgfQotICAgICAg
ICBjYXNlIFdlYkV2ZW50OjpNb3VzZVVwOiB7CisgICAgICAgIGNhc2UgUGxhdGZvcm1Nb3VzZUV2
ZW50OjpUeXBlOjpNb3VzZVJlbGVhc2VkOiB7CiAgICAgICAgICAgICBpZiAoIW1fY2xpZW50Lm1v
dXNlVXApCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgICAgICByZXR1
cm4gbV9jbGllbnQubW91c2VVcCh0b0FQSShwYWdlT3ZlcmxheSksIHRvQVBJKGV2ZW50LnBvc2l0
aW9uKCkpLCB0b0FQSShldmVudC5idXR0b24oKSksIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7
CiAgICAgICAgIH0KLSAgICAgICAgY2FzZSBXZWJFdmVudDo6TW91c2VNb3ZlOiB7Ci0gICAgICAg
ICAgICBpZiAoZXZlbnQuYnV0dG9uKCkgPT0gV2ViTW91c2VFdmVudDo6Tm9CdXR0b24pIHsKKyAg
ICAgICAgY2FzZSBQbGF0Zm9ybU1vdXNlRXZlbnQ6OlR5cGU6Ok1vdXNlTW92ZWQ6IHsKKyAgICAg
ICAgICAgIGlmIChldmVudC5idXR0b24oKSA9PSBNb3VzZUJ1dHRvbjo6Tm9CdXR0b24pIHsKICAg
ICAgICAgICAgICAgICBpZiAoIW1fY2xpZW50Lm1vdXNlTW92ZWQpCiAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKIApAQCAtMTI1LDE4ICsxMzIsNDMgQEAgcHJpdmF0ZToKICAgICAg
ICAgfQogICAgIH0KICAgICAKLSAgICB2aXJ0dWFsIFdLVHlwZVJlZiBjb3B5QWNjZXNzaWJpbGl0
eUF0dHJpYnV0ZVZhbHVlKFBhZ2VPdmVybGF5KiBwYWdlT3ZlcmxheSwgV0tTdHJpbmdSZWYgYXR0
cmlidXRlLCBXS1R5cGVSZWYgcGFyYW1ldGVyKQorICAgIHZpcnR1YWwgYm9vbCBjb3B5QWNjZXNz
aWJpbGl0eUF0dHJpYnV0ZVN0cmluZ1ZhbHVlRm9yUG9pbnQoV2ViUGFnZU92ZXJsYXkqIHBhZ2VP
dmVybGF5LCBTdHJpbmcgYXR0cmlidXRlLCBXZWJDb3JlOjpGbG9hdFBvaW50IHBhcmFtZXRlciwg
U3RyaW5nJiB2YWx1ZSkgb3ZlcnJpZGUKICAgICB7CiAgICAgICAgIGlmICghbV9hY2Nlc3NpYmls
aXR5Q2xpZW50LmNsaWVudCgpLmNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWUpCi0gICAg
ICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgcmV0dXJuIG1fYWNjZXNzaWJpbGl0eUNsaWVudC5j
bGllbnQoKS5jb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlKHRvQVBJKHBhZ2VPdmVybGF5
KSwgYXR0cmlidXRlLCBwYXJhbWV0ZXIsIG1fYWNjZXNzaWJpbGl0eUNsaWVudC5jbGllbnQoKS5i
YXNlLmNsaWVudEluZm8pOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBXS1Jl
dGFpblB0cjxXS1R5cGVSZWY+IHdrVHlwZSA9IG1fYWNjZXNzaWJpbGl0eUNsaWVudC5jbGllbnQo
KS5jb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlKHRvQVBJKHBhZ2VPdmVybGF5KSwgdG9D
b3BpZWRBUEkoYXR0cmlidXRlKSwgV0tQb2ludENyZWF0ZShXS1BvaW50TWFrZShwYXJhbWV0ZXIu
eCgpLCBwYXJhbWV0ZXIueSgpKSksIG1fYWNjZXNzaWJpbGl0eUNsaWVudC5jbGllbnQoKS5iYXNl
LmNsaWVudEluZm8pOworICAgICAgICBpZiAodG9JbXBsKHdrVHlwZS5nZXQoKSktPnR5cGUoKSAh
PSBBUEk6OlN0cmluZzo6QVBJVHlwZSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgdmFsdWUgPSB0b1dURlN0cmluZyhzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4od2tUeXBlLmdl
dCgpKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHZpcnR1YWwgYm9vbCBj
b3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZUJvb2xWYWx1ZUZvclBvaW50KFdlYlBhZ2VPdmVybGF5
KiBwYWdlT3ZlcmxheSwgU3RyaW5nIGF0dHJpYnV0ZSwgV2ViQ29yZTo6RmxvYXRQb2ludCBwYXJh
bWV0ZXIsIGJvb2wmIHZhbHVlKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKCFtX2FjY2Vz
c2liaWxpdHlDbGllbnQuY2xpZW50KCkuY29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZSkK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgV0tSZXRhaW5QdHI8V0tUeXBlUmVm
PiB3a1R5cGUgPSBtX2FjY2Vzc2liaWxpdHlDbGllbnQuY2xpZW50KCkuY29weUFjY2Vzc2liaWxp
dHlBdHRyaWJ1dGVWYWx1ZSh0b0FQSShwYWdlT3ZlcmxheSksIHRvQ29waWVkQVBJKGF0dHJpYnV0
ZSksIFdLUG9pbnRDcmVhdGUoV0tQb2ludE1ha2UocGFyYW1ldGVyLngoKSwgcGFyYW1ldGVyLnko
KSkpLCBtX2FjY2Vzc2liaWxpdHlDbGllbnQuY2xpZW50KCkuYmFzZS5jbGllbnRJbmZvKTsKKyAg
ICAgICAgaWYgKHRvSW1wbCh3a1R5cGUuZ2V0KCkpLT50eXBlKCkgIT0gQVBJOjpCb29sZWFuOjpB
UElUeXBlKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB2YWx1ZSA9IFdLQm9v
bGVhbkdldFZhbHVlKHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4od2tUeXBlLmdldCgpKSk7Cisg
ICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIHZpcnR1YWwgV0tBcnJheVJlZiBjb3B5
QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZU5hbWVzKFBhZ2VPdmVybGF5KiBwYWdlT3ZlcmxheSwgYm9v
bCBwYXJhbWVyaXplZE5hbWVzKQorICAgIHZpcnR1YWwgVmVjdG9yPFN0cmluZz4gY29weUFjY2Vz
c2liaWxpdHlBdHRyaWJ1dGVOYW1lcyhXZWJQYWdlT3ZlcmxheSogcGFnZU92ZXJsYXksIGJvb2wg
cGFyYW1lcml6ZWROYW1lcykgb3ZlcnJpZGUKICAgICB7CisgICAgICAgIFZlY3RvcjxTdHJpbmc+
IG5hbWVzOwogICAgICAgICBpZiAoIW1fYWNjZXNzaWJpbGl0eUNsaWVudC5jbGllbnQoKS5jb3B5
QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZU5hbWVzKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAg
ICAgIHJldHVybiBtX2FjY2Vzc2liaWxpdHlDbGllbnQuY2xpZW50KCkuY29weUFjY2Vzc2liaWxp
dHlBdHRyaWJ1dGVOYW1lcyh0b0FQSShwYWdlT3ZlcmxheSksIHBhcmFtZXJpemVkTmFtZXMsIG1f
YWNjZXNzaWJpbGl0eUNsaWVudC5jbGllbnQoKS5iYXNlLmNsaWVudEluZm8pOworICAgICAgICAg
ICAgcmV0dXJuIG5hbWVzOworICAgICAgICBXS1JldGFpblB0cjxXS0FycmF5UmVmPiB3a05hbWVz
ID0gbV9hY2Nlc3NpYmlsaXR5Q2xpZW50LmNsaWVudCgpLmNvcHlBY2Nlc3NpYmlsaXR5QXR0cmli
dXRlTmFtZXModG9BUEkocGFnZU92ZXJsYXkpLCBwYXJhbWVyaXplZE5hbWVzLCBtX2FjY2Vzc2li
aWxpdHlDbGllbnQuY2xpZW50KCkuYmFzZS5jbGllbnRJbmZvKTsKKworICAgICAgICBzaXplX3Qg
Y291bnQgPSBXS0FycmF5R2V0U2l6ZSh3a05hbWVzLmdldCgpKTsKKyAgICAgICAgZm9yIChzaXpl
X3QgayA9IDA7IGsgPCBjb3VudDsgaysrKSB7CisgICAgICAgICAgICBXS1R5cGVSZWYgaXRlbSA9
IFdLQXJyYXlHZXRJdGVtQXRJbmRleCh3a05hbWVzLmdldCgpLCBrKTsKKyAgICAgICAgICAgIGlm
ICh0b0ltcGwoaXRlbSktPnR5cGUoKSA9PSBBUEk6OlN0cmluZzo6QVBJVHlwZSkKKyAgICAgICAg
ICAgICAgICBuYW1lcy5hcHBlbmQodG9XVEZTdHJpbmcoc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+
KGl0ZW0pKSk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gbmFtZXM7CiAgICAgfQogICAg
IAogICAgIEFQSTo6Q2xpZW50PFdLQnVuZGxlUGFnZU92ZXJsYXlBY2Nlc3NpYmlsaXR5Q2xpZW50
QmFzZT4gbV9hY2Nlc3NpYmlsaXR5Q2xpZW50OwpAQCAtMTQ0LDcgKzE3Niw3IEBAIHByaXZhdGU6
CiAKIFdLVHlwZUlEIFdLQnVuZGxlUGFnZU92ZXJsYXlHZXRUeXBlSUQoKQogewotICAgIHJldHVy
biB0b0FQSShQYWdlT3ZlcmxheTo6QVBJVHlwZSk7CisgICAgcmV0dXJuIHRvQVBJKFdlYlBhZ2VP
dmVybGF5OjpBUElUeXBlKTsKIH0KIAogV0tCdW5kbGVQYWdlT3ZlcmxheVJlZiBXS0J1bmRsZVBh
Z2VPdmVybGF5Q3JlYXRlKFdLQnVuZGxlUGFnZU92ZXJsYXlDbGllbnRCYXNlKiB3a0NsaWVudCkK
QEAgLTE1NSw3ICsxODcsNyBAQCBXS0J1bmRsZVBhZ2VPdmVybGF5UmVmIFdLQnVuZGxlUGFnZU92
ZXJsYXlDcmVhdGUoV0tCdW5kbGVQYWdlT3ZlcmxheUNsaWVudEJhc2UqCiAgICAgYXV0byBjbGll
bnRJbXBsID0gc3RkOjptYWtlX3VuaXF1ZTxQYWdlT3ZlcmxheUNsaWVudEltcGw+KHdrQ2xpZW50
KTsKIAogICAgIC8vIEZJWE1FOiBMb29rcyBsaWtlIHRoaXMgbGVha3MgdGhlIGNsaWVudEltcGwu
Ci0gICAgcmV0dXJuIHRvQVBJKFBhZ2VPdmVybGF5OjpjcmVhdGUoY2xpZW50SW1wbC5yZWxlYXNl
KCkpLmxlYWtSZWYoKSk7CisgICAgcmV0dXJuIHRvQVBJKFdlYlBhZ2VPdmVybGF5OjpjcmVhdGUo
Y2xpZW50SW1wbC5yZWxlYXNlKCkpLmxlYWtSZWYoKSk7CiB9CiAKIHZvaWQgV0tCdW5kbGVQYWdl
T3ZlcmxheVNldEFjY2Vzc2liaWxpdHlDbGllbnQoV0tCdW5kbGVQYWdlT3ZlcmxheVJlZiBidW5k
bGVQYWdlT3ZlcmxheVJlZiwgV0tCdW5kbGVQYWdlT3ZlcmxheUFjY2Vzc2liaWxpdHlDbGllbnRC
YXNlKiBjbGllbnQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNv
cmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAKaW5kZXggYzJkNTExMDcuLmEyMDk3
YjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQv
V2ViQ2hyb21lQ2xpZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNv
cmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAKQEAgLTg0MCw3ICs4NDAsOSBAQCBQYXNzUmVm
UHRyPFdlYkNvcmU6OlNlYXJjaFBvcHVwTWVudT4gV2ViQ2hyb21lQ2xpZW50OjpjcmVhdGVTZWFy
Y2hQb3B1cE1lbnUoV2ViQwogCiBHcmFwaGljc0xheWVyRmFjdG9yeSogV2ViQ2hyb21lQ2xpZW50
OjpncmFwaGljc0xheWVyRmFjdG9yeSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fcGFnZS0+ZHJh
d2luZ0FyZWEoKS0+Z3JhcGhpY3NMYXllckZhY3RvcnkoKTsKKyAgICBpZiAoYXV0byBkcmF3aW5n
QXJlYSA9IG1fcGFnZS0+ZHJhd2luZ0FyZWEoKSkKKyAgICAgICAgcmV0dXJuIGRyYXdpbmdBcmVh
LT5ncmFwaGljc0xheWVyRmFjdG9yeSgpOworICAgIHJldHVybiBudWxscHRyOwogfQogCiAjaWYg
VVNFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FX0RJU1BMQVlfTU9OSVRPUikKQEAgLTg1OCwxMiAr
ODYwLDEwIEBAIHZvaWQgV2ViQ2hyb21lQ2xpZW50OjphdHRhY2hSb290R3JhcGhpY3NMYXllcihG
cmFtZSosIEdyYXBoaWNzTGF5ZXIqIGxheWVyKQogICAgICAgICBtX3BhZ2UtPmV4aXRBY2NlbGVy
YXRlZENvbXBvc2l0aW5nTW9kZSgpOwogfQogCi1HcmFwaGljc0xheWVyKiBXZWJDaHJvbWVDbGll
bnQ6OmRvY3VtZW50T3ZlcmxheUxheWVyRm9yRnJhbWUoRnJhbWUmIGZyYW1lKQordm9pZCBXZWJD
aHJvbWVDbGllbnQ6OmF0dGFjaFZpZXdPdmVybGF5R3JhcGhpY3NMYXllcihGcmFtZSogZnJhbWUs
IEdyYXBoaWNzTGF5ZXIqIGdyYXBoaWNzTGF5ZXIpCiB7Ci0gICAgaWYgKCZmcmFtZSA9PSAmbV9w
YWdlLT5jb3JlUGFnZSgpLT5tYWluRnJhbWUoKSkKLSAgICAgICAgcmV0dXJuIG1fcGFnZS0+cGFn
ZU92ZXJsYXlDb250cm9sbGVyKCkuZG9jdW1lbnRPdmVybGF5Um9vdExheWVyKCk7Ci0KLSAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICBpZiAoYXV0byBkcmF3aW5nQXJlYSA9IG1fcGFnZS0+ZHJhd2lu
Z0FyZWEoKSkKKyAgICAgICAgZHJhd2luZ0FyZWEtPmF0dGFjaFZpZXdPdmVybGF5R3JhcGhpY3NM
YXllcihmcmFtZSwgZ3JhcGhpY3NMYXllcik7CiB9CiAKIHZvaWQgV2ViQ2hyb21lQ2xpZW50Ojpz
ZXROZWVkc09uZVNob3REcmF3aW5nU3luY2hyb25pemF0aW9uKCkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmggYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5o
CmluZGV4IDk4MmVhYWUuLmQwZTUzODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgKKysrIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaApAQCAtMjE1LDEw
ICsyMTUsMTAgQEAgcHJpdmF0ZToKIAogICAgIHZpcnR1YWwgV2ViQ29yZTo6R3JhcGhpY3NMYXll
ckZhY3RvcnkqIGdyYXBoaWNzTGF5ZXJGYWN0b3J5KCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdmly
dHVhbCB2b2lkIGF0dGFjaFJvb3RHcmFwaGljc0xheWVyKFdlYkNvcmU6OkZyYW1lKiwgV2ViQ29y
ZTo6R3JhcGhpY3NMYXllciopIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBhdHRhY2hWaWV3
T3ZlcmxheUdyYXBoaWNzTGF5ZXIoV2ViQ29yZTo6RnJhbWUqLCBXZWJDb3JlOjpHcmFwaGljc0xh
eWVyKikgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzT25lU2hvdERyYXdpbmdT
eW5jaHJvbml6YXRpb24oKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVDb21w
b3NpdGluZ0xheWVyRmx1c2goKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIGJvb2wgYWRqdXN0TGF5
ZXJGbHVzaFRocm90dGxpbmcoV2ViQ29yZTo6TGF5ZXJGbHVzaFRocm90dGxlU3RhdGU6OkZsYWdz
KSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqIGRvY3VtZW50
T3ZlcmxheUxheWVyRm9yRnJhbWUoV2ViQ29yZTo6RnJhbWUmKSBvdmVycmlkZTsKIAogI2lmIFVT
RShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRV9ESVNQTEFZX01PTklUT1IpCiAgICAgdmlydHVhbCBQ
YXNzUmVmUHRyPFdlYkNvcmU6OkRpc3BsYXlSZWZyZXNoTW9uaXRvcj4gY3JlYXRlRGlzcGxheVJl
ZnJlc2hNb25pdG9yKFBsYXRmb3JtRGlzcGxheUlEKSBjb25zdCBvdmVycmlkZTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9y
Q2xpZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2Vi
SW5zcGVjdG9yQ2xpZW50LmNwcAppbmRleCA4NTkzNThiLi44OGNlMjJjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckNsaWVu
dC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJJ
bnNwZWN0b3JDbGllbnQuY3BwCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiV2ViUGFnZS5o
IgogI2luY2x1ZGUgPFdlYkNvcmUvSW5zcGVjdG9yQ29udHJvbGxlci5oPgogI2luY2x1ZGUgPFdl
YkNvcmUvUGFnZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUGFnZU92ZXJsYXlDb250cm9sbGVyLmg+
CiAjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CiAKICNpZiBQTEFURk9STShJT1MpCkBAIC03
Myw3ICs3NCw3IEBAIFdlYkluc3BlY3RvckNsaWVudDo6fldlYkluc3BlY3RvckNsaWVudCgpCiAg
ICAgfQogCiAgICAgaWYgKG1fcGFpbnRSZWN0T3ZlcmxheSkKLSAgICAgICAgbV9wYWdlLT51bmlu
c3RhbGxQYWdlT3ZlcmxheShtX3BhaW50UmVjdE92ZXJsYXkuZ2V0KCkpOworICAgICAgICBtX3Bh
Z2UtPmNvcmVQYWdlKCktPnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLnVuaW5zdGFsbFBhZ2VPdmVy
bGF5KG1fcGFpbnRSZWN0T3ZlcmxheS5nZXQoKSwgUGFnZU92ZXJsYXk6OkZhZGVNb2RlOjpGYWRl
KTsKIH0KIAogdm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6Omluc3BlY3RvckRlc3Ryb3llZCgpCkBA
IC0xMTMsNyArMTE0LDcgQEAgdm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6OmhpZ2hsaWdodCgpCiAg
ICAgaWYgKCFtX2hpZ2hsaWdodE92ZXJsYXkpIHsKICAgICAgICAgUmVmUHRyPFBhZ2VPdmVybGF5
PiBoaWdobGlnaHRPdmVybGF5ID0gUGFnZU92ZXJsYXk6OmNyZWF0ZSh0aGlzKTsKICAgICAgICAg
bV9oaWdobGlnaHRPdmVybGF5ID0gaGlnaGxpZ2h0T3ZlcmxheS5nZXQoKTsKLSAgICAgICAgbV9w
YWdlLT5pbnN0YWxsUGFnZU92ZXJsYXkoaGlnaGxpZ2h0T3ZlcmxheS5yZWxlYXNlKCksIFBhZ2VP
dmVybGF5OjpGYWRlTW9kZTo6RmFkZSk7CisgICAgICAgIG1fcGFnZS0+Y29yZVBhZ2UoKS0+cGFn
ZU92ZXJsYXlDb250cm9sbGVyKCkuaW5zdGFsbFBhZ2VPdmVybGF5KGhpZ2hsaWdodE92ZXJsYXku
cmVsZWFzZSgpLCBQYWdlT3ZlcmxheTo6RmFkZU1vZGU6OkZhZGUpOwogICAgICAgICBtX2hpZ2hs
aWdodE92ZXJsYXktPnNldE5lZWRzRGlzcGxheSgpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIG1f
aGlnaGxpZ2h0T3ZlcmxheS0+c3RvcEZhZGVPdXRBbmltYXRpb24oKTsKQEAgLTEzMCw3ICsxMzEs
NyBAQCB2b2lkIFdlYkluc3BlY3RvckNsaWVudDo6aGlkZUhpZ2hsaWdodCgpCiB7CiAjaWYgIVBM
QVRGT1JNKElPUykKICAgICBpZiAobV9oaWdobGlnaHRPdmVybGF5KQotICAgICAgICBtX3BhZ2Ut
PnVuaW5zdGFsbFBhZ2VPdmVybGF5KG1faGlnaGxpZ2h0T3ZlcmxheSwgUGFnZU92ZXJsYXk6OkZh
ZGVNb2RlOjpGYWRlKTsKKyAgICAgICAgbV9wYWdlLT5jb3JlUGFnZSgpLT5wYWdlT3ZlcmxheUNv
bnRyb2xsZXIoKS51bmluc3RhbGxQYWdlT3ZlcmxheShtX2hpZ2hsaWdodE92ZXJsYXksIFBhZ2VP
dmVybGF5OjpGYWRlTW9kZTo6RmFkZSk7CiAjZWxzZQogICAgIG1fcGFnZS0+aGlkZUluc3BlY3Rv
ckhpZ2hsaWdodCgpOwogI2VuZGlmCkBAIC0xNDAsNyArMTQxLDcgQEAgdm9pZCBXZWJJbnNwZWN0
b3JDbGllbnQ6OnNob3dQYWludFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewogICAgIGlm
ICghbV9wYWludFJlY3RPdmVybGF5KSB7CiAgICAgICAgIG1fcGFpbnRSZWN0T3ZlcmxheSA9IFBh
Z2VPdmVybGF5OjpjcmVhdGUodGhpcywgUGFnZU92ZXJsYXk6Ok92ZXJsYXlUeXBlOjpEb2N1bWVu
dCk7Ci0gICAgICAgIG1fcGFnZS0+aW5zdGFsbFBhZ2VPdmVybGF5KG1fcGFpbnRSZWN0T3Zlcmxh
eSwgUGFnZU92ZXJsYXk6OkZhZGVNb2RlOjpEb05vdEZhZGUpOworICAgICAgICBtX3BhZ2UtPmNv
cmVQYWdlKCktPnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLmluc3RhbGxQYWdlT3ZlcmxheShtX3Bh
aW50UmVjdE92ZXJsYXksIFBhZ2VPdmVybGF5OjpGYWRlTW9kZTo6RG9Ob3RGYWRlKTsKICAgICB9
CiAKICAgICBpZiAoIW1fcGFpbnRJbmRpY2F0b3JMYXllckNsaWVudCkKQEAgLTIwMiw5ICsyMDMs
OSBAQCB2b2lkIFdlYkluc3BlY3RvckNsaWVudDo6cGFnZU92ZXJsYXlEZXN0cm95ZWQoUGFnZU92
ZXJsYXkqKQogewogfQogCi12b2lkIFdlYkluc3BlY3RvckNsaWVudDo6d2lsbE1vdmVUb1dlYlBh
Z2UoUGFnZU92ZXJsYXkqLCBXZWJQYWdlKiB3ZWJQYWdlKQordm9pZCBXZWJJbnNwZWN0b3JDbGll
bnQ6OndpbGxNb3ZlVG9QYWdlKFBhZ2VPdmVybGF5KiwgUGFnZSogcGFnZSkKIHsKLSAgICBpZiAo
d2ViUGFnZSkKKyAgICBpZiAocGFnZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gVGhlIHBh
Z2Ugb3ZlcmxheSBpcyBtb3ZpbmcgYXdheSBmcm9tIHRoZSB3ZWIgcGFnZSwgcmVzZXQgaXQuCkBA
IC0yMTIsNyArMjEzLDcgQEAgdm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6OndpbGxNb3ZlVG9XZWJQ
YWdlKFBhZ2VPdmVybGF5KiwgV2ViUGFnZSogd2ViUGFnZSkKICAgICBtX2hpZ2hsaWdodE92ZXJs
YXkgPSAwOwogfQogCi12b2lkIFdlYkluc3BlY3RvckNsaWVudDo6ZGlkTW92ZVRvV2ViUGFnZShQ
YWdlT3ZlcmxheSosIFdlYlBhZ2UqKQordm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6OmRpZE1vdmVU
b1BhZ2UoUGFnZU92ZXJsYXkqLCBQYWdlKikKIHsKIH0KIApAQCAtMjIxLDcgKzIyMiw3IEBAIHZv
aWQgV2ViSW5zcGVjdG9yQ2xpZW50OjpkcmF3UmVjdChQYWdlT3ZlcmxheSosIFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dCYgY29udGV4CiAgICAgbV9wYWdlLT5jb3JlUGFnZSgpLT5pbnNwZWN0b3JD
b250cm9sbGVyKCkuZHJhd0hpZ2hsaWdodChjb250ZXh0KTsKIH0KIAotYm9vbCBXZWJJbnNwZWN0
b3JDbGllbnQ6Om1vdXNlRXZlbnQoUGFnZU92ZXJsYXkqLCBjb25zdCBXZWJNb3VzZUV2ZW50JikK
K2Jvb2wgV2ViSW5zcGVjdG9yQ2xpZW50Ojptb3VzZUV2ZW50KFBhZ2VPdmVybGF5KiwgY29uc3Qg
UGxhdGZvcm1Nb3VzZUV2ZW50JikKIHsKICAgICByZXR1cm4gZmFsc2U7CiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckNs
aWVudC5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJJbnNw
ZWN0b3JDbGllbnQuaAppbmRleCA3OThjYWM3Li43YTYzMDAyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckNsaWVudC5oCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9y
Q2xpZW50LmgKQEAgLTI4LDE2ICsyOCwxNiBAQAogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKIAot
I2luY2x1ZGUgIlBhZ2VPdmVybGF5LmgiCi0KICNpbmNsdWRlIDxXZWJDb3JlL0luc3BlY3RvckNs
aWVudC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvSW5zcGVjdG9yRm9yd2FyZGluZy5oPgorI2luY2x1
ZGUgPFdlYkNvcmUvUGFnZU92ZXJsYXkuaD4KICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBHcmFwaGljc0NvbnRleHQ7CiBjbGFzcyBHcmFwaGlj
c0xheWVyOwogY2xhc3MgSW50UmVjdDsKK2NsYXNzIFBhZ2VPdmVybGF5OwogfQogCiBuYW1lc3Bh
Y2UgV2ViS2l0IHsKQEAgLTQ1LDcgKzQ1LDcgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiBjbGFzcyBX
ZWJQYWdlOwogY2xhc3MgUmVwYWludEluZGljYXRvckxheWVyQ2xpZW50OwogCi1jbGFzcyBXZWJJ
bnNwZWN0b3JDbGllbnQgOiBwdWJsaWMgV2ViQ29yZTo6SW5zcGVjdG9yQ2xpZW50LCBwcml2YXRl
IFBhZ2VPdmVybGF5OjpDbGllbnQgeworY2xhc3MgV2ViSW5zcGVjdG9yQ2xpZW50IDogcHVibGlj
IFdlYkNvcmU6Okluc3BlY3RvckNsaWVudCwgcHJpdmF0ZSBXZWJDb3JlOjpQYWdlT3ZlcmxheTo6
Q2xpZW50IHsKIGZyaWVuZCBjbGFzcyBSZXBhaW50SW5kaWNhdG9yTGF5ZXJDbGllbnQ7CiBwdWJs
aWM6CiAgICAgV2ViSW5zcGVjdG9yQ2xpZW50KFdlYlBhZ2UqKTsKQEAgLTc0LDE4ICs3NCwxOCBA
QCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBzaG93UGFpbnRSZWN0KGNvbnN0IFdlYkNvcmU6
OkZsb2F0UmVjdCYpIG92ZXJyaWRlOwogCiAgICAgLy8gUGFnZU92ZXJsYXk6OkNsaWVudAotICAg
IHZpcnR1YWwgdm9pZCBwYWdlT3ZlcmxheURlc3Ryb3llZChQYWdlT3ZlcmxheSopIG92ZXJyaWRl
OwotICAgIHZpcnR1YWwgdm9pZCB3aWxsTW92ZVRvV2ViUGFnZShQYWdlT3ZlcmxheSosIFdlYlBh
Z2UqKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkTW92ZVRvV2ViUGFnZShQYWdlT3Zl
cmxheSosIFdlYlBhZ2UqKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgZHJhd1JlY3QoUGFn
ZU92ZXJsYXkqLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmLCBjb25zdCBXZWJDb3JlOjpJbnRS
ZWN0Jikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBib29sIG1vdXNlRXZlbnQoUGFnZU92ZXJsYXkq
LCBjb25zdCBXZWJNb3VzZUV2ZW50Jikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHBhZ2VP
dmVybGF5RGVzdHJveWVkKFdlYkNvcmU6OlBhZ2VPdmVybGF5Kikgb3ZlcnJpZGU7CisgICAgdmly
dHVhbCB2b2lkIHdpbGxNb3ZlVG9QYWdlKFdlYkNvcmU6OlBhZ2VPdmVybGF5KiwgV2ViQ29yZTo6
UGFnZSopIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBkaWRNb3ZlVG9QYWdlKFdlYkNvcmU6
OlBhZ2VPdmVybGF5KiwgV2ViQ29yZTo6UGFnZSopIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9p
ZCBkcmF3UmVjdChXZWJDb3JlOjpQYWdlT3ZlcmxheSosIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dCYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wg
bW91c2VFdmVudChXZWJDb3JlOjpQYWdlT3ZlcmxheSosIGNvbnN0IFdlYkNvcmU6OlBsYXRmb3Jt
TW91c2VFdmVudCYpIG92ZXJyaWRlOwogCiAgICAgdm9pZCBhbmltYXRpb25FbmRlZEZvckxheWVy
KGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKTsKIAogICAgIFdlYlBhZ2UqIG1fcGFnZTsK
LSAgICBQYWdlT3ZlcmxheSogbV9oaWdobGlnaHRPdmVybGF5OworICAgIFdlYkNvcmU6OlBhZ2VP
dmVybGF5KiBtX2hpZ2hsaWdodE92ZXJsYXk7CiAgICAgCi0gICAgUmVmUHRyPFBhZ2VPdmVybGF5
PiBtX3BhaW50UmVjdE92ZXJsYXk7CisgICAgUmVmUHRyPFdlYkNvcmU6OlBhZ2VPdmVybGF5PiBt
X3BhaW50UmVjdE92ZXJsYXk7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFJlcGFpbnRJbmRpY2F0b3JM
YXllckNsaWVudD4gbV9wYWludEluZGljYXRvckxheWVyQ2xpZW50OwogICAgIEhhc2hTZXQ8V2Vi
Q29yZTo6R3JhcGhpY3NMYXllcio+IG1fcGFpbnRSZWN0TGF5ZXJzOyAvLyBJZGVhbGx5IHRoaXMg
d291bGQgYmUgSGFzaFNldDxzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NMYXllcj4+IGJ1dCB0aGF0
IGRvZXNuJ3Qgd29yayB5ZXQuIHdlYmtpdC5vcmcvYi8xMzYxNjYKIH07CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWEuaCBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYS5oCmluZGV4IGY3NGI0ZGUuLmRi
M2I4M2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3
aW5nQXJlYS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5n
QXJlYS5oCkBAIC00NSw2ICs0NSw3IEBAIGNsYXNzIE1lc3NhZ2VEZWNvZGVyOwogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiBjbGFzcyBEaXNwbGF5UmVmcmVzaE1vbml0b3I7CitjbGFzcyBGcmFtZTsK
IGNsYXNzIEZyYW1lVmlldzsKIGNsYXNzIEdyYXBoaWNzTGF5ZXI7CiBjbGFzcyBHcmFwaGljc0xh
eWVyRmFjdG9yeTsKQEAgLTEyMCw2ICsxMjEsOCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIGJv
b2wgYWRqdXN0TGF5ZXJGbHVzaFRocm90dGxpbmcoV2ViQ29yZTo6TGF5ZXJGbHVzaFRocm90dGxl
U3RhdGU6OkZsYWdzKSB7IHJldHVybiBmYWxzZTsgfQogCisgICAgdmlydHVhbCB2b2lkIGF0dGFj
aFZpZXdPdmVybGF5R3JhcGhpY3NMYXllcihXZWJDb3JlOjpGcmFtZSosIFdlYkNvcmU6OkdyYXBo
aWNzTGF5ZXIqKSB7IH0KKwogcHJvdGVjdGVkOgogICAgIERyYXdpbmdBcmVhKERyYXdpbmdBcmVh
VHlwZSwgV2ViUGFnZSYpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNwcAppbmRleCAxZTM0NjJiLi4wYjkxYWMxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5j
cHAKQEAgLTQwLDYgKzQwLDggQEAKICNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dC5o
PgogI2luY2x1ZGUgPFdlYkNvcmUvTWFpbkZyYW1lLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9QYWdl
Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9QYWdlT3ZlcmxheUNvbnRyb2xsZXIuaD4KKyNpbmNsdWRl
IDxXZWJDb3JlL1BsYXRmb3JtTW91c2VFdmVudC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUGx1Z2lu
RG9jdW1lbnQuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CkBAIC02Myw3ICs2NSw3IEBA
IHN0YXRpYyBXZWJDb3JlOjpGaW5kT3B0aW9ucyBjb3JlKEZpbmRPcHRpb25zIG9wdGlvbnMpCiAK
IEZpbmRDb250cm9sbGVyOjpGaW5kQ29udHJvbGxlcihXZWJQYWdlKiB3ZWJQYWdlKQogICAgIDog
bV93ZWJQYWdlKHdlYlBhZ2UpCi0gICAgLCBtX2ZpbmRQYWdlT3ZlcmxheSgwKQorICAgICwgbV9m
aW5kUGFnZU92ZXJsYXkobnVsbHB0cikKICAgICAsIG1faXNTaG93aW5nRmluZEluZGljYXRvcihm
YWxzZSkKICAgICAsIG1fZm91bmRTdHJpbmdNYXRjaEluZGV4KC0xKQogewpAQCAtMTgyLDEyICsx
ODQsMTIgQEAgdm9pZCBGaW5kQ29udHJvbGxlcjo6dXBkYXRlRmluZFVJQWZ0ZXJQYWdlU2Nyb2xs
KGJvb2wgZm91bmQsIGNvbnN0IFN0cmluZyYgc3RyaW4KIAogICAgIGlmICghc2hvdWxkU2hvd092
ZXJsYXkpIHsKICAgICAgICAgaWYgKG1fZmluZFBhZ2VPdmVybGF5KQotICAgICAgICAgICAgbV93
ZWJQYWdlLT51bmluc3RhbGxQYWdlT3ZlcmxheShtX2ZpbmRQYWdlT3ZlcmxheSwgUGFnZU92ZXJs
YXk6OkZhZGVNb2RlOjpGYWRlKTsKKyAgICAgICAgICAgIG1fd2ViUGFnZS0+Y29yZVBhZ2UoKS0+
cGFnZU92ZXJsYXlDb250cm9sbGVyKCkudW5pbnN0YWxsUGFnZU92ZXJsYXkobV9maW5kUGFnZU92
ZXJsYXksIFBhZ2VPdmVybGF5OjpGYWRlTW9kZTo6RmFkZSk7CiAgICAgfSBlbHNlIHsKICAgICAg
ICAgaWYgKCFtX2ZpbmRQYWdlT3ZlcmxheSkgewogICAgICAgICAgICAgUmVmUHRyPFBhZ2VPdmVy
bGF5PiBmaW5kUGFnZU92ZXJsYXkgPSBQYWdlT3ZlcmxheTo6Y3JlYXRlKHRoaXMpOwogICAgICAg
ICAgICAgbV9maW5kUGFnZU92ZXJsYXkgPSBmaW5kUGFnZU92ZXJsYXkuZ2V0KCk7Ci0gICAgICAg
ICAgICBtX3dlYlBhZ2UtPmluc3RhbGxQYWdlT3ZlcmxheShmaW5kUGFnZU92ZXJsYXkucmVsZWFz
ZSgpLCBQYWdlT3ZlcmxheTo6RmFkZU1vZGU6OkZhZGUpOworICAgICAgICAgICAgbV93ZWJQYWdl
LT5jb3JlUGFnZSgpLT5wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKS5pbnN0YWxsUGFnZU92ZXJsYXko
ZmluZFBhZ2VPdmVybGF5LnJlbGVhc2UoKSwgUGFnZU92ZXJsYXk6OkZhZGVNb2RlOjpGYWRlKTsK
ICAgICAgICAgfQogICAgICAgICBtX2ZpbmRQYWdlT3ZlcmxheS0+c2V0TmVlZHNEaXNwbGF5KCk7
CiAgICAgfQpAQCAtMzMwLDcgKzMzMiw3IEBAIHZvaWQgRmluZENvbnRyb2xsZXI6OmhpZGVGaW5k
VUkoKQogewogICAgIG1fZmluZE1hdGNoZXMuY2xlYXIoKTsKICAgICBpZiAobV9maW5kUGFnZU92
ZXJsYXkpCi0gICAgICAgIG1fd2ViUGFnZS0+dW5pbnN0YWxsUGFnZU92ZXJsYXkobV9maW5kUGFn
ZU92ZXJsYXksIFBhZ2VPdmVybGF5OjpGYWRlTW9kZTo6RmFkZSk7CisgICAgICAgIG1fd2ViUGFn
ZS0+Y29yZVBhZ2UoKS0+cGFnZU92ZXJsYXlDb250cm9sbGVyKCkudW5pbnN0YWxsUGFnZU92ZXJs
YXkobV9maW5kUGFnZU92ZXJsYXksIFBhZ2VPdmVybGF5OjpGYWRlTW9kZTo6RmFkZSk7CiAKICAg
ICBQbHVnaW5WaWV3KiBwbHVnaW5WaWV3ID0gcGx1Z2luVmlld0ZvckZyYW1lKG1fd2ViUGFnZS0+
bWFpbkZyYW1lKCkpOwogICAgIApAQCAtNDQzLDE2ICs0NDUsMTYgQEAgdm9pZCBGaW5kQ29udHJv
bGxlcjo6cGFnZU92ZXJsYXlEZXN0cm95ZWQoUGFnZU92ZXJsYXkqKQogewogfQogCi12b2lkIEZp
bmRDb250cm9sbGVyOjp3aWxsTW92ZVRvV2ViUGFnZShQYWdlT3ZlcmxheSosIFdlYlBhZ2UqIHdl
YlBhZ2UpCit2b2lkIEZpbmRDb250cm9sbGVyOjp3aWxsTW92ZVRvUGFnZShQYWdlT3ZlcmxheSos
IFBhZ2UqIHBhZ2UpCiB7Ci0gICAgaWYgKHdlYlBhZ2UpCisgICAgaWYgKHBhZ2UpCiAgICAgICAg
IHJldHVybjsKIAogICAgIEFTU0VSVChtX2ZpbmRQYWdlT3ZlcmxheSk7CiAgICAgbV9maW5kUGFn
ZU92ZXJsYXkgPSAwOwogfQogICAgIAotdm9pZCBGaW5kQ29udHJvbGxlcjo6ZGlkTW92ZVRvV2Vi
UGFnZShQYWdlT3ZlcmxheSosIFdlYlBhZ2UqKQordm9pZCBGaW5kQ29udHJvbGxlcjo6ZGlkTW92
ZVRvUGFnZShQYWdlT3ZlcmxheSosIFBhZ2UqKQogewogfQogCkBAIC01MDYsOSArNTA4LDkgQEAg
dm9pZCBGaW5kQ29udHJvbGxlcjo6ZHJhd1JlY3QoUGFnZU92ZXJsYXkqLCBHcmFwaGljc0NvbnRl
eHQmIGdyYXBoaWNzQ29udGV4dCwgY28KICAgICB9CiB9CiAKLWJvb2wgRmluZENvbnRyb2xsZXI6
Om1vdXNlRXZlbnQoUGFnZU92ZXJsYXkqLCBjb25zdCBXZWJNb3VzZUV2ZW50JiBtb3VzZUV2ZW50
KQorYm9vbCBGaW5kQ29udHJvbGxlcjo6bW91c2VFdmVudChQYWdlT3ZlcmxheSosIGNvbnN0IFBs
YXRmb3JtTW91c2VFdmVudCYgbW91c2VFdmVudCkKIHsKLSAgICBpZiAobW91c2VFdmVudC50eXBl
KCkgPT0gV2ViRXZlbnQ6Ok1vdXNlRG93bikKKyAgICBpZiAobW91c2VFdmVudC50eXBlKCkgPT0g
UGxhdGZvcm1FdmVudDo6TW91c2VQcmVzc2VkKQogICAgICAgICBoaWRlRmluZFVJKCk7CiAKICAg
ICByZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvRmluZENvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9GaW5kQ29udHJvbGxlci5oCmluZGV4IDI4MDYzZmMuLjAyNmNkMTAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5oCkBAIC0yNiwx
MCArMjYsMTAgQEAKICNpZm5kZWYgRmluZENvbnRyb2xsZXJfaAogI2RlZmluZSBGaW5kQ29udHJv
bGxlcl9oCiAKLSNpbmNsdWRlICJQYWdlT3ZlcmxheS5oIgogI2luY2x1ZGUgIlNoYXJlYWJsZUJp
dG1hcC5oIgogI2luY2x1ZGUgIldlYkZpbmRPcHRpb25zLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9J
bnRSZWN0Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9QYWdlT3ZlcmxheS5oPgogI2luY2x1ZGUgPHd0
Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgpAQCAtNDUsMTAgKzQ1LDkgQEAgY2xhc3MgUmFuZ2U7CiAKIG5hbWVzcGFjZSBX
ZWJLaXQgewogCi1jbGFzcyBQYWdlT3ZlcmxheTsKIGNsYXNzIFdlYlBhZ2U7CiAKLWNsYXNzIEZp
bmRDb250cm9sbGVyIDogcHJpdmF0ZSBQYWdlT3ZlcmxheTo6Q2xpZW50IHsKK2NsYXNzIEZpbmRD
b250cm9sbGVyIDogcHJpdmF0ZSBXZWJDb3JlOjpQYWdlT3ZlcmxheTo6Q2xpZW50IHsKICAgICBX
VEZfTUFLRV9OT05DT1BZQUJMRShGaW5kQ29udHJvbGxlcik7CiAKIHB1YmxpYzoKQEAgLTcxLDEx
ICs3MCwxMSBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgLy8gUGFnZU92ZXJsYXk6OkNsaWVu
dC4KLSAgICB2aXJ0dWFsIHZvaWQgcGFnZU92ZXJsYXlEZXN0cm95ZWQoUGFnZU92ZXJsYXkqKTsK
LSAgICB2aXJ0dWFsIHZvaWQgd2lsbE1vdmVUb1dlYlBhZ2UoUGFnZU92ZXJsYXkqLCBXZWJQYWdl
Kik7Ci0gICAgdmlydHVhbCB2b2lkIGRpZE1vdmVUb1dlYlBhZ2UoUGFnZU92ZXJsYXkqLCBXZWJQ
YWdlKik7Ci0gICAgdmlydHVhbCBib29sIG1vdXNlRXZlbnQoUGFnZU92ZXJsYXkqLCBjb25zdCBX
ZWJNb3VzZUV2ZW50Jik7Ci0gICAgdmlydHVhbCB2b2lkIGRyYXdSZWN0KFBhZ2VPdmVybGF5Kiwg
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgZGlydHlS
ZWN0KTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFnZU92ZXJsYXlEZXN0cm95ZWQoV2ViQ29yZTo6UGFn
ZU92ZXJsYXkqKTsKKyAgICB2aXJ0dWFsIHZvaWQgd2lsbE1vdmVUb1BhZ2UoV2ViQ29yZTo6UGFn
ZU92ZXJsYXkqLCBXZWJDb3JlOjpQYWdlKik7CisgICAgdmlydHVhbCB2b2lkIGRpZE1vdmVUb1Bh
Z2UoV2ViQ29yZTo6UGFnZU92ZXJsYXkqLCBXZWJDb3JlOjpQYWdlKik7CisgICAgdmlydHVhbCBi
b29sIG1vdXNlRXZlbnQoV2ViQ29yZTo6UGFnZU92ZXJsYXkqLCBjb25zdCBXZWJDb3JlOjpQbGF0
Zm9ybU1vdXNlRXZlbnQmKTsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd1JlY3QoV2ViQ29yZTo6UGFn
ZU92ZXJsYXkqLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmLCBjb25zdCBXZWJDb3JlOjpJbnRS
ZWN0JiBkaXJ0eVJlY3QpOwogCiAgICAgVmVjdG9yPFdlYkNvcmU6OkludFJlY3Q+IHJlY3RzRm9y
VGV4dE1hdGNoZXMoKTsKICAgICBib29sIGdldEZpbmRJbmRpY2F0b3JCaXRtYXBBbmRSZWN0KFdl
YkNvcmU6OkZyYW1lJiwgU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUmLCBXZWJDb3JlOjpJbnRSZWN0
JiBzZWxlY3Rpb25SZWN0KTsKQEAgLTg4LDcgKzg3LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGRp
ZEhpZGVGaW5kSW5kaWNhdG9yKCk7CiAKICAgICBXZWJQYWdlKiBtX3dlYlBhZ2U7Ci0gICAgUGFn
ZU92ZXJsYXkqIG1fZmluZFBhZ2VPdmVybGF5OworICAgIFdlYkNvcmU6OlBhZ2VPdmVybGF5KiBt
X2ZpbmRQYWdlT3ZlcmxheTsKIAogICAgIC8vIFdoZXRoZXIgdGhlIFVJIHByb2Nlc3MgaXMgc2hv
d2luZyB0aGUgZmluZCBpbmRpY2F0b3IuIE5vdGUgdGhhdCB0aGlzIGNhbiBiZSB0cnVlIGV2ZW4g
aWYKICAgICAvLyB0aGUgZmluZCBpbmRpY2F0b3IgaXNuJ3Qgc2hvd2luZywgYnV0IGl0IHdpbGwg
bmV2ZXIgYmUgZmFsc2Ugd2hlbiBpdCBpcyBzaG93aW5nLgpAQCAtOTksNyArOTgsNyBAQCBwcml2
YXRlOgogICAgIGludCBtX2ZvdW5kU3RyaW5nTWF0Y2hJbmRleDsKIAogI2lmIFBMQVRGT1JNKElP
UykKLSAgICBSZWZQdHI8UGFnZU92ZXJsYXk+IG1fZmluZEluZGljYXRvck92ZXJsYXk7CisgICAg
UmVmUHRyPFdlYkNvcmU6OlBhZ2VPdmVybGF5PiBtX2ZpbmRJbmRpY2F0b3JPdmVybGF5OwogICAg
IHN0ZDo6dW5pcXVlX3B0cjxGaW5kSW5kaWNhdG9yT3ZlcmxheUNsaWVudElPUz4gbV9maW5kSW5k
aWNhdG9yT3ZlcmxheUNsaWVudDsKICNlbmRpZgogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVIb3N0LmggYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlSG9zdC5oCmluZGV4IDNmZDQ5NTQuLjY0ZWVjNTEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVI
b3N0LmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUhv
c3QuaApAQCAtNDcsNyArNDcsNiBAQCBjbGFzcyBHcmFwaGljc0xheWVyRmFjdG9yeTsKIAogbmFt
ZXNwYWNlIFdlYktpdCB7CiAKLWNsYXNzIFBhZ2VPdmVybGF5OwogY2xhc3MgVXBkYXRlSW5mbzsK
IGNsYXNzIFdlYlBhZ2U7CiAKQEAgLTcyLDExICs3MSw2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFs
IHZvaWQgZGV2aWNlT3JQYWdlU2NhbGVGYWN0b3JDaGFuZ2VkKCkgPSAwOwogICAgIHZpcnR1YWwg
dm9pZCBwYWdlQmFja2dyb3VuZFRyYW5zcGFyZW5jeUNoYW5nZWQoKSA9IDA7CiAKLSAgICB2aXJ0
dWFsIHZvaWQgZGlkSW5zdGFsbFBhZ2VPdmVybGF5KFBhZ2VPdmVybGF5KikgeyB9Ci0gICAgdmly
dHVhbCB2b2lkIGRpZFVuaW5zdGFsbFBhZ2VPdmVybGF5KFBhZ2VPdmVybGF5KikgeyB9Ci0gICAg
dmlydHVhbCB2b2lkIHNldFBhZ2VPdmVybGF5TmVlZHNEaXNwbGF5KFBhZ2VPdmVybGF5KiwgY29u
c3QgV2ViQ29yZTo6SW50UmVjdCYpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBzZXRQYWdlT3Zlcmxh
eU9wYWNpdHkoUGFnZU92ZXJsYXkqLCBmbG9hdCkgeyB9Ci0KICAgICB2aXJ0dWFsIHZvaWQgcGF1
c2VSZW5kZXJpbmcoKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgcmVzdW1lUmVuZGVyaW5nKCkgeyB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9QYWdlT3Zl
cmxheS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvUGFnZU92ZXJsYXku
Y3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZDg4MWI2Li4wMDAwMDAwCi0tLSBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9QYWdlT3ZlcmxheS5jcHAKKysrIC9k
ZXYvbnVsbApAQCAtMSwyNTEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcu
aCIKLSNpbmNsdWRlICJQYWdlT3ZlcmxheS5oIgotCi0jaW5jbHVkZSAiV2ViUGFnZS5oIgotI2lu
Y2x1ZGUgIldlYlByb2Nlc3MuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lVmlldy5oPgotI2lu
Y2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9NYWlu
RnJhbWUuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1BhZ2UuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1Nj
cm9sbGJhclRoZW1lLmg+Ci0jaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+Ci0KLXVzaW5nIG5h
bWVzcGFjZSBXZWJDb3JlOwotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotc3RhdGljIGNvbnN0IGRv
dWJsZSBmYWRlQW5pbWF0aW9uRHVyYXRpb24gPSAwLjI7Ci1zdGF0aWMgY29uc3QgZG91YmxlIGZh
ZGVBbmltYXRpb25GcmFtZVJhdGUgPSAzMDsKLQotUGFzc1JlZlB0cjxQYWdlT3ZlcmxheT4gUGFn
ZU92ZXJsYXk6OmNyZWF0ZShDbGllbnQqIGNsaWVudCwgT3ZlcmxheVR5cGUgb3ZlcmxheVR5cGUp
Ci17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBQYWdlT3ZlcmxheShjbGllbnQsIG92ZXJsYXlU
eXBlKSk7Ci19Ci0KLVBhZ2VPdmVybGF5OjpQYWdlT3ZlcmxheShDbGllbnQqIGNsaWVudCwgT3Zl
cmxheVR5cGUgb3ZlcmxheVR5cGUpCi0gICAgOiBtX2NsaWVudChjbGllbnQpCi0gICAgLCBtX3dl
YlBhZ2UobnVsbHB0cikKLSAgICAsIG1fZmFkZUFuaW1hdGlvblRpbWVyKFJ1bkxvb3A6Om1haW4o
KSwgdGhpcywgJlBhZ2VPdmVybGF5OjpmYWRlQW5pbWF0aW9uVGltZXJGaXJlZCkKLSAgICAsIG1f
ZmFkZUFuaW1hdGlvblN0YXJ0VGltZSgwKQotICAgICwgbV9mYWRlQW5pbWF0aW9uRHVyYXRpb24o
ZmFkZUFuaW1hdGlvbkR1cmF0aW9uKQotICAgICwgbV9mYWRlQW5pbWF0aW9uVHlwZShOb0FuaW1h
dGlvbikKLSAgICAsIG1fZnJhY3Rpb25GYWRlZEluKDEpCi0gICAgLCBtX292ZXJsYXlUeXBlKG92
ZXJsYXlUeXBlKQotICAgICwgbV9iYWNrZ3JvdW5kQ29sb3IoQ29sb3I6OnRyYW5zcGFyZW50KQot
ewotfQotCi1QYWdlT3ZlcmxheTo6flBhZ2VPdmVybGF5KCkKLXsKLX0KLQotSW50UmVjdCBQYWdl
T3ZlcmxheTo6Ym91bmRzKCkgY29uc3QKLXsKLSAgICBpZiAoIW1fb3ZlcnJpZGVGcmFtZS5pc0Vt
cHR5KCkpCi0gICAgICAgIHJldHVybiBJbnRSZWN0KEludFBvaW50KCksIG1fb3ZlcnJpZGVGcmFt
ZS5zaXplKCkpOwotCi0gICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBtX3dlYlBhZ2UtPm1haW5G
cmFtZVZpZXcoKTsKLQotICAgIHN3aXRjaCAobV9vdmVybGF5VHlwZSkgewotICAgIGNhc2UgT3Zl
cmxheVR5cGU6OlZpZXc6IHsKLSAgICAgICAgaW50IHdpZHRoID0gZnJhbWVWaWV3LT53aWR0aCgp
OwotICAgICAgICBpbnQgaGVpZ2h0ID0gZnJhbWVWaWV3LT5oZWlnaHQoKTsKLQotICAgICAgICBp
ZiAoIVNjcm9sbGJhclRoZW1lOjp0aGVtZSgpLT51c2VzT3ZlcmxheVNjcm9sbGJhcnMoKSkgewot
ICAgICAgICAgICAgaWYgKGZyYW1lVmlldy0+dmVydGljYWxTY3JvbGxiYXIoKSkKLSAgICAgICAg
ICAgICAgICB3aWR0aCAtPSBmcmFtZVZpZXctPnZlcnRpY2FsU2Nyb2xsYmFyKCktPndpZHRoKCk7
Ci0gICAgICAgICAgICBpZiAoZnJhbWVWaWV3LT5ob3Jpem9udGFsU2Nyb2xsYmFyKCkpCi0gICAg
ICAgICAgICAgICAgaGVpZ2h0IC09IGZyYW1lVmlldy0+aG9yaXpvbnRhbFNjcm9sbGJhcigpLT5o
ZWlnaHQoKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gSW50UmVjdCgwLCAwLCB3aWR0aCwg
aGVpZ2h0KTsKLSAgICB9Ci0gICAgY2FzZSBPdmVybGF5VHlwZTo6RG9jdW1lbnQ6Ci0gICAgICAg
IHJldHVybiBJbnRSZWN0KEludFBvaW50KCksIGZyYW1lVmlldy0+Y29udGVudHNTaXplKCkpOwot
ICAgIH07Ci0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gSW50UmVjdChJ
bnRQb2ludCgpLCBmcmFtZVZpZXctPmNvbnRlbnRzU2l6ZSgpKTsKLX0KLQotSW50UmVjdCBQYWdl
T3ZlcmxheTo6ZnJhbWUoKSBjb25zdAotewotICAgIGlmICghbV9vdmVycmlkZUZyYW1lLmlzRW1w
dHkoKSkKLSAgICAgICAgcmV0dXJuIG1fb3ZlcnJpZGVGcmFtZTsKLQotICAgIHJldHVybiBib3Vu
ZHMoKTsKLX0KLQotdm9pZCBQYWdlT3ZlcmxheTo6c2V0RnJhbWUoSW50UmVjdCBmcmFtZSkKLXsK
LSAgICBpZiAobV9vdmVycmlkZUZyYW1lID09IGZyYW1lKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBtX292ZXJyaWRlRnJhbWUgPSBmcmFtZTsKLQotICAgIGlmIChtX3dlYlBhZ2UpCi0gICAgICAg
IG1fd2ViUGFnZS0+cGFnZU92ZXJsYXlDb250cm9sbGVyKCkuZGlkQ2hhbmdlT3ZlcmxheUZyYW1l
KCp0aGlzKTsKLX0KLQotdm9pZCBQYWdlT3ZlcmxheTo6c2V0QmFja2dyb3VuZENvbG9yKFJHQkEz
MiBiYWNrZ3JvdW5kQ29sb3IpCi17Ci0gICAgaWYgKG1fYmFja2dyb3VuZENvbG9yID09IGJhY2tn
cm91bmRDb2xvcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9iYWNrZ3JvdW5kQ29sb3IgPSBi
YWNrZ3JvdW5kQ29sb3I7Ci0KLSAgICBpZiAobV93ZWJQYWdlKQotICAgICAgICBtX3dlYlBhZ2Ut
PnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLmRpZENoYW5nZU92ZXJsYXlCYWNrZ3JvdW5kQ29sb3Io
KnRoaXMpOwotfQotCi12b2lkIFBhZ2VPdmVybGF5OjpzZXRQYWdlKFdlYlBhZ2UqIHdlYlBhZ2Up
Ci17Ci0gICAgbV9jbGllbnQtPndpbGxNb3ZlVG9XZWJQYWdlKHRoaXMsIHdlYlBhZ2UpOwotICAg
IG1fd2ViUGFnZSA9IHdlYlBhZ2U7Ci0gICAgbV9jbGllbnQtPmRpZE1vdmVUb1dlYlBhZ2UodGhp
cywgd2ViUGFnZSk7Ci0KLSAgICBtX2ZhZGVBbmltYXRpb25UaW1lci5zdG9wKCk7Ci19Ci0KLXZv
aWQgUGFnZU92ZXJsYXk6OnNldE5lZWRzRGlzcGxheShjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3Qp
Ci17Ci0gICAgaWYgKCFtX3dlYlBhZ2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fd2ViUGFn
ZS0+cGFnZU92ZXJsYXlDb250cm9sbGVyKCkuc2V0UGFnZU92ZXJsYXlPcGFjaXR5KCp0aGlzLCBt
X2ZyYWN0aW9uRmFkZWRJbik7Ci0gICAgbV93ZWJQYWdlLT5wYWdlT3ZlcmxheUNvbnRyb2xsZXIo
KS5zZXRQYWdlT3ZlcmxheU5lZWRzRGlzcGxheSgqdGhpcywgZGlydHlSZWN0KTsKLX0KLQotdm9p
ZCBQYWdlT3ZlcmxheTo6c2V0TmVlZHNEaXNwbGF5KCkKLXsKLSAgICBzZXROZWVkc0Rpc3BsYXko
Ym91bmRzKCkpOwotfQotCi12b2lkIFBhZ2VPdmVybGF5OjpkcmF3UmVjdChHcmFwaGljc0NvbnRl
eHQmIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KQotewotICAgIC8v
IElmIHRoZSBkaXJ0eSByZWN0IGlzIG91dHNpZGUgdGhlIGJvdW5kcywgaWdub3JlIGl0LgotICAg
IEludFJlY3QgcGFpbnRSZWN0ID0gaW50ZXJzZWN0aW9uKGRpcnR5UmVjdCwgYm91bmRzKCkpOwot
ICAgIGlmIChwYWludFJlY3QuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBHcmFw
aGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoZ3JhcGhpY3NDb250ZXh0KTsKLSAgICBt
X2NsaWVudC0+ZHJhd1JlY3QodGhpcywgZ3JhcGhpY3NDb250ZXh0LCBwYWludFJlY3QpOwotfQot
ICAgIAotYm9vbCBQYWdlT3ZlcmxheTo6bW91c2VFdmVudChjb25zdCBXZWJNb3VzZUV2ZW50JiBt
b3VzZUV2ZW50KQotewotICAgIEludFBvaW50IG1vdXNlUG9zaXRpb25Jbk92ZXJsYXlDb29yZGlu
YXRlcyhtb3VzZUV2ZW50LnBvc2l0aW9uKCkpOwotCi0gICAgaWYgKG1fb3ZlcmxheVR5cGUgPT0g
UGFnZU92ZXJsYXk6Ok92ZXJsYXlUeXBlOjpEb2N1bWVudCkKLSAgICAgICAgbW91c2VQb3NpdGlv
bkluT3ZlcmxheUNvb3JkaW5hdGVzID0gbV93ZWJQYWdlLT5jb3JlUGFnZSgpLT5tYWluRnJhbWUo
KS52aWV3KCktPnJvb3RWaWV3VG9Db250ZW50cyhtb3VzZVBvc2l0aW9uSW5PdmVybGF5Q29vcmRp
bmF0ZXMpOwotCi0gICAgLy8gSWdub3JlIGV2ZW50cyBvdXRzaWRlIHRoZSBib3VuZHMuCi0gICAg
aWYgKCFib3VuZHMoKS5jb250YWlucyhtb3VzZVBvc2l0aW9uSW5PdmVybGF5Q29vcmRpbmF0ZXMp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gbV9jbGllbnQtPm1vdXNlRXZl
bnQodGhpcywgbW91c2VFdmVudCk7Ci19Ci0KLXZvaWQgUGFnZU92ZXJsYXk6OmRpZFNjcm9sbEZy
YW1lKEZyYW1lKiBmcmFtZSkKLXsKLSAgICBtX2NsaWVudC0+ZGlkU2Nyb2xsRnJhbWUodGhpcywg
ZnJhbWUpOwotfQotCi1XS1R5cGVSZWYgUGFnZU92ZXJsYXk6OmNvcHlBY2Nlc3NpYmlsaXR5QXR0
cmlidXRlVmFsdWUoV0tTdHJpbmdSZWYgYXR0cmlidXRlLCBXS1R5cGVSZWYgcGFyYW1ldGVyKQot
ewotICAgIHJldHVybiBtX2NsaWVudC0+Y29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZSh0
aGlzLCBhdHRyaWJ1dGUsIHBhcmFtZXRlcik7Ci19Ci0KLVdLQXJyYXlSZWYgUGFnZU92ZXJsYXk6
OmNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlTmFtZXMoYm9vbCBwYXJhbWV0ZXJpemVkTmFtZXMp
Ci17Ci0gICAgcmV0dXJuIG1fY2xpZW50LT5jb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZU5hbWVz
KHRoaXMsIHBhcmFtZXRlcml6ZWROYW1lcyk7Ci19Ci0KLXZvaWQgUGFnZU92ZXJsYXk6OnN0YXJ0
RmFkZUluQW5pbWF0aW9uKCkKLXsKLSAgICBtX2ZyYWN0aW9uRmFkZWRJbiA9IDA7Ci0gICAgbV9m
YWRlQW5pbWF0aW9uVHlwZSA9IEZhZGVJbkFuaW1hdGlvbjsKLQotICAgIHN0YXJ0RmFkZUFuaW1h
dGlvbigpOwotfQotCi12b2lkIFBhZ2VPdmVybGF5OjpzdGFydEZhZGVPdXRBbmltYXRpb24oKQot
ewotICAgIG1fZnJhY3Rpb25GYWRlZEluID0gMTsKLSAgICBtX2ZhZGVBbmltYXRpb25UeXBlID0g
RmFkZU91dEFuaW1hdGlvbjsKLQotICAgIHN0YXJ0RmFkZUFuaW1hdGlvbigpOwotfQotCi12b2lk
IFBhZ2VPdmVybGF5OjpzdG9wRmFkZU91dEFuaW1hdGlvbigpCi17Ci0gICAgbV9mcmFjdGlvbkZh
ZGVkSW4gPSAxLjA7Ci0gICAgbV9mYWRlQW5pbWF0aW9uVGltZXIuc3RvcCgpOwotfQotCi12b2lk
IFBhZ2VPdmVybGF5OjpzdGFydEZhZGVBbmltYXRpb24oKQotewotICAgIG1fZmFkZUFuaW1hdGlv
blN0YXJ0VGltZSA9IGN1cnJlbnRUaW1lKCk7Ci0gICAgbV9mYWRlQW5pbWF0aW9uVGltZXIuc3Rh
cnRSZXBlYXRpbmcoMSAvIGZhZGVBbmltYXRpb25GcmFtZVJhdGUpOwotfQotCi12b2lkIFBhZ2VP
dmVybGF5OjpmYWRlQW5pbWF0aW9uVGltZXJGaXJlZCgpCi17Ci0gICAgZmxvYXQgYW5pbWF0aW9u
UHJvZ3Jlc3MgPSAoY3VycmVudFRpbWUoKSAtIG1fZmFkZUFuaW1hdGlvblN0YXJ0VGltZSkgLyBt
X2ZhZGVBbmltYXRpb25EdXJhdGlvbjsKLQotICAgIGlmIChhbmltYXRpb25Qcm9ncmVzcyA+PSAx
LjApCi0gICAgICAgIGFuaW1hdGlvblByb2dyZXNzID0gMS4wOwotCi0gICAgZG91YmxlIHNpbmUg
PSBzaW4ocGlPdmVyVHdvRmxvYXQgKiBhbmltYXRpb25Qcm9ncmVzcyk7Ci0gICAgZmxvYXQgZmFk
ZUFuaW1hdGlvblZhbHVlID0gc2luZSAqIHNpbmU7Ci0KLSAgICBtX2ZyYWN0aW9uRmFkZWRJbiA9
IChtX2ZhZGVBbmltYXRpb25UeXBlID09IEZhZGVJbkFuaW1hdGlvbikgPyBmYWRlQW5pbWF0aW9u
VmFsdWUgOiAxIC0gZmFkZUFuaW1hdGlvblZhbHVlOwotICAgIG1fd2ViUGFnZS0+cGFnZU92ZXJs
YXlDb250cm9sbGVyKCkuc2V0UGFnZU92ZXJsYXlPcGFjaXR5KCp0aGlzLCBtX2ZyYWN0aW9uRmFk
ZWRJbik7Ci0KLSAgICBpZiAoYW5pbWF0aW9uUHJvZ3Jlc3MgPT0gMS4wKSB7Ci0gICAgICAgIG1f
ZmFkZUFuaW1hdGlvblRpbWVyLnN0b3AoKTsKLQotICAgICAgICBib29sIHdhc0ZhZGluZ091dCA9
IG1fZmFkZUFuaW1hdGlvblR5cGUgPT0gRmFkZU91dEFuaW1hdGlvbjsKLSAgICAgICAgbV9mYWRl
QW5pbWF0aW9uVHlwZSA9IE5vQW5pbWF0aW9uOwotCi0gICAgICAgIC8vIElmIHRoaXMgd2FzIGEg
ZmFkZSBvdXQsIGdvIGFoZWFkIGFuZCB1bmluc3RhbGwgdGhlIHBhZ2Ugb3ZlcmxheS4KLSAgICAg
ICAgaWYgKHdhc0ZhZGluZ091dCkKLSAgICAgICAgICAgIG1fd2ViUGFnZS0+dW5pbnN0YWxsUGFn
ZU92ZXJsYXkodGhpcywgUGFnZU92ZXJsYXk6OkZhZGVNb2RlOjpEb05vdEZhZGUpOwotICAgIH0K
LX0KLQotdm9pZCBQYWdlT3ZlcmxheTo6Y2xlYXIoKQotewotICAgIG1fd2ViUGFnZS0+cGFnZU92
ZXJsYXlDb250cm9sbGVyKCkuY2xlYXJQYWdlT3ZlcmxheSgqdGhpcyk7Ci19Ci0KLVdlYkNvcmU6
OkdyYXBoaWNzTGF5ZXIqIFBhZ2VPdmVybGF5OjpsYXllcigpCi17Ci0gICAgcmV0dXJuIG1fd2Vi
UGFnZS0+cGFnZU92ZXJsYXlDb250cm9sbGVyKCkubGF5ZXJGb3JPdmVybGF5KCp0aGlzKTsKLX0K
LQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvUGFnZU92ZXJsYXkuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9QYWdlT3ZlcmxheS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMjI1
ZjBkLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9QYWdl
T3ZlcmxheS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTM3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
aWZuZGVmIFBhZ2VPdmVybGF5X2gKLSNkZWZpbmUgUGFnZU92ZXJsYXlfaAotCi0jaW5jbHVkZSAi
QVBJT2JqZWN0LmgiCi0jaW5jbHVkZSAiV0tCYXNlLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9Db2xv
ci5oPgotI2luY2x1ZGUgPFdlYkNvcmUvSW50UmVjdC5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVm
UHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewot
Y2xhc3MgRnJhbWU7Ci1jbGFzcyBHcmFwaGljc0NvbnRleHQ7Ci1jbGFzcyBHcmFwaGljc0xheWVy
OwotfQotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgV2ViRnJhbWU7Ci1jbGFzcyBXZWJN
b3VzZUV2ZW50OwotY2xhc3MgV2ViUGFnZTsKLQotY2xhc3MgUGFnZU92ZXJsYXkgOiBwdWJsaWMg
QVBJOjpPYmplY3RJbXBsPEFQSTo6T2JqZWN0OjpUeXBlOjpCdW5kbGVQYWdlT3ZlcmxheT4gewot
cHVibGljOgotICAgIGNsYXNzIENsaWVudCB7Ci0gICAgcHJvdGVjdGVkOgotICAgICAgICB2aXJ0
dWFsIH5DbGllbnQoKSB7IH0KLSAgICAKLSAgICBwdWJsaWM6Ci0gICAgICAgIHZpcnR1YWwgdm9p
ZCBwYWdlT3ZlcmxheURlc3Ryb3llZChQYWdlT3ZlcmxheSopID0gMDsKLSAgICAgICAgdmlydHVh
bCB2b2lkIHdpbGxNb3ZlVG9XZWJQYWdlKFBhZ2VPdmVybGF5KiwgV2ViUGFnZSopID0gMDsKLSAg
ICAgICAgdmlydHVhbCB2b2lkIGRpZE1vdmVUb1dlYlBhZ2UoUGFnZU92ZXJsYXkqLCBXZWJQYWdl
KikgPSAwOwotICAgICAgICB2aXJ0dWFsIHZvaWQgZHJhd1JlY3QoUGFnZU92ZXJsYXkqLCBXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQmLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBkaXJ0eVJlY3Qp
ID0gMDsKLSAgICAgICAgdmlydHVhbCBib29sIG1vdXNlRXZlbnQoUGFnZU92ZXJsYXkqLCBjb25z
dCBXZWJNb3VzZUV2ZW50JikgPSAwOwotICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkU2Nyb2xsRnJh
bWUoUGFnZU92ZXJsYXkqLCBXZWJDb3JlOjpGcmFtZSopIHsgfQotCi0gICAgICAgIHZpcnR1YWwg
V0tUeXBlUmVmIGNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWUoUGFnZU92ZXJsYXkqLCBX
S1N0cmluZ1JlZiAvKiBhdHRyaWJ1dGUgKi8sIFdLVHlwZVJlZiAvKiBwYXJhbWV0ZXIgKi8pIHsg
cmV0dXJuIDA7IH0KLSAgICAgICAgdmlydHVhbCBXS0FycmF5UmVmIGNvcHlBY2Nlc3NpYmlsaXR5
QXR0cmlidXRlTmFtZXMoUGFnZU92ZXJsYXkqLCBib29sIC8qIHBhcmFtZXRlcml6ZWROYW1lcyAq
LykgeyByZXR1cm4gMDsgfQotICAgIH07Ci0KLSAgICBlbnVtIGNsYXNzIE92ZXJsYXlUeXBlIHsK
LSAgICAgICAgVmlldywgLy8gRml4ZWQgdG8gdGhlIHZpZXcgc2l6ZTsgZG9lcyBub3Qgc2NhbGUg
b3Igc2Nyb2xsIHdpdGggdGhlIGRvY3VtZW50LCByZXBhaW50cyBvbiBzY3JvbGwuCi0gICAgICAg
IERvY3VtZW50LCAvLyBTY2FsZXMgYW5kIHNjcm9sbHMgd2l0aCB0aGUgZG9jdW1lbnQuCi0gICAg
fTsKLQotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFBhZ2VPdmVybGF5PiBjcmVhdGUoQ2xpZW50Kiwg
T3ZlcmxheVR5cGUgPSBPdmVybGF5VHlwZTo6Vmlldyk7Ci0gICAgdmlydHVhbCB+UGFnZU92ZXJs
YXkoKTsKLQotICAgIHZvaWQgc2V0UGFnZShXZWJQYWdlKik7Ci0gICAgdm9pZCBzZXROZWVkc0Rp
c3BsYXkoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgZGlydHlSZWN0KTsKLSAgICB2b2lkIHNldE5l
ZWRzRGlzcGxheSgpOwotCi0gICAgdm9pZCBkcmF3UmVjdChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQmLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBkaXJ0eVJlY3QpOwotICAgIGJvb2wgbW91c2VF
dmVudChjb25zdCBXZWJNb3VzZUV2ZW50Jik7Ci0gICAgdm9pZCBkaWRTY3JvbGxGcmFtZShXZWJD
b3JlOjpGcmFtZSopOwotCi0gICAgV0tUeXBlUmVmIGNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRl
VmFsdWUoV0tTdHJpbmdSZWYgYXR0cmlidXRlLCBXS1R5cGVSZWYgcGFyYW1ldGVyKTsKLSAgICBX
S0FycmF5UmVmIGNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlTmFtZXMoYm9vbCBwYXJhbWV0ZXJp
emVkTmFtZXMpOwotICAgIAotICAgIHZvaWQgc3RhcnRGYWRlSW5BbmltYXRpb24oKTsKLSAgICB2
b2lkIHN0YXJ0RmFkZU91dEFuaW1hdGlvbigpOwotICAgIHZvaWQgc3RvcEZhZGVPdXRBbmltYXRp
b24oKTsKLQotICAgIHZvaWQgY2xlYXIoKTsKLQotICAgIENsaWVudCogY2xpZW50KCkgY29uc3Qg
eyByZXR1cm4gbV9jbGllbnQ7IH0KLQotICAgIGVudW0gY2xhc3MgRmFkZU1vZGUgeyBEb05vdEZh
ZGUsIEZhZGUgfTsKLQotICAgIE92ZXJsYXlUeXBlIG92ZXJsYXlUeXBlKCkgeyByZXR1cm4gbV9v
dmVybGF5VHlwZTsgfQotCi0gICAgV2ViQ29yZTo6SW50UmVjdCBib3VuZHMoKSBjb25zdDsKLSAg
ICBXZWJDb3JlOjpJbnRSZWN0IGZyYW1lKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRGcmFtZShXZWJD
b3JlOjpJbnRSZWN0KTsKLQotICAgIFdlYkNvcmU6OlJHQkEzMiBiYWNrZ3JvdW5kQ29sb3IoKSBj
b25zdCB7IHJldHVybiBtX2JhY2tncm91bmRDb2xvcjsgfQotICAgIHZvaWQgc2V0QmFja2dyb3Vu
ZENvbG9yKFdlYkNvcmU6OlJHQkEzMik7Ci0KLSAgICBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiBs
YXllcigpOwotICAgIAotcHJvdGVjdGVkOgotICAgIGV4cGxpY2l0IFBhZ2VPdmVybGF5KENsaWVu
dCosIE92ZXJsYXlUeXBlKTsKLQotcHJpdmF0ZToKLSAgICB2b2lkIHN0YXJ0RmFkZUFuaW1hdGlv
bigpOwotICAgIHZvaWQgZmFkZUFuaW1hdGlvblRpbWVyRmlyZWQoKTsKLQotICAgIENsaWVudCog
bV9jbGllbnQ7Ci0gICAgV2ViUGFnZSogbV93ZWJQYWdlOwotCi0gICAgUnVuTG9vcDo6VGltZXI8
UGFnZU92ZXJsYXk+IG1fZmFkZUFuaW1hdGlvblRpbWVyOwotICAgIGRvdWJsZSBtX2ZhZGVBbmlt
YXRpb25TdGFydFRpbWU7Ci0gICAgZG91YmxlIG1fZmFkZUFuaW1hdGlvbkR1cmF0aW9uOwotCi0g
ICAgZW51bSBGYWRlQW5pbWF0aW9uVHlwZSB7Ci0gICAgICAgIE5vQW5pbWF0aW9uLAotICAgICAg
ICBGYWRlSW5BbmltYXRpb24sCi0gICAgICAgIEZhZGVPdXRBbmltYXRpb24sCi0gICAgfTsKLQot
ICAgIEZhZGVBbmltYXRpb25UeXBlIG1fZmFkZUFuaW1hdGlvblR5cGU7Ci0gICAgZmxvYXQgbV9m
cmFjdGlvbkZhZGVkSW47Ci0KLSAgICBPdmVybGF5VHlwZSBtX292ZXJsYXlUeXBlOwotICAgIFdl
YkNvcmU6OkludFJlY3QgbV9vdmVycmlkZUZyYW1lOwotCi0gICAgV2ViQ29yZTo6UkdCQTMyIG1f
YmFja2dyb3VuZENvbG9yOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAv
LyBQYWdlT3ZlcmxheV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvUGFnZU92ZXJsYXlDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9QYWdlT3ZlcmxheUNvbnRyb2xsZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCA4NjQ1N2M1Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9QYWdlT3ZlcmxheUNvbnRyb2xsZXIuY3BwCisrKyAvZGV2L251bGwKQEAgLTEs
MzE0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAi
UGFnZU92ZXJsYXlDb250cm9sbGVyLmgiCi0KLSNpbmNsdWRlICJEcmF3aW5nQXJlYS5oIgotI2lu
Y2x1ZGUgIlBhZ2VPdmVybGF5LmgiCi0jaW5jbHVkZSAiV2ViUGFnZS5oIgotI2luY2x1ZGUgPFdl
YkNvcmUvRnJhbWUuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lVmlldy5oPgotI2luY2x1ZGUg
PFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0xh
eWVyLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9NYWluRnJhbWUuaD4KLSNpbmNsdWRlIDxXZWJDb3Jl
L1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9TZXR0aW5ncy5oPgot
I2luY2x1ZGUgPFdlYkNvcmUvVGlsZWRCYWNraW5nLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOwotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotUGFnZU92ZXJsYXlDb250cm9sbGVyOjpQYWdl
T3ZlcmxheUNvbnRyb2xsZXIoV2ViUGFnZSYgd2ViUGFnZSkKLSAgICA6IG1fd2ViUGFnZSh3ZWJQ
YWdlKQotewotfQotCi12b2lkIFBhZ2VPdmVybGF5Q29udHJvbGxlcjo6aW5pdGlhbGl6ZSgpCi17
Ci0gICAgQVNTRVJUKCFtX2RvY3VtZW50T3ZlcmxheVJvb3RMYXllcik7Ci0gICAgQVNTRVJUKCFt
X3ZpZXdPdmVybGF5Um9vdExheWVyKTsKLQotICAgIG1fZG9jdW1lbnRPdmVybGF5Um9vdExheWVy
ID0gR3JhcGhpY3NMYXllcjo6Y3JlYXRlKG1fd2ViUGFnZS5kcmF3aW5nQXJlYSgpLT5ncmFwaGlj
c0xheWVyRmFjdG9yeSgpLCAqdGhpcyk7Ci0gICAgbV92aWV3T3ZlcmxheVJvb3RMYXllciA9IEdy
YXBoaWNzTGF5ZXI6OmNyZWF0ZShtX3dlYlBhZ2UuZHJhd2luZ0FyZWEoKS0+Z3JhcGhpY3NMYXll
ckZhY3RvcnkoKSwgKnRoaXMpOwotI2lmbmRlZiBOREVCVUcKLSAgICBtX2RvY3VtZW50T3Zlcmxh
eVJvb3RMYXllci0+c2V0TmFtZSgiUGFnZSBPdmVybGF5IGNvbnRhaW5lciAoZG9jdW1lbnQtcmVs
YXRpdmUpIik7Ci0gICAgbV92aWV3T3ZlcmxheVJvb3RMYXllci0+c2V0TmFtZSgiUGFnZSBPdmVy
bGF5IGNvbnRhaW5lciAodmlldy1yZWxhdGl2ZSkiKTsKLSNlbmRpZgotfQotCi1zdGF0aWMgdm9p
ZCB1cGRhdGVPdmVybGF5R2VvbWV0cnkoUGFnZU92ZXJsYXkmIG92ZXJsYXksIEdyYXBoaWNzTGF5
ZXImIGdyYXBoaWNzTGF5ZXIpCi17Ci0gICAgSW50UmVjdCBvdmVybGF5RnJhbWUgPSBvdmVybGF5
LmZyYW1lKCk7Ci0KLSAgICBpZiAob3ZlcmxheUZyYW1lLmxvY2F0aW9uKCkgPT0gZ3JhcGhpY3NM
YXllci5wb3NpdGlvbigpICYmIG92ZXJsYXlGcmFtZS5zaXplKCkgPT0gZ3JhcGhpY3NMYXllci5z
aXplKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGdyYXBoaWNzTGF5ZXIuc2V0UG9zaXRpb24o
b3ZlcmxheUZyYW1lLmxvY2F0aW9uKCkpOwotICAgIGdyYXBoaWNzTGF5ZXIuc2V0U2l6ZShvdmVy
bGF5RnJhbWUuc2l6ZSgpKTsKLX0KLQotdm9pZCBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6Omluc3Rh
bGxQYWdlT3ZlcmxheShQYXNzUmVmUHRyPFBhZ2VPdmVybGF5PiBwYWdlT3ZlcmxheSwgUGFnZU92
ZXJsYXk6OkZhZGVNb2RlIGZhZGVNb2RlKQotewotICAgIEFTU0VSVChtX2RvY3VtZW50T3Zlcmxh
eVJvb3RMYXllcik7Ci0gICAgQVNTRVJUKG1fdmlld092ZXJsYXlSb290TGF5ZXIpOwotCi0gICAg
UmVmUHRyPFBhZ2VPdmVybGF5PiBvdmVybGF5ID0gcGFnZU92ZXJsYXk7Ci0KLSAgICBpZiAobV9w
YWdlT3ZlcmxheXMuY29udGFpbnMob3ZlcmxheSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1f
cGFnZU92ZXJsYXlzLmFwcGVuZChvdmVybGF5KTsKLSAgICBvdmVybGF5LT5zZXRQYWdlKCZtX3dl
YlBhZ2UpOwotCi0gICAgaWYgKGZhZGVNb2RlID09IFBhZ2VPdmVybGF5OjpGYWRlTW9kZTo6RmFk
ZSkKLSAgICAgICAgb3ZlcmxheS0+c3RhcnRGYWRlSW5BbmltYXRpb24oKTsKLQotICAgIHN0ZDo6
dW5pcXVlX3B0cjxHcmFwaGljc0xheWVyPiBsYXllciA9IEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZSht
X3dlYlBhZ2UuZHJhd2luZ0FyZWEoKS0+Z3JhcGhpY3NMYXllckZhY3RvcnkoKSwgKnRoaXMpOwot
ICAgIGxheWVyLT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50M0QoKSk7Ci0gICAgbGF5ZXItPnNl
dEJhY2tncm91bmRDb2xvcihvdmVybGF5LT5iYWNrZ3JvdW5kQ29sb3IoKSk7Ci0gICAgdXBkYXRl
T3ZlcmxheUdlb21ldHJ5KCpvdmVybGF5LCAqbGF5ZXIpOwotI2lmbmRlZiBOREVCVUcKLSAgICBs
YXllci0+c2V0TmFtZSgiUGFnZSBPdmVybGF5IGNvbnRlbnQiKTsKLSNlbmRpZgotCi0gICAgdXBk
YXRlU2V0dGluZ3NGb3JMYXllcigqbGF5ZXIpOwotCi0gICAgc3dpdGNoIChvdmVybGF5LT5vdmVy
bGF5VHlwZSgpKSB7Ci0gICAgY2FzZSBQYWdlT3ZlcmxheTo6T3ZlcmxheVR5cGU6OlZpZXc6Ci0g
ICAgICAgIG1fdmlld092ZXJsYXlSb290TGF5ZXItPmFkZENoaWxkKGxheWVyLmdldCgpKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQYWdlT3ZlcmxheTo6T3ZlcmxheVR5cGU6OkRvY3VtZW50
OgotICAgICAgICBtX2RvY3VtZW50T3ZlcmxheVJvb3RMYXllci0+YWRkQ2hpbGQobGF5ZXIuZ2V0
KCkpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBtX292ZXJsYXlHcmFwaGljc0xheWVy
cy5zZXQob3ZlcmxheS5nZXQoKSwgV1RGOjptb3ZlKGxheWVyKSk7Ci0KLSAgICB1cGRhdGVGb3Jj
ZVN5bmNocm9ub3VzU2Nyb2xsTGF5ZXJQb3NpdGlvblVwZGF0ZXMoKTsKLX0KLQotdm9pZCBQYWdl
T3ZlcmxheUNvbnRyb2xsZXI6OnVuaW5zdGFsbFBhZ2VPdmVybGF5KFBhZ2VPdmVybGF5KiBvdmVy
bGF5LCBQYWdlT3ZlcmxheTo6RmFkZU1vZGUgZmFkZU1vZGUpCi17Ci0gICAgaWYgKGZhZGVNb2Rl
ID09IFBhZ2VPdmVybGF5OjpGYWRlTW9kZTo6RmFkZSkgewotICAgICAgICBvdmVybGF5LT5zdGFy
dEZhZGVPdXRBbmltYXRpb24oKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG92ZXJs
YXktPnNldFBhZ2UobnVsbHB0cik7Ci0KLSAgICBtX292ZXJsYXlHcmFwaGljc0xheWVycy50YWtl
KG92ZXJsYXkpLT5yZW1vdmVGcm9tUGFyZW50KCk7Ci0KLSAgICBzaXplX3Qgb3ZlcmxheUluZGV4
ID0gbV9wYWdlT3ZlcmxheXMuZmluZChvdmVybGF5KTsKLSAgICBBU1NFUlQob3ZlcmxheUluZGV4
ICE9IG5vdEZvdW5kKTsKLSAgICBtX3BhZ2VPdmVybGF5cy5yZW1vdmUob3ZlcmxheUluZGV4KTsK
LQotICAgIHVwZGF0ZUZvcmNlU3luY2hyb25vdXNTY3JvbGxMYXllclBvc2l0aW9uVXBkYXRlcygp
OwotfQotCi12b2lkIFBhZ2VPdmVybGF5Q29udHJvbGxlcjo6dXBkYXRlRm9yY2VTeW5jaHJvbm91
c1Njcm9sbExheWVyUG9zaXRpb25VcGRhdGVzKCkKLXsKLSNpZiBFTkFCTEUoQVNZTkNfU0NST0xM
SU5HKQotICAgIGJvb2wgZm9yY2VTeW5jaHJvbm91c1Njcm9sbExheWVyUG9zaXRpb25VcGRhdGVz
ID0gZmFsc2U7Ci0KLSAgICBmb3IgKGF1dG8mIG92ZXJsYXkgOiBtX3BhZ2VPdmVybGF5cykgewot
ICAgICAgICBpZiAob3ZlcmxheS0+b3ZlcmxheVR5cGUoKSA9PSBQYWdlT3ZlcmxheTo6T3Zlcmxh
eVR5cGU6OlZpZXcpCi0gICAgICAgICAgICBmb3JjZVN5bmNocm9ub3VzU2Nyb2xsTGF5ZXJQb3Np
dGlvblVwZGF0ZXMgPSB0cnVlOwotICAgIH0KLQotICAgIGlmIChQYWdlKiBwYWdlID0gbV93ZWJQ
YWdlLmNvcmVQYWdlKCkpIHsKLSAgICAgICAgaWYgKFNjcm9sbGluZ0Nvb3JkaW5hdG9yKiBzY3Jv
bGxpbmdDb29yZGluYXRvciA9IHBhZ2UtPnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkpCi0gICAgICAg
ICAgICBzY3JvbGxpbmdDb29yZGluYXRvci0+c2V0Rm9yY2VTeW5jaHJvbm91c1Njcm9sbExheWVy
UG9zaXRpb25VcGRhdGVzKGZvcmNlU3luY2hyb25vdXNTY3JvbGxMYXllclBvc2l0aW9uVXBkYXRl
cyk7Ci0gICAgfQotI2VuZGlmCi19Ci0KLXZvaWQgUGFnZU92ZXJsYXlDb250cm9sbGVyOjpzZXRQ
YWdlT3ZlcmxheU5lZWRzRGlzcGxheShQYWdlT3ZlcmxheSYgb3ZlcmxheSwgY29uc3QgV2ViQ29y
ZTo6SW50UmVjdCYgZGlydHlSZWN0KQotewotICAgIEFTU0VSVChtX3BhZ2VPdmVybGF5cy5jb250
YWlucygmb3ZlcmxheSkpOwotICAgIEdyYXBoaWNzTGF5ZXImIGdyYXBoaWNzTGF5ZXIgPSAqbV9v
dmVybGF5R3JhcGhpY3NMYXllcnMuZ2V0KCZvdmVybGF5KTsKLQotICAgIGlmICghZ3JhcGhpY3NM
YXllci5kcmF3c0NvbnRlbnQoKSkgewotICAgICAgICBncmFwaGljc0xheWVyLnNldERyYXdzQ29u
dGVudCh0cnVlKTsKLSAgICAgICAgdXBkYXRlT3ZlcmxheUdlb21ldHJ5KG92ZXJsYXksIGdyYXBo
aWNzTGF5ZXIpOwotICAgIH0KLQotICAgIGdyYXBoaWNzTGF5ZXIuc2V0TmVlZHNEaXNwbGF5SW5S
ZWN0KGRpcnR5UmVjdCk7Ci19Ci0KLXZvaWQgUGFnZU92ZXJsYXlDb250cm9sbGVyOjpzZXRQYWdl
T3ZlcmxheU9wYWNpdHkoUGFnZU92ZXJsYXkmIG92ZXJsYXksIGZsb2F0IG9wYWNpdHkpCi17Ci0g
ICAgQVNTRVJUKG1fcGFnZU92ZXJsYXlzLmNvbnRhaW5zKCZvdmVybGF5KSk7Ci0gICAgbV9vdmVy
bGF5R3JhcGhpY3NMYXllcnMuZ2V0KCZvdmVybGF5KS0+c2V0T3BhY2l0eShvcGFjaXR5KTsKLX0K
LQotdm9pZCBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6OmNsZWFyUGFnZU92ZXJsYXkoUGFnZU92ZXJs
YXkmIG92ZXJsYXkpCi17Ci0gICAgQVNTRVJUKG1fcGFnZU92ZXJsYXlzLmNvbnRhaW5zKCZvdmVy
bGF5KSk7Ci0gICAgbV9vdmVybGF5R3JhcGhpY3NMYXllcnMuZ2V0KCZvdmVybGF5KS0+c2V0RHJh
d3NDb250ZW50KGZhbHNlKTsKLX0KLQotR3JhcGhpY3NMYXllciogUGFnZU92ZXJsYXlDb250cm9s
bGVyOjpsYXllckZvck92ZXJsYXkoUGFnZU92ZXJsYXkmIG92ZXJsYXkpIGNvbnN0Ci17Ci0gICAg
QVNTRVJUKG1fcGFnZU92ZXJsYXlzLmNvbnRhaW5zKCZvdmVybGF5KSk7Ci0gICAgcmV0dXJuIG1f
b3ZlcmxheUdyYXBoaWNzTGF5ZXJzLmdldCgmb3ZlcmxheSk7Ci19Ci0KLXZvaWQgUGFnZU92ZXJs
YXlDb250cm9sbGVyOjpkaWRDaGFuZ2VWaWV3U2l6ZSgpCi17Ci0gICAgZm9yIChhdXRvJiBvdmVy
bGF5QW5kTGF5ZXIgOiBtX292ZXJsYXlHcmFwaGljc0xheWVycykgewotICAgICAgICBpZiAob3Zl
cmxheUFuZExheWVyLmtleS0+b3ZlcmxheVR5cGUoKSA9PSBQYWdlT3ZlcmxheTo6T3ZlcmxheVR5
cGU6OlZpZXcpCi0gICAgICAgICAgICB1cGRhdGVPdmVybGF5R2VvbWV0cnkoKm92ZXJsYXlBbmRM
YXllci5rZXksICpvdmVybGF5QW5kTGF5ZXIudmFsdWUpOwotICAgIH0KLX0KLQotdm9pZCBQYWdl
T3ZlcmxheUNvbnRyb2xsZXI6OmRpZENoYW5nZURvY3VtZW50U2l6ZSgpCi17Ci0gICAgZm9yIChh
dXRvJiBvdmVybGF5QW5kTGF5ZXIgOiBtX292ZXJsYXlHcmFwaGljc0xheWVycykgewotICAgICAg
ICBpZiAob3ZlcmxheUFuZExheWVyLmtleS0+b3ZlcmxheVR5cGUoKSA9PSBQYWdlT3ZlcmxheTo6
T3ZlcmxheVR5cGU6OkRvY3VtZW50KQotICAgICAgICAgICAgdXBkYXRlT3ZlcmxheUdlb21ldHJ5
KCpvdmVybGF5QW5kTGF5ZXIua2V5LCAqb3ZlcmxheUFuZExheWVyLnZhbHVlKTsKLSAgICB9Ci19
Ci0KLXZvaWQgUGFnZU92ZXJsYXlDb250cm9sbGVyOjpkaWRDaGFuZ2VQcmVmZXJlbmNlcygpCi17
Ci0gICAgZm9yIChhdXRvJiBncmFwaGljc0xheWVyIDogbV9vdmVybGF5R3JhcGhpY3NMYXllcnMu
dmFsdWVzKCkpCi0gICAgICAgIHVwZGF0ZVNldHRpbmdzRm9yTGF5ZXIoKmdyYXBoaWNzTGF5ZXIp
OwotfQotCi12b2lkIFBhZ2VPdmVybGF5Q29udHJvbGxlcjo6ZGlkQ2hhbmdlRGV2aWNlU2NhbGVG
YWN0b3IoKQotewotICAgIG1fZG9jdW1lbnRPdmVybGF5Um9vdExheWVyLT5ub3RlRGV2aWNlT3JQ
YWdlU2NhbGVGYWN0b3JDaGFuZ2VkSW5jbHVkaW5nRGVzY2VuZGFudHMoKTsKLSAgICBtX3ZpZXdP
dmVybGF5Um9vdExheWVyLT5ub3RlRGV2aWNlT3JQYWdlU2NhbGVGYWN0b3JDaGFuZ2VkSW5jbHVk
aW5nRGVzY2VuZGFudHMoKTsKLQotICAgIGZvciAoYXV0byYgZ3JhcGhpY3NMYXllciA6IG1fb3Zl
cmxheUdyYXBoaWNzTGF5ZXJzLnZhbHVlcygpKQotICAgICAgICBncmFwaGljc0xheWVyLT5zZXRO
ZWVkc0Rpc3BsYXkoKTsKLX0KLQotdm9pZCBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6OmRpZENoYW5n
ZUV4cG9zZWRSZWN0KCkKLXsKLSAgICBtX3dlYlBhZ2UuZHJhd2luZ0FyZWEoKS0+c2NoZWR1bGVD
b21wb3NpdGluZ0xheWVyRmx1c2goKTsKLX0KLQotdm9pZCBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6
OmRpZFNjcm9sbEZyYW1lKEZyYW1lKiBmcmFtZSkKLXsKLSAgICBmb3IgKGF1dG8mIG92ZXJsYXlB
bmRMYXllciA6IG1fb3ZlcmxheUdyYXBoaWNzTGF5ZXJzKSB7Ci0gICAgICAgIGlmIChvdmVybGF5
QW5kTGF5ZXIua2V5LT5vdmVybGF5VHlwZSgpID09IFBhZ2VPdmVybGF5OjpPdmVybGF5VHlwZTo6
VmlldyB8fCAhZnJhbWUtPmlzTWFpbkZyYW1lKCkpCi0gICAgICAgICAgICBvdmVybGF5QW5kTGF5
ZXIudmFsdWUtPnNldE5lZWRzRGlzcGxheSgpOwotICAgICAgICBvdmVybGF5QW5kTGF5ZXIua2V5
LT5kaWRTY3JvbGxGcmFtZShmcmFtZSk7Ci0gICAgfQotfQotCi12b2lkIFBhZ2VPdmVybGF5Q29u
dHJvbGxlcjo6Zmx1c2hQYWdlT3ZlcmxheUxheWVycyhGbG9hdFJlY3QgdmlzaWJsZVJlY3QpCi17
Ci0gICAgbV92aWV3T3ZlcmxheVJvb3RMYXllci0+Zmx1c2hDb21wb3NpdGluZ1N0YXRlKHZpc2li
bGVSZWN0KTsKLX0KLQotdm9pZCBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6OnVwZGF0ZVNldHRpbmdz
Rm9yTGF5ZXIoR3JhcGhpY3NMYXllciYgbGF5ZXIpCi17Ci0gICAgU2V0dGluZ3MmIHNldHRpbmdz
ID0gbV93ZWJQYWdlLmNvcmVQYWdlKCktPnNldHRpbmdzKCk7Ci0gICAgbGF5ZXIuc2V0QWNjZWxl
cmF0ZXNEcmF3aW5nKHNldHRpbmdzLmFjY2VsZXJhdGVkRHJhd2luZ0VuYWJsZWQoKSk7Ci0gICAg
bGF5ZXIuc2V0U2hvd0RlYnVnQm9yZGVyKHNldHRpbmdzLnNob3dEZWJ1Z0JvcmRlcnMoKSk7Ci0g
ICAgbGF5ZXIuc2V0U2hvd1JlcGFpbnRDb3VudGVyKHNldHRpbmdzLnNob3dSZXBhaW50Q291bnRl
cigpKTsKLX0KLQotYm9vbCBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6OmhhbmRsZU1vdXNlRXZlbnQo
Y29uc3QgV2ViTW91c2VFdmVudCYgbW91c2VFdmVudCkKLXsKLSAgICBpZiAoIW1fcGFnZU92ZXJs
YXlzLnNpemUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgZm9yIChhdXRvIGl0ID0g
bV9wYWdlT3ZlcmxheXMucmJlZ2luKCksIGVuZCA9IG1fcGFnZU92ZXJsYXlzLnJlbmQoKTsgaXQg
IT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGlmICgoKml0KS0+bW91c2VFdmVudChtb3VzZUV2ZW50
KSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsK
LX0KLQotV0tUeXBlUmVmIFBhZ2VPdmVybGF5Q29udHJvbGxlcjo6Y29weUFjY2Vzc2liaWxpdHlB
dHRyaWJ1dGVWYWx1ZShXS1N0cmluZ1JlZiBhdHRyaWJ1dGUsIFdLVHlwZVJlZiBwYXJhbWV0ZXIp
Ci17Ci0gICAgaWYgKCFtX3BhZ2VPdmVybGF5cy5zaXplKCkpCi0gICAgICAgIHJldHVybiBudWxs
cHRyOwotCi0gICAgZm9yIChhdXRvIGl0ID0gbV9wYWdlT3ZlcmxheXMucmJlZ2luKCksIGVuZCA9
IG1fcGFnZU92ZXJsYXlzLnJlbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGlmIChX
S1R5cGVSZWYgdmFsdWUgPSAoKml0KS0+Y29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZShh
dHRyaWJ1dGUsIHBhcmFtZXRlcikpCi0gICAgICAgICAgICByZXR1cm4gdmFsdWU7Ci0gICAgfQot
Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLVdLQXJyYXlSZWYgUGFnZU92ZXJsYXlDb250cm9s
bGVyOjpjb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZXNOYW1lcyhib29sIHBhcmFtZXRlcml6ZWRO
YW1lcykKLXsKLSAgICBpZiAoIW1fcGFnZU92ZXJsYXlzLnNpemUoKSkKLSAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0KLSAgICBmb3IgKGF1dG8gaXQgPSBtX3BhZ2VPdmVybGF5cy5yYmVnaW4oKSwg
ZW5kID0gbV9wYWdlT3ZlcmxheXMucmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAg
aWYgKFdLQXJyYXlSZWYgdmFsdWUgPSAoKml0KS0+Y29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVO
YW1lcyhwYXJhbWV0ZXJpemVkTmFtZXMpKQotICAgICAgICAgICAgcmV0dXJuIHZhbHVlOwotICAg
IH0KLQotICAgIHJldHVybiBudWxscHRyOwotfQotCi12b2lkIFBhZ2VPdmVybGF5Q29udHJvbGxl
cjo6cGFpbnRDb250ZW50cyhjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiBncmFwaGljc0xh
eWVyLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgV2ViQ29yZTo6
R3JhcGhpY3NMYXllclBhaW50aW5nUGhhc2UsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgY2xp
cFJlY3QpCi17Ci0gICAgZm9yIChhdXRvIGl0ID0gbV9vdmVybGF5R3JhcGhpY3NMYXllcnMuYmVn
aW4oKSwgZW5kID0gbV9vdmVybGF5R3JhcGhpY3NMYXllcnMuZW5kKCk7IGl0ICE9IGVuZDsgKytp
dCkgewotICAgICAgICBpZiAoaXQtPnZhbHVlLmdldCgpICE9IGdyYXBoaWNzTGF5ZXIpCi0gICAg
ICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0
YXRlU2F2ZXIoZ3JhcGhpY3NDb250ZXh0KTsKLSAgICAgICAgZ3JhcGhpY3NDb250ZXh0LmNsaXAo
Y2xpcFJlY3QpOwotICAgICAgICBpdC0+a2V5LT5kcmF3UmVjdChncmFwaGljc0NvbnRleHQsIGVu
Y2xvc2luZ0ludFJlY3QoY2xpcFJlY3QpKTsKLQotICAgICAgICByZXR1cm47Ci0gICAgfQotfQot
Ci1mbG9hdCBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6OmRldmljZVNjYWxlRmFjdG9yKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gbV93ZWJQYWdlLmNvcmVQYWdlKCktPmRldmljZVNjYWxlRmFjdG9yKCk7
Ci19Ci0KLXZvaWQgUGFnZU92ZXJsYXlDb250cm9sbGVyOjpub3RpZnlGbHVzaFJlcXVpcmVkKGNv
bnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKQotewotICAgIGlmIChtX3dlYlBhZ2UuZHJhd2lu
Z0FyZWEoKSkKLSAgICAgICAgbV93ZWJQYWdlLmRyYXdpbmdBcmVhKCktPnNjaGVkdWxlQ29tcG9z
aXRpbmdMYXllckZsdXNoKCk7Ci19Ci0KLXZvaWQgUGFnZU92ZXJsYXlDb250cm9sbGVyOjpkaWRD
aGFuZ2VPdmVybGF5RnJhbWUoUGFnZU92ZXJsYXkmIG92ZXJsYXkpCi17Ci0gICAgQVNTRVJUKG1f
cGFnZU92ZXJsYXlzLmNvbnRhaW5zKCZvdmVybGF5KSk7Ci0gICAgdXBkYXRlT3ZlcmxheUdlb21l
dHJ5KG92ZXJsYXksICptX292ZXJsYXlHcmFwaGljc0xheWVycy5nZXQoJm92ZXJsYXkpKTsKLX0K
LQotdm9pZCBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6OmRpZENoYW5nZU92ZXJsYXlCYWNrZ3JvdW5k
Q29sb3IoUGFnZU92ZXJsYXkmIG92ZXJsYXkpCi17Ci0gICAgQVNTRVJUKG1fcGFnZU92ZXJsYXlz
LmNvbnRhaW5zKCZvdmVybGF5KSk7Ci0gICAgbV9vdmVybGF5R3JhcGhpY3NMYXllcnMuZ2V0KCZv
dmVybGF5KS0+c2V0QmFja2dyb3VuZENvbG9yKG92ZXJsYXkuYmFja2dyb3VuZENvbG9yKCkpOwot
fQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9QYWdlT3ZlcmxheUNvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9QYWdlT3ZlcmxheUNvbnRyb2xsZXIuaApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMjUxODJkNS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvUGFnZU92ZXJsYXlDb250cm9sbGVyLmgKKysrIC9kZXYvbnVsbApA
QCAtMSw5OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBQYWdlT3ZlcmxheUNvbnRyb2xs
ZXJfaAotI2RlZmluZSBQYWdlT3ZlcmxheUNvbnRyb2xsZXJfaAotCi0jaW5jbHVkZSAiUGFnZU92
ZXJsYXkuaCIKLSNpbmNsdWRlICJXS0Jhc2UuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNz
TGF5ZXJDbGllbnQuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9S
ZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LWNsYXNzIEZyYW1lOwotfQotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgV2ViTW91c2VF
dmVudDsKLWNsYXNzIFdlYlBhZ2U7Ci0KLWNsYXNzIFBhZ2VPdmVybGF5Q29udHJvbGxlciA6IHB1
YmxpYyBXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2xpZW50IHsKLXB1YmxpYzoKLSAgICBQYWdlT3Zl
cmxheUNvbnRyb2xsZXIoV2ViUGFnZSYpOwotCi0gICAgdm9pZCBpbml0aWFsaXplKCk7Ci0KLSAg
ICBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiBkb2N1bWVudE92ZXJsYXlSb290TGF5ZXIoKSBjb25z
dCB7IHJldHVybiBtX2RvY3VtZW50T3ZlcmxheVJvb3RMYXllci5nZXQoKTsgfQotICAgIFdlYkNv
cmU6OkdyYXBoaWNzTGF5ZXIqIHZpZXdPdmVybGF5Um9vdExheWVyKCkgY29uc3QgeyByZXR1cm4g
bV92aWV3T3ZlcmxheVJvb3RMYXllci5nZXQoKTsgfQotCi0gICAgdm9pZCBpbnN0YWxsUGFnZU92
ZXJsYXkoUGFzc1JlZlB0cjxQYWdlT3ZlcmxheT4sIFBhZ2VPdmVybGF5OjpGYWRlTW9kZSk7Ci0g
ICAgdm9pZCB1bmluc3RhbGxQYWdlT3ZlcmxheShQYWdlT3ZlcmxheSosIFBhZ2VPdmVybGF5OjpG
YWRlTW9kZSk7Ci0KLSAgICB2b2lkIHNldFBhZ2VPdmVybGF5TmVlZHNEaXNwbGF5KFBhZ2VPdmVy
bGF5JiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOwotICAgIHZvaWQgc2V0UGFnZU92ZXJsYXlP
cGFjaXR5KFBhZ2VPdmVybGF5JiwgZmxvYXQpOwotICAgIHZvaWQgY2xlYXJQYWdlT3ZlcmxheShQ
YWdlT3ZlcmxheSYpOwotICAgIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqIGxheWVyRm9yT3Zlcmxh
eShQYWdlT3ZlcmxheSYpIGNvbnN0OwotCi0gICAgdm9pZCBkaWRDaGFuZ2VWaWV3U2l6ZSgpOwot
ICAgIHZvaWQgZGlkQ2hhbmdlRG9jdW1lbnRTaXplKCk7Ci0gICAgdm9pZCBkaWRDaGFuZ2VQcmVm
ZXJlbmNlcygpOwotICAgIHZvaWQgZGlkQ2hhbmdlRGV2aWNlU2NhbGVGYWN0b3IoKTsKLSAgICB2
b2lkIGRpZENoYW5nZUV4cG9zZWRSZWN0KCk7Ci0gICAgdm9pZCBkaWRTY3JvbGxGcmFtZShXZWJD
b3JlOjpGcmFtZSopOwotCi0gICAgdm9pZCBkaWRDaGFuZ2VPdmVybGF5RnJhbWUoUGFnZU92ZXJs
YXkmKTsKLSAgICB2b2lkIGRpZENoYW5nZU92ZXJsYXlCYWNrZ3JvdW5kQ29sb3IoUGFnZU92ZXJs
YXkmKTsKLQotICAgIHZvaWQgZmx1c2hQYWdlT3ZlcmxheUxheWVycyhXZWJDb3JlOjpGbG9hdFJl
Y3QpOwotCi0gICAgYm9vbCBoYW5kbGVNb3VzZUV2ZW50KGNvbnN0IFdlYk1vdXNlRXZlbnQmKTsK
LQotICAgIC8vIEZJWE1FOiBXZSBzaG91bGRuJ3QgdXNlIEFQSSB0eXBlcyBoZXJlLgotICAgIFdL
VHlwZVJlZiBjb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlKFdLU3RyaW5nUmVmIGF0dHJp
YnV0ZSwgV0tUeXBlUmVmIHBhcmFtZXRlcik7Ci0gICAgV0tBcnJheVJlZiBjb3B5QWNjZXNzaWJp
bGl0eUF0dHJpYnV0ZXNOYW1lcyhib29sIHBhcmFtZXRlcml6ZWROYW1lcyk7Ci0KLXByaXZhdGU6
Ci0gICAgdm9pZCB1cGRhdGVTZXR0aW5nc0ZvckxheWVyKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIm
KTsKLSAgICB2b2lkIHVwZGF0ZUZvcmNlU3luY2hyb25vdXNTY3JvbGxMYXllclBvc2l0aW9uVXBk
YXRlcygpOwotCi0gICAgLy8gV2ViQ29yZTo6R3JhcGhpY3NMYXllckNsaWVudAotICAgIHZpcnR1
YWwgdm9pZCBub3RpZnlGbHVzaFJlcXVpcmVkKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIq
KSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50cyhjb25zdCBXZWJDb3Jl
OjpHcmFwaGljc0xheWVyKiwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiwgV2ViQ29yZTo6R3Jh
cGhpY3NMYXllclBhaW50aW5nUGhhc2UsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgY2xpcFJl
Y3QpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IoKSBjb25z
dCBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkU2tpcExheWVySW5EdW1wKGNvbnN0
IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9
Ci0KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6R3JhcGhpY3NMYXllcj4gbV9kb2N1bWVu
dE92ZXJsYXlSb290TGF5ZXI7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OkdyYXBoaWNz
TGF5ZXI+IG1fdmlld092ZXJsYXlSb290TGF5ZXI7Ci0gICAgSGFzaE1hcDxQYWdlT3ZlcmxheSos
IHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpHcmFwaGljc0xheWVyPj4gbV9vdmVybGF5R3JhcGhp
Y3NMYXllcnM7Ci0gICAgVmVjdG9yPFJlZlB0cjxQYWdlT3ZlcmxheT4+IG1fcGFnZU92ZXJsYXlz
OwotICAgIFdlYlBhZ2UmIG1fd2ViUGFnZTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAot
Ci0jZW5kaWYgLy8gUGFnZU92ZXJsYXlDb250cm9sbGVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9TZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyLmggYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvU2VydmljZXNPdmVybGF5Q29udHJvbGxl
ci5oCmluZGV4IDNiMDlkM2QuLjhlZDMxMmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9TZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyLmgKKysrIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1NlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIuaApA
QCAtMjgsOSArMjgsOSBAQAogCiAjaWYgRU5BQkxFKFNFUlZJQ0VfQ09OVFJPTFMpIHx8IEVOQUJM
RShURUxFUEhPTkVfTlVNQkVSX0RFVEVDVElPTikKIAotI2luY2x1ZGUgIlBhZ2VPdmVybGF5Lmgi
CiAjaW5jbHVkZSAiV2ViRnJhbWUuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzTGF5ZXJD
bGllbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1BhZ2VPdmVybGF5Lmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9SYW5nZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvVGltZXIuaD4KICNpbmNsdWRlIDx3dGYv
UmVmQ291bnRlZC5oPgpAQCAtMzksNyArMzksNiBAQCB0eXBlZGVmIHZvaWQqIERESGlnaGxpZ2h0
UmVmOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBMYXlvdXRSZWN0OwotCiBzdHJ1Y3Qg
R2FwUmVjdHM7CiB9CiAKQEAgLTQ3LDcgKzQ2LDcgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNs
YXNzIFdlYlBhZ2U7CiAKLWNsYXNzIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIgOiBwcml2YXRl
IFBhZ2VPdmVybGF5OjpDbGllbnQgeworY2xhc3MgU2VydmljZXNPdmVybGF5Q29udHJvbGxlciA6
IHByaXZhdGUgV2ViQ29yZTo6UGFnZU92ZXJsYXk6OkNsaWVudCB7CiBwdWJsaWM6CiAgICAgU2Vy
dmljZXNPdmVybGF5Q29udHJvbGxlcihXZWJQYWdlJik7CiAgICAgflNlcnZpY2VzT3ZlcmxheUNv
bnRyb2xsZXIoKTsKQEAgLTk4LDEyICs5NywxMiBAQCBwcml2YXRlOgogICAgIH07CiAKICAgICAv
LyBQYWdlT3ZlcmxheTo6Q2xpZW50Ci0gICAgdmlydHVhbCB2b2lkIHBhZ2VPdmVybGF5RGVzdHJv
eWVkKFBhZ2VPdmVybGF5Kikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHdpbGxNb3ZlVG9X
ZWJQYWdlKFBhZ2VPdmVybGF5KiwgV2ViUGFnZSopIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9p
ZCBkaWRNb3ZlVG9XZWJQYWdlKFBhZ2VPdmVybGF5KiwgV2ViUGFnZSopIG92ZXJyaWRlOwotICAg
IHZpcnR1YWwgdm9pZCBkcmF3UmVjdChQYWdlT3ZlcmxheSosIFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dCYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGRpcnR5UmVjdCkgb3ZlcnJpZGU7Ci0gICAg
dmlydHVhbCBib29sIG1vdXNlRXZlbnQoUGFnZU92ZXJsYXkqLCBjb25zdCBXZWJNb3VzZUV2ZW50
Jikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGRpZFNjcm9sbEZyYW1lKFBhZ2VPdmVybGF5
KiwgV2ViQ29yZTo6RnJhbWUqKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFnZU92ZXJs
YXlEZXN0cm95ZWQoV2ViQ29yZTo6UGFnZU92ZXJsYXkqKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFs
IHZvaWQgd2lsbE1vdmVUb1BhZ2UoV2ViQ29yZTo6UGFnZU92ZXJsYXkqLCBXZWJDb3JlOjpQYWdl
Kikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGRpZE1vdmVUb1BhZ2UoV2ViQ29yZTo6UGFn
ZU92ZXJsYXkqLCBXZWJDb3JlOjpQYWdlKikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGRy
YXdSZWN0KFdlYkNvcmU6OlBhZ2VPdmVybGF5KiwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Jiwg
Y29uc3QgV2ViQ29yZTo6SW50UmVjdCYgZGlydHlSZWN0KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFs
IGJvb2wgbW91c2VFdmVudChXZWJDb3JlOjpQYWdlT3ZlcmxheSosIGNvbnN0IFdlYkNvcmU6OlBs
YXRmb3JtTW91c2VFdmVudCYpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBkaWRTY3JvbGxG
cmFtZShXZWJDb3JlOjpQYWdlT3ZlcmxheSosIFdlYkNvcmU6OkZyYW1lJikgb3ZlcnJpZGU7CiAK
ICAgICB2b2lkIGNyZWF0ZU92ZXJsYXlJZk5lZWRlZCgpOwogICAgIHZvaWQgaGFuZGxlQ2xpY2so
Y29uc3QgV2ViQ29yZTo6SW50UG9pbnQmLCBIaWdobGlnaHQmKTsKQEAgLTEzOSw3ICsxMzgsNyBA
QCBwcml2YXRlOgogICAgIFdlYlBhZ2UmIHdlYlBhZ2UoKSBjb25zdCB7IHJldHVybiBtX3dlYlBh
Z2U7IH0KIAogICAgIFdlYlBhZ2UmIG1fd2ViUGFnZTsKLSAgICBQYWdlT3ZlcmxheSogbV9zZXJ2
aWNlc092ZXJsYXk7CisgICAgV2ViQ29yZTo6UGFnZU92ZXJsYXkqIG1fc2VydmljZXNPdmVybGF5
OwogCiAgICAgUmVmUHRyPEhpZ2hsaWdodD4gbV9hY3RpdmVIaWdobGlnaHQ7CiAgICAgUmVmUHRy
PEhpZ2hsaWdodD4gbV9uZXh0QWN0aXZlSGlnaGxpZ2h0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCmluZGV4IGNjYzYzYjUuLmZjZjAzMzUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKQEAgLTMyNiw3
ICszMjYsNiBAQCBXZWJQYWdlOjpXZWJQYWdlKHVpbnQ2NF90IHBhZ2VJRCwgY29uc3QgV2ViUGFn
ZUNyZWF0aW9uUGFyYW1ldGVycyYgcGFyYW1ldGVycykKICNpZiBFTkFCTEUoV0VCR0wpCiAgICAg
LCBtX3N5c3RlbVdlYkdMUG9saWN5KFdlYkdMQWxsb3dDcmVhdGlvbikKICNlbmRpZgotICAgICwg
bV9wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKnRoaXMpCiB7CiAgICAgQVNTRVJUKG1fcGFnZUlEKTsK
ICAgICAvLyBGSVhNRTogVGhpcyBpcyBhIG5vbi1pZGVhbCBsb2NhdGlvbiBmb3IgdGhpcyBTZXR0
aW5nIGFuZApAQCAtMzY1LDcgKzM2NCw2IEBAIFdlYlBhZ2U6OldlYlBhZ2UodWludDY0X3QgcGFn
ZUlELCBjb25zdCBXZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzKQogCiAgICAg
bV9kcmF3aW5nQXJlYSA9IERyYXdpbmdBcmVhOjpjcmVhdGUoKnRoaXMsIHBhcmFtZXRlcnMpOwog
ICAgIG1fZHJhd2luZ0FyZWEtPnNldFBhaW50aW5nRW5hYmxlZChmYWxzZSk7Ci0gICAgbV9wYWdl
T3ZlcmxheUNvbnRyb2xsZXIuaW5pdGlhbGl6ZSgpOwogCiAjaWYgRU5BQkxFKEFTWU5DX1NDUk9M
TElORykKICAgICBtX3VzZUFzeW5jU2Nyb2xsaW5nID0gcGFyYW1ldGVycy5zdG9yZS5nZXRCb29s
VmFsdWVGb3JLZXkoV2ViUHJlZmVyZW5jZXNLZXk6OnRocmVhZGVkU2Nyb2xsaW5nRW5hYmxlZEtl
eSgpKTsKQEAgLTEyMTMsOCArMTIxMSw2IEBAIHZvaWQgV2ViUGFnZTo6c2V0U2l6ZShjb25zdCBX
ZWJDb3JlOjpJbnRTaXplJiB2aWV3U2l6ZSkKICAgICBpZiAodmlldy0+dXNlRml4ZWRMYXlvdXQo
KSkKICAgICAgICAgc2VuZFZpZXdwb3J0QXR0cmlidXRlc0NoYW5nZWQoKTsKICNlbmRpZgotCi0g
ICAgbV9wYWdlT3ZlcmxheUNvbnRyb2xsZXIuZGlkQ2hhbmdlVmlld1NpemUoKTsKIH0KIAogI2lm
IFVTRShUSUxFRF9CQUNLSU5HX1NUT1JFKQpAQCAtMTQ0MCw4ICsxNDM2LDYgQEAgdm9pZCBXZWJQ
YWdlOjpzZXREZXZpY2VTY2FsZUZhY3RvcihmbG9hdCBzY2FsZUZhY3RvcikKIAogICAgIGlmICht
X2RyYXdpbmdBcmVhLT5sYXllclRyZWVIb3N0KCkpCiAgICAgICAgIG1fZHJhd2luZ0FyZWEtPmxh
eWVyVHJlZUhvc3QoKS0+ZGV2aWNlT3JQYWdlU2NhbGVGYWN0b3JDaGFuZ2VkKCk7Ci0KLSAgICBt
X3BhZ2VPdmVybGF5Q29udHJvbGxlci5kaWRDaGFuZ2VEZXZpY2VTY2FsZUZhY3RvcigpOwogfQog
CiBmbG9hdCBXZWJQYWdlOjpkZXZpY2VTY2FsZUZhY3RvcigpIGNvbnN0CkBAIC0xNTY0LDE2ICsx
NTU4LDYgQEAgdm9pZCBXZWJQYWdlOjpwb3N0SW5qZWN0ZWRCdW5kbGVNZXNzYWdlKGNvbnN0IFN0
cmluZyYgbWVzc2FnZU5hbWUsIElQQzo6TWVzc2FnZUQKICAgICBpbmplY3RlZEJ1bmRsZS0+ZGlk
UmVjZWl2ZU1lc3NhZ2VUb1BhZ2UodGhpcywgbWVzc2FnZU5hbWUsIG1lc3NhZ2VCb2R5LmdldCgp
KTsKIH0KIAotdm9pZCBXZWJQYWdlOjppbnN0YWxsUGFnZU92ZXJsYXkoUGFzc1JlZlB0cjxQYWdl
T3ZlcmxheT4gcGFnZU92ZXJsYXksIFBhZ2VPdmVybGF5OjpGYWRlTW9kZSBmYWRlTW9kZSkKLXsK
LSAgICBtX3BhZ2VPdmVybGF5Q29udHJvbGxlci5pbnN0YWxsUGFnZU92ZXJsYXkocGFnZU92ZXJs
YXksIGZhZGVNb2RlKTsKLX0KLQotdm9pZCBXZWJQYWdlOjp1bmluc3RhbGxQYWdlT3ZlcmxheShQ
YWdlT3ZlcmxheSogcGFnZU92ZXJsYXksIFBhZ2VPdmVybGF5OjpGYWRlTW9kZSBmYWRlTW9kZSkK
LXsKLSAgICBtX3BhZ2VPdmVybGF5Q29udHJvbGxlci51bmluc3RhbGxQYWdlT3ZlcmxheShwYWdl
T3ZlcmxheSwgZmFkZU1vZGUpOwotfQotCiAjaWYgIVBMQVRGT1JNKElPUykKIHZvaWQgV2ViUGFn
ZTo6c2V0SGVhZGVyUGFnZUJhbm5lcihQYXNzUmVmUHRyPFBhZ2VCYW5uZXI+IHBhZ2VCYW5uZXIp
CiB7CkBAIC0xOTAxLDcgKzE4ODUsNyBAQCB2b2lkIFdlYlBhZ2U6Om1vdXNlRXZlbnQoY29uc3Qg
V2ViTW91c2VFdmVudCYgbW91c2VFdmVudCkKICAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRp
ZgotICAgIGJvb2wgaGFuZGxlZCA9IG1fcGFnZU92ZXJsYXlDb250cm9sbGVyLmhhbmRsZU1vdXNl
RXZlbnQobW91c2VFdmVudCk7CisgICAgYm9vbCBoYW5kbGVkID0gZmFsc2U7CiAKICNpZiAhUExB
VEZPUk0oSU9TKQogICAgIGlmICghaGFuZGxlZCAmJiBtX2hlYWRlckJhbm5lcikKQEAgLTE5Mjcs
NyArMTkxMSw3IEBAIHZvaWQgV2ViUGFnZTo6bW91c2VFdmVudChjb25zdCBXZWJNb3VzZUV2ZW50
JiBtb3VzZUV2ZW50KQogCiB2b2lkIFdlYlBhZ2U6Om1vdXNlRXZlbnRTeW5jRm9yVGVzdGluZyhj
b25zdCBXZWJNb3VzZUV2ZW50JiBtb3VzZUV2ZW50LCBib29sJiBoYW5kbGVkKQogewotICAgIGhh
bmRsZWQgPSBtX3BhZ2VPdmVybGF5Q29udHJvbGxlci5oYW5kbGVNb3VzZUV2ZW50KG1vdXNlRXZl
bnQpOworICAgIGhhbmRsZWQgPSBmYWxzZTsKICNpZiAhUExBVEZPUk0oSU9TKQogICAgIGlmICgh
aGFuZGxlZCAmJiBtX2hlYWRlckJhbm5lcikKICAgICAgICAgaGFuZGxlZCA9IG1faGVhZGVyQmFu
bmVyLT5tb3VzZUV2ZW50KG1vdXNlRXZlbnQpOwpAQCAtMjg1Niw4ICsyODQwLDYgQEAgdm9pZCBX
ZWJQYWdlOjp1cGRhdGVQcmVmZXJlbmNlcyhjb25zdCBXZWJQcmVmZXJlbmNlc1N0b3JlJiBzdG9y
ZSkKIAogICAgIGlmIChtX2RyYXdpbmdBcmVhKQogICAgICAgICBtX2RyYXdpbmdBcmVhLT51cGRh
dGVQcmVmZXJlbmNlcyhzdG9yZSk7Ci0KLSAgICBtX3BhZ2VPdmVybGF5Q29udHJvbGxlci5kaWRD
aGFuZ2VQcmVmZXJlbmNlcygpOwogfQogCiAjaWYgUExBVEZPUk0oQ09DT0EpCkBAIC00Nzk4LDgg
KzQ3ODAsNiBAQCBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyJiBXZWJQYWdlOjpzZXJ2aWNlc092
ZXJsYXlDb250cm9sbGVyKCkKIAogdm9pZCBXZWJQYWdlOjpkaWRDaGFuZ2VTY3JvbGxPZmZzZXRG
b3JGcmFtZShGcmFtZSogZnJhbWUpCiB7Ci0gICAgbV9wYWdlT3ZlcmxheUNvbnRyb2xsZXIuZGlk
U2Nyb2xsRnJhbWUoZnJhbWUpOwotCiAgICAgaWYgKCFmcmFtZS0+aXNNYWluRnJhbWUoKSkKICAg
ICAgICAgcmV0dXJuOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViUGFnZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBh
Z2UuaAppbmRleCBiN2Q0NDhjLi45YWI3OWI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9XZWJQYWdlLmgKQEAgLTQxLDcgKzQxLDYgQEAKICNpbmNsdWRlICJMYXllclRy
ZWVIb3N0LmgiCiAjaW5jbHVkZSAiTWVzc2FnZVJlY2VpdmVyLmgiCiAjaW5jbHVkZSAiTWVzc2Fn
ZVNlbmRlci5oIgotI2luY2x1ZGUgIlBhZ2VPdmVybGF5Q29udHJvbGxlci5oIgogI2luY2x1ZGUg
IlBsdWdpbi5oIgogI2luY2x1ZGUgIlNhbmRib3hFeHRlbnNpb24uaCIKICNpbmNsdWRlICJTaGFy
ZWFibGVCaXRtYXAuaCIKQEAgLTE0MCw3ICsxMzksNiBAQCBjbGFzcyBEcmF3aW5nQXJlYTsKIGNs
YXNzIEluamVjdGVkQnVuZGxlQmFja0ZvcndhcmRMaXN0OwogY2xhc3MgTm90aWZpY2F0aW9uUGVy
bWlzc2lvblJlcXVlc3RNYW5hZ2VyOwogY2xhc3MgUGFnZUJhbm5lcjsKLWNsYXNzIFBhZ2VPdmVy
bGF5OwogY2xhc3MgUGx1Z2luVmlldzsKIGNsYXNzIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI7
CiBjbGFzcyBWaXNpYmxlQ29udGVudFJlY3RVcGRhdGVJbmZvOwpAQCAtMjA2LDggKzIwNCw2IEBA
IHB1YmxpYzoKICAgICAKICAgICBJbmplY3RlZEJ1bmRsZUJhY2tGb3J3YXJkTGlzdCogYmFja0Zv
cndhcmRMaXN0KCk7CiAgICAgRHJhd2luZ0FyZWEqIGRyYXdpbmdBcmVhKCkgY29uc3QgeyByZXR1
cm4gbV9kcmF3aW5nQXJlYS5nZXQoKTsgfQotICAgIGNvbnN0IFBhZ2VPdmVybGF5Q29udHJvbGxl
ciYgcGFnZU92ZXJsYXlDb250cm9sbGVyKCkgY29uc3QgeyByZXR1cm4gbV9wYWdlT3ZlcmxheUNv
bnRyb2xsZXI7IH0KLSAgICBQYWdlT3ZlcmxheUNvbnRyb2xsZXImIHBhZ2VPdmVybGF5Q29udHJv
bGxlcigpIHsgcmV0dXJuIG1fcGFnZU92ZXJsYXlDb250cm9sbGVyOyB9CiAjaWYgRU5BQkxFKEFT
WU5DX1NDUk9MTElORykKICAgICBXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvciogc2Nyb2xs
aW5nQ29vcmRpbmF0b3IoKSBjb25zdDsKICNlbmRpZgpAQCAtNDE2LDggKzQxMiw2IEBAIHB1Ymxp
YzoKIAogICAgIGJvb2wgd2luZG93SXNGb2N1c2VkKCkgY29uc3Q7CiAgICAgYm9vbCB3aW5kb3dB
bmRXZWJQYWdlQXJlRm9jdXNlZCgpIGNvbnN0OwotICAgIHZvaWQgaW5zdGFsbFBhZ2VPdmVybGF5
KFBhc3NSZWZQdHI8UGFnZU92ZXJsYXk+LCBQYWdlT3ZlcmxheTo6RmFkZU1vZGUgPSBQYWdlT3Zl
cmxheTo6RmFkZU1vZGU6OkRvTm90RmFkZSk7Ci0gICAgdm9pZCB1bmluc3RhbGxQYWdlT3Zlcmxh
eShQYWdlT3ZlcmxheSosIFBhZ2VPdmVybGF5OjpGYWRlTW9kZSA9IFBhZ2VPdmVybGF5OjpGYWRl
TW9kZTo6RG9Ob3RGYWRlKTsKIAogI2lmICFQTEFURk9STShJT1MpCiAgICAgdm9pZCBzZXRIZWFk
ZXJQYWdlQmFubmVyKFBhc3NSZWZQdHI8UGFnZUJhbm5lcj4pOwpAQCAtODIyLDkgKzgxNiw2IEBA
IHB1YmxpYzoKICAgICBXZWJDb3JlOjpTY3JvbGxQaW5uaW5nQmVoYXZpb3Igc2Nyb2xsUGlubmlu
Z0JlaGF2aW9yKCkgeyByZXR1cm4gbV9zY3JvbGxQaW5uaW5nQmVoYXZpb3I7IH0KICAgICB2b2lk
IHNldFNjcm9sbFBpbm5pbmdCZWhhdmlvcih1aW50MzJfdCAvKiBXZWJDb3JlOjpTY3JvbGxQaW5u
aW5nQmVoYXZpb3IgKi8gcGlubmluZyk7CiAKLSAgICBXS1R5cGVSZWYgcGFnZU92ZXJsYXlDb3B5
QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlKFdLU3RyaW5nUmVmIGF0dHJpYnV0ZSwgV0tUeXBl
UmVmIHBhcmFtZXRlcik7Ci0gICAgV0tBcnJheVJlZiBwYWdlT3ZlcmxheUNvcHlBY2Nlc3NpYmls
aXR5QXR0cmlidXRlc05hbWVzKGJvb2wgcGFyYW1ldGVyaXplZE5hbWVzKTsKLQogICAgIFBhc3NS
ZWZQdHI8V2ViQ29yZTo6RG9jdW1lbnRMb2FkZXI+IGNyZWF0ZURvY3VtZW50TG9hZGVyKFdlYkNv
cmU6OkZyYW1lJiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgV2ViQ29y
ZTo6U3Vic3RpdHV0ZURhdGEmKTsKIAogICAgIHZvaWQgZ2V0Qnl0ZWNvZGVQcm9maWxlKHVpbnQ2
NF90IGNhbGxiYWNrSUQpOwpAQCAtMTI3Nyw4ICsxMjY4LDYgQEAgcHJpdmF0ZToKICNpZiBFTkFC
TEUoU0VSVklDRV9DT05UUk9MUykgfHwgRU5BQkxFKFRFTEVQSE9ORV9OVU1CRVJfREVURUNUSU9O
KQogICAgIHN0ZDo6dW5pcXVlX3B0cjxTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyPiBtX3NlcnZp
Y2VzT3ZlcmxheUNvbnRyb2xsZXI7CiAjZW5kaWYKLQotICAgIFBhZ2VPdmVybGF5Q29udHJvbGxl
ciBtX3BhZ2VPdmVybGF5Q29udHJvbGxlcjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VPdmVy
bGF5LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlT3Zlcmxh
eS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjdlMDYxYQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlT3Zl
cmxheS5jcHAKQEAgLTAsMCArMSwxMTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiV2ViUGFnZU92ZXJsYXkuaCIKKworI2luY2x1ZGUgIldlYkZyYW1lLmgi
CisjaW5jbHVkZSAiV2ViUGFnZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NMYXllci5o
PgorI2luY2x1ZGUgPFdlYkNvcmUvUGFnZU92ZXJsYXkuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdl
YkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitQYXNzUmVmUHRyPFdlYlBhZ2VPdmVybGF5
PiBXZWJQYWdlT3ZlcmxheTo6Y3JlYXRlKFdlYlBhZ2VPdmVybGF5OjpDbGllbnQqIGNsaWVudCwg
UGFnZU92ZXJsYXk6Ok92ZXJsYXlUeXBlIG92ZXJsYXlUeXBlKQoreworICAgIHJldHVybiBhZG9w
dFJlZihuZXcgV2ViUGFnZU92ZXJsYXkoY2xpZW50LCBvdmVybGF5VHlwZSkpOworfQorCitXZWJQ
YWdlT3ZlcmxheTo6V2ViUGFnZU92ZXJsYXkoV2ViUGFnZU92ZXJsYXk6OkNsaWVudCogY2xpZW50
LCBQYWdlT3ZlcmxheTo6T3ZlcmxheVR5cGUgb3ZlcmxheVR5cGUpCisgICAgOiBtX292ZXJsYXko
UGFnZU92ZXJsYXk6OmNyZWF0ZSh0aGlzLCBvdmVybGF5VHlwZSkpCisgICAgLCBtX2NsaWVudChj
bGllbnQpCit7Cit9CisKK1dlYlBhZ2VPdmVybGF5Ojp+V2ViUGFnZU92ZXJsYXkoKQoreworfQor
Cit2b2lkIFdlYlBhZ2VPdmVybGF5OjpzZXROZWVkc0Rpc3BsYXkoY29uc3QgSW50UmVjdCYgZGly
dHlSZWN0KQoreworICAgIG1fb3ZlcmxheS0+c2V0TmVlZHNEaXNwbGF5KGRpcnR5UmVjdCk7Cit9
CisKK3ZvaWQgV2ViUGFnZU92ZXJsYXk6OnNldE5lZWRzRGlzcGxheSgpCit7CisgICAgbV9vdmVy
bGF5LT5zZXROZWVkc0Rpc3BsYXkoKTsKK30KKwordm9pZCBXZWJQYWdlT3ZlcmxheTo6Y2xlYXIo
KQoreworICAgIG1fb3ZlcmxheS0+Y2xlYXIoKTsKK30KKwordm9pZCBXZWJQYWdlT3ZlcmxheTo6
cGFnZU92ZXJsYXlEZXN0cm95ZWQoUGFnZU92ZXJsYXkqKQoreworICAgIG1fY2xpZW50LT5wYWdl
T3ZlcmxheURlc3Ryb3llZCh0aGlzKTsKK30KKwordm9pZCBXZWJQYWdlT3ZlcmxheTo6d2lsbE1v
dmVUb1BhZ2UoUGFnZU92ZXJsYXkqLCBQYWdlKiBwYWdlKQoreworICAgIG1fY2xpZW50LT53aWxs
TW92ZVRvUGFnZSh0aGlzLCBwYWdlID8gV2ViUGFnZTo6ZnJvbUNvcmVQYWdlKHBhZ2UpIDogbnVs
bHB0cik7Cit9CisKK3ZvaWQgV2ViUGFnZU92ZXJsYXk6OmRpZE1vdmVUb1BhZ2UoUGFnZU92ZXJs
YXkqLCBQYWdlKiBwYWdlKQoreworICAgIG1fY2xpZW50LT5kaWRNb3ZlVG9QYWdlKHRoaXMsIHBh
Z2UgPyBXZWJQYWdlOjpmcm9tQ29yZVBhZ2UocGFnZSkgOiBudWxscHRyKTsKK30KKwordm9pZCBX
ZWJQYWdlT3ZlcmxheTo6ZHJhd1JlY3QoUGFnZU92ZXJsYXkqLCBHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQsIGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCkKK3sKKyAgICBtX2NsaWVudC0+ZHJhd1Jl
Y3QodGhpcywgY29udGV4dCwgZGlydHlSZWN0KTsKK30KKworYm9vbCBXZWJQYWdlT3ZlcmxheTo6
bW91c2VFdmVudChQYWdlT3ZlcmxheSosIGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgZXZlbnQp
Cit7CisgICAgcmV0dXJuIG1fY2xpZW50LT5tb3VzZUV2ZW50KHRoaXMsIGV2ZW50KTsKK30KKwor
dm9pZCBXZWJQYWdlT3ZlcmxheTo6ZGlkU2Nyb2xsRnJhbWUoUGFnZU92ZXJsYXkqLCBGcmFtZSYg
ZnJhbWUpCit7CisgICAgbV9jbGllbnQtPmRpZFNjcm9sbEZyYW1lKHRoaXMsIFdlYkZyYW1lOjpm
cm9tQ29yZUZyYW1lKGZyYW1lKSk7Cit9CisKK2Jvb2wgV2ViUGFnZU92ZXJsYXk6OmNvcHlBY2Nl
c3NpYmlsaXR5QXR0cmlidXRlU3RyaW5nVmFsdWVGb3JQb2ludChQYWdlT3ZlcmxheSosIFN0cmlu
ZyBhdHRyaWJ1dGUsIEZsb2F0UG9pbnQgcGFyYW1ldGVyLCBTdHJpbmcmIHZhbHVlKQoreworICAg
IHJldHVybiBtX2NsaWVudC0+Y29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVTdHJpbmdWYWx1ZUZv
clBvaW50KHRoaXMsIGF0dHJpYnV0ZSwgcGFyYW1ldGVyLCB2YWx1ZSk7Cit9CisKK2Jvb2wgV2Vi
UGFnZU92ZXJsYXk6OmNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlQm9vbFZhbHVlRm9yUG9pbnQo
UGFnZU92ZXJsYXkqLCBTdHJpbmcgYXR0cmlidXRlLCBGbG9hdFBvaW50IHBhcmFtZXRlciwgYm9v
bCYgdmFsdWUpCit7CisgICAgcmV0dXJuIG1fY2xpZW50LT5jb3B5QWNjZXNzaWJpbGl0eUF0dHJp
YnV0ZUJvb2xWYWx1ZUZvclBvaW50KHRoaXMsIGF0dHJpYnV0ZSwgcGFyYW1ldGVyLCB2YWx1ZSk7
Cit9CisKK1ZlY3RvcjxTdHJpbmc+IFdlYlBhZ2VPdmVybGF5Ojpjb3B5QWNjZXNzaWJpbGl0eUF0
dHJpYnV0ZU5hbWVzKFBhZ2VPdmVybGF5KiwgYm9vbCBwYXJhbWV0ZXJpemVkTmFtZXMpCit7Cisg
ICAgcmV0dXJuIG1fY2xpZW50LT5jb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZU5hbWVzKHRoaXMs
IHBhcmFtZXRlcml6ZWROYW1lcyk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VPdmVybGF5Lmgg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZU92ZXJsYXkuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZTQyMTNiCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VPdmVybGF5LmgKQEAg
LTAsMCArMSw5MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViUGFnZU92ZXJsYXlfaAorI2Rl
ZmluZSBXZWJQYWdlT3ZlcmxheV9oCisKKyNpbmNsdWRlICJBUElPYmplY3QuaCIKKyNpbmNsdWRl
IDxXZWJDb3JlL0Zsb2F0UG9pbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ludFJlY3QuaD4KKyNp
bmNsdWRlIDxXZWJDb3JlL1BhZ2VPdmVybGF5Lmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIu
aD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYkZyYW1lOworY2xhc3MgV2ViUGFn
ZTsKKworY2xhc3MgV2ViUGFnZU92ZXJsYXkgOiBwdWJsaWMgQVBJOjpPYmplY3RJbXBsPEFQSTo6
T2JqZWN0OjpUeXBlOjpCdW5kbGVQYWdlT3ZlcmxheT4sIHByaXZhdGUgV2ViQ29yZTo6UGFnZU92
ZXJsYXk6OkNsaWVudCB7CitwdWJsaWM6CisgICAgY2xhc3MgQ2xpZW50IHsKKyAgICBwcm90ZWN0
ZWQ6CisgICAgICAgIHZpcnR1YWwgfkNsaWVudCgpIHsgfQorCisgICAgcHVibGljOgorICAgICAg
ICB2aXJ0dWFsIHZvaWQgcGFnZU92ZXJsYXlEZXN0cm95ZWQoV2ViUGFnZU92ZXJsYXkqKSA9IDA7
CisgICAgICAgIHZpcnR1YWwgdm9pZCB3aWxsTW92ZVRvUGFnZShXZWJQYWdlT3ZlcmxheSosIFdl
YlBhZ2UqKSA9IDA7CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRNb3ZlVG9QYWdlKFdlYlBhZ2VP
dmVybGF5KiwgV2ViUGFnZSopID0gMDsKKyAgICAgICAgdmlydHVhbCB2b2lkIGRyYXdSZWN0KFdl
YlBhZ2VPdmVybGF5KiwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiwgY29uc3QgV2ViQ29yZTo6
SW50UmVjdCYgZGlydHlSZWN0KSA9IDA7CisgICAgICAgIHZpcnR1YWwgYm9vbCBtb3VzZUV2ZW50
KFdlYlBhZ2VPdmVybGF5KiwgY29uc3QgV2ViQ29yZTo6UGxhdGZvcm1Nb3VzZUV2ZW50JikgPSAw
OworICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkU2Nyb2xsRnJhbWUoV2ViUGFnZU92ZXJsYXkqLCBX
ZWJGcmFtZSopIHsgfQorCisgICAgICAgIHZpcnR1YWwgYm9vbCBjb3B5QWNjZXNzaWJpbGl0eUF0
dHJpYnV0ZVN0cmluZ1ZhbHVlRm9yUG9pbnQoV2ViUGFnZU92ZXJsYXkqLCBTdHJpbmcgLyogYXR0
cmlidXRlICovLCBXZWJDb3JlOjpGbG9hdFBvaW50IC8qIHBhcmFtZXRlciAqLywgU3RyaW5nJiB2
YWx1ZSkgeyByZXR1cm4gZmFsc2U7IH0KKyAgICAgICAgdmlydHVhbCBib29sIGNvcHlBY2Nlc3Np
YmlsaXR5QXR0cmlidXRlQm9vbFZhbHVlRm9yUG9pbnQoV2ViUGFnZU92ZXJsYXkqLCBTdHJpbmcg
LyogYXR0cmlidXRlICovLCBXZWJDb3JlOjpGbG9hdFBvaW50IC8qIHBhcmFtZXRlciAqLywgYm9v
bCYgdmFsdWUpIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgICAgIHZpcnR1YWwgVmVjdG9yPFN0cmlu
Zz4gY29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVOYW1lcyhXZWJQYWdlT3ZlcmxheSosIGJvb2wg
LyogcGFyYW1ldGVyaXplZE5hbWVzICovKSB7IHJldHVybiBWZWN0b3I8U3RyaW5nPigpOyB9Cisg
ICAgfTsKKworICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYlBhZ2VPdmVybGF5PiBjcmVhdGUoQ2xp
ZW50KiwgV2ViQ29yZTo6UGFnZU92ZXJsYXk6Ok92ZXJsYXlUeXBlID0gV2ViQ29yZTo6UGFnZU92
ZXJsYXk6Ok92ZXJsYXlUeXBlOjpWaWV3KTsKKyAgICB2aXJ0dWFsIH5XZWJQYWdlT3ZlcmxheSgp
OworCisgICAgdm9pZCBzZXROZWVkc0Rpc3BsYXkoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgZGly
dHlSZWN0KTsKKyAgICB2b2lkIHNldE5lZWRzRGlzcGxheSgpOworCisgICAgdm9pZCBjbGVhcigp
OworCisgICAgV2ViQ29yZTo6UGFnZU92ZXJsYXkqIGNvcmVPdmVybGF5KCkgY29uc3QgeyByZXR1
cm4gbV9vdmVybGF5LmdldCgpOyB9CisgICAgQ2xpZW50KiBjbGllbnQoKSBjb25zdCB7IHJldHVy
biBtX2NsaWVudDsgfQorCitwcml2YXRlOgorICAgIFdlYlBhZ2VPdmVybGF5KENsaWVudCosIFdl
YkNvcmU6OlBhZ2VPdmVybGF5OjpPdmVybGF5VHlwZSk7CisKKyAgICAvLyBXZWJDb3JlOjpQYWdl
T3ZlcmxheTo6Q2xpZW50CisgICAgdmlydHVhbCB2b2lkIHBhZ2VPdmVybGF5RGVzdHJveWVkKFdl
YkNvcmU6OlBhZ2VPdmVybGF5Kikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHdpbGxNb3Zl
VG9QYWdlKFdlYkNvcmU6OlBhZ2VPdmVybGF5KiwgV2ViQ29yZTo6UGFnZSopIG92ZXJyaWRlOwor
ICAgIHZpcnR1YWwgdm9pZCBkaWRNb3ZlVG9QYWdlKFdlYkNvcmU6OlBhZ2VPdmVybGF5KiwgV2Vi
Q29yZTo6UGFnZSopIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBkcmF3UmVjdChXZWJDb3Jl
OjpQYWdlT3ZlcmxheSosIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IFdlYkNvcmU6
OkludFJlY3QmIGRpcnR5UmVjdCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29sIG1vdXNlRXZl
bnQoV2ViQ29yZTo6UGFnZU92ZXJsYXkqLCBjb25zdCBXZWJDb3JlOjpQbGF0Zm9ybU1vdXNlRXZl
bnQmKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkU2Nyb2xsRnJhbWUoV2ViQ29yZTo6
UGFnZU92ZXJsYXkqLCBXZWJDb3JlOjpGcmFtZSYpIG92ZXJyaWRlOworCisgICAgdmlydHVhbCBi
b29sIGNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlU3RyaW5nVmFsdWVGb3JQb2ludChXZWJDb3Jl
OjpQYWdlT3ZlcmxheSosIFN0cmluZyAvKiBhdHRyaWJ1dGUgKi8sIFdlYkNvcmU6OkZsb2F0UG9p
bnQgLyogcGFyYW1ldGVyICovLCBTdHJpbmcmIHZhbHVlKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFs
IGJvb2wgY29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVCb29sVmFsdWVGb3JQb2ludChXZWJDb3Jl
OjpQYWdlT3ZlcmxheSosIFN0cmluZyAvKiBhdHRyaWJ1dGUgKi8sIFdlYkNvcmU6OkZsb2F0UG9p
bnQgLyogcGFyYW1ldGVyICovLCBib29sJiB2YWx1ZSkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBW
ZWN0b3I8U3RyaW5nPiBjb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZU5hbWVzKFdlYkNvcmU6OlBh
Z2VPdmVybGF5KiwgYm9vbCAvKiBwYXJhbWV0ZXJpemVkTmFtZXMgKi8pIG92ZXJyaWRlOworCisK
KyAgICBSZWZQdHI8V2ViQ29yZTo6UGFnZU92ZXJsYXk+IG1fb3ZlcmxheTsKKyAgICBDbGllbnQq
IG1fY2xpZW50OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBXZWJQ
YWdlT3ZlcmxheV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvaW9zL0ZpbmRDb250cm9sbGVySU9TLm1tIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL2lvcy9GaW5kQ29udHJvbGxlcklPUy5tbQppbmRleCAwOTA3YmRmLi41OTQ4MzdkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL0ZpbmRDb250
cm9sbGVySU9TLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9pb3Mv
RmluZENvbnRyb2xsZXJJT1MubW0KQEAgLTM2LDYgKzM2LDcgQEAKICNpbXBvcnQgPFdlYkNvcmUv
R3JhcGhpY3NDb250ZXh0Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL01haW5GcmFtZS5oPgogI2ltcG9y
dCA8V2ViQ29yZS9QYWdlLmg+CisjaW1wb3J0IDxXZWJDb3JlL1BhZ2VPdmVybGF5Q29udHJvbGxl
ci5oPgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIApAQCAtNTIsNyArNTMsNyBAQCBzdGF0
aWMgQ29sb3IgaGlnaGxpZ2h0Q29sb3IoKQogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotdm9pZCBG
aW5kSW5kaWNhdG9yT3ZlcmxheUNsaWVudElPUzo6ZHJhd1JlY3QoUGFnZU92ZXJsYXkqIG92ZXJs
YXksIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgV2ViQ29yZTo6SW50
UmVjdCYgZGlydHlSZWN0KQordm9pZCBGaW5kSW5kaWNhdG9yT3ZlcmxheUNsaWVudElPUzo6ZHJh
d1JlY3QoUGFnZU92ZXJsYXkqIG92ZXJsYXksIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29u
c3QgSW50UmVjdCYgZGlydHlSZWN0KQogewogICAgIC8vIEZJWE1FOiBTdXBwb3J0IG11bHRpcGxl
IHRleHQgcmVjdHMuCiAKQEAgLTg1LDExICs4NiwxMSBAQCBib29sIEZpbmRDb250cm9sbGVyOjp1
cGRhdGVGaW5kSW5kaWNhdG9yKEZyYW1lJiBzZWxlY3RlZEZyYW1lLCBib29sIGlzU2hvd2luZ092
ZQogICAgIG1hdGNoUmVjdC5pbmZsYXRlWSh0b3RhbFZlcnRpY2FsTWFyZ2luKTsKIAogICAgIGlm
IChtX2ZpbmRJbmRpY2F0b3JPdmVybGF5KQotICAgICAgICBtX3dlYlBhZ2UtPnVuaW5zdGFsbFBh
Z2VPdmVybGF5KG1fZmluZEluZGljYXRvck92ZXJsYXkuZ2V0KCkpOworICAgICAgICBtX3dlYlBh
Z2UtPmNvcmVQYWdlKCktPnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLnVuaW5zdGFsbFBhZ2VPdmVy
bGF5KG1fZmluZEluZGljYXRvck92ZXJsYXkuZ2V0KCksIFBhZ2VPdmVybGF5OjpGYWRlTW9kZTo6
RG9Ob3RGYWRlKTsKIAogICAgIG1fZmluZEluZGljYXRvck92ZXJsYXlDbGllbnQgPSBzdGQ6Om1h
a2VfdW5pcXVlPEZpbmRJbmRpY2F0b3JPdmVybGF5Q2xpZW50SU9TPihzZWxlY3RlZEZyYW1lKTsK
ICAgICBtX2ZpbmRJbmRpY2F0b3JPdmVybGF5ID0gUGFnZU92ZXJsYXk6OmNyZWF0ZShtX2ZpbmRJ
bmRpY2F0b3JPdmVybGF5Q2xpZW50LmdldCgpLCBQYWdlT3ZlcmxheTo6T3ZlcmxheVR5cGU6OkRv
Y3VtZW50KTsKLSAgICBtX3dlYlBhZ2UtPmluc3RhbGxQYWdlT3ZlcmxheShtX2ZpbmRJbmRpY2F0
b3JPdmVybGF5KTsKKyAgICBtX3dlYlBhZ2UtPmNvcmVQYWdlKCktPnBhZ2VPdmVybGF5Q29udHJv
bGxlcigpLmluc3RhbGxQYWdlT3ZlcmxheShtX2ZpbmRJbmRpY2F0b3JPdmVybGF5LCBQYWdlT3Zl
cmxheTo6RmFkZU1vZGU6OkRvTm90RmFkZSk7CiAKICAgICBtX2ZpbmRJbmRpY2F0b3JPdmVybGF5
LT5zZXRGcmFtZShtYXRjaFJlY3QpOwogICAgIG1fZmluZEluZGljYXRvck92ZXJsYXktPnNldE5l
ZWRzRGlzcGxheSgpOwpAQCAtMTA2LDcgKzEwNyw3IEBAIHZvaWQgRmluZENvbnRyb2xsZXI6Omhp
ZGVGaW5kSW5kaWNhdG9yKCkKICAgICBpZiAoIW1faXNTaG93aW5nRmluZEluZGljYXRvcikKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgbV93ZWJQYWdlLT51bmluc3RhbGxQYWdlT3ZlcmxheShtX2Zp
bmRJbmRpY2F0b3JPdmVybGF5LmdldCgpKTsKKyAgICBtX3dlYlBhZ2UtPmNvcmVQYWdlKCktPnBh
Z2VPdmVybGF5Q29udHJvbGxlcigpLnVuaW5zdGFsbFBhZ2VPdmVybGF5KG1fZmluZEluZGljYXRv
ck92ZXJsYXkuZ2V0KCksIFBhZ2VPdmVybGF5OjpGYWRlTW9kZTo6RG9Ob3RGYWRlKTsKICAgICBt
X2ZpbmRJbmRpY2F0b3JPdmVybGF5ID0gbnVsbHB0cjsKICAgICBtX2lzU2hvd2luZ0ZpbmRJbmRp
Y2F0b3IgPSBmYWxzZTsKICAgICBtX2ZvdW5kU3RyaW5nTWF0Y2hJbmRleCA9IC0xOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9GaW5kSW5kaWNhdG9y
T3ZlcmxheUNsaWVudElPUy5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2lv
cy9GaW5kSW5kaWNhdG9yT3ZlcmxheUNsaWVudElPUy5oCmluZGV4IDMxMDE3NjcuLmE0ZTQzZmQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvRmluZElu
ZGljYXRvck92ZXJsYXlDbGllbnRJT1MuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvaW9zL0ZpbmRJbmRpY2F0b3JPdmVybGF5Q2xpZW50SU9TLmgKQEAgLTI2LDEzICsy
NiwxMyBAQAogI2lmbmRlZiBGaW5kSW5kaWNhdG9yT3ZlcmxheUNsaWVudElPU19oCiAjZGVmaW5l
IEZpbmRJbmRpY2F0b3JPdmVybGF5Q2xpZW50SU9TX2gKIAotI2ltcG9ydCAiUGFnZU92ZXJsYXku
aCIKICNpbXBvcnQgPFdlYkNvcmUvRnJhbWUuaD4KICNpbXBvcnQgPFdlYkNvcmUvR3JhcGhpY3ND
b250ZXh0Lmg+CisjaW1wb3J0IDxXZWJDb3JlL1BhZ2VPdmVybGF5Lmg+CiAKIG5hbWVzcGFjZSBX
ZWJLaXQgewogCi1jbGFzcyBGaW5kSW5kaWNhdG9yT3ZlcmxheUNsaWVudElPUyA6IHB1YmxpYyBQ
YWdlT3ZlcmxheTo6Q2xpZW50IHsKK2NsYXNzIEZpbmRJbmRpY2F0b3JPdmVybGF5Q2xpZW50SU9T
IDogcHVibGljIFdlYkNvcmU6OlBhZ2VPdmVybGF5OjpDbGllbnQgewogcHVibGljOgogICAgIEZp
bmRJbmRpY2F0b3JPdmVybGF5Q2xpZW50SU9TKFdlYkNvcmU6OkZyYW1lJiBmcmFtZSkKICAgICAg
ICAgOiBtX2ZyYW1lKGZyYW1lKQpAQCAtNDAsMTEgKzQwLDExIEBAIHB1YmxpYzoKICAgICB9CiAK
IHByaXZhdGU6Ci0gICAgdmlydHVhbCB2b2lkIHBhZ2VPdmVybGF5RGVzdHJveWVkKFBhZ2VPdmVy
bGF5Kikgb3ZlcnJpZGUgeyB9Ci0gICAgdmlydHVhbCB2b2lkIHdpbGxNb3ZlVG9XZWJQYWdlKFBh
Z2VPdmVybGF5KiwgV2ViUGFnZSopIG92ZXJyaWRlIHsgfQotICAgIHZpcnR1YWwgdm9pZCBkaWRN
b3ZlVG9XZWJQYWdlKFBhZ2VPdmVybGF5KiwgV2ViUGFnZSopIG92ZXJyaWRlIHsgfQotICAgIHZp
cnR1YWwgdm9pZCBkcmF3UmVjdChQYWdlT3ZlcmxheSosIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dCYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGRpcnR5UmVjdCkgb3ZlcnJpZGU7Ci0gICAgdmly
dHVhbCBib29sIG1vdXNlRXZlbnQoUGFnZU92ZXJsYXkqLCBjb25zdCBXZWJNb3VzZUV2ZW50Jikg
b3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcGFnZU92ZXJsYXlE
ZXN0cm95ZWQoV2ViQ29yZTo6UGFnZU92ZXJsYXkqKSBvdmVycmlkZSB7IH0KKyAgICB2aXJ0dWFs
IHZvaWQgd2lsbE1vdmVUb1BhZ2UoV2ViQ29yZTo6UGFnZU92ZXJsYXkqLCBXZWJDb3JlOjpQYWdl
Kikgb3ZlcnJpZGUgeyB9CisgICAgdmlydHVhbCB2b2lkIGRpZE1vdmVUb1BhZ2UoV2ViQ29yZTo6
UGFnZU92ZXJsYXkqLCBXZWJDb3JlOjpQYWdlKikgb3ZlcnJpZGUgeyB9CisgICAgdmlydHVhbCB2
b2lkIGRyYXdSZWN0KFdlYkNvcmU6OlBhZ2VPdmVybGF5KiwgV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0JiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgZGlydHlSZWN0KSBvdmVycmlkZTsKKyAgICB2
aXJ0dWFsIGJvb2wgbW91c2VFdmVudChXZWJDb3JlOjpQYWdlT3ZlcmxheSosIGNvbnN0IFdlYkNv
cmU6OlBsYXRmb3JtTW91c2VFdmVudCYpIG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CiAKICAg
ICBXZWJDb3JlOjpGcmFtZSYgbV9mcmFtZTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1JlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhLmggYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1JlbW90ZUxheWVyVHJlZURyYXdp
bmdBcmVhLmgKaW5kZXggMWNiNTEwMC4uYzUyYTNiZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9SZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYS5oCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvUmVtb3RlTGF5ZXJUcmVl
RHJhd2luZ0FyZWEuaApAQCAtNjcsNiArNjcsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9p
ZCBzZXRSb290Q29tcG9zaXRpbmdMYXllcihXZWJDb3JlOjpHcmFwaGljc0xheWVyKikgb3ZlcnJp
ZGU7CiAgICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlQ29tcG9zaXRpbmdMYXllckZsdXNoKCkgb3Zl
cnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlQ29tcG9zaXRpbmdMYXllckZsdXNoSW1t
ZWRpYXRlbHkoKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoVmlld092ZXJsYXlH
cmFwaGljc0xheWVyKFdlYkNvcmU6OkZyYW1lKiwgV2ViQ29yZTo6R3JhcGhpY3NMYXllciopIG92
ZXJyaWRlOwogCiAgICAgdmlydHVhbCB2b2lkIGFkZFRyYW5zYWN0aW9uQ2FsbGJhY2tJRCh1aW50
NjRfdCBjYWxsYmFja0lEKSBvdmVycmlkZTsKIApAQCAtMTA3LDYgKzEwOCw3IEBAIHByaXZhdGU6
CiAgICAgdmlydHVhbCBib29sIGFkanVzdExheWVyRmx1c2hUaHJvdHRsaW5nKFdlYkNvcmU6Okxh
eWVyRmx1c2hUaHJvdHRsZVN0YXRlOjpGbGFncykgb3ZlcnJpZGU7CiAKICAgICB2b2lkIHVwZGF0
ZVNjcm9sbGVkRXhwb3NlZFJlY3QoKTsKKyAgICB2b2lkIHVwZGF0ZVJvb3RMYXllcnMoKTsKIAog
ICAgIHZvaWQgbGF5ZXJGbHVzaFRpbWVyRmlyZWQoV2ViQ29yZTo6VGltZXI8UmVtb3RlTGF5ZXJU
cmVlRHJhd2luZ0FyZWE+Kik7CiAgICAgdm9pZCBmbHVzaExheWVycygpOwpAQCAtMTYwLDYgKzE2
Miw5IEBAIHByaXZhdGU6CiAKICAgICB1aW50NjRfdCBtX2N1cnJlbnRUcmFuc2FjdGlvbklEOwog
ICAgIFZlY3RvcjxSZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbjo6VHJhbnNhY3Rpb25DYWxsYmFj
a0lEPiBtX3BlbmRpbmdDYWxsYmFja0lEczsKKworICAgIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIq
IG1fY29udGVudExheWVyOworICAgIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqIG1fdmlld092ZXJs
YXlSb290TGF5ZXI7CiB9OwogCiBEUkFXSU5HX0FSRUFfVFlQRV9DQVNUUyhSZW1vdGVMYXllclRy
ZWVEcmF3aW5nQXJlYSwgdHlwZSgpID09IERyYXdpbmdBcmVhVHlwZVJlbW90ZUxheWVyVHJlZSk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1JlbW90
ZUxheWVyVHJlZURyYXdpbmdBcmVhLm1tIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL21hYy9SZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYS5tbQppbmRleCAzN2M4OTQ3Li45ZTQ4
YjU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1Jl
bW90ZUxheWVyVHJlZURyYXdpbmdBcmVhLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9tYWMvUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWEubW0KQEAgLTQwLDYgKzQw
LDcgQEAKICNpbXBvcnQgPFdlYkNvcmUvRnJhbWUuaD4KICNpbXBvcnQgPFdlYkNvcmUvRnJhbWVW
aWV3Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL01haW5GcmFtZS5oPgorI2ltcG9ydCA8V2ViQ29yZS9Q
YWdlT3ZlcmxheUNvbnRyb2xsZXIuaD4KICNpbXBvcnQgPFdlYkNvcmUvUmVuZGVyTGF5ZXJDb21w
b3NpdG9yLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1JlbmRlclZpZXcuaD4KICNpbXBvcnQgPFdlYkNv
cmUvU2V0dGluZ3MuaD4KQEAgLTY2LDYgKzY3LDggQEAgUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0Fy
ZWE6OlJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhKFdlYlBhZ2UmIHdlYlBhZ2UsIGNvbnN0IFcK
ICAgICAsIG1faGFkRmx1c2hEZWZlcnJlZFdoaWxlV2FpdGluZ0ZvckJhY2tpbmdTdG9yZVN3YXAo
ZmFsc2UpCiAgICAgLCBtX2Rpc3BsYXlSZWZyZXNoTW9uaXRvcnNUb05vdGlmeShudWxscHRyKQog
ICAgICwgbV9jdXJyZW50VHJhbnNhY3Rpb25JRCgwKQorICAgICwgbV9jb250ZW50TGF5ZXIobnVs
bHB0cikKKyAgICAsIG1fdmlld092ZXJsYXlSb290TGF5ZXIobnVsbHB0cikKIHsKICAgICB3ZWJQ
YWdlLmNvcmVQYWdlKCktPnNldHRpbmdzKCkuc2V0Rm9yY2VDb21wb3NpdGluZ01vZGUodHJ1ZSk7
CiAjaWYgUExBVEZPUk0oSU9TKQpAQCAtMTEzLDE1ICsxMTYsMzEgQEAgdm9pZCBSZW1vdGVMYXll
clRyZWVEcmF3aW5nQXJlYTo6d2lsbERlc3Ryb3lEaXNwbGF5UmVmcmVzaE1vbml0b3IoRGlzcGxh
eVJlZnJlc2gKICAgICAgICAgbV9kaXNwbGF5UmVmcmVzaE1vbml0b3JzVG9Ob3RpZnktPnJlbW92
ZShyZW1vdGVNb25pdG9yKTsKIH0KIAotdm9pZCBSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYTo6
c2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIoR3JhcGhpY3NMYXllciogcm9vdExheWVyKQordm9pZCBS
ZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYTo6dXBkYXRlUm9vdExheWVycygpCiB7CiAgICAgVmVj
dG9yPEdyYXBoaWNzTGF5ZXIqPiBjaGlsZHJlbjsKLSAgICBpZiAocm9vdExheWVyKSB7Ci0gICAg
ICAgIGNoaWxkcmVuLmFwcGVuZChyb290TGF5ZXIpOwotICAgICAgICBjaGlsZHJlbi5hcHBlbmQo
bV93ZWJQYWdlLnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLnZpZXdPdmVybGF5Um9vdExheWVyKCkp
OworICAgIGlmIChtX2NvbnRlbnRMYXllcikgeworICAgICAgICBjaGlsZHJlbi5hcHBlbmQobV9j
b250ZW50TGF5ZXIpOworICAgICAgICBpZiAobV92aWV3T3ZlcmxheVJvb3RMYXllcikKKyAgICAg
ICAgICAgIGNoaWxkcmVuLmFwcGVuZChtX3ZpZXdPdmVybGF5Um9vdExheWVyKTsKICAgICB9CisK
ICAgICBtX3Jvb3RMYXllci0+c2V0Q2hpbGRyZW4oY2hpbGRyZW4pOworfQorCit2b2lkIFJlbW90
ZUxheWVyVHJlZURyYXdpbmdBcmVhOjphdHRhY2hWaWV3T3ZlcmxheUdyYXBoaWNzTGF5ZXIoRnJh
bWUqIGZyYW1lLCBHcmFwaGljc0xheWVyKiB2aWV3T3ZlcmxheVJvb3RMYXllcikKK3sKKyAgICBp
ZiAoIWZyYW1lLT5pc01haW5GcmFtZSgpKQorICAgICAgICByZXR1cm47CiAKKyAgICBtX3ZpZXdP
dmVybGF5Um9vdExheWVyID0gdmlld092ZXJsYXlSb290TGF5ZXI7CisgICAgdXBkYXRlUm9vdExh
eWVycygpOworfQorCit2b2lkIFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhOjpzZXRSb290Q29t
cG9zaXRpbmdMYXllcihHcmFwaGljc0xheWVyKiByb290TGF5ZXIpCit7CisgICAgbV9jb250ZW50
TGF5ZXIgPSByb290TGF5ZXI7CisgICAgdXBkYXRlUm9vdExheWVycygpOwogICAgIHNjaGVkdWxl
Q29tcG9zaXRpbmdMYXllckZsdXNoKCk7CiB9CiAKQEAgLTIzNCw4ICsyNTMsNiBAQCB2b2lkIFJl
bW90ZUxheWVyVHJlZURyYXdpbmdBcmVhOjp1cGRhdGVTY3JvbGxlZEV4cG9zZWRSZWN0KCkKICNl
bmRpZgogCiAgICAgZnJhbWVWaWV3LT5zZXRFeHBvc2VkUmVjdChtX3Njcm9sbGVkRXhwb3NlZFJl
Y3QpOwotCi0gICAgbV93ZWJQYWdlLnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLmRpZENoYW5nZUV4
cG9zZWRSZWN0KCk7CiB9CiAKIFRpbGVkQmFja2luZyogUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0Fy
ZWE6Om1haW5GcmFtZVRpbGVkQmFja2luZygpIGNvbnN0CkBAIC0zMjEsNyArMzM4LDcgQEAgdm9p
ZCBSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYTo6Zmx1c2hMYXllcnMoKQogCiAgICAgRmxvYXRS
ZWN0IHZpc2libGVSZWN0KEZsb2F0UG9pbnQoKSwgbV92aWV3U2l6ZSk7CiAgICAgdmlzaWJsZVJl
Y3QuaW50ZXJzZWN0KG1fc2Nyb2xsZWRFeHBvc2VkUmVjdCk7Ci0gICAgbV93ZWJQYWdlLnBhZ2VP
dmVybGF5Q29udHJvbGxlcigpLmZsdXNoUGFnZU92ZXJsYXlMYXllcnModmlzaWJsZVJlY3QpOwor
CiAgICAgbV93ZWJQYWdlLm1haW5GcmFtZVZpZXcoKS0+Zmx1c2hDb21wb3NpdGluZ1N0YXRlSW5j
bHVkaW5nU3ViZnJhbWVzKCk7CiAgICAgbV9yb290TGF5ZXItPmZsdXNoQ29tcG9zaXRpbmdTdGF0
ZUZvclRoaXNMYXllck9ubHkoKTsKIApAQCAtNDEwLDcgKzQyNyw2IEBAIHZvaWQgUmVtb3RlTGF5
ZXJUcmVlRHJhd2luZ0FyZWE6OmRpZFVwZGF0ZSgpCiB2b2lkIFJlbW90ZUxheWVyVHJlZURyYXdp
bmdBcmVhOjptYWluRnJhbWVDb250ZW50U2l6ZUNoYW5nZWQoY29uc3QgSW50U2l6ZSYgY29udGVu
dHNTaXplKQogewogICAgIG1fcm9vdExheWVyLT5zZXRTaXplKGNvbnRlbnRzU2l6ZSk7Ci0gICAg
bV93ZWJQYWdlLnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLmRpZENoYW5nZURvY3VtZW50U2l6ZSgp
OwogfQogCiBib29sIFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhOjptYXJrTGF5ZXJzVm9sYXRp
bGVJbW1lZGlhdGVseUlmUG9zc2libGUoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL21hYy9TZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyLm1tIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9TZXJ2aWNlc092ZXJsYXlDb250cm9sbGVy
Lm1tCmluZGV4IGZiNjhiN2EuLjA2ZTVhMWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9tYWMvU2VydmljZXNPdmVybGF5Q29udHJvbGxlci5tbQorKysgYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1NlcnZpY2VzT3ZlcmxheUNvbnRy
b2xsZXIubW0KQEAgLTQyLDYgKzQyLDcgQEAKICNpbXBvcnQgPFdlYkNvcmUvR3JhcGhpY3NMYXll
ci5oPgogI2ltcG9ydCA8V2ViQ29yZS9HcmFwaGljc0xheWVyQ0EuaD4KICNpbXBvcnQgPFdlYkNv
cmUvTWFpbkZyYW1lLmg+CisjaW1wb3J0IDxXZWJDb3JlL1BhZ2VPdmVybGF5Q29udHJvbGxlci5o
PgogI2ltcG9ydCA8V2ViQ29yZS9QbGF0Zm9ybUNBQW5pbWF0aW9uTWFjLmg+CiAjaW1wb3J0IDxX
ZWJDb3JlL1NvZnRMaW5raW5nLmg+CiAKQEAgLTIzMiwxNiArMjMzLDE2IEBAIHZvaWQgU2Vydmlj
ZXNPdmVybGF5Q29udHJvbGxlcjo6cGFnZU92ZXJsYXlEZXN0cm95ZWQoUGFnZU92ZXJsYXkqKQog
ICAgIEFTU0VSVCghbV9zZXJ2aWNlc092ZXJsYXkpOwogfQogCi12b2lkIFNlcnZpY2VzT3Zlcmxh
eUNvbnRyb2xsZXI6OndpbGxNb3ZlVG9XZWJQYWdlKFBhZ2VPdmVybGF5KiwgV2ViUGFnZSogd2Vi
UGFnZSkKK3ZvaWQgU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6d2lsbE1vdmVUb1BhZ2UoUGFn
ZU92ZXJsYXkqLCBQYWdlKiBwYWdlKQogewotICAgIGlmICh3ZWJQYWdlKQorICAgIGlmIChwYWdl
KQogICAgICAgICByZXR1cm47CiAKICAgICBBU1NFUlQobV9zZXJ2aWNlc092ZXJsYXkpOwogICAg
IG1fc2VydmljZXNPdmVybGF5ID0gbnVsbHB0cjsKIH0KIAotdm9pZCBTZXJ2aWNlc092ZXJsYXlD
b250cm9sbGVyOjpkaWRNb3ZlVG9XZWJQYWdlKFBhZ2VPdmVybGF5KiwgV2ViUGFnZSopCit2b2lk
IFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OmRpZE1vdmVUb1BhZ2UoUGFnZU92ZXJsYXkqLCBQ
YWdlKikKIHsKIH0KIApAQCAtNTgzLDcgKzU4NCw3IEBAIHZvaWQgU2VydmljZXNPdmVybGF5Q29u
dHJvbGxlcjo6ZGlkUmVidWlsZFBvdGVudGlhbEhpZ2hsaWdodHMoKQogewogICAgIGlmIChtX3Bv
dGVudGlhbEhpZ2hsaWdodHMuaXNFbXB0eSgpKSB7CiAgICAgICAgIGlmIChtX3NlcnZpY2VzT3Zl
cmxheSkKLSAgICAgICAgICAgIG1fd2ViUGFnZS51bmluc3RhbGxQYWdlT3ZlcmxheShtX3NlcnZp
Y2VzT3ZlcmxheSk7CisgICAgICAgICAgICBtX3dlYlBhZ2UuY29yZVBhZ2UoKS0+cGFnZU92ZXJs
YXlDb250cm9sbGVyKCkudW5pbnN0YWxsUGFnZU92ZXJsYXkobV9zZXJ2aWNlc092ZXJsYXksIFBh
Z2VPdmVybGF5OjpGYWRlTW9kZTo6RG9Ob3RGYWRlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IApAQCAtNjAzLDcgKzYwNCw3IEBAIHZvaWQgU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6Y3Jl
YXRlT3ZlcmxheUlmTmVlZGVkKCkKIAogICAgIFJlZlB0cjxQYWdlT3ZlcmxheT4gb3ZlcmxheSA9
IFBhZ2VPdmVybGF5OjpjcmVhdGUodGhpcywgUGFnZU92ZXJsYXk6Ok92ZXJsYXlUeXBlOjpEb2N1
bWVudCk7CiAgICAgbV9zZXJ2aWNlc092ZXJsYXkgPSBvdmVybGF5LmdldCgpOwotICAgIG1fd2Vi
UGFnZS5pbnN0YWxsUGFnZU92ZXJsYXkob3ZlcmxheS5yZWxlYXNlKCksIFBhZ2VPdmVybGF5OjpG
YWRlTW9kZTo6RG9Ob3RGYWRlKTsKKyAgICBtX3dlYlBhZ2UuY29yZVBhZ2UoKS0+cGFnZU92ZXJs
YXlDb250cm9sbGVyKCkuaW5zdGFsbFBhZ2VPdmVybGF5KG92ZXJsYXkucmVsZWFzZSgpLCBQYWdl
T3ZlcmxheTo6RmFkZU1vZGU6OkRvTm90RmFkZSk7CiB9CiAKIFZlY3RvcjxSZWZQdHI8UmFuZ2U+
PiBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjp0ZWxlcGhvbmVOdW1iZXJSYW5nZXNGb3JGb2N1
c2VkRnJhbWUoKQpAQCAtNzIzLDcgKzcyNCw3IEBAIHZvaWQgU2VydmljZXNPdmVybGF5Q29udHJv
bGxlcjo6ZGV0ZXJtaW5lQWN0aXZlSGlnaGxpZ2h0KGJvb2wmIG1vdXNlSXNPdmVyQWN0aXZlCiAg
ICAgfQogfQogCi1ib29sIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6Om1vdXNlRXZlbnQoUGFn
ZU92ZXJsYXkqLCBjb25zdCBXZWJNb3VzZUV2ZW50JiBldmVudCkKK2Jvb2wgU2VydmljZXNPdmVy
bGF5Q29udHJvbGxlcjo6bW91c2VFdmVudChQYWdlT3ZlcmxheSosIGNvbnN0IFBsYXRmb3JtTW91
c2VFdmVudCYgZXZlbnQpCiB7CiAgICAgbV9tb3VzZVBvc2l0aW9uID0gbV93ZWJQYWdlLmNvcmVQ
YWdlKCktPm1haW5GcmFtZSgpLnZpZXcoKS0+cm9vdFZpZXdUb0NvbnRlbnRzKGV2ZW50LnBvc2l0
aW9uKCkpOwogCkBAIC03MzEsMTMgKzczMiwxMyBAQCBib29sIFNlcnZpY2VzT3ZlcmxheUNvbnRy
b2xsZXI6Om1vdXNlRXZlbnQoUGFnZU92ZXJsYXkqLCBjb25zdCBXZWJNb3VzZUV2ZW50JiBldgog
ICAgIGRldGVybWluZUFjdGl2ZUhpZ2hsaWdodChtb3VzZUlzT3ZlckFjdGl2ZUhpZ2hsaWdodEJ1
dHRvbik7CiAKICAgICAvLyBDYW5jZWwgdGhlIHBvdGVudGlhbCBjbGljayBpZiBhbnkgYnV0dG9u
IG90aGVyIHRoYW4gdGhlIGxlZnQgYnV0dG9uIGNoYW5nZXMgc3RhdGUsIGFuZCBpZ25vcmUgdGhl
IGV2ZW50LgotICAgIGlmIChldmVudC5idXR0b24oKSAhPSBXZWJNb3VzZUV2ZW50OjpMZWZ0QnV0
dG9uKSB7CisgICAgaWYgKGV2ZW50LmJ1dHRvbigpICE9IE1vdXNlQnV0dG9uOjpMZWZ0QnV0dG9u
KSB7CiAgICAgICAgIG1fY3VycmVudE1vdXNlRG93bk9uQnV0dG9uSGlnaGxpZ2h0ID0gbnVsbHB0
cjsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAogICAgIC8vIElmIHRoZSBtb3VzZSBs
aWZ0ZWQgd2hpbGUgc3RpbGwgb3ZlciB0aGUgaGlnaGxpZ2h0IGJ1dHRvbiB0aGF0IGl0IHdlbnQg
ZG93biBvbiwgdGhlbiB0aGF0IGlzIGEgY2xpY2suCi0gICAgaWYgKGV2ZW50LnR5cGUoKSA9PSBX
ZWJFdmVudDo6TW91c2VVcCkgeworICAgIGlmIChldmVudC50eXBlKCkgPT0gUGxhdGZvcm1FdmVu
dDo6TW91c2VSZWxlYXNlZCkgewogICAgICAgICBSZWZQdHI8SGlnaGxpZ2h0PiBtb3VzZURvd25I
aWdobGlnaHQgPSBtX2N1cnJlbnRNb3VzZURvd25PbkJ1dHRvbkhpZ2hsaWdodDsKICAgICAgICAg
bV9jdXJyZW50TW91c2VEb3duT25CdXR0b25IaWdobGlnaHQgPSBudWxscHRyOwogCkBAIC03NTIs
NyArNzUzLDcgQEAgYm9vbCBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjptb3VzZUV2ZW50KFBh
Z2VPdmVybGF5KiwgY29uc3QgV2ViTW91c2VFdmVudCYgZXYKICAgICB9CiAKICAgICAvLyBJZiB0
aGUgbW91c2UgbW92ZWQgb3V0c2lkZSBvZiB0aGUgYnV0dG9uIHRyYWNraW5nIGEgcG90ZW50aWFs
IGNsaWNrLCBzdG9wIHRyYWNraW5nIHRoZSBjbGljay4KLSAgICBpZiAoZXZlbnQudHlwZSgpID09
IFdlYkV2ZW50OjpNb3VzZU1vdmUpIHsKKyAgICBpZiAoZXZlbnQudHlwZSgpID09IFBsYXRmb3Jt
RXZlbnQ6Ok1vdXNlTW92ZWQpIHsKICAgICAgICAgaWYgKG1fY3VycmVudE1vdXNlRG93bk9uQnV0
dG9uSGlnaGxpZ2h0ICYmIG1vdXNlSXNPdmVyQWN0aXZlSGlnaGxpZ2h0QnV0dG9uKQogICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CiAKQEAgLTc2MSw3ICs3NjIsNyBAQCBib29sIFNlcnZpY2VzT3Zl
cmxheUNvbnRyb2xsZXI6Om1vdXNlRXZlbnQoUGFnZU92ZXJsYXkqLCBjb25zdCBXZWJNb3VzZUV2
ZW50JiBldgogICAgIH0KIAogICAgIC8vIElmIHRoZSBtb3VzZSB3ZW50IGRvd24gb3ZlciB0aGUg
YWN0aXZlIGhpZ2hsaWdodCdzIGJ1dHRvbiwgdHJhY2sgdGhpcyBhcyBhIHBvdGVudGlhbCBjbGlj
ay4KLSAgICBpZiAoZXZlbnQudHlwZSgpID09IFdlYkV2ZW50OjpNb3VzZURvd24pIHsKKyAgICBp
ZiAoZXZlbnQudHlwZSgpID09IFBsYXRmb3JtRXZlbnQ6Ok1vdXNlUHJlc3NlZCkgewogICAgICAg
ICBpZiAobV9hY3RpdmVIaWdobGlnaHQgJiYgbW91c2VJc092ZXJBY3RpdmVIaWdobGlnaHRCdXR0
b24pIHsKICAgICAgICAgICAgIG1fY3VycmVudE1vdXNlRG93bk9uQnV0dG9uSGlnaGxpZ2h0ID0g
bV9hY3RpdmVIaWdobGlnaHQ7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTc3Myw5ICs3
NzQsOSBAQCBib29sIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6Om1vdXNlRXZlbnQoUGFnZU92
ZXJsYXkqLCBjb25zdCBXZWJNb3VzZUV2ZW50JiBldgogICAgIHJldHVybiBmYWxzZTsKIH0KIAot
dm9pZCBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpkaWRTY3JvbGxGcmFtZShQYWdlT3Zlcmxh
eSosIEZyYW1lKiBmcmFtZSkKK3ZvaWQgU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6ZGlkU2Ny
b2xsRnJhbWUoUGFnZU92ZXJsYXkqLCBGcmFtZSYgZnJhbWUpCiB7Ci0gICAgaWYgKGZyYW1lLT5p
c01haW5GcmFtZSgpKQorICAgIGlmIChmcmFtZS5pc01haW5GcmFtZSgpKQogICAgICAgICByZXR1
cm47CiAKICAgICBidWlsZFBob25lTnVtYmVySGlnaGxpZ2h0cygpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9UaWxlZENvcmVBbmltYXRpb25EcmF3
aW5nQXJlYS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9UaWxlZENv
cmVBbmltYXRpb25EcmF3aW5nQXJlYS5oCmluZGV4IGI4MWE0YTQuLjllNWFiZGEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvVGlsZWRDb3JlQW5pbWF0
aW9uRHJhd2luZ0FyZWEuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
bWFjL1RpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhLmgKQEAgLTg0LDYgKzg0LDggQEAgcHJp
dmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgdmlld1N0YXRlRGlkQ2hhbmdlKFdlYkNvcmU6OlZpZXdT
dGF0ZTo6RmxhZ3MgY2hhbmdlZCwgYm9vbCB3YW50c0RpZFVwZGF0ZVZpZXdTdGF0ZSkgb3ZlcnJp
ZGU7CiAgICAgdm9pZCBkaWRVcGRhdGVWaWV3U3RhdGVUaW1lckZpcmVkKCk7CiAKKyAgICB2aXJ0
dWFsIHZvaWQgYXR0YWNoVmlld092ZXJsYXlHcmFwaGljc0xheWVyKFdlYkNvcmU6OkZyYW1lKiwg
V2ViQ29yZTo6R3JhcGhpY3NMYXllciopIG92ZXJyaWRlOworCiAgICAgLy8gV2ViQ29yZTo6TGF5
ZXJGbHVzaFNjaGVkdWxlckNsaWVudAogICAgIHZpcnR1YWwgYm9vbCBmbHVzaExheWVycygpIG92
ZXJyaWRlOwogCkBAIC0xMDYsNiArMTA4LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHVwZGF0ZUxh
eWVySG9zdGluZ0NvbnRleHQoKTsKIAogICAgIHZvaWQgc2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIo
Q0FMYXllciAqKTsKKyAgICB2b2lkIHVwZGF0ZVJvb3RMYXllcnMoKTsKIAogICAgIFdlYkNvcmU6
OlRpbGVkQmFja2luZyogbWFpbkZyYW1lVGlsZWRCYWNraW5nKCkgY29uc3Q7CiAgICAgdm9pZCB1
cGRhdGVEZWJ1Z0luZm9MYXllcihib29sIHNob3dMYXllcik7CkBAIC0xMzgsNiArMTQxLDggQEAg
cHJpdmF0ZToKICAgICBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtX3RyYW5zZm9ybTsK
IAogICAgIFJ1bkxvb3A6OlRpbWVyPFRpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhPiBtX3Nl
bmREaWRVcGRhdGVWaWV3U3RhdGVUaW1lcjsKKworICAgIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIq
IG1fdmlld092ZXJsYXlSb290TGF5ZXI7CiB9OwogCiBEUkFXSU5HX0FSRUFfVFlQRV9DQVNUUyhU
aWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYSwgdHlwZSgpID09IERyYXdpbmdBcmVhVHlwZVRp
bGVkQ29yZUFuaW1hdGlvbik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvbWFjL1RpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhLm1tIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9UaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJl
YS5tbQppbmRleCBlNzc1OTE5Li44OWQyNWY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1RpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhLm1tCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvVGlsZWRDb3JlQW5pbWF0
aW9uRHJhd2luZ0FyZWEubW0KQEAgLTQ0LDYgKzQ0LDcgQEAKICNpbXBvcnQgPFdlYkNvcmUvR3Jh
cGhpY3NMYXllckNBLmg+CiAjaW1wb3J0IDxXZWJDb3JlL01haW5GcmFtZS5oPgogI2ltcG9ydCA8
V2ViQ29yZS9QYWdlLmg+CisjaW1wb3J0IDxXZWJDb3JlL1BhZ2VPdmVybGF5Q29udHJvbGxlci5o
PgogI2ltcG9ydCA8V2ViQ29yZS9QbGF0Zm9ybUNBQW5pbWF0aW9uTWFjLmg+CiAjaW1wb3J0IDxX
ZWJDb3JlL1JlbmRlckxheWVyQmFja2luZy5oPgogI2ltcG9ydCA8V2ViQ29yZS9SZW5kZXJMYXll
ckNvbXBvc2l0b3IuaD4KQEAgLTc2LDYgKzc3LDcgQEAgVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2lu
Z0FyZWE6OlRpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhKFdlYlBhZ2UmIHdlYlBhZ2UsIGMK
ICAgICAsIG1fc2Nyb2xsZWRFeHBvc2VkUmVjdChGbG9hdFJlY3Q6OmluZmluaXRlUmVjdCgpKQog
ICAgICwgbV90cmFuc2llbnRab29tU2NhbGUoMSkKICAgICAsIG1fc2VuZERpZFVwZGF0ZVZpZXdT
dGF0ZVRpbWVyKFJ1bkxvb3A6Om1haW4oKSwgdGhpcywgJlRpbGVkQ29yZUFuaW1hdGlvbkRyYXdp
bmdBcmVhOjpkaWRVcGRhdGVWaWV3U3RhdGVUaW1lckZpcmVkKQorICAgICwgbV92aWV3T3Zlcmxh
eVJvb3RMYXllcihudWxscHRyKQogewogICAgIG1fd2ViUGFnZS5jb3JlUGFnZSgpLT5zZXR0aW5n
cygpLnNldEZvcmNlQ29tcG9zaXRpbmdNb2RlKHRydWUpOwogCkBAIC04NCw2ICs4Niw4IEBAIFRp
bGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhOjpUaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJl
YShXZWJQYWdlJiB3ZWJQYWdlLCBjCiAgICAgW21faG9zdGluZ0xheWVyIHNldE9wYXF1ZTpZRVNd
OwogICAgIFttX2hvc3RpbmdMYXllciBzZXRHZW9tZXRyeUZsaXBwZWQ6WUVTXTsKIAorICAgIFtt
X2hvc3RpbmdMYXllciBzZXROYW1lOkAiVENBREEgUk9PVCJdOworCiAgICAgdXBkYXRlTGF5ZXJI
b3N0aW5nQ29udGV4dCgpOwogICAgIHNldENvbG9yU3BhY2UocGFyYW1ldGVycy5jb2xvclNwYWNl
KTsKIApAQCAtMjA0LDkgKzIwOCwyOCBAQCB2b2lkIFRpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdB
cmVhOjp1cGRhdGVQcmVmZXJlbmNlcyhjb25zdCBXZWJQcmVmZXJlbmNlc1N0b3JlJgogICAgIHVw
ZGF0ZURlYnVnSW5mb0xheWVyKHNob3dUaWxlZFNjcm9sbGluZ0luZGljYXRvcik7CiB9CiAKK3Zv
aWQgVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWE6OnVwZGF0ZVJvb3RMYXllcnMoKQorewor
ICAgIGlmICghbV9yb290TGF5ZXIpIHsKKyAgICAgICAgW21faG9zdGluZ0xheWVyIHNldFN1Ymxh
eWVyczpAWyBdXTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFttX2hvc3RpbmdMYXll
ciBzZXRTdWJsYXllcnM6bV92aWV3T3ZlcmxheVJvb3RMYXllciA/IEBbIG1fcm9vdExheWVyLmdl
dCgpLCBtX3ZpZXdPdmVybGF5Um9vdExheWVyLT5wbGF0Zm9ybUxheWVyKCkgXSA6IEBbIG1fcm9v
dExheWVyLmdldCgpIF1dOworfQorCit2b2lkIFRpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVh
OjphdHRhY2hWaWV3T3ZlcmxheUdyYXBoaWNzTGF5ZXIoRnJhbWUqIGZyYW1lLCBHcmFwaGljc0xh
eWVyKiB2aWV3T3ZlcmxheVJvb3RMYXllcikKK3sKKyAgICBpZiAoIWZyYW1lLT5pc01haW5GcmFt
ZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3ZpZXdPdmVybGF5Um9vdExheWVyID0gdmll
d092ZXJsYXlSb290TGF5ZXI7CisgICAgdXBkYXRlUm9vdExheWVycygpOworfQorCiB2b2lkIFRp
bGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhOjptYWluRnJhbWVDb250ZW50U2l6ZUNoYW5nZWQo
Y29uc3QgSW50U2l6ZSYgc2l6ZSkKIHsKLSAgICBtX3dlYlBhZ2UucGFnZU92ZXJsYXlDb250cm9s
bGVyKCkuZGlkQ2hhbmdlRG9jdW1lbnRTaXplKCk7CisKIH0KIAogdm9pZCBUaWxlZENvcmVBbmlt
YXRpb25EcmF3aW5nQXJlYTo6dXBkYXRlSW50cmluc2ljQ29udGVudFNpemVJZk5lZWRlZCgpCkBA
IC0yODMsNyArMzA2LDkgQEAgYm9vbCBUaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYTo6Zmx1
c2hMYXllcnMoKQogCiAgICAgRmxvYXRSZWN0IHZpc2libGVSZWN0ID0gW21faG9zdGluZ0xheWVy
IGZyYW1lXTsKICAgICB2aXNpYmxlUmVjdC5pbnRlcnNlY3QobV9zY3JvbGxlZEV4cG9zZWRSZWN0
KTsKLSAgICBtX3dlYlBhZ2UucGFnZU92ZXJsYXlDb250cm9sbGVyKCkuZmx1c2hQYWdlT3Zlcmxh
eUxheWVycyh2aXNpYmxlUmVjdCk7CisKKyAgICAvLyBCZWNhdXNlIG91ciB2aWV3LXJlbGF0aXZl
IG92ZXJsYXkgcm9vdCBsYXllciBpcyBub3QgYXR0YWNoZWQgdG8gdGhlIG1haW4gR3JhcGhpY3NM
YXllciB0cmVlLCB3ZSBuZWVkIHRvIGZsdXNoIGl0IG1hbnVhbGx5LgorICAgIG1fd2ViUGFnZS5j
b3JlUGFnZSgpLT5wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKS52aWV3T3ZlcmxheVJvb3RMYXllcigp
LT5mbHVzaENvbXBvc2l0aW5nU3RhdGUodmlzaWJsZVJlY3QpOwogCiAgICAgYm9vbCByZXR1cm5W
YWx1ZSA9IG1fd2ViUGFnZS5tYWluRnJhbWVWaWV3KCktPmZsdXNoQ29tcG9zaXRpbmdTdGF0ZUlu
Y2x1ZGluZ1N1YmZyYW1lcygpOwogI2lmIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpCkBAIC0zNjMs
OCArMzg4LDYgQEAgdm9pZCBUaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYTo6dXBkYXRlU2Ny
b2xsZWRFeHBvc2VkUmVjdCgpCiAjZW5kaWYKIAogICAgIGZyYW1lVmlldy0+c2V0RXhwb3NlZFJl
Y3QobV9zY3JvbGxlZEV4cG9zZWRSZWN0KTsKLQotICAgIG1fd2ViUGFnZS5wYWdlT3ZlcmxheUNv
bnRyb2xsZXIoKS5kaWRDaGFuZ2VFeHBvc2VkUmVjdCgpOwogfQogCiB2b2lkIFRpbGVkQ29yZUFu
aW1hdGlvbkRyYXdpbmdBcmVhOjp1cGRhdGVHZW9tZXRyeShjb25zdCBJbnRTaXplJiB2aWV3U2l6
ZSwgY29uc3QgSW50U2l6ZSYgbGF5ZXJQb3NpdGlvbikKQEAgLTQ2NCwxMiArNDg3LDEyIEBAIHZv
aWQgVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWE6OnNldFJvb3RDb21wb3NpdGluZ0xheWVy
KENBTGF5ZXIgKmxheWVyKQogICAgIFtDQVRyYW5zYWN0aW9uIGJlZ2luXTsKICAgICBbQ0FUcmFu
c2FjdGlvbiBzZXREaXNhYmxlQWN0aW9uczpZRVNdOwogCi0gICAgW21faG9zdGluZ0xheWVyIHNl
dFN1YmxheWVyczpsYXllciA/IEBbIGxheWVyLCBtX3dlYlBhZ2UucGFnZU92ZXJsYXlDb250cm9s
bGVyKCkudmlld092ZXJsYXlSb290TGF5ZXIoKS0+cGxhdGZvcm1MYXllcigpIF0gOiBAWyBdXTsK
LQogICAgIGJvb2wgaGFkUm9vdExheWVyID0gISFtX3Jvb3RMYXllcjsKICAgICBtX3Jvb3RMYXll
ciA9IGxheWVyOwogICAgIFttX3Jvb3RMYXllciBzZXRTdWJsYXllclRyYW5zZm9ybTptX3RyYW5z
Zm9ybV07CiAKKyAgICB1cGRhdGVSb290TGF5ZXJzKCk7CisKICAgICBpZiAoaGFkUm9vdExheWVy
ICE9ICEhbGF5ZXIpCiAgICAgICAgIG1fbGF5ZXJIb3N0aW5nQ29udGV4dC0+c2V0Um9vdExheWVy
KGxheWVyID8gbV9ob3N0aW5nTGF5ZXIuZ2V0KCkgOiAwKTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XS0FjY2Vzc2liaWxpdHlXZWJQYWdlT2Jq
ZWN0TWFjLm1tIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XS0FjY2Vz
c2liaWxpdHlXZWJQYWdlT2JqZWN0TWFjLm1tCmluZGV4IDM4MzM5YmEuLjU0ZGQ0NDQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV0tBY2Nlc3NpYmls
aXR5V2ViUGFnZU9iamVjdE1hYy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvbWFjL1dLQWNjZXNzaWJpbGl0eVdlYlBhZ2VPYmplY3RNYWMubW0KQEAgLTQwLDYgKzQw
LDcgQEAKICNpbXBvcnQgPFdlYkNvcmUvRnJhbWVWaWV3Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL01h
aW5GcmFtZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9QYWdlLmg+CisjaW1wb3J0IDxXZWJDb3JlL1Bh
Z2VPdmVybGF5Q29udHJvbGxlci5oPgogI2ltcG9ydCA8V2ViQ29yZS9TY3JvbGxWaWV3Lmg+CiAj
aW1wb3J0IDxXZWJDb3JlL1Njcm9sbGJhci5oPgogI2ltcG9ydCA8V2ViS2l0U3lzdGVtSW50ZXJm
YWNlLmg+CkBAIC03NSwxOSArNzYsMTMgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKIAogLSAo
TlNBcnJheSAqKWFjY2Vzc2liaWxpdHlQYXJhbWV0ZXJpemVkQXR0cmlidXRlTmFtZXMKIHsKLSAg
ICBXS1JldGFpblB0cjxXS0FycmF5UmVmPiByZXN1bHQgPSBhZG9wdFdLKG1fcGFnZS0+cGFnZU92
ZXJsYXlDb250cm9sbGVyKCkuY29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVzTmFtZXModHJ1ZSkp
OwotICAgIGlmICghcmVzdWx0KQorICAgIFZlY3RvcjxTdHJpbmc+IHJlc3VsdCA9IG1fcGFnZS0+
Y29yZVBhZ2UoKS0+cGFnZU92ZXJsYXlDb250cm9sbGVyKCkuY29weUFjY2Vzc2liaWxpdHlBdHRy
aWJ1dGVzTmFtZXModHJ1ZSk7CisgICAgaWYgKHJlc3VsdC5pc0VtcHR5KCkpCiAgICAgICAgIHJl
dHVybiBuaWw7CiAgICAgCiAgICAgTlNNdXRhYmxlQXJyYXkgKm5hbWVzID0gW05TTXV0YWJsZUFy
cmF5IGFycmF5XTsKLSAgICBzaXplX3QgY291bnQgPSBXS0FycmF5R2V0U2l6ZShyZXN1bHQuZ2V0
KCkpOwotICAgIGZvciAoc2l6ZV90IGsgPSAwOyBrIDwgY291bnQ7IGsrKykgewotICAgICAgICBX
S1R5cGVSZWYgaXRlbSA9IFdLQXJyYXlHZXRJdGVtQXRJbmRleChyZXN1bHQuZ2V0KCksIGspOwot
ICAgICAgICBpZiAodG9JbXBsKGl0ZW0pLT50eXBlKCkgPT0gQVBJOjpTdHJpbmc6OkFQSVR5cGUp
IHsKLSAgICAgICAgICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gbmFtZSA9IGFkb3B0Q0YoV0tT
dHJpbmdDb3B5Q0ZTdHJpbmcoa0NGQWxsb2NhdG9yRGVmYXVsdCwgKFdLU3RyaW5nUmVmKWl0ZW0p
KTsKLSAgICAgICAgICAgIFtuYW1lcyBhZGRPYmplY3Q6KE5TU3RyaW5nICopbmFtZS5nZXQoKV07
Ci0gICAgICAgIH0KLSAgICB9CisgICAgZm9yIChhdXRvJiBuYW1lIDogcmVzdWx0KQorICAgICAg
ICBbbmFtZXMgYWRkT2JqZWN0OihOU1N0cmluZyAqKW5hbWVdOwogICAgIAogICAgIHJldHVybiBu
YW1lczsKIH0KQEAgLTE2NCwyMyArMTU5LDI2IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CiAK
IC0gKGlkKWFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZTooTlNTdHJpbmcgKilhdHRyaWJ1dGUg
Zm9yUGFyYW1ldGVyOihpZClwYXJhbWV0ZXIKIHsKLSAgICBXS1JldGFpblB0cjxXS1R5cGVSZWY+
IHBhZ2VPdmVybGF5UGFyYW1ldGVyID0gMDsKLSAgICAKLSAgICBpZiAoW3BhcmFtZXRlciBpc0tp
bmRPZkNsYXNzOltOU1ZhbHVlIGNsYXNzXV0gJiYgc3RyY21wKFsoTlNWYWx1ZSopcGFyYW1ldGVy
IG9iakNUeXBlXSwgQGVuY29kZShOU1BvaW50KSkgPT0gMCkgewotICAgICAgICBOU1BvaW50IHBv
aW50ID0gW3NlbGYgY29udmVydFNjcmVlblBvaW50VG9Sb290VmlldzpbKE5TVmFsdWUgKilwYXJh
bWV0ZXIgcG9pbnRWYWx1ZV1dOwotICAgICAgICBwYWdlT3ZlcmxheVBhcmFtZXRlciA9IFdLUG9p
bnRDcmVhdGUoV0tQb2ludE1ha2UocG9pbnQueCwgcG9pbnQueSkpOwotICAgIH0KLSAgICAKLSAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gYXR0cmlidXRlUmVmID0gYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhDRlN0cmluZygoQ0ZTdHJpbmdSZWYpYXR0cmlidXRlKSk7Ci0gICAgV0tSZXRh
aW5QdHI8V0tUeXBlUmVmPiByZXN1bHQgPSBhZG9wdFdLKG1fcGFnZS0+cGFnZU92ZXJsYXlDb250
cm9sbGVyKCkuY29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZShhdHRyaWJ1dGVSZWYuZ2V0
KCksIHBhZ2VPdmVybGF5UGFyYW1ldGVyLmdldCgpKSk7Ci0gICAgaWYgKCFyZXN1bHQpCisgICAg
V2ViQ29yZTo6RmxvYXRQb2ludCBwYWdlT3ZlcmxheVBvaW50OworICAgIGlmIChbcGFyYW1ldGVy
IGlzS2luZE9mQ2xhc3M6W05TVmFsdWUgY2xhc3NdXSAmJiAhc3RyY21wKFsoTlNWYWx1ZSAqKXBh
cmFtZXRlciBvYmpDVHlwZV0sIEBlbmNvZGUoTlNQb2ludCkpKQorICAgICAgICBwYWdlT3Zlcmxh
eVBvaW50ID0gW3NlbGYgY29udmVydFNjcmVlblBvaW50VG9Sb290VmlldzpbKE5TVmFsdWUgKilw
YXJhbWV0ZXIgcG9pbnRWYWx1ZV1dOworICAgIGVsc2UKICAgICAgICAgcmV0dXJuIG5pbDsKLSAg
ICAKLSAgICBpZiAodG9JbXBsKHJlc3VsdC5nZXQoKSktPnR5cGUoKSA9PSBBUEk6OlN0cmluZzo6
QVBJVHlwZSkKLSAgICAgICAgcmV0dXJuIENGQnJpZGdpbmdSZWxlYXNlKFdLU3RyaW5nQ29weUNG
U3RyaW5nKGtDRkFsbG9jYXRvckRlZmF1bHQsIChXS1N0cmluZ1JlZilyZXN1bHQuZ2V0KCkpKTsK
LSAgICBpZiAodG9JbXBsKHJlc3VsdC5nZXQoKSktPnR5cGUoKSA9PSBBUEk6OkJvb2xlYW46OkFQ
SVR5cGUpCi0gICAgICAgIHJldHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0aEJvb2w6V0tCb29sZWFu
R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihyZXN1bHQuZ2V0KCkpKV07Ci0gICAg
CisKKyAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6QCJBWERhdGFEZXRlY3RvckV4
aXN0c0F0UG9pbnQiXSB8fCBbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpAIkFYRGlkU2hvd0Rh
dGFEZXRlY3Rvck1lbnVBdFBvaW50Il0pIHsKKyAgICAgICAgYm9vbCB2YWx1ZTsKKyAgICAgICAg
aWYgKCFtX3BhZ2UtPmNvcmVQYWdlKCktPnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLmNvcHlBY2Nl
c3NpYmlsaXR5QXR0cmlidXRlQm9vbFZhbHVlRm9yUG9pbnQoYXR0cmlidXRlLCBwYWdlT3Zlcmxh
eVBvaW50LCB2YWx1ZSkpCisgICAgICAgICAgICByZXR1cm4gbmlsOworICAgICAgICByZXR1cm4g
W05TTnVtYmVyIG51bWJlcldpdGhCb29sOnZhbHVlXTsKKyAgICB9CisKKyAgICBpZiAoW2F0dHJp
YnV0ZSBpc0VxdWFsVG9TdHJpbmc6QCJBWERhdGFEZXRlY3RvclR5cGVBdFBvaW50Il0pIHsKKyAg
ICAgICAgU3RyaW5nIHZhbHVlOworICAgICAgICBpZiAoIW1fcGFnZS0+Y29yZVBhZ2UoKS0+cGFn
ZU92ZXJsYXlDb250cm9sbGVyKCkuY29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVTdHJpbmdWYWx1
ZUZvclBvaW50KGF0dHJpYnV0ZSwgcGFnZU92ZXJsYXlQb2ludCwgdmFsdWUpKQorICAgICAgICAg
ICAgcmV0dXJuIG5pbDsKKyAgICAgICAgcmV0dXJuIFtOU1N0cmluZyBzdHJpbmdXaXRoU3RyaW5n
OnZhbHVlXTsKKyAgICB9CisKICAgICByZXR1cm4gbmlsOwogfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>238902</attachid>
            <date>2014-09-29 19:28:59 -0700</date>
            <delta_ts>2014-09-30 12:24:35 -0700</delta_ts>
            <desc>wip</desc>
            <filename>pageoverlay.diff</filename>
            <type>text/plain</type>
            <size>169315</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNv
cmUvQ01ha2VMaXN0cy50eHQKaW5kZXggOGRiN2Q3ZC4uZWZkYjBmNyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKQEAgLTE5NDAsNiArMTk0MCw4IEBAIHNldChXZWJDb3JlX1NPVVJDRVMKICAgICBwYWdl
L1BhZ2VDb25zb2xlQ2xpZW50LmNwcAogICAgIHBhZ2UvUGFnZUdyb3VwLmNwcAogICAgIHBhZ2Uv
UGFnZUdyb3VwTG9hZERlZmVycmVyLmNwcAorICAgIHBhZ2UvUGFnZU92ZXJsYXkuY3BwCisgICAg
cGFnZS9QYWdlT3ZlcmxheUNvbnRyb2xsZXIuY3BwCiAgICAgcGFnZS9QYWdlU2VyaWFsaXplci5j
cHAKICAgICBwYWdlL1BhZ2VUaHJvdHRsZXIuY3BwCiAgICAgcGFnZS9QYWdlVmlzaWJpbGl0eVN0
YXRlLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4gYi9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgppbmRleCA0NDQ1ZDUwLi5kNTgzOWU4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgorKysgYi9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLmV4cC5pbgpAQCAtMTg3LDYgKzE4NywxMyBAQCBfX1pON1dlYkNvcmUxMU1lbW9yeUNh
Y2hlMThyZXNvdXJjZUZvclJlcXVlc3RFUktOU18xNVJlc291cmNlUmVxdWVzdEVOU185U2Vzc2lv
bgogX19aTjdXZWJDb3JlMTFNZW1vcnlDYWNoZTE5Z2V0T3JpZ2luc1dpdGhDYWNoZUVSTjNXVEY3
SGFzaFNldElOUzFfNlJlZlB0cklOU18xNFNlY3VyaXR5T3JpZ2luRUVFTlNfMThTZWN1cml0eU9y
aWdpbkhhc2hFTlMxXzEwSGFzaFRyYWl0c0lTNV9FRUVFCiBfX1pON1dlYkNvcmUxMU1lbW9yeUNh
Y2hlMjByZW1vdmVJbWFnZUZyb21DYWNoZUVSS05TXzNVUkxFUktOM1dURjZTdHJpbmdFCiBfX1pO
N1dlYkNvcmUxMU1lbW9yeUNhY2hlMjVyZW1vdmVSZXNvdXJjZXNXaXRoT3JpZ2luRVBOU18xNFNl
Y3VyaXR5T3JpZ2luRQorX19aTjdXZWJDb3JlMTFQYWdlT3ZlcmxheTE1c2V0TmVlZHNEaXNwbGF5
RVJLTlNfN0ludFJlY3RFCitfX1pON1dlYkNvcmUxMVBhZ2VPdmVybGF5MTVzZXROZWVkc0Rpc3Bs
YXlFdgorX19aTjdXZWJDb3JlMTFQYWdlT3ZlcmxheTIwc3RvcEZhZGVPdXRBbmltYXRpb25Fdgor
X19aTjdXZWJDb3JlMTFQYWdlT3ZlcmxheTVjbGVhckV2CitfX1pON1dlYkNvcmUxMVBhZ2VPdmVy
bGF5NWxheWVyRXYKK19fWk43V2ViQ29yZTExUGFnZU92ZXJsYXk2Y3JlYXRlRVJOUzBfNkNsaWVu
dEVOUzBfMTFPdmVybGF5VHlwZUUKK19fWk43V2ViQ29yZTExUGFnZU92ZXJsYXk4c2V0RnJhbWVF
TlNfN0ludFJlY3RFCiBfX1pON1dlYkNvcmUxMVNRTFJlc3VsdE9rRQogX19aTjdXZWJDb3JlMTFV
UkxXaXRoRGF0YUVQNk5TRGF0YVA1TlNVUkwKIF9fWk43V2ViQ29yZTExZ2V0VVJMQnl0ZXNFUEs3
X19DRlVSTFJOM1dURjZWZWN0b3JJY0xtNTEyRU5TM18xNUNyYXNoT25PdmVyZmxvd0VFRQpAQCAt
OTA5LDYgKzkxNiwxMiBAQCBfX1pON1dlYkNvcmUyMU1lbW9yeVByZXNzdXJlSGFuZGxlcjdpbnN0
YWxsRXYKIF9fWk43V2ViQ29yZTIxTmV0d29ya1N0b3JhZ2VTZXNzaW9uMjFkZWZhdWx0U3RvcmFn
ZVNlc3Npb25FdgogX19aTjdXZWJDb3JlMjFOZXR3b3JrU3RvcmFnZVNlc3Npb24yNXN3aXRjaFRv
TmV3VGVzdGluZ1Nlc3Npb25FdgogX19aTjdXZWJDb3JlMjFOZXR3b3JrU3RvcmFnZVNlc3Npb24y
OGNyZWF0ZVByaXZhdGVCcm93c2luZ1Nlc3Npb25FUktOM1dURjZTdHJpbmdFCitfX1pON1dlYkNv
cmUyMVBhZ2VPdmVybGF5Q29udHJvbGxlcjE4aW5zdGFsbFBhZ2VPdmVybGF5RU4zV1RGMTBQYXNz
UmVmUHRySU5TXzExUGFnZU92ZXJsYXlFRUVOUzNfOEZhZGVNb2RlRQorX19aTjdXZWJDb3JlMjFQ
YWdlT3ZlcmxheUNvbnRyb2xsZXIyMHVuaW5zdGFsbFBhZ2VPdmVybGF5RVBOU18xMVBhZ2VPdmVy
bGF5RU5TMV84RmFkZU1vZGVFCitfX1pON1dlYkNvcmUyMVBhZ2VPdmVybGF5Q29udHJvbGxlcjIw
dmlld092ZXJsYXlSb290TGF5ZXJFdgorX19aTjdXZWJDb3JlMjFQYWdlT3ZlcmxheUNvbnRyb2xs
ZXIzMmNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlc05hbWVzRWIKK19fWk43V2ViQ29yZTIxUGFn
ZU92ZXJsYXlDb250cm9sbGVyNDNjb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZUJvb2xWYWx1ZUZv
clBvaW50RU4zV1RGNlN0cmluZ0VOU18xMEZsb2F0UG9pbnRFUmIKK19fWk43V2ViQ29yZTIxUGFn
ZU92ZXJsYXlDb250cm9sbGVyNDVjb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVN0cmluZ1ZhbHVl
Rm9yUG9pbnRFTjNXVEY2U3RyaW5nRU5TXzEwRmxvYXRQb2ludEVSUzJfCiBfX1pON1dlYkNvcmUy
MVBsYXRmb3JtS2V5Ym9hcmRFdmVudDI0ZGlzYW1iaWd1YXRlS2V5RG93bkV2ZW50RU5TXzEzUGxh
dGZvcm1FdmVudDRUeXBlRWIKIF9fWk43V2ViQ29yZTIxUmVtb3RlQ29tbWFuZExpc3RlbmVyNmNy
ZWF0ZUVSTlNfMjdSZW1vdGVDb21tYW5kTGlzdGVuZXJDbGllbnRFCiBfX1pON1dlYkNvcmUyMVJl
c291cmNlTG9hZFNjaGVkdWxlcjIwc2VydmVQZW5kaW5nUmVxdWVzdHNFTlNfMjBSZXNvdXJjZUxv
YWRQcmlvcml0eUUKQEAgLTE2MDMsNiArMTYxNiw4IEBAIF9fWk5LN1dlYkNvcmUxMUhpc3RvcnlJ
dGVtOGNoaWxkcmVuRXYKIF9fWk5LN1dlYkNvcmUxMUhpc3RvcnlJdGVtOHJlZmVycmVyRXYKIF9f
Wk5LN1dlYkNvcmUxMUhpc3RvcnlJdGVtOXVybFN0cmluZ0V2CiBfX1pOSzdXZWJDb3JlMTFIaXN0
b3J5SXRlbTl2aWV3U3RhdGVFdgorX19aTks3V2ViQ29yZTExUGFnZU92ZXJsYXk1ZnJhbWVFdgor
X19aTks3V2ViQ29yZTExUGFnZU92ZXJsYXk2Ym91bmRzRXYKIF9fWk5LN1dlYkNvcmUxMVJlbmRl
ckJsb2NrMjVpbmxpbmVFbGVtZW50Q29udGludWF0aW9uRXYKIF9fWk5LN1dlYkNvcmUxMVJlbmRl
ckxheWVyMTlhYnNvbHV0ZUJvdW5kaW5nQm94RXYKIF9fWk5LN1dlYkNvcmUxMVJlbmRlckxheWVy
MjRuZWVkc0NvbXBvc2l0ZWRTY3JvbGxpbmdFdgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGE2OWU5NmMuLmNjMDE4NzEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagor
KysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAg
LTEwOTAsNiArMTA5MCwxMCBAQAogCQkyRDVBNTkyRjE1MjUyNTIzMDAzNkVFNTEgLyogSW1hZ2VP
cmllbnRhdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBODc0OEQ3NDEyQ0MzRjg5MDAxRkJBNDEgLyogSW1hZ2VPcmllbnRhdGlvbi5jcHAgKi87
IH07CiAJCTJENUE1OTMxMTUyNTI1RDAwMDM2RUU1MSAvKiBJbWFnZU9yaWVudGF0aW9uLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODc0OEQ2NjEyQ0Mz
NzYzMDAxRkJBNDEgLyogSW1hZ2VPcmllbnRhdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTJENUJDNDI3MTZGODgyRUUwMDcwNDhEMCAvKiBT
ZWN1cml0eVBvbGljeVZpb2xhdGlvbkV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAyRDVCQzQyNTE2Rjg4MkJFMDA3MDQ4RDAgLyogU2VjdXJpdHlQ
b2xpY3lWaW9sYXRpb25FdmVudC5oICovOyB9OworCQkyRDVDOUNGRjE5QzdCNTJFMDBCM0M1QzEg
LyogUGFnZU92ZXJsYXkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMkQ1QzlDRkIxOUM3QjUyRTAwQjNDNUMxIC8qIFBhZ2VPdmVybGF5LmNwcCAqLzsg
fTsKKwkJMkQ1QzlEMDAxOUM3QjUyRTAwQjNDNUMxIC8qIFBhZ2VPdmVybGF5LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRDVDOUNGQzE5QzdCNTJFMDBC
M0M1QzEgLyogUGFnZU92ZXJsYXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OworCQkyRDVDOUQwMTE5QzdCNTJFMDBCM0M1QzEgLyogUGFnZU92ZXJsYXlD
b250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDJENUM5Q0ZEMTlDN0I1MkUwMEIzQzVDMSAvKiBQYWdlT3ZlcmxheUNvbnRyb2xsZXIuY3Bw
ICovOyB9OworCQkyRDVDOUQwMjE5QzdCNTJFMDBCM0M1QzEgLyogUGFnZU92ZXJsYXlDb250cm9s
bGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRDVD
OUNGRTE5QzdCNTJFMDBCM0M1QzEgLyogUGFnZU92ZXJsYXlDb250cm9sbGVyLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMkQ2RTQ2ODQxN0Q2NjBG
NTAwRUNGOEJCIC8qIFBERkRvY3VtZW50SW1hZ2VNYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRDZFNDY4MjE3RDY2MEY1MDBFQ0Y4QkIgLyogUERG
RG9jdW1lbnRJbWFnZU1hYy5tbSAqLzsgfTsKIAkJMkQ3MEJBMTMxODA3NERERjAwMDE5MDhBIC8q
IFBsYXRmb3JtQ0FMYXllck1hYy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMkQ3MEJBMTIxODA3NERERjAwMDE5MDhBIC8qIFBsYXRmb3JtQ0FMYXllck1h
Yy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTJE
NzBCQTE1MTgwNzRGODYwMDAxOTA4QSAvKiBQbGF0Zm9ybUNBTGF5ZXIuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkQ3MEJBMTQxODA3NEY4NTAwMDE5
MDhBIC8qIFBsYXRmb3JtQ0FMYXllci5jcHAgKi87IH07CkBAIC04MDgxLDYgKzgwODUsMTAgQEAK
IAkJMkQ0NkYwNEYxN0I5NkZEMjAwNTY0N0YwIC8qIEludFNpemUuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW50U2l6ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTJENUJDNDI1MTZGODgyQkUwMDcwNDhEMCAvKiBTZWN1cml0eVBvbGljeVZpb2xh
dGlvbkV2ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNlY3VyaXR5UG9s
aWN5VmlvbGF0aW9uRXZlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkQ1QkM0
MjYxNkY4ODJCRTAwNzA0OEQwIC8qIFNlY3VyaXR5UG9saWN5VmlvbGF0aW9uRXZlbnQuaWRsICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gdGV4dDsgcGF0aCA9IFNlY3VyaXR5UG9saWN5VmlvbGF0aW9uRXZlbnQuaWRsOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyRDVDOUNGQjE5QzdCNTJFMDBCM0M1QzEgLyog
UGFnZU92ZXJsYXkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUGFn
ZU92ZXJsYXkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyRDVDOUNGQzE5QzdC
NTJFMDBCM0M1QzEgLyogUGFnZU92ZXJsYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gUGFnZU92ZXJsYXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMkQ1QzlD
RkQxOUM3QjUyRTAwQjNDNUMxIC8qIFBhZ2VPdmVybGF5Q29udHJvbGxlci5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQYWdlT3ZlcmxheUNvbnRyb2xsZXIuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyRDVDOUNGRTE5QzdCNTJFMDBCM0M1QzEgLyog
UGFnZU92ZXJsYXlDb250cm9sbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFBhZ2VPdmVybGF5Q29udHJvbGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQky
RDZFNDY4MjE3RDY2MEY1MDBFQ0Y4QkIgLyogUERGRG9jdW1lbnRJbWFnZU1hYy5tbSAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFBERkRvY3VtZW50SW1hZ2VNYWMubW07
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJENzBCQTEyMTgwNzREREYwMDAxOTA4QSAv
KiBQbGF0Zm9ybUNBTGF5ZXJNYWMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
UGxhdGZvcm1DQUxheWVyTWFjLmg7IHBhdGggPSBjYS9tYWMvUGxhdGZvcm1DQUxheWVyTWFjLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJENzBCQTE0MTgwNzRGODUwMDAxOTA4QSAv
KiBQbGF0Zm9ybUNBTGF5ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1l
ID0gUGxhdGZvcm1DQUxheWVyLmNwcDsgcGF0aCA9IGNhL1BsYXRmb3JtQ0FMYXllci5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNjU5MCw2ICsxNjU5OCwxMCBAQAogCQkJCTkz
MDJCMEJFMEQ3OUY4MkMwMEM3RUU4MyAvKiBQYWdlR3JvdXAuaCAqLywKIAkJCQk3QTY3NEJEOTBG
OUVCRjRFMDA2Q0YwOTkgLyogUGFnZUdyb3VwTG9hZERlZmVycmVyLmNwcCAqLywKIAkJCQk3QTY3
NEJEQTBGOUVCRjRFMDA2Q0YwOTkgLyogUGFnZUdyb3VwTG9hZERlZmVycmVyLmggKi8sCisJCQkJ
MkQ1QzlDRkIxOUM3QjUyRTAwQjNDNUMxIC8qIFBhZ2VPdmVybGF5LmNwcCAqLywKKwkJCQkyRDVD
OUNGQzE5QzdCNTJFMDBCM0M1QzEgLyogUGFnZU92ZXJsYXkuaCAqLywKKwkJCQkyRDVDOUNGRDE5
QzdCNTJFMDBCM0M1QzEgLyogUGFnZU92ZXJsYXlDb250cm9sbGVyLmNwcCAqLywKKwkJCQkyRDVD
OUNGRTE5QzdCNTJFMDBCM0M1QzEgLyogUGFnZU92ZXJsYXlDb250cm9sbGVyLmggKi8sCiAJCQkJ
MzcxRTY1Q0QxMzY2MUVFRDAwQkVFREIwIC8qIFBhZ2VTZXJpYWxpemVyLmNwcCAqLywKIAkJCQkz
NzFFNjVDQjEzNjYxRURDMDBCRUVEQjAgLyogUGFnZVNlcmlhbGl6ZXIuaCAqLywKIAkJCQlBNzE5
N0YyNTE3NTY4QUU1MDA3Qjk0NDIgLyogUGFnZVRocm90dGxlci5jcHAgKi8sCkBAIC0yMzY1Myw2
ICsyMzY2NSw3IEBACiAJCQkJOTdCQzZBMjExNTA1RjA4MTAwMUI3NEFDIC8qIERhdGFiYXNlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk5N0JDNkEyNDE1MDVGMDgxMDAxQjc0QUMgLyogRGF0YWJhc2VB
dXRob3JpemVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRTE2Q0ZENDE2OUQxREVEMDBEM0EwQzcg
LyogRGF0YWJhc2VCYWNrZW5kLmggaW4gSGVhZGVycyAqLywKKwkJCQkyRDVDOUQwMjE5QzdCNTJF
MDBCM0M1QzEgLyogUGFnZU92ZXJsYXlDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk5
N0JDNjlEQjE1MDVGMDc2MDAxQjc0QUMgLyogRGF0YWJhc2VCYWNrZW5kQmFzZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJRkU2RjZBQjAxNjlFMDU3NTAwRkMzMEEyIC8qIERhdGFiYXNlQmFja2VuZENv
bnRleHQuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFMTZDRkQ2MTY5RDFERUQwMEQzQTBDNyAvKiBE
YXRhYmFzZUJhY2tlbmRTeW5jLmggaW4gSGVhZGVycyAqLywKQEAgLTI1NjE4LDYgKzI1NjMxLDcg
QEAKIAkJCQk0MzkwNDZFQzEyREEyNUU4MDBBRjgwQTkgLyogUmVuZGVyTWF0aE1MVG9rZW4uaCBp
biBIZWFkZXJzICovLAogCQkJCTQzOTA0NkVBMTJEQTI1RTgwMEFGODBBMiAvKiBSZW5kZXJNYXRo
TUxVbmRlck92ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0QzI3OTU5MENGOTc0MTkwMEU5N0I5
OCAvKiBSZW5kZXJNZWRpYS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMkQ1QzlEMDAxOUM3QjUyRTAw
QjNDNUMxIC8qIFBhZ2VPdmVybGF5LmggaW4gSGVhZGVycyAqLywKIAkJCQlERUJDQ0REMjE2NjQ2
RTgyMDBBNDUyRTEgLyogUmVuZGVyTWVkaWFDb250cm9sRWxlbWVudHMuaCBpbiBIZWFkZXJzICov
LAogCQkJCTQxRkEzMDNGMTMxNkMyOUMwMEMwQkZDNSAvKiBSZW5kZXJNZWRpYUNvbnRyb2xzLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBQkRERkU3QTBBNUM2RTcwMDBBM0UxMUQgLyogUmVuZGVyTWVu
dUxpc3QuaCBpbiBIZWFkZXJzICovLApAQCAtMjgwMDUsNiArMjgwMTksNyBAQAogCQkJCUE1ODQw
RTFDMTg3Qjc0RDUwMDg0M0IxMCAvKiBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJNzFCMUUxMjYxNjQwNDkxQTAwQjE4ODBBIC8qIEluc3BlY3Rv
ckxheWVyVHJlZUFnZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUwNEFBQ0NEMTgzNDQ1NTkw
MEUzRDlCQyAvKiBJbnNwZWN0b3JOb2RlRmluZGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTJE
NUM5RDAxMTlDN0I1MkUwMEIzQzVDMSAvKiBQYWdlT3ZlcmxheUNvbnRyb2xsZXIuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJN0M1MjJENEIxNUI0NzdFODAwOUI3Qzk1IC8qIEluc3BlY3Rvck92ZXJs
YXkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNEY2RkRENjQxMzQxREVERDAwMUY4RUUzIC8qIElu
c3BlY3RvclBhZ2VBZ2VudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5OUNDMEI2NjE4QkU5RjE1
MDA2Q0VCQ0MgLyogSW5zcGVjdG9yUmVwbGF5QWdlbnQuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0y
ODA3Myw2ICsyODA4OCw3IEBACiAJCQkJQkNDMDY1ODcwRjNDRTJBNzAwQ0QyRDg3IC8qIEpTQ2xp
ZW50UmVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQ0MwNjU4OTBGM0NFMkE3MDBDRDJEODcg
LyogSlNDbGllbnRSZWN0TGlzdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1QzQzMDRCNTE5MUFF
RjQ2MDAwRTJCQzAgLyogSlNFWFRTaGFkZXJUZXh0dXJlTE9ELmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCTJENUM5Q0ZGMTlDN0I1MkUwMEIzQzVDMSAvKiBQYWdlT3ZlcmxheS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk3NkZCOUZGODE5QTczRTNBMDA0MjA1NjIgLyogSlNBdXRvY29tcGxldGVFcnJv
ckV2ZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDQTgzRTRGMEQ3Q0UxRTkwMDM0MjFBOCAv
KiBKU0RhdGFUcmFuc2Zlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQ0E4M0U1MjBEN0NFMjA1
MDAzNDIxQTggLyogSlNEYXRhVHJhbnNmZXJDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmggYi9Tb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmgKaW5kZXggZmYwOGY2MC4uOWNkMTJiNyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2xvYWRlci9FbXB0eUNsaWVudHMuaApAQCAtMTgyLDYgKzE4Miw3IEBAIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsUmVjdEludG9WaWV3KGNvbnN0IEludFJlY3QmKSBjb25z
dCBvdmVycmlkZSB7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBhdHRhY2hSb290R3JhcGhpY3NMYXll
cihGcmFtZSosIEdyYXBoaWNzTGF5ZXIqKSBvdmVycmlkZSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQg
YXR0YWNoVmlld092ZXJsYXlHcmFwaGljc0xheWVyKEZyYW1lKiwgR3JhcGhpY3NMYXllciopIG92
ZXJyaWRlIHsgfQogICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc09uZVNob3REcmF3aW5nU3luY2hy
b25pemF0aW9uKCkgb3ZlcnJpZGUgeyB9CiAgICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlQ29tcG9z
aXRpbmdMYXllckZsdXNoKCkgb3ZlcnJpZGUgeyB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZUNsaWVu
dC5oCmluZGV4IDBjYTA0NmMuLjM5NjM3ZWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvQ2hyb21lQ2xpZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQu
aApAQCAtMzAwLDYgKzMwMCw3IEBAIHB1YmxpYzoKIAogICAgIC8vIFBhc3MgMCBhcyB0aGUgR3Jh
cGhpY3NMYXllciB0byBkZXRhdGNoIHRoZSByb290IGxheWVyLgogICAgIHZpcnR1YWwgdm9pZCBh
dHRhY2hSb290R3JhcGhpY3NMYXllcihGcmFtZSosIEdyYXBoaWNzTGF5ZXIqKSA9IDA7CisgICAg
dmlydHVhbCB2b2lkIGF0dGFjaFZpZXdPdmVybGF5R3JhcGhpY3NMYXllcihGcmFtZSosIEdyYXBo
aWNzTGF5ZXIqKSA9IDA7CiAgICAgLy8gU2V0cyBhIGZsYWcgdG8gc3BlY2lmeSB0aGF0IHRoZSBu
ZXh0IHRpbWUgY29udGVudCBpcyBkcmF3biB0byB0aGUgd2luZG93LAogICAgIC8vIHRoZSBjaGFu
Z2VzIGFwcGVhciBvbiB0aGUgc2NyZWVuIGluIHN5bmNocm9ueSB3aXRoIHVwZGF0ZXMgdG8gR3Jh
cGhpY3NMYXllcnMuCiAgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzT25lU2hvdERyYXdpbmdTeW5j
aHJvbml6YXRpb24oKSA9IDA7CkBAIC0zMDksOCArMzEwLDYgQEAgcHVibGljOgogICAgIC8vIFJl
dHVybnMgd2hldGhlciBvciBub3QgdGhlIGNsaWVudCBjYW4gcmVuZGVyIHRoZSBjb21wb3NpdGVk
IGxheWVyLAogICAgIC8vIHJlZ2FyZGxlc3Mgb2YgdGhlIHNldHRpbmdzLgogICAgIHZpcnR1YWwg
Ym9vbCBhbGxvd3NBY2NlbGVyYXRlZENvbXBvc2l0aW5nKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsg
fQotICAgIC8vIFN1cHBseSBhIGxheWVyIHRoYXQgd2lsbCBhZGRlZCBhcyBhbiBvdmVybGF5IG92
ZXIgb3RoZXIgZG9jdW1lbnQgbGF5ZXJzIChzY3JvbGxpbmcgd2l0aCB0aGUgZG9jdW1lbnQpLgot
ICAgIHZpcnR1YWwgR3JhcGhpY3NMYXllciogZG9jdW1lbnRPdmVybGF5TGF5ZXJGb3JGcmFtZShG
cmFtZSYpIHsgcmV0dXJuIG51bGxwdHI7IH0KIAogICAgIGVudW0gQ29tcG9zaXRpbmdUcmlnZ2Vy
IHsKICAgICAgICAgVGhyZWVEVHJhbnNmb3JtVHJpZ2dlciA9IDEgPDwgMCwKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvRXZlbnRIYW5kbGVyLmNwcAppbmRleCAzYzE1MjE3Li44YWQwNTY2IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGFnZS9FdmVudEhhbmRsZXIuY3BwCkBAIC02Niw2ICs2Niw3IEBACiAjaW5jbHVkZSAiTW91c2VF
dmVudC5oIgogI2luY2x1ZGUgIk1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMuaCIKICNpbmNs
dWRlICJQYWdlLmgiCisjaW5jbHVkZSAiUGFnZU92ZXJsYXlDb250cm9sbGVyLmgiCiAjaW5jbHVk
ZSAiUGxhdGZvcm1FdmVudC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtS2V5Ym9hcmRFdmVudC5oIgog
I2luY2x1ZGUgIlBsYXRmb3JtV2hlZWxFdmVudC5oIgpAQCAtMTY0NCw2ICsxNjQ1LDEwIEBAIGJv
b2wgRXZlbnRIYW5kbGVyOjpoYW5kbGVNb3VzZVByZXNzRXZlbnQoY29uc3QgUGxhdGZvcm1Nb3Vz
ZUV2ZW50JiBwbGF0Zm9ybU1vdXNlCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAorICAg
IFBhZ2UqIHBhZ2UgPSBtX2ZyYW1lLnBhZ2UoKTsKKyAgICBpZiAocGFnZSAmJiBwYWdlLT5wYWdl
T3ZlcmxheUNvbnRyb2xsZXIoKS5oYW5kbGVNb3VzZUV2ZW50KHBsYXRmb3JtTW91c2VFdmVudCkp
CisgICAgICAgIHJldHVybiB0cnVlOworCiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKICAgICBi
b29sIGRlZmF1bHRQcmV2ZW50ZWQgPSBkaXNwYXRjaFN5bnRoZXRpY1RvdWNoRXZlbnRJZkVuYWJs
ZWQocGxhdGZvcm1Nb3VzZUV2ZW50KTsKICAgICBpZiAoZGVmYXVsdFByZXZlbnRlZCkKQEAgLTE4
MzcsMTAgKzE4NDIsMTMgQEAgYm9vbCBFdmVudEhhbmRsZXI6Om1vdXNlTW92ZWQoY29uc3QgUGxh
dGZvcm1Nb3VzZUV2ZW50JiBldmVudCkKICAgICBSZWZQdHI8RnJhbWVWaWV3PiBwcm90ZWN0b3Io
bV9mcmFtZS52aWV3KCkpOwogICAgIE1heGltdW1EdXJhdGlvblRyYWNrZXIgbWF4RHVyYXRpb25U
cmFja2VyKCZtX21heE1vdXNlTW92ZWREdXJhdGlvbik7CiAKKyAgICBQYWdlKiBwYWdlID0gbV9m
cmFtZS5wYWdlKCk7CisgICAgaWYgKHBhZ2UgJiYgcGFnZS0+cGFnZU92ZXJsYXlDb250cm9sbGVy
KCkuaGFuZGxlTW91c2VFdmVudChldmVudCkpCisgICAgICAgIHJldHVybiB0cnVlOworCiAgICAg
SGl0VGVzdFJlc3VsdCBob3ZlcmVkTm9kZSA9IEhpdFRlc3RSZXN1bHQoTGF5b3V0UG9pbnQoKSk7
CiAgICAgYm9vbCByZXN1bHQgPSBoYW5kbGVNb3VzZU1vdmVFdmVudChldmVudCwgJmhvdmVyZWRO
b2RlKTsKIAotICAgIFBhZ2UqIHBhZ2UgPSBtX2ZyYW1lLnBhZ2UoKTsKICAgICBpZiAoIXBhZ2Up
CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAKQEAgLTIwMjAsNiArMjAyOCwxMCBAQCBib29sIEV2
ZW50SGFuZGxlcjo6aGFuZGxlTW91c2VSZWxlYXNlRXZlbnQoY29uc3QgUGxhdGZvcm1Nb3VzZUV2
ZW50JiBwbGF0Zm9ybU1vdQogCiAgICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5zZXRDYXJldEJsaW5r
aW5nU3VzcGVuZGVkKGZhbHNlKTsKIAorICAgIFBhZ2UqIHBhZ2UgPSBtX2ZyYW1lLnBhZ2UoKTsK
KyAgICBpZiAocGFnZSAmJiBwYWdlLT5wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKS5oYW5kbGVNb3Vz
ZUV2ZW50KHBsYXRmb3JtTW91c2VFdmVudCkpCisgICAgICAgIHJldHVybiB0cnVlOworCiAjaWYg
RU5BQkxFKFRPVUNIX0VWRU5UUykKICAgICBib29sIGRlZmF1bHRQcmV2ZW50ZWQgPSBkaXNwYXRj
aFN5bnRoZXRpY1RvdWNoRXZlbnRJZkVuYWJsZWQocGxhdGZvcm1Nb3VzZUV2ZW50KTsKICAgICBp
ZiAoZGVmYXVsdFByZXZlbnRlZCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJh
bWVWaWV3LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAppbmRleCBkZjZm
ZWU0Li41MDlmNTQxYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcApAQCAtNjAsNiArNjAs
NyBAQAogI2luY2x1ZGUgIk1lbW9yeUNhY2hlLmgiCiAjaW5jbHVkZSAiTWVtb3J5UHJlc3N1cmVI
YW5kbGVyLmgiCiAjaW5jbHVkZSAiT3ZlcmZsb3dFdmVudC5oIgorI2luY2x1ZGUgIlBhZ2VPdmVy
bGF5Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIlByb2dyZXNzVHJhY2tlci5oIgogI2luY2x1ZGUg
IlJlbmRlckVtYmVkZGVkT2JqZWN0LmgiCiAjaW5jbHVkZSAiUmVuZGVyRnVsbFNjcmVlbi5oIgpA
QCAtNDMwLDEwICs0MzEsMTEgQEAgdm9pZCBGcmFtZVZpZXc6OnNldEZyYW1lUmVjdChjb25zdCBJ
bnRSZWN0JiBuZXdSZWN0KQogICAgIGlmIChuZXdSZWN0ID09IG9sZFJlY3QpCiAgICAgICAgIHJl
dHVybjsKIAorICAgIFBhZ2UqIHBhZ2UgPSBmcmFtZSgpLnBhZ2UoKTsKKwogI2lmIEVOQUJMRShU
RVhUX0FVVE9TSVpJTkcpCiAgICAgLy8gQXV0b3NpemVkIGZvbnQgc2l6ZXMgZGVwZW5kIG9uIHRo
ZSB3aWR0aCBvZiB0aGUgdmlld2luZyBhcmVhLgogICAgIGlmIChuZXdSZWN0LndpZHRoKCkgIT0g
b2xkUmVjdC53aWR0aCgpKSB7Ci0gICAgICAgIFBhZ2UqIHBhZ2UgPSBmcmFtZSgpLnBhZ2UoKTsK
ICAgICAgICAgaWYgKGZyYW1lKCkuaXNNYWluRnJhbWUoKSAmJiBwYWdlLT5zZXR0aW5ncygpLnRl
eHRBdXRvc2l6aW5nRW5hYmxlZCgpKSB7CiAgICAgICAgICAgICBmb3IgKEZyYW1lKiBmcmFtZSA9
ICZwYWdlLT5tYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJz
ZU5leHQoKSkKICAgICAgICAgICAgICAgICBmcmFtZSgpLmRvY3VtZW50KCktPnRleHRBdXRvc2l6
ZXIoKS0+cmVjYWxjdWxhdGVNdWx0aXBsaWVycygpOwpAQCAtNDQ5LDYgKzQ1MSw5IEBAIHZvaWQg
RnJhbWVWaWV3OjpzZXRGcmFtZVJlY3QoY29uc3QgSW50UmVjdCYgbmV3UmVjdCkKICAgICAgICAg
aWYgKHJlbmRlclZpZXctPnVzZXNDb21wb3NpdGluZygpKQogICAgICAgICAgICAgcmVuZGVyVmll
dy0+Y29tcG9zaXRvcigpLmZyYW1lVmlld0RpZENoYW5nZVNpemUoKTsKICAgICB9CisKKyAgICBp
ZiAoZnJhbWUoKS5pc01haW5GcmFtZSgpKQorICAgICAgICBwYWdlLT5wYWdlT3ZlcmxheUNvbnRy
b2xsZXIoKS5kaWRDaGFuZ2VWaWV3U2l6ZSgpOwogfQogCiAjaWYgRU5BQkxFKFJFUVVFU1RfQU5J
TUFUSU9OX0ZSQU1FKQpAQCAtNTYyLDYgKzU2Nyw5IEBAIHZvaWQgRnJhbWVWaWV3OjpzZXRDb250
ZW50c1NpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkKIAogICAgIHBhZ2UtPmNocm9tZSgpLmNvbnRl
bnRzU2l6ZUNoYW5nZWQoJmZyYW1lKCksIHNpemUpOyAvLyBOb3RpZnkgb25seS4KIAorICAgIGlm
IChmcmFtZSgpLmlzTWFpbkZyYW1lKCkpCisgICAgICAgIHBhZ2UtPnBhZ2VPdmVybGF5Q29udHJv
bGxlcigpLmRpZENoYW5nZURvY3VtZW50U2l6ZSgpOworCiAgICAgQVNTRVJUKG1fZGVmZXJTZXRO
ZWVkc0xheW91dHMpOwogICAgIG1fZGVmZXJTZXROZWVkc0xheW91dHMtLTsKICAgICAKQEAgLTIw
NDgsNyArMjA1Niw3IEBAIHZvaWQgRnJhbWVWaWV3OjpzZXRGaXhlZFZpc2libGVDb250ZW50UmVj
dChjb25zdCBJbnRSZWN0JiB2aXNpYmxlQ29udGVudFJlY3QpCiAgICAgICAgIC8vIFVwZGF0ZSB0
aGUgc2Nyb2xsLWJhcnMgdG8gY2FsY3VsYXRlIG5ldyBwYWdlLXN0ZXAgc2l6ZS4KICAgICAgICAg
dXBkYXRlU2Nyb2xsYmFycyhzY3JvbGxPZmZzZXQoKSk7CiAgICAgfQotICAgIGZyYW1lKCkubG9h
ZGVyKCkuY2xpZW50KCkuZGlkQ2hhbmdlU2Nyb2xsT2Zmc2V0KCk7CisgICAgZGlkQ2hhbmdlU2Ny
b2xsT2Zmc2V0KCk7CiB9CiAjZW5kaWYKIApAQCAtMjA2MSw2ICsyMDY5LDE0IEBAIHZvaWQgRnJh
bWVWaWV3OjpzZXRWaWV3cG9ydENvbnN0cmFpbmVkT2JqZWN0c05lZWRMYXlvdXQoKQogICAgICAg
ICByZW5kZXJlci0+c2V0TmVlZHNMYXlvdXQoKTsKIH0KIAordm9pZCBGcmFtZVZpZXc6OmRpZENo
YW5nZVNjcm9sbE9mZnNldCgpCit7CisgICAgaWYgKFBhZ2UqIHBhZ2UgPSBmcmFtZSgpLnBhZ2Uo
KSkKKyAgICAgICAgcGFnZS0+cGFnZU92ZXJsYXlDb250cm9sbGVyKCkuZGlkU2Nyb2xsRnJhbWUo
ZnJhbWUoKSk7CisKKyAgICBmcmFtZSgpLmxvYWRlcigpLmNsaWVudCgpLmRpZENoYW5nZVNjcm9s
bE9mZnNldCgpOworfQorCiB2b2lkIEZyYW1lVmlldzo6c2Nyb2xsUG9zaXRpb25DaGFuZ2VkVmlh
UGxhdGZvcm1XaWRnZXQoY29uc3QgSW50UG9pbnQmIG9sZFBvc2l0aW9uLCBjb25zdCBJbnRQb2lu
dCYgbmV3UG9zaXRpb24pCiB7CiAgICAgdXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNjcm9sbGlu
ZygpOwpAQCAtMzIyMyw3ICszMjM5LDcgQEAgdm9pZCBGcmFtZVZpZXc6OnNjcm9sbFRvKGNvbnN0
IEludFNpemUmIG5ld09mZnNldCkKICAgICBTY3JvbGxWaWV3OjpzY3JvbGxUbyhuZXdPZmZzZXQp
OwogICAgIGlmIChvZmZzZXQgIT0gc2Nyb2xsT2Zmc2V0KCkpCiAgICAgICAgIHNjcm9sbFBvc2l0
aW9uQ2hhbmdlZChvbGRQb3NpdGlvbiwgc2Nyb2xsUG9zaXRpb24oKSk7Ci0gICAgZnJhbWUoKS5s
b2FkZXIoKS5jbGllbnQoKS5kaWRDaGFuZ2VTY3JvbGxPZmZzZXQoKTsKKyAgICBkaWRDaGFuZ2VT
Y3JvbGxPZmZzZXQoKTsKIH0KIAogZmxvYXQgRnJhbWVWaWV3OjphZGp1c3RTY3JvbGxTdGVwRm9y
Rml4ZWRDb250ZW50KGZsb2F0IHN0ZXAsIFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9u
LCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSkKQEAgLTQyOTIsNyArNDMwOCw3IEBAIGJv
b2wgRnJhbWVWaWV3Ojp3aGVlbEV2ZW50KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYgd2hlZWxF
dmVudCkKICAgICAgICAgaWYgKG9mZnNldCAhPSBuZXdPZmZzZXQpIHsKICAgICAgICAgICAgIFNj
cm9sbFZpZXc6OnNjcm9sbFRvKG5ld09mZnNldCk7CiAgICAgICAgICAgICBzY3JvbGxQb3NpdGlv
bkNoYW5nZWQob2xkUG9zaXRpb24sIHNjcm9sbFBvc2l0aW9uKCkpOwotICAgICAgICAgICAgZnJh
bWUoKS5sb2FkZXIoKS5jbGllbnQoKS5kaWRDaGFuZ2VTY3JvbGxPZmZzZXQoKTsKKyAgICAgICAg
ICAgIGRpZENoYW5nZVNjcm9sbE9mZnNldCgpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiB0
cnVlOwogICAgIH0KQEAgLTQ2MTUsNiArNDYzMSw5IEBAIHZvaWQgRnJhbWVWaWV3OjpzZXRFeHBv
c2VkUmVjdChGbG9hdFJlY3QgZXhwb3NlZFJlY3QpCiAKICAgICBpZiAoYXV0byogdmlldyA9IHJl
bmRlclZpZXcoKSkKICAgICAgICAgdmlldy0+Y29tcG9zaXRvcigpLnNjaGVkdWxlTGF5ZXJGbHVz
aChmYWxzZSAvKiBjYW5UaHJvdHRsZSAqLyk7CisKKyAgICBpZiAoYXV0byogcGFnZSA9IGZyYW1l
KCkucGFnZSgpKQorICAgICAgICBwYWdlLT5wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKS5kaWRDaGFu
Z2VFeHBvc2VkUmVjdCgpOwogfQogICAgIAogdm9pZCBGcmFtZVZpZXc6OnNldFZpZXdwb3J0U2l6
ZUZvckNTU1ZpZXdwb3J0VW5pdHMoSW50U2l6ZSBzaXplKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGFnZS9GcmFtZVZpZXcuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmgK
aW5kZXggMzc1Njk2YS4uOTJhYTliOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9G
cmFtZVZpZXcuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5oCkBAIC01MTEs
NiArNTExLDggQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBmbG9hdCBhZGp1c3RTY3JvbGxTdGVw
Rm9yRml4ZWRDb250ZW50KGZsb2F0IHN0ZXAsIFNjcm9sbGJhck9yaWVudGF0aW9uLCBTY3JvbGxH
cmFudWxhcml0eSkgb3ZlcnJpZGU7CiAKKyAgICB2b2lkIGRpZENoYW5nZVNjcm9sbE9mZnNldCgp
OworCiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCBib29sIHNjcm9sbENvbnRlbnRzRmFzdFBhdGgo
Y29uc3QgSW50U2l6ZSYgc2Nyb2xsRGVsdGEsIGNvbnN0IEludFJlY3QmIHJlY3RUb1Njcm9sbCwg
Y29uc3QgSW50UmVjdCYgY2xpcFJlY3QpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBzY3Jv
bGxDb250ZW50c1Nsb3dQYXRoKGNvbnN0IEludFJlY3QmIHVwZGF0ZVJlY3QpIG92ZXJyaWRlOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvUGFnZS5jcHAKaW5kZXggMjZiOGQxNy4uNTM4ZGZkNCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGFnZS9QYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3Bw
CkBAIC02MCw2ICs2MCw3IEBACiAjaW5jbHVkZSAiUGFnZUNvbnNvbGVDbGllbnQuaCIKICNpbmNs
dWRlICJQYWdlRGVidWdnYWJsZS5oIgogI2luY2x1ZGUgIlBhZ2VHcm91cC5oIgorI2luY2x1ZGUg
IlBhZ2VPdmVybGF5Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIlBhZ2VUaHJvdHRsZXIuaCIKICNp
bmNsdWRlICJQbHVnSW5DbGllbnQuaCIKICNpbmNsdWRlICJQbHVnaW5EYXRhLmgiCkBAIC0yMDMs
NiArMjA0LDcgQEAgUGFnZTo6UGFnZShQYWdlQ2xpZW50cyYgcGFnZUNsaWVudHMpCiAgICAgLCBt
X3Zpc2l0ZWRMaW5rU3RvcmUoV1RGOjptb3ZlKHBhZ2VDbGllbnRzLnZpc2l0ZWRMaW5rU3RvcmUp
KQogICAgICwgbV9zZXNzaW9uSUQoU2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpCiAgICAg
LCBtX2lzQ2xvc2luZyhmYWxzZSkKKyAgICAsIG1fcGFnZU92ZXJsYXlDb250cm9sbGVyKHN0ZDo6
bWFrZV91bmlxdWU8UGFnZU92ZXJsYXlDb250cm9sbGVyPigqdGhpcykpCiB7CiAgICAgQVNTRVJU
KG1fZWRpdG9yQ2xpZW50KTsKICAgICAKQEAgLTgxMSw2ICs4MTMsOCBAQCB2b2lkIFBhZ2U6OnNl
dERldmljZVNjYWxlRmFjdG9yKGZsb2F0IHNjYWxlRmFjdG9yKQogCiAgICAgcGFnZUNhY2hlKCkt
Pm1hcmtQYWdlc0ZvckZ1bGxTdHlsZVJlY2FsYyh0aGlzKTsKICAgICBHcmFwaGljc0NvbnRleHQ6
OnVwZGF0ZURvY3VtZW50TWFya2VyUmVzb3VyY2VzKCk7CisKKyAgICBtX3BhZ2VPdmVybGF5Q29u
dHJvbGxlci0+ZGlkQ2hhbmdlRGV2aWNlU2NhbGVGYWN0b3IoKTsKIH0KIAogdm9pZCBQYWdlOjpz
ZXRUb3BDb250ZW50SW5zZXQoZmxvYXQgY29udGVudEluc2V0KQpAQCAtMTYxOCw3ICsxNjIyLDYg
QEAgdm9pZCBQYWdlOjpzZXRTZXNzaW9uSUQoU2Vzc2lvbklEIHNlc3Npb25JRCkKIAogICAgIGZv
ciAoYXV0byYgdmlldyA6IHBsdWdpblZpZXdzKCkpCiAgICAgICAgIHZpZXctPnByaXZhdGVCcm93
c2luZ1N0YXRlQ2hhbmdlZChzZXNzaW9uSUQuaXNFcGhlbWVyYWwoKSk7Ci0KIH0KIAogUGFnZTo6
UGFnZUNsaWVudHM6OlBhZ2VDbGllbnRzKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvUGFnZS5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmgKaW5kZXggODZmMmFmZC4uNjk3
MDBmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9QYWdlLmgKQEAgLTg0LDYgKzg0LDcgQEAgY2xhc3MgUGFnZUFjdGl2aXR5
QXNzZXJ0aW9uVG9rZW47CiBjbGFzcyBQYWdlQ29uc29sZUNsaWVudDsKIGNsYXNzIFBhZ2VEZWJ1
Z2dhYmxlOwogY2xhc3MgUGFnZUdyb3VwOworY2xhc3MgUGFnZU92ZXJsYXlDb250cm9sbGVyOwog
Y2xhc3MgUGFnZVRocm90dGxlcjsKIGNsYXNzIFBsdWdJbkNsaWVudDsKIGNsYXNzIFBsdWdpbkRh
dGE7CkBAIC0xNjgsNiArMTY5LDggQEAgcHVibGljOgogICAgIE1haW5GcmFtZSYgbWFpbkZyYW1l
KCkgeyBBU1NFUlQobV9tYWluRnJhbWUpOyByZXR1cm4gKm1fbWFpbkZyYW1lOyB9CiAgICAgY29u
c3QgTWFpbkZyYW1lJiBtYWluRnJhbWUoKSBjb25zdCB7IEFTU0VSVChtX21haW5GcmFtZSk7IHJl
dHVybiAqbV9tYWluRnJhbWU7IH0KIAorICAgIFBhZ2VPdmVybGF5Q29udHJvbGxlciYgcGFnZU92
ZXJsYXlDb250cm9sbGVyKCkgeyByZXR1cm4gKm1fcGFnZU92ZXJsYXlDb250cm9sbGVyOyB9CisK
ICAgICBib29sIG9wZW5lZEJ5RE9NKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRPcGVuZWRCeURPTSgp
OwogCkBAIC01OTEsNiArNTk0LDggQEAgcHJpdmF0ZToKICAgICBTZXNzaW9uSUQgbV9zZXNzaW9u
SUQ7CiAKICAgICBib29sIG1faXNDbG9zaW5nOworCisgICAgc3RkOjp1bmlxdWVfcHRyPFBhZ2VP
dmVybGF5Q29udHJvbGxlcj4gbV9wYWdlT3ZlcmxheUNvbnRyb2xsZXI7CiB9OwogCiBpbmxpbmUg
UGFnZUdyb3VwJiBQYWdlOjpncm91cCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdl
L1BhZ2VPdmVybGF5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZU92ZXJsYXkuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhOWQ5N2MKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VPdmVybGF5LmNwcApAQCAtMCwwICsxLDI1NyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQYWdlT3Zlcmxh
eS5oIgorCisjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
LmgiCisjaW5jbHVkZSAiTWFpbkZyYW1lLmgiCisjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUg
IlBhZ2VPdmVybGF5Q29udHJvbGxlci5oIgorI2luY2x1ZGUgIlBsYXRmb3JtTW91c2VFdmVudC5o
IgorI2luY2x1ZGUgIlNjcm9sbGJhclRoZW1lLmgiCisjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1l
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGNvbnN0IGRvdWJsZSBmYWRlQW5p
bWF0aW9uRHVyYXRpb24gPSAwLjI7CitzdGF0aWMgY29uc3QgZG91YmxlIGZhZGVBbmltYXRpb25G
cmFtZVJhdGUgPSAzMDsKKworUGFzc1JlZlB0cjxQYWdlT3ZlcmxheT4gUGFnZU92ZXJsYXk6OmNy
ZWF0ZShDbGllbnQmIGNsaWVudCwgT3ZlcmxheVR5cGUgb3ZlcmxheVR5cGUpCit7CisgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBQYWdlT3ZlcmxheShjbGllbnQsIG92ZXJsYXlUeXBlKSk7Cit9CisK
K1BhZ2VPdmVybGF5OjpQYWdlT3ZlcmxheShDbGllbnQmIGNsaWVudCwgT3ZlcmxheVR5cGUgb3Zl
cmxheVR5cGUpCisgICAgOiBtX2NsaWVudChjbGllbnQpCisgICAgLCBtX3BhZ2UobnVsbHB0cikK
KyAgICAsIG1fZmFkZUFuaW1hdGlvblRpbWVyKFJ1bkxvb3A6Om1haW4oKSwgdGhpcywgJlBhZ2VP
dmVybGF5OjpmYWRlQW5pbWF0aW9uVGltZXJGaXJlZCkKKyAgICAsIG1fZmFkZUFuaW1hdGlvblN0
YXJ0VGltZSgwKQorICAgICwgbV9mYWRlQW5pbWF0aW9uRHVyYXRpb24oZmFkZUFuaW1hdGlvbkR1
cmF0aW9uKQorICAgICwgbV9mYWRlQW5pbWF0aW9uVHlwZShOb0FuaW1hdGlvbikKKyAgICAsIG1f
ZnJhY3Rpb25GYWRlZEluKDEpCisgICAgLCBtX292ZXJsYXlUeXBlKG92ZXJsYXlUeXBlKQorICAg
ICwgbV9iYWNrZ3JvdW5kQ29sb3IoQ29sb3I6OnRyYW5zcGFyZW50KQoreworfQorCitQYWdlT3Zl
cmxheTo6flBhZ2VPdmVybGF5KCkKK3sKK30KKworSW50UmVjdCBQYWdlT3ZlcmxheTo6Ym91bmRz
KCkgY29uc3QKK3sKKyAgICBpZiAoIW1fb3ZlcnJpZGVGcmFtZS5pc0VtcHR5KCkpCisgICAgICAg
IHJldHVybiBJbnRSZWN0KEludFBvaW50KCksIG1fb3ZlcnJpZGVGcmFtZS5zaXplKCkpOworCisg
ICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBtX3BhZ2UtPm1haW5GcmFtZSgpLnZpZXcoKTsKKwor
ICAgIGlmICghZnJhbWVWaWV3KQorICAgICAgICByZXR1cm4gSW50UmVjdCgpOworCisgICAgc3dp
dGNoIChtX292ZXJsYXlUeXBlKSB7CisgICAgY2FzZSBPdmVybGF5VHlwZTo6VmlldzogeworICAg
ICAgICBpbnQgd2lkdGggPSBmcmFtZVZpZXctPndpZHRoKCk7CisgICAgICAgIGludCBoZWlnaHQg
PSBmcmFtZVZpZXctPmhlaWdodCgpOworCisgICAgICAgIGlmICghU2Nyb2xsYmFyVGhlbWU6OnRo
ZW1lKCktPnVzZXNPdmVybGF5U2Nyb2xsYmFycygpKSB7CisgICAgICAgICAgICBpZiAoZnJhbWVW
aWV3LT52ZXJ0aWNhbFNjcm9sbGJhcigpKQorICAgICAgICAgICAgICAgIHdpZHRoIC09IGZyYW1l
Vmlldy0+dmVydGljYWxTY3JvbGxiYXIoKS0+d2lkdGgoKTsKKyAgICAgICAgICAgIGlmIChmcmFt
ZVZpZXctPmhvcml6b250YWxTY3JvbGxiYXIoKSkKKyAgICAgICAgICAgICAgICBoZWlnaHQgLT0g
ZnJhbWVWaWV3LT5ob3Jpem9udGFsU2Nyb2xsYmFyKCktPmhlaWdodCgpOworICAgICAgICB9Cisg
ICAgICAgIHJldHVybiBJbnRSZWN0KDAsIDAsIHdpZHRoLCBoZWlnaHQpOworICAgIH0KKyAgICBj
YXNlIE92ZXJsYXlUeXBlOjpEb2N1bWVudDoKKyAgICAgICAgcmV0dXJuIEludFJlY3QoSW50UG9p
bnQoKSwgZnJhbWVWaWV3LT5jb250ZW50c1NpemUoKSk7CisgICAgfTsKKworICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBJbnRSZWN0KEludFBvaW50KCksIGZyYW1lVmlldy0+
Y29udGVudHNTaXplKCkpOworfQorCitJbnRSZWN0IFBhZ2VPdmVybGF5OjpmcmFtZSgpIGNvbnN0
Cit7CisgICAgaWYgKCFtX292ZXJyaWRlRnJhbWUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4g
bV9vdmVycmlkZUZyYW1lOworCisgICAgcmV0dXJuIGJvdW5kcygpOworfQorCit2b2lkIFBhZ2VP
dmVybGF5OjpzZXRGcmFtZShJbnRSZWN0IGZyYW1lKQoreworICAgIGlmIChtX292ZXJyaWRlRnJh
bWUgPT0gZnJhbWUpCisgICAgICAgIHJldHVybjsKKworICAgIG1fb3ZlcnJpZGVGcmFtZSA9IGZy
YW1lOworCisgICAgaWYgKG1fcGFnZSkKKyAgICAgICAgbV9wYWdlLT5wYWdlT3ZlcmxheUNvbnRy
b2xsZXIoKS5kaWRDaGFuZ2VPdmVybGF5RnJhbWUoKnRoaXMpOworfQorCit2b2lkIFBhZ2VPdmVy
bGF5OjpzZXRCYWNrZ3JvdW5kQ29sb3IoUkdCQTMyIGJhY2tncm91bmRDb2xvcikKK3sKKyAgICBp
ZiAobV9iYWNrZ3JvdW5kQ29sb3IgPT0gYmFja2dyb3VuZENvbG9yKQorICAgICAgICByZXR1cm47
CisKKyAgICBtX2JhY2tncm91bmRDb2xvciA9IGJhY2tncm91bmRDb2xvcjsKKworICAgIGlmICht
X3BhZ2UpCisgICAgICAgIG1fcGFnZS0+cGFnZU92ZXJsYXlDb250cm9sbGVyKCkuZGlkQ2hhbmdl
T3ZlcmxheUJhY2tncm91bmRDb2xvcigqdGhpcyk7Cit9CisKK3ZvaWQgUGFnZU92ZXJsYXk6OnNl
dFBhZ2UoUGFnZSogcGFnZSkKK3sKKyAgICBtX2NsaWVudC53aWxsTW92ZVRvUGFnZSgqdGhpcywg
cGFnZSk7CisgICAgbV9wYWdlID0gcGFnZTsKKyAgICBtX2NsaWVudC5kaWRNb3ZlVG9QYWdlKCp0
aGlzLCBwYWdlKTsKKworICAgIG1fZmFkZUFuaW1hdGlvblRpbWVyLnN0b3AoKTsKK30KKwordm9p
ZCBQYWdlT3ZlcmxheTo6c2V0TmVlZHNEaXNwbGF5KGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCkK
K3sKKyAgICBpZiAoIW1fcGFnZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9wYWdlLT5wYWdl
T3ZlcmxheUNvbnRyb2xsZXIoKS5zZXRQYWdlT3ZlcmxheU9wYWNpdHkoKnRoaXMsIG1fZnJhY3Rp
b25GYWRlZEluKTsKKyAgICBtX3BhZ2UtPnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLnNldFBhZ2VP
dmVybGF5TmVlZHNEaXNwbGF5KCp0aGlzLCBkaXJ0eVJlY3QpOworfQorCit2b2lkIFBhZ2VPdmVy
bGF5OjpzZXROZWVkc0Rpc3BsYXkoKQoreworICAgIHNldE5lZWRzRGlzcGxheShib3VuZHMoKSk7
Cit9CisKK3ZvaWQgUGFnZU92ZXJsYXk6OmRyYXdSZWN0KEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhp
Y3NDb250ZXh0LCBjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpCit7CisgICAgLy8gSWYgdGhlIGRp
cnR5IHJlY3QgaXMgb3V0c2lkZSB0aGUgYm91bmRzLCBpZ25vcmUgaXQuCisgICAgSW50UmVjdCBw
YWludFJlY3QgPSBpbnRlcnNlY3Rpb24oZGlydHlSZWN0LCBib3VuZHMoKSk7CisgICAgaWYgKHBh
aW50UmVjdC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIEdyYXBoaWNzQ29udGV4
dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihncmFwaGljc0NvbnRleHQpOworICAgIG1fY2xpZW50LmRy
YXdSZWN0KCp0aGlzLCBncmFwaGljc0NvbnRleHQsIHBhaW50UmVjdCk7Cit9CisgICAgCitib29s
IFBhZ2VPdmVybGF5Ojptb3VzZUV2ZW50KGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgbW91c2VF
dmVudCkKK3sKKyAgICBJbnRQb2ludCBtb3VzZVBvc2l0aW9uSW5PdmVybGF5Q29vcmRpbmF0ZXMo
bW91c2VFdmVudC5wb3NpdGlvbigpKTsKKworICAgIGlmIChtX292ZXJsYXlUeXBlID09IFBhZ2VP
dmVybGF5OjpPdmVybGF5VHlwZTo6RG9jdW1lbnQpCisgICAgICAgIG1vdXNlUG9zaXRpb25Jbk92
ZXJsYXlDb29yZGluYXRlcyA9IG1fcGFnZS0+bWFpbkZyYW1lKCkudmlldygpLT5yb290Vmlld1Rv
Q29udGVudHMobW91c2VQb3NpdGlvbkluT3ZlcmxheUNvb3JkaW5hdGVzKTsKKworICAgIC8vIEln
bm9yZSBldmVudHMgb3V0c2lkZSB0aGUgYm91bmRzLgorICAgIGlmICghYm91bmRzKCkuY29udGFp
bnMobW91c2VQb3NpdGlvbkluT3ZlcmxheUNvb3JkaW5hdGVzKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgcmV0dXJuIG1fY2xpZW50Lm1vdXNlRXZlbnQoKnRoaXMsIG1vdXNlRXZlbnQp
OworfQorCit2b2lkIFBhZ2VPdmVybGF5OjpkaWRTY3JvbGxGcmFtZShGcmFtZSYgZnJhbWUpCit7
CisgICAgbV9jbGllbnQuZGlkU2Nyb2xsRnJhbWUoKnRoaXMsIGZyYW1lKTsKK30KKworYm9vbCBQ
YWdlT3ZlcmxheTo6Y29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVTdHJpbmdWYWx1ZUZvclBvaW50
KFN0cmluZyBhdHRyaWJ1dGUsIEZsb2F0UG9pbnQgcGFyYW1ldGVyLCBTdHJpbmcmIHZhbHVlKQor
eworICAgIHJldHVybiBtX2NsaWVudC5jb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVN0cmluZ1Zh
bHVlRm9yUG9pbnQoKnRoaXMsIGF0dHJpYnV0ZSwgcGFyYW1ldGVyLCB2YWx1ZSk7Cit9CisKK2Jv
b2wgUGFnZU92ZXJsYXk6OmNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlQm9vbFZhbHVlRm9yUG9p
bnQoU3RyaW5nIGF0dHJpYnV0ZSwgRmxvYXRQb2ludCBwYXJhbWV0ZXIsIGJvb2wmIHZhbHVlKQor
eworICAgIHJldHVybiBtX2NsaWVudC5jb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZUJvb2xWYWx1
ZUZvclBvaW50KCp0aGlzLCBhdHRyaWJ1dGUsIHBhcmFtZXRlciwgdmFsdWUpOworfQorCitWZWN0
b3I8U3RyaW5nPiBQYWdlT3ZlcmxheTo6Y29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVOYW1lcyhi
b29sIHBhcmFtZXRlcml6ZWROYW1lcykKK3sKKyAgICByZXR1cm4gbV9jbGllbnQuY29weUFjY2Vz
c2liaWxpdHlBdHRyaWJ1dGVOYW1lcygqdGhpcywgcGFyYW1ldGVyaXplZE5hbWVzKTsKK30KKwor
dm9pZCBQYWdlT3ZlcmxheTo6c3RhcnRGYWRlSW5BbmltYXRpb24oKQoreworICAgIG1fZnJhY3Rp
b25GYWRlZEluID0gMDsKKyAgICBtX2ZhZGVBbmltYXRpb25UeXBlID0gRmFkZUluQW5pbWF0aW9u
OworCisgICAgc3RhcnRGYWRlQW5pbWF0aW9uKCk7Cit9CisKK3ZvaWQgUGFnZU92ZXJsYXk6OnN0
YXJ0RmFkZU91dEFuaW1hdGlvbigpCit7CisgICAgbV9mcmFjdGlvbkZhZGVkSW4gPSAxOworICAg
IG1fZmFkZUFuaW1hdGlvblR5cGUgPSBGYWRlT3V0QW5pbWF0aW9uOworCisgICAgc3RhcnRGYWRl
QW5pbWF0aW9uKCk7Cit9CisKK3ZvaWQgUGFnZU92ZXJsYXk6OnN0b3BGYWRlT3V0QW5pbWF0aW9u
KCkKK3sKKyAgICBtX2ZyYWN0aW9uRmFkZWRJbiA9IDEuMDsKKyAgICBtX2ZhZGVBbmltYXRpb25U
aW1lci5zdG9wKCk7Cit9CisKK3ZvaWQgUGFnZU92ZXJsYXk6OnN0YXJ0RmFkZUFuaW1hdGlvbigp
Cit7CisgICAgbV9mYWRlQW5pbWF0aW9uU3RhcnRUaW1lID0gY3VycmVudFRpbWUoKTsKKyAgICBt
X2ZhZGVBbmltYXRpb25UaW1lci5zdGFydFJlcGVhdGluZygxIC8gZmFkZUFuaW1hdGlvbkZyYW1l
UmF0ZSk7Cit9CisKK3ZvaWQgUGFnZU92ZXJsYXk6OmZhZGVBbmltYXRpb25UaW1lckZpcmVkKCkK
K3sKKyAgICBmbG9hdCBhbmltYXRpb25Qcm9ncmVzcyA9IChjdXJyZW50VGltZSgpIC0gbV9mYWRl
QW5pbWF0aW9uU3RhcnRUaW1lKSAvIG1fZmFkZUFuaW1hdGlvbkR1cmF0aW9uOworCisgICAgaWYg
KGFuaW1hdGlvblByb2dyZXNzID49IDEuMCkKKyAgICAgICAgYW5pbWF0aW9uUHJvZ3Jlc3MgPSAx
LjA7CisKKyAgICBkb3VibGUgc2luZSA9IHNpbihwaU92ZXJUd29GbG9hdCAqIGFuaW1hdGlvblBy
b2dyZXNzKTsKKyAgICBmbG9hdCBmYWRlQW5pbWF0aW9uVmFsdWUgPSBzaW5lICogc2luZTsKKwor
ICAgIG1fZnJhY3Rpb25GYWRlZEluID0gKG1fZmFkZUFuaW1hdGlvblR5cGUgPT0gRmFkZUluQW5p
bWF0aW9uKSA/IGZhZGVBbmltYXRpb25WYWx1ZSA6IDEgLSBmYWRlQW5pbWF0aW9uVmFsdWU7Cisg
ICAgbV9wYWdlLT5wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKS5zZXRQYWdlT3ZlcmxheU9wYWNpdHko
KnRoaXMsIG1fZnJhY3Rpb25GYWRlZEluKTsKKworICAgIGlmIChhbmltYXRpb25Qcm9ncmVzcyA9
PSAxLjApIHsKKyAgICAgICAgbV9mYWRlQW5pbWF0aW9uVGltZXIuc3RvcCgpOworCisgICAgICAg
IGJvb2wgd2FzRmFkaW5nT3V0ID0gbV9mYWRlQW5pbWF0aW9uVHlwZSA9PSBGYWRlT3V0QW5pbWF0
aW9uOworICAgICAgICBtX2ZhZGVBbmltYXRpb25UeXBlID0gTm9BbmltYXRpb247CisKKyAgICAg
ICAgLy8gSWYgdGhpcyB3YXMgYSBmYWRlIG91dCwgZ28gYWhlYWQgYW5kIHVuaW5zdGFsbCB0aGUg
cGFnZSBvdmVybGF5LgorICAgICAgICBpZiAod2FzRmFkaW5nT3V0KQorICAgICAgICAgICAgbV9w
YWdlLT5wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKS51bmluc3RhbGxQYWdlT3ZlcmxheSh0aGlzLCBQ
YWdlT3ZlcmxheTo6RmFkZU1vZGU6OkRvTm90RmFkZSk7CisgICAgfQorfQorCit2b2lkIFBhZ2VP
dmVybGF5OjpjbGVhcigpCit7CisgICAgbV9wYWdlLT5wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKS5j
bGVhclBhZ2VPdmVybGF5KCp0aGlzKTsKK30KKworR3JhcGhpY3NMYXllciYgUGFnZU92ZXJsYXk6
OmxheWVyKCkKK3sKKyAgICByZXR1cm4gbV9wYWdlLT5wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKS5s
YXllckZvck92ZXJsYXkoKnRoaXMpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZU92ZXJsYXkuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvUGFnZU92ZXJsYXkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40
MWJmN2Y2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlT3Zlcmxh
eS5oCkBAIC0wLDAgKzEsMTM4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBQYWdlT3ZlcmxheV9o
CisjZGVmaW5lIFBhZ2VPdmVybGF5X2gKKworI2luY2x1ZGUgIkNvbG9yLmgiCisjaW5jbHVkZSAi
RmxvYXRQb2ludC5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlIDx3dGYvUGFzc1Jl
ZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1J1bkxv
b3AuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitjbGFzcyBGcmFtZTsKK2NsYXNzIEdyYXBoaWNzQ29udGV4dDsKK2NsYXNzIEdyYXBo
aWNzTGF5ZXI7CitjbGFzcyBQYWdlOworY2xhc3MgUGxhdGZvcm1Nb3VzZUV2ZW50OworCitjbGFz
cyBQYWdlT3ZlcmxheSBmaW5hbCA6IHB1YmxpYyBSZWZDb3VudGVkPFBhZ2VPdmVybGF5PiB7Cisg
ICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUGFnZU92ZXJsYXkpOworICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOworcHVibGljOgorICAgIGNsYXNzIENsaWVudCB7CisgICAgcHJvdGVjdGVkOgor
ICAgICAgICB2aXJ0dWFsIH5DbGllbnQoKSB7IH0KKyAgICAKKyAgICBwdWJsaWM6CisgICAgICAg
IHZpcnR1YWwgdm9pZCBwYWdlT3ZlcmxheURlc3Ryb3llZChQYWdlT3ZlcmxheSYpID0gMDsKKyAg
ICAgICAgdmlydHVhbCB2b2lkIHdpbGxNb3ZlVG9QYWdlKFBhZ2VPdmVybGF5JiwgUGFnZSopID0g
MDsKKyAgICAgICAgdmlydHVhbCB2b2lkIGRpZE1vdmVUb1BhZ2UoUGFnZU92ZXJsYXkmLCBQYWdl
KikgPSAwOworICAgICAgICB2aXJ0dWFsIHZvaWQgZHJhd1JlY3QoUGFnZU92ZXJsYXkmLCBHcmFw
aGljc0NvbnRleHQmLCBjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpID0gMDsKKyAgICAgICAgdmly
dHVhbCBib29sIG1vdXNlRXZlbnQoUGFnZU92ZXJsYXkmLCBjb25zdCBQbGF0Zm9ybU1vdXNlRXZl
bnQmKSA9IDA7CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRTY3JvbGxGcmFtZShQYWdlT3Zlcmxh
eSYsIEZyYW1lJikgeyB9CisKKyAgICAgICAgdmlydHVhbCBib29sIGNvcHlBY2Nlc3NpYmlsaXR5
QXR0cmlidXRlU3RyaW5nVmFsdWVGb3JQb2ludChQYWdlT3ZlcmxheSYsIFN0cmluZyAvKiBhdHRy
aWJ1dGUgKi8sIEZsb2F0UG9pbnQsIFN0cmluZyYpIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgICAg
IHZpcnR1YWwgYm9vbCBjb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZUJvb2xWYWx1ZUZvclBvaW50
KFBhZ2VPdmVybGF5JiwgU3RyaW5nIC8qIGF0dHJpYnV0ZSAqLywgRmxvYXRQb2ludCwgYm9vbCYp
ICB7IHJldHVybiBmYWxzZTsgfQorICAgICAgICB2aXJ0dWFsIFZlY3RvcjxTdHJpbmc+IGNvcHlB
Y2Nlc3NpYmlsaXR5QXR0cmlidXRlTmFtZXMoUGFnZU92ZXJsYXkmLCBib29sIC8qIHBhcmFtZXRl
cml6ZWROYW1lcyAqLykgIHsgcmV0dXJuIFZlY3RvcjxTdHJpbmc+KCk7IH0KKyAgICB9OworCisg
ICAgZW51bSBjbGFzcyBPdmVybGF5VHlwZSB7CisgICAgICAgIFZpZXcsIC8vIEZpeGVkIHRvIHRo
ZSB2aWV3IHNpemU7IGRvZXMgbm90IHNjYWxlIG9yIHNjcm9sbCB3aXRoIHRoZSBkb2N1bWVudCwg
cmVwYWludHMgb24gc2Nyb2xsLgorICAgICAgICBEb2N1bWVudCwgLy8gU2NhbGVzIGFuZCBzY3Jv
bGxzIHdpdGggdGhlIGRvY3VtZW50LgorICAgIH07CisKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxQ
YWdlT3ZlcmxheT4gY3JlYXRlKENsaWVudCYsIE92ZXJsYXlUeXBlID0gT3ZlcmxheVR5cGU6OlZp
ZXcpOworICAgIHZpcnR1YWwgflBhZ2VPdmVybGF5KCk7CisKKyAgICB2b2lkIHNldFBhZ2UoUGFn
ZSopOworICAgIHZvaWQgc2V0TmVlZHNEaXNwbGF5KGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCk7
CisgICAgdm9pZCBzZXROZWVkc0Rpc3BsYXkoKTsKKworICAgIHZvaWQgZHJhd1JlY3QoR3JhcGhp
Y3NDb250ZXh0JiwgY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KTsKKyAgICBib29sIG1vdXNlRXZl
bnQoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50Jik7CisgICAgdm9pZCBkaWRTY3JvbGxGcmFtZShG
cmFtZSYpOworCisgICAgYm9vbCBjb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVN0cmluZ1ZhbHVl
Rm9yUG9pbnQoU3RyaW5nIGF0dHJpYnV0ZSwgRmxvYXRQb2ludCBwYXJhbWV0ZXIsIFN0cmluZyYg
dmFsdWUpOworICAgIGJvb2wgY29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVCb29sVmFsdWVGb3JQ
b2ludChTdHJpbmcgYXR0cmlidXRlLCBGbG9hdFBvaW50IHBhcmFtZXRlciwgYm9vbCYgdmFsdWUp
OworICAgIFZlY3RvcjxTdHJpbmc+IGNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlTmFtZXMoYm9v
bCBwYXJhbWV0ZXJpemVkTmFtZXMpOworICAgIAorICAgIHZvaWQgc3RhcnRGYWRlSW5BbmltYXRp
b24oKTsKKyAgICB2b2lkIHN0YXJ0RmFkZU91dEFuaW1hdGlvbigpOworICAgIHZvaWQgc3RvcEZh
ZGVPdXRBbmltYXRpb24oKTsKKworICAgIHZvaWQgY2xlYXIoKTsKKworICAgIENsaWVudCYgY2xp
ZW50KCkgY29uc3QgeyByZXR1cm4gbV9jbGllbnQ7IH0KKworICAgIGVudW0gY2xhc3MgRmFkZU1v
ZGUgeyBEb05vdEZhZGUsIEZhZGUgfTsKKworICAgIE92ZXJsYXlUeXBlIG92ZXJsYXlUeXBlKCkg
eyByZXR1cm4gbV9vdmVybGF5VHlwZTsgfQorCisgICAgSW50UmVjdCBib3VuZHMoKSBjb25zdDsK
KyAgICBJbnRSZWN0IGZyYW1lKCkgY29uc3Q7CisgICAgdm9pZCBzZXRGcmFtZShJbnRSZWN0KTsK
KworICAgIFJHQkEzMiBiYWNrZ3JvdW5kQ29sb3IoKSBjb25zdCB7IHJldHVybiBtX2JhY2tncm91
bmRDb2xvcjsgfQorICAgIHZvaWQgc2V0QmFja2dyb3VuZENvbG9yKFJHQkEzMik7CisKKyAgICAv
LyBGSVhNRTogUGFnZU92ZXJsYXkgc2hvdWxkIG93biBpdHMgbGF5ZXIsIGluc3RlYWQgb2YgUGFn
ZU92ZXJsYXlDb250cm9sbGVyLgorICAgIEdyYXBoaWNzTGF5ZXImIGxheWVyKCk7CisKK3ByaXZh
dGU6CisgICAgZXhwbGljaXQgUGFnZU92ZXJsYXkoQ2xpZW50JiwgT3ZlcmxheVR5cGUpOworCisg
ICAgdm9pZCBzdGFydEZhZGVBbmltYXRpb24oKTsKKyAgICB2b2lkIGZhZGVBbmltYXRpb25UaW1l
ckZpcmVkKCk7CisKKyAgICBDbGllbnQmIG1fY2xpZW50OworICAgIFBhZ2UqIG1fcGFnZTsKKwor
ICAgIFJ1bkxvb3A6OlRpbWVyPFBhZ2VPdmVybGF5PiBtX2ZhZGVBbmltYXRpb25UaW1lcjsKKyAg
ICBkb3VibGUgbV9mYWRlQW5pbWF0aW9uU3RhcnRUaW1lOworICAgIGRvdWJsZSBtX2ZhZGVBbmlt
YXRpb25EdXJhdGlvbjsKKworICAgIGVudW0gRmFkZUFuaW1hdGlvblR5cGUgeworICAgICAgICBO
b0FuaW1hdGlvbiwKKyAgICAgICAgRmFkZUluQW5pbWF0aW9uLAorICAgICAgICBGYWRlT3V0QW5p
bWF0aW9uLAorICAgIH07CisKKyAgICBGYWRlQW5pbWF0aW9uVHlwZSBtX2ZhZGVBbmltYXRpb25U
eXBlOworICAgIGZsb2F0IG1fZnJhY3Rpb25GYWRlZEluOworCisgICAgT3ZlcmxheVR5cGUgbV9v
dmVybGF5VHlwZTsKKyAgICBJbnRSZWN0IG1fb3ZlcnJpZGVGcmFtZTsKKworICAgIFJHQkEzMiBt
X2JhY2tncm91bmRDb2xvcjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYg
Ly8gUGFnZU92ZXJsYXlfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlT3Zl
cmxheUNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlT3ZlcmxheUNvbnRy
b2xsZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzZTJiNjcKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VPdmVybGF5Q29udHJvbGxl
ci5jcHAKQEAgLTAsMCArMSwzNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiUGFnZU92ZXJsYXlDb250cm9sbGVyLmgiCisKKyNpbmNsdWRlICJDaHJvbWUu
aCIKKyNpbmNsdWRlICJDaHJvbWVDbGllbnQuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1
ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUg
IkdyYXBoaWNzTGF5ZXIuaCIKKyNpbmNsdWRlICJNYWluRnJhbWUuaCIKKyNpbmNsdWRlICJQYWdl
LmgiCisjaW5jbHVkZSAiUGFnZU92ZXJsYXkuaCIKKyNpbmNsdWRlICJTY3JvbGxpbmdDb29yZGlu
YXRvci5oIgorI2luY2x1ZGUgIlNldHRpbmdzLmgiCisjaW5jbHVkZSAiVGlsZWRCYWNraW5nLmgi
CisKKy8vIEZJWE1FOiBTb21lb25lIG5lZWRzIHRvIGNhbGwgZGlkQ2hhbmdlU2V0dGluZ3MoKQor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1BhZ2VPdmVybGF5Q29udHJvbGxlcjo6UGFnZU92ZXJs
YXlDb250cm9sbGVyKFBhZ2UmIHBhZ2UpCisgICAgOiBtX2luaXRpYWxpemVkKGZhbHNlKQorICAg
ICwgbV9wYWdlKHBhZ2UpCit7Cit9CisKK3ZvaWQgUGFnZU92ZXJsYXlDb250cm9sbGVyOjpjcmVh
dGVSb290TGF5ZXJzSWZOZWVkZWQoKQoreworICAgIGlmIChtX2luaXRpYWxpemVkKQorICAgICAg
ICByZXR1cm47CisKKyAgICBtX2luaXRpYWxpemVkID0gdHJ1ZTsKKworICAgIEFTU0VSVCghbV9k
b2N1bWVudE92ZXJsYXlSb290TGF5ZXIpOworICAgIEFTU0VSVCghbV92aWV3T3ZlcmxheVJvb3RM
YXllcik7CisKKyAgICBtX2RvY3VtZW50T3ZlcmxheVJvb3RMYXllciA9IEdyYXBoaWNzTGF5ZXI6
OmNyZWF0ZShtX3BhZ2UuY2hyb21lKCkuY2xpZW50KCkuZ3JhcGhpY3NMYXllckZhY3RvcnkoKSwg
KnRoaXMpOworICAgIG1fdmlld092ZXJsYXlSb290TGF5ZXIgPSBHcmFwaGljc0xheWVyOjpjcmVh
dGUobV9wYWdlLmNocm9tZSgpLmNsaWVudCgpLmdyYXBoaWNzTGF5ZXJGYWN0b3J5KCksICp0aGlz
KTsKKyNpZm5kZWYgTkRFQlVHCisgICAgbV9kb2N1bWVudE92ZXJsYXlSb290TGF5ZXItPnNldE5h
bWUoIlBhZ2UgT3ZlcmxheSBjb250YWluZXIgKGRvY3VtZW50LXJlbGF0aXZlKSIpOworICAgIG1f
dmlld092ZXJsYXlSb290TGF5ZXItPnNldE5hbWUoIlBhZ2UgT3ZlcmxheSBjb250YWluZXIgKHZp
ZXctcmVsYXRpdmUpIik7CisjZW5kaWYKK30KKworR3JhcGhpY3NMYXllciYgUGFnZU92ZXJsYXlD
b250cm9sbGVyOjpkb2N1bWVudE92ZXJsYXlSb290TGF5ZXIoKQoreworICAgIGNyZWF0ZVJvb3RM
YXllcnNJZk5lZWRlZCgpOworICAgIHJldHVybiAqbV9kb2N1bWVudE92ZXJsYXlSb290TGF5ZXI7
Cit9CisKK0dyYXBoaWNzTGF5ZXImIFBhZ2VPdmVybGF5Q29udHJvbGxlcjo6dmlld092ZXJsYXlS
b290TGF5ZXIoKQoreworICAgIGNyZWF0ZVJvb3RMYXllcnNJZk5lZWRlZCgpOworICAgIHJldHVy
biAqbV92aWV3T3ZlcmxheVJvb3RMYXllcjsKK30KKworc3RhdGljIHZvaWQgdXBkYXRlT3Zlcmxh
eUdlb21ldHJ5KFBhZ2VPdmVybGF5JiBvdmVybGF5LCBHcmFwaGljc0xheWVyJiBncmFwaGljc0xh
eWVyKQoreworICAgIEludFJlY3Qgb3ZlcmxheUZyYW1lID0gb3ZlcmxheS5mcmFtZSgpOworCisg
ICAgaWYgKG92ZXJsYXlGcmFtZS5sb2NhdGlvbigpID09IGdyYXBoaWNzTGF5ZXIucG9zaXRpb24o
KSAmJiBvdmVybGF5RnJhbWUuc2l6ZSgpID09IGdyYXBoaWNzTGF5ZXIuc2l6ZSgpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBncmFwaGljc0xheWVyLnNldFBvc2l0aW9uKG92ZXJsYXlGcmFtZS5s
b2NhdGlvbigpKTsKKyAgICBncmFwaGljc0xheWVyLnNldFNpemUob3ZlcmxheUZyYW1lLnNpemUo
KSk7Cit9CisKK3ZvaWQgUGFnZU92ZXJsYXlDb250cm9sbGVyOjppbnN0YWxsUGFnZU92ZXJsYXko
UGFzc1JlZlB0cjxQYWdlT3ZlcmxheT4gcGFnZU92ZXJsYXksIFBhZ2VPdmVybGF5OjpGYWRlTW9k
ZSBmYWRlTW9kZSkKK3sKKyAgICBjcmVhdGVSb290TGF5ZXJzSWZOZWVkZWQoKTsKKworICAgIFJl
ZlB0cjxQYWdlT3ZlcmxheT4gb3ZlcmxheSA9IHBhZ2VPdmVybGF5OworCisgICAgaWYgKG1fcGFn
ZU92ZXJsYXlzLmNvbnRhaW5zKG92ZXJsYXkpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3Bh
Z2VPdmVybGF5cy5hcHBlbmQob3ZlcmxheSk7CisgICAgb3ZlcmxheS0+c2V0UGFnZSgmbV9wYWdl
KTsKKworICAgIGlmIChmYWRlTW9kZSA9PSBQYWdlT3ZlcmxheTo6RmFkZU1vZGU6OkZhZGUpCisg
ICAgICAgIG92ZXJsYXktPnN0YXJ0RmFkZUluQW5pbWF0aW9uKCk7CisKKyAgICBzdGQ6OnVuaXF1
ZV9wdHI8R3JhcGhpY3NMYXllcj4gbGF5ZXIgPSBHcmFwaGljc0xheWVyOjpjcmVhdGUobV9wYWdl
LmNocm9tZSgpLmNsaWVudCgpLmdyYXBoaWNzTGF5ZXJGYWN0b3J5KCksICp0aGlzKTsKKyAgICBs
YXllci0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQb2ludDNEKCkpOworICAgIGxheWVyLT5zZXRCYWNr
Z3JvdW5kQ29sb3Iob3ZlcmxheS0+YmFja2dyb3VuZENvbG9yKCkpOworICAgIHVwZGF0ZU92ZXJs
YXlHZW9tZXRyeSgqb3ZlcmxheSwgKmxheWVyKTsKKyNpZm5kZWYgTkRFQlVHCisgICAgbGF5ZXIt
PnNldE5hbWUoIlBhZ2UgT3ZlcmxheSBjb250ZW50Iik7CisjZW5kaWYKKworICAgIHVwZGF0ZVNl
dHRpbmdzRm9yTGF5ZXIoKmxheWVyKTsKKworICAgIHN3aXRjaCAob3ZlcmxheS0+b3ZlcmxheVR5
cGUoKSkgeworICAgIGNhc2UgUGFnZU92ZXJsYXk6Ok92ZXJsYXlUeXBlOjpWaWV3OgorICAgICAg
ICBtX3ZpZXdPdmVybGF5Um9vdExheWVyLT5hZGRDaGlsZChsYXllci5nZXQoKSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgUGFnZU92ZXJsYXk6Ok92ZXJsYXlUeXBlOjpEb2N1bWVudDoKKyAg
ICAgICAgbV9kb2N1bWVudE92ZXJsYXlSb290TGF5ZXItPmFkZENoaWxkKGxheWVyLmdldCgpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgbV9vdmVybGF5R3JhcGhpY3NMYXllcnMuc2V0
KG92ZXJsYXkuZ2V0KCksIFdURjo6bW92ZShsYXllcikpOworCisgICAgdXBkYXRlRm9yY2VTeW5j
aHJvbm91c1Njcm9sbExheWVyUG9zaXRpb25VcGRhdGVzKCk7CisKKyAgICBpZiAoRnJhbWVWaWV3
KiBmcmFtZVZpZXcgPSBtX3BhZ2UubWFpbkZyYW1lKCkudmlldygpKQorICAgICAgICBmcmFtZVZp
ZXctPmVudGVyQ29tcG9zaXRpbmdNb2RlKCk7Cit9CisKK3ZvaWQgUGFnZU92ZXJsYXlDb250cm9s
bGVyOjp1bmluc3RhbGxQYWdlT3ZlcmxheShQYWdlT3ZlcmxheSogb3ZlcmxheSwgUGFnZU92ZXJs
YXk6OkZhZGVNb2RlIGZhZGVNb2RlKQoreworICAgIGlmIChmYWRlTW9kZSA9PSBQYWdlT3Zlcmxh
eTo6RmFkZU1vZGU6OkZhZGUpIHsKKyAgICAgICAgb3ZlcmxheS0+c3RhcnRGYWRlT3V0QW5pbWF0
aW9uKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBvdmVybGF5LT5zZXRQYWdlKG51
bGxwdHIpOworCisgICAgbV9vdmVybGF5R3JhcGhpY3NMYXllcnMudGFrZShvdmVybGF5KS0+cmVt
b3ZlRnJvbVBhcmVudCgpOworCisgICAgc2l6ZV90IG92ZXJsYXlJbmRleCA9IG1fcGFnZU92ZXJs
YXlzLmZpbmQob3ZlcmxheSk7CisgICAgQVNTRVJUKG92ZXJsYXlJbmRleCAhPSBub3RGb3VuZCk7
CisgICAgbV9wYWdlT3ZlcmxheXMucmVtb3ZlKG92ZXJsYXlJbmRleCk7CisKKyAgICB1cGRhdGVG
b3JjZVN5bmNocm9ub3VzU2Nyb2xsTGF5ZXJQb3NpdGlvblVwZGF0ZXMoKTsKK30KKwordm9pZCBQ
YWdlT3ZlcmxheUNvbnRyb2xsZXI6OnVwZGF0ZUZvcmNlU3luY2hyb25vdXNTY3JvbGxMYXllclBv
c2l0aW9uVXBkYXRlcygpCit7CisjaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykKKyAgICBib29s
IGZvcmNlU3luY2hyb25vdXNTY3JvbGxMYXllclBvc2l0aW9uVXBkYXRlcyA9IGZhbHNlOworCisg
ICAgZm9yIChhdXRvJiBvdmVybGF5IDogbV9wYWdlT3ZlcmxheXMpIHsKKyAgICAgICAgaWYgKG92
ZXJsYXktPm92ZXJsYXlUeXBlKCkgPT0gUGFnZU92ZXJsYXk6Ok92ZXJsYXlUeXBlOjpWaWV3KQor
ICAgICAgICAgICAgZm9yY2VTeW5jaHJvbm91c1Njcm9sbExheWVyUG9zaXRpb25VcGRhdGVzID0g
dHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoU2Nyb2xsaW5nQ29vcmRpbmF0b3IqIHNjcm9sbGluZ0Nv
b3JkaW5hdG9yID0gbV9wYWdlLnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkpCisgICAgICAgIHNjcm9s
bGluZ0Nvb3JkaW5hdG9yLT5zZXRGb3JjZVN5bmNocm9ub3VzU2Nyb2xsTGF5ZXJQb3NpdGlvblVw
ZGF0ZXMoZm9yY2VTeW5jaHJvbm91c1Njcm9sbExheWVyUG9zaXRpb25VcGRhdGVzKTsKKyNlbmRp
ZgorfQorCit2b2lkIFBhZ2VPdmVybGF5Q29udHJvbGxlcjo6c2V0UGFnZU92ZXJsYXlOZWVkc0Rp
c3BsYXkoUGFnZU92ZXJsYXkmIG92ZXJsYXksIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGRpcnR5
UmVjdCkKK3sKKyAgICBBU1NFUlQobV9wYWdlT3ZlcmxheXMuY29udGFpbnMoJm92ZXJsYXkpKTsK
KyAgICBHcmFwaGljc0xheWVyJiBncmFwaGljc0xheWVyID0gKm1fb3ZlcmxheUdyYXBoaWNzTGF5
ZXJzLmdldCgmb3ZlcmxheSk7CisKKyAgICBpZiAoIWdyYXBoaWNzTGF5ZXIuZHJhd3NDb250ZW50
KCkpIHsKKyAgICAgICAgZ3JhcGhpY3NMYXllci5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7CisgICAg
ICAgIHVwZGF0ZU92ZXJsYXlHZW9tZXRyeShvdmVybGF5LCBncmFwaGljc0xheWVyKTsKKyAgICB9
CisKKyAgICBncmFwaGljc0xheWVyLnNldE5lZWRzRGlzcGxheUluUmVjdChkaXJ0eVJlY3QpOwor
fQorCit2b2lkIFBhZ2VPdmVybGF5Q29udHJvbGxlcjo6c2V0UGFnZU92ZXJsYXlPcGFjaXR5KFBh
Z2VPdmVybGF5JiBvdmVybGF5LCBmbG9hdCBvcGFjaXR5KQoreworICAgIEFTU0VSVChtX3BhZ2VP
dmVybGF5cy5jb250YWlucygmb3ZlcmxheSkpOworICAgIG1fb3ZlcmxheUdyYXBoaWNzTGF5ZXJz
LmdldCgmb3ZlcmxheSktPnNldE9wYWNpdHkob3BhY2l0eSk7Cit9CisKK3ZvaWQgUGFnZU92ZXJs
YXlDb250cm9sbGVyOjpjbGVhclBhZ2VPdmVybGF5KFBhZ2VPdmVybGF5JiBvdmVybGF5KQorewor
ICAgIEFTU0VSVChtX3BhZ2VPdmVybGF5cy5jb250YWlucygmb3ZlcmxheSkpOworICAgIG1fb3Zl
cmxheUdyYXBoaWNzTGF5ZXJzLmdldCgmb3ZlcmxheSktPnNldERyYXdzQ29udGVudChmYWxzZSk7
Cit9CisKK0dyYXBoaWNzTGF5ZXImIFBhZ2VPdmVybGF5Q29udHJvbGxlcjo6bGF5ZXJGb3JPdmVy
bGF5KFBhZ2VPdmVybGF5JiBvdmVybGF5KSBjb25zdAoreworICAgIEFTU0VSVChtX3BhZ2VPdmVy
bGF5cy5jb250YWlucygmb3ZlcmxheSkpOworICAgIHJldHVybiAqbV9vdmVybGF5R3JhcGhpY3NM
YXllcnMuZ2V0KCZvdmVybGF5KTsKK30KKwordm9pZCBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6Ondp
bGxBdHRhY2hSb290TGF5ZXIoKQoreworICAgIGZvciAoYXV0byYgb3ZlcmxheUFuZExheWVyIDog
bV9vdmVybGF5R3JhcGhpY3NMYXllcnMpCisgICAgICAgIHVwZGF0ZU92ZXJsYXlHZW9tZXRyeSgq
b3ZlcmxheUFuZExheWVyLmtleSwgKm92ZXJsYXlBbmRMYXllci52YWx1ZSk7Cit9CisKK3ZvaWQg
UGFnZU92ZXJsYXlDb250cm9sbGVyOjpkaWRDaGFuZ2VWaWV3U2l6ZSgpCit7CisgICAgZm9yIChh
dXRvJiBvdmVybGF5QW5kTGF5ZXIgOiBtX292ZXJsYXlHcmFwaGljc0xheWVycykgeworICAgICAg
ICBpZiAob3ZlcmxheUFuZExheWVyLmtleS0+b3ZlcmxheVR5cGUoKSA9PSBQYWdlT3ZlcmxheTo6
T3ZlcmxheVR5cGU6OlZpZXcpCisgICAgICAgICAgICB1cGRhdGVPdmVybGF5R2VvbWV0cnkoKm92
ZXJsYXlBbmRMYXllci5rZXksICpvdmVybGF5QW5kTGF5ZXIudmFsdWUpOworICAgIH0KK30KKwor
dm9pZCBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6OmRpZENoYW5nZURvY3VtZW50U2l6ZSgpCit7Cisg
ICAgZm9yIChhdXRvJiBvdmVybGF5QW5kTGF5ZXIgOiBtX292ZXJsYXlHcmFwaGljc0xheWVycykg
eworICAgICAgICBpZiAob3ZlcmxheUFuZExheWVyLmtleS0+b3ZlcmxheVR5cGUoKSA9PSBQYWdl
T3ZlcmxheTo6T3ZlcmxheVR5cGU6OkRvY3VtZW50KQorICAgICAgICAgICAgdXBkYXRlT3Zlcmxh
eUdlb21ldHJ5KCpvdmVybGF5QW5kTGF5ZXIua2V5LCAqb3ZlcmxheUFuZExheWVyLnZhbHVlKTsK
KyAgICB9Cit9CisKK3ZvaWQgUGFnZU92ZXJsYXlDb250cm9sbGVyOjpkaWRDaGFuZ2VTZXR0aW5n
cygpCit7CisgICAgLy8gRklYTUU6IFdlIHNob3VsZCBhcHBseSB0aGVzZSBzZXR0aW5ncyB0byBh
bGwgb3ZlcmxheSBzdWJsYXllcnMgcmVjdXJzaXZlbHkuCisgICAgZm9yIChhdXRvJiBncmFwaGlj
c0xheWVyIDogbV9vdmVybGF5R3JhcGhpY3NMYXllcnMudmFsdWVzKCkpCisgICAgICAgIHVwZGF0
ZVNldHRpbmdzRm9yTGF5ZXIoKmdyYXBoaWNzTGF5ZXIpOworfQorCit2b2lkIFBhZ2VPdmVybGF5
Q29udHJvbGxlcjo6ZGlkQ2hhbmdlRGV2aWNlU2NhbGVGYWN0b3IoKQoreworICAgIGNyZWF0ZVJv
b3RMYXllcnNJZk5lZWRlZCgpOworCisgICAgbV9kb2N1bWVudE92ZXJsYXlSb290TGF5ZXItPm5v
dGVEZXZpY2VPclBhZ2VTY2FsZUZhY3RvckNoYW5nZWRJbmNsdWRpbmdEZXNjZW5kYW50cygpOwor
ICAgIG1fdmlld092ZXJsYXlSb290TGF5ZXItPm5vdGVEZXZpY2VPclBhZ2VTY2FsZUZhY3RvckNo
YW5nZWRJbmNsdWRpbmdEZXNjZW5kYW50cygpOworCisgICAgZm9yIChhdXRvJiBncmFwaGljc0xh
eWVyIDogbV9vdmVybGF5R3JhcGhpY3NMYXllcnMudmFsdWVzKCkpCisgICAgICAgIGdyYXBoaWNz
TGF5ZXItPnNldE5lZWRzRGlzcGxheSgpOworfQorCit2b2lkIFBhZ2VPdmVybGF5Q29udHJvbGxl
cjo6ZGlkQ2hhbmdlRXhwb3NlZFJlY3QoKQoreworICAgIG1fcGFnZS5jaHJvbWUoKS5jbGllbnQo
KS5zY2hlZHVsZUNvbXBvc2l0aW5nTGF5ZXJGbHVzaCgpOworfQorCit2b2lkIFBhZ2VPdmVybGF5
Q29udHJvbGxlcjo6ZGlkU2Nyb2xsRnJhbWUoRnJhbWUmIGZyYW1lKQoreworICAgIGZvciAoYXV0
byYgb3ZlcmxheUFuZExheWVyIDogbV9vdmVybGF5R3JhcGhpY3NMYXllcnMpIHsKKyAgICAgICAg
aWYgKG92ZXJsYXlBbmRMYXllci5rZXktPm92ZXJsYXlUeXBlKCkgPT0gUGFnZU92ZXJsYXk6Ok92
ZXJsYXlUeXBlOjpWaWV3IHx8ICFmcmFtZS5pc01haW5GcmFtZSgpKQorICAgICAgICAgICAgb3Zl
cmxheUFuZExheWVyLnZhbHVlLT5zZXROZWVkc0Rpc3BsYXkoKTsKKyAgICAgICAgb3ZlcmxheUFu
ZExheWVyLmtleS0+ZGlkU2Nyb2xsRnJhbWUoZnJhbWUpOworICAgIH0KK30KKwordm9pZCBQYWdl
T3ZlcmxheUNvbnRyb2xsZXI6OnVwZGF0ZVNldHRpbmdzRm9yTGF5ZXIoR3JhcGhpY3NMYXllciYg
bGF5ZXIpCit7CisgICAgU2V0dGluZ3MmIHNldHRpbmdzID0gbV9wYWdlLnNldHRpbmdzKCk7Cisg
ICAgbGF5ZXIuc2V0QWNjZWxlcmF0ZXNEcmF3aW5nKHNldHRpbmdzLmFjY2VsZXJhdGVkRHJhd2lu
Z0VuYWJsZWQoKSk7CisgICAgbGF5ZXIuc2V0U2hvd0RlYnVnQm9yZGVyKHNldHRpbmdzLnNob3dE
ZWJ1Z0JvcmRlcnMoKSk7CisgICAgbGF5ZXIuc2V0U2hvd1JlcGFpbnRDb3VudGVyKHNldHRpbmdz
LnNob3dSZXBhaW50Q291bnRlcigpKTsKK30KKworYm9vbCBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6
OmhhbmRsZU1vdXNlRXZlbnQoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBtb3VzZUV2ZW50KQor
eworICAgIGlmICghbV9wYWdlT3ZlcmxheXMuc2l6ZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBmb3IgKGF1dG8gaXQgPSBtX3BhZ2VPdmVybGF5cy5yYmVnaW4oKSwgZW5kID0gbV9w
YWdlT3ZlcmxheXMucmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgaWYgKCgqaXQp
LT5tb3VzZUV2ZW50KG1vdXNlRXZlbnQpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFBhZ2VPdmVybGF5Q29udHJvbGxlcjo6
Y29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVTdHJpbmdWYWx1ZUZvclBvaW50KFN0cmluZyBhdHRy
aWJ1dGUsIEZsb2F0UG9pbnQgcGFyYW1ldGVyLCBTdHJpbmcmIHZhbHVlKQoreworICAgIGlmICgh
bV9wYWdlT3ZlcmxheXMuc2l6ZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBmb3Ig
KGF1dG8gaXQgPSBtX3BhZ2VPdmVybGF5cy5yYmVnaW4oKSwgZW5kID0gbV9wYWdlT3ZlcmxheXMu
cmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgaWYgKCgqaXQpLT5jb3B5QWNjZXNz
aWJpbGl0eUF0dHJpYnV0ZVN0cmluZ1ZhbHVlRm9yUG9pbnQoYXR0cmlidXRlLCBwYXJhbWV0ZXIs
IHZhbHVlKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVybiBm
YWxzZTsKK30KKworYm9vbCBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6OmNvcHlBY2Nlc3NpYmlsaXR5
QXR0cmlidXRlQm9vbFZhbHVlRm9yUG9pbnQoU3RyaW5nIGF0dHJpYnV0ZSwgRmxvYXRQb2ludCBw
YXJhbWV0ZXIsIGJvb2wmIHZhbHVlKQoreworICAgIGlmICghbV9wYWdlT3ZlcmxheXMuc2l6ZSgp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBmb3IgKGF1dG8gaXQgPSBtX3BhZ2VPdmVy
bGF5cy5yYmVnaW4oKSwgZW5kID0gbV9wYWdlT3ZlcmxheXMucmVuZCgpOyBpdCAhPSBlbmQ7ICsr
aXQpIHsKKyAgICAgICAgaWYgKCgqaXQpLT5jb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZUJvb2xW
YWx1ZUZvclBvaW50KGF0dHJpYnV0ZSwgcGFyYW1ldGVyLCB2YWx1ZSkpCisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIGZhbHNlOworfQorCitWZWN0b3I8
U3RyaW5nPiBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6OmNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRl
c05hbWVzKGJvb2wgcGFyYW1ldGVyaXplZE5hbWVzKQoreworICAgIGlmICghbV9wYWdlT3Zlcmxh
eXMuc2l6ZSgpKQorICAgICAgICByZXR1cm4gVmVjdG9yPFN0cmluZz4oKTsKKworICAgIGZvciAo
YXV0byBpdCA9IG1fcGFnZU92ZXJsYXlzLnJiZWdpbigpLCBlbmQgPSBtX3BhZ2VPdmVybGF5cy5y
ZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBWZWN0b3I8U3RyaW5nPiBuYW1lcyA9
ICgqaXQpLT5jb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZU5hbWVzKHBhcmFtZXRlcml6ZWROYW1l
cyk7CisgICAgICAgIGlmICghbmFtZXMuaXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0dXJuIG5h
bWVzOworICAgIH0KKworICAgIHJldHVybiBWZWN0b3I8U3RyaW5nPigpOworfQorCit2b2lkIFBh
Z2VPdmVybGF5Q29udHJvbGxlcjo6cGFpbnRDb250ZW50cyhjb25zdCBXZWJDb3JlOjpHcmFwaGlj
c0xheWVyKiBncmFwaGljc0xheWVyLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNz
Q29udGV4dCwgV2ViQ29yZTo6R3JhcGhpY3NMYXllclBhaW50aW5nUGhhc2UsIGNvbnN0IFdlYkNv
cmU6OkZsb2F0UmVjdCYgY2xpcFJlY3QpCit7CisgICAgZm9yIChhdXRvIGl0ID0gbV9vdmVybGF5
R3JhcGhpY3NMYXllcnMuYmVnaW4oKSwgZW5kID0gbV9vdmVybGF5R3JhcGhpY3NMYXllcnMuZW5k
KCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBpZiAoaXQtPnZhbHVlLmdldCgpICE9IGdy
YXBoaWNzTGF5ZXIpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBHcmFwaGljc0Nv
bnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoZ3JhcGhpY3NDb250ZXh0KTsKKyAgICAgICAgZ3Jh
cGhpY3NDb250ZXh0LmNsaXAoY2xpcFJlY3QpOworICAgICAgICBpdC0+a2V5LT5kcmF3UmVjdChn
cmFwaGljc0NvbnRleHQsIGVuY2xvc2luZ0ludFJlY3QoY2xpcFJlY3QpKTsKKworICAgICAgICBy
ZXR1cm47CisgICAgfQorfQorCitmbG9hdCBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6OmRldmljZVNj
YWxlRmFjdG9yKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wYWdlLmRldmljZVNjYWxlRmFjdG9y
KCk7Cit9CisKK3ZvaWQgUGFnZU92ZXJsYXlDb250cm9sbGVyOjpub3RpZnlGbHVzaFJlcXVpcmVk
KGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKQoreworICAgIG1fcGFnZS5jaHJvbWUoKS5j
bGllbnQoKS5zY2hlZHVsZUNvbXBvc2l0aW5nTGF5ZXJGbHVzaCgpOworfQorCit2b2lkIFBhZ2VP
dmVybGF5Q29udHJvbGxlcjo6ZGlkQ2hhbmdlT3ZlcmxheUZyYW1lKFBhZ2VPdmVybGF5JiBvdmVy
bGF5KQoreworICAgIEFTU0VSVChtX3BhZ2VPdmVybGF5cy5jb250YWlucygmb3ZlcmxheSkpOwor
ICAgIHVwZGF0ZU92ZXJsYXlHZW9tZXRyeShvdmVybGF5LCAqbV9vdmVybGF5R3JhcGhpY3NMYXll
cnMuZ2V0KCZvdmVybGF5KSk7Cit9CisKK3ZvaWQgUGFnZU92ZXJsYXlDb250cm9sbGVyOjpkaWRD
aGFuZ2VPdmVybGF5QmFja2dyb3VuZENvbG9yKFBhZ2VPdmVybGF5JiBvdmVybGF5KQoreworICAg
IEFTU0VSVChtX3BhZ2VPdmVybGF5cy5jb250YWlucygmb3ZlcmxheSkpOworICAgIG1fb3Zlcmxh
eUdyYXBoaWNzTGF5ZXJzLmdldCgmb3ZlcmxheSktPnNldEJhY2tncm91bmRDb2xvcihvdmVybGF5
LmJhY2tncm91bmRDb2xvcigpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VPdmVybGF5Q29udHJvbGxlci5oIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9QYWdlT3ZlcmxheUNvbnRyb2xsZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi4yZTljODlkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9QYWdlT3ZlcmxheUNvbnRyb2xsZXIuaApAQCAtMCwwICsxLDEwMSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpZm5kZWYgUGFnZU92ZXJsYXlDb250cm9sbGVyX2gKKyNkZWZpbmUgUGFnZU92ZXJs
YXlDb250cm9sbGVyX2gKKworI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXJDbGllbnQuaCIKKyNpbmNs
dWRlICJQYWdlT3ZlcmxheS5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8
d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitjbGFzcyBGcmFtZTsKK2NsYXNzIFBhZ2U7CitjbGFzcyBQbGF0Zm9ybU1vdXNlRXZl
bnQ7CisKK2NsYXNzIFBhZ2VPdmVybGF5Q29udHJvbGxlciA6IHB1YmxpYyBHcmFwaGljc0xheWVy
Q2xpZW50IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShQYWdlT3ZlcmxheUNvbnRyb2xsZXIp
OworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIFBhZ2VPdmVybGF5
Q29udHJvbGxlcihQYWdlJik7CisKKyAgICBHcmFwaGljc0xheWVyJiBkb2N1bWVudE92ZXJsYXlS
b290TGF5ZXIoKTsKKyAgICBHcmFwaGljc0xheWVyJiB2aWV3T3ZlcmxheVJvb3RMYXllcigpOwor
CisgICAgdm9pZCBpbnN0YWxsUGFnZU92ZXJsYXkoUGFzc1JlZlB0cjxQYWdlT3ZlcmxheT4sIFBh
Z2VPdmVybGF5OjpGYWRlTW9kZSk7CisgICAgdm9pZCB1bmluc3RhbGxQYWdlT3ZlcmxheShQYWdl
T3ZlcmxheSosIFBhZ2VPdmVybGF5OjpGYWRlTW9kZSk7CisKKyAgICB2b2lkIHNldFBhZ2VPdmVy
bGF5TmVlZHNEaXNwbGF5KFBhZ2VPdmVybGF5JiwgY29uc3QgSW50UmVjdCYpOworICAgIHZvaWQg
c2V0UGFnZU92ZXJsYXlPcGFjaXR5KFBhZ2VPdmVybGF5JiwgZmxvYXQpOworICAgIHZvaWQgY2xl
YXJQYWdlT3ZlcmxheShQYWdlT3ZlcmxheSYpOworICAgIEdyYXBoaWNzTGF5ZXImIGxheWVyRm9y
T3ZlcmxheShQYWdlT3ZlcmxheSYpIGNvbnN0OworCisgICAgdm9pZCB3aWxsQXR0YWNoUm9vdExh
eWVyKCk7CisKKyAgICB2b2lkIGRpZENoYW5nZVZpZXdTaXplKCk7CisgICAgdm9pZCBkaWRDaGFu
Z2VEb2N1bWVudFNpemUoKTsKKyAgICB2b2lkIGRpZENoYW5nZVNldHRpbmdzKCk7CisgICAgdm9p
ZCBkaWRDaGFuZ2VEZXZpY2VTY2FsZUZhY3RvcigpOworICAgIHZvaWQgZGlkQ2hhbmdlRXhwb3Nl
ZFJlY3QoKTsKKyAgICB2b2lkIGRpZFNjcm9sbEZyYW1lKEZyYW1lJik7CisKKyAgICB2b2lkIGRp
ZENoYW5nZU92ZXJsYXlGcmFtZShQYWdlT3ZlcmxheSYpOworICAgIHZvaWQgZGlkQ2hhbmdlT3Zl
cmxheUJhY2tncm91bmRDb2xvcihQYWdlT3ZlcmxheSYpOworCisgICAgaW50IG92ZXJsYXlDb3Vu
dCgpIGNvbnN0IHsgcmV0dXJuIG1fb3ZlcmxheUdyYXBoaWNzTGF5ZXJzLnNpemUoKTsgfQorCisg
ICAgYm9vbCBoYW5kbGVNb3VzZUV2ZW50KGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYpOworCisg
ICAgYm9vbCBjb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVN0cmluZ1ZhbHVlRm9yUG9pbnQoU3Ry
aW5nIGF0dHJpYnV0ZSwgRmxvYXRQb2ludCwgU3RyaW5nJiB2YWx1ZSk7CisgICAgYm9vbCBjb3B5
QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZUJvb2xWYWx1ZUZvclBvaW50KFN0cmluZyBhdHRyaWJ1dGUs
IEZsb2F0UG9pbnQsIGJvb2wmIHZhbHVlKTsKKyAgICBWZWN0b3I8U3RyaW5nPiBjb3B5QWNjZXNz
aWJpbGl0eUF0dHJpYnV0ZXNOYW1lcyhib29sIHBhcmFtZXRlcml6ZWROYW1lcyk7CisKK3ByaXZh
dGU6CisgICAgdm9pZCBjcmVhdGVSb290TGF5ZXJzSWZOZWVkZWQoKTsKKworICAgIHZvaWQgdXBk
YXRlU2V0dGluZ3NGb3JMYXllcihHcmFwaGljc0xheWVyJik7CisgICAgdm9pZCB1cGRhdGVGb3Jj
ZVN5bmNocm9ub3VzU2Nyb2xsTGF5ZXJQb3NpdGlvblVwZGF0ZXMoKTsKKworICAgIC8vIEdyYXBo
aWNzTGF5ZXJDbGllbnQKKyAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5Rmx1c2hSZXF1aXJlZChjb25z
dCBHcmFwaGljc0xheWVyKikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVu
dHMoY29uc3QgR3JhcGhpY3NMYXllciosIEdyYXBoaWNzQ29udGV4dCYsIEdyYXBoaWNzTGF5ZXJQ
YWludGluZ1BoYXNlLCBjb25zdCBGbG9hdFJlY3QmIGNsaXBSZWN0KSBvdmVycmlkZTsKKyAgICB2
aXJ0dWFsIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmly
dHVhbCBib29sIHNob3VsZFNraXBMYXllckluRHVtcChjb25zdCBHcmFwaGljc0xheWVyKikgY29u
c3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgc3RkOjp1bmlxdWVfcHRyPEdyYXBo
aWNzTGF5ZXI+IG1fZG9jdW1lbnRPdmVybGF5Um9vdExheWVyOworICAgIHN0ZDo6dW5pcXVlX3B0
cjxHcmFwaGljc0xheWVyPiBtX3ZpZXdPdmVybGF5Um9vdExheWVyOworICAgIGJvb2wgbV9pbml0
aWFsaXplZDsKKworICAgIEhhc2hNYXA8UGFnZU92ZXJsYXkqLCBzdGQ6OnVuaXF1ZV9wdHI8R3Jh
cGhpY3NMYXllcj4+IG1fb3ZlcmxheUdyYXBoaWNzTGF5ZXJzOworICAgIFZlY3RvcjxSZWZQdHI8
UGFnZU92ZXJsYXk+PiBtX3BhZ2VPdmVybGF5czsKKyAgICBQYWdlJiBtX3BhZ2U7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFBhZ2VPdmVybGF5Q29udHJvbGxlcl9o
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xh
eWVyQ2xpZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xh
eWVyQ2xpZW50LmgKaW5kZXggOGE0ODMzMy4uMjU5MjJjYiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllckNsaWVudC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXJDbGllbnQuaApAQCAtMjYs
NiArMjYsOCBAQAogI2lmbmRlZiBHcmFwaGljc0xheWVyQ2xpZW50X2gKICNkZWZpbmUgR3JhcGhp
Y3NMYXllckNsaWVudF9oCiAKKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIGNsYXNzIEZsb2F0UG9pbnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxheWVyLmNwcAppbmRleCA1ZjNhNDk3Li43ODBmYzAyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMYXllci5jcHAKQEAgLTIzMjIsNyArMjMyMiw3IEBAIHZvaWQgUmVuZGVy
TGF5ZXI6OnNjcm9sbFRvKGludCB4LCBpbnQgeSkKIAogICAgIEluc3BlY3Rvckluc3RydW1lbnRh
dGlvbjo6ZGlkU2Nyb2xsTGF5ZXIoJmZyYW1lKTsKICAgICBpZiAoc2Nyb2xsc092ZXJmbG93KCkp
Ci0gICAgICAgIGZyYW1lLmxvYWRlcigpLmNsaWVudCgpLmRpZENoYW5nZVNjcm9sbE9mZnNldCgp
OworICAgICAgICB2aWV3LmZyYW1lVmlldygpLmRpZENoYW5nZVNjcm9sbE9mZnNldCgpOwogCiAg
ICAgdmlldy5mcmFtZVZpZXcoKS5yZXN1bWVWaXNpYmxlSW1hZ2VBbmltYXRpb25zSW5jbHVkaW5n
U3ViZnJhbWVzKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGF5ZXJDb21wb3NpdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
YXllckNvbXBvc2l0b3IuY3BwCmluZGV4IDRiZTQ2OTEuLjFmNTliMGEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwCkBAIC00NSw2
ICs0NSw3IEBACiAjaW5jbHVkZSAiTWFpbkZyYW1lLmgiCiAjaW5jbHVkZSAiTm9kZUxpc3QuaCIK
ICNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiUGFnZU92ZXJsYXlDb250cm9sbGVyLmgiCiAj
aW5jbHVkZSAiUmVuZGVyRW1iZWRkZWRPYmplY3QuaCIKICNpbmNsdWRlICJSZW5kZXJGbG93VGhy
ZWFkLmgiCiAjaW5jbHVkZSAiUmVuZGVyRnVsbFNjcmVlbi5oIgpAQCAtNjQzLDcgKzY0NCw4IEBA
IHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVDb21wb3NpdGluZ0xheWVyc1RpbWVy
RmlyZWQoVGltZXI8UmVuZGVyTGF5ZXJDCiAKIGJvb2wgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpo
YXNBbnlBZGRpdGlvbmFsQ29tcG9zaXRlZExheWVycyhjb25zdCBSZW5kZXJMYXllciYgcm9vdExh
eWVyKSBjb25zdAogewotICAgIHJldHVybiBtX2NvbXBvc2l0ZWRMYXllckNvdW50ID4gKHJvb3RM
YXllci5pc0NvbXBvc2l0ZWQoKSA/IDEgOiAwKTsKKyAgICBpbnQgbGF5ZXJDb3VudCA9IG1fY29t
cG9zaXRlZExheWVyQ291bnQgKyBtX3JlbmRlclZpZXcuZnJhbWUoKS5wYWdlKCktPnBhZ2VPdmVy
bGF5Q29udHJvbGxlcigpLm92ZXJsYXlDb3VudCgpOworICAgIHJldHVybiBsYXllckNvdW50ID4g
KHJvb3RMYXllci5pc0NvbXBvc2l0ZWQoKSA/IDEgOiAwKTsKIH0KIAogdm9pZCBSZW5kZXJMYXll
ckNvbXBvc2l0b3I6OmNhbmNlbENvbXBvc2l0aW5nTGF5ZXJVcGRhdGUoKQpAQCAtNjY1LDcgKzY2
Nyw3IEBAIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVDb21wb3NpdGluZ0xheWVy
cyhDb21wb3NpdGluZ1VwZGF0ZVR5cGUgdXBkYXRlCiAgICAgaWYgKG1fcmVuZGVyVmlldy5uZWVk
c0xheW91dCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAobV9mb3JjZUNvbXBvc2l0aW5n
TW9kZSAmJiAhbV9jb21wb3NpdGluZykKKyAgICBpZiAoKG1fZm9yY2VDb21wb3NpdGluZ01vZGUg
fHwgbV9yZW5kZXJWaWV3LmZyYW1lKCkucGFnZSgpLT5wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKS5v
dmVybGF5Q291bnQoKSkgJiYgIW1fY29tcG9zaXRpbmcpCiAgICAgICAgIGVuYWJsZUNvbXBvc2l0
aW5nTW9kZSh0cnVlKTsKIAogICAgIGlmICghbV9yZWV2YWx1YXRlQ29tcG9zaXRpbmdBZnRlckxh
eW91dCAmJiAhbV9jb21wb3NpdGluZykKQEAgLTc0OCw3ICs3NTAsNyBAQCB2b2lkIFJlbmRlckxh
eWVyQ29tcG9zaXRvcjo6dXBkYXRlQ29tcG9zaXRpbmdMYXllcnMoQ29tcG9zaXRpbmdVcGRhdGVU
eXBlIHVwZGF0ZQogCiAgICAgICAgIC8vIEhvc3QgdGhlIGRvY3VtZW50IGxheWVyIGluIHRoZSBS
ZW5kZXJWaWV3J3Mgcm9vdCBsYXllci4KICAgICAgICAgaWYgKGlzRnVsbFVwZGF0ZSkgewotICAg
ICAgICAgICAgYXBwZW5kT3ZlcmxheUxheWVycyhjaGlsZExpc3QpOworICAgICAgICAgICAgYXBw
ZW5kRG9jdW1lbnRPdmVybGF5TGF5ZXJzKGNoaWxkTGlzdCk7CiAgICAgICAgICAgICAvLyBFdmVu
IHdoZW4gY2hpbGRMaXN0IGlzIGVtcHR5LCBkb24ndCBkcm9wIG91dCBvZiBjb21wb3NpdGluZyBt
b2RlIGlmIHRoZXJlIGFyZQogICAgICAgICAgICAgLy8gY29tcG9zaXRlZCBsYXllcnMgdGhhdCB3
ZSBkaWRuJ3QgaGl0IGluIG91ciB0cmF2ZXJzYWwgKGUuZy4gYmVjYXVzZSBvZiB2aXNpYmlsaXR5
OmhpZGRlbikuCiAgICAgICAgICAgICBpZiAoY2hpbGRMaXN0LmlzRW1wdHkoKSAmJiAhaGFzQW55
QWRkaXRpb25hbENvbXBvc2l0ZWRMYXllcnMoKnVwZGF0ZVJvb3QpKQpAQCAtNzg0LDE1ICs3ODYs
MTggQEAgdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJz
KENvbXBvc2l0aW5nVXBkYXRlVHlwZSB1cGRhdGUKICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRp
b246OmxheWVyVHJlZURpZENoYW5nZShwYWdlKCkpOwogfQogCi12b2lkIFJlbmRlckxheWVyQ29t
cG9zaXRvcjo6YXBwZW5kT3ZlcmxheUxheWVycyhWZWN0b3I8R3JhcGhpY3NMYXllcio+JiBjaGls
ZExpc3QpCit2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6YXBwZW5kRG9jdW1lbnRPdmVybGF5
TGF5ZXJzKFZlY3RvcjxHcmFwaGljc0xheWVyKj4mIGNoaWxkTGlzdCkKIHsKICAgICBGcmFtZSYg
ZnJhbWUgPSBtX3JlbmRlclZpZXcuZnJhbWVWaWV3KCkuZnJhbWUoKTsKKyAgICBpZiAoIWZyYW1l
LmlzTWFpbkZyYW1lKCkpCisgICAgICAgIHJldHVybjsKKwogICAgIFBhZ2UqIHBhZ2UgPSBmcmFt
ZS5wYWdlKCk7CiAgICAgaWYgKCFwYWdlKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoR3Jh
cGhpY3NMYXllciogb3ZlcmxheUxheWVyID0gcGFnZS0+Y2hyb21lKCkuY2xpZW50KCkuZG9jdW1l
bnRPdmVybGF5TGF5ZXJGb3JGcmFtZShmcmFtZSkpCi0gICAgICAgIGNoaWxkTGlzdC5hcHBlbmQo
b3ZlcmxheUxheWVyKTsKKyAgICBwYWdlLT5wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKS53aWxsQXR0
YWNoUm9vdExheWVyKCk7CisgICAgY2hpbGRMaXN0LmFwcGVuZCgmcGFnZS0+cGFnZU92ZXJsYXlD
b250cm9sbGVyKCkuZG9jdW1lbnRPdmVybGF5Um9vdExheWVyKCkpOwogfQogCiB2b2lkIFJlbmRl
ckxheWVyQ29tcG9zaXRvcjo6bGF5ZXJCZWNhbWVOb25Db21wb3NpdGVkKGNvbnN0IFJlbmRlckxh
eWVyJiBsYXllcikKQEAgLTMzNjYsNiArMzM3MSwxMCBAQCB2b2lkIFJlbmRlckxheWVyQ29tcG9z
aXRvcjo6YXR0YWNoUm9vdExheWVyKFJvb3RMYXllckF0dGFjaG1lbnQgYXR0YWNobWVudCkKICAg
ICAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgICAgIHBhZ2UtPmNocm9tZSgpLmNsaWVu
dCgpLmF0dGFjaFJvb3RHcmFwaGljc0xheWVyKCZmcmFtZSwgcm9vdEdyYXBoaWNzTGF5ZXIoKSk7
CisgICAgICAgICAgICBpZiAoZnJhbWUuaXNNYWluRnJhbWUoKSkgeworICAgICAgICAgICAgICAg
IHBhZ2UtPnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLndpbGxBdHRhY2hSb290TGF5ZXIoKTsKKyAg
ICAgICAgICAgICAgICBwYWdlLT5jaHJvbWUoKS5jbGllbnQoKS5hdHRhY2hWaWV3T3ZlcmxheUdy
YXBoaWNzTGF5ZXIoJmZyYW1lLCAmcGFnZS0+cGFnZU92ZXJsYXlDb250cm9sbGVyKCkudmlld092
ZXJsYXlSb290TGF5ZXIoKSk7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQogICAgICAgICBjYXNlIFJvb3RMYXllckF0dGFjaGVkVmlhRW5jbG9zaW5nRnJhbWU6
IHsKQEAgLTM0MTAsNiArMzQxOSw4IEBAIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpkZXRh
Y2hSb290TGF5ZXIoKQogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIHBhZ2UtPmNocm9t
ZSgpLmNsaWVudCgpLmF0dGFjaFJvb3RHcmFwaGljc0xheWVyKCZmcmFtZSwgMCk7CisgICAgICAg
IGlmIChmcmFtZS5pc01haW5GcmFtZSgpKQorICAgICAgICAgICAgcGFnZS0+Y2hyb21lKCkuY2xp
ZW50KCkuYXR0YWNoVmlld092ZXJsYXlHcmFwaGljc0xheWVyKCZmcmFtZSwgMCk7CiAgICAgfQog
ICAgIGJyZWFrOwogICAgIGNhc2UgUm9vdExheWVyVW5hdHRhY2hlZDoKQEAgLTM0NDQsOCArMzQ1
NSwxMSBAQCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6cm9vdExheWVyQXR0YWNobWVudENo
YW5nZWQoKQogICAgIGlmIChSZW5kZXJMYXllckJhY2tpbmcqIGJhY2tpbmcgPSBsYXllciA/IGxh
eWVyLT5iYWNraW5nKCkgOiBudWxscHRyKQogICAgICAgICBiYWNraW5nLT51cGRhdGVEcmF3c0Nv
bnRlbnQoKTsKIAotICAgIGlmIChHcmFwaGljc0xheWVyKiBvdmVybGF5TGF5ZXIgPSBwYWdlLT5j
aHJvbWUoKS5jbGllbnQoKS5kb2N1bWVudE92ZXJsYXlMYXllckZvckZyYW1lKGZyYW1lKSkKLSAg
ICAgICAgbV9yb290Q29udGVudExheWVyLT5hZGRDaGlsZChvdmVybGF5TGF5ZXIpOworICAgIGlm
ICghZnJhbWUuaXNNYWluRnJhbWUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgcGFnZS0+cGFn
ZU92ZXJsYXlDb250cm9sbGVyKCkud2lsbEF0dGFjaFJvb3RMYXllcigpOworICAgIG1fcm9vdENv
bnRlbnRMYXllci0+YWRkQ2hpbGQoJnBhZ2UtPnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLmRvY3Vt
ZW50T3ZlcmxheVJvb3RMYXllcigpKTsKIH0KIAogLy8gSUZyYW1lcyBhcmUgc3BlY2lhbCwgYmVj
YXVzZSB3ZSBob29rIGNvbXBvc2l0aW5nIGxheWVycyB0b2dldGhlciBhY3Jvc3MgaWZyYW1lIGJv
dW5kYXJpZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXll
ckNvbXBvc2l0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBv
c2l0b3IuaAppbmRleCA3YmQyNDBhLi5kOWE4NzRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5oCkBAIC0zNjIsNyArMzYyLDcgQEAgcHJp
dmF0ZToKICAgICBib29sIGxheWVySGFzM0RDb250ZW50KGNvbnN0IFJlbmRlckxheWVyJikgY29u
c3Q7CiAgICAgYm9vbCBpc1J1bm5pbmdBY2NlbGVyYXRlZFRyYW5zZm9ybUFuaW1hdGlvbihSZW5k
ZXJMYXllck1vZGVsT2JqZWN0JikgY29uc3Q7CiAKLSAgICB2b2lkIGFwcGVuZE92ZXJsYXlMYXll
cnMoVmVjdG9yPEdyYXBoaWNzTGF5ZXIqPiYpOworICAgIHZvaWQgYXBwZW5kRG9jdW1lbnRPdmVy
bGF5TGF5ZXJzKFZlY3RvcjxHcmFwaGljc0xheWVyKj4mKTsKICAgICBib29sIGhhc0FueUFkZGl0
aW9uYWxDb21wb3NpdGVkTGF5ZXJzKGNvbnN0IFJlbmRlckxheWVyJiByb290TGF5ZXIpIGNvbnN0
OwogCiAgICAgdm9pZCBlbnN1cmVSb290TGF5ZXIoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oIGIvU291cmNlL1dlYktpdC9t
YWMvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgKaW5kZXggM2UzYTVhOC4uYzZjMDY3
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21l
Q2xpZW50LmgKKysrIGIvU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21l
Q2xpZW50LmgKQEAgLTE2Myw2ICsxNjMsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIHNo
b3VsZFBhaW50RW50aXJlQ29udGVudHMoKSBjb25zdCBvdmVycmlkZTsKIAogICAgIHZpcnR1YWwg
dm9pZCBhdHRhY2hSb290R3JhcGhpY3NMYXllcihXZWJDb3JlOjpGcmFtZSosIFdlYkNvcmU6Okdy
YXBoaWNzTGF5ZXIqKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoVmlld092ZXJs
YXlHcmFwaGljc0xheWVyKFdlYkNvcmU6OkZyYW1lKiwgV2ViQ29yZTo6R3JhcGhpY3NMYXllciop
IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc09uZVNob3REcmF3aW5nU3luY2hy
b25pemF0aW9uKCkgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlQ29tcG9zaXRp
bmdMYXllckZsdXNoKCkgb3ZlcnJpZGU7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFj
L1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5tbSBiL1NvdXJjZS9XZWJLaXQvbWFjL1dl
YkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5tbQppbmRleCA5MzZmNDU0Li4xOWFkYmRkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGll
bnQubW0KKysrIGIvU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xp
ZW50Lm1tCkBAIC05MjQsNiArOTI0LDExIEBAIHZvaWQgV2ViQ2hyb21lQ2xpZW50OjphdHRhY2hS
b290R3JhcGhpY3NMYXllcihGcmFtZSogZnJhbWUsIEdyYXBoaWNzTGF5ZXIqIGdyYXBoCiAgICAg
RU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKIH0KIAordm9pZCBXZWJDaHJvbWVDbGllbnQ6OmF0
dGFjaFZpZXdPdmVybGF5R3JhcGhpY3NMYXllcihGcmFtZSosIEdyYXBoaWNzTGF5ZXIqKQorewor
ICAgIC8vIEZJWE1FOiBJZiB3ZSB3YW50IHZpZXctcmVsYXRpdmUgcGFnZSBvdmVybGF5cyBpbiBX
ZWJLaXQxLCB0aGlzIHdvdWxkIGJlIHRoZSBwbGFjZSB0byBob29rIHRoZW0gdXAuCit9CisKIHZv
aWQgV2ViQ2hyb21lQ2xpZW50OjpzZXROZWVkc09uZVNob3REcmF3aW5nU3luY2hyb25pemF0aW9u
KCkKIHsKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJLaXQyL0NNYWtlTGlzdHMudHh0
CmluZGV4IDZiZGM1OWQuLjRhNDY1NDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NNYWtl
TGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQyL0NNYWtlTGlzdHMudHh0CkBAIC01NDMsOCAr
NTQzLDYgQEAgc2V0KFdlYktpdDJfU09VUkNFUwogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9GaW5k
Q29udHJvbGxlci5jcHAKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlSG9zdC5jcHAK
ICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvUGFnZUJhbm5lci5jcHAKLSAgICBXZWJQcm9jZXNzL1dl
YlBhZ2UvUGFnZU92ZXJsYXkuY3BwCi0gICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1BhZ2VPdmVybGF5
Q29udHJvbGxlci5jcHAKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvVGFwSGlnaGxpZ2h0Q29udHJv
bGxlci5jcHAKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViQmFja0ZvcndhcmRMaXN0UHJveHku
Y3BwCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkNvbnRleHRNZW51LmNwcApAQCAtNTU1LDYg
KzU1Myw3IEBAIHNldChXZWJLaXQyX1NPVVJDRVMKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
T3BlblBhbmVsUmVzdWx0TGlzdGVuZXIuY3BwCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBh
Z2UuY3BwCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VHcm91cFByb3h5LmNwcAorICAg
IFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlT3ZlcmxheS5jcHAKICAgICBXZWJQcm9jZXNzL1dl
YlBhZ2UvVmlzaXRlZExpbmtUYWJsZUNvbnRyb2xsZXIuY3BwCiAgICAgV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYlVuZG9TdGVwLmNwcAogKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViS2l0
Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGQwYTkyZjkuLjJkN2VjM2YgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9T
b3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTMwNyw4
ICszMDcsNiBAQAogCQkxQTkwQzFFRTEyNjRGRDUwMDAzRTQ0RDQgLyogV2ViRmluZE9wdGlvbnMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBOTBDMUVE
MTI2NEZENTAwMDNFNDRENCAvKiBXZWJGaW5kT3B0aW9ucy5oICovOyB9OwogCQkxQTkwQzFGNDEy
NjRGRDcxMDAzRTQ0RDQgLyogRmluZENvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBOTBDMUYyMTI2NEZENzEwMDNFNDRENCAvKiBGaW5k
Q29udHJvbGxlci5oICovOyB9OwogCQkxQTkwQzFGNTEyNjRGRDcxMDAzRTQ0RDQgLyogRmluZENv
bnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMUE5MEMxRjMxMjY0RkQ3MTAwM0U0NEQ0IC8qIEZpbmRDb250cm9sbGVyLmNwcCAqLzsgfTsK
LQkJMUE5MEMyMzcxMjY1MDcxNzAwM0U0NEQ0IC8qIFBhZ2VPdmVybGF5LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTkwQzIzNTEyNjUwNzE3MDAzRTQ0
RDQgLyogUGFnZU92ZXJsYXkuaCAqLzsgfTsKLQkJMUE5MEMyMzgxMjY1MDcxNzAwM0U0NEQ0IC8q
IFBhZ2VPdmVybGF5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDFBOTBDMjM2MTI2NTA3MTcwMDNFNDRENCAvKiBQYWdlT3ZlcmxheS5jcHAgKi87IH07
CiAJCTFBOTEwMDcxMTI2Njc1QzQwMDE4NDJGNSAvKiBGaW5kSW5kaWNhdG9yLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTkxMDA2RjEyNjY3NUMzMDAx
ODQyRjUgLyogRmluZEluZGljYXRvci5oICovOyB9OwogCQkxQTkxMDA3MjEyNjY3NUM0MDAxODQy
RjUgLyogRmluZEluZGljYXRvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAxQTkxMDA3MDEyNjY3NUM0MDAxODQyRjUgLyogRmluZEluZGljYXRvci5j
cHAgKi87IH07CiAJCTFBOTJEQzExMTJGOEJBNDYwMDE3QUY2NSAvKiBMYXllclRyZWVDb250ZXh0
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTkyREMx
MDEyRjhCQTQ2MDAxN0FGNjUgLyogTGF5ZXJUcmVlQ29udGV4dC5oICovOyB9OwpAQCAtNTY4LDgg
KzU2Niw2IEBACiAJCTI5RDU1REYyMTYxQkY5RjEwMDMxQTJFMyAvKiBXZWJQYWdlR3JvdXBQcm94
eU1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAyOUQ1NURGMDE2MUJGOUYxMDAzMUEyRTMgLyogV2ViUGFnZUdyb3VwUHJveHlNZXNzYWdlcy5o
ICovOyB9OwogCQkyRDEyNUM1RTE4NTdFQTA1MDAzQkEzQ0IgLyogVmlld0dlc3R1cmVDb250cm9s
bGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRDEy
NUM1QzE4NTdFQTA1MDAzQkEzQ0IgLyogVmlld0dlc3R1cmVDb250cm9sbGVyLmggKi87IH07CiAJ
CTJEMTI1QzVGMTg1N0VBMDUwMDNCQTNDQiAvKiBWaWV3R2VzdHVyZUNvbnRyb2xsZXJNYWMubW0g
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRDEyNUM1RDE4
NTdFQTA1MDAzQkEzQ0IgLyogVmlld0dlc3R1cmVDb250cm9sbGVyTWFjLm1tICovOyB9OwotCQky
RDE0MEVBRjE4RjM3QkUwMDA1RTc1QTAgLyogUGFnZU92ZXJsYXlDb250cm9sbGVyLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJEMTQwRUFEMThGMzdC
RTAwMDVFNzVBMCAvKiBQYWdlT3ZlcmxheUNvbnRyb2xsZXIuY3BwICovOyB9OwotCQkyRDE0MEVC
MDE4RjM3QkUwMDA1RTc1QTAgLyogUGFnZU92ZXJsYXlDb250cm9sbGVyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRDE0MEVBRTE4RjM3QkUwMDA1RTc1
QTAgLyogUGFnZU92ZXJsYXlDb250cm9sbGVyLmggKi87IH07CiAJCTJEMUI1RDVEMTg1ODY5Qzgw
MDZDNjU5NiAvKiBWaWV3R2VzdHVyZUNvbnRyb2xsZXJNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkQxQjVENUIxODU4NjlD
ODAwNkM2NTk2IC8qIFZpZXdHZXN0dXJlQ29udHJvbGxlck1lc3NhZ2VSZWNlaXZlci5jcHAgKi87
IH07CiAJCTJEMUI1RDVFMTg1ODY5QzgwMDZDNjU5NiAvKiBWaWV3R2VzdHVyZUNvbnRyb2xsZXJN
ZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MkQxQjVENUMxODU4NjlDODAwNkM2NTk2IC8qIFZpZXdHZXN0dXJlQ29udHJvbGxlck1lc3NhZ2Vz
LmggKi87IH07CiAJCTJEMjhGM0U0MTg4NUNDQzEwMDRCOUVBRSAvKiBXZWJDaHJvbWVDbGllbnRJ
T1MubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRDI4
RjNFMDE4ODVDQ0MxMDA0QjlFQUUgLyogV2ViQ2hyb21lQ2xpZW50SU9TLm1tICovOyB9OwpAQCAt
NTg2LDYgKzU4Miw4IEBACiAJCTJENDI5QkZEMTcyMUUyQzcwMEVDNjgxRiAvKiBQREZQbHVnaW5Q
YXNzd29yZEZpZWxkLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMkQ0MjlCRkIxNzIxRTJCQTAwRUM2ODFGIC8qIFBERlBsdWdpblBhc3N3b3JkRmllbGQu
bW0gKi87IH07CiAJCTJENDdCNTZDMTgxMDcxNEUwMDNBM0FFRSAvKiBSZW1vdGVMYXllckJhY2tp
bmdTdG9yZS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDJENDdCNTZBMTgxMDcxNEUwMDNBM0FFRSAvKiBSZW1vdGVMYXllckJhY2tpbmdTdG9yZS5tbSAq
LzsgfTsKIAkJMkQ0N0I1NkQxODEwNzE0RTAwM0EzQUVFIC8qIFJlbW90ZUxheWVyQmFja2luZ1N0
b3JlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRDQ3
QjU2QjE4MTA3MTRFMDAzQTNBRUUgLyogUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmUuaCAqLzsgfTsK
KwkJMkQ1QzlEMDUxOUM4MUQ4RjAwQjNDNUMxIC8qIFdlYlBhZ2VPdmVybGF5LmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJENUM5RDAzMTlDODFEOEYw
MEIzQzVDMSAvKiBXZWJQYWdlT3ZlcmxheS5jcHAgKi87IH07CisJCTJENUM5RDA2MTlDODFEOEYw
MEIzQzVDMSAvKiBXZWJQYWdlT3ZlcmxheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMkQ1QzlEMDQxOUM4MUQ4RjAwQjNDNUMxIC8qIFdlYlBhZ2VPdmVy
bGF5LmggKi87IH07CiAJCTJENkFCNTQxMTkyQjFDNEEwMDNBOUZEMSAvKiBXS1BERlBhZ2VOdW1i
ZXJJbmRpY2F0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDJENkFCNTNGMTkyQjFDNEEwMDNBOUZEMSAvKiBXS1BERlBhZ2VOdW1iZXJJbmRpY2F0b3Iu
aCAqLzsgfTsKIAkJMkQ2QUI1NDIxOTJCMUM0QTAwM0E5RkQxIC8qIFdLUERGUGFnZU51bWJlcklu
ZGljYXRvci5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDJENkFCNTQwMTkyQjFDNEEwMDNBOUZEMSAvKiBXS1BERlBhZ2VOdW1iZXJJbmRpY2F0b3IubW0g
Ki87IH07CiAJCTJENkIzNzFCMThBOTY3QUQwMDQyQUU4MCAvKiBfV0tUaHVtYm5haWxWaWV3Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRDZCMzcxOTE4
QTk2N0FEMDA0MkFFODAgLyogX1dLVGh1bWJuYWlsVmlldy5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0yMjcxLDggKzIyNjksNiBAQAogCQkxQTkw
QzFFRDEyNjRGRDUwMDAzRTQ0RDQgLyogV2ViRmluZE9wdGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gV2ViRmluZE9wdGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMUE5MEMxRjIxMjY0RkQ3MTAwM0U0NEQ0IC8qIEZpbmRDb250cm9sbGVyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZpbmRDb250cm9sbGVyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBOTBDMUYzMTI2NEZENzEwMDNFNDRENCAvKiBGaW5kQ29u
dHJvbGxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGaW5kQ29u
dHJvbGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTFBOTBDMjM1MTI2NTA3
MTcwMDNFNDRENCAvKiBQYWdlT3ZlcmxheS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBQYWdlT3ZlcmxheS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxQTkwQzIz
NjEyNjUwNzE3MDAzRTQ0RDQgLyogUGFnZU92ZXJsYXkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gUGFnZU92ZXJsYXkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkxQTkxMDA2RjEyNjY3NUMzMDAxODQyRjUgLyogRmluZEluZGljYXRvci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGaW5kSW5kaWNhdG9yLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTFBOTEwMDcwMTI2Njc1QzQwMDE4NDJGNSAvKiBGaW5kSW5kaWNh
dG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZpbmRJbmRpY2F0
b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQTkyREMxMDEyRjhCQTQ2MDAx
N0FGNjUgLyogTGF5ZXJUcmVlQ29udGV4dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBMYXllclRyZWVDb250ZXh0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0y
NTU4LDggKzI1NTQsNiBAQAogCQkyOUQ1NURGMDE2MUJGOUYxMDAzMUEyRTMgLyogV2ViUGFnZUdy
b3VwUHJveHlNZXNzYWdlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJQ
YWdlR3JvdXBQcm94eU1lc3NhZ2VzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJE
MTI1QzVDMTg1N0VBMDUwMDNCQTNDQiAvKiBWaWV3R2VzdHVyZUNvbnRyb2xsZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmlld0dlc3R1cmVDb250cm9sbGVyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJEMTI1QzVEMTg1N0VBMDUwMDNCQTNDQiAvKiBWaWV3
R2VzdHVyZUNvbnRyb2xsZXJNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7
IHBhdGggPSBWaWV3R2VzdHVyZUNvbnRyb2xsZXJNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCTJEMTQwRUFEMThGMzdCRTAwMDVFNzVBMCAvKiBQYWdlT3ZlcmxheUNvbnRyb2xs
ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUGFnZU92ZXJsYXlD
b250cm9sbGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMkQxNDBFQUUxOEYz
N0JFMDAwNUU3NUEwIC8qIFBhZ2VPdmVybGF5Q29udHJvbGxlci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBQYWdlT3ZlcmxheUNvbnRyb2xsZXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMkQxQjVENUExODU4NjU5OTAwNkM2NTk2IC8qIFZpZXdHZXN0dXJlQ29u
dHJvbGxlci5tZXNzYWdlcy5pbiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBWaWV3R2VzdHVyZUNvbnRyb2xsZXIubWVzc2FnZXMu
aW47IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJEMUI1RDVCMTg1ODY5QzgwMDZDNjU5
NiAvKiBWaWV3R2VzdHVyZUNvbnRyb2xsZXJNZXNzYWdlUmVjZWl2ZXIuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVmlld0dlc3R1cmVDb250cm9sbGVyTWVzc2FnZVJl
Y2VpdmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkQxQjVENUMxODU4NjlD
ODAwNkM2NTk2IC8qIFZpZXdHZXN0dXJlQ29udHJvbGxlck1lc3NhZ2VzLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZpZXdHZXN0dXJlQ29udHJvbGxlck1lc3NhZ2VzLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNTgyLDYgKzI1NzYsOCBAQAogCQkyRDQyOUJG
QjE3MjFFMkJBMDBFQzY4MUYgLyogUERGUGx1Z2luUGFzc3dvcmRGaWVsZC5tbSAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IFBERlBsdWdpblBhc3N3b3JkRmllbGQubW07
IHBhdGggPSBQREYvUERGUGx1Z2luUGFzc3dvcmRGaWVsZC5tbTsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMkQ0N0I1NkExODEwNzE0RTAwM0EzQUVFIC8qIFJlbW90ZUxheWVyQmFja2lu
Z1N0b3JlLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gUmVtb3Rl
TGF5ZXJCYWNraW5nU3RvcmUubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJENDdC
NTZCMTgxMDcxNEUwMDNBM0FFRSAvKiBSZW1vdGVMYXllckJhY2tpbmdTdG9yZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW1vdGVMYXllckJhY2tpbmdTdG9yZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyRDVDOUQwMzE5QzgxRDhGMDBCM0M1QzEgLyogV2Vi
UGFnZU92ZXJsYXkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2Vi
UGFnZU92ZXJsYXkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyRDVDOUQwNDE5
QzgxRDhGMDBCM0M1QzEgLyogV2ViUGFnZU92ZXJsYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gV2ViUGFnZU92ZXJsYXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMkQ2QUI1M0YxOTJCMUM0QTAwM0E5RkQxIC8qIFdLUERGUGFnZU51bWJlckluZGljYXRvci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBXS1BERlBhZ2VOdW1iZXJJbmRpY2F0
b3IuaDsgcGF0aCA9IGlvcy9XS1BERlBhZ2VOdW1iZXJJbmRpY2F0b3IuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMkQ2QUI1NDAxOTJCMUM0QTAwM0E5RkQxIC8qIFdLUERGUGFnZU51
bWJlckluZGljYXRvci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9
IFdLUERGUGFnZU51bWJlckluZGljYXRvci5tbTsgcGF0aCA9IGlvcy9XS1BERlBhZ2VOdW1iZXJJ
bmRpY2F0b3IubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJENkIzNzE5MThBOTY3
QUQwMDQyQUU4MCAvKiBfV0tUaHVtYm5haWxWaWV3LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IF9XS1RodW1ibmFpbFZpZXcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTU3MDEsMTAgKzU2OTcsOCBAQAogCQkJCTFBOTBDMUYyMTI2NEZENzEwMDNFNDRENCAvKiBG
aW5kQ29udHJvbGxlci5oICovLAogCQkJCTdDMzg3NDMzMTcyRjU2MTUwMDFCRDg4QSAvKiBQYWdl
QmFubmVyLmNwcCAqLywKIAkJCQk3Q0Y0N0ZGOTE3Mjc1QzU3MDA4QUNCOTEgLyogUGFnZUJhbm5l
ci5oICovLAotCQkJCTFBOTBDMjM2MTI2NTA3MTcwMDNFNDRENCAvKiBQYWdlT3ZlcmxheS5jcHAg
Ki8sCi0JCQkJMUE5MEMyMzUxMjY1MDcxNzAwM0U0NEQ0IC8qIFBhZ2VPdmVybGF5LmggKi8sCi0J
CQkJMkQxNDBFQUQxOEYzN0JFMDAwNUU3NUEwIC8qIFBhZ2VPdmVybGF5Q29udHJvbGxlci5jcHAg
Ki8sCi0JCQkJMkQxNDBFQUUxOEYzN0JFMDAwNUU3NUEwIC8qIFBhZ2VPdmVybGF5Q29udHJvbGxl
ci5oICovLAorCQkJCTJENUM5RDAzMTlDODFEOEYwMEIzQzVDMSAvKiBXZWJQYWdlT3ZlcmxheS5j
cHAgKi8sCisJCQkJMkQ1QzlEMDQxOUM4MUQ4RjAwQjNDNUMxIC8qIFdlYlBhZ2VPdmVybGF5Lmgg
Ki8sCiAJCQkJNTE5MkQ1NzExOTYxRkEyRjAwQ0QxOUFBIC8qIFNlcnZpY2VzT3ZlcmxheUNvbnRy
b2xsZXIuaCAqLywKIAkJCQkyRDgxOUI5OTE4NjI3NUIzMDAxRjAzRDEgLyogVmlld0dlc3R1cmVH
ZW9tZXRyeUNvbGxlY3Rvci5jcHAgKi8sCiAJCQkJMkQ4MTlCOUExODYyNzVCMzAwMUYwM0QxIC8q
IFZpZXdHZXN0dXJlR2VvbWV0cnlDb2xsZWN0b3IuaCAqLywKQEAgLTcwNDYsNiArNzA0MCw3IEBA
CiAJCQkJN0M4NUZEODAxOTM0MTY2NTAwMDE3N0M0IC8qIFdlYlByZWZlcmVuY2VzS2V5cy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNTEyRjU4OTcxMkE4ODM4ODAwNjI5NTMwIC8qIEF1dGhlbnRpY2F0
aW9uQ2hhbGxlbmdlUHJveHkuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBNDQ1QjlGMTg0RDVGQjUw
MDRCMzQxNCAvKiBXS0NvbnRleHRJbmplY3RlZEJ1bmRsZUNsaWVudC5oIGluIEhlYWRlcnMgKi8s
CisJCQkJMkQ1QzlEMDYxOUM4MUQ4RjAwQjNDNUMxIC8qIFdlYlBhZ2VPdmVybGF5LmggaW4gSGVh
ZGVycyAqLywKIAkJCQk1MTJGNTg5OTEyQTg4Mzg4MDA2Mjk1MzAgLyogQXV0aGVudGljYXRpb25E
ZWNpc2lvbkxpc3RlbmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MThFOEVGOTE2QjIwOTFDMDBF
OTE0MjkgLyogQXV0aGVudGljYXRpb25NYW5hZ2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTJG
NThBMzEyQTg4M0FEMDA2Mjk1MzAgLyogQXV0aGVudGljYXRpb25NYW5hZ2VyTWVzc2FnZXMuaCBp
biBIZWFkZXJzICovLApAQCAtNzE1Myw3ICs3MTQ4LDYgQEAKIAkJCQkxQUU1MkY5MjE5MjAxREE3
MDBBMUZBMzcgLyogQVBJQ29udGV4dENvbmZpZ3VyYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJ
CTdDMzYxRDczMTkyN0ZBMzYwMDM2QTU5RCAvKiBXZWJTY3JpcHRNZXNzYWdlSGFuZGxlci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJRTEwNUZFNTQxOEQ3QjlERTAwOEY1N0E4IC8qIEVkaXRpbmdSYW5n
ZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMkQxNDBFQjAxOEYzN0JFMDAwNUU3NUEwIC8qIFBhZ2VP
dmVybGF5Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxNzc1M0YxMThCQUJGMDAw
N0Q5RTlBIC8qIEdlbmVyaWNDYWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzc5QTg3MzYx
OEJCRkE0MzAwNTg4QUYyIC8qIF9XS0FjdGl2YXRlZEVsZW1lbnRJbmZvSW50ZXJuYWwuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUJDMDZGNDJGMTJEQkI5QjYwMDJENzhERSAvKiBHZW9sb2NhdGlvblBl
cm1pc3Npb25SZXF1ZXN0TWFuYWdlci5oIGluIEhlYWRlcnMgKi8sCkBAIC03Mjc2LDcgKzcyNzAs
NiBAQAogCQkJCTFBNUIxQzUxMTg5ODYwNkYwMDRGQ0Y5QiAvKiBXS05hdmlnYXRpb24uaCBpbiBI
ZWFkZXJzICovLAogCQkJCTdDRjQ3RkZCMTcyNzVDNTcwMDhBQ0I5MSAvKiBQYWdlQmFubmVyLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlCQzZFREFBNjExMTI3MUM2MDBFNzY3OEIgLyogUGFnZUNsaWVu
dC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMUE5MEMyMzcxMjY1MDcxNzAwM0U0NEQ0IC8qIFBhZ2VP
dmVybGF5LmggaW4gSGVhZGVycyAqLywKIAkJCQlDNTc0QTU4MTEyRTY2NjgxMDAyREZFOTggLyog
UGFzdGVib2FyZFR5cGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMTk1ODJEMzE1M0NCRkQ3MDBC
NjA4NzUgLyogUERGS2l0SW1wb3J0cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFFMDBENEYxODJE
NkY1MDAwMDg3REQ3IC8qIFdLQnJvd3NpbmdDb250ZXh0SGFuZGxlSW50ZXJuYWwuaCBpbiBIZWFk
ZXJzICovLApAQCAtODkyOCw3ICs4OTIxLDYgQEAKIAkJCQk1MUUzNTFGNTE4MEY1Qzc1MDBFNTNC
RTkgLyogV2ViSURCRmFjdG9yeUJhY2tlbmQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0MzODc0
MzQxNzJGNTYxNTAwMUJEODhBIC8qIFBhZ2VCYW5uZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
N0M2RDM3RkMxNzJGNTU1RjAwOUQyODQ3IC8qIFBhZ2VCYW5uZXJNYWMubW0gaW4gU291cmNlcyAq
LywKLQkJCQkxQTkwQzIzODEyNjUwNzE3MDAzRTQ0RDQgLyogUGFnZU92ZXJsYXkuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQzU3NEE1ODIxMkU2NjY4MTAwMkRGRTk4IC8qIFBhc3RlYm9hcmRUeXBl
cy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUUxOTU4MkQ2MTUzQ0MwNTQwMEI2MDg3NSAvKiBQREZL
aXRJbXBvcnRzLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMkQ4NzBEMTAxNjIzNEZGRTAwMEEzRjIw
IC8qIFBERlBsdWdpbi5tbSBpbiBTb3VyY2VzICovLApAQCAtOTEyOCw3ICs5MTIwLDYgQEAKIAkJ
CQlBNTQyOTNBNTE5NUE0M0REMDAyNzgyQzcgLyogV0tJbnNwZWN0b3JOb2RlU2VhcmNoR2VzdHVy
ZVJlY29nbml6ZXIubW0gaW4gU291cmNlcyAqLywKIAkJCQlDMDMzN0RBRTEyN0EyNEZFMDA4RkY0
RjQgLyogV2ViRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkMwMzJEQkExMEY0MzgwRjAw
NThDMTVBIC8qIFdlYkV2ZW50Q29udmVyc2lvbi5jcHAgaW4gU291cmNlcyAqLywKLQkJCQkyRDE0
MEVBRjE4RjM3QkUwMDA1RTc1QTAgLyogUGFnZU92ZXJsYXlDb250cm9sbGVyLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUJDMTExQjVFMTEyRjYyOTgwMDMzN0JBQiAvKiBXZWJFdmVudEZhY3Rvcnku
bW0gaW4gU291cmNlcyAqLywKIAkJCQlBMTE4QTlFRTE5MDdBRDZGMDBGN0M5MkIgLyogUXVpY2tM
b29rRG9jdW1lbnREYXRhLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBM0REMUZEMTI1RTU5RjMw
MDQ1MTVFNiAvKiBXZWJGaW5kQ2xpZW50LmNwcCBpbiBTb3VyY2VzICovLApAQCAtOTIxMiw2ICs5
MjAzLDcgQEAKIAkJCQlDMDZDNjA5NTEyNEMxNDRCMDAwMTY4MkYgLyogV2ViUGFnZUNyZWF0aW9u
UGFyYW1ldGVycy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDNTlDNEE1ODE4QjgxMTc0MDA3QkRD
QjYgLyogQXNzaXN0ZWROb2RlSW5mb3JtYXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM3
QjYyMDcxMjlBMEE2NzAwRDE3NEE0IC8qIFdlYlBhZ2VHcm91cC5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQkyRDVDOUQwNTE5QzgxRDhGMDBCM0M1QzEgLyogV2ViUGFnZU92ZXJsYXkuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQkM3QjYyNTMxMkE0M0M5NjAwRDE3NEE0IC8qIFdlYlBhZ2VHcm91cERh
dGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM3QjYyMTYxMkE0MjE5QTAwRDE3NEE0IC8qIFdl
YlBhZ2VHcm91cFByb3h5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTI5RDU1REYxMTYxQkY5RjEw
MDMxQTJFMyAvKiBXZWJQYWdlR3JvdXBQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNl
cyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL2MvV0tCdW5kbGVBUElDYXN0LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlQVBJQ2FzdC5oCmluZGV4IGU2MzU0MDguLjBkNWI3
YzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
QVBJL2MvV0tCdW5kbGVBUElDYXN0LmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZUFQSUNhc3QuaApAQCAtNDksMTEgKzQ5LDExIEBA
IGNsYXNzIEluamVjdGVkQnVuZGxlTm9kZUhhbmRsZTsKIGNsYXNzIEluamVjdGVkQnVuZGxlUmFu
Z2VIYW5kbGU7CiBjbGFzcyBJbmplY3RlZEJ1bmRsZVNjcmlwdFdvcmxkOwogY2xhc3MgUGFnZUJh
bm5lcjsKLWNsYXNzIFBhZ2VPdmVybGF5OwogY2xhc3MgV2ViRnJhbWU7CiBjbGFzcyBXZWJJbnNw
ZWN0b3I7CiBjbGFzcyBXZWJQYWdlOwogY2xhc3MgV2ViUGFnZUdyb3VwUHJveHk7CitjbGFzcyBX
ZWJQYWdlT3ZlcmxheTsKIAogV0tfQUREX0FQSV9NQVBQSU5HKFdLQnVuZGxlQmFja0ZvcndhcmRM
aXN0SXRlbVJlZiwgSW5qZWN0ZWRCdW5kbGVCYWNrRm9yd2FyZExpc3RJdGVtKQogV0tfQUREX0FQ
SV9NQVBQSU5HKFdLQnVuZGxlQmFja0ZvcndhcmRMaXN0UmVmLCBJbmplY3RlZEJ1bmRsZUJhY2tG
b3J3YXJkTGlzdCkKQEAgLTY2LDcgKzY2LDcgQEAgV0tfQUREX0FQSV9NQVBQSU5HKFdLQnVuZGxl
TmF2aWdhdGlvbkFjdGlvblJlZiwgSW5qZWN0ZWRCdW5kbGVOYXZpZ2F0aW9uQWN0aW9uKQogV0tf
QUREX0FQSV9NQVBQSU5HKFdLQnVuZGxlTm9kZUhhbmRsZVJlZiwgSW5qZWN0ZWRCdW5kbGVOb2Rl
SGFuZGxlKQogV0tfQUREX0FQSV9NQVBQSU5HKFdLQnVuZGxlUGFnZUJhbm5lclJlZiwgUGFnZUJh
bm5lcikKIFdLX0FERF9BUElfTUFQUElORyhXS0J1bmRsZVBhZ2VHcm91cFJlZiwgV2ViUGFnZUdy
b3VwUHJveHkpCi1XS19BRERfQVBJX01BUFBJTkcoV0tCdW5kbGVQYWdlT3ZlcmxheVJlZiwgUGFn
ZU92ZXJsYXkpCitXS19BRERfQVBJX01BUFBJTkcoV0tCdW5kbGVQYWdlT3ZlcmxheVJlZiwgV2Vi
UGFnZU92ZXJsYXkpCiBXS19BRERfQVBJX01BUFBJTkcoV0tCdW5kbGVQYWdlUmVmLCBXZWJQYWdl
KQogV0tfQUREX0FQSV9NQVBQSU5HKFdLQnVuZGxlUmFuZ2VIYW5kbGVSZWYsIEluamVjdGVkQnVu
ZGxlUmFuZ2VIYW5kbGUpCiBXS19BRERfQVBJX01BUFBJTkcoV0tCdW5kbGVSZWYsIEluamVjdGVk
QnVuZGxlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvYy9XS0J1bmRsZVBhZ2UuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZVBhZ2UuY3BwCmluZGV4IDIxMTRmNTguLjI5NDA1
YjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
QVBJL2MvV0tCdW5kbGVQYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlUGFnZS5jcHAKQEAgLTQ3LDEyICs0NywxNSBAQAog
I2luY2x1ZGUgIldlYkZ1bGxTY3JlZW5NYW5hZ2VyLmgiCiAjaW5jbHVkZSAiV2ViSW1hZ2UuaCIK
ICNpbmNsdWRlICJXZWJQYWdlLmgiCisjaW5jbHVkZSAiV2ViUGFnZU92ZXJsYXkuaCIKICNpbmNs
dWRlICJXZWJSZW5kZXJMYXllci5oIgogI2luY2x1ZGUgIldlYlJlbmRlck9iamVjdC5oIgogI2lu
Y2x1ZGUgPFdlYkNvcmUvQVhPYmplY3RDYWNoZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvQWNjZXNz
aWJpbGl0eU9iamVjdC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvTWFpbkZyYW1lLmg+CiAjaW5jbHVk
ZSA8V2ViQ29yZS9QYWdlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9QYWdlT3ZlcmxheS5oPgorI2lu
Y2x1ZGUgPFdlYkNvcmUvUGFnZU92ZXJsYXlDb250cm9sbGVyLmg+CiAjaW5jbHVkZSA8V2ViQ29y
ZS9VUkwuaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAKQEAgLTM1NCwyMiArMzU3
LDIyIEBAIFdLQnVuZGxlQmFja0ZvcndhcmRMaXN0UmVmIFdLQnVuZGxlUGFnZUdldEJhY2tGb3J3
YXJkTGlzdChXS0J1bmRsZVBhZ2VSZWYgcGFnZVJlCiAKIHZvaWQgV0tCdW5kbGVQYWdlSW5zdGFs
bFBhZ2VPdmVybGF5KFdLQnVuZGxlUGFnZVJlZiBwYWdlUmVmLCBXS0J1bmRsZVBhZ2VPdmVybGF5
UmVmIHBhZ2VPdmVybGF5UmVmKQogewotICAgIHRvSW1wbChwYWdlUmVmKS0+aW5zdGFsbFBhZ2VP
dmVybGF5KHRvSW1wbChwYWdlT3ZlcmxheVJlZikpOworICAgIHRvSW1wbChwYWdlUmVmKS0+Y29y
ZVBhZ2UoKS0+cGFnZU92ZXJsYXlDb250cm9sbGVyKCkuaW5zdGFsbFBhZ2VPdmVybGF5KHRvSW1w
bChwYWdlT3ZlcmxheVJlZiktPmNvcmVPdmVybGF5KCksIFdlYkNvcmU6OlBhZ2VPdmVybGF5OjpG
YWRlTW9kZTo6RG9Ob3RGYWRlKTsKIH0KIAogdm9pZCBXS0J1bmRsZVBhZ2VVbmluc3RhbGxQYWdl
T3ZlcmxheShXS0J1bmRsZVBhZ2VSZWYgcGFnZVJlZiwgV0tCdW5kbGVQYWdlT3ZlcmxheVJlZiBw
YWdlT3ZlcmxheVJlZikKIHsKLSAgICB0b0ltcGwocGFnZVJlZiktPnVuaW5zdGFsbFBhZ2VPdmVy
bGF5KHRvSW1wbChwYWdlT3ZlcmxheVJlZikpOworICAgIHRvSW1wbChwYWdlUmVmKS0+Y29yZVBh
Z2UoKS0+cGFnZU92ZXJsYXlDb250cm9sbGVyKCkudW5pbnN0YWxsUGFnZU92ZXJsYXkodG9JbXBs
KHBhZ2VPdmVybGF5UmVmKS0+Y29yZU92ZXJsYXkoKSwgV2ViQ29yZTo6UGFnZU92ZXJsYXk6OkZh
ZGVNb2RlOjpEb05vdEZhZGUpOwogfQogCiB2b2lkIFdLQnVuZGxlUGFnZUluc3RhbGxQYWdlT3Zl
cmxheVdpdGhBbmltYXRpb24oV0tCdW5kbGVQYWdlUmVmIHBhZ2VSZWYsIFdLQnVuZGxlUGFnZU92
ZXJsYXlSZWYgcGFnZU92ZXJsYXlSZWYpCiB7Ci0gICAgdG9JbXBsKHBhZ2VSZWYpLT5pbnN0YWxs
UGFnZU92ZXJsYXkodG9JbXBsKHBhZ2VPdmVybGF5UmVmKSwgUGFnZU92ZXJsYXk6OkZhZGVNb2Rl
OjpGYWRlKTsKKyAgICB0b0ltcGwocGFnZVJlZiktPmNvcmVQYWdlKCktPnBhZ2VPdmVybGF5Q29u
dHJvbGxlcigpLmluc3RhbGxQYWdlT3ZlcmxheSh0b0ltcGwocGFnZU92ZXJsYXlSZWYpLT5jb3Jl
T3ZlcmxheSgpLCBXZWJDb3JlOjpQYWdlT3ZlcmxheTo6RmFkZU1vZGU6OkZhZGUpOwogfQogCiB2
b2lkIFdLQnVuZGxlUGFnZVVuaW5zdGFsbFBhZ2VPdmVybGF5V2l0aEFuaW1hdGlvbihXS0J1bmRs
ZVBhZ2VSZWYgcGFnZVJlZiwgV0tCdW5kbGVQYWdlT3ZlcmxheVJlZiBwYWdlT3ZlcmxheVJlZikK
IHsKLSAgICB0b0ltcGwocGFnZVJlZiktPnVuaW5zdGFsbFBhZ2VPdmVybGF5KHRvSW1wbChwYWdl
T3ZlcmxheVJlZiksIFBhZ2VPdmVybGF5OjpGYWRlTW9kZTo6RmFkZSk7CisgICAgdG9JbXBsKHBh
Z2VSZWYpLT5jb3JlUGFnZSgpLT5wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKS51bmluc3RhbGxQYWdl
T3ZlcmxheSh0b0ltcGwocGFnZU92ZXJsYXlSZWYpLT5jb3JlT3ZlcmxheSgpLCBXZWJDb3JlOjpQ
YWdlT3ZlcmxheTo6RmFkZU1vZGU6OkZhZGUpOwogfQogCiB2b2lkIFdLQnVuZGxlUGFnZVNldFRv
cE92ZXJoYW5nSW1hZ2UoV0tCdW5kbGVQYWdlUmVmIHBhZ2VSZWYsIFdLSW1hZ2VSZWYgaW1hZ2VS
ZWYpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9jL1dLQnVuZGxlUGFnZU92ZXJsYXkuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZVBhZ2VPdmVybGF5LmNwcAppbmRleCBiYmE4
NjI2Li40MTQyMGIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlUGFnZU92ZXJsYXkuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVQYWdlT3ZlcmxheS5j
cHAKQEAgLTI3LDEwICsyNywxNyBAQAogI2luY2x1ZGUgIldLQnVuZGxlUGFnZU92ZXJsYXkuaCIK
IAogI2luY2x1ZGUgIkFQSUNsaWVudC5oIgotI2luY2x1ZGUgIlBhZ2VPdmVybGF5LmgiCiAjaW5j
bHVkZSAiV0tBUElDYXN0LmgiCisjaW5jbHVkZSAiV0tBcnJheS5oIgogI2luY2x1ZGUgIldLQnVu
ZGxlQVBJQ2FzdC5oIgorI2luY2x1ZGUgIldLTnVtYmVyLmgiCisjaW5jbHVkZSAiV0tSZXRhaW5Q
dHIuaCIKKyNpbmNsdWRlICJXS1NoYXJlZEFQSUNhc3QuaCIKKyNpbmNsdWRlICJXS1N0cmluZ1By
aXZhdGUuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dC5oPgorI2luY2x1ZGUg
PFdlYkNvcmUvUGFnZU92ZXJsYXkuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtTW91c2VF
dmVudC5oPgorI2luY2x1ZGUgPFdlYktpdC9XZWJQYWdlT3ZlcmxheS5oPgogCiBuYW1lc3BhY2Ug
QVBJIHsKIApAQCAtNDcsNyArNTQsNyBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBDbGllbnRUcmFpdHM8
V0tCdW5kbGVQYWdlT3ZlcmxheUFjY2Vzc2liaWxpdHlDbGllbnRCYXNlPiB7CiB1c2luZyBuYW1l
c3BhY2UgV2ViQ29yZTsKIHVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CiAKLWNsYXNzIFBhZ2VPdmVy
bGF5Q2xpZW50SW1wbCA6IEFQSTo6Q2xpZW50PFdLQnVuZGxlUGFnZU92ZXJsYXlDbGllbnRCYXNl
PiwgcHVibGljIFBhZ2VPdmVybGF5OjpDbGllbnQgeworY2xhc3MgUGFnZU92ZXJsYXlDbGllbnRJ
bXBsIDogQVBJOjpDbGllbnQ8V0tCdW5kbGVQYWdlT3ZlcmxheUNsaWVudEJhc2U+LCBwdWJsaWMg
V2ViUGFnZU92ZXJsYXk6OkNsaWVudCB7CiBwdWJsaWM6CiAgICAgZXhwbGljaXQgUGFnZU92ZXJs
YXlDbGllbnRJbXBsKFdLQnVuZGxlUGFnZU92ZXJsYXlDbGllbnRCYXNlKiBjbGllbnQpCiAgICAg
ewpAQCAtNjAsNjQgKzY3LDY0IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgLy8g
UGFnZU92ZXJsYXk6OkNsaWVudC4KLSAgICB2aXJ0dWFsIHZvaWQgcGFnZU92ZXJsYXlEZXN0cm95
ZWQoUGFnZU92ZXJsYXkqKQorICAgIC8vIFdlYlBhZ2VPdmVybGF5OjpDbGllbnQuCisgICAgdmly
dHVhbCB2b2lkIHBhZ2VPdmVybGF5RGVzdHJveWVkKFdlYlBhZ2VPdmVybGF5Jikgb3ZlcnJpZGUK
ICAgICB7CiAgICAgICAgIGRlbGV0ZSB0aGlzOwogICAgIH0KIAotICAgIHZpcnR1YWwgdm9pZCB3
aWxsTW92ZVRvV2ViUGFnZShQYWdlT3ZlcmxheSogcGFnZU92ZXJsYXksIFdlYlBhZ2UqIHBhZ2Up
CisgICAgdmlydHVhbCB2b2lkIHdpbGxNb3ZlVG9QYWdlKFdlYlBhZ2VPdmVybGF5JiBwYWdlT3Zl
cmxheSwgV2ViUGFnZSogcGFnZSkgb3ZlcnJpZGUKICAgICB7CiAgICAgICAgIGlmICghbV9jbGll
bnQud2lsbE1vdmVUb1BhZ2UpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgbV9jbGll
bnQud2lsbE1vdmVUb1BhZ2UodG9BUEkocGFnZU92ZXJsYXkpLCB0b0FQSShwYWdlKSwgbV9jbGll
bnQuYmFzZS5jbGllbnRJbmZvKTsKKyAgICAgICAgbV9jbGllbnQud2lsbE1vdmVUb1BhZ2UodG9B
UEkoJnBhZ2VPdmVybGF5KSwgdG9BUEkocGFnZSksIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7
CiAgICAgfQogICAgIAotICAgIHZpcnR1YWwgdm9pZCBkaWRNb3ZlVG9XZWJQYWdlKFBhZ2VPdmVy
bGF5KiBwYWdlT3ZlcmxheSwgV2ViUGFnZSogcGFnZSkKKyAgICB2aXJ0dWFsIHZvaWQgZGlkTW92
ZVRvUGFnZShXZWJQYWdlT3ZlcmxheSYgcGFnZU92ZXJsYXksIFdlYlBhZ2UqIHBhZ2UpIG92ZXJy
aWRlCiAgICAgewogICAgICAgICBpZiAoIW1fY2xpZW50LmRpZE1vdmVUb1BhZ2UpCiAgICAgICAg
ICAgICByZXR1cm47CiAKLSAgICAgICAgbV9jbGllbnQuZGlkTW92ZVRvUGFnZSh0b0FQSShwYWdl
T3ZlcmxheSksIHRvQVBJKHBhZ2UpLCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pOworICAgICAg
ICBtX2NsaWVudC5kaWRNb3ZlVG9QYWdlKHRvQVBJKCZwYWdlT3ZlcmxheSksIHRvQVBJKHBhZ2Up
LCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pOwogICAgIH0KIAotICAgIHZpcnR1YWwgdm9pZCBk
cmF3UmVjdChQYWdlT3ZlcmxheSogcGFnZU92ZXJsYXksIEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhp
Y3NDb250ZXh0LCBjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpCisgICAgdmlydHVhbCB2b2lkIGRy
YXdSZWN0KFdlYlBhZ2VPdmVybGF5JiBwYWdlT3ZlcmxheSwgR3JhcGhpY3NDb250ZXh0JiBncmFw
aGljc0NvbnRleHQsIGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCkgb3ZlcnJpZGUKICAgICB7CiAg
ICAgICAgIGlmICghbV9jbGllbnQuZHJhd1JlY3QpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAg
ICAgICAgbV9jbGllbnQuZHJhd1JlY3QodG9BUEkocGFnZU92ZXJsYXkpLCBncmFwaGljc0NvbnRl
eHQucGxhdGZvcm1Db250ZXh0KCksIHRvQVBJKGRpcnR5UmVjdCksIG1fY2xpZW50LmJhc2UuY2xp
ZW50SW5mbyk7CisgICAgICAgIG1fY2xpZW50LmRyYXdSZWN0KHRvQVBJKCZwYWdlT3ZlcmxheSks
IGdyYXBoaWNzQ29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKSwgdG9BUEkoZGlydHlSZWN0KSwgbV9j
bGllbnQuYmFzZS5jbGllbnRJbmZvKTsKICAgICB9CiAgICAgCi0gICAgdmlydHVhbCBib29sIG1v
dXNlRXZlbnQoUGFnZU92ZXJsYXkqIHBhZ2VPdmVybGF5LCBjb25zdCBXZWJNb3VzZUV2ZW50JiBl
dmVudCkKKyAgICB2aXJ0dWFsIGJvb2wgbW91c2VFdmVudChXZWJQYWdlT3ZlcmxheSYgcGFnZU92
ZXJsYXksIGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgZXZlbnQpIG92ZXJyaWRlCiAgICAgewog
ICAgICAgICBzd2l0Y2ggKGV2ZW50LnR5cGUoKSkgewotICAgICAgICBjYXNlIFdlYkV2ZW50OjpN
b3VzZURvd246IHsKKyAgICAgICAgY2FzZSBQbGF0Zm9ybU1vdXNlRXZlbnQ6OlR5cGU6Ok1vdXNl
UHJlc3NlZDogewogICAgICAgICAgICAgaWYgKCFtX2NsaWVudC5tb3VzZURvd24pCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgICAgICByZXR1cm4gbV9jbGllbnQubW91
c2VEb3duKHRvQVBJKHBhZ2VPdmVybGF5KSwgdG9BUEkoZXZlbnQucG9zaXRpb24oKSksIHRvQVBJ
KGV2ZW50LmJ1dHRvbigpKSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKKyAgICAgICAgICAg
IHJldHVybiBtX2NsaWVudC5tb3VzZURvd24odG9BUEkoJnBhZ2VPdmVybGF5KSwgdG9BUEkoZXZl
bnQucG9zaXRpb24oKSksIHRvQVBJKGV2ZW50LmJ1dHRvbigpKSwgbV9jbGllbnQuYmFzZS5jbGll
bnRJbmZvKTsKICAgICAgICAgfQotICAgICAgICBjYXNlIFdlYkV2ZW50OjpNb3VzZVVwOiB7Cisg
ICAgICAgIGNhc2UgUGxhdGZvcm1Nb3VzZUV2ZW50OjpUeXBlOjpNb3VzZVJlbGVhc2VkOiB7CiAg
ICAgICAgICAgICBpZiAoIW1fY2xpZW50Lm1vdXNlVXApCiAgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCi0gICAgICAgICAgICByZXR1cm4gbV9jbGllbnQubW91c2VVcCh0b0FQSShwYWdl
T3ZlcmxheSksIHRvQVBJKGV2ZW50LnBvc2l0aW9uKCkpLCB0b0FQSShldmVudC5idXR0b24oKSks
IG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7CisgICAgICAgICAgICByZXR1cm4gbV9jbGllbnQu
bW91c2VVcCh0b0FQSSgmcGFnZU92ZXJsYXkpLCB0b0FQSShldmVudC5wb3NpdGlvbigpKSwgdG9B
UEkoZXZlbnQuYnV0dG9uKCkpLCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pOwogICAgICAgICB9
Ci0gICAgICAgIGNhc2UgV2ViRXZlbnQ6Ok1vdXNlTW92ZTogewotICAgICAgICAgICAgaWYgKGV2
ZW50LmJ1dHRvbigpID09IFdlYk1vdXNlRXZlbnQ6Ok5vQnV0dG9uKSB7CisgICAgICAgIGNhc2Ug
UGxhdGZvcm1Nb3VzZUV2ZW50OjpUeXBlOjpNb3VzZU1vdmVkOiB7CisgICAgICAgICAgICBpZiAo
ZXZlbnQuYnV0dG9uKCkgPT0gTW91c2VCdXR0b246Ok5vQnV0dG9uKSB7CiAgICAgICAgICAgICAg
ICAgaWYgKCFtX2NsaWVudC5tb3VzZU1vdmVkKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKLSAgICAgICAgICAgICAgICByZXR1cm4gbV9jbGllbnQubW91c2VNb3ZlZCh0b0FQ
SShwYWdlT3ZlcmxheSksIHRvQVBJKGV2ZW50LnBvc2l0aW9uKCkpLCBtX2NsaWVudC5iYXNlLmNs
aWVudEluZm8pOworICAgICAgICAgICAgICAgIHJldHVybiBtX2NsaWVudC5tb3VzZU1vdmVkKHRv
QVBJKCZwYWdlT3ZlcmxheSksIHRvQVBJKGV2ZW50LnBvc2l0aW9uKCkpLCBtX2NsaWVudC5iYXNl
LmNsaWVudEluZm8pOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAvLyBUaGlzIGlzIGEg
TW91c2VNb3ZlIGV2ZW50IHdpdGggYSBtb3VzZSBidXR0b24gcHJlc3NlZC4gQ2FsbCBtb3VzZURy
YWdnZWQuCiAgICAgICAgICAgICBpZiAoIW1fY2xpZW50Lm1vdXNlRHJhZ2dlZCkKICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgICAgIHJldHVybiBtX2NsaWVudC5tb3Vz
ZURyYWdnZWQodG9BUEkocGFnZU92ZXJsYXkpLCB0b0FQSShldmVudC5wb3NpdGlvbigpKSwgdG9B
UEkoZXZlbnQuYnV0dG9uKCkpLCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pOworICAgICAgICAg
ICAgcmV0dXJuIG1fY2xpZW50Lm1vdXNlRHJhZ2dlZCh0b0FQSSgmcGFnZU92ZXJsYXkpLCB0b0FQ
SShldmVudC5wb3NpdGlvbigpKSwgdG9BUEkoZXZlbnQuYnV0dG9uKCkpLCBtX2NsaWVudC5iYXNl
LmNsaWVudEluZm8pOwogICAgICAgICB9CiAKICAgICAgICAgZGVmYXVsdDoKQEAgLTEyNSwxOCAr
MTMyLDQzIEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgdmlydHVhbCBX
S1R5cGVSZWYgY29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZShQYWdlT3ZlcmxheSogcGFn
ZU92ZXJsYXksIFdLU3RyaW5nUmVmIGF0dHJpYnV0ZSwgV0tUeXBlUmVmIHBhcmFtZXRlcikKKyAg
ICB2aXJ0dWFsIGJvb2wgY29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVTdHJpbmdWYWx1ZUZvclBv
aW50KFdlYlBhZ2VPdmVybGF5JiBwYWdlT3ZlcmxheSwgU3RyaW5nIGF0dHJpYnV0ZSwgV2ViQ29y
ZTo6RmxvYXRQb2ludCBwYXJhbWV0ZXIsIFN0cmluZyYgdmFsdWUpIG92ZXJyaWRlCiAgICAgewog
ICAgICAgICBpZiAoIW1fYWNjZXNzaWJpbGl0eUNsaWVudC5jbGllbnQoKS5jb3B5QWNjZXNzaWJp
bGl0eUF0dHJpYnV0ZVZhbHVlKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIHJldHVy
biBtX2FjY2Vzc2liaWxpdHlDbGllbnQuY2xpZW50KCkuY29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1
dGVWYWx1ZSh0b0FQSShwYWdlT3ZlcmxheSksIGF0dHJpYnV0ZSwgcGFyYW1ldGVyLCBtX2FjY2Vz
c2liaWxpdHlDbGllbnQuY2xpZW50KCkuYmFzZS5jbGllbnRJbmZvKTsKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiB3a1R5cGUgPSBtX2Fj
Y2Vzc2liaWxpdHlDbGllbnQuY2xpZW50KCkuY29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1
ZSh0b0FQSSgmcGFnZU92ZXJsYXkpLCB0b0NvcGllZEFQSShhdHRyaWJ1dGUpLCBXS1BvaW50Q3Jl
YXRlKFdLUG9pbnRNYWtlKHBhcmFtZXRlci54KCksIHBhcmFtZXRlci55KCkpKSwgbV9hY2Nlc3Np
YmlsaXR5Q2xpZW50LmNsaWVudCgpLmJhc2UuY2xpZW50SW5mbyk7CisgICAgICAgIGlmICh0b0lt
cGwod2tUeXBlLmdldCgpKS0+dHlwZSgpICE9IEFQSTo6U3RyaW5nOjpBUElUeXBlKQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB2YWx1ZSA9IHRvV1RGU3RyaW5nKHN0YXRpY19j
YXN0PFdLU3RyaW5nUmVmPih3a1R5cGUuZ2V0KCkpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorCisgICAgdmlydHVhbCBib29sIGNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlQm9vbFZh
bHVlRm9yUG9pbnQoV2ViUGFnZU92ZXJsYXkmIHBhZ2VPdmVybGF5LCBTdHJpbmcgYXR0cmlidXRl
LCBXZWJDb3JlOjpGbG9hdFBvaW50IHBhcmFtZXRlciwgYm9vbCYgdmFsdWUpIG92ZXJyaWRlCisg
ICAgeworICAgICAgICBpZiAoIW1fYWNjZXNzaWJpbGl0eUNsaWVudC5jbGllbnQoKS5jb3B5QWNj
ZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICBXS1JldGFpblB0cjxXS1R5cGVSZWY+IHdrVHlwZSA9IG1fYWNjZXNzaWJpbGl0eUNsaWVu
dC5jbGllbnQoKS5jb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlKHRvQVBJKCZwYWdlT3Zl
cmxheSksIHRvQ29waWVkQVBJKGF0dHJpYnV0ZSksIFdLUG9pbnRDcmVhdGUoV0tQb2ludE1ha2Uo
cGFyYW1ldGVyLngoKSwgcGFyYW1ldGVyLnkoKSkpLCBtX2FjY2Vzc2liaWxpdHlDbGllbnQuY2xp
ZW50KCkuYmFzZS5jbGllbnRJbmZvKTsKKyAgICAgICAgaWYgKHRvSW1wbCh3a1R5cGUuZ2V0KCkp
LT50eXBlKCkgIT0gQVBJOjpCb29sZWFuOjpBUElUeXBlKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICB2YWx1ZSA9IFdLQm9vbGVhbkdldFZhbHVlKHN0YXRpY19jYXN0PFdLQm9v
bGVhblJlZj4od2tUeXBlLmdldCgpKSk7CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAot
ICAgIHZpcnR1YWwgV0tBcnJheVJlZiBjb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZU5hbWVzKFBh
Z2VPdmVybGF5KiBwYWdlT3ZlcmxheSwgYm9vbCBwYXJhbWVyaXplZE5hbWVzKQorICAgIHZpcnR1
YWwgVmVjdG9yPFN0cmluZz4gY29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVOYW1lcyhXZWJQYWdl
T3ZlcmxheSYgcGFnZU92ZXJsYXksIGJvb2wgcGFyYW1lcml6ZWROYW1lcykgb3ZlcnJpZGUKICAg
ICB7CisgICAgICAgIFZlY3RvcjxTdHJpbmc+IG5hbWVzOwogICAgICAgICBpZiAoIW1fYWNjZXNz
aWJpbGl0eUNsaWVudC5jbGllbnQoKS5jb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZU5hbWVzKQot
ICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIHJldHVybiBtX2FjY2Vzc2liaWxpdHlDbGll
bnQuY2xpZW50KCkuY29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVOYW1lcyh0b0FQSShwYWdlT3Zl
cmxheSksIHBhcmFtZXJpemVkTmFtZXMsIG1fYWNjZXNzaWJpbGl0eUNsaWVudC5jbGllbnQoKS5i
YXNlLmNsaWVudEluZm8pOworICAgICAgICAgICAgcmV0dXJuIG5hbWVzOworICAgICAgICBXS1Jl
dGFpblB0cjxXS0FycmF5UmVmPiB3a05hbWVzID0gbV9hY2Nlc3NpYmlsaXR5Q2xpZW50LmNsaWVu
dCgpLmNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlTmFtZXModG9BUEkoJnBhZ2VPdmVybGF5KSwg
cGFyYW1lcml6ZWROYW1lcywgbV9hY2Nlc3NpYmlsaXR5Q2xpZW50LmNsaWVudCgpLmJhc2UuY2xp
ZW50SW5mbyk7CisKKyAgICAgICAgc2l6ZV90IGNvdW50ID0gV0tBcnJheUdldFNpemUod2tOYW1l
cy5nZXQoKSk7CisgICAgICAgIGZvciAoc2l6ZV90IGsgPSAwOyBrIDwgY291bnQ7IGsrKykgewor
ICAgICAgICAgICAgV0tUeXBlUmVmIGl0ZW0gPSBXS0FycmF5R2V0SXRlbUF0SW5kZXgod2tOYW1l
cy5nZXQoKSwgayk7CisgICAgICAgICAgICBpZiAodG9JbXBsKGl0ZW0pLT50eXBlKCkgPT0gQVBJ
OjpTdHJpbmc6OkFQSVR5cGUpCisgICAgICAgICAgICAgICAgbmFtZXMuYXBwZW5kKHRvV1RGU3Ry
aW5nKHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihpdGVtKSkpOworICAgICAgICB9CisKKyAgICAg
ICAgcmV0dXJuIG5hbWVzOwogICAgIH0KICAgICAKICAgICBBUEk6OkNsaWVudDxXS0J1bmRsZVBh
Z2VPdmVybGF5QWNjZXNzaWJpbGl0eUNsaWVudEJhc2U+IG1fYWNjZXNzaWJpbGl0eUNsaWVudDsK
QEAgLTE0NCw3ICsxNzYsNyBAQCBwcml2YXRlOgogCiBXS1R5cGVJRCBXS0J1bmRsZVBhZ2VPdmVy
bGF5R2V0VHlwZUlEKCkKIHsKLSAgICByZXR1cm4gdG9BUEkoUGFnZU92ZXJsYXk6OkFQSVR5cGUp
OworICAgIHJldHVybiB0b0FQSShXZWJQYWdlT3ZlcmxheTo6QVBJVHlwZSk7CiB9CiAKIFdLQnVu
ZGxlUGFnZU92ZXJsYXlSZWYgV0tCdW5kbGVQYWdlT3ZlcmxheUNyZWF0ZShXS0J1bmRsZVBhZ2VP
dmVybGF5Q2xpZW50QmFzZSogd2tDbGllbnQpCkBAIC0xNTUsMTQgKzE4NywxNCBAQCBXS0J1bmRs
ZVBhZ2VPdmVybGF5UmVmIFdLQnVuZGxlUGFnZU92ZXJsYXlDcmVhdGUoV0tCdW5kbGVQYWdlT3Zl
cmxheUNsaWVudEJhc2UqCiAgICAgYXV0byBjbGllbnRJbXBsID0gc3RkOjptYWtlX3VuaXF1ZTxQ
YWdlT3ZlcmxheUNsaWVudEltcGw+KHdrQ2xpZW50KTsKIAogICAgIC8vIEZJWE1FOiBMb29rcyBs
aWtlIHRoaXMgbGVha3MgdGhlIGNsaWVudEltcGwuCi0gICAgcmV0dXJuIHRvQVBJKFBhZ2VPdmVy
bGF5OjpjcmVhdGUoY2xpZW50SW1wbC5yZWxlYXNlKCkpLmxlYWtSZWYoKSk7CisgICAgcmV0dXJu
IHRvQVBJKFdlYlBhZ2VPdmVybGF5OjpjcmVhdGUoKmNsaWVudEltcGwucmVsZWFzZSgpKS5sZWFr
UmVmKCkpOwogfQogCiB2b2lkIFdLQnVuZGxlUGFnZU92ZXJsYXlTZXRBY2Nlc3NpYmlsaXR5Q2xp
ZW50KFdLQnVuZGxlUGFnZU92ZXJsYXlSZWYgYnVuZGxlUGFnZU92ZXJsYXlSZWYsIFdLQnVuZGxl
UGFnZU92ZXJsYXlBY2Nlc3NpYmlsaXR5Q2xpZW50QmFzZSogY2xpZW50KQogewogICAgIGlmIChj
bGllbnQgJiYgY2xpZW50LT52ZXJzaW9uKQogICAgICAgICByZXR1cm47Ci0gICAgc3RhdGljX2Nh
c3Q8UGFnZU92ZXJsYXlDbGllbnRJbXBsKj4odG9JbXBsKGJ1bmRsZVBhZ2VPdmVybGF5UmVmKS0+
Y2xpZW50KCkpLT5zZXRBY2Nlc3NpYmlsaXR5Q2xpZW50KGNsaWVudCk7CisgICAgc3RhdGljX2Nh
c3Q8UGFnZU92ZXJsYXlDbGllbnRJbXBsKj4oJnRvSW1wbChidW5kbGVQYWdlT3ZlcmxheVJlZikt
PmNsaWVudCgpKS0+c2V0QWNjZXNzaWJpbGl0eUNsaWVudChjbGllbnQpOwogfQogCiB2b2lkIFdL
QnVuZGxlUGFnZU92ZXJsYXlTZXROZWVkc0Rpc3BsYXkoV0tCdW5kbGVQYWdlT3ZlcmxheVJlZiBi
dW5kbGVQYWdlT3ZlcmxheVJlZiwgV0tSZWN0IHJlY3QpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAK
aW5kZXggYzJkNTExMDcuLmEyMDk3YjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAKQEAgLTg0
MCw3ICs4NDAsOSBAQCBQYXNzUmVmUHRyPFdlYkNvcmU6OlNlYXJjaFBvcHVwTWVudT4gV2ViQ2hy
b21lQ2xpZW50OjpjcmVhdGVTZWFyY2hQb3B1cE1lbnUoV2ViQwogCiBHcmFwaGljc0xheWVyRmFj
dG9yeSogV2ViQ2hyb21lQ2xpZW50OjpncmFwaGljc0xheWVyRmFjdG9yeSgpIGNvbnN0CiB7Ci0g
ICAgcmV0dXJuIG1fcGFnZS0+ZHJhd2luZ0FyZWEoKS0+Z3JhcGhpY3NMYXllckZhY3RvcnkoKTsK
KyAgICBpZiAoYXV0byBkcmF3aW5nQXJlYSA9IG1fcGFnZS0+ZHJhd2luZ0FyZWEoKSkKKyAgICAg
ICAgcmV0dXJuIGRyYXdpbmdBcmVhLT5ncmFwaGljc0xheWVyRmFjdG9yeSgpOworICAgIHJldHVy
biBudWxscHRyOwogfQogCiAjaWYgVVNFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FX0RJU1BMQVlf
TU9OSVRPUikKQEAgLTg1OCwxMiArODYwLDEwIEBAIHZvaWQgV2ViQ2hyb21lQ2xpZW50OjphdHRh
Y2hSb290R3JhcGhpY3NMYXllcihGcmFtZSosIEdyYXBoaWNzTGF5ZXIqIGxheWVyKQogICAgICAg
ICBtX3BhZ2UtPmV4aXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSgpOwogfQogCi1HcmFwaGlj
c0xheWVyKiBXZWJDaHJvbWVDbGllbnQ6OmRvY3VtZW50T3ZlcmxheUxheWVyRm9yRnJhbWUoRnJh
bWUmIGZyYW1lKQordm9pZCBXZWJDaHJvbWVDbGllbnQ6OmF0dGFjaFZpZXdPdmVybGF5R3JhcGhp
Y3NMYXllcihGcmFtZSogZnJhbWUsIEdyYXBoaWNzTGF5ZXIqIGdyYXBoaWNzTGF5ZXIpCiB7Ci0g
ICAgaWYgKCZmcmFtZSA9PSAmbV9wYWdlLT5jb3JlUGFnZSgpLT5tYWluRnJhbWUoKSkKLSAgICAg
ICAgcmV0dXJuIG1fcGFnZS0+cGFnZU92ZXJsYXlDb250cm9sbGVyKCkuZG9jdW1lbnRPdmVybGF5
Um9vdExheWVyKCk7Ci0KLSAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBpZiAoYXV0byBkcmF3aW5n
QXJlYSA9IG1fcGFnZS0+ZHJhd2luZ0FyZWEoKSkKKyAgICAgICAgZHJhd2luZ0FyZWEtPmF0dGFj
aFZpZXdPdmVybGF5R3JhcGhpY3NMYXllcihmcmFtZSwgZ3JhcGhpY3NMYXllcik7CiB9CiAKIHZv
aWQgV2ViQ2hyb21lQ2xpZW50OjpzZXROZWVkc09uZVNob3REcmF3aW5nU3luY2hyb25pemF0aW9u
KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQv
V2ViQ2hyb21lQ2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBw
b3J0L1dlYkNocm9tZUNsaWVudC5oCmluZGV4IDk4MmVhYWUuLmQwZTUzODcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50
LmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJv
bWVDbGllbnQuaApAQCAtMjE1LDEwICsyMTUsMTAgQEAgcHJpdmF0ZToKIAogICAgIHZpcnR1YWwg
V2ViQ29yZTo6R3JhcGhpY3NMYXllckZhY3RvcnkqIGdyYXBoaWNzTGF5ZXJGYWN0b3J5KCkgY29u
c3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIGF0dGFjaFJvb3RHcmFwaGljc0xheWVyKFdl
YkNvcmU6OkZyYW1lKiwgV2ViQ29yZTo6R3JhcGhpY3NMYXllciopIG92ZXJyaWRlOworICAgIHZp
cnR1YWwgdm9pZCBhdHRhY2hWaWV3T3ZlcmxheUdyYXBoaWNzTGF5ZXIoV2ViQ29yZTo6RnJhbWUq
LCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKikgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIHNl
dE5lZWRzT25lU2hvdERyYXdpbmdTeW5jaHJvbml6YXRpb24oKSBvdmVycmlkZTsKICAgICB2aXJ0
dWFsIHZvaWQgc2NoZWR1bGVDb21wb3NpdGluZ0xheWVyRmx1c2goKSBvdmVycmlkZTsKICAgICB2
aXJ0dWFsIGJvb2wgYWRqdXN0TGF5ZXJGbHVzaFRocm90dGxpbmcoV2ViQ29yZTo6TGF5ZXJGbHVz
aFRocm90dGxlU3RhdGU6OkZsYWdzKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIFdlYkNvcmU6Okdy
YXBoaWNzTGF5ZXIqIGRvY3VtZW50T3ZlcmxheUxheWVyRm9yRnJhbWUoV2ViQ29yZTo6RnJhbWUm
KSBvdmVycmlkZTsKIAogI2lmIFVTRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRV9ESVNQTEFZX01P
TklUT1IpCiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPFdlYkNvcmU6OkRpc3BsYXlSZWZyZXNoTW9u
aXRvcj4gY3JlYXRlRGlzcGxheVJlZnJlc2hNb25pdG9yKFBsYXRmb3JtRGlzcGxheUlEKSBjb25z
dCBvdmVycmlkZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29y
ZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50LmNwcAppbmRleCA4NTkzNThiLi44
OGViMmRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBw
b3J0L1dlYkluc3BlY3RvckNsaWVudC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JDbGllbnQuY3BwCkBAIC0zMyw2ICszMyw3IEBA
CiAjaW5jbHVkZSAiV2ViUGFnZS5oIgogI2luY2x1ZGUgPFdlYkNvcmUvSW5zcGVjdG9yQ29udHJv
bGxlci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUGFnZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUGFn
ZU92ZXJsYXlDb250cm9sbGVyLmg+CiAjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CiAKICNp
ZiBQTEFURk9STShJT1MpCkBAIC03Myw3ICs3NCw3IEBAIFdlYkluc3BlY3RvckNsaWVudDo6fldl
Ykluc3BlY3RvckNsaWVudCgpCiAgICAgfQogCiAgICAgaWYgKG1fcGFpbnRSZWN0T3ZlcmxheSkK
LSAgICAgICAgbV9wYWdlLT51bmluc3RhbGxQYWdlT3ZlcmxheShtX3BhaW50UmVjdE92ZXJsYXku
Z2V0KCkpOworICAgICAgICBtX3BhZ2UtPmNvcmVQYWdlKCktPnBhZ2VPdmVybGF5Q29udHJvbGxl
cigpLnVuaW5zdGFsbFBhZ2VPdmVybGF5KG1fcGFpbnRSZWN0T3ZlcmxheS5nZXQoKSwgUGFnZU92
ZXJsYXk6OkZhZGVNb2RlOjpGYWRlKTsKIH0KIAogdm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6Omlu
c3BlY3RvckRlc3Ryb3llZCgpCkBAIC0xMTEsOSArMTEyLDkgQEAgdm9pZCBXZWJJbnNwZWN0b3JD
bGllbnQ6OmhpZ2hsaWdodCgpCiB7CiAjaWYgIVBMQVRGT1JNKElPUykKICAgICBpZiAoIW1faGln
aGxpZ2h0T3ZlcmxheSkgewotICAgICAgICBSZWZQdHI8UGFnZU92ZXJsYXk+IGhpZ2hsaWdodE92
ZXJsYXkgPSBQYWdlT3ZlcmxheTo6Y3JlYXRlKHRoaXMpOworICAgICAgICBSZWZQdHI8UGFnZU92
ZXJsYXk+IGhpZ2hsaWdodE92ZXJsYXkgPSBQYWdlT3ZlcmxheTo6Y3JlYXRlKCp0aGlzKTsKICAg
ICAgICAgbV9oaWdobGlnaHRPdmVybGF5ID0gaGlnaGxpZ2h0T3ZlcmxheS5nZXQoKTsKLSAgICAg
ICAgbV9wYWdlLT5pbnN0YWxsUGFnZU92ZXJsYXkoaGlnaGxpZ2h0T3ZlcmxheS5yZWxlYXNlKCks
IFBhZ2VPdmVybGF5OjpGYWRlTW9kZTo6RmFkZSk7CisgICAgICAgIG1fcGFnZS0+Y29yZVBhZ2Uo
KS0+cGFnZU92ZXJsYXlDb250cm9sbGVyKCkuaW5zdGFsbFBhZ2VPdmVybGF5KGhpZ2hsaWdodE92
ZXJsYXkucmVsZWFzZSgpLCBQYWdlT3ZlcmxheTo6RmFkZU1vZGU6OkZhZGUpOwogICAgICAgICBt
X2hpZ2hsaWdodE92ZXJsYXktPnNldE5lZWRzRGlzcGxheSgpOwogICAgIH0gZWxzZSB7CiAgICAg
ICAgIG1faGlnaGxpZ2h0T3ZlcmxheS0+c3RvcEZhZGVPdXRBbmltYXRpb24oKTsKQEAgLTEzMCw3
ICsxMzEsNyBAQCB2b2lkIFdlYkluc3BlY3RvckNsaWVudDo6aGlkZUhpZ2hsaWdodCgpCiB7CiAj
aWYgIVBMQVRGT1JNKElPUykKICAgICBpZiAobV9oaWdobGlnaHRPdmVybGF5KQotICAgICAgICBt
X3BhZ2UtPnVuaW5zdGFsbFBhZ2VPdmVybGF5KG1faGlnaGxpZ2h0T3ZlcmxheSwgUGFnZU92ZXJs
YXk6OkZhZGVNb2RlOjpGYWRlKTsKKyAgICAgICAgbV9wYWdlLT5jb3JlUGFnZSgpLT5wYWdlT3Zl
cmxheUNvbnRyb2xsZXIoKS51bmluc3RhbGxQYWdlT3ZlcmxheShtX2hpZ2hsaWdodE92ZXJsYXks
IFBhZ2VPdmVybGF5OjpGYWRlTW9kZTo6RmFkZSk7CiAjZWxzZQogICAgIG1fcGFnZS0+aGlkZUlu
c3BlY3RvckhpZ2hsaWdodCgpOwogI2VuZGlmCkBAIC0xMzksOCArMTQwLDggQEAgdm9pZCBXZWJJ
bnNwZWN0b3JDbGllbnQ6OmhpZGVIaWdobGlnaHQoKQogdm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6
OnNob3dQYWludFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewogICAgIGlmICghbV9wYWlu
dFJlY3RPdmVybGF5KSB7Ci0gICAgICAgIG1fcGFpbnRSZWN0T3ZlcmxheSA9IFBhZ2VPdmVybGF5
OjpjcmVhdGUodGhpcywgUGFnZU92ZXJsYXk6Ok92ZXJsYXlUeXBlOjpEb2N1bWVudCk7Ci0gICAg
ICAgIG1fcGFnZS0+aW5zdGFsbFBhZ2VPdmVybGF5KG1fcGFpbnRSZWN0T3ZlcmxheSwgUGFnZU92
ZXJsYXk6OkZhZGVNb2RlOjpEb05vdEZhZGUpOworICAgICAgICBtX3BhaW50UmVjdE92ZXJsYXkg
PSBQYWdlT3ZlcmxheTo6Y3JlYXRlKCp0aGlzLCBQYWdlT3ZlcmxheTo6T3ZlcmxheVR5cGU6OkRv
Y3VtZW50KTsKKyAgICAgICAgbV9wYWdlLT5jb3JlUGFnZSgpLT5wYWdlT3ZlcmxheUNvbnRyb2xs
ZXIoKS5pbnN0YWxsUGFnZU92ZXJsYXkobV9wYWludFJlY3RPdmVybGF5LCBQYWdlT3ZlcmxheTo6
RmFkZU1vZGU6OkRvTm90RmFkZSk7CiAgICAgfQogCiAgICAgaWYgKCFtX3BhaW50SW5kaWNhdG9y
TGF5ZXJDbGllbnQpCkBAIC0xNjcsOCArMTY4LDggQEAgdm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6
OnNob3dQYWludFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogICAgIAogICAgIG1fcGFpbnRS
ZWN0TGF5ZXJzLmFkZChwYWludExheWVyLmdldCgpKTsKIAotICAgIEdyYXBoaWNzTGF5ZXIqIG92
ZXJsYXlSb290TGF5ZXIgPSBtX3BhaW50UmVjdE92ZXJsYXktPmxheWVyKCk7Ci0gICAgb3Zlcmxh
eVJvb3RMYXllci0+YWRkQ2hpbGQocGFpbnRMYXllci5yZWxlYXNlKCkpOworICAgIEdyYXBoaWNz
TGF5ZXImIG92ZXJsYXlSb290TGF5ZXIgPSBtX3BhaW50UmVjdE92ZXJsYXktPmxheWVyKCk7Cisg
ICAgb3ZlcmxheVJvb3RMYXllci5hZGRDaGlsZChwYWludExheWVyLnJlbGVhc2UoKSk7CiB9CiAK
IHZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50OjphbmltYXRpb25FbmRlZEZvckxheWVyKGNvbnN0IEdy
YXBoaWNzTGF5ZXIqIGxheWVyKQpAQCAtMTk4LDEzICsxOTksMTMgQEAgdm9pZCBXZWJJbnNwZWN0
b3JDbGllbnQ6OmRpZFNldFNlYXJjaGluZ0Zvck5vZGUoYm9vbCBlbmFibGVkKQogfQogI2VuZGlm
CiAKLXZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50OjpwYWdlT3ZlcmxheURlc3Ryb3llZChQYWdlT3Zl
cmxheSopCit2b2lkIFdlYkluc3BlY3RvckNsaWVudDo6cGFnZU92ZXJsYXlEZXN0cm95ZWQoUGFn
ZU92ZXJsYXkmKQogewogfQogCi12b2lkIFdlYkluc3BlY3RvckNsaWVudDo6d2lsbE1vdmVUb1dl
YlBhZ2UoUGFnZU92ZXJsYXkqLCBXZWJQYWdlKiB3ZWJQYWdlKQordm9pZCBXZWJJbnNwZWN0b3JD
bGllbnQ6OndpbGxNb3ZlVG9QYWdlKFBhZ2VPdmVybGF5JiwgUGFnZSogcGFnZSkKIHsKLSAgICBp
ZiAod2ViUGFnZSkKKyAgICBpZiAocGFnZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gVGhl
IHBhZ2Ugb3ZlcmxheSBpcyBtb3ZpbmcgYXdheSBmcm9tIHRoZSB3ZWIgcGFnZSwgcmVzZXQgaXQu
CkBAIC0yMTIsMTYgKzIxMywxNiBAQCB2b2lkIFdlYkluc3BlY3RvckNsaWVudDo6d2lsbE1vdmVU
b1dlYlBhZ2UoUGFnZU92ZXJsYXkqLCBXZWJQYWdlKiB3ZWJQYWdlKQogICAgIG1faGlnaGxpZ2h0
T3ZlcmxheSA9IDA7CiB9CiAKLXZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50OjpkaWRNb3ZlVG9XZWJQ
YWdlKFBhZ2VPdmVybGF5KiwgV2ViUGFnZSopCit2b2lkIFdlYkluc3BlY3RvckNsaWVudDo6ZGlk
TW92ZVRvUGFnZShQYWdlT3ZlcmxheSYsIFBhZ2UqKQogewogfQogCi12b2lkIFdlYkluc3BlY3Rv
ckNsaWVudDo6ZHJhd1JlY3QoUGFnZU92ZXJsYXkqLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIC8qZGlydHlSZWN0Ki8pCit2b2lkIFdl
Ykluc3BlY3RvckNsaWVudDo6ZHJhd1JlY3QoUGFnZU92ZXJsYXkmLCBXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIC8qZGlydHlSZWN0Ki8p
CiB7CiAgICAgbV9wYWdlLT5jb3JlUGFnZSgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCkuZHJhd0hp
Z2hsaWdodChjb250ZXh0KTsKIH0KIAotYm9vbCBXZWJJbnNwZWN0b3JDbGllbnQ6Om1vdXNlRXZl
bnQoUGFnZU92ZXJsYXkqLCBjb25zdCBXZWJNb3VzZUV2ZW50JikKK2Jvb2wgV2ViSW5zcGVjdG9y
Q2xpZW50Ojptb3VzZUV2ZW50KFBhZ2VPdmVybGF5JiwgY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50
JikKIHsKICAgICByZXR1cm4gZmFsc2U7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckNsaWVudC5oIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JDbGllbnQuaAppbmRl
eCA3OThjYWM3Li5kZmMwMzhhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckNsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50LmgKQEAgLTI4LDE2
ICsyOCwxNiBAQAogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKIAotI2luY2x1ZGUgIlBhZ2VPdmVy
bGF5LmgiCi0KICNpbmNsdWRlIDxXZWJDb3JlL0luc3BlY3RvckNsaWVudC5oPgogI2luY2x1ZGUg
PFdlYkNvcmUvSW5zcGVjdG9yRm9yd2FyZGluZy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUGFnZU92
ZXJsYXkuaD4KICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiBjbGFzcyBHcmFwaGljc0NvbnRleHQ7CiBjbGFzcyBHcmFwaGljc0xheWVyOwogY2xhc3MgSW50
UmVjdDsKK2NsYXNzIFBhZ2VPdmVybGF5OwogfQogCiBuYW1lc3BhY2UgV2ViS2l0IHsKQEAgLTQ1
LDcgKzQ1LDcgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiBjbGFzcyBXZWJQYWdlOwogY2xhc3MgUmVw
YWludEluZGljYXRvckxheWVyQ2xpZW50OwogCi1jbGFzcyBXZWJJbnNwZWN0b3JDbGllbnQgOiBw
dWJsaWMgV2ViQ29yZTo6SW5zcGVjdG9yQ2xpZW50LCBwcml2YXRlIFBhZ2VPdmVybGF5OjpDbGll
bnQgeworY2xhc3MgV2ViSW5zcGVjdG9yQ2xpZW50IDogcHVibGljIFdlYkNvcmU6Okluc3BlY3Rv
ckNsaWVudCwgcHJpdmF0ZSBXZWJDb3JlOjpQYWdlT3ZlcmxheTo6Q2xpZW50IHsKIGZyaWVuZCBj
bGFzcyBSZXBhaW50SW5kaWNhdG9yTGF5ZXJDbGllbnQ7CiBwdWJsaWM6CiAgICAgV2ViSW5zcGVj
dG9yQ2xpZW50KFdlYlBhZ2UqKTsKQEAgLTc0LDE4ICs3NCwxOCBAQCBwcml2YXRlOgogICAgIHZp
cnR1YWwgdm9pZCBzaG93UGFpbnRSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIG92ZXJy
aWRlOwogCiAgICAgLy8gUGFnZU92ZXJsYXk6OkNsaWVudAotICAgIHZpcnR1YWwgdm9pZCBwYWdl
T3ZlcmxheURlc3Ryb3llZChQYWdlT3ZlcmxheSopIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9p
ZCB3aWxsTW92ZVRvV2ViUGFnZShQYWdlT3ZlcmxheSosIFdlYlBhZ2UqKSBvdmVycmlkZTsKLSAg
ICB2aXJ0dWFsIHZvaWQgZGlkTW92ZVRvV2ViUGFnZShQYWdlT3ZlcmxheSosIFdlYlBhZ2UqKSBv
dmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgZHJhd1JlY3QoUGFnZU92ZXJsYXkqLCBXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQmLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jikgb3ZlcnJpZGU7Ci0g
ICAgdmlydHVhbCBib29sIG1vdXNlRXZlbnQoUGFnZU92ZXJsYXkqLCBjb25zdCBXZWJNb3VzZUV2
ZW50Jikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHBhZ2VPdmVybGF5RGVzdHJveWVkKFdl
YkNvcmU6OlBhZ2VPdmVybGF5Jikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHdpbGxNb3Zl
VG9QYWdlKFdlYkNvcmU6OlBhZ2VPdmVybGF5JiwgV2ViQ29yZTo6UGFnZSopIG92ZXJyaWRlOwor
ICAgIHZpcnR1YWwgdm9pZCBkaWRNb3ZlVG9QYWdlKFdlYkNvcmU6OlBhZ2VPdmVybGF5JiwgV2Vi
Q29yZTo6UGFnZSopIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBkcmF3UmVjdChXZWJDb3Jl
OjpQYWdlT3ZlcmxheSYsIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IFdlYkNvcmU6
OkludFJlY3QmKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wgbW91c2VFdmVudChXZWJDb3Jl
OjpQYWdlT3ZlcmxheSYsIGNvbnN0IFdlYkNvcmU6OlBsYXRmb3JtTW91c2VFdmVudCYpIG92ZXJy
aWRlOwogCiAgICAgdm9pZCBhbmltYXRpb25FbmRlZEZvckxheWVyKGNvbnN0IFdlYkNvcmU6Okdy
YXBoaWNzTGF5ZXIqKTsKIAogICAgIFdlYlBhZ2UqIG1fcGFnZTsKLSAgICBQYWdlT3ZlcmxheSog
bV9oaWdobGlnaHRPdmVybGF5OworICAgIFdlYkNvcmU6OlBhZ2VPdmVybGF5KiBtX2hpZ2hsaWdo
dE92ZXJsYXk7CiAgICAgCi0gICAgUmVmUHRyPFBhZ2VPdmVybGF5PiBtX3BhaW50UmVjdE92ZXJs
YXk7CisgICAgUmVmUHRyPFdlYkNvcmU6OlBhZ2VPdmVybGF5PiBtX3BhaW50UmVjdE92ZXJsYXk7
CiAgICAgc3RkOjp1bmlxdWVfcHRyPFJlcGFpbnRJbmRpY2F0b3JMYXllckNsaWVudD4gbV9wYWlu
dEluZGljYXRvckxheWVyQ2xpZW50OwogICAgIEhhc2hTZXQ8V2ViQ29yZTo6R3JhcGhpY3NMYXll
cio+IG1fcGFpbnRSZWN0TGF5ZXJzOyAvLyBJZGVhbGx5IHRoaXMgd291bGQgYmUgSGFzaFNldDxz
dGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NMYXllcj4+IGJ1dCB0aGF0IGRvZXNuJ3Qgd29yayB5ZXQu
IHdlYmtpdC5vcmcvYi8xMzYxNjYKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWEuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9EcmF3aW5nQXJlYS5oCmluZGV4IGY3NGI0ZGUuLmRiM2I4M2UgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYS5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYS5oCkBAIC00NSw2ICs0
NSw3IEBAIGNsYXNzIE1lc3NhZ2VEZWNvZGVyOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFz
cyBEaXNwbGF5UmVmcmVzaE1vbml0b3I7CitjbGFzcyBGcmFtZTsKIGNsYXNzIEZyYW1lVmlldzsK
IGNsYXNzIEdyYXBoaWNzTGF5ZXI7CiBjbGFzcyBHcmFwaGljc0xheWVyRmFjdG9yeTsKQEAgLTEy
MCw2ICsxMjEsOCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIGJvb2wgYWRqdXN0TGF5ZXJGbHVz
aFRocm90dGxpbmcoV2ViQ29yZTo6TGF5ZXJGbHVzaFRocm90dGxlU3RhdGU6OkZsYWdzKSB7IHJl
dHVybiBmYWxzZTsgfQogCisgICAgdmlydHVhbCB2b2lkIGF0dGFjaFZpZXdPdmVybGF5R3JhcGhp
Y3NMYXllcihXZWJDb3JlOjpGcmFtZSosIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKSB7IH0KKwog
cHJvdGVjdGVkOgogICAgIERyYXdpbmdBcmVhKERyYXdpbmdBcmVhVHlwZSwgV2ViUGFnZSYpOwog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRy
b2xsZXIuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9s
bGVyLmNwcAppbmRleCAxZTM0NjJiLi5jYzNlNzJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5jcHAKQEAgLTQwLDYgKzQwLDgg
QEAKICNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dC5oPgogI2luY2x1ZGUgPFdlYkNv
cmUvTWFpbkZyYW1lLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9QYWdlLmg+CisjaW5jbHVkZSA8V2Vi
Q29yZS9QYWdlT3ZlcmxheUNvbnRyb2xsZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3Jt
TW91c2VFdmVudC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUGx1Z2luRG9jdW1lbnQuaD4KIAogdXNp
bmcgbmFtZXNwYWNlIFdlYkNvcmU7CkBAIC02Myw3ICs2NSw3IEBAIHN0YXRpYyBXZWJDb3JlOjpG
aW5kT3B0aW9ucyBjb3JlKEZpbmRPcHRpb25zIG9wdGlvbnMpCiAKIEZpbmRDb250cm9sbGVyOjpG
aW5kQ29udHJvbGxlcihXZWJQYWdlKiB3ZWJQYWdlKQogICAgIDogbV93ZWJQYWdlKHdlYlBhZ2Up
Ci0gICAgLCBtX2ZpbmRQYWdlT3ZlcmxheSgwKQorICAgICwgbV9maW5kUGFnZU92ZXJsYXkobnVs
bHB0cikKICAgICAsIG1faXNTaG93aW5nRmluZEluZGljYXRvcihmYWxzZSkKICAgICAsIG1fZm91
bmRTdHJpbmdNYXRjaEluZGV4KC0xKQogewpAQCAtMTgyLDEyICsxODQsMTIgQEAgdm9pZCBGaW5k
Q29udHJvbGxlcjo6dXBkYXRlRmluZFVJQWZ0ZXJQYWdlU2Nyb2xsKGJvb2wgZm91bmQsIGNvbnN0
IFN0cmluZyYgc3RyaW4KIAogICAgIGlmICghc2hvdWxkU2hvd092ZXJsYXkpIHsKICAgICAgICAg
aWYgKG1fZmluZFBhZ2VPdmVybGF5KQotICAgICAgICAgICAgbV93ZWJQYWdlLT51bmluc3RhbGxQ
YWdlT3ZlcmxheShtX2ZpbmRQYWdlT3ZlcmxheSwgUGFnZU92ZXJsYXk6OkZhZGVNb2RlOjpGYWRl
KTsKKyAgICAgICAgICAgIG1fd2ViUGFnZS0+Y29yZVBhZ2UoKS0+cGFnZU92ZXJsYXlDb250cm9s
bGVyKCkudW5pbnN0YWxsUGFnZU92ZXJsYXkobV9maW5kUGFnZU92ZXJsYXksIFBhZ2VPdmVybGF5
OjpGYWRlTW9kZTo6RmFkZSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKCFtX2ZpbmRQYWdl
T3ZlcmxheSkgewotICAgICAgICAgICAgUmVmUHRyPFBhZ2VPdmVybGF5PiBmaW5kUGFnZU92ZXJs
YXkgPSBQYWdlT3ZlcmxheTo6Y3JlYXRlKHRoaXMpOworICAgICAgICAgICAgUmVmUHRyPFBhZ2VP
dmVybGF5PiBmaW5kUGFnZU92ZXJsYXkgPSBQYWdlT3ZlcmxheTo6Y3JlYXRlKCp0aGlzKTsKICAg
ICAgICAgICAgIG1fZmluZFBhZ2VPdmVybGF5ID0gZmluZFBhZ2VPdmVybGF5LmdldCgpOwotICAg
ICAgICAgICAgbV93ZWJQYWdlLT5pbnN0YWxsUGFnZU92ZXJsYXkoZmluZFBhZ2VPdmVybGF5LnJl
bGVhc2UoKSwgUGFnZU92ZXJsYXk6OkZhZGVNb2RlOjpGYWRlKTsKKyAgICAgICAgICAgIG1fd2Vi
UGFnZS0+Y29yZVBhZ2UoKS0+cGFnZU92ZXJsYXlDb250cm9sbGVyKCkuaW5zdGFsbFBhZ2VPdmVy
bGF5KGZpbmRQYWdlT3ZlcmxheS5yZWxlYXNlKCksIFBhZ2VPdmVybGF5OjpGYWRlTW9kZTo6RmFk
ZSk7CiAgICAgICAgIH0KICAgICAgICAgbV9maW5kUGFnZU92ZXJsYXktPnNldE5lZWRzRGlzcGxh
eSgpOwogICAgIH0KQEAgLTMzMCw3ICszMzIsNyBAQCB2b2lkIEZpbmRDb250cm9sbGVyOjpoaWRl
RmluZFVJKCkKIHsKICAgICBtX2ZpbmRNYXRjaGVzLmNsZWFyKCk7CiAgICAgaWYgKG1fZmluZFBh
Z2VPdmVybGF5KQotICAgICAgICBtX3dlYlBhZ2UtPnVuaW5zdGFsbFBhZ2VPdmVybGF5KG1fZmlu
ZFBhZ2VPdmVybGF5LCBQYWdlT3ZlcmxheTo6RmFkZU1vZGU6OkZhZGUpOworICAgICAgICBtX3dl
YlBhZ2UtPmNvcmVQYWdlKCktPnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLnVuaW5zdGFsbFBhZ2VP
dmVybGF5KG1fZmluZFBhZ2VPdmVybGF5LCBQYWdlT3ZlcmxheTo6RmFkZU1vZGU6OkZhZGUpOwog
CiAgICAgUGx1Z2luVmlldyogcGx1Z2luVmlldyA9IHBsdWdpblZpZXdGb3JGcmFtZShtX3dlYlBh
Z2UtPm1haW5GcmFtZSgpKTsKICAgICAKQEAgLTQzOSwyMCArNDQxLDIwIEBAIFZlY3RvcjxJbnRS
ZWN0PiBGaW5kQ29udHJvbGxlcjo6cmVjdHNGb3JUZXh0TWF0Y2hlcygpCiAgICAgcmV0dXJuIHJl
Y3RzOwogfQogCi12b2lkIEZpbmRDb250cm9sbGVyOjpwYWdlT3ZlcmxheURlc3Ryb3llZChQYWdl
T3ZlcmxheSopCit2b2lkIEZpbmRDb250cm9sbGVyOjpwYWdlT3ZlcmxheURlc3Ryb3llZChQYWdl
T3ZlcmxheSYpCiB7CiB9CiAKLXZvaWQgRmluZENvbnRyb2xsZXI6OndpbGxNb3ZlVG9XZWJQYWdl
KFBhZ2VPdmVybGF5KiwgV2ViUGFnZSogd2ViUGFnZSkKK3ZvaWQgRmluZENvbnRyb2xsZXI6Ondp
bGxNb3ZlVG9QYWdlKFBhZ2VPdmVybGF5JiwgUGFnZSogcGFnZSkKIHsKLSAgICBpZiAod2ViUGFn
ZSkKKyAgICBpZiAocGFnZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgQVNTRVJUKG1fZmluZFBh
Z2VPdmVybGF5KTsKICAgICBtX2ZpbmRQYWdlT3ZlcmxheSA9IDA7CiB9CiAgICAgCi12b2lkIEZp
bmRDb250cm9sbGVyOjpkaWRNb3ZlVG9XZWJQYWdlKFBhZ2VPdmVybGF5KiwgV2ViUGFnZSopCit2
b2lkIEZpbmRDb250cm9sbGVyOjpkaWRNb3ZlVG9QYWdlKFBhZ2VPdmVybGF5JiwgUGFnZSopCiB7
CiB9CiAKQEAgLTQ2OCw3ICs0NzAsNyBAQCBjb25zdCBmbG9hdCBzaGFkb3dCbHVyUmFkaXVzID0g
MTsKIGNvbnN0IGZsb2F0IHNoYWRvd0NvbG9yQWxwaGEgPSAwLjU7CiAjZW5kaWYKIAotdm9pZCBG
aW5kQ29udHJvbGxlcjo6ZHJhd1JlY3QoUGFnZU92ZXJsYXkqLCBHcmFwaGljc0NvbnRleHQmIGdy
YXBoaWNzQ29udGV4dCwgY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KQordm9pZCBGaW5kQ29udHJv
bGxlcjo6ZHJhd1JlY3QoUGFnZU92ZXJsYXkmLCBHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29u
dGV4dCwgY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KQogewogICAgIENvbG9yIG92ZXJsYXlCYWNr
Z3JvdW5kQ29sb3IoMC4xZiwgMC4xZiwgMC4xZiwgMC4yNWYpOwogCkBAIC01MDYsOSArNTA4LDkg
QEAgdm9pZCBGaW5kQ29udHJvbGxlcjo6ZHJhd1JlY3QoUGFnZU92ZXJsYXkqLCBHcmFwaGljc0Nv
bnRleHQmIGdyYXBoaWNzQ29udGV4dCwgY28KICAgICB9CiB9CiAKLWJvb2wgRmluZENvbnRyb2xs
ZXI6Om1vdXNlRXZlbnQoUGFnZU92ZXJsYXkqLCBjb25zdCBXZWJNb3VzZUV2ZW50JiBtb3VzZUV2
ZW50KQorYm9vbCBGaW5kQ29udHJvbGxlcjo6bW91c2VFdmVudChQYWdlT3ZlcmxheSYsIGNvbnN0
IFBsYXRmb3JtTW91c2VFdmVudCYgbW91c2VFdmVudCkKIHsKLSAgICBpZiAobW91c2VFdmVudC50
eXBlKCkgPT0gV2ViRXZlbnQ6Ok1vdXNlRG93bikKKyAgICBpZiAobW91c2VFdmVudC50eXBlKCkg
PT0gUGxhdGZvcm1FdmVudDo6TW91c2VQcmVzc2VkKQogICAgICAgICBoaWRlRmluZFVJKCk7CiAK
ICAgICByZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9GaW5kQ29udHJvbGxlci5oCmluZGV4IDI4MDYzZmMuLjkwNWVkMWYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5oCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5oCkBAIC0y
NiwxMCArMjYsMTAgQEAKICNpZm5kZWYgRmluZENvbnRyb2xsZXJfaAogI2RlZmluZSBGaW5kQ29u
dHJvbGxlcl9oCiAKLSNpbmNsdWRlICJQYWdlT3ZlcmxheS5oIgogI2luY2x1ZGUgIlNoYXJlYWJs
ZUJpdG1hcC5oIgogI2luY2x1ZGUgIldlYkZpbmRPcHRpb25zLmgiCiAjaW5jbHVkZSA8V2ViQ29y
ZS9JbnRSZWN0Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9QYWdlT3ZlcmxheS5oPgogI2luY2x1ZGUg
PHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgpAQCAtNDUsMTAgKzQ1LDkgQEAgY2xhc3MgUmFuZ2U7CiAKIG5hbWVzcGFj
ZSBXZWJLaXQgewogCi1jbGFzcyBQYWdlT3ZlcmxheTsKIGNsYXNzIFdlYlBhZ2U7CiAKLWNsYXNz
IEZpbmRDb250cm9sbGVyIDogcHJpdmF0ZSBQYWdlT3ZlcmxheTo6Q2xpZW50IHsKK2NsYXNzIEZp
bmRDb250cm9sbGVyIDogcHJpdmF0ZSBXZWJDb3JlOjpQYWdlT3ZlcmxheTo6Q2xpZW50IHsKICAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShGaW5kQ29udHJvbGxlcik7CiAKIHB1YmxpYzoKQEAgLTcx
LDExICs3MCwxMSBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgLy8gUGFnZU92ZXJsYXk6OkNs
aWVudC4KLSAgICB2aXJ0dWFsIHZvaWQgcGFnZU92ZXJsYXlEZXN0cm95ZWQoUGFnZU92ZXJsYXkq
KTsKLSAgICB2aXJ0dWFsIHZvaWQgd2lsbE1vdmVUb1dlYlBhZ2UoUGFnZU92ZXJsYXkqLCBXZWJQ
YWdlKik7Ci0gICAgdmlydHVhbCB2b2lkIGRpZE1vdmVUb1dlYlBhZ2UoUGFnZU92ZXJsYXkqLCBX
ZWJQYWdlKik7Ci0gICAgdmlydHVhbCBib29sIG1vdXNlRXZlbnQoUGFnZU92ZXJsYXkqLCBjb25z
dCBXZWJNb3VzZUV2ZW50Jik7Ci0gICAgdmlydHVhbCB2b2lkIGRyYXdSZWN0KFBhZ2VPdmVybGF5
KiwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgZGly
dHlSZWN0KTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFnZU92ZXJsYXlEZXN0cm95ZWQoV2ViQ29yZTo6
UGFnZU92ZXJsYXkmKTsKKyAgICB2aXJ0dWFsIHZvaWQgd2lsbE1vdmVUb1BhZ2UoV2ViQ29yZTo6
UGFnZU92ZXJsYXkmLCBXZWJDb3JlOjpQYWdlKik7CisgICAgdmlydHVhbCB2b2lkIGRpZE1vdmVU
b1BhZ2UoV2ViQ29yZTo6UGFnZU92ZXJsYXkmLCBXZWJDb3JlOjpQYWdlKik7CisgICAgdmlydHVh
bCBib29sIG1vdXNlRXZlbnQoV2ViQ29yZTo6UGFnZU92ZXJsYXkmLCBjb25zdCBXZWJDb3JlOjpQ
bGF0Zm9ybU1vdXNlRXZlbnQmKTsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd1JlY3QoV2ViQ29yZTo6
UGFnZU92ZXJsYXkmLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmLCBjb25zdCBXZWJDb3JlOjpJ
bnRSZWN0JiBkaXJ0eVJlY3QpOwogCiAgICAgVmVjdG9yPFdlYkNvcmU6OkludFJlY3Q+IHJlY3Rz
Rm9yVGV4dE1hdGNoZXMoKTsKICAgICBib29sIGdldEZpbmRJbmRpY2F0b3JCaXRtYXBBbmRSZWN0
KFdlYkNvcmU6OkZyYW1lJiwgU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUmLCBXZWJDb3JlOjpJbnRS
ZWN0JiBzZWxlY3Rpb25SZWN0KTsKQEAgLTg4LDcgKzg3LDcgQEAgcHJpdmF0ZToKICAgICB2b2lk
IGRpZEhpZGVGaW5kSW5kaWNhdG9yKCk7CiAKICAgICBXZWJQYWdlKiBtX3dlYlBhZ2U7Ci0gICAg
UGFnZU92ZXJsYXkqIG1fZmluZFBhZ2VPdmVybGF5OworICAgIFdlYkNvcmU6OlBhZ2VPdmVybGF5
KiBtX2ZpbmRQYWdlT3ZlcmxheTsKIAogICAgIC8vIFdoZXRoZXIgdGhlIFVJIHByb2Nlc3MgaXMg
c2hvd2luZyB0aGUgZmluZCBpbmRpY2F0b3IuIE5vdGUgdGhhdCB0aGlzIGNhbiBiZSB0cnVlIGV2
ZW4gaWYKICAgICAvLyB0aGUgZmluZCBpbmRpY2F0b3IgaXNuJ3Qgc2hvd2luZywgYnV0IGl0IHdp
bGwgbmV2ZXIgYmUgZmFsc2Ugd2hlbiBpdCBpcyBzaG93aW5nLgpAQCAtOTksNyArOTgsNyBAQCBw
cml2YXRlOgogICAgIGludCBtX2ZvdW5kU3RyaW5nTWF0Y2hJbmRleDsKIAogI2lmIFBMQVRGT1JN
KElPUykKLSAgICBSZWZQdHI8UGFnZU92ZXJsYXk+IG1fZmluZEluZGljYXRvck92ZXJsYXk7Cisg
ICAgUmVmUHRyPFdlYkNvcmU6OlBhZ2VPdmVybGF5PiBtX2ZpbmRJbmRpY2F0b3JPdmVybGF5Owog
ICAgIHN0ZDo6dW5pcXVlX3B0cjxGaW5kSW5kaWNhdG9yT3ZlcmxheUNsaWVudElPUz4gbV9maW5k
SW5kaWNhdG9yT3ZlcmxheUNsaWVudDsKICNlbmRpZgogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVIb3N0LmggYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlSG9zdC5oCmluZGV4IDNmZDQ5NTQuLjY0ZWVj
NTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRy
ZWVIb3N0LmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJl
ZUhvc3QuaApAQCAtNDcsNyArNDcsNiBAQCBjbGFzcyBHcmFwaGljc0xheWVyRmFjdG9yeTsKIAog
bmFtZXNwYWNlIFdlYktpdCB7CiAKLWNsYXNzIFBhZ2VPdmVybGF5OwogY2xhc3MgVXBkYXRlSW5m
bzsKIGNsYXNzIFdlYlBhZ2U7CiAKQEAgLTcyLDExICs3MSw2IEBAIHB1YmxpYzoKICAgICB2aXJ0
dWFsIHZvaWQgZGV2aWNlT3JQYWdlU2NhbGVGYWN0b3JDaGFuZ2VkKCkgPSAwOwogICAgIHZpcnR1
YWwgdm9pZCBwYWdlQmFja2dyb3VuZFRyYW5zcGFyZW5jeUNoYW5nZWQoKSA9IDA7CiAKLSAgICB2
aXJ0dWFsIHZvaWQgZGlkSW5zdGFsbFBhZ2VPdmVybGF5KFBhZ2VPdmVybGF5KikgeyB9Ci0gICAg
dmlydHVhbCB2b2lkIGRpZFVuaW5zdGFsbFBhZ2VPdmVybGF5KFBhZ2VPdmVybGF5KikgeyB9Ci0g
ICAgdmlydHVhbCB2b2lkIHNldFBhZ2VPdmVybGF5TmVlZHNEaXNwbGF5KFBhZ2VPdmVybGF5Kiwg
Y29uc3QgV2ViQ29yZTo6SW50UmVjdCYpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBzZXRQYWdlT3Zl
cmxheU9wYWNpdHkoUGFnZU92ZXJsYXkqLCBmbG9hdCkgeyB9Ci0KICAgICB2aXJ0dWFsIHZvaWQg
cGF1c2VSZW5kZXJpbmcoKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgcmVzdW1lUmVuZGVyaW5nKCkg
eyB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9QYWdl
T3ZlcmxheS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvUGFnZU92ZXJs
YXkuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZDg4MWI2Li4wMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9QYWdlT3ZlcmxheS5jcHAKKysr
IC9kZXYvbnVsbApAQCAtMSwyNTEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLSNpbmNsdWRlICJQYWdlT3ZlcmxheS5oIgotCi0jaW5jbHVkZSAiV2ViUGFnZS5oIgot
I2luY2x1ZGUgIldlYlByb2Nlc3MuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lVmlldy5oPgot
I2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9N
YWluRnJhbWUuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1BhZ2UuaD4KLSNpbmNsdWRlIDxXZWJDb3Jl
L1Njcm9sbGJhclRoZW1lLmg+Ci0jaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+Ci0KLXVzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOwotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotc3RhdGljIGNvbnN0
IGRvdWJsZSBmYWRlQW5pbWF0aW9uRHVyYXRpb24gPSAwLjI7Ci1zdGF0aWMgY29uc3QgZG91Ymxl
IGZhZGVBbmltYXRpb25GcmFtZVJhdGUgPSAzMDsKLQotUGFzc1JlZlB0cjxQYWdlT3ZlcmxheT4g
UGFnZU92ZXJsYXk6OmNyZWF0ZShDbGllbnQqIGNsaWVudCwgT3ZlcmxheVR5cGUgb3ZlcmxheVR5
cGUpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBQYWdlT3ZlcmxheShjbGllbnQsIG92ZXJs
YXlUeXBlKSk7Ci19Ci0KLVBhZ2VPdmVybGF5OjpQYWdlT3ZlcmxheShDbGllbnQqIGNsaWVudCwg
T3ZlcmxheVR5cGUgb3ZlcmxheVR5cGUpCi0gICAgOiBtX2NsaWVudChjbGllbnQpCi0gICAgLCBt
X3dlYlBhZ2UobnVsbHB0cikKLSAgICAsIG1fZmFkZUFuaW1hdGlvblRpbWVyKFJ1bkxvb3A6Om1h
aW4oKSwgdGhpcywgJlBhZ2VPdmVybGF5OjpmYWRlQW5pbWF0aW9uVGltZXJGaXJlZCkKLSAgICAs
IG1fZmFkZUFuaW1hdGlvblN0YXJ0VGltZSgwKQotICAgICwgbV9mYWRlQW5pbWF0aW9uRHVyYXRp
b24oZmFkZUFuaW1hdGlvbkR1cmF0aW9uKQotICAgICwgbV9mYWRlQW5pbWF0aW9uVHlwZShOb0Fu
aW1hdGlvbikKLSAgICAsIG1fZnJhY3Rpb25GYWRlZEluKDEpCi0gICAgLCBtX292ZXJsYXlUeXBl
KG92ZXJsYXlUeXBlKQotICAgICwgbV9iYWNrZ3JvdW5kQ29sb3IoQ29sb3I6OnRyYW5zcGFyZW50
KQotewotfQotCi1QYWdlT3ZlcmxheTo6flBhZ2VPdmVybGF5KCkKLXsKLX0KLQotSW50UmVjdCBQ
YWdlT3ZlcmxheTo6Ym91bmRzKCkgY29uc3QKLXsKLSAgICBpZiAoIW1fb3ZlcnJpZGVGcmFtZS5p
c0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBJbnRSZWN0KEludFBvaW50KCksIG1fb3ZlcnJpZGVG
cmFtZS5zaXplKCkpOwotCi0gICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBtX3dlYlBhZ2UtPm1h
aW5GcmFtZVZpZXcoKTsKLQotICAgIHN3aXRjaCAobV9vdmVybGF5VHlwZSkgewotICAgIGNhc2Ug
T3ZlcmxheVR5cGU6OlZpZXc6IHsKLSAgICAgICAgaW50IHdpZHRoID0gZnJhbWVWaWV3LT53aWR0
aCgpOwotICAgICAgICBpbnQgaGVpZ2h0ID0gZnJhbWVWaWV3LT5oZWlnaHQoKTsKLQotICAgICAg
ICBpZiAoIVNjcm9sbGJhclRoZW1lOjp0aGVtZSgpLT51c2VzT3ZlcmxheVNjcm9sbGJhcnMoKSkg
ewotICAgICAgICAgICAgaWYgKGZyYW1lVmlldy0+dmVydGljYWxTY3JvbGxiYXIoKSkKLSAgICAg
ICAgICAgICAgICB3aWR0aCAtPSBmcmFtZVZpZXctPnZlcnRpY2FsU2Nyb2xsYmFyKCktPndpZHRo
KCk7Ci0gICAgICAgICAgICBpZiAoZnJhbWVWaWV3LT5ob3Jpem9udGFsU2Nyb2xsYmFyKCkpCi0g
ICAgICAgICAgICAgICAgaGVpZ2h0IC09IGZyYW1lVmlldy0+aG9yaXpvbnRhbFNjcm9sbGJhcigp
LT5oZWlnaHQoKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gSW50UmVjdCgwLCAwLCB3aWR0
aCwgaGVpZ2h0KTsKLSAgICB9Ci0gICAgY2FzZSBPdmVybGF5VHlwZTo6RG9jdW1lbnQ6Ci0gICAg
ICAgIHJldHVybiBJbnRSZWN0KEludFBvaW50KCksIGZyYW1lVmlldy0+Y29udGVudHNTaXplKCkp
OwotICAgIH07Ci0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gSW50UmVj
dChJbnRQb2ludCgpLCBmcmFtZVZpZXctPmNvbnRlbnRzU2l6ZSgpKTsKLX0KLQotSW50UmVjdCBQ
YWdlT3ZlcmxheTo6ZnJhbWUoKSBjb25zdAotewotICAgIGlmICghbV9vdmVycmlkZUZyYW1lLmlz
RW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIG1fb3ZlcnJpZGVGcmFtZTsKLQotICAgIHJldHVybiBi
b3VuZHMoKTsKLX0KLQotdm9pZCBQYWdlT3ZlcmxheTo6c2V0RnJhbWUoSW50UmVjdCBmcmFtZSkK
LXsKLSAgICBpZiAobV9vdmVycmlkZUZyYW1lID09IGZyYW1lKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBtX292ZXJyaWRlRnJhbWUgPSBmcmFtZTsKLQotICAgIGlmIChtX3dlYlBhZ2UpCi0gICAg
ICAgIG1fd2ViUGFnZS0+cGFnZU92ZXJsYXlDb250cm9sbGVyKCkuZGlkQ2hhbmdlT3ZlcmxheUZy
YW1lKCp0aGlzKTsKLX0KLQotdm9pZCBQYWdlT3ZlcmxheTo6c2V0QmFja2dyb3VuZENvbG9yKFJH
QkEzMiBiYWNrZ3JvdW5kQ29sb3IpCi17Ci0gICAgaWYgKG1fYmFja2dyb3VuZENvbG9yID09IGJh
Y2tncm91bmRDb2xvcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9iYWNrZ3JvdW5kQ29sb3Ig
PSBiYWNrZ3JvdW5kQ29sb3I7Ci0KLSAgICBpZiAobV93ZWJQYWdlKQotICAgICAgICBtX3dlYlBh
Z2UtPnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLmRpZENoYW5nZU92ZXJsYXlCYWNrZ3JvdW5kQ29s
b3IoKnRoaXMpOwotfQotCi12b2lkIFBhZ2VPdmVybGF5OjpzZXRQYWdlKFdlYlBhZ2UqIHdlYlBh
Z2UpCi17Ci0gICAgbV9jbGllbnQtPndpbGxNb3ZlVG9XZWJQYWdlKHRoaXMsIHdlYlBhZ2UpOwot
ICAgIG1fd2ViUGFnZSA9IHdlYlBhZ2U7Ci0gICAgbV9jbGllbnQtPmRpZE1vdmVUb1dlYlBhZ2Uo
dGhpcywgd2ViUGFnZSk7Ci0KLSAgICBtX2ZhZGVBbmltYXRpb25UaW1lci5zdG9wKCk7Ci19Ci0K
LXZvaWQgUGFnZU92ZXJsYXk6OnNldE5lZWRzRGlzcGxheShjb25zdCBJbnRSZWN0JiBkaXJ0eVJl
Y3QpCi17Ci0gICAgaWYgKCFtX3dlYlBhZ2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fd2Vi
UGFnZS0+cGFnZU92ZXJsYXlDb250cm9sbGVyKCkuc2V0UGFnZU92ZXJsYXlPcGFjaXR5KCp0aGlz
LCBtX2ZyYWN0aW9uRmFkZWRJbik7Ci0gICAgbV93ZWJQYWdlLT5wYWdlT3ZlcmxheUNvbnRyb2xs
ZXIoKS5zZXRQYWdlT3ZlcmxheU5lZWRzRGlzcGxheSgqdGhpcywgZGlydHlSZWN0KTsKLX0KLQot
dm9pZCBQYWdlT3ZlcmxheTo6c2V0TmVlZHNEaXNwbGF5KCkKLXsKLSAgICBzZXROZWVkc0Rpc3Bs
YXkoYm91bmRzKCkpOwotfQotCi12b2lkIFBhZ2VPdmVybGF5OjpkcmF3UmVjdChHcmFwaGljc0Nv
bnRleHQmIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KQotewotICAg
IC8vIElmIHRoZSBkaXJ0eSByZWN0IGlzIG91dHNpZGUgdGhlIGJvdW5kcywgaWdub3JlIGl0Lgot
ICAgIEludFJlY3QgcGFpbnRSZWN0ID0gaW50ZXJzZWN0aW9uKGRpcnR5UmVjdCwgYm91bmRzKCkp
OwotICAgIGlmIChwYWludFJlY3QuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBH
cmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoZ3JhcGhpY3NDb250ZXh0KTsKLSAg
ICBtX2NsaWVudC0+ZHJhd1JlY3QodGhpcywgZ3JhcGhpY3NDb250ZXh0LCBwYWludFJlY3QpOwot
fQotICAgIAotYm9vbCBQYWdlT3ZlcmxheTo6bW91c2VFdmVudChjb25zdCBXZWJNb3VzZUV2ZW50
JiBtb3VzZUV2ZW50KQotewotICAgIEludFBvaW50IG1vdXNlUG9zaXRpb25Jbk92ZXJsYXlDb29y
ZGluYXRlcyhtb3VzZUV2ZW50LnBvc2l0aW9uKCkpOwotCi0gICAgaWYgKG1fb3ZlcmxheVR5cGUg
PT0gUGFnZU92ZXJsYXk6Ok92ZXJsYXlUeXBlOjpEb2N1bWVudCkKLSAgICAgICAgbW91c2VQb3Np
dGlvbkluT3ZlcmxheUNvb3JkaW5hdGVzID0gbV93ZWJQYWdlLT5jb3JlUGFnZSgpLT5tYWluRnJh
bWUoKS52aWV3KCktPnJvb3RWaWV3VG9Db250ZW50cyhtb3VzZVBvc2l0aW9uSW5PdmVybGF5Q29v
cmRpbmF0ZXMpOwotCi0gICAgLy8gSWdub3JlIGV2ZW50cyBvdXRzaWRlIHRoZSBib3VuZHMuCi0g
ICAgaWYgKCFib3VuZHMoKS5jb250YWlucyhtb3VzZVBvc2l0aW9uSW5PdmVybGF5Q29vcmRpbmF0
ZXMpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gbV9jbGllbnQtPm1vdXNl
RXZlbnQodGhpcywgbW91c2VFdmVudCk7Ci19Ci0KLXZvaWQgUGFnZU92ZXJsYXk6OmRpZFNjcm9s
bEZyYW1lKEZyYW1lKiBmcmFtZSkKLXsKLSAgICBtX2NsaWVudC0+ZGlkU2Nyb2xsRnJhbWUodGhp
cywgZnJhbWUpOwotfQotCi1XS1R5cGVSZWYgUGFnZU92ZXJsYXk6OmNvcHlBY2Nlc3NpYmlsaXR5
QXR0cmlidXRlVmFsdWUoV0tTdHJpbmdSZWYgYXR0cmlidXRlLCBXS1R5cGVSZWYgcGFyYW1ldGVy
KQotewotICAgIHJldHVybiBtX2NsaWVudC0+Y29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1
ZSh0aGlzLCBhdHRyaWJ1dGUsIHBhcmFtZXRlcik7Ci19Ci0KLVdLQXJyYXlSZWYgUGFnZU92ZXJs
YXk6OmNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlTmFtZXMoYm9vbCBwYXJhbWV0ZXJpemVkTmFt
ZXMpCi17Ci0gICAgcmV0dXJuIG1fY2xpZW50LT5jb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZU5h
bWVzKHRoaXMsIHBhcmFtZXRlcml6ZWROYW1lcyk7Ci19Ci0KLXZvaWQgUGFnZU92ZXJsYXk6OnN0
YXJ0RmFkZUluQW5pbWF0aW9uKCkKLXsKLSAgICBtX2ZyYWN0aW9uRmFkZWRJbiA9IDA7Ci0gICAg
bV9mYWRlQW5pbWF0aW9uVHlwZSA9IEZhZGVJbkFuaW1hdGlvbjsKLQotICAgIHN0YXJ0RmFkZUFu
aW1hdGlvbigpOwotfQotCi12b2lkIFBhZ2VPdmVybGF5OjpzdGFydEZhZGVPdXRBbmltYXRpb24o
KQotewotICAgIG1fZnJhY3Rpb25GYWRlZEluID0gMTsKLSAgICBtX2ZhZGVBbmltYXRpb25UeXBl
ID0gRmFkZU91dEFuaW1hdGlvbjsKLQotICAgIHN0YXJ0RmFkZUFuaW1hdGlvbigpOwotfQotCi12
b2lkIFBhZ2VPdmVybGF5OjpzdG9wRmFkZU91dEFuaW1hdGlvbigpCi17Ci0gICAgbV9mcmFjdGlv
bkZhZGVkSW4gPSAxLjA7Ci0gICAgbV9mYWRlQW5pbWF0aW9uVGltZXIuc3RvcCgpOwotfQotCi12
b2lkIFBhZ2VPdmVybGF5OjpzdGFydEZhZGVBbmltYXRpb24oKQotewotICAgIG1fZmFkZUFuaW1h
dGlvblN0YXJ0VGltZSA9IGN1cnJlbnRUaW1lKCk7Ci0gICAgbV9mYWRlQW5pbWF0aW9uVGltZXIu
c3RhcnRSZXBlYXRpbmcoMSAvIGZhZGVBbmltYXRpb25GcmFtZVJhdGUpOwotfQotCi12b2lkIFBh
Z2VPdmVybGF5OjpmYWRlQW5pbWF0aW9uVGltZXJGaXJlZCgpCi17Ci0gICAgZmxvYXQgYW5pbWF0
aW9uUHJvZ3Jlc3MgPSAoY3VycmVudFRpbWUoKSAtIG1fZmFkZUFuaW1hdGlvblN0YXJ0VGltZSkg
LyBtX2ZhZGVBbmltYXRpb25EdXJhdGlvbjsKLQotICAgIGlmIChhbmltYXRpb25Qcm9ncmVzcyA+
PSAxLjApCi0gICAgICAgIGFuaW1hdGlvblByb2dyZXNzID0gMS4wOwotCi0gICAgZG91YmxlIHNp
bmUgPSBzaW4ocGlPdmVyVHdvRmxvYXQgKiBhbmltYXRpb25Qcm9ncmVzcyk7Ci0gICAgZmxvYXQg
ZmFkZUFuaW1hdGlvblZhbHVlID0gc2luZSAqIHNpbmU7Ci0KLSAgICBtX2ZyYWN0aW9uRmFkZWRJ
biA9IChtX2ZhZGVBbmltYXRpb25UeXBlID09IEZhZGVJbkFuaW1hdGlvbikgPyBmYWRlQW5pbWF0
aW9uVmFsdWUgOiAxIC0gZmFkZUFuaW1hdGlvblZhbHVlOwotICAgIG1fd2ViUGFnZS0+cGFnZU92
ZXJsYXlDb250cm9sbGVyKCkuc2V0UGFnZU92ZXJsYXlPcGFjaXR5KCp0aGlzLCBtX2ZyYWN0aW9u
RmFkZWRJbik7Ci0KLSAgICBpZiAoYW5pbWF0aW9uUHJvZ3Jlc3MgPT0gMS4wKSB7Ci0gICAgICAg
IG1fZmFkZUFuaW1hdGlvblRpbWVyLnN0b3AoKTsKLQotICAgICAgICBib29sIHdhc0ZhZGluZ091
dCA9IG1fZmFkZUFuaW1hdGlvblR5cGUgPT0gRmFkZU91dEFuaW1hdGlvbjsKLSAgICAgICAgbV9m
YWRlQW5pbWF0aW9uVHlwZSA9IE5vQW5pbWF0aW9uOwotCi0gICAgICAgIC8vIElmIHRoaXMgd2Fz
IGEgZmFkZSBvdXQsIGdvIGFoZWFkIGFuZCB1bmluc3RhbGwgdGhlIHBhZ2Ugb3ZlcmxheS4KLSAg
ICAgICAgaWYgKHdhc0ZhZGluZ091dCkKLSAgICAgICAgICAgIG1fd2ViUGFnZS0+dW5pbnN0YWxs
UGFnZU92ZXJsYXkodGhpcywgUGFnZU92ZXJsYXk6OkZhZGVNb2RlOjpEb05vdEZhZGUpOwotICAg
IH0KLX0KLQotdm9pZCBQYWdlT3ZlcmxheTo6Y2xlYXIoKQotewotICAgIG1fd2ViUGFnZS0+cGFn
ZU92ZXJsYXlDb250cm9sbGVyKCkuY2xlYXJQYWdlT3ZlcmxheSgqdGhpcyk7Ci19Ci0KLVdlYkNv
cmU6OkdyYXBoaWNzTGF5ZXIqIFBhZ2VPdmVybGF5OjpsYXllcigpCi17Ci0gICAgcmV0dXJuIG1f
d2ViUGFnZS0+cGFnZU92ZXJsYXlDb250cm9sbGVyKCkubGF5ZXJGb3JPdmVybGF5KCp0aGlzKTsK
LX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvUGFnZU92ZXJsYXkuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9QYWdlT3ZlcmxheS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAz
MjI1ZjBkLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Q
YWdlT3ZlcmxheS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTM3ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaWZuZGVmIFBhZ2VPdmVybGF5X2gKLSNkZWZpbmUgUGFnZU92ZXJsYXlfaAotCi0jaW5jbHVk
ZSAiQVBJT2JqZWN0LmgiCi0jaW5jbHVkZSAiV0tCYXNlLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9D
b2xvci5oPgotI2luY2x1ZGUgPFdlYkNvcmUvSW50UmVjdC5oPgotI2luY2x1ZGUgPHd0Zi9QYXNz
UmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotY2xhc3MgRnJhbWU7Ci1jbGFzcyBHcmFwaGljc0NvbnRleHQ7Ci1jbGFzcyBHcmFwaGljc0xh
eWVyOwotfQotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgV2ViRnJhbWU7Ci1jbGFzcyBX
ZWJNb3VzZUV2ZW50OwotY2xhc3MgV2ViUGFnZTsKLQotY2xhc3MgUGFnZU92ZXJsYXkgOiBwdWJs
aWMgQVBJOjpPYmplY3RJbXBsPEFQSTo6T2JqZWN0OjpUeXBlOjpCdW5kbGVQYWdlT3ZlcmxheT4g
ewotcHVibGljOgotICAgIGNsYXNzIENsaWVudCB7Ci0gICAgcHJvdGVjdGVkOgotICAgICAgICB2
aXJ0dWFsIH5DbGllbnQoKSB7IH0KLSAgICAKLSAgICBwdWJsaWM6Ci0gICAgICAgIHZpcnR1YWwg
dm9pZCBwYWdlT3ZlcmxheURlc3Ryb3llZChQYWdlT3ZlcmxheSopID0gMDsKLSAgICAgICAgdmly
dHVhbCB2b2lkIHdpbGxNb3ZlVG9XZWJQYWdlKFBhZ2VPdmVybGF5KiwgV2ViUGFnZSopID0gMDsK
LSAgICAgICAgdmlydHVhbCB2b2lkIGRpZE1vdmVUb1dlYlBhZ2UoUGFnZU92ZXJsYXkqLCBXZWJQ
YWdlKikgPSAwOwotICAgICAgICB2aXJ0dWFsIHZvaWQgZHJhd1JlY3QoUGFnZU92ZXJsYXkqLCBX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBkaXJ0eVJl
Y3QpID0gMDsKLSAgICAgICAgdmlydHVhbCBib29sIG1vdXNlRXZlbnQoUGFnZU92ZXJsYXkqLCBj
b25zdCBXZWJNb3VzZUV2ZW50JikgPSAwOwotICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkU2Nyb2xs
RnJhbWUoUGFnZU92ZXJsYXkqLCBXZWJDb3JlOjpGcmFtZSopIHsgfQotCi0gICAgICAgIHZpcnR1
YWwgV0tUeXBlUmVmIGNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWUoUGFnZU92ZXJsYXkq
LCBXS1N0cmluZ1JlZiAvKiBhdHRyaWJ1dGUgKi8sIFdLVHlwZVJlZiAvKiBwYXJhbWV0ZXIgKi8p
IHsgcmV0dXJuIDA7IH0KLSAgICAgICAgdmlydHVhbCBXS0FycmF5UmVmIGNvcHlBY2Nlc3NpYmls
aXR5QXR0cmlidXRlTmFtZXMoUGFnZU92ZXJsYXkqLCBib29sIC8qIHBhcmFtZXRlcml6ZWROYW1l
cyAqLykgeyByZXR1cm4gMDsgfQotICAgIH07Ci0KLSAgICBlbnVtIGNsYXNzIE92ZXJsYXlUeXBl
IHsKLSAgICAgICAgVmlldywgLy8gRml4ZWQgdG8gdGhlIHZpZXcgc2l6ZTsgZG9lcyBub3Qgc2Nh
bGUgb3Igc2Nyb2xsIHdpdGggdGhlIGRvY3VtZW50LCByZXBhaW50cyBvbiBzY3JvbGwuCi0gICAg
ICAgIERvY3VtZW50LCAvLyBTY2FsZXMgYW5kIHNjcm9sbHMgd2l0aCB0aGUgZG9jdW1lbnQuCi0g
ICAgfTsKLQotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFBhZ2VPdmVybGF5PiBjcmVhdGUoQ2xpZW50
KiwgT3ZlcmxheVR5cGUgPSBPdmVybGF5VHlwZTo6Vmlldyk7Ci0gICAgdmlydHVhbCB+UGFnZU92
ZXJsYXkoKTsKLQotICAgIHZvaWQgc2V0UGFnZShXZWJQYWdlKik7Ci0gICAgdm9pZCBzZXROZWVk
c0Rpc3BsYXkoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgZGlydHlSZWN0KTsKLSAgICB2b2lkIHNl
dE5lZWRzRGlzcGxheSgpOwotCi0gICAgdm9pZCBkcmF3UmVjdChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQmLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBkaXJ0eVJlY3QpOwotICAgIGJvb2wgbW91
c2VFdmVudChjb25zdCBXZWJNb3VzZUV2ZW50Jik7Ci0gICAgdm9pZCBkaWRTY3JvbGxGcmFtZShX
ZWJDb3JlOjpGcmFtZSopOwotCi0gICAgV0tUeXBlUmVmIGNvcHlBY2Nlc3NpYmlsaXR5QXR0cmli
dXRlVmFsdWUoV0tTdHJpbmdSZWYgYXR0cmlidXRlLCBXS1R5cGVSZWYgcGFyYW1ldGVyKTsKLSAg
ICBXS0FycmF5UmVmIGNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlTmFtZXMoYm9vbCBwYXJhbWV0
ZXJpemVkTmFtZXMpOwotICAgIAotICAgIHZvaWQgc3RhcnRGYWRlSW5BbmltYXRpb24oKTsKLSAg
ICB2b2lkIHN0YXJ0RmFkZU91dEFuaW1hdGlvbigpOwotICAgIHZvaWQgc3RvcEZhZGVPdXRBbmlt
YXRpb24oKTsKLQotICAgIHZvaWQgY2xlYXIoKTsKLQotICAgIENsaWVudCogY2xpZW50KCkgY29u
c3QgeyByZXR1cm4gbV9jbGllbnQ7IH0KLQotICAgIGVudW0gY2xhc3MgRmFkZU1vZGUgeyBEb05v
dEZhZGUsIEZhZGUgfTsKLQotICAgIE92ZXJsYXlUeXBlIG92ZXJsYXlUeXBlKCkgeyByZXR1cm4g
bV9vdmVybGF5VHlwZTsgfQotCi0gICAgV2ViQ29yZTo6SW50UmVjdCBib3VuZHMoKSBjb25zdDsK
LSAgICBXZWJDb3JlOjpJbnRSZWN0IGZyYW1lKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRGcmFtZShX
ZWJDb3JlOjpJbnRSZWN0KTsKLQotICAgIFdlYkNvcmU6OlJHQkEzMiBiYWNrZ3JvdW5kQ29sb3Io
KSBjb25zdCB7IHJldHVybiBtX2JhY2tncm91bmRDb2xvcjsgfQotICAgIHZvaWQgc2V0QmFja2dy
b3VuZENvbG9yKFdlYkNvcmU6OlJHQkEzMik7Ci0KLSAgICBXZWJDb3JlOjpHcmFwaGljc0xheWVy
KiBsYXllcigpOwotICAgIAotcHJvdGVjdGVkOgotICAgIGV4cGxpY2l0IFBhZ2VPdmVybGF5KENs
aWVudCosIE92ZXJsYXlUeXBlKTsKLQotcHJpdmF0ZToKLSAgICB2b2lkIHN0YXJ0RmFkZUFuaW1h
dGlvbigpOwotICAgIHZvaWQgZmFkZUFuaW1hdGlvblRpbWVyRmlyZWQoKTsKLQotICAgIENsaWVu
dCogbV9jbGllbnQ7Ci0gICAgV2ViUGFnZSogbV93ZWJQYWdlOwotCi0gICAgUnVuTG9vcDo6VGlt
ZXI8UGFnZU92ZXJsYXk+IG1fZmFkZUFuaW1hdGlvblRpbWVyOwotICAgIGRvdWJsZSBtX2ZhZGVB
bmltYXRpb25TdGFydFRpbWU7Ci0gICAgZG91YmxlIG1fZmFkZUFuaW1hdGlvbkR1cmF0aW9uOwot
Ci0gICAgZW51bSBGYWRlQW5pbWF0aW9uVHlwZSB7Ci0gICAgICAgIE5vQW5pbWF0aW9uLAotICAg
ICAgICBGYWRlSW5BbmltYXRpb24sCi0gICAgICAgIEZhZGVPdXRBbmltYXRpb24sCi0gICAgfTsK
LQotICAgIEZhZGVBbmltYXRpb25UeXBlIG1fZmFkZUFuaW1hdGlvblR5cGU7Ci0gICAgZmxvYXQg
bV9mcmFjdGlvbkZhZGVkSW47Ci0KLSAgICBPdmVybGF5VHlwZSBtX292ZXJsYXlUeXBlOwotICAg
IFdlYkNvcmU6OkludFJlY3QgbV9vdmVycmlkZUZyYW1lOwotCi0gICAgV2ViQ29yZTo6UkdCQTMy
IG1fYmFja2dyb3VuZENvbG9yOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRp
ZiAvLyBQYWdlT3ZlcmxheV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvUGFnZU92ZXJsYXlDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9QYWdlT3ZlcmxheUNvbnRyb2xsZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCA4NjQ1N2M1Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9QYWdlT3ZlcmxheUNvbnRyb2xsZXIuY3BwCisrKyAvZGV2L251bGwKQEAg
LTEsMzE0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiUGFnZU92ZXJsYXlDb250cm9sbGVyLmgiCi0KLSNpbmNsdWRlICJEcmF3aW5nQXJlYS5oIgot
I2luY2x1ZGUgIlBhZ2VPdmVybGF5LmgiCi0jaW5jbHVkZSAiV2ViUGFnZS5oIgotI2luY2x1ZGUg
PFdlYkNvcmUvRnJhbWUuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lVmlldy5oPgotI2luY2x1
ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGlj
c0xheWVyLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9NYWluRnJhbWUuaD4KLSNpbmNsdWRlIDxXZWJD
b3JlL1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9TZXR0aW5ncy5o
PgotI2luY2x1ZGUgPFdlYkNvcmUvVGlsZWRCYWNraW5nLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBX
ZWJDb3JlOwotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotUGFnZU92ZXJsYXlDb250cm9sbGVyOjpQ
YWdlT3ZlcmxheUNvbnRyb2xsZXIoV2ViUGFnZSYgd2ViUGFnZSkKLSAgICA6IG1fd2ViUGFnZSh3
ZWJQYWdlKQotewotfQotCi12b2lkIFBhZ2VPdmVybGF5Q29udHJvbGxlcjo6aW5pdGlhbGl6ZSgp
Ci17Ci0gICAgQVNTRVJUKCFtX2RvY3VtZW50T3ZlcmxheVJvb3RMYXllcik7Ci0gICAgQVNTRVJU
KCFtX3ZpZXdPdmVybGF5Um9vdExheWVyKTsKLQotICAgIG1fZG9jdW1lbnRPdmVybGF5Um9vdExh
eWVyID0gR3JhcGhpY3NMYXllcjo6Y3JlYXRlKG1fd2ViUGFnZS5kcmF3aW5nQXJlYSgpLT5ncmFw
aGljc0xheWVyRmFjdG9yeSgpLCAqdGhpcyk7Ci0gICAgbV92aWV3T3ZlcmxheVJvb3RMYXllciA9
IEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZShtX3dlYlBhZ2UuZHJhd2luZ0FyZWEoKS0+Z3JhcGhpY3NM
YXllckZhY3RvcnkoKSwgKnRoaXMpOwotI2lmbmRlZiBOREVCVUcKLSAgICBtX2RvY3VtZW50T3Zl
cmxheVJvb3RMYXllci0+c2V0TmFtZSgiUGFnZSBPdmVybGF5IGNvbnRhaW5lciAoZG9jdW1lbnQt
cmVsYXRpdmUpIik7Ci0gICAgbV92aWV3T3ZlcmxheVJvb3RMYXllci0+c2V0TmFtZSgiUGFnZSBP
dmVybGF5IGNvbnRhaW5lciAodmlldy1yZWxhdGl2ZSkiKTsKLSNlbmRpZgotfQotCi1zdGF0aWMg
dm9pZCB1cGRhdGVPdmVybGF5R2VvbWV0cnkoUGFnZU92ZXJsYXkmIG92ZXJsYXksIEdyYXBoaWNz
TGF5ZXImIGdyYXBoaWNzTGF5ZXIpCi17Ci0gICAgSW50UmVjdCBvdmVybGF5RnJhbWUgPSBvdmVy
bGF5LmZyYW1lKCk7Ci0KLSAgICBpZiAob3ZlcmxheUZyYW1lLmxvY2F0aW9uKCkgPT0gZ3JhcGhp
Y3NMYXllci5wb3NpdGlvbigpICYmIG92ZXJsYXlGcmFtZS5zaXplKCkgPT0gZ3JhcGhpY3NMYXll
ci5zaXplKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGdyYXBoaWNzTGF5ZXIuc2V0UG9zaXRp
b24ob3ZlcmxheUZyYW1lLmxvY2F0aW9uKCkpOwotICAgIGdyYXBoaWNzTGF5ZXIuc2V0U2l6ZShv
dmVybGF5RnJhbWUuc2l6ZSgpKTsKLX0KLQotdm9pZCBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6Omlu
c3RhbGxQYWdlT3ZlcmxheShQYXNzUmVmUHRyPFBhZ2VPdmVybGF5PiBwYWdlT3ZlcmxheSwgUGFn
ZU92ZXJsYXk6OkZhZGVNb2RlIGZhZGVNb2RlKQotewotICAgIEFTU0VSVChtX2RvY3VtZW50T3Zl
cmxheVJvb3RMYXllcik7Ci0gICAgQVNTRVJUKG1fdmlld092ZXJsYXlSb290TGF5ZXIpOwotCi0g
ICAgUmVmUHRyPFBhZ2VPdmVybGF5PiBvdmVybGF5ID0gcGFnZU92ZXJsYXk7Ci0KLSAgICBpZiAo
bV9wYWdlT3ZlcmxheXMuY29udGFpbnMob3ZlcmxheSkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IG1fcGFnZU92ZXJsYXlzLmFwcGVuZChvdmVybGF5KTsKLSAgICBvdmVybGF5LT5zZXRQYWdlKCZt
X3dlYlBhZ2UpOwotCi0gICAgaWYgKGZhZGVNb2RlID09IFBhZ2VPdmVybGF5OjpGYWRlTW9kZTo6
RmFkZSkKLSAgICAgICAgb3ZlcmxheS0+c3RhcnRGYWRlSW5BbmltYXRpb24oKTsKLQotICAgIHN0
ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0xheWVyPiBsYXllciA9IEdyYXBoaWNzTGF5ZXI6OmNyZWF0
ZShtX3dlYlBhZ2UuZHJhd2luZ0FyZWEoKS0+Z3JhcGhpY3NMYXllckZhY3RvcnkoKSwgKnRoaXMp
OwotICAgIGxheWVyLT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50M0QoKSk7Ci0gICAgbGF5ZXIt
PnNldEJhY2tncm91bmRDb2xvcihvdmVybGF5LT5iYWNrZ3JvdW5kQ29sb3IoKSk7Ci0gICAgdXBk
YXRlT3ZlcmxheUdlb21ldHJ5KCpvdmVybGF5LCAqbGF5ZXIpOwotI2lmbmRlZiBOREVCVUcKLSAg
ICBsYXllci0+c2V0TmFtZSgiUGFnZSBPdmVybGF5IGNvbnRlbnQiKTsKLSNlbmRpZgotCi0gICAg
dXBkYXRlU2V0dGluZ3NGb3JMYXllcigqbGF5ZXIpOwotCi0gICAgc3dpdGNoIChvdmVybGF5LT5v
dmVybGF5VHlwZSgpKSB7Ci0gICAgY2FzZSBQYWdlT3ZlcmxheTo6T3ZlcmxheVR5cGU6OlZpZXc6
Ci0gICAgICAgIG1fdmlld092ZXJsYXlSb290TGF5ZXItPmFkZENoaWxkKGxheWVyLmdldCgpKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQYWdlT3ZlcmxheTo6T3ZlcmxheVR5cGU6OkRvY3Vt
ZW50OgotICAgICAgICBtX2RvY3VtZW50T3ZlcmxheVJvb3RMYXllci0+YWRkQ2hpbGQobGF5ZXIu
Z2V0KCkpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBtX292ZXJsYXlHcmFwaGljc0xh
eWVycy5zZXQob3ZlcmxheS5nZXQoKSwgV1RGOjptb3ZlKGxheWVyKSk7Ci0KLSAgICB1cGRhdGVG
b3JjZVN5bmNocm9ub3VzU2Nyb2xsTGF5ZXJQb3NpdGlvblVwZGF0ZXMoKTsKLX0KLQotdm9pZCBQ
YWdlT3ZlcmxheUNvbnRyb2xsZXI6OnVuaW5zdGFsbFBhZ2VPdmVybGF5KFBhZ2VPdmVybGF5KiBv
dmVybGF5LCBQYWdlT3ZlcmxheTo6RmFkZU1vZGUgZmFkZU1vZGUpCi17Ci0gICAgaWYgKGZhZGVN
b2RlID09IFBhZ2VPdmVybGF5OjpGYWRlTW9kZTo6RmFkZSkgewotICAgICAgICBvdmVybGF5LT5z
dGFydEZhZGVPdXRBbmltYXRpb24oKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG92
ZXJsYXktPnNldFBhZ2UobnVsbHB0cik7Ci0KLSAgICBtX292ZXJsYXlHcmFwaGljc0xheWVycy50
YWtlKG92ZXJsYXkpLT5yZW1vdmVGcm9tUGFyZW50KCk7Ci0KLSAgICBzaXplX3Qgb3ZlcmxheUlu
ZGV4ID0gbV9wYWdlT3ZlcmxheXMuZmluZChvdmVybGF5KTsKLSAgICBBU1NFUlQob3ZlcmxheUlu
ZGV4ICE9IG5vdEZvdW5kKTsKLSAgICBtX3BhZ2VPdmVybGF5cy5yZW1vdmUob3ZlcmxheUluZGV4
KTsKLQotICAgIHVwZGF0ZUZvcmNlU3luY2hyb25vdXNTY3JvbGxMYXllclBvc2l0aW9uVXBkYXRl
cygpOwotfQotCi12b2lkIFBhZ2VPdmVybGF5Q29udHJvbGxlcjo6dXBkYXRlRm9yY2VTeW5jaHJv
bm91c1Njcm9sbExheWVyUG9zaXRpb25VcGRhdGVzKCkKLXsKLSNpZiBFTkFCTEUoQVNZTkNfU0NS
T0xMSU5HKQotICAgIGJvb2wgZm9yY2VTeW5jaHJvbm91c1Njcm9sbExheWVyUG9zaXRpb25VcGRh
dGVzID0gZmFsc2U7Ci0KLSAgICBmb3IgKGF1dG8mIG92ZXJsYXkgOiBtX3BhZ2VPdmVybGF5cykg
ewotICAgICAgICBpZiAob3ZlcmxheS0+b3ZlcmxheVR5cGUoKSA9PSBQYWdlT3ZlcmxheTo6T3Zl
cmxheVR5cGU6OlZpZXcpCi0gICAgICAgICAgICBmb3JjZVN5bmNocm9ub3VzU2Nyb2xsTGF5ZXJQ
b3NpdGlvblVwZGF0ZXMgPSB0cnVlOwotICAgIH0KLQotICAgIGlmIChQYWdlKiBwYWdlID0gbV93
ZWJQYWdlLmNvcmVQYWdlKCkpIHsKLSAgICAgICAgaWYgKFNjcm9sbGluZ0Nvb3JkaW5hdG9yKiBz
Y3JvbGxpbmdDb29yZGluYXRvciA9IHBhZ2UtPnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkpCi0gICAg
ICAgICAgICBzY3JvbGxpbmdDb29yZGluYXRvci0+c2V0Rm9yY2VTeW5jaHJvbm91c1Njcm9sbExh
eWVyUG9zaXRpb25VcGRhdGVzKGZvcmNlU3luY2hyb25vdXNTY3JvbGxMYXllclBvc2l0aW9uVXBk
YXRlcyk7Ci0gICAgfQotI2VuZGlmCi19Ci0KLXZvaWQgUGFnZU92ZXJsYXlDb250cm9sbGVyOjpz
ZXRQYWdlT3ZlcmxheU5lZWRzRGlzcGxheShQYWdlT3ZlcmxheSYgb3ZlcmxheSwgY29uc3QgV2Vi
Q29yZTo6SW50UmVjdCYgZGlydHlSZWN0KQotewotICAgIEFTU0VSVChtX3BhZ2VPdmVybGF5cy5j
b250YWlucygmb3ZlcmxheSkpOwotICAgIEdyYXBoaWNzTGF5ZXImIGdyYXBoaWNzTGF5ZXIgPSAq
bV9vdmVybGF5R3JhcGhpY3NMYXllcnMuZ2V0KCZvdmVybGF5KTsKLQotICAgIGlmICghZ3JhcGhp
Y3NMYXllci5kcmF3c0NvbnRlbnQoKSkgewotICAgICAgICBncmFwaGljc0xheWVyLnNldERyYXdz
Q29udGVudCh0cnVlKTsKLSAgICAgICAgdXBkYXRlT3ZlcmxheUdlb21ldHJ5KG92ZXJsYXksIGdy
YXBoaWNzTGF5ZXIpOwotICAgIH0KLQotICAgIGdyYXBoaWNzTGF5ZXIuc2V0TmVlZHNEaXNwbGF5
SW5SZWN0KGRpcnR5UmVjdCk7Ci19Ci0KLXZvaWQgUGFnZU92ZXJsYXlDb250cm9sbGVyOjpzZXRQ
YWdlT3ZlcmxheU9wYWNpdHkoUGFnZU92ZXJsYXkmIG92ZXJsYXksIGZsb2F0IG9wYWNpdHkpCi17
Ci0gICAgQVNTRVJUKG1fcGFnZU92ZXJsYXlzLmNvbnRhaW5zKCZvdmVybGF5KSk7Ci0gICAgbV9v
dmVybGF5R3JhcGhpY3NMYXllcnMuZ2V0KCZvdmVybGF5KS0+c2V0T3BhY2l0eShvcGFjaXR5KTsK
LX0KLQotdm9pZCBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6OmNsZWFyUGFnZU92ZXJsYXkoUGFnZU92
ZXJsYXkmIG92ZXJsYXkpCi17Ci0gICAgQVNTRVJUKG1fcGFnZU92ZXJsYXlzLmNvbnRhaW5zKCZv
dmVybGF5KSk7Ci0gICAgbV9vdmVybGF5R3JhcGhpY3NMYXllcnMuZ2V0KCZvdmVybGF5KS0+c2V0
RHJhd3NDb250ZW50KGZhbHNlKTsKLX0KLQotR3JhcGhpY3NMYXllciogUGFnZU92ZXJsYXlDb250
cm9sbGVyOjpsYXllckZvck92ZXJsYXkoUGFnZU92ZXJsYXkmIG92ZXJsYXkpIGNvbnN0Ci17Ci0g
ICAgQVNTRVJUKG1fcGFnZU92ZXJsYXlzLmNvbnRhaW5zKCZvdmVybGF5KSk7Ci0gICAgcmV0dXJu
IG1fb3ZlcmxheUdyYXBoaWNzTGF5ZXJzLmdldCgmb3ZlcmxheSk7Ci19Ci0KLXZvaWQgUGFnZU92
ZXJsYXlDb250cm9sbGVyOjpkaWRDaGFuZ2VWaWV3U2l6ZSgpCi17Ci0gICAgZm9yIChhdXRvJiBv
dmVybGF5QW5kTGF5ZXIgOiBtX292ZXJsYXlHcmFwaGljc0xheWVycykgewotICAgICAgICBpZiAo
b3ZlcmxheUFuZExheWVyLmtleS0+b3ZlcmxheVR5cGUoKSA9PSBQYWdlT3ZlcmxheTo6T3Zlcmxh
eVR5cGU6OlZpZXcpCi0gICAgICAgICAgICB1cGRhdGVPdmVybGF5R2VvbWV0cnkoKm92ZXJsYXlB
bmRMYXllci5rZXksICpvdmVybGF5QW5kTGF5ZXIudmFsdWUpOwotICAgIH0KLX0KLQotdm9pZCBQ
YWdlT3ZlcmxheUNvbnRyb2xsZXI6OmRpZENoYW5nZURvY3VtZW50U2l6ZSgpCi17Ci0gICAgZm9y
IChhdXRvJiBvdmVybGF5QW5kTGF5ZXIgOiBtX292ZXJsYXlHcmFwaGljc0xheWVycykgewotICAg
ICAgICBpZiAob3ZlcmxheUFuZExheWVyLmtleS0+b3ZlcmxheVR5cGUoKSA9PSBQYWdlT3Zlcmxh
eTo6T3ZlcmxheVR5cGU6OkRvY3VtZW50KQotICAgICAgICAgICAgdXBkYXRlT3ZlcmxheUdlb21l
dHJ5KCpvdmVybGF5QW5kTGF5ZXIua2V5LCAqb3ZlcmxheUFuZExheWVyLnZhbHVlKTsKLSAgICB9
Ci19Ci0KLXZvaWQgUGFnZU92ZXJsYXlDb250cm9sbGVyOjpkaWRDaGFuZ2VQcmVmZXJlbmNlcygp
Ci17Ci0gICAgZm9yIChhdXRvJiBncmFwaGljc0xheWVyIDogbV9vdmVybGF5R3JhcGhpY3NMYXll
cnMudmFsdWVzKCkpCi0gICAgICAgIHVwZGF0ZVNldHRpbmdzRm9yTGF5ZXIoKmdyYXBoaWNzTGF5
ZXIpOwotfQotCi12b2lkIFBhZ2VPdmVybGF5Q29udHJvbGxlcjo6ZGlkQ2hhbmdlRGV2aWNlU2Nh
bGVGYWN0b3IoKQotewotICAgIG1fZG9jdW1lbnRPdmVybGF5Um9vdExheWVyLT5ub3RlRGV2aWNl
T3JQYWdlU2NhbGVGYWN0b3JDaGFuZ2VkSW5jbHVkaW5nRGVzY2VuZGFudHMoKTsKLSAgICBtX3Zp
ZXdPdmVybGF5Um9vdExheWVyLT5ub3RlRGV2aWNlT3JQYWdlU2NhbGVGYWN0b3JDaGFuZ2VkSW5j
bHVkaW5nRGVzY2VuZGFudHMoKTsKLQotICAgIGZvciAoYXV0byYgZ3JhcGhpY3NMYXllciA6IG1f
b3ZlcmxheUdyYXBoaWNzTGF5ZXJzLnZhbHVlcygpKQotICAgICAgICBncmFwaGljc0xheWVyLT5z
ZXROZWVkc0Rpc3BsYXkoKTsKLX0KLQotdm9pZCBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6OmRpZENo
YW5nZUV4cG9zZWRSZWN0KCkKLXsKLSAgICBtX3dlYlBhZ2UuZHJhd2luZ0FyZWEoKS0+c2NoZWR1
bGVDb21wb3NpdGluZ0xheWVyRmx1c2goKTsKLX0KLQotdm9pZCBQYWdlT3ZlcmxheUNvbnRyb2xs
ZXI6OmRpZFNjcm9sbEZyYW1lKEZyYW1lKiBmcmFtZSkKLXsKLSAgICBmb3IgKGF1dG8mIG92ZXJs
YXlBbmRMYXllciA6IG1fb3ZlcmxheUdyYXBoaWNzTGF5ZXJzKSB7Ci0gICAgICAgIGlmIChvdmVy
bGF5QW5kTGF5ZXIua2V5LT5vdmVybGF5VHlwZSgpID09IFBhZ2VPdmVybGF5OjpPdmVybGF5VHlw
ZTo6VmlldyB8fCAhZnJhbWUtPmlzTWFpbkZyYW1lKCkpCi0gICAgICAgICAgICBvdmVybGF5QW5k
TGF5ZXIudmFsdWUtPnNldE5lZWRzRGlzcGxheSgpOwotICAgICAgICBvdmVybGF5QW5kTGF5ZXIu
a2V5LT5kaWRTY3JvbGxGcmFtZShmcmFtZSk7Ci0gICAgfQotfQotCi12b2lkIFBhZ2VPdmVybGF5
Q29udHJvbGxlcjo6Zmx1c2hQYWdlT3ZlcmxheUxheWVycyhGbG9hdFJlY3QgdmlzaWJsZVJlY3Qp
Ci17Ci0gICAgbV92aWV3T3ZlcmxheVJvb3RMYXllci0+Zmx1c2hDb21wb3NpdGluZ1N0YXRlKHZp
c2libGVSZWN0KTsKLX0KLQotdm9pZCBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6OnVwZGF0ZVNldHRp
bmdzRm9yTGF5ZXIoR3JhcGhpY3NMYXllciYgbGF5ZXIpCi17Ci0gICAgU2V0dGluZ3MmIHNldHRp
bmdzID0gbV93ZWJQYWdlLmNvcmVQYWdlKCktPnNldHRpbmdzKCk7Ci0gICAgbGF5ZXIuc2V0QWNj
ZWxlcmF0ZXNEcmF3aW5nKHNldHRpbmdzLmFjY2VsZXJhdGVkRHJhd2luZ0VuYWJsZWQoKSk7Ci0g
ICAgbGF5ZXIuc2V0U2hvd0RlYnVnQm9yZGVyKHNldHRpbmdzLnNob3dEZWJ1Z0JvcmRlcnMoKSk7
Ci0gICAgbGF5ZXIuc2V0U2hvd1JlcGFpbnRDb3VudGVyKHNldHRpbmdzLnNob3dSZXBhaW50Q291
bnRlcigpKTsKLX0KLQotYm9vbCBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6OmhhbmRsZU1vdXNlRXZl
bnQoY29uc3QgV2ViTW91c2VFdmVudCYgbW91c2VFdmVudCkKLXsKLSAgICBpZiAoIW1fcGFnZU92
ZXJsYXlzLnNpemUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgZm9yIChhdXRvIGl0
ID0gbV9wYWdlT3ZlcmxheXMucmJlZ2luKCksIGVuZCA9IG1fcGFnZU92ZXJsYXlzLnJlbmQoKTsg
aXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGlmICgoKml0KS0+bW91c2VFdmVudChtb3VzZUV2
ZW50KSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiBmYWxz
ZTsKLX0KLQotV0tUeXBlUmVmIFBhZ2VPdmVybGF5Q29udHJvbGxlcjo6Y29weUFjY2Vzc2liaWxp
dHlBdHRyaWJ1dGVWYWx1ZShXS1N0cmluZ1JlZiBhdHRyaWJ1dGUsIFdLVHlwZVJlZiBwYXJhbWV0
ZXIpCi17Ci0gICAgaWYgKCFtX3BhZ2VPdmVybGF5cy5zaXplKCkpCi0gICAgICAgIHJldHVybiBu
dWxscHRyOwotCi0gICAgZm9yIChhdXRvIGl0ID0gbV9wYWdlT3ZlcmxheXMucmJlZ2luKCksIGVu
ZCA9IG1fcGFnZU92ZXJsYXlzLnJlbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGlm
IChXS1R5cGVSZWYgdmFsdWUgPSAoKml0KS0+Y29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1
ZShhdHRyaWJ1dGUsIHBhcmFtZXRlcikpCi0gICAgICAgICAgICByZXR1cm4gdmFsdWU7Ci0gICAg
fQotCi0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLVdLQXJyYXlSZWYgUGFnZU92ZXJsYXlDb250
cm9sbGVyOjpjb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZXNOYW1lcyhib29sIHBhcmFtZXRlcml6
ZWROYW1lcykKLXsKLSAgICBpZiAoIW1fcGFnZU92ZXJsYXlzLnNpemUoKSkKLSAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0KLSAgICBmb3IgKGF1dG8gaXQgPSBtX3BhZ2VPdmVybGF5cy5yYmVnaW4o
KSwgZW5kID0gbV9wYWdlT3ZlcmxheXMucmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAg
ICAgaWYgKFdLQXJyYXlSZWYgdmFsdWUgPSAoKml0KS0+Y29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1
dGVOYW1lcyhwYXJhbWV0ZXJpemVkTmFtZXMpKQotICAgICAgICAgICAgcmV0dXJuIHZhbHVlOwot
ICAgIH0KLQotICAgIHJldHVybiBudWxscHRyOwotfQotCi12b2lkIFBhZ2VPdmVybGF5Q29udHJv
bGxlcjo6cGFpbnRDb250ZW50cyhjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiBncmFwaGlj
c0xheWVyLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgV2ViQ29y
ZTo6R3JhcGhpY3NMYXllclBhaW50aW5nUGhhc2UsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYg
Y2xpcFJlY3QpCi17Ci0gICAgZm9yIChhdXRvIGl0ID0gbV9vdmVybGF5R3JhcGhpY3NMYXllcnMu
YmVnaW4oKSwgZW5kID0gbV9vdmVybGF5R3JhcGhpY3NMYXllcnMuZW5kKCk7IGl0ICE9IGVuZDsg
KytpdCkgewotICAgICAgICBpZiAoaXQtPnZhbHVlLmdldCgpICE9IGdyYXBoaWNzTGF5ZXIpCi0g
ICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVy
IHN0YXRlU2F2ZXIoZ3JhcGhpY3NDb250ZXh0KTsKLSAgICAgICAgZ3JhcGhpY3NDb250ZXh0LmNs
aXAoY2xpcFJlY3QpOwotICAgICAgICBpdC0+a2V5LT5kcmF3UmVjdChncmFwaGljc0NvbnRleHQs
IGVuY2xvc2luZ0ludFJlY3QoY2xpcFJlY3QpKTsKLQotICAgICAgICByZXR1cm47Ci0gICAgfQot
fQotCi1mbG9hdCBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6OmRldmljZVNjYWxlRmFjdG9yKCkgY29u
c3QKLXsKLSAgICByZXR1cm4gbV93ZWJQYWdlLmNvcmVQYWdlKCktPmRldmljZVNjYWxlRmFjdG9y
KCk7Ci19Ci0KLXZvaWQgUGFnZU92ZXJsYXlDb250cm9sbGVyOjpub3RpZnlGbHVzaFJlcXVpcmVk
KGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKQotewotICAgIGlmIChtX3dlYlBhZ2UuZHJh
d2luZ0FyZWEoKSkKLSAgICAgICAgbV93ZWJQYWdlLmRyYXdpbmdBcmVhKCktPnNjaGVkdWxlQ29t
cG9zaXRpbmdMYXllckZsdXNoKCk7Ci19Ci0KLXZvaWQgUGFnZU92ZXJsYXlDb250cm9sbGVyOjpk
aWRDaGFuZ2VPdmVybGF5RnJhbWUoUGFnZU92ZXJsYXkmIG92ZXJsYXkpCi17Ci0gICAgQVNTRVJU
KG1fcGFnZU92ZXJsYXlzLmNvbnRhaW5zKCZvdmVybGF5KSk7Ci0gICAgdXBkYXRlT3ZlcmxheUdl
b21ldHJ5KG92ZXJsYXksICptX292ZXJsYXlHcmFwaGljc0xheWVycy5nZXQoJm92ZXJsYXkpKTsK
LX0KLQotdm9pZCBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6OmRpZENoYW5nZU92ZXJsYXlCYWNrZ3Jv
dW5kQ29sb3IoUGFnZU92ZXJsYXkmIG92ZXJsYXkpCi17Ci0gICAgQVNTRVJUKG1fcGFnZU92ZXJs
YXlzLmNvbnRhaW5zKCZvdmVybGF5KSk7Ci0gICAgbV9vdmVybGF5R3JhcGhpY3NMYXllcnMuZ2V0
KCZvdmVybGF5KS0+c2V0QmFja2dyb3VuZENvbG9yKG92ZXJsYXkuYmFja2dyb3VuZENvbG9yKCkp
OwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9QYWdlT3ZlcmxheUNvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9QYWdlT3ZlcmxheUNvbnRyb2xsZXIuaApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMjUxODJkNS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvUGFnZU92ZXJsYXlDb250cm9sbGVyLmgKKysrIC9kZXYvbnVs
bApAQCAtMSw5OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBQYWdlT3ZlcmxheUNvbnRy
b2xsZXJfaAotI2RlZmluZSBQYWdlT3ZlcmxheUNvbnRyb2xsZXJfaAotCi0jaW5jbHVkZSAiUGFn
ZU92ZXJsYXkuaCIKLSNpbmNsdWRlICJXS0Jhc2UuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0dyYXBo
aWNzTGF5ZXJDbGllbnQuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0
Zi9SZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLWNsYXNzIEZyYW1lOwotfQotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgV2ViTW91
c2VFdmVudDsKLWNsYXNzIFdlYlBhZ2U7Ci0KLWNsYXNzIFBhZ2VPdmVybGF5Q29udHJvbGxlciA6
IHB1YmxpYyBXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2xpZW50IHsKLXB1YmxpYzoKLSAgICBQYWdl
T3ZlcmxheUNvbnRyb2xsZXIoV2ViUGFnZSYpOwotCi0gICAgdm9pZCBpbml0aWFsaXplKCk7Ci0K
LSAgICBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiBkb2N1bWVudE92ZXJsYXlSb290TGF5ZXIoKSBj
b25zdCB7IHJldHVybiBtX2RvY3VtZW50T3ZlcmxheVJvb3RMYXllci5nZXQoKTsgfQotICAgIFdl
YkNvcmU6OkdyYXBoaWNzTGF5ZXIqIHZpZXdPdmVybGF5Um9vdExheWVyKCkgY29uc3QgeyByZXR1
cm4gbV92aWV3T3ZlcmxheVJvb3RMYXllci5nZXQoKTsgfQotCi0gICAgdm9pZCBpbnN0YWxsUGFn
ZU92ZXJsYXkoUGFzc1JlZlB0cjxQYWdlT3ZlcmxheT4sIFBhZ2VPdmVybGF5OjpGYWRlTW9kZSk7
Ci0gICAgdm9pZCB1bmluc3RhbGxQYWdlT3ZlcmxheShQYWdlT3ZlcmxheSosIFBhZ2VPdmVybGF5
OjpGYWRlTW9kZSk7Ci0KLSAgICB2b2lkIHNldFBhZ2VPdmVybGF5TmVlZHNEaXNwbGF5KFBhZ2VP
dmVybGF5JiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOwotICAgIHZvaWQgc2V0UGFnZU92ZXJs
YXlPcGFjaXR5KFBhZ2VPdmVybGF5JiwgZmxvYXQpOwotICAgIHZvaWQgY2xlYXJQYWdlT3Zlcmxh
eShQYWdlT3ZlcmxheSYpOwotICAgIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqIGxheWVyRm9yT3Zl
cmxheShQYWdlT3ZlcmxheSYpIGNvbnN0OwotCi0gICAgdm9pZCBkaWRDaGFuZ2VWaWV3U2l6ZSgp
OwotICAgIHZvaWQgZGlkQ2hhbmdlRG9jdW1lbnRTaXplKCk7Ci0gICAgdm9pZCBkaWRDaGFuZ2VQ
cmVmZXJlbmNlcygpOwotICAgIHZvaWQgZGlkQ2hhbmdlRGV2aWNlU2NhbGVGYWN0b3IoKTsKLSAg
ICB2b2lkIGRpZENoYW5nZUV4cG9zZWRSZWN0KCk7Ci0gICAgdm9pZCBkaWRTY3JvbGxGcmFtZShX
ZWJDb3JlOjpGcmFtZSopOwotCi0gICAgdm9pZCBkaWRDaGFuZ2VPdmVybGF5RnJhbWUoUGFnZU92
ZXJsYXkmKTsKLSAgICB2b2lkIGRpZENoYW5nZU92ZXJsYXlCYWNrZ3JvdW5kQ29sb3IoUGFnZU92
ZXJsYXkmKTsKLQotICAgIHZvaWQgZmx1c2hQYWdlT3ZlcmxheUxheWVycyhXZWJDb3JlOjpGbG9h
dFJlY3QpOwotCi0gICAgYm9vbCBoYW5kbGVNb3VzZUV2ZW50KGNvbnN0IFdlYk1vdXNlRXZlbnQm
KTsKLQotICAgIC8vIEZJWE1FOiBXZSBzaG91bGRuJ3QgdXNlIEFQSSB0eXBlcyBoZXJlLgotICAg
IFdLVHlwZVJlZiBjb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlKFdLU3RyaW5nUmVmIGF0
dHJpYnV0ZSwgV0tUeXBlUmVmIHBhcmFtZXRlcik7Ci0gICAgV0tBcnJheVJlZiBjb3B5QWNjZXNz
aWJpbGl0eUF0dHJpYnV0ZXNOYW1lcyhib29sIHBhcmFtZXRlcml6ZWROYW1lcyk7Ci0KLXByaXZh
dGU6Ci0gICAgdm9pZCB1cGRhdGVTZXR0aW5nc0ZvckxheWVyKFdlYkNvcmU6OkdyYXBoaWNzTGF5
ZXImKTsKLSAgICB2b2lkIHVwZGF0ZUZvcmNlU3luY2hyb25vdXNTY3JvbGxMYXllclBvc2l0aW9u
VXBkYXRlcygpOwotCi0gICAgLy8gV2ViQ29yZTo6R3JhcGhpY3NMYXllckNsaWVudAotICAgIHZp
cnR1YWwgdm9pZCBub3RpZnlGbHVzaFJlcXVpcmVkKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5
ZXIqKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50cyhjb25zdCBXZWJD
b3JlOjpHcmFwaGljc0xheWVyKiwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiwgV2ViQ29yZTo6
R3JhcGhpY3NMYXllclBhaW50aW5nUGhhc2UsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgY2xp
cFJlY3QpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IoKSBj
b25zdCBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkU2tpcExheWVySW5EdW1wKGNv
bnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVl
OyB9Ci0KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6R3JhcGhpY3NMYXllcj4gbV9kb2N1
bWVudE92ZXJsYXlSb290TGF5ZXI7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OkdyYXBo
aWNzTGF5ZXI+IG1fdmlld092ZXJsYXlSb290TGF5ZXI7Ci0gICAgSGFzaE1hcDxQYWdlT3Zlcmxh
eSosIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpHcmFwaGljc0xheWVyPj4gbV9vdmVybGF5R3Jh
cGhpY3NMYXllcnM7Ci0gICAgVmVjdG9yPFJlZlB0cjxQYWdlT3ZlcmxheT4+IG1fcGFnZU92ZXJs
YXlzOwotICAgIFdlYlBhZ2UmIG1fd2ViUGFnZTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktp
dAotCi0jZW5kaWYgLy8gUGFnZU92ZXJsYXlDb250cm9sbGVyX2gKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9TZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyLmgg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvU2VydmljZXNPdmVybGF5Q29udHJv
bGxlci5oCmluZGV4IDNiMDlkM2QuLjQxMWQzM2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9TZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyLmgKKysrIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1NlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIu
aApAQCAtMjgsOSArMjgsOSBAQAogCiAjaWYgRU5BQkxFKFNFUlZJQ0VfQ09OVFJPTFMpIHx8IEVO
QUJMRShURUxFUEhPTkVfTlVNQkVSX0RFVEVDVElPTikKIAotI2luY2x1ZGUgIlBhZ2VPdmVybGF5
LmgiCiAjaW5jbHVkZSAiV2ViRnJhbWUuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzTGF5
ZXJDbGllbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1BhZ2VPdmVybGF5Lmg+CiAjaW5jbHVkZSA8
V2ViQ29yZS9SYW5nZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvVGltZXIuaD4KICNpbmNsdWRlIDx3
dGYvUmVmQ291bnRlZC5oPgpAQCAtMzksNyArMzksNiBAQCB0eXBlZGVmIHZvaWQqIERESGlnaGxp
Z2h0UmVmOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBMYXlvdXRSZWN0OwotCiBzdHJ1
Y3QgR2FwUmVjdHM7CiB9CiAKQEAgLTQ3LDcgKzQ2LDcgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAK
IGNsYXNzIFdlYlBhZ2U7CiAKLWNsYXNzIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIgOiBwcml2
YXRlIFBhZ2VPdmVybGF5OjpDbGllbnQgeworY2xhc3MgU2VydmljZXNPdmVybGF5Q29udHJvbGxl
ciA6IHByaXZhdGUgV2ViQ29yZTo6UGFnZU92ZXJsYXk6OkNsaWVudCB7CiBwdWJsaWM6CiAgICAg
U2VydmljZXNPdmVybGF5Q29udHJvbGxlcihXZWJQYWdlJik7CiAgICAgflNlcnZpY2VzT3Zlcmxh
eUNvbnRyb2xsZXIoKTsKQEAgLTk4LDEyICs5NywxMiBAQCBwcml2YXRlOgogICAgIH07CiAKICAg
ICAvLyBQYWdlT3ZlcmxheTo6Q2xpZW50Ci0gICAgdmlydHVhbCB2b2lkIHBhZ2VPdmVybGF5RGVz
dHJveWVkKFBhZ2VPdmVybGF5Kikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHdpbGxNb3Zl
VG9XZWJQYWdlKFBhZ2VPdmVybGF5KiwgV2ViUGFnZSopIG92ZXJyaWRlOwotICAgIHZpcnR1YWwg
dm9pZCBkaWRNb3ZlVG9XZWJQYWdlKFBhZ2VPdmVybGF5KiwgV2ViUGFnZSopIG92ZXJyaWRlOwot
ICAgIHZpcnR1YWwgdm9pZCBkcmF3UmVjdChQYWdlT3ZlcmxheSosIFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dCYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGRpcnR5UmVjdCkgb3ZlcnJpZGU7Ci0g
ICAgdmlydHVhbCBib29sIG1vdXNlRXZlbnQoUGFnZU92ZXJsYXkqLCBjb25zdCBXZWJNb3VzZUV2
ZW50Jikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGRpZFNjcm9sbEZyYW1lKFBhZ2VPdmVy
bGF5KiwgV2ViQ29yZTo6RnJhbWUqKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFnZU92
ZXJsYXlEZXN0cm95ZWQoV2ViQ29yZTo6UGFnZU92ZXJsYXkmKSBvdmVycmlkZTsKKyAgICB2aXJ0
dWFsIHZvaWQgd2lsbE1vdmVUb1BhZ2UoV2ViQ29yZTo6UGFnZU92ZXJsYXkmLCBXZWJDb3JlOjpQ
YWdlKikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGRpZE1vdmVUb1BhZ2UoV2ViQ29yZTo6
UGFnZU92ZXJsYXkmLCBXZWJDb3JlOjpQYWdlKikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lk
IGRyYXdSZWN0KFdlYkNvcmU6OlBhZ2VPdmVybGF5JiwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
JiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgZGlydHlSZWN0KSBvdmVycmlkZTsKKyAgICB2aXJ0
dWFsIGJvb2wgbW91c2VFdmVudChXZWJDb3JlOjpQYWdlT3ZlcmxheSYsIGNvbnN0IFdlYkNvcmU6
OlBsYXRmb3JtTW91c2VFdmVudCYpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBkaWRTY3Jv
bGxGcmFtZShXZWJDb3JlOjpQYWdlT3ZlcmxheSYsIFdlYkNvcmU6OkZyYW1lJikgb3ZlcnJpZGU7
CiAKICAgICB2b2lkIGNyZWF0ZU92ZXJsYXlJZk5lZWRlZCgpOwogICAgIHZvaWQgaGFuZGxlQ2xp
Y2soY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmLCBIaWdobGlnaHQmKTsKQEAgLTEzOSw3ICsxMzgs
NyBAQCBwcml2YXRlOgogICAgIFdlYlBhZ2UmIHdlYlBhZ2UoKSBjb25zdCB7IHJldHVybiBtX3dl
YlBhZ2U7IH0KIAogICAgIFdlYlBhZ2UmIG1fd2ViUGFnZTsKLSAgICBQYWdlT3ZlcmxheSogbV9z
ZXJ2aWNlc092ZXJsYXk7CisgICAgV2ViQ29yZTo6UGFnZU92ZXJsYXkqIG1fc2VydmljZXNPdmVy
bGF5OwogCiAgICAgUmVmUHRyPEhpZ2hsaWdodD4gbV9hY3RpdmVIaWdobGlnaHQ7CiAgICAgUmVm
UHRyPEhpZ2hsaWdodD4gbV9uZXh0QWN0aXZlSGlnaGxpZ2h0OwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCmluZGV4IGNjYzYzYjUuLmZjZjAzMzUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKQEAgLTMy
Niw3ICszMjYsNiBAQCBXZWJQYWdlOjpXZWJQYWdlKHVpbnQ2NF90IHBhZ2VJRCwgY29uc3QgV2Vi
UGFnZUNyZWF0aW9uUGFyYW1ldGVycyYgcGFyYW1ldGVycykKICNpZiBFTkFCTEUoV0VCR0wpCiAg
ICAgLCBtX3N5c3RlbVdlYkdMUG9saWN5KFdlYkdMQWxsb3dDcmVhdGlvbikKICNlbmRpZgotICAg
ICwgbV9wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKnRoaXMpCiB7CiAgICAgQVNTRVJUKG1fcGFnZUlE
KTsKICAgICAvLyBGSVhNRTogVGhpcyBpcyBhIG5vbi1pZGVhbCBsb2NhdGlvbiBmb3IgdGhpcyBT
ZXR0aW5nIGFuZApAQCAtMzY1LDcgKzM2NCw2IEBAIFdlYlBhZ2U6OldlYlBhZ2UodWludDY0X3Qg
cGFnZUlELCBjb25zdCBXZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzKQogCiAg
ICAgbV9kcmF3aW5nQXJlYSA9IERyYXdpbmdBcmVhOjpjcmVhdGUoKnRoaXMsIHBhcmFtZXRlcnMp
OwogICAgIG1fZHJhd2luZ0FyZWEtPnNldFBhaW50aW5nRW5hYmxlZChmYWxzZSk7Ci0gICAgbV9w
YWdlT3ZlcmxheUNvbnRyb2xsZXIuaW5pdGlhbGl6ZSgpOwogCiAjaWYgRU5BQkxFKEFTWU5DX1ND
Uk9MTElORykKICAgICBtX3VzZUFzeW5jU2Nyb2xsaW5nID0gcGFyYW1ldGVycy5zdG9yZS5nZXRC
b29sVmFsdWVGb3JLZXkoV2ViUHJlZmVyZW5jZXNLZXk6OnRocmVhZGVkU2Nyb2xsaW5nRW5hYmxl
ZEtleSgpKTsKQEAgLTEyMTMsOCArMTIxMSw2IEBAIHZvaWQgV2ViUGFnZTo6c2V0U2l6ZShjb25z
dCBXZWJDb3JlOjpJbnRTaXplJiB2aWV3U2l6ZSkKICAgICBpZiAodmlldy0+dXNlRml4ZWRMYXlv
dXQoKSkKICAgICAgICAgc2VuZFZpZXdwb3J0QXR0cmlidXRlc0NoYW5nZWQoKTsKICNlbmRpZgot
Ci0gICAgbV9wYWdlT3ZlcmxheUNvbnRyb2xsZXIuZGlkQ2hhbmdlVmlld1NpemUoKTsKIH0KIAog
I2lmIFVTRShUSUxFRF9CQUNLSU5HX1NUT1JFKQpAQCAtMTQ0MCw4ICsxNDM2LDYgQEAgdm9pZCBX
ZWJQYWdlOjpzZXREZXZpY2VTY2FsZUZhY3RvcihmbG9hdCBzY2FsZUZhY3RvcikKIAogICAgIGlm
IChtX2RyYXdpbmdBcmVhLT5sYXllclRyZWVIb3N0KCkpCiAgICAgICAgIG1fZHJhd2luZ0FyZWEt
PmxheWVyVHJlZUhvc3QoKS0+ZGV2aWNlT3JQYWdlU2NhbGVGYWN0b3JDaGFuZ2VkKCk7Ci0KLSAg
ICBtX3BhZ2VPdmVybGF5Q29udHJvbGxlci5kaWRDaGFuZ2VEZXZpY2VTY2FsZUZhY3RvcigpOwog
fQogCiBmbG9hdCBXZWJQYWdlOjpkZXZpY2VTY2FsZUZhY3RvcigpIGNvbnN0CkBAIC0xNTY0LDE2
ICsxNTU4LDYgQEAgdm9pZCBXZWJQYWdlOjpwb3N0SW5qZWN0ZWRCdW5kbGVNZXNzYWdlKGNvbnN0
IFN0cmluZyYgbWVzc2FnZU5hbWUsIElQQzo6TWVzc2FnZUQKICAgICBpbmplY3RlZEJ1bmRsZS0+
ZGlkUmVjZWl2ZU1lc3NhZ2VUb1BhZ2UodGhpcywgbWVzc2FnZU5hbWUsIG1lc3NhZ2VCb2R5Lmdl
dCgpKTsKIH0KIAotdm9pZCBXZWJQYWdlOjppbnN0YWxsUGFnZU92ZXJsYXkoUGFzc1JlZlB0cjxQ
YWdlT3ZlcmxheT4gcGFnZU92ZXJsYXksIFBhZ2VPdmVybGF5OjpGYWRlTW9kZSBmYWRlTW9kZSkK
LXsKLSAgICBtX3BhZ2VPdmVybGF5Q29udHJvbGxlci5pbnN0YWxsUGFnZU92ZXJsYXkocGFnZU92
ZXJsYXksIGZhZGVNb2RlKTsKLX0KLQotdm9pZCBXZWJQYWdlOjp1bmluc3RhbGxQYWdlT3Zlcmxh
eShQYWdlT3ZlcmxheSogcGFnZU92ZXJsYXksIFBhZ2VPdmVybGF5OjpGYWRlTW9kZSBmYWRlTW9k
ZSkKLXsKLSAgICBtX3BhZ2VPdmVybGF5Q29udHJvbGxlci51bmluc3RhbGxQYWdlT3ZlcmxheShw
YWdlT3ZlcmxheSwgZmFkZU1vZGUpOwotfQotCiAjaWYgIVBMQVRGT1JNKElPUykKIHZvaWQgV2Vi
UGFnZTo6c2V0SGVhZGVyUGFnZUJhbm5lcihQYXNzUmVmUHRyPFBhZ2VCYW5uZXI+IHBhZ2VCYW5u
ZXIpCiB7CkBAIC0xOTAxLDcgKzE4ODUsNyBAQCB2b2lkIFdlYlBhZ2U6Om1vdXNlRXZlbnQoY29u
c3QgV2ViTW91c2VFdmVudCYgbW91c2VFdmVudCkKICAgICAgICAgcmV0dXJuOwogICAgIH0KICNl
bmRpZgotICAgIGJvb2wgaGFuZGxlZCA9IG1fcGFnZU92ZXJsYXlDb250cm9sbGVyLmhhbmRsZU1v
dXNlRXZlbnQobW91c2VFdmVudCk7CisgICAgYm9vbCBoYW5kbGVkID0gZmFsc2U7CiAKICNpZiAh
UExBVEZPUk0oSU9TKQogICAgIGlmICghaGFuZGxlZCAmJiBtX2hlYWRlckJhbm5lcikKQEAgLTE5
MjcsNyArMTkxMSw3IEBAIHZvaWQgV2ViUGFnZTo6bW91c2VFdmVudChjb25zdCBXZWJNb3VzZUV2
ZW50JiBtb3VzZUV2ZW50KQogCiB2b2lkIFdlYlBhZ2U6Om1vdXNlRXZlbnRTeW5jRm9yVGVzdGlu
Zyhjb25zdCBXZWJNb3VzZUV2ZW50JiBtb3VzZUV2ZW50LCBib29sJiBoYW5kbGVkKQogewotICAg
IGhhbmRsZWQgPSBtX3BhZ2VPdmVybGF5Q29udHJvbGxlci5oYW5kbGVNb3VzZUV2ZW50KG1vdXNl
RXZlbnQpOworICAgIGhhbmRsZWQgPSBmYWxzZTsKICNpZiAhUExBVEZPUk0oSU9TKQogICAgIGlm
ICghaGFuZGxlZCAmJiBtX2hlYWRlckJhbm5lcikKICAgICAgICAgaGFuZGxlZCA9IG1faGVhZGVy
QmFubmVyLT5tb3VzZUV2ZW50KG1vdXNlRXZlbnQpOwpAQCAtMjg1Niw4ICsyODQwLDYgQEAgdm9p
ZCBXZWJQYWdlOjp1cGRhdGVQcmVmZXJlbmNlcyhjb25zdCBXZWJQcmVmZXJlbmNlc1N0b3JlJiBz
dG9yZSkKIAogICAgIGlmIChtX2RyYXdpbmdBcmVhKQogICAgICAgICBtX2RyYXdpbmdBcmVhLT51
cGRhdGVQcmVmZXJlbmNlcyhzdG9yZSk7Ci0KLSAgICBtX3BhZ2VPdmVybGF5Q29udHJvbGxlci5k
aWRDaGFuZ2VQcmVmZXJlbmNlcygpOwogfQogCiAjaWYgUExBVEZPUk0oQ09DT0EpCkBAIC00Nzk4
LDggKzQ3ODAsNiBAQCBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyJiBXZWJQYWdlOjpzZXJ2aWNl
c092ZXJsYXlDb250cm9sbGVyKCkKIAogdm9pZCBXZWJQYWdlOjpkaWRDaGFuZ2VTY3JvbGxPZmZz
ZXRGb3JGcmFtZShGcmFtZSogZnJhbWUpCiB7Ci0gICAgbV9wYWdlT3ZlcmxheUNvbnRyb2xsZXIu
ZGlkU2Nyb2xsRnJhbWUoZnJhbWUpOwotCiAgICAgaWYgKCFmcmFtZS0+aXNNYWluRnJhbWUoKSkK
ICAgICAgICAgcmV0dXJuOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViUGFnZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dl
YlBhZ2UuaAppbmRleCBiN2Q0NDhjLi45YWI3OWI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKQEAgLTQxLDcgKzQxLDYgQEAKICNpbmNsdWRlICJMYXll
clRyZWVIb3N0LmgiCiAjaW5jbHVkZSAiTWVzc2FnZVJlY2VpdmVyLmgiCiAjaW5jbHVkZSAiTWVz
c2FnZVNlbmRlci5oIgotI2luY2x1ZGUgIlBhZ2VPdmVybGF5Q29udHJvbGxlci5oIgogI2luY2x1
ZGUgIlBsdWdpbi5oIgogI2luY2x1ZGUgIlNhbmRib3hFeHRlbnNpb24uaCIKICNpbmNsdWRlICJT
aGFyZWFibGVCaXRtYXAuaCIKQEAgLTE0MCw3ICsxMzksNiBAQCBjbGFzcyBEcmF3aW5nQXJlYTsK
IGNsYXNzIEluamVjdGVkQnVuZGxlQmFja0ZvcndhcmRMaXN0OwogY2xhc3MgTm90aWZpY2F0aW9u
UGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyOwogY2xhc3MgUGFnZUJhbm5lcjsKLWNsYXNzIFBhZ2VP
dmVybGF5OwogY2xhc3MgUGx1Z2luVmlldzsKIGNsYXNzIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xs
ZXI7CiBjbGFzcyBWaXNpYmxlQ29udGVudFJlY3RVcGRhdGVJbmZvOwpAQCAtMjA2LDggKzIwNCw2
IEBAIHB1YmxpYzoKICAgICAKICAgICBJbmplY3RlZEJ1bmRsZUJhY2tGb3J3YXJkTGlzdCogYmFj
a0ZvcndhcmRMaXN0KCk7CiAgICAgRHJhd2luZ0FyZWEqIGRyYXdpbmdBcmVhKCkgY29uc3QgeyBy
ZXR1cm4gbV9kcmF3aW5nQXJlYS5nZXQoKTsgfQotICAgIGNvbnN0IFBhZ2VPdmVybGF5Q29udHJv
bGxlciYgcGFnZU92ZXJsYXlDb250cm9sbGVyKCkgY29uc3QgeyByZXR1cm4gbV9wYWdlT3Zlcmxh
eUNvbnRyb2xsZXI7IH0KLSAgICBQYWdlT3ZlcmxheUNvbnRyb2xsZXImIHBhZ2VPdmVybGF5Q29u
dHJvbGxlcigpIHsgcmV0dXJuIG1fcGFnZU92ZXJsYXlDb250cm9sbGVyOyB9CiAjaWYgRU5BQkxF
KEFTWU5DX1NDUk9MTElORykKICAgICBXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvciogc2Ny
b2xsaW5nQ29vcmRpbmF0b3IoKSBjb25zdDsKICNlbmRpZgpAQCAtNDE2LDggKzQxMiw2IEBAIHB1
YmxpYzoKIAogICAgIGJvb2wgd2luZG93SXNGb2N1c2VkKCkgY29uc3Q7CiAgICAgYm9vbCB3aW5k
b3dBbmRXZWJQYWdlQXJlRm9jdXNlZCgpIGNvbnN0OwotICAgIHZvaWQgaW5zdGFsbFBhZ2VPdmVy
bGF5KFBhc3NSZWZQdHI8UGFnZU92ZXJsYXk+LCBQYWdlT3ZlcmxheTo6RmFkZU1vZGUgPSBQYWdl
T3ZlcmxheTo6RmFkZU1vZGU6OkRvTm90RmFkZSk7Ci0gICAgdm9pZCB1bmluc3RhbGxQYWdlT3Zl
cmxheShQYWdlT3ZlcmxheSosIFBhZ2VPdmVybGF5OjpGYWRlTW9kZSA9IFBhZ2VPdmVybGF5OjpG
YWRlTW9kZTo6RG9Ob3RGYWRlKTsKIAogI2lmICFQTEFURk9STShJT1MpCiAgICAgdm9pZCBzZXRI
ZWFkZXJQYWdlQmFubmVyKFBhc3NSZWZQdHI8UGFnZUJhbm5lcj4pOwpAQCAtODIyLDkgKzgxNiw2
IEBAIHB1YmxpYzoKICAgICBXZWJDb3JlOjpTY3JvbGxQaW5uaW5nQmVoYXZpb3Igc2Nyb2xsUGlu
bmluZ0JlaGF2aW9yKCkgeyByZXR1cm4gbV9zY3JvbGxQaW5uaW5nQmVoYXZpb3I7IH0KICAgICB2
b2lkIHNldFNjcm9sbFBpbm5pbmdCZWhhdmlvcih1aW50MzJfdCAvKiBXZWJDb3JlOjpTY3JvbGxQ
aW5uaW5nQmVoYXZpb3IgKi8gcGlubmluZyk7CiAKLSAgICBXS1R5cGVSZWYgcGFnZU92ZXJsYXlD
b3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlKFdLU3RyaW5nUmVmIGF0dHJpYnV0ZSwgV0tU
eXBlUmVmIHBhcmFtZXRlcik7Ci0gICAgV0tBcnJheVJlZiBwYWdlT3ZlcmxheUNvcHlBY2Nlc3Np
YmlsaXR5QXR0cmlidXRlc05hbWVzKGJvb2wgcGFyYW1ldGVyaXplZE5hbWVzKTsKLQogICAgIFBh
c3NSZWZQdHI8V2ViQ29yZTo6RG9jdW1lbnRMb2FkZXI+IGNyZWF0ZURvY3VtZW50TG9hZGVyKFdl
YkNvcmU6OkZyYW1lJiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgV2Vi
Q29yZTo6U3Vic3RpdHV0ZURhdGEmKTsKIAogICAgIHZvaWQgZ2V0Qnl0ZWNvZGVQcm9maWxlKHVp
bnQ2NF90IGNhbGxiYWNrSUQpOwpAQCAtMTI3Nyw4ICsxMjY4LDYgQEAgcHJpdmF0ZToKICNpZiBF
TkFCTEUoU0VSVklDRV9DT05UUk9MUykgfHwgRU5BQkxFKFRFTEVQSE9ORV9OVU1CRVJfREVURUNU
SU9OKQogICAgIHN0ZDo6dW5pcXVlX3B0cjxTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyPiBtX3Nl
cnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI7CiAjZW5kaWYKLQotICAgIFBhZ2VPdmVybGF5Q29udHJv
bGxlciBtX3BhZ2VPdmVybGF5Q29udHJvbGxlcjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktp
dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VP
dmVybGF5LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlT3Zl
cmxheS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWQyZTNkNQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdl
T3ZlcmxheS5jcHAKQEAgLTAsMCArMSwxMTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiV2ViUGFnZU92ZXJsYXkuaCIKKworI2luY2x1ZGUgIldlYkZyYW1l
LmgiCisjaW5jbHVkZSAiV2ViUGFnZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NMYXll
ci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUGFnZU92ZXJsYXkuaD4KKwordXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitQYXNzUmVmUHRyPFdlYlBhZ2VPdmVy
bGF5PiBXZWJQYWdlT3ZlcmxheTo6Y3JlYXRlKFdlYlBhZ2VPdmVybGF5OjpDbGllbnQmIGNsaWVu
dCwgUGFnZU92ZXJsYXk6Ok92ZXJsYXlUeXBlIG92ZXJsYXlUeXBlKQoreworICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgV2ViUGFnZU92ZXJsYXkoY2xpZW50LCBvdmVybGF5VHlwZSkpOworfQorCitX
ZWJQYWdlT3ZlcmxheTo6V2ViUGFnZU92ZXJsYXkoV2ViUGFnZU92ZXJsYXk6OkNsaWVudCYgY2xp
ZW50LCBQYWdlT3ZlcmxheTo6T3ZlcmxheVR5cGUgb3ZlcmxheVR5cGUpCisgICAgOiBtX292ZXJs
YXkoUGFnZU92ZXJsYXk6OmNyZWF0ZSgqdGhpcywgb3ZlcmxheVR5cGUpKQorICAgICwgbV9jbGll
bnQoY2xpZW50KQoreworfQorCitXZWJQYWdlT3ZlcmxheTo6fldlYlBhZ2VPdmVybGF5KCkKK3sK
K30KKwordm9pZCBXZWJQYWdlT3ZlcmxheTo6c2V0TmVlZHNEaXNwbGF5KGNvbnN0IEludFJlY3Qm
IGRpcnR5UmVjdCkKK3sKKyAgICBtX292ZXJsYXktPnNldE5lZWRzRGlzcGxheShkaXJ0eVJlY3Qp
OworfQorCit2b2lkIFdlYlBhZ2VPdmVybGF5OjpzZXROZWVkc0Rpc3BsYXkoKQoreworICAgIG1f
b3ZlcmxheS0+c2V0TmVlZHNEaXNwbGF5KCk7Cit9CisKK3ZvaWQgV2ViUGFnZU92ZXJsYXk6OmNs
ZWFyKCkKK3sKKyAgICBtX292ZXJsYXktPmNsZWFyKCk7Cit9CisKK3ZvaWQgV2ViUGFnZU92ZXJs
YXk6OnBhZ2VPdmVybGF5RGVzdHJveWVkKFBhZ2VPdmVybGF5JikKK3sKKyAgICBtX2NsaWVudC5w
YWdlT3ZlcmxheURlc3Ryb3llZCgqdGhpcyk7Cit9CisKK3ZvaWQgV2ViUGFnZU92ZXJsYXk6Ondp
bGxNb3ZlVG9QYWdlKFBhZ2VPdmVybGF5JiwgUGFnZSogcGFnZSkKK3sKKyAgICBtX2NsaWVudC53
aWxsTW92ZVRvUGFnZSgqdGhpcywgcGFnZSA/IFdlYlBhZ2U6OmZyb21Db3JlUGFnZShwYWdlKSA6
IG51bGxwdHIpOworfQorCit2b2lkIFdlYlBhZ2VPdmVybGF5OjpkaWRNb3ZlVG9QYWdlKFBhZ2VP
dmVybGF5JiwgUGFnZSogcGFnZSkKK3sKKyAgICBtX2NsaWVudC5kaWRNb3ZlVG9QYWdlKCp0aGlz
LCBwYWdlID8gV2ViUGFnZTo6ZnJvbUNvcmVQYWdlKHBhZ2UpIDogbnVsbHB0cik7Cit9CisKK3Zv
aWQgV2ViUGFnZU92ZXJsYXk6OmRyYXdSZWN0KFBhZ2VPdmVybGF5JiwgR3JhcGhpY3NDb250ZXh0
JiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpCit7CisgICAgbV9jbGllbnQuZHJh
d1JlY3QoKnRoaXMsIGNvbnRleHQsIGRpcnR5UmVjdCk7Cit9CisKK2Jvb2wgV2ViUGFnZU92ZXJs
YXk6Om1vdXNlRXZlbnQoUGFnZU92ZXJsYXkmLCBjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIGV2
ZW50KQoreworICAgIHJldHVybiBtX2NsaWVudC5tb3VzZUV2ZW50KCp0aGlzLCBldmVudCk7Cit9
CisKK3ZvaWQgV2ViUGFnZU92ZXJsYXk6OmRpZFNjcm9sbEZyYW1lKFBhZ2VPdmVybGF5JiwgRnJh
bWUmIGZyYW1lKQoreworICAgIG1fY2xpZW50LmRpZFNjcm9sbEZyYW1lKCp0aGlzLCBXZWJGcmFt
ZTo6ZnJvbUNvcmVGcmFtZShmcmFtZSkpOworfQorCitib29sIFdlYlBhZ2VPdmVybGF5Ojpjb3B5
QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVN0cmluZ1ZhbHVlRm9yUG9pbnQoUGFnZU92ZXJsYXkmLCBT
dHJpbmcgYXR0cmlidXRlLCBGbG9hdFBvaW50IHBhcmFtZXRlciwgU3RyaW5nJiB2YWx1ZSkKK3sK
KyAgICByZXR1cm4gbV9jbGllbnQuY29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVTdHJpbmdWYWx1
ZUZvclBvaW50KCp0aGlzLCBhdHRyaWJ1dGUsIHBhcmFtZXRlciwgdmFsdWUpOworfQorCitib29s
IFdlYlBhZ2VPdmVybGF5Ojpjb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZUJvb2xWYWx1ZUZvclBv
aW50KFBhZ2VPdmVybGF5JiwgU3RyaW5nIGF0dHJpYnV0ZSwgRmxvYXRQb2ludCBwYXJhbWV0ZXIs
IGJvb2wmIHZhbHVlKQoreworICAgIHJldHVybiBtX2NsaWVudC5jb3B5QWNjZXNzaWJpbGl0eUF0
dHJpYnV0ZUJvb2xWYWx1ZUZvclBvaW50KCp0aGlzLCBhdHRyaWJ1dGUsIHBhcmFtZXRlciwgdmFs
dWUpOworfQorCitWZWN0b3I8U3RyaW5nPiBXZWJQYWdlT3ZlcmxheTo6Y29weUFjY2Vzc2liaWxp
dHlBdHRyaWJ1dGVOYW1lcyhQYWdlT3ZlcmxheSYsIGJvb2wgcGFyYW1ldGVyaXplZE5hbWVzKQor
eworICAgIHJldHVybiBtX2NsaWVudC5jb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZU5hbWVzKCp0
aGlzLCBwYXJhbWV0ZXJpemVkTmFtZXMpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlT3Zlcmxh
eS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VPdmVybGF5LmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDZkZGUxNgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlT3ZlcmxheS5o
CkBAIC0wLDAgKzEsOTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYlBhZ2VPdmVybGF5X2gK
KyNkZWZpbmUgV2ViUGFnZU92ZXJsYXlfaAorCisjaW5jbHVkZSAiQVBJT2JqZWN0LmgiCisjaW5j
bHVkZSA8V2ViQ29yZS9GbG9hdFBvaW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9JbnRSZWN0Lmg+
CisjaW5jbHVkZSA8V2ViQ29yZS9QYWdlT3ZlcmxheS5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVm
UHRyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJGcmFtZTsKK2NsYXNzIFdl
YlBhZ2U7CisKK2NsYXNzIFdlYlBhZ2VPdmVybGF5IDogcHVibGljIEFQSTo6T2JqZWN0SW1wbDxB
UEk6Ok9iamVjdDo6VHlwZTo6QnVuZGxlUGFnZU92ZXJsYXk+LCBwcml2YXRlIFdlYkNvcmU6OlBh
Z2VPdmVybGF5OjpDbGllbnQgeworcHVibGljOgorICAgIGNsYXNzIENsaWVudCB7CisgICAgcHJv
dGVjdGVkOgorICAgICAgICB2aXJ0dWFsIH5DbGllbnQoKSB7IH0KKworICAgIHB1YmxpYzoKKyAg
ICAgICAgdmlydHVhbCB2b2lkIHBhZ2VPdmVybGF5RGVzdHJveWVkKFdlYlBhZ2VPdmVybGF5Jikg
PSAwOworICAgICAgICB2aXJ0dWFsIHZvaWQgd2lsbE1vdmVUb1BhZ2UoV2ViUGFnZU92ZXJsYXkm
LCBXZWJQYWdlKikgPSAwOworICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkTW92ZVRvUGFnZShXZWJQ
YWdlT3ZlcmxheSYsIFdlYlBhZ2UqKSA9IDA7CisgICAgICAgIHZpcnR1YWwgdm9pZCBkcmF3UmVj
dChXZWJQYWdlT3ZlcmxheSYsIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IFdlYkNv
cmU6OkludFJlY3QmIGRpcnR5UmVjdCkgPSAwOworICAgICAgICB2aXJ0dWFsIGJvb2wgbW91c2VF
dmVudChXZWJQYWdlT3ZlcmxheSYsIGNvbnN0IFdlYkNvcmU6OlBsYXRmb3JtTW91c2VFdmVudCYp
ID0gMDsKKyAgICAgICAgdmlydHVhbCB2b2lkIGRpZFNjcm9sbEZyYW1lKFdlYlBhZ2VPdmVybGF5
JiwgV2ViRnJhbWUqKSB7IH0KKworICAgICAgICB2aXJ0dWFsIGJvb2wgY29weUFjY2Vzc2liaWxp
dHlBdHRyaWJ1dGVTdHJpbmdWYWx1ZUZvclBvaW50KFdlYlBhZ2VPdmVybGF5JiwgU3RyaW5nIC8q
IGF0dHJpYnV0ZSAqLywgV2ViQ29yZTo6RmxvYXRQb2ludCAvKiBwYXJhbWV0ZXIgKi8sIFN0cmlu
ZyYgdmFsdWUpIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgICAgIHZpcnR1YWwgYm9vbCBjb3B5QWNj
ZXNzaWJpbGl0eUF0dHJpYnV0ZUJvb2xWYWx1ZUZvclBvaW50KFdlYlBhZ2VPdmVybGF5JiwgU3Ry
aW5nIC8qIGF0dHJpYnV0ZSAqLywgV2ViQ29yZTo6RmxvYXRQb2ludCAvKiBwYXJhbWV0ZXIgKi8s
IGJvb2wmIHZhbHVlKSB7IHJldHVybiBmYWxzZTsgfQorICAgICAgICB2aXJ0dWFsIFZlY3RvcjxT
dHJpbmc+IGNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlTmFtZXMoV2ViUGFnZU92ZXJsYXkmLCBi
b29sIC8qIHBhcmFtZXRlcml6ZWROYW1lcyAqLykgeyByZXR1cm4gVmVjdG9yPFN0cmluZz4oKTsg
fQorICAgIH07CisKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJQYWdlT3ZlcmxheT4gY3JlYXRl
KENsaWVudCYsIFdlYkNvcmU6OlBhZ2VPdmVybGF5OjpPdmVybGF5VHlwZSA9IFdlYkNvcmU6OlBh
Z2VPdmVybGF5OjpPdmVybGF5VHlwZTo6Vmlldyk7CisgICAgdmlydHVhbCB+V2ViUGFnZU92ZXJs
YXkoKTsKKworICAgIHZvaWQgc2V0TmVlZHNEaXNwbGF5KGNvbnN0IFdlYkNvcmU6OkludFJlY3Qm
IGRpcnR5UmVjdCk7CisgICAgdm9pZCBzZXROZWVkc0Rpc3BsYXkoKTsKKworICAgIHZvaWQgY2xl
YXIoKTsKKworICAgIFdlYkNvcmU6OlBhZ2VPdmVybGF5KiBjb3JlT3ZlcmxheSgpIGNvbnN0IHsg
cmV0dXJuIG1fb3ZlcmxheS5nZXQoKTsgfQorICAgIENsaWVudCYgY2xpZW50KCkgY29uc3QgeyBy
ZXR1cm4gbV9jbGllbnQ7IH0KKworcHJpdmF0ZToKKyAgICBXZWJQYWdlT3ZlcmxheShDbGllbnQm
LCBXZWJDb3JlOjpQYWdlT3ZlcmxheTo6T3ZlcmxheVR5cGUpOworCisgICAgLy8gV2ViQ29yZTo6
UGFnZU92ZXJsYXk6OkNsaWVudAorICAgIHZpcnR1YWwgdm9pZCBwYWdlT3ZlcmxheURlc3Ryb3ll
ZChXZWJDb3JlOjpQYWdlT3ZlcmxheSYpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCB3aWxs
TW92ZVRvUGFnZShXZWJDb3JlOjpQYWdlT3ZlcmxheSYsIFdlYkNvcmU6OlBhZ2UqKSBvdmVycmlk
ZTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkTW92ZVRvUGFnZShXZWJDb3JlOjpQYWdlT3ZlcmxheSYs
IFdlYkNvcmU6OlBhZ2UqKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd1JlY3QoV2Vi
Q29yZTo6UGFnZU92ZXJsYXkmLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmLCBjb25zdCBXZWJD
b3JlOjpJbnRSZWN0JiBkaXJ0eVJlY3QpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBtb3Vz
ZUV2ZW50KFdlYkNvcmU6OlBhZ2VPdmVybGF5JiwgY29uc3QgV2ViQ29yZTo6UGxhdGZvcm1Nb3Vz
ZUV2ZW50Jikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGRpZFNjcm9sbEZyYW1lKFdlYkNv
cmU6OlBhZ2VPdmVybGF5JiwgV2ViQ29yZTo6RnJhbWUmKSBvdmVycmlkZTsKKworICAgIHZpcnR1
YWwgYm9vbCBjb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVN0cmluZ1ZhbHVlRm9yUG9pbnQoV2Vi
Q29yZTo6UGFnZU92ZXJsYXkmLCBTdHJpbmcgLyogYXR0cmlidXRlICovLCBXZWJDb3JlOjpGbG9h
dFBvaW50IC8qIHBhcmFtZXRlciAqLywgU3RyaW5nJiB2YWx1ZSkgb3ZlcnJpZGU7CisgICAgdmly
dHVhbCBib29sIGNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlQm9vbFZhbHVlRm9yUG9pbnQoV2Vi
Q29yZTo6UGFnZU92ZXJsYXkmLCBTdHJpbmcgLyogYXR0cmlidXRlICovLCBXZWJDb3JlOjpGbG9h
dFBvaW50IC8qIHBhcmFtZXRlciAqLywgYm9vbCYgdmFsdWUpIG92ZXJyaWRlOworICAgIHZpcnR1
YWwgVmVjdG9yPFN0cmluZz4gY29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVOYW1lcyhXZWJDb3Jl
OjpQYWdlT3ZlcmxheSYsIGJvb2wgLyogcGFyYW1ldGVyaXplZE5hbWVzICovKSBvdmVycmlkZTsK
KworCisgICAgUmVmUHRyPFdlYkNvcmU6OlBhZ2VPdmVybGF5PiBtX292ZXJsYXk7CisgICAgQ2xp
ZW50JiBtX2NsaWVudDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8g
V2ViUGFnZU92ZXJsYXlfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL2lvcy9GaW5kQ29udHJvbGxlcklPUy5tbSBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9pb3MvRmluZENvbnRyb2xsZXJJT1MubW0KaW5kZXggMDkwN2JkZi4uYWYyY2Ux
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9GaW5k
Q29udHJvbGxlcklPUy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
aW9zL0ZpbmRDb250cm9sbGVySU9TLm1tCkBAIC0zNiw2ICszNiw3IEBACiAjaW1wb3J0IDxXZWJD
b3JlL0dyYXBoaWNzQ29udGV4dC5oPgogI2ltcG9ydCA8V2ViQ29yZS9NYWluRnJhbWUuaD4KICNp
bXBvcnQgPFdlYkNvcmUvUGFnZS5oPgorI2ltcG9ydCA8V2ViQ29yZS9QYWdlT3ZlcmxheUNvbnRy
b2xsZXIuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKQEAgLTUyLDcgKzUzLDcgQEAg
c3RhdGljIENvbG9yIGhpZ2hsaWdodENvbG9yKCkKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLXZv
aWQgRmluZEluZGljYXRvck92ZXJsYXlDbGllbnRJT1M6OmRyYXdSZWN0KFBhZ2VPdmVybGF5KiBv
dmVybGF5LCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IFdlYkNvcmU6
OkludFJlY3QmIGRpcnR5UmVjdCkKK3ZvaWQgRmluZEluZGljYXRvck92ZXJsYXlDbGllbnRJT1M6
OmRyYXdSZWN0KFBhZ2VPdmVybGF5JiBvdmVybGF5LCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQs
IGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCkKIHsKICAgICAvLyBGSVhNRTogU3VwcG9ydCBtdWx0
aXBsZSB0ZXh0IHJlY3RzLgogCkBAIC04NSwxMSArODYsMTEgQEAgYm9vbCBGaW5kQ29udHJvbGxl
cjo6dXBkYXRlRmluZEluZGljYXRvcihGcmFtZSYgc2VsZWN0ZWRGcmFtZSwgYm9vbCBpc1Nob3dp
bmdPdmUKICAgICBtYXRjaFJlY3QuaW5mbGF0ZVkodG90YWxWZXJ0aWNhbE1hcmdpbik7CiAKICAg
ICBpZiAobV9maW5kSW5kaWNhdG9yT3ZlcmxheSkKLSAgICAgICAgbV93ZWJQYWdlLT51bmluc3Rh
bGxQYWdlT3ZlcmxheShtX2ZpbmRJbmRpY2F0b3JPdmVybGF5LmdldCgpKTsKKyAgICAgICAgbV93
ZWJQYWdlLT5jb3JlUGFnZSgpLT5wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKS51bmluc3RhbGxQYWdl
T3ZlcmxheShtX2ZpbmRJbmRpY2F0b3JPdmVybGF5LmdldCgpLCBQYWdlT3ZlcmxheTo6RmFkZU1v
ZGU6OkRvTm90RmFkZSk7CiAKICAgICBtX2ZpbmRJbmRpY2F0b3JPdmVybGF5Q2xpZW50ID0gc3Rk
OjptYWtlX3VuaXF1ZTxGaW5kSW5kaWNhdG9yT3ZlcmxheUNsaWVudElPUz4oc2VsZWN0ZWRGcmFt
ZSk7Ci0gICAgbV9maW5kSW5kaWNhdG9yT3ZlcmxheSA9IFBhZ2VPdmVybGF5OjpjcmVhdGUobV9m
aW5kSW5kaWNhdG9yT3ZlcmxheUNsaWVudC5nZXQoKSwgUGFnZU92ZXJsYXk6Ok92ZXJsYXlUeXBl
OjpEb2N1bWVudCk7Ci0gICAgbV93ZWJQYWdlLT5pbnN0YWxsUGFnZU92ZXJsYXkobV9maW5kSW5k
aWNhdG9yT3ZlcmxheSk7CisgICAgbV9maW5kSW5kaWNhdG9yT3ZlcmxheSA9IFBhZ2VPdmVybGF5
OjpjcmVhdGUoKm1fZmluZEluZGljYXRvck92ZXJsYXlDbGllbnQsIFBhZ2VPdmVybGF5OjpPdmVy
bGF5VHlwZTo6RG9jdW1lbnQpOworICAgIG1fd2ViUGFnZS0+Y29yZVBhZ2UoKS0+cGFnZU92ZXJs
YXlDb250cm9sbGVyKCkuaW5zdGFsbFBhZ2VPdmVybGF5KG1fZmluZEluZGljYXRvck92ZXJsYXks
IFBhZ2VPdmVybGF5OjpGYWRlTW9kZTo6RG9Ob3RGYWRlKTsKIAogICAgIG1fZmluZEluZGljYXRv
ck92ZXJsYXktPnNldEZyYW1lKG1hdGNoUmVjdCk7CiAgICAgbV9maW5kSW5kaWNhdG9yT3Zlcmxh
eS0+c2V0TmVlZHNEaXNwbGF5KCk7CkBAIC0xMDYsNyArMTA3LDcgQEAgdm9pZCBGaW5kQ29udHJv
bGxlcjo6aGlkZUZpbmRJbmRpY2F0b3IoKQogICAgIGlmICghbV9pc1Nob3dpbmdGaW5kSW5kaWNh
dG9yKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX3dlYlBhZ2UtPnVuaW5zdGFsbFBhZ2VPdmVy
bGF5KG1fZmluZEluZGljYXRvck92ZXJsYXkuZ2V0KCkpOworICAgIG1fd2ViUGFnZS0+Y29yZVBh
Z2UoKS0+cGFnZU92ZXJsYXlDb250cm9sbGVyKCkudW5pbnN0YWxsUGFnZU92ZXJsYXkobV9maW5k
SW5kaWNhdG9yT3ZlcmxheS5nZXQoKSwgUGFnZU92ZXJsYXk6OkZhZGVNb2RlOjpEb05vdEZhZGUp
OwogICAgIG1fZmluZEluZGljYXRvck92ZXJsYXkgPSBudWxscHRyOwogICAgIG1faXNTaG93aW5n
RmluZEluZGljYXRvciA9IGZhbHNlOwogICAgIG1fZm91bmRTdHJpbmdNYXRjaEluZGV4ID0gLTE7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL0ZpbmRJ
bmRpY2F0b3JPdmVybGF5Q2xpZW50SU9TLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvaW9zL0ZpbmRJbmRpY2F0b3JPdmVybGF5Q2xpZW50SU9TLmgKaW5kZXggMzEwMTc2Ny4u
NDI5MjI4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2lv
cy9GaW5kSW5kaWNhdG9yT3ZlcmxheUNsaWVudElPUy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9pb3MvRmluZEluZGljYXRvck92ZXJsYXlDbGllbnRJT1MuaApAQCAt
MjYsMTMgKzI2LDEzIEBACiAjaWZuZGVmIEZpbmRJbmRpY2F0b3JPdmVybGF5Q2xpZW50SU9TX2gK
ICNkZWZpbmUgRmluZEluZGljYXRvck92ZXJsYXlDbGllbnRJT1NfaAogCi0jaW1wb3J0ICJQYWdl
T3ZlcmxheS5oIgogI2ltcG9ydCA8V2ViQ29yZS9GcmFtZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9H
cmFwaGljc0NvbnRleHQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvUGFnZU92ZXJsYXkuaD4KIAogbmFt
ZXNwYWNlIFdlYktpdCB7CiAKLWNsYXNzIEZpbmRJbmRpY2F0b3JPdmVybGF5Q2xpZW50SU9TIDog
cHVibGljIFBhZ2VPdmVybGF5OjpDbGllbnQgeworY2xhc3MgRmluZEluZGljYXRvck92ZXJsYXlD
bGllbnRJT1MgOiBwdWJsaWMgV2ViQ29yZTo6UGFnZU92ZXJsYXk6OkNsaWVudCB7CiBwdWJsaWM6
CiAgICAgRmluZEluZGljYXRvck92ZXJsYXlDbGllbnRJT1MoV2ViQ29yZTo6RnJhbWUmIGZyYW1l
KQogICAgICAgICA6IG1fZnJhbWUoZnJhbWUpCkBAIC00MCwxMSArNDAsMTEgQEAgcHVibGljOgog
ICAgIH0KIAogcHJpdmF0ZToKLSAgICB2aXJ0dWFsIHZvaWQgcGFnZU92ZXJsYXlEZXN0cm95ZWQo
UGFnZU92ZXJsYXkqKSBvdmVycmlkZSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgd2lsbE1vdmVUb1dl
YlBhZ2UoUGFnZU92ZXJsYXkqLCBXZWJQYWdlKikgb3ZlcnJpZGUgeyB9Ci0gICAgdmlydHVhbCB2
b2lkIGRpZE1vdmVUb1dlYlBhZ2UoUGFnZU92ZXJsYXkqLCBXZWJQYWdlKikgb3ZlcnJpZGUgeyB9
Ci0gICAgdmlydHVhbCB2b2lkIGRyYXdSZWN0KFBhZ2VPdmVybGF5KiwgV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0JiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgZGlydHlSZWN0KSBvdmVycmlkZTsK
LSAgICB2aXJ0dWFsIGJvb2wgbW91c2VFdmVudChQYWdlT3ZlcmxheSosIGNvbnN0IFdlYk1vdXNl
RXZlbnQmKSBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgdm9pZCBwYWdl
T3ZlcmxheURlc3Ryb3llZChXZWJDb3JlOjpQYWdlT3ZlcmxheSYpIG92ZXJyaWRlIHsgfQorICAg
IHZpcnR1YWwgdm9pZCB3aWxsTW92ZVRvUGFnZShXZWJDb3JlOjpQYWdlT3ZlcmxheSYsIFdlYkNv
cmU6OlBhZ2UqKSBvdmVycmlkZSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGlkTW92ZVRvUGFnZShX
ZWJDb3JlOjpQYWdlT3ZlcmxheSYsIFdlYkNvcmU6OlBhZ2UqKSBvdmVycmlkZSB7IH0KKyAgICB2
aXJ0dWFsIHZvaWQgZHJhd1JlY3QoV2ViQ29yZTo6UGFnZU92ZXJsYXkmLCBXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQmLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBkaXJ0eVJlY3QpIG92ZXJyaWRl
OworICAgIHZpcnR1YWwgYm9vbCBtb3VzZUV2ZW50KFdlYkNvcmU6OlBhZ2VPdmVybGF5JiwgY29u
c3QgV2ViQ29yZTo6UGxhdGZvcm1Nb3VzZUV2ZW50Jikgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7
IH0KIAogICAgIFdlYkNvcmU6OkZyYW1lJiBtX2ZyYW1lOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0Fy
ZWEuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvUmVtb3RlTGF5ZXJU
cmVlRHJhd2luZ0FyZWEuaAppbmRleCAxY2I1MTAwLi5jNTJhM2JmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1JlbW90ZUxheWVyVHJlZURyYXdpbmdB
cmVhLmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9SZW1vdGVM
YXllclRyZWVEcmF3aW5nQXJlYS5oCkBAIC02Nyw2ICs2Nyw3IEBAIHByaXZhdGU6CiAgICAgdmly
dHVhbCB2b2lkIHNldFJvb3RDb21wb3NpdGluZ0xheWVyKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIq
KSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVDb21wb3NpdGluZ0xheWVyRmx1
c2goKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVDb21wb3NpdGluZ0xheWVy
Rmx1c2hJbW1lZGlhdGVseSgpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBhdHRhY2hWaWV3
T3ZlcmxheUdyYXBoaWNzTGF5ZXIoV2ViQ29yZTo6RnJhbWUqLCBXZWJDb3JlOjpHcmFwaGljc0xh
eWVyKikgb3ZlcnJpZGU7CiAKICAgICB2aXJ0dWFsIHZvaWQgYWRkVHJhbnNhY3Rpb25DYWxsYmFj
a0lEKHVpbnQ2NF90IGNhbGxiYWNrSUQpIG92ZXJyaWRlOwogCkBAIC0xMDcsNiArMTA4LDcgQEAg
cHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wgYWRqdXN0TGF5ZXJGbHVzaFRocm90dGxpbmcoV2Vi
Q29yZTo6TGF5ZXJGbHVzaFRocm90dGxlU3RhdGU6OkZsYWdzKSBvdmVycmlkZTsKIAogICAgIHZv
aWQgdXBkYXRlU2Nyb2xsZWRFeHBvc2VkUmVjdCgpOworICAgIHZvaWQgdXBkYXRlUm9vdExheWVy
cygpOwogCiAgICAgdm9pZCBsYXllckZsdXNoVGltZXJGaXJlZChXZWJDb3JlOjpUaW1lcjxSZW1v
dGVMYXllclRyZWVEcmF3aW5nQXJlYT4qKTsKICAgICB2b2lkIGZsdXNoTGF5ZXJzKCk7CkBAIC0x
NjAsNiArMTYyLDkgQEAgcHJpdmF0ZToKIAogICAgIHVpbnQ2NF90IG1fY3VycmVudFRyYW5zYWN0
aW9uSUQ7CiAgICAgVmVjdG9yPFJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uOjpUcmFuc2FjdGlv
bkNhbGxiYWNrSUQ+IG1fcGVuZGluZ0NhbGxiYWNrSURzOworCisgICAgV2ViQ29yZTo6R3JhcGhp
Y3NMYXllciogbV9jb250ZW50TGF5ZXI7CisgICAgV2ViQ29yZTo6R3JhcGhpY3NMYXllciogbV92
aWV3T3ZlcmxheVJvb3RMYXllcjsKIH07CiAKIERSQVdJTkdfQVJFQV9UWVBFX0NBU1RTKFJlbW90
ZUxheWVyVHJlZURyYXdpbmdBcmVhLCB0eXBlKCkgPT0gRHJhd2luZ0FyZWFUeXBlUmVtb3RlTGF5
ZXJUcmVlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9t
YWMvUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWEubW0gYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvbWFjL1JlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhLm1tCmluZGV4IDM3Yzg5
NDcuLjllNDhiNTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9tYWMvUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWEubW0KKysrIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9SZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYS5tbQpAQCAt
NDAsNiArNDAsNyBAQAogI2ltcG9ydCA8V2ViQ29yZS9GcmFtZS5oPgogI2ltcG9ydCA8V2ViQ29y
ZS9GcmFtZVZpZXcuaD4KICNpbXBvcnQgPFdlYkNvcmUvTWFpbkZyYW1lLmg+CisjaW1wb3J0IDxX
ZWJDb3JlL1BhZ2VPdmVybGF5Q29udHJvbGxlci5oPgogI2ltcG9ydCA8V2ViQ29yZS9SZW5kZXJM
YXllckNvbXBvc2l0b3IuaD4KICNpbXBvcnQgPFdlYkNvcmUvUmVuZGVyVmlldy5oPgogI2ltcG9y
dCA8V2ViQ29yZS9TZXR0aW5ncy5oPgpAQCAtNjYsNiArNjcsOCBAQCBSZW1vdGVMYXllclRyZWVE
cmF3aW5nQXJlYTo6UmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWEoV2ViUGFnZSYgd2ViUGFnZSwg
Y29uc3QgVwogICAgICwgbV9oYWRGbHVzaERlZmVycmVkV2hpbGVXYWl0aW5nRm9yQmFja2luZ1N0
b3JlU3dhcChmYWxzZSkKICAgICAsIG1fZGlzcGxheVJlZnJlc2hNb25pdG9yc1RvTm90aWZ5KG51
bGxwdHIpCiAgICAgLCBtX2N1cnJlbnRUcmFuc2FjdGlvbklEKDApCisgICAgLCBtX2NvbnRlbnRM
YXllcihudWxscHRyKQorICAgICwgbV92aWV3T3ZlcmxheVJvb3RMYXllcihudWxscHRyKQogewog
ICAgIHdlYlBhZ2UuY29yZVBhZ2UoKS0+c2V0dGluZ3MoKS5zZXRGb3JjZUNvbXBvc2l0aW5nTW9k
ZSh0cnVlKTsKICNpZiBQTEFURk9STShJT1MpCkBAIC0xMTMsMTUgKzExNiwzMSBAQCB2b2lkIFJl
bW90ZUxheWVyVHJlZURyYXdpbmdBcmVhOjp3aWxsRGVzdHJveURpc3BsYXlSZWZyZXNoTW9uaXRv
cihEaXNwbGF5UmVmcmVzaAogICAgICAgICBtX2Rpc3BsYXlSZWZyZXNoTW9uaXRvcnNUb05vdGlm
eS0+cmVtb3ZlKHJlbW90ZU1vbml0b3IpOwogfQogCi12b2lkIFJlbW90ZUxheWVyVHJlZURyYXdp
bmdBcmVhOjpzZXRSb290Q29tcG9zaXRpbmdMYXllcihHcmFwaGljc0xheWVyKiByb290TGF5ZXIp
Cit2b2lkIFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhOjp1cGRhdGVSb290TGF5ZXJzKCkKIHsK
ICAgICBWZWN0b3I8R3JhcGhpY3NMYXllcio+IGNoaWxkcmVuOwotICAgIGlmIChyb290TGF5ZXIp
IHsKLSAgICAgICAgY2hpbGRyZW4uYXBwZW5kKHJvb3RMYXllcik7Ci0gICAgICAgIGNoaWxkcmVu
LmFwcGVuZChtX3dlYlBhZ2UucGFnZU92ZXJsYXlDb250cm9sbGVyKCkudmlld092ZXJsYXlSb290
TGF5ZXIoKSk7CisgICAgaWYgKG1fY29udGVudExheWVyKSB7CisgICAgICAgIGNoaWxkcmVuLmFw
cGVuZChtX2NvbnRlbnRMYXllcik7CisgICAgICAgIGlmIChtX3ZpZXdPdmVybGF5Um9vdExheWVy
KQorICAgICAgICAgICAgY2hpbGRyZW4uYXBwZW5kKG1fdmlld092ZXJsYXlSb290TGF5ZXIpOwog
ICAgIH0KKwogICAgIG1fcm9vdExheWVyLT5zZXRDaGlsZHJlbihjaGlsZHJlbik7Cit9CisKK3Zv
aWQgUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWE6OmF0dGFjaFZpZXdPdmVybGF5R3JhcGhpY3NM
YXllcihGcmFtZSogZnJhbWUsIEdyYXBoaWNzTGF5ZXIqIHZpZXdPdmVybGF5Um9vdExheWVyKQor
eworICAgIGlmICghZnJhbWUtPmlzTWFpbkZyYW1lKCkpCisgICAgICAgIHJldHVybjsKIAorICAg
IG1fdmlld092ZXJsYXlSb290TGF5ZXIgPSB2aWV3T3ZlcmxheVJvb3RMYXllcjsKKyAgICB1cGRh
dGVSb290TGF5ZXJzKCk7Cit9CisKK3ZvaWQgUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWE6OnNl
dFJvb3RDb21wb3NpdGluZ0xheWVyKEdyYXBoaWNzTGF5ZXIqIHJvb3RMYXllcikKK3sKKyAgICBt
X2NvbnRlbnRMYXllciA9IHJvb3RMYXllcjsKKyAgICB1cGRhdGVSb290TGF5ZXJzKCk7CiAgICAg
c2NoZWR1bGVDb21wb3NpdGluZ0xheWVyRmx1c2goKTsKIH0KIApAQCAtMjM0LDggKzI1Myw2IEBA
IHZvaWQgUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWE6OnVwZGF0ZVNjcm9sbGVkRXhwb3NlZFJl
Y3QoKQogI2VuZGlmCiAKICAgICBmcmFtZVZpZXctPnNldEV4cG9zZWRSZWN0KG1fc2Nyb2xsZWRF
eHBvc2VkUmVjdCk7Ci0KLSAgICBtX3dlYlBhZ2UucGFnZU92ZXJsYXlDb250cm9sbGVyKCkuZGlk
Q2hhbmdlRXhwb3NlZFJlY3QoKTsKIH0KIAogVGlsZWRCYWNraW5nKiBSZW1vdGVMYXllclRyZWVE
cmF3aW5nQXJlYTo6bWFpbkZyYW1lVGlsZWRCYWNraW5nKCkgY29uc3QKQEAgLTMyMSw3ICszMzgs
NyBAQCB2b2lkIFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhOjpmbHVzaExheWVycygpCiAKICAg
ICBGbG9hdFJlY3QgdmlzaWJsZVJlY3QoRmxvYXRQb2ludCgpLCBtX3ZpZXdTaXplKTsKICAgICB2
aXNpYmxlUmVjdC5pbnRlcnNlY3QobV9zY3JvbGxlZEV4cG9zZWRSZWN0KTsKLSAgICBtX3dlYlBh
Z2UucGFnZU92ZXJsYXlDb250cm9sbGVyKCkuZmx1c2hQYWdlT3ZlcmxheUxheWVycyh2aXNpYmxl
UmVjdCk7CisKICAgICBtX3dlYlBhZ2UubWFpbkZyYW1lVmlldygpLT5mbHVzaENvbXBvc2l0aW5n
U3RhdGVJbmNsdWRpbmdTdWJmcmFtZXMoKTsKICAgICBtX3Jvb3RMYXllci0+Zmx1c2hDb21wb3Np
dGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgpOwogCkBAIC00MTAsNyArNDI3LDYgQEAgdm9pZCBS
ZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYTo6ZGlkVXBkYXRlKCkKIHZvaWQgUmVtb3RlTGF5ZXJU
cmVlRHJhd2luZ0FyZWE6Om1haW5GcmFtZUNvbnRlbnRTaXplQ2hhbmdlZChjb25zdCBJbnRTaXpl
JiBjb250ZW50c1NpemUpCiB7CiAgICAgbV9yb290TGF5ZXItPnNldFNpemUoY29udGVudHNTaXpl
KTsKLSAgICBtX3dlYlBhZ2UucGFnZU92ZXJsYXlDb250cm9sbGVyKCkuZGlkQ2hhbmdlRG9jdW1l
bnRTaXplKCk7CiB9CiAKIGJvb2wgUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWE6Om1hcmtMYXll
cnNWb2xhdGlsZUltbWVkaWF0ZWx5SWZQb3NzaWJsZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1NlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIubW0g
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1NlcnZpY2VzT3ZlcmxheUNv
bnRyb2xsZXIubW0KaW5kZXggZmI2OGI3YS4uZmE2NjgzMyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9TZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyLm1t
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvU2VydmljZXNPdmVy
bGF5Q29udHJvbGxlci5tbQpAQCAtNDIsNiArNDIsNyBAQAogI2ltcG9ydCA8V2ViQ29yZS9HcmFw
aGljc0xheWVyLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0dyYXBoaWNzTGF5ZXJDQS5oPgogI2ltcG9y
dCA8V2ViQ29yZS9NYWluRnJhbWUuaD4KKyNpbXBvcnQgPFdlYkNvcmUvUGFnZU92ZXJsYXlDb250
cm9sbGVyLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1BsYXRmb3JtQ0FBbmltYXRpb25NYWMuaD4KICNp
bXBvcnQgPFdlYkNvcmUvU29mdExpbmtpbmcuaD4KIApAQCAtMjI1LDIzICsyMjYsMjMgQEAgU2Vy
dmljZXNPdmVybGF5Q29udHJvbGxlcjo6flNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIoKQogICAg
ICAgICBoaWdobGlnaHQtPmludmFsaWRhdGUoKTsKIH0KIAotdm9pZCBTZXJ2aWNlc092ZXJsYXlD
b250cm9sbGVyOjpwYWdlT3ZlcmxheURlc3Ryb3llZChQYWdlT3ZlcmxheSopCit2b2lkIFNlcnZp
Y2VzT3ZlcmxheUNvbnRyb2xsZXI6OnBhZ2VPdmVybGF5RGVzdHJveWVkKFBhZ2VPdmVybGF5JikK
IHsKICAgICAvLyBCZWZvcmUgdGhlIG92ZXJsYXkgaXMgZGVzdHJveWVkLCBpdCBzaG91bGQgaGF2
ZSBtb3ZlZCBvdXQgb2YgdGhlIFdlYlBhZ2UsCiAgICAgLy8gYXQgd2hpY2ggcG9pbnQgd2UgYWxy
ZWFkeSBjbGVhcmVkIG91ciBiYWNrIHBvaW50ZXIuCiAgICAgQVNTRVJUKCFtX3NlcnZpY2VzT3Zl
cmxheSk7CiB9CiAKLXZvaWQgU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6d2lsbE1vdmVUb1dl
YlBhZ2UoUGFnZU92ZXJsYXkqLCBXZWJQYWdlKiB3ZWJQYWdlKQordm9pZCBTZXJ2aWNlc092ZXJs
YXlDb250cm9sbGVyOjp3aWxsTW92ZVRvUGFnZShQYWdlT3ZlcmxheSYsIFBhZ2UqIHBhZ2UpCiB7
Ci0gICAgaWYgKHdlYlBhZ2UpCisgICAgaWYgKHBhZ2UpCiAgICAgICAgIHJldHVybjsKIAogICAg
IEFTU0VSVChtX3NlcnZpY2VzT3ZlcmxheSk7CiAgICAgbV9zZXJ2aWNlc092ZXJsYXkgPSBudWxs
cHRyOwogfQogCi12b2lkIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OmRpZE1vdmVUb1dlYlBh
Z2UoUGFnZU92ZXJsYXkqLCBXZWJQYWdlKikKK3ZvaWQgU2VydmljZXNPdmVybGF5Q29udHJvbGxl
cjo6ZGlkTW92ZVRvUGFnZShQYWdlT3ZlcmxheSYsIFBhZ2UqKQogewogfQogCkBAIC00NDcsNyAr
NDQ4LDcgQEAgdm9pZCBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpkZXRlcm1pbmVBY3RpdmVI
aWdobGlnaHRUaW1lckZpcmVkKFRpbWVyPFNlcnZpY2UKICAgICBkZXRlcm1pbmVBY3RpdmVIaWdo
bGlnaHQobW91c2VJc092ZXJCdXR0b24pOwogfQogCi12b2lkIFNlcnZpY2VzT3ZlcmxheUNvbnRy
b2xsZXI6OmRyYXdSZWN0KFBhZ2VPdmVybGF5KiBvdmVybGF5LCBHcmFwaGljc0NvbnRleHQmIGdy
YXBoaWNzQ29udGV4dCwgY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KQordm9pZCBTZXJ2aWNlc092
ZXJsYXlDb250cm9sbGVyOjpkcmF3UmVjdChQYWdlT3ZlcmxheSYgb3ZlcmxheSwgR3JhcGhpY3ND
b250ZXh0JiBncmFwaGljc0NvbnRleHQsIGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCkKIHsKIH0K
IApAQCAtNTgzLDcgKzU4NCw3IEBAIHZvaWQgU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6ZGlk
UmVidWlsZFBvdGVudGlhbEhpZ2hsaWdodHMoKQogewogICAgIGlmIChtX3BvdGVudGlhbEhpZ2hs
aWdodHMuaXNFbXB0eSgpKSB7CiAgICAgICAgIGlmIChtX3NlcnZpY2VzT3ZlcmxheSkKLSAgICAg
ICAgICAgIG1fd2ViUGFnZS51bmluc3RhbGxQYWdlT3ZlcmxheShtX3NlcnZpY2VzT3ZlcmxheSk7
CisgICAgICAgICAgICBtX3dlYlBhZ2UuY29yZVBhZ2UoKS0+cGFnZU92ZXJsYXlDb250cm9sbGVy
KCkudW5pbnN0YWxsUGFnZU92ZXJsYXkobV9zZXJ2aWNlc092ZXJsYXksIFBhZ2VPdmVybGF5OjpG
YWRlTW9kZTo6RG9Ob3RGYWRlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtNjAxLDkg
KzYwMiw5IEBAIHZvaWQgU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6Y3JlYXRlT3ZlcmxheUlm
TmVlZGVkKCkKICAgICBpZiAobV9zZXJ2aWNlc092ZXJsYXkpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIFJlZlB0cjxQYWdlT3ZlcmxheT4gb3ZlcmxheSA9IFBhZ2VPdmVybGF5OjpjcmVhdGUodGhp
cywgUGFnZU92ZXJsYXk6Ok92ZXJsYXlUeXBlOjpEb2N1bWVudCk7CisgICAgUmVmUHRyPFBhZ2VP
dmVybGF5PiBvdmVybGF5ID0gUGFnZU92ZXJsYXk6OmNyZWF0ZSgqdGhpcywgUGFnZU92ZXJsYXk6
Ok92ZXJsYXlUeXBlOjpEb2N1bWVudCk7CiAgICAgbV9zZXJ2aWNlc092ZXJsYXkgPSBvdmVybGF5
LmdldCgpOwotICAgIG1fd2ViUGFnZS5pbnN0YWxsUGFnZU92ZXJsYXkob3ZlcmxheS5yZWxlYXNl
KCksIFBhZ2VPdmVybGF5OjpGYWRlTW9kZTo6RG9Ob3RGYWRlKTsKKyAgICBtX3dlYlBhZ2UuY29y
ZVBhZ2UoKS0+cGFnZU92ZXJsYXlDb250cm9sbGVyKCkuaW5zdGFsbFBhZ2VPdmVybGF5KG92ZXJs
YXkucmVsZWFzZSgpLCBQYWdlT3ZlcmxheTo6RmFkZU1vZGU6OkRvTm90RmFkZSk7CiB9CiAKIFZl
Y3RvcjxSZWZQdHI8UmFuZ2U+PiBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjp0ZWxlcGhvbmVO
dW1iZXJSYW5nZXNGb3JGb2N1c2VkRnJhbWUoKQpAQCAtNzE3LDEzICs3MTgsMTMgQEAgdm9pZCBT
ZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpkZXRlcm1pbmVBY3RpdmVIaWdobGlnaHQoYm9vbCYg
bW91c2VJc092ZXJBY3RpdmUKICAgICAgICAgbV9hY3RpdmVIaWdobGlnaHQgPSBtX25leHRBY3Rp
dmVIaWdobGlnaHQucmVsZWFzZSgpOwogCiAgICAgICAgIGlmIChtX2FjdGl2ZUhpZ2hsaWdodCkg
ewotICAgICAgICAgICAgbV9zZXJ2aWNlc092ZXJsYXktPmxheWVyKCktPmFkZENoaWxkKG1fYWN0
aXZlSGlnaGxpZ2h0LT5sYXllcigpKTsKKyAgICAgICAgICAgIG1fc2VydmljZXNPdmVybGF5LT5s
YXllcigpLmFkZENoaWxkKG1fYWN0aXZlSGlnaGxpZ2h0LT5sYXllcigpKTsKICAgICAgICAgICAg
IG1fYWN0aXZlSGlnaGxpZ2h0LT5mYWRlSW4oKTsKICAgICAgICAgfQogICAgIH0KIH0KIAotYm9v
bCBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjptb3VzZUV2ZW50KFBhZ2VPdmVybGF5KiwgY29u
c3QgV2ViTW91c2VFdmVudCYgZXZlbnQpCitib29sIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6
Om1vdXNlRXZlbnQoUGFnZU92ZXJsYXkmLCBjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIGV2ZW50
KQogewogICAgIG1fbW91c2VQb3NpdGlvbiA9IG1fd2ViUGFnZS5jb3JlUGFnZSgpLT5tYWluRnJh
bWUoKS52aWV3KCktPnJvb3RWaWV3VG9Db250ZW50cyhldmVudC5wb3NpdGlvbigpKTsKIApAQCAt
NzMxLDEzICs3MzIsMTMgQEAgYm9vbCBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjptb3VzZUV2
ZW50KFBhZ2VPdmVybGF5KiwgY29uc3QgV2ViTW91c2VFdmVudCYgZXYKICAgICBkZXRlcm1pbmVB
Y3RpdmVIaWdobGlnaHQobW91c2VJc092ZXJBY3RpdmVIaWdobGlnaHRCdXR0b24pOwogCiAgICAg
Ly8gQ2FuY2VsIHRoZSBwb3RlbnRpYWwgY2xpY2sgaWYgYW55IGJ1dHRvbiBvdGhlciB0aGFuIHRo
ZSBsZWZ0IGJ1dHRvbiBjaGFuZ2VzIHN0YXRlLCBhbmQgaWdub3JlIHRoZSBldmVudC4KLSAgICBp
ZiAoZXZlbnQuYnV0dG9uKCkgIT0gV2ViTW91c2VFdmVudDo6TGVmdEJ1dHRvbikgeworICAgIGlm
IChldmVudC5idXR0b24oKSAhPSBNb3VzZUJ1dHRvbjo6TGVmdEJ1dHRvbikgewogICAgICAgICBt
X2N1cnJlbnRNb3VzZURvd25PbkJ1dHRvbkhpZ2hsaWdodCA9IG51bGxwdHI7CiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICB9CiAKICAgICAvLyBJZiB0aGUgbW91c2UgbGlmdGVkIHdoaWxlIHN0
aWxsIG92ZXIgdGhlIGhpZ2hsaWdodCBidXR0b24gdGhhdCBpdCB3ZW50IGRvd24gb24sIHRoZW4g
dGhhdCBpcyBhIGNsaWNrLgotICAgIGlmIChldmVudC50eXBlKCkgPT0gV2ViRXZlbnQ6Ok1vdXNl
VXApIHsKKyAgICBpZiAoZXZlbnQudHlwZSgpID09IFBsYXRmb3JtRXZlbnQ6Ok1vdXNlUmVsZWFz
ZWQpIHsKICAgICAgICAgUmVmUHRyPEhpZ2hsaWdodD4gbW91c2VEb3duSGlnaGxpZ2h0ID0gbV9j
dXJyZW50TW91c2VEb3duT25CdXR0b25IaWdobGlnaHQ7CiAgICAgICAgIG1fY3VycmVudE1vdXNl
RG93bk9uQnV0dG9uSGlnaGxpZ2h0ID0gbnVsbHB0cjsKIApAQCAtNzUyLDcgKzc1Myw3IEBAIGJv
b2wgU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6bW91c2VFdmVudChQYWdlT3ZlcmxheSosIGNv
bnN0IFdlYk1vdXNlRXZlbnQmIGV2CiAgICAgfQogCiAgICAgLy8gSWYgdGhlIG1vdXNlIG1vdmVk
IG91dHNpZGUgb2YgdGhlIGJ1dHRvbiB0cmFja2luZyBhIHBvdGVudGlhbCBjbGljaywgc3RvcCB0
cmFja2luZyB0aGUgY2xpY2suCi0gICAgaWYgKGV2ZW50LnR5cGUoKSA9PSBXZWJFdmVudDo6TW91
c2VNb3ZlKSB7CisgICAgaWYgKGV2ZW50LnR5cGUoKSA9PSBQbGF0Zm9ybUV2ZW50OjpNb3VzZU1v
dmVkKSB7CiAgICAgICAgIGlmIChtX2N1cnJlbnRNb3VzZURvd25PbkJ1dHRvbkhpZ2hsaWdodCAm
JiBtb3VzZUlzT3ZlckFjdGl2ZUhpZ2hsaWdodEJ1dHRvbikKICAgICAgICAgICAgIHJldHVybiB0
cnVlOwogCkBAIC03NjEsNyArNzYyLDcgQEAgYm9vbCBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVy
Ojptb3VzZUV2ZW50KFBhZ2VPdmVybGF5KiwgY29uc3QgV2ViTW91c2VFdmVudCYgZXYKICAgICB9
CiAKICAgICAvLyBJZiB0aGUgbW91c2Ugd2VudCBkb3duIG92ZXIgdGhlIGFjdGl2ZSBoaWdobGln
aHQncyBidXR0b24sIHRyYWNrIHRoaXMgYXMgYSBwb3RlbnRpYWwgY2xpY2suCi0gICAgaWYgKGV2
ZW50LnR5cGUoKSA9PSBXZWJFdmVudDo6TW91c2VEb3duKSB7CisgICAgaWYgKGV2ZW50LnR5cGUo
KSA9PSBQbGF0Zm9ybUV2ZW50OjpNb3VzZVByZXNzZWQpIHsKICAgICAgICAgaWYgKG1fYWN0aXZl
SGlnaGxpZ2h0ICYmIG1vdXNlSXNPdmVyQWN0aXZlSGlnaGxpZ2h0QnV0dG9uKSB7CiAgICAgICAg
ICAgICBtX2N1cnJlbnRNb3VzZURvd25PbkJ1dHRvbkhpZ2hsaWdodCA9IG1fYWN0aXZlSGlnaGxp
Z2h0OwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC03NzMsOSArNzc0LDkgQEAgYm9vbCBT
ZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjptb3VzZUV2ZW50KFBhZ2VPdmVybGF5KiwgY29uc3Qg
V2ViTW91c2VFdmVudCYgZXYKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgU2VydmljZXNP
dmVybGF5Q29udHJvbGxlcjo6ZGlkU2Nyb2xsRnJhbWUoUGFnZU92ZXJsYXkqLCBGcmFtZSogZnJh
bWUpCit2b2lkIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OmRpZFNjcm9sbEZyYW1lKFBhZ2VP
dmVybGF5JiwgRnJhbWUmIGZyYW1lKQogewotICAgIGlmIChmcmFtZS0+aXNNYWluRnJhbWUoKSkK
KyAgICBpZiAoZnJhbWUuaXNNYWluRnJhbWUoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgYnVp
bGRQaG9uZU51bWJlckhpZ2hsaWdodHMoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9tYWMvVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWEuaCBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvVGlsZWRDb3JlQW5pbWF0aW9uRHJh
d2luZ0FyZWEuaAppbmRleCBiODFhNGE0Li45ZTVhYmRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1RpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVh
LmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9UaWxlZENvcmVB
bmltYXRpb25EcmF3aW5nQXJlYS5oCkBAIC04NCw2ICs4NCw4IEBAIHByaXZhdGU6CiAgICAgdmly
dHVhbCB2b2lkIHZpZXdTdGF0ZURpZENoYW5nZShXZWJDb3JlOjpWaWV3U3RhdGU6OkZsYWdzIGNo
YW5nZWQsIGJvb2wgd2FudHNEaWRVcGRhdGVWaWV3U3RhdGUpIG92ZXJyaWRlOwogICAgIHZvaWQg
ZGlkVXBkYXRlVmlld1N0YXRlVGltZXJGaXJlZCgpOwogCisgICAgdmlydHVhbCB2b2lkIGF0dGFj
aFZpZXdPdmVybGF5R3JhcGhpY3NMYXllcihXZWJDb3JlOjpGcmFtZSosIFdlYkNvcmU6OkdyYXBo
aWNzTGF5ZXIqKSBvdmVycmlkZTsKKwogICAgIC8vIFdlYkNvcmU6OkxheWVyRmx1c2hTY2hlZHVs
ZXJDbGllbnQKICAgICB2aXJ0dWFsIGJvb2wgZmx1c2hMYXllcnMoKSBvdmVycmlkZTsKIApAQCAt
MTA2LDYgKzEwOCw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCB1cGRhdGVMYXllckhvc3RpbmdDb250
ZXh0KCk7CiAKICAgICB2b2lkIHNldFJvb3RDb21wb3NpdGluZ0xheWVyKENBTGF5ZXIgKik7Cisg
ICAgdm9pZCB1cGRhdGVSb290TGF5ZXJzKCk7CiAKICAgICBXZWJDb3JlOjpUaWxlZEJhY2tpbmcq
IG1haW5GcmFtZVRpbGVkQmFja2luZygpIGNvbnN0OwogICAgIHZvaWQgdXBkYXRlRGVidWdJbmZv
TGF5ZXIoYm9vbCBzaG93TGF5ZXIpOwpAQCAtMTM4LDYgKzE0MSw4IEBAIHByaXZhdGU6CiAgICAg
V2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXggbV90cmFuc2Zvcm07CiAKICAgICBSdW5Mb29w
OjpUaW1lcjxUaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYT4gbV9zZW5kRGlkVXBkYXRlVmll
d1N0YXRlVGltZXI7CisKKyAgICBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiBtX3ZpZXdPdmVybGF5
Um9vdExheWVyOwogfTsKIAogRFJBV0lOR19BUkVBX1RZUEVfQ0FTVFMoVGlsZWRDb3JlQW5pbWF0
aW9uRHJhd2luZ0FyZWEsIHR5cGUoKSA9PSBEcmF3aW5nQXJlYVR5cGVUaWxlZENvcmVBbmltYXRp
b24pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9U
aWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYS5tbSBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9tYWMvVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWEubW0KaW5kZXggZTc3
NTkxOS4uMjk4YjAyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL21hYy9UaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYS5tbQorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1RpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVh
Lm1tCkBAIC01MSw2ICs1MSw3IEBACiAjaW1wb3J0IDxXZWJDb3JlL1Njcm9sbGJhclRoZW1lLmg+
CiAjaW1wb3J0IDxXZWJDb3JlL1NldHRpbmdzLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1RpbGVkQmFj
a2luZy5oPgorI2ltcG9ydCA8V2ViQ29yZS9XZWJBY3Rpb25EaXNhYmxpbmdDQUxheWVyRGVsZWdh
dGUuaD4KICNpbXBvcnQgPHd0Zi9NYWluVGhyZWFkLmg+CiAKICNpZiBFTkFCTEUoQVNZTkNfU0NS
T0xMSU5HKQpAQCAtNzYsMTAgKzc3LDEyIEBAIFRpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVh
OjpUaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYShXZWJQYWdlJiB3ZWJQYWdlLCBjCiAgICAg
LCBtX3Njcm9sbGVkRXhwb3NlZFJlY3QoRmxvYXRSZWN0OjppbmZpbml0ZVJlY3QoKSkKICAgICAs
IG1fdHJhbnNpZW50Wm9vbVNjYWxlKDEpCiAgICAgLCBtX3NlbmREaWRVcGRhdGVWaWV3U3RhdGVU
aW1lcihSdW5Mb29wOjptYWluKCksIHRoaXMsICZUaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJl
YTo6ZGlkVXBkYXRlVmlld1N0YXRlVGltZXJGaXJlZCkKKyAgICAsIG1fdmlld092ZXJsYXlSb290
TGF5ZXIobnVsbHB0cikKIHsKICAgICBtX3dlYlBhZ2UuY29yZVBhZ2UoKS0+c2V0dGluZ3MoKS5z
ZXRGb3JjZUNvbXBvc2l0aW5nTW9kZSh0cnVlKTsKIAogICAgIG1faG9zdGluZ0xheWVyID0gW0NB
TGF5ZXIgbGF5ZXJdOworICAgIFttX2hvc3RpbmdMYXllciBzZXREZWxlZ2F0ZTpbV2ViQWN0aW9u
RGlzYWJsaW5nQ0FMYXllckRlbGVnYXRlIHNoYXJlZF1dOwogICAgIFttX2hvc3RpbmdMYXllciBz
ZXRGcmFtZTptX3dlYlBhZ2UuYm91bmRzKCldOwogICAgIFttX2hvc3RpbmdMYXllciBzZXRPcGFx
dWU6WUVTXTsKICAgICBbbV9ob3N0aW5nTGF5ZXIgc2V0R2VvbWV0cnlGbGlwcGVkOllFU107CkBA
IC0yMDQsOSArMjA3LDI4IEBAIHZvaWQgVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWE6OnVw
ZGF0ZVByZWZlcmVuY2VzKGNvbnN0IFdlYlByZWZlcmVuY2VzU3RvcmUmCiAgICAgdXBkYXRlRGVi
dWdJbmZvTGF5ZXIoc2hvd1RpbGVkU2Nyb2xsaW5nSW5kaWNhdG9yKTsKIH0KIAordm9pZCBUaWxl
ZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYTo6dXBkYXRlUm9vdExheWVycygpCit7CisgICAgaWYg
KCFtX3Jvb3RMYXllcikgeworICAgICAgICBbbV9ob3N0aW5nTGF5ZXIgc2V0U3VibGF5ZXJzOkBb
IF1dOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgW21faG9zdGluZ0xheWVyIHNldFN1
YmxheWVyczptX3ZpZXdPdmVybGF5Um9vdExheWVyID8gQFsgbV9yb290TGF5ZXIuZ2V0KCksIG1f
dmlld092ZXJsYXlSb290TGF5ZXItPnBsYXRmb3JtTGF5ZXIoKSBdIDogQFsgbV9yb290TGF5ZXIu
Z2V0KCkgXV07Cit9CisKK3ZvaWQgVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWE6OmF0dGFj
aFZpZXdPdmVybGF5R3JhcGhpY3NMYXllcihGcmFtZSogZnJhbWUsIEdyYXBoaWNzTGF5ZXIqIHZp
ZXdPdmVybGF5Um9vdExheWVyKQoreworICAgIGlmICghZnJhbWUtPmlzTWFpbkZyYW1lKCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIG1fdmlld092ZXJsYXlSb290TGF5ZXIgPSB2aWV3T3Zlcmxh
eVJvb3RMYXllcjsKKyAgICB1cGRhdGVSb290TGF5ZXJzKCk7Cit9CisKIHZvaWQgVGlsZWRDb3Jl
QW5pbWF0aW9uRHJhd2luZ0FyZWE6Om1haW5GcmFtZUNvbnRlbnRTaXplQ2hhbmdlZChjb25zdCBJ
bnRTaXplJiBzaXplKQogewotICAgIG1fd2ViUGFnZS5wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKS5k
aWRDaGFuZ2VEb2N1bWVudFNpemUoKTsKKwogfQogCiB2b2lkIFRpbGVkQ29yZUFuaW1hdGlvbkRy
YXdpbmdBcmVhOjp1cGRhdGVJbnRyaW5zaWNDb250ZW50U2l6ZUlmTmVlZGVkKCkKQEAgLTI4Myw3
ICszMDUsMTAgQEAgYm9vbCBUaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYTo6Zmx1c2hMYXll
cnMoKQogCiAgICAgRmxvYXRSZWN0IHZpc2libGVSZWN0ID0gW21faG9zdGluZ0xheWVyIGZyYW1l
XTsKICAgICB2aXNpYmxlUmVjdC5pbnRlcnNlY3QobV9zY3JvbGxlZEV4cG9zZWRSZWN0KTsKLSAg
ICBtX3dlYlBhZ2UucGFnZU92ZXJsYXlDb250cm9sbGVyKCkuZmx1c2hQYWdlT3ZlcmxheUxheWVy
cyh2aXNpYmxlUmVjdCk7CisKKyAgICAvLyBCZWNhdXNlIG91ciB2aWV3LXJlbGF0aXZlIG92ZXJs
YXkgcm9vdCBsYXllciBpcyBub3QgYXR0YWNoZWQgdG8gdGhlIG1haW4gR3JhcGhpY3NMYXllciB0
cmVlLCB3ZSBuZWVkIHRvIGZsdXNoIGl0IG1hbnVhbGx5LgorICAgIGlmIChtX3ZpZXdPdmVybGF5
Um9vdExheWVyKQorICAgICAgICBtX3ZpZXdPdmVybGF5Um9vdExheWVyLT5mbHVzaENvbXBvc2l0
aW5nU3RhdGUodmlzaWJsZVJlY3QpOwogCiAgICAgYm9vbCByZXR1cm5WYWx1ZSA9IG1fd2ViUGFn
ZS5tYWluRnJhbWVWaWV3KCktPmZsdXNoQ29tcG9zaXRpbmdTdGF0ZUluY2x1ZGluZ1N1YmZyYW1l
cygpOwogI2lmIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpCkBAIC0zNjMsOCArMzg4LDYgQEAgdm9p
ZCBUaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYTo6dXBkYXRlU2Nyb2xsZWRFeHBvc2VkUmVj
dCgpCiAjZW5kaWYKIAogICAgIGZyYW1lVmlldy0+c2V0RXhwb3NlZFJlY3QobV9zY3JvbGxlZEV4
cG9zZWRSZWN0KTsKLQotICAgIG1fd2ViUGFnZS5wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKS5kaWRD
aGFuZ2VFeHBvc2VkUmVjdCgpOwogfQogCiB2b2lkIFRpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdB
cmVhOjp1cGRhdGVHZW9tZXRyeShjb25zdCBJbnRTaXplJiB2aWV3U2l6ZSwgY29uc3QgSW50U2l6
ZSYgbGF5ZXJQb3NpdGlvbikKQEAgLTQ2NCwxMiArNDg3LDEyIEBAIHZvaWQgVGlsZWRDb3JlQW5p
bWF0aW9uRHJhd2luZ0FyZWE6OnNldFJvb3RDb21wb3NpdGluZ0xheWVyKENBTGF5ZXIgKmxheWVy
KQogICAgIFtDQVRyYW5zYWN0aW9uIGJlZ2luXTsKICAgICBbQ0FUcmFuc2FjdGlvbiBzZXREaXNh
YmxlQWN0aW9uczpZRVNdOwogCi0gICAgW21faG9zdGluZ0xheWVyIHNldFN1YmxheWVyczpsYXll
ciA/IEBbIGxheWVyLCBtX3dlYlBhZ2UucGFnZU92ZXJsYXlDb250cm9sbGVyKCkudmlld092ZXJs
YXlSb290TGF5ZXIoKS0+cGxhdGZvcm1MYXllcigpIF0gOiBAWyBdXTsKLQogICAgIGJvb2wgaGFk
Um9vdExheWVyID0gISFtX3Jvb3RMYXllcjsKICAgICBtX3Jvb3RMYXllciA9IGxheWVyOwogICAg
IFttX3Jvb3RMYXllciBzZXRTdWJsYXllclRyYW5zZm9ybTptX3RyYW5zZm9ybV07CiAKKyAgICB1
cGRhdGVSb290TGF5ZXJzKCk7CisKICAgICBpZiAoaGFkUm9vdExheWVyICE9ICEhbGF5ZXIpCiAg
ICAgICAgIG1fbGF5ZXJIb3N0aW5nQ29udGV4dC0+c2V0Um9vdExheWVyKGxheWVyID8gbV9ob3N0
aW5nTGF5ZXIuZ2V0KCkgOiAwKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL21hYy9XS0FjY2Vzc2liaWxpdHlXZWJQYWdlT2JqZWN0TWFjLm1tIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XS0FjY2Vzc2liaWxpdHlXZWJQYWdl
T2JqZWN0TWFjLm1tCmluZGV4IDM4MzM5YmEuLjU0ZGQ0NDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV0tBY2Nlc3NpYmlsaXR5V2ViUGFnZU9iamVj
dE1hYy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dLQWNj
ZXNzaWJpbGl0eVdlYlBhZ2VPYmplY3RNYWMubW0KQEAgLTQwLDYgKzQwLDcgQEAKICNpbXBvcnQg
PFdlYkNvcmUvRnJhbWVWaWV3Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL01haW5GcmFtZS5oPgogI2lt
cG9ydCA8V2ViQ29yZS9QYWdlLmg+CisjaW1wb3J0IDxXZWJDb3JlL1BhZ2VPdmVybGF5Q29udHJv
bGxlci5oPgogI2ltcG9ydCA8V2ViQ29yZS9TY3JvbGxWaWV3Lmg+CiAjaW1wb3J0IDxXZWJDb3Jl
L1Njcm9sbGJhci5oPgogI2ltcG9ydCA8V2ViS2l0U3lzdGVtSW50ZXJmYWNlLmg+CkBAIC03NSwx
OSArNzYsMTMgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKIAogLSAoTlNBcnJheSAqKWFjY2Vz
c2liaWxpdHlQYXJhbWV0ZXJpemVkQXR0cmlidXRlTmFtZXMKIHsKLSAgICBXS1JldGFpblB0cjxX
S0FycmF5UmVmPiByZXN1bHQgPSBhZG9wdFdLKG1fcGFnZS0+cGFnZU92ZXJsYXlDb250cm9sbGVy
KCkuY29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVzTmFtZXModHJ1ZSkpOwotICAgIGlmICghcmVz
dWx0KQorICAgIFZlY3RvcjxTdHJpbmc+IHJlc3VsdCA9IG1fcGFnZS0+Y29yZVBhZ2UoKS0+cGFn
ZU92ZXJsYXlDb250cm9sbGVyKCkuY29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVzTmFtZXModHJ1
ZSk7CisgICAgaWYgKHJlc3VsdC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBuaWw7CiAgICAg
CiAgICAgTlNNdXRhYmxlQXJyYXkgKm5hbWVzID0gW05TTXV0YWJsZUFycmF5IGFycmF5XTsKLSAg
ICBzaXplX3QgY291bnQgPSBXS0FycmF5R2V0U2l6ZShyZXN1bHQuZ2V0KCkpOwotICAgIGZvciAo
c2l6ZV90IGsgPSAwOyBrIDwgY291bnQ7IGsrKykgewotICAgICAgICBXS1R5cGVSZWYgaXRlbSA9
IFdLQXJyYXlHZXRJdGVtQXRJbmRleChyZXN1bHQuZ2V0KCksIGspOwotICAgICAgICBpZiAodG9J
bXBsKGl0ZW0pLT50eXBlKCkgPT0gQVBJOjpTdHJpbmc6OkFQSVR5cGUpIHsKLSAgICAgICAgICAg
IFJldGFpblB0cjxDRlN0cmluZ1JlZj4gbmFtZSA9IGFkb3B0Q0YoV0tTdHJpbmdDb3B5Q0ZTdHJp
bmcoa0NGQWxsb2NhdG9yRGVmYXVsdCwgKFdLU3RyaW5nUmVmKWl0ZW0pKTsKLSAgICAgICAgICAg
IFtuYW1lcyBhZGRPYmplY3Q6KE5TU3RyaW5nICopbmFtZS5nZXQoKV07Ci0gICAgICAgIH0KLSAg
ICB9CisgICAgZm9yIChhdXRvJiBuYW1lIDogcmVzdWx0KQorICAgICAgICBbbmFtZXMgYWRkT2Jq
ZWN0OihOU1N0cmluZyAqKW5hbWVdOwogICAgIAogICAgIHJldHVybiBuYW1lczsKIH0KQEAgLTE2
NCwyMyArMTU5LDI2IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CiAKIC0gKGlkKWFjY2Vzc2li
aWxpdHlBdHRyaWJ1dGVWYWx1ZTooTlNTdHJpbmcgKilhdHRyaWJ1dGUgZm9yUGFyYW1ldGVyOihp
ZClwYXJhbWV0ZXIKIHsKLSAgICBXS1JldGFpblB0cjxXS1R5cGVSZWY+IHBhZ2VPdmVybGF5UGFy
YW1ldGVyID0gMDsKLSAgICAKLSAgICBpZiAoW3BhcmFtZXRlciBpc0tpbmRPZkNsYXNzOltOU1Zh
bHVlIGNsYXNzXV0gJiYgc3RyY21wKFsoTlNWYWx1ZSopcGFyYW1ldGVyIG9iakNUeXBlXSwgQGVu
Y29kZShOU1BvaW50KSkgPT0gMCkgewotICAgICAgICBOU1BvaW50IHBvaW50ID0gW3NlbGYgY29u
dmVydFNjcmVlblBvaW50VG9Sb290VmlldzpbKE5TVmFsdWUgKilwYXJhbWV0ZXIgcG9pbnRWYWx1
ZV1dOwotICAgICAgICBwYWdlT3ZlcmxheVBhcmFtZXRlciA9IFdLUG9pbnRDcmVhdGUoV0tQb2lu
dE1ha2UocG9pbnQueCwgcG9pbnQueSkpOwotICAgIH0KLSAgICAKLSAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gYXR0cmlidXRlUmVmID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhDRlN0
cmluZygoQ0ZTdHJpbmdSZWYpYXR0cmlidXRlKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tUeXBlUmVm
PiByZXN1bHQgPSBhZG9wdFdLKG1fcGFnZS0+cGFnZU92ZXJsYXlDb250cm9sbGVyKCkuY29weUFj
Y2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZShhdHRyaWJ1dGVSZWYuZ2V0KCksIHBhZ2VPdmVybGF5
UGFyYW1ldGVyLmdldCgpKSk7Ci0gICAgaWYgKCFyZXN1bHQpCisgICAgV2ViQ29yZTo6RmxvYXRQ
b2ludCBwYWdlT3ZlcmxheVBvaW50OworICAgIGlmIChbcGFyYW1ldGVyIGlzS2luZE9mQ2xhc3M6
W05TVmFsdWUgY2xhc3NdXSAmJiAhc3RyY21wKFsoTlNWYWx1ZSAqKXBhcmFtZXRlciBvYmpDVHlw
ZV0sIEBlbmNvZGUoTlNQb2ludCkpKQorICAgICAgICBwYWdlT3ZlcmxheVBvaW50ID0gW3NlbGYg
Y29udmVydFNjcmVlblBvaW50VG9Sb290VmlldzpbKE5TVmFsdWUgKilwYXJhbWV0ZXIgcG9pbnRW
YWx1ZV1dOworICAgIGVsc2UKICAgICAgICAgcmV0dXJuIG5pbDsKLSAgICAKLSAgICBpZiAodG9J
bXBsKHJlc3VsdC5nZXQoKSktPnR5cGUoKSA9PSBBUEk6OlN0cmluZzo6QVBJVHlwZSkKLSAgICAg
ICAgcmV0dXJuIENGQnJpZGdpbmdSZWxlYXNlKFdLU3RyaW5nQ29weUNGU3RyaW5nKGtDRkFsbG9j
YXRvckRlZmF1bHQsIChXS1N0cmluZ1JlZilyZXN1bHQuZ2V0KCkpKTsKLSAgICBpZiAodG9JbXBs
KHJlc3VsdC5nZXQoKSktPnR5cGUoKSA9PSBBUEk6OkJvb2xlYW46OkFQSVR5cGUpCi0gICAgICAg
IHJldHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0aEJvb2w6V0tCb29sZWFuR2V0VmFsdWUoc3RhdGlj
X2Nhc3Q8V0tCb29sZWFuUmVmPihyZXN1bHQuZ2V0KCkpKV07Ci0gICAgCisKKyAgICBpZiAoW2F0
dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6QCJBWERhdGFEZXRlY3RvckV4aXN0c0F0UG9pbnQiXSB8
fCBbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpAIkFYRGlkU2hvd0RhdGFEZXRlY3Rvck1lbnVB
dFBvaW50Il0pIHsKKyAgICAgICAgYm9vbCB2YWx1ZTsKKyAgICAgICAgaWYgKCFtX3BhZ2UtPmNv
cmVQYWdlKCktPnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLmNvcHlBY2Nlc3NpYmlsaXR5QXR0cmli
dXRlQm9vbFZhbHVlRm9yUG9pbnQoYXR0cmlidXRlLCBwYWdlT3ZlcmxheVBvaW50LCB2YWx1ZSkp
CisgICAgICAgICAgICByZXR1cm4gbmlsOworICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJl
cldpdGhCb29sOnZhbHVlXTsKKyAgICB9CisKKyAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9T
dHJpbmc6QCJBWERhdGFEZXRlY3RvclR5cGVBdFBvaW50Il0pIHsKKyAgICAgICAgU3RyaW5nIHZh
bHVlOworICAgICAgICBpZiAoIW1fcGFnZS0+Y29yZVBhZ2UoKS0+cGFnZU92ZXJsYXlDb250cm9s
bGVyKCkuY29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVTdHJpbmdWYWx1ZUZvclBvaW50KGF0dHJp
YnV0ZSwgcGFnZU92ZXJsYXlQb2ludCwgdmFsdWUpKQorICAgICAgICAgICAgcmV0dXJuIG5pbDsK
KyAgICAgICAgcmV0dXJuIFtOU1N0cmluZyBzdHJpbmdXaXRoU3RyaW5nOnZhbHVlXTsKKyAgICB9
CisKICAgICByZXR1cm4gbmlsOwogfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>238946</attachid>
            <date>2014-09-30 12:24:35 -0700</date>
            <delta_ts>2014-09-30 12:54:44 -0700</delta_ts>
            <desc>windows</desc>
            <filename>pageoverlay.diff</filename>
            <type>text/plain</type>
            <size>171725</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNv
cmUvQ01ha2VMaXN0cy50eHQKaW5kZXggNmRhZGMzMC4uZTFlOGZlNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKQEAgLTE5NDAsNiArMTk0MCw4IEBAIHNldChXZWJDb3JlX1NPVVJDRVMKICAgICBwYWdl
L1BhZ2VDb25zb2xlQ2xpZW50LmNwcAogICAgIHBhZ2UvUGFnZUdyb3VwLmNwcAogICAgIHBhZ2Uv
UGFnZUdyb3VwTG9hZERlZmVycmVyLmNwcAorICAgIHBhZ2UvUGFnZU92ZXJsYXkuY3BwCisgICAg
cGFnZS9QYWdlT3ZlcmxheUNvbnRyb2xsZXIuY3BwCiAgICAgcGFnZS9QYWdlU2VyaWFsaXplci5j
cHAKICAgICBwYWdlL1BhZ2VUaHJvdHRsZXIuY3BwCiAgICAgcGFnZS9QYWdlVmlzaWJpbGl0eVN0
YXRlLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4gYi9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgppbmRleCA5NDNjMzExLi42MTdhN2JhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgorKysgYi9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLmV4cC5pbgpAQCAtMTg3LDYgKzE4NywxMyBAQCBfX1pON1dlYkNvcmUxMU1lbW9yeUNh
Y2hlMThyZXNvdXJjZUZvclJlcXVlc3RFUktOU18xNVJlc291cmNlUmVxdWVzdEVOU185U2Vzc2lv
bgogX19aTjdXZWJDb3JlMTFNZW1vcnlDYWNoZTE5Z2V0T3JpZ2luc1dpdGhDYWNoZUVSTjNXVEY3
SGFzaFNldElOUzFfNlJlZlB0cklOU18xNFNlY3VyaXR5T3JpZ2luRUVFTlNfMThTZWN1cml0eU9y
aWdpbkhhc2hFTlMxXzEwSGFzaFRyYWl0c0lTNV9FRUVFCiBfX1pON1dlYkNvcmUxMU1lbW9yeUNh
Y2hlMjByZW1vdmVJbWFnZUZyb21DYWNoZUVSS05TXzNVUkxFUktOM1dURjZTdHJpbmdFCiBfX1pO
N1dlYkNvcmUxMU1lbW9yeUNhY2hlMjVyZW1vdmVSZXNvdXJjZXNXaXRoT3JpZ2luRVBOU18xNFNl
Y3VyaXR5T3JpZ2luRQorX19aTjdXZWJDb3JlMTFQYWdlT3ZlcmxheTE1c2V0TmVlZHNEaXNwbGF5
RVJLTlNfN0ludFJlY3RFCitfX1pON1dlYkNvcmUxMVBhZ2VPdmVybGF5MTVzZXROZWVkc0Rpc3Bs
YXlFdgorX19aTjdXZWJDb3JlMTFQYWdlT3ZlcmxheTIwc3RvcEZhZGVPdXRBbmltYXRpb25Fdgor
X19aTjdXZWJDb3JlMTFQYWdlT3ZlcmxheTVjbGVhckV2CitfX1pON1dlYkNvcmUxMVBhZ2VPdmVy
bGF5NWxheWVyRXYKK19fWk43V2ViQ29yZTExUGFnZU92ZXJsYXk2Y3JlYXRlRVJOUzBfNkNsaWVu
dEVOUzBfMTFPdmVybGF5VHlwZUUKK19fWk43V2ViQ29yZTExUGFnZU92ZXJsYXk4c2V0RnJhbWVF
TlNfN0ludFJlY3RFCiBfX1pON1dlYkNvcmUxMVNRTFJlc3VsdE9rRQogX19aTjdXZWJDb3JlMTFV
UkxXaXRoRGF0YUVQNk5TRGF0YVA1TlNVUkwKIF9fWk43V2ViQ29yZTExZ2V0VVJMQnl0ZXNFUEs3
X19DRlVSTFJOM1dURjZWZWN0b3JJY0xtNTEyRU5TM18xNUNyYXNoT25PdmVyZmxvd0VFRQpAQCAt
OTA5LDYgKzkxNiwxMiBAQCBfX1pON1dlYkNvcmUyMU1lbW9yeVByZXNzdXJlSGFuZGxlcjdpbnN0
YWxsRXYKIF9fWk43V2ViQ29yZTIxTmV0d29ya1N0b3JhZ2VTZXNzaW9uMjFkZWZhdWx0U3RvcmFn
ZVNlc3Npb25FdgogX19aTjdXZWJDb3JlMjFOZXR3b3JrU3RvcmFnZVNlc3Npb24yNXN3aXRjaFRv
TmV3VGVzdGluZ1Nlc3Npb25FdgogX19aTjdXZWJDb3JlMjFOZXR3b3JrU3RvcmFnZVNlc3Npb24y
OGNyZWF0ZVByaXZhdGVCcm93c2luZ1Nlc3Npb25FUktOM1dURjZTdHJpbmdFCitfX1pON1dlYkNv
cmUyMVBhZ2VPdmVybGF5Q29udHJvbGxlcjE4aW5zdGFsbFBhZ2VPdmVybGF5RU4zV1RGMTBQYXNz
UmVmUHRySU5TXzExUGFnZU92ZXJsYXlFRUVOUzNfOEZhZGVNb2RlRQorX19aTjdXZWJDb3JlMjFQ
YWdlT3ZlcmxheUNvbnRyb2xsZXIyMHVuaW5zdGFsbFBhZ2VPdmVybGF5RVBOU18xMVBhZ2VPdmVy
bGF5RU5TMV84RmFkZU1vZGVFCitfX1pON1dlYkNvcmUyMVBhZ2VPdmVybGF5Q29udHJvbGxlcjIw
dmlld092ZXJsYXlSb290TGF5ZXJFdgorX19aTjdXZWJDb3JlMjFQYWdlT3ZlcmxheUNvbnRyb2xs
ZXIzMmNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlc05hbWVzRWIKK19fWk43V2ViQ29yZTIxUGFn
ZU92ZXJsYXlDb250cm9sbGVyNDNjb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZUJvb2xWYWx1ZUZv
clBvaW50RU4zV1RGNlN0cmluZ0VOU18xMEZsb2F0UG9pbnRFUmIKK19fWk43V2ViQ29yZTIxUGFn
ZU92ZXJsYXlDb250cm9sbGVyNDVjb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVN0cmluZ1ZhbHVl
Rm9yUG9pbnRFTjNXVEY2U3RyaW5nRU5TXzEwRmxvYXRQb2ludEVSUzJfCiBfX1pON1dlYkNvcmUy
MVBsYXRmb3JtS2V5Ym9hcmRFdmVudDI0ZGlzYW1iaWd1YXRlS2V5RG93bkV2ZW50RU5TXzEzUGxh
dGZvcm1FdmVudDRUeXBlRWIKIF9fWk43V2ViQ29yZTIxUmVtb3RlQ29tbWFuZExpc3RlbmVyNmNy
ZWF0ZUVSTlNfMjdSZW1vdGVDb21tYW5kTGlzdGVuZXJDbGllbnRFCiBfX1pON1dlYkNvcmUyMVJl
c291cmNlTG9hZFNjaGVkdWxlcjIwc2VydmVQZW5kaW5nUmVxdWVzdHNFTlNfMjBSZXNvdXJjZUxv
YWRQcmlvcml0eUUKQEAgLTE2MDMsNiArMTYxNiw4IEBAIF9fWk5LN1dlYkNvcmUxMUhpc3RvcnlJ
dGVtOGNoaWxkcmVuRXYKIF9fWk5LN1dlYkNvcmUxMUhpc3RvcnlJdGVtOHJlZmVycmVyRXYKIF9f
Wk5LN1dlYkNvcmUxMUhpc3RvcnlJdGVtOXVybFN0cmluZ0V2CiBfX1pOSzdXZWJDb3JlMTFIaXN0
b3J5SXRlbTl2aWV3U3RhdGVFdgorX19aTks3V2ViQ29yZTExUGFnZU92ZXJsYXk1ZnJhbWVFdgor
X19aTks3V2ViQ29yZTExUGFnZU92ZXJsYXk2Ym91bmRzRXYKIF9fWk5LN1dlYkNvcmUxMVJlbmRl
ckJsb2NrMjVpbmxpbmVFbGVtZW50Q29udGludWF0aW9uRXYKIF9fWk5LN1dlYkNvcmUxMVJlbmRl
ckxheWVyMTlhYnNvbHV0ZUJvdW5kaW5nQm94RXYKIF9fWk5LN1dlYkNvcmUxMVJlbmRlckxheWVy
MjRuZWVkc0NvbXBvc2l0ZWRTY3JvbGxpbmdFdgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
dmN4cHJvai9XZWJDb3JlLnZjeHByb2oKaW5kZXggODY2MWJiMS4uNjRkMTlmYiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvagorKysgYi9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qCkBAIC03MTgwLDYg
KzcxODAsOCBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGFnZVxQYWdlQ29uc29sZUNs
aWVudC5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwYWdlXFBhZ2VHcm91cC5j
cHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwYWdlXFBhZ2VHcm91cExvYWREZWZl
cnJlci5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwYWdlXFBhZ2VPdmVybGF5
LmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBhZ2VcUGFnZU92ZXJsYXlDb250
cm9sbGVyLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBhZ2VcUGFnZVNlcmlh
bGl6ZXIuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGFnZVxQYWdlVGhyb3R0
bGVyLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBhZ2VcUGFnZVZpc2liaWxp
dHlTdGF0ZS5jcHAiIC8+CkBAIC0xOTE3NSw2ICsxOTE3Nyw4IEBACiAgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxwYWdlXFBhZ2VDb25zb2xlQ2xpZW50LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxwYWdlXFBhZ2VHcm91cC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5ccGFnZVxQYWdlR3JvdXBMb2FkRGVmZXJyZXIuaCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXHBhZ2VcUGFnZU92ZXJsYXkuaCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XHBhZ2VcUGFnZU92ZXJsYXlDb250cm9sbGVyLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxwYWdlXFBhZ2VTZXJpYWxpemVyLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxwYWdlXFBhZ2VWaXNpYmlsaXR5U3RhdGUuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXHBhZ2VcUGVyZm9ybWFuY2UuaCIgLz4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2ouZmlsdGVycyBiL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2ouZmlsdGVycwppbmRleCBkNzFjY2ZkLi4xYzRm
ZTEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52
Y3hwcm9qLmZpbHRlcnMKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNv
cmUudmN4cHJvai5maWx0ZXJzCkBAIC00OTk4LDYgKzQ5OTgsMTIgQEAKICAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXHBhZ2VcUGFnZUdyb3VwTG9hZERlZmVycmVyLmNwcCI+CiAgICAgICA8Rmls
dGVyPnBhZ2U8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXHBhZ2VcUGFnZU92ZXJsYXkuY3BwIj4KKyAgICAgIDxGaWx0ZXI+cGFnZTwvRmlsdGVy
PgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGFnZVxQYWdl
T3ZlcmxheUNvbnRyb2xsZXIuY3BwIj4KKyAgICAgIDxGaWx0ZXI+cGFnZTwvRmlsdGVyPgorICAg
IDwvQ2xDb21waWxlPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGFnZVxQYWdlU2VyaWFs
aXplci5jcHAiPgogICAgICAgPEZpbHRlcj5wYWdlPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+
CkBAIC0xMjk0Myw2ICsxMjk0OSwxMiBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGFn
ZVxQYWdlR3JvdXBMb2FkRGVmZXJyZXIuaCI+CiAgICAgICA8RmlsdGVyPnBhZ2U8L0ZpbHRlcj4K
ICAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBhZ2VcUGFnZU92
ZXJsYXkuaCI+CisgICAgICA8RmlsdGVyPnBhZ2U8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4K
KyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBhZ2VcUGFnZU92ZXJsYXlDb250cm9sbGVyLmgi
PgorICAgICAgPEZpbHRlcj5wYWdlPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CiAgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxwYWdlXFBhZ2VTZXJpYWxpemVyLmgiPgogICAgICAgPEZpbHRl
cj5wYWdlPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggZGNmNDZhZS4uOWMxODA1OSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agpAQCAtMTA5MSw2ICsxMDkxLDEwIEBACiAJCTJENUE1OTJGMTUyNTI1MjMwMDM2RUU1MSAvKiBJ
bWFnZU9yaWVudGF0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEE4NzQ4RDc0MTJDQzNGODkwMDFGQkE0MSAvKiBJbWFnZU9yaWVudGF0aW9uLmNw
cCAqLzsgfTsKIAkJMkQ1QTU5MzExNTI1MjVEMDAwMzZFRTUxIC8qIEltYWdlT3JpZW50YXRpb24u
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4NzQ4RDY2
MTJDQzM3NjMwMDFGQkE0MSAvKiBJbWFnZU9yaWVudGF0aW9uLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMkQ1QkM0MjcxNkY4ODJFRTAwNzA0OEQw
IC8qIFNlY3VyaXR5UG9saWN5VmlvbGF0aW9uRXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJENUJDNDI1MTZGODgyQkUwMDcwNDhEMCAvKiBTZWN1
cml0eVBvbGljeVZpb2xhdGlvbkV2ZW50LmggKi87IH07CisJCTJENUM5Q0ZGMTlDN0I1MkUwMEIz
QzVDMSAvKiBQYWdlT3ZlcmxheS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAyRDVDOUNGQjE5QzdCNTJFMDBCM0M1QzEgLyogUGFnZU92ZXJsYXkuY3Bw
ICovOyB9OworCQkyRDVDOUQwMDE5QzdCNTJFMDBCM0M1QzEgLyogUGFnZU92ZXJsYXkuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJENUM5Q0ZDMTlDN0I1
MkUwMEIzQzVDMSAvKiBQYWdlT3ZlcmxheS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CisJCTJENUM5RDAxMTlDN0I1MkUwMEIzQzVDMSAvKiBQYWdlT3Zl
cmxheUNvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMkQ1QzlDRkQxOUM3QjUyRTAwQjNDNUMxIC8qIFBhZ2VPdmVybGF5Q29udHJvbGxl
ci5jcHAgKi87IH07CisJCTJENUM5RDAyMTlDN0I1MkUwMEIzQzVDMSAvKiBQYWdlT3ZlcmxheUNv
bnRyb2xsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDJENUM5Q0ZFMTlDN0I1MkUwMEIzQzVDMSAvKiBQYWdlT3ZlcmxheUNvbnRyb2xsZXIuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkyRDZFNDY4NDE3
RDY2MEY1MDBFQ0Y4QkIgLyogUERGRG9jdW1lbnRJbWFnZU1hYy5tbSBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJENkU0NjgyMTdENjYwRjUwMEVDRjhCQiAv
KiBQREZEb2N1bWVudEltYWdlTWFjLm1tICovOyB9OwogCQkyRDcwQkExMzE4MDc0RERGMDAwMTkw
OEEgLyogUGxhdGZvcm1DQUxheWVyTWFjLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAyRDcwQkExMjE4MDc0RERGMDAwMTkwOEEgLyogUGxhdGZvcm1DQUxh
eWVyTWFjLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJMkQ3MEJBMTUxODA3NEY4NjAwMDE5MDhBIC8qIFBsYXRmb3JtQ0FMYXllci5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRDcwQkExNDE4MDc0Rjg1
MDAwMTkwOEEgLyogUGxhdGZvcm1DQUxheWVyLmNwcCAqLzsgfTsKQEAgLTgwODUsNiArODA4OSwx
MCBAQAogCQkyRDQ2RjA0RjE3Qjk2RkQyMDA1NjQ3RjAgLyogSW50U2l6ZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbnRTaXplLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMkQ1QkM0MjUxNkY4ODJCRTAwNzA0OEQwIC8qIFNlY3VyaXR5UG9saWN5
VmlvbGF0aW9uRXZlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2VjdXJp
dHlQb2xpY3lWaW9sYXRpb25FdmVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQky
RDVCQzQyNjE2Rjg4MkJFMDA3MDQ4RDAgLyogU2VjdXJpdHlQb2xpY3lWaW9sYXRpb25FdmVudC5p
ZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gU2VjdXJpdHlQb2xpY3lWaW9sYXRpb25FdmVudC5p
ZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTJENUM5Q0ZCMTlDN0I1MkUwMEIzQzVD
MSAvKiBQYWdlT3ZlcmxheS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBQYWdlT3ZlcmxheS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTJENUM5Q0ZD
MTlDN0I1MkUwMEIzQzVDMSAvKiBQYWdlT3ZlcmxheS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBQYWdlT3ZlcmxheS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQky
RDVDOUNGRDE5QzdCNTJFMDBCM0M1QzEgLyogUGFnZU92ZXJsYXlDb250cm9sbGVyLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBhZ2VPdmVybGF5Q29udHJvbGxlci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTJENUM5Q0ZFMTlDN0I1MkUwMEIzQzVD
MSAvKiBQYWdlT3ZlcmxheUNvbnRyb2xsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gUGFnZU92ZXJsYXlDb250cm9sbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTJENkU0NjgyMTdENjYwRjUwMEVDRjhCQiAvKiBQREZEb2N1bWVudEltYWdlTWFjLm1tICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gUERGRG9jdW1lbnRJbWFnZU1h
Yy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkQ3MEJBMTIxODA3NERERjAwMDE5
MDhBIC8qIFBsYXRmb3JtQ0FMYXllck1hYy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBQbGF0Zm9ybUNBTGF5ZXJNYWMuaDsgcGF0aCA9IGNhL21hYy9QbGF0Zm9ybUNBTGF5ZXJN
YWMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkQ3MEJBMTQxODA3NEY4NTAwMDE5
MDhBIC8qIFBsYXRmb3JtQ0FMYXllci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBQbGF0Zm9ybUNBTGF5ZXIuY3BwOyBwYXRoID0gY2EvUGxhdGZvcm1DQUxheWVyLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE2NTk3LDYgKzE2NjA1LDEwIEBACiAJ
CQkJOTMwMkIwQkUwRDc5RjgyQzAwQzdFRTgzIC8qIFBhZ2VHcm91cC5oICovLAogCQkJCTdBNjc0
QkQ5MEY5RUJGNEUwMDZDRjA5OSAvKiBQYWdlR3JvdXBMb2FkRGVmZXJyZXIuY3BwICovLAogCQkJ
CTdBNjc0QkRBMEY5RUJGNEUwMDZDRjA5OSAvKiBQYWdlR3JvdXBMb2FkRGVmZXJyZXIuaCAqLywK
KwkJCQkyRDVDOUNGQjE5QzdCNTJFMDBCM0M1QzEgLyogUGFnZU92ZXJsYXkuY3BwICovLAorCQkJ
CTJENUM5Q0ZDMTlDN0I1MkUwMEIzQzVDMSAvKiBQYWdlT3ZlcmxheS5oICovLAorCQkJCTJENUM5
Q0ZEMTlDN0I1MkUwMEIzQzVDMSAvKiBQYWdlT3ZlcmxheUNvbnRyb2xsZXIuY3BwICovLAorCQkJ
CTJENUM5Q0ZFMTlDN0I1MkUwMEIzQzVDMSAvKiBQYWdlT3ZlcmxheUNvbnRyb2xsZXIuaCAqLywK
IAkJCQkzNzFFNjVDRDEzNjYxRUVEMDBCRUVEQjAgLyogUGFnZVNlcmlhbGl6ZXIuY3BwICovLAog
CQkJCTM3MUU2NUNCMTM2NjFFREMwMEJFRURCMCAvKiBQYWdlU2VyaWFsaXplci5oICovLAogCQkJ
CUE3MTk3RjI1MTc1NjhBRTUwMDdCOTQ0MiAvKiBQYWdlVGhyb3R0bGVyLmNwcCAqLywKQEAgLTIz
NjYyLDYgKzIzNjc0LDcgQEAKIAkJCQk5N0JDNkEyMTE1MDVGMDgxMDAxQjc0QUMgLyogRGF0YWJh
c2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3QkM2QTI0MTUwNUYwODEwMDFCNzRBQyAvKiBEYXRh
YmFzZUF1dGhvcml6ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFMTZDRkQ0MTY5RDFERUQwMEQz
QTBDNyAvKiBEYXRhYmFzZUJhY2tlbmQuaCBpbiBIZWFkZXJzICovLAorCQkJCTJENUM5RDAyMTlD
N0I1MkUwMEIzQzVDMSAvKiBQYWdlT3ZlcmxheUNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAog
CQkJCTk3QkM2OURCMTUwNUYwNzYwMDFCNzRBQyAvKiBEYXRhYmFzZUJhY2tlbmRCYXNlLmggaW4g
SGVhZGVycyAqLywKIAkJCQlGRTZGNkFCMDE2OUUwNTc1MDBGQzMwQTIgLyogRGF0YWJhc2VCYWNr
ZW5kQ29udGV4dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkUxNkNGRDYxNjlEMURFRDAwRDNBMEM3
IC8qIERhdGFiYXNlQmFja2VuZFN5bmMuaCBpbiBIZWFkZXJzICovLApAQCAtMjU2MjksNiArMjU2
NDIsNyBAQAogCQkJCTQzOTA0NkVDMTJEQTI1RTgwMEFGODBBOSAvKiBSZW5kZXJNYXRoTUxUb2tl
bi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDM5MDQ2RUExMkRBMjVFODAwQUY4MEEyIC8qIFJlbmRl
ck1hdGhNTFVuZGVyT3Zlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTRDMjc5NTkwQ0Y5NzQxOTAw
RTk3Qjk4IC8qIFJlbmRlck1lZGlhLmggaW4gSGVhZGVycyAqLywKKwkJCQkyRDVDOUQwMDE5QzdC
NTJFMDBCM0M1QzEgLyogUGFnZU92ZXJsYXkuaCBpbiBIZWFkZXJzICovLAogCQkJCURFQkNDREQy
MTY2NDZFODIwMEE0NTJFMSAvKiBSZW5kZXJNZWRpYUNvbnRyb2xFbGVtZW50cy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNDFGQTMwM0YxMzE2QzI5QzAwQzBCRkM1IC8qIFJlbmRlck1lZGlhQ29udHJv
bHMuaCBpbiBIZWFkZXJzICovLAogCQkJCUFCRERGRTdBMEE1QzZFNzAwMEEzRTExRCAvKiBSZW5k
ZXJNZW51TGlzdC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yODAxNyw2ICsyODAzMSw3IEBACiAJCQkJ
QTU4NDBFMUMxODdCNzRENTAwODQzQjEwIC8qIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tp
ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3MUIxRTEyNjE2NDA0OTFBMDBCMTg4MEEgLyogSW5z
cGVjdG9yTGF5ZXJUcmVlQWdlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTA0QUFDQ0QxODM0
NDU1OTAwRTNEOUJDIC8qIEluc3BlY3Rvck5vZGVGaW5kZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJMkQ1QzlEMDExOUM3QjUyRTAwQjNDNUMxIC8qIFBhZ2VPdmVybGF5Q29udHJvbGxlci5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk3QzUyMkQ0QjE1QjQ3N0U4MDA5QjdDOTUgLyogSW5zcGVjdG9y
T3ZlcmxheS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0RjZGREQ2NDEzNDFERUREMDAxRjhFRTMg
LyogSW5zcGVjdG9yUGFnZUFnZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk5Q0MwQjY2MThC
RTlGMTUwMDZDRUJDQyAvKiBJbnNwZWN0b3JSZXBsYXlBZ2VudC5jcHAgaW4gU291cmNlcyAqLywK
QEAgLTI4MDg1LDYgKzI4MTAwLDcgQEAKIAkJCQlCQ0MwNjU4NzBGM0NFMkE3MDBDRDJEODcgLyog
SlNDbGllbnRSZWN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDQzA2NTg5MEYzQ0UyQTcwMENE
MkQ4NyAvKiBKU0NsaWVudFJlY3RMaXN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTVDNDMwNEI1
MTkxQUVGNDYwMDBFMkJDMCAvKiBKU0VYVFNoYWRlclRleHR1cmVMT0QuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJMkQ1QzlDRkYxOUM3QjUyRTAwQjNDNUMxIC8qIFBhZ2VPdmVybGF5LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTc2RkI5RkY4MTlBNzNFM0EwMDQyMDU2MiAvKiBKU0F1dG9jb21wbGV0
ZUVycm9yRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNBODNFNEYwRDdDRTFFOTAwMzQy
MUE4IC8qIEpTRGF0YVRyYW5zZmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDQTgzRTUyMEQ3
Q0UyMDUwMDM0MjFBOCAvKiBKU0RhdGFUcmFuc2ZlckN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9FbXB0eUNsaWVudHMuaCBiL1NvdXJj
ZS9XZWJDb3JlL2xvYWRlci9FbXB0eUNsaWVudHMuaAppbmRleCAzN2JlNDQ4Li45YzkwY2I3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5oCkBAIC0xODIsNiArMTgyLDcgQEAgcHVi
bGljOgogICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxSZWN0SW50b1ZpZXcoY29uc3QgSW50UmVjdCYp
IGNvbnN0IG92ZXJyaWRlIHsgfQogCiAgICAgdmlydHVhbCB2b2lkIGF0dGFjaFJvb3RHcmFwaGlj
c0xheWVyKEZyYW1lKiwgR3JhcGhpY3NMYXllciopIG92ZXJyaWRlIHsgfQorICAgIHZpcnR1YWwg
dm9pZCBhdHRhY2hWaWV3T3ZlcmxheUdyYXBoaWNzTGF5ZXIoRnJhbWUqLCBHcmFwaGljc0xheWVy
Kikgb3ZlcnJpZGUgeyB9CiAgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzT25lU2hvdERyYXdpbmdT
eW5jaHJvbml6YXRpb24oKSBvdmVycmlkZSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVD
b21wb3NpdGluZ0xheWVyRmx1c2goKSBvdmVycmlkZSB7IH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21l
Q2xpZW50LmgKaW5kZXggZThkYTBlOS4uYmY1NjM0ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGFnZS9DaHJvbWVDbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZUNs
aWVudC5oCkBAIC0yOTksNiArMjk5LDcgQEAgcHVibGljOgogCiAgICAgLy8gUGFzcyAwIGFzIHRo
ZSBHcmFwaGljc0xheWVyIHRvIGRldGF0Y2ggdGhlIHJvb3QgbGF5ZXIuCiAgICAgdmlydHVhbCB2
b2lkIGF0dGFjaFJvb3RHcmFwaGljc0xheWVyKEZyYW1lKiwgR3JhcGhpY3NMYXllciopID0gMDsK
KyAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoVmlld092ZXJsYXlHcmFwaGljc0xheWVyKEZyYW1lKiwg
R3JhcGhpY3NMYXllciopID0gMDsKICAgICAvLyBTZXRzIGEgZmxhZyB0byBzcGVjaWZ5IHRoYXQg
dGhlIG5leHQgdGltZSBjb250ZW50IGlzIGRyYXduIHRvIHRoZSB3aW5kb3csCiAgICAgLy8gdGhl
IGNoYW5nZXMgYXBwZWFyIG9uIHRoZSBzY3JlZW4gaW4gc3luY2hyb255IHdpdGggdXBkYXRlcyB0
byBHcmFwaGljc0xheWVycy4KICAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNPbmVTaG90RHJhd2lu
Z1N5bmNocm9uaXphdGlvbigpID0gMDsKQEAgLTMwOCw4ICszMDksNiBAQCBwdWJsaWM6CiAgICAg
Ly8gUmV0dXJucyB3aGV0aGVyIG9yIG5vdCB0aGUgY2xpZW50IGNhbiByZW5kZXIgdGhlIGNvbXBv
c2l0ZWQgbGF5ZXIsCiAgICAgLy8gcmVnYXJkbGVzcyBvZiB0aGUgc2V0dGluZ3MuCiAgICAgdmly
dHVhbCBib29sIGFsbG93c0FjY2VsZXJhdGVkQ29tcG9zaXRpbmcoKSBjb25zdCB7IHJldHVybiB0
cnVlOyB9Ci0gICAgLy8gU3VwcGx5IGEgbGF5ZXIgdGhhdCB3aWxsIGFkZGVkIGFzIGFuIG92ZXJs
YXkgb3ZlciBvdGhlciBkb2N1bWVudCBsYXllcnMgKHNjcm9sbGluZyB3aXRoIHRoZSBkb2N1bWVu
dCkuCi0gICAgdmlydHVhbCBHcmFwaGljc0xheWVyKiBkb2N1bWVudE92ZXJsYXlMYXllckZvckZy
YW1lKEZyYW1lJikgeyByZXR1cm4gbnVsbHB0cjsgfQogCiAgICAgZW51bSBDb21wb3NpdGluZ1Ry
aWdnZXIgewogICAgICAgICBUaHJlZURUcmFuc2Zvcm1UcmlnZ2VyID0gMSA8PCAwLApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCmluZGV4IDVkOTEwZjMuLmEzY2ZiYzggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKQEAgLTY2LDYgKzY2LDcgQEAKICNpbmNsdWRlICJN
b3VzZUV2ZW50LmgiCiAjaW5jbHVkZSAiTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cy5oIgog
I2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJQYWdlT3ZlcmxheUNvbnRyb2xsZXIuaCIKICNp
bmNsdWRlICJQbGF0Zm9ybUV2ZW50LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1LZXlib2FyZEV2ZW50
LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1XaGVlbEV2ZW50LmgiCkBAIC0xNjQzLDYgKzE2NDQsMTAg
QEAgYm9vbCBFdmVudEhhbmRsZXI6OmhhbmRsZU1vdXNlUHJlc3NFdmVudChjb25zdCBQbGF0Zm9y
bU1vdXNlRXZlbnQmIHBsYXRmb3JtTW91c2UKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQog
CisgICAgUGFnZSogcGFnZSA9IG1fZnJhbWUucGFnZSgpOworICAgIGlmIChwYWdlICYmIHBhZ2Ut
PnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLmhhbmRsZU1vdXNlRXZlbnQocGxhdGZvcm1Nb3VzZUV2
ZW50KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQog
ICAgIGJvb2wgZGVmYXVsdFByZXZlbnRlZCA9IGRpc3BhdGNoU3ludGhldGljVG91Y2hFdmVudElm
RW5hYmxlZChwbGF0Zm9ybU1vdXNlRXZlbnQpOwogICAgIGlmIChkZWZhdWx0UHJldmVudGVkKQpA
QCAtMTgzNiwxMCArMTg0MSwxMyBAQCBib29sIEV2ZW50SGFuZGxlcjo6bW91c2VNb3ZlZChjb25z
dCBQbGF0Zm9ybU1vdXNlRXZlbnQmIGV2ZW50KQogICAgIFJlZlB0cjxGcmFtZVZpZXc+IHByb3Rl
Y3RvcihtX2ZyYW1lLnZpZXcoKSk7CiAgICAgTWF4aW11bUR1cmF0aW9uVHJhY2tlciBtYXhEdXJh
dGlvblRyYWNrZXIoJm1fbWF4TW91c2VNb3ZlZER1cmF0aW9uKTsKIAorICAgIFBhZ2UqIHBhZ2Ug
PSBtX2ZyYW1lLnBhZ2UoKTsKKyAgICBpZiAocGFnZSAmJiBwYWdlLT5wYWdlT3ZlcmxheUNvbnRy
b2xsZXIoKS5oYW5kbGVNb3VzZUV2ZW50KGV2ZW50KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisK
ICAgICBIaXRUZXN0UmVzdWx0IGhvdmVyZWROb2RlID0gSGl0VGVzdFJlc3VsdChMYXlvdXRQb2lu
dCgpKTsKICAgICBib29sIHJlc3VsdCA9IGhhbmRsZU1vdXNlTW92ZUV2ZW50KGV2ZW50LCAmaG92
ZXJlZE5vZGUpOwogCi0gICAgUGFnZSogcGFnZSA9IG1fZnJhbWUucGFnZSgpOwogICAgIGlmICgh
cGFnZSkKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKIApAQCAtMjAxOSw2ICsyMDI3LDEwIEBAIGJv
b2wgRXZlbnRIYW5kbGVyOjpoYW5kbGVNb3VzZVJlbGVhc2VFdmVudChjb25zdCBQbGF0Zm9ybU1v
dXNlRXZlbnQmIHBsYXRmb3JtTW91CiAKICAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLnNldENhcmV0
QmxpbmtpbmdTdXNwZW5kZWQoZmFsc2UpOwogCisgICAgUGFnZSogcGFnZSA9IG1fZnJhbWUucGFn
ZSgpOworICAgIGlmIChwYWdlICYmIHBhZ2UtPnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLmhhbmRs
ZU1vdXNlRXZlbnQocGxhdGZvcm1Nb3VzZUV2ZW50KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisK
ICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQogICAgIGJvb2wgZGVmYXVsdFByZXZlbnRlZCA9IGRp
c3BhdGNoU3ludGhldGljVG91Y2hFdmVudElmRW5hYmxlZChwbGF0Zm9ybU1vdXNlRXZlbnQpOwog
ICAgIGlmIChkZWZhdWx0UHJldmVudGVkKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9GcmFtZVZpZXcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCmluZGV4
IGJjYjUwNDQuLmQ2MTY5ZjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVW
aWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKQEAgLTYwLDYg
KzYwLDcgQEAKICNpbmNsdWRlICJNZW1vcnlDYWNoZS5oIgogI2luY2x1ZGUgIk1lbW9yeVByZXNz
dXJlSGFuZGxlci5oIgogI2luY2x1ZGUgIk92ZXJmbG93RXZlbnQuaCIKKyNpbmNsdWRlICJQYWdl
T3ZlcmxheUNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJQcm9ncmVzc1RyYWNrZXIuaCIKICNpbmNs
dWRlICJSZW5kZXJFbWJlZGRlZE9iamVjdC5oIgogI2luY2x1ZGUgIlJlbmRlckZ1bGxTY3JlZW4u
aCIKQEAgLTQzMCwxMCArNDMxLDExIEBAIHZvaWQgRnJhbWVWaWV3OjpzZXRGcmFtZVJlY3QoY29u
c3QgSW50UmVjdCYgbmV3UmVjdCkKICAgICBpZiAobmV3UmVjdCA9PSBvbGRSZWN0KQogICAgICAg
ICByZXR1cm47CiAKKyAgICBQYWdlKiBwYWdlID0gZnJhbWUoKS5wYWdlKCk7CisKICNpZiBFTkFC
TEUoVEVYVF9BVVRPU0laSU5HKQogICAgIC8vIEF1dG9zaXplZCBmb250IHNpemVzIGRlcGVuZCBv
biB0aGUgd2lkdGggb2YgdGhlIHZpZXdpbmcgYXJlYS4KICAgICBpZiAobmV3UmVjdC53aWR0aCgp
ICE9IG9sZFJlY3Qud2lkdGgoKSkgewotICAgICAgICBQYWdlKiBwYWdlID0gZnJhbWUoKS5wYWdl
KCk7CiAgICAgICAgIGlmIChmcmFtZSgpLmlzTWFpbkZyYW1lKCkgJiYgcGFnZS0+c2V0dGluZ3Mo
KS50ZXh0QXV0b3NpemluZ0VuYWJsZWQoKSkgewogICAgICAgICAgICAgZm9yIChGcmFtZSogZnJh
bWUgPSAmcGFnZS0+bWFpbkZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJh
dmVyc2VOZXh0KCkpCiAgICAgICAgICAgICAgICAgZnJhbWUoKS5kb2N1bWVudCgpLT50ZXh0QXV0
b3NpemVyKCktPnJlY2FsY3VsYXRlTXVsdGlwbGllcnMoKTsKQEAgLTQ0OSw2ICs0NTEsOSBAQCB2
b2lkIEZyYW1lVmlldzo6c2V0RnJhbWVSZWN0KGNvbnN0IEludFJlY3QmIG5ld1JlY3QpCiAgICAg
ICAgIGlmIChyZW5kZXJWaWV3LT51c2VzQ29tcG9zaXRpbmcoKSkKICAgICAgICAgICAgIHJlbmRl
clZpZXctPmNvbXBvc2l0b3IoKS5mcmFtZVZpZXdEaWRDaGFuZ2VTaXplKCk7CiAgICAgfQorCisg
ICAgaWYgKGZyYW1lKCkuaXNNYWluRnJhbWUoKSkKKyAgICAgICAgcGFnZS0+cGFnZU92ZXJsYXlD
b250cm9sbGVyKCkuZGlkQ2hhbmdlVmlld1NpemUoKTsKIH0KIAogI2lmIEVOQUJMRShSRVFVRVNU
X0FOSU1BVElPTl9GUkFNRSkKQEAgLTU2Miw2ICs1NjcsOSBAQCB2b2lkIEZyYW1lVmlldzo6c2V0
Q29udGVudHNTaXplKGNvbnN0IEludFNpemUmIHNpemUpCiAKICAgICBwYWdlLT5jaHJvbWUoKS5j
b250ZW50c1NpemVDaGFuZ2VkKCZmcmFtZSgpLCBzaXplKTsgLy8gTm90aWZ5IG9ubHkuCiAKKyAg
ICBpZiAoZnJhbWUoKS5pc01haW5GcmFtZSgpKQorICAgICAgICBwYWdlLT5wYWdlT3ZlcmxheUNv
bnRyb2xsZXIoKS5kaWRDaGFuZ2VEb2N1bWVudFNpemUoKTsKKwogICAgIEFTU0VSVChtX2RlZmVy
U2V0TmVlZHNMYXlvdXRzKTsKICAgICBtX2RlZmVyU2V0TmVlZHNMYXlvdXRzLS07CiAgICAgCkBA
IC0yMDQ4LDcgKzIwNTYsNyBAQCB2b2lkIEZyYW1lVmlldzo6c2V0Rml4ZWRWaXNpYmxlQ29udGVu
dFJlY3QoY29uc3QgSW50UmVjdCYgdmlzaWJsZUNvbnRlbnRSZWN0KQogICAgICAgICAvLyBVcGRh
dGUgdGhlIHNjcm9sbC1iYXJzIHRvIGNhbGN1bGF0ZSBuZXcgcGFnZS1zdGVwIHNpemUuCiAgICAg
ICAgIHVwZGF0ZVNjcm9sbGJhcnMoc2Nyb2xsT2Zmc2V0KCkpOwogICAgIH0KLSAgICBmcmFtZSgp
LmxvYWRlcigpLmNsaWVudCgpLmRpZENoYW5nZVNjcm9sbE9mZnNldCgpOworICAgIGRpZENoYW5n
ZVNjcm9sbE9mZnNldCgpOwogfQogI2VuZGlmCiAKQEAgLTIwNjEsNiArMjA2OSwxNCBAQCB2b2lk
IEZyYW1lVmlldzo6c2V0Vmlld3BvcnRDb25zdHJhaW5lZE9iamVjdHNOZWVkTGF5b3V0KCkKICAg
ICAgICAgcmVuZGVyZXItPnNldE5lZWRzTGF5b3V0KCk7CiB9CiAKK3ZvaWQgRnJhbWVWaWV3Ojpk
aWRDaGFuZ2VTY3JvbGxPZmZzZXQoKQoreworICAgIGlmIChQYWdlKiBwYWdlID0gZnJhbWUoKS5w
YWdlKCkpCisgICAgICAgIHBhZ2UtPnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLmRpZFNjcm9sbEZy
YW1lKGZyYW1lKCkpOworCisgICAgZnJhbWUoKS5sb2FkZXIoKS5jbGllbnQoKS5kaWRDaGFuZ2VT
Y3JvbGxPZmZzZXQoKTsKK30KKwogdm9pZCBGcmFtZVZpZXc6OnNjcm9sbFBvc2l0aW9uQ2hhbmdl
ZFZpYVBsYXRmb3JtV2lkZ2V0KGNvbnN0IEludFBvaW50JiBvbGRQb3NpdGlvbiwgY29uc3QgSW50
UG9pbnQmIG5ld1Bvc2l0aW9uKQogewogICAgIHVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJTY3Jv
bGxpbmcoKTsKQEAgLTMyMjMsNyArMzIzOSw3IEBAIHZvaWQgRnJhbWVWaWV3OjpzY3JvbGxUbyhj
b25zdCBJbnRTaXplJiBuZXdPZmZzZXQpCiAgICAgU2Nyb2xsVmlldzo6c2Nyb2xsVG8obmV3T2Zm
c2V0KTsKICAgICBpZiAob2Zmc2V0ICE9IHNjcm9sbE9mZnNldCgpKQogICAgICAgICBzY3JvbGxQ
b3NpdGlvbkNoYW5nZWQob2xkUG9zaXRpb24sIHNjcm9sbFBvc2l0aW9uKCkpOwotICAgIGZyYW1l
KCkubG9hZGVyKCkuY2xpZW50KCkuZGlkQ2hhbmdlU2Nyb2xsT2Zmc2V0KCk7CisgICAgZGlkQ2hh
bmdlU2Nyb2xsT2Zmc2V0KCk7CiB9CiAKIGZsb2F0IEZyYW1lVmlldzo6YWRqdXN0U2Nyb2xsU3Rl
cEZvckZpeGVkQ29udGVudChmbG9hdCBzdGVwLCBTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRh
dGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHkpCkBAIC00MjkyLDcgKzQzMDgsNyBA
QCBib29sIEZyYW1lVmlldzo6d2hlZWxFdmVudChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIHdo
ZWVsRXZlbnQpCiAgICAgICAgIGlmIChvZmZzZXQgIT0gbmV3T2Zmc2V0KSB7CiAgICAgICAgICAg
ICBTY3JvbGxWaWV3OjpzY3JvbGxUbyhuZXdPZmZzZXQpOwogICAgICAgICAgICAgc2Nyb2xsUG9z
aXRpb25DaGFuZ2VkKG9sZFBvc2l0aW9uLCBzY3JvbGxQb3NpdGlvbigpKTsKLSAgICAgICAgICAg
IGZyYW1lKCkubG9hZGVyKCkuY2xpZW50KCkuZGlkQ2hhbmdlU2Nyb2xsT2Zmc2V0KCk7CisgICAg
ICAgICAgICBkaWRDaGFuZ2VTY3JvbGxPZmZzZXQoKTsKICAgICAgICAgfQogICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICB9CkBAIC00NjE1LDYgKzQ2MzEsOSBAQCB2b2lkIEZyYW1lVmlldzo6c2V0
RXhwb3NlZFJlY3QoRmxvYXRSZWN0IGV4cG9zZWRSZWN0KQogCiAgICAgaWYgKGF1dG8qIHZpZXcg
PSByZW5kZXJWaWV3KCkpCiAgICAgICAgIHZpZXctPmNvbXBvc2l0b3IoKS5zY2hlZHVsZUxheWVy
Rmx1c2goZmFsc2UgLyogY2FuVGhyb3R0bGUgKi8pOworCisgICAgaWYgKGF1dG8qIHBhZ2UgPSBm
cmFtZSgpLnBhZ2UoKSkKKyAgICAgICAgcGFnZS0+cGFnZU92ZXJsYXlDb250cm9sbGVyKCkuZGlk
Q2hhbmdlRXhwb3NlZFJlY3QoKTsKIH0KICAgICAKIHZvaWQgRnJhbWVWaWV3OjpzZXRWaWV3cG9y
dFNpemVGb3JDU1NWaWV3cG9ydFVuaXRzKEludFNpemUgc2l6ZSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmll
dy5oCmluZGV4IDM3NTY5NmEuLjkyYWE5YjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvRnJhbWVWaWV3LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuaApAQCAt
NTExLDYgKzUxMSw4IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgZmxvYXQgYWRqdXN0U2Nyb2xs
U3RlcEZvckZpeGVkQ29udGVudChmbG9hdCBzdGVwLCBTY3JvbGxiYXJPcmllbnRhdGlvbiwgU2Ny
b2xsR3JhbnVsYXJpdHkpIG92ZXJyaWRlOwogCisgICAgdm9pZCBkaWRDaGFuZ2VTY3JvbGxPZmZz
ZXQoKTsKKwogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgYm9vbCBzY3JvbGxDb250ZW50c0Zhc3RQ
YXRoKGNvbnN0IEludFNpemUmIHNjcm9sbERlbHRhLCBjb25zdCBJbnRSZWN0JiByZWN0VG9TY3Jv
bGwsIGNvbnN0IEludFJlY3QmIGNsaXBSZWN0KSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQg
c2Nyb2xsQ29udGVudHNTbG93UGF0aChjb25zdCBJbnRSZWN0JiB1cGRhdGVSZWN0KSBvdmVycmlk
ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL1BhZ2UuY3BwCmluZGV4IDI2YjhkMTcuLjUzOGRmZDQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdl
LmNwcApAQCAtNjAsNiArNjAsNyBAQAogI2luY2x1ZGUgIlBhZ2VDb25zb2xlQ2xpZW50LmgiCiAj
aW5jbHVkZSAiUGFnZURlYnVnZ2FibGUuaCIKICNpbmNsdWRlICJQYWdlR3JvdXAuaCIKKyNpbmNs
dWRlICJQYWdlT3ZlcmxheUNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJQYWdlVGhyb3R0bGVyLmgi
CiAjaW5jbHVkZSAiUGx1Z0luQ2xpZW50LmgiCiAjaW5jbHVkZSAiUGx1Z2luRGF0YS5oIgpAQCAt
MjAzLDYgKzIwNCw3IEBAIFBhZ2U6OlBhZ2UoUGFnZUNsaWVudHMmIHBhZ2VDbGllbnRzKQogICAg
ICwgbV92aXNpdGVkTGlua1N0b3JlKFdURjo6bW92ZShwYWdlQ2xpZW50cy52aXNpdGVkTGlua1N0
b3JlKSkKICAgICAsIG1fc2Vzc2lvbklEKFNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKQog
ICAgICwgbV9pc0Nsb3NpbmcoZmFsc2UpCisgICAgLCBtX3BhZ2VPdmVybGF5Q29udHJvbGxlcihz
dGQ6Om1ha2VfdW5pcXVlPFBhZ2VPdmVybGF5Q29udHJvbGxlcj4oKnRoaXMpKQogewogICAgIEFT
U0VSVChtX2VkaXRvckNsaWVudCk7CiAgICAgCkBAIC04MTEsNiArODEzLDggQEAgdm9pZCBQYWdl
OjpzZXREZXZpY2VTY2FsZUZhY3RvcihmbG9hdCBzY2FsZUZhY3RvcikKIAogICAgIHBhZ2VDYWNo
ZSgpLT5tYXJrUGFnZXNGb3JGdWxsU3R5bGVSZWNhbGModGhpcyk7CiAgICAgR3JhcGhpY3NDb250
ZXh0Ojp1cGRhdGVEb2N1bWVudE1hcmtlclJlc291cmNlcygpOworCisgICAgbV9wYWdlT3Zlcmxh
eUNvbnRyb2xsZXItPmRpZENoYW5nZURldmljZVNjYWxlRmFjdG9yKCk7CiB9CiAKIHZvaWQgUGFn
ZTo6c2V0VG9wQ29udGVudEluc2V0KGZsb2F0IGNvbnRlbnRJbnNldCkKQEAgLTE2MTgsNyArMTYy
Miw2IEBAIHZvaWQgUGFnZTo6c2V0U2Vzc2lvbklEKFNlc3Npb25JRCBzZXNzaW9uSUQpCiAKICAg
ICBmb3IgKGF1dG8mIHZpZXcgOiBwbHVnaW5WaWV3cygpKQogICAgICAgICB2aWV3LT5wcml2YXRl
QnJvd3NpbmdTdGF0ZUNoYW5nZWQoc2Vzc2lvbklELmlzRXBoZW1lcmFsKCkpOwotCiB9CiAKIFBh
Z2U6OlBhZ2VDbGllbnRzOjpQYWdlQ2xpZW50cygpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL1BhZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5oCmluZGV4IDJjZTUyYjku
LmEzYmE4NGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5oCkBAIC04NCw2ICs4NCw3IEBAIGNsYXNzIFBhZ2VBY3Rp
dml0eUFzc2VydGlvblRva2VuOwogY2xhc3MgUGFnZUNvbnNvbGVDbGllbnQ7CiBjbGFzcyBQYWdl
RGVidWdnYWJsZTsKIGNsYXNzIFBhZ2VHcm91cDsKK2NsYXNzIFBhZ2VPdmVybGF5Q29udHJvbGxl
cjsKIGNsYXNzIFBhZ2VUaHJvdHRsZXI7CiBjbGFzcyBQbHVnSW5DbGllbnQ7CiBjbGFzcyBQbHVn
aW5EYXRhOwpAQCAtMTY4LDYgKzE2OSw4IEBAIHB1YmxpYzoKICAgICBNYWluRnJhbWUmIG1haW5G
cmFtZSgpIHsgQVNTRVJUKG1fbWFpbkZyYW1lKTsgcmV0dXJuICptX21haW5GcmFtZTsgfQogICAg
IGNvbnN0IE1haW5GcmFtZSYgbWFpbkZyYW1lKCkgY29uc3QgeyBBU1NFUlQobV9tYWluRnJhbWUp
OyByZXR1cm4gKm1fbWFpbkZyYW1lOyB9CiAKKyAgICBQYWdlT3ZlcmxheUNvbnRyb2xsZXImIHBh
Z2VPdmVybGF5Q29udHJvbGxlcigpIHsgcmV0dXJuICptX3BhZ2VPdmVybGF5Q29udHJvbGxlcjsg
fQorCiAgICAgYm9vbCBvcGVuZWRCeURPTSgpIGNvbnN0OwogICAgIHZvaWQgc2V0T3BlbmVkQnlE
T00oKTsKIApAQCAtNTk1LDYgKzU5OCw4IEBAIHByaXZhdGU6CiAgICAgU2Vzc2lvbklEIG1fc2Vz
c2lvbklEOwogCiAgICAgYm9vbCBtX2lzQ2xvc2luZzsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxQ
YWdlT3ZlcmxheUNvbnRyb2xsZXI+IG1fcGFnZU92ZXJsYXlDb250cm9sbGVyOwogfTsKIAogaW5s
aW5lIFBhZ2VHcm91cCYgUGFnZTo6Z3JvdXAoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGFnZS9QYWdlT3ZlcmxheS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VPdmVybGF5LmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTlkOTdjCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlT3ZlcmxheS5jcHAKQEAgLTAsMCArMSwy
NTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUGFnZU92
ZXJsYXkuaCIKKworI2luY2x1ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dC5oIgorI2luY2x1ZGUgIk1haW5GcmFtZS5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNs
dWRlICJQYWdlT3ZlcmxheUNvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybU1vdXNlRXZl
bnQuaCIKKyNpbmNsdWRlICJTY3JvbGxiYXJUaGVtZS5oIgorI2luY2x1ZGUgPHd0Zi9DdXJyZW50
VGltZS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBjb25zdCBkb3VibGUgZmFk
ZUFuaW1hdGlvbkR1cmF0aW9uID0gMC4yOworc3RhdGljIGNvbnN0IGRvdWJsZSBmYWRlQW5pbWF0
aW9uRnJhbWVSYXRlID0gMzA7CisKK1Bhc3NSZWZQdHI8UGFnZU92ZXJsYXk+IFBhZ2VPdmVybGF5
OjpjcmVhdGUoQ2xpZW50JiBjbGllbnQsIE92ZXJsYXlUeXBlIG92ZXJsYXlUeXBlKQoreworICAg
IHJldHVybiBhZG9wdFJlZihuZXcgUGFnZU92ZXJsYXkoY2xpZW50LCBvdmVybGF5VHlwZSkpOwor
fQorCitQYWdlT3ZlcmxheTo6UGFnZU92ZXJsYXkoQ2xpZW50JiBjbGllbnQsIE92ZXJsYXlUeXBl
IG92ZXJsYXlUeXBlKQorICAgIDogbV9jbGllbnQoY2xpZW50KQorICAgICwgbV9wYWdlKG51bGxw
dHIpCisgICAgLCBtX2ZhZGVBbmltYXRpb25UaW1lcihSdW5Mb29wOjptYWluKCksIHRoaXMsICZQ
YWdlT3ZlcmxheTo6ZmFkZUFuaW1hdGlvblRpbWVyRmlyZWQpCisgICAgLCBtX2ZhZGVBbmltYXRp
b25TdGFydFRpbWUoMCkKKyAgICAsIG1fZmFkZUFuaW1hdGlvbkR1cmF0aW9uKGZhZGVBbmltYXRp
b25EdXJhdGlvbikKKyAgICAsIG1fZmFkZUFuaW1hdGlvblR5cGUoTm9BbmltYXRpb24pCisgICAg
LCBtX2ZyYWN0aW9uRmFkZWRJbigxKQorICAgICwgbV9vdmVybGF5VHlwZShvdmVybGF5VHlwZSkK
KyAgICAsIG1fYmFja2dyb3VuZENvbG9yKENvbG9yOjp0cmFuc3BhcmVudCkKK3sKK30KKworUGFn
ZU92ZXJsYXk6On5QYWdlT3ZlcmxheSgpCit7Cit9CisKK0ludFJlY3QgUGFnZU92ZXJsYXk6OmJv
dW5kcygpIGNvbnN0Cit7CisgICAgaWYgKCFtX292ZXJyaWRlRnJhbWUuaXNFbXB0eSgpKQorICAg
ICAgICByZXR1cm4gSW50UmVjdChJbnRQb2ludCgpLCBtX292ZXJyaWRlRnJhbWUuc2l6ZSgpKTsK
KworICAgIEZyYW1lVmlldyogZnJhbWVWaWV3ID0gbV9wYWdlLT5tYWluRnJhbWUoKS52aWV3KCk7
CisKKyAgICBpZiAoIWZyYW1lVmlldykKKyAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKKworICAg
IHN3aXRjaCAobV9vdmVybGF5VHlwZSkgeworICAgIGNhc2UgT3ZlcmxheVR5cGU6OlZpZXc6IHsK
KyAgICAgICAgaW50IHdpZHRoID0gZnJhbWVWaWV3LT53aWR0aCgpOworICAgICAgICBpbnQgaGVp
Z2h0ID0gZnJhbWVWaWV3LT5oZWlnaHQoKTsKKworICAgICAgICBpZiAoIVNjcm9sbGJhclRoZW1l
Ojp0aGVtZSgpLT51c2VzT3ZlcmxheVNjcm9sbGJhcnMoKSkgeworICAgICAgICAgICAgaWYgKGZy
YW1lVmlldy0+dmVydGljYWxTY3JvbGxiYXIoKSkKKyAgICAgICAgICAgICAgICB3aWR0aCAtPSBm
cmFtZVZpZXctPnZlcnRpY2FsU2Nyb2xsYmFyKCktPndpZHRoKCk7CisgICAgICAgICAgICBpZiAo
ZnJhbWVWaWV3LT5ob3Jpem9udGFsU2Nyb2xsYmFyKCkpCisgICAgICAgICAgICAgICAgaGVpZ2h0
IC09IGZyYW1lVmlldy0+aG9yaXpvbnRhbFNjcm9sbGJhcigpLT5oZWlnaHQoKTsKKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gSW50UmVjdCgwLCAwLCB3aWR0aCwgaGVpZ2h0KTsKKyAgICB9Cisg
ICAgY2FzZSBPdmVybGF5VHlwZTo6RG9jdW1lbnQ6CisgICAgICAgIHJldHVybiBJbnRSZWN0KElu
dFBvaW50KCksIGZyYW1lVmlldy0+Y29udGVudHNTaXplKCkpOworICAgIH07CisKKyAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gSW50UmVjdChJbnRQb2ludCgpLCBmcmFtZVZp
ZXctPmNvbnRlbnRzU2l6ZSgpKTsKK30KKworSW50UmVjdCBQYWdlT3ZlcmxheTo6ZnJhbWUoKSBj
b25zdAoreworICAgIGlmICghbV9vdmVycmlkZUZyYW1lLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0
dXJuIG1fb3ZlcnJpZGVGcmFtZTsKKworICAgIHJldHVybiBib3VuZHMoKTsKK30KKwordm9pZCBQ
YWdlT3ZlcmxheTo6c2V0RnJhbWUoSW50UmVjdCBmcmFtZSkKK3sKKyAgICBpZiAobV9vdmVycmlk
ZUZyYW1lID09IGZyYW1lKQorICAgICAgICByZXR1cm47CisKKyAgICBtX292ZXJyaWRlRnJhbWUg
PSBmcmFtZTsKKworICAgIGlmIChtX3BhZ2UpCisgICAgICAgIG1fcGFnZS0+cGFnZU92ZXJsYXlD
b250cm9sbGVyKCkuZGlkQ2hhbmdlT3ZlcmxheUZyYW1lKCp0aGlzKTsKK30KKwordm9pZCBQYWdl
T3ZlcmxheTo6c2V0QmFja2dyb3VuZENvbG9yKFJHQkEzMiBiYWNrZ3JvdW5kQ29sb3IpCit7Cisg
ICAgaWYgKG1fYmFja2dyb3VuZENvbG9yID09IGJhY2tncm91bmRDb2xvcikKKyAgICAgICAgcmV0
dXJuOworCisgICAgbV9iYWNrZ3JvdW5kQ29sb3IgPSBiYWNrZ3JvdW5kQ29sb3I7CisKKyAgICBp
ZiAobV9wYWdlKQorICAgICAgICBtX3BhZ2UtPnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLmRpZENo
YW5nZU92ZXJsYXlCYWNrZ3JvdW5kQ29sb3IoKnRoaXMpOworfQorCit2b2lkIFBhZ2VPdmVybGF5
OjpzZXRQYWdlKFBhZ2UqIHBhZ2UpCit7CisgICAgbV9jbGllbnQud2lsbE1vdmVUb1BhZ2UoKnRo
aXMsIHBhZ2UpOworICAgIG1fcGFnZSA9IHBhZ2U7CisgICAgbV9jbGllbnQuZGlkTW92ZVRvUGFn
ZSgqdGhpcywgcGFnZSk7CisKKyAgICBtX2ZhZGVBbmltYXRpb25UaW1lci5zdG9wKCk7Cit9CisK
K3ZvaWQgUGFnZU92ZXJsYXk6OnNldE5lZWRzRGlzcGxheShjb25zdCBJbnRSZWN0JiBkaXJ0eVJl
Y3QpCit7CisgICAgaWYgKCFtX3BhZ2UpCisgICAgICAgIHJldHVybjsKKworICAgIG1fcGFnZS0+
cGFnZU92ZXJsYXlDb250cm9sbGVyKCkuc2V0UGFnZU92ZXJsYXlPcGFjaXR5KCp0aGlzLCBtX2Zy
YWN0aW9uRmFkZWRJbik7CisgICAgbV9wYWdlLT5wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKS5zZXRQ
YWdlT3ZlcmxheU5lZWRzRGlzcGxheSgqdGhpcywgZGlydHlSZWN0KTsKK30KKwordm9pZCBQYWdl
T3ZlcmxheTo6c2V0TmVlZHNEaXNwbGF5KCkKK3sKKyAgICBzZXROZWVkc0Rpc3BsYXkoYm91bmRz
KCkpOworfQorCit2b2lkIFBhZ2VPdmVybGF5OjpkcmF3UmVjdChHcmFwaGljc0NvbnRleHQmIGdy
YXBoaWNzQ29udGV4dCwgY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KQoreworICAgIC8vIElmIHRo
ZSBkaXJ0eSByZWN0IGlzIG91dHNpZGUgdGhlIGJvdW5kcywgaWdub3JlIGl0LgorICAgIEludFJl
Y3QgcGFpbnRSZWN0ID0gaW50ZXJzZWN0aW9uKGRpcnR5UmVjdCwgYm91bmRzKCkpOworICAgIGlm
IChwYWludFJlY3QuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBHcmFwaGljc0Nv
bnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoZ3JhcGhpY3NDb250ZXh0KTsKKyAgICBtX2NsaWVu
dC5kcmF3UmVjdCgqdGhpcywgZ3JhcGhpY3NDb250ZXh0LCBwYWludFJlY3QpOworfQorICAgIAor
Ym9vbCBQYWdlT3ZlcmxheTo6bW91c2VFdmVudChjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIG1v
dXNlRXZlbnQpCit7CisgICAgSW50UG9pbnQgbW91c2VQb3NpdGlvbkluT3ZlcmxheUNvb3JkaW5h
dGVzKG1vdXNlRXZlbnQucG9zaXRpb24oKSk7CisKKyAgICBpZiAobV9vdmVybGF5VHlwZSA9PSBQ
YWdlT3ZlcmxheTo6T3ZlcmxheVR5cGU6OkRvY3VtZW50KQorICAgICAgICBtb3VzZVBvc2l0aW9u
SW5PdmVybGF5Q29vcmRpbmF0ZXMgPSBtX3BhZ2UtPm1haW5GcmFtZSgpLnZpZXcoKS0+cm9vdFZp
ZXdUb0NvbnRlbnRzKG1vdXNlUG9zaXRpb25Jbk92ZXJsYXlDb29yZGluYXRlcyk7CisKKyAgICAv
LyBJZ25vcmUgZXZlbnRzIG91dHNpZGUgdGhlIGJvdW5kcy4KKyAgICBpZiAoIWJvdW5kcygpLmNv
bnRhaW5zKG1vdXNlUG9zaXRpb25Jbk92ZXJsYXlDb29yZGluYXRlcykpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIHJldHVybiBtX2NsaWVudC5tb3VzZUV2ZW50KCp0aGlzLCBtb3VzZUV2
ZW50KTsKK30KKwordm9pZCBQYWdlT3ZlcmxheTo6ZGlkU2Nyb2xsRnJhbWUoRnJhbWUmIGZyYW1l
KQoreworICAgIG1fY2xpZW50LmRpZFNjcm9sbEZyYW1lKCp0aGlzLCBmcmFtZSk7Cit9CisKK2Jv
b2wgUGFnZU92ZXJsYXk6OmNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlU3RyaW5nVmFsdWVGb3JQ
b2ludChTdHJpbmcgYXR0cmlidXRlLCBGbG9hdFBvaW50IHBhcmFtZXRlciwgU3RyaW5nJiB2YWx1
ZSkKK3sKKyAgICByZXR1cm4gbV9jbGllbnQuY29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVTdHJp
bmdWYWx1ZUZvclBvaW50KCp0aGlzLCBhdHRyaWJ1dGUsIHBhcmFtZXRlciwgdmFsdWUpOworfQor
Citib29sIFBhZ2VPdmVybGF5Ojpjb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZUJvb2xWYWx1ZUZv
clBvaW50KFN0cmluZyBhdHRyaWJ1dGUsIEZsb2F0UG9pbnQgcGFyYW1ldGVyLCBib29sJiB2YWx1
ZSkKK3sKKyAgICByZXR1cm4gbV9jbGllbnQuY29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVCb29s
VmFsdWVGb3JQb2ludCgqdGhpcywgYXR0cmlidXRlLCBwYXJhbWV0ZXIsIHZhbHVlKTsKK30KKwor
VmVjdG9yPFN0cmluZz4gUGFnZU92ZXJsYXk6OmNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlTmFt
ZXMoYm9vbCBwYXJhbWV0ZXJpemVkTmFtZXMpCit7CisgICAgcmV0dXJuIG1fY2xpZW50LmNvcHlB
Y2Nlc3NpYmlsaXR5QXR0cmlidXRlTmFtZXMoKnRoaXMsIHBhcmFtZXRlcml6ZWROYW1lcyk7Cit9
CisKK3ZvaWQgUGFnZU92ZXJsYXk6OnN0YXJ0RmFkZUluQW5pbWF0aW9uKCkKK3sKKyAgICBtX2Zy
YWN0aW9uRmFkZWRJbiA9IDA7CisgICAgbV9mYWRlQW5pbWF0aW9uVHlwZSA9IEZhZGVJbkFuaW1h
dGlvbjsKKworICAgIHN0YXJ0RmFkZUFuaW1hdGlvbigpOworfQorCit2b2lkIFBhZ2VPdmVybGF5
OjpzdGFydEZhZGVPdXRBbmltYXRpb24oKQoreworICAgIG1fZnJhY3Rpb25GYWRlZEluID0gMTsK
KyAgICBtX2ZhZGVBbmltYXRpb25UeXBlID0gRmFkZU91dEFuaW1hdGlvbjsKKworICAgIHN0YXJ0
RmFkZUFuaW1hdGlvbigpOworfQorCit2b2lkIFBhZ2VPdmVybGF5OjpzdG9wRmFkZU91dEFuaW1h
dGlvbigpCit7CisgICAgbV9mcmFjdGlvbkZhZGVkSW4gPSAxLjA7CisgICAgbV9mYWRlQW5pbWF0
aW9uVGltZXIuc3RvcCgpOworfQorCit2b2lkIFBhZ2VPdmVybGF5OjpzdGFydEZhZGVBbmltYXRp
b24oKQoreworICAgIG1fZmFkZUFuaW1hdGlvblN0YXJ0VGltZSA9IGN1cnJlbnRUaW1lKCk7Cisg
ICAgbV9mYWRlQW5pbWF0aW9uVGltZXIuc3RhcnRSZXBlYXRpbmcoMSAvIGZhZGVBbmltYXRpb25G
cmFtZVJhdGUpOworfQorCit2b2lkIFBhZ2VPdmVybGF5OjpmYWRlQW5pbWF0aW9uVGltZXJGaXJl
ZCgpCit7CisgICAgZmxvYXQgYW5pbWF0aW9uUHJvZ3Jlc3MgPSAoY3VycmVudFRpbWUoKSAtIG1f
ZmFkZUFuaW1hdGlvblN0YXJ0VGltZSkgLyBtX2ZhZGVBbmltYXRpb25EdXJhdGlvbjsKKworICAg
IGlmIChhbmltYXRpb25Qcm9ncmVzcyA+PSAxLjApCisgICAgICAgIGFuaW1hdGlvblByb2dyZXNz
ID0gMS4wOworCisgICAgZG91YmxlIHNpbmUgPSBzaW4ocGlPdmVyVHdvRmxvYXQgKiBhbmltYXRp
b25Qcm9ncmVzcyk7CisgICAgZmxvYXQgZmFkZUFuaW1hdGlvblZhbHVlID0gc2luZSAqIHNpbmU7
CisKKyAgICBtX2ZyYWN0aW9uRmFkZWRJbiA9IChtX2ZhZGVBbmltYXRpb25UeXBlID09IEZhZGVJ
bkFuaW1hdGlvbikgPyBmYWRlQW5pbWF0aW9uVmFsdWUgOiAxIC0gZmFkZUFuaW1hdGlvblZhbHVl
OworICAgIG1fcGFnZS0+cGFnZU92ZXJsYXlDb250cm9sbGVyKCkuc2V0UGFnZU92ZXJsYXlPcGFj
aXR5KCp0aGlzLCBtX2ZyYWN0aW9uRmFkZWRJbik7CisKKyAgICBpZiAoYW5pbWF0aW9uUHJvZ3Jl
c3MgPT0gMS4wKSB7CisgICAgICAgIG1fZmFkZUFuaW1hdGlvblRpbWVyLnN0b3AoKTsKKworICAg
ICAgICBib29sIHdhc0ZhZGluZ091dCA9IG1fZmFkZUFuaW1hdGlvblR5cGUgPT0gRmFkZU91dEFu
aW1hdGlvbjsKKyAgICAgICAgbV9mYWRlQW5pbWF0aW9uVHlwZSA9IE5vQW5pbWF0aW9uOworCisg
ICAgICAgIC8vIElmIHRoaXMgd2FzIGEgZmFkZSBvdXQsIGdvIGFoZWFkIGFuZCB1bmluc3RhbGwg
dGhlIHBhZ2Ugb3ZlcmxheS4KKyAgICAgICAgaWYgKHdhc0ZhZGluZ091dCkKKyAgICAgICAgICAg
IG1fcGFnZS0+cGFnZU92ZXJsYXlDb250cm9sbGVyKCkudW5pbnN0YWxsUGFnZU92ZXJsYXkodGhp
cywgUGFnZU92ZXJsYXk6OkZhZGVNb2RlOjpEb05vdEZhZGUpOworICAgIH0KK30KKwordm9pZCBQ
YWdlT3ZlcmxheTo6Y2xlYXIoKQoreworICAgIG1fcGFnZS0+cGFnZU92ZXJsYXlDb250cm9sbGVy
KCkuY2xlYXJQYWdlT3ZlcmxheSgqdGhpcyk7Cit9CisKK0dyYXBoaWNzTGF5ZXImIFBhZ2VPdmVy
bGF5OjpsYXllcigpCit7CisgICAgcmV0dXJuIG1fcGFnZS0+cGFnZU92ZXJsYXlDb250cm9sbGVy
KCkubGF5ZXJGb3JPdmVybGF5KCp0aGlzKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VPdmVybGF5LmggYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL1BhZ2VPdmVybGF5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uNDFiZjdmNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZU92
ZXJsYXkuaApAQCAtMCwwICsxLDEzOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgUGFnZU92ZXJs
YXlfaAorI2RlZmluZSBQYWdlT3ZlcmxheV9oCisKKyNpbmNsdWRlICJDb2xvci5oIgorI2luY2x1
ZGUgIkZsb2F0UG9pbnQuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSA8d3RmL1Bh
c3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9S
dW5Mb29wLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworY2xhc3MgRnJhbWU7CitjbGFzcyBHcmFwaGljc0NvbnRleHQ7CitjbGFzcyBH
cmFwaGljc0xheWVyOworY2xhc3MgUGFnZTsKK2NsYXNzIFBsYXRmb3JtTW91c2VFdmVudDsKKwor
Y2xhc3MgUGFnZU92ZXJsYXkgZmluYWwgOiBwdWJsaWMgUmVmQ291bnRlZDxQYWdlT3ZlcmxheT4g
eworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFBhZ2VPdmVybGF5KTsKKyAgICBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBjbGFzcyBDbGllbnQgeworICAgIHByb3RlY3Rl
ZDoKKyAgICAgICAgdmlydHVhbCB+Q2xpZW50KCkgeyB9CisgICAgCisgICAgcHVibGljOgorICAg
ICAgICB2aXJ0dWFsIHZvaWQgcGFnZU92ZXJsYXlEZXN0cm95ZWQoUGFnZU92ZXJsYXkmKSA9IDA7
CisgICAgICAgIHZpcnR1YWwgdm9pZCB3aWxsTW92ZVRvUGFnZShQYWdlT3ZlcmxheSYsIFBhZ2Uq
KSA9IDA7CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRNb3ZlVG9QYWdlKFBhZ2VPdmVybGF5Jiwg
UGFnZSopID0gMDsKKyAgICAgICAgdmlydHVhbCB2b2lkIGRyYXdSZWN0KFBhZ2VPdmVybGF5Jiwg
R3JhcGhpY3NDb250ZXh0JiwgY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KSA9IDA7CisgICAgICAg
IHZpcnR1YWwgYm9vbCBtb3VzZUV2ZW50KFBhZ2VPdmVybGF5JiwgY29uc3QgUGxhdGZvcm1Nb3Vz
ZUV2ZW50JikgPSAwOworICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkU2Nyb2xsRnJhbWUoUGFnZU92
ZXJsYXkmLCBGcmFtZSYpIHsgfQorCisgICAgICAgIHZpcnR1YWwgYm9vbCBjb3B5QWNjZXNzaWJp
bGl0eUF0dHJpYnV0ZVN0cmluZ1ZhbHVlRm9yUG9pbnQoUGFnZU92ZXJsYXkmLCBTdHJpbmcgLyog
YXR0cmlidXRlICovLCBGbG9hdFBvaW50LCBTdHJpbmcmKSB7IHJldHVybiBmYWxzZTsgfQorICAg
ICAgICB2aXJ0dWFsIGJvb2wgY29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVCb29sVmFsdWVGb3JQ
b2ludChQYWdlT3ZlcmxheSYsIFN0cmluZyAvKiBhdHRyaWJ1dGUgKi8sIEZsb2F0UG9pbnQsIGJv
b2wmKSAgeyByZXR1cm4gZmFsc2U7IH0KKyAgICAgICAgdmlydHVhbCBWZWN0b3I8U3RyaW5nPiBj
b3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZU5hbWVzKFBhZ2VPdmVybGF5JiwgYm9vbCAvKiBwYXJh
bWV0ZXJpemVkTmFtZXMgKi8pICB7IHJldHVybiBWZWN0b3I8U3RyaW5nPigpOyB9CisgICAgfTsK
KworICAgIGVudW0gY2xhc3MgT3ZlcmxheVR5cGUgeworICAgICAgICBWaWV3LCAvLyBGaXhlZCB0
byB0aGUgdmlldyBzaXplOyBkb2VzIG5vdCBzY2FsZSBvciBzY3JvbGwgd2l0aCB0aGUgZG9jdW1l
bnQsIHJlcGFpbnRzIG9uIHNjcm9sbC4KKyAgICAgICAgRG9jdW1lbnQsIC8vIFNjYWxlcyBhbmQg
c2Nyb2xscyB3aXRoIHRoZSBkb2N1bWVudC4KKyAgICB9OworCisgICAgc3RhdGljIFBhc3NSZWZQ
dHI8UGFnZU92ZXJsYXk+IGNyZWF0ZShDbGllbnQmLCBPdmVybGF5VHlwZSA9IE92ZXJsYXlUeXBl
OjpWaWV3KTsKKyAgICB2aXJ0dWFsIH5QYWdlT3ZlcmxheSgpOworCisgICAgdm9pZCBzZXRQYWdl
KFBhZ2UqKTsKKyAgICB2b2lkIHNldE5lZWRzRGlzcGxheShjb25zdCBJbnRSZWN0JiBkaXJ0eVJl
Y3QpOworICAgIHZvaWQgc2V0TmVlZHNEaXNwbGF5KCk7CisKKyAgICB2b2lkIGRyYXdSZWN0KEdy
YXBoaWNzQ29udGV4dCYsIGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCk7CisgICAgYm9vbCBtb3Vz
ZUV2ZW50KGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYpOworICAgIHZvaWQgZGlkU2Nyb2xsRnJh
bWUoRnJhbWUmKTsKKworICAgIGJvb2wgY29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVTdHJpbmdW
YWx1ZUZvclBvaW50KFN0cmluZyBhdHRyaWJ1dGUsIEZsb2F0UG9pbnQgcGFyYW1ldGVyLCBTdHJp
bmcmIHZhbHVlKTsKKyAgICBib29sIGNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlQm9vbFZhbHVl
Rm9yUG9pbnQoU3RyaW5nIGF0dHJpYnV0ZSwgRmxvYXRQb2ludCBwYXJhbWV0ZXIsIGJvb2wmIHZh
bHVlKTsKKyAgICBWZWN0b3I8U3RyaW5nPiBjb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZU5hbWVz
KGJvb2wgcGFyYW1ldGVyaXplZE5hbWVzKTsKKyAgICAKKyAgICB2b2lkIHN0YXJ0RmFkZUluQW5p
bWF0aW9uKCk7CisgICAgdm9pZCBzdGFydEZhZGVPdXRBbmltYXRpb24oKTsKKyAgICB2b2lkIHN0
b3BGYWRlT3V0QW5pbWF0aW9uKCk7CisKKyAgICB2b2lkIGNsZWFyKCk7CisKKyAgICBDbGllbnQm
IGNsaWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fY2xpZW50OyB9CisKKyAgICBlbnVtIGNsYXNzIEZh
ZGVNb2RlIHsgRG9Ob3RGYWRlLCBGYWRlIH07CisKKyAgICBPdmVybGF5VHlwZSBvdmVybGF5VHlw
ZSgpIHsgcmV0dXJuIG1fb3ZlcmxheVR5cGU7IH0KKworICAgIEludFJlY3QgYm91bmRzKCkgY29u
c3Q7CisgICAgSW50UmVjdCBmcmFtZSgpIGNvbnN0OworICAgIHZvaWQgc2V0RnJhbWUoSW50UmVj
dCk7CisKKyAgICBSR0JBMzIgYmFja2dyb3VuZENvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9iYWNr
Z3JvdW5kQ29sb3I7IH0KKyAgICB2b2lkIHNldEJhY2tncm91bmRDb2xvcihSR0JBMzIpOworCisg
ICAgLy8gRklYTUU6IFBhZ2VPdmVybGF5IHNob3VsZCBvd24gaXRzIGxheWVyLCBpbnN0ZWFkIG9m
IFBhZ2VPdmVybGF5Q29udHJvbGxlci4KKyAgICBHcmFwaGljc0xheWVyJiBsYXllcigpOworCitw
cml2YXRlOgorICAgIGV4cGxpY2l0IFBhZ2VPdmVybGF5KENsaWVudCYsIE92ZXJsYXlUeXBlKTsK
KworICAgIHZvaWQgc3RhcnRGYWRlQW5pbWF0aW9uKCk7CisgICAgdm9pZCBmYWRlQW5pbWF0aW9u
VGltZXJGaXJlZCgpOworCisgICAgQ2xpZW50JiBtX2NsaWVudDsKKyAgICBQYWdlKiBtX3BhZ2U7
CisKKyAgICBSdW5Mb29wOjpUaW1lcjxQYWdlT3ZlcmxheT4gbV9mYWRlQW5pbWF0aW9uVGltZXI7
CisgICAgZG91YmxlIG1fZmFkZUFuaW1hdGlvblN0YXJ0VGltZTsKKyAgICBkb3VibGUgbV9mYWRl
QW5pbWF0aW9uRHVyYXRpb247CisKKyAgICBlbnVtIEZhZGVBbmltYXRpb25UeXBlIHsKKyAgICAg
ICAgTm9BbmltYXRpb24sCisgICAgICAgIEZhZGVJbkFuaW1hdGlvbiwKKyAgICAgICAgRmFkZU91
dEFuaW1hdGlvbiwKKyAgICB9OworCisgICAgRmFkZUFuaW1hdGlvblR5cGUgbV9mYWRlQW5pbWF0
aW9uVHlwZTsKKyAgICBmbG9hdCBtX2ZyYWN0aW9uRmFkZWRJbjsKKworICAgIE92ZXJsYXlUeXBl
IG1fb3ZlcmxheVR5cGU7CisgICAgSW50UmVjdCBtX292ZXJyaWRlRnJhbWU7CisKKyAgICBSR0JB
MzIgbV9iYWNrZ3JvdW5kQ29sb3I7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2Vu
ZGlmIC8vIFBhZ2VPdmVybGF5X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFn
ZU92ZXJsYXlDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZU92ZXJsYXlD
b250cm9sbGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYjBjNDU4
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlT3ZlcmxheUNvbnRy
b2xsZXIuY3BwCkBAIC0wLDAgKzEsMzUwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIlBhZ2VPdmVybGF5Q29udHJvbGxlci5oIgorCisjaW5jbHVkZSAiQ2hy
b21lLmgiCisjaW5jbHVkZSAiQ2hyb21lQ2xpZW50LmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNp
bmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNs
dWRlICJHcmFwaGljc0xheWVyLmgiCisjaW5jbHVkZSAiTWFpbkZyYW1lLmgiCisjaW5jbHVkZSAi
UGFnZS5oIgorI2luY2x1ZGUgIlBhZ2VPdmVybGF5LmgiCisjaW5jbHVkZSAiU2Nyb2xsaW5nQ29v
cmRpbmF0b3IuaCIKKyNpbmNsdWRlICJTZXR0aW5ncy5oIgorI2luY2x1ZGUgIlRpbGVkQmFja2lu
Zy5oIgorCisvLyBGSVhNRTogU29tZW9uZSBuZWVkcyB0byBjYWxsIGRpZENoYW5nZVNldHRpbmdz
KCkgaWYgd2Ugd2FudCBkeW5hbWljIHVwZGF0ZXMgb2YgbGF5ZXIgYm9yZGVyL3JlcGFpbnQgY291
bnRlciBzZXR0aW5ncy4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitQYWdlT3ZlcmxheUNvbnRy
b2xsZXI6OlBhZ2VPdmVybGF5Q29udHJvbGxlcihQYWdlJiBwYWdlKQorICAgIDogbV9pbml0aWFs
aXplZChmYWxzZSkKKyAgICAsIG1fcGFnZShwYWdlKQoreworfQorCit2b2lkIFBhZ2VPdmVybGF5
Q29udHJvbGxlcjo6Y3JlYXRlUm9vdExheWVyc0lmTmVlZGVkKCkKK3sKKyAgICBpZiAobV9pbml0
aWFsaXplZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9pbml0aWFsaXplZCA9IHRydWU7CisK
KyAgICBBU1NFUlQoIW1fZG9jdW1lbnRPdmVybGF5Um9vdExheWVyKTsKKyAgICBBU1NFUlQoIW1f
dmlld092ZXJsYXlSb290TGF5ZXIpOworCisgICAgbV9kb2N1bWVudE92ZXJsYXlSb290TGF5ZXIg
PSBHcmFwaGljc0xheWVyOjpjcmVhdGUobV9wYWdlLmNocm9tZSgpLmNsaWVudCgpLmdyYXBoaWNz
TGF5ZXJGYWN0b3J5KCksICp0aGlzKTsKKyAgICBtX3ZpZXdPdmVybGF5Um9vdExheWVyID0gR3Jh
cGhpY3NMYXllcjo6Y3JlYXRlKG1fcGFnZS5jaHJvbWUoKS5jbGllbnQoKS5ncmFwaGljc0xheWVy
RmFjdG9yeSgpLCAqdGhpcyk7CisjaWZuZGVmIE5ERUJVRworICAgIG1fZG9jdW1lbnRPdmVybGF5
Um9vdExheWVyLT5zZXROYW1lKCJQYWdlIE92ZXJsYXkgY29udGFpbmVyIChkb2N1bWVudC1yZWxh
dGl2ZSkiKTsKKyAgICBtX3ZpZXdPdmVybGF5Um9vdExheWVyLT5zZXROYW1lKCJQYWdlIE92ZXJs
YXkgY29udGFpbmVyICh2aWV3LXJlbGF0aXZlKSIpOworI2VuZGlmCit9CisKK0dyYXBoaWNzTGF5
ZXImIFBhZ2VPdmVybGF5Q29udHJvbGxlcjo6ZG9jdW1lbnRPdmVybGF5Um9vdExheWVyKCkKK3sK
KyAgICBjcmVhdGVSb290TGF5ZXJzSWZOZWVkZWQoKTsKKyAgICByZXR1cm4gKm1fZG9jdW1lbnRP
dmVybGF5Um9vdExheWVyOworfQorCitHcmFwaGljc0xheWVyJiBQYWdlT3ZlcmxheUNvbnRyb2xs
ZXI6OnZpZXdPdmVybGF5Um9vdExheWVyKCkKK3sKKyAgICBjcmVhdGVSb290TGF5ZXJzSWZOZWVk
ZWQoKTsKKyAgICByZXR1cm4gKm1fdmlld092ZXJsYXlSb290TGF5ZXI7Cit9CisKK3N0YXRpYyB2
b2lkIHVwZGF0ZU92ZXJsYXlHZW9tZXRyeShQYWdlT3ZlcmxheSYgb3ZlcmxheSwgR3JhcGhpY3NM
YXllciYgZ3JhcGhpY3NMYXllcikKK3sKKyAgICBJbnRSZWN0IG92ZXJsYXlGcmFtZSA9IG92ZXJs
YXkuZnJhbWUoKTsKKworICAgIGlmIChvdmVybGF5RnJhbWUubG9jYXRpb24oKSA9PSBncmFwaGlj
c0xheWVyLnBvc2l0aW9uKCkgJiYgb3ZlcmxheUZyYW1lLnNpemUoKSA9PSBncmFwaGljc0xheWVy
LnNpemUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZ3JhcGhpY3NMYXllci5zZXRQb3NpdGlv
bihvdmVybGF5RnJhbWUubG9jYXRpb24oKSk7CisgICAgZ3JhcGhpY3NMYXllci5zZXRTaXplKG92
ZXJsYXlGcmFtZS5zaXplKCkpOworfQorCit2b2lkIFBhZ2VPdmVybGF5Q29udHJvbGxlcjo6aW5z
dGFsbFBhZ2VPdmVybGF5KFBhc3NSZWZQdHI8UGFnZU92ZXJsYXk+IHBhZ2VPdmVybGF5LCBQYWdl
T3ZlcmxheTo6RmFkZU1vZGUgZmFkZU1vZGUpCit7CisgICAgY3JlYXRlUm9vdExheWVyc0lmTmVl
ZGVkKCk7CisKKyAgICBSZWZQdHI8UGFnZU92ZXJsYXk+IG92ZXJsYXkgPSBwYWdlT3ZlcmxheTsK
KworICAgIGlmIChtX3BhZ2VPdmVybGF5cy5jb250YWlucyhvdmVybGF5KSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgbV9wYWdlT3ZlcmxheXMuYXBwZW5kKG92ZXJsYXkpOworICAgIG92ZXJsYXkt
PnNldFBhZ2UoJm1fcGFnZSk7CisKKyAgICBpZiAoZmFkZU1vZGUgPT0gUGFnZU92ZXJsYXk6OkZh
ZGVNb2RlOjpGYWRlKQorICAgICAgICBvdmVybGF5LT5zdGFydEZhZGVJbkFuaW1hdGlvbigpOwor
CisgICAgc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzTGF5ZXI+IGxheWVyID0gR3JhcGhpY3NMYXll
cjo6Y3JlYXRlKG1fcGFnZS5jaHJvbWUoKS5jbGllbnQoKS5ncmFwaGljc0xheWVyRmFjdG9yeSgp
LCAqdGhpcyk7CisgICAgbGF5ZXItPnNldEFuY2hvclBvaW50KEZsb2F0UG9pbnQzRCgpKTsKKyAg
ICBsYXllci0+c2V0QmFja2dyb3VuZENvbG9yKG92ZXJsYXktPmJhY2tncm91bmRDb2xvcigpKTsK
KyAgICB1cGRhdGVPdmVybGF5R2VvbWV0cnkoKm92ZXJsYXksICpsYXllcik7CisjaWZuZGVmIE5E
RUJVRworICAgIGxheWVyLT5zZXROYW1lKCJQYWdlIE92ZXJsYXkgY29udGVudCIpOworI2VuZGlm
CisKKyAgICB1cGRhdGVTZXR0aW5nc0ZvckxheWVyKCpsYXllcik7CisKKyAgICBzd2l0Y2ggKG92
ZXJsYXktPm92ZXJsYXlUeXBlKCkpIHsKKyAgICBjYXNlIFBhZ2VPdmVybGF5OjpPdmVybGF5VHlw
ZTo6VmlldzoKKyAgICAgICAgbV92aWV3T3ZlcmxheVJvb3RMYXllci0+YWRkQ2hpbGQobGF5ZXIu
Z2V0KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBhZ2VPdmVybGF5OjpPdmVybGF5VHlw
ZTo6RG9jdW1lbnQ6CisgICAgICAgIG1fZG9jdW1lbnRPdmVybGF5Um9vdExheWVyLT5hZGRDaGls
ZChsYXllci5nZXQoKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIG1fb3ZlcmxheUdy
YXBoaWNzTGF5ZXJzLnNldChvdmVybGF5LmdldCgpLCBXVEY6Om1vdmUobGF5ZXIpKTsKKworICAg
IHVwZGF0ZUZvcmNlU3luY2hyb25vdXNTY3JvbGxMYXllclBvc2l0aW9uVXBkYXRlcygpOworCisg
ICAgaWYgKEZyYW1lVmlldyogZnJhbWVWaWV3ID0gbV9wYWdlLm1haW5GcmFtZSgpLnZpZXcoKSkK
KyAgICAgICAgZnJhbWVWaWV3LT5lbnRlckNvbXBvc2l0aW5nTW9kZSgpOworfQorCit2b2lkIFBh
Z2VPdmVybGF5Q29udHJvbGxlcjo6dW5pbnN0YWxsUGFnZU92ZXJsYXkoUGFnZU92ZXJsYXkqIG92
ZXJsYXksIFBhZ2VPdmVybGF5OjpGYWRlTW9kZSBmYWRlTW9kZSkKK3sKKyAgICBpZiAoZmFkZU1v
ZGUgPT0gUGFnZU92ZXJsYXk6OkZhZGVNb2RlOjpGYWRlKSB7CisgICAgICAgIG92ZXJsYXktPnN0
YXJ0RmFkZU91dEFuaW1hdGlvbigpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgb3Zl
cmxheS0+c2V0UGFnZShudWxscHRyKTsKKworICAgIG1fb3ZlcmxheUdyYXBoaWNzTGF5ZXJzLnRh
a2Uob3ZlcmxheSktPnJlbW92ZUZyb21QYXJlbnQoKTsKKworICAgIHNpemVfdCBvdmVybGF5SW5k
ZXggPSBtX3BhZ2VPdmVybGF5cy5maW5kKG92ZXJsYXkpOworICAgIEFTU0VSVChvdmVybGF5SW5k
ZXggIT0gbm90Rm91bmQpOworICAgIG1fcGFnZU92ZXJsYXlzLnJlbW92ZShvdmVybGF5SW5kZXgp
OworCisgICAgdXBkYXRlRm9yY2VTeW5jaHJvbm91c1Njcm9sbExheWVyUG9zaXRpb25VcGRhdGVz
KCk7Cit9CisKK3ZvaWQgUGFnZU92ZXJsYXlDb250cm9sbGVyOjp1cGRhdGVGb3JjZVN5bmNocm9u
b3VzU2Nyb2xsTGF5ZXJQb3NpdGlvblVwZGF0ZXMoKQoreworI2lmIEVOQUJMRShBU1lOQ19TQ1JP
TExJTkcpCisgICAgYm9vbCBmb3JjZVN5bmNocm9ub3VzU2Nyb2xsTGF5ZXJQb3NpdGlvblVwZGF0
ZXMgPSBmYWxzZTsKKworICAgIGZvciAoYXV0byYgb3ZlcmxheSA6IG1fcGFnZU92ZXJsYXlzKSB7
CisgICAgICAgIGlmIChvdmVybGF5LT5vdmVybGF5VHlwZSgpID09IFBhZ2VPdmVybGF5OjpPdmVy
bGF5VHlwZTo6VmlldykKKyAgICAgICAgICAgIGZvcmNlU3luY2hyb25vdXNTY3JvbGxMYXllclBv
c2l0aW9uVXBkYXRlcyA9IHRydWU7CisgICAgfQorCisgICAgaWYgKFNjcm9sbGluZ0Nvb3JkaW5h
dG9yKiBzY3JvbGxpbmdDb29yZGluYXRvciA9IG1fcGFnZS5zY3JvbGxpbmdDb29yZGluYXRvcigp
KQorICAgICAgICBzY3JvbGxpbmdDb29yZGluYXRvci0+c2V0Rm9yY2VTeW5jaHJvbm91c1Njcm9s
bExheWVyUG9zaXRpb25VcGRhdGVzKGZvcmNlU3luY2hyb25vdXNTY3JvbGxMYXllclBvc2l0aW9u
VXBkYXRlcyk7CisjZW5kaWYKK30KKwordm9pZCBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6OnNldFBh
Z2VPdmVybGF5TmVlZHNEaXNwbGF5KFBhZ2VPdmVybGF5JiBvdmVybGF5LCBjb25zdCBXZWJDb3Jl
OjpJbnRSZWN0JiBkaXJ0eVJlY3QpCit7CisgICAgQVNTRVJUKG1fcGFnZU92ZXJsYXlzLmNvbnRh
aW5zKCZvdmVybGF5KSk7CisgICAgR3JhcGhpY3NMYXllciYgZ3JhcGhpY3NMYXllciA9ICptX292
ZXJsYXlHcmFwaGljc0xheWVycy5nZXQoJm92ZXJsYXkpOworCisgICAgaWYgKCFncmFwaGljc0xh
eWVyLmRyYXdzQ29udGVudCgpKSB7CisgICAgICAgIGdyYXBoaWNzTGF5ZXIuc2V0RHJhd3NDb250
ZW50KHRydWUpOworICAgICAgICB1cGRhdGVPdmVybGF5R2VvbWV0cnkob3ZlcmxheSwgZ3JhcGhp
Y3NMYXllcik7CisgICAgfQorCisgICAgZ3JhcGhpY3NMYXllci5zZXROZWVkc0Rpc3BsYXlJblJl
Y3QoZGlydHlSZWN0KTsKK30KKwordm9pZCBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6OnNldFBhZ2VP
dmVybGF5T3BhY2l0eShQYWdlT3ZlcmxheSYgb3ZlcmxheSwgZmxvYXQgb3BhY2l0eSkKK3sKKyAg
ICBBU1NFUlQobV9wYWdlT3ZlcmxheXMuY29udGFpbnMoJm92ZXJsYXkpKTsKKyAgICBtX292ZXJs
YXlHcmFwaGljc0xheWVycy5nZXQoJm92ZXJsYXkpLT5zZXRPcGFjaXR5KG9wYWNpdHkpOworfQor
Cit2b2lkIFBhZ2VPdmVybGF5Q29udHJvbGxlcjo6Y2xlYXJQYWdlT3ZlcmxheShQYWdlT3Zlcmxh
eSYgb3ZlcmxheSkKK3sKKyAgICBBU1NFUlQobV9wYWdlT3ZlcmxheXMuY29udGFpbnMoJm92ZXJs
YXkpKTsKKyAgICBtX292ZXJsYXlHcmFwaGljc0xheWVycy5nZXQoJm92ZXJsYXkpLT5zZXREcmF3
c0NvbnRlbnQoZmFsc2UpOworfQorCitHcmFwaGljc0xheWVyJiBQYWdlT3ZlcmxheUNvbnRyb2xs
ZXI6OmxheWVyRm9yT3ZlcmxheShQYWdlT3ZlcmxheSYgb3ZlcmxheSkgY29uc3QKK3sKKyAgICBB
U1NFUlQobV9wYWdlT3ZlcmxheXMuY29udGFpbnMoJm92ZXJsYXkpKTsKKyAgICByZXR1cm4gKm1f
b3ZlcmxheUdyYXBoaWNzTGF5ZXJzLmdldCgmb3ZlcmxheSk7Cit9CisKK3ZvaWQgUGFnZU92ZXJs
YXlDb250cm9sbGVyOjp3aWxsQXR0YWNoUm9vdExheWVyKCkKK3sKKyAgICBmb3IgKGF1dG8mIG92
ZXJsYXlBbmRMYXllciA6IG1fb3ZlcmxheUdyYXBoaWNzTGF5ZXJzKQorICAgICAgICB1cGRhdGVP
dmVybGF5R2VvbWV0cnkoKm92ZXJsYXlBbmRMYXllci5rZXksICpvdmVybGF5QW5kTGF5ZXIudmFs
dWUpOworfQorCit2b2lkIFBhZ2VPdmVybGF5Q29udHJvbGxlcjo6ZGlkQ2hhbmdlVmlld1NpemUo
KQoreworICAgIGZvciAoYXV0byYgb3ZlcmxheUFuZExheWVyIDogbV9vdmVybGF5R3JhcGhpY3NM
YXllcnMpIHsKKyAgICAgICAgaWYgKG92ZXJsYXlBbmRMYXllci5rZXktPm92ZXJsYXlUeXBlKCkg
PT0gUGFnZU92ZXJsYXk6Ok92ZXJsYXlUeXBlOjpWaWV3KQorICAgICAgICAgICAgdXBkYXRlT3Zl
cmxheUdlb21ldHJ5KCpvdmVybGF5QW5kTGF5ZXIua2V5LCAqb3ZlcmxheUFuZExheWVyLnZhbHVl
KTsKKyAgICB9Cit9CisKK3ZvaWQgUGFnZU92ZXJsYXlDb250cm9sbGVyOjpkaWRDaGFuZ2VEb2N1
bWVudFNpemUoKQoreworICAgIGZvciAoYXV0byYgb3ZlcmxheUFuZExheWVyIDogbV9vdmVybGF5
R3JhcGhpY3NMYXllcnMpIHsKKyAgICAgICAgaWYgKG92ZXJsYXlBbmRMYXllci5rZXktPm92ZXJs
YXlUeXBlKCkgPT0gUGFnZU92ZXJsYXk6Ok92ZXJsYXlUeXBlOjpEb2N1bWVudCkKKyAgICAgICAg
ICAgIHVwZGF0ZU92ZXJsYXlHZW9tZXRyeSgqb3ZlcmxheUFuZExheWVyLmtleSwgKm92ZXJsYXlB
bmRMYXllci52YWx1ZSk7CisgICAgfQorfQorCit2b2lkIFBhZ2VPdmVybGF5Q29udHJvbGxlcjo6
ZGlkQ2hhbmdlU2V0dGluZ3MoKQoreworICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYXBwbHkgdGhl
c2Ugc2V0dGluZ3MgdG8gYWxsIG92ZXJsYXkgc3VibGF5ZXJzIHJlY3Vyc2l2ZWx5LgorICAgIGZv
ciAoYXV0byYgZ3JhcGhpY3NMYXllciA6IG1fb3ZlcmxheUdyYXBoaWNzTGF5ZXJzLnZhbHVlcygp
KQorICAgICAgICB1cGRhdGVTZXR0aW5nc0ZvckxheWVyKCpncmFwaGljc0xheWVyKTsKK30KKwor
dm9pZCBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6OmRpZENoYW5nZURldmljZVNjYWxlRmFjdG9yKCkK
K3sKKyAgICBjcmVhdGVSb290TGF5ZXJzSWZOZWVkZWQoKTsKKworICAgIG1fZG9jdW1lbnRPdmVy
bGF5Um9vdExheWVyLT5ub3RlRGV2aWNlT3JQYWdlU2NhbGVGYWN0b3JDaGFuZ2VkSW5jbHVkaW5n
RGVzY2VuZGFudHMoKTsKKyAgICBtX3ZpZXdPdmVybGF5Um9vdExheWVyLT5ub3RlRGV2aWNlT3JQ
YWdlU2NhbGVGYWN0b3JDaGFuZ2VkSW5jbHVkaW5nRGVzY2VuZGFudHMoKTsKKworICAgIGZvciAo
YXV0byYgZ3JhcGhpY3NMYXllciA6IG1fb3ZlcmxheUdyYXBoaWNzTGF5ZXJzLnZhbHVlcygpKQor
ICAgICAgICBncmFwaGljc0xheWVyLT5zZXROZWVkc0Rpc3BsYXkoKTsKK30KKwordm9pZCBQYWdl
T3ZlcmxheUNvbnRyb2xsZXI6OmRpZENoYW5nZUV4cG9zZWRSZWN0KCkKK3sKKyAgICBtX3BhZ2Uu
Y2hyb21lKCkuY2xpZW50KCkuc2NoZWR1bGVDb21wb3NpdGluZ0xheWVyRmx1c2goKTsKK30KKwor
dm9pZCBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6OmRpZFNjcm9sbEZyYW1lKEZyYW1lJiBmcmFtZSkK
K3sKKyAgICBmb3IgKGF1dG8mIG92ZXJsYXlBbmRMYXllciA6IG1fb3ZlcmxheUdyYXBoaWNzTGF5
ZXJzKSB7CisgICAgICAgIGlmIChvdmVybGF5QW5kTGF5ZXIua2V5LT5vdmVybGF5VHlwZSgpID09
IFBhZ2VPdmVybGF5OjpPdmVybGF5VHlwZTo6VmlldyB8fCAhZnJhbWUuaXNNYWluRnJhbWUoKSkK
KyAgICAgICAgICAgIG92ZXJsYXlBbmRMYXllci52YWx1ZS0+c2V0TmVlZHNEaXNwbGF5KCk7Cisg
ICAgICAgIG92ZXJsYXlBbmRMYXllci5rZXktPmRpZFNjcm9sbEZyYW1lKGZyYW1lKTsKKyAgICB9
Cit9CisKK3ZvaWQgUGFnZU92ZXJsYXlDb250cm9sbGVyOjp1cGRhdGVTZXR0aW5nc0ZvckxheWVy
KEdyYXBoaWNzTGF5ZXImIGxheWVyKQoreworICAgIFNldHRpbmdzJiBzZXR0aW5ncyA9IG1fcGFn
ZS5zZXR0aW5ncygpOworICAgIGxheWVyLnNldEFjY2VsZXJhdGVzRHJhd2luZyhzZXR0aW5ncy5h
Y2NlbGVyYXRlZERyYXdpbmdFbmFibGVkKCkpOworICAgIGxheWVyLnNldFNob3dEZWJ1Z0JvcmRl
cihzZXR0aW5ncy5zaG93RGVidWdCb3JkZXJzKCkpOworICAgIGxheWVyLnNldFNob3dSZXBhaW50
Q291bnRlcihzZXR0aW5ncy5zaG93UmVwYWludENvdW50ZXIoKSk7Cit9CisKK2Jvb2wgUGFnZU92
ZXJsYXlDb250cm9sbGVyOjpoYW5kbGVNb3VzZUV2ZW50KGNvbnN0IFBsYXRmb3JtTW91c2VFdmVu
dCYgbW91c2VFdmVudCkKK3sKKyAgICBpZiAoIW1fcGFnZU92ZXJsYXlzLnNpemUoKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgZm9yIChhdXRvIGl0ID0gbV9wYWdlT3ZlcmxheXMucmJl
Z2luKCksIGVuZCA9IG1fcGFnZU92ZXJsYXlzLnJlbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7Cisg
ICAgICAgIGlmICgoKml0KS0+bW91c2VFdmVudChtb3VzZUV2ZW50KSkKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBQYWdlT3Zl
cmxheUNvbnRyb2xsZXI6OmNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlU3RyaW5nVmFsdWVGb3JQ
b2ludChTdHJpbmcgYXR0cmlidXRlLCBGbG9hdFBvaW50IHBhcmFtZXRlciwgU3RyaW5nJiB2YWx1
ZSkKK3sKKyAgICBpZiAoIW1fcGFnZU92ZXJsYXlzLnNpemUoKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgZm9yIChhdXRvIGl0ID0gbV9wYWdlT3ZlcmxheXMucmJlZ2luKCksIGVuZCA9
IG1fcGFnZU92ZXJsYXlzLnJlbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIGlmICgo
Kml0KS0+Y29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVTdHJpbmdWYWx1ZUZvclBvaW50KGF0dHJp
YnV0ZSwgcGFyYW1ldGVyLCB2YWx1ZSkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUGFnZU92ZXJsYXlDb250cm9sbGVyOjpj
b3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZUJvb2xWYWx1ZUZvclBvaW50KFN0cmluZyBhdHRyaWJ1
dGUsIEZsb2F0UG9pbnQgcGFyYW1ldGVyLCBib29sJiB2YWx1ZSkKK3sKKyAgICBpZiAoIW1fcGFn
ZU92ZXJsYXlzLnNpemUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgZm9yIChhdXRv
IGl0ID0gbV9wYWdlT3ZlcmxheXMucmJlZ2luKCksIGVuZCA9IG1fcGFnZU92ZXJsYXlzLnJlbmQo
KTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIGlmICgoKml0KS0+Y29weUFjY2Vzc2liaWxp
dHlBdHRyaWJ1dGVCb29sVmFsdWVGb3JQb2ludChhdHRyaWJ1dGUsIHBhcmFtZXRlciwgdmFsdWUp
KQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIHJldHVybiBmYWxz
ZTsKK30KKworVmVjdG9yPFN0cmluZz4gUGFnZU92ZXJsYXlDb250cm9sbGVyOjpjb3B5QWNjZXNz
aWJpbGl0eUF0dHJpYnV0ZXNOYW1lcyhib29sIHBhcmFtZXRlcml6ZWROYW1lcykKK3sKKyAgICBp
ZiAoIW1fcGFnZU92ZXJsYXlzLnNpemUoKSkKKyAgICAgICAgcmV0dXJuIFZlY3RvcjxTdHJpbmc+
KCk7CisKKyAgICBmb3IgKGF1dG8gaXQgPSBtX3BhZ2VPdmVybGF5cy5yYmVnaW4oKSwgZW5kID0g
bV9wYWdlT3ZlcmxheXMucmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgVmVjdG9y
PFN0cmluZz4gbmFtZXMgPSAoKml0KS0+Y29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVOYW1lcyhw
YXJhbWV0ZXJpemVkTmFtZXMpOworICAgICAgICBpZiAoIW5hbWVzLmlzRW1wdHkoKSkKKyAgICAg
ICAgICAgIHJldHVybiBuYW1lczsKKyAgICB9CisKKyAgICByZXR1cm4gVmVjdG9yPFN0cmluZz4o
KTsKK30KKwordm9pZCBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6OnBhaW50Q29udGVudHMoY29uc3Qg
V2ViQ29yZTo6R3JhcGhpY3NMYXllciogZ3JhcGhpY3NMYXllciwgV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0JiBncmFwaGljc0NvbnRleHQsIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJQYWludGluZ1Bo
YXNlLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGNsaXBSZWN0KQoreworICAgIGZvciAoYXV0
byBpdCA9IG1fb3ZlcmxheUdyYXBoaWNzTGF5ZXJzLmJlZ2luKCksIGVuZCA9IG1fb3ZlcmxheUdy
YXBoaWNzTGF5ZXJzLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgaWYgKGl0LT52
YWx1ZS5nZXQoKSAhPSBncmFwaGljc0xheWVyKQorICAgICAgICAgICAgY29udGludWU7CisKKyAg
ICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGdyYXBoaWNzQ29udGV4
dCk7CisgICAgICAgIGdyYXBoaWNzQ29udGV4dC5jbGlwKGNsaXBSZWN0KTsKKyAgICAgICAgaXQt
PmtleS0+ZHJhd1JlY3QoZ3JhcGhpY3NDb250ZXh0LCBlbmNsb3NpbmdJbnRSZWN0KGNsaXBSZWN0
KSk7CisKKyAgICAgICAgcmV0dXJuOworICAgIH0KK30KKworZmxvYXQgUGFnZU92ZXJsYXlDb250
cm9sbGVyOjpkZXZpY2VTY2FsZUZhY3RvcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcGFnZS5k
ZXZpY2VTY2FsZUZhY3RvcigpOworfQorCit2b2lkIFBhZ2VPdmVybGF5Q29udHJvbGxlcjo6bm90
aWZ5Rmx1c2hSZXF1aXJlZChjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKikKK3sKKyAgICBt
X3BhZ2UuY2hyb21lKCkuY2xpZW50KCkuc2NoZWR1bGVDb21wb3NpdGluZ0xheWVyRmx1c2goKTsK
K30KKwordm9pZCBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6OmRpZENoYW5nZU92ZXJsYXlGcmFtZShQ
YWdlT3ZlcmxheSYgb3ZlcmxheSkKK3sKKyAgICBBU1NFUlQobV9wYWdlT3ZlcmxheXMuY29udGFp
bnMoJm92ZXJsYXkpKTsKKyAgICB1cGRhdGVPdmVybGF5R2VvbWV0cnkob3ZlcmxheSwgKm1fb3Zl
cmxheUdyYXBoaWNzTGF5ZXJzLmdldCgmb3ZlcmxheSkpOworfQorCit2b2lkIFBhZ2VPdmVybGF5
Q29udHJvbGxlcjo6ZGlkQ2hhbmdlT3ZlcmxheUJhY2tncm91bmRDb2xvcihQYWdlT3ZlcmxheSYg
b3ZlcmxheSkKK3sKKyAgICBBU1NFUlQobV9wYWdlT3ZlcmxheXMuY29udGFpbnMoJm92ZXJsYXkp
KTsKKyAgICBtX292ZXJsYXlHcmFwaGljc0xheWVycy5nZXQoJm92ZXJsYXkpLT5zZXRCYWNrZ3Jv
dW5kQ29sb3Iob3ZlcmxheS5iYWNrZ3JvdW5kQ29sb3IoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlT3ZlcmxheUNvbnRy
b2xsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZU92ZXJsYXlDb250cm9sbGVyLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmU5Yzg5ZAotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZU92ZXJsYXlDb250cm9sbGVyLmgKQEAgLTAsMCAr
MSwxMDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFBhZ2VPdmVybGF5Q29udHJvbGxlcl9oCisj
ZGVmaW5lIFBhZ2VPdmVybGF5Q29udHJvbGxlcl9oCisKKyNpbmNsdWRlICJHcmFwaGljc0xheWVy
Q2xpZW50LmgiCisjaW5jbHVkZSAiUGFnZU92ZXJsYXkuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1h
cC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRnJhbWU7CitjbGFzcyBQYWdlOworY2xhc3Mg
UGxhdGZvcm1Nb3VzZUV2ZW50OworCitjbGFzcyBQYWdlT3ZlcmxheUNvbnRyb2xsZXIgOiBwdWJs
aWMgR3JhcGhpY3NMYXllckNsaWVudCB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUGFnZU92
ZXJsYXlDb250cm9sbGVyKTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoK
KyAgICBQYWdlT3ZlcmxheUNvbnRyb2xsZXIoUGFnZSYpOworCisgICAgR3JhcGhpY3NMYXllciYg
ZG9jdW1lbnRPdmVybGF5Um9vdExheWVyKCk7CisgICAgR3JhcGhpY3NMYXllciYgdmlld092ZXJs
YXlSb290TGF5ZXIoKTsKKworICAgIHZvaWQgaW5zdGFsbFBhZ2VPdmVybGF5KFBhc3NSZWZQdHI8
UGFnZU92ZXJsYXk+LCBQYWdlT3ZlcmxheTo6RmFkZU1vZGUpOworICAgIHZvaWQgdW5pbnN0YWxs
UGFnZU92ZXJsYXkoUGFnZU92ZXJsYXkqLCBQYWdlT3ZlcmxheTo6RmFkZU1vZGUpOworCisgICAg
dm9pZCBzZXRQYWdlT3ZlcmxheU5lZWRzRGlzcGxheShQYWdlT3ZlcmxheSYsIGNvbnN0IEludFJl
Y3QmKTsKKyAgICB2b2lkIHNldFBhZ2VPdmVybGF5T3BhY2l0eShQYWdlT3ZlcmxheSYsIGZsb2F0
KTsKKyAgICB2b2lkIGNsZWFyUGFnZU92ZXJsYXkoUGFnZU92ZXJsYXkmKTsKKyAgICBHcmFwaGlj
c0xheWVyJiBsYXllckZvck92ZXJsYXkoUGFnZU92ZXJsYXkmKSBjb25zdDsKKworICAgIHZvaWQg
d2lsbEF0dGFjaFJvb3RMYXllcigpOworCisgICAgdm9pZCBkaWRDaGFuZ2VWaWV3U2l6ZSgpOwor
ICAgIHZvaWQgZGlkQ2hhbmdlRG9jdW1lbnRTaXplKCk7CisgICAgdm9pZCBkaWRDaGFuZ2VTZXR0
aW5ncygpOworICAgIHZvaWQgZGlkQ2hhbmdlRGV2aWNlU2NhbGVGYWN0b3IoKTsKKyAgICB2b2lk
IGRpZENoYW5nZUV4cG9zZWRSZWN0KCk7CisgICAgdm9pZCBkaWRTY3JvbGxGcmFtZShGcmFtZSYp
OworCisgICAgdm9pZCBkaWRDaGFuZ2VPdmVybGF5RnJhbWUoUGFnZU92ZXJsYXkmKTsKKyAgICB2
b2lkIGRpZENoYW5nZU92ZXJsYXlCYWNrZ3JvdW5kQ29sb3IoUGFnZU92ZXJsYXkmKTsKKworICAg
IGludCBvdmVybGF5Q291bnQoKSBjb25zdCB7IHJldHVybiBtX292ZXJsYXlHcmFwaGljc0xheWVy
cy5zaXplKCk7IH0KKworICAgIGJvb2wgaGFuZGxlTW91c2VFdmVudChjb25zdCBQbGF0Zm9ybU1v
dXNlRXZlbnQmKTsKKworICAgIGJvb2wgY29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVTdHJpbmdW
YWx1ZUZvclBvaW50KFN0cmluZyBhdHRyaWJ1dGUsIEZsb2F0UG9pbnQsIFN0cmluZyYgdmFsdWUp
OworICAgIGJvb2wgY29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVCb29sVmFsdWVGb3JQb2ludChT
dHJpbmcgYXR0cmlidXRlLCBGbG9hdFBvaW50LCBib29sJiB2YWx1ZSk7CisgICAgVmVjdG9yPFN0
cmluZz4gY29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVzTmFtZXMoYm9vbCBwYXJhbWV0ZXJpemVk
TmFtZXMpOworCitwcml2YXRlOgorICAgIHZvaWQgY3JlYXRlUm9vdExheWVyc0lmTmVlZGVkKCk7
CisKKyAgICB2b2lkIHVwZGF0ZVNldHRpbmdzRm9yTGF5ZXIoR3JhcGhpY3NMYXllciYpOworICAg
IHZvaWQgdXBkYXRlRm9yY2VTeW5jaHJvbm91c1Njcm9sbExheWVyUG9zaXRpb25VcGRhdGVzKCk7
CisKKyAgICAvLyBHcmFwaGljc0xheWVyQ2xpZW50CisgICAgdmlydHVhbCB2b2lkIG5vdGlmeUZs
dXNoUmVxdWlyZWQoY29uc3QgR3JhcGhpY3NMYXllciopIG92ZXJyaWRlOworICAgIHZpcnR1YWwg
dm9pZCBwYWludENvbnRlbnRzKGNvbnN0IEdyYXBoaWNzTGF5ZXIqLCBHcmFwaGljc0NvbnRleHQm
LCBHcmFwaGljc0xheWVyUGFpbnRpbmdQaGFzZSwgY29uc3QgRmxvYXRSZWN0JiBjbGlwUmVjdCkg
b3ZlcnJpZGU7CisgICAgdmlydHVhbCBmbG9hdCBkZXZpY2VTY2FsZUZhY3RvcigpIGNvbnN0IG92
ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBzaG91bGRTa2lwTGF5ZXJJbkR1bXAoY29uc3QgR3Jh
cGhpY3NMYXllciopIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KKworICAgIHN0ZDo6
dW5pcXVlX3B0cjxHcmFwaGljc0xheWVyPiBtX2RvY3VtZW50T3ZlcmxheVJvb3RMYXllcjsKKyAg
ICBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NMYXllcj4gbV92aWV3T3ZlcmxheVJvb3RMYXllcjsK
KyAgICBib29sIG1faW5pdGlhbGl6ZWQ7CisKKyAgICBIYXNoTWFwPFBhZ2VPdmVybGF5Kiwgc3Rk
Ojp1bmlxdWVfcHRyPEdyYXBoaWNzTGF5ZXI+PiBtX292ZXJsYXlHcmFwaGljc0xheWVyczsKKyAg
ICBWZWN0b3I8UmVmUHRyPFBhZ2VPdmVybGF5Pj4gbV9wYWdlT3ZlcmxheXM7CisgICAgUGFnZSYg
bV9wYWdlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBQYWdlT3Zl
cmxheUNvbnRyb2xsZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NMYXllckNsaWVudC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NMYXllckNsaWVudC5oCmluZGV4IDhhNDgzMzMuLjI1OTIyY2IgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXJDbGll
bnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVy
Q2xpZW50LmgKQEAgLTI2LDYgKzI2LDggQEAKICNpZm5kZWYgR3JhcGhpY3NMYXllckNsaWVudF9o
CiAjZGVmaW5lIEdyYXBoaWNzTGF5ZXJDbGllbnRfaAogCisjaW5jbHVkZSA8d3RmL0ZvcndhcmQu
aD4KKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBGbG9hdFBvaW50OwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKaW5kZXggZDlkNTkzMy4uMTYzNzRkYyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCkBAIC0yMzIyLDcgKzIzMjIs
NyBAQCB2b2lkIFJlbmRlckxheWVyOjpzY3JvbGxUbyhpbnQgeCwgaW50IHkpCiAKICAgICBJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZFNjcm9sbExheWVyKCZmcmFtZSk7CiAgICAgaWYgKHNj
cm9sbHNPdmVyZmxvdygpKQotICAgICAgICBmcmFtZS5sb2FkZXIoKS5jbGllbnQoKS5kaWRDaGFu
Z2VTY3JvbGxPZmZzZXQoKTsKKyAgICAgICAgdmlldy5mcmFtZVZpZXcoKS5kaWRDaGFuZ2VTY3Jv
bGxPZmZzZXQoKTsKIAogICAgIHZpZXcuZnJhbWVWaWV3KCkucmVzdW1lVmlzaWJsZUltYWdlQW5p
bWF0aW9uc0luY2x1ZGluZ1N1YmZyYW1lcygpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAppbmRleCA0YmU0NjkxLi4xZjU5YjBh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3Np
dG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3Np
dG9yLmNwcApAQCAtNDUsNiArNDUsNyBAQAogI2luY2x1ZGUgIk1haW5GcmFtZS5oIgogI2luY2x1
ZGUgIk5vZGVMaXN0LmgiCiAjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlBhZ2VPdmVybGF5
Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIlJlbmRlckVtYmVkZGVkT2JqZWN0LmgiCiAjaW5jbHVk
ZSAiUmVuZGVyRmxvd1RocmVhZC5oIgogI2luY2x1ZGUgIlJlbmRlckZ1bGxTY3JlZW4uaCIKQEAg
LTY0Myw3ICs2NDQsOCBAQCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6dXBkYXRlQ29tcG9z
aXRpbmdMYXllcnNUaW1lckZpcmVkKFRpbWVyPFJlbmRlckxheWVyQwogCiBib29sIFJlbmRlckxh
eWVyQ29tcG9zaXRvcjo6aGFzQW55QWRkaXRpb25hbENvbXBvc2l0ZWRMYXllcnMoY29uc3QgUmVu
ZGVyTGF5ZXImIHJvb3RMYXllcikgY29uc3QKIHsKLSAgICByZXR1cm4gbV9jb21wb3NpdGVkTGF5
ZXJDb3VudCA+IChyb290TGF5ZXIuaXNDb21wb3NpdGVkKCkgPyAxIDogMCk7CisgICAgaW50IGxh
eWVyQ291bnQgPSBtX2NvbXBvc2l0ZWRMYXllckNvdW50ICsgbV9yZW5kZXJWaWV3LmZyYW1lKCku
cGFnZSgpLT5wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKS5vdmVybGF5Q291bnQoKTsKKyAgICByZXR1
cm4gbGF5ZXJDb3VudCA+IChyb290TGF5ZXIuaXNDb21wb3NpdGVkKCkgPyAxIDogMCk7CiB9CiAK
IHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpjYW5jZWxDb21wb3NpdGluZ0xheWVyVXBkYXRl
KCkKQEAgLTY2NSw3ICs2NjcsNyBAQCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6dXBkYXRl
Q29tcG9zaXRpbmdMYXllcnMoQ29tcG9zaXRpbmdVcGRhdGVUeXBlIHVwZGF0ZQogICAgIGlmICht
X3JlbmRlclZpZXcubmVlZHNMYXlvdXQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKG1f
Zm9yY2VDb21wb3NpdGluZ01vZGUgJiYgIW1fY29tcG9zaXRpbmcpCisgICAgaWYgKChtX2ZvcmNl
Q29tcG9zaXRpbmdNb2RlIHx8IG1fcmVuZGVyVmlldy5mcmFtZSgpLnBhZ2UoKS0+cGFnZU92ZXJs
YXlDb250cm9sbGVyKCkub3ZlcmxheUNvdW50KCkpICYmICFtX2NvbXBvc2l0aW5nKQogICAgICAg
ICBlbmFibGVDb21wb3NpdGluZ01vZGUodHJ1ZSk7CiAKICAgICBpZiAoIW1fcmVldmFsdWF0ZUNv
bXBvc2l0aW5nQWZ0ZXJMYXlvdXQgJiYgIW1fY29tcG9zaXRpbmcpCkBAIC03NDgsNyArNzUwLDcg
QEAgdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJzKENv
bXBvc2l0aW5nVXBkYXRlVHlwZSB1cGRhdGUKIAogICAgICAgICAvLyBIb3N0IHRoZSBkb2N1bWVu
dCBsYXllciBpbiB0aGUgUmVuZGVyVmlldydzIHJvb3QgbGF5ZXIuCiAgICAgICAgIGlmIChpc0Z1
bGxVcGRhdGUpIHsKLSAgICAgICAgICAgIGFwcGVuZE92ZXJsYXlMYXllcnMoY2hpbGRMaXN0KTsK
KyAgICAgICAgICAgIGFwcGVuZERvY3VtZW50T3ZlcmxheUxheWVycyhjaGlsZExpc3QpOwogICAg
ICAgICAgICAgLy8gRXZlbiB3aGVuIGNoaWxkTGlzdCBpcyBlbXB0eSwgZG9uJ3QgZHJvcCBvdXQg
b2YgY29tcG9zaXRpbmcgbW9kZSBpZiB0aGVyZSBhcmUKICAgICAgICAgICAgIC8vIGNvbXBvc2l0
ZWQgbGF5ZXJzIHRoYXQgd2UgZGlkbid0IGhpdCBpbiBvdXIgdHJhdmVyc2FsIChlLmcuIGJlY2F1
c2Ugb2YgdmlzaWJpbGl0eTpoaWRkZW4pLgogICAgICAgICAgICAgaWYgKGNoaWxkTGlzdC5pc0Vt
cHR5KCkgJiYgIWhhc0FueUFkZGl0aW9uYWxDb21wb3NpdGVkTGF5ZXJzKCp1cGRhdGVSb290KSkK
QEAgLTc4NCwxNSArNzg2LDE4IEBAIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVD
b21wb3NpdGluZ0xheWVycyhDb21wb3NpdGluZ1VwZGF0ZVR5cGUgdXBkYXRlCiAgICAgSW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uOjpsYXllclRyZWVEaWRDaGFuZ2UocGFnZSgpKTsKIH0KIAotdm9p
ZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmFwcGVuZE92ZXJsYXlMYXllcnMoVmVjdG9yPEdyYXBo
aWNzTGF5ZXIqPiYgY2hpbGRMaXN0KQordm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmFwcGVu
ZERvY3VtZW50T3ZlcmxheUxheWVycyhWZWN0b3I8R3JhcGhpY3NMYXllcio+JiBjaGlsZExpc3Qp
CiB7CiAgICAgRnJhbWUmIGZyYW1lID0gbV9yZW5kZXJWaWV3LmZyYW1lVmlldygpLmZyYW1lKCk7
CisgICAgaWYgKCFmcmFtZS5pc01haW5GcmFtZSgpKQorICAgICAgICByZXR1cm47CisKICAgICBQ
YWdlKiBwYWdlID0gZnJhbWUucGFnZSgpOwogICAgIGlmICghcGFnZSkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgaWYgKEdyYXBoaWNzTGF5ZXIqIG92ZXJsYXlMYXllciA9IHBhZ2UtPmNocm9tZSgp
LmNsaWVudCgpLmRvY3VtZW50T3ZlcmxheUxheWVyRm9yRnJhbWUoZnJhbWUpKQotICAgICAgICBj
aGlsZExpc3QuYXBwZW5kKG92ZXJsYXlMYXllcik7CisgICAgcGFnZS0+cGFnZU92ZXJsYXlDb250
cm9sbGVyKCkud2lsbEF0dGFjaFJvb3RMYXllcigpOworICAgIGNoaWxkTGlzdC5hcHBlbmQoJnBh
Z2UtPnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLmRvY3VtZW50T3ZlcmxheVJvb3RMYXllcigpKTsK
IH0KIAogdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmxheWVyQmVjYW1lTm9uQ29tcG9zaXRl
ZChjb25zdCBSZW5kZXJMYXllciYgbGF5ZXIpCkBAIC0zMzY2LDYgKzMzNzEsMTAgQEAgdm9pZCBS
ZW5kZXJMYXllckNvbXBvc2l0b3I6OmF0dGFjaFJvb3RMYXllcihSb290TGF5ZXJBdHRhY2htZW50
IGF0dGFjaG1lbnQpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgICAgICBwYWdl
LT5jaHJvbWUoKS5jbGllbnQoKS5hdHRhY2hSb290R3JhcGhpY3NMYXllcigmZnJhbWUsIHJvb3RH
cmFwaGljc0xheWVyKCkpOworICAgICAgICAgICAgaWYgKGZyYW1lLmlzTWFpbkZyYW1lKCkpIHsK
KyAgICAgICAgICAgICAgICBwYWdlLT5wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKS53aWxsQXR0YWNo
Um9vdExheWVyKCk7CisgICAgICAgICAgICAgICAgcGFnZS0+Y2hyb21lKCkuY2xpZW50KCkuYXR0
YWNoVmlld092ZXJsYXlHcmFwaGljc0xheWVyKCZmcmFtZSwgJnBhZ2UtPnBhZ2VPdmVybGF5Q29u
dHJvbGxlcigpLnZpZXdPdmVybGF5Um9vdExheWVyKCkpOworICAgICAgICAgICAgfQogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBSb290TGF5ZXJBdHRhY2hlZFZp
YUVuY2xvc2luZ0ZyYW1lOiB7CkBAIC0zNDEwLDYgKzM0MTksOCBAQCB2b2lkIFJlbmRlckxheWVy
Q29tcG9zaXRvcjo6ZGV0YWNoUm9vdExheWVyKCkKICAgICAgICAgICAgIHJldHVybjsKIAogICAg
ICAgICBwYWdlLT5jaHJvbWUoKS5jbGllbnQoKS5hdHRhY2hSb290R3JhcGhpY3NMYXllcigmZnJh
bWUsIDApOworICAgICAgICBpZiAoZnJhbWUuaXNNYWluRnJhbWUoKSkKKyAgICAgICAgICAgIHBh
Z2UtPmNocm9tZSgpLmNsaWVudCgpLmF0dGFjaFZpZXdPdmVybGF5R3JhcGhpY3NMYXllcigmZnJh
bWUsIDApOwogICAgIH0KICAgICBicmVhazsKICAgICBjYXNlIFJvb3RMYXllclVuYXR0YWNoZWQ6
CkBAIC0zNDQ0LDggKzM0NTUsMTEgQEAgdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJvb3RM
YXllckF0dGFjaG1lbnRDaGFuZ2VkKCkKICAgICBpZiAoUmVuZGVyTGF5ZXJCYWNraW5nKiBiYWNr
aW5nID0gbGF5ZXIgPyBsYXllci0+YmFja2luZygpIDogbnVsbHB0cikKICAgICAgICAgYmFja2lu
Zy0+dXBkYXRlRHJhd3NDb250ZW50KCk7CiAKLSAgICBpZiAoR3JhcGhpY3NMYXllciogb3Zlcmxh
eUxheWVyID0gcGFnZS0+Y2hyb21lKCkuY2xpZW50KCkuZG9jdW1lbnRPdmVybGF5TGF5ZXJGb3JG
cmFtZShmcmFtZSkpCi0gICAgICAgIG1fcm9vdENvbnRlbnRMYXllci0+YWRkQ2hpbGQob3Zlcmxh
eUxheWVyKTsKKyAgICBpZiAoIWZyYW1lLmlzTWFpbkZyYW1lKCkpCisgICAgICAgIHJldHVybjsK
KworICAgIHBhZ2UtPnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLndpbGxBdHRhY2hSb290TGF5ZXIo
KTsKKyAgICBtX3Jvb3RDb250ZW50TGF5ZXItPmFkZENoaWxkKCZwYWdlLT5wYWdlT3ZlcmxheUNv
bnRyb2xsZXIoKS5kb2N1bWVudE92ZXJsYXlSb290TGF5ZXIoKSk7CiB9CiAKIC8vIElGcmFtZXMg
YXJlIHNwZWNpYWwsIGJlY2F1c2Ugd2UgaG9vayBjb21wb3NpdGluZyBsYXllcnMgdG9nZXRoZXIg
YWNyb3NzIGlmcmFtZSBib3VuZGFyaWVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgKaW5kZXggN2JkMjQwYS4uZDlhODc0YiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuaApAQCAtMzYy
LDcgKzM2Miw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBsYXllckhhczNEQ29udGVudChjb25zdCBS
ZW5kZXJMYXllciYpIGNvbnN0OwogICAgIGJvb2wgaXNSdW5uaW5nQWNjZWxlcmF0ZWRUcmFuc2Zv
cm1BbmltYXRpb24oUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCYpIGNvbnN0OwogCi0gICAgdm9pZCBh
cHBlbmRPdmVybGF5TGF5ZXJzKFZlY3RvcjxHcmFwaGljc0xheWVyKj4mKTsKKyAgICB2b2lkIGFw
cGVuZERvY3VtZW50T3ZlcmxheUxheWVycyhWZWN0b3I8R3JhcGhpY3NMYXllcio+Jik7CiAgICAg
Ym9vbCBoYXNBbnlBZGRpdGlvbmFsQ29tcG9zaXRlZExheWVycyhjb25zdCBSZW5kZXJMYXllciYg
cm9vdExheWVyKSBjb25zdDsKIAogICAgIHZvaWQgZW5zdXJlUm9vdExheWVyKCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaCBi
L1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oCmluZGV4
IDFkNDgyODEuLjcyNzBjZTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVT
dXBwb3J0L1dlYkNocm9tZUNsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVT
dXBwb3J0L1dlYkNocm9tZUNsaWVudC5oCkBAIC0xNjMsNiArMTYzLDcgQEAgcHVibGljOgogICAg
IHZpcnR1YWwgYm9vbCBzaG91bGRQYWludEVudGlyZUNvbnRlbnRzKCkgY29uc3Qgb3ZlcnJpZGU7
CiAKICAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoUm9vdEdyYXBoaWNzTGF5ZXIoV2ViQ29yZTo6RnJh
bWUqLCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lk
IGF0dGFjaFZpZXdPdmVybGF5R3JhcGhpY3NMYXllcihXZWJDb3JlOjpGcmFtZSosIFdlYkNvcmU6
OkdyYXBoaWNzTGF5ZXIqKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNPbmVT
aG90RHJhd2luZ1N5bmNocm9uaXphdGlvbigpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBz
Y2hlZHVsZUNvbXBvc2l0aW5nTGF5ZXJGbHVzaCgpIG92ZXJyaWRlOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQubW0gYi9Tb3Vy
Y2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQubW0KaW5kZXggZTFk
YzEwZC4uNDYwNjMxMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBv
cnQvV2ViQ2hyb21lQ2xpZW50Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBw
b3J0L1dlYkNocm9tZUNsaWVudC5tbQpAQCAtOTI0LDYgKzkyNCwxMSBAQCB2b2lkIFdlYkNocm9t
ZUNsaWVudDo6YXR0YWNoUm9vdEdyYXBoaWNzTGF5ZXIoRnJhbWUqIGZyYW1lLCBHcmFwaGljc0xh
eWVyKiBncmFwaAogICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiB9CiAKK3ZvaWQgV2Vi
Q2hyb21lQ2xpZW50OjphdHRhY2hWaWV3T3ZlcmxheUdyYXBoaWNzTGF5ZXIoRnJhbWUqLCBHcmFw
aGljc0xheWVyKikKK3sKKyAgICAvLyBGSVhNRTogSWYgd2Ugd2FudCB2aWV3LXJlbGF0aXZlIHBh
Z2Ugb3ZlcmxheXMgaW4gV2ViS2l0MSwgdGhpcyB3b3VsZCBiZSB0aGUgcGxhY2UgdG8gaG9vayB0
aGVtIHVwLgorfQorCiB2b2lkIFdlYkNocm9tZUNsaWVudDo6c2V0TmVlZHNPbmVTaG90RHJhd2lu
Z1N5bmNocm9uaXphdGlvbigpCiB7CiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV2ViS2l0
Mi9DTWFrZUxpc3RzLnR4dAppbmRleCA2YmRjNTlkLi40YTQ2NTQ1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9DTWFrZUxpc3Rz
LnR4dApAQCAtNTQzLDggKzU0Myw2IEBAIHNldChXZWJLaXQyX1NPVVJDRVMKICAgICBXZWJQcm9j
ZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuY3BwCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0xh
eWVyVHJlZUhvc3QuY3BwCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1BhZ2VCYW5uZXIuY3BwCi0g
ICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1BhZ2VPdmVybGF5LmNwcAotICAgIFdlYlByb2Nlc3MvV2Vi
UGFnZS9QYWdlT3ZlcmxheUNvbnRyb2xsZXIuY3BwCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1Rh
cEhpZ2hsaWdodENvbnRyb2xsZXIuY3BwCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkJhY2tG
b3J3YXJkTGlzdFByb3h5LmNwcAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJDb250ZXh0TWVu
dS5jcHAKQEAgLTU1NSw2ICs1NTMsNyBAQCBzZXQoV2ViS2l0Ml9TT1VSQ0VTCiAgICAgV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYk9wZW5QYW5lbFJlc3VsdExpc3RlbmVyLmNwcAogICAgIFdlYlByb2Nl
c3MvV2ViUGFnZS9XZWJQYWdlLmNwcAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlR3Jv
dXBQcm94eS5jcHAKKyAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZU92ZXJsYXkuY3BwCiAg
ICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1Zpc2l0ZWRMaW5rVGFibGVDb250cm9sbGVyLmNwcAogICAg
IFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJVbmRvU3RlcC5jcHAKICkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJL
aXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBkMGE5MmY5Li4yZDdl
YzNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKKysrIGIvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCkBAIC0zMDcsOCArMzA3LDYgQEAKIAkJMUE5MEMxRUUxMjY0RkQ1MDAwM0U0NEQ0IC8q
IFdlYkZpbmRPcHRpb25zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAxQTkwQzFFRDEyNjRGRDUwMDAzRTQ0RDQgLyogV2ViRmluZE9wdGlvbnMuaCAqLzsg
fTsKIAkJMUE5MEMxRjQxMjY0RkQ3MTAwM0U0NEQ0IC8qIEZpbmRDb250cm9sbGVyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTkwQzFGMjEyNjRGRDcx
MDAzRTQ0RDQgLyogRmluZENvbnRyb2xsZXIuaCAqLzsgfTsKIAkJMUE5MEMxRjUxMjY0RkQ3MTAw
M0U0NEQ0IC8qIEZpbmRDb250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDFBOTBDMUYzMTI2NEZENzEwMDNFNDRENCAvKiBGaW5kQ29udHJv
bGxlci5jcHAgKi87IH07Ci0JCTFBOTBDMjM3MTI2NTA3MTcwMDNFNDRENCAvKiBQYWdlT3Zlcmxh
eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE5MEMy
MzUxMjY1MDcxNzAwM0U0NEQ0IC8qIFBhZ2VPdmVybGF5LmggKi87IH07Ci0JCTFBOTBDMjM4MTI2
NTA3MTcwMDNFNDRENCAvKiBQYWdlT3ZlcmxheS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTkwQzIzNjEyNjUwNzE3MDAzRTQ0RDQgLyogUGFnZU92
ZXJsYXkuY3BwICovOyB9OwogCQkxQTkxMDA3MTEyNjY3NUM0MDAxODQyRjUgLyogRmluZEluZGlj
YXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE5
MTAwNkYxMjY2NzVDMzAwMTg0MkY1IC8qIEZpbmRJbmRpY2F0b3IuaCAqLzsgfTsKIAkJMUE5MTAw
NzIxMjY2NzVDNDAwMTg0MkY1IC8qIEZpbmRJbmRpY2F0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE5MTAwNzAxMjY2NzVDNDAwMTg0MkY1IC8q
IEZpbmRJbmRpY2F0b3IuY3BwICovOyB9OwogCQkxQTkyREMxMTEyRjhCQTQ2MDAxN0FGNjUgLyog
TGF5ZXJUcmVlQ29udGV4dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMUE5MkRDMTAxMkY4QkE0NjAwMTdBRjY1IC8qIExheWVyVHJlZUNvbnRleHQuaCAq
LzsgfTsKQEAgLTU2OCw4ICs1NjYsNiBAQAogCQkyOUQ1NURGMjE2MUJGOUYxMDAzMUEyRTMgLyog
V2ViUGFnZUdyb3VwUHJveHlNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMjlENTVERjAxNjFCRjlGMTAwMzFBMkUzIC8qIFdlYlBhZ2VHcm91
cFByb3h5TWVzc2FnZXMuaCAqLzsgfTsKIAkJMkQxMjVDNUUxODU3RUEwNTAwM0JBM0NCIC8qIFZp
ZXdHZXN0dXJlQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMkQxMjVDNUMxODU3RUEwNTAwM0JBM0NCIC8qIFZpZXdHZXN0dXJlQ29udHJv
bGxlci5oICovOyB9OwogCQkyRDEyNUM1RjE4NTdFQTA1MDAzQkEzQ0IgLyogVmlld0dlc3R1cmVD
b250cm9sbGVyTWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMkQxMjVDNUQxODU3RUEwNTAwM0JBM0NCIC8qIFZpZXdHZXN0dXJlQ29udHJvbGxlck1h
Yy5tbSAqLzsgfTsKLQkJMkQxNDBFQUYxOEYzN0JFMDAwNUU3NUEwIC8qIFBhZ2VPdmVybGF5Q29u
dHJvbGxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAyRDE0MEVBRDE4RjM3QkUwMDA1RTc1QTAgLyogUGFnZU92ZXJsYXlDb250cm9sbGVyLmNwcCAq
LzsgfTsKLQkJMkQxNDBFQjAxOEYzN0JFMDAwNUU3NUEwIC8qIFBhZ2VPdmVybGF5Q29udHJvbGxl
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkQxNDBF
QUUxOEYzN0JFMDAwNUU3NUEwIC8qIFBhZ2VPdmVybGF5Q29udHJvbGxlci5oICovOyB9OwogCQky
RDFCNUQ1RDE4NTg2OUM4MDA2QzY1OTYgLyogVmlld0dlc3R1cmVDb250cm9sbGVyTWVzc2FnZVJl
Y2VpdmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDJEMUI1RDVCMTg1ODY5QzgwMDZDNjU5NiAvKiBWaWV3R2VzdHVyZUNvbnRyb2xsZXJNZXNzYWdl
UmVjZWl2ZXIuY3BwICovOyB9OwogCQkyRDFCNUQ1RTE4NTg2OUM4MDA2QzY1OTYgLyogVmlld0dl
c3R1cmVDb250cm9sbGVyTWVzc2FnZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDJEMUI1RDVDMTg1ODY5QzgwMDZDNjU5NiAvKiBWaWV3R2VzdHVyZUNv
bnRyb2xsZXJNZXNzYWdlcy5oICovOyB9OwogCQkyRDI4RjNFNDE4ODVDQ0MxMDA0QjlFQUUgLyog
V2ViQ2hyb21lQ2xpZW50SU9TLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMkQyOEYzRTAxODg1Q0NDMTAwNEI5RUFFIC8qIFdlYkNocm9tZUNsaWVudElP
Uy5tbSAqLzsgfTsKQEAgLTU4Niw2ICs1ODIsOCBAQAogCQkyRDQyOUJGRDE3MjFFMkM3MDBFQzY4
MUYgLyogUERGUGx1Z2luUGFzc3dvcmRGaWVsZC5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJENDI5QkZCMTcyMUUyQkEwMEVDNjgxRiAvKiBQREZQbHVn
aW5QYXNzd29yZEZpZWxkLm1tICovOyB9OwogCQkyRDQ3QjU2QzE4MTA3MTRFMDAzQTNBRUUgLyog
UmVtb3RlTGF5ZXJCYWNraW5nU3RvcmUubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAyRDQ3QjU2QTE4MTA3MTRFMDAzQTNBRUUgLyogUmVtb3RlTGF5ZXJC
YWNraW5nU3RvcmUubW0gKi87IH07CiAJCTJENDdCNTZEMTgxMDcxNEUwMDNBM0FFRSAvKiBSZW1v
dGVMYXllckJhY2tpbmdTdG9yZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMkQ0N0I1NkIxODEwNzE0RTAwM0EzQUVFIC8qIFJlbW90ZUxheWVyQmFja2lu
Z1N0b3JlLmggKi87IH07CisJCTJENUM5RDA1MTlDODFEOEYwMEIzQzVDMSAvKiBXZWJQYWdlT3Zl
cmxheS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAy
RDVDOUQwMzE5QzgxRDhGMDBCM0M1QzEgLyogV2ViUGFnZU92ZXJsYXkuY3BwICovOyB9OworCQky
RDVDOUQwNjE5QzgxRDhGMDBCM0M1QzEgLyogV2ViUGFnZU92ZXJsYXkuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJENUM5RDA0MTlDODFEOEYwMEIzQzVD
MSAvKiBXZWJQYWdlT3ZlcmxheS5oICovOyB9OwogCQkyRDZBQjU0MTE5MkIxQzRBMDAzQTlGRDEg
LyogV0tQREZQYWdlTnVtYmVySW5kaWNhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAyRDZBQjUzRjE5MkIxQzRBMDAzQTlGRDEgLyogV0tQREZQYWdl
TnVtYmVySW5kaWNhdG9yLmggKi87IH07CiAJCTJENkFCNTQyMTkyQjFDNEEwMDNBOUZEMSAvKiBX
S1BERlBhZ2VOdW1iZXJJbmRpY2F0b3IubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAyRDZBQjU0MDE5MkIxQzRBMDAzQTlGRDEgLyogV0tQREZQYWdlTnVt
YmVySW5kaWNhdG9yLm1tICovOyB9OwogCQkyRDZCMzcxQjE4QTk2N0FEMDA0MkFFODAgLyogX1dL
VGh1bWJuYWlsVmlldy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMkQ2QjM3MTkxOEE5NjdBRDAwNDJBRTgwIC8qIF9XS1RodW1ibmFpbFZpZXcuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMjI3MSw4ICsy
MjY5LDYgQEAKIAkJMUE5MEMxRUQxMjY0RkQ1MDAwM0U0NEQ0IC8qIFdlYkZpbmRPcHRpb25zLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkZpbmRPcHRpb25zLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBOTBDMUYyMTI2NEZENzEwMDNFNDRENCAvKiBGaW5k
Q29udHJvbGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGaW5kQ29udHJv
bGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQTkwQzFGMzEyNjRGRDcxMDAz
RTQ0RDQgLyogRmluZENvbnRyb2xsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gRmluZENvbnRyb2xsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQkxQTkwQzIzNTEyNjUwNzE3MDAzRTQ0RDQgLyogUGFnZU92ZXJsYXkuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gUGFnZU92ZXJsYXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJMUE5MEMyMzYxMjY1MDcxNzAwM0U0NEQ0IC8qIFBhZ2VPdmVybGF5LmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBhZ2VPdmVybGF5LmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUE5MTAwNkYxMjY2NzVDMzAwMTg0MkY1IC8qIEZpbmRJ
bmRpY2F0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmluZEluZGljYXRv
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQTkxMDA3MDEyNjY3NUM0MDAxODQy
RjUgLyogRmluZEluZGljYXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBGaW5kSW5kaWNhdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUE5
MkRDMTAxMkY4QkE0NjAwMTdBRjY1IC8qIExheWVyVHJlZUNvbnRleHQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gTGF5ZXJUcmVlQ29udGV4dC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtMjU1OCw4ICsyNTU0LDYgQEAKIAkJMjlENTVERjAxNjFCRjlGMTAwMzFB
MkUzIC8qIFdlYlBhZ2VHcm91cFByb3h5TWVzc2FnZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gV2ViUGFnZUdyb3VwUHJveHlNZXNzYWdlcy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkyRDEyNUM1QzE4NTdFQTA1MDAzQkEzQ0IgLyogVmlld0dlc3R1cmVDb250
cm9sbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZpZXdHZXN0dXJlQ29u
dHJvbGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyRDEyNUM1RDE4NTdFQTA1
MDAzQkEzQ0IgLyogVmlld0dlc3R1cmVDb250cm9sbGVyTWFjLm1tICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAub2JqY3BwOyBwYXRoID0gVmlld0dlc3R1cmVDb250cm9sbGVyTWFjLm1tOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkyRDE0MEVBRDE4RjM3QkUwMDA1RTc1QTAgLyogUGFn
ZU92ZXJsYXlDb250cm9sbGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFBhZ2VPdmVybGF5Q29udHJvbGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCTJEMTQwRUFFMThGMzdCRTAwMDVFNzVBMCAvKiBQYWdlT3ZlcmxheUNvbnRyb2xsZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGFnZU92ZXJsYXlDb250cm9sbGVyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJEMUI1RDVBMTg1ODY1OTkwMDZDNjU5NiAv
KiBWaWV3R2VzdHVyZUNvbnRyb2xsZXIubWVzc2FnZXMuaW4gKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gVmlld0dlc3R1cmVDb250
cm9sbGVyLm1lc3NhZ2VzLmluOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyRDFCNUQ1
QjE4NTg2OUM4MDA2QzY1OTYgLyogVmlld0dlc3R1cmVDb250cm9sbGVyTWVzc2FnZVJlY2VpdmVy
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFZpZXdHZXN0dXJlQ29u
dHJvbGxlck1lc3NhZ2VSZWNlaXZlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTJEMUI1RDVDMTg1ODY5QzgwMDZDNjU5NiAvKiBWaWV3R2VzdHVyZUNvbnRyb2xsZXJNZXNzYWdl
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWaWV3R2VzdHVyZUNvbnRyb2xs
ZXJNZXNzYWdlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjU4Miw2ICsyNTc2
LDggQEAKIAkJMkQ0MjlCRkIxNzIxRTJCQTAwRUM2ODFGIC8qIFBERlBsdWdpblBhc3N3b3JkRmll
bGQubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBQREZQbHVnaW5Q
YXNzd29yZEZpZWxkLm1tOyBwYXRoID0gUERGL1BERlBsdWdpblBhc3N3b3JkRmllbGQubW07IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJENDdCNTZBMTgxMDcxNEUwMDNBM0FFRSAvKiBS
ZW1vdGVMYXllckJhY2tpbmdTdG9yZS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNw
cDsgcGF0aCA9IFJlbW90ZUxheWVyQmFja2luZ1N0b3JlLm1tOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkyRDQ3QjU2QjE4MTA3MTRFMDAzQTNBRUUgLyogUmVtb3RlTGF5ZXJCYWNraW5n
U3RvcmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVtb3RlTGF5ZXJCYWNr
aW5nU3RvcmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMkQ1QzlEMDMxOUM4MUQ4
RjAwQjNDNUMxIC8qIFdlYlBhZ2VPdmVybGF5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFdlYlBhZ2VPdmVybGF5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMkQ1QzlEMDQxOUM4MUQ4RjAwQjNDNUMxIC8qIFdlYlBhZ2VPdmVybGF5LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlBhZ2VPdmVybGF5Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTJENkFCNTNGMTkyQjFDNEEwMDNBOUZEMSAvKiBXS1BERlBhZ2VO
dW1iZXJJbmRpY2F0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV0tQREZQ
YWdlTnVtYmVySW5kaWNhdG9yLmg7IHBhdGggPSBpb3MvV0tQREZQYWdlTnVtYmVySW5kaWNhdG9y
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJENkFCNTQwMTkyQjFDNEEwMDNBOUZE
MSAvKiBXS1BERlBhZ2VOdW1iZXJJbmRpY2F0b3IubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5vYmpjcHA7IG5hbWUgPSBXS1BERlBhZ2VOdW1iZXJJbmRpY2F0b3IubW07IHBhdGggPSBpb3Mv
V0tQREZQYWdlTnVtYmVySW5kaWNhdG9yLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkyRDZCMzcxOTE4QTk2N0FEMDA0MkFFODAgLyogX1dLVGh1bWJuYWlsVmlldy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBfV0tUaHVtYm5haWxWaWV3Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC01NzAxLDEwICs1Njk3LDggQEAKIAkJCQkxQTkwQzFGMjEyNjRG
RDcxMDAzRTQ0RDQgLyogRmluZENvbnRyb2xsZXIuaCAqLywKIAkJCQk3QzM4NzQzMzE3MkY1NjE1
MDAxQkQ4OEEgLyogUGFnZUJhbm5lci5jcHAgKi8sCiAJCQkJN0NGNDdGRjkxNzI3NUM1NzAwOEFD
QjkxIC8qIFBhZ2VCYW5uZXIuaCAqLywKLQkJCQkxQTkwQzIzNjEyNjUwNzE3MDAzRTQ0RDQgLyog
UGFnZU92ZXJsYXkuY3BwICovLAotCQkJCTFBOTBDMjM1MTI2NTA3MTcwMDNFNDRENCAvKiBQYWdl
T3ZlcmxheS5oICovLAotCQkJCTJEMTQwRUFEMThGMzdCRTAwMDVFNzVBMCAvKiBQYWdlT3Zlcmxh
eUNvbnRyb2xsZXIuY3BwICovLAotCQkJCTJEMTQwRUFFMThGMzdCRTAwMDVFNzVBMCAvKiBQYWdl
T3ZlcmxheUNvbnRyb2xsZXIuaCAqLywKKwkJCQkyRDVDOUQwMzE5QzgxRDhGMDBCM0M1QzEgLyog
V2ViUGFnZU92ZXJsYXkuY3BwICovLAorCQkJCTJENUM5RDA0MTlDODFEOEYwMEIzQzVDMSAvKiBX
ZWJQYWdlT3ZlcmxheS5oICovLAogCQkJCTUxOTJENTcxMTk2MUZBMkYwMENEMTlBQSAvKiBTZXJ2
aWNlc092ZXJsYXlDb250cm9sbGVyLmggKi8sCiAJCQkJMkQ4MTlCOTkxODYyNzVCMzAwMUYwM0Qx
IC8qIFZpZXdHZXN0dXJlR2VvbWV0cnlDb2xsZWN0b3IuY3BwICovLAogCQkJCTJEODE5QjlBMTg2
Mjc1QjMwMDFGMDNEMSAvKiBWaWV3R2VzdHVyZUdlb21ldHJ5Q29sbGVjdG9yLmggKi8sCkBAIC03
MDQ2LDYgKzcwNDAsNyBAQAogCQkJCTdDODVGRDgwMTkzNDE2NjUwMDAxNzdDNCAvKiBXZWJQcmVm
ZXJlbmNlc0tleXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxMkY1ODk3MTJBODgzODgwMDYyOTUz
MCAvKiBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZVByb3h5LmggaW4gSGVhZGVycyAqLywKIAkJCQkx
QTQ0NUI5RjE4NEQ1RkI1MDA0QjM0MTQgLyogV0tDb250ZXh0SW5qZWN0ZWRCdW5kbGVDbGllbnQu
aCBpbiBIZWFkZXJzICovLAorCQkJCTJENUM5RDA2MTlDODFEOEYwMEIzQzVDMSAvKiBXZWJQYWdl
T3ZlcmxheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTEyRjU4OTkxMkE4ODM4ODAwNjI5NTMwIC8q
IEF1dGhlbnRpY2F0aW9uRGVjaXNpb25MaXN0ZW5lci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE4
RThFRjkxNkIyMDkxQzAwRTkxNDI5IC8qIEF1dGhlbnRpY2F0aW9uTWFuYWdlci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNTEyRjU4QTMxMkE4ODNBRDAwNjI5NTMwIC8qIEF1dGhlbnRpY2F0aW9uTWFu
YWdlck1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLywKQEAgLTcxNTMsNyArNzE0OCw2IEBACiAJCQkJ
MUFFNTJGOTIxOTIwMURBNzAwQTFGQTM3IC8qIEFQSUNvbnRleHRDb25maWd1cmF0aW9uLmggaW4g
SGVhZGVycyAqLywKIAkJCQk3QzM2MUQ3MzE5MjdGQTM2MDAzNkE1OUQgLyogV2ViU2NyaXB0TWVz
c2FnZUhhbmRsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUUxMDVGRTU0MThEN0I5REUwMDhGNTdB
OCAvKiBFZGl0aW5nUmFuZ2UuaCBpbiBIZWFkZXJzICovLAotCQkJCTJEMTQwRUIwMThGMzdCRTAw
MDVFNzVBMCAvKiBQYWdlT3ZlcmxheUNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJD
MTc3NTNGMTE4QkFCRjAwMDdEOUU5QSAvKiBHZW5lcmljQ2FsbGJhY2suaCBpbiBIZWFkZXJzICov
LAogCQkJCTM3OUE4NzM2MThCQkZBNDMwMDU4OEFGMiAvKiBfV0tBY3RpdmF0ZWRFbGVtZW50SW5m
b0ludGVybmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzA2RjQyRjEyREJCOUI2MDAyRDc4REUg
LyogR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXIuaCBpbiBIZWFkZXJzICovLApA
QCAtNzI3Niw3ICs3MjcwLDYgQEAKIAkJCQkxQTVCMUM1MTE4OTg2MDZGMDA0RkNGOUIgLyogV0tO
YXZpZ2F0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk3Q0Y0N0ZGQjE3Mjc1QzU3MDA4QUNCOTEg
LyogUGFnZUJhbm5lci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM2RURBQTYxMTEyNzFDNjAwRTc2
NzhCIC8qIFBhZ2VDbGllbnQuaCBpbiBIZWFkZXJzICovLAotCQkJCTFBOTBDMjM3MTI2NTA3MTcw
MDNFNDRENCAvKiBQYWdlT3ZlcmxheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzU3NEE1ODExMkU2
NjY4MTAwMkRGRTk4IC8qIFBhc3RlYm9hcmRUeXBlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTE5
NTgyRDMxNTNDQkZENzAwQjYwODc1IC8qIFBERktpdEltcG9ydHMuaCBpbiBIZWFkZXJzICovLAog
CQkJCTFBRTAwRDRGMTgyRDZGNTAwMDA4N0RENyAvKiBXS0Jyb3dzaW5nQ29udGV4dEhhbmRsZUlu
dGVybmFsLmggaW4gSGVhZGVycyAqLywKQEAgLTg5MjgsNyArODkyMSw2IEBACiAJCQkJNTFFMzUx
RjUxODBGNUM3NTAwRTUzQkU5IC8qIFdlYklEQkZhY3RvcnlCYWNrZW5kLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTdDMzg3NDM0MTcyRjU2MTUwMDFCRDg4QSAvKiBQYWdlQmFubmVyLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTdDNkQzN0ZDMTcyRjU1NUYwMDlEMjg0NyAvKiBQYWdlQmFubmVyTWFj
Lm1tIGluIFNvdXJjZXMgKi8sCi0JCQkJMUE5MEMyMzgxMjY1MDcxNzAwM0U0NEQ0IC8qIFBhZ2VP
dmVybGF5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUM1NzRBNTgyMTJFNjY2ODEwMDJERkU5OCAv
KiBQYXN0ZWJvYXJkVHlwZXMubW0gaW4gU291cmNlcyAqLywKIAkJCQlFMTk1ODJENjE1M0NDMDU0
MDBCNjA4NzUgLyogUERGS2l0SW1wb3J0cy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTJEODcwRDEw
MTYyMzRGRkUwMDBBM0YyMCAvKiBQREZQbHVnaW4ubW0gaW4gU291cmNlcyAqLywKQEAgLTkxMjgs
NyArOTEyMCw2IEBACiAJCQkJQTU0MjkzQTUxOTVBNDNERDAwMjc4MkM3IC8qIFdLSW5zcGVjdG9y
Tm9kZVNlYXJjaEdlc3R1cmVSZWNvZ25pemVyLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQzAzMzdE
QUUxMjdBMjRGRTAwOEZGNEY0IC8qIFdlYkV2ZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJD
MDMyREJBMTBGNDM4MEYwMDU4QzE1QSAvKiBXZWJFdmVudENvbnZlcnNpb24uY3BwIGluIFNvdXJj
ZXMgKi8sCi0JCQkJMkQxNDBFQUYxOEYzN0JFMDAwNUU3NUEwIC8qIFBhZ2VPdmVybGF5Q29udHJv
bGxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzExMUI1RTExMkY2Mjk4MDAzMzdCQUIgLyog
V2ViRXZlbnRGYWN0b3J5Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQTExOEE5RUUxOTA3QUQ2RjAw
RjdDOTJCIC8qIFF1aWNrTG9va0RvY3VtZW50RGF0YS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkx
QTNERDFGRDEyNUU1OUYzMDA0NTE1RTYgLyogV2ViRmluZENsaWVudC5jcHAgaW4gU291cmNlcyAq
LywKQEAgLTkyMTIsNiArOTIwMyw3IEBACiAJCQkJQzA2QzYwOTUxMjRDMTQ0QjAwMDE2ODJGIC8q
IFdlYlBhZ2VDcmVhdGlvblBhcmFtZXRlcnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQzU5QzRB
NTgxOEI4MTE3NDAwN0JEQ0I2IC8qIEFzc2lzdGVkTm9kZUluZm9ybWF0aW9uLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUJDN0I2MjA3MTI5QTBBNjcwMEQxNzRBNCAvKiBXZWJQYWdlR3JvdXAuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJMkQ1QzlEMDUxOUM4MUQ4RjAwQjNDNUMxIC8qIFdlYlBhZ2VP
dmVybGF5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDN0I2MjUzMTJBNDNDOTYwMEQxNzRBNCAv
KiBXZWJQYWdlR3JvdXBEYXRhLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDN0I2MjE2MTJBNDIx
OUEwMEQxNzRBNCAvKiBXZWJQYWdlR3JvdXBQcm94eS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQky
OUQ1NURGMTE2MUJGOUYxMDAzMUEyRTMgLyogV2ViUGFnZUdyb3VwUHJveHlNZXNzYWdlUmVjZWl2
ZXIuY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlQVBJQ2FzdC5oIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZUFQSUNhc3QuaAppbmRl
eCBlNjM1NDA4Li4wZDViN2M3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlQVBJQ2FzdC5oCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVBUElDYXN0LmgKQEAg
LTQ5LDExICs0OSwxMSBAQCBjbGFzcyBJbmplY3RlZEJ1bmRsZU5vZGVIYW5kbGU7CiBjbGFzcyBJ
bmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlOwogY2xhc3MgSW5qZWN0ZWRCdW5kbGVTY3JpcHRXb3Js
ZDsKIGNsYXNzIFBhZ2VCYW5uZXI7Ci1jbGFzcyBQYWdlT3ZlcmxheTsKIGNsYXNzIFdlYkZyYW1l
OwogY2xhc3MgV2ViSW5zcGVjdG9yOwogY2xhc3MgV2ViUGFnZTsKIGNsYXNzIFdlYlBhZ2VHcm91
cFByb3h5OworY2xhc3MgV2ViUGFnZU92ZXJsYXk7CiAKIFdLX0FERF9BUElfTUFQUElORyhXS0J1
bmRsZUJhY2tGb3J3YXJkTGlzdEl0ZW1SZWYsIEluamVjdGVkQnVuZGxlQmFja0ZvcndhcmRMaXN0
SXRlbSkKIFdLX0FERF9BUElfTUFQUElORyhXS0J1bmRsZUJhY2tGb3J3YXJkTGlzdFJlZiwgSW5q
ZWN0ZWRCdW5kbGVCYWNrRm9yd2FyZExpc3QpCkBAIC02Niw3ICs2Niw3IEBAIFdLX0FERF9BUElf
TUFQUElORyhXS0J1bmRsZU5hdmlnYXRpb25BY3Rpb25SZWYsIEluamVjdGVkQnVuZGxlTmF2aWdh
dGlvbkFjdGlvbikKIFdLX0FERF9BUElfTUFQUElORyhXS0J1bmRsZU5vZGVIYW5kbGVSZWYsIElu
amVjdGVkQnVuZGxlTm9kZUhhbmRsZSkKIFdLX0FERF9BUElfTUFQUElORyhXS0J1bmRsZVBhZ2VC
YW5uZXJSZWYsIFBhZ2VCYW5uZXIpCiBXS19BRERfQVBJX01BUFBJTkcoV0tCdW5kbGVQYWdlR3Jv
dXBSZWYsIFdlYlBhZ2VHcm91cFByb3h5KQotV0tfQUREX0FQSV9NQVBQSU5HKFdLQnVuZGxlUGFn
ZU92ZXJsYXlSZWYsIFBhZ2VPdmVybGF5KQorV0tfQUREX0FQSV9NQVBQSU5HKFdLQnVuZGxlUGFn
ZU92ZXJsYXlSZWYsIFdlYlBhZ2VPdmVybGF5KQogV0tfQUREX0FQSV9NQVBQSU5HKFdLQnVuZGxl
UGFnZVJlZiwgV2ViUGFnZSkKIFdLX0FERF9BUElfTUFQUElORyhXS0J1bmRsZVJhbmdlSGFuZGxl
UmVmLCBJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlKQogV0tfQUREX0FQSV9NQVBQSU5HKFdLQnVu
ZGxlUmVmLCBJbmplY3RlZEJ1bmRsZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVQYWdlLmNwcCBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVQYWdlLmNwcAppbmRl
eCAyMTE0ZjU4Li4yOTQwNWI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlUGFnZS5jcHAKKysrIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZVBhZ2UuY3BwCkBAIC00
NywxMiArNDcsMTUgQEAKICNpbmNsdWRlICJXZWJGdWxsU2NyZWVuTWFuYWdlci5oIgogI2luY2x1
ZGUgIldlYkltYWdlLmgiCiAjaW5jbHVkZSAiV2ViUGFnZS5oIgorI2luY2x1ZGUgIldlYlBhZ2VP
dmVybGF5LmgiCiAjaW5jbHVkZSAiV2ViUmVuZGVyTGF5ZXIuaCIKICNpbmNsdWRlICJXZWJSZW5k
ZXJPYmplY3QuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0FYT2JqZWN0Q2FjaGUuaD4KICNpbmNsdWRl
IDxXZWJDb3JlL0FjY2Vzc2liaWxpdHlPYmplY3QuaD4KICNpbmNsdWRlIDxXZWJDb3JlL01haW5G
cmFtZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUGFnZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUGFn
ZU92ZXJsYXkuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1BhZ2VPdmVybGF5Q29udHJvbGxlci5oPgog
I2luY2x1ZGUgPFdlYkNvcmUvVVJMLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgog
CkBAIC0zNTQsMjIgKzM1NywyMiBAQCBXS0J1bmRsZUJhY2tGb3J3YXJkTGlzdFJlZiBXS0J1bmRs
ZVBhZ2VHZXRCYWNrRm9yd2FyZExpc3QoV0tCdW5kbGVQYWdlUmVmIHBhZ2VSZQogCiB2b2lkIFdL
QnVuZGxlUGFnZUluc3RhbGxQYWdlT3ZlcmxheShXS0J1bmRsZVBhZ2VSZWYgcGFnZVJlZiwgV0tC
dW5kbGVQYWdlT3ZlcmxheVJlZiBwYWdlT3ZlcmxheVJlZikKIHsKLSAgICB0b0ltcGwocGFnZVJl
ZiktPmluc3RhbGxQYWdlT3ZlcmxheSh0b0ltcGwocGFnZU92ZXJsYXlSZWYpKTsKKyAgICB0b0lt
cGwocGFnZVJlZiktPmNvcmVQYWdlKCktPnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLmluc3RhbGxQ
YWdlT3ZlcmxheSh0b0ltcGwocGFnZU92ZXJsYXlSZWYpLT5jb3JlT3ZlcmxheSgpLCBXZWJDb3Jl
OjpQYWdlT3ZlcmxheTo6RmFkZU1vZGU6OkRvTm90RmFkZSk7CiB9CiAKIHZvaWQgV0tCdW5kbGVQ
YWdlVW5pbnN0YWxsUGFnZU92ZXJsYXkoV0tCdW5kbGVQYWdlUmVmIHBhZ2VSZWYsIFdLQnVuZGxl
UGFnZU92ZXJsYXlSZWYgcGFnZU92ZXJsYXlSZWYpCiB7Ci0gICAgdG9JbXBsKHBhZ2VSZWYpLT51
bmluc3RhbGxQYWdlT3ZlcmxheSh0b0ltcGwocGFnZU92ZXJsYXlSZWYpKTsKKyAgICB0b0ltcGwo
cGFnZVJlZiktPmNvcmVQYWdlKCktPnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLnVuaW5zdGFsbFBh
Z2VPdmVybGF5KHRvSW1wbChwYWdlT3ZlcmxheVJlZiktPmNvcmVPdmVybGF5KCksIFdlYkNvcmU6
OlBhZ2VPdmVybGF5OjpGYWRlTW9kZTo6RG9Ob3RGYWRlKTsKIH0KIAogdm9pZCBXS0J1bmRsZVBh
Z2VJbnN0YWxsUGFnZU92ZXJsYXlXaXRoQW5pbWF0aW9uKFdLQnVuZGxlUGFnZVJlZiBwYWdlUmVm
LCBXS0J1bmRsZVBhZ2VPdmVybGF5UmVmIHBhZ2VPdmVybGF5UmVmKQogewotICAgIHRvSW1wbChw
YWdlUmVmKS0+aW5zdGFsbFBhZ2VPdmVybGF5KHRvSW1wbChwYWdlT3ZlcmxheVJlZiksIFBhZ2VP
dmVybGF5OjpGYWRlTW9kZTo6RmFkZSk7CisgICAgdG9JbXBsKHBhZ2VSZWYpLT5jb3JlUGFnZSgp
LT5wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKS5pbnN0YWxsUGFnZU92ZXJsYXkodG9JbXBsKHBhZ2VP
dmVybGF5UmVmKS0+Y29yZU92ZXJsYXkoKSwgV2ViQ29yZTo6UGFnZU92ZXJsYXk6OkZhZGVNb2Rl
OjpGYWRlKTsKIH0KIAogdm9pZCBXS0J1bmRsZVBhZ2VVbmluc3RhbGxQYWdlT3ZlcmxheVdpdGhB
bmltYXRpb24oV0tCdW5kbGVQYWdlUmVmIHBhZ2VSZWYsIFdLQnVuZGxlUGFnZU92ZXJsYXlSZWYg
cGFnZU92ZXJsYXlSZWYpCiB7Ci0gICAgdG9JbXBsKHBhZ2VSZWYpLT51bmluc3RhbGxQYWdlT3Zl
cmxheSh0b0ltcGwocGFnZU92ZXJsYXlSZWYpLCBQYWdlT3ZlcmxheTo6RmFkZU1vZGU6OkZhZGUp
OworICAgIHRvSW1wbChwYWdlUmVmKS0+Y29yZVBhZ2UoKS0+cGFnZU92ZXJsYXlDb250cm9sbGVy
KCkudW5pbnN0YWxsUGFnZU92ZXJsYXkodG9JbXBsKHBhZ2VPdmVybGF5UmVmKS0+Y29yZU92ZXJs
YXkoKSwgV2ViQ29yZTo6UGFnZU92ZXJsYXk6OkZhZGVNb2RlOjpGYWRlKTsKIH0KIAogdm9pZCBX
S0J1bmRsZVBhZ2VTZXRUb3BPdmVyaGFuZ0ltYWdlKFdLQnVuZGxlUGFnZVJlZiBwYWdlUmVmLCBX
S0ltYWdlUmVmIGltYWdlUmVmKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZVBhZ2VPdmVybGF5LmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVQYWdlT3Zlcmxh
eS5jcHAKaW5kZXggYmJhODYyNi4uNDE0MjBiMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZVBhZ2VPdmVybGF5LmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVu
ZGxlUGFnZU92ZXJsYXkuY3BwCkBAIC0yNywxMCArMjcsMTcgQEAKICNpbmNsdWRlICJXS0J1bmRs
ZVBhZ2VPdmVybGF5LmgiCiAKICNpbmNsdWRlICJBUElDbGllbnQuaCIKLSNpbmNsdWRlICJQYWdl
T3ZlcmxheS5oIgogI2luY2x1ZGUgIldLQVBJQ2FzdC5oIgorI2luY2x1ZGUgIldLQXJyYXkuaCIK
ICNpbmNsdWRlICJXS0J1bmRsZUFQSUNhc3QuaCIKKyNpbmNsdWRlICJXS051bWJlci5oIgorI2lu
Y2x1ZGUgIldLUmV0YWluUHRyLmgiCisjaW5jbHVkZSAiV0tTaGFyZWRBUElDYXN0LmgiCisjaW5j
bHVkZSAiV0tTdHJpbmdQcml2YXRlLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRl
eHQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1BhZ2VPdmVybGF5Lmg+CisjaW5jbHVkZSA8V2ViQ29y
ZS9QbGF0Zm9ybU1vdXNlRXZlbnQuaD4KKyNpbmNsdWRlIDxXZWJLaXQvV2ViUGFnZU92ZXJsYXku
aD4KIAogbmFtZXNwYWNlIEFQSSB7CiAKQEAgLTQ3LDcgKzU0LDcgQEAgdGVtcGxhdGU8PiBzdHJ1
Y3QgQ2xpZW50VHJhaXRzPFdLQnVuZGxlUGFnZU92ZXJsYXlBY2Nlc3NpYmlsaXR5Q2xpZW50QmFz
ZT4gewogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiB1c2luZyBuYW1lc3BhY2UgV2ViS2l0Owog
Ci1jbGFzcyBQYWdlT3ZlcmxheUNsaWVudEltcGwgOiBBUEk6OkNsaWVudDxXS0J1bmRsZVBhZ2VP
dmVybGF5Q2xpZW50QmFzZT4sIHB1YmxpYyBQYWdlT3ZlcmxheTo6Q2xpZW50IHsKK2NsYXNzIFBh
Z2VPdmVybGF5Q2xpZW50SW1wbCA6IEFQSTo6Q2xpZW50PFdLQnVuZGxlUGFnZU92ZXJsYXlDbGll
bnRCYXNlPiwgcHVibGljIFdlYlBhZ2VPdmVybGF5OjpDbGllbnQgewogcHVibGljOgogICAgIGV4
cGxpY2l0IFBhZ2VPdmVybGF5Q2xpZW50SW1wbChXS0J1bmRsZVBhZ2VPdmVybGF5Q2xpZW50QmFz
ZSogY2xpZW50KQogICAgIHsKQEAgLTYwLDY0ICs2Nyw2NCBAQCBwdWJsaWM6CiAgICAgfQogCiBw
cml2YXRlOgotICAgIC8vIFBhZ2VPdmVybGF5OjpDbGllbnQuCi0gICAgdmlydHVhbCB2b2lkIHBh
Z2VPdmVybGF5RGVzdHJveWVkKFBhZ2VPdmVybGF5KikKKyAgICAvLyBXZWJQYWdlT3ZlcmxheTo6
Q2xpZW50LgorICAgIHZpcnR1YWwgdm9pZCBwYWdlT3ZlcmxheURlc3Ryb3llZChXZWJQYWdlT3Zl
cmxheSYpIG92ZXJyaWRlCiAgICAgewogICAgICAgICBkZWxldGUgdGhpczsKICAgICB9CiAKLSAg
ICB2aXJ0dWFsIHZvaWQgd2lsbE1vdmVUb1dlYlBhZ2UoUGFnZU92ZXJsYXkqIHBhZ2VPdmVybGF5
LCBXZWJQYWdlKiBwYWdlKQorICAgIHZpcnR1YWwgdm9pZCB3aWxsTW92ZVRvUGFnZShXZWJQYWdl
T3ZlcmxheSYgcGFnZU92ZXJsYXksIFdlYlBhZ2UqIHBhZ2UpIG92ZXJyaWRlCiAgICAgewogICAg
ICAgICBpZiAoIW1fY2xpZW50LndpbGxNb3ZlVG9QYWdlKQogICAgICAgICAgICAgcmV0dXJuOwog
Ci0gICAgICAgIG1fY2xpZW50LndpbGxNb3ZlVG9QYWdlKHRvQVBJKHBhZ2VPdmVybGF5KSwgdG9B
UEkocGFnZSksIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7CisgICAgICAgIG1fY2xpZW50Lndp
bGxNb3ZlVG9QYWdlKHRvQVBJKCZwYWdlT3ZlcmxheSksIHRvQVBJKHBhZ2UpLCBtX2NsaWVudC5i
YXNlLmNsaWVudEluZm8pOwogICAgIH0KICAgICAKLSAgICB2aXJ0dWFsIHZvaWQgZGlkTW92ZVRv
V2ViUGFnZShQYWdlT3ZlcmxheSogcGFnZU92ZXJsYXksIFdlYlBhZ2UqIHBhZ2UpCisgICAgdmly
dHVhbCB2b2lkIGRpZE1vdmVUb1BhZ2UoV2ViUGFnZU92ZXJsYXkmIHBhZ2VPdmVybGF5LCBXZWJQ
YWdlKiBwYWdlKSBvdmVycmlkZQogICAgIHsKICAgICAgICAgaWYgKCFtX2NsaWVudC5kaWRNb3Zl
VG9QYWdlKQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIG1fY2xpZW50LmRpZE1vdmVU
b1BhZ2UodG9BUEkocGFnZU92ZXJsYXkpLCB0b0FQSShwYWdlKSwgbV9jbGllbnQuYmFzZS5jbGll
bnRJbmZvKTsKKyAgICAgICAgbV9jbGllbnQuZGlkTW92ZVRvUGFnZSh0b0FQSSgmcGFnZU92ZXJs
YXkpLCB0b0FQSShwYWdlKSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKICAgICB9CiAKLSAg
ICB2aXJ0dWFsIHZvaWQgZHJhd1JlY3QoUGFnZU92ZXJsYXkqIHBhZ2VPdmVybGF5LCBHcmFwaGlj
c0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KQorICAg
IHZpcnR1YWwgdm9pZCBkcmF3UmVjdChXZWJQYWdlT3ZlcmxheSYgcGFnZU92ZXJsYXksIEdyYXBo
aWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpIG92
ZXJyaWRlCiAgICAgewogICAgICAgICBpZiAoIW1fY2xpZW50LmRyYXdSZWN0KQogICAgICAgICAg
ICAgcmV0dXJuOwogCi0gICAgICAgIG1fY2xpZW50LmRyYXdSZWN0KHRvQVBJKHBhZ2VPdmVybGF5
KSwgZ3JhcGhpY3NDb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpLCB0b0FQSShkaXJ0eVJlY3QpLCBt
X2NsaWVudC5iYXNlLmNsaWVudEluZm8pOworICAgICAgICBtX2NsaWVudC5kcmF3UmVjdCh0b0FQ
SSgmcGFnZU92ZXJsYXkpLCBncmFwaGljc0NvbnRleHQucGxhdGZvcm1Db250ZXh0KCksIHRvQVBJ
KGRpcnR5UmVjdCksIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7CiAgICAgfQogICAgIAotICAg
IHZpcnR1YWwgYm9vbCBtb3VzZUV2ZW50KFBhZ2VPdmVybGF5KiBwYWdlT3ZlcmxheSwgY29uc3Qg
V2ViTW91c2VFdmVudCYgZXZlbnQpCisgICAgdmlydHVhbCBib29sIG1vdXNlRXZlbnQoV2ViUGFn
ZU92ZXJsYXkmIHBhZ2VPdmVybGF5LCBjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIGV2ZW50KSBv
dmVycmlkZQogICAgIHsKICAgICAgICAgc3dpdGNoIChldmVudC50eXBlKCkpIHsKLSAgICAgICAg
Y2FzZSBXZWJFdmVudDo6TW91c2VEb3duOiB7CisgICAgICAgIGNhc2UgUGxhdGZvcm1Nb3VzZUV2
ZW50OjpUeXBlOjpNb3VzZVByZXNzZWQ6IHsKICAgICAgICAgICAgIGlmICghbV9jbGllbnQubW91
c2VEb3duKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICAgICAgcmV0
dXJuIG1fY2xpZW50Lm1vdXNlRG93bih0b0FQSShwYWdlT3ZlcmxheSksIHRvQVBJKGV2ZW50LnBv
c2l0aW9uKCkpLCB0b0FQSShldmVudC5idXR0b24oKSksIG1fY2xpZW50LmJhc2UuY2xpZW50SW5m
byk7CisgICAgICAgICAgICByZXR1cm4gbV9jbGllbnQubW91c2VEb3duKHRvQVBJKCZwYWdlT3Zl
cmxheSksIHRvQVBJKGV2ZW50LnBvc2l0aW9uKCkpLCB0b0FQSShldmVudC5idXR0b24oKSksIG1f
Y2xpZW50LmJhc2UuY2xpZW50SW5mbyk7CiAgICAgICAgIH0KLSAgICAgICAgY2FzZSBXZWJFdmVu
dDo6TW91c2VVcDogeworICAgICAgICBjYXNlIFBsYXRmb3JtTW91c2VFdmVudDo6VHlwZTo6TW91
c2VSZWxlYXNlZDogewogICAgICAgICAgICAgaWYgKCFtX2NsaWVudC5tb3VzZVVwKQogICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICAgICAgcmV0dXJuIG1fY2xpZW50Lm1v
dXNlVXAodG9BUEkocGFnZU92ZXJsYXkpLCB0b0FQSShldmVudC5wb3NpdGlvbigpKSwgdG9BUEko
ZXZlbnQuYnV0dG9uKCkpLCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pOworICAgICAgICAgICAg
cmV0dXJuIG1fY2xpZW50Lm1vdXNlVXAodG9BUEkoJnBhZ2VPdmVybGF5KSwgdG9BUEkoZXZlbnQu
cG9zaXRpb24oKSksIHRvQVBJKGV2ZW50LmJ1dHRvbigpKSwgbV9jbGllbnQuYmFzZS5jbGllbnRJ
bmZvKTsKICAgICAgICAgfQotICAgICAgICBjYXNlIFdlYkV2ZW50OjpNb3VzZU1vdmU6IHsKLSAg
ICAgICAgICAgIGlmIChldmVudC5idXR0b24oKSA9PSBXZWJNb3VzZUV2ZW50OjpOb0J1dHRvbikg
eworICAgICAgICBjYXNlIFBsYXRmb3JtTW91c2VFdmVudDo6VHlwZTo6TW91c2VNb3ZlZDogewor
ICAgICAgICAgICAgaWYgKGV2ZW50LmJ1dHRvbigpID09IE1vdXNlQnV0dG9uOjpOb0J1dHRvbikg
ewogICAgICAgICAgICAgICAgIGlmICghbV9jbGllbnQubW91c2VNb3ZlZCkKICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgICAgICAgICAgcmV0dXJuIG1fY2xpZW50
Lm1vdXNlTW92ZWQodG9BUEkocGFnZU92ZXJsYXkpLCB0b0FQSShldmVudC5wb3NpdGlvbigpKSwg
bV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9jbGll
bnQubW91c2VNb3ZlZCh0b0FQSSgmcGFnZU92ZXJsYXkpLCB0b0FQSShldmVudC5wb3NpdGlvbigp
KSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAg
ICAgLy8gVGhpcyBpcyBhIE1vdXNlTW92ZSBldmVudCB3aXRoIGEgbW91c2UgYnV0dG9uIHByZXNz
ZWQuIENhbGwgbW91c2VEcmFnZ2VkLgogICAgICAgICAgICAgaWYgKCFtX2NsaWVudC5tb3VzZURy
YWdnZWQpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgICAgICByZXR1
cm4gbV9jbGllbnQubW91c2VEcmFnZ2VkKHRvQVBJKHBhZ2VPdmVybGF5KSwgdG9BUEkoZXZlbnQu
cG9zaXRpb24oKSksIHRvQVBJKGV2ZW50LmJ1dHRvbigpKSwgbV9jbGllbnQuYmFzZS5jbGllbnRJ
bmZvKTsKKyAgICAgICAgICAgIHJldHVybiBtX2NsaWVudC5tb3VzZURyYWdnZWQodG9BUEkoJnBh
Z2VPdmVybGF5KSwgdG9BUEkoZXZlbnQucG9zaXRpb24oKSksIHRvQVBJKGV2ZW50LmJ1dHRvbigp
KSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKICAgICAgICAgfQogCiAgICAgICAgIGRlZmF1
bHQ6CkBAIC0xMjUsMTggKzEzMiw0MyBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAgfQogICAg
IAotICAgIHZpcnR1YWwgV0tUeXBlUmVmIGNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWUo
UGFnZU92ZXJsYXkqIHBhZ2VPdmVybGF5LCBXS1N0cmluZ1JlZiBhdHRyaWJ1dGUsIFdLVHlwZVJl
ZiBwYXJhbWV0ZXIpCisgICAgdmlydHVhbCBib29sIGNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRl
U3RyaW5nVmFsdWVGb3JQb2ludChXZWJQYWdlT3ZlcmxheSYgcGFnZU92ZXJsYXksIFN0cmluZyBh
dHRyaWJ1dGUsIFdlYkNvcmU6OkZsb2F0UG9pbnQgcGFyYW1ldGVyLCBTdHJpbmcmIHZhbHVlKSBv
dmVycmlkZQogICAgIHsKICAgICAgICAgaWYgKCFtX2FjY2Vzc2liaWxpdHlDbGllbnQuY2xpZW50
KCkuY29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZSkKLSAgICAgICAgICAgIHJldHVybiAw
OwotICAgICAgICByZXR1cm4gbV9hY2Nlc3NpYmlsaXR5Q2xpZW50LmNsaWVudCgpLmNvcHlBY2Nl
c3NpYmlsaXR5QXR0cmlidXRlVmFsdWUodG9BUEkocGFnZU92ZXJsYXkpLCBhdHRyaWJ1dGUsIHBh
cmFtZXRlciwgbV9hY2Nlc3NpYmlsaXR5Q2xpZW50LmNsaWVudCgpLmJhc2UuY2xpZW50SW5mbyk7
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIFdLUmV0YWluUHRyPFdLVHlwZVJl
Zj4gd2tUeXBlID0gbV9hY2Nlc3NpYmlsaXR5Q2xpZW50LmNsaWVudCgpLmNvcHlBY2Nlc3NpYmls
aXR5QXR0cmlidXRlVmFsdWUodG9BUEkoJnBhZ2VPdmVybGF5KSwgdG9Db3BpZWRBUEkoYXR0cmli
dXRlKSwgV0tQb2ludENyZWF0ZShXS1BvaW50TWFrZShwYXJhbWV0ZXIueCgpLCBwYXJhbWV0ZXIu
eSgpKSksIG1fYWNjZXNzaWJpbGl0eUNsaWVudC5jbGllbnQoKS5iYXNlLmNsaWVudEluZm8pOwor
ICAgICAgICBpZiAodG9JbXBsKHdrVHlwZS5nZXQoKSktPnR5cGUoKSAhPSBBUEk6OlN0cmluZzo6
QVBJVHlwZSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgdmFsdWUgPSB0b1dU
RlN0cmluZyhzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4od2tUeXBlLmdldCgpKSk7CisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKworICAgIHZpcnR1YWwgYm9vbCBjb3B5QWNjZXNzaWJpbGl0
eUF0dHJpYnV0ZUJvb2xWYWx1ZUZvclBvaW50KFdlYlBhZ2VPdmVybGF5JiBwYWdlT3ZlcmxheSwg
U3RyaW5nIGF0dHJpYnV0ZSwgV2ViQ29yZTo6RmxvYXRQb2ludCBwYXJhbWV0ZXIsIGJvb2wmIHZh
bHVlKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKCFtX2FjY2Vzc2liaWxpdHlDbGllbnQu
Y2xpZW50KCkuY29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZSkKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiB3a1R5cGUgPSBtX2Fj
Y2Vzc2liaWxpdHlDbGllbnQuY2xpZW50KCkuY29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1
ZSh0b0FQSSgmcGFnZU92ZXJsYXkpLCB0b0NvcGllZEFQSShhdHRyaWJ1dGUpLCBXS1BvaW50Q3Jl
YXRlKFdLUG9pbnRNYWtlKHBhcmFtZXRlci54KCksIHBhcmFtZXRlci55KCkpKSwgbV9hY2Nlc3Np
YmlsaXR5Q2xpZW50LmNsaWVudCgpLmJhc2UuY2xpZW50SW5mbyk7CisgICAgICAgIGlmICh0b0lt
cGwod2tUeXBlLmdldCgpKS0+dHlwZSgpICE9IEFQSTo6Qm9vbGVhbjo6QVBJVHlwZSkKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgdmFsdWUgPSBXS0Jvb2xlYW5HZXRWYWx1ZShz
dGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KHdrVHlwZS5nZXQoKSkpOworICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9CiAKLSAgICB2aXJ0dWFsIFdLQXJyYXlSZWYgY29weUFjY2Vzc2liaWxpdHlB
dHRyaWJ1dGVOYW1lcyhQYWdlT3ZlcmxheSogcGFnZU92ZXJsYXksIGJvb2wgcGFyYW1lcml6ZWRO
YW1lcykKKyAgICB2aXJ0dWFsIFZlY3RvcjxTdHJpbmc+IGNvcHlBY2Nlc3NpYmlsaXR5QXR0cmli
dXRlTmFtZXMoV2ViUGFnZU92ZXJsYXkmIHBhZ2VPdmVybGF5LCBib29sIHBhcmFtZXJpemVkTmFt
ZXMpIG92ZXJyaWRlCiAgICAgeworICAgICAgICBWZWN0b3I8U3RyaW5nPiBuYW1lczsKICAgICAg
ICAgaWYgKCFtX2FjY2Vzc2liaWxpdHlDbGllbnQuY2xpZW50KCkuY29weUFjY2Vzc2liaWxpdHlB
dHRyaWJ1dGVOYW1lcykKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICByZXR1cm4gbV9h
Y2Nlc3NpYmlsaXR5Q2xpZW50LmNsaWVudCgpLmNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlTmFt
ZXModG9BUEkocGFnZU92ZXJsYXkpLCBwYXJhbWVyaXplZE5hbWVzLCBtX2FjY2Vzc2liaWxpdHlD
bGllbnQuY2xpZW50KCkuYmFzZS5jbGllbnRJbmZvKTsKKyAgICAgICAgICAgIHJldHVybiBuYW1l
czsKKyAgICAgICAgV0tSZXRhaW5QdHI8V0tBcnJheVJlZj4gd2tOYW1lcyA9IG1fYWNjZXNzaWJp
bGl0eUNsaWVudC5jbGllbnQoKS5jb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZU5hbWVzKHRvQVBJ
KCZwYWdlT3ZlcmxheSksIHBhcmFtZXJpemVkTmFtZXMsIG1fYWNjZXNzaWJpbGl0eUNsaWVudC5j
bGllbnQoKS5iYXNlLmNsaWVudEluZm8pOworCisgICAgICAgIHNpemVfdCBjb3VudCA9IFdLQXJy
YXlHZXRTaXplKHdrTmFtZXMuZ2V0KCkpOworICAgICAgICBmb3IgKHNpemVfdCBrID0gMDsgayA8
IGNvdW50OyBrKyspIHsKKyAgICAgICAgICAgIFdLVHlwZVJlZiBpdGVtID0gV0tBcnJheUdldEl0
ZW1BdEluZGV4KHdrTmFtZXMuZ2V0KCksIGspOworICAgICAgICAgICAgaWYgKHRvSW1wbChpdGVt
KS0+dHlwZSgpID09IEFQSTo6U3RyaW5nOjpBUElUeXBlKQorICAgICAgICAgICAgICAgIG5hbWVz
LmFwcGVuZCh0b1dURlN0cmluZyhzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oaXRlbSkpKTsKKyAg
ICAgICAgfQorCisgICAgICAgIHJldHVybiBuYW1lczsKICAgICB9CiAgICAgCiAgICAgQVBJOjpD
bGllbnQ8V0tCdW5kbGVQYWdlT3ZlcmxheUFjY2Vzc2liaWxpdHlDbGllbnRCYXNlPiBtX2FjY2Vz
c2liaWxpdHlDbGllbnQ7CkBAIC0xNDQsNyArMTc2LDcgQEAgcHJpdmF0ZToKIAogV0tUeXBlSUQg
V0tCdW5kbGVQYWdlT3ZlcmxheUdldFR5cGVJRCgpCiB7Ci0gICAgcmV0dXJuIHRvQVBJKFBhZ2VP
dmVybGF5OjpBUElUeXBlKTsKKyAgICByZXR1cm4gdG9BUEkoV2ViUGFnZU92ZXJsYXk6OkFQSVR5
cGUpOwogfQogCiBXS0J1bmRsZVBhZ2VPdmVybGF5UmVmIFdLQnVuZGxlUGFnZU92ZXJsYXlDcmVh
dGUoV0tCdW5kbGVQYWdlT3ZlcmxheUNsaWVudEJhc2UqIHdrQ2xpZW50KQpAQCAtMTU1LDE0ICsx
ODcsMTQgQEAgV0tCdW5kbGVQYWdlT3ZlcmxheVJlZiBXS0J1bmRsZVBhZ2VPdmVybGF5Q3JlYXRl
KFdLQnVuZGxlUGFnZU92ZXJsYXlDbGllbnRCYXNlKgogICAgIGF1dG8gY2xpZW50SW1wbCA9IHN0
ZDo6bWFrZV91bmlxdWU8UGFnZU92ZXJsYXlDbGllbnRJbXBsPih3a0NsaWVudCk7CiAKICAgICAv
LyBGSVhNRTogTG9va3MgbGlrZSB0aGlzIGxlYWtzIHRoZSBjbGllbnRJbXBsLgotICAgIHJldHVy
biB0b0FQSShQYWdlT3ZlcmxheTo6Y3JlYXRlKGNsaWVudEltcGwucmVsZWFzZSgpKS5sZWFrUmVm
KCkpOworICAgIHJldHVybiB0b0FQSShXZWJQYWdlT3ZlcmxheTo6Y3JlYXRlKCpjbGllbnRJbXBs
LnJlbGVhc2UoKSkubGVha1JlZigpKTsKIH0KIAogdm9pZCBXS0J1bmRsZVBhZ2VPdmVybGF5U2V0
QWNjZXNzaWJpbGl0eUNsaWVudChXS0J1bmRsZVBhZ2VPdmVybGF5UmVmIGJ1bmRsZVBhZ2VPdmVy
bGF5UmVmLCBXS0J1bmRsZVBhZ2VPdmVybGF5QWNjZXNzaWJpbGl0eUNsaWVudEJhc2UqIGNsaWVu
dCkKIHsKICAgICBpZiAoY2xpZW50ICYmIGNsaWVudC0+dmVyc2lvbikKICAgICAgICAgcmV0dXJu
OwotICAgIHN0YXRpY19jYXN0PFBhZ2VPdmVybGF5Q2xpZW50SW1wbCo+KHRvSW1wbChidW5kbGVQ
YWdlT3ZlcmxheVJlZiktPmNsaWVudCgpKS0+c2V0QWNjZXNzaWJpbGl0eUNsaWVudChjbGllbnQp
OworICAgIHN0YXRpY19jYXN0PFBhZ2VPdmVybGF5Q2xpZW50SW1wbCo+KCZ0b0ltcGwoYnVuZGxl
UGFnZU92ZXJsYXlSZWYpLT5jbGllbnQoKSktPnNldEFjY2Vzc2liaWxpdHlDbGllbnQoY2xpZW50
KTsKIH0KIAogdm9pZCBXS0J1bmRsZVBhZ2VPdmVybGF5U2V0TmVlZHNEaXNwbGF5KFdLQnVuZGxl
UGFnZU92ZXJsYXlSZWYgYnVuZGxlUGFnZU92ZXJsYXlSZWYsIFdLUmVjdCByZWN0KQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVD
bGllbnQuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJD
aHJvbWVDbGllbnQuY3BwCmluZGV4IGNkZWNiZGEuLmI2YTI5MTAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNs
aWVudC5jcHAKQEAgLTg0MCw3ICs4NDAsOSBAQCBQYXNzUmVmUHRyPFdlYkNvcmU6OlNlYXJjaFBv
cHVwTWVudT4gV2ViQ2hyb21lQ2xpZW50OjpjcmVhdGVTZWFyY2hQb3B1cE1lbnUoV2ViQwogCiBH
cmFwaGljc0xheWVyRmFjdG9yeSogV2ViQ2hyb21lQ2xpZW50OjpncmFwaGljc0xheWVyRmFjdG9y
eSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fcGFnZS0+ZHJhd2luZ0FyZWEoKS0+Z3JhcGhpY3NM
YXllckZhY3RvcnkoKTsKKyAgICBpZiAoYXV0byBkcmF3aW5nQXJlYSA9IG1fcGFnZS0+ZHJhd2lu
Z0FyZWEoKSkKKyAgICAgICAgcmV0dXJuIGRyYXdpbmdBcmVhLT5ncmFwaGljc0xheWVyRmFjdG9y
eSgpOworICAgIHJldHVybiBudWxscHRyOwogfQogCiAjaWYgVVNFKFJFUVVFU1RfQU5JTUFUSU9O
X0ZSQU1FX0RJU1BMQVlfTU9OSVRPUikKQEAgLTg1OCwxMiArODYwLDEwIEBAIHZvaWQgV2ViQ2hy
b21lQ2xpZW50OjphdHRhY2hSb290R3JhcGhpY3NMYXllcihGcmFtZSosIEdyYXBoaWNzTGF5ZXIq
IGxheWVyKQogICAgICAgICBtX3BhZ2UtPmV4aXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSgp
OwogfQogCi1HcmFwaGljc0xheWVyKiBXZWJDaHJvbWVDbGllbnQ6OmRvY3VtZW50T3ZlcmxheUxh
eWVyRm9yRnJhbWUoRnJhbWUmIGZyYW1lKQordm9pZCBXZWJDaHJvbWVDbGllbnQ6OmF0dGFjaFZp
ZXdPdmVybGF5R3JhcGhpY3NMYXllcihGcmFtZSogZnJhbWUsIEdyYXBoaWNzTGF5ZXIqIGdyYXBo
aWNzTGF5ZXIpCiB7Ci0gICAgaWYgKCZmcmFtZSA9PSAmbV9wYWdlLT5jb3JlUGFnZSgpLT5tYWlu
RnJhbWUoKSkKLSAgICAgICAgcmV0dXJuIG1fcGFnZS0+cGFnZU92ZXJsYXlDb250cm9sbGVyKCku
ZG9jdW1lbnRPdmVybGF5Um9vdExheWVyKCk7Ci0KLSAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBp
ZiAoYXV0byBkcmF3aW5nQXJlYSA9IG1fcGFnZS0+ZHJhd2luZ0FyZWEoKSkKKyAgICAgICAgZHJh
d2luZ0FyZWEtPmF0dGFjaFZpZXdPdmVybGF5R3JhcGhpY3NMYXllcihmcmFtZSwgZ3JhcGhpY3NM
YXllcik7CiB9CiAKIHZvaWQgV2ViQ2hyb21lQ2xpZW50OjpzZXROZWVkc09uZVNob3REcmF3aW5n
U3luY2hyb25pemF0aW9uKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oCmluZGV4IGI5ZGMzMmUuLmY1YzVi
MjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQv
V2ViQ2hyb21lQ2xpZW50LmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3Jl
U3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaApAQCAtMjE1LDEwICsyMTUsMTAgQEAgcHJpdmF0ZToK
IAogICAgIHZpcnR1YWwgV2ViQ29yZTo6R3JhcGhpY3NMYXllckZhY3RvcnkqIGdyYXBoaWNzTGF5
ZXJGYWN0b3J5KCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIGF0dGFjaFJvb3RH
cmFwaGljc0xheWVyKFdlYkNvcmU6OkZyYW1lKiwgV2ViQ29yZTo6R3JhcGhpY3NMYXllciopIG92
ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBhdHRhY2hWaWV3T3ZlcmxheUdyYXBoaWNzTGF5ZXIo
V2ViQ29yZTo6RnJhbWUqLCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKikgb3ZlcnJpZGU7CiAgICAg
dmlydHVhbCB2b2lkIHNldE5lZWRzT25lU2hvdERyYXdpbmdTeW5jaHJvbml6YXRpb24oKSBvdmVy
cmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVDb21wb3NpdGluZ0xheWVyRmx1c2goKSBv
dmVycmlkZTsKICAgICB2aXJ0dWFsIGJvb2wgYWRqdXN0TGF5ZXJGbHVzaFRocm90dGxpbmcoV2Vi
Q29yZTo6TGF5ZXJGbHVzaFRocm90dGxlU3RhdGU6OkZsYWdzKSBvdmVycmlkZTsKLSAgICB2aXJ0
dWFsIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqIGRvY3VtZW50T3ZlcmxheUxheWVyRm9yRnJhbWUo
V2ViQ29yZTo6RnJhbWUmKSBvdmVycmlkZTsKIAogI2lmIFVTRShSRVFVRVNUX0FOSU1BVElPTl9G
UkFNRV9ESVNQTEFZX01PTklUT1IpCiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPFdlYkNvcmU6OkRp
c3BsYXlSZWZyZXNoTW9uaXRvcj4gY3JlYXRlRGlzcGxheVJlZnJlc2hNb25pdG9yKFBsYXRmb3Jt
RGlzcGxheUlEKSBjb25zdCBvdmVycmlkZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50LmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50LmNwcApp
bmRleCA4NTkzNThiLi44OGViMmRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckNsaWVudC5jcHAKKysrIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JDbGllbnQuY3BwCkBA
IC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiV2ViUGFnZS5oIgogI2luY2x1ZGUgPFdlYkNvcmUv
SW5zcGVjdG9yQ29udHJvbGxlci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUGFnZS5oPgorI2luY2x1
ZGUgPFdlYkNvcmUvUGFnZU92ZXJsYXlDb250cm9sbGVyLmg+CiAjaW5jbHVkZSA8d3RmL0N1cnJl
bnRUaW1lLmg+CiAKICNpZiBQTEFURk9STShJT1MpCkBAIC03Myw3ICs3NCw3IEBAIFdlYkluc3Bl
Y3RvckNsaWVudDo6fldlYkluc3BlY3RvckNsaWVudCgpCiAgICAgfQogCiAgICAgaWYgKG1fcGFp
bnRSZWN0T3ZlcmxheSkKLSAgICAgICAgbV9wYWdlLT51bmluc3RhbGxQYWdlT3ZlcmxheShtX3Bh
aW50UmVjdE92ZXJsYXkuZ2V0KCkpOworICAgICAgICBtX3BhZ2UtPmNvcmVQYWdlKCktPnBhZ2VP
dmVybGF5Q29udHJvbGxlcigpLnVuaW5zdGFsbFBhZ2VPdmVybGF5KG1fcGFpbnRSZWN0T3Zlcmxh
eS5nZXQoKSwgUGFnZU92ZXJsYXk6OkZhZGVNb2RlOjpGYWRlKTsKIH0KIAogdm9pZCBXZWJJbnNw
ZWN0b3JDbGllbnQ6Omluc3BlY3RvckRlc3Ryb3llZCgpCkBAIC0xMTEsOSArMTEyLDkgQEAgdm9p
ZCBXZWJJbnNwZWN0b3JDbGllbnQ6OmhpZ2hsaWdodCgpCiB7CiAjaWYgIVBMQVRGT1JNKElPUykK
ICAgICBpZiAoIW1faGlnaGxpZ2h0T3ZlcmxheSkgewotICAgICAgICBSZWZQdHI8UGFnZU92ZXJs
YXk+IGhpZ2hsaWdodE92ZXJsYXkgPSBQYWdlT3ZlcmxheTo6Y3JlYXRlKHRoaXMpOworICAgICAg
ICBSZWZQdHI8UGFnZU92ZXJsYXk+IGhpZ2hsaWdodE92ZXJsYXkgPSBQYWdlT3ZlcmxheTo6Y3Jl
YXRlKCp0aGlzKTsKICAgICAgICAgbV9oaWdobGlnaHRPdmVybGF5ID0gaGlnaGxpZ2h0T3Zlcmxh
eS5nZXQoKTsKLSAgICAgICAgbV9wYWdlLT5pbnN0YWxsUGFnZU92ZXJsYXkoaGlnaGxpZ2h0T3Zl
cmxheS5yZWxlYXNlKCksIFBhZ2VPdmVybGF5OjpGYWRlTW9kZTo6RmFkZSk7CisgICAgICAgIG1f
cGFnZS0+Y29yZVBhZ2UoKS0+cGFnZU92ZXJsYXlDb250cm9sbGVyKCkuaW5zdGFsbFBhZ2VPdmVy
bGF5KGhpZ2hsaWdodE92ZXJsYXkucmVsZWFzZSgpLCBQYWdlT3ZlcmxheTo6RmFkZU1vZGU6OkZh
ZGUpOwogICAgICAgICBtX2hpZ2hsaWdodE92ZXJsYXktPnNldE5lZWRzRGlzcGxheSgpOwogICAg
IH0gZWxzZSB7CiAgICAgICAgIG1faGlnaGxpZ2h0T3ZlcmxheS0+c3RvcEZhZGVPdXRBbmltYXRp
b24oKTsKQEAgLTEzMCw3ICsxMzEsNyBAQCB2b2lkIFdlYkluc3BlY3RvckNsaWVudDo6aGlkZUhp
Z2hsaWdodCgpCiB7CiAjaWYgIVBMQVRGT1JNKElPUykKICAgICBpZiAobV9oaWdobGlnaHRPdmVy
bGF5KQotICAgICAgICBtX3BhZ2UtPnVuaW5zdGFsbFBhZ2VPdmVybGF5KG1faGlnaGxpZ2h0T3Zl
cmxheSwgUGFnZU92ZXJsYXk6OkZhZGVNb2RlOjpGYWRlKTsKKyAgICAgICAgbV9wYWdlLT5jb3Jl
UGFnZSgpLT5wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKS51bmluc3RhbGxQYWdlT3ZlcmxheShtX2hp
Z2hsaWdodE92ZXJsYXksIFBhZ2VPdmVybGF5OjpGYWRlTW9kZTo6RmFkZSk7CiAjZWxzZQogICAg
IG1fcGFnZS0+aGlkZUluc3BlY3RvckhpZ2hsaWdodCgpOwogI2VuZGlmCkBAIC0xMzksOCArMTQw
LDggQEAgdm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6OmhpZGVIaWdobGlnaHQoKQogdm9pZCBXZWJJ
bnNwZWN0b3JDbGllbnQ6OnNob3dQYWludFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewog
ICAgIGlmICghbV9wYWludFJlY3RPdmVybGF5KSB7Ci0gICAgICAgIG1fcGFpbnRSZWN0T3Zlcmxh
eSA9IFBhZ2VPdmVybGF5OjpjcmVhdGUodGhpcywgUGFnZU92ZXJsYXk6Ok92ZXJsYXlUeXBlOjpE
b2N1bWVudCk7Ci0gICAgICAgIG1fcGFnZS0+aW5zdGFsbFBhZ2VPdmVybGF5KG1fcGFpbnRSZWN0
T3ZlcmxheSwgUGFnZU92ZXJsYXk6OkZhZGVNb2RlOjpEb05vdEZhZGUpOworICAgICAgICBtX3Bh
aW50UmVjdE92ZXJsYXkgPSBQYWdlT3ZlcmxheTo6Y3JlYXRlKCp0aGlzLCBQYWdlT3ZlcmxheTo6
T3ZlcmxheVR5cGU6OkRvY3VtZW50KTsKKyAgICAgICAgbV9wYWdlLT5jb3JlUGFnZSgpLT5wYWdl
T3ZlcmxheUNvbnRyb2xsZXIoKS5pbnN0YWxsUGFnZU92ZXJsYXkobV9wYWludFJlY3RPdmVybGF5
LCBQYWdlT3ZlcmxheTo6RmFkZU1vZGU6OkRvTm90RmFkZSk7CiAgICAgfQogCiAgICAgaWYgKCFt
X3BhaW50SW5kaWNhdG9yTGF5ZXJDbGllbnQpCkBAIC0xNjcsOCArMTY4LDggQEAgdm9pZCBXZWJJ
bnNwZWN0b3JDbGllbnQ6OnNob3dQYWludFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogICAg
IAogICAgIG1fcGFpbnRSZWN0TGF5ZXJzLmFkZChwYWludExheWVyLmdldCgpKTsKIAotICAgIEdy
YXBoaWNzTGF5ZXIqIG92ZXJsYXlSb290TGF5ZXIgPSBtX3BhaW50UmVjdE92ZXJsYXktPmxheWVy
KCk7Ci0gICAgb3ZlcmxheVJvb3RMYXllci0+YWRkQ2hpbGQocGFpbnRMYXllci5yZWxlYXNlKCkp
OworICAgIEdyYXBoaWNzTGF5ZXImIG92ZXJsYXlSb290TGF5ZXIgPSBtX3BhaW50UmVjdE92ZXJs
YXktPmxheWVyKCk7CisgICAgb3ZlcmxheVJvb3RMYXllci5hZGRDaGlsZChwYWludExheWVyLnJl
bGVhc2UoKSk7CiB9CiAKIHZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50OjphbmltYXRpb25FbmRlZEZv
ckxheWVyKGNvbnN0IEdyYXBoaWNzTGF5ZXIqIGxheWVyKQpAQCAtMTk4LDEzICsxOTksMTMgQEAg
dm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6OmRpZFNldFNlYXJjaGluZ0Zvck5vZGUoYm9vbCBlbmFi
bGVkKQogfQogI2VuZGlmCiAKLXZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50OjpwYWdlT3ZlcmxheURl
c3Ryb3llZChQYWdlT3ZlcmxheSopCit2b2lkIFdlYkluc3BlY3RvckNsaWVudDo6cGFnZU92ZXJs
YXlEZXN0cm95ZWQoUGFnZU92ZXJsYXkmKQogewogfQogCi12b2lkIFdlYkluc3BlY3RvckNsaWVu
dDo6d2lsbE1vdmVUb1dlYlBhZ2UoUGFnZU92ZXJsYXkqLCBXZWJQYWdlKiB3ZWJQYWdlKQordm9p
ZCBXZWJJbnNwZWN0b3JDbGllbnQ6OndpbGxNb3ZlVG9QYWdlKFBhZ2VPdmVybGF5JiwgUGFnZSog
cGFnZSkKIHsKLSAgICBpZiAod2ViUGFnZSkKKyAgICBpZiAocGFnZSkKICAgICAgICAgcmV0dXJu
OwogCiAgICAgLy8gVGhlIHBhZ2Ugb3ZlcmxheSBpcyBtb3ZpbmcgYXdheSBmcm9tIHRoZSB3ZWIg
cGFnZSwgcmVzZXQgaXQuCkBAIC0yMTIsMTYgKzIxMywxNiBAQCB2b2lkIFdlYkluc3BlY3RvckNs
aWVudDo6d2lsbE1vdmVUb1dlYlBhZ2UoUGFnZU92ZXJsYXkqLCBXZWJQYWdlKiB3ZWJQYWdlKQog
ICAgIG1faGlnaGxpZ2h0T3ZlcmxheSA9IDA7CiB9CiAKLXZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50
OjpkaWRNb3ZlVG9XZWJQYWdlKFBhZ2VPdmVybGF5KiwgV2ViUGFnZSopCit2b2lkIFdlYkluc3Bl
Y3RvckNsaWVudDo6ZGlkTW92ZVRvUGFnZShQYWdlT3ZlcmxheSYsIFBhZ2UqKQogewogfQogCi12
b2lkIFdlYkluc3BlY3RvckNsaWVudDo6ZHJhd1JlY3QoUGFnZU92ZXJsYXkqLCBXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIC8qZGlydHlS
ZWN0Ki8pCit2b2lkIFdlYkluc3BlY3RvckNsaWVudDo6ZHJhd1JlY3QoUGFnZU92ZXJsYXkmLCBX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IFdlYkNvcmU6OkludFJlY3Qm
IC8qZGlydHlSZWN0Ki8pCiB7CiAgICAgbV9wYWdlLT5jb3JlUGFnZSgpLT5pbnNwZWN0b3JDb250
cm9sbGVyKCkuZHJhd0hpZ2hsaWdodChjb250ZXh0KTsKIH0KIAotYm9vbCBXZWJJbnNwZWN0b3JD
bGllbnQ6Om1vdXNlRXZlbnQoUGFnZU92ZXJsYXkqLCBjb25zdCBXZWJNb3VzZUV2ZW50JikKK2Jv
b2wgV2ViSW5zcGVjdG9yQ2xpZW50Ojptb3VzZUV2ZW50KFBhZ2VPdmVybGF5JiwgY29uc3QgUGxh
dGZvcm1Nb3VzZUV2ZW50JikKIHsKICAgICByZXR1cm4gZmFsc2U7CiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckNsaWVu
dC5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0
b3JDbGllbnQuaAppbmRleCA3OThjYWM3Li5kZmMwMzhhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckNsaWVudC5oCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xp
ZW50LmgKQEAgLTI4LDE2ICsyOCwxNiBAQAogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKIAotI2lu
Y2x1ZGUgIlBhZ2VPdmVybGF5LmgiCi0KICNpbmNsdWRlIDxXZWJDb3JlL0luc3BlY3RvckNsaWVu
dC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvSW5zcGVjdG9yRm9yd2FyZGluZy5oPgorI2luY2x1ZGUg
PFdlYkNvcmUvUGFnZU92ZXJsYXkuaD4KICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBHcmFwaGljc0NvbnRleHQ7CiBjbGFzcyBHcmFwaGljc0xh
eWVyOwogY2xhc3MgSW50UmVjdDsKK2NsYXNzIFBhZ2VPdmVybGF5OwogfQogCiBuYW1lc3BhY2Ug
V2ViS2l0IHsKQEAgLTQ1LDcgKzQ1LDcgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiBjbGFzcyBXZWJQ
YWdlOwogY2xhc3MgUmVwYWludEluZGljYXRvckxheWVyQ2xpZW50OwogCi1jbGFzcyBXZWJJbnNw
ZWN0b3JDbGllbnQgOiBwdWJsaWMgV2ViQ29yZTo6SW5zcGVjdG9yQ2xpZW50LCBwcml2YXRlIFBh
Z2VPdmVybGF5OjpDbGllbnQgeworY2xhc3MgV2ViSW5zcGVjdG9yQ2xpZW50IDogcHVibGljIFdl
YkNvcmU6Okluc3BlY3RvckNsaWVudCwgcHJpdmF0ZSBXZWJDb3JlOjpQYWdlT3ZlcmxheTo6Q2xp
ZW50IHsKIGZyaWVuZCBjbGFzcyBSZXBhaW50SW5kaWNhdG9yTGF5ZXJDbGllbnQ7CiBwdWJsaWM6
CiAgICAgV2ViSW5zcGVjdG9yQ2xpZW50KFdlYlBhZ2UqKTsKQEAgLTc0LDE4ICs3NCwxOCBAQCBw
cml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBzaG93UGFpbnRSZWN0KGNvbnN0IFdlYkNvcmU6OkZs
b2F0UmVjdCYpIG92ZXJyaWRlOwogCiAgICAgLy8gUGFnZU92ZXJsYXk6OkNsaWVudAotICAgIHZp
cnR1YWwgdm9pZCBwYWdlT3ZlcmxheURlc3Ryb3llZChQYWdlT3ZlcmxheSopIG92ZXJyaWRlOwot
ICAgIHZpcnR1YWwgdm9pZCB3aWxsTW92ZVRvV2ViUGFnZShQYWdlT3ZlcmxheSosIFdlYlBhZ2Uq
KSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkTW92ZVRvV2ViUGFnZShQYWdlT3Zlcmxh
eSosIFdlYlBhZ2UqKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgZHJhd1JlY3QoUGFnZU92
ZXJsYXkqLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0
Jikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBib29sIG1vdXNlRXZlbnQoUGFnZU92ZXJsYXkqLCBj
b25zdCBXZWJNb3VzZUV2ZW50Jikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHBhZ2VPdmVy
bGF5RGVzdHJveWVkKFdlYkNvcmU6OlBhZ2VPdmVybGF5Jikgb3ZlcnJpZGU7CisgICAgdmlydHVh
bCB2b2lkIHdpbGxNb3ZlVG9QYWdlKFdlYkNvcmU6OlBhZ2VPdmVybGF5JiwgV2ViQ29yZTo6UGFn
ZSopIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBkaWRNb3ZlVG9QYWdlKFdlYkNvcmU6OlBh
Z2VPdmVybGF5JiwgV2ViQ29yZTo6UGFnZSopIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBk
cmF3UmVjdChXZWJDb3JlOjpQYWdlT3ZlcmxheSYsIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYs
IGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wgbW91
c2VFdmVudChXZWJDb3JlOjpQYWdlT3ZlcmxheSYsIGNvbnN0IFdlYkNvcmU6OlBsYXRmb3JtTW91
c2VFdmVudCYpIG92ZXJyaWRlOwogCiAgICAgdm9pZCBhbmltYXRpb25FbmRlZEZvckxheWVyKGNv
bnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKTsKIAogICAgIFdlYlBhZ2UqIG1fcGFnZTsKLSAg
ICBQYWdlT3ZlcmxheSogbV9oaWdobGlnaHRPdmVybGF5OworICAgIFdlYkNvcmU6OlBhZ2VPdmVy
bGF5KiBtX2hpZ2hsaWdodE92ZXJsYXk7CiAgICAgCi0gICAgUmVmUHRyPFBhZ2VPdmVybGF5PiBt
X3BhaW50UmVjdE92ZXJsYXk7CisgICAgUmVmUHRyPFdlYkNvcmU6OlBhZ2VPdmVybGF5PiBtX3Bh
aW50UmVjdE92ZXJsYXk7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFJlcGFpbnRJbmRpY2F0b3JMYXll
ckNsaWVudD4gbV9wYWludEluZGljYXRvckxheWVyQ2xpZW50OwogICAgIEhhc2hTZXQ8V2ViQ29y
ZTo6R3JhcGhpY3NMYXllcio+IG1fcGFpbnRSZWN0TGF5ZXJzOyAvLyBJZGVhbGx5IHRoaXMgd291
bGQgYmUgSGFzaFNldDxzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NMYXllcj4+IGJ1dCB0aGF0IGRv
ZXNuJ3Qgd29yayB5ZXQuIHdlYmtpdC5vcmcvYi8xMzYxNjYKIH07CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWEuaCBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYS5oCmluZGV4IGY3NGI0ZGUuLmRiM2I4
M2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5n
QXJlYS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJl
YS5oCkBAIC00NSw2ICs0NSw3IEBAIGNsYXNzIE1lc3NhZ2VEZWNvZGVyOwogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiBjbGFzcyBEaXNwbGF5UmVmcmVzaE1vbml0b3I7CitjbGFzcyBGcmFtZTsKIGNs
YXNzIEZyYW1lVmlldzsKIGNsYXNzIEdyYXBoaWNzTGF5ZXI7CiBjbGFzcyBHcmFwaGljc0xheWVy
RmFjdG9yeTsKQEAgLTEyMCw2ICsxMjEsOCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIGJvb2wg
YWRqdXN0TGF5ZXJGbHVzaFRocm90dGxpbmcoV2ViQ29yZTo6TGF5ZXJGbHVzaFRocm90dGxlU3Rh
dGU6OkZsYWdzKSB7IHJldHVybiBmYWxzZTsgfQogCisgICAgdmlydHVhbCB2b2lkIGF0dGFjaFZp
ZXdPdmVybGF5R3JhcGhpY3NMYXllcihXZWJDb3JlOjpGcmFtZSosIFdlYkNvcmU6OkdyYXBoaWNz
TGF5ZXIqKSB7IH0KKwogcHJvdGVjdGVkOgogICAgIERyYXdpbmdBcmVhKERyYXdpbmdBcmVhVHlw
ZSwgV2ViUGFnZSYpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvRmluZENvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL0ZpbmRDb250cm9sbGVyLmNwcAppbmRleCAxZTM0NjJiLi5jYzNlNzJlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5jcHAK
QEAgLTQwLDYgKzQwLDggQEAKICNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dC5oPgog
I2luY2x1ZGUgPFdlYkNvcmUvTWFpbkZyYW1lLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9QYWdlLmg+
CisjaW5jbHVkZSA8V2ViQ29yZS9QYWdlT3ZlcmxheUNvbnRyb2xsZXIuaD4KKyNpbmNsdWRlIDxX
ZWJDb3JlL1BsYXRmb3JtTW91c2VFdmVudC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUGx1Z2luRG9j
dW1lbnQuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CkBAIC02Myw3ICs2NSw3IEBAIHN0
YXRpYyBXZWJDb3JlOjpGaW5kT3B0aW9ucyBjb3JlKEZpbmRPcHRpb25zIG9wdGlvbnMpCiAKIEZp
bmRDb250cm9sbGVyOjpGaW5kQ29udHJvbGxlcihXZWJQYWdlKiB3ZWJQYWdlKQogICAgIDogbV93
ZWJQYWdlKHdlYlBhZ2UpCi0gICAgLCBtX2ZpbmRQYWdlT3ZlcmxheSgwKQorICAgICwgbV9maW5k
UGFnZU92ZXJsYXkobnVsbHB0cikKICAgICAsIG1faXNTaG93aW5nRmluZEluZGljYXRvcihmYWxz
ZSkKICAgICAsIG1fZm91bmRTdHJpbmdNYXRjaEluZGV4KC0xKQogewpAQCAtMTgyLDEyICsxODQs
MTIgQEAgdm9pZCBGaW5kQ29udHJvbGxlcjo6dXBkYXRlRmluZFVJQWZ0ZXJQYWdlU2Nyb2xsKGJv
b2wgZm91bmQsIGNvbnN0IFN0cmluZyYgc3RyaW4KIAogICAgIGlmICghc2hvdWxkU2hvd092ZXJs
YXkpIHsKICAgICAgICAgaWYgKG1fZmluZFBhZ2VPdmVybGF5KQotICAgICAgICAgICAgbV93ZWJQ
YWdlLT51bmluc3RhbGxQYWdlT3ZlcmxheShtX2ZpbmRQYWdlT3ZlcmxheSwgUGFnZU92ZXJsYXk6
OkZhZGVNb2RlOjpGYWRlKTsKKyAgICAgICAgICAgIG1fd2ViUGFnZS0+Y29yZVBhZ2UoKS0+cGFn
ZU92ZXJsYXlDb250cm9sbGVyKCkudW5pbnN0YWxsUGFnZU92ZXJsYXkobV9maW5kUGFnZU92ZXJs
YXksIFBhZ2VPdmVybGF5OjpGYWRlTW9kZTo6RmFkZSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAg
aWYgKCFtX2ZpbmRQYWdlT3ZlcmxheSkgewotICAgICAgICAgICAgUmVmUHRyPFBhZ2VPdmVybGF5
PiBmaW5kUGFnZU92ZXJsYXkgPSBQYWdlT3ZlcmxheTo6Y3JlYXRlKHRoaXMpOworICAgICAgICAg
ICAgUmVmUHRyPFBhZ2VPdmVybGF5PiBmaW5kUGFnZU92ZXJsYXkgPSBQYWdlT3ZlcmxheTo6Y3Jl
YXRlKCp0aGlzKTsKICAgICAgICAgICAgIG1fZmluZFBhZ2VPdmVybGF5ID0gZmluZFBhZ2VPdmVy
bGF5LmdldCgpOwotICAgICAgICAgICAgbV93ZWJQYWdlLT5pbnN0YWxsUGFnZU92ZXJsYXkoZmlu
ZFBhZ2VPdmVybGF5LnJlbGVhc2UoKSwgUGFnZU92ZXJsYXk6OkZhZGVNb2RlOjpGYWRlKTsKKyAg
ICAgICAgICAgIG1fd2ViUGFnZS0+Y29yZVBhZ2UoKS0+cGFnZU92ZXJsYXlDb250cm9sbGVyKCku
aW5zdGFsbFBhZ2VPdmVybGF5KGZpbmRQYWdlT3ZlcmxheS5yZWxlYXNlKCksIFBhZ2VPdmVybGF5
OjpGYWRlTW9kZTo6RmFkZSk7CiAgICAgICAgIH0KICAgICAgICAgbV9maW5kUGFnZU92ZXJsYXkt
PnNldE5lZWRzRGlzcGxheSgpOwogICAgIH0KQEAgLTMzMCw3ICszMzIsNyBAQCB2b2lkIEZpbmRD
b250cm9sbGVyOjpoaWRlRmluZFVJKCkKIHsKICAgICBtX2ZpbmRNYXRjaGVzLmNsZWFyKCk7CiAg
ICAgaWYgKG1fZmluZFBhZ2VPdmVybGF5KQotICAgICAgICBtX3dlYlBhZ2UtPnVuaW5zdGFsbFBh
Z2VPdmVybGF5KG1fZmluZFBhZ2VPdmVybGF5LCBQYWdlT3ZlcmxheTo6RmFkZU1vZGU6OkZhZGUp
OworICAgICAgICBtX3dlYlBhZ2UtPmNvcmVQYWdlKCktPnBhZ2VPdmVybGF5Q29udHJvbGxlcigp
LnVuaW5zdGFsbFBhZ2VPdmVybGF5KG1fZmluZFBhZ2VPdmVybGF5LCBQYWdlT3ZlcmxheTo6RmFk
ZU1vZGU6OkZhZGUpOwogCiAgICAgUGx1Z2luVmlldyogcGx1Z2luVmlldyA9IHBsdWdpblZpZXdG
b3JGcmFtZShtX3dlYlBhZ2UtPm1haW5GcmFtZSgpKTsKICAgICAKQEAgLTQzOSwyMCArNDQxLDIw
IEBAIFZlY3RvcjxJbnRSZWN0PiBGaW5kQ29udHJvbGxlcjo6cmVjdHNGb3JUZXh0TWF0Y2hlcygp
CiAgICAgcmV0dXJuIHJlY3RzOwogfQogCi12b2lkIEZpbmRDb250cm9sbGVyOjpwYWdlT3Zlcmxh
eURlc3Ryb3llZChQYWdlT3ZlcmxheSopCit2b2lkIEZpbmRDb250cm9sbGVyOjpwYWdlT3Zlcmxh
eURlc3Ryb3llZChQYWdlT3ZlcmxheSYpCiB7CiB9CiAKLXZvaWQgRmluZENvbnRyb2xsZXI6Ondp
bGxNb3ZlVG9XZWJQYWdlKFBhZ2VPdmVybGF5KiwgV2ViUGFnZSogd2ViUGFnZSkKK3ZvaWQgRmlu
ZENvbnRyb2xsZXI6OndpbGxNb3ZlVG9QYWdlKFBhZ2VPdmVybGF5JiwgUGFnZSogcGFnZSkKIHsK
LSAgICBpZiAod2ViUGFnZSkKKyAgICBpZiAocGFnZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
QVNTRVJUKG1fZmluZFBhZ2VPdmVybGF5KTsKICAgICBtX2ZpbmRQYWdlT3ZlcmxheSA9IDA7CiB9
CiAgICAgCi12b2lkIEZpbmRDb250cm9sbGVyOjpkaWRNb3ZlVG9XZWJQYWdlKFBhZ2VPdmVybGF5
KiwgV2ViUGFnZSopCit2b2lkIEZpbmRDb250cm9sbGVyOjpkaWRNb3ZlVG9QYWdlKFBhZ2VPdmVy
bGF5JiwgUGFnZSopCiB7CiB9CiAKQEAgLTQ2OCw3ICs0NzAsNyBAQCBjb25zdCBmbG9hdCBzaGFk
b3dCbHVyUmFkaXVzID0gMTsKIGNvbnN0IGZsb2F0IHNoYWRvd0NvbG9yQWxwaGEgPSAwLjU7CiAj
ZW5kaWYKIAotdm9pZCBGaW5kQ29udHJvbGxlcjo6ZHJhd1JlY3QoUGFnZU92ZXJsYXkqLCBHcmFw
aGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KQor
dm9pZCBGaW5kQ29udHJvbGxlcjo6ZHJhd1JlY3QoUGFnZU92ZXJsYXkmLCBHcmFwaGljc0NvbnRl
eHQmIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KQogewogICAgIENv
bG9yIG92ZXJsYXlCYWNrZ3JvdW5kQ29sb3IoMC4xZiwgMC4xZiwgMC4xZiwgMC4yNWYpOwogCkBA
IC01MDYsOSArNTA4LDkgQEAgdm9pZCBGaW5kQ29udHJvbGxlcjo6ZHJhd1JlY3QoUGFnZU92ZXJs
YXkqLCBHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgY28KICAgICB9CiB9CiAKLWJv
b2wgRmluZENvbnRyb2xsZXI6Om1vdXNlRXZlbnQoUGFnZU92ZXJsYXkqLCBjb25zdCBXZWJNb3Vz
ZUV2ZW50JiBtb3VzZUV2ZW50KQorYm9vbCBGaW5kQ29udHJvbGxlcjo6bW91c2VFdmVudChQYWdl
T3ZlcmxheSYsIGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgbW91c2VFdmVudCkKIHsKLSAgICBp
ZiAobW91c2VFdmVudC50eXBlKCkgPT0gV2ViRXZlbnQ6Ok1vdXNlRG93bikKKyAgICBpZiAobW91
c2VFdmVudC50eXBlKCkgPT0gUGxhdGZvcm1FdmVudDo6TW91c2VQcmVzc2VkKQogICAgICAgICBo
aWRlRmluZFVJKCk7CiAKICAgICByZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5oCmluZGV4IDI4MDYzZmMuLjkwNWVk
MWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29u
dHJvbGxlci5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29u
dHJvbGxlci5oCkBAIC0yNiwxMCArMjYsMTAgQEAKICNpZm5kZWYgRmluZENvbnRyb2xsZXJfaAog
I2RlZmluZSBGaW5kQ29udHJvbGxlcl9oCiAKLSNpbmNsdWRlICJQYWdlT3ZlcmxheS5oIgogI2lu
Y2x1ZGUgIlNoYXJlYWJsZUJpdG1hcC5oIgogI2luY2x1ZGUgIldlYkZpbmRPcHRpb25zLmgiCiAj
aW5jbHVkZSA8V2ViQ29yZS9JbnRSZWN0Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9QYWdlT3Zlcmxh
eS5oPgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxl
Lmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgpAQCAtNDUsMTAgKzQ1LDkgQEAgY2xhc3MgUmFu
Z2U7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1jbGFzcyBQYWdlT3ZlcmxheTsKIGNsYXNzIFdl
YlBhZ2U7CiAKLWNsYXNzIEZpbmRDb250cm9sbGVyIDogcHJpdmF0ZSBQYWdlT3ZlcmxheTo6Q2xp
ZW50IHsKK2NsYXNzIEZpbmRDb250cm9sbGVyIDogcHJpdmF0ZSBXZWJDb3JlOjpQYWdlT3Zlcmxh
eTo6Q2xpZW50IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShGaW5kQ29udHJvbGxlcik7CiAK
IHB1YmxpYzoKQEAgLTcxLDExICs3MCwxMSBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgLy8g
UGFnZU92ZXJsYXk6OkNsaWVudC4KLSAgICB2aXJ0dWFsIHZvaWQgcGFnZU92ZXJsYXlEZXN0cm95
ZWQoUGFnZU92ZXJsYXkqKTsKLSAgICB2aXJ0dWFsIHZvaWQgd2lsbE1vdmVUb1dlYlBhZ2UoUGFn
ZU92ZXJsYXkqLCBXZWJQYWdlKik7Ci0gICAgdmlydHVhbCB2b2lkIGRpZE1vdmVUb1dlYlBhZ2Uo
UGFnZU92ZXJsYXkqLCBXZWJQYWdlKik7Ci0gICAgdmlydHVhbCBib29sIG1vdXNlRXZlbnQoUGFn
ZU92ZXJsYXkqLCBjb25zdCBXZWJNb3VzZUV2ZW50Jik7Ci0gICAgdmlydHVhbCB2b2lkIGRyYXdS
ZWN0KFBhZ2VPdmVybGF5KiwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiwgY29uc3QgV2ViQ29y
ZTo6SW50UmVjdCYgZGlydHlSZWN0KTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFnZU92ZXJsYXlEZXN0
cm95ZWQoV2ViQ29yZTo6UGFnZU92ZXJsYXkmKTsKKyAgICB2aXJ0dWFsIHZvaWQgd2lsbE1vdmVU
b1BhZ2UoV2ViQ29yZTo6UGFnZU92ZXJsYXkmLCBXZWJDb3JlOjpQYWdlKik7CisgICAgdmlydHVh
bCB2b2lkIGRpZE1vdmVUb1BhZ2UoV2ViQ29yZTo6UGFnZU92ZXJsYXkmLCBXZWJDb3JlOjpQYWdl
Kik7CisgICAgdmlydHVhbCBib29sIG1vdXNlRXZlbnQoV2ViQ29yZTo6UGFnZU92ZXJsYXkmLCBj
b25zdCBXZWJDb3JlOjpQbGF0Zm9ybU1vdXNlRXZlbnQmKTsKKyAgICB2aXJ0dWFsIHZvaWQgZHJh
d1JlY3QoV2ViQ29yZTo6UGFnZU92ZXJsYXkmLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmLCBj
b25zdCBXZWJDb3JlOjpJbnRSZWN0JiBkaXJ0eVJlY3QpOwogCiAgICAgVmVjdG9yPFdlYkNvcmU6
OkludFJlY3Q+IHJlY3RzRm9yVGV4dE1hdGNoZXMoKTsKICAgICBib29sIGdldEZpbmRJbmRpY2F0
b3JCaXRtYXBBbmRSZWN0KFdlYkNvcmU6OkZyYW1lJiwgU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUm
LCBXZWJDb3JlOjpJbnRSZWN0JiBzZWxlY3Rpb25SZWN0KTsKQEAgLTg4LDcgKzg3LDcgQEAgcHJp
dmF0ZToKICAgICB2b2lkIGRpZEhpZGVGaW5kSW5kaWNhdG9yKCk7CiAKICAgICBXZWJQYWdlKiBt
X3dlYlBhZ2U7Ci0gICAgUGFnZU92ZXJsYXkqIG1fZmluZFBhZ2VPdmVybGF5OworICAgIFdlYkNv
cmU6OlBhZ2VPdmVybGF5KiBtX2ZpbmRQYWdlT3ZlcmxheTsKIAogICAgIC8vIFdoZXRoZXIgdGhl
IFVJIHByb2Nlc3MgaXMgc2hvd2luZyB0aGUgZmluZCBpbmRpY2F0b3IuIE5vdGUgdGhhdCB0aGlz
IGNhbiBiZSB0cnVlIGV2ZW4gaWYKICAgICAvLyB0aGUgZmluZCBpbmRpY2F0b3IgaXNuJ3Qgc2hv
d2luZywgYnV0IGl0IHdpbGwgbmV2ZXIgYmUgZmFsc2Ugd2hlbiBpdCBpcyBzaG93aW5nLgpAQCAt
OTksNyArOTgsNyBAQCBwcml2YXRlOgogICAgIGludCBtX2ZvdW5kU3RyaW5nTWF0Y2hJbmRleDsK
IAogI2lmIFBMQVRGT1JNKElPUykKLSAgICBSZWZQdHI8UGFnZU92ZXJsYXk+IG1fZmluZEluZGlj
YXRvck92ZXJsYXk7CisgICAgUmVmUHRyPFdlYkNvcmU6OlBhZ2VPdmVybGF5PiBtX2ZpbmRJbmRp
Y2F0b3JPdmVybGF5OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxGaW5kSW5kaWNhdG9yT3ZlcmxheUNs
aWVudElPUz4gbV9maW5kSW5kaWNhdG9yT3ZlcmxheUNsaWVudDsKICNlbmRpZgogfTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVIb3N0Lmgg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlSG9zdC5oCmluZGV4
IDNmZDQ5NTQuLjY0ZWVjNTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9MYXllclRyZWVIb3N0LmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL0xheWVyVHJlZUhvc3QuaApAQCAtNDcsNyArNDcsNiBAQCBjbGFzcyBHcmFwaGljc0xh
eWVyRmFjdG9yeTsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLWNsYXNzIFBhZ2VPdmVybGF5Owog
Y2xhc3MgVXBkYXRlSW5mbzsKIGNsYXNzIFdlYlBhZ2U7CiAKQEAgLTcyLDExICs3MSw2IEBAIHB1
YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZGV2aWNlT3JQYWdlU2NhbGVGYWN0b3JDaGFuZ2VkKCkg
PSAwOwogICAgIHZpcnR1YWwgdm9pZCBwYWdlQmFja2dyb3VuZFRyYW5zcGFyZW5jeUNoYW5nZWQo
KSA9IDA7CiAKLSAgICB2aXJ0dWFsIHZvaWQgZGlkSW5zdGFsbFBhZ2VPdmVybGF5KFBhZ2VPdmVy
bGF5KikgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGRpZFVuaW5zdGFsbFBhZ2VPdmVybGF5KFBhZ2VP
dmVybGF5KikgeyB9Ci0gICAgdmlydHVhbCB2b2lkIHNldFBhZ2VPdmVybGF5TmVlZHNEaXNwbGF5
KFBhZ2VPdmVybGF5KiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpIHsgfQotICAgIHZpcnR1YWwg
dm9pZCBzZXRQYWdlT3ZlcmxheU9wYWNpdHkoUGFnZU92ZXJsYXkqLCBmbG9hdCkgeyB9Ci0KICAg
ICB2aXJ0dWFsIHZvaWQgcGF1c2VSZW5kZXJpbmcoKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgcmVz
dW1lUmVuZGVyaW5nKCkgeyB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9QYWdlT3ZlcmxheS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvUGFnZU92ZXJsYXkuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZDg4
MWI2Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9QYWdl
T3ZlcmxheS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyNTEgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJQYWdlT3ZlcmxheS5oIgotCi0jaW5jbHVk
ZSAiV2ViUGFnZS5oIgotI2luY2x1ZGUgIldlYlByb2Nlc3MuaCIKLSNpbmNsdWRlIDxXZWJDb3Jl
L0ZyYW1lVmlldy5oPgotI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+Ci0jaW5j
bHVkZSA8V2ViQ29yZS9NYWluRnJhbWUuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1BhZ2UuaD4KLSNp
bmNsdWRlIDxXZWJDb3JlL1Njcm9sbGJhclRoZW1lLmg+Ci0jaW5jbHVkZSA8d3RmL0N1cnJlbnRU
aW1lLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1uYW1lc3BhY2UgV2ViS2l0IHsK
LQotc3RhdGljIGNvbnN0IGRvdWJsZSBmYWRlQW5pbWF0aW9uRHVyYXRpb24gPSAwLjI7Ci1zdGF0
aWMgY29uc3QgZG91YmxlIGZhZGVBbmltYXRpb25GcmFtZVJhdGUgPSAzMDsKLQotUGFzc1JlZlB0
cjxQYWdlT3ZlcmxheT4gUGFnZU92ZXJsYXk6OmNyZWF0ZShDbGllbnQqIGNsaWVudCwgT3Zlcmxh
eVR5cGUgb3ZlcmxheVR5cGUpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBQYWdlT3Zlcmxh
eShjbGllbnQsIG92ZXJsYXlUeXBlKSk7Ci19Ci0KLVBhZ2VPdmVybGF5OjpQYWdlT3ZlcmxheShD
bGllbnQqIGNsaWVudCwgT3ZlcmxheVR5cGUgb3ZlcmxheVR5cGUpCi0gICAgOiBtX2NsaWVudChj
bGllbnQpCi0gICAgLCBtX3dlYlBhZ2UobnVsbHB0cikKLSAgICAsIG1fZmFkZUFuaW1hdGlvblRp
bWVyKFJ1bkxvb3A6Om1haW4oKSwgdGhpcywgJlBhZ2VPdmVybGF5OjpmYWRlQW5pbWF0aW9uVGlt
ZXJGaXJlZCkKLSAgICAsIG1fZmFkZUFuaW1hdGlvblN0YXJ0VGltZSgwKQotICAgICwgbV9mYWRl
QW5pbWF0aW9uRHVyYXRpb24oZmFkZUFuaW1hdGlvbkR1cmF0aW9uKQotICAgICwgbV9mYWRlQW5p
bWF0aW9uVHlwZShOb0FuaW1hdGlvbikKLSAgICAsIG1fZnJhY3Rpb25GYWRlZEluKDEpCi0gICAg
LCBtX292ZXJsYXlUeXBlKG92ZXJsYXlUeXBlKQotICAgICwgbV9iYWNrZ3JvdW5kQ29sb3IoQ29s
b3I6OnRyYW5zcGFyZW50KQotewotfQotCi1QYWdlT3ZlcmxheTo6flBhZ2VPdmVybGF5KCkKLXsK
LX0KLQotSW50UmVjdCBQYWdlT3ZlcmxheTo6Ym91bmRzKCkgY29uc3QKLXsKLSAgICBpZiAoIW1f
b3ZlcnJpZGVGcmFtZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBJbnRSZWN0KEludFBvaW50
KCksIG1fb3ZlcnJpZGVGcmFtZS5zaXplKCkpOwotCi0gICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcg
PSBtX3dlYlBhZ2UtPm1haW5GcmFtZVZpZXcoKTsKLQotICAgIHN3aXRjaCAobV9vdmVybGF5VHlw
ZSkgewotICAgIGNhc2UgT3ZlcmxheVR5cGU6OlZpZXc6IHsKLSAgICAgICAgaW50IHdpZHRoID0g
ZnJhbWVWaWV3LT53aWR0aCgpOwotICAgICAgICBpbnQgaGVpZ2h0ID0gZnJhbWVWaWV3LT5oZWln
aHQoKTsKLQotICAgICAgICBpZiAoIVNjcm9sbGJhclRoZW1lOjp0aGVtZSgpLT51c2VzT3Zlcmxh
eVNjcm9sbGJhcnMoKSkgewotICAgICAgICAgICAgaWYgKGZyYW1lVmlldy0+dmVydGljYWxTY3Jv
bGxiYXIoKSkKLSAgICAgICAgICAgICAgICB3aWR0aCAtPSBmcmFtZVZpZXctPnZlcnRpY2FsU2Ny
b2xsYmFyKCktPndpZHRoKCk7Ci0gICAgICAgICAgICBpZiAoZnJhbWVWaWV3LT5ob3Jpem9udGFs
U2Nyb2xsYmFyKCkpCi0gICAgICAgICAgICAgICAgaGVpZ2h0IC09IGZyYW1lVmlldy0+aG9yaXpv
bnRhbFNjcm9sbGJhcigpLT5oZWlnaHQoKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gSW50
UmVjdCgwLCAwLCB3aWR0aCwgaGVpZ2h0KTsKLSAgICB9Ci0gICAgY2FzZSBPdmVybGF5VHlwZTo6
RG9jdW1lbnQ6Ci0gICAgICAgIHJldHVybiBJbnRSZWN0KEludFBvaW50KCksIGZyYW1lVmlldy0+
Y29udGVudHNTaXplKCkpOwotICAgIH07Ci0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAg
ICByZXR1cm4gSW50UmVjdChJbnRQb2ludCgpLCBmcmFtZVZpZXctPmNvbnRlbnRzU2l6ZSgpKTsK
LX0KLQotSW50UmVjdCBQYWdlT3ZlcmxheTo6ZnJhbWUoKSBjb25zdAotewotICAgIGlmICghbV9v
dmVycmlkZUZyYW1lLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIG1fb3ZlcnJpZGVGcmFtZTsK
LQotICAgIHJldHVybiBib3VuZHMoKTsKLX0KLQotdm9pZCBQYWdlT3ZlcmxheTo6c2V0RnJhbWUo
SW50UmVjdCBmcmFtZSkKLXsKLSAgICBpZiAobV9vdmVycmlkZUZyYW1lID09IGZyYW1lKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBtX292ZXJyaWRlRnJhbWUgPSBmcmFtZTsKLQotICAgIGlmICht
X3dlYlBhZ2UpCi0gICAgICAgIG1fd2ViUGFnZS0+cGFnZU92ZXJsYXlDb250cm9sbGVyKCkuZGlk
Q2hhbmdlT3ZlcmxheUZyYW1lKCp0aGlzKTsKLX0KLQotdm9pZCBQYWdlT3ZlcmxheTo6c2V0QmFj
a2dyb3VuZENvbG9yKFJHQkEzMiBiYWNrZ3JvdW5kQ29sb3IpCi17Ci0gICAgaWYgKG1fYmFja2dy
b3VuZENvbG9yID09IGJhY2tncm91bmRDb2xvcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9i
YWNrZ3JvdW5kQ29sb3IgPSBiYWNrZ3JvdW5kQ29sb3I7Ci0KLSAgICBpZiAobV93ZWJQYWdlKQot
ICAgICAgICBtX3dlYlBhZ2UtPnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLmRpZENoYW5nZU92ZXJs
YXlCYWNrZ3JvdW5kQ29sb3IoKnRoaXMpOwotfQotCi12b2lkIFBhZ2VPdmVybGF5OjpzZXRQYWdl
KFdlYlBhZ2UqIHdlYlBhZ2UpCi17Ci0gICAgbV9jbGllbnQtPndpbGxNb3ZlVG9XZWJQYWdlKHRo
aXMsIHdlYlBhZ2UpOwotICAgIG1fd2ViUGFnZSA9IHdlYlBhZ2U7Ci0gICAgbV9jbGllbnQtPmRp
ZE1vdmVUb1dlYlBhZ2UodGhpcywgd2ViUGFnZSk7Ci0KLSAgICBtX2ZhZGVBbmltYXRpb25UaW1l
ci5zdG9wKCk7Ci19Ci0KLXZvaWQgUGFnZU92ZXJsYXk6OnNldE5lZWRzRGlzcGxheShjb25zdCBJ
bnRSZWN0JiBkaXJ0eVJlY3QpCi17Ci0gICAgaWYgKCFtX3dlYlBhZ2UpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIG1fd2ViUGFnZS0+cGFnZU92ZXJsYXlDb250cm9sbGVyKCkuc2V0UGFnZU92ZXJs
YXlPcGFjaXR5KCp0aGlzLCBtX2ZyYWN0aW9uRmFkZWRJbik7Ci0gICAgbV93ZWJQYWdlLT5wYWdl
T3ZlcmxheUNvbnRyb2xsZXIoKS5zZXRQYWdlT3ZlcmxheU5lZWRzRGlzcGxheSgqdGhpcywgZGly
dHlSZWN0KTsKLX0KLQotdm9pZCBQYWdlT3ZlcmxheTo6c2V0TmVlZHNEaXNwbGF5KCkKLXsKLSAg
ICBzZXROZWVkc0Rpc3BsYXkoYm91bmRzKCkpOwotfQotCi12b2lkIFBhZ2VPdmVybGF5OjpkcmF3
UmVjdChHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgSW50UmVjdCYgZGly
dHlSZWN0KQotewotICAgIC8vIElmIHRoZSBkaXJ0eSByZWN0IGlzIG91dHNpZGUgdGhlIGJvdW5k
cywgaWdub3JlIGl0LgotICAgIEludFJlY3QgcGFpbnRSZWN0ID0gaW50ZXJzZWN0aW9uKGRpcnR5
UmVjdCwgYm91bmRzKCkpOwotICAgIGlmIChwYWludFJlY3QuaXNFbXB0eSgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoZ3JhcGhp
Y3NDb250ZXh0KTsKLSAgICBtX2NsaWVudC0+ZHJhd1JlY3QodGhpcywgZ3JhcGhpY3NDb250ZXh0
LCBwYWludFJlY3QpOwotfQotICAgIAotYm9vbCBQYWdlT3ZlcmxheTo6bW91c2VFdmVudChjb25z
dCBXZWJNb3VzZUV2ZW50JiBtb3VzZUV2ZW50KQotewotICAgIEludFBvaW50IG1vdXNlUG9zaXRp
b25Jbk92ZXJsYXlDb29yZGluYXRlcyhtb3VzZUV2ZW50LnBvc2l0aW9uKCkpOwotCi0gICAgaWYg
KG1fb3ZlcmxheVR5cGUgPT0gUGFnZU92ZXJsYXk6Ok92ZXJsYXlUeXBlOjpEb2N1bWVudCkKLSAg
ICAgICAgbW91c2VQb3NpdGlvbkluT3ZlcmxheUNvb3JkaW5hdGVzID0gbV93ZWJQYWdlLT5jb3Jl
UGFnZSgpLT5tYWluRnJhbWUoKS52aWV3KCktPnJvb3RWaWV3VG9Db250ZW50cyhtb3VzZVBvc2l0
aW9uSW5PdmVybGF5Q29vcmRpbmF0ZXMpOwotCi0gICAgLy8gSWdub3JlIGV2ZW50cyBvdXRzaWRl
IHRoZSBib3VuZHMuCi0gICAgaWYgKCFib3VuZHMoKS5jb250YWlucyhtb3VzZVBvc2l0aW9uSW5P
dmVybGF5Q29vcmRpbmF0ZXMpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4g
bV9jbGllbnQtPm1vdXNlRXZlbnQodGhpcywgbW91c2VFdmVudCk7Ci19Ci0KLXZvaWQgUGFnZU92
ZXJsYXk6OmRpZFNjcm9sbEZyYW1lKEZyYW1lKiBmcmFtZSkKLXsKLSAgICBtX2NsaWVudC0+ZGlk
U2Nyb2xsRnJhbWUodGhpcywgZnJhbWUpOwotfQotCi1XS1R5cGVSZWYgUGFnZU92ZXJsYXk6OmNv
cHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWUoV0tTdHJpbmdSZWYgYXR0cmlidXRlLCBXS1R5
cGVSZWYgcGFyYW1ldGVyKQotewotICAgIHJldHVybiBtX2NsaWVudC0+Y29weUFjY2Vzc2liaWxp
dHlBdHRyaWJ1dGVWYWx1ZSh0aGlzLCBhdHRyaWJ1dGUsIHBhcmFtZXRlcik7Ci19Ci0KLVdLQXJy
YXlSZWYgUGFnZU92ZXJsYXk6OmNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlTmFtZXMoYm9vbCBw
YXJhbWV0ZXJpemVkTmFtZXMpCi17Ci0gICAgcmV0dXJuIG1fY2xpZW50LT5jb3B5QWNjZXNzaWJp
bGl0eUF0dHJpYnV0ZU5hbWVzKHRoaXMsIHBhcmFtZXRlcml6ZWROYW1lcyk7Ci19Ci0KLXZvaWQg
UGFnZU92ZXJsYXk6OnN0YXJ0RmFkZUluQW5pbWF0aW9uKCkKLXsKLSAgICBtX2ZyYWN0aW9uRmFk
ZWRJbiA9IDA7Ci0gICAgbV9mYWRlQW5pbWF0aW9uVHlwZSA9IEZhZGVJbkFuaW1hdGlvbjsKLQot
ICAgIHN0YXJ0RmFkZUFuaW1hdGlvbigpOwotfQotCi12b2lkIFBhZ2VPdmVybGF5OjpzdGFydEZh
ZGVPdXRBbmltYXRpb24oKQotewotICAgIG1fZnJhY3Rpb25GYWRlZEluID0gMTsKLSAgICBtX2Zh
ZGVBbmltYXRpb25UeXBlID0gRmFkZU91dEFuaW1hdGlvbjsKLQotICAgIHN0YXJ0RmFkZUFuaW1h
dGlvbigpOwotfQotCi12b2lkIFBhZ2VPdmVybGF5OjpzdG9wRmFkZU91dEFuaW1hdGlvbigpCi17
Ci0gICAgbV9mcmFjdGlvbkZhZGVkSW4gPSAxLjA7Ci0gICAgbV9mYWRlQW5pbWF0aW9uVGltZXIu
c3RvcCgpOwotfQotCi12b2lkIFBhZ2VPdmVybGF5OjpzdGFydEZhZGVBbmltYXRpb24oKQotewot
ICAgIG1fZmFkZUFuaW1hdGlvblN0YXJ0VGltZSA9IGN1cnJlbnRUaW1lKCk7Ci0gICAgbV9mYWRl
QW5pbWF0aW9uVGltZXIuc3RhcnRSZXBlYXRpbmcoMSAvIGZhZGVBbmltYXRpb25GcmFtZVJhdGUp
OwotfQotCi12b2lkIFBhZ2VPdmVybGF5OjpmYWRlQW5pbWF0aW9uVGltZXJGaXJlZCgpCi17Ci0g
ICAgZmxvYXQgYW5pbWF0aW9uUHJvZ3Jlc3MgPSAoY3VycmVudFRpbWUoKSAtIG1fZmFkZUFuaW1h
dGlvblN0YXJ0VGltZSkgLyBtX2ZhZGVBbmltYXRpb25EdXJhdGlvbjsKLQotICAgIGlmIChhbmlt
YXRpb25Qcm9ncmVzcyA+PSAxLjApCi0gICAgICAgIGFuaW1hdGlvblByb2dyZXNzID0gMS4wOwot
Ci0gICAgZG91YmxlIHNpbmUgPSBzaW4ocGlPdmVyVHdvRmxvYXQgKiBhbmltYXRpb25Qcm9ncmVz
cyk7Ci0gICAgZmxvYXQgZmFkZUFuaW1hdGlvblZhbHVlID0gc2luZSAqIHNpbmU7Ci0KLSAgICBt
X2ZyYWN0aW9uRmFkZWRJbiA9IChtX2ZhZGVBbmltYXRpb25UeXBlID09IEZhZGVJbkFuaW1hdGlv
bikgPyBmYWRlQW5pbWF0aW9uVmFsdWUgOiAxIC0gZmFkZUFuaW1hdGlvblZhbHVlOwotICAgIG1f
d2ViUGFnZS0+cGFnZU92ZXJsYXlDb250cm9sbGVyKCkuc2V0UGFnZU92ZXJsYXlPcGFjaXR5KCp0
aGlzLCBtX2ZyYWN0aW9uRmFkZWRJbik7Ci0KLSAgICBpZiAoYW5pbWF0aW9uUHJvZ3Jlc3MgPT0g
MS4wKSB7Ci0gICAgICAgIG1fZmFkZUFuaW1hdGlvblRpbWVyLnN0b3AoKTsKLQotICAgICAgICBi
b29sIHdhc0ZhZGluZ091dCA9IG1fZmFkZUFuaW1hdGlvblR5cGUgPT0gRmFkZU91dEFuaW1hdGlv
bjsKLSAgICAgICAgbV9mYWRlQW5pbWF0aW9uVHlwZSA9IE5vQW5pbWF0aW9uOwotCi0gICAgICAg
IC8vIElmIHRoaXMgd2FzIGEgZmFkZSBvdXQsIGdvIGFoZWFkIGFuZCB1bmluc3RhbGwgdGhlIHBh
Z2Ugb3ZlcmxheS4KLSAgICAgICAgaWYgKHdhc0ZhZGluZ091dCkKLSAgICAgICAgICAgIG1fd2Vi
UGFnZS0+dW5pbnN0YWxsUGFnZU92ZXJsYXkodGhpcywgUGFnZU92ZXJsYXk6OkZhZGVNb2RlOjpE
b05vdEZhZGUpOwotICAgIH0KLX0KLQotdm9pZCBQYWdlT3ZlcmxheTo6Y2xlYXIoKQotewotICAg
IG1fd2ViUGFnZS0+cGFnZU92ZXJsYXlDb250cm9sbGVyKCkuY2xlYXJQYWdlT3ZlcmxheSgqdGhp
cyk7Ci19Ci0KLVdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqIFBhZ2VPdmVybGF5OjpsYXllcigpCi17
Ci0gICAgcmV0dXJuIG1fd2ViUGFnZS0+cGFnZU92ZXJsYXlDb250cm9sbGVyKCkubGF5ZXJGb3JP
dmVybGF5KCp0aGlzKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvUGFnZU92ZXJsYXkuaCBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9QYWdlT3ZlcmxheS5oCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAzMjI1ZjBkLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9QYWdlT3ZlcmxheS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTM3ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFBhZ2VPdmVybGF5X2gKLSNkZWZpbmUgUGFnZU92ZXJs
YXlfaAotCi0jaW5jbHVkZSAiQVBJT2JqZWN0LmgiCi0jaW5jbHVkZSAiV0tCYXNlLmgiCi0jaW5j
bHVkZSA8V2ViQ29yZS9Db2xvci5oPgotI2luY2x1ZGUgPFdlYkNvcmUvSW50UmVjdC5oPgotI2lu
Y2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotY2xhc3MgRnJhbWU7Ci1jbGFzcyBHcmFwaGljc0NvbnRleHQ7Ci1j
bGFzcyBHcmFwaGljc0xheWVyOwotfQotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgV2Vi
RnJhbWU7Ci1jbGFzcyBXZWJNb3VzZUV2ZW50OwotY2xhc3MgV2ViUGFnZTsKLQotY2xhc3MgUGFn
ZU92ZXJsYXkgOiBwdWJsaWMgQVBJOjpPYmplY3RJbXBsPEFQSTo6T2JqZWN0OjpUeXBlOjpCdW5k
bGVQYWdlT3ZlcmxheT4gewotcHVibGljOgotICAgIGNsYXNzIENsaWVudCB7Ci0gICAgcHJvdGVj
dGVkOgotICAgICAgICB2aXJ0dWFsIH5DbGllbnQoKSB7IH0KLSAgICAKLSAgICBwdWJsaWM6Ci0g
ICAgICAgIHZpcnR1YWwgdm9pZCBwYWdlT3ZlcmxheURlc3Ryb3llZChQYWdlT3ZlcmxheSopID0g
MDsKLSAgICAgICAgdmlydHVhbCB2b2lkIHdpbGxNb3ZlVG9XZWJQYWdlKFBhZ2VPdmVybGF5Kiwg
V2ViUGFnZSopID0gMDsKLSAgICAgICAgdmlydHVhbCB2b2lkIGRpZE1vdmVUb1dlYlBhZ2UoUGFn
ZU92ZXJsYXkqLCBXZWJQYWdlKikgPSAwOwotICAgICAgICB2aXJ0dWFsIHZvaWQgZHJhd1JlY3Qo
UGFnZU92ZXJsYXkqLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmLCBjb25zdCBXZWJDb3JlOjpJ
bnRSZWN0JiBkaXJ0eVJlY3QpID0gMDsKLSAgICAgICAgdmlydHVhbCBib29sIG1vdXNlRXZlbnQo
UGFnZU92ZXJsYXkqLCBjb25zdCBXZWJNb3VzZUV2ZW50JikgPSAwOwotICAgICAgICB2aXJ0dWFs
IHZvaWQgZGlkU2Nyb2xsRnJhbWUoUGFnZU92ZXJsYXkqLCBXZWJDb3JlOjpGcmFtZSopIHsgfQot
Ci0gICAgICAgIHZpcnR1YWwgV0tUeXBlUmVmIGNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFs
dWUoUGFnZU92ZXJsYXkqLCBXS1N0cmluZ1JlZiAvKiBhdHRyaWJ1dGUgKi8sIFdLVHlwZVJlZiAv
KiBwYXJhbWV0ZXIgKi8pIHsgcmV0dXJuIDA7IH0KLSAgICAgICAgdmlydHVhbCBXS0FycmF5UmVm
IGNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlTmFtZXMoUGFnZU92ZXJsYXkqLCBib29sIC8qIHBh
cmFtZXRlcml6ZWROYW1lcyAqLykgeyByZXR1cm4gMDsgfQotICAgIH07Ci0KLSAgICBlbnVtIGNs
YXNzIE92ZXJsYXlUeXBlIHsKLSAgICAgICAgVmlldywgLy8gRml4ZWQgdG8gdGhlIHZpZXcgc2l6
ZTsgZG9lcyBub3Qgc2NhbGUgb3Igc2Nyb2xsIHdpdGggdGhlIGRvY3VtZW50LCByZXBhaW50cyBv
biBzY3JvbGwuCi0gICAgICAgIERvY3VtZW50LCAvLyBTY2FsZXMgYW5kIHNjcm9sbHMgd2l0aCB0
aGUgZG9jdW1lbnQuCi0gICAgfTsKLQotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFBhZ2VPdmVybGF5
PiBjcmVhdGUoQ2xpZW50KiwgT3ZlcmxheVR5cGUgPSBPdmVybGF5VHlwZTo6Vmlldyk7Ci0gICAg
dmlydHVhbCB+UGFnZU92ZXJsYXkoKTsKLQotICAgIHZvaWQgc2V0UGFnZShXZWJQYWdlKik7Ci0g
ICAgdm9pZCBzZXROZWVkc0Rpc3BsYXkoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgZGlydHlSZWN0
KTsKLSAgICB2b2lkIHNldE5lZWRzRGlzcGxheSgpOwotCi0gICAgdm9pZCBkcmF3UmVjdChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQmLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBkaXJ0eVJlY3Qp
OwotICAgIGJvb2wgbW91c2VFdmVudChjb25zdCBXZWJNb3VzZUV2ZW50Jik7Ci0gICAgdm9pZCBk
aWRTY3JvbGxGcmFtZShXZWJDb3JlOjpGcmFtZSopOwotCi0gICAgV0tUeXBlUmVmIGNvcHlBY2Nl
c3NpYmlsaXR5QXR0cmlidXRlVmFsdWUoV0tTdHJpbmdSZWYgYXR0cmlidXRlLCBXS1R5cGVSZWYg
cGFyYW1ldGVyKTsKLSAgICBXS0FycmF5UmVmIGNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlTmFt
ZXMoYm9vbCBwYXJhbWV0ZXJpemVkTmFtZXMpOwotICAgIAotICAgIHZvaWQgc3RhcnRGYWRlSW5B
bmltYXRpb24oKTsKLSAgICB2b2lkIHN0YXJ0RmFkZU91dEFuaW1hdGlvbigpOwotICAgIHZvaWQg
c3RvcEZhZGVPdXRBbmltYXRpb24oKTsKLQotICAgIHZvaWQgY2xlYXIoKTsKLQotICAgIENsaWVu
dCogY2xpZW50KCkgY29uc3QgeyByZXR1cm4gbV9jbGllbnQ7IH0KLQotICAgIGVudW0gY2xhc3Mg
RmFkZU1vZGUgeyBEb05vdEZhZGUsIEZhZGUgfTsKLQotICAgIE92ZXJsYXlUeXBlIG92ZXJsYXlU
eXBlKCkgeyByZXR1cm4gbV9vdmVybGF5VHlwZTsgfQotCi0gICAgV2ViQ29yZTo6SW50UmVjdCBi
b3VuZHMoKSBjb25zdDsKLSAgICBXZWJDb3JlOjpJbnRSZWN0IGZyYW1lKCkgY29uc3Q7Ci0gICAg
dm9pZCBzZXRGcmFtZShXZWJDb3JlOjpJbnRSZWN0KTsKLQotICAgIFdlYkNvcmU6OlJHQkEzMiBi
YWNrZ3JvdW5kQ29sb3IoKSBjb25zdCB7IHJldHVybiBtX2JhY2tncm91bmRDb2xvcjsgfQotICAg
IHZvaWQgc2V0QmFja2dyb3VuZENvbG9yKFdlYkNvcmU6OlJHQkEzMik7Ci0KLSAgICBXZWJDb3Jl
OjpHcmFwaGljc0xheWVyKiBsYXllcigpOwotICAgIAotcHJvdGVjdGVkOgotICAgIGV4cGxpY2l0
IFBhZ2VPdmVybGF5KENsaWVudCosIE92ZXJsYXlUeXBlKTsKLQotcHJpdmF0ZToKLSAgICB2b2lk
IHN0YXJ0RmFkZUFuaW1hdGlvbigpOwotICAgIHZvaWQgZmFkZUFuaW1hdGlvblRpbWVyRmlyZWQo
KTsKLQotICAgIENsaWVudCogbV9jbGllbnQ7Ci0gICAgV2ViUGFnZSogbV93ZWJQYWdlOwotCi0g
ICAgUnVuTG9vcDo6VGltZXI8UGFnZU92ZXJsYXk+IG1fZmFkZUFuaW1hdGlvblRpbWVyOwotICAg
IGRvdWJsZSBtX2ZhZGVBbmltYXRpb25TdGFydFRpbWU7Ci0gICAgZG91YmxlIG1fZmFkZUFuaW1h
dGlvbkR1cmF0aW9uOwotCi0gICAgZW51bSBGYWRlQW5pbWF0aW9uVHlwZSB7Ci0gICAgICAgIE5v
QW5pbWF0aW9uLAotICAgICAgICBGYWRlSW5BbmltYXRpb24sCi0gICAgICAgIEZhZGVPdXRBbmlt
YXRpb24sCi0gICAgfTsKLQotICAgIEZhZGVBbmltYXRpb25UeXBlIG1fZmFkZUFuaW1hdGlvblR5
cGU7Ci0gICAgZmxvYXQgbV9mcmFjdGlvbkZhZGVkSW47Ci0KLSAgICBPdmVybGF5VHlwZSBtX292
ZXJsYXlUeXBlOwotICAgIFdlYkNvcmU6OkludFJlY3QgbV9vdmVycmlkZUZyYW1lOwotCi0gICAg
V2ViQ29yZTo6UkdCQTMyIG1fYmFja2dyb3VuZENvbG9yOwotfTsKLQotfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0Ci0KLSNlbmRpZiAvLyBQYWdlT3ZlcmxheV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvUGFnZU92ZXJsYXlDb250cm9sbGVyLmNwcCBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9QYWdlT3ZlcmxheUNvbnRyb2xsZXIuY3BwCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NjQ1N2M1Li4wMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9QYWdlT3ZlcmxheUNvbnRyb2xsZXIuY3BwCisr
KyAvZGV2L251bGwKQEAgLTEsMzE0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29u
ZmlnLmgiCi0jaW5jbHVkZSAiUGFnZU92ZXJsYXlDb250cm9sbGVyLmgiCi0KLSNpbmNsdWRlICJE
cmF3aW5nQXJlYS5oIgotI2luY2x1ZGUgIlBhZ2VPdmVybGF5LmgiCi0jaW5jbHVkZSAiV2ViUGFn
ZS5oIgotI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWUuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1l
Vmlldy5oPgotI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+Ci0jaW5jbHVkZSA8
V2ViQ29yZS9HcmFwaGljc0xheWVyLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9NYWluRnJhbWUuaD4K
LSNpbmNsdWRlIDxXZWJDb3JlL1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmg+Ci0jaW5jbHVkZSA8V2Vi
Q29yZS9TZXR0aW5ncy5oPgotI2luY2x1ZGUgPFdlYkNvcmUvVGlsZWRCYWNraW5nLmg+Ci0KLXVz
aW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotUGFnZU92ZXJs
YXlDb250cm9sbGVyOjpQYWdlT3ZlcmxheUNvbnRyb2xsZXIoV2ViUGFnZSYgd2ViUGFnZSkKLSAg
ICA6IG1fd2ViUGFnZSh3ZWJQYWdlKQotewotfQotCi12b2lkIFBhZ2VPdmVybGF5Q29udHJvbGxl
cjo6aW5pdGlhbGl6ZSgpCi17Ci0gICAgQVNTRVJUKCFtX2RvY3VtZW50T3ZlcmxheVJvb3RMYXll
cik7Ci0gICAgQVNTRVJUKCFtX3ZpZXdPdmVybGF5Um9vdExheWVyKTsKLQotICAgIG1fZG9jdW1l
bnRPdmVybGF5Um9vdExheWVyID0gR3JhcGhpY3NMYXllcjo6Y3JlYXRlKG1fd2ViUGFnZS5kcmF3
aW5nQXJlYSgpLT5ncmFwaGljc0xheWVyRmFjdG9yeSgpLCAqdGhpcyk7Ci0gICAgbV92aWV3T3Zl
cmxheVJvb3RMYXllciA9IEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZShtX3dlYlBhZ2UuZHJhd2luZ0Fy
ZWEoKS0+Z3JhcGhpY3NMYXllckZhY3RvcnkoKSwgKnRoaXMpOwotI2lmbmRlZiBOREVCVUcKLSAg
ICBtX2RvY3VtZW50T3ZlcmxheVJvb3RMYXllci0+c2V0TmFtZSgiUGFnZSBPdmVybGF5IGNvbnRh
aW5lciAoZG9jdW1lbnQtcmVsYXRpdmUpIik7Ci0gICAgbV92aWV3T3ZlcmxheVJvb3RMYXllci0+
c2V0TmFtZSgiUGFnZSBPdmVybGF5IGNvbnRhaW5lciAodmlldy1yZWxhdGl2ZSkiKTsKLSNlbmRp
ZgotfQotCi1zdGF0aWMgdm9pZCB1cGRhdGVPdmVybGF5R2VvbWV0cnkoUGFnZU92ZXJsYXkmIG92
ZXJsYXksIEdyYXBoaWNzTGF5ZXImIGdyYXBoaWNzTGF5ZXIpCi17Ci0gICAgSW50UmVjdCBvdmVy
bGF5RnJhbWUgPSBvdmVybGF5LmZyYW1lKCk7Ci0KLSAgICBpZiAob3ZlcmxheUZyYW1lLmxvY2F0
aW9uKCkgPT0gZ3JhcGhpY3NMYXllci5wb3NpdGlvbigpICYmIG92ZXJsYXlGcmFtZS5zaXplKCkg
PT0gZ3JhcGhpY3NMYXllci5zaXplKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGdyYXBoaWNz
TGF5ZXIuc2V0UG9zaXRpb24ob3ZlcmxheUZyYW1lLmxvY2F0aW9uKCkpOwotICAgIGdyYXBoaWNz
TGF5ZXIuc2V0U2l6ZShvdmVybGF5RnJhbWUuc2l6ZSgpKTsKLX0KLQotdm9pZCBQYWdlT3Zlcmxh
eUNvbnRyb2xsZXI6Omluc3RhbGxQYWdlT3ZlcmxheShQYXNzUmVmUHRyPFBhZ2VPdmVybGF5PiBw
YWdlT3ZlcmxheSwgUGFnZU92ZXJsYXk6OkZhZGVNb2RlIGZhZGVNb2RlKQotewotICAgIEFTU0VS
VChtX2RvY3VtZW50T3ZlcmxheVJvb3RMYXllcik7Ci0gICAgQVNTRVJUKG1fdmlld092ZXJsYXlS
b290TGF5ZXIpOwotCi0gICAgUmVmUHRyPFBhZ2VPdmVybGF5PiBvdmVybGF5ID0gcGFnZU92ZXJs
YXk7Ci0KLSAgICBpZiAobV9wYWdlT3ZlcmxheXMuY29udGFpbnMob3ZlcmxheSkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIG1fcGFnZU92ZXJsYXlzLmFwcGVuZChvdmVybGF5KTsKLSAgICBvdmVy
bGF5LT5zZXRQYWdlKCZtX3dlYlBhZ2UpOwotCi0gICAgaWYgKGZhZGVNb2RlID09IFBhZ2VPdmVy
bGF5OjpGYWRlTW9kZTo6RmFkZSkKLSAgICAgICAgb3ZlcmxheS0+c3RhcnRGYWRlSW5BbmltYXRp
b24oKTsKLQotICAgIHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0xheWVyPiBsYXllciA9IEdyYXBo
aWNzTGF5ZXI6OmNyZWF0ZShtX3dlYlBhZ2UuZHJhd2luZ0FyZWEoKS0+Z3JhcGhpY3NMYXllckZh
Y3RvcnkoKSwgKnRoaXMpOwotICAgIGxheWVyLT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50M0Qo
KSk7Ci0gICAgbGF5ZXItPnNldEJhY2tncm91bmRDb2xvcihvdmVybGF5LT5iYWNrZ3JvdW5kQ29s
b3IoKSk7Ci0gICAgdXBkYXRlT3ZlcmxheUdlb21ldHJ5KCpvdmVybGF5LCAqbGF5ZXIpOwotI2lm
bmRlZiBOREVCVUcKLSAgICBsYXllci0+c2V0TmFtZSgiUGFnZSBPdmVybGF5IGNvbnRlbnQiKTsK
LSNlbmRpZgotCi0gICAgdXBkYXRlU2V0dGluZ3NGb3JMYXllcigqbGF5ZXIpOwotCi0gICAgc3dp
dGNoIChvdmVybGF5LT5vdmVybGF5VHlwZSgpKSB7Ci0gICAgY2FzZSBQYWdlT3ZlcmxheTo6T3Zl
cmxheVR5cGU6OlZpZXc6Ci0gICAgICAgIG1fdmlld092ZXJsYXlSb290TGF5ZXItPmFkZENoaWxk
KGxheWVyLmdldCgpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQYWdlT3ZlcmxheTo6T3Zl
cmxheVR5cGU6OkRvY3VtZW50OgotICAgICAgICBtX2RvY3VtZW50T3ZlcmxheVJvb3RMYXllci0+
YWRkQ2hpbGQobGF5ZXIuZ2V0KCkpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBtX292
ZXJsYXlHcmFwaGljc0xheWVycy5zZXQob3ZlcmxheS5nZXQoKSwgV1RGOjptb3ZlKGxheWVyKSk7
Ci0KLSAgICB1cGRhdGVGb3JjZVN5bmNocm9ub3VzU2Nyb2xsTGF5ZXJQb3NpdGlvblVwZGF0ZXMo
KTsKLX0KLQotdm9pZCBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6OnVuaW5zdGFsbFBhZ2VPdmVybGF5
KFBhZ2VPdmVybGF5KiBvdmVybGF5LCBQYWdlT3ZlcmxheTo6RmFkZU1vZGUgZmFkZU1vZGUpCi17
Ci0gICAgaWYgKGZhZGVNb2RlID09IFBhZ2VPdmVybGF5OjpGYWRlTW9kZTo6RmFkZSkgewotICAg
ICAgICBvdmVybGF5LT5zdGFydEZhZGVPdXRBbmltYXRpb24oKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIG92ZXJsYXktPnNldFBhZ2UobnVsbHB0cik7Ci0KLSAgICBtX292ZXJsYXlH
cmFwaGljc0xheWVycy50YWtlKG92ZXJsYXkpLT5yZW1vdmVGcm9tUGFyZW50KCk7Ci0KLSAgICBz
aXplX3Qgb3ZlcmxheUluZGV4ID0gbV9wYWdlT3ZlcmxheXMuZmluZChvdmVybGF5KTsKLSAgICBB
U1NFUlQob3ZlcmxheUluZGV4ICE9IG5vdEZvdW5kKTsKLSAgICBtX3BhZ2VPdmVybGF5cy5yZW1v
dmUob3ZlcmxheUluZGV4KTsKLQotICAgIHVwZGF0ZUZvcmNlU3luY2hyb25vdXNTY3JvbGxMYXll
clBvc2l0aW9uVXBkYXRlcygpOwotfQotCi12b2lkIFBhZ2VPdmVybGF5Q29udHJvbGxlcjo6dXBk
YXRlRm9yY2VTeW5jaHJvbm91c1Njcm9sbExheWVyUG9zaXRpb25VcGRhdGVzKCkKLXsKLSNpZiBF
TkFCTEUoQVNZTkNfU0NST0xMSU5HKQotICAgIGJvb2wgZm9yY2VTeW5jaHJvbm91c1Njcm9sbExh
eWVyUG9zaXRpb25VcGRhdGVzID0gZmFsc2U7Ci0KLSAgICBmb3IgKGF1dG8mIG92ZXJsYXkgOiBt
X3BhZ2VPdmVybGF5cykgewotICAgICAgICBpZiAob3ZlcmxheS0+b3ZlcmxheVR5cGUoKSA9PSBQ
YWdlT3ZlcmxheTo6T3ZlcmxheVR5cGU6OlZpZXcpCi0gICAgICAgICAgICBmb3JjZVN5bmNocm9u
b3VzU2Nyb2xsTGF5ZXJQb3NpdGlvblVwZGF0ZXMgPSB0cnVlOwotICAgIH0KLQotICAgIGlmIChQ
YWdlKiBwYWdlID0gbV93ZWJQYWdlLmNvcmVQYWdlKCkpIHsKLSAgICAgICAgaWYgKFNjcm9sbGlu
Z0Nvb3JkaW5hdG9yKiBzY3JvbGxpbmdDb29yZGluYXRvciA9IHBhZ2UtPnNjcm9sbGluZ0Nvb3Jk
aW5hdG9yKCkpCi0gICAgICAgICAgICBzY3JvbGxpbmdDb29yZGluYXRvci0+c2V0Rm9yY2VTeW5j
aHJvbm91c1Njcm9sbExheWVyUG9zaXRpb25VcGRhdGVzKGZvcmNlU3luY2hyb25vdXNTY3JvbGxM
YXllclBvc2l0aW9uVXBkYXRlcyk7Ci0gICAgfQotI2VuZGlmCi19Ci0KLXZvaWQgUGFnZU92ZXJs
YXlDb250cm9sbGVyOjpzZXRQYWdlT3ZlcmxheU5lZWRzRGlzcGxheShQYWdlT3ZlcmxheSYgb3Zl
cmxheSwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgZGlydHlSZWN0KQotewotICAgIEFTU0VSVCht
X3BhZ2VPdmVybGF5cy5jb250YWlucygmb3ZlcmxheSkpOwotICAgIEdyYXBoaWNzTGF5ZXImIGdy
YXBoaWNzTGF5ZXIgPSAqbV9vdmVybGF5R3JhcGhpY3NMYXllcnMuZ2V0KCZvdmVybGF5KTsKLQot
ICAgIGlmICghZ3JhcGhpY3NMYXllci5kcmF3c0NvbnRlbnQoKSkgewotICAgICAgICBncmFwaGlj
c0xheWVyLnNldERyYXdzQ29udGVudCh0cnVlKTsKLSAgICAgICAgdXBkYXRlT3ZlcmxheUdlb21l
dHJ5KG92ZXJsYXksIGdyYXBoaWNzTGF5ZXIpOwotICAgIH0KLQotICAgIGdyYXBoaWNzTGF5ZXIu
c2V0TmVlZHNEaXNwbGF5SW5SZWN0KGRpcnR5UmVjdCk7Ci19Ci0KLXZvaWQgUGFnZU92ZXJsYXlD
b250cm9sbGVyOjpzZXRQYWdlT3ZlcmxheU9wYWNpdHkoUGFnZU92ZXJsYXkmIG92ZXJsYXksIGZs
b2F0IG9wYWNpdHkpCi17Ci0gICAgQVNTRVJUKG1fcGFnZU92ZXJsYXlzLmNvbnRhaW5zKCZvdmVy
bGF5KSk7Ci0gICAgbV9vdmVybGF5R3JhcGhpY3NMYXllcnMuZ2V0KCZvdmVybGF5KS0+c2V0T3Bh
Y2l0eShvcGFjaXR5KTsKLX0KLQotdm9pZCBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6OmNsZWFyUGFn
ZU92ZXJsYXkoUGFnZU92ZXJsYXkmIG92ZXJsYXkpCi17Ci0gICAgQVNTRVJUKG1fcGFnZU92ZXJs
YXlzLmNvbnRhaW5zKCZvdmVybGF5KSk7Ci0gICAgbV9vdmVybGF5R3JhcGhpY3NMYXllcnMuZ2V0
KCZvdmVybGF5KS0+c2V0RHJhd3NDb250ZW50KGZhbHNlKTsKLX0KLQotR3JhcGhpY3NMYXllciog
UGFnZU92ZXJsYXlDb250cm9sbGVyOjpsYXllckZvck92ZXJsYXkoUGFnZU92ZXJsYXkmIG92ZXJs
YXkpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKG1fcGFnZU92ZXJsYXlzLmNvbnRhaW5zKCZvdmVybGF5
KSk7Ci0gICAgcmV0dXJuIG1fb3ZlcmxheUdyYXBoaWNzTGF5ZXJzLmdldCgmb3ZlcmxheSk7Ci19
Ci0KLXZvaWQgUGFnZU92ZXJsYXlDb250cm9sbGVyOjpkaWRDaGFuZ2VWaWV3U2l6ZSgpCi17Ci0g
ICAgZm9yIChhdXRvJiBvdmVybGF5QW5kTGF5ZXIgOiBtX292ZXJsYXlHcmFwaGljc0xheWVycykg
ewotICAgICAgICBpZiAob3ZlcmxheUFuZExheWVyLmtleS0+b3ZlcmxheVR5cGUoKSA9PSBQYWdl
T3ZlcmxheTo6T3ZlcmxheVR5cGU6OlZpZXcpCi0gICAgICAgICAgICB1cGRhdGVPdmVybGF5R2Vv
bWV0cnkoKm92ZXJsYXlBbmRMYXllci5rZXksICpvdmVybGF5QW5kTGF5ZXIudmFsdWUpOwotICAg
IH0KLX0KLQotdm9pZCBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6OmRpZENoYW5nZURvY3VtZW50U2l6
ZSgpCi17Ci0gICAgZm9yIChhdXRvJiBvdmVybGF5QW5kTGF5ZXIgOiBtX292ZXJsYXlHcmFwaGlj
c0xheWVycykgewotICAgICAgICBpZiAob3ZlcmxheUFuZExheWVyLmtleS0+b3ZlcmxheVR5cGUo
KSA9PSBQYWdlT3ZlcmxheTo6T3ZlcmxheVR5cGU6OkRvY3VtZW50KQotICAgICAgICAgICAgdXBk
YXRlT3ZlcmxheUdlb21ldHJ5KCpvdmVybGF5QW5kTGF5ZXIua2V5LCAqb3ZlcmxheUFuZExheWVy
LnZhbHVlKTsKLSAgICB9Ci19Ci0KLXZvaWQgUGFnZU92ZXJsYXlDb250cm9sbGVyOjpkaWRDaGFu
Z2VQcmVmZXJlbmNlcygpCi17Ci0gICAgZm9yIChhdXRvJiBncmFwaGljc0xheWVyIDogbV9vdmVy
bGF5R3JhcGhpY3NMYXllcnMudmFsdWVzKCkpCi0gICAgICAgIHVwZGF0ZVNldHRpbmdzRm9yTGF5
ZXIoKmdyYXBoaWNzTGF5ZXIpOwotfQotCi12b2lkIFBhZ2VPdmVybGF5Q29udHJvbGxlcjo6ZGlk
Q2hhbmdlRGV2aWNlU2NhbGVGYWN0b3IoKQotewotICAgIG1fZG9jdW1lbnRPdmVybGF5Um9vdExh
eWVyLT5ub3RlRGV2aWNlT3JQYWdlU2NhbGVGYWN0b3JDaGFuZ2VkSW5jbHVkaW5nRGVzY2VuZGFu
dHMoKTsKLSAgICBtX3ZpZXdPdmVybGF5Um9vdExheWVyLT5ub3RlRGV2aWNlT3JQYWdlU2NhbGVG
YWN0b3JDaGFuZ2VkSW5jbHVkaW5nRGVzY2VuZGFudHMoKTsKLQotICAgIGZvciAoYXV0byYgZ3Jh
cGhpY3NMYXllciA6IG1fb3ZlcmxheUdyYXBoaWNzTGF5ZXJzLnZhbHVlcygpKQotICAgICAgICBn
cmFwaGljc0xheWVyLT5zZXROZWVkc0Rpc3BsYXkoKTsKLX0KLQotdm9pZCBQYWdlT3ZlcmxheUNv
bnRyb2xsZXI6OmRpZENoYW5nZUV4cG9zZWRSZWN0KCkKLXsKLSAgICBtX3dlYlBhZ2UuZHJhd2lu
Z0FyZWEoKS0+c2NoZWR1bGVDb21wb3NpdGluZ0xheWVyRmx1c2goKTsKLX0KLQotdm9pZCBQYWdl
T3ZlcmxheUNvbnRyb2xsZXI6OmRpZFNjcm9sbEZyYW1lKEZyYW1lKiBmcmFtZSkKLXsKLSAgICBm
b3IgKGF1dG8mIG92ZXJsYXlBbmRMYXllciA6IG1fb3ZlcmxheUdyYXBoaWNzTGF5ZXJzKSB7Ci0g
ICAgICAgIGlmIChvdmVybGF5QW5kTGF5ZXIua2V5LT5vdmVybGF5VHlwZSgpID09IFBhZ2VPdmVy
bGF5OjpPdmVybGF5VHlwZTo6VmlldyB8fCAhZnJhbWUtPmlzTWFpbkZyYW1lKCkpCi0gICAgICAg
ICAgICBvdmVybGF5QW5kTGF5ZXIudmFsdWUtPnNldE5lZWRzRGlzcGxheSgpOwotICAgICAgICBv
dmVybGF5QW5kTGF5ZXIua2V5LT5kaWRTY3JvbGxGcmFtZShmcmFtZSk7Ci0gICAgfQotfQotCi12
b2lkIFBhZ2VPdmVybGF5Q29udHJvbGxlcjo6Zmx1c2hQYWdlT3ZlcmxheUxheWVycyhGbG9hdFJl
Y3QgdmlzaWJsZVJlY3QpCi17Ci0gICAgbV92aWV3T3ZlcmxheVJvb3RMYXllci0+Zmx1c2hDb21w
b3NpdGluZ1N0YXRlKHZpc2libGVSZWN0KTsKLX0KLQotdm9pZCBQYWdlT3ZlcmxheUNvbnRyb2xs
ZXI6OnVwZGF0ZVNldHRpbmdzRm9yTGF5ZXIoR3JhcGhpY3NMYXllciYgbGF5ZXIpCi17Ci0gICAg
U2V0dGluZ3MmIHNldHRpbmdzID0gbV93ZWJQYWdlLmNvcmVQYWdlKCktPnNldHRpbmdzKCk7Ci0g
ICAgbGF5ZXIuc2V0QWNjZWxlcmF0ZXNEcmF3aW5nKHNldHRpbmdzLmFjY2VsZXJhdGVkRHJhd2lu
Z0VuYWJsZWQoKSk7Ci0gICAgbGF5ZXIuc2V0U2hvd0RlYnVnQm9yZGVyKHNldHRpbmdzLnNob3dE
ZWJ1Z0JvcmRlcnMoKSk7Ci0gICAgbGF5ZXIuc2V0U2hvd1JlcGFpbnRDb3VudGVyKHNldHRpbmdz
LnNob3dSZXBhaW50Q291bnRlcigpKTsKLX0KLQotYm9vbCBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6
OmhhbmRsZU1vdXNlRXZlbnQoY29uc3QgV2ViTW91c2VFdmVudCYgbW91c2VFdmVudCkKLXsKLSAg
ICBpZiAoIW1fcGFnZU92ZXJsYXlzLnNpemUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgZm9yIChhdXRvIGl0ID0gbV9wYWdlT3ZlcmxheXMucmJlZ2luKCksIGVuZCA9IG1fcGFnZU92
ZXJsYXlzLnJlbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGlmICgoKml0KS0+bW91
c2VFdmVudChtb3VzZUV2ZW50KSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQot
ICAgIHJldHVybiBmYWxzZTsKLX0KLQotV0tUeXBlUmVmIFBhZ2VPdmVybGF5Q29udHJvbGxlcjo6
Y29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZShXS1N0cmluZ1JlZiBhdHRyaWJ1dGUsIFdL
VHlwZVJlZiBwYXJhbWV0ZXIpCi17Ci0gICAgaWYgKCFtX3BhZ2VPdmVybGF5cy5zaXplKCkpCi0g
ICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgZm9yIChhdXRvIGl0ID0gbV9wYWdlT3Zlcmxh
eXMucmJlZ2luKCksIGVuZCA9IG1fcGFnZU92ZXJsYXlzLnJlbmQoKTsgaXQgIT0gZW5kOyArK2l0
KSB7Ci0gICAgICAgIGlmIChXS1R5cGVSZWYgdmFsdWUgPSAoKml0KS0+Y29weUFjY2Vzc2liaWxp
dHlBdHRyaWJ1dGVWYWx1ZShhdHRyaWJ1dGUsIHBhcmFtZXRlcikpCi0gICAgICAgICAgICByZXR1
cm4gdmFsdWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLVdLQXJyYXlSZWYg
UGFnZU92ZXJsYXlDb250cm9sbGVyOjpjb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZXNOYW1lcyhi
b29sIHBhcmFtZXRlcml6ZWROYW1lcykKLXsKLSAgICBpZiAoIW1fcGFnZU92ZXJsYXlzLnNpemUo
KSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBmb3IgKGF1dG8gaXQgPSBtX3BhZ2VP
dmVybGF5cy5yYmVnaW4oKSwgZW5kID0gbV9wYWdlT3ZlcmxheXMucmVuZCgpOyBpdCAhPSBlbmQ7
ICsraXQpIHsKLSAgICAgICAgaWYgKFdLQXJyYXlSZWYgdmFsdWUgPSAoKml0KS0+Y29weUFjY2Vz
c2liaWxpdHlBdHRyaWJ1dGVOYW1lcyhwYXJhbWV0ZXJpemVkTmFtZXMpKQotICAgICAgICAgICAg
cmV0dXJuIHZhbHVlOwotICAgIH0KLQotICAgIHJldHVybiBudWxscHRyOwotfQotCi12b2lkIFBh
Z2VPdmVybGF5Q29udHJvbGxlcjo6cGFpbnRDb250ZW50cyhjb25zdCBXZWJDb3JlOjpHcmFwaGlj
c0xheWVyKiBncmFwaGljc0xheWVyLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNz
Q29udGV4dCwgV2ViQ29yZTo6R3JhcGhpY3NMYXllclBhaW50aW5nUGhhc2UsIGNvbnN0IFdlYkNv
cmU6OkZsb2F0UmVjdCYgY2xpcFJlY3QpCi17Ci0gICAgZm9yIChhdXRvIGl0ID0gbV9vdmVybGF5
R3JhcGhpY3NMYXllcnMuYmVnaW4oKSwgZW5kID0gbV9vdmVybGF5R3JhcGhpY3NMYXllcnMuZW5k
KCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBpZiAoaXQtPnZhbHVlLmdldCgpICE9IGdy
YXBoaWNzTGF5ZXIpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBHcmFwaGljc0Nv
bnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoZ3JhcGhpY3NDb250ZXh0KTsKLSAgICAgICAgZ3Jh
cGhpY3NDb250ZXh0LmNsaXAoY2xpcFJlY3QpOwotICAgICAgICBpdC0+a2V5LT5kcmF3UmVjdChn
cmFwaGljc0NvbnRleHQsIGVuY2xvc2luZ0ludFJlY3QoY2xpcFJlY3QpKTsKLQotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotfQotCi1mbG9hdCBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6OmRldmljZVNj
YWxlRmFjdG9yKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV93ZWJQYWdlLmNvcmVQYWdlKCktPmRl
dmljZVNjYWxlRmFjdG9yKCk7Ci19Ci0KLXZvaWQgUGFnZU92ZXJsYXlDb250cm9sbGVyOjpub3Rp
ZnlGbHVzaFJlcXVpcmVkKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKQotewotICAgIGlm
IChtX3dlYlBhZ2UuZHJhd2luZ0FyZWEoKSkKLSAgICAgICAgbV93ZWJQYWdlLmRyYXdpbmdBcmVh
KCktPnNjaGVkdWxlQ29tcG9zaXRpbmdMYXllckZsdXNoKCk7Ci19Ci0KLXZvaWQgUGFnZU92ZXJs
YXlDb250cm9sbGVyOjpkaWRDaGFuZ2VPdmVybGF5RnJhbWUoUGFnZU92ZXJsYXkmIG92ZXJsYXkp
Ci17Ci0gICAgQVNTRVJUKG1fcGFnZU92ZXJsYXlzLmNvbnRhaW5zKCZvdmVybGF5KSk7Ci0gICAg
dXBkYXRlT3ZlcmxheUdlb21ldHJ5KG92ZXJsYXksICptX292ZXJsYXlHcmFwaGljc0xheWVycy5n
ZXQoJm92ZXJsYXkpKTsKLX0KLQotdm9pZCBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6OmRpZENoYW5n
ZU92ZXJsYXlCYWNrZ3JvdW5kQ29sb3IoUGFnZU92ZXJsYXkmIG92ZXJsYXkpCi17Ci0gICAgQVNT
RVJUKG1fcGFnZU92ZXJsYXlzLmNvbnRhaW5zKCZvdmVybGF5KSk7Ci0gICAgbV9vdmVybGF5R3Jh
cGhpY3NMYXllcnMuZ2V0KCZvdmVybGF5KS0+c2V0QmFja2dyb3VuZENvbG9yKG92ZXJsYXkuYmFj
a2dyb3VuZENvbG9yKCkpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9QYWdlT3ZlcmxheUNvbnRyb2xsZXIu
aCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9QYWdlT3ZlcmxheUNvbnRyb2xs
ZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjUxODJkNS4uMDAwMDAwMAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvUGFnZU92ZXJsYXlDb250cm9sbGVy
LmgKKysrIC9kZXYvbnVsbApAQCAtMSw5OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBQ
YWdlT3ZlcmxheUNvbnRyb2xsZXJfaAotI2RlZmluZSBQYWdlT3ZlcmxheUNvbnRyb2xsZXJfaAot
Ci0jaW5jbHVkZSAiUGFnZU92ZXJsYXkuaCIKLSNpbmNsdWRlICJXS0Jhc2UuaCIKLSNpbmNsdWRl
IDxXZWJDb3JlL0dyYXBoaWNzTGF5ZXJDbGllbnQuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5o
PgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLWNsYXNzIEZyYW1lOwotfQotCi1uYW1lc3BhY2UgV2ViS2l0IHsK
LQotY2xhc3MgV2ViTW91c2VFdmVudDsKLWNsYXNzIFdlYlBhZ2U7Ci0KLWNsYXNzIFBhZ2VPdmVy
bGF5Q29udHJvbGxlciA6IHB1YmxpYyBXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2xpZW50IHsKLXB1
YmxpYzoKLSAgICBQYWdlT3ZlcmxheUNvbnRyb2xsZXIoV2ViUGFnZSYpOwotCi0gICAgdm9pZCBp
bml0aWFsaXplKCk7Ci0KLSAgICBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiBkb2N1bWVudE92ZXJs
YXlSb290TGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX2RvY3VtZW50T3ZlcmxheVJvb3RMYXllci5n
ZXQoKTsgfQotICAgIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqIHZpZXdPdmVybGF5Um9vdExheWVy
KCkgY29uc3QgeyByZXR1cm4gbV92aWV3T3ZlcmxheVJvb3RMYXllci5nZXQoKTsgfQotCi0gICAg
dm9pZCBpbnN0YWxsUGFnZU92ZXJsYXkoUGFzc1JlZlB0cjxQYWdlT3ZlcmxheT4sIFBhZ2VPdmVy
bGF5OjpGYWRlTW9kZSk7Ci0gICAgdm9pZCB1bmluc3RhbGxQYWdlT3ZlcmxheShQYWdlT3Zlcmxh
eSosIFBhZ2VPdmVybGF5OjpGYWRlTW9kZSk7Ci0KLSAgICB2b2lkIHNldFBhZ2VPdmVybGF5TmVl
ZHNEaXNwbGF5KFBhZ2VPdmVybGF5JiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOwotICAgIHZv
aWQgc2V0UGFnZU92ZXJsYXlPcGFjaXR5KFBhZ2VPdmVybGF5JiwgZmxvYXQpOwotICAgIHZvaWQg
Y2xlYXJQYWdlT3ZlcmxheShQYWdlT3ZlcmxheSYpOwotICAgIFdlYkNvcmU6OkdyYXBoaWNzTGF5
ZXIqIGxheWVyRm9yT3ZlcmxheShQYWdlT3ZlcmxheSYpIGNvbnN0OwotCi0gICAgdm9pZCBkaWRD
aGFuZ2VWaWV3U2l6ZSgpOwotICAgIHZvaWQgZGlkQ2hhbmdlRG9jdW1lbnRTaXplKCk7Ci0gICAg
dm9pZCBkaWRDaGFuZ2VQcmVmZXJlbmNlcygpOwotICAgIHZvaWQgZGlkQ2hhbmdlRGV2aWNlU2Nh
bGVGYWN0b3IoKTsKLSAgICB2b2lkIGRpZENoYW5nZUV4cG9zZWRSZWN0KCk7Ci0gICAgdm9pZCBk
aWRTY3JvbGxGcmFtZShXZWJDb3JlOjpGcmFtZSopOwotCi0gICAgdm9pZCBkaWRDaGFuZ2VPdmVy
bGF5RnJhbWUoUGFnZU92ZXJsYXkmKTsKLSAgICB2b2lkIGRpZENoYW5nZU92ZXJsYXlCYWNrZ3Jv
dW5kQ29sb3IoUGFnZU92ZXJsYXkmKTsKLQotICAgIHZvaWQgZmx1c2hQYWdlT3ZlcmxheUxheWVy
cyhXZWJDb3JlOjpGbG9hdFJlY3QpOwotCi0gICAgYm9vbCBoYW5kbGVNb3VzZUV2ZW50KGNvbnN0
IFdlYk1vdXNlRXZlbnQmKTsKLQotICAgIC8vIEZJWE1FOiBXZSBzaG91bGRuJ3QgdXNlIEFQSSB0
eXBlcyBoZXJlLgotICAgIFdLVHlwZVJlZiBjb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVl
KFdLU3RyaW5nUmVmIGF0dHJpYnV0ZSwgV0tUeXBlUmVmIHBhcmFtZXRlcik7Ci0gICAgV0tBcnJh
eVJlZiBjb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZXNOYW1lcyhib29sIHBhcmFtZXRlcml6ZWRO
YW1lcyk7Ci0KLXByaXZhdGU6Ci0gICAgdm9pZCB1cGRhdGVTZXR0aW5nc0ZvckxheWVyKFdlYkNv
cmU6OkdyYXBoaWNzTGF5ZXImKTsKLSAgICB2b2lkIHVwZGF0ZUZvcmNlU3luY2hyb25vdXNTY3Jv
bGxMYXllclBvc2l0aW9uVXBkYXRlcygpOwotCi0gICAgLy8gV2ViQ29yZTo6R3JhcGhpY3NMYXll
ckNsaWVudAotICAgIHZpcnR1YWwgdm9pZCBub3RpZnlGbHVzaFJlcXVpcmVkKGNvbnN0IFdlYkNv
cmU6OkdyYXBoaWNzTGF5ZXIqKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250
ZW50cyhjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiwgV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0JiwgV2ViQ29yZTo6R3JhcGhpY3NMYXllclBhaW50aW5nUGhhc2UsIGNvbnN0IFdlYkNvcmU6
OkZsb2F0UmVjdCYgY2xpcFJlY3QpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgZmxvYXQgZGV2aWNl
U2NhbGVGYWN0b3IoKSBjb25zdCBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkU2tp
cExheWVySW5EdW1wKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKSBjb25zdCBvdmVycmlk
ZSB7IHJldHVybiB0cnVlOyB9Ci0KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6R3JhcGhp
Y3NMYXllcj4gbV9kb2N1bWVudE92ZXJsYXlSb290TGF5ZXI7Ci0gICAgc3RkOjp1bmlxdWVfcHRy
PFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI+IG1fdmlld092ZXJsYXlSb290TGF5ZXI7Ci0gICAgSGFz
aE1hcDxQYWdlT3ZlcmxheSosIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpHcmFwaGljc0xheWVy
Pj4gbV9vdmVybGF5R3JhcGhpY3NMYXllcnM7Ci0gICAgVmVjdG9yPFJlZlB0cjxQYWdlT3Zlcmxh
eT4+IG1fcGFnZU92ZXJsYXlzOwotICAgIFdlYlBhZ2UmIG1fd2ViUGFnZTsKLX07Ci0KLX0gLy8g
bmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gUGFnZU92ZXJsYXlDb250cm9sbGVyX2gKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9TZXJ2aWNlc092ZXJs
YXlDb250cm9sbGVyLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvU2Vydmlj
ZXNPdmVybGF5Q29udHJvbGxlci5oCmluZGV4IDNiMDlkM2QuLjQxMWQzM2MgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9TZXJ2aWNlc092ZXJsYXlDb250cm9s
bGVyLmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1NlcnZpY2VzT3Zl
cmxheUNvbnRyb2xsZXIuaApAQCAtMjgsOSArMjgsOSBAQAogCiAjaWYgRU5BQkxFKFNFUlZJQ0Vf
Q09OVFJPTFMpIHx8IEVOQUJMRShURUxFUEhPTkVfTlVNQkVSX0RFVEVDVElPTikKIAotI2luY2x1
ZGUgIlBhZ2VPdmVybGF5LmgiCiAjaW5jbHVkZSAiV2ViRnJhbWUuaCIKICNpbmNsdWRlIDxXZWJD
b3JlL0dyYXBoaWNzTGF5ZXJDbGllbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1BhZ2VPdmVybGF5
Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SYW5nZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvVGltZXIu
aD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgpAQCAtMzksNyArMzksNiBAQCB0eXBlZGVm
IHZvaWQqIERESGlnaGxpZ2h0UmVmOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBMYXlv
dXRSZWN0OwotCiBzdHJ1Y3QgR2FwUmVjdHM7CiB9CiAKQEAgLTQ3LDcgKzQ2LDcgQEAgbmFtZXNw
YWNlIFdlYktpdCB7CiAKIGNsYXNzIFdlYlBhZ2U7CiAKLWNsYXNzIFNlcnZpY2VzT3ZlcmxheUNv
bnRyb2xsZXIgOiBwcml2YXRlIFBhZ2VPdmVybGF5OjpDbGllbnQgeworY2xhc3MgU2VydmljZXNP
dmVybGF5Q29udHJvbGxlciA6IHByaXZhdGUgV2ViQ29yZTo6UGFnZU92ZXJsYXk6OkNsaWVudCB7
CiBwdWJsaWM6CiAgICAgU2VydmljZXNPdmVybGF5Q29udHJvbGxlcihXZWJQYWdlJik7CiAgICAg
flNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIoKTsKQEAgLTk4LDEyICs5NywxMiBAQCBwcml2YXRl
OgogICAgIH07CiAKICAgICAvLyBQYWdlT3ZlcmxheTo6Q2xpZW50Ci0gICAgdmlydHVhbCB2b2lk
IHBhZ2VPdmVybGF5RGVzdHJveWVkKFBhZ2VPdmVybGF5Kikgb3ZlcnJpZGU7Ci0gICAgdmlydHVh
bCB2b2lkIHdpbGxNb3ZlVG9XZWJQYWdlKFBhZ2VPdmVybGF5KiwgV2ViUGFnZSopIG92ZXJyaWRl
OwotICAgIHZpcnR1YWwgdm9pZCBkaWRNb3ZlVG9XZWJQYWdlKFBhZ2VPdmVybGF5KiwgV2ViUGFn
ZSopIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBkcmF3UmVjdChQYWdlT3ZlcmxheSosIFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGRpcnR5UmVj
dCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBib29sIG1vdXNlRXZlbnQoUGFnZU92ZXJsYXkqLCBj
b25zdCBXZWJNb3VzZUV2ZW50Jikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGRpZFNjcm9s
bEZyYW1lKFBhZ2VPdmVybGF5KiwgV2ViQ29yZTo6RnJhbWUqKSBvdmVycmlkZTsKKyAgICB2aXJ0
dWFsIHZvaWQgcGFnZU92ZXJsYXlEZXN0cm95ZWQoV2ViQ29yZTo6UGFnZU92ZXJsYXkmKSBvdmVy
cmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgd2lsbE1vdmVUb1BhZ2UoV2ViQ29yZTo6UGFnZU92ZXJs
YXkmLCBXZWJDb3JlOjpQYWdlKikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGRpZE1vdmVU
b1BhZ2UoV2ViQ29yZTo6UGFnZU92ZXJsYXkmLCBXZWJDb3JlOjpQYWdlKikgb3ZlcnJpZGU7Cisg
ICAgdmlydHVhbCB2b2lkIGRyYXdSZWN0KFdlYkNvcmU6OlBhZ2VPdmVybGF5JiwgV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0JiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgZGlydHlSZWN0KSBvdmVy
cmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wgbW91c2VFdmVudChXZWJDb3JlOjpQYWdlT3ZlcmxheSYs
IGNvbnN0IFdlYkNvcmU6OlBsYXRmb3JtTW91c2VFdmVudCYpIG92ZXJyaWRlOworICAgIHZpcnR1
YWwgdm9pZCBkaWRTY3JvbGxGcmFtZShXZWJDb3JlOjpQYWdlT3ZlcmxheSYsIFdlYkNvcmU6OkZy
YW1lJikgb3ZlcnJpZGU7CiAKICAgICB2b2lkIGNyZWF0ZU92ZXJsYXlJZk5lZWRlZCgpOwogICAg
IHZvaWQgaGFuZGxlQ2xpY2soY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmLCBIaWdobGlnaHQmKTsK
QEAgLTEzOSw3ICsxMzgsNyBAQCBwcml2YXRlOgogICAgIFdlYlBhZ2UmIHdlYlBhZ2UoKSBjb25z
dCB7IHJldHVybiBtX3dlYlBhZ2U7IH0KIAogICAgIFdlYlBhZ2UmIG1fd2ViUGFnZTsKLSAgICBQ
YWdlT3ZlcmxheSogbV9zZXJ2aWNlc092ZXJsYXk7CisgICAgV2ViQ29yZTo6UGFnZU92ZXJsYXkq
IG1fc2VydmljZXNPdmVybGF5OwogCiAgICAgUmVmUHRyPEhpZ2hsaWdodD4gbV9hY3RpdmVIaWdo
bGlnaHQ7CiAgICAgUmVmUHRyPEhpZ2hsaWdodD4gbV9uZXh0QWN0aXZlSGlnaGxpZ2h0OwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCmluZGV4IDZlYTc2
YWMuLjcyYTBmY2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJQYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
UGFnZS5jcHAKQEAgLTMyNyw3ICszMjcsNiBAQCBXZWJQYWdlOjpXZWJQYWdlKHVpbnQ2NF90IHBh
Z2VJRCwgY29uc3QgV2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVycyYgcGFyYW1ldGVycykKICNpZiBF
TkFCTEUoV0VCR0wpCiAgICAgLCBtX3N5c3RlbVdlYkdMUG9saWN5KFdlYkdMQWxsb3dDcmVhdGlv
bikKICNlbmRpZgotICAgICwgbV9wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKnRoaXMpCiB7CiAgICAg
QVNTRVJUKG1fcGFnZUlEKTsKICAgICAvLyBGSVhNRTogVGhpcyBpcyBhIG5vbi1pZGVhbCBsb2Nh
dGlvbiBmb3IgdGhpcyBTZXR0aW5nIGFuZApAQCAtMzY2LDcgKzM2NSw2IEBAIFdlYlBhZ2U6Oldl
YlBhZ2UodWludDY0X3QgcGFnZUlELCBjb25zdCBXZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzJiBw
YXJhbWV0ZXJzKQogCiAgICAgbV9kcmF3aW5nQXJlYSA9IERyYXdpbmdBcmVhOjpjcmVhdGUoKnRo
aXMsIHBhcmFtZXRlcnMpOwogICAgIG1fZHJhd2luZ0FyZWEtPnNldFBhaW50aW5nRW5hYmxlZChm
YWxzZSk7Ci0gICAgbV9wYWdlT3ZlcmxheUNvbnRyb2xsZXIuaW5pdGlhbGl6ZSgpOwogCiAjaWYg
RU5BQkxFKEFTWU5DX1NDUk9MTElORykKICAgICBtX3VzZUFzeW5jU2Nyb2xsaW5nID0gcGFyYW1l
dGVycy5zdG9yZS5nZXRCb29sVmFsdWVGb3JLZXkoV2ViUHJlZmVyZW5jZXNLZXk6OnRocmVhZGVk
U2Nyb2xsaW5nRW5hYmxlZEtleSgpKTsKQEAgLTEyMjYsOCArMTIyNCw2IEBAIHZvaWQgV2ViUGFn
ZTo6c2V0U2l6ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiB2aWV3U2l6ZSkKICAgICBpZiAodmll
dy0+dXNlRml4ZWRMYXlvdXQoKSkKICAgICAgICAgc2VuZFZpZXdwb3J0QXR0cmlidXRlc0NoYW5n
ZWQoKTsKICNlbmRpZgotCi0gICAgbV9wYWdlT3ZlcmxheUNvbnRyb2xsZXIuZGlkQ2hhbmdlVmll
d1NpemUoKTsKIH0KIAogI2lmIFVTRShUSUxFRF9CQUNLSU5HX1NUT1JFKQpAQCAtMTQ1Myw4ICsx
NDQ5LDYgQEAgdm9pZCBXZWJQYWdlOjpzZXREZXZpY2VTY2FsZUZhY3RvcihmbG9hdCBzY2FsZUZh
Y3RvcikKIAogICAgIGlmIChtX2RyYXdpbmdBcmVhLT5sYXllclRyZWVIb3N0KCkpCiAgICAgICAg
IG1fZHJhd2luZ0FyZWEtPmxheWVyVHJlZUhvc3QoKS0+ZGV2aWNlT3JQYWdlU2NhbGVGYWN0b3JD
aGFuZ2VkKCk7Ci0KLSAgICBtX3BhZ2VPdmVybGF5Q29udHJvbGxlci5kaWRDaGFuZ2VEZXZpY2VT
Y2FsZUZhY3RvcigpOwogfQogCiBmbG9hdCBXZWJQYWdlOjpkZXZpY2VTY2FsZUZhY3RvcigpIGNv
bnN0CkBAIC0xNTc3LDE2ICsxNTcxLDYgQEAgdm9pZCBXZWJQYWdlOjpwb3N0SW5qZWN0ZWRCdW5k
bGVNZXNzYWdlKGNvbnN0IFN0cmluZyYgbWVzc2FnZU5hbWUsIElQQzo6TWVzc2FnZUQKICAgICBp
bmplY3RlZEJ1bmRsZS0+ZGlkUmVjZWl2ZU1lc3NhZ2VUb1BhZ2UodGhpcywgbWVzc2FnZU5hbWUs
IG1lc3NhZ2VCb2R5LmdldCgpKTsKIH0KIAotdm9pZCBXZWJQYWdlOjppbnN0YWxsUGFnZU92ZXJs
YXkoUGFzc1JlZlB0cjxQYWdlT3ZlcmxheT4gcGFnZU92ZXJsYXksIFBhZ2VPdmVybGF5OjpGYWRl
TW9kZSBmYWRlTW9kZSkKLXsKLSAgICBtX3BhZ2VPdmVybGF5Q29udHJvbGxlci5pbnN0YWxsUGFn
ZU92ZXJsYXkocGFnZU92ZXJsYXksIGZhZGVNb2RlKTsKLX0KLQotdm9pZCBXZWJQYWdlOjp1bmlu
c3RhbGxQYWdlT3ZlcmxheShQYWdlT3ZlcmxheSogcGFnZU92ZXJsYXksIFBhZ2VPdmVybGF5OjpG
YWRlTW9kZSBmYWRlTW9kZSkKLXsKLSAgICBtX3BhZ2VPdmVybGF5Q29udHJvbGxlci51bmluc3Rh
bGxQYWdlT3ZlcmxheShwYWdlT3ZlcmxheSwgZmFkZU1vZGUpOwotfQotCiAjaWYgIVBMQVRGT1JN
KElPUykKIHZvaWQgV2ViUGFnZTo6c2V0SGVhZGVyUGFnZUJhbm5lcihQYXNzUmVmUHRyPFBhZ2VC
YW5uZXI+IHBhZ2VCYW5uZXIpCiB7CkBAIC0xOTE0LDcgKzE4OTgsNyBAQCB2b2lkIFdlYlBhZ2U6
Om1vdXNlRXZlbnQoY29uc3QgV2ViTW91c2VFdmVudCYgbW91c2VFdmVudCkKICAgICAgICAgcmV0
dXJuOwogICAgIH0KICNlbmRpZgotICAgIGJvb2wgaGFuZGxlZCA9IG1fcGFnZU92ZXJsYXlDb250
cm9sbGVyLmhhbmRsZU1vdXNlRXZlbnQobW91c2VFdmVudCk7CisgICAgYm9vbCBoYW5kbGVkID0g
ZmFsc2U7CiAKICNpZiAhUExBVEZPUk0oSU9TKQogICAgIGlmICghaGFuZGxlZCAmJiBtX2hlYWRl
ckJhbm5lcikKQEAgLTE5NDAsNyArMTkyNCw3IEBAIHZvaWQgV2ViUGFnZTo6bW91c2VFdmVudChj
b25zdCBXZWJNb3VzZUV2ZW50JiBtb3VzZUV2ZW50KQogCiB2b2lkIFdlYlBhZ2U6Om1vdXNlRXZl
bnRTeW5jRm9yVGVzdGluZyhjb25zdCBXZWJNb3VzZUV2ZW50JiBtb3VzZUV2ZW50LCBib29sJiBo
YW5kbGVkKQogewotICAgIGhhbmRsZWQgPSBtX3BhZ2VPdmVybGF5Q29udHJvbGxlci5oYW5kbGVN
b3VzZUV2ZW50KG1vdXNlRXZlbnQpOworICAgIGhhbmRsZWQgPSBmYWxzZTsKICNpZiAhUExBVEZP
Uk0oSU9TKQogICAgIGlmICghaGFuZGxlZCAmJiBtX2hlYWRlckJhbm5lcikKICAgICAgICAgaGFu
ZGxlZCA9IG1faGVhZGVyQmFubmVyLT5tb3VzZUV2ZW50KG1vdXNlRXZlbnQpOwpAQCAtMjg2OSw4
ICsyODUzLDYgQEAgdm9pZCBXZWJQYWdlOjp1cGRhdGVQcmVmZXJlbmNlcyhjb25zdCBXZWJQcmVm
ZXJlbmNlc1N0b3JlJiBzdG9yZSkKIAogICAgIGlmIChtX2RyYXdpbmdBcmVhKQogICAgICAgICBt
X2RyYXdpbmdBcmVhLT51cGRhdGVQcmVmZXJlbmNlcyhzdG9yZSk7Ci0KLSAgICBtX3BhZ2VPdmVy
bGF5Q29udHJvbGxlci5kaWRDaGFuZ2VQcmVmZXJlbmNlcygpOwogfQogCiAjaWYgUExBVEZPUk0o
Q09DT0EpCkBAIC00ODExLDggKzQ3OTMsNiBAQCBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyJiBX
ZWJQYWdlOjpzZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyKCkKIAogdm9pZCBXZWJQYWdlOjpkaWRD
aGFuZ2VTY3JvbGxPZmZzZXRGb3JGcmFtZShGcmFtZSogZnJhbWUpCiB7Ci0gICAgbV9wYWdlT3Zl
cmxheUNvbnRyb2xsZXIuZGlkU2Nyb2xsRnJhbWUoZnJhbWUpOwotCiAgICAgaWYgKCFmcmFtZS0+
aXNNYWluRnJhbWUoKSkKICAgICAgICAgcmV0dXJuOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAppbmRleCBjYTQ2YmEwYS4uNDI1NWE4OCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCkBAIC00MSw3ICs0MSw2IEBA
CiAjaW5jbHVkZSAiTGF5ZXJUcmVlSG9zdC5oIgogI2luY2x1ZGUgIk1lc3NhZ2VSZWNlaXZlci5o
IgogI2luY2x1ZGUgIk1lc3NhZ2VTZW5kZXIuaCIKLSNpbmNsdWRlICJQYWdlT3ZlcmxheUNvbnRy
b2xsZXIuaCIKICNpbmNsdWRlICJQbHVnaW4uaCIKICNpbmNsdWRlICJTYW5kYm94RXh0ZW5zaW9u
LmgiCiAjaW5jbHVkZSAiU2hhcmVhYmxlQml0bWFwLmgiCkBAIC0xNDAsNyArMTM5LDYgQEAgY2xh
c3MgRHJhd2luZ0FyZWE7CiBjbGFzcyBJbmplY3RlZEJ1bmRsZUJhY2tGb3J3YXJkTGlzdDsKIGNs
YXNzIE5vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlcjsKIGNsYXNzIFBhZ2VCYW5u
ZXI7Ci1jbGFzcyBQYWdlT3ZlcmxheTsKIGNsYXNzIFBsdWdpblZpZXc7CiBjbGFzcyBTZXJ2aWNl
c092ZXJsYXlDb250cm9sbGVyOwogY2xhc3MgVmlzaWJsZUNvbnRlbnRSZWN0VXBkYXRlSW5mbzsK
QEAgLTIwNiw4ICsyMDQsNiBAQCBwdWJsaWM6CiAgICAgCiAgICAgSW5qZWN0ZWRCdW5kbGVCYWNr
Rm9yd2FyZExpc3QqIGJhY2tGb3J3YXJkTGlzdCgpOwogICAgIERyYXdpbmdBcmVhKiBkcmF3aW5n
QXJlYSgpIGNvbnN0IHsgcmV0dXJuIG1fZHJhd2luZ0FyZWEuZ2V0KCk7IH0KLSAgICBjb25zdCBQ
YWdlT3ZlcmxheUNvbnRyb2xsZXImIHBhZ2VPdmVybGF5Q29udHJvbGxlcigpIGNvbnN0IHsgcmV0
dXJuIG1fcGFnZU92ZXJsYXlDb250cm9sbGVyOyB9Ci0gICAgUGFnZU92ZXJsYXlDb250cm9sbGVy
JiBwYWdlT3ZlcmxheUNvbnRyb2xsZXIoKSB7IHJldHVybiBtX3BhZ2VPdmVybGF5Q29udHJvbGxl
cjsgfQogI2lmIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpCiAgICAgV2ViQ29yZTo6U2Nyb2xsaW5n
Q29vcmRpbmF0b3IqIHNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkgY29uc3Q7CiAjZW5kaWYKQEAgLTQx
Niw4ICs0MTIsNiBAQCBwdWJsaWM6CiAKICAgICBib29sIHdpbmRvd0lzRm9jdXNlZCgpIGNvbnN0
OwogICAgIGJvb2wgd2luZG93QW5kV2ViUGFnZUFyZUZvY3VzZWQoKSBjb25zdDsKLSAgICB2b2lk
IGluc3RhbGxQYWdlT3ZlcmxheShQYXNzUmVmUHRyPFBhZ2VPdmVybGF5PiwgUGFnZU92ZXJsYXk6
OkZhZGVNb2RlID0gUGFnZU92ZXJsYXk6OkZhZGVNb2RlOjpEb05vdEZhZGUpOwotICAgIHZvaWQg
dW5pbnN0YWxsUGFnZU92ZXJsYXkoUGFnZU92ZXJsYXkqLCBQYWdlT3ZlcmxheTo6RmFkZU1vZGUg
PSBQYWdlT3ZlcmxheTo6RmFkZU1vZGU6OkRvTm90RmFkZSk7CiAKICNpZiAhUExBVEZPUk0oSU9T
KQogICAgIHZvaWQgc2V0SGVhZGVyUGFnZUJhbm5lcihQYXNzUmVmUHRyPFBhZ2VCYW5uZXI+KTsK
QEAgLTgyMiw5ICs4MTYsNiBAQCBwdWJsaWM6CiAgICAgV2ViQ29yZTo6U2Nyb2xsUGlubmluZ0Jl
aGF2aW9yIHNjcm9sbFBpbm5pbmdCZWhhdmlvcigpIHsgcmV0dXJuIG1fc2Nyb2xsUGlubmluZ0Jl
aGF2aW9yOyB9CiAgICAgdm9pZCBzZXRTY3JvbGxQaW5uaW5nQmVoYXZpb3IodWludDMyX3QgLyog
V2ViQ29yZTo6U2Nyb2xsUGlubmluZ0JlaGF2aW9yICovIHBpbm5pbmcpOwogCi0gICAgV0tUeXBl
UmVmIHBhZ2VPdmVybGF5Q29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZShXS1N0cmluZ1Jl
ZiBhdHRyaWJ1dGUsIFdLVHlwZVJlZiBwYXJhbWV0ZXIpOwotICAgIFdLQXJyYXlSZWYgcGFnZU92
ZXJsYXlDb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZXNOYW1lcyhib29sIHBhcmFtZXRlcml6ZWRO
YW1lcyk7Ci0KICAgICBQYXNzUmVmUHRyPFdlYkNvcmU6OkRvY3VtZW50TG9hZGVyPiBjcmVhdGVE
b2N1bWVudExvYWRlcihXZWJDb3JlOjpGcmFtZSYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVx
dWVzdCYsIGNvbnN0IFdlYkNvcmU6OlN1YnN0aXR1dGVEYXRhJik7CiAKICAgICB2b2lkIGdldEJ5
dGVjb2RlUHJvZmlsZSh1aW50NjRfdCBjYWxsYmFja0lEKTsKQEAgLTEyNzgsOCArMTI2OSw2IEBA
IHByaXZhdGU6CiAjaWYgRU5BQkxFKFNFUlZJQ0VfQ09OVFJPTFMpIHx8IEVOQUJMRShURUxFUEhP
TkVfTlVNQkVSX0RFVEVDVElPTikKICAgICBzdGQ6OnVuaXF1ZV9wdHI8U2VydmljZXNPdmVybGF5
Q29udHJvbGxlcj4gbV9zZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOwogI2VuZGlmCi0KLSAgICBQ
YWdlT3ZlcmxheUNvbnRyb2xsZXIgbV9wYWdlT3ZlcmxheUNvbnRyb2xsZXI7CiB9OwogCiB9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJQYWdlT3ZlcmxheS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViUGFnZU92ZXJsYXkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLjFkMmUzZDUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViUGFnZU92ZXJsYXkuY3BwCkBAIC0wLDAgKzEsMTEzIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYlBhZ2VPdmVybGF5LmgiCisKKyNp
bmNsdWRlICJXZWJGcmFtZS5oIgorI2luY2x1ZGUgIldlYlBhZ2UuaCIKKyNpbmNsdWRlIDxXZWJD
b3JlL0dyYXBoaWNzTGF5ZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1BhZ2VPdmVybGF5Lmg+CisK
K3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKworUGFzc1Jl
ZlB0cjxXZWJQYWdlT3ZlcmxheT4gV2ViUGFnZU92ZXJsYXk6OmNyZWF0ZShXZWJQYWdlT3Zlcmxh
eTo6Q2xpZW50JiBjbGllbnQsIFBhZ2VPdmVybGF5OjpPdmVybGF5VHlwZSBvdmVybGF5VHlwZSkK
K3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFdlYlBhZ2VPdmVybGF5KGNsaWVudCwgb3Zlcmxh
eVR5cGUpKTsKK30KKworV2ViUGFnZU92ZXJsYXk6OldlYlBhZ2VPdmVybGF5KFdlYlBhZ2VPdmVy
bGF5OjpDbGllbnQmIGNsaWVudCwgUGFnZU92ZXJsYXk6Ok92ZXJsYXlUeXBlIG92ZXJsYXlUeXBl
KQorICAgIDogbV9vdmVybGF5KFBhZ2VPdmVybGF5OjpjcmVhdGUoKnRoaXMsIG92ZXJsYXlUeXBl
KSkKKyAgICAsIG1fY2xpZW50KGNsaWVudCkKK3sKK30KKworV2ViUGFnZU92ZXJsYXk6On5XZWJQ
YWdlT3ZlcmxheSgpCit7Cit9CisKK3ZvaWQgV2ViUGFnZU92ZXJsYXk6OnNldE5lZWRzRGlzcGxh
eShjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpCit7CisgICAgbV9vdmVybGF5LT5zZXROZWVkc0Rp
c3BsYXkoZGlydHlSZWN0KTsKK30KKwordm9pZCBXZWJQYWdlT3ZlcmxheTo6c2V0TmVlZHNEaXNw
bGF5KCkKK3sKKyAgICBtX292ZXJsYXktPnNldE5lZWRzRGlzcGxheSgpOworfQorCit2b2lkIFdl
YlBhZ2VPdmVybGF5OjpjbGVhcigpCit7CisgICAgbV9vdmVybGF5LT5jbGVhcigpOworfQorCit2
b2lkIFdlYlBhZ2VPdmVybGF5OjpwYWdlT3ZlcmxheURlc3Ryb3llZChQYWdlT3ZlcmxheSYpCit7
CisgICAgbV9jbGllbnQucGFnZU92ZXJsYXlEZXN0cm95ZWQoKnRoaXMpOworfQorCit2b2lkIFdl
YlBhZ2VPdmVybGF5Ojp3aWxsTW92ZVRvUGFnZShQYWdlT3ZlcmxheSYsIFBhZ2UqIHBhZ2UpCit7
CisgICAgbV9jbGllbnQud2lsbE1vdmVUb1BhZ2UoKnRoaXMsIHBhZ2UgPyBXZWJQYWdlOjpmcm9t
Q29yZVBhZ2UocGFnZSkgOiBudWxscHRyKTsKK30KKwordm9pZCBXZWJQYWdlT3ZlcmxheTo6ZGlk
TW92ZVRvUGFnZShQYWdlT3ZlcmxheSYsIFBhZ2UqIHBhZ2UpCit7CisgICAgbV9jbGllbnQuZGlk
TW92ZVRvUGFnZSgqdGhpcywgcGFnZSA/IFdlYlBhZ2U6OmZyb21Db3JlUGFnZShwYWdlKSA6IG51
bGxwdHIpOworfQorCit2b2lkIFdlYlBhZ2VPdmVybGF5OjpkcmF3UmVjdChQYWdlT3ZlcmxheSYs
IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KQorewor
ICAgIG1fY2xpZW50LmRyYXdSZWN0KCp0aGlzLCBjb250ZXh0LCBkaXJ0eVJlY3QpOworfQorCiti
b29sIFdlYlBhZ2VPdmVybGF5Ojptb3VzZUV2ZW50KFBhZ2VPdmVybGF5JiwgY29uc3QgUGxhdGZv
cm1Nb3VzZUV2ZW50JiBldmVudCkKK3sKKyAgICByZXR1cm4gbV9jbGllbnQubW91c2VFdmVudCgq
dGhpcywgZXZlbnQpOworfQorCit2b2lkIFdlYlBhZ2VPdmVybGF5OjpkaWRTY3JvbGxGcmFtZShQ
YWdlT3ZlcmxheSYsIEZyYW1lJiBmcmFtZSkKK3sKKyAgICBtX2NsaWVudC5kaWRTY3JvbGxGcmFt
ZSgqdGhpcywgV2ViRnJhbWU6OmZyb21Db3JlRnJhbWUoZnJhbWUpKTsKK30KKworYm9vbCBXZWJQ
YWdlT3ZlcmxheTo6Y29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVTdHJpbmdWYWx1ZUZvclBvaW50
KFBhZ2VPdmVybGF5JiwgU3RyaW5nIGF0dHJpYnV0ZSwgRmxvYXRQb2ludCBwYXJhbWV0ZXIsIFN0
cmluZyYgdmFsdWUpCit7CisgICAgcmV0dXJuIG1fY2xpZW50LmNvcHlBY2Nlc3NpYmlsaXR5QXR0
cmlidXRlU3RyaW5nVmFsdWVGb3JQb2ludCgqdGhpcywgYXR0cmlidXRlLCBwYXJhbWV0ZXIsIHZh
bHVlKTsKK30KKworYm9vbCBXZWJQYWdlT3ZlcmxheTo6Y29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1
dGVCb29sVmFsdWVGb3JQb2ludChQYWdlT3ZlcmxheSYsIFN0cmluZyBhdHRyaWJ1dGUsIEZsb2F0
UG9pbnQgcGFyYW1ldGVyLCBib29sJiB2YWx1ZSkKK3sKKyAgICByZXR1cm4gbV9jbGllbnQuY29w
eUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVCb29sVmFsdWVGb3JQb2ludCgqdGhpcywgYXR0cmlidXRl
LCBwYXJhbWV0ZXIsIHZhbHVlKTsKK30KKworVmVjdG9yPFN0cmluZz4gV2ViUGFnZU92ZXJsYXk6
OmNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlTmFtZXMoUGFnZU92ZXJsYXkmLCBib29sIHBhcmFt
ZXRlcml6ZWROYW1lcykKK3sKKyAgICByZXR1cm4gbV9jbGllbnQuY29weUFjY2Vzc2liaWxpdHlB
dHRyaWJ1dGVOYW1lcygqdGhpcywgcGFyYW1ldGVyaXplZE5hbWVzKTsKK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViUGFnZU92ZXJsYXkuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJQYWdlT3ZlcmxheS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2ZGRl
MTYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
V2ViUGFnZU92ZXJsYXkuaApAQCAtMCwwICsxLDkyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBX
ZWJQYWdlT3ZlcmxheV9oCisjZGVmaW5lIFdlYlBhZ2VPdmVybGF5X2gKKworI2luY2x1ZGUgIkFQ
SU9iamVjdC5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRmxvYXRQb2ludC5oPgorI2luY2x1ZGUgPFdl
YkNvcmUvSW50UmVjdC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUGFnZU92ZXJsYXkuaD4KKyNpbmNs
dWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2Vi
RnJhbWU7CitjbGFzcyBXZWJQYWdlOworCitjbGFzcyBXZWJQYWdlT3ZlcmxheSA6IHB1YmxpYyBB
UEk6Ok9iamVjdEltcGw8QVBJOjpPYmplY3Q6OlR5cGU6OkJ1bmRsZVBhZ2VPdmVybGF5PiwgcHJp
dmF0ZSBXZWJDb3JlOjpQYWdlT3ZlcmxheTo6Q2xpZW50IHsKK3B1YmxpYzoKKyAgICBjbGFzcyBD
bGllbnQgeworICAgIHByb3RlY3RlZDoKKyAgICAgICAgdmlydHVhbCB+Q2xpZW50KCkgeyB9CisK
KyAgICBwdWJsaWM6CisgICAgICAgIHZpcnR1YWwgdm9pZCBwYWdlT3ZlcmxheURlc3Ryb3llZChX
ZWJQYWdlT3ZlcmxheSYpID0gMDsKKyAgICAgICAgdmlydHVhbCB2b2lkIHdpbGxNb3ZlVG9QYWdl
KFdlYlBhZ2VPdmVybGF5JiwgV2ViUGFnZSopID0gMDsKKyAgICAgICAgdmlydHVhbCB2b2lkIGRp
ZE1vdmVUb1BhZ2UoV2ViUGFnZU92ZXJsYXkmLCBXZWJQYWdlKikgPSAwOworICAgICAgICB2aXJ0
dWFsIHZvaWQgZHJhd1JlY3QoV2ViUGFnZU92ZXJsYXkmLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQmLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBkaXJ0eVJlY3QpID0gMDsKKyAgICAgICAgdmly
dHVhbCBib29sIG1vdXNlRXZlbnQoV2ViUGFnZU92ZXJsYXkmLCBjb25zdCBXZWJDb3JlOjpQbGF0
Zm9ybU1vdXNlRXZlbnQmKSA9IDA7CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRTY3JvbGxGcmFt
ZShXZWJQYWdlT3ZlcmxheSYsIFdlYkZyYW1lKikgeyB9CisKKyAgICAgICAgdmlydHVhbCBib29s
IGNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlU3RyaW5nVmFsdWVGb3JQb2ludChXZWJQYWdlT3Zl
cmxheSYsIFN0cmluZyAvKiBhdHRyaWJ1dGUgKi8sIFdlYkNvcmU6OkZsb2F0UG9pbnQgLyogcGFy
YW1ldGVyICovLCBTdHJpbmcmIHZhbHVlKSB7IHJldHVybiBmYWxzZTsgfQorICAgICAgICB2aXJ0
dWFsIGJvb2wgY29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVCb29sVmFsdWVGb3JQb2ludChXZWJQ
YWdlT3ZlcmxheSYsIFN0cmluZyAvKiBhdHRyaWJ1dGUgKi8sIFdlYkNvcmU6OkZsb2F0UG9pbnQg
LyogcGFyYW1ldGVyICovLCBib29sJiB2YWx1ZSkgeyByZXR1cm4gZmFsc2U7IH0KKyAgICAgICAg
dmlydHVhbCBWZWN0b3I8U3RyaW5nPiBjb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZU5hbWVzKFdl
YlBhZ2VPdmVybGF5JiwgYm9vbCAvKiBwYXJhbWV0ZXJpemVkTmFtZXMgKi8pIHsgcmV0dXJuIFZl
Y3RvcjxTdHJpbmc+KCk7IH0KKyAgICB9OworCisgICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViUGFn
ZU92ZXJsYXk+IGNyZWF0ZShDbGllbnQmLCBXZWJDb3JlOjpQYWdlT3ZlcmxheTo6T3ZlcmxheVR5
cGUgPSBXZWJDb3JlOjpQYWdlT3ZlcmxheTo6T3ZlcmxheVR5cGU6OlZpZXcpOworICAgIHZpcnR1
YWwgfldlYlBhZ2VPdmVybGF5KCk7CisKKyAgICB2b2lkIHNldE5lZWRzRGlzcGxheShjb25zdCBX
ZWJDb3JlOjpJbnRSZWN0JiBkaXJ0eVJlY3QpOworICAgIHZvaWQgc2V0TmVlZHNEaXNwbGF5KCk7
CisKKyAgICB2b2lkIGNsZWFyKCk7CisKKyAgICBXZWJDb3JlOjpQYWdlT3ZlcmxheSogY29yZU92
ZXJsYXkoKSBjb25zdCB7IHJldHVybiBtX292ZXJsYXkuZ2V0KCk7IH0KKyAgICBDbGllbnQmIGNs
aWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fY2xpZW50OyB9CisKK3ByaXZhdGU6CisgICAgV2ViUGFn
ZU92ZXJsYXkoQ2xpZW50JiwgV2ViQ29yZTo6UGFnZU92ZXJsYXk6Ok92ZXJsYXlUeXBlKTsKKwor
ICAgIC8vIFdlYkNvcmU6OlBhZ2VPdmVybGF5OjpDbGllbnQKKyAgICB2aXJ0dWFsIHZvaWQgcGFn
ZU92ZXJsYXlEZXN0cm95ZWQoV2ViQ29yZTo6UGFnZU92ZXJsYXkmKSBvdmVycmlkZTsKKyAgICB2
aXJ0dWFsIHZvaWQgd2lsbE1vdmVUb1BhZ2UoV2ViQ29yZTo6UGFnZU92ZXJsYXkmLCBXZWJDb3Jl
OjpQYWdlKikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGRpZE1vdmVUb1BhZ2UoV2ViQ29y
ZTo6UGFnZU92ZXJsYXkmLCBXZWJDb3JlOjpQYWdlKikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2
b2lkIGRyYXdSZWN0KFdlYkNvcmU6OlBhZ2VPdmVybGF5JiwgV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0JiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgZGlydHlSZWN0KSBvdmVycmlkZTsKKyAgICB2
aXJ0dWFsIGJvb2wgbW91c2VFdmVudChXZWJDb3JlOjpQYWdlT3ZlcmxheSYsIGNvbnN0IFdlYkNv
cmU6OlBsYXRmb3JtTW91c2VFdmVudCYpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBkaWRT
Y3JvbGxGcmFtZShXZWJDb3JlOjpQYWdlT3ZlcmxheSYsIFdlYkNvcmU6OkZyYW1lJikgb3ZlcnJp
ZGU7CisKKyAgICB2aXJ0dWFsIGJvb2wgY29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVTdHJpbmdW
YWx1ZUZvclBvaW50KFdlYkNvcmU6OlBhZ2VPdmVybGF5JiwgU3RyaW5nIC8qIGF0dHJpYnV0ZSAq
LywgV2ViQ29yZTo6RmxvYXRQb2ludCAvKiBwYXJhbWV0ZXIgKi8sIFN0cmluZyYgdmFsdWUpIG92
ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBjb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZUJvb2xW
YWx1ZUZvclBvaW50KFdlYkNvcmU6OlBhZ2VPdmVybGF5JiwgU3RyaW5nIC8qIGF0dHJpYnV0ZSAq
LywgV2ViQ29yZTo6RmxvYXRQb2ludCAvKiBwYXJhbWV0ZXIgKi8sIGJvb2wmIHZhbHVlKSBvdmVy
cmlkZTsKKyAgICB2aXJ0dWFsIFZlY3RvcjxTdHJpbmc+IGNvcHlBY2Nlc3NpYmlsaXR5QXR0cmli
dXRlTmFtZXMoV2ViQ29yZTo6UGFnZU92ZXJsYXkmLCBib29sIC8qIHBhcmFtZXRlcml6ZWROYW1l
cyAqLykgb3ZlcnJpZGU7CisKKworICAgIFJlZlB0cjxXZWJDb3JlOjpQYWdlT3ZlcmxheT4gbV9v
dmVybGF5OworICAgIENsaWVudCYgbV9jbGllbnQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKKworI2VuZGlmIC8vIFdlYlBhZ2VPdmVybGF5X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvRmluZENvbnRyb2xsZXJJT1MubW0gYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL0ZpbmRDb250cm9sbGVySU9TLm1tCmluZGV4
IDA5MDdiZGYuLmFmMmNlMTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9pb3MvRmluZENvbnRyb2xsZXJJT1MubW0KKysrIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL2lvcy9GaW5kQ29udHJvbGxlcklPUy5tbQpAQCAtMzYsNiArMzYsNyBA
QAogI2ltcG9ydCA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHQuaD4KICNpbXBvcnQgPFdlYkNvcmUv
TWFpbkZyYW1lLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1BhZ2UuaD4KKyNpbXBvcnQgPFdlYkNvcmUv
UGFnZU92ZXJsYXlDb250cm9sbGVyLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCkBA
IC01Miw3ICs1Myw3IEBAIHN0YXRpYyBDb2xvciBoaWdobGlnaHRDb2xvcigpCiAKIG5hbWVzcGFj
ZSBXZWJLaXQgewogCi12b2lkIEZpbmRJbmRpY2F0b3JPdmVybGF5Q2xpZW50SU9TOjpkcmF3UmVj
dChQYWdlT3ZlcmxheSogb3ZlcmxheSwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0
LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBkaXJ0eVJlY3QpCit2b2lkIEZpbmRJbmRpY2F0b3JP
dmVybGF5Q2xpZW50SU9TOjpkcmF3UmVjdChQYWdlT3ZlcmxheSYgb3ZlcmxheSwgR3JhcGhpY3ND
b250ZXh0JiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpCiB7CiAgICAgLy8gRklY
TUU6IFN1cHBvcnQgbXVsdGlwbGUgdGV4dCByZWN0cy4KIApAQCAtODUsMTEgKzg2LDExIEBAIGJv
b2wgRmluZENvbnRyb2xsZXI6OnVwZGF0ZUZpbmRJbmRpY2F0b3IoRnJhbWUmIHNlbGVjdGVkRnJh
bWUsIGJvb2wgaXNTaG93aW5nT3ZlCiAgICAgbWF0Y2hSZWN0LmluZmxhdGVZKHRvdGFsVmVydGlj
YWxNYXJnaW4pOwogCiAgICAgaWYgKG1fZmluZEluZGljYXRvck92ZXJsYXkpCi0gICAgICAgIG1f
d2ViUGFnZS0+dW5pbnN0YWxsUGFnZU92ZXJsYXkobV9maW5kSW5kaWNhdG9yT3ZlcmxheS5nZXQo
KSk7CisgICAgICAgIG1fd2ViUGFnZS0+Y29yZVBhZ2UoKS0+cGFnZU92ZXJsYXlDb250cm9sbGVy
KCkudW5pbnN0YWxsUGFnZU92ZXJsYXkobV9maW5kSW5kaWNhdG9yT3ZlcmxheS5nZXQoKSwgUGFn
ZU92ZXJsYXk6OkZhZGVNb2RlOjpEb05vdEZhZGUpOwogCiAgICAgbV9maW5kSW5kaWNhdG9yT3Zl
cmxheUNsaWVudCA9IHN0ZDo6bWFrZV91bmlxdWU8RmluZEluZGljYXRvck92ZXJsYXlDbGllbnRJ
T1M+KHNlbGVjdGVkRnJhbWUpOwotICAgIG1fZmluZEluZGljYXRvck92ZXJsYXkgPSBQYWdlT3Zl
cmxheTo6Y3JlYXRlKG1fZmluZEluZGljYXRvck92ZXJsYXlDbGllbnQuZ2V0KCksIFBhZ2VPdmVy
bGF5OjpPdmVybGF5VHlwZTo6RG9jdW1lbnQpOwotICAgIG1fd2ViUGFnZS0+aW5zdGFsbFBhZ2VP
dmVybGF5KG1fZmluZEluZGljYXRvck92ZXJsYXkpOworICAgIG1fZmluZEluZGljYXRvck92ZXJs
YXkgPSBQYWdlT3ZlcmxheTo6Y3JlYXRlKCptX2ZpbmRJbmRpY2F0b3JPdmVybGF5Q2xpZW50LCBQ
YWdlT3ZlcmxheTo6T3ZlcmxheVR5cGU6OkRvY3VtZW50KTsKKyAgICBtX3dlYlBhZ2UtPmNvcmVQ
YWdlKCktPnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLmluc3RhbGxQYWdlT3ZlcmxheShtX2ZpbmRJ
bmRpY2F0b3JPdmVybGF5LCBQYWdlT3ZlcmxheTo6RmFkZU1vZGU6OkRvTm90RmFkZSk7CiAKICAg
ICBtX2ZpbmRJbmRpY2F0b3JPdmVybGF5LT5zZXRGcmFtZShtYXRjaFJlY3QpOwogICAgIG1fZmlu
ZEluZGljYXRvck92ZXJsYXktPnNldE5lZWRzRGlzcGxheSgpOwpAQCAtMTA2LDcgKzEwNyw3IEBA
IHZvaWQgRmluZENvbnRyb2xsZXI6OmhpZGVGaW5kSW5kaWNhdG9yKCkKICAgICBpZiAoIW1faXNT
aG93aW5nRmluZEluZGljYXRvcikKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV93ZWJQYWdlLT51
bmluc3RhbGxQYWdlT3ZlcmxheShtX2ZpbmRJbmRpY2F0b3JPdmVybGF5LmdldCgpKTsKKyAgICBt
X3dlYlBhZ2UtPmNvcmVQYWdlKCktPnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLnVuaW5zdGFsbFBh
Z2VPdmVybGF5KG1fZmluZEluZGljYXRvck92ZXJsYXkuZ2V0KCksIFBhZ2VPdmVybGF5OjpGYWRl
TW9kZTo6RG9Ob3RGYWRlKTsKICAgICBtX2ZpbmRJbmRpY2F0b3JPdmVybGF5ID0gbnVsbHB0cjsK
ICAgICBtX2lzU2hvd2luZ0ZpbmRJbmRpY2F0b3IgPSBmYWxzZTsKICAgICBtX2ZvdW5kU3RyaW5n
TWF0Y2hJbmRleCA9IC0xOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL2lvcy9GaW5kSW5kaWNhdG9yT3ZlcmxheUNsaWVudElPUy5oIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9GaW5kSW5kaWNhdG9yT3ZlcmxheUNsaWVudElPUy5o
CmluZGV4IDMxMDE3NjcuLjQyOTIyODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9pb3MvRmluZEluZGljYXRvck92ZXJsYXlDbGllbnRJT1MuaAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL0ZpbmRJbmRpY2F0b3JPdmVybGF5
Q2xpZW50SU9TLmgKQEAgLTI2LDEzICsyNiwxMyBAQAogI2lmbmRlZiBGaW5kSW5kaWNhdG9yT3Zl
cmxheUNsaWVudElPU19oCiAjZGVmaW5lIEZpbmRJbmRpY2F0b3JPdmVybGF5Q2xpZW50SU9TX2gK
IAotI2ltcG9ydCAiUGFnZU92ZXJsYXkuaCIKICNpbXBvcnQgPFdlYkNvcmUvRnJhbWUuaD4KICNp
bXBvcnQgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+CisjaW1wb3J0IDxXZWJDb3JlL1BhZ2VP
dmVybGF5Lmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1jbGFzcyBGaW5kSW5kaWNhdG9yT3Zl
cmxheUNsaWVudElPUyA6IHB1YmxpYyBQYWdlT3ZlcmxheTo6Q2xpZW50IHsKK2NsYXNzIEZpbmRJ
bmRpY2F0b3JPdmVybGF5Q2xpZW50SU9TIDogcHVibGljIFdlYkNvcmU6OlBhZ2VPdmVybGF5OjpD
bGllbnQgewogcHVibGljOgogICAgIEZpbmRJbmRpY2F0b3JPdmVybGF5Q2xpZW50SU9TKFdlYkNv
cmU6OkZyYW1lJiBmcmFtZSkKICAgICAgICAgOiBtX2ZyYW1lKGZyYW1lKQpAQCAtNDAsMTEgKzQw
LDExIEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgdmlydHVhbCB2b2lkIHBhZ2VP
dmVybGF5RGVzdHJveWVkKFBhZ2VPdmVybGF5Kikgb3ZlcnJpZGUgeyB9Ci0gICAgdmlydHVhbCB2
b2lkIHdpbGxNb3ZlVG9XZWJQYWdlKFBhZ2VPdmVybGF5KiwgV2ViUGFnZSopIG92ZXJyaWRlIHsg
fQotICAgIHZpcnR1YWwgdm9pZCBkaWRNb3ZlVG9XZWJQYWdlKFBhZ2VPdmVybGF5KiwgV2ViUGFn
ZSopIG92ZXJyaWRlIHsgfQotICAgIHZpcnR1YWwgdm9pZCBkcmF3UmVjdChQYWdlT3ZlcmxheSos
IFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGRpcnR5
UmVjdCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBib29sIG1vdXNlRXZlbnQoUGFnZU92ZXJsYXkq
LCBjb25zdCBXZWJNb3VzZUV2ZW50Jikgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2
aXJ0dWFsIHZvaWQgcGFnZU92ZXJsYXlEZXN0cm95ZWQoV2ViQ29yZTo6UGFnZU92ZXJsYXkmKSBv
dmVycmlkZSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgd2lsbE1vdmVUb1BhZ2UoV2ViQ29yZTo6UGFn
ZU92ZXJsYXkmLCBXZWJDb3JlOjpQYWdlKikgb3ZlcnJpZGUgeyB9CisgICAgdmlydHVhbCB2b2lk
IGRpZE1vdmVUb1BhZ2UoV2ViQ29yZTo6UGFnZU92ZXJsYXkmLCBXZWJDb3JlOjpQYWdlKikgb3Zl
cnJpZGUgeyB9CisgICAgdmlydHVhbCB2b2lkIGRyYXdSZWN0KFdlYkNvcmU6OlBhZ2VPdmVybGF5
JiwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgZGly
dHlSZWN0KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wgbW91c2VFdmVudChXZWJDb3JlOjpQ
YWdlT3ZlcmxheSYsIGNvbnN0IFdlYkNvcmU6OlBsYXRmb3JtTW91c2VFdmVudCYpIG92ZXJyaWRl
IHsgcmV0dXJuIGZhbHNlOyB9CiAKICAgICBXZWJDb3JlOjpGcmFtZSYgbV9mcmFtZTsKIH07CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1JlbW90ZUxh
eWVyVHJlZURyYXdpbmdBcmVhLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
bWFjL1JlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhLmgKaW5kZXggMWNiNTEwMC4uYzUyYTNiZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9SZW1vdGVM
YXllclRyZWVEcmF3aW5nQXJlYS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9tYWMvUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWEuaApAQCAtNjcsNiArNjcsNyBAQCBw
cml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBzZXRSb290Q29tcG9zaXRpbmdMYXllcihXZWJDb3Jl
OjpHcmFwaGljc0xheWVyKikgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlQ29t
cG9zaXRpbmdMYXllckZsdXNoKCkgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIHNjaGVkdWxl
Q29tcG9zaXRpbmdMYXllckZsdXNoSW1tZWRpYXRlbHkoKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFs
IHZvaWQgYXR0YWNoVmlld092ZXJsYXlHcmFwaGljc0xheWVyKFdlYkNvcmU6OkZyYW1lKiwgV2Vi
Q29yZTo6R3JhcGhpY3NMYXllciopIG92ZXJyaWRlOwogCiAgICAgdmlydHVhbCB2b2lkIGFkZFRy
YW5zYWN0aW9uQ2FsbGJhY2tJRCh1aW50NjRfdCBjYWxsYmFja0lEKSBvdmVycmlkZTsKIApAQCAt
MTA3LDYgKzEwOCw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBib29sIGFkanVzdExheWVyRmx1
c2hUaHJvdHRsaW5nKFdlYkNvcmU6OkxheWVyRmx1c2hUaHJvdHRsZVN0YXRlOjpGbGFncykgb3Zl
cnJpZGU7CiAKICAgICB2b2lkIHVwZGF0ZVNjcm9sbGVkRXhwb3NlZFJlY3QoKTsKKyAgICB2b2lk
IHVwZGF0ZVJvb3RMYXllcnMoKTsKIAogICAgIHZvaWQgbGF5ZXJGbHVzaFRpbWVyRmlyZWQoV2Vi
Q29yZTo6VGltZXI8UmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWE+Kik7CiAgICAgdm9pZCBmbHVz
aExheWVycygpOwpAQCAtMTYwLDYgKzE2Miw5IEBAIHByaXZhdGU6CiAKICAgICB1aW50NjRfdCBt
X2N1cnJlbnRUcmFuc2FjdGlvbklEOwogICAgIFZlY3RvcjxSZW1vdGVMYXllclRyZWVUcmFuc2Fj
dGlvbjo6VHJhbnNhY3Rpb25DYWxsYmFja0lEPiBtX3BlbmRpbmdDYWxsYmFja0lEczsKKworICAg
IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqIG1fY29udGVudExheWVyOworICAgIFdlYkNvcmU6Okdy
YXBoaWNzTGF5ZXIqIG1fdmlld092ZXJsYXlSb290TGF5ZXI7CiB9OwogCiBEUkFXSU5HX0FSRUFf
VFlQRV9DQVNUUyhSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYSwgdHlwZSgpID09IERyYXdpbmdB
cmVhVHlwZVJlbW90ZUxheWVyVHJlZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvbWFjL1JlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhLm1tIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9SZW1vdGVMYXllclRyZWVEcmF3aW5nQXJl
YS5tbQppbmRleCAzN2M4OTQ3Li45ZTQ4YjU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1JlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhLm1tCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvUmVtb3RlTGF5ZXJUcmVlRHJh
d2luZ0FyZWEubW0KQEAgLTQwLDYgKzQwLDcgQEAKICNpbXBvcnQgPFdlYkNvcmUvRnJhbWUuaD4K
ICNpbXBvcnQgPFdlYkNvcmUvRnJhbWVWaWV3Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL01haW5GcmFt
ZS5oPgorI2ltcG9ydCA8V2ViQ29yZS9QYWdlT3ZlcmxheUNvbnRyb2xsZXIuaD4KICNpbXBvcnQg
PFdlYkNvcmUvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1JlbmRl
clZpZXcuaD4KICNpbXBvcnQgPFdlYkNvcmUvU2V0dGluZ3MuaD4KQEAgLTY2LDYgKzY3LDggQEAg
UmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWE6OlJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhKFdl
YlBhZ2UmIHdlYlBhZ2UsIGNvbnN0IFcKICAgICAsIG1faGFkRmx1c2hEZWZlcnJlZFdoaWxlV2Fp
dGluZ0ZvckJhY2tpbmdTdG9yZVN3YXAoZmFsc2UpCiAgICAgLCBtX2Rpc3BsYXlSZWZyZXNoTW9u
aXRvcnNUb05vdGlmeShudWxscHRyKQogICAgICwgbV9jdXJyZW50VHJhbnNhY3Rpb25JRCgwKQor
ICAgICwgbV9jb250ZW50TGF5ZXIobnVsbHB0cikKKyAgICAsIG1fdmlld092ZXJsYXlSb290TGF5
ZXIobnVsbHB0cikKIHsKICAgICB3ZWJQYWdlLmNvcmVQYWdlKCktPnNldHRpbmdzKCkuc2V0Rm9y
Y2VDb21wb3NpdGluZ01vZGUodHJ1ZSk7CiAjaWYgUExBVEZPUk0oSU9TKQpAQCAtMTEzLDE1ICsx
MTYsMzEgQEAgdm9pZCBSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYTo6d2lsbERlc3Ryb3lEaXNw
bGF5UmVmcmVzaE1vbml0b3IoRGlzcGxheVJlZnJlc2gKICAgICAgICAgbV9kaXNwbGF5UmVmcmVz
aE1vbml0b3JzVG9Ob3RpZnktPnJlbW92ZShyZW1vdGVNb25pdG9yKTsKIH0KIAotdm9pZCBSZW1v
dGVMYXllclRyZWVEcmF3aW5nQXJlYTo6c2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIoR3JhcGhpY3NM
YXllciogcm9vdExheWVyKQordm9pZCBSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYTo6dXBkYXRl
Um9vdExheWVycygpCiB7CiAgICAgVmVjdG9yPEdyYXBoaWNzTGF5ZXIqPiBjaGlsZHJlbjsKLSAg
ICBpZiAocm9vdExheWVyKSB7Ci0gICAgICAgIGNoaWxkcmVuLmFwcGVuZChyb290TGF5ZXIpOwot
ICAgICAgICBjaGlsZHJlbi5hcHBlbmQobV93ZWJQYWdlLnBhZ2VPdmVybGF5Q29udHJvbGxlcigp
LnZpZXdPdmVybGF5Um9vdExheWVyKCkpOworICAgIGlmIChtX2NvbnRlbnRMYXllcikgeworICAg
ICAgICBjaGlsZHJlbi5hcHBlbmQobV9jb250ZW50TGF5ZXIpOworICAgICAgICBpZiAobV92aWV3
T3ZlcmxheVJvb3RMYXllcikKKyAgICAgICAgICAgIGNoaWxkcmVuLmFwcGVuZChtX3ZpZXdPdmVy
bGF5Um9vdExheWVyKTsKICAgICB9CisKICAgICBtX3Jvb3RMYXllci0+c2V0Q2hpbGRyZW4oY2hp
bGRyZW4pOworfQorCit2b2lkIFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhOjphdHRhY2hWaWV3
T3ZlcmxheUdyYXBoaWNzTGF5ZXIoRnJhbWUqIGZyYW1lLCBHcmFwaGljc0xheWVyKiB2aWV3T3Zl
cmxheVJvb3RMYXllcikKK3sKKyAgICBpZiAoIWZyYW1lLT5pc01haW5GcmFtZSgpKQorICAgICAg
ICByZXR1cm47CiAKKyAgICBtX3ZpZXdPdmVybGF5Um9vdExheWVyID0gdmlld092ZXJsYXlSb290
TGF5ZXI7CisgICAgdXBkYXRlUm9vdExheWVycygpOworfQorCit2b2lkIFJlbW90ZUxheWVyVHJl
ZURyYXdpbmdBcmVhOjpzZXRSb290Q29tcG9zaXRpbmdMYXllcihHcmFwaGljc0xheWVyKiByb290
TGF5ZXIpCit7CisgICAgbV9jb250ZW50TGF5ZXIgPSByb290TGF5ZXI7CisgICAgdXBkYXRlUm9v
dExheWVycygpOwogICAgIHNjaGVkdWxlQ29tcG9zaXRpbmdMYXllckZsdXNoKCk7CiB9CiAKQEAg
LTIzNCw4ICsyNTMsNiBAQCB2b2lkIFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhOjp1cGRhdGVT
Y3JvbGxlZEV4cG9zZWRSZWN0KCkKICNlbmRpZgogCiAgICAgZnJhbWVWaWV3LT5zZXRFeHBvc2Vk
UmVjdChtX3Njcm9sbGVkRXhwb3NlZFJlY3QpOwotCi0gICAgbV93ZWJQYWdlLnBhZ2VPdmVybGF5
Q29udHJvbGxlcigpLmRpZENoYW5nZUV4cG9zZWRSZWN0KCk7CiB9CiAKIFRpbGVkQmFja2luZyog
UmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWE6Om1haW5GcmFtZVRpbGVkQmFja2luZygpIGNvbnN0
CkBAIC0zMjEsNyArMzM4LDcgQEAgdm9pZCBSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYTo6Zmx1
c2hMYXllcnMoKQogCiAgICAgRmxvYXRSZWN0IHZpc2libGVSZWN0KEZsb2F0UG9pbnQoKSwgbV92
aWV3U2l6ZSk7CiAgICAgdmlzaWJsZVJlY3QuaW50ZXJzZWN0KG1fc2Nyb2xsZWRFeHBvc2VkUmVj
dCk7Ci0gICAgbV93ZWJQYWdlLnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLmZsdXNoUGFnZU92ZXJs
YXlMYXllcnModmlzaWJsZVJlY3QpOworCiAgICAgbV93ZWJQYWdlLm1haW5GcmFtZVZpZXcoKS0+
Zmx1c2hDb21wb3NpdGluZ1N0YXRlSW5jbHVkaW5nU3ViZnJhbWVzKCk7CiAgICAgbV9yb290TGF5
ZXItPmZsdXNoQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKTsKIApAQCAtNDEwLDcg
KzQyNyw2IEBAIHZvaWQgUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWE6OmRpZFVwZGF0ZSgpCiB2
b2lkIFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhOjptYWluRnJhbWVDb250ZW50U2l6ZUNoYW5n
ZWQoY29uc3QgSW50U2l6ZSYgY29udGVudHNTaXplKQogewogICAgIG1fcm9vdExheWVyLT5zZXRT
aXplKGNvbnRlbnRzU2l6ZSk7Ci0gICAgbV93ZWJQYWdlLnBhZ2VPdmVybGF5Q29udHJvbGxlcigp
LmRpZENoYW5nZURvY3VtZW50U2l6ZSgpOwogfQogCiBib29sIFJlbW90ZUxheWVyVHJlZURyYXdp
bmdBcmVhOjptYXJrTGF5ZXJzVm9sYXRpbGVJbW1lZGlhdGVseUlmUG9zc2libGUoKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9TZXJ2aWNlc092ZXJs
YXlDb250cm9sbGVyLm1tIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9T
ZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyLm1tCmluZGV4IGZiNjhiN2EuLmZhNjY4MzMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvU2VydmljZXNPdmVy
bGF5Q29udHJvbGxlci5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
bWFjL1NlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIubW0KQEAgLTQyLDYgKzQyLDcgQEAKICNpbXBv
cnQgPFdlYkNvcmUvR3JhcGhpY3NMYXllci5oPgogI2ltcG9ydCA8V2ViQ29yZS9HcmFwaGljc0xh
eWVyQ0EuaD4KICNpbXBvcnQgPFdlYkNvcmUvTWFpbkZyYW1lLmg+CisjaW1wb3J0IDxXZWJDb3Jl
L1BhZ2VPdmVybGF5Q29udHJvbGxlci5oPgogI2ltcG9ydCA8V2ViQ29yZS9QbGF0Zm9ybUNBQW5p
bWF0aW9uTWFjLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1NvZnRMaW5raW5nLmg+CiAKQEAgLTIyNSwy
MyArMjI2LDIzIEBAIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6On5TZXJ2aWNlc092ZXJsYXlD
b250cm9sbGVyKCkKICAgICAgICAgaGlnaGxpZ2h0LT5pbnZhbGlkYXRlKCk7CiB9CiAKLXZvaWQg
U2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6cGFnZU92ZXJsYXlEZXN0cm95ZWQoUGFnZU92ZXJs
YXkqKQordm9pZCBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpwYWdlT3ZlcmxheURlc3Ryb3ll
ZChQYWdlT3ZlcmxheSYpCiB7CiAgICAgLy8gQmVmb3JlIHRoZSBvdmVybGF5IGlzIGRlc3Ryb3ll
ZCwgaXQgc2hvdWxkIGhhdmUgbW92ZWQgb3V0IG9mIHRoZSBXZWJQYWdlLAogICAgIC8vIGF0IHdo
aWNoIHBvaW50IHdlIGFscmVhZHkgY2xlYXJlZCBvdXIgYmFjayBwb2ludGVyLgogICAgIEFTU0VS
VCghbV9zZXJ2aWNlc092ZXJsYXkpOwogfQogCi12b2lkIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xs
ZXI6OndpbGxNb3ZlVG9XZWJQYWdlKFBhZ2VPdmVybGF5KiwgV2ViUGFnZSogd2ViUGFnZSkKK3Zv
aWQgU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6d2lsbE1vdmVUb1BhZ2UoUGFnZU92ZXJsYXkm
LCBQYWdlKiBwYWdlKQogewotICAgIGlmICh3ZWJQYWdlKQorICAgIGlmIChwYWdlKQogICAgICAg
ICByZXR1cm47CiAKICAgICBBU1NFUlQobV9zZXJ2aWNlc092ZXJsYXkpOwogICAgIG1fc2Vydmlj
ZXNPdmVybGF5ID0gbnVsbHB0cjsKIH0KIAotdm9pZCBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVy
OjpkaWRNb3ZlVG9XZWJQYWdlKFBhZ2VPdmVybGF5KiwgV2ViUGFnZSopCit2b2lkIFNlcnZpY2Vz
T3ZlcmxheUNvbnRyb2xsZXI6OmRpZE1vdmVUb1BhZ2UoUGFnZU92ZXJsYXkmLCBQYWdlKikKIHsK
IH0KIApAQCAtNDQ3LDcgKzQ0OCw3IEBAIHZvaWQgU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6
ZGV0ZXJtaW5lQWN0aXZlSGlnaGxpZ2h0VGltZXJGaXJlZChUaW1lcjxTZXJ2aWNlCiAgICAgZGV0
ZXJtaW5lQWN0aXZlSGlnaGxpZ2h0KG1vdXNlSXNPdmVyQnV0dG9uKTsKIH0KIAotdm9pZCBTZXJ2
aWNlc092ZXJsYXlDb250cm9sbGVyOjpkcmF3UmVjdChQYWdlT3ZlcmxheSogb3ZlcmxheSwgR3Jh
cGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQsIGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCkK
K3ZvaWQgU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6ZHJhd1JlY3QoUGFnZU92ZXJsYXkmIG92
ZXJsYXksIEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBJbnRSZWN0JiBk
aXJ0eVJlY3QpCiB7CiB9CiAKQEAgLTU4Myw3ICs1ODQsNyBAQCB2b2lkIFNlcnZpY2VzT3Zlcmxh
eUNvbnRyb2xsZXI6OmRpZFJlYnVpbGRQb3RlbnRpYWxIaWdobGlnaHRzKCkKIHsKICAgICBpZiAo
bV9wb3RlbnRpYWxIaWdobGlnaHRzLmlzRW1wdHkoKSkgewogICAgICAgICBpZiAobV9zZXJ2aWNl
c092ZXJsYXkpCi0gICAgICAgICAgICBtX3dlYlBhZ2UudW5pbnN0YWxsUGFnZU92ZXJsYXkobV9z
ZXJ2aWNlc092ZXJsYXkpOworICAgICAgICAgICAgbV93ZWJQYWdlLmNvcmVQYWdlKCktPnBhZ2VP
dmVybGF5Q29udHJvbGxlcigpLnVuaW5zdGFsbFBhZ2VPdmVybGF5KG1fc2VydmljZXNPdmVybGF5
LCBQYWdlT3ZlcmxheTo6RmFkZU1vZGU6OkRvTm90RmFkZSk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKQEAgLTYwMSw5ICs2MDIsOSBAQCB2b2lkIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6
OmNyZWF0ZU92ZXJsYXlJZk5lZWRlZCgpCiAgICAgaWYgKG1fc2VydmljZXNPdmVybGF5KQogICAg
ICAgICByZXR1cm47CiAKLSAgICBSZWZQdHI8UGFnZU92ZXJsYXk+IG92ZXJsYXkgPSBQYWdlT3Zl
cmxheTo6Y3JlYXRlKHRoaXMsIFBhZ2VPdmVybGF5OjpPdmVybGF5VHlwZTo6RG9jdW1lbnQpOwor
ICAgIFJlZlB0cjxQYWdlT3ZlcmxheT4gb3ZlcmxheSA9IFBhZ2VPdmVybGF5OjpjcmVhdGUoKnRo
aXMsIFBhZ2VPdmVybGF5OjpPdmVybGF5VHlwZTo6RG9jdW1lbnQpOwogICAgIG1fc2VydmljZXNP
dmVybGF5ID0gb3ZlcmxheS5nZXQoKTsKLSAgICBtX3dlYlBhZ2UuaW5zdGFsbFBhZ2VPdmVybGF5
KG92ZXJsYXkucmVsZWFzZSgpLCBQYWdlT3ZlcmxheTo6RmFkZU1vZGU6OkRvTm90RmFkZSk7Cisg
ICAgbV93ZWJQYWdlLmNvcmVQYWdlKCktPnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLmluc3RhbGxQ
YWdlT3ZlcmxheShvdmVybGF5LnJlbGVhc2UoKSwgUGFnZU92ZXJsYXk6OkZhZGVNb2RlOjpEb05v
dEZhZGUpOwogfQogCiBWZWN0b3I8UmVmUHRyPFJhbmdlPj4gU2VydmljZXNPdmVybGF5Q29udHJv
bGxlcjo6dGVsZXBob25lTnVtYmVyUmFuZ2VzRm9yRm9jdXNlZEZyYW1lKCkKQEAgLTcxNywxMyAr
NzE4LDEzIEBAIHZvaWQgU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6ZGV0ZXJtaW5lQWN0aXZl
SGlnaGxpZ2h0KGJvb2wmIG1vdXNlSXNPdmVyQWN0aXZlCiAgICAgICAgIG1fYWN0aXZlSGlnaGxp
Z2h0ID0gbV9uZXh0QWN0aXZlSGlnaGxpZ2h0LnJlbGVhc2UoKTsKIAogICAgICAgICBpZiAobV9h
Y3RpdmVIaWdobGlnaHQpIHsKLSAgICAgICAgICAgIG1fc2VydmljZXNPdmVybGF5LT5sYXllcigp
LT5hZGRDaGlsZChtX2FjdGl2ZUhpZ2hsaWdodC0+bGF5ZXIoKSk7CisgICAgICAgICAgICBtX3Nl
cnZpY2VzT3ZlcmxheS0+bGF5ZXIoKS5hZGRDaGlsZChtX2FjdGl2ZUhpZ2hsaWdodC0+bGF5ZXIo
KSk7CiAgICAgICAgICAgICBtX2FjdGl2ZUhpZ2hsaWdodC0+ZmFkZUluKCk7CiAgICAgICAgIH0K
ICAgICB9CiB9CiAKLWJvb2wgU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6bW91c2VFdmVudChQ
YWdlT3ZlcmxheSosIGNvbnN0IFdlYk1vdXNlRXZlbnQmIGV2ZW50KQorYm9vbCBTZXJ2aWNlc092
ZXJsYXlDb250cm9sbGVyOjptb3VzZUV2ZW50KFBhZ2VPdmVybGF5JiwgY29uc3QgUGxhdGZvcm1N
b3VzZUV2ZW50JiBldmVudCkKIHsKICAgICBtX21vdXNlUG9zaXRpb24gPSBtX3dlYlBhZ2UuY29y
ZVBhZ2UoKS0+bWFpbkZyYW1lKCkudmlldygpLT5yb290Vmlld1RvQ29udGVudHMoZXZlbnQucG9z
aXRpb24oKSk7CiAKQEAgLTczMSwxMyArNzMyLDEzIEBAIGJvb2wgU2VydmljZXNPdmVybGF5Q29u
dHJvbGxlcjo6bW91c2VFdmVudChQYWdlT3ZlcmxheSosIGNvbnN0IFdlYk1vdXNlRXZlbnQmIGV2
CiAgICAgZGV0ZXJtaW5lQWN0aXZlSGlnaGxpZ2h0KG1vdXNlSXNPdmVyQWN0aXZlSGlnaGxpZ2h0
QnV0dG9uKTsKIAogICAgIC8vIENhbmNlbCB0aGUgcG90ZW50aWFsIGNsaWNrIGlmIGFueSBidXR0
b24gb3RoZXIgdGhhbiB0aGUgbGVmdCBidXR0b24gY2hhbmdlcyBzdGF0ZSwgYW5kIGlnbm9yZSB0
aGUgZXZlbnQuCi0gICAgaWYgKGV2ZW50LmJ1dHRvbigpICE9IFdlYk1vdXNlRXZlbnQ6OkxlZnRC
dXR0b24pIHsKKyAgICBpZiAoZXZlbnQuYnV0dG9uKCkgIT0gTW91c2VCdXR0b246OkxlZnRCdXR0
b24pIHsKICAgICAgICAgbV9jdXJyZW50TW91c2VEb3duT25CdXR0b25IaWdobGlnaHQgPSBudWxs
cHRyOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAgLy8gSWYgdGhlIG1vdXNl
IGxpZnRlZCB3aGlsZSBzdGlsbCBvdmVyIHRoZSBoaWdobGlnaHQgYnV0dG9uIHRoYXQgaXQgd2Vu
dCBkb3duIG9uLCB0aGVuIHRoYXQgaXMgYSBjbGljay4KLSAgICBpZiAoZXZlbnQudHlwZSgpID09
IFdlYkV2ZW50OjpNb3VzZVVwKSB7CisgICAgaWYgKGV2ZW50LnR5cGUoKSA9PSBQbGF0Zm9ybUV2
ZW50OjpNb3VzZVJlbGVhc2VkKSB7CiAgICAgICAgIFJlZlB0cjxIaWdobGlnaHQ+IG1vdXNlRG93
bkhpZ2hsaWdodCA9IG1fY3VycmVudE1vdXNlRG93bk9uQnV0dG9uSGlnaGxpZ2h0OwogICAgICAg
ICBtX2N1cnJlbnRNb3VzZURvd25PbkJ1dHRvbkhpZ2hsaWdodCA9IG51bGxwdHI7CiAKQEAgLTc1
Miw3ICs3NTMsNyBAQCBib29sIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6Om1vdXNlRXZlbnQo
UGFnZU92ZXJsYXkqLCBjb25zdCBXZWJNb3VzZUV2ZW50JiBldgogICAgIH0KIAogICAgIC8vIElm
IHRoZSBtb3VzZSBtb3ZlZCBvdXRzaWRlIG9mIHRoZSBidXR0b24gdHJhY2tpbmcgYSBwb3RlbnRp
YWwgY2xpY2ssIHN0b3AgdHJhY2tpbmcgdGhlIGNsaWNrLgotICAgIGlmIChldmVudC50eXBlKCkg
PT0gV2ViRXZlbnQ6Ok1vdXNlTW92ZSkgeworICAgIGlmIChldmVudC50eXBlKCkgPT0gUGxhdGZv
cm1FdmVudDo6TW91c2VNb3ZlZCkgewogICAgICAgICBpZiAobV9jdXJyZW50TW91c2VEb3duT25C
dXR0b25IaWdobGlnaHQgJiYgbW91c2VJc092ZXJBY3RpdmVIaWdobGlnaHRCdXR0b24pCiAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKIApAQCAtNzYxLDcgKzc2Miw3IEBAIGJvb2wgU2VydmljZXNP
dmVybGF5Q29udHJvbGxlcjo6bW91c2VFdmVudChQYWdlT3ZlcmxheSosIGNvbnN0IFdlYk1vdXNl
RXZlbnQmIGV2CiAgICAgfQogCiAgICAgLy8gSWYgdGhlIG1vdXNlIHdlbnQgZG93biBvdmVyIHRo
ZSBhY3RpdmUgaGlnaGxpZ2h0J3MgYnV0dG9uLCB0cmFjayB0aGlzIGFzIGEgcG90ZW50aWFsIGNs
aWNrLgotICAgIGlmIChldmVudC50eXBlKCkgPT0gV2ViRXZlbnQ6Ok1vdXNlRG93bikgeworICAg
IGlmIChldmVudC50eXBlKCkgPT0gUGxhdGZvcm1FdmVudDo6TW91c2VQcmVzc2VkKSB7CiAgICAg
ICAgIGlmIChtX2FjdGl2ZUhpZ2hsaWdodCAmJiBtb3VzZUlzT3ZlckFjdGl2ZUhpZ2hsaWdodEJ1
dHRvbikgewogICAgICAgICAgICAgbV9jdXJyZW50TW91c2VEb3duT25CdXR0b25IaWdobGlnaHQg
PSBtX2FjdGl2ZUhpZ2hsaWdodDsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtNzczLDkg
Kzc3NCw5IEBAIGJvb2wgU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6bW91c2VFdmVudChQYWdl
T3ZlcmxheSosIGNvbnN0IFdlYk1vdXNlRXZlbnQmIGV2CiAgICAgcmV0dXJuIGZhbHNlOwogfQog
Ci12b2lkIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OmRpZFNjcm9sbEZyYW1lKFBhZ2VPdmVy
bGF5KiwgRnJhbWUqIGZyYW1lKQordm9pZCBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpkaWRT
Y3JvbGxGcmFtZShQYWdlT3ZlcmxheSYsIEZyYW1lJiBmcmFtZSkKIHsKLSAgICBpZiAoZnJhbWUt
PmlzTWFpbkZyYW1lKCkpCisgICAgaWYgKGZyYW1lLmlzTWFpbkZyYW1lKCkpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIGJ1aWxkUGhvbmVOdW1iZXJIaWdobGlnaHRzKCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1RpbGVkQ29yZUFuaW1hdGlvbkRy
YXdpbmdBcmVhLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1RpbGVk
Q29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhLmgKaW5kZXggYjgxYTRhNC4uOWU1YWJkYSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9UaWxlZENvcmVBbmlt
YXRpb25EcmF3aW5nQXJlYS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9tYWMvVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWEuaApAQCAtODQsNiArODQsOCBAQCBw
cml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCB2aWV3U3RhdGVEaWRDaGFuZ2UoV2ViQ29yZTo6Vmll
d1N0YXRlOjpGbGFncyBjaGFuZ2VkLCBib29sIHdhbnRzRGlkVXBkYXRlVmlld1N0YXRlKSBvdmVy
cmlkZTsKICAgICB2b2lkIGRpZFVwZGF0ZVZpZXdTdGF0ZVRpbWVyRmlyZWQoKTsKIAorICAgIHZp
cnR1YWwgdm9pZCBhdHRhY2hWaWV3T3ZlcmxheUdyYXBoaWNzTGF5ZXIoV2ViQ29yZTo6RnJhbWUq
LCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKikgb3ZlcnJpZGU7CisKICAgICAvLyBXZWJDb3JlOjpM
YXllckZsdXNoU2NoZWR1bGVyQ2xpZW50CiAgICAgdmlydHVhbCBib29sIGZsdXNoTGF5ZXJzKCkg
b3ZlcnJpZGU7CiAKQEAgLTEwNiw2ICsxMDgsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgdXBkYXRl
TGF5ZXJIb3N0aW5nQ29udGV4dCgpOwogCiAgICAgdm9pZCBzZXRSb290Q29tcG9zaXRpbmdMYXll
cihDQUxheWVyICopOworICAgIHZvaWQgdXBkYXRlUm9vdExheWVycygpOwogCiAgICAgV2ViQ29y
ZTo6VGlsZWRCYWNraW5nKiBtYWluRnJhbWVUaWxlZEJhY2tpbmcoKSBjb25zdDsKICAgICB2b2lk
IHVwZGF0ZURlYnVnSW5mb0xheWVyKGJvb2wgc2hvd0xheWVyKTsKQEAgLTEzOCw2ICsxNDEsOCBA
QCBwcml2YXRlOgogICAgIFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4IG1fdHJhbnNmb3Jt
OwogCiAgICAgUnVuTG9vcDo6VGltZXI8VGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWE+IG1f
c2VuZERpZFVwZGF0ZVZpZXdTdGF0ZVRpbWVyOworCisgICAgV2ViQ29yZTo6R3JhcGhpY3NMYXll
ciogbV92aWV3T3ZlcmxheVJvb3RMYXllcjsKIH07CiAKIERSQVdJTkdfQVJFQV9UWVBFX0NBU1RT
KFRpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhLCB0eXBlKCkgPT0gRHJhd2luZ0FyZWFUeXBl
VGlsZWRDb3JlQW5pbWF0aW9uKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9tYWMvVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWEubW0gYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1RpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdB
cmVhLm1tCmluZGV4IGU3NzU5MTkuLjI5OGIwMjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWEubW0K
KysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9UaWxlZENvcmVBbmlt
YXRpb25EcmF3aW5nQXJlYS5tbQpAQCAtNTEsNiArNTEsNyBAQAogI2ltcG9ydCA8V2ViQ29yZS9T
Y3JvbGxiYXJUaGVtZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9TZXR0aW5ncy5oPgogI2ltcG9ydCA8
V2ViQ29yZS9UaWxlZEJhY2tpbmcuaD4KKyNpbXBvcnQgPFdlYkNvcmUvV2ViQWN0aW9uRGlzYWJs
aW5nQ0FMYXllckRlbGVnYXRlLmg+CiAjaW1wb3J0IDx3dGYvTWFpblRocmVhZC5oPgogCiAjaWYg
RU5BQkxFKEFTWU5DX1NDUk9MTElORykKQEAgLTc2LDEwICs3NywxMiBAQCBUaWxlZENvcmVBbmlt
YXRpb25EcmF3aW5nQXJlYTo6VGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWEoV2ViUGFnZSYg
d2ViUGFnZSwgYwogICAgICwgbV9zY3JvbGxlZEV4cG9zZWRSZWN0KEZsb2F0UmVjdDo6aW5maW5p
dGVSZWN0KCkpCiAgICAgLCBtX3RyYW5zaWVudFpvb21TY2FsZSgxKQogICAgICwgbV9zZW5kRGlk
VXBkYXRlVmlld1N0YXRlVGltZXIoUnVuTG9vcDo6bWFpbigpLCB0aGlzLCAmVGlsZWRDb3JlQW5p
bWF0aW9uRHJhd2luZ0FyZWE6OmRpZFVwZGF0ZVZpZXdTdGF0ZVRpbWVyRmlyZWQpCisgICAgLCBt
X3ZpZXdPdmVybGF5Um9vdExheWVyKG51bGxwdHIpCiB7CiAgICAgbV93ZWJQYWdlLmNvcmVQYWdl
KCktPnNldHRpbmdzKCkuc2V0Rm9yY2VDb21wb3NpdGluZ01vZGUodHJ1ZSk7CiAKICAgICBtX2hv
c3RpbmdMYXllciA9IFtDQUxheWVyIGxheWVyXTsKKyAgICBbbV9ob3N0aW5nTGF5ZXIgc2V0RGVs
ZWdhdGU6W1dlYkFjdGlvbkRpc2FibGluZ0NBTGF5ZXJEZWxlZ2F0ZSBzaGFyZWRdXTsKICAgICBb
bV9ob3N0aW5nTGF5ZXIgc2V0RnJhbWU6bV93ZWJQYWdlLmJvdW5kcygpXTsKICAgICBbbV9ob3N0
aW5nTGF5ZXIgc2V0T3BhcXVlOllFU107CiAgICAgW21faG9zdGluZ0xheWVyIHNldEdlb21ldHJ5
RmxpcHBlZDpZRVNdOwpAQCAtMjA0LDkgKzIwNywyOCBAQCB2b2lkIFRpbGVkQ29yZUFuaW1hdGlv
bkRyYXdpbmdBcmVhOjp1cGRhdGVQcmVmZXJlbmNlcyhjb25zdCBXZWJQcmVmZXJlbmNlc1N0b3Jl
JgogICAgIHVwZGF0ZURlYnVnSW5mb0xheWVyKHNob3dUaWxlZFNjcm9sbGluZ0luZGljYXRvcik7
CiB9CiAKK3ZvaWQgVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWE6OnVwZGF0ZVJvb3RMYXll
cnMoKQoreworICAgIGlmICghbV9yb290TGF5ZXIpIHsKKyAgICAgICAgW21faG9zdGluZ0xheWVy
IHNldFN1YmxheWVyczpAWyBdXTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFttX2hv
c3RpbmdMYXllciBzZXRTdWJsYXllcnM6bV92aWV3T3ZlcmxheVJvb3RMYXllciA/IEBbIG1fcm9v
dExheWVyLmdldCgpLCBtX3ZpZXdPdmVybGF5Um9vdExheWVyLT5wbGF0Zm9ybUxheWVyKCkgXSA6
IEBbIG1fcm9vdExheWVyLmdldCgpIF1dOworfQorCit2b2lkIFRpbGVkQ29yZUFuaW1hdGlvbkRy
YXdpbmdBcmVhOjphdHRhY2hWaWV3T3ZlcmxheUdyYXBoaWNzTGF5ZXIoRnJhbWUqIGZyYW1lLCBH
cmFwaGljc0xheWVyKiB2aWV3T3ZlcmxheVJvb3RMYXllcikKK3sKKyAgICBpZiAoIWZyYW1lLT5p
c01haW5GcmFtZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3ZpZXdPdmVybGF5Um9vdExh
eWVyID0gdmlld092ZXJsYXlSb290TGF5ZXI7CisgICAgdXBkYXRlUm9vdExheWVycygpOworfQor
CiB2b2lkIFRpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhOjptYWluRnJhbWVDb250ZW50U2l6
ZUNoYW5nZWQoY29uc3QgSW50U2l6ZSYgc2l6ZSkKIHsKLSAgICBtX3dlYlBhZ2UucGFnZU92ZXJs
YXlDb250cm9sbGVyKCkuZGlkQ2hhbmdlRG9jdW1lbnRTaXplKCk7CisKIH0KIAogdm9pZCBUaWxl
ZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYTo6dXBkYXRlSW50cmluc2ljQ29udGVudFNpemVJZk5l
ZWRlZCgpCkBAIC0yODMsNyArMzA1LDEwIEBAIGJvb2wgVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2lu
Z0FyZWE6OmZsdXNoTGF5ZXJzKCkKIAogICAgIEZsb2F0UmVjdCB2aXNpYmxlUmVjdCA9IFttX2hv
c3RpbmdMYXllciBmcmFtZV07CiAgICAgdmlzaWJsZVJlY3QuaW50ZXJzZWN0KG1fc2Nyb2xsZWRF
eHBvc2VkUmVjdCk7Ci0gICAgbV93ZWJQYWdlLnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLmZsdXNo
UGFnZU92ZXJsYXlMYXllcnModmlzaWJsZVJlY3QpOworCisgICAgLy8gQmVjYXVzZSBvdXIgdmll
dy1yZWxhdGl2ZSBvdmVybGF5IHJvb3QgbGF5ZXIgaXMgbm90IGF0dGFjaGVkIHRvIHRoZSBtYWlu
IEdyYXBoaWNzTGF5ZXIgdHJlZSwgd2UgbmVlZCB0byBmbHVzaCBpdCBtYW51YWxseS4KKyAgICBp
ZiAobV92aWV3T3ZlcmxheVJvb3RMYXllcikKKyAgICAgICAgbV92aWV3T3ZlcmxheVJvb3RMYXll
ci0+Zmx1c2hDb21wb3NpdGluZ1N0YXRlKHZpc2libGVSZWN0KTsKIAogICAgIGJvb2wgcmV0dXJu
VmFsdWUgPSBtX3dlYlBhZ2UubWFpbkZyYW1lVmlldygpLT5mbHVzaENvbXBvc2l0aW5nU3RhdGVJ
bmNsdWRpbmdTdWJmcmFtZXMoKTsKICNpZiBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKQpAQCAtMzYz
LDggKzM4OCw2IEBAIHZvaWQgVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWE6OnVwZGF0ZVNj
cm9sbGVkRXhwb3NlZFJlY3QoKQogI2VuZGlmCiAKICAgICBmcmFtZVZpZXctPnNldEV4cG9zZWRS
ZWN0KG1fc2Nyb2xsZWRFeHBvc2VkUmVjdCk7Ci0KLSAgICBtX3dlYlBhZ2UucGFnZU92ZXJsYXlD
b250cm9sbGVyKCkuZGlkQ2hhbmdlRXhwb3NlZFJlY3QoKTsKIH0KIAogdm9pZCBUaWxlZENvcmVB
bmltYXRpb25EcmF3aW5nQXJlYTo6dXBkYXRlR2VvbWV0cnkoY29uc3QgSW50U2l6ZSYgdmlld1Np
emUsIGNvbnN0IEludFNpemUmIGxheWVyUG9zaXRpb24pCkBAIC00NjQsMTIgKzQ4NywxMiBAQCB2
b2lkIFRpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhOjpzZXRSb290Q29tcG9zaXRpbmdMYXll
cihDQUxheWVyICpsYXllcikKICAgICBbQ0FUcmFuc2FjdGlvbiBiZWdpbl07CiAgICAgW0NBVHJh
bnNhY3Rpb24gc2V0RGlzYWJsZUFjdGlvbnM6WUVTXTsKIAotICAgIFttX2hvc3RpbmdMYXllciBz
ZXRTdWJsYXllcnM6bGF5ZXIgPyBAWyBsYXllciwgbV93ZWJQYWdlLnBhZ2VPdmVybGF5Q29udHJv
bGxlcigpLnZpZXdPdmVybGF5Um9vdExheWVyKCktPnBsYXRmb3JtTGF5ZXIoKSBdIDogQFsgXV07
Ci0KICAgICBib29sIGhhZFJvb3RMYXllciA9ICEhbV9yb290TGF5ZXI7CiAgICAgbV9yb290TGF5
ZXIgPSBsYXllcjsKICAgICBbbV9yb290TGF5ZXIgc2V0U3VibGF5ZXJUcmFuc2Zvcm06bV90cmFu
c2Zvcm1dOwogCisgICAgdXBkYXRlUm9vdExheWVycygpOworCiAgICAgaWYgKGhhZFJvb3RMYXll
ciAhPSAhIWxheWVyKQogICAgICAgICBtX2xheWVySG9zdGluZ0NvbnRleHQtPnNldFJvb3RMYXll
cihsYXllciA/IG1faG9zdGluZ0xheWVyLmdldCgpIDogMCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV0tBY2Nlc3NpYmlsaXR5V2ViUGFnZU9i
amVjdE1hYy5tbSBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV0tBY2Nl
c3NpYmlsaXR5V2ViUGFnZU9iamVjdE1hYy5tbQppbmRleCAzODMzOWJhLi41NGRkNDQ0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dLQWNjZXNzaWJp
bGl0eVdlYlBhZ2VPYmplY3RNYWMubW0KKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL21hYy9XS0FjY2Vzc2liaWxpdHlXZWJQYWdlT2JqZWN0TWFjLm1tCkBAIC00MCw2ICs0
MCw3IEBACiAjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lVmlldy5oPgogI2ltcG9ydCA8V2ViQ29yZS9N
YWluRnJhbWUuaD4KICNpbXBvcnQgPFdlYkNvcmUvUGFnZS5oPgorI2ltcG9ydCA8V2ViQ29yZS9Q
YWdlT3ZlcmxheUNvbnRyb2xsZXIuaD4KICNpbXBvcnQgPFdlYkNvcmUvU2Nyb2xsVmlldy5oPgog
I2ltcG9ydCA8V2ViQ29yZS9TY3JvbGxiYXIuaD4KICNpbXBvcnQgPFdlYktpdFN5c3RlbUludGVy
ZmFjZS5oPgpAQCAtNzUsMTkgKzc2LDEzIEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CiAKIC0g
KE5TQXJyYXkgKilhY2Nlc3NpYmlsaXR5UGFyYW1ldGVyaXplZEF0dHJpYnV0ZU5hbWVzCiB7Ci0g
ICAgV0tSZXRhaW5QdHI8V0tBcnJheVJlZj4gcmVzdWx0ID0gYWRvcHRXSyhtX3BhZ2UtPnBhZ2VP
dmVybGF5Q29udHJvbGxlcigpLmNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlc05hbWVzKHRydWUp
KTsKLSAgICBpZiAoIXJlc3VsdCkKKyAgICBWZWN0b3I8U3RyaW5nPiByZXN1bHQgPSBtX3BhZ2Ut
PmNvcmVQYWdlKCktPnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLmNvcHlBY2Nlc3NpYmlsaXR5QXR0
cmlidXRlc05hbWVzKHRydWUpOworICAgIGlmIChyZXN1bHQuaXNFbXB0eSgpKQogICAgICAgICBy
ZXR1cm4gbmlsOwogICAgIAogICAgIE5TTXV0YWJsZUFycmF5ICpuYW1lcyA9IFtOU011dGFibGVB
cnJheSBhcnJheV07Ci0gICAgc2l6ZV90IGNvdW50ID0gV0tBcnJheUdldFNpemUocmVzdWx0Lmdl
dCgpKTsKLSAgICBmb3IgKHNpemVfdCBrID0gMDsgayA8IGNvdW50OyBrKyspIHsKLSAgICAgICAg
V0tUeXBlUmVmIGl0ZW0gPSBXS0FycmF5R2V0SXRlbUF0SW5kZXgocmVzdWx0LmdldCgpLCBrKTsK
LSAgICAgICAgaWYgKHRvSW1wbChpdGVtKS0+dHlwZSgpID09IEFQSTo6U3RyaW5nOjpBUElUeXBl
KSB7Ci0gICAgICAgICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IG5hbWUgPSBhZG9wdENGKFdL
U3RyaW5nQ29weUNGU3RyaW5nKGtDRkFsbG9jYXRvckRlZmF1bHQsIChXS1N0cmluZ1JlZilpdGVt
KSk7Ci0gICAgICAgICAgICBbbmFtZXMgYWRkT2JqZWN0OihOU1N0cmluZyAqKW5hbWUuZ2V0KCld
OwotICAgICAgICB9Ci0gICAgfQorICAgIGZvciAoYXV0byYgbmFtZSA6IHJlc3VsdCkKKyAgICAg
ICAgW25hbWVzIGFkZE9iamVjdDooTlNTdHJpbmcgKiluYW1lXTsKICAgICAKICAgICByZXR1cm4g
bmFtZXM7CiB9CkBAIC0xNjQsMjMgKzE1OSwyNiBAQCB1c2luZyBuYW1lc3BhY2UgV2ViS2l0Owog
CiAtIChpZClhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6KE5TU3RyaW5nICopYXR0cmlidXRl
IGZvclBhcmFtZXRlcjooaWQpcGFyYW1ldGVyCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tUeXBlUmVm
PiBwYWdlT3ZlcmxheVBhcmFtZXRlciA9IDA7Ci0gICAgCi0gICAgaWYgKFtwYXJhbWV0ZXIgaXNL
aW5kT2ZDbGFzczpbTlNWYWx1ZSBjbGFzc11dICYmIHN0cmNtcChbKE5TVmFsdWUqKXBhcmFtZXRl
ciBvYmpDVHlwZV0sIEBlbmNvZGUoTlNQb2ludCkpID09IDApIHsKLSAgICAgICAgTlNQb2ludCBw
b2ludCA9IFtzZWxmIGNvbnZlcnRTY3JlZW5Qb2ludFRvUm9vdFZpZXc6WyhOU1ZhbHVlICopcGFy
YW1ldGVyIHBvaW50VmFsdWVdXTsKLSAgICAgICAgcGFnZU92ZXJsYXlQYXJhbWV0ZXIgPSBXS1Bv
aW50Q3JlYXRlKFdLUG9pbnRNYWtlKHBvaW50LngsIHBvaW50LnkpKTsKLSAgICB9Ci0gICAgCi0g
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGF0dHJpYnV0ZVJlZiA9IGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoQ0ZTdHJpbmcoKENGU3RyaW5nUmVmKWF0dHJpYnV0ZSkpOwotICAgIFdLUmV0
YWluUHRyPFdLVHlwZVJlZj4gcmVzdWx0ID0gYWRvcHRXSyhtX3BhZ2UtPnBhZ2VPdmVybGF5Q29u
dHJvbGxlcigpLmNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWUoYXR0cmlidXRlUmVmLmdl
dCgpLCBwYWdlT3ZlcmxheVBhcmFtZXRlci5nZXQoKSkpOwotICAgIGlmICghcmVzdWx0KQorICAg
IFdlYkNvcmU6OkZsb2F0UG9pbnQgcGFnZU92ZXJsYXlQb2ludDsKKyAgICBpZiAoW3BhcmFtZXRl
ciBpc0tpbmRPZkNsYXNzOltOU1ZhbHVlIGNsYXNzXV0gJiYgIXN0cmNtcChbKE5TVmFsdWUgKilw
YXJhbWV0ZXIgb2JqQ1R5cGVdLCBAZW5jb2RlKE5TUG9pbnQpKSkKKyAgICAgICAgcGFnZU92ZXJs
YXlQb2ludCA9IFtzZWxmIGNvbnZlcnRTY3JlZW5Qb2ludFRvUm9vdFZpZXc6WyhOU1ZhbHVlICop
cGFyYW1ldGVyIHBvaW50VmFsdWVdXTsKKyAgICBlbHNlCiAgICAgICAgIHJldHVybiBuaWw7Ci0g
ICAgCi0gICAgaWYgKHRvSW1wbChyZXN1bHQuZ2V0KCkpLT50eXBlKCkgPT0gQVBJOjpTdHJpbmc6
OkFQSVR5cGUpCi0gICAgICAgIHJldHVybiBDRkJyaWRnaW5nUmVsZWFzZShXS1N0cmluZ0NvcHlD
RlN0cmluZyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAoV0tTdHJpbmdSZWYpcmVzdWx0LmdldCgpKSk7
Ci0gICAgaWYgKHRvSW1wbChyZXN1bHQuZ2V0KCkpLT50eXBlKCkgPT0gQVBJOjpCb29sZWFuOjpB
UElUeXBlKQotICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhCb29sOldLQm9vbGVh
bkdldFZhbHVlKHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4ocmVzdWx0LmdldCgpKSldOwotICAg
IAorCisgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOkAiQVhEYXRhRGV0ZWN0b3JF
eGlzdHNBdFBvaW50Il0gfHwgW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6QCJBWERpZFNob3dE
YXRhRGV0ZWN0b3JNZW51QXRQb2ludCJdKSB7CisgICAgICAgIGJvb2wgdmFsdWU7CisgICAgICAg
IGlmICghbV9wYWdlLT5jb3JlUGFnZSgpLT5wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKS5jb3B5QWNj
ZXNzaWJpbGl0eUF0dHJpYnV0ZUJvb2xWYWx1ZUZvclBvaW50KGF0dHJpYnV0ZSwgcGFnZU92ZXJs
YXlQb2ludCwgdmFsdWUpKQorICAgICAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAgICAgcmV0dXJu
IFtOU051bWJlciBudW1iZXJXaXRoQm9vbDp2YWx1ZV07CisgICAgfQorCisgICAgaWYgKFthdHRy
aWJ1dGUgaXNFcXVhbFRvU3RyaW5nOkAiQVhEYXRhRGV0ZWN0b3JUeXBlQXRQb2ludCJdKSB7Cisg
ICAgICAgIFN0cmluZyB2YWx1ZTsKKyAgICAgICAgaWYgKCFtX3BhZ2UtPmNvcmVQYWdlKCktPnBh
Z2VPdmVybGF5Q29udHJvbGxlcigpLmNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlU3RyaW5nVmFs
dWVGb3JQb2ludChhdHRyaWJ1dGUsIHBhZ2VPdmVybGF5UG9pbnQsIHZhbHVlKSkKKyAgICAgICAg
ICAgIHJldHVybiBuaWw7CisgICAgICAgIHJldHVybiBbTlNTdHJpbmcgc3RyaW5nV2l0aFN0cmlu
Zzp2YWx1ZV07CisgICAgfQorCiAgICAgcmV0dXJuIG5pbDsKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>238948</attachid>
            <date>2014-09-30 12:54:44 -0700</date>
            <delta_ts>2014-09-30 15:30:17 -0700</delta_ts>
            <desc>patch</desc>
            <filename>pageoverlay.diff</filename>
            <type>text/plain</type>
            <size>171725</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNv
cmUvQ01ha2VMaXN0cy50eHQKaW5kZXggNmRhZGMzMC4uZTFlOGZlNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKQEAgLTE5NDAsNiArMTk0MCw4IEBAIHNldChXZWJDb3JlX1NPVVJDRVMKICAgICBwYWdl
L1BhZ2VDb25zb2xlQ2xpZW50LmNwcAogICAgIHBhZ2UvUGFnZUdyb3VwLmNwcAogICAgIHBhZ2Uv
UGFnZUdyb3VwTG9hZERlZmVycmVyLmNwcAorICAgIHBhZ2UvUGFnZU92ZXJsYXkuY3BwCisgICAg
cGFnZS9QYWdlT3ZlcmxheUNvbnRyb2xsZXIuY3BwCiAgICAgcGFnZS9QYWdlU2VyaWFsaXplci5j
cHAKICAgICBwYWdlL1BhZ2VUaHJvdHRsZXIuY3BwCiAgICAgcGFnZS9QYWdlVmlzaWJpbGl0eVN0
YXRlLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4gYi9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgppbmRleCA5NDNjMzExLi42MTdhN2JhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgorKysgYi9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLmV4cC5pbgpAQCAtMTg3LDYgKzE4NywxMyBAQCBfX1pON1dlYkNvcmUxMU1lbW9yeUNh
Y2hlMThyZXNvdXJjZUZvclJlcXVlc3RFUktOU18xNVJlc291cmNlUmVxdWVzdEVOU185U2Vzc2lv
bgogX19aTjdXZWJDb3JlMTFNZW1vcnlDYWNoZTE5Z2V0T3JpZ2luc1dpdGhDYWNoZUVSTjNXVEY3
SGFzaFNldElOUzFfNlJlZlB0cklOU18xNFNlY3VyaXR5T3JpZ2luRUVFTlNfMThTZWN1cml0eU9y
aWdpbkhhc2hFTlMxXzEwSGFzaFRyYWl0c0lTNV9FRUVFCiBfX1pON1dlYkNvcmUxMU1lbW9yeUNh
Y2hlMjByZW1vdmVJbWFnZUZyb21DYWNoZUVSS05TXzNVUkxFUktOM1dURjZTdHJpbmdFCiBfX1pO
N1dlYkNvcmUxMU1lbW9yeUNhY2hlMjVyZW1vdmVSZXNvdXJjZXNXaXRoT3JpZ2luRVBOU18xNFNl
Y3VyaXR5T3JpZ2luRQorX19aTjdXZWJDb3JlMTFQYWdlT3ZlcmxheTE1c2V0TmVlZHNEaXNwbGF5
RVJLTlNfN0ludFJlY3RFCitfX1pON1dlYkNvcmUxMVBhZ2VPdmVybGF5MTVzZXROZWVkc0Rpc3Bs
YXlFdgorX19aTjdXZWJDb3JlMTFQYWdlT3ZlcmxheTIwc3RvcEZhZGVPdXRBbmltYXRpb25Fdgor
X19aTjdXZWJDb3JlMTFQYWdlT3ZlcmxheTVjbGVhckV2CitfX1pON1dlYkNvcmUxMVBhZ2VPdmVy
bGF5NWxheWVyRXYKK19fWk43V2ViQ29yZTExUGFnZU92ZXJsYXk2Y3JlYXRlRVJOUzBfNkNsaWVu
dEVOUzBfMTFPdmVybGF5VHlwZUUKK19fWk43V2ViQ29yZTExUGFnZU92ZXJsYXk4c2V0RnJhbWVF
TlNfN0ludFJlY3RFCiBfX1pON1dlYkNvcmUxMVNRTFJlc3VsdE9rRQogX19aTjdXZWJDb3JlMTFV
UkxXaXRoRGF0YUVQNk5TRGF0YVA1TlNVUkwKIF9fWk43V2ViQ29yZTExZ2V0VVJMQnl0ZXNFUEs3
X19DRlVSTFJOM1dURjZWZWN0b3JJY0xtNTEyRU5TM18xNUNyYXNoT25PdmVyZmxvd0VFRQpAQCAt
OTA5LDYgKzkxNiwxMiBAQCBfX1pON1dlYkNvcmUyMU1lbW9yeVByZXNzdXJlSGFuZGxlcjdpbnN0
YWxsRXYKIF9fWk43V2ViQ29yZTIxTmV0d29ya1N0b3JhZ2VTZXNzaW9uMjFkZWZhdWx0U3RvcmFn
ZVNlc3Npb25FdgogX19aTjdXZWJDb3JlMjFOZXR3b3JrU3RvcmFnZVNlc3Npb24yNXN3aXRjaFRv
TmV3VGVzdGluZ1Nlc3Npb25FdgogX19aTjdXZWJDb3JlMjFOZXR3b3JrU3RvcmFnZVNlc3Npb24y
OGNyZWF0ZVByaXZhdGVCcm93c2luZ1Nlc3Npb25FUktOM1dURjZTdHJpbmdFCitfX1pON1dlYkNv
cmUyMVBhZ2VPdmVybGF5Q29udHJvbGxlcjE4aW5zdGFsbFBhZ2VPdmVybGF5RU4zV1RGMTBQYXNz
UmVmUHRySU5TXzExUGFnZU92ZXJsYXlFRUVOUzNfOEZhZGVNb2RlRQorX19aTjdXZWJDb3JlMjFQ
YWdlT3ZlcmxheUNvbnRyb2xsZXIyMHVuaW5zdGFsbFBhZ2VPdmVybGF5RVBOU18xMVBhZ2VPdmVy
bGF5RU5TMV84RmFkZU1vZGVFCitfX1pON1dlYkNvcmUyMVBhZ2VPdmVybGF5Q29udHJvbGxlcjIw
dmlld092ZXJsYXlSb290TGF5ZXJFdgorX19aTjdXZWJDb3JlMjFQYWdlT3ZlcmxheUNvbnRyb2xs
ZXIzMmNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlc05hbWVzRWIKK19fWk43V2ViQ29yZTIxUGFn
ZU92ZXJsYXlDb250cm9sbGVyNDNjb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZUJvb2xWYWx1ZUZv
clBvaW50RU4zV1RGNlN0cmluZ0VOU18xMEZsb2F0UG9pbnRFUmIKK19fWk43V2ViQ29yZTIxUGFn
ZU92ZXJsYXlDb250cm9sbGVyNDVjb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVN0cmluZ1ZhbHVl
Rm9yUG9pbnRFTjNXVEY2U3RyaW5nRU5TXzEwRmxvYXRQb2ludEVSUzJfCiBfX1pON1dlYkNvcmUy
MVBsYXRmb3JtS2V5Ym9hcmRFdmVudDI0ZGlzYW1iaWd1YXRlS2V5RG93bkV2ZW50RU5TXzEzUGxh
dGZvcm1FdmVudDRUeXBlRWIKIF9fWk43V2ViQ29yZTIxUmVtb3RlQ29tbWFuZExpc3RlbmVyNmNy
ZWF0ZUVSTlNfMjdSZW1vdGVDb21tYW5kTGlzdGVuZXJDbGllbnRFCiBfX1pON1dlYkNvcmUyMVJl
c291cmNlTG9hZFNjaGVkdWxlcjIwc2VydmVQZW5kaW5nUmVxdWVzdHNFTlNfMjBSZXNvdXJjZUxv
YWRQcmlvcml0eUUKQEAgLTE2MDMsNiArMTYxNiw4IEBAIF9fWk5LN1dlYkNvcmUxMUhpc3RvcnlJ
dGVtOGNoaWxkcmVuRXYKIF9fWk5LN1dlYkNvcmUxMUhpc3RvcnlJdGVtOHJlZmVycmVyRXYKIF9f
Wk5LN1dlYkNvcmUxMUhpc3RvcnlJdGVtOXVybFN0cmluZ0V2CiBfX1pOSzdXZWJDb3JlMTFIaXN0
b3J5SXRlbTl2aWV3U3RhdGVFdgorX19aTks3V2ViQ29yZTExUGFnZU92ZXJsYXk1ZnJhbWVFdgor
X19aTks3V2ViQ29yZTExUGFnZU92ZXJsYXk2Ym91bmRzRXYKIF9fWk5LN1dlYkNvcmUxMVJlbmRl
ckJsb2NrMjVpbmxpbmVFbGVtZW50Q29udGludWF0aW9uRXYKIF9fWk5LN1dlYkNvcmUxMVJlbmRl
ckxheWVyMTlhYnNvbHV0ZUJvdW5kaW5nQm94RXYKIF9fWk5LN1dlYkNvcmUxMVJlbmRlckxheWVy
MjRuZWVkc0NvbXBvc2l0ZWRTY3JvbGxpbmdFdgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
dmN4cHJvai9XZWJDb3JlLnZjeHByb2oKaW5kZXggODY2MWJiMS4uNGRhNWFhMyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvagorKysgYi9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qCkBAIC03MTgwLDYg
KzcxODAsOCBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGFnZVxQYWdlQ29uc29sZUNs
aWVudC5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwYWdlXFBhZ2VHcm91cC5j
cHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwYWdlXFBhZ2VHcm91cExvYWREZWZl
cnJlci5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwYWdlXFBhZ2VPdmVybGF5
LmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBhZ2VcUGFnZU92ZXJsYXlDb250
cm9sbGVyLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBhZ2VcUGFnZVNlcmlh
bGl6ZXIuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGFnZVxQYWdlVGhyb3R0
bGVyLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBhZ2VcUGFnZVZpc2liaWxp
dHlTdGF0ZS5jcHAiIC8+CkBAIC0xOTE3NSw2ICsxOTE3Nyw4IEBACiAgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxwYWdlXFBhZ2VDb25zb2xlQ2xpZW50LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxwYWdlXFBhZ2VHcm91cC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5ccGFnZVxQYWdlR3JvdXBMb2FkRGVmZXJyZXIuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXHBhZ2VcUGFnZU92ZXJsYXkuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XHBhZ2VcUGFnZU92ZXJsYXlDb250cm9sbGVyLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxwYWdlXFBhZ2VTZXJpYWxpemVyLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxwYWdlXFBhZ2VWaXNpYmlsaXR5U3RhdGUuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXHBhZ2VcUGVyZm9ybWFuY2UuaCIgLz4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2ouZmlsdGVycyBiL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2ouZmlsdGVycwppbmRleCBkNzFjY2ZkLi4xYzRm
ZTEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52
Y3hwcm9qLmZpbHRlcnMKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNv
cmUudmN4cHJvai5maWx0ZXJzCkBAIC00OTk4LDYgKzQ5OTgsMTIgQEAKICAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXHBhZ2VcUGFnZUdyb3VwTG9hZERlZmVycmVyLmNwcCI+CiAgICAgICA8Rmls
dGVyPnBhZ2U8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXHBhZ2VcUGFnZU92ZXJsYXkuY3BwIj4KKyAgICAgIDxGaWx0ZXI+cGFnZTwvRmlsdGVy
PgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGFnZVxQYWdl
T3ZlcmxheUNvbnRyb2xsZXIuY3BwIj4KKyAgICAgIDxGaWx0ZXI+cGFnZTwvRmlsdGVyPgorICAg
IDwvQ2xDb21waWxlPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGFnZVxQYWdlU2VyaWFs
aXplci5jcHAiPgogICAgICAgPEZpbHRlcj5wYWdlPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+
CkBAIC0xMjk0Myw2ICsxMjk0OSwxMiBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGFn
ZVxQYWdlR3JvdXBMb2FkRGVmZXJyZXIuaCI+CiAgICAgICA8RmlsdGVyPnBhZ2U8L0ZpbHRlcj4K
ICAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBhZ2VcUGFnZU92
ZXJsYXkuaCI+CisgICAgICA8RmlsdGVyPnBhZ2U8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4K
KyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBhZ2VcUGFnZU92ZXJsYXlDb250cm9sbGVyLmgi
PgorICAgICAgPEZpbHRlcj5wYWdlPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CiAgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxwYWdlXFBhZ2VTZXJpYWxpemVyLmgiPgogICAgICAgPEZpbHRl
cj5wYWdlPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggZGNmNDZhZS4uOWMxODA1OSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agpAQCAtMTA5MSw2ICsxMDkxLDEwIEBACiAJCTJENUE1OTJGMTUyNTI1MjMwMDM2RUU1MSAvKiBJ
bWFnZU9yaWVudGF0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEE4NzQ4RDc0MTJDQzNGODkwMDFGQkE0MSAvKiBJbWFnZU9yaWVudGF0aW9uLmNw
cCAqLzsgfTsKIAkJMkQ1QTU5MzExNTI1MjVEMDAwMzZFRTUxIC8qIEltYWdlT3JpZW50YXRpb24u
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4NzQ4RDY2
MTJDQzM3NjMwMDFGQkE0MSAvKiBJbWFnZU9yaWVudGF0aW9uLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMkQ1QkM0MjcxNkY4ODJFRTAwNzA0OEQw
IC8qIFNlY3VyaXR5UG9saWN5VmlvbGF0aW9uRXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJENUJDNDI1MTZGODgyQkUwMDcwNDhEMCAvKiBTZWN1
cml0eVBvbGljeVZpb2xhdGlvbkV2ZW50LmggKi87IH07CisJCTJENUM5Q0ZGMTlDN0I1MkUwMEIz
QzVDMSAvKiBQYWdlT3ZlcmxheS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAyRDVDOUNGQjE5QzdCNTJFMDBCM0M1QzEgLyogUGFnZU92ZXJsYXkuY3Bw
ICovOyB9OworCQkyRDVDOUQwMDE5QzdCNTJFMDBCM0M1QzEgLyogUGFnZU92ZXJsYXkuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJENUM5Q0ZDMTlDN0I1
MkUwMEIzQzVDMSAvKiBQYWdlT3ZlcmxheS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CisJCTJENUM5RDAxMTlDN0I1MkUwMEIzQzVDMSAvKiBQYWdlT3Zl
cmxheUNvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMkQ1QzlDRkQxOUM3QjUyRTAwQjNDNUMxIC8qIFBhZ2VPdmVybGF5Q29udHJvbGxl
ci5jcHAgKi87IH07CisJCTJENUM5RDAyMTlDN0I1MkUwMEIzQzVDMSAvKiBQYWdlT3ZlcmxheUNv
bnRyb2xsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDJENUM5Q0ZFMTlDN0I1MkUwMEIzQzVDMSAvKiBQYWdlT3ZlcmxheUNvbnRyb2xsZXIuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkyRDZFNDY4NDE3
RDY2MEY1MDBFQ0Y4QkIgLyogUERGRG9jdW1lbnRJbWFnZU1hYy5tbSBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJENkU0NjgyMTdENjYwRjUwMEVDRjhCQiAv
KiBQREZEb2N1bWVudEltYWdlTWFjLm1tICovOyB9OwogCQkyRDcwQkExMzE4MDc0RERGMDAwMTkw
OEEgLyogUGxhdGZvcm1DQUxheWVyTWFjLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAyRDcwQkExMjE4MDc0RERGMDAwMTkwOEEgLyogUGxhdGZvcm1DQUxh
eWVyTWFjLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJMkQ3MEJBMTUxODA3NEY4NjAwMDE5MDhBIC8qIFBsYXRmb3JtQ0FMYXllci5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRDcwQkExNDE4MDc0Rjg1
MDAwMTkwOEEgLyogUGxhdGZvcm1DQUxheWVyLmNwcCAqLzsgfTsKQEAgLTgwODUsNiArODA4OSwx
MCBAQAogCQkyRDQ2RjA0RjE3Qjk2RkQyMDA1NjQ3RjAgLyogSW50U2l6ZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbnRTaXplLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMkQ1QkM0MjUxNkY4ODJCRTAwNzA0OEQwIC8qIFNlY3VyaXR5UG9saWN5
VmlvbGF0aW9uRXZlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2VjdXJp
dHlQb2xpY3lWaW9sYXRpb25FdmVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQky
RDVCQzQyNjE2Rjg4MkJFMDA3MDQ4RDAgLyogU2VjdXJpdHlQb2xpY3lWaW9sYXRpb25FdmVudC5p
ZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gU2VjdXJpdHlQb2xpY3lWaW9sYXRpb25FdmVudC5p
ZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTJENUM5Q0ZCMTlDN0I1MkUwMEIzQzVD
MSAvKiBQYWdlT3ZlcmxheS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBQYWdlT3ZlcmxheS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTJENUM5Q0ZD
MTlDN0I1MkUwMEIzQzVDMSAvKiBQYWdlT3ZlcmxheS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBQYWdlT3ZlcmxheS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQky
RDVDOUNGRDE5QzdCNTJFMDBCM0M1QzEgLyogUGFnZU92ZXJsYXlDb250cm9sbGVyLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBhZ2VPdmVybGF5Q29udHJvbGxlci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTJENUM5Q0ZFMTlDN0I1MkUwMEIzQzVD
MSAvKiBQYWdlT3ZlcmxheUNvbnRyb2xsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gUGFnZU92ZXJsYXlDb250cm9sbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTJENkU0NjgyMTdENjYwRjUwMEVDRjhCQiAvKiBQREZEb2N1bWVudEltYWdlTWFjLm1tICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gUERGRG9jdW1lbnRJbWFnZU1h
Yy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkQ3MEJBMTIxODA3NERERjAwMDE5
MDhBIC8qIFBsYXRmb3JtQ0FMYXllck1hYy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBQbGF0Zm9ybUNBTGF5ZXJNYWMuaDsgcGF0aCA9IGNhL21hYy9QbGF0Zm9ybUNBTGF5ZXJN
YWMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkQ3MEJBMTQxODA3NEY4NTAwMDE5
MDhBIC8qIFBsYXRmb3JtQ0FMYXllci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBQbGF0Zm9ybUNBTGF5ZXIuY3BwOyBwYXRoID0gY2EvUGxhdGZvcm1DQUxheWVyLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE2NTk3LDYgKzE2NjA1LDEwIEBACiAJ
CQkJOTMwMkIwQkUwRDc5RjgyQzAwQzdFRTgzIC8qIFBhZ2VHcm91cC5oICovLAogCQkJCTdBNjc0
QkQ5MEY5RUJGNEUwMDZDRjA5OSAvKiBQYWdlR3JvdXBMb2FkRGVmZXJyZXIuY3BwICovLAogCQkJ
CTdBNjc0QkRBMEY5RUJGNEUwMDZDRjA5OSAvKiBQYWdlR3JvdXBMb2FkRGVmZXJyZXIuaCAqLywK
KwkJCQkyRDVDOUNGQjE5QzdCNTJFMDBCM0M1QzEgLyogUGFnZU92ZXJsYXkuY3BwICovLAorCQkJ
CTJENUM5Q0ZDMTlDN0I1MkUwMEIzQzVDMSAvKiBQYWdlT3ZlcmxheS5oICovLAorCQkJCTJENUM5
Q0ZEMTlDN0I1MkUwMEIzQzVDMSAvKiBQYWdlT3ZlcmxheUNvbnRyb2xsZXIuY3BwICovLAorCQkJ
CTJENUM5Q0ZFMTlDN0I1MkUwMEIzQzVDMSAvKiBQYWdlT3ZlcmxheUNvbnRyb2xsZXIuaCAqLywK
IAkJCQkzNzFFNjVDRDEzNjYxRUVEMDBCRUVEQjAgLyogUGFnZVNlcmlhbGl6ZXIuY3BwICovLAog
CQkJCTM3MUU2NUNCMTM2NjFFREMwMEJFRURCMCAvKiBQYWdlU2VyaWFsaXplci5oICovLAogCQkJ
CUE3MTk3RjI1MTc1NjhBRTUwMDdCOTQ0MiAvKiBQYWdlVGhyb3R0bGVyLmNwcCAqLywKQEAgLTIz
NjYyLDYgKzIzNjc0LDcgQEAKIAkJCQk5N0JDNkEyMTE1MDVGMDgxMDAxQjc0QUMgLyogRGF0YWJh
c2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3QkM2QTI0MTUwNUYwODEwMDFCNzRBQyAvKiBEYXRh
YmFzZUF1dGhvcml6ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFMTZDRkQ0MTY5RDFERUQwMEQz
QTBDNyAvKiBEYXRhYmFzZUJhY2tlbmQuaCBpbiBIZWFkZXJzICovLAorCQkJCTJENUM5RDAyMTlD
N0I1MkUwMEIzQzVDMSAvKiBQYWdlT3ZlcmxheUNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAog
CQkJCTk3QkM2OURCMTUwNUYwNzYwMDFCNzRBQyAvKiBEYXRhYmFzZUJhY2tlbmRCYXNlLmggaW4g
SGVhZGVycyAqLywKIAkJCQlGRTZGNkFCMDE2OUUwNTc1MDBGQzMwQTIgLyogRGF0YWJhc2VCYWNr
ZW5kQ29udGV4dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkUxNkNGRDYxNjlEMURFRDAwRDNBMEM3
IC8qIERhdGFiYXNlQmFja2VuZFN5bmMuaCBpbiBIZWFkZXJzICovLApAQCAtMjU2MjksNiArMjU2
NDIsNyBAQAogCQkJCTQzOTA0NkVDMTJEQTI1RTgwMEFGODBBOSAvKiBSZW5kZXJNYXRoTUxUb2tl
bi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDM5MDQ2RUExMkRBMjVFODAwQUY4MEEyIC8qIFJlbmRl
ck1hdGhNTFVuZGVyT3Zlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTRDMjc5NTkwQ0Y5NzQxOTAw
RTk3Qjk4IC8qIFJlbmRlck1lZGlhLmggaW4gSGVhZGVycyAqLywKKwkJCQkyRDVDOUQwMDE5QzdC
NTJFMDBCM0M1QzEgLyogUGFnZU92ZXJsYXkuaCBpbiBIZWFkZXJzICovLAogCQkJCURFQkNDREQy
MTY2NDZFODIwMEE0NTJFMSAvKiBSZW5kZXJNZWRpYUNvbnRyb2xFbGVtZW50cy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNDFGQTMwM0YxMzE2QzI5QzAwQzBCRkM1IC8qIFJlbmRlck1lZGlhQ29udHJv
bHMuaCBpbiBIZWFkZXJzICovLAogCQkJCUFCRERGRTdBMEE1QzZFNzAwMEEzRTExRCAvKiBSZW5k
ZXJNZW51TGlzdC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yODAxNyw2ICsyODAzMSw3IEBACiAJCQkJ
QTU4NDBFMUMxODdCNzRENTAwODQzQjEwIC8qIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tp
ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3MUIxRTEyNjE2NDA0OTFBMDBCMTg4MEEgLyogSW5z
cGVjdG9yTGF5ZXJUcmVlQWdlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTA0QUFDQ0QxODM0
NDU1OTAwRTNEOUJDIC8qIEluc3BlY3Rvck5vZGVGaW5kZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJMkQ1QzlEMDExOUM3QjUyRTAwQjNDNUMxIC8qIFBhZ2VPdmVybGF5Q29udHJvbGxlci5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk3QzUyMkQ0QjE1QjQ3N0U4MDA5QjdDOTUgLyogSW5zcGVjdG9y
T3ZlcmxheS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0RjZGREQ2NDEzNDFERUREMDAxRjhFRTMg
LyogSW5zcGVjdG9yUGFnZUFnZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk5Q0MwQjY2MThC
RTlGMTUwMDZDRUJDQyAvKiBJbnNwZWN0b3JSZXBsYXlBZ2VudC5jcHAgaW4gU291cmNlcyAqLywK
QEAgLTI4MDg1LDYgKzI4MTAwLDcgQEAKIAkJCQlCQ0MwNjU4NzBGM0NFMkE3MDBDRDJEODcgLyog
SlNDbGllbnRSZWN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDQzA2NTg5MEYzQ0UyQTcwMENE
MkQ4NyAvKiBKU0NsaWVudFJlY3RMaXN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTVDNDMwNEI1
MTkxQUVGNDYwMDBFMkJDMCAvKiBKU0VYVFNoYWRlclRleHR1cmVMT0QuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJMkQ1QzlDRkYxOUM3QjUyRTAwQjNDNUMxIC8qIFBhZ2VPdmVybGF5LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTc2RkI5RkY4MTlBNzNFM0EwMDQyMDU2MiAvKiBKU0F1dG9jb21wbGV0
ZUVycm9yRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNBODNFNEYwRDdDRTFFOTAwMzQy
MUE4IC8qIEpTRGF0YVRyYW5zZmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDQTgzRTUyMEQ3
Q0UyMDUwMDM0MjFBOCAvKiBKU0RhdGFUcmFuc2ZlckN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9FbXB0eUNsaWVudHMuaCBiL1NvdXJj
ZS9XZWJDb3JlL2xvYWRlci9FbXB0eUNsaWVudHMuaAppbmRleCAzN2JlNDQ4Li45YzkwY2I3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5oCkBAIC0xODIsNiArMTgyLDcgQEAgcHVi
bGljOgogICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxSZWN0SW50b1ZpZXcoY29uc3QgSW50UmVjdCYp
IGNvbnN0IG92ZXJyaWRlIHsgfQogCiAgICAgdmlydHVhbCB2b2lkIGF0dGFjaFJvb3RHcmFwaGlj
c0xheWVyKEZyYW1lKiwgR3JhcGhpY3NMYXllciopIG92ZXJyaWRlIHsgfQorICAgIHZpcnR1YWwg
dm9pZCBhdHRhY2hWaWV3T3ZlcmxheUdyYXBoaWNzTGF5ZXIoRnJhbWUqLCBHcmFwaGljc0xheWVy
Kikgb3ZlcnJpZGUgeyB9CiAgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzT25lU2hvdERyYXdpbmdT
eW5jaHJvbml6YXRpb24oKSBvdmVycmlkZSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVD
b21wb3NpdGluZ0xheWVyRmx1c2goKSBvdmVycmlkZSB7IH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21l
Q2xpZW50LmgKaW5kZXggZThkYTBlOS4uYmY1NjM0ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGFnZS9DaHJvbWVDbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZUNs
aWVudC5oCkBAIC0yOTksNiArMjk5LDcgQEAgcHVibGljOgogCiAgICAgLy8gUGFzcyAwIGFzIHRo
ZSBHcmFwaGljc0xheWVyIHRvIGRldGF0Y2ggdGhlIHJvb3QgbGF5ZXIuCiAgICAgdmlydHVhbCB2
b2lkIGF0dGFjaFJvb3RHcmFwaGljc0xheWVyKEZyYW1lKiwgR3JhcGhpY3NMYXllciopID0gMDsK
KyAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoVmlld092ZXJsYXlHcmFwaGljc0xheWVyKEZyYW1lKiwg
R3JhcGhpY3NMYXllciopID0gMDsKICAgICAvLyBTZXRzIGEgZmxhZyB0byBzcGVjaWZ5IHRoYXQg
dGhlIG5leHQgdGltZSBjb250ZW50IGlzIGRyYXduIHRvIHRoZSB3aW5kb3csCiAgICAgLy8gdGhl
IGNoYW5nZXMgYXBwZWFyIG9uIHRoZSBzY3JlZW4gaW4gc3luY2hyb255IHdpdGggdXBkYXRlcyB0
byBHcmFwaGljc0xheWVycy4KICAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNPbmVTaG90RHJhd2lu
Z1N5bmNocm9uaXphdGlvbigpID0gMDsKQEAgLTMwOCw4ICszMDksNiBAQCBwdWJsaWM6CiAgICAg
Ly8gUmV0dXJucyB3aGV0aGVyIG9yIG5vdCB0aGUgY2xpZW50IGNhbiByZW5kZXIgdGhlIGNvbXBv
c2l0ZWQgbGF5ZXIsCiAgICAgLy8gcmVnYXJkbGVzcyBvZiB0aGUgc2V0dGluZ3MuCiAgICAgdmly
dHVhbCBib29sIGFsbG93c0FjY2VsZXJhdGVkQ29tcG9zaXRpbmcoKSBjb25zdCB7IHJldHVybiB0
cnVlOyB9Ci0gICAgLy8gU3VwcGx5IGEgbGF5ZXIgdGhhdCB3aWxsIGFkZGVkIGFzIGFuIG92ZXJs
YXkgb3ZlciBvdGhlciBkb2N1bWVudCBsYXllcnMgKHNjcm9sbGluZyB3aXRoIHRoZSBkb2N1bWVu
dCkuCi0gICAgdmlydHVhbCBHcmFwaGljc0xheWVyKiBkb2N1bWVudE92ZXJsYXlMYXllckZvckZy
YW1lKEZyYW1lJikgeyByZXR1cm4gbnVsbHB0cjsgfQogCiAgICAgZW51bSBDb21wb3NpdGluZ1Ry
aWdnZXIgewogICAgICAgICBUaHJlZURUcmFuc2Zvcm1UcmlnZ2VyID0gMSA8PCAwLApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCmluZGV4IDVkOTEwZjMuLmEzY2ZiYzggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKQEAgLTY2LDYgKzY2LDcgQEAKICNpbmNsdWRlICJN
b3VzZUV2ZW50LmgiCiAjaW5jbHVkZSAiTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cy5oIgog
I2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJQYWdlT3ZlcmxheUNvbnRyb2xsZXIuaCIKICNp
bmNsdWRlICJQbGF0Zm9ybUV2ZW50LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1LZXlib2FyZEV2ZW50
LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1XaGVlbEV2ZW50LmgiCkBAIC0xNjQzLDYgKzE2NDQsMTAg
QEAgYm9vbCBFdmVudEhhbmRsZXI6OmhhbmRsZU1vdXNlUHJlc3NFdmVudChjb25zdCBQbGF0Zm9y
bU1vdXNlRXZlbnQmIHBsYXRmb3JtTW91c2UKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQog
CisgICAgUGFnZSogcGFnZSA9IG1fZnJhbWUucGFnZSgpOworICAgIGlmIChwYWdlICYmIHBhZ2Ut
PnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLmhhbmRsZU1vdXNlRXZlbnQocGxhdGZvcm1Nb3VzZUV2
ZW50KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQog
ICAgIGJvb2wgZGVmYXVsdFByZXZlbnRlZCA9IGRpc3BhdGNoU3ludGhldGljVG91Y2hFdmVudElm
RW5hYmxlZChwbGF0Zm9ybU1vdXNlRXZlbnQpOwogICAgIGlmIChkZWZhdWx0UHJldmVudGVkKQpA
QCAtMTgzNiwxMCArMTg0MSwxMyBAQCBib29sIEV2ZW50SGFuZGxlcjo6bW91c2VNb3ZlZChjb25z
dCBQbGF0Zm9ybU1vdXNlRXZlbnQmIGV2ZW50KQogICAgIFJlZlB0cjxGcmFtZVZpZXc+IHByb3Rl
Y3RvcihtX2ZyYW1lLnZpZXcoKSk7CiAgICAgTWF4aW11bUR1cmF0aW9uVHJhY2tlciBtYXhEdXJh
dGlvblRyYWNrZXIoJm1fbWF4TW91c2VNb3ZlZER1cmF0aW9uKTsKIAorICAgIFBhZ2UqIHBhZ2Ug
PSBtX2ZyYW1lLnBhZ2UoKTsKKyAgICBpZiAocGFnZSAmJiBwYWdlLT5wYWdlT3ZlcmxheUNvbnRy
b2xsZXIoKS5oYW5kbGVNb3VzZUV2ZW50KGV2ZW50KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisK
ICAgICBIaXRUZXN0UmVzdWx0IGhvdmVyZWROb2RlID0gSGl0VGVzdFJlc3VsdChMYXlvdXRQb2lu
dCgpKTsKICAgICBib29sIHJlc3VsdCA9IGhhbmRsZU1vdXNlTW92ZUV2ZW50KGV2ZW50LCAmaG92
ZXJlZE5vZGUpOwogCi0gICAgUGFnZSogcGFnZSA9IG1fZnJhbWUucGFnZSgpOwogICAgIGlmICgh
cGFnZSkKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKIApAQCAtMjAxOSw2ICsyMDI3LDEwIEBAIGJv
b2wgRXZlbnRIYW5kbGVyOjpoYW5kbGVNb3VzZVJlbGVhc2VFdmVudChjb25zdCBQbGF0Zm9ybU1v
dXNlRXZlbnQmIHBsYXRmb3JtTW91CiAKICAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLnNldENhcmV0
QmxpbmtpbmdTdXNwZW5kZWQoZmFsc2UpOwogCisgICAgUGFnZSogcGFnZSA9IG1fZnJhbWUucGFn
ZSgpOworICAgIGlmIChwYWdlICYmIHBhZ2UtPnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLmhhbmRs
ZU1vdXNlRXZlbnQocGxhdGZvcm1Nb3VzZUV2ZW50KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisK
ICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQogICAgIGJvb2wgZGVmYXVsdFByZXZlbnRlZCA9IGRp
c3BhdGNoU3ludGhldGljVG91Y2hFdmVudElmRW5hYmxlZChwbGF0Zm9ybU1vdXNlRXZlbnQpOwog
ICAgIGlmIChkZWZhdWx0UHJldmVudGVkKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9GcmFtZVZpZXcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCmluZGV4
IGJjYjUwNDQuLmQ2MTY5ZjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVW
aWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKQEAgLTYwLDYg
KzYwLDcgQEAKICNpbmNsdWRlICJNZW1vcnlDYWNoZS5oIgogI2luY2x1ZGUgIk1lbW9yeVByZXNz
dXJlSGFuZGxlci5oIgogI2luY2x1ZGUgIk92ZXJmbG93RXZlbnQuaCIKKyNpbmNsdWRlICJQYWdl
T3ZlcmxheUNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJQcm9ncmVzc1RyYWNrZXIuaCIKICNpbmNs
dWRlICJSZW5kZXJFbWJlZGRlZE9iamVjdC5oIgogI2luY2x1ZGUgIlJlbmRlckZ1bGxTY3JlZW4u
aCIKQEAgLTQzMCwxMCArNDMxLDExIEBAIHZvaWQgRnJhbWVWaWV3OjpzZXRGcmFtZVJlY3QoY29u
c3QgSW50UmVjdCYgbmV3UmVjdCkKICAgICBpZiAobmV3UmVjdCA9PSBvbGRSZWN0KQogICAgICAg
ICByZXR1cm47CiAKKyAgICBQYWdlKiBwYWdlID0gZnJhbWUoKS5wYWdlKCk7CisKICNpZiBFTkFC
TEUoVEVYVF9BVVRPU0laSU5HKQogICAgIC8vIEF1dG9zaXplZCBmb250IHNpemVzIGRlcGVuZCBv
biB0aGUgd2lkdGggb2YgdGhlIHZpZXdpbmcgYXJlYS4KICAgICBpZiAobmV3UmVjdC53aWR0aCgp
ICE9IG9sZFJlY3Qud2lkdGgoKSkgewotICAgICAgICBQYWdlKiBwYWdlID0gZnJhbWUoKS5wYWdl
KCk7CiAgICAgICAgIGlmIChmcmFtZSgpLmlzTWFpbkZyYW1lKCkgJiYgcGFnZS0+c2V0dGluZ3Mo
KS50ZXh0QXV0b3NpemluZ0VuYWJsZWQoKSkgewogICAgICAgICAgICAgZm9yIChGcmFtZSogZnJh
bWUgPSAmcGFnZS0+bWFpbkZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJh
dmVyc2VOZXh0KCkpCiAgICAgICAgICAgICAgICAgZnJhbWUoKS5kb2N1bWVudCgpLT50ZXh0QXV0
b3NpemVyKCktPnJlY2FsY3VsYXRlTXVsdGlwbGllcnMoKTsKQEAgLTQ0OSw2ICs0NTEsOSBAQCB2
b2lkIEZyYW1lVmlldzo6c2V0RnJhbWVSZWN0KGNvbnN0IEludFJlY3QmIG5ld1JlY3QpCiAgICAg
ICAgIGlmIChyZW5kZXJWaWV3LT51c2VzQ29tcG9zaXRpbmcoKSkKICAgICAgICAgICAgIHJlbmRl
clZpZXctPmNvbXBvc2l0b3IoKS5mcmFtZVZpZXdEaWRDaGFuZ2VTaXplKCk7CiAgICAgfQorCisg
ICAgaWYgKGZyYW1lKCkuaXNNYWluRnJhbWUoKSkKKyAgICAgICAgcGFnZS0+cGFnZU92ZXJsYXlD
b250cm9sbGVyKCkuZGlkQ2hhbmdlVmlld1NpemUoKTsKIH0KIAogI2lmIEVOQUJMRShSRVFVRVNU
X0FOSU1BVElPTl9GUkFNRSkKQEAgLTU2Miw2ICs1NjcsOSBAQCB2b2lkIEZyYW1lVmlldzo6c2V0
Q29udGVudHNTaXplKGNvbnN0IEludFNpemUmIHNpemUpCiAKICAgICBwYWdlLT5jaHJvbWUoKS5j
b250ZW50c1NpemVDaGFuZ2VkKCZmcmFtZSgpLCBzaXplKTsgLy8gTm90aWZ5IG9ubHkuCiAKKyAg
ICBpZiAoZnJhbWUoKS5pc01haW5GcmFtZSgpKQorICAgICAgICBwYWdlLT5wYWdlT3ZlcmxheUNv
bnRyb2xsZXIoKS5kaWRDaGFuZ2VEb2N1bWVudFNpemUoKTsKKwogICAgIEFTU0VSVChtX2RlZmVy
U2V0TmVlZHNMYXlvdXRzKTsKICAgICBtX2RlZmVyU2V0TmVlZHNMYXlvdXRzLS07CiAgICAgCkBA
IC0yMDQ4LDcgKzIwNTYsNyBAQCB2b2lkIEZyYW1lVmlldzo6c2V0Rml4ZWRWaXNpYmxlQ29udGVu
dFJlY3QoY29uc3QgSW50UmVjdCYgdmlzaWJsZUNvbnRlbnRSZWN0KQogICAgICAgICAvLyBVcGRh
dGUgdGhlIHNjcm9sbC1iYXJzIHRvIGNhbGN1bGF0ZSBuZXcgcGFnZS1zdGVwIHNpemUuCiAgICAg
ICAgIHVwZGF0ZVNjcm9sbGJhcnMoc2Nyb2xsT2Zmc2V0KCkpOwogICAgIH0KLSAgICBmcmFtZSgp
LmxvYWRlcigpLmNsaWVudCgpLmRpZENoYW5nZVNjcm9sbE9mZnNldCgpOworICAgIGRpZENoYW5n
ZVNjcm9sbE9mZnNldCgpOwogfQogI2VuZGlmCiAKQEAgLTIwNjEsNiArMjA2OSwxNCBAQCB2b2lk
IEZyYW1lVmlldzo6c2V0Vmlld3BvcnRDb25zdHJhaW5lZE9iamVjdHNOZWVkTGF5b3V0KCkKICAg
ICAgICAgcmVuZGVyZXItPnNldE5lZWRzTGF5b3V0KCk7CiB9CiAKK3ZvaWQgRnJhbWVWaWV3Ojpk
aWRDaGFuZ2VTY3JvbGxPZmZzZXQoKQoreworICAgIGlmIChQYWdlKiBwYWdlID0gZnJhbWUoKS5w
YWdlKCkpCisgICAgICAgIHBhZ2UtPnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLmRpZFNjcm9sbEZy
YW1lKGZyYW1lKCkpOworCisgICAgZnJhbWUoKS5sb2FkZXIoKS5jbGllbnQoKS5kaWRDaGFuZ2VT
Y3JvbGxPZmZzZXQoKTsKK30KKwogdm9pZCBGcmFtZVZpZXc6OnNjcm9sbFBvc2l0aW9uQ2hhbmdl
ZFZpYVBsYXRmb3JtV2lkZ2V0KGNvbnN0IEludFBvaW50JiBvbGRQb3NpdGlvbiwgY29uc3QgSW50
UG9pbnQmIG5ld1Bvc2l0aW9uKQogewogICAgIHVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJTY3Jv
bGxpbmcoKTsKQEAgLTMyMjMsNyArMzIzOSw3IEBAIHZvaWQgRnJhbWVWaWV3OjpzY3JvbGxUbyhj
b25zdCBJbnRTaXplJiBuZXdPZmZzZXQpCiAgICAgU2Nyb2xsVmlldzo6c2Nyb2xsVG8obmV3T2Zm
c2V0KTsKICAgICBpZiAob2Zmc2V0ICE9IHNjcm9sbE9mZnNldCgpKQogICAgICAgICBzY3JvbGxQ
b3NpdGlvbkNoYW5nZWQob2xkUG9zaXRpb24sIHNjcm9sbFBvc2l0aW9uKCkpOwotICAgIGZyYW1l
KCkubG9hZGVyKCkuY2xpZW50KCkuZGlkQ2hhbmdlU2Nyb2xsT2Zmc2V0KCk7CisgICAgZGlkQ2hh
bmdlU2Nyb2xsT2Zmc2V0KCk7CiB9CiAKIGZsb2F0IEZyYW1lVmlldzo6YWRqdXN0U2Nyb2xsU3Rl
cEZvckZpeGVkQ29udGVudChmbG9hdCBzdGVwLCBTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRh
dGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHkpCkBAIC00MjkyLDcgKzQzMDgsNyBA
QCBib29sIEZyYW1lVmlldzo6d2hlZWxFdmVudChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIHdo
ZWVsRXZlbnQpCiAgICAgICAgIGlmIChvZmZzZXQgIT0gbmV3T2Zmc2V0KSB7CiAgICAgICAgICAg
ICBTY3JvbGxWaWV3OjpzY3JvbGxUbyhuZXdPZmZzZXQpOwogICAgICAgICAgICAgc2Nyb2xsUG9z
aXRpb25DaGFuZ2VkKG9sZFBvc2l0aW9uLCBzY3JvbGxQb3NpdGlvbigpKTsKLSAgICAgICAgICAg
IGZyYW1lKCkubG9hZGVyKCkuY2xpZW50KCkuZGlkQ2hhbmdlU2Nyb2xsT2Zmc2V0KCk7CisgICAg
ICAgICAgICBkaWRDaGFuZ2VTY3JvbGxPZmZzZXQoKTsKICAgICAgICAgfQogICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICB9CkBAIC00NjE1LDYgKzQ2MzEsOSBAQCB2b2lkIEZyYW1lVmlldzo6c2V0
RXhwb3NlZFJlY3QoRmxvYXRSZWN0IGV4cG9zZWRSZWN0KQogCiAgICAgaWYgKGF1dG8qIHZpZXcg
PSByZW5kZXJWaWV3KCkpCiAgICAgICAgIHZpZXctPmNvbXBvc2l0b3IoKS5zY2hlZHVsZUxheWVy
Rmx1c2goZmFsc2UgLyogY2FuVGhyb3R0bGUgKi8pOworCisgICAgaWYgKGF1dG8qIHBhZ2UgPSBm
cmFtZSgpLnBhZ2UoKSkKKyAgICAgICAgcGFnZS0+cGFnZU92ZXJsYXlDb250cm9sbGVyKCkuZGlk
Q2hhbmdlRXhwb3NlZFJlY3QoKTsKIH0KICAgICAKIHZvaWQgRnJhbWVWaWV3OjpzZXRWaWV3cG9y
dFNpemVGb3JDU1NWaWV3cG9ydFVuaXRzKEludFNpemUgc2l6ZSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmll
dy5oCmluZGV4IDM3NTY5NmEuLjkyYWE5YjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvRnJhbWVWaWV3LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuaApAQCAt
NTExLDYgKzUxMSw4IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgZmxvYXQgYWRqdXN0U2Nyb2xs
U3RlcEZvckZpeGVkQ29udGVudChmbG9hdCBzdGVwLCBTY3JvbGxiYXJPcmllbnRhdGlvbiwgU2Ny
b2xsR3JhbnVsYXJpdHkpIG92ZXJyaWRlOwogCisgICAgdm9pZCBkaWRDaGFuZ2VTY3JvbGxPZmZz
ZXQoKTsKKwogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgYm9vbCBzY3JvbGxDb250ZW50c0Zhc3RQ
YXRoKGNvbnN0IEludFNpemUmIHNjcm9sbERlbHRhLCBjb25zdCBJbnRSZWN0JiByZWN0VG9TY3Jv
bGwsIGNvbnN0IEludFJlY3QmIGNsaXBSZWN0KSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQg
c2Nyb2xsQ29udGVudHNTbG93UGF0aChjb25zdCBJbnRSZWN0JiB1cGRhdGVSZWN0KSBvdmVycmlk
ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL1BhZ2UuY3BwCmluZGV4IDI2YjhkMTcuLjUzOGRmZDQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdl
LmNwcApAQCAtNjAsNiArNjAsNyBAQAogI2luY2x1ZGUgIlBhZ2VDb25zb2xlQ2xpZW50LmgiCiAj
aW5jbHVkZSAiUGFnZURlYnVnZ2FibGUuaCIKICNpbmNsdWRlICJQYWdlR3JvdXAuaCIKKyNpbmNs
dWRlICJQYWdlT3ZlcmxheUNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJQYWdlVGhyb3R0bGVyLmgi
CiAjaW5jbHVkZSAiUGx1Z0luQ2xpZW50LmgiCiAjaW5jbHVkZSAiUGx1Z2luRGF0YS5oIgpAQCAt
MjAzLDYgKzIwNCw3IEBAIFBhZ2U6OlBhZ2UoUGFnZUNsaWVudHMmIHBhZ2VDbGllbnRzKQogICAg
ICwgbV92aXNpdGVkTGlua1N0b3JlKFdURjo6bW92ZShwYWdlQ2xpZW50cy52aXNpdGVkTGlua1N0
b3JlKSkKICAgICAsIG1fc2Vzc2lvbklEKFNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKQog
ICAgICwgbV9pc0Nsb3NpbmcoZmFsc2UpCisgICAgLCBtX3BhZ2VPdmVybGF5Q29udHJvbGxlcihz
dGQ6Om1ha2VfdW5pcXVlPFBhZ2VPdmVybGF5Q29udHJvbGxlcj4oKnRoaXMpKQogewogICAgIEFT
U0VSVChtX2VkaXRvckNsaWVudCk7CiAgICAgCkBAIC04MTEsNiArODEzLDggQEAgdm9pZCBQYWdl
OjpzZXREZXZpY2VTY2FsZUZhY3RvcihmbG9hdCBzY2FsZUZhY3RvcikKIAogICAgIHBhZ2VDYWNo
ZSgpLT5tYXJrUGFnZXNGb3JGdWxsU3R5bGVSZWNhbGModGhpcyk7CiAgICAgR3JhcGhpY3NDb250
ZXh0Ojp1cGRhdGVEb2N1bWVudE1hcmtlclJlc291cmNlcygpOworCisgICAgbV9wYWdlT3Zlcmxh
eUNvbnRyb2xsZXItPmRpZENoYW5nZURldmljZVNjYWxlRmFjdG9yKCk7CiB9CiAKIHZvaWQgUGFn
ZTo6c2V0VG9wQ29udGVudEluc2V0KGZsb2F0IGNvbnRlbnRJbnNldCkKQEAgLTE2MTgsNyArMTYy
Miw2IEBAIHZvaWQgUGFnZTo6c2V0U2Vzc2lvbklEKFNlc3Npb25JRCBzZXNzaW9uSUQpCiAKICAg
ICBmb3IgKGF1dG8mIHZpZXcgOiBwbHVnaW5WaWV3cygpKQogICAgICAgICB2aWV3LT5wcml2YXRl
QnJvd3NpbmdTdGF0ZUNoYW5nZWQoc2Vzc2lvbklELmlzRXBoZW1lcmFsKCkpOwotCiB9CiAKIFBh
Z2U6OlBhZ2VDbGllbnRzOjpQYWdlQ2xpZW50cygpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL1BhZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5oCmluZGV4IDJjZTUyYjku
LmEzYmE4NGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5oCkBAIC04NCw2ICs4NCw3IEBAIGNsYXNzIFBhZ2VBY3Rp
dml0eUFzc2VydGlvblRva2VuOwogY2xhc3MgUGFnZUNvbnNvbGVDbGllbnQ7CiBjbGFzcyBQYWdl
RGVidWdnYWJsZTsKIGNsYXNzIFBhZ2VHcm91cDsKK2NsYXNzIFBhZ2VPdmVybGF5Q29udHJvbGxl
cjsKIGNsYXNzIFBhZ2VUaHJvdHRsZXI7CiBjbGFzcyBQbHVnSW5DbGllbnQ7CiBjbGFzcyBQbHVn
aW5EYXRhOwpAQCAtMTY4LDYgKzE2OSw4IEBAIHB1YmxpYzoKICAgICBNYWluRnJhbWUmIG1haW5G
cmFtZSgpIHsgQVNTRVJUKG1fbWFpbkZyYW1lKTsgcmV0dXJuICptX21haW5GcmFtZTsgfQogICAg
IGNvbnN0IE1haW5GcmFtZSYgbWFpbkZyYW1lKCkgY29uc3QgeyBBU1NFUlQobV9tYWluRnJhbWUp
OyByZXR1cm4gKm1fbWFpbkZyYW1lOyB9CiAKKyAgICBQYWdlT3ZlcmxheUNvbnRyb2xsZXImIHBh
Z2VPdmVybGF5Q29udHJvbGxlcigpIHsgcmV0dXJuICptX3BhZ2VPdmVybGF5Q29udHJvbGxlcjsg
fQorCiAgICAgYm9vbCBvcGVuZWRCeURPTSgpIGNvbnN0OwogICAgIHZvaWQgc2V0T3BlbmVkQnlE
T00oKTsKIApAQCAtNTk1LDYgKzU5OCw4IEBAIHByaXZhdGU6CiAgICAgU2Vzc2lvbklEIG1fc2Vz
c2lvbklEOwogCiAgICAgYm9vbCBtX2lzQ2xvc2luZzsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxQ
YWdlT3ZlcmxheUNvbnRyb2xsZXI+IG1fcGFnZU92ZXJsYXlDb250cm9sbGVyOwogfTsKIAogaW5s
aW5lIFBhZ2VHcm91cCYgUGFnZTo6Z3JvdXAoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGFnZS9QYWdlT3ZlcmxheS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VPdmVybGF5LmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTlkOTdjCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlT3ZlcmxheS5jcHAKQEAgLTAsMCArMSwy
NTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUGFnZU92
ZXJsYXkuaCIKKworI2luY2x1ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dC5oIgorI2luY2x1ZGUgIk1haW5GcmFtZS5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNs
dWRlICJQYWdlT3ZlcmxheUNvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybU1vdXNlRXZl
bnQuaCIKKyNpbmNsdWRlICJTY3JvbGxiYXJUaGVtZS5oIgorI2luY2x1ZGUgPHd0Zi9DdXJyZW50
VGltZS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBjb25zdCBkb3VibGUgZmFk
ZUFuaW1hdGlvbkR1cmF0aW9uID0gMC4yOworc3RhdGljIGNvbnN0IGRvdWJsZSBmYWRlQW5pbWF0
aW9uRnJhbWVSYXRlID0gMzA7CisKK1Bhc3NSZWZQdHI8UGFnZU92ZXJsYXk+IFBhZ2VPdmVybGF5
OjpjcmVhdGUoQ2xpZW50JiBjbGllbnQsIE92ZXJsYXlUeXBlIG92ZXJsYXlUeXBlKQoreworICAg
IHJldHVybiBhZG9wdFJlZihuZXcgUGFnZU92ZXJsYXkoY2xpZW50LCBvdmVybGF5VHlwZSkpOwor
fQorCitQYWdlT3ZlcmxheTo6UGFnZU92ZXJsYXkoQ2xpZW50JiBjbGllbnQsIE92ZXJsYXlUeXBl
IG92ZXJsYXlUeXBlKQorICAgIDogbV9jbGllbnQoY2xpZW50KQorICAgICwgbV9wYWdlKG51bGxw
dHIpCisgICAgLCBtX2ZhZGVBbmltYXRpb25UaW1lcihSdW5Mb29wOjptYWluKCksIHRoaXMsICZQ
YWdlT3ZlcmxheTo6ZmFkZUFuaW1hdGlvblRpbWVyRmlyZWQpCisgICAgLCBtX2ZhZGVBbmltYXRp
b25TdGFydFRpbWUoMCkKKyAgICAsIG1fZmFkZUFuaW1hdGlvbkR1cmF0aW9uKGZhZGVBbmltYXRp
b25EdXJhdGlvbikKKyAgICAsIG1fZmFkZUFuaW1hdGlvblR5cGUoTm9BbmltYXRpb24pCisgICAg
LCBtX2ZyYWN0aW9uRmFkZWRJbigxKQorICAgICwgbV9vdmVybGF5VHlwZShvdmVybGF5VHlwZSkK
KyAgICAsIG1fYmFja2dyb3VuZENvbG9yKENvbG9yOjp0cmFuc3BhcmVudCkKK3sKK30KKworUGFn
ZU92ZXJsYXk6On5QYWdlT3ZlcmxheSgpCit7Cit9CisKK0ludFJlY3QgUGFnZU92ZXJsYXk6OmJv
dW5kcygpIGNvbnN0Cit7CisgICAgaWYgKCFtX292ZXJyaWRlRnJhbWUuaXNFbXB0eSgpKQorICAg
ICAgICByZXR1cm4gSW50UmVjdChJbnRQb2ludCgpLCBtX292ZXJyaWRlRnJhbWUuc2l6ZSgpKTsK
KworICAgIEZyYW1lVmlldyogZnJhbWVWaWV3ID0gbV9wYWdlLT5tYWluRnJhbWUoKS52aWV3KCk7
CisKKyAgICBpZiAoIWZyYW1lVmlldykKKyAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKKworICAg
IHN3aXRjaCAobV9vdmVybGF5VHlwZSkgeworICAgIGNhc2UgT3ZlcmxheVR5cGU6OlZpZXc6IHsK
KyAgICAgICAgaW50IHdpZHRoID0gZnJhbWVWaWV3LT53aWR0aCgpOworICAgICAgICBpbnQgaGVp
Z2h0ID0gZnJhbWVWaWV3LT5oZWlnaHQoKTsKKworICAgICAgICBpZiAoIVNjcm9sbGJhclRoZW1l
Ojp0aGVtZSgpLT51c2VzT3ZlcmxheVNjcm9sbGJhcnMoKSkgeworICAgICAgICAgICAgaWYgKGZy
YW1lVmlldy0+dmVydGljYWxTY3JvbGxiYXIoKSkKKyAgICAgICAgICAgICAgICB3aWR0aCAtPSBm
cmFtZVZpZXctPnZlcnRpY2FsU2Nyb2xsYmFyKCktPndpZHRoKCk7CisgICAgICAgICAgICBpZiAo
ZnJhbWVWaWV3LT5ob3Jpem9udGFsU2Nyb2xsYmFyKCkpCisgICAgICAgICAgICAgICAgaGVpZ2h0
IC09IGZyYW1lVmlldy0+aG9yaXpvbnRhbFNjcm9sbGJhcigpLT5oZWlnaHQoKTsKKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gSW50UmVjdCgwLCAwLCB3aWR0aCwgaGVpZ2h0KTsKKyAgICB9Cisg
ICAgY2FzZSBPdmVybGF5VHlwZTo6RG9jdW1lbnQ6CisgICAgICAgIHJldHVybiBJbnRSZWN0KElu
dFBvaW50KCksIGZyYW1lVmlldy0+Y29udGVudHNTaXplKCkpOworICAgIH07CisKKyAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gSW50UmVjdChJbnRQb2ludCgpLCBmcmFtZVZp
ZXctPmNvbnRlbnRzU2l6ZSgpKTsKK30KKworSW50UmVjdCBQYWdlT3ZlcmxheTo6ZnJhbWUoKSBj
b25zdAoreworICAgIGlmICghbV9vdmVycmlkZUZyYW1lLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0
dXJuIG1fb3ZlcnJpZGVGcmFtZTsKKworICAgIHJldHVybiBib3VuZHMoKTsKK30KKwordm9pZCBQ
YWdlT3ZlcmxheTo6c2V0RnJhbWUoSW50UmVjdCBmcmFtZSkKK3sKKyAgICBpZiAobV9vdmVycmlk
ZUZyYW1lID09IGZyYW1lKQorICAgICAgICByZXR1cm47CisKKyAgICBtX292ZXJyaWRlRnJhbWUg
PSBmcmFtZTsKKworICAgIGlmIChtX3BhZ2UpCisgICAgICAgIG1fcGFnZS0+cGFnZU92ZXJsYXlD
b250cm9sbGVyKCkuZGlkQ2hhbmdlT3ZlcmxheUZyYW1lKCp0aGlzKTsKK30KKwordm9pZCBQYWdl
T3ZlcmxheTo6c2V0QmFja2dyb3VuZENvbG9yKFJHQkEzMiBiYWNrZ3JvdW5kQ29sb3IpCit7Cisg
ICAgaWYgKG1fYmFja2dyb3VuZENvbG9yID09IGJhY2tncm91bmRDb2xvcikKKyAgICAgICAgcmV0
dXJuOworCisgICAgbV9iYWNrZ3JvdW5kQ29sb3IgPSBiYWNrZ3JvdW5kQ29sb3I7CisKKyAgICBp
ZiAobV9wYWdlKQorICAgICAgICBtX3BhZ2UtPnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLmRpZENo
YW5nZU92ZXJsYXlCYWNrZ3JvdW5kQ29sb3IoKnRoaXMpOworfQorCit2b2lkIFBhZ2VPdmVybGF5
OjpzZXRQYWdlKFBhZ2UqIHBhZ2UpCit7CisgICAgbV9jbGllbnQud2lsbE1vdmVUb1BhZ2UoKnRo
aXMsIHBhZ2UpOworICAgIG1fcGFnZSA9IHBhZ2U7CisgICAgbV9jbGllbnQuZGlkTW92ZVRvUGFn
ZSgqdGhpcywgcGFnZSk7CisKKyAgICBtX2ZhZGVBbmltYXRpb25UaW1lci5zdG9wKCk7Cit9CisK
K3ZvaWQgUGFnZU92ZXJsYXk6OnNldE5lZWRzRGlzcGxheShjb25zdCBJbnRSZWN0JiBkaXJ0eVJl
Y3QpCit7CisgICAgaWYgKCFtX3BhZ2UpCisgICAgICAgIHJldHVybjsKKworICAgIG1fcGFnZS0+
cGFnZU92ZXJsYXlDb250cm9sbGVyKCkuc2V0UGFnZU92ZXJsYXlPcGFjaXR5KCp0aGlzLCBtX2Zy
YWN0aW9uRmFkZWRJbik7CisgICAgbV9wYWdlLT5wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKS5zZXRQ
YWdlT3ZlcmxheU5lZWRzRGlzcGxheSgqdGhpcywgZGlydHlSZWN0KTsKK30KKwordm9pZCBQYWdl
T3ZlcmxheTo6c2V0TmVlZHNEaXNwbGF5KCkKK3sKKyAgICBzZXROZWVkc0Rpc3BsYXkoYm91bmRz
KCkpOworfQorCit2b2lkIFBhZ2VPdmVybGF5OjpkcmF3UmVjdChHcmFwaGljc0NvbnRleHQmIGdy
YXBoaWNzQ29udGV4dCwgY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KQoreworICAgIC8vIElmIHRo
ZSBkaXJ0eSByZWN0IGlzIG91dHNpZGUgdGhlIGJvdW5kcywgaWdub3JlIGl0LgorICAgIEludFJl
Y3QgcGFpbnRSZWN0ID0gaW50ZXJzZWN0aW9uKGRpcnR5UmVjdCwgYm91bmRzKCkpOworICAgIGlm
IChwYWludFJlY3QuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBHcmFwaGljc0Nv
bnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoZ3JhcGhpY3NDb250ZXh0KTsKKyAgICBtX2NsaWVu
dC5kcmF3UmVjdCgqdGhpcywgZ3JhcGhpY3NDb250ZXh0LCBwYWludFJlY3QpOworfQorICAgIAor
Ym9vbCBQYWdlT3ZlcmxheTo6bW91c2VFdmVudChjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIG1v
dXNlRXZlbnQpCit7CisgICAgSW50UG9pbnQgbW91c2VQb3NpdGlvbkluT3ZlcmxheUNvb3JkaW5h
dGVzKG1vdXNlRXZlbnQucG9zaXRpb24oKSk7CisKKyAgICBpZiAobV9vdmVybGF5VHlwZSA9PSBQ
YWdlT3ZlcmxheTo6T3ZlcmxheVR5cGU6OkRvY3VtZW50KQorICAgICAgICBtb3VzZVBvc2l0aW9u
SW5PdmVybGF5Q29vcmRpbmF0ZXMgPSBtX3BhZ2UtPm1haW5GcmFtZSgpLnZpZXcoKS0+cm9vdFZp
ZXdUb0NvbnRlbnRzKG1vdXNlUG9zaXRpb25Jbk92ZXJsYXlDb29yZGluYXRlcyk7CisKKyAgICAv
LyBJZ25vcmUgZXZlbnRzIG91dHNpZGUgdGhlIGJvdW5kcy4KKyAgICBpZiAoIWJvdW5kcygpLmNv
bnRhaW5zKG1vdXNlUG9zaXRpb25Jbk92ZXJsYXlDb29yZGluYXRlcykpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIHJldHVybiBtX2NsaWVudC5tb3VzZUV2ZW50KCp0aGlzLCBtb3VzZUV2
ZW50KTsKK30KKwordm9pZCBQYWdlT3ZlcmxheTo6ZGlkU2Nyb2xsRnJhbWUoRnJhbWUmIGZyYW1l
KQoreworICAgIG1fY2xpZW50LmRpZFNjcm9sbEZyYW1lKCp0aGlzLCBmcmFtZSk7Cit9CisKK2Jv
b2wgUGFnZU92ZXJsYXk6OmNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlU3RyaW5nVmFsdWVGb3JQ
b2ludChTdHJpbmcgYXR0cmlidXRlLCBGbG9hdFBvaW50IHBhcmFtZXRlciwgU3RyaW5nJiB2YWx1
ZSkKK3sKKyAgICByZXR1cm4gbV9jbGllbnQuY29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVTdHJp
bmdWYWx1ZUZvclBvaW50KCp0aGlzLCBhdHRyaWJ1dGUsIHBhcmFtZXRlciwgdmFsdWUpOworfQor
Citib29sIFBhZ2VPdmVybGF5Ojpjb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZUJvb2xWYWx1ZUZv
clBvaW50KFN0cmluZyBhdHRyaWJ1dGUsIEZsb2F0UG9pbnQgcGFyYW1ldGVyLCBib29sJiB2YWx1
ZSkKK3sKKyAgICByZXR1cm4gbV9jbGllbnQuY29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVCb29s
VmFsdWVGb3JQb2ludCgqdGhpcywgYXR0cmlidXRlLCBwYXJhbWV0ZXIsIHZhbHVlKTsKK30KKwor
VmVjdG9yPFN0cmluZz4gUGFnZU92ZXJsYXk6OmNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlTmFt
ZXMoYm9vbCBwYXJhbWV0ZXJpemVkTmFtZXMpCit7CisgICAgcmV0dXJuIG1fY2xpZW50LmNvcHlB
Y2Nlc3NpYmlsaXR5QXR0cmlidXRlTmFtZXMoKnRoaXMsIHBhcmFtZXRlcml6ZWROYW1lcyk7Cit9
CisKK3ZvaWQgUGFnZU92ZXJsYXk6OnN0YXJ0RmFkZUluQW5pbWF0aW9uKCkKK3sKKyAgICBtX2Zy
YWN0aW9uRmFkZWRJbiA9IDA7CisgICAgbV9mYWRlQW5pbWF0aW9uVHlwZSA9IEZhZGVJbkFuaW1h
dGlvbjsKKworICAgIHN0YXJ0RmFkZUFuaW1hdGlvbigpOworfQorCit2b2lkIFBhZ2VPdmVybGF5
OjpzdGFydEZhZGVPdXRBbmltYXRpb24oKQoreworICAgIG1fZnJhY3Rpb25GYWRlZEluID0gMTsK
KyAgICBtX2ZhZGVBbmltYXRpb25UeXBlID0gRmFkZU91dEFuaW1hdGlvbjsKKworICAgIHN0YXJ0
RmFkZUFuaW1hdGlvbigpOworfQorCit2b2lkIFBhZ2VPdmVybGF5OjpzdG9wRmFkZU91dEFuaW1h
dGlvbigpCit7CisgICAgbV9mcmFjdGlvbkZhZGVkSW4gPSAxLjA7CisgICAgbV9mYWRlQW5pbWF0
aW9uVGltZXIuc3RvcCgpOworfQorCit2b2lkIFBhZ2VPdmVybGF5OjpzdGFydEZhZGVBbmltYXRp
b24oKQoreworICAgIG1fZmFkZUFuaW1hdGlvblN0YXJ0VGltZSA9IGN1cnJlbnRUaW1lKCk7Cisg
ICAgbV9mYWRlQW5pbWF0aW9uVGltZXIuc3RhcnRSZXBlYXRpbmcoMSAvIGZhZGVBbmltYXRpb25G
cmFtZVJhdGUpOworfQorCit2b2lkIFBhZ2VPdmVybGF5OjpmYWRlQW5pbWF0aW9uVGltZXJGaXJl
ZCgpCit7CisgICAgZmxvYXQgYW5pbWF0aW9uUHJvZ3Jlc3MgPSAoY3VycmVudFRpbWUoKSAtIG1f
ZmFkZUFuaW1hdGlvblN0YXJ0VGltZSkgLyBtX2ZhZGVBbmltYXRpb25EdXJhdGlvbjsKKworICAg
IGlmIChhbmltYXRpb25Qcm9ncmVzcyA+PSAxLjApCisgICAgICAgIGFuaW1hdGlvblByb2dyZXNz
ID0gMS4wOworCisgICAgZG91YmxlIHNpbmUgPSBzaW4ocGlPdmVyVHdvRmxvYXQgKiBhbmltYXRp
b25Qcm9ncmVzcyk7CisgICAgZmxvYXQgZmFkZUFuaW1hdGlvblZhbHVlID0gc2luZSAqIHNpbmU7
CisKKyAgICBtX2ZyYWN0aW9uRmFkZWRJbiA9IChtX2ZhZGVBbmltYXRpb25UeXBlID09IEZhZGVJ
bkFuaW1hdGlvbikgPyBmYWRlQW5pbWF0aW9uVmFsdWUgOiAxIC0gZmFkZUFuaW1hdGlvblZhbHVl
OworICAgIG1fcGFnZS0+cGFnZU92ZXJsYXlDb250cm9sbGVyKCkuc2V0UGFnZU92ZXJsYXlPcGFj
aXR5KCp0aGlzLCBtX2ZyYWN0aW9uRmFkZWRJbik7CisKKyAgICBpZiAoYW5pbWF0aW9uUHJvZ3Jl
c3MgPT0gMS4wKSB7CisgICAgICAgIG1fZmFkZUFuaW1hdGlvblRpbWVyLnN0b3AoKTsKKworICAg
ICAgICBib29sIHdhc0ZhZGluZ091dCA9IG1fZmFkZUFuaW1hdGlvblR5cGUgPT0gRmFkZU91dEFu
aW1hdGlvbjsKKyAgICAgICAgbV9mYWRlQW5pbWF0aW9uVHlwZSA9IE5vQW5pbWF0aW9uOworCisg
ICAgICAgIC8vIElmIHRoaXMgd2FzIGEgZmFkZSBvdXQsIGdvIGFoZWFkIGFuZCB1bmluc3RhbGwg
dGhlIHBhZ2Ugb3ZlcmxheS4KKyAgICAgICAgaWYgKHdhc0ZhZGluZ091dCkKKyAgICAgICAgICAg
IG1fcGFnZS0+cGFnZU92ZXJsYXlDb250cm9sbGVyKCkudW5pbnN0YWxsUGFnZU92ZXJsYXkodGhp
cywgUGFnZU92ZXJsYXk6OkZhZGVNb2RlOjpEb05vdEZhZGUpOworICAgIH0KK30KKwordm9pZCBQ
YWdlT3ZlcmxheTo6Y2xlYXIoKQoreworICAgIG1fcGFnZS0+cGFnZU92ZXJsYXlDb250cm9sbGVy
KCkuY2xlYXJQYWdlT3ZlcmxheSgqdGhpcyk7Cit9CisKK0dyYXBoaWNzTGF5ZXImIFBhZ2VPdmVy
bGF5OjpsYXllcigpCit7CisgICAgcmV0dXJuIG1fcGFnZS0+cGFnZU92ZXJsYXlDb250cm9sbGVy
KCkubGF5ZXJGb3JPdmVybGF5KCp0aGlzKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VPdmVybGF5LmggYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL1BhZ2VPdmVybGF5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uNDFiZjdmNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZU92
ZXJsYXkuaApAQCAtMCwwICsxLDEzOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgUGFnZU92ZXJs
YXlfaAorI2RlZmluZSBQYWdlT3ZlcmxheV9oCisKKyNpbmNsdWRlICJDb2xvci5oIgorI2luY2x1
ZGUgIkZsb2F0UG9pbnQuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSA8d3RmL1Bh
c3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9S
dW5Mb29wLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworY2xhc3MgRnJhbWU7CitjbGFzcyBHcmFwaGljc0NvbnRleHQ7CitjbGFzcyBH
cmFwaGljc0xheWVyOworY2xhc3MgUGFnZTsKK2NsYXNzIFBsYXRmb3JtTW91c2VFdmVudDsKKwor
Y2xhc3MgUGFnZU92ZXJsYXkgZmluYWwgOiBwdWJsaWMgUmVmQ291bnRlZDxQYWdlT3ZlcmxheT4g
eworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFBhZ2VPdmVybGF5KTsKKyAgICBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBjbGFzcyBDbGllbnQgeworICAgIHByb3RlY3Rl
ZDoKKyAgICAgICAgdmlydHVhbCB+Q2xpZW50KCkgeyB9CisgICAgCisgICAgcHVibGljOgorICAg
ICAgICB2aXJ0dWFsIHZvaWQgcGFnZU92ZXJsYXlEZXN0cm95ZWQoUGFnZU92ZXJsYXkmKSA9IDA7
CisgICAgICAgIHZpcnR1YWwgdm9pZCB3aWxsTW92ZVRvUGFnZShQYWdlT3ZlcmxheSYsIFBhZ2Uq
KSA9IDA7CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRNb3ZlVG9QYWdlKFBhZ2VPdmVybGF5Jiwg
UGFnZSopID0gMDsKKyAgICAgICAgdmlydHVhbCB2b2lkIGRyYXdSZWN0KFBhZ2VPdmVybGF5Jiwg
R3JhcGhpY3NDb250ZXh0JiwgY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KSA9IDA7CisgICAgICAg
IHZpcnR1YWwgYm9vbCBtb3VzZUV2ZW50KFBhZ2VPdmVybGF5JiwgY29uc3QgUGxhdGZvcm1Nb3Vz
ZUV2ZW50JikgPSAwOworICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkU2Nyb2xsRnJhbWUoUGFnZU92
ZXJsYXkmLCBGcmFtZSYpIHsgfQorCisgICAgICAgIHZpcnR1YWwgYm9vbCBjb3B5QWNjZXNzaWJp
bGl0eUF0dHJpYnV0ZVN0cmluZ1ZhbHVlRm9yUG9pbnQoUGFnZU92ZXJsYXkmLCBTdHJpbmcgLyog
YXR0cmlidXRlICovLCBGbG9hdFBvaW50LCBTdHJpbmcmKSB7IHJldHVybiBmYWxzZTsgfQorICAg
ICAgICB2aXJ0dWFsIGJvb2wgY29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVCb29sVmFsdWVGb3JQ
b2ludChQYWdlT3ZlcmxheSYsIFN0cmluZyAvKiBhdHRyaWJ1dGUgKi8sIEZsb2F0UG9pbnQsIGJv
b2wmKSAgeyByZXR1cm4gZmFsc2U7IH0KKyAgICAgICAgdmlydHVhbCBWZWN0b3I8U3RyaW5nPiBj
b3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZU5hbWVzKFBhZ2VPdmVybGF5JiwgYm9vbCAvKiBwYXJh
bWV0ZXJpemVkTmFtZXMgKi8pICB7IHJldHVybiBWZWN0b3I8U3RyaW5nPigpOyB9CisgICAgfTsK
KworICAgIGVudW0gY2xhc3MgT3ZlcmxheVR5cGUgeworICAgICAgICBWaWV3LCAvLyBGaXhlZCB0
byB0aGUgdmlldyBzaXplOyBkb2VzIG5vdCBzY2FsZSBvciBzY3JvbGwgd2l0aCB0aGUgZG9jdW1l
bnQsIHJlcGFpbnRzIG9uIHNjcm9sbC4KKyAgICAgICAgRG9jdW1lbnQsIC8vIFNjYWxlcyBhbmQg
c2Nyb2xscyB3aXRoIHRoZSBkb2N1bWVudC4KKyAgICB9OworCisgICAgc3RhdGljIFBhc3NSZWZQ
dHI8UGFnZU92ZXJsYXk+IGNyZWF0ZShDbGllbnQmLCBPdmVybGF5VHlwZSA9IE92ZXJsYXlUeXBl
OjpWaWV3KTsKKyAgICB2aXJ0dWFsIH5QYWdlT3ZlcmxheSgpOworCisgICAgdm9pZCBzZXRQYWdl
KFBhZ2UqKTsKKyAgICB2b2lkIHNldE5lZWRzRGlzcGxheShjb25zdCBJbnRSZWN0JiBkaXJ0eVJl
Y3QpOworICAgIHZvaWQgc2V0TmVlZHNEaXNwbGF5KCk7CisKKyAgICB2b2lkIGRyYXdSZWN0KEdy
YXBoaWNzQ29udGV4dCYsIGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCk7CisgICAgYm9vbCBtb3Vz
ZUV2ZW50KGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYpOworICAgIHZvaWQgZGlkU2Nyb2xsRnJh
bWUoRnJhbWUmKTsKKworICAgIGJvb2wgY29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVTdHJpbmdW
YWx1ZUZvclBvaW50KFN0cmluZyBhdHRyaWJ1dGUsIEZsb2F0UG9pbnQgcGFyYW1ldGVyLCBTdHJp
bmcmIHZhbHVlKTsKKyAgICBib29sIGNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlQm9vbFZhbHVl
Rm9yUG9pbnQoU3RyaW5nIGF0dHJpYnV0ZSwgRmxvYXRQb2ludCBwYXJhbWV0ZXIsIGJvb2wmIHZh
bHVlKTsKKyAgICBWZWN0b3I8U3RyaW5nPiBjb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZU5hbWVz
KGJvb2wgcGFyYW1ldGVyaXplZE5hbWVzKTsKKyAgICAKKyAgICB2b2lkIHN0YXJ0RmFkZUluQW5p
bWF0aW9uKCk7CisgICAgdm9pZCBzdGFydEZhZGVPdXRBbmltYXRpb24oKTsKKyAgICB2b2lkIHN0
b3BGYWRlT3V0QW5pbWF0aW9uKCk7CisKKyAgICB2b2lkIGNsZWFyKCk7CisKKyAgICBDbGllbnQm
IGNsaWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fY2xpZW50OyB9CisKKyAgICBlbnVtIGNsYXNzIEZh
ZGVNb2RlIHsgRG9Ob3RGYWRlLCBGYWRlIH07CisKKyAgICBPdmVybGF5VHlwZSBvdmVybGF5VHlw
ZSgpIHsgcmV0dXJuIG1fb3ZlcmxheVR5cGU7IH0KKworICAgIEludFJlY3QgYm91bmRzKCkgY29u
c3Q7CisgICAgSW50UmVjdCBmcmFtZSgpIGNvbnN0OworICAgIHZvaWQgc2V0RnJhbWUoSW50UmVj
dCk7CisKKyAgICBSR0JBMzIgYmFja2dyb3VuZENvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9iYWNr
Z3JvdW5kQ29sb3I7IH0KKyAgICB2b2lkIHNldEJhY2tncm91bmRDb2xvcihSR0JBMzIpOworCisg
ICAgLy8gRklYTUU6IFBhZ2VPdmVybGF5IHNob3VsZCBvd24gaXRzIGxheWVyLCBpbnN0ZWFkIG9m
IFBhZ2VPdmVybGF5Q29udHJvbGxlci4KKyAgICBHcmFwaGljc0xheWVyJiBsYXllcigpOworCitw
cml2YXRlOgorICAgIGV4cGxpY2l0IFBhZ2VPdmVybGF5KENsaWVudCYsIE92ZXJsYXlUeXBlKTsK
KworICAgIHZvaWQgc3RhcnRGYWRlQW5pbWF0aW9uKCk7CisgICAgdm9pZCBmYWRlQW5pbWF0aW9u
VGltZXJGaXJlZCgpOworCisgICAgQ2xpZW50JiBtX2NsaWVudDsKKyAgICBQYWdlKiBtX3BhZ2U7
CisKKyAgICBSdW5Mb29wOjpUaW1lcjxQYWdlT3ZlcmxheT4gbV9mYWRlQW5pbWF0aW9uVGltZXI7
CisgICAgZG91YmxlIG1fZmFkZUFuaW1hdGlvblN0YXJ0VGltZTsKKyAgICBkb3VibGUgbV9mYWRl
QW5pbWF0aW9uRHVyYXRpb247CisKKyAgICBlbnVtIEZhZGVBbmltYXRpb25UeXBlIHsKKyAgICAg
ICAgTm9BbmltYXRpb24sCisgICAgICAgIEZhZGVJbkFuaW1hdGlvbiwKKyAgICAgICAgRmFkZU91
dEFuaW1hdGlvbiwKKyAgICB9OworCisgICAgRmFkZUFuaW1hdGlvblR5cGUgbV9mYWRlQW5pbWF0
aW9uVHlwZTsKKyAgICBmbG9hdCBtX2ZyYWN0aW9uRmFkZWRJbjsKKworICAgIE92ZXJsYXlUeXBl
IG1fb3ZlcmxheVR5cGU7CisgICAgSW50UmVjdCBtX292ZXJyaWRlRnJhbWU7CisKKyAgICBSR0JB
MzIgbV9iYWNrZ3JvdW5kQ29sb3I7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2Vu
ZGlmIC8vIFBhZ2VPdmVybGF5X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFn
ZU92ZXJsYXlDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZU92ZXJsYXlD
b250cm9sbGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYjBjNDU4
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlT3ZlcmxheUNvbnRy
b2xsZXIuY3BwCkBAIC0wLDAgKzEsMzUwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIlBhZ2VPdmVybGF5Q29udHJvbGxlci5oIgorCisjaW5jbHVkZSAiQ2hy
b21lLmgiCisjaW5jbHVkZSAiQ2hyb21lQ2xpZW50LmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNp
bmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNs
dWRlICJHcmFwaGljc0xheWVyLmgiCisjaW5jbHVkZSAiTWFpbkZyYW1lLmgiCisjaW5jbHVkZSAi
UGFnZS5oIgorI2luY2x1ZGUgIlBhZ2VPdmVybGF5LmgiCisjaW5jbHVkZSAiU2Nyb2xsaW5nQ29v
cmRpbmF0b3IuaCIKKyNpbmNsdWRlICJTZXR0aW5ncy5oIgorI2luY2x1ZGUgIlRpbGVkQmFja2lu
Zy5oIgorCisvLyBGSVhNRTogU29tZW9uZSBuZWVkcyB0byBjYWxsIGRpZENoYW5nZVNldHRpbmdz
KCkgaWYgd2Ugd2FudCBkeW5hbWljIHVwZGF0ZXMgb2YgbGF5ZXIgYm9yZGVyL3JlcGFpbnQgY291
bnRlciBzZXR0aW5ncy4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitQYWdlT3ZlcmxheUNvbnRy
b2xsZXI6OlBhZ2VPdmVybGF5Q29udHJvbGxlcihQYWdlJiBwYWdlKQorICAgIDogbV9pbml0aWFs
aXplZChmYWxzZSkKKyAgICAsIG1fcGFnZShwYWdlKQoreworfQorCit2b2lkIFBhZ2VPdmVybGF5
Q29udHJvbGxlcjo6Y3JlYXRlUm9vdExheWVyc0lmTmVlZGVkKCkKK3sKKyAgICBpZiAobV9pbml0
aWFsaXplZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9pbml0aWFsaXplZCA9IHRydWU7CisK
KyAgICBBU1NFUlQoIW1fZG9jdW1lbnRPdmVybGF5Um9vdExheWVyKTsKKyAgICBBU1NFUlQoIW1f
dmlld092ZXJsYXlSb290TGF5ZXIpOworCisgICAgbV9kb2N1bWVudE92ZXJsYXlSb290TGF5ZXIg
PSBHcmFwaGljc0xheWVyOjpjcmVhdGUobV9wYWdlLmNocm9tZSgpLmNsaWVudCgpLmdyYXBoaWNz
TGF5ZXJGYWN0b3J5KCksICp0aGlzKTsKKyAgICBtX3ZpZXdPdmVybGF5Um9vdExheWVyID0gR3Jh
cGhpY3NMYXllcjo6Y3JlYXRlKG1fcGFnZS5jaHJvbWUoKS5jbGllbnQoKS5ncmFwaGljc0xheWVy
RmFjdG9yeSgpLCAqdGhpcyk7CisjaWZuZGVmIE5ERUJVRworICAgIG1fZG9jdW1lbnRPdmVybGF5
Um9vdExheWVyLT5zZXROYW1lKCJQYWdlIE92ZXJsYXkgY29udGFpbmVyIChkb2N1bWVudC1yZWxh
dGl2ZSkiKTsKKyAgICBtX3ZpZXdPdmVybGF5Um9vdExheWVyLT5zZXROYW1lKCJQYWdlIE92ZXJs
YXkgY29udGFpbmVyICh2aWV3LXJlbGF0aXZlKSIpOworI2VuZGlmCit9CisKK0dyYXBoaWNzTGF5
ZXImIFBhZ2VPdmVybGF5Q29udHJvbGxlcjo6ZG9jdW1lbnRPdmVybGF5Um9vdExheWVyKCkKK3sK
KyAgICBjcmVhdGVSb290TGF5ZXJzSWZOZWVkZWQoKTsKKyAgICByZXR1cm4gKm1fZG9jdW1lbnRP
dmVybGF5Um9vdExheWVyOworfQorCitHcmFwaGljc0xheWVyJiBQYWdlT3ZlcmxheUNvbnRyb2xs
ZXI6OnZpZXdPdmVybGF5Um9vdExheWVyKCkKK3sKKyAgICBjcmVhdGVSb290TGF5ZXJzSWZOZWVk
ZWQoKTsKKyAgICByZXR1cm4gKm1fdmlld092ZXJsYXlSb290TGF5ZXI7Cit9CisKK3N0YXRpYyB2
b2lkIHVwZGF0ZU92ZXJsYXlHZW9tZXRyeShQYWdlT3ZlcmxheSYgb3ZlcmxheSwgR3JhcGhpY3NM
YXllciYgZ3JhcGhpY3NMYXllcikKK3sKKyAgICBJbnRSZWN0IG92ZXJsYXlGcmFtZSA9IG92ZXJs
YXkuZnJhbWUoKTsKKworICAgIGlmIChvdmVybGF5RnJhbWUubG9jYXRpb24oKSA9PSBncmFwaGlj
c0xheWVyLnBvc2l0aW9uKCkgJiYgb3ZlcmxheUZyYW1lLnNpemUoKSA9PSBncmFwaGljc0xheWVy
LnNpemUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZ3JhcGhpY3NMYXllci5zZXRQb3NpdGlv
bihvdmVybGF5RnJhbWUubG9jYXRpb24oKSk7CisgICAgZ3JhcGhpY3NMYXllci5zZXRTaXplKG92
ZXJsYXlGcmFtZS5zaXplKCkpOworfQorCit2b2lkIFBhZ2VPdmVybGF5Q29udHJvbGxlcjo6aW5z
dGFsbFBhZ2VPdmVybGF5KFBhc3NSZWZQdHI8UGFnZU92ZXJsYXk+IHBhZ2VPdmVybGF5LCBQYWdl
T3ZlcmxheTo6RmFkZU1vZGUgZmFkZU1vZGUpCit7CisgICAgY3JlYXRlUm9vdExheWVyc0lmTmVl
ZGVkKCk7CisKKyAgICBSZWZQdHI8UGFnZU92ZXJsYXk+IG92ZXJsYXkgPSBwYWdlT3ZlcmxheTsK
KworICAgIGlmIChtX3BhZ2VPdmVybGF5cy5jb250YWlucyhvdmVybGF5KSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgbV9wYWdlT3ZlcmxheXMuYXBwZW5kKG92ZXJsYXkpOworICAgIG92ZXJsYXkt
PnNldFBhZ2UoJm1fcGFnZSk7CisKKyAgICBpZiAoZmFkZU1vZGUgPT0gUGFnZU92ZXJsYXk6OkZh
ZGVNb2RlOjpGYWRlKQorICAgICAgICBvdmVybGF5LT5zdGFydEZhZGVJbkFuaW1hdGlvbigpOwor
CisgICAgc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzTGF5ZXI+IGxheWVyID0gR3JhcGhpY3NMYXll
cjo6Y3JlYXRlKG1fcGFnZS5jaHJvbWUoKS5jbGllbnQoKS5ncmFwaGljc0xheWVyRmFjdG9yeSgp
LCAqdGhpcyk7CisgICAgbGF5ZXItPnNldEFuY2hvclBvaW50KEZsb2F0UG9pbnQzRCgpKTsKKyAg
ICBsYXllci0+c2V0QmFja2dyb3VuZENvbG9yKG92ZXJsYXktPmJhY2tncm91bmRDb2xvcigpKTsK
KyAgICB1cGRhdGVPdmVybGF5R2VvbWV0cnkoKm92ZXJsYXksICpsYXllcik7CisjaWZuZGVmIE5E
RUJVRworICAgIGxheWVyLT5zZXROYW1lKCJQYWdlIE92ZXJsYXkgY29udGVudCIpOworI2VuZGlm
CisKKyAgICB1cGRhdGVTZXR0aW5nc0ZvckxheWVyKCpsYXllcik7CisKKyAgICBzd2l0Y2ggKG92
ZXJsYXktPm92ZXJsYXlUeXBlKCkpIHsKKyAgICBjYXNlIFBhZ2VPdmVybGF5OjpPdmVybGF5VHlw
ZTo6VmlldzoKKyAgICAgICAgbV92aWV3T3ZlcmxheVJvb3RMYXllci0+YWRkQ2hpbGQobGF5ZXIu
Z2V0KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBhZ2VPdmVybGF5OjpPdmVybGF5VHlw
ZTo6RG9jdW1lbnQ6CisgICAgICAgIG1fZG9jdW1lbnRPdmVybGF5Um9vdExheWVyLT5hZGRDaGls
ZChsYXllci5nZXQoKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIG1fb3ZlcmxheUdy
YXBoaWNzTGF5ZXJzLnNldChvdmVybGF5LmdldCgpLCBXVEY6Om1vdmUobGF5ZXIpKTsKKworICAg
IHVwZGF0ZUZvcmNlU3luY2hyb25vdXNTY3JvbGxMYXllclBvc2l0aW9uVXBkYXRlcygpOworCisg
ICAgaWYgKEZyYW1lVmlldyogZnJhbWVWaWV3ID0gbV9wYWdlLm1haW5GcmFtZSgpLnZpZXcoKSkK
KyAgICAgICAgZnJhbWVWaWV3LT5lbnRlckNvbXBvc2l0aW5nTW9kZSgpOworfQorCit2b2lkIFBh
Z2VPdmVybGF5Q29udHJvbGxlcjo6dW5pbnN0YWxsUGFnZU92ZXJsYXkoUGFnZU92ZXJsYXkqIG92
ZXJsYXksIFBhZ2VPdmVybGF5OjpGYWRlTW9kZSBmYWRlTW9kZSkKK3sKKyAgICBpZiAoZmFkZU1v
ZGUgPT0gUGFnZU92ZXJsYXk6OkZhZGVNb2RlOjpGYWRlKSB7CisgICAgICAgIG92ZXJsYXktPnN0
YXJ0RmFkZU91dEFuaW1hdGlvbigpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgb3Zl
cmxheS0+c2V0UGFnZShudWxscHRyKTsKKworICAgIG1fb3ZlcmxheUdyYXBoaWNzTGF5ZXJzLnRh
a2Uob3ZlcmxheSktPnJlbW92ZUZyb21QYXJlbnQoKTsKKworICAgIHNpemVfdCBvdmVybGF5SW5k
ZXggPSBtX3BhZ2VPdmVybGF5cy5maW5kKG92ZXJsYXkpOworICAgIEFTU0VSVChvdmVybGF5SW5k
ZXggIT0gbm90Rm91bmQpOworICAgIG1fcGFnZU92ZXJsYXlzLnJlbW92ZShvdmVybGF5SW5kZXgp
OworCisgICAgdXBkYXRlRm9yY2VTeW5jaHJvbm91c1Njcm9sbExheWVyUG9zaXRpb25VcGRhdGVz
KCk7Cit9CisKK3ZvaWQgUGFnZU92ZXJsYXlDb250cm9sbGVyOjp1cGRhdGVGb3JjZVN5bmNocm9u
b3VzU2Nyb2xsTGF5ZXJQb3NpdGlvblVwZGF0ZXMoKQoreworI2lmIEVOQUJMRShBU1lOQ19TQ1JP
TExJTkcpCisgICAgYm9vbCBmb3JjZVN5bmNocm9ub3VzU2Nyb2xsTGF5ZXJQb3NpdGlvblVwZGF0
ZXMgPSBmYWxzZTsKKworICAgIGZvciAoYXV0byYgb3ZlcmxheSA6IG1fcGFnZU92ZXJsYXlzKSB7
CisgICAgICAgIGlmIChvdmVybGF5LT5vdmVybGF5VHlwZSgpID09IFBhZ2VPdmVybGF5OjpPdmVy
bGF5VHlwZTo6VmlldykKKyAgICAgICAgICAgIGZvcmNlU3luY2hyb25vdXNTY3JvbGxMYXllclBv
c2l0aW9uVXBkYXRlcyA9IHRydWU7CisgICAgfQorCisgICAgaWYgKFNjcm9sbGluZ0Nvb3JkaW5h
dG9yKiBzY3JvbGxpbmdDb29yZGluYXRvciA9IG1fcGFnZS5zY3JvbGxpbmdDb29yZGluYXRvcigp
KQorICAgICAgICBzY3JvbGxpbmdDb29yZGluYXRvci0+c2V0Rm9yY2VTeW5jaHJvbm91c1Njcm9s
bExheWVyUG9zaXRpb25VcGRhdGVzKGZvcmNlU3luY2hyb25vdXNTY3JvbGxMYXllclBvc2l0aW9u
VXBkYXRlcyk7CisjZW5kaWYKK30KKwordm9pZCBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6OnNldFBh
Z2VPdmVybGF5TmVlZHNEaXNwbGF5KFBhZ2VPdmVybGF5JiBvdmVybGF5LCBjb25zdCBXZWJDb3Jl
OjpJbnRSZWN0JiBkaXJ0eVJlY3QpCit7CisgICAgQVNTRVJUKG1fcGFnZU92ZXJsYXlzLmNvbnRh
aW5zKCZvdmVybGF5KSk7CisgICAgR3JhcGhpY3NMYXllciYgZ3JhcGhpY3NMYXllciA9ICptX292
ZXJsYXlHcmFwaGljc0xheWVycy5nZXQoJm92ZXJsYXkpOworCisgICAgaWYgKCFncmFwaGljc0xh
eWVyLmRyYXdzQ29udGVudCgpKSB7CisgICAgICAgIGdyYXBoaWNzTGF5ZXIuc2V0RHJhd3NDb250
ZW50KHRydWUpOworICAgICAgICB1cGRhdGVPdmVybGF5R2VvbWV0cnkob3ZlcmxheSwgZ3JhcGhp
Y3NMYXllcik7CisgICAgfQorCisgICAgZ3JhcGhpY3NMYXllci5zZXROZWVkc0Rpc3BsYXlJblJl
Y3QoZGlydHlSZWN0KTsKK30KKwordm9pZCBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6OnNldFBhZ2VP
dmVybGF5T3BhY2l0eShQYWdlT3ZlcmxheSYgb3ZlcmxheSwgZmxvYXQgb3BhY2l0eSkKK3sKKyAg
ICBBU1NFUlQobV9wYWdlT3ZlcmxheXMuY29udGFpbnMoJm92ZXJsYXkpKTsKKyAgICBtX292ZXJs
YXlHcmFwaGljc0xheWVycy5nZXQoJm92ZXJsYXkpLT5zZXRPcGFjaXR5KG9wYWNpdHkpOworfQor
Cit2b2lkIFBhZ2VPdmVybGF5Q29udHJvbGxlcjo6Y2xlYXJQYWdlT3ZlcmxheShQYWdlT3Zlcmxh
eSYgb3ZlcmxheSkKK3sKKyAgICBBU1NFUlQobV9wYWdlT3ZlcmxheXMuY29udGFpbnMoJm92ZXJs
YXkpKTsKKyAgICBtX292ZXJsYXlHcmFwaGljc0xheWVycy5nZXQoJm92ZXJsYXkpLT5zZXREcmF3
c0NvbnRlbnQoZmFsc2UpOworfQorCitHcmFwaGljc0xheWVyJiBQYWdlT3ZlcmxheUNvbnRyb2xs
ZXI6OmxheWVyRm9yT3ZlcmxheShQYWdlT3ZlcmxheSYgb3ZlcmxheSkgY29uc3QKK3sKKyAgICBB
U1NFUlQobV9wYWdlT3ZlcmxheXMuY29udGFpbnMoJm92ZXJsYXkpKTsKKyAgICByZXR1cm4gKm1f
b3ZlcmxheUdyYXBoaWNzTGF5ZXJzLmdldCgmb3ZlcmxheSk7Cit9CisKK3ZvaWQgUGFnZU92ZXJs
YXlDb250cm9sbGVyOjp3aWxsQXR0YWNoUm9vdExheWVyKCkKK3sKKyAgICBmb3IgKGF1dG8mIG92
ZXJsYXlBbmRMYXllciA6IG1fb3ZlcmxheUdyYXBoaWNzTGF5ZXJzKQorICAgICAgICB1cGRhdGVP
dmVybGF5R2VvbWV0cnkoKm92ZXJsYXlBbmRMYXllci5rZXksICpvdmVybGF5QW5kTGF5ZXIudmFs
dWUpOworfQorCit2b2lkIFBhZ2VPdmVybGF5Q29udHJvbGxlcjo6ZGlkQ2hhbmdlVmlld1NpemUo
KQoreworICAgIGZvciAoYXV0byYgb3ZlcmxheUFuZExheWVyIDogbV9vdmVybGF5R3JhcGhpY3NM
YXllcnMpIHsKKyAgICAgICAgaWYgKG92ZXJsYXlBbmRMYXllci5rZXktPm92ZXJsYXlUeXBlKCkg
PT0gUGFnZU92ZXJsYXk6Ok92ZXJsYXlUeXBlOjpWaWV3KQorICAgICAgICAgICAgdXBkYXRlT3Zl
cmxheUdlb21ldHJ5KCpvdmVybGF5QW5kTGF5ZXIua2V5LCAqb3ZlcmxheUFuZExheWVyLnZhbHVl
KTsKKyAgICB9Cit9CisKK3ZvaWQgUGFnZU92ZXJsYXlDb250cm9sbGVyOjpkaWRDaGFuZ2VEb2N1
bWVudFNpemUoKQoreworICAgIGZvciAoYXV0byYgb3ZlcmxheUFuZExheWVyIDogbV9vdmVybGF5
R3JhcGhpY3NMYXllcnMpIHsKKyAgICAgICAgaWYgKG92ZXJsYXlBbmRMYXllci5rZXktPm92ZXJs
YXlUeXBlKCkgPT0gUGFnZU92ZXJsYXk6Ok92ZXJsYXlUeXBlOjpEb2N1bWVudCkKKyAgICAgICAg
ICAgIHVwZGF0ZU92ZXJsYXlHZW9tZXRyeSgqb3ZlcmxheUFuZExheWVyLmtleSwgKm92ZXJsYXlB
bmRMYXllci52YWx1ZSk7CisgICAgfQorfQorCit2b2lkIFBhZ2VPdmVybGF5Q29udHJvbGxlcjo6
ZGlkQ2hhbmdlU2V0dGluZ3MoKQoreworICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYXBwbHkgdGhl
c2Ugc2V0dGluZ3MgdG8gYWxsIG92ZXJsYXkgc3VibGF5ZXJzIHJlY3Vyc2l2ZWx5LgorICAgIGZv
ciAoYXV0byYgZ3JhcGhpY3NMYXllciA6IG1fb3ZlcmxheUdyYXBoaWNzTGF5ZXJzLnZhbHVlcygp
KQorICAgICAgICB1cGRhdGVTZXR0aW5nc0ZvckxheWVyKCpncmFwaGljc0xheWVyKTsKK30KKwor
dm9pZCBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6OmRpZENoYW5nZURldmljZVNjYWxlRmFjdG9yKCkK
K3sKKyAgICBjcmVhdGVSb290TGF5ZXJzSWZOZWVkZWQoKTsKKworICAgIG1fZG9jdW1lbnRPdmVy
bGF5Um9vdExheWVyLT5ub3RlRGV2aWNlT3JQYWdlU2NhbGVGYWN0b3JDaGFuZ2VkSW5jbHVkaW5n
RGVzY2VuZGFudHMoKTsKKyAgICBtX3ZpZXdPdmVybGF5Um9vdExheWVyLT5ub3RlRGV2aWNlT3JQ
YWdlU2NhbGVGYWN0b3JDaGFuZ2VkSW5jbHVkaW5nRGVzY2VuZGFudHMoKTsKKworICAgIGZvciAo
YXV0byYgZ3JhcGhpY3NMYXllciA6IG1fb3ZlcmxheUdyYXBoaWNzTGF5ZXJzLnZhbHVlcygpKQor
ICAgICAgICBncmFwaGljc0xheWVyLT5zZXROZWVkc0Rpc3BsYXkoKTsKK30KKwordm9pZCBQYWdl
T3ZlcmxheUNvbnRyb2xsZXI6OmRpZENoYW5nZUV4cG9zZWRSZWN0KCkKK3sKKyAgICBtX3BhZ2Uu
Y2hyb21lKCkuY2xpZW50KCkuc2NoZWR1bGVDb21wb3NpdGluZ0xheWVyRmx1c2goKTsKK30KKwor
dm9pZCBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6OmRpZFNjcm9sbEZyYW1lKEZyYW1lJiBmcmFtZSkK
K3sKKyAgICBmb3IgKGF1dG8mIG92ZXJsYXlBbmRMYXllciA6IG1fb3ZlcmxheUdyYXBoaWNzTGF5
ZXJzKSB7CisgICAgICAgIGlmIChvdmVybGF5QW5kTGF5ZXIua2V5LT5vdmVybGF5VHlwZSgpID09
IFBhZ2VPdmVybGF5OjpPdmVybGF5VHlwZTo6VmlldyB8fCAhZnJhbWUuaXNNYWluRnJhbWUoKSkK
KyAgICAgICAgICAgIG92ZXJsYXlBbmRMYXllci52YWx1ZS0+c2V0TmVlZHNEaXNwbGF5KCk7Cisg
ICAgICAgIG92ZXJsYXlBbmRMYXllci5rZXktPmRpZFNjcm9sbEZyYW1lKGZyYW1lKTsKKyAgICB9
Cit9CisKK3ZvaWQgUGFnZU92ZXJsYXlDb250cm9sbGVyOjp1cGRhdGVTZXR0aW5nc0ZvckxheWVy
KEdyYXBoaWNzTGF5ZXImIGxheWVyKQoreworICAgIFNldHRpbmdzJiBzZXR0aW5ncyA9IG1fcGFn
ZS5zZXR0aW5ncygpOworICAgIGxheWVyLnNldEFjY2VsZXJhdGVzRHJhd2luZyhzZXR0aW5ncy5h
Y2NlbGVyYXRlZERyYXdpbmdFbmFibGVkKCkpOworICAgIGxheWVyLnNldFNob3dEZWJ1Z0JvcmRl
cihzZXR0aW5ncy5zaG93RGVidWdCb3JkZXJzKCkpOworICAgIGxheWVyLnNldFNob3dSZXBhaW50
Q291bnRlcihzZXR0aW5ncy5zaG93UmVwYWludENvdW50ZXIoKSk7Cit9CisKK2Jvb2wgUGFnZU92
ZXJsYXlDb250cm9sbGVyOjpoYW5kbGVNb3VzZUV2ZW50KGNvbnN0IFBsYXRmb3JtTW91c2VFdmVu
dCYgbW91c2VFdmVudCkKK3sKKyAgICBpZiAoIW1fcGFnZU92ZXJsYXlzLnNpemUoKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgZm9yIChhdXRvIGl0ID0gbV9wYWdlT3ZlcmxheXMucmJl
Z2luKCksIGVuZCA9IG1fcGFnZU92ZXJsYXlzLnJlbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7Cisg
ICAgICAgIGlmICgoKml0KS0+bW91c2VFdmVudChtb3VzZUV2ZW50KSkKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBQYWdlT3Zl
cmxheUNvbnRyb2xsZXI6OmNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlU3RyaW5nVmFsdWVGb3JQ
b2ludChTdHJpbmcgYXR0cmlidXRlLCBGbG9hdFBvaW50IHBhcmFtZXRlciwgU3RyaW5nJiB2YWx1
ZSkKK3sKKyAgICBpZiAoIW1fcGFnZU92ZXJsYXlzLnNpemUoKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgZm9yIChhdXRvIGl0ID0gbV9wYWdlT3ZlcmxheXMucmJlZ2luKCksIGVuZCA9
IG1fcGFnZU92ZXJsYXlzLnJlbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIGlmICgo
Kml0KS0+Y29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVTdHJpbmdWYWx1ZUZvclBvaW50KGF0dHJp
YnV0ZSwgcGFyYW1ldGVyLCB2YWx1ZSkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUGFnZU92ZXJsYXlDb250cm9sbGVyOjpj
b3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZUJvb2xWYWx1ZUZvclBvaW50KFN0cmluZyBhdHRyaWJ1
dGUsIEZsb2F0UG9pbnQgcGFyYW1ldGVyLCBib29sJiB2YWx1ZSkKK3sKKyAgICBpZiAoIW1fcGFn
ZU92ZXJsYXlzLnNpemUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgZm9yIChhdXRv
IGl0ID0gbV9wYWdlT3ZlcmxheXMucmJlZ2luKCksIGVuZCA9IG1fcGFnZU92ZXJsYXlzLnJlbmQo
KTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIGlmICgoKml0KS0+Y29weUFjY2Vzc2liaWxp
dHlBdHRyaWJ1dGVCb29sVmFsdWVGb3JQb2ludChhdHRyaWJ1dGUsIHBhcmFtZXRlciwgdmFsdWUp
KQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIHJldHVybiBmYWxz
ZTsKK30KKworVmVjdG9yPFN0cmluZz4gUGFnZU92ZXJsYXlDb250cm9sbGVyOjpjb3B5QWNjZXNz
aWJpbGl0eUF0dHJpYnV0ZXNOYW1lcyhib29sIHBhcmFtZXRlcml6ZWROYW1lcykKK3sKKyAgICBp
ZiAoIW1fcGFnZU92ZXJsYXlzLnNpemUoKSkKKyAgICAgICAgcmV0dXJuIFZlY3RvcjxTdHJpbmc+
KCk7CisKKyAgICBmb3IgKGF1dG8gaXQgPSBtX3BhZ2VPdmVybGF5cy5yYmVnaW4oKSwgZW5kID0g
bV9wYWdlT3ZlcmxheXMucmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgVmVjdG9y
PFN0cmluZz4gbmFtZXMgPSAoKml0KS0+Y29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVOYW1lcyhw
YXJhbWV0ZXJpemVkTmFtZXMpOworICAgICAgICBpZiAoIW5hbWVzLmlzRW1wdHkoKSkKKyAgICAg
ICAgICAgIHJldHVybiBuYW1lczsKKyAgICB9CisKKyAgICByZXR1cm4gVmVjdG9yPFN0cmluZz4o
KTsKK30KKwordm9pZCBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6OnBhaW50Q29udGVudHMoY29uc3Qg
V2ViQ29yZTo6R3JhcGhpY3NMYXllciogZ3JhcGhpY3NMYXllciwgV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0JiBncmFwaGljc0NvbnRleHQsIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJQYWludGluZ1Bo
YXNlLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGNsaXBSZWN0KQoreworICAgIGZvciAoYXV0
byBpdCA9IG1fb3ZlcmxheUdyYXBoaWNzTGF5ZXJzLmJlZ2luKCksIGVuZCA9IG1fb3ZlcmxheUdy
YXBoaWNzTGF5ZXJzLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgaWYgKGl0LT52
YWx1ZS5nZXQoKSAhPSBncmFwaGljc0xheWVyKQorICAgICAgICAgICAgY29udGludWU7CisKKyAg
ICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGdyYXBoaWNzQ29udGV4
dCk7CisgICAgICAgIGdyYXBoaWNzQ29udGV4dC5jbGlwKGNsaXBSZWN0KTsKKyAgICAgICAgaXQt
PmtleS0+ZHJhd1JlY3QoZ3JhcGhpY3NDb250ZXh0LCBlbmNsb3NpbmdJbnRSZWN0KGNsaXBSZWN0
KSk7CisKKyAgICAgICAgcmV0dXJuOworICAgIH0KK30KKworZmxvYXQgUGFnZU92ZXJsYXlDb250
cm9sbGVyOjpkZXZpY2VTY2FsZUZhY3RvcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcGFnZS5k
ZXZpY2VTY2FsZUZhY3RvcigpOworfQorCit2b2lkIFBhZ2VPdmVybGF5Q29udHJvbGxlcjo6bm90
aWZ5Rmx1c2hSZXF1aXJlZChjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKikKK3sKKyAgICBt
X3BhZ2UuY2hyb21lKCkuY2xpZW50KCkuc2NoZWR1bGVDb21wb3NpdGluZ0xheWVyRmx1c2goKTsK
K30KKwordm9pZCBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6OmRpZENoYW5nZU92ZXJsYXlGcmFtZShQ
YWdlT3ZlcmxheSYgb3ZlcmxheSkKK3sKKyAgICBBU1NFUlQobV9wYWdlT3ZlcmxheXMuY29udGFp
bnMoJm92ZXJsYXkpKTsKKyAgICB1cGRhdGVPdmVybGF5R2VvbWV0cnkob3ZlcmxheSwgKm1fb3Zl
cmxheUdyYXBoaWNzTGF5ZXJzLmdldCgmb3ZlcmxheSkpOworfQorCit2b2lkIFBhZ2VPdmVybGF5
Q29udHJvbGxlcjo6ZGlkQ2hhbmdlT3ZlcmxheUJhY2tncm91bmRDb2xvcihQYWdlT3ZlcmxheSYg
b3ZlcmxheSkKK3sKKyAgICBBU1NFUlQobV9wYWdlT3ZlcmxheXMuY29udGFpbnMoJm92ZXJsYXkp
KTsKKyAgICBtX292ZXJsYXlHcmFwaGljc0xheWVycy5nZXQoJm92ZXJsYXkpLT5zZXRCYWNrZ3Jv
dW5kQ29sb3Iob3ZlcmxheS5iYWNrZ3JvdW5kQ29sb3IoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlT3ZlcmxheUNvbnRy
b2xsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZU92ZXJsYXlDb250cm9sbGVyLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmU5Yzg5ZAotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZU92ZXJsYXlDb250cm9sbGVyLmgKQEAgLTAsMCAr
MSwxMDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFBhZ2VPdmVybGF5Q29udHJvbGxlcl9oCisj
ZGVmaW5lIFBhZ2VPdmVybGF5Q29udHJvbGxlcl9oCisKKyNpbmNsdWRlICJHcmFwaGljc0xheWVy
Q2xpZW50LmgiCisjaW5jbHVkZSAiUGFnZU92ZXJsYXkuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1h
cC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRnJhbWU7CitjbGFzcyBQYWdlOworY2xhc3Mg
UGxhdGZvcm1Nb3VzZUV2ZW50OworCitjbGFzcyBQYWdlT3ZlcmxheUNvbnRyb2xsZXIgOiBwdWJs
aWMgR3JhcGhpY3NMYXllckNsaWVudCB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUGFnZU92
ZXJsYXlDb250cm9sbGVyKTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoK
KyAgICBQYWdlT3ZlcmxheUNvbnRyb2xsZXIoUGFnZSYpOworCisgICAgR3JhcGhpY3NMYXllciYg
ZG9jdW1lbnRPdmVybGF5Um9vdExheWVyKCk7CisgICAgR3JhcGhpY3NMYXllciYgdmlld092ZXJs
YXlSb290TGF5ZXIoKTsKKworICAgIHZvaWQgaW5zdGFsbFBhZ2VPdmVybGF5KFBhc3NSZWZQdHI8
UGFnZU92ZXJsYXk+LCBQYWdlT3ZlcmxheTo6RmFkZU1vZGUpOworICAgIHZvaWQgdW5pbnN0YWxs
UGFnZU92ZXJsYXkoUGFnZU92ZXJsYXkqLCBQYWdlT3ZlcmxheTo6RmFkZU1vZGUpOworCisgICAg
dm9pZCBzZXRQYWdlT3ZlcmxheU5lZWRzRGlzcGxheShQYWdlT3ZlcmxheSYsIGNvbnN0IEludFJl
Y3QmKTsKKyAgICB2b2lkIHNldFBhZ2VPdmVybGF5T3BhY2l0eShQYWdlT3ZlcmxheSYsIGZsb2F0
KTsKKyAgICB2b2lkIGNsZWFyUGFnZU92ZXJsYXkoUGFnZU92ZXJsYXkmKTsKKyAgICBHcmFwaGlj
c0xheWVyJiBsYXllckZvck92ZXJsYXkoUGFnZU92ZXJsYXkmKSBjb25zdDsKKworICAgIHZvaWQg
d2lsbEF0dGFjaFJvb3RMYXllcigpOworCisgICAgdm9pZCBkaWRDaGFuZ2VWaWV3U2l6ZSgpOwor
ICAgIHZvaWQgZGlkQ2hhbmdlRG9jdW1lbnRTaXplKCk7CisgICAgdm9pZCBkaWRDaGFuZ2VTZXR0
aW5ncygpOworICAgIHZvaWQgZGlkQ2hhbmdlRGV2aWNlU2NhbGVGYWN0b3IoKTsKKyAgICB2b2lk
IGRpZENoYW5nZUV4cG9zZWRSZWN0KCk7CisgICAgdm9pZCBkaWRTY3JvbGxGcmFtZShGcmFtZSYp
OworCisgICAgdm9pZCBkaWRDaGFuZ2VPdmVybGF5RnJhbWUoUGFnZU92ZXJsYXkmKTsKKyAgICB2
b2lkIGRpZENoYW5nZU92ZXJsYXlCYWNrZ3JvdW5kQ29sb3IoUGFnZU92ZXJsYXkmKTsKKworICAg
IGludCBvdmVybGF5Q291bnQoKSBjb25zdCB7IHJldHVybiBtX292ZXJsYXlHcmFwaGljc0xheWVy
cy5zaXplKCk7IH0KKworICAgIGJvb2wgaGFuZGxlTW91c2VFdmVudChjb25zdCBQbGF0Zm9ybU1v
dXNlRXZlbnQmKTsKKworICAgIGJvb2wgY29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVTdHJpbmdW
YWx1ZUZvclBvaW50KFN0cmluZyBhdHRyaWJ1dGUsIEZsb2F0UG9pbnQsIFN0cmluZyYgdmFsdWUp
OworICAgIGJvb2wgY29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVCb29sVmFsdWVGb3JQb2ludChT
dHJpbmcgYXR0cmlidXRlLCBGbG9hdFBvaW50LCBib29sJiB2YWx1ZSk7CisgICAgVmVjdG9yPFN0
cmluZz4gY29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVzTmFtZXMoYm9vbCBwYXJhbWV0ZXJpemVk
TmFtZXMpOworCitwcml2YXRlOgorICAgIHZvaWQgY3JlYXRlUm9vdExheWVyc0lmTmVlZGVkKCk7
CisKKyAgICB2b2lkIHVwZGF0ZVNldHRpbmdzRm9yTGF5ZXIoR3JhcGhpY3NMYXllciYpOworICAg
IHZvaWQgdXBkYXRlRm9yY2VTeW5jaHJvbm91c1Njcm9sbExheWVyUG9zaXRpb25VcGRhdGVzKCk7
CisKKyAgICAvLyBHcmFwaGljc0xheWVyQ2xpZW50CisgICAgdmlydHVhbCB2b2lkIG5vdGlmeUZs
dXNoUmVxdWlyZWQoY29uc3QgR3JhcGhpY3NMYXllciopIG92ZXJyaWRlOworICAgIHZpcnR1YWwg
dm9pZCBwYWludENvbnRlbnRzKGNvbnN0IEdyYXBoaWNzTGF5ZXIqLCBHcmFwaGljc0NvbnRleHQm
LCBHcmFwaGljc0xheWVyUGFpbnRpbmdQaGFzZSwgY29uc3QgRmxvYXRSZWN0JiBjbGlwUmVjdCkg
b3ZlcnJpZGU7CisgICAgdmlydHVhbCBmbG9hdCBkZXZpY2VTY2FsZUZhY3RvcigpIGNvbnN0IG92
ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBzaG91bGRTa2lwTGF5ZXJJbkR1bXAoY29uc3QgR3Jh
cGhpY3NMYXllciopIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KKworICAgIHN0ZDo6
dW5pcXVlX3B0cjxHcmFwaGljc0xheWVyPiBtX2RvY3VtZW50T3ZlcmxheVJvb3RMYXllcjsKKyAg
ICBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NMYXllcj4gbV92aWV3T3ZlcmxheVJvb3RMYXllcjsK
KyAgICBib29sIG1faW5pdGlhbGl6ZWQ7CisKKyAgICBIYXNoTWFwPFBhZ2VPdmVybGF5Kiwgc3Rk
Ojp1bmlxdWVfcHRyPEdyYXBoaWNzTGF5ZXI+PiBtX292ZXJsYXlHcmFwaGljc0xheWVyczsKKyAg
ICBWZWN0b3I8UmVmUHRyPFBhZ2VPdmVybGF5Pj4gbV9wYWdlT3ZlcmxheXM7CisgICAgUGFnZSYg
bV9wYWdlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBQYWdlT3Zl
cmxheUNvbnRyb2xsZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NMYXllckNsaWVudC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NMYXllckNsaWVudC5oCmluZGV4IDhhNDgzMzMuLjI1OTIyY2IgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXJDbGll
bnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVy
Q2xpZW50LmgKQEAgLTI2LDYgKzI2LDggQEAKICNpZm5kZWYgR3JhcGhpY3NMYXllckNsaWVudF9o
CiAjZGVmaW5lIEdyYXBoaWNzTGF5ZXJDbGllbnRfaAogCisjaW5jbHVkZSA8d3RmL0ZvcndhcmQu
aD4KKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBGbG9hdFBvaW50OwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKaW5kZXggZDlkNTkzMy4uMTYzNzRkYyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCkBAIC0yMzIyLDcgKzIzMjIs
NyBAQCB2b2lkIFJlbmRlckxheWVyOjpzY3JvbGxUbyhpbnQgeCwgaW50IHkpCiAKICAgICBJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZFNjcm9sbExheWVyKCZmcmFtZSk7CiAgICAgaWYgKHNj
cm9sbHNPdmVyZmxvdygpKQotICAgICAgICBmcmFtZS5sb2FkZXIoKS5jbGllbnQoKS5kaWRDaGFu
Z2VTY3JvbGxPZmZzZXQoKTsKKyAgICAgICAgdmlldy5mcmFtZVZpZXcoKS5kaWRDaGFuZ2VTY3Jv
bGxPZmZzZXQoKTsKIAogICAgIHZpZXcuZnJhbWVWaWV3KCkucmVzdW1lVmlzaWJsZUltYWdlQW5p
bWF0aW9uc0luY2x1ZGluZ1N1YmZyYW1lcygpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAppbmRleCA0YmU0NjkxLi4xZjU5YjBh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3Np
dG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3Np
dG9yLmNwcApAQCAtNDUsNiArNDUsNyBAQAogI2luY2x1ZGUgIk1haW5GcmFtZS5oIgogI2luY2x1
ZGUgIk5vZGVMaXN0LmgiCiAjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlBhZ2VPdmVybGF5
Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIlJlbmRlckVtYmVkZGVkT2JqZWN0LmgiCiAjaW5jbHVk
ZSAiUmVuZGVyRmxvd1RocmVhZC5oIgogI2luY2x1ZGUgIlJlbmRlckZ1bGxTY3JlZW4uaCIKQEAg
LTY0Myw3ICs2NDQsOCBAQCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6dXBkYXRlQ29tcG9z
aXRpbmdMYXllcnNUaW1lckZpcmVkKFRpbWVyPFJlbmRlckxheWVyQwogCiBib29sIFJlbmRlckxh
eWVyQ29tcG9zaXRvcjo6aGFzQW55QWRkaXRpb25hbENvbXBvc2l0ZWRMYXllcnMoY29uc3QgUmVu
ZGVyTGF5ZXImIHJvb3RMYXllcikgY29uc3QKIHsKLSAgICByZXR1cm4gbV9jb21wb3NpdGVkTGF5
ZXJDb3VudCA+IChyb290TGF5ZXIuaXNDb21wb3NpdGVkKCkgPyAxIDogMCk7CisgICAgaW50IGxh
eWVyQ291bnQgPSBtX2NvbXBvc2l0ZWRMYXllckNvdW50ICsgbV9yZW5kZXJWaWV3LmZyYW1lKCku
cGFnZSgpLT5wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKS5vdmVybGF5Q291bnQoKTsKKyAgICByZXR1
cm4gbGF5ZXJDb3VudCA+IChyb290TGF5ZXIuaXNDb21wb3NpdGVkKCkgPyAxIDogMCk7CiB9CiAK
IHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpjYW5jZWxDb21wb3NpdGluZ0xheWVyVXBkYXRl
KCkKQEAgLTY2NSw3ICs2NjcsNyBAQCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6dXBkYXRl
Q29tcG9zaXRpbmdMYXllcnMoQ29tcG9zaXRpbmdVcGRhdGVUeXBlIHVwZGF0ZQogICAgIGlmICht
X3JlbmRlclZpZXcubmVlZHNMYXlvdXQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKG1f
Zm9yY2VDb21wb3NpdGluZ01vZGUgJiYgIW1fY29tcG9zaXRpbmcpCisgICAgaWYgKChtX2ZvcmNl
Q29tcG9zaXRpbmdNb2RlIHx8IG1fcmVuZGVyVmlldy5mcmFtZSgpLnBhZ2UoKS0+cGFnZU92ZXJs
YXlDb250cm9sbGVyKCkub3ZlcmxheUNvdW50KCkpICYmICFtX2NvbXBvc2l0aW5nKQogICAgICAg
ICBlbmFibGVDb21wb3NpdGluZ01vZGUodHJ1ZSk7CiAKICAgICBpZiAoIW1fcmVldmFsdWF0ZUNv
bXBvc2l0aW5nQWZ0ZXJMYXlvdXQgJiYgIW1fY29tcG9zaXRpbmcpCkBAIC03NDgsNyArNzUwLDcg
QEAgdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJzKENv
bXBvc2l0aW5nVXBkYXRlVHlwZSB1cGRhdGUKIAogICAgICAgICAvLyBIb3N0IHRoZSBkb2N1bWVu
dCBsYXllciBpbiB0aGUgUmVuZGVyVmlldydzIHJvb3QgbGF5ZXIuCiAgICAgICAgIGlmIChpc0Z1
bGxVcGRhdGUpIHsKLSAgICAgICAgICAgIGFwcGVuZE92ZXJsYXlMYXllcnMoY2hpbGRMaXN0KTsK
KyAgICAgICAgICAgIGFwcGVuZERvY3VtZW50T3ZlcmxheUxheWVycyhjaGlsZExpc3QpOwogICAg
ICAgICAgICAgLy8gRXZlbiB3aGVuIGNoaWxkTGlzdCBpcyBlbXB0eSwgZG9uJ3QgZHJvcCBvdXQg
b2YgY29tcG9zaXRpbmcgbW9kZSBpZiB0aGVyZSBhcmUKICAgICAgICAgICAgIC8vIGNvbXBvc2l0
ZWQgbGF5ZXJzIHRoYXQgd2UgZGlkbid0IGhpdCBpbiBvdXIgdHJhdmVyc2FsIChlLmcuIGJlY2F1
c2Ugb2YgdmlzaWJpbGl0eTpoaWRkZW4pLgogICAgICAgICAgICAgaWYgKGNoaWxkTGlzdC5pc0Vt
cHR5KCkgJiYgIWhhc0FueUFkZGl0aW9uYWxDb21wb3NpdGVkTGF5ZXJzKCp1cGRhdGVSb290KSkK
QEAgLTc4NCwxNSArNzg2LDE4IEBAIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVD
b21wb3NpdGluZ0xheWVycyhDb21wb3NpdGluZ1VwZGF0ZVR5cGUgdXBkYXRlCiAgICAgSW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uOjpsYXllclRyZWVEaWRDaGFuZ2UocGFnZSgpKTsKIH0KIAotdm9p
ZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmFwcGVuZE92ZXJsYXlMYXllcnMoVmVjdG9yPEdyYXBo
aWNzTGF5ZXIqPiYgY2hpbGRMaXN0KQordm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmFwcGVu
ZERvY3VtZW50T3ZlcmxheUxheWVycyhWZWN0b3I8R3JhcGhpY3NMYXllcio+JiBjaGlsZExpc3Qp
CiB7CiAgICAgRnJhbWUmIGZyYW1lID0gbV9yZW5kZXJWaWV3LmZyYW1lVmlldygpLmZyYW1lKCk7
CisgICAgaWYgKCFmcmFtZS5pc01haW5GcmFtZSgpKQorICAgICAgICByZXR1cm47CisKICAgICBQ
YWdlKiBwYWdlID0gZnJhbWUucGFnZSgpOwogICAgIGlmICghcGFnZSkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgaWYgKEdyYXBoaWNzTGF5ZXIqIG92ZXJsYXlMYXllciA9IHBhZ2UtPmNocm9tZSgp
LmNsaWVudCgpLmRvY3VtZW50T3ZlcmxheUxheWVyRm9yRnJhbWUoZnJhbWUpKQotICAgICAgICBj
aGlsZExpc3QuYXBwZW5kKG92ZXJsYXlMYXllcik7CisgICAgcGFnZS0+cGFnZU92ZXJsYXlDb250
cm9sbGVyKCkud2lsbEF0dGFjaFJvb3RMYXllcigpOworICAgIGNoaWxkTGlzdC5hcHBlbmQoJnBh
Z2UtPnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLmRvY3VtZW50T3ZlcmxheVJvb3RMYXllcigpKTsK
IH0KIAogdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmxheWVyQmVjYW1lTm9uQ29tcG9zaXRl
ZChjb25zdCBSZW5kZXJMYXllciYgbGF5ZXIpCkBAIC0zMzY2LDYgKzMzNzEsMTAgQEAgdm9pZCBS
ZW5kZXJMYXllckNvbXBvc2l0b3I6OmF0dGFjaFJvb3RMYXllcihSb290TGF5ZXJBdHRhY2htZW50
IGF0dGFjaG1lbnQpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgICAgICBwYWdl
LT5jaHJvbWUoKS5jbGllbnQoKS5hdHRhY2hSb290R3JhcGhpY3NMYXllcigmZnJhbWUsIHJvb3RH
cmFwaGljc0xheWVyKCkpOworICAgICAgICAgICAgaWYgKGZyYW1lLmlzTWFpbkZyYW1lKCkpIHsK
KyAgICAgICAgICAgICAgICBwYWdlLT5wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKS53aWxsQXR0YWNo
Um9vdExheWVyKCk7CisgICAgICAgICAgICAgICAgcGFnZS0+Y2hyb21lKCkuY2xpZW50KCkuYXR0
YWNoVmlld092ZXJsYXlHcmFwaGljc0xheWVyKCZmcmFtZSwgJnBhZ2UtPnBhZ2VPdmVybGF5Q29u
dHJvbGxlcigpLnZpZXdPdmVybGF5Um9vdExheWVyKCkpOworICAgICAgICAgICAgfQogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBSb290TGF5ZXJBdHRhY2hlZFZp
YUVuY2xvc2luZ0ZyYW1lOiB7CkBAIC0zNDEwLDYgKzM0MTksOCBAQCB2b2lkIFJlbmRlckxheWVy
Q29tcG9zaXRvcjo6ZGV0YWNoUm9vdExheWVyKCkKICAgICAgICAgICAgIHJldHVybjsKIAogICAg
ICAgICBwYWdlLT5jaHJvbWUoKS5jbGllbnQoKS5hdHRhY2hSb290R3JhcGhpY3NMYXllcigmZnJh
bWUsIDApOworICAgICAgICBpZiAoZnJhbWUuaXNNYWluRnJhbWUoKSkKKyAgICAgICAgICAgIHBh
Z2UtPmNocm9tZSgpLmNsaWVudCgpLmF0dGFjaFZpZXdPdmVybGF5R3JhcGhpY3NMYXllcigmZnJh
bWUsIDApOwogICAgIH0KICAgICBicmVhazsKICAgICBjYXNlIFJvb3RMYXllclVuYXR0YWNoZWQ6
CkBAIC0zNDQ0LDggKzM0NTUsMTEgQEAgdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJvb3RM
YXllckF0dGFjaG1lbnRDaGFuZ2VkKCkKICAgICBpZiAoUmVuZGVyTGF5ZXJCYWNraW5nKiBiYWNr
aW5nID0gbGF5ZXIgPyBsYXllci0+YmFja2luZygpIDogbnVsbHB0cikKICAgICAgICAgYmFja2lu
Zy0+dXBkYXRlRHJhd3NDb250ZW50KCk7CiAKLSAgICBpZiAoR3JhcGhpY3NMYXllciogb3Zlcmxh
eUxheWVyID0gcGFnZS0+Y2hyb21lKCkuY2xpZW50KCkuZG9jdW1lbnRPdmVybGF5TGF5ZXJGb3JG
cmFtZShmcmFtZSkpCi0gICAgICAgIG1fcm9vdENvbnRlbnRMYXllci0+YWRkQ2hpbGQob3Zlcmxh
eUxheWVyKTsKKyAgICBpZiAoIWZyYW1lLmlzTWFpbkZyYW1lKCkpCisgICAgICAgIHJldHVybjsK
KworICAgIHBhZ2UtPnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLndpbGxBdHRhY2hSb290TGF5ZXIo
KTsKKyAgICBtX3Jvb3RDb250ZW50TGF5ZXItPmFkZENoaWxkKCZwYWdlLT5wYWdlT3ZlcmxheUNv
bnRyb2xsZXIoKS5kb2N1bWVudE92ZXJsYXlSb290TGF5ZXIoKSk7CiB9CiAKIC8vIElGcmFtZXMg
YXJlIHNwZWNpYWwsIGJlY2F1c2Ugd2UgaG9vayBjb21wb3NpdGluZyBsYXllcnMgdG9nZXRoZXIg
YWNyb3NzIGlmcmFtZSBib3VuZGFyaWVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgKaW5kZXggN2JkMjQwYS4uZDlhODc0YiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuaApAQCAtMzYy
LDcgKzM2Miw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBsYXllckhhczNEQ29udGVudChjb25zdCBS
ZW5kZXJMYXllciYpIGNvbnN0OwogICAgIGJvb2wgaXNSdW5uaW5nQWNjZWxlcmF0ZWRUcmFuc2Zv
cm1BbmltYXRpb24oUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCYpIGNvbnN0OwogCi0gICAgdm9pZCBh
cHBlbmRPdmVybGF5TGF5ZXJzKFZlY3RvcjxHcmFwaGljc0xheWVyKj4mKTsKKyAgICB2b2lkIGFw
cGVuZERvY3VtZW50T3ZlcmxheUxheWVycyhWZWN0b3I8R3JhcGhpY3NMYXllcio+Jik7CiAgICAg
Ym9vbCBoYXNBbnlBZGRpdGlvbmFsQ29tcG9zaXRlZExheWVycyhjb25zdCBSZW5kZXJMYXllciYg
cm9vdExheWVyKSBjb25zdDsKIAogICAgIHZvaWQgZW5zdXJlUm9vdExheWVyKCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaCBi
L1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oCmluZGV4
IDFkNDgyODEuLjcyNzBjZTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVT
dXBwb3J0L1dlYkNocm9tZUNsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVT
dXBwb3J0L1dlYkNocm9tZUNsaWVudC5oCkBAIC0xNjMsNiArMTYzLDcgQEAgcHVibGljOgogICAg
IHZpcnR1YWwgYm9vbCBzaG91bGRQYWludEVudGlyZUNvbnRlbnRzKCkgY29uc3Qgb3ZlcnJpZGU7
CiAKICAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoUm9vdEdyYXBoaWNzTGF5ZXIoV2ViQ29yZTo6RnJh
bWUqLCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lk
IGF0dGFjaFZpZXdPdmVybGF5R3JhcGhpY3NMYXllcihXZWJDb3JlOjpGcmFtZSosIFdlYkNvcmU6
OkdyYXBoaWNzTGF5ZXIqKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNPbmVT
aG90RHJhd2luZ1N5bmNocm9uaXphdGlvbigpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBz
Y2hlZHVsZUNvbXBvc2l0aW5nTGF5ZXJGbHVzaCgpIG92ZXJyaWRlOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQubW0gYi9Tb3Vy
Y2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQubW0KaW5kZXggZTFk
YzEwZC4uNDYwNjMxMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBv
cnQvV2ViQ2hyb21lQ2xpZW50Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBw
b3J0L1dlYkNocm9tZUNsaWVudC5tbQpAQCAtOTI0LDYgKzkyNCwxMSBAQCB2b2lkIFdlYkNocm9t
ZUNsaWVudDo6YXR0YWNoUm9vdEdyYXBoaWNzTGF5ZXIoRnJhbWUqIGZyYW1lLCBHcmFwaGljc0xh
eWVyKiBncmFwaAogICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiB9CiAKK3ZvaWQgV2Vi
Q2hyb21lQ2xpZW50OjphdHRhY2hWaWV3T3ZlcmxheUdyYXBoaWNzTGF5ZXIoRnJhbWUqLCBHcmFw
aGljc0xheWVyKikKK3sKKyAgICAvLyBGSVhNRTogSWYgd2Ugd2FudCB2aWV3LXJlbGF0aXZlIHBh
Z2Ugb3ZlcmxheXMgaW4gV2ViS2l0MSwgdGhpcyB3b3VsZCBiZSB0aGUgcGxhY2UgdG8gaG9vayB0
aGVtIHVwLgorfQorCiB2b2lkIFdlYkNocm9tZUNsaWVudDo6c2V0TmVlZHNPbmVTaG90RHJhd2lu
Z1N5bmNocm9uaXphdGlvbigpCiB7CiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV2ViS2l0
Mi9DTWFrZUxpc3RzLnR4dAppbmRleCA2YmRjNTlkLi40YTQ2NTQ1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9DTWFrZUxpc3Rz
LnR4dApAQCAtNTQzLDggKzU0Myw2IEBAIHNldChXZWJLaXQyX1NPVVJDRVMKICAgICBXZWJQcm9j
ZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuY3BwCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0xh
eWVyVHJlZUhvc3QuY3BwCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1BhZ2VCYW5uZXIuY3BwCi0g
ICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1BhZ2VPdmVybGF5LmNwcAotICAgIFdlYlByb2Nlc3MvV2Vi
UGFnZS9QYWdlT3ZlcmxheUNvbnRyb2xsZXIuY3BwCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1Rh
cEhpZ2hsaWdodENvbnRyb2xsZXIuY3BwCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkJhY2tG
b3J3YXJkTGlzdFByb3h5LmNwcAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJDb250ZXh0TWVu
dS5jcHAKQEAgLTU1NSw2ICs1NTMsNyBAQCBzZXQoV2ViS2l0Ml9TT1VSQ0VTCiAgICAgV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYk9wZW5QYW5lbFJlc3VsdExpc3RlbmVyLmNwcAogICAgIFdlYlByb2Nl
c3MvV2ViUGFnZS9XZWJQYWdlLmNwcAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlR3Jv
dXBQcm94eS5jcHAKKyAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZU92ZXJsYXkuY3BwCiAg
ICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1Zpc2l0ZWRMaW5rVGFibGVDb250cm9sbGVyLmNwcAogICAg
IFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJVbmRvU3RlcC5jcHAKICkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJL
aXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBkMGE5MmY5Li4yZDdl
YzNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKKysrIGIvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCkBAIC0zMDcsOCArMzA3LDYgQEAKIAkJMUE5MEMxRUUxMjY0RkQ1MDAwM0U0NEQ0IC8q
IFdlYkZpbmRPcHRpb25zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAxQTkwQzFFRDEyNjRGRDUwMDAzRTQ0RDQgLyogV2ViRmluZE9wdGlvbnMuaCAqLzsg
fTsKIAkJMUE5MEMxRjQxMjY0RkQ3MTAwM0U0NEQ0IC8qIEZpbmRDb250cm9sbGVyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTkwQzFGMjEyNjRGRDcx
MDAzRTQ0RDQgLyogRmluZENvbnRyb2xsZXIuaCAqLzsgfTsKIAkJMUE5MEMxRjUxMjY0RkQ3MTAw
M0U0NEQ0IC8qIEZpbmRDb250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDFBOTBDMUYzMTI2NEZENzEwMDNFNDRENCAvKiBGaW5kQ29udHJv
bGxlci5jcHAgKi87IH07Ci0JCTFBOTBDMjM3MTI2NTA3MTcwMDNFNDRENCAvKiBQYWdlT3Zlcmxh
eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE5MEMy
MzUxMjY1MDcxNzAwM0U0NEQ0IC8qIFBhZ2VPdmVybGF5LmggKi87IH07Ci0JCTFBOTBDMjM4MTI2
NTA3MTcwMDNFNDRENCAvKiBQYWdlT3ZlcmxheS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTkwQzIzNjEyNjUwNzE3MDAzRTQ0RDQgLyogUGFnZU92
ZXJsYXkuY3BwICovOyB9OwogCQkxQTkxMDA3MTEyNjY3NUM0MDAxODQyRjUgLyogRmluZEluZGlj
YXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE5
MTAwNkYxMjY2NzVDMzAwMTg0MkY1IC8qIEZpbmRJbmRpY2F0b3IuaCAqLzsgfTsKIAkJMUE5MTAw
NzIxMjY2NzVDNDAwMTg0MkY1IC8qIEZpbmRJbmRpY2F0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE5MTAwNzAxMjY2NzVDNDAwMTg0MkY1IC8q
IEZpbmRJbmRpY2F0b3IuY3BwICovOyB9OwogCQkxQTkyREMxMTEyRjhCQTQ2MDAxN0FGNjUgLyog
TGF5ZXJUcmVlQ29udGV4dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMUE5MkRDMTAxMkY4QkE0NjAwMTdBRjY1IC8qIExheWVyVHJlZUNvbnRleHQuaCAq
LzsgfTsKQEAgLTU2OCw4ICs1NjYsNiBAQAogCQkyOUQ1NURGMjE2MUJGOUYxMDAzMUEyRTMgLyog
V2ViUGFnZUdyb3VwUHJveHlNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMjlENTVERjAxNjFCRjlGMTAwMzFBMkUzIC8qIFdlYlBhZ2VHcm91
cFByb3h5TWVzc2FnZXMuaCAqLzsgfTsKIAkJMkQxMjVDNUUxODU3RUEwNTAwM0JBM0NCIC8qIFZp
ZXdHZXN0dXJlQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMkQxMjVDNUMxODU3RUEwNTAwM0JBM0NCIC8qIFZpZXdHZXN0dXJlQ29udHJv
bGxlci5oICovOyB9OwogCQkyRDEyNUM1RjE4NTdFQTA1MDAzQkEzQ0IgLyogVmlld0dlc3R1cmVD
b250cm9sbGVyTWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMkQxMjVDNUQxODU3RUEwNTAwM0JBM0NCIC8qIFZpZXdHZXN0dXJlQ29udHJvbGxlck1h
Yy5tbSAqLzsgfTsKLQkJMkQxNDBFQUYxOEYzN0JFMDAwNUU3NUEwIC8qIFBhZ2VPdmVybGF5Q29u
dHJvbGxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAyRDE0MEVBRDE4RjM3QkUwMDA1RTc1QTAgLyogUGFnZU92ZXJsYXlDb250cm9sbGVyLmNwcCAq
LzsgfTsKLQkJMkQxNDBFQjAxOEYzN0JFMDAwNUU3NUEwIC8qIFBhZ2VPdmVybGF5Q29udHJvbGxl
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkQxNDBF
QUUxOEYzN0JFMDAwNUU3NUEwIC8qIFBhZ2VPdmVybGF5Q29udHJvbGxlci5oICovOyB9OwogCQky
RDFCNUQ1RDE4NTg2OUM4MDA2QzY1OTYgLyogVmlld0dlc3R1cmVDb250cm9sbGVyTWVzc2FnZVJl
Y2VpdmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDJEMUI1RDVCMTg1ODY5QzgwMDZDNjU5NiAvKiBWaWV3R2VzdHVyZUNvbnRyb2xsZXJNZXNzYWdl
UmVjZWl2ZXIuY3BwICovOyB9OwogCQkyRDFCNUQ1RTE4NTg2OUM4MDA2QzY1OTYgLyogVmlld0dl
c3R1cmVDb250cm9sbGVyTWVzc2FnZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDJEMUI1RDVDMTg1ODY5QzgwMDZDNjU5NiAvKiBWaWV3R2VzdHVyZUNv
bnRyb2xsZXJNZXNzYWdlcy5oICovOyB9OwogCQkyRDI4RjNFNDE4ODVDQ0MxMDA0QjlFQUUgLyog
V2ViQ2hyb21lQ2xpZW50SU9TLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMkQyOEYzRTAxODg1Q0NDMTAwNEI5RUFFIC8qIFdlYkNocm9tZUNsaWVudElP
Uy5tbSAqLzsgfTsKQEAgLTU4Niw2ICs1ODIsOCBAQAogCQkyRDQyOUJGRDE3MjFFMkM3MDBFQzY4
MUYgLyogUERGUGx1Z2luUGFzc3dvcmRGaWVsZC5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJENDI5QkZCMTcyMUUyQkEwMEVDNjgxRiAvKiBQREZQbHVn
aW5QYXNzd29yZEZpZWxkLm1tICovOyB9OwogCQkyRDQ3QjU2QzE4MTA3MTRFMDAzQTNBRUUgLyog
UmVtb3RlTGF5ZXJCYWNraW5nU3RvcmUubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAyRDQ3QjU2QTE4MTA3MTRFMDAzQTNBRUUgLyogUmVtb3RlTGF5ZXJC
YWNraW5nU3RvcmUubW0gKi87IH07CiAJCTJENDdCNTZEMTgxMDcxNEUwMDNBM0FFRSAvKiBSZW1v
dGVMYXllckJhY2tpbmdTdG9yZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMkQ0N0I1NkIxODEwNzE0RTAwM0EzQUVFIC8qIFJlbW90ZUxheWVyQmFja2lu
Z1N0b3JlLmggKi87IH07CisJCTJENUM5RDA1MTlDODFEOEYwMEIzQzVDMSAvKiBXZWJQYWdlT3Zl
cmxheS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAy
RDVDOUQwMzE5QzgxRDhGMDBCM0M1QzEgLyogV2ViUGFnZU92ZXJsYXkuY3BwICovOyB9OworCQky
RDVDOUQwNjE5QzgxRDhGMDBCM0M1QzEgLyogV2ViUGFnZU92ZXJsYXkuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJENUM5RDA0MTlDODFEOEYwMEIzQzVD
MSAvKiBXZWJQYWdlT3ZlcmxheS5oICovOyB9OwogCQkyRDZBQjU0MTE5MkIxQzRBMDAzQTlGRDEg
LyogV0tQREZQYWdlTnVtYmVySW5kaWNhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAyRDZBQjUzRjE5MkIxQzRBMDAzQTlGRDEgLyogV0tQREZQYWdl
TnVtYmVySW5kaWNhdG9yLmggKi87IH07CiAJCTJENkFCNTQyMTkyQjFDNEEwMDNBOUZEMSAvKiBX
S1BERlBhZ2VOdW1iZXJJbmRpY2F0b3IubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAyRDZBQjU0MDE5MkIxQzRBMDAzQTlGRDEgLyogV0tQREZQYWdlTnVt
YmVySW5kaWNhdG9yLm1tICovOyB9OwogCQkyRDZCMzcxQjE4QTk2N0FEMDA0MkFFODAgLyogX1dL
VGh1bWJuYWlsVmlldy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMkQ2QjM3MTkxOEE5NjdBRDAwNDJBRTgwIC8qIF9XS1RodW1ibmFpbFZpZXcuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMjI3MSw4ICsy
MjY5LDYgQEAKIAkJMUE5MEMxRUQxMjY0RkQ1MDAwM0U0NEQ0IC8qIFdlYkZpbmRPcHRpb25zLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkZpbmRPcHRpb25zLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBOTBDMUYyMTI2NEZENzEwMDNFNDRENCAvKiBGaW5k
Q29udHJvbGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGaW5kQ29udHJv
bGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQTkwQzFGMzEyNjRGRDcxMDAz
RTQ0RDQgLyogRmluZENvbnRyb2xsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gRmluZENvbnRyb2xsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQkxQTkwQzIzNTEyNjUwNzE3MDAzRTQ0RDQgLyogUGFnZU92ZXJsYXkuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gUGFnZU92ZXJsYXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJMUE5MEMyMzYxMjY1MDcxNzAwM0U0NEQ0IC8qIFBhZ2VPdmVybGF5LmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBhZ2VPdmVybGF5LmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUE5MTAwNkYxMjY2NzVDMzAwMTg0MkY1IC8qIEZpbmRJ
bmRpY2F0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmluZEluZGljYXRv
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQTkxMDA3MDEyNjY3NUM0MDAxODQy
RjUgLyogRmluZEluZGljYXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBGaW5kSW5kaWNhdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUE5
MkRDMTAxMkY4QkE0NjAwMTdBRjY1IC8qIExheWVyVHJlZUNvbnRleHQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gTGF5ZXJUcmVlQ29udGV4dC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtMjU1OCw4ICsyNTU0LDYgQEAKIAkJMjlENTVERjAxNjFCRjlGMTAwMzFB
MkUzIC8qIFdlYlBhZ2VHcm91cFByb3h5TWVzc2FnZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gV2ViUGFnZUdyb3VwUHJveHlNZXNzYWdlcy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkyRDEyNUM1QzE4NTdFQTA1MDAzQkEzQ0IgLyogVmlld0dlc3R1cmVDb250
cm9sbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZpZXdHZXN0dXJlQ29u
dHJvbGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyRDEyNUM1RDE4NTdFQTA1
MDAzQkEzQ0IgLyogVmlld0dlc3R1cmVDb250cm9sbGVyTWFjLm1tICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAub2JqY3BwOyBwYXRoID0gVmlld0dlc3R1cmVDb250cm9sbGVyTWFjLm1tOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkyRDE0MEVBRDE4RjM3QkUwMDA1RTc1QTAgLyogUGFn
ZU92ZXJsYXlDb250cm9sbGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFBhZ2VPdmVybGF5Q29udHJvbGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCTJEMTQwRUFFMThGMzdCRTAwMDVFNzVBMCAvKiBQYWdlT3ZlcmxheUNvbnRyb2xsZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGFnZU92ZXJsYXlDb250cm9sbGVyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJEMUI1RDVBMTg1ODY1OTkwMDZDNjU5NiAv
KiBWaWV3R2VzdHVyZUNvbnRyb2xsZXIubWVzc2FnZXMuaW4gKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gVmlld0dlc3R1cmVDb250
cm9sbGVyLm1lc3NhZ2VzLmluOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyRDFCNUQ1
QjE4NTg2OUM4MDA2QzY1OTYgLyogVmlld0dlc3R1cmVDb250cm9sbGVyTWVzc2FnZVJlY2VpdmVy
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFZpZXdHZXN0dXJlQ29u
dHJvbGxlck1lc3NhZ2VSZWNlaXZlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTJEMUI1RDVDMTg1ODY5QzgwMDZDNjU5NiAvKiBWaWV3R2VzdHVyZUNvbnRyb2xsZXJNZXNzYWdl
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWaWV3R2VzdHVyZUNvbnRyb2xs
ZXJNZXNzYWdlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjU4Miw2ICsyNTc2
LDggQEAKIAkJMkQ0MjlCRkIxNzIxRTJCQTAwRUM2ODFGIC8qIFBERlBsdWdpblBhc3N3b3JkRmll
bGQubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBQREZQbHVnaW5Q
YXNzd29yZEZpZWxkLm1tOyBwYXRoID0gUERGL1BERlBsdWdpblBhc3N3b3JkRmllbGQubW07IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJENDdCNTZBMTgxMDcxNEUwMDNBM0FFRSAvKiBS
ZW1vdGVMYXllckJhY2tpbmdTdG9yZS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNw
cDsgcGF0aCA9IFJlbW90ZUxheWVyQmFja2luZ1N0b3JlLm1tOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkyRDQ3QjU2QjE4MTA3MTRFMDAzQTNBRUUgLyogUmVtb3RlTGF5ZXJCYWNraW5n
U3RvcmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVtb3RlTGF5ZXJCYWNr
aW5nU3RvcmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMkQ1QzlEMDMxOUM4MUQ4
RjAwQjNDNUMxIC8qIFdlYlBhZ2VPdmVybGF5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFdlYlBhZ2VPdmVybGF5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMkQ1QzlEMDQxOUM4MUQ4RjAwQjNDNUMxIC8qIFdlYlBhZ2VPdmVybGF5LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlBhZ2VPdmVybGF5Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTJENkFCNTNGMTkyQjFDNEEwMDNBOUZEMSAvKiBXS1BERlBhZ2VO
dW1iZXJJbmRpY2F0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV0tQREZQ
YWdlTnVtYmVySW5kaWNhdG9yLmg7IHBhdGggPSBpb3MvV0tQREZQYWdlTnVtYmVySW5kaWNhdG9y
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJENkFCNTQwMTkyQjFDNEEwMDNBOUZE
MSAvKiBXS1BERlBhZ2VOdW1iZXJJbmRpY2F0b3IubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5vYmpjcHA7IG5hbWUgPSBXS1BERlBhZ2VOdW1iZXJJbmRpY2F0b3IubW07IHBhdGggPSBpb3Mv
V0tQREZQYWdlTnVtYmVySW5kaWNhdG9yLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkyRDZCMzcxOTE4QTk2N0FEMDA0MkFFODAgLyogX1dLVGh1bWJuYWlsVmlldy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBfV0tUaHVtYm5haWxWaWV3Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC01NzAxLDEwICs1Njk3LDggQEAKIAkJCQkxQTkwQzFGMjEyNjRG
RDcxMDAzRTQ0RDQgLyogRmluZENvbnRyb2xsZXIuaCAqLywKIAkJCQk3QzM4NzQzMzE3MkY1NjE1
MDAxQkQ4OEEgLyogUGFnZUJhbm5lci5jcHAgKi8sCiAJCQkJN0NGNDdGRjkxNzI3NUM1NzAwOEFD
QjkxIC8qIFBhZ2VCYW5uZXIuaCAqLywKLQkJCQkxQTkwQzIzNjEyNjUwNzE3MDAzRTQ0RDQgLyog
UGFnZU92ZXJsYXkuY3BwICovLAotCQkJCTFBOTBDMjM1MTI2NTA3MTcwMDNFNDRENCAvKiBQYWdl
T3ZlcmxheS5oICovLAotCQkJCTJEMTQwRUFEMThGMzdCRTAwMDVFNzVBMCAvKiBQYWdlT3Zlcmxh
eUNvbnRyb2xsZXIuY3BwICovLAotCQkJCTJEMTQwRUFFMThGMzdCRTAwMDVFNzVBMCAvKiBQYWdl
T3ZlcmxheUNvbnRyb2xsZXIuaCAqLywKKwkJCQkyRDVDOUQwMzE5QzgxRDhGMDBCM0M1QzEgLyog
V2ViUGFnZU92ZXJsYXkuY3BwICovLAorCQkJCTJENUM5RDA0MTlDODFEOEYwMEIzQzVDMSAvKiBX
ZWJQYWdlT3ZlcmxheS5oICovLAogCQkJCTUxOTJENTcxMTk2MUZBMkYwMENEMTlBQSAvKiBTZXJ2
aWNlc092ZXJsYXlDb250cm9sbGVyLmggKi8sCiAJCQkJMkQ4MTlCOTkxODYyNzVCMzAwMUYwM0Qx
IC8qIFZpZXdHZXN0dXJlR2VvbWV0cnlDb2xsZWN0b3IuY3BwICovLAogCQkJCTJEODE5QjlBMTg2
Mjc1QjMwMDFGMDNEMSAvKiBWaWV3R2VzdHVyZUdlb21ldHJ5Q29sbGVjdG9yLmggKi8sCkBAIC03
MDQ2LDYgKzcwNDAsNyBAQAogCQkJCTdDODVGRDgwMTkzNDE2NjUwMDAxNzdDNCAvKiBXZWJQcmVm
ZXJlbmNlc0tleXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxMkY1ODk3MTJBODgzODgwMDYyOTUz
MCAvKiBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZVByb3h5LmggaW4gSGVhZGVycyAqLywKIAkJCQkx
QTQ0NUI5RjE4NEQ1RkI1MDA0QjM0MTQgLyogV0tDb250ZXh0SW5qZWN0ZWRCdW5kbGVDbGllbnQu
aCBpbiBIZWFkZXJzICovLAorCQkJCTJENUM5RDA2MTlDODFEOEYwMEIzQzVDMSAvKiBXZWJQYWdl
T3ZlcmxheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTEyRjU4OTkxMkE4ODM4ODAwNjI5NTMwIC8q
IEF1dGhlbnRpY2F0aW9uRGVjaXNpb25MaXN0ZW5lci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE4
RThFRjkxNkIyMDkxQzAwRTkxNDI5IC8qIEF1dGhlbnRpY2F0aW9uTWFuYWdlci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNTEyRjU4QTMxMkE4ODNBRDAwNjI5NTMwIC8qIEF1dGhlbnRpY2F0aW9uTWFu
YWdlck1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLywKQEAgLTcxNTMsNyArNzE0OCw2IEBACiAJCQkJ
MUFFNTJGOTIxOTIwMURBNzAwQTFGQTM3IC8qIEFQSUNvbnRleHRDb25maWd1cmF0aW9uLmggaW4g
SGVhZGVycyAqLywKIAkJCQk3QzM2MUQ3MzE5MjdGQTM2MDAzNkE1OUQgLyogV2ViU2NyaXB0TWVz
c2FnZUhhbmRsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUUxMDVGRTU0MThEN0I5REUwMDhGNTdB
OCAvKiBFZGl0aW5nUmFuZ2UuaCBpbiBIZWFkZXJzICovLAotCQkJCTJEMTQwRUIwMThGMzdCRTAw
MDVFNzVBMCAvKiBQYWdlT3ZlcmxheUNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJD
MTc3NTNGMTE4QkFCRjAwMDdEOUU5QSAvKiBHZW5lcmljQ2FsbGJhY2suaCBpbiBIZWFkZXJzICov
LAogCQkJCTM3OUE4NzM2MThCQkZBNDMwMDU4OEFGMiAvKiBfV0tBY3RpdmF0ZWRFbGVtZW50SW5m
b0ludGVybmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzA2RjQyRjEyREJCOUI2MDAyRDc4REUg
LyogR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXIuaCBpbiBIZWFkZXJzICovLApA
QCAtNzI3Niw3ICs3MjcwLDYgQEAKIAkJCQkxQTVCMUM1MTE4OTg2MDZGMDA0RkNGOUIgLyogV0tO
YXZpZ2F0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk3Q0Y0N0ZGQjE3Mjc1QzU3MDA4QUNCOTEg
LyogUGFnZUJhbm5lci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM2RURBQTYxMTEyNzFDNjAwRTc2
NzhCIC8qIFBhZ2VDbGllbnQuaCBpbiBIZWFkZXJzICovLAotCQkJCTFBOTBDMjM3MTI2NTA3MTcw
MDNFNDRENCAvKiBQYWdlT3ZlcmxheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzU3NEE1ODExMkU2
NjY4MTAwMkRGRTk4IC8qIFBhc3RlYm9hcmRUeXBlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTE5
NTgyRDMxNTNDQkZENzAwQjYwODc1IC8qIFBERktpdEltcG9ydHMuaCBpbiBIZWFkZXJzICovLAog
CQkJCTFBRTAwRDRGMTgyRDZGNTAwMDA4N0RENyAvKiBXS0Jyb3dzaW5nQ29udGV4dEhhbmRsZUlu
dGVybmFsLmggaW4gSGVhZGVycyAqLywKQEAgLTg5MjgsNyArODkyMSw2IEBACiAJCQkJNTFFMzUx
RjUxODBGNUM3NTAwRTUzQkU5IC8qIFdlYklEQkZhY3RvcnlCYWNrZW5kLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTdDMzg3NDM0MTcyRjU2MTUwMDFCRDg4QSAvKiBQYWdlQmFubmVyLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTdDNkQzN0ZDMTcyRjU1NUYwMDlEMjg0NyAvKiBQYWdlQmFubmVyTWFj
Lm1tIGluIFNvdXJjZXMgKi8sCi0JCQkJMUE5MEMyMzgxMjY1MDcxNzAwM0U0NEQ0IC8qIFBhZ2VP
dmVybGF5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUM1NzRBNTgyMTJFNjY2ODEwMDJERkU5OCAv
KiBQYXN0ZWJvYXJkVHlwZXMubW0gaW4gU291cmNlcyAqLywKIAkJCQlFMTk1ODJENjE1M0NDMDU0
MDBCNjA4NzUgLyogUERGS2l0SW1wb3J0cy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTJEODcwRDEw
MTYyMzRGRkUwMDBBM0YyMCAvKiBQREZQbHVnaW4ubW0gaW4gU291cmNlcyAqLywKQEAgLTkxMjgs
NyArOTEyMCw2IEBACiAJCQkJQTU0MjkzQTUxOTVBNDNERDAwMjc4MkM3IC8qIFdLSW5zcGVjdG9y
Tm9kZVNlYXJjaEdlc3R1cmVSZWNvZ25pemVyLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQzAzMzdE
QUUxMjdBMjRGRTAwOEZGNEY0IC8qIFdlYkV2ZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJD
MDMyREJBMTBGNDM4MEYwMDU4QzE1QSAvKiBXZWJFdmVudENvbnZlcnNpb24uY3BwIGluIFNvdXJj
ZXMgKi8sCi0JCQkJMkQxNDBFQUYxOEYzN0JFMDAwNUU3NUEwIC8qIFBhZ2VPdmVybGF5Q29udHJv
bGxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzExMUI1RTExMkY2Mjk4MDAzMzdCQUIgLyog
V2ViRXZlbnRGYWN0b3J5Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQTExOEE5RUUxOTA3QUQ2RjAw
RjdDOTJCIC8qIFF1aWNrTG9va0RvY3VtZW50RGF0YS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkx
QTNERDFGRDEyNUU1OUYzMDA0NTE1RTYgLyogV2ViRmluZENsaWVudC5jcHAgaW4gU291cmNlcyAq
LywKQEAgLTkyMTIsNiArOTIwMyw3IEBACiAJCQkJQzA2QzYwOTUxMjRDMTQ0QjAwMDE2ODJGIC8q
IFdlYlBhZ2VDcmVhdGlvblBhcmFtZXRlcnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQzU5QzRB
NTgxOEI4MTE3NDAwN0JEQ0I2IC8qIEFzc2lzdGVkTm9kZUluZm9ybWF0aW9uLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUJDN0I2MjA3MTI5QTBBNjcwMEQxNzRBNCAvKiBXZWJQYWdlR3JvdXAuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJMkQ1QzlEMDUxOUM4MUQ4RjAwQjNDNUMxIC8qIFdlYlBhZ2VP
dmVybGF5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDN0I2MjUzMTJBNDNDOTYwMEQxNzRBNCAv
KiBXZWJQYWdlR3JvdXBEYXRhLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDN0I2MjE2MTJBNDIx
OUEwMEQxNzRBNCAvKiBXZWJQYWdlR3JvdXBQcm94eS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQky
OUQ1NURGMTE2MUJGOUYxMDAzMUEyRTMgLyogV2ViUGFnZUdyb3VwUHJveHlNZXNzYWdlUmVjZWl2
ZXIuY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlQVBJQ2FzdC5oIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZUFQSUNhc3QuaAppbmRl
eCBlNjM1NDA4Li4wZDViN2M3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlQVBJQ2FzdC5oCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVBUElDYXN0LmgKQEAg
LTQ5LDExICs0OSwxMSBAQCBjbGFzcyBJbmplY3RlZEJ1bmRsZU5vZGVIYW5kbGU7CiBjbGFzcyBJ
bmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlOwogY2xhc3MgSW5qZWN0ZWRCdW5kbGVTY3JpcHRXb3Js
ZDsKIGNsYXNzIFBhZ2VCYW5uZXI7Ci1jbGFzcyBQYWdlT3ZlcmxheTsKIGNsYXNzIFdlYkZyYW1l
OwogY2xhc3MgV2ViSW5zcGVjdG9yOwogY2xhc3MgV2ViUGFnZTsKIGNsYXNzIFdlYlBhZ2VHcm91
cFByb3h5OworY2xhc3MgV2ViUGFnZU92ZXJsYXk7CiAKIFdLX0FERF9BUElfTUFQUElORyhXS0J1
bmRsZUJhY2tGb3J3YXJkTGlzdEl0ZW1SZWYsIEluamVjdGVkQnVuZGxlQmFja0ZvcndhcmRMaXN0
SXRlbSkKIFdLX0FERF9BUElfTUFQUElORyhXS0J1bmRsZUJhY2tGb3J3YXJkTGlzdFJlZiwgSW5q
ZWN0ZWRCdW5kbGVCYWNrRm9yd2FyZExpc3QpCkBAIC02Niw3ICs2Niw3IEBAIFdLX0FERF9BUElf
TUFQUElORyhXS0J1bmRsZU5hdmlnYXRpb25BY3Rpb25SZWYsIEluamVjdGVkQnVuZGxlTmF2aWdh
dGlvbkFjdGlvbikKIFdLX0FERF9BUElfTUFQUElORyhXS0J1bmRsZU5vZGVIYW5kbGVSZWYsIElu
amVjdGVkQnVuZGxlTm9kZUhhbmRsZSkKIFdLX0FERF9BUElfTUFQUElORyhXS0J1bmRsZVBhZ2VC
YW5uZXJSZWYsIFBhZ2VCYW5uZXIpCiBXS19BRERfQVBJX01BUFBJTkcoV0tCdW5kbGVQYWdlR3Jv
dXBSZWYsIFdlYlBhZ2VHcm91cFByb3h5KQotV0tfQUREX0FQSV9NQVBQSU5HKFdLQnVuZGxlUGFn
ZU92ZXJsYXlSZWYsIFBhZ2VPdmVybGF5KQorV0tfQUREX0FQSV9NQVBQSU5HKFdLQnVuZGxlUGFn
ZU92ZXJsYXlSZWYsIFdlYlBhZ2VPdmVybGF5KQogV0tfQUREX0FQSV9NQVBQSU5HKFdLQnVuZGxl
UGFnZVJlZiwgV2ViUGFnZSkKIFdLX0FERF9BUElfTUFQUElORyhXS0J1bmRsZVJhbmdlSGFuZGxl
UmVmLCBJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlKQogV0tfQUREX0FQSV9NQVBQSU5HKFdLQnVu
ZGxlUmVmLCBJbmplY3RlZEJ1bmRsZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVQYWdlLmNwcCBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVQYWdlLmNwcAppbmRl
eCAyMTE0ZjU4Li4yOTQwNWI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlUGFnZS5jcHAKKysrIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZVBhZ2UuY3BwCkBAIC00
NywxMiArNDcsMTUgQEAKICNpbmNsdWRlICJXZWJGdWxsU2NyZWVuTWFuYWdlci5oIgogI2luY2x1
ZGUgIldlYkltYWdlLmgiCiAjaW5jbHVkZSAiV2ViUGFnZS5oIgorI2luY2x1ZGUgIldlYlBhZ2VP
dmVybGF5LmgiCiAjaW5jbHVkZSAiV2ViUmVuZGVyTGF5ZXIuaCIKICNpbmNsdWRlICJXZWJSZW5k
ZXJPYmplY3QuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0FYT2JqZWN0Q2FjaGUuaD4KICNpbmNsdWRl
IDxXZWJDb3JlL0FjY2Vzc2liaWxpdHlPYmplY3QuaD4KICNpbmNsdWRlIDxXZWJDb3JlL01haW5G
cmFtZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUGFnZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUGFn
ZU92ZXJsYXkuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1BhZ2VPdmVybGF5Q29udHJvbGxlci5oPgog
I2luY2x1ZGUgPFdlYkNvcmUvVVJMLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgog
CkBAIC0zNTQsMjIgKzM1NywyMiBAQCBXS0J1bmRsZUJhY2tGb3J3YXJkTGlzdFJlZiBXS0J1bmRs
ZVBhZ2VHZXRCYWNrRm9yd2FyZExpc3QoV0tCdW5kbGVQYWdlUmVmIHBhZ2VSZQogCiB2b2lkIFdL
QnVuZGxlUGFnZUluc3RhbGxQYWdlT3ZlcmxheShXS0J1bmRsZVBhZ2VSZWYgcGFnZVJlZiwgV0tC
dW5kbGVQYWdlT3ZlcmxheVJlZiBwYWdlT3ZlcmxheVJlZikKIHsKLSAgICB0b0ltcGwocGFnZVJl
ZiktPmluc3RhbGxQYWdlT3ZlcmxheSh0b0ltcGwocGFnZU92ZXJsYXlSZWYpKTsKKyAgICB0b0lt
cGwocGFnZVJlZiktPmNvcmVQYWdlKCktPnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLmluc3RhbGxQ
YWdlT3ZlcmxheSh0b0ltcGwocGFnZU92ZXJsYXlSZWYpLT5jb3JlT3ZlcmxheSgpLCBXZWJDb3Jl
OjpQYWdlT3ZlcmxheTo6RmFkZU1vZGU6OkRvTm90RmFkZSk7CiB9CiAKIHZvaWQgV0tCdW5kbGVQ
YWdlVW5pbnN0YWxsUGFnZU92ZXJsYXkoV0tCdW5kbGVQYWdlUmVmIHBhZ2VSZWYsIFdLQnVuZGxl
UGFnZU92ZXJsYXlSZWYgcGFnZU92ZXJsYXlSZWYpCiB7Ci0gICAgdG9JbXBsKHBhZ2VSZWYpLT51
bmluc3RhbGxQYWdlT3ZlcmxheSh0b0ltcGwocGFnZU92ZXJsYXlSZWYpKTsKKyAgICB0b0ltcGwo
cGFnZVJlZiktPmNvcmVQYWdlKCktPnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLnVuaW5zdGFsbFBh
Z2VPdmVybGF5KHRvSW1wbChwYWdlT3ZlcmxheVJlZiktPmNvcmVPdmVybGF5KCksIFdlYkNvcmU6
OlBhZ2VPdmVybGF5OjpGYWRlTW9kZTo6RG9Ob3RGYWRlKTsKIH0KIAogdm9pZCBXS0J1bmRsZVBh
Z2VJbnN0YWxsUGFnZU92ZXJsYXlXaXRoQW5pbWF0aW9uKFdLQnVuZGxlUGFnZVJlZiBwYWdlUmVm
LCBXS0J1bmRsZVBhZ2VPdmVybGF5UmVmIHBhZ2VPdmVybGF5UmVmKQogewotICAgIHRvSW1wbChw
YWdlUmVmKS0+aW5zdGFsbFBhZ2VPdmVybGF5KHRvSW1wbChwYWdlT3ZlcmxheVJlZiksIFBhZ2VP
dmVybGF5OjpGYWRlTW9kZTo6RmFkZSk7CisgICAgdG9JbXBsKHBhZ2VSZWYpLT5jb3JlUGFnZSgp
LT5wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKS5pbnN0YWxsUGFnZU92ZXJsYXkodG9JbXBsKHBhZ2VP
dmVybGF5UmVmKS0+Y29yZU92ZXJsYXkoKSwgV2ViQ29yZTo6UGFnZU92ZXJsYXk6OkZhZGVNb2Rl
OjpGYWRlKTsKIH0KIAogdm9pZCBXS0J1bmRsZVBhZ2VVbmluc3RhbGxQYWdlT3ZlcmxheVdpdGhB
bmltYXRpb24oV0tCdW5kbGVQYWdlUmVmIHBhZ2VSZWYsIFdLQnVuZGxlUGFnZU92ZXJsYXlSZWYg
cGFnZU92ZXJsYXlSZWYpCiB7Ci0gICAgdG9JbXBsKHBhZ2VSZWYpLT51bmluc3RhbGxQYWdlT3Zl
cmxheSh0b0ltcGwocGFnZU92ZXJsYXlSZWYpLCBQYWdlT3ZlcmxheTo6RmFkZU1vZGU6OkZhZGUp
OworICAgIHRvSW1wbChwYWdlUmVmKS0+Y29yZVBhZ2UoKS0+cGFnZU92ZXJsYXlDb250cm9sbGVy
KCkudW5pbnN0YWxsUGFnZU92ZXJsYXkodG9JbXBsKHBhZ2VPdmVybGF5UmVmKS0+Y29yZU92ZXJs
YXkoKSwgV2ViQ29yZTo6UGFnZU92ZXJsYXk6OkZhZGVNb2RlOjpGYWRlKTsKIH0KIAogdm9pZCBX
S0J1bmRsZVBhZ2VTZXRUb3BPdmVyaGFuZ0ltYWdlKFdLQnVuZGxlUGFnZVJlZiBwYWdlUmVmLCBX
S0ltYWdlUmVmIGltYWdlUmVmKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZVBhZ2VPdmVybGF5LmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVQYWdlT3Zlcmxh
eS5jcHAKaW5kZXggYmJhODYyNi4uNDE0MjBiMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZVBhZ2VPdmVybGF5LmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVu
ZGxlUGFnZU92ZXJsYXkuY3BwCkBAIC0yNywxMCArMjcsMTcgQEAKICNpbmNsdWRlICJXS0J1bmRs
ZVBhZ2VPdmVybGF5LmgiCiAKICNpbmNsdWRlICJBUElDbGllbnQuaCIKLSNpbmNsdWRlICJQYWdl
T3ZlcmxheS5oIgogI2luY2x1ZGUgIldLQVBJQ2FzdC5oIgorI2luY2x1ZGUgIldLQXJyYXkuaCIK
ICNpbmNsdWRlICJXS0J1bmRsZUFQSUNhc3QuaCIKKyNpbmNsdWRlICJXS051bWJlci5oIgorI2lu
Y2x1ZGUgIldLUmV0YWluUHRyLmgiCisjaW5jbHVkZSAiV0tTaGFyZWRBUElDYXN0LmgiCisjaW5j
bHVkZSAiV0tTdHJpbmdQcml2YXRlLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRl
eHQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1BhZ2VPdmVybGF5Lmg+CisjaW5jbHVkZSA8V2ViQ29y
ZS9QbGF0Zm9ybU1vdXNlRXZlbnQuaD4KKyNpbmNsdWRlIDxXZWJLaXQvV2ViUGFnZU92ZXJsYXku
aD4KIAogbmFtZXNwYWNlIEFQSSB7CiAKQEAgLTQ3LDcgKzU0LDcgQEAgdGVtcGxhdGU8PiBzdHJ1
Y3QgQ2xpZW50VHJhaXRzPFdLQnVuZGxlUGFnZU92ZXJsYXlBY2Nlc3NpYmlsaXR5Q2xpZW50QmFz
ZT4gewogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiB1c2luZyBuYW1lc3BhY2UgV2ViS2l0Owog
Ci1jbGFzcyBQYWdlT3ZlcmxheUNsaWVudEltcGwgOiBBUEk6OkNsaWVudDxXS0J1bmRsZVBhZ2VP
dmVybGF5Q2xpZW50QmFzZT4sIHB1YmxpYyBQYWdlT3ZlcmxheTo6Q2xpZW50IHsKK2NsYXNzIFBh
Z2VPdmVybGF5Q2xpZW50SW1wbCA6IEFQSTo6Q2xpZW50PFdLQnVuZGxlUGFnZU92ZXJsYXlDbGll
bnRCYXNlPiwgcHVibGljIFdlYlBhZ2VPdmVybGF5OjpDbGllbnQgewogcHVibGljOgogICAgIGV4
cGxpY2l0IFBhZ2VPdmVybGF5Q2xpZW50SW1wbChXS0J1bmRsZVBhZ2VPdmVybGF5Q2xpZW50QmFz
ZSogY2xpZW50KQogICAgIHsKQEAgLTYwLDY0ICs2Nyw2NCBAQCBwdWJsaWM6CiAgICAgfQogCiBw
cml2YXRlOgotICAgIC8vIFBhZ2VPdmVybGF5OjpDbGllbnQuCi0gICAgdmlydHVhbCB2b2lkIHBh
Z2VPdmVybGF5RGVzdHJveWVkKFBhZ2VPdmVybGF5KikKKyAgICAvLyBXZWJQYWdlT3ZlcmxheTo6
Q2xpZW50LgorICAgIHZpcnR1YWwgdm9pZCBwYWdlT3ZlcmxheURlc3Ryb3llZChXZWJQYWdlT3Zl
cmxheSYpIG92ZXJyaWRlCiAgICAgewogICAgICAgICBkZWxldGUgdGhpczsKICAgICB9CiAKLSAg
ICB2aXJ0dWFsIHZvaWQgd2lsbE1vdmVUb1dlYlBhZ2UoUGFnZU92ZXJsYXkqIHBhZ2VPdmVybGF5
LCBXZWJQYWdlKiBwYWdlKQorICAgIHZpcnR1YWwgdm9pZCB3aWxsTW92ZVRvUGFnZShXZWJQYWdl
T3ZlcmxheSYgcGFnZU92ZXJsYXksIFdlYlBhZ2UqIHBhZ2UpIG92ZXJyaWRlCiAgICAgewogICAg
ICAgICBpZiAoIW1fY2xpZW50LndpbGxNb3ZlVG9QYWdlKQogICAgICAgICAgICAgcmV0dXJuOwog
Ci0gICAgICAgIG1fY2xpZW50LndpbGxNb3ZlVG9QYWdlKHRvQVBJKHBhZ2VPdmVybGF5KSwgdG9B
UEkocGFnZSksIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7CisgICAgICAgIG1fY2xpZW50Lndp
bGxNb3ZlVG9QYWdlKHRvQVBJKCZwYWdlT3ZlcmxheSksIHRvQVBJKHBhZ2UpLCBtX2NsaWVudC5i
YXNlLmNsaWVudEluZm8pOwogICAgIH0KICAgICAKLSAgICB2aXJ0dWFsIHZvaWQgZGlkTW92ZVRv
V2ViUGFnZShQYWdlT3ZlcmxheSogcGFnZU92ZXJsYXksIFdlYlBhZ2UqIHBhZ2UpCisgICAgdmly
dHVhbCB2b2lkIGRpZE1vdmVUb1BhZ2UoV2ViUGFnZU92ZXJsYXkmIHBhZ2VPdmVybGF5LCBXZWJQ
YWdlKiBwYWdlKSBvdmVycmlkZQogICAgIHsKICAgICAgICAgaWYgKCFtX2NsaWVudC5kaWRNb3Zl
VG9QYWdlKQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIG1fY2xpZW50LmRpZE1vdmVU
b1BhZ2UodG9BUEkocGFnZU92ZXJsYXkpLCB0b0FQSShwYWdlKSwgbV9jbGllbnQuYmFzZS5jbGll
bnRJbmZvKTsKKyAgICAgICAgbV9jbGllbnQuZGlkTW92ZVRvUGFnZSh0b0FQSSgmcGFnZU92ZXJs
YXkpLCB0b0FQSShwYWdlKSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKICAgICB9CiAKLSAg
ICB2aXJ0dWFsIHZvaWQgZHJhd1JlY3QoUGFnZU92ZXJsYXkqIHBhZ2VPdmVybGF5LCBHcmFwaGlj
c0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KQorICAg
IHZpcnR1YWwgdm9pZCBkcmF3UmVjdChXZWJQYWdlT3ZlcmxheSYgcGFnZU92ZXJsYXksIEdyYXBo
aWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpIG92
ZXJyaWRlCiAgICAgewogICAgICAgICBpZiAoIW1fY2xpZW50LmRyYXdSZWN0KQogICAgICAgICAg
ICAgcmV0dXJuOwogCi0gICAgICAgIG1fY2xpZW50LmRyYXdSZWN0KHRvQVBJKHBhZ2VPdmVybGF5
KSwgZ3JhcGhpY3NDb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpLCB0b0FQSShkaXJ0eVJlY3QpLCBt
X2NsaWVudC5iYXNlLmNsaWVudEluZm8pOworICAgICAgICBtX2NsaWVudC5kcmF3UmVjdCh0b0FQ
SSgmcGFnZU92ZXJsYXkpLCBncmFwaGljc0NvbnRleHQucGxhdGZvcm1Db250ZXh0KCksIHRvQVBJ
KGRpcnR5UmVjdCksIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7CiAgICAgfQogICAgIAotICAg
IHZpcnR1YWwgYm9vbCBtb3VzZUV2ZW50KFBhZ2VPdmVybGF5KiBwYWdlT3ZlcmxheSwgY29uc3Qg
V2ViTW91c2VFdmVudCYgZXZlbnQpCisgICAgdmlydHVhbCBib29sIG1vdXNlRXZlbnQoV2ViUGFn
ZU92ZXJsYXkmIHBhZ2VPdmVybGF5LCBjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIGV2ZW50KSBv
dmVycmlkZQogICAgIHsKICAgICAgICAgc3dpdGNoIChldmVudC50eXBlKCkpIHsKLSAgICAgICAg
Y2FzZSBXZWJFdmVudDo6TW91c2VEb3duOiB7CisgICAgICAgIGNhc2UgUGxhdGZvcm1Nb3VzZUV2
ZW50OjpUeXBlOjpNb3VzZVByZXNzZWQ6IHsKICAgICAgICAgICAgIGlmICghbV9jbGllbnQubW91
c2VEb3duKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICAgICAgcmV0
dXJuIG1fY2xpZW50Lm1vdXNlRG93bih0b0FQSShwYWdlT3ZlcmxheSksIHRvQVBJKGV2ZW50LnBv
c2l0aW9uKCkpLCB0b0FQSShldmVudC5idXR0b24oKSksIG1fY2xpZW50LmJhc2UuY2xpZW50SW5m
byk7CisgICAgICAgICAgICByZXR1cm4gbV9jbGllbnQubW91c2VEb3duKHRvQVBJKCZwYWdlT3Zl
cmxheSksIHRvQVBJKGV2ZW50LnBvc2l0aW9uKCkpLCB0b0FQSShldmVudC5idXR0b24oKSksIG1f
Y2xpZW50LmJhc2UuY2xpZW50SW5mbyk7CiAgICAgICAgIH0KLSAgICAgICAgY2FzZSBXZWJFdmVu
dDo6TW91c2VVcDogeworICAgICAgICBjYXNlIFBsYXRmb3JtTW91c2VFdmVudDo6VHlwZTo6TW91
c2VSZWxlYXNlZDogewogICAgICAgICAgICAgaWYgKCFtX2NsaWVudC5tb3VzZVVwKQogICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICAgICAgcmV0dXJuIG1fY2xpZW50Lm1v
dXNlVXAodG9BUEkocGFnZU92ZXJsYXkpLCB0b0FQSShldmVudC5wb3NpdGlvbigpKSwgdG9BUEko
ZXZlbnQuYnV0dG9uKCkpLCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pOworICAgICAgICAgICAg
cmV0dXJuIG1fY2xpZW50Lm1vdXNlVXAodG9BUEkoJnBhZ2VPdmVybGF5KSwgdG9BUEkoZXZlbnQu
cG9zaXRpb24oKSksIHRvQVBJKGV2ZW50LmJ1dHRvbigpKSwgbV9jbGllbnQuYmFzZS5jbGllbnRJ
bmZvKTsKICAgICAgICAgfQotICAgICAgICBjYXNlIFdlYkV2ZW50OjpNb3VzZU1vdmU6IHsKLSAg
ICAgICAgICAgIGlmIChldmVudC5idXR0b24oKSA9PSBXZWJNb3VzZUV2ZW50OjpOb0J1dHRvbikg
eworICAgICAgICBjYXNlIFBsYXRmb3JtTW91c2VFdmVudDo6VHlwZTo6TW91c2VNb3ZlZDogewor
ICAgICAgICAgICAgaWYgKGV2ZW50LmJ1dHRvbigpID09IE1vdXNlQnV0dG9uOjpOb0J1dHRvbikg
ewogICAgICAgICAgICAgICAgIGlmICghbV9jbGllbnQubW91c2VNb3ZlZCkKICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgICAgICAgICAgcmV0dXJuIG1fY2xpZW50
Lm1vdXNlTW92ZWQodG9BUEkocGFnZU92ZXJsYXkpLCB0b0FQSShldmVudC5wb3NpdGlvbigpKSwg
bV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9jbGll
bnQubW91c2VNb3ZlZCh0b0FQSSgmcGFnZU92ZXJsYXkpLCB0b0FQSShldmVudC5wb3NpdGlvbigp
KSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAg
ICAgLy8gVGhpcyBpcyBhIE1vdXNlTW92ZSBldmVudCB3aXRoIGEgbW91c2UgYnV0dG9uIHByZXNz
ZWQuIENhbGwgbW91c2VEcmFnZ2VkLgogICAgICAgICAgICAgaWYgKCFtX2NsaWVudC5tb3VzZURy
YWdnZWQpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgICAgICByZXR1
cm4gbV9jbGllbnQubW91c2VEcmFnZ2VkKHRvQVBJKHBhZ2VPdmVybGF5KSwgdG9BUEkoZXZlbnQu
cG9zaXRpb24oKSksIHRvQVBJKGV2ZW50LmJ1dHRvbigpKSwgbV9jbGllbnQuYmFzZS5jbGllbnRJ
bmZvKTsKKyAgICAgICAgICAgIHJldHVybiBtX2NsaWVudC5tb3VzZURyYWdnZWQodG9BUEkoJnBh
Z2VPdmVybGF5KSwgdG9BUEkoZXZlbnQucG9zaXRpb24oKSksIHRvQVBJKGV2ZW50LmJ1dHRvbigp
KSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKICAgICAgICAgfQogCiAgICAgICAgIGRlZmF1
bHQ6CkBAIC0xMjUsMTggKzEzMiw0MyBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAgfQogICAg
IAotICAgIHZpcnR1YWwgV0tUeXBlUmVmIGNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWUo
UGFnZU92ZXJsYXkqIHBhZ2VPdmVybGF5LCBXS1N0cmluZ1JlZiBhdHRyaWJ1dGUsIFdLVHlwZVJl
ZiBwYXJhbWV0ZXIpCisgICAgdmlydHVhbCBib29sIGNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRl
U3RyaW5nVmFsdWVGb3JQb2ludChXZWJQYWdlT3ZlcmxheSYgcGFnZU92ZXJsYXksIFN0cmluZyBh
dHRyaWJ1dGUsIFdlYkNvcmU6OkZsb2F0UG9pbnQgcGFyYW1ldGVyLCBTdHJpbmcmIHZhbHVlKSBv
dmVycmlkZQogICAgIHsKICAgICAgICAgaWYgKCFtX2FjY2Vzc2liaWxpdHlDbGllbnQuY2xpZW50
KCkuY29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZSkKLSAgICAgICAgICAgIHJldHVybiAw
OwotICAgICAgICByZXR1cm4gbV9hY2Nlc3NpYmlsaXR5Q2xpZW50LmNsaWVudCgpLmNvcHlBY2Nl
c3NpYmlsaXR5QXR0cmlidXRlVmFsdWUodG9BUEkocGFnZU92ZXJsYXkpLCBhdHRyaWJ1dGUsIHBh
cmFtZXRlciwgbV9hY2Nlc3NpYmlsaXR5Q2xpZW50LmNsaWVudCgpLmJhc2UuY2xpZW50SW5mbyk7
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIFdLUmV0YWluUHRyPFdLVHlwZVJl
Zj4gd2tUeXBlID0gbV9hY2Nlc3NpYmlsaXR5Q2xpZW50LmNsaWVudCgpLmNvcHlBY2Nlc3NpYmls
aXR5QXR0cmlidXRlVmFsdWUodG9BUEkoJnBhZ2VPdmVybGF5KSwgdG9Db3BpZWRBUEkoYXR0cmli
dXRlKSwgV0tQb2ludENyZWF0ZShXS1BvaW50TWFrZShwYXJhbWV0ZXIueCgpLCBwYXJhbWV0ZXIu
eSgpKSksIG1fYWNjZXNzaWJpbGl0eUNsaWVudC5jbGllbnQoKS5iYXNlLmNsaWVudEluZm8pOwor
ICAgICAgICBpZiAodG9JbXBsKHdrVHlwZS5nZXQoKSktPnR5cGUoKSAhPSBBUEk6OlN0cmluZzo6
QVBJVHlwZSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgdmFsdWUgPSB0b1dU
RlN0cmluZyhzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4od2tUeXBlLmdldCgpKSk7CisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKworICAgIHZpcnR1YWwgYm9vbCBjb3B5QWNjZXNzaWJpbGl0
eUF0dHJpYnV0ZUJvb2xWYWx1ZUZvclBvaW50KFdlYlBhZ2VPdmVybGF5JiBwYWdlT3ZlcmxheSwg
U3RyaW5nIGF0dHJpYnV0ZSwgV2ViQ29yZTo6RmxvYXRQb2ludCBwYXJhbWV0ZXIsIGJvb2wmIHZh
bHVlKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKCFtX2FjY2Vzc2liaWxpdHlDbGllbnQu
Y2xpZW50KCkuY29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZSkKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiB3a1R5cGUgPSBtX2Fj
Y2Vzc2liaWxpdHlDbGllbnQuY2xpZW50KCkuY29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1
ZSh0b0FQSSgmcGFnZU92ZXJsYXkpLCB0b0NvcGllZEFQSShhdHRyaWJ1dGUpLCBXS1BvaW50Q3Jl
YXRlKFdLUG9pbnRNYWtlKHBhcmFtZXRlci54KCksIHBhcmFtZXRlci55KCkpKSwgbV9hY2Nlc3Np
YmlsaXR5Q2xpZW50LmNsaWVudCgpLmJhc2UuY2xpZW50SW5mbyk7CisgICAgICAgIGlmICh0b0lt
cGwod2tUeXBlLmdldCgpKS0+dHlwZSgpICE9IEFQSTo6Qm9vbGVhbjo6QVBJVHlwZSkKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgdmFsdWUgPSBXS0Jvb2xlYW5HZXRWYWx1ZShz
dGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KHdrVHlwZS5nZXQoKSkpOworICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9CiAKLSAgICB2aXJ0dWFsIFdLQXJyYXlSZWYgY29weUFjY2Vzc2liaWxpdHlB
dHRyaWJ1dGVOYW1lcyhQYWdlT3ZlcmxheSogcGFnZU92ZXJsYXksIGJvb2wgcGFyYW1lcml6ZWRO
YW1lcykKKyAgICB2aXJ0dWFsIFZlY3RvcjxTdHJpbmc+IGNvcHlBY2Nlc3NpYmlsaXR5QXR0cmli
dXRlTmFtZXMoV2ViUGFnZU92ZXJsYXkmIHBhZ2VPdmVybGF5LCBib29sIHBhcmFtZXJpemVkTmFt
ZXMpIG92ZXJyaWRlCiAgICAgeworICAgICAgICBWZWN0b3I8U3RyaW5nPiBuYW1lczsKICAgICAg
ICAgaWYgKCFtX2FjY2Vzc2liaWxpdHlDbGllbnQuY2xpZW50KCkuY29weUFjY2Vzc2liaWxpdHlB
dHRyaWJ1dGVOYW1lcykKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICByZXR1cm4gbV9h
Y2Nlc3NpYmlsaXR5Q2xpZW50LmNsaWVudCgpLmNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlTmFt
ZXModG9BUEkocGFnZU92ZXJsYXkpLCBwYXJhbWVyaXplZE5hbWVzLCBtX2FjY2Vzc2liaWxpdHlD
bGllbnQuY2xpZW50KCkuYmFzZS5jbGllbnRJbmZvKTsKKyAgICAgICAgICAgIHJldHVybiBuYW1l
czsKKyAgICAgICAgV0tSZXRhaW5QdHI8V0tBcnJheVJlZj4gd2tOYW1lcyA9IG1fYWNjZXNzaWJp
bGl0eUNsaWVudC5jbGllbnQoKS5jb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZU5hbWVzKHRvQVBJ
KCZwYWdlT3ZlcmxheSksIHBhcmFtZXJpemVkTmFtZXMsIG1fYWNjZXNzaWJpbGl0eUNsaWVudC5j
bGllbnQoKS5iYXNlLmNsaWVudEluZm8pOworCisgICAgICAgIHNpemVfdCBjb3VudCA9IFdLQXJy
YXlHZXRTaXplKHdrTmFtZXMuZ2V0KCkpOworICAgICAgICBmb3IgKHNpemVfdCBrID0gMDsgayA8
IGNvdW50OyBrKyspIHsKKyAgICAgICAgICAgIFdLVHlwZVJlZiBpdGVtID0gV0tBcnJheUdldEl0
ZW1BdEluZGV4KHdrTmFtZXMuZ2V0KCksIGspOworICAgICAgICAgICAgaWYgKHRvSW1wbChpdGVt
KS0+dHlwZSgpID09IEFQSTo6U3RyaW5nOjpBUElUeXBlKQorICAgICAgICAgICAgICAgIG5hbWVz
LmFwcGVuZCh0b1dURlN0cmluZyhzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oaXRlbSkpKTsKKyAg
ICAgICAgfQorCisgICAgICAgIHJldHVybiBuYW1lczsKICAgICB9CiAgICAgCiAgICAgQVBJOjpD
bGllbnQ8V0tCdW5kbGVQYWdlT3ZlcmxheUFjY2Vzc2liaWxpdHlDbGllbnRCYXNlPiBtX2FjY2Vz
c2liaWxpdHlDbGllbnQ7CkBAIC0xNDQsNyArMTc2LDcgQEAgcHJpdmF0ZToKIAogV0tUeXBlSUQg
V0tCdW5kbGVQYWdlT3ZlcmxheUdldFR5cGVJRCgpCiB7Ci0gICAgcmV0dXJuIHRvQVBJKFBhZ2VP
dmVybGF5OjpBUElUeXBlKTsKKyAgICByZXR1cm4gdG9BUEkoV2ViUGFnZU92ZXJsYXk6OkFQSVR5
cGUpOwogfQogCiBXS0J1bmRsZVBhZ2VPdmVybGF5UmVmIFdLQnVuZGxlUGFnZU92ZXJsYXlDcmVh
dGUoV0tCdW5kbGVQYWdlT3ZlcmxheUNsaWVudEJhc2UqIHdrQ2xpZW50KQpAQCAtMTU1LDE0ICsx
ODcsMTQgQEAgV0tCdW5kbGVQYWdlT3ZlcmxheVJlZiBXS0J1bmRsZVBhZ2VPdmVybGF5Q3JlYXRl
KFdLQnVuZGxlUGFnZU92ZXJsYXlDbGllbnRCYXNlKgogICAgIGF1dG8gY2xpZW50SW1wbCA9IHN0
ZDo6bWFrZV91bmlxdWU8UGFnZU92ZXJsYXlDbGllbnRJbXBsPih3a0NsaWVudCk7CiAKICAgICAv
LyBGSVhNRTogTG9va3MgbGlrZSB0aGlzIGxlYWtzIHRoZSBjbGllbnRJbXBsLgotICAgIHJldHVy
biB0b0FQSShQYWdlT3ZlcmxheTo6Y3JlYXRlKGNsaWVudEltcGwucmVsZWFzZSgpKS5sZWFrUmVm
KCkpOworICAgIHJldHVybiB0b0FQSShXZWJQYWdlT3ZlcmxheTo6Y3JlYXRlKCpjbGllbnRJbXBs
LnJlbGVhc2UoKSkubGVha1JlZigpKTsKIH0KIAogdm9pZCBXS0J1bmRsZVBhZ2VPdmVybGF5U2V0
QWNjZXNzaWJpbGl0eUNsaWVudChXS0J1bmRsZVBhZ2VPdmVybGF5UmVmIGJ1bmRsZVBhZ2VPdmVy
bGF5UmVmLCBXS0J1bmRsZVBhZ2VPdmVybGF5QWNjZXNzaWJpbGl0eUNsaWVudEJhc2UqIGNsaWVu
dCkKIHsKICAgICBpZiAoY2xpZW50ICYmIGNsaWVudC0+dmVyc2lvbikKICAgICAgICAgcmV0dXJu
OwotICAgIHN0YXRpY19jYXN0PFBhZ2VPdmVybGF5Q2xpZW50SW1wbCo+KHRvSW1wbChidW5kbGVQ
YWdlT3ZlcmxheVJlZiktPmNsaWVudCgpKS0+c2V0QWNjZXNzaWJpbGl0eUNsaWVudChjbGllbnQp
OworICAgIHN0YXRpY19jYXN0PFBhZ2VPdmVybGF5Q2xpZW50SW1wbCo+KCZ0b0ltcGwoYnVuZGxl
UGFnZU92ZXJsYXlSZWYpLT5jbGllbnQoKSktPnNldEFjY2Vzc2liaWxpdHlDbGllbnQoY2xpZW50
KTsKIH0KIAogdm9pZCBXS0J1bmRsZVBhZ2VPdmVybGF5U2V0TmVlZHNEaXNwbGF5KFdLQnVuZGxl
UGFnZU92ZXJsYXlSZWYgYnVuZGxlUGFnZU92ZXJsYXlSZWYsIFdLUmVjdCByZWN0KQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVD
bGllbnQuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJD
aHJvbWVDbGllbnQuY3BwCmluZGV4IGNkZWNiZGEuLmI2YTI5MTAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNs
aWVudC5jcHAKQEAgLTg0MCw3ICs4NDAsOSBAQCBQYXNzUmVmUHRyPFdlYkNvcmU6OlNlYXJjaFBv
cHVwTWVudT4gV2ViQ2hyb21lQ2xpZW50OjpjcmVhdGVTZWFyY2hQb3B1cE1lbnUoV2ViQwogCiBH
cmFwaGljc0xheWVyRmFjdG9yeSogV2ViQ2hyb21lQ2xpZW50OjpncmFwaGljc0xheWVyRmFjdG9y
eSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fcGFnZS0+ZHJhd2luZ0FyZWEoKS0+Z3JhcGhpY3NM
YXllckZhY3RvcnkoKTsKKyAgICBpZiAoYXV0byBkcmF3aW5nQXJlYSA9IG1fcGFnZS0+ZHJhd2lu
Z0FyZWEoKSkKKyAgICAgICAgcmV0dXJuIGRyYXdpbmdBcmVhLT5ncmFwaGljc0xheWVyRmFjdG9y
eSgpOworICAgIHJldHVybiBudWxscHRyOwogfQogCiAjaWYgVVNFKFJFUVVFU1RfQU5JTUFUSU9O
X0ZSQU1FX0RJU1BMQVlfTU9OSVRPUikKQEAgLTg1OCwxMiArODYwLDEwIEBAIHZvaWQgV2ViQ2hy
b21lQ2xpZW50OjphdHRhY2hSb290R3JhcGhpY3NMYXllcihGcmFtZSosIEdyYXBoaWNzTGF5ZXIq
IGxheWVyKQogICAgICAgICBtX3BhZ2UtPmV4aXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSgp
OwogfQogCi1HcmFwaGljc0xheWVyKiBXZWJDaHJvbWVDbGllbnQ6OmRvY3VtZW50T3ZlcmxheUxh
eWVyRm9yRnJhbWUoRnJhbWUmIGZyYW1lKQordm9pZCBXZWJDaHJvbWVDbGllbnQ6OmF0dGFjaFZp
ZXdPdmVybGF5R3JhcGhpY3NMYXllcihGcmFtZSogZnJhbWUsIEdyYXBoaWNzTGF5ZXIqIGdyYXBo
aWNzTGF5ZXIpCiB7Ci0gICAgaWYgKCZmcmFtZSA9PSAmbV9wYWdlLT5jb3JlUGFnZSgpLT5tYWlu
RnJhbWUoKSkKLSAgICAgICAgcmV0dXJuIG1fcGFnZS0+cGFnZU92ZXJsYXlDb250cm9sbGVyKCku
ZG9jdW1lbnRPdmVybGF5Um9vdExheWVyKCk7Ci0KLSAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBp
ZiAoYXV0byBkcmF3aW5nQXJlYSA9IG1fcGFnZS0+ZHJhd2luZ0FyZWEoKSkKKyAgICAgICAgZHJh
d2luZ0FyZWEtPmF0dGFjaFZpZXdPdmVybGF5R3JhcGhpY3NMYXllcihmcmFtZSwgZ3JhcGhpY3NM
YXllcik7CiB9CiAKIHZvaWQgV2ViQ2hyb21lQ2xpZW50OjpzZXROZWVkc09uZVNob3REcmF3aW5n
U3luY2hyb25pemF0aW9uKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oCmluZGV4IGI5ZGMzMmUuLmY1YzVi
MjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQv
V2ViQ2hyb21lQ2xpZW50LmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3Jl
U3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaApAQCAtMjE1LDEwICsyMTUsMTAgQEAgcHJpdmF0ZToK
IAogICAgIHZpcnR1YWwgV2ViQ29yZTo6R3JhcGhpY3NMYXllckZhY3RvcnkqIGdyYXBoaWNzTGF5
ZXJGYWN0b3J5KCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIGF0dGFjaFJvb3RH
cmFwaGljc0xheWVyKFdlYkNvcmU6OkZyYW1lKiwgV2ViQ29yZTo6R3JhcGhpY3NMYXllciopIG92
ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBhdHRhY2hWaWV3T3ZlcmxheUdyYXBoaWNzTGF5ZXIo
V2ViQ29yZTo6RnJhbWUqLCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKikgb3ZlcnJpZGU7CiAgICAg
dmlydHVhbCB2b2lkIHNldE5lZWRzT25lU2hvdERyYXdpbmdTeW5jaHJvbml6YXRpb24oKSBvdmVy
cmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVDb21wb3NpdGluZ0xheWVyRmx1c2goKSBv
dmVycmlkZTsKICAgICB2aXJ0dWFsIGJvb2wgYWRqdXN0TGF5ZXJGbHVzaFRocm90dGxpbmcoV2Vi
Q29yZTo6TGF5ZXJGbHVzaFRocm90dGxlU3RhdGU6OkZsYWdzKSBvdmVycmlkZTsKLSAgICB2aXJ0
dWFsIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqIGRvY3VtZW50T3ZlcmxheUxheWVyRm9yRnJhbWUo
V2ViQ29yZTo6RnJhbWUmKSBvdmVycmlkZTsKIAogI2lmIFVTRShSRVFVRVNUX0FOSU1BVElPTl9G
UkFNRV9ESVNQTEFZX01PTklUT1IpCiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPFdlYkNvcmU6OkRp
c3BsYXlSZWZyZXNoTW9uaXRvcj4gY3JlYXRlRGlzcGxheVJlZnJlc2hNb25pdG9yKFBsYXRmb3Jt
RGlzcGxheUlEKSBjb25zdCBvdmVycmlkZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50LmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50LmNwcApp
bmRleCA4NTkzNThiLi44OGViMmRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckNsaWVudC5jcHAKKysrIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JDbGllbnQuY3BwCkBA
IC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiV2ViUGFnZS5oIgogI2luY2x1ZGUgPFdlYkNvcmUv
SW5zcGVjdG9yQ29udHJvbGxlci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUGFnZS5oPgorI2luY2x1
ZGUgPFdlYkNvcmUvUGFnZU92ZXJsYXlDb250cm9sbGVyLmg+CiAjaW5jbHVkZSA8d3RmL0N1cnJl
bnRUaW1lLmg+CiAKICNpZiBQTEFURk9STShJT1MpCkBAIC03Myw3ICs3NCw3IEBAIFdlYkluc3Bl
Y3RvckNsaWVudDo6fldlYkluc3BlY3RvckNsaWVudCgpCiAgICAgfQogCiAgICAgaWYgKG1fcGFp
bnRSZWN0T3ZlcmxheSkKLSAgICAgICAgbV9wYWdlLT51bmluc3RhbGxQYWdlT3ZlcmxheShtX3Bh
aW50UmVjdE92ZXJsYXkuZ2V0KCkpOworICAgICAgICBtX3BhZ2UtPmNvcmVQYWdlKCktPnBhZ2VP
dmVybGF5Q29udHJvbGxlcigpLnVuaW5zdGFsbFBhZ2VPdmVybGF5KG1fcGFpbnRSZWN0T3Zlcmxh
eS5nZXQoKSwgUGFnZU92ZXJsYXk6OkZhZGVNb2RlOjpGYWRlKTsKIH0KIAogdm9pZCBXZWJJbnNw
ZWN0b3JDbGllbnQ6Omluc3BlY3RvckRlc3Ryb3llZCgpCkBAIC0xMTEsOSArMTEyLDkgQEAgdm9p
ZCBXZWJJbnNwZWN0b3JDbGllbnQ6OmhpZ2hsaWdodCgpCiB7CiAjaWYgIVBMQVRGT1JNKElPUykK
ICAgICBpZiAoIW1faGlnaGxpZ2h0T3ZlcmxheSkgewotICAgICAgICBSZWZQdHI8UGFnZU92ZXJs
YXk+IGhpZ2hsaWdodE92ZXJsYXkgPSBQYWdlT3ZlcmxheTo6Y3JlYXRlKHRoaXMpOworICAgICAg
ICBSZWZQdHI8UGFnZU92ZXJsYXk+IGhpZ2hsaWdodE92ZXJsYXkgPSBQYWdlT3ZlcmxheTo6Y3Jl
YXRlKCp0aGlzKTsKICAgICAgICAgbV9oaWdobGlnaHRPdmVybGF5ID0gaGlnaGxpZ2h0T3Zlcmxh
eS5nZXQoKTsKLSAgICAgICAgbV9wYWdlLT5pbnN0YWxsUGFnZU92ZXJsYXkoaGlnaGxpZ2h0T3Zl
cmxheS5yZWxlYXNlKCksIFBhZ2VPdmVybGF5OjpGYWRlTW9kZTo6RmFkZSk7CisgICAgICAgIG1f
cGFnZS0+Y29yZVBhZ2UoKS0+cGFnZU92ZXJsYXlDb250cm9sbGVyKCkuaW5zdGFsbFBhZ2VPdmVy
bGF5KGhpZ2hsaWdodE92ZXJsYXkucmVsZWFzZSgpLCBQYWdlT3ZlcmxheTo6RmFkZU1vZGU6OkZh
ZGUpOwogICAgICAgICBtX2hpZ2hsaWdodE92ZXJsYXktPnNldE5lZWRzRGlzcGxheSgpOwogICAg
IH0gZWxzZSB7CiAgICAgICAgIG1faGlnaGxpZ2h0T3ZlcmxheS0+c3RvcEZhZGVPdXRBbmltYXRp
b24oKTsKQEAgLTEzMCw3ICsxMzEsNyBAQCB2b2lkIFdlYkluc3BlY3RvckNsaWVudDo6aGlkZUhp
Z2hsaWdodCgpCiB7CiAjaWYgIVBMQVRGT1JNKElPUykKICAgICBpZiAobV9oaWdobGlnaHRPdmVy
bGF5KQotICAgICAgICBtX3BhZ2UtPnVuaW5zdGFsbFBhZ2VPdmVybGF5KG1faGlnaGxpZ2h0T3Zl
cmxheSwgUGFnZU92ZXJsYXk6OkZhZGVNb2RlOjpGYWRlKTsKKyAgICAgICAgbV9wYWdlLT5jb3Jl
UGFnZSgpLT5wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKS51bmluc3RhbGxQYWdlT3ZlcmxheShtX2hp
Z2hsaWdodE92ZXJsYXksIFBhZ2VPdmVybGF5OjpGYWRlTW9kZTo6RmFkZSk7CiAjZWxzZQogICAg
IG1fcGFnZS0+aGlkZUluc3BlY3RvckhpZ2hsaWdodCgpOwogI2VuZGlmCkBAIC0xMzksOCArMTQw
LDggQEAgdm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6OmhpZGVIaWdobGlnaHQoKQogdm9pZCBXZWJJ
bnNwZWN0b3JDbGllbnQ6OnNob3dQYWludFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewog
ICAgIGlmICghbV9wYWludFJlY3RPdmVybGF5KSB7Ci0gICAgICAgIG1fcGFpbnRSZWN0T3Zlcmxh
eSA9IFBhZ2VPdmVybGF5OjpjcmVhdGUodGhpcywgUGFnZU92ZXJsYXk6Ok92ZXJsYXlUeXBlOjpE
b2N1bWVudCk7Ci0gICAgICAgIG1fcGFnZS0+aW5zdGFsbFBhZ2VPdmVybGF5KG1fcGFpbnRSZWN0
T3ZlcmxheSwgUGFnZU92ZXJsYXk6OkZhZGVNb2RlOjpEb05vdEZhZGUpOworICAgICAgICBtX3Bh
aW50UmVjdE92ZXJsYXkgPSBQYWdlT3ZlcmxheTo6Y3JlYXRlKCp0aGlzLCBQYWdlT3ZlcmxheTo6
T3ZlcmxheVR5cGU6OkRvY3VtZW50KTsKKyAgICAgICAgbV9wYWdlLT5jb3JlUGFnZSgpLT5wYWdl
T3ZlcmxheUNvbnRyb2xsZXIoKS5pbnN0YWxsUGFnZU92ZXJsYXkobV9wYWludFJlY3RPdmVybGF5
LCBQYWdlT3ZlcmxheTo6RmFkZU1vZGU6OkRvTm90RmFkZSk7CiAgICAgfQogCiAgICAgaWYgKCFt
X3BhaW50SW5kaWNhdG9yTGF5ZXJDbGllbnQpCkBAIC0xNjcsOCArMTY4LDggQEAgdm9pZCBXZWJJ
bnNwZWN0b3JDbGllbnQ6OnNob3dQYWludFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogICAg
IAogICAgIG1fcGFpbnRSZWN0TGF5ZXJzLmFkZChwYWludExheWVyLmdldCgpKTsKIAotICAgIEdy
YXBoaWNzTGF5ZXIqIG92ZXJsYXlSb290TGF5ZXIgPSBtX3BhaW50UmVjdE92ZXJsYXktPmxheWVy
KCk7Ci0gICAgb3ZlcmxheVJvb3RMYXllci0+YWRkQ2hpbGQocGFpbnRMYXllci5yZWxlYXNlKCkp
OworICAgIEdyYXBoaWNzTGF5ZXImIG92ZXJsYXlSb290TGF5ZXIgPSBtX3BhaW50UmVjdE92ZXJs
YXktPmxheWVyKCk7CisgICAgb3ZlcmxheVJvb3RMYXllci5hZGRDaGlsZChwYWludExheWVyLnJl
bGVhc2UoKSk7CiB9CiAKIHZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50OjphbmltYXRpb25FbmRlZEZv
ckxheWVyKGNvbnN0IEdyYXBoaWNzTGF5ZXIqIGxheWVyKQpAQCAtMTk4LDEzICsxOTksMTMgQEAg
dm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6OmRpZFNldFNlYXJjaGluZ0Zvck5vZGUoYm9vbCBlbmFi
bGVkKQogfQogI2VuZGlmCiAKLXZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50OjpwYWdlT3ZlcmxheURl
c3Ryb3llZChQYWdlT3ZlcmxheSopCit2b2lkIFdlYkluc3BlY3RvckNsaWVudDo6cGFnZU92ZXJs
YXlEZXN0cm95ZWQoUGFnZU92ZXJsYXkmKQogewogfQogCi12b2lkIFdlYkluc3BlY3RvckNsaWVu
dDo6d2lsbE1vdmVUb1dlYlBhZ2UoUGFnZU92ZXJsYXkqLCBXZWJQYWdlKiB3ZWJQYWdlKQordm9p
ZCBXZWJJbnNwZWN0b3JDbGllbnQ6OndpbGxNb3ZlVG9QYWdlKFBhZ2VPdmVybGF5JiwgUGFnZSog
cGFnZSkKIHsKLSAgICBpZiAod2ViUGFnZSkKKyAgICBpZiAocGFnZSkKICAgICAgICAgcmV0dXJu
OwogCiAgICAgLy8gVGhlIHBhZ2Ugb3ZlcmxheSBpcyBtb3ZpbmcgYXdheSBmcm9tIHRoZSB3ZWIg
cGFnZSwgcmVzZXQgaXQuCkBAIC0yMTIsMTYgKzIxMywxNiBAQCB2b2lkIFdlYkluc3BlY3RvckNs
aWVudDo6d2lsbE1vdmVUb1dlYlBhZ2UoUGFnZU92ZXJsYXkqLCBXZWJQYWdlKiB3ZWJQYWdlKQog
ICAgIG1faGlnaGxpZ2h0T3ZlcmxheSA9IDA7CiB9CiAKLXZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50
OjpkaWRNb3ZlVG9XZWJQYWdlKFBhZ2VPdmVybGF5KiwgV2ViUGFnZSopCit2b2lkIFdlYkluc3Bl
Y3RvckNsaWVudDo6ZGlkTW92ZVRvUGFnZShQYWdlT3ZlcmxheSYsIFBhZ2UqKQogewogfQogCi12
b2lkIFdlYkluc3BlY3RvckNsaWVudDo6ZHJhd1JlY3QoUGFnZU92ZXJsYXkqLCBXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIC8qZGlydHlS
ZWN0Ki8pCit2b2lkIFdlYkluc3BlY3RvckNsaWVudDo6ZHJhd1JlY3QoUGFnZU92ZXJsYXkmLCBX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IFdlYkNvcmU6OkludFJlY3Qm
IC8qZGlydHlSZWN0Ki8pCiB7CiAgICAgbV9wYWdlLT5jb3JlUGFnZSgpLT5pbnNwZWN0b3JDb250
cm9sbGVyKCkuZHJhd0hpZ2hsaWdodChjb250ZXh0KTsKIH0KIAotYm9vbCBXZWJJbnNwZWN0b3JD
bGllbnQ6Om1vdXNlRXZlbnQoUGFnZU92ZXJsYXkqLCBjb25zdCBXZWJNb3VzZUV2ZW50JikKK2Jv
b2wgV2ViSW5zcGVjdG9yQ2xpZW50Ojptb3VzZUV2ZW50KFBhZ2VPdmVybGF5JiwgY29uc3QgUGxh
dGZvcm1Nb3VzZUV2ZW50JikKIHsKICAgICByZXR1cm4gZmFsc2U7CiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckNsaWVu
dC5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0
b3JDbGllbnQuaAppbmRleCA3OThjYWM3Li5kZmMwMzhhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckNsaWVudC5oCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xp
ZW50LmgKQEAgLTI4LDE2ICsyOCwxNiBAQAogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKIAotI2lu
Y2x1ZGUgIlBhZ2VPdmVybGF5LmgiCi0KICNpbmNsdWRlIDxXZWJDb3JlL0luc3BlY3RvckNsaWVu
dC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvSW5zcGVjdG9yRm9yd2FyZGluZy5oPgorI2luY2x1ZGUg
PFdlYkNvcmUvUGFnZU92ZXJsYXkuaD4KICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBHcmFwaGljc0NvbnRleHQ7CiBjbGFzcyBHcmFwaGljc0xh
eWVyOwogY2xhc3MgSW50UmVjdDsKK2NsYXNzIFBhZ2VPdmVybGF5OwogfQogCiBuYW1lc3BhY2Ug
V2ViS2l0IHsKQEAgLTQ1LDcgKzQ1LDcgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiBjbGFzcyBXZWJQ
YWdlOwogY2xhc3MgUmVwYWludEluZGljYXRvckxheWVyQ2xpZW50OwogCi1jbGFzcyBXZWJJbnNw
ZWN0b3JDbGllbnQgOiBwdWJsaWMgV2ViQ29yZTo6SW5zcGVjdG9yQ2xpZW50LCBwcml2YXRlIFBh
Z2VPdmVybGF5OjpDbGllbnQgeworY2xhc3MgV2ViSW5zcGVjdG9yQ2xpZW50IDogcHVibGljIFdl
YkNvcmU6Okluc3BlY3RvckNsaWVudCwgcHJpdmF0ZSBXZWJDb3JlOjpQYWdlT3ZlcmxheTo6Q2xp
ZW50IHsKIGZyaWVuZCBjbGFzcyBSZXBhaW50SW5kaWNhdG9yTGF5ZXJDbGllbnQ7CiBwdWJsaWM6
CiAgICAgV2ViSW5zcGVjdG9yQ2xpZW50KFdlYlBhZ2UqKTsKQEAgLTc0LDE4ICs3NCwxOCBAQCBw
cml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBzaG93UGFpbnRSZWN0KGNvbnN0IFdlYkNvcmU6OkZs
b2F0UmVjdCYpIG92ZXJyaWRlOwogCiAgICAgLy8gUGFnZU92ZXJsYXk6OkNsaWVudAotICAgIHZp
cnR1YWwgdm9pZCBwYWdlT3ZlcmxheURlc3Ryb3llZChQYWdlT3ZlcmxheSopIG92ZXJyaWRlOwot
ICAgIHZpcnR1YWwgdm9pZCB3aWxsTW92ZVRvV2ViUGFnZShQYWdlT3ZlcmxheSosIFdlYlBhZ2Uq
KSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkTW92ZVRvV2ViUGFnZShQYWdlT3Zlcmxh
eSosIFdlYlBhZ2UqKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgZHJhd1JlY3QoUGFnZU92
ZXJsYXkqLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0
Jikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBib29sIG1vdXNlRXZlbnQoUGFnZU92ZXJsYXkqLCBj
b25zdCBXZWJNb3VzZUV2ZW50Jikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHBhZ2VPdmVy
bGF5RGVzdHJveWVkKFdlYkNvcmU6OlBhZ2VPdmVybGF5Jikgb3ZlcnJpZGU7CisgICAgdmlydHVh
bCB2b2lkIHdpbGxNb3ZlVG9QYWdlKFdlYkNvcmU6OlBhZ2VPdmVybGF5JiwgV2ViQ29yZTo6UGFn
ZSopIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBkaWRNb3ZlVG9QYWdlKFdlYkNvcmU6OlBh
Z2VPdmVybGF5JiwgV2ViQ29yZTo6UGFnZSopIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBk
cmF3UmVjdChXZWJDb3JlOjpQYWdlT3ZlcmxheSYsIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYs
IGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wgbW91
c2VFdmVudChXZWJDb3JlOjpQYWdlT3ZlcmxheSYsIGNvbnN0IFdlYkNvcmU6OlBsYXRmb3JtTW91
c2VFdmVudCYpIG92ZXJyaWRlOwogCiAgICAgdm9pZCBhbmltYXRpb25FbmRlZEZvckxheWVyKGNv
bnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKTsKIAogICAgIFdlYlBhZ2UqIG1fcGFnZTsKLSAg
ICBQYWdlT3ZlcmxheSogbV9oaWdobGlnaHRPdmVybGF5OworICAgIFdlYkNvcmU6OlBhZ2VPdmVy
bGF5KiBtX2hpZ2hsaWdodE92ZXJsYXk7CiAgICAgCi0gICAgUmVmUHRyPFBhZ2VPdmVybGF5PiBt
X3BhaW50UmVjdE92ZXJsYXk7CisgICAgUmVmUHRyPFdlYkNvcmU6OlBhZ2VPdmVybGF5PiBtX3Bh
aW50UmVjdE92ZXJsYXk7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFJlcGFpbnRJbmRpY2F0b3JMYXll
ckNsaWVudD4gbV9wYWludEluZGljYXRvckxheWVyQ2xpZW50OwogICAgIEhhc2hTZXQ8V2ViQ29y
ZTo6R3JhcGhpY3NMYXllcio+IG1fcGFpbnRSZWN0TGF5ZXJzOyAvLyBJZGVhbGx5IHRoaXMgd291
bGQgYmUgSGFzaFNldDxzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NMYXllcj4+IGJ1dCB0aGF0IGRv
ZXNuJ3Qgd29yayB5ZXQuIHdlYmtpdC5vcmcvYi8xMzYxNjYKIH07CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWEuaCBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYS5oCmluZGV4IGY3NGI0ZGUuLmRiM2I4
M2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5n
QXJlYS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJl
YS5oCkBAIC00NSw2ICs0NSw3IEBAIGNsYXNzIE1lc3NhZ2VEZWNvZGVyOwogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiBjbGFzcyBEaXNwbGF5UmVmcmVzaE1vbml0b3I7CitjbGFzcyBGcmFtZTsKIGNs
YXNzIEZyYW1lVmlldzsKIGNsYXNzIEdyYXBoaWNzTGF5ZXI7CiBjbGFzcyBHcmFwaGljc0xheWVy
RmFjdG9yeTsKQEAgLTEyMCw2ICsxMjEsOCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIGJvb2wg
YWRqdXN0TGF5ZXJGbHVzaFRocm90dGxpbmcoV2ViQ29yZTo6TGF5ZXJGbHVzaFRocm90dGxlU3Rh
dGU6OkZsYWdzKSB7IHJldHVybiBmYWxzZTsgfQogCisgICAgdmlydHVhbCB2b2lkIGF0dGFjaFZp
ZXdPdmVybGF5R3JhcGhpY3NMYXllcihXZWJDb3JlOjpGcmFtZSosIFdlYkNvcmU6OkdyYXBoaWNz
TGF5ZXIqKSB7IH0KKwogcHJvdGVjdGVkOgogICAgIERyYXdpbmdBcmVhKERyYXdpbmdBcmVhVHlw
ZSwgV2ViUGFnZSYpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvRmluZENvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL0ZpbmRDb250cm9sbGVyLmNwcAppbmRleCAxZTM0NjJiLi5jYzNlNzJlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5jcHAK
QEAgLTQwLDYgKzQwLDggQEAKICNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dC5oPgog
I2luY2x1ZGUgPFdlYkNvcmUvTWFpbkZyYW1lLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9QYWdlLmg+
CisjaW5jbHVkZSA8V2ViQ29yZS9QYWdlT3ZlcmxheUNvbnRyb2xsZXIuaD4KKyNpbmNsdWRlIDxX
ZWJDb3JlL1BsYXRmb3JtTW91c2VFdmVudC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUGx1Z2luRG9j
dW1lbnQuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CkBAIC02Myw3ICs2NSw3IEBAIHN0
YXRpYyBXZWJDb3JlOjpGaW5kT3B0aW9ucyBjb3JlKEZpbmRPcHRpb25zIG9wdGlvbnMpCiAKIEZp
bmRDb250cm9sbGVyOjpGaW5kQ29udHJvbGxlcihXZWJQYWdlKiB3ZWJQYWdlKQogICAgIDogbV93
ZWJQYWdlKHdlYlBhZ2UpCi0gICAgLCBtX2ZpbmRQYWdlT3ZlcmxheSgwKQorICAgICwgbV9maW5k
UGFnZU92ZXJsYXkobnVsbHB0cikKICAgICAsIG1faXNTaG93aW5nRmluZEluZGljYXRvcihmYWxz
ZSkKICAgICAsIG1fZm91bmRTdHJpbmdNYXRjaEluZGV4KC0xKQogewpAQCAtMTgyLDEyICsxODQs
MTIgQEAgdm9pZCBGaW5kQ29udHJvbGxlcjo6dXBkYXRlRmluZFVJQWZ0ZXJQYWdlU2Nyb2xsKGJv
b2wgZm91bmQsIGNvbnN0IFN0cmluZyYgc3RyaW4KIAogICAgIGlmICghc2hvdWxkU2hvd092ZXJs
YXkpIHsKICAgICAgICAgaWYgKG1fZmluZFBhZ2VPdmVybGF5KQotICAgICAgICAgICAgbV93ZWJQ
YWdlLT51bmluc3RhbGxQYWdlT3ZlcmxheShtX2ZpbmRQYWdlT3ZlcmxheSwgUGFnZU92ZXJsYXk6
OkZhZGVNb2RlOjpGYWRlKTsKKyAgICAgICAgICAgIG1fd2ViUGFnZS0+Y29yZVBhZ2UoKS0+cGFn
ZU92ZXJsYXlDb250cm9sbGVyKCkudW5pbnN0YWxsUGFnZU92ZXJsYXkobV9maW5kUGFnZU92ZXJs
YXksIFBhZ2VPdmVybGF5OjpGYWRlTW9kZTo6RmFkZSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAg
aWYgKCFtX2ZpbmRQYWdlT3ZlcmxheSkgewotICAgICAgICAgICAgUmVmUHRyPFBhZ2VPdmVybGF5
PiBmaW5kUGFnZU92ZXJsYXkgPSBQYWdlT3ZlcmxheTo6Y3JlYXRlKHRoaXMpOworICAgICAgICAg
ICAgUmVmUHRyPFBhZ2VPdmVybGF5PiBmaW5kUGFnZU92ZXJsYXkgPSBQYWdlT3ZlcmxheTo6Y3Jl
YXRlKCp0aGlzKTsKICAgICAgICAgICAgIG1fZmluZFBhZ2VPdmVybGF5ID0gZmluZFBhZ2VPdmVy
bGF5LmdldCgpOwotICAgICAgICAgICAgbV93ZWJQYWdlLT5pbnN0YWxsUGFnZU92ZXJsYXkoZmlu
ZFBhZ2VPdmVybGF5LnJlbGVhc2UoKSwgUGFnZU92ZXJsYXk6OkZhZGVNb2RlOjpGYWRlKTsKKyAg
ICAgICAgICAgIG1fd2ViUGFnZS0+Y29yZVBhZ2UoKS0+cGFnZU92ZXJsYXlDb250cm9sbGVyKCku
aW5zdGFsbFBhZ2VPdmVybGF5KGZpbmRQYWdlT3ZlcmxheS5yZWxlYXNlKCksIFBhZ2VPdmVybGF5
OjpGYWRlTW9kZTo6RmFkZSk7CiAgICAgICAgIH0KICAgICAgICAgbV9maW5kUGFnZU92ZXJsYXkt
PnNldE5lZWRzRGlzcGxheSgpOwogICAgIH0KQEAgLTMzMCw3ICszMzIsNyBAQCB2b2lkIEZpbmRD
b250cm9sbGVyOjpoaWRlRmluZFVJKCkKIHsKICAgICBtX2ZpbmRNYXRjaGVzLmNsZWFyKCk7CiAg
ICAgaWYgKG1fZmluZFBhZ2VPdmVybGF5KQotICAgICAgICBtX3dlYlBhZ2UtPnVuaW5zdGFsbFBh
Z2VPdmVybGF5KG1fZmluZFBhZ2VPdmVybGF5LCBQYWdlT3ZlcmxheTo6RmFkZU1vZGU6OkZhZGUp
OworICAgICAgICBtX3dlYlBhZ2UtPmNvcmVQYWdlKCktPnBhZ2VPdmVybGF5Q29udHJvbGxlcigp
LnVuaW5zdGFsbFBhZ2VPdmVybGF5KG1fZmluZFBhZ2VPdmVybGF5LCBQYWdlT3ZlcmxheTo6RmFk
ZU1vZGU6OkZhZGUpOwogCiAgICAgUGx1Z2luVmlldyogcGx1Z2luVmlldyA9IHBsdWdpblZpZXdG
b3JGcmFtZShtX3dlYlBhZ2UtPm1haW5GcmFtZSgpKTsKICAgICAKQEAgLTQzOSwyMCArNDQxLDIw
IEBAIFZlY3RvcjxJbnRSZWN0PiBGaW5kQ29udHJvbGxlcjo6cmVjdHNGb3JUZXh0TWF0Y2hlcygp
CiAgICAgcmV0dXJuIHJlY3RzOwogfQogCi12b2lkIEZpbmRDb250cm9sbGVyOjpwYWdlT3Zlcmxh
eURlc3Ryb3llZChQYWdlT3ZlcmxheSopCit2b2lkIEZpbmRDb250cm9sbGVyOjpwYWdlT3Zlcmxh
eURlc3Ryb3llZChQYWdlT3ZlcmxheSYpCiB7CiB9CiAKLXZvaWQgRmluZENvbnRyb2xsZXI6Ondp
bGxNb3ZlVG9XZWJQYWdlKFBhZ2VPdmVybGF5KiwgV2ViUGFnZSogd2ViUGFnZSkKK3ZvaWQgRmlu
ZENvbnRyb2xsZXI6OndpbGxNb3ZlVG9QYWdlKFBhZ2VPdmVybGF5JiwgUGFnZSogcGFnZSkKIHsK
LSAgICBpZiAod2ViUGFnZSkKKyAgICBpZiAocGFnZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
QVNTRVJUKG1fZmluZFBhZ2VPdmVybGF5KTsKICAgICBtX2ZpbmRQYWdlT3ZlcmxheSA9IDA7CiB9
CiAgICAgCi12b2lkIEZpbmRDb250cm9sbGVyOjpkaWRNb3ZlVG9XZWJQYWdlKFBhZ2VPdmVybGF5
KiwgV2ViUGFnZSopCit2b2lkIEZpbmRDb250cm9sbGVyOjpkaWRNb3ZlVG9QYWdlKFBhZ2VPdmVy
bGF5JiwgUGFnZSopCiB7CiB9CiAKQEAgLTQ2OCw3ICs0NzAsNyBAQCBjb25zdCBmbG9hdCBzaGFk
b3dCbHVyUmFkaXVzID0gMTsKIGNvbnN0IGZsb2F0IHNoYWRvd0NvbG9yQWxwaGEgPSAwLjU7CiAj
ZW5kaWYKIAotdm9pZCBGaW5kQ29udHJvbGxlcjo6ZHJhd1JlY3QoUGFnZU92ZXJsYXkqLCBHcmFw
aGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KQor
dm9pZCBGaW5kQ29udHJvbGxlcjo6ZHJhd1JlY3QoUGFnZU92ZXJsYXkmLCBHcmFwaGljc0NvbnRl
eHQmIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KQogewogICAgIENv
bG9yIG92ZXJsYXlCYWNrZ3JvdW5kQ29sb3IoMC4xZiwgMC4xZiwgMC4xZiwgMC4yNWYpOwogCkBA
IC01MDYsOSArNTA4LDkgQEAgdm9pZCBGaW5kQ29udHJvbGxlcjo6ZHJhd1JlY3QoUGFnZU92ZXJs
YXkqLCBHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgY28KICAgICB9CiB9CiAKLWJv
b2wgRmluZENvbnRyb2xsZXI6Om1vdXNlRXZlbnQoUGFnZU92ZXJsYXkqLCBjb25zdCBXZWJNb3Vz
ZUV2ZW50JiBtb3VzZUV2ZW50KQorYm9vbCBGaW5kQ29udHJvbGxlcjo6bW91c2VFdmVudChQYWdl
T3ZlcmxheSYsIGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgbW91c2VFdmVudCkKIHsKLSAgICBp
ZiAobW91c2VFdmVudC50eXBlKCkgPT0gV2ViRXZlbnQ6Ok1vdXNlRG93bikKKyAgICBpZiAobW91
c2VFdmVudC50eXBlKCkgPT0gUGxhdGZvcm1FdmVudDo6TW91c2VQcmVzc2VkKQogICAgICAgICBo
aWRlRmluZFVJKCk7CiAKICAgICByZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5oCmluZGV4IDI4MDYzZmMuLjkwNWVk
MWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29u
dHJvbGxlci5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29u
dHJvbGxlci5oCkBAIC0yNiwxMCArMjYsMTAgQEAKICNpZm5kZWYgRmluZENvbnRyb2xsZXJfaAog
I2RlZmluZSBGaW5kQ29udHJvbGxlcl9oCiAKLSNpbmNsdWRlICJQYWdlT3ZlcmxheS5oIgogI2lu
Y2x1ZGUgIlNoYXJlYWJsZUJpdG1hcC5oIgogI2luY2x1ZGUgIldlYkZpbmRPcHRpb25zLmgiCiAj
aW5jbHVkZSA8V2ViQ29yZS9JbnRSZWN0Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9QYWdlT3Zlcmxh
eS5oPgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxl
Lmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgpAQCAtNDUsMTAgKzQ1LDkgQEAgY2xhc3MgUmFu
Z2U7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1jbGFzcyBQYWdlT3ZlcmxheTsKIGNsYXNzIFdl
YlBhZ2U7CiAKLWNsYXNzIEZpbmRDb250cm9sbGVyIDogcHJpdmF0ZSBQYWdlT3ZlcmxheTo6Q2xp
ZW50IHsKK2NsYXNzIEZpbmRDb250cm9sbGVyIDogcHJpdmF0ZSBXZWJDb3JlOjpQYWdlT3Zlcmxh
eTo6Q2xpZW50IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShGaW5kQ29udHJvbGxlcik7CiAK
IHB1YmxpYzoKQEAgLTcxLDExICs3MCwxMSBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgLy8g
UGFnZU92ZXJsYXk6OkNsaWVudC4KLSAgICB2aXJ0dWFsIHZvaWQgcGFnZU92ZXJsYXlEZXN0cm95
ZWQoUGFnZU92ZXJsYXkqKTsKLSAgICB2aXJ0dWFsIHZvaWQgd2lsbE1vdmVUb1dlYlBhZ2UoUGFn
ZU92ZXJsYXkqLCBXZWJQYWdlKik7Ci0gICAgdmlydHVhbCB2b2lkIGRpZE1vdmVUb1dlYlBhZ2Uo
UGFnZU92ZXJsYXkqLCBXZWJQYWdlKik7Ci0gICAgdmlydHVhbCBib29sIG1vdXNlRXZlbnQoUGFn
ZU92ZXJsYXkqLCBjb25zdCBXZWJNb3VzZUV2ZW50Jik7Ci0gICAgdmlydHVhbCB2b2lkIGRyYXdS
ZWN0KFBhZ2VPdmVybGF5KiwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiwgY29uc3QgV2ViQ29y
ZTo6SW50UmVjdCYgZGlydHlSZWN0KTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFnZU92ZXJsYXlEZXN0
cm95ZWQoV2ViQ29yZTo6UGFnZU92ZXJsYXkmKTsKKyAgICB2aXJ0dWFsIHZvaWQgd2lsbE1vdmVU
b1BhZ2UoV2ViQ29yZTo6UGFnZU92ZXJsYXkmLCBXZWJDb3JlOjpQYWdlKik7CisgICAgdmlydHVh
bCB2b2lkIGRpZE1vdmVUb1BhZ2UoV2ViQ29yZTo6UGFnZU92ZXJsYXkmLCBXZWJDb3JlOjpQYWdl
Kik7CisgICAgdmlydHVhbCBib29sIG1vdXNlRXZlbnQoV2ViQ29yZTo6UGFnZU92ZXJsYXkmLCBj
b25zdCBXZWJDb3JlOjpQbGF0Zm9ybU1vdXNlRXZlbnQmKTsKKyAgICB2aXJ0dWFsIHZvaWQgZHJh
d1JlY3QoV2ViQ29yZTo6UGFnZU92ZXJsYXkmLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmLCBj
b25zdCBXZWJDb3JlOjpJbnRSZWN0JiBkaXJ0eVJlY3QpOwogCiAgICAgVmVjdG9yPFdlYkNvcmU6
OkludFJlY3Q+IHJlY3RzRm9yVGV4dE1hdGNoZXMoKTsKICAgICBib29sIGdldEZpbmRJbmRpY2F0
b3JCaXRtYXBBbmRSZWN0KFdlYkNvcmU6OkZyYW1lJiwgU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUm
LCBXZWJDb3JlOjpJbnRSZWN0JiBzZWxlY3Rpb25SZWN0KTsKQEAgLTg4LDcgKzg3LDcgQEAgcHJp
dmF0ZToKICAgICB2b2lkIGRpZEhpZGVGaW5kSW5kaWNhdG9yKCk7CiAKICAgICBXZWJQYWdlKiBt
X3dlYlBhZ2U7Ci0gICAgUGFnZU92ZXJsYXkqIG1fZmluZFBhZ2VPdmVybGF5OworICAgIFdlYkNv
cmU6OlBhZ2VPdmVybGF5KiBtX2ZpbmRQYWdlT3ZlcmxheTsKIAogICAgIC8vIFdoZXRoZXIgdGhl
IFVJIHByb2Nlc3MgaXMgc2hvd2luZyB0aGUgZmluZCBpbmRpY2F0b3IuIE5vdGUgdGhhdCB0aGlz
IGNhbiBiZSB0cnVlIGV2ZW4gaWYKICAgICAvLyB0aGUgZmluZCBpbmRpY2F0b3IgaXNuJ3Qgc2hv
d2luZywgYnV0IGl0IHdpbGwgbmV2ZXIgYmUgZmFsc2Ugd2hlbiBpdCBpcyBzaG93aW5nLgpAQCAt
OTksNyArOTgsNyBAQCBwcml2YXRlOgogICAgIGludCBtX2ZvdW5kU3RyaW5nTWF0Y2hJbmRleDsK
IAogI2lmIFBMQVRGT1JNKElPUykKLSAgICBSZWZQdHI8UGFnZU92ZXJsYXk+IG1fZmluZEluZGlj
YXRvck92ZXJsYXk7CisgICAgUmVmUHRyPFdlYkNvcmU6OlBhZ2VPdmVybGF5PiBtX2ZpbmRJbmRp
Y2F0b3JPdmVybGF5OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxGaW5kSW5kaWNhdG9yT3ZlcmxheUNs
aWVudElPUz4gbV9maW5kSW5kaWNhdG9yT3ZlcmxheUNsaWVudDsKICNlbmRpZgogfTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVIb3N0Lmgg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlSG9zdC5oCmluZGV4
IDNmZDQ5NTQuLjY0ZWVjNTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9MYXllclRyZWVIb3N0LmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL0xheWVyVHJlZUhvc3QuaApAQCAtNDcsNyArNDcsNiBAQCBjbGFzcyBHcmFwaGljc0xh
eWVyRmFjdG9yeTsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLWNsYXNzIFBhZ2VPdmVybGF5Owog
Y2xhc3MgVXBkYXRlSW5mbzsKIGNsYXNzIFdlYlBhZ2U7CiAKQEAgLTcyLDExICs3MSw2IEBAIHB1
YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZGV2aWNlT3JQYWdlU2NhbGVGYWN0b3JDaGFuZ2VkKCkg
PSAwOwogICAgIHZpcnR1YWwgdm9pZCBwYWdlQmFja2dyb3VuZFRyYW5zcGFyZW5jeUNoYW5nZWQo
KSA9IDA7CiAKLSAgICB2aXJ0dWFsIHZvaWQgZGlkSW5zdGFsbFBhZ2VPdmVybGF5KFBhZ2VPdmVy
bGF5KikgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGRpZFVuaW5zdGFsbFBhZ2VPdmVybGF5KFBhZ2VP
dmVybGF5KikgeyB9Ci0gICAgdmlydHVhbCB2b2lkIHNldFBhZ2VPdmVybGF5TmVlZHNEaXNwbGF5
KFBhZ2VPdmVybGF5KiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpIHsgfQotICAgIHZpcnR1YWwg
dm9pZCBzZXRQYWdlT3ZlcmxheU9wYWNpdHkoUGFnZU92ZXJsYXkqLCBmbG9hdCkgeyB9Ci0KICAg
ICB2aXJ0dWFsIHZvaWQgcGF1c2VSZW5kZXJpbmcoKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgcmVz
dW1lUmVuZGVyaW5nKCkgeyB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9QYWdlT3ZlcmxheS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvUGFnZU92ZXJsYXkuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZDg4
MWI2Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9QYWdl
T3ZlcmxheS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyNTEgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJQYWdlT3ZlcmxheS5oIgotCi0jaW5jbHVk
ZSAiV2ViUGFnZS5oIgotI2luY2x1ZGUgIldlYlByb2Nlc3MuaCIKLSNpbmNsdWRlIDxXZWJDb3Jl
L0ZyYW1lVmlldy5oPgotI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+Ci0jaW5j
bHVkZSA8V2ViQ29yZS9NYWluRnJhbWUuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1BhZ2UuaD4KLSNp
bmNsdWRlIDxXZWJDb3JlL1Njcm9sbGJhclRoZW1lLmg+Ci0jaW5jbHVkZSA8d3RmL0N1cnJlbnRU
aW1lLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1uYW1lc3BhY2UgV2ViS2l0IHsK
LQotc3RhdGljIGNvbnN0IGRvdWJsZSBmYWRlQW5pbWF0aW9uRHVyYXRpb24gPSAwLjI7Ci1zdGF0
aWMgY29uc3QgZG91YmxlIGZhZGVBbmltYXRpb25GcmFtZVJhdGUgPSAzMDsKLQotUGFzc1JlZlB0
cjxQYWdlT3ZlcmxheT4gUGFnZU92ZXJsYXk6OmNyZWF0ZShDbGllbnQqIGNsaWVudCwgT3Zlcmxh
eVR5cGUgb3ZlcmxheVR5cGUpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBQYWdlT3Zlcmxh
eShjbGllbnQsIG92ZXJsYXlUeXBlKSk7Ci19Ci0KLVBhZ2VPdmVybGF5OjpQYWdlT3ZlcmxheShD
bGllbnQqIGNsaWVudCwgT3ZlcmxheVR5cGUgb3ZlcmxheVR5cGUpCi0gICAgOiBtX2NsaWVudChj
bGllbnQpCi0gICAgLCBtX3dlYlBhZ2UobnVsbHB0cikKLSAgICAsIG1fZmFkZUFuaW1hdGlvblRp
bWVyKFJ1bkxvb3A6Om1haW4oKSwgdGhpcywgJlBhZ2VPdmVybGF5OjpmYWRlQW5pbWF0aW9uVGlt
ZXJGaXJlZCkKLSAgICAsIG1fZmFkZUFuaW1hdGlvblN0YXJ0VGltZSgwKQotICAgICwgbV9mYWRl
QW5pbWF0aW9uRHVyYXRpb24oZmFkZUFuaW1hdGlvbkR1cmF0aW9uKQotICAgICwgbV9mYWRlQW5p
bWF0aW9uVHlwZShOb0FuaW1hdGlvbikKLSAgICAsIG1fZnJhY3Rpb25GYWRlZEluKDEpCi0gICAg
LCBtX292ZXJsYXlUeXBlKG92ZXJsYXlUeXBlKQotICAgICwgbV9iYWNrZ3JvdW5kQ29sb3IoQ29s
b3I6OnRyYW5zcGFyZW50KQotewotfQotCi1QYWdlT3ZlcmxheTo6flBhZ2VPdmVybGF5KCkKLXsK
LX0KLQotSW50UmVjdCBQYWdlT3ZlcmxheTo6Ym91bmRzKCkgY29uc3QKLXsKLSAgICBpZiAoIW1f
b3ZlcnJpZGVGcmFtZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBJbnRSZWN0KEludFBvaW50
KCksIG1fb3ZlcnJpZGVGcmFtZS5zaXplKCkpOwotCi0gICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcg
PSBtX3dlYlBhZ2UtPm1haW5GcmFtZVZpZXcoKTsKLQotICAgIHN3aXRjaCAobV9vdmVybGF5VHlw
ZSkgewotICAgIGNhc2UgT3ZlcmxheVR5cGU6OlZpZXc6IHsKLSAgICAgICAgaW50IHdpZHRoID0g
ZnJhbWVWaWV3LT53aWR0aCgpOwotICAgICAgICBpbnQgaGVpZ2h0ID0gZnJhbWVWaWV3LT5oZWln
aHQoKTsKLQotICAgICAgICBpZiAoIVNjcm9sbGJhclRoZW1lOjp0aGVtZSgpLT51c2VzT3Zlcmxh
eVNjcm9sbGJhcnMoKSkgewotICAgICAgICAgICAgaWYgKGZyYW1lVmlldy0+dmVydGljYWxTY3Jv
bGxiYXIoKSkKLSAgICAgICAgICAgICAgICB3aWR0aCAtPSBmcmFtZVZpZXctPnZlcnRpY2FsU2Ny
b2xsYmFyKCktPndpZHRoKCk7Ci0gICAgICAgICAgICBpZiAoZnJhbWVWaWV3LT5ob3Jpem9udGFs
U2Nyb2xsYmFyKCkpCi0gICAgICAgICAgICAgICAgaGVpZ2h0IC09IGZyYW1lVmlldy0+aG9yaXpv
bnRhbFNjcm9sbGJhcigpLT5oZWlnaHQoKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gSW50
UmVjdCgwLCAwLCB3aWR0aCwgaGVpZ2h0KTsKLSAgICB9Ci0gICAgY2FzZSBPdmVybGF5VHlwZTo6
RG9jdW1lbnQ6Ci0gICAgICAgIHJldHVybiBJbnRSZWN0KEludFBvaW50KCksIGZyYW1lVmlldy0+
Y29udGVudHNTaXplKCkpOwotICAgIH07Ci0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAg
ICByZXR1cm4gSW50UmVjdChJbnRQb2ludCgpLCBmcmFtZVZpZXctPmNvbnRlbnRzU2l6ZSgpKTsK
LX0KLQotSW50UmVjdCBQYWdlT3ZlcmxheTo6ZnJhbWUoKSBjb25zdAotewotICAgIGlmICghbV9v
dmVycmlkZUZyYW1lLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIG1fb3ZlcnJpZGVGcmFtZTsK
LQotICAgIHJldHVybiBib3VuZHMoKTsKLX0KLQotdm9pZCBQYWdlT3ZlcmxheTo6c2V0RnJhbWUo
SW50UmVjdCBmcmFtZSkKLXsKLSAgICBpZiAobV9vdmVycmlkZUZyYW1lID09IGZyYW1lKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBtX292ZXJyaWRlRnJhbWUgPSBmcmFtZTsKLQotICAgIGlmICht
X3dlYlBhZ2UpCi0gICAgICAgIG1fd2ViUGFnZS0+cGFnZU92ZXJsYXlDb250cm9sbGVyKCkuZGlk
Q2hhbmdlT3ZlcmxheUZyYW1lKCp0aGlzKTsKLX0KLQotdm9pZCBQYWdlT3ZlcmxheTo6c2V0QmFj
a2dyb3VuZENvbG9yKFJHQkEzMiBiYWNrZ3JvdW5kQ29sb3IpCi17Ci0gICAgaWYgKG1fYmFja2dy
b3VuZENvbG9yID09IGJhY2tncm91bmRDb2xvcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9i
YWNrZ3JvdW5kQ29sb3IgPSBiYWNrZ3JvdW5kQ29sb3I7Ci0KLSAgICBpZiAobV93ZWJQYWdlKQot
ICAgICAgICBtX3dlYlBhZ2UtPnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLmRpZENoYW5nZU92ZXJs
YXlCYWNrZ3JvdW5kQ29sb3IoKnRoaXMpOwotfQotCi12b2lkIFBhZ2VPdmVybGF5OjpzZXRQYWdl
KFdlYlBhZ2UqIHdlYlBhZ2UpCi17Ci0gICAgbV9jbGllbnQtPndpbGxNb3ZlVG9XZWJQYWdlKHRo
aXMsIHdlYlBhZ2UpOwotICAgIG1fd2ViUGFnZSA9IHdlYlBhZ2U7Ci0gICAgbV9jbGllbnQtPmRp
ZE1vdmVUb1dlYlBhZ2UodGhpcywgd2ViUGFnZSk7Ci0KLSAgICBtX2ZhZGVBbmltYXRpb25UaW1l
ci5zdG9wKCk7Ci19Ci0KLXZvaWQgUGFnZU92ZXJsYXk6OnNldE5lZWRzRGlzcGxheShjb25zdCBJ
bnRSZWN0JiBkaXJ0eVJlY3QpCi17Ci0gICAgaWYgKCFtX3dlYlBhZ2UpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIG1fd2ViUGFnZS0+cGFnZU92ZXJsYXlDb250cm9sbGVyKCkuc2V0UGFnZU92ZXJs
YXlPcGFjaXR5KCp0aGlzLCBtX2ZyYWN0aW9uRmFkZWRJbik7Ci0gICAgbV93ZWJQYWdlLT5wYWdl
T3ZlcmxheUNvbnRyb2xsZXIoKS5zZXRQYWdlT3ZlcmxheU5lZWRzRGlzcGxheSgqdGhpcywgZGly
dHlSZWN0KTsKLX0KLQotdm9pZCBQYWdlT3ZlcmxheTo6c2V0TmVlZHNEaXNwbGF5KCkKLXsKLSAg
ICBzZXROZWVkc0Rpc3BsYXkoYm91bmRzKCkpOwotfQotCi12b2lkIFBhZ2VPdmVybGF5OjpkcmF3
UmVjdChHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgSW50UmVjdCYgZGly
dHlSZWN0KQotewotICAgIC8vIElmIHRoZSBkaXJ0eSByZWN0IGlzIG91dHNpZGUgdGhlIGJvdW5k
cywgaWdub3JlIGl0LgotICAgIEludFJlY3QgcGFpbnRSZWN0ID0gaW50ZXJzZWN0aW9uKGRpcnR5
UmVjdCwgYm91bmRzKCkpOwotICAgIGlmIChwYWludFJlY3QuaXNFbXB0eSgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoZ3JhcGhp
Y3NDb250ZXh0KTsKLSAgICBtX2NsaWVudC0+ZHJhd1JlY3QodGhpcywgZ3JhcGhpY3NDb250ZXh0
LCBwYWludFJlY3QpOwotfQotICAgIAotYm9vbCBQYWdlT3ZlcmxheTo6bW91c2VFdmVudChjb25z
dCBXZWJNb3VzZUV2ZW50JiBtb3VzZUV2ZW50KQotewotICAgIEludFBvaW50IG1vdXNlUG9zaXRp
b25Jbk92ZXJsYXlDb29yZGluYXRlcyhtb3VzZUV2ZW50LnBvc2l0aW9uKCkpOwotCi0gICAgaWYg
KG1fb3ZlcmxheVR5cGUgPT0gUGFnZU92ZXJsYXk6Ok92ZXJsYXlUeXBlOjpEb2N1bWVudCkKLSAg
ICAgICAgbW91c2VQb3NpdGlvbkluT3ZlcmxheUNvb3JkaW5hdGVzID0gbV93ZWJQYWdlLT5jb3Jl
UGFnZSgpLT5tYWluRnJhbWUoKS52aWV3KCktPnJvb3RWaWV3VG9Db250ZW50cyhtb3VzZVBvc2l0
aW9uSW5PdmVybGF5Q29vcmRpbmF0ZXMpOwotCi0gICAgLy8gSWdub3JlIGV2ZW50cyBvdXRzaWRl
IHRoZSBib3VuZHMuCi0gICAgaWYgKCFib3VuZHMoKS5jb250YWlucyhtb3VzZVBvc2l0aW9uSW5P
dmVybGF5Q29vcmRpbmF0ZXMpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4g
bV9jbGllbnQtPm1vdXNlRXZlbnQodGhpcywgbW91c2VFdmVudCk7Ci19Ci0KLXZvaWQgUGFnZU92
ZXJsYXk6OmRpZFNjcm9sbEZyYW1lKEZyYW1lKiBmcmFtZSkKLXsKLSAgICBtX2NsaWVudC0+ZGlk
U2Nyb2xsRnJhbWUodGhpcywgZnJhbWUpOwotfQotCi1XS1R5cGVSZWYgUGFnZU92ZXJsYXk6OmNv
cHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWUoV0tTdHJpbmdSZWYgYXR0cmlidXRlLCBXS1R5
cGVSZWYgcGFyYW1ldGVyKQotewotICAgIHJldHVybiBtX2NsaWVudC0+Y29weUFjY2Vzc2liaWxp
dHlBdHRyaWJ1dGVWYWx1ZSh0aGlzLCBhdHRyaWJ1dGUsIHBhcmFtZXRlcik7Ci19Ci0KLVdLQXJy
YXlSZWYgUGFnZU92ZXJsYXk6OmNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlTmFtZXMoYm9vbCBw
YXJhbWV0ZXJpemVkTmFtZXMpCi17Ci0gICAgcmV0dXJuIG1fY2xpZW50LT5jb3B5QWNjZXNzaWJp
bGl0eUF0dHJpYnV0ZU5hbWVzKHRoaXMsIHBhcmFtZXRlcml6ZWROYW1lcyk7Ci19Ci0KLXZvaWQg
UGFnZU92ZXJsYXk6OnN0YXJ0RmFkZUluQW5pbWF0aW9uKCkKLXsKLSAgICBtX2ZyYWN0aW9uRmFk
ZWRJbiA9IDA7Ci0gICAgbV9mYWRlQW5pbWF0aW9uVHlwZSA9IEZhZGVJbkFuaW1hdGlvbjsKLQot
ICAgIHN0YXJ0RmFkZUFuaW1hdGlvbigpOwotfQotCi12b2lkIFBhZ2VPdmVybGF5OjpzdGFydEZh
ZGVPdXRBbmltYXRpb24oKQotewotICAgIG1fZnJhY3Rpb25GYWRlZEluID0gMTsKLSAgICBtX2Zh
ZGVBbmltYXRpb25UeXBlID0gRmFkZU91dEFuaW1hdGlvbjsKLQotICAgIHN0YXJ0RmFkZUFuaW1h
dGlvbigpOwotfQotCi12b2lkIFBhZ2VPdmVybGF5OjpzdG9wRmFkZU91dEFuaW1hdGlvbigpCi17
Ci0gICAgbV9mcmFjdGlvbkZhZGVkSW4gPSAxLjA7Ci0gICAgbV9mYWRlQW5pbWF0aW9uVGltZXIu
c3RvcCgpOwotfQotCi12b2lkIFBhZ2VPdmVybGF5OjpzdGFydEZhZGVBbmltYXRpb24oKQotewot
ICAgIG1fZmFkZUFuaW1hdGlvblN0YXJ0VGltZSA9IGN1cnJlbnRUaW1lKCk7Ci0gICAgbV9mYWRl
QW5pbWF0aW9uVGltZXIuc3RhcnRSZXBlYXRpbmcoMSAvIGZhZGVBbmltYXRpb25GcmFtZVJhdGUp
OwotfQotCi12b2lkIFBhZ2VPdmVybGF5OjpmYWRlQW5pbWF0aW9uVGltZXJGaXJlZCgpCi17Ci0g
ICAgZmxvYXQgYW5pbWF0aW9uUHJvZ3Jlc3MgPSAoY3VycmVudFRpbWUoKSAtIG1fZmFkZUFuaW1h
dGlvblN0YXJ0VGltZSkgLyBtX2ZhZGVBbmltYXRpb25EdXJhdGlvbjsKLQotICAgIGlmIChhbmlt
YXRpb25Qcm9ncmVzcyA+PSAxLjApCi0gICAgICAgIGFuaW1hdGlvblByb2dyZXNzID0gMS4wOwot
Ci0gICAgZG91YmxlIHNpbmUgPSBzaW4ocGlPdmVyVHdvRmxvYXQgKiBhbmltYXRpb25Qcm9ncmVz
cyk7Ci0gICAgZmxvYXQgZmFkZUFuaW1hdGlvblZhbHVlID0gc2luZSAqIHNpbmU7Ci0KLSAgICBt
X2ZyYWN0aW9uRmFkZWRJbiA9IChtX2ZhZGVBbmltYXRpb25UeXBlID09IEZhZGVJbkFuaW1hdGlv
bikgPyBmYWRlQW5pbWF0aW9uVmFsdWUgOiAxIC0gZmFkZUFuaW1hdGlvblZhbHVlOwotICAgIG1f
d2ViUGFnZS0+cGFnZU92ZXJsYXlDb250cm9sbGVyKCkuc2V0UGFnZU92ZXJsYXlPcGFjaXR5KCp0
aGlzLCBtX2ZyYWN0aW9uRmFkZWRJbik7Ci0KLSAgICBpZiAoYW5pbWF0aW9uUHJvZ3Jlc3MgPT0g
MS4wKSB7Ci0gICAgICAgIG1fZmFkZUFuaW1hdGlvblRpbWVyLnN0b3AoKTsKLQotICAgICAgICBi
b29sIHdhc0ZhZGluZ091dCA9IG1fZmFkZUFuaW1hdGlvblR5cGUgPT0gRmFkZU91dEFuaW1hdGlv
bjsKLSAgICAgICAgbV9mYWRlQW5pbWF0aW9uVHlwZSA9IE5vQW5pbWF0aW9uOwotCi0gICAgICAg
IC8vIElmIHRoaXMgd2FzIGEgZmFkZSBvdXQsIGdvIGFoZWFkIGFuZCB1bmluc3RhbGwgdGhlIHBh
Z2Ugb3ZlcmxheS4KLSAgICAgICAgaWYgKHdhc0ZhZGluZ091dCkKLSAgICAgICAgICAgIG1fd2Vi
UGFnZS0+dW5pbnN0YWxsUGFnZU92ZXJsYXkodGhpcywgUGFnZU92ZXJsYXk6OkZhZGVNb2RlOjpE
b05vdEZhZGUpOwotICAgIH0KLX0KLQotdm9pZCBQYWdlT3ZlcmxheTo6Y2xlYXIoKQotewotICAg
IG1fd2ViUGFnZS0+cGFnZU92ZXJsYXlDb250cm9sbGVyKCkuY2xlYXJQYWdlT3ZlcmxheSgqdGhp
cyk7Ci19Ci0KLVdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqIFBhZ2VPdmVybGF5OjpsYXllcigpCi17
Ci0gICAgcmV0dXJuIG1fd2ViUGFnZS0+cGFnZU92ZXJsYXlDb250cm9sbGVyKCkubGF5ZXJGb3JP
dmVybGF5KCp0aGlzKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvUGFnZU92ZXJsYXkuaCBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9QYWdlT3ZlcmxheS5oCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAzMjI1ZjBkLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9QYWdlT3ZlcmxheS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTM3ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFBhZ2VPdmVybGF5X2gKLSNkZWZpbmUgUGFnZU92ZXJs
YXlfaAotCi0jaW5jbHVkZSAiQVBJT2JqZWN0LmgiCi0jaW5jbHVkZSAiV0tCYXNlLmgiCi0jaW5j
bHVkZSA8V2ViQ29yZS9Db2xvci5oPgotI2luY2x1ZGUgPFdlYkNvcmUvSW50UmVjdC5oPgotI2lu
Y2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotY2xhc3MgRnJhbWU7Ci1jbGFzcyBHcmFwaGljc0NvbnRleHQ7Ci1j
bGFzcyBHcmFwaGljc0xheWVyOwotfQotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgV2Vi
RnJhbWU7Ci1jbGFzcyBXZWJNb3VzZUV2ZW50OwotY2xhc3MgV2ViUGFnZTsKLQotY2xhc3MgUGFn
ZU92ZXJsYXkgOiBwdWJsaWMgQVBJOjpPYmplY3RJbXBsPEFQSTo6T2JqZWN0OjpUeXBlOjpCdW5k
bGVQYWdlT3ZlcmxheT4gewotcHVibGljOgotICAgIGNsYXNzIENsaWVudCB7Ci0gICAgcHJvdGVj
dGVkOgotICAgICAgICB2aXJ0dWFsIH5DbGllbnQoKSB7IH0KLSAgICAKLSAgICBwdWJsaWM6Ci0g
ICAgICAgIHZpcnR1YWwgdm9pZCBwYWdlT3ZlcmxheURlc3Ryb3llZChQYWdlT3ZlcmxheSopID0g
MDsKLSAgICAgICAgdmlydHVhbCB2b2lkIHdpbGxNb3ZlVG9XZWJQYWdlKFBhZ2VPdmVybGF5Kiwg
V2ViUGFnZSopID0gMDsKLSAgICAgICAgdmlydHVhbCB2b2lkIGRpZE1vdmVUb1dlYlBhZ2UoUGFn
ZU92ZXJsYXkqLCBXZWJQYWdlKikgPSAwOwotICAgICAgICB2aXJ0dWFsIHZvaWQgZHJhd1JlY3Qo
UGFnZU92ZXJsYXkqLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmLCBjb25zdCBXZWJDb3JlOjpJ
bnRSZWN0JiBkaXJ0eVJlY3QpID0gMDsKLSAgICAgICAgdmlydHVhbCBib29sIG1vdXNlRXZlbnQo
UGFnZU92ZXJsYXkqLCBjb25zdCBXZWJNb3VzZUV2ZW50JikgPSAwOwotICAgICAgICB2aXJ0dWFs
IHZvaWQgZGlkU2Nyb2xsRnJhbWUoUGFnZU92ZXJsYXkqLCBXZWJDb3JlOjpGcmFtZSopIHsgfQot
Ci0gICAgICAgIHZpcnR1YWwgV0tUeXBlUmVmIGNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFs
dWUoUGFnZU92ZXJsYXkqLCBXS1N0cmluZ1JlZiAvKiBhdHRyaWJ1dGUgKi8sIFdLVHlwZVJlZiAv
KiBwYXJhbWV0ZXIgKi8pIHsgcmV0dXJuIDA7IH0KLSAgICAgICAgdmlydHVhbCBXS0FycmF5UmVm
IGNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlTmFtZXMoUGFnZU92ZXJsYXkqLCBib29sIC8qIHBh
cmFtZXRlcml6ZWROYW1lcyAqLykgeyByZXR1cm4gMDsgfQotICAgIH07Ci0KLSAgICBlbnVtIGNs
YXNzIE92ZXJsYXlUeXBlIHsKLSAgICAgICAgVmlldywgLy8gRml4ZWQgdG8gdGhlIHZpZXcgc2l6
ZTsgZG9lcyBub3Qgc2NhbGUgb3Igc2Nyb2xsIHdpdGggdGhlIGRvY3VtZW50LCByZXBhaW50cyBv
biBzY3JvbGwuCi0gICAgICAgIERvY3VtZW50LCAvLyBTY2FsZXMgYW5kIHNjcm9sbHMgd2l0aCB0
aGUgZG9jdW1lbnQuCi0gICAgfTsKLQotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFBhZ2VPdmVybGF5
PiBjcmVhdGUoQ2xpZW50KiwgT3ZlcmxheVR5cGUgPSBPdmVybGF5VHlwZTo6Vmlldyk7Ci0gICAg
dmlydHVhbCB+UGFnZU92ZXJsYXkoKTsKLQotICAgIHZvaWQgc2V0UGFnZShXZWJQYWdlKik7Ci0g
ICAgdm9pZCBzZXROZWVkc0Rpc3BsYXkoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgZGlydHlSZWN0
KTsKLSAgICB2b2lkIHNldE5lZWRzRGlzcGxheSgpOwotCi0gICAgdm9pZCBkcmF3UmVjdChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQmLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBkaXJ0eVJlY3Qp
OwotICAgIGJvb2wgbW91c2VFdmVudChjb25zdCBXZWJNb3VzZUV2ZW50Jik7Ci0gICAgdm9pZCBk
aWRTY3JvbGxGcmFtZShXZWJDb3JlOjpGcmFtZSopOwotCi0gICAgV0tUeXBlUmVmIGNvcHlBY2Nl
c3NpYmlsaXR5QXR0cmlidXRlVmFsdWUoV0tTdHJpbmdSZWYgYXR0cmlidXRlLCBXS1R5cGVSZWYg
cGFyYW1ldGVyKTsKLSAgICBXS0FycmF5UmVmIGNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlTmFt
ZXMoYm9vbCBwYXJhbWV0ZXJpemVkTmFtZXMpOwotICAgIAotICAgIHZvaWQgc3RhcnRGYWRlSW5B
bmltYXRpb24oKTsKLSAgICB2b2lkIHN0YXJ0RmFkZU91dEFuaW1hdGlvbigpOwotICAgIHZvaWQg
c3RvcEZhZGVPdXRBbmltYXRpb24oKTsKLQotICAgIHZvaWQgY2xlYXIoKTsKLQotICAgIENsaWVu
dCogY2xpZW50KCkgY29uc3QgeyByZXR1cm4gbV9jbGllbnQ7IH0KLQotICAgIGVudW0gY2xhc3Mg
RmFkZU1vZGUgeyBEb05vdEZhZGUsIEZhZGUgfTsKLQotICAgIE92ZXJsYXlUeXBlIG92ZXJsYXlU
eXBlKCkgeyByZXR1cm4gbV9vdmVybGF5VHlwZTsgfQotCi0gICAgV2ViQ29yZTo6SW50UmVjdCBi
b3VuZHMoKSBjb25zdDsKLSAgICBXZWJDb3JlOjpJbnRSZWN0IGZyYW1lKCkgY29uc3Q7Ci0gICAg
dm9pZCBzZXRGcmFtZShXZWJDb3JlOjpJbnRSZWN0KTsKLQotICAgIFdlYkNvcmU6OlJHQkEzMiBi
YWNrZ3JvdW5kQ29sb3IoKSBjb25zdCB7IHJldHVybiBtX2JhY2tncm91bmRDb2xvcjsgfQotICAg
IHZvaWQgc2V0QmFja2dyb3VuZENvbG9yKFdlYkNvcmU6OlJHQkEzMik7Ci0KLSAgICBXZWJDb3Jl
OjpHcmFwaGljc0xheWVyKiBsYXllcigpOwotICAgIAotcHJvdGVjdGVkOgotICAgIGV4cGxpY2l0
IFBhZ2VPdmVybGF5KENsaWVudCosIE92ZXJsYXlUeXBlKTsKLQotcHJpdmF0ZToKLSAgICB2b2lk
IHN0YXJ0RmFkZUFuaW1hdGlvbigpOwotICAgIHZvaWQgZmFkZUFuaW1hdGlvblRpbWVyRmlyZWQo
KTsKLQotICAgIENsaWVudCogbV9jbGllbnQ7Ci0gICAgV2ViUGFnZSogbV93ZWJQYWdlOwotCi0g
ICAgUnVuTG9vcDo6VGltZXI8UGFnZU92ZXJsYXk+IG1fZmFkZUFuaW1hdGlvblRpbWVyOwotICAg
IGRvdWJsZSBtX2ZhZGVBbmltYXRpb25TdGFydFRpbWU7Ci0gICAgZG91YmxlIG1fZmFkZUFuaW1h
dGlvbkR1cmF0aW9uOwotCi0gICAgZW51bSBGYWRlQW5pbWF0aW9uVHlwZSB7Ci0gICAgICAgIE5v
QW5pbWF0aW9uLAotICAgICAgICBGYWRlSW5BbmltYXRpb24sCi0gICAgICAgIEZhZGVPdXRBbmlt
YXRpb24sCi0gICAgfTsKLQotICAgIEZhZGVBbmltYXRpb25UeXBlIG1fZmFkZUFuaW1hdGlvblR5
cGU7Ci0gICAgZmxvYXQgbV9mcmFjdGlvbkZhZGVkSW47Ci0KLSAgICBPdmVybGF5VHlwZSBtX292
ZXJsYXlUeXBlOwotICAgIFdlYkNvcmU6OkludFJlY3QgbV9vdmVycmlkZUZyYW1lOwotCi0gICAg
V2ViQ29yZTo6UkdCQTMyIG1fYmFja2dyb3VuZENvbG9yOwotfTsKLQotfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0Ci0KLSNlbmRpZiAvLyBQYWdlT3ZlcmxheV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvUGFnZU92ZXJsYXlDb250cm9sbGVyLmNwcCBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9QYWdlT3ZlcmxheUNvbnRyb2xsZXIuY3BwCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NjQ1N2M1Li4wMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9QYWdlT3ZlcmxheUNvbnRyb2xsZXIuY3BwCisr
KyAvZGV2L251bGwKQEAgLTEsMzE0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29u
ZmlnLmgiCi0jaW5jbHVkZSAiUGFnZU92ZXJsYXlDb250cm9sbGVyLmgiCi0KLSNpbmNsdWRlICJE
cmF3aW5nQXJlYS5oIgotI2luY2x1ZGUgIlBhZ2VPdmVybGF5LmgiCi0jaW5jbHVkZSAiV2ViUGFn
ZS5oIgotI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWUuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1l
Vmlldy5oPgotI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+Ci0jaW5jbHVkZSA8
V2ViQ29yZS9HcmFwaGljc0xheWVyLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9NYWluRnJhbWUuaD4K
LSNpbmNsdWRlIDxXZWJDb3JlL1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmg+Ci0jaW5jbHVkZSA8V2Vi
Q29yZS9TZXR0aW5ncy5oPgotI2luY2x1ZGUgPFdlYkNvcmUvVGlsZWRCYWNraW5nLmg+Ci0KLXVz
aW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotUGFnZU92ZXJs
YXlDb250cm9sbGVyOjpQYWdlT3ZlcmxheUNvbnRyb2xsZXIoV2ViUGFnZSYgd2ViUGFnZSkKLSAg
ICA6IG1fd2ViUGFnZSh3ZWJQYWdlKQotewotfQotCi12b2lkIFBhZ2VPdmVybGF5Q29udHJvbGxl
cjo6aW5pdGlhbGl6ZSgpCi17Ci0gICAgQVNTRVJUKCFtX2RvY3VtZW50T3ZlcmxheVJvb3RMYXll
cik7Ci0gICAgQVNTRVJUKCFtX3ZpZXdPdmVybGF5Um9vdExheWVyKTsKLQotICAgIG1fZG9jdW1l
bnRPdmVybGF5Um9vdExheWVyID0gR3JhcGhpY3NMYXllcjo6Y3JlYXRlKG1fd2ViUGFnZS5kcmF3
aW5nQXJlYSgpLT5ncmFwaGljc0xheWVyRmFjdG9yeSgpLCAqdGhpcyk7Ci0gICAgbV92aWV3T3Zl
cmxheVJvb3RMYXllciA9IEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZShtX3dlYlBhZ2UuZHJhd2luZ0Fy
ZWEoKS0+Z3JhcGhpY3NMYXllckZhY3RvcnkoKSwgKnRoaXMpOwotI2lmbmRlZiBOREVCVUcKLSAg
ICBtX2RvY3VtZW50T3ZlcmxheVJvb3RMYXllci0+c2V0TmFtZSgiUGFnZSBPdmVybGF5IGNvbnRh
aW5lciAoZG9jdW1lbnQtcmVsYXRpdmUpIik7Ci0gICAgbV92aWV3T3ZlcmxheVJvb3RMYXllci0+
c2V0TmFtZSgiUGFnZSBPdmVybGF5IGNvbnRhaW5lciAodmlldy1yZWxhdGl2ZSkiKTsKLSNlbmRp
ZgotfQotCi1zdGF0aWMgdm9pZCB1cGRhdGVPdmVybGF5R2VvbWV0cnkoUGFnZU92ZXJsYXkmIG92
ZXJsYXksIEdyYXBoaWNzTGF5ZXImIGdyYXBoaWNzTGF5ZXIpCi17Ci0gICAgSW50UmVjdCBvdmVy
bGF5RnJhbWUgPSBvdmVybGF5LmZyYW1lKCk7Ci0KLSAgICBpZiAob3ZlcmxheUZyYW1lLmxvY2F0
aW9uKCkgPT0gZ3JhcGhpY3NMYXllci5wb3NpdGlvbigpICYmIG92ZXJsYXlGcmFtZS5zaXplKCkg
PT0gZ3JhcGhpY3NMYXllci5zaXplKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGdyYXBoaWNz
TGF5ZXIuc2V0UG9zaXRpb24ob3ZlcmxheUZyYW1lLmxvY2F0aW9uKCkpOwotICAgIGdyYXBoaWNz
TGF5ZXIuc2V0U2l6ZShvdmVybGF5RnJhbWUuc2l6ZSgpKTsKLX0KLQotdm9pZCBQYWdlT3Zlcmxh
eUNvbnRyb2xsZXI6Omluc3RhbGxQYWdlT3ZlcmxheShQYXNzUmVmUHRyPFBhZ2VPdmVybGF5PiBw
YWdlT3ZlcmxheSwgUGFnZU92ZXJsYXk6OkZhZGVNb2RlIGZhZGVNb2RlKQotewotICAgIEFTU0VS
VChtX2RvY3VtZW50T3ZlcmxheVJvb3RMYXllcik7Ci0gICAgQVNTRVJUKG1fdmlld092ZXJsYXlS
b290TGF5ZXIpOwotCi0gICAgUmVmUHRyPFBhZ2VPdmVybGF5PiBvdmVybGF5ID0gcGFnZU92ZXJs
YXk7Ci0KLSAgICBpZiAobV9wYWdlT3ZlcmxheXMuY29udGFpbnMob3ZlcmxheSkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIG1fcGFnZU92ZXJsYXlzLmFwcGVuZChvdmVybGF5KTsKLSAgICBvdmVy
bGF5LT5zZXRQYWdlKCZtX3dlYlBhZ2UpOwotCi0gICAgaWYgKGZhZGVNb2RlID09IFBhZ2VPdmVy
bGF5OjpGYWRlTW9kZTo6RmFkZSkKLSAgICAgICAgb3ZlcmxheS0+c3RhcnRGYWRlSW5BbmltYXRp
b24oKTsKLQotICAgIHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0xheWVyPiBsYXllciA9IEdyYXBo
aWNzTGF5ZXI6OmNyZWF0ZShtX3dlYlBhZ2UuZHJhd2luZ0FyZWEoKS0+Z3JhcGhpY3NMYXllckZh
Y3RvcnkoKSwgKnRoaXMpOwotICAgIGxheWVyLT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50M0Qo
KSk7Ci0gICAgbGF5ZXItPnNldEJhY2tncm91bmRDb2xvcihvdmVybGF5LT5iYWNrZ3JvdW5kQ29s
b3IoKSk7Ci0gICAgdXBkYXRlT3ZlcmxheUdlb21ldHJ5KCpvdmVybGF5LCAqbGF5ZXIpOwotI2lm
bmRlZiBOREVCVUcKLSAgICBsYXllci0+c2V0TmFtZSgiUGFnZSBPdmVybGF5IGNvbnRlbnQiKTsK
LSNlbmRpZgotCi0gICAgdXBkYXRlU2V0dGluZ3NGb3JMYXllcigqbGF5ZXIpOwotCi0gICAgc3dp
dGNoIChvdmVybGF5LT5vdmVybGF5VHlwZSgpKSB7Ci0gICAgY2FzZSBQYWdlT3ZlcmxheTo6T3Zl
cmxheVR5cGU6OlZpZXc6Ci0gICAgICAgIG1fdmlld092ZXJsYXlSb290TGF5ZXItPmFkZENoaWxk
KGxheWVyLmdldCgpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQYWdlT3ZlcmxheTo6T3Zl
cmxheVR5cGU6OkRvY3VtZW50OgotICAgICAgICBtX2RvY3VtZW50T3ZlcmxheVJvb3RMYXllci0+
YWRkQ2hpbGQobGF5ZXIuZ2V0KCkpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBtX292
ZXJsYXlHcmFwaGljc0xheWVycy5zZXQob3ZlcmxheS5nZXQoKSwgV1RGOjptb3ZlKGxheWVyKSk7
Ci0KLSAgICB1cGRhdGVGb3JjZVN5bmNocm9ub3VzU2Nyb2xsTGF5ZXJQb3NpdGlvblVwZGF0ZXMo
KTsKLX0KLQotdm9pZCBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6OnVuaW5zdGFsbFBhZ2VPdmVybGF5
KFBhZ2VPdmVybGF5KiBvdmVybGF5LCBQYWdlT3ZlcmxheTo6RmFkZU1vZGUgZmFkZU1vZGUpCi17
Ci0gICAgaWYgKGZhZGVNb2RlID09IFBhZ2VPdmVybGF5OjpGYWRlTW9kZTo6RmFkZSkgewotICAg
ICAgICBvdmVybGF5LT5zdGFydEZhZGVPdXRBbmltYXRpb24oKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIG92ZXJsYXktPnNldFBhZ2UobnVsbHB0cik7Ci0KLSAgICBtX292ZXJsYXlH
cmFwaGljc0xheWVycy50YWtlKG92ZXJsYXkpLT5yZW1vdmVGcm9tUGFyZW50KCk7Ci0KLSAgICBz
aXplX3Qgb3ZlcmxheUluZGV4ID0gbV9wYWdlT3ZlcmxheXMuZmluZChvdmVybGF5KTsKLSAgICBB
U1NFUlQob3ZlcmxheUluZGV4ICE9IG5vdEZvdW5kKTsKLSAgICBtX3BhZ2VPdmVybGF5cy5yZW1v
dmUob3ZlcmxheUluZGV4KTsKLQotICAgIHVwZGF0ZUZvcmNlU3luY2hyb25vdXNTY3JvbGxMYXll
clBvc2l0aW9uVXBkYXRlcygpOwotfQotCi12b2lkIFBhZ2VPdmVybGF5Q29udHJvbGxlcjo6dXBk
YXRlRm9yY2VTeW5jaHJvbm91c1Njcm9sbExheWVyUG9zaXRpb25VcGRhdGVzKCkKLXsKLSNpZiBF
TkFCTEUoQVNZTkNfU0NST0xMSU5HKQotICAgIGJvb2wgZm9yY2VTeW5jaHJvbm91c1Njcm9sbExh
eWVyUG9zaXRpb25VcGRhdGVzID0gZmFsc2U7Ci0KLSAgICBmb3IgKGF1dG8mIG92ZXJsYXkgOiBt
X3BhZ2VPdmVybGF5cykgewotICAgICAgICBpZiAob3ZlcmxheS0+b3ZlcmxheVR5cGUoKSA9PSBQ
YWdlT3ZlcmxheTo6T3ZlcmxheVR5cGU6OlZpZXcpCi0gICAgICAgICAgICBmb3JjZVN5bmNocm9u
b3VzU2Nyb2xsTGF5ZXJQb3NpdGlvblVwZGF0ZXMgPSB0cnVlOwotICAgIH0KLQotICAgIGlmIChQ
YWdlKiBwYWdlID0gbV93ZWJQYWdlLmNvcmVQYWdlKCkpIHsKLSAgICAgICAgaWYgKFNjcm9sbGlu
Z0Nvb3JkaW5hdG9yKiBzY3JvbGxpbmdDb29yZGluYXRvciA9IHBhZ2UtPnNjcm9sbGluZ0Nvb3Jk
aW5hdG9yKCkpCi0gICAgICAgICAgICBzY3JvbGxpbmdDb29yZGluYXRvci0+c2V0Rm9yY2VTeW5j
aHJvbm91c1Njcm9sbExheWVyUG9zaXRpb25VcGRhdGVzKGZvcmNlU3luY2hyb25vdXNTY3JvbGxM
YXllclBvc2l0aW9uVXBkYXRlcyk7Ci0gICAgfQotI2VuZGlmCi19Ci0KLXZvaWQgUGFnZU92ZXJs
YXlDb250cm9sbGVyOjpzZXRQYWdlT3ZlcmxheU5lZWRzRGlzcGxheShQYWdlT3ZlcmxheSYgb3Zl
cmxheSwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgZGlydHlSZWN0KQotewotICAgIEFTU0VSVCht
X3BhZ2VPdmVybGF5cy5jb250YWlucygmb3ZlcmxheSkpOwotICAgIEdyYXBoaWNzTGF5ZXImIGdy
YXBoaWNzTGF5ZXIgPSAqbV9vdmVybGF5R3JhcGhpY3NMYXllcnMuZ2V0KCZvdmVybGF5KTsKLQot
ICAgIGlmICghZ3JhcGhpY3NMYXllci5kcmF3c0NvbnRlbnQoKSkgewotICAgICAgICBncmFwaGlj
c0xheWVyLnNldERyYXdzQ29udGVudCh0cnVlKTsKLSAgICAgICAgdXBkYXRlT3ZlcmxheUdlb21l
dHJ5KG92ZXJsYXksIGdyYXBoaWNzTGF5ZXIpOwotICAgIH0KLQotICAgIGdyYXBoaWNzTGF5ZXIu
c2V0TmVlZHNEaXNwbGF5SW5SZWN0KGRpcnR5UmVjdCk7Ci19Ci0KLXZvaWQgUGFnZU92ZXJsYXlD
b250cm9sbGVyOjpzZXRQYWdlT3ZlcmxheU9wYWNpdHkoUGFnZU92ZXJsYXkmIG92ZXJsYXksIGZs
b2F0IG9wYWNpdHkpCi17Ci0gICAgQVNTRVJUKG1fcGFnZU92ZXJsYXlzLmNvbnRhaW5zKCZvdmVy
bGF5KSk7Ci0gICAgbV9vdmVybGF5R3JhcGhpY3NMYXllcnMuZ2V0KCZvdmVybGF5KS0+c2V0T3Bh
Y2l0eShvcGFjaXR5KTsKLX0KLQotdm9pZCBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6OmNsZWFyUGFn
ZU92ZXJsYXkoUGFnZU92ZXJsYXkmIG92ZXJsYXkpCi17Ci0gICAgQVNTRVJUKG1fcGFnZU92ZXJs
YXlzLmNvbnRhaW5zKCZvdmVybGF5KSk7Ci0gICAgbV9vdmVybGF5R3JhcGhpY3NMYXllcnMuZ2V0
KCZvdmVybGF5KS0+c2V0RHJhd3NDb250ZW50KGZhbHNlKTsKLX0KLQotR3JhcGhpY3NMYXllciog
UGFnZU92ZXJsYXlDb250cm9sbGVyOjpsYXllckZvck92ZXJsYXkoUGFnZU92ZXJsYXkmIG92ZXJs
YXkpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKG1fcGFnZU92ZXJsYXlzLmNvbnRhaW5zKCZvdmVybGF5
KSk7Ci0gICAgcmV0dXJuIG1fb3ZlcmxheUdyYXBoaWNzTGF5ZXJzLmdldCgmb3ZlcmxheSk7Ci19
Ci0KLXZvaWQgUGFnZU92ZXJsYXlDb250cm9sbGVyOjpkaWRDaGFuZ2VWaWV3U2l6ZSgpCi17Ci0g
ICAgZm9yIChhdXRvJiBvdmVybGF5QW5kTGF5ZXIgOiBtX292ZXJsYXlHcmFwaGljc0xheWVycykg
ewotICAgICAgICBpZiAob3ZlcmxheUFuZExheWVyLmtleS0+b3ZlcmxheVR5cGUoKSA9PSBQYWdl
T3ZlcmxheTo6T3ZlcmxheVR5cGU6OlZpZXcpCi0gICAgICAgICAgICB1cGRhdGVPdmVybGF5R2Vv
bWV0cnkoKm92ZXJsYXlBbmRMYXllci5rZXksICpvdmVybGF5QW5kTGF5ZXIudmFsdWUpOwotICAg
IH0KLX0KLQotdm9pZCBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6OmRpZENoYW5nZURvY3VtZW50U2l6
ZSgpCi17Ci0gICAgZm9yIChhdXRvJiBvdmVybGF5QW5kTGF5ZXIgOiBtX292ZXJsYXlHcmFwaGlj
c0xheWVycykgewotICAgICAgICBpZiAob3ZlcmxheUFuZExheWVyLmtleS0+b3ZlcmxheVR5cGUo
KSA9PSBQYWdlT3ZlcmxheTo6T3ZlcmxheVR5cGU6OkRvY3VtZW50KQotICAgICAgICAgICAgdXBk
YXRlT3ZlcmxheUdlb21ldHJ5KCpvdmVybGF5QW5kTGF5ZXIua2V5LCAqb3ZlcmxheUFuZExheWVy
LnZhbHVlKTsKLSAgICB9Ci19Ci0KLXZvaWQgUGFnZU92ZXJsYXlDb250cm9sbGVyOjpkaWRDaGFu
Z2VQcmVmZXJlbmNlcygpCi17Ci0gICAgZm9yIChhdXRvJiBncmFwaGljc0xheWVyIDogbV9vdmVy
bGF5R3JhcGhpY3NMYXllcnMudmFsdWVzKCkpCi0gICAgICAgIHVwZGF0ZVNldHRpbmdzRm9yTGF5
ZXIoKmdyYXBoaWNzTGF5ZXIpOwotfQotCi12b2lkIFBhZ2VPdmVybGF5Q29udHJvbGxlcjo6ZGlk
Q2hhbmdlRGV2aWNlU2NhbGVGYWN0b3IoKQotewotICAgIG1fZG9jdW1lbnRPdmVybGF5Um9vdExh
eWVyLT5ub3RlRGV2aWNlT3JQYWdlU2NhbGVGYWN0b3JDaGFuZ2VkSW5jbHVkaW5nRGVzY2VuZGFu
dHMoKTsKLSAgICBtX3ZpZXdPdmVybGF5Um9vdExheWVyLT5ub3RlRGV2aWNlT3JQYWdlU2NhbGVG
YWN0b3JDaGFuZ2VkSW5jbHVkaW5nRGVzY2VuZGFudHMoKTsKLQotICAgIGZvciAoYXV0byYgZ3Jh
cGhpY3NMYXllciA6IG1fb3ZlcmxheUdyYXBoaWNzTGF5ZXJzLnZhbHVlcygpKQotICAgICAgICBn
cmFwaGljc0xheWVyLT5zZXROZWVkc0Rpc3BsYXkoKTsKLX0KLQotdm9pZCBQYWdlT3ZlcmxheUNv
bnRyb2xsZXI6OmRpZENoYW5nZUV4cG9zZWRSZWN0KCkKLXsKLSAgICBtX3dlYlBhZ2UuZHJhd2lu
Z0FyZWEoKS0+c2NoZWR1bGVDb21wb3NpdGluZ0xheWVyRmx1c2goKTsKLX0KLQotdm9pZCBQYWdl
T3ZlcmxheUNvbnRyb2xsZXI6OmRpZFNjcm9sbEZyYW1lKEZyYW1lKiBmcmFtZSkKLXsKLSAgICBm
b3IgKGF1dG8mIG92ZXJsYXlBbmRMYXllciA6IG1fb3ZlcmxheUdyYXBoaWNzTGF5ZXJzKSB7Ci0g
ICAgICAgIGlmIChvdmVybGF5QW5kTGF5ZXIua2V5LT5vdmVybGF5VHlwZSgpID09IFBhZ2VPdmVy
bGF5OjpPdmVybGF5VHlwZTo6VmlldyB8fCAhZnJhbWUtPmlzTWFpbkZyYW1lKCkpCi0gICAgICAg
ICAgICBvdmVybGF5QW5kTGF5ZXIudmFsdWUtPnNldE5lZWRzRGlzcGxheSgpOwotICAgICAgICBv
dmVybGF5QW5kTGF5ZXIua2V5LT5kaWRTY3JvbGxGcmFtZShmcmFtZSk7Ci0gICAgfQotfQotCi12
b2lkIFBhZ2VPdmVybGF5Q29udHJvbGxlcjo6Zmx1c2hQYWdlT3ZlcmxheUxheWVycyhGbG9hdFJl
Y3QgdmlzaWJsZVJlY3QpCi17Ci0gICAgbV92aWV3T3ZlcmxheVJvb3RMYXllci0+Zmx1c2hDb21w
b3NpdGluZ1N0YXRlKHZpc2libGVSZWN0KTsKLX0KLQotdm9pZCBQYWdlT3ZlcmxheUNvbnRyb2xs
ZXI6OnVwZGF0ZVNldHRpbmdzRm9yTGF5ZXIoR3JhcGhpY3NMYXllciYgbGF5ZXIpCi17Ci0gICAg
U2V0dGluZ3MmIHNldHRpbmdzID0gbV93ZWJQYWdlLmNvcmVQYWdlKCktPnNldHRpbmdzKCk7Ci0g
ICAgbGF5ZXIuc2V0QWNjZWxlcmF0ZXNEcmF3aW5nKHNldHRpbmdzLmFjY2VsZXJhdGVkRHJhd2lu
Z0VuYWJsZWQoKSk7Ci0gICAgbGF5ZXIuc2V0U2hvd0RlYnVnQm9yZGVyKHNldHRpbmdzLnNob3dE
ZWJ1Z0JvcmRlcnMoKSk7Ci0gICAgbGF5ZXIuc2V0U2hvd1JlcGFpbnRDb3VudGVyKHNldHRpbmdz
LnNob3dSZXBhaW50Q291bnRlcigpKTsKLX0KLQotYm9vbCBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6
OmhhbmRsZU1vdXNlRXZlbnQoY29uc3QgV2ViTW91c2VFdmVudCYgbW91c2VFdmVudCkKLXsKLSAg
ICBpZiAoIW1fcGFnZU92ZXJsYXlzLnNpemUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgZm9yIChhdXRvIGl0ID0gbV9wYWdlT3ZlcmxheXMucmJlZ2luKCksIGVuZCA9IG1fcGFnZU92
ZXJsYXlzLnJlbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGlmICgoKml0KS0+bW91
c2VFdmVudChtb3VzZUV2ZW50KSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQot
ICAgIHJldHVybiBmYWxzZTsKLX0KLQotV0tUeXBlUmVmIFBhZ2VPdmVybGF5Q29udHJvbGxlcjo6
Y29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZShXS1N0cmluZ1JlZiBhdHRyaWJ1dGUsIFdL
VHlwZVJlZiBwYXJhbWV0ZXIpCi17Ci0gICAgaWYgKCFtX3BhZ2VPdmVybGF5cy5zaXplKCkpCi0g
ICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgZm9yIChhdXRvIGl0ID0gbV9wYWdlT3Zlcmxh
eXMucmJlZ2luKCksIGVuZCA9IG1fcGFnZU92ZXJsYXlzLnJlbmQoKTsgaXQgIT0gZW5kOyArK2l0
KSB7Ci0gICAgICAgIGlmIChXS1R5cGVSZWYgdmFsdWUgPSAoKml0KS0+Y29weUFjY2Vzc2liaWxp
dHlBdHRyaWJ1dGVWYWx1ZShhdHRyaWJ1dGUsIHBhcmFtZXRlcikpCi0gICAgICAgICAgICByZXR1
cm4gdmFsdWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLVdLQXJyYXlSZWYg
UGFnZU92ZXJsYXlDb250cm9sbGVyOjpjb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZXNOYW1lcyhi
b29sIHBhcmFtZXRlcml6ZWROYW1lcykKLXsKLSAgICBpZiAoIW1fcGFnZU92ZXJsYXlzLnNpemUo
KSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBmb3IgKGF1dG8gaXQgPSBtX3BhZ2VP
dmVybGF5cy5yYmVnaW4oKSwgZW5kID0gbV9wYWdlT3ZlcmxheXMucmVuZCgpOyBpdCAhPSBlbmQ7
ICsraXQpIHsKLSAgICAgICAgaWYgKFdLQXJyYXlSZWYgdmFsdWUgPSAoKml0KS0+Y29weUFjY2Vz
c2liaWxpdHlBdHRyaWJ1dGVOYW1lcyhwYXJhbWV0ZXJpemVkTmFtZXMpKQotICAgICAgICAgICAg
cmV0dXJuIHZhbHVlOwotICAgIH0KLQotICAgIHJldHVybiBudWxscHRyOwotfQotCi12b2lkIFBh
Z2VPdmVybGF5Q29udHJvbGxlcjo6cGFpbnRDb250ZW50cyhjb25zdCBXZWJDb3JlOjpHcmFwaGlj
c0xheWVyKiBncmFwaGljc0xheWVyLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNz
Q29udGV4dCwgV2ViQ29yZTo6R3JhcGhpY3NMYXllclBhaW50aW5nUGhhc2UsIGNvbnN0IFdlYkNv
cmU6OkZsb2F0UmVjdCYgY2xpcFJlY3QpCi17Ci0gICAgZm9yIChhdXRvIGl0ID0gbV9vdmVybGF5
R3JhcGhpY3NMYXllcnMuYmVnaW4oKSwgZW5kID0gbV9vdmVybGF5R3JhcGhpY3NMYXllcnMuZW5k
KCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBpZiAoaXQtPnZhbHVlLmdldCgpICE9IGdy
YXBoaWNzTGF5ZXIpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBHcmFwaGljc0Nv
bnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoZ3JhcGhpY3NDb250ZXh0KTsKLSAgICAgICAgZ3Jh
cGhpY3NDb250ZXh0LmNsaXAoY2xpcFJlY3QpOwotICAgICAgICBpdC0+a2V5LT5kcmF3UmVjdChn
cmFwaGljc0NvbnRleHQsIGVuY2xvc2luZ0ludFJlY3QoY2xpcFJlY3QpKTsKLQotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotfQotCi1mbG9hdCBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6OmRldmljZVNj
YWxlRmFjdG9yKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV93ZWJQYWdlLmNvcmVQYWdlKCktPmRl
dmljZVNjYWxlRmFjdG9yKCk7Ci19Ci0KLXZvaWQgUGFnZU92ZXJsYXlDb250cm9sbGVyOjpub3Rp
ZnlGbHVzaFJlcXVpcmVkKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKQotewotICAgIGlm
IChtX3dlYlBhZ2UuZHJhd2luZ0FyZWEoKSkKLSAgICAgICAgbV93ZWJQYWdlLmRyYXdpbmdBcmVh
KCktPnNjaGVkdWxlQ29tcG9zaXRpbmdMYXllckZsdXNoKCk7Ci19Ci0KLXZvaWQgUGFnZU92ZXJs
YXlDb250cm9sbGVyOjpkaWRDaGFuZ2VPdmVybGF5RnJhbWUoUGFnZU92ZXJsYXkmIG92ZXJsYXkp
Ci17Ci0gICAgQVNTRVJUKG1fcGFnZU92ZXJsYXlzLmNvbnRhaW5zKCZvdmVybGF5KSk7Ci0gICAg
dXBkYXRlT3ZlcmxheUdlb21ldHJ5KG92ZXJsYXksICptX292ZXJsYXlHcmFwaGljc0xheWVycy5n
ZXQoJm92ZXJsYXkpKTsKLX0KLQotdm9pZCBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6OmRpZENoYW5n
ZU92ZXJsYXlCYWNrZ3JvdW5kQ29sb3IoUGFnZU92ZXJsYXkmIG92ZXJsYXkpCi17Ci0gICAgQVNT
RVJUKG1fcGFnZU92ZXJsYXlzLmNvbnRhaW5zKCZvdmVybGF5KSk7Ci0gICAgbV9vdmVybGF5R3Jh
cGhpY3NMYXllcnMuZ2V0KCZvdmVybGF5KS0+c2V0QmFja2dyb3VuZENvbG9yKG92ZXJsYXkuYmFj
a2dyb3VuZENvbG9yKCkpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9QYWdlT3ZlcmxheUNvbnRyb2xsZXIu
aCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9QYWdlT3ZlcmxheUNvbnRyb2xs
ZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjUxODJkNS4uMDAwMDAwMAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvUGFnZU92ZXJsYXlDb250cm9sbGVy
LmgKKysrIC9kZXYvbnVsbApAQCAtMSw5OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBQ
YWdlT3ZlcmxheUNvbnRyb2xsZXJfaAotI2RlZmluZSBQYWdlT3ZlcmxheUNvbnRyb2xsZXJfaAot
Ci0jaW5jbHVkZSAiUGFnZU92ZXJsYXkuaCIKLSNpbmNsdWRlICJXS0Jhc2UuaCIKLSNpbmNsdWRl
IDxXZWJDb3JlL0dyYXBoaWNzTGF5ZXJDbGllbnQuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5o
PgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLWNsYXNzIEZyYW1lOwotfQotCi1uYW1lc3BhY2UgV2ViS2l0IHsK
LQotY2xhc3MgV2ViTW91c2VFdmVudDsKLWNsYXNzIFdlYlBhZ2U7Ci0KLWNsYXNzIFBhZ2VPdmVy
bGF5Q29udHJvbGxlciA6IHB1YmxpYyBXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2xpZW50IHsKLXB1
YmxpYzoKLSAgICBQYWdlT3ZlcmxheUNvbnRyb2xsZXIoV2ViUGFnZSYpOwotCi0gICAgdm9pZCBp
bml0aWFsaXplKCk7Ci0KLSAgICBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiBkb2N1bWVudE92ZXJs
YXlSb290TGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX2RvY3VtZW50T3ZlcmxheVJvb3RMYXllci5n
ZXQoKTsgfQotICAgIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqIHZpZXdPdmVybGF5Um9vdExheWVy
KCkgY29uc3QgeyByZXR1cm4gbV92aWV3T3ZlcmxheVJvb3RMYXllci5nZXQoKTsgfQotCi0gICAg
dm9pZCBpbnN0YWxsUGFnZU92ZXJsYXkoUGFzc1JlZlB0cjxQYWdlT3ZlcmxheT4sIFBhZ2VPdmVy
bGF5OjpGYWRlTW9kZSk7Ci0gICAgdm9pZCB1bmluc3RhbGxQYWdlT3ZlcmxheShQYWdlT3Zlcmxh
eSosIFBhZ2VPdmVybGF5OjpGYWRlTW9kZSk7Ci0KLSAgICB2b2lkIHNldFBhZ2VPdmVybGF5TmVl
ZHNEaXNwbGF5KFBhZ2VPdmVybGF5JiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOwotICAgIHZv
aWQgc2V0UGFnZU92ZXJsYXlPcGFjaXR5KFBhZ2VPdmVybGF5JiwgZmxvYXQpOwotICAgIHZvaWQg
Y2xlYXJQYWdlT3ZlcmxheShQYWdlT3ZlcmxheSYpOwotICAgIFdlYkNvcmU6OkdyYXBoaWNzTGF5
ZXIqIGxheWVyRm9yT3ZlcmxheShQYWdlT3ZlcmxheSYpIGNvbnN0OwotCi0gICAgdm9pZCBkaWRD
aGFuZ2VWaWV3U2l6ZSgpOwotICAgIHZvaWQgZGlkQ2hhbmdlRG9jdW1lbnRTaXplKCk7Ci0gICAg
dm9pZCBkaWRDaGFuZ2VQcmVmZXJlbmNlcygpOwotICAgIHZvaWQgZGlkQ2hhbmdlRGV2aWNlU2Nh
bGVGYWN0b3IoKTsKLSAgICB2b2lkIGRpZENoYW5nZUV4cG9zZWRSZWN0KCk7Ci0gICAgdm9pZCBk
aWRTY3JvbGxGcmFtZShXZWJDb3JlOjpGcmFtZSopOwotCi0gICAgdm9pZCBkaWRDaGFuZ2VPdmVy
bGF5RnJhbWUoUGFnZU92ZXJsYXkmKTsKLSAgICB2b2lkIGRpZENoYW5nZU92ZXJsYXlCYWNrZ3Jv
dW5kQ29sb3IoUGFnZU92ZXJsYXkmKTsKLQotICAgIHZvaWQgZmx1c2hQYWdlT3ZlcmxheUxheWVy
cyhXZWJDb3JlOjpGbG9hdFJlY3QpOwotCi0gICAgYm9vbCBoYW5kbGVNb3VzZUV2ZW50KGNvbnN0
IFdlYk1vdXNlRXZlbnQmKTsKLQotICAgIC8vIEZJWE1FOiBXZSBzaG91bGRuJ3QgdXNlIEFQSSB0
eXBlcyBoZXJlLgotICAgIFdLVHlwZVJlZiBjb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVl
KFdLU3RyaW5nUmVmIGF0dHJpYnV0ZSwgV0tUeXBlUmVmIHBhcmFtZXRlcik7Ci0gICAgV0tBcnJh
eVJlZiBjb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZXNOYW1lcyhib29sIHBhcmFtZXRlcml6ZWRO
YW1lcyk7Ci0KLXByaXZhdGU6Ci0gICAgdm9pZCB1cGRhdGVTZXR0aW5nc0ZvckxheWVyKFdlYkNv
cmU6OkdyYXBoaWNzTGF5ZXImKTsKLSAgICB2b2lkIHVwZGF0ZUZvcmNlU3luY2hyb25vdXNTY3Jv
bGxMYXllclBvc2l0aW9uVXBkYXRlcygpOwotCi0gICAgLy8gV2ViQ29yZTo6R3JhcGhpY3NMYXll
ckNsaWVudAotICAgIHZpcnR1YWwgdm9pZCBub3RpZnlGbHVzaFJlcXVpcmVkKGNvbnN0IFdlYkNv
cmU6OkdyYXBoaWNzTGF5ZXIqKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250
ZW50cyhjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiwgV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0JiwgV2ViQ29yZTo6R3JhcGhpY3NMYXllclBhaW50aW5nUGhhc2UsIGNvbnN0IFdlYkNvcmU6
OkZsb2F0UmVjdCYgY2xpcFJlY3QpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgZmxvYXQgZGV2aWNl
U2NhbGVGYWN0b3IoKSBjb25zdCBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkU2tp
cExheWVySW5EdW1wKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKSBjb25zdCBvdmVycmlk
ZSB7IHJldHVybiB0cnVlOyB9Ci0KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6R3JhcGhp
Y3NMYXllcj4gbV9kb2N1bWVudE92ZXJsYXlSb290TGF5ZXI7Ci0gICAgc3RkOjp1bmlxdWVfcHRy
PFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI+IG1fdmlld092ZXJsYXlSb290TGF5ZXI7Ci0gICAgSGFz
aE1hcDxQYWdlT3ZlcmxheSosIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpHcmFwaGljc0xheWVy
Pj4gbV9vdmVybGF5R3JhcGhpY3NMYXllcnM7Ci0gICAgVmVjdG9yPFJlZlB0cjxQYWdlT3Zlcmxh
eT4+IG1fcGFnZU92ZXJsYXlzOwotICAgIFdlYlBhZ2UmIG1fd2ViUGFnZTsKLX07Ci0KLX0gLy8g
bmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gUGFnZU92ZXJsYXlDb250cm9sbGVyX2gKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9TZXJ2aWNlc092ZXJs
YXlDb250cm9sbGVyLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvU2Vydmlj
ZXNPdmVybGF5Q29udHJvbGxlci5oCmluZGV4IDNiMDlkM2QuLjQxMWQzM2MgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9TZXJ2aWNlc092ZXJsYXlDb250cm9s
bGVyLmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1NlcnZpY2VzT3Zl
cmxheUNvbnRyb2xsZXIuaApAQCAtMjgsOSArMjgsOSBAQAogCiAjaWYgRU5BQkxFKFNFUlZJQ0Vf
Q09OVFJPTFMpIHx8IEVOQUJMRShURUxFUEhPTkVfTlVNQkVSX0RFVEVDVElPTikKIAotI2luY2x1
ZGUgIlBhZ2VPdmVybGF5LmgiCiAjaW5jbHVkZSAiV2ViRnJhbWUuaCIKICNpbmNsdWRlIDxXZWJD
b3JlL0dyYXBoaWNzTGF5ZXJDbGllbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1BhZ2VPdmVybGF5
Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SYW5nZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvVGltZXIu
aD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgpAQCAtMzksNyArMzksNiBAQCB0eXBlZGVm
IHZvaWQqIERESGlnaGxpZ2h0UmVmOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBMYXlv
dXRSZWN0OwotCiBzdHJ1Y3QgR2FwUmVjdHM7CiB9CiAKQEAgLTQ3LDcgKzQ2LDcgQEAgbmFtZXNw
YWNlIFdlYktpdCB7CiAKIGNsYXNzIFdlYlBhZ2U7CiAKLWNsYXNzIFNlcnZpY2VzT3ZlcmxheUNv
bnRyb2xsZXIgOiBwcml2YXRlIFBhZ2VPdmVybGF5OjpDbGllbnQgeworY2xhc3MgU2VydmljZXNP
dmVybGF5Q29udHJvbGxlciA6IHByaXZhdGUgV2ViQ29yZTo6UGFnZU92ZXJsYXk6OkNsaWVudCB7
CiBwdWJsaWM6CiAgICAgU2VydmljZXNPdmVybGF5Q29udHJvbGxlcihXZWJQYWdlJik7CiAgICAg
flNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIoKTsKQEAgLTk4LDEyICs5NywxMiBAQCBwcml2YXRl
OgogICAgIH07CiAKICAgICAvLyBQYWdlT3ZlcmxheTo6Q2xpZW50Ci0gICAgdmlydHVhbCB2b2lk
IHBhZ2VPdmVybGF5RGVzdHJveWVkKFBhZ2VPdmVybGF5Kikgb3ZlcnJpZGU7Ci0gICAgdmlydHVh
bCB2b2lkIHdpbGxNb3ZlVG9XZWJQYWdlKFBhZ2VPdmVybGF5KiwgV2ViUGFnZSopIG92ZXJyaWRl
OwotICAgIHZpcnR1YWwgdm9pZCBkaWRNb3ZlVG9XZWJQYWdlKFBhZ2VPdmVybGF5KiwgV2ViUGFn
ZSopIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBkcmF3UmVjdChQYWdlT3ZlcmxheSosIFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGRpcnR5UmVj
dCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBib29sIG1vdXNlRXZlbnQoUGFnZU92ZXJsYXkqLCBj
b25zdCBXZWJNb3VzZUV2ZW50Jikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGRpZFNjcm9s
bEZyYW1lKFBhZ2VPdmVybGF5KiwgV2ViQ29yZTo6RnJhbWUqKSBvdmVycmlkZTsKKyAgICB2aXJ0
dWFsIHZvaWQgcGFnZU92ZXJsYXlEZXN0cm95ZWQoV2ViQ29yZTo6UGFnZU92ZXJsYXkmKSBvdmVy
cmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgd2lsbE1vdmVUb1BhZ2UoV2ViQ29yZTo6UGFnZU92ZXJs
YXkmLCBXZWJDb3JlOjpQYWdlKikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGRpZE1vdmVU
b1BhZ2UoV2ViQ29yZTo6UGFnZU92ZXJsYXkmLCBXZWJDb3JlOjpQYWdlKikgb3ZlcnJpZGU7Cisg
ICAgdmlydHVhbCB2b2lkIGRyYXdSZWN0KFdlYkNvcmU6OlBhZ2VPdmVybGF5JiwgV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0JiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgZGlydHlSZWN0KSBvdmVy
cmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wgbW91c2VFdmVudChXZWJDb3JlOjpQYWdlT3ZlcmxheSYs
IGNvbnN0IFdlYkNvcmU6OlBsYXRmb3JtTW91c2VFdmVudCYpIG92ZXJyaWRlOworICAgIHZpcnR1
YWwgdm9pZCBkaWRTY3JvbGxGcmFtZShXZWJDb3JlOjpQYWdlT3ZlcmxheSYsIFdlYkNvcmU6OkZy
YW1lJikgb3ZlcnJpZGU7CiAKICAgICB2b2lkIGNyZWF0ZU92ZXJsYXlJZk5lZWRlZCgpOwogICAg
IHZvaWQgaGFuZGxlQ2xpY2soY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmLCBIaWdobGlnaHQmKTsK
QEAgLTEzOSw3ICsxMzgsNyBAQCBwcml2YXRlOgogICAgIFdlYlBhZ2UmIHdlYlBhZ2UoKSBjb25z
dCB7IHJldHVybiBtX3dlYlBhZ2U7IH0KIAogICAgIFdlYlBhZ2UmIG1fd2ViUGFnZTsKLSAgICBQ
YWdlT3ZlcmxheSogbV9zZXJ2aWNlc092ZXJsYXk7CisgICAgV2ViQ29yZTo6UGFnZU92ZXJsYXkq
IG1fc2VydmljZXNPdmVybGF5OwogCiAgICAgUmVmUHRyPEhpZ2hsaWdodD4gbV9hY3RpdmVIaWdo
bGlnaHQ7CiAgICAgUmVmUHRyPEhpZ2hsaWdodD4gbV9uZXh0QWN0aXZlSGlnaGxpZ2h0OwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCmluZGV4IDZlYTc2
YWMuLjcyYTBmY2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJQYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
UGFnZS5jcHAKQEAgLTMyNyw3ICszMjcsNiBAQCBXZWJQYWdlOjpXZWJQYWdlKHVpbnQ2NF90IHBh
Z2VJRCwgY29uc3QgV2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVycyYgcGFyYW1ldGVycykKICNpZiBF
TkFCTEUoV0VCR0wpCiAgICAgLCBtX3N5c3RlbVdlYkdMUG9saWN5KFdlYkdMQWxsb3dDcmVhdGlv
bikKICNlbmRpZgotICAgICwgbV9wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKnRoaXMpCiB7CiAgICAg
QVNTRVJUKG1fcGFnZUlEKTsKICAgICAvLyBGSVhNRTogVGhpcyBpcyBhIG5vbi1pZGVhbCBsb2Nh
dGlvbiBmb3IgdGhpcyBTZXR0aW5nIGFuZApAQCAtMzY2LDcgKzM2NSw2IEBAIFdlYlBhZ2U6Oldl
YlBhZ2UodWludDY0X3QgcGFnZUlELCBjb25zdCBXZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzJiBw
YXJhbWV0ZXJzKQogCiAgICAgbV9kcmF3aW5nQXJlYSA9IERyYXdpbmdBcmVhOjpjcmVhdGUoKnRo
aXMsIHBhcmFtZXRlcnMpOwogICAgIG1fZHJhd2luZ0FyZWEtPnNldFBhaW50aW5nRW5hYmxlZChm
YWxzZSk7Ci0gICAgbV9wYWdlT3ZlcmxheUNvbnRyb2xsZXIuaW5pdGlhbGl6ZSgpOwogCiAjaWYg
RU5BQkxFKEFTWU5DX1NDUk9MTElORykKICAgICBtX3VzZUFzeW5jU2Nyb2xsaW5nID0gcGFyYW1l
dGVycy5zdG9yZS5nZXRCb29sVmFsdWVGb3JLZXkoV2ViUHJlZmVyZW5jZXNLZXk6OnRocmVhZGVk
U2Nyb2xsaW5nRW5hYmxlZEtleSgpKTsKQEAgLTEyMjYsOCArMTIyNCw2IEBAIHZvaWQgV2ViUGFn
ZTo6c2V0U2l6ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiB2aWV3U2l6ZSkKICAgICBpZiAodmll
dy0+dXNlRml4ZWRMYXlvdXQoKSkKICAgICAgICAgc2VuZFZpZXdwb3J0QXR0cmlidXRlc0NoYW5n
ZWQoKTsKICNlbmRpZgotCi0gICAgbV9wYWdlT3ZlcmxheUNvbnRyb2xsZXIuZGlkQ2hhbmdlVmll
d1NpemUoKTsKIH0KIAogI2lmIFVTRShUSUxFRF9CQUNLSU5HX1NUT1JFKQpAQCAtMTQ1Myw4ICsx
NDQ5LDYgQEAgdm9pZCBXZWJQYWdlOjpzZXREZXZpY2VTY2FsZUZhY3RvcihmbG9hdCBzY2FsZUZh
Y3RvcikKIAogICAgIGlmIChtX2RyYXdpbmdBcmVhLT5sYXllclRyZWVIb3N0KCkpCiAgICAgICAg
IG1fZHJhd2luZ0FyZWEtPmxheWVyVHJlZUhvc3QoKS0+ZGV2aWNlT3JQYWdlU2NhbGVGYWN0b3JD
aGFuZ2VkKCk7Ci0KLSAgICBtX3BhZ2VPdmVybGF5Q29udHJvbGxlci5kaWRDaGFuZ2VEZXZpY2VT
Y2FsZUZhY3RvcigpOwogfQogCiBmbG9hdCBXZWJQYWdlOjpkZXZpY2VTY2FsZUZhY3RvcigpIGNv
bnN0CkBAIC0xNTc3LDE2ICsxNTcxLDYgQEAgdm9pZCBXZWJQYWdlOjpwb3N0SW5qZWN0ZWRCdW5k
bGVNZXNzYWdlKGNvbnN0IFN0cmluZyYgbWVzc2FnZU5hbWUsIElQQzo6TWVzc2FnZUQKICAgICBp
bmplY3RlZEJ1bmRsZS0+ZGlkUmVjZWl2ZU1lc3NhZ2VUb1BhZ2UodGhpcywgbWVzc2FnZU5hbWUs
IG1lc3NhZ2VCb2R5LmdldCgpKTsKIH0KIAotdm9pZCBXZWJQYWdlOjppbnN0YWxsUGFnZU92ZXJs
YXkoUGFzc1JlZlB0cjxQYWdlT3ZlcmxheT4gcGFnZU92ZXJsYXksIFBhZ2VPdmVybGF5OjpGYWRl
TW9kZSBmYWRlTW9kZSkKLXsKLSAgICBtX3BhZ2VPdmVybGF5Q29udHJvbGxlci5pbnN0YWxsUGFn
ZU92ZXJsYXkocGFnZU92ZXJsYXksIGZhZGVNb2RlKTsKLX0KLQotdm9pZCBXZWJQYWdlOjp1bmlu
c3RhbGxQYWdlT3ZlcmxheShQYWdlT3ZlcmxheSogcGFnZU92ZXJsYXksIFBhZ2VPdmVybGF5OjpG
YWRlTW9kZSBmYWRlTW9kZSkKLXsKLSAgICBtX3BhZ2VPdmVybGF5Q29udHJvbGxlci51bmluc3Rh
bGxQYWdlT3ZlcmxheShwYWdlT3ZlcmxheSwgZmFkZU1vZGUpOwotfQotCiAjaWYgIVBMQVRGT1JN
KElPUykKIHZvaWQgV2ViUGFnZTo6c2V0SGVhZGVyUGFnZUJhbm5lcihQYXNzUmVmUHRyPFBhZ2VC
YW5uZXI+IHBhZ2VCYW5uZXIpCiB7CkBAIC0xOTE0LDcgKzE4OTgsNyBAQCB2b2lkIFdlYlBhZ2U6
Om1vdXNlRXZlbnQoY29uc3QgV2ViTW91c2VFdmVudCYgbW91c2VFdmVudCkKICAgICAgICAgcmV0
dXJuOwogICAgIH0KICNlbmRpZgotICAgIGJvb2wgaGFuZGxlZCA9IG1fcGFnZU92ZXJsYXlDb250
cm9sbGVyLmhhbmRsZU1vdXNlRXZlbnQobW91c2VFdmVudCk7CisgICAgYm9vbCBoYW5kbGVkID0g
ZmFsc2U7CiAKICNpZiAhUExBVEZPUk0oSU9TKQogICAgIGlmICghaGFuZGxlZCAmJiBtX2hlYWRl
ckJhbm5lcikKQEAgLTE5NDAsNyArMTkyNCw3IEBAIHZvaWQgV2ViUGFnZTo6bW91c2VFdmVudChj
b25zdCBXZWJNb3VzZUV2ZW50JiBtb3VzZUV2ZW50KQogCiB2b2lkIFdlYlBhZ2U6Om1vdXNlRXZl
bnRTeW5jRm9yVGVzdGluZyhjb25zdCBXZWJNb3VzZUV2ZW50JiBtb3VzZUV2ZW50LCBib29sJiBo
YW5kbGVkKQogewotICAgIGhhbmRsZWQgPSBtX3BhZ2VPdmVybGF5Q29udHJvbGxlci5oYW5kbGVN
b3VzZUV2ZW50KG1vdXNlRXZlbnQpOworICAgIGhhbmRsZWQgPSBmYWxzZTsKICNpZiAhUExBVEZP
Uk0oSU9TKQogICAgIGlmICghaGFuZGxlZCAmJiBtX2hlYWRlckJhbm5lcikKICAgICAgICAgaGFu
ZGxlZCA9IG1faGVhZGVyQmFubmVyLT5tb3VzZUV2ZW50KG1vdXNlRXZlbnQpOwpAQCAtMjg2OSw4
ICsyODUzLDYgQEAgdm9pZCBXZWJQYWdlOjp1cGRhdGVQcmVmZXJlbmNlcyhjb25zdCBXZWJQcmVm
ZXJlbmNlc1N0b3JlJiBzdG9yZSkKIAogICAgIGlmIChtX2RyYXdpbmdBcmVhKQogICAgICAgICBt
X2RyYXdpbmdBcmVhLT51cGRhdGVQcmVmZXJlbmNlcyhzdG9yZSk7Ci0KLSAgICBtX3BhZ2VPdmVy
bGF5Q29udHJvbGxlci5kaWRDaGFuZ2VQcmVmZXJlbmNlcygpOwogfQogCiAjaWYgUExBVEZPUk0o
Q09DT0EpCkBAIC00ODExLDggKzQ3OTMsNiBAQCBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyJiBX
ZWJQYWdlOjpzZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyKCkKIAogdm9pZCBXZWJQYWdlOjpkaWRD
aGFuZ2VTY3JvbGxPZmZzZXRGb3JGcmFtZShGcmFtZSogZnJhbWUpCiB7Ci0gICAgbV9wYWdlT3Zl
cmxheUNvbnRyb2xsZXIuZGlkU2Nyb2xsRnJhbWUoZnJhbWUpOwotCiAgICAgaWYgKCFmcmFtZS0+
aXNNYWluRnJhbWUoKSkKICAgICAgICAgcmV0dXJuOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAppbmRleCBjYTQ2YmEwYS4uNDI1NWE4OCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCkBAIC00MSw3ICs0MSw2IEBA
CiAjaW5jbHVkZSAiTGF5ZXJUcmVlSG9zdC5oIgogI2luY2x1ZGUgIk1lc3NhZ2VSZWNlaXZlci5o
IgogI2luY2x1ZGUgIk1lc3NhZ2VTZW5kZXIuaCIKLSNpbmNsdWRlICJQYWdlT3ZlcmxheUNvbnRy
b2xsZXIuaCIKICNpbmNsdWRlICJQbHVnaW4uaCIKICNpbmNsdWRlICJTYW5kYm94RXh0ZW5zaW9u
LmgiCiAjaW5jbHVkZSAiU2hhcmVhYmxlQml0bWFwLmgiCkBAIC0xNDAsNyArMTM5LDYgQEAgY2xh
c3MgRHJhd2luZ0FyZWE7CiBjbGFzcyBJbmplY3RlZEJ1bmRsZUJhY2tGb3J3YXJkTGlzdDsKIGNs
YXNzIE5vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlcjsKIGNsYXNzIFBhZ2VCYW5u
ZXI7Ci1jbGFzcyBQYWdlT3ZlcmxheTsKIGNsYXNzIFBsdWdpblZpZXc7CiBjbGFzcyBTZXJ2aWNl
c092ZXJsYXlDb250cm9sbGVyOwogY2xhc3MgVmlzaWJsZUNvbnRlbnRSZWN0VXBkYXRlSW5mbzsK
QEAgLTIwNiw4ICsyMDQsNiBAQCBwdWJsaWM6CiAgICAgCiAgICAgSW5qZWN0ZWRCdW5kbGVCYWNr
Rm9yd2FyZExpc3QqIGJhY2tGb3J3YXJkTGlzdCgpOwogICAgIERyYXdpbmdBcmVhKiBkcmF3aW5n
QXJlYSgpIGNvbnN0IHsgcmV0dXJuIG1fZHJhd2luZ0FyZWEuZ2V0KCk7IH0KLSAgICBjb25zdCBQ
YWdlT3ZlcmxheUNvbnRyb2xsZXImIHBhZ2VPdmVybGF5Q29udHJvbGxlcigpIGNvbnN0IHsgcmV0
dXJuIG1fcGFnZU92ZXJsYXlDb250cm9sbGVyOyB9Ci0gICAgUGFnZU92ZXJsYXlDb250cm9sbGVy
JiBwYWdlT3ZlcmxheUNvbnRyb2xsZXIoKSB7IHJldHVybiBtX3BhZ2VPdmVybGF5Q29udHJvbGxl
cjsgfQogI2lmIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpCiAgICAgV2ViQ29yZTo6U2Nyb2xsaW5n
Q29vcmRpbmF0b3IqIHNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkgY29uc3Q7CiAjZW5kaWYKQEAgLTQx
Niw4ICs0MTIsNiBAQCBwdWJsaWM6CiAKICAgICBib29sIHdpbmRvd0lzRm9jdXNlZCgpIGNvbnN0
OwogICAgIGJvb2wgd2luZG93QW5kV2ViUGFnZUFyZUZvY3VzZWQoKSBjb25zdDsKLSAgICB2b2lk
IGluc3RhbGxQYWdlT3ZlcmxheShQYXNzUmVmUHRyPFBhZ2VPdmVybGF5PiwgUGFnZU92ZXJsYXk6
OkZhZGVNb2RlID0gUGFnZU92ZXJsYXk6OkZhZGVNb2RlOjpEb05vdEZhZGUpOwotICAgIHZvaWQg
dW5pbnN0YWxsUGFnZU92ZXJsYXkoUGFnZU92ZXJsYXkqLCBQYWdlT3ZlcmxheTo6RmFkZU1vZGUg
PSBQYWdlT3ZlcmxheTo6RmFkZU1vZGU6OkRvTm90RmFkZSk7CiAKICNpZiAhUExBVEZPUk0oSU9T
KQogICAgIHZvaWQgc2V0SGVhZGVyUGFnZUJhbm5lcihQYXNzUmVmUHRyPFBhZ2VCYW5uZXI+KTsK
QEAgLTgyMiw5ICs4MTYsNiBAQCBwdWJsaWM6CiAgICAgV2ViQ29yZTo6U2Nyb2xsUGlubmluZ0Jl
aGF2aW9yIHNjcm9sbFBpbm5pbmdCZWhhdmlvcigpIHsgcmV0dXJuIG1fc2Nyb2xsUGlubmluZ0Jl
aGF2aW9yOyB9CiAgICAgdm9pZCBzZXRTY3JvbGxQaW5uaW5nQmVoYXZpb3IodWludDMyX3QgLyog
V2ViQ29yZTo6U2Nyb2xsUGlubmluZ0JlaGF2aW9yICovIHBpbm5pbmcpOwogCi0gICAgV0tUeXBl
UmVmIHBhZ2VPdmVybGF5Q29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZShXS1N0cmluZ1Jl
ZiBhdHRyaWJ1dGUsIFdLVHlwZVJlZiBwYXJhbWV0ZXIpOwotICAgIFdLQXJyYXlSZWYgcGFnZU92
ZXJsYXlDb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZXNOYW1lcyhib29sIHBhcmFtZXRlcml6ZWRO
YW1lcyk7Ci0KICAgICBQYXNzUmVmUHRyPFdlYkNvcmU6OkRvY3VtZW50TG9hZGVyPiBjcmVhdGVE
b2N1bWVudExvYWRlcihXZWJDb3JlOjpGcmFtZSYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVx
dWVzdCYsIGNvbnN0IFdlYkNvcmU6OlN1YnN0aXR1dGVEYXRhJik7CiAKICAgICB2b2lkIGdldEJ5
dGVjb2RlUHJvZmlsZSh1aW50NjRfdCBjYWxsYmFja0lEKTsKQEAgLTEyNzgsOCArMTI2OSw2IEBA
IHByaXZhdGU6CiAjaWYgRU5BQkxFKFNFUlZJQ0VfQ09OVFJPTFMpIHx8IEVOQUJMRShURUxFUEhP
TkVfTlVNQkVSX0RFVEVDVElPTikKICAgICBzdGQ6OnVuaXF1ZV9wdHI8U2VydmljZXNPdmVybGF5
Q29udHJvbGxlcj4gbV9zZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOwogI2VuZGlmCi0KLSAgICBQ
YWdlT3ZlcmxheUNvbnRyb2xsZXIgbV9wYWdlT3ZlcmxheUNvbnRyb2xsZXI7CiB9OwogCiB9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJQYWdlT3ZlcmxheS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViUGFnZU92ZXJsYXkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLjFkMmUzZDUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViUGFnZU92ZXJsYXkuY3BwCkBAIC0wLDAgKzEsMTEzIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYlBhZ2VPdmVybGF5LmgiCisKKyNp
bmNsdWRlICJXZWJGcmFtZS5oIgorI2luY2x1ZGUgIldlYlBhZ2UuaCIKKyNpbmNsdWRlIDxXZWJD
b3JlL0dyYXBoaWNzTGF5ZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1BhZ2VPdmVybGF5Lmg+CisK
K3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKworUGFzc1Jl
ZlB0cjxXZWJQYWdlT3ZlcmxheT4gV2ViUGFnZU92ZXJsYXk6OmNyZWF0ZShXZWJQYWdlT3Zlcmxh
eTo6Q2xpZW50JiBjbGllbnQsIFBhZ2VPdmVybGF5OjpPdmVybGF5VHlwZSBvdmVybGF5VHlwZSkK
K3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFdlYlBhZ2VPdmVybGF5KGNsaWVudCwgb3Zlcmxh
eVR5cGUpKTsKK30KKworV2ViUGFnZU92ZXJsYXk6OldlYlBhZ2VPdmVybGF5KFdlYlBhZ2VPdmVy
bGF5OjpDbGllbnQmIGNsaWVudCwgUGFnZU92ZXJsYXk6Ok92ZXJsYXlUeXBlIG92ZXJsYXlUeXBl
KQorICAgIDogbV9vdmVybGF5KFBhZ2VPdmVybGF5OjpjcmVhdGUoKnRoaXMsIG92ZXJsYXlUeXBl
KSkKKyAgICAsIG1fY2xpZW50KGNsaWVudCkKK3sKK30KKworV2ViUGFnZU92ZXJsYXk6On5XZWJQ
YWdlT3ZlcmxheSgpCit7Cit9CisKK3ZvaWQgV2ViUGFnZU92ZXJsYXk6OnNldE5lZWRzRGlzcGxh
eShjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpCit7CisgICAgbV9vdmVybGF5LT5zZXROZWVkc0Rp
c3BsYXkoZGlydHlSZWN0KTsKK30KKwordm9pZCBXZWJQYWdlT3ZlcmxheTo6c2V0TmVlZHNEaXNw
bGF5KCkKK3sKKyAgICBtX292ZXJsYXktPnNldE5lZWRzRGlzcGxheSgpOworfQorCit2b2lkIFdl
YlBhZ2VPdmVybGF5OjpjbGVhcigpCit7CisgICAgbV9vdmVybGF5LT5jbGVhcigpOworfQorCit2
b2lkIFdlYlBhZ2VPdmVybGF5OjpwYWdlT3ZlcmxheURlc3Ryb3llZChQYWdlT3ZlcmxheSYpCit7
CisgICAgbV9jbGllbnQucGFnZU92ZXJsYXlEZXN0cm95ZWQoKnRoaXMpOworfQorCit2b2lkIFdl
YlBhZ2VPdmVybGF5Ojp3aWxsTW92ZVRvUGFnZShQYWdlT3ZlcmxheSYsIFBhZ2UqIHBhZ2UpCit7
CisgICAgbV9jbGllbnQud2lsbE1vdmVUb1BhZ2UoKnRoaXMsIHBhZ2UgPyBXZWJQYWdlOjpmcm9t
Q29yZVBhZ2UocGFnZSkgOiBudWxscHRyKTsKK30KKwordm9pZCBXZWJQYWdlT3ZlcmxheTo6ZGlk
TW92ZVRvUGFnZShQYWdlT3ZlcmxheSYsIFBhZ2UqIHBhZ2UpCit7CisgICAgbV9jbGllbnQuZGlk
TW92ZVRvUGFnZSgqdGhpcywgcGFnZSA/IFdlYlBhZ2U6OmZyb21Db3JlUGFnZShwYWdlKSA6IG51
bGxwdHIpOworfQorCit2b2lkIFdlYlBhZ2VPdmVybGF5OjpkcmF3UmVjdChQYWdlT3ZlcmxheSYs
IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KQorewor
ICAgIG1fY2xpZW50LmRyYXdSZWN0KCp0aGlzLCBjb250ZXh0LCBkaXJ0eVJlY3QpOworfQorCiti
b29sIFdlYlBhZ2VPdmVybGF5Ojptb3VzZUV2ZW50KFBhZ2VPdmVybGF5JiwgY29uc3QgUGxhdGZv
cm1Nb3VzZUV2ZW50JiBldmVudCkKK3sKKyAgICByZXR1cm4gbV9jbGllbnQubW91c2VFdmVudCgq
dGhpcywgZXZlbnQpOworfQorCit2b2lkIFdlYlBhZ2VPdmVybGF5OjpkaWRTY3JvbGxGcmFtZShQ
YWdlT3ZlcmxheSYsIEZyYW1lJiBmcmFtZSkKK3sKKyAgICBtX2NsaWVudC5kaWRTY3JvbGxGcmFt
ZSgqdGhpcywgV2ViRnJhbWU6OmZyb21Db3JlRnJhbWUoZnJhbWUpKTsKK30KKworYm9vbCBXZWJQ
YWdlT3ZlcmxheTo6Y29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVTdHJpbmdWYWx1ZUZvclBvaW50
KFBhZ2VPdmVybGF5JiwgU3RyaW5nIGF0dHJpYnV0ZSwgRmxvYXRQb2ludCBwYXJhbWV0ZXIsIFN0
cmluZyYgdmFsdWUpCit7CisgICAgcmV0dXJuIG1fY2xpZW50LmNvcHlBY2Nlc3NpYmlsaXR5QXR0
cmlidXRlU3RyaW5nVmFsdWVGb3JQb2ludCgqdGhpcywgYXR0cmlidXRlLCBwYXJhbWV0ZXIsIHZh
bHVlKTsKK30KKworYm9vbCBXZWJQYWdlT3ZlcmxheTo6Y29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1
dGVCb29sVmFsdWVGb3JQb2ludChQYWdlT3ZlcmxheSYsIFN0cmluZyBhdHRyaWJ1dGUsIEZsb2F0
UG9pbnQgcGFyYW1ldGVyLCBib29sJiB2YWx1ZSkKK3sKKyAgICByZXR1cm4gbV9jbGllbnQuY29w
eUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVCb29sVmFsdWVGb3JQb2ludCgqdGhpcywgYXR0cmlidXRl
LCBwYXJhbWV0ZXIsIHZhbHVlKTsKK30KKworVmVjdG9yPFN0cmluZz4gV2ViUGFnZU92ZXJsYXk6
OmNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlTmFtZXMoUGFnZU92ZXJsYXkmLCBib29sIHBhcmFt
ZXRlcml6ZWROYW1lcykKK3sKKyAgICByZXR1cm4gbV9jbGllbnQuY29weUFjY2Vzc2liaWxpdHlB
dHRyaWJ1dGVOYW1lcygqdGhpcywgcGFyYW1ldGVyaXplZE5hbWVzKTsKK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViUGFnZU92ZXJsYXkuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJQYWdlT3ZlcmxheS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2ZGRl
MTYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
V2ViUGFnZU92ZXJsYXkuaApAQCAtMCwwICsxLDkyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBX
ZWJQYWdlT3ZlcmxheV9oCisjZGVmaW5lIFdlYlBhZ2VPdmVybGF5X2gKKworI2luY2x1ZGUgIkFQ
SU9iamVjdC5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRmxvYXRQb2ludC5oPgorI2luY2x1ZGUgPFdl
YkNvcmUvSW50UmVjdC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUGFnZU92ZXJsYXkuaD4KKyNpbmNs
dWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2Vi
RnJhbWU7CitjbGFzcyBXZWJQYWdlOworCitjbGFzcyBXZWJQYWdlT3ZlcmxheSA6IHB1YmxpYyBB
UEk6Ok9iamVjdEltcGw8QVBJOjpPYmplY3Q6OlR5cGU6OkJ1bmRsZVBhZ2VPdmVybGF5PiwgcHJp
dmF0ZSBXZWJDb3JlOjpQYWdlT3ZlcmxheTo6Q2xpZW50IHsKK3B1YmxpYzoKKyAgICBjbGFzcyBD
bGllbnQgeworICAgIHByb3RlY3RlZDoKKyAgICAgICAgdmlydHVhbCB+Q2xpZW50KCkgeyB9CisK
KyAgICBwdWJsaWM6CisgICAgICAgIHZpcnR1YWwgdm9pZCBwYWdlT3ZlcmxheURlc3Ryb3llZChX
ZWJQYWdlT3ZlcmxheSYpID0gMDsKKyAgICAgICAgdmlydHVhbCB2b2lkIHdpbGxNb3ZlVG9QYWdl
KFdlYlBhZ2VPdmVybGF5JiwgV2ViUGFnZSopID0gMDsKKyAgICAgICAgdmlydHVhbCB2b2lkIGRp
ZE1vdmVUb1BhZ2UoV2ViUGFnZU92ZXJsYXkmLCBXZWJQYWdlKikgPSAwOworICAgICAgICB2aXJ0
dWFsIHZvaWQgZHJhd1JlY3QoV2ViUGFnZU92ZXJsYXkmLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQmLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBkaXJ0eVJlY3QpID0gMDsKKyAgICAgICAgdmly
dHVhbCBib29sIG1vdXNlRXZlbnQoV2ViUGFnZU92ZXJsYXkmLCBjb25zdCBXZWJDb3JlOjpQbGF0
Zm9ybU1vdXNlRXZlbnQmKSA9IDA7CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRTY3JvbGxGcmFt
ZShXZWJQYWdlT3ZlcmxheSYsIFdlYkZyYW1lKikgeyB9CisKKyAgICAgICAgdmlydHVhbCBib29s
IGNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlU3RyaW5nVmFsdWVGb3JQb2ludChXZWJQYWdlT3Zl
cmxheSYsIFN0cmluZyAvKiBhdHRyaWJ1dGUgKi8sIFdlYkNvcmU6OkZsb2F0UG9pbnQgLyogcGFy
YW1ldGVyICovLCBTdHJpbmcmIHZhbHVlKSB7IHJldHVybiBmYWxzZTsgfQorICAgICAgICB2aXJ0
dWFsIGJvb2wgY29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVCb29sVmFsdWVGb3JQb2ludChXZWJQ
YWdlT3ZlcmxheSYsIFN0cmluZyAvKiBhdHRyaWJ1dGUgKi8sIFdlYkNvcmU6OkZsb2F0UG9pbnQg
LyogcGFyYW1ldGVyICovLCBib29sJiB2YWx1ZSkgeyByZXR1cm4gZmFsc2U7IH0KKyAgICAgICAg
dmlydHVhbCBWZWN0b3I8U3RyaW5nPiBjb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZU5hbWVzKFdl
YlBhZ2VPdmVybGF5JiwgYm9vbCAvKiBwYXJhbWV0ZXJpemVkTmFtZXMgKi8pIHsgcmV0dXJuIFZl
Y3RvcjxTdHJpbmc+KCk7IH0KKyAgICB9OworCisgICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViUGFn
ZU92ZXJsYXk+IGNyZWF0ZShDbGllbnQmLCBXZWJDb3JlOjpQYWdlT3ZlcmxheTo6T3ZlcmxheVR5
cGUgPSBXZWJDb3JlOjpQYWdlT3ZlcmxheTo6T3ZlcmxheVR5cGU6OlZpZXcpOworICAgIHZpcnR1
YWwgfldlYlBhZ2VPdmVybGF5KCk7CisKKyAgICB2b2lkIHNldE5lZWRzRGlzcGxheShjb25zdCBX
ZWJDb3JlOjpJbnRSZWN0JiBkaXJ0eVJlY3QpOworICAgIHZvaWQgc2V0TmVlZHNEaXNwbGF5KCk7
CisKKyAgICB2b2lkIGNsZWFyKCk7CisKKyAgICBXZWJDb3JlOjpQYWdlT3ZlcmxheSogY29yZU92
ZXJsYXkoKSBjb25zdCB7IHJldHVybiBtX292ZXJsYXkuZ2V0KCk7IH0KKyAgICBDbGllbnQmIGNs
aWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fY2xpZW50OyB9CisKK3ByaXZhdGU6CisgICAgV2ViUGFn
ZU92ZXJsYXkoQ2xpZW50JiwgV2ViQ29yZTo6UGFnZU92ZXJsYXk6Ok92ZXJsYXlUeXBlKTsKKwor
ICAgIC8vIFdlYkNvcmU6OlBhZ2VPdmVybGF5OjpDbGllbnQKKyAgICB2aXJ0dWFsIHZvaWQgcGFn
ZU92ZXJsYXlEZXN0cm95ZWQoV2ViQ29yZTo6UGFnZU92ZXJsYXkmKSBvdmVycmlkZTsKKyAgICB2
aXJ0dWFsIHZvaWQgd2lsbE1vdmVUb1BhZ2UoV2ViQ29yZTo6UGFnZU92ZXJsYXkmLCBXZWJDb3Jl
OjpQYWdlKikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGRpZE1vdmVUb1BhZ2UoV2ViQ29y
ZTo6UGFnZU92ZXJsYXkmLCBXZWJDb3JlOjpQYWdlKikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2
b2lkIGRyYXdSZWN0KFdlYkNvcmU6OlBhZ2VPdmVybGF5JiwgV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0JiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgZGlydHlSZWN0KSBvdmVycmlkZTsKKyAgICB2
aXJ0dWFsIGJvb2wgbW91c2VFdmVudChXZWJDb3JlOjpQYWdlT3ZlcmxheSYsIGNvbnN0IFdlYkNv
cmU6OlBsYXRmb3JtTW91c2VFdmVudCYpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBkaWRT
Y3JvbGxGcmFtZShXZWJDb3JlOjpQYWdlT3ZlcmxheSYsIFdlYkNvcmU6OkZyYW1lJikgb3ZlcnJp
ZGU7CisKKyAgICB2aXJ0dWFsIGJvb2wgY29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVTdHJpbmdW
YWx1ZUZvclBvaW50KFdlYkNvcmU6OlBhZ2VPdmVybGF5JiwgU3RyaW5nIC8qIGF0dHJpYnV0ZSAq
LywgV2ViQ29yZTo6RmxvYXRQb2ludCAvKiBwYXJhbWV0ZXIgKi8sIFN0cmluZyYgdmFsdWUpIG92
ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBjb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZUJvb2xW
YWx1ZUZvclBvaW50KFdlYkNvcmU6OlBhZ2VPdmVybGF5JiwgU3RyaW5nIC8qIGF0dHJpYnV0ZSAq
LywgV2ViQ29yZTo6RmxvYXRQb2ludCAvKiBwYXJhbWV0ZXIgKi8sIGJvb2wmIHZhbHVlKSBvdmVy
cmlkZTsKKyAgICB2aXJ0dWFsIFZlY3RvcjxTdHJpbmc+IGNvcHlBY2Nlc3NpYmlsaXR5QXR0cmli
dXRlTmFtZXMoV2ViQ29yZTo6UGFnZU92ZXJsYXkmLCBib29sIC8qIHBhcmFtZXRlcml6ZWROYW1l
cyAqLykgb3ZlcnJpZGU7CisKKworICAgIFJlZlB0cjxXZWJDb3JlOjpQYWdlT3ZlcmxheT4gbV9v
dmVybGF5OworICAgIENsaWVudCYgbV9jbGllbnQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKKworI2VuZGlmIC8vIFdlYlBhZ2VPdmVybGF5X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvRmluZENvbnRyb2xsZXJJT1MubW0gYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL0ZpbmRDb250cm9sbGVySU9TLm1tCmluZGV4
IDA5MDdiZGYuLmFmMmNlMTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9pb3MvRmluZENvbnRyb2xsZXJJT1MubW0KKysrIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL2lvcy9GaW5kQ29udHJvbGxlcklPUy5tbQpAQCAtMzYsNiArMzYsNyBA
QAogI2ltcG9ydCA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHQuaD4KICNpbXBvcnQgPFdlYkNvcmUv
TWFpbkZyYW1lLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1BhZ2UuaD4KKyNpbXBvcnQgPFdlYkNvcmUv
UGFnZU92ZXJsYXlDb250cm9sbGVyLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCkBA
IC01Miw3ICs1Myw3IEBAIHN0YXRpYyBDb2xvciBoaWdobGlnaHRDb2xvcigpCiAKIG5hbWVzcGFj
ZSBXZWJLaXQgewogCi12b2lkIEZpbmRJbmRpY2F0b3JPdmVybGF5Q2xpZW50SU9TOjpkcmF3UmVj
dChQYWdlT3ZlcmxheSogb3ZlcmxheSwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0
LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBkaXJ0eVJlY3QpCit2b2lkIEZpbmRJbmRpY2F0b3JP
dmVybGF5Q2xpZW50SU9TOjpkcmF3UmVjdChQYWdlT3ZlcmxheSYgb3ZlcmxheSwgR3JhcGhpY3ND
b250ZXh0JiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpCiB7CiAgICAgLy8gRklY
TUU6IFN1cHBvcnQgbXVsdGlwbGUgdGV4dCByZWN0cy4KIApAQCAtODUsMTEgKzg2LDExIEBAIGJv
b2wgRmluZENvbnRyb2xsZXI6OnVwZGF0ZUZpbmRJbmRpY2F0b3IoRnJhbWUmIHNlbGVjdGVkRnJh
bWUsIGJvb2wgaXNTaG93aW5nT3ZlCiAgICAgbWF0Y2hSZWN0LmluZmxhdGVZKHRvdGFsVmVydGlj
YWxNYXJnaW4pOwogCiAgICAgaWYgKG1fZmluZEluZGljYXRvck92ZXJsYXkpCi0gICAgICAgIG1f
d2ViUGFnZS0+dW5pbnN0YWxsUGFnZU92ZXJsYXkobV9maW5kSW5kaWNhdG9yT3ZlcmxheS5nZXQo
KSk7CisgICAgICAgIG1fd2ViUGFnZS0+Y29yZVBhZ2UoKS0+cGFnZU92ZXJsYXlDb250cm9sbGVy
KCkudW5pbnN0YWxsUGFnZU92ZXJsYXkobV9maW5kSW5kaWNhdG9yT3ZlcmxheS5nZXQoKSwgUGFn
ZU92ZXJsYXk6OkZhZGVNb2RlOjpEb05vdEZhZGUpOwogCiAgICAgbV9maW5kSW5kaWNhdG9yT3Zl
cmxheUNsaWVudCA9IHN0ZDo6bWFrZV91bmlxdWU8RmluZEluZGljYXRvck92ZXJsYXlDbGllbnRJ
T1M+KHNlbGVjdGVkRnJhbWUpOwotICAgIG1fZmluZEluZGljYXRvck92ZXJsYXkgPSBQYWdlT3Zl
cmxheTo6Y3JlYXRlKG1fZmluZEluZGljYXRvck92ZXJsYXlDbGllbnQuZ2V0KCksIFBhZ2VPdmVy
bGF5OjpPdmVybGF5VHlwZTo6RG9jdW1lbnQpOwotICAgIG1fd2ViUGFnZS0+aW5zdGFsbFBhZ2VP
dmVybGF5KG1fZmluZEluZGljYXRvck92ZXJsYXkpOworICAgIG1fZmluZEluZGljYXRvck92ZXJs
YXkgPSBQYWdlT3ZlcmxheTo6Y3JlYXRlKCptX2ZpbmRJbmRpY2F0b3JPdmVybGF5Q2xpZW50LCBQ
YWdlT3ZlcmxheTo6T3ZlcmxheVR5cGU6OkRvY3VtZW50KTsKKyAgICBtX3dlYlBhZ2UtPmNvcmVQ
YWdlKCktPnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLmluc3RhbGxQYWdlT3ZlcmxheShtX2ZpbmRJ
bmRpY2F0b3JPdmVybGF5LCBQYWdlT3ZlcmxheTo6RmFkZU1vZGU6OkRvTm90RmFkZSk7CiAKICAg
ICBtX2ZpbmRJbmRpY2F0b3JPdmVybGF5LT5zZXRGcmFtZShtYXRjaFJlY3QpOwogICAgIG1fZmlu
ZEluZGljYXRvck92ZXJsYXktPnNldE5lZWRzRGlzcGxheSgpOwpAQCAtMTA2LDcgKzEwNyw3IEBA
IHZvaWQgRmluZENvbnRyb2xsZXI6OmhpZGVGaW5kSW5kaWNhdG9yKCkKICAgICBpZiAoIW1faXNT
aG93aW5nRmluZEluZGljYXRvcikKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV93ZWJQYWdlLT51
bmluc3RhbGxQYWdlT3ZlcmxheShtX2ZpbmRJbmRpY2F0b3JPdmVybGF5LmdldCgpKTsKKyAgICBt
X3dlYlBhZ2UtPmNvcmVQYWdlKCktPnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLnVuaW5zdGFsbFBh
Z2VPdmVybGF5KG1fZmluZEluZGljYXRvck92ZXJsYXkuZ2V0KCksIFBhZ2VPdmVybGF5OjpGYWRl
TW9kZTo6RG9Ob3RGYWRlKTsKICAgICBtX2ZpbmRJbmRpY2F0b3JPdmVybGF5ID0gbnVsbHB0cjsK
ICAgICBtX2lzU2hvd2luZ0ZpbmRJbmRpY2F0b3IgPSBmYWxzZTsKICAgICBtX2ZvdW5kU3RyaW5n
TWF0Y2hJbmRleCA9IC0xOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL2lvcy9GaW5kSW5kaWNhdG9yT3ZlcmxheUNsaWVudElPUy5oIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9GaW5kSW5kaWNhdG9yT3ZlcmxheUNsaWVudElPUy5o
CmluZGV4IDMxMDE3NjcuLjQyOTIyODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9pb3MvRmluZEluZGljYXRvck92ZXJsYXlDbGllbnRJT1MuaAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL0ZpbmRJbmRpY2F0b3JPdmVybGF5
Q2xpZW50SU9TLmgKQEAgLTI2LDEzICsyNiwxMyBAQAogI2lmbmRlZiBGaW5kSW5kaWNhdG9yT3Zl
cmxheUNsaWVudElPU19oCiAjZGVmaW5lIEZpbmRJbmRpY2F0b3JPdmVybGF5Q2xpZW50SU9TX2gK
IAotI2ltcG9ydCAiUGFnZU92ZXJsYXkuaCIKICNpbXBvcnQgPFdlYkNvcmUvRnJhbWUuaD4KICNp
bXBvcnQgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+CisjaW1wb3J0IDxXZWJDb3JlL1BhZ2VP
dmVybGF5Lmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1jbGFzcyBGaW5kSW5kaWNhdG9yT3Zl
cmxheUNsaWVudElPUyA6IHB1YmxpYyBQYWdlT3ZlcmxheTo6Q2xpZW50IHsKK2NsYXNzIEZpbmRJ
bmRpY2F0b3JPdmVybGF5Q2xpZW50SU9TIDogcHVibGljIFdlYkNvcmU6OlBhZ2VPdmVybGF5OjpD
bGllbnQgewogcHVibGljOgogICAgIEZpbmRJbmRpY2F0b3JPdmVybGF5Q2xpZW50SU9TKFdlYkNv
cmU6OkZyYW1lJiBmcmFtZSkKICAgICAgICAgOiBtX2ZyYW1lKGZyYW1lKQpAQCAtNDAsMTEgKzQw
LDExIEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgdmlydHVhbCB2b2lkIHBhZ2VP
dmVybGF5RGVzdHJveWVkKFBhZ2VPdmVybGF5Kikgb3ZlcnJpZGUgeyB9Ci0gICAgdmlydHVhbCB2
b2lkIHdpbGxNb3ZlVG9XZWJQYWdlKFBhZ2VPdmVybGF5KiwgV2ViUGFnZSopIG92ZXJyaWRlIHsg
fQotICAgIHZpcnR1YWwgdm9pZCBkaWRNb3ZlVG9XZWJQYWdlKFBhZ2VPdmVybGF5KiwgV2ViUGFn
ZSopIG92ZXJyaWRlIHsgfQotICAgIHZpcnR1YWwgdm9pZCBkcmF3UmVjdChQYWdlT3ZlcmxheSos
IFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGRpcnR5
UmVjdCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBib29sIG1vdXNlRXZlbnQoUGFnZU92ZXJsYXkq
LCBjb25zdCBXZWJNb3VzZUV2ZW50Jikgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2
aXJ0dWFsIHZvaWQgcGFnZU92ZXJsYXlEZXN0cm95ZWQoV2ViQ29yZTo6UGFnZU92ZXJsYXkmKSBv
dmVycmlkZSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgd2lsbE1vdmVUb1BhZ2UoV2ViQ29yZTo6UGFn
ZU92ZXJsYXkmLCBXZWJDb3JlOjpQYWdlKikgb3ZlcnJpZGUgeyB9CisgICAgdmlydHVhbCB2b2lk
IGRpZE1vdmVUb1BhZ2UoV2ViQ29yZTo6UGFnZU92ZXJsYXkmLCBXZWJDb3JlOjpQYWdlKikgb3Zl
cnJpZGUgeyB9CisgICAgdmlydHVhbCB2b2lkIGRyYXdSZWN0KFdlYkNvcmU6OlBhZ2VPdmVybGF5
JiwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgZGly
dHlSZWN0KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wgbW91c2VFdmVudChXZWJDb3JlOjpQ
YWdlT3ZlcmxheSYsIGNvbnN0IFdlYkNvcmU6OlBsYXRmb3JtTW91c2VFdmVudCYpIG92ZXJyaWRl
IHsgcmV0dXJuIGZhbHNlOyB9CiAKICAgICBXZWJDb3JlOjpGcmFtZSYgbV9mcmFtZTsKIH07CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1JlbW90ZUxh
eWVyVHJlZURyYXdpbmdBcmVhLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
bWFjL1JlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhLmgKaW5kZXggMWNiNTEwMC4uYzUyYTNiZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9SZW1vdGVM
YXllclRyZWVEcmF3aW5nQXJlYS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9tYWMvUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWEuaApAQCAtNjcsNiArNjcsNyBAQCBw
cml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBzZXRSb290Q29tcG9zaXRpbmdMYXllcihXZWJDb3Jl
OjpHcmFwaGljc0xheWVyKikgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlQ29t
cG9zaXRpbmdMYXllckZsdXNoKCkgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIHNjaGVkdWxl
Q29tcG9zaXRpbmdMYXllckZsdXNoSW1tZWRpYXRlbHkoKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFs
IHZvaWQgYXR0YWNoVmlld092ZXJsYXlHcmFwaGljc0xheWVyKFdlYkNvcmU6OkZyYW1lKiwgV2Vi
Q29yZTo6R3JhcGhpY3NMYXllciopIG92ZXJyaWRlOwogCiAgICAgdmlydHVhbCB2b2lkIGFkZFRy
YW5zYWN0aW9uQ2FsbGJhY2tJRCh1aW50NjRfdCBjYWxsYmFja0lEKSBvdmVycmlkZTsKIApAQCAt
MTA3LDYgKzEwOCw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBib29sIGFkanVzdExheWVyRmx1
c2hUaHJvdHRsaW5nKFdlYkNvcmU6OkxheWVyRmx1c2hUaHJvdHRsZVN0YXRlOjpGbGFncykgb3Zl
cnJpZGU7CiAKICAgICB2b2lkIHVwZGF0ZVNjcm9sbGVkRXhwb3NlZFJlY3QoKTsKKyAgICB2b2lk
IHVwZGF0ZVJvb3RMYXllcnMoKTsKIAogICAgIHZvaWQgbGF5ZXJGbHVzaFRpbWVyRmlyZWQoV2Vi
Q29yZTo6VGltZXI8UmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWE+Kik7CiAgICAgdm9pZCBmbHVz
aExheWVycygpOwpAQCAtMTYwLDYgKzE2Miw5IEBAIHByaXZhdGU6CiAKICAgICB1aW50NjRfdCBt
X2N1cnJlbnRUcmFuc2FjdGlvbklEOwogICAgIFZlY3RvcjxSZW1vdGVMYXllclRyZWVUcmFuc2Fj
dGlvbjo6VHJhbnNhY3Rpb25DYWxsYmFja0lEPiBtX3BlbmRpbmdDYWxsYmFja0lEczsKKworICAg
IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqIG1fY29udGVudExheWVyOworICAgIFdlYkNvcmU6Okdy
YXBoaWNzTGF5ZXIqIG1fdmlld092ZXJsYXlSb290TGF5ZXI7CiB9OwogCiBEUkFXSU5HX0FSRUFf
VFlQRV9DQVNUUyhSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYSwgdHlwZSgpID09IERyYXdpbmdB
cmVhVHlwZVJlbW90ZUxheWVyVHJlZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvbWFjL1JlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhLm1tIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9SZW1vdGVMYXllclRyZWVEcmF3aW5nQXJl
YS5tbQppbmRleCAzN2M4OTQ3Li45ZTQ4YjU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1JlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhLm1tCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvUmVtb3RlTGF5ZXJUcmVlRHJh
d2luZ0FyZWEubW0KQEAgLTQwLDYgKzQwLDcgQEAKICNpbXBvcnQgPFdlYkNvcmUvRnJhbWUuaD4K
ICNpbXBvcnQgPFdlYkNvcmUvRnJhbWVWaWV3Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL01haW5GcmFt
ZS5oPgorI2ltcG9ydCA8V2ViQ29yZS9QYWdlT3ZlcmxheUNvbnRyb2xsZXIuaD4KICNpbXBvcnQg
PFdlYkNvcmUvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1JlbmRl
clZpZXcuaD4KICNpbXBvcnQgPFdlYkNvcmUvU2V0dGluZ3MuaD4KQEAgLTY2LDYgKzY3LDggQEAg
UmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWE6OlJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhKFdl
YlBhZ2UmIHdlYlBhZ2UsIGNvbnN0IFcKICAgICAsIG1faGFkRmx1c2hEZWZlcnJlZFdoaWxlV2Fp
dGluZ0ZvckJhY2tpbmdTdG9yZVN3YXAoZmFsc2UpCiAgICAgLCBtX2Rpc3BsYXlSZWZyZXNoTW9u
aXRvcnNUb05vdGlmeShudWxscHRyKQogICAgICwgbV9jdXJyZW50VHJhbnNhY3Rpb25JRCgwKQor
ICAgICwgbV9jb250ZW50TGF5ZXIobnVsbHB0cikKKyAgICAsIG1fdmlld092ZXJsYXlSb290TGF5
ZXIobnVsbHB0cikKIHsKICAgICB3ZWJQYWdlLmNvcmVQYWdlKCktPnNldHRpbmdzKCkuc2V0Rm9y
Y2VDb21wb3NpdGluZ01vZGUodHJ1ZSk7CiAjaWYgUExBVEZPUk0oSU9TKQpAQCAtMTEzLDE1ICsx
MTYsMzEgQEAgdm9pZCBSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYTo6d2lsbERlc3Ryb3lEaXNw
bGF5UmVmcmVzaE1vbml0b3IoRGlzcGxheVJlZnJlc2gKICAgICAgICAgbV9kaXNwbGF5UmVmcmVz
aE1vbml0b3JzVG9Ob3RpZnktPnJlbW92ZShyZW1vdGVNb25pdG9yKTsKIH0KIAotdm9pZCBSZW1v
dGVMYXllclRyZWVEcmF3aW5nQXJlYTo6c2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIoR3JhcGhpY3NM
YXllciogcm9vdExheWVyKQordm9pZCBSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYTo6dXBkYXRl
Um9vdExheWVycygpCiB7CiAgICAgVmVjdG9yPEdyYXBoaWNzTGF5ZXIqPiBjaGlsZHJlbjsKLSAg
ICBpZiAocm9vdExheWVyKSB7Ci0gICAgICAgIGNoaWxkcmVuLmFwcGVuZChyb290TGF5ZXIpOwot
ICAgICAgICBjaGlsZHJlbi5hcHBlbmQobV93ZWJQYWdlLnBhZ2VPdmVybGF5Q29udHJvbGxlcigp
LnZpZXdPdmVybGF5Um9vdExheWVyKCkpOworICAgIGlmIChtX2NvbnRlbnRMYXllcikgeworICAg
ICAgICBjaGlsZHJlbi5hcHBlbmQobV9jb250ZW50TGF5ZXIpOworICAgICAgICBpZiAobV92aWV3
T3ZlcmxheVJvb3RMYXllcikKKyAgICAgICAgICAgIGNoaWxkcmVuLmFwcGVuZChtX3ZpZXdPdmVy
bGF5Um9vdExheWVyKTsKICAgICB9CisKICAgICBtX3Jvb3RMYXllci0+c2V0Q2hpbGRyZW4oY2hp
bGRyZW4pOworfQorCit2b2lkIFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhOjphdHRhY2hWaWV3
T3ZlcmxheUdyYXBoaWNzTGF5ZXIoRnJhbWUqIGZyYW1lLCBHcmFwaGljc0xheWVyKiB2aWV3T3Zl
cmxheVJvb3RMYXllcikKK3sKKyAgICBpZiAoIWZyYW1lLT5pc01haW5GcmFtZSgpKQorICAgICAg
ICByZXR1cm47CiAKKyAgICBtX3ZpZXdPdmVybGF5Um9vdExheWVyID0gdmlld092ZXJsYXlSb290
TGF5ZXI7CisgICAgdXBkYXRlUm9vdExheWVycygpOworfQorCit2b2lkIFJlbW90ZUxheWVyVHJl
ZURyYXdpbmdBcmVhOjpzZXRSb290Q29tcG9zaXRpbmdMYXllcihHcmFwaGljc0xheWVyKiByb290
TGF5ZXIpCit7CisgICAgbV9jb250ZW50TGF5ZXIgPSByb290TGF5ZXI7CisgICAgdXBkYXRlUm9v
dExheWVycygpOwogICAgIHNjaGVkdWxlQ29tcG9zaXRpbmdMYXllckZsdXNoKCk7CiB9CiAKQEAg
LTIzNCw4ICsyNTMsNiBAQCB2b2lkIFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhOjp1cGRhdGVT
Y3JvbGxlZEV4cG9zZWRSZWN0KCkKICNlbmRpZgogCiAgICAgZnJhbWVWaWV3LT5zZXRFeHBvc2Vk
UmVjdChtX3Njcm9sbGVkRXhwb3NlZFJlY3QpOwotCi0gICAgbV93ZWJQYWdlLnBhZ2VPdmVybGF5
Q29udHJvbGxlcigpLmRpZENoYW5nZUV4cG9zZWRSZWN0KCk7CiB9CiAKIFRpbGVkQmFja2luZyog
UmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWE6Om1haW5GcmFtZVRpbGVkQmFja2luZygpIGNvbnN0
CkBAIC0zMjEsNyArMzM4LDcgQEAgdm9pZCBSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYTo6Zmx1
c2hMYXllcnMoKQogCiAgICAgRmxvYXRSZWN0IHZpc2libGVSZWN0KEZsb2F0UG9pbnQoKSwgbV92
aWV3U2l6ZSk7CiAgICAgdmlzaWJsZVJlY3QuaW50ZXJzZWN0KG1fc2Nyb2xsZWRFeHBvc2VkUmVj
dCk7Ci0gICAgbV93ZWJQYWdlLnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLmZsdXNoUGFnZU92ZXJs
YXlMYXllcnModmlzaWJsZVJlY3QpOworCiAgICAgbV93ZWJQYWdlLm1haW5GcmFtZVZpZXcoKS0+
Zmx1c2hDb21wb3NpdGluZ1N0YXRlSW5jbHVkaW5nU3ViZnJhbWVzKCk7CiAgICAgbV9yb290TGF5
ZXItPmZsdXNoQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKTsKIApAQCAtNDEwLDcg
KzQyNyw2IEBAIHZvaWQgUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWE6OmRpZFVwZGF0ZSgpCiB2
b2lkIFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhOjptYWluRnJhbWVDb250ZW50U2l6ZUNoYW5n
ZWQoY29uc3QgSW50U2l6ZSYgY29udGVudHNTaXplKQogewogICAgIG1fcm9vdExheWVyLT5zZXRT
aXplKGNvbnRlbnRzU2l6ZSk7Ci0gICAgbV93ZWJQYWdlLnBhZ2VPdmVybGF5Q29udHJvbGxlcigp
LmRpZENoYW5nZURvY3VtZW50U2l6ZSgpOwogfQogCiBib29sIFJlbW90ZUxheWVyVHJlZURyYXdp
bmdBcmVhOjptYXJrTGF5ZXJzVm9sYXRpbGVJbW1lZGlhdGVseUlmUG9zc2libGUoKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9TZXJ2aWNlc092ZXJs
YXlDb250cm9sbGVyLm1tIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9T
ZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyLm1tCmluZGV4IGZiNjhiN2EuLmZhNjY4MzMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvU2VydmljZXNPdmVy
bGF5Q29udHJvbGxlci5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
bWFjL1NlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIubW0KQEAgLTQyLDYgKzQyLDcgQEAKICNpbXBv
cnQgPFdlYkNvcmUvR3JhcGhpY3NMYXllci5oPgogI2ltcG9ydCA8V2ViQ29yZS9HcmFwaGljc0xh
eWVyQ0EuaD4KICNpbXBvcnQgPFdlYkNvcmUvTWFpbkZyYW1lLmg+CisjaW1wb3J0IDxXZWJDb3Jl
L1BhZ2VPdmVybGF5Q29udHJvbGxlci5oPgogI2ltcG9ydCA8V2ViQ29yZS9QbGF0Zm9ybUNBQW5p
bWF0aW9uTWFjLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1NvZnRMaW5raW5nLmg+CiAKQEAgLTIyNSwy
MyArMjI2LDIzIEBAIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6On5TZXJ2aWNlc092ZXJsYXlD
b250cm9sbGVyKCkKICAgICAgICAgaGlnaGxpZ2h0LT5pbnZhbGlkYXRlKCk7CiB9CiAKLXZvaWQg
U2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6cGFnZU92ZXJsYXlEZXN0cm95ZWQoUGFnZU92ZXJs
YXkqKQordm9pZCBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpwYWdlT3ZlcmxheURlc3Ryb3ll
ZChQYWdlT3ZlcmxheSYpCiB7CiAgICAgLy8gQmVmb3JlIHRoZSBvdmVybGF5IGlzIGRlc3Ryb3ll
ZCwgaXQgc2hvdWxkIGhhdmUgbW92ZWQgb3V0IG9mIHRoZSBXZWJQYWdlLAogICAgIC8vIGF0IHdo
aWNoIHBvaW50IHdlIGFscmVhZHkgY2xlYXJlZCBvdXIgYmFjayBwb2ludGVyLgogICAgIEFTU0VS
VCghbV9zZXJ2aWNlc092ZXJsYXkpOwogfQogCi12b2lkIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xs
ZXI6OndpbGxNb3ZlVG9XZWJQYWdlKFBhZ2VPdmVybGF5KiwgV2ViUGFnZSogd2ViUGFnZSkKK3Zv
aWQgU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6d2lsbE1vdmVUb1BhZ2UoUGFnZU92ZXJsYXkm
LCBQYWdlKiBwYWdlKQogewotICAgIGlmICh3ZWJQYWdlKQorICAgIGlmIChwYWdlKQogICAgICAg
ICByZXR1cm47CiAKICAgICBBU1NFUlQobV9zZXJ2aWNlc092ZXJsYXkpOwogICAgIG1fc2Vydmlj
ZXNPdmVybGF5ID0gbnVsbHB0cjsKIH0KIAotdm9pZCBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVy
OjpkaWRNb3ZlVG9XZWJQYWdlKFBhZ2VPdmVybGF5KiwgV2ViUGFnZSopCit2b2lkIFNlcnZpY2Vz
T3ZlcmxheUNvbnRyb2xsZXI6OmRpZE1vdmVUb1BhZ2UoUGFnZU92ZXJsYXkmLCBQYWdlKikKIHsK
IH0KIApAQCAtNDQ3LDcgKzQ0OCw3IEBAIHZvaWQgU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6
ZGV0ZXJtaW5lQWN0aXZlSGlnaGxpZ2h0VGltZXJGaXJlZChUaW1lcjxTZXJ2aWNlCiAgICAgZGV0
ZXJtaW5lQWN0aXZlSGlnaGxpZ2h0KG1vdXNlSXNPdmVyQnV0dG9uKTsKIH0KIAotdm9pZCBTZXJ2
aWNlc092ZXJsYXlDb250cm9sbGVyOjpkcmF3UmVjdChQYWdlT3ZlcmxheSogb3ZlcmxheSwgR3Jh
cGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQsIGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCkK
K3ZvaWQgU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6ZHJhd1JlY3QoUGFnZU92ZXJsYXkmIG92
ZXJsYXksIEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBJbnRSZWN0JiBk
aXJ0eVJlY3QpCiB7CiB9CiAKQEAgLTU4Myw3ICs1ODQsNyBAQCB2b2lkIFNlcnZpY2VzT3Zlcmxh
eUNvbnRyb2xsZXI6OmRpZFJlYnVpbGRQb3RlbnRpYWxIaWdobGlnaHRzKCkKIHsKICAgICBpZiAo
bV9wb3RlbnRpYWxIaWdobGlnaHRzLmlzRW1wdHkoKSkgewogICAgICAgICBpZiAobV9zZXJ2aWNl
c092ZXJsYXkpCi0gICAgICAgICAgICBtX3dlYlBhZ2UudW5pbnN0YWxsUGFnZU92ZXJsYXkobV9z
ZXJ2aWNlc092ZXJsYXkpOworICAgICAgICAgICAgbV93ZWJQYWdlLmNvcmVQYWdlKCktPnBhZ2VP
dmVybGF5Q29udHJvbGxlcigpLnVuaW5zdGFsbFBhZ2VPdmVybGF5KG1fc2VydmljZXNPdmVybGF5
LCBQYWdlT3ZlcmxheTo6RmFkZU1vZGU6OkRvTm90RmFkZSk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKQEAgLTYwMSw5ICs2MDIsOSBAQCB2b2lkIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6
OmNyZWF0ZU92ZXJsYXlJZk5lZWRlZCgpCiAgICAgaWYgKG1fc2VydmljZXNPdmVybGF5KQogICAg
ICAgICByZXR1cm47CiAKLSAgICBSZWZQdHI8UGFnZU92ZXJsYXk+IG92ZXJsYXkgPSBQYWdlT3Zl
cmxheTo6Y3JlYXRlKHRoaXMsIFBhZ2VPdmVybGF5OjpPdmVybGF5VHlwZTo6RG9jdW1lbnQpOwor
ICAgIFJlZlB0cjxQYWdlT3ZlcmxheT4gb3ZlcmxheSA9IFBhZ2VPdmVybGF5OjpjcmVhdGUoKnRo
aXMsIFBhZ2VPdmVybGF5OjpPdmVybGF5VHlwZTo6RG9jdW1lbnQpOwogICAgIG1fc2VydmljZXNP
dmVybGF5ID0gb3ZlcmxheS5nZXQoKTsKLSAgICBtX3dlYlBhZ2UuaW5zdGFsbFBhZ2VPdmVybGF5
KG92ZXJsYXkucmVsZWFzZSgpLCBQYWdlT3ZlcmxheTo6RmFkZU1vZGU6OkRvTm90RmFkZSk7Cisg
ICAgbV93ZWJQYWdlLmNvcmVQYWdlKCktPnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLmluc3RhbGxQ
YWdlT3ZlcmxheShvdmVybGF5LnJlbGVhc2UoKSwgUGFnZU92ZXJsYXk6OkZhZGVNb2RlOjpEb05v
dEZhZGUpOwogfQogCiBWZWN0b3I8UmVmUHRyPFJhbmdlPj4gU2VydmljZXNPdmVybGF5Q29udHJv
bGxlcjo6dGVsZXBob25lTnVtYmVyUmFuZ2VzRm9yRm9jdXNlZEZyYW1lKCkKQEAgLTcxNywxMyAr
NzE4LDEzIEBAIHZvaWQgU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6ZGV0ZXJtaW5lQWN0aXZl
SGlnaGxpZ2h0KGJvb2wmIG1vdXNlSXNPdmVyQWN0aXZlCiAgICAgICAgIG1fYWN0aXZlSGlnaGxp
Z2h0ID0gbV9uZXh0QWN0aXZlSGlnaGxpZ2h0LnJlbGVhc2UoKTsKIAogICAgICAgICBpZiAobV9h
Y3RpdmVIaWdobGlnaHQpIHsKLSAgICAgICAgICAgIG1fc2VydmljZXNPdmVybGF5LT5sYXllcigp
LT5hZGRDaGlsZChtX2FjdGl2ZUhpZ2hsaWdodC0+bGF5ZXIoKSk7CisgICAgICAgICAgICBtX3Nl
cnZpY2VzT3ZlcmxheS0+bGF5ZXIoKS5hZGRDaGlsZChtX2FjdGl2ZUhpZ2hsaWdodC0+bGF5ZXIo
KSk7CiAgICAgICAgICAgICBtX2FjdGl2ZUhpZ2hsaWdodC0+ZmFkZUluKCk7CiAgICAgICAgIH0K
ICAgICB9CiB9CiAKLWJvb2wgU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6bW91c2VFdmVudChQ
YWdlT3ZlcmxheSosIGNvbnN0IFdlYk1vdXNlRXZlbnQmIGV2ZW50KQorYm9vbCBTZXJ2aWNlc092
ZXJsYXlDb250cm9sbGVyOjptb3VzZUV2ZW50KFBhZ2VPdmVybGF5JiwgY29uc3QgUGxhdGZvcm1N
b3VzZUV2ZW50JiBldmVudCkKIHsKICAgICBtX21vdXNlUG9zaXRpb24gPSBtX3dlYlBhZ2UuY29y
ZVBhZ2UoKS0+bWFpbkZyYW1lKCkudmlldygpLT5yb290Vmlld1RvQ29udGVudHMoZXZlbnQucG9z
aXRpb24oKSk7CiAKQEAgLTczMSwxMyArNzMyLDEzIEBAIGJvb2wgU2VydmljZXNPdmVybGF5Q29u
dHJvbGxlcjo6bW91c2VFdmVudChQYWdlT3ZlcmxheSosIGNvbnN0IFdlYk1vdXNlRXZlbnQmIGV2
CiAgICAgZGV0ZXJtaW5lQWN0aXZlSGlnaGxpZ2h0KG1vdXNlSXNPdmVyQWN0aXZlSGlnaGxpZ2h0
QnV0dG9uKTsKIAogICAgIC8vIENhbmNlbCB0aGUgcG90ZW50aWFsIGNsaWNrIGlmIGFueSBidXR0
b24gb3RoZXIgdGhhbiB0aGUgbGVmdCBidXR0b24gY2hhbmdlcyBzdGF0ZSwgYW5kIGlnbm9yZSB0
aGUgZXZlbnQuCi0gICAgaWYgKGV2ZW50LmJ1dHRvbigpICE9IFdlYk1vdXNlRXZlbnQ6OkxlZnRC
dXR0b24pIHsKKyAgICBpZiAoZXZlbnQuYnV0dG9uKCkgIT0gTW91c2VCdXR0b246OkxlZnRCdXR0
b24pIHsKICAgICAgICAgbV9jdXJyZW50TW91c2VEb3duT25CdXR0b25IaWdobGlnaHQgPSBudWxs
cHRyOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAgLy8gSWYgdGhlIG1vdXNl
IGxpZnRlZCB3aGlsZSBzdGlsbCBvdmVyIHRoZSBoaWdobGlnaHQgYnV0dG9uIHRoYXQgaXQgd2Vu
dCBkb3duIG9uLCB0aGVuIHRoYXQgaXMgYSBjbGljay4KLSAgICBpZiAoZXZlbnQudHlwZSgpID09
IFdlYkV2ZW50OjpNb3VzZVVwKSB7CisgICAgaWYgKGV2ZW50LnR5cGUoKSA9PSBQbGF0Zm9ybUV2
ZW50OjpNb3VzZVJlbGVhc2VkKSB7CiAgICAgICAgIFJlZlB0cjxIaWdobGlnaHQ+IG1vdXNlRG93
bkhpZ2hsaWdodCA9IG1fY3VycmVudE1vdXNlRG93bk9uQnV0dG9uSGlnaGxpZ2h0OwogICAgICAg
ICBtX2N1cnJlbnRNb3VzZURvd25PbkJ1dHRvbkhpZ2hsaWdodCA9IG51bGxwdHI7CiAKQEAgLTc1
Miw3ICs3NTMsNyBAQCBib29sIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6Om1vdXNlRXZlbnQo
UGFnZU92ZXJsYXkqLCBjb25zdCBXZWJNb3VzZUV2ZW50JiBldgogICAgIH0KIAogICAgIC8vIElm
IHRoZSBtb3VzZSBtb3ZlZCBvdXRzaWRlIG9mIHRoZSBidXR0b24gdHJhY2tpbmcgYSBwb3RlbnRp
YWwgY2xpY2ssIHN0b3AgdHJhY2tpbmcgdGhlIGNsaWNrLgotICAgIGlmIChldmVudC50eXBlKCkg
PT0gV2ViRXZlbnQ6Ok1vdXNlTW92ZSkgeworICAgIGlmIChldmVudC50eXBlKCkgPT0gUGxhdGZv
cm1FdmVudDo6TW91c2VNb3ZlZCkgewogICAgICAgICBpZiAobV9jdXJyZW50TW91c2VEb3duT25C
dXR0b25IaWdobGlnaHQgJiYgbW91c2VJc092ZXJBY3RpdmVIaWdobGlnaHRCdXR0b24pCiAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKIApAQCAtNzYxLDcgKzc2Miw3IEBAIGJvb2wgU2VydmljZXNP
dmVybGF5Q29udHJvbGxlcjo6bW91c2VFdmVudChQYWdlT3ZlcmxheSosIGNvbnN0IFdlYk1vdXNl
RXZlbnQmIGV2CiAgICAgfQogCiAgICAgLy8gSWYgdGhlIG1vdXNlIHdlbnQgZG93biBvdmVyIHRo
ZSBhY3RpdmUgaGlnaGxpZ2h0J3MgYnV0dG9uLCB0cmFjayB0aGlzIGFzIGEgcG90ZW50aWFsIGNs
aWNrLgotICAgIGlmIChldmVudC50eXBlKCkgPT0gV2ViRXZlbnQ6Ok1vdXNlRG93bikgeworICAg
IGlmIChldmVudC50eXBlKCkgPT0gUGxhdGZvcm1FdmVudDo6TW91c2VQcmVzc2VkKSB7CiAgICAg
ICAgIGlmIChtX2FjdGl2ZUhpZ2hsaWdodCAmJiBtb3VzZUlzT3ZlckFjdGl2ZUhpZ2hsaWdodEJ1
dHRvbikgewogICAgICAgICAgICAgbV9jdXJyZW50TW91c2VEb3duT25CdXR0b25IaWdobGlnaHQg
PSBtX2FjdGl2ZUhpZ2hsaWdodDsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtNzczLDkg
Kzc3NCw5IEBAIGJvb2wgU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6bW91c2VFdmVudChQYWdl
T3ZlcmxheSosIGNvbnN0IFdlYk1vdXNlRXZlbnQmIGV2CiAgICAgcmV0dXJuIGZhbHNlOwogfQog
Ci12b2lkIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OmRpZFNjcm9sbEZyYW1lKFBhZ2VPdmVy
bGF5KiwgRnJhbWUqIGZyYW1lKQordm9pZCBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpkaWRT
Y3JvbGxGcmFtZShQYWdlT3ZlcmxheSYsIEZyYW1lJiBmcmFtZSkKIHsKLSAgICBpZiAoZnJhbWUt
PmlzTWFpbkZyYW1lKCkpCisgICAgaWYgKGZyYW1lLmlzTWFpbkZyYW1lKCkpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIGJ1aWxkUGhvbmVOdW1iZXJIaWdobGlnaHRzKCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1RpbGVkQ29yZUFuaW1hdGlvbkRy
YXdpbmdBcmVhLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1RpbGVk
Q29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhLmgKaW5kZXggYjgxYTRhNC4uOWU1YWJkYSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9UaWxlZENvcmVBbmlt
YXRpb25EcmF3aW5nQXJlYS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9tYWMvVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWEuaApAQCAtODQsNiArODQsOCBAQCBw
cml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCB2aWV3U3RhdGVEaWRDaGFuZ2UoV2ViQ29yZTo6Vmll
d1N0YXRlOjpGbGFncyBjaGFuZ2VkLCBib29sIHdhbnRzRGlkVXBkYXRlVmlld1N0YXRlKSBvdmVy
cmlkZTsKICAgICB2b2lkIGRpZFVwZGF0ZVZpZXdTdGF0ZVRpbWVyRmlyZWQoKTsKIAorICAgIHZp
cnR1YWwgdm9pZCBhdHRhY2hWaWV3T3ZlcmxheUdyYXBoaWNzTGF5ZXIoV2ViQ29yZTo6RnJhbWUq
LCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKikgb3ZlcnJpZGU7CisKICAgICAvLyBXZWJDb3JlOjpM
YXllckZsdXNoU2NoZWR1bGVyQ2xpZW50CiAgICAgdmlydHVhbCBib29sIGZsdXNoTGF5ZXJzKCkg
b3ZlcnJpZGU7CiAKQEAgLTEwNiw2ICsxMDgsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgdXBkYXRl
TGF5ZXJIb3N0aW5nQ29udGV4dCgpOwogCiAgICAgdm9pZCBzZXRSb290Q29tcG9zaXRpbmdMYXll
cihDQUxheWVyICopOworICAgIHZvaWQgdXBkYXRlUm9vdExheWVycygpOwogCiAgICAgV2ViQ29y
ZTo6VGlsZWRCYWNraW5nKiBtYWluRnJhbWVUaWxlZEJhY2tpbmcoKSBjb25zdDsKICAgICB2b2lk
IHVwZGF0ZURlYnVnSW5mb0xheWVyKGJvb2wgc2hvd0xheWVyKTsKQEAgLTEzOCw2ICsxNDEsOCBA
QCBwcml2YXRlOgogICAgIFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4IG1fdHJhbnNmb3Jt
OwogCiAgICAgUnVuTG9vcDo6VGltZXI8VGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWE+IG1f
c2VuZERpZFVwZGF0ZVZpZXdTdGF0ZVRpbWVyOworCisgICAgV2ViQ29yZTo6R3JhcGhpY3NMYXll
ciogbV92aWV3T3ZlcmxheVJvb3RMYXllcjsKIH07CiAKIERSQVdJTkdfQVJFQV9UWVBFX0NBU1RT
KFRpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhLCB0eXBlKCkgPT0gRHJhd2luZ0FyZWFUeXBl
VGlsZWRDb3JlQW5pbWF0aW9uKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9tYWMvVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWEubW0gYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1RpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdB
cmVhLm1tCmluZGV4IGU3NzU5MTkuLjI5OGIwMjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWEubW0K
KysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9UaWxlZENvcmVBbmlt
YXRpb25EcmF3aW5nQXJlYS5tbQpAQCAtNTEsNiArNTEsNyBAQAogI2ltcG9ydCA8V2ViQ29yZS9T
Y3JvbGxiYXJUaGVtZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9TZXR0aW5ncy5oPgogI2ltcG9ydCA8
V2ViQ29yZS9UaWxlZEJhY2tpbmcuaD4KKyNpbXBvcnQgPFdlYkNvcmUvV2ViQWN0aW9uRGlzYWJs
aW5nQ0FMYXllckRlbGVnYXRlLmg+CiAjaW1wb3J0IDx3dGYvTWFpblRocmVhZC5oPgogCiAjaWYg
RU5BQkxFKEFTWU5DX1NDUk9MTElORykKQEAgLTc2LDEwICs3NywxMiBAQCBUaWxlZENvcmVBbmlt
YXRpb25EcmF3aW5nQXJlYTo6VGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWEoV2ViUGFnZSYg
d2ViUGFnZSwgYwogICAgICwgbV9zY3JvbGxlZEV4cG9zZWRSZWN0KEZsb2F0UmVjdDo6aW5maW5p
dGVSZWN0KCkpCiAgICAgLCBtX3RyYW5zaWVudFpvb21TY2FsZSgxKQogICAgICwgbV9zZW5kRGlk
VXBkYXRlVmlld1N0YXRlVGltZXIoUnVuTG9vcDo6bWFpbigpLCB0aGlzLCAmVGlsZWRDb3JlQW5p
bWF0aW9uRHJhd2luZ0FyZWE6OmRpZFVwZGF0ZVZpZXdTdGF0ZVRpbWVyRmlyZWQpCisgICAgLCBt
X3ZpZXdPdmVybGF5Um9vdExheWVyKG51bGxwdHIpCiB7CiAgICAgbV93ZWJQYWdlLmNvcmVQYWdl
KCktPnNldHRpbmdzKCkuc2V0Rm9yY2VDb21wb3NpdGluZ01vZGUodHJ1ZSk7CiAKICAgICBtX2hv
c3RpbmdMYXllciA9IFtDQUxheWVyIGxheWVyXTsKKyAgICBbbV9ob3N0aW5nTGF5ZXIgc2V0RGVs
ZWdhdGU6W1dlYkFjdGlvbkRpc2FibGluZ0NBTGF5ZXJEZWxlZ2F0ZSBzaGFyZWRdXTsKICAgICBb
bV9ob3N0aW5nTGF5ZXIgc2V0RnJhbWU6bV93ZWJQYWdlLmJvdW5kcygpXTsKICAgICBbbV9ob3N0
aW5nTGF5ZXIgc2V0T3BhcXVlOllFU107CiAgICAgW21faG9zdGluZ0xheWVyIHNldEdlb21ldHJ5
RmxpcHBlZDpZRVNdOwpAQCAtMjA0LDkgKzIwNywyOCBAQCB2b2lkIFRpbGVkQ29yZUFuaW1hdGlv
bkRyYXdpbmdBcmVhOjp1cGRhdGVQcmVmZXJlbmNlcyhjb25zdCBXZWJQcmVmZXJlbmNlc1N0b3Jl
JgogICAgIHVwZGF0ZURlYnVnSW5mb0xheWVyKHNob3dUaWxlZFNjcm9sbGluZ0luZGljYXRvcik7
CiB9CiAKK3ZvaWQgVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWE6OnVwZGF0ZVJvb3RMYXll
cnMoKQoreworICAgIGlmICghbV9yb290TGF5ZXIpIHsKKyAgICAgICAgW21faG9zdGluZ0xheWVy
IHNldFN1YmxheWVyczpAWyBdXTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFttX2hv
c3RpbmdMYXllciBzZXRTdWJsYXllcnM6bV92aWV3T3ZlcmxheVJvb3RMYXllciA/IEBbIG1fcm9v
dExheWVyLmdldCgpLCBtX3ZpZXdPdmVybGF5Um9vdExheWVyLT5wbGF0Zm9ybUxheWVyKCkgXSA6
IEBbIG1fcm9vdExheWVyLmdldCgpIF1dOworfQorCit2b2lkIFRpbGVkQ29yZUFuaW1hdGlvbkRy
YXdpbmdBcmVhOjphdHRhY2hWaWV3T3ZlcmxheUdyYXBoaWNzTGF5ZXIoRnJhbWUqIGZyYW1lLCBH
cmFwaGljc0xheWVyKiB2aWV3T3ZlcmxheVJvb3RMYXllcikKK3sKKyAgICBpZiAoIWZyYW1lLT5p
c01haW5GcmFtZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3ZpZXdPdmVybGF5Um9vdExh
eWVyID0gdmlld092ZXJsYXlSb290TGF5ZXI7CisgICAgdXBkYXRlUm9vdExheWVycygpOworfQor
CiB2b2lkIFRpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhOjptYWluRnJhbWVDb250ZW50U2l6
ZUNoYW5nZWQoY29uc3QgSW50U2l6ZSYgc2l6ZSkKIHsKLSAgICBtX3dlYlBhZ2UucGFnZU92ZXJs
YXlDb250cm9sbGVyKCkuZGlkQ2hhbmdlRG9jdW1lbnRTaXplKCk7CisKIH0KIAogdm9pZCBUaWxl
ZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYTo6dXBkYXRlSW50cmluc2ljQ29udGVudFNpemVJZk5l
ZWRlZCgpCkBAIC0yODMsNyArMzA1LDEwIEBAIGJvb2wgVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2lu
Z0FyZWE6OmZsdXNoTGF5ZXJzKCkKIAogICAgIEZsb2F0UmVjdCB2aXNpYmxlUmVjdCA9IFttX2hv
c3RpbmdMYXllciBmcmFtZV07CiAgICAgdmlzaWJsZVJlY3QuaW50ZXJzZWN0KG1fc2Nyb2xsZWRF
eHBvc2VkUmVjdCk7Ci0gICAgbV93ZWJQYWdlLnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLmZsdXNo
UGFnZU92ZXJsYXlMYXllcnModmlzaWJsZVJlY3QpOworCisgICAgLy8gQmVjYXVzZSBvdXIgdmll
dy1yZWxhdGl2ZSBvdmVybGF5IHJvb3QgbGF5ZXIgaXMgbm90IGF0dGFjaGVkIHRvIHRoZSBtYWlu
IEdyYXBoaWNzTGF5ZXIgdHJlZSwgd2UgbmVlZCB0byBmbHVzaCBpdCBtYW51YWxseS4KKyAgICBp
ZiAobV92aWV3T3ZlcmxheVJvb3RMYXllcikKKyAgICAgICAgbV92aWV3T3ZlcmxheVJvb3RMYXll
ci0+Zmx1c2hDb21wb3NpdGluZ1N0YXRlKHZpc2libGVSZWN0KTsKIAogICAgIGJvb2wgcmV0dXJu
VmFsdWUgPSBtX3dlYlBhZ2UubWFpbkZyYW1lVmlldygpLT5mbHVzaENvbXBvc2l0aW5nU3RhdGVJ
bmNsdWRpbmdTdWJmcmFtZXMoKTsKICNpZiBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKQpAQCAtMzYz
LDggKzM4OCw2IEBAIHZvaWQgVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWE6OnVwZGF0ZVNj
cm9sbGVkRXhwb3NlZFJlY3QoKQogI2VuZGlmCiAKICAgICBmcmFtZVZpZXctPnNldEV4cG9zZWRS
ZWN0KG1fc2Nyb2xsZWRFeHBvc2VkUmVjdCk7Ci0KLSAgICBtX3dlYlBhZ2UucGFnZU92ZXJsYXlD
b250cm9sbGVyKCkuZGlkQ2hhbmdlRXhwb3NlZFJlY3QoKTsKIH0KIAogdm9pZCBUaWxlZENvcmVB
bmltYXRpb25EcmF3aW5nQXJlYTo6dXBkYXRlR2VvbWV0cnkoY29uc3QgSW50U2l6ZSYgdmlld1Np
emUsIGNvbnN0IEludFNpemUmIGxheWVyUG9zaXRpb24pCkBAIC00NjQsMTIgKzQ4NywxMiBAQCB2
b2lkIFRpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhOjpzZXRSb290Q29tcG9zaXRpbmdMYXll
cihDQUxheWVyICpsYXllcikKICAgICBbQ0FUcmFuc2FjdGlvbiBiZWdpbl07CiAgICAgW0NBVHJh
bnNhY3Rpb24gc2V0RGlzYWJsZUFjdGlvbnM6WUVTXTsKIAotICAgIFttX2hvc3RpbmdMYXllciBz
ZXRTdWJsYXllcnM6bGF5ZXIgPyBAWyBsYXllciwgbV93ZWJQYWdlLnBhZ2VPdmVybGF5Q29udHJv
bGxlcigpLnZpZXdPdmVybGF5Um9vdExheWVyKCktPnBsYXRmb3JtTGF5ZXIoKSBdIDogQFsgXV07
Ci0KICAgICBib29sIGhhZFJvb3RMYXllciA9ICEhbV9yb290TGF5ZXI7CiAgICAgbV9yb290TGF5
ZXIgPSBsYXllcjsKICAgICBbbV9yb290TGF5ZXIgc2V0U3VibGF5ZXJUcmFuc2Zvcm06bV90cmFu
c2Zvcm1dOwogCisgICAgdXBkYXRlUm9vdExheWVycygpOworCiAgICAgaWYgKGhhZFJvb3RMYXll
ciAhPSAhIWxheWVyKQogICAgICAgICBtX2xheWVySG9zdGluZ0NvbnRleHQtPnNldFJvb3RMYXll
cihsYXllciA/IG1faG9zdGluZ0xheWVyLmdldCgpIDogMCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV0tBY2Nlc3NpYmlsaXR5V2ViUGFnZU9i
amVjdE1hYy5tbSBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV0tBY2Nl
c3NpYmlsaXR5V2ViUGFnZU9iamVjdE1hYy5tbQppbmRleCAzODMzOWJhLi41NGRkNDQ0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dLQWNjZXNzaWJp
bGl0eVdlYlBhZ2VPYmplY3RNYWMubW0KKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL21hYy9XS0FjY2Vzc2liaWxpdHlXZWJQYWdlT2JqZWN0TWFjLm1tCkBAIC00MCw2ICs0
MCw3IEBACiAjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lVmlldy5oPgogI2ltcG9ydCA8V2ViQ29yZS9N
YWluRnJhbWUuaD4KICNpbXBvcnQgPFdlYkNvcmUvUGFnZS5oPgorI2ltcG9ydCA8V2ViQ29yZS9Q
YWdlT3ZlcmxheUNvbnRyb2xsZXIuaD4KICNpbXBvcnQgPFdlYkNvcmUvU2Nyb2xsVmlldy5oPgog
I2ltcG9ydCA8V2ViQ29yZS9TY3JvbGxiYXIuaD4KICNpbXBvcnQgPFdlYktpdFN5c3RlbUludGVy
ZmFjZS5oPgpAQCAtNzUsMTkgKzc2LDEzIEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CiAKIC0g
KE5TQXJyYXkgKilhY2Nlc3NpYmlsaXR5UGFyYW1ldGVyaXplZEF0dHJpYnV0ZU5hbWVzCiB7Ci0g
ICAgV0tSZXRhaW5QdHI8V0tBcnJheVJlZj4gcmVzdWx0ID0gYWRvcHRXSyhtX3BhZ2UtPnBhZ2VP
dmVybGF5Q29udHJvbGxlcigpLmNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlc05hbWVzKHRydWUp
KTsKLSAgICBpZiAoIXJlc3VsdCkKKyAgICBWZWN0b3I8U3RyaW5nPiByZXN1bHQgPSBtX3BhZ2Ut
PmNvcmVQYWdlKCktPnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLmNvcHlBY2Nlc3NpYmlsaXR5QXR0
cmlidXRlc05hbWVzKHRydWUpOworICAgIGlmIChyZXN1bHQuaXNFbXB0eSgpKQogICAgICAgICBy
ZXR1cm4gbmlsOwogICAgIAogICAgIE5TTXV0YWJsZUFycmF5ICpuYW1lcyA9IFtOU011dGFibGVB
cnJheSBhcnJheV07Ci0gICAgc2l6ZV90IGNvdW50ID0gV0tBcnJheUdldFNpemUocmVzdWx0Lmdl
dCgpKTsKLSAgICBmb3IgKHNpemVfdCBrID0gMDsgayA8IGNvdW50OyBrKyspIHsKLSAgICAgICAg
V0tUeXBlUmVmIGl0ZW0gPSBXS0FycmF5R2V0SXRlbUF0SW5kZXgocmVzdWx0LmdldCgpLCBrKTsK
LSAgICAgICAgaWYgKHRvSW1wbChpdGVtKS0+dHlwZSgpID09IEFQSTo6U3RyaW5nOjpBUElUeXBl
KSB7Ci0gICAgICAgICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IG5hbWUgPSBhZG9wdENGKFdL
U3RyaW5nQ29weUNGU3RyaW5nKGtDRkFsbG9jYXRvckRlZmF1bHQsIChXS1N0cmluZ1JlZilpdGVt
KSk7Ci0gICAgICAgICAgICBbbmFtZXMgYWRkT2JqZWN0OihOU1N0cmluZyAqKW5hbWUuZ2V0KCld
OwotICAgICAgICB9Ci0gICAgfQorICAgIGZvciAoYXV0byYgbmFtZSA6IHJlc3VsdCkKKyAgICAg
ICAgW25hbWVzIGFkZE9iamVjdDooTlNTdHJpbmcgKiluYW1lXTsKICAgICAKICAgICByZXR1cm4g
bmFtZXM7CiB9CkBAIC0xNjQsMjMgKzE1OSwyNiBAQCB1c2luZyBuYW1lc3BhY2UgV2ViS2l0Owog
CiAtIChpZClhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6KE5TU3RyaW5nICopYXR0cmlidXRl
IGZvclBhcmFtZXRlcjooaWQpcGFyYW1ldGVyCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tUeXBlUmVm
PiBwYWdlT3ZlcmxheVBhcmFtZXRlciA9IDA7Ci0gICAgCi0gICAgaWYgKFtwYXJhbWV0ZXIgaXNL
aW5kT2ZDbGFzczpbTlNWYWx1ZSBjbGFzc11dICYmIHN0cmNtcChbKE5TVmFsdWUqKXBhcmFtZXRl
ciBvYmpDVHlwZV0sIEBlbmNvZGUoTlNQb2ludCkpID09IDApIHsKLSAgICAgICAgTlNQb2ludCBw
b2ludCA9IFtzZWxmIGNvbnZlcnRTY3JlZW5Qb2ludFRvUm9vdFZpZXc6WyhOU1ZhbHVlICopcGFy
YW1ldGVyIHBvaW50VmFsdWVdXTsKLSAgICAgICAgcGFnZU92ZXJsYXlQYXJhbWV0ZXIgPSBXS1Bv
aW50Q3JlYXRlKFdLUG9pbnRNYWtlKHBvaW50LngsIHBvaW50LnkpKTsKLSAgICB9Ci0gICAgCi0g
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGF0dHJpYnV0ZVJlZiA9IGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoQ0ZTdHJpbmcoKENGU3RyaW5nUmVmKWF0dHJpYnV0ZSkpOwotICAgIFdLUmV0
YWluUHRyPFdLVHlwZVJlZj4gcmVzdWx0ID0gYWRvcHRXSyhtX3BhZ2UtPnBhZ2VPdmVybGF5Q29u
dHJvbGxlcigpLmNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWUoYXR0cmlidXRlUmVmLmdl
dCgpLCBwYWdlT3ZlcmxheVBhcmFtZXRlci5nZXQoKSkpOwotICAgIGlmICghcmVzdWx0KQorICAg
IFdlYkNvcmU6OkZsb2F0UG9pbnQgcGFnZU92ZXJsYXlQb2ludDsKKyAgICBpZiAoW3BhcmFtZXRl
ciBpc0tpbmRPZkNsYXNzOltOU1ZhbHVlIGNsYXNzXV0gJiYgIXN0cmNtcChbKE5TVmFsdWUgKilw
YXJhbWV0ZXIgb2JqQ1R5cGVdLCBAZW5jb2RlKE5TUG9pbnQpKSkKKyAgICAgICAgcGFnZU92ZXJs
YXlQb2ludCA9IFtzZWxmIGNvbnZlcnRTY3JlZW5Qb2ludFRvUm9vdFZpZXc6WyhOU1ZhbHVlICop
cGFyYW1ldGVyIHBvaW50VmFsdWVdXTsKKyAgICBlbHNlCiAgICAgICAgIHJldHVybiBuaWw7Ci0g
ICAgCi0gICAgaWYgKHRvSW1wbChyZXN1bHQuZ2V0KCkpLT50eXBlKCkgPT0gQVBJOjpTdHJpbmc6
OkFQSVR5cGUpCi0gICAgICAgIHJldHVybiBDRkJyaWRnaW5nUmVsZWFzZShXS1N0cmluZ0NvcHlD
RlN0cmluZyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAoV0tTdHJpbmdSZWYpcmVzdWx0LmdldCgpKSk7
Ci0gICAgaWYgKHRvSW1wbChyZXN1bHQuZ2V0KCkpLT50eXBlKCkgPT0gQVBJOjpCb29sZWFuOjpB
UElUeXBlKQotICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhCb29sOldLQm9vbGVh
bkdldFZhbHVlKHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4ocmVzdWx0LmdldCgpKSldOwotICAg
IAorCisgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOkAiQVhEYXRhRGV0ZWN0b3JF
eGlzdHNBdFBvaW50Il0gfHwgW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6QCJBWERpZFNob3dE
YXRhRGV0ZWN0b3JNZW51QXRQb2ludCJdKSB7CisgICAgICAgIGJvb2wgdmFsdWU7CisgICAgICAg
IGlmICghbV9wYWdlLT5jb3JlUGFnZSgpLT5wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKS5jb3B5QWNj
ZXNzaWJpbGl0eUF0dHJpYnV0ZUJvb2xWYWx1ZUZvclBvaW50KGF0dHJpYnV0ZSwgcGFnZU92ZXJs
YXlQb2ludCwgdmFsdWUpKQorICAgICAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAgICAgcmV0dXJu
IFtOU051bWJlciBudW1iZXJXaXRoQm9vbDp2YWx1ZV07CisgICAgfQorCisgICAgaWYgKFthdHRy
aWJ1dGUgaXNFcXVhbFRvU3RyaW5nOkAiQVhEYXRhRGV0ZWN0b3JUeXBlQXRQb2ludCJdKSB7Cisg
ICAgICAgIFN0cmluZyB2YWx1ZTsKKyAgICAgICAgaWYgKCFtX3BhZ2UtPmNvcmVQYWdlKCktPnBh
Z2VPdmVybGF5Q29udHJvbGxlcigpLmNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlU3RyaW5nVmFs
dWVGb3JQb2ludChhdHRyaWJ1dGUsIHBhZ2VPdmVybGF5UG9pbnQsIHZhbHVlKSkKKyAgICAgICAg
ICAgIHJldHVybiBuaWw7CisgICAgICAgIHJldHVybiBbTlNTdHJpbmcgc3RyaW5nV2l0aFN0cmlu
Zzp2YWx1ZV07CisgICAgfQorCiAgICAgcmV0dXJuIG5pbDsKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>238971</attachid>
            <date>2014-09-30 15:30:17 -0700</date>
            <delta_ts>2014-09-30 18:19:01 -0700</delta_ts>
            <desc>windows</desc>
            <filename>pageoverlay.diff</filename>
            <type>text/plain</type>
            <size>173239</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNv
cmUvQ01ha2VMaXN0cy50eHQKaW5kZXggNmRhZGMzMC4uZTFlOGZlNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKQEAgLTE5NDAsNiArMTk0MCw4IEBAIHNldChXZWJDb3JlX1NPVVJDRVMKICAgICBwYWdl
L1BhZ2VDb25zb2xlQ2xpZW50LmNwcAogICAgIHBhZ2UvUGFnZUdyb3VwLmNwcAogICAgIHBhZ2Uv
UGFnZUdyb3VwTG9hZERlZmVycmVyLmNwcAorICAgIHBhZ2UvUGFnZU92ZXJsYXkuY3BwCisgICAg
cGFnZS9QYWdlT3ZlcmxheUNvbnRyb2xsZXIuY3BwCiAgICAgcGFnZS9QYWdlU2VyaWFsaXplci5j
cHAKICAgICBwYWdlL1BhZ2VUaHJvdHRsZXIuY3BwCiAgICAgcGFnZS9QYWdlVmlzaWJpbGl0eVN0
YXRlLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4gYi9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgppbmRleCA5NDNjMzExLi42MTdhN2JhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgorKysgYi9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLmV4cC5pbgpAQCAtMTg3LDYgKzE4NywxMyBAQCBfX1pON1dlYkNvcmUxMU1lbW9yeUNh
Y2hlMThyZXNvdXJjZUZvclJlcXVlc3RFUktOU18xNVJlc291cmNlUmVxdWVzdEVOU185U2Vzc2lv
bgogX19aTjdXZWJDb3JlMTFNZW1vcnlDYWNoZTE5Z2V0T3JpZ2luc1dpdGhDYWNoZUVSTjNXVEY3
SGFzaFNldElOUzFfNlJlZlB0cklOU18xNFNlY3VyaXR5T3JpZ2luRUVFTlNfMThTZWN1cml0eU9y
aWdpbkhhc2hFTlMxXzEwSGFzaFRyYWl0c0lTNV9FRUVFCiBfX1pON1dlYkNvcmUxMU1lbW9yeUNh
Y2hlMjByZW1vdmVJbWFnZUZyb21DYWNoZUVSS05TXzNVUkxFUktOM1dURjZTdHJpbmdFCiBfX1pO
N1dlYkNvcmUxMU1lbW9yeUNhY2hlMjVyZW1vdmVSZXNvdXJjZXNXaXRoT3JpZ2luRVBOU18xNFNl
Y3VyaXR5T3JpZ2luRQorX19aTjdXZWJDb3JlMTFQYWdlT3ZlcmxheTE1c2V0TmVlZHNEaXNwbGF5
RVJLTlNfN0ludFJlY3RFCitfX1pON1dlYkNvcmUxMVBhZ2VPdmVybGF5MTVzZXROZWVkc0Rpc3Bs
YXlFdgorX19aTjdXZWJDb3JlMTFQYWdlT3ZlcmxheTIwc3RvcEZhZGVPdXRBbmltYXRpb25Fdgor
X19aTjdXZWJDb3JlMTFQYWdlT3ZlcmxheTVjbGVhckV2CitfX1pON1dlYkNvcmUxMVBhZ2VPdmVy
bGF5NWxheWVyRXYKK19fWk43V2ViQ29yZTExUGFnZU92ZXJsYXk2Y3JlYXRlRVJOUzBfNkNsaWVu
dEVOUzBfMTFPdmVybGF5VHlwZUUKK19fWk43V2ViQ29yZTExUGFnZU92ZXJsYXk4c2V0RnJhbWVF
TlNfN0ludFJlY3RFCiBfX1pON1dlYkNvcmUxMVNRTFJlc3VsdE9rRQogX19aTjdXZWJDb3JlMTFV
UkxXaXRoRGF0YUVQNk5TRGF0YVA1TlNVUkwKIF9fWk43V2ViQ29yZTExZ2V0VVJMQnl0ZXNFUEs3
X19DRlVSTFJOM1dURjZWZWN0b3JJY0xtNTEyRU5TM18xNUNyYXNoT25PdmVyZmxvd0VFRQpAQCAt
OTA5LDYgKzkxNiwxMiBAQCBfX1pON1dlYkNvcmUyMU1lbW9yeVByZXNzdXJlSGFuZGxlcjdpbnN0
YWxsRXYKIF9fWk43V2ViQ29yZTIxTmV0d29ya1N0b3JhZ2VTZXNzaW9uMjFkZWZhdWx0U3RvcmFn
ZVNlc3Npb25FdgogX19aTjdXZWJDb3JlMjFOZXR3b3JrU3RvcmFnZVNlc3Npb24yNXN3aXRjaFRv
TmV3VGVzdGluZ1Nlc3Npb25FdgogX19aTjdXZWJDb3JlMjFOZXR3b3JrU3RvcmFnZVNlc3Npb24y
OGNyZWF0ZVByaXZhdGVCcm93c2luZ1Nlc3Npb25FUktOM1dURjZTdHJpbmdFCitfX1pON1dlYkNv
cmUyMVBhZ2VPdmVybGF5Q29udHJvbGxlcjE4aW5zdGFsbFBhZ2VPdmVybGF5RU4zV1RGMTBQYXNz
UmVmUHRySU5TXzExUGFnZU92ZXJsYXlFRUVOUzNfOEZhZGVNb2RlRQorX19aTjdXZWJDb3JlMjFQ
YWdlT3ZlcmxheUNvbnRyb2xsZXIyMHVuaW5zdGFsbFBhZ2VPdmVybGF5RVBOU18xMVBhZ2VPdmVy
bGF5RU5TMV84RmFkZU1vZGVFCitfX1pON1dlYkNvcmUyMVBhZ2VPdmVybGF5Q29udHJvbGxlcjIw
dmlld092ZXJsYXlSb290TGF5ZXJFdgorX19aTjdXZWJDb3JlMjFQYWdlT3ZlcmxheUNvbnRyb2xs
ZXIzMmNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlc05hbWVzRWIKK19fWk43V2ViQ29yZTIxUGFn
ZU92ZXJsYXlDb250cm9sbGVyNDNjb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZUJvb2xWYWx1ZUZv
clBvaW50RU4zV1RGNlN0cmluZ0VOU18xMEZsb2F0UG9pbnRFUmIKK19fWk43V2ViQ29yZTIxUGFn
ZU92ZXJsYXlDb250cm9sbGVyNDVjb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVN0cmluZ1ZhbHVl
Rm9yUG9pbnRFTjNXVEY2U3RyaW5nRU5TXzEwRmxvYXRQb2ludEVSUzJfCiBfX1pON1dlYkNvcmUy
MVBsYXRmb3JtS2V5Ym9hcmRFdmVudDI0ZGlzYW1iaWd1YXRlS2V5RG93bkV2ZW50RU5TXzEzUGxh
dGZvcm1FdmVudDRUeXBlRWIKIF9fWk43V2ViQ29yZTIxUmVtb3RlQ29tbWFuZExpc3RlbmVyNmNy
ZWF0ZUVSTlNfMjdSZW1vdGVDb21tYW5kTGlzdGVuZXJDbGllbnRFCiBfX1pON1dlYkNvcmUyMVJl
c291cmNlTG9hZFNjaGVkdWxlcjIwc2VydmVQZW5kaW5nUmVxdWVzdHNFTlNfMjBSZXNvdXJjZUxv
YWRQcmlvcml0eUUKQEAgLTE2MDMsNiArMTYxNiw4IEBAIF9fWk5LN1dlYkNvcmUxMUhpc3RvcnlJ
dGVtOGNoaWxkcmVuRXYKIF9fWk5LN1dlYkNvcmUxMUhpc3RvcnlJdGVtOHJlZmVycmVyRXYKIF9f
Wk5LN1dlYkNvcmUxMUhpc3RvcnlJdGVtOXVybFN0cmluZ0V2CiBfX1pOSzdXZWJDb3JlMTFIaXN0
b3J5SXRlbTl2aWV3U3RhdGVFdgorX19aTks3V2ViQ29yZTExUGFnZU92ZXJsYXk1ZnJhbWVFdgor
X19aTks3V2ViQ29yZTExUGFnZU92ZXJsYXk2Ym91bmRzRXYKIF9fWk5LN1dlYkNvcmUxMVJlbmRl
ckJsb2NrMjVpbmxpbmVFbGVtZW50Q29udGludWF0aW9uRXYKIF9fWk5LN1dlYkNvcmUxMVJlbmRl
ckxheWVyMTlhYnNvbHV0ZUJvdW5kaW5nQm94RXYKIF9fWk5LN1dlYkNvcmUxMVJlbmRlckxheWVy
MjRuZWVkc0NvbXBvc2l0ZWRTY3JvbGxpbmdFdgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
dmN4cHJvai9XZWJDb3JlLnZjeHByb2oKaW5kZXggODY2MWJiMS4uNGRhNWFhMyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvagorKysgYi9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qCkBAIC03MTgwLDYg
KzcxODAsOCBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGFnZVxQYWdlQ29uc29sZUNs
aWVudC5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwYWdlXFBhZ2VHcm91cC5j
cHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwYWdlXFBhZ2VHcm91cExvYWREZWZl
cnJlci5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwYWdlXFBhZ2VPdmVybGF5
LmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBhZ2VcUGFnZU92ZXJsYXlDb250
cm9sbGVyLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBhZ2VcUGFnZVNlcmlh
bGl6ZXIuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGFnZVxQYWdlVGhyb3R0
bGVyLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBhZ2VcUGFnZVZpc2liaWxp
dHlTdGF0ZS5jcHAiIC8+CkBAIC0xOTE3NSw2ICsxOTE3Nyw4IEBACiAgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxwYWdlXFBhZ2VDb25zb2xlQ2xpZW50LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxwYWdlXFBhZ2VHcm91cC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5ccGFnZVxQYWdlR3JvdXBMb2FkRGVmZXJyZXIuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXHBhZ2VcUGFnZU92ZXJsYXkuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XHBhZ2VcUGFnZU92ZXJsYXlDb250cm9sbGVyLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxwYWdlXFBhZ2VTZXJpYWxpemVyLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxwYWdlXFBhZ2VWaXNpYmlsaXR5U3RhdGUuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXHBhZ2VcUGVyZm9ybWFuY2UuaCIgLz4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2ouZmlsdGVycyBiL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2ouZmlsdGVycwppbmRleCBkNzFjY2ZkLi4xYzRm
ZTEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52
Y3hwcm9qLmZpbHRlcnMKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNv
cmUudmN4cHJvai5maWx0ZXJzCkBAIC00OTk4LDYgKzQ5OTgsMTIgQEAKICAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXHBhZ2VcUGFnZUdyb3VwTG9hZERlZmVycmVyLmNwcCI+CiAgICAgICA8Rmls
dGVyPnBhZ2U8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXHBhZ2VcUGFnZU92ZXJsYXkuY3BwIj4KKyAgICAgIDxGaWx0ZXI+cGFnZTwvRmlsdGVy
PgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGFnZVxQYWdl
T3ZlcmxheUNvbnRyb2xsZXIuY3BwIj4KKyAgICAgIDxGaWx0ZXI+cGFnZTwvRmlsdGVyPgorICAg
IDwvQ2xDb21waWxlPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGFnZVxQYWdlU2VyaWFs
aXplci5jcHAiPgogICAgICAgPEZpbHRlcj5wYWdlPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+
CkBAIC0xMjk0Myw2ICsxMjk0OSwxMiBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGFn
ZVxQYWdlR3JvdXBMb2FkRGVmZXJyZXIuaCI+CiAgICAgICA8RmlsdGVyPnBhZ2U8L0ZpbHRlcj4K
ICAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBhZ2VcUGFnZU92
ZXJsYXkuaCI+CisgICAgICA8RmlsdGVyPnBhZ2U8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4K
KyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBhZ2VcUGFnZU92ZXJsYXlDb250cm9sbGVyLmgi
PgorICAgICAgPEZpbHRlcj5wYWdlPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CiAgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxwYWdlXFBhZ2VTZXJpYWxpemVyLmgiPgogICAgICAgPEZpbHRl
cj5wYWdlPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggZGNmNDZhZS4uOWMxODA1OSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agpAQCAtMTA5MSw2ICsxMDkxLDEwIEBACiAJCTJENUE1OTJGMTUyNTI1MjMwMDM2RUU1MSAvKiBJ
bWFnZU9yaWVudGF0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEE4NzQ4RDc0MTJDQzNGODkwMDFGQkE0MSAvKiBJbWFnZU9yaWVudGF0aW9uLmNw
cCAqLzsgfTsKIAkJMkQ1QTU5MzExNTI1MjVEMDAwMzZFRTUxIC8qIEltYWdlT3JpZW50YXRpb24u
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4NzQ4RDY2
MTJDQzM3NjMwMDFGQkE0MSAvKiBJbWFnZU9yaWVudGF0aW9uLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMkQ1QkM0MjcxNkY4ODJFRTAwNzA0OEQw
IC8qIFNlY3VyaXR5UG9saWN5VmlvbGF0aW9uRXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJENUJDNDI1MTZGODgyQkUwMDcwNDhEMCAvKiBTZWN1
cml0eVBvbGljeVZpb2xhdGlvbkV2ZW50LmggKi87IH07CisJCTJENUM5Q0ZGMTlDN0I1MkUwMEIz
QzVDMSAvKiBQYWdlT3ZlcmxheS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAyRDVDOUNGQjE5QzdCNTJFMDBCM0M1QzEgLyogUGFnZU92ZXJsYXkuY3Bw
ICovOyB9OworCQkyRDVDOUQwMDE5QzdCNTJFMDBCM0M1QzEgLyogUGFnZU92ZXJsYXkuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJENUM5Q0ZDMTlDN0I1
MkUwMEIzQzVDMSAvKiBQYWdlT3ZlcmxheS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CisJCTJENUM5RDAxMTlDN0I1MkUwMEIzQzVDMSAvKiBQYWdlT3Zl
cmxheUNvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMkQ1QzlDRkQxOUM3QjUyRTAwQjNDNUMxIC8qIFBhZ2VPdmVybGF5Q29udHJvbGxl
ci5jcHAgKi87IH07CisJCTJENUM5RDAyMTlDN0I1MkUwMEIzQzVDMSAvKiBQYWdlT3ZlcmxheUNv
bnRyb2xsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDJENUM5Q0ZFMTlDN0I1MkUwMEIzQzVDMSAvKiBQYWdlT3ZlcmxheUNvbnRyb2xsZXIuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkyRDZFNDY4NDE3
RDY2MEY1MDBFQ0Y4QkIgLyogUERGRG9jdW1lbnRJbWFnZU1hYy5tbSBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJENkU0NjgyMTdENjYwRjUwMEVDRjhCQiAv
KiBQREZEb2N1bWVudEltYWdlTWFjLm1tICovOyB9OwogCQkyRDcwQkExMzE4MDc0RERGMDAwMTkw
OEEgLyogUGxhdGZvcm1DQUxheWVyTWFjLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAyRDcwQkExMjE4MDc0RERGMDAwMTkwOEEgLyogUGxhdGZvcm1DQUxh
eWVyTWFjLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJMkQ3MEJBMTUxODA3NEY4NjAwMDE5MDhBIC8qIFBsYXRmb3JtQ0FMYXllci5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRDcwQkExNDE4MDc0Rjg1
MDAwMTkwOEEgLyogUGxhdGZvcm1DQUxheWVyLmNwcCAqLzsgfTsKQEAgLTgwODUsNiArODA4OSwx
MCBAQAogCQkyRDQ2RjA0RjE3Qjk2RkQyMDA1NjQ3RjAgLyogSW50U2l6ZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbnRTaXplLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMkQ1QkM0MjUxNkY4ODJCRTAwNzA0OEQwIC8qIFNlY3VyaXR5UG9saWN5
VmlvbGF0aW9uRXZlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2VjdXJp
dHlQb2xpY3lWaW9sYXRpb25FdmVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQky
RDVCQzQyNjE2Rjg4MkJFMDA3MDQ4RDAgLyogU2VjdXJpdHlQb2xpY3lWaW9sYXRpb25FdmVudC5p
ZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gU2VjdXJpdHlQb2xpY3lWaW9sYXRpb25FdmVudC5p
ZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTJENUM5Q0ZCMTlDN0I1MkUwMEIzQzVD
MSAvKiBQYWdlT3ZlcmxheS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBQYWdlT3ZlcmxheS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTJENUM5Q0ZD
MTlDN0I1MkUwMEIzQzVDMSAvKiBQYWdlT3ZlcmxheS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBQYWdlT3ZlcmxheS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQky
RDVDOUNGRDE5QzdCNTJFMDBCM0M1QzEgLyogUGFnZU92ZXJsYXlDb250cm9sbGVyLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBhZ2VPdmVybGF5Q29udHJvbGxlci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTJENUM5Q0ZFMTlDN0I1MkUwMEIzQzVD
MSAvKiBQYWdlT3ZlcmxheUNvbnRyb2xsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gUGFnZU92ZXJsYXlDb250cm9sbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTJENkU0NjgyMTdENjYwRjUwMEVDRjhCQiAvKiBQREZEb2N1bWVudEltYWdlTWFjLm1tICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gUERGRG9jdW1lbnRJbWFnZU1h
Yy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkQ3MEJBMTIxODA3NERERjAwMDE5
MDhBIC8qIFBsYXRmb3JtQ0FMYXllck1hYy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBQbGF0Zm9ybUNBTGF5ZXJNYWMuaDsgcGF0aCA9IGNhL21hYy9QbGF0Zm9ybUNBTGF5ZXJN
YWMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkQ3MEJBMTQxODA3NEY4NTAwMDE5
MDhBIC8qIFBsYXRmb3JtQ0FMYXllci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBQbGF0Zm9ybUNBTGF5ZXIuY3BwOyBwYXRoID0gY2EvUGxhdGZvcm1DQUxheWVyLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE2NTk3LDYgKzE2NjA1LDEwIEBACiAJ
CQkJOTMwMkIwQkUwRDc5RjgyQzAwQzdFRTgzIC8qIFBhZ2VHcm91cC5oICovLAogCQkJCTdBNjc0
QkQ5MEY5RUJGNEUwMDZDRjA5OSAvKiBQYWdlR3JvdXBMb2FkRGVmZXJyZXIuY3BwICovLAogCQkJ
CTdBNjc0QkRBMEY5RUJGNEUwMDZDRjA5OSAvKiBQYWdlR3JvdXBMb2FkRGVmZXJyZXIuaCAqLywK
KwkJCQkyRDVDOUNGQjE5QzdCNTJFMDBCM0M1QzEgLyogUGFnZU92ZXJsYXkuY3BwICovLAorCQkJ
CTJENUM5Q0ZDMTlDN0I1MkUwMEIzQzVDMSAvKiBQYWdlT3ZlcmxheS5oICovLAorCQkJCTJENUM5
Q0ZEMTlDN0I1MkUwMEIzQzVDMSAvKiBQYWdlT3ZlcmxheUNvbnRyb2xsZXIuY3BwICovLAorCQkJ
CTJENUM5Q0ZFMTlDN0I1MkUwMEIzQzVDMSAvKiBQYWdlT3ZlcmxheUNvbnRyb2xsZXIuaCAqLywK
IAkJCQkzNzFFNjVDRDEzNjYxRUVEMDBCRUVEQjAgLyogUGFnZVNlcmlhbGl6ZXIuY3BwICovLAog
CQkJCTM3MUU2NUNCMTM2NjFFREMwMEJFRURCMCAvKiBQYWdlU2VyaWFsaXplci5oICovLAogCQkJ
CUE3MTk3RjI1MTc1NjhBRTUwMDdCOTQ0MiAvKiBQYWdlVGhyb3R0bGVyLmNwcCAqLywKQEAgLTIz
NjYyLDYgKzIzNjc0LDcgQEAKIAkJCQk5N0JDNkEyMTE1MDVGMDgxMDAxQjc0QUMgLyogRGF0YWJh
c2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3QkM2QTI0MTUwNUYwODEwMDFCNzRBQyAvKiBEYXRh
YmFzZUF1dGhvcml6ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFMTZDRkQ0MTY5RDFERUQwMEQz
QTBDNyAvKiBEYXRhYmFzZUJhY2tlbmQuaCBpbiBIZWFkZXJzICovLAorCQkJCTJENUM5RDAyMTlD
N0I1MkUwMEIzQzVDMSAvKiBQYWdlT3ZlcmxheUNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAog
CQkJCTk3QkM2OURCMTUwNUYwNzYwMDFCNzRBQyAvKiBEYXRhYmFzZUJhY2tlbmRCYXNlLmggaW4g
SGVhZGVycyAqLywKIAkJCQlGRTZGNkFCMDE2OUUwNTc1MDBGQzMwQTIgLyogRGF0YWJhc2VCYWNr
ZW5kQ29udGV4dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkUxNkNGRDYxNjlEMURFRDAwRDNBMEM3
IC8qIERhdGFiYXNlQmFja2VuZFN5bmMuaCBpbiBIZWFkZXJzICovLApAQCAtMjU2MjksNiArMjU2
NDIsNyBAQAogCQkJCTQzOTA0NkVDMTJEQTI1RTgwMEFGODBBOSAvKiBSZW5kZXJNYXRoTUxUb2tl
bi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDM5MDQ2RUExMkRBMjVFODAwQUY4MEEyIC8qIFJlbmRl
ck1hdGhNTFVuZGVyT3Zlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTRDMjc5NTkwQ0Y5NzQxOTAw
RTk3Qjk4IC8qIFJlbmRlck1lZGlhLmggaW4gSGVhZGVycyAqLywKKwkJCQkyRDVDOUQwMDE5QzdC
NTJFMDBCM0M1QzEgLyogUGFnZU92ZXJsYXkuaCBpbiBIZWFkZXJzICovLAogCQkJCURFQkNDREQy
MTY2NDZFODIwMEE0NTJFMSAvKiBSZW5kZXJNZWRpYUNvbnRyb2xFbGVtZW50cy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNDFGQTMwM0YxMzE2QzI5QzAwQzBCRkM1IC8qIFJlbmRlck1lZGlhQ29udHJv
bHMuaCBpbiBIZWFkZXJzICovLAogCQkJCUFCRERGRTdBMEE1QzZFNzAwMEEzRTExRCAvKiBSZW5k
ZXJNZW51TGlzdC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yODAxNyw2ICsyODAzMSw3IEBACiAJCQkJ
QTU4NDBFMUMxODdCNzRENTAwODQzQjEwIC8qIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tp
ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3MUIxRTEyNjE2NDA0OTFBMDBCMTg4MEEgLyogSW5z
cGVjdG9yTGF5ZXJUcmVlQWdlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTA0QUFDQ0QxODM0
NDU1OTAwRTNEOUJDIC8qIEluc3BlY3Rvck5vZGVGaW5kZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJMkQ1QzlEMDExOUM3QjUyRTAwQjNDNUMxIC8qIFBhZ2VPdmVybGF5Q29udHJvbGxlci5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk3QzUyMkQ0QjE1QjQ3N0U4MDA5QjdDOTUgLyogSW5zcGVjdG9y
T3ZlcmxheS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0RjZGREQ2NDEzNDFERUREMDAxRjhFRTMg
LyogSW5zcGVjdG9yUGFnZUFnZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk5Q0MwQjY2MThC
RTlGMTUwMDZDRUJDQyAvKiBJbnNwZWN0b3JSZXBsYXlBZ2VudC5jcHAgaW4gU291cmNlcyAqLywK
QEAgLTI4MDg1LDYgKzI4MTAwLDcgQEAKIAkJCQlCQ0MwNjU4NzBGM0NFMkE3MDBDRDJEODcgLyog
SlNDbGllbnRSZWN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDQzA2NTg5MEYzQ0UyQTcwMENE
MkQ4NyAvKiBKU0NsaWVudFJlY3RMaXN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTVDNDMwNEI1
MTkxQUVGNDYwMDBFMkJDMCAvKiBKU0VYVFNoYWRlclRleHR1cmVMT0QuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJMkQ1QzlDRkYxOUM3QjUyRTAwQjNDNUMxIC8qIFBhZ2VPdmVybGF5LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTc2RkI5RkY4MTlBNzNFM0EwMDQyMDU2MiAvKiBKU0F1dG9jb21wbGV0
ZUVycm9yRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNBODNFNEYwRDdDRTFFOTAwMzQy
MUE4IC8qIEpTRGF0YVRyYW5zZmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDQTgzRTUyMEQ3
Q0UyMDUwMDM0MjFBOCAvKiBKU0RhdGFUcmFuc2ZlckN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9FbXB0eUNsaWVudHMuaCBiL1NvdXJj
ZS9XZWJDb3JlL2xvYWRlci9FbXB0eUNsaWVudHMuaAppbmRleCAzN2JlNDQ4Li45YzkwY2I3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5oCkBAIC0xODIsNiArMTgyLDcgQEAgcHVi
bGljOgogICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxSZWN0SW50b1ZpZXcoY29uc3QgSW50UmVjdCYp
IGNvbnN0IG92ZXJyaWRlIHsgfQogCiAgICAgdmlydHVhbCB2b2lkIGF0dGFjaFJvb3RHcmFwaGlj
c0xheWVyKEZyYW1lKiwgR3JhcGhpY3NMYXllciopIG92ZXJyaWRlIHsgfQorICAgIHZpcnR1YWwg
dm9pZCBhdHRhY2hWaWV3T3ZlcmxheUdyYXBoaWNzTGF5ZXIoRnJhbWUqLCBHcmFwaGljc0xheWVy
Kikgb3ZlcnJpZGUgeyB9CiAgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzT25lU2hvdERyYXdpbmdT
eW5jaHJvbml6YXRpb24oKSBvdmVycmlkZSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVD
b21wb3NpdGluZ0xheWVyRmx1c2goKSBvdmVycmlkZSB7IH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21l
Q2xpZW50LmgKaW5kZXggZThkYTBlOS4uYmY1NjM0ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGFnZS9DaHJvbWVDbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZUNs
aWVudC5oCkBAIC0yOTksNiArMjk5LDcgQEAgcHVibGljOgogCiAgICAgLy8gUGFzcyAwIGFzIHRo
ZSBHcmFwaGljc0xheWVyIHRvIGRldGF0Y2ggdGhlIHJvb3QgbGF5ZXIuCiAgICAgdmlydHVhbCB2
b2lkIGF0dGFjaFJvb3RHcmFwaGljc0xheWVyKEZyYW1lKiwgR3JhcGhpY3NMYXllciopID0gMDsK
KyAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoVmlld092ZXJsYXlHcmFwaGljc0xheWVyKEZyYW1lKiwg
R3JhcGhpY3NMYXllciopID0gMDsKICAgICAvLyBTZXRzIGEgZmxhZyB0byBzcGVjaWZ5IHRoYXQg
dGhlIG5leHQgdGltZSBjb250ZW50IGlzIGRyYXduIHRvIHRoZSB3aW5kb3csCiAgICAgLy8gdGhl
IGNoYW5nZXMgYXBwZWFyIG9uIHRoZSBzY3JlZW4gaW4gc3luY2hyb255IHdpdGggdXBkYXRlcyB0
byBHcmFwaGljc0xheWVycy4KICAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNPbmVTaG90RHJhd2lu
Z1N5bmNocm9uaXphdGlvbigpID0gMDsKQEAgLTMwOCw4ICszMDksNiBAQCBwdWJsaWM6CiAgICAg
Ly8gUmV0dXJucyB3aGV0aGVyIG9yIG5vdCB0aGUgY2xpZW50IGNhbiByZW5kZXIgdGhlIGNvbXBv
c2l0ZWQgbGF5ZXIsCiAgICAgLy8gcmVnYXJkbGVzcyBvZiB0aGUgc2V0dGluZ3MuCiAgICAgdmly
dHVhbCBib29sIGFsbG93c0FjY2VsZXJhdGVkQ29tcG9zaXRpbmcoKSBjb25zdCB7IHJldHVybiB0
cnVlOyB9Ci0gICAgLy8gU3VwcGx5IGEgbGF5ZXIgdGhhdCB3aWxsIGFkZGVkIGFzIGFuIG92ZXJs
YXkgb3ZlciBvdGhlciBkb2N1bWVudCBsYXllcnMgKHNjcm9sbGluZyB3aXRoIHRoZSBkb2N1bWVu
dCkuCi0gICAgdmlydHVhbCBHcmFwaGljc0xheWVyKiBkb2N1bWVudE92ZXJsYXlMYXllckZvckZy
YW1lKEZyYW1lJikgeyByZXR1cm4gbnVsbHB0cjsgfQogCiAgICAgZW51bSBDb21wb3NpdGluZ1Ry
aWdnZXIgewogICAgICAgICBUaHJlZURUcmFuc2Zvcm1UcmlnZ2VyID0gMSA8PCAwLApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCmluZGV4IDVkOTEwZjMuLmEzY2ZiYzggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKQEAgLTY2LDYgKzY2LDcgQEAKICNpbmNsdWRlICJN
b3VzZUV2ZW50LmgiCiAjaW5jbHVkZSAiTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cy5oIgog
I2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJQYWdlT3ZlcmxheUNvbnRyb2xsZXIuaCIKICNp
bmNsdWRlICJQbGF0Zm9ybUV2ZW50LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1LZXlib2FyZEV2ZW50
LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1XaGVlbEV2ZW50LmgiCkBAIC0xNjQzLDYgKzE2NDQsMTAg
QEAgYm9vbCBFdmVudEhhbmRsZXI6OmhhbmRsZU1vdXNlUHJlc3NFdmVudChjb25zdCBQbGF0Zm9y
bU1vdXNlRXZlbnQmIHBsYXRmb3JtTW91c2UKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQog
CisgICAgUGFnZSogcGFnZSA9IG1fZnJhbWUucGFnZSgpOworICAgIGlmIChwYWdlICYmIHBhZ2Ut
PnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLmhhbmRsZU1vdXNlRXZlbnQocGxhdGZvcm1Nb3VzZUV2
ZW50KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQog
ICAgIGJvb2wgZGVmYXVsdFByZXZlbnRlZCA9IGRpc3BhdGNoU3ludGhldGljVG91Y2hFdmVudElm
RW5hYmxlZChwbGF0Zm9ybU1vdXNlRXZlbnQpOwogICAgIGlmIChkZWZhdWx0UHJldmVudGVkKQpA
QCAtMTgzNiwxMCArMTg0MSwxMyBAQCBib29sIEV2ZW50SGFuZGxlcjo6bW91c2VNb3ZlZChjb25z
dCBQbGF0Zm9ybU1vdXNlRXZlbnQmIGV2ZW50KQogICAgIFJlZlB0cjxGcmFtZVZpZXc+IHByb3Rl
Y3RvcihtX2ZyYW1lLnZpZXcoKSk7CiAgICAgTWF4aW11bUR1cmF0aW9uVHJhY2tlciBtYXhEdXJh
dGlvblRyYWNrZXIoJm1fbWF4TW91c2VNb3ZlZER1cmF0aW9uKTsKIAorICAgIFBhZ2UqIHBhZ2Ug
PSBtX2ZyYW1lLnBhZ2UoKTsKKyAgICBpZiAocGFnZSAmJiBwYWdlLT5wYWdlT3ZlcmxheUNvbnRy
b2xsZXIoKS5oYW5kbGVNb3VzZUV2ZW50KGV2ZW50KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisK
ICAgICBIaXRUZXN0UmVzdWx0IGhvdmVyZWROb2RlID0gSGl0VGVzdFJlc3VsdChMYXlvdXRQb2lu
dCgpKTsKICAgICBib29sIHJlc3VsdCA9IGhhbmRsZU1vdXNlTW92ZUV2ZW50KGV2ZW50LCAmaG92
ZXJlZE5vZGUpOwogCi0gICAgUGFnZSogcGFnZSA9IG1fZnJhbWUucGFnZSgpOwogICAgIGlmICgh
cGFnZSkKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKIApAQCAtMjAxOSw2ICsyMDI3LDEwIEBAIGJv
b2wgRXZlbnRIYW5kbGVyOjpoYW5kbGVNb3VzZVJlbGVhc2VFdmVudChjb25zdCBQbGF0Zm9ybU1v
dXNlRXZlbnQmIHBsYXRmb3JtTW91CiAKICAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLnNldENhcmV0
QmxpbmtpbmdTdXNwZW5kZWQoZmFsc2UpOwogCisgICAgUGFnZSogcGFnZSA9IG1fZnJhbWUucGFn
ZSgpOworICAgIGlmIChwYWdlICYmIHBhZ2UtPnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLmhhbmRs
ZU1vdXNlRXZlbnQocGxhdGZvcm1Nb3VzZUV2ZW50KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisK
ICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQogICAgIGJvb2wgZGVmYXVsdFByZXZlbnRlZCA9IGRp
c3BhdGNoU3ludGhldGljVG91Y2hFdmVudElmRW5hYmxlZChwbGF0Zm9ybU1vdXNlRXZlbnQpOwog
ICAgIGlmIChkZWZhdWx0UHJldmVudGVkKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9GcmFtZVZpZXcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCmluZGV4
IGJjYjUwNDQuLmQ2MTY5ZjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVW
aWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKQEAgLTYwLDYg
KzYwLDcgQEAKICNpbmNsdWRlICJNZW1vcnlDYWNoZS5oIgogI2luY2x1ZGUgIk1lbW9yeVByZXNz
dXJlSGFuZGxlci5oIgogI2luY2x1ZGUgIk92ZXJmbG93RXZlbnQuaCIKKyNpbmNsdWRlICJQYWdl
T3ZlcmxheUNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJQcm9ncmVzc1RyYWNrZXIuaCIKICNpbmNs
dWRlICJSZW5kZXJFbWJlZGRlZE9iamVjdC5oIgogI2luY2x1ZGUgIlJlbmRlckZ1bGxTY3JlZW4u
aCIKQEAgLTQzMCwxMCArNDMxLDExIEBAIHZvaWQgRnJhbWVWaWV3OjpzZXRGcmFtZVJlY3QoY29u
c3QgSW50UmVjdCYgbmV3UmVjdCkKICAgICBpZiAobmV3UmVjdCA9PSBvbGRSZWN0KQogICAgICAg
ICByZXR1cm47CiAKKyAgICBQYWdlKiBwYWdlID0gZnJhbWUoKS5wYWdlKCk7CisKICNpZiBFTkFC
TEUoVEVYVF9BVVRPU0laSU5HKQogICAgIC8vIEF1dG9zaXplZCBmb250IHNpemVzIGRlcGVuZCBv
biB0aGUgd2lkdGggb2YgdGhlIHZpZXdpbmcgYXJlYS4KICAgICBpZiAobmV3UmVjdC53aWR0aCgp
ICE9IG9sZFJlY3Qud2lkdGgoKSkgewotICAgICAgICBQYWdlKiBwYWdlID0gZnJhbWUoKS5wYWdl
KCk7CiAgICAgICAgIGlmIChmcmFtZSgpLmlzTWFpbkZyYW1lKCkgJiYgcGFnZS0+c2V0dGluZ3Mo
KS50ZXh0QXV0b3NpemluZ0VuYWJsZWQoKSkgewogICAgICAgICAgICAgZm9yIChGcmFtZSogZnJh
bWUgPSAmcGFnZS0+bWFpbkZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJh
dmVyc2VOZXh0KCkpCiAgICAgICAgICAgICAgICAgZnJhbWUoKS5kb2N1bWVudCgpLT50ZXh0QXV0
b3NpemVyKCktPnJlY2FsY3VsYXRlTXVsdGlwbGllcnMoKTsKQEAgLTQ0OSw2ICs0NTEsOSBAQCB2
b2lkIEZyYW1lVmlldzo6c2V0RnJhbWVSZWN0KGNvbnN0IEludFJlY3QmIG5ld1JlY3QpCiAgICAg
ICAgIGlmIChyZW5kZXJWaWV3LT51c2VzQ29tcG9zaXRpbmcoKSkKICAgICAgICAgICAgIHJlbmRl
clZpZXctPmNvbXBvc2l0b3IoKS5mcmFtZVZpZXdEaWRDaGFuZ2VTaXplKCk7CiAgICAgfQorCisg
ICAgaWYgKGZyYW1lKCkuaXNNYWluRnJhbWUoKSkKKyAgICAgICAgcGFnZS0+cGFnZU92ZXJsYXlD
b250cm9sbGVyKCkuZGlkQ2hhbmdlVmlld1NpemUoKTsKIH0KIAogI2lmIEVOQUJMRShSRVFVRVNU
X0FOSU1BVElPTl9GUkFNRSkKQEAgLTU2Miw2ICs1NjcsOSBAQCB2b2lkIEZyYW1lVmlldzo6c2V0
Q29udGVudHNTaXplKGNvbnN0IEludFNpemUmIHNpemUpCiAKICAgICBwYWdlLT5jaHJvbWUoKS5j
b250ZW50c1NpemVDaGFuZ2VkKCZmcmFtZSgpLCBzaXplKTsgLy8gTm90aWZ5IG9ubHkuCiAKKyAg
ICBpZiAoZnJhbWUoKS5pc01haW5GcmFtZSgpKQorICAgICAgICBwYWdlLT5wYWdlT3ZlcmxheUNv
bnRyb2xsZXIoKS5kaWRDaGFuZ2VEb2N1bWVudFNpemUoKTsKKwogICAgIEFTU0VSVChtX2RlZmVy
U2V0TmVlZHNMYXlvdXRzKTsKICAgICBtX2RlZmVyU2V0TmVlZHNMYXlvdXRzLS07CiAgICAgCkBA
IC0yMDQ4LDcgKzIwNTYsNyBAQCB2b2lkIEZyYW1lVmlldzo6c2V0Rml4ZWRWaXNpYmxlQ29udGVu
dFJlY3QoY29uc3QgSW50UmVjdCYgdmlzaWJsZUNvbnRlbnRSZWN0KQogICAgICAgICAvLyBVcGRh
dGUgdGhlIHNjcm9sbC1iYXJzIHRvIGNhbGN1bGF0ZSBuZXcgcGFnZS1zdGVwIHNpemUuCiAgICAg
ICAgIHVwZGF0ZVNjcm9sbGJhcnMoc2Nyb2xsT2Zmc2V0KCkpOwogICAgIH0KLSAgICBmcmFtZSgp
LmxvYWRlcigpLmNsaWVudCgpLmRpZENoYW5nZVNjcm9sbE9mZnNldCgpOworICAgIGRpZENoYW5n
ZVNjcm9sbE9mZnNldCgpOwogfQogI2VuZGlmCiAKQEAgLTIwNjEsNiArMjA2OSwxNCBAQCB2b2lk
IEZyYW1lVmlldzo6c2V0Vmlld3BvcnRDb25zdHJhaW5lZE9iamVjdHNOZWVkTGF5b3V0KCkKICAg
ICAgICAgcmVuZGVyZXItPnNldE5lZWRzTGF5b3V0KCk7CiB9CiAKK3ZvaWQgRnJhbWVWaWV3Ojpk
aWRDaGFuZ2VTY3JvbGxPZmZzZXQoKQoreworICAgIGlmIChQYWdlKiBwYWdlID0gZnJhbWUoKS5w
YWdlKCkpCisgICAgICAgIHBhZ2UtPnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLmRpZFNjcm9sbEZy
YW1lKGZyYW1lKCkpOworCisgICAgZnJhbWUoKS5sb2FkZXIoKS5jbGllbnQoKS5kaWRDaGFuZ2VT
Y3JvbGxPZmZzZXQoKTsKK30KKwogdm9pZCBGcmFtZVZpZXc6OnNjcm9sbFBvc2l0aW9uQ2hhbmdl
ZFZpYVBsYXRmb3JtV2lkZ2V0KGNvbnN0IEludFBvaW50JiBvbGRQb3NpdGlvbiwgY29uc3QgSW50
UG9pbnQmIG5ld1Bvc2l0aW9uKQogewogICAgIHVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJTY3Jv
bGxpbmcoKTsKQEAgLTMyMjMsNyArMzIzOSw3IEBAIHZvaWQgRnJhbWVWaWV3OjpzY3JvbGxUbyhj
b25zdCBJbnRTaXplJiBuZXdPZmZzZXQpCiAgICAgU2Nyb2xsVmlldzo6c2Nyb2xsVG8obmV3T2Zm
c2V0KTsKICAgICBpZiAob2Zmc2V0ICE9IHNjcm9sbE9mZnNldCgpKQogICAgICAgICBzY3JvbGxQ
b3NpdGlvbkNoYW5nZWQob2xkUG9zaXRpb24sIHNjcm9sbFBvc2l0aW9uKCkpOwotICAgIGZyYW1l
KCkubG9hZGVyKCkuY2xpZW50KCkuZGlkQ2hhbmdlU2Nyb2xsT2Zmc2V0KCk7CisgICAgZGlkQ2hh
bmdlU2Nyb2xsT2Zmc2V0KCk7CiB9CiAKIGZsb2F0IEZyYW1lVmlldzo6YWRqdXN0U2Nyb2xsU3Rl
cEZvckZpeGVkQ29udGVudChmbG9hdCBzdGVwLCBTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRh
dGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHkpCkBAIC00MjkyLDcgKzQzMDgsNyBA
QCBib29sIEZyYW1lVmlldzo6d2hlZWxFdmVudChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIHdo
ZWVsRXZlbnQpCiAgICAgICAgIGlmIChvZmZzZXQgIT0gbmV3T2Zmc2V0KSB7CiAgICAgICAgICAg
ICBTY3JvbGxWaWV3OjpzY3JvbGxUbyhuZXdPZmZzZXQpOwogICAgICAgICAgICAgc2Nyb2xsUG9z
aXRpb25DaGFuZ2VkKG9sZFBvc2l0aW9uLCBzY3JvbGxQb3NpdGlvbigpKTsKLSAgICAgICAgICAg
IGZyYW1lKCkubG9hZGVyKCkuY2xpZW50KCkuZGlkQ2hhbmdlU2Nyb2xsT2Zmc2V0KCk7CisgICAg
ICAgICAgICBkaWRDaGFuZ2VTY3JvbGxPZmZzZXQoKTsKICAgICAgICAgfQogICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICB9CkBAIC00NjE1LDYgKzQ2MzEsOSBAQCB2b2lkIEZyYW1lVmlldzo6c2V0
RXhwb3NlZFJlY3QoRmxvYXRSZWN0IGV4cG9zZWRSZWN0KQogCiAgICAgaWYgKGF1dG8qIHZpZXcg
PSByZW5kZXJWaWV3KCkpCiAgICAgICAgIHZpZXctPmNvbXBvc2l0b3IoKS5zY2hlZHVsZUxheWVy
Rmx1c2goZmFsc2UgLyogY2FuVGhyb3R0bGUgKi8pOworCisgICAgaWYgKGF1dG8qIHBhZ2UgPSBm
cmFtZSgpLnBhZ2UoKSkKKyAgICAgICAgcGFnZS0+cGFnZU92ZXJsYXlDb250cm9sbGVyKCkuZGlk
Q2hhbmdlRXhwb3NlZFJlY3QoKTsKIH0KICAgICAKIHZvaWQgRnJhbWVWaWV3OjpzZXRWaWV3cG9y
dFNpemVGb3JDU1NWaWV3cG9ydFVuaXRzKEludFNpemUgc2l6ZSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmll
dy5oCmluZGV4IDM3NTY5NmEuLjkyYWE5YjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvRnJhbWVWaWV3LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuaApAQCAt
NTExLDYgKzUxMSw4IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgZmxvYXQgYWRqdXN0U2Nyb2xs
U3RlcEZvckZpeGVkQ29udGVudChmbG9hdCBzdGVwLCBTY3JvbGxiYXJPcmllbnRhdGlvbiwgU2Ny
b2xsR3JhbnVsYXJpdHkpIG92ZXJyaWRlOwogCisgICAgdm9pZCBkaWRDaGFuZ2VTY3JvbGxPZmZz
ZXQoKTsKKwogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgYm9vbCBzY3JvbGxDb250ZW50c0Zhc3RQ
YXRoKGNvbnN0IEludFNpemUmIHNjcm9sbERlbHRhLCBjb25zdCBJbnRSZWN0JiByZWN0VG9TY3Jv
bGwsIGNvbnN0IEludFJlY3QmIGNsaXBSZWN0KSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQg
c2Nyb2xsQ29udGVudHNTbG93UGF0aChjb25zdCBJbnRSZWN0JiB1cGRhdGVSZWN0KSBvdmVycmlk
ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL1BhZ2UuY3BwCmluZGV4IDI2YjhkMTcuLjUzOGRmZDQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdl
LmNwcApAQCAtNjAsNiArNjAsNyBAQAogI2luY2x1ZGUgIlBhZ2VDb25zb2xlQ2xpZW50LmgiCiAj
aW5jbHVkZSAiUGFnZURlYnVnZ2FibGUuaCIKICNpbmNsdWRlICJQYWdlR3JvdXAuaCIKKyNpbmNs
dWRlICJQYWdlT3ZlcmxheUNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJQYWdlVGhyb3R0bGVyLmgi
CiAjaW5jbHVkZSAiUGx1Z0luQ2xpZW50LmgiCiAjaW5jbHVkZSAiUGx1Z2luRGF0YS5oIgpAQCAt
MjAzLDYgKzIwNCw3IEBAIFBhZ2U6OlBhZ2UoUGFnZUNsaWVudHMmIHBhZ2VDbGllbnRzKQogICAg
ICwgbV92aXNpdGVkTGlua1N0b3JlKFdURjo6bW92ZShwYWdlQ2xpZW50cy52aXNpdGVkTGlua1N0
b3JlKSkKICAgICAsIG1fc2Vzc2lvbklEKFNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKQog
ICAgICwgbV9pc0Nsb3NpbmcoZmFsc2UpCisgICAgLCBtX3BhZ2VPdmVybGF5Q29udHJvbGxlcihz
dGQ6Om1ha2VfdW5pcXVlPFBhZ2VPdmVybGF5Q29udHJvbGxlcj4oKnRoaXMpKQogewogICAgIEFT
U0VSVChtX2VkaXRvckNsaWVudCk7CiAgICAgCkBAIC04MTEsNiArODEzLDggQEAgdm9pZCBQYWdl
OjpzZXREZXZpY2VTY2FsZUZhY3RvcihmbG9hdCBzY2FsZUZhY3RvcikKIAogICAgIHBhZ2VDYWNo
ZSgpLT5tYXJrUGFnZXNGb3JGdWxsU3R5bGVSZWNhbGModGhpcyk7CiAgICAgR3JhcGhpY3NDb250
ZXh0Ojp1cGRhdGVEb2N1bWVudE1hcmtlclJlc291cmNlcygpOworCisgICAgbV9wYWdlT3Zlcmxh
eUNvbnRyb2xsZXItPmRpZENoYW5nZURldmljZVNjYWxlRmFjdG9yKCk7CiB9CiAKIHZvaWQgUGFn
ZTo6c2V0VG9wQ29udGVudEluc2V0KGZsb2F0IGNvbnRlbnRJbnNldCkKQEAgLTE2MTgsNyArMTYy
Miw2IEBAIHZvaWQgUGFnZTo6c2V0U2Vzc2lvbklEKFNlc3Npb25JRCBzZXNzaW9uSUQpCiAKICAg
ICBmb3IgKGF1dG8mIHZpZXcgOiBwbHVnaW5WaWV3cygpKQogICAgICAgICB2aWV3LT5wcml2YXRl
QnJvd3NpbmdTdGF0ZUNoYW5nZWQoc2Vzc2lvbklELmlzRXBoZW1lcmFsKCkpOwotCiB9CiAKIFBh
Z2U6OlBhZ2VDbGllbnRzOjpQYWdlQ2xpZW50cygpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL1BhZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5oCmluZGV4IDJjZTUyYjku
LmEzYmE4NGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5oCkBAIC04NCw2ICs4NCw3IEBAIGNsYXNzIFBhZ2VBY3Rp
dml0eUFzc2VydGlvblRva2VuOwogY2xhc3MgUGFnZUNvbnNvbGVDbGllbnQ7CiBjbGFzcyBQYWdl
RGVidWdnYWJsZTsKIGNsYXNzIFBhZ2VHcm91cDsKK2NsYXNzIFBhZ2VPdmVybGF5Q29udHJvbGxl
cjsKIGNsYXNzIFBhZ2VUaHJvdHRsZXI7CiBjbGFzcyBQbHVnSW5DbGllbnQ7CiBjbGFzcyBQbHVn
aW5EYXRhOwpAQCAtMTY4LDYgKzE2OSw4IEBAIHB1YmxpYzoKICAgICBNYWluRnJhbWUmIG1haW5G
cmFtZSgpIHsgQVNTRVJUKG1fbWFpbkZyYW1lKTsgcmV0dXJuICptX21haW5GcmFtZTsgfQogICAg
IGNvbnN0IE1haW5GcmFtZSYgbWFpbkZyYW1lKCkgY29uc3QgeyBBU1NFUlQobV9tYWluRnJhbWUp
OyByZXR1cm4gKm1fbWFpbkZyYW1lOyB9CiAKKyAgICBQYWdlT3ZlcmxheUNvbnRyb2xsZXImIHBh
Z2VPdmVybGF5Q29udHJvbGxlcigpIHsgcmV0dXJuICptX3BhZ2VPdmVybGF5Q29udHJvbGxlcjsg
fQorCiAgICAgYm9vbCBvcGVuZWRCeURPTSgpIGNvbnN0OwogICAgIHZvaWQgc2V0T3BlbmVkQnlE
T00oKTsKIApAQCAtNTk1LDYgKzU5OCw4IEBAIHByaXZhdGU6CiAgICAgU2Vzc2lvbklEIG1fc2Vz
c2lvbklEOwogCiAgICAgYm9vbCBtX2lzQ2xvc2luZzsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxQ
YWdlT3ZlcmxheUNvbnRyb2xsZXI+IG1fcGFnZU92ZXJsYXlDb250cm9sbGVyOwogfTsKIAogaW5s
aW5lIFBhZ2VHcm91cCYgUGFnZTo6Z3JvdXAoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGFnZS9QYWdlT3ZlcmxheS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VPdmVybGF5LmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTlkOTdjCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlT3ZlcmxheS5jcHAKQEAgLTAsMCArMSwy
NTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUGFnZU92
ZXJsYXkuaCIKKworI2luY2x1ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dC5oIgorI2luY2x1ZGUgIk1haW5GcmFtZS5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNs
dWRlICJQYWdlT3ZlcmxheUNvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybU1vdXNlRXZl
bnQuaCIKKyNpbmNsdWRlICJTY3JvbGxiYXJUaGVtZS5oIgorI2luY2x1ZGUgPHd0Zi9DdXJyZW50
VGltZS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBjb25zdCBkb3VibGUgZmFk
ZUFuaW1hdGlvbkR1cmF0aW9uID0gMC4yOworc3RhdGljIGNvbnN0IGRvdWJsZSBmYWRlQW5pbWF0
aW9uRnJhbWVSYXRlID0gMzA7CisKK1Bhc3NSZWZQdHI8UGFnZU92ZXJsYXk+IFBhZ2VPdmVybGF5
OjpjcmVhdGUoQ2xpZW50JiBjbGllbnQsIE92ZXJsYXlUeXBlIG92ZXJsYXlUeXBlKQoreworICAg
IHJldHVybiBhZG9wdFJlZihuZXcgUGFnZU92ZXJsYXkoY2xpZW50LCBvdmVybGF5VHlwZSkpOwor
fQorCitQYWdlT3ZlcmxheTo6UGFnZU92ZXJsYXkoQ2xpZW50JiBjbGllbnQsIE92ZXJsYXlUeXBl
IG92ZXJsYXlUeXBlKQorICAgIDogbV9jbGllbnQoY2xpZW50KQorICAgICwgbV9wYWdlKG51bGxw
dHIpCisgICAgLCBtX2ZhZGVBbmltYXRpb25UaW1lcihSdW5Mb29wOjptYWluKCksIHRoaXMsICZQ
YWdlT3ZlcmxheTo6ZmFkZUFuaW1hdGlvblRpbWVyRmlyZWQpCisgICAgLCBtX2ZhZGVBbmltYXRp
b25TdGFydFRpbWUoMCkKKyAgICAsIG1fZmFkZUFuaW1hdGlvbkR1cmF0aW9uKGZhZGVBbmltYXRp
b25EdXJhdGlvbikKKyAgICAsIG1fZmFkZUFuaW1hdGlvblR5cGUoTm9BbmltYXRpb24pCisgICAg
LCBtX2ZyYWN0aW9uRmFkZWRJbigxKQorICAgICwgbV9vdmVybGF5VHlwZShvdmVybGF5VHlwZSkK
KyAgICAsIG1fYmFja2dyb3VuZENvbG9yKENvbG9yOjp0cmFuc3BhcmVudCkKK3sKK30KKworUGFn
ZU92ZXJsYXk6On5QYWdlT3ZlcmxheSgpCit7Cit9CisKK0ludFJlY3QgUGFnZU92ZXJsYXk6OmJv
dW5kcygpIGNvbnN0Cit7CisgICAgaWYgKCFtX292ZXJyaWRlRnJhbWUuaXNFbXB0eSgpKQorICAg
ICAgICByZXR1cm4gSW50UmVjdChJbnRQb2ludCgpLCBtX292ZXJyaWRlRnJhbWUuc2l6ZSgpKTsK
KworICAgIEZyYW1lVmlldyogZnJhbWVWaWV3ID0gbV9wYWdlLT5tYWluRnJhbWUoKS52aWV3KCk7
CisKKyAgICBpZiAoIWZyYW1lVmlldykKKyAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKKworICAg
IHN3aXRjaCAobV9vdmVybGF5VHlwZSkgeworICAgIGNhc2UgT3ZlcmxheVR5cGU6OlZpZXc6IHsK
KyAgICAgICAgaW50IHdpZHRoID0gZnJhbWVWaWV3LT53aWR0aCgpOworICAgICAgICBpbnQgaGVp
Z2h0ID0gZnJhbWVWaWV3LT5oZWlnaHQoKTsKKworICAgICAgICBpZiAoIVNjcm9sbGJhclRoZW1l
Ojp0aGVtZSgpLT51c2VzT3ZlcmxheVNjcm9sbGJhcnMoKSkgeworICAgICAgICAgICAgaWYgKGZy
YW1lVmlldy0+dmVydGljYWxTY3JvbGxiYXIoKSkKKyAgICAgICAgICAgICAgICB3aWR0aCAtPSBm
cmFtZVZpZXctPnZlcnRpY2FsU2Nyb2xsYmFyKCktPndpZHRoKCk7CisgICAgICAgICAgICBpZiAo
ZnJhbWVWaWV3LT5ob3Jpem9udGFsU2Nyb2xsYmFyKCkpCisgICAgICAgICAgICAgICAgaGVpZ2h0
IC09IGZyYW1lVmlldy0+aG9yaXpvbnRhbFNjcm9sbGJhcigpLT5oZWlnaHQoKTsKKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gSW50UmVjdCgwLCAwLCB3aWR0aCwgaGVpZ2h0KTsKKyAgICB9Cisg
ICAgY2FzZSBPdmVybGF5VHlwZTo6RG9jdW1lbnQ6CisgICAgICAgIHJldHVybiBJbnRSZWN0KElu
dFBvaW50KCksIGZyYW1lVmlldy0+Y29udGVudHNTaXplKCkpOworICAgIH07CisKKyAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gSW50UmVjdChJbnRQb2ludCgpLCBmcmFtZVZp
ZXctPmNvbnRlbnRzU2l6ZSgpKTsKK30KKworSW50UmVjdCBQYWdlT3ZlcmxheTo6ZnJhbWUoKSBj
b25zdAoreworICAgIGlmICghbV9vdmVycmlkZUZyYW1lLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0
dXJuIG1fb3ZlcnJpZGVGcmFtZTsKKworICAgIHJldHVybiBib3VuZHMoKTsKK30KKwordm9pZCBQ
YWdlT3ZlcmxheTo6c2V0RnJhbWUoSW50UmVjdCBmcmFtZSkKK3sKKyAgICBpZiAobV9vdmVycmlk
ZUZyYW1lID09IGZyYW1lKQorICAgICAgICByZXR1cm47CisKKyAgICBtX292ZXJyaWRlRnJhbWUg
PSBmcmFtZTsKKworICAgIGlmIChtX3BhZ2UpCisgICAgICAgIG1fcGFnZS0+cGFnZU92ZXJsYXlD
b250cm9sbGVyKCkuZGlkQ2hhbmdlT3ZlcmxheUZyYW1lKCp0aGlzKTsKK30KKwordm9pZCBQYWdl
T3ZlcmxheTo6c2V0QmFja2dyb3VuZENvbG9yKFJHQkEzMiBiYWNrZ3JvdW5kQ29sb3IpCit7Cisg
ICAgaWYgKG1fYmFja2dyb3VuZENvbG9yID09IGJhY2tncm91bmRDb2xvcikKKyAgICAgICAgcmV0
dXJuOworCisgICAgbV9iYWNrZ3JvdW5kQ29sb3IgPSBiYWNrZ3JvdW5kQ29sb3I7CisKKyAgICBp
ZiAobV9wYWdlKQorICAgICAgICBtX3BhZ2UtPnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLmRpZENo
YW5nZU92ZXJsYXlCYWNrZ3JvdW5kQ29sb3IoKnRoaXMpOworfQorCit2b2lkIFBhZ2VPdmVybGF5
OjpzZXRQYWdlKFBhZ2UqIHBhZ2UpCit7CisgICAgbV9jbGllbnQud2lsbE1vdmVUb1BhZ2UoKnRo
aXMsIHBhZ2UpOworICAgIG1fcGFnZSA9IHBhZ2U7CisgICAgbV9jbGllbnQuZGlkTW92ZVRvUGFn
ZSgqdGhpcywgcGFnZSk7CisKKyAgICBtX2ZhZGVBbmltYXRpb25UaW1lci5zdG9wKCk7Cit9CisK
K3ZvaWQgUGFnZU92ZXJsYXk6OnNldE5lZWRzRGlzcGxheShjb25zdCBJbnRSZWN0JiBkaXJ0eVJl
Y3QpCit7CisgICAgaWYgKCFtX3BhZ2UpCisgICAgICAgIHJldHVybjsKKworICAgIG1fcGFnZS0+
cGFnZU92ZXJsYXlDb250cm9sbGVyKCkuc2V0UGFnZU92ZXJsYXlPcGFjaXR5KCp0aGlzLCBtX2Zy
YWN0aW9uRmFkZWRJbik7CisgICAgbV9wYWdlLT5wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKS5zZXRQ
YWdlT3ZlcmxheU5lZWRzRGlzcGxheSgqdGhpcywgZGlydHlSZWN0KTsKK30KKwordm9pZCBQYWdl
T3ZlcmxheTo6c2V0TmVlZHNEaXNwbGF5KCkKK3sKKyAgICBzZXROZWVkc0Rpc3BsYXkoYm91bmRz
KCkpOworfQorCit2b2lkIFBhZ2VPdmVybGF5OjpkcmF3UmVjdChHcmFwaGljc0NvbnRleHQmIGdy
YXBoaWNzQ29udGV4dCwgY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KQoreworICAgIC8vIElmIHRo
ZSBkaXJ0eSByZWN0IGlzIG91dHNpZGUgdGhlIGJvdW5kcywgaWdub3JlIGl0LgorICAgIEludFJl
Y3QgcGFpbnRSZWN0ID0gaW50ZXJzZWN0aW9uKGRpcnR5UmVjdCwgYm91bmRzKCkpOworICAgIGlm
IChwYWludFJlY3QuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBHcmFwaGljc0Nv
bnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoZ3JhcGhpY3NDb250ZXh0KTsKKyAgICBtX2NsaWVu
dC5kcmF3UmVjdCgqdGhpcywgZ3JhcGhpY3NDb250ZXh0LCBwYWludFJlY3QpOworfQorICAgIAor
Ym9vbCBQYWdlT3ZlcmxheTo6bW91c2VFdmVudChjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIG1v
dXNlRXZlbnQpCit7CisgICAgSW50UG9pbnQgbW91c2VQb3NpdGlvbkluT3ZlcmxheUNvb3JkaW5h
dGVzKG1vdXNlRXZlbnQucG9zaXRpb24oKSk7CisKKyAgICBpZiAobV9vdmVybGF5VHlwZSA9PSBQ
YWdlT3ZlcmxheTo6T3ZlcmxheVR5cGU6OkRvY3VtZW50KQorICAgICAgICBtb3VzZVBvc2l0aW9u
SW5PdmVybGF5Q29vcmRpbmF0ZXMgPSBtX3BhZ2UtPm1haW5GcmFtZSgpLnZpZXcoKS0+cm9vdFZp
ZXdUb0NvbnRlbnRzKG1vdXNlUG9zaXRpb25Jbk92ZXJsYXlDb29yZGluYXRlcyk7CisKKyAgICAv
LyBJZ25vcmUgZXZlbnRzIG91dHNpZGUgdGhlIGJvdW5kcy4KKyAgICBpZiAoIWJvdW5kcygpLmNv
bnRhaW5zKG1vdXNlUG9zaXRpb25Jbk92ZXJsYXlDb29yZGluYXRlcykpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIHJldHVybiBtX2NsaWVudC5tb3VzZUV2ZW50KCp0aGlzLCBtb3VzZUV2
ZW50KTsKK30KKwordm9pZCBQYWdlT3ZlcmxheTo6ZGlkU2Nyb2xsRnJhbWUoRnJhbWUmIGZyYW1l
KQoreworICAgIG1fY2xpZW50LmRpZFNjcm9sbEZyYW1lKCp0aGlzLCBmcmFtZSk7Cit9CisKK2Jv
b2wgUGFnZU92ZXJsYXk6OmNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlU3RyaW5nVmFsdWVGb3JQ
b2ludChTdHJpbmcgYXR0cmlidXRlLCBGbG9hdFBvaW50IHBhcmFtZXRlciwgU3RyaW5nJiB2YWx1
ZSkKK3sKKyAgICByZXR1cm4gbV9jbGllbnQuY29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVTdHJp
bmdWYWx1ZUZvclBvaW50KCp0aGlzLCBhdHRyaWJ1dGUsIHBhcmFtZXRlciwgdmFsdWUpOworfQor
Citib29sIFBhZ2VPdmVybGF5Ojpjb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZUJvb2xWYWx1ZUZv
clBvaW50KFN0cmluZyBhdHRyaWJ1dGUsIEZsb2F0UG9pbnQgcGFyYW1ldGVyLCBib29sJiB2YWx1
ZSkKK3sKKyAgICByZXR1cm4gbV9jbGllbnQuY29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVCb29s
VmFsdWVGb3JQb2ludCgqdGhpcywgYXR0cmlidXRlLCBwYXJhbWV0ZXIsIHZhbHVlKTsKK30KKwor
VmVjdG9yPFN0cmluZz4gUGFnZU92ZXJsYXk6OmNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlTmFt
ZXMoYm9vbCBwYXJhbWV0ZXJpemVkTmFtZXMpCit7CisgICAgcmV0dXJuIG1fY2xpZW50LmNvcHlB
Y2Nlc3NpYmlsaXR5QXR0cmlidXRlTmFtZXMoKnRoaXMsIHBhcmFtZXRlcml6ZWROYW1lcyk7Cit9
CisKK3ZvaWQgUGFnZU92ZXJsYXk6OnN0YXJ0RmFkZUluQW5pbWF0aW9uKCkKK3sKKyAgICBtX2Zy
YWN0aW9uRmFkZWRJbiA9IDA7CisgICAgbV9mYWRlQW5pbWF0aW9uVHlwZSA9IEZhZGVJbkFuaW1h
dGlvbjsKKworICAgIHN0YXJ0RmFkZUFuaW1hdGlvbigpOworfQorCit2b2lkIFBhZ2VPdmVybGF5
OjpzdGFydEZhZGVPdXRBbmltYXRpb24oKQoreworICAgIG1fZnJhY3Rpb25GYWRlZEluID0gMTsK
KyAgICBtX2ZhZGVBbmltYXRpb25UeXBlID0gRmFkZU91dEFuaW1hdGlvbjsKKworICAgIHN0YXJ0
RmFkZUFuaW1hdGlvbigpOworfQorCit2b2lkIFBhZ2VPdmVybGF5OjpzdG9wRmFkZU91dEFuaW1h
dGlvbigpCit7CisgICAgbV9mcmFjdGlvbkZhZGVkSW4gPSAxLjA7CisgICAgbV9mYWRlQW5pbWF0
aW9uVGltZXIuc3RvcCgpOworfQorCit2b2lkIFBhZ2VPdmVybGF5OjpzdGFydEZhZGVBbmltYXRp
b24oKQoreworICAgIG1fZmFkZUFuaW1hdGlvblN0YXJ0VGltZSA9IGN1cnJlbnRUaW1lKCk7Cisg
ICAgbV9mYWRlQW5pbWF0aW9uVGltZXIuc3RhcnRSZXBlYXRpbmcoMSAvIGZhZGVBbmltYXRpb25G
cmFtZVJhdGUpOworfQorCit2b2lkIFBhZ2VPdmVybGF5OjpmYWRlQW5pbWF0aW9uVGltZXJGaXJl
ZCgpCit7CisgICAgZmxvYXQgYW5pbWF0aW9uUHJvZ3Jlc3MgPSAoY3VycmVudFRpbWUoKSAtIG1f
ZmFkZUFuaW1hdGlvblN0YXJ0VGltZSkgLyBtX2ZhZGVBbmltYXRpb25EdXJhdGlvbjsKKworICAg
IGlmIChhbmltYXRpb25Qcm9ncmVzcyA+PSAxLjApCisgICAgICAgIGFuaW1hdGlvblByb2dyZXNz
ID0gMS4wOworCisgICAgZG91YmxlIHNpbmUgPSBzaW4ocGlPdmVyVHdvRmxvYXQgKiBhbmltYXRp
b25Qcm9ncmVzcyk7CisgICAgZmxvYXQgZmFkZUFuaW1hdGlvblZhbHVlID0gc2luZSAqIHNpbmU7
CisKKyAgICBtX2ZyYWN0aW9uRmFkZWRJbiA9IChtX2ZhZGVBbmltYXRpb25UeXBlID09IEZhZGVJ
bkFuaW1hdGlvbikgPyBmYWRlQW5pbWF0aW9uVmFsdWUgOiAxIC0gZmFkZUFuaW1hdGlvblZhbHVl
OworICAgIG1fcGFnZS0+cGFnZU92ZXJsYXlDb250cm9sbGVyKCkuc2V0UGFnZU92ZXJsYXlPcGFj
aXR5KCp0aGlzLCBtX2ZyYWN0aW9uRmFkZWRJbik7CisKKyAgICBpZiAoYW5pbWF0aW9uUHJvZ3Jl
c3MgPT0gMS4wKSB7CisgICAgICAgIG1fZmFkZUFuaW1hdGlvblRpbWVyLnN0b3AoKTsKKworICAg
ICAgICBib29sIHdhc0ZhZGluZ091dCA9IG1fZmFkZUFuaW1hdGlvblR5cGUgPT0gRmFkZU91dEFu
aW1hdGlvbjsKKyAgICAgICAgbV9mYWRlQW5pbWF0aW9uVHlwZSA9IE5vQW5pbWF0aW9uOworCisg
ICAgICAgIC8vIElmIHRoaXMgd2FzIGEgZmFkZSBvdXQsIGdvIGFoZWFkIGFuZCB1bmluc3RhbGwg
dGhlIHBhZ2Ugb3ZlcmxheS4KKyAgICAgICAgaWYgKHdhc0ZhZGluZ091dCkKKyAgICAgICAgICAg
IG1fcGFnZS0+cGFnZU92ZXJsYXlDb250cm9sbGVyKCkudW5pbnN0YWxsUGFnZU92ZXJsYXkodGhp
cywgUGFnZU92ZXJsYXk6OkZhZGVNb2RlOjpEb05vdEZhZGUpOworICAgIH0KK30KKwordm9pZCBQ
YWdlT3ZlcmxheTo6Y2xlYXIoKQoreworICAgIG1fcGFnZS0+cGFnZU92ZXJsYXlDb250cm9sbGVy
KCkuY2xlYXJQYWdlT3ZlcmxheSgqdGhpcyk7Cit9CisKK0dyYXBoaWNzTGF5ZXImIFBhZ2VPdmVy
bGF5OjpsYXllcigpCit7CisgICAgcmV0dXJuIG1fcGFnZS0+cGFnZU92ZXJsYXlDb250cm9sbGVy
KCkubGF5ZXJGb3JPdmVybGF5KCp0aGlzKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VPdmVybGF5LmggYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL1BhZ2VPdmVybGF5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uNDFiZjdmNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZU92
ZXJsYXkuaApAQCAtMCwwICsxLDEzOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgUGFnZU92ZXJs
YXlfaAorI2RlZmluZSBQYWdlT3ZlcmxheV9oCisKKyNpbmNsdWRlICJDb2xvci5oIgorI2luY2x1
ZGUgIkZsb2F0UG9pbnQuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSA8d3RmL1Bh
c3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9S
dW5Mb29wLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworY2xhc3MgRnJhbWU7CitjbGFzcyBHcmFwaGljc0NvbnRleHQ7CitjbGFzcyBH
cmFwaGljc0xheWVyOworY2xhc3MgUGFnZTsKK2NsYXNzIFBsYXRmb3JtTW91c2VFdmVudDsKKwor
Y2xhc3MgUGFnZU92ZXJsYXkgZmluYWwgOiBwdWJsaWMgUmVmQ291bnRlZDxQYWdlT3ZlcmxheT4g
eworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFBhZ2VPdmVybGF5KTsKKyAgICBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBjbGFzcyBDbGllbnQgeworICAgIHByb3RlY3Rl
ZDoKKyAgICAgICAgdmlydHVhbCB+Q2xpZW50KCkgeyB9CisgICAgCisgICAgcHVibGljOgorICAg
ICAgICB2aXJ0dWFsIHZvaWQgcGFnZU92ZXJsYXlEZXN0cm95ZWQoUGFnZU92ZXJsYXkmKSA9IDA7
CisgICAgICAgIHZpcnR1YWwgdm9pZCB3aWxsTW92ZVRvUGFnZShQYWdlT3ZlcmxheSYsIFBhZ2Uq
KSA9IDA7CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRNb3ZlVG9QYWdlKFBhZ2VPdmVybGF5Jiwg
UGFnZSopID0gMDsKKyAgICAgICAgdmlydHVhbCB2b2lkIGRyYXdSZWN0KFBhZ2VPdmVybGF5Jiwg
R3JhcGhpY3NDb250ZXh0JiwgY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KSA9IDA7CisgICAgICAg
IHZpcnR1YWwgYm9vbCBtb3VzZUV2ZW50KFBhZ2VPdmVybGF5JiwgY29uc3QgUGxhdGZvcm1Nb3Vz
ZUV2ZW50JikgPSAwOworICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkU2Nyb2xsRnJhbWUoUGFnZU92
ZXJsYXkmLCBGcmFtZSYpIHsgfQorCisgICAgICAgIHZpcnR1YWwgYm9vbCBjb3B5QWNjZXNzaWJp
bGl0eUF0dHJpYnV0ZVN0cmluZ1ZhbHVlRm9yUG9pbnQoUGFnZU92ZXJsYXkmLCBTdHJpbmcgLyog
YXR0cmlidXRlICovLCBGbG9hdFBvaW50LCBTdHJpbmcmKSB7IHJldHVybiBmYWxzZTsgfQorICAg
ICAgICB2aXJ0dWFsIGJvb2wgY29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVCb29sVmFsdWVGb3JQ
b2ludChQYWdlT3ZlcmxheSYsIFN0cmluZyAvKiBhdHRyaWJ1dGUgKi8sIEZsb2F0UG9pbnQsIGJv
b2wmKSAgeyByZXR1cm4gZmFsc2U7IH0KKyAgICAgICAgdmlydHVhbCBWZWN0b3I8U3RyaW5nPiBj
b3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZU5hbWVzKFBhZ2VPdmVybGF5JiwgYm9vbCAvKiBwYXJh
bWV0ZXJpemVkTmFtZXMgKi8pICB7IHJldHVybiBWZWN0b3I8U3RyaW5nPigpOyB9CisgICAgfTsK
KworICAgIGVudW0gY2xhc3MgT3ZlcmxheVR5cGUgeworICAgICAgICBWaWV3LCAvLyBGaXhlZCB0
byB0aGUgdmlldyBzaXplOyBkb2VzIG5vdCBzY2FsZSBvciBzY3JvbGwgd2l0aCB0aGUgZG9jdW1l
bnQsIHJlcGFpbnRzIG9uIHNjcm9sbC4KKyAgICAgICAgRG9jdW1lbnQsIC8vIFNjYWxlcyBhbmQg
c2Nyb2xscyB3aXRoIHRoZSBkb2N1bWVudC4KKyAgICB9OworCisgICAgc3RhdGljIFBhc3NSZWZQ
dHI8UGFnZU92ZXJsYXk+IGNyZWF0ZShDbGllbnQmLCBPdmVybGF5VHlwZSA9IE92ZXJsYXlUeXBl
OjpWaWV3KTsKKyAgICB2aXJ0dWFsIH5QYWdlT3ZlcmxheSgpOworCisgICAgdm9pZCBzZXRQYWdl
KFBhZ2UqKTsKKyAgICB2b2lkIHNldE5lZWRzRGlzcGxheShjb25zdCBJbnRSZWN0JiBkaXJ0eVJl
Y3QpOworICAgIHZvaWQgc2V0TmVlZHNEaXNwbGF5KCk7CisKKyAgICB2b2lkIGRyYXdSZWN0KEdy
YXBoaWNzQ29udGV4dCYsIGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCk7CisgICAgYm9vbCBtb3Vz
ZUV2ZW50KGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYpOworICAgIHZvaWQgZGlkU2Nyb2xsRnJh
bWUoRnJhbWUmKTsKKworICAgIGJvb2wgY29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVTdHJpbmdW
YWx1ZUZvclBvaW50KFN0cmluZyBhdHRyaWJ1dGUsIEZsb2F0UG9pbnQgcGFyYW1ldGVyLCBTdHJp
bmcmIHZhbHVlKTsKKyAgICBib29sIGNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlQm9vbFZhbHVl
Rm9yUG9pbnQoU3RyaW5nIGF0dHJpYnV0ZSwgRmxvYXRQb2ludCBwYXJhbWV0ZXIsIGJvb2wmIHZh
bHVlKTsKKyAgICBWZWN0b3I8U3RyaW5nPiBjb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZU5hbWVz
KGJvb2wgcGFyYW1ldGVyaXplZE5hbWVzKTsKKyAgICAKKyAgICB2b2lkIHN0YXJ0RmFkZUluQW5p
bWF0aW9uKCk7CisgICAgdm9pZCBzdGFydEZhZGVPdXRBbmltYXRpb24oKTsKKyAgICB2b2lkIHN0
b3BGYWRlT3V0QW5pbWF0aW9uKCk7CisKKyAgICB2b2lkIGNsZWFyKCk7CisKKyAgICBDbGllbnQm
IGNsaWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fY2xpZW50OyB9CisKKyAgICBlbnVtIGNsYXNzIEZh
ZGVNb2RlIHsgRG9Ob3RGYWRlLCBGYWRlIH07CisKKyAgICBPdmVybGF5VHlwZSBvdmVybGF5VHlw
ZSgpIHsgcmV0dXJuIG1fb3ZlcmxheVR5cGU7IH0KKworICAgIEludFJlY3QgYm91bmRzKCkgY29u
c3Q7CisgICAgSW50UmVjdCBmcmFtZSgpIGNvbnN0OworICAgIHZvaWQgc2V0RnJhbWUoSW50UmVj
dCk7CisKKyAgICBSR0JBMzIgYmFja2dyb3VuZENvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9iYWNr
Z3JvdW5kQ29sb3I7IH0KKyAgICB2b2lkIHNldEJhY2tncm91bmRDb2xvcihSR0JBMzIpOworCisg
ICAgLy8gRklYTUU6IFBhZ2VPdmVybGF5IHNob3VsZCBvd24gaXRzIGxheWVyLCBpbnN0ZWFkIG9m
IFBhZ2VPdmVybGF5Q29udHJvbGxlci4KKyAgICBHcmFwaGljc0xheWVyJiBsYXllcigpOworCitw
cml2YXRlOgorICAgIGV4cGxpY2l0IFBhZ2VPdmVybGF5KENsaWVudCYsIE92ZXJsYXlUeXBlKTsK
KworICAgIHZvaWQgc3RhcnRGYWRlQW5pbWF0aW9uKCk7CisgICAgdm9pZCBmYWRlQW5pbWF0aW9u
VGltZXJGaXJlZCgpOworCisgICAgQ2xpZW50JiBtX2NsaWVudDsKKyAgICBQYWdlKiBtX3BhZ2U7
CisKKyAgICBSdW5Mb29wOjpUaW1lcjxQYWdlT3ZlcmxheT4gbV9mYWRlQW5pbWF0aW9uVGltZXI7
CisgICAgZG91YmxlIG1fZmFkZUFuaW1hdGlvblN0YXJ0VGltZTsKKyAgICBkb3VibGUgbV9mYWRl
QW5pbWF0aW9uRHVyYXRpb247CisKKyAgICBlbnVtIEZhZGVBbmltYXRpb25UeXBlIHsKKyAgICAg
ICAgTm9BbmltYXRpb24sCisgICAgICAgIEZhZGVJbkFuaW1hdGlvbiwKKyAgICAgICAgRmFkZU91
dEFuaW1hdGlvbiwKKyAgICB9OworCisgICAgRmFkZUFuaW1hdGlvblR5cGUgbV9mYWRlQW5pbWF0
aW9uVHlwZTsKKyAgICBmbG9hdCBtX2ZyYWN0aW9uRmFkZWRJbjsKKworICAgIE92ZXJsYXlUeXBl
IG1fb3ZlcmxheVR5cGU7CisgICAgSW50UmVjdCBtX292ZXJyaWRlRnJhbWU7CisKKyAgICBSR0JB
MzIgbV9iYWNrZ3JvdW5kQ29sb3I7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2Vu
ZGlmIC8vIFBhZ2VPdmVybGF5X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFn
ZU92ZXJsYXlDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZU92ZXJsYXlD
b250cm9sbGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYjBjNDU4
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlT3ZlcmxheUNvbnRy
b2xsZXIuY3BwCkBAIC0wLDAgKzEsMzUwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIlBhZ2VPdmVybGF5Q29udHJvbGxlci5oIgorCisjaW5jbHVkZSAiQ2hy
b21lLmgiCisjaW5jbHVkZSAiQ2hyb21lQ2xpZW50LmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNp
bmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNs
dWRlICJHcmFwaGljc0xheWVyLmgiCisjaW5jbHVkZSAiTWFpbkZyYW1lLmgiCisjaW5jbHVkZSAi
UGFnZS5oIgorI2luY2x1ZGUgIlBhZ2VPdmVybGF5LmgiCisjaW5jbHVkZSAiU2Nyb2xsaW5nQ29v
cmRpbmF0b3IuaCIKKyNpbmNsdWRlICJTZXR0aW5ncy5oIgorI2luY2x1ZGUgIlRpbGVkQmFja2lu
Zy5oIgorCisvLyBGSVhNRTogU29tZW9uZSBuZWVkcyB0byBjYWxsIGRpZENoYW5nZVNldHRpbmdz
KCkgaWYgd2Ugd2FudCBkeW5hbWljIHVwZGF0ZXMgb2YgbGF5ZXIgYm9yZGVyL3JlcGFpbnQgY291
bnRlciBzZXR0aW5ncy4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitQYWdlT3ZlcmxheUNvbnRy
b2xsZXI6OlBhZ2VPdmVybGF5Q29udHJvbGxlcihQYWdlJiBwYWdlKQorICAgIDogbV9pbml0aWFs
aXplZChmYWxzZSkKKyAgICAsIG1fcGFnZShwYWdlKQoreworfQorCit2b2lkIFBhZ2VPdmVybGF5
Q29udHJvbGxlcjo6Y3JlYXRlUm9vdExheWVyc0lmTmVlZGVkKCkKK3sKKyAgICBpZiAobV9pbml0
aWFsaXplZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9pbml0aWFsaXplZCA9IHRydWU7CisK
KyAgICBBU1NFUlQoIW1fZG9jdW1lbnRPdmVybGF5Um9vdExheWVyKTsKKyAgICBBU1NFUlQoIW1f
dmlld092ZXJsYXlSb290TGF5ZXIpOworCisgICAgbV9kb2N1bWVudE92ZXJsYXlSb290TGF5ZXIg
PSBHcmFwaGljc0xheWVyOjpjcmVhdGUobV9wYWdlLmNocm9tZSgpLmNsaWVudCgpLmdyYXBoaWNz
TGF5ZXJGYWN0b3J5KCksICp0aGlzKTsKKyAgICBtX3ZpZXdPdmVybGF5Um9vdExheWVyID0gR3Jh
cGhpY3NMYXllcjo6Y3JlYXRlKG1fcGFnZS5jaHJvbWUoKS5jbGllbnQoKS5ncmFwaGljc0xheWVy
RmFjdG9yeSgpLCAqdGhpcyk7CisjaWZuZGVmIE5ERUJVRworICAgIG1fZG9jdW1lbnRPdmVybGF5
Um9vdExheWVyLT5zZXROYW1lKCJQYWdlIE92ZXJsYXkgY29udGFpbmVyIChkb2N1bWVudC1yZWxh
dGl2ZSkiKTsKKyAgICBtX3ZpZXdPdmVybGF5Um9vdExheWVyLT5zZXROYW1lKCJQYWdlIE92ZXJs
YXkgY29udGFpbmVyICh2aWV3LXJlbGF0aXZlKSIpOworI2VuZGlmCit9CisKK0dyYXBoaWNzTGF5
ZXImIFBhZ2VPdmVybGF5Q29udHJvbGxlcjo6ZG9jdW1lbnRPdmVybGF5Um9vdExheWVyKCkKK3sK
KyAgICBjcmVhdGVSb290TGF5ZXJzSWZOZWVkZWQoKTsKKyAgICByZXR1cm4gKm1fZG9jdW1lbnRP
dmVybGF5Um9vdExheWVyOworfQorCitHcmFwaGljc0xheWVyJiBQYWdlT3ZlcmxheUNvbnRyb2xs
ZXI6OnZpZXdPdmVybGF5Um9vdExheWVyKCkKK3sKKyAgICBjcmVhdGVSb290TGF5ZXJzSWZOZWVk
ZWQoKTsKKyAgICByZXR1cm4gKm1fdmlld092ZXJsYXlSb290TGF5ZXI7Cit9CisKK3N0YXRpYyB2
b2lkIHVwZGF0ZU92ZXJsYXlHZW9tZXRyeShQYWdlT3ZlcmxheSYgb3ZlcmxheSwgR3JhcGhpY3NM
YXllciYgZ3JhcGhpY3NMYXllcikKK3sKKyAgICBJbnRSZWN0IG92ZXJsYXlGcmFtZSA9IG92ZXJs
YXkuZnJhbWUoKTsKKworICAgIGlmIChvdmVybGF5RnJhbWUubG9jYXRpb24oKSA9PSBncmFwaGlj
c0xheWVyLnBvc2l0aW9uKCkgJiYgb3ZlcmxheUZyYW1lLnNpemUoKSA9PSBncmFwaGljc0xheWVy
LnNpemUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZ3JhcGhpY3NMYXllci5zZXRQb3NpdGlv
bihvdmVybGF5RnJhbWUubG9jYXRpb24oKSk7CisgICAgZ3JhcGhpY3NMYXllci5zZXRTaXplKG92
ZXJsYXlGcmFtZS5zaXplKCkpOworfQorCit2b2lkIFBhZ2VPdmVybGF5Q29udHJvbGxlcjo6aW5z
dGFsbFBhZ2VPdmVybGF5KFBhc3NSZWZQdHI8UGFnZU92ZXJsYXk+IHBhZ2VPdmVybGF5LCBQYWdl
T3ZlcmxheTo6RmFkZU1vZGUgZmFkZU1vZGUpCit7CisgICAgY3JlYXRlUm9vdExheWVyc0lmTmVl
ZGVkKCk7CisKKyAgICBSZWZQdHI8UGFnZU92ZXJsYXk+IG92ZXJsYXkgPSBwYWdlT3ZlcmxheTsK
KworICAgIGlmIChtX3BhZ2VPdmVybGF5cy5jb250YWlucyhvdmVybGF5KSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgbV9wYWdlT3ZlcmxheXMuYXBwZW5kKG92ZXJsYXkpOworICAgIG92ZXJsYXkt
PnNldFBhZ2UoJm1fcGFnZSk7CisKKyAgICBpZiAoZmFkZU1vZGUgPT0gUGFnZU92ZXJsYXk6OkZh
ZGVNb2RlOjpGYWRlKQorICAgICAgICBvdmVybGF5LT5zdGFydEZhZGVJbkFuaW1hdGlvbigpOwor
CisgICAgc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzTGF5ZXI+IGxheWVyID0gR3JhcGhpY3NMYXll
cjo6Y3JlYXRlKG1fcGFnZS5jaHJvbWUoKS5jbGllbnQoKS5ncmFwaGljc0xheWVyRmFjdG9yeSgp
LCAqdGhpcyk7CisgICAgbGF5ZXItPnNldEFuY2hvclBvaW50KEZsb2F0UG9pbnQzRCgpKTsKKyAg
ICBsYXllci0+c2V0QmFja2dyb3VuZENvbG9yKG92ZXJsYXktPmJhY2tncm91bmRDb2xvcigpKTsK
KyAgICB1cGRhdGVPdmVybGF5R2VvbWV0cnkoKm92ZXJsYXksICpsYXllcik7CisjaWZuZGVmIE5E
RUJVRworICAgIGxheWVyLT5zZXROYW1lKCJQYWdlIE92ZXJsYXkgY29udGVudCIpOworI2VuZGlm
CisKKyAgICB1cGRhdGVTZXR0aW5nc0ZvckxheWVyKCpsYXllcik7CisKKyAgICBzd2l0Y2ggKG92
ZXJsYXktPm92ZXJsYXlUeXBlKCkpIHsKKyAgICBjYXNlIFBhZ2VPdmVybGF5OjpPdmVybGF5VHlw
ZTo6VmlldzoKKyAgICAgICAgbV92aWV3T3ZlcmxheVJvb3RMYXllci0+YWRkQ2hpbGQobGF5ZXIu
Z2V0KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBhZ2VPdmVybGF5OjpPdmVybGF5VHlw
ZTo6RG9jdW1lbnQ6CisgICAgICAgIG1fZG9jdW1lbnRPdmVybGF5Um9vdExheWVyLT5hZGRDaGls
ZChsYXllci5nZXQoKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIG1fb3ZlcmxheUdy
YXBoaWNzTGF5ZXJzLnNldChvdmVybGF5LmdldCgpLCBXVEY6Om1vdmUobGF5ZXIpKTsKKworICAg
IHVwZGF0ZUZvcmNlU3luY2hyb25vdXNTY3JvbGxMYXllclBvc2l0aW9uVXBkYXRlcygpOworCisg
ICAgaWYgKEZyYW1lVmlldyogZnJhbWVWaWV3ID0gbV9wYWdlLm1haW5GcmFtZSgpLnZpZXcoKSkK
KyAgICAgICAgZnJhbWVWaWV3LT5lbnRlckNvbXBvc2l0aW5nTW9kZSgpOworfQorCit2b2lkIFBh
Z2VPdmVybGF5Q29udHJvbGxlcjo6dW5pbnN0YWxsUGFnZU92ZXJsYXkoUGFnZU92ZXJsYXkqIG92
ZXJsYXksIFBhZ2VPdmVybGF5OjpGYWRlTW9kZSBmYWRlTW9kZSkKK3sKKyAgICBpZiAoZmFkZU1v
ZGUgPT0gUGFnZU92ZXJsYXk6OkZhZGVNb2RlOjpGYWRlKSB7CisgICAgICAgIG92ZXJsYXktPnN0
YXJ0RmFkZU91dEFuaW1hdGlvbigpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgb3Zl
cmxheS0+c2V0UGFnZShudWxscHRyKTsKKworICAgIG1fb3ZlcmxheUdyYXBoaWNzTGF5ZXJzLnRh
a2Uob3ZlcmxheSktPnJlbW92ZUZyb21QYXJlbnQoKTsKKworICAgIHNpemVfdCBvdmVybGF5SW5k
ZXggPSBtX3BhZ2VPdmVybGF5cy5maW5kKG92ZXJsYXkpOworICAgIEFTU0VSVChvdmVybGF5SW5k
ZXggIT0gbm90Rm91bmQpOworICAgIG1fcGFnZU92ZXJsYXlzLnJlbW92ZShvdmVybGF5SW5kZXgp
OworCisgICAgdXBkYXRlRm9yY2VTeW5jaHJvbm91c1Njcm9sbExheWVyUG9zaXRpb25VcGRhdGVz
KCk7Cit9CisKK3ZvaWQgUGFnZU92ZXJsYXlDb250cm9sbGVyOjp1cGRhdGVGb3JjZVN5bmNocm9u
b3VzU2Nyb2xsTGF5ZXJQb3NpdGlvblVwZGF0ZXMoKQoreworI2lmIEVOQUJMRShBU1lOQ19TQ1JP
TExJTkcpCisgICAgYm9vbCBmb3JjZVN5bmNocm9ub3VzU2Nyb2xsTGF5ZXJQb3NpdGlvblVwZGF0
ZXMgPSBmYWxzZTsKKworICAgIGZvciAoYXV0byYgb3ZlcmxheSA6IG1fcGFnZU92ZXJsYXlzKSB7
CisgICAgICAgIGlmIChvdmVybGF5LT5vdmVybGF5VHlwZSgpID09IFBhZ2VPdmVybGF5OjpPdmVy
bGF5VHlwZTo6VmlldykKKyAgICAgICAgICAgIGZvcmNlU3luY2hyb25vdXNTY3JvbGxMYXllclBv
c2l0aW9uVXBkYXRlcyA9IHRydWU7CisgICAgfQorCisgICAgaWYgKFNjcm9sbGluZ0Nvb3JkaW5h
dG9yKiBzY3JvbGxpbmdDb29yZGluYXRvciA9IG1fcGFnZS5zY3JvbGxpbmdDb29yZGluYXRvcigp
KQorICAgICAgICBzY3JvbGxpbmdDb29yZGluYXRvci0+c2V0Rm9yY2VTeW5jaHJvbm91c1Njcm9s
bExheWVyUG9zaXRpb25VcGRhdGVzKGZvcmNlU3luY2hyb25vdXNTY3JvbGxMYXllclBvc2l0aW9u
VXBkYXRlcyk7CisjZW5kaWYKK30KKwordm9pZCBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6OnNldFBh
Z2VPdmVybGF5TmVlZHNEaXNwbGF5KFBhZ2VPdmVybGF5JiBvdmVybGF5LCBjb25zdCBXZWJDb3Jl
OjpJbnRSZWN0JiBkaXJ0eVJlY3QpCit7CisgICAgQVNTRVJUKG1fcGFnZU92ZXJsYXlzLmNvbnRh
aW5zKCZvdmVybGF5KSk7CisgICAgR3JhcGhpY3NMYXllciYgZ3JhcGhpY3NMYXllciA9ICptX292
ZXJsYXlHcmFwaGljc0xheWVycy5nZXQoJm92ZXJsYXkpOworCisgICAgaWYgKCFncmFwaGljc0xh
eWVyLmRyYXdzQ29udGVudCgpKSB7CisgICAgICAgIGdyYXBoaWNzTGF5ZXIuc2V0RHJhd3NDb250
ZW50KHRydWUpOworICAgICAgICB1cGRhdGVPdmVybGF5R2VvbWV0cnkob3ZlcmxheSwgZ3JhcGhp
Y3NMYXllcik7CisgICAgfQorCisgICAgZ3JhcGhpY3NMYXllci5zZXROZWVkc0Rpc3BsYXlJblJl
Y3QoZGlydHlSZWN0KTsKK30KKwordm9pZCBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6OnNldFBhZ2VP
dmVybGF5T3BhY2l0eShQYWdlT3ZlcmxheSYgb3ZlcmxheSwgZmxvYXQgb3BhY2l0eSkKK3sKKyAg
ICBBU1NFUlQobV9wYWdlT3ZlcmxheXMuY29udGFpbnMoJm92ZXJsYXkpKTsKKyAgICBtX292ZXJs
YXlHcmFwaGljc0xheWVycy5nZXQoJm92ZXJsYXkpLT5zZXRPcGFjaXR5KG9wYWNpdHkpOworfQor
Cit2b2lkIFBhZ2VPdmVybGF5Q29udHJvbGxlcjo6Y2xlYXJQYWdlT3ZlcmxheShQYWdlT3Zlcmxh
eSYgb3ZlcmxheSkKK3sKKyAgICBBU1NFUlQobV9wYWdlT3ZlcmxheXMuY29udGFpbnMoJm92ZXJs
YXkpKTsKKyAgICBtX292ZXJsYXlHcmFwaGljc0xheWVycy5nZXQoJm92ZXJsYXkpLT5zZXREcmF3
c0NvbnRlbnQoZmFsc2UpOworfQorCitHcmFwaGljc0xheWVyJiBQYWdlT3ZlcmxheUNvbnRyb2xs
ZXI6OmxheWVyRm9yT3ZlcmxheShQYWdlT3ZlcmxheSYgb3ZlcmxheSkgY29uc3QKK3sKKyAgICBB
U1NFUlQobV9wYWdlT3ZlcmxheXMuY29udGFpbnMoJm92ZXJsYXkpKTsKKyAgICByZXR1cm4gKm1f
b3ZlcmxheUdyYXBoaWNzTGF5ZXJzLmdldCgmb3ZlcmxheSk7Cit9CisKK3ZvaWQgUGFnZU92ZXJs
YXlDb250cm9sbGVyOjp3aWxsQXR0YWNoUm9vdExheWVyKCkKK3sKKyAgICBmb3IgKGF1dG8mIG92
ZXJsYXlBbmRMYXllciA6IG1fb3ZlcmxheUdyYXBoaWNzTGF5ZXJzKQorICAgICAgICB1cGRhdGVP
dmVybGF5R2VvbWV0cnkoKm92ZXJsYXlBbmRMYXllci5rZXksICpvdmVybGF5QW5kTGF5ZXIudmFs
dWUpOworfQorCit2b2lkIFBhZ2VPdmVybGF5Q29udHJvbGxlcjo6ZGlkQ2hhbmdlVmlld1NpemUo
KQoreworICAgIGZvciAoYXV0byYgb3ZlcmxheUFuZExheWVyIDogbV9vdmVybGF5R3JhcGhpY3NM
YXllcnMpIHsKKyAgICAgICAgaWYgKG92ZXJsYXlBbmRMYXllci5rZXktPm92ZXJsYXlUeXBlKCkg
PT0gUGFnZU92ZXJsYXk6Ok92ZXJsYXlUeXBlOjpWaWV3KQorICAgICAgICAgICAgdXBkYXRlT3Zl
cmxheUdlb21ldHJ5KCpvdmVybGF5QW5kTGF5ZXIua2V5LCAqb3ZlcmxheUFuZExheWVyLnZhbHVl
KTsKKyAgICB9Cit9CisKK3ZvaWQgUGFnZU92ZXJsYXlDb250cm9sbGVyOjpkaWRDaGFuZ2VEb2N1
bWVudFNpemUoKQoreworICAgIGZvciAoYXV0byYgb3ZlcmxheUFuZExheWVyIDogbV9vdmVybGF5
R3JhcGhpY3NMYXllcnMpIHsKKyAgICAgICAgaWYgKG92ZXJsYXlBbmRMYXllci5rZXktPm92ZXJs
YXlUeXBlKCkgPT0gUGFnZU92ZXJsYXk6Ok92ZXJsYXlUeXBlOjpEb2N1bWVudCkKKyAgICAgICAg
ICAgIHVwZGF0ZU92ZXJsYXlHZW9tZXRyeSgqb3ZlcmxheUFuZExheWVyLmtleSwgKm92ZXJsYXlB
bmRMYXllci52YWx1ZSk7CisgICAgfQorfQorCit2b2lkIFBhZ2VPdmVybGF5Q29udHJvbGxlcjo6
ZGlkQ2hhbmdlU2V0dGluZ3MoKQoreworICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYXBwbHkgdGhl
c2Ugc2V0dGluZ3MgdG8gYWxsIG92ZXJsYXkgc3VibGF5ZXJzIHJlY3Vyc2l2ZWx5LgorICAgIGZv
ciAoYXV0byYgZ3JhcGhpY3NMYXllciA6IG1fb3ZlcmxheUdyYXBoaWNzTGF5ZXJzLnZhbHVlcygp
KQorICAgICAgICB1cGRhdGVTZXR0aW5nc0ZvckxheWVyKCpncmFwaGljc0xheWVyKTsKK30KKwor
dm9pZCBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6OmRpZENoYW5nZURldmljZVNjYWxlRmFjdG9yKCkK
K3sKKyAgICBjcmVhdGVSb290TGF5ZXJzSWZOZWVkZWQoKTsKKworICAgIG1fZG9jdW1lbnRPdmVy
bGF5Um9vdExheWVyLT5ub3RlRGV2aWNlT3JQYWdlU2NhbGVGYWN0b3JDaGFuZ2VkSW5jbHVkaW5n
RGVzY2VuZGFudHMoKTsKKyAgICBtX3ZpZXdPdmVybGF5Um9vdExheWVyLT5ub3RlRGV2aWNlT3JQ
YWdlU2NhbGVGYWN0b3JDaGFuZ2VkSW5jbHVkaW5nRGVzY2VuZGFudHMoKTsKKworICAgIGZvciAo
YXV0byYgZ3JhcGhpY3NMYXllciA6IG1fb3ZlcmxheUdyYXBoaWNzTGF5ZXJzLnZhbHVlcygpKQor
ICAgICAgICBncmFwaGljc0xheWVyLT5zZXROZWVkc0Rpc3BsYXkoKTsKK30KKwordm9pZCBQYWdl
T3ZlcmxheUNvbnRyb2xsZXI6OmRpZENoYW5nZUV4cG9zZWRSZWN0KCkKK3sKKyAgICBtX3BhZ2Uu
Y2hyb21lKCkuY2xpZW50KCkuc2NoZWR1bGVDb21wb3NpdGluZ0xheWVyRmx1c2goKTsKK30KKwor
dm9pZCBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6OmRpZFNjcm9sbEZyYW1lKEZyYW1lJiBmcmFtZSkK
K3sKKyAgICBmb3IgKGF1dG8mIG92ZXJsYXlBbmRMYXllciA6IG1fb3ZlcmxheUdyYXBoaWNzTGF5
ZXJzKSB7CisgICAgICAgIGlmIChvdmVybGF5QW5kTGF5ZXIua2V5LT5vdmVybGF5VHlwZSgpID09
IFBhZ2VPdmVybGF5OjpPdmVybGF5VHlwZTo6VmlldyB8fCAhZnJhbWUuaXNNYWluRnJhbWUoKSkK
KyAgICAgICAgICAgIG92ZXJsYXlBbmRMYXllci52YWx1ZS0+c2V0TmVlZHNEaXNwbGF5KCk7Cisg
ICAgICAgIG92ZXJsYXlBbmRMYXllci5rZXktPmRpZFNjcm9sbEZyYW1lKGZyYW1lKTsKKyAgICB9
Cit9CisKK3ZvaWQgUGFnZU92ZXJsYXlDb250cm9sbGVyOjp1cGRhdGVTZXR0aW5nc0ZvckxheWVy
KEdyYXBoaWNzTGF5ZXImIGxheWVyKQoreworICAgIFNldHRpbmdzJiBzZXR0aW5ncyA9IG1fcGFn
ZS5zZXR0aW5ncygpOworICAgIGxheWVyLnNldEFjY2VsZXJhdGVzRHJhd2luZyhzZXR0aW5ncy5h
Y2NlbGVyYXRlZERyYXdpbmdFbmFibGVkKCkpOworICAgIGxheWVyLnNldFNob3dEZWJ1Z0JvcmRl
cihzZXR0aW5ncy5zaG93RGVidWdCb3JkZXJzKCkpOworICAgIGxheWVyLnNldFNob3dSZXBhaW50
Q291bnRlcihzZXR0aW5ncy5zaG93UmVwYWludENvdW50ZXIoKSk7Cit9CisKK2Jvb2wgUGFnZU92
ZXJsYXlDb250cm9sbGVyOjpoYW5kbGVNb3VzZUV2ZW50KGNvbnN0IFBsYXRmb3JtTW91c2VFdmVu
dCYgbW91c2VFdmVudCkKK3sKKyAgICBpZiAoIW1fcGFnZU92ZXJsYXlzLnNpemUoKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgZm9yIChhdXRvIGl0ID0gbV9wYWdlT3ZlcmxheXMucmJl
Z2luKCksIGVuZCA9IG1fcGFnZU92ZXJsYXlzLnJlbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7Cisg
ICAgICAgIGlmICgoKml0KS0+bW91c2VFdmVudChtb3VzZUV2ZW50KSkKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBQYWdlT3Zl
cmxheUNvbnRyb2xsZXI6OmNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlU3RyaW5nVmFsdWVGb3JQ
b2ludChTdHJpbmcgYXR0cmlidXRlLCBGbG9hdFBvaW50IHBhcmFtZXRlciwgU3RyaW5nJiB2YWx1
ZSkKK3sKKyAgICBpZiAoIW1fcGFnZU92ZXJsYXlzLnNpemUoKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgZm9yIChhdXRvIGl0ID0gbV9wYWdlT3ZlcmxheXMucmJlZ2luKCksIGVuZCA9
IG1fcGFnZU92ZXJsYXlzLnJlbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIGlmICgo
Kml0KS0+Y29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVTdHJpbmdWYWx1ZUZvclBvaW50KGF0dHJp
YnV0ZSwgcGFyYW1ldGVyLCB2YWx1ZSkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUGFnZU92ZXJsYXlDb250cm9sbGVyOjpj
b3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZUJvb2xWYWx1ZUZvclBvaW50KFN0cmluZyBhdHRyaWJ1
dGUsIEZsb2F0UG9pbnQgcGFyYW1ldGVyLCBib29sJiB2YWx1ZSkKK3sKKyAgICBpZiAoIW1fcGFn
ZU92ZXJsYXlzLnNpemUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgZm9yIChhdXRv
IGl0ID0gbV9wYWdlT3ZlcmxheXMucmJlZ2luKCksIGVuZCA9IG1fcGFnZU92ZXJsYXlzLnJlbmQo
KTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIGlmICgoKml0KS0+Y29weUFjY2Vzc2liaWxp
dHlBdHRyaWJ1dGVCb29sVmFsdWVGb3JQb2ludChhdHRyaWJ1dGUsIHBhcmFtZXRlciwgdmFsdWUp
KQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIHJldHVybiBmYWxz
ZTsKK30KKworVmVjdG9yPFN0cmluZz4gUGFnZU92ZXJsYXlDb250cm9sbGVyOjpjb3B5QWNjZXNz
aWJpbGl0eUF0dHJpYnV0ZXNOYW1lcyhib29sIHBhcmFtZXRlcml6ZWROYW1lcykKK3sKKyAgICBp
ZiAoIW1fcGFnZU92ZXJsYXlzLnNpemUoKSkKKyAgICAgICAgcmV0dXJuIFZlY3RvcjxTdHJpbmc+
KCk7CisKKyAgICBmb3IgKGF1dG8gaXQgPSBtX3BhZ2VPdmVybGF5cy5yYmVnaW4oKSwgZW5kID0g
bV9wYWdlT3ZlcmxheXMucmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgVmVjdG9y
PFN0cmluZz4gbmFtZXMgPSAoKml0KS0+Y29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVOYW1lcyhw
YXJhbWV0ZXJpemVkTmFtZXMpOworICAgICAgICBpZiAoIW5hbWVzLmlzRW1wdHkoKSkKKyAgICAg
ICAgICAgIHJldHVybiBuYW1lczsKKyAgICB9CisKKyAgICByZXR1cm4gVmVjdG9yPFN0cmluZz4o
KTsKK30KKwordm9pZCBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6OnBhaW50Q29udGVudHMoY29uc3Qg
V2ViQ29yZTo6R3JhcGhpY3NMYXllciogZ3JhcGhpY3NMYXllciwgV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0JiBncmFwaGljc0NvbnRleHQsIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJQYWludGluZ1Bo
YXNlLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGNsaXBSZWN0KQoreworICAgIGZvciAoYXV0
byBpdCA9IG1fb3ZlcmxheUdyYXBoaWNzTGF5ZXJzLmJlZ2luKCksIGVuZCA9IG1fb3ZlcmxheUdy
YXBoaWNzTGF5ZXJzLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgaWYgKGl0LT52
YWx1ZS5nZXQoKSAhPSBncmFwaGljc0xheWVyKQorICAgICAgICAgICAgY29udGludWU7CisKKyAg
ICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGdyYXBoaWNzQ29udGV4
dCk7CisgICAgICAgIGdyYXBoaWNzQ29udGV4dC5jbGlwKGNsaXBSZWN0KTsKKyAgICAgICAgaXQt
PmtleS0+ZHJhd1JlY3QoZ3JhcGhpY3NDb250ZXh0LCBlbmNsb3NpbmdJbnRSZWN0KGNsaXBSZWN0
KSk7CisKKyAgICAgICAgcmV0dXJuOworICAgIH0KK30KKworZmxvYXQgUGFnZU92ZXJsYXlDb250
cm9sbGVyOjpkZXZpY2VTY2FsZUZhY3RvcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcGFnZS5k
ZXZpY2VTY2FsZUZhY3RvcigpOworfQorCit2b2lkIFBhZ2VPdmVybGF5Q29udHJvbGxlcjo6bm90
aWZ5Rmx1c2hSZXF1aXJlZChjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKikKK3sKKyAgICBt
X3BhZ2UuY2hyb21lKCkuY2xpZW50KCkuc2NoZWR1bGVDb21wb3NpdGluZ0xheWVyRmx1c2goKTsK
K30KKwordm9pZCBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6OmRpZENoYW5nZU92ZXJsYXlGcmFtZShQ
YWdlT3ZlcmxheSYgb3ZlcmxheSkKK3sKKyAgICBBU1NFUlQobV9wYWdlT3ZlcmxheXMuY29udGFp
bnMoJm92ZXJsYXkpKTsKKyAgICB1cGRhdGVPdmVybGF5R2VvbWV0cnkob3ZlcmxheSwgKm1fb3Zl
cmxheUdyYXBoaWNzTGF5ZXJzLmdldCgmb3ZlcmxheSkpOworfQorCit2b2lkIFBhZ2VPdmVybGF5
Q29udHJvbGxlcjo6ZGlkQ2hhbmdlT3ZlcmxheUJhY2tncm91bmRDb2xvcihQYWdlT3ZlcmxheSYg
b3ZlcmxheSkKK3sKKyAgICBBU1NFUlQobV9wYWdlT3ZlcmxheXMuY29udGFpbnMoJm92ZXJsYXkp
KTsKKyAgICBtX292ZXJsYXlHcmFwaGljc0xheWVycy5nZXQoJm92ZXJsYXkpLT5zZXRCYWNrZ3Jv
dW5kQ29sb3Iob3ZlcmxheS5iYWNrZ3JvdW5kQ29sb3IoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlT3ZlcmxheUNvbnRy
b2xsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZU92ZXJsYXlDb250cm9sbGVyLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmU5Yzg5ZAotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZU92ZXJsYXlDb250cm9sbGVyLmgKQEAgLTAsMCAr
MSwxMDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFBhZ2VPdmVybGF5Q29udHJvbGxlcl9oCisj
ZGVmaW5lIFBhZ2VPdmVybGF5Q29udHJvbGxlcl9oCisKKyNpbmNsdWRlICJHcmFwaGljc0xheWVy
Q2xpZW50LmgiCisjaW5jbHVkZSAiUGFnZU92ZXJsYXkuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1h
cC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRnJhbWU7CitjbGFzcyBQYWdlOworY2xhc3Mg
UGxhdGZvcm1Nb3VzZUV2ZW50OworCitjbGFzcyBQYWdlT3ZlcmxheUNvbnRyb2xsZXIgOiBwdWJs
aWMgR3JhcGhpY3NMYXllckNsaWVudCB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUGFnZU92
ZXJsYXlDb250cm9sbGVyKTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoK
KyAgICBQYWdlT3ZlcmxheUNvbnRyb2xsZXIoUGFnZSYpOworCisgICAgR3JhcGhpY3NMYXllciYg
ZG9jdW1lbnRPdmVybGF5Um9vdExheWVyKCk7CisgICAgR3JhcGhpY3NMYXllciYgdmlld092ZXJs
YXlSb290TGF5ZXIoKTsKKworICAgIHZvaWQgaW5zdGFsbFBhZ2VPdmVybGF5KFBhc3NSZWZQdHI8
UGFnZU92ZXJsYXk+LCBQYWdlT3ZlcmxheTo6RmFkZU1vZGUpOworICAgIHZvaWQgdW5pbnN0YWxs
UGFnZU92ZXJsYXkoUGFnZU92ZXJsYXkqLCBQYWdlT3ZlcmxheTo6RmFkZU1vZGUpOworCisgICAg
dm9pZCBzZXRQYWdlT3ZlcmxheU5lZWRzRGlzcGxheShQYWdlT3ZlcmxheSYsIGNvbnN0IEludFJl
Y3QmKTsKKyAgICB2b2lkIHNldFBhZ2VPdmVybGF5T3BhY2l0eShQYWdlT3ZlcmxheSYsIGZsb2F0
KTsKKyAgICB2b2lkIGNsZWFyUGFnZU92ZXJsYXkoUGFnZU92ZXJsYXkmKTsKKyAgICBHcmFwaGlj
c0xheWVyJiBsYXllckZvck92ZXJsYXkoUGFnZU92ZXJsYXkmKSBjb25zdDsKKworICAgIHZvaWQg
d2lsbEF0dGFjaFJvb3RMYXllcigpOworCisgICAgdm9pZCBkaWRDaGFuZ2VWaWV3U2l6ZSgpOwor
ICAgIHZvaWQgZGlkQ2hhbmdlRG9jdW1lbnRTaXplKCk7CisgICAgdm9pZCBkaWRDaGFuZ2VTZXR0
aW5ncygpOworICAgIHZvaWQgZGlkQ2hhbmdlRGV2aWNlU2NhbGVGYWN0b3IoKTsKKyAgICB2b2lk
IGRpZENoYW5nZUV4cG9zZWRSZWN0KCk7CisgICAgdm9pZCBkaWRTY3JvbGxGcmFtZShGcmFtZSYp
OworCisgICAgdm9pZCBkaWRDaGFuZ2VPdmVybGF5RnJhbWUoUGFnZU92ZXJsYXkmKTsKKyAgICB2
b2lkIGRpZENoYW5nZU92ZXJsYXlCYWNrZ3JvdW5kQ29sb3IoUGFnZU92ZXJsYXkmKTsKKworICAg
IGludCBvdmVybGF5Q291bnQoKSBjb25zdCB7IHJldHVybiBtX292ZXJsYXlHcmFwaGljc0xheWVy
cy5zaXplKCk7IH0KKworICAgIGJvb2wgaGFuZGxlTW91c2VFdmVudChjb25zdCBQbGF0Zm9ybU1v
dXNlRXZlbnQmKTsKKworICAgIGJvb2wgY29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVTdHJpbmdW
YWx1ZUZvclBvaW50KFN0cmluZyBhdHRyaWJ1dGUsIEZsb2F0UG9pbnQsIFN0cmluZyYgdmFsdWUp
OworICAgIGJvb2wgY29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVCb29sVmFsdWVGb3JQb2ludChT
dHJpbmcgYXR0cmlidXRlLCBGbG9hdFBvaW50LCBib29sJiB2YWx1ZSk7CisgICAgVmVjdG9yPFN0
cmluZz4gY29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVzTmFtZXMoYm9vbCBwYXJhbWV0ZXJpemVk
TmFtZXMpOworCitwcml2YXRlOgorICAgIHZvaWQgY3JlYXRlUm9vdExheWVyc0lmTmVlZGVkKCk7
CisKKyAgICB2b2lkIHVwZGF0ZVNldHRpbmdzRm9yTGF5ZXIoR3JhcGhpY3NMYXllciYpOworICAg
IHZvaWQgdXBkYXRlRm9yY2VTeW5jaHJvbm91c1Njcm9sbExheWVyUG9zaXRpb25VcGRhdGVzKCk7
CisKKyAgICAvLyBHcmFwaGljc0xheWVyQ2xpZW50CisgICAgdmlydHVhbCB2b2lkIG5vdGlmeUZs
dXNoUmVxdWlyZWQoY29uc3QgR3JhcGhpY3NMYXllciopIG92ZXJyaWRlOworICAgIHZpcnR1YWwg
dm9pZCBwYWludENvbnRlbnRzKGNvbnN0IEdyYXBoaWNzTGF5ZXIqLCBHcmFwaGljc0NvbnRleHQm
LCBHcmFwaGljc0xheWVyUGFpbnRpbmdQaGFzZSwgY29uc3QgRmxvYXRSZWN0JiBjbGlwUmVjdCkg
b3ZlcnJpZGU7CisgICAgdmlydHVhbCBmbG9hdCBkZXZpY2VTY2FsZUZhY3RvcigpIGNvbnN0IG92
ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBzaG91bGRTa2lwTGF5ZXJJbkR1bXAoY29uc3QgR3Jh
cGhpY3NMYXllciopIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KKworICAgIHN0ZDo6
dW5pcXVlX3B0cjxHcmFwaGljc0xheWVyPiBtX2RvY3VtZW50T3ZlcmxheVJvb3RMYXllcjsKKyAg
ICBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NMYXllcj4gbV92aWV3T3ZlcmxheVJvb3RMYXllcjsK
KyAgICBib29sIG1faW5pdGlhbGl6ZWQ7CisKKyAgICBIYXNoTWFwPFBhZ2VPdmVybGF5Kiwgc3Rk
Ojp1bmlxdWVfcHRyPEdyYXBoaWNzTGF5ZXI+PiBtX292ZXJsYXlHcmFwaGljc0xheWVyczsKKyAg
ICBWZWN0b3I8UmVmUHRyPFBhZ2VPdmVybGF5Pj4gbV9wYWdlT3ZlcmxheXM7CisgICAgUGFnZSYg
bV9wYWdlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBQYWdlT3Zl
cmxheUNvbnRyb2xsZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NMYXllckNsaWVudC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NMYXllckNsaWVudC5oCmluZGV4IDhhNDgzMzMuLjI1OTIyY2IgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXJDbGll
bnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVy
Q2xpZW50LmgKQEAgLTI2LDYgKzI2LDggQEAKICNpZm5kZWYgR3JhcGhpY3NMYXllckNsaWVudF9o
CiAjZGVmaW5lIEdyYXBoaWNzTGF5ZXJDbGllbnRfaAogCisjaW5jbHVkZSA8d3RmL0ZvcndhcmQu
aD4KKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBGbG9hdFBvaW50OwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKaW5kZXggZDlkNTkzMy4uMTYzNzRkYyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCkBAIC0yMzIyLDcgKzIzMjIs
NyBAQCB2b2lkIFJlbmRlckxheWVyOjpzY3JvbGxUbyhpbnQgeCwgaW50IHkpCiAKICAgICBJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZFNjcm9sbExheWVyKCZmcmFtZSk7CiAgICAgaWYgKHNj
cm9sbHNPdmVyZmxvdygpKQotICAgICAgICBmcmFtZS5sb2FkZXIoKS5jbGllbnQoKS5kaWRDaGFu
Z2VTY3JvbGxPZmZzZXQoKTsKKyAgICAgICAgdmlldy5mcmFtZVZpZXcoKS5kaWRDaGFuZ2VTY3Jv
bGxPZmZzZXQoKTsKIAogICAgIHZpZXcuZnJhbWVWaWV3KCkucmVzdW1lVmlzaWJsZUltYWdlQW5p
bWF0aW9uc0luY2x1ZGluZ1N1YmZyYW1lcygpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAppbmRleCA0YmU0NjkxLi4xZjU5YjBh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3Np
dG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3Np
dG9yLmNwcApAQCAtNDUsNiArNDUsNyBAQAogI2luY2x1ZGUgIk1haW5GcmFtZS5oIgogI2luY2x1
ZGUgIk5vZGVMaXN0LmgiCiAjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlBhZ2VPdmVybGF5
Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIlJlbmRlckVtYmVkZGVkT2JqZWN0LmgiCiAjaW5jbHVk
ZSAiUmVuZGVyRmxvd1RocmVhZC5oIgogI2luY2x1ZGUgIlJlbmRlckZ1bGxTY3JlZW4uaCIKQEAg
LTY0Myw3ICs2NDQsOCBAQCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6dXBkYXRlQ29tcG9z
aXRpbmdMYXllcnNUaW1lckZpcmVkKFRpbWVyPFJlbmRlckxheWVyQwogCiBib29sIFJlbmRlckxh
eWVyQ29tcG9zaXRvcjo6aGFzQW55QWRkaXRpb25hbENvbXBvc2l0ZWRMYXllcnMoY29uc3QgUmVu
ZGVyTGF5ZXImIHJvb3RMYXllcikgY29uc3QKIHsKLSAgICByZXR1cm4gbV9jb21wb3NpdGVkTGF5
ZXJDb3VudCA+IChyb290TGF5ZXIuaXNDb21wb3NpdGVkKCkgPyAxIDogMCk7CisgICAgaW50IGxh
eWVyQ291bnQgPSBtX2NvbXBvc2l0ZWRMYXllckNvdW50ICsgbV9yZW5kZXJWaWV3LmZyYW1lKCku
cGFnZSgpLT5wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKS5vdmVybGF5Q291bnQoKTsKKyAgICByZXR1
cm4gbGF5ZXJDb3VudCA+IChyb290TGF5ZXIuaXNDb21wb3NpdGVkKCkgPyAxIDogMCk7CiB9CiAK
IHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpjYW5jZWxDb21wb3NpdGluZ0xheWVyVXBkYXRl
KCkKQEAgLTY2NSw3ICs2NjcsNyBAQCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6dXBkYXRl
Q29tcG9zaXRpbmdMYXllcnMoQ29tcG9zaXRpbmdVcGRhdGVUeXBlIHVwZGF0ZQogICAgIGlmICht
X3JlbmRlclZpZXcubmVlZHNMYXlvdXQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKG1f
Zm9yY2VDb21wb3NpdGluZ01vZGUgJiYgIW1fY29tcG9zaXRpbmcpCisgICAgaWYgKChtX2ZvcmNl
Q29tcG9zaXRpbmdNb2RlIHx8IG1fcmVuZGVyVmlldy5mcmFtZSgpLnBhZ2UoKS0+cGFnZU92ZXJs
YXlDb250cm9sbGVyKCkub3ZlcmxheUNvdW50KCkpICYmICFtX2NvbXBvc2l0aW5nKQogICAgICAg
ICBlbmFibGVDb21wb3NpdGluZ01vZGUodHJ1ZSk7CiAKICAgICBpZiAoIW1fcmVldmFsdWF0ZUNv
bXBvc2l0aW5nQWZ0ZXJMYXlvdXQgJiYgIW1fY29tcG9zaXRpbmcpCkBAIC03NDgsNyArNzUwLDcg
QEAgdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJzKENv
bXBvc2l0aW5nVXBkYXRlVHlwZSB1cGRhdGUKIAogICAgICAgICAvLyBIb3N0IHRoZSBkb2N1bWVu
dCBsYXllciBpbiB0aGUgUmVuZGVyVmlldydzIHJvb3QgbGF5ZXIuCiAgICAgICAgIGlmIChpc0Z1
bGxVcGRhdGUpIHsKLSAgICAgICAgICAgIGFwcGVuZE92ZXJsYXlMYXllcnMoY2hpbGRMaXN0KTsK
KyAgICAgICAgICAgIGFwcGVuZERvY3VtZW50T3ZlcmxheUxheWVycyhjaGlsZExpc3QpOwogICAg
ICAgICAgICAgLy8gRXZlbiB3aGVuIGNoaWxkTGlzdCBpcyBlbXB0eSwgZG9uJ3QgZHJvcCBvdXQg
b2YgY29tcG9zaXRpbmcgbW9kZSBpZiB0aGVyZSBhcmUKICAgICAgICAgICAgIC8vIGNvbXBvc2l0
ZWQgbGF5ZXJzIHRoYXQgd2UgZGlkbid0IGhpdCBpbiBvdXIgdHJhdmVyc2FsIChlLmcuIGJlY2F1
c2Ugb2YgdmlzaWJpbGl0eTpoaWRkZW4pLgogICAgICAgICAgICAgaWYgKGNoaWxkTGlzdC5pc0Vt
cHR5KCkgJiYgIWhhc0FueUFkZGl0aW9uYWxDb21wb3NpdGVkTGF5ZXJzKCp1cGRhdGVSb290KSkK
QEAgLTc4NCwxNSArNzg2LDE4IEBAIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVD
b21wb3NpdGluZ0xheWVycyhDb21wb3NpdGluZ1VwZGF0ZVR5cGUgdXBkYXRlCiAgICAgSW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uOjpsYXllclRyZWVEaWRDaGFuZ2UocGFnZSgpKTsKIH0KIAotdm9p
ZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmFwcGVuZE92ZXJsYXlMYXllcnMoVmVjdG9yPEdyYXBo
aWNzTGF5ZXIqPiYgY2hpbGRMaXN0KQordm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmFwcGVu
ZERvY3VtZW50T3ZlcmxheUxheWVycyhWZWN0b3I8R3JhcGhpY3NMYXllcio+JiBjaGlsZExpc3Qp
CiB7CiAgICAgRnJhbWUmIGZyYW1lID0gbV9yZW5kZXJWaWV3LmZyYW1lVmlldygpLmZyYW1lKCk7
CisgICAgaWYgKCFmcmFtZS5pc01haW5GcmFtZSgpKQorICAgICAgICByZXR1cm47CisKICAgICBQ
YWdlKiBwYWdlID0gZnJhbWUucGFnZSgpOwogICAgIGlmICghcGFnZSkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgaWYgKEdyYXBoaWNzTGF5ZXIqIG92ZXJsYXlMYXllciA9IHBhZ2UtPmNocm9tZSgp
LmNsaWVudCgpLmRvY3VtZW50T3ZlcmxheUxheWVyRm9yRnJhbWUoZnJhbWUpKQotICAgICAgICBj
aGlsZExpc3QuYXBwZW5kKG92ZXJsYXlMYXllcik7CisgICAgcGFnZS0+cGFnZU92ZXJsYXlDb250
cm9sbGVyKCkud2lsbEF0dGFjaFJvb3RMYXllcigpOworICAgIGNoaWxkTGlzdC5hcHBlbmQoJnBh
Z2UtPnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLmRvY3VtZW50T3ZlcmxheVJvb3RMYXllcigpKTsK
IH0KIAogdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmxheWVyQmVjYW1lTm9uQ29tcG9zaXRl
ZChjb25zdCBSZW5kZXJMYXllciYgbGF5ZXIpCkBAIC0zMzY2LDYgKzMzNzEsMTAgQEAgdm9pZCBS
ZW5kZXJMYXllckNvbXBvc2l0b3I6OmF0dGFjaFJvb3RMYXllcihSb290TGF5ZXJBdHRhY2htZW50
IGF0dGFjaG1lbnQpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgICAgICBwYWdl
LT5jaHJvbWUoKS5jbGllbnQoKS5hdHRhY2hSb290R3JhcGhpY3NMYXllcigmZnJhbWUsIHJvb3RH
cmFwaGljc0xheWVyKCkpOworICAgICAgICAgICAgaWYgKGZyYW1lLmlzTWFpbkZyYW1lKCkpIHsK
KyAgICAgICAgICAgICAgICBwYWdlLT5wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKS53aWxsQXR0YWNo
Um9vdExheWVyKCk7CisgICAgICAgICAgICAgICAgcGFnZS0+Y2hyb21lKCkuY2xpZW50KCkuYXR0
YWNoVmlld092ZXJsYXlHcmFwaGljc0xheWVyKCZmcmFtZSwgJnBhZ2UtPnBhZ2VPdmVybGF5Q29u
dHJvbGxlcigpLnZpZXdPdmVybGF5Um9vdExheWVyKCkpOworICAgICAgICAgICAgfQogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBSb290TGF5ZXJBdHRhY2hlZFZp
YUVuY2xvc2luZ0ZyYW1lOiB7CkBAIC0zNDEwLDYgKzM0MTksOCBAQCB2b2lkIFJlbmRlckxheWVy
Q29tcG9zaXRvcjo6ZGV0YWNoUm9vdExheWVyKCkKICAgICAgICAgICAgIHJldHVybjsKIAogICAg
ICAgICBwYWdlLT5jaHJvbWUoKS5jbGllbnQoKS5hdHRhY2hSb290R3JhcGhpY3NMYXllcigmZnJh
bWUsIDApOworICAgICAgICBpZiAoZnJhbWUuaXNNYWluRnJhbWUoKSkKKyAgICAgICAgICAgIHBh
Z2UtPmNocm9tZSgpLmNsaWVudCgpLmF0dGFjaFZpZXdPdmVybGF5R3JhcGhpY3NMYXllcigmZnJh
bWUsIDApOwogICAgIH0KICAgICBicmVhazsKICAgICBjYXNlIFJvb3RMYXllclVuYXR0YWNoZWQ6
CkBAIC0zNDQ0LDggKzM0NTUsMTEgQEAgdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJvb3RM
YXllckF0dGFjaG1lbnRDaGFuZ2VkKCkKICAgICBpZiAoUmVuZGVyTGF5ZXJCYWNraW5nKiBiYWNr
aW5nID0gbGF5ZXIgPyBsYXllci0+YmFja2luZygpIDogbnVsbHB0cikKICAgICAgICAgYmFja2lu
Zy0+dXBkYXRlRHJhd3NDb250ZW50KCk7CiAKLSAgICBpZiAoR3JhcGhpY3NMYXllciogb3Zlcmxh
eUxheWVyID0gcGFnZS0+Y2hyb21lKCkuY2xpZW50KCkuZG9jdW1lbnRPdmVybGF5TGF5ZXJGb3JG
cmFtZShmcmFtZSkpCi0gICAgICAgIG1fcm9vdENvbnRlbnRMYXllci0+YWRkQ2hpbGQob3Zlcmxh
eUxheWVyKTsKKyAgICBpZiAoIWZyYW1lLmlzTWFpbkZyYW1lKCkpCisgICAgICAgIHJldHVybjsK
KworICAgIHBhZ2UtPnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLndpbGxBdHRhY2hSb290TGF5ZXIo
KTsKKyAgICBtX3Jvb3RDb250ZW50TGF5ZXItPmFkZENoaWxkKCZwYWdlLT5wYWdlT3ZlcmxheUNv
bnRyb2xsZXIoKS5kb2N1bWVudE92ZXJsYXlSb290TGF5ZXIoKSk7CiB9CiAKIC8vIElGcmFtZXMg
YXJlIHNwZWNpYWwsIGJlY2F1c2Ugd2UgaG9vayBjb21wb3NpdGluZyBsYXllcnMgdG9nZXRoZXIg
YWNyb3NzIGlmcmFtZSBib3VuZGFyaWVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgKaW5kZXggN2JkMjQwYS4uZDlhODc0YiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuaApAQCAtMzYy
LDcgKzM2Miw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBsYXllckhhczNEQ29udGVudChjb25zdCBS
ZW5kZXJMYXllciYpIGNvbnN0OwogICAgIGJvb2wgaXNSdW5uaW5nQWNjZWxlcmF0ZWRUcmFuc2Zv
cm1BbmltYXRpb24oUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCYpIGNvbnN0OwogCi0gICAgdm9pZCBh
cHBlbmRPdmVybGF5TGF5ZXJzKFZlY3RvcjxHcmFwaGljc0xheWVyKj4mKTsKKyAgICB2b2lkIGFw
cGVuZERvY3VtZW50T3ZlcmxheUxheWVycyhWZWN0b3I8R3JhcGhpY3NMYXllcio+Jik7CiAgICAg
Ym9vbCBoYXNBbnlBZGRpdGlvbmFsQ29tcG9zaXRlZExheWVycyhjb25zdCBSZW5kZXJMYXllciYg
cm9vdExheWVyKSBjb25zdDsKIAogICAgIHZvaWQgZW5zdXJlUm9vdExheWVyKCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaCBi
L1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oCmluZGV4
IDFkNDgyODEuLjcyNzBjZTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVT
dXBwb3J0L1dlYkNocm9tZUNsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVT
dXBwb3J0L1dlYkNocm9tZUNsaWVudC5oCkBAIC0xNjMsNiArMTYzLDcgQEAgcHVibGljOgogICAg
IHZpcnR1YWwgYm9vbCBzaG91bGRQYWludEVudGlyZUNvbnRlbnRzKCkgY29uc3Qgb3ZlcnJpZGU7
CiAKICAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoUm9vdEdyYXBoaWNzTGF5ZXIoV2ViQ29yZTo6RnJh
bWUqLCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lk
IGF0dGFjaFZpZXdPdmVybGF5R3JhcGhpY3NMYXllcihXZWJDb3JlOjpGcmFtZSosIFdlYkNvcmU6
OkdyYXBoaWNzTGF5ZXIqKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNPbmVT
aG90RHJhd2luZ1N5bmNocm9uaXphdGlvbigpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBz
Y2hlZHVsZUNvbXBvc2l0aW5nTGF5ZXJGbHVzaCgpIG92ZXJyaWRlOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQubW0gYi9Tb3Vy
Y2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQubW0KaW5kZXggZTFk
YzEwZC4uNDYwNjMxMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBv
cnQvV2ViQ2hyb21lQ2xpZW50Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBw
b3J0L1dlYkNocm9tZUNsaWVudC5tbQpAQCAtOTI0LDYgKzkyNCwxMSBAQCB2b2lkIFdlYkNocm9t
ZUNsaWVudDo6YXR0YWNoUm9vdEdyYXBoaWNzTGF5ZXIoRnJhbWUqIGZyYW1lLCBHcmFwaGljc0xh
eWVyKiBncmFwaAogICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiB9CiAKK3ZvaWQgV2Vi
Q2hyb21lQ2xpZW50OjphdHRhY2hWaWV3T3ZlcmxheUdyYXBoaWNzTGF5ZXIoRnJhbWUqLCBHcmFw
aGljc0xheWVyKikKK3sKKyAgICAvLyBGSVhNRTogSWYgd2Ugd2FudCB2aWV3LXJlbGF0aXZlIHBh
Z2Ugb3ZlcmxheXMgaW4gV2ViS2l0MSwgdGhpcyB3b3VsZCBiZSB0aGUgcGxhY2UgdG8gaG9vayB0
aGVtIHVwLgorfQorCiB2b2lkIFdlYkNocm9tZUNsaWVudDo6c2V0TmVlZHNPbmVTaG90RHJhd2lu
Z1N5bmNocm9uaXphdGlvbigpCiB7CiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xp
ZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVu
dC5jcHAKaW5kZXggYTljMGIwYS4uNWZiMTc5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC93
aW4vV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwCkBAIC03NTIsNiArNzUyLDEx
IEBAIHZvaWQgV2ViQ2hyb21lQ2xpZW50OjphdHRhY2hSb290R3JhcGhpY3NMYXllcihGcmFtZSog
ZnJhbWUsIEdyYXBoaWNzTGF5ZXIqIGdyYXBoCiAgICAgbV93ZWJWaWV3LT5zZXRSb290Q2hpbGRM
YXllcihncmFwaGljc0xheWVyKTsKIH0KIAordm9pZCBXZWJDaHJvbWVDbGllbnQ6OmF0dGFjaFZp
ZXdPdmVybGF5R3JhcGhpY3NMYXllcihGcmFtZSosIEdyYXBoaWNzTGF5ZXIqKQoreworICAgIC8v
IEZJWE1FOiBJZiB3ZSB3YW50IHZpZXctcmVsYXRpdmUgcGFnZSBvdmVybGF5cyBpbiBXZWJLaXQx
IG9uIFdpbmRvd3MsIHRoaXMgd291bGQgYmUgdGhlIHBsYWNlIHRvIGhvb2sgdGhlbSB1cC4KK30K
Kwogdm9pZCBXZWJDaHJvbWVDbGllbnQ6OnNjaGVkdWxlQ29tcG9zaXRpbmdMYXllckZsdXNoKCkK
IHsKICAgICBtX3dlYlZpZXctPmZsdXNoUGVuZGluZ0dyYXBoaWNzTGF5ZXJDaGFuZ2VzU29vbigp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21l
Q2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGll
bnQuaAppbmRleCAzY2Q2MjgxLi5jZDc5MmM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3dp
bi9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L3dp
bi9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaApAQCAtMTMwLDYgKzEzMCw3IEBAIHB1
YmxpYzoKIAogICAgIC8vIFBhc3MgMCBhcyB0aGUgR3JhcGhpY3NMYXllciB0byBkZXRhdGNoIHRo
ZSByb290IGxheWVyLgogICAgIHZpcnR1YWwgdm9pZCBhdHRhY2hSb290R3JhcGhpY3NMYXllcihX
ZWJDb3JlOjpGcmFtZSosIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKTsKKyAgICB2aXJ0dWFsIHZv
aWQgYXR0YWNoVmlld092ZXJsYXlHcmFwaGljc0xheWVyKFdlYkNvcmU6OkZyYW1lKiwgV2ViQ29y
ZTo6R3JhcGhpY3NMYXllciopIG92ZXJyaWRlOwogICAgIC8vIFNldHMgYSBmbGFnIHRvIHNwZWNp
ZnkgdGhhdCB0aGUgbmV4dCB0aW1lIGNvbnRlbnQgaXMgZHJhd24gdG8gdGhlIHdpbmRvdywKICAg
ICAvLyB0aGUgY2hhbmdlcyBhcHBlYXIgb24gdGhlIHNjcmVlbiBpbiBzeW5jaHJvbnkgd2l0aCB1
cGRhdGVzIHRvIEdyYXBoaWNzTGF5ZXJzLgogICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc09uZVNo
b3REcmF3aW5nU3luY2hyb25pemF0aW9uKCkgeyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJLaXQyL0NNYWtlTGlzdHMudHh0CmluZGV4IDZi
ZGM1OWQuLjRhNDY1NDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NNYWtlTGlzdHMudHh0
CisrKyBiL1NvdXJjZS9XZWJLaXQyL0NNYWtlTGlzdHMudHh0CkBAIC01NDMsOCArNTQzLDYgQEAg
c2V0KFdlYktpdDJfU09VUkNFUwogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxl
ci5jcHAKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlSG9zdC5jcHAKICAgICBXZWJQ
cm9jZXNzL1dlYlBhZ2UvUGFnZUJhbm5lci5jcHAKLSAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvUGFn
ZU92ZXJsYXkuY3BwCi0gICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1BhZ2VPdmVybGF5Q29udHJvbGxl
ci5jcHAKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvVGFwSGlnaGxpZ2h0Q29udHJvbGxlci5jcHAK
ICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViQmFja0ZvcndhcmRMaXN0UHJveHkuY3BwCiAgICAg
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkNvbnRleHRNZW51LmNwcApAQCAtNTU1LDYgKzU1Myw3IEBA
IHNldChXZWJLaXQyX1NPVVJDRVMKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViT3BlblBhbmVs
UmVzdWx0TGlzdGVuZXIuY3BwCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCiAg
ICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VHcm91cFByb3h5LmNwcAorICAgIFdlYlByb2Nl
c3MvV2ViUGFnZS9XZWJQYWdlT3ZlcmxheS5jcHAKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvVmlz
aXRlZExpbmtUYWJsZUNvbnRyb2xsZXIuY3BwCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlVu
ZG9TdGVwLmNwcAogKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCmluZGV4IGQwYTkyZjkuLjJkN2VjM2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTMwNyw4ICszMDcsNiBA
QAogCQkxQTkwQzFFRTEyNjRGRDUwMDAzRTQ0RDQgLyogV2ViRmluZE9wdGlvbnMuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBOTBDMUVEMTI2NEZENTAw
MDNFNDRENCAvKiBXZWJGaW5kT3B0aW9ucy5oICovOyB9OwogCQkxQTkwQzFGNDEyNjRGRDcxMDAz
RTQ0RDQgLyogRmluZENvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDFBOTBDMUYyMTI2NEZENzEwMDNFNDRENCAvKiBGaW5kQ29udHJvbGxl
ci5oICovOyB9OwogCQkxQTkwQzFGNTEyNjRGRDcxMDAzRTQ0RDQgLyogRmluZENvbnRyb2xsZXIu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE5MEMx
RjMxMjY0RkQ3MTAwM0U0NEQ0IC8qIEZpbmRDb250cm9sbGVyLmNwcCAqLzsgfTsKLQkJMUE5MEMy
MzcxMjY1MDcxNzAwM0U0NEQ0IC8qIFBhZ2VPdmVybGF5LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTkwQzIzNTEyNjUwNzE3MDAzRTQ0RDQgLyogUGFn
ZU92ZXJsYXkuaCAqLzsgfTsKLQkJMUE5MEMyMzgxMjY1MDcxNzAwM0U0NEQ0IC8qIFBhZ2VPdmVy
bGF5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFB
OTBDMjM2MTI2NTA3MTcwMDNFNDRENCAvKiBQYWdlT3ZlcmxheS5jcHAgKi87IH07CiAJCTFBOTEw
MDcxMTI2Njc1QzQwMDE4NDJGNSAvKiBGaW5kSW5kaWNhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTkxMDA2RjEyNjY3NUMzMDAxODQyRjUgLyog
RmluZEluZGljYXRvci5oICovOyB9OwogCQkxQTkxMDA3MjEyNjY3NUM0MDAxODQyRjUgLyogRmlu
ZEluZGljYXRvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAxQTkxMDA3MDEyNjY3NUM0MDAxODQyRjUgLyogRmluZEluZGljYXRvci5jcHAgKi87IH07
CiAJCTFBOTJEQzExMTJGOEJBNDYwMDE3QUY2NSAvKiBMYXllclRyZWVDb250ZXh0LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTkyREMxMDEyRjhCQTQ2
MDAxN0FGNjUgLyogTGF5ZXJUcmVlQ29udGV4dC5oICovOyB9OwpAQCAtNTY4LDggKzU2Niw2IEBA
CiAJCTI5RDU1REYyMTYxQkY5RjEwMDMxQTJFMyAvKiBXZWJQYWdlR3JvdXBQcm94eU1lc3NhZ2Vz
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyOUQ1NURG
MDE2MUJGOUYxMDAzMUEyRTMgLyogV2ViUGFnZUdyb3VwUHJveHlNZXNzYWdlcy5oICovOyB9Owog
CQkyRDEyNUM1RTE4NTdFQTA1MDAzQkEzQ0IgLyogVmlld0dlc3R1cmVDb250cm9sbGVyLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRDEyNUM1QzE4NTdF
QTA1MDAzQkEzQ0IgLyogVmlld0dlc3R1cmVDb250cm9sbGVyLmggKi87IH07CiAJCTJEMTI1QzVG
MTg1N0VBMDUwMDNCQTNDQiAvKiBWaWV3R2VzdHVyZUNvbnRyb2xsZXJNYWMubW0gaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRDEyNUM1RDE4NTdFQTA1MDAz
QkEzQ0IgLyogVmlld0dlc3R1cmVDb250cm9sbGVyTWFjLm1tICovOyB9OwotCQkyRDE0MEVBRjE4
RjM3QkUwMDA1RTc1QTAgLyogUGFnZU92ZXJsYXlDb250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJEMTQwRUFEMThGMzdCRTAwMDVFNzVB
MCAvKiBQYWdlT3ZlcmxheUNvbnRyb2xsZXIuY3BwICovOyB9OwotCQkyRDE0MEVCMDE4RjM3QkUw
MDA1RTc1QTAgLyogUGFnZU92ZXJsYXlDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRDE0MEVBRTE4RjM3QkUwMDA1RTc1QTAgLyogUGFn
ZU92ZXJsYXlDb250cm9sbGVyLmggKi87IH07CiAJCTJEMUI1RDVEMTg1ODY5QzgwMDZDNjU5NiAv
KiBWaWV3R2VzdHVyZUNvbnRyb2xsZXJNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkQxQjVENUIxODU4NjlDODAwNkM2NTk2
IC8qIFZpZXdHZXN0dXJlQ29udHJvbGxlck1lc3NhZ2VSZWNlaXZlci5jcHAgKi87IH07CiAJCTJE
MUI1RDVFMTg1ODY5QzgwMDZDNjU5NiAvKiBWaWV3R2VzdHVyZUNvbnRyb2xsZXJNZXNzYWdlcy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkQxQjVENUMx
ODU4NjlDODAwNkM2NTk2IC8qIFZpZXdHZXN0dXJlQ29udHJvbGxlck1lc3NhZ2VzLmggKi87IH07
CiAJCTJEMjhGM0U0MTg4NUNDQzEwMDRCOUVBRSAvKiBXZWJDaHJvbWVDbGllbnRJT1MubW0gaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRDI4RjNFMDE4ODVD
Q0MxMDA0QjlFQUUgLyogV2ViQ2hyb21lQ2xpZW50SU9TLm1tICovOyB9OwpAQCAtNTg2LDYgKzU4
Miw4IEBACiAJCTJENDI5QkZEMTcyMUUyQzcwMEVDNjgxRiAvKiBQREZQbHVnaW5QYXNzd29yZEZp
ZWxkLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkQ0
MjlCRkIxNzIxRTJCQTAwRUM2ODFGIC8qIFBERlBsdWdpblBhc3N3b3JkRmllbGQubW0gKi87IH07
CiAJCTJENDdCNTZDMTgxMDcxNEUwMDNBM0FFRSAvKiBSZW1vdGVMYXllckJhY2tpbmdTdG9yZS5t
bSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJENDdCNTZB
MTgxMDcxNEUwMDNBM0FFRSAvKiBSZW1vdGVMYXllckJhY2tpbmdTdG9yZS5tbSAqLzsgfTsKIAkJ
MkQ0N0I1NkQxODEwNzE0RTAwM0EzQUVFIC8qIFJlbW90ZUxheWVyQmFja2luZ1N0b3JlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRDQ3QjU2QjE4MTA3
MTRFMDAzQTNBRUUgLyogUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmUuaCAqLzsgfTsKKwkJMkQ1QzlE
MDUxOUM4MUQ4RjAwQjNDNUMxIC8qIFdlYlBhZ2VPdmVybGF5LmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJENUM5RDAzMTlDODFEOEYwMEIzQzVDMSAv
KiBXZWJQYWdlT3ZlcmxheS5jcHAgKi87IH07CisJCTJENUM5RDA2MTlDODFEOEYwMEIzQzVDMSAv
KiBXZWJQYWdlT3ZlcmxheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMkQ1QzlEMDQxOUM4MUQ4RjAwQjNDNUMxIC8qIFdlYlBhZ2VPdmVybGF5LmggKi87
IH07CiAJCTJENkFCNTQxMTkyQjFDNEEwMDNBOUZEMSAvKiBXS1BERlBhZ2VOdW1iZXJJbmRpY2F0
b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJENkFC
NTNGMTkyQjFDNEEwMDNBOUZEMSAvKiBXS1BERlBhZ2VOdW1iZXJJbmRpY2F0b3IuaCAqLzsgfTsK
IAkJMkQ2QUI1NDIxOTJCMUM0QTAwM0E5RkQxIC8qIFdLUERGUGFnZU51bWJlckluZGljYXRvci5t
bSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJENkFCNTQw
MTkyQjFDNEEwMDNBOUZEMSAvKiBXS1BERlBhZ2VOdW1iZXJJbmRpY2F0b3IubW0gKi87IH07CiAJ
CTJENkIzNzFCMThBOTY3QUQwMDQyQUU4MCAvKiBfV0tUaHVtYm5haWxWaWV3LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRDZCMzcxOTE4QTk2N0FEMDA0
MkFFODAgLyogX1dLVGh1bWJuYWlsVmlldy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CkBAIC0yMjcxLDggKzIyNjksNiBAQAogCQkxQTkwQzFFRDEyNjRG
RDUwMDAzRTQ0RDQgLyogV2ViRmluZE9wdGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gV2ViRmluZE9wdGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MUE5MEMxRjIxMjY0RkQ3MTAwM0U0NEQ0IC8qIEZpbmRDb250cm9sbGVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZpbmRDb250cm9sbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTFBOTBDMUYzMTI2NEZENzEwMDNFNDRENCAvKiBGaW5kQ29udHJvbGxlci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGaW5kQ29udHJvbGxlci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTFBOTBDMjM1MTI2NTA3MTcwMDNFNDRE
NCAvKiBQYWdlT3ZlcmxheS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQYWdl
T3ZlcmxheS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxQTkwQzIzNjEyNjUwNzE3
MDAzRTQ0RDQgLyogUGFnZU92ZXJsYXkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gUGFnZU92ZXJsYXkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkx
QTkxMDA2RjEyNjY3NUMzMDAxODQyRjUgLyogRmluZEluZGljYXRvci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBGaW5kSW5kaWNhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTFBOTEwMDcwMTI2Njc1QzQwMDE4NDJGNSAvKiBGaW5kSW5kaWNhdG9yLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZpbmRJbmRpY2F0b3IuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQTkyREMxMDEyRjhCQTQ2MDAxN0FGNjUgLyog
TGF5ZXJUcmVlQ29udGV4dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMYXll
clRyZWVDb250ZXh0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNTU4LDggKzI1
NTQsNiBAQAogCQkyOUQ1NURGMDE2MUJGOUYxMDAzMUEyRTMgLyogV2ViUGFnZUdyb3VwUHJveHlN
ZXNzYWdlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJQYWdlR3JvdXBQ
cm94eU1lc3NhZ2VzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJEMTI1QzVDMTg1
N0VBMDUwMDNCQTNDQiAvKiBWaWV3R2VzdHVyZUNvbnRyb2xsZXIuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gVmlld0dlc3R1cmVDb250cm9sbGVyLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTJEMTI1QzVEMTg1N0VBMDUwMDNCQTNDQiAvKiBWaWV3R2VzdHVyZUNv
bnRyb2xsZXJNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBW
aWV3R2VzdHVyZUNvbnRyb2xsZXJNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CTJEMTQwRUFEMThGMzdCRTAwMDVFNzVBMCAvKiBQYWdlT3ZlcmxheUNvbnRyb2xsZXIuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUGFnZU92ZXJsYXlDb250cm9sbGVy
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMkQxNDBFQUUxOEYzN0JFMDAwNUU3
NUEwIC8qIFBhZ2VPdmVybGF5Q29udHJvbGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBQYWdlT3ZlcmxheUNvbnRyb2xsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMkQxQjVENUExODU4NjU5OTAwNkM2NTk2IC8qIFZpZXdHZXN0dXJlQ29udHJvbGxlci5t
ZXNzYWdlcy5pbiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHRleHQ7IHBhdGggPSBWaWV3R2VzdHVyZUNvbnRyb2xsZXIubWVzc2FnZXMuaW47IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJEMUI1RDVCMTg1ODY5QzgwMDZDNjU5NiAvKiBWaWV3
R2VzdHVyZUNvbnRyb2xsZXJNZXNzYWdlUmVjZWl2ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gVmlld0dlc3R1cmVDb250cm9sbGVyTWVzc2FnZVJlY2VpdmVyLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkQxQjVENUMxODU4NjlDODAwNkM2NTk2
IC8qIFZpZXdHZXN0dXJlQ29udHJvbGxlck1lc3NhZ2VzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFZpZXdHZXN0dXJlQ29udHJvbGxlck1lc3NhZ2VzLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC0yNTgyLDYgKzI1NzYsOCBAQAogCQkyRDQyOUJGQjE3MjFFMkJB
MDBFQzY4MUYgLyogUERGUGx1Z2luUGFzc3dvcmRGaWVsZC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLm9iamNwcDsgbmFtZSA9IFBERlBsdWdpblBhc3N3b3JkRmllbGQubW07IHBhdGggPSBQ
REYvUERGUGx1Z2luUGFzc3dvcmRGaWVsZC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMkQ0N0I1NkExODEwNzE0RTAwM0EzQUVFIC8qIFJlbW90ZUxheWVyQmFja2luZ1N0b3JlLm1t
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gUmVtb3RlTGF5ZXJCYWNr
aW5nU3RvcmUubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJENDdCNTZCMTgxMDcx
NEUwMDNBM0FFRSAvKiBSZW1vdGVMYXllckJhY2tpbmdTdG9yZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBSZW1vdGVMYXllckJhY2tpbmdTdG9yZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkyRDVDOUQwMzE5QzgxRDhGMDBCM0M1QzEgLyogV2ViUGFnZU92ZXJs
YXkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViUGFnZU92ZXJs
YXkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyRDVDOUQwNDE5QzgxRDhGMDBC
M0M1QzEgLyogV2ViUGFnZU92ZXJsYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gV2ViUGFnZU92ZXJsYXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkQ2QUI1
M0YxOTJCMUM0QTAwM0E5RkQxIC8qIFdLUERGUGFnZU51bWJlckluZGljYXRvci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBXS1BERlBhZ2VOdW1iZXJJbmRpY2F0b3IuaDsgcGF0
aCA9IGlvcy9XS1BERlBhZ2VOdW1iZXJJbmRpY2F0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMkQ2QUI1NDAxOTJCMUM0QTAwM0E5RkQxIC8qIFdLUERGUGFnZU51bWJlckluZGlj
YXRvci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IFdLUERGUGFn
ZU51bWJlckluZGljYXRvci5tbTsgcGF0aCA9IGlvcy9XS1BERlBhZ2VOdW1iZXJJbmRpY2F0b3Iu
bW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJENkIzNzE5MThBOTY3QUQwMDQyQUU4
MCAvKiBfV0tUaHVtYm5haWxWaWV3LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IF9XS1RodW1ibmFpbFZpZXcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTU3MDEs
MTAgKzU2OTcsOCBAQAogCQkJCTFBOTBDMUYyMTI2NEZENzEwMDNFNDRENCAvKiBGaW5kQ29udHJv
bGxlci5oICovLAogCQkJCTdDMzg3NDMzMTcyRjU2MTUwMDFCRDg4QSAvKiBQYWdlQmFubmVyLmNw
cCAqLywKIAkJCQk3Q0Y0N0ZGOTE3Mjc1QzU3MDA4QUNCOTEgLyogUGFnZUJhbm5lci5oICovLAot
CQkJCTFBOTBDMjM2MTI2NTA3MTcwMDNFNDRENCAvKiBQYWdlT3ZlcmxheS5jcHAgKi8sCi0JCQkJ
MUE5MEMyMzUxMjY1MDcxNzAwM0U0NEQ0IC8qIFBhZ2VPdmVybGF5LmggKi8sCi0JCQkJMkQxNDBF
QUQxOEYzN0JFMDAwNUU3NUEwIC8qIFBhZ2VPdmVybGF5Q29udHJvbGxlci5jcHAgKi8sCi0JCQkJ
MkQxNDBFQUUxOEYzN0JFMDAwNUU3NUEwIC8qIFBhZ2VPdmVybGF5Q29udHJvbGxlci5oICovLAor
CQkJCTJENUM5RDAzMTlDODFEOEYwMEIzQzVDMSAvKiBXZWJQYWdlT3ZlcmxheS5jcHAgKi8sCisJ
CQkJMkQ1QzlEMDQxOUM4MUQ4RjAwQjNDNUMxIC8qIFdlYlBhZ2VPdmVybGF5LmggKi8sCiAJCQkJ
NTE5MkQ1NzExOTYxRkEyRjAwQ0QxOUFBIC8qIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIuaCAq
LywKIAkJCQkyRDgxOUI5OTE4NjI3NUIzMDAxRjAzRDEgLyogVmlld0dlc3R1cmVHZW9tZXRyeUNv
bGxlY3Rvci5jcHAgKi8sCiAJCQkJMkQ4MTlCOUExODYyNzVCMzAwMUYwM0QxIC8qIFZpZXdHZXN0
dXJlR2VvbWV0cnlDb2xsZWN0b3IuaCAqLywKQEAgLTcwNDYsNiArNzA0MCw3IEBACiAJCQkJN0M4
NUZEODAxOTM0MTY2NTAwMDE3N0M0IC8qIFdlYlByZWZlcmVuY2VzS2V5cy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJNTEyRjU4OTcxMkE4ODM4ODAwNjI5NTMwIC8qIEF1dGhlbnRpY2F0aW9uQ2hhbGxl
bmdlUHJveHkuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBNDQ1QjlGMTg0RDVGQjUwMDRCMzQxNCAv
KiBXS0NvbnRleHRJbmplY3RlZEJ1bmRsZUNsaWVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMkQ1
QzlEMDYxOUM4MUQ4RjAwQjNDNUMxIC8qIFdlYlBhZ2VPdmVybGF5LmggaW4gSGVhZGVycyAqLywK
IAkJCQk1MTJGNTg5OTEyQTg4Mzg4MDA2Mjk1MzAgLyogQXV0aGVudGljYXRpb25EZWNpc2lvbkxp
c3RlbmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MThFOEVGOTE2QjIwOTFDMDBFOTE0MjkgLyog
QXV0aGVudGljYXRpb25NYW5hZ2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTJGNThBMzEyQTg4
M0FEMDA2Mjk1MzAgLyogQXV0aGVudGljYXRpb25NYW5hZ2VyTWVzc2FnZXMuaCBpbiBIZWFkZXJz
ICovLApAQCAtNzE1Myw3ICs3MTQ4LDYgQEAKIAkJCQkxQUU1MkY5MjE5MjAxREE3MDBBMUZBMzcg
LyogQVBJQ29udGV4dENvbmZpZ3VyYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTdDMzYxRDcz
MTkyN0ZBMzYwMDM2QTU5RCAvKiBXZWJTY3JpcHRNZXNzYWdlSGFuZGxlci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJRTEwNUZFNTQxOEQ3QjlERTAwOEY1N0E4IC8qIEVkaXRpbmdSYW5nZS5oIGluIEhl
YWRlcnMgKi8sCi0JCQkJMkQxNDBFQjAxOEYzN0JFMDAwNUU3NUEwIC8qIFBhZ2VPdmVybGF5Q29u
dHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxNzc1M0YxMThCQUJGMDAwN0Q5RTlBIC8q
IEdlbmVyaWNDYWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzc5QTg3MzYxOEJCRkE0MzAw
NTg4QUYyIC8qIF9XS0FjdGl2YXRlZEVsZW1lbnRJbmZvSW50ZXJuYWwuaCBpbiBIZWFkZXJzICov
LAogCQkJCUJDMDZGNDJGMTJEQkI5QjYwMDJENzhERSAvKiBHZW9sb2NhdGlvblBlcm1pc3Npb25S
ZXF1ZXN0TWFuYWdlci5oIGluIEhlYWRlcnMgKi8sCkBAIC03Mjc2LDcgKzcyNzAsNiBAQAogCQkJ
CTFBNUIxQzUxMTg5ODYwNkYwMDRGQ0Y5QiAvKiBXS05hdmlnYXRpb24uaCBpbiBIZWFkZXJzICov
LAogCQkJCTdDRjQ3RkZCMTcyNzVDNTcwMDhBQ0I5MSAvKiBQYWdlQmFubmVyLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlCQzZFREFBNjExMTI3MUM2MDBFNzY3OEIgLyogUGFnZUNsaWVudC5oIGluIEhl
YWRlcnMgKi8sCi0JCQkJMUE5MEMyMzcxMjY1MDcxNzAwM0U0NEQ0IC8qIFBhZ2VPdmVybGF5Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQlDNTc0QTU4MTEyRTY2NjgxMDAyREZFOTggLyogUGFzdGVib2Fy
ZFR5cGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMTk1ODJEMzE1M0NCRkQ3MDBCNjA4NzUgLyog
UERGS2l0SW1wb3J0cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFFMDBENEYxODJENkY1MDAwMDg3
REQ3IC8qIFdLQnJvd3NpbmdDb250ZXh0SGFuZGxlSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLApA
QCAtODkyOCw3ICs4OTIxLDYgQEAKIAkJCQk1MUUzNTFGNTE4MEY1Qzc1MDBFNTNCRTkgLyogV2Vi
SURCRmFjdG9yeUJhY2tlbmQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0MzODc0MzQxNzJGNTYx
NTAwMUJEODhBIC8qIFBhZ2VCYW5uZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0M2RDM3RkMx
NzJGNTU1RjAwOUQyODQ3IC8qIFBhZ2VCYW5uZXJNYWMubW0gaW4gU291cmNlcyAqLywKLQkJCQkx
QTkwQzIzODEyNjUwNzE3MDAzRTQ0RDQgLyogUGFnZU92ZXJsYXkuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQzU3NEE1ODIxMkU2NjY4MTAwMkRGRTk4IC8qIFBhc3RlYm9hcmRUeXBlcy5tbSBpbiBT
b3VyY2VzICovLAogCQkJCUUxOTU4MkQ2MTUzQ0MwNTQwMEI2MDg3NSAvKiBQREZLaXRJbXBvcnRz
Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMkQ4NzBEMTAxNjIzNEZGRTAwMEEzRjIwIC8qIFBERlBs
dWdpbi5tbSBpbiBTb3VyY2VzICovLApAQCAtOTEyOCw3ICs5MTIwLDYgQEAKIAkJCQlBNTQyOTNB
NTE5NUE0M0REMDAyNzgyQzcgLyogV0tJbnNwZWN0b3JOb2RlU2VhcmNoR2VzdHVyZVJlY29nbml6
ZXIubW0gaW4gU291cmNlcyAqLywKIAkJCQlDMDMzN0RBRTEyN0EyNEZFMDA4RkY0RjQgLyogV2Vi
RXZlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkMwMzJEQkExMEY0MzgwRjAwNThDMTVBIC8q
IFdlYkV2ZW50Q29udmVyc2lvbi5jcHAgaW4gU291cmNlcyAqLywKLQkJCQkyRDE0MEVBRjE4RjM3
QkUwMDA1RTc1QTAgLyogUGFnZU92ZXJsYXlDb250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUJDMTExQjVFMTEyRjYyOTgwMDMzN0JBQiAvKiBXZWJFdmVudEZhY3RvcnkubW0gaW4gU291
cmNlcyAqLywKIAkJCQlBMTE4QTlFRTE5MDdBRDZGMDBGN0M5MkIgLyogUXVpY2tMb29rRG9jdW1l
bnREYXRhLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBM0REMUZEMTI1RTU5RjMwMDQ1MTVFNiAv
KiBXZWJGaW5kQ2xpZW50LmNwcCBpbiBTb3VyY2VzICovLApAQCAtOTIxMiw2ICs5MjAzLDcgQEAK
IAkJCQlDMDZDNjA5NTEyNEMxNDRCMDAwMTY4MkYgLyogV2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVy
cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDNTlDNEE1ODE4QjgxMTc0MDA3QkRDQjYgLyogQXNz
aXN0ZWROb2RlSW5mb3JtYXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM3QjYyMDcxMjlB
MEE2NzAwRDE3NEE0IC8qIFdlYlBhZ2VHcm91cC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkyRDVD
OUQwNTE5QzgxRDhGMDBCM0M1QzEgLyogV2ViUGFnZU92ZXJsYXkuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQkM3QjYyNTMxMkE0M0M5NjAwRDE3NEE0IC8qIFdlYlBhZ2VHcm91cERhdGEuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQkM3QjYyMTYxMkE0MjE5QTAwRDE3NEE0IC8qIFdlYlBhZ2VHcm91
cFByb3h5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTI5RDU1REYxMTYxQkY5RjEwMDMxQTJFMyAv
KiBXZWJQYWdlR3JvdXBQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2Mv
V0tCdW5kbGVBUElDYXN0LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0FQSS9jL1dLQnVuZGxlQVBJQ2FzdC5oCmluZGV4IGU2MzU0MDguLjBkNWI3YzcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tC
dW5kbGVBUElDYXN0LmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvYy9XS0J1bmRsZUFQSUNhc3QuaApAQCAtNDksMTEgKzQ5LDExIEBAIGNsYXNzIElu
amVjdGVkQnVuZGxlTm9kZUhhbmRsZTsKIGNsYXNzIEluamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGU7
CiBjbGFzcyBJbmplY3RlZEJ1bmRsZVNjcmlwdFdvcmxkOwogY2xhc3MgUGFnZUJhbm5lcjsKLWNs
YXNzIFBhZ2VPdmVybGF5OwogY2xhc3MgV2ViRnJhbWU7CiBjbGFzcyBXZWJJbnNwZWN0b3I7CiBj
bGFzcyBXZWJQYWdlOwogY2xhc3MgV2ViUGFnZUdyb3VwUHJveHk7CitjbGFzcyBXZWJQYWdlT3Zl
cmxheTsKIAogV0tfQUREX0FQSV9NQVBQSU5HKFdLQnVuZGxlQmFja0ZvcndhcmRMaXN0SXRlbVJl
ZiwgSW5qZWN0ZWRCdW5kbGVCYWNrRm9yd2FyZExpc3RJdGVtKQogV0tfQUREX0FQSV9NQVBQSU5H
KFdLQnVuZGxlQmFja0ZvcndhcmRMaXN0UmVmLCBJbmplY3RlZEJ1bmRsZUJhY2tGb3J3YXJkTGlz
dCkKQEAgLTY2LDcgKzY2LDcgQEAgV0tfQUREX0FQSV9NQVBQSU5HKFdLQnVuZGxlTmF2aWdhdGlv
bkFjdGlvblJlZiwgSW5qZWN0ZWRCdW5kbGVOYXZpZ2F0aW9uQWN0aW9uKQogV0tfQUREX0FQSV9N
QVBQSU5HKFdLQnVuZGxlTm9kZUhhbmRsZVJlZiwgSW5qZWN0ZWRCdW5kbGVOb2RlSGFuZGxlKQog
V0tfQUREX0FQSV9NQVBQSU5HKFdLQnVuZGxlUGFnZUJhbm5lclJlZiwgUGFnZUJhbm5lcikKIFdL
X0FERF9BUElfTUFQUElORyhXS0J1bmRsZVBhZ2VHcm91cFJlZiwgV2ViUGFnZUdyb3VwUHJveHkp
Ci1XS19BRERfQVBJX01BUFBJTkcoV0tCdW5kbGVQYWdlT3ZlcmxheVJlZiwgUGFnZU92ZXJsYXkp
CitXS19BRERfQVBJX01BUFBJTkcoV0tCdW5kbGVQYWdlT3ZlcmxheVJlZiwgV2ViUGFnZU92ZXJs
YXkpCiBXS19BRERfQVBJX01BUFBJTkcoV0tCdW5kbGVQYWdlUmVmLCBXZWJQYWdlKQogV0tfQURE
X0FQSV9NQVBQSU5HKFdLQnVuZGxlUmFuZ2VIYW5kbGVSZWYsIEluamVjdGVkQnVuZGxlUmFuZ2VI
YW5kbGUpCiBXS19BRERfQVBJX01BUFBJTkcoV0tCdW5kbGVSZWYsIEluamVjdGVkQnVuZGxlKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Yy9XS0J1bmRsZVBhZ2UuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvYy9XS0J1bmRsZVBhZ2UuY3BwCmluZGV4IDIxMTRmNTguLjI5NDA1YjUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tC
dW5kbGVQYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0FQSS9jL1dLQnVuZGxlUGFnZS5jcHAKQEAgLTQ3LDEyICs0NywxNSBAQAogI2luY2x1ZGUg
IldlYkZ1bGxTY3JlZW5NYW5hZ2VyLmgiCiAjaW5jbHVkZSAiV2ViSW1hZ2UuaCIKICNpbmNsdWRl
ICJXZWJQYWdlLmgiCisjaW5jbHVkZSAiV2ViUGFnZU92ZXJsYXkuaCIKICNpbmNsdWRlICJXZWJS
ZW5kZXJMYXllci5oIgogI2luY2x1ZGUgIldlYlJlbmRlck9iamVjdC5oIgogI2luY2x1ZGUgPFdl
YkNvcmUvQVhPYmplY3RDYWNoZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvQWNjZXNzaWJpbGl0eU9i
amVjdC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvTWFpbkZyYW1lLmg+CiAjaW5jbHVkZSA8V2ViQ29y
ZS9QYWdlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9QYWdlT3ZlcmxheS5oPgorI2luY2x1ZGUgPFdl
YkNvcmUvUGFnZU92ZXJsYXlDb250cm9sbGVyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9VUkwuaD4K
ICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAKQEAgLTM1NCwyMiArMzU3LDIyIEBAIFdL
QnVuZGxlQmFja0ZvcndhcmRMaXN0UmVmIFdLQnVuZGxlUGFnZUdldEJhY2tGb3J3YXJkTGlzdChX
S0J1bmRsZVBhZ2VSZWYgcGFnZVJlCiAKIHZvaWQgV0tCdW5kbGVQYWdlSW5zdGFsbFBhZ2VPdmVy
bGF5KFdLQnVuZGxlUGFnZVJlZiBwYWdlUmVmLCBXS0J1bmRsZVBhZ2VPdmVybGF5UmVmIHBhZ2VP
dmVybGF5UmVmKQogewotICAgIHRvSW1wbChwYWdlUmVmKS0+aW5zdGFsbFBhZ2VPdmVybGF5KHRv
SW1wbChwYWdlT3ZlcmxheVJlZikpOworICAgIHRvSW1wbChwYWdlUmVmKS0+Y29yZVBhZ2UoKS0+
cGFnZU92ZXJsYXlDb250cm9sbGVyKCkuaW5zdGFsbFBhZ2VPdmVybGF5KHRvSW1wbChwYWdlT3Zl
cmxheVJlZiktPmNvcmVPdmVybGF5KCksIFdlYkNvcmU6OlBhZ2VPdmVybGF5OjpGYWRlTW9kZTo6
RG9Ob3RGYWRlKTsKIH0KIAogdm9pZCBXS0J1bmRsZVBhZ2VVbmluc3RhbGxQYWdlT3ZlcmxheShX
S0J1bmRsZVBhZ2VSZWYgcGFnZVJlZiwgV0tCdW5kbGVQYWdlT3ZlcmxheVJlZiBwYWdlT3Zlcmxh
eVJlZikKIHsKLSAgICB0b0ltcGwocGFnZVJlZiktPnVuaW5zdGFsbFBhZ2VPdmVybGF5KHRvSW1w
bChwYWdlT3ZlcmxheVJlZikpOworICAgIHRvSW1wbChwYWdlUmVmKS0+Y29yZVBhZ2UoKS0+cGFn
ZU92ZXJsYXlDb250cm9sbGVyKCkudW5pbnN0YWxsUGFnZU92ZXJsYXkodG9JbXBsKHBhZ2VPdmVy
bGF5UmVmKS0+Y29yZU92ZXJsYXkoKSwgV2ViQ29yZTo6UGFnZU92ZXJsYXk6OkZhZGVNb2RlOjpE
b05vdEZhZGUpOwogfQogCiB2b2lkIFdLQnVuZGxlUGFnZUluc3RhbGxQYWdlT3ZlcmxheVdpdGhB
bmltYXRpb24oV0tCdW5kbGVQYWdlUmVmIHBhZ2VSZWYsIFdLQnVuZGxlUGFnZU92ZXJsYXlSZWYg
cGFnZU92ZXJsYXlSZWYpCiB7Ci0gICAgdG9JbXBsKHBhZ2VSZWYpLT5pbnN0YWxsUGFnZU92ZXJs
YXkodG9JbXBsKHBhZ2VPdmVybGF5UmVmKSwgUGFnZU92ZXJsYXk6OkZhZGVNb2RlOjpGYWRlKTsK
KyAgICB0b0ltcGwocGFnZVJlZiktPmNvcmVQYWdlKCktPnBhZ2VPdmVybGF5Q29udHJvbGxlcigp
Lmluc3RhbGxQYWdlT3ZlcmxheSh0b0ltcGwocGFnZU92ZXJsYXlSZWYpLT5jb3JlT3ZlcmxheSgp
LCBXZWJDb3JlOjpQYWdlT3ZlcmxheTo6RmFkZU1vZGU6OkZhZGUpOwogfQogCiB2b2lkIFdLQnVu
ZGxlUGFnZVVuaW5zdGFsbFBhZ2VPdmVybGF5V2l0aEFuaW1hdGlvbihXS0J1bmRsZVBhZ2VSZWYg
cGFnZVJlZiwgV0tCdW5kbGVQYWdlT3ZlcmxheVJlZiBwYWdlT3ZlcmxheVJlZikKIHsKLSAgICB0
b0ltcGwocGFnZVJlZiktPnVuaW5zdGFsbFBhZ2VPdmVybGF5KHRvSW1wbChwYWdlT3ZlcmxheVJl
ZiksIFBhZ2VPdmVybGF5OjpGYWRlTW9kZTo6RmFkZSk7CisgICAgdG9JbXBsKHBhZ2VSZWYpLT5j
b3JlUGFnZSgpLT5wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKS51bmluc3RhbGxQYWdlT3ZlcmxheSh0
b0ltcGwocGFnZU92ZXJsYXlSZWYpLT5jb3JlT3ZlcmxheSgpLCBXZWJDb3JlOjpQYWdlT3Zlcmxh
eTo6RmFkZU1vZGU6OkZhZGUpOwogfQogCiB2b2lkIFdLQnVuZGxlUGFnZVNldFRvcE92ZXJoYW5n
SW1hZ2UoV0tCdW5kbGVQYWdlUmVmIHBhZ2VSZWYsIFdLSW1hZ2VSZWYgaW1hZ2VSZWYpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dL
QnVuZGxlUGFnZU92ZXJsYXkuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZVBhZ2VPdmVybGF5LmNwcAppbmRleCBiYmE4NjI2Li40MTQy
MGIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9jL1dLQnVuZGxlUGFnZU92ZXJsYXkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVQYWdlT3ZlcmxheS5jcHAKQEAgLTI3
LDEwICsyNywxNyBAQAogI2luY2x1ZGUgIldLQnVuZGxlUGFnZU92ZXJsYXkuaCIKIAogI2luY2x1
ZGUgIkFQSUNsaWVudC5oIgotI2luY2x1ZGUgIlBhZ2VPdmVybGF5LmgiCiAjaW5jbHVkZSAiV0tB
UElDYXN0LmgiCisjaW5jbHVkZSAiV0tBcnJheS5oIgogI2luY2x1ZGUgIldLQnVuZGxlQVBJQ2Fz
dC5oIgorI2luY2x1ZGUgIldLTnVtYmVyLmgiCisjaW5jbHVkZSAiV0tSZXRhaW5QdHIuaCIKKyNp
bmNsdWRlICJXS1NoYXJlZEFQSUNhc3QuaCIKKyNpbmNsdWRlICJXS1N0cmluZ1ByaXZhdGUuaCIK
ICNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dC5oPgorI2luY2x1ZGUgPFdlYkNvcmUv
UGFnZU92ZXJsYXkuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtTW91c2VFdmVudC5oPgor
I2luY2x1ZGUgPFdlYktpdC9XZWJQYWdlT3ZlcmxheS5oPgogCiBuYW1lc3BhY2UgQVBJIHsKIApA
QCAtNDcsNyArNTQsNyBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBDbGllbnRUcmFpdHM8V0tCdW5kbGVQ
YWdlT3ZlcmxheUFjY2Vzc2liaWxpdHlDbGllbnRCYXNlPiB7CiB1c2luZyBuYW1lc3BhY2UgV2Vi
Q29yZTsKIHVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CiAKLWNsYXNzIFBhZ2VPdmVybGF5Q2xpZW50
SW1wbCA6IEFQSTo6Q2xpZW50PFdLQnVuZGxlUGFnZU92ZXJsYXlDbGllbnRCYXNlPiwgcHVibGlj
IFBhZ2VPdmVybGF5OjpDbGllbnQgeworY2xhc3MgUGFnZU92ZXJsYXlDbGllbnRJbXBsIDogQVBJ
OjpDbGllbnQ8V0tCdW5kbGVQYWdlT3ZlcmxheUNsaWVudEJhc2U+LCBwdWJsaWMgV2ViUGFnZU92
ZXJsYXk6OkNsaWVudCB7CiBwdWJsaWM6CiAgICAgZXhwbGljaXQgUGFnZU92ZXJsYXlDbGllbnRJ
bXBsKFdLQnVuZGxlUGFnZU92ZXJsYXlDbGllbnRCYXNlKiBjbGllbnQpCiAgICAgewpAQCAtNjAs
NjQgKzY3LDY0IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgLy8gUGFnZU92ZXJs
YXk6OkNsaWVudC4KLSAgICB2aXJ0dWFsIHZvaWQgcGFnZU92ZXJsYXlEZXN0cm95ZWQoUGFnZU92
ZXJsYXkqKQorICAgIC8vIFdlYlBhZ2VPdmVybGF5OjpDbGllbnQuCisgICAgdmlydHVhbCB2b2lk
IHBhZ2VPdmVybGF5RGVzdHJveWVkKFdlYlBhZ2VPdmVybGF5Jikgb3ZlcnJpZGUKICAgICB7CiAg
ICAgICAgIGRlbGV0ZSB0aGlzOwogICAgIH0KIAotICAgIHZpcnR1YWwgdm9pZCB3aWxsTW92ZVRv
V2ViUGFnZShQYWdlT3ZlcmxheSogcGFnZU92ZXJsYXksIFdlYlBhZ2UqIHBhZ2UpCisgICAgdmly
dHVhbCB2b2lkIHdpbGxNb3ZlVG9QYWdlKFdlYlBhZ2VPdmVybGF5JiBwYWdlT3ZlcmxheSwgV2Vi
UGFnZSogcGFnZSkgb3ZlcnJpZGUKICAgICB7CiAgICAgICAgIGlmICghbV9jbGllbnQud2lsbE1v
dmVUb1BhZ2UpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgbV9jbGllbnQud2lsbE1v
dmVUb1BhZ2UodG9BUEkocGFnZU92ZXJsYXkpLCB0b0FQSShwYWdlKSwgbV9jbGllbnQuYmFzZS5j
bGllbnRJbmZvKTsKKyAgICAgICAgbV9jbGllbnQud2lsbE1vdmVUb1BhZ2UodG9BUEkoJnBhZ2VP
dmVybGF5KSwgdG9BUEkocGFnZSksIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7CiAgICAgfQog
ICAgIAotICAgIHZpcnR1YWwgdm9pZCBkaWRNb3ZlVG9XZWJQYWdlKFBhZ2VPdmVybGF5KiBwYWdl
T3ZlcmxheSwgV2ViUGFnZSogcGFnZSkKKyAgICB2aXJ0dWFsIHZvaWQgZGlkTW92ZVRvUGFnZShX
ZWJQYWdlT3ZlcmxheSYgcGFnZU92ZXJsYXksIFdlYlBhZ2UqIHBhZ2UpIG92ZXJyaWRlCiAgICAg
ewogICAgICAgICBpZiAoIW1fY2xpZW50LmRpZE1vdmVUb1BhZ2UpCiAgICAgICAgICAgICByZXR1
cm47CiAKLSAgICAgICAgbV9jbGllbnQuZGlkTW92ZVRvUGFnZSh0b0FQSShwYWdlT3ZlcmxheSks
IHRvQVBJKHBhZ2UpLCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pOworICAgICAgICBtX2NsaWVu
dC5kaWRNb3ZlVG9QYWdlKHRvQVBJKCZwYWdlT3ZlcmxheSksIHRvQVBJKHBhZ2UpLCBtX2NsaWVu
dC5iYXNlLmNsaWVudEluZm8pOwogICAgIH0KIAotICAgIHZpcnR1YWwgdm9pZCBkcmF3UmVjdChQ
YWdlT3ZlcmxheSogcGFnZU92ZXJsYXksIEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0
LCBjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpCisgICAgdmlydHVhbCB2b2lkIGRyYXdSZWN0KFdl
YlBhZ2VPdmVybGF5JiBwYWdlT3ZlcmxheSwgR3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRl
eHQsIGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCkgb3ZlcnJpZGUKICAgICB7CiAgICAgICAgIGlm
ICghbV9jbGllbnQuZHJhd1JlY3QpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgbV9j
bGllbnQuZHJhd1JlY3QodG9BUEkocGFnZU92ZXJsYXkpLCBncmFwaGljc0NvbnRleHQucGxhdGZv
cm1Db250ZXh0KCksIHRvQVBJKGRpcnR5UmVjdCksIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7
CisgICAgICAgIG1fY2xpZW50LmRyYXdSZWN0KHRvQVBJKCZwYWdlT3ZlcmxheSksIGdyYXBoaWNz
Q29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKSwgdG9BUEkoZGlydHlSZWN0KSwgbV9jbGllbnQuYmFz
ZS5jbGllbnRJbmZvKTsKICAgICB9CiAgICAgCi0gICAgdmlydHVhbCBib29sIG1vdXNlRXZlbnQo
UGFnZU92ZXJsYXkqIHBhZ2VPdmVybGF5LCBjb25zdCBXZWJNb3VzZUV2ZW50JiBldmVudCkKKyAg
ICB2aXJ0dWFsIGJvb2wgbW91c2VFdmVudChXZWJQYWdlT3ZlcmxheSYgcGFnZU92ZXJsYXksIGNv
bnN0IFBsYXRmb3JtTW91c2VFdmVudCYgZXZlbnQpIG92ZXJyaWRlCiAgICAgewogICAgICAgICBz
d2l0Y2ggKGV2ZW50LnR5cGUoKSkgewotICAgICAgICBjYXNlIFdlYkV2ZW50OjpNb3VzZURvd246
IHsKKyAgICAgICAgY2FzZSBQbGF0Zm9ybU1vdXNlRXZlbnQ6OlR5cGU6Ok1vdXNlUHJlc3NlZDog
ewogICAgICAgICAgICAgaWYgKCFtX2NsaWVudC5tb3VzZURvd24pCiAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCi0gICAgICAgICAgICByZXR1cm4gbV9jbGllbnQubW91c2VEb3duKHRv
QVBJKHBhZ2VPdmVybGF5KSwgdG9BUEkoZXZlbnQucG9zaXRpb24oKSksIHRvQVBJKGV2ZW50LmJ1
dHRvbigpKSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKKyAgICAgICAgICAgIHJldHVybiBt
X2NsaWVudC5tb3VzZURvd24odG9BUEkoJnBhZ2VPdmVybGF5KSwgdG9BUEkoZXZlbnQucG9zaXRp
b24oKSksIHRvQVBJKGV2ZW50LmJ1dHRvbigpKSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsK
ICAgICAgICAgfQotICAgICAgICBjYXNlIFdlYkV2ZW50OjpNb3VzZVVwOiB7CisgICAgICAgIGNh
c2UgUGxhdGZvcm1Nb3VzZUV2ZW50OjpUeXBlOjpNb3VzZVJlbGVhc2VkOiB7CiAgICAgICAgICAg
ICBpZiAoIW1fY2xpZW50Lm1vdXNlVXApCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
Ci0gICAgICAgICAgICByZXR1cm4gbV9jbGllbnQubW91c2VVcCh0b0FQSShwYWdlT3ZlcmxheSks
IHRvQVBJKGV2ZW50LnBvc2l0aW9uKCkpLCB0b0FQSShldmVudC5idXR0b24oKSksIG1fY2xpZW50
LmJhc2UuY2xpZW50SW5mbyk7CisgICAgICAgICAgICByZXR1cm4gbV9jbGllbnQubW91c2VVcCh0
b0FQSSgmcGFnZU92ZXJsYXkpLCB0b0FQSShldmVudC5wb3NpdGlvbigpKSwgdG9BUEkoZXZlbnQu
YnV0dG9uKCkpLCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pOwogICAgICAgICB9Ci0gICAgICAg
IGNhc2UgV2ViRXZlbnQ6Ok1vdXNlTW92ZTogewotICAgICAgICAgICAgaWYgKGV2ZW50LmJ1dHRv
bigpID09IFdlYk1vdXNlRXZlbnQ6Ok5vQnV0dG9uKSB7CisgICAgICAgIGNhc2UgUGxhdGZvcm1N
b3VzZUV2ZW50OjpUeXBlOjpNb3VzZU1vdmVkOiB7CisgICAgICAgICAgICBpZiAoZXZlbnQuYnV0
dG9uKCkgPT0gTW91c2VCdXR0b246Ok5vQnV0dG9uKSB7CiAgICAgICAgICAgICAgICAgaWYgKCFt
X2NsaWVudC5tb3VzZU1vdmVkKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAK
LSAgICAgICAgICAgICAgICByZXR1cm4gbV9jbGllbnQubW91c2VNb3ZlZCh0b0FQSShwYWdlT3Zl
cmxheSksIHRvQVBJKGV2ZW50LnBvc2l0aW9uKCkpLCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8p
OworICAgICAgICAgICAgICAgIHJldHVybiBtX2NsaWVudC5tb3VzZU1vdmVkKHRvQVBJKCZwYWdl
T3ZlcmxheSksIHRvQVBJKGV2ZW50LnBvc2l0aW9uKCkpLCBtX2NsaWVudC5iYXNlLmNsaWVudElu
Zm8pOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAvLyBUaGlzIGlzIGEgTW91c2VNb3Zl
IGV2ZW50IHdpdGggYSBtb3VzZSBidXR0b24gcHJlc3NlZC4gQ2FsbCBtb3VzZURyYWdnZWQuCiAg
ICAgICAgICAgICBpZiAoIW1fY2xpZW50Lm1vdXNlRHJhZ2dlZCkKICAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgICAgIHJldHVybiBtX2NsaWVudC5tb3VzZURyYWdnZWQo
dG9BUEkocGFnZU92ZXJsYXkpLCB0b0FQSShldmVudC5wb3NpdGlvbigpKSwgdG9BUEkoZXZlbnQu
YnV0dG9uKCkpLCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pOworICAgICAgICAgICAgcmV0dXJu
IG1fY2xpZW50Lm1vdXNlRHJhZ2dlZCh0b0FQSSgmcGFnZU92ZXJsYXkpLCB0b0FQSShldmVudC5w
b3NpdGlvbigpKSwgdG9BUEkoZXZlbnQuYnV0dG9uKCkpLCBtX2NsaWVudC5iYXNlLmNsaWVudElu
Zm8pOwogICAgICAgICB9CiAKICAgICAgICAgZGVmYXVsdDoKQEAgLTEyNSwxOCArMTMyLDQzIEBA
IHByaXZhdGU6CiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgdmlydHVhbCBXS1R5cGVSZWYg
Y29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZShQYWdlT3ZlcmxheSogcGFnZU92ZXJsYXks
IFdLU3RyaW5nUmVmIGF0dHJpYnV0ZSwgV0tUeXBlUmVmIHBhcmFtZXRlcikKKyAgICB2aXJ0dWFs
IGJvb2wgY29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVTdHJpbmdWYWx1ZUZvclBvaW50KFdlYlBh
Z2VPdmVybGF5JiBwYWdlT3ZlcmxheSwgU3RyaW5nIGF0dHJpYnV0ZSwgV2ViQ29yZTo6RmxvYXRQ
b2ludCBwYXJhbWV0ZXIsIFN0cmluZyYgdmFsdWUpIG92ZXJyaWRlCiAgICAgewogICAgICAgICBp
ZiAoIW1fYWNjZXNzaWJpbGl0eUNsaWVudC5jbGllbnQoKS5jb3B5QWNjZXNzaWJpbGl0eUF0dHJp
YnV0ZVZhbHVlKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIHJldHVybiBtX2FjY2Vz
c2liaWxpdHlDbGllbnQuY2xpZW50KCkuY29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZSh0
b0FQSShwYWdlT3ZlcmxheSksIGF0dHJpYnV0ZSwgcGFyYW1ldGVyLCBtX2FjY2Vzc2liaWxpdHlD
bGllbnQuY2xpZW50KCkuYmFzZS5jbGllbnRJbmZvKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiB3a1R5cGUgPSBtX2FjY2Vzc2liaWxp
dHlDbGllbnQuY2xpZW50KCkuY29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZSh0b0FQSSgm
cGFnZU92ZXJsYXkpLCB0b0NvcGllZEFQSShhdHRyaWJ1dGUpLCBXS1BvaW50Q3JlYXRlKFdLUG9p
bnRNYWtlKHBhcmFtZXRlci54KCksIHBhcmFtZXRlci55KCkpKSwgbV9hY2Nlc3NpYmlsaXR5Q2xp
ZW50LmNsaWVudCgpLmJhc2UuY2xpZW50SW5mbyk7CisgICAgICAgIGlmICh0b0ltcGwod2tUeXBl
LmdldCgpKS0+dHlwZSgpICE9IEFQSTo6U3RyaW5nOjpBUElUeXBlKQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICB2YWx1ZSA9IHRvV1RGU3RyaW5nKHN0YXRpY19jYXN0PFdLU3Ry
aW5nUmVmPih3a1R5cGUuZ2V0KCkpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisg
ICAgdmlydHVhbCBib29sIGNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlQm9vbFZhbHVlRm9yUG9p
bnQoV2ViUGFnZU92ZXJsYXkmIHBhZ2VPdmVybGF5LCBTdHJpbmcgYXR0cmlidXRlLCBXZWJDb3Jl
OjpGbG9hdFBvaW50IHBhcmFtZXRlciwgYm9vbCYgdmFsdWUpIG92ZXJyaWRlCisgICAgeworICAg
ICAgICBpZiAoIW1fYWNjZXNzaWJpbGl0eUNsaWVudC5jbGllbnQoKS5jb3B5QWNjZXNzaWJpbGl0
eUF0dHJpYnV0ZVZhbHVlKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBXS1Jl
dGFpblB0cjxXS1R5cGVSZWY+IHdrVHlwZSA9IG1fYWNjZXNzaWJpbGl0eUNsaWVudC5jbGllbnQo
KS5jb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlKHRvQVBJKCZwYWdlT3ZlcmxheSksIHRv
Q29waWVkQVBJKGF0dHJpYnV0ZSksIFdLUG9pbnRDcmVhdGUoV0tQb2ludE1ha2UocGFyYW1ldGVy
LngoKSwgcGFyYW1ldGVyLnkoKSkpLCBtX2FjY2Vzc2liaWxpdHlDbGllbnQuY2xpZW50KCkuYmFz
ZS5jbGllbnRJbmZvKTsKKyAgICAgICAgaWYgKHRvSW1wbCh3a1R5cGUuZ2V0KCkpLT50eXBlKCkg
IT0gQVBJOjpCb29sZWFuOjpBUElUeXBlKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICB2YWx1ZSA9IFdLQm9vbGVhbkdldFZhbHVlKHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4o
d2tUeXBlLmdldCgpKSk7CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIHZpcnR1
YWwgV0tBcnJheVJlZiBjb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZU5hbWVzKFBhZ2VPdmVybGF5
KiBwYWdlT3ZlcmxheSwgYm9vbCBwYXJhbWVyaXplZE5hbWVzKQorICAgIHZpcnR1YWwgVmVjdG9y
PFN0cmluZz4gY29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVOYW1lcyhXZWJQYWdlT3ZlcmxheSYg
cGFnZU92ZXJsYXksIGJvb2wgcGFyYW1lcml6ZWROYW1lcykgb3ZlcnJpZGUKICAgICB7CisgICAg
ICAgIFZlY3RvcjxTdHJpbmc+IG5hbWVzOwogICAgICAgICBpZiAoIW1fYWNjZXNzaWJpbGl0eUNs
aWVudC5jbGllbnQoKS5jb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZU5hbWVzKQotICAgICAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgICAgIHJldHVybiBtX2FjY2Vzc2liaWxpdHlDbGllbnQuY2xpZW50
KCkuY29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVOYW1lcyh0b0FQSShwYWdlT3ZlcmxheSksIHBh
cmFtZXJpemVkTmFtZXMsIG1fYWNjZXNzaWJpbGl0eUNsaWVudC5jbGllbnQoKS5iYXNlLmNsaWVu
dEluZm8pOworICAgICAgICAgICAgcmV0dXJuIG5hbWVzOworICAgICAgICBXS1JldGFpblB0cjxX
S0FycmF5UmVmPiB3a05hbWVzID0gbV9hY2Nlc3NpYmlsaXR5Q2xpZW50LmNsaWVudCgpLmNvcHlB
Y2Nlc3NpYmlsaXR5QXR0cmlidXRlTmFtZXModG9BUEkoJnBhZ2VPdmVybGF5KSwgcGFyYW1lcml6
ZWROYW1lcywgbV9hY2Nlc3NpYmlsaXR5Q2xpZW50LmNsaWVudCgpLmJhc2UuY2xpZW50SW5mbyk7
CisKKyAgICAgICAgc2l6ZV90IGNvdW50ID0gV0tBcnJheUdldFNpemUod2tOYW1lcy5nZXQoKSk7
CisgICAgICAgIGZvciAoc2l6ZV90IGsgPSAwOyBrIDwgY291bnQ7IGsrKykgeworICAgICAgICAg
ICAgV0tUeXBlUmVmIGl0ZW0gPSBXS0FycmF5R2V0SXRlbUF0SW5kZXgod2tOYW1lcy5nZXQoKSwg
ayk7CisgICAgICAgICAgICBpZiAodG9JbXBsKGl0ZW0pLT50eXBlKCkgPT0gQVBJOjpTdHJpbmc6
OkFQSVR5cGUpCisgICAgICAgICAgICAgICAgbmFtZXMuYXBwZW5kKHRvV1RGU3RyaW5nKHN0YXRp
Y19jYXN0PFdLU3RyaW5nUmVmPihpdGVtKSkpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJu
IG5hbWVzOwogICAgIH0KICAgICAKICAgICBBUEk6OkNsaWVudDxXS0J1bmRsZVBhZ2VPdmVybGF5
QWNjZXNzaWJpbGl0eUNsaWVudEJhc2U+IG1fYWNjZXNzaWJpbGl0eUNsaWVudDsKQEAgLTE0NCw3
ICsxNzYsNyBAQCBwcml2YXRlOgogCiBXS1R5cGVJRCBXS0J1bmRsZVBhZ2VPdmVybGF5R2V0VHlw
ZUlEKCkKIHsKLSAgICByZXR1cm4gdG9BUEkoUGFnZU92ZXJsYXk6OkFQSVR5cGUpOworICAgIHJl
dHVybiB0b0FQSShXZWJQYWdlT3ZlcmxheTo6QVBJVHlwZSk7CiB9CiAKIFdLQnVuZGxlUGFnZU92
ZXJsYXlSZWYgV0tCdW5kbGVQYWdlT3ZlcmxheUNyZWF0ZShXS0J1bmRsZVBhZ2VPdmVybGF5Q2xp
ZW50QmFzZSogd2tDbGllbnQpCkBAIC0xNTUsMTQgKzE4NywxNCBAQCBXS0J1bmRsZVBhZ2VPdmVy
bGF5UmVmIFdLQnVuZGxlUGFnZU92ZXJsYXlDcmVhdGUoV0tCdW5kbGVQYWdlT3ZlcmxheUNsaWVu
dEJhc2UqCiAgICAgYXV0byBjbGllbnRJbXBsID0gc3RkOjptYWtlX3VuaXF1ZTxQYWdlT3Zlcmxh
eUNsaWVudEltcGw+KHdrQ2xpZW50KTsKIAogICAgIC8vIEZJWE1FOiBMb29rcyBsaWtlIHRoaXMg
bGVha3MgdGhlIGNsaWVudEltcGwuCi0gICAgcmV0dXJuIHRvQVBJKFBhZ2VPdmVybGF5OjpjcmVh
dGUoY2xpZW50SW1wbC5yZWxlYXNlKCkpLmxlYWtSZWYoKSk7CisgICAgcmV0dXJuIHRvQVBJKFdl
YlBhZ2VPdmVybGF5OjpjcmVhdGUoKmNsaWVudEltcGwucmVsZWFzZSgpKS5sZWFrUmVmKCkpOwog
fQogCiB2b2lkIFdLQnVuZGxlUGFnZU92ZXJsYXlTZXRBY2Nlc3NpYmlsaXR5Q2xpZW50KFdLQnVu
ZGxlUGFnZU92ZXJsYXlSZWYgYnVuZGxlUGFnZU92ZXJsYXlSZWYsIFdLQnVuZGxlUGFnZU92ZXJs
YXlBY2Nlc3NpYmlsaXR5Q2xpZW50QmFzZSogY2xpZW50KQogewogICAgIGlmIChjbGllbnQgJiYg
Y2xpZW50LT52ZXJzaW9uKQogICAgICAgICByZXR1cm47Ci0gICAgc3RhdGljX2Nhc3Q8UGFnZU92
ZXJsYXlDbGllbnRJbXBsKj4odG9JbXBsKGJ1bmRsZVBhZ2VPdmVybGF5UmVmKS0+Y2xpZW50KCkp
LT5zZXRBY2Nlc3NpYmlsaXR5Q2xpZW50KGNsaWVudCk7CisgICAgc3RhdGljX2Nhc3Q8UGFnZU92
ZXJsYXlDbGllbnRJbXBsKj4oJnRvSW1wbChidW5kbGVQYWdlT3ZlcmxheVJlZiktPmNsaWVudCgp
KS0+c2V0QWNjZXNzaWJpbGl0eUNsaWVudChjbGllbnQpOwogfQogCiB2b2lkIFdLQnVuZGxlUGFn
ZU92ZXJsYXlTZXROZWVkc0Rpc3BsYXkoV0tCdW5kbGVQYWdlT3ZlcmxheVJlZiBidW5kbGVQYWdl
T3ZlcmxheVJlZiwgV0tSZWN0IHJlY3QpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAKaW5kZXggY2Rl
Y2JkYS4uYjZhMjkxMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJD
b3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcApAQCAtODQwLDcgKzg0MCw5
IEBAIFBhc3NSZWZQdHI8V2ViQ29yZTo6U2VhcmNoUG9wdXBNZW51PiBXZWJDaHJvbWVDbGllbnQ6
OmNyZWF0ZVNlYXJjaFBvcHVwTWVudShXZWJDCiAKIEdyYXBoaWNzTGF5ZXJGYWN0b3J5KiBXZWJD
aHJvbWVDbGllbnQ6OmdyYXBoaWNzTGF5ZXJGYWN0b3J5KCkgY29uc3QKIHsKLSAgICByZXR1cm4g
bV9wYWdlLT5kcmF3aW5nQXJlYSgpLT5ncmFwaGljc0xheWVyRmFjdG9yeSgpOworICAgIGlmIChh
dXRvIGRyYXdpbmdBcmVhID0gbV9wYWdlLT5kcmF3aW5nQXJlYSgpKQorICAgICAgICByZXR1cm4g
ZHJhd2luZ0FyZWEtPmdyYXBoaWNzTGF5ZXJGYWN0b3J5KCk7CisgICAgcmV0dXJuIG51bGxwdHI7
CiB9CiAKICNpZiBVU0UoUkVRVUVTVF9BTklNQVRJT05fRlJBTUVfRElTUExBWV9NT05JVE9SKQpA
QCAtODU4LDEyICs4NjAsMTAgQEAgdm9pZCBXZWJDaHJvbWVDbGllbnQ6OmF0dGFjaFJvb3RHcmFw
aGljc0xheWVyKEZyYW1lKiwgR3JhcGhpY3NMYXllciogbGF5ZXIpCiAgICAgICAgIG1fcGFnZS0+
ZXhpdEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKCk7CiB9CiAKLUdyYXBoaWNzTGF5ZXIqIFdl
YkNocm9tZUNsaWVudDo6ZG9jdW1lbnRPdmVybGF5TGF5ZXJGb3JGcmFtZShGcmFtZSYgZnJhbWUp
Cit2b2lkIFdlYkNocm9tZUNsaWVudDo6YXR0YWNoVmlld092ZXJsYXlHcmFwaGljc0xheWVyKEZy
YW1lKiBmcmFtZSwgR3JhcGhpY3NMYXllciogZ3JhcGhpY3NMYXllcikKIHsKLSAgICBpZiAoJmZy
YW1lID09ICZtX3BhZ2UtPmNvcmVQYWdlKCktPm1haW5GcmFtZSgpKQotICAgICAgICByZXR1cm4g
bV9wYWdlLT5wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKS5kb2N1bWVudE92ZXJsYXlSb290TGF5ZXIo
KTsKLQotICAgIHJldHVybiBudWxscHRyOworICAgIGlmIChhdXRvIGRyYXdpbmdBcmVhID0gbV9w
YWdlLT5kcmF3aW5nQXJlYSgpKQorICAgICAgICBkcmF3aW5nQXJlYS0+YXR0YWNoVmlld092ZXJs
YXlHcmFwaGljc0xheWVyKGZyYW1lLCBncmFwaGljc0xheWVyKTsKIH0KIAogdm9pZCBXZWJDaHJv
bWVDbGllbnQ6OnNldE5lZWRzT25lU2hvdERyYXdpbmdTeW5jaHJvbml6YXRpb24oKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVD
bGllbnQuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hy
b21lQ2xpZW50LmgKaW5kZXggYjlkYzMyZS4uZjVjNWIyNyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5o
CkBAIC0yMTUsMTAgKzIxNSwxMCBAQCBwcml2YXRlOgogCiAgICAgdmlydHVhbCBXZWJDb3JlOjpH
cmFwaGljc0xheWVyRmFjdG9yeSogZ3JhcGhpY3NMYXllckZhY3RvcnkoKSBjb25zdCBvdmVycmlk
ZTsKICAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoUm9vdEdyYXBoaWNzTGF5ZXIoV2ViQ29yZTo6RnJh
bWUqLCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lk
IGF0dGFjaFZpZXdPdmVybGF5R3JhcGhpY3NMYXllcihXZWJDb3JlOjpGcmFtZSosIFdlYkNvcmU6
OkdyYXBoaWNzTGF5ZXIqKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNPbmVT
aG90RHJhd2luZ1N5bmNocm9uaXphdGlvbigpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBz
Y2hlZHVsZUNvbXBvc2l0aW5nTGF5ZXJGbHVzaCgpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgYm9v
bCBhZGp1c3RMYXllckZsdXNoVGhyb3R0bGluZyhXZWJDb3JlOjpMYXllckZsdXNoVGhyb3R0bGVT
dGF0ZTo6RmxhZ3MpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgV2ViQ29yZTo6R3JhcGhpY3NMYXll
ciogZG9jdW1lbnRPdmVybGF5TGF5ZXJGb3JGcmFtZShXZWJDb3JlOjpGcmFtZSYpIG92ZXJyaWRl
OwogCiAjaWYgVVNFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FX0RJU1BMQVlfTU9OSVRPUikKICAg
ICB2aXJ0dWFsIFBhc3NSZWZQdHI8V2ViQ29yZTo6RGlzcGxheVJlZnJlc2hNb25pdG9yPiBjcmVh
dGVEaXNwbGF5UmVmcmVzaE1vbml0b3IoUGxhdGZvcm1EaXNwbGF5SUQpIGNvbnN0IG92ZXJyaWRl
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9X
ZWJJbnNwZWN0b3JDbGllbnQuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3Jl
U3VwcG9ydC9XZWJJbnNwZWN0b3JDbGllbnQuY3BwCmluZGV4IDg1OTM1OGIuLjg4ZWIyZGEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViSW5z
cGVjdG9yQ2xpZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVT
dXBwb3J0L1dlYkluc3BlY3RvckNsaWVudC5jcHAKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRl
ICJXZWJQYWdlLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9JbnNwZWN0b3JDb250cm9sbGVyLmg+CiAj
aW5jbHVkZSA8V2ViQ29yZS9QYWdlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9QYWdlT3ZlcmxheUNv
bnRyb2xsZXIuaD4KICNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KIAogI2lmIFBMQVRGT1JN
KElPUykKQEAgLTczLDcgKzc0LDcgQEAgV2ViSW5zcGVjdG9yQ2xpZW50Ojp+V2ViSW5zcGVjdG9y
Q2xpZW50KCkKICAgICB9CiAKICAgICBpZiAobV9wYWludFJlY3RPdmVybGF5KQotICAgICAgICBt
X3BhZ2UtPnVuaW5zdGFsbFBhZ2VPdmVybGF5KG1fcGFpbnRSZWN0T3ZlcmxheS5nZXQoKSk7Cisg
ICAgICAgIG1fcGFnZS0+Y29yZVBhZ2UoKS0+cGFnZU92ZXJsYXlDb250cm9sbGVyKCkudW5pbnN0
YWxsUGFnZU92ZXJsYXkobV9wYWludFJlY3RPdmVybGF5LmdldCgpLCBQYWdlT3ZlcmxheTo6RmFk
ZU1vZGU6OkZhZGUpOwogfQogCiB2b2lkIFdlYkluc3BlY3RvckNsaWVudDo6aW5zcGVjdG9yRGVz
dHJveWVkKCkKQEAgLTExMSw5ICsxMTIsOSBAQCB2b2lkIFdlYkluc3BlY3RvckNsaWVudDo6aGln
aGxpZ2h0KCkKIHsKICNpZiAhUExBVEZPUk0oSU9TKQogICAgIGlmICghbV9oaWdobGlnaHRPdmVy
bGF5KSB7Ci0gICAgICAgIFJlZlB0cjxQYWdlT3ZlcmxheT4gaGlnaGxpZ2h0T3ZlcmxheSA9IFBh
Z2VPdmVybGF5OjpjcmVhdGUodGhpcyk7CisgICAgICAgIFJlZlB0cjxQYWdlT3ZlcmxheT4gaGln
aGxpZ2h0T3ZlcmxheSA9IFBhZ2VPdmVybGF5OjpjcmVhdGUoKnRoaXMpOwogICAgICAgICBtX2hp
Z2hsaWdodE92ZXJsYXkgPSBoaWdobGlnaHRPdmVybGF5LmdldCgpOwotICAgICAgICBtX3BhZ2Ut
Pmluc3RhbGxQYWdlT3ZlcmxheShoaWdobGlnaHRPdmVybGF5LnJlbGVhc2UoKSwgUGFnZU92ZXJs
YXk6OkZhZGVNb2RlOjpGYWRlKTsKKyAgICAgICAgbV9wYWdlLT5jb3JlUGFnZSgpLT5wYWdlT3Zl
cmxheUNvbnRyb2xsZXIoKS5pbnN0YWxsUGFnZU92ZXJsYXkoaGlnaGxpZ2h0T3ZlcmxheS5yZWxl
YXNlKCksIFBhZ2VPdmVybGF5OjpGYWRlTW9kZTo6RmFkZSk7CiAgICAgICAgIG1faGlnaGxpZ2h0
T3ZlcmxheS0+c2V0TmVlZHNEaXNwbGF5KCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgbV9oaWdo
bGlnaHRPdmVybGF5LT5zdG9wRmFkZU91dEFuaW1hdGlvbigpOwpAQCAtMTMwLDcgKzEzMSw3IEBA
IHZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50OjpoaWRlSGlnaGxpZ2h0KCkKIHsKICNpZiAhUExBVEZP
Uk0oSU9TKQogICAgIGlmIChtX2hpZ2hsaWdodE92ZXJsYXkpCi0gICAgICAgIG1fcGFnZS0+dW5p
bnN0YWxsUGFnZU92ZXJsYXkobV9oaWdobGlnaHRPdmVybGF5LCBQYWdlT3ZlcmxheTo6RmFkZU1v
ZGU6OkZhZGUpOworICAgICAgICBtX3BhZ2UtPmNvcmVQYWdlKCktPnBhZ2VPdmVybGF5Q29udHJv
bGxlcigpLnVuaW5zdGFsbFBhZ2VPdmVybGF5KG1faGlnaGxpZ2h0T3ZlcmxheSwgUGFnZU92ZXJs
YXk6OkZhZGVNb2RlOjpGYWRlKTsKICNlbHNlCiAgICAgbV9wYWdlLT5oaWRlSW5zcGVjdG9ySGln
aGxpZ2h0KCk7CiAjZW5kaWYKQEAgLTEzOSw4ICsxNDAsOCBAQCB2b2lkIFdlYkluc3BlY3RvckNs
aWVudDo6aGlkZUhpZ2hsaWdodCgpCiB2b2lkIFdlYkluc3BlY3RvckNsaWVudDo6c2hvd1BhaW50
UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7CiAgICAgaWYgKCFtX3BhaW50UmVjdE92ZXJs
YXkpIHsKLSAgICAgICAgbV9wYWludFJlY3RPdmVybGF5ID0gUGFnZU92ZXJsYXk6OmNyZWF0ZSh0
aGlzLCBQYWdlT3ZlcmxheTo6T3ZlcmxheVR5cGU6OkRvY3VtZW50KTsKLSAgICAgICAgbV9wYWdl
LT5pbnN0YWxsUGFnZU92ZXJsYXkobV9wYWludFJlY3RPdmVybGF5LCBQYWdlT3ZlcmxheTo6RmFk
ZU1vZGU6OkRvTm90RmFkZSk7CisgICAgICAgIG1fcGFpbnRSZWN0T3ZlcmxheSA9IFBhZ2VPdmVy
bGF5OjpjcmVhdGUoKnRoaXMsIFBhZ2VPdmVybGF5OjpPdmVybGF5VHlwZTo6RG9jdW1lbnQpOwor
ICAgICAgICBtX3BhZ2UtPmNvcmVQYWdlKCktPnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLmluc3Rh
bGxQYWdlT3ZlcmxheShtX3BhaW50UmVjdE92ZXJsYXksIFBhZ2VPdmVybGF5OjpGYWRlTW9kZTo6
RG9Ob3RGYWRlKTsKICAgICB9CiAKICAgICBpZiAoIW1fcGFpbnRJbmRpY2F0b3JMYXllckNsaWVu
dCkKQEAgLTE2Nyw4ICsxNjgsOCBAQCB2b2lkIFdlYkluc3BlY3RvckNsaWVudDo6c2hvd1BhaW50
UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiAgICAgCiAgICAgbV9wYWludFJlY3RMYXllcnMu
YWRkKHBhaW50TGF5ZXIuZ2V0KCkpOwogCi0gICAgR3JhcGhpY3NMYXllciogb3ZlcmxheVJvb3RM
YXllciA9IG1fcGFpbnRSZWN0T3ZlcmxheS0+bGF5ZXIoKTsKLSAgICBvdmVybGF5Um9vdExheWVy
LT5hZGRDaGlsZChwYWludExheWVyLnJlbGVhc2UoKSk7CisgICAgR3JhcGhpY3NMYXllciYgb3Zl
cmxheVJvb3RMYXllciA9IG1fcGFpbnRSZWN0T3ZlcmxheS0+bGF5ZXIoKTsKKyAgICBvdmVybGF5
Um9vdExheWVyLmFkZENoaWxkKHBhaW50TGF5ZXIucmVsZWFzZSgpKTsKIH0KIAogdm9pZCBXZWJJ
bnNwZWN0b3JDbGllbnQ6OmFuaW1hdGlvbkVuZGVkRm9yTGF5ZXIoY29uc3QgR3JhcGhpY3NMYXll
ciogbGF5ZXIpCkBAIC0xOTgsMTMgKzE5OSwxMyBAQCB2b2lkIFdlYkluc3BlY3RvckNsaWVudDo6
ZGlkU2V0U2VhcmNoaW5nRm9yTm9kZShib29sIGVuYWJsZWQpCiB9CiAjZW5kaWYKIAotdm9pZCBX
ZWJJbnNwZWN0b3JDbGllbnQ6OnBhZ2VPdmVybGF5RGVzdHJveWVkKFBhZ2VPdmVybGF5KikKK3Zv
aWQgV2ViSW5zcGVjdG9yQ2xpZW50OjpwYWdlT3ZlcmxheURlc3Ryb3llZChQYWdlT3ZlcmxheSYp
CiB7CiB9CiAKLXZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50Ojp3aWxsTW92ZVRvV2ViUGFnZShQYWdl
T3ZlcmxheSosIFdlYlBhZ2UqIHdlYlBhZ2UpCit2b2lkIFdlYkluc3BlY3RvckNsaWVudDo6d2ls
bE1vdmVUb1BhZ2UoUGFnZU92ZXJsYXkmLCBQYWdlKiBwYWdlKQogewotICAgIGlmICh3ZWJQYWdl
KQorICAgIGlmIChwYWdlKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBUaGUgcGFnZSBvdmVy
bGF5IGlzIG1vdmluZyBhd2F5IGZyb20gdGhlIHdlYiBwYWdlLCByZXNldCBpdC4KQEAgLTIxMiwx
NiArMjEzLDE2IEBAIHZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50Ojp3aWxsTW92ZVRvV2ViUGFnZShQ
YWdlT3ZlcmxheSosIFdlYlBhZ2UqIHdlYlBhZ2UpCiAgICAgbV9oaWdobGlnaHRPdmVybGF5ID0g
MDsKIH0KIAotdm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6OmRpZE1vdmVUb1dlYlBhZ2UoUGFnZU92
ZXJsYXkqLCBXZWJQYWdlKikKK3ZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50OjpkaWRNb3ZlVG9QYWdl
KFBhZ2VPdmVybGF5JiwgUGFnZSopCiB7CiB9CiAKLXZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50Ojpk
cmF3UmVjdChQYWdlT3ZlcmxheSosIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwg
Y29uc3QgV2ViQ29yZTo6SW50UmVjdCYgLypkaXJ0eVJlY3QqLykKK3ZvaWQgV2ViSW5zcGVjdG9y
Q2xpZW50OjpkcmF3UmVjdChQYWdlT3ZlcmxheSYsIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgLypkaXJ0eVJlY3QqLykKIHsKICAgICBt
X3BhZ2UtPmNvcmVQYWdlKCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS5kcmF3SGlnaGxpZ2h0KGNv
bnRleHQpOwogfQogCi1ib29sIFdlYkluc3BlY3RvckNsaWVudDo6bW91c2VFdmVudChQYWdlT3Zl
cmxheSosIGNvbnN0IFdlYk1vdXNlRXZlbnQmKQorYm9vbCBXZWJJbnNwZWN0b3JDbGllbnQ6Om1v
dXNlRXZlbnQoUGFnZU92ZXJsYXkmLCBjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmKQogewogICAg
IHJldHVybiBmYWxzZTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckNsaWVudC5oCmluZGV4IDc5OGNhYzcu
LmRmYzAzOGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1
cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50LmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JDbGllbnQuaApAQCAtMjgsMTYgKzI4LDE2IEBA
CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQogCi0jaW5jbHVkZSAiUGFnZU92ZXJsYXkuaCIKLQog
I2luY2x1ZGUgPFdlYkNvcmUvSW5zcGVjdG9yQ2xpZW50Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9J
bnNwZWN0b3JGb3J3YXJkaW5nLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9QYWdlT3ZlcmxheS5oPgog
I2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEdy
YXBoaWNzQ29udGV4dDsKIGNsYXNzIEdyYXBoaWNzTGF5ZXI7CiBjbGFzcyBJbnRSZWN0OworY2xh
c3MgUGFnZU92ZXJsYXk7CiB9CiAKIG5hbWVzcGFjZSBXZWJLaXQgewpAQCAtNDUsNyArNDUsNyBA
QCBuYW1lc3BhY2UgV2ViS2l0IHsKIGNsYXNzIFdlYlBhZ2U7CiBjbGFzcyBSZXBhaW50SW5kaWNh
dG9yTGF5ZXJDbGllbnQ7CiAKLWNsYXNzIFdlYkluc3BlY3RvckNsaWVudCA6IHB1YmxpYyBXZWJD
b3JlOjpJbnNwZWN0b3JDbGllbnQsIHByaXZhdGUgUGFnZU92ZXJsYXk6OkNsaWVudCB7CitjbGFz
cyBXZWJJbnNwZWN0b3JDbGllbnQgOiBwdWJsaWMgV2ViQ29yZTo6SW5zcGVjdG9yQ2xpZW50LCBw
cml2YXRlIFdlYkNvcmU6OlBhZ2VPdmVybGF5OjpDbGllbnQgewogZnJpZW5kIGNsYXNzIFJlcGFp
bnRJbmRpY2F0b3JMYXllckNsaWVudDsKIHB1YmxpYzoKICAgICBXZWJJbnNwZWN0b3JDbGllbnQo
V2ViUGFnZSopOwpAQCAtNzQsMTggKzc0LDE4IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lk
IHNob3dQYWludFJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jikgb3ZlcnJpZGU7CiAKICAg
ICAvLyBQYWdlT3ZlcmxheTo6Q2xpZW50Ci0gICAgdmlydHVhbCB2b2lkIHBhZ2VPdmVybGF5RGVz
dHJveWVkKFBhZ2VPdmVybGF5Kikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHdpbGxNb3Zl
VG9XZWJQYWdlKFBhZ2VPdmVybGF5KiwgV2ViUGFnZSopIG92ZXJyaWRlOwotICAgIHZpcnR1YWwg
dm9pZCBkaWRNb3ZlVG9XZWJQYWdlKFBhZ2VPdmVybGF5KiwgV2ViUGFnZSopIG92ZXJyaWRlOwot
ICAgIHZpcnR1YWwgdm9pZCBkcmF3UmVjdChQYWdlT3ZlcmxheSosIFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dCYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFs
IGJvb2wgbW91c2VFdmVudChQYWdlT3ZlcmxheSosIGNvbnN0IFdlYk1vdXNlRXZlbnQmKSBvdmVy
cmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFnZU92ZXJsYXlEZXN0cm95ZWQoV2ViQ29yZTo6UGFn
ZU92ZXJsYXkmKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgd2lsbE1vdmVUb1BhZ2UoV2Vi
Q29yZTo6UGFnZU92ZXJsYXkmLCBXZWJDb3JlOjpQYWdlKikgb3ZlcnJpZGU7CisgICAgdmlydHVh
bCB2b2lkIGRpZE1vdmVUb1BhZ2UoV2ViQ29yZTo6UGFnZU92ZXJsYXkmLCBXZWJDb3JlOjpQYWdl
Kikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGRyYXdSZWN0KFdlYkNvcmU6OlBhZ2VPdmVy
bGF5JiwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYp
IG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBtb3VzZUV2ZW50KFdlYkNvcmU6OlBhZ2VPdmVy
bGF5JiwgY29uc3QgV2ViQ29yZTo6UGxhdGZvcm1Nb3VzZUV2ZW50Jikgb3ZlcnJpZGU7CiAKICAg
ICB2b2lkIGFuaW1hdGlvbkVuZGVkRm9yTGF5ZXIoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXll
ciopOwogCiAgICAgV2ViUGFnZSogbV9wYWdlOwotICAgIFBhZ2VPdmVybGF5KiBtX2hpZ2hsaWdo
dE92ZXJsYXk7CisgICAgV2ViQ29yZTo6UGFnZU92ZXJsYXkqIG1faGlnaGxpZ2h0T3ZlcmxheTsK
ICAgICAKLSAgICBSZWZQdHI8UGFnZU92ZXJsYXk+IG1fcGFpbnRSZWN0T3ZlcmxheTsKKyAgICBS
ZWZQdHI8V2ViQ29yZTo6UGFnZU92ZXJsYXk+IG1fcGFpbnRSZWN0T3ZlcmxheTsKICAgICBzdGQ6
OnVuaXF1ZV9wdHI8UmVwYWludEluZGljYXRvckxheWVyQ2xpZW50PiBtX3BhaW50SW5kaWNhdG9y
TGF5ZXJDbGllbnQ7CiAgICAgSGFzaFNldDxXZWJDb3JlOjpHcmFwaGljc0xheWVyKj4gbV9wYWlu
dFJlY3RMYXllcnM7IC8vIElkZWFsbHkgdGhpcyB3b3VsZCBiZSBIYXNoU2V0PHN0ZDo6dW5pcXVl
X3B0cjxHcmFwaGljc0xheWVyPj4gYnV0IHRoYXQgZG9lc24ndCB3b3JrIHlldC4gd2Via2l0Lm9y
Zy9iLzEzNjE2NgogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9EcmF3aW5nQXJlYS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Ry
YXdpbmdBcmVhLmgKaW5kZXggZjc0YjRkZS4uZGIzYjgzZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhLmgKKysrIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhLmgKQEAgLTQ1LDYgKzQ1LDcgQEAgY2xh
c3MgTWVzc2FnZURlY29kZXI7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIERpc3BsYXlS
ZWZyZXNoTW9uaXRvcjsKK2NsYXNzIEZyYW1lOwogY2xhc3MgRnJhbWVWaWV3OwogY2xhc3MgR3Jh
cGhpY3NMYXllcjsKIGNsYXNzIEdyYXBoaWNzTGF5ZXJGYWN0b3J5OwpAQCAtMTIwLDYgKzEyMSw4
IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgYm9vbCBhZGp1c3RMYXllckZsdXNoVGhyb3R0bGlu
ZyhXZWJDb3JlOjpMYXllckZsdXNoVGhyb3R0bGVTdGF0ZTo6RmxhZ3MpIHsgcmV0dXJuIGZhbHNl
OyB9CiAKKyAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoVmlld092ZXJsYXlHcmFwaGljc0xheWVyKFdl
YkNvcmU6OkZyYW1lKiwgV2ViQ29yZTo6R3JhcGhpY3NMYXllciopIHsgfQorCiBwcm90ZWN0ZWQ6
CiAgICAgRHJhd2luZ0FyZWEoRHJhd2luZ0FyZWFUeXBlLCBXZWJQYWdlJik7CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5jcHAg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuY3BwCmlu
ZGV4IDFlMzQ2MmIuLmNjM2U3MmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNwcApAQCAtNDAsNiArNDAsOCBAQAogI2luY2x1
ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9NYWluRnJh
bWUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1BhZ2UuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1BhZ2VP
dmVybGF5Q29udHJvbGxlci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUGxhdGZvcm1Nb3VzZUV2ZW50
Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9QbHVnaW5Eb2N1bWVudC5oPgogCiB1c2luZyBuYW1lc3Bh
Y2UgV2ViQ29yZTsKQEAgLTYzLDcgKzY1LDcgQEAgc3RhdGljIFdlYkNvcmU6OkZpbmRPcHRpb25z
IGNvcmUoRmluZE9wdGlvbnMgb3B0aW9ucykKIAogRmluZENvbnRyb2xsZXI6OkZpbmRDb250cm9s
bGVyKFdlYlBhZ2UqIHdlYlBhZ2UpCiAgICAgOiBtX3dlYlBhZ2Uod2ViUGFnZSkKLSAgICAsIG1f
ZmluZFBhZ2VPdmVybGF5KDApCisgICAgLCBtX2ZpbmRQYWdlT3ZlcmxheShudWxscHRyKQogICAg
ICwgbV9pc1Nob3dpbmdGaW5kSW5kaWNhdG9yKGZhbHNlKQogICAgICwgbV9mb3VuZFN0cmluZ01h
dGNoSW5kZXgoLTEpCiB7CkBAIC0xODIsMTIgKzE4NCwxMiBAQCB2b2lkIEZpbmRDb250cm9sbGVy
Ojp1cGRhdGVGaW5kVUlBZnRlclBhZ2VTY3JvbGwoYm9vbCBmb3VuZCwgY29uc3QgU3RyaW5nJiBz
dHJpbgogCiAgICAgaWYgKCFzaG91bGRTaG93T3ZlcmxheSkgewogICAgICAgICBpZiAobV9maW5k
UGFnZU92ZXJsYXkpCi0gICAgICAgICAgICBtX3dlYlBhZ2UtPnVuaW5zdGFsbFBhZ2VPdmVybGF5
KG1fZmluZFBhZ2VPdmVybGF5LCBQYWdlT3ZlcmxheTo6RmFkZU1vZGU6OkZhZGUpOworICAgICAg
ICAgICAgbV93ZWJQYWdlLT5jb3JlUGFnZSgpLT5wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKS51bmlu
c3RhbGxQYWdlT3ZlcmxheShtX2ZpbmRQYWdlT3ZlcmxheSwgUGFnZU92ZXJsYXk6OkZhZGVNb2Rl
OjpGYWRlKTsKICAgICB9IGVsc2UgewogICAgICAgICBpZiAoIW1fZmluZFBhZ2VPdmVybGF5KSB7
Ci0gICAgICAgICAgICBSZWZQdHI8UGFnZU92ZXJsYXk+IGZpbmRQYWdlT3ZlcmxheSA9IFBhZ2VP
dmVybGF5OjpjcmVhdGUodGhpcyk7CisgICAgICAgICAgICBSZWZQdHI8UGFnZU92ZXJsYXk+IGZp
bmRQYWdlT3ZlcmxheSA9IFBhZ2VPdmVybGF5OjpjcmVhdGUoKnRoaXMpOwogICAgICAgICAgICAg
bV9maW5kUGFnZU92ZXJsYXkgPSBmaW5kUGFnZU92ZXJsYXkuZ2V0KCk7Ci0gICAgICAgICAgICBt
X3dlYlBhZ2UtPmluc3RhbGxQYWdlT3ZlcmxheShmaW5kUGFnZU92ZXJsYXkucmVsZWFzZSgpLCBQ
YWdlT3ZlcmxheTo6RmFkZU1vZGU6OkZhZGUpOworICAgICAgICAgICAgbV93ZWJQYWdlLT5jb3Jl
UGFnZSgpLT5wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKS5pbnN0YWxsUGFnZU92ZXJsYXkoZmluZFBh
Z2VPdmVybGF5LnJlbGVhc2UoKSwgUGFnZU92ZXJsYXk6OkZhZGVNb2RlOjpGYWRlKTsKICAgICAg
ICAgfQogICAgICAgICBtX2ZpbmRQYWdlT3ZlcmxheS0+c2V0TmVlZHNEaXNwbGF5KCk7CiAgICAg
fQpAQCAtMzMwLDcgKzMzMiw3IEBAIHZvaWQgRmluZENvbnRyb2xsZXI6OmhpZGVGaW5kVUkoKQog
ewogICAgIG1fZmluZE1hdGNoZXMuY2xlYXIoKTsKICAgICBpZiAobV9maW5kUGFnZU92ZXJsYXkp
Ci0gICAgICAgIG1fd2ViUGFnZS0+dW5pbnN0YWxsUGFnZU92ZXJsYXkobV9maW5kUGFnZU92ZXJs
YXksIFBhZ2VPdmVybGF5OjpGYWRlTW9kZTo6RmFkZSk7CisgICAgICAgIG1fd2ViUGFnZS0+Y29y
ZVBhZ2UoKS0+cGFnZU92ZXJsYXlDb250cm9sbGVyKCkudW5pbnN0YWxsUGFnZU92ZXJsYXkobV9m
aW5kUGFnZU92ZXJsYXksIFBhZ2VPdmVybGF5OjpGYWRlTW9kZTo6RmFkZSk7CiAKICAgICBQbHVn
aW5WaWV3KiBwbHVnaW5WaWV3ID0gcGx1Z2luVmlld0ZvckZyYW1lKG1fd2ViUGFnZS0+bWFpbkZy
YW1lKCkpOwogICAgIApAQCAtNDM5LDIwICs0NDEsMjAgQEAgVmVjdG9yPEludFJlY3Q+IEZpbmRD
b250cm9sbGVyOjpyZWN0c0ZvclRleHRNYXRjaGVzKCkKICAgICByZXR1cm4gcmVjdHM7CiB9CiAK
LXZvaWQgRmluZENvbnRyb2xsZXI6OnBhZ2VPdmVybGF5RGVzdHJveWVkKFBhZ2VPdmVybGF5KikK
K3ZvaWQgRmluZENvbnRyb2xsZXI6OnBhZ2VPdmVybGF5RGVzdHJveWVkKFBhZ2VPdmVybGF5JikK
IHsKIH0KIAotdm9pZCBGaW5kQ29udHJvbGxlcjo6d2lsbE1vdmVUb1dlYlBhZ2UoUGFnZU92ZXJs
YXkqLCBXZWJQYWdlKiB3ZWJQYWdlKQordm9pZCBGaW5kQ29udHJvbGxlcjo6d2lsbE1vdmVUb1Bh
Z2UoUGFnZU92ZXJsYXkmLCBQYWdlKiBwYWdlKQogewotICAgIGlmICh3ZWJQYWdlKQorICAgIGlm
IChwYWdlKQogICAgICAgICByZXR1cm47CiAKICAgICBBU1NFUlQobV9maW5kUGFnZU92ZXJsYXkp
OwogICAgIG1fZmluZFBhZ2VPdmVybGF5ID0gMDsKIH0KICAgICAKLXZvaWQgRmluZENvbnRyb2xs
ZXI6OmRpZE1vdmVUb1dlYlBhZ2UoUGFnZU92ZXJsYXkqLCBXZWJQYWdlKikKK3ZvaWQgRmluZENv
bnRyb2xsZXI6OmRpZE1vdmVUb1BhZ2UoUGFnZU92ZXJsYXkmLCBQYWdlKikKIHsKIH0KIApAQCAt
NDY4LDcgKzQ3MCw3IEBAIGNvbnN0IGZsb2F0IHNoYWRvd0JsdXJSYWRpdXMgPSAxOwogY29uc3Qg
ZmxvYXQgc2hhZG93Q29sb3JBbHBoYSA9IDAuNTsKICNlbmRpZgogCi12b2lkIEZpbmRDb250cm9s
bGVyOjpkcmF3UmVjdChQYWdlT3ZlcmxheSosIEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250
ZXh0LCBjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpCit2b2lkIEZpbmRDb250cm9sbGVyOjpkcmF3
UmVjdChQYWdlT3ZlcmxheSYsIEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0LCBjb25z
dCBJbnRSZWN0JiBkaXJ0eVJlY3QpCiB7CiAgICAgQ29sb3Igb3ZlcmxheUJhY2tncm91bmRDb2xv
cigwLjFmLCAwLjFmLCAwLjFmLCAwLjI1Zik7CiAKQEAgLTUwNiw5ICs1MDgsOSBAQCB2b2lkIEZp
bmRDb250cm9sbGVyOjpkcmF3UmVjdChQYWdlT3ZlcmxheSosIEdyYXBoaWNzQ29udGV4dCYgZ3Jh
cGhpY3NDb250ZXh0LCBjbwogICAgIH0KIH0KIAotYm9vbCBGaW5kQ29udHJvbGxlcjo6bW91c2VF
dmVudChQYWdlT3ZlcmxheSosIGNvbnN0IFdlYk1vdXNlRXZlbnQmIG1vdXNlRXZlbnQpCitib29s
IEZpbmRDb250cm9sbGVyOjptb3VzZUV2ZW50KFBhZ2VPdmVybGF5JiwgY29uc3QgUGxhdGZvcm1N
b3VzZUV2ZW50JiBtb3VzZUV2ZW50KQogewotICAgIGlmIChtb3VzZUV2ZW50LnR5cGUoKSA9PSBX
ZWJFdmVudDo6TW91c2VEb3duKQorICAgIGlmIChtb3VzZUV2ZW50LnR5cGUoKSA9PSBQbGF0Zm9y
bUV2ZW50OjpNb3VzZVByZXNzZWQpCiAgICAgICAgIGhpZGVGaW5kVUkoKTsKIAogICAgIHJldHVy
biBmYWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9G
aW5kQ29udHJvbGxlci5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRD
b250cm9sbGVyLmgKaW5kZXggMjgwNjNmYy4uOTA1ZWQxZiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmgKKysrIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmgKQEAgLTI2LDEwICsyNiwx
MCBAQAogI2lmbmRlZiBGaW5kQ29udHJvbGxlcl9oCiAjZGVmaW5lIEZpbmRDb250cm9sbGVyX2gK
IAotI2luY2x1ZGUgIlBhZ2VPdmVybGF5LmgiCiAjaW5jbHVkZSAiU2hhcmVhYmxlQml0bWFwLmgi
CiAjaW5jbHVkZSAiV2ViRmluZE9wdGlvbnMuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0ludFJlY3Qu
aD4KKyNpbmNsdWRlIDxXZWJDb3JlL1BhZ2VPdmVybGF5Lmg+CiAjaW5jbHVkZSA8d3RmL0Zvcndh
cmQuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+CkBAIC00NSwxMCArNDUsOSBAQCBjbGFzcyBSYW5nZTsKIAogbmFtZXNwYWNlIFdlYktpdCB7
CiAKLWNsYXNzIFBhZ2VPdmVybGF5OwogY2xhc3MgV2ViUGFnZTsKIAotY2xhc3MgRmluZENvbnRy
b2xsZXIgOiBwcml2YXRlIFBhZ2VPdmVybGF5OjpDbGllbnQgeworY2xhc3MgRmluZENvbnRyb2xs
ZXIgOiBwcml2YXRlIFdlYkNvcmU6OlBhZ2VPdmVybGF5OjpDbGllbnQgewogICAgIFdURl9NQUtF
X05PTkNPUFlBQkxFKEZpbmRDb250cm9sbGVyKTsKIAogcHVibGljOgpAQCAtNzEsMTEgKzcwLDEx
IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICAvLyBQYWdlT3ZlcmxheTo6Q2xpZW50LgotICAg
IHZpcnR1YWwgdm9pZCBwYWdlT3ZlcmxheURlc3Ryb3llZChQYWdlT3ZlcmxheSopOwotICAgIHZp
cnR1YWwgdm9pZCB3aWxsTW92ZVRvV2ViUGFnZShQYWdlT3ZlcmxheSosIFdlYlBhZ2UqKTsKLSAg
ICB2aXJ0dWFsIHZvaWQgZGlkTW92ZVRvV2ViUGFnZShQYWdlT3ZlcmxheSosIFdlYlBhZ2UqKTsK
LSAgICB2aXJ0dWFsIGJvb2wgbW91c2VFdmVudChQYWdlT3ZlcmxheSosIGNvbnN0IFdlYk1vdXNl
RXZlbnQmKTsKLSAgICB2aXJ0dWFsIHZvaWQgZHJhd1JlY3QoUGFnZU92ZXJsYXkqLCBXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQmLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBkaXJ0eVJlY3QpOwor
ICAgIHZpcnR1YWwgdm9pZCBwYWdlT3ZlcmxheURlc3Ryb3llZChXZWJDb3JlOjpQYWdlT3Zlcmxh
eSYpOworICAgIHZpcnR1YWwgdm9pZCB3aWxsTW92ZVRvUGFnZShXZWJDb3JlOjpQYWdlT3Zlcmxh
eSYsIFdlYkNvcmU6OlBhZ2UqKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkTW92ZVRvUGFnZShXZWJD
b3JlOjpQYWdlT3ZlcmxheSYsIFdlYkNvcmU6OlBhZ2UqKTsKKyAgICB2aXJ0dWFsIGJvb2wgbW91
c2VFdmVudChXZWJDb3JlOjpQYWdlT3ZlcmxheSYsIGNvbnN0IFdlYkNvcmU6OlBsYXRmb3JtTW91
c2VFdmVudCYpOworICAgIHZpcnR1YWwgdm9pZCBkcmF3UmVjdChXZWJDb3JlOjpQYWdlT3Zlcmxh
eSYsIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGRp
cnR5UmVjdCk7CiAKICAgICBWZWN0b3I8V2ViQ29yZTo6SW50UmVjdD4gcmVjdHNGb3JUZXh0TWF0
Y2hlcygpOwogICAgIGJvb2wgZ2V0RmluZEluZGljYXRvckJpdG1hcEFuZFJlY3QoV2ViQ29yZTo6
RnJhbWUmLCBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSYsIFdlYkNvcmU6OkludFJlY3QmIHNlbGVj
dGlvblJlY3QpOwpAQCAtODgsNyArODcsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgZGlkSGlkZUZp
bmRJbmRpY2F0b3IoKTsKIAogICAgIFdlYlBhZ2UqIG1fd2ViUGFnZTsKLSAgICBQYWdlT3Zlcmxh
eSogbV9maW5kUGFnZU92ZXJsYXk7CisgICAgV2ViQ29yZTo6UGFnZU92ZXJsYXkqIG1fZmluZFBh
Z2VPdmVybGF5OwogCiAgICAgLy8gV2hldGhlciB0aGUgVUkgcHJvY2VzcyBpcyBzaG93aW5nIHRo
ZSBmaW5kIGluZGljYXRvci4gTm90ZSB0aGF0IHRoaXMgY2FuIGJlIHRydWUgZXZlbiBpZgogICAg
IC8vIHRoZSBmaW5kIGluZGljYXRvciBpc24ndCBzaG93aW5nLCBidXQgaXQgd2lsbCBuZXZlciBi
ZSBmYWxzZSB3aGVuIGl0IGlzIHNob3dpbmcuCkBAIC05OSw3ICs5OCw3IEBAIHByaXZhdGU6CiAg
ICAgaW50IG1fZm91bmRTdHJpbmdNYXRjaEluZGV4OwogCiAjaWYgUExBVEZPUk0oSU9TKQotICAg
IFJlZlB0cjxQYWdlT3ZlcmxheT4gbV9maW5kSW5kaWNhdG9yT3ZlcmxheTsKKyAgICBSZWZQdHI8
V2ViQ29yZTo6UGFnZU92ZXJsYXk+IG1fZmluZEluZGljYXRvck92ZXJsYXk7CiAgICAgc3RkOjp1
bmlxdWVfcHRyPEZpbmRJbmRpY2F0b3JPdmVybGF5Q2xpZW50SU9TPiBtX2ZpbmRJbmRpY2F0b3JP
dmVybGF5Q2xpZW50OwogI2VuZGlmCiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUhvc3QuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9MYXllclRyZWVIb3N0LmgKaW5kZXggM2ZkNDk1NC4uNjRlZWM1MSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUhvc3QuaAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlSG9zdC5oCkBA
IC00Nyw3ICs0Nyw2IEBAIGNsYXNzIEdyYXBoaWNzTGF5ZXJGYWN0b3J5OwogCiBuYW1lc3BhY2Ug
V2ViS2l0IHsKIAotY2xhc3MgUGFnZU92ZXJsYXk7CiBjbGFzcyBVcGRhdGVJbmZvOwogY2xhc3Mg
V2ViUGFnZTsKIApAQCAtNzIsMTEgKzcxLDYgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBk
ZXZpY2VPclBhZ2VTY2FsZUZhY3RvckNoYW5nZWQoKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHBh
Z2VCYWNrZ3JvdW5kVHJhbnNwYXJlbmN5Q2hhbmdlZCgpID0gMDsKIAotICAgIHZpcnR1YWwgdm9p
ZCBkaWRJbnN0YWxsUGFnZU92ZXJsYXkoUGFnZU92ZXJsYXkqKSB7IH0KLSAgICB2aXJ0dWFsIHZv
aWQgZGlkVW5pbnN0YWxsUGFnZU92ZXJsYXkoUGFnZU92ZXJsYXkqKSB7IH0KLSAgICB2aXJ0dWFs
IHZvaWQgc2V0UGFnZU92ZXJsYXlOZWVkc0Rpc3BsYXkoUGFnZU92ZXJsYXkqLCBjb25zdCBXZWJD
b3JlOjpJbnRSZWN0JikgeyB9Ci0gICAgdmlydHVhbCB2b2lkIHNldFBhZ2VPdmVybGF5T3BhY2l0
eShQYWdlT3ZlcmxheSosIGZsb2F0KSB7IH0KLQogICAgIHZpcnR1YWwgdm9pZCBwYXVzZVJlbmRl
cmluZygpIHsgfQogICAgIHZpcnR1YWwgdm9pZCByZXN1bWVSZW5kZXJpbmcoKSB7IH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1BhZ2VPdmVybGF5LmNw
cCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9QYWdlT3ZlcmxheS5jcHAKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhkODgxYjYuLjAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1BhZ2VPdmVybGF5LmNwcAorKysgL2Rldi9udWxs
CkBAIC0xLDI1MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIlBhZ2VPdmVybGF5LmgiCi0KLSNpbmNsdWRlICJXZWJQYWdlLmgiCi0jaW5jbHVkZSAi
V2ViUHJvY2Vzcy5oIgotI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVWaWV3Lmg+Ci0jaW5jbHVkZSA8
V2ViQ29yZS9HcmFwaGljc0NvbnRleHQuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL01haW5GcmFtZS5o
PgotI2luY2x1ZGUgPFdlYkNvcmUvUGFnZS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvU2Nyb2xsYmFy
VGhlbWUuaD4KLSNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KLQotdXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU7Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1zdGF0aWMgY29uc3QgZG91YmxlIGZh
ZGVBbmltYXRpb25EdXJhdGlvbiA9IDAuMjsKLXN0YXRpYyBjb25zdCBkb3VibGUgZmFkZUFuaW1h
dGlvbkZyYW1lUmF0ZSA9IDMwOwotCi1QYXNzUmVmUHRyPFBhZ2VPdmVybGF5PiBQYWdlT3Zlcmxh
eTo6Y3JlYXRlKENsaWVudCogY2xpZW50LCBPdmVybGF5VHlwZSBvdmVybGF5VHlwZSkKLXsKLSAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IFBhZ2VPdmVybGF5KGNsaWVudCwgb3ZlcmxheVR5cGUpKTsK
LX0KLQotUGFnZU92ZXJsYXk6OlBhZ2VPdmVybGF5KENsaWVudCogY2xpZW50LCBPdmVybGF5VHlw
ZSBvdmVybGF5VHlwZSkKLSAgICA6IG1fY2xpZW50KGNsaWVudCkKLSAgICAsIG1fd2ViUGFnZShu
dWxscHRyKQotICAgICwgbV9mYWRlQW5pbWF0aW9uVGltZXIoUnVuTG9vcDo6bWFpbigpLCB0aGlz
LCAmUGFnZU92ZXJsYXk6OmZhZGVBbmltYXRpb25UaW1lckZpcmVkKQotICAgICwgbV9mYWRlQW5p
bWF0aW9uU3RhcnRUaW1lKDApCi0gICAgLCBtX2ZhZGVBbmltYXRpb25EdXJhdGlvbihmYWRlQW5p
bWF0aW9uRHVyYXRpb24pCi0gICAgLCBtX2ZhZGVBbmltYXRpb25UeXBlKE5vQW5pbWF0aW9uKQot
ICAgICwgbV9mcmFjdGlvbkZhZGVkSW4oMSkKLSAgICAsIG1fb3ZlcmxheVR5cGUob3ZlcmxheVR5
cGUpCi0gICAgLCBtX2JhY2tncm91bmRDb2xvcihDb2xvcjo6dHJhbnNwYXJlbnQpCi17Ci19Ci0K
LVBhZ2VPdmVybGF5Ojp+UGFnZU92ZXJsYXkoKQotewotfQotCi1JbnRSZWN0IFBhZ2VPdmVybGF5
Ojpib3VuZHMoKSBjb25zdAotewotICAgIGlmICghbV9vdmVycmlkZUZyYW1lLmlzRW1wdHkoKSkK
LSAgICAgICAgcmV0dXJuIEludFJlY3QoSW50UG9pbnQoKSwgbV9vdmVycmlkZUZyYW1lLnNpemUo
KSk7Ci0KLSAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IG1fd2ViUGFnZS0+bWFpbkZyYW1lVmll
dygpOwotCi0gICAgc3dpdGNoIChtX292ZXJsYXlUeXBlKSB7Ci0gICAgY2FzZSBPdmVybGF5VHlw
ZTo6VmlldzogewotICAgICAgICBpbnQgd2lkdGggPSBmcmFtZVZpZXctPndpZHRoKCk7Ci0gICAg
ICAgIGludCBoZWlnaHQgPSBmcmFtZVZpZXctPmhlaWdodCgpOwotCi0gICAgICAgIGlmICghU2Ny
b2xsYmFyVGhlbWU6OnRoZW1lKCktPnVzZXNPdmVybGF5U2Nyb2xsYmFycygpKSB7Ci0gICAgICAg
ICAgICBpZiAoZnJhbWVWaWV3LT52ZXJ0aWNhbFNjcm9sbGJhcigpKQotICAgICAgICAgICAgICAg
IHdpZHRoIC09IGZyYW1lVmlldy0+dmVydGljYWxTY3JvbGxiYXIoKS0+d2lkdGgoKTsKLSAgICAg
ICAgICAgIGlmIChmcmFtZVZpZXctPmhvcml6b250YWxTY3JvbGxiYXIoKSkKLSAgICAgICAgICAg
ICAgICBoZWlnaHQgLT0gZnJhbWVWaWV3LT5ob3Jpem9udGFsU2Nyb2xsYmFyKCktPmhlaWdodCgp
OwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBJbnRSZWN0KDAsIDAsIHdpZHRoLCBoZWlnaHQp
OwotICAgIH0KLSAgICBjYXNlIE92ZXJsYXlUeXBlOjpEb2N1bWVudDoKLSAgICAgICAgcmV0dXJu
IEludFJlY3QoSW50UG9pbnQoKSwgZnJhbWVWaWV3LT5jb250ZW50c1NpemUoKSk7Ci0gICAgfTsK
LQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBJbnRSZWN0KEludFBvaW50
KCksIGZyYW1lVmlldy0+Y29udGVudHNTaXplKCkpOwotfQotCi1JbnRSZWN0IFBhZ2VPdmVybGF5
OjpmcmFtZSgpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX292ZXJyaWRlRnJhbWUuaXNFbXB0eSgpKQot
ICAgICAgICByZXR1cm4gbV9vdmVycmlkZUZyYW1lOwotCi0gICAgcmV0dXJuIGJvdW5kcygpOwot
fQotCi12b2lkIFBhZ2VPdmVybGF5OjpzZXRGcmFtZShJbnRSZWN0IGZyYW1lKQotewotICAgIGlm
IChtX292ZXJyaWRlRnJhbWUgPT0gZnJhbWUpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fb3Zl
cnJpZGVGcmFtZSA9IGZyYW1lOwotCi0gICAgaWYgKG1fd2ViUGFnZSkKLSAgICAgICAgbV93ZWJQ
YWdlLT5wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKS5kaWRDaGFuZ2VPdmVybGF5RnJhbWUoKnRoaXMp
OwotfQotCi12b2lkIFBhZ2VPdmVybGF5OjpzZXRCYWNrZ3JvdW5kQ29sb3IoUkdCQTMyIGJhY2tn
cm91bmRDb2xvcikKLXsKLSAgICBpZiAobV9iYWNrZ3JvdW5kQ29sb3IgPT0gYmFja2dyb3VuZENv
bG9yKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2JhY2tncm91bmRDb2xvciA9IGJhY2tncm91
bmRDb2xvcjsKLQotICAgIGlmIChtX3dlYlBhZ2UpCi0gICAgICAgIG1fd2ViUGFnZS0+cGFnZU92
ZXJsYXlDb250cm9sbGVyKCkuZGlkQ2hhbmdlT3ZlcmxheUJhY2tncm91bmRDb2xvcigqdGhpcyk7
Ci19Ci0KLXZvaWQgUGFnZU92ZXJsYXk6OnNldFBhZ2UoV2ViUGFnZSogd2ViUGFnZSkKLXsKLSAg
ICBtX2NsaWVudC0+d2lsbE1vdmVUb1dlYlBhZ2UodGhpcywgd2ViUGFnZSk7Ci0gICAgbV93ZWJQ
YWdlID0gd2ViUGFnZTsKLSAgICBtX2NsaWVudC0+ZGlkTW92ZVRvV2ViUGFnZSh0aGlzLCB3ZWJQ
YWdlKTsKLQotICAgIG1fZmFkZUFuaW1hdGlvblRpbWVyLnN0b3AoKTsKLX0KLQotdm9pZCBQYWdl
T3ZlcmxheTo6c2V0TmVlZHNEaXNwbGF5KGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCkKLXsKLSAg
ICBpZiAoIW1fd2ViUGFnZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV93ZWJQYWdlLT5wYWdl
T3ZlcmxheUNvbnRyb2xsZXIoKS5zZXRQYWdlT3ZlcmxheU9wYWNpdHkoKnRoaXMsIG1fZnJhY3Rp
b25GYWRlZEluKTsKLSAgICBtX3dlYlBhZ2UtPnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLnNldFBh
Z2VPdmVybGF5TmVlZHNEaXNwbGF5KCp0aGlzLCBkaXJ0eVJlY3QpOwotfQotCi12b2lkIFBhZ2VP
dmVybGF5OjpzZXROZWVkc0Rpc3BsYXkoKQotewotICAgIHNldE5lZWRzRGlzcGxheShib3VuZHMo
KSk7Ci19Ci0KLXZvaWQgUGFnZU92ZXJsYXk6OmRyYXdSZWN0KEdyYXBoaWNzQ29udGV4dCYgZ3Jh
cGhpY3NDb250ZXh0LCBjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpCi17Ci0gICAgLy8gSWYgdGhl
IGRpcnR5IHJlY3QgaXMgb3V0c2lkZSB0aGUgYm91bmRzLCBpZ25vcmUgaXQuCi0gICAgSW50UmVj
dCBwYWludFJlY3QgPSBpbnRlcnNlY3Rpb24oZGlydHlSZWN0LCBib3VuZHMoKSk7Ci0gICAgaWYg
KHBhaW50UmVjdC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEdyYXBoaWNzQ29u
dGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihncmFwaGljc0NvbnRleHQpOwotICAgIG1fY2xpZW50
LT5kcmF3UmVjdCh0aGlzLCBncmFwaGljc0NvbnRleHQsIHBhaW50UmVjdCk7Ci19Ci0gICAgCi1i
b29sIFBhZ2VPdmVybGF5Ojptb3VzZUV2ZW50KGNvbnN0IFdlYk1vdXNlRXZlbnQmIG1vdXNlRXZl
bnQpCi17Ci0gICAgSW50UG9pbnQgbW91c2VQb3NpdGlvbkluT3ZlcmxheUNvb3JkaW5hdGVzKG1v
dXNlRXZlbnQucG9zaXRpb24oKSk7Ci0KLSAgICBpZiAobV9vdmVybGF5VHlwZSA9PSBQYWdlT3Zl
cmxheTo6T3ZlcmxheVR5cGU6OkRvY3VtZW50KQotICAgICAgICBtb3VzZVBvc2l0aW9uSW5PdmVy
bGF5Q29vcmRpbmF0ZXMgPSBtX3dlYlBhZ2UtPmNvcmVQYWdlKCktPm1haW5GcmFtZSgpLnZpZXco
KS0+cm9vdFZpZXdUb0NvbnRlbnRzKG1vdXNlUG9zaXRpb25Jbk92ZXJsYXlDb29yZGluYXRlcyk7
Ci0KLSAgICAvLyBJZ25vcmUgZXZlbnRzIG91dHNpZGUgdGhlIGJvdW5kcy4KLSAgICBpZiAoIWJv
dW5kcygpLmNvbnRhaW5zKG1vdXNlUG9zaXRpb25Jbk92ZXJsYXlDb29yZGluYXRlcykpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiBtX2NsaWVudC0+bW91c2VFdmVudCh0aGlz
LCBtb3VzZUV2ZW50KTsKLX0KLQotdm9pZCBQYWdlT3ZlcmxheTo6ZGlkU2Nyb2xsRnJhbWUoRnJh
bWUqIGZyYW1lKQotewotICAgIG1fY2xpZW50LT5kaWRTY3JvbGxGcmFtZSh0aGlzLCBmcmFtZSk7
Ci19Ci0KLVdLVHlwZVJlZiBQYWdlT3ZlcmxheTo6Y29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVW
YWx1ZShXS1N0cmluZ1JlZiBhdHRyaWJ1dGUsIFdLVHlwZVJlZiBwYXJhbWV0ZXIpCi17Ci0gICAg
cmV0dXJuIG1fY2xpZW50LT5jb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlKHRoaXMsIGF0
dHJpYnV0ZSwgcGFyYW1ldGVyKTsKLX0KLQotV0tBcnJheVJlZiBQYWdlT3ZlcmxheTo6Y29weUFj
Y2Vzc2liaWxpdHlBdHRyaWJ1dGVOYW1lcyhib29sIHBhcmFtZXRlcml6ZWROYW1lcykKLXsKLSAg
ICByZXR1cm4gbV9jbGllbnQtPmNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlTmFtZXModGhpcywg
cGFyYW1ldGVyaXplZE5hbWVzKTsKLX0KLQotdm9pZCBQYWdlT3ZlcmxheTo6c3RhcnRGYWRlSW5B
bmltYXRpb24oKQotewotICAgIG1fZnJhY3Rpb25GYWRlZEluID0gMDsKLSAgICBtX2ZhZGVBbmlt
YXRpb25UeXBlID0gRmFkZUluQW5pbWF0aW9uOwotCi0gICAgc3RhcnRGYWRlQW5pbWF0aW9uKCk7
Ci19Ci0KLXZvaWQgUGFnZU92ZXJsYXk6OnN0YXJ0RmFkZU91dEFuaW1hdGlvbigpCi17Ci0gICAg
bV9mcmFjdGlvbkZhZGVkSW4gPSAxOwotICAgIG1fZmFkZUFuaW1hdGlvblR5cGUgPSBGYWRlT3V0
QW5pbWF0aW9uOwotCi0gICAgc3RhcnRGYWRlQW5pbWF0aW9uKCk7Ci19Ci0KLXZvaWQgUGFnZU92
ZXJsYXk6OnN0b3BGYWRlT3V0QW5pbWF0aW9uKCkKLXsKLSAgICBtX2ZyYWN0aW9uRmFkZWRJbiA9
IDEuMDsKLSAgICBtX2ZhZGVBbmltYXRpb25UaW1lci5zdG9wKCk7Ci19Ci0KLXZvaWQgUGFnZU92
ZXJsYXk6OnN0YXJ0RmFkZUFuaW1hdGlvbigpCi17Ci0gICAgbV9mYWRlQW5pbWF0aW9uU3RhcnRU
aW1lID0gY3VycmVudFRpbWUoKTsKLSAgICBtX2ZhZGVBbmltYXRpb25UaW1lci5zdGFydFJlcGVh
dGluZygxIC8gZmFkZUFuaW1hdGlvbkZyYW1lUmF0ZSk7Ci19Ci0KLXZvaWQgUGFnZU92ZXJsYXk6
OmZhZGVBbmltYXRpb25UaW1lckZpcmVkKCkKLXsKLSAgICBmbG9hdCBhbmltYXRpb25Qcm9ncmVz
cyA9IChjdXJyZW50VGltZSgpIC0gbV9mYWRlQW5pbWF0aW9uU3RhcnRUaW1lKSAvIG1fZmFkZUFu
aW1hdGlvbkR1cmF0aW9uOwotCi0gICAgaWYgKGFuaW1hdGlvblByb2dyZXNzID49IDEuMCkKLSAg
ICAgICAgYW5pbWF0aW9uUHJvZ3Jlc3MgPSAxLjA7Ci0KLSAgICBkb3VibGUgc2luZSA9IHNpbihw
aU92ZXJUd29GbG9hdCAqIGFuaW1hdGlvblByb2dyZXNzKTsKLSAgICBmbG9hdCBmYWRlQW5pbWF0
aW9uVmFsdWUgPSBzaW5lICogc2luZTsKLQotICAgIG1fZnJhY3Rpb25GYWRlZEluID0gKG1fZmFk
ZUFuaW1hdGlvblR5cGUgPT0gRmFkZUluQW5pbWF0aW9uKSA/IGZhZGVBbmltYXRpb25WYWx1ZSA6
IDEgLSBmYWRlQW5pbWF0aW9uVmFsdWU7Ci0gICAgbV93ZWJQYWdlLT5wYWdlT3ZlcmxheUNvbnRy
b2xsZXIoKS5zZXRQYWdlT3ZlcmxheU9wYWNpdHkoKnRoaXMsIG1fZnJhY3Rpb25GYWRlZEluKTsK
LQotICAgIGlmIChhbmltYXRpb25Qcm9ncmVzcyA9PSAxLjApIHsKLSAgICAgICAgbV9mYWRlQW5p
bWF0aW9uVGltZXIuc3RvcCgpOwotCi0gICAgICAgIGJvb2wgd2FzRmFkaW5nT3V0ID0gbV9mYWRl
QW5pbWF0aW9uVHlwZSA9PSBGYWRlT3V0QW5pbWF0aW9uOwotICAgICAgICBtX2ZhZGVBbmltYXRp
b25UeXBlID0gTm9BbmltYXRpb247Ci0KLSAgICAgICAgLy8gSWYgdGhpcyB3YXMgYSBmYWRlIG91
dCwgZ28gYWhlYWQgYW5kIHVuaW5zdGFsbCB0aGUgcGFnZSBvdmVybGF5LgotICAgICAgICBpZiAo
d2FzRmFkaW5nT3V0KQotICAgICAgICAgICAgbV93ZWJQYWdlLT51bmluc3RhbGxQYWdlT3Zlcmxh
eSh0aGlzLCBQYWdlT3ZlcmxheTo6RmFkZU1vZGU6OkRvTm90RmFkZSk7Ci0gICAgfQotfQotCi12
b2lkIFBhZ2VPdmVybGF5OjpjbGVhcigpCi17Ci0gICAgbV93ZWJQYWdlLT5wYWdlT3ZlcmxheUNv
bnRyb2xsZXIoKS5jbGVhclBhZ2VPdmVybGF5KCp0aGlzKTsKLX0KLQotV2ViQ29yZTo6R3JhcGhp
Y3NMYXllciogUGFnZU92ZXJsYXk6OmxheWVyKCkKLXsKLSAgICByZXR1cm4gbV93ZWJQYWdlLT5w
YWdlT3ZlcmxheUNvbnRyb2xsZXIoKS5sYXllckZvck92ZXJsYXkoKnRoaXMpOwotfQotCi19IC8v
IG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9QYWdlT3ZlcmxheS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L1BhZ2VPdmVybGF5LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMyMjVmMGQuLjAw
MDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1BhZ2VPdmVybGF5
LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMzcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYg
UGFnZU92ZXJsYXlfaAotI2RlZmluZSBQYWdlT3ZlcmxheV9oCi0KLSNpbmNsdWRlICJBUElPYmpl
Y3QuaCIKLSNpbmNsdWRlICJXS0Jhc2UuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0NvbG9yLmg+Ci0j
aW5jbHVkZSA8V2ViQ29yZS9JbnRSZWN0Lmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4K
LSNpbmNsdWRlIDx3dGYvUnVuTG9vcC5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBG
cmFtZTsKLWNsYXNzIEdyYXBoaWNzQ29udGV4dDsKLWNsYXNzIEdyYXBoaWNzTGF5ZXI7Ci19Ci0K
LW5hbWVzcGFjZSBXZWJLaXQgewotCi1jbGFzcyBXZWJGcmFtZTsKLWNsYXNzIFdlYk1vdXNlRXZl
bnQ7Ci1jbGFzcyBXZWJQYWdlOwotCi1jbGFzcyBQYWdlT3ZlcmxheSA6IHB1YmxpYyBBUEk6Ok9i
amVjdEltcGw8QVBJOjpPYmplY3Q6OlR5cGU6OkJ1bmRsZVBhZ2VPdmVybGF5PiB7Ci1wdWJsaWM6
Ci0gICAgY2xhc3MgQ2xpZW50IHsKLSAgICBwcm90ZWN0ZWQ6Ci0gICAgICAgIHZpcnR1YWwgfkNs
aWVudCgpIHsgfQotICAgIAotICAgIHB1YmxpYzoKLSAgICAgICAgdmlydHVhbCB2b2lkIHBhZ2VP
dmVybGF5RGVzdHJveWVkKFBhZ2VPdmVybGF5KikgPSAwOwotICAgICAgICB2aXJ0dWFsIHZvaWQg
d2lsbE1vdmVUb1dlYlBhZ2UoUGFnZU92ZXJsYXkqLCBXZWJQYWdlKikgPSAwOwotICAgICAgICB2
aXJ0dWFsIHZvaWQgZGlkTW92ZVRvV2ViUGFnZShQYWdlT3ZlcmxheSosIFdlYlBhZ2UqKSA9IDA7
Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBkcmF3UmVjdChQYWdlT3ZlcmxheSosIFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dCYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGRpcnR5UmVjdCkgPSAwOwot
ICAgICAgICB2aXJ0dWFsIGJvb2wgbW91c2VFdmVudChQYWdlT3ZlcmxheSosIGNvbnN0IFdlYk1v
dXNlRXZlbnQmKSA9IDA7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBkaWRTY3JvbGxGcmFtZShQYWdl
T3ZlcmxheSosIFdlYkNvcmU6OkZyYW1lKikgeyB9Ci0KLSAgICAgICAgdmlydHVhbCBXS1R5cGVS
ZWYgY29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZShQYWdlT3ZlcmxheSosIFdLU3RyaW5n
UmVmIC8qIGF0dHJpYnV0ZSAqLywgV0tUeXBlUmVmIC8qIHBhcmFtZXRlciAqLykgeyByZXR1cm4g
MDsgfQotICAgICAgICB2aXJ0dWFsIFdLQXJyYXlSZWYgY29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1
dGVOYW1lcyhQYWdlT3ZlcmxheSosIGJvb2wgLyogcGFyYW1ldGVyaXplZE5hbWVzICovKSB7IHJl
dHVybiAwOyB9Ci0gICAgfTsKLQotICAgIGVudW0gY2xhc3MgT3ZlcmxheVR5cGUgewotICAgICAg
ICBWaWV3LCAvLyBGaXhlZCB0byB0aGUgdmlldyBzaXplOyBkb2VzIG5vdCBzY2FsZSBvciBzY3Jv
bGwgd2l0aCB0aGUgZG9jdW1lbnQsIHJlcGFpbnRzIG9uIHNjcm9sbC4KLSAgICAgICAgRG9jdW1l
bnQsIC8vIFNjYWxlcyBhbmQgc2Nyb2xscyB3aXRoIHRoZSBkb2N1bWVudC4KLSAgICB9OwotCi0g
ICAgc3RhdGljIFBhc3NSZWZQdHI8UGFnZU92ZXJsYXk+IGNyZWF0ZShDbGllbnQqLCBPdmVybGF5
VHlwZSA9IE92ZXJsYXlUeXBlOjpWaWV3KTsKLSAgICB2aXJ0dWFsIH5QYWdlT3ZlcmxheSgpOwot
Ci0gICAgdm9pZCBzZXRQYWdlKFdlYlBhZ2UqKTsKLSAgICB2b2lkIHNldE5lZWRzRGlzcGxheShj
b25zdCBXZWJDb3JlOjpJbnRSZWN0JiBkaXJ0eVJlY3QpOwotICAgIHZvaWQgc2V0TmVlZHNEaXNw
bGF5KCk7Ci0KLSAgICB2b2lkIGRyYXdSZWN0KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYsIGNv
bnN0IFdlYkNvcmU6OkludFJlY3QmIGRpcnR5UmVjdCk7Ci0gICAgYm9vbCBtb3VzZUV2ZW50KGNv
bnN0IFdlYk1vdXNlRXZlbnQmKTsKLSAgICB2b2lkIGRpZFNjcm9sbEZyYW1lKFdlYkNvcmU6OkZy
YW1lKik7Ci0KLSAgICBXS1R5cGVSZWYgY29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZShX
S1N0cmluZ1JlZiBhdHRyaWJ1dGUsIFdLVHlwZVJlZiBwYXJhbWV0ZXIpOwotICAgIFdLQXJyYXlS
ZWYgY29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVOYW1lcyhib29sIHBhcmFtZXRlcml6ZWROYW1l
cyk7Ci0gICAgCi0gICAgdm9pZCBzdGFydEZhZGVJbkFuaW1hdGlvbigpOwotICAgIHZvaWQgc3Rh
cnRGYWRlT3V0QW5pbWF0aW9uKCk7Ci0gICAgdm9pZCBzdG9wRmFkZU91dEFuaW1hdGlvbigpOwot
Ci0gICAgdm9pZCBjbGVhcigpOwotCi0gICAgQ2xpZW50KiBjbGllbnQoKSBjb25zdCB7IHJldHVy
biBtX2NsaWVudDsgfQotCi0gICAgZW51bSBjbGFzcyBGYWRlTW9kZSB7IERvTm90RmFkZSwgRmFk
ZSB9OwotCi0gICAgT3ZlcmxheVR5cGUgb3ZlcmxheVR5cGUoKSB7IHJldHVybiBtX292ZXJsYXlU
eXBlOyB9Ci0KLSAgICBXZWJDb3JlOjpJbnRSZWN0IGJvdW5kcygpIGNvbnN0OwotICAgIFdlYkNv
cmU6OkludFJlY3QgZnJhbWUoKSBjb25zdDsKLSAgICB2b2lkIHNldEZyYW1lKFdlYkNvcmU6Oklu
dFJlY3QpOwotCi0gICAgV2ViQ29yZTo6UkdCQTMyIGJhY2tncm91bmRDb2xvcigpIGNvbnN0IHsg
cmV0dXJuIG1fYmFja2dyb3VuZENvbG9yOyB9Ci0gICAgdm9pZCBzZXRCYWNrZ3JvdW5kQ29sb3Io
V2ViQ29yZTo6UkdCQTMyKTsKLQotICAgIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqIGxheWVyKCk7
Ci0gICAgCi1wcm90ZWN0ZWQ6Ci0gICAgZXhwbGljaXQgUGFnZU92ZXJsYXkoQ2xpZW50KiwgT3Zl
cmxheVR5cGUpOwotCi1wcml2YXRlOgotICAgIHZvaWQgc3RhcnRGYWRlQW5pbWF0aW9uKCk7Ci0g
ICAgdm9pZCBmYWRlQW5pbWF0aW9uVGltZXJGaXJlZCgpOwotCi0gICAgQ2xpZW50KiBtX2NsaWVu
dDsKLSAgICBXZWJQYWdlKiBtX3dlYlBhZ2U7Ci0KLSAgICBSdW5Mb29wOjpUaW1lcjxQYWdlT3Zl
cmxheT4gbV9mYWRlQW5pbWF0aW9uVGltZXI7Ci0gICAgZG91YmxlIG1fZmFkZUFuaW1hdGlvblN0
YXJ0VGltZTsKLSAgICBkb3VibGUgbV9mYWRlQW5pbWF0aW9uRHVyYXRpb247Ci0KLSAgICBlbnVt
IEZhZGVBbmltYXRpb25UeXBlIHsKLSAgICAgICAgTm9BbmltYXRpb24sCi0gICAgICAgIEZhZGVJ
bkFuaW1hdGlvbiwKLSAgICAgICAgRmFkZU91dEFuaW1hdGlvbiwKLSAgICB9OwotCi0gICAgRmFk
ZUFuaW1hdGlvblR5cGUgbV9mYWRlQW5pbWF0aW9uVHlwZTsKLSAgICBmbG9hdCBtX2ZyYWN0aW9u
RmFkZWRJbjsKLQotICAgIE92ZXJsYXlUeXBlIG1fb3ZlcmxheVR5cGU7Ci0gICAgV2ViQ29yZTo6
SW50UmVjdCBtX292ZXJyaWRlRnJhbWU7Ci0KLSAgICBXZWJDb3JlOjpSR0JBMzIgbV9iYWNrZ3Jv
dW5kQ29sb3I7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIFBhZ2VP
dmVybGF5X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Q
YWdlT3ZlcmxheUNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL1BhZ2VPdmVybGF5Q29udHJvbGxlci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDg2NDU3YzUuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL1BhZ2VPdmVybGF5Q29udHJvbGxlci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwzMTQgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJQYWdlT3Zl
cmxheUNvbnRyb2xsZXIuaCIKLQotI2luY2x1ZGUgIkRyYXdpbmdBcmVhLmgiCi0jaW5jbHVkZSAi
UGFnZU92ZXJsYXkuaCIKLSNpbmNsdWRlICJXZWJQYWdlLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9G
cmFtZS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVWaWV3Lmg+Ci0jaW5jbHVkZSA8V2ViQ29y
ZS9HcmFwaGljc0NvbnRleHQuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzTGF5ZXIuaD4K
LSNpbmNsdWRlIDxXZWJDb3JlL01haW5GcmFtZS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvU2Nyb2xs
aW5nQ29vcmRpbmF0b3IuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1NldHRpbmdzLmg+Ci0jaW5jbHVk
ZSA8V2ViQ29yZS9UaWxlZEJhY2tpbmcuaD4KLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0K
LW5hbWVzcGFjZSBXZWJLaXQgewotCi1QYWdlT3ZlcmxheUNvbnRyb2xsZXI6OlBhZ2VPdmVybGF5
Q29udHJvbGxlcihXZWJQYWdlJiB3ZWJQYWdlKQotICAgIDogbV93ZWJQYWdlKHdlYlBhZ2UpCi17
Ci19Ci0KLXZvaWQgUGFnZU92ZXJsYXlDb250cm9sbGVyOjppbml0aWFsaXplKCkKLXsKLSAgICBB
U1NFUlQoIW1fZG9jdW1lbnRPdmVybGF5Um9vdExheWVyKTsKLSAgICBBU1NFUlQoIW1fdmlld092
ZXJsYXlSb290TGF5ZXIpOwotCi0gICAgbV9kb2N1bWVudE92ZXJsYXlSb290TGF5ZXIgPSBHcmFw
aGljc0xheWVyOjpjcmVhdGUobV93ZWJQYWdlLmRyYXdpbmdBcmVhKCktPmdyYXBoaWNzTGF5ZXJG
YWN0b3J5KCksICp0aGlzKTsKLSAgICBtX3ZpZXdPdmVybGF5Um9vdExheWVyID0gR3JhcGhpY3NM
YXllcjo6Y3JlYXRlKG1fd2ViUGFnZS5kcmF3aW5nQXJlYSgpLT5ncmFwaGljc0xheWVyRmFjdG9y
eSgpLCAqdGhpcyk7Ci0jaWZuZGVmIE5ERUJVRwotICAgIG1fZG9jdW1lbnRPdmVybGF5Um9vdExh
eWVyLT5zZXROYW1lKCJQYWdlIE92ZXJsYXkgY29udGFpbmVyIChkb2N1bWVudC1yZWxhdGl2ZSki
KTsKLSAgICBtX3ZpZXdPdmVybGF5Um9vdExheWVyLT5zZXROYW1lKCJQYWdlIE92ZXJsYXkgY29u
dGFpbmVyICh2aWV3LXJlbGF0aXZlKSIpOwotI2VuZGlmCi19Ci0KLXN0YXRpYyB2b2lkIHVwZGF0
ZU92ZXJsYXlHZW9tZXRyeShQYWdlT3ZlcmxheSYgb3ZlcmxheSwgR3JhcGhpY3NMYXllciYgZ3Jh
cGhpY3NMYXllcikKLXsKLSAgICBJbnRSZWN0IG92ZXJsYXlGcmFtZSA9IG92ZXJsYXkuZnJhbWUo
KTsKLQotICAgIGlmIChvdmVybGF5RnJhbWUubG9jYXRpb24oKSA9PSBncmFwaGljc0xheWVyLnBv
c2l0aW9uKCkgJiYgb3ZlcmxheUZyYW1lLnNpemUoKSA9PSBncmFwaGljc0xheWVyLnNpemUoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgZ3JhcGhpY3NMYXllci5zZXRQb3NpdGlvbihvdmVybGF5
RnJhbWUubG9jYXRpb24oKSk7Ci0gICAgZ3JhcGhpY3NMYXllci5zZXRTaXplKG92ZXJsYXlGcmFt
ZS5zaXplKCkpOwotfQotCi12b2lkIFBhZ2VPdmVybGF5Q29udHJvbGxlcjo6aW5zdGFsbFBhZ2VP
dmVybGF5KFBhc3NSZWZQdHI8UGFnZU92ZXJsYXk+IHBhZ2VPdmVybGF5LCBQYWdlT3ZlcmxheTo6
RmFkZU1vZGUgZmFkZU1vZGUpCi17Ci0gICAgQVNTRVJUKG1fZG9jdW1lbnRPdmVybGF5Um9vdExh
eWVyKTsKLSAgICBBU1NFUlQobV92aWV3T3ZlcmxheVJvb3RMYXllcik7Ci0KLSAgICBSZWZQdHI8
UGFnZU92ZXJsYXk+IG92ZXJsYXkgPSBwYWdlT3ZlcmxheTsKLQotICAgIGlmIChtX3BhZ2VPdmVy
bGF5cy5jb250YWlucyhvdmVybGF5KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9wYWdlT3Zl
cmxheXMuYXBwZW5kKG92ZXJsYXkpOwotICAgIG92ZXJsYXktPnNldFBhZ2UoJm1fd2ViUGFnZSk7
Ci0KLSAgICBpZiAoZmFkZU1vZGUgPT0gUGFnZU92ZXJsYXk6OkZhZGVNb2RlOjpGYWRlKQotICAg
ICAgICBvdmVybGF5LT5zdGFydEZhZGVJbkFuaW1hdGlvbigpOwotCi0gICAgc3RkOjp1bmlxdWVf
cHRyPEdyYXBoaWNzTGF5ZXI+IGxheWVyID0gR3JhcGhpY3NMYXllcjo6Y3JlYXRlKG1fd2ViUGFn
ZS5kcmF3aW5nQXJlYSgpLT5ncmFwaGljc0xheWVyRmFjdG9yeSgpLCAqdGhpcyk7Ci0gICAgbGF5
ZXItPnNldEFuY2hvclBvaW50KEZsb2F0UG9pbnQzRCgpKTsKLSAgICBsYXllci0+c2V0QmFja2dy
b3VuZENvbG9yKG92ZXJsYXktPmJhY2tncm91bmRDb2xvcigpKTsKLSAgICB1cGRhdGVPdmVybGF5
R2VvbWV0cnkoKm92ZXJsYXksICpsYXllcik7Ci0jaWZuZGVmIE5ERUJVRwotICAgIGxheWVyLT5z
ZXROYW1lKCJQYWdlIE92ZXJsYXkgY29udGVudCIpOwotI2VuZGlmCi0KLSAgICB1cGRhdGVTZXR0
aW5nc0ZvckxheWVyKCpsYXllcik7Ci0KLSAgICBzd2l0Y2ggKG92ZXJsYXktPm92ZXJsYXlUeXBl
KCkpIHsKLSAgICBjYXNlIFBhZ2VPdmVybGF5OjpPdmVybGF5VHlwZTo6VmlldzoKLSAgICAgICAg
bV92aWV3T3ZlcmxheVJvb3RMYXllci0+YWRkQ2hpbGQobGF5ZXIuZ2V0KCkpOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIFBhZ2VPdmVybGF5OjpPdmVybGF5VHlwZTo6RG9jdW1lbnQ6Ci0gICAg
ICAgIG1fZG9jdW1lbnRPdmVybGF5Um9vdExheWVyLT5hZGRDaGlsZChsYXllci5nZXQoKSk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIG1fb3ZlcmxheUdyYXBoaWNzTGF5ZXJzLnNldChv
dmVybGF5LmdldCgpLCBXVEY6Om1vdmUobGF5ZXIpKTsKLQotICAgIHVwZGF0ZUZvcmNlU3luY2hy
b25vdXNTY3JvbGxMYXllclBvc2l0aW9uVXBkYXRlcygpOwotfQotCi12b2lkIFBhZ2VPdmVybGF5
Q29udHJvbGxlcjo6dW5pbnN0YWxsUGFnZU92ZXJsYXkoUGFnZU92ZXJsYXkqIG92ZXJsYXksIFBh
Z2VPdmVybGF5OjpGYWRlTW9kZSBmYWRlTW9kZSkKLXsKLSAgICBpZiAoZmFkZU1vZGUgPT0gUGFn
ZU92ZXJsYXk6OkZhZGVNb2RlOjpGYWRlKSB7Ci0gICAgICAgIG92ZXJsYXktPnN0YXJ0RmFkZU91
dEFuaW1hdGlvbigpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgb3ZlcmxheS0+c2V0
UGFnZShudWxscHRyKTsKLQotICAgIG1fb3ZlcmxheUdyYXBoaWNzTGF5ZXJzLnRha2Uob3Zlcmxh
eSktPnJlbW92ZUZyb21QYXJlbnQoKTsKLQotICAgIHNpemVfdCBvdmVybGF5SW5kZXggPSBtX3Bh
Z2VPdmVybGF5cy5maW5kKG92ZXJsYXkpOwotICAgIEFTU0VSVChvdmVybGF5SW5kZXggIT0gbm90
Rm91bmQpOwotICAgIG1fcGFnZU92ZXJsYXlzLnJlbW92ZShvdmVybGF5SW5kZXgpOwotCi0gICAg
dXBkYXRlRm9yY2VTeW5jaHJvbm91c1Njcm9sbExheWVyUG9zaXRpb25VcGRhdGVzKCk7Ci19Ci0K
LXZvaWQgUGFnZU92ZXJsYXlDb250cm9sbGVyOjp1cGRhdGVGb3JjZVN5bmNocm9ub3VzU2Nyb2xs
TGF5ZXJQb3NpdGlvblVwZGF0ZXMoKQotewotI2lmIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpCi0g
ICAgYm9vbCBmb3JjZVN5bmNocm9ub3VzU2Nyb2xsTGF5ZXJQb3NpdGlvblVwZGF0ZXMgPSBmYWxz
ZTsKLQotICAgIGZvciAoYXV0byYgb3ZlcmxheSA6IG1fcGFnZU92ZXJsYXlzKSB7Ci0gICAgICAg
IGlmIChvdmVybGF5LT5vdmVybGF5VHlwZSgpID09IFBhZ2VPdmVybGF5OjpPdmVybGF5VHlwZTo6
VmlldykKLSAgICAgICAgICAgIGZvcmNlU3luY2hyb25vdXNTY3JvbGxMYXllclBvc2l0aW9uVXBk
YXRlcyA9IHRydWU7Ci0gICAgfQotCi0gICAgaWYgKFBhZ2UqIHBhZ2UgPSBtX3dlYlBhZ2UuY29y
ZVBhZ2UoKSkgewotICAgICAgICBpZiAoU2Nyb2xsaW5nQ29vcmRpbmF0b3IqIHNjcm9sbGluZ0Nv
b3JkaW5hdG9yID0gcGFnZS0+c2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSkKLSAgICAgICAgICAgIHNj
cm9sbGluZ0Nvb3JkaW5hdG9yLT5zZXRGb3JjZVN5bmNocm9ub3VzU2Nyb2xsTGF5ZXJQb3NpdGlv
blVwZGF0ZXMoZm9yY2VTeW5jaHJvbm91c1Njcm9sbExheWVyUG9zaXRpb25VcGRhdGVzKTsKLSAg
ICB9Ci0jZW5kaWYKLX0KLQotdm9pZCBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6OnNldFBhZ2VPdmVy
bGF5TmVlZHNEaXNwbGF5KFBhZ2VPdmVybGF5JiBvdmVybGF5LCBjb25zdCBXZWJDb3JlOjpJbnRS
ZWN0JiBkaXJ0eVJlY3QpCi17Ci0gICAgQVNTRVJUKG1fcGFnZU92ZXJsYXlzLmNvbnRhaW5zKCZv
dmVybGF5KSk7Ci0gICAgR3JhcGhpY3NMYXllciYgZ3JhcGhpY3NMYXllciA9ICptX292ZXJsYXlH
cmFwaGljc0xheWVycy5nZXQoJm92ZXJsYXkpOwotCi0gICAgaWYgKCFncmFwaGljc0xheWVyLmRy
YXdzQ29udGVudCgpKSB7Ci0gICAgICAgIGdyYXBoaWNzTGF5ZXIuc2V0RHJhd3NDb250ZW50KHRy
dWUpOwotICAgICAgICB1cGRhdGVPdmVybGF5R2VvbWV0cnkob3ZlcmxheSwgZ3JhcGhpY3NMYXll
cik7Ci0gICAgfQotCi0gICAgZ3JhcGhpY3NMYXllci5zZXROZWVkc0Rpc3BsYXlJblJlY3QoZGly
dHlSZWN0KTsKLX0KLQotdm9pZCBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6OnNldFBhZ2VPdmVybGF5
T3BhY2l0eShQYWdlT3ZlcmxheSYgb3ZlcmxheSwgZmxvYXQgb3BhY2l0eSkKLXsKLSAgICBBU1NF
UlQobV9wYWdlT3ZlcmxheXMuY29udGFpbnMoJm92ZXJsYXkpKTsKLSAgICBtX292ZXJsYXlHcmFw
aGljc0xheWVycy5nZXQoJm92ZXJsYXkpLT5zZXRPcGFjaXR5KG9wYWNpdHkpOwotfQotCi12b2lk
IFBhZ2VPdmVybGF5Q29udHJvbGxlcjo6Y2xlYXJQYWdlT3ZlcmxheShQYWdlT3ZlcmxheSYgb3Zl
cmxheSkKLXsKLSAgICBBU1NFUlQobV9wYWdlT3ZlcmxheXMuY29udGFpbnMoJm92ZXJsYXkpKTsK
LSAgICBtX292ZXJsYXlHcmFwaGljc0xheWVycy5nZXQoJm92ZXJsYXkpLT5zZXREcmF3c0NvbnRl
bnQoZmFsc2UpOwotfQotCi1HcmFwaGljc0xheWVyKiBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6Omxh
eWVyRm9yT3ZlcmxheShQYWdlT3ZlcmxheSYgb3ZlcmxheSkgY29uc3QKLXsKLSAgICBBU1NFUlQo
bV9wYWdlT3ZlcmxheXMuY29udGFpbnMoJm92ZXJsYXkpKTsKLSAgICByZXR1cm4gbV9vdmVybGF5
R3JhcGhpY3NMYXllcnMuZ2V0KCZvdmVybGF5KTsKLX0KLQotdm9pZCBQYWdlT3ZlcmxheUNvbnRy
b2xsZXI6OmRpZENoYW5nZVZpZXdTaXplKCkKLXsKLSAgICBmb3IgKGF1dG8mIG92ZXJsYXlBbmRM
YXllciA6IG1fb3ZlcmxheUdyYXBoaWNzTGF5ZXJzKSB7Ci0gICAgICAgIGlmIChvdmVybGF5QW5k
TGF5ZXIua2V5LT5vdmVybGF5VHlwZSgpID09IFBhZ2VPdmVybGF5OjpPdmVybGF5VHlwZTo6Vmll
dykKLSAgICAgICAgICAgIHVwZGF0ZU92ZXJsYXlHZW9tZXRyeSgqb3ZlcmxheUFuZExheWVyLmtl
eSwgKm92ZXJsYXlBbmRMYXllci52YWx1ZSk7Ci0gICAgfQotfQotCi12b2lkIFBhZ2VPdmVybGF5
Q29udHJvbGxlcjo6ZGlkQ2hhbmdlRG9jdW1lbnRTaXplKCkKLXsKLSAgICBmb3IgKGF1dG8mIG92
ZXJsYXlBbmRMYXllciA6IG1fb3ZlcmxheUdyYXBoaWNzTGF5ZXJzKSB7Ci0gICAgICAgIGlmIChv
dmVybGF5QW5kTGF5ZXIua2V5LT5vdmVybGF5VHlwZSgpID09IFBhZ2VPdmVybGF5OjpPdmVybGF5
VHlwZTo6RG9jdW1lbnQpCi0gICAgICAgICAgICB1cGRhdGVPdmVybGF5R2VvbWV0cnkoKm92ZXJs
YXlBbmRMYXllci5rZXksICpvdmVybGF5QW5kTGF5ZXIudmFsdWUpOwotICAgIH0KLX0KLQotdm9p
ZCBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6OmRpZENoYW5nZVByZWZlcmVuY2VzKCkKLXsKLSAgICBm
b3IgKGF1dG8mIGdyYXBoaWNzTGF5ZXIgOiBtX292ZXJsYXlHcmFwaGljc0xheWVycy52YWx1ZXMo
KSkKLSAgICAgICAgdXBkYXRlU2V0dGluZ3NGb3JMYXllcigqZ3JhcGhpY3NMYXllcik7Ci19Ci0K
LXZvaWQgUGFnZU92ZXJsYXlDb250cm9sbGVyOjpkaWRDaGFuZ2VEZXZpY2VTY2FsZUZhY3Rvcigp
Ci17Ci0gICAgbV9kb2N1bWVudE92ZXJsYXlSb290TGF5ZXItPm5vdGVEZXZpY2VPclBhZ2VTY2Fs
ZUZhY3RvckNoYW5nZWRJbmNsdWRpbmdEZXNjZW5kYW50cygpOwotICAgIG1fdmlld092ZXJsYXlS
b290TGF5ZXItPm5vdGVEZXZpY2VPclBhZ2VTY2FsZUZhY3RvckNoYW5nZWRJbmNsdWRpbmdEZXNj
ZW5kYW50cygpOwotCi0gICAgZm9yIChhdXRvJiBncmFwaGljc0xheWVyIDogbV9vdmVybGF5R3Jh
cGhpY3NMYXllcnMudmFsdWVzKCkpCi0gICAgICAgIGdyYXBoaWNzTGF5ZXItPnNldE5lZWRzRGlz
cGxheSgpOwotfQotCi12b2lkIFBhZ2VPdmVybGF5Q29udHJvbGxlcjo6ZGlkQ2hhbmdlRXhwb3Nl
ZFJlY3QoKQotewotICAgIG1fd2ViUGFnZS5kcmF3aW5nQXJlYSgpLT5zY2hlZHVsZUNvbXBvc2l0
aW5nTGF5ZXJGbHVzaCgpOwotfQotCi12b2lkIFBhZ2VPdmVybGF5Q29udHJvbGxlcjo6ZGlkU2Ny
b2xsRnJhbWUoRnJhbWUqIGZyYW1lKQotewotICAgIGZvciAoYXV0byYgb3ZlcmxheUFuZExheWVy
IDogbV9vdmVybGF5R3JhcGhpY3NMYXllcnMpIHsKLSAgICAgICAgaWYgKG92ZXJsYXlBbmRMYXll
ci5rZXktPm92ZXJsYXlUeXBlKCkgPT0gUGFnZU92ZXJsYXk6Ok92ZXJsYXlUeXBlOjpWaWV3IHx8
ICFmcmFtZS0+aXNNYWluRnJhbWUoKSkKLSAgICAgICAgICAgIG92ZXJsYXlBbmRMYXllci52YWx1
ZS0+c2V0TmVlZHNEaXNwbGF5KCk7Ci0gICAgICAgIG92ZXJsYXlBbmRMYXllci5rZXktPmRpZFNj
cm9sbEZyYW1lKGZyYW1lKTsKLSAgICB9Ci19Ci0KLXZvaWQgUGFnZU92ZXJsYXlDb250cm9sbGVy
OjpmbHVzaFBhZ2VPdmVybGF5TGF5ZXJzKEZsb2F0UmVjdCB2aXNpYmxlUmVjdCkKLXsKLSAgICBt
X3ZpZXdPdmVybGF5Um9vdExheWVyLT5mbHVzaENvbXBvc2l0aW5nU3RhdGUodmlzaWJsZVJlY3Qp
OwotfQotCi12b2lkIFBhZ2VPdmVybGF5Q29udHJvbGxlcjo6dXBkYXRlU2V0dGluZ3NGb3JMYXll
cihHcmFwaGljc0xheWVyJiBsYXllcikKLXsKLSAgICBTZXR0aW5ncyYgc2V0dGluZ3MgPSBtX3dl
YlBhZ2UuY29yZVBhZ2UoKS0+c2V0dGluZ3MoKTsKLSAgICBsYXllci5zZXRBY2NlbGVyYXRlc0Ry
YXdpbmcoc2V0dGluZ3MuYWNjZWxlcmF0ZWREcmF3aW5nRW5hYmxlZCgpKTsKLSAgICBsYXllci5z
ZXRTaG93RGVidWdCb3JkZXIoc2V0dGluZ3Muc2hvd0RlYnVnQm9yZGVycygpKTsKLSAgICBsYXll
ci5zZXRTaG93UmVwYWludENvdW50ZXIoc2V0dGluZ3Muc2hvd1JlcGFpbnRDb3VudGVyKCkpOwot
fQotCi1ib29sIFBhZ2VPdmVybGF5Q29udHJvbGxlcjo6aGFuZGxlTW91c2VFdmVudChjb25zdCBX
ZWJNb3VzZUV2ZW50JiBtb3VzZUV2ZW50KQotewotICAgIGlmICghbV9wYWdlT3ZlcmxheXMuc2l6
ZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBmb3IgKGF1dG8gaXQgPSBtX3BhZ2VP
dmVybGF5cy5yYmVnaW4oKSwgZW5kID0gbV9wYWdlT3ZlcmxheXMucmVuZCgpOyBpdCAhPSBlbmQ7
ICsraXQpIHsKLSAgICAgICAgaWYgKCgqaXQpLT5tb3VzZUV2ZW50KG1vdXNlRXZlbnQpKQotICAg
ICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1X
S1R5cGVSZWYgUGFnZU92ZXJsYXlDb250cm9sbGVyOjpjb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0
ZVZhbHVlKFdLU3RyaW5nUmVmIGF0dHJpYnV0ZSwgV0tUeXBlUmVmIHBhcmFtZXRlcikKLXsKLSAg
ICBpZiAoIW1fcGFnZU92ZXJsYXlzLnNpemUoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0K
LSAgICBmb3IgKGF1dG8gaXQgPSBtX3BhZ2VPdmVybGF5cy5yYmVnaW4oKSwgZW5kID0gbV9wYWdl
T3ZlcmxheXMucmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgaWYgKFdLVHlwZVJl
ZiB2YWx1ZSA9ICgqaXQpLT5jb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlKGF0dHJpYnV0
ZSwgcGFyYW1ldGVyKSkKLSAgICAgICAgICAgIHJldHVybiB2YWx1ZTsKLSAgICB9Ci0KLSAgICBy
ZXR1cm4gbnVsbHB0cjsKLX0KLQotV0tBcnJheVJlZiBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6OmNv
cHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlc05hbWVzKGJvb2wgcGFyYW1ldGVyaXplZE5hbWVzKQot
ewotICAgIGlmICghbV9wYWdlT3ZlcmxheXMuc2l6ZSgpKQotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLQotICAgIGZvciAoYXV0byBpdCA9IG1fcGFnZU92ZXJsYXlzLnJiZWdpbigpLCBlbmQgPSBt
X3BhZ2VPdmVybGF5cy5yZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBpZiAoV0tB
cnJheVJlZiB2YWx1ZSA9ICgqaXQpLT5jb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZU5hbWVzKHBh
cmFtZXRlcml6ZWROYW1lcykpCi0gICAgICAgICAgICByZXR1cm4gdmFsdWU7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLXZvaWQgUGFnZU92ZXJsYXlDb250cm9sbGVyOjpwYWlu
dENvbnRlbnRzKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqIGdyYXBoaWNzTGF5ZXIsIFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0LCBXZWJDb3JlOjpHcmFwaGlj
c0xheWVyUGFpbnRpbmdQaGFzZSwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBjbGlwUmVjdCkK
LXsKLSAgICBmb3IgKGF1dG8gaXQgPSBtX292ZXJsYXlHcmFwaGljc0xheWVycy5iZWdpbigpLCBl
bmQgPSBtX292ZXJsYXlHcmFwaGljc0xheWVycy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0g
ICAgICAgIGlmIChpdC0+dmFsdWUuZ2V0KCkgIT0gZ3JhcGhpY3NMYXllcikKLSAgICAgICAgICAg
IGNvbnRpbnVlOwotCi0gICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZl
cihncmFwaGljc0NvbnRleHQpOwotICAgICAgICBncmFwaGljc0NvbnRleHQuY2xpcChjbGlwUmVj
dCk7Ci0gICAgICAgIGl0LT5rZXktPmRyYXdSZWN0KGdyYXBoaWNzQ29udGV4dCwgZW5jbG9zaW5n
SW50UmVjdChjbGlwUmVjdCkpOwotCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci19Ci0KLWZsb2F0
IFBhZ2VPdmVybGF5Q29udHJvbGxlcjo6ZGV2aWNlU2NhbGVGYWN0b3IoKSBjb25zdAotewotICAg
IHJldHVybiBtX3dlYlBhZ2UuY29yZVBhZ2UoKS0+ZGV2aWNlU2NhbGVGYWN0b3IoKTsKLX0KLQot
dm9pZCBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6Om5vdGlmeUZsdXNoUmVxdWlyZWQoY29uc3QgV2Vi
Q29yZTo6R3JhcGhpY3NMYXllciopCi17Ci0gICAgaWYgKG1fd2ViUGFnZS5kcmF3aW5nQXJlYSgp
KQotICAgICAgICBtX3dlYlBhZ2UuZHJhd2luZ0FyZWEoKS0+c2NoZWR1bGVDb21wb3NpdGluZ0xh
eWVyRmx1c2goKTsKLX0KLQotdm9pZCBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6OmRpZENoYW5nZU92
ZXJsYXlGcmFtZShQYWdlT3ZlcmxheSYgb3ZlcmxheSkKLXsKLSAgICBBU1NFUlQobV9wYWdlT3Zl
cmxheXMuY29udGFpbnMoJm92ZXJsYXkpKTsKLSAgICB1cGRhdGVPdmVybGF5R2VvbWV0cnkob3Zl
cmxheSwgKm1fb3ZlcmxheUdyYXBoaWNzTGF5ZXJzLmdldCgmb3ZlcmxheSkpOwotfQotCi12b2lk
IFBhZ2VPdmVybGF5Q29udHJvbGxlcjo6ZGlkQ2hhbmdlT3ZlcmxheUJhY2tncm91bmRDb2xvcihQ
YWdlT3ZlcmxheSYgb3ZlcmxheSkKLXsKLSAgICBBU1NFUlQobV9wYWdlT3ZlcmxheXMuY29udGFp
bnMoJm92ZXJsYXkpKTsKLSAgICBtX292ZXJsYXlHcmFwaGljc0xheWVycy5nZXQoJm92ZXJsYXkp
LT5zZXRCYWNrZ3JvdW5kQ29sb3Iob3ZlcmxheS5iYWNrZ3JvdW5kQ29sb3IoKSk7Ci19Ci0KLX0g
Ly8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL1BhZ2VPdmVybGF5Q29udHJvbGxlci5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1BhZ2VPdmVybGF5Q29udHJvbGxlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAyNTE4MmQ1Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9QYWdlT3ZlcmxheUNvbnRyb2xsZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDk5
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFBhZ2VPdmVybGF5Q29udHJvbGxlcl9oCi0j
ZGVmaW5lIFBhZ2VPdmVybGF5Q29udHJvbGxlcl9oCi0KLSNpbmNsdWRlICJQYWdlT3ZlcmxheS5o
IgotI2luY2x1ZGUgIldLQmFzZS5oIgotI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NMYXllckNs
aWVudC5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5o
PgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotY2xhc3Mg
RnJhbWU7Ci19Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1jbGFzcyBXZWJNb3VzZUV2ZW50Owot
Y2xhc3MgV2ViUGFnZTsKLQotY2xhc3MgUGFnZU92ZXJsYXlDb250cm9sbGVyIDogcHVibGljIFdl
YkNvcmU6OkdyYXBoaWNzTGF5ZXJDbGllbnQgewotcHVibGljOgotICAgIFBhZ2VPdmVybGF5Q29u
dHJvbGxlcihXZWJQYWdlJik7Ci0KLSAgICB2b2lkIGluaXRpYWxpemUoKTsKLQotICAgIFdlYkNv
cmU6OkdyYXBoaWNzTGF5ZXIqIGRvY3VtZW50T3ZlcmxheVJvb3RMYXllcigpIGNvbnN0IHsgcmV0
dXJuIG1fZG9jdW1lbnRPdmVybGF5Um9vdExheWVyLmdldCgpOyB9Ci0gICAgV2ViQ29yZTo6R3Jh
cGhpY3NMYXllciogdmlld092ZXJsYXlSb290TGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX3ZpZXdP
dmVybGF5Um9vdExheWVyLmdldCgpOyB9Ci0KLSAgICB2b2lkIGluc3RhbGxQYWdlT3ZlcmxheShQ
YXNzUmVmUHRyPFBhZ2VPdmVybGF5PiwgUGFnZU92ZXJsYXk6OkZhZGVNb2RlKTsKLSAgICB2b2lk
IHVuaW5zdGFsbFBhZ2VPdmVybGF5KFBhZ2VPdmVybGF5KiwgUGFnZU92ZXJsYXk6OkZhZGVNb2Rl
KTsKLQotICAgIHZvaWQgc2V0UGFnZU92ZXJsYXlOZWVkc0Rpc3BsYXkoUGFnZU92ZXJsYXkmLCBj
b25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7Ci0gICAgdm9pZCBzZXRQYWdlT3ZlcmxheU9wYWNpdHko
UGFnZU92ZXJsYXkmLCBmbG9hdCk7Ci0gICAgdm9pZCBjbGVhclBhZ2VPdmVybGF5KFBhZ2VPdmVy
bGF5Jik7Ci0gICAgV2ViQ29yZTo6R3JhcGhpY3NMYXllciogbGF5ZXJGb3JPdmVybGF5KFBhZ2VP
dmVybGF5JikgY29uc3Q7Ci0KLSAgICB2b2lkIGRpZENoYW5nZVZpZXdTaXplKCk7Ci0gICAgdm9p
ZCBkaWRDaGFuZ2VEb2N1bWVudFNpemUoKTsKLSAgICB2b2lkIGRpZENoYW5nZVByZWZlcmVuY2Vz
KCk7Ci0gICAgdm9pZCBkaWRDaGFuZ2VEZXZpY2VTY2FsZUZhY3RvcigpOwotICAgIHZvaWQgZGlk
Q2hhbmdlRXhwb3NlZFJlY3QoKTsKLSAgICB2b2lkIGRpZFNjcm9sbEZyYW1lKFdlYkNvcmU6OkZy
YW1lKik7Ci0KLSAgICB2b2lkIGRpZENoYW5nZU92ZXJsYXlGcmFtZShQYWdlT3ZlcmxheSYpOwot
ICAgIHZvaWQgZGlkQ2hhbmdlT3ZlcmxheUJhY2tncm91bmRDb2xvcihQYWdlT3ZlcmxheSYpOwot
Ci0gICAgdm9pZCBmbHVzaFBhZ2VPdmVybGF5TGF5ZXJzKFdlYkNvcmU6OkZsb2F0UmVjdCk7Ci0K
LSAgICBib29sIGhhbmRsZU1vdXNlRXZlbnQoY29uc3QgV2ViTW91c2VFdmVudCYpOwotCi0gICAg
Ly8gRklYTUU6IFdlIHNob3VsZG4ndCB1c2UgQVBJIHR5cGVzIGhlcmUuCi0gICAgV0tUeXBlUmVm
IGNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWUoV0tTdHJpbmdSZWYgYXR0cmlidXRlLCBX
S1R5cGVSZWYgcGFyYW1ldGVyKTsKLSAgICBXS0FycmF5UmVmIGNvcHlBY2Nlc3NpYmlsaXR5QXR0
cmlidXRlc05hbWVzKGJvb2wgcGFyYW1ldGVyaXplZE5hbWVzKTsKLQotcHJpdmF0ZToKLSAgICB2
b2lkIHVwZGF0ZVNldHRpbmdzRm9yTGF5ZXIoV2ViQ29yZTo6R3JhcGhpY3NMYXllciYpOwotICAg
IHZvaWQgdXBkYXRlRm9yY2VTeW5jaHJvbm91c1Njcm9sbExheWVyUG9zaXRpb25VcGRhdGVzKCk7
Ci0KLSAgICAvLyBXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2xpZW50Ci0gICAgdmlydHVhbCB2b2lk
IG5vdGlmeUZsdXNoUmVxdWlyZWQoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciopIG92ZXJy
aWRlOwotICAgIHZpcnR1YWwgdm9pZCBwYWludENvbnRlbnRzKGNvbnN0IFdlYkNvcmU6OkdyYXBo
aWNzTGF5ZXIqLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmLCBXZWJDb3JlOjpHcmFwaGljc0xh
eWVyUGFpbnRpbmdQaGFzZSwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBjbGlwUmVjdCkgb3Zl
cnJpZGU7Ci0gICAgdmlydHVhbCBmbG9hdCBkZXZpY2VTY2FsZUZhY3RvcigpIGNvbnN0IG92ZXJy
aWRlOwotICAgIHZpcnR1YWwgYm9vbCBzaG91bGRTa2lwTGF5ZXJJbkR1bXAoY29uc3QgV2ViQ29y
ZTo6R3JhcGhpY3NMYXllciopIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KLQotICAg
IHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpHcmFwaGljc0xheWVyPiBtX2RvY3VtZW50T3Zlcmxh
eVJvb3RMYXllcjsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6R3JhcGhpY3NMYXllcj4g
bV92aWV3T3ZlcmxheVJvb3RMYXllcjsKLSAgICBIYXNoTWFwPFBhZ2VPdmVybGF5Kiwgc3RkOjp1
bmlxdWVfcHRyPFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI+PiBtX292ZXJsYXlHcmFwaGljc0xheWVy
czsKLSAgICBWZWN0b3I8UmVmUHRyPFBhZ2VPdmVybGF5Pj4gbV9wYWdlT3ZlcmxheXM7Ci0gICAg
V2ViUGFnZSYgbV93ZWJQYWdlOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRp
ZiAvLyBQYWdlT3ZlcmxheUNvbnRyb2xsZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL1NlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIuaCBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9TZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyLmgKaW5k
ZXggM2IwOWQzZC4uNDExZDMzYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL1NlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvU2VydmljZXNPdmVybGF5Q29udHJvbGxlci5oCkBAIC0yOCw5
ICsyOCw5IEBACiAKICNpZiBFTkFCTEUoU0VSVklDRV9DT05UUk9MUykgfHwgRU5BQkxFKFRFTEVQ
SE9ORV9OVU1CRVJfREVURUNUSU9OKQogCi0jaW5jbHVkZSAiUGFnZU92ZXJsYXkuaCIKICNpbmNs
dWRlICJXZWJGcmFtZS5oIgogI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NMYXllckNsaWVudC5o
PgorI2luY2x1ZGUgPFdlYkNvcmUvUGFnZU92ZXJsYXkuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Jh
bmdlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9UaW1lci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3Vu
dGVkLmg+CkBAIC0zOSw3ICszOSw2IEBAIHR5cGVkZWYgdm9pZCogRERIaWdobGlnaHRSZWY7CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIExheW91dFJlY3Q7Ci0KIHN0cnVjdCBHYXBSZWN0
czsKIH0KIApAQCAtNDcsNyArNDYsNyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgV2Vi
UGFnZTsKIAotY2xhc3MgU2VydmljZXNPdmVybGF5Q29udHJvbGxlciA6IHByaXZhdGUgUGFnZU92
ZXJsYXk6OkNsaWVudCB7CitjbGFzcyBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyIDogcHJpdmF0
ZSBXZWJDb3JlOjpQYWdlT3ZlcmxheTo6Q2xpZW50IHsKIHB1YmxpYzoKICAgICBTZXJ2aWNlc092
ZXJsYXlDb250cm9sbGVyKFdlYlBhZ2UmKTsKICAgICB+U2VydmljZXNPdmVybGF5Q29udHJvbGxl
cigpOwpAQCAtOTgsMTIgKzk3LDEyIEBAIHByaXZhdGU6CiAgICAgfTsKIAogICAgIC8vIFBhZ2VP
dmVybGF5OjpDbGllbnQKLSAgICB2aXJ0dWFsIHZvaWQgcGFnZU92ZXJsYXlEZXN0cm95ZWQoUGFn
ZU92ZXJsYXkqKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgd2lsbE1vdmVUb1dlYlBhZ2Uo
UGFnZU92ZXJsYXkqLCBXZWJQYWdlKikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGRpZE1v
dmVUb1dlYlBhZ2UoUGFnZU92ZXJsYXkqLCBXZWJQYWdlKikgb3ZlcnJpZGU7Ci0gICAgdmlydHVh
bCB2b2lkIGRyYXdSZWN0KFBhZ2VPdmVybGF5KiwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Jiwg
Y29uc3QgV2ViQ29yZTo6SW50UmVjdCYgZGlydHlSZWN0KSBvdmVycmlkZTsKLSAgICB2aXJ0dWFs
IGJvb2wgbW91c2VFdmVudChQYWdlT3ZlcmxheSosIGNvbnN0IFdlYk1vdXNlRXZlbnQmKSBvdmVy
cmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkU2Nyb2xsRnJhbWUoUGFnZU92ZXJsYXkqLCBXZWJD
b3JlOjpGcmFtZSopIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBwYWdlT3ZlcmxheURlc3Ry
b3llZChXZWJDb3JlOjpQYWdlT3ZlcmxheSYpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCB3
aWxsTW92ZVRvUGFnZShXZWJDb3JlOjpQYWdlT3ZlcmxheSYsIFdlYkNvcmU6OlBhZ2UqKSBvdmVy
cmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkTW92ZVRvUGFnZShXZWJDb3JlOjpQYWdlT3Zlcmxh
eSYsIFdlYkNvcmU6OlBhZ2UqKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd1JlY3Qo
V2ViQ29yZTo6UGFnZU92ZXJsYXkmLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmLCBjb25zdCBX
ZWJDb3JlOjpJbnRSZWN0JiBkaXJ0eVJlY3QpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBt
b3VzZUV2ZW50KFdlYkNvcmU6OlBhZ2VPdmVybGF5JiwgY29uc3QgV2ViQ29yZTo6UGxhdGZvcm1N
b3VzZUV2ZW50Jikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGRpZFNjcm9sbEZyYW1lKFdl
YkNvcmU6OlBhZ2VPdmVybGF5JiwgV2ViQ29yZTo6RnJhbWUmKSBvdmVycmlkZTsKIAogICAgIHZv
aWQgY3JlYXRlT3ZlcmxheUlmTmVlZGVkKCk7CiAgICAgdm9pZCBoYW5kbGVDbGljayhjb25zdCBX
ZWJDb3JlOjpJbnRQb2ludCYsIEhpZ2hsaWdodCYpOwpAQCAtMTM5LDcgKzEzOCw3IEBAIHByaXZh
dGU6CiAgICAgV2ViUGFnZSYgd2ViUGFnZSgpIGNvbnN0IHsgcmV0dXJuIG1fd2ViUGFnZTsgfQog
CiAgICAgV2ViUGFnZSYgbV93ZWJQYWdlOwotICAgIFBhZ2VPdmVybGF5KiBtX3NlcnZpY2VzT3Zl
cmxheTsKKyAgICBXZWJDb3JlOjpQYWdlT3ZlcmxheSogbV9zZXJ2aWNlc092ZXJsYXk7CiAKICAg
ICBSZWZQdHI8SGlnaGxpZ2h0PiBtX2FjdGl2ZUhpZ2hsaWdodDsKICAgICBSZWZQdHI8SGlnaGxp
Z2h0PiBtX25leHRBY3RpdmVIaWdobGlnaHQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViUGFnZS5jcHAKaW5kZXggNmVhNzZhYy4uNzJhMGZjYyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcApAQCAtMzI3LDcgKzMyNyw2
IEBAIFdlYlBhZ2U6OldlYlBhZ2UodWludDY0X3QgcGFnZUlELCBjb25zdCBXZWJQYWdlQ3JlYXRp
b25QYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzKQogI2lmIEVOQUJMRShXRUJHTCkKICAgICAsIG1fc3lz
dGVtV2ViR0xQb2xpY3koV2ViR0xBbGxvd0NyZWF0aW9uKQogI2VuZGlmCi0gICAgLCBtX3BhZ2VP
dmVybGF5Q29udHJvbGxlcigqdGhpcykKIHsKICAgICBBU1NFUlQobV9wYWdlSUQpOwogICAgIC8v
IEZJWE1FOiBUaGlzIGlzIGEgbm9uLWlkZWFsIGxvY2F0aW9uIGZvciB0aGlzIFNldHRpbmcgYW5k
CkBAIC0zNjYsNyArMzY1LDYgQEAgV2ViUGFnZTo6V2ViUGFnZSh1aW50NjRfdCBwYWdlSUQsIGNv
bnN0IFdlYlBhZ2VDcmVhdGlvblBhcmFtZXRlcnMmIHBhcmFtZXRlcnMpCiAKICAgICBtX2RyYXdp
bmdBcmVhID0gRHJhd2luZ0FyZWE6OmNyZWF0ZSgqdGhpcywgcGFyYW1ldGVycyk7CiAgICAgbV9k
cmF3aW5nQXJlYS0+c2V0UGFpbnRpbmdFbmFibGVkKGZhbHNlKTsKLSAgICBtX3BhZ2VPdmVybGF5
Q29udHJvbGxlci5pbml0aWFsaXplKCk7CiAKICNpZiBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKQog
ICAgIG1fdXNlQXN5bmNTY3JvbGxpbmcgPSBwYXJhbWV0ZXJzLnN0b3JlLmdldEJvb2xWYWx1ZUZv
cktleShXZWJQcmVmZXJlbmNlc0tleTo6dGhyZWFkZWRTY3JvbGxpbmdFbmFibGVkS2V5KCkpOwpA
QCAtMTIyNiw4ICsxMjI0LDYgQEAgdm9pZCBXZWJQYWdlOjpzZXRTaXplKGNvbnN0IFdlYkNvcmU6
OkludFNpemUmIHZpZXdTaXplKQogICAgIGlmICh2aWV3LT51c2VGaXhlZExheW91dCgpKQogICAg
ICAgICBzZW5kVmlld3BvcnRBdHRyaWJ1dGVzQ2hhbmdlZCgpOwogI2VuZGlmCi0KLSAgICBtX3Bh
Z2VPdmVybGF5Q29udHJvbGxlci5kaWRDaGFuZ2VWaWV3U2l6ZSgpOwogfQogCiAjaWYgVVNFKFRJ
TEVEX0JBQ0tJTkdfU1RPUkUpCkBAIC0xNDUzLDggKzE0NDksNiBAQCB2b2lkIFdlYlBhZ2U6OnNl
dERldmljZVNjYWxlRmFjdG9yKGZsb2F0IHNjYWxlRmFjdG9yKQogCiAgICAgaWYgKG1fZHJhd2lu
Z0FyZWEtPmxheWVyVHJlZUhvc3QoKSkKICAgICAgICAgbV9kcmF3aW5nQXJlYS0+bGF5ZXJUcmVl
SG9zdCgpLT5kZXZpY2VPclBhZ2VTY2FsZUZhY3RvckNoYW5nZWQoKTsKLQotICAgIG1fcGFnZU92
ZXJsYXlDb250cm9sbGVyLmRpZENoYW5nZURldmljZVNjYWxlRmFjdG9yKCk7CiB9CiAKIGZsb2F0
IFdlYlBhZ2U6OmRldmljZVNjYWxlRmFjdG9yKCkgY29uc3QKQEAgLTE1NzcsMTYgKzE1NzEsNiBA
QCB2b2lkIFdlYlBhZ2U6OnBvc3RJbmplY3RlZEJ1bmRsZU1lc3NhZ2UoY29uc3QgU3RyaW5nJiBt
ZXNzYWdlTmFtZSwgSVBDOjpNZXNzYWdlRAogICAgIGluamVjdGVkQnVuZGxlLT5kaWRSZWNlaXZl
TWVzc2FnZVRvUGFnZSh0aGlzLCBtZXNzYWdlTmFtZSwgbWVzc2FnZUJvZHkuZ2V0KCkpOwogfQog
Ci12b2lkIFdlYlBhZ2U6Omluc3RhbGxQYWdlT3ZlcmxheShQYXNzUmVmUHRyPFBhZ2VPdmVybGF5
PiBwYWdlT3ZlcmxheSwgUGFnZU92ZXJsYXk6OkZhZGVNb2RlIGZhZGVNb2RlKQotewotICAgIG1f
cGFnZU92ZXJsYXlDb250cm9sbGVyLmluc3RhbGxQYWdlT3ZlcmxheShwYWdlT3ZlcmxheSwgZmFk
ZU1vZGUpOwotfQotCi12b2lkIFdlYlBhZ2U6OnVuaW5zdGFsbFBhZ2VPdmVybGF5KFBhZ2VPdmVy
bGF5KiBwYWdlT3ZlcmxheSwgUGFnZU92ZXJsYXk6OkZhZGVNb2RlIGZhZGVNb2RlKQotewotICAg
IG1fcGFnZU92ZXJsYXlDb250cm9sbGVyLnVuaW5zdGFsbFBhZ2VPdmVybGF5KHBhZ2VPdmVybGF5
LCBmYWRlTW9kZSk7Ci19Ci0KICNpZiAhUExBVEZPUk0oSU9TKQogdm9pZCBXZWJQYWdlOjpzZXRI
ZWFkZXJQYWdlQmFubmVyKFBhc3NSZWZQdHI8UGFnZUJhbm5lcj4gcGFnZUJhbm5lcikKIHsKQEAg
LTE5MTQsNyArMTg5OCw3IEBAIHZvaWQgV2ViUGFnZTo6bW91c2VFdmVudChjb25zdCBXZWJNb3Vz
ZUV2ZW50JiBtb3VzZUV2ZW50KQogICAgICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmCi0gICAg
Ym9vbCBoYW5kbGVkID0gbV9wYWdlT3ZlcmxheUNvbnRyb2xsZXIuaGFuZGxlTW91c2VFdmVudCht
b3VzZUV2ZW50KTsKKyAgICBib29sIGhhbmRsZWQgPSBmYWxzZTsKIAogI2lmICFQTEFURk9STShJ
T1MpCiAgICAgaWYgKCFoYW5kbGVkICYmIG1faGVhZGVyQmFubmVyKQpAQCAtMTk0MCw3ICsxOTI0
LDcgQEAgdm9pZCBXZWJQYWdlOjptb3VzZUV2ZW50KGNvbnN0IFdlYk1vdXNlRXZlbnQmIG1vdXNl
RXZlbnQpCiAKIHZvaWQgV2ViUGFnZTo6bW91c2VFdmVudFN5bmNGb3JUZXN0aW5nKGNvbnN0IFdl
Yk1vdXNlRXZlbnQmIG1vdXNlRXZlbnQsIGJvb2wmIGhhbmRsZWQpCiB7Ci0gICAgaGFuZGxlZCA9
IG1fcGFnZU92ZXJsYXlDb250cm9sbGVyLmhhbmRsZU1vdXNlRXZlbnQobW91c2VFdmVudCk7Cisg
ICAgaGFuZGxlZCA9IGZhbHNlOwogI2lmICFQTEFURk9STShJT1MpCiAgICAgaWYgKCFoYW5kbGVk
ICYmIG1faGVhZGVyQmFubmVyKQogICAgICAgICBoYW5kbGVkID0gbV9oZWFkZXJCYW5uZXItPm1v
dXNlRXZlbnQobW91c2VFdmVudCk7CkBAIC0yODY5LDggKzI4NTMsNiBAQCB2b2lkIFdlYlBhZ2U6
OnVwZGF0ZVByZWZlcmVuY2VzKGNvbnN0IFdlYlByZWZlcmVuY2VzU3RvcmUmIHN0b3JlKQogCiAg
ICAgaWYgKG1fZHJhd2luZ0FyZWEpCiAgICAgICAgIG1fZHJhd2luZ0FyZWEtPnVwZGF0ZVByZWZl
cmVuY2VzKHN0b3JlKTsKLQotICAgIG1fcGFnZU92ZXJsYXlDb250cm9sbGVyLmRpZENoYW5nZVBy
ZWZlcmVuY2VzKCk7CiB9CiAKICNpZiBQTEFURk9STShDT0NPQSkKQEAgLTQ4MTEsOCArNDc5Myw2
IEBAIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXImIFdlYlBhZ2U6OnNlcnZpY2VzT3ZlcmxheUNv
bnRyb2xsZXIoKQogCiB2b2lkIFdlYlBhZ2U6OmRpZENoYW5nZVNjcm9sbE9mZnNldEZvckZyYW1l
KEZyYW1lKiBmcmFtZSkKIHsKLSAgICBtX3BhZ2VPdmVybGF5Q29udHJvbGxlci5kaWRTY3JvbGxG
cmFtZShmcmFtZSk7Ci0KICAgICBpZiAoIWZyYW1lLT5pc01haW5GcmFtZSgpKQogICAgICAgICBy
ZXR1cm47CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJQYWdlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCmlu
ZGV4IGNhNDZiYTBhLi40MjU1YTg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJQYWdlLmgKQEAgLTQxLDcgKzQxLDYgQEAKICNpbmNsdWRlICJMYXllclRyZWVIb3N0
LmgiCiAjaW5jbHVkZSAiTWVzc2FnZVJlY2VpdmVyLmgiCiAjaW5jbHVkZSAiTWVzc2FnZVNlbmRl
ci5oIgotI2luY2x1ZGUgIlBhZ2VPdmVybGF5Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIlBsdWdp
bi5oIgogI2luY2x1ZGUgIlNhbmRib3hFeHRlbnNpb24uaCIKICNpbmNsdWRlICJTaGFyZWFibGVC
aXRtYXAuaCIKQEAgLTE0MCw3ICsxMzksNiBAQCBjbGFzcyBEcmF3aW5nQXJlYTsKIGNsYXNzIElu
amVjdGVkQnVuZGxlQmFja0ZvcndhcmRMaXN0OwogY2xhc3MgTm90aWZpY2F0aW9uUGVybWlzc2lv
blJlcXVlc3RNYW5hZ2VyOwogY2xhc3MgUGFnZUJhbm5lcjsKLWNsYXNzIFBhZ2VPdmVybGF5Owog
Y2xhc3MgUGx1Z2luVmlldzsKIGNsYXNzIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI7CiBjbGFz
cyBWaXNpYmxlQ29udGVudFJlY3RVcGRhdGVJbmZvOwpAQCAtMjA2LDggKzIwNCw2IEBAIHB1Ymxp
YzoKICAgICAKICAgICBJbmplY3RlZEJ1bmRsZUJhY2tGb3J3YXJkTGlzdCogYmFja0ZvcndhcmRM
aXN0KCk7CiAgICAgRHJhd2luZ0FyZWEqIGRyYXdpbmdBcmVhKCkgY29uc3QgeyByZXR1cm4gbV9k
cmF3aW5nQXJlYS5nZXQoKTsgfQotICAgIGNvbnN0IFBhZ2VPdmVybGF5Q29udHJvbGxlciYgcGFn
ZU92ZXJsYXlDb250cm9sbGVyKCkgY29uc3QgeyByZXR1cm4gbV9wYWdlT3ZlcmxheUNvbnRyb2xs
ZXI7IH0KLSAgICBQYWdlT3ZlcmxheUNvbnRyb2xsZXImIHBhZ2VPdmVybGF5Q29udHJvbGxlcigp
IHsgcmV0dXJuIG1fcGFnZU92ZXJsYXlDb250cm9sbGVyOyB9CiAjaWYgRU5BQkxFKEFTWU5DX1ND
Uk9MTElORykKICAgICBXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvciogc2Nyb2xsaW5nQ29v
cmRpbmF0b3IoKSBjb25zdDsKICNlbmRpZgpAQCAtNDE2LDggKzQxMiw2IEBAIHB1YmxpYzoKIAog
ICAgIGJvb2wgd2luZG93SXNGb2N1c2VkKCkgY29uc3Q7CiAgICAgYm9vbCB3aW5kb3dBbmRXZWJQ
YWdlQXJlRm9jdXNlZCgpIGNvbnN0OwotICAgIHZvaWQgaW5zdGFsbFBhZ2VPdmVybGF5KFBhc3NS
ZWZQdHI8UGFnZU92ZXJsYXk+LCBQYWdlT3ZlcmxheTo6RmFkZU1vZGUgPSBQYWdlT3ZlcmxheTo6
RmFkZU1vZGU6OkRvTm90RmFkZSk7Ci0gICAgdm9pZCB1bmluc3RhbGxQYWdlT3ZlcmxheShQYWdl
T3ZlcmxheSosIFBhZ2VPdmVybGF5OjpGYWRlTW9kZSA9IFBhZ2VPdmVybGF5OjpGYWRlTW9kZTo6
RG9Ob3RGYWRlKTsKIAogI2lmICFQTEFURk9STShJT1MpCiAgICAgdm9pZCBzZXRIZWFkZXJQYWdl
QmFubmVyKFBhc3NSZWZQdHI8UGFnZUJhbm5lcj4pOwpAQCAtODIyLDkgKzgxNiw2IEBAIHB1Ymxp
YzoKICAgICBXZWJDb3JlOjpTY3JvbGxQaW5uaW5nQmVoYXZpb3Igc2Nyb2xsUGlubmluZ0JlaGF2
aW9yKCkgeyByZXR1cm4gbV9zY3JvbGxQaW5uaW5nQmVoYXZpb3I7IH0KICAgICB2b2lkIHNldFNj
cm9sbFBpbm5pbmdCZWhhdmlvcih1aW50MzJfdCAvKiBXZWJDb3JlOjpTY3JvbGxQaW5uaW5nQmVo
YXZpb3IgKi8gcGlubmluZyk7CiAKLSAgICBXS1R5cGVSZWYgcGFnZU92ZXJsYXlDb3B5QWNjZXNz
aWJpbGl0eUF0dHJpYnV0ZVZhbHVlKFdLU3RyaW5nUmVmIGF0dHJpYnV0ZSwgV0tUeXBlUmVmIHBh
cmFtZXRlcik7Ci0gICAgV0tBcnJheVJlZiBwYWdlT3ZlcmxheUNvcHlBY2Nlc3NpYmlsaXR5QXR0
cmlidXRlc05hbWVzKGJvb2wgcGFyYW1ldGVyaXplZE5hbWVzKTsKLQogICAgIFBhc3NSZWZQdHI8
V2ViQ29yZTo6RG9jdW1lbnRMb2FkZXI+IGNyZWF0ZURvY3VtZW50TG9hZGVyKFdlYkNvcmU6OkZy
YW1lJiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgV2ViQ29yZTo6U3Vi
c3RpdHV0ZURhdGEmKTsKIAogICAgIHZvaWQgZ2V0Qnl0ZWNvZGVQcm9maWxlKHVpbnQ2NF90IGNh
bGxiYWNrSUQpOwpAQCAtMTI3OCw4ICsxMjY5LDYgQEAgcHJpdmF0ZToKICNpZiBFTkFCTEUoU0VS
VklDRV9DT05UUk9MUykgfHwgRU5BQkxFKFRFTEVQSE9ORV9OVU1CRVJfREVURUNUSU9OKQogICAg
IHN0ZDo6dW5pcXVlX3B0cjxTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyPiBtX3NlcnZpY2VzT3Zl
cmxheUNvbnRyb2xsZXI7CiAjZW5kaWYKLQotICAgIFBhZ2VPdmVybGF5Q29udHJvbGxlciBtX3Bh
Z2VPdmVybGF5Q29udHJvbGxlcjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VPdmVybGF5LmNw
cCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlT3ZlcmxheS5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWQyZTNkNQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlT3ZlcmxheS5j
cHAKQEAgLTAsMCArMSwxMTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiV2ViUGFnZU92ZXJsYXkuaCIKKworI2luY2x1ZGUgIldlYkZyYW1lLmgiCisjaW5j
bHVkZSAiV2ViUGFnZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NMYXllci5oPgorI2lu
Y2x1ZGUgPFdlYkNvcmUvUGFnZU92ZXJsYXkuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7
CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitQYXNzUmVmUHRyPFdlYlBhZ2VPdmVybGF5PiBXZWJQ
YWdlT3ZlcmxheTo6Y3JlYXRlKFdlYlBhZ2VPdmVybGF5OjpDbGllbnQmIGNsaWVudCwgUGFnZU92
ZXJsYXk6Ok92ZXJsYXlUeXBlIG92ZXJsYXlUeXBlKQoreworICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgV2ViUGFnZU92ZXJsYXkoY2xpZW50LCBvdmVybGF5VHlwZSkpOworfQorCitXZWJQYWdlT3Zl
cmxheTo6V2ViUGFnZU92ZXJsYXkoV2ViUGFnZU92ZXJsYXk6OkNsaWVudCYgY2xpZW50LCBQYWdl
T3ZlcmxheTo6T3ZlcmxheVR5cGUgb3ZlcmxheVR5cGUpCisgICAgOiBtX292ZXJsYXkoUGFnZU92
ZXJsYXk6OmNyZWF0ZSgqdGhpcywgb3ZlcmxheVR5cGUpKQorICAgICwgbV9jbGllbnQoY2xpZW50
KQoreworfQorCitXZWJQYWdlT3ZlcmxheTo6fldlYlBhZ2VPdmVybGF5KCkKK3sKK30KKwordm9p
ZCBXZWJQYWdlT3ZlcmxheTo6c2V0TmVlZHNEaXNwbGF5KGNvbnN0IEludFJlY3QmIGRpcnR5UmVj
dCkKK3sKKyAgICBtX292ZXJsYXktPnNldE5lZWRzRGlzcGxheShkaXJ0eVJlY3QpOworfQorCit2
b2lkIFdlYlBhZ2VPdmVybGF5OjpzZXROZWVkc0Rpc3BsYXkoKQoreworICAgIG1fb3ZlcmxheS0+
c2V0TmVlZHNEaXNwbGF5KCk7Cit9CisKK3ZvaWQgV2ViUGFnZU92ZXJsYXk6OmNsZWFyKCkKK3sK
KyAgICBtX292ZXJsYXktPmNsZWFyKCk7Cit9CisKK3ZvaWQgV2ViUGFnZU92ZXJsYXk6OnBhZ2VP
dmVybGF5RGVzdHJveWVkKFBhZ2VPdmVybGF5JikKK3sKKyAgICBtX2NsaWVudC5wYWdlT3Zlcmxh
eURlc3Ryb3llZCgqdGhpcyk7Cit9CisKK3ZvaWQgV2ViUGFnZU92ZXJsYXk6OndpbGxNb3ZlVG9Q
YWdlKFBhZ2VPdmVybGF5JiwgUGFnZSogcGFnZSkKK3sKKyAgICBtX2NsaWVudC53aWxsTW92ZVRv
UGFnZSgqdGhpcywgcGFnZSA/IFdlYlBhZ2U6OmZyb21Db3JlUGFnZShwYWdlKSA6IG51bGxwdHIp
OworfQorCit2b2lkIFdlYlBhZ2VPdmVybGF5OjpkaWRNb3ZlVG9QYWdlKFBhZ2VPdmVybGF5Jiwg
UGFnZSogcGFnZSkKK3sKKyAgICBtX2NsaWVudC5kaWRNb3ZlVG9QYWdlKCp0aGlzLCBwYWdlID8g
V2ViUGFnZTo6ZnJvbUNvcmVQYWdlKHBhZ2UpIDogbnVsbHB0cik7Cit9CisKK3ZvaWQgV2ViUGFn
ZU92ZXJsYXk6OmRyYXdSZWN0KFBhZ2VPdmVybGF5JiwgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0
LCBjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpCit7CisgICAgbV9jbGllbnQuZHJhd1JlY3QoKnRo
aXMsIGNvbnRleHQsIGRpcnR5UmVjdCk7Cit9CisKK2Jvb2wgV2ViUGFnZU92ZXJsYXk6Om1vdXNl
RXZlbnQoUGFnZU92ZXJsYXkmLCBjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIGV2ZW50KQorewor
ICAgIHJldHVybiBtX2NsaWVudC5tb3VzZUV2ZW50KCp0aGlzLCBldmVudCk7Cit9CisKK3ZvaWQg
V2ViUGFnZU92ZXJsYXk6OmRpZFNjcm9sbEZyYW1lKFBhZ2VPdmVybGF5JiwgRnJhbWUmIGZyYW1l
KQoreworICAgIG1fY2xpZW50LmRpZFNjcm9sbEZyYW1lKCp0aGlzLCBXZWJGcmFtZTo6ZnJvbUNv
cmVGcmFtZShmcmFtZSkpOworfQorCitib29sIFdlYlBhZ2VPdmVybGF5Ojpjb3B5QWNjZXNzaWJp
bGl0eUF0dHJpYnV0ZVN0cmluZ1ZhbHVlRm9yUG9pbnQoUGFnZU92ZXJsYXkmLCBTdHJpbmcgYXR0
cmlidXRlLCBGbG9hdFBvaW50IHBhcmFtZXRlciwgU3RyaW5nJiB2YWx1ZSkKK3sKKyAgICByZXR1
cm4gbV9jbGllbnQuY29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVTdHJpbmdWYWx1ZUZvclBvaW50
KCp0aGlzLCBhdHRyaWJ1dGUsIHBhcmFtZXRlciwgdmFsdWUpOworfQorCitib29sIFdlYlBhZ2VP
dmVybGF5Ojpjb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZUJvb2xWYWx1ZUZvclBvaW50KFBhZ2VP
dmVybGF5JiwgU3RyaW5nIGF0dHJpYnV0ZSwgRmxvYXRQb2ludCBwYXJhbWV0ZXIsIGJvb2wmIHZh
bHVlKQoreworICAgIHJldHVybiBtX2NsaWVudC5jb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZUJv
b2xWYWx1ZUZvclBvaW50KCp0aGlzLCBhdHRyaWJ1dGUsIHBhcmFtZXRlciwgdmFsdWUpOworfQor
CitWZWN0b3I8U3RyaW5nPiBXZWJQYWdlT3ZlcmxheTo6Y29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1
dGVOYW1lcyhQYWdlT3ZlcmxheSYsIGJvb2wgcGFyYW1ldGVyaXplZE5hbWVzKQoreworICAgIHJl
dHVybiBtX2NsaWVudC5jb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZU5hbWVzKCp0aGlzLCBwYXJh
bWV0ZXJpemVkTmFtZXMpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlT3ZlcmxheS5oIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VPdmVybGF5LmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDZkZGUxNgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlT3ZlcmxheS5oCkBAIC0wLDAg
KzEsOTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYlBhZ2VPdmVybGF5X2gKKyNkZWZpbmUg
V2ViUGFnZU92ZXJsYXlfaAorCisjaW5jbHVkZSAiQVBJT2JqZWN0LmgiCisjaW5jbHVkZSA8V2Vi
Q29yZS9GbG9hdFBvaW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9JbnRSZWN0Lmg+CisjaW5jbHVk
ZSA8V2ViQ29yZS9QYWdlT3ZlcmxheS5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisK
K25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJGcmFtZTsKK2NsYXNzIFdlYlBhZ2U7CisK
K2NsYXNzIFdlYlBhZ2VPdmVybGF5IDogcHVibGljIEFQSTo6T2JqZWN0SW1wbDxBUEk6Ok9iamVj
dDo6VHlwZTo6QnVuZGxlUGFnZU92ZXJsYXk+LCBwcml2YXRlIFdlYkNvcmU6OlBhZ2VPdmVybGF5
OjpDbGllbnQgeworcHVibGljOgorICAgIGNsYXNzIENsaWVudCB7CisgICAgcHJvdGVjdGVkOgor
ICAgICAgICB2aXJ0dWFsIH5DbGllbnQoKSB7IH0KKworICAgIHB1YmxpYzoKKyAgICAgICAgdmly
dHVhbCB2b2lkIHBhZ2VPdmVybGF5RGVzdHJveWVkKFdlYlBhZ2VPdmVybGF5JikgPSAwOworICAg
ICAgICB2aXJ0dWFsIHZvaWQgd2lsbE1vdmVUb1BhZ2UoV2ViUGFnZU92ZXJsYXkmLCBXZWJQYWdl
KikgPSAwOworICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkTW92ZVRvUGFnZShXZWJQYWdlT3Zlcmxh
eSYsIFdlYlBhZ2UqKSA9IDA7CisgICAgICAgIHZpcnR1YWwgdm9pZCBkcmF3UmVjdChXZWJQYWdl
T3ZlcmxheSYsIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IFdlYkNvcmU6OkludFJl
Y3QmIGRpcnR5UmVjdCkgPSAwOworICAgICAgICB2aXJ0dWFsIGJvb2wgbW91c2VFdmVudChXZWJQ
YWdlT3ZlcmxheSYsIGNvbnN0IFdlYkNvcmU6OlBsYXRmb3JtTW91c2VFdmVudCYpID0gMDsKKyAg
ICAgICAgdmlydHVhbCB2b2lkIGRpZFNjcm9sbEZyYW1lKFdlYlBhZ2VPdmVybGF5JiwgV2ViRnJh
bWUqKSB7IH0KKworICAgICAgICB2aXJ0dWFsIGJvb2wgY29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1
dGVTdHJpbmdWYWx1ZUZvclBvaW50KFdlYlBhZ2VPdmVybGF5JiwgU3RyaW5nIC8qIGF0dHJpYnV0
ZSAqLywgV2ViQ29yZTo6RmxvYXRQb2ludCAvKiBwYXJhbWV0ZXIgKi8sIFN0cmluZyYgdmFsdWUp
IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgICAgIHZpcnR1YWwgYm9vbCBjb3B5QWNjZXNzaWJpbGl0
eUF0dHJpYnV0ZUJvb2xWYWx1ZUZvclBvaW50KFdlYlBhZ2VPdmVybGF5JiwgU3RyaW5nIC8qIGF0
dHJpYnV0ZSAqLywgV2ViQ29yZTo6RmxvYXRQb2ludCAvKiBwYXJhbWV0ZXIgKi8sIGJvb2wmIHZh
bHVlKSB7IHJldHVybiBmYWxzZTsgfQorICAgICAgICB2aXJ0dWFsIFZlY3RvcjxTdHJpbmc+IGNv
cHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlTmFtZXMoV2ViUGFnZU92ZXJsYXkmLCBib29sIC8qIHBh
cmFtZXRlcml6ZWROYW1lcyAqLykgeyByZXR1cm4gVmVjdG9yPFN0cmluZz4oKTsgfQorICAgIH07
CisKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJQYWdlT3ZlcmxheT4gY3JlYXRlKENsaWVudCYs
IFdlYkNvcmU6OlBhZ2VPdmVybGF5OjpPdmVybGF5VHlwZSA9IFdlYkNvcmU6OlBhZ2VPdmVybGF5
OjpPdmVybGF5VHlwZTo6Vmlldyk7CisgICAgdmlydHVhbCB+V2ViUGFnZU92ZXJsYXkoKTsKKwor
ICAgIHZvaWQgc2V0TmVlZHNEaXNwbGF5KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGRpcnR5UmVj
dCk7CisgICAgdm9pZCBzZXROZWVkc0Rpc3BsYXkoKTsKKworICAgIHZvaWQgY2xlYXIoKTsKKwor
ICAgIFdlYkNvcmU6OlBhZ2VPdmVybGF5KiBjb3JlT3ZlcmxheSgpIGNvbnN0IHsgcmV0dXJuIG1f
b3ZlcmxheS5nZXQoKTsgfQorICAgIENsaWVudCYgY2xpZW50KCkgY29uc3QgeyByZXR1cm4gbV9j
bGllbnQ7IH0KKworcHJpdmF0ZToKKyAgICBXZWJQYWdlT3ZlcmxheShDbGllbnQmLCBXZWJDb3Jl
OjpQYWdlT3ZlcmxheTo6T3ZlcmxheVR5cGUpOworCisgICAgLy8gV2ViQ29yZTo6UGFnZU92ZXJs
YXk6OkNsaWVudAorICAgIHZpcnR1YWwgdm9pZCBwYWdlT3ZlcmxheURlc3Ryb3llZChXZWJDb3Jl
OjpQYWdlT3ZlcmxheSYpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCB3aWxsTW92ZVRvUGFn
ZShXZWJDb3JlOjpQYWdlT3ZlcmxheSYsIFdlYkNvcmU6OlBhZ2UqKSBvdmVycmlkZTsKKyAgICB2
aXJ0dWFsIHZvaWQgZGlkTW92ZVRvUGFnZShXZWJDb3JlOjpQYWdlT3ZlcmxheSYsIFdlYkNvcmU6
OlBhZ2UqKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd1JlY3QoV2ViQ29yZTo6UGFn
ZU92ZXJsYXkmLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmLCBjb25zdCBXZWJDb3JlOjpJbnRS
ZWN0JiBkaXJ0eVJlY3QpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBtb3VzZUV2ZW50KFdl
YkNvcmU6OlBhZ2VPdmVybGF5JiwgY29uc3QgV2ViQ29yZTo6UGxhdGZvcm1Nb3VzZUV2ZW50Jikg
b3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGRpZFNjcm9sbEZyYW1lKFdlYkNvcmU6OlBhZ2VP
dmVybGF5JiwgV2ViQ29yZTo6RnJhbWUmKSBvdmVycmlkZTsKKworICAgIHZpcnR1YWwgYm9vbCBj
b3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVN0cmluZ1ZhbHVlRm9yUG9pbnQoV2ViQ29yZTo6UGFn
ZU92ZXJsYXkmLCBTdHJpbmcgLyogYXR0cmlidXRlICovLCBXZWJDb3JlOjpGbG9hdFBvaW50IC8q
IHBhcmFtZXRlciAqLywgU3RyaW5nJiB2YWx1ZSkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29s
IGNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlQm9vbFZhbHVlRm9yUG9pbnQoV2ViQ29yZTo6UGFn
ZU92ZXJsYXkmLCBTdHJpbmcgLyogYXR0cmlidXRlICovLCBXZWJDb3JlOjpGbG9hdFBvaW50IC8q
IHBhcmFtZXRlciAqLywgYm9vbCYgdmFsdWUpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgVmVjdG9y
PFN0cmluZz4gY29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVOYW1lcyhXZWJDb3JlOjpQYWdlT3Zl
cmxheSYsIGJvb2wgLyogcGFyYW1ldGVyaXplZE5hbWVzICovKSBvdmVycmlkZTsKKworCisgICAg
UmVmUHRyPFdlYkNvcmU6OlBhZ2VPdmVybGF5PiBtX292ZXJsYXk7CisgICAgQ2xpZW50JiBtX2Ns
aWVudDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gV2ViUGFnZU92
ZXJsYXlfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2lv
cy9GaW5kQ29udHJvbGxlcklPUy5tbSBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9pb3MvRmluZENvbnRyb2xsZXJJT1MubW0KaW5kZXggMDkwN2JkZi4uYWYyY2UxNSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9GaW5kQ29udHJvbGxl
cklPUy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL0ZpbmRD
b250cm9sbGVySU9TLm1tCkBAIC0zNiw2ICszNiw3IEBACiAjaW1wb3J0IDxXZWJDb3JlL0dyYXBo
aWNzQ29udGV4dC5oPgogI2ltcG9ydCA8V2ViQ29yZS9NYWluRnJhbWUuaD4KICNpbXBvcnQgPFdl
YkNvcmUvUGFnZS5oPgorI2ltcG9ydCA8V2ViQ29yZS9QYWdlT3ZlcmxheUNvbnRyb2xsZXIuaD4K
IAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKQEAgLTUyLDcgKzUzLDcgQEAgc3RhdGljIENv
bG9yIGhpZ2hsaWdodENvbG9yKCkKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLXZvaWQgRmluZElu
ZGljYXRvck92ZXJsYXlDbGllbnRJT1M6OmRyYXdSZWN0KFBhZ2VPdmVybGF5KiBvdmVybGF5LCBX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IFdlYkNvcmU6OkludFJlY3Qm
IGRpcnR5UmVjdCkKK3ZvaWQgRmluZEluZGljYXRvck92ZXJsYXlDbGllbnRJT1M6OmRyYXdSZWN0
KFBhZ2VPdmVybGF5JiBvdmVybGF5LCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IElu
dFJlY3QmIGRpcnR5UmVjdCkKIHsKICAgICAvLyBGSVhNRTogU3VwcG9ydCBtdWx0aXBsZSB0ZXh0
IHJlY3RzLgogCkBAIC04NSwxMSArODYsMTEgQEAgYm9vbCBGaW5kQ29udHJvbGxlcjo6dXBkYXRl
RmluZEluZGljYXRvcihGcmFtZSYgc2VsZWN0ZWRGcmFtZSwgYm9vbCBpc1Nob3dpbmdPdmUKICAg
ICBtYXRjaFJlY3QuaW5mbGF0ZVkodG90YWxWZXJ0aWNhbE1hcmdpbik7CiAKICAgICBpZiAobV9m
aW5kSW5kaWNhdG9yT3ZlcmxheSkKLSAgICAgICAgbV93ZWJQYWdlLT51bmluc3RhbGxQYWdlT3Zl
cmxheShtX2ZpbmRJbmRpY2F0b3JPdmVybGF5LmdldCgpKTsKKyAgICAgICAgbV93ZWJQYWdlLT5j
b3JlUGFnZSgpLT5wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKS51bmluc3RhbGxQYWdlT3ZlcmxheSht
X2ZpbmRJbmRpY2F0b3JPdmVybGF5LmdldCgpLCBQYWdlT3ZlcmxheTo6RmFkZU1vZGU6OkRvTm90
RmFkZSk7CiAKICAgICBtX2ZpbmRJbmRpY2F0b3JPdmVybGF5Q2xpZW50ID0gc3RkOjptYWtlX3Vu
aXF1ZTxGaW5kSW5kaWNhdG9yT3ZlcmxheUNsaWVudElPUz4oc2VsZWN0ZWRGcmFtZSk7Ci0gICAg
bV9maW5kSW5kaWNhdG9yT3ZlcmxheSA9IFBhZ2VPdmVybGF5OjpjcmVhdGUobV9maW5kSW5kaWNh
dG9yT3ZlcmxheUNsaWVudC5nZXQoKSwgUGFnZU92ZXJsYXk6Ok92ZXJsYXlUeXBlOjpEb2N1bWVu
dCk7Ci0gICAgbV93ZWJQYWdlLT5pbnN0YWxsUGFnZU92ZXJsYXkobV9maW5kSW5kaWNhdG9yT3Zl
cmxheSk7CisgICAgbV9maW5kSW5kaWNhdG9yT3ZlcmxheSA9IFBhZ2VPdmVybGF5OjpjcmVhdGUo
Km1fZmluZEluZGljYXRvck92ZXJsYXlDbGllbnQsIFBhZ2VPdmVybGF5OjpPdmVybGF5VHlwZTo6
RG9jdW1lbnQpOworICAgIG1fd2ViUGFnZS0+Y29yZVBhZ2UoKS0+cGFnZU92ZXJsYXlDb250cm9s
bGVyKCkuaW5zdGFsbFBhZ2VPdmVybGF5KG1fZmluZEluZGljYXRvck92ZXJsYXksIFBhZ2VPdmVy
bGF5OjpGYWRlTW9kZTo6RG9Ob3RGYWRlKTsKIAogICAgIG1fZmluZEluZGljYXRvck92ZXJsYXkt
PnNldEZyYW1lKG1hdGNoUmVjdCk7CiAgICAgbV9maW5kSW5kaWNhdG9yT3ZlcmxheS0+c2V0TmVl
ZHNEaXNwbGF5KCk7CkBAIC0xMDYsNyArMTA3LDcgQEAgdm9pZCBGaW5kQ29udHJvbGxlcjo6aGlk
ZUZpbmRJbmRpY2F0b3IoKQogICAgIGlmICghbV9pc1Nob3dpbmdGaW5kSW5kaWNhdG9yKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBtX3dlYlBhZ2UtPnVuaW5zdGFsbFBhZ2VPdmVybGF5KG1fZmlu
ZEluZGljYXRvck92ZXJsYXkuZ2V0KCkpOworICAgIG1fd2ViUGFnZS0+Y29yZVBhZ2UoKS0+cGFn
ZU92ZXJsYXlDb250cm9sbGVyKCkudW5pbnN0YWxsUGFnZU92ZXJsYXkobV9maW5kSW5kaWNhdG9y
T3ZlcmxheS5nZXQoKSwgUGFnZU92ZXJsYXk6OkZhZGVNb2RlOjpEb05vdEZhZGUpOwogICAgIG1f
ZmluZEluZGljYXRvck92ZXJsYXkgPSBudWxscHRyOwogICAgIG1faXNTaG93aW5nRmluZEluZGlj
YXRvciA9IGZhbHNlOwogICAgIG1fZm91bmRTdHJpbmdNYXRjaEluZGV4ID0gLTE7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL0ZpbmRJbmRpY2F0b3JP
dmVybGF5Q2xpZW50SU9TLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9z
L0ZpbmRJbmRpY2F0b3JPdmVybGF5Q2xpZW50SU9TLmgKaW5kZXggMzEwMTc2Ny4uNDI5MjI4MSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9GaW5kSW5k
aWNhdG9yT3ZlcmxheUNsaWVudElPUy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9pb3MvRmluZEluZGljYXRvck92ZXJsYXlDbGllbnRJT1MuaApAQCAtMjYsMTMgKzI2
LDEzIEBACiAjaWZuZGVmIEZpbmRJbmRpY2F0b3JPdmVybGF5Q2xpZW50SU9TX2gKICNkZWZpbmUg
RmluZEluZGljYXRvck92ZXJsYXlDbGllbnRJT1NfaAogCi0jaW1wb3J0ICJQYWdlT3ZlcmxheS5o
IgogI2ltcG9ydCA8V2ViQ29yZS9GcmFtZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9HcmFwaGljc0Nv
bnRleHQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvUGFnZU92ZXJsYXkuaD4KIAogbmFtZXNwYWNlIFdl
YktpdCB7CiAKLWNsYXNzIEZpbmRJbmRpY2F0b3JPdmVybGF5Q2xpZW50SU9TIDogcHVibGljIFBh
Z2VPdmVybGF5OjpDbGllbnQgeworY2xhc3MgRmluZEluZGljYXRvck92ZXJsYXlDbGllbnRJT1Mg
OiBwdWJsaWMgV2ViQ29yZTo6UGFnZU92ZXJsYXk6OkNsaWVudCB7CiBwdWJsaWM6CiAgICAgRmlu
ZEluZGljYXRvck92ZXJsYXlDbGllbnRJT1MoV2ViQ29yZTo6RnJhbWUmIGZyYW1lKQogICAgICAg
ICA6IG1fZnJhbWUoZnJhbWUpCkBAIC00MCwxMSArNDAsMTEgQEAgcHVibGljOgogICAgIH0KIAog
cHJpdmF0ZToKLSAgICB2aXJ0dWFsIHZvaWQgcGFnZU92ZXJsYXlEZXN0cm95ZWQoUGFnZU92ZXJs
YXkqKSBvdmVycmlkZSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgd2lsbE1vdmVUb1dlYlBhZ2UoUGFn
ZU92ZXJsYXkqLCBXZWJQYWdlKikgb3ZlcnJpZGUgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGRpZE1v
dmVUb1dlYlBhZ2UoUGFnZU92ZXJsYXkqLCBXZWJQYWdlKikgb3ZlcnJpZGUgeyB9Ci0gICAgdmly
dHVhbCB2b2lkIGRyYXdSZWN0KFBhZ2VPdmVybGF5KiwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
JiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgZGlydHlSZWN0KSBvdmVycmlkZTsKLSAgICB2aXJ0
dWFsIGJvb2wgbW91c2VFdmVudChQYWdlT3ZlcmxheSosIGNvbnN0IFdlYk1vdXNlRXZlbnQmKSBv
dmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgdm9pZCBwYWdlT3ZlcmxheURl
c3Ryb3llZChXZWJDb3JlOjpQYWdlT3ZlcmxheSYpIG92ZXJyaWRlIHsgfQorICAgIHZpcnR1YWwg
dm9pZCB3aWxsTW92ZVRvUGFnZShXZWJDb3JlOjpQYWdlT3ZlcmxheSYsIFdlYkNvcmU6OlBhZ2Uq
KSBvdmVycmlkZSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGlkTW92ZVRvUGFnZShXZWJDb3JlOjpQ
YWdlT3ZlcmxheSYsIFdlYkNvcmU6OlBhZ2UqKSBvdmVycmlkZSB7IH0KKyAgICB2aXJ0dWFsIHZv
aWQgZHJhd1JlY3QoV2ViQ29yZTo6UGFnZU92ZXJsYXkmLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQmLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBkaXJ0eVJlY3QpIG92ZXJyaWRlOworICAgIHZp
cnR1YWwgYm9vbCBtb3VzZUV2ZW50KFdlYkNvcmU6OlBhZ2VPdmVybGF5JiwgY29uc3QgV2ViQ29y
ZTo6UGxhdGZvcm1Nb3VzZUV2ZW50Jikgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KIAogICAg
IFdlYkNvcmU6OkZyYW1lJiBtX2ZyYW1lOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWEuaCBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvUmVtb3RlTGF5ZXJUcmVlRHJhd2lu
Z0FyZWEuaAppbmRleCAxY2I1MTAwLi5jNTJhM2JmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1JlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhLmgKKysr
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9SZW1vdGVMYXllclRyZWVE
cmF3aW5nQXJlYS5oCkBAIC02Nyw2ICs2Nyw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lk
IHNldFJvb3RDb21wb3NpdGluZ0xheWVyKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKSBvdmVycmlk
ZTsKICAgICB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVDb21wb3NpdGluZ0xheWVyRmx1c2goKSBvdmVy
cmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVDb21wb3NpdGluZ0xheWVyRmx1c2hJbW1l
ZGlhdGVseSgpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBhdHRhY2hWaWV3T3ZlcmxheUdy
YXBoaWNzTGF5ZXIoV2ViQ29yZTo6RnJhbWUqLCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKikgb3Zl
cnJpZGU7CiAKICAgICB2aXJ0dWFsIHZvaWQgYWRkVHJhbnNhY3Rpb25DYWxsYmFja0lEKHVpbnQ2
NF90IGNhbGxiYWNrSUQpIG92ZXJyaWRlOwogCkBAIC0xMDcsNiArMTA4LDcgQEAgcHJpdmF0ZToK
ICAgICB2aXJ0dWFsIGJvb2wgYWRqdXN0TGF5ZXJGbHVzaFRocm90dGxpbmcoV2ViQ29yZTo6TGF5
ZXJGbHVzaFRocm90dGxlU3RhdGU6OkZsYWdzKSBvdmVycmlkZTsKIAogICAgIHZvaWQgdXBkYXRl
U2Nyb2xsZWRFeHBvc2VkUmVjdCgpOworICAgIHZvaWQgdXBkYXRlUm9vdExheWVycygpOwogCiAg
ICAgdm9pZCBsYXllckZsdXNoVGltZXJGaXJlZChXZWJDb3JlOjpUaW1lcjxSZW1vdGVMYXllclRy
ZWVEcmF3aW5nQXJlYT4qKTsKICAgICB2b2lkIGZsdXNoTGF5ZXJzKCk7CkBAIC0xNjAsNiArMTYy
LDkgQEAgcHJpdmF0ZToKIAogICAgIHVpbnQ2NF90IG1fY3VycmVudFRyYW5zYWN0aW9uSUQ7CiAg
ICAgVmVjdG9yPFJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uOjpUcmFuc2FjdGlvbkNhbGxiYWNr
SUQ+IG1fcGVuZGluZ0NhbGxiYWNrSURzOworCisgICAgV2ViQ29yZTo6R3JhcGhpY3NMYXllciog
bV9jb250ZW50TGF5ZXI7CisgICAgV2ViQ29yZTo6R3JhcGhpY3NMYXllciogbV92aWV3T3Zlcmxh
eVJvb3RMYXllcjsKIH07CiAKIERSQVdJTkdfQVJFQV9UWVBFX0NBU1RTKFJlbW90ZUxheWVyVHJl
ZURyYXdpbmdBcmVhLCB0eXBlKCkgPT0gRHJhd2luZ0FyZWFUeXBlUmVtb3RlTGF5ZXJUcmVlKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvUmVtb3Rl
TGF5ZXJUcmVlRHJhd2luZ0FyZWEubW0gYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvbWFjL1JlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhLm1tCmluZGV4IDM3Yzg5NDcuLjllNDhi
NTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvUmVt
b3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWEubW0KKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL21hYy9SZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYS5tbQpAQCAtNDAsNiArNDAs
NyBAQAogI2ltcG9ydCA8V2ViQ29yZS9GcmFtZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9GcmFtZVZp
ZXcuaD4KICNpbXBvcnQgPFdlYkNvcmUvTWFpbkZyYW1lLmg+CisjaW1wb3J0IDxXZWJDb3JlL1Bh
Z2VPdmVybGF5Q29udHJvbGxlci5oPgogI2ltcG9ydCA8V2ViQ29yZS9SZW5kZXJMYXllckNvbXBv
c2l0b3IuaD4KICNpbXBvcnQgPFdlYkNvcmUvUmVuZGVyVmlldy5oPgogI2ltcG9ydCA8V2ViQ29y
ZS9TZXR0aW5ncy5oPgpAQCAtNjYsNiArNjcsOCBAQCBSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJl
YTo6UmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWEoV2ViUGFnZSYgd2ViUGFnZSwgY29uc3QgVwog
ICAgICwgbV9oYWRGbHVzaERlZmVycmVkV2hpbGVXYWl0aW5nRm9yQmFja2luZ1N0b3JlU3dhcChm
YWxzZSkKICAgICAsIG1fZGlzcGxheVJlZnJlc2hNb25pdG9yc1RvTm90aWZ5KG51bGxwdHIpCiAg
ICAgLCBtX2N1cnJlbnRUcmFuc2FjdGlvbklEKDApCisgICAgLCBtX2NvbnRlbnRMYXllcihudWxs
cHRyKQorICAgICwgbV92aWV3T3ZlcmxheVJvb3RMYXllcihudWxscHRyKQogewogICAgIHdlYlBh
Z2UuY29yZVBhZ2UoKS0+c2V0dGluZ3MoKS5zZXRGb3JjZUNvbXBvc2l0aW5nTW9kZSh0cnVlKTsK
ICNpZiBQTEFURk9STShJT1MpCkBAIC0xMTMsMTUgKzExNiwzMSBAQCB2b2lkIFJlbW90ZUxheWVy
VHJlZURyYXdpbmdBcmVhOjp3aWxsRGVzdHJveURpc3BsYXlSZWZyZXNoTW9uaXRvcihEaXNwbGF5
UmVmcmVzaAogICAgICAgICBtX2Rpc3BsYXlSZWZyZXNoTW9uaXRvcnNUb05vdGlmeS0+cmVtb3Zl
KHJlbW90ZU1vbml0b3IpOwogfQogCi12b2lkIFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhOjpz
ZXRSb290Q29tcG9zaXRpbmdMYXllcihHcmFwaGljc0xheWVyKiByb290TGF5ZXIpCit2b2lkIFJl
bW90ZUxheWVyVHJlZURyYXdpbmdBcmVhOjp1cGRhdGVSb290TGF5ZXJzKCkKIHsKICAgICBWZWN0
b3I8R3JhcGhpY3NMYXllcio+IGNoaWxkcmVuOwotICAgIGlmIChyb290TGF5ZXIpIHsKLSAgICAg
ICAgY2hpbGRyZW4uYXBwZW5kKHJvb3RMYXllcik7Ci0gICAgICAgIGNoaWxkcmVuLmFwcGVuZCht
X3dlYlBhZ2UucGFnZU92ZXJsYXlDb250cm9sbGVyKCkudmlld092ZXJsYXlSb290TGF5ZXIoKSk7
CisgICAgaWYgKG1fY29udGVudExheWVyKSB7CisgICAgICAgIGNoaWxkcmVuLmFwcGVuZChtX2Nv
bnRlbnRMYXllcik7CisgICAgICAgIGlmIChtX3ZpZXdPdmVybGF5Um9vdExheWVyKQorICAgICAg
ICAgICAgY2hpbGRyZW4uYXBwZW5kKG1fdmlld092ZXJsYXlSb290TGF5ZXIpOwogICAgIH0KKwog
ICAgIG1fcm9vdExheWVyLT5zZXRDaGlsZHJlbihjaGlsZHJlbik7Cit9CisKK3ZvaWQgUmVtb3Rl
TGF5ZXJUcmVlRHJhd2luZ0FyZWE6OmF0dGFjaFZpZXdPdmVybGF5R3JhcGhpY3NMYXllcihGcmFt
ZSogZnJhbWUsIEdyYXBoaWNzTGF5ZXIqIHZpZXdPdmVybGF5Um9vdExheWVyKQoreworICAgIGlm
ICghZnJhbWUtPmlzTWFpbkZyYW1lKCkpCisgICAgICAgIHJldHVybjsKIAorICAgIG1fdmlld092
ZXJsYXlSb290TGF5ZXIgPSB2aWV3T3ZlcmxheVJvb3RMYXllcjsKKyAgICB1cGRhdGVSb290TGF5
ZXJzKCk7Cit9CisKK3ZvaWQgUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWE6OnNldFJvb3RDb21w
b3NpdGluZ0xheWVyKEdyYXBoaWNzTGF5ZXIqIHJvb3RMYXllcikKK3sKKyAgICBtX2NvbnRlbnRM
YXllciA9IHJvb3RMYXllcjsKKyAgICB1cGRhdGVSb290TGF5ZXJzKCk7CiAgICAgc2NoZWR1bGVD
b21wb3NpdGluZ0xheWVyRmx1c2goKTsKIH0KIApAQCAtMjM0LDggKzI1Myw2IEBAIHZvaWQgUmVt
b3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWE6OnVwZGF0ZVNjcm9sbGVkRXhwb3NlZFJlY3QoKQogI2Vu
ZGlmCiAKICAgICBmcmFtZVZpZXctPnNldEV4cG9zZWRSZWN0KG1fc2Nyb2xsZWRFeHBvc2VkUmVj
dCk7Ci0KLSAgICBtX3dlYlBhZ2UucGFnZU92ZXJsYXlDb250cm9sbGVyKCkuZGlkQ2hhbmdlRXhw
b3NlZFJlY3QoKTsKIH0KIAogVGlsZWRCYWNraW5nKiBSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJl
YTo6bWFpbkZyYW1lVGlsZWRCYWNraW5nKCkgY29uc3QKQEAgLTMyMSw3ICszMzgsNyBAQCB2b2lk
IFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhOjpmbHVzaExheWVycygpCiAKICAgICBGbG9hdFJl
Y3QgdmlzaWJsZVJlY3QoRmxvYXRQb2ludCgpLCBtX3ZpZXdTaXplKTsKICAgICB2aXNpYmxlUmVj
dC5pbnRlcnNlY3QobV9zY3JvbGxlZEV4cG9zZWRSZWN0KTsKLSAgICBtX3dlYlBhZ2UucGFnZU92
ZXJsYXlDb250cm9sbGVyKCkuZmx1c2hQYWdlT3ZlcmxheUxheWVycyh2aXNpYmxlUmVjdCk7CisK
ICAgICBtX3dlYlBhZ2UubWFpbkZyYW1lVmlldygpLT5mbHVzaENvbXBvc2l0aW5nU3RhdGVJbmNs
dWRpbmdTdWJmcmFtZXMoKTsKICAgICBtX3Jvb3RMYXllci0+Zmx1c2hDb21wb3NpdGluZ1N0YXRl
Rm9yVGhpc0xheWVyT25seSgpOwogCkBAIC00MTAsNyArNDI3LDYgQEAgdm9pZCBSZW1vdGVMYXll
clRyZWVEcmF3aW5nQXJlYTo6ZGlkVXBkYXRlKCkKIHZvaWQgUmVtb3RlTGF5ZXJUcmVlRHJhd2lu
Z0FyZWE6Om1haW5GcmFtZUNvbnRlbnRTaXplQ2hhbmdlZChjb25zdCBJbnRTaXplJiBjb250ZW50
c1NpemUpCiB7CiAgICAgbV9yb290TGF5ZXItPnNldFNpemUoY29udGVudHNTaXplKTsKLSAgICBt
X3dlYlBhZ2UucGFnZU92ZXJsYXlDb250cm9sbGVyKCkuZGlkQ2hhbmdlRG9jdW1lbnRTaXplKCk7
CiB9CiAKIGJvb2wgUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWE6Om1hcmtMYXllcnNWb2xhdGls
ZUltbWVkaWF0ZWx5SWZQb3NzaWJsZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvbWFjL1NlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIubW0gYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1NlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIu
bW0KaW5kZXggZmI2OGI3YS4uZmE2NjgzMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL21hYy9TZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyLm1tCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvU2VydmljZXNPdmVybGF5Q29udHJv
bGxlci5tbQpAQCAtNDIsNiArNDIsNyBAQAogI2ltcG9ydCA8V2ViQ29yZS9HcmFwaGljc0xheWVy
Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0dyYXBoaWNzTGF5ZXJDQS5oPgogI2ltcG9ydCA8V2ViQ29y
ZS9NYWluRnJhbWUuaD4KKyNpbXBvcnQgPFdlYkNvcmUvUGFnZU92ZXJsYXlDb250cm9sbGVyLmg+
CiAjaW1wb3J0IDxXZWJDb3JlL1BsYXRmb3JtQ0FBbmltYXRpb25NYWMuaD4KICNpbXBvcnQgPFdl
YkNvcmUvU29mdExpbmtpbmcuaD4KIApAQCAtMjI1LDIzICsyMjYsMjMgQEAgU2VydmljZXNPdmVy
bGF5Q29udHJvbGxlcjo6flNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIoKQogICAgICAgICBoaWdo
bGlnaHQtPmludmFsaWRhdGUoKTsKIH0KIAotdm9pZCBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVy
OjpwYWdlT3ZlcmxheURlc3Ryb3llZChQYWdlT3ZlcmxheSopCit2b2lkIFNlcnZpY2VzT3Zlcmxh
eUNvbnRyb2xsZXI6OnBhZ2VPdmVybGF5RGVzdHJveWVkKFBhZ2VPdmVybGF5JikKIHsKICAgICAv
LyBCZWZvcmUgdGhlIG92ZXJsYXkgaXMgZGVzdHJveWVkLCBpdCBzaG91bGQgaGF2ZSBtb3ZlZCBv
dXQgb2YgdGhlIFdlYlBhZ2UsCiAgICAgLy8gYXQgd2hpY2ggcG9pbnQgd2UgYWxyZWFkeSBjbGVh
cmVkIG91ciBiYWNrIHBvaW50ZXIuCiAgICAgQVNTRVJUKCFtX3NlcnZpY2VzT3ZlcmxheSk7CiB9
CiAKLXZvaWQgU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6d2lsbE1vdmVUb1dlYlBhZ2UoUGFn
ZU92ZXJsYXkqLCBXZWJQYWdlKiB3ZWJQYWdlKQordm9pZCBTZXJ2aWNlc092ZXJsYXlDb250cm9s
bGVyOjp3aWxsTW92ZVRvUGFnZShQYWdlT3ZlcmxheSYsIFBhZ2UqIHBhZ2UpCiB7Ci0gICAgaWYg
KHdlYlBhZ2UpCisgICAgaWYgKHBhZ2UpCiAgICAgICAgIHJldHVybjsKIAogICAgIEFTU0VSVCht
X3NlcnZpY2VzT3ZlcmxheSk7CiAgICAgbV9zZXJ2aWNlc092ZXJsYXkgPSBudWxscHRyOwogfQog
Ci12b2lkIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OmRpZE1vdmVUb1dlYlBhZ2UoUGFnZU92
ZXJsYXkqLCBXZWJQYWdlKikKK3ZvaWQgU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6ZGlkTW92
ZVRvUGFnZShQYWdlT3ZlcmxheSYsIFBhZ2UqKQogewogfQogCkBAIC00NDcsNyArNDQ4LDcgQEAg
dm9pZCBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpkZXRlcm1pbmVBY3RpdmVIaWdobGlnaHRU
aW1lckZpcmVkKFRpbWVyPFNlcnZpY2UKICAgICBkZXRlcm1pbmVBY3RpdmVIaWdobGlnaHQobW91
c2VJc092ZXJCdXR0b24pOwogfQogCi12b2lkIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OmRy
YXdSZWN0KFBhZ2VPdmVybGF5KiBvdmVybGF5LCBHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29u
dGV4dCwgY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KQordm9pZCBTZXJ2aWNlc092ZXJsYXlDb250
cm9sbGVyOjpkcmF3UmVjdChQYWdlT3ZlcmxheSYgb3ZlcmxheSwgR3JhcGhpY3NDb250ZXh0JiBn
cmFwaGljc0NvbnRleHQsIGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCkKIHsKIH0KIApAQCAtNTgz
LDcgKzU4NCw3IEBAIHZvaWQgU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6ZGlkUmVidWlsZFBv
dGVudGlhbEhpZ2hsaWdodHMoKQogewogICAgIGlmIChtX3BvdGVudGlhbEhpZ2hsaWdodHMuaXNF
bXB0eSgpKSB7CiAgICAgICAgIGlmIChtX3NlcnZpY2VzT3ZlcmxheSkKLSAgICAgICAgICAgIG1f
d2ViUGFnZS51bmluc3RhbGxQYWdlT3ZlcmxheShtX3NlcnZpY2VzT3ZlcmxheSk7CisgICAgICAg
ICAgICBtX3dlYlBhZ2UuY29yZVBhZ2UoKS0+cGFnZU92ZXJsYXlDb250cm9sbGVyKCkudW5pbnN0
YWxsUGFnZU92ZXJsYXkobV9zZXJ2aWNlc092ZXJsYXksIFBhZ2VPdmVybGF5OjpGYWRlTW9kZTo6
RG9Ob3RGYWRlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtNjAxLDkgKzYwMiw5IEBA
IHZvaWQgU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6Y3JlYXRlT3ZlcmxheUlmTmVlZGVkKCkK
ICAgICBpZiAobV9zZXJ2aWNlc092ZXJsYXkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFJlZlB0
cjxQYWdlT3ZlcmxheT4gb3ZlcmxheSA9IFBhZ2VPdmVybGF5OjpjcmVhdGUodGhpcywgUGFnZU92
ZXJsYXk6Ok92ZXJsYXlUeXBlOjpEb2N1bWVudCk7CisgICAgUmVmUHRyPFBhZ2VPdmVybGF5PiBv
dmVybGF5ID0gUGFnZU92ZXJsYXk6OmNyZWF0ZSgqdGhpcywgUGFnZU92ZXJsYXk6Ok92ZXJsYXlU
eXBlOjpEb2N1bWVudCk7CiAgICAgbV9zZXJ2aWNlc092ZXJsYXkgPSBvdmVybGF5LmdldCgpOwot
ICAgIG1fd2ViUGFnZS5pbnN0YWxsUGFnZU92ZXJsYXkob3ZlcmxheS5yZWxlYXNlKCksIFBhZ2VP
dmVybGF5OjpGYWRlTW9kZTo6RG9Ob3RGYWRlKTsKKyAgICBtX3dlYlBhZ2UuY29yZVBhZ2UoKS0+
cGFnZU92ZXJsYXlDb250cm9sbGVyKCkuaW5zdGFsbFBhZ2VPdmVybGF5KG92ZXJsYXkucmVsZWFz
ZSgpLCBQYWdlT3ZlcmxheTo6RmFkZU1vZGU6OkRvTm90RmFkZSk7CiB9CiAKIFZlY3RvcjxSZWZQ
dHI8UmFuZ2U+PiBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjp0ZWxlcGhvbmVOdW1iZXJSYW5n
ZXNGb3JGb2N1c2VkRnJhbWUoKQpAQCAtNzE3LDEzICs3MTgsMTMgQEAgdm9pZCBTZXJ2aWNlc092
ZXJsYXlDb250cm9sbGVyOjpkZXRlcm1pbmVBY3RpdmVIaWdobGlnaHQoYm9vbCYgbW91c2VJc092
ZXJBY3RpdmUKICAgICAgICAgbV9hY3RpdmVIaWdobGlnaHQgPSBtX25leHRBY3RpdmVIaWdobGln
aHQucmVsZWFzZSgpOwogCiAgICAgICAgIGlmIChtX2FjdGl2ZUhpZ2hsaWdodCkgewotICAgICAg
ICAgICAgbV9zZXJ2aWNlc092ZXJsYXktPmxheWVyKCktPmFkZENoaWxkKG1fYWN0aXZlSGlnaGxp
Z2h0LT5sYXllcigpKTsKKyAgICAgICAgICAgIG1fc2VydmljZXNPdmVybGF5LT5sYXllcigpLmFk
ZENoaWxkKG1fYWN0aXZlSGlnaGxpZ2h0LT5sYXllcigpKTsKICAgICAgICAgICAgIG1fYWN0aXZl
SGlnaGxpZ2h0LT5mYWRlSW4oKTsKICAgICAgICAgfQogICAgIH0KIH0KIAotYm9vbCBTZXJ2aWNl
c092ZXJsYXlDb250cm9sbGVyOjptb3VzZUV2ZW50KFBhZ2VPdmVybGF5KiwgY29uc3QgV2ViTW91
c2VFdmVudCYgZXZlbnQpCitib29sIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6Om1vdXNlRXZl
bnQoUGFnZU92ZXJsYXkmLCBjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIGV2ZW50KQogewogICAg
IG1fbW91c2VQb3NpdGlvbiA9IG1fd2ViUGFnZS5jb3JlUGFnZSgpLT5tYWluRnJhbWUoKS52aWV3
KCktPnJvb3RWaWV3VG9Db250ZW50cyhldmVudC5wb3NpdGlvbigpKTsKIApAQCAtNzMxLDEzICs3
MzIsMTMgQEAgYm9vbCBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjptb3VzZUV2ZW50KFBhZ2VP
dmVybGF5KiwgY29uc3QgV2ViTW91c2VFdmVudCYgZXYKICAgICBkZXRlcm1pbmVBY3RpdmVIaWdo
bGlnaHQobW91c2VJc092ZXJBY3RpdmVIaWdobGlnaHRCdXR0b24pOwogCiAgICAgLy8gQ2FuY2Vs
IHRoZSBwb3RlbnRpYWwgY2xpY2sgaWYgYW55IGJ1dHRvbiBvdGhlciB0aGFuIHRoZSBsZWZ0IGJ1
dHRvbiBjaGFuZ2VzIHN0YXRlLCBhbmQgaWdub3JlIHRoZSBldmVudC4KLSAgICBpZiAoZXZlbnQu
YnV0dG9uKCkgIT0gV2ViTW91c2VFdmVudDo6TGVmdEJ1dHRvbikgeworICAgIGlmIChldmVudC5i
dXR0b24oKSAhPSBNb3VzZUJ1dHRvbjo6TGVmdEJ1dHRvbikgewogICAgICAgICBtX2N1cnJlbnRN
b3VzZURvd25PbkJ1dHRvbkhpZ2hsaWdodCA9IG51bGxwdHI7CiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICB9CiAKICAgICAvLyBJZiB0aGUgbW91c2UgbGlmdGVkIHdoaWxlIHN0aWxsIG92ZXIg
dGhlIGhpZ2hsaWdodCBidXR0b24gdGhhdCBpdCB3ZW50IGRvd24gb24sIHRoZW4gdGhhdCBpcyBh
IGNsaWNrLgotICAgIGlmIChldmVudC50eXBlKCkgPT0gV2ViRXZlbnQ6Ok1vdXNlVXApIHsKKyAg
ICBpZiAoZXZlbnQudHlwZSgpID09IFBsYXRmb3JtRXZlbnQ6Ok1vdXNlUmVsZWFzZWQpIHsKICAg
ICAgICAgUmVmUHRyPEhpZ2hsaWdodD4gbW91c2VEb3duSGlnaGxpZ2h0ID0gbV9jdXJyZW50TW91
c2VEb3duT25CdXR0b25IaWdobGlnaHQ7CiAgICAgICAgIG1fY3VycmVudE1vdXNlRG93bk9uQnV0
dG9uSGlnaGxpZ2h0ID0gbnVsbHB0cjsKIApAQCAtNzUyLDcgKzc1Myw3IEBAIGJvb2wgU2Vydmlj
ZXNPdmVybGF5Q29udHJvbGxlcjo6bW91c2VFdmVudChQYWdlT3ZlcmxheSosIGNvbnN0IFdlYk1v
dXNlRXZlbnQmIGV2CiAgICAgfQogCiAgICAgLy8gSWYgdGhlIG1vdXNlIG1vdmVkIG91dHNpZGUg
b2YgdGhlIGJ1dHRvbiB0cmFja2luZyBhIHBvdGVudGlhbCBjbGljaywgc3RvcCB0cmFja2luZyB0
aGUgY2xpY2suCi0gICAgaWYgKGV2ZW50LnR5cGUoKSA9PSBXZWJFdmVudDo6TW91c2VNb3ZlKSB7
CisgICAgaWYgKGV2ZW50LnR5cGUoKSA9PSBQbGF0Zm9ybUV2ZW50OjpNb3VzZU1vdmVkKSB7CiAg
ICAgICAgIGlmIChtX2N1cnJlbnRNb3VzZURvd25PbkJ1dHRvbkhpZ2hsaWdodCAmJiBtb3VzZUlz
T3ZlckFjdGl2ZUhpZ2hsaWdodEJ1dHRvbikKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogCkBA
IC03NjEsNyArNzYyLDcgQEAgYm9vbCBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjptb3VzZUV2
ZW50KFBhZ2VPdmVybGF5KiwgY29uc3QgV2ViTW91c2VFdmVudCYgZXYKICAgICB9CiAKICAgICAv
LyBJZiB0aGUgbW91c2Ugd2VudCBkb3duIG92ZXIgdGhlIGFjdGl2ZSBoaWdobGlnaHQncyBidXR0
b24sIHRyYWNrIHRoaXMgYXMgYSBwb3RlbnRpYWwgY2xpY2suCi0gICAgaWYgKGV2ZW50LnR5cGUo
KSA9PSBXZWJFdmVudDo6TW91c2VEb3duKSB7CisgICAgaWYgKGV2ZW50LnR5cGUoKSA9PSBQbGF0
Zm9ybUV2ZW50OjpNb3VzZVByZXNzZWQpIHsKICAgICAgICAgaWYgKG1fYWN0aXZlSGlnaGxpZ2h0
ICYmIG1vdXNlSXNPdmVyQWN0aXZlSGlnaGxpZ2h0QnV0dG9uKSB7CiAgICAgICAgICAgICBtX2N1
cnJlbnRNb3VzZURvd25PbkJ1dHRvbkhpZ2hsaWdodCA9IG1fYWN0aXZlSGlnaGxpZ2h0OwogICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC03NzMsOSArNzc0LDkgQEAgYm9vbCBTZXJ2aWNlc092
ZXJsYXlDb250cm9sbGVyOjptb3VzZUV2ZW50KFBhZ2VPdmVybGF5KiwgY29uc3QgV2ViTW91c2VF
dmVudCYgZXYKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgU2VydmljZXNPdmVybGF5Q29u
dHJvbGxlcjo6ZGlkU2Nyb2xsRnJhbWUoUGFnZU92ZXJsYXkqLCBGcmFtZSogZnJhbWUpCit2b2lk
IFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OmRpZFNjcm9sbEZyYW1lKFBhZ2VPdmVybGF5Jiwg
RnJhbWUmIGZyYW1lKQogewotICAgIGlmIChmcmFtZS0+aXNNYWluRnJhbWUoKSkKKyAgICBpZiAo
ZnJhbWUuaXNNYWluRnJhbWUoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgYnVpbGRQaG9uZU51
bWJlckhpZ2hsaWdodHMoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9tYWMvVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWEuaCBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWEu
aAppbmRleCBiODFhNGE0Li45ZTVhYmRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvbWFjL1RpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhLmgKKysrIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9UaWxlZENvcmVBbmltYXRpb25E
cmF3aW5nQXJlYS5oCkBAIC04NCw2ICs4NCw4IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lk
IHZpZXdTdGF0ZURpZENoYW5nZShXZWJDb3JlOjpWaWV3U3RhdGU6OkZsYWdzIGNoYW5nZWQsIGJv
b2wgd2FudHNEaWRVcGRhdGVWaWV3U3RhdGUpIG92ZXJyaWRlOwogICAgIHZvaWQgZGlkVXBkYXRl
Vmlld1N0YXRlVGltZXJGaXJlZCgpOwogCisgICAgdmlydHVhbCB2b2lkIGF0dGFjaFZpZXdPdmVy
bGF5R3JhcGhpY3NMYXllcihXZWJDb3JlOjpGcmFtZSosIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIq
KSBvdmVycmlkZTsKKwogICAgIC8vIFdlYkNvcmU6OkxheWVyRmx1c2hTY2hlZHVsZXJDbGllbnQK
ICAgICB2aXJ0dWFsIGJvb2wgZmx1c2hMYXllcnMoKSBvdmVycmlkZTsKIApAQCAtMTA2LDYgKzEw
OCw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCB1cGRhdGVMYXllckhvc3RpbmdDb250ZXh0KCk7CiAK
ICAgICB2b2lkIHNldFJvb3RDb21wb3NpdGluZ0xheWVyKENBTGF5ZXIgKik7CisgICAgdm9pZCB1
cGRhdGVSb290TGF5ZXJzKCk7CiAKICAgICBXZWJDb3JlOjpUaWxlZEJhY2tpbmcqIG1haW5GcmFt
ZVRpbGVkQmFja2luZygpIGNvbnN0OwogICAgIHZvaWQgdXBkYXRlRGVidWdJbmZvTGF5ZXIoYm9v
bCBzaG93TGF5ZXIpOwpAQCAtMTM4LDYgKzE0MSw4IEBAIHByaXZhdGU6CiAgICAgV2ViQ29yZTo6
VHJhbnNmb3JtYXRpb25NYXRyaXggbV90cmFuc2Zvcm07CiAKICAgICBSdW5Mb29wOjpUaW1lcjxU
aWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYT4gbV9zZW5kRGlkVXBkYXRlVmlld1N0YXRlVGlt
ZXI7CisKKyAgICBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiBtX3ZpZXdPdmVybGF5Um9vdExheWVy
OwogfTsKIAogRFJBV0lOR19BUkVBX1RZUEVfQ0FTVFMoVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2lu
Z0FyZWEsIHR5cGUoKSA9PSBEcmF3aW5nQXJlYVR5cGVUaWxlZENvcmVBbmltYXRpb24pOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9UaWxlZENvcmVB
bmltYXRpb25EcmF3aW5nQXJlYS5tbSBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9tYWMvVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWEubW0KaW5kZXggZTc3NTkxOS4uMjk4
YjAyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9U
aWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvbWFjL1RpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhLm1tCkBAIC01
MSw2ICs1MSw3IEBACiAjaW1wb3J0IDxXZWJDb3JlL1Njcm9sbGJhclRoZW1lLmg+CiAjaW1wb3J0
IDxXZWJDb3JlL1NldHRpbmdzLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1RpbGVkQmFja2luZy5oPgor
I2ltcG9ydCA8V2ViQ29yZS9XZWJBY3Rpb25EaXNhYmxpbmdDQUxheWVyRGVsZWdhdGUuaD4KICNp
bXBvcnQgPHd0Zi9NYWluVGhyZWFkLmg+CiAKICNpZiBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKQpA
QCAtNzYsMTAgKzc3LDEyIEBAIFRpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhOjpUaWxlZENv
cmVBbmltYXRpb25EcmF3aW5nQXJlYShXZWJQYWdlJiB3ZWJQYWdlLCBjCiAgICAgLCBtX3Njcm9s
bGVkRXhwb3NlZFJlY3QoRmxvYXRSZWN0OjppbmZpbml0ZVJlY3QoKSkKICAgICAsIG1fdHJhbnNp
ZW50Wm9vbVNjYWxlKDEpCiAgICAgLCBtX3NlbmREaWRVcGRhdGVWaWV3U3RhdGVUaW1lcihSdW5M
b29wOjptYWluKCksIHRoaXMsICZUaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYTo6ZGlkVXBk
YXRlVmlld1N0YXRlVGltZXJGaXJlZCkKKyAgICAsIG1fdmlld092ZXJsYXlSb290TGF5ZXIobnVs
bHB0cikKIHsKICAgICBtX3dlYlBhZ2UuY29yZVBhZ2UoKS0+c2V0dGluZ3MoKS5zZXRGb3JjZUNv
bXBvc2l0aW5nTW9kZSh0cnVlKTsKIAogICAgIG1faG9zdGluZ0xheWVyID0gW0NBTGF5ZXIgbGF5
ZXJdOworICAgIFttX2hvc3RpbmdMYXllciBzZXREZWxlZ2F0ZTpbV2ViQWN0aW9uRGlzYWJsaW5n
Q0FMYXllckRlbGVnYXRlIHNoYXJlZF1dOwogICAgIFttX2hvc3RpbmdMYXllciBzZXRGcmFtZTpt
X3dlYlBhZ2UuYm91bmRzKCldOwogICAgIFttX2hvc3RpbmdMYXllciBzZXRPcGFxdWU6WUVTXTsK
ICAgICBbbV9ob3N0aW5nTGF5ZXIgc2V0R2VvbWV0cnlGbGlwcGVkOllFU107CkBAIC0yMDQsOSAr
MjA3LDI4IEBAIHZvaWQgVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWE6OnVwZGF0ZVByZWZl
cmVuY2VzKGNvbnN0IFdlYlByZWZlcmVuY2VzU3RvcmUmCiAgICAgdXBkYXRlRGVidWdJbmZvTGF5
ZXIoc2hvd1RpbGVkU2Nyb2xsaW5nSW5kaWNhdG9yKTsKIH0KIAordm9pZCBUaWxlZENvcmVBbmlt
YXRpb25EcmF3aW5nQXJlYTo6dXBkYXRlUm9vdExheWVycygpCit7CisgICAgaWYgKCFtX3Jvb3RM
YXllcikgeworICAgICAgICBbbV9ob3N0aW5nTGF5ZXIgc2V0U3VibGF5ZXJzOkBbIF1dOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgW21faG9zdGluZ0xheWVyIHNldFN1YmxheWVyczpt
X3ZpZXdPdmVybGF5Um9vdExheWVyID8gQFsgbV9yb290TGF5ZXIuZ2V0KCksIG1fdmlld092ZXJs
YXlSb290TGF5ZXItPnBsYXRmb3JtTGF5ZXIoKSBdIDogQFsgbV9yb290TGF5ZXIuZ2V0KCkgXV07
Cit9CisKK3ZvaWQgVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWE6OmF0dGFjaFZpZXdPdmVy
bGF5R3JhcGhpY3NMYXllcihGcmFtZSogZnJhbWUsIEdyYXBoaWNzTGF5ZXIqIHZpZXdPdmVybGF5
Um9vdExheWVyKQoreworICAgIGlmICghZnJhbWUtPmlzTWFpbkZyYW1lKCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIG1fdmlld092ZXJsYXlSb290TGF5ZXIgPSB2aWV3T3ZlcmxheVJvb3RMYXll
cjsKKyAgICB1cGRhdGVSb290TGF5ZXJzKCk7Cit9CisKIHZvaWQgVGlsZWRDb3JlQW5pbWF0aW9u
RHJhd2luZ0FyZWE6Om1haW5GcmFtZUNvbnRlbnRTaXplQ2hhbmdlZChjb25zdCBJbnRTaXplJiBz
aXplKQogewotICAgIG1fd2ViUGFnZS5wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKS5kaWRDaGFuZ2VE
b2N1bWVudFNpemUoKTsKKwogfQogCiB2b2lkIFRpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVh
Ojp1cGRhdGVJbnRyaW5zaWNDb250ZW50U2l6ZUlmTmVlZGVkKCkKQEAgLTI4Myw3ICszMDUsMTAg
QEAgYm9vbCBUaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYTo6Zmx1c2hMYXllcnMoKQogCiAg
ICAgRmxvYXRSZWN0IHZpc2libGVSZWN0ID0gW21faG9zdGluZ0xheWVyIGZyYW1lXTsKICAgICB2
aXNpYmxlUmVjdC5pbnRlcnNlY3QobV9zY3JvbGxlZEV4cG9zZWRSZWN0KTsKLSAgICBtX3dlYlBh
Z2UucGFnZU92ZXJsYXlDb250cm9sbGVyKCkuZmx1c2hQYWdlT3ZlcmxheUxheWVycyh2aXNpYmxl
UmVjdCk7CisKKyAgICAvLyBCZWNhdXNlIG91ciB2aWV3LXJlbGF0aXZlIG92ZXJsYXkgcm9vdCBs
YXllciBpcyBub3QgYXR0YWNoZWQgdG8gdGhlIG1haW4gR3JhcGhpY3NMYXllciB0cmVlLCB3ZSBu
ZWVkIHRvIGZsdXNoIGl0IG1hbnVhbGx5LgorICAgIGlmIChtX3ZpZXdPdmVybGF5Um9vdExheWVy
KQorICAgICAgICBtX3ZpZXdPdmVybGF5Um9vdExheWVyLT5mbHVzaENvbXBvc2l0aW5nU3RhdGUo
dmlzaWJsZVJlY3QpOwogCiAgICAgYm9vbCByZXR1cm5WYWx1ZSA9IG1fd2ViUGFnZS5tYWluRnJh
bWVWaWV3KCktPmZsdXNoQ29tcG9zaXRpbmdTdGF0ZUluY2x1ZGluZ1N1YmZyYW1lcygpOwogI2lm
IEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpCkBAIC0zNjMsOCArMzg4LDYgQEAgdm9pZCBUaWxlZENv
cmVBbmltYXRpb25EcmF3aW5nQXJlYTo6dXBkYXRlU2Nyb2xsZWRFeHBvc2VkUmVjdCgpCiAjZW5k
aWYKIAogICAgIGZyYW1lVmlldy0+c2V0RXhwb3NlZFJlY3QobV9zY3JvbGxlZEV4cG9zZWRSZWN0
KTsKLQotICAgIG1fd2ViUGFnZS5wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKS5kaWRDaGFuZ2VFeHBv
c2VkUmVjdCgpOwogfQogCiB2b2lkIFRpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhOjp1cGRh
dGVHZW9tZXRyeShjb25zdCBJbnRTaXplJiB2aWV3U2l6ZSwgY29uc3QgSW50U2l6ZSYgbGF5ZXJQ
b3NpdGlvbikKQEAgLTQ2NCwxMiArNDg3LDEyIEBAIHZvaWQgVGlsZWRDb3JlQW5pbWF0aW9uRHJh
d2luZ0FyZWE6OnNldFJvb3RDb21wb3NpdGluZ0xheWVyKENBTGF5ZXIgKmxheWVyKQogICAgIFtD
QVRyYW5zYWN0aW9uIGJlZ2luXTsKICAgICBbQ0FUcmFuc2FjdGlvbiBzZXREaXNhYmxlQWN0aW9u
czpZRVNdOwogCi0gICAgW21faG9zdGluZ0xheWVyIHNldFN1YmxheWVyczpsYXllciA/IEBbIGxh
eWVyLCBtX3dlYlBhZ2UucGFnZU92ZXJsYXlDb250cm9sbGVyKCkudmlld092ZXJsYXlSb290TGF5
ZXIoKS0+cGxhdGZvcm1MYXllcigpIF0gOiBAWyBdXTsKLQogICAgIGJvb2wgaGFkUm9vdExheWVy
ID0gISFtX3Jvb3RMYXllcjsKICAgICBtX3Jvb3RMYXllciA9IGxheWVyOwogICAgIFttX3Jvb3RM
YXllciBzZXRTdWJsYXllclRyYW5zZm9ybTptX3RyYW5zZm9ybV07CiAKKyAgICB1cGRhdGVSb290
TGF5ZXJzKCk7CisKICAgICBpZiAoaGFkUm9vdExheWVyICE9ICEhbGF5ZXIpCiAgICAgICAgIG1f
bGF5ZXJIb3N0aW5nQ29udGV4dC0+c2V0Um9vdExheWVyKGxheWVyID8gbV9ob3N0aW5nTGF5ZXIu
Z2V0KCkgOiAwKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL21hYy9XS0FjY2Vzc2liaWxpdHlXZWJQYWdlT2JqZWN0TWFjLm1tIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XS0FjY2Vzc2liaWxpdHlXZWJQYWdlT2JqZWN0TWFj
Lm1tCmluZGV4IDM4MzM5YmEuLjU0ZGQ0NDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9tYWMvV0tBY2Nlc3NpYmlsaXR5V2ViUGFnZU9iamVjdE1hYy5tbQor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dLQWNjZXNzaWJpbGl0
eVdlYlBhZ2VPYmplY3RNYWMubW0KQEAgLTQwLDYgKzQwLDcgQEAKICNpbXBvcnQgPFdlYkNvcmUv
RnJhbWVWaWV3Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL01haW5GcmFtZS5oPgogI2ltcG9ydCA8V2Vi
Q29yZS9QYWdlLmg+CisjaW1wb3J0IDxXZWJDb3JlL1BhZ2VPdmVybGF5Q29udHJvbGxlci5oPgog
I2ltcG9ydCA8V2ViQ29yZS9TY3JvbGxWaWV3Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL1Njcm9sbGJh
ci5oPgogI2ltcG9ydCA8V2ViS2l0U3lzdGVtSW50ZXJmYWNlLmg+CkBAIC03NSwxOSArNzYsMTMg
QEAgdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKIAogLSAoTlNBcnJheSAqKWFjY2Vzc2liaWxpdHlQ
YXJhbWV0ZXJpemVkQXR0cmlidXRlTmFtZXMKIHsKLSAgICBXS1JldGFpblB0cjxXS0FycmF5UmVm
PiByZXN1bHQgPSBhZG9wdFdLKG1fcGFnZS0+cGFnZU92ZXJsYXlDb250cm9sbGVyKCkuY29weUFj
Y2Vzc2liaWxpdHlBdHRyaWJ1dGVzTmFtZXModHJ1ZSkpOwotICAgIGlmICghcmVzdWx0KQorICAg
IFZlY3RvcjxTdHJpbmc+IHJlc3VsdCA9IG1fcGFnZS0+Y29yZVBhZ2UoKS0+cGFnZU92ZXJsYXlD
b250cm9sbGVyKCkuY29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVzTmFtZXModHJ1ZSk7CisgICAg
aWYgKHJlc3VsdC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBuaWw7CiAgICAgCiAgICAgTlNN
dXRhYmxlQXJyYXkgKm5hbWVzID0gW05TTXV0YWJsZUFycmF5IGFycmF5XTsKLSAgICBzaXplX3Qg
Y291bnQgPSBXS0FycmF5R2V0U2l6ZShyZXN1bHQuZ2V0KCkpOwotICAgIGZvciAoc2l6ZV90IGsg
PSAwOyBrIDwgY291bnQ7IGsrKykgewotICAgICAgICBXS1R5cGVSZWYgaXRlbSA9IFdLQXJyYXlH
ZXRJdGVtQXRJbmRleChyZXN1bHQuZ2V0KCksIGspOwotICAgICAgICBpZiAodG9JbXBsKGl0ZW0p
LT50eXBlKCkgPT0gQVBJOjpTdHJpbmc6OkFQSVR5cGUpIHsKLSAgICAgICAgICAgIFJldGFpblB0
cjxDRlN0cmluZ1JlZj4gbmFtZSA9IGFkb3B0Q0YoV0tTdHJpbmdDb3B5Q0ZTdHJpbmcoa0NGQWxs
b2NhdG9yRGVmYXVsdCwgKFdLU3RyaW5nUmVmKWl0ZW0pKTsKLSAgICAgICAgICAgIFtuYW1lcyBh
ZGRPYmplY3Q6KE5TU3RyaW5nICopbmFtZS5nZXQoKV07Ci0gICAgICAgIH0KLSAgICB9CisgICAg
Zm9yIChhdXRvJiBuYW1lIDogcmVzdWx0KQorICAgICAgICBbbmFtZXMgYWRkT2JqZWN0OihOU1N0
cmluZyAqKW5hbWVdOwogICAgIAogICAgIHJldHVybiBuYW1lczsKIH0KQEAgLTE2NCwyMyArMTU5
LDI2IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CiAKIC0gKGlkKWFjY2Vzc2liaWxpdHlBdHRy
aWJ1dGVWYWx1ZTooTlNTdHJpbmcgKilhdHRyaWJ1dGUgZm9yUGFyYW1ldGVyOihpZClwYXJhbWV0
ZXIKIHsKLSAgICBXS1JldGFpblB0cjxXS1R5cGVSZWY+IHBhZ2VPdmVybGF5UGFyYW1ldGVyID0g
MDsKLSAgICAKLSAgICBpZiAoW3BhcmFtZXRlciBpc0tpbmRPZkNsYXNzOltOU1ZhbHVlIGNsYXNz
XV0gJiYgc3RyY21wKFsoTlNWYWx1ZSopcGFyYW1ldGVyIG9iakNUeXBlXSwgQGVuY29kZShOU1Bv
aW50KSkgPT0gMCkgewotICAgICAgICBOU1BvaW50IHBvaW50ID0gW3NlbGYgY29udmVydFNjcmVl
blBvaW50VG9Sb290VmlldzpbKE5TVmFsdWUgKilwYXJhbWV0ZXIgcG9pbnRWYWx1ZV1dOwotICAg
ICAgICBwYWdlT3ZlcmxheVBhcmFtZXRlciA9IFdLUG9pbnRDcmVhdGUoV0tQb2ludE1ha2UocG9p
bnQueCwgcG9pbnQueSkpOwotICAgIH0KLSAgICAKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gYXR0cmlidXRlUmVmID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhDRlN0cmluZygoQ0ZT
dHJpbmdSZWYpYXR0cmlidXRlKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiByZXN1bHQg
PSBhZG9wdFdLKG1fcGFnZS0+cGFnZU92ZXJsYXlDb250cm9sbGVyKCkuY29weUFjY2Vzc2liaWxp
dHlBdHRyaWJ1dGVWYWx1ZShhdHRyaWJ1dGVSZWYuZ2V0KCksIHBhZ2VPdmVybGF5UGFyYW1ldGVy
LmdldCgpKSk7Ci0gICAgaWYgKCFyZXN1bHQpCisgICAgV2ViQ29yZTo6RmxvYXRQb2ludCBwYWdl
T3ZlcmxheVBvaW50OworICAgIGlmIChbcGFyYW1ldGVyIGlzS2luZE9mQ2xhc3M6W05TVmFsdWUg
Y2xhc3NdXSAmJiAhc3RyY21wKFsoTlNWYWx1ZSAqKXBhcmFtZXRlciBvYmpDVHlwZV0sIEBlbmNv
ZGUoTlNQb2ludCkpKQorICAgICAgICBwYWdlT3ZlcmxheVBvaW50ID0gW3NlbGYgY29udmVydFNj
cmVlblBvaW50VG9Sb290VmlldzpbKE5TVmFsdWUgKilwYXJhbWV0ZXIgcG9pbnRWYWx1ZV1dOwor
ICAgIGVsc2UKICAgICAgICAgcmV0dXJuIG5pbDsKLSAgICAKLSAgICBpZiAodG9JbXBsKHJlc3Vs
dC5nZXQoKSktPnR5cGUoKSA9PSBBUEk6OlN0cmluZzo6QVBJVHlwZSkKLSAgICAgICAgcmV0dXJu
IENGQnJpZGdpbmdSZWxlYXNlKFdLU3RyaW5nQ29weUNGU3RyaW5nKGtDRkFsbG9jYXRvckRlZmF1
bHQsIChXS1N0cmluZ1JlZilyZXN1bHQuZ2V0KCkpKTsKLSAgICBpZiAodG9JbXBsKHJlc3VsdC5n
ZXQoKSktPnR5cGUoKSA9PSBBUEk6OkJvb2xlYW46OkFQSVR5cGUpCi0gICAgICAgIHJldHVybiBb
TlNOdW1iZXIgbnVtYmVyV2l0aEJvb2w6V0tCb29sZWFuR2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tC
b29sZWFuUmVmPihyZXN1bHQuZ2V0KCkpKV07Ci0gICAgCisKKyAgICBpZiAoW2F0dHJpYnV0ZSBp
c0VxdWFsVG9TdHJpbmc6QCJBWERhdGFEZXRlY3RvckV4aXN0c0F0UG9pbnQiXSB8fCBbYXR0cmli
dXRlIGlzRXF1YWxUb1N0cmluZzpAIkFYRGlkU2hvd0RhdGFEZXRlY3Rvck1lbnVBdFBvaW50Il0p
IHsKKyAgICAgICAgYm9vbCB2YWx1ZTsKKyAgICAgICAgaWYgKCFtX3BhZ2UtPmNvcmVQYWdlKCkt
PnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLmNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlQm9vbFZh
bHVlRm9yUG9pbnQoYXR0cmlidXRlLCBwYWdlT3ZlcmxheVBvaW50LCB2YWx1ZSkpCisgICAgICAg
ICAgICByZXR1cm4gbmlsOworICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhCb29s
OnZhbHVlXTsKKyAgICB9CisKKyAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6QCJB
WERhdGFEZXRlY3RvclR5cGVBdFBvaW50Il0pIHsKKyAgICAgICAgU3RyaW5nIHZhbHVlOworICAg
ICAgICBpZiAoIW1fcGFnZS0+Y29yZVBhZ2UoKS0+cGFnZU92ZXJsYXlDb250cm9sbGVyKCkuY29w
eUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVTdHJpbmdWYWx1ZUZvclBvaW50KGF0dHJpYnV0ZSwgcGFn
ZU92ZXJsYXlQb2ludCwgdmFsdWUpKQorICAgICAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAgICAg
cmV0dXJuIFtOU1N0cmluZyBzdHJpbmdXaXRoU3RyaW5nOnZhbHVlXTsKKyAgICB9CisKICAgICBy
ZXR1cm4gbmlsOwogfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>238985</attachid>
            <date>2014-09-30 18:19:01 -0700</date>
            <delta_ts>2014-10-01 12:49:48 -0700</delta_ts>
            <desc>patch</desc>
            <filename>pageoverlay.diff</filename>
            <type>text/plain</type>
            <size>188469</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNv
cmUvQ01ha2VMaXN0cy50eHQKaW5kZXggNmRhZGMzMC4uZTFlOGZlNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKQEAgLTE5NDAsNiArMTk0MCw4IEBAIHNldChXZWJDb3JlX1NPVVJDRVMKICAgICBwYWdl
L1BhZ2VDb25zb2xlQ2xpZW50LmNwcAogICAgIHBhZ2UvUGFnZUdyb3VwLmNwcAogICAgIHBhZ2Uv
UGFnZUdyb3VwTG9hZERlZmVycmVyLmNwcAorICAgIHBhZ2UvUGFnZU92ZXJsYXkuY3BwCisgICAg
cGFnZS9QYWdlT3ZlcmxheUNvbnRyb2xsZXIuY3BwCiAgICAgcGFnZS9QYWdlU2VyaWFsaXplci5j
cHAKICAgICBwYWdlL1BhZ2VUaHJvdHRsZXIuY3BwCiAgICAgcGFnZS9QYWdlVmlzaWJpbGl0eVN0
YXRlLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nCmluZGV4IGRkZDk3YTEuLjc5YTA0YjEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNDYgQEAKKzIwMTQtMDktMzAgIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBs
ZS5jb20+CisKKyAgICAgICAgTW92ZSBQYWdlT3ZlcmxheVtDb250cm9sbGVyXSB0byBXZWJDb3Jl
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzcxNjQK
KyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzE4NTA4MjU4PgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICog
V2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnZjeHBy
b2ovV2ViQ29yZS52Y3hwcm9qLmZpbHRlcnM6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qOgorICAgICAgICBNYWtlIHRoZSBhcHByb3ByaWF0ZSBidWlsZCBzeXN0
ZW0gY2hhbmdlcy4KKworICAgICAgICAqIFdlYkNvcmUuZXhwLmluOgorICAgICAgICBFeHBvcnQg
dGhlIG5ldyBQYWdlT3ZlcmxheVtDb250cm9sbGVyXSBzeW1ib2xzIGZyb20gV2ViQ29yZS4KKwor
ICAgICAgICAqIGxvYWRlci9FbXB0eUNsaWVudHMuaDoKKyAgICAgICAgKiBwYWdlL0Nocm9tZUNs
aWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21lQ2xpZW50Ojpkb2N1bWVudE92ZXJsYXlM
YXllckZvckZyYW1lKTogRGVsZXRlZC4KKyAgICAgICAgQWRkIGF0dGFjaFZpZXdPdmVybGF5R3Jh
cGhpY3NMYXllciwgd2hpY2ggYWxsb3dzIFBhZ2VPdmVybGF5Q29udHJvbGxlcgorICAgICAgICB0
byBwdXNoIHZpZXctcmVsYXRpdmUgcGFnZSBvdmVybGF5IHJvb3QgbGF5ZXJzIGRvd24gdG8gV2Vi
S2l0IHRvIGJlCisgICAgICAgIGluc3RhbGxlZCBqdXN0IGluc2lkZSB0aGUgdmlldy4KKworICAg
ICAgICBSZW1vdmUgZG9jdW1lbnRPdmVybGF5TGF5ZXJGb3JGcmFtZSBiZWNhdXNlIFJlbmRlckxh
eWVyQ29tcG9zaXRvciBjYW4gbm93CisgICAgICAgIHRhbGsgZGlyZWN0bHkgdG8gUGFnZU92ZXJs
YXlDb250cm9sbGVyLgorCisgICAgICAgICogcGFnZS9FdmVudEhhbmRsZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpoYW5kbGVNb3VzZVByZXNzRXZlbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjptb3VzZU1vdmVkKToKKyAgICAgICAgKFdlYkNvcmU6
OkV2ZW50SGFuZGxlcjo6aGFuZGxlTW91c2VSZWxlYXNlRXZlbnQpOgorICAgICAgICBXaGVuIHRo
ZSBtb3VzZSBpcyBtb3ZlZCwgcHJlc3NlZCwgb3IgcmVsZWFzZWQsIGdpdmUgUGFnZU92ZXJsYXlD
b250cm9sbGVyCisgICAgICAgIHRoZSBmaXJzdCBzaG90IGF0IGhhbmRsaW5nIHRoZSBldmVudC4K
KworICAgICAgICAqIHBhZ2UvRnJhbWVWaWV3LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1l
Vmlldzo6c2V0RnJhbWVSZWN0KToKKyAgICAgICAgSW5mb3JtIFBhZ2VPdmVybGF5Q29udHJvbGxl
ciB0aGF0IHRoZSBtYWluIEZyYW1lVmlldydzIHNpemUgY2hhbmdlZCwKKyAgICAgICAgc28gaXQg
Y2FuIHVwZGF0ZSB0aGUgc2l6ZSBvZiB2aWV3LXJlbGF0aXZlIG92ZXJsYXlzLgorCisgICAgICAg
IChXZWJDb3JlOjpGcmFtZVZpZXc6OnNldENvbnRlbnRzU2l6ZSk6CisgICAgICAgIEluZm9ybSBQ
YWdlT3ZlcmxheUNvbnRyb2xsZXIgdGhhdCB0aGUgbWFpbiBGcmFtZVZpZXcncyBjb250ZW50cyBz
aXplIGNoYW5nZWQsCisgICAgICAgIHNvIGl0IGNhbiB1cGRhdGUgdGhlIHNpemUgb2YgZG9jdW1l
bnQtcmVsYXRpdmUgb3ZlcmxheXMuCisKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6c2V0
Rml4ZWRWaXNpYmxlQ29udGVudFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3Ojpk
aWRDaGFuZ2VTY3JvbGxPZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjpzY3Jv
bGxUbyk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OndoZWVsRXZlbnQpOgorICAgICAg
ICBJbmZvcm0gUGFnZU92ZXJsYXlDb250cm9sbGVyIHRoYXQgc29tZXRoaW5nIHNjcm9sbGVkLgor
CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OnNldEV4cG9zZWRSZWN0KToKKyAgICAgICAg
SW5mb3JtIFBhZ2VPdmVybGF5Q29udHJvbGxlciB0aGF0IHRoZSBleHBvc2VkIHJlY3QgY2hhbmdl
ZCwgc28gaXQgY2FuIHB1c2gKKyAgICAgICAgdGhlIG5ldyBleHBvc2VkIHJlY3QgZG93biB0byB0
aGUgb3ZlcmxheXMuCisKKyAgICAgICAgKiBwYWdlL0ZyYW1lVmlldy5oOgorICAgICAgICBBZGQg
ZGlkQ2hhbmdlU2Nyb2xsT2Zmc2V0LgorCisgICAgICAgICogcGFnZS9QYWdlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlBhZ2U6OlBhZ2UpOgorICAgICAgICBLZWVwIG9uZSBQYWdlT3ZlcmxheUNv
bnRyb2xsZXIgcGVyIFBhZ2UuCisKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6OnNldERldmljZVNj
YWxlRmFjdG9yKToKKyAgICAgICAgSW5mb3JtIFBhZ2VPdmVybGF5Q29udHJvbGxlciB0aGF0IHRo
ZSBkZXZpY2Ugc2NhbGUgZmFjdG9yIGNoYW5nZWQuCisKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6
OnNldFNlc3Npb25JRCk6CisgICAgICAgIFJlbW92ZSBhIGJsYW5rIGxpbmUuCisKKyAgICAgICAg
KiBwYWdlL1BhZ2UuaDoKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6OnBhZ2VPdmVybGF5Q29udHJv
bGxlcik6CisgICAgICAgIEV4cG9zZSBhbmQgc3RvcmUgUGFnZU92ZXJsYXlDb250cm9sbGVyLgor
CisgICAgICAgICogcGFnZS9QYWdlT3ZlcmxheS5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvUGFnZU92ZXJsYXkuY3BwLgorICAgICAgICBNb3ZlIFBh
Z2VPdmVybGF5IGZyb20gV2ViS2l0MiB0byBXZWJDb3JlLgorICAgICAgICBBIGZldyBvdmVyYXJj
aGluZyBjaGFuZ2VzIHRoYXQgSSB3b24ndCBkZXRhaWwgaW4gZWFjaCBwbGFjZToKKyAgICAgICAg
ICAgIC0gcmVmZXJlbmNlcyBpbnN0ZWFkIG9mIHBvaW50ZXJzIGluIG1hbnkgcGxhY2VzCisgICAg
ICAgICAgICAtIFdlYkNvcmUgdHlwZXMgaW5zdGVhZCBvZiBXZWJLaXQyIHR5cGVzIGV2ZXJ5d2hl
cmUKKworICAgICAgICAoV2ViQ29yZTo6UGFnZU92ZXJsYXk6OmJvdW5kcyk6CisgICAgICAgIEl0
IGlzIHBvc3NpYmxlIHRvIGluc3RhbGwgYW4gb3ZlcmxheSBiZWZvcmUgd2UgaGF2ZSBhIEZyYW1l
Vmlldy4KKyAgICAgICAgV2Ugd2lsbCBldmVudHVhbGx5IGdldCBhIHZpZXcvY29udGVudHMgc2l6
ZSBjaGFuZ2VkIG5vdGlmaWNhdGlvbiBhbmQgdHJ5IGFnYWluLgorCisgICAgICAgIChXZWJDb3Jl
OjpQYWdlT3ZlcmxheTo6Y29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVTdHJpbmdWYWx1ZUZvclBv
aW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VPdmVybGF5Ojpjb3B5QWNjZXNzaWJpbGl0eUF0
dHJpYnV0ZUJvb2xWYWx1ZUZvclBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VPdmVybGF5
Ojpjb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZU5hbWVzKToKKyAgICAgICAgU3BsaXQgY29weUFj
Y2Vzc2liaWxpdHlBdHRyaWJ1dGUgaW50byAiU3RyaW5nVmFsdWVGb3JQb2ludCIgYW5kICJCb29s
VmFsdWVGb3JQb2ludCIKKyAgICAgICAgdmFyaWFudHMsIGJlY2F1c2Ugd2UgZG9uJ3QgaGF2ZSBh
bnl0aGluZyBsaWtlIFdLVHlwZVJlZiBoZXJlLgorCisgICAgICAgICogcGFnZS9QYWdlT3Zlcmxh
eS5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1BhZ2VP
dmVybGF5LmguCisgICAgICAgIE1ha2UgUGFnZU92ZXJsYXkgYSBub3JtYWwgUmVmQ291bnRlZCBv
YmplY3QgaW5zdGVhZCBvZiBhIFdlYktpdDIgQVBJIG9iamVjdC4KKyAgICAgICAgTGVhdmUgYSBj
b21tZW50IG5vdGluZyB0aGF0IHdlIHNob3VsZCBtb3ZlIHRoZSBQYWdlT3ZlcmxheSdzIEdyYXBo
aWNzTGF5ZXIKKyAgICAgICAgdG8gUGFnZU92ZXJsYXkgaW5zdGVhZCBvZiBhIG1hcCBvbiBQYWdl
T3ZlcmxheUNvbnRyb2xsZXIuCisKKyAgICAgICAgKiBwYWdlL1BhZ2VPdmVybGF5Q29udHJvbGxl
ci5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvUGFn
ZU92ZXJsYXlDb250cm9sbGVyLmNwcC4KKyAgICAgICAgTW92ZSBQYWdlT3ZlcmxheUNvbnRyb2xs
ZXIgZnJvbSBXZWJLaXQyIHRvIFdlYkNvcmUuCisgICAgICAgIEEgZmV3IG92ZXJhcmNoaW5nIGNo
YW5nZXMgdGhhdCBJIHdvbid0IGRldGFpbCBpbiBlYWNoIHBsYWNlOgorICAgICAgICAgICAgLSBy
ZWZlcmVuY2VzIGluc3RlYWQgb2YgcG9pbnRlcnMgaW4gbWFueSBwbGFjZXMKKyAgICAgICAgICAg
IC0gV2ViQ29yZSB0eXBlcyBpbnN0ZWFkIG9mIFdlYktpdDIgdHlwZXMgZXZlcnl3aGVyZQorCisg
ICAgICAgIExlYXZlIGEgRklYTUUgdGhhdCBkaWRDaGFuZ2VTZXR0aW5ncyBpcyBub3QgY3VycmVu
dGx5IGNhbGxlZCB3aGVuIHNldHRpbmdzIGNoYW5nZS4KKyAgICAgICAgVGhpcyBpcyBub3QgYSBw
cm9ibGVtIGZvciBub3JtYWwgdXNlIG9mIG92ZXJsYXlzLCBvbmx5IGZvciBkeW5hbWljYWxseSBj
aGFuZ2luZworICAgICAgICBsYXllciBib3JkZXIvcmVwYWludCBjb3VudGVyIHNldHRpbmdzLgor
CisgICAgICAgIChXZWJDb3JlOjpQYWdlT3ZlcmxheUNvbnRyb2xsZXI6OlBhZ2VPdmVybGF5Q29u
dHJvbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpQYWdlT3ZlcmxheUNvbnRyb2xsZXI6OmNyZWF0
ZVJvb3RMYXllcnNJZk5lZWRlZCk6CisgICAgICAgIFdlIHdpbGwgbm93IGxhemlseSBpbml0aWFs
aXplIHRoZSByb290IGxheWVycyB3aGVuIHdlIGZpcnN0IHRyeSB0byB1c2UgdGhlbSwKKyAgICAg
ICAgYmVjYXVzZSBvdGhlcndpc2Ugd2UgdHJ5IHRvIGNyZWF0ZSB0aGVtIGJlZm9yZSB0aGUgQ2hy
b21lQ2xpZW50J3MgR3JhcGhpY3NMYXllckZhY3RvcnkKKyAgICAgICAgaXMgaG9va2VkIHVwLCBp
biBzb21lIGNhc2VzLCBhbmQgdGhhdCBjYW4gY2F1c2UgdXMgdG8gY3JlYXRlIHRoZSB3cm9uZyBr
aW5kIG9mIEdyYXBoaWNzTGF5ZXJzLgorCisgICAgICAgIChXZWJDb3JlOjpQYWdlT3ZlcmxheUNv
bnRyb2xsZXI6Omluc3RhbGxQYWdlT3ZlcmxheSk6CisgICAgICAgIEVudGVyIGNvbXBvc2l0aW5n
IG1vZGUgd2hlbiBpbnN0YWxsaW5nIGEgUGFnZU92ZXJsYXkuCisKKyAgICAgICAgKFdlYkNvcmU6
OlBhZ2VPdmVybGF5Q29udHJvbGxlcjo6ZGlkQ2hhbmdlU2V0dGluZ3MpOgorICAgICAgICBMZWF2
ZSBhIEZJWE1FIGFib3V0IGEgZnV0dXJlIGltcHJvdmVtZW50IHRvIGRpZENoYW5nZVNldHRpbmdz
LgorCisgICAgICAgICogcGFnZS9QYWdlT3ZlcmxheUNvbnRyb2xsZXIuaDogUmVuYW1lZCBmcm9t
IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9QYWdlT3ZlcmxheUNvbnRyb2xsZXIu
aC4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXJDbGllbnQuaDoK
KyAgICAgICAgQWRkIHd0Zi9Gb3J3YXJkLmgsIGJlY2F1c2UgR3JhcGhpY3NMYXllckNsaWVudC5o
IHVzZXMgU3RyaW5nLgorCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpzY3JvbGxUbyk6CisgICAgICAgIEluZm9ybSBQ
YWdlT3ZlcmxheUNvbnRyb2xsZXIgdGhhdCBzb21ldGhpbmcgc2Nyb2xsZWQuCisKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6aGFzQW55QWRkaXRpb25hbENvbXBvc2l0ZWRMYXllcnMp
OgorICAgICAgICBNYWtlIGhhc0FueUFkZGl0aW9uYWxDb21wb3NpdGVkTGF5ZXJzIHJldHVybiB0
cnVlIGlmIHRoZXJlIGFyZSBhbnkgcGFnZSBvdmVybGF5cywKKyAgICAgICAgYmVjYXVzZSB3ZSBu
ZWVkIHRvIGF2b2lkIGZhbGxpbmcgb3V0IG9mIGNvbXBvc2l0aW5nIG1vZGUgaWYgd2Ugc3RpbGwg
aGF2ZQorICAgICAgICBwYWdlIG92ZXJsYXlzLgorCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllckNvbXBvc2l0b3I6OnVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJzKToKKyAgICAgICAgRW50ZXIg
Y29tcG9zaXRpbmcgbW9kZSBpZiB3ZSBoYXZlIHBhZ2Ugb3ZlcmxheXMuCisKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6YXBwZW5kT3ZlcmxheUxheWVycyk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OmFwcGVuZERvY3Vt
ZW50T3ZlcmxheUxheWVycyk6CisgICAgICAgIFJlbmFtZSBhcHBlbmRPdmVybGF5TGF5ZXJzIC0+
IGFwcGVuZERvY3VtZW50T3ZlcmxheUxheWVycy4KKworICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXJDb21wb3NpdG9yOjphdHRhY2hSb290TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXJDb21wb3NpdG9yOjpkZXRhY2hSb290TGF5ZXIpOgorICAgICAgICBBdHRhY2gvZGV0
YWNoIHRoZSB2aWV3IG92ZXJsYXkgcm9vdCBsYXllciB3aGVuIGF0dGFjaGluZy9kZXRhY2hpbmcg
dGhlCisgICAgICAgIG5vcm1hbCBjb21wb3NpdGluZyByb290IGxheWVyLgorCisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJvb3RMYXllckF0dGFjaG1lbnRDaGFuZ2Vk
KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmg6CisKIDIwMTQt
MDktMzAgIEVyaWMgQ2FybHNvbiAgPGVyaWMuY2FybHNvbkBhcHBsZS5jb20+CiAKICAgICAgICAg
W01hY10gTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQgc2hvdWxkIG5vdCB1c2UgRnJhbWVWaWV3CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbiBiL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUuZXhwLmluCmluZGV4IDk0M2MzMTEuLjYxN2E3YmEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhw
LmluCkBAIC0xODcsNiArMTg3LDEzIEBAIF9fWk43V2ViQ29yZTExTWVtb3J5Q2FjaGUxOHJlc291
cmNlRm9yUmVxdWVzdEVSS05TXzE1UmVzb3VyY2VSZXF1ZXN0RU5TXzlTZXNzaW9uCiBfX1pON1dl
YkNvcmUxMU1lbW9yeUNhY2hlMTlnZXRPcmlnaW5zV2l0aENhY2hlRVJOM1dURjdIYXNoU2V0SU5T
MV82UmVmUHRySU5TXzE0U2VjdXJpdHlPcmlnaW5FRUVOU18xOFNlY3VyaXR5T3JpZ2luSGFzaEVO
UzFfMTBIYXNoVHJhaXRzSVM1X0VFRUUKIF9fWk43V2ViQ29yZTExTWVtb3J5Q2FjaGUyMHJlbW92
ZUltYWdlRnJvbUNhY2hlRVJLTlNfM1VSTEVSS04zV1RGNlN0cmluZ0UKIF9fWk43V2ViQ29yZTEx
TWVtb3J5Q2FjaGUyNXJlbW92ZVJlc291cmNlc1dpdGhPcmlnaW5FUE5TXzE0U2VjdXJpdHlPcmln
aW5FCitfX1pON1dlYkNvcmUxMVBhZ2VPdmVybGF5MTVzZXROZWVkc0Rpc3BsYXlFUktOU183SW50
UmVjdEUKK19fWk43V2ViQ29yZTExUGFnZU92ZXJsYXkxNXNldE5lZWRzRGlzcGxheUV2CitfX1pO
N1dlYkNvcmUxMVBhZ2VPdmVybGF5MjBzdG9wRmFkZU91dEFuaW1hdGlvbkV2CitfX1pON1dlYkNv
cmUxMVBhZ2VPdmVybGF5NWNsZWFyRXYKK19fWk43V2ViQ29yZTExUGFnZU92ZXJsYXk1bGF5ZXJF
dgorX19aTjdXZWJDb3JlMTFQYWdlT3ZlcmxheTZjcmVhdGVFUk5TMF82Q2xpZW50RU5TMF8xMU92
ZXJsYXlUeXBlRQorX19aTjdXZWJDb3JlMTFQYWdlT3ZlcmxheThzZXRGcmFtZUVOU183SW50UmVj
dEUKIF9fWk43V2ViQ29yZTExU1FMUmVzdWx0T2tFCiBfX1pON1dlYkNvcmUxMVVSTFdpdGhEYXRh
RVA2TlNEYXRhUDVOU1VSTAogX19aTjdXZWJDb3JlMTFnZXRVUkxCeXRlc0VQSzdfX0NGVVJMUk4z
V1RGNlZlY3RvckljTG01MTJFTlMzXzE1Q3Jhc2hPbk92ZXJmbG93RUVFCkBAIC05MDksNiArOTE2
LDEyIEBAIF9fWk43V2ViQ29yZTIxTWVtb3J5UHJlc3N1cmVIYW5kbGVyN2luc3RhbGxFdgogX19a
TjdXZWJDb3JlMjFOZXR3b3JrU3RvcmFnZVNlc3Npb24yMWRlZmF1bHRTdG9yYWdlU2Vzc2lvbkV2
CiBfX1pON1dlYkNvcmUyMU5ldHdvcmtTdG9yYWdlU2Vzc2lvbjI1c3dpdGNoVG9OZXdUZXN0aW5n
U2Vzc2lvbkV2CiBfX1pON1dlYkNvcmUyMU5ldHdvcmtTdG9yYWdlU2Vzc2lvbjI4Y3JlYXRlUHJp
dmF0ZUJyb3dzaW5nU2Vzc2lvbkVSS04zV1RGNlN0cmluZ0UKK19fWk43V2ViQ29yZTIxUGFnZU92
ZXJsYXlDb250cm9sbGVyMThpbnN0YWxsUGFnZU92ZXJsYXlFTjNXVEYxMFBhc3NSZWZQdHJJTlNf
MTFQYWdlT3ZlcmxheUVFRU5TM184RmFkZU1vZGVFCitfX1pON1dlYkNvcmUyMVBhZ2VPdmVybGF5
Q29udHJvbGxlcjIwdW5pbnN0YWxsUGFnZU92ZXJsYXlFUE5TXzExUGFnZU92ZXJsYXlFTlMxXzhG
YWRlTW9kZUUKK19fWk43V2ViQ29yZTIxUGFnZU92ZXJsYXlDb250cm9sbGVyMjB2aWV3T3Zlcmxh
eVJvb3RMYXllckV2CitfX1pON1dlYkNvcmUyMVBhZ2VPdmVybGF5Q29udHJvbGxlcjMyY29weUFj
Y2Vzc2liaWxpdHlBdHRyaWJ1dGVzTmFtZXNFYgorX19aTjdXZWJDb3JlMjFQYWdlT3ZlcmxheUNv
bnRyb2xsZXI0M2NvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlQm9vbFZhbHVlRm9yUG9pbnRFTjNX
VEY2U3RyaW5nRU5TXzEwRmxvYXRQb2ludEVSYgorX19aTjdXZWJDb3JlMjFQYWdlT3ZlcmxheUNv
bnRyb2xsZXI0NWNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlU3RyaW5nVmFsdWVGb3JQb2ludEVO
M1dURjZTdHJpbmdFTlNfMTBGbG9hdFBvaW50RVJTMl8KIF9fWk43V2ViQ29yZTIxUGxhdGZvcm1L
ZXlib2FyZEV2ZW50MjRkaXNhbWJpZ3VhdGVLZXlEb3duRXZlbnRFTlNfMTNQbGF0Zm9ybUV2ZW50
NFR5cGVFYgogX19aTjdXZWJDb3JlMjFSZW1vdGVDb21tYW5kTGlzdGVuZXI2Y3JlYXRlRVJOU18y
N1JlbW90ZUNvbW1hbmRMaXN0ZW5lckNsaWVudEUKIF9fWk43V2ViQ29yZTIxUmVzb3VyY2VMb2Fk
U2NoZWR1bGVyMjBzZXJ2ZVBlbmRpbmdSZXF1ZXN0c0VOU18yMFJlc291cmNlTG9hZFByaW9yaXR5
RQpAQCAtMTYwMyw2ICsxNjE2LDggQEAgX19aTks3V2ViQ29yZTExSGlzdG9yeUl0ZW04Y2hpbGRy
ZW5FdgogX19aTks3V2ViQ29yZTExSGlzdG9yeUl0ZW04cmVmZXJyZXJFdgogX19aTks3V2ViQ29y
ZTExSGlzdG9yeUl0ZW05dXJsU3RyaW5nRXYKIF9fWk5LN1dlYkNvcmUxMUhpc3RvcnlJdGVtOXZp
ZXdTdGF0ZUV2CitfX1pOSzdXZWJDb3JlMTFQYWdlT3ZlcmxheTVmcmFtZUV2CitfX1pOSzdXZWJD
b3JlMTFQYWdlT3ZlcmxheTZib3VuZHNFdgogX19aTks3V2ViQ29yZTExUmVuZGVyQmxvY2syNWlu
bGluZUVsZW1lbnRDb250aW51YXRpb25FdgogX19aTks3V2ViQ29yZTExUmVuZGVyTGF5ZXIxOWFi
c29sdXRlQm91bmRpbmdCb3hFdgogX19aTks3V2ViQ29yZTExUmVuZGVyTGF5ZXIyNG5lZWRzQ29t
cG9zaXRlZFNjcm9sbGluZ0V2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZj
eHByb2ovV2ViQ29yZS52Y3hwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dl
YkNvcmUudmN4cHJvagppbmRleCA4NjYxYmIxLi40ZGE1YWEzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qCisrKyBiL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2oKQEAgLTcxODAsNiArNzE4MCw4IEBA
CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwYWdlXFBhZ2VDb25zb2xlQ2xpZW50LmNwcCIg
Lz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBhZ2VcUGFnZUdyb3VwLmNwcCIgLz4KICAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBhZ2VcUGFnZUdyb3VwTG9hZERlZmVycmVyLmNwcCIg
Lz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBhZ2VcUGFnZU92ZXJsYXkuY3BwIiAvPgor
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGFnZVxQYWdlT3ZlcmxheUNvbnRyb2xsZXIuY3Bw
IiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGFnZVxQYWdlU2VyaWFsaXplci5jcHAi
IC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwYWdlXFBhZ2VUaHJvdHRsZXIuY3BwIiAv
PgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGFnZVxQYWdlVmlzaWJpbGl0eVN0YXRlLmNw
cCIgLz4KQEAgLTE5MTc1LDYgKzE5MTc3LDggQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XHBhZ2VcUGFnZUNvbnNvbGVDbGllbnQuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XHBhZ2VcUGFnZUdyb3VwLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwYWdlXFBh
Z2VHcm91cExvYWREZWZlcnJlci5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGFn
ZVxQYWdlT3ZlcmxheS5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGFnZVxQYWdl
T3ZlcmxheUNvbnRyb2xsZXIuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBhZ2Vc
UGFnZVNlcmlhbGl6ZXIuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBhZ2VcUGFn
ZVZpc2liaWxpdHlTdGF0ZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGFnZVxQ
ZXJmb3JtYW5jZS5oIiAvPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hw
cm9qL1dlYkNvcmUudmN4cHJvai5maWx0ZXJzIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hw
cm9qL1dlYkNvcmUudmN4cHJvai5maWx0ZXJzCmluZGV4IGQ3MWNjZmQuLjFjNGZlMTIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2ouZmls
dGVycworKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9q
LmZpbHRlcnMKQEAgLTQ5OTgsNiArNDk5OCwxMiBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5ccGFnZVxQYWdlR3JvdXBMb2FkRGVmZXJyZXIuY3BwIj4KICAgICAgIDxGaWx0ZXI+cGFnZTwv
RmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGFn
ZVxQYWdlT3ZlcmxheS5jcHAiPgorICAgICAgPEZpbHRlcj5wYWdlPC9GaWx0ZXI+CisgICAgPC9D
bENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwYWdlXFBhZ2VPdmVybGF5Q29u
dHJvbGxlci5jcHAiPgorICAgICAgPEZpbHRlcj5wYWdlPC9GaWx0ZXI+CisgICAgPC9DbENvbXBp
bGU+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwYWdlXFBhZ2VTZXJpYWxpemVyLmNwcCI+
CiAgICAgICA8RmlsdGVyPnBhZ2U8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KQEAgLTEyOTQz
LDYgKzEyOTQ5LDEyIEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwYWdlXFBhZ2VHcm91
cExvYWREZWZlcnJlci5oIj4KICAgICAgIDxGaWx0ZXI+cGFnZTwvRmlsdGVyPgogICAgIDwvQ2xJ
bmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGFnZVxQYWdlT3ZlcmxheS5oIj4K
KyAgICAgIDxGaWx0ZXI+cGFnZTwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5ccGFnZVxQYWdlT3ZlcmxheUNvbnRyb2xsZXIuaCI+CisgICAgICA8
RmlsdGVyPnBhZ2U8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KICAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXHBhZ2VcUGFnZVNlcmlhbGl6ZXIuaCI+CiAgICAgICA8RmlsdGVyPnBhZ2U8L0Zp
bHRlcj4KICAgICA8L0NsSW5jbHVkZT4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBkY2Y0NmFlLi45YzE4MDU5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xMDkx
LDYgKzEwOTEsMTAgQEAKIAkJMkQ1QTU5MkYxNTI1MjUyMzAwMzZFRTUxIC8qIEltYWdlT3JpZW50
YXRpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QTg3NDhENzQxMkNDM0Y4OTAwMUZCQTQxIC8qIEltYWdlT3JpZW50YXRpb24uY3BwICovOyB9Owog
CQkyRDVBNTkzMTE1MjUyNUQwMDAzNkVFNTEgLyogSW1hZ2VPcmllbnRhdGlvbi5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTg3NDhENjYxMkNDMzc2MzAw
MUZCQTQxIC8qIEltYWdlT3JpZW50YXRpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQkyRDVCQzQyNzE2Rjg4MkVFMDA3MDQ4RDAgLyogU2VjdXJp
dHlQb2xpY3lWaW9sYXRpb25FdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMkQ1QkM0MjUxNkY4ODJCRTAwNzA0OEQwIC8qIFNlY3VyaXR5UG9saWN5
VmlvbGF0aW9uRXZlbnQuaCAqLzsgfTsKKwkJMkQ1QzlDRkYxOUM3QjUyRTAwQjNDNUMxIC8qIFBh
Z2VPdmVybGF5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDJENUM5Q0ZCMTlDN0I1MkUwMEIzQzVDMSAvKiBQYWdlT3ZlcmxheS5jcHAgKi87IH07CisJ
CTJENUM5RDAwMTlDN0I1MkUwMEIzQzVDMSAvKiBQYWdlT3ZlcmxheS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkQ1QzlDRkMxOUM3QjUyRTAwQjNDNUMx
IC8qIFBhZ2VPdmVybGF5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKKwkJMkQ1QzlEMDExOUM3QjUyRTAwQjNDNUMxIC8qIFBhZ2VPdmVybGF5Q29udHJv
bGxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAy
RDVDOUNGRDE5QzdCNTJFMDBCM0M1QzEgLyogUGFnZU92ZXJsYXlDb250cm9sbGVyLmNwcCAqLzsg
fTsKKwkJMkQ1QzlEMDIxOUM3QjUyRTAwQjNDNUMxIC8qIFBhZ2VPdmVybGF5Q29udHJvbGxlci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkQ1QzlDRkUx
OUM3QjUyRTAwQjNDNUMxIC8qIFBhZ2VPdmVybGF5Q29udHJvbGxlci5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTJENkU0Njg0MTdENjYwRjUwMEVD
RjhCQiAvKiBQREZEb2N1bWVudEltYWdlTWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMkQ2RTQ2ODIxN0Q2NjBGNTAwRUNGOEJCIC8qIFBERkRvY3Vt
ZW50SW1hZ2VNYWMubW0gKi87IH07CiAJCTJENzBCQTEzMTgwNzREREYwMDAxOTA4QSAvKiBQbGF0
Zm9ybUNBTGF5ZXJNYWMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDJENzBCQTEyMTgwNzREREYwMDAxOTA4QSAvKiBQbGF0Zm9ybUNBTGF5ZXJNYWMuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkyRDcwQkEx
NTE4MDc0Rjg2MDAwMTkwOEEgLyogUGxhdGZvcm1DQUxheWVyLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJENzBCQTE0MTgwNzRGODUwMDAxOTA4QSAv
KiBQbGF0Zm9ybUNBTGF5ZXIuY3BwICovOyB9OwpAQCAtODA4NSw2ICs4MDg5LDEwIEBACiAJCTJE
NDZGMDRGMTdCOTZGRDIwMDU2NDdGMCAvKiBJbnRTaXplLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEludFNpemUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkyRDVCQzQyNTE2Rjg4MkJFMDA3MDQ4RDAgLyogU2VjdXJpdHlQb2xpY3lWaW9sYXRpb25F
dmVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTZWN1cml0eVBvbGljeVZp
b2xhdGlvbkV2ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJENUJDNDI2MTZG
ODgyQkUwMDcwNDhEMCAvKiBTZWN1cml0eVBvbGljeVZpb2xhdGlvbkV2ZW50LmlkbCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHRleHQ7IHBhdGggPSBTZWN1cml0eVBvbGljeVZpb2xhdGlvbkV2ZW50LmlkbDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMkQ1QzlDRkIxOUM3QjUyRTAwQjNDNUMxIC8qIFBhZ2VP
dmVybGF5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBhZ2VPdmVy
bGF5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMkQ1QzlDRkMxOUM3QjUyRTAw
QjNDNUMxIC8qIFBhZ2VPdmVybGF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFBhZ2VPdmVybGF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTJENUM5Q0ZEMTlD
N0I1MkUwMEIzQzVDMSAvKiBQYWdlT3ZlcmxheUNvbnRyb2xsZXIuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUGFnZU92ZXJsYXlDb250cm9sbGVyLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMkQ1QzlDRkUxOUM3QjUyRTAwQjNDNUMxIC8qIFBhZ2VP
dmVybGF5Q29udHJvbGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQYWdl
T3ZlcmxheUNvbnRyb2xsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkQ2RTQ2
ODIxN0Q2NjBGNTAwRUNGOEJCIC8qIFBERkRvY3VtZW50SW1hZ2VNYWMubW0gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBQREZEb2N1bWVudEltYWdlTWFjLm1tOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyRDcwQkExMjE4MDc0RERGMDAwMTkwOEEgLyogUGxh
dGZvcm1DQUxheWVyTWFjLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFBsYXRm
b3JtQ0FMYXllck1hYy5oOyBwYXRoID0gY2EvbWFjL1BsYXRmb3JtQ0FMYXllck1hYy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyRDcwQkExNDE4MDc0Rjg1MDAwMTkwOEEgLyogUGxh
dGZvcm1DQUxheWVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFBs
YXRmb3JtQ0FMYXllci5jcHA7IHBhdGggPSBjYS9QbGF0Zm9ybUNBTGF5ZXIuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTY1OTcsNiArMTY2MDUsMTAgQEAKIAkJCQk5MzAyQjBC
RTBENzlGODJDMDBDN0VFODMgLyogUGFnZUdyb3VwLmggKi8sCiAJCQkJN0E2NzRCRDkwRjlFQkY0
RTAwNkNGMDk5IC8qIFBhZ2VHcm91cExvYWREZWZlcnJlci5jcHAgKi8sCiAJCQkJN0E2NzRCREEw
RjlFQkY0RTAwNkNGMDk5IC8qIFBhZ2VHcm91cExvYWREZWZlcnJlci5oICovLAorCQkJCTJENUM5
Q0ZCMTlDN0I1MkUwMEIzQzVDMSAvKiBQYWdlT3ZlcmxheS5jcHAgKi8sCisJCQkJMkQ1QzlDRkMx
OUM3QjUyRTAwQjNDNUMxIC8qIFBhZ2VPdmVybGF5LmggKi8sCisJCQkJMkQ1QzlDRkQxOUM3QjUy
RTAwQjNDNUMxIC8qIFBhZ2VPdmVybGF5Q29udHJvbGxlci5jcHAgKi8sCisJCQkJMkQ1QzlDRkUx
OUM3QjUyRTAwQjNDNUMxIC8qIFBhZ2VPdmVybGF5Q29udHJvbGxlci5oICovLAogCQkJCTM3MUU2
NUNEMTM2NjFFRUQwMEJFRURCMCAvKiBQYWdlU2VyaWFsaXplci5jcHAgKi8sCiAJCQkJMzcxRTY1
Q0IxMzY2MUVEQzAwQkVFREIwIC8qIFBhZ2VTZXJpYWxpemVyLmggKi8sCiAJCQkJQTcxOTdGMjUx
NzU2OEFFNTAwN0I5NDQyIC8qIFBhZ2VUaHJvdHRsZXIuY3BwICovLApAQCAtMjM2NjIsNiArMjM2
NzQsNyBAQAogCQkJCTk3QkM2QTIxMTUwNUYwODEwMDFCNzRBQyAvKiBEYXRhYmFzZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJOTdCQzZBMjQxNTA1RjA4MTAwMUI3NEFDIC8qIERhdGFiYXNlQXV0aG9y
aXplci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkUxNkNGRDQxNjlEMURFRDAwRDNBMEM3IC8qIERh
dGFiYXNlQmFja2VuZC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMkQ1QzlEMDIxOUM3QjUyRTAwQjND
NUMxIC8qIFBhZ2VPdmVybGF5Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTdCQzY5
REIxNTA1RjA3NjAwMUI3NEFDIC8qIERhdGFiYXNlQmFja2VuZEJhc2UuaCBpbiBIZWFkZXJzICov
LAogCQkJCUZFNkY2QUIwMTY5RTA1NzUwMEZDMzBBMiAvKiBEYXRhYmFzZUJhY2tlbmRDb250ZXh0
LmggaW4gSGVhZGVycyAqLywKIAkJCQlGRTE2Q0ZENjE2OUQxREVEMDBEM0EwQzcgLyogRGF0YWJh
c2VCYWNrZW5kU3luYy5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNTYyOSw2ICsyNTY0Miw3IEBACiAJ
CQkJNDM5MDQ2RUMxMkRBMjVFODAwQUY4MEE5IC8qIFJlbmRlck1hdGhNTFRva2VuLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk0MzkwNDZFQTEyREEyNUU4MDBBRjgwQTIgLyogUmVuZGVyTWF0aE1MVW5k
ZXJPdmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlFNEMyNzk1OTBDRjk3NDE5MDBFOTdCOTggLyog
UmVuZGVyTWVkaWEuaCBpbiBIZWFkZXJzICovLAorCQkJCTJENUM5RDAwMTlDN0I1MkUwMEIzQzVD
MSAvKiBQYWdlT3ZlcmxheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJREVCQ0NERDIxNjY0NkU4MjAw
QTQ1MkUxIC8qIFJlbmRlck1lZGlhQ29udHJvbEVsZW1lbnRzLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk0MUZBMzAzRjEzMTZDMjlDMDBDMEJGQzUgLyogUmVuZGVyTWVkaWFDb250cm9scy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQUJEREZFN0EwQTVDNkU3MDAwQTNFMTFEIC8qIFJlbmRlck1lbnVMaXN0
LmggaW4gSGVhZGVycyAqLywKQEAgLTI4MDE3LDYgKzI4MDMxLDcgQEAKIAkJCQlBNTg0MEUxQzE4
N0I3NEQ1MDA4NDNCMTAgLyogSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTcxQjFFMTI2MTY0MDQ5MUEwMEIxODgwQSAvKiBJbnNwZWN0b3JMYXll
clRyZWVBZ2VudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MDRBQUNDRDE4MzQ0NTU5MDBFM0Q5
QkMgLyogSW5zcGVjdG9yTm9kZUZpbmRlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkyRDVDOUQw
MTE5QzdCNTJFMDBCM0M1QzEgLyogUGFnZU92ZXJsYXlDb250cm9sbGVyLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTdDNTIyRDRCMTVCNDc3RTgwMDlCN0M5NSAvKiBJbnNwZWN0b3JPdmVybGF5LmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTRGNkZERDY0MTM0MURFREQwMDFGOEVFMyAvKiBJbnNwZWN0
b3JQYWdlQWdlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTlDQzBCNjYxOEJFOUYxNTAwNkNF
QkNDIC8qIEluc3BlY3RvclJlcGxheUFnZW50LmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjgwODUs
NiArMjgxMDAsNyBAQAogCQkJCUJDQzA2NTg3MEYzQ0UyQTcwMENEMkQ4NyAvKiBKU0NsaWVudFJl
Y3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNDMDY1ODkwRjNDRTJBNzAwQ0QyRDg3IC8qIEpT
Q2xpZW50UmVjdExpc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUM0MzA0QjUxOTFBRUY0NjAw
MEUyQkMwIC8qIEpTRVhUU2hhZGVyVGV4dHVyZUxPRC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQky
RDVDOUNGRjE5QzdCNTJFMDBCM0M1QzEgLyogUGFnZU92ZXJsYXkuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJNzZGQjlGRjgxOUE3M0UzQTAwNDIwNTYyIC8qIEpTQXV0b2NvbXBsZXRlRXJyb3JFdmVu
dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQ0E4M0U0RjBEN0NFMUU5MDAzNDIxQTggLyogSlNE
YXRhVHJhbnNmZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNBODNFNTIwRDdDRTIwNTAwMzQy
MUE4IC8qIEpTRGF0YVRyYW5zZmVyQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5oIGIvU291cmNlL1dlYkNvcmUv
bG9hZGVyL0VtcHR5Q2xpZW50cy5oCmluZGV4IDM3YmU0NDguLjljOTBjYjcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2xvYWRlci9FbXB0eUNsaWVudHMuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvRW1wdHlDbGllbnRzLmgKQEAgLTE4Miw2ICsxODIsNyBAQCBwdWJsaWM6CiAgICAg
dmlydHVhbCB2b2lkIHNjcm9sbFJlY3RJbnRvVmlldyhjb25zdCBJbnRSZWN0JikgY29uc3Qgb3Zl
cnJpZGUgeyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoUm9vdEdyYXBoaWNzTGF5ZXIoRnJh
bWUqLCBHcmFwaGljc0xheWVyKikgb3ZlcnJpZGUgeyB9CisgICAgdmlydHVhbCB2b2lkIGF0dGFj
aFZpZXdPdmVybGF5R3JhcGhpY3NMYXllcihGcmFtZSosIEdyYXBoaWNzTGF5ZXIqKSBvdmVycmlk
ZSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNPbmVTaG90RHJhd2luZ1N5bmNocm9uaXph
dGlvbigpIG92ZXJyaWRlIHsgfQogICAgIHZpcnR1YWwgdm9pZCBzY2hlZHVsZUNvbXBvc2l0aW5n
TGF5ZXJGbHVzaCgpIG92ZXJyaWRlIHsgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0Nocm9tZUNsaWVudC5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaApp
bmRleCBlOGRhMGU5Li5iZjU2MzRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0No
cm9tZUNsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmgKQEAg
LTI5OSw2ICsyOTksNyBAQCBwdWJsaWM6CiAKICAgICAvLyBQYXNzIDAgYXMgdGhlIEdyYXBoaWNz
TGF5ZXIgdG8gZGV0YXRjaCB0aGUgcm9vdCBsYXllci4KICAgICB2aXJ0dWFsIHZvaWQgYXR0YWNo
Um9vdEdyYXBoaWNzTGF5ZXIoRnJhbWUqLCBHcmFwaGljc0xheWVyKikgPSAwOworICAgIHZpcnR1
YWwgdm9pZCBhdHRhY2hWaWV3T3ZlcmxheUdyYXBoaWNzTGF5ZXIoRnJhbWUqLCBHcmFwaGljc0xh
eWVyKikgPSAwOwogICAgIC8vIFNldHMgYSBmbGFnIHRvIHNwZWNpZnkgdGhhdCB0aGUgbmV4dCB0
aW1lIGNvbnRlbnQgaXMgZHJhd24gdG8gdGhlIHdpbmRvdywKICAgICAvLyB0aGUgY2hhbmdlcyBh
cHBlYXIgb24gdGhlIHNjcmVlbiBpbiBzeW5jaHJvbnkgd2l0aCB1cGRhdGVzIHRvIEdyYXBoaWNz
TGF5ZXJzLgogICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc09uZVNob3REcmF3aW5nU3luY2hyb25p
emF0aW9uKCkgPSAwOwpAQCAtMzA4LDggKzMwOSw2IEBAIHB1YmxpYzoKICAgICAvLyBSZXR1cm5z
IHdoZXRoZXIgb3Igbm90IHRoZSBjbGllbnQgY2FuIHJlbmRlciB0aGUgY29tcG9zaXRlZCBsYXll
ciwKICAgICAvLyByZWdhcmRsZXNzIG9mIHRoZSBzZXR0aW5ncy4KICAgICB2aXJ0dWFsIGJvb2wg
YWxsb3dzQWNjZWxlcmF0ZWRDb21wb3NpdGluZygpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KLSAg
ICAvLyBTdXBwbHkgYSBsYXllciB0aGF0IHdpbGwgYWRkZWQgYXMgYW4gb3ZlcmxheSBvdmVyIG90
aGVyIGRvY3VtZW50IGxheWVycyAoc2Nyb2xsaW5nIHdpdGggdGhlIGRvY3VtZW50KS4KLSAgICB2
aXJ0dWFsIEdyYXBoaWNzTGF5ZXIqIGRvY3VtZW50T3ZlcmxheUxheWVyRm9yRnJhbWUoRnJhbWUm
KSB7IHJldHVybiBudWxscHRyOyB9CiAKICAgICBlbnVtIENvbXBvc2l0aW5nVHJpZ2dlciB7CiAg
ICAgICAgIFRocmVlRFRyYW5zZm9ybVRyaWdnZXIgPSAxIDw8IDAsCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2
ZW50SGFuZGxlci5jcHAKaW5kZXggNWQ5MTBmMy4uYTNjZmJjOCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
RXZlbnRIYW5kbGVyLmNwcApAQCAtNjYsNiArNjYsNyBAQAogI2luY2x1ZGUgIk1vdXNlRXZlbnQu
aCIKICNpbmNsdWRlICJNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzLmgiCiAjaW5jbHVkZSAi
UGFnZS5oIgorI2luY2x1ZGUgIlBhZ2VPdmVybGF5Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIlBs
YXRmb3JtRXZlbnQuaCIKICNpbmNsdWRlICJQbGF0Zm9ybUtleWJvYXJkRXZlbnQuaCIKICNpbmNs
dWRlICJQbGF0Zm9ybVdoZWVsRXZlbnQuaCIKQEAgLTE2NDMsNiArMTY0NCwxMCBAQCBib29sIEV2
ZW50SGFuZGxlcjo6aGFuZGxlTW91c2VQcmVzc0V2ZW50KGNvbnN0IFBsYXRmb3JtTW91c2VFdmVu
dCYgcGxhdGZvcm1Nb3VzZQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKKyAgICBQYWdl
KiBwYWdlID0gbV9mcmFtZS5wYWdlKCk7CisgICAgaWYgKHBhZ2UgJiYgcGFnZS0+cGFnZU92ZXJs
YXlDb250cm9sbGVyKCkuaGFuZGxlTW91c2VFdmVudChwbGF0Zm9ybU1vdXNlRXZlbnQpKQorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKwogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCiAgICAgYm9vbCBk
ZWZhdWx0UHJldmVudGVkID0gZGlzcGF0Y2hTeW50aGV0aWNUb3VjaEV2ZW50SWZFbmFibGVkKHBs
YXRmb3JtTW91c2VFdmVudCk7CiAgICAgaWYgKGRlZmF1bHRQcmV2ZW50ZWQpCkBAIC0xODM2LDEw
ICsxODQxLDEzIEBAIGJvb2wgRXZlbnRIYW5kbGVyOjptb3VzZU1vdmVkKGNvbnN0IFBsYXRmb3Jt
TW91c2VFdmVudCYgZXZlbnQpCiAgICAgUmVmUHRyPEZyYW1lVmlldz4gcHJvdGVjdG9yKG1fZnJh
bWUudmlldygpKTsKICAgICBNYXhpbXVtRHVyYXRpb25UcmFja2VyIG1heER1cmF0aW9uVHJhY2tl
cigmbV9tYXhNb3VzZU1vdmVkRHVyYXRpb24pOwogCisgICAgUGFnZSogcGFnZSA9IG1fZnJhbWUu
cGFnZSgpOworICAgIGlmIChwYWdlICYmIHBhZ2UtPnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLmhh
bmRsZU1vdXNlRXZlbnQoZXZlbnQpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKwogICAgIEhpdFRl
c3RSZXN1bHQgaG92ZXJlZE5vZGUgPSBIaXRUZXN0UmVzdWx0KExheW91dFBvaW50KCkpOwogICAg
IGJvb2wgcmVzdWx0ID0gaGFuZGxlTW91c2VNb3ZlRXZlbnQoZXZlbnQsICZob3ZlcmVkTm9kZSk7
CiAKLSAgICBQYWdlKiBwYWdlID0gbV9mcmFtZS5wYWdlKCk7CiAgICAgaWYgKCFwYWdlKQogICAg
ICAgICByZXR1cm4gcmVzdWx0OwogCkBAIC0yMDE5LDYgKzIwMjcsMTAgQEAgYm9vbCBFdmVudEhh
bmRsZXI6OmhhbmRsZU1vdXNlUmVsZWFzZUV2ZW50KGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYg
cGxhdGZvcm1Nb3UKIAogICAgIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2V0Q2FyZXRCbGlua2luZ1N1
c3BlbmRlZChmYWxzZSk7CiAKKyAgICBQYWdlKiBwYWdlID0gbV9mcmFtZS5wYWdlKCk7CisgICAg
aWYgKHBhZ2UgJiYgcGFnZS0+cGFnZU92ZXJsYXlDb250cm9sbGVyKCkuaGFuZGxlTW91c2VFdmVu
dChwbGF0Zm9ybU1vdXNlRXZlbnQpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKwogI2lmIEVOQUJM
RShUT1VDSF9FVkVOVFMpCiAgICAgYm9vbCBkZWZhdWx0UHJldmVudGVkID0gZGlzcGF0Y2hTeW50
aGV0aWNUb3VjaEV2ZW50SWZFbmFibGVkKHBsYXRmb3JtTW91c2VFdmVudCk7CiAgICAgaWYgKGRl
ZmF1bHRQcmV2ZW50ZWQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmll
dy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKaW5kZXggYmNiNTA0NC4u
ZDYxNjlmOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcApAQCAtNjAsNiArNjAsNyBAQAog
I2luY2x1ZGUgIk1lbW9yeUNhY2hlLmgiCiAjaW5jbHVkZSAiTWVtb3J5UHJlc3N1cmVIYW5kbGVy
LmgiCiAjaW5jbHVkZSAiT3ZlcmZsb3dFdmVudC5oIgorI2luY2x1ZGUgIlBhZ2VPdmVybGF5Q29u
dHJvbGxlci5oIgogI2luY2x1ZGUgIlByb2dyZXNzVHJhY2tlci5oIgogI2luY2x1ZGUgIlJlbmRl
ckVtYmVkZGVkT2JqZWN0LmgiCiAjaW5jbHVkZSAiUmVuZGVyRnVsbFNjcmVlbi5oIgpAQCAtNDMw
LDEwICs0MzEsMTEgQEAgdm9pZCBGcmFtZVZpZXc6OnNldEZyYW1lUmVjdChjb25zdCBJbnRSZWN0
JiBuZXdSZWN0KQogICAgIGlmIChuZXdSZWN0ID09IG9sZFJlY3QpCiAgICAgICAgIHJldHVybjsK
IAorICAgIFBhZ2UqIHBhZ2UgPSBmcmFtZSgpLnBhZ2UoKTsKKwogI2lmIEVOQUJMRShURVhUX0FV
VE9TSVpJTkcpCiAgICAgLy8gQXV0b3NpemVkIGZvbnQgc2l6ZXMgZGVwZW5kIG9uIHRoZSB3aWR0
aCBvZiB0aGUgdmlld2luZyBhcmVhLgogICAgIGlmIChuZXdSZWN0LndpZHRoKCkgIT0gb2xkUmVj
dC53aWR0aCgpKSB7Ci0gICAgICAgIFBhZ2UqIHBhZ2UgPSBmcmFtZSgpLnBhZ2UoKTsKICAgICAg
ICAgaWYgKGZyYW1lKCkuaXNNYWluRnJhbWUoKSAmJiBwYWdlLT5zZXR0aW5ncygpLnRleHRBdXRv
c2l6aW5nRW5hYmxlZCgpKSB7CiAgICAgICAgICAgICBmb3IgKEZyYW1lKiBmcmFtZSA9ICZwYWdl
LT5tYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQo
KSkKICAgICAgICAgICAgICAgICBmcmFtZSgpLmRvY3VtZW50KCktPnRleHRBdXRvc2l6ZXIoKS0+
cmVjYWxjdWxhdGVNdWx0aXBsaWVycygpOwpAQCAtNDQ5LDYgKzQ1MSw5IEBAIHZvaWQgRnJhbWVW
aWV3OjpzZXRGcmFtZVJlY3QoY29uc3QgSW50UmVjdCYgbmV3UmVjdCkKICAgICAgICAgaWYgKHJl
bmRlclZpZXctPnVzZXNDb21wb3NpdGluZygpKQogICAgICAgICAgICAgcmVuZGVyVmlldy0+Y29t
cG9zaXRvcigpLmZyYW1lVmlld0RpZENoYW5nZVNpemUoKTsKICAgICB9CisKKyAgICBpZiAoZnJh
bWUoKS5pc01haW5GcmFtZSgpKQorICAgICAgICBwYWdlLT5wYWdlT3ZlcmxheUNvbnRyb2xsZXIo
KS5kaWRDaGFuZ2VWaWV3U2l6ZSgpOwogfQogCiAjaWYgRU5BQkxFKFJFUVVFU1RfQU5JTUFUSU9O
X0ZSQU1FKQpAQCAtNTYyLDYgKzU2Nyw5IEBAIHZvaWQgRnJhbWVWaWV3OjpzZXRDb250ZW50c1Np
emUoY29uc3QgSW50U2l6ZSYgc2l6ZSkKIAogICAgIHBhZ2UtPmNocm9tZSgpLmNvbnRlbnRzU2l6
ZUNoYW5nZWQoJmZyYW1lKCksIHNpemUpOyAvLyBOb3RpZnkgb25seS4KIAorICAgIGlmIChmcmFt
ZSgpLmlzTWFpbkZyYW1lKCkpCisgICAgICAgIHBhZ2UtPnBhZ2VPdmVybGF5Q29udHJvbGxlcigp
LmRpZENoYW5nZURvY3VtZW50U2l6ZSgpOworCiAgICAgQVNTRVJUKG1fZGVmZXJTZXROZWVkc0xh
eW91dHMpOwogICAgIG1fZGVmZXJTZXROZWVkc0xheW91dHMtLTsKICAgICAKQEAgLTIwNDgsNyAr
MjA1Niw3IEBAIHZvaWQgRnJhbWVWaWV3OjpzZXRGaXhlZFZpc2libGVDb250ZW50UmVjdChjb25z
dCBJbnRSZWN0JiB2aXNpYmxlQ29udGVudFJlY3QpCiAgICAgICAgIC8vIFVwZGF0ZSB0aGUgc2Ny
b2xsLWJhcnMgdG8gY2FsY3VsYXRlIG5ldyBwYWdlLXN0ZXAgc2l6ZS4KICAgICAgICAgdXBkYXRl
U2Nyb2xsYmFycyhzY3JvbGxPZmZzZXQoKSk7CiAgICAgfQotICAgIGZyYW1lKCkubG9hZGVyKCku
Y2xpZW50KCkuZGlkQ2hhbmdlU2Nyb2xsT2Zmc2V0KCk7CisgICAgZGlkQ2hhbmdlU2Nyb2xsT2Zm
c2V0KCk7CiB9CiAjZW5kaWYKIApAQCAtMjA2MSw2ICsyMDY5LDE0IEBAIHZvaWQgRnJhbWVWaWV3
OjpzZXRWaWV3cG9ydENvbnN0cmFpbmVkT2JqZWN0c05lZWRMYXlvdXQoKQogICAgICAgICByZW5k
ZXJlci0+c2V0TmVlZHNMYXlvdXQoKTsKIH0KIAordm9pZCBGcmFtZVZpZXc6OmRpZENoYW5nZVNj
cm9sbE9mZnNldCgpCit7CisgICAgaWYgKFBhZ2UqIHBhZ2UgPSBmcmFtZSgpLnBhZ2UoKSkKKyAg
ICAgICAgcGFnZS0+cGFnZU92ZXJsYXlDb250cm9sbGVyKCkuZGlkU2Nyb2xsRnJhbWUoZnJhbWUo
KSk7CisKKyAgICBmcmFtZSgpLmxvYWRlcigpLmNsaWVudCgpLmRpZENoYW5nZVNjcm9sbE9mZnNl
dCgpOworfQorCiB2b2lkIEZyYW1lVmlldzo6c2Nyb2xsUG9zaXRpb25DaGFuZ2VkVmlhUGxhdGZv
cm1XaWRnZXQoY29uc3QgSW50UG9pbnQmIG9sZFBvc2l0aW9uLCBjb25zdCBJbnRQb2ludCYgbmV3
UG9zaXRpb24pCiB7CiAgICAgdXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNjcm9sbGluZygpOwpA
QCAtMzIyMyw3ICszMjM5LDcgQEAgdm9pZCBGcmFtZVZpZXc6OnNjcm9sbFRvKGNvbnN0IEludFNp
emUmIG5ld09mZnNldCkKICAgICBTY3JvbGxWaWV3OjpzY3JvbGxUbyhuZXdPZmZzZXQpOwogICAg
IGlmIChvZmZzZXQgIT0gc2Nyb2xsT2Zmc2V0KCkpCiAgICAgICAgIHNjcm9sbFBvc2l0aW9uQ2hh
bmdlZChvbGRQb3NpdGlvbiwgc2Nyb2xsUG9zaXRpb24oKSk7Ci0gICAgZnJhbWUoKS5sb2FkZXIo
KS5jbGllbnQoKS5kaWRDaGFuZ2VTY3JvbGxPZmZzZXQoKTsKKyAgICBkaWRDaGFuZ2VTY3JvbGxP
ZmZzZXQoKTsKIH0KIAogZmxvYXQgRnJhbWVWaWV3OjphZGp1c3RTY3JvbGxTdGVwRm9yRml4ZWRD
b250ZW50KGZsb2F0IHN0ZXAsIFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uLCBTY3Jv
bGxHcmFudWxhcml0eSBncmFudWxhcml0eSkKQEAgLTQyOTIsNyArNDMwOCw3IEBAIGJvb2wgRnJh
bWVWaWV3Ojp3aGVlbEV2ZW50KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYgd2hlZWxFdmVudCkK
ICAgICAgICAgaWYgKG9mZnNldCAhPSBuZXdPZmZzZXQpIHsKICAgICAgICAgICAgIFNjcm9sbFZp
ZXc6OnNjcm9sbFRvKG5ld09mZnNldCk7CiAgICAgICAgICAgICBzY3JvbGxQb3NpdGlvbkNoYW5n
ZWQob2xkUG9zaXRpb24sIHNjcm9sbFBvc2l0aW9uKCkpOwotICAgICAgICAgICAgZnJhbWUoKS5s
b2FkZXIoKS5jbGllbnQoKS5kaWRDaGFuZ2VTY3JvbGxPZmZzZXQoKTsKKyAgICAgICAgICAgIGRp
ZENoYW5nZVNjcm9sbE9mZnNldCgpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIH0KQEAgLTQ2MTUsNiArNDYzMSw5IEBAIHZvaWQgRnJhbWVWaWV3OjpzZXRFeHBvc2VkUmVj
dChGbG9hdFJlY3QgZXhwb3NlZFJlY3QpCiAKICAgICBpZiAoYXV0byogdmlldyA9IHJlbmRlclZp
ZXcoKSkKICAgICAgICAgdmlldy0+Y29tcG9zaXRvcigpLnNjaGVkdWxlTGF5ZXJGbHVzaChmYWxz
ZSAvKiBjYW5UaHJvdHRsZSAqLyk7CisKKyAgICBpZiAoYXV0byogcGFnZSA9IGZyYW1lKCkucGFn
ZSgpKQorICAgICAgICBwYWdlLT5wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKS5kaWRDaGFuZ2VFeHBv
c2VkUmVjdCgpOwogfQogICAgIAogdm9pZCBGcmFtZVZpZXc6OnNldFZpZXdwb3J0U2l6ZUZvckNT
U1ZpZXdwb3J0VW5pdHMoSW50U2l6ZSBzaXplKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGFnZS9GcmFtZVZpZXcuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmgKaW5kZXgg
Mzc1Njk2YS4uOTJhYTliOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZp
ZXcuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5oCkBAIC01MTEsNiArNTEx
LDggQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBmbG9hdCBhZGp1c3RTY3JvbGxTdGVwRm9yRml4
ZWRDb250ZW50KGZsb2F0IHN0ZXAsIFNjcm9sbGJhck9yaWVudGF0aW9uLCBTY3JvbGxHcmFudWxh
cml0eSkgb3ZlcnJpZGU7CiAKKyAgICB2b2lkIGRpZENoYW5nZVNjcm9sbE9mZnNldCgpOworCiBw
cm90ZWN0ZWQ6CiAgICAgdmlydHVhbCBib29sIHNjcm9sbENvbnRlbnRzRmFzdFBhdGgoY29uc3Qg
SW50U2l6ZSYgc2Nyb2xsRGVsdGEsIGNvbnN0IEludFJlY3QmIHJlY3RUb1Njcm9sbCwgY29uc3Qg
SW50UmVjdCYgY2xpcFJlY3QpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxDb250
ZW50c1Nsb3dQYXRoKGNvbnN0IEludFJlY3QmIHVwZGF0ZVJlY3QpIG92ZXJyaWRlOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
UGFnZS5jcHAKaW5kZXggMjZiOGQxNy4uNTM4ZGZkNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGFnZS9QYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCkBAIC02
MCw2ICs2MCw3IEBACiAjaW5jbHVkZSAiUGFnZUNvbnNvbGVDbGllbnQuaCIKICNpbmNsdWRlICJQ
YWdlRGVidWdnYWJsZS5oIgogI2luY2x1ZGUgIlBhZ2VHcm91cC5oIgorI2luY2x1ZGUgIlBhZ2VP
dmVybGF5Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIlBhZ2VUaHJvdHRsZXIuaCIKICNpbmNsdWRl
ICJQbHVnSW5DbGllbnQuaCIKICNpbmNsdWRlICJQbHVnaW5EYXRhLmgiCkBAIC0yMDMsNiArMjA0
LDcgQEAgUGFnZTo6UGFnZShQYWdlQ2xpZW50cyYgcGFnZUNsaWVudHMpCiAgICAgLCBtX3Zpc2l0
ZWRMaW5rU3RvcmUoV1RGOjptb3ZlKHBhZ2VDbGllbnRzLnZpc2l0ZWRMaW5rU3RvcmUpKQogICAg
ICwgbV9zZXNzaW9uSUQoU2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpCiAgICAgLCBtX2lz
Q2xvc2luZyhmYWxzZSkKKyAgICAsIG1fcGFnZU92ZXJsYXlDb250cm9sbGVyKHN0ZDo6bWFrZV91
bmlxdWU8UGFnZU92ZXJsYXlDb250cm9sbGVyPigqdGhpcykpCiB7CiAgICAgQVNTRVJUKG1fZWRp
dG9yQ2xpZW50KTsKICAgICAKQEAgLTgxMSw2ICs4MTMsOCBAQCB2b2lkIFBhZ2U6OnNldERldmlj
ZVNjYWxlRmFjdG9yKGZsb2F0IHNjYWxlRmFjdG9yKQogCiAgICAgcGFnZUNhY2hlKCktPm1hcmtQ
YWdlc0ZvckZ1bGxTdHlsZVJlY2FsYyh0aGlzKTsKICAgICBHcmFwaGljc0NvbnRleHQ6OnVwZGF0
ZURvY3VtZW50TWFya2VyUmVzb3VyY2VzKCk7CisKKyAgICBtX3BhZ2VPdmVybGF5Q29udHJvbGxl
ci0+ZGlkQ2hhbmdlRGV2aWNlU2NhbGVGYWN0b3IoKTsKIH0KIAogdm9pZCBQYWdlOjpzZXRUb3BD
b250ZW50SW5zZXQoZmxvYXQgY29udGVudEluc2V0KQpAQCAtMTYxOCw3ICsxNjIyLDYgQEAgdm9p
ZCBQYWdlOjpzZXRTZXNzaW9uSUQoU2Vzc2lvbklEIHNlc3Npb25JRCkKIAogICAgIGZvciAoYXV0
byYgdmlldyA6IHBsdWdpblZpZXdzKCkpCiAgICAgICAgIHZpZXctPnByaXZhdGVCcm93c2luZ1N0
YXRlQ2hhbmdlZChzZXNzaW9uSUQuaXNFcGhlbWVyYWwoKSk7Ci0KIH0KIAogUGFnZTo6UGFnZUNs
aWVudHM6OlBhZ2VDbGllbnRzKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFn
ZS5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmgKaW5kZXggMmNlNTJiOS4uYTNiYTg0ZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9QYWdlLmgKQEAgLTg0LDYgKzg0LDcgQEAgY2xhc3MgUGFnZUFjdGl2aXR5QXNzZXJ0
aW9uVG9rZW47CiBjbGFzcyBQYWdlQ29uc29sZUNsaWVudDsKIGNsYXNzIFBhZ2VEZWJ1Z2dhYmxl
OwogY2xhc3MgUGFnZUdyb3VwOworY2xhc3MgUGFnZU92ZXJsYXlDb250cm9sbGVyOwogY2xhc3Mg
UGFnZVRocm90dGxlcjsKIGNsYXNzIFBsdWdJbkNsaWVudDsKIGNsYXNzIFBsdWdpbkRhdGE7CkBA
IC0xNjgsNiArMTY5LDggQEAgcHVibGljOgogICAgIE1haW5GcmFtZSYgbWFpbkZyYW1lKCkgeyBB
U1NFUlQobV9tYWluRnJhbWUpOyByZXR1cm4gKm1fbWFpbkZyYW1lOyB9CiAgICAgY29uc3QgTWFp
bkZyYW1lJiBtYWluRnJhbWUoKSBjb25zdCB7IEFTU0VSVChtX21haW5GcmFtZSk7IHJldHVybiAq
bV9tYWluRnJhbWU7IH0KIAorICAgIFBhZ2VPdmVybGF5Q29udHJvbGxlciYgcGFnZU92ZXJsYXlD
b250cm9sbGVyKCkgeyByZXR1cm4gKm1fcGFnZU92ZXJsYXlDb250cm9sbGVyOyB9CisKICAgICBi
b29sIG9wZW5lZEJ5RE9NKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRPcGVuZWRCeURPTSgpOwogCkBA
IC01OTUsNiArNTk4LDggQEAgcHJpdmF0ZToKICAgICBTZXNzaW9uSUQgbV9zZXNzaW9uSUQ7CiAK
ICAgICBib29sIG1faXNDbG9zaW5nOworCisgICAgc3RkOjp1bmlxdWVfcHRyPFBhZ2VPdmVybGF5
Q29udHJvbGxlcj4gbV9wYWdlT3ZlcmxheUNvbnRyb2xsZXI7CiB9OwogCiBpbmxpbmUgUGFnZUdy
b3VwJiBQYWdlOjpncm91cCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VP
dmVybGF5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZU92ZXJsYXkuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhOWQ5N2MKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VPdmVybGF5LmNwcApAQCAtMCwwICsxLDI1NyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQYWdlT3ZlcmxheS5oIgor
CisjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisj
aW5jbHVkZSAiTWFpbkZyYW1lLmgiCisjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlBhZ2VP
dmVybGF5Q29udHJvbGxlci5oIgorI2luY2x1ZGUgIlBsYXRmb3JtTW91c2VFdmVudC5oIgorI2lu
Y2x1ZGUgIlNjcm9sbGJhclRoZW1lLmgiCisjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGNvbnN0IGRvdWJsZSBmYWRlQW5pbWF0aW9u
RHVyYXRpb24gPSAwLjI7CitzdGF0aWMgY29uc3QgZG91YmxlIGZhZGVBbmltYXRpb25GcmFtZVJh
dGUgPSAzMDsKKworUGFzc1JlZlB0cjxQYWdlT3ZlcmxheT4gUGFnZU92ZXJsYXk6OmNyZWF0ZShD
bGllbnQmIGNsaWVudCwgT3ZlcmxheVR5cGUgb3ZlcmxheVR5cGUpCit7CisgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBQYWdlT3ZlcmxheShjbGllbnQsIG92ZXJsYXlUeXBlKSk7Cit9CisKK1BhZ2VP
dmVybGF5OjpQYWdlT3ZlcmxheShDbGllbnQmIGNsaWVudCwgT3ZlcmxheVR5cGUgb3ZlcmxheVR5
cGUpCisgICAgOiBtX2NsaWVudChjbGllbnQpCisgICAgLCBtX3BhZ2UobnVsbHB0cikKKyAgICAs
IG1fZmFkZUFuaW1hdGlvblRpbWVyKFJ1bkxvb3A6Om1haW4oKSwgdGhpcywgJlBhZ2VPdmVybGF5
OjpmYWRlQW5pbWF0aW9uVGltZXJGaXJlZCkKKyAgICAsIG1fZmFkZUFuaW1hdGlvblN0YXJ0VGlt
ZSgwKQorICAgICwgbV9mYWRlQW5pbWF0aW9uRHVyYXRpb24oZmFkZUFuaW1hdGlvbkR1cmF0aW9u
KQorICAgICwgbV9mYWRlQW5pbWF0aW9uVHlwZShOb0FuaW1hdGlvbikKKyAgICAsIG1fZnJhY3Rp
b25GYWRlZEluKDEpCisgICAgLCBtX292ZXJsYXlUeXBlKG92ZXJsYXlUeXBlKQorICAgICwgbV9i
YWNrZ3JvdW5kQ29sb3IoQ29sb3I6OnRyYW5zcGFyZW50KQoreworfQorCitQYWdlT3ZlcmxheTo6
flBhZ2VPdmVybGF5KCkKK3sKK30KKworSW50UmVjdCBQYWdlT3ZlcmxheTo6Ym91bmRzKCkgY29u
c3QKK3sKKyAgICBpZiAoIW1fb3ZlcnJpZGVGcmFtZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVy
biBJbnRSZWN0KEludFBvaW50KCksIG1fb3ZlcnJpZGVGcmFtZS5zaXplKCkpOworCisgICAgRnJh
bWVWaWV3KiBmcmFtZVZpZXcgPSBtX3BhZ2UtPm1haW5GcmFtZSgpLnZpZXcoKTsKKworICAgIGlm
ICghZnJhbWVWaWV3KQorICAgICAgICByZXR1cm4gSW50UmVjdCgpOworCisgICAgc3dpdGNoICht
X292ZXJsYXlUeXBlKSB7CisgICAgY2FzZSBPdmVybGF5VHlwZTo6VmlldzogeworICAgICAgICBp
bnQgd2lkdGggPSBmcmFtZVZpZXctPndpZHRoKCk7CisgICAgICAgIGludCBoZWlnaHQgPSBmcmFt
ZVZpZXctPmhlaWdodCgpOworCisgICAgICAgIGlmICghU2Nyb2xsYmFyVGhlbWU6OnRoZW1lKCkt
PnVzZXNPdmVybGF5U2Nyb2xsYmFycygpKSB7CisgICAgICAgICAgICBpZiAoZnJhbWVWaWV3LT52
ZXJ0aWNhbFNjcm9sbGJhcigpKQorICAgICAgICAgICAgICAgIHdpZHRoIC09IGZyYW1lVmlldy0+
dmVydGljYWxTY3JvbGxiYXIoKS0+d2lkdGgoKTsKKyAgICAgICAgICAgIGlmIChmcmFtZVZpZXct
Pmhvcml6b250YWxTY3JvbGxiYXIoKSkKKyAgICAgICAgICAgICAgICBoZWlnaHQgLT0gZnJhbWVW
aWV3LT5ob3Jpem9udGFsU2Nyb2xsYmFyKCktPmhlaWdodCgpOworICAgICAgICB9CisgICAgICAg
IHJldHVybiBJbnRSZWN0KDAsIDAsIHdpZHRoLCBoZWlnaHQpOworICAgIH0KKyAgICBjYXNlIE92
ZXJsYXlUeXBlOjpEb2N1bWVudDoKKyAgICAgICAgcmV0dXJuIEludFJlY3QoSW50UG9pbnQoKSwg
ZnJhbWVWaWV3LT5jb250ZW50c1NpemUoKSk7CisgICAgfTsKKworICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgIHJldHVybiBJbnRSZWN0KEludFBvaW50KCksIGZyYW1lVmlldy0+Y29udGVu
dHNTaXplKCkpOworfQorCitJbnRSZWN0IFBhZ2VPdmVybGF5OjpmcmFtZSgpIGNvbnN0Cit7Cisg
ICAgaWYgKCFtX292ZXJyaWRlRnJhbWUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gbV9vdmVy
cmlkZUZyYW1lOworCisgICAgcmV0dXJuIGJvdW5kcygpOworfQorCit2b2lkIFBhZ2VPdmVybGF5
OjpzZXRGcmFtZShJbnRSZWN0IGZyYW1lKQoreworICAgIGlmIChtX292ZXJyaWRlRnJhbWUgPT0g
ZnJhbWUpCisgICAgICAgIHJldHVybjsKKworICAgIG1fb3ZlcnJpZGVGcmFtZSA9IGZyYW1lOwor
CisgICAgaWYgKG1fcGFnZSkKKyAgICAgICAgbV9wYWdlLT5wYWdlT3ZlcmxheUNvbnRyb2xsZXIo
KS5kaWRDaGFuZ2VPdmVybGF5RnJhbWUoKnRoaXMpOworfQorCit2b2lkIFBhZ2VPdmVybGF5Ojpz
ZXRCYWNrZ3JvdW5kQ29sb3IoUkdCQTMyIGJhY2tncm91bmRDb2xvcikKK3sKKyAgICBpZiAobV9i
YWNrZ3JvdW5kQ29sb3IgPT0gYmFja2dyb3VuZENvbG9yKQorICAgICAgICByZXR1cm47CisKKyAg
ICBtX2JhY2tncm91bmRDb2xvciA9IGJhY2tncm91bmRDb2xvcjsKKworICAgIGlmIChtX3BhZ2Up
CisgICAgICAgIG1fcGFnZS0+cGFnZU92ZXJsYXlDb250cm9sbGVyKCkuZGlkQ2hhbmdlT3Zlcmxh
eUJhY2tncm91bmRDb2xvcigqdGhpcyk7Cit9CisKK3ZvaWQgUGFnZU92ZXJsYXk6OnNldFBhZ2Uo
UGFnZSogcGFnZSkKK3sKKyAgICBtX2NsaWVudC53aWxsTW92ZVRvUGFnZSgqdGhpcywgcGFnZSk7
CisgICAgbV9wYWdlID0gcGFnZTsKKyAgICBtX2NsaWVudC5kaWRNb3ZlVG9QYWdlKCp0aGlzLCBw
YWdlKTsKKworICAgIG1fZmFkZUFuaW1hdGlvblRpbWVyLnN0b3AoKTsKK30KKwordm9pZCBQYWdl
T3ZlcmxheTo6c2V0TmVlZHNEaXNwbGF5KGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCkKK3sKKyAg
ICBpZiAoIW1fcGFnZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9wYWdlLT5wYWdlT3Zlcmxh
eUNvbnRyb2xsZXIoKS5zZXRQYWdlT3ZlcmxheU9wYWNpdHkoKnRoaXMsIG1fZnJhY3Rpb25GYWRl
ZEluKTsKKyAgICBtX3BhZ2UtPnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLnNldFBhZ2VPdmVybGF5
TmVlZHNEaXNwbGF5KCp0aGlzLCBkaXJ0eVJlY3QpOworfQorCit2b2lkIFBhZ2VPdmVybGF5Ojpz
ZXROZWVkc0Rpc3BsYXkoKQoreworICAgIHNldE5lZWRzRGlzcGxheShib3VuZHMoKSk7Cit9CisK
K3ZvaWQgUGFnZU92ZXJsYXk6OmRyYXdSZWN0KEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250
ZXh0LCBjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpCit7CisgICAgLy8gSWYgdGhlIGRpcnR5IHJl
Y3QgaXMgb3V0c2lkZSB0aGUgYm91bmRzLCBpZ25vcmUgaXQuCisgICAgSW50UmVjdCBwYWludFJl
Y3QgPSBpbnRlcnNlY3Rpb24oZGlydHlSZWN0LCBib3VuZHMoKSk7CisgICAgaWYgKHBhaW50UmVj
dC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIEdyYXBoaWNzQ29udGV4dFN0YXRl
U2F2ZXIgc3RhdGVTYXZlcihncmFwaGljc0NvbnRleHQpOworICAgIG1fY2xpZW50LmRyYXdSZWN0
KCp0aGlzLCBncmFwaGljc0NvbnRleHQsIHBhaW50UmVjdCk7Cit9CisgICAgCitib29sIFBhZ2VP
dmVybGF5Ojptb3VzZUV2ZW50KGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgbW91c2VFdmVudCkK
K3sKKyAgICBJbnRQb2ludCBtb3VzZVBvc2l0aW9uSW5PdmVybGF5Q29vcmRpbmF0ZXMobW91c2VF
dmVudC5wb3NpdGlvbigpKTsKKworICAgIGlmIChtX292ZXJsYXlUeXBlID09IFBhZ2VPdmVybGF5
OjpPdmVybGF5VHlwZTo6RG9jdW1lbnQpCisgICAgICAgIG1vdXNlUG9zaXRpb25Jbk92ZXJsYXlD
b29yZGluYXRlcyA9IG1fcGFnZS0+bWFpbkZyYW1lKCkudmlldygpLT5yb290Vmlld1RvQ29udGVu
dHMobW91c2VQb3NpdGlvbkluT3ZlcmxheUNvb3JkaW5hdGVzKTsKKworICAgIC8vIElnbm9yZSBl
dmVudHMgb3V0c2lkZSB0aGUgYm91bmRzLgorICAgIGlmICghYm91bmRzKCkuY29udGFpbnMobW91
c2VQb3NpdGlvbkluT3ZlcmxheUNvb3JkaW5hdGVzKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgcmV0dXJuIG1fY2xpZW50Lm1vdXNlRXZlbnQoKnRoaXMsIG1vdXNlRXZlbnQpOworfQor
Cit2b2lkIFBhZ2VPdmVybGF5OjpkaWRTY3JvbGxGcmFtZShGcmFtZSYgZnJhbWUpCit7CisgICAg
bV9jbGllbnQuZGlkU2Nyb2xsRnJhbWUoKnRoaXMsIGZyYW1lKTsKK30KKworYm9vbCBQYWdlT3Zl
cmxheTo6Y29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVTdHJpbmdWYWx1ZUZvclBvaW50KFN0cmlu
ZyBhdHRyaWJ1dGUsIEZsb2F0UG9pbnQgcGFyYW1ldGVyLCBTdHJpbmcmIHZhbHVlKQoreworICAg
IHJldHVybiBtX2NsaWVudC5jb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVN0cmluZ1ZhbHVlRm9y
UG9pbnQoKnRoaXMsIGF0dHJpYnV0ZSwgcGFyYW1ldGVyLCB2YWx1ZSk7Cit9CisKK2Jvb2wgUGFn
ZU92ZXJsYXk6OmNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlQm9vbFZhbHVlRm9yUG9pbnQoU3Ry
aW5nIGF0dHJpYnV0ZSwgRmxvYXRQb2ludCBwYXJhbWV0ZXIsIGJvb2wmIHZhbHVlKQoreworICAg
IHJldHVybiBtX2NsaWVudC5jb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZUJvb2xWYWx1ZUZvclBv
aW50KCp0aGlzLCBhdHRyaWJ1dGUsIHBhcmFtZXRlciwgdmFsdWUpOworfQorCitWZWN0b3I8U3Ry
aW5nPiBQYWdlT3ZlcmxheTo6Y29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVOYW1lcyhib29sIHBh
cmFtZXRlcml6ZWROYW1lcykKK3sKKyAgICByZXR1cm4gbV9jbGllbnQuY29weUFjY2Vzc2liaWxp
dHlBdHRyaWJ1dGVOYW1lcygqdGhpcywgcGFyYW1ldGVyaXplZE5hbWVzKTsKK30KKwordm9pZCBQ
YWdlT3ZlcmxheTo6c3RhcnRGYWRlSW5BbmltYXRpb24oKQoreworICAgIG1fZnJhY3Rpb25GYWRl
ZEluID0gMDsKKyAgICBtX2ZhZGVBbmltYXRpb25UeXBlID0gRmFkZUluQW5pbWF0aW9uOworCisg
ICAgc3RhcnRGYWRlQW5pbWF0aW9uKCk7Cit9CisKK3ZvaWQgUGFnZU92ZXJsYXk6OnN0YXJ0RmFk
ZU91dEFuaW1hdGlvbigpCit7CisgICAgbV9mcmFjdGlvbkZhZGVkSW4gPSAxOworICAgIG1fZmFk
ZUFuaW1hdGlvblR5cGUgPSBGYWRlT3V0QW5pbWF0aW9uOworCisgICAgc3RhcnRGYWRlQW5pbWF0
aW9uKCk7Cit9CisKK3ZvaWQgUGFnZU92ZXJsYXk6OnN0b3BGYWRlT3V0QW5pbWF0aW9uKCkKK3sK
KyAgICBtX2ZyYWN0aW9uRmFkZWRJbiA9IDEuMDsKKyAgICBtX2ZhZGVBbmltYXRpb25UaW1lci5z
dG9wKCk7Cit9CisKK3ZvaWQgUGFnZU92ZXJsYXk6OnN0YXJ0RmFkZUFuaW1hdGlvbigpCit7Cisg
ICAgbV9mYWRlQW5pbWF0aW9uU3RhcnRUaW1lID0gY3VycmVudFRpbWUoKTsKKyAgICBtX2ZhZGVB
bmltYXRpb25UaW1lci5zdGFydFJlcGVhdGluZygxIC8gZmFkZUFuaW1hdGlvbkZyYW1lUmF0ZSk7
Cit9CisKK3ZvaWQgUGFnZU92ZXJsYXk6OmZhZGVBbmltYXRpb25UaW1lckZpcmVkKCkKK3sKKyAg
ICBmbG9hdCBhbmltYXRpb25Qcm9ncmVzcyA9IChjdXJyZW50VGltZSgpIC0gbV9mYWRlQW5pbWF0
aW9uU3RhcnRUaW1lKSAvIG1fZmFkZUFuaW1hdGlvbkR1cmF0aW9uOworCisgICAgaWYgKGFuaW1h
dGlvblByb2dyZXNzID49IDEuMCkKKyAgICAgICAgYW5pbWF0aW9uUHJvZ3Jlc3MgPSAxLjA7CisK
KyAgICBkb3VibGUgc2luZSA9IHNpbihwaU92ZXJUd29GbG9hdCAqIGFuaW1hdGlvblByb2dyZXNz
KTsKKyAgICBmbG9hdCBmYWRlQW5pbWF0aW9uVmFsdWUgPSBzaW5lICogc2luZTsKKworICAgIG1f
ZnJhY3Rpb25GYWRlZEluID0gKG1fZmFkZUFuaW1hdGlvblR5cGUgPT0gRmFkZUluQW5pbWF0aW9u
KSA/IGZhZGVBbmltYXRpb25WYWx1ZSA6IDEgLSBmYWRlQW5pbWF0aW9uVmFsdWU7CisgICAgbV9w
YWdlLT5wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKS5zZXRQYWdlT3ZlcmxheU9wYWNpdHkoKnRoaXMs
IG1fZnJhY3Rpb25GYWRlZEluKTsKKworICAgIGlmIChhbmltYXRpb25Qcm9ncmVzcyA9PSAxLjAp
IHsKKyAgICAgICAgbV9mYWRlQW5pbWF0aW9uVGltZXIuc3RvcCgpOworCisgICAgICAgIGJvb2wg
d2FzRmFkaW5nT3V0ID0gbV9mYWRlQW5pbWF0aW9uVHlwZSA9PSBGYWRlT3V0QW5pbWF0aW9uOwor
ICAgICAgICBtX2ZhZGVBbmltYXRpb25UeXBlID0gTm9BbmltYXRpb247CisKKyAgICAgICAgLy8g
SWYgdGhpcyB3YXMgYSBmYWRlIG91dCwgZ28gYWhlYWQgYW5kIHVuaW5zdGFsbCB0aGUgcGFnZSBv
dmVybGF5LgorICAgICAgICBpZiAod2FzRmFkaW5nT3V0KQorICAgICAgICAgICAgbV9wYWdlLT5w
YWdlT3ZlcmxheUNvbnRyb2xsZXIoKS51bmluc3RhbGxQYWdlT3ZlcmxheSh0aGlzLCBQYWdlT3Zl
cmxheTo6RmFkZU1vZGU6OkRvTm90RmFkZSk7CisgICAgfQorfQorCit2b2lkIFBhZ2VPdmVybGF5
OjpjbGVhcigpCit7CisgICAgbV9wYWdlLT5wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKS5jbGVhclBh
Z2VPdmVybGF5KCp0aGlzKTsKK30KKworR3JhcGhpY3NMYXllciYgUGFnZU92ZXJsYXk6OmxheWVy
KCkKK3sKKyAgICByZXR1cm4gbV9wYWdlLT5wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKS5sYXllckZv
ck92ZXJsYXkoKnRoaXMpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZU92ZXJsYXkuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
UGFnZU92ZXJsYXkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MWJmN2Y2
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlT3ZlcmxheS5oCkBA
IC0wLDAgKzEsMTM4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBQYWdlT3ZlcmxheV9oCisjZGVm
aW5lIFBhZ2VPdmVybGF5X2gKKworI2luY2x1ZGUgIkNvbG9yLmgiCisjaW5jbHVkZSAiRmxvYXRQ
b2ludC5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5o
PgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4K
KyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitjbGFzcyBGcmFtZTsKK2NsYXNzIEdyYXBoaWNzQ29udGV4dDsKK2NsYXNzIEdyYXBoaWNzTGF5
ZXI7CitjbGFzcyBQYWdlOworY2xhc3MgUGxhdGZvcm1Nb3VzZUV2ZW50OworCitjbGFzcyBQYWdl
T3ZlcmxheSBmaW5hbCA6IHB1YmxpYyBSZWZDb3VudGVkPFBhZ2VPdmVybGF5PiB7CisgICAgV1RG
X01BS0VfTk9OQ09QWUFCTEUoUGFnZU92ZXJsYXkpOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOworcHVibGljOgorICAgIGNsYXNzIENsaWVudCB7CisgICAgcHJvdGVjdGVkOgorICAgICAg
ICB2aXJ0dWFsIH5DbGllbnQoKSB7IH0KKyAgICAKKyAgICBwdWJsaWM6CisgICAgICAgIHZpcnR1
YWwgdm9pZCBwYWdlT3ZlcmxheURlc3Ryb3llZChQYWdlT3ZlcmxheSYpID0gMDsKKyAgICAgICAg
dmlydHVhbCB2b2lkIHdpbGxNb3ZlVG9QYWdlKFBhZ2VPdmVybGF5JiwgUGFnZSopID0gMDsKKyAg
ICAgICAgdmlydHVhbCB2b2lkIGRpZE1vdmVUb1BhZ2UoUGFnZU92ZXJsYXkmLCBQYWdlKikgPSAw
OworICAgICAgICB2aXJ0dWFsIHZvaWQgZHJhd1JlY3QoUGFnZU92ZXJsYXkmLCBHcmFwaGljc0Nv
bnRleHQmLCBjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpID0gMDsKKyAgICAgICAgdmlydHVhbCBi
b29sIG1vdXNlRXZlbnQoUGFnZU92ZXJsYXkmLCBjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmKSA9
IDA7CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRTY3JvbGxGcmFtZShQYWdlT3ZlcmxheSYsIEZy
YW1lJikgeyB9CisKKyAgICAgICAgdmlydHVhbCBib29sIGNvcHlBY2Nlc3NpYmlsaXR5QXR0cmli
dXRlU3RyaW5nVmFsdWVGb3JQb2ludChQYWdlT3ZlcmxheSYsIFN0cmluZyAvKiBhdHRyaWJ1dGUg
Ki8sIEZsb2F0UG9pbnQsIFN0cmluZyYpIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgICAgIHZpcnR1
YWwgYm9vbCBjb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZUJvb2xWYWx1ZUZvclBvaW50KFBhZ2VP
dmVybGF5JiwgU3RyaW5nIC8qIGF0dHJpYnV0ZSAqLywgRmxvYXRQb2ludCwgYm9vbCYpICB7IHJl
dHVybiBmYWxzZTsgfQorICAgICAgICB2aXJ0dWFsIFZlY3RvcjxTdHJpbmc+IGNvcHlBY2Nlc3Np
YmlsaXR5QXR0cmlidXRlTmFtZXMoUGFnZU92ZXJsYXkmLCBib29sIC8qIHBhcmFtZXRlcml6ZWRO
YW1lcyAqLykgIHsgcmV0dXJuIFZlY3RvcjxTdHJpbmc+KCk7IH0KKyAgICB9OworCisgICAgZW51
bSBjbGFzcyBPdmVybGF5VHlwZSB7CisgICAgICAgIFZpZXcsIC8vIEZpeGVkIHRvIHRoZSB2aWV3
IHNpemU7IGRvZXMgbm90IHNjYWxlIG9yIHNjcm9sbCB3aXRoIHRoZSBkb2N1bWVudCwgcmVwYWlu
dHMgb24gc2Nyb2xsLgorICAgICAgICBEb2N1bWVudCwgLy8gU2NhbGVzIGFuZCBzY3JvbGxzIHdp
dGggdGhlIGRvY3VtZW50LgorICAgIH07CisKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxQYWdlT3Zl
cmxheT4gY3JlYXRlKENsaWVudCYsIE92ZXJsYXlUeXBlID0gT3ZlcmxheVR5cGU6OlZpZXcpOwor
ICAgIHZpcnR1YWwgflBhZ2VPdmVybGF5KCk7CisKKyAgICB2b2lkIHNldFBhZ2UoUGFnZSopOwor
ICAgIHZvaWQgc2V0TmVlZHNEaXNwbGF5KGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCk7CisgICAg
dm9pZCBzZXROZWVkc0Rpc3BsYXkoKTsKKworICAgIHZvaWQgZHJhd1JlY3QoR3JhcGhpY3NDb250
ZXh0JiwgY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KTsKKyAgICBib29sIG1vdXNlRXZlbnQoY29u
c3QgUGxhdGZvcm1Nb3VzZUV2ZW50Jik7CisgICAgdm9pZCBkaWRTY3JvbGxGcmFtZShGcmFtZSYp
OworCisgICAgYm9vbCBjb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVN0cmluZ1ZhbHVlRm9yUG9p
bnQoU3RyaW5nIGF0dHJpYnV0ZSwgRmxvYXRQb2ludCBwYXJhbWV0ZXIsIFN0cmluZyYgdmFsdWUp
OworICAgIGJvb2wgY29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVCb29sVmFsdWVGb3JQb2ludChT
dHJpbmcgYXR0cmlidXRlLCBGbG9hdFBvaW50IHBhcmFtZXRlciwgYm9vbCYgdmFsdWUpOworICAg
IFZlY3RvcjxTdHJpbmc+IGNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlTmFtZXMoYm9vbCBwYXJh
bWV0ZXJpemVkTmFtZXMpOworICAgIAorICAgIHZvaWQgc3RhcnRGYWRlSW5BbmltYXRpb24oKTsK
KyAgICB2b2lkIHN0YXJ0RmFkZU91dEFuaW1hdGlvbigpOworICAgIHZvaWQgc3RvcEZhZGVPdXRB
bmltYXRpb24oKTsKKworICAgIHZvaWQgY2xlYXIoKTsKKworICAgIENsaWVudCYgY2xpZW50KCkg
Y29uc3QgeyByZXR1cm4gbV9jbGllbnQ7IH0KKworICAgIGVudW0gY2xhc3MgRmFkZU1vZGUgeyBE
b05vdEZhZGUsIEZhZGUgfTsKKworICAgIE92ZXJsYXlUeXBlIG92ZXJsYXlUeXBlKCkgeyByZXR1
cm4gbV9vdmVybGF5VHlwZTsgfQorCisgICAgSW50UmVjdCBib3VuZHMoKSBjb25zdDsKKyAgICBJ
bnRSZWN0IGZyYW1lKCkgY29uc3Q7CisgICAgdm9pZCBzZXRGcmFtZShJbnRSZWN0KTsKKworICAg
IFJHQkEzMiBiYWNrZ3JvdW5kQ29sb3IoKSBjb25zdCB7IHJldHVybiBtX2JhY2tncm91bmRDb2xv
cjsgfQorICAgIHZvaWQgc2V0QmFja2dyb3VuZENvbG9yKFJHQkEzMik7CisKKyAgICAvLyBGSVhN
RTogUGFnZU92ZXJsYXkgc2hvdWxkIG93biBpdHMgbGF5ZXIsIGluc3RlYWQgb2YgUGFnZU92ZXJs
YXlDb250cm9sbGVyLgorICAgIEdyYXBoaWNzTGF5ZXImIGxheWVyKCk7CisKK3ByaXZhdGU6Cisg
ICAgZXhwbGljaXQgUGFnZU92ZXJsYXkoQ2xpZW50JiwgT3ZlcmxheVR5cGUpOworCisgICAgdm9p
ZCBzdGFydEZhZGVBbmltYXRpb24oKTsKKyAgICB2b2lkIGZhZGVBbmltYXRpb25UaW1lckZpcmVk
KCk7CisKKyAgICBDbGllbnQmIG1fY2xpZW50OworICAgIFBhZ2UqIG1fcGFnZTsKKworICAgIFJ1
bkxvb3A6OlRpbWVyPFBhZ2VPdmVybGF5PiBtX2ZhZGVBbmltYXRpb25UaW1lcjsKKyAgICBkb3Vi
bGUgbV9mYWRlQW5pbWF0aW9uU3RhcnRUaW1lOworICAgIGRvdWJsZSBtX2ZhZGVBbmltYXRpb25E
dXJhdGlvbjsKKworICAgIGVudW0gRmFkZUFuaW1hdGlvblR5cGUgeworICAgICAgICBOb0FuaW1h
dGlvbiwKKyAgICAgICAgRmFkZUluQW5pbWF0aW9uLAorICAgICAgICBGYWRlT3V0QW5pbWF0aW9u
LAorICAgIH07CisKKyAgICBGYWRlQW5pbWF0aW9uVHlwZSBtX2ZhZGVBbmltYXRpb25UeXBlOwor
ICAgIGZsb2F0IG1fZnJhY3Rpb25GYWRlZEluOworCisgICAgT3ZlcmxheVR5cGUgbV9vdmVybGF5
VHlwZTsKKyAgICBJbnRSZWN0IG1fb3ZlcnJpZGVGcmFtZTsKKworICAgIFJHQkEzMiBtX2JhY2tn
cm91bmRDb2xvcjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gUGFn
ZU92ZXJsYXlfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlT3ZlcmxheUNv
bnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlT3ZlcmxheUNvbnRyb2xsZXIu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViMGM0NTgKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VPdmVybGF5Q29udHJvbGxlci5jcHAK
QEAgLTAsMCArMSwzNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiUGFnZU92ZXJsYXlDb250cm9sbGVyLmgiCisKKyNpbmNsdWRlICJDaHJvbWUuaCIKKyNp
bmNsdWRlICJDaHJvbWVDbGllbnQuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkZy
YW1lVmlldy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkdyYXBo
aWNzTGF5ZXIuaCIKKyNpbmNsdWRlICJNYWluRnJhbWUuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisj
aW5jbHVkZSAiUGFnZU92ZXJsYXkuaCIKKyNpbmNsdWRlICJTY3JvbGxpbmdDb29yZGluYXRvci5o
IgorI2luY2x1ZGUgIlNldHRpbmdzLmgiCisjaW5jbHVkZSAiVGlsZWRCYWNraW5nLmgiCisKKy8v
IEZJWE1FOiBTb21lb25lIG5lZWRzIHRvIGNhbGwgZGlkQ2hhbmdlU2V0dGluZ3MoKSBpZiB3ZSB3
YW50IGR5bmFtaWMgdXBkYXRlcyBvZiBsYXllciBib3JkZXIvcmVwYWludCBjb3VudGVyIHNldHRp
bmdzLgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1BhZ2VPdmVybGF5Q29udHJvbGxlcjo6UGFn
ZU92ZXJsYXlDb250cm9sbGVyKFBhZ2UmIHBhZ2UpCisgICAgOiBtX2luaXRpYWxpemVkKGZhbHNl
KQorICAgICwgbV9wYWdlKHBhZ2UpCit7Cit9CisKK3ZvaWQgUGFnZU92ZXJsYXlDb250cm9sbGVy
OjpjcmVhdGVSb290TGF5ZXJzSWZOZWVkZWQoKQoreworICAgIGlmIChtX2luaXRpYWxpemVkKQor
ICAgICAgICByZXR1cm47CisKKyAgICBtX2luaXRpYWxpemVkID0gdHJ1ZTsKKworICAgIEFTU0VS
VCghbV9kb2N1bWVudE92ZXJsYXlSb290TGF5ZXIpOworICAgIEFTU0VSVCghbV92aWV3T3Zlcmxh
eVJvb3RMYXllcik7CisKKyAgICBtX2RvY3VtZW50T3ZlcmxheVJvb3RMYXllciA9IEdyYXBoaWNz
TGF5ZXI6OmNyZWF0ZShtX3BhZ2UuY2hyb21lKCkuY2xpZW50KCkuZ3JhcGhpY3NMYXllckZhY3Rv
cnkoKSwgKnRoaXMpOworICAgIG1fdmlld092ZXJsYXlSb290TGF5ZXIgPSBHcmFwaGljc0xheWVy
OjpjcmVhdGUobV9wYWdlLmNocm9tZSgpLmNsaWVudCgpLmdyYXBoaWNzTGF5ZXJGYWN0b3J5KCks
ICp0aGlzKTsKKyNpZm5kZWYgTkRFQlVHCisgICAgbV9kb2N1bWVudE92ZXJsYXlSb290TGF5ZXIt
PnNldE5hbWUoIlBhZ2UgT3ZlcmxheSBjb250YWluZXIgKGRvY3VtZW50LXJlbGF0aXZlKSIpOwor
ICAgIG1fdmlld092ZXJsYXlSb290TGF5ZXItPnNldE5hbWUoIlBhZ2UgT3ZlcmxheSBjb250YWlu
ZXIgKHZpZXctcmVsYXRpdmUpIik7CisjZW5kaWYKK30KKworR3JhcGhpY3NMYXllciYgUGFnZU92
ZXJsYXlDb250cm9sbGVyOjpkb2N1bWVudE92ZXJsYXlSb290TGF5ZXIoKQoreworICAgIGNyZWF0
ZVJvb3RMYXllcnNJZk5lZWRlZCgpOworICAgIHJldHVybiAqbV9kb2N1bWVudE92ZXJsYXlSb290
TGF5ZXI7Cit9CisKK0dyYXBoaWNzTGF5ZXImIFBhZ2VPdmVybGF5Q29udHJvbGxlcjo6dmlld092
ZXJsYXlSb290TGF5ZXIoKQoreworICAgIGNyZWF0ZVJvb3RMYXllcnNJZk5lZWRlZCgpOworICAg
IHJldHVybiAqbV92aWV3T3ZlcmxheVJvb3RMYXllcjsKK30KKworc3RhdGljIHZvaWQgdXBkYXRl
T3ZlcmxheUdlb21ldHJ5KFBhZ2VPdmVybGF5JiBvdmVybGF5LCBHcmFwaGljc0xheWVyJiBncmFw
aGljc0xheWVyKQoreworICAgIEludFJlY3Qgb3ZlcmxheUZyYW1lID0gb3ZlcmxheS5mcmFtZSgp
OworCisgICAgaWYgKG92ZXJsYXlGcmFtZS5sb2NhdGlvbigpID09IGdyYXBoaWNzTGF5ZXIucG9z
aXRpb24oKSAmJiBvdmVybGF5RnJhbWUuc2l6ZSgpID09IGdyYXBoaWNzTGF5ZXIuc2l6ZSgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBncmFwaGljc0xheWVyLnNldFBvc2l0aW9uKG92ZXJsYXlG
cmFtZS5sb2NhdGlvbigpKTsKKyAgICBncmFwaGljc0xheWVyLnNldFNpemUob3ZlcmxheUZyYW1l
LnNpemUoKSk7Cit9CisKK3ZvaWQgUGFnZU92ZXJsYXlDb250cm9sbGVyOjppbnN0YWxsUGFnZU92
ZXJsYXkoUGFzc1JlZlB0cjxQYWdlT3ZlcmxheT4gcGFnZU92ZXJsYXksIFBhZ2VPdmVybGF5OjpG
YWRlTW9kZSBmYWRlTW9kZSkKK3sKKyAgICBjcmVhdGVSb290TGF5ZXJzSWZOZWVkZWQoKTsKKwor
ICAgIFJlZlB0cjxQYWdlT3ZlcmxheT4gb3ZlcmxheSA9IHBhZ2VPdmVybGF5OworCisgICAgaWYg
KG1fcGFnZU92ZXJsYXlzLmNvbnRhaW5zKG92ZXJsYXkpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBtX3BhZ2VPdmVybGF5cy5hcHBlbmQob3ZlcmxheSk7CisgICAgb3ZlcmxheS0+c2V0UGFnZSgm
bV9wYWdlKTsKKworICAgIGlmIChmYWRlTW9kZSA9PSBQYWdlT3ZlcmxheTo6RmFkZU1vZGU6OkZh
ZGUpCisgICAgICAgIG92ZXJsYXktPnN0YXJ0RmFkZUluQW5pbWF0aW9uKCk7CisKKyAgICBzdGQ6
OnVuaXF1ZV9wdHI8R3JhcGhpY3NMYXllcj4gbGF5ZXIgPSBHcmFwaGljc0xheWVyOjpjcmVhdGUo
bV9wYWdlLmNocm9tZSgpLmNsaWVudCgpLmdyYXBoaWNzTGF5ZXJGYWN0b3J5KCksICp0aGlzKTsK
KyAgICBsYXllci0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQb2ludDNEKCkpOworICAgIGxheWVyLT5z
ZXRCYWNrZ3JvdW5kQ29sb3Iob3ZlcmxheS0+YmFja2dyb3VuZENvbG9yKCkpOworICAgIHVwZGF0
ZU92ZXJsYXlHZW9tZXRyeSgqb3ZlcmxheSwgKmxheWVyKTsKKyNpZm5kZWYgTkRFQlVHCisgICAg
bGF5ZXItPnNldE5hbWUoIlBhZ2UgT3ZlcmxheSBjb250ZW50Iik7CisjZW5kaWYKKworICAgIHVw
ZGF0ZVNldHRpbmdzRm9yTGF5ZXIoKmxheWVyKTsKKworICAgIHN3aXRjaCAob3ZlcmxheS0+b3Zl
cmxheVR5cGUoKSkgeworICAgIGNhc2UgUGFnZU92ZXJsYXk6Ok92ZXJsYXlUeXBlOjpWaWV3Ogor
ICAgICAgICBtX3ZpZXdPdmVybGF5Um9vdExheWVyLT5hZGRDaGlsZChsYXllci5nZXQoKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgUGFnZU92ZXJsYXk6Ok92ZXJsYXlUeXBlOjpEb2N1bWVu
dDoKKyAgICAgICAgbV9kb2N1bWVudE92ZXJsYXlSb290TGF5ZXItPmFkZENoaWxkKGxheWVyLmdl
dCgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgbV9vdmVybGF5R3JhcGhpY3NMYXll
cnMuc2V0KG92ZXJsYXkuZ2V0KCksIFdURjo6bW92ZShsYXllcikpOworCisgICAgdXBkYXRlRm9y
Y2VTeW5jaHJvbm91c1Njcm9sbExheWVyUG9zaXRpb25VcGRhdGVzKCk7CisKKyAgICBpZiAoRnJh
bWVWaWV3KiBmcmFtZVZpZXcgPSBtX3BhZ2UubWFpbkZyYW1lKCkudmlldygpKQorICAgICAgICBm
cmFtZVZpZXctPmVudGVyQ29tcG9zaXRpbmdNb2RlKCk7Cit9CisKK3ZvaWQgUGFnZU92ZXJsYXlD
b250cm9sbGVyOjp1bmluc3RhbGxQYWdlT3ZlcmxheShQYWdlT3ZlcmxheSogb3ZlcmxheSwgUGFn
ZU92ZXJsYXk6OkZhZGVNb2RlIGZhZGVNb2RlKQoreworICAgIGlmIChmYWRlTW9kZSA9PSBQYWdl
T3ZlcmxheTo6RmFkZU1vZGU6OkZhZGUpIHsKKyAgICAgICAgb3ZlcmxheS0+c3RhcnRGYWRlT3V0
QW5pbWF0aW9uKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBvdmVybGF5LT5zZXRQ
YWdlKG51bGxwdHIpOworCisgICAgbV9vdmVybGF5R3JhcGhpY3NMYXllcnMudGFrZShvdmVybGF5
KS0+cmVtb3ZlRnJvbVBhcmVudCgpOworCisgICAgc2l6ZV90IG92ZXJsYXlJbmRleCA9IG1fcGFn
ZU92ZXJsYXlzLmZpbmQob3ZlcmxheSk7CisgICAgQVNTRVJUKG92ZXJsYXlJbmRleCAhPSBub3RG
b3VuZCk7CisgICAgbV9wYWdlT3ZlcmxheXMucmVtb3ZlKG92ZXJsYXlJbmRleCk7CisKKyAgICB1
cGRhdGVGb3JjZVN5bmNocm9ub3VzU2Nyb2xsTGF5ZXJQb3NpdGlvblVwZGF0ZXMoKTsKK30KKwor
dm9pZCBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6OnVwZGF0ZUZvcmNlU3luY2hyb25vdXNTY3JvbGxM
YXllclBvc2l0aW9uVXBkYXRlcygpCit7CisjaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykKKyAg
ICBib29sIGZvcmNlU3luY2hyb25vdXNTY3JvbGxMYXllclBvc2l0aW9uVXBkYXRlcyA9IGZhbHNl
OworCisgICAgZm9yIChhdXRvJiBvdmVybGF5IDogbV9wYWdlT3ZlcmxheXMpIHsKKyAgICAgICAg
aWYgKG92ZXJsYXktPm92ZXJsYXlUeXBlKCkgPT0gUGFnZU92ZXJsYXk6Ok92ZXJsYXlUeXBlOjpW
aWV3KQorICAgICAgICAgICAgZm9yY2VTeW5jaHJvbm91c1Njcm9sbExheWVyUG9zaXRpb25VcGRh
dGVzID0gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoU2Nyb2xsaW5nQ29vcmRpbmF0b3IqIHNjcm9s
bGluZ0Nvb3JkaW5hdG9yID0gbV9wYWdlLnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkpCisgICAgICAg
IHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT5zZXRGb3JjZVN5bmNocm9ub3VzU2Nyb2xsTGF5ZXJQb3Np
dGlvblVwZGF0ZXMoZm9yY2VTeW5jaHJvbm91c1Njcm9sbExheWVyUG9zaXRpb25VcGRhdGVzKTsK
KyNlbmRpZgorfQorCit2b2lkIFBhZ2VPdmVybGF5Q29udHJvbGxlcjo6c2V0UGFnZU92ZXJsYXlO
ZWVkc0Rpc3BsYXkoUGFnZU92ZXJsYXkmIG92ZXJsYXksIGNvbnN0IFdlYkNvcmU6OkludFJlY3Qm
IGRpcnR5UmVjdCkKK3sKKyAgICBBU1NFUlQobV9wYWdlT3ZlcmxheXMuY29udGFpbnMoJm92ZXJs
YXkpKTsKKyAgICBHcmFwaGljc0xheWVyJiBncmFwaGljc0xheWVyID0gKm1fb3ZlcmxheUdyYXBo
aWNzTGF5ZXJzLmdldCgmb3ZlcmxheSk7CisKKyAgICBpZiAoIWdyYXBoaWNzTGF5ZXIuZHJhd3ND
b250ZW50KCkpIHsKKyAgICAgICAgZ3JhcGhpY3NMYXllci5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7
CisgICAgICAgIHVwZGF0ZU92ZXJsYXlHZW9tZXRyeShvdmVybGF5LCBncmFwaGljc0xheWVyKTsK
KyAgICB9CisKKyAgICBncmFwaGljc0xheWVyLnNldE5lZWRzRGlzcGxheUluUmVjdChkaXJ0eVJl
Y3QpOworfQorCit2b2lkIFBhZ2VPdmVybGF5Q29udHJvbGxlcjo6c2V0UGFnZU92ZXJsYXlPcGFj
aXR5KFBhZ2VPdmVybGF5JiBvdmVybGF5LCBmbG9hdCBvcGFjaXR5KQoreworICAgIEFTU0VSVCht
X3BhZ2VPdmVybGF5cy5jb250YWlucygmb3ZlcmxheSkpOworICAgIG1fb3ZlcmxheUdyYXBoaWNz
TGF5ZXJzLmdldCgmb3ZlcmxheSktPnNldE9wYWNpdHkob3BhY2l0eSk7Cit9CisKK3ZvaWQgUGFn
ZU92ZXJsYXlDb250cm9sbGVyOjpjbGVhclBhZ2VPdmVybGF5KFBhZ2VPdmVybGF5JiBvdmVybGF5
KQoreworICAgIEFTU0VSVChtX3BhZ2VPdmVybGF5cy5jb250YWlucygmb3ZlcmxheSkpOworICAg
IG1fb3ZlcmxheUdyYXBoaWNzTGF5ZXJzLmdldCgmb3ZlcmxheSktPnNldERyYXdzQ29udGVudChm
YWxzZSk7Cit9CisKK0dyYXBoaWNzTGF5ZXImIFBhZ2VPdmVybGF5Q29udHJvbGxlcjo6bGF5ZXJG
b3JPdmVybGF5KFBhZ2VPdmVybGF5JiBvdmVybGF5KSBjb25zdAoreworICAgIEFTU0VSVChtX3Bh
Z2VPdmVybGF5cy5jb250YWlucygmb3ZlcmxheSkpOworICAgIHJldHVybiAqbV9vdmVybGF5R3Jh
cGhpY3NMYXllcnMuZ2V0KCZvdmVybGF5KTsKK30KKwordm9pZCBQYWdlT3ZlcmxheUNvbnRyb2xs
ZXI6OndpbGxBdHRhY2hSb290TGF5ZXIoKQoreworICAgIGZvciAoYXV0byYgb3ZlcmxheUFuZExh
eWVyIDogbV9vdmVybGF5R3JhcGhpY3NMYXllcnMpCisgICAgICAgIHVwZGF0ZU92ZXJsYXlHZW9t
ZXRyeSgqb3ZlcmxheUFuZExheWVyLmtleSwgKm92ZXJsYXlBbmRMYXllci52YWx1ZSk7Cit9CisK
K3ZvaWQgUGFnZU92ZXJsYXlDb250cm9sbGVyOjpkaWRDaGFuZ2VWaWV3U2l6ZSgpCit7CisgICAg
Zm9yIChhdXRvJiBvdmVybGF5QW5kTGF5ZXIgOiBtX292ZXJsYXlHcmFwaGljc0xheWVycykgewor
ICAgICAgICBpZiAob3ZlcmxheUFuZExheWVyLmtleS0+b3ZlcmxheVR5cGUoKSA9PSBQYWdlT3Zl
cmxheTo6T3ZlcmxheVR5cGU6OlZpZXcpCisgICAgICAgICAgICB1cGRhdGVPdmVybGF5R2VvbWV0
cnkoKm92ZXJsYXlBbmRMYXllci5rZXksICpvdmVybGF5QW5kTGF5ZXIudmFsdWUpOworICAgIH0K
K30KKwordm9pZCBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6OmRpZENoYW5nZURvY3VtZW50U2l6ZSgp
Cit7CisgICAgZm9yIChhdXRvJiBvdmVybGF5QW5kTGF5ZXIgOiBtX292ZXJsYXlHcmFwaGljc0xh
eWVycykgeworICAgICAgICBpZiAob3ZlcmxheUFuZExheWVyLmtleS0+b3ZlcmxheVR5cGUoKSA9
PSBQYWdlT3ZlcmxheTo6T3ZlcmxheVR5cGU6OkRvY3VtZW50KQorICAgICAgICAgICAgdXBkYXRl
T3ZlcmxheUdlb21ldHJ5KCpvdmVybGF5QW5kTGF5ZXIua2V5LCAqb3ZlcmxheUFuZExheWVyLnZh
bHVlKTsKKyAgICB9Cit9CisKK3ZvaWQgUGFnZU92ZXJsYXlDb250cm9sbGVyOjpkaWRDaGFuZ2VT
ZXR0aW5ncygpCit7CisgICAgLy8gRklYTUU6IFdlIHNob3VsZCBhcHBseSB0aGVzZSBzZXR0aW5n
cyB0byBhbGwgb3ZlcmxheSBzdWJsYXllcnMgcmVjdXJzaXZlbHkuCisgICAgZm9yIChhdXRvJiBn
cmFwaGljc0xheWVyIDogbV9vdmVybGF5R3JhcGhpY3NMYXllcnMudmFsdWVzKCkpCisgICAgICAg
IHVwZGF0ZVNldHRpbmdzRm9yTGF5ZXIoKmdyYXBoaWNzTGF5ZXIpOworfQorCit2b2lkIFBhZ2VP
dmVybGF5Q29udHJvbGxlcjo6ZGlkQ2hhbmdlRGV2aWNlU2NhbGVGYWN0b3IoKQoreworICAgIGNy
ZWF0ZVJvb3RMYXllcnNJZk5lZWRlZCgpOworCisgICAgbV9kb2N1bWVudE92ZXJsYXlSb290TGF5
ZXItPm5vdGVEZXZpY2VPclBhZ2VTY2FsZUZhY3RvckNoYW5nZWRJbmNsdWRpbmdEZXNjZW5kYW50
cygpOworICAgIG1fdmlld092ZXJsYXlSb290TGF5ZXItPm5vdGVEZXZpY2VPclBhZ2VTY2FsZUZh
Y3RvckNoYW5nZWRJbmNsdWRpbmdEZXNjZW5kYW50cygpOworCisgICAgZm9yIChhdXRvJiBncmFw
aGljc0xheWVyIDogbV9vdmVybGF5R3JhcGhpY3NMYXllcnMudmFsdWVzKCkpCisgICAgICAgIGdy
YXBoaWNzTGF5ZXItPnNldE5lZWRzRGlzcGxheSgpOworfQorCit2b2lkIFBhZ2VPdmVybGF5Q29u
dHJvbGxlcjo6ZGlkQ2hhbmdlRXhwb3NlZFJlY3QoKQoreworICAgIG1fcGFnZS5jaHJvbWUoKS5j
bGllbnQoKS5zY2hlZHVsZUNvbXBvc2l0aW5nTGF5ZXJGbHVzaCgpOworfQorCit2b2lkIFBhZ2VP
dmVybGF5Q29udHJvbGxlcjo6ZGlkU2Nyb2xsRnJhbWUoRnJhbWUmIGZyYW1lKQoreworICAgIGZv
ciAoYXV0byYgb3ZlcmxheUFuZExheWVyIDogbV9vdmVybGF5R3JhcGhpY3NMYXllcnMpIHsKKyAg
ICAgICAgaWYgKG92ZXJsYXlBbmRMYXllci5rZXktPm92ZXJsYXlUeXBlKCkgPT0gUGFnZU92ZXJs
YXk6Ok92ZXJsYXlUeXBlOjpWaWV3IHx8ICFmcmFtZS5pc01haW5GcmFtZSgpKQorICAgICAgICAg
ICAgb3ZlcmxheUFuZExheWVyLnZhbHVlLT5zZXROZWVkc0Rpc3BsYXkoKTsKKyAgICAgICAgb3Zl
cmxheUFuZExheWVyLmtleS0+ZGlkU2Nyb2xsRnJhbWUoZnJhbWUpOworICAgIH0KK30KKwordm9p
ZCBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6OnVwZGF0ZVNldHRpbmdzRm9yTGF5ZXIoR3JhcGhpY3NM
YXllciYgbGF5ZXIpCit7CisgICAgU2V0dGluZ3MmIHNldHRpbmdzID0gbV9wYWdlLnNldHRpbmdz
KCk7CisgICAgbGF5ZXIuc2V0QWNjZWxlcmF0ZXNEcmF3aW5nKHNldHRpbmdzLmFjY2VsZXJhdGVk
RHJhd2luZ0VuYWJsZWQoKSk7CisgICAgbGF5ZXIuc2V0U2hvd0RlYnVnQm9yZGVyKHNldHRpbmdz
LnNob3dEZWJ1Z0JvcmRlcnMoKSk7CisgICAgbGF5ZXIuc2V0U2hvd1JlcGFpbnRDb3VudGVyKHNl
dHRpbmdzLnNob3dSZXBhaW50Q291bnRlcigpKTsKK30KKworYm9vbCBQYWdlT3ZlcmxheUNvbnRy
b2xsZXI6OmhhbmRsZU1vdXNlRXZlbnQoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBtb3VzZUV2
ZW50KQoreworICAgIGlmICghbV9wYWdlT3ZlcmxheXMuc2l6ZSgpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICBmb3IgKGF1dG8gaXQgPSBtX3BhZ2VPdmVybGF5cy5yYmVnaW4oKSwgZW5k
ID0gbV9wYWdlT3ZlcmxheXMucmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgaWYg
KCgqaXQpLT5tb3VzZUV2ZW50KG1vdXNlRXZlbnQpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFBhZ2VPdmVybGF5Q29udHJv
bGxlcjo6Y29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVTdHJpbmdWYWx1ZUZvclBvaW50KFN0cmlu
ZyBhdHRyaWJ1dGUsIEZsb2F0UG9pbnQgcGFyYW1ldGVyLCBTdHJpbmcmIHZhbHVlKQoreworICAg
IGlmICghbV9wYWdlT3ZlcmxheXMuc2l6ZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBmb3IgKGF1dG8gaXQgPSBtX3BhZ2VPdmVybGF5cy5yYmVnaW4oKSwgZW5kID0gbV9wYWdlT3Zl
cmxheXMucmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgaWYgKCgqaXQpLT5jb3B5
QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVN0cmluZ1ZhbHVlRm9yUG9pbnQoYXR0cmlidXRlLCBwYXJh
bWV0ZXIsIHZhbHVlKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJl
dHVybiBmYWxzZTsKK30KKworYm9vbCBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6OmNvcHlBY2Nlc3Np
YmlsaXR5QXR0cmlidXRlQm9vbFZhbHVlRm9yUG9pbnQoU3RyaW5nIGF0dHJpYnV0ZSwgRmxvYXRQ
b2ludCBwYXJhbWV0ZXIsIGJvb2wmIHZhbHVlKQoreworICAgIGlmICghbV9wYWdlT3ZlcmxheXMu
c2l6ZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBmb3IgKGF1dG8gaXQgPSBtX3Bh
Z2VPdmVybGF5cy5yYmVnaW4oKSwgZW5kID0gbV9wYWdlT3ZlcmxheXMucmVuZCgpOyBpdCAhPSBl
bmQ7ICsraXQpIHsKKyAgICAgICAgaWYgKCgqaXQpLT5jb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0
ZUJvb2xWYWx1ZUZvclBvaW50KGF0dHJpYnV0ZSwgcGFyYW1ldGVyLCB2YWx1ZSkpCisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIGZhbHNlOworfQorCitW
ZWN0b3I8U3RyaW5nPiBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6OmNvcHlBY2Nlc3NpYmlsaXR5QXR0
cmlidXRlc05hbWVzKGJvb2wgcGFyYW1ldGVyaXplZE5hbWVzKQoreworICAgIGlmICghbV9wYWdl
T3ZlcmxheXMuc2l6ZSgpKQorICAgICAgICByZXR1cm4gVmVjdG9yPFN0cmluZz4oKTsKKworICAg
IGZvciAoYXV0byBpdCA9IG1fcGFnZU92ZXJsYXlzLnJiZWdpbigpLCBlbmQgPSBtX3BhZ2VPdmVy
bGF5cy5yZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBWZWN0b3I8U3RyaW5nPiBu
YW1lcyA9ICgqaXQpLT5jb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZU5hbWVzKHBhcmFtZXRlcml6
ZWROYW1lcyk7CisgICAgICAgIGlmICghbmFtZXMuaXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0
dXJuIG5hbWVzOworICAgIH0KKworICAgIHJldHVybiBWZWN0b3I8U3RyaW5nPigpOworfQorCit2
b2lkIFBhZ2VPdmVybGF5Q29udHJvbGxlcjo6cGFpbnRDb250ZW50cyhjb25zdCBXZWJDb3JlOjpH
cmFwaGljc0xheWVyKiBncmFwaGljc0xheWVyLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmIGdy
YXBoaWNzQ29udGV4dCwgV2ViQ29yZTo6R3JhcGhpY3NMYXllclBhaW50aW5nUGhhc2UsIGNvbnN0
IFdlYkNvcmU6OkZsb2F0UmVjdCYgY2xpcFJlY3QpCit7CisgICAgZm9yIChhdXRvIGl0ID0gbV9v
dmVybGF5R3JhcGhpY3NMYXllcnMuYmVnaW4oKSwgZW5kID0gbV9vdmVybGF5R3JhcGhpY3NMYXll
cnMuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBpZiAoaXQtPnZhbHVlLmdldCgp
ICE9IGdyYXBoaWNzTGF5ZXIpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBHcmFw
aGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoZ3JhcGhpY3NDb250ZXh0KTsKKyAgICAg
ICAgZ3JhcGhpY3NDb250ZXh0LmNsaXAoY2xpcFJlY3QpOworICAgICAgICBpdC0+a2V5LT5kcmF3
UmVjdChncmFwaGljc0NvbnRleHQsIGVuY2xvc2luZ0ludFJlY3QoY2xpcFJlY3QpKTsKKworICAg
ICAgICByZXR1cm47CisgICAgfQorfQorCitmbG9hdCBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6OmRl
dmljZVNjYWxlRmFjdG9yKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wYWdlLmRldmljZVNjYWxl
RmFjdG9yKCk7Cit9CisKK3ZvaWQgUGFnZU92ZXJsYXlDb250cm9sbGVyOjpub3RpZnlGbHVzaFJl
cXVpcmVkKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKQoreworICAgIG1fcGFnZS5jaHJv
bWUoKS5jbGllbnQoKS5zY2hlZHVsZUNvbXBvc2l0aW5nTGF5ZXJGbHVzaCgpOworfQorCit2b2lk
IFBhZ2VPdmVybGF5Q29udHJvbGxlcjo6ZGlkQ2hhbmdlT3ZlcmxheUZyYW1lKFBhZ2VPdmVybGF5
JiBvdmVybGF5KQoreworICAgIEFTU0VSVChtX3BhZ2VPdmVybGF5cy5jb250YWlucygmb3Zlcmxh
eSkpOworICAgIHVwZGF0ZU92ZXJsYXlHZW9tZXRyeShvdmVybGF5LCAqbV9vdmVybGF5R3JhcGhp
Y3NMYXllcnMuZ2V0KCZvdmVybGF5KSk7Cit9CisKK3ZvaWQgUGFnZU92ZXJsYXlDb250cm9sbGVy
OjpkaWRDaGFuZ2VPdmVybGF5QmFja2dyb3VuZENvbG9yKFBhZ2VPdmVybGF5JiBvdmVybGF5KQor
eworICAgIEFTU0VSVChtX3BhZ2VPdmVybGF5cy5jb250YWlucygmb3ZlcmxheSkpOworICAgIG1f
b3ZlcmxheUdyYXBoaWNzTGF5ZXJzLmdldCgmb3ZlcmxheSktPnNldEJhY2tncm91bmRDb2xvcihv
dmVybGF5LmJhY2tncm91bmRDb2xvcigpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VPdmVybGF5Q29udHJvbGxlci5oIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9QYWdlT3ZlcmxheUNvbnRyb2xsZXIuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZTljODlkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9QYWdlT3ZlcmxheUNvbnRyb2xsZXIuaApAQCAtMCwwICsxLDEwMSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpZm5kZWYgUGFnZU92ZXJsYXlDb250cm9sbGVyX2gKKyNkZWZpbmUgUGFn
ZU92ZXJsYXlDb250cm9sbGVyX2gKKworI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXJDbGllbnQuaCIK
KyNpbmNsdWRlICJQYWdlT3ZlcmxheS5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5j
bHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitjbGFzcyBGcmFtZTsKK2NsYXNzIFBhZ2U7CitjbGFzcyBQbGF0Zm9ybU1v
dXNlRXZlbnQ7CisKK2NsYXNzIFBhZ2VPdmVybGF5Q29udHJvbGxlciA6IHB1YmxpYyBHcmFwaGlj
c0xheWVyQ2xpZW50IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShQYWdlT3ZlcmxheUNvbnRy
b2xsZXIpOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIFBhZ2VP
dmVybGF5Q29udHJvbGxlcihQYWdlJik7CisKKyAgICBHcmFwaGljc0xheWVyJiBkb2N1bWVudE92
ZXJsYXlSb290TGF5ZXIoKTsKKyAgICBHcmFwaGljc0xheWVyJiB2aWV3T3ZlcmxheVJvb3RMYXll
cigpOworCisgICAgdm9pZCBpbnN0YWxsUGFnZU92ZXJsYXkoUGFzc1JlZlB0cjxQYWdlT3Zlcmxh
eT4sIFBhZ2VPdmVybGF5OjpGYWRlTW9kZSk7CisgICAgdm9pZCB1bmluc3RhbGxQYWdlT3Zlcmxh
eShQYWdlT3ZlcmxheSosIFBhZ2VPdmVybGF5OjpGYWRlTW9kZSk7CisKKyAgICB2b2lkIHNldFBh
Z2VPdmVybGF5TmVlZHNEaXNwbGF5KFBhZ2VPdmVybGF5JiwgY29uc3QgSW50UmVjdCYpOworICAg
IHZvaWQgc2V0UGFnZU92ZXJsYXlPcGFjaXR5KFBhZ2VPdmVybGF5JiwgZmxvYXQpOworICAgIHZv
aWQgY2xlYXJQYWdlT3ZlcmxheShQYWdlT3ZlcmxheSYpOworICAgIEdyYXBoaWNzTGF5ZXImIGxh
eWVyRm9yT3ZlcmxheShQYWdlT3ZlcmxheSYpIGNvbnN0OworCisgICAgdm9pZCB3aWxsQXR0YWNo
Um9vdExheWVyKCk7CisKKyAgICB2b2lkIGRpZENoYW5nZVZpZXdTaXplKCk7CisgICAgdm9pZCBk
aWRDaGFuZ2VEb2N1bWVudFNpemUoKTsKKyAgICB2b2lkIGRpZENoYW5nZVNldHRpbmdzKCk7Cisg
ICAgdm9pZCBkaWRDaGFuZ2VEZXZpY2VTY2FsZUZhY3RvcigpOworICAgIHZvaWQgZGlkQ2hhbmdl
RXhwb3NlZFJlY3QoKTsKKyAgICB2b2lkIGRpZFNjcm9sbEZyYW1lKEZyYW1lJik7CisKKyAgICB2
b2lkIGRpZENoYW5nZU92ZXJsYXlGcmFtZShQYWdlT3ZlcmxheSYpOworICAgIHZvaWQgZGlkQ2hh
bmdlT3ZlcmxheUJhY2tncm91bmRDb2xvcihQYWdlT3ZlcmxheSYpOworCisgICAgaW50IG92ZXJs
YXlDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fb3ZlcmxheUdyYXBoaWNzTGF5ZXJzLnNpemUoKTsg
fQorCisgICAgYm9vbCBoYW5kbGVNb3VzZUV2ZW50KGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYp
OworCisgICAgYm9vbCBjb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVN0cmluZ1ZhbHVlRm9yUG9p
bnQoU3RyaW5nIGF0dHJpYnV0ZSwgRmxvYXRQb2ludCwgU3RyaW5nJiB2YWx1ZSk7CisgICAgYm9v
bCBjb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZUJvb2xWYWx1ZUZvclBvaW50KFN0cmluZyBhdHRy
aWJ1dGUsIEZsb2F0UG9pbnQsIGJvb2wmIHZhbHVlKTsKKyAgICBWZWN0b3I8U3RyaW5nPiBjb3B5
QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZXNOYW1lcyhib29sIHBhcmFtZXRlcml6ZWROYW1lcyk7CisK
K3ByaXZhdGU6CisgICAgdm9pZCBjcmVhdGVSb290TGF5ZXJzSWZOZWVkZWQoKTsKKworICAgIHZv
aWQgdXBkYXRlU2V0dGluZ3NGb3JMYXllcihHcmFwaGljc0xheWVyJik7CisgICAgdm9pZCB1cGRh
dGVGb3JjZVN5bmNocm9ub3VzU2Nyb2xsTGF5ZXJQb3NpdGlvblVwZGF0ZXMoKTsKKworICAgIC8v
IEdyYXBoaWNzTGF5ZXJDbGllbnQKKyAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5Rmx1c2hSZXF1aXJl
ZChjb25zdCBHcmFwaGljc0xheWVyKikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHBhaW50
Q29udGVudHMoY29uc3QgR3JhcGhpY3NMYXllciosIEdyYXBoaWNzQ29udGV4dCYsIEdyYXBoaWNz
TGF5ZXJQYWludGluZ1BoYXNlLCBjb25zdCBGbG9hdFJlY3QmIGNsaXBSZWN0KSBvdmVycmlkZTsK
KyAgICB2aXJ0dWFsIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yKCkgY29uc3Qgb3ZlcnJpZGU7Cisg
ICAgdmlydHVhbCBib29sIHNob3VsZFNraXBMYXllckluRHVtcChjb25zdCBHcmFwaGljc0xheWVy
KikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgc3RkOjp1bmlxdWVfcHRy
PEdyYXBoaWNzTGF5ZXI+IG1fZG9jdW1lbnRPdmVybGF5Um9vdExheWVyOworICAgIHN0ZDo6dW5p
cXVlX3B0cjxHcmFwaGljc0xheWVyPiBtX3ZpZXdPdmVybGF5Um9vdExheWVyOworICAgIGJvb2wg
bV9pbml0aWFsaXplZDsKKworICAgIEhhc2hNYXA8UGFnZU92ZXJsYXkqLCBzdGQ6OnVuaXF1ZV9w
dHI8R3JhcGhpY3NMYXllcj4+IG1fb3ZlcmxheUdyYXBoaWNzTGF5ZXJzOworICAgIFZlY3RvcjxS
ZWZQdHI8UGFnZU92ZXJsYXk+PiBtX3BhZ2VPdmVybGF5czsKKyAgICBQYWdlJiBtX3BhZ2U7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFBhZ2VPdmVybGF5Q29udHJv
bGxlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFw
aGljc0xheWVyQ2xpZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFw
aGljc0xheWVyQ2xpZW50LmgKaW5kZXggOGE0ODMzMy4uMjU5MjJjYiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllckNsaWVudC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXJDbGllbnQuaApA
QCAtMjYsNiArMjYsOCBAQAogI2lmbmRlZiBHcmFwaGljc0xheWVyQ2xpZW50X2gKICNkZWZpbmUg
R3JhcGhpY3NMYXllckNsaWVudF9oCiAKKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEZsb2F0UG9pbnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxheWVyLmNwcAppbmRleCBkOWQ1OTMzLi4xNjM3NGRjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKQEAgLTIzMjIsNyArMjMyMiw3IEBAIHZvaWQg
UmVuZGVyTGF5ZXI6OnNjcm9sbFRvKGludCB4LCBpbnQgeSkKIAogICAgIEluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbjo6ZGlkU2Nyb2xsTGF5ZXIoJmZyYW1lKTsKICAgICBpZiAoc2Nyb2xsc092ZXJm
bG93KCkpCi0gICAgICAgIGZyYW1lLmxvYWRlcigpLmNsaWVudCgpLmRpZENoYW5nZVNjcm9sbE9m
ZnNldCgpOworICAgICAgICB2aWV3LmZyYW1lVmlldygpLmRpZENoYW5nZVNjcm9sbE9mZnNldCgp
OwogCiAgICAgdmlldy5mcmFtZVZpZXcoKS5yZXN1bWVWaXNpYmxlSW1hZ2VBbmltYXRpb25zSW5j
bHVkaW5nU3ViZnJhbWVzKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwCmluZGV4IDRiZTQ2OTEuLjFmNTliMGEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwCkBA
IC00NSw2ICs0NSw3IEBACiAjaW5jbHVkZSAiTWFpbkZyYW1lLmgiCiAjaW5jbHVkZSAiTm9kZUxp
c3QuaCIKICNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiUGFnZU92ZXJsYXlDb250cm9sbGVy
LmgiCiAjaW5jbHVkZSAiUmVuZGVyRW1iZWRkZWRPYmplY3QuaCIKICNpbmNsdWRlICJSZW5kZXJG
bG93VGhyZWFkLmgiCiAjaW5jbHVkZSAiUmVuZGVyRnVsbFNjcmVlbi5oIgpAQCAtNjQzLDcgKzY0
NCw4IEBAIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVDb21wb3NpdGluZ0xheWVy
c1RpbWVyRmlyZWQoVGltZXI8UmVuZGVyTGF5ZXJDCiAKIGJvb2wgUmVuZGVyTGF5ZXJDb21wb3Np
dG9yOjpoYXNBbnlBZGRpdGlvbmFsQ29tcG9zaXRlZExheWVycyhjb25zdCBSZW5kZXJMYXllciYg
cm9vdExheWVyKSBjb25zdAogewotICAgIHJldHVybiBtX2NvbXBvc2l0ZWRMYXllckNvdW50ID4g
KHJvb3RMYXllci5pc0NvbXBvc2l0ZWQoKSA/IDEgOiAwKTsKKyAgICBpbnQgbGF5ZXJDb3VudCA9
IG1fY29tcG9zaXRlZExheWVyQ291bnQgKyBtX3JlbmRlclZpZXcuZnJhbWUoKS5wYWdlKCktPnBh
Z2VPdmVybGF5Q29udHJvbGxlcigpLm92ZXJsYXlDb3VudCgpOworICAgIHJldHVybiBsYXllckNv
dW50ID4gKHJvb3RMYXllci5pc0NvbXBvc2l0ZWQoKSA/IDEgOiAwKTsKIH0KIAogdm9pZCBSZW5k
ZXJMYXllckNvbXBvc2l0b3I6OmNhbmNlbENvbXBvc2l0aW5nTGF5ZXJVcGRhdGUoKQpAQCAtNjY1
LDcgKzY2Nyw3IEBAIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVDb21wb3NpdGlu
Z0xheWVycyhDb21wb3NpdGluZ1VwZGF0ZVR5cGUgdXBkYXRlCiAgICAgaWYgKG1fcmVuZGVyVmll
dy5uZWVkc0xheW91dCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAobV9mb3JjZUNvbXBv
c2l0aW5nTW9kZSAmJiAhbV9jb21wb3NpdGluZykKKyAgICBpZiAoKG1fZm9yY2VDb21wb3NpdGlu
Z01vZGUgfHwgbV9yZW5kZXJWaWV3LmZyYW1lKCkucGFnZSgpLT5wYWdlT3ZlcmxheUNvbnRyb2xs
ZXIoKS5vdmVybGF5Q291bnQoKSkgJiYgIW1fY29tcG9zaXRpbmcpCiAgICAgICAgIGVuYWJsZUNv
bXBvc2l0aW5nTW9kZSh0cnVlKTsKIAogICAgIGlmICghbV9yZWV2YWx1YXRlQ29tcG9zaXRpbmdB
ZnRlckxheW91dCAmJiAhbV9jb21wb3NpdGluZykKQEAgLTc0OCw3ICs3NTAsNyBAQCB2b2lkIFJl
bmRlckxheWVyQ29tcG9zaXRvcjo6dXBkYXRlQ29tcG9zaXRpbmdMYXllcnMoQ29tcG9zaXRpbmdV
cGRhdGVUeXBlIHVwZGF0ZQogCiAgICAgICAgIC8vIEhvc3QgdGhlIGRvY3VtZW50IGxheWVyIGlu
IHRoZSBSZW5kZXJWaWV3J3Mgcm9vdCBsYXllci4KICAgICAgICAgaWYgKGlzRnVsbFVwZGF0ZSkg
ewotICAgICAgICAgICAgYXBwZW5kT3ZlcmxheUxheWVycyhjaGlsZExpc3QpOworICAgICAgICAg
ICAgYXBwZW5kRG9jdW1lbnRPdmVybGF5TGF5ZXJzKGNoaWxkTGlzdCk7CiAgICAgICAgICAgICAv
LyBFdmVuIHdoZW4gY2hpbGRMaXN0IGlzIGVtcHR5LCBkb24ndCBkcm9wIG91dCBvZiBjb21wb3Np
dGluZyBtb2RlIGlmIHRoZXJlIGFyZQogICAgICAgICAgICAgLy8gY29tcG9zaXRlZCBsYXllcnMg
dGhhdCB3ZSBkaWRuJ3QgaGl0IGluIG91ciB0cmF2ZXJzYWwgKGUuZy4gYmVjYXVzZSBvZiB2aXNp
YmlsaXR5OmhpZGRlbikuCiAgICAgICAgICAgICBpZiAoY2hpbGRMaXN0LmlzRW1wdHkoKSAmJiAh
aGFzQW55QWRkaXRpb25hbENvbXBvc2l0ZWRMYXllcnMoKnVwZGF0ZVJvb3QpKQpAQCAtNzg0LDE1
ICs3ODYsMTggQEAgdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0ZUNvbXBvc2l0aW5n
TGF5ZXJzKENvbXBvc2l0aW5nVXBkYXRlVHlwZSB1cGRhdGUKICAgICBJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb246OmxheWVyVHJlZURpZENoYW5nZShwYWdlKCkpOwogfQogCi12b2lkIFJlbmRlckxh
eWVyQ29tcG9zaXRvcjo6YXBwZW5kT3ZlcmxheUxheWVycyhWZWN0b3I8R3JhcGhpY3NMYXllcio+
JiBjaGlsZExpc3QpCit2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6YXBwZW5kRG9jdW1lbnRP
dmVybGF5TGF5ZXJzKFZlY3RvcjxHcmFwaGljc0xheWVyKj4mIGNoaWxkTGlzdCkKIHsKICAgICBG
cmFtZSYgZnJhbWUgPSBtX3JlbmRlclZpZXcuZnJhbWVWaWV3KCkuZnJhbWUoKTsKKyAgICBpZiAo
IWZyYW1lLmlzTWFpbkZyYW1lKCkpCisgICAgICAgIHJldHVybjsKKwogICAgIFBhZ2UqIHBhZ2Ug
PSBmcmFtZS5wYWdlKCk7CiAgICAgaWYgKCFwYWdlKQogICAgICAgICByZXR1cm47CiAKLSAgICBp
ZiAoR3JhcGhpY3NMYXllciogb3ZlcmxheUxheWVyID0gcGFnZS0+Y2hyb21lKCkuY2xpZW50KCku
ZG9jdW1lbnRPdmVybGF5TGF5ZXJGb3JGcmFtZShmcmFtZSkpCi0gICAgICAgIGNoaWxkTGlzdC5h
cHBlbmQob3ZlcmxheUxheWVyKTsKKyAgICBwYWdlLT5wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKS53
aWxsQXR0YWNoUm9vdExheWVyKCk7CisgICAgY2hpbGRMaXN0LmFwcGVuZCgmcGFnZS0+cGFnZU92
ZXJsYXlDb250cm9sbGVyKCkuZG9jdW1lbnRPdmVybGF5Um9vdExheWVyKCkpOwogfQogCiB2b2lk
IFJlbmRlckxheWVyQ29tcG9zaXRvcjo6bGF5ZXJCZWNhbWVOb25Db21wb3NpdGVkKGNvbnN0IFJl
bmRlckxheWVyJiBsYXllcikKQEAgLTMzNjYsNiArMzM3MSwxMCBAQCB2b2lkIFJlbmRlckxheWVy
Q29tcG9zaXRvcjo6YXR0YWNoUm9vdExheWVyKFJvb3RMYXllckF0dGFjaG1lbnQgYXR0YWNobWVu
dCkKICAgICAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgICAgIHBhZ2UtPmNocm9tZSgp
LmNsaWVudCgpLmF0dGFjaFJvb3RHcmFwaGljc0xheWVyKCZmcmFtZSwgcm9vdEdyYXBoaWNzTGF5
ZXIoKSk7CisgICAgICAgICAgICBpZiAoZnJhbWUuaXNNYWluRnJhbWUoKSkgeworICAgICAgICAg
ICAgICAgIHBhZ2UtPnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLndpbGxBdHRhY2hSb290TGF5ZXIo
KTsKKyAgICAgICAgICAgICAgICBwYWdlLT5jaHJvbWUoKS5jbGllbnQoKS5hdHRhY2hWaWV3T3Zl
cmxheUdyYXBoaWNzTGF5ZXIoJmZyYW1lLCAmcGFnZS0+cGFnZU92ZXJsYXlDb250cm9sbGVyKCku
dmlld092ZXJsYXlSb290TGF5ZXIoKSk7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQogICAgICAgICBjYXNlIFJvb3RMYXllckF0dGFjaGVkVmlhRW5jbG9zaW5n
RnJhbWU6IHsKQEAgLTM0MTAsNiArMzQxOSw4IEBAIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9y
OjpkZXRhY2hSb290TGF5ZXIoKQogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIHBhZ2Ut
PmNocm9tZSgpLmNsaWVudCgpLmF0dGFjaFJvb3RHcmFwaGljc0xheWVyKCZmcmFtZSwgMCk7Cisg
ICAgICAgIGlmIChmcmFtZS5pc01haW5GcmFtZSgpKQorICAgICAgICAgICAgcGFnZS0+Y2hyb21l
KCkuY2xpZW50KCkuYXR0YWNoVmlld092ZXJsYXlHcmFwaGljc0xheWVyKCZmcmFtZSwgMCk7CiAg
ICAgfQogICAgIGJyZWFrOwogICAgIGNhc2UgUm9vdExheWVyVW5hdHRhY2hlZDoKQEAgLTM0NDQs
OCArMzQ1NSwxMSBAQCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6cm9vdExheWVyQXR0YWNo
bWVudENoYW5nZWQoKQogICAgIGlmIChSZW5kZXJMYXllckJhY2tpbmcqIGJhY2tpbmcgPSBsYXll
ciA/IGxheWVyLT5iYWNraW5nKCkgOiBudWxscHRyKQogICAgICAgICBiYWNraW5nLT51cGRhdGVE
cmF3c0NvbnRlbnQoKTsKIAotICAgIGlmIChHcmFwaGljc0xheWVyKiBvdmVybGF5TGF5ZXIgPSBw
YWdlLT5jaHJvbWUoKS5jbGllbnQoKS5kb2N1bWVudE92ZXJsYXlMYXllckZvckZyYW1lKGZyYW1l
KSkKLSAgICAgICAgbV9yb290Q29udGVudExheWVyLT5hZGRDaGlsZChvdmVybGF5TGF5ZXIpOwor
ICAgIGlmICghZnJhbWUuaXNNYWluRnJhbWUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgcGFn
ZS0+cGFnZU92ZXJsYXlDb250cm9sbGVyKCkud2lsbEF0dGFjaFJvb3RMYXllcigpOworICAgIG1f
cm9vdENvbnRlbnRMYXllci0+YWRkQ2hpbGQoJnBhZ2UtPnBhZ2VPdmVybGF5Q29udHJvbGxlcigp
LmRvY3VtZW50T3ZlcmxheVJvb3RMYXllcigpKTsKIH0KIAogLy8gSUZyYW1lcyBhcmUgc3BlY2lh
bCwgYmVjYXVzZSB3ZSBob29rIGNvbXBvc2l0aW5nIGxheWVycyB0b2dldGhlciBhY3Jvc3MgaWZy
YW1lIGJvdW5kYXJpZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMYXllckNvbXBvc2l0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXll
ckNvbXBvc2l0b3IuaAppbmRleCA3YmQyNDBhLi5kOWE4NzRiIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5oCkBAIC0zNjIsNyArMzYyLDcg
QEAgcHJpdmF0ZToKICAgICBib29sIGxheWVySGFzM0RDb250ZW50KGNvbnN0IFJlbmRlckxheWVy
JikgY29uc3Q7CiAgICAgYm9vbCBpc1J1bm5pbmdBY2NlbGVyYXRlZFRyYW5zZm9ybUFuaW1hdGlv
bihSZW5kZXJMYXllck1vZGVsT2JqZWN0JikgY29uc3Q7CiAKLSAgICB2b2lkIGFwcGVuZE92ZXJs
YXlMYXllcnMoVmVjdG9yPEdyYXBoaWNzTGF5ZXIqPiYpOworICAgIHZvaWQgYXBwZW5kRG9jdW1l
bnRPdmVybGF5TGF5ZXJzKFZlY3RvcjxHcmFwaGljc0xheWVyKj4mKTsKICAgICBib29sIGhhc0Fu
eUFkZGl0aW9uYWxDb21wb3NpdGVkTGF5ZXJzKGNvbnN0IFJlbmRlckxheWVyJiByb290TGF5ZXIp
IGNvbnN0OwogCiAgICAgdm9pZCBlbnN1cmVSb290TGF5ZXIoKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvbWFjL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwppbmRl
eCBiZjZkOGViLi41NjE2YjdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VM
b2cKKysrIGIvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIw
MTQtMDktMzAgIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CisKKyAgICAg
ICAgTW92ZSBQYWdlT3ZlcmxheVtDb250cm9sbGVyXSB0byBXZWJDb3JlCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzcxNjQKKyAgICAgICAgPHJkYXI6
Ly9wcm9ibGVtLzE4NTA4MjU4PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lmg6CisgICAgICAg
ICogV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lm1tOgorICAgICAgICAoV2ViQ2hyb21l
Q2xpZW50OjphdHRhY2hWaWV3T3ZlcmxheUdyYXBoaWNzTGF5ZXIpOgorICAgICAgICBBZGQgYW4g
ZW1wdHkgQ2hyb21lQ2xpZW50IG92ZXJyaWRlLgorCiAyMDE0LTA5LTI4ICBHeXV5b3VuZyBLaW0g
IDxneXV5b3VuZy5raW1Ac2Ftc3VuZy5jb20+CiAKICAgICAgICAgTW92ZSBDb2xvcklucHV0VHlw
ZSBjbGFzcyB0byBzdGQ6OnVuaXF1ZV9wdHIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFj
L1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oIGIvU291cmNlL1dlYktpdC9tYWMvV2Vi
Q29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgKaW5kZXggMWQ0ODI4MS4uNzI3MGNlMSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50
LmgKKysrIGIvU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50
LmgKQEAgLTE2Myw2ICsxNjMsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIHNob3VsZFBh
aW50RW50aXJlQ29udGVudHMoKSBjb25zdCBvdmVycmlkZTsKIAogICAgIHZpcnR1YWwgdm9pZCBh
dHRhY2hSb290R3JhcGhpY3NMYXllcihXZWJDb3JlOjpGcmFtZSosIFdlYkNvcmU6OkdyYXBoaWNz
TGF5ZXIqKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoVmlld092ZXJsYXlHcmFw
aGljc0xheWVyKFdlYkNvcmU6OkZyYW1lKiwgV2ViQ29yZTo6R3JhcGhpY3NMYXllciopIG92ZXJy
aWRlOwogICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc09uZVNob3REcmF3aW5nU3luY2hyb25pemF0
aW9uKCkgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlQ29tcG9zaXRpbmdMYXll
ckZsdXNoKCkgb3ZlcnJpZGU7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNv
cmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5tbSBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVT
dXBwb3J0L1dlYkNocm9tZUNsaWVudC5tbQppbmRleCBlMWRjMTBkLi40NjA2MzEzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQubW0K
KysrIGIvU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lm1t
CkBAIC05MjQsNiArOTI0LDExIEBAIHZvaWQgV2ViQ2hyb21lQ2xpZW50OjphdHRhY2hSb290R3Jh
cGhpY3NMYXllcihGcmFtZSogZnJhbWUsIEdyYXBoaWNzTGF5ZXIqIGdyYXBoCiAgICAgRU5EX0JM
T0NLX09CSkNfRVhDRVBUSU9OUzsKIH0KIAordm9pZCBXZWJDaHJvbWVDbGllbnQ6OmF0dGFjaFZp
ZXdPdmVybGF5R3JhcGhpY3NMYXllcihGcmFtZSosIEdyYXBoaWNzTGF5ZXIqKQoreworICAgIC8v
IEZJWE1FOiBJZiB3ZSB3YW50IHZpZXctcmVsYXRpdmUgcGFnZSBvdmVybGF5cyBpbiBXZWJLaXQx
LCB0aGlzIHdvdWxkIGJlIHRoZSBwbGFjZSB0byBob29rIHRoZW0gdXAuCit9CisKIHZvaWQgV2Vi
Q2hyb21lQ2xpZW50OjpzZXROZWVkc09uZVNob3REcmF3aW5nU3luY2hyb25pemF0aW9uKCkKIHsK
ICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L3dpbi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L3dpbi9DaGFuZ2VMb2cKaW5kZXggZjY3
MTJmZS4uZmY3M2I0ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC93aW4vQ2hhbmdlTG9nCisr
KyBiL1NvdXJjZS9XZWJLaXQvd2luL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDE0LTA5
LTMwICBUaW0gSG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgorCisgICAgICAgIE1v
dmUgUGFnZU92ZXJsYXlbQ29udHJvbGxlcl0gdG8gV2ViQ29yZQorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM3MTY0CisgICAgICAgIDxyZGFyOi8vcHJv
YmxlbS8xODUwODI1OD4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHA6CisgICAgICAgIChX
ZWJDaHJvbWVDbGllbnQ6OmF0dGFjaFZpZXdPdmVybGF5R3JhcGhpY3NMYXllcik6CisgICAgICAg
ICogV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lmg6CisgICAgICAgIEFkZCBhbiBlbXB0
eSBDaHJvbWVDbGllbnQgb3ZlcnJpZGUuCisKIDIwMTQtMDktMjkgIENocmlzdG9waGUgRHVtZXog
IDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIE1ha2UgaXM8PigpIC8gZG93bmNhc3Q8Pigp
IHdvcmsgZm9yIEhUTUxEb2N1bWVudCBhbmQgaXRzIHN1YmNsYXNzZXMKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwCmluZGV4IGE5
YzBiMGEuLjVmYjE3OWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvd2luL1dlYkNvcmVTdXBw
b3J0L1dlYkNocm9tZUNsaWVudC5jcHAKKysrIGIvU291cmNlL1dlYktpdC93aW4vV2ViQ29yZVN1
cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcApAQCAtNzUyLDYgKzc1MiwxMSBAQCB2b2lkIFdlYkNo
cm9tZUNsaWVudDo6YXR0YWNoUm9vdEdyYXBoaWNzTGF5ZXIoRnJhbWUqIGZyYW1lLCBHcmFwaGlj
c0xheWVyKiBncmFwaAogICAgIG1fd2ViVmlldy0+c2V0Um9vdENoaWxkTGF5ZXIoZ3JhcGhpY3NM
YXllcik7CiB9CiAKK3ZvaWQgV2ViQ2hyb21lQ2xpZW50OjphdHRhY2hWaWV3T3ZlcmxheUdyYXBo
aWNzTGF5ZXIoRnJhbWUqLCBHcmFwaGljc0xheWVyKikKK3sKKyAgICAvLyBGSVhNRTogSWYgd2Ug
d2FudCB2aWV3LXJlbGF0aXZlIHBhZ2Ugb3ZlcmxheXMgaW4gV2ViS2l0MSBvbiBXaW5kb3dzLCB0
aGlzIHdvdWxkIGJlIHRoZSBwbGFjZSB0byBob29rIHRoZW0gdXAuCit9CisKIHZvaWQgV2ViQ2hy
b21lQ2xpZW50OjpzY2hlZHVsZUNvbXBvc2l0aW5nTGF5ZXJGbHVzaCgpCiB7CiAgICAgbV93ZWJW
aWV3LT5mbHVzaFBlbmRpbmdHcmFwaGljc0xheWVyQ2hhbmdlc1Nvb24oKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oIGIvU291
cmNlL1dlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgKaW5kZXggM2Nk
NjI4MS4uY2Q3OTJjNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC93aW4vV2ViQ29yZVN1cHBv
cnQvV2ViQ2hyb21lQ2xpZW50LmgKKysrIGIvU291cmNlL1dlYktpdC93aW4vV2ViQ29yZVN1cHBv
cnQvV2ViQ2hyb21lQ2xpZW50LmgKQEAgLTEzMCw2ICsxMzAsNyBAQCBwdWJsaWM6CiAKICAgICAv
LyBQYXNzIDAgYXMgdGhlIEdyYXBoaWNzTGF5ZXIgdG8gZGV0YXRjaCB0aGUgcm9vdCBsYXllci4K
ICAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoUm9vdEdyYXBoaWNzTGF5ZXIoV2ViQ29yZTo6RnJhbWUq
LCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKik7CisgICAgdmlydHVhbCB2b2lkIGF0dGFjaFZpZXdP
dmVybGF5R3JhcGhpY3NMYXllcihXZWJDb3JlOjpGcmFtZSosIFdlYkNvcmU6OkdyYXBoaWNzTGF5
ZXIqKSBvdmVycmlkZTsKICAgICAvLyBTZXRzIGEgZmxhZyB0byBzcGVjaWZ5IHRoYXQgdGhlIG5l
eHQgdGltZSBjb250ZW50IGlzIGRyYXduIHRvIHRoZSB3aW5kb3csCiAgICAgLy8gdGhlIGNoYW5n
ZXMgYXBwZWFyIG9uIHRoZSBzY3JlZW4gaW4gc3luY2hyb255IHdpdGggdXBkYXRlcyB0byBHcmFw
aGljc0xheWVycy4KICAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNPbmVTaG90RHJhd2luZ1N5bmNo
cm9uaXphdGlvbigpIHsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ01ha2VMaXN0cy50
eHQgYi9Tb3VyY2UvV2ViS2l0Mi9DTWFrZUxpc3RzLnR4dAppbmRleCA2YmRjNTlkLi40YTQ2NTQ1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9DTWFrZUxpc3RzLnR4dApAQCAtNTQzLDggKzU0Myw2IEBAIHNldChXZWJLaXQyX1NP
VVJDRVMKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuY3BwCiAgICAgV2Vi
UHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUhvc3QuY3BwCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdl
L1BhZ2VCYW5uZXIuY3BwCi0gICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1BhZ2VPdmVybGF5LmNwcAot
ICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9QYWdlT3ZlcmxheUNvbnRyb2xsZXIuY3BwCiAgICAgV2Vi
UHJvY2Vzcy9XZWJQYWdlL1RhcEhpZ2hsaWdodENvbnRyb2xsZXIuY3BwCiAgICAgV2ViUHJvY2Vz
cy9XZWJQYWdlL1dlYkJhY2tGb3J3YXJkTGlzdFByb3h5LmNwcAogICAgIFdlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJDb250ZXh0TWVudS5jcHAKQEAgLTU1NSw2ICs1NTMsNyBAQCBzZXQoV2ViS2l0Ml9T
T1VSQ0VTCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYk9wZW5QYW5lbFJlc3VsdExpc3RlbmVy
LmNwcAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAogICAgIFdlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJQYWdlR3JvdXBQcm94eS5jcHAKKyAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
UGFnZU92ZXJsYXkuY3BwCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1Zpc2l0ZWRMaW5rVGFibGVD
b250cm9sbGVyLmNwcAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJVbmRvU3RlcC5jcHAKICkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCAzNjBhYmVmLi42ZDE4NTUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTI1
IEBACisyMDE0LTA5LTMwICBUaW0gSG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgor
CisgICAgICAgIE1vdmUgUGFnZU92ZXJsYXlbQ29udHJvbGxlcl0gdG8gV2ViQ29yZQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM3MTY0CisgICAgICAg
IDxyZGFyOi8vcHJvYmxlbS8xODUwODI1OD4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIFdlYktpdDIu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgTWFrZSB0aGUgYXBwcm9wcmlhdGUg
YnVpbGQgc3lzdGVtIGNoYW5nZXMuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0FQSS9jL1dLQnVuZGxlQVBJQ2FzdC5oOgorICAgICAgICBNYWtlIFdLQnVuZGxlUGFnZU92
ZXJsYXlSZWYgbWFwIHRvIFdlYlBhZ2VPdmVybGF5IGluc3RlYWQgb2YgUGFnZU92ZXJsYXkuCisK
KyAgICAgICAgKiBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlUGFnZS5j
cHA6CisgICAgICAgIChXS0J1bmRsZVBhZ2VJbnN0YWxsUGFnZU92ZXJsYXkpOgorICAgICAgICAo
V0tCdW5kbGVQYWdlVW5pbnN0YWxsUGFnZU92ZXJsYXkpOgorICAgICAgICAoV0tCdW5kbGVQYWdl
SW5zdGFsbFBhZ2VPdmVybGF5V2l0aEFuaW1hdGlvbik6CisgICAgICAgIChXS0J1bmRsZVBhZ2VV
bmluc3RhbGxQYWdlT3ZlcmxheVdpdGhBbmltYXRpb24pOgorICAgICAgICBGb3J3YXJkIFBhZ2VP
dmVybGF5IGluc3RhbGxhdGlvbi91bmluc3RhbGxhdGlvbiB0byBXZWJDb3JlOjpQYWdlLgorCisg
ICAgICAgICogV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZVBhZ2VPdmVy
bGF5LmNwcDoKKyAgICAgICAgKFdLQnVuZGxlUGFnZU92ZXJsYXlHZXRUeXBlSUQpOgorICAgICAg
ICAoV0tCdW5kbGVQYWdlT3ZlcmxheUNyZWF0ZSk6CisgICAgICAgIChXS0J1bmRsZVBhZ2VPdmVy
bGF5U2V0QWNjZXNzaWJpbGl0eUNsaWVudCk6CisgICAgICAgIFVzZSBXZWJQYWdlT3ZlcmxheSBp
bnN0ZWFkIG9mIFBhZ2VPdmVybGF5LCBhbmQgcmVmZXJlbmNlcyBpbnN0ZWFkIG9mIHBvaW50ZXJz
LgorICAgICAgICBXZSBmb3J3YXJkIGNsaWVudCBjYWxsYmFja3MgdGhyb3VnaCBmcm9tIFBhZ2VP
dmVybGF5OjpDbGllbnQgdG8gV2ViUGFnZU92ZXJsYXk6OkNsaWVudC4KKworICAgICAgICAoUGFn
ZU92ZXJsYXlDbGllbnRJbXBsOjpjb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlKToKKyAg
ICAgICAgKFBhZ2VPdmVybGF5Q2xpZW50SW1wbDo6Y29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVO
YW1lcyk6CisgICAgICAgIENvbnZlcnQgZnJvbSB3dGYgdHlwZXMgdG8gV2ViS2l0MiB0eXBlcy4K
KworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNw
cDoKKyAgICAgICAgKFdlYktpdDo6V2ViQ2hyb21lQ2xpZW50OjpncmFwaGljc0xheWVyRmFjdG9y
eSk6CisgICAgICAgIElmIHdlIGRvbid0IGhhdmUgYSBkcmF3aW5nIGFyZWEsIGRvbid0IGRlcmVm
ZXJlbmNlIGl0IQorCisgICAgICAgIChXZWJLaXQ6OldlYkNocm9tZUNsaWVudDo6YXR0YWNoVmll
d092ZXJsYXlHcmFwaGljc0xheWVyKToKKyAgICAgICAgRm9yd2FyZCBhdHRhY2hWaWV3T3Zlcmxh
eUdyYXBoaWNzTGF5ZXIgdG8gdGhlIERyYXdpbmdBcmVhLgorCisgICAgICAgICogV2ViUHJvY2Vz
cy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaDoKKworICAgICAgICAqIFdlYlByb2Nl
c3MvV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50LmNwcDoKKyAgICAgICAgKiBXZWJQ
cm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckNsaWVudC5oOgorICAgICAgICAqIFdl
YlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5jcHA6CisgICAgICAgICogV2ViUHJvY2Vz
cy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdl
L2lvcy9GaW5kQ29udHJvbGxlcklPUy5tbToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2Uv
aW9zL0ZpbmRJbmRpY2F0b3JPdmVybGF5Q2xpZW50SU9TLmg6CisgICAgICAgICogV2ViUHJvY2Vz
cy9XZWJQYWdlL21hYy9TZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyLm1tOgorICAgICAgICAqIFdl
YlByb2Nlc3MvV2ViUGFnZS9TZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyLmg6CisgICAgICAgIE1l
Y2hhbmljYWwgY2hhbmdlcyB0byBhZG9wdCB0byB0aGUgZmFjdCB0aGF0IFBhZ2VPdmVybGF5IGlz
IGluIFdlYkNvcmUgbm93LgorCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJl
ZUhvc3QuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHA6CisgICAg
ICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaDoKKyAgICAgICAgUmVtb3ZlIHN1cHBv
cnQgZm9yIFdlYktpdDItYmFzZWQgcGFnZSBvdmVybGF5cy4KKworICAgICAgICAqIFdlYlByb2Nl
c3MvV2ViUGFnZS9XZWJQYWdlT3ZlcmxheS5jcHA6IEFkZGVkLgorICAgICAgICAqIFdlYlByb2Nl
c3MvV2ViUGFnZS9XZWJQYWdlT3ZlcmxheS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6V2Vi
UGFnZU92ZXJsYXk6OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VPdmVybGF5OjpX
ZWJQYWdlT3ZlcmxheSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VPdmVybGF5Ojp+V2ViUGFn
ZU92ZXJsYXkpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlT3ZlcmxheTo6c2V0TmVlZHNEaXNw
bGF5KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZU92ZXJsYXk6OmNsZWFyKToKKyAgICAgICAg
KFdlYktpdDo6V2ViUGFnZU92ZXJsYXk6OnBhZ2VPdmVybGF5RGVzdHJveWVkKToKKyAgICAgICAg
KFdlYktpdDo6V2ViUGFnZU92ZXJsYXk6OndpbGxNb3ZlVG9QYWdlKToKKyAgICAgICAgKFdlYktp
dDo6V2ViUGFnZU92ZXJsYXk6OmRpZE1vdmVUb1BhZ2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
YWdlT3ZlcmxheTo6ZHJhd1JlY3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlT3ZlcmxheTo6
bW91c2VFdmVudCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VPdmVybGF5OjpkaWRTY3JvbGxG
cmFtZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VPdmVybGF5Ojpjb3B5QWNjZXNzaWJpbGl0
eUF0dHJpYnV0ZVN0cmluZ1ZhbHVlRm9yUG9pbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdl
T3ZlcmxheTo6Y29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVCb29sVmFsdWVGb3JQb2ludCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlBhZ2VPdmVybGF5Ojpjb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0
ZU5hbWVzKToKKyAgICAgICAgV2ViUGFnZU92ZXJsYXkgZXhpc3RzIHRvIGJlIG91ciBBUEkgb2Jq
ZWN0LCBidXQgZm9yd2FyZHMgZXZlcnl0aGluZworICAgICAgICB0byBpdHMgV2ViQ29yZTo6UGFn
ZU92ZXJsYXksIGFuZCBpbXBsZW1lbnRzIFdlYkNvcmU6OlBhZ2VPdmVybGF5OjpDbGllbnQsIGFu
ZAorICAgICAgICBmb3J3YXJkcyBjbGllbnQgY2FsbGJhY2tzIHRvIGl0cyBXZWJQYWdlT3Zlcmxh
eTo6Q2xpZW50ICh3aGljaAorICAgICAgICBXS0J1bmRsZVBhZ2VPdmVybGF5IGltcGxlbWVudHMp
LgorCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XS0FjY2Vzc2liaWxpdHlXZWJQ
YWdlT2JqZWN0TWFjLm1tOgorICAgICAgICAoLVtXS0FjY2Vzc2liaWxpdHlXZWJQYWdlT2JqZWN0
IGFjY2Vzc2liaWxpdHlQYXJhbWV0ZXJpemVkQXR0cmlidXRlTmFtZXNdKToKKyAgICAgICAgKC1b
V0tBY2Nlc3NpYmlsaXR5V2ViUGFnZU9iamVjdCBhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6
Zm9yUGFyYW1ldGVyOl0pOgorICAgICAgICBGb3J3YXJkIHRoZSB0aHJlZSBBWCBwcm9wZXJ0aWVz
IHRoYXQgUGFnZU92ZXJsYXlzIGFyZSBldmVyIHF1ZXJpZWQgZm9yCisgICAgICAgIHRvIHRoZSBh
cHByb3ByaWF0ZSBQYWdlT3ZlcmxheUNvbnRyb2xsZXIgZnVuY3Rpb24uCisgICAgICAgIAorICAg
ICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9tYWMvUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWEu
aDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1JlbW90ZUxheWVyVHJlZURyYXdp
bmdBcmVhLm1tOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYTo6
UmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWEpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVMYXll
clRyZWVEcmF3aW5nQXJlYTo6dXBkYXRlUm9vdExheWVycyk6CisgICAgICAgIEZhY3RvciB1cGRh
dGVSb290TGF5ZXJzIG91dCBvZiBzZXRSb290Q29tcG9zaXRpbmdMYXllci4KKworICAgICAgICAo
V2ViS2l0OjpSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYTo6YXR0YWNoVmlld092ZXJsYXlHcmFw
aGljc0xheWVyKToKKyAgICAgICAgSWYgd2UgYXR0YWNoL2RldGFjaCB0aGUgdmlldy1yZWxhdGl2
ZSBwYWdlIG92ZXJsYXkgcm9vdCBsYXllciwKKyAgICAgICAgcmVhdHRhY2ggdGhlIHJvb3QgY29t
cG9zaXRpbmcgbGF5ZXIncyBjaGlsZHJlbi4KKworICAgICAgICAoV2ViS2l0OjpSZW1vdGVMYXll
clRyZWVEcmF3aW5nQXJlYTo6c2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIpOgorICAgICAgICBEaXR0
byBmb3IgdGhlIHJvb3QgY29tcG9zaXRpbmcgbGF5ZXIuCisKKyAgICAgICAgKFdlYktpdDo6UmVt
b3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWE6OnVwZGF0ZVNjcm9sbGVkRXhwb3NlZFJlY3QpOgorICAg
ICAgICAoV2ViS2l0OjpSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYTo6Zmx1c2hMYXllcnMpOgor
ICAgICAgICAoV2ViS2l0OjpSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYTo6bWFpbkZyYW1lQ29u
dGVudFNpemVDaGFuZ2VkKToKKyAgICAgICAgSW5mb3JtaW5nIFBhZ2VPdmVybGF5Q29udHJvbGxl
ciBvZiBleHBvc2VkIHJlY3QvZG9jdW1lbnQgc2l6ZSBjaGFuZ2VzIGlzIG5vdworICAgICAgICBX
ZWJDb3JlJ3Mgam9iLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9UaWxlZENv
cmVBbmltYXRpb25EcmF3aW5nQXJlYS5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9t
YWMvVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWEubW06CisgICAgICAgIChXZWJLaXQ6OlRp
bGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhOjpUaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJl
YSk6CisgICAgICAgIChXZWJLaXQ6OlRpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhOjp1cGRh
dGVSb290TGF5ZXJzKToKKyAgICAgICAgRmFjdG9yIHVwZGF0ZVJvb3RMYXllcnMgb3V0IG9mIHNl
dFJvb3RDb21wb3NpdGluZ0xheWVyLgorCisgICAgICAgIChXZWJLaXQ6OlRpbGVkQ29yZUFuaW1h
dGlvbkRyYXdpbmdBcmVhOjphdHRhY2hWaWV3T3ZlcmxheUdyYXBoaWNzTGF5ZXIpOgorICAgICAg
ICAoV2ViS2l0OjpUaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYTo6c2V0Um9vdENvbXBvc2l0
aW5nTGF5ZXIpOgorICAgICAgICBNYWtlIHVzZSBvZiB1cGRhdGVSb290TGF5ZXJzIHdoZW4gd2Ug
YXR0YWNoL2RldGFjaCByb290IGNvbXBvc2l0aW5nIGxheWVyL3ZpZXcgb3ZlcmxheSBsYXllci4K
KworICAgICAgICAoV2ViS2l0OjpUaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYTo6bWFpbkZy
YW1lQ29udGVudFNpemVDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6VGlsZWRDb3JlQW5pbWF0
aW9uRHJhd2luZ0FyZWE6OmZsdXNoTGF5ZXJzKToKKyAgICAgICAgKFdlYktpdDo6VGlsZWRDb3Jl
QW5pbWF0aW9uRHJhd2luZ0FyZWE6OnVwZGF0ZVNjcm9sbGVkRXhwb3NlZFJlY3QpOgorICAgICAg
ICBJbmZvcm1pbmcgUGFnZU92ZXJsYXlDb250cm9sbGVyIG9mIGV4cG9zZWQgcmVjdC9kb2N1bWVu
dCBzaXplIGNoYW5nZXMgaXMgbm93CisgICAgICAgIFdlYkNvcmUncyBqb2IuCisKKyAgICAgICAg
KiBXZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWEuaDoKKyAgICAgICAgKFdlYktpdDo6RHJh
d2luZ0FyZWE6OmF0dGFjaFZpZXdPdmVybGF5R3JhcGhpY3NMYXllcik6CisKIDIwMTQtMDktMzAg
IENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFJF
R1JFU1NJT04ocjE3MzkyOSk6IFtHVEtdIFRlc3RJbnNwZWN0b3IgZmFpbHMgYWZ0ZXIgcjE3Mzky
OQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qIGIvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CmluZGV4IGQwYTkyZjkuLjJkN2VjM2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYktp
dDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQy
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTMwNyw4ICszMDcsNiBAQAogCQkxQTkwQzFF
RTEyNjRGRDUwMDAzRTQ0RDQgLyogV2ViRmluZE9wdGlvbnMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBOTBDMUVEMTI2NEZENTAwMDNFNDRENCAvKiBX
ZWJGaW5kT3B0aW9ucy5oICovOyB9OwogCQkxQTkwQzFGNDEyNjRGRDcxMDAzRTQ0RDQgLyogRmlu
ZENvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDFBOTBDMUYyMTI2NEZENzEwMDNFNDRENCAvKiBGaW5kQ29udHJvbGxlci5oICovOyB9Owog
CQkxQTkwQzFGNTEyNjRGRDcxMDAzRTQ0RDQgLyogRmluZENvbnRyb2xsZXIuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE5MEMxRjMxMjY0RkQ3MTAw
M0U0NEQ0IC8qIEZpbmRDb250cm9sbGVyLmNwcCAqLzsgfTsKLQkJMUE5MEMyMzcxMjY1MDcxNzAw
M0U0NEQ0IC8qIFBhZ2VPdmVybGF5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAxQTkwQzIzNTEyNjUwNzE3MDAzRTQ0RDQgLyogUGFnZU92ZXJsYXkuaCAq
LzsgfTsKLQkJMUE5MEMyMzgxMjY1MDcxNzAwM0U0NEQ0IC8qIFBhZ2VPdmVybGF5LmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBOTBDMjM2MTI2NTA3
MTcwMDNFNDRENCAvKiBQYWdlT3ZlcmxheS5jcHAgKi87IH07CiAJCTFBOTEwMDcxMTI2Njc1QzQw
MDE4NDJGNSAvKiBGaW5kSW5kaWNhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAxQTkxMDA2RjEyNjY3NUMzMDAxODQyRjUgLyogRmluZEluZGljYXRv
ci5oICovOyB9OwogCQkxQTkxMDA3MjEyNjY3NUM0MDAxODQyRjUgLyogRmluZEluZGljYXRvci5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTkxMDA3
MDEyNjY3NUM0MDAxODQyRjUgLyogRmluZEluZGljYXRvci5jcHAgKi87IH07CiAJCTFBOTJEQzEx
MTJGOEJBNDYwMDE3QUY2NSAvKiBMYXllclRyZWVDb250ZXh0LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTkyREMxMDEyRjhCQTQ2MDAxN0FGNjUgLyog
TGF5ZXJUcmVlQ29udGV4dC5oICovOyB9OwpAQCAtNTY4LDggKzU2Niw2IEBACiAJCTI5RDU1REYy
MTYxQkY5RjEwMDMxQTJFMyAvKiBXZWJQYWdlR3JvdXBQcm94eU1lc3NhZ2VzLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyOUQ1NURGMDE2MUJGOUYxMDAz
MUEyRTMgLyogV2ViUGFnZUdyb3VwUHJveHlNZXNzYWdlcy5oICovOyB9OwogCQkyRDEyNUM1RTE4
NTdFQTA1MDAzQkEzQ0IgLyogVmlld0dlc3R1cmVDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRDEyNUM1QzE4NTdFQTA1MDAzQkEzQ0Ig
LyogVmlld0dlc3R1cmVDb250cm9sbGVyLmggKi87IH07CiAJCTJEMTI1QzVGMTg1N0VBMDUwMDNC
QTNDQiAvKiBWaWV3R2VzdHVyZUNvbnRyb2xsZXJNYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRDEyNUM1RDE4NTdFQTA1MDAzQkEzQ0IgLyogVmll
d0dlc3R1cmVDb250cm9sbGVyTWFjLm1tICovOyB9OwotCQkyRDE0MEVBRjE4RjM3QkUwMDA1RTc1
QTAgLyogUGFnZU92ZXJsYXlDb250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJEMTQwRUFEMThGMzdCRTAwMDVFNzVBMCAvKiBQYWdlT3Zl
cmxheUNvbnRyb2xsZXIuY3BwICovOyB9OwotCQkyRDE0MEVCMDE4RjM3QkUwMDA1RTc1QTAgLyog
UGFnZU92ZXJsYXlDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAyRDE0MEVBRTE4RjM3QkUwMDA1RTc1QTAgLyogUGFnZU92ZXJsYXlDb250
cm9sbGVyLmggKi87IH07CiAJCTJEMUI1RDVEMTg1ODY5QzgwMDZDNjU5NiAvKiBWaWV3R2VzdHVy
ZUNvbnRyb2xsZXJNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMkQxQjVENUIxODU4NjlDODAwNkM2NTk2IC8qIFZpZXdHZXN0
dXJlQ29udHJvbGxlck1lc3NhZ2VSZWNlaXZlci5jcHAgKi87IH07CiAJCTJEMUI1RDVFMTg1ODY5
QzgwMDZDNjU5NiAvKiBWaWV3R2VzdHVyZUNvbnRyb2xsZXJNZXNzYWdlcy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkQxQjVENUMxODU4NjlDODAwNkM2
NTk2IC8qIFZpZXdHZXN0dXJlQ29udHJvbGxlck1lc3NhZ2VzLmggKi87IH07CiAJCTJEMjhGM0U0
MTg4NUNDQzEwMDRCOUVBRSAvKiBXZWJDaHJvbWVDbGllbnRJT1MubW0gaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRDI4RjNFMDE4ODVDQ0MxMDA0QjlFQUUg
LyogV2ViQ2hyb21lQ2xpZW50SU9TLm1tICovOyB9OwpAQCAtNTg2LDYgKzU4Miw4IEBACiAJCTJE
NDI5QkZEMTcyMUUyQzcwMEVDNjgxRiAvKiBQREZQbHVnaW5QYXNzd29yZEZpZWxkLm1tIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkQ0MjlCRkIxNzIxRTJC
QTAwRUM2ODFGIC8qIFBERlBsdWdpblBhc3N3b3JkRmllbGQubW0gKi87IH07CiAJCTJENDdCNTZD
MTgxMDcxNEUwMDNBM0FFRSAvKiBSZW1vdGVMYXllckJhY2tpbmdTdG9yZS5tbSBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJENDdCNTZBMTgxMDcxNEUwMDNB
M0FFRSAvKiBSZW1vdGVMYXllckJhY2tpbmdTdG9yZS5tbSAqLzsgfTsKIAkJMkQ0N0I1NkQxODEw
NzE0RTAwM0EzQUVFIC8qIFJlbW90ZUxheWVyQmFja2luZ1N0b3JlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRDQ3QjU2QjE4MTA3MTRFMDAzQTNBRUUg
LyogUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmUuaCAqLzsgfTsKKwkJMkQ1QzlEMDUxOUM4MUQ4RjAw
QjNDNUMxIC8qIFdlYlBhZ2VPdmVybGF5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDJENUM5RDAzMTlDODFEOEYwMEIzQzVDMSAvKiBXZWJQYWdlT3Zl
cmxheS5jcHAgKi87IH07CisJCTJENUM5RDA2MTlDODFEOEYwMEIzQzVDMSAvKiBXZWJQYWdlT3Zl
cmxheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkQ1
QzlEMDQxOUM4MUQ4RjAwQjNDNUMxIC8qIFdlYlBhZ2VPdmVybGF5LmggKi87IH07CiAJCTJENkFC
NTQxMTkyQjFDNEEwMDNBOUZEMSAvKiBXS1BERlBhZ2VOdW1iZXJJbmRpY2F0b3IuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJENkFCNTNGMTkyQjFDNEEw
MDNBOUZEMSAvKiBXS1BERlBhZ2VOdW1iZXJJbmRpY2F0b3IuaCAqLzsgfTsKIAkJMkQ2QUI1NDIx
OTJCMUM0QTAwM0E5RkQxIC8qIFdLUERGUGFnZU51bWJlckluZGljYXRvci5tbSBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJENkFCNTQwMTkyQjFDNEEwMDNB
OUZEMSAvKiBXS1BERlBhZ2VOdW1iZXJJbmRpY2F0b3IubW0gKi87IH07CiAJCTJENkIzNzFCMThB
OTY3QUQwMDQyQUU4MCAvKiBfV0tUaHVtYm5haWxWaWV3LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRDZCMzcxOTE4QTk2N0FEMDA0MkFFODAgLyogX1dL
VGh1bWJuYWlsVmlldy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CkBAIC0yMjcxLDggKzIyNjksNiBAQAogCQkxQTkwQzFFRDEyNjRGRDUwMDAzRTQ0RDQg
LyogV2ViRmluZE9wdGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2Vi
RmluZE9wdGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUE5MEMxRjIxMjY0
RkQ3MTAwM0U0NEQ0IC8qIEZpbmRDb250cm9sbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEZpbmRDb250cm9sbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTFBOTBDMUYzMTI2NEZENzEwMDNFNDRENCAvKiBGaW5kQ29udHJvbGxlci5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGaW5kQ29udHJvbGxlci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTFBOTBDMjM1MTI2NTA3MTcwMDNFNDRENCAvKiBQYWdlT3Zl
cmxheS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQYWdlT3ZlcmxheS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxQTkwQzIzNjEyNjUwNzE3MDAzRTQ0RDQgLyog
UGFnZU92ZXJsYXkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUGFn
ZU92ZXJsYXkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQTkxMDA2RjEyNjY3
NUMzMDAxODQyRjUgLyogRmluZEluZGljYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBGaW5kSW5kaWNhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFB
OTEwMDcwMTI2Njc1QzQwMDE4NDJGNSAvKiBGaW5kSW5kaWNhdG9yLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZpbmRJbmRpY2F0b3IuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkxQTkyREMxMDEyRjhCQTQ2MDAxN0FGNjUgLyogTGF5ZXJUcmVlQ29u
dGV4dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMYXllclRyZWVDb250ZXh0
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNTU4LDggKzI1NTQsNiBAQAogCQky
OUQ1NURGMDE2MUJGOUYxMDAzMUEyRTMgLyogV2ViUGFnZUdyb3VwUHJveHlNZXNzYWdlcy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJQYWdlR3JvdXBQcm94eU1lc3NhZ2Vz
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJEMTI1QzVDMTg1N0VBMDUwMDNCQTND
QiAvKiBWaWV3R2VzdHVyZUNvbnRyb2xsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gVmlld0dlc3R1cmVDb250cm9sbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTJEMTI1QzVEMTg1N0VBMDUwMDNCQTNDQiAvKiBWaWV3R2VzdHVyZUNvbnRyb2xsZXJNYWMu
bW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBWaWV3R2VzdHVyZUNv
bnRyb2xsZXJNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTJEMTQwRUFEMThG
MzdCRTAwMDVFNzVBMCAvKiBQYWdlT3ZlcmxheUNvbnRyb2xsZXIuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUGFnZU92ZXJsYXlDb250cm9sbGVyLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMkQxNDBFQUUxOEYzN0JFMDAwNUU3NUEwIC8qIFBhZ2VP
dmVybGF5Q29udHJvbGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQYWdl
T3ZlcmxheUNvbnRyb2xsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkQxQjVE
NUExODU4NjU5OTAwNkM2NTk2IC8qIFZpZXdHZXN0dXJlQ29udHJvbGxlci5tZXNzYWdlcy5pbiAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBh
dGggPSBWaWV3R2VzdHVyZUNvbnRyb2xsZXIubWVzc2FnZXMuaW47IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTJEMUI1RDVCMTg1ODY5QzgwMDZDNjU5NiAvKiBWaWV3R2VzdHVyZUNvbnRy
b2xsZXJNZXNzYWdlUmVjZWl2ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gVmlld0dlc3R1cmVDb250cm9sbGVyTWVzc2FnZVJlY2VpdmVyLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkQxQjVENUMxODU4NjlDODAwNkM2NTk2IC8qIFZpZXdHZXN0
dXJlQ29udHJvbGxlck1lc3NhZ2VzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFZpZXdHZXN0dXJlQ29udHJvbGxlck1lc3NhZ2VzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC0yNTgyLDYgKzI1NzYsOCBAQAogCQkyRDQyOUJGQjE3MjFFMkJBMDBFQzY4MUYgLyog
UERGUGx1Z2luUGFzc3dvcmRGaWVsZC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNw
cDsgbmFtZSA9IFBERlBsdWdpblBhc3N3b3JkRmllbGQubW07IHBhdGggPSBQREYvUERGUGx1Z2lu
UGFzc3dvcmRGaWVsZC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkQ0N0I1NkEx
ODEwNzE0RTAwM0EzQUVFIC8qIFJlbW90ZUxheWVyQmFja2luZ1N0b3JlLm1tICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmUubW07
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJENDdCNTZCMTgxMDcxNEUwMDNBM0FFRSAv
KiBSZW1vdGVMYXllckJhY2tpbmdTdG9yZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBSZW1vdGVMYXllckJhY2tpbmdTdG9yZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkyRDVDOUQwMzE5QzgxRDhGMDBCM0M1QzEgLyogV2ViUGFnZU92ZXJsYXkuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViUGFnZU92ZXJsYXkuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyRDVDOUQwNDE5QzgxRDhGMDBCM0M1QzEgLyogV2Vi
UGFnZU92ZXJsYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViUGFnZU92
ZXJsYXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkQ2QUI1M0YxOTJCMUM0QTAw
M0E5RkQxIC8qIFdLUERGUGFnZU51bWJlckluZGljYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBXS1BERlBhZ2VOdW1iZXJJbmRpY2F0b3IuaDsgcGF0aCA9IGlvcy9XS1BE
RlBhZ2VOdW1iZXJJbmRpY2F0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkQ2
QUI1NDAxOTJCMUM0QTAwM0E5RkQxIC8qIFdLUERGUGFnZU51bWJlckluZGljYXRvci5tbSAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IFdLUERGUGFnZU51bWJlckluZGlj
YXRvci5tbTsgcGF0aCA9IGlvcy9XS1BERlBhZ2VOdW1iZXJJbmRpY2F0b3IubW07IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJENkIzNzE5MThBOTY3QUQwMDQyQUU4MCAvKiBfV0tUaHVt
Ym5haWxWaWV3LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IF9XS1RodW1ibmFp
bFZpZXcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTU3MDEsMTAgKzU2OTcsOCBA
QAogCQkJCTFBOTBDMUYyMTI2NEZENzEwMDNFNDRENCAvKiBGaW5kQ29udHJvbGxlci5oICovLAog
CQkJCTdDMzg3NDMzMTcyRjU2MTUwMDFCRDg4QSAvKiBQYWdlQmFubmVyLmNwcCAqLywKIAkJCQk3
Q0Y0N0ZGOTE3Mjc1QzU3MDA4QUNCOTEgLyogUGFnZUJhbm5lci5oICovLAotCQkJCTFBOTBDMjM2
MTI2NTA3MTcwMDNFNDRENCAvKiBQYWdlT3ZlcmxheS5jcHAgKi8sCi0JCQkJMUE5MEMyMzUxMjY1
MDcxNzAwM0U0NEQ0IC8qIFBhZ2VPdmVybGF5LmggKi8sCi0JCQkJMkQxNDBFQUQxOEYzN0JFMDAw
NUU3NUEwIC8qIFBhZ2VPdmVybGF5Q29udHJvbGxlci5jcHAgKi8sCi0JCQkJMkQxNDBFQUUxOEYz
N0JFMDAwNUU3NUEwIC8qIFBhZ2VPdmVybGF5Q29udHJvbGxlci5oICovLAorCQkJCTJENUM5RDAz
MTlDODFEOEYwMEIzQzVDMSAvKiBXZWJQYWdlT3ZlcmxheS5jcHAgKi8sCisJCQkJMkQ1QzlEMDQx
OUM4MUQ4RjAwQjNDNUMxIC8qIFdlYlBhZ2VPdmVybGF5LmggKi8sCiAJCQkJNTE5MkQ1NzExOTYx
RkEyRjAwQ0QxOUFBIC8qIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIuaCAqLywKIAkJCQkyRDgx
OUI5OTE4NjI3NUIzMDAxRjAzRDEgLyogVmlld0dlc3R1cmVHZW9tZXRyeUNvbGxlY3Rvci5jcHAg
Ki8sCiAJCQkJMkQ4MTlCOUExODYyNzVCMzAwMUYwM0QxIC8qIFZpZXdHZXN0dXJlR2VvbWV0cnlD
b2xsZWN0b3IuaCAqLywKQEAgLTcwNDYsNiArNzA0MCw3IEBACiAJCQkJN0M4NUZEODAxOTM0MTY2
NTAwMDE3N0M0IC8qIFdlYlByZWZlcmVuY2VzS2V5cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTEy
RjU4OTcxMkE4ODM4ODAwNjI5NTMwIC8qIEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJveHkuaCBp
biBIZWFkZXJzICovLAogCQkJCTFBNDQ1QjlGMTg0RDVGQjUwMDRCMzQxNCAvKiBXS0NvbnRleHRJ
bmplY3RlZEJ1bmRsZUNsaWVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMkQ1QzlEMDYxOUM4MUQ4
RjAwQjNDNUMxIC8qIFdlYlBhZ2VPdmVybGF5LmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTJGNTg5
OTEyQTg4Mzg4MDA2Mjk1MzAgLyogQXV0aGVudGljYXRpb25EZWNpc2lvbkxpc3RlbmVyLmggaW4g
SGVhZGVycyAqLywKIAkJCQk1MThFOEVGOTE2QjIwOTFDMDBFOTE0MjkgLyogQXV0aGVudGljYXRp
b25NYW5hZ2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTJGNThBMzEyQTg4M0FEMDA2Mjk1MzAg
LyogQXV0aGVudGljYXRpb25NYW5hZ2VyTWVzc2FnZXMuaCBpbiBIZWFkZXJzICovLApAQCAtNzE1
Myw3ICs3MTQ4LDYgQEAKIAkJCQkxQUU1MkY5MjE5MjAxREE3MDBBMUZBMzcgLyogQVBJQ29udGV4
dENvbmZpZ3VyYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTdDMzYxRDczMTkyN0ZBMzYwMDM2
QTU5RCAvKiBXZWJTY3JpcHRNZXNzYWdlSGFuZGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTEw
NUZFNTQxOEQ3QjlERTAwOEY1N0E4IC8qIEVkaXRpbmdSYW5nZS5oIGluIEhlYWRlcnMgKi8sCi0J
CQkJMkQxNDBFQjAxOEYzN0JFMDAwNUU3NUEwIC8qIFBhZ2VPdmVybGF5Q29udHJvbGxlci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQkMxNzc1M0YxMThCQUJGMDAwN0Q5RTlBIC8qIEdlbmVyaWNDYWxs
YmFjay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzc5QTg3MzYxOEJCRkE0MzAwNTg4QUYyIC8qIF9X
S0FjdGl2YXRlZEVsZW1lbnRJbmZvSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMDZG
NDJGMTJEQkI5QjYwMDJENzhERSAvKiBHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdl
ci5oIGluIEhlYWRlcnMgKi8sCkBAIC03Mjc2LDcgKzcyNzAsNiBAQAogCQkJCTFBNUIxQzUxMTg5
ODYwNkYwMDRGQ0Y5QiAvKiBXS05hdmlnYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTdDRjQ3
RkZCMTcyNzVDNTcwMDhBQ0I5MSAvKiBQYWdlQmFubmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlC
QzZFREFBNjExMTI3MUM2MDBFNzY3OEIgLyogUGFnZUNsaWVudC5oIGluIEhlYWRlcnMgKi8sCi0J
CQkJMUE5MEMyMzcxMjY1MDcxNzAwM0U0NEQ0IC8qIFBhZ2VPdmVybGF5LmggaW4gSGVhZGVycyAq
LywKIAkJCQlDNTc0QTU4MTEyRTY2NjgxMDAyREZFOTggLyogUGFzdGVib2FyZFR5cGVzLmggaW4g
SGVhZGVycyAqLywKIAkJCQlFMTk1ODJEMzE1M0NCRkQ3MDBCNjA4NzUgLyogUERGS2l0SW1wb3J0
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFFMDBENEYxODJENkY1MDAwMDg3REQ3IC8qIFdLQnJv
d3NpbmdDb250ZXh0SGFuZGxlSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLApAQCAtODkyOCw3ICs4
OTIxLDYgQEAKIAkJCQk1MUUzNTFGNTE4MEY1Qzc1MDBFNTNCRTkgLyogV2ViSURCRmFjdG9yeUJh
Y2tlbmQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0MzODc0MzQxNzJGNTYxNTAwMUJEODhBIC8q
IFBhZ2VCYW5uZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0M2RDM3RkMxNzJGNTU1RjAwOUQy
ODQ3IC8qIFBhZ2VCYW5uZXJNYWMubW0gaW4gU291cmNlcyAqLywKLQkJCQkxQTkwQzIzODEyNjUw
NzE3MDAzRTQ0RDQgLyogUGFnZU92ZXJsYXkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQzU3NEE1
ODIxMkU2NjY4MTAwMkRGRTk4IC8qIFBhc3RlYm9hcmRUeXBlcy5tbSBpbiBTb3VyY2VzICovLAog
CQkJCUUxOTU4MkQ2MTUzQ0MwNTQwMEI2MDg3NSAvKiBQREZLaXRJbXBvcnRzLm1tIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMkQ4NzBEMTAxNjIzNEZGRTAwMEEzRjIwIC8qIFBERlBsdWdpbi5tbSBpbiBT
b3VyY2VzICovLApAQCAtOTEyOCw3ICs5MTIwLDYgQEAKIAkJCQlBNTQyOTNBNTE5NUE0M0REMDAy
NzgyQzcgLyogV0tJbnNwZWN0b3JOb2RlU2VhcmNoR2VzdHVyZVJlY29nbml6ZXIubW0gaW4gU291
cmNlcyAqLywKIAkJCQlDMDMzN0RBRTEyN0EyNEZFMDA4RkY0RjQgLyogV2ViRXZlbnQuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQkMwMzJEQkExMEY0MzgwRjAwNThDMTVBIC8qIFdlYkV2ZW50Q29u
dmVyc2lvbi5jcHAgaW4gU291cmNlcyAqLywKLQkJCQkyRDE0MEVBRjE4RjM3QkUwMDA1RTc1QTAg
LyogUGFnZU92ZXJsYXlDb250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDMTExQjVF
MTEyRjYyOTgwMDMzN0JBQiAvKiBXZWJFdmVudEZhY3RvcnkubW0gaW4gU291cmNlcyAqLywKIAkJ
CQlBMTE4QTlFRTE5MDdBRDZGMDBGN0M5MkIgLyogUXVpY2tMb29rRG9jdW1lbnREYXRhLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTFBM0REMUZEMTI1RTU5RjMwMDQ1MTVFNiAvKiBXZWJGaW5kQ2xp
ZW50LmNwcCBpbiBTb3VyY2VzICovLApAQCAtOTIxMiw2ICs5MjAzLDcgQEAKIAkJCQlDMDZDNjA5
NTEyNEMxNDRCMDAwMTY4MkYgLyogV2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVycy5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlDNTlDNEE1ODE4QjgxMTc0MDA3QkRDQjYgLyogQXNzaXN0ZWROb2RlSW5m
b3JtYXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM3QjYyMDcxMjlBMEE2NzAwRDE3NEE0
IC8qIFdlYlBhZ2VHcm91cC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkyRDVDOUQwNTE5QzgxRDhG
MDBCM0M1QzEgLyogV2ViUGFnZU92ZXJsYXkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM3QjYy
NTMxMkE0M0M5NjAwRDE3NEE0IC8qIFdlYlBhZ2VHcm91cERhdGEuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQkM3QjYyMTYxMkE0MjE5QTAwRDE3NEE0IC8qIFdlYlBhZ2VHcm91cFByb3h5LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTI5RDU1REYxMTYxQkY5RjEwMDMxQTJFMyAvKiBXZWJQYWdlR3Jv
dXBQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVBUElD
YXN0LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dL
QnVuZGxlQVBJQ2FzdC5oCmluZGV4IGU2MzU0MDguLjBkNWI3YzcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVBUElDYXN0
LmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9X
S0J1bmRsZUFQSUNhc3QuaApAQCAtNDksMTEgKzQ5LDExIEBAIGNsYXNzIEluamVjdGVkQnVuZGxl
Tm9kZUhhbmRsZTsKIGNsYXNzIEluamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGU7CiBjbGFzcyBJbmpl
Y3RlZEJ1bmRsZVNjcmlwdFdvcmxkOwogY2xhc3MgUGFnZUJhbm5lcjsKLWNsYXNzIFBhZ2VPdmVy
bGF5OwogY2xhc3MgV2ViRnJhbWU7CiBjbGFzcyBXZWJJbnNwZWN0b3I7CiBjbGFzcyBXZWJQYWdl
OwogY2xhc3MgV2ViUGFnZUdyb3VwUHJveHk7CitjbGFzcyBXZWJQYWdlT3ZlcmxheTsKIAogV0tf
QUREX0FQSV9NQVBQSU5HKFdLQnVuZGxlQmFja0ZvcndhcmRMaXN0SXRlbVJlZiwgSW5qZWN0ZWRC
dW5kbGVCYWNrRm9yd2FyZExpc3RJdGVtKQogV0tfQUREX0FQSV9NQVBQSU5HKFdLQnVuZGxlQmFj
a0ZvcndhcmRMaXN0UmVmLCBJbmplY3RlZEJ1bmRsZUJhY2tGb3J3YXJkTGlzdCkKQEAgLTY2LDcg
KzY2LDcgQEAgV0tfQUREX0FQSV9NQVBQSU5HKFdLQnVuZGxlTmF2aWdhdGlvbkFjdGlvblJlZiwg
SW5qZWN0ZWRCdW5kbGVOYXZpZ2F0aW9uQWN0aW9uKQogV0tfQUREX0FQSV9NQVBQSU5HKFdLQnVu
ZGxlTm9kZUhhbmRsZVJlZiwgSW5qZWN0ZWRCdW5kbGVOb2RlSGFuZGxlKQogV0tfQUREX0FQSV9N
QVBQSU5HKFdLQnVuZGxlUGFnZUJhbm5lclJlZiwgUGFnZUJhbm5lcikKIFdLX0FERF9BUElfTUFQ
UElORyhXS0J1bmRsZVBhZ2VHcm91cFJlZiwgV2ViUGFnZUdyb3VwUHJveHkpCi1XS19BRERfQVBJ
X01BUFBJTkcoV0tCdW5kbGVQYWdlT3ZlcmxheVJlZiwgUGFnZU92ZXJsYXkpCitXS19BRERfQVBJ
X01BUFBJTkcoV0tCdW5kbGVQYWdlT3ZlcmxheVJlZiwgV2ViUGFnZU92ZXJsYXkpCiBXS19BRERf
QVBJX01BUFBJTkcoV0tCdW5kbGVQYWdlUmVmLCBXZWJQYWdlKQogV0tfQUREX0FQSV9NQVBQSU5H
KFdLQnVuZGxlUmFuZ2VIYW5kbGVSZWYsIEluamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGUpCiBXS19B
RERfQVBJX01BUFBJTkcoV0tCdW5kbGVSZWYsIEluamVjdGVkQnVuZGxlKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZVBh
Z2UuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9X
S0J1bmRsZVBhZ2UuY3BwCmluZGV4IDIxMTRmNTguLjI5NDA1YjUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVQYWdlLmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dL
QnVuZGxlUGFnZS5jcHAKQEAgLTQ3LDEyICs0NywxNSBAQAogI2luY2x1ZGUgIldlYkZ1bGxTY3Jl
ZW5NYW5hZ2VyLmgiCiAjaW5jbHVkZSAiV2ViSW1hZ2UuaCIKICNpbmNsdWRlICJXZWJQYWdlLmgi
CisjaW5jbHVkZSAiV2ViUGFnZU92ZXJsYXkuaCIKICNpbmNsdWRlICJXZWJSZW5kZXJMYXllci5o
IgogI2luY2x1ZGUgIldlYlJlbmRlck9iamVjdC5oIgogI2luY2x1ZGUgPFdlYkNvcmUvQVhPYmpl
Y3RDYWNoZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvQWNjZXNzaWJpbGl0eU9iamVjdC5oPgogI2lu
Y2x1ZGUgPFdlYkNvcmUvTWFpbkZyYW1lLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9QYWdlLmg+Cisj
aW5jbHVkZSA8V2ViQ29yZS9QYWdlT3ZlcmxheS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUGFnZU92
ZXJsYXlDb250cm9sbGVyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9VUkwuaD4KICNpbmNsdWRlIDx3
dGYvU3RkTGliRXh0cmFzLmg+CiAKQEAgLTM1NCwyMiArMzU3LDIyIEBAIFdLQnVuZGxlQmFja0Zv
cndhcmRMaXN0UmVmIFdLQnVuZGxlUGFnZUdldEJhY2tGb3J3YXJkTGlzdChXS0J1bmRsZVBhZ2VS
ZWYgcGFnZVJlCiAKIHZvaWQgV0tCdW5kbGVQYWdlSW5zdGFsbFBhZ2VPdmVybGF5KFdLQnVuZGxl
UGFnZVJlZiBwYWdlUmVmLCBXS0J1bmRsZVBhZ2VPdmVybGF5UmVmIHBhZ2VPdmVybGF5UmVmKQog
ewotICAgIHRvSW1wbChwYWdlUmVmKS0+aW5zdGFsbFBhZ2VPdmVybGF5KHRvSW1wbChwYWdlT3Zl
cmxheVJlZikpOworICAgIHRvSW1wbChwYWdlUmVmKS0+Y29yZVBhZ2UoKS0+cGFnZU92ZXJsYXlD
b250cm9sbGVyKCkuaW5zdGFsbFBhZ2VPdmVybGF5KHRvSW1wbChwYWdlT3ZlcmxheVJlZiktPmNv
cmVPdmVybGF5KCksIFdlYkNvcmU6OlBhZ2VPdmVybGF5OjpGYWRlTW9kZTo6RG9Ob3RGYWRlKTsK
IH0KIAogdm9pZCBXS0J1bmRsZVBhZ2VVbmluc3RhbGxQYWdlT3ZlcmxheShXS0J1bmRsZVBhZ2VS
ZWYgcGFnZVJlZiwgV0tCdW5kbGVQYWdlT3ZlcmxheVJlZiBwYWdlT3ZlcmxheVJlZikKIHsKLSAg
ICB0b0ltcGwocGFnZVJlZiktPnVuaW5zdGFsbFBhZ2VPdmVybGF5KHRvSW1wbChwYWdlT3Zlcmxh
eVJlZikpOworICAgIHRvSW1wbChwYWdlUmVmKS0+Y29yZVBhZ2UoKS0+cGFnZU92ZXJsYXlDb250
cm9sbGVyKCkudW5pbnN0YWxsUGFnZU92ZXJsYXkodG9JbXBsKHBhZ2VPdmVybGF5UmVmKS0+Y29y
ZU92ZXJsYXkoKSwgV2ViQ29yZTo6UGFnZU92ZXJsYXk6OkZhZGVNb2RlOjpEb05vdEZhZGUpOwog
fQogCiB2b2lkIFdLQnVuZGxlUGFnZUluc3RhbGxQYWdlT3ZlcmxheVdpdGhBbmltYXRpb24oV0tC
dW5kbGVQYWdlUmVmIHBhZ2VSZWYsIFdLQnVuZGxlUGFnZU92ZXJsYXlSZWYgcGFnZU92ZXJsYXlS
ZWYpCiB7Ci0gICAgdG9JbXBsKHBhZ2VSZWYpLT5pbnN0YWxsUGFnZU92ZXJsYXkodG9JbXBsKHBh
Z2VPdmVybGF5UmVmKSwgUGFnZU92ZXJsYXk6OkZhZGVNb2RlOjpGYWRlKTsKKyAgICB0b0ltcGwo
cGFnZVJlZiktPmNvcmVQYWdlKCktPnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLmluc3RhbGxQYWdl
T3ZlcmxheSh0b0ltcGwocGFnZU92ZXJsYXlSZWYpLT5jb3JlT3ZlcmxheSgpLCBXZWJDb3JlOjpQ
YWdlT3ZlcmxheTo6RmFkZU1vZGU6OkZhZGUpOwogfQogCiB2b2lkIFdLQnVuZGxlUGFnZVVuaW5z
dGFsbFBhZ2VPdmVybGF5V2l0aEFuaW1hdGlvbihXS0J1bmRsZVBhZ2VSZWYgcGFnZVJlZiwgV0tC
dW5kbGVQYWdlT3ZlcmxheVJlZiBwYWdlT3ZlcmxheVJlZikKIHsKLSAgICB0b0ltcGwocGFnZVJl
ZiktPnVuaW5zdGFsbFBhZ2VPdmVybGF5KHRvSW1wbChwYWdlT3ZlcmxheVJlZiksIFBhZ2VPdmVy
bGF5OjpGYWRlTW9kZTo6RmFkZSk7CisgICAgdG9JbXBsKHBhZ2VSZWYpLT5jb3JlUGFnZSgpLT5w
YWdlT3ZlcmxheUNvbnRyb2xsZXIoKS51bmluc3RhbGxQYWdlT3ZlcmxheSh0b0ltcGwocGFnZU92
ZXJsYXlSZWYpLT5jb3JlT3ZlcmxheSgpLCBXZWJDb3JlOjpQYWdlT3ZlcmxheTo6RmFkZU1vZGU6
OkZhZGUpOwogfQogCiB2b2lkIFdLQnVuZGxlUGFnZVNldFRvcE92ZXJoYW5nSW1hZ2UoV0tCdW5k
bGVQYWdlUmVmIHBhZ2VSZWYsIFdLSW1hZ2VSZWYgaW1hZ2VSZWYpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlUGFnZU92
ZXJsYXkuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Yy9XS0J1bmRsZVBhZ2VPdmVybGF5LmNwcAppbmRleCBiYmE4NjI2Li40MTQyMGIzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVu
ZGxlUGFnZU92ZXJsYXkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVQYWdlT3ZlcmxheS5jcHAKQEAgLTI3LDEwICsyNywxNyBA
QAogI2luY2x1ZGUgIldLQnVuZGxlUGFnZU92ZXJsYXkuaCIKIAogI2luY2x1ZGUgIkFQSUNsaWVu
dC5oIgotI2luY2x1ZGUgIlBhZ2VPdmVybGF5LmgiCiAjaW5jbHVkZSAiV0tBUElDYXN0LmgiCisj
aW5jbHVkZSAiV0tBcnJheS5oIgogI2luY2x1ZGUgIldLQnVuZGxlQVBJQ2FzdC5oIgorI2luY2x1
ZGUgIldLTnVtYmVyLmgiCisjaW5jbHVkZSAiV0tSZXRhaW5QdHIuaCIKKyNpbmNsdWRlICJXS1No
YXJlZEFQSUNhc3QuaCIKKyNpbmNsdWRlICJXS1N0cmluZ1ByaXZhdGUuaCIKICNpbmNsdWRlIDxX
ZWJDb3JlL0dyYXBoaWNzQ29udGV4dC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUGFnZU92ZXJsYXku
aD4KKyNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtTW91c2VFdmVudC5oPgorI2luY2x1ZGUgPFdl
YktpdC9XZWJQYWdlT3ZlcmxheS5oPgogCiBuYW1lc3BhY2UgQVBJIHsKIApAQCAtNDcsNyArNTQs
NyBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBDbGllbnRUcmFpdHM8V0tCdW5kbGVQYWdlT3ZlcmxheUFj
Y2Vzc2liaWxpdHlDbGllbnRCYXNlPiB7CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIHVzaW5n
IG5hbWVzcGFjZSBXZWJLaXQ7CiAKLWNsYXNzIFBhZ2VPdmVybGF5Q2xpZW50SW1wbCA6IEFQSTo6
Q2xpZW50PFdLQnVuZGxlUGFnZU92ZXJsYXlDbGllbnRCYXNlPiwgcHVibGljIFBhZ2VPdmVybGF5
OjpDbGllbnQgeworY2xhc3MgUGFnZU92ZXJsYXlDbGllbnRJbXBsIDogQVBJOjpDbGllbnQ8V0tC
dW5kbGVQYWdlT3ZlcmxheUNsaWVudEJhc2U+LCBwdWJsaWMgV2ViUGFnZU92ZXJsYXk6OkNsaWVu
dCB7CiBwdWJsaWM6CiAgICAgZXhwbGljaXQgUGFnZU92ZXJsYXlDbGllbnRJbXBsKFdLQnVuZGxl
UGFnZU92ZXJsYXlDbGllbnRCYXNlKiBjbGllbnQpCiAgICAgewpAQCAtNjAsNjQgKzY3LDY0IEBA
IHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgLy8gUGFnZU92ZXJsYXk6OkNsaWVudC4K
LSAgICB2aXJ0dWFsIHZvaWQgcGFnZU92ZXJsYXlEZXN0cm95ZWQoUGFnZU92ZXJsYXkqKQorICAg
IC8vIFdlYlBhZ2VPdmVybGF5OjpDbGllbnQuCisgICAgdmlydHVhbCB2b2lkIHBhZ2VPdmVybGF5
RGVzdHJveWVkKFdlYlBhZ2VPdmVybGF5Jikgb3ZlcnJpZGUKICAgICB7CiAgICAgICAgIGRlbGV0
ZSB0aGlzOwogICAgIH0KIAotICAgIHZpcnR1YWwgdm9pZCB3aWxsTW92ZVRvV2ViUGFnZShQYWdl
T3ZlcmxheSogcGFnZU92ZXJsYXksIFdlYlBhZ2UqIHBhZ2UpCisgICAgdmlydHVhbCB2b2lkIHdp
bGxNb3ZlVG9QYWdlKFdlYlBhZ2VPdmVybGF5JiBwYWdlT3ZlcmxheSwgV2ViUGFnZSogcGFnZSkg
b3ZlcnJpZGUKICAgICB7CiAgICAgICAgIGlmICghbV9jbGllbnQud2lsbE1vdmVUb1BhZ2UpCiAg
ICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgbV9jbGllbnQud2lsbE1vdmVUb1BhZ2UodG9B
UEkocGFnZU92ZXJsYXkpLCB0b0FQSShwYWdlKSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsK
KyAgICAgICAgbV9jbGllbnQud2lsbE1vdmVUb1BhZ2UodG9BUEkoJnBhZ2VPdmVybGF5KSwgdG9B
UEkocGFnZSksIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7CiAgICAgfQogICAgIAotICAgIHZp
cnR1YWwgdm9pZCBkaWRNb3ZlVG9XZWJQYWdlKFBhZ2VPdmVybGF5KiBwYWdlT3ZlcmxheSwgV2Vi
UGFnZSogcGFnZSkKKyAgICB2aXJ0dWFsIHZvaWQgZGlkTW92ZVRvUGFnZShXZWJQYWdlT3Zlcmxh
eSYgcGFnZU92ZXJsYXksIFdlYlBhZ2UqIHBhZ2UpIG92ZXJyaWRlCiAgICAgewogICAgICAgICBp
ZiAoIW1fY2xpZW50LmRpZE1vdmVUb1BhZ2UpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAg
ICAgbV9jbGllbnQuZGlkTW92ZVRvUGFnZSh0b0FQSShwYWdlT3ZlcmxheSksIHRvQVBJKHBhZ2Up
LCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pOworICAgICAgICBtX2NsaWVudC5kaWRNb3ZlVG9Q
YWdlKHRvQVBJKCZwYWdlT3ZlcmxheSksIHRvQVBJKHBhZ2UpLCBtX2NsaWVudC5iYXNlLmNsaWVu
dEluZm8pOwogICAgIH0KIAotICAgIHZpcnR1YWwgdm9pZCBkcmF3UmVjdChQYWdlT3ZlcmxheSog
cGFnZU92ZXJsYXksIEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBJbnRS
ZWN0JiBkaXJ0eVJlY3QpCisgICAgdmlydHVhbCB2b2lkIGRyYXdSZWN0KFdlYlBhZ2VPdmVybGF5
JiBwYWdlT3ZlcmxheSwgR3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQsIGNvbnN0IElu
dFJlY3QmIGRpcnR5UmVjdCkgb3ZlcnJpZGUKICAgICB7CiAgICAgICAgIGlmICghbV9jbGllbnQu
ZHJhd1JlY3QpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgbV9jbGllbnQuZHJhd1Jl
Y3QodG9BUEkocGFnZU92ZXJsYXkpLCBncmFwaGljc0NvbnRleHQucGxhdGZvcm1Db250ZXh0KCks
IHRvQVBJKGRpcnR5UmVjdCksIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7CisgICAgICAgIG1f
Y2xpZW50LmRyYXdSZWN0KHRvQVBJKCZwYWdlT3ZlcmxheSksIGdyYXBoaWNzQ29udGV4dC5wbGF0
Zm9ybUNvbnRleHQoKSwgdG9BUEkoZGlydHlSZWN0KSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZv
KTsKICAgICB9CiAgICAgCi0gICAgdmlydHVhbCBib29sIG1vdXNlRXZlbnQoUGFnZU92ZXJsYXkq
IHBhZ2VPdmVybGF5LCBjb25zdCBXZWJNb3VzZUV2ZW50JiBldmVudCkKKyAgICB2aXJ0dWFsIGJv
b2wgbW91c2VFdmVudChXZWJQYWdlT3ZlcmxheSYgcGFnZU92ZXJsYXksIGNvbnN0IFBsYXRmb3Jt
TW91c2VFdmVudCYgZXZlbnQpIG92ZXJyaWRlCiAgICAgewogICAgICAgICBzd2l0Y2ggKGV2ZW50
LnR5cGUoKSkgewotICAgICAgICBjYXNlIFdlYkV2ZW50OjpNb3VzZURvd246IHsKKyAgICAgICAg
Y2FzZSBQbGF0Zm9ybU1vdXNlRXZlbnQ6OlR5cGU6Ok1vdXNlUHJlc3NlZDogewogICAgICAgICAg
ICAgaWYgKCFtX2NsaWVudC5tb3VzZURvd24pCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgICAgICAgICByZXR1cm4gbV9jbGllbnQubW91c2VEb3duKHRvQVBJKHBhZ2VPdmVy
bGF5KSwgdG9BUEkoZXZlbnQucG9zaXRpb24oKSksIHRvQVBJKGV2ZW50LmJ1dHRvbigpKSwgbV9j
bGllbnQuYmFzZS5jbGllbnRJbmZvKTsKKyAgICAgICAgICAgIHJldHVybiBtX2NsaWVudC5tb3Vz
ZURvd24odG9BUEkoJnBhZ2VPdmVybGF5KSwgdG9BUEkoZXZlbnQucG9zaXRpb24oKSksIHRvQVBJ
KGV2ZW50LmJ1dHRvbigpKSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKICAgICAgICAgfQot
ICAgICAgICBjYXNlIFdlYkV2ZW50OjpNb3VzZVVwOiB7CisgICAgICAgIGNhc2UgUGxhdGZvcm1N
b3VzZUV2ZW50OjpUeXBlOjpNb3VzZVJlbGVhc2VkOiB7CiAgICAgICAgICAgICBpZiAoIW1fY2xp
ZW50Lm1vdXNlVXApCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgICAg
ICByZXR1cm4gbV9jbGllbnQubW91c2VVcCh0b0FQSShwYWdlT3ZlcmxheSksIHRvQVBJKGV2ZW50
LnBvc2l0aW9uKCkpLCB0b0FQSShldmVudC5idXR0b24oKSksIG1fY2xpZW50LmJhc2UuY2xpZW50
SW5mbyk7CisgICAgICAgICAgICByZXR1cm4gbV9jbGllbnQubW91c2VVcCh0b0FQSSgmcGFnZU92
ZXJsYXkpLCB0b0FQSShldmVudC5wb3NpdGlvbigpKSwgdG9BUEkoZXZlbnQuYnV0dG9uKCkpLCBt
X2NsaWVudC5iYXNlLmNsaWVudEluZm8pOwogICAgICAgICB9Ci0gICAgICAgIGNhc2UgV2ViRXZl
bnQ6Ok1vdXNlTW92ZTogewotICAgICAgICAgICAgaWYgKGV2ZW50LmJ1dHRvbigpID09IFdlYk1v
dXNlRXZlbnQ6Ok5vQnV0dG9uKSB7CisgICAgICAgIGNhc2UgUGxhdGZvcm1Nb3VzZUV2ZW50OjpU
eXBlOjpNb3VzZU1vdmVkOiB7CisgICAgICAgICAgICBpZiAoZXZlbnQuYnV0dG9uKCkgPT0gTW91
c2VCdXR0b246Ok5vQnV0dG9uKSB7CiAgICAgICAgICAgICAgICAgaWYgKCFtX2NsaWVudC5tb3Vz
ZU1vdmVkKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgICAg
ICAgICByZXR1cm4gbV9jbGllbnQubW91c2VNb3ZlZCh0b0FQSShwYWdlT3ZlcmxheSksIHRvQVBJ
KGV2ZW50LnBvc2l0aW9uKCkpLCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pOworICAgICAgICAg
ICAgICAgIHJldHVybiBtX2NsaWVudC5tb3VzZU1vdmVkKHRvQVBJKCZwYWdlT3ZlcmxheSksIHRv
QVBJKGV2ZW50LnBvc2l0aW9uKCkpLCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pOwogICAgICAg
ICAgICAgfQogCiAgICAgICAgICAgICAvLyBUaGlzIGlzIGEgTW91c2VNb3ZlIGV2ZW50IHdpdGgg
YSBtb3VzZSBidXR0b24gcHJlc3NlZC4gQ2FsbCBtb3VzZURyYWdnZWQuCiAgICAgICAgICAgICBp
ZiAoIW1fY2xpZW50Lm1vdXNlRHJhZ2dlZCkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICAgICAgICAgIHJldHVybiBtX2NsaWVudC5tb3VzZURyYWdnZWQodG9BUEkocGFnZU92
ZXJsYXkpLCB0b0FQSShldmVudC5wb3NpdGlvbigpKSwgdG9BUEkoZXZlbnQuYnV0dG9uKCkpLCBt
X2NsaWVudC5iYXNlLmNsaWVudEluZm8pOworICAgICAgICAgICAgcmV0dXJuIG1fY2xpZW50Lm1v
dXNlRHJhZ2dlZCh0b0FQSSgmcGFnZU92ZXJsYXkpLCB0b0FQSShldmVudC5wb3NpdGlvbigpKSwg
dG9BUEkoZXZlbnQuYnV0dG9uKCkpLCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pOwogICAgICAg
ICB9CiAKICAgICAgICAgZGVmYXVsdDoKQEAgLTEyNSwxOCArMTMyLDQzIEBAIHByaXZhdGU6CiAg
ICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgdmlydHVhbCBXS1R5cGVSZWYgY29weUFjY2Vzc2li
aWxpdHlBdHRyaWJ1dGVWYWx1ZShQYWdlT3ZlcmxheSogcGFnZU92ZXJsYXksIFdLU3RyaW5nUmVm
IGF0dHJpYnV0ZSwgV0tUeXBlUmVmIHBhcmFtZXRlcikKKyAgICB2aXJ0dWFsIGJvb2wgY29weUFj
Y2Vzc2liaWxpdHlBdHRyaWJ1dGVTdHJpbmdWYWx1ZUZvclBvaW50KFdlYlBhZ2VPdmVybGF5JiBw
YWdlT3ZlcmxheSwgU3RyaW5nIGF0dHJpYnV0ZSwgV2ViQ29yZTo6RmxvYXRQb2ludCBwYXJhbWV0
ZXIsIFN0cmluZyYgdmFsdWUpIG92ZXJyaWRlCiAgICAgewogICAgICAgICBpZiAoIW1fYWNjZXNz
aWJpbGl0eUNsaWVudC5jbGllbnQoKS5jb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlKQot
ICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIHJldHVybiBtX2FjY2Vzc2liaWxpdHlDbGll
bnQuY2xpZW50KCkuY29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZSh0b0FQSShwYWdlT3Zl
cmxheSksIGF0dHJpYnV0ZSwgcGFyYW1ldGVyLCBtX2FjY2Vzc2liaWxpdHlDbGllbnQuY2xpZW50
KCkuYmFzZS5jbGllbnRJbmZvKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
V0tSZXRhaW5QdHI8V0tUeXBlUmVmPiB3a1R5cGUgPSBtX2FjY2Vzc2liaWxpdHlDbGllbnQuY2xp
ZW50KCkuY29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZSh0b0FQSSgmcGFnZU92ZXJsYXkp
LCB0b0NvcGllZEFQSShhdHRyaWJ1dGUpLCBXS1BvaW50Q3JlYXRlKFdLUG9pbnRNYWtlKHBhcmFt
ZXRlci54KCksIHBhcmFtZXRlci55KCkpKSwgbV9hY2Nlc3NpYmlsaXR5Q2xpZW50LmNsaWVudCgp
LmJhc2UuY2xpZW50SW5mbyk7CisgICAgICAgIGlmICh0b0ltcGwod2tUeXBlLmdldCgpKS0+dHlw
ZSgpICE9IEFQSTo6U3RyaW5nOjpBUElUeXBlKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB2YWx1ZSA9IHRvV1RGU3RyaW5nKHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPih3a1R5
cGUuZ2V0KCkpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgdmlydHVhbCBi
b29sIGNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlQm9vbFZhbHVlRm9yUG9pbnQoV2ViUGFnZU92
ZXJsYXkmIHBhZ2VPdmVybGF5LCBTdHJpbmcgYXR0cmlidXRlLCBXZWJDb3JlOjpGbG9hdFBvaW50
IHBhcmFtZXRlciwgYm9vbCYgdmFsdWUpIG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoIW1f
YWNjZXNzaWJpbGl0eUNsaWVudC5jbGllbnQoKS5jb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZh
bHVlKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBXS1JldGFpblB0cjxXS1R5
cGVSZWY+IHdrVHlwZSA9IG1fYWNjZXNzaWJpbGl0eUNsaWVudC5jbGllbnQoKS5jb3B5QWNjZXNz
aWJpbGl0eUF0dHJpYnV0ZVZhbHVlKHRvQVBJKCZwYWdlT3ZlcmxheSksIHRvQ29waWVkQVBJKGF0
dHJpYnV0ZSksIFdLUG9pbnRDcmVhdGUoV0tQb2ludE1ha2UocGFyYW1ldGVyLngoKSwgcGFyYW1l
dGVyLnkoKSkpLCBtX2FjY2Vzc2liaWxpdHlDbGllbnQuY2xpZW50KCkuYmFzZS5jbGllbnRJbmZv
KTsKKyAgICAgICAgaWYgKHRvSW1wbCh3a1R5cGUuZ2V0KCkpLT50eXBlKCkgIT0gQVBJOjpCb29s
ZWFuOjpBUElUeXBlKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB2YWx1ZSA9
IFdLQm9vbGVhbkdldFZhbHVlKHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4od2tUeXBlLmdldCgp
KSk7CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIHZpcnR1YWwgV0tBcnJheVJl
ZiBjb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZU5hbWVzKFBhZ2VPdmVybGF5KiBwYWdlT3Zlcmxh
eSwgYm9vbCBwYXJhbWVyaXplZE5hbWVzKQorICAgIHZpcnR1YWwgVmVjdG9yPFN0cmluZz4gY29w
eUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVOYW1lcyhXZWJQYWdlT3ZlcmxheSYgcGFnZU92ZXJsYXks
IGJvb2wgcGFyYW1lcml6ZWROYW1lcykgb3ZlcnJpZGUKICAgICB7CisgICAgICAgIFZlY3RvcjxT
dHJpbmc+IG5hbWVzOwogICAgICAgICBpZiAoIW1fYWNjZXNzaWJpbGl0eUNsaWVudC5jbGllbnQo
KS5jb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZU5hbWVzKQotICAgICAgICAgICAgcmV0dXJuIDA7
Ci0gICAgICAgIHJldHVybiBtX2FjY2Vzc2liaWxpdHlDbGllbnQuY2xpZW50KCkuY29weUFjY2Vz
c2liaWxpdHlBdHRyaWJ1dGVOYW1lcyh0b0FQSShwYWdlT3ZlcmxheSksIHBhcmFtZXJpemVkTmFt
ZXMsIG1fYWNjZXNzaWJpbGl0eUNsaWVudC5jbGllbnQoKS5iYXNlLmNsaWVudEluZm8pOworICAg
ICAgICAgICAgcmV0dXJuIG5hbWVzOworICAgICAgICBXS1JldGFpblB0cjxXS0FycmF5UmVmPiB3
a05hbWVzID0gbV9hY2Nlc3NpYmlsaXR5Q2xpZW50LmNsaWVudCgpLmNvcHlBY2Nlc3NpYmlsaXR5
QXR0cmlidXRlTmFtZXModG9BUEkoJnBhZ2VPdmVybGF5KSwgcGFyYW1lcml6ZWROYW1lcywgbV9h
Y2Nlc3NpYmlsaXR5Q2xpZW50LmNsaWVudCgpLmJhc2UuY2xpZW50SW5mbyk7CisKKyAgICAgICAg
c2l6ZV90IGNvdW50ID0gV0tBcnJheUdldFNpemUod2tOYW1lcy5nZXQoKSk7CisgICAgICAgIGZv
ciAoc2l6ZV90IGsgPSAwOyBrIDwgY291bnQ7IGsrKykgeworICAgICAgICAgICAgV0tUeXBlUmVm
IGl0ZW0gPSBXS0FycmF5R2V0SXRlbUF0SW5kZXgod2tOYW1lcy5nZXQoKSwgayk7CisgICAgICAg
ICAgICBpZiAodG9JbXBsKGl0ZW0pLT50eXBlKCkgPT0gQVBJOjpTdHJpbmc6OkFQSVR5cGUpCisg
ICAgICAgICAgICAgICAgbmFtZXMuYXBwZW5kKHRvV1RGU3RyaW5nKHN0YXRpY19jYXN0PFdLU3Ry
aW5nUmVmPihpdGVtKSkpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIG5hbWVzOwogICAg
IH0KICAgICAKICAgICBBUEk6OkNsaWVudDxXS0J1bmRsZVBhZ2VPdmVybGF5QWNjZXNzaWJpbGl0
eUNsaWVudEJhc2U+IG1fYWNjZXNzaWJpbGl0eUNsaWVudDsKQEAgLTE0NCw3ICsxNzYsNyBAQCBw
cml2YXRlOgogCiBXS1R5cGVJRCBXS0J1bmRsZVBhZ2VPdmVybGF5R2V0VHlwZUlEKCkKIHsKLSAg
ICByZXR1cm4gdG9BUEkoUGFnZU92ZXJsYXk6OkFQSVR5cGUpOworICAgIHJldHVybiB0b0FQSShX
ZWJQYWdlT3ZlcmxheTo6QVBJVHlwZSk7CiB9CiAKIFdLQnVuZGxlUGFnZU92ZXJsYXlSZWYgV0tC
dW5kbGVQYWdlT3ZlcmxheUNyZWF0ZShXS0J1bmRsZVBhZ2VPdmVybGF5Q2xpZW50QmFzZSogd2tD
bGllbnQpCkBAIC0xNTUsMTQgKzE4NywxNCBAQCBXS0J1bmRsZVBhZ2VPdmVybGF5UmVmIFdLQnVu
ZGxlUGFnZU92ZXJsYXlDcmVhdGUoV0tCdW5kbGVQYWdlT3ZlcmxheUNsaWVudEJhc2UqCiAgICAg
YXV0byBjbGllbnRJbXBsID0gc3RkOjptYWtlX3VuaXF1ZTxQYWdlT3ZlcmxheUNsaWVudEltcGw+
KHdrQ2xpZW50KTsKIAogICAgIC8vIEZJWE1FOiBMb29rcyBsaWtlIHRoaXMgbGVha3MgdGhlIGNs
aWVudEltcGwuCi0gICAgcmV0dXJuIHRvQVBJKFBhZ2VPdmVybGF5OjpjcmVhdGUoY2xpZW50SW1w
bC5yZWxlYXNlKCkpLmxlYWtSZWYoKSk7CisgICAgcmV0dXJuIHRvQVBJKFdlYlBhZ2VPdmVybGF5
OjpjcmVhdGUoKmNsaWVudEltcGwucmVsZWFzZSgpKS5sZWFrUmVmKCkpOwogfQogCiB2b2lkIFdL
QnVuZGxlUGFnZU92ZXJsYXlTZXRBY2Nlc3NpYmlsaXR5Q2xpZW50KFdLQnVuZGxlUGFnZU92ZXJs
YXlSZWYgYnVuZGxlUGFnZU92ZXJsYXlSZWYsIFdLQnVuZGxlUGFnZU92ZXJsYXlBY2Nlc3NpYmls
aXR5Q2xpZW50QmFzZSogY2xpZW50KQogewogICAgIGlmIChjbGllbnQgJiYgY2xpZW50LT52ZXJz
aW9uKQogICAgICAgICByZXR1cm47Ci0gICAgc3RhdGljX2Nhc3Q8UGFnZU92ZXJsYXlDbGllbnRJ
bXBsKj4odG9JbXBsKGJ1bmRsZVBhZ2VPdmVybGF5UmVmKS0+Y2xpZW50KCkpLT5zZXRBY2Nlc3Np
YmlsaXR5Q2xpZW50KGNsaWVudCk7CisgICAgc3RhdGljX2Nhc3Q8UGFnZU92ZXJsYXlDbGllbnRJ
bXBsKj4oJnRvSW1wbChidW5kbGVQYWdlT3ZlcmxheVJlZiktPmNsaWVudCgpKS0+c2V0QWNjZXNz
aWJpbGl0eUNsaWVudChjbGllbnQpOwogfQogCiB2b2lkIFdLQnVuZGxlUGFnZU92ZXJsYXlTZXRO
ZWVkc0Rpc3BsYXkoV0tCdW5kbGVQYWdlT3ZlcmxheVJlZiBidW5kbGVQYWdlT3ZlcmxheVJlZiwg
V0tSZWN0IHJlY3QpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNv
cmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAKaW5kZXggY2RlY2JkYS4uYjZhMjkx
MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9X
ZWJDaHJvbWVDbGllbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29y
ZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcApAQCAtODQwLDcgKzg0MCw5IEBAIFBhc3NSZWZQ
dHI8V2ViQ29yZTo6U2VhcmNoUG9wdXBNZW51PiBXZWJDaHJvbWVDbGllbnQ6OmNyZWF0ZVNlYXJj
aFBvcHVwTWVudShXZWJDCiAKIEdyYXBoaWNzTGF5ZXJGYWN0b3J5KiBXZWJDaHJvbWVDbGllbnQ6
OmdyYXBoaWNzTGF5ZXJGYWN0b3J5KCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9wYWdlLT5kcmF3
aW5nQXJlYSgpLT5ncmFwaGljc0xheWVyRmFjdG9yeSgpOworICAgIGlmIChhdXRvIGRyYXdpbmdB
cmVhID0gbV9wYWdlLT5kcmF3aW5nQXJlYSgpKQorICAgICAgICByZXR1cm4gZHJhd2luZ0FyZWEt
PmdyYXBoaWNzTGF5ZXJGYWN0b3J5KCk7CisgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKICNpZiBV
U0UoUkVRVUVTVF9BTklNQVRJT05fRlJBTUVfRElTUExBWV9NT05JVE9SKQpAQCAtODU4LDEyICs4
NjAsMTAgQEAgdm9pZCBXZWJDaHJvbWVDbGllbnQ6OmF0dGFjaFJvb3RHcmFwaGljc0xheWVyKEZy
YW1lKiwgR3JhcGhpY3NMYXllciogbGF5ZXIpCiAgICAgICAgIG1fcGFnZS0+ZXhpdEFjY2VsZXJh
dGVkQ29tcG9zaXRpbmdNb2RlKCk7CiB9CiAKLUdyYXBoaWNzTGF5ZXIqIFdlYkNocm9tZUNsaWVu
dDo6ZG9jdW1lbnRPdmVybGF5TGF5ZXJGb3JGcmFtZShGcmFtZSYgZnJhbWUpCit2b2lkIFdlYkNo
cm9tZUNsaWVudDo6YXR0YWNoVmlld092ZXJsYXlHcmFwaGljc0xheWVyKEZyYW1lKiBmcmFtZSwg
R3JhcGhpY3NMYXllciogZ3JhcGhpY3NMYXllcikKIHsKLSAgICBpZiAoJmZyYW1lID09ICZtX3Bh
Z2UtPmNvcmVQYWdlKCktPm1haW5GcmFtZSgpKQotICAgICAgICByZXR1cm4gbV9wYWdlLT5wYWdl
T3ZlcmxheUNvbnRyb2xsZXIoKS5kb2N1bWVudE92ZXJsYXlSb290TGF5ZXIoKTsKLQotICAgIHJl
dHVybiBudWxscHRyOworICAgIGlmIChhdXRvIGRyYXdpbmdBcmVhID0gbV9wYWdlLT5kcmF3aW5n
QXJlYSgpKQorICAgICAgICBkcmF3aW5nQXJlYS0+YXR0YWNoVmlld092ZXJsYXlHcmFwaGljc0xh
eWVyKGZyYW1lLCBncmFwaGljc0xheWVyKTsKIH0KIAogdm9pZCBXZWJDaHJvbWVDbGllbnQ6OnNl
dE5lZWRzT25lU2hvdERyYXdpbmdTeW5jaHJvbml6YXRpb24oKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaCBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgK
aW5kZXggYjlkYzMyZS4uZjVjNWIyNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oCkBAIC0yMTUsMTAg
KzIxNSwxMCBAQCBwcml2YXRlOgogCiAgICAgdmlydHVhbCBXZWJDb3JlOjpHcmFwaGljc0xheWVy
RmFjdG9yeSogZ3JhcGhpY3NMYXllckZhY3RvcnkoKSBjb25zdCBvdmVycmlkZTsKICAgICB2aXJ0
dWFsIHZvaWQgYXR0YWNoUm9vdEdyYXBoaWNzTGF5ZXIoV2ViQ29yZTo6RnJhbWUqLCBXZWJDb3Jl
OjpHcmFwaGljc0xheWVyKikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGF0dGFjaFZpZXdP
dmVybGF5R3JhcGhpY3NMYXllcihXZWJDb3JlOjpGcmFtZSosIFdlYkNvcmU6OkdyYXBoaWNzTGF5
ZXIqKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNPbmVTaG90RHJhd2luZ1N5
bmNocm9uaXphdGlvbigpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBzY2hlZHVsZUNvbXBv
c2l0aW5nTGF5ZXJGbHVzaCgpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgYm9vbCBhZGp1c3RMYXll
ckZsdXNoVGhyb3R0bGluZyhXZWJDb3JlOjpMYXllckZsdXNoVGhyb3R0bGVTdGF0ZTo6RmxhZ3Mp
IG92ZXJyaWRlOwotICAgIHZpcnR1YWwgV2ViQ29yZTo6R3JhcGhpY3NMYXllciogZG9jdW1lbnRP
dmVybGF5TGF5ZXJGb3JGcmFtZShXZWJDb3JlOjpGcmFtZSYpIG92ZXJyaWRlOwogCiAjaWYgVVNF
KFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FX0RJU1BMQVlfTU9OSVRPUikKICAgICB2aXJ0dWFsIFBh
c3NSZWZQdHI8V2ViQ29yZTo6RGlzcGxheVJlZnJlc2hNb25pdG9yPiBjcmVhdGVEaXNwbGF5UmVm
cmVzaE1vbml0b3IoUGxhdGZvcm1EaXNwbGF5SUQpIGNvbnN0IG92ZXJyaWRlOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JD
bGllbnQuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJJ
bnNwZWN0b3JDbGllbnQuY3BwCmluZGV4IDg1OTM1OGIuLjg4ZWIyZGEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYklu
c3BlY3RvckNsaWVudC5jcHAKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJXZWJQYWdlLmgi
CiAjaW5jbHVkZSA8V2ViQ29yZS9JbnNwZWN0b3JDb250cm9sbGVyLmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9QYWdlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9QYWdlT3ZlcmxheUNvbnRyb2xsZXIuaD4K
ICNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KIAogI2lmIFBMQVRGT1JNKElPUykKQEAgLTcz
LDcgKzc0LDcgQEAgV2ViSW5zcGVjdG9yQ2xpZW50Ojp+V2ViSW5zcGVjdG9yQ2xpZW50KCkKICAg
ICB9CiAKICAgICBpZiAobV9wYWludFJlY3RPdmVybGF5KQotICAgICAgICBtX3BhZ2UtPnVuaW5z
dGFsbFBhZ2VPdmVybGF5KG1fcGFpbnRSZWN0T3ZlcmxheS5nZXQoKSk7CisgICAgICAgIG1fcGFn
ZS0+Y29yZVBhZ2UoKS0+cGFnZU92ZXJsYXlDb250cm9sbGVyKCkudW5pbnN0YWxsUGFnZU92ZXJs
YXkobV9wYWludFJlY3RPdmVybGF5LmdldCgpLCBQYWdlT3ZlcmxheTo6RmFkZU1vZGU6OkZhZGUp
OwogfQogCiB2b2lkIFdlYkluc3BlY3RvckNsaWVudDo6aW5zcGVjdG9yRGVzdHJveWVkKCkKQEAg
LTExMSw5ICsxMTIsOSBAQCB2b2lkIFdlYkluc3BlY3RvckNsaWVudDo6aGlnaGxpZ2h0KCkKIHsK
ICNpZiAhUExBVEZPUk0oSU9TKQogICAgIGlmICghbV9oaWdobGlnaHRPdmVybGF5KSB7Ci0gICAg
ICAgIFJlZlB0cjxQYWdlT3ZlcmxheT4gaGlnaGxpZ2h0T3ZlcmxheSA9IFBhZ2VPdmVybGF5Ojpj
cmVhdGUodGhpcyk7CisgICAgICAgIFJlZlB0cjxQYWdlT3ZlcmxheT4gaGlnaGxpZ2h0T3Zlcmxh
eSA9IFBhZ2VPdmVybGF5OjpjcmVhdGUoKnRoaXMpOwogICAgICAgICBtX2hpZ2hsaWdodE92ZXJs
YXkgPSBoaWdobGlnaHRPdmVybGF5LmdldCgpOwotICAgICAgICBtX3BhZ2UtPmluc3RhbGxQYWdl
T3ZlcmxheShoaWdobGlnaHRPdmVybGF5LnJlbGVhc2UoKSwgUGFnZU92ZXJsYXk6OkZhZGVNb2Rl
OjpGYWRlKTsKKyAgICAgICAgbV9wYWdlLT5jb3JlUGFnZSgpLT5wYWdlT3ZlcmxheUNvbnRyb2xs
ZXIoKS5pbnN0YWxsUGFnZU92ZXJsYXkoaGlnaGxpZ2h0T3ZlcmxheS5yZWxlYXNlKCksIFBhZ2VP
dmVybGF5OjpGYWRlTW9kZTo6RmFkZSk7CiAgICAgICAgIG1faGlnaGxpZ2h0T3ZlcmxheS0+c2V0
TmVlZHNEaXNwbGF5KCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgbV9oaWdobGlnaHRPdmVybGF5
LT5zdG9wRmFkZU91dEFuaW1hdGlvbigpOwpAQCAtMTMwLDcgKzEzMSw3IEBAIHZvaWQgV2ViSW5z
cGVjdG9yQ2xpZW50OjpoaWRlSGlnaGxpZ2h0KCkKIHsKICNpZiAhUExBVEZPUk0oSU9TKQogICAg
IGlmIChtX2hpZ2hsaWdodE92ZXJsYXkpCi0gICAgICAgIG1fcGFnZS0+dW5pbnN0YWxsUGFnZU92
ZXJsYXkobV9oaWdobGlnaHRPdmVybGF5LCBQYWdlT3ZlcmxheTo6RmFkZU1vZGU6OkZhZGUpOwor
ICAgICAgICBtX3BhZ2UtPmNvcmVQYWdlKCktPnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLnVuaW5z
dGFsbFBhZ2VPdmVybGF5KG1faGlnaGxpZ2h0T3ZlcmxheSwgUGFnZU92ZXJsYXk6OkZhZGVNb2Rl
OjpGYWRlKTsKICNlbHNlCiAgICAgbV9wYWdlLT5oaWRlSW5zcGVjdG9ySGlnaGxpZ2h0KCk7CiAj
ZW5kaWYKQEAgLTEzOSw4ICsxNDAsOCBAQCB2b2lkIFdlYkluc3BlY3RvckNsaWVudDo6aGlkZUhp
Z2hsaWdodCgpCiB2b2lkIFdlYkluc3BlY3RvckNsaWVudDo6c2hvd1BhaW50UmVjdChjb25zdCBG
bG9hdFJlY3QmIHJlY3QpCiB7CiAgICAgaWYgKCFtX3BhaW50UmVjdE92ZXJsYXkpIHsKLSAgICAg
ICAgbV9wYWludFJlY3RPdmVybGF5ID0gUGFnZU92ZXJsYXk6OmNyZWF0ZSh0aGlzLCBQYWdlT3Zl
cmxheTo6T3ZlcmxheVR5cGU6OkRvY3VtZW50KTsKLSAgICAgICAgbV9wYWdlLT5pbnN0YWxsUGFn
ZU92ZXJsYXkobV9wYWludFJlY3RPdmVybGF5LCBQYWdlT3ZlcmxheTo6RmFkZU1vZGU6OkRvTm90
RmFkZSk7CisgICAgICAgIG1fcGFpbnRSZWN0T3ZlcmxheSA9IFBhZ2VPdmVybGF5OjpjcmVhdGUo
KnRoaXMsIFBhZ2VPdmVybGF5OjpPdmVybGF5VHlwZTo6RG9jdW1lbnQpOworICAgICAgICBtX3Bh
Z2UtPmNvcmVQYWdlKCktPnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLmluc3RhbGxQYWdlT3Zlcmxh
eShtX3BhaW50UmVjdE92ZXJsYXksIFBhZ2VPdmVybGF5OjpGYWRlTW9kZTo6RG9Ob3RGYWRlKTsK
ICAgICB9CiAKICAgICBpZiAoIW1fcGFpbnRJbmRpY2F0b3JMYXllckNsaWVudCkKQEAgLTE2Nyw4
ICsxNjgsOCBAQCB2b2lkIFdlYkluc3BlY3RvckNsaWVudDo6c2hvd1BhaW50UmVjdChjb25zdCBG
bG9hdFJlY3QmIHJlY3QpCiAgICAgCiAgICAgbV9wYWludFJlY3RMYXllcnMuYWRkKHBhaW50TGF5
ZXIuZ2V0KCkpOwogCi0gICAgR3JhcGhpY3NMYXllciogb3ZlcmxheVJvb3RMYXllciA9IG1fcGFp
bnRSZWN0T3ZlcmxheS0+bGF5ZXIoKTsKLSAgICBvdmVybGF5Um9vdExheWVyLT5hZGRDaGlsZChw
YWludExheWVyLnJlbGVhc2UoKSk7CisgICAgR3JhcGhpY3NMYXllciYgb3ZlcmxheVJvb3RMYXll
ciA9IG1fcGFpbnRSZWN0T3ZlcmxheS0+bGF5ZXIoKTsKKyAgICBvdmVybGF5Um9vdExheWVyLmFk
ZENoaWxkKHBhaW50TGF5ZXIucmVsZWFzZSgpKTsKIH0KIAogdm9pZCBXZWJJbnNwZWN0b3JDbGll
bnQ6OmFuaW1hdGlvbkVuZGVkRm9yTGF5ZXIoY29uc3QgR3JhcGhpY3NMYXllciogbGF5ZXIpCkBA
IC0xOTgsMTMgKzE5OSwxMyBAQCB2b2lkIFdlYkluc3BlY3RvckNsaWVudDo6ZGlkU2V0U2VhcmNo
aW5nRm9yTm9kZShib29sIGVuYWJsZWQpCiB9CiAjZW5kaWYKIAotdm9pZCBXZWJJbnNwZWN0b3JD
bGllbnQ6OnBhZ2VPdmVybGF5RGVzdHJveWVkKFBhZ2VPdmVybGF5KikKK3ZvaWQgV2ViSW5zcGVj
dG9yQ2xpZW50OjpwYWdlT3ZlcmxheURlc3Ryb3llZChQYWdlT3ZlcmxheSYpCiB7CiB9CiAKLXZv
aWQgV2ViSW5zcGVjdG9yQ2xpZW50Ojp3aWxsTW92ZVRvV2ViUGFnZShQYWdlT3ZlcmxheSosIFdl
YlBhZ2UqIHdlYlBhZ2UpCit2b2lkIFdlYkluc3BlY3RvckNsaWVudDo6d2lsbE1vdmVUb1BhZ2Uo
UGFnZU92ZXJsYXkmLCBQYWdlKiBwYWdlKQogewotICAgIGlmICh3ZWJQYWdlKQorICAgIGlmIChw
YWdlKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBUaGUgcGFnZSBvdmVybGF5IGlzIG1vdmlu
ZyBhd2F5IGZyb20gdGhlIHdlYiBwYWdlLCByZXNldCBpdC4KQEAgLTIxMiwxNiArMjEzLDE2IEBA
IHZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50Ojp3aWxsTW92ZVRvV2ViUGFnZShQYWdlT3ZlcmxheSos
IFdlYlBhZ2UqIHdlYlBhZ2UpCiAgICAgbV9oaWdobGlnaHRPdmVybGF5ID0gMDsKIH0KIAotdm9p
ZCBXZWJJbnNwZWN0b3JDbGllbnQ6OmRpZE1vdmVUb1dlYlBhZ2UoUGFnZU92ZXJsYXkqLCBXZWJQ
YWdlKikKK3ZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50OjpkaWRNb3ZlVG9QYWdlKFBhZ2VPdmVybGF5
JiwgUGFnZSopCiB7CiB9CiAKLXZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50OjpkcmF3UmVjdChQYWdl
T3ZlcmxheSosIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgV2ViQ29y
ZTo6SW50UmVjdCYgLypkaXJ0eVJlY3QqLykKK3ZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50OjpkcmF3
UmVjdChQYWdlT3ZlcmxheSYsIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29u
c3QgV2ViQ29yZTo6SW50UmVjdCYgLypkaXJ0eVJlY3QqLykKIHsKICAgICBtX3BhZ2UtPmNvcmVQ
YWdlKCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS5kcmF3SGlnaGxpZ2h0KGNvbnRleHQpOwogfQog
Ci1ib29sIFdlYkluc3BlY3RvckNsaWVudDo6bW91c2VFdmVudChQYWdlT3ZlcmxheSosIGNvbnN0
IFdlYk1vdXNlRXZlbnQmKQorYm9vbCBXZWJJbnNwZWN0b3JDbGllbnQ6Om1vdXNlRXZlbnQoUGFn
ZU92ZXJsYXkmLCBjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmKQogewogICAgIHJldHVybiBmYWxz
ZTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBv
cnQvV2ViSW5zcGVjdG9yQ2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNv
cmVTdXBwb3J0L1dlYkluc3BlY3RvckNsaWVudC5oCmluZGV4IDc5OGNhYzcuLmRmYzAzOGEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViSW5z
cGVjdG9yQ2xpZW50LmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3Vw
cG9ydC9XZWJJbnNwZWN0b3JDbGllbnQuaApAQCAtMjgsMTYgKzI4LDE2IEBACiAKICNpZiBFTkFC
TEUoSU5TUEVDVE9SKQogCi0jaW5jbHVkZSAiUGFnZU92ZXJsYXkuaCIKLQogI2luY2x1ZGUgPFdl
YkNvcmUvSW5zcGVjdG9yQ2xpZW50Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9JbnNwZWN0b3JGb3J3
YXJkaW5nLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9QYWdlT3ZlcmxheS5oPgogI2luY2x1ZGUgPHd0
Zi9IYXNoU2V0Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEdyYXBoaWNzQ29udGV4
dDsKIGNsYXNzIEdyYXBoaWNzTGF5ZXI7CiBjbGFzcyBJbnRSZWN0OworY2xhc3MgUGFnZU92ZXJs
YXk7CiB9CiAKIG5hbWVzcGFjZSBXZWJLaXQgewpAQCAtNDUsNyArNDUsNyBAQCBuYW1lc3BhY2Ug
V2ViS2l0IHsKIGNsYXNzIFdlYlBhZ2U7CiBjbGFzcyBSZXBhaW50SW5kaWNhdG9yTGF5ZXJDbGll
bnQ7CiAKLWNsYXNzIFdlYkluc3BlY3RvckNsaWVudCA6IHB1YmxpYyBXZWJDb3JlOjpJbnNwZWN0
b3JDbGllbnQsIHByaXZhdGUgUGFnZU92ZXJsYXk6OkNsaWVudCB7CitjbGFzcyBXZWJJbnNwZWN0
b3JDbGllbnQgOiBwdWJsaWMgV2ViQ29yZTo6SW5zcGVjdG9yQ2xpZW50LCBwcml2YXRlIFdlYkNv
cmU6OlBhZ2VPdmVybGF5OjpDbGllbnQgewogZnJpZW5kIGNsYXNzIFJlcGFpbnRJbmRpY2F0b3JM
YXllckNsaWVudDsKIHB1YmxpYzoKICAgICBXZWJJbnNwZWN0b3JDbGllbnQoV2ViUGFnZSopOwpA
QCAtNzQsMTggKzc0LDE4IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIHNob3dQYWludFJl
Y3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jikgb3ZlcnJpZGU7CiAKICAgICAvLyBQYWdlT3Zl
cmxheTo6Q2xpZW50Ci0gICAgdmlydHVhbCB2b2lkIHBhZ2VPdmVybGF5RGVzdHJveWVkKFBhZ2VP
dmVybGF5Kikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHdpbGxNb3ZlVG9XZWJQYWdlKFBh
Z2VPdmVybGF5KiwgV2ViUGFnZSopIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBkaWRNb3Zl
VG9XZWJQYWdlKFBhZ2VPdmVybGF5KiwgV2ViUGFnZSopIG92ZXJyaWRlOwotICAgIHZpcnR1YWwg
dm9pZCBkcmF3UmVjdChQYWdlT3ZlcmxheSosIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYsIGNv
bnN0IFdlYkNvcmU6OkludFJlY3QmKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIGJvb2wgbW91c2VF
dmVudChQYWdlT3ZlcmxheSosIGNvbnN0IFdlYk1vdXNlRXZlbnQmKSBvdmVycmlkZTsKKyAgICB2
aXJ0dWFsIHZvaWQgcGFnZU92ZXJsYXlEZXN0cm95ZWQoV2ViQ29yZTo6UGFnZU92ZXJsYXkmKSBv
dmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgd2lsbE1vdmVUb1BhZ2UoV2ViQ29yZTo6UGFnZU92
ZXJsYXkmLCBXZWJDb3JlOjpQYWdlKikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGRpZE1v
dmVUb1BhZ2UoV2ViQ29yZTo6UGFnZU92ZXJsYXkmLCBXZWJDb3JlOjpQYWdlKikgb3ZlcnJpZGU7
CisgICAgdmlydHVhbCB2b2lkIGRyYXdSZWN0KFdlYkNvcmU6OlBhZ2VPdmVybGF5JiwgV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0JiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpIG92ZXJyaWRlOwor
ICAgIHZpcnR1YWwgYm9vbCBtb3VzZUV2ZW50KFdlYkNvcmU6OlBhZ2VPdmVybGF5JiwgY29uc3Qg
V2ViQ29yZTo6UGxhdGZvcm1Nb3VzZUV2ZW50Jikgb3ZlcnJpZGU7CiAKICAgICB2b2lkIGFuaW1h
dGlvbkVuZGVkRm9yTGF5ZXIoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciopOwogCiAgICAg
V2ViUGFnZSogbV9wYWdlOwotICAgIFBhZ2VPdmVybGF5KiBtX2hpZ2hsaWdodE92ZXJsYXk7Cisg
ICAgV2ViQ29yZTo6UGFnZU92ZXJsYXkqIG1faGlnaGxpZ2h0T3ZlcmxheTsKICAgICAKLSAgICBS
ZWZQdHI8UGFnZU92ZXJsYXk+IG1fcGFpbnRSZWN0T3ZlcmxheTsKKyAgICBSZWZQdHI8V2ViQ29y
ZTo6UGFnZU92ZXJsYXk+IG1fcGFpbnRSZWN0T3ZlcmxheTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8
UmVwYWludEluZGljYXRvckxheWVyQ2xpZW50PiBtX3BhaW50SW5kaWNhdG9yTGF5ZXJDbGllbnQ7
CiAgICAgSGFzaFNldDxXZWJDb3JlOjpHcmFwaGljc0xheWVyKj4gbV9wYWludFJlY3RMYXllcnM7
IC8vIElkZWFsbHkgdGhpcyB3b3VsZCBiZSBIYXNoU2V0PHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGlj
c0xheWVyPj4gYnV0IHRoYXQgZG9lc24ndCB3b3JrIHlldC4gd2Via2l0Lm9yZy9iLzEzNjE2Ngog
fTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5n
QXJlYS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhLmgK
aW5kZXggZjc0YjRkZS4uZGIzYjgzZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhLmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL0RyYXdpbmdBcmVhLmgKQEAgLTQ1LDYgKzQ1LDcgQEAgY2xhc3MgTWVzc2FnZURl
Y29kZXI7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIERpc3BsYXlSZWZyZXNoTW9uaXRv
cjsKK2NsYXNzIEZyYW1lOwogY2xhc3MgRnJhbWVWaWV3OwogY2xhc3MgR3JhcGhpY3NMYXllcjsK
IGNsYXNzIEdyYXBoaWNzTGF5ZXJGYWN0b3J5OwpAQCAtMTIwLDYgKzEyMSw4IEBAIHB1YmxpYzoK
IAogICAgIHZpcnR1YWwgYm9vbCBhZGp1c3RMYXllckZsdXNoVGhyb3R0bGluZyhXZWJDb3JlOjpM
YXllckZsdXNoVGhyb3R0bGVTdGF0ZTo6RmxhZ3MpIHsgcmV0dXJuIGZhbHNlOyB9CiAKKyAgICB2
aXJ0dWFsIHZvaWQgYXR0YWNoVmlld092ZXJsYXlHcmFwaGljc0xheWVyKFdlYkNvcmU6OkZyYW1l
KiwgV2ViQ29yZTo6R3JhcGhpY3NMYXllciopIHsgfQorCiBwcm90ZWN0ZWQ6CiAgICAgRHJhd2lu
Z0FyZWEoRHJhd2luZ0FyZWFUeXBlLCBXZWJQYWdlJik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuY3BwCmluZGV4IDFlMzQ2MmIu
LmNjM2U3MmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9G
aW5kQ29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L0ZpbmRDb250cm9sbGVyLmNwcApAQCAtNDAsNiArNDAsOCBAQAogI2luY2x1ZGUgPFdlYkNvcmUv
R3JhcGhpY3NDb250ZXh0Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9NYWluRnJhbWUuaD4KICNpbmNs
dWRlIDxXZWJDb3JlL1BhZ2UuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1BhZ2VPdmVybGF5Q29udHJv
bGxlci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUGxhdGZvcm1Nb3VzZUV2ZW50Lmg+CiAjaW5jbHVk
ZSA8V2ViQ29yZS9QbHVnaW5Eb2N1bWVudC5oPgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsK
QEAgLTYzLDcgKzY1LDcgQEAgc3RhdGljIFdlYkNvcmU6OkZpbmRPcHRpb25zIGNvcmUoRmluZE9w
dGlvbnMgb3B0aW9ucykKIAogRmluZENvbnRyb2xsZXI6OkZpbmRDb250cm9sbGVyKFdlYlBhZ2Uq
IHdlYlBhZ2UpCiAgICAgOiBtX3dlYlBhZ2Uod2ViUGFnZSkKLSAgICAsIG1fZmluZFBhZ2VPdmVy
bGF5KDApCisgICAgLCBtX2ZpbmRQYWdlT3ZlcmxheShudWxscHRyKQogICAgICwgbV9pc1Nob3dp
bmdGaW5kSW5kaWNhdG9yKGZhbHNlKQogICAgICwgbV9mb3VuZFN0cmluZ01hdGNoSW5kZXgoLTEp
CiB7CkBAIC0xODIsMTIgKzE4NCwxMiBAQCB2b2lkIEZpbmRDb250cm9sbGVyOjp1cGRhdGVGaW5k
VUlBZnRlclBhZ2VTY3JvbGwoYm9vbCBmb3VuZCwgY29uc3QgU3RyaW5nJiBzdHJpbgogCiAgICAg
aWYgKCFzaG91bGRTaG93T3ZlcmxheSkgewogICAgICAgICBpZiAobV9maW5kUGFnZU92ZXJsYXkp
Ci0gICAgICAgICAgICBtX3dlYlBhZ2UtPnVuaW5zdGFsbFBhZ2VPdmVybGF5KG1fZmluZFBhZ2VP
dmVybGF5LCBQYWdlT3ZlcmxheTo6RmFkZU1vZGU6OkZhZGUpOworICAgICAgICAgICAgbV93ZWJQ
YWdlLT5jb3JlUGFnZSgpLT5wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKS51bmluc3RhbGxQYWdlT3Zl
cmxheShtX2ZpbmRQYWdlT3ZlcmxheSwgUGFnZU92ZXJsYXk6OkZhZGVNb2RlOjpGYWRlKTsKICAg
ICB9IGVsc2UgewogICAgICAgICBpZiAoIW1fZmluZFBhZ2VPdmVybGF5KSB7Ci0gICAgICAgICAg
ICBSZWZQdHI8UGFnZU92ZXJsYXk+IGZpbmRQYWdlT3ZlcmxheSA9IFBhZ2VPdmVybGF5OjpjcmVh
dGUodGhpcyk7CisgICAgICAgICAgICBSZWZQdHI8UGFnZU92ZXJsYXk+IGZpbmRQYWdlT3Zlcmxh
eSA9IFBhZ2VPdmVybGF5OjpjcmVhdGUoKnRoaXMpOwogICAgICAgICAgICAgbV9maW5kUGFnZU92
ZXJsYXkgPSBmaW5kUGFnZU92ZXJsYXkuZ2V0KCk7Ci0gICAgICAgICAgICBtX3dlYlBhZ2UtPmlu
c3RhbGxQYWdlT3ZlcmxheShmaW5kUGFnZU92ZXJsYXkucmVsZWFzZSgpLCBQYWdlT3ZlcmxheTo6
RmFkZU1vZGU6OkZhZGUpOworICAgICAgICAgICAgbV93ZWJQYWdlLT5jb3JlUGFnZSgpLT5wYWdl
T3ZlcmxheUNvbnRyb2xsZXIoKS5pbnN0YWxsUGFnZU92ZXJsYXkoZmluZFBhZ2VPdmVybGF5LnJl
bGVhc2UoKSwgUGFnZU92ZXJsYXk6OkZhZGVNb2RlOjpGYWRlKTsKICAgICAgICAgfQogICAgICAg
ICBtX2ZpbmRQYWdlT3ZlcmxheS0+c2V0TmVlZHNEaXNwbGF5KCk7CiAgICAgfQpAQCAtMzMwLDcg
KzMzMiw3IEBAIHZvaWQgRmluZENvbnRyb2xsZXI6OmhpZGVGaW5kVUkoKQogewogICAgIG1fZmlu
ZE1hdGNoZXMuY2xlYXIoKTsKICAgICBpZiAobV9maW5kUGFnZU92ZXJsYXkpCi0gICAgICAgIG1f
d2ViUGFnZS0+dW5pbnN0YWxsUGFnZU92ZXJsYXkobV9maW5kUGFnZU92ZXJsYXksIFBhZ2VPdmVy
bGF5OjpGYWRlTW9kZTo6RmFkZSk7CisgICAgICAgIG1fd2ViUGFnZS0+Y29yZVBhZ2UoKS0+cGFn
ZU92ZXJsYXlDb250cm9sbGVyKCkudW5pbnN0YWxsUGFnZU92ZXJsYXkobV9maW5kUGFnZU92ZXJs
YXksIFBhZ2VPdmVybGF5OjpGYWRlTW9kZTo6RmFkZSk7CiAKICAgICBQbHVnaW5WaWV3KiBwbHVn
aW5WaWV3ID0gcGx1Z2luVmlld0ZvckZyYW1lKG1fd2ViUGFnZS0+bWFpbkZyYW1lKCkpOwogICAg
IApAQCAtNDM5LDIwICs0NDEsMjAgQEAgVmVjdG9yPEludFJlY3Q+IEZpbmRDb250cm9sbGVyOjpy
ZWN0c0ZvclRleHRNYXRjaGVzKCkKICAgICByZXR1cm4gcmVjdHM7CiB9CiAKLXZvaWQgRmluZENv
bnRyb2xsZXI6OnBhZ2VPdmVybGF5RGVzdHJveWVkKFBhZ2VPdmVybGF5KikKK3ZvaWQgRmluZENv
bnRyb2xsZXI6OnBhZ2VPdmVybGF5RGVzdHJveWVkKFBhZ2VPdmVybGF5JikKIHsKIH0KIAotdm9p
ZCBGaW5kQ29udHJvbGxlcjo6d2lsbE1vdmVUb1dlYlBhZ2UoUGFnZU92ZXJsYXkqLCBXZWJQYWdl
KiB3ZWJQYWdlKQordm9pZCBGaW5kQ29udHJvbGxlcjo6d2lsbE1vdmVUb1BhZ2UoUGFnZU92ZXJs
YXkmLCBQYWdlKiBwYWdlKQogewotICAgIGlmICh3ZWJQYWdlKQorICAgIGlmIChwYWdlKQogICAg
ICAgICByZXR1cm47CiAKICAgICBBU1NFUlQobV9maW5kUGFnZU92ZXJsYXkpOwogICAgIG1fZmlu
ZFBhZ2VPdmVybGF5ID0gMDsKIH0KICAgICAKLXZvaWQgRmluZENvbnRyb2xsZXI6OmRpZE1vdmVU
b1dlYlBhZ2UoUGFnZU92ZXJsYXkqLCBXZWJQYWdlKikKK3ZvaWQgRmluZENvbnRyb2xsZXI6OmRp
ZE1vdmVUb1BhZ2UoUGFnZU92ZXJsYXkmLCBQYWdlKikKIHsKIH0KIApAQCAtNDY4LDcgKzQ3MCw3
IEBAIGNvbnN0IGZsb2F0IHNoYWRvd0JsdXJSYWRpdXMgPSAxOwogY29uc3QgZmxvYXQgc2hhZG93
Q29sb3JBbHBoYSA9IDAuNTsKICNlbmRpZgogCi12b2lkIEZpbmRDb250cm9sbGVyOjpkcmF3UmVj
dChQYWdlT3ZlcmxheSosIEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBJ
bnRSZWN0JiBkaXJ0eVJlY3QpCit2b2lkIEZpbmRDb250cm9sbGVyOjpkcmF3UmVjdChQYWdlT3Zl
cmxheSYsIEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBJbnRSZWN0JiBk
aXJ0eVJlY3QpCiB7CiAgICAgQ29sb3Igb3ZlcmxheUJhY2tncm91bmRDb2xvcigwLjFmLCAwLjFm
LCAwLjFmLCAwLjI1Zik7CiAKQEAgLTUwNiw5ICs1MDgsOSBAQCB2b2lkIEZpbmRDb250cm9sbGVy
OjpkcmF3UmVjdChQYWdlT3ZlcmxheSosIEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0
LCBjbwogICAgIH0KIH0KIAotYm9vbCBGaW5kQ29udHJvbGxlcjo6bW91c2VFdmVudChQYWdlT3Zl
cmxheSosIGNvbnN0IFdlYk1vdXNlRXZlbnQmIG1vdXNlRXZlbnQpCitib29sIEZpbmRDb250cm9s
bGVyOjptb3VzZUV2ZW50KFBhZ2VPdmVybGF5JiwgY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBt
b3VzZUV2ZW50KQogewotICAgIGlmIChtb3VzZUV2ZW50LnR5cGUoKSA9PSBXZWJFdmVudDo6TW91
c2VEb3duKQorICAgIGlmIChtb3VzZUV2ZW50LnR5cGUoKSA9PSBQbGF0Zm9ybUV2ZW50OjpNb3Vz
ZVByZXNzZWQpCiAgICAgICAgIGhpZGVGaW5kVUkoKTsKIAogICAgIHJldHVybiBmYWxzZTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxl
ci5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmgK
aW5kZXggMjgwNjNmYy4uOTA1ZWQxZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmgKQEAgLTI2LDEwICsyNiwxMCBAQAogI2lmbmRl
ZiBGaW5kQ29udHJvbGxlcl9oCiAjZGVmaW5lIEZpbmRDb250cm9sbGVyX2gKIAotI2luY2x1ZGUg
IlBhZ2VPdmVybGF5LmgiCiAjaW5jbHVkZSAiU2hhcmVhYmxlQml0bWFwLmgiCiAjaW5jbHVkZSAi
V2ViRmluZE9wdGlvbnMuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0ludFJlY3QuaD4KKyNpbmNsdWRl
IDxXZWJDb3JlL1BhZ2VPdmVybGF5Lmg+CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNs
dWRlIDx3dGYvTm9uY29weWFibGUuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CkBAIC00NSwx
MCArNDUsOSBAQCBjbGFzcyBSYW5nZTsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLWNsYXNzIFBh
Z2VPdmVybGF5OwogY2xhc3MgV2ViUGFnZTsKIAotY2xhc3MgRmluZENvbnRyb2xsZXIgOiBwcml2
YXRlIFBhZ2VPdmVybGF5OjpDbGllbnQgeworY2xhc3MgRmluZENvbnRyb2xsZXIgOiBwcml2YXRl
IFdlYkNvcmU6OlBhZ2VPdmVybGF5OjpDbGllbnQgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxF
KEZpbmRDb250cm9sbGVyKTsKIAogcHVibGljOgpAQCAtNzEsMTEgKzcwLDExIEBAIHB1YmxpYzoK
IAogcHJpdmF0ZToKICAgICAvLyBQYWdlT3ZlcmxheTo6Q2xpZW50LgotICAgIHZpcnR1YWwgdm9p
ZCBwYWdlT3ZlcmxheURlc3Ryb3llZChQYWdlT3ZlcmxheSopOwotICAgIHZpcnR1YWwgdm9pZCB3
aWxsTW92ZVRvV2ViUGFnZShQYWdlT3ZlcmxheSosIFdlYlBhZ2UqKTsKLSAgICB2aXJ0dWFsIHZv
aWQgZGlkTW92ZVRvV2ViUGFnZShQYWdlT3ZlcmxheSosIFdlYlBhZ2UqKTsKLSAgICB2aXJ0dWFs
IGJvb2wgbW91c2VFdmVudChQYWdlT3ZlcmxheSosIGNvbnN0IFdlYk1vdXNlRXZlbnQmKTsKLSAg
ICB2aXJ0dWFsIHZvaWQgZHJhd1JlY3QoUGFnZU92ZXJsYXkqLCBXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQmLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBkaXJ0eVJlY3QpOworICAgIHZpcnR1YWwg
dm9pZCBwYWdlT3ZlcmxheURlc3Ryb3llZChXZWJDb3JlOjpQYWdlT3ZlcmxheSYpOworICAgIHZp
cnR1YWwgdm9pZCB3aWxsTW92ZVRvUGFnZShXZWJDb3JlOjpQYWdlT3ZlcmxheSYsIFdlYkNvcmU6
OlBhZ2UqKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkTW92ZVRvUGFnZShXZWJDb3JlOjpQYWdlT3Zl
cmxheSYsIFdlYkNvcmU6OlBhZ2UqKTsKKyAgICB2aXJ0dWFsIGJvb2wgbW91c2VFdmVudChXZWJD
b3JlOjpQYWdlT3ZlcmxheSYsIGNvbnN0IFdlYkNvcmU6OlBsYXRmb3JtTW91c2VFdmVudCYpOwor
ICAgIHZpcnR1YWwgdm9pZCBkcmF3UmVjdChXZWJDb3JlOjpQYWdlT3ZlcmxheSYsIFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGRpcnR5UmVjdCk7CiAK
ICAgICBWZWN0b3I8V2ViQ29yZTo6SW50UmVjdD4gcmVjdHNGb3JUZXh0TWF0Y2hlcygpOwogICAg
IGJvb2wgZ2V0RmluZEluZGljYXRvckJpdG1hcEFuZFJlY3QoV2ViQ29yZTo6RnJhbWUmLCBTaGFy
ZWFibGVCaXRtYXA6OkhhbmRsZSYsIFdlYkNvcmU6OkludFJlY3QmIHNlbGVjdGlvblJlY3QpOwpA
QCAtODgsNyArODcsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgZGlkSGlkZUZpbmRJbmRpY2F0b3Io
KTsKIAogICAgIFdlYlBhZ2UqIG1fd2ViUGFnZTsKLSAgICBQYWdlT3ZlcmxheSogbV9maW5kUGFn
ZU92ZXJsYXk7CisgICAgV2ViQ29yZTo6UGFnZU92ZXJsYXkqIG1fZmluZFBhZ2VPdmVybGF5Owog
CiAgICAgLy8gV2hldGhlciB0aGUgVUkgcHJvY2VzcyBpcyBzaG93aW5nIHRoZSBmaW5kIGluZGlj
YXRvci4gTm90ZSB0aGF0IHRoaXMgY2FuIGJlIHRydWUgZXZlbiBpZgogICAgIC8vIHRoZSBmaW5k
IGluZGljYXRvciBpc24ndCBzaG93aW5nLCBidXQgaXQgd2lsbCBuZXZlciBiZSBmYWxzZSB3aGVu
IGl0IGlzIHNob3dpbmcuCkBAIC05OSw3ICs5OCw3IEBAIHByaXZhdGU6CiAgICAgaW50IG1fZm91
bmRTdHJpbmdNYXRjaEluZGV4OwogCiAjaWYgUExBVEZPUk0oSU9TKQotICAgIFJlZlB0cjxQYWdl
T3ZlcmxheT4gbV9maW5kSW5kaWNhdG9yT3ZlcmxheTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6UGFn
ZU92ZXJsYXk+IG1fZmluZEluZGljYXRvck92ZXJsYXk7CiAgICAgc3RkOjp1bmlxdWVfcHRyPEZp
bmRJbmRpY2F0b3JPdmVybGF5Q2xpZW50SU9TPiBtX2ZpbmRJbmRpY2F0b3JPdmVybGF5Q2xpZW50
OwogI2VuZGlmCiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL0xheWVyVHJlZUhvc3QuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9M
YXllclRyZWVIb3N0LmgKaW5kZXggM2ZkNDk1NC4uNjRlZWM1MSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUhvc3QuaAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlSG9zdC5oCkBAIC00Nyw3ICs0Nyw2
IEBAIGNsYXNzIEdyYXBoaWNzTGF5ZXJGYWN0b3J5OwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAot
Y2xhc3MgUGFnZU92ZXJsYXk7CiBjbGFzcyBVcGRhdGVJbmZvOwogY2xhc3MgV2ViUGFnZTsKIApA
QCAtNzIsMTEgKzcxLDYgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBkZXZpY2VPclBhZ2VT
Y2FsZUZhY3RvckNoYW5nZWQoKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHBhZ2VCYWNrZ3JvdW5k
VHJhbnNwYXJlbmN5Q2hhbmdlZCgpID0gMDsKIAotICAgIHZpcnR1YWwgdm9pZCBkaWRJbnN0YWxs
UGFnZU92ZXJsYXkoUGFnZU92ZXJsYXkqKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZGlkVW5pbnN0
YWxsUGFnZU92ZXJsYXkoUGFnZU92ZXJsYXkqKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0UGFn
ZU92ZXJsYXlOZWVkc0Rpc3BsYXkoUGFnZU92ZXJsYXkqLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0
JikgeyB9Ci0gICAgdmlydHVhbCB2b2lkIHNldFBhZ2VPdmVybGF5T3BhY2l0eShQYWdlT3Zlcmxh
eSosIGZsb2F0KSB7IH0KLQogICAgIHZpcnR1YWwgdm9pZCBwYXVzZVJlbmRlcmluZygpIHsgfQog
ICAgIHZpcnR1YWwgdm9pZCByZXN1bWVSZW5kZXJpbmcoKSB7IH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1BhZ2VPdmVybGF5LmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9QYWdlT3ZlcmxheS5jcHAKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDhkODgxYjYuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL1BhZ2VPdmVybGF5LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDI1MSAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlBhZ2VP
dmVybGF5LmgiCi0KLSNpbmNsdWRlICJXZWJQYWdlLmgiCi0jaW5jbHVkZSAiV2ViUHJvY2Vzcy5o
IgotI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVWaWV3Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9HcmFw
aGljc0NvbnRleHQuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL01haW5GcmFtZS5oPgotI2luY2x1ZGUg
PFdlYkNvcmUvUGFnZS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvU2Nyb2xsYmFyVGhlbWUuaD4KLSNp
bmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0K
LW5hbWVzcGFjZSBXZWJLaXQgewotCi1zdGF0aWMgY29uc3QgZG91YmxlIGZhZGVBbmltYXRpb25E
dXJhdGlvbiA9IDAuMjsKLXN0YXRpYyBjb25zdCBkb3VibGUgZmFkZUFuaW1hdGlvbkZyYW1lUmF0
ZSA9IDMwOwotCi1QYXNzUmVmUHRyPFBhZ2VPdmVybGF5PiBQYWdlT3ZlcmxheTo6Y3JlYXRlKENs
aWVudCogY2xpZW50LCBPdmVybGF5VHlwZSBvdmVybGF5VHlwZSkKLXsKLSAgICByZXR1cm4gYWRv
cHRSZWYobmV3IFBhZ2VPdmVybGF5KGNsaWVudCwgb3ZlcmxheVR5cGUpKTsKLX0KLQotUGFnZU92
ZXJsYXk6OlBhZ2VPdmVybGF5KENsaWVudCogY2xpZW50LCBPdmVybGF5VHlwZSBvdmVybGF5VHlw
ZSkKLSAgICA6IG1fY2xpZW50KGNsaWVudCkKLSAgICAsIG1fd2ViUGFnZShudWxscHRyKQotICAg
ICwgbV9mYWRlQW5pbWF0aW9uVGltZXIoUnVuTG9vcDo6bWFpbigpLCB0aGlzLCAmUGFnZU92ZXJs
YXk6OmZhZGVBbmltYXRpb25UaW1lckZpcmVkKQotICAgICwgbV9mYWRlQW5pbWF0aW9uU3RhcnRU
aW1lKDApCi0gICAgLCBtX2ZhZGVBbmltYXRpb25EdXJhdGlvbihmYWRlQW5pbWF0aW9uRHVyYXRp
b24pCi0gICAgLCBtX2ZhZGVBbmltYXRpb25UeXBlKE5vQW5pbWF0aW9uKQotICAgICwgbV9mcmFj
dGlvbkZhZGVkSW4oMSkKLSAgICAsIG1fb3ZlcmxheVR5cGUob3ZlcmxheVR5cGUpCi0gICAgLCBt
X2JhY2tncm91bmRDb2xvcihDb2xvcjo6dHJhbnNwYXJlbnQpCi17Ci19Ci0KLVBhZ2VPdmVybGF5
Ojp+UGFnZU92ZXJsYXkoKQotewotfQotCi1JbnRSZWN0IFBhZ2VPdmVybGF5Ojpib3VuZHMoKSBj
b25zdAotewotICAgIGlmICghbV9vdmVycmlkZUZyYW1lLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0
dXJuIEludFJlY3QoSW50UG9pbnQoKSwgbV9vdmVycmlkZUZyYW1lLnNpemUoKSk7Ci0KLSAgICBG
cmFtZVZpZXcqIGZyYW1lVmlldyA9IG1fd2ViUGFnZS0+bWFpbkZyYW1lVmlldygpOwotCi0gICAg
c3dpdGNoIChtX292ZXJsYXlUeXBlKSB7Ci0gICAgY2FzZSBPdmVybGF5VHlwZTo6Vmlldzogewot
ICAgICAgICBpbnQgd2lkdGggPSBmcmFtZVZpZXctPndpZHRoKCk7Ci0gICAgICAgIGludCBoZWln
aHQgPSBmcmFtZVZpZXctPmhlaWdodCgpOwotCi0gICAgICAgIGlmICghU2Nyb2xsYmFyVGhlbWU6
OnRoZW1lKCktPnVzZXNPdmVybGF5U2Nyb2xsYmFycygpKSB7Ci0gICAgICAgICAgICBpZiAoZnJh
bWVWaWV3LT52ZXJ0aWNhbFNjcm9sbGJhcigpKQotICAgICAgICAgICAgICAgIHdpZHRoIC09IGZy
YW1lVmlldy0+dmVydGljYWxTY3JvbGxiYXIoKS0+d2lkdGgoKTsKLSAgICAgICAgICAgIGlmIChm
cmFtZVZpZXctPmhvcml6b250YWxTY3JvbGxiYXIoKSkKLSAgICAgICAgICAgICAgICBoZWlnaHQg
LT0gZnJhbWVWaWV3LT5ob3Jpem9udGFsU2Nyb2xsYmFyKCktPmhlaWdodCgpOwotICAgICAgICB9
Ci0gICAgICAgIHJldHVybiBJbnRSZWN0KDAsIDAsIHdpZHRoLCBoZWlnaHQpOwotICAgIH0KLSAg
ICBjYXNlIE92ZXJsYXlUeXBlOjpEb2N1bWVudDoKLSAgICAgICAgcmV0dXJuIEludFJlY3QoSW50
UG9pbnQoKSwgZnJhbWVWaWV3LT5jb250ZW50c1NpemUoKSk7Ci0gICAgfTsKLQotICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBJbnRSZWN0KEludFBvaW50KCksIGZyYW1lVmll
dy0+Y29udGVudHNTaXplKCkpOwotfQotCi1JbnRSZWN0IFBhZ2VPdmVybGF5OjpmcmFtZSgpIGNv
bnN0Ci17Ci0gICAgaWYgKCFtX292ZXJyaWRlRnJhbWUuaXNFbXB0eSgpKQotICAgICAgICByZXR1
cm4gbV9vdmVycmlkZUZyYW1lOwotCi0gICAgcmV0dXJuIGJvdW5kcygpOwotfQotCi12b2lkIFBh
Z2VPdmVybGF5OjpzZXRGcmFtZShJbnRSZWN0IGZyYW1lKQotewotICAgIGlmIChtX292ZXJyaWRl
RnJhbWUgPT0gZnJhbWUpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fb3ZlcnJpZGVGcmFtZSA9
IGZyYW1lOwotCi0gICAgaWYgKG1fd2ViUGFnZSkKLSAgICAgICAgbV93ZWJQYWdlLT5wYWdlT3Zl
cmxheUNvbnRyb2xsZXIoKS5kaWRDaGFuZ2VPdmVybGF5RnJhbWUoKnRoaXMpOwotfQotCi12b2lk
IFBhZ2VPdmVybGF5OjpzZXRCYWNrZ3JvdW5kQ29sb3IoUkdCQTMyIGJhY2tncm91bmRDb2xvcikK
LXsKLSAgICBpZiAobV9iYWNrZ3JvdW5kQ29sb3IgPT0gYmFja2dyb3VuZENvbG9yKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBtX2JhY2tncm91bmRDb2xvciA9IGJhY2tncm91bmRDb2xvcjsKLQot
ICAgIGlmIChtX3dlYlBhZ2UpCi0gICAgICAgIG1fd2ViUGFnZS0+cGFnZU92ZXJsYXlDb250cm9s
bGVyKCkuZGlkQ2hhbmdlT3ZlcmxheUJhY2tncm91bmRDb2xvcigqdGhpcyk7Ci19Ci0KLXZvaWQg
UGFnZU92ZXJsYXk6OnNldFBhZ2UoV2ViUGFnZSogd2ViUGFnZSkKLXsKLSAgICBtX2NsaWVudC0+
d2lsbE1vdmVUb1dlYlBhZ2UodGhpcywgd2ViUGFnZSk7Ci0gICAgbV93ZWJQYWdlID0gd2ViUGFn
ZTsKLSAgICBtX2NsaWVudC0+ZGlkTW92ZVRvV2ViUGFnZSh0aGlzLCB3ZWJQYWdlKTsKLQotICAg
IG1fZmFkZUFuaW1hdGlvblRpbWVyLnN0b3AoKTsKLX0KLQotdm9pZCBQYWdlT3ZlcmxheTo6c2V0
TmVlZHNEaXNwbGF5KGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCkKLXsKLSAgICBpZiAoIW1fd2Vi
UGFnZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV93ZWJQYWdlLT5wYWdlT3ZlcmxheUNvbnRy
b2xsZXIoKS5zZXRQYWdlT3ZlcmxheU9wYWNpdHkoKnRoaXMsIG1fZnJhY3Rpb25GYWRlZEluKTsK
LSAgICBtX3dlYlBhZ2UtPnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLnNldFBhZ2VPdmVybGF5TmVl
ZHNEaXNwbGF5KCp0aGlzLCBkaXJ0eVJlY3QpOwotfQotCi12b2lkIFBhZ2VPdmVybGF5OjpzZXRO
ZWVkc0Rpc3BsYXkoKQotewotICAgIHNldE5lZWRzRGlzcGxheShib3VuZHMoKSk7Ci19Ci0KLXZv
aWQgUGFnZU92ZXJsYXk6OmRyYXdSZWN0KEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0
LCBjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpCi17Ci0gICAgLy8gSWYgdGhlIGRpcnR5IHJlY3Qg
aXMgb3V0c2lkZSB0aGUgYm91bmRzLCBpZ25vcmUgaXQuCi0gICAgSW50UmVjdCBwYWludFJlY3Qg
PSBpbnRlcnNlY3Rpb24oZGlydHlSZWN0LCBib3VuZHMoKSk7Ci0gICAgaWYgKHBhaW50UmVjdC5p
c0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2
ZXIgc3RhdGVTYXZlcihncmFwaGljc0NvbnRleHQpOwotICAgIG1fY2xpZW50LT5kcmF3UmVjdCh0
aGlzLCBncmFwaGljc0NvbnRleHQsIHBhaW50UmVjdCk7Ci19Ci0gICAgCi1ib29sIFBhZ2VPdmVy
bGF5Ojptb3VzZUV2ZW50KGNvbnN0IFdlYk1vdXNlRXZlbnQmIG1vdXNlRXZlbnQpCi17Ci0gICAg
SW50UG9pbnQgbW91c2VQb3NpdGlvbkluT3ZlcmxheUNvb3JkaW5hdGVzKG1vdXNlRXZlbnQucG9z
aXRpb24oKSk7Ci0KLSAgICBpZiAobV9vdmVybGF5VHlwZSA9PSBQYWdlT3ZlcmxheTo6T3Zlcmxh
eVR5cGU6OkRvY3VtZW50KQotICAgICAgICBtb3VzZVBvc2l0aW9uSW5PdmVybGF5Q29vcmRpbmF0
ZXMgPSBtX3dlYlBhZ2UtPmNvcmVQYWdlKCktPm1haW5GcmFtZSgpLnZpZXcoKS0+cm9vdFZpZXdU
b0NvbnRlbnRzKG1vdXNlUG9zaXRpb25Jbk92ZXJsYXlDb29yZGluYXRlcyk7Ci0KLSAgICAvLyBJ
Z25vcmUgZXZlbnRzIG91dHNpZGUgdGhlIGJvdW5kcy4KLSAgICBpZiAoIWJvdW5kcygpLmNvbnRh
aW5zKG1vdXNlUG9zaXRpb25Jbk92ZXJsYXlDb29yZGluYXRlcykpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIHJldHVybiBtX2NsaWVudC0+bW91c2VFdmVudCh0aGlzLCBtb3VzZUV2ZW50
KTsKLX0KLQotdm9pZCBQYWdlT3ZlcmxheTo6ZGlkU2Nyb2xsRnJhbWUoRnJhbWUqIGZyYW1lKQot
ewotICAgIG1fY2xpZW50LT5kaWRTY3JvbGxGcmFtZSh0aGlzLCBmcmFtZSk7Ci19Ci0KLVdLVHlw
ZVJlZiBQYWdlT3ZlcmxheTo6Y29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZShXS1N0cmlu
Z1JlZiBhdHRyaWJ1dGUsIFdLVHlwZVJlZiBwYXJhbWV0ZXIpCi17Ci0gICAgcmV0dXJuIG1fY2xp
ZW50LT5jb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlKHRoaXMsIGF0dHJpYnV0ZSwgcGFy
YW1ldGVyKTsKLX0KLQotV0tBcnJheVJlZiBQYWdlT3ZlcmxheTo6Y29weUFjY2Vzc2liaWxpdHlB
dHRyaWJ1dGVOYW1lcyhib29sIHBhcmFtZXRlcml6ZWROYW1lcykKLXsKLSAgICByZXR1cm4gbV9j
bGllbnQtPmNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlTmFtZXModGhpcywgcGFyYW1ldGVyaXpl
ZE5hbWVzKTsKLX0KLQotdm9pZCBQYWdlT3ZlcmxheTo6c3RhcnRGYWRlSW5BbmltYXRpb24oKQot
ewotICAgIG1fZnJhY3Rpb25GYWRlZEluID0gMDsKLSAgICBtX2ZhZGVBbmltYXRpb25UeXBlID0g
RmFkZUluQW5pbWF0aW9uOwotCi0gICAgc3RhcnRGYWRlQW5pbWF0aW9uKCk7Ci19Ci0KLXZvaWQg
UGFnZU92ZXJsYXk6OnN0YXJ0RmFkZU91dEFuaW1hdGlvbigpCi17Ci0gICAgbV9mcmFjdGlvbkZh
ZGVkSW4gPSAxOwotICAgIG1fZmFkZUFuaW1hdGlvblR5cGUgPSBGYWRlT3V0QW5pbWF0aW9uOwot
Ci0gICAgc3RhcnRGYWRlQW5pbWF0aW9uKCk7Ci19Ci0KLXZvaWQgUGFnZU92ZXJsYXk6OnN0b3BG
YWRlT3V0QW5pbWF0aW9uKCkKLXsKLSAgICBtX2ZyYWN0aW9uRmFkZWRJbiA9IDEuMDsKLSAgICBt
X2ZhZGVBbmltYXRpb25UaW1lci5zdG9wKCk7Ci19Ci0KLXZvaWQgUGFnZU92ZXJsYXk6OnN0YXJ0
RmFkZUFuaW1hdGlvbigpCi17Ci0gICAgbV9mYWRlQW5pbWF0aW9uU3RhcnRUaW1lID0gY3VycmVu
dFRpbWUoKTsKLSAgICBtX2ZhZGVBbmltYXRpb25UaW1lci5zdGFydFJlcGVhdGluZygxIC8gZmFk
ZUFuaW1hdGlvbkZyYW1lUmF0ZSk7Ci19Ci0KLXZvaWQgUGFnZU92ZXJsYXk6OmZhZGVBbmltYXRp
b25UaW1lckZpcmVkKCkKLXsKLSAgICBmbG9hdCBhbmltYXRpb25Qcm9ncmVzcyA9IChjdXJyZW50
VGltZSgpIC0gbV9mYWRlQW5pbWF0aW9uU3RhcnRUaW1lKSAvIG1fZmFkZUFuaW1hdGlvbkR1cmF0
aW9uOwotCi0gICAgaWYgKGFuaW1hdGlvblByb2dyZXNzID49IDEuMCkKLSAgICAgICAgYW5pbWF0
aW9uUHJvZ3Jlc3MgPSAxLjA7Ci0KLSAgICBkb3VibGUgc2luZSA9IHNpbihwaU92ZXJUd29GbG9h
dCAqIGFuaW1hdGlvblByb2dyZXNzKTsKLSAgICBmbG9hdCBmYWRlQW5pbWF0aW9uVmFsdWUgPSBz
aW5lICogc2luZTsKLQotICAgIG1fZnJhY3Rpb25GYWRlZEluID0gKG1fZmFkZUFuaW1hdGlvblR5
cGUgPT0gRmFkZUluQW5pbWF0aW9uKSA/IGZhZGVBbmltYXRpb25WYWx1ZSA6IDEgLSBmYWRlQW5p
bWF0aW9uVmFsdWU7Ci0gICAgbV93ZWJQYWdlLT5wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKS5zZXRQ
YWdlT3ZlcmxheU9wYWNpdHkoKnRoaXMsIG1fZnJhY3Rpb25GYWRlZEluKTsKLQotICAgIGlmIChh
bmltYXRpb25Qcm9ncmVzcyA9PSAxLjApIHsKLSAgICAgICAgbV9mYWRlQW5pbWF0aW9uVGltZXIu
c3RvcCgpOwotCi0gICAgICAgIGJvb2wgd2FzRmFkaW5nT3V0ID0gbV9mYWRlQW5pbWF0aW9uVHlw
ZSA9PSBGYWRlT3V0QW5pbWF0aW9uOwotICAgICAgICBtX2ZhZGVBbmltYXRpb25UeXBlID0gTm9B
bmltYXRpb247Ci0KLSAgICAgICAgLy8gSWYgdGhpcyB3YXMgYSBmYWRlIG91dCwgZ28gYWhlYWQg
YW5kIHVuaW5zdGFsbCB0aGUgcGFnZSBvdmVybGF5LgotICAgICAgICBpZiAod2FzRmFkaW5nT3V0
KQotICAgICAgICAgICAgbV93ZWJQYWdlLT51bmluc3RhbGxQYWdlT3ZlcmxheSh0aGlzLCBQYWdl
T3ZlcmxheTo6RmFkZU1vZGU6OkRvTm90RmFkZSk7Ci0gICAgfQotfQotCi12b2lkIFBhZ2VPdmVy
bGF5OjpjbGVhcigpCi17Ci0gICAgbV93ZWJQYWdlLT5wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKS5j
bGVhclBhZ2VPdmVybGF5KCp0aGlzKTsKLX0KLQotV2ViQ29yZTo6R3JhcGhpY3NMYXllciogUGFn
ZU92ZXJsYXk6OmxheWVyKCkKLXsKLSAgICByZXR1cm4gbV93ZWJQYWdlLT5wYWdlT3ZlcmxheUNv
bnRyb2xsZXIoKS5sYXllckZvck92ZXJsYXkoKnRoaXMpOwotfQotCi19IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9QYWdl
T3ZlcmxheS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1BhZ2VPdmVybGF5
LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMyMjVmMGQuLjAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1BhZ2VPdmVybGF5LmgKKysrIC9kZXYv
bnVsbApAQCAtMSwxMzcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgUGFnZU92ZXJsYXlf
aAotI2RlZmluZSBQYWdlT3ZlcmxheV9oCi0KLSNpbmNsdWRlICJBUElPYmplY3QuaCIKLSNpbmNs
dWRlICJXS0Jhc2UuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0NvbG9yLmg+Ci0jaW5jbHVkZSA8V2Vi
Q29yZS9JbnRSZWN0Lmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLSNpbmNsdWRlIDx3
dGYvUnVuTG9vcC5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBGcmFtZTsKLWNsYXNz
IEdyYXBoaWNzQ29udGV4dDsKLWNsYXNzIEdyYXBoaWNzTGF5ZXI7Ci19Ci0KLW5hbWVzcGFjZSBX
ZWJLaXQgewotCi1jbGFzcyBXZWJGcmFtZTsKLWNsYXNzIFdlYk1vdXNlRXZlbnQ7Ci1jbGFzcyBX
ZWJQYWdlOwotCi1jbGFzcyBQYWdlT3ZlcmxheSA6IHB1YmxpYyBBUEk6Ok9iamVjdEltcGw8QVBJ
OjpPYmplY3Q6OlR5cGU6OkJ1bmRsZVBhZ2VPdmVybGF5PiB7Ci1wdWJsaWM6Ci0gICAgY2xhc3Mg
Q2xpZW50IHsKLSAgICBwcm90ZWN0ZWQ6Ci0gICAgICAgIHZpcnR1YWwgfkNsaWVudCgpIHsgfQot
ICAgIAotICAgIHB1YmxpYzoKLSAgICAgICAgdmlydHVhbCB2b2lkIHBhZ2VPdmVybGF5RGVzdHJv
eWVkKFBhZ2VPdmVybGF5KikgPSAwOwotICAgICAgICB2aXJ0dWFsIHZvaWQgd2lsbE1vdmVUb1dl
YlBhZ2UoUGFnZU92ZXJsYXkqLCBXZWJQYWdlKikgPSAwOwotICAgICAgICB2aXJ0dWFsIHZvaWQg
ZGlkTW92ZVRvV2ViUGFnZShQYWdlT3ZlcmxheSosIFdlYlBhZ2UqKSA9IDA7Ci0gICAgICAgIHZp
cnR1YWwgdm9pZCBkcmF3UmVjdChQYWdlT3ZlcmxheSosIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dCYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGRpcnR5UmVjdCkgPSAwOwotICAgICAgICB2aXJ0
dWFsIGJvb2wgbW91c2VFdmVudChQYWdlT3ZlcmxheSosIGNvbnN0IFdlYk1vdXNlRXZlbnQmKSA9
IDA7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBkaWRTY3JvbGxGcmFtZShQYWdlT3ZlcmxheSosIFdl
YkNvcmU6OkZyYW1lKikgeyB9Ci0KLSAgICAgICAgdmlydHVhbCBXS1R5cGVSZWYgY29weUFjY2Vz
c2liaWxpdHlBdHRyaWJ1dGVWYWx1ZShQYWdlT3ZlcmxheSosIFdLU3RyaW5nUmVmIC8qIGF0dHJp
YnV0ZSAqLywgV0tUeXBlUmVmIC8qIHBhcmFtZXRlciAqLykgeyByZXR1cm4gMDsgfQotICAgICAg
ICB2aXJ0dWFsIFdLQXJyYXlSZWYgY29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVOYW1lcyhQYWdl
T3ZlcmxheSosIGJvb2wgLyogcGFyYW1ldGVyaXplZE5hbWVzICovKSB7IHJldHVybiAwOyB9Ci0g
ICAgfTsKLQotICAgIGVudW0gY2xhc3MgT3ZlcmxheVR5cGUgewotICAgICAgICBWaWV3LCAvLyBG
aXhlZCB0byB0aGUgdmlldyBzaXplOyBkb2VzIG5vdCBzY2FsZSBvciBzY3JvbGwgd2l0aCB0aGUg
ZG9jdW1lbnQsIHJlcGFpbnRzIG9uIHNjcm9sbC4KLSAgICAgICAgRG9jdW1lbnQsIC8vIFNjYWxl
cyBhbmQgc2Nyb2xscyB3aXRoIHRoZSBkb2N1bWVudC4KLSAgICB9OwotCi0gICAgc3RhdGljIFBh
c3NSZWZQdHI8UGFnZU92ZXJsYXk+IGNyZWF0ZShDbGllbnQqLCBPdmVybGF5VHlwZSA9IE92ZXJs
YXlUeXBlOjpWaWV3KTsKLSAgICB2aXJ0dWFsIH5QYWdlT3ZlcmxheSgpOwotCi0gICAgdm9pZCBz
ZXRQYWdlKFdlYlBhZ2UqKTsKLSAgICB2b2lkIHNldE5lZWRzRGlzcGxheShjb25zdCBXZWJDb3Jl
OjpJbnRSZWN0JiBkaXJ0eVJlY3QpOwotICAgIHZvaWQgc2V0TmVlZHNEaXNwbGF5KCk7Ci0KLSAg
ICB2b2lkIGRyYXdSZWN0KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IFdlYkNvcmU6
OkludFJlY3QmIGRpcnR5UmVjdCk7Ci0gICAgYm9vbCBtb3VzZUV2ZW50KGNvbnN0IFdlYk1vdXNl
RXZlbnQmKTsKLSAgICB2b2lkIGRpZFNjcm9sbEZyYW1lKFdlYkNvcmU6OkZyYW1lKik7Ci0KLSAg
ICBXS1R5cGVSZWYgY29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZShXS1N0cmluZ1JlZiBh
dHRyaWJ1dGUsIFdLVHlwZVJlZiBwYXJhbWV0ZXIpOwotICAgIFdLQXJyYXlSZWYgY29weUFjY2Vz
c2liaWxpdHlBdHRyaWJ1dGVOYW1lcyhib29sIHBhcmFtZXRlcml6ZWROYW1lcyk7Ci0gICAgCi0g
ICAgdm9pZCBzdGFydEZhZGVJbkFuaW1hdGlvbigpOwotICAgIHZvaWQgc3RhcnRGYWRlT3V0QW5p
bWF0aW9uKCk7Ci0gICAgdm9pZCBzdG9wRmFkZU91dEFuaW1hdGlvbigpOwotCi0gICAgdm9pZCBj
bGVhcigpOwotCi0gICAgQ2xpZW50KiBjbGllbnQoKSBjb25zdCB7IHJldHVybiBtX2NsaWVudDsg
fQotCi0gICAgZW51bSBjbGFzcyBGYWRlTW9kZSB7IERvTm90RmFkZSwgRmFkZSB9OwotCi0gICAg
T3ZlcmxheVR5cGUgb3ZlcmxheVR5cGUoKSB7IHJldHVybiBtX292ZXJsYXlUeXBlOyB9Ci0KLSAg
ICBXZWJDb3JlOjpJbnRSZWN0IGJvdW5kcygpIGNvbnN0OwotICAgIFdlYkNvcmU6OkludFJlY3Qg
ZnJhbWUoKSBjb25zdDsKLSAgICB2b2lkIHNldEZyYW1lKFdlYkNvcmU6OkludFJlY3QpOwotCi0g
ICAgV2ViQ29yZTo6UkdCQTMyIGJhY2tncm91bmRDb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fYmFj
a2dyb3VuZENvbG9yOyB9Ci0gICAgdm9pZCBzZXRCYWNrZ3JvdW5kQ29sb3IoV2ViQ29yZTo6UkdC
QTMyKTsKLQotICAgIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqIGxheWVyKCk7Ci0gICAgCi1wcm90
ZWN0ZWQ6Ci0gICAgZXhwbGljaXQgUGFnZU92ZXJsYXkoQ2xpZW50KiwgT3ZlcmxheVR5cGUpOwot
Ci1wcml2YXRlOgotICAgIHZvaWQgc3RhcnRGYWRlQW5pbWF0aW9uKCk7Ci0gICAgdm9pZCBmYWRl
QW5pbWF0aW9uVGltZXJGaXJlZCgpOwotCi0gICAgQ2xpZW50KiBtX2NsaWVudDsKLSAgICBXZWJQ
YWdlKiBtX3dlYlBhZ2U7Ci0KLSAgICBSdW5Mb29wOjpUaW1lcjxQYWdlT3ZlcmxheT4gbV9mYWRl
QW5pbWF0aW9uVGltZXI7Ci0gICAgZG91YmxlIG1fZmFkZUFuaW1hdGlvblN0YXJ0VGltZTsKLSAg
ICBkb3VibGUgbV9mYWRlQW5pbWF0aW9uRHVyYXRpb247Ci0KLSAgICBlbnVtIEZhZGVBbmltYXRp
b25UeXBlIHsKLSAgICAgICAgTm9BbmltYXRpb24sCi0gICAgICAgIEZhZGVJbkFuaW1hdGlvbiwK
LSAgICAgICAgRmFkZU91dEFuaW1hdGlvbiwKLSAgICB9OwotCi0gICAgRmFkZUFuaW1hdGlvblR5
cGUgbV9mYWRlQW5pbWF0aW9uVHlwZTsKLSAgICBmbG9hdCBtX2ZyYWN0aW9uRmFkZWRJbjsKLQot
ICAgIE92ZXJsYXlUeXBlIG1fb3ZlcmxheVR5cGU7Ci0gICAgV2ViQ29yZTo6SW50UmVjdCBtX292
ZXJyaWRlRnJhbWU7Ci0KLSAgICBXZWJDb3JlOjpSR0JBMzIgbV9iYWNrZ3JvdW5kQ29sb3I7Ci19
OwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIFBhZ2VPdmVybGF5X2gKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9QYWdlT3ZlcmxheUNv
bnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1BhZ2VPdmVy
bGF5Q29udHJvbGxlci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg2NDU3YzUu
LjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1BhZ2VPdmVy
bGF5Q29udHJvbGxlci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwzMTQgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJQYWdlT3ZlcmxheUNvbnRyb2xs
ZXIuaCIKLQotI2luY2x1ZGUgIkRyYXdpbmdBcmVhLmgiCi0jaW5jbHVkZSAiUGFnZU92ZXJsYXku
aCIKLSNpbmNsdWRlICJXZWJQYWdlLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9GcmFtZS5oPgotI2lu
Y2x1ZGUgPFdlYkNvcmUvRnJhbWVWaWV3Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0Nv
bnRleHQuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzTGF5ZXIuaD4KLSNpbmNsdWRlIDxX
ZWJDb3JlL01haW5GcmFtZS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvU2Nyb2xsaW5nQ29vcmRpbmF0
b3IuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1NldHRpbmdzLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9U
aWxlZEJhY2tpbmcuaD4KLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLW5hbWVzcGFjZSBX
ZWJLaXQgewotCi1QYWdlT3ZlcmxheUNvbnRyb2xsZXI6OlBhZ2VPdmVybGF5Q29udHJvbGxlcihX
ZWJQYWdlJiB3ZWJQYWdlKQotICAgIDogbV93ZWJQYWdlKHdlYlBhZ2UpCi17Ci19Ci0KLXZvaWQg
UGFnZU92ZXJsYXlDb250cm9sbGVyOjppbml0aWFsaXplKCkKLXsKLSAgICBBU1NFUlQoIW1fZG9j
dW1lbnRPdmVybGF5Um9vdExheWVyKTsKLSAgICBBU1NFUlQoIW1fdmlld092ZXJsYXlSb290TGF5
ZXIpOwotCi0gICAgbV9kb2N1bWVudE92ZXJsYXlSb290TGF5ZXIgPSBHcmFwaGljc0xheWVyOjpj
cmVhdGUobV93ZWJQYWdlLmRyYXdpbmdBcmVhKCktPmdyYXBoaWNzTGF5ZXJGYWN0b3J5KCksICp0
aGlzKTsKLSAgICBtX3ZpZXdPdmVybGF5Um9vdExheWVyID0gR3JhcGhpY3NMYXllcjo6Y3JlYXRl
KG1fd2ViUGFnZS5kcmF3aW5nQXJlYSgpLT5ncmFwaGljc0xheWVyRmFjdG9yeSgpLCAqdGhpcyk7
Ci0jaWZuZGVmIE5ERUJVRwotICAgIG1fZG9jdW1lbnRPdmVybGF5Um9vdExheWVyLT5zZXROYW1l
KCJQYWdlIE92ZXJsYXkgY29udGFpbmVyIChkb2N1bWVudC1yZWxhdGl2ZSkiKTsKLSAgICBtX3Zp
ZXdPdmVybGF5Um9vdExheWVyLT5zZXROYW1lKCJQYWdlIE92ZXJsYXkgY29udGFpbmVyICh2aWV3
LXJlbGF0aXZlKSIpOwotI2VuZGlmCi19Ci0KLXN0YXRpYyB2b2lkIHVwZGF0ZU92ZXJsYXlHZW9t
ZXRyeShQYWdlT3ZlcmxheSYgb3ZlcmxheSwgR3JhcGhpY3NMYXllciYgZ3JhcGhpY3NMYXllcikK
LXsKLSAgICBJbnRSZWN0IG92ZXJsYXlGcmFtZSA9IG92ZXJsYXkuZnJhbWUoKTsKLQotICAgIGlm
IChvdmVybGF5RnJhbWUubG9jYXRpb24oKSA9PSBncmFwaGljc0xheWVyLnBvc2l0aW9uKCkgJiYg
b3ZlcmxheUZyYW1lLnNpemUoKSA9PSBncmFwaGljc0xheWVyLnNpemUoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgZ3JhcGhpY3NMYXllci5zZXRQb3NpdGlvbihvdmVybGF5RnJhbWUubG9jYXRp
b24oKSk7Ci0gICAgZ3JhcGhpY3NMYXllci5zZXRTaXplKG92ZXJsYXlGcmFtZS5zaXplKCkpOwot
fQotCi12b2lkIFBhZ2VPdmVybGF5Q29udHJvbGxlcjo6aW5zdGFsbFBhZ2VPdmVybGF5KFBhc3NS
ZWZQdHI8UGFnZU92ZXJsYXk+IHBhZ2VPdmVybGF5LCBQYWdlT3ZlcmxheTo6RmFkZU1vZGUgZmFk
ZU1vZGUpCi17Ci0gICAgQVNTRVJUKG1fZG9jdW1lbnRPdmVybGF5Um9vdExheWVyKTsKLSAgICBB
U1NFUlQobV92aWV3T3ZlcmxheVJvb3RMYXllcik7Ci0KLSAgICBSZWZQdHI8UGFnZU92ZXJsYXk+
IG92ZXJsYXkgPSBwYWdlT3ZlcmxheTsKLQotICAgIGlmIChtX3BhZ2VPdmVybGF5cy5jb250YWlu
cyhvdmVybGF5KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9wYWdlT3ZlcmxheXMuYXBwZW5k
KG92ZXJsYXkpOwotICAgIG92ZXJsYXktPnNldFBhZ2UoJm1fd2ViUGFnZSk7Ci0KLSAgICBpZiAo
ZmFkZU1vZGUgPT0gUGFnZU92ZXJsYXk6OkZhZGVNb2RlOjpGYWRlKQotICAgICAgICBvdmVybGF5
LT5zdGFydEZhZGVJbkFuaW1hdGlvbigpOwotCi0gICAgc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNz
TGF5ZXI+IGxheWVyID0gR3JhcGhpY3NMYXllcjo6Y3JlYXRlKG1fd2ViUGFnZS5kcmF3aW5nQXJl
YSgpLT5ncmFwaGljc0xheWVyRmFjdG9yeSgpLCAqdGhpcyk7Ci0gICAgbGF5ZXItPnNldEFuY2hv
clBvaW50KEZsb2F0UG9pbnQzRCgpKTsKLSAgICBsYXllci0+c2V0QmFja2dyb3VuZENvbG9yKG92
ZXJsYXktPmJhY2tncm91bmRDb2xvcigpKTsKLSAgICB1cGRhdGVPdmVybGF5R2VvbWV0cnkoKm92
ZXJsYXksICpsYXllcik7Ci0jaWZuZGVmIE5ERUJVRwotICAgIGxheWVyLT5zZXROYW1lKCJQYWdl
IE92ZXJsYXkgY29udGVudCIpOwotI2VuZGlmCi0KLSAgICB1cGRhdGVTZXR0aW5nc0ZvckxheWVy
KCpsYXllcik7Ci0KLSAgICBzd2l0Y2ggKG92ZXJsYXktPm92ZXJsYXlUeXBlKCkpIHsKLSAgICBj
YXNlIFBhZ2VPdmVybGF5OjpPdmVybGF5VHlwZTo6VmlldzoKLSAgICAgICAgbV92aWV3T3Zlcmxh
eVJvb3RMYXllci0+YWRkQ2hpbGQobGF5ZXIuZ2V0KCkpOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIFBhZ2VPdmVybGF5OjpPdmVybGF5VHlwZTo6RG9jdW1lbnQ6Ci0gICAgICAgIG1fZG9jdW1l
bnRPdmVybGF5Um9vdExheWVyLT5hZGRDaGlsZChsYXllci5nZXQoKSk7Ci0gICAgICAgIGJyZWFr
OwotICAgIH0KLQotICAgIG1fb3ZlcmxheUdyYXBoaWNzTGF5ZXJzLnNldChvdmVybGF5LmdldCgp
LCBXVEY6Om1vdmUobGF5ZXIpKTsKLQotICAgIHVwZGF0ZUZvcmNlU3luY2hyb25vdXNTY3JvbGxM
YXllclBvc2l0aW9uVXBkYXRlcygpOwotfQotCi12b2lkIFBhZ2VPdmVybGF5Q29udHJvbGxlcjo6
dW5pbnN0YWxsUGFnZU92ZXJsYXkoUGFnZU92ZXJsYXkqIG92ZXJsYXksIFBhZ2VPdmVybGF5OjpG
YWRlTW9kZSBmYWRlTW9kZSkKLXsKLSAgICBpZiAoZmFkZU1vZGUgPT0gUGFnZU92ZXJsYXk6OkZh
ZGVNb2RlOjpGYWRlKSB7Ci0gICAgICAgIG92ZXJsYXktPnN0YXJ0RmFkZU91dEFuaW1hdGlvbigp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgb3ZlcmxheS0+c2V0UGFnZShudWxscHRy
KTsKLQotICAgIG1fb3ZlcmxheUdyYXBoaWNzTGF5ZXJzLnRha2Uob3ZlcmxheSktPnJlbW92ZUZy
b21QYXJlbnQoKTsKLQotICAgIHNpemVfdCBvdmVybGF5SW5kZXggPSBtX3BhZ2VPdmVybGF5cy5m
aW5kKG92ZXJsYXkpOwotICAgIEFTU0VSVChvdmVybGF5SW5kZXggIT0gbm90Rm91bmQpOwotICAg
IG1fcGFnZU92ZXJsYXlzLnJlbW92ZShvdmVybGF5SW5kZXgpOwotCi0gICAgdXBkYXRlRm9yY2VT
eW5jaHJvbm91c1Njcm9sbExheWVyUG9zaXRpb25VcGRhdGVzKCk7Ci19Ci0KLXZvaWQgUGFnZU92
ZXJsYXlDb250cm9sbGVyOjp1cGRhdGVGb3JjZVN5bmNocm9ub3VzU2Nyb2xsTGF5ZXJQb3NpdGlv
blVwZGF0ZXMoKQotewotI2lmIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpCi0gICAgYm9vbCBmb3Jj
ZVN5bmNocm9ub3VzU2Nyb2xsTGF5ZXJQb3NpdGlvblVwZGF0ZXMgPSBmYWxzZTsKLQotICAgIGZv
ciAoYXV0byYgb3ZlcmxheSA6IG1fcGFnZU92ZXJsYXlzKSB7Ci0gICAgICAgIGlmIChvdmVybGF5
LT5vdmVybGF5VHlwZSgpID09IFBhZ2VPdmVybGF5OjpPdmVybGF5VHlwZTo6VmlldykKLSAgICAg
ICAgICAgIGZvcmNlU3luY2hyb25vdXNTY3JvbGxMYXllclBvc2l0aW9uVXBkYXRlcyA9IHRydWU7
Ci0gICAgfQotCi0gICAgaWYgKFBhZ2UqIHBhZ2UgPSBtX3dlYlBhZ2UuY29yZVBhZ2UoKSkgewot
ICAgICAgICBpZiAoU2Nyb2xsaW5nQ29vcmRpbmF0b3IqIHNjcm9sbGluZ0Nvb3JkaW5hdG9yID0g
cGFnZS0+c2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSkKLSAgICAgICAgICAgIHNjcm9sbGluZ0Nvb3Jk
aW5hdG9yLT5zZXRGb3JjZVN5bmNocm9ub3VzU2Nyb2xsTGF5ZXJQb3NpdGlvblVwZGF0ZXMoZm9y
Y2VTeW5jaHJvbm91c1Njcm9sbExheWVyUG9zaXRpb25VcGRhdGVzKTsKLSAgICB9Ci0jZW5kaWYK
LX0KLQotdm9pZCBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6OnNldFBhZ2VPdmVybGF5TmVlZHNEaXNw
bGF5KFBhZ2VPdmVybGF5JiBvdmVybGF5LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBkaXJ0eVJl
Y3QpCi17Ci0gICAgQVNTRVJUKG1fcGFnZU92ZXJsYXlzLmNvbnRhaW5zKCZvdmVybGF5KSk7Ci0g
ICAgR3JhcGhpY3NMYXllciYgZ3JhcGhpY3NMYXllciA9ICptX292ZXJsYXlHcmFwaGljc0xheWVy
cy5nZXQoJm92ZXJsYXkpOwotCi0gICAgaWYgKCFncmFwaGljc0xheWVyLmRyYXdzQ29udGVudCgp
KSB7Ci0gICAgICAgIGdyYXBoaWNzTGF5ZXIuc2V0RHJhd3NDb250ZW50KHRydWUpOwotICAgICAg
ICB1cGRhdGVPdmVybGF5R2VvbWV0cnkob3ZlcmxheSwgZ3JhcGhpY3NMYXllcik7Ci0gICAgfQot
Ci0gICAgZ3JhcGhpY3NMYXllci5zZXROZWVkc0Rpc3BsYXlJblJlY3QoZGlydHlSZWN0KTsKLX0K
LQotdm9pZCBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6OnNldFBhZ2VPdmVybGF5T3BhY2l0eShQYWdl
T3ZlcmxheSYgb3ZlcmxheSwgZmxvYXQgb3BhY2l0eSkKLXsKLSAgICBBU1NFUlQobV9wYWdlT3Zl
cmxheXMuY29udGFpbnMoJm92ZXJsYXkpKTsKLSAgICBtX292ZXJsYXlHcmFwaGljc0xheWVycy5n
ZXQoJm92ZXJsYXkpLT5zZXRPcGFjaXR5KG9wYWNpdHkpOwotfQotCi12b2lkIFBhZ2VPdmVybGF5
Q29udHJvbGxlcjo6Y2xlYXJQYWdlT3ZlcmxheShQYWdlT3ZlcmxheSYgb3ZlcmxheSkKLXsKLSAg
ICBBU1NFUlQobV9wYWdlT3ZlcmxheXMuY29udGFpbnMoJm92ZXJsYXkpKTsKLSAgICBtX292ZXJs
YXlHcmFwaGljc0xheWVycy5nZXQoJm92ZXJsYXkpLT5zZXREcmF3c0NvbnRlbnQoZmFsc2UpOwot
fQotCi1HcmFwaGljc0xheWVyKiBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6OmxheWVyRm9yT3Zlcmxh
eShQYWdlT3ZlcmxheSYgb3ZlcmxheSkgY29uc3QKLXsKLSAgICBBU1NFUlQobV9wYWdlT3Zlcmxh
eXMuY29udGFpbnMoJm92ZXJsYXkpKTsKLSAgICByZXR1cm4gbV9vdmVybGF5R3JhcGhpY3NMYXll
cnMuZ2V0KCZvdmVybGF5KTsKLX0KLQotdm9pZCBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6OmRpZENo
YW5nZVZpZXdTaXplKCkKLXsKLSAgICBmb3IgKGF1dG8mIG92ZXJsYXlBbmRMYXllciA6IG1fb3Zl
cmxheUdyYXBoaWNzTGF5ZXJzKSB7Ci0gICAgICAgIGlmIChvdmVybGF5QW5kTGF5ZXIua2V5LT5v
dmVybGF5VHlwZSgpID09IFBhZ2VPdmVybGF5OjpPdmVybGF5VHlwZTo6VmlldykKLSAgICAgICAg
ICAgIHVwZGF0ZU92ZXJsYXlHZW9tZXRyeSgqb3ZlcmxheUFuZExheWVyLmtleSwgKm92ZXJsYXlB
bmRMYXllci52YWx1ZSk7Ci0gICAgfQotfQotCi12b2lkIFBhZ2VPdmVybGF5Q29udHJvbGxlcjo6
ZGlkQ2hhbmdlRG9jdW1lbnRTaXplKCkKLXsKLSAgICBmb3IgKGF1dG8mIG92ZXJsYXlBbmRMYXll
ciA6IG1fb3ZlcmxheUdyYXBoaWNzTGF5ZXJzKSB7Ci0gICAgICAgIGlmIChvdmVybGF5QW5kTGF5
ZXIua2V5LT5vdmVybGF5VHlwZSgpID09IFBhZ2VPdmVybGF5OjpPdmVybGF5VHlwZTo6RG9jdW1l
bnQpCi0gICAgICAgICAgICB1cGRhdGVPdmVybGF5R2VvbWV0cnkoKm92ZXJsYXlBbmRMYXllci5r
ZXksICpvdmVybGF5QW5kTGF5ZXIudmFsdWUpOwotICAgIH0KLX0KLQotdm9pZCBQYWdlT3Zlcmxh
eUNvbnRyb2xsZXI6OmRpZENoYW5nZVByZWZlcmVuY2VzKCkKLXsKLSAgICBmb3IgKGF1dG8mIGdy
YXBoaWNzTGF5ZXIgOiBtX292ZXJsYXlHcmFwaGljc0xheWVycy52YWx1ZXMoKSkKLSAgICAgICAg
dXBkYXRlU2V0dGluZ3NGb3JMYXllcigqZ3JhcGhpY3NMYXllcik7Ci19Ci0KLXZvaWQgUGFnZU92
ZXJsYXlDb250cm9sbGVyOjpkaWRDaGFuZ2VEZXZpY2VTY2FsZUZhY3RvcigpCi17Ci0gICAgbV9k
b2N1bWVudE92ZXJsYXlSb290TGF5ZXItPm5vdGVEZXZpY2VPclBhZ2VTY2FsZUZhY3RvckNoYW5n
ZWRJbmNsdWRpbmdEZXNjZW5kYW50cygpOwotICAgIG1fdmlld092ZXJsYXlSb290TGF5ZXItPm5v
dGVEZXZpY2VPclBhZ2VTY2FsZUZhY3RvckNoYW5nZWRJbmNsdWRpbmdEZXNjZW5kYW50cygpOwot
Ci0gICAgZm9yIChhdXRvJiBncmFwaGljc0xheWVyIDogbV9vdmVybGF5R3JhcGhpY3NMYXllcnMu
dmFsdWVzKCkpCi0gICAgICAgIGdyYXBoaWNzTGF5ZXItPnNldE5lZWRzRGlzcGxheSgpOwotfQot
Ci12b2lkIFBhZ2VPdmVybGF5Q29udHJvbGxlcjo6ZGlkQ2hhbmdlRXhwb3NlZFJlY3QoKQotewot
ICAgIG1fd2ViUGFnZS5kcmF3aW5nQXJlYSgpLT5zY2hlZHVsZUNvbXBvc2l0aW5nTGF5ZXJGbHVz
aCgpOwotfQotCi12b2lkIFBhZ2VPdmVybGF5Q29udHJvbGxlcjo6ZGlkU2Nyb2xsRnJhbWUoRnJh
bWUqIGZyYW1lKQotewotICAgIGZvciAoYXV0byYgb3ZlcmxheUFuZExheWVyIDogbV9vdmVybGF5
R3JhcGhpY3NMYXllcnMpIHsKLSAgICAgICAgaWYgKG92ZXJsYXlBbmRMYXllci5rZXktPm92ZXJs
YXlUeXBlKCkgPT0gUGFnZU92ZXJsYXk6Ok92ZXJsYXlUeXBlOjpWaWV3IHx8ICFmcmFtZS0+aXNN
YWluRnJhbWUoKSkKLSAgICAgICAgICAgIG92ZXJsYXlBbmRMYXllci52YWx1ZS0+c2V0TmVlZHNE
aXNwbGF5KCk7Ci0gICAgICAgIG92ZXJsYXlBbmRMYXllci5rZXktPmRpZFNjcm9sbEZyYW1lKGZy
YW1lKTsKLSAgICB9Ci19Ci0KLXZvaWQgUGFnZU92ZXJsYXlDb250cm9sbGVyOjpmbHVzaFBhZ2VP
dmVybGF5TGF5ZXJzKEZsb2F0UmVjdCB2aXNpYmxlUmVjdCkKLXsKLSAgICBtX3ZpZXdPdmVybGF5
Um9vdExheWVyLT5mbHVzaENvbXBvc2l0aW5nU3RhdGUodmlzaWJsZVJlY3QpOwotfQotCi12b2lk
IFBhZ2VPdmVybGF5Q29udHJvbGxlcjo6dXBkYXRlU2V0dGluZ3NGb3JMYXllcihHcmFwaGljc0xh
eWVyJiBsYXllcikKLXsKLSAgICBTZXR0aW5ncyYgc2V0dGluZ3MgPSBtX3dlYlBhZ2UuY29yZVBh
Z2UoKS0+c2V0dGluZ3MoKTsKLSAgICBsYXllci5zZXRBY2NlbGVyYXRlc0RyYXdpbmcoc2V0dGlu
Z3MuYWNjZWxlcmF0ZWREcmF3aW5nRW5hYmxlZCgpKTsKLSAgICBsYXllci5zZXRTaG93RGVidWdC
b3JkZXIoc2V0dGluZ3Muc2hvd0RlYnVnQm9yZGVycygpKTsKLSAgICBsYXllci5zZXRTaG93UmVw
YWludENvdW50ZXIoc2V0dGluZ3Muc2hvd1JlcGFpbnRDb3VudGVyKCkpOwotfQotCi1ib29sIFBh
Z2VPdmVybGF5Q29udHJvbGxlcjo6aGFuZGxlTW91c2VFdmVudChjb25zdCBXZWJNb3VzZUV2ZW50
JiBtb3VzZUV2ZW50KQotewotICAgIGlmICghbV9wYWdlT3ZlcmxheXMuc2l6ZSgpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICBmb3IgKGF1dG8gaXQgPSBtX3BhZ2VPdmVybGF5cy5yYmVn
aW4oKSwgZW5kID0gbV9wYWdlT3ZlcmxheXMucmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAg
ICAgICAgaWYgKCgqaXQpLT5tb3VzZUV2ZW50KG1vdXNlRXZlbnQpKQotICAgICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1XS1R5cGVSZWYgUGFn
ZU92ZXJsYXlDb250cm9sbGVyOjpjb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlKFdLU3Ry
aW5nUmVmIGF0dHJpYnV0ZSwgV0tUeXBlUmVmIHBhcmFtZXRlcikKLXsKLSAgICBpZiAoIW1fcGFn
ZU92ZXJsYXlzLnNpemUoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBmb3IgKGF1
dG8gaXQgPSBtX3BhZ2VPdmVybGF5cy5yYmVnaW4oKSwgZW5kID0gbV9wYWdlT3ZlcmxheXMucmVu
ZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgaWYgKFdLVHlwZVJlZiB2YWx1ZSA9ICgq
aXQpLT5jb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlKGF0dHJpYnV0ZSwgcGFyYW1ldGVy
KSkKLSAgICAgICAgICAgIHJldHVybiB2YWx1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbnVsbHB0
cjsKLX0KLQotV0tBcnJheVJlZiBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6OmNvcHlBY2Nlc3NpYmls
aXR5QXR0cmlidXRlc05hbWVzKGJvb2wgcGFyYW1ldGVyaXplZE5hbWVzKQotewotICAgIGlmICgh
bV9wYWdlT3ZlcmxheXMuc2l6ZSgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGZv
ciAoYXV0byBpdCA9IG1fcGFnZU92ZXJsYXlzLnJiZWdpbigpLCBlbmQgPSBtX3BhZ2VPdmVybGF5
cy5yZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBpZiAoV0tBcnJheVJlZiB2YWx1
ZSA9ICgqaXQpLT5jb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZU5hbWVzKHBhcmFtZXRlcml6ZWRO
YW1lcykpCi0gICAgICAgICAgICByZXR1cm4gdmFsdWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIG51
bGxwdHI7Ci19Ci0KLXZvaWQgUGFnZU92ZXJsYXlDb250cm9sbGVyOjpwYWludENvbnRlbnRzKGNv
bnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqIGdyYXBoaWNzTGF5ZXIsIFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0LCBXZWJDb3JlOjpHcmFwaGljc0xheWVyUGFpbnRp
bmdQaGFzZSwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBjbGlwUmVjdCkKLXsKLSAgICBmb3Ig
KGF1dG8gaXQgPSBtX292ZXJsYXlHcmFwaGljc0xheWVycy5iZWdpbigpLCBlbmQgPSBtX292ZXJs
YXlHcmFwaGljc0xheWVycy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGlmIChp
dC0+dmFsdWUuZ2V0KCkgIT0gZ3JhcGhpY3NMYXllcikKLSAgICAgICAgICAgIGNvbnRpbnVlOwot
Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihncmFwaGljc0Nv
bnRleHQpOwotICAgICAgICBncmFwaGljc0NvbnRleHQuY2xpcChjbGlwUmVjdCk7Ci0gICAgICAg
IGl0LT5rZXktPmRyYXdSZWN0KGdyYXBoaWNzQ29udGV4dCwgZW5jbG9zaW5nSW50UmVjdChjbGlw
UmVjdCkpOwotCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci19Ci0KLWZsb2F0IFBhZ2VPdmVybGF5
Q29udHJvbGxlcjo6ZGV2aWNlU2NhbGVGYWN0b3IoKSBjb25zdAotewotICAgIHJldHVybiBtX3dl
YlBhZ2UuY29yZVBhZ2UoKS0+ZGV2aWNlU2NhbGVGYWN0b3IoKTsKLX0KLQotdm9pZCBQYWdlT3Zl
cmxheUNvbnRyb2xsZXI6Om5vdGlmeUZsdXNoUmVxdWlyZWQoY29uc3QgV2ViQ29yZTo6R3JhcGhp
Y3NMYXllciopCi17Ci0gICAgaWYgKG1fd2ViUGFnZS5kcmF3aW5nQXJlYSgpKQotICAgICAgICBt
X3dlYlBhZ2UuZHJhd2luZ0FyZWEoKS0+c2NoZWR1bGVDb21wb3NpdGluZ0xheWVyRmx1c2goKTsK
LX0KLQotdm9pZCBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6OmRpZENoYW5nZU92ZXJsYXlGcmFtZShQ
YWdlT3ZlcmxheSYgb3ZlcmxheSkKLXsKLSAgICBBU1NFUlQobV9wYWdlT3ZlcmxheXMuY29udGFp
bnMoJm92ZXJsYXkpKTsKLSAgICB1cGRhdGVPdmVybGF5R2VvbWV0cnkob3ZlcmxheSwgKm1fb3Zl
cmxheUdyYXBoaWNzTGF5ZXJzLmdldCgmb3ZlcmxheSkpOwotfQotCi12b2lkIFBhZ2VPdmVybGF5
Q29udHJvbGxlcjo6ZGlkQ2hhbmdlT3ZlcmxheUJhY2tncm91bmRDb2xvcihQYWdlT3ZlcmxheSYg
b3ZlcmxheSkKLXsKLSAgICBBU1NFUlQobV9wYWdlT3ZlcmxheXMuY29udGFpbnMoJm92ZXJsYXkp
KTsKLSAgICBtX292ZXJsYXlHcmFwaGljc0xheWVycy5nZXQoJm92ZXJsYXkpLT5zZXRCYWNrZ3Jv
dW5kQ29sb3Iob3ZlcmxheS5iYWNrZ3JvdW5kQ29sb3IoKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNl
IFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1Bh
Z2VPdmVybGF5Q29udHJvbGxlci5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L1BhZ2VPdmVybGF5Q29udHJvbGxlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAy
NTE4MmQ1Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Q
YWdlT3ZlcmxheUNvbnRyb2xsZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDk5ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jaWZuZGVmIFBhZ2VPdmVybGF5Q29udHJvbGxlcl9oCi0jZGVmaW5lIFBhZ2VP
dmVybGF5Q29udHJvbGxlcl9oCi0KLSNpbmNsdWRlICJQYWdlT3ZlcmxheS5oIgotI2luY2x1ZGUg
IldLQmFzZS5oIgotI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NMYXllckNsaWVudC5oPgotI2lu
Y2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotY2xhc3MgRnJhbWU7Ci19Ci0K
LW5hbWVzcGFjZSBXZWJLaXQgewotCi1jbGFzcyBXZWJNb3VzZUV2ZW50OwotY2xhc3MgV2ViUGFn
ZTsKLQotY2xhc3MgUGFnZU92ZXJsYXlDb250cm9sbGVyIDogcHVibGljIFdlYkNvcmU6OkdyYXBo
aWNzTGF5ZXJDbGllbnQgewotcHVibGljOgotICAgIFBhZ2VPdmVybGF5Q29udHJvbGxlcihXZWJQ
YWdlJik7Ci0KLSAgICB2b2lkIGluaXRpYWxpemUoKTsKLQotICAgIFdlYkNvcmU6OkdyYXBoaWNz
TGF5ZXIqIGRvY3VtZW50T3ZlcmxheVJvb3RMYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fZG9jdW1l
bnRPdmVybGF5Um9vdExheWVyLmdldCgpOyB9Ci0gICAgV2ViQ29yZTo6R3JhcGhpY3NMYXllciog
dmlld092ZXJsYXlSb290TGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX3ZpZXdPdmVybGF5Um9vdExh
eWVyLmdldCgpOyB9Ci0KLSAgICB2b2lkIGluc3RhbGxQYWdlT3ZlcmxheShQYXNzUmVmUHRyPFBh
Z2VPdmVybGF5PiwgUGFnZU92ZXJsYXk6OkZhZGVNb2RlKTsKLSAgICB2b2lkIHVuaW5zdGFsbFBh
Z2VPdmVybGF5KFBhZ2VPdmVybGF5KiwgUGFnZU92ZXJsYXk6OkZhZGVNb2RlKTsKLQotICAgIHZv
aWQgc2V0UGFnZU92ZXJsYXlOZWVkc0Rpc3BsYXkoUGFnZU92ZXJsYXkmLCBjb25zdCBXZWJDb3Jl
OjpJbnRSZWN0Jik7Ci0gICAgdm9pZCBzZXRQYWdlT3ZlcmxheU9wYWNpdHkoUGFnZU92ZXJsYXkm
LCBmbG9hdCk7Ci0gICAgdm9pZCBjbGVhclBhZ2VPdmVybGF5KFBhZ2VPdmVybGF5Jik7Ci0gICAg
V2ViQ29yZTo6R3JhcGhpY3NMYXllciogbGF5ZXJGb3JPdmVybGF5KFBhZ2VPdmVybGF5JikgY29u
c3Q7Ci0KLSAgICB2b2lkIGRpZENoYW5nZVZpZXdTaXplKCk7Ci0gICAgdm9pZCBkaWRDaGFuZ2VE
b2N1bWVudFNpemUoKTsKLSAgICB2b2lkIGRpZENoYW5nZVByZWZlcmVuY2VzKCk7Ci0gICAgdm9p
ZCBkaWRDaGFuZ2VEZXZpY2VTY2FsZUZhY3RvcigpOwotICAgIHZvaWQgZGlkQ2hhbmdlRXhwb3Nl
ZFJlY3QoKTsKLSAgICB2b2lkIGRpZFNjcm9sbEZyYW1lKFdlYkNvcmU6OkZyYW1lKik7Ci0KLSAg
ICB2b2lkIGRpZENoYW5nZU92ZXJsYXlGcmFtZShQYWdlT3ZlcmxheSYpOwotICAgIHZvaWQgZGlk
Q2hhbmdlT3ZlcmxheUJhY2tncm91bmRDb2xvcihQYWdlT3ZlcmxheSYpOwotCi0gICAgdm9pZCBm
bHVzaFBhZ2VPdmVybGF5TGF5ZXJzKFdlYkNvcmU6OkZsb2F0UmVjdCk7Ci0KLSAgICBib29sIGhh
bmRsZU1vdXNlRXZlbnQoY29uc3QgV2ViTW91c2VFdmVudCYpOwotCi0gICAgLy8gRklYTUU6IFdl
IHNob3VsZG4ndCB1c2UgQVBJIHR5cGVzIGhlcmUuCi0gICAgV0tUeXBlUmVmIGNvcHlBY2Nlc3Np
YmlsaXR5QXR0cmlidXRlVmFsdWUoV0tTdHJpbmdSZWYgYXR0cmlidXRlLCBXS1R5cGVSZWYgcGFy
YW1ldGVyKTsKLSAgICBXS0FycmF5UmVmIGNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlc05hbWVz
KGJvb2wgcGFyYW1ldGVyaXplZE5hbWVzKTsKLQotcHJpdmF0ZToKLSAgICB2b2lkIHVwZGF0ZVNl
dHRpbmdzRm9yTGF5ZXIoV2ViQ29yZTo6R3JhcGhpY3NMYXllciYpOwotICAgIHZvaWQgdXBkYXRl
Rm9yY2VTeW5jaHJvbm91c1Njcm9sbExheWVyUG9zaXRpb25VcGRhdGVzKCk7Ci0KLSAgICAvLyBX
ZWJDb3JlOjpHcmFwaGljc0xheWVyQ2xpZW50Ci0gICAgdmlydHVhbCB2b2lkIG5vdGlmeUZsdXNo
UmVxdWlyZWQoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciopIG92ZXJyaWRlOwotICAgIHZp
cnR1YWwgdm9pZCBwYWludENvbnRlbnRzKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqLCBX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmLCBXZWJDb3JlOjpHcmFwaGljc0xheWVyUGFpbnRpbmdQ
aGFzZSwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBjbGlwUmVjdCkgb3ZlcnJpZGU7Ci0gICAg
dmlydHVhbCBmbG9hdCBkZXZpY2VTY2FsZUZhY3RvcigpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZp
cnR1YWwgYm9vbCBzaG91bGRTa2lwTGF5ZXJJbkR1bXAoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NM
YXllciopIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KLQotICAgIHN0ZDo6dW5pcXVl
X3B0cjxXZWJDb3JlOjpHcmFwaGljc0xheWVyPiBtX2RvY3VtZW50T3ZlcmxheVJvb3RMYXllcjsK
LSAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6R3JhcGhpY3NMYXllcj4gbV92aWV3T3Zlcmxh
eVJvb3RMYXllcjsKLSAgICBIYXNoTWFwPFBhZ2VPdmVybGF5Kiwgc3RkOjp1bmlxdWVfcHRyPFdl
YkNvcmU6OkdyYXBoaWNzTGF5ZXI+PiBtX292ZXJsYXlHcmFwaGljc0xheWVyczsKLSAgICBWZWN0
b3I8UmVmUHRyPFBhZ2VPdmVybGF5Pj4gbV9wYWdlT3ZlcmxheXM7Ci0gICAgV2ViUGFnZSYgbV93
ZWJQYWdlOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBQYWdlT3Zl
cmxheUNvbnRyb2xsZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL1NlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9TZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyLmgKaW5kZXggM2IwOWQzZC4u
NDExZDMzYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1Nl
cnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvU2VydmljZXNPdmVybGF5Q29udHJvbGxlci5oCkBAIC0yOCw5ICsyOCw5IEBACiAK
ICNpZiBFTkFCTEUoU0VSVklDRV9DT05UUk9MUykgfHwgRU5BQkxFKFRFTEVQSE9ORV9OVU1CRVJf
REVURUNUSU9OKQogCi0jaW5jbHVkZSAiUGFnZU92ZXJsYXkuaCIKICNpbmNsdWRlICJXZWJGcmFt
ZS5oIgogI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NMYXllckNsaWVudC5oPgorI2luY2x1ZGUg
PFdlYkNvcmUvUGFnZU92ZXJsYXkuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1JhbmdlLmg+CiAjaW5j
bHVkZSA8V2ViQ29yZS9UaW1lci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CkBAIC0z
OSw3ICszOSw2IEBAIHR5cGVkZWYgdm9pZCogRERIaWdobGlnaHRSZWY7CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIGNsYXNzIExheW91dFJlY3Q7Ci0KIHN0cnVjdCBHYXBSZWN0czsKIH0KIApAQCAt
NDcsNyArNDYsNyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgV2ViUGFnZTsKIAotY2xh
c3MgU2VydmljZXNPdmVybGF5Q29udHJvbGxlciA6IHByaXZhdGUgUGFnZU92ZXJsYXk6OkNsaWVu
dCB7CitjbGFzcyBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyIDogcHJpdmF0ZSBXZWJDb3JlOjpQ
YWdlT3ZlcmxheTo6Q2xpZW50IHsKIHB1YmxpYzoKICAgICBTZXJ2aWNlc092ZXJsYXlDb250cm9s
bGVyKFdlYlBhZ2UmKTsKICAgICB+U2VydmljZXNPdmVybGF5Q29udHJvbGxlcigpOwpAQCAtOTgs
MTIgKzk3LDEyIEBAIHByaXZhdGU6CiAgICAgfTsKIAogICAgIC8vIFBhZ2VPdmVybGF5OjpDbGll
bnQKLSAgICB2aXJ0dWFsIHZvaWQgcGFnZU92ZXJsYXlEZXN0cm95ZWQoUGFnZU92ZXJsYXkqKSBv
dmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgd2lsbE1vdmVUb1dlYlBhZ2UoUGFnZU92ZXJsYXkq
LCBXZWJQYWdlKikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGRpZE1vdmVUb1dlYlBhZ2Uo
UGFnZU92ZXJsYXkqLCBXZWJQYWdlKikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGRyYXdS
ZWN0KFBhZ2VPdmVybGF5KiwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiwgY29uc3QgV2ViQ29y
ZTo6SW50UmVjdCYgZGlydHlSZWN0KSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIGJvb2wgbW91c2VF
dmVudChQYWdlT3ZlcmxheSosIGNvbnN0IFdlYk1vdXNlRXZlbnQmKSBvdmVycmlkZTsKLSAgICB2
aXJ0dWFsIHZvaWQgZGlkU2Nyb2xsRnJhbWUoUGFnZU92ZXJsYXkqLCBXZWJDb3JlOjpGcmFtZSop
IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBwYWdlT3ZlcmxheURlc3Ryb3llZChXZWJDb3Jl
OjpQYWdlT3ZlcmxheSYpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCB3aWxsTW92ZVRvUGFn
ZShXZWJDb3JlOjpQYWdlT3ZlcmxheSYsIFdlYkNvcmU6OlBhZ2UqKSBvdmVycmlkZTsKKyAgICB2
aXJ0dWFsIHZvaWQgZGlkTW92ZVRvUGFnZShXZWJDb3JlOjpQYWdlT3ZlcmxheSYsIFdlYkNvcmU6
OlBhZ2UqKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd1JlY3QoV2ViQ29yZTo6UGFn
ZU92ZXJsYXkmLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmLCBjb25zdCBXZWJDb3JlOjpJbnRS
ZWN0JiBkaXJ0eVJlY3QpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBtb3VzZUV2ZW50KFdl
YkNvcmU6OlBhZ2VPdmVybGF5JiwgY29uc3QgV2ViQ29yZTo6UGxhdGZvcm1Nb3VzZUV2ZW50Jikg
b3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGRpZFNjcm9sbEZyYW1lKFdlYkNvcmU6OlBhZ2VP
dmVybGF5JiwgV2ViQ29yZTo6RnJhbWUmKSBvdmVycmlkZTsKIAogICAgIHZvaWQgY3JlYXRlT3Zl
cmxheUlmTmVlZGVkKCk7CiAgICAgdm9pZCBoYW5kbGVDbGljayhjb25zdCBXZWJDb3JlOjpJbnRQ
b2ludCYsIEhpZ2hsaWdodCYpOwpAQCAtMTM5LDcgKzEzOCw3IEBAIHByaXZhdGU6CiAgICAgV2Vi
UGFnZSYgd2ViUGFnZSgpIGNvbnN0IHsgcmV0dXJuIG1fd2ViUGFnZTsgfQogCiAgICAgV2ViUGFn
ZSYgbV93ZWJQYWdlOwotICAgIFBhZ2VPdmVybGF5KiBtX3NlcnZpY2VzT3ZlcmxheTsKKyAgICBX
ZWJDb3JlOjpQYWdlT3ZlcmxheSogbV9zZXJ2aWNlc092ZXJsYXk7CiAKICAgICBSZWZQdHI8SGln
aGxpZ2h0PiBtX2FjdGl2ZUhpZ2hsaWdodDsKICAgICBSZWZQdHI8SGlnaGxpZ2h0PiBtX25leHRB
Y3RpdmVIaWdobGlnaHQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViUGFnZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
UGFnZS5jcHAKaW5kZXggNmVhNzZhYy4uNzJhMGZjYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcApAQCAtMzI3LDcgKzMyNyw2IEBAIFdlYlBhZ2U6
OldlYlBhZ2UodWludDY0X3QgcGFnZUlELCBjb25zdCBXZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJz
JiBwYXJhbWV0ZXJzKQogI2lmIEVOQUJMRShXRUJHTCkKICAgICAsIG1fc3lzdGVtV2ViR0xQb2xp
Y3koV2ViR0xBbGxvd0NyZWF0aW9uKQogI2VuZGlmCi0gICAgLCBtX3BhZ2VPdmVybGF5Q29udHJv
bGxlcigqdGhpcykKIHsKICAgICBBU1NFUlQobV9wYWdlSUQpOwogICAgIC8vIEZJWE1FOiBUaGlz
IGlzIGEgbm9uLWlkZWFsIGxvY2F0aW9uIGZvciB0aGlzIFNldHRpbmcgYW5kCkBAIC0zNjYsNyAr
MzY1LDYgQEAgV2ViUGFnZTo6V2ViUGFnZSh1aW50NjRfdCBwYWdlSUQsIGNvbnN0IFdlYlBhZ2VD
cmVhdGlvblBhcmFtZXRlcnMmIHBhcmFtZXRlcnMpCiAKICAgICBtX2RyYXdpbmdBcmVhID0gRHJh
d2luZ0FyZWE6OmNyZWF0ZSgqdGhpcywgcGFyYW1ldGVycyk7CiAgICAgbV9kcmF3aW5nQXJlYS0+
c2V0UGFpbnRpbmdFbmFibGVkKGZhbHNlKTsKLSAgICBtX3BhZ2VPdmVybGF5Q29udHJvbGxlci5p
bml0aWFsaXplKCk7CiAKICNpZiBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKQogICAgIG1fdXNlQXN5
bmNTY3JvbGxpbmcgPSBwYXJhbWV0ZXJzLnN0b3JlLmdldEJvb2xWYWx1ZUZvcktleShXZWJQcmVm
ZXJlbmNlc0tleTo6dGhyZWFkZWRTY3JvbGxpbmdFbmFibGVkS2V5KCkpOwpAQCAtMTIyNiw4ICsx
MjI0LDYgQEAgdm9pZCBXZWJQYWdlOjpzZXRTaXplKGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHZp
ZXdTaXplKQogICAgIGlmICh2aWV3LT51c2VGaXhlZExheW91dCgpKQogICAgICAgICBzZW5kVmll
d3BvcnRBdHRyaWJ1dGVzQ2hhbmdlZCgpOwogI2VuZGlmCi0KLSAgICBtX3BhZ2VPdmVybGF5Q29u
dHJvbGxlci5kaWRDaGFuZ2VWaWV3U2l6ZSgpOwogfQogCiAjaWYgVVNFKFRJTEVEX0JBQ0tJTkdf
U1RPUkUpCkBAIC0xNDUzLDggKzE0NDksNiBAQCB2b2lkIFdlYlBhZ2U6OnNldERldmljZVNjYWxl
RmFjdG9yKGZsb2F0IHNjYWxlRmFjdG9yKQogCiAgICAgaWYgKG1fZHJhd2luZ0FyZWEtPmxheWVy
VHJlZUhvc3QoKSkKICAgICAgICAgbV9kcmF3aW5nQXJlYS0+bGF5ZXJUcmVlSG9zdCgpLT5kZXZp
Y2VPclBhZ2VTY2FsZUZhY3RvckNoYW5nZWQoKTsKLQotICAgIG1fcGFnZU92ZXJsYXlDb250cm9s
bGVyLmRpZENoYW5nZURldmljZVNjYWxlRmFjdG9yKCk7CiB9CiAKIGZsb2F0IFdlYlBhZ2U6OmRl
dmljZVNjYWxlRmFjdG9yKCkgY29uc3QKQEAgLTE1NzcsMTYgKzE1NzEsNiBAQCB2b2lkIFdlYlBh
Z2U6OnBvc3RJbmplY3RlZEJ1bmRsZU1lc3NhZ2UoY29uc3QgU3RyaW5nJiBtZXNzYWdlTmFtZSwg
SVBDOjpNZXNzYWdlRAogICAgIGluamVjdGVkQnVuZGxlLT5kaWRSZWNlaXZlTWVzc2FnZVRvUGFn
ZSh0aGlzLCBtZXNzYWdlTmFtZSwgbWVzc2FnZUJvZHkuZ2V0KCkpOwogfQogCi12b2lkIFdlYlBh
Z2U6Omluc3RhbGxQYWdlT3ZlcmxheShQYXNzUmVmUHRyPFBhZ2VPdmVybGF5PiBwYWdlT3Zlcmxh
eSwgUGFnZU92ZXJsYXk6OkZhZGVNb2RlIGZhZGVNb2RlKQotewotICAgIG1fcGFnZU92ZXJsYXlD
b250cm9sbGVyLmluc3RhbGxQYWdlT3ZlcmxheShwYWdlT3ZlcmxheSwgZmFkZU1vZGUpOwotfQot
Ci12b2lkIFdlYlBhZ2U6OnVuaW5zdGFsbFBhZ2VPdmVybGF5KFBhZ2VPdmVybGF5KiBwYWdlT3Zl
cmxheSwgUGFnZU92ZXJsYXk6OkZhZGVNb2RlIGZhZGVNb2RlKQotewotICAgIG1fcGFnZU92ZXJs
YXlDb250cm9sbGVyLnVuaW5zdGFsbFBhZ2VPdmVybGF5KHBhZ2VPdmVybGF5LCBmYWRlTW9kZSk7
Ci19Ci0KICNpZiAhUExBVEZPUk0oSU9TKQogdm9pZCBXZWJQYWdlOjpzZXRIZWFkZXJQYWdlQmFu
bmVyKFBhc3NSZWZQdHI8UGFnZUJhbm5lcj4gcGFnZUJhbm5lcikKIHsKQEAgLTE5MTQsNyArMTg5
OCw3IEBAIHZvaWQgV2ViUGFnZTo6bW91c2VFdmVudChjb25zdCBXZWJNb3VzZUV2ZW50JiBtb3Vz
ZUV2ZW50KQogICAgICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmCi0gICAgYm9vbCBoYW5kbGVk
ID0gbV9wYWdlT3ZlcmxheUNvbnRyb2xsZXIuaGFuZGxlTW91c2VFdmVudChtb3VzZUV2ZW50KTsK
KyAgICBib29sIGhhbmRsZWQgPSBmYWxzZTsKIAogI2lmICFQTEFURk9STShJT1MpCiAgICAgaWYg
KCFoYW5kbGVkICYmIG1faGVhZGVyQmFubmVyKQpAQCAtMTk0MCw3ICsxOTI0LDcgQEAgdm9pZCBX
ZWJQYWdlOjptb3VzZUV2ZW50KGNvbnN0IFdlYk1vdXNlRXZlbnQmIG1vdXNlRXZlbnQpCiAKIHZv
aWQgV2ViUGFnZTo6bW91c2VFdmVudFN5bmNGb3JUZXN0aW5nKGNvbnN0IFdlYk1vdXNlRXZlbnQm
IG1vdXNlRXZlbnQsIGJvb2wmIGhhbmRsZWQpCiB7Ci0gICAgaGFuZGxlZCA9IG1fcGFnZU92ZXJs
YXlDb250cm9sbGVyLmhhbmRsZU1vdXNlRXZlbnQobW91c2VFdmVudCk7CisgICAgaGFuZGxlZCA9
IGZhbHNlOwogI2lmICFQTEFURk9STShJT1MpCiAgICAgaWYgKCFoYW5kbGVkICYmIG1faGVhZGVy
QmFubmVyKQogICAgICAgICBoYW5kbGVkID0gbV9oZWFkZXJCYW5uZXItPm1vdXNlRXZlbnQobW91
c2VFdmVudCk7CkBAIC0yODY5LDggKzI4NTMsNiBAQCB2b2lkIFdlYlBhZ2U6OnVwZGF0ZVByZWZl
cmVuY2VzKGNvbnN0IFdlYlByZWZlcmVuY2VzU3RvcmUmIHN0b3JlKQogCiAgICAgaWYgKG1fZHJh
d2luZ0FyZWEpCiAgICAgICAgIG1fZHJhd2luZ0FyZWEtPnVwZGF0ZVByZWZlcmVuY2VzKHN0b3Jl
KTsKLQotICAgIG1fcGFnZU92ZXJsYXlDb250cm9sbGVyLmRpZENoYW5nZVByZWZlcmVuY2VzKCk7
CiB9CiAKICNpZiBQTEFURk9STShDT0NPQSkKQEAgLTQ4MTEsOCArNDc5Myw2IEBAIFNlcnZpY2Vz
T3ZlcmxheUNvbnRyb2xsZXImIFdlYlBhZ2U6OnNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIoKQog
CiB2b2lkIFdlYlBhZ2U6OmRpZENoYW5nZVNjcm9sbE9mZnNldEZvckZyYW1lKEZyYW1lKiBmcmFt
ZSkKIHsKLSAgICBtX3BhZ2VPdmVybGF5Q29udHJvbGxlci5kaWRTY3JvbGxGcmFtZShmcmFtZSk7
Ci0KICAgICBpZiAoIWZyYW1lLT5pc01haW5GcmFtZSgpKQogICAgICAgICByZXR1cm47CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmggYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCmluZGV4IGNhNDZiYTBh
Li40MjU1YTg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
V2ViUGFnZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdl
LmgKQEAgLTQxLDcgKzQxLDYgQEAKICNpbmNsdWRlICJMYXllclRyZWVIb3N0LmgiCiAjaW5jbHVk
ZSAiTWVzc2FnZVJlY2VpdmVyLmgiCiAjaW5jbHVkZSAiTWVzc2FnZVNlbmRlci5oIgotI2luY2x1
ZGUgIlBhZ2VPdmVybGF5Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIlBsdWdpbi5oIgogI2luY2x1
ZGUgIlNhbmRib3hFeHRlbnNpb24uaCIKICNpbmNsdWRlICJTaGFyZWFibGVCaXRtYXAuaCIKQEAg
LTE0MCw3ICsxMzksNiBAQCBjbGFzcyBEcmF3aW5nQXJlYTsKIGNsYXNzIEluamVjdGVkQnVuZGxl
QmFja0ZvcndhcmRMaXN0OwogY2xhc3MgTm90aWZpY2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5h
Z2VyOwogY2xhc3MgUGFnZUJhbm5lcjsKLWNsYXNzIFBhZ2VPdmVybGF5OwogY2xhc3MgUGx1Z2lu
VmlldzsKIGNsYXNzIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI7CiBjbGFzcyBWaXNpYmxlQ29u
dGVudFJlY3RVcGRhdGVJbmZvOwpAQCAtMjA2LDggKzIwNCw2IEBAIHB1YmxpYzoKICAgICAKICAg
ICBJbmplY3RlZEJ1bmRsZUJhY2tGb3J3YXJkTGlzdCogYmFja0ZvcndhcmRMaXN0KCk7CiAgICAg
RHJhd2luZ0FyZWEqIGRyYXdpbmdBcmVhKCkgY29uc3QgeyByZXR1cm4gbV9kcmF3aW5nQXJlYS5n
ZXQoKTsgfQotICAgIGNvbnN0IFBhZ2VPdmVybGF5Q29udHJvbGxlciYgcGFnZU92ZXJsYXlDb250
cm9sbGVyKCkgY29uc3QgeyByZXR1cm4gbV9wYWdlT3ZlcmxheUNvbnRyb2xsZXI7IH0KLSAgICBQ
YWdlT3ZlcmxheUNvbnRyb2xsZXImIHBhZ2VPdmVybGF5Q29udHJvbGxlcigpIHsgcmV0dXJuIG1f
cGFnZU92ZXJsYXlDb250cm9sbGVyOyB9CiAjaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykKICAg
ICBXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvciogc2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSBj
b25zdDsKICNlbmRpZgpAQCAtNDE2LDggKzQxMiw2IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgd2lu
ZG93SXNGb2N1c2VkKCkgY29uc3Q7CiAgICAgYm9vbCB3aW5kb3dBbmRXZWJQYWdlQXJlRm9jdXNl
ZCgpIGNvbnN0OwotICAgIHZvaWQgaW5zdGFsbFBhZ2VPdmVybGF5KFBhc3NSZWZQdHI8UGFnZU92
ZXJsYXk+LCBQYWdlT3ZlcmxheTo6RmFkZU1vZGUgPSBQYWdlT3ZlcmxheTo6RmFkZU1vZGU6OkRv
Tm90RmFkZSk7Ci0gICAgdm9pZCB1bmluc3RhbGxQYWdlT3ZlcmxheShQYWdlT3ZlcmxheSosIFBh
Z2VPdmVybGF5OjpGYWRlTW9kZSA9IFBhZ2VPdmVybGF5OjpGYWRlTW9kZTo6RG9Ob3RGYWRlKTsK
IAogI2lmICFQTEFURk9STShJT1MpCiAgICAgdm9pZCBzZXRIZWFkZXJQYWdlQmFubmVyKFBhc3NS
ZWZQdHI8UGFnZUJhbm5lcj4pOwpAQCAtODIyLDkgKzgxNiw2IEBAIHB1YmxpYzoKICAgICBXZWJD
b3JlOjpTY3JvbGxQaW5uaW5nQmVoYXZpb3Igc2Nyb2xsUGlubmluZ0JlaGF2aW9yKCkgeyByZXR1
cm4gbV9zY3JvbGxQaW5uaW5nQmVoYXZpb3I7IH0KICAgICB2b2lkIHNldFNjcm9sbFBpbm5pbmdC
ZWhhdmlvcih1aW50MzJfdCAvKiBXZWJDb3JlOjpTY3JvbGxQaW5uaW5nQmVoYXZpb3IgKi8gcGlu
bmluZyk7CiAKLSAgICBXS1R5cGVSZWYgcGFnZU92ZXJsYXlDb3B5QWNjZXNzaWJpbGl0eUF0dHJp
YnV0ZVZhbHVlKFdLU3RyaW5nUmVmIGF0dHJpYnV0ZSwgV0tUeXBlUmVmIHBhcmFtZXRlcik7Ci0g
ICAgV0tBcnJheVJlZiBwYWdlT3ZlcmxheUNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlc05hbWVz
KGJvb2wgcGFyYW1ldGVyaXplZE5hbWVzKTsKLQogICAgIFBhc3NSZWZQdHI8V2ViQ29yZTo6RG9j
dW1lbnRMb2FkZXI+IGNyZWF0ZURvY3VtZW50TG9hZGVyKFdlYkNvcmU6OkZyYW1lJiwgY29uc3Qg
V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgV2ViQ29yZTo6U3Vic3RpdHV0ZURhdGEm
KTsKIAogICAgIHZvaWQgZ2V0Qnl0ZWNvZGVQcm9maWxlKHVpbnQ2NF90IGNhbGxiYWNrSUQpOwpA
QCAtMTI3OCw4ICsxMjY5LDYgQEAgcHJpdmF0ZToKICNpZiBFTkFCTEUoU0VSVklDRV9DT05UUk9M
UykgfHwgRU5BQkxFKFRFTEVQSE9ORV9OVU1CRVJfREVURUNUSU9OKQogICAgIHN0ZDo6dW5pcXVl
X3B0cjxTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyPiBtX3NlcnZpY2VzT3ZlcmxheUNvbnRyb2xs
ZXI7CiAjZW5kaWYKLQotICAgIFBhZ2VPdmVybGF5Q29udHJvbGxlciBtX3BhZ2VPdmVybGF5Q29u
dHJvbGxlcjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VPdmVybGF5LmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlT3ZlcmxheS5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWQyZTNkNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlT3ZlcmxheS5jcHAKQEAgLTAsMCAr
MSwxMTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2Vi
UGFnZU92ZXJsYXkuaCIKKworI2luY2x1ZGUgIldlYkZyYW1lLmgiCisjaW5jbHVkZSAiV2ViUGFn
ZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NMYXllci5oPgorI2luY2x1ZGUgPFdlYkNv
cmUvUGFnZU92ZXJsYXkuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFj
ZSBXZWJLaXQgeworCitQYXNzUmVmUHRyPFdlYlBhZ2VPdmVybGF5PiBXZWJQYWdlT3ZlcmxheTo6
Y3JlYXRlKFdlYlBhZ2VPdmVybGF5OjpDbGllbnQmIGNsaWVudCwgUGFnZU92ZXJsYXk6Ok92ZXJs
YXlUeXBlIG92ZXJsYXlUeXBlKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgV2ViUGFnZU92
ZXJsYXkoY2xpZW50LCBvdmVybGF5VHlwZSkpOworfQorCitXZWJQYWdlT3ZlcmxheTo6V2ViUGFn
ZU92ZXJsYXkoV2ViUGFnZU92ZXJsYXk6OkNsaWVudCYgY2xpZW50LCBQYWdlT3ZlcmxheTo6T3Zl
cmxheVR5cGUgb3ZlcmxheVR5cGUpCisgICAgOiBtX292ZXJsYXkoUGFnZU92ZXJsYXk6OmNyZWF0
ZSgqdGhpcywgb3ZlcmxheVR5cGUpKQorICAgICwgbV9jbGllbnQoY2xpZW50KQoreworfQorCitX
ZWJQYWdlT3ZlcmxheTo6fldlYlBhZ2VPdmVybGF5KCkKK3sKK30KKwordm9pZCBXZWJQYWdlT3Zl
cmxheTo6c2V0TmVlZHNEaXNwbGF5KGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCkKK3sKKyAgICBt
X292ZXJsYXktPnNldE5lZWRzRGlzcGxheShkaXJ0eVJlY3QpOworfQorCit2b2lkIFdlYlBhZ2VP
dmVybGF5OjpzZXROZWVkc0Rpc3BsYXkoKQoreworICAgIG1fb3ZlcmxheS0+c2V0TmVlZHNEaXNw
bGF5KCk7Cit9CisKK3ZvaWQgV2ViUGFnZU92ZXJsYXk6OmNsZWFyKCkKK3sKKyAgICBtX292ZXJs
YXktPmNsZWFyKCk7Cit9CisKK3ZvaWQgV2ViUGFnZU92ZXJsYXk6OnBhZ2VPdmVybGF5RGVzdHJv
eWVkKFBhZ2VPdmVybGF5JikKK3sKKyAgICBtX2NsaWVudC5wYWdlT3ZlcmxheURlc3Ryb3llZCgq
dGhpcyk7Cit9CisKK3ZvaWQgV2ViUGFnZU92ZXJsYXk6OndpbGxNb3ZlVG9QYWdlKFBhZ2VPdmVy
bGF5JiwgUGFnZSogcGFnZSkKK3sKKyAgICBtX2NsaWVudC53aWxsTW92ZVRvUGFnZSgqdGhpcywg
cGFnZSA/IFdlYlBhZ2U6OmZyb21Db3JlUGFnZShwYWdlKSA6IG51bGxwdHIpOworfQorCit2b2lk
IFdlYlBhZ2VPdmVybGF5OjpkaWRNb3ZlVG9QYWdlKFBhZ2VPdmVybGF5JiwgUGFnZSogcGFnZSkK
K3sKKyAgICBtX2NsaWVudC5kaWRNb3ZlVG9QYWdlKCp0aGlzLCBwYWdlID8gV2ViUGFnZTo6ZnJv
bUNvcmVQYWdlKHBhZ2UpIDogbnVsbHB0cik7Cit9CisKK3ZvaWQgV2ViUGFnZU92ZXJsYXk6OmRy
YXdSZWN0KFBhZ2VPdmVybGF5JiwgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBJbnRS
ZWN0JiBkaXJ0eVJlY3QpCit7CisgICAgbV9jbGllbnQuZHJhd1JlY3QoKnRoaXMsIGNvbnRleHQs
IGRpcnR5UmVjdCk7Cit9CisKK2Jvb2wgV2ViUGFnZU92ZXJsYXk6Om1vdXNlRXZlbnQoUGFnZU92
ZXJsYXkmLCBjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIGV2ZW50KQoreworICAgIHJldHVybiBt
X2NsaWVudC5tb3VzZUV2ZW50KCp0aGlzLCBldmVudCk7Cit9CisKK3ZvaWQgV2ViUGFnZU92ZXJs
YXk6OmRpZFNjcm9sbEZyYW1lKFBhZ2VPdmVybGF5JiwgRnJhbWUmIGZyYW1lKQoreworICAgIG1f
Y2xpZW50LmRpZFNjcm9sbEZyYW1lKCp0aGlzLCBXZWJGcmFtZTo6ZnJvbUNvcmVGcmFtZShmcmFt
ZSkpOworfQorCitib29sIFdlYlBhZ2VPdmVybGF5Ojpjb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0
ZVN0cmluZ1ZhbHVlRm9yUG9pbnQoUGFnZU92ZXJsYXkmLCBTdHJpbmcgYXR0cmlidXRlLCBGbG9h
dFBvaW50IHBhcmFtZXRlciwgU3RyaW5nJiB2YWx1ZSkKK3sKKyAgICByZXR1cm4gbV9jbGllbnQu
Y29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVTdHJpbmdWYWx1ZUZvclBvaW50KCp0aGlzLCBhdHRy
aWJ1dGUsIHBhcmFtZXRlciwgdmFsdWUpOworfQorCitib29sIFdlYlBhZ2VPdmVybGF5Ojpjb3B5
QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZUJvb2xWYWx1ZUZvclBvaW50KFBhZ2VPdmVybGF5JiwgU3Ry
aW5nIGF0dHJpYnV0ZSwgRmxvYXRQb2ludCBwYXJhbWV0ZXIsIGJvb2wmIHZhbHVlKQoreworICAg
IHJldHVybiBtX2NsaWVudC5jb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZUJvb2xWYWx1ZUZvclBv
aW50KCp0aGlzLCBhdHRyaWJ1dGUsIHBhcmFtZXRlciwgdmFsdWUpOworfQorCitWZWN0b3I8U3Ry
aW5nPiBXZWJQYWdlT3ZlcmxheTo6Y29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVOYW1lcyhQYWdl
T3ZlcmxheSYsIGJvb2wgcGFyYW1ldGVyaXplZE5hbWVzKQoreworICAgIHJldHVybiBtX2NsaWVu
dC5jb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZU5hbWVzKCp0aGlzLCBwYXJhbWV0ZXJpemVkTmFt
ZXMpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlT3ZlcmxheS5oIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VPdmVybGF5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uMDZkZGUxNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlT3ZlcmxheS5oCkBAIC0wLDAgKzEsOTIgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaWZuZGVmIFdlYlBhZ2VPdmVybGF5X2gKKyNkZWZpbmUgV2ViUGFnZU92ZXJs
YXlfaAorCisjaW5jbHVkZSAiQVBJT2JqZWN0LmgiCisjaW5jbHVkZSA8V2ViQ29yZS9GbG9hdFBv
aW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9JbnRSZWN0Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9Q
YWdlT3ZlcmxheS5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisKK25hbWVzcGFjZSBX
ZWJLaXQgeworCitjbGFzcyBXZWJGcmFtZTsKK2NsYXNzIFdlYlBhZ2U7CisKK2NsYXNzIFdlYlBh
Z2VPdmVybGF5IDogcHVibGljIEFQSTo6T2JqZWN0SW1wbDxBUEk6Ok9iamVjdDo6VHlwZTo6QnVu
ZGxlUGFnZU92ZXJsYXk+LCBwcml2YXRlIFdlYkNvcmU6OlBhZ2VPdmVybGF5OjpDbGllbnQgewor
cHVibGljOgorICAgIGNsYXNzIENsaWVudCB7CisgICAgcHJvdGVjdGVkOgorICAgICAgICB2aXJ0
dWFsIH5DbGllbnQoKSB7IH0KKworICAgIHB1YmxpYzoKKyAgICAgICAgdmlydHVhbCB2b2lkIHBh
Z2VPdmVybGF5RGVzdHJveWVkKFdlYlBhZ2VPdmVybGF5JikgPSAwOworICAgICAgICB2aXJ0dWFs
IHZvaWQgd2lsbE1vdmVUb1BhZ2UoV2ViUGFnZU92ZXJsYXkmLCBXZWJQYWdlKikgPSAwOworICAg
ICAgICB2aXJ0dWFsIHZvaWQgZGlkTW92ZVRvUGFnZShXZWJQYWdlT3ZlcmxheSYsIFdlYlBhZ2Uq
KSA9IDA7CisgICAgICAgIHZpcnR1YWwgdm9pZCBkcmF3UmVjdChXZWJQYWdlT3ZlcmxheSYsIFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGRpcnR5UmVj
dCkgPSAwOworICAgICAgICB2aXJ0dWFsIGJvb2wgbW91c2VFdmVudChXZWJQYWdlT3ZlcmxheSYs
IGNvbnN0IFdlYkNvcmU6OlBsYXRmb3JtTW91c2VFdmVudCYpID0gMDsKKyAgICAgICAgdmlydHVh
bCB2b2lkIGRpZFNjcm9sbEZyYW1lKFdlYlBhZ2VPdmVybGF5JiwgV2ViRnJhbWUqKSB7IH0KKwor
ICAgICAgICB2aXJ0dWFsIGJvb2wgY29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVTdHJpbmdWYWx1
ZUZvclBvaW50KFdlYlBhZ2VPdmVybGF5JiwgU3RyaW5nIC8qIGF0dHJpYnV0ZSAqLywgV2ViQ29y
ZTo6RmxvYXRQb2ludCAvKiBwYXJhbWV0ZXIgKi8sIFN0cmluZyYgdmFsdWUpIHsgcmV0dXJuIGZh
bHNlOyB9CisgICAgICAgIHZpcnR1YWwgYm9vbCBjb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZUJv
b2xWYWx1ZUZvclBvaW50KFdlYlBhZ2VPdmVybGF5JiwgU3RyaW5nIC8qIGF0dHJpYnV0ZSAqLywg
V2ViQ29yZTo6RmxvYXRQb2ludCAvKiBwYXJhbWV0ZXIgKi8sIGJvb2wmIHZhbHVlKSB7IHJldHVy
biBmYWxzZTsgfQorICAgICAgICB2aXJ0dWFsIFZlY3RvcjxTdHJpbmc+IGNvcHlBY2Nlc3NpYmls
aXR5QXR0cmlidXRlTmFtZXMoV2ViUGFnZU92ZXJsYXkmLCBib29sIC8qIHBhcmFtZXRlcml6ZWRO
YW1lcyAqLykgeyByZXR1cm4gVmVjdG9yPFN0cmluZz4oKTsgfQorICAgIH07CisKKyAgICBzdGF0
aWMgUGFzc1JlZlB0cjxXZWJQYWdlT3ZlcmxheT4gY3JlYXRlKENsaWVudCYsIFdlYkNvcmU6OlBh
Z2VPdmVybGF5OjpPdmVybGF5VHlwZSA9IFdlYkNvcmU6OlBhZ2VPdmVybGF5OjpPdmVybGF5VHlw
ZTo6Vmlldyk7CisgICAgdmlydHVhbCB+V2ViUGFnZU92ZXJsYXkoKTsKKworICAgIHZvaWQgc2V0
TmVlZHNEaXNwbGF5KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGRpcnR5UmVjdCk7CisgICAgdm9p
ZCBzZXROZWVkc0Rpc3BsYXkoKTsKKworICAgIHZvaWQgY2xlYXIoKTsKKworICAgIFdlYkNvcmU6
OlBhZ2VPdmVybGF5KiBjb3JlT3ZlcmxheSgpIGNvbnN0IHsgcmV0dXJuIG1fb3ZlcmxheS5nZXQo
KTsgfQorICAgIENsaWVudCYgY2xpZW50KCkgY29uc3QgeyByZXR1cm4gbV9jbGllbnQ7IH0KKwor
cHJpdmF0ZToKKyAgICBXZWJQYWdlT3ZlcmxheShDbGllbnQmLCBXZWJDb3JlOjpQYWdlT3Zlcmxh
eTo6T3ZlcmxheVR5cGUpOworCisgICAgLy8gV2ViQ29yZTo6UGFnZU92ZXJsYXk6OkNsaWVudAor
ICAgIHZpcnR1YWwgdm9pZCBwYWdlT3ZlcmxheURlc3Ryb3llZChXZWJDb3JlOjpQYWdlT3Zlcmxh
eSYpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCB3aWxsTW92ZVRvUGFnZShXZWJDb3JlOjpQ
YWdlT3ZlcmxheSYsIFdlYkNvcmU6OlBhZ2UqKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQg
ZGlkTW92ZVRvUGFnZShXZWJDb3JlOjpQYWdlT3ZlcmxheSYsIFdlYkNvcmU6OlBhZ2UqKSBvdmVy
cmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd1JlY3QoV2ViQ29yZTo6UGFnZU92ZXJsYXkmLCBX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBkaXJ0eVJl
Y3QpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBtb3VzZUV2ZW50KFdlYkNvcmU6OlBhZ2VP
dmVybGF5JiwgY29uc3QgV2ViQ29yZTo6UGxhdGZvcm1Nb3VzZUV2ZW50Jikgb3ZlcnJpZGU7Cisg
ICAgdmlydHVhbCB2b2lkIGRpZFNjcm9sbEZyYW1lKFdlYkNvcmU6OlBhZ2VPdmVybGF5JiwgV2Vi
Q29yZTo6RnJhbWUmKSBvdmVycmlkZTsKKworICAgIHZpcnR1YWwgYm9vbCBjb3B5QWNjZXNzaWJp
bGl0eUF0dHJpYnV0ZVN0cmluZ1ZhbHVlRm9yUG9pbnQoV2ViQ29yZTo6UGFnZU92ZXJsYXkmLCBT
dHJpbmcgLyogYXR0cmlidXRlICovLCBXZWJDb3JlOjpGbG9hdFBvaW50IC8qIHBhcmFtZXRlciAq
LywgU3RyaW5nJiB2YWx1ZSkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29sIGNvcHlBY2Nlc3Np
YmlsaXR5QXR0cmlidXRlQm9vbFZhbHVlRm9yUG9pbnQoV2ViQ29yZTo6UGFnZU92ZXJsYXkmLCBT
dHJpbmcgLyogYXR0cmlidXRlICovLCBXZWJDb3JlOjpGbG9hdFBvaW50IC8qIHBhcmFtZXRlciAq
LywgYm9vbCYgdmFsdWUpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgVmVjdG9yPFN0cmluZz4gY29w
eUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVOYW1lcyhXZWJDb3JlOjpQYWdlT3ZlcmxheSYsIGJvb2wg
LyogcGFyYW1ldGVyaXplZE5hbWVzICovKSBvdmVycmlkZTsKKworCisgICAgUmVmUHRyPFdlYkNv
cmU6OlBhZ2VPdmVybGF5PiBtX292ZXJsYXk7CisgICAgQ2xpZW50JiBtX2NsaWVudDsKK307CisK
K30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gV2ViUGFnZU92ZXJsYXlfaApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9GaW5kQ29udHJv
bGxlcklPUy5tbSBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvRmluZENv
bnRyb2xsZXJJT1MubW0KaW5kZXggMDkwN2JkZi4uYWYyY2UxNSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9GaW5kQ29udHJvbGxlcklPUy5tbQorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL0ZpbmRDb250cm9sbGVySU9T
Lm1tCkBAIC0zNiw2ICszNiw3IEBACiAjaW1wb3J0IDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dC5o
PgogI2ltcG9ydCA8V2ViQ29yZS9NYWluRnJhbWUuaD4KICNpbXBvcnQgPFdlYkNvcmUvUGFnZS5o
PgorI2ltcG9ydCA8V2ViQ29yZS9QYWdlT3ZlcmxheUNvbnRyb2xsZXIuaD4KIAogdXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7CiAKQEAgLTUyLDcgKzUzLDcgQEAgc3RhdGljIENvbG9yIGhpZ2hsaWdo
dENvbG9yKCkKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLXZvaWQgRmluZEluZGljYXRvck92ZXJs
YXlDbGllbnRJT1M6OmRyYXdSZWN0KFBhZ2VPdmVybGF5KiBvdmVybGF5LCBXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGRpcnR5UmVjdCkK
K3ZvaWQgRmluZEluZGljYXRvck92ZXJsYXlDbGllbnRJT1M6OmRyYXdSZWN0KFBhZ2VPdmVybGF5
JiBvdmVybGF5LCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIGRpcnR5
UmVjdCkKIHsKICAgICAvLyBGSVhNRTogU3VwcG9ydCBtdWx0aXBsZSB0ZXh0IHJlY3RzLgogCkBA
IC04NSwxMSArODYsMTEgQEAgYm9vbCBGaW5kQ29udHJvbGxlcjo6dXBkYXRlRmluZEluZGljYXRv
cihGcmFtZSYgc2VsZWN0ZWRGcmFtZSwgYm9vbCBpc1Nob3dpbmdPdmUKICAgICBtYXRjaFJlY3Qu
aW5mbGF0ZVkodG90YWxWZXJ0aWNhbE1hcmdpbik7CiAKICAgICBpZiAobV9maW5kSW5kaWNhdG9y
T3ZlcmxheSkKLSAgICAgICAgbV93ZWJQYWdlLT51bmluc3RhbGxQYWdlT3ZlcmxheShtX2ZpbmRJ
bmRpY2F0b3JPdmVybGF5LmdldCgpKTsKKyAgICAgICAgbV93ZWJQYWdlLT5jb3JlUGFnZSgpLT5w
YWdlT3ZlcmxheUNvbnRyb2xsZXIoKS51bmluc3RhbGxQYWdlT3ZlcmxheShtX2ZpbmRJbmRpY2F0
b3JPdmVybGF5LmdldCgpLCBQYWdlT3ZlcmxheTo6RmFkZU1vZGU6OkRvTm90RmFkZSk7CiAKICAg
ICBtX2ZpbmRJbmRpY2F0b3JPdmVybGF5Q2xpZW50ID0gc3RkOjptYWtlX3VuaXF1ZTxGaW5kSW5k
aWNhdG9yT3ZlcmxheUNsaWVudElPUz4oc2VsZWN0ZWRGcmFtZSk7Ci0gICAgbV9maW5kSW5kaWNh
dG9yT3ZlcmxheSA9IFBhZ2VPdmVybGF5OjpjcmVhdGUobV9maW5kSW5kaWNhdG9yT3ZlcmxheUNs
aWVudC5nZXQoKSwgUGFnZU92ZXJsYXk6Ok92ZXJsYXlUeXBlOjpEb2N1bWVudCk7Ci0gICAgbV93
ZWJQYWdlLT5pbnN0YWxsUGFnZU92ZXJsYXkobV9maW5kSW5kaWNhdG9yT3ZlcmxheSk7CisgICAg
bV9maW5kSW5kaWNhdG9yT3ZlcmxheSA9IFBhZ2VPdmVybGF5OjpjcmVhdGUoKm1fZmluZEluZGlj
YXRvck92ZXJsYXlDbGllbnQsIFBhZ2VPdmVybGF5OjpPdmVybGF5VHlwZTo6RG9jdW1lbnQpOwor
ICAgIG1fd2ViUGFnZS0+Y29yZVBhZ2UoKS0+cGFnZU92ZXJsYXlDb250cm9sbGVyKCkuaW5zdGFs
bFBhZ2VPdmVybGF5KG1fZmluZEluZGljYXRvck92ZXJsYXksIFBhZ2VPdmVybGF5OjpGYWRlTW9k
ZTo6RG9Ob3RGYWRlKTsKIAogICAgIG1fZmluZEluZGljYXRvck92ZXJsYXktPnNldEZyYW1lKG1h
dGNoUmVjdCk7CiAgICAgbV9maW5kSW5kaWNhdG9yT3ZlcmxheS0+c2V0TmVlZHNEaXNwbGF5KCk7
CkBAIC0xMDYsNyArMTA3LDcgQEAgdm9pZCBGaW5kQ29udHJvbGxlcjo6aGlkZUZpbmRJbmRpY2F0
b3IoKQogICAgIGlmICghbV9pc1Nob3dpbmdGaW5kSW5kaWNhdG9yKQogICAgICAgICByZXR1cm47
CiAKLSAgICBtX3dlYlBhZ2UtPnVuaW5zdGFsbFBhZ2VPdmVybGF5KG1fZmluZEluZGljYXRvck92
ZXJsYXkuZ2V0KCkpOworICAgIG1fd2ViUGFnZS0+Y29yZVBhZ2UoKS0+cGFnZU92ZXJsYXlDb250
cm9sbGVyKCkudW5pbnN0YWxsUGFnZU92ZXJsYXkobV9maW5kSW5kaWNhdG9yT3ZlcmxheS5nZXQo
KSwgUGFnZU92ZXJsYXk6OkZhZGVNb2RlOjpEb05vdEZhZGUpOwogICAgIG1fZmluZEluZGljYXRv
ck92ZXJsYXkgPSBudWxscHRyOwogICAgIG1faXNTaG93aW5nRmluZEluZGljYXRvciA9IGZhbHNl
OwogICAgIG1fZm91bmRTdHJpbmdNYXRjaEluZGV4ID0gLTE7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL0ZpbmRJbmRpY2F0b3JPdmVybGF5Q2xpZW50
SU9TLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL0ZpbmRJbmRpY2F0
b3JPdmVybGF5Q2xpZW50SU9TLmgKaW5kZXggMzEwMTc2Ny4uNDI5MjI4MSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9GaW5kSW5kaWNhdG9yT3Zlcmxh
eUNsaWVudElPUy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9pb3Mv
RmluZEluZGljYXRvck92ZXJsYXlDbGllbnRJT1MuaApAQCAtMjYsMTMgKzI2LDEzIEBACiAjaWZu
ZGVmIEZpbmRJbmRpY2F0b3JPdmVybGF5Q2xpZW50SU9TX2gKICNkZWZpbmUgRmluZEluZGljYXRv
ck92ZXJsYXlDbGllbnRJT1NfaAogCi0jaW1wb3J0ICJQYWdlT3ZlcmxheS5oIgogI2ltcG9ydCA8
V2ViQ29yZS9GcmFtZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHQuaD4KKyNp
bXBvcnQgPFdlYkNvcmUvUGFnZU92ZXJsYXkuaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLWNs
YXNzIEZpbmRJbmRpY2F0b3JPdmVybGF5Q2xpZW50SU9TIDogcHVibGljIFBhZ2VPdmVybGF5OjpD
bGllbnQgeworY2xhc3MgRmluZEluZGljYXRvck92ZXJsYXlDbGllbnRJT1MgOiBwdWJsaWMgV2Vi
Q29yZTo6UGFnZU92ZXJsYXk6OkNsaWVudCB7CiBwdWJsaWM6CiAgICAgRmluZEluZGljYXRvck92
ZXJsYXlDbGllbnRJT1MoV2ViQ29yZTo6RnJhbWUmIGZyYW1lKQogICAgICAgICA6IG1fZnJhbWUo
ZnJhbWUpCkBAIC00MCwxMSArNDAsMTEgQEAgcHVibGljOgogICAgIH0KIAogcHJpdmF0ZToKLSAg
ICB2aXJ0dWFsIHZvaWQgcGFnZU92ZXJsYXlEZXN0cm95ZWQoUGFnZU92ZXJsYXkqKSBvdmVycmlk
ZSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgd2lsbE1vdmVUb1dlYlBhZ2UoUGFnZU92ZXJsYXkqLCBX
ZWJQYWdlKikgb3ZlcnJpZGUgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGRpZE1vdmVUb1dlYlBhZ2Uo
UGFnZU92ZXJsYXkqLCBXZWJQYWdlKikgb3ZlcnJpZGUgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGRy
YXdSZWN0KFBhZ2VPdmVybGF5KiwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiwgY29uc3QgV2Vi
Q29yZTo6SW50UmVjdCYgZGlydHlSZWN0KSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIGJvb2wgbW91
c2VFdmVudChQYWdlT3ZlcmxheSosIGNvbnN0IFdlYk1vdXNlRXZlbnQmKSBvdmVycmlkZSB7IHJl
dHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgdm9pZCBwYWdlT3ZlcmxheURlc3Ryb3llZChXZWJD
b3JlOjpQYWdlT3ZlcmxheSYpIG92ZXJyaWRlIHsgfQorICAgIHZpcnR1YWwgdm9pZCB3aWxsTW92
ZVRvUGFnZShXZWJDb3JlOjpQYWdlT3ZlcmxheSYsIFdlYkNvcmU6OlBhZ2UqKSBvdmVycmlkZSB7
IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGlkTW92ZVRvUGFnZShXZWJDb3JlOjpQYWdlT3ZlcmxheSYs
IFdlYkNvcmU6OlBhZ2UqKSBvdmVycmlkZSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZHJhd1JlY3Qo
V2ViQ29yZTo6UGFnZU92ZXJsYXkmLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmLCBjb25zdCBX
ZWJDb3JlOjpJbnRSZWN0JiBkaXJ0eVJlY3QpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBt
b3VzZUV2ZW50KFdlYkNvcmU6OlBhZ2VPdmVybGF5JiwgY29uc3QgV2ViQ29yZTo6UGxhdGZvcm1N
b3VzZUV2ZW50Jikgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KIAogICAgIFdlYkNvcmU6OkZy
YW1lJiBtX2ZyYW1lOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9tYWMvUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWEuaCBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWEuaAppbmRl
eCAxY2I1MTAwLi5jNTJhM2JmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvbWFjL1JlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhLmgKKysrIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9SZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYS5o
CkBAIC02Nyw2ICs2Nyw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIHNldFJvb3RDb21w
b3NpdGluZ0xheWVyKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKSBvdmVycmlkZTsKICAgICB2aXJ0
dWFsIHZvaWQgc2NoZWR1bGVDb21wb3NpdGluZ0xheWVyRmx1c2goKSBvdmVycmlkZTsKICAgICB2
aXJ0dWFsIHZvaWQgc2NoZWR1bGVDb21wb3NpdGluZ0xheWVyRmx1c2hJbW1lZGlhdGVseSgpIG92
ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBhdHRhY2hWaWV3T3ZlcmxheUdyYXBoaWNzTGF5ZXIo
V2ViQ29yZTo6RnJhbWUqLCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKikgb3ZlcnJpZGU7CiAKICAg
ICB2aXJ0dWFsIHZvaWQgYWRkVHJhbnNhY3Rpb25DYWxsYmFja0lEKHVpbnQ2NF90IGNhbGxiYWNr
SUQpIG92ZXJyaWRlOwogCkBAIC0xMDcsNiArMTA4LDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFs
IGJvb2wgYWRqdXN0TGF5ZXJGbHVzaFRocm90dGxpbmcoV2ViQ29yZTo6TGF5ZXJGbHVzaFRocm90
dGxlU3RhdGU6OkZsYWdzKSBvdmVycmlkZTsKIAogICAgIHZvaWQgdXBkYXRlU2Nyb2xsZWRFeHBv
c2VkUmVjdCgpOworICAgIHZvaWQgdXBkYXRlUm9vdExheWVycygpOwogCiAgICAgdm9pZCBsYXll
ckZsdXNoVGltZXJGaXJlZChXZWJDb3JlOjpUaW1lcjxSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJl
YT4qKTsKICAgICB2b2lkIGZsdXNoTGF5ZXJzKCk7CkBAIC0xNjAsNiArMTYyLDkgQEAgcHJpdmF0
ZToKIAogICAgIHVpbnQ2NF90IG1fY3VycmVudFRyYW5zYWN0aW9uSUQ7CiAgICAgVmVjdG9yPFJl
bW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uOjpUcmFuc2FjdGlvbkNhbGxiYWNrSUQ+IG1fcGVuZGlu
Z0NhbGxiYWNrSURzOworCisgICAgV2ViQ29yZTo6R3JhcGhpY3NMYXllciogbV9jb250ZW50TGF5
ZXI7CisgICAgV2ViQ29yZTo6R3JhcGhpY3NMYXllciogbV92aWV3T3ZlcmxheVJvb3RMYXllcjsK
IH07CiAKIERSQVdJTkdfQVJFQV9UWVBFX0NBU1RTKFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVh
LCB0eXBlKCkgPT0gRHJhd2luZ0FyZWFUeXBlUmVtb3RlTGF5ZXJUcmVlKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvUmVtb3RlTGF5ZXJUcmVlRHJh
d2luZ0FyZWEubW0gYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1JlbW90
ZUxheWVyVHJlZURyYXdpbmdBcmVhLm1tCmluZGV4IDM3Yzg5NDcuLjU3OGQzOTcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvUmVtb3RlTGF5ZXJUcmVl
RHJhd2luZ0FyZWEubW0KKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21h
Yy9SZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYS5tbQpAQCAtNDAsNiArNDAsNyBAQAogI2ltcG9y
dCA8V2ViQ29yZS9GcmFtZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9GcmFtZVZpZXcuaD4KICNpbXBv
cnQgPFdlYkNvcmUvTWFpbkZyYW1lLmg+CisjaW1wb3J0IDxXZWJDb3JlL1BhZ2VPdmVybGF5Q29u
dHJvbGxlci5oPgogI2ltcG9ydCA8V2ViQ29yZS9SZW5kZXJMYXllckNvbXBvc2l0b3IuaD4KICNp
bXBvcnQgPFdlYkNvcmUvUmVuZGVyVmlldy5oPgogI2ltcG9ydCA8V2ViQ29yZS9TZXR0aW5ncy5o
PgpAQCAtNjYsNiArNjcsOCBAQCBSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYTo6UmVtb3RlTGF5
ZXJUcmVlRHJhd2luZ0FyZWEoV2ViUGFnZSYgd2ViUGFnZSwgY29uc3QgVwogICAgICwgbV9oYWRG
bHVzaERlZmVycmVkV2hpbGVXYWl0aW5nRm9yQmFja2luZ1N0b3JlU3dhcChmYWxzZSkKICAgICAs
IG1fZGlzcGxheVJlZnJlc2hNb25pdG9yc1RvTm90aWZ5KG51bGxwdHIpCiAgICAgLCBtX2N1cnJl
bnRUcmFuc2FjdGlvbklEKDApCisgICAgLCBtX2NvbnRlbnRMYXllcihudWxscHRyKQorICAgICwg
bV92aWV3T3ZlcmxheVJvb3RMYXllcihudWxscHRyKQogewogICAgIHdlYlBhZ2UuY29yZVBhZ2Uo
KS0+c2V0dGluZ3MoKS5zZXRGb3JjZUNvbXBvc2l0aW5nTW9kZSh0cnVlKTsKICNpZiBQTEFURk9S
TShJT1MpCkBAIC0xMTMsMTUgKzExNiwzMSBAQCB2b2lkIFJlbW90ZUxheWVyVHJlZURyYXdpbmdB
cmVhOjp3aWxsRGVzdHJveURpc3BsYXlSZWZyZXNoTW9uaXRvcihEaXNwbGF5UmVmcmVzaAogICAg
ICAgICBtX2Rpc3BsYXlSZWZyZXNoTW9uaXRvcnNUb05vdGlmeS0+cmVtb3ZlKHJlbW90ZU1vbml0
b3IpOwogfQogCi12b2lkIFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhOjpzZXRSb290Q29tcG9z
aXRpbmdMYXllcihHcmFwaGljc0xheWVyKiByb290TGF5ZXIpCit2b2lkIFJlbW90ZUxheWVyVHJl
ZURyYXdpbmdBcmVhOjp1cGRhdGVSb290TGF5ZXJzKCkKIHsKICAgICBWZWN0b3I8R3JhcGhpY3NM
YXllcio+IGNoaWxkcmVuOwotICAgIGlmIChyb290TGF5ZXIpIHsKLSAgICAgICAgY2hpbGRyZW4u
YXBwZW5kKHJvb3RMYXllcik7Ci0gICAgICAgIGNoaWxkcmVuLmFwcGVuZChtX3dlYlBhZ2UucGFn
ZU92ZXJsYXlDb250cm9sbGVyKCkudmlld092ZXJsYXlSb290TGF5ZXIoKSk7CisgICAgaWYgKG1f
Y29udGVudExheWVyKSB7CisgICAgICAgIGNoaWxkcmVuLmFwcGVuZChtX2NvbnRlbnRMYXllcik7
CisgICAgICAgIGlmIChtX3ZpZXdPdmVybGF5Um9vdExheWVyKQorICAgICAgICAgICAgY2hpbGRy
ZW4uYXBwZW5kKG1fdmlld092ZXJsYXlSb290TGF5ZXIpOwogICAgIH0KKwogICAgIG1fcm9vdExh
eWVyLT5zZXRDaGlsZHJlbihjaGlsZHJlbik7Cit9CisKK3ZvaWQgUmVtb3RlTGF5ZXJUcmVlRHJh
d2luZ0FyZWE6OmF0dGFjaFZpZXdPdmVybGF5R3JhcGhpY3NMYXllcihGcmFtZSogZnJhbWUsIEdy
YXBoaWNzTGF5ZXIqIHZpZXdPdmVybGF5Um9vdExheWVyKQoreworICAgIGlmICghZnJhbWUtPmlz
TWFpbkZyYW1lKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fdmlld092ZXJsYXlSb290TGF5
ZXIgPSB2aWV3T3ZlcmxheVJvb3RMYXllcjsKKyAgICB1cGRhdGVSb290TGF5ZXJzKCk7Cit9CiAK
K3ZvaWQgUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWE6OnNldFJvb3RDb21wb3NpdGluZ0xheWVy
KEdyYXBoaWNzTGF5ZXIqIHJvb3RMYXllcikKK3sKKyAgICBtX2NvbnRlbnRMYXllciA9IHJvb3RM
YXllcjsKKyAgICB1cGRhdGVSb290TGF5ZXJzKCk7CiAgICAgc2NoZWR1bGVDb21wb3NpdGluZ0xh
eWVyRmx1c2goKTsKIH0KIApAQCAtMjM0LDggKzI1Myw2IEBAIHZvaWQgUmVtb3RlTGF5ZXJUcmVl
RHJhd2luZ0FyZWE6OnVwZGF0ZVNjcm9sbGVkRXhwb3NlZFJlY3QoKQogI2VuZGlmCiAKICAgICBm
cmFtZVZpZXctPnNldEV4cG9zZWRSZWN0KG1fc2Nyb2xsZWRFeHBvc2VkUmVjdCk7Ci0KLSAgICBt
X3dlYlBhZ2UucGFnZU92ZXJsYXlDb250cm9sbGVyKCkuZGlkQ2hhbmdlRXhwb3NlZFJlY3QoKTsK
IH0KIAogVGlsZWRCYWNraW5nKiBSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYTo6bWFpbkZyYW1l
VGlsZWRCYWNraW5nKCkgY29uc3QKQEAgLTMyMSw4ICszMzgsMTMgQEAgdm9pZCBSZW1vdGVMYXll
clRyZWVEcmF3aW5nQXJlYTo6Zmx1c2hMYXllcnMoKQogCiAgICAgRmxvYXRSZWN0IHZpc2libGVS
ZWN0KEZsb2F0UG9pbnQoKSwgbV92aWV3U2l6ZSk7CiAgICAgdmlzaWJsZVJlY3QuaW50ZXJzZWN0
KG1fc2Nyb2xsZWRFeHBvc2VkUmVjdCk7Ci0gICAgbV93ZWJQYWdlLnBhZ2VPdmVybGF5Q29udHJv
bGxlcigpLmZsdXNoUGFnZU92ZXJsYXlMYXllcnModmlzaWJsZVJlY3QpOworCiAgICAgbV93ZWJQ
YWdlLm1haW5GcmFtZVZpZXcoKS0+Zmx1c2hDb21wb3NpdGluZ1N0YXRlSW5jbHVkaW5nU3ViZnJh
bWVzKCk7CisKKyAgICAvLyBCZWNhdXNlIG91ciB2aWV3LXJlbGF0aXZlIG92ZXJsYXkgcm9vdCBs
YXllciBpcyBub3QgYXR0YWNoZWQgdG8gdGhlIEZyYW1lVmlldydzIEdyYXBoaWNzTGF5ZXIgdHJl
ZSwgd2UgbmVlZCB0byBmbHVzaCBpdCBtYW51YWxseS4KKyAgICBpZiAobV92aWV3T3ZlcmxheVJv
b3RMYXllcikKKyAgICAgICAgbV92aWV3T3ZlcmxheVJvb3RMYXllci0+Zmx1c2hDb21wb3NpdGlu
Z1N0YXRlKHZpc2libGVSZWN0KTsKKwogICAgIG1fcm9vdExheWVyLT5mbHVzaENvbXBvc2l0aW5n
U3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCk7CiAKICAgICAvLyBGSVhNRTogTWluaW1pemUgdGhlc2Ug
dHJhbnNhY3Rpb25zIGlmIG5vdGhpbmcgY2hhbmdlZC4KQEAgLTQxMCw3ICs0MzIsNiBAQCB2b2lk
IFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhOjpkaWRVcGRhdGUoKQogdm9pZCBSZW1vdGVMYXll
clRyZWVEcmF3aW5nQXJlYTo6bWFpbkZyYW1lQ29udGVudFNpemVDaGFuZ2VkKGNvbnN0IEludFNp
emUmIGNvbnRlbnRzU2l6ZSkKIHsKICAgICBtX3Jvb3RMYXllci0+c2V0U2l6ZShjb250ZW50c1Np
emUpOwotICAgIG1fd2ViUGFnZS5wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKS5kaWRDaGFuZ2VEb2N1
bWVudFNpemUoKTsKIH0KIAogYm9vbCBSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYTo6bWFya0xh
eWVyc1ZvbGF0aWxlSW1tZWRpYXRlbHlJZlBvc3NpYmxlKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvU2VydmljZXNPdmVybGF5Q29udHJvbGxlci5t
bSBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvU2VydmljZXNPdmVybGF5
Q29udHJvbGxlci5tbQppbmRleCBmYjY4YjdhLi5mYTY2ODMzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1NlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIu
bW0KKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9TZXJ2aWNlc092
ZXJsYXlDb250cm9sbGVyLm1tCkBAIC00Miw2ICs0Miw3IEBACiAjaW1wb3J0IDxXZWJDb3JlL0dy
YXBoaWNzTGF5ZXIuaD4KICNpbXBvcnQgPFdlYkNvcmUvR3JhcGhpY3NMYXllckNBLmg+CiAjaW1w
b3J0IDxXZWJDb3JlL01haW5GcmFtZS5oPgorI2ltcG9ydCA8V2ViQ29yZS9QYWdlT3ZlcmxheUNv
bnRyb2xsZXIuaD4KICNpbXBvcnQgPFdlYkNvcmUvUGxhdGZvcm1DQUFuaW1hdGlvbk1hYy5oPgog
I2ltcG9ydCA8V2ViQ29yZS9Tb2Z0TGlua2luZy5oPgogCkBAIC0yMjUsMjMgKzIyNiwyMyBAQCBT
ZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjp+U2VydmljZXNPdmVybGF5Q29udHJvbGxlcigpCiAg
ICAgICAgIGhpZ2hsaWdodC0+aW52YWxpZGF0ZSgpOwogfQogCi12b2lkIFNlcnZpY2VzT3Zlcmxh
eUNvbnRyb2xsZXI6OnBhZ2VPdmVybGF5RGVzdHJveWVkKFBhZ2VPdmVybGF5KikKK3ZvaWQgU2Vy
dmljZXNPdmVybGF5Q29udHJvbGxlcjo6cGFnZU92ZXJsYXlEZXN0cm95ZWQoUGFnZU92ZXJsYXkm
KQogewogICAgIC8vIEJlZm9yZSB0aGUgb3ZlcmxheSBpcyBkZXN0cm95ZWQsIGl0IHNob3VsZCBo
YXZlIG1vdmVkIG91dCBvZiB0aGUgV2ViUGFnZSwKICAgICAvLyBhdCB3aGljaCBwb2ludCB3ZSBh
bHJlYWR5IGNsZWFyZWQgb3VyIGJhY2sgcG9pbnRlci4KICAgICBBU1NFUlQoIW1fc2VydmljZXNP
dmVybGF5KTsKIH0KIAotdm9pZCBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjp3aWxsTW92ZVRv
V2ViUGFnZShQYWdlT3ZlcmxheSosIFdlYlBhZ2UqIHdlYlBhZ2UpCit2b2lkIFNlcnZpY2VzT3Zl
cmxheUNvbnRyb2xsZXI6OndpbGxNb3ZlVG9QYWdlKFBhZ2VPdmVybGF5JiwgUGFnZSogcGFnZSkK
IHsKLSAgICBpZiAod2ViUGFnZSkKKyAgICBpZiAocGFnZSkKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgQVNTRVJUKG1fc2VydmljZXNPdmVybGF5KTsKICAgICBtX3NlcnZpY2VzT3ZlcmxheSA9IG51
bGxwdHI7CiB9CiAKLXZvaWQgU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6ZGlkTW92ZVRvV2Vi
UGFnZShQYWdlT3ZlcmxheSosIFdlYlBhZ2UqKQordm9pZCBTZXJ2aWNlc092ZXJsYXlDb250cm9s
bGVyOjpkaWRNb3ZlVG9QYWdlKFBhZ2VPdmVybGF5JiwgUGFnZSopCiB7CiB9CiAKQEAgLTQ0Nyw3
ICs0NDgsNyBAQCB2b2lkIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OmRldGVybWluZUFjdGl2
ZUhpZ2hsaWdodFRpbWVyRmlyZWQoVGltZXI8U2VydmljZQogICAgIGRldGVybWluZUFjdGl2ZUhp
Z2hsaWdodChtb3VzZUlzT3ZlckJ1dHRvbik7CiB9CiAKLXZvaWQgU2VydmljZXNPdmVybGF5Q29u
dHJvbGxlcjo6ZHJhd1JlY3QoUGFnZU92ZXJsYXkqIG92ZXJsYXksIEdyYXBoaWNzQ29udGV4dCYg
Z3JhcGhpY3NDb250ZXh0LCBjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpCit2b2lkIFNlcnZpY2Vz
T3ZlcmxheUNvbnRyb2xsZXI6OmRyYXdSZWN0KFBhZ2VPdmVybGF5JiBvdmVybGF5LCBHcmFwaGlj
c0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KQogewog
fQogCkBAIC01ODMsNyArNTg0LDcgQEAgdm9pZCBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpk
aWRSZWJ1aWxkUG90ZW50aWFsSGlnaGxpZ2h0cygpCiB7CiAgICAgaWYgKG1fcG90ZW50aWFsSGln
aGxpZ2h0cy5pc0VtcHR5KCkpIHsKICAgICAgICAgaWYgKG1fc2VydmljZXNPdmVybGF5KQotICAg
ICAgICAgICAgbV93ZWJQYWdlLnVuaW5zdGFsbFBhZ2VPdmVybGF5KG1fc2VydmljZXNPdmVybGF5
KTsKKyAgICAgICAgICAgIG1fd2ViUGFnZS5jb3JlUGFnZSgpLT5wYWdlT3ZlcmxheUNvbnRyb2xs
ZXIoKS51bmluc3RhbGxQYWdlT3ZlcmxheShtX3NlcnZpY2VzT3ZlcmxheSwgUGFnZU92ZXJsYXk6
OkZhZGVNb2RlOjpEb05vdEZhZGUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC02MDEs
OSArNjAyLDkgQEAgdm9pZCBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpjcmVhdGVPdmVybGF5
SWZOZWVkZWQoKQogICAgIGlmIChtX3NlcnZpY2VzT3ZlcmxheSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgUmVmUHRyPFBhZ2VPdmVybGF5PiBvdmVybGF5ID0gUGFnZU92ZXJsYXk6OmNyZWF0ZSh0
aGlzLCBQYWdlT3ZlcmxheTo6T3ZlcmxheVR5cGU6OkRvY3VtZW50KTsKKyAgICBSZWZQdHI8UGFn
ZU92ZXJsYXk+IG92ZXJsYXkgPSBQYWdlT3ZlcmxheTo6Y3JlYXRlKCp0aGlzLCBQYWdlT3Zlcmxh
eTo6T3ZlcmxheVR5cGU6OkRvY3VtZW50KTsKICAgICBtX3NlcnZpY2VzT3ZlcmxheSA9IG92ZXJs
YXkuZ2V0KCk7Ci0gICAgbV93ZWJQYWdlLmluc3RhbGxQYWdlT3ZlcmxheShvdmVybGF5LnJlbGVh
c2UoKSwgUGFnZU92ZXJsYXk6OkZhZGVNb2RlOjpEb05vdEZhZGUpOworICAgIG1fd2ViUGFnZS5j
b3JlUGFnZSgpLT5wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKS5pbnN0YWxsUGFnZU92ZXJsYXkob3Zl
cmxheS5yZWxlYXNlKCksIFBhZ2VPdmVybGF5OjpGYWRlTW9kZTo6RG9Ob3RGYWRlKTsKIH0KIAog
VmVjdG9yPFJlZlB0cjxSYW5nZT4+IFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OnRlbGVwaG9u
ZU51bWJlclJhbmdlc0ZvckZvY3VzZWRGcmFtZSgpCkBAIC03MTcsMTMgKzcxOCwxMyBAQCB2b2lk
IFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OmRldGVybWluZUFjdGl2ZUhpZ2hsaWdodChib29s
JiBtb3VzZUlzT3ZlckFjdGl2ZQogICAgICAgICBtX2FjdGl2ZUhpZ2hsaWdodCA9IG1fbmV4dEFj
dGl2ZUhpZ2hsaWdodC5yZWxlYXNlKCk7CiAKICAgICAgICAgaWYgKG1fYWN0aXZlSGlnaGxpZ2h0
KSB7Ci0gICAgICAgICAgICBtX3NlcnZpY2VzT3ZlcmxheS0+bGF5ZXIoKS0+YWRkQ2hpbGQobV9h
Y3RpdmVIaWdobGlnaHQtPmxheWVyKCkpOworICAgICAgICAgICAgbV9zZXJ2aWNlc092ZXJsYXkt
PmxheWVyKCkuYWRkQ2hpbGQobV9hY3RpdmVIaWdobGlnaHQtPmxheWVyKCkpOwogICAgICAgICAg
ICAgbV9hY3RpdmVIaWdobGlnaHQtPmZhZGVJbigpOwogICAgICAgICB9CiAgICAgfQogfQogCi1i
b29sIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6Om1vdXNlRXZlbnQoUGFnZU92ZXJsYXkqLCBj
b25zdCBXZWJNb3VzZUV2ZW50JiBldmVudCkKK2Jvb2wgU2VydmljZXNPdmVybGF5Q29udHJvbGxl
cjo6bW91c2VFdmVudChQYWdlT3ZlcmxheSYsIGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgZXZl
bnQpCiB7CiAgICAgbV9tb3VzZVBvc2l0aW9uID0gbV93ZWJQYWdlLmNvcmVQYWdlKCktPm1haW5G
cmFtZSgpLnZpZXcoKS0+cm9vdFZpZXdUb0NvbnRlbnRzKGV2ZW50LnBvc2l0aW9uKCkpOwogCkBA
IC03MzEsMTMgKzczMiwxMyBAQCBib29sIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6Om1vdXNl
RXZlbnQoUGFnZU92ZXJsYXkqLCBjb25zdCBXZWJNb3VzZUV2ZW50JiBldgogICAgIGRldGVybWlu
ZUFjdGl2ZUhpZ2hsaWdodChtb3VzZUlzT3ZlckFjdGl2ZUhpZ2hsaWdodEJ1dHRvbik7CiAKICAg
ICAvLyBDYW5jZWwgdGhlIHBvdGVudGlhbCBjbGljayBpZiBhbnkgYnV0dG9uIG90aGVyIHRoYW4g
dGhlIGxlZnQgYnV0dG9uIGNoYW5nZXMgc3RhdGUsIGFuZCBpZ25vcmUgdGhlIGV2ZW50LgotICAg
IGlmIChldmVudC5idXR0b24oKSAhPSBXZWJNb3VzZUV2ZW50OjpMZWZ0QnV0dG9uKSB7CisgICAg
aWYgKGV2ZW50LmJ1dHRvbigpICE9IE1vdXNlQnV0dG9uOjpMZWZ0QnV0dG9uKSB7CiAgICAgICAg
IG1fY3VycmVudE1vdXNlRG93bk9uQnV0dG9uSGlnaGxpZ2h0ID0gbnVsbHB0cjsKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIH0KIAogICAgIC8vIElmIHRoZSBtb3VzZSBsaWZ0ZWQgd2hpbGUg
c3RpbGwgb3ZlciB0aGUgaGlnaGxpZ2h0IGJ1dHRvbiB0aGF0IGl0IHdlbnQgZG93biBvbiwgdGhl
biB0aGF0IGlzIGEgY2xpY2suCi0gICAgaWYgKGV2ZW50LnR5cGUoKSA9PSBXZWJFdmVudDo6TW91
c2VVcCkgeworICAgIGlmIChldmVudC50eXBlKCkgPT0gUGxhdGZvcm1FdmVudDo6TW91c2VSZWxl
YXNlZCkgewogICAgICAgICBSZWZQdHI8SGlnaGxpZ2h0PiBtb3VzZURvd25IaWdobGlnaHQgPSBt
X2N1cnJlbnRNb3VzZURvd25PbkJ1dHRvbkhpZ2hsaWdodDsKICAgICAgICAgbV9jdXJyZW50TW91
c2VEb3duT25CdXR0b25IaWdobGlnaHQgPSBudWxscHRyOwogCkBAIC03NTIsNyArNzUzLDcgQEAg
Ym9vbCBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjptb3VzZUV2ZW50KFBhZ2VPdmVybGF5Kiwg
Y29uc3QgV2ViTW91c2VFdmVudCYgZXYKICAgICB9CiAKICAgICAvLyBJZiB0aGUgbW91c2UgbW92
ZWQgb3V0c2lkZSBvZiB0aGUgYnV0dG9uIHRyYWNraW5nIGEgcG90ZW50aWFsIGNsaWNrLCBzdG9w
IHRyYWNraW5nIHRoZSBjbGljay4KLSAgICBpZiAoZXZlbnQudHlwZSgpID09IFdlYkV2ZW50OjpN
b3VzZU1vdmUpIHsKKyAgICBpZiAoZXZlbnQudHlwZSgpID09IFBsYXRmb3JtRXZlbnQ6Ok1vdXNl
TW92ZWQpIHsKICAgICAgICAgaWYgKG1fY3VycmVudE1vdXNlRG93bk9uQnV0dG9uSGlnaGxpZ2h0
ICYmIG1vdXNlSXNPdmVyQWN0aXZlSGlnaGxpZ2h0QnV0dG9uKQogICAgICAgICAgICAgcmV0dXJu
IHRydWU7CiAKQEAgLTc2MSw3ICs3NjIsNyBAQCBib29sIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xs
ZXI6Om1vdXNlRXZlbnQoUGFnZU92ZXJsYXkqLCBjb25zdCBXZWJNb3VzZUV2ZW50JiBldgogICAg
IH0KIAogICAgIC8vIElmIHRoZSBtb3VzZSB3ZW50IGRvd24gb3ZlciB0aGUgYWN0aXZlIGhpZ2hs
aWdodCdzIGJ1dHRvbiwgdHJhY2sgdGhpcyBhcyBhIHBvdGVudGlhbCBjbGljay4KLSAgICBpZiAo
ZXZlbnQudHlwZSgpID09IFdlYkV2ZW50OjpNb3VzZURvd24pIHsKKyAgICBpZiAoZXZlbnQudHlw
ZSgpID09IFBsYXRmb3JtRXZlbnQ6Ok1vdXNlUHJlc3NlZCkgewogICAgICAgICBpZiAobV9hY3Rp
dmVIaWdobGlnaHQgJiYgbW91c2VJc092ZXJBY3RpdmVIaWdobGlnaHRCdXR0b24pIHsKICAgICAg
ICAgICAgIG1fY3VycmVudE1vdXNlRG93bk9uQnV0dG9uSGlnaGxpZ2h0ID0gbV9hY3RpdmVIaWdo
bGlnaHQ7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTc3Myw5ICs3NzQsOSBAQCBib29s
IFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6Om1vdXNlRXZlbnQoUGFnZU92ZXJsYXkqLCBjb25z
dCBXZWJNb3VzZUV2ZW50JiBldgogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBTZXJ2aWNl
c092ZXJsYXlDb250cm9sbGVyOjpkaWRTY3JvbGxGcmFtZShQYWdlT3ZlcmxheSosIEZyYW1lKiBm
cmFtZSkKK3ZvaWQgU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6ZGlkU2Nyb2xsRnJhbWUoUGFn
ZU92ZXJsYXkmLCBGcmFtZSYgZnJhbWUpCiB7Ci0gICAgaWYgKGZyYW1lLT5pc01haW5GcmFtZSgp
KQorICAgIGlmIChmcmFtZS5pc01haW5GcmFtZSgpKQogICAgICAgICByZXR1cm47CiAKICAgICBi
dWlsZFBob25lTnVtYmVySGlnaGxpZ2h0cygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9UaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYS5oIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9UaWxlZENvcmVBbmltYXRpb25E
cmF3aW5nQXJlYS5oCmluZGV4IGI4MWE0YTQuLjllNWFiZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0Fy
ZWEuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1RpbGVkQ29y
ZUFuaW1hdGlvbkRyYXdpbmdBcmVhLmgKQEAgLTg0LDYgKzg0LDggQEAgcHJpdmF0ZToKICAgICB2
aXJ0dWFsIHZvaWQgdmlld1N0YXRlRGlkQ2hhbmdlKFdlYkNvcmU6OlZpZXdTdGF0ZTo6RmxhZ3Mg
Y2hhbmdlZCwgYm9vbCB3YW50c0RpZFVwZGF0ZVZpZXdTdGF0ZSkgb3ZlcnJpZGU7CiAgICAgdm9p
ZCBkaWRVcGRhdGVWaWV3U3RhdGVUaW1lckZpcmVkKCk7CiAKKyAgICB2aXJ0dWFsIHZvaWQgYXR0
YWNoVmlld092ZXJsYXlHcmFwaGljc0xheWVyKFdlYkNvcmU6OkZyYW1lKiwgV2ViQ29yZTo6R3Jh
cGhpY3NMYXllciopIG92ZXJyaWRlOworCiAgICAgLy8gV2ViQ29yZTo6TGF5ZXJGbHVzaFNjaGVk
dWxlckNsaWVudAogICAgIHZpcnR1YWwgYm9vbCBmbHVzaExheWVycygpIG92ZXJyaWRlOwogCkBA
IC0xMDYsNiArMTA4LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHVwZGF0ZUxheWVySG9zdGluZ0Nv
bnRleHQoKTsKIAogICAgIHZvaWQgc2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIoQ0FMYXllciAqKTsK
KyAgICB2b2lkIHVwZGF0ZVJvb3RMYXllcnMoKTsKIAogICAgIFdlYkNvcmU6OlRpbGVkQmFja2lu
ZyogbWFpbkZyYW1lVGlsZWRCYWNraW5nKCkgY29uc3Q7CiAgICAgdm9pZCB1cGRhdGVEZWJ1Z0lu
Zm9MYXllcihib29sIHNob3dMYXllcik7CkBAIC0xMzgsNiArMTQxLDggQEAgcHJpdmF0ZToKICAg
ICBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtX3RyYW5zZm9ybTsKIAogICAgIFJ1bkxv
b3A6OlRpbWVyPFRpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhPiBtX3NlbmREaWRVcGRhdGVW
aWV3U3RhdGVUaW1lcjsKKworICAgIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqIG1fdmlld092ZXJs
YXlSb290TGF5ZXI7CiB9OwogCiBEUkFXSU5HX0FSRUFfVFlQRV9DQVNUUyhUaWxlZENvcmVBbmlt
YXRpb25EcmF3aW5nQXJlYSwgdHlwZSgpID09IERyYXdpbmdBcmVhVHlwZVRpbGVkQ29yZUFuaW1h
dGlvbik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFj
L1RpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhLm1tIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL21hYy9UaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYS5tbQppbmRleCBl
Nzc1OTE5Li4yOThiMDIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvbWFjL1RpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhLm1tCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0Fy
ZWEubW0KQEAgLTUxLDYgKzUxLDcgQEAKICNpbXBvcnQgPFdlYkNvcmUvU2Nyb2xsYmFyVGhlbWUu
aD4KICNpbXBvcnQgPFdlYkNvcmUvU2V0dGluZ3MuaD4KICNpbXBvcnQgPFdlYkNvcmUvVGlsZWRC
YWNraW5nLmg+CisjaW1wb3J0IDxXZWJDb3JlL1dlYkFjdGlvbkRpc2FibGluZ0NBTGF5ZXJEZWxl
Z2F0ZS5oPgogI2ltcG9ydCA8d3RmL01haW5UaHJlYWQuaD4KIAogI2lmIEVOQUJMRShBU1lOQ19T
Q1JPTExJTkcpCkBAIC03NiwxMCArNzcsMTIgQEAgVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0Fy
ZWE6OlRpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhKFdlYlBhZ2UmIHdlYlBhZ2UsIGMKICAg
ICAsIG1fc2Nyb2xsZWRFeHBvc2VkUmVjdChGbG9hdFJlY3Q6OmluZmluaXRlUmVjdCgpKQogICAg
ICwgbV90cmFuc2llbnRab29tU2NhbGUoMSkKICAgICAsIG1fc2VuZERpZFVwZGF0ZVZpZXdTdGF0
ZVRpbWVyKFJ1bkxvb3A6Om1haW4oKSwgdGhpcywgJlRpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdB
cmVhOjpkaWRVcGRhdGVWaWV3U3RhdGVUaW1lckZpcmVkKQorICAgICwgbV92aWV3T3ZlcmxheVJv
b3RMYXllcihudWxscHRyKQogewogICAgIG1fd2ViUGFnZS5jb3JlUGFnZSgpLT5zZXR0aW5ncygp
LnNldEZvcmNlQ29tcG9zaXRpbmdNb2RlKHRydWUpOwogCiAgICAgbV9ob3N0aW5nTGF5ZXIgPSBb
Q0FMYXllciBsYXllcl07CisgICAgW21faG9zdGluZ0xheWVyIHNldERlbGVnYXRlOltXZWJBY3Rp
b25EaXNhYmxpbmdDQUxheWVyRGVsZWdhdGUgc2hhcmVkXV07CiAgICAgW21faG9zdGluZ0xheWVy
IHNldEZyYW1lOm1fd2ViUGFnZS5ib3VuZHMoKV07CiAgICAgW21faG9zdGluZ0xheWVyIHNldE9w
YXF1ZTpZRVNdOwogICAgIFttX2hvc3RpbmdMYXllciBzZXRHZW9tZXRyeUZsaXBwZWQ6WUVTXTsK
QEAgLTIwNCw5ICsyMDcsMjggQEAgdm9pZCBUaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYTo6
dXBkYXRlUHJlZmVyZW5jZXMoY29uc3QgV2ViUHJlZmVyZW5jZXNTdG9yZSYKICAgICB1cGRhdGVE
ZWJ1Z0luZm9MYXllcihzaG93VGlsZWRTY3JvbGxpbmdJbmRpY2F0b3IpOwogfQogCit2b2lkIFRp
bGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhOjp1cGRhdGVSb290TGF5ZXJzKCkKK3sKKyAgICBp
ZiAoIW1fcm9vdExheWVyKSB7CisgICAgICAgIFttX2hvc3RpbmdMYXllciBzZXRTdWJsYXllcnM6
QFsgXV07CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBbbV9ob3N0aW5nTGF5ZXIgc2V0
U3VibGF5ZXJzOm1fdmlld092ZXJsYXlSb290TGF5ZXIgPyBAWyBtX3Jvb3RMYXllci5nZXQoKSwg
bV92aWV3T3ZlcmxheVJvb3RMYXllci0+cGxhdGZvcm1MYXllcigpIF0gOiBAWyBtX3Jvb3RMYXll
ci5nZXQoKSBdXTsKK30KKwordm9pZCBUaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYTo6YXR0
YWNoVmlld092ZXJsYXlHcmFwaGljc0xheWVyKEZyYW1lKiBmcmFtZSwgR3JhcGhpY3NMYXllciog
dmlld092ZXJsYXlSb290TGF5ZXIpCit7CisgICAgaWYgKCFmcmFtZS0+aXNNYWluRnJhbWUoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgbV92aWV3T3ZlcmxheVJvb3RMYXllciA9IHZpZXdPdmVy
bGF5Um9vdExheWVyOworICAgIHVwZGF0ZVJvb3RMYXllcnMoKTsKK30KKwogdm9pZCBUaWxlZENv
cmVBbmltYXRpb25EcmF3aW5nQXJlYTo6bWFpbkZyYW1lQ29udGVudFNpemVDaGFuZ2VkKGNvbnN0
IEludFNpemUmIHNpemUpCiB7Ci0gICAgbV93ZWJQYWdlLnBhZ2VPdmVybGF5Q29udHJvbGxlcigp
LmRpZENoYW5nZURvY3VtZW50U2l6ZSgpOworCiB9CiAKIHZvaWQgVGlsZWRDb3JlQW5pbWF0aW9u
RHJhd2luZ0FyZWE6OnVwZGF0ZUludHJpbnNpY0NvbnRlbnRTaXplSWZOZWVkZWQoKQpAQCAtMjgz
LDcgKzMwNSwxMCBAQCBib29sIFRpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhOjpmbHVzaExh
eWVycygpCiAKICAgICBGbG9hdFJlY3QgdmlzaWJsZVJlY3QgPSBbbV9ob3N0aW5nTGF5ZXIgZnJh
bWVdOwogICAgIHZpc2libGVSZWN0LmludGVyc2VjdChtX3Njcm9sbGVkRXhwb3NlZFJlY3QpOwot
ICAgIG1fd2ViUGFnZS5wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKS5mbHVzaFBhZ2VPdmVybGF5TGF5
ZXJzKHZpc2libGVSZWN0KTsKKworICAgIC8vIEJlY2F1c2Ugb3VyIHZpZXctcmVsYXRpdmUgb3Zl
cmxheSByb290IGxheWVyIGlzIG5vdCBhdHRhY2hlZCB0byB0aGUgbWFpbiBHcmFwaGljc0xheWVy
IHRyZWUsIHdlIG5lZWQgdG8gZmx1c2ggaXQgbWFudWFsbHkuCisgICAgaWYgKG1fdmlld092ZXJs
YXlSb290TGF5ZXIpCisgICAgICAgIG1fdmlld092ZXJsYXlSb290TGF5ZXItPmZsdXNoQ29tcG9z
aXRpbmdTdGF0ZSh2aXNpYmxlUmVjdCk7CiAKICAgICBib29sIHJldHVyblZhbHVlID0gbV93ZWJQ
YWdlLm1haW5GcmFtZVZpZXcoKS0+Zmx1c2hDb21wb3NpdGluZ1N0YXRlSW5jbHVkaW5nU3ViZnJh
bWVzKCk7CiAjaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykKQEAgLTM2Myw4ICszODgsNiBAQCB2
b2lkIFRpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhOjp1cGRhdGVTY3JvbGxlZEV4cG9zZWRS
ZWN0KCkKICNlbmRpZgogCiAgICAgZnJhbWVWaWV3LT5zZXRFeHBvc2VkUmVjdChtX3Njcm9sbGVk
RXhwb3NlZFJlY3QpOwotCi0gICAgbV93ZWJQYWdlLnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLmRp
ZENoYW5nZUV4cG9zZWRSZWN0KCk7CiB9CiAKIHZvaWQgVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2lu
Z0FyZWE6OnVwZGF0ZUdlb21ldHJ5KGNvbnN0IEludFNpemUmIHZpZXdTaXplLCBjb25zdCBJbnRT
aXplJiBsYXllclBvc2l0aW9uKQpAQCAtNDY0LDEyICs0ODcsMTIgQEAgdm9pZCBUaWxlZENvcmVB
bmltYXRpb25EcmF3aW5nQXJlYTo6c2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIoQ0FMYXllciAqbGF5
ZXIpCiAgICAgW0NBVHJhbnNhY3Rpb24gYmVnaW5dOwogICAgIFtDQVRyYW5zYWN0aW9uIHNldERp
c2FibGVBY3Rpb25zOllFU107CiAKLSAgICBbbV9ob3N0aW5nTGF5ZXIgc2V0U3VibGF5ZXJzOmxh
eWVyID8gQFsgbGF5ZXIsIG1fd2ViUGFnZS5wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKS52aWV3T3Zl
cmxheVJvb3RMYXllcigpLT5wbGF0Zm9ybUxheWVyKCkgXSA6IEBbIF1dOwotCiAgICAgYm9vbCBo
YWRSb290TGF5ZXIgPSAhIW1fcm9vdExheWVyOwogICAgIG1fcm9vdExheWVyID0gbGF5ZXI7CiAg
ICAgW21fcm9vdExheWVyIHNldFN1YmxheWVyVHJhbnNmb3JtOm1fdHJhbnNmb3JtXTsKIAorICAg
IHVwZGF0ZVJvb3RMYXllcnMoKTsKKwogICAgIGlmIChoYWRSb290TGF5ZXIgIT0gISFsYXllcikK
ICAgICAgICAgbV9sYXllckhvc3RpbmdDb250ZXh0LT5zZXRSb290TGF5ZXIobGF5ZXIgPyBtX2hv
c3RpbmdMYXllci5nZXQoKSA6IDApOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvbWFjL1dLQWNjZXNzaWJpbGl0eVdlYlBhZ2VPYmplY3RNYWMubW0gYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dLQWNjZXNzaWJpbGl0eVdlYlBh
Z2VPYmplY3RNYWMubW0KaW5kZXggMzgzMzliYS4uNTRkZDQ0NCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XS0FjY2Vzc2liaWxpdHlXZWJQYWdlT2Jq
ZWN0TWFjLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV0tB
Y2Nlc3NpYmlsaXR5V2ViUGFnZU9iamVjdE1hYy5tbQpAQCAtNDAsNiArNDAsNyBAQAogI2ltcG9y
dCA8V2ViQ29yZS9GcmFtZVZpZXcuaD4KICNpbXBvcnQgPFdlYkNvcmUvTWFpbkZyYW1lLmg+CiAj
aW1wb3J0IDxXZWJDb3JlL1BhZ2UuaD4KKyNpbXBvcnQgPFdlYkNvcmUvUGFnZU92ZXJsYXlDb250
cm9sbGVyLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1Njcm9sbFZpZXcuaD4KICNpbXBvcnQgPFdlYkNv
cmUvU2Nyb2xsYmFyLmg+CiAjaW1wb3J0IDxXZWJLaXRTeXN0ZW1JbnRlcmZhY2UuaD4KQEAgLTc1
LDE5ICs3NiwxMyBAQCB1c2luZyBuYW1lc3BhY2UgV2ViS2l0OwogCiAtIChOU0FycmF5ICopYWNj
ZXNzaWJpbGl0eVBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVOYW1lcwogewotICAgIFdLUmV0YWluUHRy
PFdLQXJyYXlSZWY+IHJlc3VsdCA9IGFkb3B0V0sobV9wYWdlLT5wYWdlT3ZlcmxheUNvbnRyb2xs
ZXIoKS5jb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZXNOYW1lcyh0cnVlKSk7Ci0gICAgaWYgKCFy
ZXN1bHQpCisgICAgVmVjdG9yPFN0cmluZz4gcmVzdWx0ID0gbV9wYWdlLT5jb3JlUGFnZSgpLT5w
YWdlT3ZlcmxheUNvbnRyb2xsZXIoKS5jb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZXNOYW1lcyh0
cnVlKTsKKyAgICBpZiAocmVzdWx0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIG5pbDsKICAg
ICAKICAgICBOU011dGFibGVBcnJheSAqbmFtZXMgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXldOwot
ICAgIHNpemVfdCBjb3VudCA9IFdLQXJyYXlHZXRTaXplKHJlc3VsdC5nZXQoKSk7Ci0gICAgZm9y
IChzaXplX3QgayA9IDA7IGsgPCBjb3VudDsgaysrKSB7Ci0gICAgICAgIFdLVHlwZVJlZiBpdGVt
ID0gV0tBcnJheUdldEl0ZW1BdEluZGV4KHJlc3VsdC5nZXQoKSwgayk7Ci0gICAgICAgIGlmICh0
b0ltcGwoaXRlbSktPnR5cGUoKSA9PSBBUEk6OlN0cmluZzo6QVBJVHlwZSkgewotICAgICAgICAg
ICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBuYW1lID0gYWRvcHRDRihXS1N0cmluZ0NvcHlDRlN0
cmluZyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAoV0tTdHJpbmdSZWYpaXRlbSkpOwotICAgICAgICAg
ICAgW25hbWVzIGFkZE9iamVjdDooTlNTdHJpbmcgKiluYW1lLmdldCgpXTsKLSAgICAgICAgfQot
ICAgIH0KKyAgICBmb3IgKGF1dG8mIG5hbWUgOiByZXN1bHQpCisgICAgICAgIFtuYW1lcyBhZGRP
YmplY3Q6KE5TU3RyaW5nICopbmFtZV07CiAgICAgCiAgICAgcmV0dXJuIG5hbWVzOwogfQpAQCAt
MTY0LDIzICsxNTksMjYgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKIAogLSAoaWQpYWNjZXNz
aWJpbGl0eUF0dHJpYnV0ZVZhbHVlOihOU1N0cmluZyAqKWF0dHJpYnV0ZSBmb3JQYXJhbWV0ZXI6
KGlkKXBhcmFtZXRlcgogewotICAgIFdLUmV0YWluUHRyPFdLVHlwZVJlZj4gcGFnZU92ZXJsYXlQ
YXJhbWV0ZXIgPSAwOwotICAgIAotICAgIGlmIChbcGFyYW1ldGVyIGlzS2luZE9mQ2xhc3M6W05T
VmFsdWUgY2xhc3NdXSAmJiBzdHJjbXAoWyhOU1ZhbHVlKilwYXJhbWV0ZXIgb2JqQ1R5cGVdLCBA
ZW5jb2RlKE5TUG9pbnQpKSA9PSAwKSB7Ci0gICAgICAgIE5TUG9pbnQgcG9pbnQgPSBbc2VsZiBj
b252ZXJ0U2NyZWVuUG9pbnRUb1Jvb3RWaWV3OlsoTlNWYWx1ZSAqKXBhcmFtZXRlciBwb2ludFZh
bHVlXV07Ci0gICAgICAgIHBhZ2VPdmVybGF5UGFyYW1ldGVyID0gV0tQb2ludENyZWF0ZShXS1Bv
aW50TWFrZShwb2ludC54LCBwb2ludC55KSk7Ci0gICAgfQotICAgIAotICAgIFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPiBhdHRyaWJ1dGVSZWYgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aENG
U3RyaW5nKChDRlN0cmluZ1JlZilhdHRyaWJ1dGUpKTsKLSAgICBXS1JldGFpblB0cjxXS1R5cGVS
ZWY+IHJlc3VsdCA9IGFkb3B0V0sobV9wYWdlLT5wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKS5jb3B5
QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlKGF0dHJpYnV0ZVJlZi5nZXQoKSwgcGFnZU92ZXJs
YXlQYXJhbWV0ZXIuZ2V0KCkpKTsKLSAgICBpZiAoIXJlc3VsdCkKKyAgICBXZWJDb3JlOjpGbG9h
dFBvaW50IHBhZ2VPdmVybGF5UG9pbnQ7CisgICAgaWYgKFtwYXJhbWV0ZXIgaXNLaW5kT2ZDbGFz
czpbTlNWYWx1ZSBjbGFzc11dICYmICFzdHJjbXAoWyhOU1ZhbHVlICopcGFyYW1ldGVyIG9iakNU
eXBlXSwgQGVuY29kZShOU1BvaW50KSkpCisgICAgICAgIHBhZ2VPdmVybGF5UG9pbnQgPSBbc2Vs
ZiBjb252ZXJ0U2NyZWVuUG9pbnRUb1Jvb3RWaWV3OlsoTlNWYWx1ZSAqKXBhcmFtZXRlciBwb2lu
dFZhbHVlXV07CisgICAgZWxzZQogICAgICAgICByZXR1cm4gbmlsOwotICAgIAotICAgIGlmICh0
b0ltcGwocmVzdWx0LmdldCgpKS0+dHlwZSgpID09IEFQSTo6U3RyaW5nOjpBUElUeXBlKQotICAg
ICAgICByZXR1cm4gQ0ZCcmlkZ2luZ1JlbGVhc2UoV0tTdHJpbmdDb3B5Q0ZTdHJpbmcoa0NGQWxs
b2NhdG9yRGVmYXVsdCwgKFdLU3RyaW5nUmVmKXJlc3VsdC5nZXQoKSkpOwotICAgIGlmICh0b0lt
cGwocmVzdWx0LmdldCgpKS0+dHlwZSgpID09IEFQSTo6Qm9vbGVhbjo6QVBJVHlwZSkKLSAgICAg
ICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRoQm9vbDpXS0Jvb2xlYW5HZXRWYWx1ZShzdGF0
aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KHJlc3VsdC5nZXQoKSkpXTsKLSAgICAKKworICAgIGlmIChb
YXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpAIkFYRGF0YURldGVjdG9yRXhpc3RzQXRQb2ludCJd
IHx8IFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOkAiQVhEaWRTaG93RGF0YURldGVjdG9yTWVu
dUF0UG9pbnQiXSkgeworICAgICAgICBib29sIHZhbHVlOworICAgICAgICBpZiAoIW1fcGFnZS0+
Y29yZVBhZ2UoKS0+cGFnZU92ZXJsYXlDb250cm9sbGVyKCkuY29weUFjY2Vzc2liaWxpdHlBdHRy
aWJ1dGVCb29sVmFsdWVGb3JQb2ludChhdHRyaWJ1dGUsIHBhZ2VPdmVybGF5UG9pbnQsIHZhbHVl
KSkKKyAgICAgICAgICAgIHJldHVybiBuaWw7CisgICAgICAgIHJldHVybiBbTlNOdW1iZXIgbnVt
YmVyV2l0aEJvb2w6dmFsdWVdOworICAgIH0KKworICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxU
b1N0cmluZzpAIkFYRGF0YURldGVjdG9yVHlwZUF0UG9pbnQiXSkgeworICAgICAgICBTdHJpbmcg
dmFsdWU7CisgICAgICAgIGlmICghbV9wYWdlLT5jb3JlUGFnZSgpLT5wYWdlT3ZlcmxheUNvbnRy
b2xsZXIoKS5jb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVN0cmluZ1ZhbHVlRm9yUG9pbnQoYXR0
cmlidXRlLCBwYWdlT3ZlcmxheVBvaW50LCB2YWx1ZSkpCisgICAgICAgICAgICByZXR1cm4gbmls
OworICAgICAgICByZXR1cm4gW05TU3RyaW5nIHN0cmluZ1dpdGhTdHJpbmc6dmFsdWVdOworICAg
IH0KKwogICAgIHJldHVybiBuaWw7CiB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>239042</attachid>
            <date>2014-10-01 12:49:48 -0700</date>
            <delta_ts>2014-10-01 13:46:48 -0700</delta_ts>
            <desc>on mainframe instead of page</desc>
            <filename>pageoverlay.diff</filename>
            <type>text/plain</type>
            <size>193273</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNv
cmUvQ01ha2VMaXN0cy50eHQKaW5kZXggNmRhZGMzMC4uZTFlOGZlNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKQEAgLTE5NDAsNiArMTk0MCw4IEBAIHNldChXZWJDb3JlX1NPVVJDRVMKICAgICBwYWdl
L1BhZ2VDb25zb2xlQ2xpZW50LmNwcAogICAgIHBhZ2UvUGFnZUdyb3VwLmNwcAogICAgIHBhZ2Uv
UGFnZUdyb3VwTG9hZERlZmVycmVyLmNwcAorICAgIHBhZ2UvUGFnZU92ZXJsYXkuY3BwCisgICAg
cGFnZS9QYWdlT3ZlcmxheUNvbnRyb2xsZXIuY3BwCiAgICAgcGFnZS9QYWdlU2VyaWFsaXplci5j
cHAKICAgICBwYWdlL1BhZ2VUaHJvdHRsZXIuY3BwCiAgICAgcGFnZS9QYWdlVmlzaWJpbGl0eVN0
YXRlLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nCmluZGV4IGRkZDk3YTEuLjZjZmY5ZDggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNDQgQEAKKzIwMTQtMDktMzAgIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBs
ZS5jb20+CisKKyAgICAgICAgTW92ZSBQYWdlT3ZlcmxheVtDb250cm9sbGVyXSB0byBXZWJDb3Jl
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzcxNjQK
KyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzE4NTA4MjU4PgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICog
V2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnZjeHBy
b2ovV2ViQ29yZS52Y3hwcm9qLmZpbHRlcnM6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qOgorICAgICAgICBNYWtlIHRoZSBhcHByb3ByaWF0ZSBidWlsZCBzeXN0
ZW0gY2hhbmdlcy4KKworICAgICAgICAqIFdlYkNvcmUuZXhwLmluOgorICAgICAgICBFeHBvcnQg
dGhlIG5ldyBQYWdlT3ZlcmxheVtDb250cm9sbGVyXSBzeW1ib2xzIGZyb20gV2ViQ29yZS4KKwor
ICAgICAgICAqIGxvYWRlci9FbXB0eUNsaWVudHMuaDoKKyAgICAgICAgKiBwYWdlL0Nocm9tZUNs
aWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21lQ2xpZW50Ojpkb2N1bWVudE92ZXJsYXlM
YXllckZvckZyYW1lKTogRGVsZXRlZC4KKyAgICAgICAgQWRkIGF0dGFjaFZpZXdPdmVybGF5R3Jh
cGhpY3NMYXllciwgd2hpY2ggYWxsb3dzIFBhZ2VPdmVybGF5Q29udHJvbGxlcgorICAgICAgICB0
byBwdXNoIHZpZXctcmVsYXRpdmUgcGFnZSBvdmVybGF5IHJvb3QgbGF5ZXJzIGRvd24gdG8gV2Vi
S2l0IHRvIGJlCisgICAgICAgIGluc3RhbGxlZCBqdXN0IGluc2lkZSB0aGUgdmlldy4KKworICAg
ICAgICBSZW1vdmUgZG9jdW1lbnRPdmVybGF5TGF5ZXJGb3JGcmFtZSBiZWNhdXNlIFJlbmRlckxh
eWVyQ29tcG9zaXRvciBjYW4gbm93CisgICAgICAgIHRhbGsgZGlyZWN0bHkgdG8gUGFnZU92ZXJs
YXlDb250cm9sbGVyLgorCisgICAgICAgICogcGFnZS9FdmVudEhhbmRsZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpoYW5kbGVNb3VzZVByZXNzRXZlbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjptb3VzZU1vdmVkKToKKyAgICAgICAgKFdlYkNvcmU6
OkV2ZW50SGFuZGxlcjo6aGFuZGxlTW91c2VSZWxlYXNlRXZlbnQpOgorICAgICAgICBXaGVuIHRo
ZSBtb3VzZSBpcyBtb3ZlZCwgcHJlc3NlZCwgb3IgcmVsZWFzZWQsIGdpdmUgUGFnZU92ZXJsYXlD
b250cm9sbGVyCisgICAgICAgIHRoZSBmaXJzdCBzaG90IGF0IGhhbmRsaW5nIHRoZSBldmVudC4K
KworICAgICAgICAqIHBhZ2UvRnJhbWVWaWV3LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1l
Vmlldzo6c2V0RnJhbWVSZWN0KToKKyAgICAgICAgSW5mb3JtIFBhZ2VPdmVybGF5Q29udHJvbGxl
ciB0aGF0IHRoZSBtYWluIEZyYW1lVmlldydzIHNpemUgY2hhbmdlZCwKKyAgICAgICAgc28gaXQg
Y2FuIHVwZGF0ZSB0aGUgc2l6ZSBvZiB2aWV3LXJlbGF0aXZlIG92ZXJsYXlzLgorCisgICAgICAg
IChXZWJDb3JlOjpGcmFtZVZpZXc6OnNldENvbnRlbnRzU2l6ZSk6CisgICAgICAgIEluZm9ybSBQ
YWdlT3ZlcmxheUNvbnRyb2xsZXIgdGhhdCB0aGUgbWFpbiBGcmFtZVZpZXcncyBjb250ZW50cyBz
aXplIGNoYW5nZWQsCisgICAgICAgIHNvIGl0IGNhbiB1cGRhdGUgdGhlIHNpemUgb2YgZG9jdW1l
bnQtcmVsYXRpdmUgb3ZlcmxheXMuCisKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6c2V0
Rml4ZWRWaXNpYmxlQ29udGVudFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3Ojpk
aWRDaGFuZ2VTY3JvbGxPZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjpzY3Jv
bGxUbyk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OndoZWVsRXZlbnQpOgorICAgICAg
ICBJbmZvcm0gUGFnZU92ZXJsYXlDb250cm9sbGVyIHRoYXQgc29tZXRoaW5nIHNjcm9sbGVkLgor
CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OnNldEV4cG9zZWRSZWN0KToKKyAgICAgICAg
SW5mb3JtIFBhZ2VPdmVybGF5Q29udHJvbGxlciB0aGF0IHRoZSBleHBvc2VkIHJlY3QgY2hhbmdl
ZCwgc28gaXQgY2FuIHB1c2gKKyAgICAgICAgdGhlIG5ldyBleHBvc2VkIHJlY3QgZG93biB0byB0
aGUgb3ZlcmxheXMuCisKKyAgICAgICAgKiBwYWdlL0ZyYW1lVmlldy5oOgorICAgICAgICBBZGQg
ZGlkQ2hhbmdlU2Nyb2xsT2Zmc2V0LgorCisgICAgICAgICogcGFnZS9NYWluRnJhbWUuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6TWFpbkZyYW1lOjpNYWluRnJhbWUpOgorICAgICAgICAqIHBhZ2Uv
TWFpbkZyYW1lLmg6CisgICAgICAgIEtlZXAgb25lIFBhZ2VPdmVybGF5Q29udHJvbGxlciBwZXIg
TWFpbkZyYW1lLgorCisgICAgICAgICogcGFnZS9QYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlBhZ2U6OnNldERldmljZVNjYWxlRmFjdG9yKToKKyAgICAgICAgSW5mb3JtIFBhZ2VPdmVybGF5
Q29udHJvbGxlciB0aGF0IHRoZSBkZXZpY2Ugc2NhbGUgZmFjdG9yIGNoYW5nZWQuCisKKyAgICAg
ICAgKFdlYkNvcmU6OlBhZ2U6OnNldFNlc3Npb25JRCk6CisgICAgICAgIFJlbW92ZSBhIGJsYW5r
IGxpbmUuCisKKyAgICAgICAgKiBwYWdlL1BhZ2VPdmVybGF5LmNwcDogUmVuYW1lZCBmcm9tIFNv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9QYWdlT3ZlcmxheS5jcHAuCisgICAgICAg
IE1vdmUgUGFnZU92ZXJsYXkgZnJvbSBXZWJLaXQyIHRvIFdlYkNvcmUuCisgICAgICAgIEEgZmV3
IG92ZXJhcmNoaW5nIGNoYW5nZXMgdGhhdCBJIHdvbid0IGRldGFpbCBpbiBlYWNoIHBsYWNlOgor
ICAgICAgICAgICAgLSByZWZlcmVuY2VzIGluc3RlYWQgb2YgcG9pbnRlcnMgaW4gbWFueSBwbGFj
ZXMKKyAgICAgICAgICAgIC0gV2ViQ29yZSB0eXBlcyBpbnN0ZWFkIG9mIFdlYktpdDIgdHlwZXMg
ZXZlcnl3aGVyZQorCisgICAgICAgIChXZWJDb3JlOjpQYWdlT3ZlcmxheTo6Ym91bmRzKToKKyAg
ICAgICAgSXQgaXMgcG9zc2libGUgdG8gaW5zdGFsbCBhbiBvdmVybGF5IGJlZm9yZSB3ZSBoYXZl
IGEgRnJhbWVWaWV3LgorICAgICAgICBXZSB3aWxsIGV2ZW50dWFsbHkgZ2V0IGEgdmlldy9jb250
ZW50cyBzaXplIGNoYW5nZWQgbm90aWZpY2F0aW9uIGFuZCB0cnkgYWdhaW4uCisKKyAgICAgICAg
KFdlYkNvcmU6OlBhZ2VPdmVybGF5Ojpjb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVN0cmluZ1Zh
bHVlRm9yUG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGFnZU92ZXJsYXk6OmNvcHlBY2Nlc3Np
YmlsaXR5QXR0cmlidXRlQm9vbFZhbHVlRm9yUG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGFn
ZU92ZXJsYXk6OmNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlTmFtZXMpOgorICAgICAgICBTcGxp
dCBjb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZSBpbnRvICJTdHJpbmdWYWx1ZUZvclBvaW50IiBh
bmQgIkJvb2xWYWx1ZUZvclBvaW50IgorICAgICAgICB2YXJpYW50cywgYmVjYXVzZSB3ZSBkb24n
dCBoYXZlIGFueXRoaW5nIGxpa2UgV0tUeXBlUmVmIGhlcmUuCisKKyAgICAgICAgKiBwYWdlL1Bh
Z2VPdmVybGF5Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvUGFnZU92ZXJsYXkuaC4KKyAgICAgICAgTWFrZSBQYWdlT3ZlcmxheSBhIG5vcm1hbCBSZWZD
b3VudGVkIG9iamVjdCBpbnN0ZWFkIG9mIGEgV2ViS2l0MiBBUEkgb2JqZWN0LgorICAgICAgICBM
ZWF2ZSBhIGNvbW1lbnQgbm90aW5nIHRoYXQgd2Ugc2hvdWxkIG1vdmUgdGhlIFBhZ2VPdmVybGF5
J3MgR3JhcGhpY3NMYXllcgorICAgICAgICB0byBQYWdlT3ZlcmxheSBpbnN0ZWFkIG9mIGEgbWFw
IG9uIFBhZ2VPdmVybGF5Q29udHJvbGxlci4KKworICAgICAgICAqIHBhZ2UvUGFnZU92ZXJsYXlD
b250cm9sbGVyLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9QYWdlT3ZlcmxheUNvbnRyb2xsZXIuY3BwLgorICAgICAgICBNb3ZlIFBhZ2VPdmVybGF5
Q29udHJvbGxlciBmcm9tIFdlYktpdDIgdG8gV2ViQ29yZS4KKyAgICAgICAgQSBmZXcgb3ZlcmFy
Y2hpbmcgY2hhbmdlcyB0aGF0IEkgd29uJ3QgZGV0YWlsIGluIGVhY2ggcGxhY2U6CisgICAgICAg
ICAgICAtIHJlZmVyZW5jZXMgaW5zdGVhZCBvZiBwb2ludGVycyBpbiBtYW55IHBsYWNlcworICAg
ICAgICAgICAgLSBXZWJDb3JlIHR5cGVzIGluc3RlYWQgb2YgV2ViS2l0MiB0eXBlcyBldmVyeXdo
ZXJlCisKKyAgICAgICAgTGVhdmUgYSBGSVhNRSB0aGF0IGRpZENoYW5nZVNldHRpbmdzIGlzIG5v
dCBjdXJyZW50bHkgY2FsbGVkIHdoZW4gc2V0dGluZ3MgY2hhbmdlLgorICAgICAgICBUaGlzIGlz
IG5vdCBhIHByb2JsZW0gZm9yIG5vcm1hbCB1c2Ugb2Ygb3ZlcmxheXMsIG9ubHkgZm9yIGR5bmFt
aWNhbGx5IGNoYW5naW5nCisgICAgICAgIGxheWVyIGJvcmRlci9yZXBhaW50IGNvdW50ZXIgc2V0
dGluZ3MuCisKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VPdmVybGF5Q29udHJvbGxlcjo6UGFnZU92
ZXJsYXlDb250cm9sbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VPdmVybGF5Q29udHJvbGxl
cjo6Y3JlYXRlUm9vdExheWVyc0lmTmVlZGVkKToKKyAgICAgICAgV2Ugd2lsbCBub3cgbGF6aWx5
IGluaXRpYWxpemUgdGhlIHJvb3QgbGF5ZXJzIHdoZW4gd2UgZmlyc3QgdHJ5IHRvIHVzZSB0aGVt
LAorICAgICAgICBiZWNhdXNlIG90aGVyd2lzZSB3ZSB0cnkgdG8gY3JlYXRlIHRoZW0gYmVmb3Jl
IHRoZSBDaHJvbWVDbGllbnQncyBHcmFwaGljc0xheWVyRmFjdG9yeQorICAgICAgICBpcyBob29r
ZWQgdXAsIGluIHNvbWUgY2FzZXMsIGFuZCB0aGF0IGNhbiBjYXVzZSB1cyB0byBjcmVhdGUgdGhl
IHdyb25nIGtpbmQgb2YgR3JhcGhpY3NMYXllcnMuCisKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VP
dmVybGF5Q29udHJvbGxlcjo6aW5zdGFsbFBhZ2VPdmVybGF5KToKKyAgICAgICAgRW50ZXIgY29t
cG9zaXRpbmcgbW9kZSB3aGVuIGluc3RhbGxpbmcgYSBQYWdlT3ZlcmxheS4KKworICAgICAgICAo
V2ViQ29yZTo6UGFnZU92ZXJsYXlDb250cm9sbGVyOjpkaWRDaGFuZ2VTZXR0aW5ncyk6CisgICAg
ICAgIExlYXZlIGEgRklYTUUgYWJvdXQgYSBmdXR1cmUgaW1wcm92ZW1lbnQgdG8gZGlkQ2hhbmdl
U2V0dGluZ3MuCisKKyAgICAgICAgKiBwYWdlL1BhZ2VPdmVybGF5Q29udHJvbGxlci5oOiBSZW5h
bWVkIGZyb20gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1BhZ2VPdmVybGF5Q29u
dHJvbGxlci5oLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllckNs
aWVudC5oOgorICAgICAgICBBZGQgd3RmL0ZvcndhcmQuaCwgYmVjYXVzZSBHcmFwaGljc0xheWVy
Q2xpZW50LmggdXNlcyBTdHJpbmcuCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnNjcm9sbFRvKToKKyAgICAgICAg
SW5mb3JtIFBhZ2VPdmVybGF5Q29udHJvbGxlciB0aGF0IHNvbWV0aGluZyBzY3JvbGxlZC4KKwor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpoYXNBbnlBZGRpdGlvbmFsQ29tcG9zaXRl
ZExheWVycyk6CisgICAgICAgIE1ha2UgaGFzQW55QWRkaXRpb25hbENvbXBvc2l0ZWRMYXllcnMg
cmV0dXJuIHRydWUgaWYgdGhlcmUgYXJlIGFueSBwYWdlIG92ZXJsYXlzLAorICAgICAgICBiZWNh
dXNlIHdlIG5lZWQgdG8gYXZvaWQgZmFsbGluZyBvdXQgb2YgY29tcG9zaXRpbmcgbW9kZSBpZiB3
ZSBzdGlsbCBoYXZlCisgICAgICAgIHBhZ2Ugb3ZlcmxheXMuCisKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6dXBkYXRlQ29tcG9zaXRpbmdMYXllcnMpOgorICAgICAg
ICBFbnRlciBjb21wb3NpdGluZyBtb2RlIGlmIHdlIGhhdmUgcGFnZSBvdmVybGF5cy4KKworICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjphcHBlbmRPdmVybGF5TGF5ZXJz
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6YXBw
ZW5kRG9jdW1lbnRPdmVybGF5TGF5ZXJzKToKKyAgICAgICAgUmVuYW1lIGFwcGVuZE92ZXJsYXlM
YXllcnMgLT4gYXBwZW5kRG9jdW1lbnRPdmVybGF5TGF5ZXJzLgorCisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OmF0dGFjaFJvb3RMYXllcik6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OmRldGFjaFJvb3RMYXllcik6CisgICAgICAgIEF0
dGFjaC9kZXRhY2ggdGhlIHZpZXcgb3ZlcmxheSByb290IGxheWVyIHdoZW4gYXR0YWNoaW5nL2Rl
dGFjaGluZyB0aGUKKyAgICAgICAgbm9ybWFsIGNvbXBvc2l0aW5nIHJvb3QgbGF5ZXIuCisKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6cm9vdExheWVyQXR0YWNobWVu
dENoYW5nZWQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuaDoK
KwogMjAxNC0wOS0zMCAgRXJpYyBDYXJsc29uICA8ZXJpYy5jYXJsc29uQGFwcGxlLmNvbT4KIAog
ICAgICAgICBbTWFjXSBNZWRpYVBsYXllclByaXZhdGVRVEtpdCBzaG91bGQgbm90IHVzZSBGcmFt
ZVZpZXcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluIGIvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KaW5kZXggOTQzYzMxMS4uNjE3YTdiYSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KKysrIGIvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS5leHAuaW4KQEAgLTE4Nyw2ICsxODcsMTMgQEAgX19aTjdXZWJDb3JlMTFNZW1vcnlDYWNo
ZTE4cmVzb3VyY2VGb3JSZXF1ZXN0RVJLTlNfMTVSZXNvdXJjZVJlcXVlc3RFTlNfOVNlc3Npb24K
IF9fWk43V2ViQ29yZTExTWVtb3J5Q2FjaGUxOWdldE9yaWdpbnNXaXRoQ2FjaGVFUk4zV1RGN0hh
c2hTZXRJTlMxXzZSZWZQdHJJTlNfMTRTZWN1cml0eU9yaWdpbkVFRU5TXzE4U2VjdXJpdHlPcmln
aW5IYXNoRU5TMV8xMEhhc2hUcmFpdHNJUzVfRUVFRQogX19aTjdXZWJDb3JlMTFNZW1vcnlDYWNo
ZTIwcmVtb3ZlSW1hZ2VGcm9tQ2FjaGVFUktOU18zVVJMRVJLTjNXVEY2U3RyaW5nRQogX19aTjdX
ZWJDb3JlMTFNZW1vcnlDYWNoZTI1cmVtb3ZlUmVzb3VyY2VzV2l0aE9yaWdpbkVQTlNfMTRTZWN1
cml0eU9yaWdpbkUKK19fWk43V2ViQ29yZTExUGFnZU92ZXJsYXkxNXNldE5lZWRzRGlzcGxheUVS
S05TXzdJbnRSZWN0RQorX19aTjdXZWJDb3JlMTFQYWdlT3ZlcmxheTE1c2V0TmVlZHNEaXNwbGF5
RXYKK19fWk43V2ViQ29yZTExUGFnZU92ZXJsYXkyMHN0b3BGYWRlT3V0QW5pbWF0aW9uRXYKK19f
Wk43V2ViQ29yZTExUGFnZU92ZXJsYXk1Y2xlYXJFdgorX19aTjdXZWJDb3JlMTFQYWdlT3Zlcmxh
eTVsYXllckV2CitfX1pON1dlYkNvcmUxMVBhZ2VPdmVybGF5NmNyZWF0ZUVSTlMwXzZDbGllbnRF
TlMwXzExT3ZlcmxheVR5cGVFCitfX1pON1dlYkNvcmUxMVBhZ2VPdmVybGF5OHNldEZyYW1lRU5T
XzdJbnRSZWN0RQogX19aTjdXZWJDb3JlMTFTUUxSZXN1bHRPa0UKIF9fWk43V2ViQ29yZTExVVJM
V2l0aERhdGFFUDZOU0RhdGFQNU5TVVJMCiBfX1pON1dlYkNvcmUxMWdldFVSTEJ5dGVzRVBLN19f
Q0ZVUkxSTjNXVEY2VmVjdG9ySWNMbTUxMkVOUzNfMTVDcmFzaE9uT3ZlcmZsb3dFRUUKQEAgLTkw
OSw2ICs5MTYsMTIgQEAgX19aTjdXZWJDb3JlMjFNZW1vcnlQcmVzc3VyZUhhbmRsZXI3aW5zdGFs
bEV2CiBfX1pON1dlYkNvcmUyMU5ldHdvcmtTdG9yYWdlU2Vzc2lvbjIxZGVmYXVsdFN0b3JhZ2VT
ZXNzaW9uRXYKIF9fWk43V2ViQ29yZTIxTmV0d29ya1N0b3JhZ2VTZXNzaW9uMjVzd2l0Y2hUb05l
d1Rlc3RpbmdTZXNzaW9uRXYKIF9fWk43V2ViQ29yZTIxTmV0d29ya1N0b3JhZ2VTZXNzaW9uMjhj
cmVhdGVQcml2YXRlQnJvd3NpbmdTZXNzaW9uRVJLTjNXVEY2U3RyaW5nRQorX19aTjdXZWJDb3Jl
MjFQYWdlT3ZlcmxheUNvbnRyb2xsZXIxOGluc3RhbGxQYWdlT3ZlcmxheUVOM1dURjEwUGFzc1Jl
ZlB0cklOU18xMVBhZ2VPdmVybGF5RUVFTlMzXzhGYWRlTW9kZUUKK19fWk43V2ViQ29yZTIxUGFn
ZU92ZXJsYXlDb250cm9sbGVyMjB1bmluc3RhbGxQYWdlT3ZlcmxheUVQTlNfMTFQYWdlT3Zlcmxh
eUVOUzFfOEZhZGVNb2RlRQorX19aTjdXZWJDb3JlMjFQYWdlT3ZlcmxheUNvbnRyb2xsZXIyMHZp
ZXdPdmVybGF5Um9vdExheWVyRXYKK19fWk43V2ViQ29yZTIxUGFnZU92ZXJsYXlDb250cm9sbGVy
MzJjb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZXNOYW1lc0ViCitfX1pON1dlYkNvcmUyMVBhZ2VP
dmVybGF5Q29udHJvbGxlcjQzY29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVCb29sVmFsdWVGb3JQ
b2ludEVOM1dURjZTdHJpbmdFTlNfMTBGbG9hdFBvaW50RVJiCitfX1pON1dlYkNvcmUyMVBhZ2VP
dmVybGF5Q29udHJvbGxlcjQ1Y29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVTdHJpbmdWYWx1ZUZv
clBvaW50RU4zV1RGNlN0cmluZ0VOU18xMEZsb2F0UG9pbnRFUlMyXwogX19aTjdXZWJDb3JlMjFQ
bGF0Zm9ybUtleWJvYXJkRXZlbnQyNGRpc2FtYmlndWF0ZUtleURvd25FdmVudEVOU18xM1BsYXRm
b3JtRXZlbnQ0VHlwZUViCiBfX1pON1dlYkNvcmUyMVJlbW90ZUNvbW1hbmRMaXN0ZW5lcjZjcmVh
dGVFUk5TXzI3UmVtb3RlQ29tbWFuZExpc3RlbmVyQ2xpZW50RQogX19aTjdXZWJDb3JlMjFSZXNv
dXJjZUxvYWRTY2hlZHVsZXIyMHNlcnZlUGVuZGluZ1JlcXVlc3RzRU5TXzIwUmVzb3VyY2VMb2Fk
UHJpb3JpdHlFCkBAIC0xNjAzLDYgKzE2MTYsOCBAQCBfX1pOSzdXZWJDb3JlMTFIaXN0b3J5SXRl
bThjaGlsZHJlbkV2CiBfX1pOSzdXZWJDb3JlMTFIaXN0b3J5SXRlbThyZWZlcnJlckV2CiBfX1pO
SzdXZWJDb3JlMTFIaXN0b3J5SXRlbTl1cmxTdHJpbmdFdgogX19aTks3V2ViQ29yZTExSGlzdG9y
eUl0ZW05dmlld1N0YXRlRXYKK19fWk5LN1dlYkNvcmUxMVBhZ2VPdmVybGF5NWZyYW1lRXYKK19f
Wk5LN1dlYkNvcmUxMVBhZ2VPdmVybGF5NmJvdW5kc0V2CiBfX1pOSzdXZWJDb3JlMTFSZW5kZXJC
bG9jazI1aW5saW5lRWxlbWVudENvbnRpbnVhdGlvbkV2CiBfX1pOSzdXZWJDb3JlMTFSZW5kZXJM
YXllcjE5YWJzb2x1dGVCb3VuZGluZ0JveEV2CiBfX1pOSzdXZWJDb3JlMTFSZW5kZXJMYXllcjI0
bmVlZHNDb21wb3NpdGVkU2Nyb2xsaW5nRXYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZj
eHByb2ovV2ViQ29yZS52Y3hwcm9qCmluZGV4IDg2NjFiYjEuLjRkYTVhYTMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2oKKysrIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvagpAQCAtNzE4MCw2ICs3
MTgwLDggQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBhZ2VcUGFnZUNvbnNvbGVDbGll
bnQuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGFnZVxQYWdlR3JvdXAuY3Bw
IiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGFnZVxQYWdlR3JvdXBMb2FkRGVmZXJy
ZXIuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGFnZVxQYWdlT3ZlcmxheS5j
cHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwYWdlXFBhZ2VPdmVybGF5Q29udHJv
bGxlci5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwYWdlXFBhZ2VTZXJpYWxp
emVyLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBhZ2VcUGFnZVRocm90dGxl
ci5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwYWdlXFBhZ2VWaXNpYmlsaXR5
U3RhdGUuY3BwIiAvPgpAQCAtMTkxNzUsNiArMTkxNzcsOCBAQAogICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5ccGFnZVxQYWdlQ29uc29sZUNsaWVudC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5ccGFnZVxQYWdlR3JvdXAuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XHBhZ2VcUGFnZUdyb3VwTG9hZERlZmVycmVyLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxwYWdlXFBhZ2VPdmVybGF5LmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxw
YWdlXFBhZ2VPdmVybGF5Q29udHJvbGxlci5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5ccGFnZVxQYWdlU2VyaWFsaXplci5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
cGFnZVxQYWdlVmlzaWJpbGl0eVN0YXRlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxwYWdlXFBlcmZvcm1hbmNlLmgiIC8+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qLmZpbHRlcnMgYi9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qLmZpbHRlcnMKaW5kZXggZDcxY2NmZC4uMWM0ZmUx
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4
cHJvai5maWx0ZXJzCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3Jl
LnZjeHByb2ouZmlsdGVycwpAQCAtNDk5OCw2ICs0OTk4LDEyIEBACiAgICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxwYWdlXFBhZ2VHcm91cExvYWREZWZlcnJlci5jcHAiPgogICAgICAgPEZpbHRl
cj5wYWdlPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxwYWdlXFBhZ2VPdmVybGF5LmNwcCI+CisgICAgICA8RmlsdGVyPnBhZ2U8L0ZpbHRlcj4K
KyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBhZ2VcUGFnZU92
ZXJsYXlDb250cm9sbGVyLmNwcCI+CisgICAgICA8RmlsdGVyPnBhZ2U8L0ZpbHRlcj4KKyAgICA8
L0NsQ29tcGlsZT4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBhZ2VcUGFnZVNlcmlhbGl6
ZXIuY3BwIj4KICAgICAgIDxGaWx0ZXI+cGFnZTwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgpA
QCAtMTI5NDMsNiArMTI5NDksMTIgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBhZ2Vc
UGFnZUdyb3VwTG9hZERlZmVycmVyLmgiPgogICAgICAgPEZpbHRlcj5wYWdlPC9GaWx0ZXI+CiAg
ICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwYWdlXFBhZ2VPdmVy
bGF5LmgiPgorICAgICAgPEZpbHRlcj5wYWdlPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+Cisg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwYWdlXFBhZ2VPdmVybGF5Q29udHJvbGxlci5oIj4K
KyAgICAgIDxGaWx0ZXI+cGFnZTwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgogICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5ccGFnZVxQYWdlU2VyaWFsaXplci5oIj4KICAgICAgIDxGaWx0ZXI+
cGFnZTwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGRjZjQ2YWUuLjljMTgwNTkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
QEAgLTEwOTEsNiArMTA5MSwxMCBAQAogCQkyRDVBNTkyRjE1MjUyNTIzMDAzNkVFNTEgLyogSW1h
Z2VPcmllbnRhdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBBODc0OEQ3NDEyQ0MzRjg5MDAxRkJBNDEgLyogSW1hZ2VPcmllbnRhdGlvbi5jcHAg
Ki87IH07CiAJCTJENUE1OTMxMTUyNTI1RDAwMDM2RUU1MSAvKiBJbWFnZU9yaWVudGF0aW9uLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODc0OEQ2NjEy
Q0MzNzYzMDAxRkJBNDEgLyogSW1hZ2VPcmllbnRhdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTJENUJDNDI3MTZGODgyRUUwMDcwNDhEMCAv
KiBTZWN1cml0eVBvbGljeVZpb2xhdGlvbkV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRDVCQzQyNTE2Rjg4MkJFMDA3MDQ4RDAgLyogU2VjdXJp
dHlQb2xpY3lWaW9sYXRpb25FdmVudC5oICovOyB9OworCQkyRDVDOUNGRjE5QzdCNTJFMDBCM0M1
QzEgLyogUGFnZU92ZXJsYXkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMkQ1QzlDRkIxOUM3QjUyRTAwQjNDNUMxIC8qIFBhZ2VPdmVybGF5LmNwcCAq
LzsgfTsKKwkJMkQ1QzlEMDAxOUM3QjUyRTAwQjNDNUMxIC8qIFBhZ2VPdmVybGF5LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRDVDOUNGQzE5QzdCNTJF
MDBCM0M1QzEgLyogUGFnZU92ZXJsYXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQkyRDVDOUQwMTE5QzdCNTJFMDBCM0M1QzEgLyogUGFnZU92ZXJs
YXlDb250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDJENUM5Q0ZEMTlDN0I1MkUwMEIzQzVDMSAvKiBQYWdlT3ZlcmxheUNvbnRyb2xsZXIu
Y3BwICovOyB9OworCQkyRDVDOUQwMjE5QzdCNTJFMDBCM0M1QzEgLyogUGFnZU92ZXJsYXlDb250
cm9sbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAy
RDVDOUNGRTE5QzdCNTJFMDBCM0M1QzEgLyogUGFnZU92ZXJsYXlDb250cm9sbGVyLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMkQ2RTQ2ODQxN0Q2
NjBGNTAwRUNGOEJCIC8qIFBERkRvY3VtZW50SW1hZ2VNYWMubW0gaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRDZFNDY4MjE3RDY2MEY1MDBFQ0Y4QkIgLyog
UERGRG9jdW1lbnRJbWFnZU1hYy5tbSAqLzsgfTsKIAkJMkQ3MEJBMTMxODA3NERERjAwMDE5MDhB
IC8qIFBsYXRmb3JtQ0FMYXllck1hYy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMkQ3MEJBMTIxODA3NERERjAwMDE5MDhBIC8qIFBsYXRmb3JtQ0FMYXll
ck1hYy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTJENzBCQTE1MTgwNzRGODYwMDAxOTA4QSAvKiBQbGF0Zm9ybUNBTGF5ZXIuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkQ3MEJBMTQxODA3NEY4NTAw
MDE5MDhBIC8qIFBsYXRmb3JtQ0FMYXllci5jcHAgKi87IH07CkBAIC04MDg1LDYgKzgwODksMTAg
QEAKIAkJMkQ0NkYwNEYxN0I5NkZEMjAwNTY0N0YwIC8qIEludFNpemUuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW50U2l6ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTJENUJDNDI1MTZGODgyQkUwMDcwNDhEMCAvKiBTZWN1cml0eVBvbGljeVZp
b2xhdGlvbkV2ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNlY3VyaXR5
UG9saWN5VmlvbGF0aW9uRXZlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkQ1
QkM0MjYxNkY4ODJCRTAwNzA0OEQwIC8qIFNlY3VyaXR5UG9saWN5VmlvbGF0aW9uRXZlbnQuaWRs
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFNlY3VyaXR5UG9saWN5VmlvbGF0aW9uRXZlbnQuaWRs
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyRDVDOUNGQjE5QzdCNTJFMDBCM0M1QzEg
LyogUGFnZU92ZXJsYXkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
UGFnZU92ZXJsYXkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyRDVDOUNGQzE5
QzdCNTJFMDBCM0M1QzEgLyogUGFnZU92ZXJsYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gUGFnZU92ZXJsYXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMkQ1
QzlDRkQxOUM3QjUyRTAwQjNDNUMxIC8qIFBhZ2VPdmVybGF5Q29udHJvbGxlci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQYWdlT3ZlcmxheUNvbnRyb2xsZXIuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyRDVDOUNGRTE5QzdCNTJFMDBCM0M1QzEg
LyogUGFnZU92ZXJsYXlDb250cm9sbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFBhZ2VPdmVybGF5Q29udHJvbGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkyRDZFNDY4MjE3RDY2MEY1MDBFQ0Y4QkIgLyogUERGRG9jdW1lbnRJbWFnZU1hYy5tbSAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFBERkRvY3VtZW50SW1hZ2VNYWMu
bW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJENzBCQTEyMTgwNzREREYwMDAxOTA4
QSAvKiBQbGF0Zm9ybUNBTGF5ZXJNYWMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gUGxhdGZvcm1DQUxheWVyTWFjLmg7IHBhdGggPSBjYS9tYWMvUGxhdGZvcm1DQUxheWVyTWFj
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJENzBCQTE0MTgwNzRGODUwMDAxOTA4
QSAvKiBQbGF0Zm9ybUNBTGF5ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBu
YW1lID0gUGxhdGZvcm1DQUxheWVyLmNwcDsgcGF0aCA9IGNhL1BsYXRmb3JtQ0FMYXllci5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNjU5Nyw2ICsxNjYwNSwxMCBAQAogCQkJ
CTkzMDJCMEJFMEQ3OUY4MkMwMEM3RUU4MyAvKiBQYWdlR3JvdXAuaCAqLywKIAkJCQk3QTY3NEJE
OTBGOUVCRjRFMDA2Q0YwOTkgLyogUGFnZUdyb3VwTG9hZERlZmVycmVyLmNwcCAqLywKIAkJCQk3
QTY3NEJEQTBGOUVCRjRFMDA2Q0YwOTkgLyogUGFnZUdyb3VwTG9hZERlZmVycmVyLmggKi8sCisJ
CQkJMkQ1QzlDRkIxOUM3QjUyRTAwQjNDNUMxIC8qIFBhZ2VPdmVybGF5LmNwcCAqLywKKwkJCQky
RDVDOUNGQzE5QzdCNTJFMDBCM0M1QzEgLyogUGFnZU92ZXJsYXkuaCAqLywKKwkJCQkyRDVDOUNG
RDE5QzdCNTJFMDBCM0M1QzEgLyogUGFnZU92ZXJsYXlDb250cm9sbGVyLmNwcCAqLywKKwkJCQky
RDVDOUNGRTE5QzdCNTJFMDBCM0M1QzEgLyogUGFnZU92ZXJsYXlDb250cm9sbGVyLmggKi8sCiAJ
CQkJMzcxRTY1Q0QxMzY2MUVFRDAwQkVFREIwIC8qIFBhZ2VTZXJpYWxpemVyLmNwcCAqLywKIAkJ
CQkzNzFFNjVDQjEzNjYxRURDMDBCRUVEQjAgLyogUGFnZVNlcmlhbGl6ZXIuaCAqLywKIAkJCQlB
NzE5N0YyNTE3NTY4QUU1MDA3Qjk0NDIgLyogUGFnZVRocm90dGxlci5jcHAgKi8sCkBAIC0yMzY2
Miw2ICsyMzY3NCw3IEBACiAJCQkJOTdCQzZBMjExNTA1RjA4MTAwMUI3NEFDIC8qIERhdGFiYXNl
LmggaW4gSGVhZGVycyAqLywKIAkJCQk5N0JDNkEyNDE1MDVGMDgxMDAxQjc0QUMgLyogRGF0YWJh
c2VBdXRob3JpemVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRTE2Q0ZENDE2OUQxREVEMDBEM0Ew
QzcgLyogRGF0YWJhc2VCYWNrZW5kLmggaW4gSGVhZGVycyAqLywKKwkJCQkyRDVDOUQwMjE5QzdC
NTJFMDBCM0M1QzEgLyogUGFnZU92ZXJsYXlDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk5N0JDNjlEQjE1MDVGMDc2MDAxQjc0QUMgLyogRGF0YWJhc2VCYWNrZW5kQmFzZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJRkU2RjZBQjAxNjlFMDU3NTAwRkMzMEEyIC8qIERhdGFiYXNlQmFja2Vu
ZENvbnRleHQuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFMTZDRkQ2MTY5RDFERUQwMEQzQTBDNyAv
KiBEYXRhYmFzZUJhY2tlbmRTeW5jLmggaW4gSGVhZGVycyAqLywKQEAgLTI1NjI5LDYgKzI1NjQy
LDcgQEAKIAkJCQk0MzkwNDZFQzEyREEyNUU4MDBBRjgwQTkgLyogUmVuZGVyTWF0aE1MVG9rZW4u
aCBpbiBIZWFkZXJzICovLAogCQkJCTQzOTA0NkVBMTJEQTI1RTgwMEFGODBBMiAvKiBSZW5kZXJN
YXRoTUxVbmRlck92ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0QzI3OTU5MENGOTc0MTkwMEU5
N0I5OCAvKiBSZW5kZXJNZWRpYS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMkQ1QzlEMDAxOUM3QjUy
RTAwQjNDNUMxIC8qIFBhZ2VPdmVybGF5LmggaW4gSGVhZGVycyAqLywKIAkJCQlERUJDQ0REMjE2
NjQ2RTgyMDBBNDUyRTEgLyogUmVuZGVyTWVkaWFDb250cm9sRWxlbWVudHMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTQxRkEzMDNGMTMxNkMyOUMwMEMwQkZDNSAvKiBSZW5kZXJNZWRpYUNvbnRyb2xz
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBQkRERkU3QTBBNUM2RTcwMDBBM0UxMUQgLyogUmVuZGVy
TWVudUxpc3QuaCBpbiBIZWFkZXJzICovLApAQCAtMjgwMTcsNiArMjgwMzEsNyBAQAogCQkJCUE1
ODQwRTFDMTg3Qjc0RDUwMDg0M0IxMCAvKiBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNzFCMUUxMjYxNjQwNDkxQTAwQjE4ODBBIC8qIEluc3Bl
Y3RvckxheWVyVHJlZUFnZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUwNEFBQ0NEMTgzNDQ1
NTkwMEUzRDlCQyAvKiBJbnNwZWN0b3JOb2RlRmluZGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CTJENUM5RDAxMTlDN0I1MkUwMEIzQzVDMSAvKiBQYWdlT3ZlcmxheUNvbnRyb2xsZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJN0M1MjJENEIxNUI0NzdFODAwOUI3Qzk1IC8qIEluc3BlY3Rvck92
ZXJsYXkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNEY2RkRENjQxMzQxREVERDAwMUY4RUUzIC8q
IEluc3BlY3RvclBhZ2VBZ2VudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5OUNDMEI2NjE4QkU5
RjE1MDA2Q0VCQ0MgLyogSW5zcGVjdG9yUmVwbGF5QWdlbnQuY3BwIGluIFNvdXJjZXMgKi8sCkBA
IC0yODA4NSw2ICsyODEwMCw3IEBACiAJCQkJQkNDMDY1ODcwRjNDRTJBNzAwQ0QyRDg3IC8qIEpT
Q2xpZW50UmVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQ0MwNjU4OTBGM0NFMkE3MDBDRDJE
ODcgLyogSlNDbGllbnRSZWN0TGlzdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1QzQzMDRCNTE5
MUFFRjQ2MDAwRTJCQzAgLyogSlNFWFRTaGFkZXJUZXh0dXJlTE9ELmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCTJENUM5Q0ZGMTlDN0I1MkUwMEIzQzVDMSAvKiBQYWdlT3ZlcmxheS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk3NkZCOUZGODE5QTczRTNBMDA0MjA1NjIgLyogSlNBdXRvY29tcGxldGVF
cnJvckV2ZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDQTgzRTRGMEQ3Q0UxRTkwMDM0MjFB
OCAvKiBKU0RhdGFUcmFuc2Zlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQ0E4M0U1MjBEN0NF
MjA1MDAzNDIxQTggLyogSlNEYXRhVHJhbnNmZXJDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmggYi9Tb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmgKaW5kZXggMzdiZTQ0OC4uOWM5MGNiNyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2xvYWRlci9FbXB0eUNsaWVudHMuaApAQCAtMTgyLDYgKzE4Miw3IEBAIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsUmVjdEludG9WaWV3KGNvbnN0IEludFJlY3QmKSBj
b25zdCBvdmVycmlkZSB7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBhdHRhY2hSb290R3JhcGhpY3NM
YXllcihGcmFtZSosIEdyYXBoaWNzTGF5ZXIqKSBvdmVycmlkZSB7IH0KKyAgICB2aXJ0dWFsIHZv
aWQgYXR0YWNoVmlld092ZXJsYXlHcmFwaGljc0xheWVyKEZyYW1lKiwgR3JhcGhpY3NMYXllciop
IG92ZXJyaWRlIHsgfQogICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc09uZVNob3REcmF3aW5nU3lu
Y2hyb25pemF0aW9uKCkgb3ZlcnJpZGUgeyB9CiAgICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlQ29t
cG9zaXRpbmdMYXllckZsdXNoKCkgb3ZlcnJpZGUgeyB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZUNs
aWVudC5oCmluZGV4IGU4ZGEwZTkuLmJmNTYzNGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvQ2hyb21lQ2xpZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWVDbGll
bnQuaApAQCAtMjk5LDYgKzI5OSw3IEBAIHB1YmxpYzoKIAogICAgIC8vIFBhc3MgMCBhcyB0aGUg
R3JhcGhpY3NMYXllciB0byBkZXRhdGNoIHRoZSByb290IGxheWVyLgogICAgIHZpcnR1YWwgdm9p
ZCBhdHRhY2hSb290R3JhcGhpY3NMYXllcihGcmFtZSosIEdyYXBoaWNzTGF5ZXIqKSA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIGF0dGFjaFZpZXdPdmVybGF5R3JhcGhpY3NMYXllcihGcmFtZSosIEdy
YXBoaWNzTGF5ZXIqKSA9IDA7CiAgICAgLy8gU2V0cyBhIGZsYWcgdG8gc3BlY2lmeSB0aGF0IHRo
ZSBuZXh0IHRpbWUgY29udGVudCBpcyBkcmF3biB0byB0aGUgd2luZG93LAogICAgIC8vIHRoZSBj
aGFuZ2VzIGFwcGVhciBvbiB0aGUgc2NyZWVuIGluIHN5bmNocm9ueSB3aXRoIHVwZGF0ZXMgdG8g
R3JhcGhpY3NMYXllcnMuCiAgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzT25lU2hvdERyYXdpbmdT
eW5jaHJvbml6YXRpb24oKSA9IDA7CkBAIC0zMDgsOCArMzA5LDYgQEAgcHVibGljOgogICAgIC8v
IFJldHVybnMgd2hldGhlciBvciBub3QgdGhlIGNsaWVudCBjYW4gcmVuZGVyIHRoZSBjb21wb3Np
dGVkIGxheWVyLAogICAgIC8vIHJlZ2FyZGxlc3Mgb2YgdGhlIHNldHRpbmdzLgogICAgIHZpcnR1
YWwgYm9vbCBhbGxvd3NBY2NlbGVyYXRlZENvbXBvc2l0aW5nKCkgY29uc3QgeyByZXR1cm4gdHJ1
ZTsgfQotICAgIC8vIFN1cHBseSBhIGxheWVyIHRoYXQgd2lsbCBhZGRlZCBhcyBhbiBvdmVybGF5
IG92ZXIgb3RoZXIgZG9jdW1lbnQgbGF5ZXJzIChzY3JvbGxpbmcgd2l0aCB0aGUgZG9jdW1lbnQp
LgotICAgIHZpcnR1YWwgR3JhcGhpY3NMYXllciogZG9jdW1lbnRPdmVybGF5TGF5ZXJGb3JGcmFt
ZShGcmFtZSYpIHsgcmV0dXJuIG51bGxwdHI7IH0KIAogICAgIGVudW0gQ29tcG9zaXRpbmdUcmln
Z2VyIHsKICAgICAgICAgVGhyZWVEVHJhbnNmb3JtVHJpZ2dlciA9IDEgPDwgMCwKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAppbmRleCA1ZDkxMGYzLi5lYWZlYTYyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCkBAIC02Niw2ICs2Niw3IEBACiAjaW5jbHVkZSAiTW91
c2VFdmVudC5oIgogI2luY2x1ZGUgIk1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMuaCIKICNp
bmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiUGFnZU92ZXJsYXlDb250cm9sbGVyLmgiCiAjaW5j
bHVkZSAiUGxhdGZvcm1FdmVudC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtS2V5Ym9hcmRFdmVudC5o
IgogI2luY2x1ZGUgIlBsYXRmb3JtV2hlZWxFdmVudC5oIgpAQCAtMTY0Myw2ICsxNjQ0LDkgQEAg
Ym9vbCBFdmVudEhhbmRsZXI6OmhhbmRsZU1vdXNlUHJlc3NFdmVudChjb25zdCBQbGF0Zm9ybU1v
dXNlRXZlbnQmIHBsYXRmb3JtTW91c2UKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCisg
ICAgaWYgKG1fZnJhbWUubWFpbkZyYW1lKCkucGFnZU92ZXJsYXlDb250cm9sbGVyKCkuaGFuZGxl
TW91c2VFdmVudChwbGF0Zm9ybU1vdXNlRXZlbnQpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKwog
I2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCiAgICAgYm9vbCBkZWZhdWx0UHJldmVudGVkID0gZGlz
cGF0Y2hTeW50aGV0aWNUb3VjaEV2ZW50SWZFbmFibGVkKHBsYXRmb3JtTW91c2VFdmVudCk7CiAg
ICAgaWYgKGRlZmF1bHRQcmV2ZW50ZWQpCkBAIC0xODM2LDYgKzE4NDAsOSBAQCBib29sIEV2ZW50
SGFuZGxlcjo6bW91c2VNb3ZlZChjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIGV2ZW50KQogICAg
IFJlZlB0cjxGcmFtZVZpZXc+IHByb3RlY3RvcihtX2ZyYW1lLnZpZXcoKSk7CiAgICAgTWF4aW11
bUR1cmF0aW9uVHJhY2tlciBtYXhEdXJhdGlvblRyYWNrZXIoJm1fbWF4TW91c2VNb3ZlZER1cmF0
aW9uKTsKIAorICAgIGlmIChtX2ZyYW1lLm1haW5GcmFtZSgpLnBhZ2VPdmVybGF5Q29udHJvbGxl
cigpLmhhbmRsZU1vdXNlRXZlbnQoZXZlbnQpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKwogICAg
IEhpdFRlc3RSZXN1bHQgaG92ZXJlZE5vZGUgPSBIaXRUZXN0UmVzdWx0KExheW91dFBvaW50KCkp
OwogICAgIGJvb2wgcmVzdWx0ID0gaGFuZGxlTW91c2VNb3ZlRXZlbnQoZXZlbnQsICZob3ZlcmVk
Tm9kZSk7CiAKQEAgLTIwMTksNiArMjAyNiw5IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpoYW5kbGVN
b3VzZVJlbGVhc2VFdmVudChjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIHBsYXRmb3JtTW91CiAK
ICAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLnNldENhcmV0QmxpbmtpbmdTdXNwZW5kZWQoZmFsc2Up
OwogCisgICAgaWYgKG1fZnJhbWUubWFpbkZyYW1lKCkucGFnZU92ZXJsYXlDb250cm9sbGVyKCku
aGFuZGxlTW91c2VFdmVudChwbGF0Zm9ybU1vdXNlRXZlbnQpKQorICAgICAgICByZXR1cm4gdHJ1
ZTsKKwogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCiAgICAgYm9vbCBkZWZhdWx0UHJldmVudGVk
ID0gZGlzcGF0Y2hTeW50aGV0aWNUb3VjaEV2ZW50SWZFbmFibGVkKHBsYXRmb3JtTW91c2VFdmVu
dCk7CiAgICAgaWYgKGRlZmF1bHRQcmV2ZW50ZWQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL0ZyYW1lVmlldy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAK
aW5kZXggYmNiNTA0NC4uMTZjYWIzOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9G
cmFtZVZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcApAQCAt
NjAsNiArNjAsNyBAQAogI2luY2x1ZGUgIk1lbW9yeUNhY2hlLmgiCiAjaW5jbHVkZSAiTWVtb3J5
UHJlc3N1cmVIYW5kbGVyLmgiCiAjaW5jbHVkZSAiT3ZlcmZsb3dFdmVudC5oIgorI2luY2x1ZGUg
IlBhZ2VPdmVybGF5Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIlByb2dyZXNzVHJhY2tlci5oIgog
I2luY2x1ZGUgIlJlbmRlckVtYmVkZGVkT2JqZWN0LmgiCiAjaW5jbHVkZSAiUmVuZGVyRnVsbFNj
cmVlbi5oIgpAQCAtNDMzLDcgKzQzNCw2IEBAIHZvaWQgRnJhbWVWaWV3OjpzZXRGcmFtZVJlY3Qo
Y29uc3QgSW50UmVjdCYgbmV3UmVjdCkKICNpZiBFTkFCTEUoVEVYVF9BVVRPU0laSU5HKQogICAg
IC8vIEF1dG9zaXplZCBmb250IHNpemVzIGRlcGVuZCBvbiB0aGUgd2lkdGggb2YgdGhlIHZpZXdp
bmcgYXJlYS4KICAgICBpZiAobmV3UmVjdC53aWR0aCgpICE9IG9sZFJlY3Qud2lkdGgoKSkgewot
ICAgICAgICBQYWdlKiBwYWdlID0gZnJhbWUoKS5wYWdlKCk7CiAgICAgICAgIGlmIChmcmFtZSgp
LmlzTWFpbkZyYW1lKCkgJiYgcGFnZS0+c2V0dGluZ3MoKS50ZXh0QXV0b3NpemluZ0VuYWJsZWQo
KSkgewogICAgICAgICAgICAgZm9yIChGcmFtZSogZnJhbWUgPSAmcGFnZS0+bWFpbkZyYW1lKCk7
IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KCkpCiAgICAgICAgICAg
ICAgICAgZnJhbWUoKS5kb2N1bWVudCgpLT50ZXh0QXV0b3NpemVyKCktPnJlY2FsY3VsYXRlTXVs
dGlwbGllcnMoKTsKQEAgLTQ0OSw2ICs0NDksOSBAQCB2b2lkIEZyYW1lVmlldzo6c2V0RnJhbWVS
ZWN0KGNvbnN0IEludFJlY3QmIG5ld1JlY3QpCiAgICAgICAgIGlmIChyZW5kZXJWaWV3LT51c2Vz
Q29tcG9zaXRpbmcoKSkKICAgICAgICAgICAgIHJlbmRlclZpZXctPmNvbXBvc2l0b3IoKS5mcmFt
ZVZpZXdEaWRDaGFuZ2VTaXplKCk7CiAgICAgfQorCisgICAgaWYgKGZyYW1lKCkuaXNNYWluRnJh
bWUoKSkKKyAgICAgICAgZnJhbWUoKS5tYWluRnJhbWUoKS5wYWdlT3ZlcmxheUNvbnRyb2xsZXIo
KS5kaWRDaGFuZ2VWaWV3U2l6ZSgpOwogfQogCiAjaWYgRU5BQkxFKFJFUVVFU1RfQU5JTUFUSU9O
X0ZSQU1FKQpAQCAtNTYyLDYgKzU2NSw5IEBAIHZvaWQgRnJhbWVWaWV3OjpzZXRDb250ZW50c1Np
emUoY29uc3QgSW50U2l6ZSYgc2l6ZSkKIAogICAgIHBhZ2UtPmNocm9tZSgpLmNvbnRlbnRzU2l6
ZUNoYW5nZWQoJmZyYW1lKCksIHNpemUpOyAvLyBOb3RpZnkgb25seS4KIAorICAgIGlmIChmcmFt
ZSgpLmlzTWFpbkZyYW1lKCkpCisgICAgICAgIGZyYW1lKCkubWFpbkZyYW1lKCkucGFnZU92ZXJs
YXlDb250cm9sbGVyKCkuZGlkQ2hhbmdlRG9jdW1lbnRTaXplKCk7CisKICAgICBBU1NFUlQobV9k
ZWZlclNldE5lZWRzTGF5b3V0cyk7CiAgICAgbV9kZWZlclNldE5lZWRzTGF5b3V0cy0tOwogICAg
IApAQCAtMjA0OCw3ICsyMDU0LDcgQEAgdm9pZCBGcmFtZVZpZXc6OnNldEZpeGVkVmlzaWJsZUNv
bnRlbnRSZWN0KGNvbnN0IEludFJlY3QmIHZpc2libGVDb250ZW50UmVjdCkKICAgICAgICAgLy8g
VXBkYXRlIHRoZSBzY3JvbGwtYmFycyB0byBjYWxjdWxhdGUgbmV3IHBhZ2Utc3RlcCBzaXplLgog
ICAgICAgICB1cGRhdGVTY3JvbGxiYXJzKHNjcm9sbE9mZnNldCgpKTsKICAgICB9Ci0gICAgZnJh
bWUoKS5sb2FkZXIoKS5jbGllbnQoKS5kaWRDaGFuZ2VTY3JvbGxPZmZzZXQoKTsKKyAgICBkaWRD
aGFuZ2VTY3JvbGxPZmZzZXQoKTsKIH0KICNlbmRpZgogCkBAIC0yMDYxLDYgKzIwNjcsMTIgQEAg
dm9pZCBGcmFtZVZpZXc6OnNldFZpZXdwb3J0Q29uc3RyYWluZWRPYmplY3RzTmVlZExheW91dCgp
CiAgICAgICAgIHJlbmRlcmVyLT5zZXROZWVkc0xheW91dCgpOwogfQogCit2b2lkIEZyYW1lVmll
dzo6ZGlkQ2hhbmdlU2Nyb2xsT2Zmc2V0KCkKK3sKKyAgICBmcmFtZSgpLm1haW5GcmFtZSgpLnBh
Z2VPdmVybGF5Q29udHJvbGxlcigpLmRpZFNjcm9sbEZyYW1lKGZyYW1lKCkpOworICAgIGZyYW1l
KCkubG9hZGVyKCkuY2xpZW50KCkuZGlkQ2hhbmdlU2Nyb2xsT2Zmc2V0KCk7Cit9CisKIHZvaWQg
RnJhbWVWaWV3OjpzY3JvbGxQb3NpdGlvbkNoYW5nZWRWaWFQbGF0Zm9ybVdpZGdldChjb25zdCBJ
bnRQb2ludCYgb2xkUG9zaXRpb24sIGNvbnN0IEludFBvaW50JiBuZXdQb3NpdGlvbikKIHsKICAg
ICB1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyU2Nyb2xsaW5nKCk7CkBAIC0zMjIzLDcgKzMyMzUs
NyBAQCB2b2lkIEZyYW1lVmlldzo6c2Nyb2xsVG8oY29uc3QgSW50U2l6ZSYgbmV3T2Zmc2V0KQog
ICAgIFNjcm9sbFZpZXc6OnNjcm9sbFRvKG5ld09mZnNldCk7CiAgICAgaWYgKG9mZnNldCAhPSBz
Y3JvbGxPZmZzZXQoKSkKICAgICAgICAgc2Nyb2xsUG9zaXRpb25DaGFuZ2VkKG9sZFBvc2l0aW9u
LCBzY3JvbGxQb3NpdGlvbigpKTsKLSAgICBmcmFtZSgpLmxvYWRlcigpLmNsaWVudCgpLmRpZENo
YW5nZVNjcm9sbE9mZnNldCgpOworICAgIGRpZENoYW5nZVNjcm9sbE9mZnNldCgpOwogfQogCiBm
bG9hdCBGcmFtZVZpZXc6OmFkanVzdFNjcm9sbFN0ZXBGb3JGaXhlZENvbnRlbnQoZmxvYXQgc3Rl
cCwgU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24sIFNjcm9sbEdyYW51bGFyaXR5IGdy
YW51bGFyaXR5KQpAQCAtNDI5Miw3ICs0MzA0LDcgQEAgYm9vbCBGcmFtZVZpZXc6OndoZWVsRXZl
bnQoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JiB3aGVlbEV2ZW50KQogICAgICAgICBpZiAob2Zm
c2V0ICE9IG5ld09mZnNldCkgewogICAgICAgICAgICAgU2Nyb2xsVmlldzo6c2Nyb2xsVG8obmV3
T2Zmc2V0KTsKICAgICAgICAgICAgIHNjcm9sbFBvc2l0aW9uQ2hhbmdlZChvbGRQb3NpdGlvbiwg
c2Nyb2xsUG9zaXRpb24oKSk7Ci0gICAgICAgICAgICBmcmFtZSgpLmxvYWRlcigpLmNsaWVudCgp
LmRpZENoYW5nZVNjcm9sbE9mZnNldCgpOworICAgICAgICAgICAgZGlkQ2hhbmdlU2Nyb2xsT2Zm
c2V0KCk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAtNDYxNSw2
ICs0NjI3LDggQEAgdm9pZCBGcmFtZVZpZXc6OnNldEV4cG9zZWRSZWN0KEZsb2F0UmVjdCBleHBv
c2VkUmVjdCkKIAogICAgIGlmIChhdXRvKiB2aWV3ID0gcmVuZGVyVmlldygpKQogICAgICAgICB2
aWV3LT5jb21wb3NpdG9yKCkuc2NoZWR1bGVMYXllckZsdXNoKGZhbHNlIC8qIGNhblRocm90dGxl
ICovKTsKKworICAgIGZyYW1lKCkubWFpbkZyYW1lKCkucGFnZU92ZXJsYXlDb250cm9sbGVyKCku
ZGlkQ2hhbmdlRXhwb3NlZFJlY3QoKTsKIH0KICAgICAKIHZvaWQgRnJhbWVWaWV3OjpzZXRWaWV3
cG9ydFNpemVGb3JDU1NWaWV3cG9ydFVuaXRzKEludFNpemUgc2l6ZSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1l
Vmlldy5oCmluZGV4IDM3NTY5NmEuLjkyYWE5YjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvRnJhbWVWaWV3LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuaApA
QCAtNTExLDYgKzUxMSw4IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgZmxvYXQgYWRqdXN0U2Ny
b2xsU3RlcEZvckZpeGVkQ29udGVudChmbG9hdCBzdGVwLCBTY3JvbGxiYXJPcmllbnRhdGlvbiwg
U2Nyb2xsR3JhbnVsYXJpdHkpIG92ZXJyaWRlOwogCisgICAgdm9pZCBkaWRDaGFuZ2VTY3JvbGxP
ZmZzZXQoKTsKKwogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgYm9vbCBzY3JvbGxDb250ZW50c0Zh
c3RQYXRoKGNvbnN0IEludFNpemUmIHNjcm9sbERlbHRhLCBjb25zdCBJbnRSZWN0JiByZWN0VG9T
Y3JvbGwsIGNvbnN0IEludFJlY3QmIGNsaXBSZWN0KSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZv
aWQgc2Nyb2xsQ29udGVudHNTbG93UGF0aChjb25zdCBJbnRSZWN0JiB1cGRhdGVSZWN0KSBvdmVy
cmlkZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvTWFpbkZyYW1lLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvTWFpbkZyYW1lLmNwcAppbmRleCA4MjhiZDIzLi44NTUzNWJkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL01haW5GcmFtZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9NYWluRnJhbWUuY3BwCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAi
Y29uZmlnLmgiCiAjaW5jbHVkZSAiTWFpbkZyYW1lLmgiCiAKKyNpbmNsdWRlICJQYWdlT3Zlcmxh
eUNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJTY3JvbGxMYXRjaGluZ1N0YXRlLmgiCiAjaW5jbHVk
ZSAiV2hlZWxFdmVudERlbHRhVHJhY2tlci5oIgogCkBAIC0zOCw2ICszOSw3IEBAIGlubGluZSBN
YWluRnJhbWU6Ok1haW5GcmFtZShQYWdlJiBwYWdlLCBGcmFtZUxvYWRlckNsaWVudCYgY2xpZW50
KQogICAgICwgbV9sYXRjaGluZ1N0YXRlKHN0ZDo6bWFrZV91bmlxdWU8U2Nyb2xsTGF0Y2hpbmdT
dGF0ZT4oKSkKICNlbmRpZgogICAgICwgbV9yZWNlbnRXaGVlbEV2ZW50RGVsdGFUcmFja2VyKHN0
ZDo6bWFrZV91bmlxdWU8V2hlZWxFdmVudERlbHRhVHJhY2tlcj4oKSkKKyAgICAsIG1fcGFnZU92
ZXJsYXlDb250cm9sbGVyKHN0ZDo6bWFrZV91bmlxdWU8UGFnZU92ZXJsYXlDb250cm9sbGVyPigq
dGhpcykpCiB7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvTWFpbkZyYW1l
LmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL01haW5GcmFtZS5oCmluZGV4IDhhMTQ3NmIuLjM4ZDk0
NWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvTWFpbkZyYW1lLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9NYWluRnJhbWUuaApAQCAtMzAsNiArMzAsNyBAQAogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKK2NsYXNzIFBhZ2VPdmVybGF5Q29udHJvbGxlcjsKIGNsYXNzIFNjcm9s
bExhdGNoaW5nU3RhdGU7CiBjbGFzcyBXaGVlbEV2ZW50RGVsdGFUcmFja2VyOwogCkBAIC00Myw2
ICs0NCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNlbGZPbmx5RGVyZWYoKTsKIAogICAgIFdoZWVs
RXZlbnREZWx0YVRyYWNrZXIqIHdoZWVsRXZlbnREZWx0YVRyYWNrZXIoKSB7IHJldHVybiBtX3Jl
Y2VudFdoZWVsRXZlbnREZWx0YVRyYWNrZXIuZ2V0KCk7IH0KKyAgICBQYWdlT3ZlcmxheUNvbnRy
b2xsZXImIHBhZ2VPdmVybGF5Q29udHJvbGxlcigpIHsgcmV0dXJuICptX3BhZ2VPdmVybGF5Q29u
dHJvbGxlcjsgfQogCiAjaWYgUExBVEZPUk0oTUFDKQogICAgIFNjcm9sbExhdGNoaW5nU3RhdGUq
IGxhdGNoaW5nU3RhdGUoKSB7IHJldHVybiBtX2xhdGNoaW5nU3RhdGUuZ2V0KCk7IH0KQEAgLTYw
LDYgKzYyLDcgQEAgcHJpdmF0ZToKICAgICBzdGQ6OnVuaXF1ZV9wdHI8U2Nyb2xsTGF0Y2hpbmdT
dGF0ZT4gbV9sYXRjaGluZ1N0YXRlOwogI2VuZGlmCiAgICAgc3RkOjp1bmlxdWVfcHRyPFdoZWVs
RXZlbnREZWx0YVRyYWNrZXI+IG1fcmVjZW50V2hlZWxFdmVudERlbHRhVHJhY2tlcjsKKyAgICBz
dGQ6OnVuaXF1ZV9wdHI8UGFnZU92ZXJsYXlDb250cm9sbGVyPiBtX3BhZ2VPdmVybGF5Q29udHJv
bGxlcjsKIH07CiAKIGlubGluZSBib29sIEZyYW1lOjppc01haW5GcmFtZSgpIGNvbnN0CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9QYWdlLmNwcAppbmRleCAyNmI4ZDE3Li4wZTY5ZDE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL1BhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAKQEAg
LTYwLDYgKzYwLDcgQEAKICNpbmNsdWRlICJQYWdlQ29uc29sZUNsaWVudC5oIgogI2luY2x1ZGUg
IlBhZ2VEZWJ1Z2dhYmxlLmgiCiAjaW5jbHVkZSAiUGFnZUdyb3VwLmgiCisjaW5jbHVkZSAiUGFn
ZU92ZXJsYXlDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiUGFnZVRocm90dGxlci5oIgogI2luY2x1
ZGUgIlBsdWdJbkNsaWVudC5oIgogI2luY2x1ZGUgIlBsdWdpbkRhdGEuaCIKQEAgLTgxMSw2ICs4
MTIsOCBAQCB2b2lkIFBhZ2U6OnNldERldmljZVNjYWxlRmFjdG9yKGZsb2F0IHNjYWxlRmFjdG9y
KQogCiAgICAgcGFnZUNhY2hlKCktPm1hcmtQYWdlc0ZvckZ1bGxTdHlsZVJlY2FsYyh0aGlzKTsK
ICAgICBHcmFwaGljc0NvbnRleHQ6OnVwZGF0ZURvY3VtZW50TWFya2VyUmVzb3VyY2VzKCk7CisK
KyAgICBtYWluRnJhbWUoKS5wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKS5kaWRDaGFuZ2VEZXZpY2VT
Y2FsZUZhY3RvcigpOwogfQogCiB2b2lkIFBhZ2U6OnNldFRvcENvbnRlbnRJbnNldChmbG9hdCBj
b250ZW50SW5zZXQpCkBAIC0xNjE4LDcgKzE2MjEsNiBAQCB2b2lkIFBhZ2U6OnNldFNlc3Npb25J
RChTZXNzaW9uSUQgc2Vzc2lvbklEKQogCiAgICAgZm9yIChhdXRvJiB2aWV3IDogcGx1Z2luVmll
d3MoKSkKICAgICAgICAgdmlldy0+cHJpdmF0ZUJyb3dzaW5nU3RhdGVDaGFuZ2VkKHNlc3Npb25J
RC5pc0VwaGVtZXJhbCgpKTsKLQogfQogCiBQYWdlOjpQYWdlQ2xpZW50czo6UGFnZUNsaWVudHMo
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlT3ZlcmxheS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL1BhZ2VPdmVybGF5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi4wNzQ5MTYyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9QYWdlT3ZlcmxheS5jcHAKQEAgLTAsMCArMSwyNjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUGFnZU92ZXJsYXkuaCIKKworI2luY2x1ZGUgIkZyYW1l
Vmlldy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIk1haW5GcmFt
ZS5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJQYWdlT3ZlcmxheUNvbnRyb2xsZXIu
aCIKKyNpbmNsdWRlICJQbGF0Zm9ybU1vdXNlRXZlbnQuaCIKKyNpbmNsdWRlICJTY3JvbGxiYXJU
aGVtZS5oIgorI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK3N0YXRpYyBjb25zdCBkb3VibGUgZmFkZUFuaW1hdGlvbkR1cmF0aW9uID0gMC4yOwor
c3RhdGljIGNvbnN0IGRvdWJsZSBmYWRlQW5pbWF0aW9uRnJhbWVSYXRlID0gMzA7CisKK1Bhc3NS
ZWZQdHI8UGFnZU92ZXJsYXk+IFBhZ2VPdmVybGF5OjpjcmVhdGUoQ2xpZW50JiBjbGllbnQsIE92
ZXJsYXlUeXBlIG92ZXJsYXlUeXBlKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgUGFnZU92
ZXJsYXkoY2xpZW50LCBvdmVybGF5VHlwZSkpOworfQorCitQYWdlT3ZlcmxheTo6UGFnZU92ZXJs
YXkoQ2xpZW50JiBjbGllbnQsIE92ZXJsYXlUeXBlIG92ZXJsYXlUeXBlKQorICAgIDogbV9jbGll
bnQoY2xpZW50KQorICAgICwgbV9wYWdlKG51bGxwdHIpCisgICAgLCBtX2ZhZGVBbmltYXRpb25U
aW1lcihSdW5Mb29wOjptYWluKCksIHRoaXMsICZQYWdlT3ZlcmxheTo6ZmFkZUFuaW1hdGlvblRp
bWVyRmlyZWQpCisgICAgLCBtX2ZhZGVBbmltYXRpb25TdGFydFRpbWUoMCkKKyAgICAsIG1fZmFk
ZUFuaW1hdGlvbkR1cmF0aW9uKGZhZGVBbmltYXRpb25EdXJhdGlvbikKKyAgICAsIG1fZmFkZUFu
aW1hdGlvblR5cGUoTm9BbmltYXRpb24pCisgICAgLCBtX2ZyYWN0aW9uRmFkZWRJbigxKQorICAg
ICwgbV9vdmVybGF5VHlwZShvdmVybGF5VHlwZSkKKyAgICAsIG1fYmFja2dyb3VuZENvbG9yKENv
bG9yOjp0cmFuc3BhcmVudCkKK3sKK30KKworUGFnZU92ZXJsYXk6On5QYWdlT3ZlcmxheSgpCit7
Cit9CisKK1BhZ2VPdmVybGF5Q29udHJvbGxlciogUGFnZU92ZXJsYXk6OmNvbnRyb2xsZXIoKSBj
b25zdAoreworICAgIGlmICghbV9wYWdlKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBy
ZXR1cm4gJm1fcGFnZS0+bWFpbkZyYW1lKCkucGFnZU92ZXJsYXlDb250cm9sbGVyKCk7Cit9CisK
K0ludFJlY3QgUGFnZU92ZXJsYXk6OmJvdW5kcygpIGNvbnN0Cit7CisgICAgaWYgKCFtX292ZXJy
aWRlRnJhbWUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gSW50UmVjdChJbnRQb2ludCgpLCBt
X292ZXJyaWRlRnJhbWUuc2l6ZSgpKTsKKworICAgIEZyYW1lVmlldyogZnJhbWVWaWV3ID0gbV9w
YWdlLT5tYWluRnJhbWUoKS52aWV3KCk7CisKKyAgICBpZiAoIWZyYW1lVmlldykKKyAgICAgICAg
cmV0dXJuIEludFJlY3QoKTsKKworICAgIHN3aXRjaCAobV9vdmVybGF5VHlwZSkgeworICAgIGNh
c2UgT3ZlcmxheVR5cGU6OlZpZXc6IHsKKyAgICAgICAgaW50IHdpZHRoID0gZnJhbWVWaWV3LT53
aWR0aCgpOworICAgICAgICBpbnQgaGVpZ2h0ID0gZnJhbWVWaWV3LT5oZWlnaHQoKTsKKworICAg
ICAgICBpZiAoIVNjcm9sbGJhclRoZW1lOjp0aGVtZSgpLT51c2VzT3ZlcmxheVNjcm9sbGJhcnMo
KSkgeworICAgICAgICAgICAgaWYgKGZyYW1lVmlldy0+dmVydGljYWxTY3JvbGxiYXIoKSkKKyAg
ICAgICAgICAgICAgICB3aWR0aCAtPSBmcmFtZVZpZXctPnZlcnRpY2FsU2Nyb2xsYmFyKCktPndp
ZHRoKCk7CisgICAgICAgICAgICBpZiAoZnJhbWVWaWV3LT5ob3Jpem9udGFsU2Nyb2xsYmFyKCkp
CisgICAgICAgICAgICAgICAgaGVpZ2h0IC09IGZyYW1lVmlldy0+aG9yaXpvbnRhbFNjcm9sbGJh
cigpLT5oZWlnaHQoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gSW50UmVjdCgwLCAwLCB3
aWR0aCwgaGVpZ2h0KTsKKyAgICB9CisgICAgY2FzZSBPdmVybGF5VHlwZTo6RG9jdW1lbnQ6Cisg
ICAgICAgIHJldHVybiBJbnRSZWN0KEludFBvaW50KCksIGZyYW1lVmlldy0+Y29udGVudHNTaXpl
KCkpOworICAgIH07CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gSW50
UmVjdChJbnRQb2ludCgpLCBmcmFtZVZpZXctPmNvbnRlbnRzU2l6ZSgpKTsKK30KKworSW50UmVj
dCBQYWdlT3ZlcmxheTo6ZnJhbWUoKSBjb25zdAoreworICAgIGlmICghbV9vdmVycmlkZUZyYW1l
LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIG1fb3ZlcnJpZGVGcmFtZTsKKworICAgIHJldHVy
biBib3VuZHMoKTsKK30KKwordm9pZCBQYWdlT3ZlcmxheTo6c2V0RnJhbWUoSW50UmVjdCBmcmFt
ZSkKK3sKKyAgICBpZiAobV9vdmVycmlkZUZyYW1lID09IGZyYW1lKQorICAgICAgICByZXR1cm47
CisKKyAgICBtX292ZXJyaWRlRnJhbWUgPSBmcmFtZTsKKworICAgIGlmIChhdXRvIHBhZ2VPdmVy
bGF5Q29udHJvbGxlciA9IGNvbnRyb2xsZXIoKSkKKyAgICAgICAgcGFnZU92ZXJsYXlDb250cm9s
bGVyLT5kaWRDaGFuZ2VPdmVybGF5RnJhbWUoKnRoaXMpOworfQorCit2b2lkIFBhZ2VPdmVybGF5
OjpzZXRCYWNrZ3JvdW5kQ29sb3IoUkdCQTMyIGJhY2tncm91bmRDb2xvcikKK3sKKyAgICBpZiAo
bV9iYWNrZ3JvdW5kQ29sb3IgPT0gYmFja2dyb3VuZENvbG9yKQorICAgICAgICByZXR1cm47CisK
KyAgICBtX2JhY2tncm91bmRDb2xvciA9IGJhY2tncm91bmRDb2xvcjsKKworICAgIGlmIChhdXRv
IHBhZ2VPdmVybGF5Q29udHJvbGxlciA9IGNvbnRyb2xsZXIoKSkKKyAgICAgICAgcGFnZU92ZXJs
YXlDb250cm9sbGVyLT5kaWRDaGFuZ2VPdmVybGF5QmFja2dyb3VuZENvbG9yKCp0aGlzKTsKK30K
Kwordm9pZCBQYWdlT3ZlcmxheTo6c2V0UGFnZShQYWdlKiBwYWdlKQoreworICAgIG1fY2xpZW50
LndpbGxNb3ZlVG9QYWdlKCp0aGlzLCBwYWdlKTsKKyAgICBtX3BhZ2UgPSBwYWdlOworICAgIG1f
Y2xpZW50LmRpZE1vdmVUb1BhZ2UoKnRoaXMsIHBhZ2UpOworCisgICAgbV9mYWRlQW5pbWF0aW9u
VGltZXIuc3RvcCgpOworfQorCit2b2lkIFBhZ2VPdmVybGF5OjpzZXROZWVkc0Rpc3BsYXkoY29u
c3QgSW50UmVjdCYgZGlydHlSZWN0KQoreworICAgIGlmIChhdXRvIHBhZ2VPdmVybGF5Q29udHJv
bGxlciA9IGNvbnRyb2xsZXIoKSkgeworICAgICAgICBwYWdlT3ZlcmxheUNvbnRyb2xsZXItPnNl
dFBhZ2VPdmVybGF5T3BhY2l0eSgqdGhpcywgbV9mcmFjdGlvbkZhZGVkSW4pOworICAgICAgICBw
YWdlT3ZlcmxheUNvbnRyb2xsZXItPnNldFBhZ2VPdmVybGF5TmVlZHNEaXNwbGF5KCp0aGlzLCBk
aXJ0eVJlY3QpOworICAgIH0KK30KKwordm9pZCBQYWdlT3ZlcmxheTo6c2V0TmVlZHNEaXNwbGF5
KCkKK3sKKyAgICBzZXROZWVkc0Rpc3BsYXkoYm91bmRzKCkpOworfQorCit2b2lkIFBhZ2VPdmVy
bGF5OjpkcmF3UmVjdChHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgSW50
UmVjdCYgZGlydHlSZWN0KQoreworICAgIC8vIElmIHRoZSBkaXJ0eSByZWN0IGlzIG91dHNpZGUg
dGhlIGJvdW5kcywgaWdub3JlIGl0LgorICAgIEludFJlY3QgcGFpbnRSZWN0ID0gaW50ZXJzZWN0
aW9uKGRpcnR5UmVjdCwgYm91bmRzKCkpOworICAgIGlmIChwYWludFJlY3QuaXNFbXB0eSgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2
ZXIoZ3JhcGhpY3NDb250ZXh0KTsKKyAgICBtX2NsaWVudC5kcmF3UmVjdCgqdGhpcywgZ3JhcGhp
Y3NDb250ZXh0LCBwYWludFJlY3QpOworfQorICAgIAorYm9vbCBQYWdlT3ZlcmxheTo6bW91c2VF
dmVudChjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIG1vdXNlRXZlbnQpCit7CisgICAgSW50UG9p
bnQgbW91c2VQb3NpdGlvbkluT3ZlcmxheUNvb3JkaW5hdGVzKG1vdXNlRXZlbnQucG9zaXRpb24o
KSk7CisKKyAgICBpZiAobV9vdmVybGF5VHlwZSA9PSBQYWdlT3ZlcmxheTo6T3ZlcmxheVR5cGU6
OkRvY3VtZW50KQorICAgICAgICBtb3VzZVBvc2l0aW9uSW5PdmVybGF5Q29vcmRpbmF0ZXMgPSBt
X3BhZ2UtPm1haW5GcmFtZSgpLnZpZXcoKS0+cm9vdFZpZXdUb0NvbnRlbnRzKG1vdXNlUG9zaXRp
b25Jbk92ZXJsYXlDb29yZGluYXRlcyk7CisKKyAgICAvLyBJZ25vcmUgZXZlbnRzIG91dHNpZGUg
dGhlIGJvdW5kcy4KKyAgICBpZiAoIWJvdW5kcygpLmNvbnRhaW5zKG1vdXNlUG9zaXRpb25Jbk92
ZXJsYXlDb29yZGluYXRlcykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBt
X2NsaWVudC5tb3VzZUV2ZW50KCp0aGlzLCBtb3VzZUV2ZW50KTsKK30KKwordm9pZCBQYWdlT3Zl
cmxheTo6ZGlkU2Nyb2xsRnJhbWUoRnJhbWUmIGZyYW1lKQoreworICAgIG1fY2xpZW50LmRpZFNj
cm9sbEZyYW1lKCp0aGlzLCBmcmFtZSk7Cit9CisKK2Jvb2wgUGFnZU92ZXJsYXk6OmNvcHlBY2Nl
c3NpYmlsaXR5QXR0cmlidXRlU3RyaW5nVmFsdWVGb3JQb2ludChTdHJpbmcgYXR0cmlidXRlLCBG
bG9hdFBvaW50IHBhcmFtZXRlciwgU3RyaW5nJiB2YWx1ZSkKK3sKKyAgICByZXR1cm4gbV9jbGll
bnQuY29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVTdHJpbmdWYWx1ZUZvclBvaW50KCp0aGlzLCBh
dHRyaWJ1dGUsIHBhcmFtZXRlciwgdmFsdWUpOworfQorCitib29sIFBhZ2VPdmVybGF5Ojpjb3B5
QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZUJvb2xWYWx1ZUZvclBvaW50KFN0cmluZyBhdHRyaWJ1dGUs
IEZsb2F0UG9pbnQgcGFyYW1ldGVyLCBib29sJiB2YWx1ZSkKK3sKKyAgICByZXR1cm4gbV9jbGll
bnQuY29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVCb29sVmFsdWVGb3JQb2ludCgqdGhpcywgYXR0
cmlidXRlLCBwYXJhbWV0ZXIsIHZhbHVlKTsKK30KKworVmVjdG9yPFN0cmluZz4gUGFnZU92ZXJs
YXk6OmNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlTmFtZXMoYm9vbCBwYXJhbWV0ZXJpemVkTmFt
ZXMpCit7CisgICAgcmV0dXJuIG1fY2xpZW50LmNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlTmFt
ZXMoKnRoaXMsIHBhcmFtZXRlcml6ZWROYW1lcyk7Cit9CisKK3ZvaWQgUGFnZU92ZXJsYXk6OnN0
YXJ0RmFkZUluQW5pbWF0aW9uKCkKK3sKKyAgICBtX2ZyYWN0aW9uRmFkZWRJbiA9IDA7CisgICAg
bV9mYWRlQW5pbWF0aW9uVHlwZSA9IEZhZGVJbkFuaW1hdGlvbjsKKworICAgIHN0YXJ0RmFkZUFu
aW1hdGlvbigpOworfQorCit2b2lkIFBhZ2VPdmVybGF5OjpzdGFydEZhZGVPdXRBbmltYXRpb24o
KQoreworICAgIG1fZnJhY3Rpb25GYWRlZEluID0gMTsKKyAgICBtX2ZhZGVBbmltYXRpb25UeXBl
ID0gRmFkZU91dEFuaW1hdGlvbjsKKworICAgIHN0YXJ0RmFkZUFuaW1hdGlvbigpOworfQorCit2
b2lkIFBhZ2VPdmVybGF5OjpzdG9wRmFkZU91dEFuaW1hdGlvbigpCit7CisgICAgbV9mcmFjdGlv
bkZhZGVkSW4gPSAxLjA7CisgICAgbV9mYWRlQW5pbWF0aW9uVGltZXIuc3RvcCgpOworfQorCit2
b2lkIFBhZ2VPdmVybGF5OjpzdGFydEZhZGVBbmltYXRpb24oKQoreworICAgIG1fZmFkZUFuaW1h
dGlvblN0YXJ0VGltZSA9IGN1cnJlbnRUaW1lKCk7CisgICAgbV9mYWRlQW5pbWF0aW9uVGltZXIu
c3RhcnRSZXBlYXRpbmcoMSAvIGZhZGVBbmltYXRpb25GcmFtZVJhdGUpOworfQorCit2b2lkIFBh
Z2VPdmVybGF5OjpmYWRlQW5pbWF0aW9uVGltZXJGaXJlZCgpCit7CisgICAgZmxvYXQgYW5pbWF0
aW9uUHJvZ3Jlc3MgPSAoY3VycmVudFRpbWUoKSAtIG1fZmFkZUFuaW1hdGlvblN0YXJ0VGltZSkg
LyBtX2ZhZGVBbmltYXRpb25EdXJhdGlvbjsKKworICAgIGlmIChhbmltYXRpb25Qcm9ncmVzcyA+
PSAxLjApCisgICAgICAgIGFuaW1hdGlvblByb2dyZXNzID0gMS4wOworCisgICAgZG91YmxlIHNp
bmUgPSBzaW4ocGlPdmVyVHdvRmxvYXQgKiBhbmltYXRpb25Qcm9ncmVzcyk7CisgICAgZmxvYXQg
ZmFkZUFuaW1hdGlvblZhbHVlID0gc2luZSAqIHNpbmU7CisKKyAgICBtX2ZyYWN0aW9uRmFkZWRJ
biA9IChtX2ZhZGVBbmltYXRpb25UeXBlID09IEZhZGVJbkFuaW1hdGlvbikgPyBmYWRlQW5pbWF0
aW9uVmFsdWUgOiAxIC0gZmFkZUFuaW1hdGlvblZhbHVlOworICAgIGNvbnRyb2xsZXIoKS0+c2V0
UGFnZU92ZXJsYXlPcGFjaXR5KCp0aGlzLCBtX2ZyYWN0aW9uRmFkZWRJbik7CisKKyAgICBpZiAo
YW5pbWF0aW9uUHJvZ3Jlc3MgPT0gMS4wKSB7CisgICAgICAgIG1fZmFkZUFuaW1hdGlvblRpbWVy
LnN0b3AoKTsKKworICAgICAgICBib29sIHdhc0ZhZGluZ091dCA9IG1fZmFkZUFuaW1hdGlvblR5
cGUgPT0gRmFkZU91dEFuaW1hdGlvbjsKKyAgICAgICAgbV9mYWRlQW5pbWF0aW9uVHlwZSA9IE5v
QW5pbWF0aW9uOworCisgICAgICAgIC8vIElmIHRoaXMgd2FzIGEgZmFkZSBvdXQsIGdvIGFoZWFk
IGFuZCB1bmluc3RhbGwgdGhlIHBhZ2Ugb3ZlcmxheS4KKyAgICAgICAgaWYgKHdhc0ZhZGluZ091
dCkKKyAgICAgICAgICAgIGNvbnRyb2xsZXIoKS0+dW5pbnN0YWxsUGFnZU92ZXJsYXkodGhpcywg
UGFnZU92ZXJsYXk6OkZhZGVNb2RlOjpEb05vdEZhZGUpOworICAgIH0KK30KKwordm9pZCBQYWdl
T3ZlcmxheTo6Y2xlYXIoKQoreworICAgIGlmIChhdXRvIHBhZ2VPdmVybGF5Q29udHJvbGxlciA9
IGNvbnRyb2xsZXIoKSkKKyAgICAgICAgcGFnZU92ZXJsYXlDb250cm9sbGVyLT5jbGVhclBhZ2VP
dmVybGF5KCp0aGlzKTsKK30KKworR3JhcGhpY3NMYXllciYgUGFnZU92ZXJsYXk6OmxheWVyKCkK
K3sKKyAgICByZXR1cm4gY29udHJvbGxlcigpLT5sYXllckZvck92ZXJsYXkoKnRoaXMpOworfQor
Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
UGFnZU92ZXJsYXkuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZU92ZXJsYXkuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MzI3MDhkMgotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZU92ZXJsYXkuaApAQCAtMCwwICsxLDE0MSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpZm5kZWYgUGFnZU92ZXJsYXlfaAorI2RlZmluZSBQYWdlT3ZlcmxheV9oCisK
KyNpbmNsdWRlICJDb2xvci5oIgorI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKKyNpbmNsdWRlICJJ
bnRSZWN0LmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVm
Q291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9SdW5Mb29wLmg+CisjaW5jbHVkZSA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRnJhbWU7CitjbGFz
cyBHcmFwaGljc0NvbnRleHQ7CitjbGFzcyBHcmFwaGljc0xheWVyOworY2xhc3MgUGFnZTsKK2Ns
YXNzIFBhZ2VPdmVybGF5Q29udHJvbGxlcjsKK2NsYXNzIFBsYXRmb3JtTW91c2VFdmVudDsKKwor
Y2xhc3MgUGFnZU92ZXJsYXkgZmluYWwgOiBwdWJsaWMgUmVmQ291bnRlZDxQYWdlT3ZlcmxheT4g
eworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFBhZ2VPdmVybGF5KTsKKyAgICBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBjbGFzcyBDbGllbnQgeworICAgIHByb3RlY3Rl
ZDoKKyAgICAgICAgdmlydHVhbCB+Q2xpZW50KCkgeyB9CisgICAgCisgICAgcHVibGljOgorICAg
ICAgICB2aXJ0dWFsIHZvaWQgcGFnZU92ZXJsYXlEZXN0cm95ZWQoUGFnZU92ZXJsYXkmKSA9IDA7
CisgICAgICAgIHZpcnR1YWwgdm9pZCB3aWxsTW92ZVRvUGFnZShQYWdlT3ZlcmxheSYsIFBhZ2Uq
KSA9IDA7CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRNb3ZlVG9QYWdlKFBhZ2VPdmVybGF5Jiwg
UGFnZSopID0gMDsKKyAgICAgICAgdmlydHVhbCB2b2lkIGRyYXdSZWN0KFBhZ2VPdmVybGF5Jiwg
R3JhcGhpY3NDb250ZXh0JiwgY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KSA9IDA7CisgICAgICAg
IHZpcnR1YWwgYm9vbCBtb3VzZUV2ZW50KFBhZ2VPdmVybGF5JiwgY29uc3QgUGxhdGZvcm1Nb3Vz
ZUV2ZW50JikgPSAwOworICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkU2Nyb2xsRnJhbWUoUGFnZU92
ZXJsYXkmLCBGcmFtZSYpIHsgfQorCisgICAgICAgIHZpcnR1YWwgYm9vbCBjb3B5QWNjZXNzaWJp
bGl0eUF0dHJpYnV0ZVN0cmluZ1ZhbHVlRm9yUG9pbnQoUGFnZU92ZXJsYXkmLCBTdHJpbmcgLyog
YXR0cmlidXRlICovLCBGbG9hdFBvaW50LCBTdHJpbmcmKSB7IHJldHVybiBmYWxzZTsgfQorICAg
ICAgICB2aXJ0dWFsIGJvb2wgY29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVCb29sVmFsdWVGb3JQ
b2ludChQYWdlT3ZlcmxheSYsIFN0cmluZyAvKiBhdHRyaWJ1dGUgKi8sIEZsb2F0UG9pbnQsIGJv
b2wmKSAgeyByZXR1cm4gZmFsc2U7IH0KKyAgICAgICAgdmlydHVhbCBWZWN0b3I8U3RyaW5nPiBj
b3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZU5hbWVzKFBhZ2VPdmVybGF5JiwgYm9vbCAvKiBwYXJh
bWV0ZXJpemVkTmFtZXMgKi8pICB7IHJldHVybiBWZWN0b3I8U3RyaW5nPigpOyB9CisgICAgfTsK
KworICAgIGVudW0gY2xhc3MgT3ZlcmxheVR5cGUgeworICAgICAgICBWaWV3LCAvLyBGaXhlZCB0
byB0aGUgdmlldyBzaXplOyBkb2VzIG5vdCBzY2FsZSBvciBzY3JvbGwgd2l0aCB0aGUgZG9jdW1l
bnQsIHJlcGFpbnRzIG9uIHNjcm9sbC4KKyAgICAgICAgRG9jdW1lbnQsIC8vIFNjYWxlcyBhbmQg
c2Nyb2xscyB3aXRoIHRoZSBkb2N1bWVudC4KKyAgICB9OworCisgICAgc3RhdGljIFBhc3NSZWZQ
dHI8UGFnZU92ZXJsYXk+IGNyZWF0ZShDbGllbnQmLCBPdmVybGF5VHlwZSA9IE92ZXJsYXlUeXBl
OjpWaWV3KTsKKyAgICB2aXJ0dWFsIH5QYWdlT3ZlcmxheSgpOworCisgICAgUGFnZU92ZXJsYXlD
b250cm9sbGVyKiBjb250cm9sbGVyKCkgY29uc3Q7CisKKyAgICB2b2lkIHNldFBhZ2UoUGFnZSop
OworICAgIHZvaWQgc2V0TmVlZHNEaXNwbGF5KGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCk7Cisg
ICAgdm9pZCBzZXROZWVkc0Rpc3BsYXkoKTsKKworICAgIHZvaWQgZHJhd1JlY3QoR3JhcGhpY3ND
b250ZXh0JiwgY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KTsKKyAgICBib29sIG1vdXNlRXZlbnQo
Y29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50Jik7CisgICAgdm9pZCBkaWRTY3JvbGxGcmFtZShGcmFt
ZSYpOworCisgICAgYm9vbCBjb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVN0cmluZ1ZhbHVlRm9y
UG9pbnQoU3RyaW5nIGF0dHJpYnV0ZSwgRmxvYXRQb2ludCBwYXJhbWV0ZXIsIFN0cmluZyYgdmFs
dWUpOworICAgIGJvb2wgY29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVCb29sVmFsdWVGb3JQb2lu
dChTdHJpbmcgYXR0cmlidXRlLCBGbG9hdFBvaW50IHBhcmFtZXRlciwgYm9vbCYgdmFsdWUpOwor
ICAgIFZlY3RvcjxTdHJpbmc+IGNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlTmFtZXMoYm9vbCBw
YXJhbWV0ZXJpemVkTmFtZXMpOworICAgIAorICAgIHZvaWQgc3RhcnRGYWRlSW5BbmltYXRpb24o
KTsKKyAgICB2b2lkIHN0YXJ0RmFkZU91dEFuaW1hdGlvbigpOworICAgIHZvaWQgc3RvcEZhZGVP
dXRBbmltYXRpb24oKTsKKworICAgIHZvaWQgY2xlYXIoKTsKKworICAgIENsaWVudCYgY2xpZW50
KCkgY29uc3QgeyByZXR1cm4gbV9jbGllbnQ7IH0KKworICAgIGVudW0gY2xhc3MgRmFkZU1vZGUg
eyBEb05vdEZhZGUsIEZhZGUgfTsKKworICAgIE92ZXJsYXlUeXBlIG92ZXJsYXlUeXBlKCkgeyBy
ZXR1cm4gbV9vdmVybGF5VHlwZTsgfQorCisgICAgSW50UmVjdCBib3VuZHMoKSBjb25zdDsKKyAg
ICBJbnRSZWN0IGZyYW1lKCkgY29uc3Q7CisgICAgdm9pZCBzZXRGcmFtZShJbnRSZWN0KTsKKwor
ICAgIFJHQkEzMiBiYWNrZ3JvdW5kQ29sb3IoKSBjb25zdCB7IHJldHVybiBtX2JhY2tncm91bmRD
b2xvcjsgfQorICAgIHZvaWQgc2V0QmFja2dyb3VuZENvbG9yKFJHQkEzMik7CisKKyAgICAvLyBG
SVhNRTogUGFnZU92ZXJsYXkgc2hvdWxkIG93biBpdHMgbGF5ZXIsIGluc3RlYWQgb2YgUGFnZU92
ZXJsYXlDb250cm9sbGVyLgorICAgIEdyYXBoaWNzTGF5ZXImIGxheWVyKCk7CisKK3ByaXZhdGU6
CisgICAgZXhwbGljaXQgUGFnZU92ZXJsYXkoQ2xpZW50JiwgT3ZlcmxheVR5cGUpOworCisgICAg
dm9pZCBzdGFydEZhZGVBbmltYXRpb24oKTsKKyAgICB2b2lkIGZhZGVBbmltYXRpb25UaW1lckZp
cmVkKCk7CisKKyAgICBDbGllbnQmIG1fY2xpZW50OworICAgIFBhZ2UqIG1fcGFnZTsKKworICAg
IFJ1bkxvb3A6OlRpbWVyPFBhZ2VPdmVybGF5PiBtX2ZhZGVBbmltYXRpb25UaW1lcjsKKyAgICBk
b3VibGUgbV9mYWRlQW5pbWF0aW9uU3RhcnRUaW1lOworICAgIGRvdWJsZSBtX2ZhZGVBbmltYXRp
b25EdXJhdGlvbjsKKworICAgIGVudW0gRmFkZUFuaW1hdGlvblR5cGUgeworICAgICAgICBOb0Fu
aW1hdGlvbiwKKyAgICAgICAgRmFkZUluQW5pbWF0aW9uLAorICAgICAgICBGYWRlT3V0QW5pbWF0
aW9uLAorICAgIH07CisKKyAgICBGYWRlQW5pbWF0aW9uVHlwZSBtX2ZhZGVBbmltYXRpb25UeXBl
OworICAgIGZsb2F0IG1fZnJhY3Rpb25GYWRlZEluOworCisgICAgT3ZlcmxheVR5cGUgbV9vdmVy
bGF5VHlwZTsKKyAgICBJbnRSZWN0IG1fb3ZlcnJpZGVGcmFtZTsKKworICAgIFJHQkEzMiBtX2Jh
Y2tncm91bmRDb2xvcjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8g
UGFnZU92ZXJsYXlfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlT3Zlcmxh
eUNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlT3ZlcmxheUNvbnRyb2xs
ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjOWVjZjMKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VPdmVybGF5Q29udHJvbGxlci5j
cHAKQEAgLTAsMCArMSwzNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiUGFnZU92ZXJsYXlDb250cm9sbGVyLmgiCisKKyNpbmNsdWRlICJDaHJvbWUuaCIK
KyNpbmNsdWRlICJDaHJvbWVDbGllbnQuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUg
IkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkdy
YXBoaWNzTGF5ZXIuaCIKKyNpbmNsdWRlICJNYWluRnJhbWUuaCIKKyNpbmNsdWRlICJQYWdlLmgi
CisjaW5jbHVkZSAiUGFnZU92ZXJsYXkuaCIKKyNpbmNsdWRlICJTY3JvbGxpbmdDb29yZGluYXRv
ci5oIgorI2luY2x1ZGUgIlNldHRpbmdzLmgiCisjaW5jbHVkZSAiVGlsZWRCYWNraW5nLmgiCisK
Ky8vIEZJWE1FOiBTb21lb25lIG5lZWRzIHRvIGNhbGwgZGlkQ2hhbmdlU2V0dGluZ3MoKSBpZiB3
ZSB3YW50IGR5bmFtaWMgdXBkYXRlcyBvZiBsYXllciBib3JkZXIvcmVwYWludCBjb3VudGVyIHNl
dHRpbmdzLgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1BhZ2VPdmVybGF5Q29udHJvbGxlcjo6
UGFnZU92ZXJsYXlDb250cm9sbGVyKE1haW5GcmFtZSYgbWFpbkZyYW1lKQorICAgIDogbV9pbml0
aWFsaXplZChmYWxzZSkKKyAgICAsIG1fbWFpbkZyYW1lKG1haW5GcmFtZSkKK3sKK30KKworUGFn
ZU92ZXJsYXlDb250cm9sbGVyOjp+UGFnZU92ZXJsYXlDb250cm9sbGVyKCkKK3sKKworfQorCit2
b2lkIFBhZ2VPdmVybGF5Q29udHJvbGxlcjo6Y3JlYXRlUm9vdExheWVyc0lmTmVlZGVkKCkKK3sK
KyAgICBpZiAobV9pbml0aWFsaXplZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9pbml0aWFs
aXplZCA9IHRydWU7CisKKyAgICBBU1NFUlQoIW1fZG9jdW1lbnRPdmVybGF5Um9vdExheWVyKTsK
KyAgICBBU1NFUlQoIW1fdmlld092ZXJsYXlSb290TGF5ZXIpOworCisgICAgbV9kb2N1bWVudE92
ZXJsYXlSb290TGF5ZXIgPSBHcmFwaGljc0xheWVyOjpjcmVhdGUobV9tYWluRnJhbWUucGFnZSgp
LT5jaHJvbWUoKS5jbGllbnQoKS5ncmFwaGljc0xheWVyRmFjdG9yeSgpLCAqdGhpcyk7CisgICAg
bV92aWV3T3ZlcmxheVJvb3RMYXllciA9IEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZShtX21haW5GcmFt
ZS5wYWdlKCktPmNocm9tZSgpLmNsaWVudCgpLmdyYXBoaWNzTGF5ZXJGYWN0b3J5KCksICp0aGlz
KTsKKyNpZm5kZWYgTkRFQlVHCisgICAgbV9kb2N1bWVudE92ZXJsYXlSb290TGF5ZXItPnNldE5h
bWUoIlBhZ2UgT3ZlcmxheSBjb250YWluZXIgKGRvY3VtZW50LXJlbGF0aXZlKSIpOworICAgIG1f
dmlld092ZXJsYXlSb290TGF5ZXItPnNldE5hbWUoIlBhZ2UgT3ZlcmxheSBjb250YWluZXIgKHZp
ZXctcmVsYXRpdmUpIik7CisjZW5kaWYKK30KKworR3JhcGhpY3NMYXllciYgUGFnZU92ZXJsYXlD
b250cm9sbGVyOjpkb2N1bWVudE92ZXJsYXlSb290TGF5ZXIoKQoreworICAgIGNyZWF0ZVJvb3RM
YXllcnNJZk5lZWRlZCgpOworICAgIHJldHVybiAqbV9kb2N1bWVudE92ZXJsYXlSb290TGF5ZXI7
Cit9CisKK0dyYXBoaWNzTGF5ZXImIFBhZ2VPdmVybGF5Q29udHJvbGxlcjo6dmlld092ZXJsYXlS
b290TGF5ZXIoKQoreworICAgIGNyZWF0ZVJvb3RMYXllcnNJZk5lZWRlZCgpOworICAgIHJldHVy
biAqbV92aWV3T3ZlcmxheVJvb3RMYXllcjsKK30KKworc3RhdGljIHZvaWQgdXBkYXRlT3Zlcmxh
eUdlb21ldHJ5KFBhZ2VPdmVybGF5JiBvdmVybGF5LCBHcmFwaGljc0xheWVyJiBncmFwaGljc0xh
eWVyKQoreworICAgIEludFJlY3Qgb3ZlcmxheUZyYW1lID0gb3ZlcmxheS5mcmFtZSgpOworCisg
ICAgaWYgKG92ZXJsYXlGcmFtZS5sb2NhdGlvbigpID09IGdyYXBoaWNzTGF5ZXIucG9zaXRpb24o
KSAmJiBvdmVybGF5RnJhbWUuc2l6ZSgpID09IGdyYXBoaWNzTGF5ZXIuc2l6ZSgpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBncmFwaGljc0xheWVyLnNldFBvc2l0aW9uKG92ZXJsYXlGcmFtZS5s
b2NhdGlvbigpKTsKKyAgICBncmFwaGljc0xheWVyLnNldFNpemUob3ZlcmxheUZyYW1lLnNpemUo
KSk7Cit9CisKK3ZvaWQgUGFnZU92ZXJsYXlDb250cm9sbGVyOjppbnN0YWxsUGFnZU92ZXJsYXko
UGFzc1JlZlB0cjxQYWdlT3ZlcmxheT4gcGFnZU92ZXJsYXksIFBhZ2VPdmVybGF5OjpGYWRlTW9k
ZSBmYWRlTW9kZSkKK3sKKyAgICBjcmVhdGVSb290TGF5ZXJzSWZOZWVkZWQoKTsKKworICAgIFJl
ZlB0cjxQYWdlT3ZlcmxheT4gb3ZlcmxheSA9IHBhZ2VPdmVybGF5OworCisgICAgaWYgKG1fcGFn
ZU92ZXJsYXlzLmNvbnRhaW5zKG92ZXJsYXkpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3Bh
Z2VPdmVybGF5cy5hcHBlbmQob3ZlcmxheSk7CisgICAgb3ZlcmxheS0+c2V0UGFnZShtX21haW5G
cmFtZS5wYWdlKCkpOworCisgICAgaWYgKGZhZGVNb2RlID09IFBhZ2VPdmVybGF5OjpGYWRlTW9k
ZTo6RmFkZSkKKyAgICAgICAgb3ZlcmxheS0+c3RhcnRGYWRlSW5BbmltYXRpb24oKTsKKworICAg
IHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0xheWVyPiBsYXllciA9IEdyYXBoaWNzTGF5ZXI6OmNy
ZWF0ZShtX21haW5GcmFtZS5wYWdlKCktPmNocm9tZSgpLmNsaWVudCgpLmdyYXBoaWNzTGF5ZXJG
YWN0b3J5KCksICp0aGlzKTsKKyAgICBsYXllci0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQb2ludDNE
KCkpOworICAgIGxheWVyLT5zZXRCYWNrZ3JvdW5kQ29sb3Iob3ZlcmxheS0+YmFja2dyb3VuZENv
bG9yKCkpOworICAgIHVwZGF0ZU92ZXJsYXlHZW9tZXRyeSgqb3ZlcmxheSwgKmxheWVyKTsKKyNp
Zm5kZWYgTkRFQlVHCisgICAgbGF5ZXItPnNldE5hbWUoIlBhZ2UgT3ZlcmxheSBjb250ZW50Iik7
CisjZW5kaWYKKworICAgIHVwZGF0ZVNldHRpbmdzRm9yTGF5ZXIoKmxheWVyKTsKKworICAgIHN3
aXRjaCAob3ZlcmxheS0+b3ZlcmxheVR5cGUoKSkgeworICAgIGNhc2UgUGFnZU92ZXJsYXk6Ok92
ZXJsYXlUeXBlOjpWaWV3OgorICAgICAgICBtX3ZpZXdPdmVybGF5Um9vdExheWVyLT5hZGRDaGls
ZChsYXllci5nZXQoKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUGFnZU92ZXJsYXk6Ok92
ZXJsYXlUeXBlOjpEb2N1bWVudDoKKyAgICAgICAgbV9kb2N1bWVudE92ZXJsYXlSb290TGF5ZXIt
PmFkZENoaWxkKGxheWVyLmdldCgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgbV9v
dmVybGF5R3JhcGhpY3NMYXllcnMuc2V0KG92ZXJsYXkuZ2V0KCksIFdURjo6bW92ZShsYXllcikp
OworCisgICAgdXBkYXRlRm9yY2VTeW5jaHJvbm91c1Njcm9sbExheWVyUG9zaXRpb25VcGRhdGVz
KCk7CisKKyAgICBpZiAoRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBtX21haW5GcmFtZS52aWV3KCkp
CisgICAgICAgIGZyYW1lVmlldy0+ZW50ZXJDb21wb3NpdGluZ01vZGUoKTsKK30KKwordm9pZCBQ
YWdlT3ZlcmxheUNvbnRyb2xsZXI6OnVuaW5zdGFsbFBhZ2VPdmVybGF5KFBhZ2VPdmVybGF5KiBv
dmVybGF5LCBQYWdlT3ZlcmxheTo6RmFkZU1vZGUgZmFkZU1vZGUpCit7CisgICAgaWYgKGZhZGVN
b2RlID09IFBhZ2VPdmVybGF5OjpGYWRlTW9kZTo6RmFkZSkgeworICAgICAgICBvdmVybGF5LT5z
dGFydEZhZGVPdXRBbmltYXRpb24oKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG92
ZXJsYXktPnNldFBhZ2UobnVsbHB0cik7CisKKyAgICBtX292ZXJsYXlHcmFwaGljc0xheWVycy50
YWtlKG92ZXJsYXkpLT5yZW1vdmVGcm9tUGFyZW50KCk7CisKKyAgICBzaXplX3Qgb3ZlcmxheUlu
ZGV4ID0gbV9wYWdlT3ZlcmxheXMuZmluZChvdmVybGF5KTsKKyAgICBBU1NFUlQob3ZlcmxheUlu
ZGV4ICE9IG5vdEZvdW5kKTsKKyAgICBtX3BhZ2VPdmVybGF5cy5yZW1vdmUob3ZlcmxheUluZGV4
KTsKKworICAgIHVwZGF0ZUZvcmNlU3luY2hyb25vdXNTY3JvbGxMYXllclBvc2l0aW9uVXBkYXRl
cygpOworfQorCit2b2lkIFBhZ2VPdmVybGF5Q29udHJvbGxlcjo6dXBkYXRlRm9yY2VTeW5jaHJv
bm91c1Njcm9sbExheWVyUG9zaXRpb25VcGRhdGVzKCkKK3sKKyNpZiBFTkFCTEUoQVNZTkNfU0NS
T0xMSU5HKQorICAgIGJvb2wgZm9yY2VTeW5jaHJvbm91c1Njcm9sbExheWVyUG9zaXRpb25VcGRh
dGVzID0gZmFsc2U7CisKKyAgICBmb3IgKGF1dG8mIG92ZXJsYXkgOiBtX3BhZ2VPdmVybGF5cykg
eworICAgICAgICBpZiAob3ZlcmxheS0+b3ZlcmxheVR5cGUoKSA9PSBQYWdlT3ZlcmxheTo6T3Zl
cmxheVR5cGU6OlZpZXcpCisgICAgICAgICAgICBmb3JjZVN5bmNocm9ub3VzU2Nyb2xsTGF5ZXJQ
b3NpdGlvblVwZGF0ZXMgPSB0cnVlOworICAgIH0KKworICAgIGlmIChTY3JvbGxpbmdDb29yZGlu
YXRvciogc2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSBtX21haW5GcmFtZS5wYWdlKCktPnNjcm9sbGlu
Z0Nvb3JkaW5hdG9yKCkpCisgICAgICAgIHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT5zZXRGb3JjZVN5
bmNocm9ub3VzU2Nyb2xsTGF5ZXJQb3NpdGlvblVwZGF0ZXMoZm9yY2VTeW5jaHJvbm91c1Njcm9s
bExheWVyUG9zaXRpb25VcGRhdGVzKTsKKyNlbmRpZgorfQorCit2b2lkIFBhZ2VPdmVybGF5Q29u
dHJvbGxlcjo6c2V0UGFnZU92ZXJsYXlOZWVkc0Rpc3BsYXkoUGFnZU92ZXJsYXkmIG92ZXJsYXks
IGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGRpcnR5UmVjdCkKK3sKKyAgICBBU1NFUlQobV9wYWdl
T3ZlcmxheXMuY29udGFpbnMoJm92ZXJsYXkpKTsKKyAgICBHcmFwaGljc0xheWVyJiBncmFwaGlj
c0xheWVyID0gKm1fb3ZlcmxheUdyYXBoaWNzTGF5ZXJzLmdldCgmb3ZlcmxheSk7CisKKyAgICBp
ZiAoIWdyYXBoaWNzTGF5ZXIuZHJhd3NDb250ZW50KCkpIHsKKyAgICAgICAgZ3JhcGhpY3NMYXll
ci5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7CisgICAgICAgIHVwZGF0ZU92ZXJsYXlHZW9tZXRyeShv
dmVybGF5LCBncmFwaGljc0xheWVyKTsKKyAgICB9CisKKyAgICBncmFwaGljc0xheWVyLnNldE5l
ZWRzRGlzcGxheUluUmVjdChkaXJ0eVJlY3QpOworfQorCit2b2lkIFBhZ2VPdmVybGF5Q29udHJv
bGxlcjo6c2V0UGFnZU92ZXJsYXlPcGFjaXR5KFBhZ2VPdmVybGF5JiBvdmVybGF5LCBmbG9hdCBv
cGFjaXR5KQoreworICAgIEFTU0VSVChtX3BhZ2VPdmVybGF5cy5jb250YWlucygmb3ZlcmxheSkp
OworICAgIG1fb3ZlcmxheUdyYXBoaWNzTGF5ZXJzLmdldCgmb3ZlcmxheSktPnNldE9wYWNpdHko
b3BhY2l0eSk7Cit9CisKK3ZvaWQgUGFnZU92ZXJsYXlDb250cm9sbGVyOjpjbGVhclBhZ2VPdmVy
bGF5KFBhZ2VPdmVybGF5JiBvdmVybGF5KQoreworICAgIEFTU0VSVChtX3BhZ2VPdmVybGF5cy5j
b250YWlucygmb3ZlcmxheSkpOworICAgIG1fb3ZlcmxheUdyYXBoaWNzTGF5ZXJzLmdldCgmb3Zl
cmxheSktPnNldERyYXdzQ29udGVudChmYWxzZSk7Cit9CisKK0dyYXBoaWNzTGF5ZXImIFBhZ2VP
dmVybGF5Q29udHJvbGxlcjo6bGF5ZXJGb3JPdmVybGF5KFBhZ2VPdmVybGF5JiBvdmVybGF5KSBj
b25zdAoreworICAgIEFTU0VSVChtX3BhZ2VPdmVybGF5cy5jb250YWlucygmb3ZlcmxheSkpOwor
ICAgIHJldHVybiAqbV9vdmVybGF5R3JhcGhpY3NMYXllcnMuZ2V0KCZvdmVybGF5KTsKK30KKwor
dm9pZCBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6OndpbGxBdHRhY2hSb290TGF5ZXIoKQoreworICAg
IGZvciAoYXV0byYgb3ZlcmxheUFuZExheWVyIDogbV9vdmVybGF5R3JhcGhpY3NMYXllcnMpCisg
ICAgICAgIHVwZGF0ZU92ZXJsYXlHZW9tZXRyeSgqb3ZlcmxheUFuZExheWVyLmtleSwgKm92ZXJs
YXlBbmRMYXllci52YWx1ZSk7Cit9CisKK3ZvaWQgUGFnZU92ZXJsYXlDb250cm9sbGVyOjpkaWRD
aGFuZ2VWaWV3U2l6ZSgpCit7CisgICAgZm9yIChhdXRvJiBvdmVybGF5QW5kTGF5ZXIgOiBtX292
ZXJsYXlHcmFwaGljc0xheWVycykgeworICAgICAgICBpZiAob3ZlcmxheUFuZExheWVyLmtleS0+
b3ZlcmxheVR5cGUoKSA9PSBQYWdlT3ZlcmxheTo6T3ZlcmxheVR5cGU6OlZpZXcpCisgICAgICAg
ICAgICB1cGRhdGVPdmVybGF5R2VvbWV0cnkoKm92ZXJsYXlBbmRMYXllci5rZXksICpvdmVybGF5
QW5kTGF5ZXIudmFsdWUpOworICAgIH0KK30KKwordm9pZCBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6
OmRpZENoYW5nZURvY3VtZW50U2l6ZSgpCit7CisgICAgZm9yIChhdXRvJiBvdmVybGF5QW5kTGF5
ZXIgOiBtX292ZXJsYXlHcmFwaGljc0xheWVycykgeworICAgICAgICBpZiAob3ZlcmxheUFuZExh
eWVyLmtleS0+b3ZlcmxheVR5cGUoKSA9PSBQYWdlT3ZlcmxheTo6T3ZlcmxheVR5cGU6OkRvY3Vt
ZW50KQorICAgICAgICAgICAgdXBkYXRlT3ZlcmxheUdlb21ldHJ5KCpvdmVybGF5QW5kTGF5ZXIu
a2V5LCAqb3ZlcmxheUFuZExheWVyLnZhbHVlKTsKKyAgICB9Cit9CisKK3ZvaWQgUGFnZU92ZXJs
YXlDb250cm9sbGVyOjpkaWRDaGFuZ2VTZXR0aW5ncygpCit7CisgICAgLy8gRklYTUU6IFdlIHNo
b3VsZCBhcHBseSB0aGVzZSBzZXR0aW5ncyB0byBhbGwgb3ZlcmxheSBzdWJsYXllcnMgcmVjdXJz
aXZlbHkuCisgICAgZm9yIChhdXRvJiBncmFwaGljc0xheWVyIDogbV9vdmVybGF5R3JhcGhpY3NM
YXllcnMudmFsdWVzKCkpCisgICAgICAgIHVwZGF0ZVNldHRpbmdzRm9yTGF5ZXIoKmdyYXBoaWNz
TGF5ZXIpOworfQorCit2b2lkIFBhZ2VPdmVybGF5Q29udHJvbGxlcjo6ZGlkQ2hhbmdlRGV2aWNl
U2NhbGVGYWN0b3IoKQoreworICAgIGNyZWF0ZVJvb3RMYXllcnNJZk5lZWRlZCgpOworCisgICAg
bV9kb2N1bWVudE92ZXJsYXlSb290TGF5ZXItPm5vdGVEZXZpY2VPclBhZ2VTY2FsZUZhY3RvckNo
YW5nZWRJbmNsdWRpbmdEZXNjZW5kYW50cygpOworICAgIG1fdmlld092ZXJsYXlSb290TGF5ZXIt
Pm5vdGVEZXZpY2VPclBhZ2VTY2FsZUZhY3RvckNoYW5nZWRJbmNsdWRpbmdEZXNjZW5kYW50cygp
OworCisgICAgZm9yIChhdXRvJiBncmFwaGljc0xheWVyIDogbV9vdmVybGF5R3JhcGhpY3NMYXll
cnMudmFsdWVzKCkpCisgICAgICAgIGdyYXBoaWNzTGF5ZXItPnNldE5lZWRzRGlzcGxheSgpOwor
fQorCit2b2lkIFBhZ2VPdmVybGF5Q29udHJvbGxlcjo6ZGlkQ2hhbmdlRXhwb3NlZFJlY3QoKQor
eworICAgIG1fbWFpbkZyYW1lLnBhZ2UoKS0+Y2hyb21lKCkuY2xpZW50KCkuc2NoZWR1bGVDb21w
b3NpdGluZ0xheWVyRmx1c2goKTsKK30KKwordm9pZCBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6OmRp
ZFNjcm9sbEZyYW1lKEZyYW1lJiBmcmFtZSkKK3sKKyAgICBmb3IgKGF1dG8mIG92ZXJsYXlBbmRM
YXllciA6IG1fb3ZlcmxheUdyYXBoaWNzTGF5ZXJzKSB7CisgICAgICAgIGlmIChvdmVybGF5QW5k
TGF5ZXIua2V5LT5vdmVybGF5VHlwZSgpID09IFBhZ2VPdmVybGF5OjpPdmVybGF5VHlwZTo6Vmll
dyB8fCAhZnJhbWUuaXNNYWluRnJhbWUoKSkKKyAgICAgICAgICAgIG92ZXJsYXlBbmRMYXllci52
YWx1ZS0+c2V0TmVlZHNEaXNwbGF5KCk7CisgICAgICAgIG92ZXJsYXlBbmRMYXllci5rZXktPmRp
ZFNjcm9sbEZyYW1lKGZyYW1lKTsKKyAgICB9Cit9CisKK3ZvaWQgUGFnZU92ZXJsYXlDb250cm9s
bGVyOjp1cGRhdGVTZXR0aW5nc0ZvckxheWVyKEdyYXBoaWNzTGF5ZXImIGxheWVyKQoreworICAg
IFNldHRpbmdzJiBzZXR0aW5ncyA9IG1fbWFpbkZyYW1lLnBhZ2UoKS0+c2V0dGluZ3MoKTsKKyAg
ICBsYXllci5zZXRBY2NlbGVyYXRlc0RyYXdpbmcoc2V0dGluZ3MuYWNjZWxlcmF0ZWREcmF3aW5n
RW5hYmxlZCgpKTsKKyAgICBsYXllci5zZXRTaG93RGVidWdCb3JkZXIoc2V0dGluZ3Muc2hvd0Rl
YnVnQm9yZGVycygpKTsKKyAgICBsYXllci5zZXRTaG93UmVwYWludENvdW50ZXIoc2V0dGluZ3Mu
c2hvd1JlcGFpbnRDb3VudGVyKCkpOworfQorCitib29sIFBhZ2VPdmVybGF5Q29udHJvbGxlcjo6
aGFuZGxlTW91c2VFdmVudChjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIG1vdXNlRXZlbnQpCit7
CisgICAgaWYgKCFtX3BhZ2VPdmVybGF5cy5zaXplKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIGZvciAoYXV0byBpdCA9IG1fcGFnZU92ZXJsYXlzLnJiZWdpbigpLCBlbmQgPSBtX3Bh
Z2VPdmVybGF5cy5yZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBpZiAoKCppdCkt
Pm1vdXNlRXZlbnQobW91c2VFdmVudCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUGFnZU92ZXJsYXlDb250cm9sbGVyOjpj
b3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVN0cmluZ1ZhbHVlRm9yUG9pbnQoU3RyaW5nIGF0dHJp
YnV0ZSwgRmxvYXRQb2ludCBwYXJhbWV0ZXIsIFN0cmluZyYgdmFsdWUpCit7CisgICAgaWYgKCFt
X3BhZ2VPdmVybGF5cy5zaXplKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGZvciAo
YXV0byBpdCA9IG1fcGFnZU92ZXJsYXlzLnJiZWdpbigpLCBlbmQgPSBtX3BhZ2VPdmVybGF5cy5y
ZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBpZiAoKCppdCktPmNvcHlBY2Nlc3Np
YmlsaXR5QXR0cmlidXRlU3RyaW5nVmFsdWVGb3JQb2ludChhdHRyaWJ1dGUsIHBhcmFtZXRlciwg
dmFsdWUpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIGZh
bHNlOworfQorCitib29sIFBhZ2VPdmVybGF5Q29udHJvbGxlcjo6Y29weUFjY2Vzc2liaWxpdHlB
dHRyaWJ1dGVCb29sVmFsdWVGb3JQb2ludChTdHJpbmcgYXR0cmlidXRlLCBGbG9hdFBvaW50IHBh
cmFtZXRlciwgYm9vbCYgdmFsdWUpCit7CisgICAgaWYgKCFtX3BhZ2VPdmVybGF5cy5zaXplKCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGZvciAoYXV0byBpdCA9IG1fcGFnZU92ZXJs
YXlzLnJiZWdpbigpLCBlbmQgPSBtX3BhZ2VPdmVybGF5cy5yZW5kKCk7IGl0ICE9IGVuZDsgKytp
dCkgeworICAgICAgICBpZiAoKCppdCktPmNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlQm9vbFZh
bHVlRm9yUG9pbnQoYXR0cmlidXRlLCBwYXJhbWV0ZXIsIHZhbHVlKSkKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK1ZlY3RvcjxT
dHJpbmc+IFBhZ2VPdmVybGF5Q29udHJvbGxlcjo6Y29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVz
TmFtZXMoYm9vbCBwYXJhbWV0ZXJpemVkTmFtZXMpCit7CisgICAgaWYgKCFtX3BhZ2VPdmVybGF5
cy5zaXplKCkpCisgICAgICAgIHJldHVybiBWZWN0b3I8U3RyaW5nPigpOworCisgICAgZm9yIChh
dXRvIGl0ID0gbV9wYWdlT3ZlcmxheXMucmJlZ2luKCksIGVuZCA9IG1fcGFnZU92ZXJsYXlzLnJl
bmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIFZlY3RvcjxTdHJpbmc+IG5hbWVzID0g
KCppdCktPmNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlTmFtZXMocGFyYW1ldGVyaXplZE5hbWVz
KTsKKyAgICAgICAgaWYgKCFuYW1lcy5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm4gbmFt
ZXM7CisgICAgfQorCisgICAgcmV0dXJuIFZlY3RvcjxTdHJpbmc+KCk7Cit9CisKK3ZvaWQgUGFn
ZU92ZXJsYXlDb250cm9sbGVyOjpwYWludENvbnRlbnRzKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNz
TGF5ZXIqIGdyYXBoaWNzTGF5ZXIsIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3ND
b250ZXh0LCBXZWJDb3JlOjpHcmFwaGljc0xheWVyUGFpbnRpbmdQaGFzZSwgY29uc3QgV2ViQ29y
ZTo6RmxvYXRSZWN0JiBjbGlwUmVjdCkKK3sKKyAgICBmb3IgKGF1dG8gaXQgPSBtX292ZXJsYXlH
cmFwaGljc0xheWVycy5iZWdpbigpLCBlbmQgPSBtX292ZXJsYXlHcmFwaGljc0xheWVycy5lbmQo
KTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIGlmIChpdC0+dmFsdWUuZ2V0KCkgIT0gZ3Jh
cGhpY3NMYXllcikKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIEdyYXBoaWNzQ29u
dGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihncmFwaGljc0NvbnRleHQpOworICAgICAgICBncmFw
aGljc0NvbnRleHQuY2xpcChjbGlwUmVjdCk7CisgICAgICAgIGl0LT5rZXktPmRyYXdSZWN0KGdy
YXBoaWNzQ29udGV4dCwgZW5jbG9zaW5nSW50UmVjdChjbGlwUmVjdCkpOworCisgICAgICAgIHJl
dHVybjsKKyAgICB9Cit9CisKK2Zsb2F0IFBhZ2VPdmVybGF5Q29udHJvbGxlcjo6ZGV2aWNlU2Nh
bGVGYWN0b3IoKSBjb25zdAoreworICAgIHJldHVybiBtX21haW5GcmFtZS5wYWdlKCktPmRldmlj
ZVNjYWxlRmFjdG9yKCk7Cit9CisKK3ZvaWQgUGFnZU92ZXJsYXlDb250cm9sbGVyOjpub3RpZnlG
bHVzaFJlcXVpcmVkKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKQoreworICAgIG1fbWFp
bkZyYW1lLnBhZ2UoKS0+Y2hyb21lKCkuY2xpZW50KCkuc2NoZWR1bGVDb21wb3NpdGluZ0xheWVy
Rmx1c2goKTsKK30KKwordm9pZCBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6OmRpZENoYW5nZU92ZXJs
YXlGcmFtZShQYWdlT3ZlcmxheSYgb3ZlcmxheSkKK3sKKyAgICBBU1NFUlQobV9wYWdlT3Zlcmxh
eXMuY29udGFpbnMoJm92ZXJsYXkpKTsKKyAgICB1cGRhdGVPdmVybGF5R2VvbWV0cnkob3Zlcmxh
eSwgKm1fb3ZlcmxheUdyYXBoaWNzTGF5ZXJzLmdldCgmb3ZlcmxheSkpOworfQorCit2b2lkIFBh
Z2VPdmVybGF5Q29udHJvbGxlcjo6ZGlkQ2hhbmdlT3ZlcmxheUJhY2tncm91bmRDb2xvcihQYWdl
T3ZlcmxheSYgb3ZlcmxheSkKK3sKKyAgICBBU1NFUlQobV9wYWdlT3ZlcmxheXMuY29udGFpbnMo
Jm92ZXJsYXkpKTsKKyAgICBtX292ZXJsYXlHcmFwaGljc0xheWVycy5nZXQoJm92ZXJsYXkpLT5z
ZXRCYWNrZ3JvdW5kQ29sb3Iob3ZlcmxheS5iYWNrZ3JvdW5kQ29sb3IoKSk7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlT3Zl
cmxheUNvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZU92ZXJsYXlDb250cm9s
bGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjY5YzczNgotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZU92ZXJsYXlDb250cm9sbGVyLmgK
QEAgLTAsMCArMSwxMDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFBhZ2VPdmVybGF5Q29udHJv
bGxlcl9oCisjZGVmaW5lIFBhZ2VPdmVybGF5Q29udHJvbGxlcl9oCisKKyNpbmNsdWRlICJHcmFw
aGljc0xheWVyQ2xpZW50LmgiCisjaW5jbHVkZSAiUGFnZU92ZXJsYXkuaCIKKyNpbmNsdWRlIDx3
dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRnJhbWU7CitjbGFzcyBNYWlu
RnJhbWU7CitjbGFzcyBQYWdlOworY2xhc3MgUGxhdGZvcm1Nb3VzZUV2ZW50OworCitjbGFzcyBQ
YWdlT3ZlcmxheUNvbnRyb2xsZXIgZmluYWwgOiBwdWJsaWMgR3JhcGhpY3NMYXllckNsaWVudCB7
CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUGFnZU92ZXJsYXlDb250cm9sbGVyKTsKKyAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBQYWdlT3ZlcmxheUNvbnRyb2xs
ZXIoTWFpbkZyYW1lJik7CisgICAgdmlydHVhbCB+UGFnZU92ZXJsYXlDb250cm9sbGVyKCk7CisK
KyAgICBHcmFwaGljc0xheWVyJiBkb2N1bWVudE92ZXJsYXlSb290TGF5ZXIoKTsKKyAgICBHcmFw
aGljc0xheWVyJiB2aWV3T3ZlcmxheVJvb3RMYXllcigpOworCisgICAgdm9pZCBpbnN0YWxsUGFn
ZU92ZXJsYXkoUGFzc1JlZlB0cjxQYWdlT3ZlcmxheT4sIFBhZ2VPdmVybGF5OjpGYWRlTW9kZSk7
CisgICAgdm9pZCB1bmluc3RhbGxQYWdlT3ZlcmxheShQYWdlT3ZlcmxheSosIFBhZ2VPdmVybGF5
OjpGYWRlTW9kZSk7CisKKyAgICB2b2lkIHNldFBhZ2VPdmVybGF5TmVlZHNEaXNwbGF5KFBhZ2VP
dmVybGF5JiwgY29uc3QgSW50UmVjdCYpOworICAgIHZvaWQgc2V0UGFnZU92ZXJsYXlPcGFjaXR5
KFBhZ2VPdmVybGF5JiwgZmxvYXQpOworICAgIHZvaWQgY2xlYXJQYWdlT3ZlcmxheShQYWdlT3Zl
cmxheSYpOworICAgIEdyYXBoaWNzTGF5ZXImIGxheWVyRm9yT3ZlcmxheShQYWdlT3ZlcmxheSYp
IGNvbnN0OworCisgICAgdm9pZCB3aWxsQXR0YWNoUm9vdExheWVyKCk7CisKKyAgICB2b2lkIGRp
ZENoYW5nZVZpZXdTaXplKCk7CisgICAgdm9pZCBkaWRDaGFuZ2VEb2N1bWVudFNpemUoKTsKKyAg
ICB2b2lkIGRpZENoYW5nZVNldHRpbmdzKCk7CisgICAgdm9pZCBkaWRDaGFuZ2VEZXZpY2VTY2Fs
ZUZhY3RvcigpOworICAgIHZvaWQgZGlkQ2hhbmdlRXhwb3NlZFJlY3QoKTsKKyAgICB2b2lkIGRp
ZFNjcm9sbEZyYW1lKEZyYW1lJik7CisKKyAgICB2b2lkIGRpZENoYW5nZU92ZXJsYXlGcmFtZShQ
YWdlT3ZlcmxheSYpOworICAgIHZvaWQgZGlkQ2hhbmdlT3ZlcmxheUJhY2tncm91bmRDb2xvcihQ
YWdlT3ZlcmxheSYpOworCisgICAgaW50IG92ZXJsYXlDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1f
b3ZlcmxheUdyYXBoaWNzTGF5ZXJzLnNpemUoKTsgfQorCisgICAgYm9vbCBoYW5kbGVNb3VzZUV2
ZW50KGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYpOworCisgICAgYm9vbCBjb3B5QWNjZXNzaWJp
bGl0eUF0dHJpYnV0ZVN0cmluZ1ZhbHVlRm9yUG9pbnQoU3RyaW5nIGF0dHJpYnV0ZSwgRmxvYXRQ
b2ludCwgU3RyaW5nJiB2YWx1ZSk7CisgICAgYm9vbCBjb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0
ZUJvb2xWYWx1ZUZvclBvaW50KFN0cmluZyBhdHRyaWJ1dGUsIEZsb2F0UG9pbnQsIGJvb2wmIHZh
bHVlKTsKKyAgICBWZWN0b3I8U3RyaW5nPiBjb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZXNOYW1l
cyhib29sIHBhcmFtZXRlcml6ZWROYW1lcyk7CisKK3ByaXZhdGU6CisgICAgdm9pZCBjcmVhdGVS
b290TGF5ZXJzSWZOZWVkZWQoKTsKKworICAgIHZvaWQgdXBkYXRlU2V0dGluZ3NGb3JMYXllcihH
cmFwaGljc0xheWVyJik7CisgICAgdm9pZCB1cGRhdGVGb3JjZVN5bmNocm9ub3VzU2Nyb2xsTGF5
ZXJQb3NpdGlvblVwZGF0ZXMoKTsKKworICAgIC8vIEdyYXBoaWNzTGF5ZXJDbGllbnQKKyAgICB2
aXJ0dWFsIHZvaWQgbm90aWZ5Rmx1c2hSZXF1aXJlZChjb25zdCBHcmFwaGljc0xheWVyKikgb3Zl
cnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVudHMoY29uc3QgR3JhcGhpY3NMYXll
ciosIEdyYXBoaWNzQ29udGV4dCYsIEdyYXBoaWNzTGF5ZXJQYWludGluZ1BoYXNlLCBjb25zdCBG
bG9hdFJlY3QmIGNsaXBSZWN0KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGZsb2F0IGRldmljZVNj
YWxlRmFjdG9yKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29sIHNob3VsZFNraXBM
YXllckluRHVtcChjb25zdCBHcmFwaGljc0xheWVyKikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4g
dHJ1ZTsgfQorCisgICAgc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzTGF5ZXI+IG1fZG9jdW1lbnRP
dmVybGF5Um9vdExheWVyOworICAgIHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0xheWVyPiBtX3Zp
ZXdPdmVybGF5Um9vdExheWVyOworICAgIGJvb2wgbV9pbml0aWFsaXplZDsKKworICAgIEhhc2hN
YXA8UGFnZU92ZXJsYXkqLCBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NMYXllcj4+IG1fb3Zlcmxh
eUdyYXBoaWNzTGF5ZXJzOworICAgIFZlY3RvcjxSZWZQdHI8UGFnZU92ZXJsYXk+PiBtX3BhZ2VP
dmVybGF5czsKKyAgICBNYWluRnJhbWUmIG1fbWFpbkZyYW1lOworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CisKKyNlbmRpZiAvLyBQYWdlT3ZlcmxheUNvbnRyb2xsZXJfaApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllckNsaWVudC5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllckNsaWVudC5o
CmluZGV4IDhhNDgzMzMuLjI1OTIyY2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXJDbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyQ2xpZW50LmgKQEAgLTI2LDYgKzI2LDggQEAK
ICNpZm5kZWYgR3JhcGhpY3NMYXllckNsaWVudF9oCiAjZGVmaW5lIEdyYXBoaWNzTGF5ZXJDbGll
bnRfaAogCisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKwogbmFtZXNwYWNlIFdlYkNvcmUgewog
CiBjbGFzcyBGbG9hdFBvaW50OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxheWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5j
cHAKaW5kZXggZDlkNTkzMy4uMTYzNzRkYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGF5ZXIuY3BwCkBAIC0yMzIyLDcgKzIzMjIsNyBAQCB2b2lkIFJlbmRlckxheWVyOjpzY3Jv
bGxUbyhpbnQgeCwgaW50IHkpCiAKICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZFNj
cm9sbExheWVyKCZmcmFtZSk7CiAgICAgaWYgKHNjcm9sbHNPdmVyZmxvdygpKQotICAgICAgICBm
cmFtZS5sb2FkZXIoKS5jbGllbnQoKS5kaWRDaGFuZ2VTY3JvbGxPZmZzZXQoKTsKKyAgICAgICAg
dmlldy5mcmFtZVZpZXcoKS5kaWRDaGFuZ2VTY3JvbGxPZmZzZXQoKTsKIAogICAgIHZpZXcuZnJh
bWVWaWV3KCkucmVzdW1lVmlzaWJsZUltYWdlQW5pbWF0aW9uc0luY2x1ZGluZ1N1YmZyYW1lcygp
OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29t
cG9zaXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3Np
dG9yLmNwcAppbmRleCA0YmU0NjkxLi41NzM0ZDcxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcApAQCAtNDUsNiArNDUsNyBAQAog
I2luY2x1ZGUgIk1haW5GcmFtZS5oIgogI2luY2x1ZGUgIk5vZGVMaXN0LmgiCiAjaW5jbHVkZSAi
UGFnZS5oIgorI2luY2x1ZGUgIlBhZ2VPdmVybGF5Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIlJl
bmRlckVtYmVkZGVkT2JqZWN0LmgiCiAjaW5jbHVkZSAiUmVuZGVyRmxvd1RocmVhZC5oIgogI2lu
Y2x1ZGUgIlJlbmRlckZ1bGxTY3JlZW4uaCIKQEAgLTY0Myw3ICs2NDQsOCBAQCB2b2lkIFJlbmRl
ckxheWVyQ29tcG9zaXRvcjo6dXBkYXRlQ29tcG9zaXRpbmdMYXllcnNUaW1lckZpcmVkKFRpbWVy
PFJlbmRlckxheWVyQwogCiBib29sIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6aGFzQW55QWRkaXRp
b25hbENvbXBvc2l0ZWRMYXllcnMoY29uc3QgUmVuZGVyTGF5ZXImIHJvb3RMYXllcikgY29uc3QK
IHsKLSAgICByZXR1cm4gbV9jb21wb3NpdGVkTGF5ZXJDb3VudCA+IChyb290TGF5ZXIuaXNDb21w
b3NpdGVkKCkgPyAxIDogMCk7CisgICAgaW50IGxheWVyQ291bnQgPSBtX2NvbXBvc2l0ZWRMYXll
ckNvdW50ICsgbV9yZW5kZXJWaWV3LmZyYW1lKCkubWFpbkZyYW1lKCkucGFnZU92ZXJsYXlDb250
cm9sbGVyKCkub3ZlcmxheUNvdW50KCk7CisgICAgcmV0dXJuIGxheWVyQ291bnQgPiAocm9vdExh
eWVyLmlzQ29tcG9zaXRlZCgpID8gMSA6IDApOwogfQogCiB2b2lkIFJlbmRlckxheWVyQ29tcG9z
aXRvcjo6Y2FuY2VsQ29tcG9zaXRpbmdMYXllclVwZGF0ZSgpCkBAIC02NjUsNyArNjY3LDcgQEAg
dm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJzKENvbXBv
c2l0aW5nVXBkYXRlVHlwZSB1cGRhdGUKICAgICBpZiAobV9yZW5kZXJWaWV3Lm5lZWRzTGF5b3V0
KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChtX2ZvcmNlQ29tcG9zaXRpbmdNb2RlICYm
ICFtX2NvbXBvc2l0aW5nKQorICAgIGlmICgobV9mb3JjZUNvbXBvc2l0aW5nTW9kZSB8fCBtX3Jl
bmRlclZpZXcuZnJhbWUoKS5tYWluRnJhbWUoKS5wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKS5vdmVy
bGF5Q291bnQoKSkgJiYgIW1fY29tcG9zaXRpbmcpCiAgICAgICAgIGVuYWJsZUNvbXBvc2l0aW5n
TW9kZSh0cnVlKTsKIAogICAgIGlmICghbV9yZWV2YWx1YXRlQ29tcG9zaXRpbmdBZnRlckxheW91
dCAmJiAhbV9jb21wb3NpdGluZykKQEAgLTc0OCw3ICs3NTAsNyBAQCB2b2lkIFJlbmRlckxheWVy
Q29tcG9zaXRvcjo6dXBkYXRlQ29tcG9zaXRpbmdMYXllcnMoQ29tcG9zaXRpbmdVcGRhdGVUeXBl
IHVwZGF0ZQogCiAgICAgICAgIC8vIEhvc3QgdGhlIGRvY3VtZW50IGxheWVyIGluIHRoZSBSZW5k
ZXJWaWV3J3Mgcm9vdCBsYXllci4KICAgICAgICAgaWYgKGlzRnVsbFVwZGF0ZSkgewotICAgICAg
ICAgICAgYXBwZW5kT3ZlcmxheUxheWVycyhjaGlsZExpc3QpOworICAgICAgICAgICAgYXBwZW5k
RG9jdW1lbnRPdmVybGF5TGF5ZXJzKGNoaWxkTGlzdCk7CiAgICAgICAgICAgICAvLyBFdmVuIHdo
ZW4gY2hpbGRMaXN0IGlzIGVtcHR5LCBkb24ndCBkcm9wIG91dCBvZiBjb21wb3NpdGluZyBtb2Rl
IGlmIHRoZXJlIGFyZQogICAgICAgICAgICAgLy8gY29tcG9zaXRlZCBsYXllcnMgdGhhdCB3ZSBk
aWRuJ3QgaGl0IGluIG91ciB0cmF2ZXJzYWwgKGUuZy4gYmVjYXVzZSBvZiB2aXNpYmlsaXR5Omhp
ZGRlbikuCiAgICAgICAgICAgICBpZiAoY2hpbGRMaXN0LmlzRW1wdHkoKSAmJiAhaGFzQW55QWRk
aXRpb25hbENvbXBvc2l0ZWRMYXllcnMoKnVwZGF0ZVJvb3QpKQpAQCAtNzg0LDE1ICs3ODYsMTkg
QEAgdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJzKENv
bXBvc2l0aW5nVXBkYXRlVHlwZSB1cGRhdGUKICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246
OmxheWVyVHJlZURpZENoYW5nZShwYWdlKCkpOwogfQogCi12b2lkIFJlbmRlckxheWVyQ29tcG9z
aXRvcjo6YXBwZW5kT3ZlcmxheUxheWVycyhWZWN0b3I8R3JhcGhpY3NMYXllcio+JiBjaGlsZExp
c3QpCit2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6YXBwZW5kRG9jdW1lbnRPdmVybGF5TGF5
ZXJzKFZlY3RvcjxHcmFwaGljc0xheWVyKj4mIGNoaWxkTGlzdCkKIHsKICAgICBGcmFtZSYgZnJh
bWUgPSBtX3JlbmRlclZpZXcuZnJhbWVWaWV3KCkuZnJhbWUoKTsKKyAgICBpZiAoIWZyYW1lLmlz
TWFpbkZyYW1lKCkpCisgICAgICAgIHJldHVybjsKKwogICAgIFBhZ2UqIHBhZ2UgPSBmcmFtZS5w
YWdlKCk7CiAgICAgaWYgKCFwYWdlKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoR3JhcGhp
Y3NMYXllciogb3ZlcmxheUxheWVyID0gcGFnZS0+Y2hyb21lKCkuY2xpZW50KCkuZG9jdW1lbnRP
dmVybGF5TGF5ZXJGb3JGcmFtZShmcmFtZSkpCi0gICAgICAgIGNoaWxkTGlzdC5hcHBlbmQob3Zl
cmxheUxheWVyKTsKKyAgICBQYWdlT3ZlcmxheUNvbnRyb2xsZXImIHBhZ2VPdmVybGF5Q29udHJv
bGxlciA9IGZyYW1lLm1haW5GcmFtZSgpLnBhZ2VPdmVybGF5Q29udHJvbGxlcigpOworICAgIHBh
Z2VPdmVybGF5Q29udHJvbGxlci53aWxsQXR0YWNoUm9vdExheWVyKCk7CisgICAgY2hpbGRMaXN0
LmFwcGVuZCgmcGFnZU92ZXJsYXlDb250cm9sbGVyLmRvY3VtZW50T3ZlcmxheVJvb3RMYXllcigp
KTsKIH0KIAogdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmxheWVyQmVjYW1lTm9uQ29tcG9z
aXRlZChjb25zdCBSZW5kZXJMYXllciYgbGF5ZXIpCkBAIC0zMzY2LDYgKzMzNzIsMTEgQEAgdm9p
ZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmF0dGFjaFJvb3RMYXllcihSb290TGF5ZXJBdHRhY2ht
ZW50IGF0dGFjaG1lbnQpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgICAgICBw
YWdlLT5jaHJvbWUoKS5jbGllbnQoKS5hdHRhY2hSb290R3JhcGhpY3NMYXllcigmZnJhbWUsIHJv
b3RHcmFwaGljc0xheWVyKCkpOworICAgICAgICAgICAgaWYgKGZyYW1lLmlzTWFpbkZyYW1lKCkp
IHsKKyAgICAgICAgICAgICAgICBQYWdlT3ZlcmxheUNvbnRyb2xsZXImIHBhZ2VPdmVybGF5Q29u
dHJvbGxlciA9IGZyYW1lLm1haW5GcmFtZSgpLnBhZ2VPdmVybGF5Q29udHJvbGxlcigpOworICAg
ICAgICAgICAgICAgIHBhZ2VPdmVybGF5Q29udHJvbGxlci53aWxsQXR0YWNoUm9vdExheWVyKCk7
CisgICAgICAgICAgICAgICAgcGFnZS0+Y2hyb21lKCkuY2xpZW50KCkuYXR0YWNoVmlld092ZXJs
YXlHcmFwaGljc0xheWVyKCZmcmFtZSwgJnBhZ2VPdmVybGF5Q29udHJvbGxlci52aWV3T3Zlcmxh
eVJvb3RMYXllcigpKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CiAgICAgICAgIGNhc2UgUm9vdExheWVyQXR0YWNoZWRWaWFFbmNsb3NpbmdGcmFtZTogewpA
QCAtMzQxMCw2ICszNDIxLDggQEAgdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmRldGFjaFJv
b3RMYXllcigpCiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgcGFnZS0+Y2hyb21lKCku
Y2xpZW50KCkuYXR0YWNoUm9vdEdyYXBoaWNzTGF5ZXIoJmZyYW1lLCAwKTsKKyAgICAgICAgaWYg
KGZyYW1lLmlzTWFpbkZyYW1lKCkpCisgICAgICAgICAgICBwYWdlLT5jaHJvbWUoKS5jbGllbnQo
KS5hdHRhY2hWaWV3T3ZlcmxheUdyYXBoaWNzTGF5ZXIoJmZyYW1lLCAwKTsKICAgICB9CiAgICAg
YnJlYWs7CiAgICAgY2FzZSBSb290TGF5ZXJVbmF0dGFjaGVkOgpAQCAtMzQ0NCw4ICszNDU3LDEy
IEBAIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyb290TGF5ZXJBdHRhY2htZW50Q2hhbmdl
ZCgpCiAgICAgaWYgKFJlbmRlckxheWVyQmFja2luZyogYmFja2luZyA9IGxheWVyID8gbGF5ZXIt
PmJhY2tpbmcoKSA6IG51bGxwdHIpCiAgICAgICAgIGJhY2tpbmctPnVwZGF0ZURyYXdzQ29udGVu
dCgpOwogCi0gICAgaWYgKEdyYXBoaWNzTGF5ZXIqIG92ZXJsYXlMYXllciA9IHBhZ2UtPmNocm9t
ZSgpLmNsaWVudCgpLmRvY3VtZW50T3ZlcmxheUxheWVyRm9yRnJhbWUoZnJhbWUpKQotICAgICAg
ICBtX3Jvb3RDb250ZW50TGF5ZXItPmFkZENoaWxkKG92ZXJsYXlMYXllcik7CisgICAgaWYgKCFm
cmFtZS5pc01haW5GcmFtZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBQYWdlT3ZlcmxheUNv
bnRyb2xsZXImIHBhZ2VPdmVybGF5Q29udHJvbGxlciA9IGZyYW1lLm1haW5GcmFtZSgpLnBhZ2VP
dmVybGF5Q29udHJvbGxlcigpOworICAgIHBhZ2VPdmVybGF5Q29udHJvbGxlci53aWxsQXR0YWNo
Um9vdExheWVyKCk7CisgICAgbV9yb290Q29udGVudExheWVyLT5hZGRDaGlsZCgmcGFnZU92ZXJs
YXlDb250cm9sbGVyLmRvY3VtZW50T3ZlcmxheVJvb3RMYXllcigpKTsKIH0KIAogLy8gSUZyYW1l
cyBhcmUgc3BlY2lhbCwgYmVjYXVzZSB3ZSBob29rIGNvbXBvc2l0aW5nIGxheWVycyB0b2dldGhl
ciBhY3Jvc3MgaWZyYW1lIGJvdW5kYXJpZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMYXllckNvbXBvc2l0b3IuaAppbmRleCA3YmQyNDBhLi5kOWE4NzRiIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5oCkBAIC0z
NjIsNyArMzYyLDcgQEAgcHJpdmF0ZToKICAgICBib29sIGxheWVySGFzM0RDb250ZW50KGNvbnN0
IFJlbmRlckxheWVyJikgY29uc3Q7CiAgICAgYm9vbCBpc1J1bm5pbmdBY2NlbGVyYXRlZFRyYW5z
Zm9ybUFuaW1hdGlvbihSZW5kZXJMYXllck1vZGVsT2JqZWN0JikgY29uc3Q7CiAKLSAgICB2b2lk
IGFwcGVuZE92ZXJsYXlMYXllcnMoVmVjdG9yPEdyYXBoaWNzTGF5ZXIqPiYpOworICAgIHZvaWQg
YXBwZW5kRG9jdW1lbnRPdmVybGF5TGF5ZXJzKFZlY3RvcjxHcmFwaGljc0xheWVyKj4mKTsKICAg
ICBib29sIGhhc0FueUFkZGl0aW9uYWxDb21wb3NpdGVkTGF5ZXJzKGNvbnN0IFJlbmRlckxheWVy
JiByb290TGF5ZXIpIGNvbnN0OwogCiAgICAgdm9pZCBlbnN1cmVSb290TGF5ZXIoKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvbWFjL0No
YW5nZUxvZwppbmRleCBiZjZkOGViLi41NjE2YjdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L21hYy9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsMTYgQEAKKzIwMTQtMDktMzAgIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5j
b20+CisKKyAgICAgICAgTW92ZSBQYWdlT3ZlcmxheVtDb250cm9sbGVyXSB0byBXZWJDb3JlCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzcxNjQKKyAg
ICAgICAgPHJkYXI6Ly9wcm9ibGVtLzE4NTA4MjU4PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50
Lmg6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lm1tOgorICAgICAg
ICAoV2ViQ2hyb21lQ2xpZW50OjphdHRhY2hWaWV3T3ZlcmxheUdyYXBoaWNzTGF5ZXIpOgorICAg
ICAgICBBZGQgYW4gZW1wdHkgQ2hyb21lQ2xpZW50IG92ZXJyaWRlLgorCiAyMDE0LTA5LTI4ICBH
eXV5b3VuZyBLaW0gIDxneXV5b3VuZy5raW1Ac2Ftc3VuZy5jb20+CiAKICAgICAgICAgTW92ZSBD
b2xvcklucHV0VHlwZSBjbGFzcyB0byBzdGQ6OnVuaXF1ZV9wdHIKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oIGIvU291cmNlL1dl
YktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgKaW5kZXggMWQ0ODI4MS4u
NzI3MGNlMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2Vi
Q2hyb21lQ2xpZW50LmgKKysrIGIvU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2Vi
Q2hyb21lQ2xpZW50LmgKQEAgLTE2Myw2ICsxNjMsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBi
b29sIHNob3VsZFBhaW50RW50aXJlQ29udGVudHMoKSBjb25zdCBvdmVycmlkZTsKIAogICAgIHZp
cnR1YWwgdm9pZCBhdHRhY2hSb290R3JhcGhpY3NMYXllcihXZWJDb3JlOjpGcmFtZSosIFdlYkNv
cmU6OkdyYXBoaWNzTGF5ZXIqKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoVmll
d092ZXJsYXlHcmFwaGljc0xheWVyKFdlYkNvcmU6OkZyYW1lKiwgV2ViQ29yZTo6R3JhcGhpY3NM
YXllciopIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc09uZVNob3REcmF3aW5n
U3luY2hyb25pemF0aW9uKCkgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlQ29t
cG9zaXRpbmdMYXllckZsdXNoKCkgb3ZlcnJpZGU7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5tbSBiL1NvdXJjZS9XZWJLaXQv
bWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5tbQppbmRleCBlMWRjMTBkLi40NjA2
MzEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJv
bWVDbGllbnQubW0KKysrIGIvU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ2hy
b21lQ2xpZW50Lm1tCkBAIC05MjQsNiArOTI0LDExIEBAIHZvaWQgV2ViQ2hyb21lQ2xpZW50Ojph
dHRhY2hSb290R3JhcGhpY3NMYXllcihGcmFtZSogZnJhbWUsIEdyYXBoaWNzTGF5ZXIqIGdyYXBo
CiAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKIH0KIAordm9pZCBXZWJDaHJvbWVDbGll
bnQ6OmF0dGFjaFZpZXdPdmVybGF5R3JhcGhpY3NMYXllcihGcmFtZSosIEdyYXBoaWNzTGF5ZXIq
KQoreworICAgIC8vIEZJWE1FOiBJZiB3ZSB3YW50IHZpZXctcmVsYXRpdmUgcGFnZSBvdmVybGF5
cyBpbiBXZWJLaXQxLCB0aGlzIHdvdWxkIGJlIHRoZSBwbGFjZSB0byBob29rIHRoZW0gdXAuCit9
CisKIHZvaWQgV2ViQ2hyb21lQ2xpZW50OjpzZXROZWVkc09uZVNob3REcmF3aW5nU3luY2hyb25p
emF0aW9uKCkKIHsKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L3dpbi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L3dpbi9DaGFuZ2VM
b2cKaW5kZXggZjY3MTJmZS4uZmY3M2I0ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC93aW4v
Q2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvd2luL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2
IEBACisyMDE0LTA5LTMwICBUaW0gSG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgor
CisgICAgICAgIE1vdmUgUGFnZU92ZXJsYXlbQ29udHJvbGxlcl0gdG8gV2ViQ29yZQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM3MTY0CisgICAgICAg
IDxyZGFyOi8vcHJvYmxlbS8xODUwODI1OD4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHA6
CisgICAgICAgIChXZWJDaHJvbWVDbGllbnQ6OmF0dGFjaFZpZXdPdmVybGF5R3JhcGhpY3NMYXll
cik6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lmg6CisgICAgICAg
IEFkZCBhbiBlbXB0eSBDaHJvbWVDbGllbnQgb3ZlcnJpZGUuCisKIDIwMTQtMDktMjkgIENocmlz
dG9waGUgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIE1ha2UgaXM8PigpIC8g
ZG93bmNhc3Q8PigpIHdvcmsgZm9yIEhUTUxEb2N1bWVudCBhbmQgaXRzIHN1YmNsYXNzZXMKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVu
dC5jcHAgYi9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQu
Y3BwCmluZGV4IGE5YzBiMGEuLjVmYjE3OWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvd2lu
L1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAKKysrIGIvU291cmNlL1dlYktpdC93
aW4vV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcApAQCAtNzUyLDYgKzc1MiwxMSBA
QCB2b2lkIFdlYkNocm9tZUNsaWVudDo6YXR0YWNoUm9vdEdyYXBoaWNzTGF5ZXIoRnJhbWUqIGZy
YW1lLCBHcmFwaGljc0xheWVyKiBncmFwaAogICAgIG1fd2ViVmlldy0+c2V0Um9vdENoaWxkTGF5
ZXIoZ3JhcGhpY3NMYXllcik7CiB9CiAKK3ZvaWQgV2ViQ2hyb21lQ2xpZW50OjphdHRhY2hWaWV3
T3ZlcmxheUdyYXBoaWNzTGF5ZXIoRnJhbWUqLCBHcmFwaGljc0xheWVyKikKK3sKKyAgICAvLyBG
SVhNRTogSWYgd2Ugd2FudCB2aWV3LXJlbGF0aXZlIHBhZ2Ugb3ZlcmxheXMgaW4gV2ViS2l0MSBv
biBXaW5kb3dzLCB0aGlzIHdvdWxkIGJlIHRoZSBwbGFjZSB0byBob29rIHRoZW0gdXAuCit9CisK
IHZvaWQgV2ViQ2hyb21lQ2xpZW50OjpzY2hlZHVsZUNvbXBvc2l0aW5nTGF5ZXJGbHVzaCgpCiB7
CiAgICAgbV93ZWJWaWV3LT5mbHVzaFBlbmRpbmdHcmFwaGljc0xheWVyQ2hhbmdlc1Nvb24oKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNs
aWVudC5oIGIvU291cmNlL1dlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50
LmgKaW5kZXggM2NkNjI4MS4uY2Q3OTJjNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC93aW4v
V2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgKKysrIGIvU291cmNlL1dlYktpdC93aW4v
V2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgKQEAgLTEzMCw2ICsxMzAsNyBAQCBwdWJs
aWM6CiAKICAgICAvLyBQYXNzIDAgYXMgdGhlIEdyYXBoaWNzTGF5ZXIgdG8gZGV0YXRjaCB0aGUg
cm9vdCBsYXllci4KICAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoUm9vdEdyYXBoaWNzTGF5ZXIoV2Vi
Q29yZTo6RnJhbWUqLCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKik7CisgICAgdmlydHVhbCB2b2lk
IGF0dGFjaFZpZXdPdmVybGF5R3JhcGhpY3NMYXllcihXZWJDb3JlOjpGcmFtZSosIFdlYkNvcmU6
OkdyYXBoaWNzTGF5ZXIqKSBvdmVycmlkZTsKICAgICAvLyBTZXRzIGEgZmxhZyB0byBzcGVjaWZ5
IHRoYXQgdGhlIG5leHQgdGltZSBjb250ZW50IGlzIGRyYXduIHRvIHRoZSB3aW5kb3csCiAgICAg
Ly8gdGhlIGNoYW5nZXMgYXBwZWFyIG9uIHRoZSBzY3JlZW4gaW4gc3luY2hyb255IHdpdGggdXBk
YXRlcyB0byBHcmFwaGljc0xheWVycy4KICAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNPbmVTaG90
RHJhd2luZ1N5bmNocm9uaXphdGlvbigpIHsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
Q01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV2ViS2l0Mi9DTWFrZUxpc3RzLnR4dAppbmRleCA2YmRj
NTlkLi40YTQ2NTQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DTWFrZUxpc3RzLnR4dAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9DTWFrZUxpc3RzLnR4dApAQCAtNTQzLDggKzU0Myw2IEBAIHNl
dChXZWJLaXQyX1NPVVJDRVMKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIu
Y3BwCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUhvc3QuY3BwCiAgICAgV2ViUHJv
Y2Vzcy9XZWJQYWdlL1BhZ2VCYW5uZXIuY3BwCi0gICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1BhZ2VP
dmVybGF5LmNwcAotICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9QYWdlT3ZlcmxheUNvbnRyb2xsZXIu
Y3BwCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1RhcEhpZ2hsaWdodENvbnRyb2xsZXIuY3BwCiAg
ICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkJhY2tGb3J3YXJkTGlzdFByb3h5LmNwcAogICAgIFdl
YlByb2Nlc3MvV2ViUGFnZS9XZWJDb250ZXh0TWVudS5jcHAKQEAgLTU1NSw2ICs1NTMsNyBAQCBz
ZXQoV2ViS2l0Ml9TT1VSQ0VTCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYk9wZW5QYW5lbFJl
c3VsdExpc3RlbmVyLmNwcAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAogICAg
IFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlR3JvdXBQcm94eS5jcHAKKyAgICBXZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViUGFnZU92ZXJsYXkuY3BwCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1Zpc2l0
ZWRMaW5rVGFibGVDb250cm9sbGVyLmNwcAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJVbmRv
U3RlcC5jcHAKICkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJj
ZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCAzNjBhYmVmLi42ZjBmYjYyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMTM0IEBACisyMDE0LTA5LTMwICBUaW0gSG9ydG9uICA8dGltb3RoeV9ob3J0b25A
YXBwbGUuY29tPgorCisgICAgICAgIE1vdmUgUGFnZU92ZXJsYXlbQ29udHJvbGxlcl0gdG8gV2Vi
Q29yZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM3
MTY0CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xODUwODI1OD4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAg
ICAqIFdlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgTWFrZSB0aGUg
YXBwcm9wcmlhdGUgYnVpbGQgc3lzdGVtIGNoYW5nZXMuCisKKyAgICAgICAgKiBXZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlQVBJQ2FzdC5oOgorICAgICAgICBNYWtlIFdL
QnVuZGxlUGFnZU92ZXJsYXlSZWYgbWFwIHRvIFdlYlBhZ2VPdmVybGF5IGluc3RlYWQgb2YgUGFn
ZU92ZXJsYXkuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dL
QnVuZGxlUGFnZS5jcHA6CisgICAgICAgIChXS0J1bmRsZVBhZ2VJbnN0YWxsUGFnZU92ZXJsYXkp
OgorICAgICAgICAoV0tCdW5kbGVQYWdlVW5pbnN0YWxsUGFnZU92ZXJsYXkpOgorICAgICAgICAo
V0tCdW5kbGVQYWdlSW5zdGFsbFBhZ2VPdmVybGF5V2l0aEFuaW1hdGlvbik6CisgICAgICAgIChX
S0J1bmRsZVBhZ2VVbmluc3RhbGxQYWdlT3ZlcmxheVdpdGhBbmltYXRpb24pOgorICAgICAgICBG
b3J3YXJkIFBhZ2VPdmVybGF5IGluc3RhbGxhdGlvbi91bmluc3RhbGxhdGlvbiB0byBXZWJDb3Jl
LgorCisgICAgICAgICogV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZVBh
Z2VPdmVybGF5LmNwcDoKKyAgICAgICAgKFdLQnVuZGxlUGFnZU92ZXJsYXlHZXRUeXBlSUQpOgor
ICAgICAgICAoV0tCdW5kbGVQYWdlT3ZlcmxheUNyZWF0ZSk6CisgICAgICAgIChXS0J1bmRsZVBh
Z2VPdmVybGF5U2V0QWNjZXNzaWJpbGl0eUNsaWVudCk6CisgICAgICAgIFVzZSBXZWJQYWdlT3Zl
cmxheSBpbnN0ZWFkIG9mIFBhZ2VPdmVybGF5LCBhbmQgcmVmZXJlbmNlcyBpbnN0ZWFkIG9mIHBv
aW50ZXJzLgorICAgICAgICBXZSBmb3J3YXJkIGNsaWVudCBjYWxsYmFja3MgdGhyb3VnaCBmcm9t
IFBhZ2VPdmVybGF5OjpDbGllbnQgdG8gV2ViUGFnZU92ZXJsYXk6OkNsaWVudC4KKworICAgICAg
ICAoUGFnZU92ZXJsYXlDbGllbnRJbXBsOjpjb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVl
KToKKyAgICAgICAgKFBhZ2VPdmVybGF5Q2xpZW50SW1wbDo6Y29weUFjY2Vzc2liaWxpdHlBdHRy
aWJ1dGVOYW1lcyk6CisgICAgICAgIENvbnZlcnQgZnJvbSB3dGYgdHlwZXMgdG8gV2ViS2l0MiB0
eXBlcy4KKworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xp
ZW50LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViQ2hyb21lQ2xpZW50OjpncmFwaGljc0xheWVy
RmFjdG9yeSk6CisgICAgICAgIElmIHdlIGRvbid0IGhhdmUgYSBkcmF3aW5nIGFyZWEsIGRvbid0
IGRlcmVmZXJlbmNlIGl0IQorCisgICAgICAgIChXZWJLaXQ6OldlYkNocm9tZUNsaWVudDo6YXR0
YWNoVmlld092ZXJsYXlHcmFwaGljc0xheWVyKToKKyAgICAgICAgRm9yd2FyZCBhdHRhY2hWaWV3
T3ZlcmxheUdyYXBoaWNzTGF5ZXIgdG8gdGhlIERyYXdpbmdBcmVhLgorCisgICAgICAgICogV2Vi
UHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaDoKKworICAgICAgICAqIFdl
YlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50LmNwcDoKKyAgICAgICAg
KiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckNsaWVudC5oOgorICAgICAg
ICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5jcHA6CisgICAgICAgICogV2Vi
UHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9X
ZWJQYWdlL2lvcy9GaW5kQ29udHJvbGxlcklPUy5tbToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dl
YlBhZ2UvaW9zL0ZpbmRJbmRpY2F0b3JPdmVybGF5Q2xpZW50SU9TLmg6CisgICAgICAgICogV2Vi
UHJvY2Vzcy9XZWJQYWdlL21hYy9TZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyLm1tOgorICAgICAg
ICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9TZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyLmg6CisgICAg
ICAgIE1lY2hhbmljYWwgY2hhbmdlcyB0byBhZG9wdCB0byB0aGUgZmFjdCB0aGF0IFBhZ2VPdmVy
bGF5IGlzIGluIFdlYkNvcmUgbm93LgorCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0xh
eWVyVHJlZUhvc3QuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHA6
CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaDoKKyAgICAgICAgUmVtb3Zl
IHN1cHBvcnQgZm9yIFdlYktpdDItYmFzZWQgcGFnZSBvdmVybGF5cy4KKyAgICAgICAgUmV0dXJu
IE1haW5GcmFtZSBpbnN0ZWFkIG9mIEZyYW1lIGZyb20gbWFpbkZyYW1lKCkuCisKKyAgICAgICAg
KiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZU92ZXJsYXkuY3BwOiBBZGRlZC4KKyAgICAgICAg
KiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZU92ZXJsYXkuaDogQWRkZWQuCisgICAgICAgIChX
ZWJLaXQ6OldlYlBhZ2VPdmVybGF5OjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdl
T3ZlcmxheTo6V2ViUGFnZU92ZXJsYXkpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlT3Zlcmxh
eTo6fldlYlBhZ2VPdmVybGF5KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZU92ZXJsYXk6OnNl
dE5lZWRzRGlzcGxheSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VPdmVybGF5OjpjbGVhcik6
CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VPdmVybGF5OjpwYWdlT3ZlcmxheURlc3Ryb3llZCk6
CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VPdmVybGF5Ojp3aWxsTW92ZVRvUGFnZSk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlBhZ2VPdmVybGF5OjpkaWRNb3ZlVG9QYWdlKToKKyAgICAgICAgKFdl
YktpdDo6V2ViUGFnZU92ZXJsYXk6OmRyYXdSZWN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFn
ZU92ZXJsYXk6Om1vdXNlRXZlbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlT3ZlcmxheTo6
ZGlkU2Nyb2xsRnJhbWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlT3ZlcmxheTo6Y29weUFj
Y2Vzc2liaWxpdHlBdHRyaWJ1dGVTdHJpbmdWYWx1ZUZvclBvaW50KToKKyAgICAgICAgKFdlYktp
dDo6V2ViUGFnZU92ZXJsYXk6OmNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlQm9vbFZhbHVlRm9y
UG9pbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlT3ZlcmxheTo6Y29weUFjY2Vzc2liaWxp
dHlBdHRyaWJ1dGVOYW1lcyk6CisgICAgICAgIFdlYlBhZ2VPdmVybGF5IGV4aXN0cyB0byBiZSBv
dXIgQVBJIG9iamVjdCwgYnV0IGZvcndhcmRzIGV2ZXJ5dGhpbmcKKyAgICAgICAgdG8gaXRzIFdl
YkNvcmU6OlBhZ2VPdmVybGF5LCBhbmQgaW1wbGVtZW50cyBXZWJDb3JlOjpQYWdlT3ZlcmxheTo6
Q2xpZW50LCBhbmQKKyAgICAgICAgZm9yd2FyZHMgY2xpZW50IGNhbGxiYWNrcyB0byBpdHMgV2Vi
UGFnZU92ZXJsYXk6OkNsaWVudCAod2hpY2gKKyAgICAgICAgV0tCdW5kbGVQYWdlT3ZlcmxheSBp
bXBsZW1lbnRzKS4KKworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV0tBY2Nlc3Np
YmlsaXR5V2ViUGFnZU9iamVjdE1hYy5tbToKKyAgICAgICAgKC1bV0tBY2Nlc3NpYmlsaXR5V2Vi
UGFnZU9iamVjdCBhY2Nlc3NpYmlsaXR5UGFyYW1ldGVyaXplZEF0dHJpYnV0ZU5hbWVzXSk6Cisg
ICAgICAgICgtW1dLQWNjZXNzaWJpbGl0eVdlYlBhZ2VPYmplY3QgYWNjZXNzaWJpbGl0eUF0dHJp
YnV0ZVZhbHVlOmZvclBhcmFtZXRlcjpdKToKKyAgICAgICAgRm9yd2FyZCB0aGUgdGhyZWUgQVgg
cHJvcGVydGllcyB0aGF0IFBhZ2VPdmVybGF5cyBhcmUgZXZlciBxdWVyaWVkIGZvcgorICAgICAg
ICB0byB0aGUgYXBwcm9wcmlhdGUgUGFnZU92ZXJsYXlDb250cm9sbGVyIGZ1bmN0aW9uLgorICAg
ICAgICAKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1JlbW90ZUxheWVyVHJlZURy
YXdpbmdBcmVhLmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9SZW1vdGVMYXll
clRyZWVEcmF3aW5nQXJlYS5tbToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlTGF5ZXJUcmVlRHJh
d2luZ0FyZWE6OlJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhKToKKyAgICAgICAgKFdlYktpdDo6
UmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWE6OnVwZGF0ZVJvb3RMYXllcnMpOgorICAgICAgICBG
YWN0b3IgdXBkYXRlUm9vdExheWVycyBvdXQgb2Ygc2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIuCisK
KyAgICAgICAgKFdlYktpdDo6UmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWE6OmF0dGFjaFZpZXdP
dmVybGF5R3JhcGhpY3NMYXllcik6CisgICAgICAgIElmIHdlIGF0dGFjaC9kZXRhY2ggdGhlIHZp
ZXctcmVsYXRpdmUgcGFnZSBvdmVybGF5IHJvb3QgbGF5ZXIsCisgICAgICAgIHJlYXR0YWNoIHRo
ZSByb290IGNvbXBvc2l0aW5nIGxheWVyJ3MgY2hpbGRyZW4uCisKKyAgICAgICAgKFdlYktpdDo6
UmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWE6OnNldFJvb3RDb21wb3NpdGluZ0xheWVyKToKKyAg
ICAgICAgRGl0dG8gZm9yIHRoZSByb290IGNvbXBvc2l0aW5nIGxheWVyLgorCisgICAgICAgIChX
ZWJLaXQ6OlJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhOjp1cGRhdGVTY3JvbGxlZEV4cG9zZWRS
ZWN0KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWE6OmZsdXNo
TGF5ZXJzKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWE6Om1h
aW5GcmFtZUNvbnRlbnRTaXplQ2hhbmdlZCk6CisgICAgICAgIEluZm9ybWluZyBQYWdlT3Zlcmxh
eUNvbnRyb2xsZXIgb2YgZXhwb3NlZCByZWN0L2RvY3VtZW50IHNpemUgY2hhbmdlcyBpcyBub3cK
KyAgICAgICAgV2ViQ29yZSdzIGpvYi4KKworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9t
YWMvVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWEuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNz
L1dlYlBhZ2UvbWFjL1RpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhLm1tOgorICAgICAgICAo
V2ViS2l0OjpUaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYTo6VGlsZWRDb3JlQW5pbWF0aW9u
RHJhd2luZ0FyZWEpOgorICAgICAgICAoV2ViS2l0OjpUaWxlZENvcmVBbmltYXRpb25EcmF3aW5n
QXJlYTo6dXBkYXRlUm9vdExheWVycyk6CisgICAgICAgIEZhY3RvciB1cGRhdGVSb290TGF5ZXJz
IG91dCBvZiBzZXRSb290Q29tcG9zaXRpbmdMYXllci4KKworICAgICAgICAoV2ViS2l0OjpUaWxl
ZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYTo6YXR0YWNoVmlld092ZXJsYXlHcmFwaGljc0xheWVy
KToKKyAgICAgICAgKFdlYktpdDo6VGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWE6OnNldFJv
b3RDb21wb3NpdGluZ0xheWVyKToKKyAgICAgICAgTWFrZSB1c2Ugb2YgdXBkYXRlUm9vdExheWVy
cyB3aGVuIHdlIGF0dGFjaC9kZXRhY2ggcm9vdCBjb21wb3NpdGluZyBsYXllci92aWV3IG92ZXJs
YXkgbGF5ZXIuCisKKyAgICAgICAgKFdlYktpdDo6VGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0Fy
ZWE6Om1haW5GcmFtZUNvbnRlbnRTaXplQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6OlRpbGVk
Q29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhOjpmbHVzaExheWVycyk6CisgICAgICAgIChXZWJLaXQ6
OlRpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhOjp1cGRhdGVTY3JvbGxlZEV4cG9zZWRSZWN0
KToKKyAgICAgICAgSW5mb3JtaW5nIFBhZ2VPdmVybGF5Q29udHJvbGxlciBvZiBleHBvc2VkIHJl
Y3QvZG9jdW1lbnQgc2l6ZSBjaGFuZ2VzIGlzIG5vdworICAgICAgICBXZWJDb3JlJ3Mgam9iLgor
CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhLmg6CisgICAgICAgIChX
ZWJLaXQ6OkRyYXdpbmdBcmVhOjphdHRhY2hWaWV3T3ZlcmxheUdyYXBoaWNzTGF5ZXIpOgorCisg
ICAgICAgICogU2hhcmVkL1dlYlJlbmRlckxheWVyLmNwcDoKKyAgICAgICAgKiBTaGFyZWQvV2Vi
UmVuZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQ
SS9jL1dLQnVuZGxlQVBJQ2FzdC5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL21hYy9XS1dlYlByb2Nlc3NQbHVnSW5Ccm93c2VyQ29udGV4dENvbnRyb2xsZXIubW06
CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9tYWMvV2ViRWRpdG9yQ2xpZW50
TWFjLm1tOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHA6CisgICAgICAgIElu
Y2x1ZGUgTWFpbkZyYW1lLmggYmVjYXVzZSBXZWJQYWdlOjptYWluRnJhbWUgcmV0dXJucyBhIE1h
aW5GcmFtZSBub3cuCisKIDIwMTQtMDktMzAgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNp
YUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT04ocjE3MzkyOSk6IFtHVEtdIFRlc3RJ
bnNwZWN0b3IgZmFpbHMgYWZ0ZXIgcjE3MzkyOQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
U2hhcmVkL1dlYlJlbmRlckxheWVyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJSZW5k
ZXJMYXllci5jcHAKaW5kZXggYzk0ZjJiMi4uMTg0OTRiMCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvU2hhcmVkL1dlYlJlbmRlckxheWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvV2ViUmVuZGVyTGF5ZXIuY3BwCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSA8V2ViQ29y
ZS9GcmFtZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVMb2FkZXIuaD4KICNpbmNsdWRlIDxX
ZWJDb3JlL0ZyYW1lTG9hZGVyQ2xpZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9NYWluRnJhbWUu
aD4KICNpbmNsdWRlIDxXZWJDb3JlL1JlbmRlckxheWVyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9S
ZW5kZXJMYXllckJhY2tpbmcuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1JlbmRlclZpZXcuaD4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJSZW5kZXJPYmplY3QuY3BwIGIvU291
cmNlL1dlYktpdDIvU2hhcmVkL1dlYlJlbmRlck9iamVjdC5jcHAKaW5kZXggNmNlZGFkYS4uNjk1
MzA4NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYlJlbmRlck9iamVjdC5j
cHAKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYlJlbmRlck9iamVjdC5jcHAKQEAgLTMy
LDYgKzMyLDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lLmg+CiAjaW5jbHVkZSA8V2ViQ29y
ZS9GcmFtZUxvYWRlci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVMb2FkZXJDbGllbnQuaD4K
KyNpbmNsdWRlIDxXZWJDb3JlL01haW5GcmFtZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVy
VGV4dC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyVmlldy5oPgogI2luY2x1ZGUgPFdlYkNv
cmUvUmVuZGVyV2lkZ2V0Lmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKaW5kZXggZDBhOTJmOS4uMmQ3ZWMzZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMzA3LDggKzMw
Nyw2IEBACiAJCTFBOTBDMUVFMTI2NEZENTAwMDNFNDRENCAvKiBXZWJGaW5kT3B0aW9ucy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE5MEMxRUQxMjY0
RkQ1MDAwM0U0NEQ0IC8qIFdlYkZpbmRPcHRpb25zLmggKi87IH07CiAJCTFBOTBDMUY0MTI2NEZE
NzEwMDNFNDRENCAvKiBGaW5kQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMUE5MEMxRjIxMjY0RkQ3MTAwM0U0NEQ0IC8qIEZpbmRDb250
cm9sbGVyLmggKi87IH07CiAJCTFBOTBDMUY1MTI2NEZENzEwMDNFNDRENCAvKiBGaW5kQ29udHJv
bGxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAx
QTkwQzFGMzEyNjRGRDcxMDAzRTQ0RDQgLyogRmluZENvbnRyb2xsZXIuY3BwICovOyB9OwotCQkx
QTkwQzIzNzEyNjUwNzE3MDAzRTQ0RDQgLyogUGFnZU92ZXJsYXkuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBOTBDMjM1MTI2NTA3MTcwMDNFNDRENCAv
KiBQYWdlT3ZlcmxheS5oICovOyB9OwotCQkxQTkwQzIzODEyNjUwNzE3MDAzRTQ0RDQgLyogUGFn
ZU92ZXJsYXkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMUE5MEMyMzYxMjY1MDcxNzAwM0U0NEQ0IC8qIFBhZ2VPdmVybGF5LmNwcCAqLzsgfTsKIAkJ
MUE5MTAwNzExMjY2NzVDNDAwMTg0MkY1IC8qIEZpbmRJbmRpY2F0b3IuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBOTEwMDZGMTI2Njc1QzMwMDE4NDJG
NSAvKiBGaW5kSW5kaWNhdG9yLmggKi87IH07CiAJCTFBOTEwMDcyMTI2Njc1QzQwMDE4NDJGNSAv
KiBGaW5kSW5kaWNhdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDFBOTEwMDcwMTI2Njc1QzQwMDE4NDJGNSAvKiBGaW5kSW5kaWNhdG9yLmNwcCAq
LzsgfTsKIAkJMUE5MkRDMTExMkY4QkE0NjAwMTdBRjY1IC8qIExheWVyVHJlZUNvbnRleHQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBOTJEQzEwMTJG
OEJBNDYwMDE3QUY2NSAvKiBMYXllclRyZWVDb250ZXh0LmggKi87IH07CkBAIC01NjgsOCArNTY2
LDYgQEAKIAkJMjlENTVERjIxNjFCRjlGMTAwMzFBMkUzIC8qIFdlYlBhZ2VHcm91cFByb3h5TWVz
c2FnZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI5
RDU1REYwMTYxQkY5RjEwMDMxQTJFMyAvKiBXZWJQYWdlR3JvdXBQcm94eU1lc3NhZ2VzLmggKi87
IH07CiAJCTJEMTI1QzVFMTg1N0VBMDUwMDNCQTNDQiAvKiBWaWV3R2VzdHVyZUNvbnRyb2xsZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJEMTI1QzVD
MTg1N0VBMDUwMDNCQTNDQiAvKiBWaWV3R2VzdHVyZUNvbnRyb2xsZXIuaCAqLzsgfTsKIAkJMkQx
MjVDNUYxODU3RUEwNTAwM0JBM0NCIC8qIFZpZXdHZXN0dXJlQ29udHJvbGxlck1hYy5tbSBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJEMTI1QzVEMTg1N0VB
MDUwMDNCQTNDQiAvKiBWaWV3R2VzdHVyZUNvbnRyb2xsZXJNYWMubW0gKi87IH07Ci0JCTJEMTQw
RUFGMThGMzdCRTAwMDVFNzVBMCAvKiBQYWdlT3ZlcmxheUNvbnRyb2xsZXIuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkQxNDBFQUQxOEYzN0JFMDAw
NUU3NUEwIC8qIFBhZ2VPdmVybGF5Q29udHJvbGxlci5jcHAgKi87IH07Ci0JCTJEMTQwRUIwMThG
MzdCRTAwMDVFNzVBMCAvKiBQYWdlT3ZlcmxheUNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJEMTQwRUFFMThGMzdCRTAwMDVFNzVBMCAv
KiBQYWdlT3ZlcmxheUNvbnRyb2xsZXIuaCAqLzsgfTsKIAkJMkQxQjVENUQxODU4NjlDODAwNkM2
NTk2IC8qIFZpZXdHZXN0dXJlQ29udHJvbGxlck1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRDFCNUQ1QjE4NTg2OUM4MDA2
QzY1OTYgLyogVmlld0dlc3R1cmVDb250cm9sbGVyTWVzc2FnZVJlY2VpdmVyLmNwcCAqLzsgfTsK
IAkJMkQxQjVENUUxODU4NjlDODAwNkM2NTk2IC8qIFZpZXdHZXN0dXJlQ29udHJvbGxlck1lc3Nh
Z2VzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRDFC
NUQ1QzE4NTg2OUM4MDA2QzY1OTYgLyogVmlld0dlc3R1cmVDb250cm9sbGVyTWVzc2FnZXMuaCAq
LzsgfTsKIAkJMkQyOEYzRTQxODg1Q0NDMTAwNEI5RUFFIC8qIFdlYkNocm9tZUNsaWVudElPUy5t
bSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJEMjhGM0Uw
MTg4NUNDQzEwMDRCOUVBRSAvKiBXZWJDaHJvbWVDbGllbnRJT1MubW0gKi87IH07CkBAIC01ODYs
NiArNTgyLDggQEAKIAkJMkQ0MjlCRkQxNzIxRTJDNzAwRUM2ODFGIC8qIFBERlBsdWdpblBhc3N3
b3JkRmllbGQubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAyRDQyOUJGQjE3MjFFMkJBMDBFQzY4MUYgLyogUERGUGx1Z2luUGFzc3dvcmRGaWVsZC5tbSAq
LzsgfTsKIAkJMkQ0N0I1NkMxODEwNzE0RTAwM0EzQUVFIC8qIFJlbW90ZUxheWVyQmFja2luZ1N0
b3JlLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkQ0
N0I1NkExODEwNzE0RTAwM0EzQUVFIC8qIFJlbW90ZUxheWVyQmFja2luZ1N0b3JlLm1tICovOyB9
OwogCQkyRDQ3QjU2RDE4MTA3MTRFMDAzQTNBRUUgLyogUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmUu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJENDdCNTZC
MTgxMDcxNEUwMDNBM0FFRSAvKiBSZW1vdGVMYXllckJhY2tpbmdTdG9yZS5oICovOyB9OworCQky
RDVDOUQwNTE5QzgxRDhGMDBCM0M1QzEgLyogV2ViUGFnZU92ZXJsYXkuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkQ1QzlEMDMxOUM4MUQ4RjAwQjND
NUMxIC8qIFdlYlBhZ2VPdmVybGF5LmNwcCAqLzsgfTsKKwkJMkQ1QzlEMDYxOUM4MUQ4RjAwQjND
NUMxIC8qIFdlYlBhZ2VPdmVybGF5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAyRDVDOUQwNDE5QzgxRDhGMDBCM0M1QzEgLyogV2ViUGFnZU92ZXJsYXku
aCAqLzsgfTsKIAkJMkQ2QUI1NDExOTJCMUM0QTAwM0E5RkQxIC8qIFdLUERGUGFnZU51bWJlcklu
ZGljYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MkQ2QUI1M0YxOTJCMUM0QTAwM0E5RkQxIC8qIFdLUERGUGFnZU51bWJlckluZGljYXRvci5oICov
OyB9OwogCQkyRDZBQjU0MjE5MkIxQzRBMDAzQTlGRDEgLyogV0tQREZQYWdlTnVtYmVySW5kaWNh
dG9yLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkQ2
QUI1NDAxOTJCMUM0QTAwM0E5RkQxIC8qIFdLUERGUGFnZU51bWJlckluZGljYXRvci5tbSAqLzsg
fTsKIAkJMkQ2QjM3MUIxOEE5NjdBRDAwNDJBRTgwIC8qIF9XS1RodW1ibmFpbFZpZXcuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJENkIzNzE5MThBOTY3
QUQwMDQyQUU4MCAvKiBfV0tUaHVtYm5haWxWaWV3LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTIyNzEsOCArMjI2OSw2IEBACiAJCTFBOTBDMUVE
MTI2NEZENTAwMDNFNDRENCAvKiBXZWJGaW5kT3B0aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBXZWJGaW5kT3B0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkxQTkwQzFGMjEyNjRGRDcxMDAzRTQ0RDQgLyogRmluZENvbnRyb2xsZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmluZENvbnRyb2xsZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMUE5MEMxRjMxMjY0RkQ3MTAwM0U0NEQ0IC8qIEZpbmRDb250cm9s
bGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZpbmRDb250cm9s
bGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMUE5MEMyMzUxMjY1MDcxNzAw
M0U0NEQ0IC8qIFBhZ2VPdmVybGF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFBhZ2VPdmVybGF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTFBOTBDMjM2MTI2
NTA3MTcwMDNFNDRENCAvKiBQYWdlT3ZlcmxheS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBQYWdlT3ZlcmxheS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTFBOTEwMDZGMTI2Njc1QzMwMDE4NDJGNSAvKiBGaW5kSW5kaWNhdG9yLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZpbmRJbmRpY2F0b3IuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMUE5MTAwNzAxMjY2NzVDNDAwMTg0MkY1IC8qIEZpbmRJbmRpY2F0b3Iu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRmluZEluZGljYXRvci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBOTJEQzEwMTJGOEJBNDYwMDE3QUY2
NSAvKiBMYXllclRyZWVDb250ZXh0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IExheWVyVHJlZUNvbnRleHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI1NTgs
OCArMjU1NCw2IEBACiAJCTI5RDU1REYwMTYxQkY5RjEwMDMxQTJFMyAvKiBXZWJQYWdlR3JvdXBQ
cm94eU1lc3NhZ2VzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlBhZ2VH
cm91cFByb3h5TWVzc2FnZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkQxMjVD
NUMxODU3RUEwNTAwM0JBM0NCIC8qIFZpZXdHZXN0dXJlQ29udHJvbGxlci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBWaWV3R2VzdHVyZUNvbnRyb2xsZXIuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkQxMjVDNUQxODU3RUEwNTAwM0JBM0NCIC8qIFZpZXdHZXN0
dXJlQ29udHJvbGxlck1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0
aCA9IFZpZXdHZXN0dXJlQ29udHJvbGxlck1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJMkQxNDBFQUQxOEYzN0JFMDAwNUU3NUEwIC8qIFBhZ2VPdmVybGF5Q29udHJvbGxlci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQYWdlT3ZlcmxheUNvbnRy
b2xsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkyRDE0MEVBRTE4RjM3QkUw
MDA1RTc1QTAgLyogUGFnZU92ZXJsYXlDb250cm9sbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFBhZ2VPdmVybGF5Q29udHJvbGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkyRDFCNUQ1QTE4NTg2NTk5MDA2QzY1OTYgLyogVmlld0dlc3R1cmVDb250cm9s
bGVyLm1lc3NhZ2VzLmluICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gdGV4dDsgcGF0aCA9IFZpZXdHZXN0dXJlQ29udHJvbGxlci5tZXNzYWdlcy5pbjsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkQxQjVENUIxODU4NjlDODAwNkM2NTk2IC8q
IFZpZXdHZXN0dXJlQ29udHJvbGxlck1lc3NhZ2VSZWNlaXZlci5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBWaWV3R2VzdHVyZUNvbnRyb2xsZXJNZXNzYWdlUmVjZWl2
ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyRDFCNUQ1QzE4NTg2OUM4MDA2
QzY1OTYgLyogVmlld0dlc3R1cmVDb250cm9sbGVyTWVzc2FnZXMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gVmlld0dlc3R1cmVDb250cm9sbGVyTWVzc2FnZXMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI1ODIsNiArMjU3Niw4IEBACiAJCTJENDI5QkZCMTcy
MUUyQkEwMEVDNjgxRiAvKiBQREZQbHVnaW5QYXNzd29yZEZpZWxkLm1tICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gUERGUGx1Z2luUGFzc3dvcmRGaWVsZC5tbTsgcGF0
aCA9IFBERi9QREZQbHVnaW5QYXNzd29yZEZpZWxkLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkyRDQ3QjU2QTE4MTA3MTRFMDAzQTNBRUUgLyogUmVtb3RlTGF5ZXJCYWNraW5nU3Rv
cmUubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBSZW1vdGVMYXll
ckJhY2tpbmdTdG9yZS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkQ0N0I1NkIx
ODEwNzE0RTAwM0EzQUVFIC8qIFJlbW90ZUxheWVyQmFja2luZ1N0b3JlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbW90ZUxheWVyQmFja2luZ1N0b3JlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTJENUM5RDAzMTlDODFEOEYwMEIzQzVDMSAvKiBXZWJQYWdl
T3ZlcmxheS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJQYWdl
T3ZlcmxheS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTJENUM5RDA0MTlDODFE
OEYwMEIzQzVDMSAvKiBXZWJQYWdlT3ZlcmxheS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBXZWJQYWdlT3ZlcmxheS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQky
RDZBQjUzRjE5MkIxQzRBMDAzQTlGRDEgLyogV0tQREZQYWdlTnVtYmVySW5kaWNhdG9yLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdLUERGUGFnZU51bWJlckluZGljYXRvci5o
OyBwYXRoID0gaW9zL1dLUERGUGFnZU51bWJlckluZGljYXRvci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkyRDZBQjU0MDE5MkIxQzRBMDAzQTlGRDEgLyogV0tQREZQYWdlTnVtYmVy
SW5kaWNhdG9yLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gV0tQ
REZQYWdlTnVtYmVySW5kaWNhdG9yLm1tOyBwYXRoID0gaW9zL1dLUERGUGFnZU51bWJlckluZGlj
YXRvci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkQ2QjM3MTkxOEE5NjdBRDAw
NDJBRTgwIC8qIF9XS1RodW1ibmFpbFZpZXcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gX1dLVGh1bWJuYWlsVmlldy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
NTcwMSwxMCArNTY5Nyw4IEBACiAJCQkJMUE5MEMxRjIxMjY0RkQ3MTAwM0U0NEQ0IC8qIEZpbmRD
b250cm9sbGVyLmggKi8sCiAJCQkJN0MzODc0MzMxNzJGNTYxNTAwMUJEODhBIC8qIFBhZ2VCYW5u
ZXIuY3BwICovLAogCQkJCTdDRjQ3RkY5MTcyNzVDNTcwMDhBQ0I5MSAvKiBQYWdlQmFubmVyLmgg
Ki8sCi0JCQkJMUE5MEMyMzYxMjY1MDcxNzAwM0U0NEQ0IC8qIFBhZ2VPdmVybGF5LmNwcCAqLywK
LQkJCQkxQTkwQzIzNTEyNjUwNzE3MDAzRTQ0RDQgLyogUGFnZU92ZXJsYXkuaCAqLywKLQkJCQky
RDE0MEVBRDE4RjM3QkUwMDA1RTc1QTAgLyogUGFnZU92ZXJsYXlDb250cm9sbGVyLmNwcCAqLywK
LQkJCQkyRDE0MEVBRTE4RjM3QkUwMDA1RTc1QTAgLyogUGFnZU92ZXJsYXlDb250cm9sbGVyLmgg
Ki8sCisJCQkJMkQ1QzlEMDMxOUM4MUQ4RjAwQjNDNUMxIC8qIFdlYlBhZ2VPdmVybGF5LmNwcCAq
LywKKwkJCQkyRDVDOUQwNDE5QzgxRDhGMDBCM0M1QzEgLyogV2ViUGFnZU92ZXJsYXkuaCAqLywK
IAkJCQk1MTkyRDU3MTE5NjFGQTJGMDBDRDE5QUEgLyogU2VydmljZXNPdmVybGF5Q29udHJvbGxl
ci5oICovLAogCQkJCTJEODE5Qjk5MTg2Mjc1QjMwMDFGMDNEMSAvKiBWaWV3R2VzdHVyZUdlb21l
dHJ5Q29sbGVjdG9yLmNwcCAqLywKIAkJCQkyRDgxOUI5QTE4NjI3NUIzMDAxRjAzRDEgLyogVmll
d0dlc3R1cmVHZW9tZXRyeUNvbGxlY3Rvci5oICovLApAQCAtNzA0Niw2ICs3MDQwLDcgQEAKIAkJ
CQk3Qzg1RkQ4MDE5MzQxNjY1MDAwMTc3QzQgLyogV2ViUHJlZmVyZW5jZXNLZXlzLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk1MTJGNTg5NzEyQTg4Mzg4MDA2Mjk1MzAgLyogQXV0aGVudGljYXRpb25D
aGFsbGVuZ2VQcm94eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUE0NDVCOUYxODRENUZCNTAwNEIz
NDE0IC8qIFdLQ29udGV4dEluamVjdGVkQnVuZGxlQ2xpZW50LmggaW4gSGVhZGVycyAqLywKKwkJ
CQkyRDVDOUQwNjE5QzgxRDhGMDBCM0M1QzEgLyogV2ViUGFnZU92ZXJsYXkuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTUxMkY1ODk5MTJBODgzODgwMDYyOTUzMCAvKiBBdXRoZW50aWNhdGlvbkRlY2lz
aW9uTGlzdGVuZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxOEU4RUY5MTZCMjA5MUMwMEU5MTQy
OSAvKiBBdXRoZW50aWNhdGlvbk1hbmFnZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxMkY1OEEz
MTJBODgzQUQwMDYyOTUzMCAvKiBBdXRoZW50aWNhdGlvbk1hbmFnZXJNZXNzYWdlcy5oIGluIEhl
YWRlcnMgKi8sCkBAIC03MTUzLDcgKzcxNDgsNiBAQAogCQkJCTFBRTUyRjkyMTkyMDFEQTcwMEEx
RkEzNyAvKiBBUElDb250ZXh0Q29uZmlndXJhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0Mz
NjFENzMxOTI3RkEzNjAwMzZBNTlEIC8qIFdlYlNjcmlwdE1lc3NhZ2VIYW5kbGVyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlFMTA1RkU1NDE4RDdCOURFMDA4RjU3QTggLyogRWRpdGluZ1JhbmdlLmgg
aW4gSGVhZGVycyAqLywKLQkJCQkyRDE0MEVCMDE4RjM3QkUwMDA1RTc1QTAgLyogUGFnZU92ZXJs
YXlDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE3NzUzRjExOEJBQkYwMDA3RDlF
OUEgLyogR2VuZXJpY0NhbGxiYWNrLmggaW4gSGVhZGVycyAqLywKIAkJCQkzNzlBODczNjE4QkJG
QTQzMDA1ODhBRjIgLyogX1dLQWN0aXZhdGVkRWxlbWVudEluZm9JbnRlcm5hbC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQkMwNkY0MkYxMkRCQjlCNjAwMkQ3OERFIC8qIEdlb2xvY2F0aW9uUGVybWlz
c2lvblJlcXVlc3RNYW5hZ2VyLmggaW4gSGVhZGVycyAqLywKQEAgLTcyNzYsNyArNzI3MCw2IEBA
CiAJCQkJMUE1QjFDNTExODk4NjA2RjAwNEZDRjlCIC8qIFdLTmF2aWdhdGlvbi5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJN0NGNDdGRkIxNzI3NUM1NzAwOEFDQjkxIC8qIFBhZ2VCYW5uZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUJDNkVEQUE2MTExMjcxQzYwMEU3Njc4QiAvKiBQYWdlQ2xpZW50Lmgg
aW4gSGVhZGVycyAqLywKLQkJCQkxQTkwQzIzNzEyNjUwNzE3MDAzRTQ0RDQgLyogUGFnZU92ZXJs
YXkuaCBpbiBIZWFkZXJzICovLAogCQkJCUM1NzRBNTgxMTJFNjY2ODEwMDJERkU5OCAvKiBQYXN0
ZWJvYXJkVHlwZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUUxOTU4MkQzMTUzQ0JGRDcwMEI2MDg3
NSAvKiBQREZLaXRJbXBvcnRzLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUUwMEQ0RjE4MkQ2RjUw
MDAwODdERDcgLyogV0tCcm93c2luZ0NvbnRleHRIYW5kbGVJbnRlcm5hbC5oIGluIEhlYWRlcnMg
Ki8sCkBAIC04OTI4LDcgKzg5MjEsNiBAQAogCQkJCTUxRTM1MUY1MTgwRjVDNzUwMEU1M0JFOSAv
KiBXZWJJREJGYWN0b3J5QmFja2VuZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3QzM4NzQzNDE3
MkY1NjE1MDAxQkQ4OEEgLyogUGFnZUJhbm5lci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3QzZE
MzdGQzE3MkY1NTVGMDA5RDI4NDcgLyogUGFnZUJhbm5lck1hYy5tbSBpbiBTb3VyY2VzICovLAot
CQkJCTFBOTBDMjM4MTI2NTA3MTcwMDNFNDRENCAvKiBQYWdlT3ZlcmxheS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlDNTc0QTU4MjEyRTY2NjgxMDAyREZFOTggLyogUGFzdGVib2FyZFR5cGVzLm1t
IGluIFNvdXJjZXMgKi8sCiAJCQkJRTE5NTgyRDYxNTNDQzA1NDAwQjYwODc1IC8qIFBERktpdElt
cG9ydHMubW0gaW4gU291cmNlcyAqLywKIAkJCQkyRDg3MEQxMDE2MjM0RkZFMDAwQTNGMjAgLyog
UERGUGx1Z2luLm1tIGluIFNvdXJjZXMgKi8sCkBAIC05MTI4LDcgKzkxMjAsNiBAQAogCQkJCUE1
NDI5M0E1MTk1QTQzREQwMDI3ODJDNyAvKiBXS0luc3BlY3Rvck5vZGVTZWFyY2hHZXN0dXJlUmVj
b2duaXplci5tbSBpbiBTb3VyY2VzICovLAogCQkJCUMwMzM3REFFMTI3QTI0RkUwMDhGRjRGNCAv
KiBXZWJFdmVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzAzMkRCQTEwRjQzODBGMDA1OEMx
NUEgLyogV2ViRXZlbnRDb252ZXJzaW9uLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTJEMTQwRUFG
MThGMzdCRTAwMDVFNzVBMCAvKiBQYWdlT3ZlcmxheUNvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQkMxMTFCNUUxMTJGNjI5ODAwMzM3QkFCIC8qIFdlYkV2ZW50RmFjdG9yeS5tbSBp
biBTb3VyY2VzICovLAogCQkJCUExMThBOUVFMTkwN0FENkYwMEY3QzkyQiAvKiBRdWlja0xvb2tE
b2N1bWVudERhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUEzREQxRkQxMjVFNTlGMzAwNDUx
NUU2IC8qIFdlYkZpbmRDbGllbnQuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC05MjEyLDYgKzkyMDMs
NyBAQAogCQkJCUMwNkM2MDk1MTI0QzE0NEIwMDAxNjgyRiAvKiBXZWJQYWdlQ3JlYXRpb25QYXJh
bWV0ZXJzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUM1OUM0QTU4MThCODExNzQwMDdCRENCNiAv
KiBBc3Npc3RlZE5vZGVJbmZvcm1hdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzdCNjIw
NzEyOUEwQTY3MDBEMTc0QTQgLyogV2ViUGFnZUdyb3VwLmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CTJENUM5RDA1MTlDODFEOEYwMEIzQzVDMSAvKiBXZWJQYWdlT3ZlcmxheS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlCQzdCNjI1MzEyQTQzQzk2MDBEMTc0QTQgLyogV2ViUGFnZUdyb3VwRGF0YS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzdCNjIxNjEyQTQyMTlBMDBEMTc0QTQgLyogV2ViUGFn
ZUdyb3VwUHJveHkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMjlENTVERjExNjFCRjlGMTAwMzFB
MkUzIC8qIFdlYlBhZ2VHcm91cFByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICov
LApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9B
UEkvYy9XS0J1bmRsZUFQSUNhc3QuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVBUElDYXN0LmgKaW5kZXggZTYzNTQwOC4uMGQ1YjdjNyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Yy9XS0J1bmRsZUFQSUNhc3QuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlQVBJQ2FzdC5oCkBAIC00OSwxMSArNDksMTEgQEAgY2xh
c3MgSW5qZWN0ZWRCdW5kbGVOb2RlSGFuZGxlOwogY2xhc3MgSW5qZWN0ZWRCdW5kbGVSYW5nZUhh
bmRsZTsKIGNsYXNzIEluamVjdGVkQnVuZGxlU2NyaXB0V29ybGQ7CiBjbGFzcyBQYWdlQmFubmVy
OwotY2xhc3MgUGFnZU92ZXJsYXk7CiBjbGFzcyBXZWJGcmFtZTsKIGNsYXNzIFdlYkluc3BlY3Rv
cjsKIGNsYXNzIFdlYlBhZ2U7CiBjbGFzcyBXZWJQYWdlR3JvdXBQcm94eTsKK2NsYXNzIFdlYlBh
Z2VPdmVybGF5OwogCiBXS19BRERfQVBJX01BUFBJTkcoV0tCdW5kbGVCYWNrRm9yd2FyZExpc3RJ
dGVtUmVmLCBJbmplY3RlZEJ1bmRsZUJhY2tGb3J3YXJkTGlzdEl0ZW0pCiBXS19BRERfQVBJX01B
UFBJTkcoV0tCdW5kbGVCYWNrRm9yd2FyZExpc3RSZWYsIEluamVjdGVkQnVuZGxlQmFja0Zvcndh
cmRMaXN0KQpAQCAtNjYsNyArNjYsNyBAQCBXS19BRERfQVBJX01BUFBJTkcoV0tCdW5kbGVOYXZp
Z2F0aW9uQWN0aW9uUmVmLCBJbmplY3RlZEJ1bmRsZU5hdmlnYXRpb25BY3Rpb24pCiBXS19BRERf
QVBJX01BUFBJTkcoV0tCdW5kbGVOb2RlSGFuZGxlUmVmLCBJbmplY3RlZEJ1bmRsZU5vZGVIYW5k
bGUpCiBXS19BRERfQVBJX01BUFBJTkcoV0tCdW5kbGVQYWdlQmFubmVyUmVmLCBQYWdlQmFubmVy
KQogV0tfQUREX0FQSV9NQVBQSU5HKFdLQnVuZGxlUGFnZUdyb3VwUmVmLCBXZWJQYWdlR3JvdXBQ
cm94eSkKLVdLX0FERF9BUElfTUFQUElORyhXS0J1bmRsZVBhZ2VPdmVybGF5UmVmLCBQYWdlT3Zl
cmxheSkKK1dLX0FERF9BUElfTUFQUElORyhXS0J1bmRsZVBhZ2VPdmVybGF5UmVmLCBXZWJQYWdl
T3ZlcmxheSkKIFdLX0FERF9BUElfTUFQUElORyhXS0J1bmRsZVBhZ2VSZWYsIFdlYlBhZ2UpCiBX
S19BRERfQVBJX01BUFBJTkcoV0tCdW5kbGVSYW5nZUhhbmRsZVJlZiwgSW5qZWN0ZWRCdW5kbGVS
YW5nZUhhbmRsZSkKIFdLX0FERF9BUElfTUFQUElORyhXS0J1bmRsZVJlZiwgSW5qZWN0ZWRCdW5k
bGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9jL1dLQnVuZGxlUGFnZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlUGFnZS5jcHAKaW5kZXggMjExNGY1OC4uYzZlNmU1YSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Yy9XS0J1bmRsZVBhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVQYWdlLmNwcApAQCAtNDcsMTIgKzQ3LDE1IEBACiAjaW5j
bHVkZSAiV2ViRnVsbFNjcmVlbk1hbmFnZXIuaCIKICNpbmNsdWRlICJXZWJJbWFnZS5oIgogI2lu
Y2x1ZGUgIldlYlBhZ2UuaCIKKyNpbmNsdWRlICJXZWJQYWdlT3ZlcmxheS5oIgogI2luY2x1ZGUg
IldlYlJlbmRlckxheWVyLmgiCiAjaW5jbHVkZSAiV2ViUmVuZGVyT2JqZWN0LmgiCiAjaW5jbHVk
ZSA8V2ViQ29yZS9BWE9iamVjdENhY2hlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9BY2Nlc3NpYmls
aXR5T2JqZWN0Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9NYWluRnJhbWUuaD4KICNpbmNsdWRlIDxX
ZWJDb3JlL1BhZ2UuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1BhZ2VPdmVybGF5Lmg+CisjaW5jbHVk
ZSA8V2ViQ29yZS9QYWdlT3ZlcmxheUNvbnRyb2xsZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1VS
TC5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KIApAQCAtMzU0LDIyICszNTcsMjIg
QEAgV0tCdW5kbGVCYWNrRm9yd2FyZExpc3RSZWYgV0tCdW5kbGVQYWdlR2V0QmFja0ZvcndhcmRM
aXN0KFdLQnVuZGxlUGFnZVJlZiBwYWdlUmUKIAogdm9pZCBXS0J1bmRsZVBhZ2VJbnN0YWxsUGFn
ZU92ZXJsYXkoV0tCdW5kbGVQYWdlUmVmIHBhZ2VSZWYsIFdLQnVuZGxlUGFnZU92ZXJsYXlSZWYg
cGFnZU92ZXJsYXlSZWYpCiB7Ci0gICAgdG9JbXBsKHBhZ2VSZWYpLT5pbnN0YWxsUGFnZU92ZXJs
YXkodG9JbXBsKHBhZ2VPdmVybGF5UmVmKSk7CisgICAgdG9JbXBsKHBhZ2VSZWYpLT5tYWluRnJh
bWUoKS0+cGFnZU92ZXJsYXlDb250cm9sbGVyKCkuaW5zdGFsbFBhZ2VPdmVybGF5KHRvSW1wbChw
YWdlT3ZlcmxheVJlZiktPmNvcmVPdmVybGF5KCksIFdlYkNvcmU6OlBhZ2VPdmVybGF5OjpGYWRl
TW9kZTo6RG9Ob3RGYWRlKTsKIH0KIAogdm9pZCBXS0J1bmRsZVBhZ2VVbmluc3RhbGxQYWdlT3Zl
cmxheShXS0J1bmRsZVBhZ2VSZWYgcGFnZVJlZiwgV0tCdW5kbGVQYWdlT3ZlcmxheVJlZiBwYWdl
T3ZlcmxheVJlZikKIHsKLSAgICB0b0ltcGwocGFnZVJlZiktPnVuaW5zdGFsbFBhZ2VPdmVybGF5
KHRvSW1wbChwYWdlT3ZlcmxheVJlZikpOworICAgIHRvSW1wbChwYWdlUmVmKS0+bWFpbkZyYW1l
KCktPnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLnVuaW5zdGFsbFBhZ2VPdmVybGF5KHRvSW1wbChw
YWdlT3ZlcmxheVJlZiktPmNvcmVPdmVybGF5KCksIFdlYkNvcmU6OlBhZ2VPdmVybGF5OjpGYWRl
TW9kZTo6RG9Ob3RGYWRlKTsKIH0KIAogdm9pZCBXS0J1bmRsZVBhZ2VJbnN0YWxsUGFnZU92ZXJs
YXlXaXRoQW5pbWF0aW9uKFdLQnVuZGxlUGFnZVJlZiBwYWdlUmVmLCBXS0J1bmRsZVBhZ2VPdmVy
bGF5UmVmIHBhZ2VPdmVybGF5UmVmKQogewotICAgIHRvSW1wbChwYWdlUmVmKS0+aW5zdGFsbFBh
Z2VPdmVybGF5KHRvSW1wbChwYWdlT3ZlcmxheVJlZiksIFBhZ2VPdmVybGF5OjpGYWRlTW9kZTo6
RmFkZSk7CisgICAgdG9JbXBsKHBhZ2VSZWYpLT5tYWluRnJhbWUoKS0+cGFnZU92ZXJsYXlDb250
cm9sbGVyKCkuaW5zdGFsbFBhZ2VPdmVybGF5KHRvSW1wbChwYWdlT3ZlcmxheVJlZiktPmNvcmVP
dmVybGF5KCksIFdlYkNvcmU6OlBhZ2VPdmVybGF5OjpGYWRlTW9kZTo6RmFkZSk7CiB9CiAKIHZv
aWQgV0tCdW5kbGVQYWdlVW5pbnN0YWxsUGFnZU92ZXJsYXlXaXRoQW5pbWF0aW9uKFdLQnVuZGxl
UGFnZVJlZiBwYWdlUmVmLCBXS0J1bmRsZVBhZ2VPdmVybGF5UmVmIHBhZ2VPdmVybGF5UmVmKQog
ewotICAgIHRvSW1wbChwYWdlUmVmKS0+dW5pbnN0YWxsUGFnZU92ZXJsYXkodG9JbXBsKHBhZ2VP
dmVybGF5UmVmKSwgUGFnZU92ZXJsYXk6OkZhZGVNb2RlOjpGYWRlKTsKKyAgICB0b0ltcGwocGFn
ZVJlZiktPm1haW5GcmFtZSgpLT5wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKS51bmluc3RhbGxQYWdl
T3ZlcmxheSh0b0ltcGwocGFnZU92ZXJsYXlSZWYpLT5jb3JlT3ZlcmxheSgpLCBXZWJDb3JlOjpQ
YWdlT3ZlcmxheTo6RmFkZU1vZGU6OkZhZGUpOwogfQogCiB2b2lkIFdLQnVuZGxlUGFnZVNldFRv
cE92ZXJoYW5nSW1hZ2UoV0tCdW5kbGVQYWdlUmVmIHBhZ2VSZWYsIFdLSW1hZ2VSZWYgaW1hZ2VS
ZWYpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9jL1dLQnVuZGxlUGFnZU92ZXJsYXkuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZVBhZ2VPdmVybGF5LmNwcAppbmRleCBiYmE4
NjI2Li40MTQyMGIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlUGFnZU92ZXJsYXkuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVQYWdlT3ZlcmxheS5j
cHAKQEAgLTI3LDEwICsyNywxNyBAQAogI2luY2x1ZGUgIldLQnVuZGxlUGFnZU92ZXJsYXkuaCIK
IAogI2luY2x1ZGUgIkFQSUNsaWVudC5oIgotI2luY2x1ZGUgIlBhZ2VPdmVybGF5LmgiCiAjaW5j
bHVkZSAiV0tBUElDYXN0LmgiCisjaW5jbHVkZSAiV0tBcnJheS5oIgogI2luY2x1ZGUgIldLQnVu
ZGxlQVBJQ2FzdC5oIgorI2luY2x1ZGUgIldLTnVtYmVyLmgiCisjaW5jbHVkZSAiV0tSZXRhaW5Q
dHIuaCIKKyNpbmNsdWRlICJXS1NoYXJlZEFQSUNhc3QuaCIKKyNpbmNsdWRlICJXS1N0cmluZ1By
aXZhdGUuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dC5oPgorI2luY2x1ZGUg
PFdlYkNvcmUvUGFnZU92ZXJsYXkuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtTW91c2VF
dmVudC5oPgorI2luY2x1ZGUgPFdlYktpdC9XZWJQYWdlT3ZlcmxheS5oPgogCiBuYW1lc3BhY2Ug
QVBJIHsKIApAQCAtNDcsNyArNTQsNyBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBDbGllbnRUcmFpdHM8
V0tCdW5kbGVQYWdlT3ZlcmxheUFjY2Vzc2liaWxpdHlDbGllbnRCYXNlPiB7CiB1c2luZyBuYW1l
c3BhY2UgV2ViQ29yZTsKIHVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CiAKLWNsYXNzIFBhZ2VPdmVy
bGF5Q2xpZW50SW1wbCA6IEFQSTo6Q2xpZW50PFdLQnVuZGxlUGFnZU92ZXJsYXlDbGllbnRCYXNl
PiwgcHVibGljIFBhZ2VPdmVybGF5OjpDbGllbnQgeworY2xhc3MgUGFnZU92ZXJsYXlDbGllbnRJ
bXBsIDogQVBJOjpDbGllbnQ8V0tCdW5kbGVQYWdlT3ZlcmxheUNsaWVudEJhc2U+LCBwdWJsaWMg
V2ViUGFnZU92ZXJsYXk6OkNsaWVudCB7CiBwdWJsaWM6CiAgICAgZXhwbGljaXQgUGFnZU92ZXJs
YXlDbGllbnRJbXBsKFdLQnVuZGxlUGFnZU92ZXJsYXlDbGllbnRCYXNlKiBjbGllbnQpCiAgICAg
ewpAQCAtNjAsNjQgKzY3LDY0IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgLy8g
UGFnZU92ZXJsYXk6OkNsaWVudC4KLSAgICB2aXJ0dWFsIHZvaWQgcGFnZU92ZXJsYXlEZXN0cm95
ZWQoUGFnZU92ZXJsYXkqKQorICAgIC8vIFdlYlBhZ2VPdmVybGF5OjpDbGllbnQuCisgICAgdmly
dHVhbCB2b2lkIHBhZ2VPdmVybGF5RGVzdHJveWVkKFdlYlBhZ2VPdmVybGF5Jikgb3ZlcnJpZGUK
ICAgICB7CiAgICAgICAgIGRlbGV0ZSB0aGlzOwogICAgIH0KIAotICAgIHZpcnR1YWwgdm9pZCB3
aWxsTW92ZVRvV2ViUGFnZShQYWdlT3ZlcmxheSogcGFnZU92ZXJsYXksIFdlYlBhZ2UqIHBhZ2Up
CisgICAgdmlydHVhbCB2b2lkIHdpbGxNb3ZlVG9QYWdlKFdlYlBhZ2VPdmVybGF5JiBwYWdlT3Zl
cmxheSwgV2ViUGFnZSogcGFnZSkgb3ZlcnJpZGUKICAgICB7CiAgICAgICAgIGlmICghbV9jbGll
bnQud2lsbE1vdmVUb1BhZ2UpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgbV9jbGll
bnQud2lsbE1vdmVUb1BhZ2UodG9BUEkocGFnZU92ZXJsYXkpLCB0b0FQSShwYWdlKSwgbV9jbGll
bnQuYmFzZS5jbGllbnRJbmZvKTsKKyAgICAgICAgbV9jbGllbnQud2lsbE1vdmVUb1BhZ2UodG9B
UEkoJnBhZ2VPdmVybGF5KSwgdG9BUEkocGFnZSksIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7
CiAgICAgfQogICAgIAotICAgIHZpcnR1YWwgdm9pZCBkaWRNb3ZlVG9XZWJQYWdlKFBhZ2VPdmVy
bGF5KiBwYWdlT3ZlcmxheSwgV2ViUGFnZSogcGFnZSkKKyAgICB2aXJ0dWFsIHZvaWQgZGlkTW92
ZVRvUGFnZShXZWJQYWdlT3ZlcmxheSYgcGFnZU92ZXJsYXksIFdlYlBhZ2UqIHBhZ2UpIG92ZXJy
aWRlCiAgICAgewogICAgICAgICBpZiAoIW1fY2xpZW50LmRpZE1vdmVUb1BhZ2UpCiAgICAgICAg
ICAgICByZXR1cm47CiAKLSAgICAgICAgbV9jbGllbnQuZGlkTW92ZVRvUGFnZSh0b0FQSShwYWdl
T3ZlcmxheSksIHRvQVBJKHBhZ2UpLCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pOworICAgICAg
ICBtX2NsaWVudC5kaWRNb3ZlVG9QYWdlKHRvQVBJKCZwYWdlT3ZlcmxheSksIHRvQVBJKHBhZ2Up
LCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pOwogICAgIH0KIAotICAgIHZpcnR1YWwgdm9pZCBk
cmF3UmVjdChQYWdlT3ZlcmxheSogcGFnZU92ZXJsYXksIEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhp
Y3NDb250ZXh0LCBjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpCisgICAgdmlydHVhbCB2b2lkIGRy
YXdSZWN0KFdlYlBhZ2VPdmVybGF5JiBwYWdlT3ZlcmxheSwgR3JhcGhpY3NDb250ZXh0JiBncmFw
aGljc0NvbnRleHQsIGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCkgb3ZlcnJpZGUKICAgICB7CiAg
ICAgICAgIGlmICghbV9jbGllbnQuZHJhd1JlY3QpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAg
ICAgICAgbV9jbGllbnQuZHJhd1JlY3QodG9BUEkocGFnZU92ZXJsYXkpLCBncmFwaGljc0NvbnRl
eHQucGxhdGZvcm1Db250ZXh0KCksIHRvQVBJKGRpcnR5UmVjdCksIG1fY2xpZW50LmJhc2UuY2xp
ZW50SW5mbyk7CisgICAgICAgIG1fY2xpZW50LmRyYXdSZWN0KHRvQVBJKCZwYWdlT3ZlcmxheSks
IGdyYXBoaWNzQ29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKSwgdG9BUEkoZGlydHlSZWN0KSwgbV9j
bGllbnQuYmFzZS5jbGllbnRJbmZvKTsKICAgICB9CiAgICAgCi0gICAgdmlydHVhbCBib29sIG1v
dXNlRXZlbnQoUGFnZU92ZXJsYXkqIHBhZ2VPdmVybGF5LCBjb25zdCBXZWJNb3VzZUV2ZW50JiBl
dmVudCkKKyAgICB2aXJ0dWFsIGJvb2wgbW91c2VFdmVudChXZWJQYWdlT3ZlcmxheSYgcGFnZU92
ZXJsYXksIGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgZXZlbnQpIG92ZXJyaWRlCiAgICAgewog
ICAgICAgICBzd2l0Y2ggKGV2ZW50LnR5cGUoKSkgewotICAgICAgICBjYXNlIFdlYkV2ZW50OjpN
b3VzZURvd246IHsKKyAgICAgICAgY2FzZSBQbGF0Zm9ybU1vdXNlRXZlbnQ6OlR5cGU6Ok1vdXNl
UHJlc3NlZDogewogICAgICAgICAgICAgaWYgKCFtX2NsaWVudC5tb3VzZURvd24pCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgICAgICByZXR1cm4gbV9jbGllbnQubW91
c2VEb3duKHRvQVBJKHBhZ2VPdmVybGF5KSwgdG9BUEkoZXZlbnQucG9zaXRpb24oKSksIHRvQVBJ
KGV2ZW50LmJ1dHRvbigpKSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKKyAgICAgICAgICAg
IHJldHVybiBtX2NsaWVudC5tb3VzZURvd24odG9BUEkoJnBhZ2VPdmVybGF5KSwgdG9BUEkoZXZl
bnQucG9zaXRpb24oKSksIHRvQVBJKGV2ZW50LmJ1dHRvbigpKSwgbV9jbGllbnQuYmFzZS5jbGll
bnRJbmZvKTsKICAgICAgICAgfQotICAgICAgICBjYXNlIFdlYkV2ZW50OjpNb3VzZVVwOiB7Cisg
ICAgICAgIGNhc2UgUGxhdGZvcm1Nb3VzZUV2ZW50OjpUeXBlOjpNb3VzZVJlbGVhc2VkOiB7CiAg
ICAgICAgICAgICBpZiAoIW1fY2xpZW50Lm1vdXNlVXApCiAgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCi0gICAgICAgICAgICByZXR1cm4gbV9jbGllbnQubW91c2VVcCh0b0FQSShwYWdl
T3ZlcmxheSksIHRvQVBJKGV2ZW50LnBvc2l0aW9uKCkpLCB0b0FQSShldmVudC5idXR0b24oKSks
IG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7CisgICAgICAgICAgICByZXR1cm4gbV9jbGllbnQu
bW91c2VVcCh0b0FQSSgmcGFnZU92ZXJsYXkpLCB0b0FQSShldmVudC5wb3NpdGlvbigpKSwgdG9B
UEkoZXZlbnQuYnV0dG9uKCkpLCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pOwogICAgICAgICB9
Ci0gICAgICAgIGNhc2UgV2ViRXZlbnQ6Ok1vdXNlTW92ZTogewotICAgICAgICAgICAgaWYgKGV2
ZW50LmJ1dHRvbigpID09IFdlYk1vdXNlRXZlbnQ6Ok5vQnV0dG9uKSB7CisgICAgICAgIGNhc2Ug
UGxhdGZvcm1Nb3VzZUV2ZW50OjpUeXBlOjpNb3VzZU1vdmVkOiB7CisgICAgICAgICAgICBpZiAo
ZXZlbnQuYnV0dG9uKCkgPT0gTW91c2VCdXR0b246Ok5vQnV0dG9uKSB7CiAgICAgICAgICAgICAg
ICAgaWYgKCFtX2NsaWVudC5tb3VzZU1vdmVkKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKLSAgICAgICAgICAgICAgICByZXR1cm4gbV9jbGllbnQubW91c2VNb3ZlZCh0b0FQ
SShwYWdlT3ZlcmxheSksIHRvQVBJKGV2ZW50LnBvc2l0aW9uKCkpLCBtX2NsaWVudC5iYXNlLmNs
aWVudEluZm8pOworICAgICAgICAgICAgICAgIHJldHVybiBtX2NsaWVudC5tb3VzZU1vdmVkKHRv
QVBJKCZwYWdlT3ZlcmxheSksIHRvQVBJKGV2ZW50LnBvc2l0aW9uKCkpLCBtX2NsaWVudC5iYXNl
LmNsaWVudEluZm8pOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAvLyBUaGlzIGlzIGEg
TW91c2VNb3ZlIGV2ZW50IHdpdGggYSBtb3VzZSBidXR0b24gcHJlc3NlZC4gQ2FsbCBtb3VzZURy
YWdnZWQuCiAgICAgICAgICAgICBpZiAoIW1fY2xpZW50Lm1vdXNlRHJhZ2dlZCkKICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgICAgIHJldHVybiBtX2NsaWVudC5tb3Vz
ZURyYWdnZWQodG9BUEkocGFnZU92ZXJsYXkpLCB0b0FQSShldmVudC5wb3NpdGlvbigpKSwgdG9B
UEkoZXZlbnQuYnV0dG9uKCkpLCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pOworICAgICAgICAg
ICAgcmV0dXJuIG1fY2xpZW50Lm1vdXNlRHJhZ2dlZCh0b0FQSSgmcGFnZU92ZXJsYXkpLCB0b0FQ
SShldmVudC5wb3NpdGlvbigpKSwgdG9BUEkoZXZlbnQuYnV0dG9uKCkpLCBtX2NsaWVudC5iYXNl
LmNsaWVudEluZm8pOwogICAgICAgICB9CiAKICAgICAgICAgZGVmYXVsdDoKQEAgLTEyNSwxOCAr
MTMyLDQzIEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgdmlydHVhbCBX
S1R5cGVSZWYgY29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZShQYWdlT3ZlcmxheSogcGFn
ZU92ZXJsYXksIFdLU3RyaW5nUmVmIGF0dHJpYnV0ZSwgV0tUeXBlUmVmIHBhcmFtZXRlcikKKyAg
ICB2aXJ0dWFsIGJvb2wgY29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVTdHJpbmdWYWx1ZUZvclBv
aW50KFdlYlBhZ2VPdmVybGF5JiBwYWdlT3ZlcmxheSwgU3RyaW5nIGF0dHJpYnV0ZSwgV2ViQ29y
ZTo6RmxvYXRQb2ludCBwYXJhbWV0ZXIsIFN0cmluZyYgdmFsdWUpIG92ZXJyaWRlCiAgICAgewog
ICAgICAgICBpZiAoIW1fYWNjZXNzaWJpbGl0eUNsaWVudC5jbGllbnQoKS5jb3B5QWNjZXNzaWJp
bGl0eUF0dHJpYnV0ZVZhbHVlKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIHJldHVy
biBtX2FjY2Vzc2liaWxpdHlDbGllbnQuY2xpZW50KCkuY29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1
dGVWYWx1ZSh0b0FQSShwYWdlT3ZlcmxheSksIGF0dHJpYnV0ZSwgcGFyYW1ldGVyLCBtX2FjY2Vz
c2liaWxpdHlDbGllbnQuY2xpZW50KCkuYmFzZS5jbGllbnRJbmZvKTsKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiB3a1R5cGUgPSBtX2Fj
Y2Vzc2liaWxpdHlDbGllbnQuY2xpZW50KCkuY29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1
ZSh0b0FQSSgmcGFnZU92ZXJsYXkpLCB0b0NvcGllZEFQSShhdHRyaWJ1dGUpLCBXS1BvaW50Q3Jl
YXRlKFdLUG9pbnRNYWtlKHBhcmFtZXRlci54KCksIHBhcmFtZXRlci55KCkpKSwgbV9hY2Nlc3Np
YmlsaXR5Q2xpZW50LmNsaWVudCgpLmJhc2UuY2xpZW50SW5mbyk7CisgICAgICAgIGlmICh0b0lt
cGwod2tUeXBlLmdldCgpKS0+dHlwZSgpICE9IEFQSTo6U3RyaW5nOjpBUElUeXBlKQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB2YWx1ZSA9IHRvV1RGU3RyaW5nKHN0YXRpY19j
YXN0PFdLU3RyaW5nUmVmPih3a1R5cGUuZ2V0KCkpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorCisgICAgdmlydHVhbCBib29sIGNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlQm9vbFZh
bHVlRm9yUG9pbnQoV2ViUGFnZU92ZXJsYXkmIHBhZ2VPdmVybGF5LCBTdHJpbmcgYXR0cmlidXRl
LCBXZWJDb3JlOjpGbG9hdFBvaW50IHBhcmFtZXRlciwgYm9vbCYgdmFsdWUpIG92ZXJyaWRlCisg
ICAgeworICAgICAgICBpZiAoIW1fYWNjZXNzaWJpbGl0eUNsaWVudC5jbGllbnQoKS5jb3B5QWNj
ZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICBXS1JldGFpblB0cjxXS1R5cGVSZWY+IHdrVHlwZSA9IG1fYWNjZXNzaWJpbGl0eUNsaWVu
dC5jbGllbnQoKS5jb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlKHRvQVBJKCZwYWdlT3Zl
cmxheSksIHRvQ29waWVkQVBJKGF0dHJpYnV0ZSksIFdLUG9pbnRDcmVhdGUoV0tQb2ludE1ha2Uo
cGFyYW1ldGVyLngoKSwgcGFyYW1ldGVyLnkoKSkpLCBtX2FjY2Vzc2liaWxpdHlDbGllbnQuY2xp
ZW50KCkuYmFzZS5jbGllbnRJbmZvKTsKKyAgICAgICAgaWYgKHRvSW1wbCh3a1R5cGUuZ2V0KCkp
LT50eXBlKCkgIT0gQVBJOjpCb29sZWFuOjpBUElUeXBlKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICB2YWx1ZSA9IFdLQm9vbGVhbkdldFZhbHVlKHN0YXRpY19jYXN0PFdLQm9v
bGVhblJlZj4od2tUeXBlLmdldCgpKSk7CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAot
ICAgIHZpcnR1YWwgV0tBcnJheVJlZiBjb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZU5hbWVzKFBh
Z2VPdmVybGF5KiBwYWdlT3ZlcmxheSwgYm9vbCBwYXJhbWVyaXplZE5hbWVzKQorICAgIHZpcnR1
YWwgVmVjdG9yPFN0cmluZz4gY29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVOYW1lcyhXZWJQYWdl
T3ZlcmxheSYgcGFnZU92ZXJsYXksIGJvb2wgcGFyYW1lcml6ZWROYW1lcykgb3ZlcnJpZGUKICAg
ICB7CisgICAgICAgIFZlY3RvcjxTdHJpbmc+IG5hbWVzOwogICAgICAgICBpZiAoIW1fYWNjZXNz
aWJpbGl0eUNsaWVudC5jbGllbnQoKS5jb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZU5hbWVzKQot
ICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIHJldHVybiBtX2FjY2Vzc2liaWxpdHlDbGll
bnQuY2xpZW50KCkuY29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVOYW1lcyh0b0FQSShwYWdlT3Zl
cmxheSksIHBhcmFtZXJpemVkTmFtZXMsIG1fYWNjZXNzaWJpbGl0eUNsaWVudC5jbGllbnQoKS5i
YXNlLmNsaWVudEluZm8pOworICAgICAgICAgICAgcmV0dXJuIG5hbWVzOworICAgICAgICBXS1Jl
dGFpblB0cjxXS0FycmF5UmVmPiB3a05hbWVzID0gbV9hY2Nlc3NpYmlsaXR5Q2xpZW50LmNsaWVu
dCgpLmNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlTmFtZXModG9BUEkoJnBhZ2VPdmVybGF5KSwg
cGFyYW1lcml6ZWROYW1lcywgbV9hY2Nlc3NpYmlsaXR5Q2xpZW50LmNsaWVudCgpLmJhc2UuY2xp
ZW50SW5mbyk7CisKKyAgICAgICAgc2l6ZV90IGNvdW50ID0gV0tBcnJheUdldFNpemUod2tOYW1l
cy5nZXQoKSk7CisgICAgICAgIGZvciAoc2l6ZV90IGsgPSAwOyBrIDwgY291bnQ7IGsrKykgewor
ICAgICAgICAgICAgV0tUeXBlUmVmIGl0ZW0gPSBXS0FycmF5R2V0SXRlbUF0SW5kZXgod2tOYW1l
cy5nZXQoKSwgayk7CisgICAgICAgICAgICBpZiAodG9JbXBsKGl0ZW0pLT50eXBlKCkgPT0gQVBJ
OjpTdHJpbmc6OkFQSVR5cGUpCisgICAgICAgICAgICAgICAgbmFtZXMuYXBwZW5kKHRvV1RGU3Ry
aW5nKHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihpdGVtKSkpOworICAgICAgICB9CisKKyAgICAg
ICAgcmV0dXJuIG5hbWVzOwogICAgIH0KICAgICAKICAgICBBUEk6OkNsaWVudDxXS0J1bmRsZVBh
Z2VPdmVybGF5QWNjZXNzaWJpbGl0eUNsaWVudEJhc2U+IG1fYWNjZXNzaWJpbGl0eUNsaWVudDsK
QEAgLTE0NCw3ICsxNzYsNyBAQCBwcml2YXRlOgogCiBXS1R5cGVJRCBXS0J1bmRsZVBhZ2VPdmVy
bGF5R2V0VHlwZUlEKCkKIHsKLSAgICByZXR1cm4gdG9BUEkoUGFnZU92ZXJsYXk6OkFQSVR5cGUp
OworICAgIHJldHVybiB0b0FQSShXZWJQYWdlT3ZlcmxheTo6QVBJVHlwZSk7CiB9CiAKIFdLQnVu
ZGxlUGFnZU92ZXJsYXlSZWYgV0tCdW5kbGVQYWdlT3ZlcmxheUNyZWF0ZShXS0J1bmRsZVBhZ2VP
dmVybGF5Q2xpZW50QmFzZSogd2tDbGllbnQpCkBAIC0xNTUsMTQgKzE4NywxNCBAQCBXS0J1bmRs
ZVBhZ2VPdmVybGF5UmVmIFdLQnVuZGxlUGFnZU92ZXJsYXlDcmVhdGUoV0tCdW5kbGVQYWdlT3Zl
cmxheUNsaWVudEJhc2UqCiAgICAgYXV0byBjbGllbnRJbXBsID0gc3RkOjptYWtlX3VuaXF1ZTxQ
YWdlT3ZlcmxheUNsaWVudEltcGw+KHdrQ2xpZW50KTsKIAogICAgIC8vIEZJWE1FOiBMb29rcyBs
aWtlIHRoaXMgbGVha3MgdGhlIGNsaWVudEltcGwuCi0gICAgcmV0dXJuIHRvQVBJKFBhZ2VPdmVy
bGF5OjpjcmVhdGUoY2xpZW50SW1wbC5yZWxlYXNlKCkpLmxlYWtSZWYoKSk7CisgICAgcmV0dXJu
IHRvQVBJKFdlYlBhZ2VPdmVybGF5OjpjcmVhdGUoKmNsaWVudEltcGwucmVsZWFzZSgpKS5sZWFr
UmVmKCkpOwogfQogCiB2b2lkIFdLQnVuZGxlUGFnZU92ZXJsYXlTZXRBY2Nlc3NpYmlsaXR5Q2xp
ZW50KFdLQnVuZGxlUGFnZU92ZXJsYXlSZWYgYnVuZGxlUGFnZU92ZXJsYXlSZWYsIFdLQnVuZGxl
UGFnZU92ZXJsYXlBY2Nlc3NpYmlsaXR5Q2xpZW50QmFzZSogY2xpZW50KQogewogICAgIGlmIChj
bGllbnQgJiYgY2xpZW50LT52ZXJzaW9uKQogICAgICAgICByZXR1cm47Ci0gICAgc3RhdGljX2Nh
c3Q8UGFnZU92ZXJsYXlDbGllbnRJbXBsKj4odG9JbXBsKGJ1bmRsZVBhZ2VPdmVybGF5UmVmKS0+
Y2xpZW50KCkpLT5zZXRBY2Nlc3NpYmlsaXR5Q2xpZW50KGNsaWVudCk7CisgICAgc3RhdGljX2Nh
c3Q8UGFnZU92ZXJsYXlDbGllbnRJbXBsKj4oJnRvSW1wbChidW5kbGVQYWdlT3ZlcmxheVJlZikt
PmNsaWVudCgpKS0+c2V0QWNjZXNzaWJpbGl0eUNsaWVudChjbGllbnQpOwogfQogCiB2b2lkIFdL
QnVuZGxlUGFnZU92ZXJsYXlTZXROZWVkc0Rpc3BsYXkoV0tCdW5kbGVQYWdlT3ZlcmxheVJlZiBi
dW5kbGVQYWdlT3ZlcmxheVJlZiwgV0tSZWN0IHJlY3QpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9tYWMvV0tXZWJQcm9jZXNzUGx1Z0lu
QnJvd3NlckNvbnRleHRDb250cm9sbGVyLm1tIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvbWFjL1dLV2ViUHJvY2Vzc1BsdWdJbkJyb3dzZXJDb250ZXh0Q29u
dHJvbGxlci5tbQppbmRleCA3ZmMwNDFmLi4wZDA5MzM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9tYWMvV0tXZWJQcm9jZXNzUGx1Z0lu
QnJvd3NlckNvbnRleHRDb250cm9sbGVyLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvQVBJL21hYy9XS1dlYlByb2Nlc3NQbHVnSW5Ccm93c2VyQ29udGV4
dENvbnRyb2xsZXIubW0KQEAgLTYwLDYgKzYwLDcgQEAKICNpbXBvcnQgPFdlYkNvcmUvRnJhbWUu
aD4KICNpbXBvcnQgPFdlYkNvcmUvSFRNTEZvcm1FbGVtZW50Lmg+CiAjaW1wb3J0IDxXZWJDb3Jl
L0hUTUxJbnB1dEVsZW1lbnQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvTWFpbkZyYW1lLmg+CiAKIHVz
aW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xp
ZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hy
b21lQ2xpZW50LmNwcAppbmRleCBjZGVjYmRhLi5iNmEyOTEwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAKKysr
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGll
bnQuY3BwCkBAIC04NDAsNyArODQwLDkgQEAgUGFzc1JlZlB0cjxXZWJDb3JlOjpTZWFyY2hQb3B1
cE1lbnU+IFdlYkNocm9tZUNsaWVudDo6Y3JlYXRlU2VhcmNoUG9wdXBNZW51KFdlYkMKIAogR3Jh
cGhpY3NMYXllckZhY3RvcnkqIFdlYkNocm9tZUNsaWVudDo6Z3JhcGhpY3NMYXllckZhY3Rvcnko
KSBjb25zdAogewotICAgIHJldHVybiBtX3BhZ2UtPmRyYXdpbmdBcmVhKCktPmdyYXBoaWNzTGF5
ZXJGYWN0b3J5KCk7CisgICAgaWYgKGF1dG8gZHJhd2luZ0FyZWEgPSBtX3BhZ2UtPmRyYXdpbmdB
cmVhKCkpCisgICAgICAgIHJldHVybiBkcmF3aW5nQXJlYS0+Z3JhcGhpY3NMYXllckZhY3Rvcnko
KTsKKyAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAogI2lmIFVTRShSRVFVRVNUX0FOSU1BVElPTl9G
UkFNRV9ESVNQTEFZX01PTklUT1IpCkBAIC04NTgsMTIgKzg2MCwxMCBAQCB2b2lkIFdlYkNocm9t
ZUNsaWVudDo6YXR0YWNoUm9vdEdyYXBoaWNzTGF5ZXIoRnJhbWUqLCBHcmFwaGljc0xheWVyKiBs
YXllcikKICAgICAgICAgbV9wYWdlLT5leGl0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoKTsK
IH0KIAotR3JhcGhpY3NMYXllciogV2ViQ2hyb21lQ2xpZW50Ojpkb2N1bWVudE92ZXJsYXlMYXll
ckZvckZyYW1lKEZyYW1lJiBmcmFtZSkKK3ZvaWQgV2ViQ2hyb21lQ2xpZW50OjphdHRhY2hWaWV3
T3ZlcmxheUdyYXBoaWNzTGF5ZXIoRnJhbWUqIGZyYW1lLCBHcmFwaGljc0xheWVyKiBncmFwaGlj
c0xheWVyKQogewotICAgIGlmICgmZnJhbWUgPT0gJm1fcGFnZS0+Y29yZVBhZ2UoKS0+bWFpbkZy
YW1lKCkpCi0gICAgICAgIHJldHVybiBtX3BhZ2UtPnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLmRv
Y3VtZW50T3ZlcmxheVJvb3RMYXllcigpOwotCi0gICAgcmV0dXJuIG51bGxwdHI7CisgICAgaWYg
KGF1dG8gZHJhd2luZ0FyZWEgPSBtX3BhZ2UtPmRyYXdpbmdBcmVhKCkpCisgICAgICAgIGRyYXdp
bmdBcmVhLT5hdHRhY2hWaWV3T3ZlcmxheUdyYXBoaWNzTGF5ZXIoZnJhbWUsIGdyYXBoaWNzTGF5
ZXIpOwogfQogCiB2b2lkIFdlYkNocm9tZUNsaWVudDo6c2V0TmVlZHNPbmVTaG90RHJhd2luZ1N5
bmNocm9uaXphdGlvbigpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaAppbmRleCBiOWRjMzJlLi5mNWM1YjI3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dl
YkNocm9tZUNsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1
cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgKQEAgLTIxNSwxMCArMjE1LDEwIEBAIHByaXZhdGU6CiAK
ICAgICB2aXJ0dWFsIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJGYWN0b3J5KiBncmFwaGljc0xheWVy
RmFjdG9yeSgpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBhdHRhY2hSb290R3Jh
cGhpY3NMYXllcihXZWJDb3JlOjpGcmFtZSosIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKSBvdmVy
cmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoVmlld092ZXJsYXlHcmFwaGljc0xheWVyKFdl
YkNvcmU6OkZyYW1lKiwgV2ViQ29yZTo6R3JhcGhpY3NMYXllciopIG92ZXJyaWRlOwogICAgIHZp
cnR1YWwgdm9pZCBzZXROZWVkc09uZVNob3REcmF3aW5nU3luY2hyb25pemF0aW9uKCkgb3ZlcnJp
ZGU7CiAgICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlQ29tcG9zaXRpbmdMYXllckZsdXNoKCkgb3Zl
cnJpZGU7CiAgICAgdmlydHVhbCBib29sIGFkanVzdExheWVyRmx1c2hUaHJvdHRsaW5nKFdlYkNv
cmU6OkxheWVyRmx1c2hUaHJvdHRsZVN0YXRlOjpGbGFncykgb3ZlcnJpZGU7Ci0gICAgdmlydHVh
bCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiBkb2N1bWVudE92ZXJsYXlMYXllckZvckZyYW1lKFdl
YkNvcmU6OkZyYW1lJikgb3ZlcnJpZGU7CiAKICNpZiBVU0UoUkVRVUVTVF9BTklNQVRJT05fRlJB
TUVfRElTUExBWV9NT05JVE9SKQogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxXZWJDb3JlOjpEaXNw
bGF5UmVmcmVzaE1vbml0b3I+IGNyZWF0ZURpc3BsYXlSZWZyZXNoTW9uaXRvcihQbGF0Zm9ybURp
c3BsYXlJRCkgY29uc3Qgb3ZlcnJpZGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckNsaWVudC5jcHAgYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckNsaWVudC5jcHAKaW5k
ZXggODU5MzU4Yi4uMDQzOGZjYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JDbGllbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50LmNwcApAQCAt
MzIsNyArMzIsOSBAQAogI2luY2x1ZGUgIldlYkluc3BlY3Rvci5oIgogI2luY2x1ZGUgIldlYlBh
Z2UuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0luc3BlY3RvckNvbnRyb2xsZXIuaD4KKyNpbmNsdWRl
IDxXZWJDb3JlL01haW5GcmFtZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUGFnZS5oPgorI2luY2x1
ZGUgPFdlYkNvcmUvUGFnZU92ZXJsYXlDb250cm9sbGVyLmg+CiAjaW5jbHVkZSA8d3RmL0N1cnJl
bnRUaW1lLmg+CiAKICNpZiBQTEFURk9STShJT1MpCkBAIC03Myw3ICs3NSw3IEBAIFdlYkluc3Bl
Y3RvckNsaWVudDo6fldlYkluc3BlY3RvckNsaWVudCgpCiAgICAgfQogCiAgICAgaWYgKG1fcGFp
bnRSZWN0T3ZlcmxheSkKLSAgICAgICAgbV9wYWdlLT51bmluc3RhbGxQYWdlT3ZlcmxheShtX3Bh
aW50UmVjdE92ZXJsYXkuZ2V0KCkpOworICAgICAgICBtX3BhZ2UtPm1haW5GcmFtZSgpLT5wYWdl
T3ZlcmxheUNvbnRyb2xsZXIoKS51bmluc3RhbGxQYWdlT3ZlcmxheShtX3BhaW50UmVjdE92ZXJs
YXkuZ2V0KCksIFBhZ2VPdmVybGF5OjpGYWRlTW9kZTo6RmFkZSk7CiB9CiAKIHZvaWQgV2ViSW5z
cGVjdG9yQ2xpZW50OjppbnNwZWN0b3JEZXN0cm95ZWQoKQpAQCAtMTExLDkgKzExMyw5IEBAIHZv
aWQgV2ViSW5zcGVjdG9yQ2xpZW50OjpoaWdobGlnaHQoKQogewogI2lmICFQTEFURk9STShJT1Mp
CiAgICAgaWYgKCFtX2hpZ2hsaWdodE92ZXJsYXkpIHsKLSAgICAgICAgUmVmUHRyPFBhZ2VPdmVy
bGF5PiBoaWdobGlnaHRPdmVybGF5ID0gUGFnZU92ZXJsYXk6OmNyZWF0ZSh0aGlzKTsKKyAgICAg
ICAgUmVmUHRyPFBhZ2VPdmVybGF5PiBoaWdobGlnaHRPdmVybGF5ID0gUGFnZU92ZXJsYXk6OmNy
ZWF0ZSgqdGhpcyk7CiAgICAgICAgIG1faGlnaGxpZ2h0T3ZlcmxheSA9IGhpZ2hsaWdodE92ZXJs
YXkuZ2V0KCk7Ci0gICAgICAgIG1fcGFnZS0+aW5zdGFsbFBhZ2VPdmVybGF5KGhpZ2hsaWdodE92
ZXJsYXkucmVsZWFzZSgpLCBQYWdlT3ZlcmxheTo6RmFkZU1vZGU6OkZhZGUpOworICAgICAgICBt
X3BhZ2UtPm1haW5GcmFtZSgpLT5wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKS5pbnN0YWxsUGFnZU92
ZXJsYXkoaGlnaGxpZ2h0T3ZlcmxheS5yZWxlYXNlKCksIFBhZ2VPdmVybGF5OjpGYWRlTW9kZTo6
RmFkZSk7CiAgICAgICAgIG1faGlnaGxpZ2h0T3ZlcmxheS0+c2V0TmVlZHNEaXNwbGF5KCk7CiAg
ICAgfSBlbHNlIHsKICAgICAgICAgbV9oaWdobGlnaHRPdmVybGF5LT5zdG9wRmFkZU91dEFuaW1h
dGlvbigpOwpAQCAtMTMwLDcgKzEzMiw3IEBAIHZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50OjpoaWRl
SGlnaGxpZ2h0KCkKIHsKICNpZiAhUExBVEZPUk0oSU9TKQogICAgIGlmIChtX2hpZ2hsaWdodE92
ZXJsYXkpCi0gICAgICAgIG1fcGFnZS0+dW5pbnN0YWxsUGFnZU92ZXJsYXkobV9oaWdobGlnaHRP
dmVybGF5LCBQYWdlT3ZlcmxheTo6RmFkZU1vZGU6OkZhZGUpOworICAgICAgICBtX3BhZ2UtPm1h
aW5GcmFtZSgpLT5wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKS51bmluc3RhbGxQYWdlT3ZlcmxheSht
X2hpZ2hsaWdodE92ZXJsYXksIFBhZ2VPdmVybGF5OjpGYWRlTW9kZTo6RmFkZSk7CiAjZWxzZQog
ICAgIG1fcGFnZS0+aGlkZUluc3BlY3RvckhpZ2hsaWdodCgpOwogI2VuZGlmCkBAIC0xMzksOCAr
MTQxLDggQEAgdm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6OmhpZGVIaWdobGlnaHQoKQogdm9pZCBX
ZWJJbnNwZWN0b3JDbGllbnQ6OnNob3dQYWludFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQog
ewogICAgIGlmICghbV9wYWludFJlY3RPdmVybGF5KSB7Ci0gICAgICAgIG1fcGFpbnRSZWN0T3Zl
cmxheSA9IFBhZ2VPdmVybGF5OjpjcmVhdGUodGhpcywgUGFnZU92ZXJsYXk6Ok92ZXJsYXlUeXBl
OjpEb2N1bWVudCk7Ci0gICAgICAgIG1fcGFnZS0+aW5zdGFsbFBhZ2VPdmVybGF5KG1fcGFpbnRS
ZWN0T3ZlcmxheSwgUGFnZU92ZXJsYXk6OkZhZGVNb2RlOjpEb05vdEZhZGUpOworICAgICAgICBt
X3BhaW50UmVjdE92ZXJsYXkgPSBQYWdlT3ZlcmxheTo6Y3JlYXRlKCp0aGlzLCBQYWdlT3Zlcmxh
eTo6T3ZlcmxheVR5cGU6OkRvY3VtZW50KTsKKyAgICAgICAgbV9wYWdlLT5tYWluRnJhbWUoKS0+
cGFnZU92ZXJsYXlDb250cm9sbGVyKCkuaW5zdGFsbFBhZ2VPdmVybGF5KG1fcGFpbnRSZWN0T3Zl
cmxheSwgUGFnZU92ZXJsYXk6OkZhZGVNb2RlOjpEb05vdEZhZGUpOwogICAgIH0KIAogICAgIGlm
ICghbV9wYWludEluZGljYXRvckxheWVyQ2xpZW50KQpAQCAtMTY3LDggKzE2OSw4IEBAIHZvaWQg
V2ViSW5zcGVjdG9yQ2xpZW50OjpzaG93UGFpbnRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkK
ICAgICAKICAgICBtX3BhaW50UmVjdExheWVycy5hZGQocGFpbnRMYXllci5nZXQoKSk7CiAKLSAg
ICBHcmFwaGljc0xheWVyKiBvdmVybGF5Um9vdExheWVyID0gbV9wYWludFJlY3RPdmVybGF5LT5s
YXllcigpOwotICAgIG92ZXJsYXlSb290TGF5ZXItPmFkZENoaWxkKHBhaW50TGF5ZXIucmVsZWFz
ZSgpKTsKKyAgICBHcmFwaGljc0xheWVyJiBvdmVybGF5Um9vdExheWVyID0gbV9wYWludFJlY3RP
dmVybGF5LT5sYXllcigpOworICAgIG92ZXJsYXlSb290TGF5ZXIuYWRkQ2hpbGQocGFpbnRMYXll
ci5yZWxlYXNlKCkpOwogfQogCiB2b2lkIFdlYkluc3BlY3RvckNsaWVudDo6YW5pbWF0aW9uRW5k
ZWRGb3JMYXllcihjb25zdCBHcmFwaGljc0xheWVyKiBsYXllcikKQEAgLTE5OCwxMyArMjAwLDEz
IEBAIHZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50OjpkaWRTZXRTZWFyY2hpbmdGb3JOb2RlKGJvb2wg
ZW5hYmxlZCkKIH0KICNlbmRpZgogCi12b2lkIFdlYkluc3BlY3RvckNsaWVudDo6cGFnZU92ZXJs
YXlEZXN0cm95ZWQoUGFnZU92ZXJsYXkqKQordm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6OnBhZ2VP
dmVybGF5RGVzdHJveWVkKFBhZ2VPdmVybGF5JikKIHsKIH0KIAotdm9pZCBXZWJJbnNwZWN0b3JD
bGllbnQ6OndpbGxNb3ZlVG9XZWJQYWdlKFBhZ2VPdmVybGF5KiwgV2ViUGFnZSogd2ViUGFnZSkK
K3ZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50Ojp3aWxsTW92ZVRvUGFnZShQYWdlT3ZlcmxheSYsIFBh
Z2UqIHBhZ2UpCiB7Ci0gICAgaWYgKHdlYlBhZ2UpCisgICAgaWYgKHBhZ2UpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIC8vIFRoZSBwYWdlIG92ZXJsYXkgaXMgbW92aW5nIGF3YXkgZnJvbSB0aGUg
d2ViIHBhZ2UsIHJlc2V0IGl0LgpAQCAtMjEyLDE2ICsyMTQsMTYgQEAgdm9pZCBXZWJJbnNwZWN0
b3JDbGllbnQ6OndpbGxNb3ZlVG9XZWJQYWdlKFBhZ2VPdmVybGF5KiwgV2ViUGFnZSogd2ViUGFn
ZSkKICAgICBtX2hpZ2hsaWdodE92ZXJsYXkgPSAwOwogfQogCi12b2lkIFdlYkluc3BlY3RvckNs
aWVudDo6ZGlkTW92ZVRvV2ViUGFnZShQYWdlT3ZlcmxheSosIFdlYlBhZ2UqKQordm9pZCBXZWJJ
bnNwZWN0b3JDbGllbnQ6OmRpZE1vdmVUb1BhZ2UoUGFnZU92ZXJsYXkmLCBQYWdlKikKIHsKIH0K
IAotdm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6OmRyYXdSZWN0KFBhZ2VPdmVybGF5KiwgV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiAvKmRp
cnR5UmVjdCovKQordm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6OmRyYXdSZWN0KFBhZ2VPdmVybGF5
JiwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBXZWJDb3JlOjpJbnRS
ZWN0JiAvKmRpcnR5UmVjdCovKQogewogICAgIG1fcGFnZS0+Y29yZVBhZ2UoKS0+aW5zcGVjdG9y
Q29udHJvbGxlcigpLmRyYXdIaWdobGlnaHQoY29udGV4dCk7CiB9CiAKLWJvb2wgV2ViSW5zcGVj
dG9yQ2xpZW50Ojptb3VzZUV2ZW50KFBhZ2VPdmVybGF5KiwgY29uc3QgV2ViTW91c2VFdmVudCYp
Citib29sIFdlYkluc3BlY3RvckNsaWVudDo6bW91c2VFdmVudChQYWdlT3ZlcmxheSYsIGNvbnN0
IFBsYXRmb3JtTW91c2VFdmVudCYpCiB7CiAgICAgcmV0dXJuIGZhbHNlOwogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JD
bGllbnQuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViSW5z
cGVjdG9yQ2xpZW50LmgKaW5kZXggNzk4Y2FjNy4uZGZjMDM4YSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JDbGllbnQuaAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3Rv
ckNsaWVudC5oCkBAIC0yOCwxNiArMjgsMTYgQEAKIAogI2lmIEVOQUJMRShJTlNQRUNUT1IpCiAK
LSNpbmNsdWRlICJQYWdlT3ZlcmxheS5oIgotCiAjaW5jbHVkZSA8V2ViQ29yZS9JbnNwZWN0b3JD
bGllbnQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0luc3BlY3RvckZvcndhcmRpbmcuaD4KKyNpbmNs
dWRlIDxXZWJDb3JlL1BhZ2VPdmVybGF5Lmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgR3JhcGhpY3NDb250ZXh0OwogY2xhc3MgR3JhcGhp
Y3NMYXllcjsKIGNsYXNzIEludFJlY3Q7CitjbGFzcyBQYWdlT3ZlcmxheTsKIH0KIAogbmFtZXNw
YWNlIFdlYktpdCB7CkBAIC00NSw3ICs0NSw3IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogY2xhc3Mg
V2ViUGFnZTsKIGNsYXNzIFJlcGFpbnRJbmRpY2F0b3JMYXllckNsaWVudDsKIAotY2xhc3MgV2Vi
SW5zcGVjdG9yQ2xpZW50IDogcHVibGljIFdlYkNvcmU6Okluc3BlY3RvckNsaWVudCwgcHJpdmF0
ZSBQYWdlT3ZlcmxheTo6Q2xpZW50IHsKK2NsYXNzIFdlYkluc3BlY3RvckNsaWVudCA6IHB1Ymxp
YyBXZWJDb3JlOjpJbnNwZWN0b3JDbGllbnQsIHByaXZhdGUgV2ViQ29yZTo6UGFnZU92ZXJsYXk6
OkNsaWVudCB7CiBmcmllbmQgY2xhc3MgUmVwYWludEluZGljYXRvckxheWVyQ2xpZW50OwogcHVi
bGljOgogICAgIFdlYkluc3BlY3RvckNsaWVudChXZWJQYWdlKik7CkBAIC03NCwxOCArNzQsMTgg
QEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgc2hvd1BhaW50UmVjdChjb25zdCBXZWJDb3Jl
OjpGbG9hdFJlY3QmKSBvdmVycmlkZTsKIAogICAgIC8vIFBhZ2VPdmVybGF5OjpDbGllbnQKLSAg
ICB2aXJ0dWFsIHZvaWQgcGFnZU92ZXJsYXlEZXN0cm95ZWQoUGFnZU92ZXJsYXkqKSBvdmVycmlk
ZTsKLSAgICB2aXJ0dWFsIHZvaWQgd2lsbE1vdmVUb1dlYlBhZ2UoUGFnZU92ZXJsYXkqLCBXZWJQ
YWdlKikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGRpZE1vdmVUb1dlYlBhZ2UoUGFnZU92
ZXJsYXkqLCBXZWJQYWdlKikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGRyYXdSZWN0KFBh
Z2VPdmVybGF5KiwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiwgY29uc3QgV2ViQ29yZTo6SW50
UmVjdCYpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgYm9vbCBtb3VzZUV2ZW50KFBhZ2VPdmVybGF5
KiwgY29uc3QgV2ViTW91c2VFdmVudCYpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBwYWdl
T3ZlcmxheURlc3Ryb3llZChXZWJDb3JlOjpQYWdlT3ZlcmxheSYpIG92ZXJyaWRlOworICAgIHZp
cnR1YWwgdm9pZCB3aWxsTW92ZVRvUGFnZShXZWJDb3JlOjpQYWdlT3ZlcmxheSYsIFdlYkNvcmU6
OlBhZ2UqKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkTW92ZVRvUGFnZShXZWJDb3Jl
OjpQYWdlT3ZlcmxheSYsIFdlYkNvcmU6OlBhZ2UqKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZv
aWQgZHJhd1JlY3QoV2ViQ29yZTo6UGFnZU92ZXJsYXkmLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQmLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29s
IG1vdXNlRXZlbnQoV2ViQ29yZTo6UGFnZU92ZXJsYXkmLCBjb25zdCBXZWJDb3JlOjpQbGF0Zm9y
bU1vdXNlRXZlbnQmKSBvdmVycmlkZTsKIAogICAgIHZvaWQgYW5pbWF0aW9uRW5kZWRGb3JMYXll
cihjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKik7CiAKICAgICBXZWJQYWdlKiBtX3BhZ2U7
Ci0gICAgUGFnZU92ZXJsYXkqIG1faGlnaGxpZ2h0T3ZlcmxheTsKKyAgICBXZWJDb3JlOjpQYWdl
T3ZlcmxheSogbV9oaWdobGlnaHRPdmVybGF5OwogICAgIAotICAgIFJlZlB0cjxQYWdlT3Zlcmxh
eT4gbV9wYWludFJlY3RPdmVybGF5OworICAgIFJlZlB0cjxXZWJDb3JlOjpQYWdlT3ZlcmxheT4g
bV9wYWludFJlY3RPdmVybGF5OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxSZXBhaW50SW5kaWNhdG9y
TGF5ZXJDbGllbnQ+IG1fcGFpbnRJbmRpY2F0b3JMYXllckNsaWVudDsKICAgICBIYXNoU2V0PFdl
YkNvcmU6OkdyYXBoaWNzTGF5ZXIqPiBtX3BhaW50UmVjdExheWVyczsgLy8gSWRlYWxseSB0aGlz
IHdvdWxkIGJlIEhhc2hTZXQ8c3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzTGF5ZXI+PiBidXQgdGhh
dCBkb2Vzbid0IHdvcmsgeWV0LiB3ZWJraXQub3JnL2IvMTM2MTY2CiB9OwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9tYWMvV2ViRWRpdG9yQ2xp
ZW50TWFjLm1tIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9tYWMv
V2ViRWRpdG9yQ2xpZW50TWFjLm1tCmluZGV4IGYzNmRkYmMuLjQ5ZDU5YmUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvbWFjL1dlYkVkaXRvckNs
aWVudE1hYy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0
L21hYy9XZWJFZGl0b3JDbGllbnRNYWMubW0KQEAgLTQ0LDYgKzQ0LDcgQEAKICNpbXBvcnQgPFdl
YkNvcmUvRm9jdXNDb250cm9sbGVyLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lLmg+CiAjaW1w
b3J0IDxXZWJDb3JlL0tleWJvYXJkRXZlbnQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvTWFpbkZyYW1l
Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+CiAjaW1wb3J0IDxXZWJDb3Jl
L1BhZ2UuaD4KICNpbXBvcnQgPFdlYkNvcmUvV2ViQ29yZU5TVVJMRXh0cmFzLmg+CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWEuaCBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYS5oCmluZGV4IGY3NGI0
ZGUuLmRiM2I4M2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9EcmF3aW5nQXJlYS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9E
cmF3aW5nQXJlYS5oCkBAIC00NSw2ICs0NSw3IEBAIGNsYXNzIE1lc3NhZ2VEZWNvZGVyOwogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBEaXNwbGF5UmVmcmVzaE1vbml0b3I7CitjbGFzcyBG
cmFtZTsKIGNsYXNzIEZyYW1lVmlldzsKIGNsYXNzIEdyYXBoaWNzTGF5ZXI7CiBjbGFzcyBHcmFw
aGljc0xheWVyRmFjdG9yeTsKQEAgLTEyMCw2ICsxMjEsOCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0
dWFsIGJvb2wgYWRqdXN0TGF5ZXJGbHVzaFRocm90dGxpbmcoV2ViQ29yZTo6TGF5ZXJGbHVzaFRo
cm90dGxlU3RhdGU6OkZsYWdzKSB7IHJldHVybiBmYWxzZTsgfQogCisgICAgdmlydHVhbCB2b2lk
IGF0dGFjaFZpZXdPdmVybGF5R3JhcGhpY3NMYXllcihXZWJDb3JlOjpGcmFtZSosIFdlYkNvcmU6
OkdyYXBoaWNzTGF5ZXIqKSB7IH0KKwogcHJvdGVjdGVkOgogICAgIERyYXdpbmdBcmVhKERyYXdp
bmdBcmVhVHlwZSwgV2ViUGFnZSYpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNwcAppbmRleCAxZTM0NjJiLi45OGFjNmFhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xs
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJv
bGxlci5jcHAKQEAgLTQwLDYgKzQwLDggQEAKICNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29u
dGV4dC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvTWFpbkZyYW1lLmg+CiAjaW5jbHVkZSA8V2ViQ29y
ZS9QYWdlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9QYWdlT3ZlcmxheUNvbnRyb2xsZXIuaD4KKyNp
bmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtTW91c2VFdmVudC5oPgogI2luY2x1ZGUgPFdlYkNvcmUv
UGx1Z2luRG9jdW1lbnQuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CkBAIC02Myw3ICs2
NSw3IEBAIHN0YXRpYyBXZWJDb3JlOjpGaW5kT3B0aW9ucyBjb3JlKEZpbmRPcHRpb25zIG9wdGlv
bnMpCiAKIEZpbmRDb250cm9sbGVyOjpGaW5kQ29udHJvbGxlcihXZWJQYWdlKiB3ZWJQYWdlKQog
ICAgIDogbV93ZWJQYWdlKHdlYlBhZ2UpCi0gICAgLCBtX2ZpbmRQYWdlT3ZlcmxheSgwKQorICAg
ICwgbV9maW5kUGFnZU92ZXJsYXkobnVsbHB0cikKICAgICAsIG1faXNTaG93aW5nRmluZEluZGlj
YXRvcihmYWxzZSkKICAgICAsIG1fZm91bmRTdHJpbmdNYXRjaEluZGV4KC0xKQogewpAQCAtMTgy
LDEyICsxODQsMTIgQEAgdm9pZCBGaW5kQ29udHJvbGxlcjo6dXBkYXRlRmluZFVJQWZ0ZXJQYWdl
U2Nyb2xsKGJvb2wgZm91bmQsIGNvbnN0IFN0cmluZyYgc3RyaW4KIAogICAgIGlmICghc2hvdWxk
U2hvd092ZXJsYXkpIHsKICAgICAgICAgaWYgKG1fZmluZFBhZ2VPdmVybGF5KQotICAgICAgICAg
ICAgbV93ZWJQYWdlLT51bmluc3RhbGxQYWdlT3ZlcmxheShtX2ZpbmRQYWdlT3ZlcmxheSwgUGFn
ZU92ZXJsYXk6OkZhZGVNb2RlOjpGYWRlKTsKKyAgICAgICAgICAgIG1fd2ViUGFnZS0+bWFpbkZy
YW1lKCktPnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLnVuaW5zdGFsbFBhZ2VPdmVybGF5KG1fZmlu
ZFBhZ2VPdmVybGF5LCBQYWdlT3ZlcmxheTo6RmFkZU1vZGU6OkZhZGUpOwogICAgIH0gZWxzZSB7
CiAgICAgICAgIGlmICghbV9maW5kUGFnZU92ZXJsYXkpIHsKLSAgICAgICAgICAgIFJlZlB0cjxQ
YWdlT3ZlcmxheT4gZmluZFBhZ2VPdmVybGF5ID0gUGFnZU92ZXJsYXk6OmNyZWF0ZSh0aGlzKTsK
KyAgICAgICAgICAgIFJlZlB0cjxQYWdlT3ZlcmxheT4gZmluZFBhZ2VPdmVybGF5ID0gUGFnZU92
ZXJsYXk6OmNyZWF0ZSgqdGhpcyk7CiAgICAgICAgICAgICBtX2ZpbmRQYWdlT3ZlcmxheSA9IGZp
bmRQYWdlT3ZlcmxheS5nZXQoKTsKLSAgICAgICAgICAgIG1fd2ViUGFnZS0+aW5zdGFsbFBhZ2VP
dmVybGF5KGZpbmRQYWdlT3ZlcmxheS5yZWxlYXNlKCksIFBhZ2VPdmVybGF5OjpGYWRlTW9kZTo6
RmFkZSk7CisgICAgICAgICAgICBtX3dlYlBhZ2UtPm1haW5GcmFtZSgpLT5wYWdlT3ZlcmxheUNv
bnRyb2xsZXIoKS5pbnN0YWxsUGFnZU92ZXJsYXkoZmluZFBhZ2VPdmVybGF5LnJlbGVhc2UoKSwg
UGFnZU92ZXJsYXk6OkZhZGVNb2RlOjpGYWRlKTsKICAgICAgICAgfQogICAgICAgICBtX2ZpbmRQ
YWdlT3ZlcmxheS0+c2V0TmVlZHNEaXNwbGF5KCk7CiAgICAgfQpAQCAtMzMwLDcgKzMzMiw3IEBA
IHZvaWQgRmluZENvbnRyb2xsZXI6OmhpZGVGaW5kVUkoKQogewogICAgIG1fZmluZE1hdGNoZXMu
Y2xlYXIoKTsKICAgICBpZiAobV9maW5kUGFnZU92ZXJsYXkpCi0gICAgICAgIG1fd2ViUGFnZS0+
dW5pbnN0YWxsUGFnZU92ZXJsYXkobV9maW5kUGFnZU92ZXJsYXksIFBhZ2VPdmVybGF5OjpGYWRl
TW9kZTo6RmFkZSk7CisgICAgICAgIG1fd2ViUGFnZS0+bWFpbkZyYW1lKCktPnBhZ2VPdmVybGF5
Q29udHJvbGxlcigpLnVuaW5zdGFsbFBhZ2VPdmVybGF5KG1fZmluZFBhZ2VPdmVybGF5LCBQYWdl
T3ZlcmxheTo6RmFkZU1vZGU6OkZhZGUpOwogCiAgICAgUGx1Z2luVmlldyogcGx1Z2luVmlldyA9
IHBsdWdpblZpZXdGb3JGcmFtZShtX3dlYlBhZ2UtPm1haW5GcmFtZSgpKTsKICAgICAKQEAgLTQz
OSwyMCArNDQxLDIwIEBAIFZlY3RvcjxJbnRSZWN0PiBGaW5kQ29udHJvbGxlcjo6cmVjdHNGb3JU
ZXh0TWF0Y2hlcygpCiAgICAgcmV0dXJuIHJlY3RzOwogfQogCi12b2lkIEZpbmRDb250cm9sbGVy
OjpwYWdlT3ZlcmxheURlc3Ryb3llZChQYWdlT3ZlcmxheSopCit2b2lkIEZpbmRDb250cm9sbGVy
OjpwYWdlT3ZlcmxheURlc3Ryb3llZChQYWdlT3ZlcmxheSYpCiB7CiB9CiAKLXZvaWQgRmluZENv
bnRyb2xsZXI6OndpbGxNb3ZlVG9XZWJQYWdlKFBhZ2VPdmVybGF5KiwgV2ViUGFnZSogd2ViUGFn
ZSkKK3ZvaWQgRmluZENvbnRyb2xsZXI6OndpbGxNb3ZlVG9QYWdlKFBhZ2VPdmVybGF5JiwgUGFn
ZSogcGFnZSkKIHsKLSAgICBpZiAod2ViUGFnZSkKKyAgICBpZiAocGFnZSkKICAgICAgICAgcmV0
dXJuOwogCiAgICAgQVNTRVJUKG1fZmluZFBhZ2VPdmVybGF5KTsKICAgICBtX2ZpbmRQYWdlT3Zl
cmxheSA9IDA7CiB9CiAgICAgCi12b2lkIEZpbmRDb250cm9sbGVyOjpkaWRNb3ZlVG9XZWJQYWdl
KFBhZ2VPdmVybGF5KiwgV2ViUGFnZSopCit2b2lkIEZpbmRDb250cm9sbGVyOjpkaWRNb3ZlVG9Q
YWdlKFBhZ2VPdmVybGF5JiwgUGFnZSopCiB7CiB9CiAKQEAgLTQ2OCw3ICs0NzAsNyBAQCBjb25z
dCBmbG9hdCBzaGFkb3dCbHVyUmFkaXVzID0gMTsKIGNvbnN0IGZsb2F0IHNoYWRvd0NvbG9yQWxw
aGEgPSAwLjU7CiAjZW5kaWYKIAotdm9pZCBGaW5kQ29udHJvbGxlcjo6ZHJhd1JlY3QoUGFnZU92
ZXJsYXkqLCBHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgSW50UmVjdCYg
ZGlydHlSZWN0KQordm9pZCBGaW5kQ29udHJvbGxlcjo6ZHJhd1JlY3QoUGFnZU92ZXJsYXkmLCBH
cmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgSW50UmVjdCYgZGlydHlSZWN0
KQogewogICAgIENvbG9yIG92ZXJsYXlCYWNrZ3JvdW5kQ29sb3IoMC4xZiwgMC4xZiwgMC4xZiwg
MC4yNWYpOwogCkBAIC01MDYsOSArNTA4LDkgQEAgdm9pZCBGaW5kQ29udHJvbGxlcjo6ZHJhd1Jl
Y3QoUGFnZU92ZXJsYXkqLCBHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgY28KICAg
ICB9CiB9CiAKLWJvb2wgRmluZENvbnRyb2xsZXI6Om1vdXNlRXZlbnQoUGFnZU92ZXJsYXkqLCBj
b25zdCBXZWJNb3VzZUV2ZW50JiBtb3VzZUV2ZW50KQorYm9vbCBGaW5kQ29udHJvbGxlcjo6bW91
c2VFdmVudChQYWdlT3ZlcmxheSYsIGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgbW91c2VFdmVu
dCkKIHsKLSAgICBpZiAobW91c2VFdmVudC50eXBlKCkgPT0gV2ViRXZlbnQ6Ok1vdXNlRG93bikK
KyAgICBpZiAobW91c2VFdmVudC50eXBlKCkgPT0gUGxhdGZvcm1FdmVudDo6TW91c2VQcmVzc2Vk
KQogICAgICAgICBoaWRlRmluZFVJKCk7CiAKICAgICByZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuaCBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5oCmluZGV4IDI4
MDYzZmMuLjkwNWVkMWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9GaW5kQ29udHJvbGxlci5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9GaW5kQ29udHJvbGxlci5oCkBAIC0yNiwxMCArMjYsMTAgQEAKICNpZm5kZWYgRmluZENv
bnRyb2xsZXJfaAogI2RlZmluZSBGaW5kQ29udHJvbGxlcl9oCiAKLSNpbmNsdWRlICJQYWdlT3Zl
cmxheS5oIgogI2luY2x1ZGUgIlNoYXJlYWJsZUJpdG1hcC5oIgogI2luY2x1ZGUgIldlYkZpbmRP
cHRpb25zLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9JbnRSZWN0Lmg+CisjaW5jbHVkZSA8V2ViQ29y
ZS9QYWdlT3ZlcmxheS5oPgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3Rm
L05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgpAQCAtNDUsMTAgKzQ1LDkg
QEAgY2xhc3MgUmFuZ2U7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1jbGFzcyBQYWdlT3Zlcmxh
eTsKIGNsYXNzIFdlYlBhZ2U7CiAKLWNsYXNzIEZpbmRDb250cm9sbGVyIDogcHJpdmF0ZSBQYWdl
T3ZlcmxheTo6Q2xpZW50IHsKK2NsYXNzIEZpbmRDb250cm9sbGVyIDogcHJpdmF0ZSBXZWJDb3Jl
OjpQYWdlT3ZlcmxheTo6Q2xpZW50IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShGaW5kQ29u
dHJvbGxlcik7CiAKIHB1YmxpYzoKQEAgLTcxLDExICs3MCwxMSBAQCBwdWJsaWM6CiAKIHByaXZh
dGU6CiAgICAgLy8gUGFnZU92ZXJsYXk6OkNsaWVudC4KLSAgICB2aXJ0dWFsIHZvaWQgcGFnZU92
ZXJsYXlEZXN0cm95ZWQoUGFnZU92ZXJsYXkqKTsKLSAgICB2aXJ0dWFsIHZvaWQgd2lsbE1vdmVU
b1dlYlBhZ2UoUGFnZU92ZXJsYXkqLCBXZWJQYWdlKik7Ci0gICAgdmlydHVhbCB2b2lkIGRpZE1v
dmVUb1dlYlBhZ2UoUGFnZU92ZXJsYXkqLCBXZWJQYWdlKik7Ci0gICAgdmlydHVhbCBib29sIG1v
dXNlRXZlbnQoUGFnZU92ZXJsYXkqLCBjb25zdCBXZWJNb3VzZUV2ZW50Jik7Ci0gICAgdmlydHVh
bCB2b2lkIGRyYXdSZWN0KFBhZ2VPdmVybGF5KiwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Jiwg
Y29uc3QgV2ViQ29yZTo6SW50UmVjdCYgZGlydHlSZWN0KTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFn
ZU92ZXJsYXlEZXN0cm95ZWQoV2ViQ29yZTo6UGFnZU92ZXJsYXkmKTsKKyAgICB2aXJ0dWFsIHZv
aWQgd2lsbE1vdmVUb1BhZ2UoV2ViQ29yZTo6UGFnZU92ZXJsYXkmLCBXZWJDb3JlOjpQYWdlKik7
CisgICAgdmlydHVhbCB2b2lkIGRpZE1vdmVUb1BhZ2UoV2ViQ29yZTo6UGFnZU92ZXJsYXkmLCBX
ZWJDb3JlOjpQYWdlKik7CisgICAgdmlydHVhbCBib29sIG1vdXNlRXZlbnQoV2ViQ29yZTo6UGFn
ZU92ZXJsYXkmLCBjb25zdCBXZWJDb3JlOjpQbGF0Zm9ybU1vdXNlRXZlbnQmKTsKKyAgICB2aXJ0
dWFsIHZvaWQgZHJhd1JlY3QoV2ViQ29yZTo6UGFnZU92ZXJsYXkmLCBXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQmLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBkaXJ0eVJlY3QpOwogCiAgICAgVmVj
dG9yPFdlYkNvcmU6OkludFJlY3Q+IHJlY3RzRm9yVGV4dE1hdGNoZXMoKTsKICAgICBib29sIGdl
dEZpbmRJbmRpY2F0b3JCaXRtYXBBbmRSZWN0KFdlYkNvcmU6OkZyYW1lJiwgU2hhcmVhYmxlQml0
bWFwOjpIYW5kbGUmLCBXZWJDb3JlOjpJbnRSZWN0JiBzZWxlY3Rpb25SZWN0KTsKQEAgLTg4LDcg
Kzg3LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGRpZEhpZGVGaW5kSW5kaWNhdG9yKCk7CiAKICAg
ICBXZWJQYWdlKiBtX3dlYlBhZ2U7Ci0gICAgUGFnZU92ZXJsYXkqIG1fZmluZFBhZ2VPdmVybGF5
OworICAgIFdlYkNvcmU6OlBhZ2VPdmVybGF5KiBtX2ZpbmRQYWdlT3ZlcmxheTsKIAogICAgIC8v
IFdoZXRoZXIgdGhlIFVJIHByb2Nlc3MgaXMgc2hvd2luZyB0aGUgZmluZCBpbmRpY2F0b3IuIE5v
dGUgdGhhdCB0aGlzIGNhbiBiZSB0cnVlIGV2ZW4gaWYKICAgICAvLyB0aGUgZmluZCBpbmRpY2F0
b3IgaXNuJ3Qgc2hvd2luZywgYnV0IGl0IHdpbGwgbmV2ZXIgYmUgZmFsc2Ugd2hlbiBpdCBpcyBz
aG93aW5nLgpAQCAtOTksNyArOTgsNyBAQCBwcml2YXRlOgogICAgIGludCBtX2ZvdW5kU3RyaW5n
TWF0Y2hJbmRleDsKIAogI2lmIFBMQVRGT1JNKElPUykKLSAgICBSZWZQdHI8UGFnZU92ZXJsYXk+
IG1fZmluZEluZGljYXRvck92ZXJsYXk7CisgICAgUmVmUHRyPFdlYkNvcmU6OlBhZ2VPdmVybGF5
PiBtX2ZpbmRJbmRpY2F0b3JPdmVybGF5OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxGaW5kSW5kaWNh
dG9yT3ZlcmxheUNsaWVudElPUz4gbV9maW5kSW5kaWNhdG9yT3ZlcmxheUNsaWVudDsKICNlbmRp
ZgogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9MYXll
clRyZWVIb3N0LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVl
SG9zdC5oCmluZGV4IDNmZDQ5NTQuLjY0ZWVjNTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVIb3N0LmgKKysrIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUhvc3QuaApAQCAtNDcsNyArNDcsNiBAQCBjbGFz
cyBHcmFwaGljc0xheWVyRmFjdG9yeTsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLWNsYXNzIFBh
Z2VPdmVybGF5OwogY2xhc3MgVXBkYXRlSW5mbzsKIGNsYXNzIFdlYlBhZ2U7CiAKQEAgLTcyLDEx
ICs3MSw2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZGV2aWNlT3JQYWdlU2NhbGVGYWN0
b3JDaGFuZ2VkKCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBwYWdlQmFja2dyb3VuZFRyYW5zcGFy
ZW5jeUNoYW5nZWQoKSA9IDA7CiAKLSAgICB2aXJ0dWFsIHZvaWQgZGlkSW5zdGFsbFBhZ2VPdmVy
bGF5KFBhZ2VPdmVybGF5KikgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGRpZFVuaW5zdGFsbFBhZ2VP
dmVybGF5KFBhZ2VPdmVybGF5KikgeyB9Ci0gICAgdmlydHVhbCB2b2lkIHNldFBhZ2VPdmVybGF5
TmVlZHNEaXNwbGF5KFBhZ2VPdmVybGF5KiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpIHsgfQot
ICAgIHZpcnR1YWwgdm9pZCBzZXRQYWdlT3ZlcmxheU9wYWNpdHkoUGFnZU92ZXJsYXkqLCBmbG9h
dCkgeyB9Ci0KICAgICB2aXJ0dWFsIHZvaWQgcGF1c2VSZW5kZXJpbmcoKSB7IH0KICAgICB2aXJ0
dWFsIHZvaWQgcmVzdW1lUmVuZGVyaW5nKCkgeyB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9QYWdlT3ZlcmxheS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvUGFnZU92ZXJsYXkuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCA4ZDg4MWI2Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9QYWdlT3ZlcmxheS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyNTEgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJQYWdlT3ZlcmxheS5o
IgotCi0jaW5jbHVkZSAiV2ViUGFnZS5oIgotI2luY2x1ZGUgIldlYlByb2Nlc3MuaCIKLSNpbmNs
dWRlIDxXZWJDb3JlL0ZyYW1lVmlldy5oPgotI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250
ZXh0Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9NYWluRnJhbWUuaD4KLSNpbmNsdWRlIDxXZWJDb3Jl
L1BhZ2UuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1Njcm9sbGJhclRoZW1lLmg+Ci0jaW5jbHVkZSA8
d3RmL0N1cnJlbnRUaW1lLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1uYW1lc3Bh
Y2UgV2ViS2l0IHsKLQotc3RhdGljIGNvbnN0IGRvdWJsZSBmYWRlQW5pbWF0aW9uRHVyYXRpb24g
PSAwLjI7Ci1zdGF0aWMgY29uc3QgZG91YmxlIGZhZGVBbmltYXRpb25GcmFtZVJhdGUgPSAzMDsK
LQotUGFzc1JlZlB0cjxQYWdlT3ZlcmxheT4gUGFnZU92ZXJsYXk6OmNyZWF0ZShDbGllbnQqIGNs
aWVudCwgT3ZlcmxheVR5cGUgb3ZlcmxheVR5cGUpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBQYWdlT3ZlcmxheShjbGllbnQsIG92ZXJsYXlUeXBlKSk7Ci19Ci0KLVBhZ2VPdmVybGF5OjpQ
YWdlT3ZlcmxheShDbGllbnQqIGNsaWVudCwgT3ZlcmxheVR5cGUgb3ZlcmxheVR5cGUpCi0gICAg
OiBtX2NsaWVudChjbGllbnQpCi0gICAgLCBtX3dlYlBhZ2UobnVsbHB0cikKLSAgICAsIG1fZmFk
ZUFuaW1hdGlvblRpbWVyKFJ1bkxvb3A6Om1haW4oKSwgdGhpcywgJlBhZ2VPdmVybGF5OjpmYWRl
QW5pbWF0aW9uVGltZXJGaXJlZCkKLSAgICAsIG1fZmFkZUFuaW1hdGlvblN0YXJ0VGltZSgwKQot
ICAgICwgbV9mYWRlQW5pbWF0aW9uRHVyYXRpb24oZmFkZUFuaW1hdGlvbkR1cmF0aW9uKQotICAg
ICwgbV9mYWRlQW5pbWF0aW9uVHlwZShOb0FuaW1hdGlvbikKLSAgICAsIG1fZnJhY3Rpb25GYWRl
ZEluKDEpCi0gICAgLCBtX292ZXJsYXlUeXBlKG92ZXJsYXlUeXBlKQotICAgICwgbV9iYWNrZ3Jv
dW5kQ29sb3IoQ29sb3I6OnRyYW5zcGFyZW50KQotewotfQotCi1QYWdlT3ZlcmxheTo6flBhZ2VP
dmVybGF5KCkKLXsKLX0KLQotSW50UmVjdCBQYWdlT3ZlcmxheTo6Ym91bmRzKCkgY29uc3QKLXsK
LSAgICBpZiAoIW1fb3ZlcnJpZGVGcmFtZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBJbnRS
ZWN0KEludFBvaW50KCksIG1fb3ZlcnJpZGVGcmFtZS5zaXplKCkpOwotCi0gICAgRnJhbWVWaWV3
KiBmcmFtZVZpZXcgPSBtX3dlYlBhZ2UtPm1haW5GcmFtZVZpZXcoKTsKLQotICAgIHN3aXRjaCAo
bV9vdmVybGF5VHlwZSkgewotICAgIGNhc2UgT3ZlcmxheVR5cGU6OlZpZXc6IHsKLSAgICAgICAg
aW50IHdpZHRoID0gZnJhbWVWaWV3LT53aWR0aCgpOwotICAgICAgICBpbnQgaGVpZ2h0ID0gZnJh
bWVWaWV3LT5oZWlnaHQoKTsKLQotICAgICAgICBpZiAoIVNjcm9sbGJhclRoZW1lOjp0aGVtZSgp
LT51c2VzT3ZlcmxheVNjcm9sbGJhcnMoKSkgewotICAgICAgICAgICAgaWYgKGZyYW1lVmlldy0+
dmVydGljYWxTY3JvbGxiYXIoKSkKLSAgICAgICAgICAgICAgICB3aWR0aCAtPSBmcmFtZVZpZXct
PnZlcnRpY2FsU2Nyb2xsYmFyKCktPndpZHRoKCk7Ci0gICAgICAgICAgICBpZiAoZnJhbWVWaWV3
LT5ob3Jpem9udGFsU2Nyb2xsYmFyKCkpCi0gICAgICAgICAgICAgICAgaGVpZ2h0IC09IGZyYW1l
Vmlldy0+aG9yaXpvbnRhbFNjcm9sbGJhcigpLT5oZWlnaHQoKTsKLSAgICAgICAgfQotICAgICAg
ICByZXR1cm4gSW50UmVjdCgwLCAwLCB3aWR0aCwgaGVpZ2h0KTsKLSAgICB9Ci0gICAgY2FzZSBP
dmVybGF5VHlwZTo6RG9jdW1lbnQ6Ci0gICAgICAgIHJldHVybiBJbnRSZWN0KEludFBvaW50KCks
IGZyYW1lVmlldy0+Y29udGVudHNTaXplKCkpOwotICAgIH07Ci0KLSAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKLSAgICByZXR1cm4gSW50UmVjdChJbnRQb2ludCgpLCBmcmFtZVZpZXctPmNvbnRl
bnRzU2l6ZSgpKTsKLX0KLQotSW50UmVjdCBQYWdlT3ZlcmxheTo6ZnJhbWUoKSBjb25zdAotewot
ICAgIGlmICghbV9vdmVycmlkZUZyYW1lLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIG1fb3Zl
cnJpZGVGcmFtZTsKLQotICAgIHJldHVybiBib3VuZHMoKTsKLX0KLQotdm9pZCBQYWdlT3Zlcmxh
eTo6c2V0RnJhbWUoSW50UmVjdCBmcmFtZSkKLXsKLSAgICBpZiAobV9vdmVycmlkZUZyYW1lID09
IGZyYW1lKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX292ZXJyaWRlRnJhbWUgPSBmcmFtZTsK
LQotICAgIGlmIChtX3dlYlBhZ2UpCi0gICAgICAgIG1fd2ViUGFnZS0+cGFnZU92ZXJsYXlDb250
cm9sbGVyKCkuZGlkQ2hhbmdlT3ZlcmxheUZyYW1lKCp0aGlzKTsKLX0KLQotdm9pZCBQYWdlT3Zl
cmxheTo6c2V0QmFja2dyb3VuZENvbG9yKFJHQkEzMiBiYWNrZ3JvdW5kQ29sb3IpCi17Ci0gICAg
aWYgKG1fYmFja2dyb3VuZENvbG9yID09IGJhY2tncm91bmRDb2xvcikKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgbV9iYWNrZ3JvdW5kQ29sb3IgPSBiYWNrZ3JvdW5kQ29sb3I7Ci0KLSAgICBpZiAo
bV93ZWJQYWdlKQotICAgICAgICBtX3dlYlBhZ2UtPnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLmRp
ZENoYW5nZU92ZXJsYXlCYWNrZ3JvdW5kQ29sb3IoKnRoaXMpOwotfQotCi12b2lkIFBhZ2VPdmVy
bGF5OjpzZXRQYWdlKFdlYlBhZ2UqIHdlYlBhZ2UpCi17Ci0gICAgbV9jbGllbnQtPndpbGxNb3Zl
VG9XZWJQYWdlKHRoaXMsIHdlYlBhZ2UpOwotICAgIG1fd2ViUGFnZSA9IHdlYlBhZ2U7Ci0gICAg
bV9jbGllbnQtPmRpZE1vdmVUb1dlYlBhZ2UodGhpcywgd2ViUGFnZSk7Ci0KLSAgICBtX2ZhZGVB
bmltYXRpb25UaW1lci5zdG9wKCk7Ci19Ci0KLXZvaWQgUGFnZU92ZXJsYXk6OnNldE5lZWRzRGlz
cGxheShjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpCi17Ci0gICAgaWYgKCFtX3dlYlBhZ2UpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIG1fd2ViUGFnZS0+cGFnZU92ZXJsYXlDb250cm9sbGVyKCku
c2V0UGFnZU92ZXJsYXlPcGFjaXR5KCp0aGlzLCBtX2ZyYWN0aW9uRmFkZWRJbik7Ci0gICAgbV93
ZWJQYWdlLT5wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKS5zZXRQYWdlT3ZlcmxheU5lZWRzRGlzcGxh
eSgqdGhpcywgZGlydHlSZWN0KTsKLX0KLQotdm9pZCBQYWdlT3ZlcmxheTo6c2V0TmVlZHNEaXNw
bGF5KCkKLXsKLSAgICBzZXROZWVkc0Rpc3BsYXkoYm91bmRzKCkpOwotfQotCi12b2lkIFBhZ2VP
dmVybGF5OjpkcmF3UmVjdChHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgY29uc3Qg
SW50UmVjdCYgZGlydHlSZWN0KQotewotICAgIC8vIElmIHRoZSBkaXJ0eSByZWN0IGlzIG91dHNp
ZGUgdGhlIGJvdW5kcywgaWdub3JlIGl0LgotICAgIEludFJlY3QgcGFpbnRSZWN0ID0gaW50ZXJz
ZWN0aW9uKGRpcnR5UmVjdCwgYm91bmRzKCkpOwotICAgIGlmIChwYWludFJlY3QuaXNFbXB0eSgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRl
U2F2ZXIoZ3JhcGhpY3NDb250ZXh0KTsKLSAgICBtX2NsaWVudC0+ZHJhd1JlY3QodGhpcywgZ3Jh
cGhpY3NDb250ZXh0LCBwYWludFJlY3QpOwotfQotICAgIAotYm9vbCBQYWdlT3ZlcmxheTo6bW91
c2VFdmVudChjb25zdCBXZWJNb3VzZUV2ZW50JiBtb3VzZUV2ZW50KQotewotICAgIEludFBvaW50
IG1vdXNlUG9zaXRpb25Jbk92ZXJsYXlDb29yZGluYXRlcyhtb3VzZUV2ZW50LnBvc2l0aW9uKCkp
OwotCi0gICAgaWYgKG1fb3ZlcmxheVR5cGUgPT0gUGFnZU92ZXJsYXk6Ok92ZXJsYXlUeXBlOjpE
b2N1bWVudCkKLSAgICAgICAgbW91c2VQb3NpdGlvbkluT3ZlcmxheUNvb3JkaW5hdGVzID0gbV93
ZWJQYWdlLT5jb3JlUGFnZSgpLT5tYWluRnJhbWUoKS52aWV3KCktPnJvb3RWaWV3VG9Db250ZW50
cyhtb3VzZVBvc2l0aW9uSW5PdmVybGF5Q29vcmRpbmF0ZXMpOwotCi0gICAgLy8gSWdub3JlIGV2
ZW50cyBvdXRzaWRlIHRoZSBib3VuZHMuCi0gICAgaWYgKCFib3VuZHMoKS5jb250YWlucyhtb3Vz
ZVBvc2l0aW9uSW5PdmVybGF5Q29vcmRpbmF0ZXMpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICByZXR1cm4gbV9jbGllbnQtPm1vdXNlRXZlbnQodGhpcywgbW91c2VFdmVudCk7Ci19Ci0K
LXZvaWQgUGFnZU92ZXJsYXk6OmRpZFNjcm9sbEZyYW1lKEZyYW1lKiBmcmFtZSkKLXsKLSAgICBt
X2NsaWVudC0+ZGlkU2Nyb2xsRnJhbWUodGhpcywgZnJhbWUpOwotfQotCi1XS1R5cGVSZWYgUGFn
ZU92ZXJsYXk6OmNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWUoV0tTdHJpbmdSZWYgYXR0
cmlidXRlLCBXS1R5cGVSZWYgcGFyYW1ldGVyKQotewotICAgIHJldHVybiBtX2NsaWVudC0+Y29w
eUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZSh0aGlzLCBhdHRyaWJ1dGUsIHBhcmFtZXRlcik7
Ci19Ci0KLVdLQXJyYXlSZWYgUGFnZU92ZXJsYXk6OmNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRl
TmFtZXMoYm9vbCBwYXJhbWV0ZXJpemVkTmFtZXMpCi17Ci0gICAgcmV0dXJuIG1fY2xpZW50LT5j
b3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZU5hbWVzKHRoaXMsIHBhcmFtZXRlcml6ZWROYW1lcyk7
Ci19Ci0KLXZvaWQgUGFnZU92ZXJsYXk6OnN0YXJ0RmFkZUluQW5pbWF0aW9uKCkKLXsKLSAgICBt
X2ZyYWN0aW9uRmFkZWRJbiA9IDA7Ci0gICAgbV9mYWRlQW5pbWF0aW9uVHlwZSA9IEZhZGVJbkFu
aW1hdGlvbjsKLQotICAgIHN0YXJ0RmFkZUFuaW1hdGlvbigpOwotfQotCi12b2lkIFBhZ2VPdmVy
bGF5OjpzdGFydEZhZGVPdXRBbmltYXRpb24oKQotewotICAgIG1fZnJhY3Rpb25GYWRlZEluID0g
MTsKLSAgICBtX2ZhZGVBbmltYXRpb25UeXBlID0gRmFkZU91dEFuaW1hdGlvbjsKLQotICAgIHN0
YXJ0RmFkZUFuaW1hdGlvbigpOwotfQotCi12b2lkIFBhZ2VPdmVybGF5OjpzdG9wRmFkZU91dEFu
aW1hdGlvbigpCi17Ci0gICAgbV9mcmFjdGlvbkZhZGVkSW4gPSAxLjA7Ci0gICAgbV9mYWRlQW5p
bWF0aW9uVGltZXIuc3RvcCgpOwotfQotCi12b2lkIFBhZ2VPdmVybGF5OjpzdGFydEZhZGVBbmlt
YXRpb24oKQotewotICAgIG1fZmFkZUFuaW1hdGlvblN0YXJ0VGltZSA9IGN1cnJlbnRUaW1lKCk7
Ci0gICAgbV9mYWRlQW5pbWF0aW9uVGltZXIuc3RhcnRSZXBlYXRpbmcoMSAvIGZhZGVBbmltYXRp
b25GcmFtZVJhdGUpOwotfQotCi12b2lkIFBhZ2VPdmVybGF5OjpmYWRlQW5pbWF0aW9uVGltZXJG
aXJlZCgpCi17Ci0gICAgZmxvYXQgYW5pbWF0aW9uUHJvZ3Jlc3MgPSAoY3VycmVudFRpbWUoKSAt
IG1fZmFkZUFuaW1hdGlvblN0YXJ0VGltZSkgLyBtX2ZhZGVBbmltYXRpb25EdXJhdGlvbjsKLQot
ICAgIGlmIChhbmltYXRpb25Qcm9ncmVzcyA+PSAxLjApCi0gICAgICAgIGFuaW1hdGlvblByb2dy
ZXNzID0gMS4wOwotCi0gICAgZG91YmxlIHNpbmUgPSBzaW4ocGlPdmVyVHdvRmxvYXQgKiBhbmlt
YXRpb25Qcm9ncmVzcyk7Ci0gICAgZmxvYXQgZmFkZUFuaW1hdGlvblZhbHVlID0gc2luZSAqIHNp
bmU7Ci0KLSAgICBtX2ZyYWN0aW9uRmFkZWRJbiA9IChtX2ZhZGVBbmltYXRpb25UeXBlID09IEZh
ZGVJbkFuaW1hdGlvbikgPyBmYWRlQW5pbWF0aW9uVmFsdWUgOiAxIC0gZmFkZUFuaW1hdGlvblZh
bHVlOwotICAgIG1fd2ViUGFnZS0+cGFnZU92ZXJsYXlDb250cm9sbGVyKCkuc2V0UGFnZU92ZXJs
YXlPcGFjaXR5KCp0aGlzLCBtX2ZyYWN0aW9uRmFkZWRJbik7Ci0KLSAgICBpZiAoYW5pbWF0aW9u
UHJvZ3Jlc3MgPT0gMS4wKSB7Ci0gICAgICAgIG1fZmFkZUFuaW1hdGlvblRpbWVyLnN0b3AoKTsK
LQotICAgICAgICBib29sIHdhc0ZhZGluZ091dCA9IG1fZmFkZUFuaW1hdGlvblR5cGUgPT0gRmFk
ZU91dEFuaW1hdGlvbjsKLSAgICAgICAgbV9mYWRlQW5pbWF0aW9uVHlwZSA9IE5vQW5pbWF0aW9u
OwotCi0gICAgICAgIC8vIElmIHRoaXMgd2FzIGEgZmFkZSBvdXQsIGdvIGFoZWFkIGFuZCB1bmlu
c3RhbGwgdGhlIHBhZ2Ugb3ZlcmxheS4KLSAgICAgICAgaWYgKHdhc0ZhZGluZ091dCkKLSAgICAg
ICAgICAgIG1fd2ViUGFnZS0+dW5pbnN0YWxsUGFnZU92ZXJsYXkodGhpcywgUGFnZU92ZXJsYXk6
OkZhZGVNb2RlOjpEb05vdEZhZGUpOwotICAgIH0KLX0KLQotdm9pZCBQYWdlT3ZlcmxheTo6Y2xl
YXIoKQotewotICAgIG1fd2ViUGFnZS0+cGFnZU92ZXJsYXlDb250cm9sbGVyKCkuY2xlYXJQYWdl
T3ZlcmxheSgqdGhpcyk7Ci19Ci0KLVdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqIFBhZ2VPdmVybGF5
OjpsYXllcigpCi17Ci0gICAgcmV0dXJuIG1fd2ViUGFnZS0+cGFnZU92ZXJsYXlDb250cm9sbGVy
KCkubGF5ZXJGb3JPdmVybGF5KCp0aGlzKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvUGFnZU92ZXJsYXku
aCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9QYWdlT3ZlcmxheS5oCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMjI1ZjBkLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9QYWdlT3ZlcmxheS5oCisrKyAvZGV2L251bGwKQEAg
LTEsMTM3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFBhZ2VPdmVybGF5X2gKLSNkZWZp
bmUgUGFnZU92ZXJsYXlfaAotCi0jaW5jbHVkZSAiQVBJT2JqZWN0LmgiCi0jaW5jbHVkZSAiV0tC
YXNlLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9Db2xvci5oPgotI2luY2x1ZGUgPFdlYkNvcmUvSW50
UmVjdC5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1J1bkxv
b3AuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotY2xhc3MgRnJhbWU7Ci1jbGFzcyBHcmFwaGlj
c0NvbnRleHQ7Ci1jbGFzcyBHcmFwaGljc0xheWVyOwotfQotCi1uYW1lc3BhY2UgV2ViS2l0IHsK
LQotY2xhc3MgV2ViRnJhbWU7Ci1jbGFzcyBXZWJNb3VzZUV2ZW50OwotY2xhc3MgV2ViUGFnZTsK
LQotY2xhc3MgUGFnZU92ZXJsYXkgOiBwdWJsaWMgQVBJOjpPYmplY3RJbXBsPEFQSTo6T2JqZWN0
OjpUeXBlOjpCdW5kbGVQYWdlT3ZlcmxheT4gewotcHVibGljOgotICAgIGNsYXNzIENsaWVudCB7
Ci0gICAgcHJvdGVjdGVkOgotICAgICAgICB2aXJ0dWFsIH5DbGllbnQoKSB7IH0KLSAgICAKLSAg
ICBwdWJsaWM6Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBwYWdlT3ZlcmxheURlc3Ryb3llZChQYWdl
T3ZlcmxheSopID0gMDsKLSAgICAgICAgdmlydHVhbCB2b2lkIHdpbGxNb3ZlVG9XZWJQYWdlKFBh
Z2VPdmVybGF5KiwgV2ViUGFnZSopID0gMDsKLSAgICAgICAgdmlydHVhbCB2b2lkIGRpZE1vdmVU
b1dlYlBhZ2UoUGFnZU92ZXJsYXkqLCBXZWJQYWdlKikgPSAwOwotICAgICAgICB2aXJ0dWFsIHZv
aWQgZHJhd1JlY3QoUGFnZU92ZXJsYXkqLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmLCBjb25z
dCBXZWJDb3JlOjpJbnRSZWN0JiBkaXJ0eVJlY3QpID0gMDsKLSAgICAgICAgdmlydHVhbCBib29s
IG1vdXNlRXZlbnQoUGFnZU92ZXJsYXkqLCBjb25zdCBXZWJNb3VzZUV2ZW50JikgPSAwOwotICAg
ICAgICB2aXJ0dWFsIHZvaWQgZGlkU2Nyb2xsRnJhbWUoUGFnZU92ZXJsYXkqLCBXZWJDb3JlOjpG
cmFtZSopIHsgfQotCi0gICAgICAgIHZpcnR1YWwgV0tUeXBlUmVmIGNvcHlBY2Nlc3NpYmlsaXR5
QXR0cmlidXRlVmFsdWUoUGFnZU92ZXJsYXkqLCBXS1N0cmluZ1JlZiAvKiBhdHRyaWJ1dGUgKi8s
IFdLVHlwZVJlZiAvKiBwYXJhbWV0ZXIgKi8pIHsgcmV0dXJuIDA7IH0KLSAgICAgICAgdmlydHVh
bCBXS0FycmF5UmVmIGNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlTmFtZXMoUGFnZU92ZXJsYXkq
LCBib29sIC8qIHBhcmFtZXRlcml6ZWROYW1lcyAqLykgeyByZXR1cm4gMDsgfQotICAgIH07Ci0K
LSAgICBlbnVtIGNsYXNzIE92ZXJsYXlUeXBlIHsKLSAgICAgICAgVmlldywgLy8gRml4ZWQgdG8g
dGhlIHZpZXcgc2l6ZTsgZG9lcyBub3Qgc2NhbGUgb3Igc2Nyb2xsIHdpdGggdGhlIGRvY3VtZW50
LCByZXBhaW50cyBvbiBzY3JvbGwuCi0gICAgICAgIERvY3VtZW50LCAvLyBTY2FsZXMgYW5kIHNj
cm9sbHMgd2l0aCB0aGUgZG9jdW1lbnQuCi0gICAgfTsKLQotICAgIHN0YXRpYyBQYXNzUmVmUHRy
PFBhZ2VPdmVybGF5PiBjcmVhdGUoQ2xpZW50KiwgT3ZlcmxheVR5cGUgPSBPdmVybGF5VHlwZTo6
Vmlldyk7Ci0gICAgdmlydHVhbCB+UGFnZU92ZXJsYXkoKTsKLQotICAgIHZvaWQgc2V0UGFnZShX
ZWJQYWdlKik7Ci0gICAgdm9pZCBzZXROZWVkc0Rpc3BsYXkoY29uc3QgV2ViQ29yZTo6SW50UmVj
dCYgZGlydHlSZWN0KTsKLSAgICB2b2lkIHNldE5lZWRzRGlzcGxheSgpOwotCi0gICAgdm9pZCBk
cmF3UmVjdChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0
JiBkaXJ0eVJlY3QpOwotICAgIGJvb2wgbW91c2VFdmVudChjb25zdCBXZWJNb3VzZUV2ZW50Jik7
Ci0gICAgdm9pZCBkaWRTY3JvbGxGcmFtZShXZWJDb3JlOjpGcmFtZSopOwotCi0gICAgV0tUeXBl
UmVmIGNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWUoV0tTdHJpbmdSZWYgYXR0cmlidXRl
LCBXS1R5cGVSZWYgcGFyYW1ldGVyKTsKLSAgICBXS0FycmF5UmVmIGNvcHlBY2Nlc3NpYmlsaXR5
QXR0cmlidXRlTmFtZXMoYm9vbCBwYXJhbWV0ZXJpemVkTmFtZXMpOwotICAgIAotICAgIHZvaWQg
c3RhcnRGYWRlSW5BbmltYXRpb24oKTsKLSAgICB2b2lkIHN0YXJ0RmFkZU91dEFuaW1hdGlvbigp
OwotICAgIHZvaWQgc3RvcEZhZGVPdXRBbmltYXRpb24oKTsKLQotICAgIHZvaWQgY2xlYXIoKTsK
LQotICAgIENsaWVudCogY2xpZW50KCkgY29uc3QgeyByZXR1cm4gbV9jbGllbnQ7IH0KLQotICAg
IGVudW0gY2xhc3MgRmFkZU1vZGUgeyBEb05vdEZhZGUsIEZhZGUgfTsKLQotICAgIE92ZXJsYXlU
eXBlIG92ZXJsYXlUeXBlKCkgeyByZXR1cm4gbV9vdmVybGF5VHlwZTsgfQotCi0gICAgV2ViQ29y
ZTo6SW50UmVjdCBib3VuZHMoKSBjb25zdDsKLSAgICBXZWJDb3JlOjpJbnRSZWN0IGZyYW1lKCkg
Y29uc3Q7Ci0gICAgdm9pZCBzZXRGcmFtZShXZWJDb3JlOjpJbnRSZWN0KTsKLQotICAgIFdlYkNv
cmU6OlJHQkEzMiBiYWNrZ3JvdW5kQ29sb3IoKSBjb25zdCB7IHJldHVybiBtX2JhY2tncm91bmRD
b2xvcjsgfQotICAgIHZvaWQgc2V0QmFja2dyb3VuZENvbG9yKFdlYkNvcmU6OlJHQkEzMik7Ci0K
LSAgICBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiBsYXllcigpOwotICAgIAotcHJvdGVjdGVkOgot
ICAgIGV4cGxpY2l0IFBhZ2VPdmVybGF5KENsaWVudCosIE92ZXJsYXlUeXBlKTsKLQotcHJpdmF0
ZToKLSAgICB2b2lkIHN0YXJ0RmFkZUFuaW1hdGlvbigpOwotICAgIHZvaWQgZmFkZUFuaW1hdGlv
blRpbWVyRmlyZWQoKTsKLQotICAgIENsaWVudCogbV9jbGllbnQ7Ci0gICAgV2ViUGFnZSogbV93
ZWJQYWdlOwotCi0gICAgUnVuTG9vcDo6VGltZXI8UGFnZU92ZXJsYXk+IG1fZmFkZUFuaW1hdGlv
blRpbWVyOwotICAgIGRvdWJsZSBtX2ZhZGVBbmltYXRpb25TdGFydFRpbWU7Ci0gICAgZG91Ymxl
IG1fZmFkZUFuaW1hdGlvbkR1cmF0aW9uOwotCi0gICAgZW51bSBGYWRlQW5pbWF0aW9uVHlwZSB7
Ci0gICAgICAgIE5vQW5pbWF0aW9uLAotICAgICAgICBGYWRlSW5BbmltYXRpb24sCi0gICAgICAg
IEZhZGVPdXRBbmltYXRpb24sCi0gICAgfTsKLQotICAgIEZhZGVBbmltYXRpb25UeXBlIG1fZmFk
ZUFuaW1hdGlvblR5cGU7Ci0gICAgZmxvYXQgbV9mcmFjdGlvbkZhZGVkSW47Ci0KLSAgICBPdmVy
bGF5VHlwZSBtX292ZXJsYXlUeXBlOwotICAgIFdlYkNvcmU6OkludFJlY3QgbV9vdmVycmlkZUZy
YW1lOwotCi0gICAgV2ViQ29yZTo6UkdCQTMyIG1fYmFja2dyb3VuZENvbG9yOwotfTsKLQotfSAv
LyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBQYWdlT3ZlcmxheV9oCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvUGFnZU92ZXJsYXlDb250cm9sbGVy
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9QYWdlT3ZlcmxheUNvbnRy
b2xsZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NjQ1N2M1Li4wMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9QYWdlT3ZlcmxheUNvbnRy
b2xsZXIuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMzE0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUGFnZU92ZXJsYXlDb250cm9sbGVyLmgiCi0K
LSNpbmNsdWRlICJEcmF3aW5nQXJlYS5oIgotI2luY2x1ZGUgIlBhZ2VPdmVybGF5LmgiCi0jaW5j
bHVkZSAiV2ViUGFnZS5oIgotI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWUuaD4KLSNpbmNsdWRlIDxX
ZWJDb3JlL0ZyYW1lVmlldy5oPgotI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+
Ci0jaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0xheWVyLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9N
YWluRnJhbWUuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmg+Ci0j
aW5jbHVkZSA8V2ViQ29yZS9TZXR0aW5ncy5oPgotI2luY2x1ZGUgPFdlYkNvcmUvVGlsZWRCYWNr
aW5nLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1uYW1lc3BhY2UgV2ViS2l0IHsK
LQotUGFnZU92ZXJsYXlDb250cm9sbGVyOjpQYWdlT3ZlcmxheUNvbnRyb2xsZXIoV2ViUGFnZSYg
d2ViUGFnZSkKLSAgICA6IG1fd2ViUGFnZSh3ZWJQYWdlKQotewotfQotCi12b2lkIFBhZ2VPdmVy
bGF5Q29udHJvbGxlcjo6aW5pdGlhbGl6ZSgpCi17Ci0gICAgQVNTRVJUKCFtX2RvY3VtZW50T3Zl
cmxheVJvb3RMYXllcik7Ci0gICAgQVNTRVJUKCFtX3ZpZXdPdmVybGF5Um9vdExheWVyKTsKLQot
ICAgIG1fZG9jdW1lbnRPdmVybGF5Um9vdExheWVyID0gR3JhcGhpY3NMYXllcjo6Y3JlYXRlKG1f
d2ViUGFnZS5kcmF3aW5nQXJlYSgpLT5ncmFwaGljc0xheWVyRmFjdG9yeSgpLCAqdGhpcyk7Ci0g
ICAgbV92aWV3T3ZlcmxheVJvb3RMYXllciA9IEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZShtX3dlYlBh
Z2UuZHJhd2luZ0FyZWEoKS0+Z3JhcGhpY3NMYXllckZhY3RvcnkoKSwgKnRoaXMpOwotI2lmbmRl
ZiBOREVCVUcKLSAgICBtX2RvY3VtZW50T3ZlcmxheVJvb3RMYXllci0+c2V0TmFtZSgiUGFnZSBP
dmVybGF5IGNvbnRhaW5lciAoZG9jdW1lbnQtcmVsYXRpdmUpIik7Ci0gICAgbV92aWV3T3Zlcmxh
eVJvb3RMYXllci0+c2V0TmFtZSgiUGFnZSBPdmVybGF5IGNvbnRhaW5lciAodmlldy1yZWxhdGl2
ZSkiKTsKLSNlbmRpZgotfQotCi1zdGF0aWMgdm9pZCB1cGRhdGVPdmVybGF5R2VvbWV0cnkoUGFn
ZU92ZXJsYXkmIG92ZXJsYXksIEdyYXBoaWNzTGF5ZXImIGdyYXBoaWNzTGF5ZXIpCi17Ci0gICAg
SW50UmVjdCBvdmVybGF5RnJhbWUgPSBvdmVybGF5LmZyYW1lKCk7Ci0KLSAgICBpZiAob3Zlcmxh
eUZyYW1lLmxvY2F0aW9uKCkgPT0gZ3JhcGhpY3NMYXllci5wb3NpdGlvbigpICYmIG92ZXJsYXlG
cmFtZS5zaXplKCkgPT0gZ3JhcGhpY3NMYXllci5zaXplKCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGdyYXBoaWNzTGF5ZXIuc2V0UG9zaXRpb24ob3ZlcmxheUZyYW1lLmxvY2F0aW9uKCkpOwot
ICAgIGdyYXBoaWNzTGF5ZXIuc2V0U2l6ZShvdmVybGF5RnJhbWUuc2l6ZSgpKTsKLX0KLQotdm9p
ZCBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6Omluc3RhbGxQYWdlT3ZlcmxheShQYXNzUmVmUHRyPFBh
Z2VPdmVybGF5PiBwYWdlT3ZlcmxheSwgUGFnZU92ZXJsYXk6OkZhZGVNb2RlIGZhZGVNb2RlKQot
ewotICAgIEFTU0VSVChtX2RvY3VtZW50T3ZlcmxheVJvb3RMYXllcik7Ci0gICAgQVNTRVJUKG1f
dmlld092ZXJsYXlSb290TGF5ZXIpOwotCi0gICAgUmVmUHRyPFBhZ2VPdmVybGF5PiBvdmVybGF5
ID0gcGFnZU92ZXJsYXk7Ci0KLSAgICBpZiAobV9wYWdlT3ZlcmxheXMuY29udGFpbnMob3Zlcmxh
eSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fcGFnZU92ZXJsYXlzLmFwcGVuZChvdmVybGF5
KTsKLSAgICBvdmVybGF5LT5zZXRQYWdlKCZtX3dlYlBhZ2UpOwotCi0gICAgaWYgKGZhZGVNb2Rl
ID09IFBhZ2VPdmVybGF5OjpGYWRlTW9kZTo6RmFkZSkKLSAgICAgICAgb3ZlcmxheS0+c3RhcnRG
YWRlSW5BbmltYXRpb24oKTsKLQotICAgIHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0xheWVyPiBs
YXllciA9IEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZShtX3dlYlBhZ2UuZHJhd2luZ0FyZWEoKS0+Z3Jh
cGhpY3NMYXllckZhY3RvcnkoKSwgKnRoaXMpOwotICAgIGxheWVyLT5zZXRBbmNob3JQb2ludChG
bG9hdFBvaW50M0QoKSk7Ci0gICAgbGF5ZXItPnNldEJhY2tncm91bmRDb2xvcihvdmVybGF5LT5i
YWNrZ3JvdW5kQ29sb3IoKSk7Ci0gICAgdXBkYXRlT3ZlcmxheUdlb21ldHJ5KCpvdmVybGF5LCAq
bGF5ZXIpOwotI2lmbmRlZiBOREVCVUcKLSAgICBsYXllci0+c2V0TmFtZSgiUGFnZSBPdmVybGF5
IGNvbnRlbnQiKTsKLSNlbmRpZgotCi0gICAgdXBkYXRlU2V0dGluZ3NGb3JMYXllcigqbGF5ZXIp
OwotCi0gICAgc3dpdGNoIChvdmVybGF5LT5vdmVybGF5VHlwZSgpKSB7Ci0gICAgY2FzZSBQYWdl
T3ZlcmxheTo6T3ZlcmxheVR5cGU6OlZpZXc6Ci0gICAgICAgIG1fdmlld092ZXJsYXlSb290TGF5
ZXItPmFkZENoaWxkKGxheWVyLmdldCgpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQYWdl
T3ZlcmxheTo6T3ZlcmxheVR5cGU6OkRvY3VtZW50OgotICAgICAgICBtX2RvY3VtZW50T3Zlcmxh
eVJvb3RMYXllci0+YWRkQ2hpbGQobGF5ZXIuZ2V0KCkpOwotICAgICAgICBicmVhazsKLSAgICB9
Ci0KLSAgICBtX292ZXJsYXlHcmFwaGljc0xheWVycy5zZXQob3ZlcmxheS5nZXQoKSwgV1RGOjpt
b3ZlKGxheWVyKSk7Ci0KLSAgICB1cGRhdGVGb3JjZVN5bmNocm9ub3VzU2Nyb2xsTGF5ZXJQb3Np
dGlvblVwZGF0ZXMoKTsKLX0KLQotdm9pZCBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6OnVuaW5zdGFs
bFBhZ2VPdmVybGF5KFBhZ2VPdmVybGF5KiBvdmVybGF5LCBQYWdlT3ZlcmxheTo6RmFkZU1vZGUg
ZmFkZU1vZGUpCi17Ci0gICAgaWYgKGZhZGVNb2RlID09IFBhZ2VPdmVybGF5OjpGYWRlTW9kZTo6
RmFkZSkgewotICAgICAgICBvdmVybGF5LT5zdGFydEZhZGVPdXRBbmltYXRpb24oKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIG92ZXJsYXktPnNldFBhZ2UobnVsbHB0cik7Ci0KLSAg
ICBtX292ZXJsYXlHcmFwaGljc0xheWVycy50YWtlKG92ZXJsYXkpLT5yZW1vdmVGcm9tUGFyZW50
KCk7Ci0KLSAgICBzaXplX3Qgb3ZlcmxheUluZGV4ID0gbV9wYWdlT3ZlcmxheXMuZmluZChvdmVy
bGF5KTsKLSAgICBBU1NFUlQob3ZlcmxheUluZGV4ICE9IG5vdEZvdW5kKTsKLSAgICBtX3BhZ2VP
dmVybGF5cy5yZW1vdmUob3ZlcmxheUluZGV4KTsKLQotICAgIHVwZGF0ZUZvcmNlU3luY2hyb25v
dXNTY3JvbGxMYXllclBvc2l0aW9uVXBkYXRlcygpOwotfQotCi12b2lkIFBhZ2VPdmVybGF5Q29u
dHJvbGxlcjo6dXBkYXRlRm9yY2VTeW5jaHJvbm91c1Njcm9sbExheWVyUG9zaXRpb25VcGRhdGVz
KCkKLXsKLSNpZiBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKQotICAgIGJvb2wgZm9yY2VTeW5jaHJv
bm91c1Njcm9sbExheWVyUG9zaXRpb25VcGRhdGVzID0gZmFsc2U7Ci0KLSAgICBmb3IgKGF1dG8m
IG92ZXJsYXkgOiBtX3BhZ2VPdmVybGF5cykgewotICAgICAgICBpZiAob3ZlcmxheS0+b3Zlcmxh
eVR5cGUoKSA9PSBQYWdlT3ZlcmxheTo6T3ZlcmxheVR5cGU6OlZpZXcpCi0gICAgICAgICAgICBm
b3JjZVN5bmNocm9ub3VzU2Nyb2xsTGF5ZXJQb3NpdGlvblVwZGF0ZXMgPSB0cnVlOwotICAgIH0K
LQotICAgIGlmIChQYWdlKiBwYWdlID0gbV93ZWJQYWdlLmNvcmVQYWdlKCkpIHsKLSAgICAgICAg
aWYgKFNjcm9sbGluZ0Nvb3JkaW5hdG9yKiBzY3JvbGxpbmdDb29yZGluYXRvciA9IHBhZ2UtPnNj
cm9sbGluZ0Nvb3JkaW5hdG9yKCkpCi0gICAgICAgICAgICBzY3JvbGxpbmdDb29yZGluYXRvci0+
c2V0Rm9yY2VTeW5jaHJvbm91c1Njcm9sbExheWVyUG9zaXRpb25VcGRhdGVzKGZvcmNlU3luY2hy
b25vdXNTY3JvbGxMYXllclBvc2l0aW9uVXBkYXRlcyk7Ci0gICAgfQotI2VuZGlmCi19Ci0KLXZv
aWQgUGFnZU92ZXJsYXlDb250cm9sbGVyOjpzZXRQYWdlT3ZlcmxheU5lZWRzRGlzcGxheShQYWdl
T3ZlcmxheSYgb3ZlcmxheSwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgZGlydHlSZWN0KQotewot
ICAgIEFTU0VSVChtX3BhZ2VPdmVybGF5cy5jb250YWlucygmb3ZlcmxheSkpOwotICAgIEdyYXBo
aWNzTGF5ZXImIGdyYXBoaWNzTGF5ZXIgPSAqbV9vdmVybGF5R3JhcGhpY3NMYXllcnMuZ2V0KCZv
dmVybGF5KTsKLQotICAgIGlmICghZ3JhcGhpY3NMYXllci5kcmF3c0NvbnRlbnQoKSkgewotICAg
ICAgICBncmFwaGljc0xheWVyLnNldERyYXdzQ29udGVudCh0cnVlKTsKLSAgICAgICAgdXBkYXRl
T3ZlcmxheUdlb21ldHJ5KG92ZXJsYXksIGdyYXBoaWNzTGF5ZXIpOwotICAgIH0KLQotICAgIGdy
YXBoaWNzTGF5ZXIuc2V0TmVlZHNEaXNwbGF5SW5SZWN0KGRpcnR5UmVjdCk7Ci19Ci0KLXZvaWQg
UGFnZU92ZXJsYXlDb250cm9sbGVyOjpzZXRQYWdlT3ZlcmxheU9wYWNpdHkoUGFnZU92ZXJsYXkm
IG92ZXJsYXksIGZsb2F0IG9wYWNpdHkpCi17Ci0gICAgQVNTRVJUKG1fcGFnZU92ZXJsYXlzLmNv
bnRhaW5zKCZvdmVybGF5KSk7Ci0gICAgbV9vdmVybGF5R3JhcGhpY3NMYXllcnMuZ2V0KCZvdmVy
bGF5KS0+c2V0T3BhY2l0eShvcGFjaXR5KTsKLX0KLQotdm9pZCBQYWdlT3ZlcmxheUNvbnRyb2xs
ZXI6OmNsZWFyUGFnZU92ZXJsYXkoUGFnZU92ZXJsYXkmIG92ZXJsYXkpCi17Ci0gICAgQVNTRVJU
KG1fcGFnZU92ZXJsYXlzLmNvbnRhaW5zKCZvdmVybGF5KSk7Ci0gICAgbV9vdmVybGF5R3JhcGhp
Y3NMYXllcnMuZ2V0KCZvdmVybGF5KS0+c2V0RHJhd3NDb250ZW50KGZhbHNlKTsKLX0KLQotR3Jh
cGhpY3NMYXllciogUGFnZU92ZXJsYXlDb250cm9sbGVyOjpsYXllckZvck92ZXJsYXkoUGFnZU92
ZXJsYXkmIG92ZXJsYXkpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKG1fcGFnZU92ZXJsYXlzLmNvbnRh
aW5zKCZvdmVybGF5KSk7Ci0gICAgcmV0dXJuIG1fb3ZlcmxheUdyYXBoaWNzTGF5ZXJzLmdldCgm
b3ZlcmxheSk7Ci19Ci0KLXZvaWQgUGFnZU92ZXJsYXlDb250cm9sbGVyOjpkaWRDaGFuZ2VWaWV3
U2l6ZSgpCi17Ci0gICAgZm9yIChhdXRvJiBvdmVybGF5QW5kTGF5ZXIgOiBtX292ZXJsYXlHcmFw
aGljc0xheWVycykgewotICAgICAgICBpZiAob3ZlcmxheUFuZExheWVyLmtleS0+b3ZlcmxheVR5
cGUoKSA9PSBQYWdlT3ZlcmxheTo6T3ZlcmxheVR5cGU6OlZpZXcpCi0gICAgICAgICAgICB1cGRh
dGVPdmVybGF5R2VvbWV0cnkoKm92ZXJsYXlBbmRMYXllci5rZXksICpvdmVybGF5QW5kTGF5ZXIu
dmFsdWUpOwotICAgIH0KLX0KLQotdm9pZCBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6OmRpZENoYW5n
ZURvY3VtZW50U2l6ZSgpCi17Ci0gICAgZm9yIChhdXRvJiBvdmVybGF5QW5kTGF5ZXIgOiBtX292
ZXJsYXlHcmFwaGljc0xheWVycykgewotICAgICAgICBpZiAob3ZlcmxheUFuZExheWVyLmtleS0+
b3ZlcmxheVR5cGUoKSA9PSBQYWdlT3ZlcmxheTo6T3ZlcmxheVR5cGU6OkRvY3VtZW50KQotICAg
ICAgICAgICAgdXBkYXRlT3ZlcmxheUdlb21ldHJ5KCpvdmVybGF5QW5kTGF5ZXIua2V5LCAqb3Zl
cmxheUFuZExheWVyLnZhbHVlKTsKLSAgICB9Ci19Ci0KLXZvaWQgUGFnZU92ZXJsYXlDb250cm9s
bGVyOjpkaWRDaGFuZ2VQcmVmZXJlbmNlcygpCi17Ci0gICAgZm9yIChhdXRvJiBncmFwaGljc0xh
eWVyIDogbV9vdmVybGF5R3JhcGhpY3NMYXllcnMudmFsdWVzKCkpCi0gICAgICAgIHVwZGF0ZVNl
dHRpbmdzRm9yTGF5ZXIoKmdyYXBoaWNzTGF5ZXIpOwotfQotCi12b2lkIFBhZ2VPdmVybGF5Q29u
dHJvbGxlcjo6ZGlkQ2hhbmdlRGV2aWNlU2NhbGVGYWN0b3IoKQotewotICAgIG1fZG9jdW1lbnRP
dmVybGF5Um9vdExheWVyLT5ub3RlRGV2aWNlT3JQYWdlU2NhbGVGYWN0b3JDaGFuZ2VkSW5jbHVk
aW5nRGVzY2VuZGFudHMoKTsKLSAgICBtX3ZpZXdPdmVybGF5Um9vdExheWVyLT5ub3RlRGV2aWNl
T3JQYWdlU2NhbGVGYWN0b3JDaGFuZ2VkSW5jbHVkaW5nRGVzY2VuZGFudHMoKTsKLQotICAgIGZv
ciAoYXV0byYgZ3JhcGhpY3NMYXllciA6IG1fb3ZlcmxheUdyYXBoaWNzTGF5ZXJzLnZhbHVlcygp
KQotICAgICAgICBncmFwaGljc0xheWVyLT5zZXROZWVkc0Rpc3BsYXkoKTsKLX0KLQotdm9pZCBQ
YWdlT3ZlcmxheUNvbnRyb2xsZXI6OmRpZENoYW5nZUV4cG9zZWRSZWN0KCkKLXsKLSAgICBtX3dl
YlBhZ2UuZHJhd2luZ0FyZWEoKS0+c2NoZWR1bGVDb21wb3NpdGluZ0xheWVyRmx1c2goKTsKLX0K
LQotdm9pZCBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6OmRpZFNjcm9sbEZyYW1lKEZyYW1lKiBmcmFt
ZSkKLXsKLSAgICBmb3IgKGF1dG8mIG92ZXJsYXlBbmRMYXllciA6IG1fb3ZlcmxheUdyYXBoaWNz
TGF5ZXJzKSB7Ci0gICAgICAgIGlmIChvdmVybGF5QW5kTGF5ZXIua2V5LT5vdmVybGF5VHlwZSgp
ID09IFBhZ2VPdmVybGF5OjpPdmVybGF5VHlwZTo6VmlldyB8fCAhZnJhbWUtPmlzTWFpbkZyYW1l
KCkpCi0gICAgICAgICAgICBvdmVybGF5QW5kTGF5ZXIudmFsdWUtPnNldE5lZWRzRGlzcGxheSgp
OwotICAgICAgICBvdmVybGF5QW5kTGF5ZXIua2V5LT5kaWRTY3JvbGxGcmFtZShmcmFtZSk7Ci0g
ICAgfQotfQotCi12b2lkIFBhZ2VPdmVybGF5Q29udHJvbGxlcjo6Zmx1c2hQYWdlT3ZlcmxheUxh
eWVycyhGbG9hdFJlY3QgdmlzaWJsZVJlY3QpCi17Ci0gICAgbV92aWV3T3ZlcmxheVJvb3RMYXll
ci0+Zmx1c2hDb21wb3NpdGluZ1N0YXRlKHZpc2libGVSZWN0KTsKLX0KLQotdm9pZCBQYWdlT3Zl
cmxheUNvbnRyb2xsZXI6OnVwZGF0ZVNldHRpbmdzRm9yTGF5ZXIoR3JhcGhpY3NMYXllciYgbGF5
ZXIpCi17Ci0gICAgU2V0dGluZ3MmIHNldHRpbmdzID0gbV93ZWJQYWdlLmNvcmVQYWdlKCktPnNl
dHRpbmdzKCk7Ci0gICAgbGF5ZXIuc2V0QWNjZWxlcmF0ZXNEcmF3aW5nKHNldHRpbmdzLmFjY2Vs
ZXJhdGVkRHJhd2luZ0VuYWJsZWQoKSk7Ci0gICAgbGF5ZXIuc2V0U2hvd0RlYnVnQm9yZGVyKHNl
dHRpbmdzLnNob3dEZWJ1Z0JvcmRlcnMoKSk7Ci0gICAgbGF5ZXIuc2V0U2hvd1JlcGFpbnRDb3Vu
dGVyKHNldHRpbmdzLnNob3dSZXBhaW50Q291bnRlcigpKTsKLX0KLQotYm9vbCBQYWdlT3Zlcmxh
eUNvbnRyb2xsZXI6OmhhbmRsZU1vdXNlRXZlbnQoY29uc3QgV2ViTW91c2VFdmVudCYgbW91c2VF
dmVudCkKLXsKLSAgICBpZiAoIW1fcGFnZU92ZXJsYXlzLnNpemUoKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgZm9yIChhdXRvIGl0ID0gbV9wYWdlT3ZlcmxheXMucmJlZ2luKCksIGVu
ZCA9IG1fcGFnZU92ZXJsYXlzLnJlbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGlm
ICgoKml0KS0+bW91c2VFdmVudChtb3VzZUV2ZW50KSkKLSAgICAgICAgICAgIHJldHVybiB0cnVl
OwotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotV0tUeXBlUmVmIFBhZ2VPdmVybGF5
Q29udHJvbGxlcjo6Y29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZShXS1N0cmluZ1JlZiBh
dHRyaWJ1dGUsIFdLVHlwZVJlZiBwYXJhbWV0ZXIpCi17Ci0gICAgaWYgKCFtX3BhZ2VPdmVybGF5
cy5zaXplKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgZm9yIChhdXRvIGl0ID0g
bV9wYWdlT3ZlcmxheXMucmJlZ2luKCksIGVuZCA9IG1fcGFnZU92ZXJsYXlzLnJlbmQoKTsgaXQg
IT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGlmIChXS1R5cGVSZWYgdmFsdWUgPSAoKml0KS0+Y29w
eUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZShhdHRyaWJ1dGUsIHBhcmFtZXRlcikpCi0gICAg
ICAgICAgICByZXR1cm4gdmFsdWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0K
LVdLQXJyYXlSZWYgUGFnZU92ZXJsYXlDb250cm9sbGVyOjpjb3B5QWNjZXNzaWJpbGl0eUF0dHJp
YnV0ZXNOYW1lcyhib29sIHBhcmFtZXRlcml6ZWROYW1lcykKLXsKLSAgICBpZiAoIW1fcGFnZU92
ZXJsYXlzLnNpemUoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBmb3IgKGF1dG8g
aXQgPSBtX3BhZ2VPdmVybGF5cy5yYmVnaW4oKSwgZW5kID0gbV9wYWdlT3ZlcmxheXMucmVuZCgp
OyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgaWYgKFdLQXJyYXlSZWYgdmFsdWUgPSAoKml0
KS0+Y29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVOYW1lcyhwYXJhbWV0ZXJpemVkTmFtZXMpKQot
ICAgICAgICAgICAgcmV0dXJuIHZhbHVlOwotICAgIH0KLQotICAgIHJldHVybiBudWxscHRyOwot
fQotCi12b2lkIFBhZ2VPdmVybGF5Q29udHJvbGxlcjo6cGFpbnRDb250ZW50cyhjb25zdCBXZWJD
b3JlOjpHcmFwaGljc0xheWVyKiBncmFwaGljc0xheWVyLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQmIGdyYXBoaWNzQ29udGV4dCwgV2ViQ29yZTo6R3JhcGhpY3NMYXllclBhaW50aW5nUGhhc2Us
IGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgY2xpcFJlY3QpCi17Ci0gICAgZm9yIChhdXRvIGl0
ID0gbV9vdmVybGF5R3JhcGhpY3NMYXllcnMuYmVnaW4oKSwgZW5kID0gbV9vdmVybGF5R3JhcGhp
Y3NMYXllcnMuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBpZiAoaXQtPnZhbHVl
LmdldCgpICE9IGdyYXBoaWNzTGF5ZXIpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAg
ICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoZ3JhcGhpY3NDb250ZXh0KTsK
LSAgICAgICAgZ3JhcGhpY3NDb250ZXh0LmNsaXAoY2xpcFJlY3QpOwotICAgICAgICBpdC0+a2V5
LT5kcmF3UmVjdChncmFwaGljc0NvbnRleHQsIGVuY2xvc2luZ0ludFJlY3QoY2xpcFJlY3QpKTsK
LQotICAgICAgICByZXR1cm47Ci0gICAgfQotfQotCi1mbG9hdCBQYWdlT3ZlcmxheUNvbnRyb2xs
ZXI6OmRldmljZVNjYWxlRmFjdG9yKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV93ZWJQYWdlLmNv
cmVQYWdlKCktPmRldmljZVNjYWxlRmFjdG9yKCk7Ci19Ci0KLXZvaWQgUGFnZU92ZXJsYXlDb250
cm9sbGVyOjpub3RpZnlGbHVzaFJlcXVpcmVkKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIq
KQotewotICAgIGlmIChtX3dlYlBhZ2UuZHJhd2luZ0FyZWEoKSkKLSAgICAgICAgbV93ZWJQYWdl
LmRyYXdpbmdBcmVhKCktPnNjaGVkdWxlQ29tcG9zaXRpbmdMYXllckZsdXNoKCk7Ci19Ci0KLXZv
aWQgUGFnZU92ZXJsYXlDb250cm9sbGVyOjpkaWRDaGFuZ2VPdmVybGF5RnJhbWUoUGFnZU92ZXJs
YXkmIG92ZXJsYXkpCi17Ci0gICAgQVNTRVJUKG1fcGFnZU92ZXJsYXlzLmNvbnRhaW5zKCZvdmVy
bGF5KSk7Ci0gICAgdXBkYXRlT3ZlcmxheUdlb21ldHJ5KG92ZXJsYXksICptX292ZXJsYXlHcmFw
aGljc0xheWVycy5nZXQoJm92ZXJsYXkpKTsKLX0KLQotdm9pZCBQYWdlT3ZlcmxheUNvbnRyb2xs
ZXI6OmRpZENoYW5nZU92ZXJsYXlCYWNrZ3JvdW5kQ29sb3IoUGFnZU92ZXJsYXkmIG92ZXJsYXkp
Ci17Ci0gICAgQVNTRVJUKG1fcGFnZU92ZXJsYXlzLmNvbnRhaW5zKCZvdmVybGF5KSk7Ci0gICAg
bV9vdmVybGF5R3JhcGhpY3NMYXllcnMuZ2V0KCZvdmVybGF5KS0+c2V0QmFja2dyb3VuZENvbG9y
KG92ZXJsYXkuYmFja2dyb3VuZENvbG9yKCkpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9QYWdlT3Zlcmxh
eUNvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9QYWdlT3Zl
cmxheUNvbnRyb2xsZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjUxODJkNS4u
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvUGFnZU92ZXJs
YXlDb250cm9sbGVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw5OSArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0g
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotI2lmbmRlZiBQYWdlT3ZlcmxheUNvbnRyb2xsZXJfaAotI2RlZmluZSBQYWdlT3ZlcmxheUNv
bnRyb2xsZXJfaAotCi0jaW5jbHVkZSAiUGFnZU92ZXJsYXkuaCIKLSNpbmNsdWRlICJXS0Jhc2Uu
aCIKLSNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzTGF5ZXJDbGllbnQuaD4KLSNpbmNsdWRlIDx3
dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLWNsYXNzIEZyYW1lOwotfQotCi1uYW1lc3Bh
Y2UgV2ViS2l0IHsKLQotY2xhc3MgV2ViTW91c2VFdmVudDsKLWNsYXNzIFdlYlBhZ2U7Ci0KLWNs
YXNzIFBhZ2VPdmVybGF5Q29udHJvbGxlciA6IHB1YmxpYyBXZWJDb3JlOjpHcmFwaGljc0xheWVy
Q2xpZW50IHsKLXB1YmxpYzoKLSAgICBQYWdlT3ZlcmxheUNvbnRyb2xsZXIoV2ViUGFnZSYpOwot
Ci0gICAgdm9pZCBpbml0aWFsaXplKCk7Ci0KLSAgICBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiBk
b2N1bWVudE92ZXJsYXlSb290TGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX2RvY3VtZW50T3Zlcmxh
eVJvb3RMYXllci5nZXQoKTsgfQotICAgIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqIHZpZXdPdmVy
bGF5Um9vdExheWVyKCkgY29uc3QgeyByZXR1cm4gbV92aWV3T3ZlcmxheVJvb3RMYXllci5nZXQo
KTsgfQotCi0gICAgdm9pZCBpbnN0YWxsUGFnZU92ZXJsYXkoUGFzc1JlZlB0cjxQYWdlT3Zlcmxh
eT4sIFBhZ2VPdmVybGF5OjpGYWRlTW9kZSk7Ci0gICAgdm9pZCB1bmluc3RhbGxQYWdlT3Zlcmxh
eShQYWdlT3ZlcmxheSosIFBhZ2VPdmVybGF5OjpGYWRlTW9kZSk7Ci0KLSAgICB2b2lkIHNldFBh
Z2VPdmVybGF5TmVlZHNEaXNwbGF5KFBhZ2VPdmVybGF5JiwgY29uc3QgV2ViQ29yZTo6SW50UmVj
dCYpOwotICAgIHZvaWQgc2V0UGFnZU92ZXJsYXlPcGFjaXR5KFBhZ2VPdmVybGF5JiwgZmxvYXQp
OwotICAgIHZvaWQgY2xlYXJQYWdlT3ZlcmxheShQYWdlT3ZlcmxheSYpOwotICAgIFdlYkNvcmU6
OkdyYXBoaWNzTGF5ZXIqIGxheWVyRm9yT3ZlcmxheShQYWdlT3ZlcmxheSYpIGNvbnN0OwotCi0g
ICAgdm9pZCBkaWRDaGFuZ2VWaWV3U2l6ZSgpOwotICAgIHZvaWQgZGlkQ2hhbmdlRG9jdW1lbnRT
aXplKCk7Ci0gICAgdm9pZCBkaWRDaGFuZ2VQcmVmZXJlbmNlcygpOwotICAgIHZvaWQgZGlkQ2hh
bmdlRGV2aWNlU2NhbGVGYWN0b3IoKTsKLSAgICB2b2lkIGRpZENoYW5nZUV4cG9zZWRSZWN0KCk7
Ci0gICAgdm9pZCBkaWRTY3JvbGxGcmFtZShXZWJDb3JlOjpGcmFtZSopOwotCi0gICAgdm9pZCBk
aWRDaGFuZ2VPdmVybGF5RnJhbWUoUGFnZU92ZXJsYXkmKTsKLSAgICB2b2lkIGRpZENoYW5nZU92
ZXJsYXlCYWNrZ3JvdW5kQ29sb3IoUGFnZU92ZXJsYXkmKTsKLQotICAgIHZvaWQgZmx1c2hQYWdl
T3ZlcmxheUxheWVycyhXZWJDb3JlOjpGbG9hdFJlY3QpOwotCi0gICAgYm9vbCBoYW5kbGVNb3Vz
ZUV2ZW50KGNvbnN0IFdlYk1vdXNlRXZlbnQmKTsKLQotICAgIC8vIEZJWE1FOiBXZSBzaG91bGRu
J3QgdXNlIEFQSSB0eXBlcyBoZXJlLgotICAgIFdLVHlwZVJlZiBjb3B5QWNjZXNzaWJpbGl0eUF0
dHJpYnV0ZVZhbHVlKFdLU3RyaW5nUmVmIGF0dHJpYnV0ZSwgV0tUeXBlUmVmIHBhcmFtZXRlcik7
Ci0gICAgV0tBcnJheVJlZiBjb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZXNOYW1lcyhib29sIHBh
cmFtZXRlcml6ZWROYW1lcyk7Ci0KLXByaXZhdGU6Ci0gICAgdm9pZCB1cGRhdGVTZXR0aW5nc0Zv
ckxheWVyKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXImKTsKLSAgICB2b2lkIHVwZGF0ZUZvcmNlU3lu
Y2hyb25vdXNTY3JvbGxMYXllclBvc2l0aW9uVXBkYXRlcygpOwotCi0gICAgLy8gV2ViQ29yZTo6
R3JhcGhpY3NMYXllckNsaWVudAotICAgIHZpcnR1YWwgdm9pZCBub3RpZnlGbHVzaFJlcXVpcmVk
KGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZv
aWQgcGFpbnRDb250ZW50cyhjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiwgV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0JiwgV2ViQ29yZTo6R3JhcGhpY3NMYXllclBhaW50aW5nUGhhc2UsIGNv
bnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgY2xpcFJlY3QpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwg
ZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IoKSBjb25zdCBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIGJv
b2wgc2hvdWxkU2tpcExheWVySW5EdW1wKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9Ci0KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8V2Vi
Q29yZTo6R3JhcGhpY3NMYXllcj4gbV9kb2N1bWVudE92ZXJsYXlSb290TGF5ZXI7Ci0gICAgc3Rk
Ojp1bmlxdWVfcHRyPFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI+IG1fdmlld092ZXJsYXlSb290TGF5
ZXI7Ci0gICAgSGFzaE1hcDxQYWdlT3ZlcmxheSosIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpH
cmFwaGljc0xheWVyPj4gbV9vdmVybGF5R3JhcGhpY3NMYXllcnM7Ci0gICAgVmVjdG9yPFJlZlB0
cjxQYWdlT3ZlcmxheT4+IG1fcGFnZU92ZXJsYXlzOwotICAgIFdlYlBhZ2UmIG1fd2ViUGFnZTsK
LX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gUGFnZU92ZXJsYXlDb250
cm9sbGVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9T
ZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvU2VydmljZXNPdmVybGF5Q29udHJvbGxlci5oCmluZGV4IDNiMDlkM2QuLjQxMWQzM2Mg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9TZXJ2aWNlc092
ZXJsYXlDb250cm9sbGVyLmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L1NlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIuaApAQCAtMjgsOSArMjgsOSBAQAogCiAjaWYgRU5B
QkxFKFNFUlZJQ0VfQ09OVFJPTFMpIHx8IEVOQUJMRShURUxFUEhPTkVfTlVNQkVSX0RFVEVDVElP
TikKIAotI2luY2x1ZGUgIlBhZ2VPdmVybGF5LmgiCiAjaW5jbHVkZSAiV2ViRnJhbWUuaCIKICNp
bmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzTGF5ZXJDbGllbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3Jl
L1BhZ2VPdmVybGF5Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SYW5nZS5oPgogI2luY2x1ZGUgPFdl
YkNvcmUvVGltZXIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgpAQCAtMzksNyArMzks
NiBAQCB0eXBlZGVmIHZvaWQqIERESGlnaGxpZ2h0UmVmOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiBjbGFzcyBMYXlvdXRSZWN0OwotCiBzdHJ1Y3QgR2FwUmVjdHM7CiB9CiAKQEAgLTQ3LDcgKzQ2
LDcgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIFdlYlBhZ2U7CiAKLWNsYXNzIFNlcnZp
Y2VzT3ZlcmxheUNvbnRyb2xsZXIgOiBwcml2YXRlIFBhZ2VPdmVybGF5OjpDbGllbnQgeworY2xh
c3MgU2VydmljZXNPdmVybGF5Q29udHJvbGxlciA6IHByaXZhdGUgV2ViQ29yZTo6UGFnZU92ZXJs
YXk6OkNsaWVudCB7CiBwdWJsaWM6CiAgICAgU2VydmljZXNPdmVybGF5Q29udHJvbGxlcihXZWJQ
YWdlJik7CiAgICAgflNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIoKTsKQEAgLTk4LDEyICs5Nywx
MiBAQCBwcml2YXRlOgogICAgIH07CiAKICAgICAvLyBQYWdlT3ZlcmxheTo6Q2xpZW50Ci0gICAg
dmlydHVhbCB2b2lkIHBhZ2VPdmVybGF5RGVzdHJveWVkKFBhZ2VPdmVybGF5Kikgb3ZlcnJpZGU7
Ci0gICAgdmlydHVhbCB2b2lkIHdpbGxNb3ZlVG9XZWJQYWdlKFBhZ2VPdmVybGF5KiwgV2ViUGFn
ZSopIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBkaWRNb3ZlVG9XZWJQYWdlKFBhZ2VPdmVy
bGF5KiwgV2ViUGFnZSopIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBkcmF3UmVjdChQYWdl
T3ZlcmxheSosIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IFdlYkNvcmU6OkludFJl
Y3QmIGRpcnR5UmVjdCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBib29sIG1vdXNlRXZlbnQoUGFn
ZU92ZXJsYXkqLCBjb25zdCBXZWJNb3VzZUV2ZW50Jikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2
b2lkIGRpZFNjcm9sbEZyYW1lKFBhZ2VPdmVybGF5KiwgV2ViQ29yZTo6RnJhbWUqKSBvdmVycmlk
ZTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFnZU92ZXJsYXlEZXN0cm95ZWQoV2ViQ29yZTo6UGFnZU92
ZXJsYXkmKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgd2lsbE1vdmVUb1BhZ2UoV2ViQ29y
ZTo6UGFnZU92ZXJsYXkmLCBXZWJDb3JlOjpQYWdlKikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2
b2lkIGRpZE1vdmVUb1BhZ2UoV2ViQ29yZTo6UGFnZU92ZXJsYXkmLCBXZWJDb3JlOjpQYWdlKikg
b3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGRyYXdSZWN0KFdlYkNvcmU6OlBhZ2VPdmVybGF5
JiwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgZGly
dHlSZWN0KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wgbW91c2VFdmVudChXZWJDb3JlOjpQ
YWdlT3ZlcmxheSYsIGNvbnN0IFdlYkNvcmU6OlBsYXRmb3JtTW91c2VFdmVudCYpIG92ZXJyaWRl
OworICAgIHZpcnR1YWwgdm9pZCBkaWRTY3JvbGxGcmFtZShXZWJDb3JlOjpQYWdlT3ZlcmxheSYs
IFdlYkNvcmU6OkZyYW1lJikgb3ZlcnJpZGU7CiAKICAgICB2b2lkIGNyZWF0ZU92ZXJsYXlJZk5l
ZWRlZCgpOwogICAgIHZvaWQgaGFuZGxlQ2xpY2soY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmLCBI
aWdobGlnaHQmKTsKQEAgLTEzOSw3ICsxMzgsNyBAQCBwcml2YXRlOgogICAgIFdlYlBhZ2UmIHdl
YlBhZ2UoKSBjb25zdCB7IHJldHVybiBtX3dlYlBhZ2U7IH0KIAogICAgIFdlYlBhZ2UmIG1fd2Vi
UGFnZTsKLSAgICBQYWdlT3ZlcmxheSogbV9zZXJ2aWNlc092ZXJsYXk7CisgICAgV2ViQ29yZTo6
UGFnZU92ZXJsYXkqIG1fc2VydmljZXNPdmVybGF5OwogCiAgICAgUmVmUHRyPEhpZ2hsaWdodD4g
bV9hY3RpdmVIaWdobGlnaHQ7CiAgICAgUmVmUHRyPEhpZ2hsaWdodD4gbV9uZXh0QWN0aXZlSGln
aGxpZ2h0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dl
YlBhZ2UuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3Bw
CmluZGV4IDZlYTc2YWMuLjc2MDljZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViUGFnZS5jcHAKQEAgLTMyNyw3ICszMjcsNiBAQCBXZWJQYWdlOjpXZWJQYWdl
KHVpbnQ2NF90IHBhZ2VJRCwgY29uc3QgV2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVycyYgcGFyYW1l
dGVycykKICNpZiBFTkFCTEUoV0VCR0wpCiAgICAgLCBtX3N5c3RlbVdlYkdMUG9saWN5KFdlYkdM
QWxsb3dDcmVhdGlvbikKICNlbmRpZgotICAgICwgbV9wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKnRo
aXMpCiB7CiAgICAgQVNTRVJUKG1fcGFnZUlEKTsKICAgICAvLyBGSVhNRTogVGhpcyBpcyBhIG5v
bi1pZGVhbCBsb2NhdGlvbiBmb3IgdGhpcyBTZXR0aW5nIGFuZApAQCAtMzY2LDcgKzM2NSw2IEBA
IFdlYlBhZ2U6OldlYlBhZ2UodWludDY0X3QgcGFnZUlELCBjb25zdCBXZWJQYWdlQ3JlYXRpb25Q
YXJhbWV0ZXJzJiBwYXJhbWV0ZXJzKQogCiAgICAgbV9kcmF3aW5nQXJlYSA9IERyYXdpbmdBcmVh
OjpjcmVhdGUoKnRoaXMsIHBhcmFtZXRlcnMpOwogICAgIG1fZHJhd2luZ0FyZWEtPnNldFBhaW50
aW5nRW5hYmxlZChmYWxzZSk7Ci0gICAgbV9wYWdlT3ZlcmxheUNvbnRyb2xsZXIuaW5pdGlhbGl6
ZSgpOwogCiAjaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykKICAgICBtX3VzZUFzeW5jU2Nyb2xs
aW5nID0gcGFyYW1ldGVycy5zdG9yZS5nZXRCb29sVmFsdWVGb3JLZXkoV2ViUHJlZmVyZW5jZXNL
ZXk6OnRocmVhZGVkU2Nyb2xsaW5nRW5hYmxlZEtleSgpKTsKQEAgLTEyMjYsOCArMTIyNCw2IEBA
IHZvaWQgV2ViUGFnZTo6c2V0U2l6ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiB2aWV3U2l6ZSkK
ICAgICBpZiAodmlldy0+dXNlRml4ZWRMYXlvdXQoKSkKICAgICAgICAgc2VuZFZpZXdwb3J0QXR0
cmlidXRlc0NoYW5nZWQoKTsKICNlbmRpZgotCi0gICAgbV9wYWdlT3ZlcmxheUNvbnRyb2xsZXIu
ZGlkQ2hhbmdlVmlld1NpemUoKTsKIH0KIAogI2lmIFVTRShUSUxFRF9CQUNLSU5HX1NUT1JFKQpA
QCAtMTQ1Myw4ICsxNDQ5LDYgQEAgdm9pZCBXZWJQYWdlOjpzZXREZXZpY2VTY2FsZUZhY3Rvcihm
bG9hdCBzY2FsZUZhY3RvcikKIAogICAgIGlmIChtX2RyYXdpbmdBcmVhLT5sYXllclRyZWVIb3N0
KCkpCiAgICAgICAgIG1fZHJhd2luZ0FyZWEtPmxheWVyVHJlZUhvc3QoKS0+ZGV2aWNlT3JQYWdl
U2NhbGVGYWN0b3JDaGFuZ2VkKCk7Ci0KLSAgICBtX3BhZ2VPdmVybGF5Q29udHJvbGxlci5kaWRD
aGFuZ2VEZXZpY2VTY2FsZUZhY3RvcigpOwogfQogCiBmbG9hdCBXZWJQYWdlOjpkZXZpY2VTY2Fs
ZUZhY3RvcigpIGNvbnN0CkBAIC0xNTc3LDE2ICsxNTcxLDYgQEAgdm9pZCBXZWJQYWdlOjpwb3N0
SW5qZWN0ZWRCdW5kbGVNZXNzYWdlKGNvbnN0IFN0cmluZyYgbWVzc2FnZU5hbWUsIElQQzo6TWVz
c2FnZUQKICAgICBpbmplY3RlZEJ1bmRsZS0+ZGlkUmVjZWl2ZU1lc3NhZ2VUb1BhZ2UodGhpcywg
bWVzc2FnZU5hbWUsIG1lc3NhZ2VCb2R5LmdldCgpKTsKIH0KIAotdm9pZCBXZWJQYWdlOjppbnN0
YWxsUGFnZU92ZXJsYXkoUGFzc1JlZlB0cjxQYWdlT3ZlcmxheT4gcGFnZU92ZXJsYXksIFBhZ2VP
dmVybGF5OjpGYWRlTW9kZSBmYWRlTW9kZSkKLXsKLSAgICBtX3BhZ2VPdmVybGF5Q29udHJvbGxl
ci5pbnN0YWxsUGFnZU92ZXJsYXkocGFnZU92ZXJsYXksIGZhZGVNb2RlKTsKLX0KLQotdm9pZCBX
ZWJQYWdlOjp1bmluc3RhbGxQYWdlT3ZlcmxheShQYWdlT3ZlcmxheSogcGFnZU92ZXJsYXksIFBh
Z2VPdmVybGF5OjpGYWRlTW9kZSBmYWRlTW9kZSkKLXsKLSAgICBtX3BhZ2VPdmVybGF5Q29udHJv
bGxlci51bmluc3RhbGxQYWdlT3ZlcmxheShwYWdlT3ZlcmxheSwgZmFkZU1vZGUpOwotfQotCiAj
aWYgIVBMQVRGT1JNKElPUykKIHZvaWQgV2ViUGFnZTo6c2V0SGVhZGVyUGFnZUJhbm5lcihQYXNz
UmVmUHRyPFBhZ2VCYW5uZXI+IHBhZ2VCYW5uZXIpCiB7CkBAIC0xOTE0LDcgKzE4OTgsNyBAQCB2
b2lkIFdlYlBhZ2U6Om1vdXNlRXZlbnQoY29uc3QgV2ViTW91c2VFdmVudCYgbW91c2VFdmVudCkK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZgotICAgIGJvb2wgaGFuZGxlZCA9IG1fcGFn
ZU92ZXJsYXlDb250cm9sbGVyLmhhbmRsZU1vdXNlRXZlbnQobW91c2VFdmVudCk7CisgICAgYm9v
bCBoYW5kbGVkID0gZmFsc2U7CiAKICNpZiAhUExBVEZPUk0oSU9TKQogICAgIGlmICghaGFuZGxl
ZCAmJiBtX2hlYWRlckJhbm5lcikKQEAgLTE5NDAsNyArMTkyNCw3IEBAIHZvaWQgV2ViUGFnZTo6
bW91c2VFdmVudChjb25zdCBXZWJNb3VzZUV2ZW50JiBtb3VzZUV2ZW50KQogCiB2b2lkIFdlYlBh
Z2U6Om1vdXNlRXZlbnRTeW5jRm9yVGVzdGluZyhjb25zdCBXZWJNb3VzZUV2ZW50JiBtb3VzZUV2
ZW50LCBib29sJiBoYW5kbGVkKQogewotICAgIGhhbmRsZWQgPSBtX3BhZ2VPdmVybGF5Q29udHJv
bGxlci5oYW5kbGVNb3VzZUV2ZW50KG1vdXNlRXZlbnQpOworICAgIGhhbmRsZWQgPSBmYWxzZTsK
ICNpZiAhUExBVEZPUk0oSU9TKQogICAgIGlmICghaGFuZGxlZCAmJiBtX2hlYWRlckJhbm5lcikK
ICAgICAgICAgaGFuZGxlZCA9IG1faGVhZGVyQmFubmVyLT5tb3VzZUV2ZW50KG1vdXNlRXZlbnQp
OwpAQCAtMjg2OSw4ICsyODUzLDYgQEAgdm9pZCBXZWJQYWdlOjp1cGRhdGVQcmVmZXJlbmNlcyhj
b25zdCBXZWJQcmVmZXJlbmNlc1N0b3JlJiBzdG9yZSkKIAogICAgIGlmIChtX2RyYXdpbmdBcmVh
KQogICAgICAgICBtX2RyYXdpbmdBcmVhLT51cGRhdGVQcmVmZXJlbmNlcyhzdG9yZSk7Ci0KLSAg
ICBtX3BhZ2VPdmVybGF5Q29udHJvbGxlci5kaWRDaGFuZ2VQcmVmZXJlbmNlcygpOwogfQogCiAj
aWYgUExBVEZPUk0oQ09DT0EpCkBAIC00MDk2LDcgKzQwNzgsNyBAQCB2b2lkIFdlYlBhZ2U6OnJl
Y29tcHV0ZVNob3J0Q2lyY3VpdEhvcml6b250YWxXaGVlbEV2ZW50c1N0YXRlKCkKICAgICBzZW5k
KE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlNldENhblNob3J0Q2lyY3VpdEhvcml6b250YWxXaGVl
bEV2ZW50cyhtX2NhblNob3J0Q2lyY3VpdEhvcml6b250YWxXaGVlbEV2ZW50cykpOwogfQogCi1G
cmFtZSogV2ViUGFnZTo6bWFpbkZyYW1lKCkgY29uc3QKK01haW5GcmFtZSogV2ViUGFnZTo6bWFp
bkZyYW1lKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9wYWdlID8gJm1fcGFnZS0+bWFpbkZyYW1l
KCkgOiBudWxscHRyOwogfQpAQCAtNDgxMSw4ICs0NzkzLDYgQEAgU2VydmljZXNPdmVybGF5Q29u
dHJvbGxlciYgV2ViUGFnZTo6c2VydmljZXNPdmVybGF5Q29udHJvbGxlcigpCiAKIHZvaWQgV2Vi
UGFnZTo6ZGlkQ2hhbmdlU2Nyb2xsT2Zmc2V0Rm9yRnJhbWUoRnJhbWUqIGZyYW1lKQogewotICAg
IG1fcGFnZU92ZXJsYXlDb250cm9sbGVyLmRpZFNjcm9sbEZyYW1lKGZyYW1lKTsKLQogICAgIGlm
ICghZnJhbWUtPmlzTWFpbkZyYW1lKCkpCiAgICAgICAgIHJldHVybjsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaCBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKaW5kZXggY2E0NmJhMGEuLjIxMjJlMmIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgK
KysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaApAQCAtNDEs
NyArNDEsNiBAQAogI2luY2x1ZGUgIkxheWVyVHJlZUhvc3QuaCIKICNpbmNsdWRlICJNZXNzYWdl
UmVjZWl2ZXIuaCIKICNpbmNsdWRlICJNZXNzYWdlU2VuZGVyLmgiCi0jaW5jbHVkZSAiUGFnZU92
ZXJsYXlDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiUGx1Z2luLmgiCiAjaW5jbHVkZSAiU2FuZGJv
eEV4dGVuc2lvbi5oIgogI2luY2x1ZGUgIlNoYXJlYWJsZUJpdG1hcC5oIgpAQCAtMTQwLDcgKzEz
OSw2IEBAIGNsYXNzIERyYXdpbmdBcmVhOwogY2xhc3MgSW5qZWN0ZWRCdW5kbGVCYWNrRm9yd2Fy
ZExpc3Q7CiBjbGFzcyBOb3RpZmljYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXI7CiBjbGFz
cyBQYWdlQmFubmVyOwotY2xhc3MgUGFnZU92ZXJsYXk7CiBjbGFzcyBQbHVnaW5WaWV3OwogY2xh
c3MgU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjsKIGNsYXNzIFZpc2libGVDb250ZW50UmVjdFVw
ZGF0ZUluZm87CkBAIC0yMDYsOCArMjA0LDYgQEAgcHVibGljOgogICAgIAogICAgIEluamVjdGVk
QnVuZGxlQmFja0ZvcndhcmRMaXN0KiBiYWNrRm9yd2FyZExpc3QoKTsKICAgICBEcmF3aW5nQXJl
YSogZHJhd2luZ0FyZWEoKSBjb25zdCB7IHJldHVybiBtX2RyYXdpbmdBcmVhLmdldCgpOyB9Ci0g
ICAgY29uc3QgUGFnZU92ZXJsYXlDb250cm9sbGVyJiBwYWdlT3ZlcmxheUNvbnRyb2xsZXIoKSBj
b25zdCB7IHJldHVybiBtX3BhZ2VPdmVybGF5Q29udHJvbGxlcjsgfQotICAgIFBhZ2VPdmVybGF5
Q29udHJvbGxlciYgcGFnZU92ZXJsYXlDb250cm9sbGVyKCkgeyByZXR1cm4gbV9wYWdlT3Zlcmxh
eUNvbnRyb2xsZXI7IH0KICNpZiBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKQogICAgIFdlYkNvcmU6
OlNjcm9sbGluZ0Nvb3JkaW5hdG9yKiBzY3JvbGxpbmdDb29yZGluYXRvcigpIGNvbnN0OwogI2Vu
ZGlmCkBAIC0zMTIsNyArMzA4LDcgQEAgcHVibGljOgogCiAgICAgV2ViRnJhbWUqIG1haW5XZWJG
cmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWFpbkZyYW1lLmdldCgpOyB9CiAKLSAgICBXZWJDb3Jl
OjpGcmFtZSogbWFpbkZyYW1lKCkgY29uc3Q7IC8vIE1heSByZXR1cm4gMC4KKyAgICBXZWJDb3Jl
OjpNYWluRnJhbWUqIG1haW5GcmFtZSgpIGNvbnN0OyAvLyBNYXkgcmV0dXJuIDAuCiAgICAgV2Vi
Q29yZTo6RnJhbWVWaWV3KiBtYWluRnJhbWVWaWV3KCkgY29uc3Q7IC8vIE1heSByZXR1cm4gMC4K
IAogICAgIFBhc3NSZWZQdHI8V2ViQ29yZTo6UmFuZ2U+IGN1cnJlbnRTZWxlY3Rpb25Bc1Jhbmdl
KCk7CkBAIC00MTYsOCArNDEyLDYgQEAgcHVibGljOgogCiAgICAgYm9vbCB3aW5kb3dJc0ZvY3Vz
ZWQoKSBjb25zdDsKICAgICBib29sIHdpbmRvd0FuZFdlYlBhZ2VBcmVGb2N1c2VkKCkgY29uc3Q7
Ci0gICAgdm9pZCBpbnN0YWxsUGFnZU92ZXJsYXkoUGFzc1JlZlB0cjxQYWdlT3ZlcmxheT4sIFBh
Z2VPdmVybGF5OjpGYWRlTW9kZSA9IFBhZ2VPdmVybGF5OjpGYWRlTW9kZTo6RG9Ob3RGYWRlKTsK
LSAgICB2b2lkIHVuaW5zdGFsbFBhZ2VPdmVybGF5KFBhZ2VPdmVybGF5KiwgUGFnZU92ZXJsYXk6
OkZhZGVNb2RlID0gUGFnZU92ZXJsYXk6OkZhZGVNb2RlOjpEb05vdEZhZGUpOwogCiAjaWYgIVBM
QVRGT1JNKElPUykKICAgICB2b2lkIHNldEhlYWRlclBhZ2VCYW5uZXIoUGFzc1JlZlB0cjxQYWdl
QmFubmVyPik7CkBAIC04MjIsOSArODE2LDYgQEAgcHVibGljOgogICAgIFdlYkNvcmU6OlNjcm9s
bFBpbm5pbmdCZWhhdmlvciBzY3JvbGxQaW5uaW5nQmVoYXZpb3IoKSB7IHJldHVybiBtX3Njcm9s
bFBpbm5pbmdCZWhhdmlvcjsgfQogICAgIHZvaWQgc2V0U2Nyb2xsUGlubmluZ0JlaGF2aW9yKHVp
bnQzMl90IC8qIFdlYkNvcmU6OlNjcm9sbFBpbm5pbmdCZWhhdmlvciAqLyBwaW5uaW5nKTsKIAot
ICAgIFdLVHlwZVJlZiBwYWdlT3ZlcmxheUNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWUo
V0tTdHJpbmdSZWYgYXR0cmlidXRlLCBXS1R5cGVSZWYgcGFyYW1ldGVyKTsKLSAgICBXS0FycmF5
UmVmIHBhZ2VPdmVybGF5Q29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVzTmFtZXMoYm9vbCBwYXJh
bWV0ZXJpemVkTmFtZXMpOwotCiAgICAgUGFzc1JlZlB0cjxXZWJDb3JlOjpEb2N1bWVudExvYWRl
cj4gY3JlYXRlRG9jdW1lbnRMb2FkZXIoV2ViQ29yZTo6RnJhbWUmLCBjb25zdCBXZWJDb3JlOjpS
ZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBXZWJDb3JlOjpTdWJzdGl0dXRlRGF0YSYpOwogCiAgICAg
dm9pZCBnZXRCeXRlY29kZVByb2ZpbGUodWludDY0X3QgY2FsbGJhY2tJRCk7CkBAIC0xMjc4LDgg
KzEyNjksNiBAQCBwcml2YXRlOgogI2lmIEVOQUJMRShTRVJWSUNFX0NPTlRST0xTKSB8fCBFTkFC
TEUoVEVMRVBIT05FX05VTUJFUl9ERVRFQ1RJT04pCiAgICAgc3RkOjp1bmlxdWVfcHRyPFNlcnZp
Y2VzT3ZlcmxheUNvbnRyb2xsZXI+IG1fc2VydmljZXNPdmVybGF5Q29udHJvbGxlcjsKICNlbmRp
ZgotCi0gICAgUGFnZU92ZXJsYXlDb250cm9sbGVyIG1fcGFnZU92ZXJsYXlDb250cm9sbGVyOwog
fTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZU92ZXJsYXkuY3BwIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VPdmVybGF5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi4xZDJlM2Q1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VPdmVybGF5LmNwcApAQCAtMCwwICsxLDExMyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJQYWdlT3Zlcmxh
eS5oIgorCisjaW5jbHVkZSAiV2ViRnJhbWUuaCIKKyNpbmNsdWRlICJXZWJQYWdlLmgiCisjaW5j
bHVkZSA8V2ViQ29yZS9HcmFwaGljc0xheWVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9QYWdlT3Zl
cmxheS5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7
CisKK1Bhc3NSZWZQdHI8V2ViUGFnZU92ZXJsYXk+IFdlYlBhZ2VPdmVybGF5OjpjcmVhdGUoV2Vi
UGFnZU92ZXJsYXk6OkNsaWVudCYgY2xpZW50LCBQYWdlT3ZlcmxheTo6T3ZlcmxheVR5cGUgb3Zl
cmxheVR5cGUpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBXZWJQYWdlT3ZlcmxheShjbGll
bnQsIG92ZXJsYXlUeXBlKSk7Cit9CisKK1dlYlBhZ2VPdmVybGF5OjpXZWJQYWdlT3ZlcmxheShX
ZWJQYWdlT3ZlcmxheTo6Q2xpZW50JiBjbGllbnQsIFBhZ2VPdmVybGF5OjpPdmVybGF5VHlwZSBv
dmVybGF5VHlwZSkKKyAgICA6IG1fb3ZlcmxheShQYWdlT3ZlcmxheTo6Y3JlYXRlKCp0aGlzLCBv
dmVybGF5VHlwZSkpCisgICAgLCBtX2NsaWVudChjbGllbnQpCit7Cit9CisKK1dlYlBhZ2VPdmVy
bGF5Ojp+V2ViUGFnZU92ZXJsYXkoKQoreworfQorCit2b2lkIFdlYlBhZ2VPdmVybGF5OjpzZXRO
ZWVkc0Rpc3BsYXkoY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KQoreworICAgIG1fb3ZlcmxheS0+
c2V0TmVlZHNEaXNwbGF5KGRpcnR5UmVjdCk7Cit9CisKK3ZvaWQgV2ViUGFnZU92ZXJsYXk6OnNl
dE5lZWRzRGlzcGxheSgpCit7CisgICAgbV9vdmVybGF5LT5zZXROZWVkc0Rpc3BsYXkoKTsKK30K
Kwordm9pZCBXZWJQYWdlT3ZlcmxheTo6Y2xlYXIoKQoreworICAgIG1fb3ZlcmxheS0+Y2xlYXIo
KTsKK30KKwordm9pZCBXZWJQYWdlT3ZlcmxheTo6cGFnZU92ZXJsYXlEZXN0cm95ZWQoUGFnZU92
ZXJsYXkmKQoreworICAgIG1fY2xpZW50LnBhZ2VPdmVybGF5RGVzdHJveWVkKCp0aGlzKTsKK30K
Kwordm9pZCBXZWJQYWdlT3ZlcmxheTo6d2lsbE1vdmVUb1BhZ2UoUGFnZU92ZXJsYXkmLCBQYWdl
KiBwYWdlKQoreworICAgIG1fY2xpZW50LndpbGxNb3ZlVG9QYWdlKCp0aGlzLCBwYWdlID8gV2Vi
UGFnZTo6ZnJvbUNvcmVQYWdlKHBhZ2UpIDogbnVsbHB0cik7Cit9CisKK3ZvaWQgV2ViUGFnZU92
ZXJsYXk6OmRpZE1vdmVUb1BhZ2UoUGFnZU92ZXJsYXkmLCBQYWdlKiBwYWdlKQoreworICAgIG1f
Y2xpZW50LmRpZE1vdmVUb1BhZ2UoKnRoaXMsIHBhZ2UgPyBXZWJQYWdlOjpmcm9tQ29yZVBhZ2Uo
cGFnZSkgOiBudWxscHRyKTsKK30KKwordm9pZCBXZWJQYWdlT3ZlcmxheTo6ZHJhd1JlY3QoUGFn
ZU92ZXJsYXkmLCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIGRpcnR5
UmVjdCkKK3sKKyAgICBtX2NsaWVudC5kcmF3UmVjdCgqdGhpcywgY29udGV4dCwgZGlydHlSZWN0
KTsKK30KKworYm9vbCBXZWJQYWdlT3ZlcmxheTo6bW91c2VFdmVudChQYWdlT3ZlcmxheSYsIGNv
bnN0IFBsYXRmb3JtTW91c2VFdmVudCYgZXZlbnQpCit7CisgICAgcmV0dXJuIG1fY2xpZW50Lm1v
dXNlRXZlbnQoKnRoaXMsIGV2ZW50KTsKK30KKwordm9pZCBXZWJQYWdlT3ZlcmxheTo6ZGlkU2Ny
b2xsRnJhbWUoUGFnZU92ZXJsYXkmLCBGcmFtZSYgZnJhbWUpCit7CisgICAgbV9jbGllbnQuZGlk
U2Nyb2xsRnJhbWUoKnRoaXMsIFdlYkZyYW1lOjpmcm9tQ29yZUZyYW1lKGZyYW1lKSk7Cit9CisK
K2Jvb2wgV2ViUGFnZU92ZXJsYXk6OmNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlU3RyaW5nVmFs
dWVGb3JQb2ludChQYWdlT3ZlcmxheSYsIFN0cmluZyBhdHRyaWJ1dGUsIEZsb2F0UG9pbnQgcGFy
YW1ldGVyLCBTdHJpbmcmIHZhbHVlKQoreworICAgIHJldHVybiBtX2NsaWVudC5jb3B5QWNjZXNz
aWJpbGl0eUF0dHJpYnV0ZVN0cmluZ1ZhbHVlRm9yUG9pbnQoKnRoaXMsIGF0dHJpYnV0ZSwgcGFy
YW1ldGVyLCB2YWx1ZSk7Cit9CisKK2Jvb2wgV2ViUGFnZU92ZXJsYXk6OmNvcHlBY2Nlc3NpYmls
aXR5QXR0cmlidXRlQm9vbFZhbHVlRm9yUG9pbnQoUGFnZU92ZXJsYXkmLCBTdHJpbmcgYXR0cmli
dXRlLCBGbG9hdFBvaW50IHBhcmFtZXRlciwgYm9vbCYgdmFsdWUpCit7CisgICAgcmV0dXJuIG1f
Y2xpZW50LmNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlQm9vbFZhbHVlRm9yUG9pbnQoKnRoaXMs
IGF0dHJpYnV0ZSwgcGFyYW1ldGVyLCB2YWx1ZSk7Cit9CisKK1ZlY3RvcjxTdHJpbmc+IFdlYlBh
Z2VPdmVybGF5Ojpjb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZU5hbWVzKFBhZ2VPdmVybGF5Jiwg
Ym9vbCBwYXJhbWV0ZXJpemVkTmFtZXMpCit7CisgICAgcmV0dXJuIG1fY2xpZW50LmNvcHlBY2Nl
c3NpYmlsaXR5QXR0cmlidXRlTmFtZXMoKnRoaXMsIHBhcmFtZXRlcml6ZWROYW1lcyk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYlBhZ2VPdmVybGF5LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViUGFnZU92ZXJsYXkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi4wNmRkZTE2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL1dlYlBhZ2VPdmVybGF5LmgKQEAgLTAsMCArMSw5MiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpZm5kZWYgV2ViUGFnZU92ZXJsYXlfaAorI2RlZmluZSBXZWJQYWdlT3ZlcmxheV9oCisKKyNp
bmNsdWRlICJBUElPYmplY3QuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0Zsb2F0UG9pbnQuaD4KKyNp
bmNsdWRlIDxXZWJDb3JlL0ludFJlY3QuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1BhZ2VPdmVybGF5
Lmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisK
K2NsYXNzIFdlYkZyYW1lOworY2xhc3MgV2ViUGFnZTsKKworY2xhc3MgV2ViUGFnZU92ZXJsYXkg
OiBwdWJsaWMgQVBJOjpPYmplY3RJbXBsPEFQSTo6T2JqZWN0OjpUeXBlOjpCdW5kbGVQYWdlT3Zl
cmxheT4sIHByaXZhdGUgV2ViQ29yZTo6UGFnZU92ZXJsYXk6OkNsaWVudCB7CitwdWJsaWM6Cisg
ICAgY2xhc3MgQ2xpZW50IHsKKyAgICBwcm90ZWN0ZWQ6CisgICAgICAgIHZpcnR1YWwgfkNsaWVu
dCgpIHsgfQorCisgICAgcHVibGljOgorICAgICAgICB2aXJ0dWFsIHZvaWQgcGFnZU92ZXJsYXlE
ZXN0cm95ZWQoV2ViUGFnZU92ZXJsYXkmKSA9IDA7CisgICAgICAgIHZpcnR1YWwgdm9pZCB3aWxs
TW92ZVRvUGFnZShXZWJQYWdlT3ZlcmxheSYsIFdlYlBhZ2UqKSA9IDA7CisgICAgICAgIHZpcnR1
YWwgdm9pZCBkaWRNb3ZlVG9QYWdlKFdlYlBhZ2VPdmVybGF5JiwgV2ViUGFnZSopID0gMDsKKyAg
ICAgICAgdmlydHVhbCB2b2lkIGRyYXdSZWN0KFdlYlBhZ2VPdmVybGF5JiwgV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0JiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgZGlydHlSZWN0KSA9IDA7Cisg
ICAgICAgIHZpcnR1YWwgYm9vbCBtb3VzZUV2ZW50KFdlYlBhZ2VPdmVybGF5JiwgY29uc3QgV2Vi
Q29yZTo6UGxhdGZvcm1Nb3VzZUV2ZW50JikgPSAwOworICAgICAgICB2aXJ0dWFsIHZvaWQgZGlk
U2Nyb2xsRnJhbWUoV2ViUGFnZU92ZXJsYXkmLCBXZWJGcmFtZSopIHsgfQorCisgICAgICAgIHZp
cnR1YWwgYm9vbCBjb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVN0cmluZ1ZhbHVlRm9yUG9pbnQo
V2ViUGFnZU92ZXJsYXkmLCBTdHJpbmcgLyogYXR0cmlidXRlICovLCBXZWJDb3JlOjpGbG9hdFBv
aW50IC8qIHBhcmFtZXRlciAqLywgU3RyaW5nJiB2YWx1ZSkgeyByZXR1cm4gZmFsc2U7IH0KKyAg
ICAgICAgdmlydHVhbCBib29sIGNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlQm9vbFZhbHVlRm9y
UG9pbnQoV2ViUGFnZU92ZXJsYXkmLCBTdHJpbmcgLyogYXR0cmlidXRlICovLCBXZWJDb3JlOjpG
bG9hdFBvaW50IC8qIHBhcmFtZXRlciAqLywgYm9vbCYgdmFsdWUpIHsgcmV0dXJuIGZhbHNlOyB9
CisgICAgICAgIHZpcnR1YWwgVmVjdG9yPFN0cmluZz4gY29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1
dGVOYW1lcyhXZWJQYWdlT3ZlcmxheSYsIGJvb2wgLyogcGFyYW1ldGVyaXplZE5hbWVzICovKSB7
IHJldHVybiBWZWN0b3I8U3RyaW5nPigpOyB9CisgICAgfTsKKworICAgIHN0YXRpYyBQYXNzUmVm
UHRyPFdlYlBhZ2VPdmVybGF5PiBjcmVhdGUoQ2xpZW50JiwgV2ViQ29yZTo6UGFnZU92ZXJsYXk6
Ok92ZXJsYXlUeXBlID0gV2ViQ29yZTo6UGFnZU92ZXJsYXk6Ok92ZXJsYXlUeXBlOjpWaWV3KTsK
KyAgICB2aXJ0dWFsIH5XZWJQYWdlT3ZlcmxheSgpOworCisgICAgdm9pZCBzZXROZWVkc0Rpc3Bs
YXkoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgZGlydHlSZWN0KTsKKyAgICB2b2lkIHNldE5lZWRz
RGlzcGxheSgpOworCisgICAgdm9pZCBjbGVhcigpOworCisgICAgV2ViQ29yZTo6UGFnZU92ZXJs
YXkqIGNvcmVPdmVybGF5KCkgY29uc3QgeyByZXR1cm4gbV9vdmVybGF5LmdldCgpOyB9CisgICAg
Q2xpZW50JiBjbGllbnQoKSBjb25zdCB7IHJldHVybiBtX2NsaWVudDsgfQorCitwcml2YXRlOgor
ICAgIFdlYlBhZ2VPdmVybGF5KENsaWVudCYsIFdlYkNvcmU6OlBhZ2VPdmVybGF5OjpPdmVybGF5
VHlwZSk7CisKKyAgICAvLyBXZWJDb3JlOjpQYWdlT3ZlcmxheTo6Q2xpZW50CisgICAgdmlydHVh
bCB2b2lkIHBhZ2VPdmVybGF5RGVzdHJveWVkKFdlYkNvcmU6OlBhZ2VPdmVybGF5Jikgb3ZlcnJp
ZGU7CisgICAgdmlydHVhbCB2b2lkIHdpbGxNb3ZlVG9QYWdlKFdlYkNvcmU6OlBhZ2VPdmVybGF5
JiwgV2ViQ29yZTo6UGFnZSopIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBkaWRNb3ZlVG9Q
YWdlKFdlYkNvcmU6OlBhZ2VPdmVybGF5JiwgV2ViQ29yZTo6UGFnZSopIG92ZXJyaWRlOworICAg
IHZpcnR1YWwgdm9pZCBkcmF3UmVjdChXZWJDb3JlOjpQYWdlT3ZlcmxheSYsIFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dCYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGRpcnR5UmVjdCkgb3ZlcnJp
ZGU7CisgICAgdmlydHVhbCBib29sIG1vdXNlRXZlbnQoV2ViQ29yZTo6UGFnZU92ZXJsYXkmLCBj
b25zdCBXZWJDb3JlOjpQbGF0Zm9ybU1vdXNlRXZlbnQmKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFs
IHZvaWQgZGlkU2Nyb2xsRnJhbWUoV2ViQ29yZTo6UGFnZU92ZXJsYXkmLCBXZWJDb3JlOjpGcmFt
ZSYpIG92ZXJyaWRlOworCisgICAgdmlydHVhbCBib29sIGNvcHlBY2Nlc3NpYmlsaXR5QXR0cmli
dXRlU3RyaW5nVmFsdWVGb3JQb2ludChXZWJDb3JlOjpQYWdlT3ZlcmxheSYsIFN0cmluZyAvKiBh
dHRyaWJ1dGUgKi8sIFdlYkNvcmU6OkZsb2F0UG9pbnQgLyogcGFyYW1ldGVyICovLCBTdHJpbmcm
IHZhbHVlKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wgY29weUFjY2Vzc2liaWxpdHlBdHRy
aWJ1dGVCb29sVmFsdWVGb3JQb2ludChXZWJDb3JlOjpQYWdlT3ZlcmxheSYsIFN0cmluZyAvKiBh
dHRyaWJ1dGUgKi8sIFdlYkNvcmU6OkZsb2F0UG9pbnQgLyogcGFyYW1ldGVyICovLCBib29sJiB2
YWx1ZSkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBWZWN0b3I8U3RyaW5nPiBjb3B5QWNjZXNzaWJp
bGl0eUF0dHJpYnV0ZU5hbWVzKFdlYkNvcmU6OlBhZ2VPdmVybGF5JiwgYm9vbCAvKiBwYXJhbWV0
ZXJpemVkTmFtZXMgKi8pIG92ZXJyaWRlOworCisKKyAgICBSZWZQdHI8V2ViQ29yZTo6UGFnZU92
ZXJsYXk+IG1fb3ZlcmxheTsKKyAgICBDbGllbnQmIG1fY2xpZW50OworfTsKKworfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBXZWJQYWdlT3ZlcmxheV9oCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL0ZpbmRDb250cm9sbGVySU9TLm1t
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9GaW5kQ29udHJvbGxlcklP
Uy5tbQppbmRleCAwOTA3YmRmLi5kMWFhMDBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL0ZpbmRDb250cm9sbGVySU9TLm1tCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvRmluZENvbnRyb2xsZXJJT1MubW0KQEAgLTM2
LDYgKzM2LDcgQEAKICNpbXBvcnQgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+CiAjaW1wb3J0
IDxXZWJDb3JlL01haW5GcmFtZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9QYWdlLmg+CisjaW1wb3J0
IDxXZWJDb3JlL1BhZ2VPdmVybGF5Q29udHJvbGxlci5oPgogCiB1c2luZyBuYW1lc3BhY2UgV2Vi
Q29yZTsKIApAQCAtNTIsNyArNTMsNyBAQCBzdGF0aWMgQ29sb3IgaGlnaGxpZ2h0Q29sb3IoKQog
CiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotdm9pZCBGaW5kSW5kaWNhdG9yT3ZlcmxheUNsaWVudElP
Uzo6ZHJhd1JlY3QoUGFnZU92ZXJsYXkqIG92ZXJsYXksIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgZGlydHlSZWN0KQordm9pZCBGaW5k
SW5kaWNhdG9yT3ZlcmxheUNsaWVudElPUzo6ZHJhd1JlY3QoUGFnZU92ZXJsYXkmIG92ZXJsYXks
IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KQogewog
ICAgIC8vIEZJWE1FOiBTdXBwb3J0IG11bHRpcGxlIHRleHQgcmVjdHMuCiAKQEAgLTg1LDExICs4
NiwxMSBAQCBib29sIEZpbmRDb250cm9sbGVyOjp1cGRhdGVGaW5kSW5kaWNhdG9yKEZyYW1lJiBz
ZWxlY3RlZEZyYW1lLCBib29sIGlzU2hvd2luZ092ZQogICAgIG1hdGNoUmVjdC5pbmZsYXRlWSh0
b3RhbFZlcnRpY2FsTWFyZ2luKTsKIAogICAgIGlmIChtX2ZpbmRJbmRpY2F0b3JPdmVybGF5KQot
ICAgICAgICBtX3dlYlBhZ2UtPnVuaW5zdGFsbFBhZ2VPdmVybGF5KG1fZmluZEluZGljYXRvck92
ZXJsYXkuZ2V0KCkpOworICAgICAgICBtX3dlYlBhZ2UtPm1haW5GcmFtZSgpLT5wYWdlT3Zlcmxh
eUNvbnRyb2xsZXIoKS51bmluc3RhbGxQYWdlT3ZlcmxheShtX2ZpbmRJbmRpY2F0b3JPdmVybGF5
LmdldCgpLCBQYWdlT3ZlcmxheTo6RmFkZU1vZGU6OkRvTm90RmFkZSk7CiAKICAgICBtX2ZpbmRJ
bmRpY2F0b3JPdmVybGF5Q2xpZW50ID0gc3RkOjptYWtlX3VuaXF1ZTxGaW5kSW5kaWNhdG9yT3Zl
cmxheUNsaWVudElPUz4oc2VsZWN0ZWRGcmFtZSk7Ci0gICAgbV9maW5kSW5kaWNhdG9yT3Zlcmxh
eSA9IFBhZ2VPdmVybGF5OjpjcmVhdGUobV9maW5kSW5kaWNhdG9yT3ZlcmxheUNsaWVudC5nZXQo
KSwgUGFnZU92ZXJsYXk6Ok92ZXJsYXlUeXBlOjpEb2N1bWVudCk7Ci0gICAgbV93ZWJQYWdlLT5p
bnN0YWxsUGFnZU92ZXJsYXkobV9maW5kSW5kaWNhdG9yT3ZlcmxheSk7CisgICAgbV9maW5kSW5k
aWNhdG9yT3ZlcmxheSA9IFBhZ2VPdmVybGF5OjpjcmVhdGUoKm1fZmluZEluZGljYXRvck92ZXJs
YXlDbGllbnQsIFBhZ2VPdmVybGF5OjpPdmVybGF5VHlwZTo6RG9jdW1lbnQpOworICAgIG1fd2Vi
UGFnZS0+Y29yZVBhZ2UoKS0+cGFnZU92ZXJsYXlDb250cm9sbGVyKCkuaW5zdGFsbFBhZ2VPdmVy
bGF5KG1fZmluZEluZGljYXRvck92ZXJsYXksIFBhZ2VPdmVybGF5OjpGYWRlTW9kZTo6RG9Ob3RG
YWRlKTsKIAogICAgIG1fZmluZEluZGljYXRvck92ZXJsYXktPnNldEZyYW1lKG1hdGNoUmVjdCk7
CiAgICAgbV9maW5kSW5kaWNhdG9yT3ZlcmxheS0+c2V0TmVlZHNEaXNwbGF5KCk7CkBAIC0xMDYs
NyArMTA3LDcgQEAgdm9pZCBGaW5kQ29udHJvbGxlcjo6aGlkZUZpbmRJbmRpY2F0b3IoKQogICAg
IGlmICghbV9pc1Nob3dpbmdGaW5kSW5kaWNhdG9yKQogICAgICAgICByZXR1cm47CiAKLSAgICBt
X3dlYlBhZ2UtPnVuaW5zdGFsbFBhZ2VPdmVybGF5KG1fZmluZEluZGljYXRvck92ZXJsYXkuZ2V0
KCkpOworICAgIG1fd2ViUGFnZS0+Y29yZVBhZ2UoKS0+cGFnZU92ZXJsYXlDb250cm9sbGVyKCku
dW5pbnN0YWxsUGFnZU92ZXJsYXkobV9maW5kSW5kaWNhdG9yT3ZlcmxheS5nZXQoKSwgUGFnZU92
ZXJsYXk6OkZhZGVNb2RlOjpEb05vdEZhZGUpOwogICAgIG1fZmluZEluZGljYXRvck92ZXJsYXkg
PSBudWxscHRyOwogICAgIG1faXNTaG93aW5nRmluZEluZGljYXRvciA9IGZhbHNlOwogICAgIG1f
Zm91bmRTdHJpbmdNYXRjaEluZGV4ID0gLTE7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL0ZpbmRJbmRpY2F0b3JPdmVybGF5Q2xpZW50SU9TLmggYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL0ZpbmRJbmRpY2F0b3JPdmVybGF5
Q2xpZW50SU9TLmgKaW5kZXggMzEwMTc2Ny4uNDI5MjI4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9GaW5kSW5kaWNhdG9yT3ZlcmxheUNsaWVudElP
Uy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvRmluZEluZGlj
YXRvck92ZXJsYXlDbGllbnRJT1MuaApAQCAtMjYsMTMgKzI2LDEzIEBACiAjaWZuZGVmIEZpbmRJ
bmRpY2F0b3JPdmVybGF5Q2xpZW50SU9TX2gKICNkZWZpbmUgRmluZEluZGljYXRvck92ZXJsYXlD
bGllbnRJT1NfaAogCi0jaW1wb3J0ICJQYWdlT3ZlcmxheS5oIgogI2ltcG9ydCA8V2ViQ29yZS9G
cmFtZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHQuaD4KKyNpbXBvcnQgPFdl
YkNvcmUvUGFnZU92ZXJsYXkuaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLWNsYXNzIEZpbmRJ
bmRpY2F0b3JPdmVybGF5Q2xpZW50SU9TIDogcHVibGljIFBhZ2VPdmVybGF5OjpDbGllbnQgewor
Y2xhc3MgRmluZEluZGljYXRvck92ZXJsYXlDbGllbnRJT1MgOiBwdWJsaWMgV2ViQ29yZTo6UGFn
ZU92ZXJsYXk6OkNsaWVudCB7CiBwdWJsaWM6CiAgICAgRmluZEluZGljYXRvck92ZXJsYXlDbGll
bnRJT1MoV2ViQ29yZTo6RnJhbWUmIGZyYW1lKQogICAgICAgICA6IG1fZnJhbWUoZnJhbWUpCkBA
IC00MCwxMSArNDAsMTEgQEAgcHVibGljOgogICAgIH0KIAogcHJpdmF0ZToKLSAgICB2aXJ0dWFs
IHZvaWQgcGFnZU92ZXJsYXlEZXN0cm95ZWQoUGFnZU92ZXJsYXkqKSBvdmVycmlkZSB7IH0KLSAg
ICB2aXJ0dWFsIHZvaWQgd2lsbE1vdmVUb1dlYlBhZ2UoUGFnZU92ZXJsYXkqLCBXZWJQYWdlKikg
b3ZlcnJpZGUgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGRpZE1vdmVUb1dlYlBhZ2UoUGFnZU92ZXJs
YXkqLCBXZWJQYWdlKikgb3ZlcnJpZGUgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGRyYXdSZWN0KFBh
Z2VPdmVybGF5KiwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiwgY29uc3QgV2ViQ29yZTo6SW50
UmVjdCYgZGlydHlSZWN0KSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIGJvb2wgbW91c2VFdmVudChQ
YWdlT3ZlcmxheSosIGNvbnN0IFdlYk1vdXNlRXZlbnQmKSBvdmVycmlkZSB7IHJldHVybiBmYWxz
ZTsgfQorICAgIHZpcnR1YWwgdm9pZCBwYWdlT3ZlcmxheURlc3Ryb3llZChXZWJDb3JlOjpQYWdl
T3ZlcmxheSYpIG92ZXJyaWRlIHsgfQorICAgIHZpcnR1YWwgdm9pZCB3aWxsTW92ZVRvUGFnZShX
ZWJDb3JlOjpQYWdlT3ZlcmxheSYsIFdlYkNvcmU6OlBhZ2UqKSBvdmVycmlkZSB7IH0KKyAgICB2
aXJ0dWFsIHZvaWQgZGlkTW92ZVRvUGFnZShXZWJDb3JlOjpQYWdlT3ZlcmxheSYsIFdlYkNvcmU6
OlBhZ2UqKSBvdmVycmlkZSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZHJhd1JlY3QoV2ViQ29yZTo6
UGFnZU92ZXJsYXkmLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmLCBjb25zdCBXZWJDb3JlOjpJ
bnRSZWN0JiBkaXJ0eVJlY3QpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBtb3VzZUV2ZW50
KFdlYkNvcmU6OlBhZ2VPdmVybGF5JiwgY29uc3QgV2ViQ29yZTo6UGxhdGZvcm1Nb3VzZUV2ZW50
Jikgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KIAogICAgIFdlYkNvcmU6OkZyYW1lJiBtX2Zy
YW1lOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9t
YWMvUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWEuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9tYWMvUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWEuaAppbmRleCAxY2I1MTAw
Li5jNTJhM2JmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
bWFjL1JlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhLmgKKysrIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL21hYy9SZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYS5oCkBAIC02Nyw2
ICs2Nyw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIHNldFJvb3RDb21wb3NpdGluZ0xh
eWVyKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQg
c2NoZWR1bGVDb21wb3NpdGluZ0xheWVyRmx1c2goKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZv
aWQgc2NoZWR1bGVDb21wb3NpdGluZ0xheWVyRmx1c2hJbW1lZGlhdGVseSgpIG92ZXJyaWRlOwor
ICAgIHZpcnR1YWwgdm9pZCBhdHRhY2hWaWV3T3ZlcmxheUdyYXBoaWNzTGF5ZXIoV2ViQ29yZTo6
RnJhbWUqLCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKikgb3ZlcnJpZGU7CiAKICAgICB2aXJ0dWFs
IHZvaWQgYWRkVHJhbnNhY3Rpb25DYWxsYmFja0lEKHVpbnQ2NF90IGNhbGxiYWNrSUQpIG92ZXJy
aWRlOwogCkBAIC0xMDcsNiArMTA4LDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wgYWRq
dXN0TGF5ZXJGbHVzaFRocm90dGxpbmcoV2ViQ29yZTo6TGF5ZXJGbHVzaFRocm90dGxlU3RhdGU6
OkZsYWdzKSBvdmVycmlkZTsKIAogICAgIHZvaWQgdXBkYXRlU2Nyb2xsZWRFeHBvc2VkUmVjdCgp
OworICAgIHZvaWQgdXBkYXRlUm9vdExheWVycygpOwogCiAgICAgdm9pZCBsYXllckZsdXNoVGlt
ZXJGaXJlZChXZWJDb3JlOjpUaW1lcjxSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYT4qKTsKICAg
ICB2b2lkIGZsdXNoTGF5ZXJzKCk7CkBAIC0xNjAsNiArMTYyLDkgQEAgcHJpdmF0ZToKIAogICAg
IHVpbnQ2NF90IG1fY3VycmVudFRyYW5zYWN0aW9uSUQ7CiAgICAgVmVjdG9yPFJlbW90ZUxheWVy
VHJlZVRyYW5zYWN0aW9uOjpUcmFuc2FjdGlvbkNhbGxiYWNrSUQ+IG1fcGVuZGluZ0NhbGxiYWNr
SURzOworCisgICAgV2ViQ29yZTo6R3JhcGhpY3NMYXllciogbV9jb250ZW50TGF5ZXI7CisgICAg
V2ViQ29yZTo6R3JhcGhpY3NMYXllciogbV92aWV3T3ZlcmxheVJvb3RMYXllcjsKIH07CiAKIERS
QVdJTkdfQVJFQV9UWVBFX0NBU1RTKFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhLCB0eXBlKCkg
PT0gRHJhd2luZ0FyZWFUeXBlUmVtb3RlTGF5ZXJUcmVlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWEu
bW0gYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1JlbW90ZUxheWVyVHJl
ZURyYXdpbmdBcmVhLm1tCmluZGV4IDM3Yzg5NDcuLjU3OGQzOTcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0Fy
ZWEubW0KKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9SZW1vdGVM
YXllclRyZWVEcmF3aW5nQXJlYS5tbQpAQCAtNDAsNiArNDAsNyBAQAogI2ltcG9ydCA8V2ViQ29y
ZS9GcmFtZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9GcmFtZVZpZXcuaD4KICNpbXBvcnQgPFdlYkNv
cmUvTWFpbkZyYW1lLmg+CisjaW1wb3J0IDxXZWJDb3JlL1BhZ2VPdmVybGF5Q29udHJvbGxlci5o
PgogI2ltcG9ydCA8V2ViQ29yZS9SZW5kZXJMYXllckNvbXBvc2l0b3IuaD4KICNpbXBvcnQgPFdl
YkNvcmUvUmVuZGVyVmlldy5oPgogI2ltcG9ydCA8V2ViQ29yZS9TZXR0aW5ncy5oPgpAQCAtNjYs
NiArNjcsOCBAQCBSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYTo6UmVtb3RlTGF5ZXJUcmVlRHJh
d2luZ0FyZWEoV2ViUGFnZSYgd2ViUGFnZSwgY29uc3QgVwogICAgICwgbV9oYWRGbHVzaERlZmVy
cmVkV2hpbGVXYWl0aW5nRm9yQmFja2luZ1N0b3JlU3dhcChmYWxzZSkKICAgICAsIG1fZGlzcGxh
eVJlZnJlc2hNb25pdG9yc1RvTm90aWZ5KG51bGxwdHIpCiAgICAgLCBtX2N1cnJlbnRUcmFuc2Fj
dGlvbklEKDApCisgICAgLCBtX2NvbnRlbnRMYXllcihudWxscHRyKQorICAgICwgbV92aWV3T3Zl
cmxheVJvb3RMYXllcihudWxscHRyKQogewogICAgIHdlYlBhZ2UuY29yZVBhZ2UoKS0+c2V0dGlu
Z3MoKS5zZXRGb3JjZUNvbXBvc2l0aW5nTW9kZSh0cnVlKTsKICNpZiBQTEFURk9STShJT1MpCkBA
IC0xMTMsMTUgKzExNiwzMSBAQCB2b2lkIFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhOjp3aWxs
RGVzdHJveURpc3BsYXlSZWZyZXNoTW9uaXRvcihEaXNwbGF5UmVmcmVzaAogICAgICAgICBtX2Rp
c3BsYXlSZWZyZXNoTW9uaXRvcnNUb05vdGlmeS0+cmVtb3ZlKHJlbW90ZU1vbml0b3IpOwogfQog
Ci12b2lkIFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhOjpzZXRSb290Q29tcG9zaXRpbmdMYXll
cihHcmFwaGljc0xheWVyKiByb290TGF5ZXIpCit2b2lkIFJlbW90ZUxheWVyVHJlZURyYXdpbmdB
cmVhOjp1cGRhdGVSb290TGF5ZXJzKCkKIHsKICAgICBWZWN0b3I8R3JhcGhpY3NMYXllcio+IGNo
aWxkcmVuOwotICAgIGlmIChyb290TGF5ZXIpIHsKLSAgICAgICAgY2hpbGRyZW4uYXBwZW5kKHJv
b3RMYXllcik7Ci0gICAgICAgIGNoaWxkcmVuLmFwcGVuZChtX3dlYlBhZ2UucGFnZU92ZXJsYXlD
b250cm9sbGVyKCkudmlld092ZXJsYXlSb290TGF5ZXIoKSk7CisgICAgaWYgKG1fY29udGVudExh
eWVyKSB7CisgICAgICAgIGNoaWxkcmVuLmFwcGVuZChtX2NvbnRlbnRMYXllcik7CisgICAgICAg
IGlmIChtX3ZpZXdPdmVybGF5Um9vdExheWVyKQorICAgICAgICAgICAgY2hpbGRyZW4uYXBwZW5k
KG1fdmlld092ZXJsYXlSb290TGF5ZXIpOwogICAgIH0KKwogICAgIG1fcm9vdExheWVyLT5zZXRD
aGlsZHJlbihjaGlsZHJlbik7Cit9CisKK3ZvaWQgUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWE6
OmF0dGFjaFZpZXdPdmVybGF5R3JhcGhpY3NMYXllcihGcmFtZSogZnJhbWUsIEdyYXBoaWNzTGF5
ZXIqIHZpZXdPdmVybGF5Um9vdExheWVyKQoreworICAgIGlmICghZnJhbWUtPmlzTWFpbkZyYW1l
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fdmlld092ZXJsYXlSb290TGF5ZXIgPSB2aWV3
T3ZlcmxheVJvb3RMYXllcjsKKyAgICB1cGRhdGVSb290TGF5ZXJzKCk7Cit9CiAKK3ZvaWQgUmVt
b3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWE6OnNldFJvb3RDb21wb3NpdGluZ0xheWVyKEdyYXBoaWNz
TGF5ZXIqIHJvb3RMYXllcikKK3sKKyAgICBtX2NvbnRlbnRMYXllciA9IHJvb3RMYXllcjsKKyAg
ICB1cGRhdGVSb290TGF5ZXJzKCk7CiAgICAgc2NoZWR1bGVDb21wb3NpdGluZ0xheWVyRmx1c2go
KTsKIH0KIApAQCAtMjM0LDggKzI1Myw2IEBAIHZvaWQgUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0Fy
ZWE6OnVwZGF0ZVNjcm9sbGVkRXhwb3NlZFJlY3QoKQogI2VuZGlmCiAKICAgICBmcmFtZVZpZXct
PnNldEV4cG9zZWRSZWN0KG1fc2Nyb2xsZWRFeHBvc2VkUmVjdCk7Ci0KLSAgICBtX3dlYlBhZ2Uu
cGFnZU92ZXJsYXlDb250cm9sbGVyKCkuZGlkQ2hhbmdlRXhwb3NlZFJlY3QoKTsKIH0KIAogVGls
ZWRCYWNraW5nKiBSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYTo6bWFpbkZyYW1lVGlsZWRCYWNr
aW5nKCkgY29uc3QKQEAgLTMyMSw4ICszMzgsMTMgQEAgdm9pZCBSZW1vdGVMYXllclRyZWVEcmF3
aW5nQXJlYTo6Zmx1c2hMYXllcnMoKQogCiAgICAgRmxvYXRSZWN0IHZpc2libGVSZWN0KEZsb2F0
UG9pbnQoKSwgbV92aWV3U2l6ZSk7CiAgICAgdmlzaWJsZVJlY3QuaW50ZXJzZWN0KG1fc2Nyb2xs
ZWRFeHBvc2VkUmVjdCk7Ci0gICAgbV93ZWJQYWdlLnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLmZs
dXNoUGFnZU92ZXJsYXlMYXllcnModmlzaWJsZVJlY3QpOworCiAgICAgbV93ZWJQYWdlLm1haW5G
cmFtZVZpZXcoKS0+Zmx1c2hDb21wb3NpdGluZ1N0YXRlSW5jbHVkaW5nU3ViZnJhbWVzKCk7CisK
KyAgICAvLyBCZWNhdXNlIG91ciB2aWV3LXJlbGF0aXZlIG92ZXJsYXkgcm9vdCBsYXllciBpcyBu
b3QgYXR0YWNoZWQgdG8gdGhlIEZyYW1lVmlldydzIEdyYXBoaWNzTGF5ZXIgdHJlZSwgd2UgbmVl
ZCB0byBmbHVzaCBpdCBtYW51YWxseS4KKyAgICBpZiAobV92aWV3T3ZlcmxheVJvb3RMYXllcikK
KyAgICAgICAgbV92aWV3T3ZlcmxheVJvb3RMYXllci0+Zmx1c2hDb21wb3NpdGluZ1N0YXRlKHZp
c2libGVSZWN0KTsKKwogICAgIG1fcm9vdExheWVyLT5mbHVzaENvbXBvc2l0aW5nU3RhdGVGb3JU
aGlzTGF5ZXJPbmx5KCk7CiAKICAgICAvLyBGSVhNRTogTWluaW1pemUgdGhlc2UgdHJhbnNhY3Rp
b25zIGlmIG5vdGhpbmcgY2hhbmdlZC4KQEAgLTQxMCw3ICs0MzIsNiBAQCB2b2lkIFJlbW90ZUxh
eWVyVHJlZURyYXdpbmdBcmVhOjpkaWRVcGRhdGUoKQogdm9pZCBSZW1vdGVMYXllclRyZWVEcmF3
aW5nQXJlYTo6bWFpbkZyYW1lQ29udGVudFNpemVDaGFuZ2VkKGNvbnN0IEludFNpemUmIGNvbnRl
bnRzU2l6ZSkKIHsKICAgICBtX3Jvb3RMYXllci0+c2V0U2l6ZShjb250ZW50c1NpemUpOwotICAg
IG1fd2ViUGFnZS5wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKS5kaWRDaGFuZ2VEb2N1bWVudFNpemUo
KTsKIH0KIAogYm9vbCBSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYTo6bWFya0xheWVyc1ZvbGF0
aWxlSW1tZWRpYXRlbHlJZlBvc3NpYmxlKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9tYWMvU2VydmljZXNPdmVybGF5Q29udHJvbGxlci5tbSBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvU2VydmljZXNPdmVybGF5Q29udHJvbGxl
ci5tbQppbmRleCBmYjY4YjdhLi41YTViZDkyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1NlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIubW0KKysrIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9TZXJ2aWNlc092ZXJsYXlDb250
cm9sbGVyLm1tCkBAIC00Miw2ICs0Miw3IEBACiAjaW1wb3J0IDxXZWJDb3JlL0dyYXBoaWNzTGF5
ZXIuaD4KICNpbXBvcnQgPFdlYkNvcmUvR3JhcGhpY3NMYXllckNBLmg+CiAjaW1wb3J0IDxXZWJD
b3JlL01haW5GcmFtZS5oPgorI2ltcG9ydCA8V2ViQ29yZS9QYWdlT3ZlcmxheUNvbnRyb2xsZXIu
aD4KICNpbXBvcnQgPFdlYkNvcmUvUGxhdGZvcm1DQUFuaW1hdGlvbk1hYy5oPgogI2ltcG9ydCA8
V2ViQ29yZS9Tb2Z0TGlua2luZy5oPgogCkBAIC0yMjUsMjMgKzIyNiwyMyBAQCBTZXJ2aWNlc092
ZXJsYXlDb250cm9sbGVyOjp+U2VydmljZXNPdmVybGF5Q29udHJvbGxlcigpCiAgICAgICAgIGhp
Z2hsaWdodC0+aW52YWxpZGF0ZSgpOwogfQogCi12b2lkIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xs
ZXI6OnBhZ2VPdmVybGF5RGVzdHJveWVkKFBhZ2VPdmVybGF5KikKK3ZvaWQgU2VydmljZXNPdmVy
bGF5Q29udHJvbGxlcjo6cGFnZU92ZXJsYXlEZXN0cm95ZWQoUGFnZU92ZXJsYXkmKQogewogICAg
IC8vIEJlZm9yZSB0aGUgb3ZlcmxheSBpcyBkZXN0cm95ZWQsIGl0IHNob3VsZCBoYXZlIG1vdmVk
IG91dCBvZiB0aGUgV2ViUGFnZSwKICAgICAvLyBhdCB3aGljaCBwb2ludCB3ZSBhbHJlYWR5IGNs
ZWFyZWQgb3VyIGJhY2sgcG9pbnRlci4KICAgICBBU1NFUlQoIW1fc2VydmljZXNPdmVybGF5KTsK
IH0KIAotdm9pZCBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjp3aWxsTW92ZVRvV2ViUGFnZShQ
YWdlT3ZlcmxheSosIFdlYlBhZ2UqIHdlYlBhZ2UpCit2b2lkIFNlcnZpY2VzT3ZlcmxheUNvbnRy
b2xsZXI6OndpbGxNb3ZlVG9QYWdlKFBhZ2VPdmVybGF5JiwgUGFnZSogcGFnZSkKIHsKLSAgICBp
ZiAod2ViUGFnZSkKKyAgICBpZiAocGFnZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgQVNTRVJU
KG1fc2VydmljZXNPdmVybGF5KTsKICAgICBtX3NlcnZpY2VzT3ZlcmxheSA9IG51bGxwdHI7CiB9
CiAKLXZvaWQgU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6ZGlkTW92ZVRvV2ViUGFnZShQYWdl
T3ZlcmxheSosIFdlYlBhZ2UqKQordm9pZCBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpkaWRN
b3ZlVG9QYWdlKFBhZ2VPdmVybGF5JiwgUGFnZSopCiB7CiB9CiAKQEAgLTQ0Nyw3ICs0NDgsNyBA
QCB2b2lkIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OmRldGVybWluZUFjdGl2ZUhpZ2hsaWdo
dFRpbWVyRmlyZWQoVGltZXI8U2VydmljZQogICAgIGRldGVybWluZUFjdGl2ZUhpZ2hsaWdodCht
b3VzZUlzT3ZlckJ1dHRvbik7CiB9CiAKLXZvaWQgU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6
ZHJhd1JlY3QoUGFnZU92ZXJsYXkqIG92ZXJsYXksIEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3ND
b250ZXh0LCBjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpCit2b2lkIFNlcnZpY2VzT3ZlcmxheUNv
bnRyb2xsZXI6OmRyYXdSZWN0KFBhZ2VPdmVybGF5JiBvdmVybGF5LCBHcmFwaGljc0NvbnRleHQm
IGdyYXBoaWNzQ29udGV4dCwgY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KQogewogfQogCkBAIC01
ODMsNyArNTg0LDcgQEAgdm9pZCBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpkaWRSZWJ1aWxk
UG90ZW50aWFsSGlnaGxpZ2h0cygpCiB7CiAgICAgaWYgKG1fcG90ZW50aWFsSGlnaGxpZ2h0cy5p
c0VtcHR5KCkpIHsKICAgICAgICAgaWYgKG1fc2VydmljZXNPdmVybGF5KQotICAgICAgICAgICAg
bV93ZWJQYWdlLnVuaW5zdGFsbFBhZ2VPdmVybGF5KG1fc2VydmljZXNPdmVybGF5KTsKKyAgICAg
ICAgICAgIG1fd2ViUGFnZS5tYWluRnJhbWUoKS0+cGFnZU92ZXJsYXlDb250cm9sbGVyKCkudW5p
bnN0YWxsUGFnZU92ZXJsYXkobV9zZXJ2aWNlc092ZXJsYXksIFBhZ2VPdmVybGF5OjpGYWRlTW9k
ZTo6RG9Ob3RGYWRlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtNjAxLDkgKzYwMiw5
IEBAIHZvaWQgU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6Y3JlYXRlT3ZlcmxheUlmTmVlZGVk
KCkKICAgICBpZiAobV9zZXJ2aWNlc092ZXJsYXkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFJl
ZlB0cjxQYWdlT3ZlcmxheT4gb3ZlcmxheSA9IFBhZ2VPdmVybGF5OjpjcmVhdGUodGhpcywgUGFn
ZU92ZXJsYXk6Ok92ZXJsYXlUeXBlOjpEb2N1bWVudCk7CisgICAgUmVmUHRyPFBhZ2VPdmVybGF5
PiBvdmVybGF5ID0gUGFnZU92ZXJsYXk6OmNyZWF0ZSgqdGhpcywgUGFnZU92ZXJsYXk6Ok92ZXJs
YXlUeXBlOjpEb2N1bWVudCk7CiAgICAgbV9zZXJ2aWNlc092ZXJsYXkgPSBvdmVybGF5LmdldCgp
OwotICAgIG1fd2ViUGFnZS5pbnN0YWxsUGFnZU92ZXJsYXkob3ZlcmxheS5yZWxlYXNlKCksIFBh
Z2VPdmVybGF5OjpGYWRlTW9kZTo6RG9Ob3RGYWRlKTsKKyAgICBtX3dlYlBhZ2UubWFpbkZyYW1l
KCktPnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLmluc3RhbGxQYWdlT3ZlcmxheShvdmVybGF5LnJl
bGVhc2UoKSwgUGFnZU92ZXJsYXk6OkZhZGVNb2RlOjpEb05vdEZhZGUpOwogfQogCiBWZWN0b3I8
UmVmUHRyPFJhbmdlPj4gU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6dGVsZXBob25lTnVtYmVy
UmFuZ2VzRm9yRm9jdXNlZEZyYW1lKCkKQEAgLTcxNywxMyArNzE4LDEzIEBAIHZvaWQgU2Vydmlj
ZXNPdmVybGF5Q29udHJvbGxlcjo6ZGV0ZXJtaW5lQWN0aXZlSGlnaGxpZ2h0KGJvb2wmIG1vdXNl
SXNPdmVyQWN0aXZlCiAgICAgICAgIG1fYWN0aXZlSGlnaGxpZ2h0ID0gbV9uZXh0QWN0aXZlSGln
aGxpZ2h0LnJlbGVhc2UoKTsKIAogICAgICAgICBpZiAobV9hY3RpdmVIaWdobGlnaHQpIHsKLSAg
ICAgICAgICAgIG1fc2VydmljZXNPdmVybGF5LT5sYXllcigpLT5hZGRDaGlsZChtX2FjdGl2ZUhp
Z2hsaWdodC0+bGF5ZXIoKSk7CisgICAgICAgICAgICBtX3NlcnZpY2VzT3ZlcmxheS0+bGF5ZXIo
KS5hZGRDaGlsZChtX2FjdGl2ZUhpZ2hsaWdodC0+bGF5ZXIoKSk7CiAgICAgICAgICAgICBtX2Fj
dGl2ZUhpZ2hsaWdodC0+ZmFkZUluKCk7CiAgICAgICAgIH0KICAgICB9CiB9CiAKLWJvb2wgU2Vy
dmljZXNPdmVybGF5Q29udHJvbGxlcjo6bW91c2VFdmVudChQYWdlT3ZlcmxheSosIGNvbnN0IFdl
Yk1vdXNlRXZlbnQmIGV2ZW50KQorYm9vbCBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjptb3Vz
ZUV2ZW50KFBhZ2VPdmVybGF5JiwgY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBldmVudCkKIHsK
ICAgICBtX21vdXNlUG9zaXRpb24gPSBtX3dlYlBhZ2UuY29yZVBhZ2UoKS0+bWFpbkZyYW1lKCku
dmlldygpLT5yb290Vmlld1RvQ29udGVudHMoZXZlbnQucG9zaXRpb24oKSk7CiAKQEAgLTczMSwx
MyArNzMyLDEzIEBAIGJvb2wgU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6bW91c2VFdmVudChQ
YWdlT3ZlcmxheSosIGNvbnN0IFdlYk1vdXNlRXZlbnQmIGV2CiAgICAgZGV0ZXJtaW5lQWN0aXZl
SGlnaGxpZ2h0KG1vdXNlSXNPdmVyQWN0aXZlSGlnaGxpZ2h0QnV0dG9uKTsKIAogICAgIC8vIENh
bmNlbCB0aGUgcG90ZW50aWFsIGNsaWNrIGlmIGFueSBidXR0b24gb3RoZXIgdGhhbiB0aGUgbGVm
dCBidXR0b24gY2hhbmdlcyBzdGF0ZSwgYW5kIGlnbm9yZSB0aGUgZXZlbnQuCi0gICAgaWYgKGV2
ZW50LmJ1dHRvbigpICE9IFdlYk1vdXNlRXZlbnQ6OkxlZnRCdXR0b24pIHsKKyAgICBpZiAoZXZl
bnQuYnV0dG9uKCkgIT0gTW91c2VCdXR0b246OkxlZnRCdXR0b24pIHsKICAgICAgICAgbV9jdXJy
ZW50TW91c2VEb3duT25CdXR0b25IaWdobGlnaHQgPSBudWxscHRyOwogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgfQogCiAgICAgLy8gSWYgdGhlIG1vdXNlIGxpZnRlZCB3aGlsZSBzdGlsbCBv
dmVyIHRoZSBoaWdobGlnaHQgYnV0dG9uIHRoYXQgaXQgd2VudCBkb3duIG9uLCB0aGVuIHRoYXQg
aXMgYSBjbGljay4KLSAgICBpZiAoZXZlbnQudHlwZSgpID09IFdlYkV2ZW50OjpNb3VzZVVwKSB7
CisgICAgaWYgKGV2ZW50LnR5cGUoKSA9PSBQbGF0Zm9ybUV2ZW50OjpNb3VzZVJlbGVhc2VkKSB7
CiAgICAgICAgIFJlZlB0cjxIaWdobGlnaHQ+IG1vdXNlRG93bkhpZ2hsaWdodCA9IG1fY3VycmVu
dE1vdXNlRG93bk9uQnV0dG9uSGlnaGxpZ2h0OwogICAgICAgICBtX2N1cnJlbnRNb3VzZURvd25P
bkJ1dHRvbkhpZ2hsaWdodCA9IG51bGxwdHI7CiAKQEAgLTc1Miw3ICs3NTMsNyBAQCBib29sIFNl
cnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6Om1vdXNlRXZlbnQoUGFnZU92ZXJsYXkqLCBjb25zdCBX
ZWJNb3VzZUV2ZW50JiBldgogICAgIH0KIAogICAgIC8vIElmIHRoZSBtb3VzZSBtb3ZlZCBvdXRz
aWRlIG9mIHRoZSBidXR0b24gdHJhY2tpbmcgYSBwb3RlbnRpYWwgY2xpY2ssIHN0b3AgdHJhY2tp
bmcgdGhlIGNsaWNrLgotICAgIGlmIChldmVudC50eXBlKCkgPT0gV2ViRXZlbnQ6Ok1vdXNlTW92
ZSkgeworICAgIGlmIChldmVudC50eXBlKCkgPT0gUGxhdGZvcm1FdmVudDo6TW91c2VNb3ZlZCkg
ewogICAgICAgICBpZiAobV9jdXJyZW50TW91c2VEb3duT25CdXR0b25IaWdobGlnaHQgJiYgbW91
c2VJc092ZXJBY3RpdmVIaWdobGlnaHRCdXR0b24pCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
IApAQCAtNzYxLDcgKzc2Miw3IEBAIGJvb2wgU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6bW91
c2VFdmVudChQYWdlT3ZlcmxheSosIGNvbnN0IFdlYk1vdXNlRXZlbnQmIGV2CiAgICAgfQogCiAg
ICAgLy8gSWYgdGhlIG1vdXNlIHdlbnQgZG93biBvdmVyIHRoZSBhY3RpdmUgaGlnaGxpZ2h0J3Mg
YnV0dG9uLCB0cmFjayB0aGlzIGFzIGEgcG90ZW50aWFsIGNsaWNrLgotICAgIGlmIChldmVudC50
eXBlKCkgPT0gV2ViRXZlbnQ6Ok1vdXNlRG93bikgeworICAgIGlmIChldmVudC50eXBlKCkgPT0g
UGxhdGZvcm1FdmVudDo6TW91c2VQcmVzc2VkKSB7CiAgICAgICAgIGlmIChtX2FjdGl2ZUhpZ2hs
aWdodCAmJiBtb3VzZUlzT3ZlckFjdGl2ZUhpZ2hsaWdodEJ1dHRvbikgewogICAgICAgICAgICAg
bV9jdXJyZW50TW91c2VEb3duT25CdXR0b25IaWdobGlnaHQgPSBtX2FjdGl2ZUhpZ2hsaWdodDsK
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtNzczLDkgKzc3NCw5IEBAIGJvb2wgU2Vydmlj
ZXNPdmVybGF5Q29udHJvbGxlcjo6bW91c2VFdmVudChQYWdlT3ZlcmxheSosIGNvbnN0IFdlYk1v
dXNlRXZlbnQmIGV2CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIFNlcnZpY2VzT3Zlcmxh
eUNvbnRyb2xsZXI6OmRpZFNjcm9sbEZyYW1lKFBhZ2VPdmVybGF5KiwgRnJhbWUqIGZyYW1lKQor
dm9pZCBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpkaWRTY3JvbGxGcmFtZShQYWdlT3Zlcmxh
eSYsIEZyYW1lJiBmcmFtZSkKIHsKLSAgICBpZiAoZnJhbWUtPmlzTWFpbkZyYW1lKCkpCisgICAg
aWYgKGZyYW1lLmlzTWFpbkZyYW1lKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGJ1aWxkUGhv
bmVOdW1iZXJIaWdobGlnaHRzKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvbWFjL1RpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhLmggYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1RpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdB
cmVhLmgKaW5kZXggYjgxYTRhNC4uOWU1YWJkYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9UaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYS5oCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvVGlsZWRDb3JlQW5pbWF0
aW9uRHJhd2luZ0FyZWEuaApAQCAtODQsNiArODQsOCBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwg
dm9pZCB2aWV3U3RhdGVEaWRDaGFuZ2UoV2ViQ29yZTo6Vmlld1N0YXRlOjpGbGFncyBjaGFuZ2Vk
LCBib29sIHdhbnRzRGlkVXBkYXRlVmlld1N0YXRlKSBvdmVycmlkZTsKICAgICB2b2lkIGRpZFVw
ZGF0ZVZpZXdTdGF0ZVRpbWVyRmlyZWQoKTsKIAorICAgIHZpcnR1YWwgdm9pZCBhdHRhY2hWaWV3
T3ZlcmxheUdyYXBoaWNzTGF5ZXIoV2ViQ29yZTo6RnJhbWUqLCBXZWJDb3JlOjpHcmFwaGljc0xh
eWVyKikgb3ZlcnJpZGU7CisKICAgICAvLyBXZWJDb3JlOjpMYXllckZsdXNoU2NoZWR1bGVyQ2xp
ZW50CiAgICAgdmlydHVhbCBib29sIGZsdXNoTGF5ZXJzKCkgb3ZlcnJpZGU7CiAKQEAgLTEwNiw2
ICsxMDgsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgdXBkYXRlTGF5ZXJIb3N0aW5nQ29udGV4dCgp
OwogCiAgICAgdm9pZCBzZXRSb290Q29tcG9zaXRpbmdMYXllcihDQUxheWVyICopOworICAgIHZv
aWQgdXBkYXRlUm9vdExheWVycygpOwogCiAgICAgV2ViQ29yZTo6VGlsZWRCYWNraW5nKiBtYWlu
RnJhbWVUaWxlZEJhY2tpbmcoKSBjb25zdDsKICAgICB2b2lkIHVwZGF0ZURlYnVnSW5mb0xheWVy
KGJvb2wgc2hvd0xheWVyKTsKQEAgLTEzOCw2ICsxNDEsOCBAQCBwcml2YXRlOgogICAgIFdlYkNv
cmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4IG1fdHJhbnNmb3JtOwogCiAgICAgUnVuTG9vcDo6VGlt
ZXI8VGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWE+IG1fc2VuZERpZFVwZGF0ZVZpZXdTdGF0
ZVRpbWVyOworCisgICAgV2ViQ29yZTo6R3JhcGhpY3NMYXllciogbV92aWV3T3ZlcmxheVJvb3RM
YXllcjsKIH07CiAKIERSQVdJTkdfQVJFQV9UWVBFX0NBU1RTKFRpbGVkQ29yZUFuaW1hdGlvbkRy
YXdpbmdBcmVhLCB0eXBlKCkgPT0gRHJhd2luZ0FyZWFUeXBlVGlsZWRDb3JlQW5pbWF0aW9uKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvVGlsZWRD
b3JlQW5pbWF0aW9uRHJhd2luZ0FyZWEubW0gYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvbWFjL1RpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhLm1tCmluZGV4IGU3NzU5MTku
LjI5OGIwMjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9t
YWMvVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWEubW0KKysrIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9UaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYS5tbQpA
QCAtNTEsNiArNTEsNyBAQAogI2ltcG9ydCA8V2ViQ29yZS9TY3JvbGxiYXJUaGVtZS5oPgogI2lt
cG9ydCA8V2ViQ29yZS9TZXR0aW5ncy5oPgogI2ltcG9ydCA8V2ViQ29yZS9UaWxlZEJhY2tpbmcu
aD4KKyNpbXBvcnQgPFdlYkNvcmUvV2ViQWN0aW9uRGlzYWJsaW5nQ0FMYXllckRlbGVnYXRlLmg+
CiAjaW1wb3J0IDx3dGYvTWFpblRocmVhZC5oPgogCiAjaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElO
RykKQEAgLTc2LDEwICs3NywxMiBAQCBUaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYTo6VGls
ZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWEoV2ViUGFnZSYgd2ViUGFnZSwgYwogICAgICwgbV9z
Y3JvbGxlZEV4cG9zZWRSZWN0KEZsb2F0UmVjdDo6aW5maW5pdGVSZWN0KCkpCiAgICAgLCBtX3Ry
YW5zaWVudFpvb21TY2FsZSgxKQogICAgICwgbV9zZW5kRGlkVXBkYXRlVmlld1N0YXRlVGltZXIo
UnVuTG9vcDo6bWFpbigpLCB0aGlzLCAmVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWE6OmRp
ZFVwZGF0ZVZpZXdTdGF0ZVRpbWVyRmlyZWQpCisgICAgLCBtX3ZpZXdPdmVybGF5Um9vdExheWVy
KG51bGxwdHIpCiB7CiAgICAgbV93ZWJQYWdlLmNvcmVQYWdlKCktPnNldHRpbmdzKCkuc2V0Rm9y
Y2VDb21wb3NpdGluZ01vZGUodHJ1ZSk7CiAKICAgICBtX2hvc3RpbmdMYXllciA9IFtDQUxheWVy
IGxheWVyXTsKKyAgICBbbV9ob3N0aW5nTGF5ZXIgc2V0RGVsZWdhdGU6W1dlYkFjdGlvbkRpc2Fi
bGluZ0NBTGF5ZXJEZWxlZ2F0ZSBzaGFyZWRdXTsKICAgICBbbV9ob3N0aW5nTGF5ZXIgc2V0RnJh
bWU6bV93ZWJQYWdlLmJvdW5kcygpXTsKICAgICBbbV9ob3N0aW5nTGF5ZXIgc2V0T3BhcXVlOllF
U107CiAgICAgW21faG9zdGluZ0xheWVyIHNldEdlb21ldHJ5RmxpcHBlZDpZRVNdOwpAQCAtMjA0
LDkgKzIwNywyOCBAQCB2b2lkIFRpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhOjp1cGRhdGVQ
cmVmZXJlbmNlcyhjb25zdCBXZWJQcmVmZXJlbmNlc1N0b3JlJgogICAgIHVwZGF0ZURlYnVnSW5m
b0xheWVyKHNob3dUaWxlZFNjcm9sbGluZ0luZGljYXRvcik7CiB9CiAKK3ZvaWQgVGlsZWRDb3Jl
QW5pbWF0aW9uRHJhd2luZ0FyZWE6OnVwZGF0ZVJvb3RMYXllcnMoKQoreworICAgIGlmICghbV9y
b290TGF5ZXIpIHsKKyAgICAgICAgW21faG9zdGluZ0xheWVyIHNldFN1YmxheWVyczpAWyBdXTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFttX2hvc3RpbmdMYXllciBzZXRTdWJsYXll
cnM6bV92aWV3T3ZlcmxheVJvb3RMYXllciA/IEBbIG1fcm9vdExheWVyLmdldCgpLCBtX3ZpZXdP
dmVybGF5Um9vdExheWVyLT5wbGF0Zm9ybUxheWVyKCkgXSA6IEBbIG1fcm9vdExheWVyLmdldCgp
IF1dOworfQorCit2b2lkIFRpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhOjphdHRhY2hWaWV3
T3ZlcmxheUdyYXBoaWNzTGF5ZXIoRnJhbWUqIGZyYW1lLCBHcmFwaGljc0xheWVyKiB2aWV3T3Zl
cmxheVJvb3RMYXllcikKK3sKKyAgICBpZiAoIWZyYW1lLT5pc01haW5GcmFtZSgpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBtX3ZpZXdPdmVybGF5Um9vdExheWVyID0gdmlld092ZXJsYXlSb290
TGF5ZXI7CisgICAgdXBkYXRlUm9vdExheWVycygpOworfQorCiB2b2lkIFRpbGVkQ29yZUFuaW1h
dGlvbkRyYXdpbmdBcmVhOjptYWluRnJhbWVDb250ZW50U2l6ZUNoYW5nZWQoY29uc3QgSW50U2l6
ZSYgc2l6ZSkKIHsKLSAgICBtX3dlYlBhZ2UucGFnZU92ZXJsYXlDb250cm9sbGVyKCkuZGlkQ2hh
bmdlRG9jdW1lbnRTaXplKCk7CisKIH0KIAogdm9pZCBUaWxlZENvcmVBbmltYXRpb25EcmF3aW5n
QXJlYTo6dXBkYXRlSW50cmluc2ljQ29udGVudFNpemVJZk5lZWRlZCgpCkBAIC0yODMsNyArMzA1
LDEwIEBAIGJvb2wgVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWE6OmZsdXNoTGF5ZXJzKCkK
IAogICAgIEZsb2F0UmVjdCB2aXNpYmxlUmVjdCA9IFttX2hvc3RpbmdMYXllciBmcmFtZV07CiAg
ICAgdmlzaWJsZVJlY3QuaW50ZXJzZWN0KG1fc2Nyb2xsZWRFeHBvc2VkUmVjdCk7Ci0gICAgbV93
ZWJQYWdlLnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLmZsdXNoUGFnZU92ZXJsYXlMYXllcnModmlz
aWJsZVJlY3QpOworCisgICAgLy8gQmVjYXVzZSBvdXIgdmlldy1yZWxhdGl2ZSBvdmVybGF5IHJv
b3QgbGF5ZXIgaXMgbm90IGF0dGFjaGVkIHRvIHRoZSBtYWluIEdyYXBoaWNzTGF5ZXIgdHJlZSwg
d2UgbmVlZCB0byBmbHVzaCBpdCBtYW51YWxseS4KKyAgICBpZiAobV92aWV3T3ZlcmxheVJvb3RM
YXllcikKKyAgICAgICAgbV92aWV3T3ZlcmxheVJvb3RMYXllci0+Zmx1c2hDb21wb3NpdGluZ1N0
YXRlKHZpc2libGVSZWN0KTsKIAogICAgIGJvb2wgcmV0dXJuVmFsdWUgPSBtX3dlYlBhZ2UubWFp
bkZyYW1lVmlldygpLT5mbHVzaENvbXBvc2l0aW5nU3RhdGVJbmNsdWRpbmdTdWJmcmFtZXMoKTsK
ICNpZiBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKQpAQCAtMzYzLDggKzM4OCw2IEBAIHZvaWQgVGls
ZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWE6OnVwZGF0ZVNjcm9sbGVkRXhwb3NlZFJlY3QoKQog
I2VuZGlmCiAKICAgICBmcmFtZVZpZXctPnNldEV4cG9zZWRSZWN0KG1fc2Nyb2xsZWRFeHBvc2Vk
UmVjdCk7Ci0KLSAgICBtX3dlYlBhZ2UucGFnZU92ZXJsYXlDb250cm9sbGVyKCkuZGlkQ2hhbmdl
RXhwb3NlZFJlY3QoKTsKIH0KIAogdm9pZCBUaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYTo6
dXBkYXRlR2VvbWV0cnkoY29uc3QgSW50U2l6ZSYgdmlld1NpemUsIGNvbnN0IEludFNpemUmIGxh
eWVyUG9zaXRpb24pCkBAIC00NjQsMTIgKzQ4NywxMiBAQCB2b2lkIFRpbGVkQ29yZUFuaW1hdGlv
bkRyYXdpbmdBcmVhOjpzZXRSb290Q29tcG9zaXRpbmdMYXllcihDQUxheWVyICpsYXllcikKICAg
ICBbQ0FUcmFuc2FjdGlvbiBiZWdpbl07CiAgICAgW0NBVHJhbnNhY3Rpb24gc2V0RGlzYWJsZUFj
dGlvbnM6WUVTXTsKIAotICAgIFttX2hvc3RpbmdMYXllciBzZXRTdWJsYXllcnM6bGF5ZXIgPyBA
WyBsYXllciwgbV93ZWJQYWdlLnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLnZpZXdPdmVybGF5Um9v
dExheWVyKCktPnBsYXRmb3JtTGF5ZXIoKSBdIDogQFsgXV07Ci0KICAgICBib29sIGhhZFJvb3RM
YXllciA9ICEhbV9yb290TGF5ZXI7CiAgICAgbV9yb290TGF5ZXIgPSBsYXllcjsKICAgICBbbV9y
b290TGF5ZXIgc2V0U3VibGF5ZXJUcmFuc2Zvcm06bV90cmFuc2Zvcm1dOwogCisgICAgdXBkYXRl
Um9vdExheWVycygpOworCiAgICAgaWYgKGhhZFJvb3RMYXllciAhPSAhIWxheWVyKQogICAgICAg
ICBtX2xheWVySG9zdGluZ0NvbnRleHQtPnNldFJvb3RMYXllcihsYXllciA/IG1faG9zdGluZ0xh
eWVyLmdldCgpIDogMCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9tYWMvV0tBY2Nlc3NpYmlsaXR5V2ViUGFnZU9iamVjdE1hYy5tbSBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV0tBY2Nlc3NpYmlsaXR5V2ViUGFnZU9iamVj
dE1hYy5tbQppbmRleCAzODMzOWJhLi4xNjRhZTU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dLQWNjZXNzaWJpbGl0eVdlYlBhZ2VPYmplY3RNYWMu
bW0KKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XS0FjY2Vzc2li
aWxpdHlXZWJQYWdlT2JqZWN0TWFjLm1tCkBAIC00MCw2ICs0MCw3IEBACiAjaW1wb3J0IDxXZWJD
b3JlL0ZyYW1lVmlldy5oPgogI2ltcG9ydCA8V2ViQ29yZS9NYWluRnJhbWUuaD4KICNpbXBvcnQg
PFdlYkNvcmUvUGFnZS5oPgorI2ltcG9ydCA8V2ViQ29yZS9QYWdlT3ZlcmxheUNvbnRyb2xsZXIu
aD4KICNpbXBvcnQgPFdlYkNvcmUvU2Nyb2xsVmlldy5oPgogI2ltcG9ydCA8V2ViQ29yZS9TY3Jv
bGxiYXIuaD4KICNpbXBvcnQgPFdlYktpdFN5c3RlbUludGVyZmFjZS5oPgpAQCAtNzUsMTkgKzc2
LDEzIEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CiAKIC0gKE5TQXJyYXkgKilhY2Nlc3NpYmls
aXR5UGFyYW1ldGVyaXplZEF0dHJpYnV0ZU5hbWVzCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tBcnJh
eVJlZj4gcmVzdWx0ID0gYWRvcHRXSyhtX3BhZ2UtPnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLmNv
cHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlc05hbWVzKHRydWUpKTsKLSAgICBpZiAoIXJlc3VsdCkK
KyAgICBWZWN0b3I8U3RyaW5nPiByZXN1bHQgPSBtX3BhZ2UtPm1haW5GcmFtZSgpLT5wYWdlT3Zl
cmxheUNvbnRyb2xsZXIoKS5jb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZXNOYW1lcyh0cnVlKTsK
KyAgICBpZiAocmVzdWx0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIG5pbDsKICAgICAKICAg
ICBOU011dGFibGVBcnJheSAqbmFtZXMgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXldOwotICAgIHNp
emVfdCBjb3VudCA9IFdLQXJyYXlHZXRTaXplKHJlc3VsdC5nZXQoKSk7Ci0gICAgZm9yIChzaXpl
X3QgayA9IDA7IGsgPCBjb3VudDsgaysrKSB7Ci0gICAgICAgIFdLVHlwZVJlZiBpdGVtID0gV0tB
cnJheUdldEl0ZW1BdEluZGV4KHJlc3VsdC5nZXQoKSwgayk7Ci0gICAgICAgIGlmICh0b0ltcGwo
aXRlbSktPnR5cGUoKSA9PSBBUEk6OlN0cmluZzo6QVBJVHlwZSkgewotICAgICAgICAgICAgUmV0
YWluUHRyPENGU3RyaW5nUmVmPiBuYW1lID0gYWRvcHRDRihXS1N0cmluZ0NvcHlDRlN0cmluZyhr
Q0ZBbGxvY2F0b3JEZWZhdWx0LCAoV0tTdHJpbmdSZWYpaXRlbSkpOwotICAgICAgICAgICAgW25h
bWVzIGFkZE9iamVjdDooTlNTdHJpbmcgKiluYW1lLmdldCgpXTsKLSAgICAgICAgfQotICAgIH0K
KyAgICBmb3IgKGF1dG8mIG5hbWUgOiByZXN1bHQpCisgICAgICAgIFtuYW1lcyBhZGRPYmplY3Q6
KE5TU3RyaW5nICopbmFtZV07CiAgICAgCiAgICAgcmV0dXJuIG5hbWVzOwogfQpAQCAtMTY0LDIz
ICsxNTksMjYgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKIAogLSAoaWQpYWNjZXNzaWJpbGl0
eUF0dHJpYnV0ZVZhbHVlOihOU1N0cmluZyAqKWF0dHJpYnV0ZSBmb3JQYXJhbWV0ZXI6KGlkKXBh
cmFtZXRlcgogewotICAgIFdLUmV0YWluUHRyPFdLVHlwZVJlZj4gcGFnZU92ZXJsYXlQYXJhbWV0
ZXIgPSAwOwotICAgIAotICAgIGlmIChbcGFyYW1ldGVyIGlzS2luZE9mQ2xhc3M6W05TVmFsdWUg
Y2xhc3NdXSAmJiBzdHJjbXAoWyhOU1ZhbHVlKilwYXJhbWV0ZXIgb2JqQ1R5cGVdLCBAZW5jb2Rl
KE5TUG9pbnQpKSA9PSAwKSB7Ci0gICAgICAgIE5TUG9pbnQgcG9pbnQgPSBbc2VsZiBjb252ZXJ0
U2NyZWVuUG9pbnRUb1Jvb3RWaWV3OlsoTlNWYWx1ZSAqKXBhcmFtZXRlciBwb2ludFZhbHVlXV07
Ci0gICAgICAgIHBhZ2VPdmVybGF5UGFyYW1ldGVyID0gV0tQb2ludENyZWF0ZShXS1BvaW50TWFr
ZShwb2ludC54LCBwb2ludC55KSk7Ci0gICAgfQotICAgIAotICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiBhdHRyaWJ1dGVSZWYgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aENGU3RyaW5n
KChDRlN0cmluZ1JlZilhdHRyaWJ1dGUpKTsKLSAgICBXS1JldGFpblB0cjxXS1R5cGVSZWY+IHJl
c3VsdCA9IGFkb3B0V0sobV9wYWdlLT5wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKS5jb3B5QWNjZXNz
aWJpbGl0eUF0dHJpYnV0ZVZhbHVlKGF0dHJpYnV0ZVJlZi5nZXQoKSwgcGFnZU92ZXJsYXlQYXJh
bWV0ZXIuZ2V0KCkpKTsKLSAgICBpZiAoIXJlc3VsdCkKKyAgICBXZWJDb3JlOjpGbG9hdFBvaW50
IHBhZ2VPdmVybGF5UG9pbnQ7CisgICAgaWYgKFtwYXJhbWV0ZXIgaXNLaW5kT2ZDbGFzczpbTlNW
YWx1ZSBjbGFzc11dICYmICFzdHJjbXAoWyhOU1ZhbHVlICopcGFyYW1ldGVyIG9iakNUeXBlXSwg
QGVuY29kZShOU1BvaW50KSkpCisgICAgICAgIHBhZ2VPdmVybGF5UG9pbnQgPSBbc2VsZiBjb252
ZXJ0U2NyZWVuUG9pbnRUb1Jvb3RWaWV3OlsoTlNWYWx1ZSAqKXBhcmFtZXRlciBwb2ludFZhbHVl
XV07CisgICAgZWxzZQogICAgICAgICByZXR1cm4gbmlsOwotICAgIAotICAgIGlmICh0b0ltcGwo
cmVzdWx0LmdldCgpKS0+dHlwZSgpID09IEFQSTo6U3RyaW5nOjpBUElUeXBlKQotICAgICAgICBy
ZXR1cm4gQ0ZCcmlkZ2luZ1JlbGVhc2UoV0tTdHJpbmdDb3B5Q0ZTdHJpbmcoa0NGQWxsb2NhdG9y
RGVmYXVsdCwgKFdLU3RyaW5nUmVmKXJlc3VsdC5nZXQoKSkpOwotICAgIGlmICh0b0ltcGwocmVz
dWx0LmdldCgpKS0+dHlwZSgpID09IEFQSTo6Qm9vbGVhbjo6QVBJVHlwZSkKLSAgICAgICAgcmV0
dXJuIFtOU051bWJlciBudW1iZXJXaXRoQm9vbDpXS0Jvb2xlYW5HZXRWYWx1ZShzdGF0aWNfY2Fz
dDxXS0Jvb2xlYW5SZWY+KHJlc3VsdC5nZXQoKSkpXTsKLSAgICAKKworICAgIGlmIChbYXR0cmli
dXRlIGlzRXF1YWxUb1N0cmluZzpAIkFYRGF0YURldGVjdG9yRXhpc3RzQXRQb2ludCJdIHx8IFth
dHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOkAiQVhEaWRTaG93RGF0YURldGVjdG9yTWVudUF0UG9p
bnQiXSkgeworICAgICAgICBib29sIHZhbHVlOworICAgICAgICBpZiAoIW1fcGFnZS0+bWFpbkZy
YW1lKCktPnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLmNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRl
Qm9vbFZhbHVlRm9yUG9pbnQoYXR0cmlidXRlLCBwYWdlT3ZlcmxheVBvaW50LCB2YWx1ZSkpCisg
ICAgICAgICAgICByZXR1cm4gbmlsOworICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldp
dGhCb29sOnZhbHVlXTsKKyAgICB9CisKKyAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJp
bmc6QCJBWERhdGFEZXRlY3RvclR5cGVBdFBvaW50Il0pIHsKKyAgICAgICAgU3RyaW5nIHZhbHVl
OworICAgICAgICBpZiAoIW1fcGFnZS0+bWFpbkZyYW1lKCktPnBhZ2VPdmVybGF5Q29udHJvbGxl
cigpLmNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlU3RyaW5nVmFsdWVGb3JQb2ludChhdHRyaWJ1
dGUsIHBhZ2VPdmVybGF5UG9pbnQsIHZhbHVlKSkKKyAgICAgICAgICAgIHJldHVybiBuaWw7Cisg
ICAgICAgIHJldHVybiBbTlNTdHJpbmcgc3RyaW5nV2l0aFN0cmluZzp2YWx1ZV07CisgICAgfQor
CiAgICAgcmV0dXJuIG5pbDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQcm9jZXNzLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vz
cy5jcHAKaW5kZXggMjBhMzBhZS4uN2MxNzBiMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlByb2Nlc3MuY3BwCkBAIC03MSw2ICs3MSw3IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9JY29u
RGF0YWJhc2UuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0pTRE9NV2luZG93Lmg+CiAjaW5jbHVkZSA8
V2ViQ29yZS9MYW5ndWFnZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvTWFpbkZyYW1lLmg+CiAjaW5j
bHVkZSA8V2ViQ29yZS9NZW1vcnlDYWNoZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvTWVtb3J5UHJl
c3N1cmVIYW5kbGVyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9QYWdlLmg+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>239045</attachid>
            <date>2014-10-01 13:46:48 -0700</date>
            <delta_ts>2014-10-02 02:31:00 -0700</delta_ts>
            <desc>fix iOS build</desc>
            <filename>pageoverlay.diff</filename>
            <type>text/plain</type>
            <size>193528</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNv
cmUvQ01ha2VMaXN0cy50eHQKaW5kZXggNmRhZGMzMC4uZTFlOGZlNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKQEAgLTE5NDAsNiArMTk0MCw4IEBAIHNldChXZWJDb3JlX1NPVVJDRVMKICAgICBwYWdl
L1BhZ2VDb25zb2xlQ2xpZW50LmNwcAogICAgIHBhZ2UvUGFnZUdyb3VwLmNwcAogICAgIHBhZ2Uv
UGFnZUdyb3VwTG9hZERlZmVycmVyLmNwcAorICAgIHBhZ2UvUGFnZU92ZXJsYXkuY3BwCisgICAg
cGFnZS9QYWdlT3ZlcmxheUNvbnRyb2xsZXIuY3BwCiAgICAgcGFnZS9QYWdlU2VyaWFsaXplci5j
cHAKICAgICBwYWdlL1BhZ2VUaHJvdHRsZXIuY3BwCiAgICAgcGFnZS9QYWdlVmlzaWJpbGl0eVN0
YXRlLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nCmluZGV4IGRkZDk3YTEuLjZjZmY5ZDggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNDQgQEAKKzIwMTQtMDktMzAgIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBs
ZS5jb20+CisKKyAgICAgICAgTW92ZSBQYWdlT3ZlcmxheVtDb250cm9sbGVyXSB0byBXZWJDb3Jl
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzcxNjQK
KyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzE4NTA4MjU4PgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICog
V2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnZjeHBy
b2ovV2ViQ29yZS52Y3hwcm9qLmZpbHRlcnM6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qOgorICAgICAgICBNYWtlIHRoZSBhcHByb3ByaWF0ZSBidWlsZCBzeXN0
ZW0gY2hhbmdlcy4KKworICAgICAgICAqIFdlYkNvcmUuZXhwLmluOgorICAgICAgICBFeHBvcnQg
dGhlIG5ldyBQYWdlT3ZlcmxheVtDb250cm9sbGVyXSBzeW1ib2xzIGZyb20gV2ViQ29yZS4KKwor
ICAgICAgICAqIGxvYWRlci9FbXB0eUNsaWVudHMuaDoKKyAgICAgICAgKiBwYWdlL0Nocm9tZUNs
aWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21lQ2xpZW50Ojpkb2N1bWVudE92ZXJsYXlM
YXllckZvckZyYW1lKTogRGVsZXRlZC4KKyAgICAgICAgQWRkIGF0dGFjaFZpZXdPdmVybGF5R3Jh
cGhpY3NMYXllciwgd2hpY2ggYWxsb3dzIFBhZ2VPdmVybGF5Q29udHJvbGxlcgorICAgICAgICB0
byBwdXNoIHZpZXctcmVsYXRpdmUgcGFnZSBvdmVybGF5IHJvb3QgbGF5ZXJzIGRvd24gdG8gV2Vi
S2l0IHRvIGJlCisgICAgICAgIGluc3RhbGxlZCBqdXN0IGluc2lkZSB0aGUgdmlldy4KKworICAg
ICAgICBSZW1vdmUgZG9jdW1lbnRPdmVybGF5TGF5ZXJGb3JGcmFtZSBiZWNhdXNlIFJlbmRlckxh
eWVyQ29tcG9zaXRvciBjYW4gbm93CisgICAgICAgIHRhbGsgZGlyZWN0bHkgdG8gUGFnZU92ZXJs
YXlDb250cm9sbGVyLgorCisgICAgICAgICogcGFnZS9FdmVudEhhbmRsZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpoYW5kbGVNb3VzZVByZXNzRXZlbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjptb3VzZU1vdmVkKToKKyAgICAgICAgKFdlYkNvcmU6
OkV2ZW50SGFuZGxlcjo6aGFuZGxlTW91c2VSZWxlYXNlRXZlbnQpOgorICAgICAgICBXaGVuIHRo
ZSBtb3VzZSBpcyBtb3ZlZCwgcHJlc3NlZCwgb3IgcmVsZWFzZWQsIGdpdmUgUGFnZU92ZXJsYXlD
b250cm9sbGVyCisgICAgICAgIHRoZSBmaXJzdCBzaG90IGF0IGhhbmRsaW5nIHRoZSBldmVudC4K
KworICAgICAgICAqIHBhZ2UvRnJhbWVWaWV3LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1l
Vmlldzo6c2V0RnJhbWVSZWN0KToKKyAgICAgICAgSW5mb3JtIFBhZ2VPdmVybGF5Q29udHJvbGxl
ciB0aGF0IHRoZSBtYWluIEZyYW1lVmlldydzIHNpemUgY2hhbmdlZCwKKyAgICAgICAgc28gaXQg
Y2FuIHVwZGF0ZSB0aGUgc2l6ZSBvZiB2aWV3LXJlbGF0aXZlIG92ZXJsYXlzLgorCisgICAgICAg
IChXZWJDb3JlOjpGcmFtZVZpZXc6OnNldENvbnRlbnRzU2l6ZSk6CisgICAgICAgIEluZm9ybSBQ
YWdlT3ZlcmxheUNvbnRyb2xsZXIgdGhhdCB0aGUgbWFpbiBGcmFtZVZpZXcncyBjb250ZW50cyBz
aXplIGNoYW5nZWQsCisgICAgICAgIHNvIGl0IGNhbiB1cGRhdGUgdGhlIHNpemUgb2YgZG9jdW1l
bnQtcmVsYXRpdmUgb3ZlcmxheXMuCisKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6c2V0
Rml4ZWRWaXNpYmxlQ29udGVudFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3Ojpk
aWRDaGFuZ2VTY3JvbGxPZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjpzY3Jv
bGxUbyk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OndoZWVsRXZlbnQpOgorICAgICAg
ICBJbmZvcm0gUGFnZU92ZXJsYXlDb250cm9sbGVyIHRoYXQgc29tZXRoaW5nIHNjcm9sbGVkLgor
CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OnNldEV4cG9zZWRSZWN0KToKKyAgICAgICAg
SW5mb3JtIFBhZ2VPdmVybGF5Q29udHJvbGxlciB0aGF0IHRoZSBleHBvc2VkIHJlY3QgY2hhbmdl
ZCwgc28gaXQgY2FuIHB1c2gKKyAgICAgICAgdGhlIG5ldyBleHBvc2VkIHJlY3QgZG93biB0byB0
aGUgb3ZlcmxheXMuCisKKyAgICAgICAgKiBwYWdlL0ZyYW1lVmlldy5oOgorICAgICAgICBBZGQg
ZGlkQ2hhbmdlU2Nyb2xsT2Zmc2V0LgorCisgICAgICAgICogcGFnZS9NYWluRnJhbWUuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6TWFpbkZyYW1lOjpNYWluRnJhbWUpOgorICAgICAgICAqIHBhZ2Uv
TWFpbkZyYW1lLmg6CisgICAgICAgIEtlZXAgb25lIFBhZ2VPdmVybGF5Q29udHJvbGxlciBwZXIg
TWFpbkZyYW1lLgorCisgICAgICAgICogcGFnZS9QYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlBhZ2U6OnNldERldmljZVNjYWxlRmFjdG9yKToKKyAgICAgICAgSW5mb3JtIFBhZ2VPdmVybGF5
Q29udHJvbGxlciB0aGF0IHRoZSBkZXZpY2Ugc2NhbGUgZmFjdG9yIGNoYW5nZWQuCisKKyAgICAg
ICAgKFdlYkNvcmU6OlBhZ2U6OnNldFNlc3Npb25JRCk6CisgICAgICAgIFJlbW92ZSBhIGJsYW5r
IGxpbmUuCisKKyAgICAgICAgKiBwYWdlL1BhZ2VPdmVybGF5LmNwcDogUmVuYW1lZCBmcm9tIFNv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9QYWdlT3ZlcmxheS5jcHAuCisgICAgICAg
IE1vdmUgUGFnZU92ZXJsYXkgZnJvbSBXZWJLaXQyIHRvIFdlYkNvcmUuCisgICAgICAgIEEgZmV3
IG92ZXJhcmNoaW5nIGNoYW5nZXMgdGhhdCBJIHdvbid0IGRldGFpbCBpbiBlYWNoIHBsYWNlOgor
ICAgICAgICAgICAgLSByZWZlcmVuY2VzIGluc3RlYWQgb2YgcG9pbnRlcnMgaW4gbWFueSBwbGFj
ZXMKKyAgICAgICAgICAgIC0gV2ViQ29yZSB0eXBlcyBpbnN0ZWFkIG9mIFdlYktpdDIgdHlwZXMg
ZXZlcnl3aGVyZQorCisgICAgICAgIChXZWJDb3JlOjpQYWdlT3ZlcmxheTo6Ym91bmRzKToKKyAg
ICAgICAgSXQgaXMgcG9zc2libGUgdG8gaW5zdGFsbCBhbiBvdmVybGF5IGJlZm9yZSB3ZSBoYXZl
IGEgRnJhbWVWaWV3LgorICAgICAgICBXZSB3aWxsIGV2ZW50dWFsbHkgZ2V0IGEgdmlldy9jb250
ZW50cyBzaXplIGNoYW5nZWQgbm90aWZpY2F0aW9uIGFuZCB0cnkgYWdhaW4uCisKKyAgICAgICAg
KFdlYkNvcmU6OlBhZ2VPdmVybGF5Ojpjb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVN0cmluZ1Zh
bHVlRm9yUG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGFnZU92ZXJsYXk6OmNvcHlBY2Nlc3Np
YmlsaXR5QXR0cmlidXRlQm9vbFZhbHVlRm9yUG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGFn
ZU92ZXJsYXk6OmNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlTmFtZXMpOgorICAgICAgICBTcGxp
dCBjb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZSBpbnRvICJTdHJpbmdWYWx1ZUZvclBvaW50IiBh
bmQgIkJvb2xWYWx1ZUZvclBvaW50IgorICAgICAgICB2YXJpYW50cywgYmVjYXVzZSB3ZSBkb24n
dCBoYXZlIGFueXRoaW5nIGxpa2UgV0tUeXBlUmVmIGhlcmUuCisKKyAgICAgICAgKiBwYWdlL1Bh
Z2VPdmVybGF5Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvUGFnZU92ZXJsYXkuaC4KKyAgICAgICAgTWFrZSBQYWdlT3ZlcmxheSBhIG5vcm1hbCBSZWZD
b3VudGVkIG9iamVjdCBpbnN0ZWFkIG9mIGEgV2ViS2l0MiBBUEkgb2JqZWN0LgorICAgICAgICBM
ZWF2ZSBhIGNvbW1lbnQgbm90aW5nIHRoYXQgd2Ugc2hvdWxkIG1vdmUgdGhlIFBhZ2VPdmVybGF5
J3MgR3JhcGhpY3NMYXllcgorICAgICAgICB0byBQYWdlT3ZlcmxheSBpbnN0ZWFkIG9mIGEgbWFw
IG9uIFBhZ2VPdmVybGF5Q29udHJvbGxlci4KKworICAgICAgICAqIHBhZ2UvUGFnZU92ZXJsYXlD
b250cm9sbGVyLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9QYWdlT3ZlcmxheUNvbnRyb2xsZXIuY3BwLgorICAgICAgICBNb3ZlIFBhZ2VPdmVybGF5
Q29udHJvbGxlciBmcm9tIFdlYktpdDIgdG8gV2ViQ29yZS4KKyAgICAgICAgQSBmZXcgb3ZlcmFy
Y2hpbmcgY2hhbmdlcyB0aGF0IEkgd29uJ3QgZGV0YWlsIGluIGVhY2ggcGxhY2U6CisgICAgICAg
ICAgICAtIHJlZmVyZW5jZXMgaW5zdGVhZCBvZiBwb2ludGVycyBpbiBtYW55IHBsYWNlcworICAg
ICAgICAgICAgLSBXZWJDb3JlIHR5cGVzIGluc3RlYWQgb2YgV2ViS2l0MiB0eXBlcyBldmVyeXdo
ZXJlCisKKyAgICAgICAgTGVhdmUgYSBGSVhNRSB0aGF0IGRpZENoYW5nZVNldHRpbmdzIGlzIG5v
dCBjdXJyZW50bHkgY2FsbGVkIHdoZW4gc2V0dGluZ3MgY2hhbmdlLgorICAgICAgICBUaGlzIGlz
IG5vdCBhIHByb2JsZW0gZm9yIG5vcm1hbCB1c2Ugb2Ygb3ZlcmxheXMsIG9ubHkgZm9yIGR5bmFt
aWNhbGx5IGNoYW5naW5nCisgICAgICAgIGxheWVyIGJvcmRlci9yZXBhaW50IGNvdW50ZXIgc2V0
dGluZ3MuCisKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VPdmVybGF5Q29udHJvbGxlcjo6UGFnZU92
ZXJsYXlDb250cm9sbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VPdmVybGF5Q29udHJvbGxl
cjo6Y3JlYXRlUm9vdExheWVyc0lmTmVlZGVkKToKKyAgICAgICAgV2Ugd2lsbCBub3cgbGF6aWx5
IGluaXRpYWxpemUgdGhlIHJvb3QgbGF5ZXJzIHdoZW4gd2UgZmlyc3QgdHJ5IHRvIHVzZSB0aGVt
LAorICAgICAgICBiZWNhdXNlIG90aGVyd2lzZSB3ZSB0cnkgdG8gY3JlYXRlIHRoZW0gYmVmb3Jl
IHRoZSBDaHJvbWVDbGllbnQncyBHcmFwaGljc0xheWVyRmFjdG9yeQorICAgICAgICBpcyBob29r
ZWQgdXAsIGluIHNvbWUgY2FzZXMsIGFuZCB0aGF0IGNhbiBjYXVzZSB1cyB0byBjcmVhdGUgdGhl
IHdyb25nIGtpbmQgb2YgR3JhcGhpY3NMYXllcnMuCisKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VP
dmVybGF5Q29udHJvbGxlcjo6aW5zdGFsbFBhZ2VPdmVybGF5KToKKyAgICAgICAgRW50ZXIgY29t
cG9zaXRpbmcgbW9kZSB3aGVuIGluc3RhbGxpbmcgYSBQYWdlT3ZlcmxheS4KKworICAgICAgICAo
V2ViQ29yZTo6UGFnZU92ZXJsYXlDb250cm9sbGVyOjpkaWRDaGFuZ2VTZXR0aW5ncyk6CisgICAg
ICAgIExlYXZlIGEgRklYTUUgYWJvdXQgYSBmdXR1cmUgaW1wcm92ZW1lbnQgdG8gZGlkQ2hhbmdl
U2V0dGluZ3MuCisKKyAgICAgICAgKiBwYWdlL1BhZ2VPdmVybGF5Q29udHJvbGxlci5oOiBSZW5h
bWVkIGZyb20gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1BhZ2VPdmVybGF5Q29u
dHJvbGxlci5oLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllckNs
aWVudC5oOgorICAgICAgICBBZGQgd3RmL0ZvcndhcmQuaCwgYmVjYXVzZSBHcmFwaGljc0xheWVy
Q2xpZW50LmggdXNlcyBTdHJpbmcuCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnNjcm9sbFRvKToKKyAgICAgICAg
SW5mb3JtIFBhZ2VPdmVybGF5Q29udHJvbGxlciB0aGF0IHNvbWV0aGluZyBzY3JvbGxlZC4KKwor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpoYXNBbnlBZGRpdGlvbmFsQ29tcG9zaXRl
ZExheWVycyk6CisgICAgICAgIE1ha2UgaGFzQW55QWRkaXRpb25hbENvbXBvc2l0ZWRMYXllcnMg
cmV0dXJuIHRydWUgaWYgdGhlcmUgYXJlIGFueSBwYWdlIG92ZXJsYXlzLAorICAgICAgICBiZWNh
dXNlIHdlIG5lZWQgdG8gYXZvaWQgZmFsbGluZyBvdXQgb2YgY29tcG9zaXRpbmcgbW9kZSBpZiB3
ZSBzdGlsbCBoYXZlCisgICAgICAgIHBhZ2Ugb3ZlcmxheXMuCisKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6dXBkYXRlQ29tcG9zaXRpbmdMYXllcnMpOgorICAgICAg
ICBFbnRlciBjb21wb3NpdGluZyBtb2RlIGlmIHdlIGhhdmUgcGFnZSBvdmVybGF5cy4KKworICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjphcHBlbmRPdmVybGF5TGF5ZXJz
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6YXBw
ZW5kRG9jdW1lbnRPdmVybGF5TGF5ZXJzKToKKyAgICAgICAgUmVuYW1lIGFwcGVuZE92ZXJsYXlM
YXllcnMgLT4gYXBwZW5kRG9jdW1lbnRPdmVybGF5TGF5ZXJzLgorCisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OmF0dGFjaFJvb3RMYXllcik6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OmRldGFjaFJvb3RMYXllcik6CisgICAgICAgIEF0
dGFjaC9kZXRhY2ggdGhlIHZpZXcgb3ZlcmxheSByb290IGxheWVyIHdoZW4gYXR0YWNoaW5nL2Rl
dGFjaGluZyB0aGUKKyAgICAgICAgbm9ybWFsIGNvbXBvc2l0aW5nIHJvb3QgbGF5ZXIuCisKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6cm9vdExheWVyQXR0YWNobWVu
dENoYW5nZWQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuaDoK
KwogMjAxNC0wOS0zMCAgRXJpYyBDYXJsc29uICA8ZXJpYy5jYXJsc29uQGFwcGxlLmNvbT4KIAog
ICAgICAgICBbTWFjXSBNZWRpYVBsYXllclByaXZhdGVRVEtpdCBzaG91bGQgbm90IHVzZSBGcmFt
ZVZpZXcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluIGIvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KaW5kZXggOTQzYzMxMS4uNjE3YTdiYSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KKysrIGIvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS5leHAuaW4KQEAgLTE4Nyw2ICsxODcsMTMgQEAgX19aTjdXZWJDb3JlMTFNZW1vcnlDYWNo
ZTE4cmVzb3VyY2VGb3JSZXF1ZXN0RVJLTlNfMTVSZXNvdXJjZVJlcXVlc3RFTlNfOVNlc3Npb24K
IF9fWk43V2ViQ29yZTExTWVtb3J5Q2FjaGUxOWdldE9yaWdpbnNXaXRoQ2FjaGVFUk4zV1RGN0hh
c2hTZXRJTlMxXzZSZWZQdHJJTlNfMTRTZWN1cml0eU9yaWdpbkVFRU5TXzE4U2VjdXJpdHlPcmln
aW5IYXNoRU5TMV8xMEhhc2hUcmFpdHNJUzVfRUVFRQogX19aTjdXZWJDb3JlMTFNZW1vcnlDYWNo
ZTIwcmVtb3ZlSW1hZ2VGcm9tQ2FjaGVFUktOU18zVVJMRVJLTjNXVEY2U3RyaW5nRQogX19aTjdX
ZWJDb3JlMTFNZW1vcnlDYWNoZTI1cmVtb3ZlUmVzb3VyY2VzV2l0aE9yaWdpbkVQTlNfMTRTZWN1
cml0eU9yaWdpbkUKK19fWk43V2ViQ29yZTExUGFnZU92ZXJsYXkxNXNldE5lZWRzRGlzcGxheUVS
S05TXzdJbnRSZWN0RQorX19aTjdXZWJDb3JlMTFQYWdlT3ZlcmxheTE1c2V0TmVlZHNEaXNwbGF5
RXYKK19fWk43V2ViQ29yZTExUGFnZU92ZXJsYXkyMHN0b3BGYWRlT3V0QW5pbWF0aW9uRXYKK19f
Wk43V2ViQ29yZTExUGFnZU92ZXJsYXk1Y2xlYXJFdgorX19aTjdXZWJDb3JlMTFQYWdlT3Zlcmxh
eTVsYXllckV2CitfX1pON1dlYkNvcmUxMVBhZ2VPdmVybGF5NmNyZWF0ZUVSTlMwXzZDbGllbnRF
TlMwXzExT3ZlcmxheVR5cGVFCitfX1pON1dlYkNvcmUxMVBhZ2VPdmVybGF5OHNldEZyYW1lRU5T
XzdJbnRSZWN0RQogX19aTjdXZWJDb3JlMTFTUUxSZXN1bHRPa0UKIF9fWk43V2ViQ29yZTExVVJM
V2l0aERhdGFFUDZOU0RhdGFQNU5TVVJMCiBfX1pON1dlYkNvcmUxMWdldFVSTEJ5dGVzRVBLN19f
Q0ZVUkxSTjNXVEY2VmVjdG9ySWNMbTUxMkVOUzNfMTVDcmFzaE9uT3ZlcmZsb3dFRUUKQEAgLTkw
OSw2ICs5MTYsMTIgQEAgX19aTjdXZWJDb3JlMjFNZW1vcnlQcmVzc3VyZUhhbmRsZXI3aW5zdGFs
bEV2CiBfX1pON1dlYkNvcmUyMU5ldHdvcmtTdG9yYWdlU2Vzc2lvbjIxZGVmYXVsdFN0b3JhZ2VT
ZXNzaW9uRXYKIF9fWk43V2ViQ29yZTIxTmV0d29ya1N0b3JhZ2VTZXNzaW9uMjVzd2l0Y2hUb05l
d1Rlc3RpbmdTZXNzaW9uRXYKIF9fWk43V2ViQ29yZTIxTmV0d29ya1N0b3JhZ2VTZXNzaW9uMjhj
cmVhdGVQcml2YXRlQnJvd3NpbmdTZXNzaW9uRVJLTjNXVEY2U3RyaW5nRQorX19aTjdXZWJDb3Jl
MjFQYWdlT3ZlcmxheUNvbnRyb2xsZXIxOGluc3RhbGxQYWdlT3ZlcmxheUVOM1dURjEwUGFzc1Jl
ZlB0cklOU18xMVBhZ2VPdmVybGF5RUVFTlMzXzhGYWRlTW9kZUUKK19fWk43V2ViQ29yZTIxUGFn
ZU92ZXJsYXlDb250cm9sbGVyMjB1bmluc3RhbGxQYWdlT3ZlcmxheUVQTlNfMTFQYWdlT3Zlcmxh
eUVOUzFfOEZhZGVNb2RlRQorX19aTjdXZWJDb3JlMjFQYWdlT3ZlcmxheUNvbnRyb2xsZXIyMHZp
ZXdPdmVybGF5Um9vdExheWVyRXYKK19fWk43V2ViQ29yZTIxUGFnZU92ZXJsYXlDb250cm9sbGVy
MzJjb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZXNOYW1lc0ViCitfX1pON1dlYkNvcmUyMVBhZ2VP
dmVybGF5Q29udHJvbGxlcjQzY29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVCb29sVmFsdWVGb3JQ
b2ludEVOM1dURjZTdHJpbmdFTlNfMTBGbG9hdFBvaW50RVJiCitfX1pON1dlYkNvcmUyMVBhZ2VP
dmVybGF5Q29udHJvbGxlcjQ1Y29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVTdHJpbmdWYWx1ZUZv
clBvaW50RU4zV1RGNlN0cmluZ0VOU18xMEZsb2F0UG9pbnRFUlMyXwogX19aTjdXZWJDb3JlMjFQ
bGF0Zm9ybUtleWJvYXJkRXZlbnQyNGRpc2FtYmlndWF0ZUtleURvd25FdmVudEVOU18xM1BsYXRm
b3JtRXZlbnQ0VHlwZUViCiBfX1pON1dlYkNvcmUyMVJlbW90ZUNvbW1hbmRMaXN0ZW5lcjZjcmVh
dGVFUk5TXzI3UmVtb3RlQ29tbWFuZExpc3RlbmVyQ2xpZW50RQogX19aTjdXZWJDb3JlMjFSZXNv
dXJjZUxvYWRTY2hlZHVsZXIyMHNlcnZlUGVuZGluZ1JlcXVlc3RzRU5TXzIwUmVzb3VyY2VMb2Fk
UHJpb3JpdHlFCkBAIC0xNjAzLDYgKzE2MTYsOCBAQCBfX1pOSzdXZWJDb3JlMTFIaXN0b3J5SXRl
bThjaGlsZHJlbkV2CiBfX1pOSzdXZWJDb3JlMTFIaXN0b3J5SXRlbThyZWZlcnJlckV2CiBfX1pO
SzdXZWJDb3JlMTFIaXN0b3J5SXRlbTl1cmxTdHJpbmdFdgogX19aTks3V2ViQ29yZTExSGlzdG9y
eUl0ZW05dmlld1N0YXRlRXYKK19fWk5LN1dlYkNvcmUxMVBhZ2VPdmVybGF5NWZyYW1lRXYKK19f
Wk5LN1dlYkNvcmUxMVBhZ2VPdmVybGF5NmJvdW5kc0V2CiBfX1pOSzdXZWJDb3JlMTFSZW5kZXJC
bG9jazI1aW5saW5lRWxlbWVudENvbnRpbnVhdGlvbkV2CiBfX1pOSzdXZWJDb3JlMTFSZW5kZXJM
YXllcjE5YWJzb2x1dGVCb3VuZGluZ0JveEV2CiBfX1pOSzdXZWJDb3JlMTFSZW5kZXJMYXllcjI0
bmVlZHNDb21wb3NpdGVkU2Nyb2xsaW5nRXYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZj
eHByb2ovV2ViQ29yZS52Y3hwcm9qCmluZGV4IDg2NjFiYjEuLjRkYTVhYTMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2oKKysrIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvagpAQCAtNzE4MCw2ICs3
MTgwLDggQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBhZ2VcUGFnZUNvbnNvbGVDbGll
bnQuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGFnZVxQYWdlR3JvdXAuY3Bw
IiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGFnZVxQYWdlR3JvdXBMb2FkRGVmZXJy
ZXIuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGFnZVxQYWdlT3ZlcmxheS5j
cHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwYWdlXFBhZ2VPdmVybGF5Q29udHJv
bGxlci5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwYWdlXFBhZ2VTZXJpYWxp
emVyLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBhZ2VcUGFnZVRocm90dGxl
ci5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwYWdlXFBhZ2VWaXNpYmlsaXR5
U3RhdGUuY3BwIiAvPgpAQCAtMTkxNzUsNiArMTkxNzcsOCBAQAogICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5ccGFnZVxQYWdlQ29uc29sZUNsaWVudC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5ccGFnZVxQYWdlR3JvdXAuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XHBhZ2VcUGFnZUdyb3VwTG9hZERlZmVycmVyLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxwYWdlXFBhZ2VPdmVybGF5LmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxw
YWdlXFBhZ2VPdmVybGF5Q29udHJvbGxlci5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5ccGFnZVxQYWdlU2VyaWFsaXplci5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
cGFnZVxQYWdlVmlzaWJpbGl0eVN0YXRlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxwYWdlXFBlcmZvcm1hbmNlLmgiIC8+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qLmZpbHRlcnMgYi9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qLmZpbHRlcnMKaW5kZXggZDcxY2NmZC4uMWM0ZmUx
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4
cHJvai5maWx0ZXJzCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3Jl
LnZjeHByb2ouZmlsdGVycwpAQCAtNDk5OCw2ICs0OTk4LDEyIEBACiAgICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxwYWdlXFBhZ2VHcm91cExvYWREZWZlcnJlci5jcHAiPgogICAgICAgPEZpbHRl
cj5wYWdlPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxwYWdlXFBhZ2VPdmVybGF5LmNwcCI+CisgICAgICA8RmlsdGVyPnBhZ2U8L0ZpbHRlcj4K
KyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBhZ2VcUGFnZU92
ZXJsYXlDb250cm9sbGVyLmNwcCI+CisgICAgICA8RmlsdGVyPnBhZ2U8L0ZpbHRlcj4KKyAgICA8
L0NsQ29tcGlsZT4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBhZ2VcUGFnZVNlcmlhbGl6
ZXIuY3BwIj4KICAgICAgIDxGaWx0ZXI+cGFnZTwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgpA
QCAtMTI5NDMsNiArMTI5NDksMTIgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBhZ2Vc
UGFnZUdyb3VwTG9hZERlZmVycmVyLmgiPgogICAgICAgPEZpbHRlcj5wYWdlPC9GaWx0ZXI+CiAg
ICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwYWdlXFBhZ2VPdmVy
bGF5LmgiPgorICAgICAgPEZpbHRlcj5wYWdlPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+Cisg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwYWdlXFBhZ2VPdmVybGF5Q29udHJvbGxlci5oIj4K
KyAgICAgIDxGaWx0ZXI+cGFnZTwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgogICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5ccGFnZVxQYWdlU2VyaWFsaXplci5oIj4KICAgICAgIDxGaWx0ZXI+
cGFnZTwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGRjZjQ2YWUuLjljMTgwNTkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
QEAgLTEwOTEsNiArMTA5MSwxMCBAQAogCQkyRDVBNTkyRjE1MjUyNTIzMDAzNkVFNTEgLyogSW1h
Z2VPcmllbnRhdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBBODc0OEQ3NDEyQ0MzRjg5MDAxRkJBNDEgLyogSW1hZ2VPcmllbnRhdGlvbi5jcHAg
Ki87IH07CiAJCTJENUE1OTMxMTUyNTI1RDAwMDM2RUU1MSAvKiBJbWFnZU9yaWVudGF0aW9uLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODc0OEQ2NjEy
Q0MzNzYzMDAxRkJBNDEgLyogSW1hZ2VPcmllbnRhdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTJENUJDNDI3MTZGODgyRUUwMDcwNDhEMCAv
KiBTZWN1cml0eVBvbGljeVZpb2xhdGlvbkV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRDVCQzQyNTE2Rjg4MkJFMDA3MDQ4RDAgLyogU2VjdXJp
dHlQb2xpY3lWaW9sYXRpb25FdmVudC5oICovOyB9OworCQkyRDVDOUNGRjE5QzdCNTJFMDBCM0M1
QzEgLyogUGFnZU92ZXJsYXkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMkQ1QzlDRkIxOUM3QjUyRTAwQjNDNUMxIC8qIFBhZ2VPdmVybGF5LmNwcCAq
LzsgfTsKKwkJMkQ1QzlEMDAxOUM3QjUyRTAwQjNDNUMxIC8qIFBhZ2VPdmVybGF5LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRDVDOUNGQzE5QzdCNTJF
MDBCM0M1QzEgLyogUGFnZU92ZXJsYXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQkyRDVDOUQwMTE5QzdCNTJFMDBCM0M1QzEgLyogUGFnZU92ZXJs
YXlDb250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDJENUM5Q0ZEMTlDN0I1MkUwMEIzQzVDMSAvKiBQYWdlT3ZlcmxheUNvbnRyb2xsZXIu
Y3BwICovOyB9OworCQkyRDVDOUQwMjE5QzdCNTJFMDBCM0M1QzEgLyogUGFnZU92ZXJsYXlDb250
cm9sbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAy
RDVDOUNGRTE5QzdCNTJFMDBCM0M1QzEgLyogUGFnZU92ZXJsYXlDb250cm9sbGVyLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMkQ2RTQ2ODQxN0Q2
NjBGNTAwRUNGOEJCIC8qIFBERkRvY3VtZW50SW1hZ2VNYWMubW0gaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRDZFNDY4MjE3RDY2MEY1MDBFQ0Y4QkIgLyog
UERGRG9jdW1lbnRJbWFnZU1hYy5tbSAqLzsgfTsKIAkJMkQ3MEJBMTMxODA3NERERjAwMDE5MDhB
IC8qIFBsYXRmb3JtQ0FMYXllck1hYy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMkQ3MEJBMTIxODA3NERERjAwMDE5MDhBIC8qIFBsYXRmb3JtQ0FMYXll
ck1hYy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTJENzBCQTE1MTgwNzRGODYwMDAxOTA4QSAvKiBQbGF0Zm9ybUNBTGF5ZXIuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkQ3MEJBMTQxODA3NEY4NTAw
MDE5MDhBIC8qIFBsYXRmb3JtQ0FMYXllci5jcHAgKi87IH07CkBAIC04MDg1LDYgKzgwODksMTAg
QEAKIAkJMkQ0NkYwNEYxN0I5NkZEMjAwNTY0N0YwIC8qIEludFNpemUuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW50U2l6ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTJENUJDNDI1MTZGODgyQkUwMDcwNDhEMCAvKiBTZWN1cml0eVBvbGljeVZp
b2xhdGlvbkV2ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNlY3VyaXR5
UG9saWN5VmlvbGF0aW9uRXZlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkQ1
QkM0MjYxNkY4ODJCRTAwNzA0OEQwIC8qIFNlY3VyaXR5UG9saWN5VmlvbGF0aW9uRXZlbnQuaWRs
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFNlY3VyaXR5UG9saWN5VmlvbGF0aW9uRXZlbnQuaWRs
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyRDVDOUNGQjE5QzdCNTJFMDBCM0M1QzEg
LyogUGFnZU92ZXJsYXkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
UGFnZU92ZXJsYXkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyRDVDOUNGQzE5
QzdCNTJFMDBCM0M1QzEgLyogUGFnZU92ZXJsYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gUGFnZU92ZXJsYXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMkQ1
QzlDRkQxOUM3QjUyRTAwQjNDNUMxIC8qIFBhZ2VPdmVybGF5Q29udHJvbGxlci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQYWdlT3ZlcmxheUNvbnRyb2xsZXIuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyRDVDOUNGRTE5QzdCNTJFMDBCM0M1QzEg
LyogUGFnZU92ZXJsYXlDb250cm9sbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFBhZ2VPdmVybGF5Q29udHJvbGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkyRDZFNDY4MjE3RDY2MEY1MDBFQ0Y4QkIgLyogUERGRG9jdW1lbnRJbWFnZU1hYy5tbSAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFBERkRvY3VtZW50SW1hZ2VNYWMu
bW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJENzBCQTEyMTgwNzREREYwMDAxOTA4
QSAvKiBQbGF0Zm9ybUNBTGF5ZXJNYWMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gUGxhdGZvcm1DQUxheWVyTWFjLmg7IHBhdGggPSBjYS9tYWMvUGxhdGZvcm1DQUxheWVyTWFj
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJENzBCQTE0MTgwNzRGODUwMDAxOTA4
QSAvKiBQbGF0Zm9ybUNBTGF5ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBu
YW1lID0gUGxhdGZvcm1DQUxheWVyLmNwcDsgcGF0aCA9IGNhL1BsYXRmb3JtQ0FMYXllci5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNjU5Nyw2ICsxNjYwNSwxMCBAQAogCQkJ
CTkzMDJCMEJFMEQ3OUY4MkMwMEM3RUU4MyAvKiBQYWdlR3JvdXAuaCAqLywKIAkJCQk3QTY3NEJE
OTBGOUVCRjRFMDA2Q0YwOTkgLyogUGFnZUdyb3VwTG9hZERlZmVycmVyLmNwcCAqLywKIAkJCQk3
QTY3NEJEQTBGOUVCRjRFMDA2Q0YwOTkgLyogUGFnZUdyb3VwTG9hZERlZmVycmVyLmggKi8sCisJ
CQkJMkQ1QzlDRkIxOUM3QjUyRTAwQjNDNUMxIC8qIFBhZ2VPdmVybGF5LmNwcCAqLywKKwkJCQky
RDVDOUNGQzE5QzdCNTJFMDBCM0M1QzEgLyogUGFnZU92ZXJsYXkuaCAqLywKKwkJCQkyRDVDOUNG
RDE5QzdCNTJFMDBCM0M1QzEgLyogUGFnZU92ZXJsYXlDb250cm9sbGVyLmNwcCAqLywKKwkJCQky
RDVDOUNGRTE5QzdCNTJFMDBCM0M1QzEgLyogUGFnZU92ZXJsYXlDb250cm9sbGVyLmggKi8sCiAJ
CQkJMzcxRTY1Q0QxMzY2MUVFRDAwQkVFREIwIC8qIFBhZ2VTZXJpYWxpemVyLmNwcCAqLywKIAkJ
CQkzNzFFNjVDQjEzNjYxRURDMDBCRUVEQjAgLyogUGFnZVNlcmlhbGl6ZXIuaCAqLywKIAkJCQlB
NzE5N0YyNTE3NTY4QUU1MDA3Qjk0NDIgLyogUGFnZVRocm90dGxlci5jcHAgKi8sCkBAIC0yMzY2
Miw2ICsyMzY3NCw3IEBACiAJCQkJOTdCQzZBMjExNTA1RjA4MTAwMUI3NEFDIC8qIERhdGFiYXNl
LmggaW4gSGVhZGVycyAqLywKIAkJCQk5N0JDNkEyNDE1MDVGMDgxMDAxQjc0QUMgLyogRGF0YWJh
c2VBdXRob3JpemVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRTE2Q0ZENDE2OUQxREVEMDBEM0Ew
QzcgLyogRGF0YWJhc2VCYWNrZW5kLmggaW4gSGVhZGVycyAqLywKKwkJCQkyRDVDOUQwMjE5QzdC
NTJFMDBCM0M1QzEgLyogUGFnZU92ZXJsYXlDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk5N0JDNjlEQjE1MDVGMDc2MDAxQjc0QUMgLyogRGF0YWJhc2VCYWNrZW5kQmFzZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJRkU2RjZBQjAxNjlFMDU3NTAwRkMzMEEyIC8qIERhdGFiYXNlQmFja2Vu
ZENvbnRleHQuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFMTZDRkQ2MTY5RDFERUQwMEQzQTBDNyAv
KiBEYXRhYmFzZUJhY2tlbmRTeW5jLmggaW4gSGVhZGVycyAqLywKQEAgLTI1NjI5LDYgKzI1NjQy
LDcgQEAKIAkJCQk0MzkwNDZFQzEyREEyNUU4MDBBRjgwQTkgLyogUmVuZGVyTWF0aE1MVG9rZW4u
aCBpbiBIZWFkZXJzICovLAogCQkJCTQzOTA0NkVBMTJEQTI1RTgwMEFGODBBMiAvKiBSZW5kZXJN
YXRoTUxVbmRlck92ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0QzI3OTU5MENGOTc0MTkwMEU5
N0I5OCAvKiBSZW5kZXJNZWRpYS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMkQ1QzlEMDAxOUM3QjUy
RTAwQjNDNUMxIC8qIFBhZ2VPdmVybGF5LmggaW4gSGVhZGVycyAqLywKIAkJCQlERUJDQ0REMjE2
NjQ2RTgyMDBBNDUyRTEgLyogUmVuZGVyTWVkaWFDb250cm9sRWxlbWVudHMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTQxRkEzMDNGMTMxNkMyOUMwMEMwQkZDNSAvKiBSZW5kZXJNZWRpYUNvbnRyb2xz
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBQkRERkU3QTBBNUM2RTcwMDBBM0UxMUQgLyogUmVuZGVy
TWVudUxpc3QuaCBpbiBIZWFkZXJzICovLApAQCAtMjgwMTcsNiArMjgwMzEsNyBAQAogCQkJCUE1
ODQwRTFDMTg3Qjc0RDUwMDg0M0IxMCAvKiBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNzFCMUUxMjYxNjQwNDkxQTAwQjE4ODBBIC8qIEluc3Bl
Y3RvckxheWVyVHJlZUFnZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUwNEFBQ0NEMTgzNDQ1
NTkwMEUzRDlCQyAvKiBJbnNwZWN0b3JOb2RlRmluZGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CTJENUM5RDAxMTlDN0I1MkUwMEIzQzVDMSAvKiBQYWdlT3ZlcmxheUNvbnRyb2xsZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJN0M1MjJENEIxNUI0NzdFODAwOUI3Qzk1IC8qIEluc3BlY3Rvck92
ZXJsYXkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNEY2RkRENjQxMzQxREVERDAwMUY4RUUzIC8q
IEluc3BlY3RvclBhZ2VBZ2VudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5OUNDMEI2NjE4QkU5
RjE1MDA2Q0VCQ0MgLyogSW5zcGVjdG9yUmVwbGF5QWdlbnQuY3BwIGluIFNvdXJjZXMgKi8sCkBA
IC0yODA4NSw2ICsyODEwMCw3IEBACiAJCQkJQkNDMDY1ODcwRjNDRTJBNzAwQ0QyRDg3IC8qIEpT
Q2xpZW50UmVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQ0MwNjU4OTBGM0NFMkE3MDBDRDJE
ODcgLyogSlNDbGllbnRSZWN0TGlzdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1QzQzMDRCNTE5
MUFFRjQ2MDAwRTJCQzAgLyogSlNFWFRTaGFkZXJUZXh0dXJlTE9ELmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCTJENUM5Q0ZGMTlDN0I1MkUwMEIzQzVDMSAvKiBQYWdlT3ZlcmxheS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk3NkZCOUZGODE5QTczRTNBMDA0MjA1NjIgLyogSlNBdXRvY29tcGxldGVF
cnJvckV2ZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDQTgzRTRGMEQ3Q0UxRTkwMDM0MjFB
OCAvKiBKU0RhdGFUcmFuc2Zlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQ0E4M0U1MjBEN0NF
MjA1MDAzNDIxQTggLyogSlNEYXRhVHJhbnNmZXJDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmggYi9Tb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmgKaW5kZXggMzdiZTQ0OC4uOWM5MGNiNyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2xvYWRlci9FbXB0eUNsaWVudHMuaApAQCAtMTgyLDYgKzE4Miw3IEBAIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsUmVjdEludG9WaWV3KGNvbnN0IEludFJlY3QmKSBj
b25zdCBvdmVycmlkZSB7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBhdHRhY2hSb290R3JhcGhpY3NM
YXllcihGcmFtZSosIEdyYXBoaWNzTGF5ZXIqKSBvdmVycmlkZSB7IH0KKyAgICB2aXJ0dWFsIHZv
aWQgYXR0YWNoVmlld092ZXJsYXlHcmFwaGljc0xheWVyKEZyYW1lKiwgR3JhcGhpY3NMYXllciop
IG92ZXJyaWRlIHsgfQogICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc09uZVNob3REcmF3aW5nU3lu
Y2hyb25pemF0aW9uKCkgb3ZlcnJpZGUgeyB9CiAgICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlQ29t
cG9zaXRpbmdMYXllckZsdXNoKCkgb3ZlcnJpZGUgeyB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZUNs
aWVudC5oCmluZGV4IGU4ZGEwZTkuLmJmNTYzNGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvQ2hyb21lQ2xpZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWVDbGll
bnQuaApAQCAtMjk5LDYgKzI5OSw3IEBAIHB1YmxpYzoKIAogICAgIC8vIFBhc3MgMCBhcyB0aGUg
R3JhcGhpY3NMYXllciB0byBkZXRhdGNoIHRoZSByb290IGxheWVyLgogICAgIHZpcnR1YWwgdm9p
ZCBhdHRhY2hSb290R3JhcGhpY3NMYXllcihGcmFtZSosIEdyYXBoaWNzTGF5ZXIqKSA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIGF0dGFjaFZpZXdPdmVybGF5R3JhcGhpY3NMYXllcihGcmFtZSosIEdy
YXBoaWNzTGF5ZXIqKSA9IDA7CiAgICAgLy8gU2V0cyBhIGZsYWcgdG8gc3BlY2lmeSB0aGF0IHRo
ZSBuZXh0IHRpbWUgY29udGVudCBpcyBkcmF3biB0byB0aGUgd2luZG93LAogICAgIC8vIHRoZSBj
aGFuZ2VzIGFwcGVhciBvbiB0aGUgc2NyZWVuIGluIHN5bmNocm9ueSB3aXRoIHVwZGF0ZXMgdG8g
R3JhcGhpY3NMYXllcnMuCiAgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzT25lU2hvdERyYXdpbmdT
eW5jaHJvbml6YXRpb24oKSA9IDA7CkBAIC0zMDgsOCArMzA5LDYgQEAgcHVibGljOgogICAgIC8v
IFJldHVybnMgd2hldGhlciBvciBub3QgdGhlIGNsaWVudCBjYW4gcmVuZGVyIHRoZSBjb21wb3Np
dGVkIGxheWVyLAogICAgIC8vIHJlZ2FyZGxlc3Mgb2YgdGhlIHNldHRpbmdzLgogICAgIHZpcnR1
YWwgYm9vbCBhbGxvd3NBY2NlbGVyYXRlZENvbXBvc2l0aW5nKCkgY29uc3QgeyByZXR1cm4gdHJ1
ZTsgfQotICAgIC8vIFN1cHBseSBhIGxheWVyIHRoYXQgd2lsbCBhZGRlZCBhcyBhbiBvdmVybGF5
IG92ZXIgb3RoZXIgZG9jdW1lbnQgbGF5ZXJzIChzY3JvbGxpbmcgd2l0aCB0aGUgZG9jdW1lbnQp
LgotICAgIHZpcnR1YWwgR3JhcGhpY3NMYXllciogZG9jdW1lbnRPdmVybGF5TGF5ZXJGb3JGcmFt
ZShGcmFtZSYpIHsgcmV0dXJuIG51bGxwdHI7IH0KIAogICAgIGVudW0gQ29tcG9zaXRpbmdUcmln
Z2VyIHsKICAgICAgICAgVGhyZWVEVHJhbnNmb3JtVHJpZ2dlciA9IDEgPDwgMCwKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAppbmRleCA1ZDkxMGYzLi5lYWZlYTYyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCkBAIC02Niw2ICs2Niw3IEBACiAjaW5jbHVkZSAiTW91
c2VFdmVudC5oIgogI2luY2x1ZGUgIk1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMuaCIKICNp
bmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiUGFnZU92ZXJsYXlDb250cm9sbGVyLmgiCiAjaW5j
bHVkZSAiUGxhdGZvcm1FdmVudC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtS2V5Ym9hcmRFdmVudC5o
IgogI2luY2x1ZGUgIlBsYXRmb3JtV2hlZWxFdmVudC5oIgpAQCAtMTY0Myw2ICsxNjQ0LDkgQEAg
Ym9vbCBFdmVudEhhbmRsZXI6OmhhbmRsZU1vdXNlUHJlc3NFdmVudChjb25zdCBQbGF0Zm9ybU1v
dXNlRXZlbnQmIHBsYXRmb3JtTW91c2UKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCisg
ICAgaWYgKG1fZnJhbWUubWFpbkZyYW1lKCkucGFnZU92ZXJsYXlDb250cm9sbGVyKCkuaGFuZGxl
TW91c2VFdmVudChwbGF0Zm9ybU1vdXNlRXZlbnQpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKwog
I2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCiAgICAgYm9vbCBkZWZhdWx0UHJldmVudGVkID0gZGlz
cGF0Y2hTeW50aGV0aWNUb3VjaEV2ZW50SWZFbmFibGVkKHBsYXRmb3JtTW91c2VFdmVudCk7CiAg
ICAgaWYgKGRlZmF1bHRQcmV2ZW50ZWQpCkBAIC0xODM2LDYgKzE4NDAsOSBAQCBib29sIEV2ZW50
SGFuZGxlcjo6bW91c2VNb3ZlZChjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIGV2ZW50KQogICAg
IFJlZlB0cjxGcmFtZVZpZXc+IHByb3RlY3RvcihtX2ZyYW1lLnZpZXcoKSk7CiAgICAgTWF4aW11
bUR1cmF0aW9uVHJhY2tlciBtYXhEdXJhdGlvblRyYWNrZXIoJm1fbWF4TW91c2VNb3ZlZER1cmF0
aW9uKTsKIAorICAgIGlmIChtX2ZyYW1lLm1haW5GcmFtZSgpLnBhZ2VPdmVybGF5Q29udHJvbGxl
cigpLmhhbmRsZU1vdXNlRXZlbnQoZXZlbnQpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKwogICAg
IEhpdFRlc3RSZXN1bHQgaG92ZXJlZE5vZGUgPSBIaXRUZXN0UmVzdWx0KExheW91dFBvaW50KCkp
OwogICAgIGJvb2wgcmVzdWx0ID0gaGFuZGxlTW91c2VNb3ZlRXZlbnQoZXZlbnQsICZob3ZlcmVk
Tm9kZSk7CiAKQEAgLTIwMTksNiArMjAyNiw5IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpoYW5kbGVN
b3VzZVJlbGVhc2VFdmVudChjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIHBsYXRmb3JtTW91CiAK
ICAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLnNldENhcmV0QmxpbmtpbmdTdXNwZW5kZWQoZmFsc2Up
OwogCisgICAgaWYgKG1fZnJhbWUubWFpbkZyYW1lKCkucGFnZU92ZXJsYXlDb250cm9sbGVyKCku
aGFuZGxlTW91c2VFdmVudChwbGF0Zm9ybU1vdXNlRXZlbnQpKQorICAgICAgICByZXR1cm4gdHJ1
ZTsKKwogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCiAgICAgYm9vbCBkZWZhdWx0UHJldmVudGVk
ID0gZGlzcGF0Y2hTeW50aGV0aWNUb3VjaEV2ZW50SWZFbmFibGVkKHBsYXRmb3JtTW91c2VFdmVu
dCk7CiAgICAgaWYgKGRlZmF1bHRQcmV2ZW50ZWQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL0ZyYW1lVmlldy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAK
aW5kZXggYmNiNTA0NC4uMTZjYWIzOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9G
cmFtZVZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcApAQCAt
NjAsNiArNjAsNyBAQAogI2luY2x1ZGUgIk1lbW9yeUNhY2hlLmgiCiAjaW5jbHVkZSAiTWVtb3J5
UHJlc3N1cmVIYW5kbGVyLmgiCiAjaW5jbHVkZSAiT3ZlcmZsb3dFdmVudC5oIgorI2luY2x1ZGUg
IlBhZ2VPdmVybGF5Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIlByb2dyZXNzVHJhY2tlci5oIgog
I2luY2x1ZGUgIlJlbmRlckVtYmVkZGVkT2JqZWN0LmgiCiAjaW5jbHVkZSAiUmVuZGVyRnVsbFNj
cmVlbi5oIgpAQCAtNDMzLDcgKzQzNCw2IEBAIHZvaWQgRnJhbWVWaWV3OjpzZXRGcmFtZVJlY3Qo
Y29uc3QgSW50UmVjdCYgbmV3UmVjdCkKICNpZiBFTkFCTEUoVEVYVF9BVVRPU0laSU5HKQogICAg
IC8vIEF1dG9zaXplZCBmb250IHNpemVzIGRlcGVuZCBvbiB0aGUgd2lkdGggb2YgdGhlIHZpZXdp
bmcgYXJlYS4KICAgICBpZiAobmV3UmVjdC53aWR0aCgpICE9IG9sZFJlY3Qud2lkdGgoKSkgewot
ICAgICAgICBQYWdlKiBwYWdlID0gZnJhbWUoKS5wYWdlKCk7CiAgICAgICAgIGlmIChmcmFtZSgp
LmlzTWFpbkZyYW1lKCkgJiYgcGFnZS0+c2V0dGluZ3MoKS50ZXh0QXV0b3NpemluZ0VuYWJsZWQo
KSkgewogICAgICAgICAgICAgZm9yIChGcmFtZSogZnJhbWUgPSAmcGFnZS0+bWFpbkZyYW1lKCk7
IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KCkpCiAgICAgICAgICAg
ICAgICAgZnJhbWUoKS5kb2N1bWVudCgpLT50ZXh0QXV0b3NpemVyKCktPnJlY2FsY3VsYXRlTXVs
dGlwbGllcnMoKTsKQEAgLTQ0OSw2ICs0NDksOSBAQCB2b2lkIEZyYW1lVmlldzo6c2V0RnJhbWVS
ZWN0KGNvbnN0IEludFJlY3QmIG5ld1JlY3QpCiAgICAgICAgIGlmIChyZW5kZXJWaWV3LT51c2Vz
Q29tcG9zaXRpbmcoKSkKICAgICAgICAgICAgIHJlbmRlclZpZXctPmNvbXBvc2l0b3IoKS5mcmFt
ZVZpZXdEaWRDaGFuZ2VTaXplKCk7CiAgICAgfQorCisgICAgaWYgKGZyYW1lKCkuaXNNYWluRnJh
bWUoKSkKKyAgICAgICAgZnJhbWUoKS5tYWluRnJhbWUoKS5wYWdlT3ZlcmxheUNvbnRyb2xsZXIo
KS5kaWRDaGFuZ2VWaWV3U2l6ZSgpOwogfQogCiAjaWYgRU5BQkxFKFJFUVVFU1RfQU5JTUFUSU9O
X0ZSQU1FKQpAQCAtNTYyLDYgKzU2NSw5IEBAIHZvaWQgRnJhbWVWaWV3OjpzZXRDb250ZW50c1Np
emUoY29uc3QgSW50U2l6ZSYgc2l6ZSkKIAogICAgIHBhZ2UtPmNocm9tZSgpLmNvbnRlbnRzU2l6
ZUNoYW5nZWQoJmZyYW1lKCksIHNpemUpOyAvLyBOb3RpZnkgb25seS4KIAorICAgIGlmIChmcmFt
ZSgpLmlzTWFpbkZyYW1lKCkpCisgICAgICAgIGZyYW1lKCkubWFpbkZyYW1lKCkucGFnZU92ZXJs
YXlDb250cm9sbGVyKCkuZGlkQ2hhbmdlRG9jdW1lbnRTaXplKCk7CisKICAgICBBU1NFUlQobV9k
ZWZlclNldE5lZWRzTGF5b3V0cyk7CiAgICAgbV9kZWZlclNldE5lZWRzTGF5b3V0cy0tOwogICAg
IApAQCAtMjA0OCw3ICsyMDU0LDcgQEAgdm9pZCBGcmFtZVZpZXc6OnNldEZpeGVkVmlzaWJsZUNv
bnRlbnRSZWN0KGNvbnN0IEludFJlY3QmIHZpc2libGVDb250ZW50UmVjdCkKICAgICAgICAgLy8g
VXBkYXRlIHRoZSBzY3JvbGwtYmFycyB0byBjYWxjdWxhdGUgbmV3IHBhZ2Utc3RlcCBzaXplLgog
ICAgICAgICB1cGRhdGVTY3JvbGxiYXJzKHNjcm9sbE9mZnNldCgpKTsKICAgICB9Ci0gICAgZnJh
bWUoKS5sb2FkZXIoKS5jbGllbnQoKS5kaWRDaGFuZ2VTY3JvbGxPZmZzZXQoKTsKKyAgICBkaWRD
aGFuZ2VTY3JvbGxPZmZzZXQoKTsKIH0KICNlbmRpZgogCkBAIC0yMDYxLDYgKzIwNjcsMTIgQEAg
dm9pZCBGcmFtZVZpZXc6OnNldFZpZXdwb3J0Q29uc3RyYWluZWRPYmplY3RzTmVlZExheW91dCgp
CiAgICAgICAgIHJlbmRlcmVyLT5zZXROZWVkc0xheW91dCgpOwogfQogCit2b2lkIEZyYW1lVmll
dzo6ZGlkQ2hhbmdlU2Nyb2xsT2Zmc2V0KCkKK3sKKyAgICBmcmFtZSgpLm1haW5GcmFtZSgpLnBh
Z2VPdmVybGF5Q29udHJvbGxlcigpLmRpZFNjcm9sbEZyYW1lKGZyYW1lKCkpOworICAgIGZyYW1l
KCkubG9hZGVyKCkuY2xpZW50KCkuZGlkQ2hhbmdlU2Nyb2xsT2Zmc2V0KCk7Cit9CisKIHZvaWQg
RnJhbWVWaWV3OjpzY3JvbGxQb3NpdGlvbkNoYW5nZWRWaWFQbGF0Zm9ybVdpZGdldChjb25zdCBJ
bnRQb2ludCYgb2xkUG9zaXRpb24sIGNvbnN0IEludFBvaW50JiBuZXdQb3NpdGlvbikKIHsKICAg
ICB1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyU2Nyb2xsaW5nKCk7CkBAIC0zMjIzLDcgKzMyMzUs
NyBAQCB2b2lkIEZyYW1lVmlldzo6c2Nyb2xsVG8oY29uc3QgSW50U2l6ZSYgbmV3T2Zmc2V0KQog
ICAgIFNjcm9sbFZpZXc6OnNjcm9sbFRvKG5ld09mZnNldCk7CiAgICAgaWYgKG9mZnNldCAhPSBz
Y3JvbGxPZmZzZXQoKSkKICAgICAgICAgc2Nyb2xsUG9zaXRpb25DaGFuZ2VkKG9sZFBvc2l0aW9u
LCBzY3JvbGxQb3NpdGlvbigpKTsKLSAgICBmcmFtZSgpLmxvYWRlcigpLmNsaWVudCgpLmRpZENo
YW5nZVNjcm9sbE9mZnNldCgpOworICAgIGRpZENoYW5nZVNjcm9sbE9mZnNldCgpOwogfQogCiBm
bG9hdCBGcmFtZVZpZXc6OmFkanVzdFNjcm9sbFN0ZXBGb3JGaXhlZENvbnRlbnQoZmxvYXQgc3Rl
cCwgU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24sIFNjcm9sbEdyYW51bGFyaXR5IGdy
YW51bGFyaXR5KQpAQCAtNDI5Miw3ICs0MzA0LDcgQEAgYm9vbCBGcmFtZVZpZXc6OndoZWVsRXZl
bnQoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JiB3aGVlbEV2ZW50KQogICAgICAgICBpZiAob2Zm
c2V0ICE9IG5ld09mZnNldCkgewogICAgICAgICAgICAgU2Nyb2xsVmlldzo6c2Nyb2xsVG8obmV3
T2Zmc2V0KTsKICAgICAgICAgICAgIHNjcm9sbFBvc2l0aW9uQ2hhbmdlZChvbGRQb3NpdGlvbiwg
c2Nyb2xsUG9zaXRpb24oKSk7Ci0gICAgICAgICAgICBmcmFtZSgpLmxvYWRlcigpLmNsaWVudCgp
LmRpZENoYW5nZVNjcm9sbE9mZnNldCgpOworICAgICAgICAgICAgZGlkQ2hhbmdlU2Nyb2xsT2Zm
c2V0KCk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAtNDYxNSw2
ICs0NjI3LDggQEAgdm9pZCBGcmFtZVZpZXc6OnNldEV4cG9zZWRSZWN0KEZsb2F0UmVjdCBleHBv
c2VkUmVjdCkKIAogICAgIGlmIChhdXRvKiB2aWV3ID0gcmVuZGVyVmlldygpKQogICAgICAgICB2
aWV3LT5jb21wb3NpdG9yKCkuc2NoZWR1bGVMYXllckZsdXNoKGZhbHNlIC8qIGNhblRocm90dGxl
ICovKTsKKworICAgIGZyYW1lKCkubWFpbkZyYW1lKCkucGFnZU92ZXJsYXlDb250cm9sbGVyKCku
ZGlkQ2hhbmdlRXhwb3NlZFJlY3QoKTsKIH0KICAgICAKIHZvaWQgRnJhbWVWaWV3OjpzZXRWaWV3
cG9ydFNpemVGb3JDU1NWaWV3cG9ydFVuaXRzKEludFNpemUgc2l6ZSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1l
Vmlldy5oCmluZGV4IDM3NTY5NmEuLjkyYWE5YjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvRnJhbWVWaWV3LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuaApA
QCAtNTExLDYgKzUxMSw4IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgZmxvYXQgYWRqdXN0U2Ny
b2xsU3RlcEZvckZpeGVkQ29udGVudChmbG9hdCBzdGVwLCBTY3JvbGxiYXJPcmllbnRhdGlvbiwg
U2Nyb2xsR3JhbnVsYXJpdHkpIG92ZXJyaWRlOwogCisgICAgdm9pZCBkaWRDaGFuZ2VTY3JvbGxP
ZmZzZXQoKTsKKwogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgYm9vbCBzY3JvbGxDb250ZW50c0Zh
c3RQYXRoKGNvbnN0IEludFNpemUmIHNjcm9sbERlbHRhLCBjb25zdCBJbnRSZWN0JiByZWN0VG9T
Y3JvbGwsIGNvbnN0IEludFJlY3QmIGNsaXBSZWN0KSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZv
aWQgc2Nyb2xsQ29udGVudHNTbG93UGF0aChjb25zdCBJbnRSZWN0JiB1cGRhdGVSZWN0KSBvdmVy
cmlkZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvTWFpbkZyYW1lLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvTWFpbkZyYW1lLmNwcAppbmRleCA4MjhiZDIzLi44NTUzNWJkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL01haW5GcmFtZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9NYWluRnJhbWUuY3BwCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAi
Y29uZmlnLmgiCiAjaW5jbHVkZSAiTWFpbkZyYW1lLmgiCiAKKyNpbmNsdWRlICJQYWdlT3Zlcmxh
eUNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJTY3JvbGxMYXRjaGluZ1N0YXRlLmgiCiAjaW5jbHVk
ZSAiV2hlZWxFdmVudERlbHRhVHJhY2tlci5oIgogCkBAIC0zOCw2ICszOSw3IEBAIGlubGluZSBN
YWluRnJhbWU6Ok1haW5GcmFtZShQYWdlJiBwYWdlLCBGcmFtZUxvYWRlckNsaWVudCYgY2xpZW50
KQogICAgICwgbV9sYXRjaGluZ1N0YXRlKHN0ZDo6bWFrZV91bmlxdWU8U2Nyb2xsTGF0Y2hpbmdT
dGF0ZT4oKSkKICNlbmRpZgogICAgICwgbV9yZWNlbnRXaGVlbEV2ZW50RGVsdGFUcmFja2VyKHN0
ZDo6bWFrZV91bmlxdWU8V2hlZWxFdmVudERlbHRhVHJhY2tlcj4oKSkKKyAgICAsIG1fcGFnZU92
ZXJsYXlDb250cm9sbGVyKHN0ZDo6bWFrZV91bmlxdWU8UGFnZU92ZXJsYXlDb250cm9sbGVyPigq
dGhpcykpCiB7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvTWFpbkZyYW1l
LmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL01haW5GcmFtZS5oCmluZGV4IDhhMTQ3NmIuLjM4ZDk0
NWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvTWFpbkZyYW1lLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9NYWluRnJhbWUuaApAQCAtMzAsNiArMzAsNyBAQAogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKK2NsYXNzIFBhZ2VPdmVybGF5Q29udHJvbGxlcjsKIGNsYXNzIFNjcm9s
bExhdGNoaW5nU3RhdGU7CiBjbGFzcyBXaGVlbEV2ZW50RGVsdGFUcmFja2VyOwogCkBAIC00Myw2
ICs0NCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNlbGZPbmx5RGVyZWYoKTsKIAogICAgIFdoZWVs
RXZlbnREZWx0YVRyYWNrZXIqIHdoZWVsRXZlbnREZWx0YVRyYWNrZXIoKSB7IHJldHVybiBtX3Jl
Y2VudFdoZWVsRXZlbnREZWx0YVRyYWNrZXIuZ2V0KCk7IH0KKyAgICBQYWdlT3ZlcmxheUNvbnRy
b2xsZXImIHBhZ2VPdmVybGF5Q29udHJvbGxlcigpIHsgcmV0dXJuICptX3BhZ2VPdmVybGF5Q29u
dHJvbGxlcjsgfQogCiAjaWYgUExBVEZPUk0oTUFDKQogICAgIFNjcm9sbExhdGNoaW5nU3RhdGUq
IGxhdGNoaW5nU3RhdGUoKSB7IHJldHVybiBtX2xhdGNoaW5nU3RhdGUuZ2V0KCk7IH0KQEAgLTYw
LDYgKzYyLDcgQEAgcHJpdmF0ZToKICAgICBzdGQ6OnVuaXF1ZV9wdHI8U2Nyb2xsTGF0Y2hpbmdT
dGF0ZT4gbV9sYXRjaGluZ1N0YXRlOwogI2VuZGlmCiAgICAgc3RkOjp1bmlxdWVfcHRyPFdoZWVs
RXZlbnREZWx0YVRyYWNrZXI+IG1fcmVjZW50V2hlZWxFdmVudERlbHRhVHJhY2tlcjsKKyAgICBz
dGQ6OnVuaXF1ZV9wdHI8UGFnZU92ZXJsYXlDb250cm9sbGVyPiBtX3BhZ2VPdmVybGF5Q29udHJv
bGxlcjsKIH07CiAKIGlubGluZSBib29sIEZyYW1lOjppc01haW5GcmFtZSgpIGNvbnN0CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9QYWdlLmNwcAppbmRleCAyNmI4ZDE3Li4wZTY5ZDE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL1BhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAKQEAg
LTYwLDYgKzYwLDcgQEAKICNpbmNsdWRlICJQYWdlQ29uc29sZUNsaWVudC5oIgogI2luY2x1ZGUg
IlBhZ2VEZWJ1Z2dhYmxlLmgiCiAjaW5jbHVkZSAiUGFnZUdyb3VwLmgiCisjaW5jbHVkZSAiUGFn
ZU92ZXJsYXlDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiUGFnZVRocm90dGxlci5oIgogI2luY2x1
ZGUgIlBsdWdJbkNsaWVudC5oIgogI2luY2x1ZGUgIlBsdWdpbkRhdGEuaCIKQEAgLTgxMSw2ICs4
MTIsOCBAQCB2b2lkIFBhZ2U6OnNldERldmljZVNjYWxlRmFjdG9yKGZsb2F0IHNjYWxlRmFjdG9y
KQogCiAgICAgcGFnZUNhY2hlKCktPm1hcmtQYWdlc0ZvckZ1bGxTdHlsZVJlY2FsYyh0aGlzKTsK
ICAgICBHcmFwaGljc0NvbnRleHQ6OnVwZGF0ZURvY3VtZW50TWFya2VyUmVzb3VyY2VzKCk7CisK
KyAgICBtYWluRnJhbWUoKS5wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKS5kaWRDaGFuZ2VEZXZpY2VT
Y2FsZUZhY3RvcigpOwogfQogCiB2b2lkIFBhZ2U6OnNldFRvcENvbnRlbnRJbnNldChmbG9hdCBj
b250ZW50SW5zZXQpCkBAIC0xNjE4LDcgKzE2MjEsNiBAQCB2b2lkIFBhZ2U6OnNldFNlc3Npb25J
RChTZXNzaW9uSUQgc2Vzc2lvbklEKQogCiAgICAgZm9yIChhdXRvJiB2aWV3IDogcGx1Z2luVmll
d3MoKSkKICAgICAgICAgdmlldy0+cHJpdmF0ZUJyb3dzaW5nU3RhdGVDaGFuZ2VkKHNlc3Npb25J
RC5pc0VwaGVtZXJhbCgpKTsKLQogfQogCiBQYWdlOjpQYWdlQ2xpZW50czo6UGFnZUNsaWVudHMo
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlT3ZlcmxheS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL1BhZ2VPdmVybGF5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi4wNzQ5MTYyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9QYWdlT3ZlcmxheS5jcHAKQEAgLTAsMCArMSwyNjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUGFnZU92ZXJsYXkuaCIKKworI2luY2x1ZGUgIkZyYW1l
Vmlldy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIk1haW5GcmFt
ZS5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJQYWdlT3ZlcmxheUNvbnRyb2xsZXIu
aCIKKyNpbmNsdWRlICJQbGF0Zm9ybU1vdXNlRXZlbnQuaCIKKyNpbmNsdWRlICJTY3JvbGxiYXJU
aGVtZS5oIgorI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK3N0YXRpYyBjb25zdCBkb3VibGUgZmFkZUFuaW1hdGlvbkR1cmF0aW9uID0gMC4yOwor
c3RhdGljIGNvbnN0IGRvdWJsZSBmYWRlQW5pbWF0aW9uRnJhbWVSYXRlID0gMzA7CisKK1Bhc3NS
ZWZQdHI8UGFnZU92ZXJsYXk+IFBhZ2VPdmVybGF5OjpjcmVhdGUoQ2xpZW50JiBjbGllbnQsIE92
ZXJsYXlUeXBlIG92ZXJsYXlUeXBlKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgUGFnZU92
ZXJsYXkoY2xpZW50LCBvdmVybGF5VHlwZSkpOworfQorCitQYWdlT3ZlcmxheTo6UGFnZU92ZXJs
YXkoQ2xpZW50JiBjbGllbnQsIE92ZXJsYXlUeXBlIG92ZXJsYXlUeXBlKQorICAgIDogbV9jbGll
bnQoY2xpZW50KQorICAgICwgbV9wYWdlKG51bGxwdHIpCisgICAgLCBtX2ZhZGVBbmltYXRpb25U
aW1lcihSdW5Mb29wOjptYWluKCksIHRoaXMsICZQYWdlT3ZlcmxheTo6ZmFkZUFuaW1hdGlvblRp
bWVyRmlyZWQpCisgICAgLCBtX2ZhZGVBbmltYXRpb25TdGFydFRpbWUoMCkKKyAgICAsIG1fZmFk
ZUFuaW1hdGlvbkR1cmF0aW9uKGZhZGVBbmltYXRpb25EdXJhdGlvbikKKyAgICAsIG1fZmFkZUFu
aW1hdGlvblR5cGUoTm9BbmltYXRpb24pCisgICAgLCBtX2ZyYWN0aW9uRmFkZWRJbigxKQorICAg
ICwgbV9vdmVybGF5VHlwZShvdmVybGF5VHlwZSkKKyAgICAsIG1fYmFja2dyb3VuZENvbG9yKENv
bG9yOjp0cmFuc3BhcmVudCkKK3sKK30KKworUGFnZU92ZXJsYXk6On5QYWdlT3ZlcmxheSgpCit7
Cit9CisKK1BhZ2VPdmVybGF5Q29udHJvbGxlciogUGFnZU92ZXJsYXk6OmNvbnRyb2xsZXIoKSBj
b25zdAoreworICAgIGlmICghbV9wYWdlKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBy
ZXR1cm4gJm1fcGFnZS0+bWFpbkZyYW1lKCkucGFnZU92ZXJsYXlDb250cm9sbGVyKCk7Cit9CisK
K0ludFJlY3QgUGFnZU92ZXJsYXk6OmJvdW5kcygpIGNvbnN0Cit7CisgICAgaWYgKCFtX292ZXJy
aWRlRnJhbWUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gSW50UmVjdChJbnRQb2ludCgpLCBt
X292ZXJyaWRlRnJhbWUuc2l6ZSgpKTsKKworICAgIEZyYW1lVmlldyogZnJhbWVWaWV3ID0gbV9w
YWdlLT5tYWluRnJhbWUoKS52aWV3KCk7CisKKyAgICBpZiAoIWZyYW1lVmlldykKKyAgICAgICAg
cmV0dXJuIEludFJlY3QoKTsKKworICAgIHN3aXRjaCAobV9vdmVybGF5VHlwZSkgeworICAgIGNh
c2UgT3ZlcmxheVR5cGU6OlZpZXc6IHsKKyAgICAgICAgaW50IHdpZHRoID0gZnJhbWVWaWV3LT53
aWR0aCgpOworICAgICAgICBpbnQgaGVpZ2h0ID0gZnJhbWVWaWV3LT5oZWlnaHQoKTsKKworICAg
ICAgICBpZiAoIVNjcm9sbGJhclRoZW1lOjp0aGVtZSgpLT51c2VzT3ZlcmxheVNjcm9sbGJhcnMo
KSkgeworICAgICAgICAgICAgaWYgKGZyYW1lVmlldy0+dmVydGljYWxTY3JvbGxiYXIoKSkKKyAg
ICAgICAgICAgICAgICB3aWR0aCAtPSBmcmFtZVZpZXctPnZlcnRpY2FsU2Nyb2xsYmFyKCktPndp
ZHRoKCk7CisgICAgICAgICAgICBpZiAoZnJhbWVWaWV3LT5ob3Jpem9udGFsU2Nyb2xsYmFyKCkp
CisgICAgICAgICAgICAgICAgaGVpZ2h0IC09IGZyYW1lVmlldy0+aG9yaXpvbnRhbFNjcm9sbGJh
cigpLT5oZWlnaHQoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gSW50UmVjdCgwLCAwLCB3
aWR0aCwgaGVpZ2h0KTsKKyAgICB9CisgICAgY2FzZSBPdmVybGF5VHlwZTo6RG9jdW1lbnQ6Cisg
ICAgICAgIHJldHVybiBJbnRSZWN0KEludFBvaW50KCksIGZyYW1lVmlldy0+Y29udGVudHNTaXpl
KCkpOworICAgIH07CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gSW50
UmVjdChJbnRQb2ludCgpLCBmcmFtZVZpZXctPmNvbnRlbnRzU2l6ZSgpKTsKK30KKworSW50UmVj
dCBQYWdlT3ZlcmxheTo6ZnJhbWUoKSBjb25zdAoreworICAgIGlmICghbV9vdmVycmlkZUZyYW1l
LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIG1fb3ZlcnJpZGVGcmFtZTsKKworICAgIHJldHVy
biBib3VuZHMoKTsKK30KKwordm9pZCBQYWdlT3ZlcmxheTo6c2V0RnJhbWUoSW50UmVjdCBmcmFt
ZSkKK3sKKyAgICBpZiAobV9vdmVycmlkZUZyYW1lID09IGZyYW1lKQorICAgICAgICByZXR1cm47
CisKKyAgICBtX292ZXJyaWRlRnJhbWUgPSBmcmFtZTsKKworICAgIGlmIChhdXRvIHBhZ2VPdmVy
bGF5Q29udHJvbGxlciA9IGNvbnRyb2xsZXIoKSkKKyAgICAgICAgcGFnZU92ZXJsYXlDb250cm9s
bGVyLT5kaWRDaGFuZ2VPdmVybGF5RnJhbWUoKnRoaXMpOworfQorCit2b2lkIFBhZ2VPdmVybGF5
OjpzZXRCYWNrZ3JvdW5kQ29sb3IoUkdCQTMyIGJhY2tncm91bmRDb2xvcikKK3sKKyAgICBpZiAo
bV9iYWNrZ3JvdW5kQ29sb3IgPT0gYmFja2dyb3VuZENvbG9yKQorICAgICAgICByZXR1cm47CisK
KyAgICBtX2JhY2tncm91bmRDb2xvciA9IGJhY2tncm91bmRDb2xvcjsKKworICAgIGlmIChhdXRv
IHBhZ2VPdmVybGF5Q29udHJvbGxlciA9IGNvbnRyb2xsZXIoKSkKKyAgICAgICAgcGFnZU92ZXJs
YXlDb250cm9sbGVyLT5kaWRDaGFuZ2VPdmVybGF5QmFja2dyb3VuZENvbG9yKCp0aGlzKTsKK30K
Kwordm9pZCBQYWdlT3ZlcmxheTo6c2V0UGFnZShQYWdlKiBwYWdlKQoreworICAgIG1fY2xpZW50
LndpbGxNb3ZlVG9QYWdlKCp0aGlzLCBwYWdlKTsKKyAgICBtX3BhZ2UgPSBwYWdlOworICAgIG1f
Y2xpZW50LmRpZE1vdmVUb1BhZ2UoKnRoaXMsIHBhZ2UpOworCisgICAgbV9mYWRlQW5pbWF0aW9u
VGltZXIuc3RvcCgpOworfQorCit2b2lkIFBhZ2VPdmVybGF5OjpzZXROZWVkc0Rpc3BsYXkoY29u
c3QgSW50UmVjdCYgZGlydHlSZWN0KQoreworICAgIGlmIChhdXRvIHBhZ2VPdmVybGF5Q29udHJv
bGxlciA9IGNvbnRyb2xsZXIoKSkgeworICAgICAgICBwYWdlT3ZlcmxheUNvbnRyb2xsZXItPnNl
dFBhZ2VPdmVybGF5T3BhY2l0eSgqdGhpcywgbV9mcmFjdGlvbkZhZGVkSW4pOworICAgICAgICBw
YWdlT3ZlcmxheUNvbnRyb2xsZXItPnNldFBhZ2VPdmVybGF5TmVlZHNEaXNwbGF5KCp0aGlzLCBk
aXJ0eVJlY3QpOworICAgIH0KK30KKwordm9pZCBQYWdlT3ZlcmxheTo6c2V0TmVlZHNEaXNwbGF5
KCkKK3sKKyAgICBzZXROZWVkc0Rpc3BsYXkoYm91bmRzKCkpOworfQorCit2b2lkIFBhZ2VPdmVy
bGF5OjpkcmF3UmVjdChHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgSW50
UmVjdCYgZGlydHlSZWN0KQoreworICAgIC8vIElmIHRoZSBkaXJ0eSByZWN0IGlzIG91dHNpZGUg
dGhlIGJvdW5kcywgaWdub3JlIGl0LgorICAgIEludFJlY3QgcGFpbnRSZWN0ID0gaW50ZXJzZWN0
aW9uKGRpcnR5UmVjdCwgYm91bmRzKCkpOworICAgIGlmIChwYWludFJlY3QuaXNFbXB0eSgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2
ZXIoZ3JhcGhpY3NDb250ZXh0KTsKKyAgICBtX2NsaWVudC5kcmF3UmVjdCgqdGhpcywgZ3JhcGhp
Y3NDb250ZXh0LCBwYWludFJlY3QpOworfQorICAgIAorYm9vbCBQYWdlT3ZlcmxheTo6bW91c2VF
dmVudChjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIG1vdXNlRXZlbnQpCit7CisgICAgSW50UG9p
bnQgbW91c2VQb3NpdGlvbkluT3ZlcmxheUNvb3JkaW5hdGVzKG1vdXNlRXZlbnQucG9zaXRpb24o
KSk7CisKKyAgICBpZiAobV9vdmVybGF5VHlwZSA9PSBQYWdlT3ZlcmxheTo6T3ZlcmxheVR5cGU6
OkRvY3VtZW50KQorICAgICAgICBtb3VzZVBvc2l0aW9uSW5PdmVybGF5Q29vcmRpbmF0ZXMgPSBt
X3BhZ2UtPm1haW5GcmFtZSgpLnZpZXcoKS0+cm9vdFZpZXdUb0NvbnRlbnRzKG1vdXNlUG9zaXRp
b25Jbk92ZXJsYXlDb29yZGluYXRlcyk7CisKKyAgICAvLyBJZ25vcmUgZXZlbnRzIG91dHNpZGUg
dGhlIGJvdW5kcy4KKyAgICBpZiAoIWJvdW5kcygpLmNvbnRhaW5zKG1vdXNlUG9zaXRpb25Jbk92
ZXJsYXlDb29yZGluYXRlcykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBt
X2NsaWVudC5tb3VzZUV2ZW50KCp0aGlzLCBtb3VzZUV2ZW50KTsKK30KKwordm9pZCBQYWdlT3Zl
cmxheTo6ZGlkU2Nyb2xsRnJhbWUoRnJhbWUmIGZyYW1lKQoreworICAgIG1fY2xpZW50LmRpZFNj
cm9sbEZyYW1lKCp0aGlzLCBmcmFtZSk7Cit9CisKK2Jvb2wgUGFnZU92ZXJsYXk6OmNvcHlBY2Nl
c3NpYmlsaXR5QXR0cmlidXRlU3RyaW5nVmFsdWVGb3JQb2ludChTdHJpbmcgYXR0cmlidXRlLCBG
bG9hdFBvaW50IHBhcmFtZXRlciwgU3RyaW5nJiB2YWx1ZSkKK3sKKyAgICByZXR1cm4gbV9jbGll
bnQuY29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVTdHJpbmdWYWx1ZUZvclBvaW50KCp0aGlzLCBh
dHRyaWJ1dGUsIHBhcmFtZXRlciwgdmFsdWUpOworfQorCitib29sIFBhZ2VPdmVybGF5Ojpjb3B5
QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZUJvb2xWYWx1ZUZvclBvaW50KFN0cmluZyBhdHRyaWJ1dGUs
IEZsb2F0UG9pbnQgcGFyYW1ldGVyLCBib29sJiB2YWx1ZSkKK3sKKyAgICByZXR1cm4gbV9jbGll
bnQuY29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVCb29sVmFsdWVGb3JQb2ludCgqdGhpcywgYXR0
cmlidXRlLCBwYXJhbWV0ZXIsIHZhbHVlKTsKK30KKworVmVjdG9yPFN0cmluZz4gUGFnZU92ZXJs
YXk6OmNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlTmFtZXMoYm9vbCBwYXJhbWV0ZXJpemVkTmFt
ZXMpCit7CisgICAgcmV0dXJuIG1fY2xpZW50LmNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlTmFt
ZXMoKnRoaXMsIHBhcmFtZXRlcml6ZWROYW1lcyk7Cit9CisKK3ZvaWQgUGFnZU92ZXJsYXk6OnN0
YXJ0RmFkZUluQW5pbWF0aW9uKCkKK3sKKyAgICBtX2ZyYWN0aW9uRmFkZWRJbiA9IDA7CisgICAg
bV9mYWRlQW5pbWF0aW9uVHlwZSA9IEZhZGVJbkFuaW1hdGlvbjsKKworICAgIHN0YXJ0RmFkZUFu
aW1hdGlvbigpOworfQorCit2b2lkIFBhZ2VPdmVybGF5OjpzdGFydEZhZGVPdXRBbmltYXRpb24o
KQoreworICAgIG1fZnJhY3Rpb25GYWRlZEluID0gMTsKKyAgICBtX2ZhZGVBbmltYXRpb25UeXBl
ID0gRmFkZU91dEFuaW1hdGlvbjsKKworICAgIHN0YXJ0RmFkZUFuaW1hdGlvbigpOworfQorCit2
b2lkIFBhZ2VPdmVybGF5OjpzdG9wRmFkZU91dEFuaW1hdGlvbigpCit7CisgICAgbV9mcmFjdGlv
bkZhZGVkSW4gPSAxLjA7CisgICAgbV9mYWRlQW5pbWF0aW9uVGltZXIuc3RvcCgpOworfQorCit2
b2lkIFBhZ2VPdmVybGF5OjpzdGFydEZhZGVBbmltYXRpb24oKQoreworICAgIG1fZmFkZUFuaW1h
dGlvblN0YXJ0VGltZSA9IGN1cnJlbnRUaW1lKCk7CisgICAgbV9mYWRlQW5pbWF0aW9uVGltZXIu
c3RhcnRSZXBlYXRpbmcoMSAvIGZhZGVBbmltYXRpb25GcmFtZVJhdGUpOworfQorCit2b2lkIFBh
Z2VPdmVybGF5OjpmYWRlQW5pbWF0aW9uVGltZXJGaXJlZCgpCit7CisgICAgZmxvYXQgYW5pbWF0
aW9uUHJvZ3Jlc3MgPSAoY3VycmVudFRpbWUoKSAtIG1fZmFkZUFuaW1hdGlvblN0YXJ0VGltZSkg
LyBtX2ZhZGVBbmltYXRpb25EdXJhdGlvbjsKKworICAgIGlmIChhbmltYXRpb25Qcm9ncmVzcyA+
PSAxLjApCisgICAgICAgIGFuaW1hdGlvblByb2dyZXNzID0gMS4wOworCisgICAgZG91YmxlIHNp
bmUgPSBzaW4ocGlPdmVyVHdvRmxvYXQgKiBhbmltYXRpb25Qcm9ncmVzcyk7CisgICAgZmxvYXQg
ZmFkZUFuaW1hdGlvblZhbHVlID0gc2luZSAqIHNpbmU7CisKKyAgICBtX2ZyYWN0aW9uRmFkZWRJ
biA9IChtX2ZhZGVBbmltYXRpb25UeXBlID09IEZhZGVJbkFuaW1hdGlvbikgPyBmYWRlQW5pbWF0
aW9uVmFsdWUgOiAxIC0gZmFkZUFuaW1hdGlvblZhbHVlOworICAgIGNvbnRyb2xsZXIoKS0+c2V0
UGFnZU92ZXJsYXlPcGFjaXR5KCp0aGlzLCBtX2ZyYWN0aW9uRmFkZWRJbik7CisKKyAgICBpZiAo
YW5pbWF0aW9uUHJvZ3Jlc3MgPT0gMS4wKSB7CisgICAgICAgIG1fZmFkZUFuaW1hdGlvblRpbWVy
LnN0b3AoKTsKKworICAgICAgICBib29sIHdhc0ZhZGluZ091dCA9IG1fZmFkZUFuaW1hdGlvblR5
cGUgPT0gRmFkZU91dEFuaW1hdGlvbjsKKyAgICAgICAgbV9mYWRlQW5pbWF0aW9uVHlwZSA9IE5v
QW5pbWF0aW9uOworCisgICAgICAgIC8vIElmIHRoaXMgd2FzIGEgZmFkZSBvdXQsIGdvIGFoZWFk
IGFuZCB1bmluc3RhbGwgdGhlIHBhZ2Ugb3ZlcmxheS4KKyAgICAgICAgaWYgKHdhc0ZhZGluZ091
dCkKKyAgICAgICAgICAgIGNvbnRyb2xsZXIoKS0+dW5pbnN0YWxsUGFnZU92ZXJsYXkodGhpcywg
UGFnZU92ZXJsYXk6OkZhZGVNb2RlOjpEb05vdEZhZGUpOworICAgIH0KK30KKwordm9pZCBQYWdl
T3ZlcmxheTo6Y2xlYXIoKQoreworICAgIGlmIChhdXRvIHBhZ2VPdmVybGF5Q29udHJvbGxlciA9
IGNvbnRyb2xsZXIoKSkKKyAgICAgICAgcGFnZU92ZXJsYXlDb250cm9sbGVyLT5jbGVhclBhZ2VP
dmVybGF5KCp0aGlzKTsKK30KKworR3JhcGhpY3NMYXllciYgUGFnZU92ZXJsYXk6OmxheWVyKCkK
K3sKKyAgICByZXR1cm4gY29udHJvbGxlcigpLT5sYXllckZvck92ZXJsYXkoKnRoaXMpOworfQor
Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
UGFnZU92ZXJsYXkuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZU92ZXJsYXkuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MzI3MDhkMgotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZU92ZXJsYXkuaApAQCAtMCwwICsxLDE0MSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpZm5kZWYgUGFnZU92ZXJsYXlfaAorI2RlZmluZSBQYWdlT3ZlcmxheV9oCisK
KyNpbmNsdWRlICJDb2xvci5oIgorI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKKyNpbmNsdWRlICJJ
bnRSZWN0LmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVm
Q291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9SdW5Mb29wLmg+CisjaW5jbHVkZSA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRnJhbWU7CitjbGFz
cyBHcmFwaGljc0NvbnRleHQ7CitjbGFzcyBHcmFwaGljc0xheWVyOworY2xhc3MgUGFnZTsKK2Ns
YXNzIFBhZ2VPdmVybGF5Q29udHJvbGxlcjsKK2NsYXNzIFBsYXRmb3JtTW91c2VFdmVudDsKKwor
Y2xhc3MgUGFnZU92ZXJsYXkgZmluYWwgOiBwdWJsaWMgUmVmQ291bnRlZDxQYWdlT3ZlcmxheT4g
eworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFBhZ2VPdmVybGF5KTsKKyAgICBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBjbGFzcyBDbGllbnQgeworICAgIHByb3RlY3Rl
ZDoKKyAgICAgICAgdmlydHVhbCB+Q2xpZW50KCkgeyB9CisgICAgCisgICAgcHVibGljOgorICAg
ICAgICB2aXJ0dWFsIHZvaWQgcGFnZU92ZXJsYXlEZXN0cm95ZWQoUGFnZU92ZXJsYXkmKSA9IDA7
CisgICAgICAgIHZpcnR1YWwgdm9pZCB3aWxsTW92ZVRvUGFnZShQYWdlT3ZlcmxheSYsIFBhZ2Uq
KSA9IDA7CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRNb3ZlVG9QYWdlKFBhZ2VPdmVybGF5Jiwg
UGFnZSopID0gMDsKKyAgICAgICAgdmlydHVhbCB2b2lkIGRyYXdSZWN0KFBhZ2VPdmVybGF5Jiwg
R3JhcGhpY3NDb250ZXh0JiwgY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KSA9IDA7CisgICAgICAg
IHZpcnR1YWwgYm9vbCBtb3VzZUV2ZW50KFBhZ2VPdmVybGF5JiwgY29uc3QgUGxhdGZvcm1Nb3Vz
ZUV2ZW50JikgPSAwOworICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkU2Nyb2xsRnJhbWUoUGFnZU92
ZXJsYXkmLCBGcmFtZSYpIHsgfQorCisgICAgICAgIHZpcnR1YWwgYm9vbCBjb3B5QWNjZXNzaWJp
bGl0eUF0dHJpYnV0ZVN0cmluZ1ZhbHVlRm9yUG9pbnQoUGFnZU92ZXJsYXkmLCBTdHJpbmcgLyog
YXR0cmlidXRlICovLCBGbG9hdFBvaW50LCBTdHJpbmcmKSB7IHJldHVybiBmYWxzZTsgfQorICAg
ICAgICB2aXJ0dWFsIGJvb2wgY29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVCb29sVmFsdWVGb3JQ
b2ludChQYWdlT3ZlcmxheSYsIFN0cmluZyAvKiBhdHRyaWJ1dGUgKi8sIEZsb2F0UG9pbnQsIGJv
b2wmKSAgeyByZXR1cm4gZmFsc2U7IH0KKyAgICAgICAgdmlydHVhbCBWZWN0b3I8U3RyaW5nPiBj
b3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZU5hbWVzKFBhZ2VPdmVybGF5JiwgYm9vbCAvKiBwYXJh
bWV0ZXJpemVkTmFtZXMgKi8pICB7IHJldHVybiBWZWN0b3I8U3RyaW5nPigpOyB9CisgICAgfTsK
KworICAgIGVudW0gY2xhc3MgT3ZlcmxheVR5cGUgeworICAgICAgICBWaWV3LCAvLyBGaXhlZCB0
byB0aGUgdmlldyBzaXplOyBkb2VzIG5vdCBzY2FsZSBvciBzY3JvbGwgd2l0aCB0aGUgZG9jdW1l
bnQsIHJlcGFpbnRzIG9uIHNjcm9sbC4KKyAgICAgICAgRG9jdW1lbnQsIC8vIFNjYWxlcyBhbmQg
c2Nyb2xscyB3aXRoIHRoZSBkb2N1bWVudC4KKyAgICB9OworCisgICAgc3RhdGljIFBhc3NSZWZQ
dHI8UGFnZU92ZXJsYXk+IGNyZWF0ZShDbGllbnQmLCBPdmVybGF5VHlwZSA9IE92ZXJsYXlUeXBl
OjpWaWV3KTsKKyAgICB2aXJ0dWFsIH5QYWdlT3ZlcmxheSgpOworCisgICAgUGFnZU92ZXJsYXlD
b250cm9sbGVyKiBjb250cm9sbGVyKCkgY29uc3Q7CisKKyAgICB2b2lkIHNldFBhZ2UoUGFnZSop
OworICAgIHZvaWQgc2V0TmVlZHNEaXNwbGF5KGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCk7Cisg
ICAgdm9pZCBzZXROZWVkc0Rpc3BsYXkoKTsKKworICAgIHZvaWQgZHJhd1JlY3QoR3JhcGhpY3ND
b250ZXh0JiwgY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KTsKKyAgICBib29sIG1vdXNlRXZlbnQo
Y29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50Jik7CisgICAgdm9pZCBkaWRTY3JvbGxGcmFtZShGcmFt
ZSYpOworCisgICAgYm9vbCBjb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVN0cmluZ1ZhbHVlRm9y
UG9pbnQoU3RyaW5nIGF0dHJpYnV0ZSwgRmxvYXRQb2ludCBwYXJhbWV0ZXIsIFN0cmluZyYgdmFs
dWUpOworICAgIGJvb2wgY29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVCb29sVmFsdWVGb3JQb2lu
dChTdHJpbmcgYXR0cmlidXRlLCBGbG9hdFBvaW50IHBhcmFtZXRlciwgYm9vbCYgdmFsdWUpOwor
ICAgIFZlY3RvcjxTdHJpbmc+IGNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlTmFtZXMoYm9vbCBw
YXJhbWV0ZXJpemVkTmFtZXMpOworICAgIAorICAgIHZvaWQgc3RhcnRGYWRlSW5BbmltYXRpb24o
KTsKKyAgICB2b2lkIHN0YXJ0RmFkZU91dEFuaW1hdGlvbigpOworICAgIHZvaWQgc3RvcEZhZGVP
dXRBbmltYXRpb24oKTsKKworICAgIHZvaWQgY2xlYXIoKTsKKworICAgIENsaWVudCYgY2xpZW50
KCkgY29uc3QgeyByZXR1cm4gbV9jbGllbnQ7IH0KKworICAgIGVudW0gY2xhc3MgRmFkZU1vZGUg
eyBEb05vdEZhZGUsIEZhZGUgfTsKKworICAgIE92ZXJsYXlUeXBlIG92ZXJsYXlUeXBlKCkgeyBy
ZXR1cm4gbV9vdmVybGF5VHlwZTsgfQorCisgICAgSW50UmVjdCBib3VuZHMoKSBjb25zdDsKKyAg
ICBJbnRSZWN0IGZyYW1lKCkgY29uc3Q7CisgICAgdm9pZCBzZXRGcmFtZShJbnRSZWN0KTsKKwor
ICAgIFJHQkEzMiBiYWNrZ3JvdW5kQ29sb3IoKSBjb25zdCB7IHJldHVybiBtX2JhY2tncm91bmRD
b2xvcjsgfQorICAgIHZvaWQgc2V0QmFja2dyb3VuZENvbG9yKFJHQkEzMik7CisKKyAgICAvLyBG
SVhNRTogUGFnZU92ZXJsYXkgc2hvdWxkIG93biBpdHMgbGF5ZXIsIGluc3RlYWQgb2YgUGFnZU92
ZXJsYXlDb250cm9sbGVyLgorICAgIEdyYXBoaWNzTGF5ZXImIGxheWVyKCk7CisKK3ByaXZhdGU6
CisgICAgZXhwbGljaXQgUGFnZU92ZXJsYXkoQ2xpZW50JiwgT3ZlcmxheVR5cGUpOworCisgICAg
dm9pZCBzdGFydEZhZGVBbmltYXRpb24oKTsKKyAgICB2b2lkIGZhZGVBbmltYXRpb25UaW1lckZp
cmVkKCk7CisKKyAgICBDbGllbnQmIG1fY2xpZW50OworICAgIFBhZ2UqIG1fcGFnZTsKKworICAg
IFJ1bkxvb3A6OlRpbWVyPFBhZ2VPdmVybGF5PiBtX2ZhZGVBbmltYXRpb25UaW1lcjsKKyAgICBk
b3VibGUgbV9mYWRlQW5pbWF0aW9uU3RhcnRUaW1lOworICAgIGRvdWJsZSBtX2ZhZGVBbmltYXRp
b25EdXJhdGlvbjsKKworICAgIGVudW0gRmFkZUFuaW1hdGlvblR5cGUgeworICAgICAgICBOb0Fu
aW1hdGlvbiwKKyAgICAgICAgRmFkZUluQW5pbWF0aW9uLAorICAgICAgICBGYWRlT3V0QW5pbWF0
aW9uLAorICAgIH07CisKKyAgICBGYWRlQW5pbWF0aW9uVHlwZSBtX2ZhZGVBbmltYXRpb25UeXBl
OworICAgIGZsb2F0IG1fZnJhY3Rpb25GYWRlZEluOworCisgICAgT3ZlcmxheVR5cGUgbV9vdmVy
bGF5VHlwZTsKKyAgICBJbnRSZWN0IG1fb3ZlcnJpZGVGcmFtZTsKKworICAgIFJHQkEzMiBtX2Jh
Y2tncm91bmRDb2xvcjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8g
UGFnZU92ZXJsYXlfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlT3Zlcmxh
eUNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlT3ZlcmxheUNvbnRyb2xs
ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjOWVjZjMKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VPdmVybGF5Q29udHJvbGxlci5j
cHAKQEAgLTAsMCArMSwzNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiUGFnZU92ZXJsYXlDb250cm9sbGVyLmgiCisKKyNpbmNsdWRlICJDaHJvbWUuaCIK
KyNpbmNsdWRlICJDaHJvbWVDbGllbnQuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUg
IkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkdy
YXBoaWNzTGF5ZXIuaCIKKyNpbmNsdWRlICJNYWluRnJhbWUuaCIKKyNpbmNsdWRlICJQYWdlLmgi
CisjaW5jbHVkZSAiUGFnZU92ZXJsYXkuaCIKKyNpbmNsdWRlICJTY3JvbGxpbmdDb29yZGluYXRv
ci5oIgorI2luY2x1ZGUgIlNldHRpbmdzLmgiCisjaW5jbHVkZSAiVGlsZWRCYWNraW5nLmgiCisK
Ky8vIEZJWE1FOiBTb21lb25lIG5lZWRzIHRvIGNhbGwgZGlkQ2hhbmdlU2V0dGluZ3MoKSBpZiB3
ZSB3YW50IGR5bmFtaWMgdXBkYXRlcyBvZiBsYXllciBib3JkZXIvcmVwYWludCBjb3VudGVyIHNl
dHRpbmdzLgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1BhZ2VPdmVybGF5Q29udHJvbGxlcjo6
UGFnZU92ZXJsYXlDb250cm9sbGVyKE1haW5GcmFtZSYgbWFpbkZyYW1lKQorICAgIDogbV9pbml0
aWFsaXplZChmYWxzZSkKKyAgICAsIG1fbWFpbkZyYW1lKG1haW5GcmFtZSkKK3sKK30KKworUGFn
ZU92ZXJsYXlDb250cm9sbGVyOjp+UGFnZU92ZXJsYXlDb250cm9sbGVyKCkKK3sKKworfQorCit2
b2lkIFBhZ2VPdmVybGF5Q29udHJvbGxlcjo6Y3JlYXRlUm9vdExheWVyc0lmTmVlZGVkKCkKK3sK
KyAgICBpZiAobV9pbml0aWFsaXplZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9pbml0aWFs
aXplZCA9IHRydWU7CisKKyAgICBBU1NFUlQoIW1fZG9jdW1lbnRPdmVybGF5Um9vdExheWVyKTsK
KyAgICBBU1NFUlQoIW1fdmlld092ZXJsYXlSb290TGF5ZXIpOworCisgICAgbV9kb2N1bWVudE92
ZXJsYXlSb290TGF5ZXIgPSBHcmFwaGljc0xheWVyOjpjcmVhdGUobV9tYWluRnJhbWUucGFnZSgp
LT5jaHJvbWUoKS5jbGllbnQoKS5ncmFwaGljc0xheWVyRmFjdG9yeSgpLCAqdGhpcyk7CisgICAg
bV92aWV3T3ZlcmxheVJvb3RMYXllciA9IEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZShtX21haW5GcmFt
ZS5wYWdlKCktPmNocm9tZSgpLmNsaWVudCgpLmdyYXBoaWNzTGF5ZXJGYWN0b3J5KCksICp0aGlz
KTsKKyNpZm5kZWYgTkRFQlVHCisgICAgbV9kb2N1bWVudE92ZXJsYXlSb290TGF5ZXItPnNldE5h
bWUoIlBhZ2UgT3ZlcmxheSBjb250YWluZXIgKGRvY3VtZW50LXJlbGF0aXZlKSIpOworICAgIG1f
dmlld092ZXJsYXlSb290TGF5ZXItPnNldE5hbWUoIlBhZ2UgT3ZlcmxheSBjb250YWluZXIgKHZp
ZXctcmVsYXRpdmUpIik7CisjZW5kaWYKK30KKworR3JhcGhpY3NMYXllciYgUGFnZU92ZXJsYXlD
b250cm9sbGVyOjpkb2N1bWVudE92ZXJsYXlSb290TGF5ZXIoKQoreworICAgIGNyZWF0ZVJvb3RM
YXllcnNJZk5lZWRlZCgpOworICAgIHJldHVybiAqbV9kb2N1bWVudE92ZXJsYXlSb290TGF5ZXI7
Cit9CisKK0dyYXBoaWNzTGF5ZXImIFBhZ2VPdmVybGF5Q29udHJvbGxlcjo6dmlld092ZXJsYXlS
b290TGF5ZXIoKQoreworICAgIGNyZWF0ZVJvb3RMYXllcnNJZk5lZWRlZCgpOworICAgIHJldHVy
biAqbV92aWV3T3ZlcmxheVJvb3RMYXllcjsKK30KKworc3RhdGljIHZvaWQgdXBkYXRlT3Zlcmxh
eUdlb21ldHJ5KFBhZ2VPdmVybGF5JiBvdmVybGF5LCBHcmFwaGljc0xheWVyJiBncmFwaGljc0xh
eWVyKQoreworICAgIEludFJlY3Qgb3ZlcmxheUZyYW1lID0gb3ZlcmxheS5mcmFtZSgpOworCisg
ICAgaWYgKG92ZXJsYXlGcmFtZS5sb2NhdGlvbigpID09IGdyYXBoaWNzTGF5ZXIucG9zaXRpb24o
KSAmJiBvdmVybGF5RnJhbWUuc2l6ZSgpID09IGdyYXBoaWNzTGF5ZXIuc2l6ZSgpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBncmFwaGljc0xheWVyLnNldFBvc2l0aW9uKG92ZXJsYXlGcmFtZS5s
b2NhdGlvbigpKTsKKyAgICBncmFwaGljc0xheWVyLnNldFNpemUob3ZlcmxheUZyYW1lLnNpemUo
KSk7Cit9CisKK3ZvaWQgUGFnZU92ZXJsYXlDb250cm9sbGVyOjppbnN0YWxsUGFnZU92ZXJsYXko
UGFzc1JlZlB0cjxQYWdlT3ZlcmxheT4gcGFnZU92ZXJsYXksIFBhZ2VPdmVybGF5OjpGYWRlTW9k
ZSBmYWRlTW9kZSkKK3sKKyAgICBjcmVhdGVSb290TGF5ZXJzSWZOZWVkZWQoKTsKKworICAgIFJl
ZlB0cjxQYWdlT3ZlcmxheT4gb3ZlcmxheSA9IHBhZ2VPdmVybGF5OworCisgICAgaWYgKG1fcGFn
ZU92ZXJsYXlzLmNvbnRhaW5zKG92ZXJsYXkpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3Bh
Z2VPdmVybGF5cy5hcHBlbmQob3ZlcmxheSk7CisgICAgb3ZlcmxheS0+c2V0UGFnZShtX21haW5G
cmFtZS5wYWdlKCkpOworCisgICAgaWYgKGZhZGVNb2RlID09IFBhZ2VPdmVybGF5OjpGYWRlTW9k
ZTo6RmFkZSkKKyAgICAgICAgb3ZlcmxheS0+c3RhcnRGYWRlSW5BbmltYXRpb24oKTsKKworICAg
IHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0xheWVyPiBsYXllciA9IEdyYXBoaWNzTGF5ZXI6OmNy
ZWF0ZShtX21haW5GcmFtZS5wYWdlKCktPmNocm9tZSgpLmNsaWVudCgpLmdyYXBoaWNzTGF5ZXJG
YWN0b3J5KCksICp0aGlzKTsKKyAgICBsYXllci0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQb2ludDNE
KCkpOworICAgIGxheWVyLT5zZXRCYWNrZ3JvdW5kQ29sb3Iob3ZlcmxheS0+YmFja2dyb3VuZENv
bG9yKCkpOworICAgIHVwZGF0ZU92ZXJsYXlHZW9tZXRyeSgqb3ZlcmxheSwgKmxheWVyKTsKKyNp
Zm5kZWYgTkRFQlVHCisgICAgbGF5ZXItPnNldE5hbWUoIlBhZ2UgT3ZlcmxheSBjb250ZW50Iik7
CisjZW5kaWYKKworICAgIHVwZGF0ZVNldHRpbmdzRm9yTGF5ZXIoKmxheWVyKTsKKworICAgIHN3
aXRjaCAob3ZlcmxheS0+b3ZlcmxheVR5cGUoKSkgeworICAgIGNhc2UgUGFnZU92ZXJsYXk6Ok92
ZXJsYXlUeXBlOjpWaWV3OgorICAgICAgICBtX3ZpZXdPdmVybGF5Um9vdExheWVyLT5hZGRDaGls
ZChsYXllci5nZXQoKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUGFnZU92ZXJsYXk6Ok92
ZXJsYXlUeXBlOjpEb2N1bWVudDoKKyAgICAgICAgbV9kb2N1bWVudE92ZXJsYXlSb290TGF5ZXIt
PmFkZENoaWxkKGxheWVyLmdldCgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgbV9v
dmVybGF5R3JhcGhpY3NMYXllcnMuc2V0KG92ZXJsYXkuZ2V0KCksIFdURjo6bW92ZShsYXllcikp
OworCisgICAgdXBkYXRlRm9yY2VTeW5jaHJvbm91c1Njcm9sbExheWVyUG9zaXRpb25VcGRhdGVz
KCk7CisKKyAgICBpZiAoRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBtX21haW5GcmFtZS52aWV3KCkp
CisgICAgICAgIGZyYW1lVmlldy0+ZW50ZXJDb21wb3NpdGluZ01vZGUoKTsKK30KKwordm9pZCBQ
YWdlT3ZlcmxheUNvbnRyb2xsZXI6OnVuaW5zdGFsbFBhZ2VPdmVybGF5KFBhZ2VPdmVybGF5KiBv
dmVybGF5LCBQYWdlT3ZlcmxheTo6RmFkZU1vZGUgZmFkZU1vZGUpCit7CisgICAgaWYgKGZhZGVN
b2RlID09IFBhZ2VPdmVybGF5OjpGYWRlTW9kZTo6RmFkZSkgeworICAgICAgICBvdmVybGF5LT5z
dGFydEZhZGVPdXRBbmltYXRpb24oKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG92
ZXJsYXktPnNldFBhZ2UobnVsbHB0cik7CisKKyAgICBtX292ZXJsYXlHcmFwaGljc0xheWVycy50
YWtlKG92ZXJsYXkpLT5yZW1vdmVGcm9tUGFyZW50KCk7CisKKyAgICBzaXplX3Qgb3ZlcmxheUlu
ZGV4ID0gbV9wYWdlT3ZlcmxheXMuZmluZChvdmVybGF5KTsKKyAgICBBU1NFUlQob3ZlcmxheUlu
ZGV4ICE9IG5vdEZvdW5kKTsKKyAgICBtX3BhZ2VPdmVybGF5cy5yZW1vdmUob3ZlcmxheUluZGV4
KTsKKworICAgIHVwZGF0ZUZvcmNlU3luY2hyb25vdXNTY3JvbGxMYXllclBvc2l0aW9uVXBkYXRl
cygpOworfQorCit2b2lkIFBhZ2VPdmVybGF5Q29udHJvbGxlcjo6dXBkYXRlRm9yY2VTeW5jaHJv
bm91c1Njcm9sbExheWVyUG9zaXRpb25VcGRhdGVzKCkKK3sKKyNpZiBFTkFCTEUoQVNZTkNfU0NS
T0xMSU5HKQorICAgIGJvb2wgZm9yY2VTeW5jaHJvbm91c1Njcm9sbExheWVyUG9zaXRpb25VcGRh
dGVzID0gZmFsc2U7CisKKyAgICBmb3IgKGF1dG8mIG92ZXJsYXkgOiBtX3BhZ2VPdmVybGF5cykg
eworICAgICAgICBpZiAob3ZlcmxheS0+b3ZlcmxheVR5cGUoKSA9PSBQYWdlT3ZlcmxheTo6T3Zl
cmxheVR5cGU6OlZpZXcpCisgICAgICAgICAgICBmb3JjZVN5bmNocm9ub3VzU2Nyb2xsTGF5ZXJQ
b3NpdGlvblVwZGF0ZXMgPSB0cnVlOworICAgIH0KKworICAgIGlmIChTY3JvbGxpbmdDb29yZGlu
YXRvciogc2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSBtX21haW5GcmFtZS5wYWdlKCktPnNjcm9sbGlu
Z0Nvb3JkaW5hdG9yKCkpCisgICAgICAgIHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT5zZXRGb3JjZVN5
bmNocm9ub3VzU2Nyb2xsTGF5ZXJQb3NpdGlvblVwZGF0ZXMoZm9yY2VTeW5jaHJvbm91c1Njcm9s
bExheWVyUG9zaXRpb25VcGRhdGVzKTsKKyNlbmRpZgorfQorCit2b2lkIFBhZ2VPdmVybGF5Q29u
dHJvbGxlcjo6c2V0UGFnZU92ZXJsYXlOZWVkc0Rpc3BsYXkoUGFnZU92ZXJsYXkmIG92ZXJsYXks
IGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGRpcnR5UmVjdCkKK3sKKyAgICBBU1NFUlQobV9wYWdl
T3ZlcmxheXMuY29udGFpbnMoJm92ZXJsYXkpKTsKKyAgICBHcmFwaGljc0xheWVyJiBncmFwaGlj
c0xheWVyID0gKm1fb3ZlcmxheUdyYXBoaWNzTGF5ZXJzLmdldCgmb3ZlcmxheSk7CisKKyAgICBp
ZiAoIWdyYXBoaWNzTGF5ZXIuZHJhd3NDb250ZW50KCkpIHsKKyAgICAgICAgZ3JhcGhpY3NMYXll
ci5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7CisgICAgICAgIHVwZGF0ZU92ZXJsYXlHZW9tZXRyeShv
dmVybGF5LCBncmFwaGljc0xheWVyKTsKKyAgICB9CisKKyAgICBncmFwaGljc0xheWVyLnNldE5l
ZWRzRGlzcGxheUluUmVjdChkaXJ0eVJlY3QpOworfQorCit2b2lkIFBhZ2VPdmVybGF5Q29udHJv
bGxlcjo6c2V0UGFnZU92ZXJsYXlPcGFjaXR5KFBhZ2VPdmVybGF5JiBvdmVybGF5LCBmbG9hdCBv
cGFjaXR5KQoreworICAgIEFTU0VSVChtX3BhZ2VPdmVybGF5cy5jb250YWlucygmb3ZlcmxheSkp
OworICAgIG1fb3ZlcmxheUdyYXBoaWNzTGF5ZXJzLmdldCgmb3ZlcmxheSktPnNldE9wYWNpdHko
b3BhY2l0eSk7Cit9CisKK3ZvaWQgUGFnZU92ZXJsYXlDb250cm9sbGVyOjpjbGVhclBhZ2VPdmVy
bGF5KFBhZ2VPdmVybGF5JiBvdmVybGF5KQoreworICAgIEFTU0VSVChtX3BhZ2VPdmVybGF5cy5j
b250YWlucygmb3ZlcmxheSkpOworICAgIG1fb3ZlcmxheUdyYXBoaWNzTGF5ZXJzLmdldCgmb3Zl
cmxheSktPnNldERyYXdzQ29udGVudChmYWxzZSk7Cit9CisKK0dyYXBoaWNzTGF5ZXImIFBhZ2VP
dmVybGF5Q29udHJvbGxlcjo6bGF5ZXJGb3JPdmVybGF5KFBhZ2VPdmVybGF5JiBvdmVybGF5KSBj
b25zdAoreworICAgIEFTU0VSVChtX3BhZ2VPdmVybGF5cy5jb250YWlucygmb3ZlcmxheSkpOwor
ICAgIHJldHVybiAqbV9vdmVybGF5R3JhcGhpY3NMYXllcnMuZ2V0KCZvdmVybGF5KTsKK30KKwor
dm9pZCBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6OndpbGxBdHRhY2hSb290TGF5ZXIoKQoreworICAg
IGZvciAoYXV0byYgb3ZlcmxheUFuZExheWVyIDogbV9vdmVybGF5R3JhcGhpY3NMYXllcnMpCisg
ICAgICAgIHVwZGF0ZU92ZXJsYXlHZW9tZXRyeSgqb3ZlcmxheUFuZExheWVyLmtleSwgKm92ZXJs
YXlBbmRMYXllci52YWx1ZSk7Cit9CisKK3ZvaWQgUGFnZU92ZXJsYXlDb250cm9sbGVyOjpkaWRD
aGFuZ2VWaWV3U2l6ZSgpCit7CisgICAgZm9yIChhdXRvJiBvdmVybGF5QW5kTGF5ZXIgOiBtX292
ZXJsYXlHcmFwaGljc0xheWVycykgeworICAgICAgICBpZiAob3ZlcmxheUFuZExheWVyLmtleS0+
b3ZlcmxheVR5cGUoKSA9PSBQYWdlT3ZlcmxheTo6T3ZlcmxheVR5cGU6OlZpZXcpCisgICAgICAg
ICAgICB1cGRhdGVPdmVybGF5R2VvbWV0cnkoKm92ZXJsYXlBbmRMYXllci5rZXksICpvdmVybGF5
QW5kTGF5ZXIudmFsdWUpOworICAgIH0KK30KKwordm9pZCBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6
OmRpZENoYW5nZURvY3VtZW50U2l6ZSgpCit7CisgICAgZm9yIChhdXRvJiBvdmVybGF5QW5kTGF5
ZXIgOiBtX292ZXJsYXlHcmFwaGljc0xheWVycykgeworICAgICAgICBpZiAob3ZlcmxheUFuZExh
eWVyLmtleS0+b3ZlcmxheVR5cGUoKSA9PSBQYWdlT3ZlcmxheTo6T3ZlcmxheVR5cGU6OkRvY3Vt
ZW50KQorICAgICAgICAgICAgdXBkYXRlT3ZlcmxheUdlb21ldHJ5KCpvdmVybGF5QW5kTGF5ZXIu
a2V5LCAqb3ZlcmxheUFuZExheWVyLnZhbHVlKTsKKyAgICB9Cit9CisKK3ZvaWQgUGFnZU92ZXJs
YXlDb250cm9sbGVyOjpkaWRDaGFuZ2VTZXR0aW5ncygpCit7CisgICAgLy8gRklYTUU6IFdlIHNo
b3VsZCBhcHBseSB0aGVzZSBzZXR0aW5ncyB0byBhbGwgb3ZlcmxheSBzdWJsYXllcnMgcmVjdXJz
aXZlbHkuCisgICAgZm9yIChhdXRvJiBncmFwaGljc0xheWVyIDogbV9vdmVybGF5R3JhcGhpY3NM
YXllcnMudmFsdWVzKCkpCisgICAgICAgIHVwZGF0ZVNldHRpbmdzRm9yTGF5ZXIoKmdyYXBoaWNz
TGF5ZXIpOworfQorCit2b2lkIFBhZ2VPdmVybGF5Q29udHJvbGxlcjo6ZGlkQ2hhbmdlRGV2aWNl
U2NhbGVGYWN0b3IoKQoreworICAgIGNyZWF0ZVJvb3RMYXllcnNJZk5lZWRlZCgpOworCisgICAg
bV9kb2N1bWVudE92ZXJsYXlSb290TGF5ZXItPm5vdGVEZXZpY2VPclBhZ2VTY2FsZUZhY3RvckNo
YW5nZWRJbmNsdWRpbmdEZXNjZW5kYW50cygpOworICAgIG1fdmlld092ZXJsYXlSb290TGF5ZXIt
Pm5vdGVEZXZpY2VPclBhZ2VTY2FsZUZhY3RvckNoYW5nZWRJbmNsdWRpbmdEZXNjZW5kYW50cygp
OworCisgICAgZm9yIChhdXRvJiBncmFwaGljc0xheWVyIDogbV9vdmVybGF5R3JhcGhpY3NMYXll
cnMudmFsdWVzKCkpCisgICAgICAgIGdyYXBoaWNzTGF5ZXItPnNldE5lZWRzRGlzcGxheSgpOwor
fQorCit2b2lkIFBhZ2VPdmVybGF5Q29udHJvbGxlcjo6ZGlkQ2hhbmdlRXhwb3NlZFJlY3QoKQor
eworICAgIG1fbWFpbkZyYW1lLnBhZ2UoKS0+Y2hyb21lKCkuY2xpZW50KCkuc2NoZWR1bGVDb21w
b3NpdGluZ0xheWVyRmx1c2goKTsKK30KKwordm9pZCBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6OmRp
ZFNjcm9sbEZyYW1lKEZyYW1lJiBmcmFtZSkKK3sKKyAgICBmb3IgKGF1dG8mIG92ZXJsYXlBbmRM
YXllciA6IG1fb3ZlcmxheUdyYXBoaWNzTGF5ZXJzKSB7CisgICAgICAgIGlmIChvdmVybGF5QW5k
TGF5ZXIua2V5LT5vdmVybGF5VHlwZSgpID09IFBhZ2VPdmVybGF5OjpPdmVybGF5VHlwZTo6Vmll
dyB8fCAhZnJhbWUuaXNNYWluRnJhbWUoKSkKKyAgICAgICAgICAgIG92ZXJsYXlBbmRMYXllci52
YWx1ZS0+c2V0TmVlZHNEaXNwbGF5KCk7CisgICAgICAgIG92ZXJsYXlBbmRMYXllci5rZXktPmRp
ZFNjcm9sbEZyYW1lKGZyYW1lKTsKKyAgICB9Cit9CisKK3ZvaWQgUGFnZU92ZXJsYXlDb250cm9s
bGVyOjp1cGRhdGVTZXR0aW5nc0ZvckxheWVyKEdyYXBoaWNzTGF5ZXImIGxheWVyKQoreworICAg
IFNldHRpbmdzJiBzZXR0aW5ncyA9IG1fbWFpbkZyYW1lLnBhZ2UoKS0+c2V0dGluZ3MoKTsKKyAg
ICBsYXllci5zZXRBY2NlbGVyYXRlc0RyYXdpbmcoc2V0dGluZ3MuYWNjZWxlcmF0ZWREcmF3aW5n
RW5hYmxlZCgpKTsKKyAgICBsYXllci5zZXRTaG93RGVidWdCb3JkZXIoc2V0dGluZ3Muc2hvd0Rl
YnVnQm9yZGVycygpKTsKKyAgICBsYXllci5zZXRTaG93UmVwYWludENvdW50ZXIoc2V0dGluZ3Mu
c2hvd1JlcGFpbnRDb3VudGVyKCkpOworfQorCitib29sIFBhZ2VPdmVybGF5Q29udHJvbGxlcjo6
aGFuZGxlTW91c2VFdmVudChjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIG1vdXNlRXZlbnQpCit7
CisgICAgaWYgKCFtX3BhZ2VPdmVybGF5cy5zaXplKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIGZvciAoYXV0byBpdCA9IG1fcGFnZU92ZXJsYXlzLnJiZWdpbigpLCBlbmQgPSBtX3Bh
Z2VPdmVybGF5cy5yZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBpZiAoKCppdCkt
Pm1vdXNlRXZlbnQobW91c2VFdmVudCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUGFnZU92ZXJsYXlDb250cm9sbGVyOjpj
b3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVN0cmluZ1ZhbHVlRm9yUG9pbnQoU3RyaW5nIGF0dHJp
YnV0ZSwgRmxvYXRQb2ludCBwYXJhbWV0ZXIsIFN0cmluZyYgdmFsdWUpCit7CisgICAgaWYgKCFt
X3BhZ2VPdmVybGF5cy5zaXplKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGZvciAo
YXV0byBpdCA9IG1fcGFnZU92ZXJsYXlzLnJiZWdpbigpLCBlbmQgPSBtX3BhZ2VPdmVybGF5cy5y
ZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBpZiAoKCppdCktPmNvcHlBY2Nlc3Np
YmlsaXR5QXR0cmlidXRlU3RyaW5nVmFsdWVGb3JQb2ludChhdHRyaWJ1dGUsIHBhcmFtZXRlciwg
dmFsdWUpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIGZh
bHNlOworfQorCitib29sIFBhZ2VPdmVybGF5Q29udHJvbGxlcjo6Y29weUFjY2Vzc2liaWxpdHlB
dHRyaWJ1dGVCb29sVmFsdWVGb3JQb2ludChTdHJpbmcgYXR0cmlidXRlLCBGbG9hdFBvaW50IHBh
cmFtZXRlciwgYm9vbCYgdmFsdWUpCit7CisgICAgaWYgKCFtX3BhZ2VPdmVybGF5cy5zaXplKCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGZvciAoYXV0byBpdCA9IG1fcGFnZU92ZXJs
YXlzLnJiZWdpbigpLCBlbmQgPSBtX3BhZ2VPdmVybGF5cy5yZW5kKCk7IGl0ICE9IGVuZDsgKytp
dCkgeworICAgICAgICBpZiAoKCppdCktPmNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlQm9vbFZh
bHVlRm9yUG9pbnQoYXR0cmlidXRlLCBwYXJhbWV0ZXIsIHZhbHVlKSkKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK1ZlY3RvcjxT
dHJpbmc+IFBhZ2VPdmVybGF5Q29udHJvbGxlcjo6Y29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVz
TmFtZXMoYm9vbCBwYXJhbWV0ZXJpemVkTmFtZXMpCit7CisgICAgaWYgKCFtX3BhZ2VPdmVybGF5
cy5zaXplKCkpCisgICAgICAgIHJldHVybiBWZWN0b3I8U3RyaW5nPigpOworCisgICAgZm9yIChh
dXRvIGl0ID0gbV9wYWdlT3ZlcmxheXMucmJlZ2luKCksIGVuZCA9IG1fcGFnZU92ZXJsYXlzLnJl
bmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIFZlY3RvcjxTdHJpbmc+IG5hbWVzID0g
KCppdCktPmNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlTmFtZXMocGFyYW1ldGVyaXplZE5hbWVz
KTsKKyAgICAgICAgaWYgKCFuYW1lcy5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm4gbmFt
ZXM7CisgICAgfQorCisgICAgcmV0dXJuIFZlY3RvcjxTdHJpbmc+KCk7Cit9CisKK3ZvaWQgUGFn
ZU92ZXJsYXlDb250cm9sbGVyOjpwYWludENvbnRlbnRzKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNz
TGF5ZXIqIGdyYXBoaWNzTGF5ZXIsIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3ND
b250ZXh0LCBXZWJDb3JlOjpHcmFwaGljc0xheWVyUGFpbnRpbmdQaGFzZSwgY29uc3QgV2ViQ29y
ZTo6RmxvYXRSZWN0JiBjbGlwUmVjdCkKK3sKKyAgICBmb3IgKGF1dG8gaXQgPSBtX292ZXJsYXlH
cmFwaGljc0xheWVycy5iZWdpbigpLCBlbmQgPSBtX292ZXJsYXlHcmFwaGljc0xheWVycy5lbmQo
KTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIGlmIChpdC0+dmFsdWUuZ2V0KCkgIT0gZ3Jh
cGhpY3NMYXllcikKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIEdyYXBoaWNzQ29u
dGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihncmFwaGljc0NvbnRleHQpOworICAgICAgICBncmFw
aGljc0NvbnRleHQuY2xpcChjbGlwUmVjdCk7CisgICAgICAgIGl0LT5rZXktPmRyYXdSZWN0KGdy
YXBoaWNzQ29udGV4dCwgZW5jbG9zaW5nSW50UmVjdChjbGlwUmVjdCkpOworCisgICAgICAgIHJl
dHVybjsKKyAgICB9Cit9CisKK2Zsb2F0IFBhZ2VPdmVybGF5Q29udHJvbGxlcjo6ZGV2aWNlU2Nh
bGVGYWN0b3IoKSBjb25zdAoreworICAgIHJldHVybiBtX21haW5GcmFtZS5wYWdlKCktPmRldmlj
ZVNjYWxlRmFjdG9yKCk7Cit9CisKK3ZvaWQgUGFnZU92ZXJsYXlDb250cm9sbGVyOjpub3RpZnlG
bHVzaFJlcXVpcmVkKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKQoreworICAgIG1fbWFp
bkZyYW1lLnBhZ2UoKS0+Y2hyb21lKCkuY2xpZW50KCkuc2NoZWR1bGVDb21wb3NpdGluZ0xheWVy
Rmx1c2goKTsKK30KKwordm9pZCBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6OmRpZENoYW5nZU92ZXJs
YXlGcmFtZShQYWdlT3ZlcmxheSYgb3ZlcmxheSkKK3sKKyAgICBBU1NFUlQobV9wYWdlT3Zlcmxh
eXMuY29udGFpbnMoJm92ZXJsYXkpKTsKKyAgICB1cGRhdGVPdmVybGF5R2VvbWV0cnkob3Zlcmxh
eSwgKm1fb3ZlcmxheUdyYXBoaWNzTGF5ZXJzLmdldCgmb3ZlcmxheSkpOworfQorCit2b2lkIFBh
Z2VPdmVybGF5Q29udHJvbGxlcjo6ZGlkQ2hhbmdlT3ZlcmxheUJhY2tncm91bmRDb2xvcihQYWdl
T3ZlcmxheSYgb3ZlcmxheSkKK3sKKyAgICBBU1NFUlQobV9wYWdlT3ZlcmxheXMuY29udGFpbnMo
Jm92ZXJsYXkpKTsKKyAgICBtX292ZXJsYXlHcmFwaGljc0xheWVycy5nZXQoJm92ZXJsYXkpLT5z
ZXRCYWNrZ3JvdW5kQ29sb3Iob3ZlcmxheS5iYWNrZ3JvdW5kQ29sb3IoKSk7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlT3Zl
cmxheUNvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZU92ZXJsYXlDb250cm9s
bGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjY5YzczNgotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZU92ZXJsYXlDb250cm9sbGVyLmgK
QEAgLTAsMCArMSwxMDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFBhZ2VPdmVybGF5Q29udHJv
bGxlcl9oCisjZGVmaW5lIFBhZ2VPdmVybGF5Q29udHJvbGxlcl9oCisKKyNpbmNsdWRlICJHcmFw
aGljc0xheWVyQ2xpZW50LmgiCisjaW5jbHVkZSAiUGFnZU92ZXJsYXkuaCIKKyNpbmNsdWRlIDx3
dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRnJhbWU7CitjbGFzcyBNYWlu
RnJhbWU7CitjbGFzcyBQYWdlOworY2xhc3MgUGxhdGZvcm1Nb3VzZUV2ZW50OworCitjbGFzcyBQ
YWdlT3ZlcmxheUNvbnRyb2xsZXIgZmluYWwgOiBwdWJsaWMgR3JhcGhpY3NMYXllckNsaWVudCB7
CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUGFnZU92ZXJsYXlDb250cm9sbGVyKTsKKyAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBQYWdlT3ZlcmxheUNvbnRyb2xs
ZXIoTWFpbkZyYW1lJik7CisgICAgdmlydHVhbCB+UGFnZU92ZXJsYXlDb250cm9sbGVyKCk7CisK
KyAgICBHcmFwaGljc0xheWVyJiBkb2N1bWVudE92ZXJsYXlSb290TGF5ZXIoKTsKKyAgICBHcmFw
aGljc0xheWVyJiB2aWV3T3ZlcmxheVJvb3RMYXllcigpOworCisgICAgdm9pZCBpbnN0YWxsUGFn
ZU92ZXJsYXkoUGFzc1JlZlB0cjxQYWdlT3ZlcmxheT4sIFBhZ2VPdmVybGF5OjpGYWRlTW9kZSk7
CisgICAgdm9pZCB1bmluc3RhbGxQYWdlT3ZlcmxheShQYWdlT3ZlcmxheSosIFBhZ2VPdmVybGF5
OjpGYWRlTW9kZSk7CisKKyAgICB2b2lkIHNldFBhZ2VPdmVybGF5TmVlZHNEaXNwbGF5KFBhZ2VP
dmVybGF5JiwgY29uc3QgSW50UmVjdCYpOworICAgIHZvaWQgc2V0UGFnZU92ZXJsYXlPcGFjaXR5
KFBhZ2VPdmVybGF5JiwgZmxvYXQpOworICAgIHZvaWQgY2xlYXJQYWdlT3ZlcmxheShQYWdlT3Zl
cmxheSYpOworICAgIEdyYXBoaWNzTGF5ZXImIGxheWVyRm9yT3ZlcmxheShQYWdlT3ZlcmxheSYp
IGNvbnN0OworCisgICAgdm9pZCB3aWxsQXR0YWNoUm9vdExheWVyKCk7CisKKyAgICB2b2lkIGRp
ZENoYW5nZVZpZXdTaXplKCk7CisgICAgdm9pZCBkaWRDaGFuZ2VEb2N1bWVudFNpemUoKTsKKyAg
ICB2b2lkIGRpZENoYW5nZVNldHRpbmdzKCk7CisgICAgdm9pZCBkaWRDaGFuZ2VEZXZpY2VTY2Fs
ZUZhY3RvcigpOworICAgIHZvaWQgZGlkQ2hhbmdlRXhwb3NlZFJlY3QoKTsKKyAgICB2b2lkIGRp
ZFNjcm9sbEZyYW1lKEZyYW1lJik7CisKKyAgICB2b2lkIGRpZENoYW5nZU92ZXJsYXlGcmFtZShQ
YWdlT3ZlcmxheSYpOworICAgIHZvaWQgZGlkQ2hhbmdlT3ZlcmxheUJhY2tncm91bmRDb2xvcihQ
YWdlT3ZlcmxheSYpOworCisgICAgaW50IG92ZXJsYXlDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1f
b3ZlcmxheUdyYXBoaWNzTGF5ZXJzLnNpemUoKTsgfQorCisgICAgYm9vbCBoYW5kbGVNb3VzZUV2
ZW50KGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYpOworCisgICAgYm9vbCBjb3B5QWNjZXNzaWJp
bGl0eUF0dHJpYnV0ZVN0cmluZ1ZhbHVlRm9yUG9pbnQoU3RyaW5nIGF0dHJpYnV0ZSwgRmxvYXRQ
b2ludCwgU3RyaW5nJiB2YWx1ZSk7CisgICAgYm9vbCBjb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0
ZUJvb2xWYWx1ZUZvclBvaW50KFN0cmluZyBhdHRyaWJ1dGUsIEZsb2F0UG9pbnQsIGJvb2wmIHZh
bHVlKTsKKyAgICBWZWN0b3I8U3RyaW5nPiBjb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZXNOYW1l
cyhib29sIHBhcmFtZXRlcml6ZWROYW1lcyk7CisKK3ByaXZhdGU6CisgICAgdm9pZCBjcmVhdGVS
b290TGF5ZXJzSWZOZWVkZWQoKTsKKworICAgIHZvaWQgdXBkYXRlU2V0dGluZ3NGb3JMYXllcihH
cmFwaGljc0xheWVyJik7CisgICAgdm9pZCB1cGRhdGVGb3JjZVN5bmNocm9ub3VzU2Nyb2xsTGF5
ZXJQb3NpdGlvblVwZGF0ZXMoKTsKKworICAgIC8vIEdyYXBoaWNzTGF5ZXJDbGllbnQKKyAgICB2
aXJ0dWFsIHZvaWQgbm90aWZ5Rmx1c2hSZXF1aXJlZChjb25zdCBHcmFwaGljc0xheWVyKikgb3Zl
cnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVudHMoY29uc3QgR3JhcGhpY3NMYXll
ciosIEdyYXBoaWNzQ29udGV4dCYsIEdyYXBoaWNzTGF5ZXJQYWludGluZ1BoYXNlLCBjb25zdCBG
bG9hdFJlY3QmIGNsaXBSZWN0KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGZsb2F0IGRldmljZVNj
YWxlRmFjdG9yKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29sIHNob3VsZFNraXBM
YXllckluRHVtcChjb25zdCBHcmFwaGljc0xheWVyKikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4g
dHJ1ZTsgfQorCisgICAgc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzTGF5ZXI+IG1fZG9jdW1lbnRP
dmVybGF5Um9vdExheWVyOworICAgIHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0xheWVyPiBtX3Zp
ZXdPdmVybGF5Um9vdExheWVyOworICAgIGJvb2wgbV9pbml0aWFsaXplZDsKKworICAgIEhhc2hN
YXA8UGFnZU92ZXJsYXkqLCBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NMYXllcj4+IG1fb3Zlcmxh
eUdyYXBoaWNzTGF5ZXJzOworICAgIFZlY3RvcjxSZWZQdHI8UGFnZU92ZXJsYXk+PiBtX3BhZ2VP
dmVybGF5czsKKyAgICBNYWluRnJhbWUmIG1fbWFpbkZyYW1lOworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CisKKyNlbmRpZiAvLyBQYWdlT3ZlcmxheUNvbnRyb2xsZXJfaApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllckNsaWVudC5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllckNsaWVudC5o
CmluZGV4IDhhNDgzMzMuLjI1OTIyY2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXJDbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyQ2xpZW50LmgKQEAgLTI2LDYgKzI2LDggQEAK
ICNpZm5kZWYgR3JhcGhpY3NMYXllckNsaWVudF9oCiAjZGVmaW5lIEdyYXBoaWNzTGF5ZXJDbGll
bnRfaAogCisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKwogbmFtZXNwYWNlIFdlYkNvcmUgewog
CiBjbGFzcyBGbG9hdFBvaW50OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxheWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5j
cHAKaW5kZXggZDlkNTkzMy4uMTYzNzRkYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGF5ZXIuY3BwCkBAIC0yMzIyLDcgKzIzMjIsNyBAQCB2b2lkIFJlbmRlckxheWVyOjpzY3Jv
bGxUbyhpbnQgeCwgaW50IHkpCiAKICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZFNj
cm9sbExheWVyKCZmcmFtZSk7CiAgICAgaWYgKHNjcm9sbHNPdmVyZmxvdygpKQotICAgICAgICBm
cmFtZS5sb2FkZXIoKS5jbGllbnQoKS5kaWRDaGFuZ2VTY3JvbGxPZmZzZXQoKTsKKyAgICAgICAg
dmlldy5mcmFtZVZpZXcoKS5kaWRDaGFuZ2VTY3JvbGxPZmZzZXQoKTsKIAogICAgIHZpZXcuZnJh
bWVWaWV3KCkucmVzdW1lVmlzaWJsZUltYWdlQW5pbWF0aW9uc0luY2x1ZGluZ1N1YmZyYW1lcygp
OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29t
cG9zaXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3Np
dG9yLmNwcAppbmRleCA0YmU0NjkxLi41NzM0ZDcxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcApAQCAtNDUsNiArNDUsNyBAQAog
I2luY2x1ZGUgIk1haW5GcmFtZS5oIgogI2luY2x1ZGUgIk5vZGVMaXN0LmgiCiAjaW5jbHVkZSAi
UGFnZS5oIgorI2luY2x1ZGUgIlBhZ2VPdmVybGF5Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIlJl
bmRlckVtYmVkZGVkT2JqZWN0LmgiCiAjaW5jbHVkZSAiUmVuZGVyRmxvd1RocmVhZC5oIgogI2lu
Y2x1ZGUgIlJlbmRlckZ1bGxTY3JlZW4uaCIKQEAgLTY0Myw3ICs2NDQsOCBAQCB2b2lkIFJlbmRl
ckxheWVyQ29tcG9zaXRvcjo6dXBkYXRlQ29tcG9zaXRpbmdMYXllcnNUaW1lckZpcmVkKFRpbWVy
PFJlbmRlckxheWVyQwogCiBib29sIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6aGFzQW55QWRkaXRp
b25hbENvbXBvc2l0ZWRMYXllcnMoY29uc3QgUmVuZGVyTGF5ZXImIHJvb3RMYXllcikgY29uc3QK
IHsKLSAgICByZXR1cm4gbV9jb21wb3NpdGVkTGF5ZXJDb3VudCA+IChyb290TGF5ZXIuaXNDb21w
b3NpdGVkKCkgPyAxIDogMCk7CisgICAgaW50IGxheWVyQ291bnQgPSBtX2NvbXBvc2l0ZWRMYXll
ckNvdW50ICsgbV9yZW5kZXJWaWV3LmZyYW1lKCkubWFpbkZyYW1lKCkucGFnZU92ZXJsYXlDb250
cm9sbGVyKCkub3ZlcmxheUNvdW50KCk7CisgICAgcmV0dXJuIGxheWVyQ291bnQgPiAocm9vdExh
eWVyLmlzQ29tcG9zaXRlZCgpID8gMSA6IDApOwogfQogCiB2b2lkIFJlbmRlckxheWVyQ29tcG9z
aXRvcjo6Y2FuY2VsQ29tcG9zaXRpbmdMYXllclVwZGF0ZSgpCkBAIC02NjUsNyArNjY3LDcgQEAg
dm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJzKENvbXBv
c2l0aW5nVXBkYXRlVHlwZSB1cGRhdGUKICAgICBpZiAobV9yZW5kZXJWaWV3Lm5lZWRzTGF5b3V0
KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChtX2ZvcmNlQ29tcG9zaXRpbmdNb2RlICYm
ICFtX2NvbXBvc2l0aW5nKQorICAgIGlmICgobV9mb3JjZUNvbXBvc2l0aW5nTW9kZSB8fCBtX3Jl
bmRlclZpZXcuZnJhbWUoKS5tYWluRnJhbWUoKS5wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKS5vdmVy
bGF5Q291bnQoKSkgJiYgIW1fY29tcG9zaXRpbmcpCiAgICAgICAgIGVuYWJsZUNvbXBvc2l0aW5n
TW9kZSh0cnVlKTsKIAogICAgIGlmICghbV9yZWV2YWx1YXRlQ29tcG9zaXRpbmdBZnRlckxheW91
dCAmJiAhbV9jb21wb3NpdGluZykKQEAgLTc0OCw3ICs3NTAsNyBAQCB2b2lkIFJlbmRlckxheWVy
Q29tcG9zaXRvcjo6dXBkYXRlQ29tcG9zaXRpbmdMYXllcnMoQ29tcG9zaXRpbmdVcGRhdGVUeXBl
IHVwZGF0ZQogCiAgICAgICAgIC8vIEhvc3QgdGhlIGRvY3VtZW50IGxheWVyIGluIHRoZSBSZW5k
ZXJWaWV3J3Mgcm9vdCBsYXllci4KICAgICAgICAgaWYgKGlzRnVsbFVwZGF0ZSkgewotICAgICAg
ICAgICAgYXBwZW5kT3ZlcmxheUxheWVycyhjaGlsZExpc3QpOworICAgICAgICAgICAgYXBwZW5k
RG9jdW1lbnRPdmVybGF5TGF5ZXJzKGNoaWxkTGlzdCk7CiAgICAgICAgICAgICAvLyBFdmVuIHdo
ZW4gY2hpbGRMaXN0IGlzIGVtcHR5LCBkb24ndCBkcm9wIG91dCBvZiBjb21wb3NpdGluZyBtb2Rl
IGlmIHRoZXJlIGFyZQogICAgICAgICAgICAgLy8gY29tcG9zaXRlZCBsYXllcnMgdGhhdCB3ZSBk
aWRuJ3QgaGl0IGluIG91ciB0cmF2ZXJzYWwgKGUuZy4gYmVjYXVzZSBvZiB2aXNpYmlsaXR5Omhp
ZGRlbikuCiAgICAgICAgICAgICBpZiAoY2hpbGRMaXN0LmlzRW1wdHkoKSAmJiAhaGFzQW55QWRk
aXRpb25hbENvbXBvc2l0ZWRMYXllcnMoKnVwZGF0ZVJvb3QpKQpAQCAtNzg0LDE1ICs3ODYsMTkg
QEAgdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJzKENv
bXBvc2l0aW5nVXBkYXRlVHlwZSB1cGRhdGUKICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246
OmxheWVyVHJlZURpZENoYW5nZShwYWdlKCkpOwogfQogCi12b2lkIFJlbmRlckxheWVyQ29tcG9z
aXRvcjo6YXBwZW5kT3ZlcmxheUxheWVycyhWZWN0b3I8R3JhcGhpY3NMYXllcio+JiBjaGlsZExp
c3QpCit2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6YXBwZW5kRG9jdW1lbnRPdmVybGF5TGF5
ZXJzKFZlY3RvcjxHcmFwaGljc0xheWVyKj4mIGNoaWxkTGlzdCkKIHsKICAgICBGcmFtZSYgZnJh
bWUgPSBtX3JlbmRlclZpZXcuZnJhbWVWaWV3KCkuZnJhbWUoKTsKKyAgICBpZiAoIWZyYW1lLmlz
TWFpbkZyYW1lKCkpCisgICAgICAgIHJldHVybjsKKwogICAgIFBhZ2UqIHBhZ2UgPSBmcmFtZS5w
YWdlKCk7CiAgICAgaWYgKCFwYWdlKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoR3JhcGhp
Y3NMYXllciogb3ZlcmxheUxheWVyID0gcGFnZS0+Y2hyb21lKCkuY2xpZW50KCkuZG9jdW1lbnRP
dmVybGF5TGF5ZXJGb3JGcmFtZShmcmFtZSkpCi0gICAgICAgIGNoaWxkTGlzdC5hcHBlbmQob3Zl
cmxheUxheWVyKTsKKyAgICBQYWdlT3ZlcmxheUNvbnRyb2xsZXImIHBhZ2VPdmVybGF5Q29udHJv
bGxlciA9IGZyYW1lLm1haW5GcmFtZSgpLnBhZ2VPdmVybGF5Q29udHJvbGxlcigpOworICAgIHBh
Z2VPdmVybGF5Q29udHJvbGxlci53aWxsQXR0YWNoUm9vdExheWVyKCk7CisgICAgY2hpbGRMaXN0
LmFwcGVuZCgmcGFnZU92ZXJsYXlDb250cm9sbGVyLmRvY3VtZW50T3ZlcmxheVJvb3RMYXllcigp
KTsKIH0KIAogdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmxheWVyQmVjYW1lTm9uQ29tcG9z
aXRlZChjb25zdCBSZW5kZXJMYXllciYgbGF5ZXIpCkBAIC0zMzY2LDYgKzMzNzIsMTEgQEAgdm9p
ZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmF0dGFjaFJvb3RMYXllcihSb290TGF5ZXJBdHRhY2ht
ZW50IGF0dGFjaG1lbnQpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgICAgICBw
YWdlLT5jaHJvbWUoKS5jbGllbnQoKS5hdHRhY2hSb290R3JhcGhpY3NMYXllcigmZnJhbWUsIHJv
b3RHcmFwaGljc0xheWVyKCkpOworICAgICAgICAgICAgaWYgKGZyYW1lLmlzTWFpbkZyYW1lKCkp
IHsKKyAgICAgICAgICAgICAgICBQYWdlT3ZlcmxheUNvbnRyb2xsZXImIHBhZ2VPdmVybGF5Q29u
dHJvbGxlciA9IGZyYW1lLm1haW5GcmFtZSgpLnBhZ2VPdmVybGF5Q29udHJvbGxlcigpOworICAg
ICAgICAgICAgICAgIHBhZ2VPdmVybGF5Q29udHJvbGxlci53aWxsQXR0YWNoUm9vdExheWVyKCk7
CisgICAgICAgICAgICAgICAgcGFnZS0+Y2hyb21lKCkuY2xpZW50KCkuYXR0YWNoVmlld092ZXJs
YXlHcmFwaGljc0xheWVyKCZmcmFtZSwgJnBhZ2VPdmVybGF5Q29udHJvbGxlci52aWV3T3Zlcmxh
eVJvb3RMYXllcigpKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CiAgICAgICAgIGNhc2UgUm9vdExheWVyQXR0YWNoZWRWaWFFbmNsb3NpbmdGcmFtZTogewpA
QCAtMzQxMCw2ICszNDIxLDggQEAgdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmRldGFjaFJv
b3RMYXllcigpCiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgcGFnZS0+Y2hyb21lKCku
Y2xpZW50KCkuYXR0YWNoUm9vdEdyYXBoaWNzTGF5ZXIoJmZyYW1lLCAwKTsKKyAgICAgICAgaWYg
KGZyYW1lLmlzTWFpbkZyYW1lKCkpCisgICAgICAgICAgICBwYWdlLT5jaHJvbWUoKS5jbGllbnQo
KS5hdHRhY2hWaWV3T3ZlcmxheUdyYXBoaWNzTGF5ZXIoJmZyYW1lLCAwKTsKICAgICB9CiAgICAg
YnJlYWs7CiAgICAgY2FzZSBSb290TGF5ZXJVbmF0dGFjaGVkOgpAQCAtMzQ0NCw4ICszNDU3LDEy
IEBAIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyb290TGF5ZXJBdHRhY2htZW50Q2hhbmdl
ZCgpCiAgICAgaWYgKFJlbmRlckxheWVyQmFja2luZyogYmFja2luZyA9IGxheWVyID8gbGF5ZXIt
PmJhY2tpbmcoKSA6IG51bGxwdHIpCiAgICAgICAgIGJhY2tpbmctPnVwZGF0ZURyYXdzQ29udGVu
dCgpOwogCi0gICAgaWYgKEdyYXBoaWNzTGF5ZXIqIG92ZXJsYXlMYXllciA9IHBhZ2UtPmNocm9t
ZSgpLmNsaWVudCgpLmRvY3VtZW50T3ZlcmxheUxheWVyRm9yRnJhbWUoZnJhbWUpKQotICAgICAg
ICBtX3Jvb3RDb250ZW50TGF5ZXItPmFkZENoaWxkKG92ZXJsYXlMYXllcik7CisgICAgaWYgKCFm
cmFtZS5pc01haW5GcmFtZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBQYWdlT3ZlcmxheUNv
bnRyb2xsZXImIHBhZ2VPdmVybGF5Q29udHJvbGxlciA9IGZyYW1lLm1haW5GcmFtZSgpLnBhZ2VP
dmVybGF5Q29udHJvbGxlcigpOworICAgIHBhZ2VPdmVybGF5Q29udHJvbGxlci53aWxsQXR0YWNo
Um9vdExheWVyKCk7CisgICAgbV9yb290Q29udGVudExheWVyLT5hZGRDaGlsZCgmcGFnZU92ZXJs
YXlDb250cm9sbGVyLmRvY3VtZW50T3ZlcmxheVJvb3RMYXllcigpKTsKIH0KIAogLy8gSUZyYW1l
cyBhcmUgc3BlY2lhbCwgYmVjYXVzZSB3ZSBob29rIGNvbXBvc2l0aW5nIGxheWVycyB0b2dldGhl
ciBhY3Jvc3MgaWZyYW1lIGJvdW5kYXJpZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMYXllckNvbXBvc2l0b3IuaAppbmRleCA3YmQyNDBhLi5kOWE4NzRiIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5oCkBAIC0z
NjIsNyArMzYyLDcgQEAgcHJpdmF0ZToKICAgICBib29sIGxheWVySGFzM0RDb250ZW50KGNvbnN0
IFJlbmRlckxheWVyJikgY29uc3Q7CiAgICAgYm9vbCBpc1J1bm5pbmdBY2NlbGVyYXRlZFRyYW5z
Zm9ybUFuaW1hdGlvbihSZW5kZXJMYXllck1vZGVsT2JqZWN0JikgY29uc3Q7CiAKLSAgICB2b2lk
IGFwcGVuZE92ZXJsYXlMYXllcnMoVmVjdG9yPEdyYXBoaWNzTGF5ZXIqPiYpOworICAgIHZvaWQg
YXBwZW5kRG9jdW1lbnRPdmVybGF5TGF5ZXJzKFZlY3RvcjxHcmFwaGljc0xheWVyKj4mKTsKICAg
ICBib29sIGhhc0FueUFkZGl0aW9uYWxDb21wb3NpdGVkTGF5ZXJzKGNvbnN0IFJlbmRlckxheWVy
JiByb290TGF5ZXIpIGNvbnN0OwogCiAgICAgdm9pZCBlbnN1cmVSb290TGF5ZXIoKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvbWFjL0No
YW5nZUxvZwppbmRleCBiZjZkOGViLi41NjE2YjdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L21hYy9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsMTYgQEAKKzIwMTQtMDktMzAgIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5j
b20+CisKKyAgICAgICAgTW92ZSBQYWdlT3ZlcmxheVtDb250cm9sbGVyXSB0byBXZWJDb3JlCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzcxNjQKKyAg
ICAgICAgPHJkYXI6Ly9wcm9ibGVtLzE4NTA4MjU4PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50
Lmg6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lm1tOgorICAgICAg
ICAoV2ViQ2hyb21lQ2xpZW50OjphdHRhY2hWaWV3T3ZlcmxheUdyYXBoaWNzTGF5ZXIpOgorICAg
ICAgICBBZGQgYW4gZW1wdHkgQ2hyb21lQ2xpZW50IG92ZXJyaWRlLgorCiAyMDE0LTA5LTI4ICBH
eXV5b3VuZyBLaW0gIDxneXV5b3VuZy5raW1Ac2Ftc3VuZy5jb20+CiAKICAgICAgICAgTW92ZSBD
b2xvcklucHV0VHlwZSBjbGFzcyB0byBzdGQ6OnVuaXF1ZV9wdHIKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oIGIvU291cmNlL1dl
YktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgKaW5kZXggMWQ0ODI4MS4u
NzI3MGNlMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2Vi
Q2hyb21lQ2xpZW50LmgKKysrIGIvU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2Vi
Q2hyb21lQ2xpZW50LmgKQEAgLTE2Myw2ICsxNjMsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBi
b29sIHNob3VsZFBhaW50RW50aXJlQ29udGVudHMoKSBjb25zdCBvdmVycmlkZTsKIAogICAgIHZp
cnR1YWwgdm9pZCBhdHRhY2hSb290R3JhcGhpY3NMYXllcihXZWJDb3JlOjpGcmFtZSosIFdlYkNv
cmU6OkdyYXBoaWNzTGF5ZXIqKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoVmll
d092ZXJsYXlHcmFwaGljc0xheWVyKFdlYkNvcmU6OkZyYW1lKiwgV2ViQ29yZTo6R3JhcGhpY3NM
YXllciopIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc09uZVNob3REcmF3aW5n
U3luY2hyb25pemF0aW9uKCkgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlQ29t
cG9zaXRpbmdMYXllckZsdXNoKCkgb3ZlcnJpZGU7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5tbSBiL1NvdXJjZS9XZWJLaXQv
bWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5tbQppbmRleCBlMWRjMTBkLi40NjA2
MzEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJv
bWVDbGllbnQubW0KKysrIGIvU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ2hy
b21lQ2xpZW50Lm1tCkBAIC05MjQsNiArOTI0LDExIEBAIHZvaWQgV2ViQ2hyb21lQ2xpZW50Ojph
dHRhY2hSb290R3JhcGhpY3NMYXllcihGcmFtZSogZnJhbWUsIEdyYXBoaWNzTGF5ZXIqIGdyYXBo
CiAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKIH0KIAordm9pZCBXZWJDaHJvbWVDbGll
bnQ6OmF0dGFjaFZpZXdPdmVybGF5R3JhcGhpY3NMYXllcihGcmFtZSosIEdyYXBoaWNzTGF5ZXIq
KQoreworICAgIC8vIEZJWE1FOiBJZiB3ZSB3YW50IHZpZXctcmVsYXRpdmUgcGFnZSBvdmVybGF5
cyBpbiBXZWJLaXQxLCB0aGlzIHdvdWxkIGJlIHRoZSBwbGFjZSB0byBob29rIHRoZW0gdXAuCit9
CisKIHZvaWQgV2ViQ2hyb21lQ2xpZW50OjpzZXROZWVkc09uZVNob3REcmF3aW5nU3luY2hyb25p
emF0aW9uKCkKIHsKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L3dpbi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L3dpbi9DaGFuZ2VM
b2cKaW5kZXggZjY3MTJmZS4uZmY3M2I0ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC93aW4v
Q2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvd2luL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2
IEBACisyMDE0LTA5LTMwICBUaW0gSG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgor
CisgICAgICAgIE1vdmUgUGFnZU92ZXJsYXlbQ29udHJvbGxlcl0gdG8gV2ViQ29yZQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM3MTY0CisgICAgICAg
IDxyZGFyOi8vcHJvYmxlbS8xODUwODI1OD4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHA6
CisgICAgICAgIChXZWJDaHJvbWVDbGllbnQ6OmF0dGFjaFZpZXdPdmVybGF5R3JhcGhpY3NMYXll
cik6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lmg6CisgICAgICAg
IEFkZCBhbiBlbXB0eSBDaHJvbWVDbGllbnQgb3ZlcnJpZGUuCisKIDIwMTQtMDktMjkgIENocmlz
dG9waGUgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIE1ha2UgaXM8PigpIC8g
ZG93bmNhc3Q8PigpIHdvcmsgZm9yIEhUTUxEb2N1bWVudCBhbmQgaXRzIHN1YmNsYXNzZXMKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVu
dC5jcHAgYi9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQu
Y3BwCmluZGV4IGE5YzBiMGEuLjVmYjE3OWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvd2lu
L1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAKKysrIGIvU291cmNlL1dlYktpdC93
aW4vV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcApAQCAtNzUyLDYgKzc1MiwxMSBA
QCB2b2lkIFdlYkNocm9tZUNsaWVudDo6YXR0YWNoUm9vdEdyYXBoaWNzTGF5ZXIoRnJhbWUqIGZy
YW1lLCBHcmFwaGljc0xheWVyKiBncmFwaAogICAgIG1fd2ViVmlldy0+c2V0Um9vdENoaWxkTGF5
ZXIoZ3JhcGhpY3NMYXllcik7CiB9CiAKK3ZvaWQgV2ViQ2hyb21lQ2xpZW50OjphdHRhY2hWaWV3
T3ZlcmxheUdyYXBoaWNzTGF5ZXIoRnJhbWUqLCBHcmFwaGljc0xheWVyKikKK3sKKyAgICAvLyBG
SVhNRTogSWYgd2Ugd2FudCB2aWV3LXJlbGF0aXZlIHBhZ2Ugb3ZlcmxheXMgaW4gV2ViS2l0MSBv
biBXaW5kb3dzLCB0aGlzIHdvdWxkIGJlIHRoZSBwbGFjZSB0byBob29rIHRoZW0gdXAuCit9CisK
IHZvaWQgV2ViQ2hyb21lQ2xpZW50OjpzY2hlZHVsZUNvbXBvc2l0aW5nTGF5ZXJGbHVzaCgpCiB7
CiAgICAgbV93ZWJWaWV3LT5mbHVzaFBlbmRpbmdHcmFwaGljc0xheWVyQ2hhbmdlc1Nvb24oKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNs
aWVudC5oIGIvU291cmNlL1dlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50
LmgKaW5kZXggM2NkNjI4MS4uY2Q3OTJjNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC93aW4v
V2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgKKysrIGIvU291cmNlL1dlYktpdC93aW4v
V2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgKQEAgLTEzMCw2ICsxMzAsNyBAQCBwdWJs
aWM6CiAKICAgICAvLyBQYXNzIDAgYXMgdGhlIEdyYXBoaWNzTGF5ZXIgdG8gZGV0YXRjaCB0aGUg
cm9vdCBsYXllci4KICAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoUm9vdEdyYXBoaWNzTGF5ZXIoV2Vi
Q29yZTo6RnJhbWUqLCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKik7CisgICAgdmlydHVhbCB2b2lk
IGF0dGFjaFZpZXdPdmVybGF5R3JhcGhpY3NMYXllcihXZWJDb3JlOjpGcmFtZSosIFdlYkNvcmU6
OkdyYXBoaWNzTGF5ZXIqKSBvdmVycmlkZTsKICAgICAvLyBTZXRzIGEgZmxhZyB0byBzcGVjaWZ5
IHRoYXQgdGhlIG5leHQgdGltZSBjb250ZW50IGlzIGRyYXduIHRvIHRoZSB3aW5kb3csCiAgICAg
Ly8gdGhlIGNoYW5nZXMgYXBwZWFyIG9uIHRoZSBzY3JlZW4gaW4gc3luY2hyb255IHdpdGggdXBk
YXRlcyB0byBHcmFwaGljc0xheWVycy4KICAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNPbmVTaG90
RHJhd2luZ1N5bmNocm9uaXphdGlvbigpIHsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
Q01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV2ViS2l0Mi9DTWFrZUxpc3RzLnR4dAppbmRleCA2YmRj
NTlkLi40YTQ2NTQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DTWFrZUxpc3RzLnR4dAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9DTWFrZUxpc3RzLnR4dApAQCAtNTQzLDggKzU0Myw2IEBAIHNl
dChXZWJLaXQyX1NPVVJDRVMKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIu
Y3BwCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUhvc3QuY3BwCiAgICAgV2ViUHJv
Y2Vzcy9XZWJQYWdlL1BhZ2VCYW5uZXIuY3BwCi0gICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1BhZ2VP
dmVybGF5LmNwcAotICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9QYWdlT3ZlcmxheUNvbnRyb2xsZXIu
Y3BwCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1RhcEhpZ2hsaWdodENvbnRyb2xsZXIuY3BwCiAg
ICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkJhY2tGb3J3YXJkTGlzdFByb3h5LmNwcAogICAgIFdl
YlByb2Nlc3MvV2ViUGFnZS9XZWJDb250ZXh0TWVudS5jcHAKQEAgLTU1NSw2ICs1NTMsNyBAQCBz
ZXQoV2ViS2l0Ml9TT1VSQ0VTCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYk9wZW5QYW5lbFJl
c3VsdExpc3RlbmVyLmNwcAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAogICAg
IFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlR3JvdXBQcm94eS5jcHAKKyAgICBXZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViUGFnZU92ZXJsYXkuY3BwCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1Zpc2l0
ZWRMaW5rVGFibGVDb250cm9sbGVyLmNwcAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJVbmRv
U3RlcC5jcHAKICkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJj
ZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCAzNjBhYmVmLi42ZjBmYjYyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMTM0IEBACisyMDE0LTA5LTMwICBUaW0gSG9ydG9uICA8dGltb3RoeV9ob3J0b25A
YXBwbGUuY29tPgorCisgICAgICAgIE1vdmUgUGFnZU92ZXJsYXlbQ29udHJvbGxlcl0gdG8gV2Vi
Q29yZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM3
MTY0CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xODUwODI1OD4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAg
ICAqIFdlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgTWFrZSB0aGUg
YXBwcm9wcmlhdGUgYnVpbGQgc3lzdGVtIGNoYW5nZXMuCisKKyAgICAgICAgKiBXZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlQVBJQ2FzdC5oOgorICAgICAgICBNYWtlIFdL
QnVuZGxlUGFnZU92ZXJsYXlSZWYgbWFwIHRvIFdlYlBhZ2VPdmVybGF5IGluc3RlYWQgb2YgUGFn
ZU92ZXJsYXkuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dL
QnVuZGxlUGFnZS5jcHA6CisgICAgICAgIChXS0J1bmRsZVBhZ2VJbnN0YWxsUGFnZU92ZXJsYXkp
OgorICAgICAgICAoV0tCdW5kbGVQYWdlVW5pbnN0YWxsUGFnZU92ZXJsYXkpOgorICAgICAgICAo
V0tCdW5kbGVQYWdlSW5zdGFsbFBhZ2VPdmVybGF5V2l0aEFuaW1hdGlvbik6CisgICAgICAgIChX
S0J1bmRsZVBhZ2VVbmluc3RhbGxQYWdlT3ZlcmxheVdpdGhBbmltYXRpb24pOgorICAgICAgICBG
b3J3YXJkIFBhZ2VPdmVybGF5IGluc3RhbGxhdGlvbi91bmluc3RhbGxhdGlvbiB0byBXZWJDb3Jl
LgorCisgICAgICAgICogV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZVBh
Z2VPdmVybGF5LmNwcDoKKyAgICAgICAgKFdLQnVuZGxlUGFnZU92ZXJsYXlHZXRUeXBlSUQpOgor
ICAgICAgICAoV0tCdW5kbGVQYWdlT3ZlcmxheUNyZWF0ZSk6CisgICAgICAgIChXS0J1bmRsZVBh
Z2VPdmVybGF5U2V0QWNjZXNzaWJpbGl0eUNsaWVudCk6CisgICAgICAgIFVzZSBXZWJQYWdlT3Zl
cmxheSBpbnN0ZWFkIG9mIFBhZ2VPdmVybGF5LCBhbmQgcmVmZXJlbmNlcyBpbnN0ZWFkIG9mIHBv
aW50ZXJzLgorICAgICAgICBXZSBmb3J3YXJkIGNsaWVudCBjYWxsYmFja3MgdGhyb3VnaCBmcm9t
IFBhZ2VPdmVybGF5OjpDbGllbnQgdG8gV2ViUGFnZU92ZXJsYXk6OkNsaWVudC4KKworICAgICAg
ICAoUGFnZU92ZXJsYXlDbGllbnRJbXBsOjpjb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVl
KToKKyAgICAgICAgKFBhZ2VPdmVybGF5Q2xpZW50SW1wbDo6Y29weUFjY2Vzc2liaWxpdHlBdHRy
aWJ1dGVOYW1lcyk6CisgICAgICAgIENvbnZlcnQgZnJvbSB3dGYgdHlwZXMgdG8gV2ViS2l0MiB0
eXBlcy4KKworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xp
ZW50LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViQ2hyb21lQ2xpZW50OjpncmFwaGljc0xheWVy
RmFjdG9yeSk6CisgICAgICAgIElmIHdlIGRvbid0IGhhdmUgYSBkcmF3aW5nIGFyZWEsIGRvbid0
IGRlcmVmZXJlbmNlIGl0IQorCisgICAgICAgIChXZWJLaXQ6OldlYkNocm9tZUNsaWVudDo6YXR0
YWNoVmlld092ZXJsYXlHcmFwaGljc0xheWVyKToKKyAgICAgICAgRm9yd2FyZCBhdHRhY2hWaWV3
T3ZlcmxheUdyYXBoaWNzTGF5ZXIgdG8gdGhlIERyYXdpbmdBcmVhLgorCisgICAgICAgICogV2Vi
UHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaDoKKworICAgICAgICAqIFdl
YlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50LmNwcDoKKyAgICAgICAg
KiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckNsaWVudC5oOgorICAgICAg
ICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5jcHA6CisgICAgICAgICogV2Vi
UHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9X
ZWJQYWdlL2lvcy9GaW5kQ29udHJvbGxlcklPUy5tbToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dl
YlBhZ2UvaW9zL0ZpbmRJbmRpY2F0b3JPdmVybGF5Q2xpZW50SU9TLmg6CisgICAgICAgICogV2Vi
UHJvY2Vzcy9XZWJQYWdlL21hYy9TZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyLm1tOgorICAgICAg
ICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9TZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyLmg6CisgICAg
ICAgIE1lY2hhbmljYWwgY2hhbmdlcyB0byBhZG9wdCB0byB0aGUgZmFjdCB0aGF0IFBhZ2VPdmVy
bGF5IGlzIGluIFdlYkNvcmUgbm93LgorCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0xh
eWVyVHJlZUhvc3QuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHA6
CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaDoKKyAgICAgICAgUmVtb3Zl
IHN1cHBvcnQgZm9yIFdlYktpdDItYmFzZWQgcGFnZSBvdmVybGF5cy4KKyAgICAgICAgUmV0dXJu
IE1haW5GcmFtZSBpbnN0ZWFkIG9mIEZyYW1lIGZyb20gbWFpbkZyYW1lKCkuCisKKyAgICAgICAg
KiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZU92ZXJsYXkuY3BwOiBBZGRlZC4KKyAgICAgICAg
KiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZU92ZXJsYXkuaDogQWRkZWQuCisgICAgICAgIChX
ZWJLaXQ6OldlYlBhZ2VPdmVybGF5OjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdl
T3ZlcmxheTo6V2ViUGFnZU92ZXJsYXkpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlT3Zlcmxh
eTo6fldlYlBhZ2VPdmVybGF5KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZU92ZXJsYXk6OnNl
dE5lZWRzRGlzcGxheSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VPdmVybGF5OjpjbGVhcik6
CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VPdmVybGF5OjpwYWdlT3ZlcmxheURlc3Ryb3llZCk6
CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VPdmVybGF5Ojp3aWxsTW92ZVRvUGFnZSk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlBhZ2VPdmVybGF5OjpkaWRNb3ZlVG9QYWdlKToKKyAgICAgICAgKFdl
YktpdDo6V2ViUGFnZU92ZXJsYXk6OmRyYXdSZWN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFn
ZU92ZXJsYXk6Om1vdXNlRXZlbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlT3ZlcmxheTo6
ZGlkU2Nyb2xsRnJhbWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlT3ZlcmxheTo6Y29weUFj
Y2Vzc2liaWxpdHlBdHRyaWJ1dGVTdHJpbmdWYWx1ZUZvclBvaW50KToKKyAgICAgICAgKFdlYktp
dDo6V2ViUGFnZU92ZXJsYXk6OmNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlQm9vbFZhbHVlRm9y
UG9pbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlT3ZlcmxheTo6Y29weUFjY2Vzc2liaWxp
dHlBdHRyaWJ1dGVOYW1lcyk6CisgICAgICAgIFdlYlBhZ2VPdmVybGF5IGV4aXN0cyB0byBiZSBv
dXIgQVBJIG9iamVjdCwgYnV0IGZvcndhcmRzIGV2ZXJ5dGhpbmcKKyAgICAgICAgdG8gaXRzIFdl
YkNvcmU6OlBhZ2VPdmVybGF5LCBhbmQgaW1wbGVtZW50cyBXZWJDb3JlOjpQYWdlT3ZlcmxheTo6
Q2xpZW50LCBhbmQKKyAgICAgICAgZm9yd2FyZHMgY2xpZW50IGNhbGxiYWNrcyB0byBpdHMgV2Vi
UGFnZU92ZXJsYXk6OkNsaWVudCAod2hpY2gKKyAgICAgICAgV0tCdW5kbGVQYWdlT3ZlcmxheSBp
bXBsZW1lbnRzKS4KKworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV0tBY2Nlc3Np
YmlsaXR5V2ViUGFnZU9iamVjdE1hYy5tbToKKyAgICAgICAgKC1bV0tBY2Nlc3NpYmlsaXR5V2Vi
UGFnZU9iamVjdCBhY2Nlc3NpYmlsaXR5UGFyYW1ldGVyaXplZEF0dHJpYnV0ZU5hbWVzXSk6Cisg
ICAgICAgICgtW1dLQWNjZXNzaWJpbGl0eVdlYlBhZ2VPYmplY3QgYWNjZXNzaWJpbGl0eUF0dHJp
YnV0ZVZhbHVlOmZvclBhcmFtZXRlcjpdKToKKyAgICAgICAgRm9yd2FyZCB0aGUgdGhyZWUgQVgg
cHJvcGVydGllcyB0aGF0IFBhZ2VPdmVybGF5cyBhcmUgZXZlciBxdWVyaWVkIGZvcgorICAgICAg
ICB0byB0aGUgYXBwcm9wcmlhdGUgUGFnZU92ZXJsYXlDb250cm9sbGVyIGZ1bmN0aW9uLgorICAg
ICAgICAKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1JlbW90ZUxheWVyVHJlZURy
YXdpbmdBcmVhLmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9SZW1vdGVMYXll
clRyZWVEcmF3aW5nQXJlYS5tbToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlTGF5ZXJUcmVlRHJh
d2luZ0FyZWE6OlJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhKToKKyAgICAgICAgKFdlYktpdDo6
UmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWE6OnVwZGF0ZVJvb3RMYXllcnMpOgorICAgICAgICBG
YWN0b3IgdXBkYXRlUm9vdExheWVycyBvdXQgb2Ygc2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIuCisK
KyAgICAgICAgKFdlYktpdDo6UmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWE6OmF0dGFjaFZpZXdP
dmVybGF5R3JhcGhpY3NMYXllcik6CisgICAgICAgIElmIHdlIGF0dGFjaC9kZXRhY2ggdGhlIHZp
ZXctcmVsYXRpdmUgcGFnZSBvdmVybGF5IHJvb3QgbGF5ZXIsCisgICAgICAgIHJlYXR0YWNoIHRo
ZSByb290IGNvbXBvc2l0aW5nIGxheWVyJ3MgY2hpbGRyZW4uCisKKyAgICAgICAgKFdlYktpdDo6
UmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWE6OnNldFJvb3RDb21wb3NpdGluZ0xheWVyKToKKyAg
ICAgICAgRGl0dG8gZm9yIHRoZSByb290IGNvbXBvc2l0aW5nIGxheWVyLgorCisgICAgICAgIChX
ZWJLaXQ6OlJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhOjp1cGRhdGVTY3JvbGxlZEV4cG9zZWRS
ZWN0KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWE6OmZsdXNo
TGF5ZXJzKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWE6Om1h
aW5GcmFtZUNvbnRlbnRTaXplQ2hhbmdlZCk6CisgICAgICAgIEluZm9ybWluZyBQYWdlT3Zlcmxh
eUNvbnRyb2xsZXIgb2YgZXhwb3NlZCByZWN0L2RvY3VtZW50IHNpemUgY2hhbmdlcyBpcyBub3cK
KyAgICAgICAgV2ViQ29yZSdzIGpvYi4KKworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9t
YWMvVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWEuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNz
L1dlYlBhZ2UvbWFjL1RpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhLm1tOgorICAgICAgICAo
V2ViS2l0OjpUaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYTo6VGlsZWRDb3JlQW5pbWF0aW9u
RHJhd2luZ0FyZWEpOgorICAgICAgICAoV2ViS2l0OjpUaWxlZENvcmVBbmltYXRpb25EcmF3aW5n
QXJlYTo6dXBkYXRlUm9vdExheWVycyk6CisgICAgICAgIEZhY3RvciB1cGRhdGVSb290TGF5ZXJz
IG91dCBvZiBzZXRSb290Q29tcG9zaXRpbmdMYXllci4KKworICAgICAgICAoV2ViS2l0OjpUaWxl
ZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYTo6YXR0YWNoVmlld092ZXJsYXlHcmFwaGljc0xheWVy
KToKKyAgICAgICAgKFdlYktpdDo6VGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWE6OnNldFJv
b3RDb21wb3NpdGluZ0xheWVyKToKKyAgICAgICAgTWFrZSB1c2Ugb2YgdXBkYXRlUm9vdExheWVy
cyB3aGVuIHdlIGF0dGFjaC9kZXRhY2ggcm9vdCBjb21wb3NpdGluZyBsYXllci92aWV3IG92ZXJs
YXkgbGF5ZXIuCisKKyAgICAgICAgKFdlYktpdDo6VGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0Fy
ZWE6Om1haW5GcmFtZUNvbnRlbnRTaXplQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6OlRpbGVk
Q29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhOjpmbHVzaExheWVycyk6CisgICAgICAgIChXZWJLaXQ6
OlRpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhOjp1cGRhdGVTY3JvbGxlZEV4cG9zZWRSZWN0
KToKKyAgICAgICAgSW5mb3JtaW5nIFBhZ2VPdmVybGF5Q29udHJvbGxlciBvZiBleHBvc2VkIHJl
Y3QvZG9jdW1lbnQgc2l6ZSBjaGFuZ2VzIGlzIG5vdworICAgICAgICBXZWJDb3JlJ3Mgam9iLgor
CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhLmg6CisgICAgICAgIChX
ZWJLaXQ6OkRyYXdpbmdBcmVhOjphdHRhY2hWaWV3T3ZlcmxheUdyYXBoaWNzTGF5ZXIpOgorCisg
ICAgICAgICogU2hhcmVkL1dlYlJlbmRlckxheWVyLmNwcDoKKyAgICAgICAgKiBTaGFyZWQvV2Vi
UmVuZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQ
SS9jL1dLQnVuZGxlQVBJQ2FzdC5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL21hYy9XS1dlYlByb2Nlc3NQbHVnSW5Ccm93c2VyQ29udGV4dENvbnRyb2xsZXIubW06
CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9tYWMvV2ViRWRpdG9yQ2xpZW50
TWFjLm1tOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHA6CisgICAgICAgIElu
Y2x1ZGUgTWFpbkZyYW1lLmggYmVjYXVzZSBXZWJQYWdlOjptYWluRnJhbWUgcmV0dXJucyBhIE1h
aW5GcmFtZSBub3cuCisKIDIwMTQtMDktMzAgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNp
YUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT04ocjE3MzkyOSk6IFtHVEtdIFRlc3RJ
bnNwZWN0b3IgZmFpbHMgYWZ0ZXIgcjE3MzkyOQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
U2hhcmVkL1dlYlJlbmRlckxheWVyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJSZW5k
ZXJMYXllci5jcHAKaW5kZXggYzk0ZjJiMi4uMTg0OTRiMCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvU2hhcmVkL1dlYlJlbmRlckxheWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvV2ViUmVuZGVyTGF5ZXIuY3BwCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSA8V2ViQ29y
ZS9GcmFtZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVMb2FkZXIuaD4KICNpbmNsdWRlIDxX
ZWJDb3JlL0ZyYW1lTG9hZGVyQ2xpZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9NYWluRnJhbWUu
aD4KICNpbmNsdWRlIDxXZWJDb3JlL1JlbmRlckxheWVyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9S
ZW5kZXJMYXllckJhY2tpbmcuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1JlbmRlclZpZXcuaD4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJSZW5kZXJPYmplY3QuY3BwIGIvU291
cmNlL1dlYktpdDIvU2hhcmVkL1dlYlJlbmRlck9iamVjdC5jcHAKaW5kZXggNmNlZGFkYS4uNjk1
MzA4NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYlJlbmRlck9iamVjdC5j
cHAKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYlJlbmRlck9iamVjdC5jcHAKQEAgLTMy
LDYgKzMyLDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lLmg+CiAjaW5jbHVkZSA8V2ViQ29y
ZS9GcmFtZUxvYWRlci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVMb2FkZXJDbGllbnQuaD4K
KyNpbmNsdWRlIDxXZWJDb3JlL01haW5GcmFtZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVy
VGV4dC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyVmlldy5oPgogI2luY2x1ZGUgPFdlYkNv
cmUvUmVuZGVyV2lkZ2V0Lmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKaW5kZXggZDBhOTJmOS4uMmQ3ZWMzZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMzA3LDggKzMw
Nyw2IEBACiAJCTFBOTBDMUVFMTI2NEZENTAwMDNFNDRENCAvKiBXZWJGaW5kT3B0aW9ucy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE5MEMxRUQxMjY0
RkQ1MDAwM0U0NEQ0IC8qIFdlYkZpbmRPcHRpb25zLmggKi87IH07CiAJCTFBOTBDMUY0MTI2NEZE
NzEwMDNFNDRENCAvKiBGaW5kQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMUE5MEMxRjIxMjY0RkQ3MTAwM0U0NEQ0IC8qIEZpbmRDb250
cm9sbGVyLmggKi87IH07CiAJCTFBOTBDMUY1MTI2NEZENzEwMDNFNDRENCAvKiBGaW5kQ29udHJv
bGxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAx
QTkwQzFGMzEyNjRGRDcxMDAzRTQ0RDQgLyogRmluZENvbnRyb2xsZXIuY3BwICovOyB9OwotCQkx
QTkwQzIzNzEyNjUwNzE3MDAzRTQ0RDQgLyogUGFnZU92ZXJsYXkuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBOTBDMjM1MTI2NTA3MTcwMDNFNDRENCAv
KiBQYWdlT3ZlcmxheS5oICovOyB9OwotCQkxQTkwQzIzODEyNjUwNzE3MDAzRTQ0RDQgLyogUGFn
ZU92ZXJsYXkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMUE5MEMyMzYxMjY1MDcxNzAwM0U0NEQ0IC8qIFBhZ2VPdmVybGF5LmNwcCAqLzsgfTsKIAkJ
MUE5MTAwNzExMjY2NzVDNDAwMTg0MkY1IC8qIEZpbmRJbmRpY2F0b3IuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBOTEwMDZGMTI2Njc1QzMwMDE4NDJG
NSAvKiBGaW5kSW5kaWNhdG9yLmggKi87IH07CiAJCTFBOTEwMDcyMTI2Njc1QzQwMDE4NDJGNSAv
KiBGaW5kSW5kaWNhdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDFBOTEwMDcwMTI2Njc1QzQwMDE4NDJGNSAvKiBGaW5kSW5kaWNhdG9yLmNwcCAq
LzsgfTsKIAkJMUE5MkRDMTExMkY4QkE0NjAwMTdBRjY1IC8qIExheWVyVHJlZUNvbnRleHQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBOTJEQzEwMTJG
OEJBNDYwMDE3QUY2NSAvKiBMYXllclRyZWVDb250ZXh0LmggKi87IH07CkBAIC01NjgsOCArNTY2
LDYgQEAKIAkJMjlENTVERjIxNjFCRjlGMTAwMzFBMkUzIC8qIFdlYlBhZ2VHcm91cFByb3h5TWVz
c2FnZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI5
RDU1REYwMTYxQkY5RjEwMDMxQTJFMyAvKiBXZWJQYWdlR3JvdXBQcm94eU1lc3NhZ2VzLmggKi87
IH07CiAJCTJEMTI1QzVFMTg1N0VBMDUwMDNCQTNDQiAvKiBWaWV3R2VzdHVyZUNvbnRyb2xsZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJEMTI1QzVD
MTg1N0VBMDUwMDNCQTNDQiAvKiBWaWV3R2VzdHVyZUNvbnRyb2xsZXIuaCAqLzsgfTsKIAkJMkQx
MjVDNUYxODU3RUEwNTAwM0JBM0NCIC8qIFZpZXdHZXN0dXJlQ29udHJvbGxlck1hYy5tbSBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJEMTI1QzVEMTg1N0VB
MDUwMDNCQTNDQiAvKiBWaWV3R2VzdHVyZUNvbnRyb2xsZXJNYWMubW0gKi87IH07Ci0JCTJEMTQw
RUFGMThGMzdCRTAwMDVFNzVBMCAvKiBQYWdlT3ZlcmxheUNvbnRyb2xsZXIuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkQxNDBFQUQxOEYzN0JFMDAw
NUU3NUEwIC8qIFBhZ2VPdmVybGF5Q29udHJvbGxlci5jcHAgKi87IH07Ci0JCTJEMTQwRUIwMThG
MzdCRTAwMDVFNzVBMCAvKiBQYWdlT3ZlcmxheUNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJEMTQwRUFFMThGMzdCRTAwMDVFNzVBMCAv
KiBQYWdlT3ZlcmxheUNvbnRyb2xsZXIuaCAqLzsgfTsKIAkJMkQxQjVENUQxODU4NjlDODAwNkM2
NTk2IC8qIFZpZXdHZXN0dXJlQ29udHJvbGxlck1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRDFCNUQ1QjE4NTg2OUM4MDA2
QzY1OTYgLyogVmlld0dlc3R1cmVDb250cm9sbGVyTWVzc2FnZVJlY2VpdmVyLmNwcCAqLzsgfTsK
IAkJMkQxQjVENUUxODU4NjlDODAwNkM2NTk2IC8qIFZpZXdHZXN0dXJlQ29udHJvbGxlck1lc3Nh
Z2VzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRDFC
NUQ1QzE4NTg2OUM4MDA2QzY1OTYgLyogVmlld0dlc3R1cmVDb250cm9sbGVyTWVzc2FnZXMuaCAq
LzsgfTsKIAkJMkQyOEYzRTQxODg1Q0NDMTAwNEI5RUFFIC8qIFdlYkNocm9tZUNsaWVudElPUy5t
bSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJEMjhGM0Uw
MTg4NUNDQzEwMDRCOUVBRSAvKiBXZWJDaHJvbWVDbGllbnRJT1MubW0gKi87IH07CkBAIC01ODYs
NiArNTgyLDggQEAKIAkJMkQ0MjlCRkQxNzIxRTJDNzAwRUM2ODFGIC8qIFBERlBsdWdpblBhc3N3
b3JkRmllbGQubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAyRDQyOUJGQjE3MjFFMkJBMDBFQzY4MUYgLyogUERGUGx1Z2luUGFzc3dvcmRGaWVsZC5tbSAq
LzsgfTsKIAkJMkQ0N0I1NkMxODEwNzE0RTAwM0EzQUVFIC8qIFJlbW90ZUxheWVyQmFja2luZ1N0
b3JlLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkQ0
N0I1NkExODEwNzE0RTAwM0EzQUVFIC8qIFJlbW90ZUxheWVyQmFja2luZ1N0b3JlLm1tICovOyB9
OwogCQkyRDQ3QjU2RDE4MTA3MTRFMDAzQTNBRUUgLyogUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmUu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJENDdCNTZC
MTgxMDcxNEUwMDNBM0FFRSAvKiBSZW1vdGVMYXllckJhY2tpbmdTdG9yZS5oICovOyB9OworCQky
RDVDOUQwNTE5QzgxRDhGMDBCM0M1QzEgLyogV2ViUGFnZU92ZXJsYXkuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkQ1QzlEMDMxOUM4MUQ4RjAwQjND
NUMxIC8qIFdlYlBhZ2VPdmVybGF5LmNwcCAqLzsgfTsKKwkJMkQ1QzlEMDYxOUM4MUQ4RjAwQjND
NUMxIC8qIFdlYlBhZ2VPdmVybGF5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAyRDVDOUQwNDE5QzgxRDhGMDBCM0M1QzEgLyogV2ViUGFnZU92ZXJsYXku
aCAqLzsgfTsKIAkJMkQ2QUI1NDExOTJCMUM0QTAwM0E5RkQxIC8qIFdLUERGUGFnZU51bWJlcklu
ZGljYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MkQ2QUI1M0YxOTJCMUM0QTAwM0E5RkQxIC8qIFdLUERGUGFnZU51bWJlckluZGljYXRvci5oICov
OyB9OwogCQkyRDZBQjU0MjE5MkIxQzRBMDAzQTlGRDEgLyogV0tQREZQYWdlTnVtYmVySW5kaWNh
dG9yLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkQ2
QUI1NDAxOTJCMUM0QTAwM0E5RkQxIC8qIFdLUERGUGFnZU51bWJlckluZGljYXRvci5tbSAqLzsg
fTsKIAkJMkQ2QjM3MUIxOEE5NjdBRDAwNDJBRTgwIC8qIF9XS1RodW1ibmFpbFZpZXcuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJENkIzNzE5MThBOTY3
QUQwMDQyQUU4MCAvKiBfV0tUaHVtYm5haWxWaWV3LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTIyNzEsOCArMjI2OSw2IEBACiAJCTFBOTBDMUVE
MTI2NEZENTAwMDNFNDRENCAvKiBXZWJGaW5kT3B0aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBXZWJGaW5kT3B0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkxQTkwQzFGMjEyNjRGRDcxMDAzRTQ0RDQgLyogRmluZENvbnRyb2xsZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmluZENvbnRyb2xsZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMUE5MEMxRjMxMjY0RkQ3MTAwM0U0NEQ0IC8qIEZpbmRDb250cm9s
bGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZpbmRDb250cm9s
bGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMUE5MEMyMzUxMjY1MDcxNzAw
M0U0NEQ0IC8qIFBhZ2VPdmVybGF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFBhZ2VPdmVybGF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTFBOTBDMjM2MTI2
NTA3MTcwMDNFNDRENCAvKiBQYWdlT3ZlcmxheS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBQYWdlT3ZlcmxheS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTFBOTEwMDZGMTI2Njc1QzMwMDE4NDJGNSAvKiBGaW5kSW5kaWNhdG9yLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZpbmRJbmRpY2F0b3IuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMUE5MTAwNzAxMjY2NzVDNDAwMTg0MkY1IC8qIEZpbmRJbmRpY2F0b3Iu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRmluZEluZGljYXRvci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBOTJEQzEwMTJGOEJBNDYwMDE3QUY2
NSAvKiBMYXllclRyZWVDb250ZXh0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IExheWVyVHJlZUNvbnRleHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI1NTgs
OCArMjU1NCw2IEBACiAJCTI5RDU1REYwMTYxQkY5RjEwMDMxQTJFMyAvKiBXZWJQYWdlR3JvdXBQ
cm94eU1lc3NhZ2VzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlBhZ2VH
cm91cFByb3h5TWVzc2FnZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkQxMjVD
NUMxODU3RUEwNTAwM0JBM0NCIC8qIFZpZXdHZXN0dXJlQ29udHJvbGxlci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBWaWV3R2VzdHVyZUNvbnRyb2xsZXIuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkQxMjVDNUQxODU3RUEwNTAwM0JBM0NCIC8qIFZpZXdHZXN0
dXJlQ29udHJvbGxlck1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0
aCA9IFZpZXdHZXN0dXJlQ29udHJvbGxlck1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJMkQxNDBFQUQxOEYzN0JFMDAwNUU3NUEwIC8qIFBhZ2VPdmVybGF5Q29udHJvbGxlci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQYWdlT3ZlcmxheUNvbnRy
b2xsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkyRDE0MEVBRTE4RjM3QkUw
MDA1RTc1QTAgLyogUGFnZU92ZXJsYXlDb250cm9sbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFBhZ2VPdmVybGF5Q29udHJvbGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkyRDFCNUQ1QTE4NTg2NTk5MDA2QzY1OTYgLyogVmlld0dlc3R1cmVDb250cm9s
bGVyLm1lc3NhZ2VzLmluICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gdGV4dDsgcGF0aCA9IFZpZXdHZXN0dXJlQ29udHJvbGxlci5tZXNzYWdlcy5pbjsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkQxQjVENUIxODU4NjlDODAwNkM2NTk2IC8q
IFZpZXdHZXN0dXJlQ29udHJvbGxlck1lc3NhZ2VSZWNlaXZlci5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBWaWV3R2VzdHVyZUNvbnRyb2xsZXJNZXNzYWdlUmVjZWl2
ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyRDFCNUQ1QzE4NTg2OUM4MDA2
QzY1OTYgLyogVmlld0dlc3R1cmVDb250cm9sbGVyTWVzc2FnZXMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gVmlld0dlc3R1cmVDb250cm9sbGVyTWVzc2FnZXMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI1ODIsNiArMjU3Niw4IEBACiAJCTJENDI5QkZCMTcy
MUUyQkEwMEVDNjgxRiAvKiBQREZQbHVnaW5QYXNzd29yZEZpZWxkLm1tICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gUERGUGx1Z2luUGFzc3dvcmRGaWVsZC5tbTsgcGF0
aCA9IFBERi9QREZQbHVnaW5QYXNzd29yZEZpZWxkLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkyRDQ3QjU2QTE4MTA3MTRFMDAzQTNBRUUgLyogUmVtb3RlTGF5ZXJCYWNraW5nU3Rv
cmUubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBSZW1vdGVMYXll
ckJhY2tpbmdTdG9yZS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkQ0N0I1NkIx
ODEwNzE0RTAwM0EzQUVFIC8qIFJlbW90ZUxheWVyQmFja2luZ1N0b3JlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbW90ZUxheWVyQmFja2luZ1N0b3JlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTJENUM5RDAzMTlDODFEOEYwMEIzQzVDMSAvKiBXZWJQYWdl
T3ZlcmxheS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJQYWdl
T3ZlcmxheS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTJENUM5RDA0MTlDODFE
OEYwMEIzQzVDMSAvKiBXZWJQYWdlT3ZlcmxheS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBXZWJQYWdlT3ZlcmxheS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQky
RDZBQjUzRjE5MkIxQzRBMDAzQTlGRDEgLyogV0tQREZQYWdlTnVtYmVySW5kaWNhdG9yLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdLUERGUGFnZU51bWJlckluZGljYXRvci5o
OyBwYXRoID0gaW9zL1dLUERGUGFnZU51bWJlckluZGljYXRvci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkyRDZBQjU0MDE5MkIxQzRBMDAzQTlGRDEgLyogV0tQREZQYWdlTnVtYmVy
SW5kaWNhdG9yLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gV0tQ
REZQYWdlTnVtYmVySW5kaWNhdG9yLm1tOyBwYXRoID0gaW9zL1dLUERGUGFnZU51bWJlckluZGlj
YXRvci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkQ2QjM3MTkxOEE5NjdBRDAw
NDJBRTgwIC8qIF9XS1RodW1ibmFpbFZpZXcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gX1dLVGh1bWJuYWlsVmlldy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
NTcwMSwxMCArNTY5Nyw4IEBACiAJCQkJMUE5MEMxRjIxMjY0RkQ3MTAwM0U0NEQ0IC8qIEZpbmRD
b250cm9sbGVyLmggKi8sCiAJCQkJN0MzODc0MzMxNzJGNTYxNTAwMUJEODhBIC8qIFBhZ2VCYW5u
ZXIuY3BwICovLAogCQkJCTdDRjQ3RkY5MTcyNzVDNTcwMDhBQ0I5MSAvKiBQYWdlQmFubmVyLmgg
Ki8sCi0JCQkJMUE5MEMyMzYxMjY1MDcxNzAwM0U0NEQ0IC8qIFBhZ2VPdmVybGF5LmNwcCAqLywK
LQkJCQkxQTkwQzIzNTEyNjUwNzE3MDAzRTQ0RDQgLyogUGFnZU92ZXJsYXkuaCAqLywKLQkJCQky
RDE0MEVBRDE4RjM3QkUwMDA1RTc1QTAgLyogUGFnZU92ZXJsYXlDb250cm9sbGVyLmNwcCAqLywK
LQkJCQkyRDE0MEVBRTE4RjM3QkUwMDA1RTc1QTAgLyogUGFnZU92ZXJsYXlDb250cm9sbGVyLmgg
Ki8sCisJCQkJMkQ1QzlEMDMxOUM4MUQ4RjAwQjNDNUMxIC8qIFdlYlBhZ2VPdmVybGF5LmNwcCAq
LywKKwkJCQkyRDVDOUQwNDE5QzgxRDhGMDBCM0M1QzEgLyogV2ViUGFnZU92ZXJsYXkuaCAqLywK
IAkJCQk1MTkyRDU3MTE5NjFGQTJGMDBDRDE5QUEgLyogU2VydmljZXNPdmVybGF5Q29udHJvbGxl
ci5oICovLAogCQkJCTJEODE5Qjk5MTg2Mjc1QjMwMDFGMDNEMSAvKiBWaWV3R2VzdHVyZUdlb21l
dHJ5Q29sbGVjdG9yLmNwcCAqLywKIAkJCQkyRDgxOUI5QTE4NjI3NUIzMDAxRjAzRDEgLyogVmll
d0dlc3R1cmVHZW9tZXRyeUNvbGxlY3Rvci5oICovLApAQCAtNzA0Niw2ICs3MDQwLDcgQEAKIAkJ
CQk3Qzg1RkQ4MDE5MzQxNjY1MDAwMTc3QzQgLyogV2ViUHJlZmVyZW5jZXNLZXlzLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk1MTJGNTg5NzEyQTg4Mzg4MDA2Mjk1MzAgLyogQXV0aGVudGljYXRpb25D
aGFsbGVuZ2VQcm94eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUE0NDVCOUYxODRENUZCNTAwNEIz
NDE0IC8qIFdLQ29udGV4dEluamVjdGVkQnVuZGxlQ2xpZW50LmggaW4gSGVhZGVycyAqLywKKwkJ
CQkyRDVDOUQwNjE5QzgxRDhGMDBCM0M1QzEgLyogV2ViUGFnZU92ZXJsYXkuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTUxMkY1ODk5MTJBODgzODgwMDYyOTUzMCAvKiBBdXRoZW50aWNhdGlvbkRlY2lz
aW9uTGlzdGVuZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxOEU4RUY5MTZCMjA5MUMwMEU5MTQy
OSAvKiBBdXRoZW50aWNhdGlvbk1hbmFnZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxMkY1OEEz
MTJBODgzQUQwMDYyOTUzMCAvKiBBdXRoZW50aWNhdGlvbk1hbmFnZXJNZXNzYWdlcy5oIGluIEhl
YWRlcnMgKi8sCkBAIC03MTUzLDcgKzcxNDgsNiBAQAogCQkJCTFBRTUyRjkyMTkyMDFEQTcwMEEx
RkEzNyAvKiBBUElDb250ZXh0Q29uZmlndXJhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0Mz
NjFENzMxOTI3RkEzNjAwMzZBNTlEIC8qIFdlYlNjcmlwdE1lc3NhZ2VIYW5kbGVyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlFMTA1RkU1NDE4RDdCOURFMDA4RjU3QTggLyogRWRpdGluZ1JhbmdlLmgg
aW4gSGVhZGVycyAqLywKLQkJCQkyRDE0MEVCMDE4RjM3QkUwMDA1RTc1QTAgLyogUGFnZU92ZXJs
YXlDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE3NzUzRjExOEJBQkYwMDA3RDlF
OUEgLyogR2VuZXJpY0NhbGxiYWNrLmggaW4gSGVhZGVycyAqLywKIAkJCQkzNzlBODczNjE4QkJG
QTQzMDA1ODhBRjIgLyogX1dLQWN0aXZhdGVkRWxlbWVudEluZm9JbnRlcm5hbC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQkMwNkY0MkYxMkRCQjlCNjAwMkQ3OERFIC8qIEdlb2xvY2F0aW9uUGVybWlz
c2lvblJlcXVlc3RNYW5hZ2VyLmggaW4gSGVhZGVycyAqLywKQEAgLTcyNzYsNyArNzI3MCw2IEBA
CiAJCQkJMUE1QjFDNTExODk4NjA2RjAwNEZDRjlCIC8qIFdLTmF2aWdhdGlvbi5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJN0NGNDdGRkIxNzI3NUM1NzAwOEFDQjkxIC8qIFBhZ2VCYW5uZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUJDNkVEQUE2MTExMjcxQzYwMEU3Njc4QiAvKiBQYWdlQ2xpZW50Lmgg
aW4gSGVhZGVycyAqLywKLQkJCQkxQTkwQzIzNzEyNjUwNzE3MDAzRTQ0RDQgLyogUGFnZU92ZXJs
YXkuaCBpbiBIZWFkZXJzICovLAogCQkJCUM1NzRBNTgxMTJFNjY2ODEwMDJERkU5OCAvKiBQYXN0
ZWJvYXJkVHlwZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUUxOTU4MkQzMTUzQ0JGRDcwMEI2MDg3
NSAvKiBQREZLaXRJbXBvcnRzLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUUwMEQ0RjE4MkQ2RjUw
MDAwODdERDcgLyogV0tCcm93c2luZ0NvbnRleHRIYW5kbGVJbnRlcm5hbC5oIGluIEhlYWRlcnMg
Ki8sCkBAIC04OTI4LDcgKzg5MjEsNiBAQAogCQkJCTUxRTM1MUY1MTgwRjVDNzUwMEU1M0JFOSAv
KiBXZWJJREJGYWN0b3J5QmFja2VuZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3QzM4NzQzNDE3
MkY1NjE1MDAxQkQ4OEEgLyogUGFnZUJhbm5lci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3QzZE
MzdGQzE3MkY1NTVGMDA5RDI4NDcgLyogUGFnZUJhbm5lck1hYy5tbSBpbiBTb3VyY2VzICovLAot
CQkJCTFBOTBDMjM4MTI2NTA3MTcwMDNFNDRENCAvKiBQYWdlT3ZlcmxheS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlDNTc0QTU4MjEyRTY2NjgxMDAyREZFOTggLyogUGFzdGVib2FyZFR5cGVzLm1t
IGluIFNvdXJjZXMgKi8sCiAJCQkJRTE5NTgyRDYxNTNDQzA1NDAwQjYwODc1IC8qIFBERktpdElt
cG9ydHMubW0gaW4gU291cmNlcyAqLywKIAkJCQkyRDg3MEQxMDE2MjM0RkZFMDAwQTNGMjAgLyog
UERGUGx1Z2luLm1tIGluIFNvdXJjZXMgKi8sCkBAIC05MTI4LDcgKzkxMjAsNiBAQAogCQkJCUE1
NDI5M0E1MTk1QTQzREQwMDI3ODJDNyAvKiBXS0luc3BlY3Rvck5vZGVTZWFyY2hHZXN0dXJlUmVj
b2duaXplci5tbSBpbiBTb3VyY2VzICovLAogCQkJCUMwMzM3REFFMTI3QTI0RkUwMDhGRjRGNCAv
KiBXZWJFdmVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzAzMkRCQTEwRjQzODBGMDA1OEMx
NUEgLyogV2ViRXZlbnRDb252ZXJzaW9uLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTJEMTQwRUFG
MThGMzdCRTAwMDVFNzVBMCAvKiBQYWdlT3ZlcmxheUNvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQkMxMTFCNUUxMTJGNjI5ODAwMzM3QkFCIC8qIFdlYkV2ZW50RmFjdG9yeS5tbSBp
biBTb3VyY2VzICovLAogCQkJCUExMThBOUVFMTkwN0FENkYwMEY3QzkyQiAvKiBRdWlja0xvb2tE
b2N1bWVudERhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUEzREQxRkQxMjVFNTlGMzAwNDUx
NUU2IC8qIFdlYkZpbmRDbGllbnQuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC05MjEyLDYgKzkyMDMs
NyBAQAogCQkJCUMwNkM2MDk1MTI0QzE0NEIwMDAxNjgyRiAvKiBXZWJQYWdlQ3JlYXRpb25QYXJh
bWV0ZXJzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUM1OUM0QTU4MThCODExNzQwMDdCRENCNiAv
KiBBc3Npc3RlZE5vZGVJbmZvcm1hdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzdCNjIw
NzEyOUEwQTY3MDBEMTc0QTQgLyogV2ViUGFnZUdyb3VwLmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CTJENUM5RDA1MTlDODFEOEYwMEIzQzVDMSAvKiBXZWJQYWdlT3ZlcmxheS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlCQzdCNjI1MzEyQTQzQzk2MDBEMTc0QTQgLyogV2ViUGFnZUdyb3VwRGF0YS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzdCNjIxNjEyQTQyMTlBMDBEMTc0QTQgLyogV2ViUGFn
ZUdyb3VwUHJveHkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMjlENTVERjExNjFCRjlGMTAwMzFB
MkUzIC8qIFdlYlBhZ2VHcm91cFByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICov
LApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9B
UEkvYy9XS0J1bmRsZUFQSUNhc3QuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVBUElDYXN0LmgKaW5kZXggZTYzNTQwOC4uMGQ1YjdjNyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Yy9XS0J1bmRsZUFQSUNhc3QuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlQVBJQ2FzdC5oCkBAIC00OSwxMSArNDksMTEgQEAgY2xh
c3MgSW5qZWN0ZWRCdW5kbGVOb2RlSGFuZGxlOwogY2xhc3MgSW5qZWN0ZWRCdW5kbGVSYW5nZUhh
bmRsZTsKIGNsYXNzIEluamVjdGVkQnVuZGxlU2NyaXB0V29ybGQ7CiBjbGFzcyBQYWdlQmFubmVy
OwotY2xhc3MgUGFnZU92ZXJsYXk7CiBjbGFzcyBXZWJGcmFtZTsKIGNsYXNzIFdlYkluc3BlY3Rv
cjsKIGNsYXNzIFdlYlBhZ2U7CiBjbGFzcyBXZWJQYWdlR3JvdXBQcm94eTsKK2NsYXNzIFdlYlBh
Z2VPdmVybGF5OwogCiBXS19BRERfQVBJX01BUFBJTkcoV0tCdW5kbGVCYWNrRm9yd2FyZExpc3RJ
dGVtUmVmLCBJbmplY3RlZEJ1bmRsZUJhY2tGb3J3YXJkTGlzdEl0ZW0pCiBXS19BRERfQVBJX01B
UFBJTkcoV0tCdW5kbGVCYWNrRm9yd2FyZExpc3RSZWYsIEluamVjdGVkQnVuZGxlQmFja0Zvcndh
cmRMaXN0KQpAQCAtNjYsNyArNjYsNyBAQCBXS19BRERfQVBJX01BUFBJTkcoV0tCdW5kbGVOYXZp
Z2F0aW9uQWN0aW9uUmVmLCBJbmplY3RlZEJ1bmRsZU5hdmlnYXRpb25BY3Rpb24pCiBXS19BRERf
QVBJX01BUFBJTkcoV0tCdW5kbGVOb2RlSGFuZGxlUmVmLCBJbmplY3RlZEJ1bmRsZU5vZGVIYW5k
bGUpCiBXS19BRERfQVBJX01BUFBJTkcoV0tCdW5kbGVQYWdlQmFubmVyUmVmLCBQYWdlQmFubmVy
KQogV0tfQUREX0FQSV9NQVBQSU5HKFdLQnVuZGxlUGFnZUdyb3VwUmVmLCBXZWJQYWdlR3JvdXBQ
cm94eSkKLVdLX0FERF9BUElfTUFQUElORyhXS0J1bmRsZVBhZ2VPdmVybGF5UmVmLCBQYWdlT3Zl
cmxheSkKK1dLX0FERF9BUElfTUFQUElORyhXS0J1bmRsZVBhZ2VPdmVybGF5UmVmLCBXZWJQYWdl
T3ZlcmxheSkKIFdLX0FERF9BUElfTUFQUElORyhXS0J1bmRsZVBhZ2VSZWYsIFdlYlBhZ2UpCiBX
S19BRERfQVBJX01BUFBJTkcoV0tCdW5kbGVSYW5nZUhhbmRsZVJlZiwgSW5qZWN0ZWRCdW5kbGVS
YW5nZUhhbmRsZSkKIFdLX0FERF9BUElfTUFQUElORyhXS0J1bmRsZVJlZiwgSW5qZWN0ZWRCdW5k
bGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9jL1dLQnVuZGxlUGFnZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlUGFnZS5jcHAKaW5kZXggMjExNGY1OC4uYzZlNmU1YSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Yy9XS0J1bmRsZVBhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVQYWdlLmNwcApAQCAtNDcsMTIgKzQ3LDE1IEBACiAjaW5j
bHVkZSAiV2ViRnVsbFNjcmVlbk1hbmFnZXIuaCIKICNpbmNsdWRlICJXZWJJbWFnZS5oIgogI2lu
Y2x1ZGUgIldlYlBhZ2UuaCIKKyNpbmNsdWRlICJXZWJQYWdlT3ZlcmxheS5oIgogI2luY2x1ZGUg
IldlYlJlbmRlckxheWVyLmgiCiAjaW5jbHVkZSAiV2ViUmVuZGVyT2JqZWN0LmgiCiAjaW5jbHVk
ZSA8V2ViQ29yZS9BWE9iamVjdENhY2hlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9BY2Nlc3NpYmls
aXR5T2JqZWN0Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9NYWluRnJhbWUuaD4KICNpbmNsdWRlIDxX
ZWJDb3JlL1BhZ2UuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1BhZ2VPdmVybGF5Lmg+CisjaW5jbHVk
ZSA8V2ViQ29yZS9QYWdlT3ZlcmxheUNvbnRyb2xsZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1VS
TC5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KIApAQCAtMzU0LDIyICszNTcsMjIg
QEAgV0tCdW5kbGVCYWNrRm9yd2FyZExpc3RSZWYgV0tCdW5kbGVQYWdlR2V0QmFja0ZvcndhcmRM
aXN0KFdLQnVuZGxlUGFnZVJlZiBwYWdlUmUKIAogdm9pZCBXS0J1bmRsZVBhZ2VJbnN0YWxsUGFn
ZU92ZXJsYXkoV0tCdW5kbGVQYWdlUmVmIHBhZ2VSZWYsIFdLQnVuZGxlUGFnZU92ZXJsYXlSZWYg
cGFnZU92ZXJsYXlSZWYpCiB7Ci0gICAgdG9JbXBsKHBhZ2VSZWYpLT5pbnN0YWxsUGFnZU92ZXJs
YXkodG9JbXBsKHBhZ2VPdmVybGF5UmVmKSk7CisgICAgdG9JbXBsKHBhZ2VSZWYpLT5tYWluRnJh
bWUoKS0+cGFnZU92ZXJsYXlDb250cm9sbGVyKCkuaW5zdGFsbFBhZ2VPdmVybGF5KHRvSW1wbChw
YWdlT3ZlcmxheVJlZiktPmNvcmVPdmVybGF5KCksIFdlYkNvcmU6OlBhZ2VPdmVybGF5OjpGYWRl
TW9kZTo6RG9Ob3RGYWRlKTsKIH0KIAogdm9pZCBXS0J1bmRsZVBhZ2VVbmluc3RhbGxQYWdlT3Zl
cmxheShXS0J1bmRsZVBhZ2VSZWYgcGFnZVJlZiwgV0tCdW5kbGVQYWdlT3ZlcmxheVJlZiBwYWdl
T3ZlcmxheVJlZikKIHsKLSAgICB0b0ltcGwocGFnZVJlZiktPnVuaW5zdGFsbFBhZ2VPdmVybGF5
KHRvSW1wbChwYWdlT3ZlcmxheVJlZikpOworICAgIHRvSW1wbChwYWdlUmVmKS0+bWFpbkZyYW1l
KCktPnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLnVuaW5zdGFsbFBhZ2VPdmVybGF5KHRvSW1wbChw
YWdlT3ZlcmxheVJlZiktPmNvcmVPdmVybGF5KCksIFdlYkNvcmU6OlBhZ2VPdmVybGF5OjpGYWRl
TW9kZTo6RG9Ob3RGYWRlKTsKIH0KIAogdm9pZCBXS0J1bmRsZVBhZ2VJbnN0YWxsUGFnZU92ZXJs
YXlXaXRoQW5pbWF0aW9uKFdLQnVuZGxlUGFnZVJlZiBwYWdlUmVmLCBXS0J1bmRsZVBhZ2VPdmVy
bGF5UmVmIHBhZ2VPdmVybGF5UmVmKQogewotICAgIHRvSW1wbChwYWdlUmVmKS0+aW5zdGFsbFBh
Z2VPdmVybGF5KHRvSW1wbChwYWdlT3ZlcmxheVJlZiksIFBhZ2VPdmVybGF5OjpGYWRlTW9kZTo6
RmFkZSk7CisgICAgdG9JbXBsKHBhZ2VSZWYpLT5tYWluRnJhbWUoKS0+cGFnZU92ZXJsYXlDb250
cm9sbGVyKCkuaW5zdGFsbFBhZ2VPdmVybGF5KHRvSW1wbChwYWdlT3ZlcmxheVJlZiktPmNvcmVP
dmVybGF5KCksIFdlYkNvcmU6OlBhZ2VPdmVybGF5OjpGYWRlTW9kZTo6RmFkZSk7CiB9CiAKIHZv
aWQgV0tCdW5kbGVQYWdlVW5pbnN0YWxsUGFnZU92ZXJsYXlXaXRoQW5pbWF0aW9uKFdLQnVuZGxl
UGFnZVJlZiBwYWdlUmVmLCBXS0J1bmRsZVBhZ2VPdmVybGF5UmVmIHBhZ2VPdmVybGF5UmVmKQog
ewotICAgIHRvSW1wbChwYWdlUmVmKS0+dW5pbnN0YWxsUGFnZU92ZXJsYXkodG9JbXBsKHBhZ2VP
dmVybGF5UmVmKSwgUGFnZU92ZXJsYXk6OkZhZGVNb2RlOjpGYWRlKTsKKyAgICB0b0ltcGwocGFn
ZVJlZiktPm1haW5GcmFtZSgpLT5wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKS51bmluc3RhbGxQYWdl
T3ZlcmxheSh0b0ltcGwocGFnZU92ZXJsYXlSZWYpLT5jb3JlT3ZlcmxheSgpLCBXZWJDb3JlOjpQ
YWdlT3ZlcmxheTo6RmFkZU1vZGU6OkZhZGUpOwogfQogCiB2b2lkIFdLQnVuZGxlUGFnZVNldFRv
cE92ZXJoYW5nSW1hZ2UoV0tCdW5kbGVQYWdlUmVmIHBhZ2VSZWYsIFdLSW1hZ2VSZWYgaW1hZ2VS
ZWYpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9jL1dLQnVuZGxlUGFnZU92ZXJsYXkuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZVBhZ2VPdmVybGF5LmNwcAppbmRleCBiYmE4
NjI2Li40MTQyMGIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlUGFnZU92ZXJsYXkuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVQYWdlT3ZlcmxheS5j
cHAKQEAgLTI3LDEwICsyNywxNyBAQAogI2luY2x1ZGUgIldLQnVuZGxlUGFnZU92ZXJsYXkuaCIK
IAogI2luY2x1ZGUgIkFQSUNsaWVudC5oIgotI2luY2x1ZGUgIlBhZ2VPdmVybGF5LmgiCiAjaW5j
bHVkZSAiV0tBUElDYXN0LmgiCisjaW5jbHVkZSAiV0tBcnJheS5oIgogI2luY2x1ZGUgIldLQnVu
ZGxlQVBJQ2FzdC5oIgorI2luY2x1ZGUgIldLTnVtYmVyLmgiCisjaW5jbHVkZSAiV0tSZXRhaW5Q
dHIuaCIKKyNpbmNsdWRlICJXS1NoYXJlZEFQSUNhc3QuaCIKKyNpbmNsdWRlICJXS1N0cmluZ1By
aXZhdGUuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dC5oPgorI2luY2x1ZGUg
PFdlYkNvcmUvUGFnZU92ZXJsYXkuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtTW91c2VF
dmVudC5oPgorI2luY2x1ZGUgPFdlYktpdC9XZWJQYWdlT3ZlcmxheS5oPgogCiBuYW1lc3BhY2Ug
QVBJIHsKIApAQCAtNDcsNyArNTQsNyBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBDbGllbnRUcmFpdHM8
V0tCdW5kbGVQYWdlT3ZlcmxheUFjY2Vzc2liaWxpdHlDbGllbnRCYXNlPiB7CiB1c2luZyBuYW1l
c3BhY2UgV2ViQ29yZTsKIHVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CiAKLWNsYXNzIFBhZ2VPdmVy
bGF5Q2xpZW50SW1wbCA6IEFQSTo6Q2xpZW50PFdLQnVuZGxlUGFnZU92ZXJsYXlDbGllbnRCYXNl
PiwgcHVibGljIFBhZ2VPdmVybGF5OjpDbGllbnQgeworY2xhc3MgUGFnZU92ZXJsYXlDbGllbnRJ
bXBsIDogQVBJOjpDbGllbnQ8V0tCdW5kbGVQYWdlT3ZlcmxheUNsaWVudEJhc2U+LCBwdWJsaWMg
V2ViUGFnZU92ZXJsYXk6OkNsaWVudCB7CiBwdWJsaWM6CiAgICAgZXhwbGljaXQgUGFnZU92ZXJs
YXlDbGllbnRJbXBsKFdLQnVuZGxlUGFnZU92ZXJsYXlDbGllbnRCYXNlKiBjbGllbnQpCiAgICAg
ewpAQCAtNjAsNjQgKzY3LDY0IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgLy8g
UGFnZU92ZXJsYXk6OkNsaWVudC4KLSAgICB2aXJ0dWFsIHZvaWQgcGFnZU92ZXJsYXlEZXN0cm95
ZWQoUGFnZU92ZXJsYXkqKQorICAgIC8vIFdlYlBhZ2VPdmVybGF5OjpDbGllbnQuCisgICAgdmly
dHVhbCB2b2lkIHBhZ2VPdmVybGF5RGVzdHJveWVkKFdlYlBhZ2VPdmVybGF5Jikgb3ZlcnJpZGUK
ICAgICB7CiAgICAgICAgIGRlbGV0ZSB0aGlzOwogICAgIH0KIAotICAgIHZpcnR1YWwgdm9pZCB3
aWxsTW92ZVRvV2ViUGFnZShQYWdlT3ZlcmxheSogcGFnZU92ZXJsYXksIFdlYlBhZ2UqIHBhZ2Up
CisgICAgdmlydHVhbCB2b2lkIHdpbGxNb3ZlVG9QYWdlKFdlYlBhZ2VPdmVybGF5JiBwYWdlT3Zl
cmxheSwgV2ViUGFnZSogcGFnZSkgb3ZlcnJpZGUKICAgICB7CiAgICAgICAgIGlmICghbV9jbGll
bnQud2lsbE1vdmVUb1BhZ2UpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgbV9jbGll
bnQud2lsbE1vdmVUb1BhZ2UodG9BUEkocGFnZU92ZXJsYXkpLCB0b0FQSShwYWdlKSwgbV9jbGll
bnQuYmFzZS5jbGllbnRJbmZvKTsKKyAgICAgICAgbV9jbGllbnQud2lsbE1vdmVUb1BhZ2UodG9B
UEkoJnBhZ2VPdmVybGF5KSwgdG9BUEkocGFnZSksIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7
CiAgICAgfQogICAgIAotICAgIHZpcnR1YWwgdm9pZCBkaWRNb3ZlVG9XZWJQYWdlKFBhZ2VPdmVy
bGF5KiBwYWdlT3ZlcmxheSwgV2ViUGFnZSogcGFnZSkKKyAgICB2aXJ0dWFsIHZvaWQgZGlkTW92
ZVRvUGFnZShXZWJQYWdlT3ZlcmxheSYgcGFnZU92ZXJsYXksIFdlYlBhZ2UqIHBhZ2UpIG92ZXJy
aWRlCiAgICAgewogICAgICAgICBpZiAoIW1fY2xpZW50LmRpZE1vdmVUb1BhZ2UpCiAgICAgICAg
ICAgICByZXR1cm47CiAKLSAgICAgICAgbV9jbGllbnQuZGlkTW92ZVRvUGFnZSh0b0FQSShwYWdl
T3ZlcmxheSksIHRvQVBJKHBhZ2UpLCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pOworICAgICAg
ICBtX2NsaWVudC5kaWRNb3ZlVG9QYWdlKHRvQVBJKCZwYWdlT3ZlcmxheSksIHRvQVBJKHBhZ2Up
LCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pOwogICAgIH0KIAotICAgIHZpcnR1YWwgdm9pZCBk
cmF3UmVjdChQYWdlT3ZlcmxheSogcGFnZU92ZXJsYXksIEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhp
Y3NDb250ZXh0LCBjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpCisgICAgdmlydHVhbCB2b2lkIGRy
YXdSZWN0KFdlYlBhZ2VPdmVybGF5JiBwYWdlT3ZlcmxheSwgR3JhcGhpY3NDb250ZXh0JiBncmFw
aGljc0NvbnRleHQsIGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCkgb3ZlcnJpZGUKICAgICB7CiAg
ICAgICAgIGlmICghbV9jbGllbnQuZHJhd1JlY3QpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAg
ICAgICAgbV9jbGllbnQuZHJhd1JlY3QodG9BUEkocGFnZU92ZXJsYXkpLCBncmFwaGljc0NvbnRl
eHQucGxhdGZvcm1Db250ZXh0KCksIHRvQVBJKGRpcnR5UmVjdCksIG1fY2xpZW50LmJhc2UuY2xp
ZW50SW5mbyk7CisgICAgICAgIG1fY2xpZW50LmRyYXdSZWN0KHRvQVBJKCZwYWdlT3ZlcmxheSks
IGdyYXBoaWNzQ29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKSwgdG9BUEkoZGlydHlSZWN0KSwgbV9j
bGllbnQuYmFzZS5jbGllbnRJbmZvKTsKICAgICB9CiAgICAgCi0gICAgdmlydHVhbCBib29sIG1v
dXNlRXZlbnQoUGFnZU92ZXJsYXkqIHBhZ2VPdmVybGF5LCBjb25zdCBXZWJNb3VzZUV2ZW50JiBl
dmVudCkKKyAgICB2aXJ0dWFsIGJvb2wgbW91c2VFdmVudChXZWJQYWdlT3ZlcmxheSYgcGFnZU92
ZXJsYXksIGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgZXZlbnQpIG92ZXJyaWRlCiAgICAgewog
ICAgICAgICBzd2l0Y2ggKGV2ZW50LnR5cGUoKSkgewotICAgICAgICBjYXNlIFdlYkV2ZW50OjpN
b3VzZURvd246IHsKKyAgICAgICAgY2FzZSBQbGF0Zm9ybU1vdXNlRXZlbnQ6OlR5cGU6Ok1vdXNl
UHJlc3NlZDogewogICAgICAgICAgICAgaWYgKCFtX2NsaWVudC5tb3VzZURvd24pCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgICAgICByZXR1cm4gbV9jbGllbnQubW91
c2VEb3duKHRvQVBJKHBhZ2VPdmVybGF5KSwgdG9BUEkoZXZlbnQucG9zaXRpb24oKSksIHRvQVBJ
KGV2ZW50LmJ1dHRvbigpKSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKKyAgICAgICAgICAg
IHJldHVybiBtX2NsaWVudC5tb3VzZURvd24odG9BUEkoJnBhZ2VPdmVybGF5KSwgdG9BUEkoZXZl
bnQucG9zaXRpb24oKSksIHRvQVBJKGV2ZW50LmJ1dHRvbigpKSwgbV9jbGllbnQuYmFzZS5jbGll
bnRJbmZvKTsKICAgICAgICAgfQotICAgICAgICBjYXNlIFdlYkV2ZW50OjpNb3VzZVVwOiB7Cisg
ICAgICAgIGNhc2UgUGxhdGZvcm1Nb3VzZUV2ZW50OjpUeXBlOjpNb3VzZVJlbGVhc2VkOiB7CiAg
ICAgICAgICAgICBpZiAoIW1fY2xpZW50Lm1vdXNlVXApCiAgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCi0gICAgICAgICAgICByZXR1cm4gbV9jbGllbnQubW91c2VVcCh0b0FQSShwYWdl
T3ZlcmxheSksIHRvQVBJKGV2ZW50LnBvc2l0aW9uKCkpLCB0b0FQSShldmVudC5idXR0b24oKSks
IG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7CisgICAgICAgICAgICByZXR1cm4gbV9jbGllbnQu
bW91c2VVcCh0b0FQSSgmcGFnZU92ZXJsYXkpLCB0b0FQSShldmVudC5wb3NpdGlvbigpKSwgdG9B
UEkoZXZlbnQuYnV0dG9uKCkpLCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pOwogICAgICAgICB9
Ci0gICAgICAgIGNhc2UgV2ViRXZlbnQ6Ok1vdXNlTW92ZTogewotICAgICAgICAgICAgaWYgKGV2
ZW50LmJ1dHRvbigpID09IFdlYk1vdXNlRXZlbnQ6Ok5vQnV0dG9uKSB7CisgICAgICAgIGNhc2Ug
UGxhdGZvcm1Nb3VzZUV2ZW50OjpUeXBlOjpNb3VzZU1vdmVkOiB7CisgICAgICAgICAgICBpZiAo
ZXZlbnQuYnV0dG9uKCkgPT0gTW91c2VCdXR0b246Ok5vQnV0dG9uKSB7CiAgICAgICAgICAgICAg
ICAgaWYgKCFtX2NsaWVudC5tb3VzZU1vdmVkKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKLSAgICAgICAgICAgICAgICByZXR1cm4gbV9jbGllbnQubW91c2VNb3ZlZCh0b0FQ
SShwYWdlT3ZlcmxheSksIHRvQVBJKGV2ZW50LnBvc2l0aW9uKCkpLCBtX2NsaWVudC5iYXNlLmNs
aWVudEluZm8pOworICAgICAgICAgICAgICAgIHJldHVybiBtX2NsaWVudC5tb3VzZU1vdmVkKHRv
QVBJKCZwYWdlT3ZlcmxheSksIHRvQVBJKGV2ZW50LnBvc2l0aW9uKCkpLCBtX2NsaWVudC5iYXNl
LmNsaWVudEluZm8pOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAvLyBUaGlzIGlzIGEg
TW91c2VNb3ZlIGV2ZW50IHdpdGggYSBtb3VzZSBidXR0b24gcHJlc3NlZC4gQ2FsbCBtb3VzZURy
YWdnZWQuCiAgICAgICAgICAgICBpZiAoIW1fY2xpZW50Lm1vdXNlRHJhZ2dlZCkKICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgICAgIHJldHVybiBtX2NsaWVudC5tb3Vz
ZURyYWdnZWQodG9BUEkocGFnZU92ZXJsYXkpLCB0b0FQSShldmVudC5wb3NpdGlvbigpKSwgdG9B
UEkoZXZlbnQuYnV0dG9uKCkpLCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pOworICAgICAgICAg
ICAgcmV0dXJuIG1fY2xpZW50Lm1vdXNlRHJhZ2dlZCh0b0FQSSgmcGFnZU92ZXJsYXkpLCB0b0FQ
SShldmVudC5wb3NpdGlvbigpKSwgdG9BUEkoZXZlbnQuYnV0dG9uKCkpLCBtX2NsaWVudC5iYXNl
LmNsaWVudEluZm8pOwogICAgICAgICB9CiAKICAgICAgICAgZGVmYXVsdDoKQEAgLTEyNSwxOCAr
MTMyLDQzIEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgdmlydHVhbCBX
S1R5cGVSZWYgY29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZShQYWdlT3ZlcmxheSogcGFn
ZU92ZXJsYXksIFdLU3RyaW5nUmVmIGF0dHJpYnV0ZSwgV0tUeXBlUmVmIHBhcmFtZXRlcikKKyAg
ICB2aXJ0dWFsIGJvb2wgY29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVTdHJpbmdWYWx1ZUZvclBv
aW50KFdlYlBhZ2VPdmVybGF5JiBwYWdlT3ZlcmxheSwgU3RyaW5nIGF0dHJpYnV0ZSwgV2ViQ29y
ZTo6RmxvYXRQb2ludCBwYXJhbWV0ZXIsIFN0cmluZyYgdmFsdWUpIG92ZXJyaWRlCiAgICAgewog
ICAgICAgICBpZiAoIW1fYWNjZXNzaWJpbGl0eUNsaWVudC5jbGllbnQoKS5jb3B5QWNjZXNzaWJp
bGl0eUF0dHJpYnV0ZVZhbHVlKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIHJldHVy
biBtX2FjY2Vzc2liaWxpdHlDbGllbnQuY2xpZW50KCkuY29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1
dGVWYWx1ZSh0b0FQSShwYWdlT3ZlcmxheSksIGF0dHJpYnV0ZSwgcGFyYW1ldGVyLCBtX2FjY2Vz
c2liaWxpdHlDbGllbnQuY2xpZW50KCkuYmFzZS5jbGllbnRJbmZvKTsKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiB3a1R5cGUgPSBtX2Fj
Y2Vzc2liaWxpdHlDbGllbnQuY2xpZW50KCkuY29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1
ZSh0b0FQSSgmcGFnZU92ZXJsYXkpLCB0b0NvcGllZEFQSShhdHRyaWJ1dGUpLCBXS1BvaW50Q3Jl
YXRlKFdLUG9pbnRNYWtlKHBhcmFtZXRlci54KCksIHBhcmFtZXRlci55KCkpKSwgbV9hY2Nlc3Np
YmlsaXR5Q2xpZW50LmNsaWVudCgpLmJhc2UuY2xpZW50SW5mbyk7CisgICAgICAgIGlmICh0b0lt
cGwod2tUeXBlLmdldCgpKS0+dHlwZSgpICE9IEFQSTo6U3RyaW5nOjpBUElUeXBlKQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB2YWx1ZSA9IHRvV1RGU3RyaW5nKHN0YXRpY19j
YXN0PFdLU3RyaW5nUmVmPih3a1R5cGUuZ2V0KCkpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorCisgICAgdmlydHVhbCBib29sIGNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlQm9vbFZh
bHVlRm9yUG9pbnQoV2ViUGFnZU92ZXJsYXkmIHBhZ2VPdmVybGF5LCBTdHJpbmcgYXR0cmlidXRl
LCBXZWJDb3JlOjpGbG9hdFBvaW50IHBhcmFtZXRlciwgYm9vbCYgdmFsdWUpIG92ZXJyaWRlCisg
ICAgeworICAgICAgICBpZiAoIW1fYWNjZXNzaWJpbGl0eUNsaWVudC5jbGllbnQoKS5jb3B5QWNj
ZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICBXS1JldGFpblB0cjxXS1R5cGVSZWY+IHdrVHlwZSA9IG1fYWNjZXNzaWJpbGl0eUNsaWVu
dC5jbGllbnQoKS5jb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlKHRvQVBJKCZwYWdlT3Zl
cmxheSksIHRvQ29waWVkQVBJKGF0dHJpYnV0ZSksIFdLUG9pbnRDcmVhdGUoV0tQb2ludE1ha2Uo
cGFyYW1ldGVyLngoKSwgcGFyYW1ldGVyLnkoKSkpLCBtX2FjY2Vzc2liaWxpdHlDbGllbnQuY2xp
ZW50KCkuYmFzZS5jbGllbnRJbmZvKTsKKyAgICAgICAgaWYgKHRvSW1wbCh3a1R5cGUuZ2V0KCkp
LT50eXBlKCkgIT0gQVBJOjpCb29sZWFuOjpBUElUeXBlKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICB2YWx1ZSA9IFdLQm9vbGVhbkdldFZhbHVlKHN0YXRpY19jYXN0PFdLQm9v
bGVhblJlZj4od2tUeXBlLmdldCgpKSk7CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAot
ICAgIHZpcnR1YWwgV0tBcnJheVJlZiBjb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZU5hbWVzKFBh
Z2VPdmVybGF5KiBwYWdlT3ZlcmxheSwgYm9vbCBwYXJhbWVyaXplZE5hbWVzKQorICAgIHZpcnR1
YWwgVmVjdG9yPFN0cmluZz4gY29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVOYW1lcyhXZWJQYWdl
T3ZlcmxheSYgcGFnZU92ZXJsYXksIGJvb2wgcGFyYW1lcml6ZWROYW1lcykgb3ZlcnJpZGUKICAg
ICB7CisgICAgICAgIFZlY3RvcjxTdHJpbmc+IG5hbWVzOwogICAgICAgICBpZiAoIW1fYWNjZXNz
aWJpbGl0eUNsaWVudC5jbGllbnQoKS5jb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZU5hbWVzKQot
ICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIHJldHVybiBtX2FjY2Vzc2liaWxpdHlDbGll
bnQuY2xpZW50KCkuY29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVOYW1lcyh0b0FQSShwYWdlT3Zl
cmxheSksIHBhcmFtZXJpemVkTmFtZXMsIG1fYWNjZXNzaWJpbGl0eUNsaWVudC5jbGllbnQoKS5i
YXNlLmNsaWVudEluZm8pOworICAgICAgICAgICAgcmV0dXJuIG5hbWVzOworICAgICAgICBXS1Jl
dGFpblB0cjxXS0FycmF5UmVmPiB3a05hbWVzID0gbV9hY2Nlc3NpYmlsaXR5Q2xpZW50LmNsaWVu
dCgpLmNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlTmFtZXModG9BUEkoJnBhZ2VPdmVybGF5KSwg
cGFyYW1lcml6ZWROYW1lcywgbV9hY2Nlc3NpYmlsaXR5Q2xpZW50LmNsaWVudCgpLmJhc2UuY2xp
ZW50SW5mbyk7CisKKyAgICAgICAgc2l6ZV90IGNvdW50ID0gV0tBcnJheUdldFNpemUod2tOYW1l
cy5nZXQoKSk7CisgICAgICAgIGZvciAoc2l6ZV90IGsgPSAwOyBrIDwgY291bnQ7IGsrKykgewor
ICAgICAgICAgICAgV0tUeXBlUmVmIGl0ZW0gPSBXS0FycmF5R2V0SXRlbUF0SW5kZXgod2tOYW1l
cy5nZXQoKSwgayk7CisgICAgICAgICAgICBpZiAodG9JbXBsKGl0ZW0pLT50eXBlKCkgPT0gQVBJ
OjpTdHJpbmc6OkFQSVR5cGUpCisgICAgICAgICAgICAgICAgbmFtZXMuYXBwZW5kKHRvV1RGU3Ry
aW5nKHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihpdGVtKSkpOworICAgICAgICB9CisKKyAgICAg
ICAgcmV0dXJuIG5hbWVzOwogICAgIH0KICAgICAKICAgICBBUEk6OkNsaWVudDxXS0J1bmRsZVBh
Z2VPdmVybGF5QWNjZXNzaWJpbGl0eUNsaWVudEJhc2U+IG1fYWNjZXNzaWJpbGl0eUNsaWVudDsK
QEAgLTE0NCw3ICsxNzYsNyBAQCBwcml2YXRlOgogCiBXS1R5cGVJRCBXS0J1bmRsZVBhZ2VPdmVy
bGF5R2V0VHlwZUlEKCkKIHsKLSAgICByZXR1cm4gdG9BUEkoUGFnZU92ZXJsYXk6OkFQSVR5cGUp
OworICAgIHJldHVybiB0b0FQSShXZWJQYWdlT3ZlcmxheTo6QVBJVHlwZSk7CiB9CiAKIFdLQnVu
ZGxlUGFnZU92ZXJsYXlSZWYgV0tCdW5kbGVQYWdlT3ZlcmxheUNyZWF0ZShXS0J1bmRsZVBhZ2VP
dmVybGF5Q2xpZW50QmFzZSogd2tDbGllbnQpCkBAIC0xNTUsMTQgKzE4NywxNCBAQCBXS0J1bmRs
ZVBhZ2VPdmVybGF5UmVmIFdLQnVuZGxlUGFnZU92ZXJsYXlDcmVhdGUoV0tCdW5kbGVQYWdlT3Zl
cmxheUNsaWVudEJhc2UqCiAgICAgYXV0byBjbGllbnRJbXBsID0gc3RkOjptYWtlX3VuaXF1ZTxQ
YWdlT3ZlcmxheUNsaWVudEltcGw+KHdrQ2xpZW50KTsKIAogICAgIC8vIEZJWE1FOiBMb29rcyBs
aWtlIHRoaXMgbGVha3MgdGhlIGNsaWVudEltcGwuCi0gICAgcmV0dXJuIHRvQVBJKFBhZ2VPdmVy
bGF5OjpjcmVhdGUoY2xpZW50SW1wbC5yZWxlYXNlKCkpLmxlYWtSZWYoKSk7CisgICAgcmV0dXJu
IHRvQVBJKFdlYlBhZ2VPdmVybGF5OjpjcmVhdGUoKmNsaWVudEltcGwucmVsZWFzZSgpKS5sZWFr
UmVmKCkpOwogfQogCiB2b2lkIFdLQnVuZGxlUGFnZU92ZXJsYXlTZXRBY2Nlc3NpYmlsaXR5Q2xp
ZW50KFdLQnVuZGxlUGFnZU92ZXJsYXlSZWYgYnVuZGxlUGFnZU92ZXJsYXlSZWYsIFdLQnVuZGxl
UGFnZU92ZXJsYXlBY2Nlc3NpYmlsaXR5Q2xpZW50QmFzZSogY2xpZW50KQogewogICAgIGlmIChj
bGllbnQgJiYgY2xpZW50LT52ZXJzaW9uKQogICAgICAgICByZXR1cm47Ci0gICAgc3RhdGljX2Nh
c3Q8UGFnZU92ZXJsYXlDbGllbnRJbXBsKj4odG9JbXBsKGJ1bmRsZVBhZ2VPdmVybGF5UmVmKS0+
Y2xpZW50KCkpLT5zZXRBY2Nlc3NpYmlsaXR5Q2xpZW50KGNsaWVudCk7CisgICAgc3RhdGljX2Nh
c3Q8UGFnZU92ZXJsYXlDbGllbnRJbXBsKj4oJnRvSW1wbChidW5kbGVQYWdlT3ZlcmxheVJlZikt
PmNsaWVudCgpKS0+c2V0QWNjZXNzaWJpbGl0eUNsaWVudChjbGllbnQpOwogfQogCiB2b2lkIFdL
QnVuZGxlUGFnZU92ZXJsYXlTZXROZWVkc0Rpc3BsYXkoV0tCdW5kbGVQYWdlT3ZlcmxheVJlZiBi
dW5kbGVQYWdlT3ZlcmxheVJlZiwgV0tSZWN0IHJlY3QpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9tYWMvV0tXZWJQcm9jZXNzUGx1Z0lu
QnJvd3NlckNvbnRleHRDb250cm9sbGVyLm1tIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvbWFjL1dLV2ViUHJvY2Vzc1BsdWdJbkJyb3dzZXJDb250ZXh0Q29u
dHJvbGxlci5tbQppbmRleCA3ZmMwNDFmLi4wZDA5MzM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9tYWMvV0tXZWJQcm9jZXNzUGx1Z0lu
QnJvd3NlckNvbnRleHRDb250cm9sbGVyLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvQVBJL21hYy9XS1dlYlByb2Nlc3NQbHVnSW5Ccm93c2VyQ29udGV4
dENvbnRyb2xsZXIubW0KQEAgLTYwLDYgKzYwLDcgQEAKICNpbXBvcnQgPFdlYkNvcmUvRnJhbWUu
aD4KICNpbXBvcnQgPFdlYkNvcmUvSFRNTEZvcm1FbGVtZW50Lmg+CiAjaW1wb3J0IDxXZWJDb3Jl
L0hUTUxJbnB1dEVsZW1lbnQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvTWFpbkZyYW1lLmg+CiAKIHVz
aW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xp
ZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hy
b21lQ2xpZW50LmNwcAppbmRleCBjZGVjYmRhLi5iNmEyOTEwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAKKysr
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGll
bnQuY3BwCkBAIC04NDAsNyArODQwLDkgQEAgUGFzc1JlZlB0cjxXZWJDb3JlOjpTZWFyY2hQb3B1
cE1lbnU+IFdlYkNocm9tZUNsaWVudDo6Y3JlYXRlU2VhcmNoUG9wdXBNZW51KFdlYkMKIAogR3Jh
cGhpY3NMYXllckZhY3RvcnkqIFdlYkNocm9tZUNsaWVudDo6Z3JhcGhpY3NMYXllckZhY3Rvcnko
KSBjb25zdAogewotICAgIHJldHVybiBtX3BhZ2UtPmRyYXdpbmdBcmVhKCktPmdyYXBoaWNzTGF5
ZXJGYWN0b3J5KCk7CisgICAgaWYgKGF1dG8gZHJhd2luZ0FyZWEgPSBtX3BhZ2UtPmRyYXdpbmdB
cmVhKCkpCisgICAgICAgIHJldHVybiBkcmF3aW5nQXJlYS0+Z3JhcGhpY3NMYXllckZhY3Rvcnko
KTsKKyAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAogI2lmIFVTRShSRVFVRVNUX0FOSU1BVElPTl9G
UkFNRV9ESVNQTEFZX01PTklUT1IpCkBAIC04NTgsMTIgKzg2MCwxMCBAQCB2b2lkIFdlYkNocm9t
ZUNsaWVudDo6YXR0YWNoUm9vdEdyYXBoaWNzTGF5ZXIoRnJhbWUqLCBHcmFwaGljc0xheWVyKiBs
YXllcikKICAgICAgICAgbV9wYWdlLT5leGl0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoKTsK
IH0KIAotR3JhcGhpY3NMYXllciogV2ViQ2hyb21lQ2xpZW50Ojpkb2N1bWVudE92ZXJsYXlMYXll
ckZvckZyYW1lKEZyYW1lJiBmcmFtZSkKK3ZvaWQgV2ViQ2hyb21lQ2xpZW50OjphdHRhY2hWaWV3
T3ZlcmxheUdyYXBoaWNzTGF5ZXIoRnJhbWUqIGZyYW1lLCBHcmFwaGljc0xheWVyKiBncmFwaGlj
c0xheWVyKQogewotICAgIGlmICgmZnJhbWUgPT0gJm1fcGFnZS0+Y29yZVBhZ2UoKS0+bWFpbkZy
YW1lKCkpCi0gICAgICAgIHJldHVybiBtX3BhZ2UtPnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLmRv
Y3VtZW50T3ZlcmxheVJvb3RMYXllcigpOwotCi0gICAgcmV0dXJuIG51bGxwdHI7CisgICAgaWYg
KGF1dG8gZHJhd2luZ0FyZWEgPSBtX3BhZ2UtPmRyYXdpbmdBcmVhKCkpCisgICAgICAgIGRyYXdp
bmdBcmVhLT5hdHRhY2hWaWV3T3ZlcmxheUdyYXBoaWNzTGF5ZXIoZnJhbWUsIGdyYXBoaWNzTGF5
ZXIpOwogfQogCiB2b2lkIFdlYkNocm9tZUNsaWVudDo6c2V0TmVlZHNPbmVTaG90RHJhd2luZ1N5
bmNocm9uaXphdGlvbigpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaAppbmRleCBiOWRjMzJlLi5mNWM1YjI3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dl
YkNocm9tZUNsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1
cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgKQEAgLTIxNSwxMCArMjE1LDEwIEBAIHByaXZhdGU6CiAK
ICAgICB2aXJ0dWFsIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJGYWN0b3J5KiBncmFwaGljc0xheWVy
RmFjdG9yeSgpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBhdHRhY2hSb290R3Jh
cGhpY3NMYXllcihXZWJDb3JlOjpGcmFtZSosIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKSBvdmVy
cmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoVmlld092ZXJsYXlHcmFwaGljc0xheWVyKFdl
YkNvcmU6OkZyYW1lKiwgV2ViQ29yZTo6R3JhcGhpY3NMYXllciopIG92ZXJyaWRlOwogICAgIHZp
cnR1YWwgdm9pZCBzZXROZWVkc09uZVNob3REcmF3aW5nU3luY2hyb25pemF0aW9uKCkgb3ZlcnJp
ZGU7CiAgICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlQ29tcG9zaXRpbmdMYXllckZsdXNoKCkgb3Zl
cnJpZGU7CiAgICAgdmlydHVhbCBib29sIGFkanVzdExheWVyRmx1c2hUaHJvdHRsaW5nKFdlYkNv
cmU6OkxheWVyRmx1c2hUaHJvdHRsZVN0YXRlOjpGbGFncykgb3ZlcnJpZGU7Ci0gICAgdmlydHVh
bCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiBkb2N1bWVudE92ZXJsYXlMYXllckZvckZyYW1lKFdl
YkNvcmU6OkZyYW1lJikgb3ZlcnJpZGU7CiAKICNpZiBVU0UoUkVRVUVTVF9BTklNQVRJT05fRlJB
TUVfRElTUExBWV9NT05JVE9SKQogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxXZWJDb3JlOjpEaXNw
bGF5UmVmcmVzaE1vbml0b3I+IGNyZWF0ZURpc3BsYXlSZWZyZXNoTW9uaXRvcihQbGF0Zm9ybURp
c3BsYXlJRCkgY29uc3Qgb3ZlcnJpZGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckNsaWVudC5jcHAgYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckNsaWVudC5jcHAKaW5k
ZXggODU5MzU4Yi4uMDQzOGZjYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JDbGllbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50LmNwcApAQCAt
MzIsNyArMzIsOSBAQAogI2luY2x1ZGUgIldlYkluc3BlY3Rvci5oIgogI2luY2x1ZGUgIldlYlBh
Z2UuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0luc3BlY3RvckNvbnRyb2xsZXIuaD4KKyNpbmNsdWRl
IDxXZWJDb3JlL01haW5GcmFtZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUGFnZS5oPgorI2luY2x1
ZGUgPFdlYkNvcmUvUGFnZU92ZXJsYXlDb250cm9sbGVyLmg+CiAjaW5jbHVkZSA8d3RmL0N1cnJl
bnRUaW1lLmg+CiAKICNpZiBQTEFURk9STShJT1MpCkBAIC03Myw3ICs3NSw3IEBAIFdlYkluc3Bl
Y3RvckNsaWVudDo6fldlYkluc3BlY3RvckNsaWVudCgpCiAgICAgfQogCiAgICAgaWYgKG1fcGFp
bnRSZWN0T3ZlcmxheSkKLSAgICAgICAgbV9wYWdlLT51bmluc3RhbGxQYWdlT3ZlcmxheShtX3Bh
aW50UmVjdE92ZXJsYXkuZ2V0KCkpOworICAgICAgICBtX3BhZ2UtPm1haW5GcmFtZSgpLT5wYWdl
T3ZlcmxheUNvbnRyb2xsZXIoKS51bmluc3RhbGxQYWdlT3ZlcmxheShtX3BhaW50UmVjdE92ZXJs
YXkuZ2V0KCksIFBhZ2VPdmVybGF5OjpGYWRlTW9kZTo6RmFkZSk7CiB9CiAKIHZvaWQgV2ViSW5z
cGVjdG9yQ2xpZW50OjppbnNwZWN0b3JEZXN0cm95ZWQoKQpAQCAtMTExLDkgKzExMyw5IEBAIHZv
aWQgV2ViSW5zcGVjdG9yQ2xpZW50OjpoaWdobGlnaHQoKQogewogI2lmICFQTEFURk9STShJT1Mp
CiAgICAgaWYgKCFtX2hpZ2hsaWdodE92ZXJsYXkpIHsKLSAgICAgICAgUmVmUHRyPFBhZ2VPdmVy
bGF5PiBoaWdobGlnaHRPdmVybGF5ID0gUGFnZU92ZXJsYXk6OmNyZWF0ZSh0aGlzKTsKKyAgICAg
ICAgUmVmUHRyPFBhZ2VPdmVybGF5PiBoaWdobGlnaHRPdmVybGF5ID0gUGFnZU92ZXJsYXk6OmNy
ZWF0ZSgqdGhpcyk7CiAgICAgICAgIG1faGlnaGxpZ2h0T3ZlcmxheSA9IGhpZ2hsaWdodE92ZXJs
YXkuZ2V0KCk7Ci0gICAgICAgIG1fcGFnZS0+aW5zdGFsbFBhZ2VPdmVybGF5KGhpZ2hsaWdodE92
ZXJsYXkucmVsZWFzZSgpLCBQYWdlT3ZlcmxheTo6RmFkZU1vZGU6OkZhZGUpOworICAgICAgICBt
X3BhZ2UtPm1haW5GcmFtZSgpLT5wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKS5pbnN0YWxsUGFnZU92
ZXJsYXkoaGlnaGxpZ2h0T3ZlcmxheS5yZWxlYXNlKCksIFBhZ2VPdmVybGF5OjpGYWRlTW9kZTo6
RmFkZSk7CiAgICAgICAgIG1faGlnaGxpZ2h0T3ZlcmxheS0+c2V0TmVlZHNEaXNwbGF5KCk7CiAg
ICAgfSBlbHNlIHsKICAgICAgICAgbV9oaWdobGlnaHRPdmVybGF5LT5zdG9wRmFkZU91dEFuaW1h
dGlvbigpOwpAQCAtMTMwLDcgKzEzMiw3IEBAIHZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50OjpoaWRl
SGlnaGxpZ2h0KCkKIHsKICNpZiAhUExBVEZPUk0oSU9TKQogICAgIGlmIChtX2hpZ2hsaWdodE92
ZXJsYXkpCi0gICAgICAgIG1fcGFnZS0+dW5pbnN0YWxsUGFnZU92ZXJsYXkobV9oaWdobGlnaHRP
dmVybGF5LCBQYWdlT3ZlcmxheTo6RmFkZU1vZGU6OkZhZGUpOworICAgICAgICBtX3BhZ2UtPm1h
aW5GcmFtZSgpLT5wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKS51bmluc3RhbGxQYWdlT3ZlcmxheSht
X2hpZ2hsaWdodE92ZXJsYXksIFBhZ2VPdmVybGF5OjpGYWRlTW9kZTo6RmFkZSk7CiAjZWxzZQog
ICAgIG1fcGFnZS0+aGlkZUluc3BlY3RvckhpZ2hsaWdodCgpOwogI2VuZGlmCkBAIC0xMzksOCAr
MTQxLDggQEAgdm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6OmhpZGVIaWdobGlnaHQoKQogdm9pZCBX
ZWJJbnNwZWN0b3JDbGllbnQ6OnNob3dQYWludFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQog
ewogICAgIGlmICghbV9wYWludFJlY3RPdmVybGF5KSB7Ci0gICAgICAgIG1fcGFpbnRSZWN0T3Zl
cmxheSA9IFBhZ2VPdmVybGF5OjpjcmVhdGUodGhpcywgUGFnZU92ZXJsYXk6Ok92ZXJsYXlUeXBl
OjpEb2N1bWVudCk7Ci0gICAgICAgIG1fcGFnZS0+aW5zdGFsbFBhZ2VPdmVybGF5KG1fcGFpbnRS
ZWN0T3ZlcmxheSwgUGFnZU92ZXJsYXk6OkZhZGVNb2RlOjpEb05vdEZhZGUpOworICAgICAgICBt
X3BhaW50UmVjdE92ZXJsYXkgPSBQYWdlT3ZlcmxheTo6Y3JlYXRlKCp0aGlzLCBQYWdlT3Zlcmxh
eTo6T3ZlcmxheVR5cGU6OkRvY3VtZW50KTsKKyAgICAgICAgbV9wYWdlLT5tYWluRnJhbWUoKS0+
cGFnZU92ZXJsYXlDb250cm9sbGVyKCkuaW5zdGFsbFBhZ2VPdmVybGF5KG1fcGFpbnRSZWN0T3Zl
cmxheSwgUGFnZU92ZXJsYXk6OkZhZGVNb2RlOjpEb05vdEZhZGUpOwogICAgIH0KIAogICAgIGlm
ICghbV9wYWludEluZGljYXRvckxheWVyQ2xpZW50KQpAQCAtMTY3LDggKzE2OSw4IEBAIHZvaWQg
V2ViSW5zcGVjdG9yQ2xpZW50OjpzaG93UGFpbnRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkK
ICAgICAKICAgICBtX3BhaW50UmVjdExheWVycy5hZGQocGFpbnRMYXllci5nZXQoKSk7CiAKLSAg
ICBHcmFwaGljc0xheWVyKiBvdmVybGF5Um9vdExheWVyID0gbV9wYWludFJlY3RPdmVybGF5LT5s
YXllcigpOwotICAgIG92ZXJsYXlSb290TGF5ZXItPmFkZENoaWxkKHBhaW50TGF5ZXIucmVsZWFz
ZSgpKTsKKyAgICBHcmFwaGljc0xheWVyJiBvdmVybGF5Um9vdExheWVyID0gbV9wYWludFJlY3RP
dmVybGF5LT5sYXllcigpOworICAgIG92ZXJsYXlSb290TGF5ZXIuYWRkQ2hpbGQocGFpbnRMYXll
ci5yZWxlYXNlKCkpOwogfQogCiB2b2lkIFdlYkluc3BlY3RvckNsaWVudDo6YW5pbWF0aW9uRW5k
ZWRGb3JMYXllcihjb25zdCBHcmFwaGljc0xheWVyKiBsYXllcikKQEAgLTE5OCwxMyArMjAwLDEz
IEBAIHZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50OjpkaWRTZXRTZWFyY2hpbmdGb3JOb2RlKGJvb2wg
ZW5hYmxlZCkKIH0KICNlbmRpZgogCi12b2lkIFdlYkluc3BlY3RvckNsaWVudDo6cGFnZU92ZXJs
YXlEZXN0cm95ZWQoUGFnZU92ZXJsYXkqKQordm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6OnBhZ2VP
dmVybGF5RGVzdHJveWVkKFBhZ2VPdmVybGF5JikKIHsKIH0KIAotdm9pZCBXZWJJbnNwZWN0b3JD
bGllbnQ6OndpbGxNb3ZlVG9XZWJQYWdlKFBhZ2VPdmVybGF5KiwgV2ViUGFnZSogd2ViUGFnZSkK
K3ZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50Ojp3aWxsTW92ZVRvUGFnZShQYWdlT3ZlcmxheSYsIFBh
Z2UqIHBhZ2UpCiB7Ci0gICAgaWYgKHdlYlBhZ2UpCisgICAgaWYgKHBhZ2UpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIC8vIFRoZSBwYWdlIG92ZXJsYXkgaXMgbW92aW5nIGF3YXkgZnJvbSB0aGUg
d2ViIHBhZ2UsIHJlc2V0IGl0LgpAQCAtMjEyLDE2ICsyMTQsMTYgQEAgdm9pZCBXZWJJbnNwZWN0
b3JDbGllbnQ6OndpbGxNb3ZlVG9XZWJQYWdlKFBhZ2VPdmVybGF5KiwgV2ViUGFnZSogd2ViUGFn
ZSkKICAgICBtX2hpZ2hsaWdodE92ZXJsYXkgPSAwOwogfQogCi12b2lkIFdlYkluc3BlY3RvckNs
aWVudDo6ZGlkTW92ZVRvV2ViUGFnZShQYWdlT3ZlcmxheSosIFdlYlBhZ2UqKQordm9pZCBXZWJJ
bnNwZWN0b3JDbGllbnQ6OmRpZE1vdmVUb1BhZ2UoUGFnZU92ZXJsYXkmLCBQYWdlKikKIHsKIH0K
IAotdm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6OmRyYXdSZWN0KFBhZ2VPdmVybGF5KiwgV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiAvKmRp
cnR5UmVjdCovKQordm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6OmRyYXdSZWN0KFBhZ2VPdmVybGF5
JiwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBXZWJDb3JlOjpJbnRS
ZWN0JiAvKmRpcnR5UmVjdCovKQogewogICAgIG1fcGFnZS0+Y29yZVBhZ2UoKS0+aW5zcGVjdG9y
Q29udHJvbGxlcigpLmRyYXdIaWdobGlnaHQoY29udGV4dCk7CiB9CiAKLWJvb2wgV2ViSW5zcGVj
dG9yQ2xpZW50Ojptb3VzZUV2ZW50KFBhZ2VPdmVybGF5KiwgY29uc3QgV2ViTW91c2VFdmVudCYp
Citib29sIFdlYkluc3BlY3RvckNsaWVudDo6bW91c2VFdmVudChQYWdlT3ZlcmxheSYsIGNvbnN0
IFBsYXRmb3JtTW91c2VFdmVudCYpCiB7CiAgICAgcmV0dXJuIGZhbHNlOwogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JD
bGllbnQuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViSW5z
cGVjdG9yQ2xpZW50LmgKaW5kZXggNzk4Y2FjNy4uZGZjMDM4YSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JDbGllbnQuaAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3Rv
ckNsaWVudC5oCkBAIC0yOCwxNiArMjgsMTYgQEAKIAogI2lmIEVOQUJMRShJTlNQRUNUT1IpCiAK
LSNpbmNsdWRlICJQYWdlT3ZlcmxheS5oIgotCiAjaW5jbHVkZSA8V2ViQ29yZS9JbnNwZWN0b3JD
bGllbnQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0luc3BlY3RvckZvcndhcmRpbmcuaD4KKyNpbmNs
dWRlIDxXZWJDb3JlL1BhZ2VPdmVybGF5Lmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgR3JhcGhpY3NDb250ZXh0OwogY2xhc3MgR3JhcGhp
Y3NMYXllcjsKIGNsYXNzIEludFJlY3Q7CitjbGFzcyBQYWdlT3ZlcmxheTsKIH0KIAogbmFtZXNw
YWNlIFdlYktpdCB7CkBAIC00NSw3ICs0NSw3IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogY2xhc3Mg
V2ViUGFnZTsKIGNsYXNzIFJlcGFpbnRJbmRpY2F0b3JMYXllckNsaWVudDsKIAotY2xhc3MgV2Vi
SW5zcGVjdG9yQ2xpZW50IDogcHVibGljIFdlYkNvcmU6Okluc3BlY3RvckNsaWVudCwgcHJpdmF0
ZSBQYWdlT3ZlcmxheTo6Q2xpZW50IHsKK2NsYXNzIFdlYkluc3BlY3RvckNsaWVudCA6IHB1Ymxp
YyBXZWJDb3JlOjpJbnNwZWN0b3JDbGllbnQsIHByaXZhdGUgV2ViQ29yZTo6UGFnZU92ZXJsYXk6
OkNsaWVudCB7CiBmcmllbmQgY2xhc3MgUmVwYWludEluZGljYXRvckxheWVyQ2xpZW50OwogcHVi
bGljOgogICAgIFdlYkluc3BlY3RvckNsaWVudChXZWJQYWdlKik7CkBAIC03NCwxOCArNzQsMTgg
QEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgc2hvd1BhaW50UmVjdChjb25zdCBXZWJDb3Jl
OjpGbG9hdFJlY3QmKSBvdmVycmlkZTsKIAogICAgIC8vIFBhZ2VPdmVybGF5OjpDbGllbnQKLSAg
ICB2aXJ0dWFsIHZvaWQgcGFnZU92ZXJsYXlEZXN0cm95ZWQoUGFnZU92ZXJsYXkqKSBvdmVycmlk
ZTsKLSAgICB2aXJ0dWFsIHZvaWQgd2lsbE1vdmVUb1dlYlBhZ2UoUGFnZU92ZXJsYXkqLCBXZWJQ
YWdlKikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGRpZE1vdmVUb1dlYlBhZ2UoUGFnZU92
ZXJsYXkqLCBXZWJQYWdlKikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGRyYXdSZWN0KFBh
Z2VPdmVybGF5KiwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiwgY29uc3QgV2ViQ29yZTo6SW50
UmVjdCYpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgYm9vbCBtb3VzZUV2ZW50KFBhZ2VPdmVybGF5
KiwgY29uc3QgV2ViTW91c2VFdmVudCYpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBwYWdl
T3ZlcmxheURlc3Ryb3llZChXZWJDb3JlOjpQYWdlT3ZlcmxheSYpIG92ZXJyaWRlOworICAgIHZp
cnR1YWwgdm9pZCB3aWxsTW92ZVRvUGFnZShXZWJDb3JlOjpQYWdlT3ZlcmxheSYsIFdlYkNvcmU6
OlBhZ2UqKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkTW92ZVRvUGFnZShXZWJDb3Jl
OjpQYWdlT3ZlcmxheSYsIFdlYkNvcmU6OlBhZ2UqKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZv
aWQgZHJhd1JlY3QoV2ViQ29yZTo6UGFnZU92ZXJsYXkmLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQmLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29s
IG1vdXNlRXZlbnQoV2ViQ29yZTo6UGFnZU92ZXJsYXkmLCBjb25zdCBXZWJDb3JlOjpQbGF0Zm9y
bU1vdXNlRXZlbnQmKSBvdmVycmlkZTsKIAogICAgIHZvaWQgYW5pbWF0aW9uRW5kZWRGb3JMYXll
cihjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKik7CiAKICAgICBXZWJQYWdlKiBtX3BhZ2U7
Ci0gICAgUGFnZU92ZXJsYXkqIG1faGlnaGxpZ2h0T3ZlcmxheTsKKyAgICBXZWJDb3JlOjpQYWdl
T3ZlcmxheSogbV9oaWdobGlnaHRPdmVybGF5OwogICAgIAotICAgIFJlZlB0cjxQYWdlT3Zlcmxh
eT4gbV9wYWludFJlY3RPdmVybGF5OworICAgIFJlZlB0cjxXZWJDb3JlOjpQYWdlT3ZlcmxheT4g
bV9wYWludFJlY3RPdmVybGF5OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxSZXBhaW50SW5kaWNhdG9y
TGF5ZXJDbGllbnQ+IG1fcGFpbnRJbmRpY2F0b3JMYXllckNsaWVudDsKICAgICBIYXNoU2V0PFdl
YkNvcmU6OkdyYXBoaWNzTGF5ZXIqPiBtX3BhaW50UmVjdExheWVyczsgLy8gSWRlYWxseSB0aGlz
IHdvdWxkIGJlIEhhc2hTZXQ8c3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzTGF5ZXI+PiBidXQgdGhh
dCBkb2Vzbid0IHdvcmsgeWV0LiB3ZWJraXQub3JnL2IvMTM2MTY2CiB9OwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9tYWMvV2ViRWRpdG9yQ2xp
ZW50TWFjLm1tIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9tYWMv
V2ViRWRpdG9yQ2xpZW50TWFjLm1tCmluZGV4IGYzNmRkYmMuLjQ5ZDU5YmUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvbWFjL1dlYkVkaXRvckNs
aWVudE1hYy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0
L21hYy9XZWJFZGl0b3JDbGllbnRNYWMubW0KQEAgLTQ0LDYgKzQ0LDcgQEAKICNpbXBvcnQgPFdl
YkNvcmUvRm9jdXNDb250cm9sbGVyLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lLmg+CiAjaW1w
b3J0IDxXZWJDb3JlL0tleWJvYXJkRXZlbnQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvTWFpbkZyYW1l
Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+CiAjaW1wb3J0IDxXZWJDb3Jl
L1BhZ2UuaD4KICNpbXBvcnQgPFdlYkNvcmUvV2ViQ29yZU5TVVJMRXh0cmFzLmg+CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWEuaCBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYS5oCmluZGV4IGY3NGI0
ZGUuLmRiM2I4M2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9EcmF3aW5nQXJlYS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9E
cmF3aW5nQXJlYS5oCkBAIC00NSw2ICs0NSw3IEBAIGNsYXNzIE1lc3NhZ2VEZWNvZGVyOwogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBEaXNwbGF5UmVmcmVzaE1vbml0b3I7CitjbGFzcyBG
cmFtZTsKIGNsYXNzIEZyYW1lVmlldzsKIGNsYXNzIEdyYXBoaWNzTGF5ZXI7CiBjbGFzcyBHcmFw
aGljc0xheWVyRmFjdG9yeTsKQEAgLTEyMCw2ICsxMjEsOCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0
dWFsIGJvb2wgYWRqdXN0TGF5ZXJGbHVzaFRocm90dGxpbmcoV2ViQ29yZTo6TGF5ZXJGbHVzaFRo
cm90dGxlU3RhdGU6OkZsYWdzKSB7IHJldHVybiBmYWxzZTsgfQogCisgICAgdmlydHVhbCB2b2lk
IGF0dGFjaFZpZXdPdmVybGF5R3JhcGhpY3NMYXllcihXZWJDb3JlOjpGcmFtZSosIFdlYkNvcmU6
OkdyYXBoaWNzTGF5ZXIqKSB7IH0KKwogcHJvdGVjdGVkOgogICAgIERyYXdpbmdBcmVhKERyYXdp
bmdBcmVhVHlwZSwgV2ViUGFnZSYpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNwcAppbmRleCAxZTM0NjJiLi45OGFjNmFhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xs
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJv
bGxlci5jcHAKQEAgLTQwLDYgKzQwLDggQEAKICNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29u
dGV4dC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvTWFpbkZyYW1lLmg+CiAjaW5jbHVkZSA8V2ViQ29y
ZS9QYWdlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9QYWdlT3ZlcmxheUNvbnRyb2xsZXIuaD4KKyNp
bmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtTW91c2VFdmVudC5oPgogI2luY2x1ZGUgPFdlYkNvcmUv
UGx1Z2luRG9jdW1lbnQuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CkBAIC02Myw3ICs2
NSw3IEBAIHN0YXRpYyBXZWJDb3JlOjpGaW5kT3B0aW9ucyBjb3JlKEZpbmRPcHRpb25zIG9wdGlv
bnMpCiAKIEZpbmRDb250cm9sbGVyOjpGaW5kQ29udHJvbGxlcihXZWJQYWdlKiB3ZWJQYWdlKQog
ICAgIDogbV93ZWJQYWdlKHdlYlBhZ2UpCi0gICAgLCBtX2ZpbmRQYWdlT3ZlcmxheSgwKQorICAg
ICwgbV9maW5kUGFnZU92ZXJsYXkobnVsbHB0cikKICAgICAsIG1faXNTaG93aW5nRmluZEluZGlj
YXRvcihmYWxzZSkKICAgICAsIG1fZm91bmRTdHJpbmdNYXRjaEluZGV4KC0xKQogewpAQCAtMTgy
LDEyICsxODQsMTIgQEAgdm9pZCBGaW5kQ29udHJvbGxlcjo6dXBkYXRlRmluZFVJQWZ0ZXJQYWdl
U2Nyb2xsKGJvb2wgZm91bmQsIGNvbnN0IFN0cmluZyYgc3RyaW4KIAogICAgIGlmICghc2hvdWxk
U2hvd092ZXJsYXkpIHsKICAgICAgICAgaWYgKG1fZmluZFBhZ2VPdmVybGF5KQotICAgICAgICAg
ICAgbV93ZWJQYWdlLT51bmluc3RhbGxQYWdlT3ZlcmxheShtX2ZpbmRQYWdlT3ZlcmxheSwgUGFn
ZU92ZXJsYXk6OkZhZGVNb2RlOjpGYWRlKTsKKyAgICAgICAgICAgIG1fd2ViUGFnZS0+bWFpbkZy
YW1lKCktPnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLnVuaW5zdGFsbFBhZ2VPdmVybGF5KG1fZmlu
ZFBhZ2VPdmVybGF5LCBQYWdlT3ZlcmxheTo6RmFkZU1vZGU6OkZhZGUpOwogICAgIH0gZWxzZSB7
CiAgICAgICAgIGlmICghbV9maW5kUGFnZU92ZXJsYXkpIHsKLSAgICAgICAgICAgIFJlZlB0cjxQ
YWdlT3ZlcmxheT4gZmluZFBhZ2VPdmVybGF5ID0gUGFnZU92ZXJsYXk6OmNyZWF0ZSh0aGlzKTsK
KyAgICAgICAgICAgIFJlZlB0cjxQYWdlT3ZlcmxheT4gZmluZFBhZ2VPdmVybGF5ID0gUGFnZU92
ZXJsYXk6OmNyZWF0ZSgqdGhpcyk7CiAgICAgICAgICAgICBtX2ZpbmRQYWdlT3ZlcmxheSA9IGZp
bmRQYWdlT3ZlcmxheS5nZXQoKTsKLSAgICAgICAgICAgIG1fd2ViUGFnZS0+aW5zdGFsbFBhZ2VP
dmVybGF5KGZpbmRQYWdlT3ZlcmxheS5yZWxlYXNlKCksIFBhZ2VPdmVybGF5OjpGYWRlTW9kZTo6
RmFkZSk7CisgICAgICAgICAgICBtX3dlYlBhZ2UtPm1haW5GcmFtZSgpLT5wYWdlT3ZlcmxheUNv
bnRyb2xsZXIoKS5pbnN0YWxsUGFnZU92ZXJsYXkoZmluZFBhZ2VPdmVybGF5LnJlbGVhc2UoKSwg
UGFnZU92ZXJsYXk6OkZhZGVNb2RlOjpGYWRlKTsKICAgICAgICAgfQogICAgICAgICBtX2ZpbmRQ
YWdlT3ZlcmxheS0+c2V0TmVlZHNEaXNwbGF5KCk7CiAgICAgfQpAQCAtMzMwLDcgKzMzMiw3IEBA
IHZvaWQgRmluZENvbnRyb2xsZXI6OmhpZGVGaW5kVUkoKQogewogICAgIG1fZmluZE1hdGNoZXMu
Y2xlYXIoKTsKICAgICBpZiAobV9maW5kUGFnZU92ZXJsYXkpCi0gICAgICAgIG1fd2ViUGFnZS0+
dW5pbnN0YWxsUGFnZU92ZXJsYXkobV9maW5kUGFnZU92ZXJsYXksIFBhZ2VPdmVybGF5OjpGYWRl
TW9kZTo6RmFkZSk7CisgICAgICAgIG1fd2ViUGFnZS0+bWFpbkZyYW1lKCktPnBhZ2VPdmVybGF5
Q29udHJvbGxlcigpLnVuaW5zdGFsbFBhZ2VPdmVybGF5KG1fZmluZFBhZ2VPdmVybGF5LCBQYWdl
T3ZlcmxheTo6RmFkZU1vZGU6OkZhZGUpOwogCiAgICAgUGx1Z2luVmlldyogcGx1Z2luVmlldyA9
IHBsdWdpblZpZXdGb3JGcmFtZShtX3dlYlBhZ2UtPm1haW5GcmFtZSgpKTsKICAgICAKQEAgLTQz
OSwyMCArNDQxLDIwIEBAIFZlY3RvcjxJbnRSZWN0PiBGaW5kQ29udHJvbGxlcjo6cmVjdHNGb3JU
ZXh0TWF0Y2hlcygpCiAgICAgcmV0dXJuIHJlY3RzOwogfQogCi12b2lkIEZpbmRDb250cm9sbGVy
OjpwYWdlT3ZlcmxheURlc3Ryb3llZChQYWdlT3ZlcmxheSopCit2b2lkIEZpbmRDb250cm9sbGVy
OjpwYWdlT3ZlcmxheURlc3Ryb3llZChQYWdlT3ZlcmxheSYpCiB7CiB9CiAKLXZvaWQgRmluZENv
bnRyb2xsZXI6OndpbGxNb3ZlVG9XZWJQYWdlKFBhZ2VPdmVybGF5KiwgV2ViUGFnZSogd2ViUGFn
ZSkKK3ZvaWQgRmluZENvbnRyb2xsZXI6OndpbGxNb3ZlVG9QYWdlKFBhZ2VPdmVybGF5JiwgUGFn
ZSogcGFnZSkKIHsKLSAgICBpZiAod2ViUGFnZSkKKyAgICBpZiAocGFnZSkKICAgICAgICAgcmV0
dXJuOwogCiAgICAgQVNTRVJUKG1fZmluZFBhZ2VPdmVybGF5KTsKICAgICBtX2ZpbmRQYWdlT3Zl
cmxheSA9IDA7CiB9CiAgICAgCi12b2lkIEZpbmRDb250cm9sbGVyOjpkaWRNb3ZlVG9XZWJQYWdl
KFBhZ2VPdmVybGF5KiwgV2ViUGFnZSopCit2b2lkIEZpbmRDb250cm9sbGVyOjpkaWRNb3ZlVG9Q
YWdlKFBhZ2VPdmVybGF5JiwgUGFnZSopCiB7CiB9CiAKQEAgLTQ2OCw3ICs0NzAsNyBAQCBjb25z
dCBmbG9hdCBzaGFkb3dCbHVyUmFkaXVzID0gMTsKIGNvbnN0IGZsb2F0IHNoYWRvd0NvbG9yQWxw
aGEgPSAwLjU7CiAjZW5kaWYKIAotdm9pZCBGaW5kQ29udHJvbGxlcjo6ZHJhd1JlY3QoUGFnZU92
ZXJsYXkqLCBHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgSW50UmVjdCYg
ZGlydHlSZWN0KQordm9pZCBGaW5kQ29udHJvbGxlcjo6ZHJhd1JlY3QoUGFnZU92ZXJsYXkmLCBH
cmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgSW50UmVjdCYgZGlydHlSZWN0
KQogewogICAgIENvbG9yIG92ZXJsYXlCYWNrZ3JvdW5kQ29sb3IoMC4xZiwgMC4xZiwgMC4xZiwg
MC4yNWYpOwogCkBAIC01MDYsOSArNTA4LDkgQEAgdm9pZCBGaW5kQ29udHJvbGxlcjo6ZHJhd1Jl
Y3QoUGFnZU92ZXJsYXkqLCBHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgY28KICAg
ICB9CiB9CiAKLWJvb2wgRmluZENvbnRyb2xsZXI6Om1vdXNlRXZlbnQoUGFnZU92ZXJsYXkqLCBj
b25zdCBXZWJNb3VzZUV2ZW50JiBtb3VzZUV2ZW50KQorYm9vbCBGaW5kQ29udHJvbGxlcjo6bW91
c2VFdmVudChQYWdlT3ZlcmxheSYsIGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgbW91c2VFdmVu
dCkKIHsKLSAgICBpZiAobW91c2VFdmVudC50eXBlKCkgPT0gV2ViRXZlbnQ6Ok1vdXNlRG93bikK
KyAgICBpZiAobW91c2VFdmVudC50eXBlKCkgPT0gUGxhdGZvcm1FdmVudDo6TW91c2VQcmVzc2Vk
KQogICAgICAgICBoaWRlRmluZFVJKCk7CiAKICAgICByZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuaCBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5oCmluZGV4IDI4
MDYzZmMuLjkwNWVkMWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9GaW5kQ29udHJvbGxlci5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9GaW5kQ29udHJvbGxlci5oCkBAIC0yNiwxMCArMjYsMTAgQEAKICNpZm5kZWYgRmluZENv
bnRyb2xsZXJfaAogI2RlZmluZSBGaW5kQ29udHJvbGxlcl9oCiAKLSNpbmNsdWRlICJQYWdlT3Zl
cmxheS5oIgogI2luY2x1ZGUgIlNoYXJlYWJsZUJpdG1hcC5oIgogI2luY2x1ZGUgIldlYkZpbmRP
cHRpb25zLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9JbnRSZWN0Lmg+CisjaW5jbHVkZSA8V2ViQ29y
ZS9QYWdlT3ZlcmxheS5oPgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3Rm
L05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgpAQCAtNDUsMTAgKzQ1LDkg
QEAgY2xhc3MgUmFuZ2U7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1jbGFzcyBQYWdlT3Zlcmxh
eTsKIGNsYXNzIFdlYlBhZ2U7CiAKLWNsYXNzIEZpbmRDb250cm9sbGVyIDogcHJpdmF0ZSBQYWdl
T3ZlcmxheTo6Q2xpZW50IHsKK2NsYXNzIEZpbmRDb250cm9sbGVyIDogcHJpdmF0ZSBXZWJDb3Jl
OjpQYWdlT3ZlcmxheTo6Q2xpZW50IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShGaW5kQ29u
dHJvbGxlcik7CiAKIHB1YmxpYzoKQEAgLTcxLDExICs3MCwxMSBAQCBwdWJsaWM6CiAKIHByaXZh
dGU6CiAgICAgLy8gUGFnZU92ZXJsYXk6OkNsaWVudC4KLSAgICB2aXJ0dWFsIHZvaWQgcGFnZU92
ZXJsYXlEZXN0cm95ZWQoUGFnZU92ZXJsYXkqKTsKLSAgICB2aXJ0dWFsIHZvaWQgd2lsbE1vdmVU
b1dlYlBhZ2UoUGFnZU92ZXJsYXkqLCBXZWJQYWdlKik7Ci0gICAgdmlydHVhbCB2b2lkIGRpZE1v
dmVUb1dlYlBhZ2UoUGFnZU92ZXJsYXkqLCBXZWJQYWdlKik7Ci0gICAgdmlydHVhbCBib29sIG1v
dXNlRXZlbnQoUGFnZU92ZXJsYXkqLCBjb25zdCBXZWJNb3VzZUV2ZW50Jik7Ci0gICAgdmlydHVh
bCB2b2lkIGRyYXdSZWN0KFBhZ2VPdmVybGF5KiwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Jiwg
Y29uc3QgV2ViQ29yZTo6SW50UmVjdCYgZGlydHlSZWN0KTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFn
ZU92ZXJsYXlEZXN0cm95ZWQoV2ViQ29yZTo6UGFnZU92ZXJsYXkmKTsKKyAgICB2aXJ0dWFsIHZv
aWQgd2lsbE1vdmVUb1BhZ2UoV2ViQ29yZTo6UGFnZU92ZXJsYXkmLCBXZWJDb3JlOjpQYWdlKik7
CisgICAgdmlydHVhbCB2b2lkIGRpZE1vdmVUb1BhZ2UoV2ViQ29yZTo6UGFnZU92ZXJsYXkmLCBX
ZWJDb3JlOjpQYWdlKik7CisgICAgdmlydHVhbCBib29sIG1vdXNlRXZlbnQoV2ViQ29yZTo6UGFn
ZU92ZXJsYXkmLCBjb25zdCBXZWJDb3JlOjpQbGF0Zm9ybU1vdXNlRXZlbnQmKTsKKyAgICB2aXJ0
dWFsIHZvaWQgZHJhd1JlY3QoV2ViQ29yZTo6UGFnZU92ZXJsYXkmLCBXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQmLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBkaXJ0eVJlY3QpOwogCiAgICAgVmVj
dG9yPFdlYkNvcmU6OkludFJlY3Q+IHJlY3RzRm9yVGV4dE1hdGNoZXMoKTsKICAgICBib29sIGdl
dEZpbmRJbmRpY2F0b3JCaXRtYXBBbmRSZWN0KFdlYkNvcmU6OkZyYW1lJiwgU2hhcmVhYmxlQml0
bWFwOjpIYW5kbGUmLCBXZWJDb3JlOjpJbnRSZWN0JiBzZWxlY3Rpb25SZWN0KTsKQEAgLTg4LDcg
Kzg3LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGRpZEhpZGVGaW5kSW5kaWNhdG9yKCk7CiAKICAg
ICBXZWJQYWdlKiBtX3dlYlBhZ2U7Ci0gICAgUGFnZU92ZXJsYXkqIG1fZmluZFBhZ2VPdmVybGF5
OworICAgIFdlYkNvcmU6OlBhZ2VPdmVybGF5KiBtX2ZpbmRQYWdlT3ZlcmxheTsKIAogICAgIC8v
IFdoZXRoZXIgdGhlIFVJIHByb2Nlc3MgaXMgc2hvd2luZyB0aGUgZmluZCBpbmRpY2F0b3IuIE5v
dGUgdGhhdCB0aGlzIGNhbiBiZSB0cnVlIGV2ZW4gaWYKICAgICAvLyB0aGUgZmluZCBpbmRpY2F0
b3IgaXNuJ3Qgc2hvd2luZywgYnV0IGl0IHdpbGwgbmV2ZXIgYmUgZmFsc2Ugd2hlbiBpdCBpcyBz
aG93aW5nLgpAQCAtOTksNyArOTgsNyBAQCBwcml2YXRlOgogICAgIGludCBtX2ZvdW5kU3RyaW5n
TWF0Y2hJbmRleDsKIAogI2lmIFBMQVRGT1JNKElPUykKLSAgICBSZWZQdHI8UGFnZU92ZXJsYXk+
IG1fZmluZEluZGljYXRvck92ZXJsYXk7CisgICAgUmVmUHRyPFdlYkNvcmU6OlBhZ2VPdmVybGF5
PiBtX2ZpbmRJbmRpY2F0b3JPdmVybGF5OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxGaW5kSW5kaWNh
dG9yT3ZlcmxheUNsaWVudElPUz4gbV9maW5kSW5kaWNhdG9yT3ZlcmxheUNsaWVudDsKICNlbmRp
ZgogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9MYXll
clRyZWVIb3N0LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVl
SG9zdC5oCmluZGV4IDNmZDQ5NTQuLjY0ZWVjNTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVIb3N0LmgKKysrIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUhvc3QuaApAQCAtNDcsNyArNDcsNiBAQCBjbGFz
cyBHcmFwaGljc0xheWVyRmFjdG9yeTsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLWNsYXNzIFBh
Z2VPdmVybGF5OwogY2xhc3MgVXBkYXRlSW5mbzsKIGNsYXNzIFdlYlBhZ2U7CiAKQEAgLTcyLDEx
ICs3MSw2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZGV2aWNlT3JQYWdlU2NhbGVGYWN0
b3JDaGFuZ2VkKCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBwYWdlQmFja2dyb3VuZFRyYW5zcGFy
ZW5jeUNoYW5nZWQoKSA9IDA7CiAKLSAgICB2aXJ0dWFsIHZvaWQgZGlkSW5zdGFsbFBhZ2VPdmVy
bGF5KFBhZ2VPdmVybGF5KikgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGRpZFVuaW5zdGFsbFBhZ2VP
dmVybGF5KFBhZ2VPdmVybGF5KikgeyB9Ci0gICAgdmlydHVhbCB2b2lkIHNldFBhZ2VPdmVybGF5
TmVlZHNEaXNwbGF5KFBhZ2VPdmVybGF5KiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpIHsgfQot
ICAgIHZpcnR1YWwgdm9pZCBzZXRQYWdlT3ZlcmxheU9wYWNpdHkoUGFnZU92ZXJsYXkqLCBmbG9h
dCkgeyB9Ci0KICAgICB2aXJ0dWFsIHZvaWQgcGF1c2VSZW5kZXJpbmcoKSB7IH0KICAgICB2aXJ0
dWFsIHZvaWQgcmVzdW1lUmVuZGVyaW5nKCkgeyB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9QYWdlT3ZlcmxheS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvUGFnZU92ZXJsYXkuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCA4ZDg4MWI2Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9QYWdlT3ZlcmxheS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyNTEgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJQYWdlT3ZlcmxheS5o
IgotCi0jaW5jbHVkZSAiV2ViUGFnZS5oIgotI2luY2x1ZGUgIldlYlByb2Nlc3MuaCIKLSNpbmNs
dWRlIDxXZWJDb3JlL0ZyYW1lVmlldy5oPgotI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250
ZXh0Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9NYWluRnJhbWUuaD4KLSNpbmNsdWRlIDxXZWJDb3Jl
L1BhZ2UuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1Njcm9sbGJhclRoZW1lLmg+Ci0jaW5jbHVkZSA8
d3RmL0N1cnJlbnRUaW1lLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1uYW1lc3Bh
Y2UgV2ViS2l0IHsKLQotc3RhdGljIGNvbnN0IGRvdWJsZSBmYWRlQW5pbWF0aW9uRHVyYXRpb24g
PSAwLjI7Ci1zdGF0aWMgY29uc3QgZG91YmxlIGZhZGVBbmltYXRpb25GcmFtZVJhdGUgPSAzMDsK
LQotUGFzc1JlZlB0cjxQYWdlT3ZlcmxheT4gUGFnZU92ZXJsYXk6OmNyZWF0ZShDbGllbnQqIGNs
aWVudCwgT3ZlcmxheVR5cGUgb3ZlcmxheVR5cGUpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBQYWdlT3ZlcmxheShjbGllbnQsIG92ZXJsYXlUeXBlKSk7Ci19Ci0KLVBhZ2VPdmVybGF5OjpQ
YWdlT3ZlcmxheShDbGllbnQqIGNsaWVudCwgT3ZlcmxheVR5cGUgb3ZlcmxheVR5cGUpCi0gICAg
OiBtX2NsaWVudChjbGllbnQpCi0gICAgLCBtX3dlYlBhZ2UobnVsbHB0cikKLSAgICAsIG1fZmFk
ZUFuaW1hdGlvblRpbWVyKFJ1bkxvb3A6Om1haW4oKSwgdGhpcywgJlBhZ2VPdmVybGF5OjpmYWRl
QW5pbWF0aW9uVGltZXJGaXJlZCkKLSAgICAsIG1fZmFkZUFuaW1hdGlvblN0YXJ0VGltZSgwKQot
ICAgICwgbV9mYWRlQW5pbWF0aW9uRHVyYXRpb24oZmFkZUFuaW1hdGlvbkR1cmF0aW9uKQotICAg
ICwgbV9mYWRlQW5pbWF0aW9uVHlwZShOb0FuaW1hdGlvbikKLSAgICAsIG1fZnJhY3Rpb25GYWRl
ZEluKDEpCi0gICAgLCBtX292ZXJsYXlUeXBlKG92ZXJsYXlUeXBlKQotICAgICwgbV9iYWNrZ3Jv
dW5kQ29sb3IoQ29sb3I6OnRyYW5zcGFyZW50KQotewotfQotCi1QYWdlT3ZlcmxheTo6flBhZ2VP
dmVybGF5KCkKLXsKLX0KLQotSW50UmVjdCBQYWdlT3ZlcmxheTo6Ym91bmRzKCkgY29uc3QKLXsK
LSAgICBpZiAoIW1fb3ZlcnJpZGVGcmFtZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBJbnRS
ZWN0KEludFBvaW50KCksIG1fb3ZlcnJpZGVGcmFtZS5zaXplKCkpOwotCi0gICAgRnJhbWVWaWV3
KiBmcmFtZVZpZXcgPSBtX3dlYlBhZ2UtPm1haW5GcmFtZVZpZXcoKTsKLQotICAgIHN3aXRjaCAo
bV9vdmVybGF5VHlwZSkgewotICAgIGNhc2UgT3ZlcmxheVR5cGU6OlZpZXc6IHsKLSAgICAgICAg
aW50IHdpZHRoID0gZnJhbWVWaWV3LT53aWR0aCgpOwotICAgICAgICBpbnQgaGVpZ2h0ID0gZnJh
bWVWaWV3LT5oZWlnaHQoKTsKLQotICAgICAgICBpZiAoIVNjcm9sbGJhclRoZW1lOjp0aGVtZSgp
LT51c2VzT3ZlcmxheVNjcm9sbGJhcnMoKSkgewotICAgICAgICAgICAgaWYgKGZyYW1lVmlldy0+
dmVydGljYWxTY3JvbGxiYXIoKSkKLSAgICAgICAgICAgICAgICB3aWR0aCAtPSBmcmFtZVZpZXct
PnZlcnRpY2FsU2Nyb2xsYmFyKCktPndpZHRoKCk7Ci0gICAgICAgICAgICBpZiAoZnJhbWVWaWV3
LT5ob3Jpem9udGFsU2Nyb2xsYmFyKCkpCi0gICAgICAgICAgICAgICAgaGVpZ2h0IC09IGZyYW1l
Vmlldy0+aG9yaXpvbnRhbFNjcm9sbGJhcigpLT5oZWlnaHQoKTsKLSAgICAgICAgfQotICAgICAg
ICByZXR1cm4gSW50UmVjdCgwLCAwLCB3aWR0aCwgaGVpZ2h0KTsKLSAgICB9Ci0gICAgY2FzZSBP
dmVybGF5VHlwZTo6RG9jdW1lbnQ6Ci0gICAgICAgIHJldHVybiBJbnRSZWN0KEludFBvaW50KCks
IGZyYW1lVmlldy0+Y29udGVudHNTaXplKCkpOwotICAgIH07Ci0KLSAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKLSAgICByZXR1cm4gSW50UmVjdChJbnRQb2ludCgpLCBmcmFtZVZpZXctPmNvbnRl
bnRzU2l6ZSgpKTsKLX0KLQotSW50UmVjdCBQYWdlT3ZlcmxheTo6ZnJhbWUoKSBjb25zdAotewot
ICAgIGlmICghbV9vdmVycmlkZUZyYW1lLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIG1fb3Zl
cnJpZGVGcmFtZTsKLQotICAgIHJldHVybiBib3VuZHMoKTsKLX0KLQotdm9pZCBQYWdlT3Zlcmxh
eTo6c2V0RnJhbWUoSW50UmVjdCBmcmFtZSkKLXsKLSAgICBpZiAobV9vdmVycmlkZUZyYW1lID09
IGZyYW1lKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX292ZXJyaWRlRnJhbWUgPSBmcmFtZTsK
LQotICAgIGlmIChtX3dlYlBhZ2UpCi0gICAgICAgIG1fd2ViUGFnZS0+cGFnZU92ZXJsYXlDb250
cm9sbGVyKCkuZGlkQ2hhbmdlT3ZlcmxheUZyYW1lKCp0aGlzKTsKLX0KLQotdm9pZCBQYWdlT3Zl
cmxheTo6c2V0QmFja2dyb3VuZENvbG9yKFJHQkEzMiBiYWNrZ3JvdW5kQ29sb3IpCi17Ci0gICAg
aWYgKG1fYmFja2dyb3VuZENvbG9yID09IGJhY2tncm91bmRDb2xvcikKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgbV9iYWNrZ3JvdW5kQ29sb3IgPSBiYWNrZ3JvdW5kQ29sb3I7Ci0KLSAgICBpZiAo
bV93ZWJQYWdlKQotICAgICAgICBtX3dlYlBhZ2UtPnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLmRp
ZENoYW5nZU92ZXJsYXlCYWNrZ3JvdW5kQ29sb3IoKnRoaXMpOwotfQotCi12b2lkIFBhZ2VPdmVy
bGF5OjpzZXRQYWdlKFdlYlBhZ2UqIHdlYlBhZ2UpCi17Ci0gICAgbV9jbGllbnQtPndpbGxNb3Zl
VG9XZWJQYWdlKHRoaXMsIHdlYlBhZ2UpOwotICAgIG1fd2ViUGFnZSA9IHdlYlBhZ2U7Ci0gICAg
bV9jbGllbnQtPmRpZE1vdmVUb1dlYlBhZ2UodGhpcywgd2ViUGFnZSk7Ci0KLSAgICBtX2ZhZGVB
bmltYXRpb25UaW1lci5zdG9wKCk7Ci19Ci0KLXZvaWQgUGFnZU92ZXJsYXk6OnNldE5lZWRzRGlz
cGxheShjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpCi17Ci0gICAgaWYgKCFtX3dlYlBhZ2UpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIG1fd2ViUGFnZS0+cGFnZU92ZXJsYXlDb250cm9sbGVyKCku
c2V0UGFnZU92ZXJsYXlPcGFjaXR5KCp0aGlzLCBtX2ZyYWN0aW9uRmFkZWRJbik7Ci0gICAgbV93
ZWJQYWdlLT5wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKS5zZXRQYWdlT3ZlcmxheU5lZWRzRGlzcGxh
eSgqdGhpcywgZGlydHlSZWN0KTsKLX0KLQotdm9pZCBQYWdlT3ZlcmxheTo6c2V0TmVlZHNEaXNw
bGF5KCkKLXsKLSAgICBzZXROZWVkc0Rpc3BsYXkoYm91bmRzKCkpOwotfQotCi12b2lkIFBhZ2VP
dmVybGF5OjpkcmF3UmVjdChHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgY29uc3Qg
SW50UmVjdCYgZGlydHlSZWN0KQotewotICAgIC8vIElmIHRoZSBkaXJ0eSByZWN0IGlzIG91dHNp
ZGUgdGhlIGJvdW5kcywgaWdub3JlIGl0LgotICAgIEludFJlY3QgcGFpbnRSZWN0ID0gaW50ZXJz
ZWN0aW9uKGRpcnR5UmVjdCwgYm91bmRzKCkpOwotICAgIGlmIChwYWludFJlY3QuaXNFbXB0eSgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRl
U2F2ZXIoZ3JhcGhpY3NDb250ZXh0KTsKLSAgICBtX2NsaWVudC0+ZHJhd1JlY3QodGhpcywgZ3Jh
cGhpY3NDb250ZXh0LCBwYWludFJlY3QpOwotfQotICAgIAotYm9vbCBQYWdlT3ZlcmxheTo6bW91
c2VFdmVudChjb25zdCBXZWJNb3VzZUV2ZW50JiBtb3VzZUV2ZW50KQotewotICAgIEludFBvaW50
IG1vdXNlUG9zaXRpb25Jbk92ZXJsYXlDb29yZGluYXRlcyhtb3VzZUV2ZW50LnBvc2l0aW9uKCkp
OwotCi0gICAgaWYgKG1fb3ZlcmxheVR5cGUgPT0gUGFnZU92ZXJsYXk6Ok92ZXJsYXlUeXBlOjpE
b2N1bWVudCkKLSAgICAgICAgbW91c2VQb3NpdGlvbkluT3ZlcmxheUNvb3JkaW5hdGVzID0gbV93
ZWJQYWdlLT5jb3JlUGFnZSgpLT5tYWluRnJhbWUoKS52aWV3KCktPnJvb3RWaWV3VG9Db250ZW50
cyhtb3VzZVBvc2l0aW9uSW5PdmVybGF5Q29vcmRpbmF0ZXMpOwotCi0gICAgLy8gSWdub3JlIGV2
ZW50cyBvdXRzaWRlIHRoZSBib3VuZHMuCi0gICAgaWYgKCFib3VuZHMoKS5jb250YWlucyhtb3Vz
ZVBvc2l0aW9uSW5PdmVybGF5Q29vcmRpbmF0ZXMpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICByZXR1cm4gbV9jbGllbnQtPm1vdXNlRXZlbnQodGhpcywgbW91c2VFdmVudCk7Ci19Ci0K
LXZvaWQgUGFnZU92ZXJsYXk6OmRpZFNjcm9sbEZyYW1lKEZyYW1lKiBmcmFtZSkKLXsKLSAgICBt
X2NsaWVudC0+ZGlkU2Nyb2xsRnJhbWUodGhpcywgZnJhbWUpOwotfQotCi1XS1R5cGVSZWYgUGFn
ZU92ZXJsYXk6OmNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWUoV0tTdHJpbmdSZWYgYXR0
cmlidXRlLCBXS1R5cGVSZWYgcGFyYW1ldGVyKQotewotICAgIHJldHVybiBtX2NsaWVudC0+Y29w
eUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZSh0aGlzLCBhdHRyaWJ1dGUsIHBhcmFtZXRlcik7
Ci19Ci0KLVdLQXJyYXlSZWYgUGFnZU92ZXJsYXk6OmNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRl
TmFtZXMoYm9vbCBwYXJhbWV0ZXJpemVkTmFtZXMpCi17Ci0gICAgcmV0dXJuIG1fY2xpZW50LT5j
b3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZU5hbWVzKHRoaXMsIHBhcmFtZXRlcml6ZWROYW1lcyk7
Ci19Ci0KLXZvaWQgUGFnZU92ZXJsYXk6OnN0YXJ0RmFkZUluQW5pbWF0aW9uKCkKLXsKLSAgICBt
X2ZyYWN0aW9uRmFkZWRJbiA9IDA7Ci0gICAgbV9mYWRlQW5pbWF0aW9uVHlwZSA9IEZhZGVJbkFu
aW1hdGlvbjsKLQotICAgIHN0YXJ0RmFkZUFuaW1hdGlvbigpOwotfQotCi12b2lkIFBhZ2VPdmVy
bGF5OjpzdGFydEZhZGVPdXRBbmltYXRpb24oKQotewotICAgIG1fZnJhY3Rpb25GYWRlZEluID0g
MTsKLSAgICBtX2ZhZGVBbmltYXRpb25UeXBlID0gRmFkZU91dEFuaW1hdGlvbjsKLQotICAgIHN0
YXJ0RmFkZUFuaW1hdGlvbigpOwotfQotCi12b2lkIFBhZ2VPdmVybGF5OjpzdG9wRmFkZU91dEFu
aW1hdGlvbigpCi17Ci0gICAgbV9mcmFjdGlvbkZhZGVkSW4gPSAxLjA7Ci0gICAgbV9mYWRlQW5p
bWF0aW9uVGltZXIuc3RvcCgpOwotfQotCi12b2lkIFBhZ2VPdmVybGF5OjpzdGFydEZhZGVBbmlt
YXRpb24oKQotewotICAgIG1fZmFkZUFuaW1hdGlvblN0YXJ0VGltZSA9IGN1cnJlbnRUaW1lKCk7
Ci0gICAgbV9mYWRlQW5pbWF0aW9uVGltZXIuc3RhcnRSZXBlYXRpbmcoMSAvIGZhZGVBbmltYXRp
b25GcmFtZVJhdGUpOwotfQotCi12b2lkIFBhZ2VPdmVybGF5OjpmYWRlQW5pbWF0aW9uVGltZXJG
aXJlZCgpCi17Ci0gICAgZmxvYXQgYW5pbWF0aW9uUHJvZ3Jlc3MgPSAoY3VycmVudFRpbWUoKSAt
IG1fZmFkZUFuaW1hdGlvblN0YXJ0VGltZSkgLyBtX2ZhZGVBbmltYXRpb25EdXJhdGlvbjsKLQot
ICAgIGlmIChhbmltYXRpb25Qcm9ncmVzcyA+PSAxLjApCi0gICAgICAgIGFuaW1hdGlvblByb2dy
ZXNzID0gMS4wOwotCi0gICAgZG91YmxlIHNpbmUgPSBzaW4ocGlPdmVyVHdvRmxvYXQgKiBhbmlt
YXRpb25Qcm9ncmVzcyk7Ci0gICAgZmxvYXQgZmFkZUFuaW1hdGlvblZhbHVlID0gc2luZSAqIHNp
bmU7Ci0KLSAgICBtX2ZyYWN0aW9uRmFkZWRJbiA9IChtX2ZhZGVBbmltYXRpb25UeXBlID09IEZh
ZGVJbkFuaW1hdGlvbikgPyBmYWRlQW5pbWF0aW9uVmFsdWUgOiAxIC0gZmFkZUFuaW1hdGlvblZh
bHVlOwotICAgIG1fd2ViUGFnZS0+cGFnZU92ZXJsYXlDb250cm9sbGVyKCkuc2V0UGFnZU92ZXJs
YXlPcGFjaXR5KCp0aGlzLCBtX2ZyYWN0aW9uRmFkZWRJbik7Ci0KLSAgICBpZiAoYW5pbWF0aW9u
UHJvZ3Jlc3MgPT0gMS4wKSB7Ci0gICAgICAgIG1fZmFkZUFuaW1hdGlvblRpbWVyLnN0b3AoKTsK
LQotICAgICAgICBib29sIHdhc0ZhZGluZ091dCA9IG1fZmFkZUFuaW1hdGlvblR5cGUgPT0gRmFk
ZU91dEFuaW1hdGlvbjsKLSAgICAgICAgbV9mYWRlQW5pbWF0aW9uVHlwZSA9IE5vQW5pbWF0aW9u
OwotCi0gICAgICAgIC8vIElmIHRoaXMgd2FzIGEgZmFkZSBvdXQsIGdvIGFoZWFkIGFuZCB1bmlu
c3RhbGwgdGhlIHBhZ2Ugb3ZlcmxheS4KLSAgICAgICAgaWYgKHdhc0ZhZGluZ091dCkKLSAgICAg
ICAgICAgIG1fd2ViUGFnZS0+dW5pbnN0YWxsUGFnZU92ZXJsYXkodGhpcywgUGFnZU92ZXJsYXk6
OkZhZGVNb2RlOjpEb05vdEZhZGUpOwotICAgIH0KLX0KLQotdm9pZCBQYWdlT3ZlcmxheTo6Y2xl
YXIoKQotewotICAgIG1fd2ViUGFnZS0+cGFnZU92ZXJsYXlDb250cm9sbGVyKCkuY2xlYXJQYWdl
T3ZlcmxheSgqdGhpcyk7Ci19Ci0KLVdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqIFBhZ2VPdmVybGF5
OjpsYXllcigpCi17Ci0gICAgcmV0dXJuIG1fd2ViUGFnZS0+cGFnZU92ZXJsYXlDb250cm9sbGVy
KCkubGF5ZXJGb3JPdmVybGF5KCp0aGlzKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvUGFnZU92ZXJsYXku
aCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9QYWdlT3ZlcmxheS5oCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMjI1ZjBkLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9QYWdlT3ZlcmxheS5oCisrKyAvZGV2L251bGwKQEAg
LTEsMTM3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFBhZ2VPdmVybGF5X2gKLSNkZWZp
bmUgUGFnZU92ZXJsYXlfaAotCi0jaW5jbHVkZSAiQVBJT2JqZWN0LmgiCi0jaW5jbHVkZSAiV0tC
YXNlLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9Db2xvci5oPgotI2luY2x1ZGUgPFdlYkNvcmUvSW50
UmVjdC5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1J1bkxv
b3AuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotY2xhc3MgRnJhbWU7Ci1jbGFzcyBHcmFwaGlj
c0NvbnRleHQ7Ci1jbGFzcyBHcmFwaGljc0xheWVyOwotfQotCi1uYW1lc3BhY2UgV2ViS2l0IHsK
LQotY2xhc3MgV2ViRnJhbWU7Ci1jbGFzcyBXZWJNb3VzZUV2ZW50OwotY2xhc3MgV2ViUGFnZTsK
LQotY2xhc3MgUGFnZU92ZXJsYXkgOiBwdWJsaWMgQVBJOjpPYmplY3RJbXBsPEFQSTo6T2JqZWN0
OjpUeXBlOjpCdW5kbGVQYWdlT3ZlcmxheT4gewotcHVibGljOgotICAgIGNsYXNzIENsaWVudCB7
Ci0gICAgcHJvdGVjdGVkOgotICAgICAgICB2aXJ0dWFsIH5DbGllbnQoKSB7IH0KLSAgICAKLSAg
ICBwdWJsaWM6Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBwYWdlT3ZlcmxheURlc3Ryb3llZChQYWdl
T3ZlcmxheSopID0gMDsKLSAgICAgICAgdmlydHVhbCB2b2lkIHdpbGxNb3ZlVG9XZWJQYWdlKFBh
Z2VPdmVybGF5KiwgV2ViUGFnZSopID0gMDsKLSAgICAgICAgdmlydHVhbCB2b2lkIGRpZE1vdmVU
b1dlYlBhZ2UoUGFnZU92ZXJsYXkqLCBXZWJQYWdlKikgPSAwOwotICAgICAgICB2aXJ0dWFsIHZv
aWQgZHJhd1JlY3QoUGFnZU92ZXJsYXkqLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmLCBjb25z
dCBXZWJDb3JlOjpJbnRSZWN0JiBkaXJ0eVJlY3QpID0gMDsKLSAgICAgICAgdmlydHVhbCBib29s
IG1vdXNlRXZlbnQoUGFnZU92ZXJsYXkqLCBjb25zdCBXZWJNb3VzZUV2ZW50JikgPSAwOwotICAg
ICAgICB2aXJ0dWFsIHZvaWQgZGlkU2Nyb2xsRnJhbWUoUGFnZU92ZXJsYXkqLCBXZWJDb3JlOjpG
cmFtZSopIHsgfQotCi0gICAgICAgIHZpcnR1YWwgV0tUeXBlUmVmIGNvcHlBY2Nlc3NpYmlsaXR5
QXR0cmlidXRlVmFsdWUoUGFnZU92ZXJsYXkqLCBXS1N0cmluZ1JlZiAvKiBhdHRyaWJ1dGUgKi8s
IFdLVHlwZVJlZiAvKiBwYXJhbWV0ZXIgKi8pIHsgcmV0dXJuIDA7IH0KLSAgICAgICAgdmlydHVh
bCBXS0FycmF5UmVmIGNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlTmFtZXMoUGFnZU92ZXJsYXkq
LCBib29sIC8qIHBhcmFtZXRlcml6ZWROYW1lcyAqLykgeyByZXR1cm4gMDsgfQotICAgIH07Ci0K
LSAgICBlbnVtIGNsYXNzIE92ZXJsYXlUeXBlIHsKLSAgICAgICAgVmlldywgLy8gRml4ZWQgdG8g
dGhlIHZpZXcgc2l6ZTsgZG9lcyBub3Qgc2NhbGUgb3Igc2Nyb2xsIHdpdGggdGhlIGRvY3VtZW50
LCByZXBhaW50cyBvbiBzY3JvbGwuCi0gICAgICAgIERvY3VtZW50LCAvLyBTY2FsZXMgYW5kIHNj
cm9sbHMgd2l0aCB0aGUgZG9jdW1lbnQuCi0gICAgfTsKLQotICAgIHN0YXRpYyBQYXNzUmVmUHRy
PFBhZ2VPdmVybGF5PiBjcmVhdGUoQ2xpZW50KiwgT3ZlcmxheVR5cGUgPSBPdmVybGF5VHlwZTo6
Vmlldyk7Ci0gICAgdmlydHVhbCB+UGFnZU92ZXJsYXkoKTsKLQotICAgIHZvaWQgc2V0UGFnZShX
ZWJQYWdlKik7Ci0gICAgdm9pZCBzZXROZWVkc0Rpc3BsYXkoY29uc3QgV2ViQ29yZTo6SW50UmVj
dCYgZGlydHlSZWN0KTsKLSAgICB2b2lkIHNldE5lZWRzRGlzcGxheSgpOwotCi0gICAgdm9pZCBk
cmF3UmVjdChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0
JiBkaXJ0eVJlY3QpOwotICAgIGJvb2wgbW91c2VFdmVudChjb25zdCBXZWJNb3VzZUV2ZW50Jik7
Ci0gICAgdm9pZCBkaWRTY3JvbGxGcmFtZShXZWJDb3JlOjpGcmFtZSopOwotCi0gICAgV0tUeXBl
UmVmIGNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWUoV0tTdHJpbmdSZWYgYXR0cmlidXRl
LCBXS1R5cGVSZWYgcGFyYW1ldGVyKTsKLSAgICBXS0FycmF5UmVmIGNvcHlBY2Nlc3NpYmlsaXR5
QXR0cmlidXRlTmFtZXMoYm9vbCBwYXJhbWV0ZXJpemVkTmFtZXMpOwotICAgIAotICAgIHZvaWQg
c3RhcnRGYWRlSW5BbmltYXRpb24oKTsKLSAgICB2b2lkIHN0YXJ0RmFkZU91dEFuaW1hdGlvbigp
OwotICAgIHZvaWQgc3RvcEZhZGVPdXRBbmltYXRpb24oKTsKLQotICAgIHZvaWQgY2xlYXIoKTsK
LQotICAgIENsaWVudCogY2xpZW50KCkgY29uc3QgeyByZXR1cm4gbV9jbGllbnQ7IH0KLQotICAg
IGVudW0gY2xhc3MgRmFkZU1vZGUgeyBEb05vdEZhZGUsIEZhZGUgfTsKLQotICAgIE92ZXJsYXlU
eXBlIG92ZXJsYXlUeXBlKCkgeyByZXR1cm4gbV9vdmVybGF5VHlwZTsgfQotCi0gICAgV2ViQ29y
ZTo6SW50UmVjdCBib3VuZHMoKSBjb25zdDsKLSAgICBXZWJDb3JlOjpJbnRSZWN0IGZyYW1lKCkg
Y29uc3Q7Ci0gICAgdm9pZCBzZXRGcmFtZShXZWJDb3JlOjpJbnRSZWN0KTsKLQotICAgIFdlYkNv
cmU6OlJHQkEzMiBiYWNrZ3JvdW5kQ29sb3IoKSBjb25zdCB7IHJldHVybiBtX2JhY2tncm91bmRD
b2xvcjsgfQotICAgIHZvaWQgc2V0QmFja2dyb3VuZENvbG9yKFdlYkNvcmU6OlJHQkEzMik7Ci0K
LSAgICBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiBsYXllcigpOwotICAgIAotcHJvdGVjdGVkOgot
ICAgIGV4cGxpY2l0IFBhZ2VPdmVybGF5KENsaWVudCosIE92ZXJsYXlUeXBlKTsKLQotcHJpdmF0
ZToKLSAgICB2b2lkIHN0YXJ0RmFkZUFuaW1hdGlvbigpOwotICAgIHZvaWQgZmFkZUFuaW1hdGlv
blRpbWVyRmlyZWQoKTsKLQotICAgIENsaWVudCogbV9jbGllbnQ7Ci0gICAgV2ViUGFnZSogbV93
ZWJQYWdlOwotCi0gICAgUnVuTG9vcDo6VGltZXI8UGFnZU92ZXJsYXk+IG1fZmFkZUFuaW1hdGlv
blRpbWVyOwotICAgIGRvdWJsZSBtX2ZhZGVBbmltYXRpb25TdGFydFRpbWU7Ci0gICAgZG91Ymxl
IG1fZmFkZUFuaW1hdGlvbkR1cmF0aW9uOwotCi0gICAgZW51bSBGYWRlQW5pbWF0aW9uVHlwZSB7
Ci0gICAgICAgIE5vQW5pbWF0aW9uLAotICAgICAgICBGYWRlSW5BbmltYXRpb24sCi0gICAgICAg
IEZhZGVPdXRBbmltYXRpb24sCi0gICAgfTsKLQotICAgIEZhZGVBbmltYXRpb25UeXBlIG1fZmFk
ZUFuaW1hdGlvblR5cGU7Ci0gICAgZmxvYXQgbV9mcmFjdGlvbkZhZGVkSW47Ci0KLSAgICBPdmVy
bGF5VHlwZSBtX292ZXJsYXlUeXBlOwotICAgIFdlYkNvcmU6OkludFJlY3QgbV9vdmVycmlkZUZy
YW1lOwotCi0gICAgV2ViQ29yZTo6UkdCQTMyIG1fYmFja2dyb3VuZENvbG9yOwotfTsKLQotfSAv
LyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBQYWdlT3ZlcmxheV9oCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvUGFnZU92ZXJsYXlDb250cm9sbGVy
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9QYWdlT3ZlcmxheUNvbnRy
b2xsZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NjQ1N2M1Li4wMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9QYWdlT3ZlcmxheUNvbnRy
b2xsZXIuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMzE0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUGFnZU92ZXJsYXlDb250cm9sbGVyLmgiCi0K
LSNpbmNsdWRlICJEcmF3aW5nQXJlYS5oIgotI2luY2x1ZGUgIlBhZ2VPdmVybGF5LmgiCi0jaW5j
bHVkZSAiV2ViUGFnZS5oIgotI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWUuaD4KLSNpbmNsdWRlIDxX
ZWJDb3JlL0ZyYW1lVmlldy5oPgotI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+
Ci0jaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0xheWVyLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9N
YWluRnJhbWUuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmg+Ci0j
aW5jbHVkZSA8V2ViQ29yZS9TZXR0aW5ncy5oPgotI2luY2x1ZGUgPFdlYkNvcmUvVGlsZWRCYWNr
aW5nLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1uYW1lc3BhY2UgV2ViS2l0IHsK
LQotUGFnZU92ZXJsYXlDb250cm9sbGVyOjpQYWdlT3ZlcmxheUNvbnRyb2xsZXIoV2ViUGFnZSYg
d2ViUGFnZSkKLSAgICA6IG1fd2ViUGFnZSh3ZWJQYWdlKQotewotfQotCi12b2lkIFBhZ2VPdmVy
bGF5Q29udHJvbGxlcjo6aW5pdGlhbGl6ZSgpCi17Ci0gICAgQVNTRVJUKCFtX2RvY3VtZW50T3Zl
cmxheVJvb3RMYXllcik7Ci0gICAgQVNTRVJUKCFtX3ZpZXdPdmVybGF5Um9vdExheWVyKTsKLQot
ICAgIG1fZG9jdW1lbnRPdmVybGF5Um9vdExheWVyID0gR3JhcGhpY3NMYXllcjo6Y3JlYXRlKG1f
d2ViUGFnZS5kcmF3aW5nQXJlYSgpLT5ncmFwaGljc0xheWVyRmFjdG9yeSgpLCAqdGhpcyk7Ci0g
ICAgbV92aWV3T3ZlcmxheVJvb3RMYXllciA9IEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZShtX3dlYlBh
Z2UuZHJhd2luZ0FyZWEoKS0+Z3JhcGhpY3NMYXllckZhY3RvcnkoKSwgKnRoaXMpOwotI2lmbmRl
ZiBOREVCVUcKLSAgICBtX2RvY3VtZW50T3ZlcmxheVJvb3RMYXllci0+c2V0TmFtZSgiUGFnZSBP
dmVybGF5IGNvbnRhaW5lciAoZG9jdW1lbnQtcmVsYXRpdmUpIik7Ci0gICAgbV92aWV3T3Zlcmxh
eVJvb3RMYXllci0+c2V0TmFtZSgiUGFnZSBPdmVybGF5IGNvbnRhaW5lciAodmlldy1yZWxhdGl2
ZSkiKTsKLSNlbmRpZgotfQotCi1zdGF0aWMgdm9pZCB1cGRhdGVPdmVybGF5R2VvbWV0cnkoUGFn
ZU92ZXJsYXkmIG92ZXJsYXksIEdyYXBoaWNzTGF5ZXImIGdyYXBoaWNzTGF5ZXIpCi17Ci0gICAg
SW50UmVjdCBvdmVybGF5RnJhbWUgPSBvdmVybGF5LmZyYW1lKCk7Ci0KLSAgICBpZiAob3Zlcmxh
eUZyYW1lLmxvY2F0aW9uKCkgPT0gZ3JhcGhpY3NMYXllci5wb3NpdGlvbigpICYmIG92ZXJsYXlG
cmFtZS5zaXplKCkgPT0gZ3JhcGhpY3NMYXllci5zaXplKCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGdyYXBoaWNzTGF5ZXIuc2V0UG9zaXRpb24ob3ZlcmxheUZyYW1lLmxvY2F0aW9uKCkpOwot
ICAgIGdyYXBoaWNzTGF5ZXIuc2V0U2l6ZShvdmVybGF5RnJhbWUuc2l6ZSgpKTsKLX0KLQotdm9p
ZCBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6Omluc3RhbGxQYWdlT3ZlcmxheShQYXNzUmVmUHRyPFBh
Z2VPdmVybGF5PiBwYWdlT3ZlcmxheSwgUGFnZU92ZXJsYXk6OkZhZGVNb2RlIGZhZGVNb2RlKQot
ewotICAgIEFTU0VSVChtX2RvY3VtZW50T3ZlcmxheVJvb3RMYXllcik7Ci0gICAgQVNTRVJUKG1f
dmlld092ZXJsYXlSb290TGF5ZXIpOwotCi0gICAgUmVmUHRyPFBhZ2VPdmVybGF5PiBvdmVybGF5
ID0gcGFnZU92ZXJsYXk7Ci0KLSAgICBpZiAobV9wYWdlT3ZlcmxheXMuY29udGFpbnMob3Zlcmxh
eSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fcGFnZU92ZXJsYXlzLmFwcGVuZChvdmVybGF5
KTsKLSAgICBvdmVybGF5LT5zZXRQYWdlKCZtX3dlYlBhZ2UpOwotCi0gICAgaWYgKGZhZGVNb2Rl
ID09IFBhZ2VPdmVybGF5OjpGYWRlTW9kZTo6RmFkZSkKLSAgICAgICAgb3ZlcmxheS0+c3RhcnRG
YWRlSW5BbmltYXRpb24oKTsKLQotICAgIHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0xheWVyPiBs
YXllciA9IEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZShtX3dlYlBhZ2UuZHJhd2luZ0FyZWEoKS0+Z3Jh
cGhpY3NMYXllckZhY3RvcnkoKSwgKnRoaXMpOwotICAgIGxheWVyLT5zZXRBbmNob3JQb2ludChG
bG9hdFBvaW50M0QoKSk7Ci0gICAgbGF5ZXItPnNldEJhY2tncm91bmRDb2xvcihvdmVybGF5LT5i
YWNrZ3JvdW5kQ29sb3IoKSk7Ci0gICAgdXBkYXRlT3ZlcmxheUdlb21ldHJ5KCpvdmVybGF5LCAq
bGF5ZXIpOwotI2lmbmRlZiBOREVCVUcKLSAgICBsYXllci0+c2V0TmFtZSgiUGFnZSBPdmVybGF5
IGNvbnRlbnQiKTsKLSNlbmRpZgotCi0gICAgdXBkYXRlU2V0dGluZ3NGb3JMYXllcigqbGF5ZXIp
OwotCi0gICAgc3dpdGNoIChvdmVybGF5LT5vdmVybGF5VHlwZSgpKSB7Ci0gICAgY2FzZSBQYWdl
T3ZlcmxheTo6T3ZlcmxheVR5cGU6OlZpZXc6Ci0gICAgICAgIG1fdmlld092ZXJsYXlSb290TGF5
ZXItPmFkZENoaWxkKGxheWVyLmdldCgpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQYWdl
T3ZlcmxheTo6T3ZlcmxheVR5cGU6OkRvY3VtZW50OgotICAgICAgICBtX2RvY3VtZW50T3Zlcmxh
eVJvb3RMYXllci0+YWRkQ2hpbGQobGF5ZXIuZ2V0KCkpOwotICAgICAgICBicmVhazsKLSAgICB9
Ci0KLSAgICBtX292ZXJsYXlHcmFwaGljc0xheWVycy5zZXQob3ZlcmxheS5nZXQoKSwgV1RGOjpt
b3ZlKGxheWVyKSk7Ci0KLSAgICB1cGRhdGVGb3JjZVN5bmNocm9ub3VzU2Nyb2xsTGF5ZXJQb3Np
dGlvblVwZGF0ZXMoKTsKLX0KLQotdm9pZCBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6OnVuaW5zdGFs
bFBhZ2VPdmVybGF5KFBhZ2VPdmVybGF5KiBvdmVybGF5LCBQYWdlT3ZlcmxheTo6RmFkZU1vZGUg
ZmFkZU1vZGUpCi17Ci0gICAgaWYgKGZhZGVNb2RlID09IFBhZ2VPdmVybGF5OjpGYWRlTW9kZTo6
RmFkZSkgewotICAgICAgICBvdmVybGF5LT5zdGFydEZhZGVPdXRBbmltYXRpb24oKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIG92ZXJsYXktPnNldFBhZ2UobnVsbHB0cik7Ci0KLSAg
ICBtX292ZXJsYXlHcmFwaGljc0xheWVycy50YWtlKG92ZXJsYXkpLT5yZW1vdmVGcm9tUGFyZW50
KCk7Ci0KLSAgICBzaXplX3Qgb3ZlcmxheUluZGV4ID0gbV9wYWdlT3ZlcmxheXMuZmluZChvdmVy
bGF5KTsKLSAgICBBU1NFUlQob3ZlcmxheUluZGV4ICE9IG5vdEZvdW5kKTsKLSAgICBtX3BhZ2VP
dmVybGF5cy5yZW1vdmUob3ZlcmxheUluZGV4KTsKLQotICAgIHVwZGF0ZUZvcmNlU3luY2hyb25v
dXNTY3JvbGxMYXllclBvc2l0aW9uVXBkYXRlcygpOwotfQotCi12b2lkIFBhZ2VPdmVybGF5Q29u
dHJvbGxlcjo6dXBkYXRlRm9yY2VTeW5jaHJvbm91c1Njcm9sbExheWVyUG9zaXRpb25VcGRhdGVz
KCkKLXsKLSNpZiBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKQotICAgIGJvb2wgZm9yY2VTeW5jaHJv
bm91c1Njcm9sbExheWVyUG9zaXRpb25VcGRhdGVzID0gZmFsc2U7Ci0KLSAgICBmb3IgKGF1dG8m
IG92ZXJsYXkgOiBtX3BhZ2VPdmVybGF5cykgewotICAgICAgICBpZiAob3ZlcmxheS0+b3Zlcmxh
eVR5cGUoKSA9PSBQYWdlT3ZlcmxheTo6T3ZlcmxheVR5cGU6OlZpZXcpCi0gICAgICAgICAgICBm
b3JjZVN5bmNocm9ub3VzU2Nyb2xsTGF5ZXJQb3NpdGlvblVwZGF0ZXMgPSB0cnVlOwotICAgIH0K
LQotICAgIGlmIChQYWdlKiBwYWdlID0gbV93ZWJQYWdlLmNvcmVQYWdlKCkpIHsKLSAgICAgICAg
aWYgKFNjcm9sbGluZ0Nvb3JkaW5hdG9yKiBzY3JvbGxpbmdDb29yZGluYXRvciA9IHBhZ2UtPnNj
cm9sbGluZ0Nvb3JkaW5hdG9yKCkpCi0gICAgICAgICAgICBzY3JvbGxpbmdDb29yZGluYXRvci0+
c2V0Rm9yY2VTeW5jaHJvbm91c1Njcm9sbExheWVyUG9zaXRpb25VcGRhdGVzKGZvcmNlU3luY2hy
b25vdXNTY3JvbGxMYXllclBvc2l0aW9uVXBkYXRlcyk7Ci0gICAgfQotI2VuZGlmCi19Ci0KLXZv
aWQgUGFnZU92ZXJsYXlDb250cm9sbGVyOjpzZXRQYWdlT3ZlcmxheU5lZWRzRGlzcGxheShQYWdl
T3ZlcmxheSYgb3ZlcmxheSwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgZGlydHlSZWN0KQotewot
ICAgIEFTU0VSVChtX3BhZ2VPdmVybGF5cy5jb250YWlucygmb3ZlcmxheSkpOwotICAgIEdyYXBo
aWNzTGF5ZXImIGdyYXBoaWNzTGF5ZXIgPSAqbV9vdmVybGF5R3JhcGhpY3NMYXllcnMuZ2V0KCZv
dmVybGF5KTsKLQotICAgIGlmICghZ3JhcGhpY3NMYXllci5kcmF3c0NvbnRlbnQoKSkgewotICAg
ICAgICBncmFwaGljc0xheWVyLnNldERyYXdzQ29udGVudCh0cnVlKTsKLSAgICAgICAgdXBkYXRl
T3ZlcmxheUdlb21ldHJ5KG92ZXJsYXksIGdyYXBoaWNzTGF5ZXIpOwotICAgIH0KLQotICAgIGdy
YXBoaWNzTGF5ZXIuc2V0TmVlZHNEaXNwbGF5SW5SZWN0KGRpcnR5UmVjdCk7Ci19Ci0KLXZvaWQg
UGFnZU92ZXJsYXlDb250cm9sbGVyOjpzZXRQYWdlT3ZlcmxheU9wYWNpdHkoUGFnZU92ZXJsYXkm
IG92ZXJsYXksIGZsb2F0IG9wYWNpdHkpCi17Ci0gICAgQVNTRVJUKG1fcGFnZU92ZXJsYXlzLmNv
bnRhaW5zKCZvdmVybGF5KSk7Ci0gICAgbV9vdmVybGF5R3JhcGhpY3NMYXllcnMuZ2V0KCZvdmVy
bGF5KS0+c2V0T3BhY2l0eShvcGFjaXR5KTsKLX0KLQotdm9pZCBQYWdlT3ZlcmxheUNvbnRyb2xs
ZXI6OmNsZWFyUGFnZU92ZXJsYXkoUGFnZU92ZXJsYXkmIG92ZXJsYXkpCi17Ci0gICAgQVNTRVJU
KG1fcGFnZU92ZXJsYXlzLmNvbnRhaW5zKCZvdmVybGF5KSk7Ci0gICAgbV9vdmVybGF5R3JhcGhp
Y3NMYXllcnMuZ2V0KCZvdmVybGF5KS0+c2V0RHJhd3NDb250ZW50KGZhbHNlKTsKLX0KLQotR3Jh
cGhpY3NMYXllciogUGFnZU92ZXJsYXlDb250cm9sbGVyOjpsYXllckZvck92ZXJsYXkoUGFnZU92
ZXJsYXkmIG92ZXJsYXkpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKG1fcGFnZU92ZXJsYXlzLmNvbnRh
aW5zKCZvdmVybGF5KSk7Ci0gICAgcmV0dXJuIG1fb3ZlcmxheUdyYXBoaWNzTGF5ZXJzLmdldCgm
b3ZlcmxheSk7Ci19Ci0KLXZvaWQgUGFnZU92ZXJsYXlDb250cm9sbGVyOjpkaWRDaGFuZ2VWaWV3
U2l6ZSgpCi17Ci0gICAgZm9yIChhdXRvJiBvdmVybGF5QW5kTGF5ZXIgOiBtX292ZXJsYXlHcmFw
aGljc0xheWVycykgewotICAgICAgICBpZiAob3ZlcmxheUFuZExheWVyLmtleS0+b3ZlcmxheVR5
cGUoKSA9PSBQYWdlT3ZlcmxheTo6T3ZlcmxheVR5cGU6OlZpZXcpCi0gICAgICAgICAgICB1cGRh
dGVPdmVybGF5R2VvbWV0cnkoKm92ZXJsYXlBbmRMYXllci5rZXksICpvdmVybGF5QW5kTGF5ZXIu
dmFsdWUpOwotICAgIH0KLX0KLQotdm9pZCBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6OmRpZENoYW5n
ZURvY3VtZW50U2l6ZSgpCi17Ci0gICAgZm9yIChhdXRvJiBvdmVybGF5QW5kTGF5ZXIgOiBtX292
ZXJsYXlHcmFwaGljc0xheWVycykgewotICAgICAgICBpZiAob3ZlcmxheUFuZExheWVyLmtleS0+
b3ZlcmxheVR5cGUoKSA9PSBQYWdlT3ZlcmxheTo6T3ZlcmxheVR5cGU6OkRvY3VtZW50KQotICAg
ICAgICAgICAgdXBkYXRlT3ZlcmxheUdlb21ldHJ5KCpvdmVybGF5QW5kTGF5ZXIua2V5LCAqb3Zl
cmxheUFuZExheWVyLnZhbHVlKTsKLSAgICB9Ci19Ci0KLXZvaWQgUGFnZU92ZXJsYXlDb250cm9s
bGVyOjpkaWRDaGFuZ2VQcmVmZXJlbmNlcygpCi17Ci0gICAgZm9yIChhdXRvJiBncmFwaGljc0xh
eWVyIDogbV9vdmVybGF5R3JhcGhpY3NMYXllcnMudmFsdWVzKCkpCi0gICAgICAgIHVwZGF0ZVNl
dHRpbmdzRm9yTGF5ZXIoKmdyYXBoaWNzTGF5ZXIpOwotfQotCi12b2lkIFBhZ2VPdmVybGF5Q29u
dHJvbGxlcjo6ZGlkQ2hhbmdlRGV2aWNlU2NhbGVGYWN0b3IoKQotewotICAgIG1fZG9jdW1lbnRP
dmVybGF5Um9vdExheWVyLT5ub3RlRGV2aWNlT3JQYWdlU2NhbGVGYWN0b3JDaGFuZ2VkSW5jbHVk
aW5nRGVzY2VuZGFudHMoKTsKLSAgICBtX3ZpZXdPdmVybGF5Um9vdExheWVyLT5ub3RlRGV2aWNl
T3JQYWdlU2NhbGVGYWN0b3JDaGFuZ2VkSW5jbHVkaW5nRGVzY2VuZGFudHMoKTsKLQotICAgIGZv
ciAoYXV0byYgZ3JhcGhpY3NMYXllciA6IG1fb3ZlcmxheUdyYXBoaWNzTGF5ZXJzLnZhbHVlcygp
KQotICAgICAgICBncmFwaGljc0xheWVyLT5zZXROZWVkc0Rpc3BsYXkoKTsKLX0KLQotdm9pZCBQ
YWdlT3ZlcmxheUNvbnRyb2xsZXI6OmRpZENoYW5nZUV4cG9zZWRSZWN0KCkKLXsKLSAgICBtX3dl
YlBhZ2UuZHJhd2luZ0FyZWEoKS0+c2NoZWR1bGVDb21wb3NpdGluZ0xheWVyRmx1c2goKTsKLX0K
LQotdm9pZCBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6OmRpZFNjcm9sbEZyYW1lKEZyYW1lKiBmcmFt
ZSkKLXsKLSAgICBmb3IgKGF1dG8mIG92ZXJsYXlBbmRMYXllciA6IG1fb3ZlcmxheUdyYXBoaWNz
TGF5ZXJzKSB7Ci0gICAgICAgIGlmIChvdmVybGF5QW5kTGF5ZXIua2V5LT5vdmVybGF5VHlwZSgp
ID09IFBhZ2VPdmVybGF5OjpPdmVybGF5VHlwZTo6VmlldyB8fCAhZnJhbWUtPmlzTWFpbkZyYW1l
KCkpCi0gICAgICAgICAgICBvdmVybGF5QW5kTGF5ZXIudmFsdWUtPnNldE5lZWRzRGlzcGxheSgp
OwotICAgICAgICBvdmVybGF5QW5kTGF5ZXIua2V5LT5kaWRTY3JvbGxGcmFtZShmcmFtZSk7Ci0g
ICAgfQotfQotCi12b2lkIFBhZ2VPdmVybGF5Q29udHJvbGxlcjo6Zmx1c2hQYWdlT3ZlcmxheUxh
eWVycyhGbG9hdFJlY3QgdmlzaWJsZVJlY3QpCi17Ci0gICAgbV92aWV3T3ZlcmxheVJvb3RMYXll
ci0+Zmx1c2hDb21wb3NpdGluZ1N0YXRlKHZpc2libGVSZWN0KTsKLX0KLQotdm9pZCBQYWdlT3Zl
cmxheUNvbnRyb2xsZXI6OnVwZGF0ZVNldHRpbmdzRm9yTGF5ZXIoR3JhcGhpY3NMYXllciYgbGF5
ZXIpCi17Ci0gICAgU2V0dGluZ3MmIHNldHRpbmdzID0gbV93ZWJQYWdlLmNvcmVQYWdlKCktPnNl
dHRpbmdzKCk7Ci0gICAgbGF5ZXIuc2V0QWNjZWxlcmF0ZXNEcmF3aW5nKHNldHRpbmdzLmFjY2Vs
ZXJhdGVkRHJhd2luZ0VuYWJsZWQoKSk7Ci0gICAgbGF5ZXIuc2V0U2hvd0RlYnVnQm9yZGVyKHNl
dHRpbmdzLnNob3dEZWJ1Z0JvcmRlcnMoKSk7Ci0gICAgbGF5ZXIuc2V0U2hvd1JlcGFpbnRDb3Vu
dGVyKHNldHRpbmdzLnNob3dSZXBhaW50Q291bnRlcigpKTsKLX0KLQotYm9vbCBQYWdlT3Zlcmxh
eUNvbnRyb2xsZXI6OmhhbmRsZU1vdXNlRXZlbnQoY29uc3QgV2ViTW91c2VFdmVudCYgbW91c2VF
dmVudCkKLXsKLSAgICBpZiAoIW1fcGFnZU92ZXJsYXlzLnNpemUoKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgZm9yIChhdXRvIGl0ID0gbV9wYWdlT3ZlcmxheXMucmJlZ2luKCksIGVu
ZCA9IG1fcGFnZU92ZXJsYXlzLnJlbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGlm
ICgoKml0KS0+bW91c2VFdmVudChtb3VzZUV2ZW50KSkKLSAgICAgICAgICAgIHJldHVybiB0cnVl
OwotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotV0tUeXBlUmVmIFBhZ2VPdmVybGF5
Q29udHJvbGxlcjo6Y29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZShXS1N0cmluZ1JlZiBh
dHRyaWJ1dGUsIFdLVHlwZVJlZiBwYXJhbWV0ZXIpCi17Ci0gICAgaWYgKCFtX3BhZ2VPdmVybGF5
cy5zaXplKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgZm9yIChhdXRvIGl0ID0g
bV9wYWdlT3ZlcmxheXMucmJlZ2luKCksIGVuZCA9IG1fcGFnZU92ZXJsYXlzLnJlbmQoKTsgaXQg
IT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGlmIChXS1R5cGVSZWYgdmFsdWUgPSAoKml0KS0+Y29w
eUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZShhdHRyaWJ1dGUsIHBhcmFtZXRlcikpCi0gICAg
ICAgICAgICByZXR1cm4gdmFsdWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0K
LVdLQXJyYXlSZWYgUGFnZU92ZXJsYXlDb250cm9sbGVyOjpjb3B5QWNjZXNzaWJpbGl0eUF0dHJp
YnV0ZXNOYW1lcyhib29sIHBhcmFtZXRlcml6ZWROYW1lcykKLXsKLSAgICBpZiAoIW1fcGFnZU92
ZXJsYXlzLnNpemUoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBmb3IgKGF1dG8g
aXQgPSBtX3BhZ2VPdmVybGF5cy5yYmVnaW4oKSwgZW5kID0gbV9wYWdlT3ZlcmxheXMucmVuZCgp
OyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgaWYgKFdLQXJyYXlSZWYgdmFsdWUgPSAoKml0
KS0+Y29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVOYW1lcyhwYXJhbWV0ZXJpemVkTmFtZXMpKQot
ICAgICAgICAgICAgcmV0dXJuIHZhbHVlOwotICAgIH0KLQotICAgIHJldHVybiBudWxscHRyOwot
fQotCi12b2lkIFBhZ2VPdmVybGF5Q29udHJvbGxlcjo6cGFpbnRDb250ZW50cyhjb25zdCBXZWJD
b3JlOjpHcmFwaGljc0xheWVyKiBncmFwaGljc0xheWVyLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQmIGdyYXBoaWNzQ29udGV4dCwgV2ViQ29yZTo6R3JhcGhpY3NMYXllclBhaW50aW5nUGhhc2Us
IGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgY2xpcFJlY3QpCi17Ci0gICAgZm9yIChhdXRvIGl0
ID0gbV9vdmVybGF5R3JhcGhpY3NMYXllcnMuYmVnaW4oKSwgZW5kID0gbV9vdmVybGF5R3JhcGhp
Y3NMYXllcnMuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBpZiAoaXQtPnZhbHVl
LmdldCgpICE9IGdyYXBoaWNzTGF5ZXIpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAg
ICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoZ3JhcGhpY3NDb250ZXh0KTsK
LSAgICAgICAgZ3JhcGhpY3NDb250ZXh0LmNsaXAoY2xpcFJlY3QpOwotICAgICAgICBpdC0+a2V5
LT5kcmF3UmVjdChncmFwaGljc0NvbnRleHQsIGVuY2xvc2luZ0ludFJlY3QoY2xpcFJlY3QpKTsK
LQotICAgICAgICByZXR1cm47Ci0gICAgfQotfQotCi1mbG9hdCBQYWdlT3ZlcmxheUNvbnRyb2xs
ZXI6OmRldmljZVNjYWxlRmFjdG9yKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV93ZWJQYWdlLmNv
cmVQYWdlKCktPmRldmljZVNjYWxlRmFjdG9yKCk7Ci19Ci0KLXZvaWQgUGFnZU92ZXJsYXlDb250
cm9sbGVyOjpub3RpZnlGbHVzaFJlcXVpcmVkKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIq
KQotewotICAgIGlmIChtX3dlYlBhZ2UuZHJhd2luZ0FyZWEoKSkKLSAgICAgICAgbV93ZWJQYWdl
LmRyYXdpbmdBcmVhKCktPnNjaGVkdWxlQ29tcG9zaXRpbmdMYXllckZsdXNoKCk7Ci19Ci0KLXZv
aWQgUGFnZU92ZXJsYXlDb250cm9sbGVyOjpkaWRDaGFuZ2VPdmVybGF5RnJhbWUoUGFnZU92ZXJs
YXkmIG92ZXJsYXkpCi17Ci0gICAgQVNTRVJUKG1fcGFnZU92ZXJsYXlzLmNvbnRhaW5zKCZvdmVy
bGF5KSk7Ci0gICAgdXBkYXRlT3ZlcmxheUdlb21ldHJ5KG92ZXJsYXksICptX292ZXJsYXlHcmFw
aGljc0xheWVycy5nZXQoJm92ZXJsYXkpKTsKLX0KLQotdm9pZCBQYWdlT3ZlcmxheUNvbnRyb2xs
ZXI6OmRpZENoYW5nZU92ZXJsYXlCYWNrZ3JvdW5kQ29sb3IoUGFnZU92ZXJsYXkmIG92ZXJsYXkp
Ci17Ci0gICAgQVNTRVJUKG1fcGFnZU92ZXJsYXlzLmNvbnRhaW5zKCZvdmVybGF5KSk7Ci0gICAg
bV9vdmVybGF5R3JhcGhpY3NMYXllcnMuZ2V0KCZvdmVybGF5KS0+c2V0QmFja2dyb3VuZENvbG9y
KG92ZXJsYXkuYmFja2dyb3VuZENvbG9yKCkpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9QYWdlT3Zlcmxh
eUNvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9QYWdlT3Zl
cmxheUNvbnRyb2xsZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjUxODJkNS4u
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvUGFnZU92ZXJs
YXlDb250cm9sbGVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw5OSArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0g
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotI2lmbmRlZiBQYWdlT3ZlcmxheUNvbnRyb2xsZXJfaAotI2RlZmluZSBQYWdlT3ZlcmxheUNv
bnRyb2xsZXJfaAotCi0jaW5jbHVkZSAiUGFnZU92ZXJsYXkuaCIKLSNpbmNsdWRlICJXS0Jhc2Uu
aCIKLSNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzTGF5ZXJDbGllbnQuaD4KLSNpbmNsdWRlIDx3
dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLWNsYXNzIEZyYW1lOwotfQotCi1uYW1lc3Bh
Y2UgV2ViS2l0IHsKLQotY2xhc3MgV2ViTW91c2VFdmVudDsKLWNsYXNzIFdlYlBhZ2U7Ci0KLWNs
YXNzIFBhZ2VPdmVybGF5Q29udHJvbGxlciA6IHB1YmxpYyBXZWJDb3JlOjpHcmFwaGljc0xheWVy
Q2xpZW50IHsKLXB1YmxpYzoKLSAgICBQYWdlT3ZlcmxheUNvbnRyb2xsZXIoV2ViUGFnZSYpOwot
Ci0gICAgdm9pZCBpbml0aWFsaXplKCk7Ci0KLSAgICBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiBk
b2N1bWVudE92ZXJsYXlSb290TGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX2RvY3VtZW50T3Zlcmxh
eVJvb3RMYXllci5nZXQoKTsgfQotICAgIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqIHZpZXdPdmVy
bGF5Um9vdExheWVyKCkgY29uc3QgeyByZXR1cm4gbV92aWV3T3ZlcmxheVJvb3RMYXllci5nZXQo
KTsgfQotCi0gICAgdm9pZCBpbnN0YWxsUGFnZU92ZXJsYXkoUGFzc1JlZlB0cjxQYWdlT3Zlcmxh
eT4sIFBhZ2VPdmVybGF5OjpGYWRlTW9kZSk7Ci0gICAgdm9pZCB1bmluc3RhbGxQYWdlT3Zlcmxh
eShQYWdlT3ZlcmxheSosIFBhZ2VPdmVybGF5OjpGYWRlTW9kZSk7Ci0KLSAgICB2b2lkIHNldFBh
Z2VPdmVybGF5TmVlZHNEaXNwbGF5KFBhZ2VPdmVybGF5JiwgY29uc3QgV2ViQ29yZTo6SW50UmVj
dCYpOwotICAgIHZvaWQgc2V0UGFnZU92ZXJsYXlPcGFjaXR5KFBhZ2VPdmVybGF5JiwgZmxvYXQp
OwotICAgIHZvaWQgY2xlYXJQYWdlT3ZlcmxheShQYWdlT3ZlcmxheSYpOwotICAgIFdlYkNvcmU6
OkdyYXBoaWNzTGF5ZXIqIGxheWVyRm9yT3ZlcmxheShQYWdlT3ZlcmxheSYpIGNvbnN0OwotCi0g
ICAgdm9pZCBkaWRDaGFuZ2VWaWV3U2l6ZSgpOwotICAgIHZvaWQgZGlkQ2hhbmdlRG9jdW1lbnRT
aXplKCk7Ci0gICAgdm9pZCBkaWRDaGFuZ2VQcmVmZXJlbmNlcygpOwotICAgIHZvaWQgZGlkQ2hh
bmdlRGV2aWNlU2NhbGVGYWN0b3IoKTsKLSAgICB2b2lkIGRpZENoYW5nZUV4cG9zZWRSZWN0KCk7
Ci0gICAgdm9pZCBkaWRTY3JvbGxGcmFtZShXZWJDb3JlOjpGcmFtZSopOwotCi0gICAgdm9pZCBk
aWRDaGFuZ2VPdmVybGF5RnJhbWUoUGFnZU92ZXJsYXkmKTsKLSAgICB2b2lkIGRpZENoYW5nZU92
ZXJsYXlCYWNrZ3JvdW5kQ29sb3IoUGFnZU92ZXJsYXkmKTsKLQotICAgIHZvaWQgZmx1c2hQYWdl
T3ZlcmxheUxheWVycyhXZWJDb3JlOjpGbG9hdFJlY3QpOwotCi0gICAgYm9vbCBoYW5kbGVNb3Vz
ZUV2ZW50KGNvbnN0IFdlYk1vdXNlRXZlbnQmKTsKLQotICAgIC8vIEZJWE1FOiBXZSBzaG91bGRu
J3QgdXNlIEFQSSB0eXBlcyBoZXJlLgotICAgIFdLVHlwZVJlZiBjb3B5QWNjZXNzaWJpbGl0eUF0
dHJpYnV0ZVZhbHVlKFdLU3RyaW5nUmVmIGF0dHJpYnV0ZSwgV0tUeXBlUmVmIHBhcmFtZXRlcik7
Ci0gICAgV0tBcnJheVJlZiBjb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZXNOYW1lcyhib29sIHBh
cmFtZXRlcml6ZWROYW1lcyk7Ci0KLXByaXZhdGU6Ci0gICAgdm9pZCB1cGRhdGVTZXR0aW5nc0Zv
ckxheWVyKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXImKTsKLSAgICB2b2lkIHVwZGF0ZUZvcmNlU3lu
Y2hyb25vdXNTY3JvbGxMYXllclBvc2l0aW9uVXBkYXRlcygpOwotCi0gICAgLy8gV2ViQ29yZTo6
R3JhcGhpY3NMYXllckNsaWVudAotICAgIHZpcnR1YWwgdm9pZCBub3RpZnlGbHVzaFJlcXVpcmVk
KGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZv
aWQgcGFpbnRDb250ZW50cyhjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiwgV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0JiwgV2ViQ29yZTo6R3JhcGhpY3NMYXllclBhaW50aW5nUGhhc2UsIGNv
bnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgY2xpcFJlY3QpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwg
ZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IoKSBjb25zdCBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIGJv
b2wgc2hvdWxkU2tpcExheWVySW5EdW1wKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9Ci0KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8V2Vi
Q29yZTo6R3JhcGhpY3NMYXllcj4gbV9kb2N1bWVudE92ZXJsYXlSb290TGF5ZXI7Ci0gICAgc3Rk
Ojp1bmlxdWVfcHRyPFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI+IG1fdmlld092ZXJsYXlSb290TGF5
ZXI7Ci0gICAgSGFzaE1hcDxQYWdlT3ZlcmxheSosIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpH
cmFwaGljc0xheWVyPj4gbV9vdmVybGF5R3JhcGhpY3NMYXllcnM7Ci0gICAgVmVjdG9yPFJlZlB0
cjxQYWdlT3ZlcmxheT4+IG1fcGFnZU92ZXJsYXlzOwotICAgIFdlYlBhZ2UmIG1fd2ViUGFnZTsK
LX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gUGFnZU92ZXJsYXlDb250
cm9sbGVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9T
ZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvU2VydmljZXNPdmVybGF5Q29udHJvbGxlci5oCmluZGV4IDNiMDlkM2QuLjQxMWQzM2Mg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9TZXJ2aWNlc092
ZXJsYXlDb250cm9sbGVyLmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L1NlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIuaApAQCAtMjgsOSArMjgsOSBAQAogCiAjaWYgRU5B
QkxFKFNFUlZJQ0VfQ09OVFJPTFMpIHx8IEVOQUJMRShURUxFUEhPTkVfTlVNQkVSX0RFVEVDVElP
TikKIAotI2luY2x1ZGUgIlBhZ2VPdmVybGF5LmgiCiAjaW5jbHVkZSAiV2ViRnJhbWUuaCIKICNp
bmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzTGF5ZXJDbGllbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3Jl
L1BhZ2VPdmVybGF5Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SYW5nZS5oPgogI2luY2x1ZGUgPFdl
YkNvcmUvVGltZXIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgpAQCAtMzksNyArMzks
NiBAQCB0eXBlZGVmIHZvaWQqIERESGlnaGxpZ2h0UmVmOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiBjbGFzcyBMYXlvdXRSZWN0OwotCiBzdHJ1Y3QgR2FwUmVjdHM7CiB9CiAKQEAgLTQ3LDcgKzQ2
LDcgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIFdlYlBhZ2U7CiAKLWNsYXNzIFNlcnZp
Y2VzT3ZlcmxheUNvbnRyb2xsZXIgOiBwcml2YXRlIFBhZ2VPdmVybGF5OjpDbGllbnQgeworY2xh
c3MgU2VydmljZXNPdmVybGF5Q29udHJvbGxlciA6IHByaXZhdGUgV2ViQ29yZTo6UGFnZU92ZXJs
YXk6OkNsaWVudCB7CiBwdWJsaWM6CiAgICAgU2VydmljZXNPdmVybGF5Q29udHJvbGxlcihXZWJQ
YWdlJik7CiAgICAgflNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIoKTsKQEAgLTk4LDEyICs5Nywx
MiBAQCBwcml2YXRlOgogICAgIH07CiAKICAgICAvLyBQYWdlT3ZlcmxheTo6Q2xpZW50Ci0gICAg
dmlydHVhbCB2b2lkIHBhZ2VPdmVybGF5RGVzdHJveWVkKFBhZ2VPdmVybGF5Kikgb3ZlcnJpZGU7
Ci0gICAgdmlydHVhbCB2b2lkIHdpbGxNb3ZlVG9XZWJQYWdlKFBhZ2VPdmVybGF5KiwgV2ViUGFn
ZSopIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBkaWRNb3ZlVG9XZWJQYWdlKFBhZ2VPdmVy
bGF5KiwgV2ViUGFnZSopIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBkcmF3UmVjdChQYWdl
T3ZlcmxheSosIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IFdlYkNvcmU6OkludFJl
Y3QmIGRpcnR5UmVjdCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBib29sIG1vdXNlRXZlbnQoUGFn
ZU92ZXJsYXkqLCBjb25zdCBXZWJNb3VzZUV2ZW50Jikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2
b2lkIGRpZFNjcm9sbEZyYW1lKFBhZ2VPdmVybGF5KiwgV2ViQ29yZTo6RnJhbWUqKSBvdmVycmlk
ZTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFnZU92ZXJsYXlEZXN0cm95ZWQoV2ViQ29yZTo6UGFnZU92
ZXJsYXkmKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgd2lsbE1vdmVUb1BhZ2UoV2ViQ29y
ZTo6UGFnZU92ZXJsYXkmLCBXZWJDb3JlOjpQYWdlKikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2
b2lkIGRpZE1vdmVUb1BhZ2UoV2ViQ29yZTo6UGFnZU92ZXJsYXkmLCBXZWJDb3JlOjpQYWdlKikg
b3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGRyYXdSZWN0KFdlYkNvcmU6OlBhZ2VPdmVybGF5
JiwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgZGly
dHlSZWN0KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wgbW91c2VFdmVudChXZWJDb3JlOjpQ
YWdlT3ZlcmxheSYsIGNvbnN0IFdlYkNvcmU6OlBsYXRmb3JtTW91c2VFdmVudCYpIG92ZXJyaWRl
OworICAgIHZpcnR1YWwgdm9pZCBkaWRTY3JvbGxGcmFtZShXZWJDb3JlOjpQYWdlT3ZlcmxheSYs
IFdlYkNvcmU6OkZyYW1lJikgb3ZlcnJpZGU7CiAKICAgICB2b2lkIGNyZWF0ZU92ZXJsYXlJZk5l
ZWRlZCgpOwogICAgIHZvaWQgaGFuZGxlQ2xpY2soY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmLCBI
aWdobGlnaHQmKTsKQEAgLTEzOSw3ICsxMzgsNyBAQCBwcml2YXRlOgogICAgIFdlYlBhZ2UmIHdl
YlBhZ2UoKSBjb25zdCB7IHJldHVybiBtX3dlYlBhZ2U7IH0KIAogICAgIFdlYlBhZ2UmIG1fd2Vi
UGFnZTsKLSAgICBQYWdlT3ZlcmxheSogbV9zZXJ2aWNlc092ZXJsYXk7CisgICAgV2ViQ29yZTo6
UGFnZU92ZXJsYXkqIG1fc2VydmljZXNPdmVybGF5OwogCiAgICAgUmVmUHRyPEhpZ2hsaWdodD4g
bV9hY3RpdmVIaWdobGlnaHQ7CiAgICAgUmVmUHRyPEhpZ2hsaWdodD4gbV9uZXh0QWN0aXZlSGln
aGxpZ2h0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dl
YlBhZ2UuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3Bw
CmluZGV4IDZlYTc2YWMuLjc2MDljZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViUGFnZS5jcHAKQEAgLTMyNyw3ICszMjcsNiBAQCBXZWJQYWdlOjpXZWJQYWdl
KHVpbnQ2NF90IHBhZ2VJRCwgY29uc3QgV2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVycyYgcGFyYW1l
dGVycykKICNpZiBFTkFCTEUoV0VCR0wpCiAgICAgLCBtX3N5c3RlbVdlYkdMUG9saWN5KFdlYkdM
QWxsb3dDcmVhdGlvbikKICNlbmRpZgotICAgICwgbV9wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKnRo
aXMpCiB7CiAgICAgQVNTRVJUKG1fcGFnZUlEKTsKICAgICAvLyBGSVhNRTogVGhpcyBpcyBhIG5v
bi1pZGVhbCBsb2NhdGlvbiBmb3IgdGhpcyBTZXR0aW5nIGFuZApAQCAtMzY2LDcgKzM2NSw2IEBA
IFdlYlBhZ2U6OldlYlBhZ2UodWludDY0X3QgcGFnZUlELCBjb25zdCBXZWJQYWdlQ3JlYXRpb25Q
YXJhbWV0ZXJzJiBwYXJhbWV0ZXJzKQogCiAgICAgbV9kcmF3aW5nQXJlYSA9IERyYXdpbmdBcmVh
OjpjcmVhdGUoKnRoaXMsIHBhcmFtZXRlcnMpOwogICAgIG1fZHJhd2luZ0FyZWEtPnNldFBhaW50
aW5nRW5hYmxlZChmYWxzZSk7Ci0gICAgbV9wYWdlT3ZlcmxheUNvbnRyb2xsZXIuaW5pdGlhbGl6
ZSgpOwogCiAjaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykKICAgICBtX3VzZUFzeW5jU2Nyb2xs
aW5nID0gcGFyYW1ldGVycy5zdG9yZS5nZXRCb29sVmFsdWVGb3JLZXkoV2ViUHJlZmVyZW5jZXNL
ZXk6OnRocmVhZGVkU2Nyb2xsaW5nRW5hYmxlZEtleSgpKTsKQEAgLTEyMjYsOCArMTIyNCw2IEBA
IHZvaWQgV2ViUGFnZTo6c2V0U2l6ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiB2aWV3U2l6ZSkK
ICAgICBpZiAodmlldy0+dXNlRml4ZWRMYXlvdXQoKSkKICAgICAgICAgc2VuZFZpZXdwb3J0QXR0
cmlidXRlc0NoYW5nZWQoKTsKICNlbmRpZgotCi0gICAgbV9wYWdlT3ZlcmxheUNvbnRyb2xsZXIu
ZGlkQ2hhbmdlVmlld1NpemUoKTsKIH0KIAogI2lmIFVTRShUSUxFRF9CQUNLSU5HX1NUT1JFKQpA
QCAtMTQ1Myw4ICsxNDQ5LDYgQEAgdm9pZCBXZWJQYWdlOjpzZXREZXZpY2VTY2FsZUZhY3Rvcihm
bG9hdCBzY2FsZUZhY3RvcikKIAogICAgIGlmIChtX2RyYXdpbmdBcmVhLT5sYXllclRyZWVIb3N0
KCkpCiAgICAgICAgIG1fZHJhd2luZ0FyZWEtPmxheWVyVHJlZUhvc3QoKS0+ZGV2aWNlT3JQYWdl
U2NhbGVGYWN0b3JDaGFuZ2VkKCk7Ci0KLSAgICBtX3BhZ2VPdmVybGF5Q29udHJvbGxlci5kaWRD
aGFuZ2VEZXZpY2VTY2FsZUZhY3RvcigpOwogfQogCiBmbG9hdCBXZWJQYWdlOjpkZXZpY2VTY2Fs
ZUZhY3RvcigpIGNvbnN0CkBAIC0xNTc3LDE2ICsxNTcxLDYgQEAgdm9pZCBXZWJQYWdlOjpwb3N0
SW5qZWN0ZWRCdW5kbGVNZXNzYWdlKGNvbnN0IFN0cmluZyYgbWVzc2FnZU5hbWUsIElQQzo6TWVz
c2FnZUQKICAgICBpbmplY3RlZEJ1bmRsZS0+ZGlkUmVjZWl2ZU1lc3NhZ2VUb1BhZ2UodGhpcywg
bWVzc2FnZU5hbWUsIG1lc3NhZ2VCb2R5LmdldCgpKTsKIH0KIAotdm9pZCBXZWJQYWdlOjppbnN0
YWxsUGFnZU92ZXJsYXkoUGFzc1JlZlB0cjxQYWdlT3ZlcmxheT4gcGFnZU92ZXJsYXksIFBhZ2VP
dmVybGF5OjpGYWRlTW9kZSBmYWRlTW9kZSkKLXsKLSAgICBtX3BhZ2VPdmVybGF5Q29udHJvbGxl
ci5pbnN0YWxsUGFnZU92ZXJsYXkocGFnZU92ZXJsYXksIGZhZGVNb2RlKTsKLX0KLQotdm9pZCBX
ZWJQYWdlOjp1bmluc3RhbGxQYWdlT3ZlcmxheShQYWdlT3ZlcmxheSogcGFnZU92ZXJsYXksIFBh
Z2VPdmVybGF5OjpGYWRlTW9kZSBmYWRlTW9kZSkKLXsKLSAgICBtX3BhZ2VPdmVybGF5Q29udHJv
bGxlci51bmluc3RhbGxQYWdlT3ZlcmxheShwYWdlT3ZlcmxheSwgZmFkZU1vZGUpOwotfQotCiAj
aWYgIVBMQVRGT1JNKElPUykKIHZvaWQgV2ViUGFnZTo6c2V0SGVhZGVyUGFnZUJhbm5lcihQYXNz
UmVmUHRyPFBhZ2VCYW5uZXI+IHBhZ2VCYW5uZXIpCiB7CkBAIC0xOTE0LDcgKzE4OTgsNyBAQCB2
b2lkIFdlYlBhZ2U6Om1vdXNlRXZlbnQoY29uc3QgV2ViTW91c2VFdmVudCYgbW91c2VFdmVudCkK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZgotICAgIGJvb2wgaGFuZGxlZCA9IG1fcGFn
ZU92ZXJsYXlDb250cm9sbGVyLmhhbmRsZU1vdXNlRXZlbnQobW91c2VFdmVudCk7CisgICAgYm9v
bCBoYW5kbGVkID0gZmFsc2U7CiAKICNpZiAhUExBVEZPUk0oSU9TKQogICAgIGlmICghaGFuZGxl
ZCAmJiBtX2hlYWRlckJhbm5lcikKQEAgLTE5NDAsNyArMTkyNCw3IEBAIHZvaWQgV2ViUGFnZTo6
bW91c2VFdmVudChjb25zdCBXZWJNb3VzZUV2ZW50JiBtb3VzZUV2ZW50KQogCiB2b2lkIFdlYlBh
Z2U6Om1vdXNlRXZlbnRTeW5jRm9yVGVzdGluZyhjb25zdCBXZWJNb3VzZUV2ZW50JiBtb3VzZUV2
ZW50LCBib29sJiBoYW5kbGVkKQogewotICAgIGhhbmRsZWQgPSBtX3BhZ2VPdmVybGF5Q29udHJv
bGxlci5oYW5kbGVNb3VzZUV2ZW50KG1vdXNlRXZlbnQpOworICAgIGhhbmRsZWQgPSBmYWxzZTsK
ICNpZiAhUExBVEZPUk0oSU9TKQogICAgIGlmICghaGFuZGxlZCAmJiBtX2hlYWRlckJhbm5lcikK
ICAgICAgICAgaGFuZGxlZCA9IG1faGVhZGVyQmFubmVyLT5tb3VzZUV2ZW50KG1vdXNlRXZlbnQp
OwpAQCAtMjg2OSw4ICsyODUzLDYgQEAgdm9pZCBXZWJQYWdlOjp1cGRhdGVQcmVmZXJlbmNlcyhj
b25zdCBXZWJQcmVmZXJlbmNlc1N0b3JlJiBzdG9yZSkKIAogICAgIGlmIChtX2RyYXdpbmdBcmVh
KQogICAgICAgICBtX2RyYXdpbmdBcmVhLT51cGRhdGVQcmVmZXJlbmNlcyhzdG9yZSk7Ci0KLSAg
ICBtX3BhZ2VPdmVybGF5Q29udHJvbGxlci5kaWRDaGFuZ2VQcmVmZXJlbmNlcygpOwogfQogCiAj
aWYgUExBVEZPUk0oQ09DT0EpCkBAIC00MDk2LDcgKzQwNzgsNyBAQCB2b2lkIFdlYlBhZ2U6OnJl
Y29tcHV0ZVNob3J0Q2lyY3VpdEhvcml6b250YWxXaGVlbEV2ZW50c1N0YXRlKCkKICAgICBzZW5k
KE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlNldENhblNob3J0Q2lyY3VpdEhvcml6b250YWxXaGVl
bEV2ZW50cyhtX2NhblNob3J0Q2lyY3VpdEhvcml6b250YWxXaGVlbEV2ZW50cykpOwogfQogCi1G
cmFtZSogV2ViUGFnZTo6bWFpbkZyYW1lKCkgY29uc3QKK01haW5GcmFtZSogV2ViUGFnZTo6bWFp
bkZyYW1lKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9wYWdlID8gJm1fcGFnZS0+bWFpbkZyYW1l
KCkgOiBudWxscHRyOwogfQpAQCAtNDgxMSw4ICs0NzkzLDYgQEAgU2VydmljZXNPdmVybGF5Q29u
dHJvbGxlciYgV2ViUGFnZTo6c2VydmljZXNPdmVybGF5Q29udHJvbGxlcigpCiAKIHZvaWQgV2Vi
UGFnZTo6ZGlkQ2hhbmdlU2Nyb2xsT2Zmc2V0Rm9yRnJhbWUoRnJhbWUqIGZyYW1lKQogewotICAg
IG1fcGFnZU92ZXJsYXlDb250cm9sbGVyLmRpZFNjcm9sbEZyYW1lKGZyYW1lKTsKLQogICAgIGlm
ICghZnJhbWUtPmlzTWFpbkZyYW1lKCkpCiAgICAgICAgIHJldHVybjsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaCBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKaW5kZXggY2E0NmJhMGEuLjIxMjJlMmIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgK
KysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaApAQCAtNDEs
NyArNDEsNiBAQAogI2luY2x1ZGUgIkxheWVyVHJlZUhvc3QuaCIKICNpbmNsdWRlICJNZXNzYWdl
UmVjZWl2ZXIuaCIKICNpbmNsdWRlICJNZXNzYWdlU2VuZGVyLmgiCi0jaW5jbHVkZSAiUGFnZU92
ZXJsYXlDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiUGx1Z2luLmgiCiAjaW5jbHVkZSAiU2FuZGJv
eEV4dGVuc2lvbi5oIgogI2luY2x1ZGUgIlNoYXJlYWJsZUJpdG1hcC5oIgpAQCAtMTQwLDcgKzEz
OSw2IEBAIGNsYXNzIERyYXdpbmdBcmVhOwogY2xhc3MgSW5qZWN0ZWRCdW5kbGVCYWNrRm9yd2Fy
ZExpc3Q7CiBjbGFzcyBOb3RpZmljYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXI7CiBjbGFz
cyBQYWdlQmFubmVyOwotY2xhc3MgUGFnZU92ZXJsYXk7CiBjbGFzcyBQbHVnaW5WaWV3OwogY2xh
c3MgU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjsKIGNsYXNzIFZpc2libGVDb250ZW50UmVjdFVw
ZGF0ZUluZm87CkBAIC0yMDYsOCArMjA0LDYgQEAgcHVibGljOgogICAgIAogICAgIEluamVjdGVk
QnVuZGxlQmFja0ZvcndhcmRMaXN0KiBiYWNrRm9yd2FyZExpc3QoKTsKICAgICBEcmF3aW5nQXJl
YSogZHJhd2luZ0FyZWEoKSBjb25zdCB7IHJldHVybiBtX2RyYXdpbmdBcmVhLmdldCgpOyB9Ci0g
ICAgY29uc3QgUGFnZU92ZXJsYXlDb250cm9sbGVyJiBwYWdlT3ZlcmxheUNvbnRyb2xsZXIoKSBj
b25zdCB7IHJldHVybiBtX3BhZ2VPdmVybGF5Q29udHJvbGxlcjsgfQotICAgIFBhZ2VPdmVybGF5
Q29udHJvbGxlciYgcGFnZU92ZXJsYXlDb250cm9sbGVyKCkgeyByZXR1cm4gbV9wYWdlT3Zlcmxh
eUNvbnRyb2xsZXI7IH0KICNpZiBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKQogICAgIFdlYkNvcmU6
OlNjcm9sbGluZ0Nvb3JkaW5hdG9yKiBzY3JvbGxpbmdDb29yZGluYXRvcigpIGNvbnN0OwogI2Vu
ZGlmCkBAIC0zMTIsNyArMzA4LDcgQEAgcHVibGljOgogCiAgICAgV2ViRnJhbWUqIG1haW5XZWJG
cmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWFpbkZyYW1lLmdldCgpOyB9CiAKLSAgICBXZWJDb3Jl
OjpGcmFtZSogbWFpbkZyYW1lKCkgY29uc3Q7IC8vIE1heSByZXR1cm4gMC4KKyAgICBXZWJDb3Jl
OjpNYWluRnJhbWUqIG1haW5GcmFtZSgpIGNvbnN0OyAvLyBNYXkgcmV0dXJuIDAuCiAgICAgV2Vi
Q29yZTo6RnJhbWVWaWV3KiBtYWluRnJhbWVWaWV3KCkgY29uc3Q7IC8vIE1heSByZXR1cm4gMC4K
IAogICAgIFBhc3NSZWZQdHI8V2ViQ29yZTo6UmFuZ2U+IGN1cnJlbnRTZWxlY3Rpb25Bc1Jhbmdl
KCk7CkBAIC00MTYsOCArNDEyLDYgQEAgcHVibGljOgogCiAgICAgYm9vbCB3aW5kb3dJc0ZvY3Vz
ZWQoKSBjb25zdDsKICAgICBib29sIHdpbmRvd0FuZFdlYlBhZ2VBcmVGb2N1c2VkKCkgY29uc3Q7
Ci0gICAgdm9pZCBpbnN0YWxsUGFnZU92ZXJsYXkoUGFzc1JlZlB0cjxQYWdlT3ZlcmxheT4sIFBh
Z2VPdmVybGF5OjpGYWRlTW9kZSA9IFBhZ2VPdmVybGF5OjpGYWRlTW9kZTo6RG9Ob3RGYWRlKTsK
LSAgICB2b2lkIHVuaW5zdGFsbFBhZ2VPdmVybGF5KFBhZ2VPdmVybGF5KiwgUGFnZU92ZXJsYXk6
OkZhZGVNb2RlID0gUGFnZU92ZXJsYXk6OkZhZGVNb2RlOjpEb05vdEZhZGUpOwogCiAjaWYgIVBM
QVRGT1JNKElPUykKICAgICB2b2lkIHNldEhlYWRlclBhZ2VCYW5uZXIoUGFzc1JlZlB0cjxQYWdl
QmFubmVyPik7CkBAIC04MjIsOSArODE2LDYgQEAgcHVibGljOgogICAgIFdlYkNvcmU6OlNjcm9s
bFBpbm5pbmdCZWhhdmlvciBzY3JvbGxQaW5uaW5nQmVoYXZpb3IoKSB7IHJldHVybiBtX3Njcm9s
bFBpbm5pbmdCZWhhdmlvcjsgfQogICAgIHZvaWQgc2V0U2Nyb2xsUGlubmluZ0JlaGF2aW9yKHVp
bnQzMl90IC8qIFdlYkNvcmU6OlNjcm9sbFBpbm5pbmdCZWhhdmlvciAqLyBwaW5uaW5nKTsKIAot
ICAgIFdLVHlwZVJlZiBwYWdlT3ZlcmxheUNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWUo
V0tTdHJpbmdSZWYgYXR0cmlidXRlLCBXS1R5cGVSZWYgcGFyYW1ldGVyKTsKLSAgICBXS0FycmF5
UmVmIHBhZ2VPdmVybGF5Q29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVzTmFtZXMoYm9vbCBwYXJh
bWV0ZXJpemVkTmFtZXMpOwotCiAgICAgUGFzc1JlZlB0cjxXZWJDb3JlOjpEb2N1bWVudExvYWRl
cj4gY3JlYXRlRG9jdW1lbnRMb2FkZXIoV2ViQ29yZTo6RnJhbWUmLCBjb25zdCBXZWJDb3JlOjpS
ZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBXZWJDb3JlOjpTdWJzdGl0dXRlRGF0YSYpOwogCiAgICAg
dm9pZCBnZXRCeXRlY29kZVByb2ZpbGUodWludDY0X3QgY2FsbGJhY2tJRCk7CkBAIC0xMjc4LDgg
KzEyNjksNiBAQCBwcml2YXRlOgogI2lmIEVOQUJMRShTRVJWSUNFX0NPTlRST0xTKSB8fCBFTkFC
TEUoVEVMRVBIT05FX05VTUJFUl9ERVRFQ1RJT04pCiAgICAgc3RkOjp1bmlxdWVfcHRyPFNlcnZp
Y2VzT3ZlcmxheUNvbnRyb2xsZXI+IG1fc2VydmljZXNPdmVybGF5Q29udHJvbGxlcjsKICNlbmRp
ZgotCi0gICAgUGFnZU92ZXJsYXlDb250cm9sbGVyIG1fcGFnZU92ZXJsYXlDb250cm9sbGVyOwog
fTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZU92ZXJsYXkuY3BwIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VPdmVybGF5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi4xZDJlM2Q1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VPdmVybGF5LmNwcApAQCAtMCwwICsxLDExMyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJQYWdlT3Zlcmxh
eS5oIgorCisjaW5jbHVkZSAiV2ViRnJhbWUuaCIKKyNpbmNsdWRlICJXZWJQYWdlLmgiCisjaW5j
bHVkZSA8V2ViQ29yZS9HcmFwaGljc0xheWVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9QYWdlT3Zl
cmxheS5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7
CisKK1Bhc3NSZWZQdHI8V2ViUGFnZU92ZXJsYXk+IFdlYlBhZ2VPdmVybGF5OjpjcmVhdGUoV2Vi
UGFnZU92ZXJsYXk6OkNsaWVudCYgY2xpZW50LCBQYWdlT3ZlcmxheTo6T3ZlcmxheVR5cGUgb3Zl
cmxheVR5cGUpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBXZWJQYWdlT3ZlcmxheShjbGll
bnQsIG92ZXJsYXlUeXBlKSk7Cit9CisKK1dlYlBhZ2VPdmVybGF5OjpXZWJQYWdlT3ZlcmxheShX
ZWJQYWdlT3ZlcmxheTo6Q2xpZW50JiBjbGllbnQsIFBhZ2VPdmVybGF5OjpPdmVybGF5VHlwZSBv
dmVybGF5VHlwZSkKKyAgICA6IG1fb3ZlcmxheShQYWdlT3ZlcmxheTo6Y3JlYXRlKCp0aGlzLCBv
dmVybGF5VHlwZSkpCisgICAgLCBtX2NsaWVudChjbGllbnQpCit7Cit9CisKK1dlYlBhZ2VPdmVy
bGF5Ojp+V2ViUGFnZU92ZXJsYXkoKQoreworfQorCit2b2lkIFdlYlBhZ2VPdmVybGF5OjpzZXRO
ZWVkc0Rpc3BsYXkoY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KQoreworICAgIG1fb3ZlcmxheS0+
c2V0TmVlZHNEaXNwbGF5KGRpcnR5UmVjdCk7Cit9CisKK3ZvaWQgV2ViUGFnZU92ZXJsYXk6OnNl
dE5lZWRzRGlzcGxheSgpCit7CisgICAgbV9vdmVybGF5LT5zZXROZWVkc0Rpc3BsYXkoKTsKK30K
Kwordm9pZCBXZWJQYWdlT3ZlcmxheTo6Y2xlYXIoKQoreworICAgIG1fb3ZlcmxheS0+Y2xlYXIo
KTsKK30KKwordm9pZCBXZWJQYWdlT3ZlcmxheTo6cGFnZU92ZXJsYXlEZXN0cm95ZWQoUGFnZU92
ZXJsYXkmKQoreworICAgIG1fY2xpZW50LnBhZ2VPdmVybGF5RGVzdHJveWVkKCp0aGlzKTsKK30K
Kwordm9pZCBXZWJQYWdlT3ZlcmxheTo6d2lsbE1vdmVUb1BhZ2UoUGFnZU92ZXJsYXkmLCBQYWdl
KiBwYWdlKQoreworICAgIG1fY2xpZW50LndpbGxNb3ZlVG9QYWdlKCp0aGlzLCBwYWdlID8gV2Vi
UGFnZTo6ZnJvbUNvcmVQYWdlKHBhZ2UpIDogbnVsbHB0cik7Cit9CisKK3ZvaWQgV2ViUGFnZU92
ZXJsYXk6OmRpZE1vdmVUb1BhZ2UoUGFnZU92ZXJsYXkmLCBQYWdlKiBwYWdlKQoreworICAgIG1f
Y2xpZW50LmRpZE1vdmVUb1BhZ2UoKnRoaXMsIHBhZ2UgPyBXZWJQYWdlOjpmcm9tQ29yZVBhZ2Uo
cGFnZSkgOiBudWxscHRyKTsKK30KKwordm9pZCBXZWJQYWdlT3ZlcmxheTo6ZHJhd1JlY3QoUGFn
ZU92ZXJsYXkmLCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIGRpcnR5
UmVjdCkKK3sKKyAgICBtX2NsaWVudC5kcmF3UmVjdCgqdGhpcywgY29udGV4dCwgZGlydHlSZWN0
KTsKK30KKworYm9vbCBXZWJQYWdlT3ZlcmxheTo6bW91c2VFdmVudChQYWdlT3ZlcmxheSYsIGNv
bnN0IFBsYXRmb3JtTW91c2VFdmVudCYgZXZlbnQpCit7CisgICAgcmV0dXJuIG1fY2xpZW50Lm1v
dXNlRXZlbnQoKnRoaXMsIGV2ZW50KTsKK30KKwordm9pZCBXZWJQYWdlT3ZlcmxheTo6ZGlkU2Ny
b2xsRnJhbWUoUGFnZU92ZXJsYXkmLCBGcmFtZSYgZnJhbWUpCit7CisgICAgbV9jbGllbnQuZGlk
U2Nyb2xsRnJhbWUoKnRoaXMsIFdlYkZyYW1lOjpmcm9tQ29yZUZyYW1lKGZyYW1lKSk7Cit9CisK
K2Jvb2wgV2ViUGFnZU92ZXJsYXk6OmNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlU3RyaW5nVmFs
dWVGb3JQb2ludChQYWdlT3ZlcmxheSYsIFN0cmluZyBhdHRyaWJ1dGUsIEZsb2F0UG9pbnQgcGFy
YW1ldGVyLCBTdHJpbmcmIHZhbHVlKQoreworICAgIHJldHVybiBtX2NsaWVudC5jb3B5QWNjZXNz
aWJpbGl0eUF0dHJpYnV0ZVN0cmluZ1ZhbHVlRm9yUG9pbnQoKnRoaXMsIGF0dHJpYnV0ZSwgcGFy
YW1ldGVyLCB2YWx1ZSk7Cit9CisKK2Jvb2wgV2ViUGFnZU92ZXJsYXk6OmNvcHlBY2Nlc3NpYmls
aXR5QXR0cmlidXRlQm9vbFZhbHVlRm9yUG9pbnQoUGFnZU92ZXJsYXkmLCBTdHJpbmcgYXR0cmli
dXRlLCBGbG9hdFBvaW50IHBhcmFtZXRlciwgYm9vbCYgdmFsdWUpCit7CisgICAgcmV0dXJuIG1f
Y2xpZW50LmNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlQm9vbFZhbHVlRm9yUG9pbnQoKnRoaXMs
IGF0dHJpYnV0ZSwgcGFyYW1ldGVyLCB2YWx1ZSk7Cit9CisKK1ZlY3RvcjxTdHJpbmc+IFdlYlBh
Z2VPdmVybGF5Ojpjb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZU5hbWVzKFBhZ2VPdmVybGF5Jiwg
Ym9vbCBwYXJhbWV0ZXJpemVkTmFtZXMpCit7CisgICAgcmV0dXJuIG1fY2xpZW50LmNvcHlBY2Nl
c3NpYmlsaXR5QXR0cmlidXRlTmFtZXMoKnRoaXMsIHBhcmFtZXRlcml6ZWROYW1lcyk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYlBhZ2VPdmVybGF5LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViUGFnZU92ZXJsYXkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi4wNmRkZTE2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL1dlYlBhZ2VPdmVybGF5LmgKQEAgLTAsMCArMSw5MiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpZm5kZWYgV2ViUGFnZU92ZXJsYXlfaAorI2RlZmluZSBXZWJQYWdlT3ZlcmxheV9oCisKKyNp
bmNsdWRlICJBUElPYmplY3QuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0Zsb2F0UG9pbnQuaD4KKyNp
bmNsdWRlIDxXZWJDb3JlL0ludFJlY3QuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1BhZ2VPdmVybGF5
Lmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisK
K2NsYXNzIFdlYkZyYW1lOworY2xhc3MgV2ViUGFnZTsKKworY2xhc3MgV2ViUGFnZU92ZXJsYXkg
OiBwdWJsaWMgQVBJOjpPYmplY3RJbXBsPEFQSTo6T2JqZWN0OjpUeXBlOjpCdW5kbGVQYWdlT3Zl
cmxheT4sIHByaXZhdGUgV2ViQ29yZTo6UGFnZU92ZXJsYXk6OkNsaWVudCB7CitwdWJsaWM6Cisg
ICAgY2xhc3MgQ2xpZW50IHsKKyAgICBwcm90ZWN0ZWQ6CisgICAgICAgIHZpcnR1YWwgfkNsaWVu
dCgpIHsgfQorCisgICAgcHVibGljOgorICAgICAgICB2aXJ0dWFsIHZvaWQgcGFnZU92ZXJsYXlE
ZXN0cm95ZWQoV2ViUGFnZU92ZXJsYXkmKSA9IDA7CisgICAgICAgIHZpcnR1YWwgdm9pZCB3aWxs
TW92ZVRvUGFnZShXZWJQYWdlT3ZlcmxheSYsIFdlYlBhZ2UqKSA9IDA7CisgICAgICAgIHZpcnR1
YWwgdm9pZCBkaWRNb3ZlVG9QYWdlKFdlYlBhZ2VPdmVybGF5JiwgV2ViUGFnZSopID0gMDsKKyAg
ICAgICAgdmlydHVhbCB2b2lkIGRyYXdSZWN0KFdlYlBhZ2VPdmVybGF5JiwgV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0JiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgZGlydHlSZWN0KSA9IDA7Cisg
ICAgICAgIHZpcnR1YWwgYm9vbCBtb3VzZUV2ZW50KFdlYlBhZ2VPdmVybGF5JiwgY29uc3QgV2Vi
Q29yZTo6UGxhdGZvcm1Nb3VzZUV2ZW50JikgPSAwOworICAgICAgICB2aXJ0dWFsIHZvaWQgZGlk
U2Nyb2xsRnJhbWUoV2ViUGFnZU92ZXJsYXkmLCBXZWJGcmFtZSopIHsgfQorCisgICAgICAgIHZp
cnR1YWwgYm9vbCBjb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVN0cmluZ1ZhbHVlRm9yUG9pbnQo
V2ViUGFnZU92ZXJsYXkmLCBTdHJpbmcgLyogYXR0cmlidXRlICovLCBXZWJDb3JlOjpGbG9hdFBv
aW50IC8qIHBhcmFtZXRlciAqLywgU3RyaW5nJiB2YWx1ZSkgeyByZXR1cm4gZmFsc2U7IH0KKyAg
ICAgICAgdmlydHVhbCBib29sIGNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlQm9vbFZhbHVlRm9y
UG9pbnQoV2ViUGFnZU92ZXJsYXkmLCBTdHJpbmcgLyogYXR0cmlidXRlICovLCBXZWJDb3JlOjpG
bG9hdFBvaW50IC8qIHBhcmFtZXRlciAqLywgYm9vbCYgdmFsdWUpIHsgcmV0dXJuIGZhbHNlOyB9
CisgICAgICAgIHZpcnR1YWwgVmVjdG9yPFN0cmluZz4gY29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1
dGVOYW1lcyhXZWJQYWdlT3ZlcmxheSYsIGJvb2wgLyogcGFyYW1ldGVyaXplZE5hbWVzICovKSB7
IHJldHVybiBWZWN0b3I8U3RyaW5nPigpOyB9CisgICAgfTsKKworICAgIHN0YXRpYyBQYXNzUmVm
UHRyPFdlYlBhZ2VPdmVybGF5PiBjcmVhdGUoQ2xpZW50JiwgV2ViQ29yZTo6UGFnZU92ZXJsYXk6
Ok92ZXJsYXlUeXBlID0gV2ViQ29yZTo6UGFnZU92ZXJsYXk6Ok92ZXJsYXlUeXBlOjpWaWV3KTsK
KyAgICB2aXJ0dWFsIH5XZWJQYWdlT3ZlcmxheSgpOworCisgICAgdm9pZCBzZXROZWVkc0Rpc3Bs
YXkoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgZGlydHlSZWN0KTsKKyAgICB2b2lkIHNldE5lZWRz
RGlzcGxheSgpOworCisgICAgdm9pZCBjbGVhcigpOworCisgICAgV2ViQ29yZTo6UGFnZU92ZXJs
YXkqIGNvcmVPdmVybGF5KCkgY29uc3QgeyByZXR1cm4gbV9vdmVybGF5LmdldCgpOyB9CisgICAg
Q2xpZW50JiBjbGllbnQoKSBjb25zdCB7IHJldHVybiBtX2NsaWVudDsgfQorCitwcml2YXRlOgor
ICAgIFdlYlBhZ2VPdmVybGF5KENsaWVudCYsIFdlYkNvcmU6OlBhZ2VPdmVybGF5OjpPdmVybGF5
VHlwZSk7CisKKyAgICAvLyBXZWJDb3JlOjpQYWdlT3ZlcmxheTo6Q2xpZW50CisgICAgdmlydHVh
bCB2b2lkIHBhZ2VPdmVybGF5RGVzdHJveWVkKFdlYkNvcmU6OlBhZ2VPdmVybGF5Jikgb3ZlcnJp
ZGU7CisgICAgdmlydHVhbCB2b2lkIHdpbGxNb3ZlVG9QYWdlKFdlYkNvcmU6OlBhZ2VPdmVybGF5
JiwgV2ViQ29yZTo6UGFnZSopIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBkaWRNb3ZlVG9Q
YWdlKFdlYkNvcmU6OlBhZ2VPdmVybGF5JiwgV2ViQ29yZTo6UGFnZSopIG92ZXJyaWRlOworICAg
IHZpcnR1YWwgdm9pZCBkcmF3UmVjdChXZWJDb3JlOjpQYWdlT3ZlcmxheSYsIFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dCYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGRpcnR5UmVjdCkgb3ZlcnJp
ZGU7CisgICAgdmlydHVhbCBib29sIG1vdXNlRXZlbnQoV2ViQ29yZTo6UGFnZU92ZXJsYXkmLCBj
b25zdCBXZWJDb3JlOjpQbGF0Zm9ybU1vdXNlRXZlbnQmKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFs
IHZvaWQgZGlkU2Nyb2xsRnJhbWUoV2ViQ29yZTo6UGFnZU92ZXJsYXkmLCBXZWJDb3JlOjpGcmFt
ZSYpIG92ZXJyaWRlOworCisgICAgdmlydHVhbCBib29sIGNvcHlBY2Nlc3NpYmlsaXR5QXR0cmli
dXRlU3RyaW5nVmFsdWVGb3JQb2ludChXZWJDb3JlOjpQYWdlT3ZlcmxheSYsIFN0cmluZyAvKiBh
dHRyaWJ1dGUgKi8sIFdlYkNvcmU6OkZsb2F0UG9pbnQgLyogcGFyYW1ldGVyICovLCBTdHJpbmcm
IHZhbHVlKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wgY29weUFjY2Vzc2liaWxpdHlBdHRy
aWJ1dGVCb29sVmFsdWVGb3JQb2ludChXZWJDb3JlOjpQYWdlT3ZlcmxheSYsIFN0cmluZyAvKiBh
dHRyaWJ1dGUgKi8sIFdlYkNvcmU6OkZsb2F0UG9pbnQgLyogcGFyYW1ldGVyICovLCBib29sJiB2
YWx1ZSkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBWZWN0b3I8U3RyaW5nPiBjb3B5QWNjZXNzaWJp
bGl0eUF0dHJpYnV0ZU5hbWVzKFdlYkNvcmU6OlBhZ2VPdmVybGF5JiwgYm9vbCAvKiBwYXJhbWV0
ZXJpemVkTmFtZXMgKi8pIG92ZXJyaWRlOworCisKKyAgICBSZWZQdHI8V2ViQ29yZTo6UGFnZU92
ZXJsYXk+IG1fb3ZlcmxheTsKKyAgICBDbGllbnQmIG1fY2xpZW50OworfTsKKworfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBXZWJQYWdlT3ZlcmxheV9oCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL0ZpbmRDb250cm9sbGVySU9TLm1t
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9GaW5kQ29udHJvbGxlcklP
Uy5tbQppbmRleCAwOTA3YmRmLi42OGM5ZTdhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL0ZpbmRDb250cm9sbGVySU9TLm1tCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvRmluZENvbnRyb2xsZXJJT1MubW0KQEAgLTM2
LDYgKzM2LDcgQEAKICNpbXBvcnQgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+CiAjaW1wb3J0
IDxXZWJDb3JlL01haW5GcmFtZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9QYWdlLmg+CisjaW1wb3J0
IDxXZWJDb3JlL1BhZ2VPdmVybGF5Q29udHJvbGxlci5oPgogCiB1c2luZyBuYW1lc3BhY2UgV2Vi
Q29yZTsKIApAQCAtNTIsMTIgKzUzLDEyIEBAIHN0YXRpYyBDb2xvciBoaWdobGlnaHRDb2xvcigp
CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi12b2lkIEZpbmRJbmRpY2F0b3JPdmVybGF5Q2xpZW50
SU9TOjpkcmF3UmVjdChQYWdlT3ZlcmxheSogb3ZlcmxheSwgV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBkaXJ0eVJlY3QpCit2b2lkIEZp
bmRJbmRpY2F0b3JPdmVybGF5Q2xpZW50SU9TOjpkcmF3UmVjdChQYWdlT3ZlcmxheSYgb3Zlcmxh
eSwgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpCiB7
CiAgICAgLy8gRklYTUU6IFN1cHBvcnQgbXVsdGlwbGUgdGV4dCByZWN0cy4KIAotICAgIEludFJl
Y3Qgb3ZlcmxheUZyYW1lID0gb3ZlcmxheS0+ZnJhbWUoKTsKLSAgICBJbnRSZWN0IG92ZXJsYXlC
b3VuZHMgPSBvdmVybGF5LT5ib3VuZHMoKTsKKyAgICBJbnRSZWN0IG92ZXJsYXlGcmFtZSA9IG92
ZXJsYXkuZnJhbWUoKTsKKyAgICBJbnRSZWN0IG92ZXJsYXlCb3VuZHMgPSBvdmVybGF5LmJvdW5k
cygpOwogCiAgICAgewogICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2
ZXIoY29udGV4dCk7CkBAIC04NSwxMSArODYsMTEgQEAgYm9vbCBGaW5kQ29udHJvbGxlcjo6dXBk
YXRlRmluZEluZGljYXRvcihGcmFtZSYgc2VsZWN0ZWRGcmFtZSwgYm9vbCBpc1Nob3dpbmdPdmUK
ICAgICBtYXRjaFJlY3QuaW5mbGF0ZVkodG90YWxWZXJ0aWNhbE1hcmdpbik7CiAKICAgICBpZiAo
bV9maW5kSW5kaWNhdG9yT3ZlcmxheSkKLSAgICAgICAgbV93ZWJQYWdlLT51bmluc3RhbGxQYWdl
T3ZlcmxheShtX2ZpbmRJbmRpY2F0b3JPdmVybGF5LmdldCgpKTsKKyAgICAgICAgbV93ZWJQYWdl
LT5tYWluRnJhbWUoKS0+cGFnZU92ZXJsYXlDb250cm9sbGVyKCkudW5pbnN0YWxsUGFnZU92ZXJs
YXkobV9maW5kSW5kaWNhdG9yT3ZlcmxheS5nZXQoKSwgUGFnZU92ZXJsYXk6OkZhZGVNb2RlOjpE
b05vdEZhZGUpOwogCiAgICAgbV9maW5kSW5kaWNhdG9yT3ZlcmxheUNsaWVudCA9IHN0ZDo6bWFr
ZV91bmlxdWU8RmluZEluZGljYXRvck92ZXJsYXlDbGllbnRJT1M+KHNlbGVjdGVkRnJhbWUpOwot
ICAgIG1fZmluZEluZGljYXRvck92ZXJsYXkgPSBQYWdlT3ZlcmxheTo6Y3JlYXRlKG1fZmluZElu
ZGljYXRvck92ZXJsYXlDbGllbnQuZ2V0KCksIFBhZ2VPdmVybGF5OjpPdmVybGF5VHlwZTo6RG9j
dW1lbnQpOwotICAgIG1fd2ViUGFnZS0+aW5zdGFsbFBhZ2VPdmVybGF5KG1fZmluZEluZGljYXRv
ck92ZXJsYXkpOworICAgIG1fZmluZEluZGljYXRvck92ZXJsYXkgPSBQYWdlT3ZlcmxheTo6Y3Jl
YXRlKCptX2ZpbmRJbmRpY2F0b3JPdmVybGF5Q2xpZW50LCBQYWdlT3ZlcmxheTo6T3ZlcmxheVR5
cGU6OkRvY3VtZW50KTsKKyAgICBtX3dlYlBhZ2UtPm1haW5GcmFtZSgpLT5wYWdlT3ZlcmxheUNv
bnRyb2xsZXIoKS5pbnN0YWxsUGFnZU92ZXJsYXkobV9maW5kSW5kaWNhdG9yT3ZlcmxheSwgUGFn
ZU92ZXJsYXk6OkZhZGVNb2RlOjpEb05vdEZhZGUpOwogCiAgICAgbV9maW5kSW5kaWNhdG9yT3Zl
cmxheS0+c2V0RnJhbWUobWF0Y2hSZWN0KTsKICAgICBtX2ZpbmRJbmRpY2F0b3JPdmVybGF5LT5z
ZXROZWVkc0Rpc3BsYXkoKTsKQEAgLTEwNiw3ICsxMDcsNyBAQCB2b2lkIEZpbmRDb250cm9sbGVy
OjpoaWRlRmluZEluZGljYXRvcigpCiAgICAgaWYgKCFtX2lzU2hvd2luZ0ZpbmRJbmRpY2F0b3Ip
CiAgICAgICAgIHJldHVybjsKIAotICAgIG1fd2ViUGFnZS0+dW5pbnN0YWxsUGFnZU92ZXJsYXko
bV9maW5kSW5kaWNhdG9yT3ZlcmxheS5nZXQoKSk7CisgICAgbV93ZWJQYWdlLT5tYWluRnJhbWUo
KS0+cGFnZU92ZXJsYXlDb250cm9sbGVyKCkudW5pbnN0YWxsUGFnZU92ZXJsYXkobV9maW5kSW5k
aWNhdG9yT3ZlcmxheS5nZXQoKSwgUGFnZU92ZXJsYXk6OkZhZGVNb2RlOjpEb05vdEZhZGUpOwog
ICAgIG1fZmluZEluZGljYXRvck92ZXJsYXkgPSBudWxscHRyOwogICAgIG1faXNTaG93aW5nRmlu
ZEluZGljYXRvciA9IGZhbHNlOwogICAgIG1fZm91bmRTdHJpbmdNYXRjaEluZGV4ID0gLTE7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL0ZpbmRJbmRp
Y2F0b3JPdmVybGF5Q2xpZW50SU9TLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvaW9zL0ZpbmRJbmRpY2F0b3JPdmVybGF5Q2xpZW50SU9TLmgKaW5kZXggMzEwMTc2Ny4uNDI5
MjI4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9G
aW5kSW5kaWNhdG9yT3ZlcmxheUNsaWVudElPUy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9pb3MvRmluZEluZGljYXRvck92ZXJsYXlDbGllbnRJT1MuaApAQCAtMjYs
MTMgKzI2LDEzIEBACiAjaWZuZGVmIEZpbmRJbmRpY2F0b3JPdmVybGF5Q2xpZW50SU9TX2gKICNk
ZWZpbmUgRmluZEluZGljYXRvck92ZXJsYXlDbGllbnRJT1NfaAogCi0jaW1wb3J0ICJQYWdlT3Zl
cmxheS5oIgogI2ltcG9ydCA8V2ViQ29yZS9GcmFtZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9HcmFw
aGljc0NvbnRleHQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvUGFnZU92ZXJsYXkuaD4KIAogbmFtZXNw
YWNlIFdlYktpdCB7CiAKLWNsYXNzIEZpbmRJbmRpY2F0b3JPdmVybGF5Q2xpZW50SU9TIDogcHVi
bGljIFBhZ2VPdmVybGF5OjpDbGllbnQgeworY2xhc3MgRmluZEluZGljYXRvck92ZXJsYXlDbGll
bnRJT1MgOiBwdWJsaWMgV2ViQ29yZTo6UGFnZU92ZXJsYXk6OkNsaWVudCB7CiBwdWJsaWM6CiAg
ICAgRmluZEluZGljYXRvck92ZXJsYXlDbGllbnRJT1MoV2ViQ29yZTo6RnJhbWUmIGZyYW1lKQog
ICAgICAgICA6IG1fZnJhbWUoZnJhbWUpCkBAIC00MCwxMSArNDAsMTEgQEAgcHVibGljOgogICAg
IH0KIAogcHJpdmF0ZToKLSAgICB2aXJ0dWFsIHZvaWQgcGFnZU92ZXJsYXlEZXN0cm95ZWQoUGFn
ZU92ZXJsYXkqKSBvdmVycmlkZSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgd2lsbE1vdmVUb1dlYlBh
Z2UoUGFnZU92ZXJsYXkqLCBXZWJQYWdlKikgb3ZlcnJpZGUgeyB9Ci0gICAgdmlydHVhbCB2b2lk
IGRpZE1vdmVUb1dlYlBhZ2UoUGFnZU92ZXJsYXkqLCBXZWJQYWdlKikgb3ZlcnJpZGUgeyB9Ci0g
ICAgdmlydHVhbCB2b2lkIGRyYXdSZWN0KFBhZ2VPdmVybGF5KiwgV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0JiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgZGlydHlSZWN0KSBvdmVycmlkZTsKLSAg
ICB2aXJ0dWFsIGJvb2wgbW91c2VFdmVudChQYWdlT3ZlcmxheSosIGNvbnN0IFdlYk1vdXNlRXZl
bnQmKSBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgdm9pZCBwYWdlT3Zl
cmxheURlc3Ryb3llZChXZWJDb3JlOjpQYWdlT3ZlcmxheSYpIG92ZXJyaWRlIHsgfQorICAgIHZp
cnR1YWwgdm9pZCB3aWxsTW92ZVRvUGFnZShXZWJDb3JlOjpQYWdlT3ZlcmxheSYsIFdlYkNvcmU6
OlBhZ2UqKSBvdmVycmlkZSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGlkTW92ZVRvUGFnZShXZWJD
b3JlOjpQYWdlT3ZlcmxheSYsIFdlYkNvcmU6OlBhZ2UqKSBvdmVycmlkZSB7IH0KKyAgICB2aXJ0
dWFsIHZvaWQgZHJhd1JlY3QoV2ViQ29yZTo6UGFnZU92ZXJsYXkmLCBXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQmLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBkaXJ0eVJlY3QpIG92ZXJyaWRlOwor
ICAgIHZpcnR1YWwgYm9vbCBtb3VzZUV2ZW50KFdlYkNvcmU6OlBhZ2VPdmVybGF5JiwgY29uc3Qg
V2ViQ29yZTo6UGxhdGZvcm1Nb3VzZUV2ZW50Jikgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0K
IAogICAgIFdlYkNvcmU6OkZyYW1lJiBtX2ZyYW1lOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWEu
aCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvUmVtb3RlTGF5ZXJUcmVl
RHJhd2luZ0FyZWEuaAppbmRleCAxY2I1MTAwLi5jNTJhM2JmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1JlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVh
LmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9SZW1vdGVMYXll
clRyZWVEcmF3aW5nQXJlYS5oCkBAIC02Nyw2ICs2Nyw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVh
bCB2b2lkIHNldFJvb3RDb21wb3NpdGluZ0xheWVyKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKSBv
dmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVDb21wb3NpdGluZ0xheWVyRmx1c2go
KSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVDb21wb3NpdGluZ0xheWVyRmx1
c2hJbW1lZGlhdGVseSgpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBhdHRhY2hWaWV3T3Zl
cmxheUdyYXBoaWNzTGF5ZXIoV2ViQ29yZTo6RnJhbWUqLCBXZWJDb3JlOjpHcmFwaGljc0xheWVy
Kikgb3ZlcnJpZGU7CiAKICAgICB2aXJ0dWFsIHZvaWQgYWRkVHJhbnNhY3Rpb25DYWxsYmFja0lE
KHVpbnQ2NF90IGNhbGxiYWNrSUQpIG92ZXJyaWRlOwogCkBAIC0xMDcsNiArMTA4LDcgQEAgcHJp
dmF0ZToKICAgICB2aXJ0dWFsIGJvb2wgYWRqdXN0TGF5ZXJGbHVzaFRocm90dGxpbmcoV2ViQ29y
ZTo6TGF5ZXJGbHVzaFRocm90dGxlU3RhdGU6OkZsYWdzKSBvdmVycmlkZTsKIAogICAgIHZvaWQg
dXBkYXRlU2Nyb2xsZWRFeHBvc2VkUmVjdCgpOworICAgIHZvaWQgdXBkYXRlUm9vdExheWVycygp
OwogCiAgICAgdm9pZCBsYXllckZsdXNoVGltZXJGaXJlZChXZWJDb3JlOjpUaW1lcjxSZW1vdGVM
YXllclRyZWVEcmF3aW5nQXJlYT4qKTsKICAgICB2b2lkIGZsdXNoTGF5ZXJzKCk7CkBAIC0xNjAs
NiArMTYyLDkgQEAgcHJpdmF0ZToKIAogICAgIHVpbnQ2NF90IG1fY3VycmVudFRyYW5zYWN0aW9u
SUQ7CiAgICAgVmVjdG9yPFJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uOjpUcmFuc2FjdGlvbkNh
bGxiYWNrSUQ+IG1fcGVuZGluZ0NhbGxiYWNrSURzOworCisgICAgV2ViQ29yZTo6R3JhcGhpY3NM
YXllciogbV9jb250ZW50TGF5ZXI7CisgICAgV2ViQ29yZTo6R3JhcGhpY3NMYXllciogbV92aWV3
T3ZlcmxheVJvb3RMYXllcjsKIH07CiAKIERSQVdJTkdfQVJFQV9UWVBFX0NBU1RTKFJlbW90ZUxh
eWVyVHJlZURyYXdpbmdBcmVhLCB0eXBlKCkgPT0gRHJhd2luZ0FyZWFUeXBlUmVtb3RlTGF5ZXJU
cmVlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMv
UmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWEubW0gYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvbWFjL1JlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhLm1tCmluZGV4IDM3Yzg5NDcu
LjU3OGQzOTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9t
YWMvUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWEubW0KKysrIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL21hYy9SZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYS5tbQpAQCAtNDAs
NiArNDAsNyBAQAogI2ltcG9ydCA8V2ViQ29yZS9GcmFtZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9G
cmFtZVZpZXcuaD4KICNpbXBvcnQgPFdlYkNvcmUvTWFpbkZyYW1lLmg+CisjaW1wb3J0IDxXZWJD
b3JlL1BhZ2VPdmVybGF5Q29udHJvbGxlci5oPgogI2ltcG9ydCA8V2ViQ29yZS9SZW5kZXJMYXll
ckNvbXBvc2l0b3IuaD4KICNpbXBvcnQgPFdlYkNvcmUvUmVuZGVyVmlldy5oPgogI2ltcG9ydCA8
V2ViQ29yZS9TZXR0aW5ncy5oPgpAQCAtNjYsNiArNjcsOCBAQCBSZW1vdGVMYXllclRyZWVEcmF3
aW5nQXJlYTo6UmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWEoV2ViUGFnZSYgd2ViUGFnZSwgY29u
c3QgVwogICAgICwgbV9oYWRGbHVzaERlZmVycmVkV2hpbGVXYWl0aW5nRm9yQmFja2luZ1N0b3Jl
U3dhcChmYWxzZSkKICAgICAsIG1fZGlzcGxheVJlZnJlc2hNb25pdG9yc1RvTm90aWZ5KG51bGxw
dHIpCiAgICAgLCBtX2N1cnJlbnRUcmFuc2FjdGlvbklEKDApCisgICAgLCBtX2NvbnRlbnRMYXll
cihudWxscHRyKQorICAgICwgbV92aWV3T3ZlcmxheVJvb3RMYXllcihudWxscHRyKQogewogICAg
IHdlYlBhZ2UuY29yZVBhZ2UoKS0+c2V0dGluZ3MoKS5zZXRGb3JjZUNvbXBvc2l0aW5nTW9kZSh0
cnVlKTsKICNpZiBQTEFURk9STShJT1MpCkBAIC0xMTMsMTUgKzExNiwzMSBAQCB2b2lkIFJlbW90
ZUxheWVyVHJlZURyYXdpbmdBcmVhOjp3aWxsRGVzdHJveURpc3BsYXlSZWZyZXNoTW9uaXRvcihE
aXNwbGF5UmVmcmVzaAogICAgICAgICBtX2Rpc3BsYXlSZWZyZXNoTW9uaXRvcnNUb05vdGlmeS0+
cmVtb3ZlKHJlbW90ZU1vbml0b3IpOwogfQogCi12b2lkIFJlbW90ZUxheWVyVHJlZURyYXdpbmdB
cmVhOjpzZXRSb290Q29tcG9zaXRpbmdMYXllcihHcmFwaGljc0xheWVyKiByb290TGF5ZXIpCit2
b2lkIFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhOjp1cGRhdGVSb290TGF5ZXJzKCkKIHsKICAg
ICBWZWN0b3I8R3JhcGhpY3NMYXllcio+IGNoaWxkcmVuOwotICAgIGlmIChyb290TGF5ZXIpIHsK
LSAgICAgICAgY2hpbGRyZW4uYXBwZW5kKHJvb3RMYXllcik7Ci0gICAgICAgIGNoaWxkcmVuLmFw
cGVuZChtX3dlYlBhZ2UucGFnZU92ZXJsYXlDb250cm9sbGVyKCkudmlld092ZXJsYXlSb290TGF5
ZXIoKSk7CisgICAgaWYgKG1fY29udGVudExheWVyKSB7CisgICAgICAgIGNoaWxkcmVuLmFwcGVu
ZChtX2NvbnRlbnRMYXllcik7CisgICAgICAgIGlmIChtX3ZpZXdPdmVybGF5Um9vdExheWVyKQor
ICAgICAgICAgICAgY2hpbGRyZW4uYXBwZW5kKG1fdmlld092ZXJsYXlSb290TGF5ZXIpOwogICAg
IH0KKwogICAgIG1fcm9vdExheWVyLT5zZXRDaGlsZHJlbihjaGlsZHJlbik7Cit9CisKK3ZvaWQg
UmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWE6OmF0dGFjaFZpZXdPdmVybGF5R3JhcGhpY3NMYXll
cihGcmFtZSogZnJhbWUsIEdyYXBoaWNzTGF5ZXIqIHZpZXdPdmVybGF5Um9vdExheWVyKQorewor
ICAgIGlmICghZnJhbWUtPmlzTWFpbkZyYW1lKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1f
dmlld092ZXJsYXlSb290TGF5ZXIgPSB2aWV3T3ZlcmxheVJvb3RMYXllcjsKKyAgICB1cGRhdGVS
b290TGF5ZXJzKCk7Cit9CiAKK3ZvaWQgUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWE6OnNldFJv
b3RDb21wb3NpdGluZ0xheWVyKEdyYXBoaWNzTGF5ZXIqIHJvb3RMYXllcikKK3sKKyAgICBtX2Nv
bnRlbnRMYXllciA9IHJvb3RMYXllcjsKKyAgICB1cGRhdGVSb290TGF5ZXJzKCk7CiAgICAgc2No
ZWR1bGVDb21wb3NpdGluZ0xheWVyRmx1c2goKTsKIH0KIApAQCAtMjM0LDggKzI1Myw2IEBAIHZv
aWQgUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWE6OnVwZGF0ZVNjcm9sbGVkRXhwb3NlZFJlY3Qo
KQogI2VuZGlmCiAKICAgICBmcmFtZVZpZXctPnNldEV4cG9zZWRSZWN0KG1fc2Nyb2xsZWRFeHBv
c2VkUmVjdCk7Ci0KLSAgICBtX3dlYlBhZ2UucGFnZU92ZXJsYXlDb250cm9sbGVyKCkuZGlkQ2hh
bmdlRXhwb3NlZFJlY3QoKTsKIH0KIAogVGlsZWRCYWNraW5nKiBSZW1vdGVMYXllclRyZWVEcmF3
aW5nQXJlYTo6bWFpbkZyYW1lVGlsZWRCYWNraW5nKCkgY29uc3QKQEAgLTMyMSw4ICszMzgsMTMg
QEAgdm9pZCBSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYTo6Zmx1c2hMYXllcnMoKQogCiAgICAg
RmxvYXRSZWN0IHZpc2libGVSZWN0KEZsb2F0UG9pbnQoKSwgbV92aWV3U2l6ZSk7CiAgICAgdmlz
aWJsZVJlY3QuaW50ZXJzZWN0KG1fc2Nyb2xsZWRFeHBvc2VkUmVjdCk7Ci0gICAgbV93ZWJQYWdl
LnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLmZsdXNoUGFnZU92ZXJsYXlMYXllcnModmlzaWJsZVJl
Y3QpOworCiAgICAgbV93ZWJQYWdlLm1haW5GcmFtZVZpZXcoKS0+Zmx1c2hDb21wb3NpdGluZ1N0
YXRlSW5jbHVkaW5nU3ViZnJhbWVzKCk7CisKKyAgICAvLyBCZWNhdXNlIG91ciB2aWV3LXJlbGF0
aXZlIG92ZXJsYXkgcm9vdCBsYXllciBpcyBub3QgYXR0YWNoZWQgdG8gdGhlIEZyYW1lVmlldydz
IEdyYXBoaWNzTGF5ZXIgdHJlZSwgd2UgbmVlZCB0byBmbHVzaCBpdCBtYW51YWxseS4KKyAgICBp
ZiAobV92aWV3T3ZlcmxheVJvb3RMYXllcikKKyAgICAgICAgbV92aWV3T3ZlcmxheVJvb3RMYXll
ci0+Zmx1c2hDb21wb3NpdGluZ1N0YXRlKHZpc2libGVSZWN0KTsKKwogICAgIG1fcm9vdExheWVy
LT5mbHVzaENvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCk7CiAKICAgICAvLyBGSVhN
RTogTWluaW1pemUgdGhlc2UgdHJhbnNhY3Rpb25zIGlmIG5vdGhpbmcgY2hhbmdlZC4KQEAgLTQx
MCw3ICs0MzIsNiBAQCB2b2lkIFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhOjpkaWRVcGRhdGUo
KQogdm9pZCBSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYTo6bWFpbkZyYW1lQ29udGVudFNpemVD
aGFuZ2VkKGNvbnN0IEludFNpemUmIGNvbnRlbnRzU2l6ZSkKIHsKICAgICBtX3Jvb3RMYXllci0+
c2V0U2l6ZShjb250ZW50c1NpemUpOwotICAgIG1fd2ViUGFnZS5wYWdlT3ZlcmxheUNvbnRyb2xs
ZXIoKS5kaWRDaGFuZ2VEb2N1bWVudFNpemUoKTsKIH0KIAogYm9vbCBSZW1vdGVMYXllclRyZWVE
cmF3aW5nQXJlYTo6bWFya0xheWVyc1ZvbGF0aWxlSW1tZWRpYXRlbHlJZlBvc3NpYmxlKCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvU2VydmljZXNP
dmVybGF5Q29udHJvbGxlci5tbSBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9t
YWMvU2VydmljZXNPdmVybGF5Q29udHJvbGxlci5tbQppbmRleCBmYjY4YjdhLi41YTViZDkyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1NlcnZpY2Vz
T3ZlcmxheUNvbnRyb2xsZXIubW0KKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL21hYy9TZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyLm1tCkBAIC00Miw2ICs0Miw3IEBACiAj
aW1wb3J0IDxXZWJDb3JlL0dyYXBoaWNzTGF5ZXIuaD4KICNpbXBvcnQgPFdlYkNvcmUvR3JhcGhp
Y3NMYXllckNBLmg+CiAjaW1wb3J0IDxXZWJDb3JlL01haW5GcmFtZS5oPgorI2ltcG9ydCA8V2Vi
Q29yZS9QYWdlT3ZlcmxheUNvbnRyb2xsZXIuaD4KICNpbXBvcnQgPFdlYkNvcmUvUGxhdGZvcm1D
QUFuaW1hdGlvbk1hYy5oPgogI2ltcG9ydCA8V2ViQ29yZS9Tb2Z0TGlua2luZy5oPgogCkBAIC0y
MjUsMjMgKzIyNiwyMyBAQCBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjp+U2VydmljZXNPdmVy
bGF5Q29udHJvbGxlcigpCiAgICAgICAgIGhpZ2hsaWdodC0+aW52YWxpZGF0ZSgpOwogfQogCi12
b2lkIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OnBhZ2VPdmVybGF5RGVzdHJveWVkKFBhZ2VP
dmVybGF5KikKK3ZvaWQgU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6cGFnZU92ZXJsYXlEZXN0
cm95ZWQoUGFnZU92ZXJsYXkmKQogewogICAgIC8vIEJlZm9yZSB0aGUgb3ZlcmxheSBpcyBkZXN0
cm95ZWQsIGl0IHNob3VsZCBoYXZlIG1vdmVkIG91dCBvZiB0aGUgV2ViUGFnZSwKICAgICAvLyBh
dCB3aGljaCBwb2ludCB3ZSBhbHJlYWR5IGNsZWFyZWQgb3VyIGJhY2sgcG9pbnRlci4KICAgICBB
U1NFUlQoIW1fc2VydmljZXNPdmVybGF5KTsKIH0KIAotdm9pZCBTZXJ2aWNlc092ZXJsYXlDb250
cm9sbGVyOjp3aWxsTW92ZVRvV2ViUGFnZShQYWdlT3ZlcmxheSosIFdlYlBhZ2UqIHdlYlBhZ2Up
Cit2b2lkIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OndpbGxNb3ZlVG9QYWdlKFBhZ2VPdmVy
bGF5JiwgUGFnZSogcGFnZSkKIHsKLSAgICBpZiAod2ViUGFnZSkKKyAgICBpZiAocGFnZSkKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgQVNTRVJUKG1fc2VydmljZXNPdmVybGF5KTsKICAgICBtX3Nl
cnZpY2VzT3ZlcmxheSA9IG51bGxwdHI7CiB9CiAKLXZvaWQgU2VydmljZXNPdmVybGF5Q29udHJv
bGxlcjo6ZGlkTW92ZVRvV2ViUGFnZShQYWdlT3ZlcmxheSosIFdlYlBhZ2UqKQordm9pZCBTZXJ2
aWNlc092ZXJsYXlDb250cm9sbGVyOjpkaWRNb3ZlVG9QYWdlKFBhZ2VPdmVybGF5JiwgUGFnZSop
CiB7CiB9CiAKQEAgLTQ0Nyw3ICs0NDgsNyBAQCB2b2lkIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xs
ZXI6OmRldGVybWluZUFjdGl2ZUhpZ2hsaWdodFRpbWVyRmlyZWQoVGltZXI8U2VydmljZQogICAg
IGRldGVybWluZUFjdGl2ZUhpZ2hsaWdodChtb3VzZUlzT3ZlckJ1dHRvbik7CiB9CiAKLXZvaWQg
U2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6ZHJhd1JlY3QoUGFnZU92ZXJsYXkqIG92ZXJsYXks
IEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBJbnRSZWN0JiBkaXJ0eVJl
Y3QpCit2b2lkIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OmRyYXdSZWN0KFBhZ2VPdmVybGF5
JiBvdmVybGF5LCBHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgSW50UmVj
dCYgZGlydHlSZWN0KQogewogfQogCkBAIC01ODMsNyArNTg0LDcgQEAgdm9pZCBTZXJ2aWNlc092
ZXJsYXlDb250cm9sbGVyOjpkaWRSZWJ1aWxkUG90ZW50aWFsSGlnaGxpZ2h0cygpCiB7CiAgICAg
aWYgKG1fcG90ZW50aWFsSGlnaGxpZ2h0cy5pc0VtcHR5KCkpIHsKICAgICAgICAgaWYgKG1fc2Vy
dmljZXNPdmVybGF5KQotICAgICAgICAgICAgbV93ZWJQYWdlLnVuaW5zdGFsbFBhZ2VPdmVybGF5
KG1fc2VydmljZXNPdmVybGF5KTsKKyAgICAgICAgICAgIG1fd2ViUGFnZS5tYWluRnJhbWUoKS0+
cGFnZU92ZXJsYXlDb250cm9sbGVyKCkudW5pbnN0YWxsUGFnZU92ZXJsYXkobV9zZXJ2aWNlc092
ZXJsYXksIFBhZ2VPdmVybGF5OjpGYWRlTW9kZTo6RG9Ob3RGYWRlKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIApAQCAtNjAxLDkgKzYwMiw5IEBAIHZvaWQgU2VydmljZXNPdmVybGF5Q29udHJv
bGxlcjo6Y3JlYXRlT3ZlcmxheUlmTmVlZGVkKCkKICAgICBpZiAobV9zZXJ2aWNlc092ZXJsYXkp
CiAgICAgICAgIHJldHVybjsKIAotICAgIFJlZlB0cjxQYWdlT3ZlcmxheT4gb3ZlcmxheSA9IFBh
Z2VPdmVybGF5OjpjcmVhdGUodGhpcywgUGFnZU92ZXJsYXk6Ok92ZXJsYXlUeXBlOjpEb2N1bWVu
dCk7CisgICAgUmVmUHRyPFBhZ2VPdmVybGF5PiBvdmVybGF5ID0gUGFnZU92ZXJsYXk6OmNyZWF0
ZSgqdGhpcywgUGFnZU92ZXJsYXk6Ok92ZXJsYXlUeXBlOjpEb2N1bWVudCk7CiAgICAgbV9zZXJ2
aWNlc092ZXJsYXkgPSBvdmVybGF5LmdldCgpOwotICAgIG1fd2ViUGFnZS5pbnN0YWxsUGFnZU92
ZXJsYXkob3ZlcmxheS5yZWxlYXNlKCksIFBhZ2VPdmVybGF5OjpGYWRlTW9kZTo6RG9Ob3RGYWRl
KTsKKyAgICBtX3dlYlBhZ2UubWFpbkZyYW1lKCktPnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLmlu
c3RhbGxQYWdlT3ZlcmxheShvdmVybGF5LnJlbGVhc2UoKSwgUGFnZU92ZXJsYXk6OkZhZGVNb2Rl
OjpEb05vdEZhZGUpOwogfQogCiBWZWN0b3I8UmVmUHRyPFJhbmdlPj4gU2VydmljZXNPdmVybGF5
Q29udHJvbGxlcjo6dGVsZXBob25lTnVtYmVyUmFuZ2VzRm9yRm9jdXNlZEZyYW1lKCkKQEAgLTcx
NywxMyArNzE4LDEzIEBAIHZvaWQgU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6ZGV0ZXJtaW5l
QWN0aXZlSGlnaGxpZ2h0KGJvb2wmIG1vdXNlSXNPdmVyQWN0aXZlCiAgICAgICAgIG1fYWN0aXZl
SGlnaGxpZ2h0ID0gbV9uZXh0QWN0aXZlSGlnaGxpZ2h0LnJlbGVhc2UoKTsKIAogICAgICAgICBp
ZiAobV9hY3RpdmVIaWdobGlnaHQpIHsKLSAgICAgICAgICAgIG1fc2VydmljZXNPdmVybGF5LT5s
YXllcigpLT5hZGRDaGlsZChtX2FjdGl2ZUhpZ2hsaWdodC0+bGF5ZXIoKSk7CisgICAgICAgICAg
ICBtX3NlcnZpY2VzT3ZlcmxheS0+bGF5ZXIoKS5hZGRDaGlsZChtX2FjdGl2ZUhpZ2hsaWdodC0+
bGF5ZXIoKSk7CiAgICAgICAgICAgICBtX2FjdGl2ZUhpZ2hsaWdodC0+ZmFkZUluKCk7CiAgICAg
ICAgIH0KICAgICB9CiB9CiAKLWJvb2wgU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6bW91c2VF
dmVudChQYWdlT3ZlcmxheSosIGNvbnN0IFdlYk1vdXNlRXZlbnQmIGV2ZW50KQorYm9vbCBTZXJ2
aWNlc092ZXJsYXlDb250cm9sbGVyOjptb3VzZUV2ZW50KFBhZ2VPdmVybGF5JiwgY29uc3QgUGxh
dGZvcm1Nb3VzZUV2ZW50JiBldmVudCkKIHsKICAgICBtX21vdXNlUG9zaXRpb24gPSBtX3dlYlBh
Z2UuY29yZVBhZ2UoKS0+bWFpbkZyYW1lKCkudmlldygpLT5yb290Vmlld1RvQ29udGVudHMoZXZl
bnQucG9zaXRpb24oKSk7CiAKQEAgLTczMSwxMyArNzMyLDEzIEBAIGJvb2wgU2VydmljZXNPdmVy
bGF5Q29udHJvbGxlcjo6bW91c2VFdmVudChQYWdlT3ZlcmxheSosIGNvbnN0IFdlYk1vdXNlRXZl
bnQmIGV2CiAgICAgZGV0ZXJtaW5lQWN0aXZlSGlnaGxpZ2h0KG1vdXNlSXNPdmVyQWN0aXZlSGln
aGxpZ2h0QnV0dG9uKTsKIAogICAgIC8vIENhbmNlbCB0aGUgcG90ZW50aWFsIGNsaWNrIGlmIGFu
eSBidXR0b24gb3RoZXIgdGhhbiB0aGUgbGVmdCBidXR0b24gY2hhbmdlcyBzdGF0ZSwgYW5kIGln
bm9yZSB0aGUgZXZlbnQuCi0gICAgaWYgKGV2ZW50LmJ1dHRvbigpICE9IFdlYk1vdXNlRXZlbnQ6
OkxlZnRCdXR0b24pIHsKKyAgICBpZiAoZXZlbnQuYnV0dG9uKCkgIT0gTW91c2VCdXR0b246Okxl
ZnRCdXR0b24pIHsKICAgICAgICAgbV9jdXJyZW50TW91c2VEb3duT25CdXR0b25IaWdobGlnaHQg
PSBudWxscHRyOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAgLy8gSWYgdGhl
IG1vdXNlIGxpZnRlZCB3aGlsZSBzdGlsbCBvdmVyIHRoZSBoaWdobGlnaHQgYnV0dG9uIHRoYXQg
aXQgd2VudCBkb3duIG9uLCB0aGVuIHRoYXQgaXMgYSBjbGljay4KLSAgICBpZiAoZXZlbnQudHlw
ZSgpID09IFdlYkV2ZW50OjpNb3VzZVVwKSB7CisgICAgaWYgKGV2ZW50LnR5cGUoKSA9PSBQbGF0
Zm9ybUV2ZW50OjpNb3VzZVJlbGVhc2VkKSB7CiAgICAgICAgIFJlZlB0cjxIaWdobGlnaHQ+IG1v
dXNlRG93bkhpZ2hsaWdodCA9IG1fY3VycmVudE1vdXNlRG93bk9uQnV0dG9uSGlnaGxpZ2h0Owog
ICAgICAgICBtX2N1cnJlbnRNb3VzZURvd25PbkJ1dHRvbkhpZ2hsaWdodCA9IG51bGxwdHI7CiAK
QEAgLTc1Miw3ICs3NTMsNyBAQCBib29sIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6Om1vdXNl
RXZlbnQoUGFnZU92ZXJsYXkqLCBjb25zdCBXZWJNb3VzZUV2ZW50JiBldgogICAgIH0KIAogICAg
IC8vIElmIHRoZSBtb3VzZSBtb3ZlZCBvdXRzaWRlIG9mIHRoZSBidXR0b24gdHJhY2tpbmcgYSBw
b3RlbnRpYWwgY2xpY2ssIHN0b3AgdHJhY2tpbmcgdGhlIGNsaWNrLgotICAgIGlmIChldmVudC50
eXBlKCkgPT0gV2ViRXZlbnQ6Ok1vdXNlTW92ZSkgeworICAgIGlmIChldmVudC50eXBlKCkgPT0g
UGxhdGZvcm1FdmVudDo6TW91c2VNb3ZlZCkgewogICAgICAgICBpZiAobV9jdXJyZW50TW91c2VE
b3duT25CdXR0b25IaWdobGlnaHQgJiYgbW91c2VJc092ZXJBY3RpdmVIaWdobGlnaHRCdXR0b24p
CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKIApAQCAtNzYxLDcgKzc2Miw3IEBAIGJvb2wgU2Vy
dmljZXNPdmVybGF5Q29udHJvbGxlcjo6bW91c2VFdmVudChQYWdlT3ZlcmxheSosIGNvbnN0IFdl
Yk1vdXNlRXZlbnQmIGV2CiAgICAgfQogCiAgICAgLy8gSWYgdGhlIG1vdXNlIHdlbnQgZG93biBv
dmVyIHRoZSBhY3RpdmUgaGlnaGxpZ2h0J3MgYnV0dG9uLCB0cmFjayB0aGlzIGFzIGEgcG90ZW50
aWFsIGNsaWNrLgotICAgIGlmIChldmVudC50eXBlKCkgPT0gV2ViRXZlbnQ6Ok1vdXNlRG93bikg
eworICAgIGlmIChldmVudC50eXBlKCkgPT0gUGxhdGZvcm1FdmVudDo6TW91c2VQcmVzc2VkKSB7
CiAgICAgICAgIGlmIChtX2FjdGl2ZUhpZ2hsaWdodCAmJiBtb3VzZUlzT3ZlckFjdGl2ZUhpZ2hs
aWdodEJ1dHRvbikgewogICAgICAgICAgICAgbV9jdXJyZW50TW91c2VEb3duT25CdXR0b25IaWdo
bGlnaHQgPSBtX2FjdGl2ZUhpZ2hsaWdodDsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAt
NzczLDkgKzc3NCw5IEBAIGJvb2wgU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6bW91c2VFdmVu
dChQYWdlT3ZlcmxheSosIGNvbnN0IFdlYk1vdXNlRXZlbnQmIGV2CiAgICAgcmV0dXJuIGZhbHNl
OwogfQogCi12b2lkIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OmRpZFNjcm9sbEZyYW1lKFBh
Z2VPdmVybGF5KiwgRnJhbWUqIGZyYW1lKQordm9pZCBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVy
OjpkaWRTY3JvbGxGcmFtZShQYWdlT3ZlcmxheSYsIEZyYW1lJiBmcmFtZSkKIHsKLSAgICBpZiAo
ZnJhbWUtPmlzTWFpbkZyYW1lKCkpCisgICAgaWYgKGZyYW1lLmlzTWFpbkZyYW1lKCkpCiAgICAg
ICAgIHJldHVybjsKIAogICAgIGJ1aWxkUGhvbmVOdW1iZXJIaWdobGlnaHRzKCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1RpbGVkQ29yZUFuaW1h
dGlvbkRyYXdpbmdBcmVhLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFj
L1RpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhLmgKaW5kZXggYjgxYTRhNC4uOWU1YWJkYSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9UaWxlZENv
cmVBbmltYXRpb25EcmF3aW5nQXJlYS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9tYWMvVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWEuaApAQCAtODQsNiArODQs
OCBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCB2aWV3U3RhdGVEaWRDaGFuZ2UoV2ViQ29y
ZTo6Vmlld1N0YXRlOjpGbGFncyBjaGFuZ2VkLCBib29sIHdhbnRzRGlkVXBkYXRlVmlld1N0YXRl
KSBvdmVycmlkZTsKICAgICB2b2lkIGRpZFVwZGF0ZVZpZXdTdGF0ZVRpbWVyRmlyZWQoKTsKIAor
ICAgIHZpcnR1YWwgdm9pZCBhdHRhY2hWaWV3T3ZlcmxheUdyYXBoaWNzTGF5ZXIoV2ViQ29yZTo6
RnJhbWUqLCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKikgb3ZlcnJpZGU7CisKICAgICAvLyBXZWJD
b3JlOjpMYXllckZsdXNoU2NoZWR1bGVyQ2xpZW50CiAgICAgdmlydHVhbCBib29sIGZsdXNoTGF5
ZXJzKCkgb3ZlcnJpZGU7CiAKQEAgLTEwNiw2ICsxMDgsNyBAQCBwcml2YXRlOgogICAgIHZvaWQg
dXBkYXRlTGF5ZXJIb3N0aW5nQ29udGV4dCgpOwogCiAgICAgdm9pZCBzZXRSb290Q29tcG9zaXRp
bmdMYXllcihDQUxheWVyICopOworICAgIHZvaWQgdXBkYXRlUm9vdExheWVycygpOwogCiAgICAg
V2ViQ29yZTo6VGlsZWRCYWNraW5nKiBtYWluRnJhbWVUaWxlZEJhY2tpbmcoKSBjb25zdDsKICAg
ICB2b2lkIHVwZGF0ZURlYnVnSW5mb0xheWVyKGJvb2wgc2hvd0xheWVyKTsKQEAgLTEzOCw2ICsx
NDEsOCBAQCBwcml2YXRlOgogICAgIFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4IG1fdHJh
bnNmb3JtOwogCiAgICAgUnVuTG9vcDo6VGltZXI8VGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0Fy
ZWE+IG1fc2VuZERpZFVwZGF0ZVZpZXdTdGF0ZVRpbWVyOworCisgICAgV2ViQ29yZTo6R3JhcGhp
Y3NMYXllciogbV92aWV3T3ZlcmxheVJvb3RMYXllcjsKIH07CiAKIERSQVdJTkdfQVJFQV9UWVBF
X0NBU1RTKFRpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhLCB0eXBlKCkgPT0gRHJhd2luZ0Fy
ZWFUeXBlVGlsZWRDb3JlQW5pbWF0aW9uKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9tYWMvVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWEubW0gYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1RpbGVkQ29yZUFuaW1hdGlvbkRy
YXdpbmdBcmVhLm1tCmluZGV4IGU3NzU5MTkuLjI5OGIwMjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0Fy
ZWEubW0KKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9UaWxlZENv
cmVBbmltYXRpb25EcmF3aW5nQXJlYS5tbQpAQCAtNTEsNiArNTEsNyBAQAogI2ltcG9ydCA8V2Vi
Q29yZS9TY3JvbGxiYXJUaGVtZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9TZXR0aW5ncy5oPgogI2lt
cG9ydCA8V2ViQ29yZS9UaWxlZEJhY2tpbmcuaD4KKyNpbXBvcnQgPFdlYkNvcmUvV2ViQWN0aW9u
RGlzYWJsaW5nQ0FMYXllckRlbGVnYXRlLmg+CiAjaW1wb3J0IDx3dGYvTWFpblRocmVhZC5oPgog
CiAjaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykKQEAgLTc2LDEwICs3NywxMiBAQCBUaWxlZENv
cmVBbmltYXRpb25EcmF3aW5nQXJlYTo6VGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWEoV2Vi
UGFnZSYgd2ViUGFnZSwgYwogICAgICwgbV9zY3JvbGxlZEV4cG9zZWRSZWN0KEZsb2F0UmVjdDo6
aW5maW5pdGVSZWN0KCkpCiAgICAgLCBtX3RyYW5zaWVudFpvb21TY2FsZSgxKQogICAgICwgbV9z
ZW5kRGlkVXBkYXRlVmlld1N0YXRlVGltZXIoUnVuTG9vcDo6bWFpbigpLCB0aGlzLCAmVGlsZWRD
b3JlQW5pbWF0aW9uRHJhd2luZ0FyZWE6OmRpZFVwZGF0ZVZpZXdTdGF0ZVRpbWVyRmlyZWQpCisg
ICAgLCBtX3ZpZXdPdmVybGF5Um9vdExheWVyKG51bGxwdHIpCiB7CiAgICAgbV93ZWJQYWdlLmNv
cmVQYWdlKCktPnNldHRpbmdzKCkuc2V0Rm9yY2VDb21wb3NpdGluZ01vZGUodHJ1ZSk7CiAKICAg
ICBtX2hvc3RpbmdMYXllciA9IFtDQUxheWVyIGxheWVyXTsKKyAgICBbbV9ob3N0aW5nTGF5ZXIg
c2V0RGVsZWdhdGU6W1dlYkFjdGlvbkRpc2FibGluZ0NBTGF5ZXJEZWxlZ2F0ZSBzaGFyZWRdXTsK
ICAgICBbbV9ob3N0aW5nTGF5ZXIgc2V0RnJhbWU6bV93ZWJQYWdlLmJvdW5kcygpXTsKICAgICBb
bV9ob3N0aW5nTGF5ZXIgc2V0T3BhcXVlOllFU107CiAgICAgW21faG9zdGluZ0xheWVyIHNldEdl
b21ldHJ5RmxpcHBlZDpZRVNdOwpAQCAtMjA0LDkgKzIwNywyOCBAQCB2b2lkIFRpbGVkQ29yZUFu
aW1hdGlvbkRyYXdpbmdBcmVhOjp1cGRhdGVQcmVmZXJlbmNlcyhjb25zdCBXZWJQcmVmZXJlbmNl
c1N0b3JlJgogICAgIHVwZGF0ZURlYnVnSW5mb0xheWVyKHNob3dUaWxlZFNjcm9sbGluZ0luZGlj
YXRvcik7CiB9CiAKK3ZvaWQgVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWE6OnVwZGF0ZVJv
b3RMYXllcnMoKQoreworICAgIGlmICghbV9yb290TGF5ZXIpIHsKKyAgICAgICAgW21faG9zdGlu
Z0xheWVyIHNldFN1YmxheWVyczpAWyBdXTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IFttX2hvc3RpbmdMYXllciBzZXRTdWJsYXllcnM6bV92aWV3T3ZlcmxheVJvb3RMYXllciA/IEBb
IG1fcm9vdExheWVyLmdldCgpLCBtX3ZpZXdPdmVybGF5Um9vdExheWVyLT5wbGF0Zm9ybUxheWVy
KCkgXSA6IEBbIG1fcm9vdExheWVyLmdldCgpIF1dOworfQorCit2b2lkIFRpbGVkQ29yZUFuaW1h
dGlvbkRyYXdpbmdBcmVhOjphdHRhY2hWaWV3T3ZlcmxheUdyYXBoaWNzTGF5ZXIoRnJhbWUqIGZy
YW1lLCBHcmFwaGljc0xheWVyKiB2aWV3T3ZlcmxheVJvb3RMYXllcikKK3sKKyAgICBpZiAoIWZy
YW1lLT5pc01haW5GcmFtZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3ZpZXdPdmVybGF5
Um9vdExheWVyID0gdmlld092ZXJsYXlSb290TGF5ZXI7CisgICAgdXBkYXRlUm9vdExheWVycygp
OworfQorCiB2b2lkIFRpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhOjptYWluRnJhbWVDb250
ZW50U2l6ZUNoYW5nZWQoY29uc3QgSW50U2l6ZSYgc2l6ZSkKIHsKLSAgICBtX3dlYlBhZ2UucGFn
ZU92ZXJsYXlDb250cm9sbGVyKCkuZGlkQ2hhbmdlRG9jdW1lbnRTaXplKCk7CisKIH0KIAogdm9p
ZCBUaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYTo6dXBkYXRlSW50cmluc2ljQ29udGVudFNp
emVJZk5lZWRlZCgpCkBAIC0yODMsNyArMzA1LDEwIEBAIGJvb2wgVGlsZWRDb3JlQW5pbWF0aW9u
RHJhd2luZ0FyZWE6OmZsdXNoTGF5ZXJzKCkKIAogICAgIEZsb2F0UmVjdCB2aXNpYmxlUmVjdCA9
IFttX2hvc3RpbmdMYXllciBmcmFtZV07CiAgICAgdmlzaWJsZVJlY3QuaW50ZXJzZWN0KG1fc2Ny
b2xsZWRFeHBvc2VkUmVjdCk7Ci0gICAgbV93ZWJQYWdlLnBhZ2VPdmVybGF5Q29udHJvbGxlcigp
LmZsdXNoUGFnZU92ZXJsYXlMYXllcnModmlzaWJsZVJlY3QpOworCisgICAgLy8gQmVjYXVzZSBv
dXIgdmlldy1yZWxhdGl2ZSBvdmVybGF5IHJvb3QgbGF5ZXIgaXMgbm90IGF0dGFjaGVkIHRvIHRo
ZSBtYWluIEdyYXBoaWNzTGF5ZXIgdHJlZSwgd2UgbmVlZCB0byBmbHVzaCBpdCBtYW51YWxseS4K
KyAgICBpZiAobV92aWV3T3ZlcmxheVJvb3RMYXllcikKKyAgICAgICAgbV92aWV3T3ZlcmxheVJv
b3RMYXllci0+Zmx1c2hDb21wb3NpdGluZ1N0YXRlKHZpc2libGVSZWN0KTsKIAogICAgIGJvb2wg
cmV0dXJuVmFsdWUgPSBtX3dlYlBhZ2UubWFpbkZyYW1lVmlldygpLT5mbHVzaENvbXBvc2l0aW5n
U3RhdGVJbmNsdWRpbmdTdWJmcmFtZXMoKTsKICNpZiBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKQpA
QCAtMzYzLDggKzM4OCw2IEBAIHZvaWQgVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWE6OnVw
ZGF0ZVNjcm9sbGVkRXhwb3NlZFJlY3QoKQogI2VuZGlmCiAKICAgICBmcmFtZVZpZXctPnNldEV4
cG9zZWRSZWN0KG1fc2Nyb2xsZWRFeHBvc2VkUmVjdCk7Ci0KLSAgICBtX3dlYlBhZ2UucGFnZU92
ZXJsYXlDb250cm9sbGVyKCkuZGlkQ2hhbmdlRXhwb3NlZFJlY3QoKTsKIH0KIAogdm9pZCBUaWxl
ZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYTo6dXBkYXRlR2VvbWV0cnkoY29uc3QgSW50U2l6ZSYg
dmlld1NpemUsIGNvbnN0IEludFNpemUmIGxheWVyUG9zaXRpb24pCkBAIC00NjQsMTIgKzQ4Nywx
MiBAQCB2b2lkIFRpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhOjpzZXRSb290Q29tcG9zaXRp
bmdMYXllcihDQUxheWVyICpsYXllcikKICAgICBbQ0FUcmFuc2FjdGlvbiBiZWdpbl07CiAgICAg
W0NBVHJhbnNhY3Rpb24gc2V0RGlzYWJsZUFjdGlvbnM6WUVTXTsKIAotICAgIFttX2hvc3RpbmdM
YXllciBzZXRTdWJsYXllcnM6bGF5ZXIgPyBAWyBsYXllciwgbV93ZWJQYWdlLnBhZ2VPdmVybGF5
Q29udHJvbGxlcigpLnZpZXdPdmVybGF5Um9vdExheWVyKCktPnBsYXRmb3JtTGF5ZXIoKSBdIDog
QFsgXV07Ci0KICAgICBib29sIGhhZFJvb3RMYXllciA9ICEhbV9yb290TGF5ZXI7CiAgICAgbV9y
b290TGF5ZXIgPSBsYXllcjsKICAgICBbbV9yb290TGF5ZXIgc2V0U3VibGF5ZXJUcmFuc2Zvcm06
bV90cmFuc2Zvcm1dOwogCisgICAgdXBkYXRlUm9vdExheWVycygpOworCiAgICAgaWYgKGhhZFJv
b3RMYXllciAhPSAhIWxheWVyKQogICAgICAgICBtX2xheWVySG9zdGluZ0NvbnRleHQtPnNldFJv
b3RMYXllcihsYXllciA/IG1faG9zdGluZ0xheWVyLmdldCgpIDogMCk7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV0tBY2Nlc3NpYmlsaXR5V2Vi
UGFnZU9iamVjdE1hYy5tbSBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMv
V0tBY2Nlc3NpYmlsaXR5V2ViUGFnZU9iamVjdE1hYy5tbQppbmRleCAzODMzOWJhLi4xNjRhZTU3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dLQWNj
ZXNzaWJpbGl0eVdlYlBhZ2VPYmplY3RNYWMubW0KKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL21hYy9XS0FjY2Vzc2liaWxpdHlXZWJQYWdlT2JqZWN0TWFjLm1tCkBAIC00
MCw2ICs0MCw3IEBACiAjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lVmlldy5oPgogI2ltcG9ydCA8V2Vi
Q29yZS9NYWluRnJhbWUuaD4KICNpbXBvcnQgPFdlYkNvcmUvUGFnZS5oPgorI2ltcG9ydCA8V2Vi
Q29yZS9QYWdlT3ZlcmxheUNvbnRyb2xsZXIuaD4KICNpbXBvcnQgPFdlYkNvcmUvU2Nyb2xsVmll
dy5oPgogI2ltcG9ydCA8V2ViQ29yZS9TY3JvbGxiYXIuaD4KICNpbXBvcnQgPFdlYktpdFN5c3Rl
bUludGVyZmFjZS5oPgpAQCAtNzUsMTkgKzc2LDEzIEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7
CiAKIC0gKE5TQXJyYXkgKilhY2Nlc3NpYmlsaXR5UGFyYW1ldGVyaXplZEF0dHJpYnV0ZU5hbWVz
CiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tBcnJheVJlZj4gcmVzdWx0ID0gYWRvcHRXSyhtX3BhZ2Ut
PnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLmNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlc05hbWVz
KHRydWUpKTsKLSAgICBpZiAoIXJlc3VsdCkKKyAgICBWZWN0b3I8U3RyaW5nPiByZXN1bHQgPSBt
X3BhZ2UtPm1haW5GcmFtZSgpLT5wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKS5jb3B5QWNjZXNzaWJp
bGl0eUF0dHJpYnV0ZXNOYW1lcyh0cnVlKTsKKyAgICBpZiAocmVzdWx0LmlzRW1wdHkoKSkKICAg
ICAgICAgcmV0dXJuIG5pbDsKICAgICAKICAgICBOU011dGFibGVBcnJheSAqbmFtZXMgPSBbTlNN
dXRhYmxlQXJyYXkgYXJyYXldOwotICAgIHNpemVfdCBjb3VudCA9IFdLQXJyYXlHZXRTaXplKHJl
c3VsdC5nZXQoKSk7Ci0gICAgZm9yIChzaXplX3QgayA9IDA7IGsgPCBjb3VudDsgaysrKSB7Ci0g
ICAgICAgIFdLVHlwZVJlZiBpdGVtID0gV0tBcnJheUdldEl0ZW1BdEluZGV4KHJlc3VsdC5nZXQo
KSwgayk7Ci0gICAgICAgIGlmICh0b0ltcGwoaXRlbSktPnR5cGUoKSA9PSBBUEk6OlN0cmluZzo6
QVBJVHlwZSkgewotICAgICAgICAgICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBuYW1lID0gYWRv
cHRDRihXS1N0cmluZ0NvcHlDRlN0cmluZyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAoV0tTdHJpbmdS
ZWYpaXRlbSkpOwotICAgICAgICAgICAgW25hbWVzIGFkZE9iamVjdDooTlNTdHJpbmcgKiluYW1l
LmdldCgpXTsKLSAgICAgICAgfQotICAgIH0KKyAgICBmb3IgKGF1dG8mIG5hbWUgOiByZXN1bHQp
CisgICAgICAgIFtuYW1lcyBhZGRPYmplY3Q6KE5TU3RyaW5nICopbmFtZV07CiAgICAgCiAgICAg
cmV0dXJuIG5hbWVzOwogfQpAQCAtMTY0LDIzICsxNTksMjYgQEAgdXNpbmcgbmFtZXNwYWNlIFdl
YktpdDsKIAogLSAoaWQpYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlOihOU1N0cmluZyAqKWF0
dHJpYnV0ZSBmb3JQYXJhbWV0ZXI6KGlkKXBhcmFtZXRlcgogewotICAgIFdLUmV0YWluUHRyPFdL
VHlwZVJlZj4gcGFnZU92ZXJsYXlQYXJhbWV0ZXIgPSAwOwotICAgIAotICAgIGlmIChbcGFyYW1l
dGVyIGlzS2luZE9mQ2xhc3M6W05TVmFsdWUgY2xhc3NdXSAmJiBzdHJjbXAoWyhOU1ZhbHVlKilw
YXJhbWV0ZXIgb2JqQ1R5cGVdLCBAZW5jb2RlKE5TUG9pbnQpKSA9PSAwKSB7Ci0gICAgICAgIE5T
UG9pbnQgcG9pbnQgPSBbc2VsZiBjb252ZXJ0U2NyZWVuUG9pbnRUb1Jvb3RWaWV3OlsoTlNWYWx1
ZSAqKXBhcmFtZXRlciBwb2ludFZhbHVlXV07Ci0gICAgICAgIHBhZ2VPdmVybGF5UGFyYW1ldGVy
ID0gV0tQb2ludENyZWF0ZShXS1BvaW50TWFrZShwb2ludC54LCBwb2ludC55KSk7Ci0gICAgfQot
ICAgIAotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBhdHRyaWJ1dGVSZWYgPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aENGU3RyaW5nKChDRlN0cmluZ1JlZilhdHRyaWJ1dGUpKTsKLSAg
ICBXS1JldGFpblB0cjxXS1R5cGVSZWY+IHJlc3VsdCA9IGFkb3B0V0sobV9wYWdlLT5wYWdlT3Zl
cmxheUNvbnRyb2xsZXIoKS5jb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlKGF0dHJpYnV0
ZVJlZi5nZXQoKSwgcGFnZU92ZXJsYXlQYXJhbWV0ZXIuZ2V0KCkpKTsKLSAgICBpZiAoIXJlc3Vs
dCkKKyAgICBXZWJDb3JlOjpGbG9hdFBvaW50IHBhZ2VPdmVybGF5UG9pbnQ7CisgICAgaWYgKFtw
YXJhbWV0ZXIgaXNLaW5kT2ZDbGFzczpbTlNWYWx1ZSBjbGFzc11dICYmICFzdHJjbXAoWyhOU1Zh
bHVlICopcGFyYW1ldGVyIG9iakNUeXBlXSwgQGVuY29kZShOU1BvaW50KSkpCisgICAgICAgIHBh
Z2VPdmVybGF5UG9pbnQgPSBbc2VsZiBjb252ZXJ0U2NyZWVuUG9pbnRUb1Jvb3RWaWV3OlsoTlNW
YWx1ZSAqKXBhcmFtZXRlciBwb2ludFZhbHVlXV07CisgICAgZWxzZQogICAgICAgICByZXR1cm4g
bmlsOwotICAgIAotICAgIGlmICh0b0ltcGwocmVzdWx0LmdldCgpKS0+dHlwZSgpID09IEFQSTo6
U3RyaW5nOjpBUElUeXBlKQotICAgICAgICByZXR1cm4gQ0ZCcmlkZ2luZ1JlbGVhc2UoV0tTdHJp
bmdDb3B5Q0ZTdHJpbmcoa0NGQWxsb2NhdG9yRGVmYXVsdCwgKFdLU3RyaW5nUmVmKXJlc3VsdC5n
ZXQoKSkpOwotICAgIGlmICh0b0ltcGwocmVzdWx0LmdldCgpKS0+dHlwZSgpID09IEFQSTo6Qm9v
bGVhbjo6QVBJVHlwZSkKLSAgICAgICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRoQm9vbDpX
S0Jvb2xlYW5HZXRWYWx1ZShzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KHJlc3VsdC5nZXQoKSkp
XTsKLSAgICAKKworICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpAIkFYRGF0YURl
dGVjdG9yRXhpc3RzQXRQb2ludCJdIHx8IFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOkAiQVhE
aWRTaG93RGF0YURldGVjdG9yTWVudUF0UG9pbnQiXSkgeworICAgICAgICBib29sIHZhbHVlOwor
ICAgICAgICBpZiAoIW1fcGFnZS0+bWFpbkZyYW1lKCktPnBhZ2VPdmVybGF5Q29udHJvbGxlcigp
LmNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlQm9vbFZhbHVlRm9yUG9pbnQoYXR0cmlidXRlLCBw
YWdlT3ZlcmxheVBvaW50LCB2YWx1ZSkpCisgICAgICAgICAgICByZXR1cm4gbmlsOworICAgICAg
ICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhCb29sOnZhbHVlXTsKKyAgICB9CisKKyAgICBp
ZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6QCJBWERhdGFEZXRlY3RvclR5cGVBdFBvaW50
Il0pIHsKKyAgICAgICAgU3RyaW5nIHZhbHVlOworICAgICAgICBpZiAoIW1fcGFnZS0+bWFpbkZy
YW1lKCktPnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLmNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRl
U3RyaW5nVmFsdWVGb3JQb2ludChhdHRyaWJ1dGUsIHBhZ2VPdmVybGF5UG9pbnQsIHZhbHVlKSkK
KyAgICAgICAgICAgIHJldHVybiBuaWw7CisgICAgICAgIHJldHVybiBbTlNTdHJpbmcgc3RyaW5n
V2l0aFN0cmluZzp2YWx1ZV07CisgICAgfQorCiAgICAgcmV0dXJuIG5pbDsKIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAKaW5kZXggMjBhMzBhZS4uN2MxNzBiMCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwCkBAIC03MSw2ICs3MSw3
IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9JY29uRGF0YWJhc2UuaD4KICNpbmNsdWRlIDxXZWJDb3Jl
L0pTRE9NV2luZG93Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9MYW5ndWFnZS5oPgorI2luY2x1ZGUg
PFdlYkNvcmUvTWFpbkZyYW1lLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9NZW1vcnlDYWNoZS5oPgog
I2luY2x1ZGUgPFdlYkNvcmUvTWVtb3J5UHJlc3N1cmVIYW5kbGVyLmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9QYWdlLmg+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>239096</attachid>
            <date>2014-10-02 02:31:00 -0700</date>
            <delta_ts>2014-10-02 12:15:56 -0700</delta_ts>
            <desc>add some null checks</desc>
            <filename>pageoverlay.diff</filename>
            <type>text/plain</type>
            <size>194284</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNv
cmUvQ01ha2VMaXN0cy50eHQKaW5kZXggNmRhZGMzMC4uZTFlOGZlNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKQEAgLTE5NDAsNiArMTk0MCw4IEBAIHNldChXZWJDb3JlX1NPVVJDRVMKICAgICBwYWdl
L1BhZ2VDb25zb2xlQ2xpZW50LmNwcAogICAgIHBhZ2UvUGFnZUdyb3VwLmNwcAogICAgIHBhZ2Uv
UGFnZUdyb3VwTG9hZERlZmVycmVyLmNwcAorICAgIHBhZ2UvUGFnZU92ZXJsYXkuY3BwCisgICAg
cGFnZS9QYWdlT3ZlcmxheUNvbnRyb2xsZXIuY3BwCiAgICAgcGFnZS9QYWdlU2VyaWFsaXplci5j
cHAKICAgICBwYWdlL1BhZ2VUaHJvdHRsZXIuY3BwCiAgICAgcGFnZS9QYWdlVmlzaWJpbGl0eVN0
YXRlLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nCmluZGV4IGRkZDk3YTEuLjliYjljNDcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNTQgQEAKKzIwMTQtMDktMzAgIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBs
ZS5jb20+CisKKyAgICAgICAgTW92ZSBQYWdlT3ZlcmxheVtDb250cm9sbGVyXSB0byBXZWJDb3Jl
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzcxNjQK
KyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzE4NTA4MjU4PgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICog
V2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnZjeHBy
b2ovV2ViQ29yZS52Y3hwcm9qLmZpbHRlcnM6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qOgorICAgICAgICBNYWtlIHRoZSBhcHByb3ByaWF0ZSBidWlsZCBzeXN0
ZW0gY2hhbmdlcy4KKworICAgICAgICAqIFdlYkNvcmUuZXhwLmluOgorICAgICAgICBFeHBvcnQg
dGhlIG5ldyBQYWdlT3ZlcmxheVtDb250cm9sbGVyXSBzeW1ib2xzIGZyb20gV2ViQ29yZS4KKwor
ICAgICAgICAqIGxvYWRlci9FbXB0eUNsaWVudHMuaDoKKyAgICAgICAgKiBwYWdlL0Nocm9tZUNs
aWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21lQ2xpZW50Ojpkb2N1bWVudE92ZXJsYXlM
YXllckZvckZyYW1lKTogRGVsZXRlZC4KKyAgICAgICAgQWRkIGF0dGFjaFZpZXdPdmVybGF5R3Jh
cGhpY3NMYXllciwgd2hpY2ggYWxsb3dzIFBhZ2VPdmVybGF5Q29udHJvbGxlcgorICAgICAgICB0
byBwdXNoIHZpZXctcmVsYXRpdmUgcGFnZSBvdmVybGF5IHJvb3QgbGF5ZXJzIGRvd24gdG8gV2Vi
S2l0IHRvIGJlCisgICAgICAgIGluc3RhbGxlZCBqdXN0IGluc2lkZSB0aGUgdmlldy4KKworICAg
ICAgICBSZW1vdmUgZG9jdW1lbnRPdmVybGF5TGF5ZXJGb3JGcmFtZSBiZWNhdXNlIFJlbmRlckxh
eWVyQ29tcG9zaXRvciBjYW4gbm93CisgICAgICAgIHRhbGsgZGlyZWN0bHkgdG8gUGFnZU92ZXJs
YXlDb250cm9sbGVyLgorCisgICAgICAgICogcGFnZS9FdmVudEhhbmRsZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpoYW5kbGVNb3VzZVByZXNzRXZlbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjptb3VzZU1vdmVkKToKKyAgICAgICAgKFdlYkNvcmU6
OkV2ZW50SGFuZGxlcjo6aGFuZGxlTW91c2VSZWxlYXNlRXZlbnQpOgorICAgICAgICBXaGVuIHRo
ZSBtb3VzZSBpcyBtb3ZlZCwgcHJlc3NlZCwgb3IgcmVsZWFzZWQsIGdpdmUgUGFnZU92ZXJsYXlD
b250cm9sbGVyCisgICAgICAgIHRoZSBmaXJzdCBzaG90IGF0IGhhbmRsaW5nIHRoZSBldmVudC4K
KworICAgICAgICAqIHBhZ2UvRnJhbWVWaWV3LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1l
Vmlldzo6c2V0RnJhbWVSZWN0KToKKyAgICAgICAgSW5mb3JtIFBhZ2VPdmVybGF5Q29udHJvbGxl
ciB0aGF0IHRoZSBtYWluIEZyYW1lVmlldydzIHNpemUgY2hhbmdlZCwKKyAgICAgICAgc28gaXQg
Y2FuIHVwZGF0ZSB0aGUgc2l6ZSBvZiB2aWV3LXJlbGF0aXZlIG92ZXJsYXlzLgorCisgICAgICAg
IChXZWJDb3JlOjpGcmFtZVZpZXc6OnNldENvbnRlbnRzU2l6ZSk6CisgICAgICAgIEluZm9ybSBQ
YWdlT3ZlcmxheUNvbnRyb2xsZXIgdGhhdCB0aGUgbWFpbiBGcmFtZVZpZXcncyBjb250ZW50cyBz
aXplIGNoYW5nZWQsCisgICAgICAgIHNvIGl0IGNhbiB1cGRhdGUgdGhlIHNpemUgb2YgZG9jdW1l
bnQtcmVsYXRpdmUgb3ZlcmxheXMuCisKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6c2V0
Rml4ZWRWaXNpYmxlQ29udGVudFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3Ojpk
aWRDaGFuZ2VTY3JvbGxPZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjpzY3Jv
bGxUbyk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OndoZWVsRXZlbnQpOgorICAgICAg
ICBJbmZvcm0gUGFnZU92ZXJsYXlDb250cm9sbGVyIHRoYXQgc29tZXRoaW5nIHNjcm9sbGVkLgor
CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OnNldEV4cG9zZWRSZWN0KToKKyAgICAgICAg
SW5mb3JtIFBhZ2VPdmVybGF5Q29udHJvbGxlciB0aGF0IHRoZSBleHBvc2VkIHJlY3QgY2hhbmdl
ZCwgc28gaXQgY2FuIHB1c2gKKyAgICAgICAgdGhlIG5ldyBleHBvc2VkIHJlY3QgZG93biB0byB0
aGUgb3ZlcmxheXMuCisKKyAgICAgICAgKiBwYWdlL0ZyYW1lVmlldy5oOgorICAgICAgICBBZGQg
ZGlkQ2hhbmdlU2Nyb2xsT2Zmc2V0LgorCisgICAgICAgICogcGFnZS9NYWluRnJhbWUuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6TWFpbkZyYW1lOjpNYWluRnJhbWUpOgorICAgICAgICAqIHBhZ2Uv
TWFpbkZyYW1lLmg6CisgICAgICAgIEtlZXAgb25lIFBhZ2VPdmVybGF5Q29udHJvbGxlciBwZXIg
TWFpbkZyYW1lLgorCisgICAgICAgICogcGFnZS9QYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlBhZ2U6OnNldERldmljZVNjYWxlRmFjdG9yKToKKyAgICAgICAgSW5mb3JtIFBhZ2VPdmVybGF5
Q29udHJvbGxlciB0aGF0IHRoZSBkZXZpY2Ugc2NhbGUgZmFjdG9yIGNoYW5nZWQuCisKKyAgICAg
ICAgKFdlYkNvcmU6OlBhZ2U6OnNldFNlc3Npb25JRCk6CisgICAgICAgIFJlbW92ZSBhIGJsYW5r
IGxpbmUuCisKKyAgICAgICAgKiBwYWdlL1BhZ2VPdmVybGF5LmNwcDogUmVuYW1lZCBmcm9tIFNv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9QYWdlT3ZlcmxheS5jcHAuCisgICAgICAg
IE1vdmUgUGFnZU92ZXJsYXkgZnJvbSBXZWJLaXQyIHRvIFdlYkNvcmUuCisgICAgICAgIEEgZmV3
IG92ZXJhcmNoaW5nIGNoYW5nZXMgdGhhdCBJIHdvbid0IGRldGFpbCBpbiBlYWNoIHBsYWNlOgor
ICAgICAgICAgICAgLSByZWZlcmVuY2VzIGluc3RlYWQgb2YgcG9pbnRlcnMgaW4gbWFueSBwbGFj
ZXMKKyAgICAgICAgICAgIC0gV2ViQ29yZSB0eXBlcyBpbnN0ZWFkIG9mIFdlYktpdDIgdHlwZXMg
ZXZlcnl3aGVyZQorCisgICAgICAgIChXZWJDb3JlOjpQYWdlT3ZlcmxheTo6Ym91bmRzKToKKyAg
ICAgICAgSXQgaXMgcG9zc2libGUgdG8gaW5zdGFsbCBhbiBvdmVybGF5IGJlZm9yZSB3ZSBoYXZl
IGEgRnJhbWVWaWV3LgorICAgICAgICBXZSB3aWxsIGV2ZW50dWFsbHkgZ2V0IGEgdmlldy9jb250
ZW50cyBzaXplIGNoYW5nZWQgbm90aWZpY2F0aW9uIGFuZCB0cnkgYWdhaW4uCisKKyAgICAgICAg
KFdlYkNvcmU6OlBhZ2VPdmVybGF5Ojpjb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVN0cmluZ1Zh
bHVlRm9yUG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGFnZU92ZXJsYXk6OmNvcHlBY2Nlc3Np
YmlsaXR5QXR0cmlidXRlQm9vbFZhbHVlRm9yUG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGFn
ZU92ZXJsYXk6OmNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlTmFtZXMpOgorICAgICAgICBTcGxp
dCBjb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZSBpbnRvICJTdHJpbmdWYWx1ZUZvclBvaW50IiBh
bmQgIkJvb2xWYWx1ZUZvclBvaW50IgorICAgICAgICB2YXJpYW50cywgYmVjYXVzZSB3ZSBkb24n
dCBoYXZlIGFueXRoaW5nIGxpa2UgV0tUeXBlUmVmIGhlcmUuCisKKyAgICAgICAgKiBwYWdlL1Bh
Z2VPdmVybGF5Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvUGFnZU92ZXJsYXkuaC4KKyAgICAgICAgTWFrZSBQYWdlT3ZlcmxheSBhIG5vcm1hbCBSZWZD
b3VudGVkIG9iamVjdCBpbnN0ZWFkIG9mIGEgV2ViS2l0MiBBUEkgb2JqZWN0LgorICAgICAgICBM
ZWF2ZSBhIGNvbW1lbnQgbm90aW5nIHRoYXQgd2Ugc2hvdWxkIG1vdmUgdGhlIFBhZ2VPdmVybGF5
J3MgR3JhcGhpY3NMYXllcgorICAgICAgICB0byBQYWdlT3ZlcmxheSBpbnN0ZWFkIG9mIGEgbWFw
IG9uIFBhZ2VPdmVybGF5Q29udHJvbGxlci4KKworICAgICAgICAqIHBhZ2UvUGFnZU92ZXJsYXlD
b250cm9sbGVyLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9QYWdlT3ZlcmxheUNvbnRyb2xsZXIuY3BwLgorICAgICAgICBNb3ZlIFBhZ2VPdmVybGF5
Q29udHJvbGxlciBmcm9tIFdlYktpdDIgdG8gV2ViQ29yZS4KKyAgICAgICAgQSBmZXcgb3ZlcmFy
Y2hpbmcgY2hhbmdlcyB0aGF0IEkgd29uJ3QgZGV0YWlsIGluIGVhY2ggcGxhY2U6CisgICAgICAg
ICAgICAtIHJlZmVyZW5jZXMgaW5zdGVhZCBvZiBwb2ludGVycyBpbiBtYW55IHBsYWNlcworICAg
ICAgICAgICAgLSBXZWJDb3JlIHR5cGVzIGluc3RlYWQgb2YgV2ViS2l0MiB0eXBlcyBldmVyeXdo
ZXJlCisKKyAgICAgICAgTGVhdmUgYSBGSVhNRSB0aGF0IGRpZENoYW5nZVNldHRpbmdzIGlzIG5v
dCBjdXJyZW50bHkgY2FsbGVkIHdoZW4gc2V0dGluZ3MgY2hhbmdlLgorICAgICAgICBUaGlzIGlz
IG5vdCBhIHByb2JsZW0gZm9yIG5vcm1hbCB1c2Ugb2Ygb3ZlcmxheXMsIG9ubHkgZm9yIGR5bmFt
aWNhbGx5IGNoYW5naW5nCisgICAgICAgIGxheWVyIGJvcmRlci9yZXBhaW50IGNvdW50ZXIgc2V0
dGluZ3MuCisKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VPdmVybGF5Q29udHJvbGxlcjo6UGFnZU92
ZXJsYXlDb250cm9sbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VPdmVybGF5Q29udHJvbGxl
cjo6Y3JlYXRlUm9vdExheWVyc0lmTmVlZGVkKToKKyAgICAgICAgV2Ugd2lsbCBub3cgbGF6aWx5
IGluaXRpYWxpemUgdGhlIHJvb3QgbGF5ZXJzIHdoZW4gd2UgZmlyc3QgdHJ5IHRvIHVzZSB0aGVt
LAorICAgICAgICBiZWNhdXNlIG90aGVyd2lzZSB3ZSB0cnkgdG8gY3JlYXRlIHRoZW0gYmVmb3Jl
IHRoZSBDaHJvbWVDbGllbnQncyBHcmFwaGljc0xheWVyRmFjdG9yeQorICAgICAgICBpcyBob29r
ZWQgdXAsIGluIHNvbWUgY2FzZXMsIGFuZCB0aGF0IGNhbiBjYXVzZSB1cyB0byBjcmVhdGUgdGhl
IHdyb25nIGtpbmQgb2YgR3JhcGhpY3NMYXllcnMuCisKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VP
dmVybGF5Q29udHJvbGxlcjo6aW5zdGFsbFBhZ2VPdmVybGF5KToKKyAgICAgICAgRW50ZXIgY29t
cG9zaXRpbmcgbW9kZSB3aGVuIGluc3RhbGxpbmcgYSBQYWdlT3ZlcmxheS4KKyAgICAgICAgQXZv
aWQgcHVzaGluZyB0aGUgUGFnZSB0byB0aGUgUGFnZU92ZXJsYXkgdW50aWwgYWZ0ZXIgd2UndmUg
c2V0IHVwCisgICAgICAgIGl0cyByb290IGxheWVyLCBzbyB0aGF0IHRoZSBpbnN0YWxsYXRpb24g
cHJvY2VzcyBjYW4gbWFrZSB1c2Ugb2YgdGhhdCBsYXllcjsKKyAgICAgICAgY2xpZW50cyBtYXks
IGZvciBleGFtcGxlLCBleHBlY3QgdG8gYmUgYWJsZSB0byBzZXROZWVkc0Rpc3BsYXkoKSBpbiB0
aGUKKyAgICAgICAgZGlkTW92ZVRvUGFnZSBjYWxsYmFjay4KKyAgICAgICAgQXZvaWQgdXBkYXRl
T3ZlcmxheUdlb21ldHJ5IHVudGlsIHRoZSBsYXllciBpcyBjcmVhdGVkIGFuZCB3ZSd2ZSBwdXNo
ZWQKKyAgICAgICAgdGhlIFBhZ2UgZG93biwgc28gdGhhdCBlLmcuIGJvdW5kcygpIHdpbGwgdXNl
IHRoZSByaWdodCBQYWdlLgorCisgICAgICAgIChXZWJDb3JlOjpQYWdlT3ZlcmxheUNvbnRyb2xs
ZXI6OmRpZENoYW5nZVNldHRpbmdzKToKKyAgICAgICAgTGVhdmUgYSBGSVhNRSBhYm91dCBhIGZ1
dHVyZSBpbXByb3ZlbWVudCB0byBkaWRDaGFuZ2VTZXR0aW5ncy4KKworICAgICAgICAoV2ViQ29y
ZTo6UGFnZU92ZXJsYXlDb250cm9sbGVyOjpkZXZpY2VTY2FsZUZhY3Rvcik6CisgICAgICAgIChX
ZWJDb3JlOjpQYWdlT3ZlcmxheUNvbnRyb2xsZXI6Om5vdGlmeUZsdXNoUmVxdWlyZWQpOgorICAg
ICAgICBOdWxsLWNoZWNrIFBhZ2U7IHRoZXNlIGNhbiBnZXQgY2FsbGVkIHdoZW4gdGVhcmluZyBk
b3duIHRoZSBGcmFtZS4KKworICAgICAgICAqIHBhZ2UvUGFnZU92ZXJsYXlDb250cm9sbGVyLmg6
IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvUGFnZU92ZXJs
YXlDb250cm9sbGVyLmguCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xh
eWVyQ2xpZW50Lmg6CisgICAgICAgIEFkZCB3dGYvRm9yd2FyZC5oLCBiZWNhdXNlIEdyYXBoaWNz
TGF5ZXJDbGllbnQuaCB1c2VzIFN0cmluZy4KKworICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJM
YXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c2Nyb2xsVG8pOgorICAg
ICAgICBJbmZvcm0gUGFnZU92ZXJsYXlDb250cm9sbGVyIHRoYXQgc29tZXRoaW5nIHNjcm9sbGVk
LgorCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6Omhhc0FueUFkZGl0aW9uYWxDb21w
b3NpdGVkTGF5ZXJzKToKKyAgICAgICAgTWFrZSBoYXNBbnlBZGRpdGlvbmFsQ29tcG9zaXRlZExh
eWVycyByZXR1cm4gdHJ1ZSBpZiB0aGVyZSBhcmUgYW55IHBhZ2Ugb3ZlcmxheXMsCisgICAgICAg
IGJlY2F1c2Ugd2UgbmVlZCB0byBhdm9pZCBmYWxsaW5nIG91dCBvZiBjb21wb3NpdGluZyBtb2Rl
IGlmIHdlIHN0aWxsIGhhdmUKKyAgICAgICAgcGFnZSBvdmVybGF5cy4KKworICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVDb21wb3NpdGluZ0xheWVycyk6Cisg
ICAgICAgIEVudGVyIGNvbXBvc2l0aW5nIG1vZGUgaWYgd2UgaGF2ZSBwYWdlIG92ZXJsYXlzLgor
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OmFwcGVuZE92ZXJsYXlM
YXllcnMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9y
OjphcHBlbmREb2N1bWVudE92ZXJsYXlMYXllcnMpOgorICAgICAgICBSZW5hbWUgYXBwZW5kT3Zl
cmxheUxheWVycyAtPiBhcHBlbmREb2N1bWVudE92ZXJsYXlMYXllcnMuCisKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6YXR0YWNoUm9vdExheWVyKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6ZGV0YWNoUm9vdExheWVyKToKKyAgICAg
ICAgQXR0YWNoL2RldGFjaCB0aGUgdmlldyBvdmVybGF5IHJvb3QgbGF5ZXIgd2hlbiBhdHRhY2hp
bmcvZGV0YWNoaW5nIHRoZQorICAgICAgICBub3JtYWwgY29tcG9zaXRpbmcgcm9vdCBsYXllci4K
KworICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyb290TGF5ZXJBdHRh
Y2htZW50Q2hhbmdlZCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRv
ci5oOgorCiAyMDE0LTA5LTMwICBFcmljIENhcmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29t
PgogCiAgICAgICAgIFtNYWNdIE1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0IHNob3VsZCBub3QgdXNl
IEZyYW1lVmlldwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4gYi9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgppbmRleCA5NDNjMzExLi42MTdhN2JhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLmV4cC5pbgpAQCAtMTg3LDYgKzE4NywxMyBAQCBfX1pON1dlYkNvcmUxMU1lbW9y
eUNhY2hlMThyZXNvdXJjZUZvclJlcXVlc3RFUktOU18xNVJlc291cmNlUmVxdWVzdEVOU185U2Vz
c2lvbgogX19aTjdXZWJDb3JlMTFNZW1vcnlDYWNoZTE5Z2V0T3JpZ2luc1dpdGhDYWNoZUVSTjNX
VEY3SGFzaFNldElOUzFfNlJlZlB0cklOU18xNFNlY3VyaXR5T3JpZ2luRUVFTlNfMThTZWN1cml0
eU9yaWdpbkhhc2hFTlMxXzEwSGFzaFRyYWl0c0lTNV9FRUVFCiBfX1pON1dlYkNvcmUxMU1lbW9y
eUNhY2hlMjByZW1vdmVJbWFnZUZyb21DYWNoZUVSS05TXzNVUkxFUktOM1dURjZTdHJpbmdFCiBf
X1pON1dlYkNvcmUxMU1lbW9yeUNhY2hlMjVyZW1vdmVSZXNvdXJjZXNXaXRoT3JpZ2luRVBOU18x
NFNlY3VyaXR5T3JpZ2luRQorX19aTjdXZWJDb3JlMTFQYWdlT3ZlcmxheTE1c2V0TmVlZHNEaXNw
bGF5RVJLTlNfN0ludFJlY3RFCitfX1pON1dlYkNvcmUxMVBhZ2VPdmVybGF5MTVzZXROZWVkc0Rp
c3BsYXlFdgorX19aTjdXZWJDb3JlMTFQYWdlT3ZlcmxheTIwc3RvcEZhZGVPdXRBbmltYXRpb25F
dgorX19aTjdXZWJDb3JlMTFQYWdlT3ZlcmxheTVjbGVhckV2CitfX1pON1dlYkNvcmUxMVBhZ2VP
dmVybGF5NWxheWVyRXYKK19fWk43V2ViQ29yZTExUGFnZU92ZXJsYXk2Y3JlYXRlRVJOUzBfNkNs
aWVudEVOUzBfMTFPdmVybGF5VHlwZUUKK19fWk43V2ViQ29yZTExUGFnZU92ZXJsYXk4c2V0RnJh
bWVFTlNfN0ludFJlY3RFCiBfX1pON1dlYkNvcmUxMVNRTFJlc3VsdE9rRQogX19aTjdXZWJDb3Jl
MTFVUkxXaXRoRGF0YUVQNk5TRGF0YVA1TlNVUkwKIF9fWk43V2ViQ29yZTExZ2V0VVJMQnl0ZXNF
UEs3X19DRlVSTFJOM1dURjZWZWN0b3JJY0xtNTEyRU5TM18xNUNyYXNoT25PdmVyZmxvd0VFRQpA
QCAtOTA5LDYgKzkxNiwxMiBAQCBfX1pON1dlYkNvcmUyMU1lbW9yeVByZXNzdXJlSGFuZGxlcjdp
bnN0YWxsRXYKIF9fWk43V2ViQ29yZTIxTmV0d29ya1N0b3JhZ2VTZXNzaW9uMjFkZWZhdWx0U3Rv
cmFnZVNlc3Npb25FdgogX19aTjdXZWJDb3JlMjFOZXR3b3JrU3RvcmFnZVNlc3Npb24yNXN3aXRj
aFRvTmV3VGVzdGluZ1Nlc3Npb25FdgogX19aTjdXZWJDb3JlMjFOZXR3b3JrU3RvcmFnZVNlc3Np
b24yOGNyZWF0ZVByaXZhdGVCcm93c2luZ1Nlc3Npb25FUktOM1dURjZTdHJpbmdFCitfX1pON1dl
YkNvcmUyMVBhZ2VPdmVybGF5Q29udHJvbGxlcjE4aW5zdGFsbFBhZ2VPdmVybGF5RU4zV1RGMTBQ
YXNzUmVmUHRySU5TXzExUGFnZU92ZXJsYXlFRUVOUzNfOEZhZGVNb2RlRQorX19aTjdXZWJDb3Jl
MjFQYWdlT3ZlcmxheUNvbnRyb2xsZXIyMHVuaW5zdGFsbFBhZ2VPdmVybGF5RVBOU18xMVBhZ2VP
dmVybGF5RU5TMV84RmFkZU1vZGVFCitfX1pON1dlYkNvcmUyMVBhZ2VPdmVybGF5Q29udHJvbGxl
cjIwdmlld092ZXJsYXlSb290TGF5ZXJFdgorX19aTjdXZWJDb3JlMjFQYWdlT3ZlcmxheUNvbnRy
b2xsZXIzMmNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlc05hbWVzRWIKK19fWk43V2ViQ29yZTIx
UGFnZU92ZXJsYXlDb250cm9sbGVyNDNjb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZUJvb2xWYWx1
ZUZvclBvaW50RU4zV1RGNlN0cmluZ0VOU18xMEZsb2F0UG9pbnRFUmIKK19fWk43V2ViQ29yZTIx
UGFnZU92ZXJsYXlDb250cm9sbGVyNDVjb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVN0cmluZ1Zh
bHVlRm9yUG9pbnRFTjNXVEY2U3RyaW5nRU5TXzEwRmxvYXRQb2ludEVSUzJfCiBfX1pON1dlYkNv
cmUyMVBsYXRmb3JtS2V5Ym9hcmRFdmVudDI0ZGlzYW1iaWd1YXRlS2V5RG93bkV2ZW50RU5TXzEz
UGxhdGZvcm1FdmVudDRUeXBlRWIKIF9fWk43V2ViQ29yZTIxUmVtb3RlQ29tbWFuZExpc3RlbmVy
NmNyZWF0ZUVSTlNfMjdSZW1vdGVDb21tYW5kTGlzdGVuZXJDbGllbnRFCiBfX1pON1dlYkNvcmUy
MVJlc291cmNlTG9hZFNjaGVkdWxlcjIwc2VydmVQZW5kaW5nUmVxdWVzdHNFTlNfMjBSZXNvdXJj
ZUxvYWRQcmlvcml0eUUKQEAgLTE2MDMsNiArMTYxNiw4IEBAIF9fWk5LN1dlYkNvcmUxMUhpc3Rv
cnlJdGVtOGNoaWxkcmVuRXYKIF9fWk5LN1dlYkNvcmUxMUhpc3RvcnlJdGVtOHJlZmVycmVyRXYK
IF9fWk5LN1dlYkNvcmUxMUhpc3RvcnlJdGVtOXVybFN0cmluZ0V2CiBfX1pOSzdXZWJDb3JlMTFI
aXN0b3J5SXRlbTl2aWV3U3RhdGVFdgorX19aTks3V2ViQ29yZTExUGFnZU92ZXJsYXk1ZnJhbWVF
dgorX19aTks3V2ViQ29yZTExUGFnZU92ZXJsYXk2Ym91bmRzRXYKIF9fWk5LN1dlYkNvcmUxMVJl
bmRlckJsb2NrMjVpbmxpbmVFbGVtZW50Q29udGludWF0aW9uRXYKIF9fWk5LN1dlYkNvcmUxMVJl
bmRlckxheWVyMTlhYnNvbHV0ZUJvdW5kaW5nQm94RXYKIF9fWk5LN1dlYkNvcmUxMVJlbmRlckxh
eWVyMjRuZWVkc0NvbXBvc2l0ZWRTY3JvbGxpbmdFdgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2oKaW5kZXggODY2MWJiMS4uNGRhNWFhMyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvagorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qCkBAIC03MTgw
LDYgKzcxODAsOCBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGFnZVxQYWdlQ29uc29s
ZUNsaWVudC5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwYWdlXFBhZ2VHcm91
cC5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwYWdlXFBhZ2VHcm91cExvYWRE
ZWZlcnJlci5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwYWdlXFBhZ2VPdmVy
bGF5LmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBhZ2VcUGFnZU92ZXJsYXlD
b250cm9sbGVyLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBhZ2VcUGFnZVNl
cmlhbGl6ZXIuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGFnZVxQYWdlVGhy
b3R0bGVyLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBhZ2VcUGFnZVZpc2li
aWxpdHlTdGF0ZS5jcHAiIC8+CkBAIC0xOTE3NSw2ICsxOTE3Nyw4IEBACiAgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxwYWdlXFBhZ2VDb25zb2xlQ2xpZW50LmgiIC8+CiAgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxwYWdlXFBhZ2VHcm91cC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5ccGFnZVxQYWdlR3JvdXBMb2FkRGVmZXJyZXIuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXHBhZ2VcUGFnZU92ZXJsYXkuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXHBhZ2VcUGFnZU92ZXJsYXlDb250cm9sbGVyLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxwYWdlXFBhZ2VTZXJpYWxpemVyLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxwYWdlXFBhZ2VWaXNpYmlsaXR5U3RhdGUuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXHBhZ2VcUGVyZm9ybWFuY2UuaCIgLz4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2ouZmlsdGVycyBiL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2ouZmlsdGVycwppbmRleCBkNzFjY2ZkLi4x
YzRmZTEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29y
ZS52Y3hwcm9qLmZpbHRlcnMKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dl
YkNvcmUudmN4cHJvai5maWx0ZXJzCkBAIC00OTk4LDYgKzQ5OTgsMTIgQEAKICAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXHBhZ2VcUGFnZUdyb3VwTG9hZERlZmVycmVyLmNwcCI+CiAgICAgICA8
RmlsdGVyPnBhZ2U8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXHBhZ2VcUGFnZU92ZXJsYXkuY3BwIj4KKyAgICAgIDxGaWx0ZXI+cGFnZTwvRmls
dGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGFnZVxQ
YWdlT3ZlcmxheUNvbnRyb2xsZXIuY3BwIj4KKyAgICAgIDxGaWx0ZXI+cGFnZTwvRmlsdGVyPgor
ICAgIDwvQ2xDb21waWxlPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGFnZVxQYWdlU2Vy
aWFsaXplci5jcHAiPgogICAgICAgPEZpbHRlcj5wYWdlPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBp
bGU+CkBAIC0xMjk0Myw2ICsxMjk0OSwxMiBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
cGFnZVxQYWdlR3JvdXBMb2FkRGVmZXJyZXIuaCI+CiAgICAgICA8RmlsdGVyPnBhZ2U8L0ZpbHRl
cj4KICAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBhZ2VcUGFn
ZU92ZXJsYXkuaCI+CisgICAgICA8RmlsdGVyPnBhZ2U8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVk
ZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBhZ2VcUGFnZU92ZXJsYXlDb250cm9sbGVy
LmgiPgorICAgICAgPEZpbHRlcj5wYWdlPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CiAgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwYWdlXFBhZ2VTZXJpYWxpemVyLmgiPgogICAgICAgPEZp
bHRlcj5wYWdlPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggZGNmNDZhZS4uOWMxODA1
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagpAQCAtMTA5MSw2ICsxMDkxLDEwIEBACiAJCTJENUE1OTJGMTUyNTI1MjMwMDM2RUU1MSAv
KiBJbWFnZU9yaWVudGF0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEE4NzQ4RDc0MTJDQzNGODkwMDFGQkE0MSAvKiBJbWFnZU9yaWVudGF0aW9u
LmNwcCAqLzsgfTsKIAkJMkQ1QTU5MzExNTI1MjVEMDAwMzZFRTUxIC8qIEltYWdlT3JpZW50YXRp
b24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4NzQ4
RDY2MTJDQzM3NjMwMDFGQkE0MSAvKiBJbWFnZU9yaWVudGF0aW9uLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMkQ1QkM0MjcxNkY4ODJFRTAwNzA0
OEQwIC8qIFNlY3VyaXR5UG9saWN5VmlvbGF0aW9uRXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJENUJDNDI1MTZGODgyQkUwMDcwNDhEMCAvKiBT
ZWN1cml0eVBvbGljeVZpb2xhdGlvbkV2ZW50LmggKi87IH07CisJCTJENUM5Q0ZGMTlDN0I1MkUw
MEIzQzVDMSAvKiBQYWdlT3ZlcmxheS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAyRDVDOUNGQjE5QzdCNTJFMDBCM0M1QzEgLyogUGFnZU92ZXJsYXku
Y3BwICovOyB9OworCQkyRDVDOUQwMDE5QzdCNTJFMDBCM0M1QzEgLyogUGFnZU92ZXJsYXkuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJENUM5Q0ZDMTlD
N0I1MkUwMEIzQzVDMSAvKiBQYWdlT3ZlcmxheS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CisJCTJENUM5RDAxMTlDN0I1MkUwMEIzQzVDMSAvKiBQYWdl
T3ZlcmxheUNvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMkQ1QzlDRkQxOUM3QjUyRTAwQjNDNUMxIC8qIFBhZ2VPdmVybGF5Q29udHJv
bGxlci5jcHAgKi87IH07CisJCTJENUM5RDAyMTlDN0I1MkUwMEIzQzVDMSAvKiBQYWdlT3Zlcmxh
eUNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDJENUM5Q0ZFMTlDN0I1MkUwMEIzQzVDMSAvKiBQYWdlT3ZlcmxheUNvbnRyb2xsZXIuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkyRDZFNDY4
NDE3RDY2MEY1MDBFQ0Y4QkIgLyogUERGRG9jdW1lbnRJbWFnZU1hYy5tbSBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJENkU0NjgyMTdENjYwRjUwMEVDRjhC
QiAvKiBQREZEb2N1bWVudEltYWdlTWFjLm1tICovOyB9OwogCQkyRDcwQkExMzE4MDc0RERGMDAw
MTkwOEEgLyogUGxhdGZvcm1DQUxheWVyTWFjLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAyRDcwQkExMjE4MDc0RERGMDAwMTkwOEEgLyogUGxhdGZvcm1D
QUxheWVyTWFjLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJMkQ3MEJBMTUxODA3NEY4NjAwMDE5MDhBIC8qIFBsYXRmb3JtQ0FMYXllci5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRDcwQkExNDE4MDc0
Rjg1MDAwMTkwOEEgLyogUGxhdGZvcm1DQUxheWVyLmNwcCAqLzsgfTsKQEAgLTgwODUsNiArODA4
OSwxMCBAQAogCQkyRDQ2RjA0RjE3Qjk2RkQyMDA1NjQ3RjAgLyogSW50U2l6ZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbnRTaXplLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMkQ1QkM0MjUxNkY4ODJCRTAwNzA0OEQwIC8qIFNlY3VyaXR5UG9s
aWN5VmlvbGF0aW9uRXZlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2Vj
dXJpdHlQb2xpY3lWaW9sYXRpb25FdmVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkyRDVCQzQyNjE2Rjg4MkJFMDA3MDQ4RDAgLyogU2VjdXJpdHlQb2xpY3lWaW9sYXRpb25FdmVu
dC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gU2VjdXJpdHlQb2xpY3lWaW9sYXRpb25FdmVu
dC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTJENUM5Q0ZCMTlDN0I1MkUwMEIz
QzVDMSAvKiBQYWdlT3ZlcmxheS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBQYWdlT3ZlcmxheS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTJENUM5
Q0ZDMTlDN0I1MkUwMEIzQzVDMSAvKiBQYWdlT3ZlcmxheS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBQYWdlT3ZlcmxheS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkyRDVDOUNGRDE5QzdCNTJFMDBCM0M1QzEgLyogUGFnZU92ZXJsYXlDb250cm9sbGVyLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBhZ2VPdmVybGF5Q29udHJvbGxl
ci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTJENUM5Q0ZFMTlDN0I1MkUwMEIz
QzVDMSAvKiBQYWdlT3ZlcmxheUNvbnRyb2xsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gUGFnZU92ZXJsYXlDb250cm9sbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTJENkU0NjgyMTdENjYwRjUwMEVDRjhCQiAvKiBQREZEb2N1bWVudEltYWdlTWFjLm1t
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gUERGRG9jdW1lbnRJbWFn
ZU1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkQ3MEJBMTIxODA3NERERjAw
MDE5MDhBIC8qIFBsYXRmb3JtQ0FMYXllck1hYy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBQbGF0Zm9ybUNBTGF5ZXJNYWMuaDsgcGF0aCA9IGNhL21hYy9QbGF0Zm9ybUNBTGF5
ZXJNYWMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkQ3MEJBMTQxODA3NEY4NTAw
MDE5MDhBIC8qIFBsYXRmb3JtQ0FMYXllci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IG5hbWUgPSBQbGF0Zm9ybUNBTGF5ZXIuY3BwOyBwYXRoID0gY2EvUGxhdGZvcm1DQUxheWVy
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE2NTk3LDYgKzE2NjA1LDEwIEBA
CiAJCQkJOTMwMkIwQkUwRDc5RjgyQzAwQzdFRTgzIC8qIFBhZ2VHcm91cC5oICovLAogCQkJCTdB
Njc0QkQ5MEY5RUJGNEUwMDZDRjA5OSAvKiBQYWdlR3JvdXBMb2FkRGVmZXJyZXIuY3BwICovLAog
CQkJCTdBNjc0QkRBMEY5RUJGNEUwMDZDRjA5OSAvKiBQYWdlR3JvdXBMb2FkRGVmZXJyZXIuaCAq
LywKKwkJCQkyRDVDOUNGQjE5QzdCNTJFMDBCM0M1QzEgLyogUGFnZU92ZXJsYXkuY3BwICovLAor
CQkJCTJENUM5Q0ZDMTlDN0I1MkUwMEIzQzVDMSAvKiBQYWdlT3ZlcmxheS5oICovLAorCQkJCTJE
NUM5Q0ZEMTlDN0I1MkUwMEIzQzVDMSAvKiBQYWdlT3ZlcmxheUNvbnRyb2xsZXIuY3BwICovLAor
CQkJCTJENUM5Q0ZFMTlDN0I1MkUwMEIzQzVDMSAvKiBQYWdlT3ZlcmxheUNvbnRyb2xsZXIuaCAq
LywKIAkJCQkzNzFFNjVDRDEzNjYxRUVEMDBCRUVEQjAgLyogUGFnZVNlcmlhbGl6ZXIuY3BwICov
LAogCQkJCTM3MUU2NUNCMTM2NjFFREMwMEJFRURCMCAvKiBQYWdlU2VyaWFsaXplci5oICovLAog
CQkJCUE3MTk3RjI1MTc1NjhBRTUwMDdCOTQ0MiAvKiBQYWdlVGhyb3R0bGVyLmNwcCAqLywKQEAg
LTIzNjYyLDYgKzIzNjc0LDcgQEAKIAkJCQk5N0JDNkEyMTE1MDVGMDgxMDAxQjc0QUMgLyogRGF0
YWJhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3QkM2QTI0MTUwNUYwODEwMDFCNzRBQyAvKiBE
YXRhYmFzZUF1dGhvcml6ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFMTZDRkQ0MTY5RDFERUQw
MEQzQTBDNyAvKiBEYXRhYmFzZUJhY2tlbmQuaCBpbiBIZWFkZXJzICovLAorCQkJCTJENUM5RDAy
MTlDN0I1MkUwMEIzQzVDMSAvKiBQYWdlT3ZlcmxheUNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCTk3QkM2OURCMTUwNUYwNzYwMDFCNzRBQyAvKiBEYXRhYmFzZUJhY2tlbmRCYXNlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlGRTZGNkFCMDE2OUUwNTc1MDBGQzMwQTIgLyogRGF0YWJhc2VC
YWNrZW5kQ29udGV4dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkUxNkNGRDYxNjlEMURFRDAwRDNB
MEM3IC8qIERhdGFiYXNlQmFja2VuZFN5bmMuaCBpbiBIZWFkZXJzICovLApAQCAtMjU2MjksNiAr
MjU2NDIsNyBAQAogCQkJCTQzOTA0NkVDMTJEQTI1RTgwMEFGODBBOSAvKiBSZW5kZXJNYXRoTUxU
b2tlbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDM5MDQ2RUExMkRBMjVFODAwQUY4MEEyIC8qIFJl
bmRlck1hdGhNTFVuZGVyT3Zlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTRDMjc5NTkwQ0Y5NzQx
OTAwRTk3Qjk4IC8qIFJlbmRlck1lZGlhLmggaW4gSGVhZGVycyAqLywKKwkJCQkyRDVDOUQwMDE5
QzdCNTJFMDBCM0M1QzEgLyogUGFnZU92ZXJsYXkuaCBpbiBIZWFkZXJzICovLAogCQkJCURFQkND
REQyMTY2NDZFODIwMEE0NTJFMSAvKiBSZW5kZXJNZWRpYUNvbnRyb2xFbGVtZW50cy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNDFGQTMwM0YxMzE2QzI5QzAwQzBCRkM1IC8qIFJlbmRlck1lZGlhQ29u
dHJvbHMuaCBpbiBIZWFkZXJzICovLAogCQkJCUFCRERGRTdBMEE1QzZFNzAwMEEzRTExRCAvKiBS
ZW5kZXJNZW51TGlzdC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yODAxNyw2ICsyODAzMSw3IEBACiAJ
CQkJQTU4NDBFMUMxODdCNzRENTAwODQzQjEwIC8qIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNv
b2tpZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3MUIxRTEyNjE2NDA0OTFBMDBCMTg4MEEgLyog
SW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTA0QUFDQ0Qx
ODM0NDU1OTAwRTNEOUJDIC8qIEluc3BlY3Rvck5vZGVGaW5kZXIuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJMkQ1QzlEMDExOUM3QjUyRTAwQjNDNUMxIC8qIFBhZ2VPdmVybGF5Q29udHJvbGxlci5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk3QzUyMkQ0QjE1QjQ3N0U4MDA5QjdDOTUgLyogSW5zcGVj
dG9yT3ZlcmxheS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0RjZGREQ2NDEzNDFERUREMDAxRjhF
RTMgLyogSW5zcGVjdG9yUGFnZUFnZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk5Q0MwQjY2
MThCRTlGMTUwMDZDRUJDQyAvKiBJbnNwZWN0b3JSZXBsYXlBZ2VudC5jcHAgaW4gU291cmNlcyAq
LywKQEAgLTI4MDg1LDYgKzI4MTAwLDcgQEAKIAkJCQlCQ0MwNjU4NzBGM0NFMkE3MDBDRDJEODcg
LyogSlNDbGllbnRSZWN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDQzA2NTg5MEYzQ0UyQTcw
MENEMkQ4NyAvKiBKU0NsaWVudFJlY3RMaXN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTVDNDMw
NEI1MTkxQUVGNDYwMDBFMkJDMCAvKiBKU0VYVFNoYWRlclRleHR1cmVMT0QuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJMkQ1QzlDRkYxOUM3QjUyRTAwQjNDNUMxIC8qIFBhZ2VPdmVybGF5LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTc2RkI5RkY4MTlBNzNFM0EwMDQyMDU2MiAvKiBKU0F1dG9jb21w
bGV0ZUVycm9yRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNBODNFNEYwRDdDRTFFOTAw
MzQyMUE4IC8qIEpTRGF0YVRyYW5zZmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDQTgzRTUy
MEQ3Q0UyMDUwMDM0MjFBOCAvKiBKU0RhdGFUcmFuc2ZlckN1c3RvbS5jcHAgaW4gU291cmNlcyAq
LywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9FbXB0eUNsaWVudHMuaCBiL1Nv
dXJjZS9XZWJDb3JlL2xvYWRlci9FbXB0eUNsaWVudHMuaAppbmRleCAzN2JlNDQ4Li45YzkwY2I3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5oCkBAIC0xODIsNiArMTgyLDcgQEAg
cHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxSZWN0SW50b1ZpZXcoY29uc3QgSW50UmVj
dCYpIGNvbnN0IG92ZXJyaWRlIHsgfQogCiAgICAgdmlydHVhbCB2b2lkIGF0dGFjaFJvb3RHcmFw
aGljc0xheWVyKEZyYW1lKiwgR3JhcGhpY3NMYXllciopIG92ZXJyaWRlIHsgfQorICAgIHZpcnR1
YWwgdm9pZCBhdHRhY2hWaWV3T3ZlcmxheUdyYXBoaWNzTGF5ZXIoRnJhbWUqLCBHcmFwaGljc0xh
eWVyKikgb3ZlcnJpZGUgeyB9CiAgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzT25lU2hvdERyYXdp
bmdTeW5jaHJvbml6YXRpb24oKSBvdmVycmlkZSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgc2NoZWR1
bGVDb21wb3NpdGluZ0xheWVyRmx1c2goKSBvdmVycmlkZSB7IH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hy
b21lQ2xpZW50LmgKaW5kZXggZThkYTBlOS4uYmY1NjM0ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9t
ZUNsaWVudC5oCkBAIC0yOTksNiArMjk5LDcgQEAgcHVibGljOgogCiAgICAgLy8gUGFzcyAwIGFz
IHRoZSBHcmFwaGljc0xheWVyIHRvIGRldGF0Y2ggdGhlIHJvb3QgbGF5ZXIuCiAgICAgdmlydHVh
bCB2b2lkIGF0dGFjaFJvb3RHcmFwaGljc0xheWVyKEZyYW1lKiwgR3JhcGhpY3NMYXllciopID0g
MDsKKyAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoVmlld092ZXJsYXlHcmFwaGljc0xheWVyKEZyYW1l
KiwgR3JhcGhpY3NMYXllciopID0gMDsKICAgICAvLyBTZXRzIGEgZmxhZyB0byBzcGVjaWZ5IHRo
YXQgdGhlIG5leHQgdGltZSBjb250ZW50IGlzIGRyYXduIHRvIHRoZSB3aW5kb3csCiAgICAgLy8g
dGhlIGNoYW5nZXMgYXBwZWFyIG9uIHRoZSBzY3JlZW4gaW4gc3luY2hyb255IHdpdGggdXBkYXRl
cyB0byBHcmFwaGljc0xheWVycy4KICAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNPbmVTaG90RHJh
d2luZ1N5bmNocm9uaXphdGlvbigpID0gMDsKQEAgLTMwOCw4ICszMDksNiBAQCBwdWJsaWM6CiAg
ICAgLy8gUmV0dXJucyB3aGV0aGVyIG9yIG5vdCB0aGUgY2xpZW50IGNhbiByZW5kZXIgdGhlIGNv
bXBvc2l0ZWQgbGF5ZXIsCiAgICAgLy8gcmVnYXJkbGVzcyBvZiB0aGUgc2V0dGluZ3MuCiAgICAg
dmlydHVhbCBib29sIGFsbG93c0FjY2VsZXJhdGVkQ29tcG9zaXRpbmcoKSBjb25zdCB7IHJldHVy
biB0cnVlOyB9Ci0gICAgLy8gU3VwcGx5IGEgbGF5ZXIgdGhhdCB3aWxsIGFkZGVkIGFzIGFuIG92
ZXJsYXkgb3ZlciBvdGhlciBkb2N1bWVudCBsYXllcnMgKHNjcm9sbGluZyB3aXRoIHRoZSBkb2N1
bWVudCkuCi0gICAgdmlydHVhbCBHcmFwaGljc0xheWVyKiBkb2N1bWVudE92ZXJsYXlMYXllckZv
ckZyYW1lKEZyYW1lJikgeyByZXR1cm4gbnVsbHB0cjsgfQogCiAgICAgZW51bSBDb21wb3NpdGlu
Z1RyaWdnZXIgewogICAgICAgICBUaHJlZURUcmFuc2Zvcm1UcmlnZ2VyID0gMSA8PCAwLApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCmluZGV4IDVkOTEwZjMuLmVhZmVhNjIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKQEAgLTY2LDYgKzY2LDcgQEAKICNpbmNsdWRl
ICJNb3VzZUV2ZW50LmgiCiAjaW5jbHVkZSAiTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cy5o
IgogI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJQYWdlT3ZlcmxheUNvbnRyb2xsZXIuaCIK
ICNpbmNsdWRlICJQbGF0Zm9ybUV2ZW50LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1LZXlib2FyZEV2
ZW50LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1XaGVlbEV2ZW50LmgiCkBAIC0xNjQzLDYgKzE2NDQs
OSBAQCBib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxlTW91c2VQcmVzc0V2ZW50KGNvbnN0IFBsYXRm
b3JtTW91c2VFdmVudCYgcGxhdGZvcm1Nb3VzZQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9
CiAKKyAgICBpZiAobV9mcmFtZS5tYWluRnJhbWUoKS5wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKS5o
YW5kbGVNb3VzZUV2ZW50KHBsYXRmb3JtTW91c2VFdmVudCkpCisgICAgICAgIHJldHVybiB0cnVl
OworCiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKICAgICBib29sIGRlZmF1bHRQcmV2ZW50ZWQg
PSBkaXNwYXRjaFN5bnRoZXRpY1RvdWNoRXZlbnRJZkVuYWJsZWQocGxhdGZvcm1Nb3VzZUV2ZW50
KTsKICAgICBpZiAoZGVmYXVsdFByZXZlbnRlZCkKQEAgLTE4MzYsNiArMTg0MCw5IEBAIGJvb2wg
RXZlbnRIYW5kbGVyOjptb3VzZU1vdmVkKGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgZXZlbnQp
CiAgICAgUmVmUHRyPEZyYW1lVmlldz4gcHJvdGVjdG9yKG1fZnJhbWUudmlldygpKTsKICAgICBN
YXhpbXVtRHVyYXRpb25UcmFja2VyIG1heER1cmF0aW9uVHJhY2tlcigmbV9tYXhNb3VzZU1vdmVk
RHVyYXRpb24pOwogCisgICAgaWYgKG1fZnJhbWUubWFpbkZyYW1lKCkucGFnZU92ZXJsYXlDb250
cm9sbGVyKCkuaGFuZGxlTW91c2VFdmVudChldmVudCkpCisgICAgICAgIHJldHVybiB0cnVlOwor
CiAgICAgSGl0VGVzdFJlc3VsdCBob3ZlcmVkTm9kZSA9IEhpdFRlc3RSZXN1bHQoTGF5b3V0UG9p
bnQoKSk7CiAgICAgYm9vbCByZXN1bHQgPSBoYW5kbGVNb3VzZU1vdmVFdmVudChldmVudCwgJmhv
dmVyZWROb2RlKTsKIApAQCAtMjAxOSw2ICsyMDI2LDkgQEAgYm9vbCBFdmVudEhhbmRsZXI6Omhh
bmRsZU1vdXNlUmVsZWFzZUV2ZW50KGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgcGxhdGZvcm1N
b3UKIAogICAgIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2V0Q2FyZXRCbGlua2luZ1N1c3BlbmRlZChm
YWxzZSk7CiAKKyAgICBpZiAobV9mcmFtZS5tYWluRnJhbWUoKS5wYWdlT3ZlcmxheUNvbnRyb2xs
ZXIoKS5oYW5kbGVNb3VzZUV2ZW50KHBsYXRmb3JtTW91c2VFdmVudCkpCisgICAgICAgIHJldHVy
biB0cnVlOworCiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKICAgICBib29sIGRlZmF1bHRQcmV2
ZW50ZWQgPSBkaXNwYXRjaFN5bnRoZXRpY1RvdWNoRXZlbnRJZkVuYWJsZWQocGxhdGZvcm1Nb3Vz
ZUV2ZW50KTsKICAgICBpZiAoZGVmYXVsdFByZXZlbnRlZCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3
LmNwcAppbmRleCBiY2I1MDQ0Li4xNmNhYjM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0ZyYW1lVmlldy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3Bw
CkBAIC02MCw2ICs2MCw3IEBACiAjaW5jbHVkZSAiTWVtb3J5Q2FjaGUuaCIKICNpbmNsdWRlICJN
ZW1vcnlQcmVzc3VyZUhhbmRsZXIuaCIKICNpbmNsdWRlICJPdmVyZmxvd0V2ZW50LmgiCisjaW5j
bHVkZSAiUGFnZU92ZXJsYXlDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiUHJvZ3Jlc3NUcmFja2Vy
LmgiCiAjaW5jbHVkZSAiUmVuZGVyRW1iZWRkZWRPYmplY3QuaCIKICNpbmNsdWRlICJSZW5kZXJG
dWxsU2NyZWVuLmgiCkBAIC00MzMsNyArNDM0LDYgQEAgdm9pZCBGcmFtZVZpZXc6OnNldEZyYW1l
UmVjdChjb25zdCBJbnRSZWN0JiBuZXdSZWN0KQogI2lmIEVOQUJMRShURVhUX0FVVE9TSVpJTkcp
CiAgICAgLy8gQXV0b3NpemVkIGZvbnQgc2l6ZXMgZGVwZW5kIG9uIHRoZSB3aWR0aCBvZiB0aGUg
dmlld2luZyBhcmVhLgogICAgIGlmIChuZXdSZWN0LndpZHRoKCkgIT0gb2xkUmVjdC53aWR0aCgp
KSB7Ci0gICAgICAgIFBhZ2UqIHBhZ2UgPSBmcmFtZSgpLnBhZ2UoKTsKICAgICAgICAgaWYgKGZy
YW1lKCkuaXNNYWluRnJhbWUoKSAmJiBwYWdlLT5zZXR0aW5ncygpLnRleHRBdXRvc2l6aW5nRW5h
YmxlZCgpKSB7CiAgICAgICAgICAgICBmb3IgKEZyYW1lKiBmcmFtZSA9ICZwYWdlLT5tYWluRnJh
bWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQoKSkKICAgICAg
ICAgICAgICAgICBmcmFtZSgpLmRvY3VtZW50KCktPnRleHRBdXRvc2l6ZXIoKS0+cmVjYWxjdWxh
dGVNdWx0aXBsaWVycygpOwpAQCAtNDQ5LDYgKzQ0OSw5IEBAIHZvaWQgRnJhbWVWaWV3OjpzZXRG
cmFtZVJlY3QoY29uc3QgSW50UmVjdCYgbmV3UmVjdCkKICAgICAgICAgaWYgKHJlbmRlclZpZXct
PnVzZXNDb21wb3NpdGluZygpKQogICAgICAgICAgICAgcmVuZGVyVmlldy0+Y29tcG9zaXRvcigp
LmZyYW1lVmlld0RpZENoYW5nZVNpemUoKTsKICAgICB9CisKKyAgICBpZiAoZnJhbWUoKS5pc01h
aW5GcmFtZSgpKQorICAgICAgICBmcmFtZSgpLm1haW5GcmFtZSgpLnBhZ2VPdmVybGF5Q29udHJv
bGxlcigpLmRpZENoYW5nZVZpZXdTaXplKCk7CiB9CiAKICNpZiBFTkFCTEUoUkVRVUVTVF9BTklN
QVRJT05fRlJBTUUpCkBAIC01NjIsNiArNTY1LDkgQEAgdm9pZCBGcmFtZVZpZXc6OnNldENvbnRl
bnRzU2l6ZShjb25zdCBJbnRTaXplJiBzaXplKQogCiAgICAgcGFnZS0+Y2hyb21lKCkuY29udGVu
dHNTaXplQ2hhbmdlZCgmZnJhbWUoKSwgc2l6ZSk7IC8vIE5vdGlmeSBvbmx5LgogCisgICAgaWYg
KGZyYW1lKCkuaXNNYWluRnJhbWUoKSkKKyAgICAgICAgZnJhbWUoKS5tYWluRnJhbWUoKS5wYWdl
T3ZlcmxheUNvbnRyb2xsZXIoKS5kaWRDaGFuZ2VEb2N1bWVudFNpemUoKTsKKwogICAgIEFTU0VS
VChtX2RlZmVyU2V0TmVlZHNMYXlvdXRzKTsKICAgICBtX2RlZmVyU2V0TmVlZHNMYXlvdXRzLS07
CiAgICAgCkBAIC0yMDQ4LDcgKzIwNTQsNyBAQCB2b2lkIEZyYW1lVmlldzo6c2V0Rml4ZWRWaXNp
YmxlQ29udGVudFJlY3QoY29uc3QgSW50UmVjdCYgdmlzaWJsZUNvbnRlbnRSZWN0KQogICAgICAg
ICAvLyBVcGRhdGUgdGhlIHNjcm9sbC1iYXJzIHRvIGNhbGN1bGF0ZSBuZXcgcGFnZS1zdGVwIHNp
emUuCiAgICAgICAgIHVwZGF0ZVNjcm9sbGJhcnMoc2Nyb2xsT2Zmc2V0KCkpOwogICAgIH0KLSAg
ICBmcmFtZSgpLmxvYWRlcigpLmNsaWVudCgpLmRpZENoYW5nZVNjcm9sbE9mZnNldCgpOworICAg
IGRpZENoYW5nZVNjcm9sbE9mZnNldCgpOwogfQogI2VuZGlmCiAKQEAgLTIwNjEsNiArMjA2Nywx
MiBAQCB2b2lkIEZyYW1lVmlldzo6c2V0Vmlld3BvcnRDb25zdHJhaW5lZE9iamVjdHNOZWVkTGF5
b3V0KCkKICAgICAgICAgcmVuZGVyZXItPnNldE5lZWRzTGF5b3V0KCk7CiB9CiAKK3ZvaWQgRnJh
bWVWaWV3OjpkaWRDaGFuZ2VTY3JvbGxPZmZzZXQoKQoreworICAgIGZyYW1lKCkubWFpbkZyYW1l
KCkucGFnZU92ZXJsYXlDb250cm9sbGVyKCkuZGlkU2Nyb2xsRnJhbWUoZnJhbWUoKSk7CisgICAg
ZnJhbWUoKS5sb2FkZXIoKS5jbGllbnQoKS5kaWRDaGFuZ2VTY3JvbGxPZmZzZXQoKTsKK30KKwog
dm9pZCBGcmFtZVZpZXc6OnNjcm9sbFBvc2l0aW9uQ2hhbmdlZFZpYVBsYXRmb3JtV2lkZ2V0KGNv
bnN0IEludFBvaW50JiBvbGRQb3NpdGlvbiwgY29uc3QgSW50UG9pbnQmIG5ld1Bvc2l0aW9uKQog
ewogICAgIHVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJTY3JvbGxpbmcoKTsKQEAgLTMyMjMsNyAr
MzIzNSw3IEBAIHZvaWQgRnJhbWVWaWV3OjpzY3JvbGxUbyhjb25zdCBJbnRTaXplJiBuZXdPZmZz
ZXQpCiAgICAgU2Nyb2xsVmlldzo6c2Nyb2xsVG8obmV3T2Zmc2V0KTsKICAgICBpZiAob2Zmc2V0
ICE9IHNjcm9sbE9mZnNldCgpKQogICAgICAgICBzY3JvbGxQb3NpdGlvbkNoYW5nZWQob2xkUG9z
aXRpb24sIHNjcm9sbFBvc2l0aW9uKCkpOwotICAgIGZyYW1lKCkubG9hZGVyKCkuY2xpZW50KCku
ZGlkQ2hhbmdlU2Nyb2xsT2Zmc2V0KCk7CisgICAgZGlkQ2hhbmdlU2Nyb2xsT2Zmc2V0KCk7CiB9
CiAKIGZsb2F0IEZyYW1lVmlldzo6YWRqdXN0U2Nyb2xsU3RlcEZvckZpeGVkQ29udGVudChmbG9h
dCBzdGVwLCBTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbiwgU2Nyb2xsR3JhbnVsYXJp
dHkgZ3JhbnVsYXJpdHkpCkBAIC00MjkyLDcgKzQzMDQsNyBAQCBib29sIEZyYW1lVmlldzo6d2hl
ZWxFdmVudChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIHdoZWVsRXZlbnQpCiAgICAgICAgIGlm
IChvZmZzZXQgIT0gbmV3T2Zmc2V0KSB7CiAgICAgICAgICAgICBTY3JvbGxWaWV3OjpzY3JvbGxU
byhuZXdPZmZzZXQpOwogICAgICAgICAgICAgc2Nyb2xsUG9zaXRpb25DaGFuZ2VkKG9sZFBvc2l0
aW9uLCBzY3JvbGxQb3NpdGlvbigpKTsKLSAgICAgICAgICAgIGZyYW1lKCkubG9hZGVyKCkuY2xp
ZW50KCkuZGlkQ2hhbmdlU2Nyb2xsT2Zmc2V0KCk7CisgICAgICAgICAgICBkaWRDaGFuZ2VTY3Jv
bGxPZmZzZXQoKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC00
NjE1LDYgKzQ2MjcsOCBAQCB2b2lkIEZyYW1lVmlldzo6c2V0RXhwb3NlZFJlY3QoRmxvYXRSZWN0
IGV4cG9zZWRSZWN0KQogCiAgICAgaWYgKGF1dG8qIHZpZXcgPSByZW5kZXJWaWV3KCkpCiAgICAg
ICAgIHZpZXctPmNvbXBvc2l0b3IoKS5zY2hlZHVsZUxheWVyRmx1c2goZmFsc2UgLyogY2FuVGhy
b3R0bGUgKi8pOworCisgICAgZnJhbWUoKS5tYWluRnJhbWUoKS5wYWdlT3ZlcmxheUNvbnRyb2xs
ZXIoKS5kaWRDaGFuZ2VFeHBvc2VkUmVjdCgpOwogfQogICAgIAogdm9pZCBGcmFtZVZpZXc6OnNl
dFZpZXdwb3J0U2l6ZUZvckNTU1ZpZXdwb3J0VW5pdHMoSW50U2l6ZSBzaXplKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
RnJhbWVWaWV3LmgKaW5kZXggMzc1Njk2YS4uOTJhYTliOSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGFnZS9GcmFtZVZpZXcuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmll
dy5oCkBAIC01MTEsNiArNTExLDggQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBmbG9hdCBhZGp1
c3RTY3JvbGxTdGVwRm9yRml4ZWRDb250ZW50KGZsb2F0IHN0ZXAsIFNjcm9sbGJhck9yaWVudGF0
aW9uLCBTY3JvbGxHcmFudWxhcml0eSkgb3ZlcnJpZGU7CiAKKyAgICB2b2lkIGRpZENoYW5nZVNj
cm9sbE9mZnNldCgpOworCiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCBib29sIHNjcm9sbENvbnRl
bnRzRmFzdFBhdGgoY29uc3QgSW50U2l6ZSYgc2Nyb2xsRGVsdGEsIGNvbnN0IEludFJlY3QmIHJl
Y3RUb1Njcm9sbCwgY29uc3QgSW50UmVjdCYgY2xpcFJlY3QpIG92ZXJyaWRlOwogICAgIHZpcnR1
YWwgdm9pZCBzY3JvbGxDb250ZW50c1Nsb3dQYXRoKGNvbnN0IEludFJlY3QmIHVwZGF0ZVJlY3Qp
IG92ZXJyaWRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9NYWluRnJhbWUuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGFnZS9NYWluRnJhbWUuY3BwCmluZGV4IDgyOGJkMjMuLjg1NTM1
YmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvTWFpbkZyYW1lLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL01haW5GcmFtZS5jcHAKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNs
dWRlICJjb25maWcuaCIKICNpbmNsdWRlICJNYWluRnJhbWUuaCIKIAorI2luY2x1ZGUgIlBhZ2VP
dmVybGF5Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIlNjcm9sbExhdGNoaW5nU3RhdGUuaCIKICNp
bmNsdWRlICJXaGVlbEV2ZW50RGVsdGFUcmFja2VyLmgiCiAKQEAgLTM4LDYgKzM5LDcgQEAgaW5s
aW5lIE1haW5GcmFtZTo6TWFpbkZyYW1lKFBhZ2UmIHBhZ2UsIEZyYW1lTG9hZGVyQ2xpZW50JiBj
bGllbnQpCiAgICAgLCBtX2xhdGNoaW5nU3RhdGUoc3RkOjptYWtlX3VuaXF1ZTxTY3JvbGxMYXRj
aGluZ1N0YXRlPigpKQogI2VuZGlmCiAgICAgLCBtX3JlY2VudFdoZWVsRXZlbnREZWx0YVRyYWNr
ZXIoc3RkOjptYWtlX3VuaXF1ZTxXaGVlbEV2ZW50RGVsdGFUcmFja2VyPigpKQorICAgICwgbV9w
YWdlT3ZlcmxheUNvbnRyb2xsZXIoc3RkOjptYWtlX3VuaXF1ZTxQYWdlT3ZlcmxheUNvbnRyb2xs
ZXI+KCp0aGlzKSkKIHsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9NYWlu
RnJhbWUuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvTWFpbkZyYW1lLmgKaW5kZXggOGExNDc2Yi4u
MzhkOTQ1ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9NYWluRnJhbWUuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL01haW5GcmFtZS5oCkBAIC0zMCw2ICszMCw3IEBACiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgUGFnZU92ZXJsYXlDb250cm9sbGVyOwogY2xhc3Mg
U2Nyb2xsTGF0Y2hpbmdTdGF0ZTsKIGNsYXNzIFdoZWVsRXZlbnREZWx0YVRyYWNrZXI7CiAKQEAg
LTQzLDYgKzQ0LDcgQEAgcHVibGljOgogICAgIHZvaWQgc2VsZk9ubHlEZXJlZigpOwogCiAgICAg
V2hlZWxFdmVudERlbHRhVHJhY2tlciogd2hlZWxFdmVudERlbHRhVHJhY2tlcigpIHsgcmV0dXJu
IG1fcmVjZW50V2hlZWxFdmVudERlbHRhVHJhY2tlci5nZXQoKTsgfQorICAgIFBhZ2VPdmVybGF5
Q29udHJvbGxlciYgcGFnZU92ZXJsYXlDb250cm9sbGVyKCkgeyByZXR1cm4gKm1fcGFnZU92ZXJs
YXlDb250cm9sbGVyOyB9CiAKICNpZiBQTEFURk9STShNQUMpCiAgICAgU2Nyb2xsTGF0Y2hpbmdT
dGF0ZSogbGF0Y2hpbmdTdGF0ZSgpIHsgcmV0dXJuIG1fbGF0Y2hpbmdTdGF0ZS5nZXQoKTsgfQpA
QCAtNjAsNiArNjIsNyBAQCBwcml2YXRlOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxTY3JvbGxMYXRj
aGluZ1N0YXRlPiBtX2xhdGNoaW5nU3RhdGU7CiAjZW5kaWYKICAgICBzdGQ6OnVuaXF1ZV9wdHI8
V2hlZWxFdmVudERlbHRhVHJhY2tlcj4gbV9yZWNlbnRXaGVlbEV2ZW50RGVsdGFUcmFja2VyOwor
ICAgIHN0ZDo6dW5pcXVlX3B0cjxQYWdlT3ZlcmxheUNvbnRyb2xsZXI+IG1fcGFnZU92ZXJsYXlD
b250cm9sbGVyOwogfTsKIAogaW5saW5lIGJvb2wgRnJhbWU6OmlzTWFpbkZyYW1lKCkgY29uc3QK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL1BhZ2UuY3BwCmluZGV4IDI2YjhkMTcuLjBlNjlkMTQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNw
cApAQCAtNjAsNiArNjAsNyBAQAogI2luY2x1ZGUgIlBhZ2VDb25zb2xlQ2xpZW50LmgiCiAjaW5j
bHVkZSAiUGFnZURlYnVnZ2FibGUuaCIKICNpbmNsdWRlICJQYWdlR3JvdXAuaCIKKyNpbmNsdWRl
ICJQYWdlT3ZlcmxheUNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJQYWdlVGhyb3R0bGVyLmgiCiAj
aW5jbHVkZSAiUGx1Z0luQ2xpZW50LmgiCiAjaW5jbHVkZSAiUGx1Z2luRGF0YS5oIgpAQCAtODEx
LDYgKzgxMiw4IEBAIHZvaWQgUGFnZTo6c2V0RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQgc2NhbGVG
YWN0b3IpCiAKICAgICBwYWdlQ2FjaGUoKS0+bWFya1BhZ2VzRm9yRnVsbFN0eWxlUmVjYWxjKHRo
aXMpOwogICAgIEdyYXBoaWNzQ29udGV4dDo6dXBkYXRlRG9jdW1lbnRNYXJrZXJSZXNvdXJjZXMo
KTsKKworICAgIG1haW5GcmFtZSgpLnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLmRpZENoYW5nZURl
dmljZVNjYWxlRmFjdG9yKCk7CiB9CiAKIHZvaWQgUGFnZTo6c2V0VG9wQ29udGVudEluc2V0KGZs
b2F0IGNvbnRlbnRJbnNldCkKQEAgLTE2MTgsNyArMTYyMSw2IEBAIHZvaWQgUGFnZTo6c2V0U2Vz
c2lvbklEKFNlc3Npb25JRCBzZXNzaW9uSUQpCiAKICAgICBmb3IgKGF1dG8mIHZpZXcgOiBwbHVn
aW5WaWV3cygpKQogICAgICAgICB2aWV3LT5wcml2YXRlQnJvd3NpbmdTdGF0ZUNoYW5nZWQoc2Vz
c2lvbklELmlzRXBoZW1lcmFsKCkpOwotCiB9CiAKIFBhZ2U6OlBhZ2VDbGllbnRzOjpQYWdlQ2xp
ZW50cygpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VPdmVybGF5LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZU92ZXJsYXkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjA3NDkxNjIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL1BhZ2VPdmVybGF5LmNwcApAQCAtMCwwICsxLDI2NCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQYWdlT3ZlcmxheS5oIgorCisjaW5jbHVkZSAi
RnJhbWVWaWV3LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiTWFp
bkZyYW1lLmgiCisjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlBhZ2VPdmVybGF5Q29udHJv
bGxlci5oIgorI2luY2x1ZGUgIlBsYXRmb3JtTW91c2VFdmVudC5oIgorI2luY2x1ZGUgIlNjcm9s
bGJhclRoZW1lLmgiCisjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworc3RhdGljIGNvbnN0IGRvdWJsZSBmYWRlQW5pbWF0aW9uRHVyYXRpb24gPSAw
LjI7CitzdGF0aWMgY29uc3QgZG91YmxlIGZhZGVBbmltYXRpb25GcmFtZVJhdGUgPSAzMDsKKwor
UGFzc1JlZlB0cjxQYWdlT3ZlcmxheT4gUGFnZU92ZXJsYXk6OmNyZWF0ZShDbGllbnQmIGNsaWVu
dCwgT3ZlcmxheVR5cGUgb3ZlcmxheVR5cGUpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBQ
YWdlT3ZlcmxheShjbGllbnQsIG92ZXJsYXlUeXBlKSk7Cit9CisKK1BhZ2VPdmVybGF5OjpQYWdl
T3ZlcmxheShDbGllbnQmIGNsaWVudCwgT3ZlcmxheVR5cGUgb3ZlcmxheVR5cGUpCisgICAgOiBt
X2NsaWVudChjbGllbnQpCisgICAgLCBtX3BhZ2UobnVsbHB0cikKKyAgICAsIG1fZmFkZUFuaW1h
dGlvblRpbWVyKFJ1bkxvb3A6Om1haW4oKSwgdGhpcywgJlBhZ2VPdmVybGF5OjpmYWRlQW5pbWF0
aW9uVGltZXJGaXJlZCkKKyAgICAsIG1fZmFkZUFuaW1hdGlvblN0YXJ0VGltZSgwKQorICAgICwg
bV9mYWRlQW5pbWF0aW9uRHVyYXRpb24oZmFkZUFuaW1hdGlvbkR1cmF0aW9uKQorICAgICwgbV9m
YWRlQW5pbWF0aW9uVHlwZShOb0FuaW1hdGlvbikKKyAgICAsIG1fZnJhY3Rpb25GYWRlZEluKDEp
CisgICAgLCBtX292ZXJsYXlUeXBlKG92ZXJsYXlUeXBlKQorICAgICwgbV9iYWNrZ3JvdW5kQ29s
b3IoQ29sb3I6OnRyYW5zcGFyZW50KQoreworfQorCitQYWdlT3ZlcmxheTo6flBhZ2VPdmVybGF5
KCkKK3sKK30KKworUGFnZU92ZXJsYXlDb250cm9sbGVyKiBQYWdlT3ZlcmxheTo6Y29udHJvbGxl
cigpIGNvbnN0Cit7CisgICAgaWYgKCFtX3BhZ2UpCisgICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgIHJldHVybiAmbV9wYWdlLT5tYWluRnJhbWUoKS5wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKTsK
K30KKworSW50UmVjdCBQYWdlT3ZlcmxheTo6Ym91bmRzKCkgY29uc3QKK3sKKyAgICBpZiAoIW1f
b3ZlcnJpZGVGcmFtZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBJbnRSZWN0KEludFBvaW50
KCksIG1fb3ZlcnJpZGVGcmFtZS5zaXplKCkpOworCisgICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcg
PSBtX3BhZ2UtPm1haW5GcmFtZSgpLnZpZXcoKTsKKworICAgIGlmICghZnJhbWVWaWV3KQorICAg
ICAgICByZXR1cm4gSW50UmVjdCgpOworCisgICAgc3dpdGNoIChtX292ZXJsYXlUeXBlKSB7Cisg
ICAgY2FzZSBPdmVybGF5VHlwZTo6VmlldzogeworICAgICAgICBpbnQgd2lkdGggPSBmcmFtZVZp
ZXctPndpZHRoKCk7CisgICAgICAgIGludCBoZWlnaHQgPSBmcmFtZVZpZXctPmhlaWdodCgpOwor
CisgICAgICAgIGlmICghU2Nyb2xsYmFyVGhlbWU6OnRoZW1lKCktPnVzZXNPdmVybGF5U2Nyb2xs
YmFycygpKSB7CisgICAgICAgICAgICBpZiAoZnJhbWVWaWV3LT52ZXJ0aWNhbFNjcm9sbGJhcigp
KQorICAgICAgICAgICAgICAgIHdpZHRoIC09IGZyYW1lVmlldy0+dmVydGljYWxTY3JvbGxiYXIo
KS0+d2lkdGgoKTsKKyAgICAgICAgICAgIGlmIChmcmFtZVZpZXctPmhvcml6b250YWxTY3JvbGxi
YXIoKSkKKyAgICAgICAgICAgICAgICBoZWlnaHQgLT0gZnJhbWVWaWV3LT5ob3Jpem9udGFsU2Ny
b2xsYmFyKCktPmhlaWdodCgpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBJbnRSZWN0KDAs
IDAsIHdpZHRoLCBoZWlnaHQpOworICAgIH0KKyAgICBjYXNlIE92ZXJsYXlUeXBlOjpEb2N1bWVu
dDoKKyAgICAgICAgcmV0dXJuIEludFJlY3QoSW50UG9pbnQoKSwgZnJhbWVWaWV3LT5jb250ZW50
c1NpemUoKSk7CisgICAgfTsKKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVy
biBJbnRSZWN0KEludFBvaW50KCksIGZyYW1lVmlldy0+Y29udGVudHNTaXplKCkpOworfQorCitJ
bnRSZWN0IFBhZ2VPdmVybGF5OjpmcmFtZSgpIGNvbnN0Cit7CisgICAgaWYgKCFtX292ZXJyaWRl
RnJhbWUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gbV9vdmVycmlkZUZyYW1lOworCisgICAg
cmV0dXJuIGJvdW5kcygpOworfQorCit2b2lkIFBhZ2VPdmVybGF5OjpzZXRGcmFtZShJbnRSZWN0
IGZyYW1lKQoreworICAgIGlmIChtX292ZXJyaWRlRnJhbWUgPT0gZnJhbWUpCisgICAgICAgIHJl
dHVybjsKKworICAgIG1fb3ZlcnJpZGVGcmFtZSA9IGZyYW1lOworCisgICAgaWYgKGF1dG8gcGFn
ZU92ZXJsYXlDb250cm9sbGVyID0gY29udHJvbGxlcigpKQorICAgICAgICBwYWdlT3ZlcmxheUNv
bnRyb2xsZXItPmRpZENoYW5nZU92ZXJsYXlGcmFtZSgqdGhpcyk7Cit9CisKK3ZvaWQgUGFnZU92
ZXJsYXk6OnNldEJhY2tncm91bmRDb2xvcihSR0JBMzIgYmFja2dyb3VuZENvbG9yKQoreworICAg
IGlmIChtX2JhY2tncm91bmRDb2xvciA9PSBiYWNrZ3JvdW5kQ29sb3IpCisgICAgICAgIHJldHVy
bjsKKworICAgIG1fYmFja2dyb3VuZENvbG9yID0gYmFja2dyb3VuZENvbG9yOworCisgICAgaWYg
KGF1dG8gcGFnZU92ZXJsYXlDb250cm9sbGVyID0gY29udHJvbGxlcigpKQorICAgICAgICBwYWdl
T3ZlcmxheUNvbnRyb2xsZXItPmRpZENoYW5nZU92ZXJsYXlCYWNrZ3JvdW5kQ29sb3IoKnRoaXMp
OworfQorCit2b2lkIFBhZ2VPdmVybGF5OjpzZXRQYWdlKFBhZ2UqIHBhZ2UpCit7CisgICAgbV9j
bGllbnQud2lsbE1vdmVUb1BhZ2UoKnRoaXMsIHBhZ2UpOworICAgIG1fcGFnZSA9IHBhZ2U7Cisg
ICAgbV9jbGllbnQuZGlkTW92ZVRvUGFnZSgqdGhpcywgcGFnZSk7CisKKyAgICBtX2ZhZGVBbmlt
YXRpb25UaW1lci5zdG9wKCk7Cit9CisKK3ZvaWQgUGFnZU92ZXJsYXk6OnNldE5lZWRzRGlzcGxh
eShjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpCit7CisgICAgaWYgKGF1dG8gcGFnZU92ZXJsYXlD
b250cm9sbGVyID0gY29udHJvbGxlcigpKSB7CisgICAgICAgIHBhZ2VPdmVybGF5Q29udHJvbGxl
ci0+c2V0UGFnZU92ZXJsYXlPcGFjaXR5KCp0aGlzLCBtX2ZyYWN0aW9uRmFkZWRJbik7CisgICAg
ICAgIHBhZ2VPdmVybGF5Q29udHJvbGxlci0+c2V0UGFnZU92ZXJsYXlOZWVkc0Rpc3BsYXkoKnRo
aXMsIGRpcnR5UmVjdCk7CisgICAgfQorfQorCit2b2lkIFBhZ2VPdmVybGF5OjpzZXROZWVkc0Rp
c3BsYXkoKQoreworICAgIHNldE5lZWRzRGlzcGxheShib3VuZHMoKSk7Cit9CisKK3ZvaWQgUGFn
ZU92ZXJsYXk6OmRyYXdSZWN0KEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0LCBjb25z
dCBJbnRSZWN0JiBkaXJ0eVJlY3QpCit7CisgICAgLy8gSWYgdGhlIGRpcnR5IHJlY3QgaXMgb3V0
c2lkZSB0aGUgYm91bmRzLCBpZ25vcmUgaXQuCisgICAgSW50UmVjdCBwYWludFJlY3QgPSBpbnRl
cnNlY3Rpb24oZGlydHlSZWN0LCBib3VuZHMoKSk7CisgICAgaWYgKHBhaW50UmVjdC5pc0VtcHR5
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3Rh
dGVTYXZlcihncmFwaGljc0NvbnRleHQpOworICAgIG1fY2xpZW50LmRyYXdSZWN0KCp0aGlzLCBn
cmFwaGljc0NvbnRleHQsIHBhaW50UmVjdCk7Cit9CisgICAgCitib29sIFBhZ2VPdmVybGF5Ojpt
b3VzZUV2ZW50KGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgbW91c2VFdmVudCkKK3sKKyAgICBJ
bnRQb2ludCBtb3VzZVBvc2l0aW9uSW5PdmVybGF5Q29vcmRpbmF0ZXMobW91c2VFdmVudC5wb3Np
dGlvbigpKTsKKworICAgIGlmIChtX292ZXJsYXlUeXBlID09IFBhZ2VPdmVybGF5OjpPdmVybGF5
VHlwZTo6RG9jdW1lbnQpCisgICAgICAgIG1vdXNlUG9zaXRpb25Jbk92ZXJsYXlDb29yZGluYXRl
cyA9IG1fcGFnZS0+bWFpbkZyYW1lKCkudmlldygpLT5yb290Vmlld1RvQ29udGVudHMobW91c2VQ
b3NpdGlvbkluT3ZlcmxheUNvb3JkaW5hdGVzKTsKKworICAgIC8vIElnbm9yZSBldmVudHMgb3V0
c2lkZSB0aGUgYm91bmRzLgorICAgIGlmICghYm91bmRzKCkuY29udGFpbnMobW91c2VQb3NpdGlv
bkluT3ZlcmxheUNvb3JkaW5hdGVzKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0
dXJuIG1fY2xpZW50Lm1vdXNlRXZlbnQoKnRoaXMsIG1vdXNlRXZlbnQpOworfQorCit2b2lkIFBh
Z2VPdmVybGF5OjpkaWRTY3JvbGxGcmFtZShGcmFtZSYgZnJhbWUpCit7CisgICAgbV9jbGllbnQu
ZGlkU2Nyb2xsRnJhbWUoKnRoaXMsIGZyYW1lKTsKK30KKworYm9vbCBQYWdlT3ZlcmxheTo6Y29w
eUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVTdHJpbmdWYWx1ZUZvclBvaW50KFN0cmluZyBhdHRyaWJ1
dGUsIEZsb2F0UG9pbnQgcGFyYW1ldGVyLCBTdHJpbmcmIHZhbHVlKQoreworICAgIHJldHVybiBt
X2NsaWVudC5jb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVN0cmluZ1ZhbHVlRm9yUG9pbnQoKnRo
aXMsIGF0dHJpYnV0ZSwgcGFyYW1ldGVyLCB2YWx1ZSk7Cit9CisKK2Jvb2wgUGFnZU92ZXJsYXk6
OmNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlQm9vbFZhbHVlRm9yUG9pbnQoU3RyaW5nIGF0dHJp
YnV0ZSwgRmxvYXRQb2ludCBwYXJhbWV0ZXIsIGJvb2wmIHZhbHVlKQoreworICAgIHJldHVybiBt
X2NsaWVudC5jb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZUJvb2xWYWx1ZUZvclBvaW50KCp0aGlz
LCBhdHRyaWJ1dGUsIHBhcmFtZXRlciwgdmFsdWUpOworfQorCitWZWN0b3I8U3RyaW5nPiBQYWdl
T3ZlcmxheTo6Y29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVOYW1lcyhib29sIHBhcmFtZXRlcml6
ZWROYW1lcykKK3sKKyAgICByZXR1cm4gbV9jbGllbnQuY29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1
dGVOYW1lcygqdGhpcywgcGFyYW1ldGVyaXplZE5hbWVzKTsKK30KKwordm9pZCBQYWdlT3Zlcmxh
eTo6c3RhcnRGYWRlSW5BbmltYXRpb24oKQoreworICAgIG1fZnJhY3Rpb25GYWRlZEluID0gMDsK
KyAgICBtX2ZhZGVBbmltYXRpb25UeXBlID0gRmFkZUluQW5pbWF0aW9uOworCisgICAgc3RhcnRG
YWRlQW5pbWF0aW9uKCk7Cit9CisKK3ZvaWQgUGFnZU92ZXJsYXk6OnN0YXJ0RmFkZU91dEFuaW1h
dGlvbigpCit7CisgICAgbV9mcmFjdGlvbkZhZGVkSW4gPSAxOworICAgIG1fZmFkZUFuaW1hdGlv
blR5cGUgPSBGYWRlT3V0QW5pbWF0aW9uOworCisgICAgc3RhcnRGYWRlQW5pbWF0aW9uKCk7Cit9
CisKK3ZvaWQgUGFnZU92ZXJsYXk6OnN0b3BGYWRlT3V0QW5pbWF0aW9uKCkKK3sKKyAgICBtX2Zy
YWN0aW9uRmFkZWRJbiA9IDEuMDsKKyAgICBtX2ZhZGVBbmltYXRpb25UaW1lci5zdG9wKCk7Cit9
CisKK3ZvaWQgUGFnZU92ZXJsYXk6OnN0YXJ0RmFkZUFuaW1hdGlvbigpCit7CisgICAgbV9mYWRl
QW5pbWF0aW9uU3RhcnRUaW1lID0gY3VycmVudFRpbWUoKTsKKyAgICBtX2ZhZGVBbmltYXRpb25U
aW1lci5zdGFydFJlcGVhdGluZygxIC8gZmFkZUFuaW1hdGlvbkZyYW1lUmF0ZSk7Cit9CisKK3Zv
aWQgUGFnZU92ZXJsYXk6OmZhZGVBbmltYXRpb25UaW1lckZpcmVkKCkKK3sKKyAgICBmbG9hdCBh
bmltYXRpb25Qcm9ncmVzcyA9IChjdXJyZW50VGltZSgpIC0gbV9mYWRlQW5pbWF0aW9uU3RhcnRU
aW1lKSAvIG1fZmFkZUFuaW1hdGlvbkR1cmF0aW9uOworCisgICAgaWYgKGFuaW1hdGlvblByb2dy
ZXNzID49IDEuMCkKKyAgICAgICAgYW5pbWF0aW9uUHJvZ3Jlc3MgPSAxLjA7CisKKyAgICBkb3Vi
bGUgc2luZSA9IHNpbihwaU92ZXJUd29GbG9hdCAqIGFuaW1hdGlvblByb2dyZXNzKTsKKyAgICBm
bG9hdCBmYWRlQW5pbWF0aW9uVmFsdWUgPSBzaW5lICogc2luZTsKKworICAgIG1fZnJhY3Rpb25G
YWRlZEluID0gKG1fZmFkZUFuaW1hdGlvblR5cGUgPT0gRmFkZUluQW5pbWF0aW9uKSA/IGZhZGVB
bmltYXRpb25WYWx1ZSA6IDEgLSBmYWRlQW5pbWF0aW9uVmFsdWU7CisgICAgY29udHJvbGxlcigp
LT5zZXRQYWdlT3ZlcmxheU9wYWNpdHkoKnRoaXMsIG1fZnJhY3Rpb25GYWRlZEluKTsKKworICAg
IGlmIChhbmltYXRpb25Qcm9ncmVzcyA9PSAxLjApIHsKKyAgICAgICAgbV9mYWRlQW5pbWF0aW9u
VGltZXIuc3RvcCgpOworCisgICAgICAgIGJvb2wgd2FzRmFkaW5nT3V0ID0gbV9mYWRlQW5pbWF0
aW9uVHlwZSA9PSBGYWRlT3V0QW5pbWF0aW9uOworICAgICAgICBtX2ZhZGVBbmltYXRpb25UeXBl
ID0gTm9BbmltYXRpb247CisKKyAgICAgICAgLy8gSWYgdGhpcyB3YXMgYSBmYWRlIG91dCwgZ28g
YWhlYWQgYW5kIHVuaW5zdGFsbCB0aGUgcGFnZSBvdmVybGF5LgorICAgICAgICBpZiAod2FzRmFk
aW5nT3V0KQorICAgICAgICAgICAgY29udHJvbGxlcigpLT51bmluc3RhbGxQYWdlT3ZlcmxheSh0
aGlzLCBQYWdlT3ZlcmxheTo6RmFkZU1vZGU6OkRvTm90RmFkZSk7CisgICAgfQorfQorCit2b2lk
IFBhZ2VPdmVybGF5OjpjbGVhcigpCit7CisgICAgaWYgKGF1dG8gcGFnZU92ZXJsYXlDb250cm9s
bGVyID0gY29udHJvbGxlcigpKQorICAgICAgICBwYWdlT3ZlcmxheUNvbnRyb2xsZXItPmNsZWFy
UGFnZU92ZXJsYXkoKnRoaXMpOworfQorCitHcmFwaGljc0xheWVyJiBQYWdlT3ZlcmxheTo6bGF5
ZXIoKQoreworICAgIHJldHVybiBjb250cm9sbGVyKCktPmxheWVyRm9yT3ZlcmxheSgqdGhpcyk7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGFnZS9QYWdlT3ZlcmxheS5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlT3ZlcmxheS5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzMjcwOGQyCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlT3ZlcmxheS5oCkBAIC0wLDAgKzEsMTQxIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2lmbmRlZiBQYWdlT3ZlcmxheV9oCisjZGVmaW5lIFBhZ2VPdmVybGF5
X2gKKworI2luY2x1ZGUgIkNvbG9yLmgiCisjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgorI2luY2x1
ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0
Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KKyNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBGcmFtZTsK
K2NsYXNzIEdyYXBoaWNzQ29udGV4dDsKK2NsYXNzIEdyYXBoaWNzTGF5ZXI7CitjbGFzcyBQYWdl
OworY2xhc3MgUGFnZU92ZXJsYXlDb250cm9sbGVyOworY2xhc3MgUGxhdGZvcm1Nb3VzZUV2ZW50
OworCitjbGFzcyBQYWdlT3ZlcmxheSBmaW5hbCA6IHB1YmxpYyBSZWZDb3VudGVkPFBhZ2VPdmVy
bGF5PiB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUGFnZU92ZXJsYXkpOworICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIGNsYXNzIENsaWVudCB7CisgICAgcHJv
dGVjdGVkOgorICAgICAgICB2aXJ0dWFsIH5DbGllbnQoKSB7IH0KKyAgICAKKyAgICBwdWJsaWM6
CisgICAgICAgIHZpcnR1YWwgdm9pZCBwYWdlT3ZlcmxheURlc3Ryb3llZChQYWdlT3ZlcmxheSYp
ID0gMDsKKyAgICAgICAgdmlydHVhbCB2b2lkIHdpbGxNb3ZlVG9QYWdlKFBhZ2VPdmVybGF5Jiwg
UGFnZSopID0gMDsKKyAgICAgICAgdmlydHVhbCB2b2lkIGRpZE1vdmVUb1BhZ2UoUGFnZU92ZXJs
YXkmLCBQYWdlKikgPSAwOworICAgICAgICB2aXJ0dWFsIHZvaWQgZHJhd1JlY3QoUGFnZU92ZXJs
YXkmLCBHcmFwaGljc0NvbnRleHQmLCBjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpID0gMDsKKyAg
ICAgICAgdmlydHVhbCBib29sIG1vdXNlRXZlbnQoUGFnZU92ZXJsYXkmLCBjb25zdCBQbGF0Zm9y
bU1vdXNlRXZlbnQmKSA9IDA7CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRTY3JvbGxGcmFtZShQ
YWdlT3ZlcmxheSYsIEZyYW1lJikgeyB9CisKKyAgICAgICAgdmlydHVhbCBib29sIGNvcHlBY2Nl
c3NpYmlsaXR5QXR0cmlidXRlU3RyaW5nVmFsdWVGb3JQb2ludChQYWdlT3ZlcmxheSYsIFN0cmlu
ZyAvKiBhdHRyaWJ1dGUgKi8sIEZsb2F0UG9pbnQsIFN0cmluZyYpIHsgcmV0dXJuIGZhbHNlOyB9
CisgICAgICAgIHZpcnR1YWwgYm9vbCBjb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZUJvb2xWYWx1
ZUZvclBvaW50KFBhZ2VPdmVybGF5JiwgU3RyaW5nIC8qIGF0dHJpYnV0ZSAqLywgRmxvYXRQb2lu
dCwgYm9vbCYpICB7IHJldHVybiBmYWxzZTsgfQorICAgICAgICB2aXJ0dWFsIFZlY3RvcjxTdHJp
bmc+IGNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlTmFtZXMoUGFnZU92ZXJsYXkmLCBib29sIC8q
IHBhcmFtZXRlcml6ZWROYW1lcyAqLykgIHsgcmV0dXJuIFZlY3RvcjxTdHJpbmc+KCk7IH0KKyAg
ICB9OworCisgICAgZW51bSBjbGFzcyBPdmVybGF5VHlwZSB7CisgICAgICAgIFZpZXcsIC8vIEZp
eGVkIHRvIHRoZSB2aWV3IHNpemU7IGRvZXMgbm90IHNjYWxlIG9yIHNjcm9sbCB3aXRoIHRoZSBk
b2N1bWVudCwgcmVwYWludHMgb24gc2Nyb2xsLgorICAgICAgICBEb2N1bWVudCwgLy8gU2NhbGVz
IGFuZCBzY3JvbGxzIHdpdGggdGhlIGRvY3VtZW50LgorICAgIH07CisKKyAgICBzdGF0aWMgUGFz
c1JlZlB0cjxQYWdlT3ZlcmxheT4gY3JlYXRlKENsaWVudCYsIE92ZXJsYXlUeXBlID0gT3Zlcmxh
eVR5cGU6OlZpZXcpOworICAgIHZpcnR1YWwgflBhZ2VPdmVybGF5KCk7CisKKyAgICBQYWdlT3Zl
cmxheUNvbnRyb2xsZXIqIGNvbnRyb2xsZXIoKSBjb25zdDsKKworICAgIHZvaWQgc2V0UGFnZShQ
YWdlKik7CisgICAgdm9pZCBzZXROZWVkc0Rpc3BsYXkoY29uc3QgSW50UmVjdCYgZGlydHlSZWN0
KTsKKyAgICB2b2lkIHNldE5lZWRzRGlzcGxheSgpOworCisgICAgdm9pZCBkcmF3UmVjdChHcmFw
aGljc0NvbnRleHQmLCBjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpOworICAgIGJvb2wgbW91c2VF
dmVudChjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmKTsKKyAgICB2b2lkIGRpZFNjcm9sbEZyYW1l
KEZyYW1lJik7CisKKyAgICBib29sIGNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlU3RyaW5nVmFs
dWVGb3JQb2ludChTdHJpbmcgYXR0cmlidXRlLCBGbG9hdFBvaW50IHBhcmFtZXRlciwgU3RyaW5n
JiB2YWx1ZSk7CisgICAgYm9vbCBjb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZUJvb2xWYWx1ZUZv
clBvaW50KFN0cmluZyBhdHRyaWJ1dGUsIEZsb2F0UG9pbnQgcGFyYW1ldGVyLCBib29sJiB2YWx1
ZSk7CisgICAgVmVjdG9yPFN0cmluZz4gY29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVOYW1lcyhi
b29sIHBhcmFtZXRlcml6ZWROYW1lcyk7CisgICAgCisgICAgdm9pZCBzdGFydEZhZGVJbkFuaW1h
dGlvbigpOworICAgIHZvaWQgc3RhcnRGYWRlT3V0QW5pbWF0aW9uKCk7CisgICAgdm9pZCBzdG9w
RmFkZU91dEFuaW1hdGlvbigpOworCisgICAgdm9pZCBjbGVhcigpOworCisgICAgQ2xpZW50JiBj
bGllbnQoKSBjb25zdCB7IHJldHVybiBtX2NsaWVudDsgfQorCisgICAgZW51bSBjbGFzcyBGYWRl
TW9kZSB7IERvTm90RmFkZSwgRmFkZSB9OworCisgICAgT3ZlcmxheVR5cGUgb3ZlcmxheVR5cGUo
KSB7IHJldHVybiBtX292ZXJsYXlUeXBlOyB9CisKKyAgICBJbnRSZWN0IGJvdW5kcygpIGNvbnN0
OworICAgIEludFJlY3QgZnJhbWUoKSBjb25zdDsKKyAgICB2b2lkIHNldEZyYW1lKEludFJlY3Qp
OworCisgICAgUkdCQTMyIGJhY2tncm91bmRDb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2dy
b3VuZENvbG9yOyB9CisgICAgdm9pZCBzZXRCYWNrZ3JvdW5kQ29sb3IoUkdCQTMyKTsKKworICAg
IC8vIEZJWE1FOiBQYWdlT3ZlcmxheSBzaG91bGQgb3duIGl0cyBsYXllciwgaW5zdGVhZCBvZiBQ
YWdlT3ZlcmxheUNvbnRyb2xsZXIuCisgICAgR3JhcGhpY3NMYXllciYgbGF5ZXIoKTsKKworcHJp
dmF0ZToKKyAgICBleHBsaWNpdCBQYWdlT3ZlcmxheShDbGllbnQmLCBPdmVybGF5VHlwZSk7CisK
KyAgICB2b2lkIHN0YXJ0RmFkZUFuaW1hdGlvbigpOworICAgIHZvaWQgZmFkZUFuaW1hdGlvblRp
bWVyRmlyZWQoKTsKKworICAgIENsaWVudCYgbV9jbGllbnQ7CisgICAgUGFnZSogbV9wYWdlOwor
CisgICAgUnVuTG9vcDo6VGltZXI8UGFnZU92ZXJsYXk+IG1fZmFkZUFuaW1hdGlvblRpbWVyOwor
ICAgIGRvdWJsZSBtX2ZhZGVBbmltYXRpb25TdGFydFRpbWU7CisgICAgZG91YmxlIG1fZmFkZUFu
aW1hdGlvbkR1cmF0aW9uOworCisgICAgZW51bSBGYWRlQW5pbWF0aW9uVHlwZSB7CisgICAgICAg
IE5vQW5pbWF0aW9uLAorICAgICAgICBGYWRlSW5BbmltYXRpb24sCisgICAgICAgIEZhZGVPdXRB
bmltYXRpb24sCisgICAgfTsKKworICAgIEZhZGVBbmltYXRpb25UeXBlIG1fZmFkZUFuaW1hdGlv
blR5cGU7CisgICAgZmxvYXQgbV9mcmFjdGlvbkZhZGVkSW47CisKKyAgICBPdmVybGF5VHlwZSBt
X292ZXJsYXlUeXBlOworICAgIEludFJlY3QgbV9vdmVycmlkZUZyYW1lOworCisgICAgUkdCQTMy
IG1fYmFja2dyb3VuZENvbG9yOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRp
ZiAvLyBQYWdlT3ZlcmxheV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VP
dmVybGF5Q29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VPdmVybGF5Q29u
dHJvbGxlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjJiOTZjMgot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZU92ZXJsYXlDb250cm9s
bGVyLmNwcApAQCAtMCwwICsxLDM2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJQYWdlT3ZlcmxheUNvbnRyb2xsZXIuaCIKKworI2luY2x1ZGUgIkNocm9t
ZS5oIgorI2luY2x1ZGUgIkNocm9tZUNsaWVudC5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5j
bHVkZSAiRnJhbWVWaWV3LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVk
ZSAiR3JhcGhpY3NMYXllci5oIgorI2luY2x1ZGUgIk1haW5GcmFtZS5oIgorI2luY2x1ZGUgIlBh
Z2UuaCIKKyNpbmNsdWRlICJQYWdlT3ZlcmxheS5oIgorI2luY2x1ZGUgIlNjcm9sbGluZ0Nvb3Jk
aW5hdG9yLmgiCisjaW5jbHVkZSAiU2V0dGluZ3MuaCIKKyNpbmNsdWRlICJUaWxlZEJhY2tpbmcu
aCIKKworLy8gRklYTUU6IFNvbWVvbmUgbmVlZHMgdG8gY2FsbCBkaWRDaGFuZ2VTZXR0aW5ncygp
IGlmIHdlIHdhbnQgZHluYW1pYyB1cGRhdGVzIG9mIGxheWVyIGJvcmRlci9yZXBhaW50IGNvdW50
ZXIgc2V0dGluZ3MuCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGFnZU92ZXJsYXlDb250cm9s
bGVyOjpQYWdlT3ZlcmxheUNvbnRyb2xsZXIoTWFpbkZyYW1lJiBtYWluRnJhbWUpCisgICAgOiBt
X2luaXRpYWxpemVkKGZhbHNlKQorICAgICwgbV9tYWluRnJhbWUobWFpbkZyYW1lKQoreworfQor
CitQYWdlT3ZlcmxheUNvbnRyb2xsZXI6On5QYWdlT3ZlcmxheUNvbnRyb2xsZXIoKQoreworCit9
CisKK3ZvaWQgUGFnZU92ZXJsYXlDb250cm9sbGVyOjpjcmVhdGVSb290TGF5ZXJzSWZOZWVkZWQo
KQoreworICAgIGlmIChtX2luaXRpYWxpemVkKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2lu
aXRpYWxpemVkID0gdHJ1ZTsKKworICAgIEFTU0VSVCghbV9kb2N1bWVudE92ZXJsYXlSb290TGF5
ZXIpOworICAgIEFTU0VSVCghbV92aWV3T3ZlcmxheVJvb3RMYXllcik7CisKKyAgICBtX2RvY3Vt
ZW50T3ZlcmxheVJvb3RMYXllciA9IEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZShtX21haW5GcmFtZS5w
YWdlKCktPmNocm9tZSgpLmNsaWVudCgpLmdyYXBoaWNzTGF5ZXJGYWN0b3J5KCksICp0aGlzKTsK
KyAgICBtX3ZpZXdPdmVybGF5Um9vdExheWVyID0gR3JhcGhpY3NMYXllcjo6Y3JlYXRlKG1fbWFp
bkZyYW1lLnBhZ2UoKS0+Y2hyb21lKCkuY2xpZW50KCkuZ3JhcGhpY3NMYXllckZhY3RvcnkoKSwg
KnRoaXMpOworI2lmbmRlZiBOREVCVUcKKyAgICBtX2RvY3VtZW50T3ZlcmxheVJvb3RMYXllci0+
c2V0TmFtZSgiUGFnZSBPdmVybGF5IGNvbnRhaW5lciAoZG9jdW1lbnQtcmVsYXRpdmUpIik7Cisg
ICAgbV92aWV3T3ZlcmxheVJvb3RMYXllci0+c2V0TmFtZSgiUGFnZSBPdmVybGF5IGNvbnRhaW5l
ciAodmlldy1yZWxhdGl2ZSkiKTsKKyNlbmRpZgorfQorCitHcmFwaGljc0xheWVyJiBQYWdlT3Zl
cmxheUNvbnRyb2xsZXI6OmRvY3VtZW50T3ZlcmxheVJvb3RMYXllcigpCit7CisgICAgY3JlYXRl
Um9vdExheWVyc0lmTmVlZGVkKCk7CisgICAgcmV0dXJuICptX2RvY3VtZW50T3ZlcmxheVJvb3RM
YXllcjsKK30KKworR3JhcGhpY3NMYXllciYgUGFnZU92ZXJsYXlDb250cm9sbGVyOjp2aWV3T3Zl
cmxheVJvb3RMYXllcigpCit7CisgICAgY3JlYXRlUm9vdExheWVyc0lmTmVlZGVkKCk7CisgICAg
cmV0dXJuICptX3ZpZXdPdmVybGF5Um9vdExheWVyOworfQorCitzdGF0aWMgdm9pZCB1cGRhdGVP
dmVybGF5R2VvbWV0cnkoUGFnZU92ZXJsYXkmIG92ZXJsYXksIEdyYXBoaWNzTGF5ZXImIGdyYXBo
aWNzTGF5ZXIpCit7CisgICAgSW50UmVjdCBvdmVybGF5RnJhbWUgPSBvdmVybGF5LmZyYW1lKCk7
CisKKyAgICBpZiAob3ZlcmxheUZyYW1lLmxvY2F0aW9uKCkgPT0gZ3JhcGhpY3NMYXllci5wb3Np
dGlvbigpICYmIG92ZXJsYXlGcmFtZS5zaXplKCkgPT0gZ3JhcGhpY3NMYXllci5zaXplKCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIGdyYXBoaWNzTGF5ZXIuc2V0UG9zaXRpb24ob3ZlcmxheUZy
YW1lLmxvY2F0aW9uKCkpOworICAgIGdyYXBoaWNzTGF5ZXIuc2V0U2l6ZShvdmVybGF5RnJhbWUu
c2l6ZSgpKTsKK30KKwordm9pZCBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6Omluc3RhbGxQYWdlT3Zl
cmxheShQYXNzUmVmUHRyPFBhZ2VPdmVybGF5PiBwYWdlT3ZlcmxheSwgUGFnZU92ZXJsYXk6OkZh
ZGVNb2RlIGZhZGVNb2RlKQoreworICAgIGNyZWF0ZVJvb3RMYXllcnNJZk5lZWRlZCgpOworCisg
ICAgUmVmUHRyPFBhZ2VPdmVybGF5PiBvdmVybGF5ID0gcGFnZU92ZXJsYXk7CisKKyAgICBpZiAo
bV9wYWdlT3ZlcmxheXMuY29udGFpbnMob3ZlcmxheSkpCisgICAgICAgIHJldHVybjsKKworICAg
IG1fcGFnZU92ZXJsYXlzLmFwcGVuZChvdmVybGF5KTsKKworICAgIGlmIChmYWRlTW9kZSA9PSBQ
YWdlT3ZlcmxheTo6RmFkZU1vZGU6OkZhZGUpCisgICAgICAgIG92ZXJsYXktPnN0YXJ0RmFkZUlu
QW5pbWF0aW9uKCk7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NMYXllcj4gbGF5ZXIg
PSBHcmFwaGljc0xheWVyOjpjcmVhdGUobV9tYWluRnJhbWUucGFnZSgpLT5jaHJvbWUoKS5jbGll
bnQoKS5ncmFwaGljc0xheWVyRmFjdG9yeSgpLCAqdGhpcyk7CisgICAgbGF5ZXItPnNldEFuY2hv
clBvaW50KEZsb2F0UG9pbnQzRCgpKTsKKyAgICBsYXllci0+c2V0QmFja2dyb3VuZENvbG9yKG92
ZXJsYXktPmJhY2tncm91bmRDb2xvcigpKTsKKyNpZm5kZWYgTkRFQlVHCisgICAgbGF5ZXItPnNl
dE5hbWUoIlBhZ2UgT3ZlcmxheSBjb250ZW50Iik7CisjZW5kaWYKKworICAgIHVwZGF0ZVNldHRp
bmdzRm9yTGF5ZXIoKmxheWVyKTsKKworICAgIHN3aXRjaCAob3ZlcmxheS0+b3ZlcmxheVR5cGUo
KSkgeworICAgIGNhc2UgUGFnZU92ZXJsYXk6Ok92ZXJsYXlUeXBlOjpWaWV3OgorICAgICAgICBt
X3ZpZXdPdmVybGF5Um9vdExheWVyLT5hZGRDaGlsZChsYXllci5nZXQoKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgUGFnZU92ZXJsYXk6Ok92ZXJsYXlUeXBlOjpEb2N1bWVudDoKKyAgICAg
ICAgbV9kb2N1bWVudE92ZXJsYXlSb290TGF5ZXItPmFkZENoaWxkKGxheWVyLmdldCgpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorCisgICAgR3JhcGhpY3NMYXllciYgcmF3TGF5ZXIgPSAqbGF5
ZXI7CisgICAgbV9vdmVybGF5R3JhcGhpY3NMYXllcnMuc2V0KG92ZXJsYXkuZ2V0KCksIFdURjo6
bW92ZShsYXllcikpOworCisgICAgdXBkYXRlRm9yY2VTeW5jaHJvbm91c1Njcm9sbExheWVyUG9z
aXRpb25VcGRhdGVzKCk7CisKKyAgICBvdmVybGF5LT5zZXRQYWdlKG1fbWFpbkZyYW1lLnBhZ2Uo
KSk7CisKKyAgICBpZiAoRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBtX21haW5GcmFtZS52aWV3KCkp
CisgICAgICAgIGZyYW1lVmlldy0+ZW50ZXJDb21wb3NpdGluZ01vZGUoKTsKKworICAgIHVwZGF0
ZU92ZXJsYXlHZW9tZXRyeSgqb3ZlcmxheSwgcmF3TGF5ZXIpOworfQorCit2b2lkIFBhZ2VPdmVy
bGF5Q29udHJvbGxlcjo6dW5pbnN0YWxsUGFnZU92ZXJsYXkoUGFnZU92ZXJsYXkqIG92ZXJsYXks
IFBhZ2VPdmVybGF5OjpGYWRlTW9kZSBmYWRlTW9kZSkKK3sKKyAgICBpZiAoZmFkZU1vZGUgPT0g
UGFnZU92ZXJsYXk6OkZhZGVNb2RlOjpGYWRlKSB7CisgICAgICAgIG92ZXJsYXktPnN0YXJ0RmFk
ZU91dEFuaW1hdGlvbigpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgb3ZlcmxheS0+
c2V0UGFnZShudWxscHRyKTsKKworICAgIG1fb3ZlcmxheUdyYXBoaWNzTGF5ZXJzLnRha2Uob3Zl
cmxheSktPnJlbW92ZUZyb21QYXJlbnQoKTsKKworICAgIHNpemVfdCBvdmVybGF5SW5kZXggPSBt
X3BhZ2VPdmVybGF5cy5maW5kKG92ZXJsYXkpOworICAgIEFTU0VSVChvdmVybGF5SW5kZXggIT0g
bm90Rm91bmQpOworICAgIG1fcGFnZU92ZXJsYXlzLnJlbW92ZShvdmVybGF5SW5kZXgpOworCisg
ICAgdXBkYXRlRm9yY2VTeW5jaHJvbm91c1Njcm9sbExheWVyUG9zaXRpb25VcGRhdGVzKCk7Cit9
CisKK3ZvaWQgUGFnZU92ZXJsYXlDb250cm9sbGVyOjp1cGRhdGVGb3JjZVN5bmNocm9ub3VzU2Ny
b2xsTGF5ZXJQb3NpdGlvblVwZGF0ZXMoKQoreworI2lmIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcp
CisgICAgYm9vbCBmb3JjZVN5bmNocm9ub3VzU2Nyb2xsTGF5ZXJQb3NpdGlvblVwZGF0ZXMgPSBm
YWxzZTsKKworICAgIGZvciAoYXV0byYgb3ZlcmxheSA6IG1fcGFnZU92ZXJsYXlzKSB7CisgICAg
ICAgIGlmIChvdmVybGF5LT5vdmVybGF5VHlwZSgpID09IFBhZ2VPdmVybGF5OjpPdmVybGF5VHlw
ZTo6VmlldykKKyAgICAgICAgICAgIGZvcmNlU3luY2hyb25vdXNTY3JvbGxMYXllclBvc2l0aW9u
VXBkYXRlcyA9IHRydWU7CisgICAgfQorCisgICAgaWYgKFNjcm9sbGluZ0Nvb3JkaW5hdG9yKiBz
Y3JvbGxpbmdDb29yZGluYXRvciA9IG1fbWFpbkZyYW1lLnBhZ2UoKS0+c2Nyb2xsaW5nQ29vcmRp
bmF0b3IoKSkKKyAgICAgICAgc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPnNldEZvcmNlU3luY2hyb25v
dXNTY3JvbGxMYXllclBvc2l0aW9uVXBkYXRlcyhmb3JjZVN5bmNocm9ub3VzU2Nyb2xsTGF5ZXJQ
b3NpdGlvblVwZGF0ZXMpOworI2VuZGlmCit9CisKK3ZvaWQgUGFnZU92ZXJsYXlDb250cm9sbGVy
OjpzZXRQYWdlT3ZlcmxheU5lZWRzRGlzcGxheShQYWdlT3ZlcmxheSYgb3ZlcmxheSwgY29uc3Qg
V2ViQ29yZTo6SW50UmVjdCYgZGlydHlSZWN0KQoreworICAgIEFTU0VSVChtX3BhZ2VPdmVybGF5
cy5jb250YWlucygmb3ZlcmxheSkpOworICAgIEdyYXBoaWNzTGF5ZXImIGdyYXBoaWNzTGF5ZXIg
PSAqbV9vdmVybGF5R3JhcGhpY3NMYXllcnMuZ2V0KCZvdmVybGF5KTsKKworICAgIGlmICghZ3Jh
cGhpY3NMYXllci5kcmF3c0NvbnRlbnQoKSkgeworICAgICAgICBncmFwaGljc0xheWVyLnNldERy
YXdzQ29udGVudCh0cnVlKTsKKyAgICAgICAgdXBkYXRlT3ZlcmxheUdlb21ldHJ5KG92ZXJsYXks
IGdyYXBoaWNzTGF5ZXIpOworICAgIH0KKworICAgIGdyYXBoaWNzTGF5ZXIuc2V0TmVlZHNEaXNw
bGF5SW5SZWN0KGRpcnR5UmVjdCk7Cit9CisKK3ZvaWQgUGFnZU92ZXJsYXlDb250cm9sbGVyOjpz
ZXRQYWdlT3ZlcmxheU9wYWNpdHkoUGFnZU92ZXJsYXkmIG92ZXJsYXksIGZsb2F0IG9wYWNpdHkp
Cit7CisgICAgQVNTRVJUKG1fcGFnZU92ZXJsYXlzLmNvbnRhaW5zKCZvdmVybGF5KSk7CisgICAg
bV9vdmVybGF5R3JhcGhpY3NMYXllcnMuZ2V0KCZvdmVybGF5KS0+c2V0T3BhY2l0eShvcGFjaXR5
KTsKK30KKwordm9pZCBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6OmNsZWFyUGFnZU92ZXJsYXkoUGFn
ZU92ZXJsYXkmIG92ZXJsYXkpCit7CisgICAgQVNTRVJUKG1fcGFnZU92ZXJsYXlzLmNvbnRhaW5z
KCZvdmVybGF5KSk7CisgICAgbV9vdmVybGF5R3JhcGhpY3NMYXllcnMuZ2V0KCZvdmVybGF5KS0+
c2V0RHJhd3NDb250ZW50KGZhbHNlKTsKK30KKworR3JhcGhpY3NMYXllciYgUGFnZU92ZXJsYXlD
b250cm9sbGVyOjpsYXllckZvck92ZXJsYXkoUGFnZU92ZXJsYXkmIG92ZXJsYXkpIGNvbnN0Cit7
CisgICAgQVNTRVJUKG1fcGFnZU92ZXJsYXlzLmNvbnRhaW5zKCZvdmVybGF5KSk7CisgICAgcmV0
dXJuICptX292ZXJsYXlHcmFwaGljc0xheWVycy5nZXQoJm92ZXJsYXkpOworfQorCit2b2lkIFBh
Z2VPdmVybGF5Q29udHJvbGxlcjo6d2lsbEF0dGFjaFJvb3RMYXllcigpCit7CisgICAgZm9yIChh
dXRvJiBvdmVybGF5QW5kTGF5ZXIgOiBtX292ZXJsYXlHcmFwaGljc0xheWVycykKKyAgICAgICAg
dXBkYXRlT3ZlcmxheUdlb21ldHJ5KCpvdmVybGF5QW5kTGF5ZXIua2V5LCAqb3ZlcmxheUFuZExh
eWVyLnZhbHVlKTsKK30KKwordm9pZCBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6OmRpZENoYW5nZVZp
ZXdTaXplKCkKK3sKKyAgICBmb3IgKGF1dG8mIG92ZXJsYXlBbmRMYXllciA6IG1fb3ZlcmxheUdy
YXBoaWNzTGF5ZXJzKSB7CisgICAgICAgIGlmIChvdmVybGF5QW5kTGF5ZXIua2V5LT5vdmVybGF5
VHlwZSgpID09IFBhZ2VPdmVybGF5OjpPdmVybGF5VHlwZTo6VmlldykKKyAgICAgICAgICAgIHVw
ZGF0ZU92ZXJsYXlHZW9tZXRyeSgqb3ZlcmxheUFuZExheWVyLmtleSwgKm92ZXJsYXlBbmRMYXll
ci52YWx1ZSk7CisgICAgfQorfQorCit2b2lkIFBhZ2VPdmVybGF5Q29udHJvbGxlcjo6ZGlkQ2hh
bmdlRG9jdW1lbnRTaXplKCkKK3sKKyAgICBmb3IgKGF1dG8mIG92ZXJsYXlBbmRMYXllciA6IG1f
b3ZlcmxheUdyYXBoaWNzTGF5ZXJzKSB7CisgICAgICAgIGlmIChvdmVybGF5QW5kTGF5ZXIua2V5
LT5vdmVybGF5VHlwZSgpID09IFBhZ2VPdmVybGF5OjpPdmVybGF5VHlwZTo6RG9jdW1lbnQpCisg
ICAgICAgICAgICB1cGRhdGVPdmVybGF5R2VvbWV0cnkoKm92ZXJsYXlBbmRMYXllci5rZXksICpv
dmVybGF5QW5kTGF5ZXIudmFsdWUpOworICAgIH0KK30KKwordm9pZCBQYWdlT3ZlcmxheUNvbnRy
b2xsZXI6OmRpZENoYW5nZVNldHRpbmdzKCkKK3sKKyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGFw
cGx5IHRoZXNlIHNldHRpbmdzIHRvIGFsbCBvdmVybGF5IHN1YmxheWVycyByZWN1cnNpdmVseS4K
KyAgICBmb3IgKGF1dG8mIGdyYXBoaWNzTGF5ZXIgOiBtX292ZXJsYXlHcmFwaGljc0xheWVycy52
YWx1ZXMoKSkKKyAgICAgICAgdXBkYXRlU2V0dGluZ3NGb3JMYXllcigqZ3JhcGhpY3NMYXllcik7
Cit9CisKK3ZvaWQgUGFnZU92ZXJsYXlDb250cm9sbGVyOjpkaWRDaGFuZ2VEZXZpY2VTY2FsZUZh
Y3RvcigpCit7CisgICAgY3JlYXRlUm9vdExheWVyc0lmTmVlZGVkKCk7CisKKyAgICBtX2RvY3Vt
ZW50T3ZlcmxheVJvb3RMYXllci0+bm90ZURldmljZU9yUGFnZVNjYWxlRmFjdG9yQ2hhbmdlZElu
Y2x1ZGluZ0Rlc2NlbmRhbnRzKCk7CisgICAgbV92aWV3T3ZlcmxheVJvb3RMYXllci0+bm90ZURl
dmljZU9yUGFnZVNjYWxlRmFjdG9yQ2hhbmdlZEluY2x1ZGluZ0Rlc2NlbmRhbnRzKCk7CisKKyAg
ICBmb3IgKGF1dG8mIGdyYXBoaWNzTGF5ZXIgOiBtX292ZXJsYXlHcmFwaGljc0xheWVycy52YWx1
ZXMoKSkKKyAgICAgICAgZ3JhcGhpY3NMYXllci0+c2V0TmVlZHNEaXNwbGF5KCk7Cit9CisKK3Zv
aWQgUGFnZU92ZXJsYXlDb250cm9sbGVyOjpkaWRDaGFuZ2VFeHBvc2VkUmVjdCgpCit7CisgICAg
bV9tYWluRnJhbWUucGFnZSgpLT5jaHJvbWUoKS5jbGllbnQoKS5zY2hlZHVsZUNvbXBvc2l0aW5n
TGF5ZXJGbHVzaCgpOworfQorCit2b2lkIFBhZ2VPdmVybGF5Q29udHJvbGxlcjo6ZGlkU2Nyb2xs
RnJhbWUoRnJhbWUmIGZyYW1lKQoreworICAgIGZvciAoYXV0byYgb3ZlcmxheUFuZExheWVyIDog
bV9vdmVybGF5R3JhcGhpY3NMYXllcnMpIHsKKyAgICAgICAgaWYgKG92ZXJsYXlBbmRMYXllci5r
ZXktPm92ZXJsYXlUeXBlKCkgPT0gUGFnZU92ZXJsYXk6Ok92ZXJsYXlUeXBlOjpWaWV3IHx8ICFm
cmFtZS5pc01haW5GcmFtZSgpKQorICAgICAgICAgICAgb3ZlcmxheUFuZExheWVyLnZhbHVlLT5z
ZXROZWVkc0Rpc3BsYXkoKTsKKyAgICAgICAgb3ZlcmxheUFuZExheWVyLmtleS0+ZGlkU2Nyb2xs
RnJhbWUoZnJhbWUpOworICAgIH0KK30KKwordm9pZCBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6OnVw
ZGF0ZVNldHRpbmdzRm9yTGF5ZXIoR3JhcGhpY3NMYXllciYgbGF5ZXIpCit7CisgICAgU2V0dGlu
Z3MmIHNldHRpbmdzID0gbV9tYWluRnJhbWUucGFnZSgpLT5zZXR0aW5ncygpOworICAgIGxheWVy
LnNldEFjY2VsZXJhdGVzRHJhd2luZyhzZXR0aW5ncy5hY2NlbGVyYXRlZERyYXdpbmdFbmFibGVk
KCkpOworICAgIGxheWVyLnNldFNob3dEZWJ1Z0JvcmRlcihzZXR0aW5ncy5zaG93RGVidWdCb3Jk
ZXJzKCkpOworICAgIGxheWVyLnNldFNob3dSZXBhaW50Q291bnRlcihzZXR0aW5ncy5zaG93UmVw
YWludENvdW50ZXIoKSk7Cit9CisKK2Jvb2wgUGFnZU92ZXJsYXlDb250cm9sbGVyOjpoYW5kbGVN
b3VzZUV2ZW50KGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgbW91c2VFdmVudCkKK3sKKyAgICBp
ZiAoIW1fcGFnZU92ZXJsYXlzLnNpemUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
Zm9yIChhdXRvIGl0ID0gbV9wYWdlT3ZlcmxheXMucmJlZ2luKCksIGVuZCA9IG1fcGFnZU92ZXJs
YXlzLnJlbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIGlmICgoKml0KS0+bW91c2VF
dmVudChtb3VzZUV2ZW50KSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAg
IHJldHVybiBmYWxzZTsKK30KKworYm9vbCBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6OmNvcHlBY2Nl
c3NpYmlsaXR5QXR0cmlidXRlU3RyaW5nVmFsdWVGb3JQb2ludChTdHJpbmcgYXR0cmlidXRlLCBG
bG9hdFBvaW50IHBhcmFtZXRlciwgU3RyaW5nJiB2YWx1ZSkKK3sKKyAgICBpZiAoIW1fcGFnZU92
ZXJsYXlzLnNpemUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgZm9yIChhdXRvIGl0
ID0gbV9wYWdlT3ZlcmxheXMucmJlZ2luKCksIGVuZCA9IG1fcGFnZU92ZXJsYXlzLnJlbmQoKTsg
aXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIGlmICgoKml0KS0+Y29weUFjY2Vzc2liaWxpdHlB
dHRyaWJ1dGVTdHJpbmdWYWx1ZUZvclBvaW50KGF0dHJpYnV0ZSwgcGFyYW1ldGVyLCB2YWx1ZSkp
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKK2Jvb2wgUGFnZU92ZXJsYXlDb250cm9sbGVyOjpjb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0
ZUJvb2xWYWx1ZUZvclBvaW50KFN0cmluZyBhdHRyaWJ1dGUsIEZsb2F0UG9pbnQgcGFyYW1ldGVy
LCBib29sJiB2YWx1ZSkKK3sKKyAgICBpZiAoIW1fcGFnZU92ZXJsYXlzLnNpemUoKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgZm9yIChhdXRvIGl0ID0gbV9wYWdlT3ZlcmxheXMucmJl
Z2luKCksIGVuZCA9IG1fcGFnZU92ZXJsYXlzLnJlbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7Cisg
ICAgICAgIGlmICgoKml0KS0+Y29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVCb29sVmFsdWVGb3JQ
b2ludChhdHRyaWJ1dGUsIHBhcmFtZXRlciwgdmFsdWUpKQorICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorICAgIAorICAgIHJldHVybiBmYWxzZTsKK30KKworVmVjdG9yPFN0cmluZz4g
UGFnZU92ZXJsYXlDb250cm9sbGVyOjpjb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZXNOYW1lcyhi
b29sIHBhcmFtZXRlcml6ZWROYW1lcykKK3sKKyAgICBpZiAoIW1fcGFnZU92ZXJsYXlzLnNpemUo
KSkKKyAgICAgICAgcmV0dXJuIFZlY3RvcjxTdHJpbmc+KCk7CisKKyAgICBmb3IgKGF1dG8gaXQg
PSBtX3BhZ2VPdmVybGF5cy5yYmVnaW4oKSwgZW5kID0gbV9wYWdlT3ZlcmxheXMucmVuZCgpOyBp
dCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgVmVjdG9yPFN0cmluZz4gbmFtZXMgPSAoKml0KS0+
Y29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVOYW1lcyhwYXJhbWV0ZXJpemVkTmFtZXMpOworICAg
ICAgICBpZiAoIW5hbWVzLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybiBuYW1lczsKKyAg
ICB9CisKKyAgICByZXR1cm4gVmVjdG9yPFN0cmluZz4oKTsKK30KKwordm9pZCBQYWdlT3Zlcmxh
eUNvbnRyb2xsZXI6OnBhaW50Q29udGVudHMoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciog
Z3JhcGhpY3NMYXllciwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQs
IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJQYWludGluZ1BoYXNlLCBjb25zdCBXZWJDb3JlOjpGbG9h
dFJlY3QmIGNsaXBSZWN0KQoreworICAgIGZvciAoYXV0byBpdCA9IG1fb3ZlcmxheUdyYXBoaWNz
TGF5ZXJzLmJlZ2luKCksIGVuZCA9IG1fb3ZlcmxheUdyYXBoaWNzTGF5ZXJzLmVuZCgpOyBpdCAh
PSBlbmQ7ICsraXQpIHsKKyAgICAgICAgaWYgKGl0LT52YWx1ZS5nZXQoKSAhPSBncmFwaGljc0xh
eWVyKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0U3Rh
dGVTYXZlciBzdGF0ZVNhdmVyKGdyYXBoaWNzQ29udGV4dCk7CisgICAgICAgIGdyYXBoaWNzQ29u
dGV4dC5jbGlwKGNsaXBSZWN0KTsKKyAgICAgICAgaXQtPmtleS0+ZHJhd1JlY3QoZ3JhcGhpY3ND
b250ZXh0LCBlbmNsb3NpbmdJbnRSZWN0KGNsaXBSZWN0KSk7CisKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KK30KKworZmxvYXQgUGFnZU92ZXJsYXlDb250cm9sbGVyOjpkZXZpY2VTY2FsZUZhY3Rv
cigpIGNvbnN0Cit7CisgICAgaWYgKFBhZ2UqIHBhZ2UgPSBtX21haW5GcmFtZS5wYWdlKCkpCisg
ICAgICAgIHJldHVybiBwYWdlLT5kZXZpY2VTY2FsZUZhY3RvcigpOworICAgIHJldHVybiAxOwor
fQorCit2b2lkIFBhZ2VPdmVybGF5Q29udHJvbGxlcjo6bm90aWZ5Rmx1c2hSZXF1aXJlZChjb25z
dCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKikKK3sKKyAgICBpZiAoUGFnZSogcGFnZSA9IG1fbWFp
bkZyYW1lLnBhZ2UoKSkKKyAgICAgICAgcGFnZS0+Y2hyb21lKCkuY2xpZW50KCkuc2NoZWR1bGVD
b21wb3NpdGluZ0xheWVyRmx1c2goKTsKK30KKwordm9pZCBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6
OmRpZENoYW5nZU92ZXJsYXlGcmFtZShQYWdlT3ZlcmxheSYgb3ZlcmxheSkKK3sKKyAgICBBU1NF
UlQobV9wYWdlT3ZlcmxheXMuY29udGFpbnMoJm92ZXJsYXkpKTsKKyAgICB1cGRhdGVPdmVybGF5
R2VvbWV0cnkob3ZlcmxheSwgKm1fb3ZlcmxheUdyYXBoaWNzTGF5ZXJzLmdldCgmb3ZlcmxheSkp
OworfQorCit2b2lkIFBhZ2VPdmVybGF5Q29udHJvbGxlcjo6ZGlkQ2hhbmdlT3ZlcmxheUJhY2tn
cm91bmRDb2xvcihQYWdlT3ZlcmxheSYgb3ZlcmxheSkKK3sKKyAgICBBU1NFUlQobV9wYWdlT3Zl
cmxheXMuY29udGFpbnMoJm92ZXJsYXkpKTsKKyAgICBtX292ZXJsYXlHcmFwaGljc0xheWVycy5n
ZXQoJm92ZXJsYXkpLT5zZXRCYWNrZ3JvdW5kQ29sb3Iob3ZlcmxheS5iYWNrZ3JvdW5kQ29sb3Io
KSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGFnZS9QYWdlT3ZlcmxheUNvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFn
ZU92ZXJsYXlDb250cm9sbGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
MjY5YzczNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZU92ZXJs
YXlDb250cm9sbGVyLmgKQEAgLTAsMCArMSwxMDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFBh
Z2VPdmVybGF5Q29udHJvbGxlcl9oCisjZGVmaW5lIFBhZ2VPdmVybGF5Q29udHJvbGxlcl9oCisK
KyNpbmNsdWRlICJHcmFwaGljc0xheWVyQ2xpZW50LmgiCisjaW5jbHVkZSAiUGFnZU92ZXJsYXku
aCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNp
bmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRnJh
bWU7CitjbGFzcyBNYWluRnJhbWU7CitjbGFzcyBQYWdlOworY2xhc3MgUGxhdGZvcm1Nb3VzZUV2
ZW50OworCitjbGFzcyBQYWdlT3ZlcmxheUNvbnRyb2xsZXIgZmluYWwgOiBwdWJsaWMgR3JhcGhp
Y3NMYXllckNsaWVudCB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUGFnZU92ZXJsYXlDb250
cm9sbGVyKTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBQYWdl
T3ZlcmxheUNvbnRyb2xsZXIoTWFpbkZyYW1lJik7CisgICAgdmlydHVhbCB+UGFnZU92ZXJsYXlD
b250cm9sbGVyKCk7CisKKyAgICBHcmFwaGljc0xheWVyJiBkb2N1bWVudE92ZXJsYXlSb290TGF5
ZXIoKTsKKyAgICBHcmFwaGljc0xheWVyJiB2aWV3T3ZlcmxheVJvb3RMYXllcigpOworCisgICAg
dm9pZCBpbnN0YWxsUGFnZU92ZXJsYXkoUGFzc1JlZlB0cjxQYWdlT3ZlcmxheT4sIFBhZ2VPdmVy
bGF5OjpGYWRlTW9kZSk7CisgICAgdm9pZCB1bmluc3RhbGxQYWdlT3ZlcmxheShQYWdlT3Zlcmxh
eSosIFBhZ2VPdmVybGF5OjpGYWRlTW9kZSk7CisKKyAgICB2b2lkIHNldFBhZ2VPdmVybGF5TmVl
ZHNEaXNwbGF5KFBhZ2VPdmVybGF5JiwgY29uc3QgSW50UmVjdCYpOworICAgIHZvaWQgc2V0UGFn
ZU92ZXJsYXlPcGFjaXR5KFBhZ2VPdmVybGF5JiwgZmxvYXQpOworICAgIHZvaWQgY2xlYXJQYWdl
T3ZlcmxheShQYWdlT3ZlcmxheSYpOworICAgIEdyYXBoaWNzTGF5ZXImIGxheWVyRm9yT3Zlcmxh
eShQYWdlT3ZlcmxheSYpIGNvbnN0OworCisgICAgdm9pZCB3aWxsQXR0YWNoUm9vdExheWVyKCk7
CisKKyAgICB2b2lkIGRpZENoYW5nZVZpZXdTaXplKCk7CisgICAgdm9pZCBkaWRDaGFuZ2VEb2N1
bWVudFNpemUoKTsKKyAgICB2b2lkIGRpZENoYW5nZVNldHRpbmdzKCk7CisgICAgdm9pZCBkaWRD
aGFuZ2VEZXZpY2VTY2FsZUZhY3RvcigpOworICAgIHZvaWQgZGlkQ2hhbmdlRXhwb3NlZFJlY3Qo
KTsKKyAgICB2b2lkIGRpZFNjcm9sbEZyYW1lKEZyYW1lJik7CisKKyAgICB2b2lkIGRpZENoYW5n
ZU92ZXJsYXlGcmFtZShQYWdlT3ZlcmxheSYpOworICAgIHZvaWQgZGlkQ2hhbmdlT3ZlcmxheUJh
Y2tncm91bmRDb2xvcihQYWdlT3ZlcmxheSYpOworCisgICAgaW50IG92ZXJsYXlDb3VudCgpIGNv
bnN0IHsgcmV0dXJuIG1fb3ZlcmxheUdyYXBoaWNzTGF5ZXJzLnNpemUoKTsgfQorCisgICAgYm9v
bCBoYW5kbGVNb3VzZUV2ZW50KGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYpOworCisgICAgYm9v
bCBjb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVN0cmluZ1ZhbHVlRm9yUG9pbnQoU3RyaW5nIGF0
dHJpYnV0ZSwgRmxvYXRQb2ludCwgU3RyaW5nJiB2YWx1ZSk7CisgICAgYm9vbCBjb3B5QWNjZXNz
aWJpbGl0eUF0dHJpYnV0ZUJvb2xWYWx1ZUZvclBvaW50KFN0cmluZyBhdHRyaWJ1dGUsIEZsb2F0
UG9pbnQsIGJvb2wmIHZhbHVlKTsKKyAgICBWZWN0b3I8U3RyaW5nPiBjb3B5QWNjZXNzaWJpbGl0
eUF0dHJpYnV0ZXNOYW1lcyhib29sIHBhcmFtZXRlcml6ZWROYW1lcyk7CisKK3ByaXZhdGU6Cisg
ICAgdm9pZCBjcmVhdGVSb290TGF5ZXJzSWZOZWVkZWQoKTsKKworICAgIHZvaWQgdXBkYXRlU2V0
dGluZ3NGb3JMYXllcihHcmFwaGljc0xheWVyJik7CisgICAgdm9pZCB1cGRhdGVGb3JjZVN5bmNo
cm9ub3VzU2Nyb2xsTGF5ZXJQb3NpdGlvblVwZGF0ZXMoKTsKKworICAgIC8vIEdyYXBoaWNzTGF5
ZXJDbGllbnQKKyAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5Rmx1c2hSZXF1aXJlZChjb25zdCBHcmFw
aGljc0xheWVyKikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVudHMoY29u
c3QgR3JhcGhpY3NMYXllciosIEdyYXBoaWNzQ29udGV4dCYsIEdyYXBoaWNzTGF5ZXJQYWludGlu
Z1BoYXNlLCBjb25zdCBGbG9hdFJlY3QmIGNsaXBSZWN0KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFs
IGZsb2F0IGRldmljZVNjYWxlRmFjdG9yKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBi
b29sIHNob3VsZFNraXBMYXllckluRHVtcChjb25zdCBHcmFwaGljc0xheWVyKikgY29uc3Qgb3Zl
cnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzTGF5
ZXI+IG1fZG9jdW1lbnRPdmVybGF5Um9vdExheWVyOworICAgIHN0ZDo6dW5pcXVlX3B0cjxHcmFw
aGljc0xheWVyPiBtX3ZpZXdPdmVybGF5Um9vdExheWVyOworICAgIGJvb2wgbV9pbml0aWFsaXpl
ZDsKKworICAgIEhhc2hNYXA8UGFnZU92ZXJsYXkqLCBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NM
YXllcj4+IG1fb3ZlcmxheUdyYXBoaWNzTGF5ZXJzOworICAgIFZlY3RvcjxSZWZQdHI8UGFnZU92
ZXJsYXk+PiBtX3BhZ2VPdmVybGF5czsKKyAgICBNYWluRnJhbWUmIG1fbWFpbkZyYW1lOworfTsK
KworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBQYWdlT3ZlcmxheUNvbnRyb2xs
ZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhp
Y3NMYXllckNsaWVudC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhp
Y3NMYXllckNsaWVudC5oCmluZGV4IDhhNDgzMzMuLjI1OTIyY2IgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXJDbGllbnQuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyQ2xpZW50LmgKQEAg
LTI2LDYgKzI2LDggQEAKICNpZm5kZWYgR3JhcGhpY3NMYXllckNsaWVudF9oCiAjZGVmaW5lIEdy
YXBoaWNzTGF5ZXJDbGllbnRfaAogCisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKwogbmFtZXNw
YWNlIFdlYkNvcmUgewogCiBjbGFzcyBGbG9hdFBvaW50OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMYXllci5jcHAKaW5kZXggZDlkNTkzMy4uMTYzNzRkYyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCkBAIC0yMzIyLDcgKzIzMjIsNyBAQCB2b2lkIFJl
bmRlckxheWVyOjpzY3JvbGxUbyhpbnQgeCwgaW50IHkpCiAKICAgICBJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb246OmRpZFNjcm9sbExheWVyKCZmcmFtZSk7CiAgICAgaWYgKHNjcm9sbHNPdmVyZmxv
dygpKQotICAgICAgICBmcmFtZS5sb2FkZXIoKS5jbGllbnQoKS5kaWRDaGFuZ2VTY3JvbGxPZmZz
ZXQoKTsKKyAgICAgICAgdmlldy5mcmFtZVZpZXcoKS5kaWRDaGFuZ2VTY3JvbGxPZmZzZXQoKTsK
IAogICAgIHZpZXcuZnJhbWVWaWV3KCkucmVzdW1lVmlzaWJsZUltYWdlQW5pbWF0aW9uc0luY2x1
ZGluZ1N1YmZyYW1lcygpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAppbmRleCA0YmU0NjkxLi41NzM0ZDcxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcApAQCAt
NDUsNiArNDUsNyBAQAogI2luY2x1ZGUgIk1haW5GcmFtZS5oIgogI2luY2x1ZGUgIk5vZGVMaXN0
LmgiCiAjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlBhZ2VPdmVybGF5Q29udHJvbGxlci5o
IgogI2luY2x1ZGUgIlJlbmRlckVtYmVkZGVkT2JqZWN0LmgiCiAjaW5jbHVkZSAiUmVuZGVyRmxv
d1RocmVhZC5oIgogI2luY2x1ZGUgIlJlbmRlckZ1bGxTY3JlZW4uaCIKQEAgLTY0Myw3ICs2NDQs
OCBAQCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6dXBkYXRlQ29tcG9zaXRpbmdMYXllcnNU
aW1lckZpcmVkKFRpbWVyPFJlbmRlckxheWVyQwogCiBib29sIFJlbmRlckxheWVyQ29tcG9zaXRv
cjo6aGFzQW55QWRkaXRpb25hbENvbXBvc2l0ZWRMYXllcnMoY29uc3QgUmVuZGVyTGF5ZXImIHJv
b3RMYXllcikgY29uc3QKIHsKLSAgICByZXR1cm4gbV9jb21wb3NpdGVkTGF5ZXJDb3VudCA+IChy
b290TGF5ZXIuaXNDb21wb3NpdGVkKCkgPyAxIDogMCk7CisgICAgaW50IGxheWVyQ291bnQgPSBt
X2NvbXBvc2l0ZWRMYXllckNvdW50ICsgbV9yZW5kZXJWaWV3LmZyYW1lKCkubWFpbkZyYW1lKCku
cGFnZU92ZXJsYXlDb250cm9sbGVyKCkub3ZlcmxheUNvdW50KCk7CisgICAgcmV0dXJuIGxheWVy
Q291bnQgPiAocm9vdExheWVyLmlzQ29tcG9zaXRlZCgpID8gMSA6IDApOwogfQogCiB2b2lkIFJl
bmRlckxheWVyQ29tcG9zaXRvcjo6Y2FuY2VsQ29tcG9zaXRpbmdMYXllclVwZGF0ZSgpCkBAIC02
NjUsNyArNjY3LDcgQEAgdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0ZUNvbXBvc2l0
aW5nTGF5ZXJzKENvbXBvc2l0aW5nVXBkYXRlVHlwZSB1cGRhdGUKICAgICBpZiAobV9yZW5kZXJW
aWV3Lm5lZWRzTGF5b3V0KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChtX2ZvcmNlQ29t
cG9zaXRpbmdNb2RlICYmICFtX2NvbXBvc2l0aW5nKQorICAgIGlmICgobV9mb3JjZUNvbXBvc2l0
aW5nTW9kZSB8fCBtX3JlbmRlclZpZXcuZnJhbWUoKS5tYWluRnJhbWUoKS5wYWdlT3ZlcmxheUNv
bnRyb2xsZXIoKS5vdmVybGF5Q291bnQoKSkgJiYgIW1fY29tcG9zaXRpbmcpCiAgICAgICAgIGVu
YWJsZUNvbXBvc2l0aW5nTW9kZSh0cnVlKTsKIAogICAgIGlmICghbV9yZWV2YWx1YXRlQ29tcG9z
aXRpbmdBZnRlckxheW91dCAmJiAhbV9jb21wb3NpdGluZykKQEAgLTc0OCw3ICs3NTAsNyBAQCB2
b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6dXBkYXRlQ29tcG9zaXRpbmdMYXllcnMoQ29tcG9z
aXRpbmdVcGRhdGVUeXBlIHVwZGF0ZQogCiAgICAgICAgIC8vIEhvc3QgdGhlIGRvY3VtZW50IGxh
eWVyIGluIHRoZSBSZW5kZXJWaWV3J3Mgcm9vdCBsYXllci4KICAgICAgICAgaWYgKGlzRnVsbFVw
ZGF0ZSkgewotICAgICAgICAgICAgYXBwZW5kT3ZlcmxheUxheWVycyhjaGlsZExpc3QpOworICAg
ICAgICAgICAgYXBwZW5kRG9jdW1lbnRPdmVybGF5TGF5ZXJzKGNoaWxkTGlzdCk7CiAgICAgICAg
ICAgICAvLyBFdmVuIHdoZW4gY2hpbGRMaXN0IGlzIGVtcHR5LCBkb24ndCBkcm9wIG91dCBvZiBj
b21wb3NpdGluZyBtb2RlIGlmIHRoZXJlIGFyZQogICAgICAgICAgICAgLy8gY29tcG9zaXRlZCBs
YXllcnMgdGhhdCB3ZSBkaWRuJ3QgaGl0IGluIG91ciB0cmF2ZXJzYWwgKGUuZy4gYmVjYXVzZSBv
ZiB2aXNpYmlsaXR5OmhpZGRlbikuCiAgICAgICAgICAgICBpZiAoY2hpbGRMaXN0LmlzRW1wdHko
KSAmJiAhaGFzQW55QWRkaXRpb25hbENvbXBvc2l0ZWRMYXllcnMoKnVwZGF0ZVJvb3QpKQpAQCAt
Nzg0LDE1ICs3ODYsMTkgQEAgdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0ZUNvbXBv
c2l0aW5nTGF5ZXJzKENvbXBvc2l0aW5nVXBkYXRlVHlwZSB1cGRhdGUKICAgICBJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb246OmxheWVyVHJlZURpZENoYW5nZShwYWdlKCkpOwogfQogCi12b2lkIFJl
bmRlckxheWVyQ29tcG9zaXRvcjo6YXBwZW5kT3ZlcmxheUxheWVycyhWZWN0b3I8R3JhcGhpY3NM
YXllcio+JiBjaGlsZExpc3QpCit2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6YXBwZW5kRG9j
dW1lbnRPdmVybGF5TGF5ZXJzKFZlY3RvcjxHcmFwaGljc0xheWVyKj4mIGNoaWxkTGlzdCkKIHsK
ICAgICBGcmFtZSYgZnJhbWUgPSBtX3JlbmRlclZpZXcuZnJhbWVWaWV3KCkuZnJhbWUoKTsKKyAg
ICBpZiAoIWZyYW1lLmlzTWFpbkZyYW1lKCkpCisgICAgICAgIHJldHVybjsKKwogICAgIFBhZ2Uq
IHBhZ2UgPSBmcmFtZS5wYWdlKCk7CiAgICAgaWYgKCFwYWdlKQogICAgICAgICByZXR1cm47CiAK
LSAgICBpZiAoR3JhcGhpY3NMYXllciogb3ZlcmxheUxheWVyID0gcGFnZS0+Y2hyb21lKCkuY2xp
ZW50KCkuZG9jdW1lbnRPdmVybGF5TGF5ZXJGb3JGcmFtZShmcmFtZSkpCi0gICAgICAgIGNoaWxk
TGlzdC5hcHBlbmQob3ZlcmxheUxheWVyKTsKKyAgICBQYWdlT3ZlcmxheUNvbnRyb2xsZXImIHBh
Z2VPdmVybGF5Q29udHJvbGxlciA9IGZyYW1lLm1haW5GcmFtZSgpLnBhZ2VPdmVybGF5Q29udHJv
bGxlcigpOworICAgIHBhZ2VPdmVybGF5Q29udHJvbGxlci53aWxsQXR0YWNoUm9vdExheWVyKCk7
CisgICAgY2hpbGRMaXN0LmFwcGVuZCgmcGFnZU92ZXJsYXlDb250cm9sbGVyLmRvY3VtZW50T3Zl
cmxheVJvb3RMYXllcigpKTsKIH0KIAogdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmxheWVy
QmVjYW1lTm9uQ29tcG9zaXRlZChjb25zdCBSZW5kZXJMYXllciYgbGF5ZXIpCkBAIC0zMzY2LDYg
KzMzNzIsMTEgQEAgdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmF0dGFjaFJvb3RMYXllcihS
b290TGF5ZXJBdHRhY2htZW50IGF0dGFjaG1lbnQpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwog
CiAgICAgICAgICAgICBwYWdlLT5jaHJvbWUoKS5jbGllbnQoKS5hdHRhY2hSb290R3JhcGhpY3NM
YXllcigmZnJhbWUsIHJvb3RHcmFwaGljc0xheWVyKCkpOworICAgICAgICAgICAgaWYgKGZyYW1l
LmlzTWFpbkZyYW1lKCkpIHsKKyAgICAgICAgICAgICAgICBQYWdlT3ZlcmxheUNvbnRyb2xsZXIm
IHBhZ2VPdmVybGF5Q29udHJvbGxlciA9IGZyYW1lLm1haW5GcmFtZSgpLnBhZ2VPdmVybGF5Q29u
dHJvbGxlcigpOworICAgICAgICAgICAgICAgIHBhZ2VPdmVybGF5Q29udHJvbGxlci53aWxsQXR0
YWNoUm9vdExheWVyKCk7CisgICAgICAgICAgICAgICAgcGFnZS0+Y2hyb21lKCkuY2xpZW50KCku
YXR0YWNoVmlld092ZXJsYXlHcmFwaGljc0xheWVyKCZmcmFtZSwgJnBhZ2VPdmVybGF5Q29udHJv
bGxlci52aWV3T3ZlcmxheVJvb3RMYXllcigpKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgUm9vdExheWVyQXR0YWNoZWRWaWFFbmNs
b3NpbmdGcmFtZTogewpAQCAtMzQxMCw2ICszNDIxLDggQEAgdm9pZCBSZW5kZXJMYXllckNvbXBv
c2l0b3I6OmRldGFjaFJvb3RMYXllcigpCiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAg
cGFnZS0+Y2hyb21lKCkuY2xpZW50KCkuYXR0YWNoUm9vdEdyYXBoaWNzTGF5ZXIoJmZyYW1lLCAw
KTsKKyAgICAgICAgaWYgKGZyYW1lLmlzTWFpbkZyYW1lKCkpCisgICAgICAgICAgICBwYWdlLT5j
aHJvbWUoKS5jbGllbnQoKS5hdHRhY2hWaWV3T3ZlcmxheUdyYXBoaWNzTGF5ZXIoJmZyYW1lLCAw
KTsKICAgICB9CiAgICAgYnJlYWs7CiAgICAgY2FzZSBSb290TGF5ZXJVbmF0dGFjaGVkOgpAQCAt
MzQ0NCw4ICszNDU3LDEyIEBAIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyb290TGF5ZXJB
dHRhY2htZW50Q2hhbmdlZCgpCiAgICAgaWYgKFJlbmRlckxheWVyQmFja2luZyogYmFja2luZyA9
IGxheWVyID8gbGF5ZXItPmJhY2tpbmcoKSA6IG51bGxwdHIpCiAgICAgICAgIGJhY2tpbmctPnVw
ZGF0ZURyYXdzQ29udGVudCgpOwogCi0gICAgaWYgKEdyYXBoaWNzTGF5ZXIqIG92ZXJsYXlMYXll
ciA9IHBhZ2UtPmNocm9tZSgpLmNsaWVudCgpLmRvY3VtZW50T3ZlcmxheUxheWVyRm9yRnJhbWUo
ZnJhbWUpKQotICAgICAgICBtX3Jvb3RDb250ZW50TGF5ZXItPmFkZENoaWxkKG92ZXJsYXlMYXll
cik7CisgICAgaWYgKCFmcmFtZS5pc01haW5GcmFtZSgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBQYWdlT3ZlcmxheUNvbnRyb2xsZXImIHBhZ2VPdmVybGF5Q29udHJvbGxlciA9IGZyYW1lLm1h
aW5GcmFtZSgpLnBhZ2VPdmVybGF5Q29udHJvbGxlcigpOworICAgIHBhZ2VPdmVybGF5Q29udHJv
bGxlci53aWxsQXR0YWNoUm9vdExheWVyKCk7CisgICAgbV9yb290Q29udGVudExheWVyLT5hZGRD
aGlsZCgmcGFnZU92ZXJsYXlDb250cm9sbGVyLmRvY3VtZW50T3ZlcmxheVJvb3RMYXllcigpKTsK
IH0KIAogLy8gSUZyYW1lcyBhcmUgc3BlY2lhbCwgYmVjYXVzZSB3ZSBob29rIGNvbXBvc2l0aW5n
IGxheWVycyB0b2dldGhlciBhY3Jvc3MgaWZyYW1lIGJvdW5kYXJpZXMKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuaCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuaAppbmRleCA3YmQyNDBhLi5k
OWE4NzRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJD
b21wb3NpdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29t
cG9zaXRvci5oCkBAIC0zNjIsNyArMzYyLDcgQEAgcHJpdmF0ZToKICAgICBib29sIGxheWVySGFz
M0RDb250ZW50KGNvbnN0IFJlbmRlckxheWVyJikgY29uc3Q7CiAgICAgYm9vbCBpc1J1bm5pbmdB
Y2NlbGVyYXRlZFRyYW5zZm9ybUFuaW1hdGlvbihSZW5kZXJMYXllck1vZGVsT2JqZWN0JikgY29u
c3Q7CiAKLSAgICB2b2lkIGFwcGVuZE92ZXJsYXlMYXllcnMoVmVjdG9yPEdyYXBoaWNzTGF5ZXIq
PiYpOworICAgIHZvaWQgYXBwZW5kRG9jdW1lbnRPdmVybGF5TGF5ZXJzKFZlY3RvcjxHcmFwaGlj
c0xheWVyKj4mKTsKICAgICBib29sIGhhc0FueUFkZGl0aW9uYWxDb21wb3NpdGVkTGF5ZXJzKGNv
bnN0IFJlbmRlckxheWVyJiByb290TGF5ZXIpIGNvbnN0OwogCiAgICAgdm9pZCBlbnN1cmVSb290
TGF5ZXIoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZyBiL1NvdXJj
ZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwppbmRleCBiZjZkOGViLi41NjE2YjdmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9tYWMvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTQtMDktMzAgIFRpbSBIb3J0b24gIDx0aW1vdGh5
X2hvcnRvbkBhcHBsZS5jb20+CisKKyAgICAgICAgTW92ZSBQYWdlT3ZlcmxheVtDb250cm9sbGVy
XSB0byBXZWJDb3JlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xMzcxNjQKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzE4NTA4MjU4PgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQv
V2ViQ2hyb21lQ2xpZW50Lmg6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xp
ZW50Lm1tOgorICAgICAgICAoV2ViQ2hyb21lQ2xpZW50OjphdHRhY2hWaWV3T3ZlcmxheUdyYXBo
aWNzTGF5ZXIpOgorICAgICAgICBBZGQgYW4gZW1wdHkgQ2hyb21lQ2xpZW50IG92ZXJyaWRlLgor
CiAyMDE0LTA5LTI4ICBHeXV5b3VuZyBLaW0gIDxneXV5b3VuZy5raW1Ac2Ftc3VuZy5jb20+CiAK
ICAgICAgICAgTW92ZSBDb2xvcklucHV0VHlwZSBjbGFzcyB0byBzdGQ6OnVuaXF1ZV9wdHIKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVu
dC5oIGIvU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgK
aW5kZXggMWQ0ODI4MS4uNzI3MGNlMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvV2Vi
Q29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgKKysrIGIvU291cmNlL1dlYktpdC9tYWMvV2Vi
Q29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgKQEAgLTE2Myw2ICsxNjMsNyBAQCBwdWJsaWM6
CiAgICAgdmlydHVhbCBib29sIHNob3VsZFBhaW50RW50aXJlQ29udGVudHMoKSBjb25zdCBvdmVy
cmlkZTsKIAogICAgIHZpcnR1YWwgdm9pZCBhdHRhY2hSb290R3JhcGhpY3NMYXllcihXZWJDb3Jl
OjpGcmFtZSosIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFs
IHZvaWQgYXR0YWNoVmlld092ZXJsYXlHcmFwaGljc0xheWVyKFdlYkNvcmU6OkZyYW1lKiwgV2Vi
Q29yZTo6R3JhcGhpY3NMYXllciopIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBzZXROZWVk
c09uZVNob3REcmF3aW5nU3luY2hyb25pemF0aW9uKCkgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2
b2lkIHNjaGVkdWxlQ29tcG9zaXRpbmdMYXllckZsdXNoKCkgb3ZlcnJpZGU7CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5tbSBi
L1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5tbQppbmRl
eCBlMWRjMTBkLi40NjA2MzEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJDb3Jl
U3VwcG9ydC9XZWJDaHJvbWVDbGllbnQubW0KKysrIGIvU291cmNlL1dlYktpdC9tYWMvV2ViQ29y
ZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lm1tCkBAIC05MjQsNiArOTI0LDExIEBAIHZvaWQgV2Vi
Q2hyb21lQ2xpZW50OjphdHRhY2hSb290R3JhcGhpY3NMYXllcihGcmFtZSogZnJhbWUsIEdyYXBo
aWNzTGF5ZXIqIGdyYXBoCiAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKIH0KIAordm9p
ZCBXZWJDaHJvbWVDbGllbnQ6OmF0dGFjaFZpZXdPdmVybGF5R3JhcGhpY3NMYXllcihGcmFtZSos
IEdyYXBoaWNzTGF5ZXIqKQoreworICAgIC8vIEZJWE1FOiBJZiB3ZSB3YW50IHZpZXctcmVsYXRp
dmUgcGFnZSBvdmVybGF5cyBpbiBXZWJLaXQxLCB0aGlzIHdvdWxkIGJlIHRoZSBwbGFjZSB0byBo
b29rIHRoZW0gdXAuCit9CisKIHZvaWQgV2ViQ2hyb21lQ2xpZW50OjpzZXROZWVkc09uZVNob3RE
cmF3aW5nU3luY2hyb25pemF0aW9uKCkKIHsKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElP
TlM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dpbi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
S2l0L3dpbi9DaGFuZ2VMb2cKaW5kZXggZjY3MTJmZS4uZmY3M2I0ZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC93aW4vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvd2luL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDE2IEBACisyMDE0LTA5LTMwICBUaW0gSG9ydG9uICA8dGltb3RoeV9ob3J0
b25AYXBwbGUuY29tPgorCisgICAgICAgIE1vdmUgUGFnZU92ZXJsYXlbQ29udHJvbGxlcl0gdG8g
V2ViQ29yZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTM3MTY0CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xODUwODI1OD4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkNo
cm9tZUNsaWVudC5jcHA6CisgICAgICAgIChXZWJDaHJvbWVDbGllbnQ6OmF0dGFjaFZpZXdPdmVy
bGF5R3JhcGhpY3NMYXllcik6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xp
ZW50Lmg6CisgICAgICAgIEFkZCBhbiBlbXB0eSBDaHJvbWVDbGllbnQgb3ZlcnJpZGUuCisKIDIw
MTQtMDktMjkgIENocmlzdG9waGUgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAg
IE1ha2UgaXM8PigpIC8gZG93bmNhc3Q8PigpIHdvcmsgZm9yIEhUTUxEb2N1bWVudCBhbmQgaXRz
IHN1YmNsYXNzZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0
L1dlYkNocm9tZUNsaWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9X
ZWJDaHJvbWVDbGllbnQuY3BwCmluZGV4IGE5YzBiMGEuLjVmYjE3OWQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAKKysrIGIv
U291cmNlL1dlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcApAQCAt
NzUyLDYgKzc1MiwxMSBAQCB2b2lkIFdlYkNocm9tZUNsaWVudDo6YXR0YWNoUm9vdEdyYXBoaWNz
TGF5ZXIoRnJhbWUqIGZyYW1lLCBHcmFwaGljc0xheWVyKiBncmFwaAogICAgIG1fd2ViVmlldy0+
c2V0Um9vdENoaWxkTGF5ZXIoZ3JhcGhpY3NMYXllcik7CiB9CiAKK3ZvaWQgV2ViQ2hyb21lQ2xp
ZW50OjphdHRhY2hWaWV3T3ZlcmxheUdyYXBoaWNzTGF5ZXIoRnJhbWUqLCBHcmFwaGljc0xheWVy
KikKK3sKKyAgICAvLyBGSVhNRTogSWYgd2Ugd2FudCB2aWV3LXJlbGF0aXZlIHBhZ2Ugb3Zlcmxh
eXMgaW4gV2ViS2l0MSBvbiBXaW5kb3dzLCB0aGlzIHdvdWxkIGJlIHRoZSBwbGFjZSB0byBob29r
IHRoZW0gdXAuCit9CisKIHZvaWQgV2ViQ2hyb21lQ2xpZW50OjpzY2hlZHVsZUNvbXBvc2l0aW5n
TGF5ZXJGbHVzaCgpCiB7CiAgICAgbV93ZWJWaWV3LT5mbHVzaFBlbmRpbmdHcmFwaGljc0xheWVy
Q2hhbmdlc1Nvb24oKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2luL1dlYkNvcmVTdXBw
b3J0L1dlYkNocm9tZUNsaWVudC5oIGIvU291cmNlL1dlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQv
V2ViQ2hyb21lQ2xpZW50LmgKaW5kZXggM2NkNjI4MS4uY2Q3OTJjNCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgKKysrIGIvU291
cmNlL1dlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgKQEAgLTEzMCw2
ICsxMzAsNyBAQCBwdWJsaWM6CiAKICAgICAvLyBQYXNzIDAgYXMgdGhlIEdyYXBoaWNzTGF5ZXIg
dG8gZGV0YXRjaCB0aGUgcm9vdCBsYXllci4KICAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoUm9vdEdy
YXBoaWNzTGF5ZXIoV2ViQ29yZTo6RnJhbWUqLCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKik7Cisg
ICAgdmlydHVhbCB2b2lkIGF0dGFjaFZpZXdPdmVybGF5R3JhcGhpY3NMYXllcihXZWJDb3JlOjpG
cmFtZSosIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKSBvdmVycmlkZTsKICAgICAvLyBTZXRzIGEg
ZmxhZyB0byBzcGVjaWZ5IHRoYXQgdGhlIG5leHQgdGltZSBjb250ZW50IGlzIGRyYXduIHRvIHRo
ZSB3aW5kb3csCiAgICAgLy8gdGhlIGNoYW5nZXMgYXBwZWFyIG9uIHRoZSBzY3JlZW4gaW4gc3lu
Y2hyb255IHdpdGggdXBkYXRlcyB0byBHcmFwaGljc0xheWVycy4KICAgICB2aXJ0dWFsIHZvaWQg
c2V0TmVlZHNPbmVTaG90RHJhd2luZ1N5bmNocm9uaXphdGlvbigpIHsgfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV2ViS2l0Mi9DTWFrZUxpc3Rz
LnR4dAppbmRleCA2YmRjNTlkLi40YTQ2NTQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9D
TWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9DTWFrZUxpc3RzLnR4dApAQCAtNTQz
LDggKzU0Myw2IEBAIHNldChXZWJLaXQyX1NPVVJDRVMKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2Uv
RmluZENvbnRyb2xsZXIuY3BwCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUhvc3Qu
Y3BwCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1BhZ2VCYW5uZXIuY3BwCi0gICAgV2ViUHJvY2Vz
cy9XZWJQYWdlL1BhZ2VPdmVybGF5LmNwcAotICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9QYWdlT3Zl
cmxheUNvbnRyb2xsZXIuY3BwCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1RhcEhpZ2hsaWdodENv
bnRyb2xsZXIuY3BwCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkJhY2tGb3J3YXJkTGlzdFBy
b3h5LmNwcAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJDb250ZXh0TWVudS5jcHAKQEAgLTU1
NSw2ICs1NTMsNyBAQCBzZXQoV2ViS2l0Ml9TT1VSQ0VTCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYk9wZW5QYW5lbFJlc3VsdExpc3RlbmVyLmNwcAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJQYWdlLmNwcAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlR3JvdXBQcm94eS5jcHAK
KyAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZU92ZXJsYXkuY3BwCiAgICAgV2ViUHJvY2Vz
cy9XZWJQYWdlL1Zpc2l0ZWRMaW5rVGFibGVDb250cm9sbGVyLmNwcAogICAgIFdlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJVbmRvU3RlcC5jcHAKICkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCAzNjBhYmVmLi42ZjBmYjYy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktp
dDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTM0IEBACisyMDE0LTA5LTMwICBUaW0gSG9ydG9uICA8
dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgorCisgICAgICAgIE1vdmUgUGFnZU92ZXJsYXlbQ29u
dHJvbGxlcl0gdG8gV2ViQ29yZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTM3MTY0CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xODUwODI1OD4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIENNYWtlTGlz
dHMudHh0OgorICAgICAgICAqIFdlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAg
ICAgICAgTWFrZSB0aGUgYXBwcm9wcmlhdGUgYnVpbGQgc3lzdGVtIGNoYW5nZXMuCisKKyAgICAg
ICAgKiBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlQVBJQ2FzdC5oOgor
ICAgICAgICBNYWtlIFdLQnVuZGxlUGFnZU92ZXJsYXlSZWYgbWFwIHRvIFdlYlBhZ2VPdmVybGF5
IGluc3RlYWQgb2YgUGFnZU92ZXJsYXkuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0FQSS9jL1dLQnVuZGxlUGFnZS5jcHA6CisgICAgICAgIChXS0J1bmRsZVBhZ2VJbnN0
YWxsUGFnZU92ZXJsYXkpOgorICAgICAgICAoV0tCdW5kbGVQYWdlVW5pbnN0YWxsUGFnZU92ZXJs
YXkpOgorICAgICAgICAoV0tCdW5kbGVQYWdlSW5zdGFsbFBhZ2VPdmVybGF5V2l0aEFuaW1hdGlv
bik6CisgICAgICAgIChXS0J1bmRsZVBhZ2VVbmluc3RhbGxQYWdlT3ZlcmxheVdpdGhBbmltYXRp
b24pOgorICAgICAgICBGb3J3YXJkIFBhZ2VPdmVybGF5IGluc3RhbGxhdGlvbi91bmluc3RhbGxh
dGlvbiB0byBXZWJDb3JlLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9B
UEkvYy9XS0J1bmRsZVBhZ2VPdmVybGF5LmNwcDoKKyAgICAgICAgKFdLQnVuZGxlUGFnZU92ZXJs
YXlHZXRUeXBlSUQpOgorICAgICAgICAoV0tCdW5kbGVQYWdlT3ZlcmxheUNyZWF0ZSk6CisgICAg
ICAgIChXS0J1bmRsZVBhZ2VPdmVybGF5U2V0QWNjZXNzaWJpbGl0eUNsaWVudCk6CisgICAgICAg
IFVzZSBXZWJQYWdlT3ZlcmxheSBpbnN0ZWFkIG9mIFBhZ2VPdmVybGF5LCBhbmQgcmVmZXJlbmNl
cyBpbnN0ZWFkIG9mIHBvaW50ZXJzLgorICAgICAgICBXZSBmb3J3YXJkIGNsaWVudCBjYWxsYmFj
a3MgdGhyb3VnaCBmcm9tIFBhZ2VPdmVybGF5OjpDbGllbnQgdG8gV2ViUGFnZU92ZXJsYXk6OkNs
aWVudC4KKworICAgICAgICAoUGFnZU92ZXJsYXlDbGllbnRJbXBsOjpjb3B5QWNjZXNzaWJpbGl0
eUF0dHJpYnV0ZVZhbHVlKToKKyAgICAgICAgKFBhZ2VPdmVybGF5Q2xpZW50SW1wbDo6Y29weUFj
Y2Vzc2liaWxpdHlBdHRyaWJ1dGVOYW1lcyk6CisgICAgICAgIENvbnZlcnQgZnJvbSB3dGYgdHlw
ZXMgdG8gV2ViS2l0MiB0eXBlcy4KKworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBv
cnQvV2ViQ2hyb21lQ2xpZW50LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViQ2hyb21lQ2xpZW50
OjpncmFwaGljc0xheWVyRmFjdG9yeSk6CisgICAgICAgIElmIHdlIGRvbid0IGhhdmUgYSBkcmF3
aW5nIGFyZWEsIGRvbid0IGRlcmVmZXJlbmNlIGl0IQorCisgICAgICAgIChXZWJLaXQ6OldlYkNo
cm9tZUNsaWVudDo6YXR0YWNoVmlld092ZXJsYXlHcmFwaGljc0xheWVyKToKKyAgICAgICAgRm9y
d2FyZCBhdHRhY2hWaWV3T3ZlcmxheUdyYXBoaWNzTGF5ZXIgdG8gdGhlIERyYXdpbmdBcmVhLgor
CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaDoK
KworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50
LmNwcDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckNs
aWVudC5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5jcHA6
CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmg6CisgICAgICAg
ICogV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9GaW5kQ29udHJvbGxlcklPUy5tbToKKyAgICAgICAg
KiBXZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL0ZpbmRJbmRpY2F0b3JPdmVybGF5Q2xpZW50SU9TLmg6
CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9TZXJ2aWNlc092ZXJsYXlDb250cm9s
bGVyLm1tOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9TZXJ2aWNlc092ZXJsYXlDb250
cm9sbGVyLmg6CisgICAgICAgIE1lY2hhbmljYWwgY2hhbmdlcyB0byBhZG9wdCB0byB0aGUgZmFj
dCB0aGF0IFBhZ2VPdmVybGF5IGlzIGluIFdlYkNvcmUgbm93LgorCisgICAgICAgICogV2ViUHJv
Y2Vzcy9XZWJQYWdlL0xheWVyVHJlZUhvc3QuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViUGFnZS5jcHA6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaDoK
KyAgICAgICAgUmVtb3ZlIHN1cHBvcnQgZm9yIFdlYktpdDItYmFzZWQgcGFnZSBvdmVybGF5cy4K
KyAgICAgICAgUmV0dXJuIE1haW5GcmFtZSBpbnN0ZWFkIG9mIEZyYW1lIGZyb20gbWFpbkZyYW1l
KCkuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZU92ZXJsYXkuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZU92ZXJsYXkuaDogQWRk
ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VPdmVybGF5OjpjcmVhdGUpOgorICAgICAgICAo
V2ViS2l0OjpXZWJQYWdlT3ZlcmxheTo6V2ViUGFnZU92ZXJsYXkpOgorICAgICAgICAoV2ViS2l0
OjpXZWJQYWdlT3ZlcmxheTo6fldlYlBhZ2VPdmVybGF5KToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UGFnZU92ZXJsYXk6OnNldE5lZWRzRGlzcGxheSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VP
dmVybGF5OjpjbGVhcik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VPdmVybGF5OjpwYWdlT3Zl
cmxheURlc3Ryb3llZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VPdmVybGF5Ojp3aWxsTW92
ZVRvUGFnZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VPdmVybGF5OjpkaWRNb3ZlVG9QYWdl
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZU92ZXJsYXk6OmRyYXdSZWN0KToKKyAgICAgICAg
KFdlYktpdDo6V2ViUGFnZU92ZXJsYXk6Om1vdXNlRXZlbnQpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJQYWdlT3ZlcmxheTo6ZGlkU2Nyb2xsRnJhbWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdl
T3ZlcmxheTo6Y29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVTdHJpbmdWYWx1ZUZvclBvaW50KToK
KyAgICAgICAgKFdlYktpdDo6V2ViUGFnZU92ZXJsYXk6OmNvcHlBY2Nlc3NpYmlsaXR5QXR0cmli
dXRlQm9vbFZhbHVlRm9yUG9pbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlT3ZlcmxheTo6
Y29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVOYW1lcyk6CisgICAgICAgIFdlYlBhZ2VPdmVybGF5
IGV4aXN0cyB0byBiZSBvdXIgQVBJIG9iamVjdCwgYnV0IGZvcndhcmRzIGV2ZXJ5dGhpbmcKKyAg
ICAgICAgdG8gaXRzIFdlYkNvcmU6OlBhZ2VPdmVybGF5LCBhbmQgaW1wbGVtZW50cyBXZWJDb3Jl
OjpQYWdlT3ZlcmxheTo6Q2xpZW50LCBhbmQKKyAgICAgICAgZm9yd2FyZHMgY2xpZW50IGNhbGxi
YWNrcyB0byBpdHMgV2ViUGFnZU92ZXJsYXk6OkNsaWVudCAod2hpY2gKKyAgICAgICAgV0tCdW5k
bGVQYWdlT3ZlcmxheSBpbXBsZW1lbnRzKS4KKworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFn
ZS9tYWMvV0tBY2Nlc3NpYmlsaXR5V2ViUGFnZU9iamVjdE1hYy5tbToKKyAgICAgICAgKC1bV0tB
Y2Nlc3NpYmlsaXR5V2ViUGFnZU9iamVjdCBhY2Nlc3NpYmlsaXR5UGFyYW1ldGVyaXplZEF0dHJp
YnV0ZU5hbWVzXSk6CisgICAgICAgICgtW1dLQWNjZXNzaWJpbGl0eVdlYlBhZ2VPYmplY3QgYWNj
ZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlOmZvclBhcmFtZXRlcjpdKToKKyAgICAgICAgRm9yd2Fy
ZCB0aGUgdGhyZWUgQVggcHJvcGVydGllcyB0aGF0IFBhZ2VPdmVybGF5cyBhcmUgZXZlciBxdWVy
aWVkIGZvcgorICAgICAgICB0byB0aGUgYXBwcm9wcmlhdGUgUGFnZU92ZXJsYXlDb250cm9sbGVy
IGZ1bmN0aW9uLgorICAgICAgICAKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1Jl
bW90ZUxheWVyVHJlZURyYXdpbmdBcmVhLmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdl
L21hYy9SZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYS5tbToKKyAgICAgICAgKFdlYktpdDo6UmVt
b3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWE6OlJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhKToKKyAg
ICAgICAgKFdlYktpdDo6UmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWE6OnVwZGF0ZVJvb3RMYXll
cnMpOgorICAgICAgICBGYWN0b3IgdXBkYXRlUm9vdExheWVycyBvdXQgb2Ygc2V0Um9vdENvbXBv
c2l0aW5nTGF5ZXIuCisKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0Fy
ZWE6OmF0dGFjaFZpZXdPdmVybGF5R3JhcGhpY3NMYXllcik6CisgICAgICAgIElmIHdlIGF0dGFj
aC9kZXRhY2ggdGhlIHZpZXctcmVsYXRpdmUgcGFnZSBvdmVybGF5IHJvb3QgbGF5ZXIsCisgICAg
ICAgIHJlYXR0YWNoIHRoZSByb290IGNvbXBvc2l0aW5nIGxheWVyJ3MgY2hpbGRyZW4uCisKKyAg
ICAgICAgKFdlYktpdDo6UmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWE6OnNldFJvb3RDb21wb3Np
dGluZ0xheWVyKToKKyAgICAgICAgRGl0dG8gZm9yIHRoZSByb290IGNvbXBvc2l0aW5nIGxheWVy
LgorCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhOjp1cGRhdGVT
Y3JvbGxlZEV4cG9zZWRSZWN0KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlTGF5ZXJUcmVlRHJh
d2luZ0FyZWE6OmZsdXNoTGF5ZXJzKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlTGF5ZXJUcmVl
RHJhd2luZ0FyZWE6Om1haW5GcmFtZUNvbnRlbnRTaXplQ2hhbmdlZCk6CisgICAgICAgIEluZm9y
bWluZyBQYWdlT3ZlcmxheUNvbnRyb2xsZXIgb2YgZXhwb3NlZCByZWN0L2RvY3VtZW50IHNpemUg
Y2hhbmdlcyBpcyBub3cKKyAgICAgICAgV2ViQ29yZSdzIGpvYi4KKworICAgICAgICAqIFdlYlBy
b2Nlc3MvV2ViUGFnZS9tYWMvVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWEuaDoKKyAgICAg
ICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1RpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVh
Lm1tOgorICAgICAgICAoV2ViS2l0OjpUaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYTo6VGls
ZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWEpOgorICAgICAgICAoV2ViS2l0OjpUaWxlZENvcmVB
bmltYXRpb25EcmF3aW5nQXJlYTo6dXBkYXRlUm9vdExheWVycyk6CisgICAgICAgIEZhY3RvciB1
cGRhdGVSb290TGF5ZXJzIG91dCBvZiBzZXRSb290Q29tcG9zaXRpbmdMYXllci4KKworICAgICAg
ICAoV2ViS2l0OjpUaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYTo6YXR0YWNoVmlld092ZXJs
YXlHcmFwaGljc0xheWVyKToKKyAgICAgICAgKFdlYktpdDo6VGlsZWRDb3JlQW5pbWF0aW9uRHJh
d2luZ0FyZWE6OnNldFJvb3RDb21wb3NpdGluZ0xheWVyKToKKyAgICAgICAgTWFrZSB1c2Ugb2Yg
dXBkYXRlUm9vdExheWVycyB3aGVuIHdlIGF0dGFjaC9kZXRhY2ggcm9vdCBjb21wb3NpdGluZyBs
YXllci92aWV3IG92ZXJsYXkgbGF5ZXIuCisKKyAgICAgICAgKFdlYktpdDo6VGlsZWRDb3JlQW5p
bWF0aW9uRHJhd2luZ0FyZWE6Om1haW5GcmFtZUNvbnRlbnRTaXplQ2hhbmdlZCk6CisgICAgICAg
IChXZWJLaXQ6OlRpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhOjpmbHVzaExheWVycyk6Cisg
ICAgICAgIChXZWJLaXQ6OlRpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhOjp1cGRhdGVTY3Jv
bGxlZEV4cG9zZWRSZWN0KToKKyAgICAgICAgSW5mb3JtaW5nIFBhZ2VPdmVybGF5Q29udHJvbGxl
ciBvZiBleHBvc2VkIHJlY3QvZG9jdW1lbnQgc2l6ZSBjaGFuZ2VzIGlzIG5vdworICAgICAgICBX
ZWJDb3JlJ3Mgam9iLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVh
Lmg6CisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVhOjphdHRhY2hWaWV3T3ZlcmxheUdyYXBo
aWNzTGF5ZXIpOgorCisgICAgICAgICogU2hhcmVkL1dlYlJlbmRlckxheWVyLmNwcDoKKyAgICAg
ICAgKiBTaGFyZWQvV2ViUmVuZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlQVBJQ2FzdC5oOgorICAgICAgICAqIFdlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvQVBJL21hYy9XS1dlYlByb2Nlc3NQbHVnSW5Ccm93c2VyQ29udGV4
dENvbnRyb2xsZXIubW06CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9tYWMv
V2ViRWRpdG9yQ2xpZW50TWFjLm1tOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUHJvY2Vzcy5j
cHA6CisgICAgICAgIEluY2x1ZGUgTWFpbkZyYW1lLmggYmVjYXVzZSBXZWJQYWdlOjptYWluRnJh
bWUgcmV0dXJucyBhIE1haW5GcmFtZSBub3cuCisKIDIwMTQtMDktMzAgIENhcmxvcyBHYXJjaWEg
Q2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT04ocjE3Mzky
OSk6IFtHVEtdIFRlc3RJbnNwZWN0b3IgZmFpbHMgYWZ0ZXIgcjE3MzkyOQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvU2hhcmVkL1dlYlJlbmRlckxheWVyLmNwcCBiL1NvdXJjZS9XZWJLaXQy
L1NoYXJlZC9XZWJSZW5kZXJMYXllci5jcHAKaW5kZXggYzk0ZjJiMi4uMTg0OTRiMCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYlJlbmRlckxheWVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvV2ViUmVuZGVyTGF5ZXIuY3BwCkBAIC0zMiw2ICszMiw3IEBACiAj
aW5jbHVkZSA8V2ViQ29yZS9GcmFtZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVMb2FkZXIu
aD4KICNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lTG9hZGVyQ2xpZW50Lmg+CisjaW5jbHVkZSA8V2Vi
Q29yZS9NYWluRnJhbWUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1JlbmRlckxheWVyLmg+CiAjaW5j
bHVkZSA8V2ViQ29yZS9SZW5kZXJMYXllckJhY2tpbmcuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Jl
bmRlclZpZXcuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJSZW5kZXJP
YmplY3QuY3BwIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYlJlbmRlck9iamVjdC5jcHAKaW5k
ZXggNmNlZGFkYS4uNjk1MzA4NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1dl
YlJlbmRlck9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYlJlbmRlck9i
amVjdC5jcHAKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lLmg+CiAj
aW5jbHVkZSA8V2ViQ29yZS9GcmFtZUxvYWRlci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVM
b2FkZXJDbGllbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL01haW5GcmFtZS5oPgogI2luY2x1ZGUg
PFdlYkNvcmUvUmVuZGVyVGV4dC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyVmlldy5oPgog
I2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyV2lkZ2V0Lmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggZDBhOTJmOS4uMmQ3ZWMzZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agpAQCAtMzA3LDggKzMwNyw2IEBACiAJCTFBOTBDMUVFMTI2NEZENTAwMDNFNDRENCAvKiBXZWJG
aW5kT3B0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMUE5MEMxRUQxMjY0RkQ1MDAwM0U0NEQ0IC8qIFdlYkZpbmRPcHRpb25zLmggKi87IH07CiAJ
CTFBOTBDMUY0MTI2NEZENzEwMDNFNDRENCAvKiBGaW5kQ29udHJvbGxlci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE5MEMxRjIxMjY0RkQ3MTAwM0U0
NEQ0IC8qIEZpbmRDb250cm9sbGVyLmggKi87IH07CiAJCTFBOTBDMUY1MTI2NEZENzEwMDNFNDRE
NCAvKiBGaW5kQ29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAxQTkwQzFGMzEyNjRGRDcxMDAzRTQ0RDQgLyogRmluZENvbnRyb2xsZXIu
Y3BwICovOyB9OwotCQkxQTkwQzIzNzEyNjUwNzE3MDAzRTQ0RDQgLyogUGFnZU92ZXJsYXkuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBOTBDMjM1MTI2
NTA3MTcwMDNFNDRENCAvKiBQYWdlT3ZlcmxheS5oICovOyB9OwotCQkxQTkwQzIzODEyNjUwNzE3
MDAzRTQ0RDQgLyogUGFnZU92ZXJsYXkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMUE5MEMyMzYxMjY1MDcxNzAwM0U0NEQ0IC8qIFBhZ2VPdmVybGF5
LmNwcCAqLzsgfTsKIAkJMUE5MTAwNzExMjY2NzVDNDAwMTg0MkY1IC8qIEZpbmRJbmRpY2F0b3Iu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBOTEwMDZG
MTI2Njc1QzMwMDE4NDJGNSAvKiBGaW5kSW5kaWNhdG9yLmggKi87IH07CiAJCTFBOTEwMDcyMTI2
Njc1QzQwMDE4NDJGNSAvKiBGaW5kSW5kaWNhdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBOTEwMDcwMTI2Njc1QzQwMDE4NDJGNSAvKiBGaW5k
SW5kaWNhdG9yLmNwcCAqLzsgfTsKIAkJMUE5MkRDMTExMkY4QkE0NjAwMTdBRjY1IC8qIExheWVy
VHJlZUNvbnRleHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDFBOTJEQzEwMTJGOEJBNDYwMDE3QUY2NSAvKiBMYXllclRyZWVDb250ZXh0LmggKi87IH07
CkBAIC01NjgsOCArNTY2LDYgQEAKIAkJMjlENTVERjIxNjFCRjlGMTAwMzFBMkUzIC8qIFdlYlBh
Z2VHcm91cFByb3h5TWVzc2FnZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDI5RDU1REYwMTYxQkY5RjEwMDMxQTJFMyAvKiBXZWJQYWdlR3JvdXBQcm94
eU1lc3NhZ2VzLmggKi87IH07CiAJCTJEMTI1QzVFMTg1N0VBMDUwMDNCQTNDQiAvKiBWaWV3R2Vz
dHVyZUNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDJEMTI1QzVDMTg1N0VBMDUwMDNCQTNDQiAvKiBWaWV3R2VzdHVyZUNvbnRyb2xsZXIu
aCAqLzsgfTsKIAkJMkQxMjVDNUYxODU3RUEwNTAwM0JBM0NCIC8qIFZpZXdHZXN0dXJlQ29udHJv
bGxlck1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDJEMTI1QzVEMTg1N0VBMDUwMDNCQTNDQiAvKiBWaWV3R2VzdHVyZUNvbnRyb2xsZXJNYWMubW0g
Ki87IH07Ci0JCTJEMTQwRUFGMThGMzdCRTAwMDVFNzVBMCAvKiBQYWdlT3ZlcmxheUNvbnRyb2xs
ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkQx
NDBFQUQxOEYzN0JFMDAwNUU3NUEwIC8qIFBhZ2VPdmVybGF5Q29udHJvbGxlci5jcHAgKi87IH07
Ci0JCTJEMTQwRUIwMThGMzdCRTAwMDVFNzVBMCAvKiBQYWdlT3ZlcmxheUNvbnRyb2xsZXIuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJEMTQwRUFFMThG
MzdCRTAwMDVFNzVBMCAvKiBQYWdlT3ZlcmxheUNvbnRyb2xsZXIuaCAqLzsgfTsKIAkJMkQxQjVE
NUQxODU4NjlDODAwNkM2NTk2IC8qIFZpZXdHZXN0dXJlQ29udHJvbGxlck1lc3NhZ2VSZWNlaXZl
ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRDFC
NUQ1QjE4NTg2OUM4MDA2QzY1OTYgLyogVmlld0dlc3R1cmVDb250cm9sbGVyTWVzc2FnZVJlY2Vp
dmVyLmNwcCAqLzsgfTsKIAkJMkQxQjVENUUxODU4NjlDODAwNkM2NTk2IC8qIFZpZXdHZXN0dXJl
Q29udHJvbGxlck1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAyRDFCNUQ1QzE4NTg2OUM4MDA2QzY1OTYgLyogVmlld0dlc3R1cmVDb250cm9s
bGVyTWVzc2FnZXMuaCAqLzsgfTsKIAkJMkQyOEYzRTQxODg1Q0NDMTAwNEI5RUFFIC8qIFdlYkNo
cm9tZUNsaWVudElPUy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDJEMjhGM0UwMTg4NUNDQzEwMDRCOUVBRSAvKiBXZWJDaHJvbWVDbGllbnRJT1MubW0g
Ki87IH07CkBAIC01ODYsNiArNTgyLDggQEAKIAkJMkQ0MjlCRkQxNzIxRTJDNzAwRUM2ODFGIC8q
IFBERlBsdWdpblBhc3N3b3JkRmllbGQubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAyRDQyOUJGQjE3MjFFMkJBMDBFQzY4MUYgLyogUERGUGx1Z2luUGFz
c3dvcmRGaWVsZC5tbSAqLzsgfTsKIAkJMkQ0N0I1NkMxODEwNzE0RTAwM0EzQUVFIC8qIFJlbW90
ZUxheWVyQmFja2luZ1N0b3JlLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMkQ0N0I1NkExODEwNzE0RTAwM0EzQUVFIC8qIFJlbW90ZUxheWVyQmFja2lu
Z1N0b3JlLm1tICovOyB9OwogCQkyRDQ3QjU2RDE4MTA3MTRFMDAzQTNBRUUgLyogUmVtb3RlTGF5
ZXJCYWNraW5nU3RvcmUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDJENDdCNTZCMTgxMDcxNEUwMDNBM0FFRSAvKiBSZW1vdGVMYXllckJhY2tpbmdTdG9y
ZS5oICovOyB9OworCQkyRDVDOUQwNTE5QzgxRDhGMDBCM0M1QzEgLyogV2ViUGFnZU92ZXJsYXku
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkQ1QzlE
MDMxOUM4MUQ4RjAwQjNDNUMxIC8qIFdlYlBhZ2VPdmVybGF5LmNwcCAqLzsgfTsKKwkJMkQ1QzlE
MDYxOUM4MUQ4RjAwQjNDNUMxIC8qIFdlYlBhZ2VPdmVybGF5LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRDVDOUQwNDE5QzgxRDhGMDBCM0M1QzEgLyog
V2ViUGFnZU92ZXJsYXkuaCAqLzsgfTsKIAkJMkQ2QUI1NDExOTJCMUM0QTAwM0E5RkQxIC8qIFdL
UERGUGFnZU51bWJlckluZGljYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMkQ2QUI1M0YxOTJCMUM0QTAwM0E5RkQxIC8qIFdLUERGUGFnZU51bWJl
ckluZGljYXRvci5oICovOyB9OwogCQkyRDZBQjU0MjE5MkIxQzRBMDAzQTlGRDEgLyogV0tQREZQ
YWdlTnVtYmVySW5kaWNhdG9yLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMkQ2QUI1NDAxOTJCMUM0QTAwM0E5RkQxIC8qIFdLUERGUGFnZU51bWJlcklu
ZGljYXRvci5tbSAqLzsgfTsKIAkJMkQ2QjM3MUIxOEE5NjdBRDAwNDJBRTgwIC8qIF9XS1RodW1i
bmFpbFZpZXcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDJENkIzNzE5MThBOTY3QUQwMDQyQUU4MCAvKiBfV0tUaHVtYm5haWxWaWV3LmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTIyNzEsOCArMjI2OSw2
IEBACiAJCTFBOTBDMUVEMTI2NEZENTAwMDNFNDRENCAvKiBXZWJGaW5kT3B0aW9ucy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJGaW5kT3B0aW9ucy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkxQTkwQzFGMjEyNjRGRDcxMDAzRTQ0RDQgLyogRmluZENvbnRy
b2xsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmluZENvbnRyb2xsZXIu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUE5MEMxRjMxMjY0RkQ3MTAwM0U0NEQ0
IC8qIEZpbmRDb250cm9sbGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEZpbmRDb250cm9sbGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMUE5
MEMyMzUxMjY1MDcxNzAwM0U0NEQ0IC8qIFBhZ2VPdmVybGF5LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFBhZ2VPdmVybGF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCTFBOTBDMjM2MTI2NTA3MTcwMDNFNDRENCAvKiBQYWdlT3ZlcmxheS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQYWdlT3ZlcmxheS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTFBOTEwMDZGMTI2Njc1QzMwMDE4NDJGNSAvKiBGaW5kSW5kaWNh
dG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZpbmRJbmRpY2F0b3IuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUE5MTAwNzAxMjY2NzVDNDAwMTg0MkY1IC8q
IEZpbmRJbmRpY2F0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
RmluZEluZGljYXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBOTJEQzEw
MTJGOEJBNDYwMDE3QUY2NSAvKiBMYXllclRyZWVDb250ZXh0LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IExheWVyVHJlZUNvbnRleHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTI1NTgsOCArMjU1NCw2IEBACiAJCTI5RDU1REYwMTYxQkY5RjEwMDMxQTJFMyAv
KiBXZWJQYWdlR3JvdXBQcm94eU1lc3NhZ2VzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFdlYlBhZ2VHcm91cFByb3h5TWVzc2FnZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMkQxMjVDNUMxODU3RUEwNTAwM0JBM0NCIC8qIFZpZXdHZXN0dXJlQ29udHJvbGxl
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWaWV3R2VzdHVyZUNvbnRyb2xs
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkQxMjVDNUQxODU3RUEwNTAwM0JB
M0NCIC8qIFZpZXdHZXN0dXJlQ29udHJvbGxlck1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLm9iamNwcDsgcGF0aCA9IFZpZXdHZXN0dXJlQ29udHJvbGxlck1hYy5tbTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMkQxNDBFQUQxOEYzN0JFMDAwNUU3NUEwIC8qIFBhZ2VPdmVy
bGF5Q29udHJvbGxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQ
YWdlT3ZlcmxheUNvbnRyb2xsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQky
RDE0MEVBRTE4RjM3QkUwMDA1RTc1QTAgLyogUGFnZU92ZXJsYXlDb250cm9sbGVyLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBhZ2VPdmVybGF5Q29udHJvbGxlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyRDFCNUQ1QTE4NTg2NTk5MDA2QzY1OTYgLyogVmll
d0dlc3R1cmVDb250cm9sbGVyLm1lc3NhZ2VzLmluICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFZpZXdHZXN0dXJlQ29udHJvbGxl
ci5tZXNzYWdlcy5pbjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkQxQjVENUIxODU4
NjlDODAwNkM2NTk2IC8qIFZpZXdHZXN0dXJlQ29udHJvbGxlck1lc3NhZ2VSZWNlaXZlci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBWaWV3R2VzdHVyZUNvbnRyb2xs
ZXJNZXNzYWdlUmVjZWl2ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyRDFC
NUQ1QzE4NTg2OUM4MDA2QzY1OTYgLyogVmlld0dlc3R1cmVDb250cm9sbGVyTWVzc2FnZXMuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmlld0dlc3R1cmVDb250cm9sbGVyTWVz
c2FnZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI1ODIsNiArMjU3Niw4IEBA
CiAJCTJENDI5QkZCMTcyMUUyQkEwMEVDNjgxRiAvKiBQREZQbHVnaW5QYXNzd29yZEZpZWxkLm1t
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gUERGUGx1Z2luUGFzc3dv
cmRGaWVsZC5tbTsgcGF0aCA9IFBERi9QREZQbHVnaW5QYXNzd29yZEZpZWxkLm1tOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkyRDQ3QjU2QTE4MTA3MTRFMDAzQTNBRUUgLyogUmVtb3Rl
TGF5ZXJCYWNraW5nU3RvcmUubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBh
dGggPSBSZW1vdGVMYXllckJhY2tpbmdTdG9yZS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMkQ0N0I1NkIxODEwNzE0RTAwM0EzQUVFIC8qIFJlbW90ZUxheWVyQmFja2luZ1N0b3Jl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbW90ZUxheWVyQmFja2luZ1N0
b3JlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTJENUM5RDAzMTlDODFEOEYwMEIz
QzVDMSAvKiBXZWJQYWdlT3ZlcmxheS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBXZWJQYWdlT3ZlcmxheS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTJENUM5RDA0MTlDODFEOEYwMEIzQzVDMSAvKiBXZWJQYWdlT3ZlcmxheS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJQYWdlT3ZlcmxheS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkyRDZBQjUzRjE5MkIxQzRBMDAzQTlGRDEgLyogV0tQREZQYWdlTnVtYmVy
SW5kaWNhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdLUERGUGFnZU51
bWJlckluZGljYXRvci5oOyBwYXRoID0gaW9zL1dLUERGUGFnZU51bWJlckluZGljYXRvci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyRDZBQjU0MDE5MkIxQzRBMDAzQTlGRDEgLyog
V0tQREZQYWdlTnVtYmVySW5kaWNhdG9yLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2Jq
Y3BwOyBuYW1lID0gV0tQREZQYWdlTnVtYmVySW5kaWNhdG9yLm1tOyBwYXRoID0gaW9zL1dLUERG
UGFnZU51bWJlckluZGljYXRvci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkQ2
QjM3MTkxOEE5NjdBRDAwNDJBRTgwIC8qIF9XS1RodW1ibmFpbFZpZXcuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gX1dLVGh1bWJuYWlsVmlldy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtNTcwMSwxMCArNTY5Nyw4IEBACiAJCQkJMUE5MEMxRjIxMjY0RkQ3MTAw
M0U0NEQ0IC8qIEZpbmRDb250cm9sbGVyLmggKi8sCiAJCQkJN0MzODc0MzMxNzJGNTYxNTAwMUJE
ODhBIC8qIFBhZ2VCYW5uZXIuY3BwICovLAogCQkJCTdDRjQ3RkY5MTcyNzVDNTcwMDhBQ0I5MSAv
KiBQYWdlQmFubmVyLmggKi8sCi0JCQkJMUE5MEMyMzYxMjY1MDcxNzAwM0U0NEQ0IC8qIFBhZ2VP
dmVybGF5LmNwcCAqLywKLQkJCQkxQTkwQzIzNTEyNjUwNzE3MDAzRTQ0RDQgLyogUGFnZU92ZXJs
YXkuaCAqLywKLQkJCQkyRDE0MEVBRDE4RjM3QkUwMDA1RTc1QTAgLyogUGFnZU92ZXJsYXlDb250
cm9sbGVyLmNwcCAqLywKLQkJCQkyRDE0MEVBRTE4RjM3QkUwMDA1RTc1QTAgLyogUGFnZU92ZXJs
YXlDb250cm9sbGVyLmggKi8sCisJCQkJMkQ1QzlEMDMxOUM4MUQ4RjAwQjNDNUMxIC8qIFdlYlBh
Z2VPdmVybGF5LmNwcCAqLywKKwkJCQkyRDVDOUQwNDE5QzgxRDhGMDBCM0M1QzEgLyogV2ViUGFn
ZU92ZXJsYXkuaCAqLywKIAkJCQk1MTkyRDU3MTE5NjFGQTJGMDBDRDE5QUEgLyogU2VydmljZXNP
dmVybGF5Q29udHJvbGxlci5oICovLAogCQkJCTJEODE5Qjk5MTg2Mjc1QjMwMDFGMDNEMSAvKiBW
aWV3R2VzdHVyZUdlb21ldHJ5Q29sbGVjdG9yLmNwcCAqLywKIAkJCQkyRDgxOUI5QTE4NjI3NUIz
MDAxRjAzRDEgLyogVmlld0dlc3R1cmVHZW9tZXRyeUNvbGxlY3Rvci5oICovLApAQCAtNzA0Niw2
ICs3MDQwLDcgQEAKIAkJCQk3Qzg1RkQ4MDE5MzQxNjY1MDAwMTc3QzQgLyogV2ViUHJlZmVyZW5j
ZXNLZXlzLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTJGNTg5NzEyQTg4Mzg4MDA2Mjk1MzAgLyog
QXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUE0NDVC
OUYxODRENUZCNTAwNEIzNDE0IC8qIFdLQ29udGV4dEluamVjdGVkQnVuZGxlQ2xpZW50LmggaW4g
SGVhZGVycyAqLywKKwkJCQkyRDVDOUQwNjE5QzgxRDhGMDBCM0M1QzEgLyogV2ViUGFnZU92ZXJs
YXkuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxMkY1ODk5MTJBODgzODgwMDYyOTUzMCAvKiBBdXRo
ZW50aWNhdGlvbkRlY2lzaW9uTGlzdGVuZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxOEU4RUY5
MTZCMjA5MUMwMEU5MTQyOSAvKiBBdXRoZW50aWNhdGlvbk1hbmFnZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCTUxMkY1OEEzMTJBODgzQUQwMDYyOTUzMCAvKiBBdXRoZW50aWNhdGlvbk1hbmFnZXJN
ZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8sCkBAIC03MTUzLDcgKzcxNDgsNiBAQAogCQkJCTFBRTUy
RjkyMTkyMDFEQTcwMEExRkEzNyAvKiBBUElDb250ZXh0Q29uZmlndXJhdGlvbi5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJN0MzNjFENzMxOTI3RkEzNjAwMzZBNTlEIC8qIFdlYlNjcmlwdE1lc3NhZ2VI
YW5kbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMTA1RkU1NDE4RDdCOURFMDA4RjU3QTggLyog
RWRpdGluZ1JhbmdlLmggaW4gSGVhZGVycyAqLywKLQkJCQkyRDE0MEVCMDE4RjM3QkUwMDA1RTc1
QTAgLyogUGFnZU92ZXJsYXlDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE3NzUz
RjExOEJBQkYwMDA3RDlFOUEgLyogR2VuZXJpY0NhbGxiYWNrLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkzNzlBODczNjE4QkJGQTQzMDA1ODhBRjIgLyogX1dLQWN0aXZhdGVkRWxlbWVudEluZm9JbnRl
cm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMwNkY0MkYxMkRCQjlCNjAwMkQ3OERFIC8qIEdl
b2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyLmggaW4gSGVhZGVycyAqLywKQEAgLTcy
NzYsNyArNzI3MCw2IEBACiAJCQkJMUE1QjFDNTExODk4NjA2RjAwNEZDRjlCIC8qIFdLTmF2aWdh
dGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0NGNDdGRkIxNzI3NUM1NzAwOEFDQjkxIC8qIFBh
Z2VCYW5uZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNkVEQUE2MTExMjcxQzYwMEU3Njc4QiAv
KiBQYWdlQ2xpZW50LmggaW4gSGVhZGVycyAqLywKLQkJCQkxQTkwQzIzNzEyNjUwNzE3MDAzRTQ0
RDQgLyogUGFnZU92ZXJsYXkuaCBpbiBIZWFkZXJzICovLAogCQkJCUM1NzRBNTgxMTJFNjY2ODEw
MDJERkU5OCAvKiBQYXN0ZWJvYXJkVHlwZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUUxOTU4MkQz
MTUzQ0JGRDcwMEI2MDg3NSAvKiBQREZLaXRJbXBvcnRzLmggaW4gSGVhZGVycyAqLywKIAkJCQkx
QUUwMEQ0RjE4MkQ2RjUwMDAwODdERDcgLyogV0tCcm93c2luZ0NvbnRleHRIYW5kbGVJbnRlcm5h
bC5oIGluIEhlYWRlcnMgKi8sCkBAIC04OTI4LDcgKzg5MjEsNiBAQAogCQkJCTUxRTM1MUY1MTgw
RjVDNzUwMEU1M0JFOSAvKiBXZWJJREJGYWN0b3J5QmFja2VuZC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk3QzM4NzQzNDE3MkY1NjE1MDAxQkQ4OEEgLyogUGFnZUJhbm5lci5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk3QzZEMzdGQzE3MkY1NTVGMDA5RDI4NDcgLyogUGFnZUJhbm5lck1hYy5tbSBp
biBTb3VyY2VzICovLAotCQkJCTFBOTBDMjM4MTI2NTA3MTcwMDNFNDRENCAvKiBQYWdlT3Zlcmxh
eS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDNTc0QTU4MjEyRTY2NjgxMDAyREZFOTggLyogUGFz
dGVib2FyZFR5cGVzLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJRTE5NTgyRDYxNTNDQzA1NDAwQjYw
ODc1IC8qIFBERktpdEltcG9ydHMubW0gaW4gU291cmNlcyAqLywKIAkJCQkyRDg3MEQxMDE2MjM0
RkZFMDAwQTNGMjAgLyogUERGUGx1Z2luLm1tIGluIFNvdXJjZXMgKi8sCkBAIC05MTI4LDcgKzkx
MjAsNiBAQAogCQkJCUE1NDI5M0E1MTk1QTQzREQwMDI3ODJDNyAvKiBXS0luc3BlY3Rvck5vZGVT
ZWFyY2hHZXN0dXJlUmVjb2duaXplci5tbSBpbiBTb3VyY2VzICovLAogCQkJCUMwMzM3REFFMTI3
QTI0RkUwMDhGRjRGNCAvKiBXZWJFdmVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzAzMkRC
QTEwRjQzODBGMDA1OEMxNUEgLyogV2ViRXZlbnRDb252ZXJzaW9uLmNwcCBpbiBTb3VyY2VzICov
LAotCQkJCTJEMTQwRUFGMThGMzdCRTAwMDVFNzVBMCAvKiBQYWdlT3ZlcmxheUNvbnRyb2xsZXIu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkMxMTFCNUUxMTJGNjI5ODAwMzM3QkFCIC8qIFdlYkV2
ZW50RmFjdG9yeS5tbSBpbiBTb3VyY2VzICovLAogCQkJCUExMThBOUVFMTkwN0FENkYwMEY3Qzky
QiAvKiBRdWlja0xvb2tEb2N1bWVudERhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUEzREQx
RkQxMjVFNTlGMzAwNDUxNUU2IC8qIFdlYkZpbmRDbGllbnQuY3BwIGluIFNvdXJjZXMgKi8sCkBA
IC05MjEyLDYgKzkyMDMsNyBAQAogCQkJCUMwNkM2MDk1MTI0QzE0NEIwMDAxNjgyRiAvKiBXZWJQ
YWdlQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUM1OUM0QTU4MThC
ODExNzQwMDdCRENCNiAvKiBBc3Npc3RlZE5vZGVJbmZvcm1hdGlvbi5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlCQzdCNjIwNzEyOUEwQTY3MDBEMTc0QTQgLyogV2ViUGFnZUdyb3VwLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCTJENUM5RDA1MTlDODFEOEYwMEIzQzVDMSAvKiBXZWJQYWdlT3Zlcmxh
eS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzdCNjI1MzEyQTQzQzk2MDBEMTc0QTQgLyogV2Vi
UGFnZUdyb3VwRGF0YS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzdCNjIxNjEyQTQyMTlBMDBE
MTc0QTQgLyogV2ViUGFnZUdyb3VwUHJveHkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMjlENTVE
RjExNjFCRjlGMTAwMzFBMkUzIC8qIFdlYlBhZ2VHcm91cFByb3h5TWVzc2FnZVJlY2VpdmVyLmNw
cCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZUFQSUNhc3QuaCBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVBUElDYXN0LmgKaW5kZXggZTYz
NTQwOC4uMGQ1YjdjNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZUFQSUNhc3QuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlQVBJQ2FzdC5oCkBAIC00OSwx
MSArNDksMTEgQEAgY2xhc3MgSW5qZWN0ZWRCdW5kbGVOb2RlSGFuZGxlOwogY2xhc3MgSW5qZWN0
ZWRCdW5kbGVSYW5nZUhhbmRsZTsKIGNsYXNzIEluamVjdGVkQnVuZGxlU2NyaXB0V29ybGQ7CiBj
bGFzcyBQYWdlQmFubmVyOwotY2xhc3MgUGFnZU92ZXJsYXk7CiBjbGFzcyBXZWJGcmFtZTsKIGNs
YXNzIFdlYkluc3BlY3RvcjsKIGNsYXNzIFdlYlBhZ2U7CiBjbGFzcyBXZWJQYWdlR3JvdXBQcm94
eTsKK2NsYXNzIFdlYlBhZ2VPdmVybGF5OwogCiBXS19BRERfQVBJX01BUFBJTkcoV0tCdW5kbGVC
YWNrRm9yd2FyZExpc3RJdGVtUmVmLCBJbmplY3RlZEJ1bmRsZUJhY2tGb3J3YXJkTGlzdEl0ZW0p
CiBXS19BRERfQVBJX01BUFBJTkcoV0tCdW5kbGVCYWNrRm9yd2FyZExpc3RSZWYsIEluamVjdGVk
QnVuZGxlQmFja0ZvcndhcmRMaXN0KQpAQCAtNjYsNyArNjYsNyBAQCBXS19BRERfQVBJX01BUFBJ
TkcoV0tCdW5kbGVOYXZpZ2F0aW9uQWN0aW9uUmVmLCBJbmplY3RlZEJ1bmRsZU5hdmlnYXRpb25B
Y3Rpb24pCiBXS19BRERfQVBJX01BUFBJTkcoV0tCdW5kbGVOb2RlSGFuZGxlUmVmLCBJbmplY3Rl
ZEJ1bmRsZU5vZGVIYW5kbGUpCiBXS19BRERfQVBJX01BUFBJTkcoV0tCdW5kbGVQYWdlQmFubmVy
UmVmLCBQYWdlQmFubmVyKQogV0tfQUREX0FQSV9NQVBQSU5HKFdLQnVuZGxlUGFnZUdyb3VwUmVm
LCBXZWJQYWdlR3JvdXBQcm94eSkKLVdLX0FERF9BUElfTUFQUElORyhXS0J1bmRsZVBhZ2VPdmVy
bGF5UmVmLCBQYWdlT3ZlcmxheSkKK1dLX0FERF9BUElfTUFQUElORyhXS0J1bmRsZVBhZ2VPdmVy
bGF5UmVmLCBXZWJQYWdlT3ZlcmxheSkKIFdLX0FERF9BUElfTUFQUElORyhXS0J1bmRsZVBhZ2VS
ZWYsIFdlYlBhZ2UpCiBXS19BRERfQVBJX01BUFBJTkcoV0tCdW5kbGVSYW5nZUhhbmRsZVJlZiwg
SW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZSkKIFdLX0FERF9BUElfTUFQUElORyhXS0J1bmRsZVJl
ZiwgSW5qZWN0ZWRCdW5kbGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlUGFnZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlUGFnZS5jcHAKaW5kZXggMjEx
NGY1OC4uYzZlNmU1YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZVBhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVQYWdlLmNwcApAQCAtNDcsMTIg
KzQ3LDE1IEBACiAjaW5jbHVkZSAiV2ViRnVsbFNjcmVlbk1hbmFnZXIuaCIKICNpbmNsdWRlICJX
ZWJJbWFnZS5oIgogI2luY2x1ZGUgIldlYlBhZ2UuaCIKKyNpbmNsdWRlICJXZWJQYWdlT3Zlcmxh
eS5oIgogI2luY2x1ZGUgIldlYlJlbmRlckxheWVyLmgiCiAjaW5jbHVkZSAiV2ViUmVuZGVyT2Jq
ZWN0LmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9BWE9iamVjdENhY2hlLmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9BY2Nlc3NpYmlsaXR5T2JqZWN0Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9NYWluRnJhbWUu
aD4KICNpbmNsdWRlIDxXZWJDb3JlL1BhZ2UuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1BhZ2VPdmVy
bGF5Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9QYWdlT3ZlcmxheUNvbnRyb2xsZXIuaD4KICNpbmNs
dWRlIDxXZWJDb3JlL1VSTC5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KIApAQCAt
MzU0LDIyICszNTcsMjIgQEAgV0tCdW5kbGVCYWNrRm9yd2FyZExpc3RSZWYgV0tCdW5kbGVQYWdl
R2V0QmFja0ZvcndhcmRMaXN0KFdLQnVuZGxlUGFnZVJlZiBwYWdlUmUKIAogdm9pZCBXS0J1bmRs
ZVBhZ2VJbnN0YWxsUGFnZU92ZXJsYXkoV0tCdW5kbGVQYWdlUmVmIHBhZ2VSZWYsIFdLQnVuZGxl
UGFnZU92ZXJsYXlSZWYgcGFnZU92ZXJsYXlSZWYpCiB7Ci0gICAgdG9JbXBsKHBhZ2VSZWYpLT5p
bnN0YWxsUGFnZU92ZXJsYXkodG9JbXBsKHBhZ2VPdmVybGF5UmVmKSk7CisgICAgdG9JbXBsKHBh
Z2VSZWYpLT5tYWluRnJhbWUoKS0+cGFnZU92ZXJsYXlDb250cm9sbGVyKCkuaW5zdGFsbFBhZ2VP
dmVybGF5KHRvSW1wbChwYWdlT3ZlcmxheVJlZiktPmNvcmVPdmVybGF5KCksIFdlYkNvcmU6OlBh
Z2VPdmVybGF5OjpGYWRlTW9kZTo6RG9Ob3RGYWRlKTsKIH0KIAogdm9pZCBXS0J1bmRsZVBhZ2VV
bmluc3RhbGxQYWdlT3ZlcmxheShXS0J1bmRsZVBhZ2VSZWYgcGFnZVJlZiwgV0tCdW5kbGVQYWdl
T3ZlcmxheVJlZiBwYWdlT3ZlcmxheVJlZikKIHsKLSAgICB0b0ltcGwocGFnZVJlZiktPnVuaW5z
dGFsbFBhZ2VPdmVybGF5KHRvSW1wbChwYWdlT3ZlcmxheVJlZikpOworICAgIHRvSW1wbChwYWdl
UmVmKS0+bWFpbkZyYW1lKCktPnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLnVuaW5zdGFsbFBhZ2VP
dmVybGF5KHRvSW1wbChwYWdlT3ZlcmxheVJlZiktPmNvcmVPdmVybGF5KCksIFdlYkNvcmU6OlBh
Z2VPdmVybGF5OjpGYWRlTW9kZTo6RG9Ob3RGYWRlKTsKIH0KIAogdm9pZCBXS0J1bmRsZVBhZ2VJ
bnN0YWxsUGFnZU92ZXJsYXlXaXRoQW5pbWF0aW9uKFdLQnVuZGxlUGFnZVJlZiBwYWdlUmVmLCBX
S0J1bmRsZVBhZ2VPdmVybGF5UmVmIHBhZ2VPdmVybGF5UmVmKQogewotICAgIHRvSW1wbChwYWdl
UmVmKS0+aW5zdGFsbFBhZ2VPdmVybGF5KHRvSW1wbChwYWdlT3ZlcmxheVJlZiksIFBhZ2VPdmVy
bGF5OjpGYWRlTW9kZTo6RmFkZSk7CisgICAgdG9JbXBsKHBhZ2VSZWYpLT5tYWluRnJhbWUoKS0+
cGFnZU92ZXJsYXlDb250cm9sbGVyKCkuaW5zdGFsbFBhZ2VPdmVybGF5KHRvSW1wbChwYWdlT3Zl
cmxheVJlZiktPmNvcmVPdmVybGF5KCksIFdlYkNvcmU6OlBhZ2VPdmVybGF5OjpGYWRlTW9kZTo6
RmFkZSk7CiB9CiAKIHZvaWQgV0tCdW5kbGVQYWdlVW5pbnN0YWxsUGFnZU92ZXJsYXlXaXRoQW5p
bWF0aW9uKFdLQnVuZGxlUGFnZVJlZiBwYWdlUmVmLCBXS0J1bmRsZVBhZ2VPdmVybGF5UmVmIHBh
Z2VPdmVybGF5UmVmKQogewotICAgIHRvSW1wbChwYWdlUmVmKS0+dW5pbnN0YWxsUGFnZU92ZXJs
YXkodG9JbXBsKHBhZ2VPdmVybGF5UmVmKSwgUGFnZU92ZXJsYXk6OkZhZGVNb2RlOjpGYWRlKTsK
KyAgICB0b0ltcGwocGFnZVJlZiktPm1haW5GcmFtZSgpLT5wYWdlT3ZlcmxheUNvbnRyb2xsZXIo
KS51bmluc3RhbGxQYWdlT3ZlcmxheSh0b0ltcGwocGFnZU92ZXJsYXlSZWYpLT5jb3JlT3Zlcmxh
eSgpLCBXZWJDb3JlOjpQYWdlT3ZlcmxheTo6RmFkZU1vZGU6OkZhZGUpOwogfQogCiB2b2lkIFdL
QnVuZGxlUGFnZVNldFRvcE92ZXJoYW5nSW1hZ2UoV0tCdW5kbGVQYWdlUmVmIHBhZ2VSZWYsIFdL
SW1hZ2VSZWYgaW1hZ2VSZWYpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlUGFnZU92ZXJsYXkuY3BwIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZVBhZ2VPdmVybGF5
LmNwcAppbmRleCBiYmE4NjI2Li40MTQyMGIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlUGFnZU92ZXJsYXkuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5k
bGVQYWdlT3ZlcmxheS5jcHAKQEAgLTI3LDEwICsyNywxNyBAQAogI2luY2x1ZGUgIldLQnVuZGxl
UGFnZU92ZXJsYXkuaCIKIAogI2luY2x1ZGUgIkFQSUNsaWVudC5oIgotI2luY2x1ZGUgIlBhZ2VP
dmVybGF5LmgiCiAjaW5jbHVkZSAiV0tBUElDYXN0LmgiCisjaW5jbHVkZSAiV0tBcnJheS5oIgog
I2luY2x1ZGUgIldLQnVuZGxlQVBJQ2FzdC5oIgorI2luY2x1ZGUgIldLTnVtYmVyLmgiCisjaW5j
bHVkZSAiV0tSZXRhaW5QdHIuaCIKKyNpbmNsdWRlICJXS1NoYXJlZEFQSUNhc3QuaCIKKyNpbmNs
dWRlICJXS1N0cmluZ1ByaXZhdGUuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4
dC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUGFnZU92ZXJsYXkuaD4KKyNpbmNsdWRlIDxXZWJDb3Jl
L1BsYXRmb3JtTW91c2VFdmVudC5oPgorI2luY2x1ZGUgPFdlYktpdC9XZWJQYWdlT3ZlcmxheS5o
PgogCiBuYW1lc3BhY2UgQVBJIHsKIApAQCAtNDcsNyArNTQsNyBAQCB0ZW1wbGF0ZTw+IHN0cnVj
dCBDbGllbnRUcmFpdHM8V0tCdW5kbGVQYWdlT3ZlcmxheUFjY2Vzc2liaWxpdHlDbGllbnRCYXNl
PiB7CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIHVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CiAK
LWNsYXNzIFBhZ2VPdmVybGF5Q2xpZW50SW1wbCA6IEFQSTo6Q2xpZW50PFdLQnVuZGxlUGFnZU92
ZXJsYXlDbGllbnRCYXNlPiwgcHVibGljIFBhZ2VPdmVybGF5OjpDbGllbnQgeworY2xhc3MgUGFn
ZU92ZXJsYXlDbGllbnRJbXBsIDogQVBJOjpDbGllbnQ8V0tCdW5kbGVQYWdlT3ZlcmxheUNsaWVu
dEJhc2U+LCBwdWJsaWMgV2ViUGFnZU92ZXJsYXk6OkNsaWVudCB7CiBwdWJsaWM6CiAgICAgZXhw
bGljaXQgUGFnZU92ZXJsYXlDbGllbnRJbXBsKFdLQnVuZGxlUGFnZU92ZXJsYXlDbGllbnRCYXNl
KiBjbGllbnQpCiAgICAgewpAQCAtNjAsNjQgKzY3LDY0IEBAIHB1YmxpYzoKICAgICB9CiAKIHBy
aXZhdGU6Ci0gICAgLy8gUGFnZU92ZXJsYXk6OkNsaWVudC4KLSAgICB2aXJ0dWFsIHZvaWQgcGFn
ZU92ZXJsYXlEZXN0cm95ZWQoUGFnZU92ZXJsYXkqKQorICAgIC8vIFdlYlBhZ2VPdmVybGF5OjpD
bGllbnQuCisgICAgdmlydHVhbCB2b2lkIHBhZ2VPdmVybGF5RGVzdHJveWVkKFdlYlBhZ2VPdmVy
bGF5Jikgb3ZlcnJpZGUKICAgICB7CiAgICAgICAgIGRlbGV0ZSB0aGlzOwogICAgIH0KIAotICAg
IHZpcnR1YWwgdm9pZCB3aWxsTW92ZVRvV2ViUGFnZShQYWdlT3ZlcmxheSogcGFnZU92ZXJsYXks
IFdlYlBhZ2UqIHBhZ2UpCisgICAgdmlydHVhbCB2b2lkIHdpbGxNb3ZlVG9QYWdlKFdlYlBhZ2VP
dmVybGF5JiBwYWdlT3ZlcmxheSwgV2ViUGFnZSogcGFnZSkgb3ZlcnJpZGUKICAgICB7CiAgICAg
ICAgIGlmICghbV9jbGllbnQud2lsbE1vdmVUb1BhZ2UpCiAgICAgICAgICAgICByZXR1cm47CiAK
LSAgICAgICAgbV9jbGllbnQud2lsbE1vdmVUb1BhZ2UodG9BUEkocGFnZU92ZXJsYXkpLCB0b0FQ
SShwYWdlKSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKKyAgICAgICAgbV9jbGllbnQud2ls
bE1vdmVUb1BhZ2UodG9BUEkoJnBhZ2VPdmVybGF5KSwgdG9BUEkocGFnZSksIG1fY2xpZW50LmJh
c2UuY2xpZW50SW5mbyk7CiAgICAgfQogICAgIAotICAgIHZpcnR1YWwgdm9pZCBkaWRNb3ZlVG9X
ZWJQYWdlKFBhZ2VPdmVybGF5KiBwYWdlT3ZlcmxheSwgV2ViUGFnZSogcGFnZSkKKyAgICB2aXJ0
dWFsIHZvaWQgZGlkTW92ZVRvUGFnZShXZWJQYWdlT3ZlcmxheSYgcGFnZU92ZXJsYXksIFdlYlBh
Z2UqIHBhZ2UpIG92ZXJyaWRlCiAgICAgewogICAgICAgICBpZiAoIW1fY2xpZW50LmRpZE1vdmVU
b1BhZ2UpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgbV9jbGllbnQuZGlkTW92ZVRv
UGFnZSh0b0FQSShwYWdlT3ZlcmxheSksIHRvQVBJKHBhZ2UpLCBtX2NsaWVudC5iYXNlLmNsaWVu
dEluZm8pOworICAgICAgICBtX2NsaWVudC5kaWRNb3ZlVG9QYWdlKHRvQVBJKCZwYWdlT3Zlcmxh
eSksIHRvQVBJKHBhZ2UpLCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pOwogICAgIH0KIAotICAg
IHZpcnR1YWwgdm9pZCBkcmF3UmVjdChQYWdlT3ZlcmxheSogcGFnZU92ZXJsYXksIEdyYXBoaWNz
Q29udGV4dCYgZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpCisgICAg
dmlydHVhbCB2b2lkIGRyYXdSZWN0KFdlYlBhZ2VPdmVybGF5JiBwYWdlT3ZlcmxheSwgR3JhcGhp
Y3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQsIGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCkgb3Zl
cnJpZGUKICAgICB7CiAgICAgICAgIGlmICghbV9jbGllbnQuZHJhd1JlY3QpCiAgICAgICAgICAg
ICByZXR1cm47CiAKLSAgICAgICAgbV9jbGllbnQuZHJhd1JlY3QodG9BUEkocGFnZU92ZXJsYXkp
LCBncmFwaGljc0NvbnRleHQucGxhdGZvcm1Db250ZXh0KCksIHRvQVBJKGRpcnR5UmVjdCksIG1f
Y2xpZW50LmJhc2UuY2xpZW50SW5mbyk7CisgICAgICAgIG1fY2xpZW50LmRyYXdSZWN0KHRvQVBJ
KCZwYWdlT3ZlcmxheSksIGdyYXBoaWNzQ29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKSwgdG9BUEko
ZGlydHlSZWN0KSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKICAgICB9CiAgICAgCi0gICAg
dmlydHVhbCBib29sIG1vdXNlRXZlbnQoUGFnZU92ZXJsYXkqIHBhZ2VPdmVybGF5LCBjb25zdCBX
ZWJNb3VzZUV2ZW50JiBldmVudCkKKyAgICB2aXJ0dWFsIGJvb2wgbW91c2VFdmVudChXZWJQYWdl
T3ZlcmxheSYgcGFnZU92ZXJsYXksIGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgZXZlbnQpIG92
ZXJyaWRlCiAgICAgewogICAgICAgICBzd2l0Y2ggKGV2ZW50LnR5cGUoKSkgewotICAgICAgICBj
YXNlIFdlYkV2ZW50OjpNb3VzZURvd246IHsKKyAgICAgICAgY2FzZSBQbGF0Zm9ybU1vdXNlRXZl
bnQ6OlR5cGU6Ok1vdXNlUHJlc3NlZDogewogICAgICAgICAgICAgaWYgKCFtX2NsaWVudC5tb3Vz
ZURvd24pCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgICAgICByZXR1
cm4gbV9jbGllbnQubW91c2VEb3duKHRvQVBJKHBhZ2VPdmVybGF5KSwgdG9BUEkoZXZlbnQucG9z
aXRpb24oKSksIHRvQVBJKGV2ZW50LmJ1dHRvbigpKSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZv
KTsKKyAgICAgICAgICAgIHJldHVybiBtX2NsaWVudC5tb3VzZURvd24odG9BUEkoJnBhZ2VPdmVy
bGF5KSwgdG9BUEkoZXZlbnQucG9zaXRpb24oKSksIHRvQVBJKGV2ZW50LmJ1dHRvbigpKSwgbV9j
bGllbnQuYmFzZS5jbGllbnRJbmZvKTsKICAgICAgICAgfQotICAgICAgICBjYXNlIFdlYkV2ZW50
OjpNb3VzZVVwOiB7CisgICAgICAgIGNhc2UgUGxhdGZvcm1Nb3VzZUV2ZW50OjpUeXBlOjpNb3Vz
ZVJlbGVhc2VkOiB7CiAgICAgICAgICAgICBpZiAoIW1fY2xpZW50Lm1vdXNlVXApCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgICAgICByZXR1cm4gbV9jbGllbnQubW91
c2VVcCh0b0FQSShwYWdlT3ZlcmxheSksIHRvQVBJKGV2ZW50LnBvc2l0aW9uKCkpLCB0b0FQSShl
dmVudC5idXR0b24oKSksIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7CisgICAgICAgICAgICBy
ZXR1cm4gbV9jbGllbnQubW91c2VVcCh0b0FQSSgmcGFnZU92ZXJsYXkpLCB0b0FQSShldmVudC5w
b3NpdGlvbigpKSwgdG9BUEkoZXZlbnQuYnV0dG9uKCkpLCBtX2NsaWVudC5iYXNlLmNsaWVudElu
Zm8pOwogICAgICAgICB9Ci0gICAgICAgIGNhc2UgV2ViRXZlbnQ6Ok1vdXNlTW92ZTogewotICAg
ICAgICAgICAgaWYgKGV2ZW50LmJ1dHRvbigpID09IFdlYk1vdXNlRXZlbnQ6Ok5vQnV0dG9uKSB7
CisgICAgICAgIGNhc2UgUGxhdGZvcm1Nb3VzZUV2ZW50OjpUeXBlOjpNb3VzZU1vdmVkOiB7Cisg
ICAgICAgICAgICBpZiAoZXZlbnQuYnV0dG9uKCkgPT0gTW91c2VCdXR0b246Ok5vQnV0dG9uKSB7
CiAgICAgICAgICAgICAgICAgaWYgKCFtX2NsaWVudC5tb3VzZU1vdmVkKQogICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgICAgICAgICByZXR1cm4gbV9jbGllbnQu
bW91c2VNb3ZlZCh0b0FQSShwYWdlT3ZlcmxheSksIHRvQVBJKGV2ZW50LnBvc2l0aW9uKCkpLCBt
X2NsaWVudC5iYXNlLmNsaWVudEluZm8pOworICAgICAgICAgICAgICAgIHJldHVybiBtX2NsaWVu
dC5tb3VzZU1vdmVkKHRvQVBJKCZwYWdlT3ZlcmxheSksIHRvQVBJKGV2ZW50LnBvc2l0aW9uKCkp
LCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAg
ICAvLyBUaGlzIGlzIGEgTW91c2VNb3ZlIGV2ZW50IHdpdGggYSBtb3VzZSBidXR0b24gcHJlc3Nl
ZC4gQ2FsbCBtb3VzZURyYWdnZWQuCiAgICAgICAgICAgICBpZiAoIW1fY2xpZW50Lm1vdXNlRHJh
Z2dlZCkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgICAgIHJldHVy
biBtX2NsaWVudC5tb3VzZURyYWdnZWQodG9BUEkocGFnZU92ZXJsYXkpLCB0b0FQSShldmVudC5w
b3NpdGlvbigpKSwgdG9BUEkoZXZlbnQuYnV0dG9uKCkpLCBtX2NsaWVudC5iYXNlLmNsaWVudElu
Zm8pOworICAgICAgICAgICAgcmV0dXJuIG1fY2xpZW50Lm1vdXNlRHJhZ2dlZCh0b0FQSSgmcGFn
ZU92ZXJsYXkpLCB0b0FQSShldmVudC5wb3NpdGlvbigpKSwgdG9BUEkoZXZlbnQuYnV0dG9uKCkp
LCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pOwogICAgICAgICB9CiAKICAgICAgICAgZGVmYXVs
dDoKQEAgLTEyNSwxOCArMTMyLDQzIEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAgICB9CiAgICAg
Ci0gICAgdmlydHVhbCBXS1R5cGVSZWYgY29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZShQ
YWdlT3ZlcmxheSogcGFnZU92ZXJsYXksIFdLU3RyaW5nUmVmIGF0dHJpYnV0ZSwgV0tUeXBlUmVm
IHBhcmFtZXRlcikKKyAgICB2aXJ0dWFsIGJvb2wgY29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVT
dHJpbmdWYWx1ZUZvclBvaW50KFdlYlBhZ2VPdmVybGF5JiBwYWdlT3ZlcmxheSwgU3RyaW5nIGF0
dHJpYnV0ZSwgV2ViQ29yZTo6RmxvYXRQb2ludCBwYXJhbWV0ZXIsIFN0cmluZyYgdmFsdWUpIG92
ZXJyaWRlCiAgICAgewogICAgICAgICBpZiAoIW1fYWNjZXNzaWJpbGl0eUNsaWVudC5jbGllbnQo
KS5jb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlKQotICAgICAgICAgICAgcmV0dXJuIDA7
Ci0gICAgICAgIHJldHVybiBtX2FjY2Vzc2liaWxpdHlDbGllbnQuY2xpZW50KCkuY29weUFjY2Vz
c2liaWxpdHlBdHRyaWJ1dGVWYWx1ZSh0b0FQSShwYWdlT3ZlcmxheSksIGF0dHJpYnV0ZSwgcGFy
YW1ldGVyLCBtX2FjY2Vzc2liaWxpdHlDbGllbnQuY2xpZW50KCkuYmFzZS5jbGllbnRJbmZvKTsK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgV0tSZXRhaW5QdHI8V0tUeXBlUmVm
PiB3a1R5cGUgPSBtX2FjY2Vzc2liaWxpdHlDbGllbnQuY2xpZW50KCkuY29weUFjY2Vzc2liaWxp
dHlBdHRyaWJ1dGVWYWx1ZSh0b0FQSSgmcGFnZU92ZXJsYXkpLCB0b0NvcGllZEFQSShhdHRyaWJ1
dGUpLCBXS1BvaW50Q3JlYXRlKFdLUG9pbnRNYWtlKHBhcmFtZXRlci54KCksIHBhcmFtZXRlci55
KCkpKSwgbV9hY2Nlc3NpYmlsaXR5Q2xpZW50LmNsaWVudCgpLmJhc2UuY2xpZW50SW5mbyk7Cisg
ICAgICAgIGlmICh0b0ltcGwod2tUeXBlLmdldCgpKS0+dHlwZSgpICE9IEFQSTo6U3RyaW5nOjpB
UElUeXBlKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB2YWx1ZSA9IHRvV1RG
U3RyaW5nKHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPih3a1R5cGUuZ2V0KCkpKTsKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorCisgICAgdmlydHVhbCBib29sIGNvcHlBY2Nlc3NpYmlsaXR5
QXR0cmlidXRlQm9vbFZhbHVlRm9yUG9pbnQoV2ViUGFnZU92ZXJsYXkmIHBhZ2VPdmVybGF5LCBT
dHJpbmcgYXR0cmlidXRlLCBXZWJDb3JlOjpGbG9hdFBvaW50IHBhcmFtZXRlciwgYm9vbCYgdmFs
dWUpIG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoIW1fYWNjZXNzaWJpbGl0eUNsaWVudC5j
bGllbnQoKS5jb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlKQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICBXS1JldGFpblB0cjxXS1R5cGVSZWY+IHdrVHlwZSA9IG1fYWNj
ZXNzaWJpbGl0eUNsaWVudC5jbGllbnQoKS5jb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVl
KHRvQVBJKCZwYWdlT3ZlcmxheSksIHRvQ29waWVkQVBJKGF0dHJpYnV0ZSksIFdLUG9pbnRDcmVh
dGUoV0tQb2ludE1ha2UocGFyYW1ldGVyLngoKSwgcGFyYW1ldGVyLnkoKSkpLCBtX2FjY2Vzc2li
aWxpdHlDbGllbnQuY2xpZW50KCkuYmFzZS5jbGllbnRJbmZvKTsKKyAgICAgICAgaWYgKHRvSW1w
bCh3a1R5cGUuZ2V0KCkpLT50eXBlKCkgIT0gQVBJOjpCb29sZWFuOjpBUElUeXBlKQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB2YWx1ZSA9IFdLQm9vbGVhbkdldFZhbHVlKHN0
YXRpY19jYXN0PFdLQm9vbGVhblJlZj4od2tUeXBlLmdldCgpKSk7CisgICAgICAgIHJldHVybiB0
cnVlOwogICAgIH0KIAotICAgIHZpcnR1YWwgV0tBcnJheVJlZiBjb3B5QWNjZXNzaWJpbGl0eUF0
dHJpYnV0ZU5hbWVzKFBhZ2VPdmVybGF5KiBwYWdlT3ZlcmxheSwgYm9vbCBwYXJhbWVyaXplZE5h
bWVzKQorICAgIHZpcnR1YWwgVmVjdG9yPFN0cmluZz4gY29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1
dGVOYW1lcyhXZWJQYWdlT3ZlcmxheSYgcGFnZU92ZXJsYXksIGJvb2wgcGFyYW1lcml6ZWROYW1l
cykgb3ZlcnJpZGUKICAgICB7CisgICAgICAgIFZlY3RvcjxTdHJpbmc+IG5hbWVzOwogICAgICAg
ICBpZiAoIW1fYWNjZXNzaWJpbGl0eUNsaWVudC5jbGllbnQoKS5jb3B5QWNjZXNzaWJpbGl0eUF0
dHJpYnV0ZU5hbWVzKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIHJldHVybiBtX2Fj
Y2Vzc2liaWxpdHlDbGllbnQuY2xpZW50KCkuY29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVOYW1l
cyh0b0FQSShwYWdlT3ZlcmxheSksIHBhcmFtZXJpemVkTmFtZXMsIG1fYWNjZXNzaWJpbGl0eUNs
aWVudC5jbGllbnQoKS5iYXNlLmNsaWVudEluZm8pOworICAgICAgICAgICAgcmV0dXJuIG5hbWVz
OworICAgICAgICBXS1JldGFpblB0cjxXS0FycmF5UmVmPiB3a05hbWVzID0gbV9hY2Nlc3NpYmls
aXR5Q2xpZW50LmNsaWVudCgpLmNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlTmFtZXModG9BUEko
JnBhZ2VPdmVybGF5KSwgcGFyYW1lcml6ZWROYW1lcywgbV9hY2Nlc3NpYmlsaXR5Q2xpZW50LmNs
aWVudCgpLmJhc2UuY2xpZW50SW5mbyk7CisKKyAgICAgICAgc2l6ZV90IGNvdW50ID0gV0tBcnJh
eUdldFNpemUod2tOYW1lcy5nZXQoKSk7CisgICAgICAgIGZvciAoc2l6ZV90IGsgPSAwOyBrIDwg
Y291bnQ7IGsrKykgeworICAgICAgICAgICAgV0tUeXBlUmVmIGl0ZW0gPSBXS0FycmF5R2V0SXRl
bUF0SW5kZXgod2tOYW1lcy5nZXQoKSwgayk7CisgICAgICAgICAgICBpZiAodG9JbXBsKGl0ZW0p
LT50eXBlKCkgPT0gQVBJOjpTdHJpbmc6OkFQSVR5cGUpCisgICAgICAgICAgICAgICAgbmFtZXMu
YXBwZW5kKHRvV1RGU3RyaW5nKHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihpdGVtKSkpOworICAg
ICAgICB9CisKKyAgICAgICAgcmV0dXJuIG5hbWVzOwogICAgIH0KICAgICAKICAgICBBUEk6OkNs
aWVudDxXS0J1bmRsZVBhZ2VPdmVybGF5QWNjZXNzaWJpbGl0eUNsaWVudEJhc2U+IG1fYWNjZXNz
aWJpbGl0eUNsaWVudDsKQEAgLTE0NCw3ICsxNzYsNyBAQCBwcml2YXRlOgogCiBXS1R5cGVJRCBX
S0J1bmRsZVBhZ2VPdmVybGF5R2V0VHlwZUlEKCkKIHsKLSAgICByZXR1cm4gdG9BUEkoUGFnZU92
ZXJsYXk6OkFQSVR5cGUpOworICAgIHJldHVybiB0b0FQSShXZWJQYWdlT3ZlcmxheTo6QVBJVHlw
ZSk7CiB9CiAKIFdLQnVuZGxlUGFnZU92ZXJsYXlSZWYgV0tCdW5kbGVQYWdlT3ZlcmxheUNyZWF0
ZShXS0J1bmRsZVBhZ2VPdmVybGF5Q2xpZW50QmFzZSogd2tDbGllbnQpCkBAIC0xNTUsMTQgKzE4
NywxNCBAQCBXS0J1bmRsZVBhZ2VPdmVybGF5UmVmIFdLQnVuZGxlUGFnZU92ZXJsYXlDcmVhdGUo
V0tCdW5kbGVQYWdlT3ZlcmxheUNsaWVudEJhc2UqCiAgICAgYXV0byBjbGllbnRJbXBsID0gc3Rk
OjptYWtlX3VuaXF1ZTxQYWdlT3ZlcmxheUNsaWVudEltcGw+KHdrQ2xpZW50KTsKIAogICAgIC8v
IEZJWE1FOiBMb29rcyBsaWtlIHRoaXMgbGVha3MgdGhlIGNsaWVudEltcGwuCi0gICAgcmV0dXJu
IHRvQVBJKFBhZ2VPdmVybGF5OjpjcmVhdGUoY2xpZW50SW1wbC5yZWxlYXNlKCkpLmxlYWtSZWYo
KSk7CisgICAgcmV0dXJuIHRvQVBJKFdlYlBhZ2VPdmVybGF5OjpjcmVhdGUoKmNsaWVudEltcGwu
cmVsZWFzZSgpKS5sZWFrUmVmKCkpOwogfQogCiB2b2lkIFdLQnVuZGxlUGFnZU92ZXJsYXlTZXRB
Y2Nlc3NpYmlsaXR5Q2xpZW50KFdLQnVuZGxlUGFnZU92ZXJsYXlSZWYgYnVuZGxlUGFnZU92ZXJs
YXlSZWYsIFdLQnVuZGxlUGFnZU92ZXJsYXlBY2Nlc3NpYmlsaXR5Q2xpZW50QmFzZSogY2xpZW50
KQogewogICAgIGlmIChjbGllbnQgJiYgY2xpZW50LT52ZXJzaW9uKQogICAgICAgICByZXR1cm47
Ci0gICAgc3RhdGljX2Nhc3Q8UGFnZU92ZXJsYXlDbGllbnRJbXBsKj4odG9JbXBsKGJ1bmRsZVBh
Z2VPdmVybGF5UmVmKS0+Y2xpZW50KCkpLT5zZXRBY2Nlc3NpYmlsaXR5Q2xpZW50KGNsaWVudCk7
CisgICAgc3RhdGljX2Nhc3Q8UGFnZU92ZXJsYXlDbGllbnRJbXBsKj4oJnRvSW1wbChidW5kbGVQ
YWdlT3ZlcmxheVJlZiktPmNsaWVudCgpKS0+c2V0QWNjZXNzaWJpbGl0eUNsaWVudChjbGllbnQp
OwogfQogCiB2b2lkIFdLQnVuZGxlUGFnZU92ZXJsYXlTZXROZWVkc0Rpc3BsYXkoV0tCdW5kbGVQ
YWdlT3ZlcmxheVJlZiBidW5kbGVQYWdlT3ZlcmxheVJlZiwgV0tSZWN0IHJlY3QpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9tYWMvV0tX
ZWJQcm9jZXNzUGx1Z0luQnJvd3NlckNvbnRleHRDb250cm9sbGVyLm1tIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvbWFjL1dLV2ViUHJvY2Vzc1BsdWdJbkJy
b3dzZXJDb250ZXh0Q29udHJvbGxlci5tbQppbmRleCA3ZmMwNDFmLi4wZDA5MzM3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9tYWMvV0tX
ZWJQcm9jZXNzUGx1Z0luQnJvd3NlckNvbnRleHRDb250cm9sbGVyLm1tCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL21hYy9XS1dlYlByb2Nlc3NQbHVn
SW5Ccm93c2VyQ29udGV4dENvbnRyb2xsZXIubW0KQEAgLTYwLDYgKzYwLDcgQEAKICNpbXBvcnQg
PFdlYkNvcmUvRnJhbWUuaD4KICNpbXBvcnQgPFdlYkNvcmUvSFRNTEZvcm1FbGVtZW50Lmg+CiAj
aW1wb3J0IDxXZWJDb3JlL0hUTUxJbnB1dEVsZW1lbnQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvTWFp
bkZyYW1lLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogdXNpbmcgbmFtZXNwYWNlIFdl
YktpdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBv
cnQvV2ViQ2hyb21lQ2xpZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29y
ZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcAppbmRleCBjZGVjYmRhLi5iNmEyOTEwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9t
ZUNsaWVudC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9y
dC9XZWJDaHJvbWVDbGllbnQuY3BwCkBAIC04NDAsNyArODQwLDkgQEAgUGFzc1JlZlB0cjxXZWJD
b3JlOjpTZWFyY2hQb3B1cE1lbnU+IFdlYkNocm9tZUNsaWVudDo6Y3JlYXRlU2VhcmNoUG9wdXBN
ZW51KFdlYkMKIAogR3JhcGhpY3NMYXllckZhY3RvcnkqIFdlYkNocm9tZUNsaWVudDo6Z3JhcGhp
Y3NMYXllckZhY3RvcnkoKSBjb25zdAogewotICAgIHJldHVybiBtX3BhZ2UtPmRyYXdpbmdBcmVh
KCktPmdyYXBoaWNzTGF5ZXJGYWN0b3J5KCk7CisgICAgaWYgKGF1dG8gZHJhd2luZ0FyZWEgPSBt
X3BhZ2UtPmRyYXdpbmdBcmVhKCkpCisgICAgICAgIHJldHVybiBkcmF3aW5nQXJlYS0+Z3JhcGhp
Y3NMYXllckZhY3RvcnkoKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAogI2lmIFVTRShSRVFV
RVNUX0FOSU1BVElPTl9GUkFNRV9ESVNQTEFZX01PTklUT1IpCkBAIC04NTgsMTIgKzg2MCwxMCBA
QCB2b2lkIFdlYkNocm9tZUNsaWVudDo6YXR0YWNoUm9vdEdyYXBoaWNzTGF5ZXIoRnJhbWUqLCBH
cmFwaGljc0xheWVyKiBsYXllcikKICAgICAgICAgbV9wYWdlLT5leGl0QWNjZWxlcmF0ZWRDb21w
b3NpdGluZ01vZGUoKTsKIH0KIAotR3JhcGhpY3NMYXllciogV2ViQ2hyb21lQ2xpZW50Ojpkb2N1
bWVudE92ZXJsYXlMYXllckZvckZyYW1lKEZyYW1lJiBmcmFtZSkKK3ZvaWQgV2ViQ2hyb21lQ2xp
ZW50OjphdHRhY2hWaWV3T3ZlcmxheUdyYXBoaWNzTGF5ZXIoRnJhbWUqIGZyYW1lLCBHcmFwaGlj
c0xheWVyKiBncmFwaGljc0xheWVyKQogewotICAgIGlmICgmZnJhbWUgPT0gJm1fcGFnZS0+Y29y
ZVBhZ2UoKS0+bWFpbkZyYW1lKCkpCi0gICAgICAgIHJldHVybiBtX3BhZ2UtPnBhZ2VPdmVybGF5
Q29udHJvbGxlcigpLmRvY3VtZW50T3ZlcmxheVJvb3RMYXllcigpOwotCi0gICAgcmV0dXJuIG51
bGxwdHI7CisgICAgaWYgKGF1dG8gZHJhd2luZ0FyZWEgPSBtX3BhZ2UtPmRyYXdpbmdBcmVhKCkp
CisgICAgICAgIGRyYXdpbmdBcmVhLT5hdHRhY2hWaWV3T3ZlcmxheUdyYXBoaWNzTGF5ZXIoZnJh
bWUsIGdyYXBoaWNzTGF5ZXIpOwogfQogCiB2b2lkIFdlYkNocm9tZUNsaWVudDo6c2V0TmVlZHNP
bmVTaG90RHJhd2luZ1N5bmNocm9uaXphdGlvbigpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaAppbmRleCBi
OWRjMzJlLi5mNWM1YjI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgKQEAgLTIxNSwxMCArMjE1LDEw
IEBAIHByaXZhdGU6CiAKICAgICB2aXJ0dWFsIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJGYWN0b3J5
KiBncmFwaGljc0xheWVyRmFjdG9yeSgpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9p
ZCBhdHRhY2hSb290R3JhcGhpY3NMYXllcihXZWJDb3JlOjpGcmFtZSosIFdlYkNvcmU6OkdyYXBo
aWNzTGF5ZXIqKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoVmlld092ZXJsYXlH
cmFwaGljc0xheWVyKFdlYkNvcmU6OkZyYW1lKiwgV2ViQ29yZTo6R3JhcGhpY3NMYXllciopIG92
ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc09uZVNob3REcmF3aW5nU3luY2hyb25p
emF0aW9uKCkgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlQ29tcG9zaXRpbmdM
YXllckZsdXNoKCkgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBib29sIGFkanVzdExheWVyRmx1c2hU
aHJvdHRsaW5nKFdlYkNvcmU6OkxheWVyRmx1c2hUaHJvdHRsZVN0YXRlOjpGbGFncykgb3ZlcnJp
ZGU7Ci0gICAgdmlydHVhbCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiBkb2N1bWVudE92ZXJsYXlM
YXllckZvckZyYW1lKFdlYkNvcmU6OkZyYW1lJikgb3ZlcnJpZGU7CiAKICNpZiBVU0UoUkVRVUVT
VF9BTklNQVRJT05fRlJBTUVfRElTUExBWV9NT05JVE9SKQogICAgIHZpcnR1YWwgUGFzc1JlZlB0
cjxXZWJDb3JlOjpEaXNwbGF5UmVmcmVzaE1vbml0b3I+IGNyZWF0ZURpc3BsYXlSZWZyZXNoTW9u
aXRvcihQbGF0Zm9ybURpc3BsYXlJRCkgY29uc3Qgb3ZlcnJpZGU7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckNsaWVudC5j
cHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3Rv
ckNsaWVudC5jcHAKaW5kZXggODU5MzU4Yi4uMDQzOGZjYiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JDbGllbnQuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9y
Q2xpZW50LmNwcApAQCAtMzIsNyArMzIsOSBAQAogI2luY2x1ZGUgIldlYkluc3BlY3Rvci5oIgog
I2luY2x1ZGUgIldlYlBhZ2UuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0luc3BlY3RvckNvbnRyb2xs
ZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL01haW5GcmFtZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUv
UGFnZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUGFnZU92ZXJsYXlDb250cm9sbGVyLmg+CiAjaW5j
bHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CiAKICNpZiBQTEFURk9STShJT1MpCkBAIC03Myw3ICs3
NSw3IEBAIFdlYkluc3BlY3RvckNsaWVudDo6fldlYkluc3BlY3RvckNsaWVudCgpCiAgICAgfQog
CiAgICAgaWYgKG1fcGFpbnRSZWN0T3ZlcmxheSkKLSAgICAgICAgbV9wYWdlLT51bmluc3RhbGxQ
YWdlT3ZlcmxheShtX3BhaW50UmVjdE92ZXJsYXkuZ2V0KCkpOworICAgICAgICBtX3BhZ2UtPm1h
aW5GcmFtZSgpLT5wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKS51bmluc3RhbGxQYWdlT3ZlcmxheSht
X3BhaW50UmVjdE92ZXJsYXkuZ2V0KCksIFBhZ2VPdmVybGF5OjpGYWRlTW9kZTo6RmFkZSk7CiB9
CiAKIHZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50OjppbnNwZWN0b3JEZXN0cm95ZWQoKQpAQCAtMTEx
LDkgKzExMyw5IEBAIHZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50OjpoaWdobGlnaHQoKQogewogI2lm
ICFQTEFURk9STShJT1MpCiAgICAgaWYgKCFtX2hpZ2hsaWdodE92ZXJsYXkpIHsKLSAgICAgICAg
UmVmUHRyPFBhZ2VPdmVybGF5PiBoaWdobGlnaHRPdmVybGF5ID0gUGFnZU92ZXJsYXk6OmNyZWF0
ZSh0aGlzKTsKKyAgICAgICAgUmVmUHRyPFBhZ2VPdmVybGF5PiBoaWdobGlnaHRPdmVybGF5ID0g
UGFnZU92ZXJsYXk6OmNyZWF0ZSgqdGhpcyk7CiAgICAgICAgIG1faGlnaGxpZ2h0T3ZlcmxheSA9
IGhpZ2hsaWdodE92ZXJsYXkuZ2V0KCk7Ci0gICAgICAgIG1fcGFnZS0+aW5zdGFsbFBhZ2VPdmVy
bGF5KGhpZ2hsaWdodE92ZXJsYXkucmVsZWFzZSgpLCBQYWdlT3ZlcmxheTo6RmFkZU1vZGU6OkZh
ZGUpOworICAgICAgICBtX3BhZ2UtPm1haW5GcmFtZSgpLT5wYWdlT3ZlcmxheUNvbnRyb2xsZXIo
KS5pbnN0YWxsUGFnZU92ZXJsYXkoaGlnaGxpZ2h0T3ZlcmxheS5yZWxlYXNlKCksIFBhZ2VPdmVy
bGF5OjpGYWRlTW9kZTo6RmFkZSk7CiAgICAgICAgIG1faGlnaGxpZ2h0T3ZlcmxheS0+c2V0TmVl
ZHNEaXNwbGF5KCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgbV9oaWdobGlnaHRPdmVybGF5LT5z
dG9wRmFkZU91dEFuaW1hdGlvbigpOwpAQCAtMTMwLDcgKzEzMiw3IEBAIHZvaWQgV2ViSW5zcGVj
dG9yQ2xpZW50OjpoaWRlSGlnaGxpZ2h0KCkKIHsKICNpZiAhUExBVEZPUk0oSU9TKQogICAgIGlm
IChtX2hpZ2hsaWdodE92ZXJsYXkpCi0gICAgICAgIG1fcGFnZS0+dW5pbnN0YWxsUGFnZU92ZXJs
YXkobV9oaWdobGlnaHRPdmVybGF5LCBQYWdlT3ZlcmxheTo6RmFkZU1vZGU6OkZhZGUpOworICAg
ICAgICBtX3BhZ2UtPm1haW5GcmFtZSgpLT5wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKS51bmluc3Rh
bGxQYWdlT3ZlcmxheShtX2hpZ2hsaWdodE92ZXJsYXksIFBhZ2VPdmVybGF5OjpGYWRlTW9kZTo6
RmFkZSk7CiAjZWxzZQogICAgIG1fcGFnZS0+aGlkZUluc3BlY3RvckhpZ2hsaWdodCgpOwogI2Vu
ZGlmCkBAIC0xMzksOCArMTQxLDggQEAgdm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6OmhpZGVIaWdo
bGlnaHQoKQogdm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6OnNob3dQYWludFJlY3QoY29uc3QgRmxv
YXRSZWN0JiByZWN0KQogewogICAgIGlmICghbV9wYWludFJlY3RPdmVybGF5KSB7Ci0gICAgICAg
IG1fcGFpbnRSZWN0T3ZlcmxheSA9IFBhZ2VPdmVybGF5OjpjcmVhdGUodGhpcywgUGFnZU92ZXJs
YXk6Ok92ZXJsYXlUeXBlOjpEb2N1bWVudCk7Ci0gICAgICAgIG1fcGFnZS0+aW5zdGFsbFBhZ2VP
dmVybGF5KG1fcGFpbnRSZWN0T3ZlcmxheSwgUGFnZU92ZXJsYXk6OkZhZGVNb2RlOjpEb05vdEZh
ZGUpOworICAgICAgICBtX3BhaW50UmVjdE92ZXJsYXkgPSBQYWdlT3ZlcmxheTo6Y3JlYXRlKCp0
aGlzLCBQYWdlT3ZlcmxheTo6T3ZlcmxheVR5cGU6OkRvY3VtZW50KTsKKyAgICAgICAgbV9wYWdl
LT5tYWluRnJhbWUoKS0+cGFnZU92ZXJsYXlDb250cm9sbGVyKCkuaW5zdGFsbFBhZ2VPdmVybGF5
KG1fcGFpbnRSZWN0T3ZlcmxheSwgUGFnZU92ZXJsYXk6OkZhZGVNb2RlOjpEb05vdEZhZGUpOwog
ICAgIH0KIAogICAgIGlmICghbV9wYWludEluZGljYXRvckxheWVyQ2xpZW50KQpAQCAtMTY3LDgg
KzE2OSw4IEBAIHZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50OjpzaG93UGFpbnRSZWN0KGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCkKICAgICAKICAgICBtX3BhaW50UmVjdExheWVycy5hZGQocGFpbnRMYXll
ci5nZXQoKSk7CiAKLSAgICBHcmFwaGljc0xheWVyKiBvdmVybGF5Um9vdExheWVyID0gbV9wYWlu
dFJlY3RPdmVybGF5LT5sYXllcigpOwotICAgIG92ZXJsYXlSb290TGF5ZXItPmFkZENoaWxkKHBh
aW50TGF5ZXIucmVsZWFzZSgpKTsKKyAgICBHcmFwaGljc0xheWVyJiBvdmVybGF5Um9vdExheWVy
ID0gbV9wYWludFJlY3RPdmVybGF5LT5sYXllcigpOworICAgIG92ZXJsYXlSb290TGF5ZXIuYWRk
Q2hpbGQocGFpbnRMYXllci5yZWxlYXNlKCkpOwogfQogCiB2b2lkIFdlYkluc3BlY3RvckNsaWVu
dDo6YW5pbWF0aW9uRW5kZWRGb3JMYXllcihjb25zdCBHcmFwaGljc0xheWVyKiBsYXllcikKQEAg
LTE5OCwxMyArMjAwLDEzIEBAIHZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50OjpkaWRTZXRTZWFyY2hp
bmdGb3JOb2RlKGJvb2wgZW5hYmxlZCkKIH0KICNlbmRpZgogCi12b2lkIFdlYkluc3BlY3RvckNs
aWVudDo6cGFnZU92ZXJsYXlEZXN0cm95ZWQoUGFnZU92ZXJsYXkqKQordm9pZCBXZWJJbnNwZWN0
b3JDbGllbnQ6OnBhZ2VPdmVybGF5RGVzdHJveWVkKFBhZ2VPdmVybGF5JikKIHsKIH0KIAotdm9p
ZCBXZWJJbnNwZWN0b3JDbGllbnQ6OndpbGxNb3ZlVG9XZWJQYWdlKFBhZ2VPdmVybGF5KiwgV2Vi
UGFnZSogd2ViUGFnZSkKK3ZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50Ojp3aWxsTW92ZVRvUGFnZShQ
YWdlT3ZlcmxheSYsIFBhZ2UqIHBhZ2UpCiB7Ci0gICAgaWYgKHdlYlBhZ2UpCisgICAgaWYgKHBh
Z2UpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIFRoZSBwYWdlIG92ZXJsYXkgaXMgbW92aW5n
IGF3YXkgZnJvbSB0aGUgd2ViIHBhZ2UsIHJlc2V0IGl0LgpAQCAtMjEyLDE2ICsyMTQsMTYgQEAg
dm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6OndpbGxNb3ZlVG9XZWJQYWdlKFBhZ2VPdmVybGF5Kiwg
V2ViUGFnZSogd2ViUGFnZSkKICAgICBtX2hpZ2hsaWdodE92ZXJsYXkgPSAwOwogfQogCi12b2lk
IFdlYkluc3BlY3RvckNsaWVudDo6ZGlkTW92ZVRvV2ViUGFnZShQYWdlT3ZlcmxheSosIFdlYlBh
Z2UqKQordm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6OmRpZE1vdmVUb1BhZ2UoUGFnZU92ZXJsYXkm
LCBQYWdlKikKIHsKIH0KIAotdm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6OmRyYXdSZWN0KFBhZ2VP
dmVybGF5KiwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBXZWJDb3Jl
OjpJbnRSZWN0JiAvKmRpcnR5UmVjdCovKQordm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6OmRyYXdS
ZWN0KFBhZ2VPdmVybGF5JiwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25z
dCBXZWJDb3JlOjpJbnRSZWN0JiAvKmRpcnR5UmVjdCovKQogewogICAgIG1fcGFnZS0+Y29yZVBh
Z2UoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLmRyYXdIaWdobGlnaHQoY29udGV4dCk7CiB9CiAK
LWJvb2wgV2ViSW5zcGVjdG9yQ2xpZW50Ojptb3VzZUV2ZW50KFBhZ2VPdmVybGF5KiwgY29uc3Qg
V2ViTW91c2VFdmVudCYpCitib29sIFdlYkluc3BlY3RvckNsaWVudDo6bW91c2VFdmVudChQYWdl
T3ZlcmxheSYsIGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYpCiB7CiAgICAgcmV0dXJuIGZhbHNl
OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9y
dC9XZWJJbnNwZWN0b3JDbGllbnQuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29y
ZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50LmgKaW5kZXggNzk4Y2FjNy4uZGZjMDM4YSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJJbnNw
ZWN0b3JDbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBw
b3J0L1dlYkluc3BlY3RvckNsaWVudC5oCkBAIC0yOCwxNiArMjgsMTYgQEAKIAogI2lmIEVOQUJM
RShJTlNQRUNUT1IpCiAKLSNpbmNsdWRlICJQYWdlT3ZlcmxheS5oIgotCiAjaW5jbHVkZSA8V2Vi
Q29yZS9JbnNwZWN0b3JDbGllbnQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0luc3BlY3RvckZvcndh
cmRpbmcuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1BhZ2VPdmVybGF5Lmg+CiAjaW5jbHVkZSA8d3Rm
L0hhc2hTZXQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgR3JhcGhpY3NDb250ZXh0
OwogY2xhc3MgR3JhcGhpY3NMYXllcjsKIGNsYXNzIEludFJlY3Q7CitjbGFzcyBQYWdlT3Zlcmxh
eTsKIH0KIAogbmFtZXNwYWNlIFdlYktpdCB7CkBAIC00NSw3ICs0NSw3IEBAIG5hbWVzcGFjZSBX
ZWJLaXQgewogY2xhc3MgV2ViUGFnZTsKIGNsYXNzIFJlcGFpbnRJbmRpY2F0b3JMYXllckNsaWVu
dDsKIAotY2xhc3MgV2ViSW5zcGVjdG9yQ2xpZW50IDogcHVibGljIFdlYkNvcmU6Okluc3BlY3Rv
ckNsaWVudCwgcHJpdmF0ZSBQYWdlT3ZlcmxheTo6Q2xpZW50IHsKK2NsYXNzIFdlYkluc3BlY3Rv
ckNsaWVudCA6IHB1YmxpYyBXZWJDb3JlOjpJbnNwZWN0b3JDbGllbnQsIHByaXZhdGUgV2ViQ29y
ZTo6UGFnZU92ZXJsYXk6OkNsaWVudCB7CiBmcmllbmQgY2xhc3MgUmVwYWludEluZGljYXRvckxh
eWVyQ2xpZW50OwogcHVibGljOgogICAgIFdlYkluc3BlY3RvckNsaWVudChXZWJQYWdlKik7CkBA
IC03NCwxOCArNzQsMTggQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgc2hvd1BhaW50UmVj
dChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKSBvdmVycmlkZTsKIAogICAgIC8vIFBhZ2VPdmVy
bGF5OjpDbGllbnQKLSAgICB2aXJ0dWFsIHZvaWQgcGFnZU92ZXJsYXlEZXN0cm95ZWQoUGFnZU92
ZXJsYXkqKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgd2lsbE1vdmVUb1dlYlBhZ2UoUGFn
ZU92ZXJsYXkqLCBXZWJQYWdlKikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGRpZE1vdmVU
b1dlYlBhZ2UoUGFnZU92ZXJsYXkqLCBXZWJQYWdlKikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2
b2lkIGRyYXdSZWN0KFBhZ2VPdmVybGF5KiwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiwgY29u
c3QgV2ViQ29yZTo6SW50UmVjdCYpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgYm9vbCBtb3VzZUV2
ZW50KFBhZ2VPdmVybGF5KiwgY29uc3QgV2ViTW91c2VFdmVudCYpIG92ZXJyaWRlOworICAgIHZp
cnR1YWwgdm9pZCBwYWdlT3ZlcmxheURlc3Ryb3llZChXZWJDb3JlOjpQYWdlT3ZlcmxheSYpIG92
ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCB3aWxsTW92ZVRvUGFnZShXZWJDb3JlOjpQYWdlT3Zl
cmxheSYsIFdlYkNvcmU6OlBhZ2UqKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkTW92
ZVRvUGFnZShXZWJDb3JlOjpQYWdlT3ZlcmxheSYsIFdlYkNvcmU6OlBhZ2UqKSBvdmVycmlkZTsK
KyAgICB2aXJ0dWFsIHZvaWQgZHJhd1JlY3QoV2ViQ29yZTo6UGFnZU92ZXJsYXkmLCBXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQmLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jikgb3ZlcnJpZGU7Cisg
ICAgdmlydHVhbCBib29sIG1vdXNlRXZlbnQoV2ViQ29yZTo6UGFnZU92ZXJsYXkmLCBjb25zdCBX
ZWJDb3JlOjpQbGF0Zm9ybU1vdXNlRXZlbnQmKSBvdmVycmlkZTsKIAogICAgIHZvaWQgYW5pbWF0
aW9uRW5kZWRGb3JMYXllcihjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKik7CiAKICAgICBX
ZWJQYWdlKiBtX3BhZ2U7Ci0gICAgUGFnZU92ZXJsYXkqIG1faGlnaGxpZ2h0T3ZlcmxheTsKKyAg
ICBXZWJDb3JlOjpQYWdlT3ZlcmxheSogbV9oaWdobGlnaHRPdmVybGF5OwogICAgIAotICAgIFJl
ZlB0cjxQYWdlT3ZlcmxheT4gbV9wYWludFJlY3RPdmVybGF5OworICAgIFJlZlB0cjxXZWJDb3Jl
OjpQYWdlT3ZlcmxheT4gbV9wYWludFJlY3RPdmVybGF5OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxS
ZXBhaW50SW5kaWNhdG9yTGF5ZXJDbGllbnQ+IG1fcGFpbnRJbmRpY2F0b3JMYXllckNsaWVudDsK
ICAgICBIYXNoU2V0PFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqPiBtX3BhaW50UmVjdExheWVyczsg
Ly8gSWRlYWxseSB0aGlzIHdvdWxkIGJlIEhhc2hTZXQ8c3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNz
TGF5ZXI+PiBidXQgdGhhdCBkb2Vzbid0IHdvcmsgeWV0LiB3ZWJraXQub3JnL2IvMTM2MTY2CiB9
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9t
YWMvV2ViRWRpdG9yQ2xpZW50TWFjLm1tIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJD
b3JlU3VwcG9ydC9tYWMvV2ViRWRpdG9yQ2xpZW50TWFjLm1tCmluZGV4IGYzNmRkYmMuLjQ5ZDU5
YmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQv
bWFjL1dlYkVkaXRvckNsaWVudE1hYy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYkNvcmVTdXBwb3J0L21hYy9XZWJFZGl0b3JDbGllbnRNYWMubW0KQEAgLTQ0LDYgKzQ0LDcg
QEAKICNpbXBvcnQgPFdlYkNvcmUvRm9jdXNDb250cm9sbGVyLmg+CiAjaW1wb3J0IDxXZWJDb3Jl
L0ZyYW1lLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0tleWJvYXJkRXZlbnQuaD4KKyNpbXBvcnQgPFdl
YkNvcmUvTWFpbkZyYW1lLmg+CiAjaW1wb3J0IDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+CiAj
aW1wb3J0IDxXZWJDb3JlL1BhZ2UuaD4KICNpbXBvcnQgPFdlYkNvcmUvV2ViQ29yZU5TVVJMRXh0
cmFzLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJh
d2luZ0FyZWEuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJl
YS5oCmluZGV4IGY3NGI0ZGUuLmRiM2I4M2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYS5oCkBAIC00NSw2ICs0NSw3IEBAIGNsYXNzIE1lc3Nh
Z2VEZWNvZGVyOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBEaXNwbGF5UmVmcmVzaE1v
bml0b3I7CitjbGFzcyBGcmFtZTsKIGNsYXNzIEZyYW1lVmlldzsKIGNsYXNzIEdyYXBoaWNzTGF5
ZXI7CiBjbGFzcyBHcmFwaGljc0xheWVyRmFjdG9yeTsKQEAgLTEyMCw2ICsxMjEsOCBAQCBwdWJs
aWM6CiAKICAgICB2aXJ0dWFsIGJvb2wgYWRqdXN0TGF5ZXJGbHVzaFRocm90dGxpbmcoV2ViQ29y
ZTo6TGF5ZXJGbHVzaFRocm90dGxlU3RhdGU6OkZsYWdzKSB7IHJldHVybiBmYWxzZTsgfQogCisg
ICAgdmlydHVhbCB2b2lkIGF0dGFjaFZpZXdPdmVybGF5R3JhcGhpY3NMYXllcihXZWJDb3JlOjpG
cmFtZSosIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKSB7IH0KKwogcHJvdGVjdGVkOgogICAgIERy
YXdpbmdBcmVhKERyYXdpbmdBcmVhVHlwZSwgV2ViUGFnZSYpOwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuY3BwIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNwcAppbmRleCAxZTM0
NjJiLi45OGFjNmFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvRmluZENvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9GaW5kQ29udHJvbGxlci5jcHAKQEAgLTQwLDYgKzQwLDggQEAKICNpbmNsdWRlIDxXZWJD
b3JlL0dyYXBoaWNzQ29udGV4dC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvTWFpbkZyYW1lLmg+CiAj
aW5jbHVkZSA8V2ViQ29yZS9QYWdlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9QYWdlT3ZlcmxheUNv
bnRyb2xsZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtTW91c2VFdmVudC5oPgogI2lu
Y2x1ZGUgPFdlYkNvcmUvUGx1Z2luRG9jdW1lbnQuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNv
cmU7CkBAIC02Myw3ICs2NSw3IEBAIHN0YXRpYyBXZWJDb3JlOjpGaW5kT3B0aW9ucyBjb3JlKEZp
bmRPcHRpb25zIG9wdGlvbnMpCiAKIEZpbmRDb250cm9sbGVyOjpGaW5kQ29udHJvbGxlcihXZWJQ
YWdlKiB3ZWJQYWdlKQogICAgIDogbV93ZWJQYWdlKHdlYlBhZ2UpCi0gICAgLCBtX2ZpbmRQYWdl
T3ZlcmxheSgwKQorICAgICwgbV9maW5kUGFnZU92ZXJsYXkobnVsbHB0cikKICAgICAsIG1faXNT
aG93aW5nRmluZEluZGljYXRvcihmYWxzZSkKICAgICAsIG1fZm91bmRTdHJpbmdNYXRjaEluZGV4
KC0xKQogewpAQCAtMTgyLDEyICsxODQsMTIgQEAgdm9pZCBGaW5kQ29udHJvbGxlcjo6dXBkYXRl
RmluZFVJQWZ0ZXJQYWdlU2Nyb2xsKGJvb2wgZm91bmQsIGNvbnN0IFN0cmluZyYgc3RyaW4KIAog
ICAgIGlmICghc2hvdWxkU2hvd092ZXJsYXkpIHsKICAgICAgICAgaWYgKG1fZmluZFBhZ2VPdmVy
bGF5KQotICAgICAgICAgICAgbV93ZWJQYWdlLT51bmluc3RhbGxQYWdlT3ZlcmxheShtX2ZpbmRQ
YWdlT3ZlcmxheSwgUGFnZU92ZXJsYXk6OkZhZGVNb2RlOjpGYWRlKTsKKyAgICAgICAgICAgIG1f
d2ViUGFnZS0+bWFpbkZyYW1lKCktPnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLnVuaW5zdGFsbFBh
Z2VPdmVybGF5KG1fZmluZFBhZ2VPdmVybGF5LCBQYWdlT3ZlcmxheTo6RmFkZU1vZGU6OkZhZGUp
OwogICAgIH0gZWxzZSB7CiAgICAgICAgIGlmICghbV9maW5kUGFnZU92ZXJsYXkpIHsKLSAgICAg
ICAgICAgIFJlZlB0cjxQYWdlT3ZlcmxheT4gZmluZFBhZ2VPdmVybGF5ID0gUGFnZU92ZXJsYXk6
OmNyZWF0ZSh0aGlzKTsKKyAgICAgICAgICAgIFJlZlB0cjxQYWdlT3ZlcmxheT4gZmluZFBhZ2VP
dmVybGF5ID0gUGFnZU92ZXJsYXk6OmNyZWF0ZSgqdGhpcyk7CiAgICAgICAgICAgICBtX2ZpbmRQ
YWdlT3ZlcmxheSA9IGZpbmRQYWdlT3ZlcmxheS5nZXQoKTsKLSAgICAgICAgICAgIG1fd2ViUGFn
ZS0+aW5zdGFsbFBhZ2VPdmVybGF5KGZpbmRQYWdlT3ZlcmxheS5yZWxlYXNlKCksIFBhZ2VPdmVy
bGF5OjpGYWRlTW9kZTo6RmFkZSk7CisgICAgICAgICAgICBtX3dlYlBhZ2UtPm1haW5GcmFtZSgp
LT5wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKS5pbnN0YWxsUGFnZU92ZXJsYXkoZmluZFBhZ2VPdmVy
bGF5LnJlbGVhc2UoKSwgUGFnZU92ZXJsYXk6OkZhZGVNb2RlOjpGYWRlKTsKICAgICAgICAgfQog
ICAgICAgICBtX2ZpbmRQYWdlT3ZlcmxheS0+c2V0TmVlZHNEaXNwbGF5KCk7CiAgICAgfQpAQCAt
MzMwLDcgKzMzMiw3IEBAIHZvaWQgRmluZENvbnRyb2xsZXI6OmhpZGVGaW5kVUkoKQogewogICAg
IG1fZmluZE1hdGNoZXMuY2xlYXIoKTsKICAgICBpZiAobV9maW5kUGFnZU92ZXJsYXkpCi0gICAg
ICAgIG1fd2ViUGFnZS0+dW5pbnN0YWxsUGFnZU92ZXJsYXkobV9maW5kUGFnZU92ZXJsYXksIFBh
Z2VPdmVybGF5OjpGYWRlTW9kZTo6RmFkZSk7CisgICAgICAgIG1fd2ViUGFnZS0+bWFpbkZyYW1l
KCktPnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLnVuaW5zdGFsbFBhZ2VPdmVybGF5KG1fZmluZFBh
Z2VPdmVybGF5LCBQYWdlT3ZlcmxheTo6RmFkZU1vZGU6OkZhZGUpOwogCiAgICAgUGx1Z2luVmll
dyogcGx1Z2luVmlldyA9IHBsdWdpblZpZXdGb3JGcmFtZShtX3dlYlBhZ2UtPm1haW5GcmFtZSgp
KTsKICAgICAKQEAgLTQzOSwyMCArNDQxLDIwIEBAIFZlY3RvcjxJbnRSZWN0PiBGaW5kQ29udHJv
bGxlcjo6cmVjdHNGb3JUZXh0TWF0Y2hlcygpCiAgICAgcmV0dXJuIHJlY3RzOwogfQogCi12b2lk
IEZpbmRDb250cm9sbGVyOjpwYWdlT3ZlcmxheURlc3Ryb3llZChQYWdlT3ZlcmxheSopCit2b2lk
IEZpbmRDb250cm9sbGVyOjpwYWdlT3ZlcmxheURlc3Ryb3llZChQYWdlT3ZlcmxheSYpCiB7CiB9
CiAKLXZvaWQgRmluZENvbnRyb2xsZXI6OndpbGxNb3ZlVG9XZWJQYWdlKFBhZ2VPdmVybGF5Kiwg
V2ViUGFnZSogd2ViUGFnZSkKK3ZvaWQgRmluZENvbnRyb2xsZXI6OndpbGxNb3ZlVG9QYWdlKFBh
Z2VPdmVybGF5JiwgUGFnZSogcGFnZSkKIHsKLSAgICBpZiAod2ViUGFnZSkKKyAgICBpZiAocGFn
ZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgQVNTRVJUKG1fZmluZFBhZ2VPdmVybGF5KTsKICAg
ICBtX2ZpbmRQYWdlT3ZlcmxheSA9IDA7CiB9CiAgICAgCi12b2lkIEZpbmRDb250cm9sbGVyOjpk
aWRNb3ZlVG9XZWJQYWdlKFBhZ2VPdmVybGF5KiwgV2ViUGFnZSopCit2b2lkIEZpbmRDb250cm9s
bGVyOjpkaWRNb3ZlVG9QYWdlKFBhZ2VPdmVybGF5JiwgUGFnZSopCiB7CiB9CiAKQEAgLTQ2OCw3
ICs0NzAsNyBAQCBjb25zdCBmbG9hdCBzaGFkb3dCbHVyUmFkaXVzID0gMTsKIGNvbnN0IGZsb2F0
IHNoYWRvd0NvbG9yQWxwaGEgPSAwLjU7CiAjZW5kaWYKIAotdm9pZCBGaW5kQ29udHJvbGxlcjo6
ZHJhd1JlY3QoUGFnZU92ZXJsYXkqLCBHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwg
Y29uc3QgSW50UmVjdCYgZGlydHlSZWN0KQordm9pZCBGaW5kQ29udHJvbGxlcjo6ZHJhd1JlY3Qo
UGFnZU92ZXJsYXkmLCBHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgSW50
UmVjdCYgZGlydHlSZWN0KQogewogICAgIENvbG9yIG92ZXJsYXlCYWNrZ3JvdW5kQ29sb3IoMC4x
ZiwgMC4xZiwgMC4xZiwgMC4yNWYpOwogCkBAIC01MDYsOSArNTA4LDkgQEAgdm9pZCBGaW5kQ29u
dHJvbGxlcjo6ZHJhd1JlY3QoUGFnZU92ZXJsYXkqLCBHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNz
Q29udGV4dCwgY28KICAgICB9CiB9CiAKLWJvb2wgRmluZENvbnRyb2xsZXI6Om1vdXNlRXZlbnQo
UGFnZU92ZXJsYXkqLCBjb25zdCBXZWJNb3VzZUV2ZW50JiBtb3VzZUV2ZW50KQorYm9vbCBGaW5k
Q29udHJvbGxlcjo6bW91c2VFdmVudChQYWdlT3ZlcmxheSYsIGNvbnN0IFBsYXRmb3JtTW91c2VF
dmVudCYgbW91c2VFdmVudCkKIHsKLSAgICBpZiAobW91c2VFdmVudC50eXBlKCkgPT0gV2ViRXZl
bnQ6Ok1vdXNlRG93bikKKyAgICBpZiAobW91c2VFdmVudC50eXBlKCkgPT0gUGxhdGZvcm1FdmVu
dDo6TW91c2VQcmVzc2VkKQogICAgICAgICBoaWRlRmluZFVJKCk7CiAKICAgICByZXR1cm4gZmFs
c2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENv
bnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJv
bGxlci5oCmluZGV4IDI4MDYzZmMuLjkwNWVkMWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5oCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5oCkBAIC0yNiwxMCArMjYsMTAgQEAK
ICNpZm5kZWYgRmluZENvbnRyb2xsZXJfaAogI2RlZmluZSBGaW5kQ29udHJvbGxlcl9oCiAKLSNp
bmNsdWRlICJQYWdlT3ZlcmxheS5oIgogI2luY2x1ZGUgIlNoYXJlYWJsZUJpdG1hcC5oIgogI2lu
Y2x1ZGUgIldlYkZpbmRPcHRpb25zLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9JbnRSZWN0Lmg+Cisj
aW5jbHVkZSA8V2ViQ29yZS9QYWdlT3ZlcmxheS5oPgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+
CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgpA
QCAtNDUsMTAgKzQ1LDkgQEAgY2xhc3MgUmFuZ2U7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1j
bGFzcyBQYWdlT3ZlcmxheTsKIGNsYXNzIFdlYlBhZ2U7CiAKLWNsYXNzIEZpbmRDb250cm9sbGVy
IDogcHJpdmF0ZSBQYWdlT3ZlcmxheTo6Q2xpZW50IHsKK2NsYXNzIEZpbmRDb250cm9sbGVyIDog
cHJpdmF0ZSBXZWJDb3JlOjpQYWdlT3ZlcmxheTo6Q2xpZW50IHsKICAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShGaW5kQ29udHJvbGxlcik7CiAKIHB1YmxpYzoKQEAgLTcxLDExICs3MCwxMSBAQCBw
dWJsaWM6CiAKIHByaXZhdGU6CiAgICAgLy8gUGFnZU92ZXJsYXk6OkNsaWVudC4KLSAgICB2aXJ0
dWFsIHZvaWQgcGFnZU92ZXJsYXlEZXN0cm95ZWQoUGFnZU92ZXJsYXkqKTsKLSAgICB2aXJ0dWFs
IHZvaWQgd2lsbE1vdmVUb1dlYlBhZ2UoUGFnZU92ZXJsYXkqLCBXZWJQYWdlKik7Ci0gICAgdmly
dHVhbCB2b2lkIGRpZE1vdmVUb1dlYlBhZ2UoUGFnZU92ZXJsYXkqLCBXZWJQYWdlKik7Ci0gICAg
dmlydHVhbCBib29sIG1vdXNlRXZlbnQoUGFnZU92ZXJsYXkqLCBjb25zdCBXZWJNb3VzZUV2ZW50
Jik7Ci0gICAgdmlydHVhbCB2b2lkIGRyYXdSZWN0KFBhZ2VPdmVybGF5KiwgV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0JiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgZGlydHlSZWN0KTsKKyAgICB2
aXJ0dWFsIHZvaWQgcGFnZU92ZXJsYXlEZXN0cm95ZWQoV2ViQ29yZTo6UGFnZU92ZXJsYXkmKTsK
KyAgICB2aXJ0dWFsIHZvaWQgd2lsbE1vdmVUb1BhZ2UoV2ViQ29yZTo6UGFnZU92ZXJsYXkmLCBX
ZWJDb3JlOjpQYWdlKik7CisgICAgdmlydHVhbCB2b2lkIGRpZE1vdmVUb1BhZ2UoV2ViQ29yZTo6
UGFnZU92ZXJsYXkmLCBXZWJDb3JlOjpQYWdlKik7CisgICAgdmlydHVhbCBib29sIG1vdXNlRXZl
bnQoV2ViQ29yZTo6UGFnZU92ZXJsYXkmLCBjb25zdCBXZWJDb3JlOjpQbGF0Zm9ybU1vdXNlRXZl
bnQmKTsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd1JlY3QoV2ViQ29yZTo6UGFnZU92ZXJsYXkmLCBX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBkaXJ0eVJl
Y3QpOwogCiAgICAgVmVjdG9yPFdlYkNvcmU6OkludFJlY3Q+IHJlY3RzRm9yVGV4dE1hdGNoZXMo
KTsKICAgICBib29sIGdldEZpbmRJbmRpY2F0b3JCaXRtYXBBbmRSZWN0KFdlYkNvcmU6OkZyYW1l
JiwgU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUmLCBXZWJDb3JlOjpJbnRSZWN0JiBzZWxlY3Rpb25S
ZWN0KTsKQEAgLTg4LDcgKzg3LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGRpZEhpZGVGaW5kSW5k
aWNhdG9yKCk7CiAKICAgICBXZWJQYWdlKiBtX3dlYlBhZ2U7Ci0gICAgUGFnZU92ZXJsYXkqIG1f
ZmluZFBhZ2VPdmVybGF5OworICAgIFdlYkNvcmU6OlBhZ2VPdmVybGF5KiBtX2ZpbmRQYWdlT3Zl
cmxheTsKIAogICAgIC8vIFdoZXRoZXIgdGhlIFVJIHByb2Nlc3MgaXMgc2hvd2luZyB0aGUgZmlu
ZCBpbmRpY2F0b3IuIE5vdGUgdGhhdCB0aGlzIGNhbiBiZSB0cnVlIGV2ZW4gaWYKICAgICAvLyB0
aGUgZmluZCBpbmRpY2F0b3IgaXNuJ3Qgc2hvd2luZywgYnV0IGl0IHdpbGwgbmV2ZXIgYmUgZmFs
c2Ugd2hlbiBpdCBpcyBzaG93aW5nLgpAQCAtOTksNyArOTgsNyBAQCBwcml2YXRlOgogICAgIGlu
dCBtX2ZvdW5kU3RyaW5nTWF0Y2hJbmRleDsKIAogI2lmIFBMQVRGT1JNKElPUykKLSAgICBSZWZQ
dHI8UGFnZU92ZXJsYXk+IG1fZmluZEluZGljYXRvck92ZXJsYXk7CisgICAgUmVmUHRyPFdlYkNv
cmU6OlBhZ2VPdmVybGF5PiBtX2ZpbmRJbmRpY2F0b3JPdmVybGF5OwogICAgIHN0ZDo6dW5pcXVl
X3B0cjxGaW5kSW5kaWNhdG9yT3ZlcmxheUNsaWVudElPUz4gbV9maW5kSW5kaWNhdG9yT3Zlcmxh
eUNsaWVudDsKICNlbmRpZgogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9MYXllclRyZWVIb3N0LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvTGF5ZXJUcmVlSG9zdC5oCmluZGV4IDNmZDQ5NTQuLjY0ZWVjNTEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVIb3N0LmgKKysrIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUhvc3QuaApAQCAtNDcs
NyArNDcsNiBAQCBjbGFzcyBHcmFwaGljc0xheWVyRmFjdG9yeTsKIAogbmFtZXNwYWNlIFdlYktp
dCB7CiAKLWNsYXNzIFBhZ2VPdmVybGF5OwogY2xhc3MgVXBkYXRlSW5mbzsKIGNsYXNzIFdlYlBh
Z2U7CiAKQEAgLTcyLDExICs3MSw2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZGV2aWNl
T3JQYWdlU2NhbGVGYWN0b3JDaGFuZ2VkKCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBwYWdlQmFj
a2dyb3VuZFRyYW5zcGFyZW5jeUNoYW5nZWQoKSA9IDA7CiAKLSAgICB2aXJ0dWFsIHZvaWQgZGlk
SW5zdGFsbFBhZ2VPdmVybGF5KFBhZ2VPdmVybGF5KikgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGRp
ZFVuaW5zdGFsbFBhZ2VPdmVybGF5KFBhZ2VPdmVybGF5KikgeyB9Ci0gICAgdmlydHVhbCB2b2lk
IHNldFBhZ2VPdmVybGF5TmVlZHNEaXNwbGF5KFBhZ2VPdmVybGF5KiwgY29uc3QgV2ViQ29yZTo6
SW50UmVjdCYpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBzZXRQYWdlT3ZlcmxheU9wYWNpdHkoUGFn
ZU92ZXJsYXkqLCBmbG9hdCkgeyB9Ci0KICAgICB2aXJ0dWFsIHZvaWQgcGF1c2VSZW5kZXJpbmco
KSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgcmVzdW1lUmVuZGVyaW5nKCkgeyB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9QYWdlT3ZlcmxheS5jcHAgYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvUGFnZU92ZXJsYXkuY3BwCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZDg4MWI2Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9QYWdlT3ZlcmxheS5jcHAKKysrIC9kZXYvbnVsbApAQCAt
MSwyNTEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRl
ICJQYWdlT3ZlcmxheS5oIgotCi0jaW5jbHVkZSAiV2ViUGFnZS5oIgotI2luY2x1ZGUgIldlYlBy
b2Nlc3MuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lVmlldy5oPgotI2luY2x1ZGUgPFdlYkNv
cmUvR3JhcGhpY3NDb250ZXh0Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9NYWluRnJhbWUuaD4KLSNp
bmNsdWRlIDxXZWJDb3JlL1BhZ2UuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1Njcm9sbGJhclRoZW1l
Lmg+Ci0jaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOwotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotc3RhdGljIGNvbnN0IGRvdWJsZSBmYWRlQW5p
bWF0aW9uRHVyYXRpb24gPSAwLjI7Ci1zdGF0aWMgY29uc3QgZG91YmxlIGZhZGVBbmltYXRpb25G
cmFtZVJhdGUgPSAzMDsKLQotUGFzc1JlZlB0cjxQYWdlT3ZlcmxheT4gUGFnZU92ZXJsYXk6OmNy
ZWF0ZShDbGllbnQqIGNsaWVudCwgT3ZlcmxheVR5cGUgb3ZlcmxheVR5cGUpCi17Ci0gICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBQYWdlT3ZlcmxheShjbGllbnQsIG92ZXJsYXlUeXBlKSk7Ci19Ci0K
LVBhZ2VPdmVybGF5OjpQYWdlT3ZlcmxheShDbGllbnQqIGNsaWVudCwgT3ZlcmxheVR5cGUgb3Zl
cmxheVR5cGUpCi0gICAgOiBtX2NsaWVudChjbGllbnQpCi0gICAgLCBtX3dlYlBhZ2UobnVsbHB0
cikKLSAgICAsIG1fZmFkZUFuaW1hdGlvblRpbWVyKFJ1bkxvb3A6Om1haW4oKSwgdGhpcywgJlBh
Z2VPdmVybGF5OjpmYWRlQW5pbWF0aW9uVGltZXJGaXJlZCkKLSAgICAsIG1fZmFkZUFuaW1hdGlv
blN0YXJ0VGltZSgwKQotICAgICwgbV9mYWRlQW5pbWF0aW9uRHVyYXRpb24oZmFkZUFuaW1hdGlv
bkR1cmF0aW9uKQotICAgICwgbV9mYWRlQW5pbWF0aW9uVHlwZShOb0FuaW1hdGlvbikKLSAgICAs
IG1fZnJhY3Rpb25GYWRlZEluKDEpCi0gICAgLCBtX292ZXJsYXlUeXBlKG92ZXJsYXlUeXBlKQot
ICAgICwgbV9iYWNrZ3JvdW5kQ29sb3IoQ29sb3I6OnRyYW5zcGFyZW50KQotewotfQotCi1QYWdl
T3ZlcmxheTo6flBhZ2VPdmVybGF5KCkKLXsKLX0KLQotSW50UmVjdCBQYWdlT3ZlcmxheTo6Ym91
bmRzKCkgY29uc3QKLXsKLSAgICBpZiAoIW1fb3ZlcnJpZGVGcmFtZS5pc0VtcHR5KCkpCi0gICAg
ICAgIHJldHVybiBJbnRSZWN0KEludFBvaW50KCksIG1fb3ZlcnJpZGVGcmFtZS5zaXplKCkpOwot
Ci0gICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBtX3dlYlBhZ2UtPm1haW5GcmFtZVZpZXcoKTsK
LQotICAgIHN3aXRjaCAobV9vdmVybGF5VHlwZSkgewotICAgIGNhc2UgT3ZlcmxheVR5cGU6OlZp
ZXc6IHsKLSAgICAgICAgaW50IHdpZHRoID0gZnJhbWVWaWV3LT53aWR0aCgpOwotICAgICAgICBp
bnQgaGVpZ2h0ID0gZnJhbWVWaWV3LT5oZWlnaHQoKTsKLQotICAgICAgICBpZiAoIVNjcm9sbGJh
clRoZW1lOjp0aGVtZSgpLT51c2VzT3ZlcmxheVNjcm9sbGJhcnMoKSkgewotICAgICAgICAgICAg
aWYgKGZyYW1lVmlldy0+dmVydGljYWxTY3JvbGxiYXIoKSkKLSAgICAgICAgICAgICAgICB3aWR0
aCAtPSBmcmFtZVZpZXctPnZlcnRpY2FsU2Nyb2xsYmFyKCktPndpZHRoKCk7Ci0gICAgICAgICAg
ICBpZiAoZnJhbWVWaWV3LT5ob3Jpem9udGFsU2Nyb2xsYmFyKCkpCi0gICAgICAgICAgICAgICAg
aGVpZ2h0IC09IGZyYW1lVmlldy0+aG9yaXpvbnRhbFNjcm9sbGJhcigpLT5oZWlnaHQoKTsKLSAg
ICAgICAgfQotICAgICAgICByZXR1cm4gSW50UmVjdCgwLCAwLCB3aWR0aCwgaGVpZ2h0KTsKLSAg
ICB9Ci0gICAgY2FzZSBPdmVybGF5VHlwZTo6RG9jdW1lbnQ6Ci0gICAgICAgIHJldHVybiBJbnRS
ZWN0KEludFBvaW50KCksIGZyYW1lVmlldy0+Y29udGVudHNTaXplKCkpOwotICAgIH07Ci0KLSAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gSW50UmVjdChJbnRQb2ludCgpLCBm
cmFtZVZpZXctPmNvbnRlbnRzU2l6ZSgpKTsKLX0KLQotSW50UmVjdCBQYWdlT3ZlcmxheTo6ZnJh
bWUoKSBjb25zdAotewotICAgIGlmICghbV9vdmVycmlkZUZyYW1lLmlzRW1wdHkoKSkKLSAgICAg
ICAgcmV0dXJuIG1fb3ZlcnJpZGVGcmFtZTsKLQotICAgIHJldHVybiBib3VuZHMoKTsKLX0KLQot
dm9pZCBQYWdlT3ZlcmxheTo6c2V0RnJhbWUoSW50UmVjdCBmcmFtZSkKLXsKLSAgICBpZiAobV9v
dmVycmlkZUZyYW1lID09IGZyYW1lKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX292ZXJyaWRl
RnJhbWUgPSBmcmFtZTsKLQotICAgIGlmIChtX3dlYlBhZ2UpCi0gICAgICAgIG1fd2ViUGFnZS0+
cGFnZU92ZXJsYXlDb250cm9sbGVyKCkuZGlkQ2hhbmdlT3ZlcmxheUZyYW1lKCp0aGlzKTsKLX0K
LQotdm9pZCBQYWdlT3ZlcmxheTo6c2V0QmFja2dyb3VuZENvbG9yKFJHQkEzMiBiYWNrZ3JvdW5k
Q29sb3IpCi17Ci0gICAgaWYgKG1fYmFja2dyb3VuZENvbG9yID09IGJhY2tncm91bmRDb2xvcikK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9iYWNrZ3JvdW5kQ29sb3IgPSBiYWNrZ3JvdW5kQ29s
b3I7Ci0KLSAgICBpZiAobV93ZWJQYWdlKQotICAgICAgICBtX3dlYlBhZ2UtPnBhZ2VPdmVybGF5
Q29udHJvbGxlcigpLmRpZENoYW5nZU92ZXJsYXlCYWNrZ3JvdW5kQ29sb3IoKnRoaXMpOwotfQot
Ci12b2lkIFBhZ2VPdmVybGF5OjpzZXRQYWdlKFdlYlBhZ2UqIHdlYlBhZ2UpCi17Ci0gICAgbV9j
bGllbnQtPndpbGxNb3ZlVG9XZWJQYWdlKHRoaXMsIHdlYlBhZ2UpOwotICAgIG1fd2ViUGFnZSA9
IHdlYlBhZ2U7Ci0gICAgbV9jbGllbnQtPmRpZE1vdmVUb1dlYlBhZ2UodGhpcywgd2ViUGFnZSk7
Ci0KLSAgICBtX2ZhZGVBbmltYXRpb25UaW1lci5zdG9wKCk7Ci19Ci0KLXZvaWQgUGFnZU92ZXJs
YXk6OnNldE5lZWRzRGlzcGxheShjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpCi17Ci0gICAgaWYg
KCFtX3dlYlBhZ2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fd2ViUGFnZS0+cGFnZU92ZXJs
YXlDb250cm9sbGVyKCkuc2V0UGFnZU92ZXJsYXlPcGFjaXR5KCp0aGlzLCBtX2ZyYWN0aW9uRmFk
ZWRJbik7Ci0gICAgbV93ZWJQYWdlLT5wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKS5zZXRQYWdlT3Zl
cmxheU5lZWRzRGlzcGxheSgqdGhpcywgZGlydHlSZWN0KTsKLX0KLQotdm9pZCBQYWdlT3Zlcmxh
eTo6c2V0TmVlZHNEaXNwbGF5KCkKLXsKLSAgICBzZXROZWVkc0Rpc3BsYXkoYm91bmRzKCkpOwot
fQotCi12b2lkIFBhZ2VPdmVybGF5OjpkcmF3UmVjdChHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNz
Q29udGV4dCwgY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KQotewotICAgIC8vIElmIHRoZSBkaXJ0
eSByZWN0IGlzIG91dHNpZGUgdGhlIGJvdW5kcywgaWdub3JlIGl0LgotICAgIEludFJlY3QgcGFp
bnRSZWN0ID0gaW50ZXJzZWN0aW9uKGRpcnR5UmVjdCwgYm91bmRzKCkpOwotICAgIGlmIChwYWlu
dFJlY3QuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBHcmFwaGljc0NvbnRleHRT
dGF0ZVNhdmVyIHN0YXRlU2F2ZXIoZ3JhcGhpY3NDb250ZXh0KTsKLSAgICBtX2NsaWVudC0+ZHJh
d1JlY3QodGhpcywgZ3JhcGhpY3NDb250ZXh0LCBwYWludFJlY3QpOwotfQotICAgIAotYm9vbCBQ
YWdlT3ZlcmxheTo6bW91c2VFdmVudChjb25zdCBXZWJNb3VzZUV2ZW50JiBtb3VzZUV2ZW50KQot
ewotICAgIEludFBvaW50IG1vdXNlUG9zaXRpb25Jbk92ZXJsYXlDb29yZGluYXRlcyhtb3VzZUV2
ZW50LnBvc2l0aW9uKCkpOwotCi0gICAgaWYgKG1fb3ZlcmxheVR5cGUgPT0gUGFnZU92ZXJsYXk6
Ok92ZXJsYXlUeXBlOjpEb2N1bWVudCkKLSAgICAgICAgbW91c2VQb3NpdGlvbkluT3ZlcmxheUNv
b3JkaW5hdGVzID0gbV93ZWJQYWdlLT5jb3JlUGFnZSgpLT5tYWluRnJhbWUoKS52aWV3KCktPnJv
b3RWaWV3VG9Db250ZW50cyhtb3VzZVBvc2l0aW9uSW5PdmVybGF5Q29vcmRpbmF0ZXMpOwotCi0g
ICAgLy8gSWdub3JlIGV2ZW50cyBvdXRzaWRlIHRoZSBib3VuZHMuCi0gICAgaWYgKCFib3VuZHMo
KS5jb250YWlucyhtb3VzZVBvc2l0aW9uSW5PdmVybGF5Q29vcmRpbmF0ZXMpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gbV9jbGllbnQtPm1vdXNlRXZlbnQodGhpcywgbW91
c2VFdmVudCk7Ci19Ci0KLXZvaWQgUGFnZU92ZXJsYXk6OmRpZFNjcm9sbEZyYW1lKEZyYW1lKiBm
cmFtZSkKLXsKLSAgICBtX2NsaWVudC0+ZGlkU2Nyb2xsRnJhbWUodGhpcywgZnJhbWUpOwotfQot
Ci1XS1R5cGVSZWYgUGFnZU92ZXJsYXk6OmNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWUo
V0tTdHJpbmdSZWYgYXR0cmlidXRlLCBXS1R5cGVSZWYgcGFyYW1ldGVyKQotewotICAgIHJldHVy
biBtX2NsaWVudC0+Y29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZSh0aGlzLCBhdHRyaWJ1
dGUsIHBhcmFtZXRlcik7Ci19Ci0KLVdLQXJyYXlSZWYgUGFnZU92ZXJsYXk6OmNvcHlBY2Nlc3Np
YmlsaXR5QXR0cmlidXRlTmFtZXMoYm9vbCBwYXJhbWV0ZXJpemVkTmFtZXMpCi17Ci0gICAgcmV0
dXJuIG1fY2xpZW50LT5jb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZU5hbWVzKHRoaXMsIHBhcmFt
ZXRlcml6ZWROYW1lcyk7Ci19Ci0KLXZvaWQgUGFnZU92ZXJsYXk6OnN0YXJ0RmFkZUluQW5pbWF0
aW9uKCkKLXsKLSAgICBtX2ZyYWN0aW9uRmFkZWRJbiA9IDA7Ci0gICAgbV9mYWRlQW5pbWF0aW9u
VHlwZSA9IEZhZGVJbkFuaW1hdGlvbjsKLQotICAgIHN0YXJ0RmFkZUFuaW1hdGlvbigpOwotfQot
Ci12b2lkIFBhZ2VPdmVybGF5OjpzdGFydEZhZGVPdXRBbmltYXRpb24oKQotewotICAgIG1fZnJh
Y3Rpb25GYWRlZEluID0gMTsKLSAgICBtX2ZhZGVBbmltYXRpb25UeXBlID0gRmFkZU91dEFuaW1h
dGlvbjsKLQotICAgIHN0YXJ0RmFkZUFuaW1hdGlvbigpOwotfQotCi12b2lkIFBhZ2VPdmVybGF5
OjpzdG9wRmFkZU91dEFuaW1hdGlvbigpCi17Ci0gICAgbV9mcmFjdGlvbkZhZGVkSW4gPSAxLjA7
Ci0gICAgbV9mYWRlQW5pbWF0aW9uVGltZXIuc3RvcCgpOwotfQotCi12b2lkIFBhZ2VPdmVybGF5
OjpzdGFydEZhZGVBbmltYXRpb24oKQotewotICAgIG1fZmFkZUFuaW1hdGlvblN0YXJ0VGltZSA9
IGN1cnJlbnRUaW1lKCk7Ci0gICAgbV9mYWRlQW5pbWF0aW9uVGltZXIuc3RhcnRSZXBlYXRpbmco
MSAvIGZhZGVBbmltYXRpb25GcmFtZVJhdGUpOwotfQotCi12b2lkIFBhZ2VPdmVybGF5OjpmYWRl
QW5pbWF0aW9uVGltZXJGaXJlZCgpCi17Ci0gICAgZmxvYXQgYW5pbWF0aW9uUHJvZ3Jlc3MgPSAo
Y3VycmVudFRpbWUoKSAtIG1fZmFkZUFuaW1hdGlvblN0YXJ0VGltZSkgLyBtX2ZhZGVBbmltYXRp
b25EdXJhdGlvbjsKLQotICAgIGlmIChhbmltYXRpb25Qcm9ncmVzcyA+PSAxLjApCi0gICAgICAg
IGFuaW1hdGlvblByb2dyZXNzID0gMS4wOwotCi0gICAgZG91YmxlIHNpbmUgPSBzaW4ocGlPdmVy
VHdvRmxvYXQgKiBhbmltYXRpb25Qcm9ncmVzcyk7Ci0gICAgZmxvYXQgZmFkZUFuaW1hdGlvblZh
bHVlID0gc2luZSAqIHNpbmU7Ci0KLSAgICBtX2ZyYWN0aW9uRmFkZWRJbiA9IChtX2ZhZGVBbmlt
YXRpb25UeXBlID09IEZhZGVJbkFuaW1hdGlvbikgPyBmYWRlQW5pbWF0aW9uVmFsdWUgOiAxIC0g
ZmFkZUFuaW1hdGlvblZhbHVlOwotICAgIG1fd2ViUGFnZS0+cGFnZU92ZXJsYXlDb250cm9sbGVy
KCkuc2V0UGFnZU92ZXJsYXlPcGFjaXR5KCp0aGlzLCBtX2ZyYWN0aW9uRmFkZWRJbik7Ci0KLSAg
ICBpZiAoYW5pbWF0aW9uUHJvZ3Jlc3MgPT0gMS4wKSB7Ci0gICAgICAgIG1fZmFkZUFuaW1hdGlv
blRpbWVyLnN0b3AoKTsKLQotICAgICAgICBib29sIHdhc0ZhZGluZ091dCA9IG1fZmFkZUFuaW1h
dGlvblR5cGUgPT0gRmFkZU91dEFuaW1hdGlvbjsKLSAgICAgICAgbV9mYWRlQW5pbWF0aW9uVHlw
ZSA9IE5vQW5pbWF0aW9uOwotCi0gICAgICAgIC8vIElmIHRoaXMgd2FzIGEgZmFkZSBvdXQsIGdv
IGFoZWFkIGFuZCB1bmluc3RhbGwgdGhlIHBhZ2Ugb3ZlcmxheS4KLSAgICAgICAgaWYgKHdhc0Zh
ZGluZ091dCkKLSAgICAgICAgICAgIG1fd2ViUGFnZS0+dW5pbnN0YWxsUGFnZU92ZXJsYXkodGhp
cywgUGFnZU92ZXJsYXk6OkZhZGVNb2RlOjpEb05vdEZhZGUpOwotICAgIH0KLX0KLQotdm9pZCBQ
YWdlT3ZlcmxheTo6Y2xlYXIoKQotewotICAgIG1fd2ViUGFnZS0+cGFnZU92ZXJsYXlDb250cm9s
bGVyKCkuY2xlYXJQYWdlT3ZlcmxheSgqdGhpcyk7Ci19Ci0KLVdlYkNvcmU6OkdyYXBoaWNzTGF5
ZXIqIFBhZ2VPdmVybGF5OjpsYXllcigpCi17Ci0gICAgcmV0dXJuIG1fd2ViUGFnZS0+cGFnZU92
ZXJsYXlDb250cm9sbGVyKCkubGF5ZXJGb3JPdmVybGF5KCp0aGlzKTsKLX0KLQotfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvUGFnZU92ZXJsYXkuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9QYWdl
T3ZlcmxheS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMjI1ZjBkLi4wMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9QYWdlT3ZlcmxheS5oCisr
KyAvZGV2L251bGwKQEAgLTEsMTM3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFBhZ2VP
dmVybGF5X2gKLSNkZWZpbmUgUGFnZU92ZXJsYXlfaAotCi0jaW5jbHVkZSAiQVBJT2JqZWN0Lmgi
Ci0jaW5jbHVkZSAiV0tCYXNlLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9Db2xvci5oPgotI2luY2x1
ZGUgPFdlYkNvcmUvSW50UmVjdC5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0jaW5j
bHVkZSA8d3RmL1J1bkxvb3AuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotY2xhc3MgRnJhbWU7
Ci1jbGFzcyBHcmFwaGljc0NvbnRleHQ7Ci1jbGFzcyBHcmFwaGljc0xheWVyOwotfQotCi1uYW1l
c3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgV2ViRnJhbWU7Ci1jbGFzcyBXZWJNb3VzZUV2ZW50Owot
Y2xhc3MgV2ViUGFnZTsKLQotY2xhc3MgUGFnZU92ZXJsYXkgOiBwdWJsaWMgQVBJOjpPYmplY3RJ
bXBsPEFQSTo6T2JqZWN0OjpUeXBlOjpCdW5kbGVQYWdlT3ZlcmxheT4gewotcHVibGljOgotICAg
IGNsYXNzIENsaWVudCB7Ci0gICAgcHJvdGVjdGVkOgotICAgICAgICB2aXJ0dWFsIH5DbGllbnQo
KSB7IH0KLSAgICAKLSAgICBwdWJsaWM6Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBwYWdlT3Zlcmxh
eURlc3Ryb3llZChQYWdlT3ZlcmxheSopID0gMDsKLSAgICAgICAgdmlydHVhbCB2b2lkIHdpbGxN
b3ZlVG9XZWJQYWdlKFBhZ2VPdmVybGF5KiwgV2ViUGFnZSopID0gMDsKLSAgICAgICAgdmlydHVh
bCB2b2lkIGRpZE1vdmVUb1dlYlBhZ2UoUGFnZU92ZXJsYXkqLCBXZWJQYWdlKikgPSAwOwotICAg
ICAgICB2aXJ0dWFsIHZvaWQgZHJhd1JlY3QoUGFnZU92ZXJsYXkqLCBXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQmLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBkaXJ0eVJlY3QpID0gMDsKLSAgICAg
ICAgdmlydHVhbCBib29sIG1vdXNlRXZlbnQoUGFnZU92ZXJsYXkqLCBjb25zdCBXZWJNb3VzZUV2
ZW50JikgPSAwOwotICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkU2Nyb2xsRnJhbWUoUGFnZU92ZXJs
YXkqLCBXZWJDb3JlOjpGcmFtZSopIHsgfQotCi0gICAgICAgIHZpcnR1YWwgV0tUeXBlUmVmIGNv
cHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWUoUGFnZU92ZXJsYXkqLCBXS1N0cmluZ1JlZiAv
KiBhdHRyaWJ1dGUgKi8sIFdLVHlwZVJlZiAvKiBwYXJhbWV0ZXIgKi8pIHsgcmV0dXJuIDA7IH0K
LSAgICAgICAgdmlydHVhbCBXS0FycmF5UmVmIGNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlTmFt
ZXMoUGFnZU92ZXJsYXkqLCBib29sIC8qIHBhcmFtZXRlcml6ZWROYW1lcyAqLykgeyByZXR1cm4g
MDsgfQotICAgIH07Ci0KLSAgICBlbnVtIGNsYXNzIE92ZXJsYXlUeXBlIHsKLSAgICAgICAgVmll
dywgLy8gRml4ZWQgdG8gdGhlIHZpZXcgc2l6ZTsgZG9lcyBub3Qgc2NhbGUgb3Igc2Nyb2xsIHdp
dGggdGhlIGRvY3VtZW50LCByZXBhaW50cyBvbiBzY3JvbGwuCi0gICAgICAgIERvY3VtZW50LCAv
LyBTY2FsZXMgYW5kIHNjcm9sbHMgd2l0aCB0aGUgZG9jdW1lbnQuCi0gICAgfTsKLQotICAgIHN0
YXRpYyBQYXNzUmVmUHRyPFBhZ2VPdmVybGF5PiBjcmVhdGUoQ2xpZW50KiwgT3ZlcmxheVR5cGUg
PSBPdmVybGF5VHlwZTo6Vmlldyk7Ci0gICAgdmlydHVhbCB+UGFnZU92ZXJsYXkoKTsKLQotICAg
IHZvaWQgc2V0UGFnZShXZWJQYWdlKik7Ci0gICAgdm9pZCBzZXROZWVkc0Rpc3BsYXkoY29uc3Qg
V2ViQ29yZTo6SW50UmVjdCYgZGlydHlSZWN0KTsKLSAgICB2b2lkIHNldE5lZWRzRGlzcGxheSgp
OwotCi0gICAgdm9pZCBkcmF3UmVjdChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmLCBjb25zdCBX
ZWJDb3JlOjpJbnRSZWN0JiBkaXJ0eVJlY3QpOwotICAgIGJvb2wgbW91c2VFdmVudChjb25zdCBX
ZWJNb3VzZUV2ZW50Jik7Ci0gICAgdm9pZCBkaWRTY3JvbGxGcmFtZShXZWJDb3JlOjpGcmFtZSop
OwotCi0gICAgV0tUeXBlUmVmIGNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWUoV0tTdHJp
bmdSZWYgYXR0cmlidXRlLCBXS1R5cGVSZWYgcGFyYW1ldGVyKTsKLSAgICBXS0FycmF5UmVmIGNv
cHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlTmFtZXMoYm9vbCBwYXJhbWV0ZXJpemVkTmFtZXMpOwot
ICAgIAotICAgIHZvaWQgc3RhcnRGYWRlSW5BbmltYXRpb24oKTsKLSAgICB2b2lkIHN0YXJ0RmFk
ZU91dEFuaW1hdGlvbigpOwotICAgIHZvaWQgc3RvcEZhZGVPdXRBbmltYXRpb24oKTsKLQotICAg
IHZvaWQgY2xlYXIoKTsKLQotICAgIENsaWVudCogY2xpZW50KCkgY29uc3QgeyByZXR1cm4gbV9j
bGllbnQ7IH0KLQotICAgIGVudW0gY2xhc3MgRmFkZU1vZGUgeyBEb05vdEZhZGUsIEZhZGUgfTsK
LQotICAgIE92ZXJsYXlUeXBlIG92ZXJsYXlUeXBlKCkgeyByZXR1cm4gbV9vdmVybGF5VHlwZTsg
fQotCi0gICAgV2ViQ29yZTo6SW50UmVjdCBib3VuZHMoKSBjb25zdDsKLSAgICBXZWJDb3JlOjpJ
bnRSZWN0IGZyYW1lKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRGcmFtZShXZWJDb3JlOjpJbnRSZWN0
KTsKLQotICAgIFdlYkNvcmU6OlJHQkEzMiBiYWNrZ3JvdW5kQ29sb3IoKSBjb25zdCB7IHJldHVy
biBtX2JhY2tncm91bmRDb2xvcjsgfQotICAgIHZvaWQgc2V0QmFja2dyb3VuZENvbG9yKFdlYkNv
cmU6OlJHQkEzMik7Ci0KLSAgICBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiBsYXllcigpOwotICAg
IAotcHJvdGVjdGVkOgotICAgIGV4cGxpY2l0IFBhZ2VPdmVybGF5KENsaWVudCosIE92ZXJsYXlU
eXBlKTsKLQotcHJpdmF0ZToKLSAgICB2b2lkIHN0YXJ0RmFkZUFuaW1hdGlvbigpOwotICAgIHZv
aWQgZmFkZUFuaW1hdGlvblRpbWVyRmlyZWQoKTsKLQotICAgIENsaWVudCogbV9jbGllbnQ7Ci0g
ICAgV2ViUGFnZSogbV93ZWJQYWdlOwotCi0gICAgUnVuTG9vcDo6VGltZXI8UGFnZU92ZXJsYXk+
IG1fZmFkZUFuaW1hdGlvblRpbWVyOwotICAgIGRvdWJsZSBtX2ZhZGVBbmltYXRpb25TdGFydFRp
bWU7Ci0gICAgZG91YmxlIG1fZmFkZUFuaW1hdGlvbkR1cmF0aW9uOwotCi0gICAgZW51bSBGYWRl
QW5pbWF0aW9uVHlwZSB7Ci0gICAgICAgIE5vQW5pbWF0aW9uLAotICAgICAgICBGYWRlSW5Bbmlt
YXRpb24sCi0gICAgICAgIEZhZGVPdXRBbmltYXRpb24sCi0gICAgfTsKLQotICAgIEZhZGVBbmlt
YXRpb25UeXBlIG1fZmFkZUFuaW1hdGlvblR5cGU7Ci0gICAgZmxvYXQgbV9mcmFjdGlvbkZhZGVk
SW47Ci0KLSAgICBPdmVybGF5VHlwZSBtX292ZXJsYXlUeXBlOwotICAgIFdlYkNvcmU6OkludFJl
Y3QgbV9vdmVycmlkZUZyYW1lOwotCi0gICAgV2ViQ29yZTo6UkdCQTMyIG1fYmFja2dyb3VuZENv
bG9yOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBQYWdlT3Zlcmxh
eV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvUGFnZU92
ZXJsYXlDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Q
YWdlT3ZlcmxheUNvbnRyb2xsZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4
NjQ1N2M1Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Q
YWdlT3ZlcmxheUNvbnRyb2xsZXIuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMzE0ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUGFnZU92ZXJsYXlD
b250cm9sbGVyLmgiCi0KLSNpbmNsdWRlICJEcmF3aW5nQXJlYS5oIgotI2luY2x1ZGUgIlBhZ2VP
dmVybGF5LmgiCi0jaW5jbHVkZSAiV2ViUGFnZS5oIgotI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWUu
aD4KLSNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lVmlldy5oPgotI2luY2x1ZGUgPFdlYkNvcmUvR3Jh
cGhpY3NDb250ZXh0Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0xheWVyLmg+Ci0jaW5j
bHVkZSA8V2ViQ29yZS9NYWluRnJhbWUuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1Njcm9sbGluZ0Nv
b3JkaW5hdG9yLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9TZXR0aW5ncy5oPgotI2luY2x1ZGUgPFdl
YkNvcmUvVGlsZWRCYWNraW5nLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1uYW1l
c3BhY2UgV2ViS2l0IHsKLQotUGFnZU92ZXJsYXlDb250cm9sbGVyOjpQYWdlT3ZlcmxheUNvbnRy
b2xsZXIoV2ViUGFnZSYgd2ViUGFnZSkKLSAgICA6IG1fd2ViUGFnZSh3ZWJQYWdlKQotewotfQot
Ci12b2lkIFBhZ2VPdmVybGF5Q29udHJvbGxlcjo6aW5pdGlhbGl6ZSgpCi17Ci0gICAgQVNTRVJU
KCFtX2RvY3VtZW50T3ZlcmxheVJvb3RMYXllcik7Ci0gICAgQVNTRVJUKCFtX3ZpZXdPdmVybGF5
Um9vdExheWVyKTsKLQotICAgIG1fZG9jdW1lbnRPdmVybGF5Um9vdExheWVyID0gR3JhcGhpY3NM
YXllcjo6Y3JlYXRlKG1fd2ViUGFnZS5kcmF3aW5nQXJlYSgpLT5ncmFwaGljc0xheWVyRmFjdG9y
eSgpLCAqdGhpcyk7Ci0gICAgbV92aWV3T3ZlcmxheVJvb3RMYXllciA9IEdyYXBoaWNzTGF5ZXI6
OmNyZWF0ZShtX3dlYlBhZ2UuZHJhd2luZ0FyZWEoKS0+Z3JhcGhpY3NMYXllckZhY3RvcnkoKSwg
KnRoaXMpOwotI2lmbmRlZiBOREVCVUcKLSAgICBtX2RvY3VtZW50T3ZlcmxheVJvb3RMYXllci0+
c2V0TmFtZSgiUGFnZSBPdmVybGF5IGNvbnRhaW5lciAoZG9jdW1lbnQtcmVsYXRpdmUpIik7Ci0g
ICAgbV92aWV3T3ZlcmxheVJvb3RMYXllci0+c2V0TmFtZSgiUGFnZSBPdmVybGF5IGNvbnRhaW5l
ciAodmlldy1yZWxhdGl2ZSkiKTsKLSNlbmRpZgotfQotCi1zdGF0aWMgdm9pZCB1cGRhdGVPdmVy
bGF5R2VvbWV0cnkoUGFnZU92ZXJsYXkmIG92ZXJsYXksIEdyYXBoaWNzTGF5ZXImIGdyYXBoaWNz
TGF5ZXIpCi17Ci0gICAgSW50UmVjdCBvdmVybGF5RnJhbWUgPSBvdmVybGF5LmZyYW1lKCk7Ci0K
LSAgICBpZiAob3ZlcmxheUZyYW1lLmxvY2F0aW9uKCkgPT0gZ3JhcGhpY3NMYXllci5wb3NpdGlv
bigpICYmIG92ZXJsYXlGcmFtZS5zaXplKCkgPT0gZ3JhcGhpY3NMYXllci5zaXplKCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGdyYXBoaWNzTGF5ZXIuc2V0UG9zaXRpb24ob3ZlcmxheUZyYW1l
LmxvY2F0aW9uKCkpOwotICAgIGdyYXBoaWNzTGF5ZXIuc2V0U2l6ZShvdmVybGF5RnJhbWUuc2l6
ZSgpKTsKLX0KLQotdm9pZCBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6Omluc3RhbGxQYWdlT3Zlcmxh
eShQYXNzUmVmUHRyPFBhZ2VPdmVybGF5PiBwYWdlT3ZlcmxheSwgUGFnZU92ZXJsYXk6OkZhZGVN
b2RlIGZhZGVNb2RlKQotewotICAgIEFTU0VSVChtX2RvY3VtZW50T3ZlcmxheVJvb3RMYXllcik7
Ci0gICAgQVNTRVJUKG1fdmlld092ZXJsYXlSb290TGF5ZXIpOwotCi0gICAgUmVmUHRyPFBhZ2VP
dmVybGF5PiBvdmVybGF5ID0gcGFnZU92ZXJsYXk7Ci0KLSAgICBpZiAobV9wYWdlT3ZlcmxheXMu
Y29udGFpbnMob3ZlcmxheSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fcGFnZU92ZXJsYXlz
LmFwcGVuZChvdmVybGF5KTsKLSAgICBvdmVybGF5LT5zZXRQYWdlKCZtX3dlYlBhZ2UpOwotCi0g
ICAgaWYgKGZhZGVNb2RlID09IFBhZ2VPdmVybGF5OjpGYWRlTW9kZTo6RmFkZSkKLSAgICAgICAg
b3ZlcmxheS0+c3RhcnRGYWRlSW5BbmltYXRpb24oKTsKLQotICAgIHN0ZDo6dW5pcXVlX3B0cjxH
cmFwaGljc0xheWVyPiBsYXllciA9IEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZShtX3dlYlBhZ2UuZHJh
d2luZ0FyZWEoKS0+Z3JhcGhpY3NMYXllckZhY3RvcnkoKSwgKnRoaXMpOwotICAgIGxheWVyLT5z
ZXRBbmNob3JQb2ludChGbG9hdFBvaW50M0QoKSk7Ci0gICAgbGF5ZXItPnNldEJhY2tncm91bmRD
b2xvcihvdmVybGF5LT5iYWNrZ3JvdW5kQ29sb3IoKSk7Ci0gICAgdXBkYXRlT3ZlcmxheUdlb21l
dHJ5KCpvdmVybGF5LCAqbGF5ZXIpOwotI2lmbmRlZiBOREVCVUcKLSAgICBsYXllci0+c2V0TmFt
ZSgiUGFnZSBPdmVybGF5IGNvbnRlbnQiKTsKLSNlbmRpZgotCi0gICAgdXBkYXRlU2V0dGluZ3NG
b3JMYXllcigqbGF5ZXIpOwotCi0gICAgc3dpdGNoIChvdmVybGF5LT5vdmVybGF5VHlwZSgpKSB7
Ci0gICAgY2FzZSBQYWdlT3ZlcmxheTo6T3ZlcmxheVR5cGU6OlZpZXc6Ci0gICAgICAgIG1fdmll
d092ZXJsYXlSb290TGF5ZXItPmFkZENoaWxkKGxheWVyLmdldCgpKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBQYWdlT3ZlcmxheTo6T3ZlcmxheVR5cGU6OkRvY3VtZW50OgotICAgICAgICBt
X2RvY3VtZW50T3ZlcmxheVJvb3RMYXllci0+YWRkQ2hpbGQobGF5ZXIuZ2V0KCkpOwotICAgICAg
ICBicmVhazsKLSAgICB9Ci0KLSAgICBtX292ZXJsYXlHcmFwaGljc0xheWVycy5zZXQob3Zlcmxh
eS5nZXQoKSwgV1RGOjptb3ZlKGxheWVyKSk7Ci0KLSAgICB1cGRhdGVGb3JjZVN5bmNocm9ub3Vz
U2Nyb2xsTGF5ZXJQb3NpdGlvblVwZGF0ZXMoKTsKLX0KLQotdm9pZCBQYWdlT3ZlcmxheUNvbnRy
b2xsZXI6OnVuaW5zdGFsbFBhZ2VPdmVybGF5KFBhZ2VPdmVybGF5KiBvdmVybGF5LCBQYWdlT3Zl
cmxheTo6RmFkZU1vZGUgZmFkZU1vZGUpCi17Ci0gICAgaWYgKGZhZGVNb2RlID09IFBhZ2VPdmVy
bGF5OjpGYWRlTW9kZTo6RmFkZSkgewotICAgICAgICBvdmVybGF5LT5zdGFydEZhZGVPdXRBbmlt
YXRpb24oKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG92ZXJsYXktPnNldFBhZ2Uo
bnVsbHB0cik7Ci0KLSAgICBtX292ZXJsYXlHcmFwaGljc0xheWVycy50YWtlKG92ZXJsYXkpLT5y
ZW1vdmVGcm9tUGFyZW50KCk7Ci0KLSAgICBzaXplX3Qgb3ZlcmxheUluZGV4ID0gbV9wYWdlT3Zl
cmxheXMuZmluZChvdmVybGF5KTsKLSAgICBBU1NFUlQob3ZlcmxheUluZGV4ICE9IG5vdEZvdW5k
KTsKLSAgICBtX3BhZ2VPdmVybGF5cy5yZW1vdmUob3ZlcmxheUluZGV4KTsKLQotICAgIHVwZGF0
ZUZvcmNlU3luY2hyb25vdXNTY3JvbGxMYXllclBvc2l0aW9uVXBkYXRlcygpOwotfQotCi12b2lk
IFBhZ2VPdmVybGF5Q29udHJvbGxlcjo6dXBkYXRlRm9yY2VTeW5jaHJvbm91c1Njcm9sbExheWVy
UG9zaXRpb25VcGRhdGVzKCkKLXsKLSNpZiBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKQotICAgIGJv
b2wgZm9yY2VTeW5jaHJvbm91c1Njcm9sbExheWVyUG9zaXRpb25VcGRhdGVzID0gZmFsc2U7Ci0K
LSAgICBmb3IgKGF1dG8mIG92ZXJsYXkgOiBtX3BhZ2VPdmVybGF5cykgewotICAgICAgICBpZiAo
b3ZlcmxheS0+b3ZlcmxheVR5cGUoKSA9PSBQYWdlT3ZlcmxheTo6T3ZlcmxheVR5cGU6OlZpZXcp
Ci0gICAgICAgICAgICBmb3JjZVN5bmNocm9ub3VzU2Nyb2xsTGF5ZXJQb3NpdGlvblVwZGF0ZXMg
PSB0cnVlOwotICAgIH0KLQotICAgIGlmIChQYWdlKiBwYWdlID0gbV93ZWJQYWdlLmNvcmVQYWdl
KCkpIHsKLSAgICAgICAgaWYgKFNjcm9sbGluZ0Nvb3JkaW5hdG9yKiBzY3JvbGxpbmdDb29yZGlu
YXRvciA9IHBhZ2UtPnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkpCi0gICAgICAgICAgICBzY3JvbGxp
bmdDb29yZGluYXRvci0+c2V0Rm9yY2VTeW5jaHJvbm91c1Njcm9sbExheWVyUG9zaXRpb25VcGRh
dGVzKGZvcmNlU3luY2hyb25vdXNTY3JvbGxMYXllclBvc2l0aW9uVXBkYXRlcyk7Ci0gICAgfQot
I2VuZGlmCi19Ci0KLXZvaWQgUGFnZU92ZXJsYXlDb250cm9sbGVyOjpzZXRQYWdlT3ZlcmxheU5l
ZWRzRGlzcGxheShQYWdlT3ZlcmxheSYgb3ZlcmxheSwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYg
ZGlydHlSZWN0KQotewotICAgIEFTU0VSVChtX3BhZ2VPdmVybGF5cy5jb250YWlucygmb3Zlcmxh
eSkpOwotICAgIEdyYXBoaWNzTGF5ZXImIGdyYXBoaWNzTGF5ZXIgPSAqbV9vdmVybGF5R3JhcGhp
Y3NMYXllcnMuZ2V0KCZvdmVybGF5KTsKLQotICAgIGlmICghZ3JhcGhpY3NMYXllci5kcmF3c0Nv
bnRlbnQoKSkgewotICAgICAgICBncmFwaGljc0xheWVyLnNldERyYXdzQ29udGVudCh0cnVlKTsK
LSAgICAgICAgdXBkYXRlT3ZlcmxheUdlb21ldHJ5KG92ZXJsYXksIGdyYXBoaWNzTGF5ZXIpOwot
ICAgIH0KLQotICAgIGdyYXBoaWNzTGF5ZXIuc2V0TmVlZHNEaXNwbGF5SW5SZWN0KGRpcnR5UmVj
dCk7Ci19Ci0KLXZvaWQgUGFnZU92ZXJsYXlDb250cm9sbGVyOjpzZXRQYWdlT3ZlcmxheU9wYWNp
dHkoUGFnZU92ZXJsYXkmIG92ZXJsYXksIGZsb2F0IG9wYWNpdHkpCi17Ci0gICAgQVNTRVJUKG1f
cGFnZU92ZXJsYXlzLmNvbnRhaW5zKCZvdmVybGF5KSk7Ci0gICAgbV9vdmVybGF5R3JhcGhpY3NM
YXllcnMuZ2V0KCZvdmVybGF5KS0+c2V0T3BhY2l0eShvcGFjaXR5KTsKLX0KLQotdm9pZCBQYWdl
T3ZlcmxheUNvbnRyb2xsZXI6OmNsZWFyUGFnZU92ZXJsYXkoUGFnZU92ZXJsYXkmIG92ZXJsYXkp
Ci17Ci0gICAgQVNTRVJUKG1fcGFnZU92ZXJsYXlzLmNvbnRhaW5zKCZvdmVybGF5KSk7Ci0gICAg
bV9vdmVybGF5R3JhcGhpY3NMYXllcnMuZ2V0KCZvdmVybGF5KS0+c2V0RHJhd3NDb250ZW50KGZh
bHNlKTsKLX0KLQotR3JhcGhpY3NMYXllciogUGFnZU92ZXJsYXlDb250cm9sbGVyOjpsYXllckZv
ck92ZXJsYXkoUGFnZU92ZXJsYXkmIG92ZXJsYXkpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKG1fcGFn
ZU92ZXJsYXlzLmNvbnRhaW5zKCZvdmVybGF5KSk7Ci0gICAgcmV0dXJuIG1fb3ZlcmxheUdyYXBo
aWNzTGF5ZXJzLmdldCgmb3ZlcmxheSk7Ci19Ci0KLXZvaWQgUGFnZU92ZXJsYXlDb250cm9sbGVy
OjpkaWRDaGFuZ2VWaWV3U2l6ZSgpCi17Ci0gICAgZm9yIChhdXRvJiBvdmVybGF5QW5kTGF5ZXIg
OiBtX292ZXJsYXlHcmFwaGljc0xheWVycykgewotICAgICAgICBpZiAob3ZlcmxheUFuZExheWVy
LmtleS0+b3ZlcmxheVR5cGUoKSA9PSBQYWdlT3ZlcmxheTo6T3ZlcmxheVR5cGU6OlZpZXcpCi0g
ICAgICAgICAgICB1cGRhdGVPdmVybGF5R2VvbWV0cnkoKm92ZXJsYXlBbmRMYXllci5rZXksICpv
dmVybGF5QW5kTGF5ZXIudmFsdWUpOwotICAgIH0KLX0KLQotdm9pZCBQYWdlT3ZlcmxheUNvbnRy
b2xsZXI6OmRpZENoYW5nZURvY3VtZW50U2l6ZSgpCi17Ci0gICAgZm9yIChhdXRvJiBvdmVybGF5
QW5kTGF5ZXIgOiBtX292ZXJsYXlHcmFwaGljc0xheWVycykgewotICAgICAgICBpZiAob3Zlcmxh
eUFuZExheWVyLmtleS0+b3ZlcmxheVR5cGUoKSA9PSBQYWdlT3ZlcmxheTo6T3ZlcmxheVR5cGU6
OkRvY3VtZW50KQotICAgICAgICAgICAgdXBkYXRlT3ZlcmxheUdlb21ldHJ5KCpvdmVybGF5QW5k
TGF5ZXIua2V5LCAqb3ZlcmxheUFuZExheWVyLnZhbHVlKTsKLSAgICB9Ci19Ci0KLXZvaWQgUGFn
ZU92ZXJsYXlDb250cm9sbGVyOjpkaWRDaGFuZ2VQcmVmZXJlbmNlcygpCi17Ci0gICAgZm9yIChh
dXRvJiBncmFwaGljc0xheWVyIDogbV9vdmVybGF5R3JhcGhpY3NMYXllcnMudmFsdWVzKCkpCi0g
ICAgICAgIHVwZGF0ZVNldHRpbmdzRm9yTGF5ZXIoKmdyYXBoaWNzTGF5ZXIpOwotfQotCi12b2lk
IFBhZ2VPdmVybGF5Q29udHJvbGxlcjo6ZGlkQ2hhbmdlRGV2aWNlU2NhbGVGYWN0b3IoKQotewot
ICAgIG1fZG9jdW1lbnRPdmVybGF5Um9vdExheWVyLT5ub3RlRGV2aWNlT3JQYWdlU2NhbGVGYWN0
b3JDaGFuZ2VkSW5jbHVkaW5nRGVzY2VuZGFudHMoKTsKLSAgICBtX3ZpZXdPdmVybGF5Um9vdExh
eWVyLT5ub3RlRGV2aWNlT3JQYWdlU2NhbGVGYWN0b3JDaGFuZ2VkSW5jbHVkaW5nRGVzY2VuZGFu
dHMoKTsKLQotICAgIGZvciAoYXV0byYgZ3JhcGhpY3NMYXllciA6IG1fb3ZlcmxheUdyYXBoaWNz
TGF5ZXJzLnZhbHVlcygpKQotICAgICAgICBncmFwaGljc0xheWVyLT5zZXROZWVkc0Rpc3BsYXko
KTsKLX0KLQotdm9pZCBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6OmRpZENoYW5nZUV4cG9zZWRSZWN0
KCkKLXsKLSAgICBtX3dlYlBhZ2UuZHJhd2luZ0FyZWEoKS0+c2NoZWR1bGVDb21wb3NpdGluZ0xh
eWVyRmx1c2goKTsKLX0KLQotdm9pZCBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6OmRpZFNjcm9sbEZy
YW1lKEZyYW1lKiBmcmFtZSkKLXsKLSAgICBmb3IgKGF1dG8mIG92ZXJsYXlBbmRMYXllciA6IG1f
b3ZlcmxheUdyYXBoaWNzTGF5ZXJzKSB7Ci0gICAgICAgIGlmIChvdmVybGF5QW5kTGF5ZXIua2V5
LT5vdmVybGF5VHlwZSgpID09IFBhZ2VPdmVybGF5OjpPdmVybGF5VHlwZTo6VmlldyB8fCAhZnJh
bWUtPmlzTWFpbkZyYW1lKCkpCi0gICAgICAgICAgICBvdmVybGF5QW5kTGF5ZXIudmFsdWUtPnNl
dE5lZWRzRGlzcGxheSgpOwotICAgICAgICBvdmVybGF5QW5kTGF5ZXIua2V5LT5kaWRTY3JvbGxG
cmFtZShmcmFtZSk7Ci0gICAgfQotfQotCi12b2lkIFBhZ2VPdmVybGF5Q29udHJvbGxlcjo6Zmx1
c2hQYWdlT3ZlcmxheUxheWVycyhGbG9hdFJlY3QgdmlzaWJsZVJlY3QpCi17Ci0gICAgbV92aWV3
T3ZlcmxheVJvb3RMYXllci0+Zmx1c2hDb21wb3NpdGluZ1N0YXRlKHZpc2libGVSZWN0KTsKLX0K
LQotdm9pZCBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6OnVwZGF0ZVNldHRpbmdzRm9yTGF5ZXIoR3Jh
cGhpY3NMYXllciYgbGF5ZXIpCi17Ci0gICAgU2V0dGluZ3MmIHNldHRpbmdzID0gbV93ZWJQYWdl
LmNvcmVQYWdlKCktPnNldHRpbmdzKCk7Ci0gICAgbGF5ZXIuc2V0QWNjZWxlcmF0ZXNEcmF3aW5n
KHNldHRpbmdzLmFjY2VsZXJhdGVkRHJhd2luZ0VuYWJsZWQoKSk7Ci0gICAgbGF5ZXIuc2V0U2hv
d0RlYnVnQm9yZGVyKHNldHRpbmdzLnNob3dEZWJ1Z0JvcmRlcnMoKSk7Ci0gICAgbGF5ZXIuc2V0
U2hvd1JlcGFpbnRDb3VudGVyKHNldHRpbmdzLnNob3dSZXBhaW50Q291bnRlcigpKTsKLX0KLQot
Ym9vbCBQYWdlT3ZlcmxheUNvbnRyb2xsZXI6OmhhbmRsZU1vdXNlRXZlbnQoY29uc3QgV2ViTW91
c2VFdmVudCYgbW91c2VFdmVudCkKLXsKLSAgICBpZiAoIW1fcGFnZU92ZXJsYXlzLnNpemUoKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgZm9yIChhdXRvIGl0ID0gbV9wYWdlT3Zlcmxh
eXMucmJlZ2luKCksIGVuZCA9IG1fcGFnZU92ZXJsYXlzLnJlbmQoKTsgaXQgIT0gZW5kOyArK2l0
KSB7Ci0gICAgICAgIGlmICgoKml0KS0+bW91c2VFdmVudChtb3VzZUV2ZW50KSkKLSAgICAgICAg
ICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotV0tUeXBl
UmVmIFBhZ2VPdmVybGF5Q29udHJvbGxlcjo6Y29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1
ZShXS1N0cmluZ1JlZiBhdHRyaWJ1dGUsIFdLVHlwZVJlZiBwYXJhbWV0ZXIpCi17Ci0gICAgaWYg
KCFtX3BhZ2VPdmVybGF5cy5zaXplKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAg
Zm9yIChhdXRvIGl0ID0gbV9wYWdlT3ZlcmxheXMucmJlZ2luKCksIGVuZCA9IG1fcGFnZU92ZXJs
YXlzLnJlbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGlmIChXS1R5cGVSZWYgdmFs
dWUgPSAoKml0KS0+Y29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZShhdHRyaWJ1dGUsIHBh
cmFtZXRlcikpCi0gICAgICAgICAgICByZXR1cm4gdmFsdWU7Ci0gICAgfQotCi0gICAgcmV0dXJu
IG51bGxwdHI7Ci19Ci0KLVdLQXJyYXlSZWYgUGFnZU92ZXJsYXlDb250cm9sbGVyOjpjb3B5QWNj
ZXNzaWJpbGl0eUF0dHJpYnV0ZXNOYW1lcyhib29sIHBhcmFtZXRlcml6ZWROYW1lcykKLXsKLSAg
ICBpZiAoIW1fcGFnZU92ZXJsYXlzLnNpemUoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0K
LSAgICBmb3IgKGF1dG8gaXQgPSBtX3BhZ2VPdmVybGF5cy5yYmVnaW4oKSwgZW5kID0gbV9wYWdl
T3ZlcmxheXMucmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgaWYgKFdLQXJyYXlS
ZWYgdmFsdWUgPSAoKml0KS0+Y29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVOYW1lcyhwYXJhbWV0
ZXJpemVkTmFtZXMpKQotICAgICAgICAgICAgcmV0dXJuIHZhbHVlOwotICAgIH0KLQotICAgIHJl
dHVybiBudWxscHRyOwotfQotCi12b2lkIFBhZ2VPdmVybGF5Q29udHJvbGxlcjo6cGFpbnRDb250
ZW50cyhjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiBncmFwaGljc0xheWVyLCBXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgV2ViQ29yZTo6R3JhcGhpY3NMYXll
clBhaW50aW5nUGhhc2UsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgY2xpcFJlY3QpCi17Ci0g
ICAgZm9yIChhdXRvIGl0ID0gbV9vdmVybGF5R3JhcGhpY3NMYXllcnMuYmVnaW4oKSwgZW5kID0g
bV9vdmVybGF5R3JhcGhpY3NMYXllcnMuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAg
ICBpZiAoaXQtPnZhbHVlLmdldCgpICE9IGdyYXBoaWNzTGF5ZXIpCi0gICAgICAgICAgICBjb250
aW51ZTsKLQotICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoZ3Jh
cGhpY3NDb250ZXh0KTsKLSAgICAgICAgZ3JhcGhpY3NDb250ZXh0LmNsaXAoY2xpcFJlY3QpOwot
ICAgICAgICBpdC0+a2V5LT5kcmF3UmVjdChncmFwaGljc0NvbnRleHQsIGVuY2xvc2luZ0ludFJl
Y3QoY2xpcFJlY3QpKTsKLQotICAgICAgICByZXR1cm47Ci0gICAgfQotfQotCi1mbG9hdCBQYWdl
T3ZlcmxheUNvbnRyb2xsZXI6OmRldmljZVNjYWxlRmFjdG9yKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gbV93ZWJQYWdlLmNvcmVQYWdlKCktPmRldmljZVNjYWxlRmFjdG9yKCk7Ci19Ci0KLXZvaWQg
UGFnZU92ZXJsYXlDb250cm9sbGVyOjpub3RpZnlGbHVzaFJlcXVpcmVkKGNvbnN0IFdlYkNvcmU6
OkdyYXBoaWNzTGF5ZXIqKQotewotICAgIGlmIChtX3dlYlBhZ2UuZHJhd2luZ0FyZWEoKSkKLSAg
ICAgICAgbV93ZWJQYWdlLmRyYXdpbmdBcmVhKCktPnNjaGVkdWxlQ29tcG9zaXRpbmdMYXllckZs
dXNoKCk7Ci19Ci0KLXZvaWQgUGFnZU92ZXJsYXlDb250cm9sbGVyOjpkaWRDaGFuZ2VPdmVybGF5
RnJhbWUoUGFnZU92ZXJsYXkmIG92ZXJsYXkpCi17Ci0gICAgQVNTRVJUKG1fcGFnZU92ZXJsYXlz
LmNvbnRhaW5zKCZvdmVybGF5KSk7Ci0gICAgdXBkYXRlT3ZlcmxheUdlb21ldHJ5KG92ZXJsYXks
ICptX292ZXJsYXlHcmFwaGljc0xheWVycy5nZXQoJm92ZXJsYXkpKTsKLX0KLQotdm9pZCBQYWdl
T3ZlcmxheUNvbnRyb2xsZXI6OmRpZENoYW5nZU92ZXJsYXlCYWNrZ3JvdW5kQ29sb3IoUGFnZU92
ZXJsYXkmIG92ZXJsYXkpCi17Ci0gICAgQVNTRVJUKG1fcGFnZU92ZXJsYXlzLmNvbnRhaW5zKCZv
dmVybGF5KSk7Ci0gICAgbV9vdmVybGF5R3JhcGhpY3NMYXllcnMuZ2V0KCZvdmVybGF5KS0+c2V0
QmFja2dyb3VuZENvbG9yKG92ZXJsYXkuYmFja2dyb3VuZENvbG9yKCkpOwotfQotCi19IC8vIG5h
bWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9QYWdlT3ZlcmxheUNvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9QYWdlT3ZlcmxheUNvbnRyb2xsZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMjUxODJkNS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvUGFnZU92ZXJsYXlDb250cm9sbGVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw5OSArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBQYWdlT3ZlcmxheUNvbnRyb2xsZXJfaAotI2RlZmlu
ZSBQYWdlT3ZlcmxheUNvbnRyb2xsZXJfaAotCi0jaW5jbHVkZSAiUGFnZU92ZXJsYXkuaCIKLSNp
bmNsdWRlICJXS0Jhc2UuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzTGF5ZXJDbGllbnQu
aD4KLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLSNp
bmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLWNsYXNzIEZyYW1l
OwotfQotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgV2ViTW91c2VFdmVudDsKLWNsYXNz
IFdlYlBhZ2U7Ci0KLWNsYXNzIFBhZ2VPdmVybGF5Q29udHJvbGxlciA6IHB1YmxpYyBXZWJDb3Jl
OjpHcmFwaGljc0xheWVyQ2xpZW50IHsKLXB1YmxpYzoKLSAgICBQYWdlT3ZlcmxheUNvbnRyb2xs
ZXIoV2ViUGFnZSYpOwotCi0gICAgdm9pZCBpbml0aWFsaXplKCk7Ci0KLSAgICBXZWJDb3JlOjpH
cmFwaGljc0xheWVyKiBkb2N1bWVudE92ZXJsYXlSb290TGF5ZXIoKSBjb25zdCB7IHJldHVybiBt
X2RvY3VtZW50T3ZlcmxheVJvb3RMYXllci5nZXQoKTsgfQotICAgIFdlYkNvcmU6OkdyYXBoaWNz
TGF5ZXIqIHZpZXdPdmVybGF5Um9vdExheWVyKCkgY29uc3QgeyByZXR1cm4gbV92aWV3T3Zlcmxh
eVJvb3RMYXllci5nZXQoKTsgfQotCi0gICAgdm9pZCBpbnN0YWxsUGFnZU92ZXJsYXkoUGFzc1Jl
ZlB0cjxQYWdlT3ZlcmxheT4sIFBhZ2VPdmVybGF5OjpGYWRlTW9kZSk7Ci0gICAgdm9pZCB1bmlu
c3RhbGxQYWdlT3ZlcmxheShQYWdlT3ZlcmxheSosIFBhZ2VPdmVybGF5OjpGYWRlTW9kZSk7Ci0K
LSAgICB2b2lkIHNldFBhZ2VPdmVybGF5TmVlZHNEaXNwbGF5KFBhZ2VPdmVybGF5JiwgY29uc3Qg
V2ViQ29yZTo6SW50UmVjdCYpOwotICAgIHZvaWQgc2V0UGFnZU92ZXJsYXlPcGFjaXR5KFBhZ2VP
dmVybGF5JiwgZmxvYXQpOwotICAgIHZvaWQgY2xlYXJQYWdlT3ZlcmxheShQYWdlT3ZlcmxheSYp
OwotICAgIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqIGxheWVyRm9yT3ZlcmxheShQYWdlT3Zlcmxh
eSYpIGNvbnN0OwotCi0gICAgdm9pZCBkaWRDaGFuZ2VWaWV3U2l6ZSgpOwotICAgIHZvaWQgZGlk
Q2hhbmdlRG9jdW1lbnRTaXplKCk7Ci0gICAgdm9pZCBkaWRDaGFuZ2VQcmVmZXJlbmNlcygpOwot
ICAgIHZvaWQgZGlkQ2hhbmdlRGV2aWNlU2NhbGVGYWN0b3IoKTsKLSAgICB2b2lkIGRpZENoYW5n
ZUV4cG9zZWRSZWN0KCk7Ci0gICAgdm9pZCBkaWRTY3JvbGxGcmFtZShXZWJDb3JlOjpGcmFtZSop
OwotCi0gICAgdm9pZCBkaWRDaGFuZ2VPdmVybGF5RnJhbWUoUGFnZU92ZXJsYXkmKTsKLSAgICB2
b2lkIGRpZENoYW5nZU92ZXJsYXlCYWNrZ3JvdW5kQ29sb3IoUGFnZU92ZXJsYXkmKTsKLQotICAg
IHZvaWQgZmx1c2hQYWdlT3ZlcmxheUxheWVycyhXZWJDb3JlOjpGbG9hdFJlY3QpOwotCi0gICAg
Ym9vbCBoYW5kbGVNb3VzZUV2ZW50KGNvbnN0IFdlYk1vdXNlRXZlbnQmKTsKLQotICAgIC8vIEZJ
WE1FOiBXZSBzaG91bGRuJ3QgdXNlIEFQSSB0eXBlcyBoZXJlLgotICAgIFdLVHlwZVJlZiBjb3B5
QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlKFdLU3RyaW5nUmVmIGF0dHJpYnV0ZSwgV0tUeXBl
UmVmIHBhcmFtZXRlcik7Ci0gICAgV0tBcnJheVJlZiBjb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0
ZXNOYW1lcyhib29sIHBhcmFtZXRlcml6ZWROYW1lcyk7Ci0KLXByaXZhdGU6Ci0gICAgdm9pZCB1
cGRhdGVTZXR0aW5nc0ZvckxheWVyKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXImKTsKLSAgICB2b2lk
IHVwZGF0ZUZvcmNlU3luY2hyb25vdXNTY3JvbGxMYXllclBvc2l0aW9uVXBkYXRlcygpOwotCi0g
ICAgLy8gV2ViQ29yZTo6R3JhcGhpY3NMYXllckNsaWVudAotICAgIHZpcnR1YWwgdm9pZCBub3Rp
ZnlGbHVzaFJlcXVpcmVkKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKSBvdmVycmlkZTsK
LSAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50cyhjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xh
eWVyKiwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiwgV2ViQ29yZTo6R3JhcGhpY3NMYXllclBh
aW50aW5nUGhhc2UsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgY2xpcFJlY3QpIG92ZXJyaWRl
OwotICAgIHZpcnR1YWwgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IoKSBjb25zdCBvdmVycmlkZTsK
LSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkU2tpcExheWVySW5EdW1wKGNvbnN0IFdlYkNvcmU6Okdy
YXBoaWNzTGF5ZXIqKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9Ci0KLSAgICBzdGQ6
OnVuaXF1ZV9wdHI8V2ViQ29yZTo6R3JhcGhpY3NMYXllcj4gbV9kb2N1bWVudE92ZXJsYXlSb290
TGF5ZXI7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI+IG1fdmll
d092ZXJsYXlSb290TGF5ZXI7Ci0gICAgSGFzaE1hcDxQYWdlT3ZlcmxheSosIHN0ZDo6dW5pcXVl
X3B0cjxXZWJDb3JlOjpHcmFwaGljc0xheWVyPj4gbV9vdmVybGF5R3JhcGhpY3NMYXllcnM7Ci0g
ICAgVmVjdG9yPFJlZlB0cjxQYWdlT3ZlcmxheT4+IG1fcGFnZU92ZXJsYXlzOwotICAgIFdlYlBh
Z2UmIG1fd2ViUGFnZTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8g
UGFnZU92ZXJsYXlDb250cm9sbGVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9TZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyLmggYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvU2VydmljZXNPdmVybGF5Q29udHJvbGxlci5oCmluZGV4IDNi
MDlkM2QuLjQxMWQzM2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9TZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyLmgKKysrIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL1NlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIuaApAQCAtMjgsOSArMjgs
OSBAQAogCiAjaWYgRU5BQkxFKFNFUlZJQ0VfQ09OVFJPTFMpIHx8IEVOQUJMRShURUxFUEhPTkVf
TlVNQkVSX0RFVEVDVElPTikKIAotI2luY2x1ZGUgIlBhZ2VPdmVybGF5LmgiCiAjaW5jbHVkZSAi
V2ViRnJhbWUuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzTGF5ZXJDbGllbnQuaD4KKyNp
bmNsdWRlIDxXZWJDb3JlL1BhZ2VPdmVybGF5Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SYW5nZS5o
PgogI2luY2x1ZGUgPFdlYkNvcmUvVGltZXIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5o
PgpAQCAtMzksNyArMzksNiBAQCB0eXBlZGVmIHZvaWQqIERESGlnaGxpZ2h0UmVmOwogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBMYXlvdXRSZWN0OwotCiBzdHJ1Y3QgR2FwUmVjdHM7CiB9
CiAKQEAgLTQ3LDcgKzQ2LDcgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIFdlYlBhZ2U7
CiAKLWNsYXNzIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIgOiBwcml2YXRlIFBhZ2VPdmVybGF5
OjpDbGllbnQgeworY2xhc3MgU2VydmljZXNPdmVybGF5Q29udHJvbGxlciA6IHByaXZhdGUgV2Vi
Q29yZTo6UGFnZU92ZXJsYXk6OkNsaWVudCB7CiBwdWJsaWM6CiAgICAgU2VydmljZXNPdmVybGF5
Q29udHJvbGxlcihXZWJQYWdlJik7CiAgICAgflNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIoKTsK
QEAgLTk4LDEyICs5NywxMiBAQCBwcml2YXRlOgogICAgIH07CiAKICAgICAvLyBQYWdlT3Zlcmxh
eTo6Q2xpZW50Ci0gICAgdmlydHVhbCB2b2lkIHBhZ2VPdmVybGF5RGVzdHJveWVkKFBhZ2VPdmVy
bGF5Kikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHdpbGxNb3ZlVG9XZWJQYWdlKFBhZ2VP
dmVybGF5KiwgV2ViUGFnZSopIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBkaWRNb3ZlVG9X
ZWJQYWdlKFBhZ2VPdmVybGF5KiwgV2ViUGFnZSopIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9p
ZCBkcmF3UmVjdChQYWdlT3ZlcmxheSosIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYsIGNvbnN0
IFdlYkNvcmU6OkludFJlY3QmIGRpcnR5UmVjdCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBib29s
IG1vdXNlRXZlbnQoUGFnZU92ZXJsYXkqLCBjb25zdCBXZWJNb3VzZUV2ZW50Jikgb3ZlcnJpZGU7
Ci0gICAgdmlydHVhbCB2b2lkIGRpZFNjcm9sbEZyYW1lKFBhZ2VPdmVybGF5KiwgV2ViQ29yZTo6
RnJhbWUqKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFnZU92ZXJsYXlEZXN0cm95ZWQo
V2ViQ29yZTo6UGFnZU92ZXJsYXkmKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgd2lsbE1v
dmVUb1BhZ2UoV2ViQ29yZTo6UGFnZU92ZXJsYXkmLCBXZWJDb3JlOjpQYWdlKikgb3ZlcnJpZGU7
CisgICAgdmlydHVhbCB2b2lkIGRpZE1vdmVUb1BhZ2UoV2ViQ29yZTo6UGFnZU92ZXJsYXkmLCBX
ZWJDb3JlOjpQYWdlKikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGRyYXdSZWN0KFdlYkNv
cmU6OlBhZ2VPdmVybGF5JiwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiwgY29uc3QgV2ViQ29y
ZTo6SW50UmVjdCYgZGlydHlSZWN0KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wgbW91c2VF
dmVudChXZWJDb3JlOjpQYWdlT3ZlcmxheSYsIGNvbnN0IFdlYkNvcmU6OlBsYXRmb3JtTW91c2VF
dmVudCYpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBkaWRTY3JvbGxGcmFtZShXZWJDb3Jl
OjpQYWdlT3ZlcmxheSYsIFdlYkNvcmU6OkZyYW1lJikgb3ZlcnJpZGU7CiAKICAgICB2b2lkIGNy
ZWF0ZU92ZXJsYXlJZk5lZWRlZCgpOwogICAgIHZvaWQgaGFuZGxlQ2xpY2soY29uc3QgV2ViQ29y
ZTo6SW50UG9pbnQmLCBIaWdobGlnaHQmKTsKQEAgLTEzOSw3ICsxMzgsNyBAQCBwcml2YXRlOgog
ICAgIFdlYlBhZ2UmIHdlYlBhZ2UoKSBjb25zdCB7IHJldHVybiBtX3dlYlBhZ2U7IH0KIAogICAg
IFdlYlBhZ2UmIG1fd2ViUGFnZTsKLSAgICBQYWdlT3ZlcmxheSogbV9zZXJ2aWNlc092ZXJsYXk7
CisgICAgV2ViQ29yZTo6UGFnZU92ZXJsYXkqIG1fc2VydmljZXNPdmVybGF5OwogCiAgICAgUmVm
UHRyPEhpZ2hsaWdodD4gbV9hY3RpdmVIaWdobGlnaHQ7CiAgICAgUmVmUHRyPEhpZ2hsaWdodD4g
bV9uZXh0QWN0aXZlSGlnaGxpZ2h0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYlBhZ2UuY3BwCmluZGV4IDZlYTc2YWMuLjc2MDljZDEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKQEAgLTMyNyw3ICszMjcsNiBAQCBX
ZWJQYWdlOjpXZWJQYWdlKHVpbnQ2NF90IHBhZ2VJRCwgY29uc3QgV2ViUGFnZUNyZWF0aW9uUGFy
YW1ldGVycyYgcGFyYW1ldGVycykKICNpZiBFTkFCTEUoV0VCR0wpCiAgICAgLCBtX3N5c3RlbVdl
YkdMUG9saWN5KFdlYkdMQWxsb3dDcmVhdGlvbikKICNlbmRpZgotICAgICwgbV9wYWdlT3Zlcmxh
eUNvbnRyb2xsZXIoKnRoaXMpCiB7CiAgICAgQVNTRVJUKG1fcGFnZUlEKTsKICAgICAvLyBGSVhN
RTogVGhpcyBpcyBhIG5vbi1pZGVhbCBsb2NhdGlvbiBmb3IgdGhpcyBTZXR0aW5nIGFuZApAQCAt
MzY2LDcgKzM2NSw2IEBAIFdlYlBhZ2U6OldlYlBhZ2UodWludDY0X3QgcGFnZUlELCBjb25zdCBX
ZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzKQogCiAgICAgbV9kcmF3aW5nQXJl
YSA9IERyYXdpbmdBcmVhOjpjcmVhdGUoKnRoaXMsIHBhcmFtZXRlcnMpOwogICAgIG1fZHJhd2lu
Z0FyZWEtPnNldFBhaW50aW5nRW5hYmxlZChmYWxzZSk7Ci0gICAgbV9wYWdlT3ZlcmxheUNvbnRy
b2xsZXIuaW5pdGlhbGl6ZSgpOwogCiAjaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykKICAgICBt
X3VzZUFzeW5jU2Nyb2xsaW5nID0gcGFyYW1ldGVycy5zdG9yZS5nZXRCb29sVmFsdWVGb3JLZXko
V2ViUHJlZmVyZW5jZXNLZXk6OnRocmVhZGVkU2Nyb2xsaW5nRW5hYmxlZEtleSgpKTsKQEAgLTEy
MjYsOCArMTIyNCw2IEBAIHZvaWQgV2ViUGFnZTo6c2V0U2l6ZShjb25zdCBXZWJDb3JlOjpJbnRT
aXplJiB2aWV3U2l6ZSkKICAgICBpZiAodmlldy0+dXNlRml4ZWRMYXlvdXQoKSkKICAgICAgICAg
c2VuZFZpZXdwb3J0QXR0cmlidXRlc0NoYW5nZWQoKTsKICNlbmRpZgotCi0gICAgbV9wYWdlT3Zl
cmxheUNvbnRyb2xsZXIuZGlkQ2hhbmdlVmlld1NpemUoKTsKIH0KIAogI2lmIFVTRShUSUxFRF9C
QUNLSU5HX1NUT1JFKQpAQCAtMTQ1Myw4ICsxNDQ5LDYgQEAgdm9pZCBXZWJQYWdlOjpzZXREZXZp
Y2VTY2FsZUZhY3RvcihmbG9hdCBzY2FsZUZhY3RvcikKIAogICAgIGlmIChtX2RyYXdpbmdBcmVh
LT5sYXllclRyZWVIb3N0KCkpCiAgICAgICAgIG1fZHJhd2luZ0FyZWEtPmxheWVyVHJlZUhvc3Qo
KS0+ZGV2aWNlT3JQYWdlU2NhbGVGYWN0b3JDaGFuZ2VkKCk7Ci0KLSAgICBtX3BhZ2VPdmVybGF5
Q29udHJvbGxlci5kaWRDaGFuZ2VEZXZpY2VTY2FsZUZhY3RvcigpOwogfQogCiBmbG9hdCBXZWJQ
YWdlOjpkZXZpY2VTY2FsZUZhY3RvcigpIGNvbnN0CkBAIC0xNTc3LDE2ICsxNTcxLDYgQEAgdm9p
ZCBXZWJQYWdlOjpwb3N0SW5qZWN0ZWRCdW5kbGVNZXNzYWdlKGNvbnN0IFN0cmluZyYgbWVzc2Fn
ZU5hbWUsIElQQzo6TWVzc2FnZUQKICAgICBpbmplY3RlZEJ1bmRsZS0+ZGlkUmVjZWl2ZU1lc3Nh
Z2VUb1BhZ2UodGhpcywgbWVzc2FnZU5hbWUsIG1lc3NhZ2VCb2R5LmdldCgpKTsKIH0KIAotdm9p
ZCBXZWJQYWdlOjppbnN0YWxsUGFnZU92ZXJsYXkoUGFzc1JlZlB0cjxQYWdlT3ZlcmxheT4gcGFn
ZU92ZXJsYXksIFBhZ2VPdmVybGF5OjpGYWRlTW9kZSBmYWRlTW9kZSkKLXsKLSAgICBtX3BhZ2VP
dmVybGF5Q29udHJvbGxlci5pbnN0YWxsUGFnZU92ZXJsYXkocGFnZU92ZXJsYXksIGZhZGVNb2Rl
KTsKLX0KLQotdm9pZCBXZWJQYWdlOjp1bmluc3RhbGxQYWdlT3ZlcmxheShQYWdlT3ZlcmxheSog
cGFnZU92ZXJsYXksIFBhZ2VPdmVybGF5OjpGYWRlTW9kZSBmYWRlTW9kZSkKLXsKLSAgICBtX3Bh
Z2VPdmVybGF5Q29udHJvbGxlci51bmluc3RhbGxQYWdlT3ZlcmxheShwYWdlT3ZlcmxheSwgZmFk
ZU1vZGUpOwotfQotCiAjaWYgIVBMQVRGT1JNKElPUykKIHZvaWQgV2ViUGFnZTo6c2V0SGVhZGVy
UGFnZUJhbm5lcihQYXNzUmVmUHRyPFBhZ2VCYW5uZXI+IHBhZ2VCYW5uZXIpCiB7CkBAIC0xOTE0
LDcgKzE4OTgsNyBAQCB2b2lkIFdlYlBhZ2U6Om1vdXNlRXZlbnQoY29uc3QgV2ViTW91c2VFdmVu
dCYgbW91c2VFdmVudCkKICAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZgotICAgIGJvb2wg
aGFuZGxlZCA9IG1fcGFnZU92ZXJsYXlDb250cm9sbGVyLmhhbmRsZU1vdXNlRXZlbnQobW91c2VF
dmVudCk7CisgICAgYm9vbCBoYW5kbGVkID0gZmFsc2U7CiAKICNpZiAhUExBVEZPUk0oSU9TKQog
ICAgIGlmICghaGFuZGxlZCAmJiBtX2hlYWRlckJhbm5lcikKQEAgLTE5NDAsNyArMTkyNCw3IEBA
IHZvaWQgV2ViUGFnZTo6bW91c2VFdmVudChjb25zdCBXZWJNb3VzZUV2ZW50JiBtb3VzZUV2ZW50
KQogCiB2b2lkIFdlYlBhZ2U6Om1vdXNlRXZlbnRTeW5jRm9yVGVzdGluZyhjb25zdCBXZWJNb3Vz
ZUV2ZW50JiBtb3VzZUV2ZW50LCBib29sJiBoYW5kbGVkKQogewotICAgIGhhbmRsZWQgPSBtX3Bh
Z2VPdmVybGF5Q29udHJvbGxlci5oYW5kbGVNb3VzZUV2ZW50KG1vdXNlRXZlbnQpOworICAgIGhh
bmRsZWQgPSBmYWxzZTsKICNpZiAhUExBVEZPUk0oSU9TKQogICAgIGlmICghaGFuZGxlZCAmJiBt
X2hlYWRlckJhbm5lcikKICAgICAgICAgaGFuZGxlZCA9IG1faGVhZGVyQmFubmVyLT5tb3VzZUV2
ZW50KG1vdXNlRXZlbnQpOwpAQCAtMjg2OSw4ICsyODUzLDYgQEAgdm9pZCBXZWJQYWdlOjp1cGRh
dGVQcmVmZXJlbmNlcyhjb25zdCBXZWJQcmVmZXJlbmNlc1N0b3JlJiBzdG9yZSkKIAogICAgIGlm
IChtX2RyYXdpbmdBcmVhKQogICAgICAgICBtX2RyYXdpbmdBcmVhLT51cGRhdGVQcmVmZXJlbmNl
cyhzdG9yZSk7Ci0KLSAgICBtX3BhZ2VPdmVybGF5Q29udHJvbGxlci5kaWRDaGFuZ2VQcmVmZXJl
bmNlcygpOwogfQogCiAjaWYgUExBVEZPUk0oQ09DT0EpCkBAIC00MDk2LDcgKzQwNzgsNyBAQCB2
b2lkIFdlYlBhZ2U6OnJlY29tcHV0ZVNob3J0Q2lyY3VpdEhvcml6b250YWxXaGVlbEV2ZW50c1N0
YXRlKCkKICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlNldENhblNob3J0Q2lyY3Vp
dEhvcml6b250YWxXaGVlbEV2ZW50cyhtX2NhblNob3J0Q2lyY3VpdEhvcml6b250YWxXaGVlbEV2
ZW50cykpOwogfQogCi1GcmFtZSogV2ViUGFnZTo6bWFpbkZyYW1lKCkgY29uc3QKK01haW5GcmFt
ZSogV2ViUGFnZTo6bWFpbkZyYW1lKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9wYWdlID8gJm1f
cGFnZS0+bWFpbkZyYW1lKCkgOiBudWxscHRyOwogfQpAQCAtNDgxMSw4ICs0NzkzLDYgQEAgU2Vy
dmljZXNPdmVybGF5Q29udHJvbGxlciYgV2ViUGFnZTo6c2VydmljZXNPdmVybGF5Q29udHJvbGxl
cigpCiAKIHZvaWQgV2ViUGFnZTo6ZGlkQ2hhbmdlU2Nyb2xsT2Zmc2V0Rm9yRnJhbWUoRnJhbWUq
IGZyYW1lKQogewotICAgIG1fcGFnZU92ZXJsYXlDb250cm9sbGVyLmRpZFNjcm9sbEZyYW1lKGZy
YW1lKTsKLQogICAgIGlmICghZnJhbWUtPmlzTWFpbkZyYW1lKCkpCiAgICAgICAgIHJldHVybjsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2Uu
aCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKaW5kZXggY2E0
NmJhMGEuLjIxMjJlMmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJQYWdlLmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dl
YlBhZ2UuaApAQCAtNDEsNyArNDEsNiBAQAogI2luY2x1ZGUgIkxheWVyVHJlZUhvc3QuaCIKICNp
bmNsdWRlICJNZXNzYWdlUmVjZWl2ZXIuaCIKICNpbmNsdWRlICJNZXNzYWdlU2VuZGVyLmgiCi0j
aW5jbHVkZSAiUGFnZU92ZXJsYXlDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiUGx1Z2luLmgiCiAj
aW5jbHVkZSAiU2FuZGJveEV4dGVuc2lvbi5oIgogI2luY2x1ZGUgIlNoYXJlYWJsZUJpdG1hcC5o
IgpAQCAtMTQwLDcgKzEzOSw2IEBAIGNsYXNzIERyYXdpbmdBcmVhOwogY2xhc3MgSW5qZWN0ZWRC
dW5kbGVCYWNrRm9yd2FyZExpc3Q7CiBjbGFzcyBOb3RpZmljYXRpb25QZXJtaXNzaW9uUmVxdWVz
dE1hbmFnZXI7CiBjbGFzcyBQYWdlQmFubmVyOwotY2xhc3MgUGFnZU92ZXJsYXk7CiBjbGFzcyBQ
bHVnaW5WaWV3OwogY2xhc3MgU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjsKIGNsYXNzIFZpc2li
bGVDb250ZW50UmVjdFVwZGF0ZUluZm87CkBAIC0yMDYsOCArMjA0LDYgQEAgcHVibGljOgogICAg
IAogICAgIEluamVjdGVkQnVuZGxlQmFja0ZvcndhcmRMaXN0KiBiYWNrRm9yd2FyZExpc3QoKTsK
ICAgICBEcmF3aW5nQXJlYSogZHJhd2luZ0FyZWEoKSBjb25zdCB7IHJldHVybiBtX2RyYXdpbmdB
cmVhLmdldCgpOyB9Ci0gICAgY29uc3QgUGFnZU92ZXJsYXlDb250cm9sbGVyJiBwYWdlT3Zlcmxh
eUNvbnRyb2xsZXIoKSBjb25zdCB7IHJldHVybiBtX3BhZ2VPdmVybGF5Q29udHJvbGxlcjsgfQot
ICAgIFBhZ2VPdmVybGF5Q29udHJvbGxlciYgcGFnZU92ZXJsYXlDb250cm9sbGVyKCkgeyByZXR1
cm4gbV9wYWdlT3ZlcmxheUNvbnRyb2xsZXI7IH0KICNpZiBFTkFCTEUoQVNZTkNfU0NST0xMSU5H
KQogICAgIFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yKiBzY3JvbGxpbmdDb29yZGluYXRv
cigpIGNvbnN0OwogI2VuZGlmCkBAIC0zMTIsNyArMzA4LDcgQEAgcHVibGljOgogCiAgICAgV2Vi
RnJhbWUqIG1haW5XZWJGcmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWFpbkZyYW1lLmdldCgpOyB9
CiAKLSAgICBXZWJDb3JlOjpGcmFtZSogbWFpbkZyYW1lKCkgY29uc3Q7IC8vIE1heSByZXR1cm4g
MC4KKyAgICBXZWJDb3JlOjpNYWluRnJhbWUqIG1haW5GcmFtZSgpIGNvbnN0OyAvLyBNYXkgcmV0
dXJuIDAuCiAgICAgV2ViQ29yZTo6RnJhbWVWaWV3KiBtYWluRnJhbWVWaWV3KCkgY29uc3Q7IC8v
IE1heSByZXR1cm4gMC4KIAogICAgIFBhc3NSZWZQdHI8V2ViQ29yZTo6UmFuZ2U+IGN1cnJlbnRT
ZWxlY3Rpb25Bc1JhbmdlKCk7CkBAIC00MTYsOCArNDEyLDYgQEAgcHVibGljOgogCiAgICAgYm9v
bCB3aW5kb3dJc0ZvY3VzZWQoKSBjb25zdDsKICAgICBib29sIHdpbmRvd0FuZFdlYlBhZ2VBcmVG
b2N1c2VkKCkgY29uc3Q7Ci0gICAgdm9pZCBpbnN0YWxsUGFnZU92ZXJsYXkoUGFzc1JlZlB0cjxQ
YWdlT3ZlcmxheT4sIFBhZ2VPdmVybGF5OjpGYWRlTW9kZSA9IFBhZ2VPdmVybGF5OjpGYWRlTW9k
ZTo6RG9Ob3RGYWRlKTsKLSAgICB2b2lkIHVuaW5zdGFsbFBhZ2VPdmVybGF5KFBhZ2VPdmVybGF5
KiwgUGFnZU92ZXJsYXk6OkZhZGVNb2RlID0gUGFnZU92ZXJsYXk6OkZhZGVNb2RlOjpEb05vdEZh
ZGUpOwogCiAjaWYgIVBMQVRGT1JNKElPUykKICAgICB2b2lkIHNldEhlYWRlclBhZ2VCYW5uZXIo
UGFzc1JlZlB0cjxQYWdlQmFubmVyPik7CkBAIC04MjIsOSArODE2LDYgQEAgcHVibGljOgogICAg
IFdlYkNvcmU6OlNjcm9sbFBpbm5pbmdCZWhhdmlvciBzY3JvbGxQaW5uaW5nQmVoYXZpb3IoKSB7
IHJldHVybiBtX3Njcm9sbFBpbm5pbmdCZWhhdmlvcjsgfQogICAgIHZvaWQgc2V0U2Nyb2xsUGlu
bmluZ0JlaGF2aW9yKHVpbnQzMl90IC8qIFdlYkNvcmU6OlNjcm9sbFBpbm5pbmdCZWhhdmlvciAq
LyBwaW5uaW5nKTsKIAotICAgIFdLVHlwZVJlZiBwYWdlT3ZlcmxheUNvcHlBY2Nlc3NpYmlsaXR5
QXR0cmlidXRlVmFsdWUoV0tTdHJpbmdSZWYgYXR0cmlidXRlLCBXS1R5cGVSZWYgcGFyYW1ldGVy
KTsKLSAgICBXS0FycmF5UmVmIHBhZ2VPdmVybGF5Q29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVz
TmFtZXMoYm9vbCBwYXJhbWV0ZXJpemVkTmFtZXMpOwotCiAgICAgUGFzc1JlZlB0cjxXZWJDb3Jl
OjpEb2N1bWVudExvYWRlcj4gY3JlYXRlRG9jdW1lbnRMb2FkZXIoV2ViQ29yZTo6RnJhbWUmLCBj
b25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBXZWJDb3JlOjpTdWJzdGl0dXRl
RGF0YSYpOwogCiAgICAgdm9pZCBnZXRCeXRlY29kZVByb2ZpbGUodWludDY0X3QgY2FsbGJhY2tJ
RCk7CkBAIC0xMjc4LDggKzEyNjksNiBAQCBwcml2YXRlOgogI2lmIEVOQUJMRShTRVJWSUNFX0NP
TlRST0xTKSB8fCBFTkFCTEUoVEVMRVBIT05FX05VTUJFUl9ERVRFQ1RJT04pCiAgICAgc3RkOjp1
bmlxdWVfcHRyPFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI+IG1fc2VydmljZXNPdmVybGF5Q29u
dHJvbGxlcjsKICNlbmRpZgotCi0gICAgUGFnZU92ZXJsYXlDb250cm9sbGVyIG1fcGFnZU92ZXJs
YXlDb250cm9sbGVyOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZU92ZXJsYXkuY3BwIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VPdmVybGF5LmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZDJlM2Q1Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VPdmVybGF5LmNwcApAQCAt
MCwwICsxLDExMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJXZWJQYWdlT3ZlcmxheS5oIgorCisjaW5jbHVkZSAiV2ViRnJhbWUuaCIKKyNpbmNsdWRlICJX
ZWJQYWdlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0xheWVyLmg+CisjaW5jbHVkZSA8
V2ViQ29yZS9QYWdlT3ZlcmxheS5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFt
ZXNwYWNlIFdlYktpdCB7CisKK1Bhc3NSZWZQdHI8V2ViUGFnZU92ZXJsYXk+IFdlYlBhZ2VPdmVy
bGF5OjpjcmVhdGUoV2ViUGFnZU92ZXJsYXk6OkNsaWVudCYgY2xpZW50LCBQYWdlT3ZlcmxheTo6
T3ZlcmxheVR5cGUgb3ZlcmxheVR5cGUpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBXZWJQ
YWdlT3ZlcmxheShjbGllbnQsIG92ZXJsYXlUeXBlKSk7Cit9CisKK1dlYlBhZ2VPdmVybGF5OjpX
ZWJQYWdlT3ZlcmxheShXZWJQYWdlT3ZlcmxheTo6Q2xpZW50JiBjbGllbnQsIFBhZ2VPdmVybGF5
OjpPdmVybGF5VHlwZSBvdmVybGF5VHlwZSkKKyAgICA6IG1fb3ZlcmxheShQYWdlT3ZlcmxheTo6
Y3JlYXRlKCp0aGlzLCBvdmVybGF5VHlwZSkpCisgICAgLCBtX2NsaWVudChjbGllbnQpCit7Cit9
CisKK1dlYlBhZ2VPdmVybGF5Ojp+V2ViUGFnZU92ZXJsYXkoKQoreworfQorCit2b2lkIFdlYlBh
Z2VPdmVybGF5OjpzZXROZWVkc0Rpc3BsYXkoY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KQorewor
ICAgIG1fb3ZlcmxheS0+c2V0TmVlZHNEaXNwbGF5KGRpcnR5UmVjdCk7Cit9CisKK3ZvaWQgV2Vi
UGFnZU92ZXJsYXk6OnNldE5lZWRzRGlzcGxheSgpCit7CisgICAgbV9vdmVybGF5LT5zZXROZWVk
c0Rpc3BsYXkoKTsKK30KKwordm9pZCBXZWJQYWdlT3ZlcmxheTo6Y2xlYXIoKQoreworICAgIG1f
b3ZlcmxheS0+Y2xlYXIoKTsKK30KKwordm9pZCBXZWJQYWdlT3ZlcmxheTo6cGFnZU92ZXJsYXlE
ZXN0cm95ZWQoUGFnZU92ZXJsYXkmKQoreworICAgIG1fY2xpZW50LnBhZ2VPdmVybGF5RGVzdHJv
eWVkKCp0aGlzKTsKK30KKwordm9pZCBXZWJQYWdlT3ZlcmxheTo6d2lsbE1vdmVUb1BhZ2UoUGFn
ZU92ZXJsYXkmLCBQYWdlKiBwYWdlKQoreworICAgIG1fY2xpZW50LndpbGxNb3ZlVG9QYWdlKCp0
aGlzLCBwYWdlID8gV2ViUGFnZTo6ZnJvbUNvcmVQYWdlKHBhZ2UpIDogbnVsbHB0cik7Cit9CisK
K3ZvaWQgV2ViUGFnZU92ZXJsYXk6OmRpZE1vdmVUb1BhZ2UoUGFnZU92ZXJsYXkmLCBQYWdlKiBw
YWdlKQoreworICAgIG1fY2xpZW50LmRpZE1vdmVUb1BhZ2UoKnRoaXMsIHBhZ2UgPyBXZWJQYWdl
Ojpmcm9tQ29yZVBhZ2UocGFnZSkgOiBudWxscHRyKTsKK30KKwordm9pZCBXZWJQYWdlT3Zlcmxh
eTo6ZHJhd1JlY3QoUGFnZU92ZXJsYXkmLCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0
IEludFJlY3QmIGRpcnR5UmVjdCkKK3sKKyAgICBtX2NsaWVudC5kcmF3UmVjdCgqdGhpcywgY29u
dGV4dCwgZGlydHlSZWN0KTsKK30KKworYm9vbCBXZWJQYWdlT3ZlcmxheTo6bW91c2VFdmVudChQ
YWdlT3ZlcmxheSYsIGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgZXZlbnQpCit7CisgICAgcmV0
dXJuIG1fY2xpZW50Lm1vdXNlRXZlbnQoKnRoaXMsIGV2ZW50KTsKK30KKwordm9pZCBXZWJQYWdl
T3ZlcmxheTo6ZGlkU2Nyb2xsRnJhbWUoUGFnZU92ZXJsYXkmLCBGcmFtZSYgZnJhbWUpCit7Cisg
ICAgbV9jbGllbnQuZGlkU2Nyb2xsRnJhbWUoKnRoaXMsIFdlYkZyYW1lOjpmcm9tQ29yZUZyYW1l
KGZyYW1lKSk7Cit9CisKK2Jvb2wgV2ViUGFnZU92ZXJsYXk6OmNvcHlBY2Nlc3NpYmlsaXR5QXR0
cmlidXRlU3RyaW5nVmFsdWVGb3JQb2ludChQYWdlT3ZlcmxheSYsIFN0cmluZyBhdHRyaWJ1dGUs
IEZsb2F0UG9pbnQgcGFyYW1ldGVyLCBTdHJpbmcmIHZhbHVlKQoreworICAgIHJldHVybiBtX2Ns
aWVudC5jb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVN0cmluZ1ZhbHVlRm9yUG9pbnQoKnRoaXMs
IGF0dHJpYnV0ZSwgcGFyYW1ldGVyLCB2YWx1ZSk7Cit9CisKK2Jvb2wgV2ViUGFnZU92ZXJsYXk6
OmNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlQm9vbFZhbHVlRm9yUG9pbnQoUGFnZU92ZXJsYXkm
LCBTdHJpbmcgYXR0cmlidXRlLCBGbG9hdFBvaW50IHBhcmFtZXRlciwgYm9vbCYgdmFsdWUpCit7
CisgICAgcmV0dXJuIG1fY2xpZW50LmNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlQm9vbFZhbHVl
Rm9yUG9pbnQoKnRoaXMsIGF0dHJpYnV0ZSwgcGFyYW1ldGVyLCB2YWx1ZSk7Cit9CisKK1ZlY3Rv
cjxTdHJpbmc+IFdlYlBhZ2VPdmVybGF5Ojpjb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZU5hbWVz
KFBhZ2VPdmVybGF5JiwgYm9vbCBwYXJhbWV0ZXJpemVkTmFtZXMpCit7CisgICAgcmV0dXJuIG1f
Y2xpZW50LmNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlTmFtZXMoKnRoaXMsIHBhcmFtZXRlcml6
ZWROYW1lcyk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VPdmVybGF5LmggYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZU92ZXJsYXkuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi4wNmRkZTE2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VPdmVybGF5LmgKQEAgLTAsMCArMSw5MiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViUGFnZU92ZXJsYXlfaAorI2RlZmluZSBXZWJQYWdl
T3ZlcmxheV9oCisKKyNpbmNsdWRlICJBUElPYmplY3QuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0Zs
b2F0UG9pbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ludFJlY3QuaD4KKyNpbmNsdWRlIDxXZWJD
b3JlL1BhZ2VPdmVybGF5Lmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKworbmFtZXNw
YWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYkZyYW1lOworY2xhc3MgV2ViUGFnZTsKKworY2xhc3Mg
V2ViUGFnZU92ZXJsYXkgOiBwdWJsaWMgQVBJOjpPYmplY3RJbXBsPEFQSTo6T2JqZWN0OjpUeXBl
OjpCdW5kbGVQYWdlT3ZlcmxheT4sIHByaXZhdGUgV2ViQ29yZTo6UGFnZU92ZXJsYXk6OkNsaWVu
dCB7CitwdWJsaWM6CisgICAgY2xhc3MgQ2xpZW50IHsKKyAgICBwcm90ZWN0ZWQ6CisgICAgICAg
IHZpcnR1YWwgfkNsaWVudCgpIHsgfQorCisgICAgcHVibGljOgorICAgICAgICB2aXJ0dWFsIHZv
aWQgcGFnZU92ZXJsYXlEZXN0cm95ZWQoV2ViUGFnZU92ZXJsYXkmKSA9IDA7CisgICAgICAgIHZp
cnR1YWwgdm9pZCB3aWxsTW92ZVRvUGFnZShXZWJQYWdlT3ZlcmxheSYsIFdlYlBhZ2UqKSA9IDA7
CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRNb3ZlVG9QYWdlKFdlYlBhZ2VPdmVybGF5JiwgV2Vi
UGFnZSopID0gMDsKKyAgICAgICAgdmlydHVhbCB2b2lkIGRyYXdSZWN0KFdlYlBhZ2VPdmVybGF5
JiwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgZGly
dHlSZWN0KSA9IDA7CisgICAgICAgIHZpcnR1YWwgYm9vbCBtb3VzZUV2ZW50KFdlYlBhZ2VPdmVy
bGF5JiwgY29uc3QgV2ViQ29yZTo6UGxhdGZvcm1Nb3VzZUV2ZW50JikgPSAwOworICAgICAgICB2
aXJ0dWFsIHZvaWQgZGlkU2Nyb2xsRnJhbWUoV2ViUGFnZU92ZXJsYXkmLCBXZWJGcmFtZSopIHsg
fQorCisgICAgICAgIHZpcnR1YWwgYm9vbCBjb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVN0cmlu
Z1ZhbHVlRm9yUG9pbnQoV2ViUGFnZU92ZXJsYXkmLCBTdHJpbmcgLyogYXR0cmlidXRlICovLCBX
ZWJDb3JlOjpGbG9hdFBvaW50IC8qIHBhcmFtZXRlciAqLywgU3RyaW5nJiB2YWx1ZSkgeyByZXR1
cm4gZmFsc2U7IH0KKyAgICAgICAgdmlydHVhbCBib29sIGNvcHlBY2Nlc3NpYmlsaXR5QXR0cmli
dXRlQm9vbFZhbHVlRm9yUG9pbnQoV2ViUGFnZU92ZXJsYXkmLCBTdHJpbmcgLyogYXR0cmlidXRl
ICovLCBXZWJDb3JlOjpGbG9hdFBvaW50IC8qIHBhcmFtZXRlciAqLywgYm9vbCYgdmFsdWUpIHsg
cmV0dXJuIGZhbHNlOyB9CisgICAgICAgIHZpcnR1YWwgVmVjdG9yPFN0cmluZz4gY29weUFjY2Vz
c2liaWxpdHlBdHRyaWJ1dGVOYW1lcyhXZWJQYWdlT3ZlcmxheSYsIGJvb2wgLyogcGFyYW1ldGVy
aXplZE5hbWVzICovKSB7IHJldHVybiBWZWN0b3I8U3RyaW5nPigpOyB9CisgICAgfTsKKworICAg
IHN0YXRpYyBQYXNzUmVmUHRyPFdlYlBhZ2VPdmVybGF5PiBjcmVhdGUoQ2xpZW50JiwgV2ViQ29y
ZTo6UGFnZU92ZXJsYXk6Ok92ZXJsYXlUeXBlID0gV2ViQ29yZTo6UGFnZU92ZXJsYXk6Ok92ZXJs
YXlUeXBlOjpWaWV3KTsKKyAgICB2aXJ0dWFsIH5XZWJQYWdlT3ZlcmxheSgpOworCisgICAgdm9p
ZCBzZXROZWVkc0Rpc3BsYXkoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgZGlydHlSZWN0KTsKKyAg
ICB2b2lkIHNldE5lZWRzRGlzcGxheSgpOworCisgICAgdm9pZCBjbGVhcigpOworCisgICAgV2Vi
Q29yZTo6UGFnZU92ZXJsYXkqIGNvcmVPdmVybGF5KCkgY29uc3QgeyByZXR1cm4gbV9vdmVybGF5
LmdldCgpOyB9CisgICAgQ2xpZW50JiBjbGllbnQoKSBjb25zdCB7IHJldHVybiBtX2NsaWVudDsg
fQorCitwcml2YXRlOgorICAgIFdlYlBhZ2VPdmVybGF5KENsaWVudCYsIFdlYkNvcmU6OlBhZ2VP
dmVybGF5OjpPdmVybGF5VHlwZSk7CisKKyAgICAvLyBXZWJDb3JlOjpQYWdlT3ZlcmxheTo6Q2xp
ZW50CisgICAgdmlydHVhbCB2b2lkIHBhZ2VPdmVybGF5RGVzdHJveWVkKFdlYkNvcmU6OlBhZ2VP
dmVybGF5Jikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHdpbGxNb3ZlVG9QYWdlKFdlYkNv
cmU6OlBhZ2VPdmVybGF5JiwgV2ViQ29yZTo6UGFnZSopIG92ZXJyaWRlOworICAgIHZpcnR1YWwg
dm9pZCBkaWRNb3ZlVG9QYWdlKFdlYkNvcmU6OlBhZ2VPdmVybGF5JiwgV2ViQ29yZTo6UGFnZSop
IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBkcmF3UmVjdChXZWJDb3JlOjpQYWdlT3Zlcmxh
eSYsIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGRp
cnR5UmVjdCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29sIG1vdXNlRXZlbnQoV2ViQ29yZTo6
UGFnZU92ZXJsYXkmLCBjb25zdCBXZWJDb3JlOjpQbGF0Zm9ybU1vdXNlRXZlbnQmKSBvdmVycmlk
ZTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkU2Nyb2xsRnJhbWUoV2ViQ29yZTo6UGFnZU92ZXJsYXkm
LCBXZWJDb3JlOjpGcmFtZSYpIG92ZXJyaWRlOworCisgICAgdmlydHVhbCBib29sIGNvcHlBY2Nl
c3NpYmlsaXR5QXR0cmlidXRlU3RyaW5nVmFsdWVGb3JQb2ludChXZWJDb3JlOjpQYWdlT3Zlcmxh
eSYsIFN0cmluZyAvKiBhdHRyaWJ1dGUgKi8sIFdlYkNvcmU6OkZsb2F0UG9pbnQgLyogcGFyYW1l
dGVyICovLCBTdHJpbmcmIHZhbHVlKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wgY29weUFj
Y2Vzc2liaWxpdHlBdHRyaWJ1dGVCb29sVmFsdWVGb3JQb2ludChXZWJDb3JlOjpQYWdlT3Zlcmxh
eSYsIFN0cmluZyAvKiBhdHRyaWJ1dGUgKi8sIFdlYkNvcmU6OkZsb2F0UG9pbnQgLyogcGFyYW1l
dGVyICovLCBib29sJiB2YWx1ZSkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBWZWN0b3I8U3RyaW5n
PiBjb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZU5hbWVzKFdlYkNvcmU6OlBhZ2VPdmVybGF5Jiwg
Ym9vbCAvKiBwYXJhbWV0ZXJpemVkTmFtZXMgKi8pIG92ZXJyaWRlOworCisKKyAgICBSZWZQdHI8
V2ViQ29yZTo6UGFnZU92ZXJsYXk+IG1fb3ZlcmxheTsKKyAgICBDbGllbnQmIG1fY2xpZW50Owor
fTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBXZWJQYWdlT3ZlcmxheV9o
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL0ZpbmRD
b250cm9sbGVySU9TLm1tIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9G
aW5kQ29udHJvbGxlcklPUy5tbQppbmRleCAwOTA3YmRmLi42OGM5ZTdhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL0ZpbmRDb250cm9sbGVySU9TLm1t
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvRmluZENvbnRyb2xs
ZXJJT1MubW0KQEAgLTM2LDYgKzM2LDcgQEAKICNpbXBvcnQgPFdlYkNvcmUvR3JhcGhpY3NDb250
ZXh0Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL01haW5GcmFtZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9Q
YWdlLmg+CisjaW1wb3J0IDxXZWJDb3JlL1BhZ2VPdmVybGF5Q29udHJvbGxlci5oPgogCiB1c2lu
ZyBuYW1lc3BhY2UgV2ViQ29yZTsKIApAQCAtNTIsMTIgKzUzLDEyIEBAIHN0YXRpYyBDb2xvciBo
aWdobGlnaHRDb2xvcigpCiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi12b2lkIEZpbmRJbmRpY2F0
b3JPdmVybGF5Q2xpZW50SU9TOjpkcmF3UmVjdChQYWdlT3ZlcmxheSogb3ZlcmxheSwgV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBkaXJ0
eVJlY3QpCit2b2lkIEZpbmRJbmRpY2F0b3JPdmVybGF5Q2xpZW50SU9TOjpkcmF3UmVjdChQYWdl
T3ZlcmxheSYgb3ZlcmxheSwgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBJbnRSZWN0
JiBkaXJ0eVJlY3QpCiB7CiAgICAgLy8gRklYTUU6IFN1cHBvcnQgbXVsdGlwbGUgdGV4dCByZWN0
cy4KIAotICAgIEludFJlY3Qgb3ZlcmxheUZyYW1lID0gb3ZlcmxheS0+ZnJhbWUoKTsKLSAgICBJ
bnRSZWN0IG92ZXJsYXlCb3VuZHMgPSBvdmVybGF5LT5ib3VuZHMoKTsKKyAgICBJbnRSZWN0IG92
ZXJsYXlGcmFtZSA9IG92ZXJsYXkuZnJhbWUoKTsKKyAgICBJbnRSZWN0IG92ZXJsYXlCb3VuZHMg
PSBvdmVybGF5LmJvdW5kcygpOwogCiAgICAgewogICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0
ZVNhdmVyIHN0YXRlU2F2ZXIoY29udGV4dCk7CkBAIC04NSwxMSArODYsMTEgQEAgYm9vbCBGaW5k
Q29udHJvbGxlcjo6dXBkYXRlRmluZEluZGljYXRvcihGcmFtZSYgc2VsZWN0ZWRGcmFtZSwgYm9v
bCBpc1Nob3dpbmdPdmUKICAgICBtYXRjaFJlY3QuaW5mbGF0ZVkodG90YWxWZXJ0aWNhbE1hcmdp
bik7CiAKICAgICBpZiAobV9maW5kSW5kaWNhdG9yT3ZlcmxheSkKLSAgICAgICAgbV93ZWJQYWdl
LT51bmluc3RhbGxQYWdlT3ZlcmxheShtX2ZpbmRJbmRpY2F0b3JPdmVybGF5LmdldCgpKTsKKyAg
ICAgICAgbV93ZWJQYWdlLT5tYWluRnJhbWUoKS0+cGFnZU92ZXJsYXlDb250cm9sbGVyKCkudW5p
bnN0YWxsUGFnZU92ZXJsYXkobV9maW5kSW5kaWNhdG9yT3ZlcmxheS5nZXQoKSwgUGFnZU92ZXJs
YXk6OkZhZGVNb2RlOjpEb05vdEZhZGUpOwogCiAgICAgbV9maW5kSW5kaWNhdG9yT3ZlcmxheUNs
aWVudCA9IHN0ZDo6bWFrZV91bmlxdWU8RmluZEluZGljYXRvck92ZXJsYXlDbGllbnRJT1M+KHNl
bGVjdGVkRnJhbWUpOwotICAgIG1fZmluZEluZGljYXRvck92ZXJsYXkgPSBQYWdlT3ZlcmxheTo6
Y3JlYXRlKG1fZmluZEluZGljYXRvck92ZXJsYXlDbGllbnQuZ2V0KCksIFBhZ2VPdmVybGF5OjpP
dmVybGF5VHlwZTo6RG9jdW1lbnQpOwotICAgIG1fd2ViUGFnZS0+aW5zdGFsbFBhZ2VPdmVybGF5
KG1fZmluZEluZGljYXRvck92ZXJsYXkpOworICAgIG1fZmluZEluZGljYXRvck92ZXJsYXkgPSBQ
YWdlT3ZlcmxheTo6Y3JlYXRlKCptX2ZpbmRJbmRpY2F0b3JPdmVybGF5Q2xpZW50LCBQYWdlT3Zl
cmxheTo6T3ZlcmxheVR5cGU6OkRvY3VtZW50KTsKKyAgICBtX3dlYlBhZ2UtPm1haW5GcmFtZSgp
LT5wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKS5pbnN0YWxsUGFnZU92ZXJsYXkobV9maW5kSW5kaWNh
dG9yT3ZlcmxheSwgUGFnZU92ZXJsYXk6OkZhZGVNb2RlOjpEb05vdEZhZGUpOwogCiAgICAgbV9m
aW5kSW5kaWNhdG9yT3ZlcmxheS0+c2V0RnJhbWUobWF0Y2hSZWN0KTsKICAgICBtX2ZpbmRJbmRp
Y2F0b3JPdmVybGF5LT5zZXROZWVkc0Rpc3BsYXkoKTsKQEAgLTEwNiw3ICsxMDcsNyBAQCB2b2lk
IEZpbmRDb250cm9sbGVyOjpoaWRlRmluZEluZGljYXRvcigpCiAgICAgaWYgKCFtX2lzU2hvd2lu
Z0ZpbmRJbmRpY2F0b3IpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fd2ViUGFnZS0+dW5pbnN0
YWxsUGFnZU92ZXJsYXkobV9maW5kSW5kaWNhdG9yT3ZlcmxheS5nZXQoKSk7CisgICAgbV93ZWJQ
YWdlLT5tYWluRnJhbWUoKS0+cGFnZU92ZXJsYXlDb250cm9sbGVyKCkudW5pbnN0YWxsUGFnZU92
ZXJsYXkobV9maW5kSW5kaWNhdG9yT3ZlcmxheS5nZXQoKSwgUGFnZU92ZXJsYXk6OkZhZGVNb2Rl
OjpEb05vdEZhZGUpOwogICAgIG1fZmluZEluZGljYXRvck92ZXJsYXkgPSBudWxscHRyOwogICAg
IG1faXNTaG93aW5nRmluZEluZGljYXRvciA9IGZhbHNlOwogICAgIG1fZm91bmRTdHJpbmdNYXRj
aEluZGV4ID0gLTE7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvaW9zL0ZpbmRJbmRpY2F0b3JPdmVybGF5Q2xpZW50SU9TLmggYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL0ZpbmRJbmRpY2F0b3JPdmVybGF5Q2xpZW50SU9TLmgKaW5k
ZXggMzEwMTc2Ny4uNDI5MjI4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL2lvcy9GaW5kSW5kaWNhdG9yT3ZlcmxheUNsaWVudElPUy5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvRmluZEluZGljYXRvck92ZXJsYXlDbGll
bnRJT1MuaApAQCAtMjYsMTMgKzI2LDEzIEBACiAjaWZuZGVmIEZpbmRJbmRpY2F0b3JPdmVybGF5
Q2xpZW50SU9TX2gKICNkZWZpbmUgRmluZEluZGljYXRvck92ZXJsYXlDbGllbnRJT1NfaAogCi0j
aW1wb3J0ICJQYWdlT3ZlcmxheS5oIgogI2ltcG9ydCA8V2ViQ29yZS9GcmFtZS5oPgogI2ltcG9y
dCA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvUGFnZU92ZXJs
YXkuaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLWNsYXNzIEZpbmRJbmRpY2F0b3JPdmVybGF5
Q2xpZW50SU9TIDogcHVibGljIFBhZ2VPdmVybGF5OjpDbGllbnQgeworY2xhc3MgRmluZEluZGlj
YXRvck92ZXJsYXlDbGllbnRJT1MgOiBwdWJsaWMgV2ViQ29yZTo6UGFnZU92ZXJsYXk6OkNsaWVu
dCB7CiBwdWJsaWM6CiAgICAgRmluZEluZGljYXRvck92ZXJsYXlDbGllbnRJT1MoV2ViQ29yZTo6
RnJhbWUmIGZyYW1lKQogICAgICAgICA6IG1fZnJhbWUoZnJhbWUpCkBAIC00MCwxMSArNDAsMTEg
QEAgcHVibGljOgogICAgIH0KIAogcHJpdmF0ZToKLSAgICB2aXJ0dWFsIHZvaWQgcGFnZU92ZXJs
YXlEZXN0cm95ZWQoUGFnZU92ZXJsYXkqKSBvdmVycmlkZSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQg
d2lsbE1vdmVUb1dlYlBhZ2UoUGFnZU92ZXJsYXkqLCBXZWJQYWdlKikgb3ZlcnJpZGUgeyB9Ci0g
ICAgdmlydHVhbCB2b2lkIGRpZE1vdmVUb1dlYlBhZ2UoUGFnZU92ZXJsYXkqLCBXZWJQYWdlKikg
b3ZlcnJpZGUgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGRyYXdSZWN0KFBhZ2VPdmVybGF5KiwgV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0JiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgZGlydHlSZWN0
KSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIGJvb2wgbW91c2VFdmVudChQYWdlT3ZlcmxheSosIGNv
bnN0IFdlYk1vdXNlRXZlbnQmKSBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1
YWwgdm9pZCBwYWdlT3ZlcmxheURlc3Ryb3llZChXZWJDb3JlOjpQYWdlT3ZlcmxheSYpIG92ZXJy
aWRlIHsgfQorICAgIHZpcnR1YWwgdm9pZCB3aWxsTW92ZVRvUGFnZShXZWJDb3JlOjpQYWdlT3Zl
cmxheSYsIFdlYkNvcmU6OlBhZ2UqKSBvdmVycmlkZSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGlk
TW92ZVRvUGFnZShXZWJDb3JlOjpQYWdlT3ZlcmxheSYsIFdlYkNvcmU6OlBhZ2UqKSBvdmVycmlk
ZSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZHJhd1JlY3QoV2ViQ29yZTo6UGFnZU92ZXJsYXkmLCBX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBkaXJ0eVJl
Y3QpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBtb3VzZUV2ZW50KFdlYkNvcmU6OlBhZ2VP
dmVybGF5JiwgY29uc3QgV2ViQ29yZTo6UGxhdGZvcm1Nb3VzZUV2ZW50Jikgb3ZlcnJpZGUgeyBy
ZXR1cm4gZmFsc2U7IH0KIAogICAgIFdlYkNvcmU6OkZyYW1lJiBtX2ZyYW1lOwogfTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvUmVtb3RlTGF5ZXJU
cmVlRHJhd2luZ0FyZWEuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMv
UmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWEuaAppbmRleCAxY2I1MTAwLi5jNTJhM2JmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1JlbW90ZUxheWVy
VHJlZURyYXdpbmdBcmVhLmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L21hYy9SZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYS5oCkBAIC02Nyw2ICs2Nyw3IEBAIHByaXZh
dGU6CiAgICAgdmlydHVhbCB2b2lkIHNldFJvb3RDb21wb3NpdGluZ0xheWVyKFdlYkNvcmU6Okdy
YXBoaWNzTGF5ZXIqKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVDb21wb3Np
dGluZ0xheWVyRmx1c2goKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVDb21w
b3NpdGluZ0xheWVyRmx1c2hJbW1lZGlhdGVseSgpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9p
ZCBhdHRhY2hWaWV3T3ZlcmxheUdyYXBoaWNzTGF5ZXIoV2ViQ29yZTo6RnJhbWUqLCBXZWJDb3Jl
OjpHcmFwaGljc0xheWVyKikgb3ZlcnJpZGU7CiAKICAgICB2aXJ0dWFsIHZvaWQgYWRkVHJhbnNh
Y3Rpb25DYWxsYmFja0lEKHVpbnQ2NF90IGNhbGxiYWNrSUQpIG92ZXJyaWRlOwogCkBAIC0xMDcs
NiArMTA4LDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wgYWRqdXN0TGF5ZXJGbHVzaFRo
cm90dGxpbmcoV2ViQ29yZTo6TGF5ZXJGbHVzaFRocm90dGxlU3RhdGU6OkZsYWdzKSBvdmVycmlk
ZTsKIAogICAgIHZvaWQgdXBkYXRlU2Nyb2xsZWRFeHBvc2VkUmVjdCgpOworICAgIHZvaWQgdXBk
YXRlUm9vdExheWVycygpOwogCiAgICAgdm9pZCBsYXllckZsdXNoVGltZXJGaXJlZChXZWJDb3Jl
OjpUaW1lcjxSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYT4qKTsKICAgICB2b2lkIGZsdXNoTGF5
ZXJzKCk7CkBAIC0xNjAsNiArMTYyLDkgQEAgcHJpdmF0ZToKIAogICAgIHVpbnQ2NF90IG1fY3Vy
cmVudFRyYW5zYWN0aW9uSUQ7CiAgICAgVmVjdG9yPFJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9u
OjpUcmFuc2FjdGlvbkNhbGxiYWNrSUQ+IG1fcGVuZGluZ0NhbGxiYWNrSURzOworCisgICAgV2Vi
Q29yZTo6R3JhcGhpY3NMYXllciogbV9jb250ZW50TGF5ZXI7CisgICAgV2ViQ29yZTo6R3JhcGhp
Y3NMYXllciogbV92aWV3T3ZlcmxheVJvb3RMYXllcjsKIH07CiAKIERSQVdJTkdfQVJFQV9UWVBF
X0NBU1RTKFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhLCB0eXBlKCkgPT0gRHJhd2luZ0FyZWFU
eXBlUmVtb3RlTGF5ZXJUcmVlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9tYWMvUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWEubW0gYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1JlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhLm1t
CmluZGV4IDM3Yzg5NDcuLjU3OGQzOTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9tYWMvUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWEubW0KKysrIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9SZW1vdGVMYXllclRyZWVEcmF3aW5n
QXJlYS5tbQpAQCAtNDAsNiArNDAsNyBAQAogI2ltcG9ydCA8V2ViQ29yZS9GcmFtZS5oPgogI2lt
cG9ydCA8V2ViQ29yZS9GcmFtZVZpZXcuaD4KICNpbXBvcnQgPFdlYkNvcmUvTWFpbkZyYW1lLmg+
CisjaW1wb3J0IDxXZWJDb3JlL1BhZ2VPdmVybGF5Q29udHJvbGxlci5oPgogI2ltcG9ydCA8V2Vi
Q29yZS9SZW5kZXJMYXllckNvbXBvc2l0b3IuaD4KICNpbXBvcnQgPFdlYkNvcmUvUmVuZGVyVmll
dy5oPgogI2ltcG9ydCA8V2ViQ29yZS9TZXR0aW5ncy5oPgpAQCAtNjYsNiArNjcsOCBAQCBSZW1v
dGVMYXllclRyZWVEcmF3aW5nQXJlYTo6UmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWEoV2ViUGFn
ZSYgd2ViUGFnZSwgY29uc3QgVwogICAgICwgbV9oYWRGbHVzaERlZmVycmVkV2hpbGVXYWl0aW5n
Rm9yQmFja2luZ1N0b3JlU3dhcChmYWxzZSkKICAgICAsIG1fZGlzcGxheVJlZnJlc2hNb25pdG9y
c1RvTm90aWZ5KG51bGxwdHIpCiAgICAgLCBtX2N1cnJlbnRUcmFuc2FjdGlvbklEKDApCisgICAg
LCBtX2NvbnRlbnRMYXllcihudWxscHRyKQorICAgICwgbV92aWV3T3ZlcmxheVJvb3RMYXllcihu
dWxscHRyKQogewogICAgIHdlYlBhZ2UuY29yZVBhZ2UoKS0+c2V0dGluZ3MoKS5zZXRGb3JjZUNv
bXBvc2l0aW5nTW9kZSh0cnVlKTsKICNpZiBQTEFURk9STShJT1MpCkBAIC0xMTMsMTUgKzExNiwz
MSBAQCB2b2lkIFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhOjp3aWxsRGVzdHJveURpc3BsYXlS
ZWZyZXNoTW9uaXRvcihEaXNwbGF5UmVmcmVzaAogICAgICAgICBtX2Rpc3BsYXlSZWZyZXNoTW9u
aXRvcnNUb05vdGlmeS0+cmVtb3ZlKHJlbW90ZU1vbml0b3IpOwogfQogCi12b2lkIFJlbW90ZUxh
eWVyVHJlZURyYXdpbmdBcmVhOjpzZXRSb290Q29tcG9zaXRpbmdMYXllcihHcmFwaGljc0xheWVy
KiByb290TGF5ZXIpCit2b2lkIFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhOjp1cGRhdGVSb290
TGF5ZXJzKCkKIHsKICAgICBWZWN0b3I8R3JhcGhpY3NMYXllcio+IGNoaWxkcmVuOwotICAgIGlm
IChyb290TGF5ZXIpIHsKLSAgICAgICAgY2hpbGRyZW4uYXBwZW5kKHJvb3RMYXllcik7Ci0gICAg
ICAgIGNoaWxkcmVuLmFwcGVuZChtX3dlYlBhZ2UucGFnZU92ZXJsYXlDb250cm9sbGVyKCkudmll
d092ZXJsYXlSb290TGF5ZXIoKSk7CisgICAgaWYgKG1fY29udGVudExheWVyKSB7CisgICAgICAg
IGNoaWxkcmVuLmFwcGVuZChtX2NvbnRlbnRMYXllcik7CisgICAgICAgIGlmIChtX3ZpZXdPdmVy
bGF5Um9vdExheWVyKQorICAgICAgICAgICAgY2hpbGRyZW4uYXBwZW5kKG1fdmlld092ZXJsYXlS
b290TGF5ZXIpOwogICAgIH0KKwogICAgIG1fcm9vdExheWVyLT5zZXRDaGlsZHJlbihjaGlsZHJl
bik7Cit9CisKK3ZvaWQgUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWE6OmF0dGFjaFZpZXdPdmVy
bGF5R3JhcGhpY3NMYXllcihGcmFtZSogZnJhbWUsIEdyYXBoaWNzTGF5ZXIqIHZpZXdPdmVybGF5
Um9vdExheWVyKQoreworICAgIGlmICghZnJhbWUtPmlzTWFpbkZyYW1lKCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIG1fdmlld092ZXJsYXlSb290TGF5ZXIgPSB2aWV3T3ZlcmxheVJvb3RMYXll
cjsKKyAgICB1cGRhdGVSb290TGF5ZXJzKCk7Cit9CiAKK3ZvaWQgUmVtb3RlTGF5ZXJUcmVlRHJh
d2luZ0FyZWE6OnNldFJvb3RDb21wb3NpdGluZ0xheWVyKEdyYXBoaWNzTGF5ZXIqIHJvb3RMYXll
cikKK3sKKyAgICBtX2NvbnRlbnRMYXllciA9IHJvb3RMYXllcjsKKyAgICB1cGRhdGVSb290TGF5
ZXJzKCk7CiAgICAgc2NoZWR1bGVDb21wb3NpdGluZ0xheWVyRmx1c2goKTsKIH0KIApAQCAtMjM0
LDggKzI1Myw2IEBAIHZvaWQgUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWE6OnVwZGF0ZVNjcm9s
bGVkRXhwb3NlZFJlY3QoKQogI2VuZGlmCiAKICAgICBmcmFtZVZpZXctPnNldEV4cG9zZWRSZWN0
KG1fc2Nyb2xsZWRFeHBvc2VkUmVjdCk7Ci0KLSAgICBtX3dlYlBhZ2UucGFnZU92ZXJsYXlDb250
cm9sbGVyKCkuZGlkQ2hhbmdlRXhwb3NlZFJlY3QoKTsKIH0KIAogVGlsZWRCYWNraW5nKiBSZW1v
dGVMYXllclRyZWVEcmF3aW5nQXJlYTo6bWFpbkZyYW1lVGlsZWRCYWNraW5nKCkgY29uc3QKQEAg
LTMyMSw4ICszMzgsMTMgQEAgdm9pZCBSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYTo6Zmx1c2hM
YXllcnMoKQogCiAgICAgRmxvYXRSZWN0IHZpc2libGVSZWN0KEZsb2F0UG9pbnQoKSwgbV92aWV3
U2l6ZSk7CiAgICAgdmlzaWJsZVJlY3QuaW50ZXJzZWN0KG1fc2Nyb2xsZWRFeHBvc2VkUmVjdCk7
Ci0gICAgbV93ZWJQYWdlLnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLmZsdXNoUGFnZU92ZXJsYXlM
YXllcnModmlzaWJsZVJlY3QpOworCiAgICAgbV93ZWJQYWdlLm1haW5GcmFtZVZpZXcoKS0+Zmx1
c2hDb21wb3NpdGluZ1N0YXRlSW5jbHVkaW5nU3ViZnJhbWVzKCk7CisKKyAgICAvLyBCZWNhdXNl
IG91ciB2aWV3LXJlbGF0aXZlIG92ZXJsYXkgcm9vdCBsYXllciBpcyBub3QgYXR0YWNoZWQgdG8g
dGhlIEZyYW1lVmlldydzIEdyYXBoaWNzTGF5ZXIgdHJlZSwgd2UgbmVlZCB0byBmbHVzaCBpdCBt
YW51YWxseS4KKyAgICBpZiAobV92aWV3T3ZlcmxheVJvb3RMYXllcikKKyAgICAgICAgbV92aWV3
T3ZlcmxheVJvb3RMYXllci0+Zmx1c2hDb21wb3NpdGluZ1N0YXRlKHZpc2libGVSZWN0KTsKKwog
ICAgIG1fcm9vdExheWVyLT5mbHVzaENvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCk7
CiAKICAgICAvLyBGSVhNRTogTWluaW1pemUgdGhlc2UgdHJhbnNhY3Rpb25zIGlmIG5vdGhpbmcg
Y2hhbmdlZC4KQEAgLTQxMCw3ICs0MzIsNiBAQCB2b2lkIFJlbW90ZUxheWVyVHJlZURyYXdpbmdB
cmVhOjpkaWRVcGRhdGUoKQogdm9pZCBSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYTo6bWFpbkZy
YW1lQ29udGVudFNpemVDaGFuZ2VkKGNvbnN0IEludFNpemUmIGNvbnRlbnRzU2l6ZSkKIHsKICAg
ICBtX3Jvb3RMYXllci0+c2V0U2l6ZShjb250ZW50c1NpemUpOwotICAgIG1fd2ViUGFnZS5wYWdl
T3ZlcmxheUNvbnRyb2xsZXIoKS5kaWRDaGFuZ2VEb2N1bWVudFNpemUoKTsKIH0KIAogYm9vbCBS
ZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYTo6bWFya0xheWVyc1ZvbGF0aWxlSW1tZWRpYXRlbHlJ
ZlBvc3NpYmxlKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9tYWMvU2VydmljZXNPdmVybGF5Q29udHJvbGxlci5tbSBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9tYWMvU2VydmljZXNPdmVybGF5Q29udHJvbGxlci5tbQppbmRleCBmYjY4
YjdhLi41YTViZDkyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvbWFjL1NlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIubW0KKysrIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9TZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyLm1tCkBAIC00
Miw2ICs0Miw3IEBACiAjaW1wb3J0IDxXZWJDb3JlL0dyYXBoaWNzTGF5ZXIuaD4KICNpbXBvcnQg
PFdlYkNvcmUvR3JhcGhpY3NMYXllckNBLmg+CiAjaW1wb3J0IDxXZWJDb3JlL01haW5GcmFtZS5o
PgorI2ltcG9ydCA8V2ViQ29yZS9QYWdlT3ZlcmxheUNvbnRyb2xsZXIuaD4KICNpbXBvcnQgPFdl
YkNvcmUvUGxhdGZvcm1DQUFuaW1hdGlvbk1hYy5oPgogI2ltcG9ydCA8V2ViQ29yZS9Tb2Z0TGlu
a2luZy5oPgogCkBAIC0yMjUsMjMgKzIyNiwyMyBAQCBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVy
Ojp+U2VydmljZXNPdmVybGF5Q29udHJvbGxlcigpCiAgICAgICAgIGhpZ2hsaWdodC0+aW52YWxp
ZGF0ZSgpOwogfQogCi12b2lkIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OnBhZ2VPdmVybGF5
RGVzdHJveWVkKFBhZ2VPdmVybGF5KikKK3ZvaWQgU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6
cGFnZU92ZXJsYXlEZXN0cm95ZWQoUGFnZU92ZXJsYXkmKQogewogICAgIC8vIEJlZm9yZSB0aGUg
b3ZlcmxheSBpcyBkZXN0cm95ZWQsIGl0IHNob3VsZCBoYXZlIG1vdmVkIG91dCBvZiB0aGUgV2Vi
UGFnZSwKICAgICAvLyBhdCB3aGljaCBwb2ludCB3ZSBhbHJlYWR5IGNsZWFyZWQgb3VyIGJhY2sg
cG9pbnRlci4KICAgICBBU1NFUlQoIW1fc2VydmljZXNPdmVybGF5KTsKIH0KIAotdm9pZCBTZXJ2
aWNlc092ZXJsYXlDb250cm9sbGVyOjp3aWxsTW92ZVRvV2ViUGFnZShQYWdlT3ZlcmxheSosIFdl
YlBhZ2UqIHdlYlBhZ2UpCit2b2lkIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OndpbGxNb3Zl
VG9QYWdlKFBhZ2VPdmVybGF5JiwgUGFnZSogcGFnZSkKIHsKLSAgICBpZiAod2ViUGFnZSkKKyAg
ICBpZiAocGFnZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgQVNTRVJUKG1fc2VydmljZXNPdmVy
bGF5KTsKICAgICBtX3NlcnZpY2VzT3ZlcmxheSA9IG51bGxwdHI7CiB9CiAKLXZvaWQgU2Vydmlj
ZXNPdmVybGF5Q29udHJvbGxlcjo6ZGlkTW92ZVRvV2ViUGFnZShQYWdlT3ZlcmxheSosIFdlYlBh
Z2UqKQordm9pZCBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpkaWRNb3ZlVG9QYWdlKFBhZ2VP
dmVybGF5JiwgUGFnZSopCiB7CiB9CiAKQEAgLTQ0Nyw3ICs0NDgsNyBAQCB2b2lkIFNlcnZpY2Vz
T3ZlcmxheUNvbnRyb2xsZXI6OmRldGVybWluZUFjdGl2ZUhpZ2hsaWdodFRpbWVyRmlyZWQoVGlt
ZXI8U2VydmljZQogICAgIGRldGVybWluZUFjdGl2ZUhpZ2hsaWdodChtb3VzZUlzT3ZlckJ1dHRv
bik7CiB9CiAKLXZvaWQgU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6ZHJhd1JlY3QoUGFnZU92
ZXJsYXkqIG92ZXJsYXksIEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBJ
bnRSZWN0JiBkaXJ0eVJlY3QpCit2b2lkIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OmRyYXdS
ZWN0KFBhZ2VPdmVybGF5JiBvdmVybGF5LCBHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4
dCwgY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KQogewogfQogCkBAIC01ODMsNyArNTg0LDcgQEAg
dm9pZCBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpkaWRSZWJ1aWxkUG90ZW50aWFsSGlnaGxp
Z2h0cygpCiB7CiAgICAgaWYgKG1fcG90ZW50aWFsSGlnaGxpZ2h0cy5pc0VtcHR5KCkpIHsKICAg
ICAgICAgaWYgKG1fc2VydmljZXNPdmVybGF5KQotICAgICAgICAgICAgbV93ZWJQYWdlLnVuaW5z
dGFsbFBhZ2VPdmVybGF5KG1fc2VydmljZXNPdmVybGF5KTsKKyAgICAgICAgICAgIG1fd2ViUGFn
ZS5tYWluRnJhbWUoKS0+cGFnZU92ZXJsYXlDb250cm9sbGVyKCkudW5pbnN0YWxsUGFnZU92ZXJs
YXkobV9zZXJ2aWNlc092ZXJsYXksIFBhZ2VPdmVybGF5OjpGYWRlTW9kZTo6RG9Ob3RGYWRlKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtNjAxLDkgKzYwMiw5IEBAIHZvaWQgU2Vydmlj
ZXNPdmVybGF5Q29udHJvbGxlcjo6Y3JlYXRlT3ZlcmxheUlmTmVlZGVkKCkKICAgICBpZiAobV9z
ZXJ2aWNlc092ZXJsYXkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFJlZlB0cjxQYWdlT3Zlcmxh
eT4gb3ZlcmxheSA9IFBhZ2VPdmVybGF5OjpjcmVhdGUodGhpcywgUGFnZU92ZXJsYXk6Ok92ZXJs
YXlUeXBlOjpEb2N1bWVudCk7CisgICAgUmVmUHRyPFBhZ2VPdmVybGF5PiBvdmVybGF5ID0gUGFn
ZU92ZXJsYXk6OmNyZWF0ZSgqdGhpcywgUGFnZU92ZXJsYXk6Ok92ZXJsYXlUeXBlOjpEb2N1bWVu
dCk7CiAgICAgbV9zZXJ2aWNlc092ZXJsYXkgPSBvdmVybGF5LmdldCgpOwotICAgIG1fd2ViUGFn
ZS5pbnN0YWxsUGFnZU92ZXJsYXkob3ZlcmxheS5yZWxlYXNlKCksIFBhZ2VPdmVybGF5OjpGYWRl
TW9kZTo6RG9Ob3RGYWRlKTsKKyAgICBtX3dlYlBhZ2UubWFpbkZyYW1lKCktPnBhZ2VPdmVybGF5
Q29udHJvbGxlcigpLmluc3RhbGxQYWdlT3ZlcmxheShvdmVybGF5LnJlbGVhc2UoKSwgUGFnZU92
ZXJsYXk6OkZhZGVNb2RlOjpEb05vdEZhZGUpOwogfQogCiBWZWN0b3I8UmVmUHRyPFJhbmdlPj4g
U2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6dGVsZXBob25lTnVtYmVyUmFuZ2VzRm9yRm9jdXNl
ZEZyYW1lKCkKQEAgLTcxNywxMyArNzE4LDEzIEBAIHZvaWQgU2VydmljZXNPdmVybGF5Q29udHJv
bGxlcjo6ZGV0ZXJtaW5lQWN0aXZlSGlnaGxpZ2h0KGJvb2wmIG1vdXNlSXNPdmVyQWN0aXZlCiAg
ICAgICAgIG1fYWN0aXZlSGlnaGxpZ2h0ID0gbV9uZXh0QWN0aXZlSGlnaGxpZ2h0LnJlbGVhc2Uo
KTsKIAogICAgICAgICBpZiAobV9hY3RpdmVIaWdobGlnaHQpIHsKLSAgICAgICAgICAgIG1fc2Vy
dmljZXNPdmVybGF5LT5sYXllcigpLT5hZGRDaGlsZChtX2FjdGl2ZUhpZ2hsaWdodC0+bGF5ZXIo
KSk7CisgICAgICAgICAgICBtX3NlcnZpY2VzT3ZlcmxheS0+bGF5ZXIoKS5hZGRDaGlsZChtX2Fj
dGl2ZUhpZ2hsaWdodC0+bGF5ZXIoKSk7CiAgICAgICAgICAgICBtX2FjdGl2ZUhpZ2hsaWdodC0+
ZmFkZUluKCk7CiAgICAgICAgIH0KICAgICB9CiB9CiAKLWJvb2wgU2VydmljZXNPdmVybGF5Q29u
dHJvbGxlcjo6bW91c2VFdmVudChQYWdlT3ZlcmxheSosIGNvbnN0IFdlYk1vdXNlRXZlbnQmIGV2
ZW50KQorYm9vbCBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjptb3VzZUV2ZW50KFBhZ2VPdmVy
bGF5JiwgY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBldmVudCkKIHsKICAgICBtX21vdXNlUG9z
aXRpb24gPSBtX3dlYlBhZ2UuY29yZVBhZ2UoKS0+bWFpbkZyYW1lKCkudmlldygpLT5yb290Vmll
d1RvQ29udGVudHMoZXZlbnQucG9zaXRpb24oKSk7CiAKQEAgLTczMSwxMyArNzMyLDEzIEBAIGJv
b2wgU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6bW91c2VFdmVudChQYWdlT3ZlcmxheSosIGNv
bnN0IFdlYk1vdXNlRXZlbnQmIGV2CiAgICAgZGV0ZXJtaW5lQWN0aXZlSGlnaGxpZ2h0KG1vdXNl
SXNPdmVyQWN0aXZlSGlnaGxpZ2h0QnV0dG9uKTsKIAogICAgIC8vIENhbmNlbCB0aGUgcG90ZW50
aWFsIGNsaWNrIGlmIGFueSBidXR0b24gb3RoZXIgdGhhbiB0aGUgbGVmdCBidXR0b24gY2hhbmdl
cyBzdGF0ZSwgYW5kIGlnbm9yZSB0aGUgZXZlbnQuCi0gICAgaWYgKGV2ZW50LmJ1dHRvbigpICE9
IFdlYk1vdXNlRXZlbnQ6OkxlZnRCdXR0b24pIHsKKyAgICBpZiAoZXZlbnQuYnV0dG9uKCkgIT0g
TW91c2VCdXR0b246OkxlZnRCdXR0b24pIHsKICAgICAgICAgbV9jdXJyZW50TW91c2VEb3duT25C
dXR0b25IaWdobGlnaHQgPSBudWxscHRyOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQog
CiAgICAgLy8gSWYgdGhlIG1vdXNlIGxpZnRlZCB3aGlsZSBzdGlsbCBvdmVyIHRoZSBoaWdobGln
aHQgYnV0dG9uIHRoYXQgaXQgd2VudCBkb3duIG9uLCB0aGVuIHRoYXQgaXMgYSBjbGljay4KLSAg
ICBpZiAoZXZlbnQudHlwZSgpID09IFdlYkV2ZW50OjpNb3VzZVVwKSB7CisgICAgaWYgKGV2ZW50
LnR5cGUoKSA9PSBQbGF0Zm9ybUV2ZW50OjpNb3VzZVJlbGVhc2VkKSB7CiAgICAgICAgIFJlZlB0
cjxIaWdobGlnaHQ+IG1vdXNlRG93bkhpZ2hsaWdodCA9IG1fY3VycmVudE1vdXNlRG93bk9uQnV0
dG9uSGlnaGxpZ2h0OwogICAgICAgICBtX2N1cnJlbnRNb3VzZURvd25PbkJ1dHRvbkhpZ2hsaWdo
dCA9IG51bGxwdHI7CiAKQEAgLTc1Miw3ICs3NTMsNyBAQCBib29sIFNlcnZpY2VzT3ZlcmxheUNv
bnRyb2xsZXI6Om1vdXNlRXZlbnQoUGFnZU92ZXJsYXkqLCBjb25zdCBXZWJNb3VzZUV2ZW50JiBl
dgogICAgIH0KIAogICAgIC8vIElmIHRoZSBtb3VzZSBtb3ZlZCBvdXRzaWRlIG9mIHRoZSBidXR0
b24gdHJhY2tpbmcgYSBwb3RlbnRpYWwgY2xpY2ssIHN0b3AgdHJhY2tpbmcgdGhlIGNsaWNrLgot
ICAgIGlmIChldmVudC50eXBlKCkgPT0gV2ViRXZlbnQ6Ok1vdXNlTW92ZSkgeworICAgIGlmIChl
dmVudC50eXBlKCkgPT0gUGxhdGZvcm1FdmVudDo6TW91c2VNb3ZlZCkgewogICAgICAgICBpZiAo
bV9jdXJyZW50TW91c2VEb3duT25CdXR0b25IaWdobGlnaHQgJiYgbW91c2VJc092ZXJBY3RpdmVI
aWdobGlnaHRCdXR0b24pCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKIApAQCAtNzYxLDcgKzc2
Miw3IEBAIGJvb2wgU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6bW91c2VFdmVudChQYWdlT3Zl
cmxheSosIGNvbnN0IFdlYk1vdXNlRXZlbnQmIGV2CiAgICAgfQogCiAgICAgLy8gSWYgdGhlIG1v
dXNlIHdlbnQgZG93biBvdmVyIHRoZSBhY3RpdmUgaGlnaGxpZ2h0J3MgYnV0dG9uLCB0cmFjayB0
aGlzIGFzIGEgcG90ZW50aWFsIGNsaWNrLgotICAgIGlmIChldmVudC50eXBlKCkgPT0gV2ViRXZl
bnQ6Ok1vdXNlRG93bikgeworICAgIGlmIChldmVudC50eXBlKCkgPT0gUGxhdGZvcm1FdmVudDo6
TW91c2VQcmVzc2VkKSB7CiAgICAgICAgIGlmIChtX2FjdGl2ZUhpZ2hsaWdodCAmJiBtb3VzZUlz
T3ZlckFjdGl2ZUhpZ2hsaWdodEJ1dHRvbikgewogICAgICAgICAgICAgbV9jdXJyZW50TW91c2VE
b3duT25CdXR0b25IaWdobGlnaHQgPSBtX2FjdGl2ZUhpZ2hsaWdodDsKICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwpAQCAtNzczLDkgKzc3NCw5IEBAIGJvb2wgU2VydmljZXNPdmVybGF5Q29udHJv
bGxlcjo6bW91c2VFdmVudChQYWdlT3ZlcmxheSosIGNvbnN0IFdlYk1vdXNlRXZlbnQmIGV2CiAg
ICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OmRp
ZFNjcm9sbEZyYW1lKFBhZ2VPdmVybGF5KiwgRnJhbWUqIGZyYW1lKQordm9pZCBTZXJ2aWNlc092
ZXJsYXlDb250cm9sbGVyOjpkaWRTY3JvbGxGcmFtZShQYWdlT3ZlcmxheSYsIEZyYW1lJiBmcmFt
ZSkKIHsKLSAgICBpZiAoZnJhbWUtPmlzTWFpbkZyYW1lKCkpCisgICAgaWYgKGZyYW1lLmlzTWFp
bkZyYW1lKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGJ1aWxkUGhvbmVOdW1iZXJIaWdobGln
aHRzKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFj
L1RpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvbWFjL1RpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhLmgKaW5kZXggYjgx
YTRhNC4uOWU1YWJkYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL21hYy9UaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYS5oCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWEu
aApAQCAtODQsNiArODQsOCBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCB2aWV3U3RhdGVE
aWRDaGFuZ2UoV2ViQ29yZTo6Vmlld1N0YXRlOjpGbGFncyBjaGFuZ2VkLCBib29sIHdhbnRzRGlk
VXBkYXRlVmlld1N0YXRlKSBvdmVycmlkZTsKICAgICB2b2lkIGRpZFVwZGF0ZVZpZXdTdGF0ZVRp
bWVyRmlyZWQoKTsKIAorICAgIHZpcnR1YWwgdm9pZCBhdHRhY2hWaWV3T3ZlcmxheUdyYXBoaWNz
TGF5ZXIoV2ViQ29yZTo6RnJhbWUqLCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKikgb3ZlcnJpZGU7
CisKICAgICAvLyBXZWJDb3JlOjpMYXllckZsdXNoU2NoZWR1bGVyQ2xpZW50CiAgICAgdmlydHVh
bCBib29sIGZsdXNoTGF5ZXJzKCkgb3ZlcnJpZGU7CiAKQEAgLTEwNiw2ICsxMDgsNyBAQCBwcml2
YXRlOgogICAgIHZvaWQgdXBkYXRlTGF5ZXJIb3N0aW5nQ29udGV4dCgpOwogCiAgICAgdm9pZCBz
ZXRSb290Q29tcG9zaXRpbmdMYXllcihDQUxheWVyICopOworICAgIHZvaWQgdXBkYXRlUm9vdExh
eWVycygpOwogCiAgICAgV2ViQ29yZTo6VGlsZWRCYWNraW5nKiBtYWluRnJhbWVUaWxlZEJhY2tp
bmcoKSBjb25zdDsKICAgICB2b2lkIHVwZGF0ZURlYnVnSW5mb0xheWVyKGJvb2wgc2hvd0xheWVy
KTsKQEAgLTEzOCw2ICsxNDEsOCBAQCBwcml2YXRlOgogICAgIFdlYkNvcmU6OlRyYW5zZm9ybWF0
aW9uTWF0cml4IG1fdHJhbnNmb3JtOwogCiAgICAgUnVuTG9vcDo6VGltZXI8VGlsZWRDb3JlQW5p
bWF0aW9uRHJhd2luZ0FyZWE+IG1fc2VuZERpZFVwZGF0ZVZpZXdTdGF0ZVRpbWVyOworCisgICAg
V2ViQ29yZTo6R3JhcGhpY3NMYXllciogbV92aWV3T3ZlcmxheVJvb3RMYXllcjsKIH07CiAKIERS
QVdJTkdfQVJFQV9UWVBFX0NBU1RTKFRpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhLCB0eXBl
KCkgPT0gRHJhd2luZ0FyZWFUeXBlVGlsZWRDb3JlQW5pbWF0aW9uKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvVGlsZWRDb3JlQW5pbWF0aW9uRHJh
d2luZ0FyZWEubW0gYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1RpbGVk
Q29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhLm1tCmluZGV4IGU3NzU5MTkuLjI5OGIwMjIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvVGlsZWRDb3JlQW5p
bWF0aW9uRHJhd2luZ0FyZWEubW0KKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL21hYy9UaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYS5tbQpAQCAtNTEsNiArNTEsNyBA
QAogI2ltcG9ydCA8V2ViQ29yZS9TY3JvbGxiYXJUaGVtZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9T
ZXR0aW5ncy5oPgogI2ltcG9ydCA8V2ViQ29yZS9UaWxlZEJhY2tpbmcuaD4KKyNpbXBvcnQgPFdl
YkNvcmUvV2ViQWN0aW9uRGlzYWJsaW5nQ0FMYXllckRlbGVnYXRlLmg+CiAjaW1wb3J0IDx3dGYv
TWFpblRocmVhZC5oPgogCiAjaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykKQEAgLTc2LDEwICs3
NywxMiBAQCBUaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYTo6VGlsZWRDb3JlQW5pbWF0aW9u
RHJhd2luZ0FyZWEoV2ViUGFnZSYgd2ViUGFnZSwgYwogICAgICwgbV9zY3JvbGxlZEV4cG9zZWRS
ZWN0KEZsb2F0UmVjdDo6aW5maW5pdGVSZWN0KCkpCiAgICAgLCBtX3RyYW5zaWVudFpvb21TY2Fs
ZSgxKQogICAgICwgbV9zZW5kRGlkVXBkYXRlVmlld1N0YXRlVGltZXIoUnVuTG9vcDo6bWFpbigp
LCB0aGlzLCAmVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWE6OmRpZFVwZGF0ZVZpZXdTdGF0
ZVRpbWVyRmlyZWQpCisgICAgLCBtX3ZpZXdPdmVybGF5Um9vdExheWVyKG51bGxwdHIpCiB7CiAg
ICAgbV93ZWJQYWdlLmNvcmVQYWdlKCktPnNldHRpbmdzKCkuc2V0Rm9yY2VDb21wb3NpdGluZ01v
ZGUodHJ1ZSk7CiAKICAgICBtX2hvc3RpbmdMYXllciA9IFtDQUxheWVyIGxheWVyXTsKKyAgICBb
bV9ob3N0aW5nTGF5ZXIgc2V0RGVsZWdhdGU6W1dlYkFjdGlvbkRpc2FibGluZ0NBTGF5ZXJEZWxl
Z2F0ZSBzaGFyZWRdXTsKICAgICBbbV9ob3N0aW5nTGF5ZXIgc2V0RnJhbWU6bV93ZWJQYWdlLmJv
dW5kcygpXTsKICAgICBbbV9ob3N0aW5nTGF5ZXIgc2V0T3BhcXVlOllFU107CiAgICAgW21faG9z
dGluZ0xheWVyIHNldEdlb21ldHJ5RmxpcHBlZDpZRVNdOwpAQCAtMjA0LDkgKzIwNywyOCBAQCB2
b2lkIFRpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhOjp1cGRhdGVQcmVmZXJlbmNlcyhjb25z
dCBXZWJQcmVmZXJlbmNlc1N0b3JlJgogICAgIHVwZGF0ZURlYnVnSW5mb0xheWVyKHNob3dUaWxl
ZFNjcm9sbGluZ0luZGljYXRvcik7CiB9CiAKK3ZvaWQgVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2lu
Z0FyZWE6OnVwZGF0ZVJvb3RMYXllcnMoKQoreworICAgIGlmICghbV9yb290TGF5ZXIpIHsKKyAg
ICAgICAgW21faG9zdGluZ0xheWVyIHNldFN1YmxheWVyczpAWyBdXTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIFttX2hvc3RpbmdMYXllciBzZXRTdWJsYXllcnM6bV92aWV3T3Zlcmxh
eVJvb3RMYXllciA/IEBbIG1fcm9vdExheWVyLmdldCgpLCBtX3ZpZXdPdmVybGF5Um9vdExheWVy
LT5wbGF0Zm9ybUxheWVyKCkgXSA6IEBbIG1fcm9vdExheWVyLmdldCgpIF1dOworfQorCit2b2lk
IFRpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhOjphdHRhY2hWaWV3T3ZlcmxheUdyYXBoaWNz
TGF5ZXIoRnJhbWUqIGZyYW1lLCBHcmFwaGljc0xheWVyKiB2aWV3T3ZlcmxheVJvb3RMYXllcikK
K3sKKyAgICBpZiAoIWZyYW1lLT5pc01haW5GcmFtZSgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBtX3ZpZXdPdmVybGF5Um9vdExheWVyID0gdmlld092ZXJsYXlSb290TGF5ZXI7CisgICAgdXBk
YXRlUm9vdExheWVycygpOworfQorCiB2b2lkIFRpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVh
OjptYWluRnJhbWVDb250ZW50U2l6ZUNoYW5nZWQoY29uc3QgSW50U2l6ZSYgc2l6ZSkKIHsKLSAg
ICBtX3dlYlBhZ2UucGFnZU92ZXJsYXlDb250cm9sbGVyKCkuZGlkQ2hhbmdlRG9jdW1lbnRTaXpl
KCk7CisKIH0KIAogdm9pZCBUaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYTo6dXBkYXRlSW50
cmluc2ljQ29udGVudFNpemVJZk5lZWRlZCgpCkBAIC0yODMsNyArMzA1LDEwIEBAIGJvb2wgVGls
ZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWE6OmZsdXNoTGF5ZXJzKCkKIAogICAgIEZsb2F0UmVj
dCB2aXNpYmxlUmVjdCA9IFttX2hvc3RpbmdMYXllciBmcmFtZV07CiAgICAgdmlzaWJsZVJlY3Qu
aW50ZXJzZWN0KG1fc2Nyb2xsZWRFeHBvc2VkUmVjdCk7Ci0gICAgbV93ZWJQYWdlLnBhZ2VPdmVy
bGF5Q29udHJvbGxlcigpLmZsdXNoUGFnZU92ZXJsYXlMYXllcnModmlzaWJsZVJlY3QpOworCisg
ICAgLy8gQmVjYXVzZSBvdXIgdmlldy1yZWxhdGl2ZSBvdmVybGF5IHJvb3QgbGF5ZXIgaXMgbm90
IGF0dGFjaGVkIHRvIHRoZSBtYWluIEdyYXBoaWNzTGF5ZXIgdHJlZSwgd2UgbmVlZCB0byBmbHVz
aCBpdCBtYW51YWxseS4KKyAgICBpZiAobV92aWV3T3ZlcmxheVJvb3RMYXllcikKKyAgICAgICAg
bV92aWV3T3ZlcmxheVJvb3RMYXllci0+Zmx1c2hDb21wb3NpdGluZ1N0YXRlKHZpc2libGVSZWN0
KTsKIAogICAgIGJvb2wgcmV0dXJuVmFsdWUgPSBtX3dlYlBhZ2UubWFpbkZyYW1lVmlldygpLT5m
bHVzaENvbXBvc2l0aW5nU3RhdGVJbmNsdWRpbmdTdWJmcmFtZXMoKTsKICNpZiBFTkFCTEUoQVNZ
TkNfU0NST0xMSU5HKQpAQCAtMzYzLDggKzM4OCw2IEBAIHZvaWQgVGlsZWRDb3JlQW5pbWF0aW9u
RHJhd2luZ0FyZWE6OnVwZGF0ZVNjcm9sbGVkRXhwb3NlZFJlY3QoKQogI2VuZGlmCiAKICAgICBm
cmFtZVZpZXctPnNldEV4cG9zZWRSZWN0KG1fc2Nyb2xsZWRFeHBvc2VkUmVjdCk7Ci0KLSAgICBt
X3dlYlBhZ2UucGFnZU92ZXJsYXlDb250cm9sbGVyKCkuZGlkQ2hhbmdlRXhwb3NlZFJlY3QoKTsK
IH0KIAogdm9pZCBUaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYTo6dXBkYXRlR2VvbWV0cnko
Y29uc3QgSW50U2l6ZSYgdmlld1NpemUsIGNvbnN0IEludFNpemUmIGxheWVyUG9zaXRpb24pCkBA
IC00NjQsMTIgKzQ4NywxMiBAQCB2b2lkIFRpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhOjpz
ZXRSb290Q29tcG9zaXRpbmdMYXllcihDQUxheWVyICpsYXllcikKICAgICBbQ0FUcmFuc2FjdGlv
biBiZWdpbl07CiAgICAgW0NBVHJhbnNhY3Rpb24gc2V0RGlzYWJsZUFjdGlvbnM6WUVTXTsKIAot
ICAgIFttX2hvc3RpbmdMYXllciBzZXRTdWJsYXllcnM6bGF5ZXIgPyBAWyBsYXllciwgbV93ZWJQ
YWdlLnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLnZpZXdPdmVybGF5Um9vdExheWVyKCktPnBsYXRm
b3JtTGF5ZXIoKSBdIDogQFsgXV07Ci0KICAgICBib29sIGhhZFJvb3RMYXllciA9ICEhbV9yb290
TGF5ZXI7CiAgICAgbV9yb290TGF5ZXIgPSBsYXllcjsKICAgICBbbV9yb290TGF5ZXIgc2V0U3Vi
bGF5ZXJUcmFuc2Zvcm06bV90cmFuc2Zvcm1dOwogCisgICAgdXBkYXRlUm9vdExheWVycygpOwor
CiAgICAgaWYgKGhhZFJvb3RMYXllciAhPSAhIWxheWVyKQogICAgICAgICBtX2xheWVySG9zdGlu
Z0NvbnRleHQtPnNldFJvb3RMYXllcihsYXllciA/IG1faG9zdGluZ0xheWVyLmdldCgpIDogMCk7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV0tB
Y2Nlc3NpYmlsaXR5V2ViUGFnZU9iamVjdE1hYy5tbSBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9tYWMvV0tBY2Nlc3NpYmlsaXR5V2ViUGFnZU9iamVjdE1hYy5tbQppbmRleCAz
ODMzOWJhLi4xNjRhZTU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvbWFjL1dLQWNjZXNzaWJpbGl0eVdlYlBhZ2VPYmplY3RNYWMubW0KKysrIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XS0FjY2Vzc2liaWxpdHlXZWJQYWdlT2Jq
ZWN0TWFjLm1tCkBAIC00MCw2ICs0MCw3IEBACiAjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lVmlldy5o
PgogI2ltcG9ydCA8V2ViQ29yZS9NYWluRnJhbWUuaD4KICNpbXBvcnQgPFdlYkNvcmUvUGFnZS5o
PgorI2ltcG9ydCA8V2ViQ29yZS9QYWdlT3ZlcmxheUNvbnRyb2xsZXIuaD4KICNpbXBvcnQgPFdl
YkNvcmUvU2Nyb2xsVmlldy5oPgogI2ltcG9ydCA8V2ViQ29yZS9TY3JvbGxiYXIuaD4KICNpbXBv
cnQgPFdlYktpdFN5c3RlbUludGVyZmFjZS5oPgpAQCAtNzUsMTkgKzc2LDEzIEBAIHVzaW5nIG5h
bWVzcGFjZSBXZWJLaXQ7CiAKIC0gKE5TQXJyYXkgKilhY2Nlc3NpYmlsaXR5UGFyYW1ldGVyaXpl
ZEF0dHJpYnV0ZU5hbWVzCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tBcnJheVJlZj4gcmVzdWx0ID0g
YWRvcHRXSyhtX3BhZ2UtPnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLmNvcHlBY2Nlc3NpYmlsaXR5
QXR0cmlidXRlc05hbWVzKHRydWUpKTsKLSAgICBpZiAoIXJlc3VsdCkKKyAgICBWZWN0b3I8U3Ry
aW5nPiByZXN1bHQgPSBtX3BhZ2UtPm1haW5GcmFtZSgpLT5wYWdlT3ZlcmxheUNvbnRyb2xsZXIo
KS5jb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZXNOYW1lcyh0cnVlKTsKKyAgICBpZiAocmVzdWx0
LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIG5pbDsKICAgICAKICAgICBOU011dGFibGVBcnJh
eSAqbmFtZXMgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXldOwotICAgIHNpemVfdCBjb3VudCA9IFdL
QXJyYXlHZXRTaXplKHJlc3VsdC5nZXQoKSk7Ci0gICAgZm9yIChzaXplX3QgayA9IDA7IGsgPCBj
b3VudDsgaysrKSB7Ci0gICAgICAgIFdLVHlwZVJlZiBpdGVtID0gV0tBcnJheUdldEl0ZW1BdElu
ZGV4KHJlc3VsdC5nZXQoKSwgayk7Ci0gICAgICAgIGlmICh0b0ltcGwoaXRlbSktPnR5cGUoKSA9
PSBBUEk6OlN0cmluZzo6QVBJVHlwZSkgewotICAgICAgICAgICAgUmV0YWluUHRyPENGU3RyaW5n
UmVmPiBuYW1lID0gYWRvcHRDRihXS1N0cmluZ0NvcHlDRlN0cmluZyhrQ0ZBbGxvY2F0b3JEZWZh
dWx0LCAoV0tTdHJpbmdSZWYpaXRlbSkpOwotICAgICAgICAgICAgW25hbWVzIGFkZE9iamVjdDoo
TlNTdHJpbmcgKiluYW1lLmdldCgpXTsKLSAgICAgICAgfQotICAgIH0KKyAgICBmb3IgKGF1dG8m
IG5hbWUgOiByZXN1bHQpCisgICAgICAgIFtuYW1lcyBhZGRPYmplY3Q6KE5TU3RyaW5nICopbmFt
ZV07CiAgICAgCiAgICAgcmV0dXJuIG5hbWVzOwogfQpAQCAtMTY0LDIzICsxNTksMjYgQEAgdXNp
bmcgbmFtZXNwYWNlIFdlYktpdDsKIAogLSAoaWQpYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVl
OihOU1N0cmluZyAqKWF0dHJpYnV0ZSBmb3JQYXJhbWV0ZXI6KGlkKXBhcmFtZXRlcgogewotICAg
IFdLUmV0YWluUHRyPFdLVHlwZVJlZj4gcGFnZU92ZXJsYXlQYXJhbWV0ZXIgPSAwOwotICAgIAot
ICAgIGlmIChbcGFyYW1ldGVyIGlzS2luZE9mQ2xhc3M6W05TVmFsdWUgY2xhc3NdXSAmJiBzdHJj
bXAoWyhOU1ZhbHVlKilwYXJhbWV0ZXIgb2JqQ1R5cGVdLCBAZW5jb2RlKE5TUG9pbnQpKSA9PSAw
KSB7Ci0gICAgICAgIE5TUG9pbnQgcG9pbnQgPSBbc2VsZiBjb252ZXJ0U2NyZWVuUG9pbnRUb1Jv
b3RWaWV3OlsoTlNWYWx1ZSAqKXBhcmFtZXRlciBwb2ludFZhbHVlXV07Ci0gICAgICAgIHBhZ2VP
dmVybGF5UGFyYW1ldGVyID0gV0tQb2ludENyZWF0ZShXS1BvaW50TWFrZShwb2ludC54LCBwb2lu
dC55KSk7Ci0gICAgfQotICAgIAotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBhdHRyaWJ1
dGVSZWYgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aENGU3RyaW5nKChDRlN0cmluZ1JlZilh
dHRyaWJ1dGUpKTsKLSAgICBXS1JldGFpblB0cjxXS1R5cGVSZWY+IHJlc3VsdCA9IGFkb3B0V0so
bV9wYWdlLT5wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKS5jb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0
ZVZhbHVlKGF0dHJpYnV0ZVJlZi5nZXQoKSwgcGFnZU92ZXJsYXlQYXJhbWV0ZXIuZ2V0KCkpKTsK
LSAgICBpZiAoIXJlc3VsdCkKKyAgICBXZWJDb3JlOjpGbG9hdFBvaW50IHBhZ2VPdmVybGF5UG9p
bnQ7CisgICAgaWYgKFtwYXJhbWV0ZXIgaXNLaW5kT2ZDbGFzczpbTlNWYWx1ZSBjbGFzc11dICYm
ICFzdHJjbXAoWyhOU1ZhbHVlICopcGFyYW1ldGVyIG9iakNUeXBlXSwgQGVuY29kZShOU1BvaW50
KSkpCisgICAgICAgIHBhZ2VPdmVybGF5UG9pbnQgPSBbc2VsZiBjb252ZXJ0U2NyZWVuUG9pbnRU
b1Jvb3RWaWV3OlsoTlNWYWx1ZSAqKXBhcmFtZXRlciBwb2ludFZhbHVlXV07CisgICAgZWxzZQog
ICAgICAgICByZXR1cm4gbmlsOwotICAgIAotICAgIGlmICh0b0ltcGwocmVzdWx0LmdldCgpKS0+
dHlwZSgpID09IEFQSTo6U3RyaW5nOjpBUElUeXBlKQotICAgICAgICByZXR1cm4gQ0ZCcmlkZ2lu
Z1JlbGVhc2UoV0tTdHJpbmdDb3B5Q0ZTdHJpbmcoa0NGQWxsb2NhdG9yRGVmYXVsdCwgKFdLU3Ry
aW5nUmVmKXJlc3VsdC5nZXQoKSkpOwotICAgIGlmICh0b0ltcGwocmVzdWx0LmdldCgpKS0+dHlw
ZSgpID09IEFQSTo6Qm9vbGVhbjo6QVBJVHlwZSkKLSAgICAgICAgcmV0dXJuIFtOU051bWJlciBu
dW1iZXJXaXRoQm9vbDpXS0Jvb2xlYW5HZXRWYWx1ZShzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+
KHJlc3VsdC5nZXQoKSkpXTsKLSAgICAKKworICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0
cmluZzpAIkFYRGF0YURldGVjdG9yRXhpc3RzQXRQb2ludCJdIHx8IFthdHRyaWJ1dGUgaXNFcXVh
bFRvU3RyaW5nOkAiQVhEaWRTaG93RGF0YURldGVjdG9yTWVudUF0UG9pbnQiXSkgeworICAgICAg
ICBib29sIHZhbHVlOworICAgICAgICBpZiAoIW1fcGFnZS0+bWFpbkZyYW1lKCktPnBhZ2VPdmVy
bGF5Q29udHJvbGxlcigpLmNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlQm9vbFZhbHVlRm9yUG9p
bnQoYXR0cmlidXRlLCBwYWdlT3ZlcmxheVBvaW50LCB2YWx1ZSkpCisgICAgICAgICAgICByZXR1
cm4gbmlsOworICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhCb29sOnZhbHVlXTsK
KyAgICB9CisKKyAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6QCJBWERhdGFEZXRl
Y3RvclR5cGVBdFBvaW50Il0pIHsKKyAgICAgICAgU3RyaW5nIHZhbHVlOworICAgICAgICBpZiAo
IW1fcGFnZS0+bWFpbkZyYW1lKCktPnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLmNvcHlBY2Nlc3Np
YmlsaXR5QXR0cmlidXRlU3RyaW5nVmFsdWVGb3JQb2ludChhdHRyaWJ1dGUsIHBhZ2VPdmVybGF5
UG9pbnQsIHZhbHVlKSkKKyAgICAgICAgICAgIHJldHVybiBuaWw7CisgICAgICAgIHJldHVybiBb
TlNTdHJpbmcgc3RyaW5nV2l0aFN0cmluZzp2YWx1ZV07CisgICAgfQorCiAgICAgcmV0dXJuIG5p
bDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNz
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAKaW5kZXggMjBh
MzBhZS4uN2MxNzBiMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
cm9jZXNzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3Bw
CkBAIC03MSw2ICs3MSw3IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9JY29uRGF0YWJhc2UuaD4KICNp
bmNsdWRlIDxXZWJDb3JlL0pTRE9NV2luZG93Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9MYW5ndWFn
ZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvTWFpbkZyYW1lLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9N
ZW1vcnlDYWNoZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvTWVtb3J5UHJlc3N1cmVIYW5kbGVyLmg+
CiAjaW5jbHVkZSA8V2ViQ29yZS9QYWdlLmg+Cg==
</data>
<flag name="review"
          id="263804"
          type_id="1"
          status="+"
          setter="andersca"
    />
          </attachment>
      

    </bug>

</bugzilla>