<?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>200076</bug_id>
          
          <creation_ts>2019-07-24 06:00:10 -0700</creation_ts>
          <short_desc>[SOUP] Move SoupNetworkSession ownership from NetworkStorageSession to NetworkSession</short_desc>
          <delta_ts>2019-07-30 09:31:12 -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>WebKitGTK</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=200228</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Gtk</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Carlos Garcia Campos">cgarcia</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>achristensen</cc>
    
    <cc>bugs-noreply</cc>
    
    <cc>mcatanzaro</cc>
    
    <cc>youennf</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1555341</commentid>
    <comment_count>0</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2019-07-24 06:00:10 -0700</bug_when>
    <thetext>NetworkStorageSession should only own the cookie jar, since it&apos;s the only thing it handles from the session.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1555342</commentid>
    <comment_count>1</comment_count>
      <attachid>374771</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2019-07-24 06:22:29 -0700</bug_when>
    <thetext>Created attachment 374771
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1555349</commentid>
    <comment_count>2</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2019-07-24 07:21:39 -0700</bug_when>
    <thetext>/Volumes/Data/EWS/WebKit/Source/WebKit/NetworkProcess/cocoa/NetworkProcessCocoa.mm:204:30: error: variable &apos;modifiedSince&apos; cannot be implicitly captured in a lambda with no capture-default specified
                cache-&gt;clear(modifiedSince, [aggregator = aggregator.copyRef()] () { });
                             ^
/Volumes/Data/EWS/WebKit/Source/WebKit/NetworkProcess/cocoa/NetworkProcessCocoa.mm:194:46: note: &apos;modifiedSince&apos; declared here
void NetworkProcess::clearDiskCache(WallTime modifiedSince, CompletionHandler&lt;void()&gt;&amp;&amp; completionHandler)
                                             ^
/Volumes/Data/EWS/WebKit/Source/WebKit/NetworkProcess/cocoa/NetworkProcessCocoa.mm:202:31: note: lambda expression begins here
        forEachNetworkSession([&amp;aggregator](NetworkSession&amp; session) {
                              ^
/Volumes/Data/EWS/WebKit/Source/WebKit/NetworkProcess/cocoa/NetworkProcessCocoa.mm:200:112: error: lambda capture &apos;modifiedSince&apos; is not used [-Werror,-Wunused-lambda-capture]
    dispatch_group_async(group, dispatch_get_main_queue(), makeBlockPtr([this, protectedThis = makeRef(*this), modifiedSince, completionHandler = WTFMove(completionHandler)] () mutable {
                                                                                                               ^
2 errors generated.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1555350</commentid>
    <comment_count>3</comment_count>
      <attachid>374774</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2019-07-24 07:33:52 -0700</bug_when>
    <thetext>Created attachment 374774
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1555352</commentid>
    <comment_count>4</comment_count>
      <attachid>374775</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2019-07-24 07:47:51 -0700</bug_when>
    <thetext>Created attachment 374775
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1555353</commentid>
    <comment_count>5</comment_count>
      <attachid>374771</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2019-07-24 07:53:58 -0700</bug_when>
    <thetext>Comment on attachment 374771
Patch

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

Nice, just don&apos;t break Mac please.

Also it needs an owner for the changes in NetworkConnectionToWebProcess.cpp, NetworkProcess.cpp, NetworkProcess.h, NetworkProcessCocoa.mm, and NetworkProcessIOS.mm.

&gt; Source/WebCore/platform/network/NetworkStorageSession.h:99
&gt; -    WEBCORE_EXPORT NetworkStorageSession(PAL::SessionID, std::unique_ptr&lt;SoupNetworkSession&gt;&amp;&amp;);
&gt; +    WEBCORE_EXPORT NetworkStorageSession(PAL::SessionID);

explicit

&gt; Source/WebCore/platform/network/soup/NetworkStorageSessionSoup.cpp:58
&gt; +    , m_cookieStorage(adoptGRef(soup_cookie_jar_new()))

It&apos;s slightly unfortunate that we create this empty SoupCookieJar and then blow it away shortly thereafter in the usual case when setCookieStorage is called right after it&apos;s constructed, from the NetworkSessionSoup.cpp constructor. But that seems hard to avoid, so I suppose this is fine.

&gt; Source/WebCore/platform/network/soup/SoupNetworkSession.cpp:-131
&gt; -        SOUP_SESSION_ADD_FEATURE, jar.get(),

Important: where does this happen now?

If this is totally gone, then surely cookies won&apos;t work anymore?

I&apos;m confused.

&gt; Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.cpp:692
&gt; +    networkProcess().forEachNetworkSession([statistics = WTFMove(statistics) ](NetworkSession&amp; networkSession) mutable {

No space before the ]

&gt; Source/WebKit/NetworkProcess/NetworkProcess.cpp:602
&gt; +#if !USE(SOUP)
&gt;      ASSERT(sessionID != PAL::SessionID::defaultSessionID());
&gt; +#endif

Really needs a comment since people reading the code have no chance to know why soup is different here. &quot;Refer to the comment in NetworkProcessMainSoup.cpp for why this needs to be destroyed&quot; would suffice.

Actually, a comment would be bare minimum, but perhaps it would be better to remove this ASSERT altogether. There&apos;s no reason to prevent destroying the default NetworkSession on other ports if we allow it for soup, because the cross-platform code has to allow it now. I think the ASSERT is here because a bazillion functions will likely crash if the default NetworkSession is destroyed, so it&apos;s a little risky to remove, but I understand that the SoupSession must be destroyed no matter what, and if it&apos;s owned by the NetworkSession that means the NetworkSession must be too, and if it&apos;s done late enough it should be OK.

&gt; Source/WebKit/NetworkProcess/NetworkProcess.cpp:2166
&gt; -    for (auto&amp; session : m_networkSessions)
&gt; -        session.value-&gt;storageManager().resume();
&gt; +    forEachNetworkSession([](NetworkSession&amp; session) {
&gt; +        session.storageManager().resume();
&gt; +    });

I&apos;ll let owners decide whether this sort of transformation is valuable. On the one hand, now that you&apos;ve added forEachNetworkSession it makes sense to use it wherever possible, and seeing the name of the function at callsites makes it very clear that you are doing a thing for each NetworkSession. On the other hand, within NetworkProcess.cpp itself the for loop syntax is shorter. Either way is fine IMO.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1555355</commentid>
    <comment_count>6</comment_count>
      <attachid>374777</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2019-07-24 07:59:45 -0700</bug_when>
    <thetext>Created attachment 374777
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1555356</commentid>
    <comment_count>7</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2019-07-24 08:05:00 -0700</bug_when>
    <thetext>(In reply to Michael Catanzaro from comment #5)
&gt; Comment on attachment 374771 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=374771&amp;action=review
&gt; 
&gt; Nice, just don&apos;t break Mac please.
&gt; 
&gt; Also it needs an owner for the changes in NetworkConnectionToWebProcess.cpp,
&gt; NetworkProcess.cpp, NetworkProcess.h, NetworkProcessCocoa.mm, and
&gt; NetworkProcessIOS.mm.

Sure.

&gt; &gt; Source/WebCore/platform/network/NetworkStorageSession.h:99
&gt; &gt; -    WEBCORE_EXPORT NetworkStorageSession(PAL::SessionID, std::unique_ptr&lt;SoupNetworkSession&gt;&amp;&amp;);
&gt; &gt; +    WEBCORE_EXPORT NetworkStorageSession(PAL::SessionID);
&gt; 
&gt; explicit

Ok.

&gt; &gt; Source/WebCore/platform/network/soup/NetworkStorageSessionSoup.cpp:58
&gt; &gt; +    , m_cookieStorage(adoptGRef(soup_cookie_jar_new()))
&gt; 
&gt; It&apos;s slightly unfortunate that we create this empty SoupCookieJar and then
&gt; blow it away shortly thereafter in the usual case when setCookieStorage is
&gt; called right after it&apos;s constructed, from the NetworkSessionSoup.cpp
&gt; constructor. But that seems hard to avoid, so I suppose this is fine.

There&apos;s no change in behavior here, we were creating the same jar in the SoupNetworkSession constructor before. This ensures there&apos;s always a valid cookie storage in the network storage session.

&gt; &gt; Source/WebCore/platform/network/soup/SoupNetworkSession.cpp:-131
&gt; &gt; -        SOUP_SESSION_ADD_FEATURE, jar.get(),
&gt; 
&gt; Important: where does this happen now?

In NetworkSession constructor we call setCookieStorage right after the SoupNetworkSession is created.

&gt; If this is totally gone, then surely cookies won&apos;t work anymore?
&gt; 
&gt; I&apos;m confused.
&gt; 
&gt; &gt; Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.cpp:692
&gt; &gt; +    networkProcess().forEachNetworkSession([statistics = WTFMove(statistics) ](NetworkSession&amp; networkSession) mutable {
&gt; 
&gt; No space before the ]

Oops.

&gt; &gt; Source/WebKit/NetworkProcess/NetworkProcess.cpp:602
&gt; &gt; +#if !USE(SOUP)
&gt; &gt;      ASSERT(sessionID != PAL::SessionID::defaultSessionID());
&gt; &gt; +#endif
&gt; 
&gt; Really needs a comment since people reading the code have no chance to know
&gt; why soup is different here. &quot;Refer to the comment in
&gt; NetworkProcessMainSoup.cpp for why this needs to be destroyed&quot; would suffice.
&gt; 
&gt; Actually, a comment would be bare minimum, but perhaps it would be better to
&gt; remove this ASSERT altogether. There&apos;s no reason to prevent destroying the
&gt; default NetworkSession on other ports if we allow it for soup, because the
&gt; cross-platform code has to allow it now. I think the ASSERT is here because
&gt; a bazillion functions will likely crash if the default NetworkSession is
&gt; destroyed, so it&apos;s a little risky to remove, but I understand that the
&gt; SoupSession must be destroyed no matter what, and if it&apos;s owned by the
&gt; NetworkSession that means the NetworkSession must be too, and if it&apos;s done
&gt; late enough it should be OK.

I&apos;ll add a comment for now.

&gt; &gt; Source/WebKit/NetworkProcess/NetworkProcess.cpp:2166
&gt; &gt; -    for (auto&amp; session : m_networkSessions)
&gt; &gt; -        session.value-&gt;storageManager().resume();
&gt; &gt; +    forEachNetworkSession([](NetworkSession&amp; session) {
&gt; &gt; +        session.storageManager().resume();
&gt; &gt; +    });
&gt; 
&gt; I&apos;ll let owners decide whether this sort of transformation is valuable. On
&gt; the one hand, now that you&apos;ve added forEachNetworkSession it makes sense to
&gt; use it wherever possible, and seeing the name of the function at callsites
&gt; makes it very clear that you are doing a thing for each NetworkSession. On
&gt; the other hand, within NetworkProcess.cpp itself the for loop syntax is
&gt; shorter. Either way is fine IMO.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1555357</commentid>
    <comment_count>8</comment_count>
      <attachid>374778</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2019-07-24 08:09:00 -0700</bug_when>
    <thetext>Created attachment 374778
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1555743</commentid>
    <comment_count>9</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2019-07-25 00:30:44 -0700</bug_when>
    <thetext>Youenn or Alex, could you check the cross-platform changes in this patch, please?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1556064</commentid>
    <comment_count>10</comment_count>
      <attachid>374954</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2019-07-26 01:25:02 -0700</bug_when>
    <thetext>Created attachment 374954
Rebased patch for landing

Ping owners</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1556067</commentid>
    <comment_count>11</comment_count>
      <attachid>374955</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2019-07-26 01:42:34 -0700</bug_when>
    <thetext>Created attachment 374955
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1556573</commentid>
    <comment_count>12</comment_count>
      <attachid>374955</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2019-07-29 09:15:48 -0700</bug_when>
    <thetext>Comment on attachment 374955
Patch for landing

LGTM, the review flag is not set though.

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

&gt; Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.cpp:699
&gt; +    networkProcess().forEachNetworkSession([statistics = WTFMove(statistics)](NetworkSession&amp; networkSession) mutable {

auto&amp;
See also https://bugs.webkit.org/show_bug.cgi?id=200225

&gt; Source/WebKit/NetworkProcess/NetworkProcess.cpp:278
&gt; +    forEachNetworkSession([](NetworkSession&amp; networkSession) {

auto&amp; here and below.

&gt; Source/WebKit/NetworkProcess/NetworkProcess.cpp:1372
&gt; +            fetchDiskCacheEntries(session.cache(), sessionID, fetchOptions, [callbackAggregator = WTFMove(callbackAggregator)](auto entries) mutable {

There seems to be a preexisting bug here in case there are more than one session as we move clearTasksHandler several times potentially.

&gt; Source/WebKit/NetworkProcess/NetworkProcess.cpp:1532
&gt; +            clearDiskCacheEntries(session.cache(), originDatas, [clearTasksHandler = WTFMove(clearTasksHandler)] { });

There seems to be a preexisting bug here in case there are more than one session as we move clearTasksHandler several times potentially.

&gt; Source/WebKit/NetworkProcess/NetworkStorageSessionProvider.h:57
&gt; +    SoupSession* soupSession() const final

This seems only called in one place right now.
Maybe instead, we could simply add a cross-platform NetworkSession* networkSession() const getter and soup specific code would do the static cast.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1556580</commentid>
    <comment_count>13</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2019-07-29 09:19:54 -0700</bug_when>
    <thetext>I&apos;ll fix the potential use-after-move in a separate bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1556937</commentid>
    <comment_count>14</comment_count>
      <attachid>374955</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2019-07-30 07:36:49 -0700</bug_when>
    <thetext>Comment on attachment 374955
Patch for landing

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

&gt;&gt; Source/WebKit/NetworkProcess/NetworkProcess.cpp:278
&gt;&gt; +    forEachNetworkSession([](NetworkSession&amp; networkSession) {
&gt; 
&gt; auto&amp; here and below.

Ok.

&gt;&gt; Source/WebKit/NetworkProcess/NetworkStorageSessionProvider.h:57
&gt;&gt; +    SoupSession* soupSession() const final
&gt; 
&gt; This seems only called in one place right now.
&gt; Maybe instead, we could simply add a cross-platform NetworkSession* networkSession() const getter and soup specific code would do the static cast.

Yes, it&apos;s a temporary solution, it will be removed in bug #200162.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1556938</commentid>
    <comment_count>15</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2019-07-30 07:38:41 -0700</bug_when>
    <thetext>(In reply to youenn fablet from comment #12)
&gt; Comment on attachment 374955 [details]
&gt; Patch for landing
&gt; 
&gt; LGTM, the review flag is not set though.

Because it was already reviewed by Michael, I only needed the owners approval for the cross-platform changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1556939</commentid>
    <comment_count>16</comment_count>
      <attachid>375157</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2019-07-30 07:41:10 -0700</bug_when>
    <thetext>Created attachment 375157
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1556983</commentid>
    <comment_count>17</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2019-07-30 09:31:12 -0700</bug_when>
    <thetext>Committed r248010: &lt;https://trac.webkit.org/changeset/248010&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>374771</attachid>
            <date>2019-07-24 06:22:29 -0700</date>
            <delta_ts>2019-07-24 07:54:07 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>wk2-soup-session-rework.diff</filename>
            <type>text/plain</type>
            <size>45425</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBlN2M1OGE3Yzc2Ni4uMmVlM2EzMTI0YzUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzNSBAQAorMjAxOS0wNy0yNCAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGln
YWxpYS5jb20+CisKKyAgICAgICAgW1NPVVBdIE1vdmUgU291cE5ldHdvcmtTZXNzaW9uIG93bmVy
c2hpcCBmcm9tIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiB0byBOZXR3b3JrU2Vzc2lvbgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAwMDc2CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVtb3ZlIHRoZSBTb3Vw
TmV0d29ya1Nlc3Npb24gZnJvbSBOZXR3b3JrU3RvcmFnZVNlc3Npb24uCisKKyAgICAgICAgKiBw
bGF0Zm9ybS9uZXR3b3JrL05ldHdvcmtTdG9yYWdlU2Vzc2lvbi5oOgorICAgICAgICAoV2ViQ29y
ZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpjb29raWVTdG9yYWdlIGNvbnN0KTogUmV0dXJuIHRo
ZSBjb29raWUgamFyLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvU3RvcmFnZVNlc3Npb25Q
cm92aWRlci5oOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVNlc3Npb25Qcm92aWRlcjo6c291
cFNlc3Npb24gY29uc3QpOiBUZW1wb3JhcnkgYWRkIHRoaXMgdmlydHVhbCBtZXRob2QgdGhhdCBp
cyByZXF1aXJlZCBieQorICAgICAgICBTb2NrZXRTdHJlYW1IYW5kbGVJbXBsU291cC4gSXQgd2ls
bCBiZSByZW1vdmVkIG9uY2Ugd2Ugc3dpdGNoIHRvIGxpYnNvdXAgV2ViU29ja2V0cyBBUEkgc29v
bi4KKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvRE5TUmVzb2x2ZVF1ZXVlU291cC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpnbG9iYWxEZWZhdWx0U291cFNlc3Npb25BY2Nlc3Nvcik6
IFJld29yayB0aGUgYWNjZXNzb3IgdG8gcmV0dXJuIHRoZSBTb3VwU2Vzc2lvbiBkaXJlY3RseSBz
aW5jZQorICAgICAgICB0aGF0J3Mgd2hhdCB3ZSByZWFsbHkgd2FudC4KKyAgICAgICAgKFdlYkNv
cmU6OkROU1Jlc29sdmVRdWV1ZVNvdXA6OnNldEdsb2JhbERlZmF1bHRTb3VwU2Vzc2lvbkFjY2Vz
c29yKToKKyAgICAgICAgKFdlYkNvcmU6OkROU1Jlc29sdmVRdWV1ZVNvdXA6OnVwZGF0ZUlzVXNp
bmdQcm94eSk6CisgICAgICAgIChXZWJDb3JlOjpETlNSZXNvbHZlUXVldWVTb3VwOjpwbGF0Zm9y
bVJlc29sdmUpOgorICAgICAgICAoV2ViQ29yZTo6RE5TUmVzb2x2ZVF1ZXVlU291cDo6cmVzb2x2
ZSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9zb3VwL0ROU1Jlc29sdmVRdWV1ZVNvdXAu
aDoKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvTmV0d29ya1N0b3JhZ2VTZXNzaW9u
U291cC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb246Ok5ldHdv
cmtTdG9yYWdlU2Vzc2lvbik6IENyZWF0ZSBhbmQgc2V0dXAgdGhlIGRlZmF1bHQgY29va2llIGph
ci4KKyAgICAgICAgKFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6fk5ldHdvcmtTdG9y
YWdlU2Vzc2lvbik6IE9ubHkgZGlzY29ubmVjdCB0aGUgY29va2llIGphciBzaWduYWxzLgorICAg
ICAgICAoV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpzZXRDb29raWVTdG9yYWdlKTog
VXBkYXRlIHRoZSBjb29raWUgamFyLCBub3cgd2Uga25vdyBpdCdzIGFsd2F5cyBhIG5ldyBvbmUu
CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9zb3VwL1NvY2tldFN0cmVhbUhhbmRsZUltcGxT
b3VwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZUltcGw6OmNyZWF0
ZSk6IFVzZSB0aGUgbmV3IHZpcnR1YWwgbWV0aG9kIGZyb20gU3RvcmFnZVNlc3Npb25Qcm92aWRl
ciB0byBnZXQgdGhlIFNvdXBTZXNzaW9uLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvc291
cC9Tb3VwTmV0d29ya1Nlc3Npb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6U291cE5ldHdvcmtT
ZXNzaW9uOjpTb3VwTmV0d29ya1Nlc3Npb24pOiBSZW1vdmUgdGhlIFNvdXBDb29raWVKYXIgcGFy
YW1ldGVyLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvc291cC9Tb3VwTmV0d29ya1Nlc3Np
b24uaDoKKwogMjAxOS0wNy0yMyAgSnVzdGluIEZhbiAgPGp1c3Rpbl9mYW5AYXBwbGUuY29tPgog
CiAgICAgICAgIFtXZWJHUFVdIEltcGxlbWVudCBlcnJvcnMgZm9yIEdQVVJlbmRlclBpcGVsaW5l
IGNyZWF0aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL05l
dHdvcmtTdG9yYWdlU2Vzc2lvbi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9O
ZXR3b3JrU3RvcmFnZVNlc3Npb24uaAppbmRleCA1OGRhODc4OTA3Zi4uZjI4MWM1NGQ3OTYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvTmV0d29ya1N0b3JhZ2VT
ZXNzaW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9OZXR3b3JrU3Rv
cmFnZVNlc3Npb24uaApAQCAtNjUsNyArNjUsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFz
cyBDdXJsUHJveHlTZXR0aW5nczsKIGNsYXNzIE5ldHdvcmtpbmdDb250ZXh0OwogY2xhc3MgUmVz
b3VyY2VSZXF1ZXN0OwotY2xhc3MgU291cE5ldHdvcmtTZXNzaW9uOwogCiBzdHJ1Y3QgQ29va2ll
Owogc3RydWN0IENvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFByb3h5OwpAQCAtOTcsMTMgKzk2LDEx
IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCBSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3Rv
cmFnZVJlZj4gY29va2llU3RvcmFnZSgpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRp
YyB2b2lkIHNldFN0b3JhZ2VBY2Nlc3NBUElFbmFibGVkKGJvb2wpOwogI2VsaWYgVVNFKFNPVVAp
Ci0gICAgV0VCQ09SRV9FWFBPUlQgTmV0d29ya1N0b3JhZ2VTZXNzaW9uKFBBTDo6U2Vzc2lvbklE
LCBzdGQ6OnVuaXF1ZV9wdHI8U291cE5ldHdvcmtTZXNzaW9uPiYmKTsKKyAgICBXRUJDT1JFX0VY
UE9SVCBOZXR3b3JrU3RvcmFnZVNlc3Npb24oUEFMOjpTZXNzaW9uSUQpOwogICAgIH5OZXR3b3Jr
U3RvcmFnZVNlc3Npb24oKTsKIAotICAgIFNvdXBOZXR3b3JrU2Vzc2lvbiYgc291cE5ldHdvcmtT
ZXNzaW9uKCkgY29uc3Q7Ci0gICAgdm9pZCBjbGVhclNvdXBOZXR3b3JrU2Vzc2lvbigpOwotICAg
IFNvdXBDb29raWVKYXIqIGNvb2tpZVN0b3JhZ2UoKSBjb25zdDsKLSAgICB2b2lkIHNldENvb2tp
ZVN0b3JhZ2UoU291cENvb2tpZUphciopOworICAgIFNvdXBDb29raWVKYXIqIGNvb2tpZVN0b3Jh
Z2UoKSBjb25zdCB7IHJldHVybiBtX2Nvb2tpZVN0b3JhZ2UuZ2V0KCk7IH0KKyAgICB2b2lkIHNl
dENvb2tpZVN0b3JhZ2UoR1JlZlB0cjxTb3VwQ29va2llSmFyPiYmKTsKICAgICB2b2lkIHNldENv
b2tpZU9ic2VydmVySGFuZGxlcihGdW5jdGlvbjx2b2lkICgpPiYmKTsKICAgICB2b2lkIGdldENy
ZWRlbnRpYWxGcm9tUGVyc2lzdGVudFN0b3JhZ2UoY29uc3QgUHJvdGVjdGlvblNwYWNlJiwgR0Nh
bmNlbGxhYmxlKiwgRnVuY3Rpb248dm9pZCAoQ3JlZGVudGlhbCYmKT4mJiBjb21wbGV0aW9uSGFu
ZGxlcik7CiAgICAgdm9pZCBzYXZlQ3JlZGVudGlhbFRvUGVyc2lzdGVudFN0b3JhZ2UoY29uc3Qg
UHJvdGVjdGlvblNwYWNlJiwgY29uc3QgQ3JlZGVudGlhbCYpOwpAQCAtMTcxLDcgKzE2OCw3IEBA
IHByaXZhdGU6CiAjZWxpZiBVU0UoU09VUCkKICAgICBzdGF0aWMgdm9pZCBjb29raWVzRGlkQ2hh
bmdlKE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiopOwogCi0gICAgbXV0YWJsZSBzdGQ6OnVuaXF1ZV9w
dHI8U291cE5ldHdvcmtTZXNzaW9uPiBtX3Nlc3Npb247CisgICAgR1JlZlB0cjxTb3VwQ29va2ll
SmFyPiBtX2Nvb2tpZVN0b3JhZ2U7CiAgICAgRnVuY3Rpb248dm9pZCAoKT4gbV9jb29raWVPYnNl
cnZlckhhbmRsZXI7CiAjZWxpZiBVU0UoQ1VSTCkKICAgICBVbmlxdWVSZWY8Q29va2llSmFyQ3Vy
bD4gbV9jb29raWVTdG9yYWdlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9TdG9yYWdlU2Vzc2lvblByb3ZpZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL1N0b3JhZ2VTZXNzaW9uUHJvdmlkZXIuaAppbmRleCAwYzE1NTViNjZhMC4uMzgw
MTA1MDExYjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvU3Rv
cmFnZVNlc3Npb25Qcm92aWRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvU3RvcmFnZVNlc3Npb25Qcm92aWRlci5oCkBAIC0yNyw2ICsyNywxMCBAQAogCiAjaW5jbHVk
ZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CiAKKyNpZiBVU0UoU09VUCkKK3R5cGVkZWYg
c3RydWN0IF9Tb3VwU2Vzc2lvbiBTb3VwU2Vzc2lvbjsKKyNlbmRpZgorCiBuYW1lc3BhY2UgUEFM
IHsKIGNsYXNzIFNlc3Npb25JRDsKIH0KQEAgLTM5LDYgKzQzLDExIEBAIGNsYXNzIFN0b3JhZ2VT
ZXNzaW9uUHJvdmlkZXIgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8U3RvcmFnZVNlc3Np
b25Qcm92aWRlCiBwdWJsaWM6CiAgICAgdmlydHVhbCBOZXR3b3JrU3RvcmFnZVNlc3Npb24qIHN0
b3JhZ2VTZXNzaW9uKCkgY29uc3QgPSAwOwogCisjaWYgVVNFKFNPVVApCisgICAgLy8gRklYTUU6
IFRoaXMgaXMgb25seSByZXF1aXJlZCBieSBTb2NrZXRTdHJlYW1IYW5kbGVJbXBsU291cCwgcmVt
b3ZlIGl0IHdoZW4gd2Ugc3dpdGNoIHRvIGxpYnNvdXAgV2ViU29ja2V0cyBBUEkuCisgICAgdmly
dHVhbCBTb3VwU2Vzc2lvbiogc291cFNlc3Npb24oKSBjb25zdCB7IHJldHVybiBudWxscHRyOyB9
CisjZW5kaWYKKwogICAgIHZpcnR1YWwgflN0b3JhZ2VTZXNzaW9uUHJvdmlkZXIoKSB7IH0KIH07
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9ETlNS
ZXNvbHZlUXVldWVTb3VwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291
cC9ETlNSZXNvbHZlUXVldWVTb3VwLmNwcAppbmRleCBkMjM5Nzc1NDFhZi4uNGJiMzBhODcxZGUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9ETlNSZXNv
bHZlUXVldWVTb3VwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3Nv
dXAvRE5TUmVzb2x2ZVF1ZXVlU291cC5jcHAKQEAgLTI5LDggKzI5LDYgQEAKIAogI2lmIFVTRShT
T1VQKQogCi0jaW5jbHVkZSAiTmV0d29ya1N0b3JhZ2VTZXNzaW9uLmgiCi0jaW5jbHVkZSAiU291
cE5ldHdvcmtTZXNzaW9uLmgiCiAjaW5jbHVkZSA8bGlic291cC9zb3VwLmg+CiAjaW5jbHVkZSA8
d3RmL0NvbXBsZXRpb25IYW5kbGVyLmg+CiAjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uLmg+CkBAIC03
OCwyMSArNzYsMjEgQEAgc3RhdGljIHZvaWQgcHJveHlSZXNvbHZlZEZvckh0dHBzVXJpQ2FsbGJh
Y2soR09iamVjdCogc291cmNlLCBHQXN5bmNSZXN1bHQqIHJlc3UKICAgICBkaWRSZXNvbHZlUHJv
eHkoR19QUk9YWV9SRVNPTFZFUihzb3VyY2UpLCByZXN1bHQsICZpc1VzaW5nSHR0cHNQcm94eSwg
c3RhdGljX2Nhc3Q8Ym9vbCo+KHVzZXJEYXRhKSk7CiB9CiAKLUZ1bmN0aW9uPE5ldHdvcmtTdG9y
YWdlU2Vzc2lvbiYoKT4mIGdsb2JhbERlZmF1bHROZXR3b3JrU3RvcmFnZVNlc3Npb25BY2Nlc3Nv
cigpCitGdW5jdGlvbjxTb3VwU2Vzc2lvbiooKT4mIGdsb2JhbERlZmF1bHRTb3VwU2Vzc2lvbkFj
Y2Vzc29yKCkKIHsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8RnVuY3Rpb248TmV0d29ya1N0
b3JhZ2VTZXNzaW9uJigpPj4gYWNjZXNzb3I7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEZ1
bmN0aW9uPFNvdXBTZXNzaW9uKigpPj4gYWNjZXNzb3I7CiAgICAgcmV0dXJuIGFjY2Vzc29yLmdl
dCgpOwogfQogCi12b2lkIEROU1Jlc29sdmVRdWV1ZVNvdXA6OnNldEdsb2JhbERlZmF1bHROZXR3
b3JrU3RvcmFnZVNlc3Npb25BY2Nlc3NvcihGdW5jdGlvbjxOZXR3b3JrU3RvcmFnZVNlc3Npb24m
KCk+JiYgYWNjZXNzb3IpCit2b2lkIEROU1Jlc29sdmVRdWV1ZVNvdXA6OnNldEdsb2JhbERlZmF1
bHRTb3VwU2Vzc2lvbkFjY2Vzc29yKEZ1bmN0aW9uPFNvdXBTZXNzaW9uKigpPiYmIGFjY2Vzc29y
KQogewotICAgIGdsb2JhbERlZmF1bHROZXR3b3JrU3RvcmFnZVNlc3Npb25BY2Nlc3NvcigpID0g
V1RGTW92ZShhY2Nlc3Nvcik7CisgICAgZ2xvYmFsRGVmYXVsdFNvdXBTZXNzaW9uQWNjZXNzb3Io
KSA9IFdURk1vdmUoYWNjZXNzb3IpOwogfQogCiB2b2lkIEROU1Jlc29sdmVRdWV1ZVNvdXA6OnVw
ZGF0ZUlzVXNpbmdQcm94eSgpCiB7CiAgICAgR1JlZlB0cjxHUHJveHlSZXNvbHZlcj4gcmVzb2x2
ZXI7Ci0gICAgZ19vYmplY3RfZ2V0KGdsb2JhbERlZmF1bHROZXR3b3JrU3RvcmFnZVNlc3Npb25B
Y2Nlc3NvcigpKCkuc291cE5ldHdvcmtTZXNzaW9uKCkuc291cFNlc3Npb24oKSwgInByb3h5LXJl
c29sdmVyIiwgJnJlc29sdmVyLm91dFB0cigpLCBudWxscHRyKTsKKyAgICBnX29iamVjdF9nZXQo
Z2xvYmFsRGVmYXVsdFNvdXBTZXNzaW9uQWNjZXNzb3IoKSgpLCAicHJveHktcmVzb2x2ZXIiLCAm
cmVzb2x2ZXIub3V0UHRyKCksIG51bGxwdHIpOwogICAgIEFTU0VSVChyZXNvbHZlcik7CiAKICAg
ICBnX3Byb3h5X3Jlc29sdmVyX2xvb2t1cF9hc3luYyhyZXNvbHZlci5nZXQoKSwgImh0dHA6Ly9l
eGFtcGxlLmNvbS8iLCBudWxscHRyLCBwcm94eVJlc29sdmVkRm9ySHR0cFVyaUNhbGxiYWNrLCAm
bV9pc1VzaW5nUHJveHkpOwpAQCAtMTc1LDcgKzE3Myw3IEBAIHZvaWQgRE5TUmVzb2x2ZVF1ZXVl
U291cDo6cGxhdGZvcm1SZXNvbHZlKGNvbnN0IFN0cmluZyYgaG9zdG5hbWUpCiB7CiAgICAgQVNT
RVJUKGlzTWFpblRocmVhZCgpKTsKIAotICAgIHNvdXBfc2Vzc2lvbl9wcmVmZXRjaF9kbnMoZ2xv
YmFsRGVmYXVsdE5ldHdvcmtTdG9yYWdlU2Vzc2lvbkFjY2Vzc29yKCkoKS5zb3VwTmV0d29ya1Nl
c3Npb24oKS5zb3VwU2Vzc2lvbigpLCBob3N0bmFtZS51dGY4KCkuZGF0YSgpLCBudWxscHRyLCBy
ZXNvbHZlZENhbGxiYWNrLCBudWxscHRyKTsKKyAgICBzb3VwX3Nlc3Npb25fcHJlZmV0Y2hfZG5z
KGdsb2JhbERlZmF1bHRTb3VwU2Vzc2lvbkFjY2Vzc29yKCkoKSwgaG9zdG5hbWUudXRmOCgpLmRh
dGEoKSwgbnVsbHB0ciwgcmVzb2x2ZWRDYWxsYmFjaywgbnVsbHB0cik7CiB9CiAKIHZvaWQgRE5T
UmVzb2x2ZVF1ZXVlU291cDo6cmVzb2x2ZShjb25zdCBTdHJpbmcmIGhvc3RuYW1lLCB1aW50NjRf
dCBpZGVudGlmaWVyLCBETlNDb21wbGV0aW9uSGFuZGxlciYmIGNvbXBsZXRpb25IYW5kbGVyKQpA
QCAtMTg0LDcgKzE4Miw3IEBAIHZvaWQgRE5TUmVzb2x2ZVF1ZXVlU291cDo6cmVzb2x2ZShjb25z
dCBTdHJpbmcmIGhvc3RuYW1lLCB1aW50NjRfdCBpZGVudGlmaWVyLCBECiAKICAgICBhdXRvIGFk
ZHJlc3MgPSBhZG9wdEdSZWYoc291cF9hZGRyZXNzX25ldyhob3N0bmFtZS51dGY4KCkuZGF0YSgp
LCAwKSk7CiAgICAgYXV0byBjYW5jZWxsYWJsZSA9IGFkb3B0R1JlZihnX2NhbmNlbGxhYmxlX25l
dygpKTsKLSAgICBzb3VwX2FkZHJlc3NfcmVzb2x2ZV9hc3luYyhhZGRyZXNzLmdldCgpLCBzb3Vw
X3Nlc3Npb25fZ2V0X2FzeW5jX2NvbnRleHQoV2ViQ29yZTo6Z2xvYmFsRGVmYXVsdE5ldHdvcmtT
dG9yYWdlU2Vzc2lvbkFjY2Vzc29yKCkoKS5zb3VwTmV0d29ya1Nlc3Npb24oKS5zb3VwU2Vzc2lv
bigpKSwgY2FuY2VsbGFibGUuZ2V0KCksIHJlc29sdmVkV2l0aE9ic2VydmVyQ2FsbGJhY2ssIHRo
aXMpOworICAgIHNvdXBfYWRkcmVzc19yZXNvbHZlX2FzeW5jKGFkZHJlc3MuZ2V0KCksIHNvdXBf
c2Vzc2lvbl9nZXRfYXN5bmNfY29udGV4dChnbG9iYWxEZWZhdWx0U291cFNlc3Npb25BY2Nlc3Nv
cigpKCkpLCBjYW5jZWxsYWJsZS5nZXQoKSwgcmVzb2x2ZWRXaXRoT2JzZXJ2ZXJDYWxsYmFjaywg
dGhpcyk7CiAKICAgICBnX29iamVjdF9zZXRfZGF0YShHX09CSkVDVChhZGRyZXNzLmdldCgpKSwg
ImlkZW50aWZpZXIiLCBHVUlOVF9UT19QT0lOVEVSKGlkZW50aWZpZXIpKTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL0ROU1Jlc29sdmVRdWV1ZVNv
dXAuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9ETlNSZXNvbHZlUXVl
dWVTb3VwLmgKaW5kZXggNTcyMDM0ZjU0YWMuLmNlZTc5ZjkzMzMxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvRE5TUmVzb2x2ZVF1ZXVlU291cC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9ETlNSZXNvbHZlUXVldWVT
b3VwLmgKQEAgLTMwLDYgKzMwLDggQEAKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1
ZGUgPHd0Zi9nbGliL0dSZWZQdHIuaD4KIAordHlwZWRlZiBzdHJ1Y3QgX1NvdXBTZXNzaW9uIFNv
dXBTZXNzaW9uOworCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIE5ldHdvcmtTdG9yYWdl
U2Vzc2lvbjsKQEAgLTM5LDcgKzQxLDcgQEAgcHVibGljOgogICAgIHVzaW5nIENvbXBsZXRpb25B
bmRDYW5jZWxIYW5kbGVycyA9IHN0ZDo6cGFpcjxXZWJDb3JlOjpETlNDb21wbGV0aW9uSGFuZGxl
ciwgR1JlZlB0cjxHQ2FuY2VsbGFibGU+PjsKIAogICAgIEROU1Jlc29sdmVRdWV1ZVNvdXAoKSA9
IGRlZmF1bHQ7Ci0gICAgc3RhdGljIHZvaWQgc2V0R2xvYmFsRGVmYXVsdE5ldHdvcmtTdG9yYWdl
U2Vzc2lvbkFjY2Vzc29yKEZ1bmN0aW9uPE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYoKT4mJik7Cisg
ICAgc3RhdGljIHZvaWQgc2V0R2xvYmFsRGVmYXVsdFNvdXBTZXNzaW9uQWNjZXNzb3IoRnVuY3Rp
b248U291cFNlc3Npb24qKCk+JiYpOwogICAgIHZvaWQgcmVzb2x2ZShjb25zdCBTdHJpbmcmIGhv
c3RuYW1lLCB1aW50NjRfdCBpZGVudGlmaWVyLCBETlNDb21wbGV0aW9uSGFuZGxlciYmKSBmaW5h
bDsKICAgICB2b2lkIHN0b3BSZXNvbHZlKHVpbnQ2NF90IGlkZW50aWZpZXIpIGZpbmFsOwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvTmV0d29ya1N0
b3JhZ2VTZXNzaW9uU291cC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3Nv
dXAvTmV0d29ya1N0b3JhZ2VTZXNzaW9uU291cC5jcHAKaW5kZXggMDUzZjZiOTFhNjQuLmU0Yzhi
MGYxM2U2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAv
TmV0d29ya1N0b3JhZ2VTZXNzaW9uU291cC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9zb3VwL05ldHdvcmtTdG9yYWdlU2Vzc2lvblNvdXAuY3BwCkBAIC01MywzNCAr
NTMsMTcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1OZXR3b3JrU3RvcmFnZVNlc3Npb246
Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbihQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIHN0ZDo6dW5p
cXVlX3B0cjxTb3VwTmV0d29ya1Nlc3Npb24+JiYgc2Vzc2lvbikKK05ldHdvcmtTdG9yYWdlU2Vz
c2lvbjo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKICAg
ICA6IG1fc2Vzc2lvbklEKHNlc3Npb25JRCkKLSAgICAsIG1fc2Vzc2lvbihXVEZNb3ZlKHNlc3Np
b24pKQorICAgICwgbV9jb29raWVTdG9yYWdlKGFkb3B0R1JlZihzb3VwX2Nvb2tpZV9qYXJfbmV3
KCkpKQogewotICAgIEFTU0VSVChtX3Nlc3Npb24tPmNvb2tpZUphcigpKTsKLSAgICBnX3NpZ25h
bF9jb25uZWN0X3N3YXBwZWQobV9zZXNzaW9uLT5jb29raWVKYXIoKSwgImNoYW5nZWQiLCBHX0NB
TExCQUNLKGNvb2tpZXNEaWRDaGFuZ2UpLCB0aGlzKTsKKyAgICBzb3VwX2Nvb2tpZV9qYXJfc2V0
X2FjY2VwdF9wb2xpY3kobV9jb29raWVTdG9yYWdlLmdldCgpLCBTT1VQX0NPT0tJRV9KQVJfQUND
RVBUX05PX1RISVJEX1BBUlRZKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0X3N3YXBwZWQobV9jb29r
aWVTdG9yYWdlLmdldCgpLCAiY2hhbmdlZCIsIEdfQ0FMTEJBQ0soY29va2llc0RpZENoYW5nZSks
IHRoaXMpOwogfQogCiBOZXR3b3JrU3RvcmFnZVNlc3Npb246On5OZXR3b3JrU3RvcmFnZVNlc3Np
b24oKQogewotICAgIGNsZWFyU291cE5ldHdvcmtTZXNzaW9uKCk7Ci19Ci0KLVNvdXBOZXR3b3Jr
U2Vzc2lvbiYgTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpzb3VwTmV0d29ya1Nlc3Npb24oKSBjb25z
dAotewotICAgIEFTU0VSVChtX3Nlc3Npb24pOwotICAgIHJldHVybiAqbV9zZXNzaW9uLmdldCgp
OwotfTsKLQotdm9pZCBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmNsZWFyU291cE5ldHdvcmtTZXNz
aW9uKCkKLXsKLSAgICBpZiAobV9zZXNzaW9uKSB7Ci0gICAgICAgIEFTU0VSVChtX3Nlc3Npb24t
PmNvb2tpZUphcigpKTsKLSAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9tYXRj
aGVkKG1fc2Vzc2lvbi0+Y29va2llSmFyKCksIEdfU0lHTkFMX01BVENIX0RBVEEsIDAsIDAsIG51
bGxwdHIsIG51bGxwdHIsIHRoaXMpOwotICAgIH0KLQotICAgIG1fc2Vzc2lvbiA9IG51bGxwdHI7
Ci0gICAgbV9jb29raWVPYnNlcnZlckhhbmRsZXIgPSBudWxscHRyOworICAgIGdfc2lnbmFsX2hh
bmRsZXJzX2Rpc2Nvbm5lY3RfbWF0Y2hlZChtX2Nvb2tpZVN0b3JhZ2UuZ2V0KCksIEdfU0lHTkFM
X01BVENIX0RBVEEsIDAsIDAsIG51bGxwdHIsIG51bGxwdHIsIHRoaXMpOwogfQogCiB2b2lkIE5l
dHdvcmtTdG9yYWdlU2Vzc2lvbjo6Y29va2llc0RpZENoYW5nZShOZXR3b3JrU3RvcmFnZVNlc3Np
b24qIHNlc3Npb24pCkBAIC04OSwyNSArNzIsMTEgQEAgdm9pZCBOZXR3b3JrU3RvcmFnZVNlc3Np
b246OmNvb2tpZXNEaWRDaGFuZ2UoTmV0d29ya1N0b3JhZ2VTZXNzaW9uKiBzZXNzaW9uKQogICAg
ICAgICBzZXNzaW9uLT5tX2Nvb2tpZU9ic2VydmVySGFuZGxlcigpOwogfQogCi1Tb3VwQ29va2ll
SmFyKiBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmNvb2tpZVN0b3JhZ2UoKSBjb25zdAotewotICAg
IEFTU0VSVChtX3Nlc3Npb24pOwotICAgIEFTU0VSVChtX3Nlc3Npb24tPmNvb2tpZUphcigpKTsK
LSAgICByZXR1cm4gbV9zZXNzaW9uLT5jb29raWVKYXIoKTsKLX0KLQotdm9pZCBOZXR3b3JrU3Rv
cmFnZVNlc3Npb246OnNldENvb2tpZVN0b3JhZ2UoU291cENvb2tpZUphciogamFyKQordm9pZCBO
ZXR3b3JrU3RvcmFnZVNlc3Npb246OnNldENvb2tpZVN0b3JhZ2UoR1JlZlB0cjxTb3VwQ29va2ll
SmFyPiYmIGphcikKIHsKLSAgICBBU1NFUlQoamFyKTsKLSAgICBBU1NFUlQobV9zZXNzaW9uKTsK
LSAgICBBU1NFUlQobV9zZXNzaW9uLT5jb29raWVKYXIoKSk7Ci0KLSAgICBpZiAobV9zZXNzaW9u
LT5jb29raWVKYXIoKSA9PSBqYXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIGdfc2lnbmFsX2hh
bmRsZXJzX2Rpc2Nvbm5lY3RfbWF0Y2hlZChtX3Nlc3Npb24tPmNvb2tpZUphcigpLCBHX1NJR05B
TF9NQVRDSF9EQVRBLCAwLCAwLCBudWxscHRyLCBudWxscHRyLCB0aGlzKTsKLSAgICBtX3Nlc3Np
b24tPnNldENvb2tpZUphcihqYXIpOwotICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChtX3Nl
c3Npb24tPmNvb2tpZUphcigpLCAiY2hhbmdlZCIsIEdfQ0FMTEJBQ0soY29va2llc0RpZENoYW5n
ZSksIHRoaXMpOworICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfbWF0Y2hlZChtX2Nv
b2tpZVN0b3JhZ2UuZ2V0KCksIEdfU0lHTkFMX01BVENIX0RBVEEsIDAsIDAsIG51bGxwdHIsIG51
bGxwdHIsIHRoaXMpOworICAgIG1fY29va2llU3RvcmFnZSA9IFdURk1vdmUoamFyKTsKKyAgICBn
X3NpZ25hbF9jb25uZWN0X3N3YXBwZWQobV9jb29raWVTdG9yYWdlLmdldCgpLCAiY2hhbmdlZCIs
IEdfQ0FMTEJBQ0soY29va2llc0RpZENoYW5nZSksIHRoaXMpOwogfQogCiB2b2lkIE5ldHdvcmtT
dG9yYWdlU2Vzc2lvbjo6c2V0Q29va2llT2JzZXJ2ZXJIYW5kbGVyKEZ1bmN0aW9uPHZvaWQgKCk+
JiYgaGFuZGxlcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
c291cC9Tb2NrZXRTdHJlYW1IYW5kbGVJbXBsU291cC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL3NvdXAvU29ja2V0U3RyZWFtSGFuZGxlSW1wbFNvdXAuY3BwCmluZGV4IGVk
NzhlNGRkZDU5Li5mYmRjYmIxNWU0ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9zb3VwL1NvY2tldFN0cmVhbUhhbmRsZUltcGxTb3VwLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvU29ja2V0U3RyZWFtSGFuZGxlSW1wbFNv
dXAuY3BwCkBAIC0zNiwxMSArMzYsOSBAQAogCiAjaW5jbHVkZSAiRGVwcmVjYXRlZEdsb2JhbFNl
dHRpbmdzLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgotI2luY2x1ZGUgIk5ldHdvcmtTdG9yYWdl
U2Vzc2lvbi5oIgogI2luY2x1ZGUgIlJlc291cmNlRXJyb3IuaCIKICNpbmNsdWRlICJTb2NrZXRT
dHJlYW1FcnJvci5oIgogI2luY2x1ZGUgIlNvY2tldFN0cmVhbUhhbmRsZUNsaWVudC5oIgotI2lu
Y2x1ZGUgIlNvdXBOZXR3b3JrU2Vzc2lvbi5oIgogI2luY2x1ZGUgIlN0b3JhZ2VTZXNzaW9uUHJv
dmlkZXIuaCIKICNpbmNsdWRlICJVUkxTb3VwLmgiCiAjaW5jbHVkZSA8Z2lvL2dpby5oPgpAQCAt
ODcsMTMgKzg1LDEzIEBAIFJlZjxTb2NrZXRTdHJlYW1IYW5kbGVJbXBsPiBTb2NrZXRTdHJlYW1I
YW5kbGVJbXBsOjpjcmVhdGUoY29uc3QgVVJMJiB1cmwsIFNvY2tlCiAgICAgUmVmPFNvY2tldFN0
cmVhbUhhbmRsZUltcGw+IHNvY2tldCA9IGFkb3B0UmVmKCpuZXcgU29ja2V0U3RyZWFtSGFuZGxl
SW1wbCh1cmwsIGNsaWVudCwgc3RvcmFnZVNlc3Npb25Qcm92aWRlcikpOwogCiAjaWYgU09VUF9D
SEVDS19WRVJTSU9OKDIsIDYxLCA5MCkKLSAgICBhdXRvKiBuZXR3b3JrU3RvcmFnZVNlc3Npb24g
PSBzdG9yYWdlU2Vzc2lvblByb3ZpZGVyID8gc3RvcmFnZVNlc3Npb25Qcm92aWRlci0+c3RvcmFn
ZVNlc3Npb24oKSA6IG51bGxwdHI7Ci0gICAgaWYgKCFuZXR3b3JrU3RvcmFnZVNlc3Npb24pCisg
ICAgYXV0byogc291cFNlc3Npb24gPSBzdG9yYWdlU2Vzc2lvblByb3ZpZGVyID8gc3RvcmFnZVNl
c3Npb25Qcm92aWRlci0+c291cFNlc3Npb24oKSA6IG51bGxwdHI7CisgICAgaWYgKCFzb3VwU2Vz
c2lvbikKICAgICAgICAgcmV0dXJuIHNvY2tldDsKIAogICAgIGF1dG8gdXJpID0gdXJsVG9Tb3Vw
VVJJKHVybCk7CiAgICAgUmVmPFNvY2tldFN0cmVhbUhhbmRsZT4gcHJvdGVjdGVkU29ja2V0U3Ry
ZWFtSGFuZGxlID0gc29ja2V0LmNvcHlSZWYoKTsKLSAgICBzb3VwX3Nlc3Npb25fY29ubmVjdF9h
c3luYyhuZXR3b3JrU3RvcmFnZVNlc3Npb24tPnNvdXBOZXR3b3JrU2Vzc2lvbigpLnNvdXBTZXNz
aW9uKCksIHVyaS5nZXQoKSwgc29ja2V0LT5tX2NhbmNlbGxhYmxlLmdldCgpLAorICAgIHNvdXBf
c2Vzc2lvbl9jb25uZWN0X2FzeW5jKHNvdXBTZXNzaW9uLCB1cmkuZ2V0KCksIHNvY2tldC0+bV9j
YW5jZWxsYWJsZS5nZXQoKSwKICAgICAgICAgdXJsLnByb3RvY29sSXMoIndzcyIpID8gcmVpbnRl
cnByZXRfY2FzdDxTb3VwU2Vzc2lvbkNvbm5lY3RQcm9ncmVzc0NhbGxiYWNrPihjb25uZWN0UHJv
Z3Jlc3NDYWxsYmFjaykgOiBudWxscHRyLAogICAgICAgICByZWludGVycHJldF9jYXN0PEdBc3lu
Y1JlYWR5Q2FsbGJhY2s+KGNvbm5lY3RlZENhbGxiYWNrKSwgJnByb3RlY3RlZFNvY2tldFN0cmVh
bUhhbmRsZS5sZWFrUmVmKCkpOwogI2Vsc2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvc291cC9Tb3VwTmV0d29ya1Nlc3Npb24uY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1NvdXBOZXR3b3JrU2Vzc2lvbi5jcHAKaW5kZXggNjEy
NGY0NmMyNGQuLjYxODk5OGYyNTFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL3NvdXAvU291cE5ldHdvcmtTZXNzaW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvU291cE5ldHdvcmtTZXNzaW9uLmNwcApAQCAtMTA2LDcg
KzEwNiw3IEBAIHN0YXRpYyBBbGxvd2VkQ2VydGlmaWNhdGVzTWFwJiBhbGxvd2VkQ2VydGlmaWNh
dGVzKCkKICAgICByZXR1cm4gY2VydGlmaWNhdGVzOwogfQogCi1Tb3VwTmV0d29ya1Nlc3Npb246
OlNvdXBOZXR3b3JrU2Vzc2lvbihQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIFNvdXBDb29raWVK
YXIqIGNvb2tpZUphcikKK1NvdXBOZXR3b3JrU2Vzc2lvbjo6U291cE5ldHdvcmtTZXNzaW9uKFBB
TDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKICAgICA6IG1fc291cFNlc3Npb24oYWRvcHRHUmVmKHNv
dXBfc2Vzc2lvbl9uZXcoKSkpCiB7CiAgICAgLy8gVmFsdWVzIHRha2VuIGZyb20gaHR0cDovL3d3
dy5icm93c2Vyc2NvcGUub3JnLyBmb2xsb3dpbmcKQEAgLTExNiwxOSArMTE2LDEyIEBAIFNvdXBO
ZXR3b3JrU2Vzc2lvbjo6U291cE5ldHdvcmtTZXNzaW9uKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25J
RCwgU291cENvb2tpZUphcioKICAgICBzdGF0aWMgY29uc3QgaW50IG1heENvbm5lY3Rpb25zID0g
MTc7CiAgICAgc3RhdGljIGNvbnN0IGludCBtYXhDb25uZWN0aW9uc1Blckhvc3QgPSA2OwogCi0g
ICAgR1JlZlB0cjxTb3VwQ29va2llSmFyPiBqYXIgPSBjb29raWVKYXI7Ci0gICAgaWYgKCFqYXIp
IHsKLSAgICAgICAgamFyID0gYWRvcHRHUmVmKHNvdXBfY29va2llX2phcl9uZXcoKSk7Ci0gICAg
ICAgIHNvdXBfY29va2llX2phcl9zZXRfYWNjZXB0X3BvbGljeShqYXIuZ2V0KCksIFNPVVBfQ09P
S0lFX0pBUl9BQ0NFUFRfTk9fVEhJUkRfUEFSVFkpOwotICAgIH0KLQogICAgIGdfb2JqZWN0X3Nl
dChtX3NvdXBTZXNzaW9uLmdldCgpLAogICAgICAgICBTT1VQX1NFU1NJT05fTUFYX0NPTk5TLCBt
YXhDb25uZWN0aW9ucywKICAgICAgICAgU09VUF9TRVNTSU9OX01BWF9DT05OU19QRVJfSE9TVCwg
bWF4Q29ubmVjdGlvbnNQZXJIb3N0LAogICAgICAgICBTT1VQX1NFU1NJT05fVElNRU9VVCwgMCwK
ICAgICAgICAgU09VUF9TRVNTSU9OX0lETEVfVElNRU9VVCwgMCwKICAgICAgICAgU09VUF9TRVNT
SU9OX0FERF9GRUFUVVJFX0JZX1RZUEUsIFNPVVBfVFlQRV9DT05URU5UX1NOSUZGRVIsCi0gICAg
ICAgIFNPVVBfU0VTU0lPTl9BRERfRkVBVFVSRSwgamFyLmdldCgpLAogICAgICAgICBudWxscHRy
KTsKIAogICAgIHNldHVwQ3VzdG9tUHJvdG9jb2xzKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvU291cE5ldHdvcmtTZXNzaW9uLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvU291cE5ldHdvcmtTZXNzaW9uLmgKaW5kZXgg
ZmZiZDQ5YTc2MmEuLjVlMzJkMzFhZDRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL3NvdXAvU291cE5ldHdvcmtTZXNzaW9uLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1NvdXBOZXR3b3JrU2Vzc2lvbi5oCkBAIC00OSw3ICs0
OSw3IEBAIHN0cnVjdCBTb3VwTmV0d29ya1Byb3h5U2V0dGluZ3M7CiBjbGFzcyBTb3VwTmV0d29y
a1Nlc3Npb24gewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFNvdXBOZXR3b3JrU2Vzc2lvbik7
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIGV4cGxpY2l0IFNvdXBOZXR3
b3JrU2Vzc2lvbihQQUw6OlNlc3Npb25JRCA9IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lv
bklEKCksIFNvdXBDb29raWVKYXIqID0gbnVsbHB0cik7CisgICAgZXhwbGljaXQgU291cE5ldHdv
cmtTZXNzaW9uKFBBTDo6U2Vzc2lvbklEKTsKICAgICB+U291cE5ldHdvcmtTZXNzaW9uKCk7CiAK
ICAgICBTb3VwU2Vzc2lvbiogc291cFNlc3Npb24oKSBjb25zdCB7IHJldHVybiBtX3NvdXBTZXNz
aW9uLmdldCgpOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDdiN2M4ZDk2YTdlLi41YTY2OGUxNWVhMyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VM
b2cKQEAgLTEsMyArMSw1OCBAQAorMjAxOS0wNy0yNCAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxj
Z2FyY2lhQGlnYWxpYS5jb20+CisKKyAgICAgICAgW1NPVVBdIE1vdmUgU291cE5ldHdvcmtTZXNz
aW9uIG93bmVyc2hpcCBmcm9tIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiB0byBOZXR3b3JrU2Vzc2lv
bgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAwMDc2
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTmV0d29y
a1N0b3JhZ2VTZXNzaW9uIHNob3VsZCBvbmx5IG93biB0aGUgY29va2llIGphciwgc2luY2UgaXQn
cyB0aGUgb25seSB0aGluZyBpdCBoYW5kbGVzIGZyb20gdGhlIHNlc3Npb24uCisKKyAgICAgICAg
KiBOZXR3b3JrUHJvY2Vzcy9Db29raWVzL3NvdXAvV2ViQ29va2llTWFuYWdlclNvdXAuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyOjpzZXRDb29raWVQZXJzaXN0ZW50U3Rv
cmFnZSk6IFVzZSB0aGUgbmV0d29yayBzZXNzaW9uIGluc3RlYWQgb2YgdGhlIHN0b3JhZ2Ugc2Vz
c2lvbgorICAgICAgICB0byBzZXQgdGhlIHBlcmlzdGVudCBjb29raWUgc3RvcmFnZS4KKyAgICAg
ICAgKiBOZXR3b3JrUHJvY2Vzcy9DdXN0b21Qcm90b2NvbHMvc291cC9MZWdhY3lDdXN0b21Qcm90
b2NvbE1hbmFnZXJTb3VwLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TGVnYWN5Q3VzdG9tUHJvdG9j
b2xNYW5hZ2VyOjpyZWdpc3RlclNjaGVtZSk6IEl0ZXJhdGUgbmV0d29yayBzZXNzaW9ucyBpbnN0
ZWFkIG9mIHN0b3JhZ2Ugc2Vzc2lvbnMgdG8KKyAgICAgICAgYWNjZXNzIHRoZSBTb3VwTmV0d29y
a1Nlc3Npb24uCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dl
YlByb2Nlc3MuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJv
Y2Vzczo6cmVzb3VyY2VMb2FkU3RhdGlzdGljc1VwZGF0ZWQpOiBVc2UKKyAgICAgICAgTmV0d29y
a1Byb2Nlc3M6OmZvckVhY2hOZXR3b3JrU2Vzc2lvbigpIHRvIGl0ZXJhdGUgbmV0d29yayBzZXNz
aW9ucy4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHA6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpsb3dNZW1vcnlIYW5kbGVyKTogRGl0dG8uCisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpmb3JFYWNoTmV0d29ya1Nlc3Npb24pOiBB
ZGRlZCB0byBpdGVyYXRlIG5ldHdvcmsgc2Vzc2lvbnMgaW50ZWFkIG9mIGV4cG9zaW5nIHRoZSBt
YXAKKyAgICAgICAgdGhhdCBpcyBhbHdheXMgdXNlZCB0byBpdGVyYXRlIHRoZSBzZXNzaW9ucy4K
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OnN3aXRjaFRvTmV3VGVzdGluZ1Nlc3Np
b24pOiBVc2UgdGhlIG5ldyBOZXR3b3JrU3RvcmFnZVNlc3Npb24gY29uc3RydWN0b3IgQVBJLgor
ICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6ZW5zdXJlU2Vzc2lvbik6IERpdHRvLgor
ICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6ZGVzdHJveVNlc3Npb24pOiBBbGxvdyB0
byBkZXN0cm95IHRoZSBkZWZhdWx0IHNlc3Npb24gZm9yIHNvdXAgYmFzZWQgcG9ydHMuIFRoaXMg
aXMKKyAgICAgICAgb25seSBjYWxsZWQgcmlnaHQgYmVmb3JlIHByb2Nlc3MgZXhpdCB0byBlbnN1
cmUgd2UgZG9uJ3QgbGVhayBuZXR3b3JrIHJlc291cmNlcyBsaWtlIHRoZSBjb29raWVzIGRhdGFi
YXNlLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6c2V0UmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0VuYWJsZWQpOiBVc2UgTmV0d29ya1Byb2Nlc3M6OmZvckVhY2hOZXR3b3JrU2Vzc2lv
bigpIHRvCisgICAgICAgIGl0ZXJhdGUgbmV0d29yayBzZXNzaW9ucy4KKyAgICAgICAgKFdlYktp
dDo6TmV0d29ya1Byb2Nlc3M6OmZldGNoV2Vic2l0ZURhdGEpOiBEaXR0by4KKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya1Byb2Nlc3M6OmRlbGV0ZVdlYnNpdGVEYXRhRm9yT3JpZ2lucyk6IERpdHRv
LgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6ZGVsZXRlV2Vic2l0ZURhdGFGb3JS
ZWdpc3RyYWJsZURvbWFpbnMpOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nl
c3M6OnJlZ2lzdHJhYmxlRG9tYWluc1dpdGhXZWJzaXRlRGF0YSk6IERpdHRvLgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6c2V0Q2FjaGVNb2RlbCk6IERpdHRvLgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6YWN0dWFsUHJlcGFyZVRvU3VzcGVuZCk6IERpdHRvLgor
ICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6cmVzdW1lKTogRGl0dG8uCisgICAgICAg
ICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaDoKKyAgICAgICAgKiBOZXR3b3JrUHJv
Y2Vzcy9OZXR3b3JrU3RvcmFnZVNlc3Npb25Qcm92aWRlci5oOgorICAgICAgICAqIE5ldHdvcmtQ
cm9jZXNzL2NvY29hL05ldHdvcmtQcm9jZXNzQ29jb2EubW06CisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtQcm9jZXNzOjpjbGVhckRpc2tDYWNoZSk6IERpdHRvLgorICAgICAgICAqIE5ldHdvcmtQ
cm9jZXNzL2lvcy9OZXR3b3JrUHJvY2Vzc0lPUy5tbToKKyAgICAgICAgKFdlYktpdDo6TmV0d29y
a1Byb2Nlc3M6OmNsZWFyQ2FjaGVGb3JBbGxPcmlnaW5zKTogRGl0dG8uCisgICAgICAgICogTmV0
d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrUHJvY2Vzc01haW5Tb3VwLmNwcDogRGVzdHJveSB0aGUg
ZGVmYXVsdCBzZXNzaW9uIGJlZm9yZSBwcm9jZXNzIGV4aXN0cy4KKyAgICAgICAgKiBOZXR3b3Jr
UHJvY2Vzcy9zb3VwL05ldHdvcmtQcm9jZXNzU291cC5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtQcm9jZXNzOjp1c2VyUHJlZmVycmVkTGFuZ3VhZ2VzQ2hhbmdlZCk6IEl0ZXJhdGUgbmV0
d29yayBzZXNzaW9ucyBpbnN0ZWFkIG9mIHN0b3JhZ2Ugc2Vzc2lvbnMgdG8KKyAgICAgICAgYWNj
ZXNzIHRoZSBTb3VwTmV0d29ya1Nlc3Npb24uCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9j
ZXNzOjpwbGF0Zm9ybUNyZWF0ZURlZmF1bHRTdG9yYWdlU2Vzc2lvbiBjb25zdCk6IFVzZSB0aGUg
bmV3IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiBjb25zdHJ1Y3RvciBBUEkuCisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtQcm9jZXNzOjpjbGVhckRpc2tDYWNoZSk6IFVzZSBOZXR3b3JrUHJvY2Vzczo6
Zm9yRWFjaE5ldHdvcmtTZXNzaW9uKCkgdG8gaXRlcmF0ZSBuZXR3b3JrIHNlc3Npb25zLgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6c2V0TmV0d29ya1Byb3h5U2V0dGluZ3MpOiBJ
dGVyYXRlIG5ldHdvcmsgc2Vzc2lvbnMgaW5zdGVhZCBvZiBzdG9yYWdlIHNlc3Npb25zIHRvCisg
ICAgICAgIGFjY2VzcyB0aGUgU291cE5ldHdvcmtTZXNzaW9uLgorICAgICAgICAqIE5ldHdvcmtQ
cm9jZXNzL3NvdXAvTmV0d29ya1Nlc3Npb25Tb3VwLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0
d29ya1Nlc3Npb25Tb3VwOjpOZXR3b3JrU2Vzc2lvblNvdXApOiBDcmVhdGUgdGhlIFNvdXBOZXR3
b3JrU2Vzc2lvbiBhbmQgc2V0dXAgY29va2llcy4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Nl
c3Npb25Tb3VwOjpzb3VwU2Vzc2lvbiBjb25zdCk6IFJldHVybiB0aGUgU291cFNlc3Npb24gb2Yg
U291cE5ldHdvcmtTZXNzaW9uLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrU2Vzc2lvblNvdXA6
OnNldENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlKTogU2V0dXAgYSBuZXcgY29va2llIGphci4KKyAg
ICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtTZXNzaW9uU291cC5oOgorCiAyMDE5
LTA3LTIzICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgQ3Jhc2gg
dW5kZXIgV2ViS2l0OldURjo6RGV0YWlsOjpDYWxsYWJsZVdyYXBwZXI8V2ViS2l0OjpSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnVwZGF0ZUNvb2tpZUJsb2NraW5nKFdURjo6Q29t
cGxldGlvbkhhbmRsZXI8dm9pZCAoKT4mJik6OiRfMzI6Om9wZXJhdG9yKCkoKTo6J2xhbWJkYSco
KSwgdm9pZD46OmNhbGwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
Q29va2llcy9zb3VwL1dlYkNvb2tpZU1hbmFnZXJTb3VwLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvQ29va2llcy9zb3VwL1dlYkNvb2tpZU1hbmFnZXJTb3VwLmNwcAppbmRleCAy
OGNhYjIwODk0YS4uNGQ5N2RhN2I2OWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvQ29va2llcy9zb3VwL1dlYkNvb2tpZU1hbmFnZXJTb3VwLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvc291cC9XZWJDb29raWVNYW5hZ2VyU291
cC5jcHAKQEAgLTI3LDEyICsyNywxMSBAQAogI2luY2x1ZGUgIldlYkNvb2tpZU1hbmFnZXIuaCIK
IAogI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzLmgiCisjaW5jbHVkZSAiTmV0d29ya1Nlc3Npb25T
b3VwLmgiCiAjaW5jbHVkZSAiU291cENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlVHlwZS5oIgogI2lu
Y2x1ZGUgPFdlYkNvcmUvTmV0d29ya1N0b3JhZ2VTZXNzaW9uLmg+CiAjaW5jbHVkZSA8V2ViQ29y
ZS9Tb3VwTmV0d29ya1Nlc3Npb24uaD4KICNpbmNsdWRlIDxsaWJzb3VwL3NvdXAuaD4KLSNpbmNs
dWRlIDx3dGYvZ2xpYi9HUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgog
CiBuYW1lc3BhY2UgV2ViS2l0IHsKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwpAQCAtNzcsMjIg
Kzc2LDggQEAgSFRUUENvb2tpZUFjY2VwdFBvbGljeSBXZWJDb29raWVNYW5hZ2VyOjpwbGF0Zm9y
bUdldEhUVFBDb29raWVBY2NlcHRQb2xpY3koKQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXI6OnNl
dENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3Qg
U3RyaW5nJiBzdG9yYWdlUGF0aCwgU291cENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlVHlwZSBzdG9y
YWdlVHlwZSkKIHsKLSAgICBHUmVmUHRyPFNvdXBDb29raWVKYXI+IGphcjsKLSAgICBzd2l0Y2gg
KHN0b3JhZ2VUeXBlKSB7Ci0gICAgY2FzZSBTb3VwQ29va2llUGVyc2lzdGVudFN0b3JhZ2VUeXBl
OjpUZXh0OgotICAgICAgICBqYXIgPSBhZG9wdEdSZWYoc291cF9jb29raWVfamFyX3RleHRfbmV3
KHN0b3JhZ2VQYXRoLnV0ZjgoKS5kYXRhKCksIEZBTFNFKSk7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgU291cENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlVHlwZTo6U1FMaXRlOgotICAgICAgICBq
YXIgPSBhZG9wdEdSZWYoc291cF9jb29raWVfamFyX2RiX25ldyhzdG9yYWdlUGF0aC51dGY4KCku
ZGF0YSgpLCBGQUxTRSkpOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci0KLSAgICBpZiAoYXV0byogc3RvcmFnZVNlc3Np
b24gPSBtX3Byb2Nlc3Muc3RvcmFnZVNlc3Npb24oc2Vzc2lvbklEKSkgewotICAgICAgICBzb3Vw
X2Nvb2tpZV9qYXJfc2V0X2FjY2VwdF9wb2xpY3koamFyLmdldCgpLCBzb3VwX2Nvb2tpZV9qYXJf
Z2V0X2FjY2VwdF9wb2xpY3koc3RvcmFnZVNlc3Npb24tPmNvb2tpZVN0b3JhZ2UoKSkpOwotICAg
ICAgICBzdG9yYWdlU2Vzc2lvbi0+c2V0Q29va2llU3RvcmFnZShqYXIuZ2V0KCkpOwotICAgIH0K
KyAgICBpZiAoYXV0byogbmV0d29ya1Nlc3Npb24gPSBtX3Byb2Nlc3MubmV0d29ya1Nlc3Npb24o
c2Vzc2lvbklEKSkKKyAgICAgICAgc3RhdGljX2Nhc3Q8TmV0d29ya1Nlc3Npb25Tb3VwJj4oKm5l
dHdvcmtTZXNzaW9uKS5zZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShzdG9yYWdlUGF0aCwgc3Rv
cmFnZVR5cGUpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ3VzdG9tUHJvdG9jb2xzL3NvdXAvTGVnYWN5Q3VzdG9t
UHJvdG9jb2xNYW5hZ2VyU291cC5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0N1
c3RvbVByb3RvY29scy9zb3VwL0xlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclNvdXAuY3BwCmlu
ZGV4IDUxMWRkMDRkNjY3Li4yYzRkMmZmOTQ4MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9DdXN0b21Qcm90b2NvbHMvc291cC9MZWdhY3lDdXN0b21Qcm90b2NvbE1h
bmFnZXJTb3VwLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0N1c3RvbVBy
b3RvY29scy9zb3VwL0xlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclNvdXAuY3BwCkBAIC0yMyw4
ICsyMyw4IEBACiAjaW5jbHVkZSAiRGF0YVJlZmVyZW5jZS5oIgogI2luY2x1ZGUgIkxlZ2FjeUN1
c3RvbVByb3RvY29sTWFuYWdlck1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3Mu
aCIKKyNpbmNsdWRlICJOZXR3b3JrU2Vzc2lvblNvdXAuaCIKICNpbmNsdWRlICJXZWJLaXRTb3Vw
UmVxdWVzdElucHV0U3RyZWFtLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9OZXR3b3JrU3RvcmFnZVNl
c3Npb24uaD4KICNpbmNsdWRlIDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+CiAjaW5jbHVkZSA8
V2ViQ29yZS9SZXNvdXJjZUVycm9yLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZVJlcXVl
c3QuaD4KQEAgLTEwMiw4ICsxMDIsOCBAQCB2b2lkIExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdl
cjo6cmVnaXN0ZXJTY2hlbWUoY29uc3QgU3RyaW5nJiBzY2hlbWUpCiAgICAgYXV0byogZ2VuZXJp
Y1JlcXVlc3RDbGFzcyA9IHN0YXRpY19jYXN0PFNvdXBSZXF1ZXN0Q2xhc3MqPihnX3R5cGVfY2xh
c3NfcGVlayhXRUJLSVRfVFlQRV9TT1VQX1JFUVVFU1RfR0VORVJJQykpOwogICAgIEFTU0VSVChn
ZW5lcmljUmVxdWVzdENsYXNzKTsKICAgICBnZW5lcmljUmVxdWVzdENsYXNzLT5zY2hlbWVzID0g
Y29uc3RfY2FzdDxjb25zdCBjaGFyKio+KHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcioqPihtX3JlZ2lz
dGVyZWRTY2hlbWVzLT5wZGF0YSkpOwotICAgIGxhc3RDcmVhdGVkTmV0d29ya1Byb2Nlc3MoKS0+
Zm9yRWFjaE5ldHdvcmtTdG9yYWdlU2Vzc2lvbihbXShjb25zdCBhdXRvJiBzZXNzaW9uKSB7Ci0g
ICAgICAgIHNlc3Npb24uc291cE5ldHdvcmtTZXNzaW9uKCkuc2V0dXBDdXN0b21Qcm90b2NvbHMo
KTsKKyAgICBsYXN0Q3JlYXRlZE5ldHdvcmtQcm9jZXNzKCktPmZvckVhY2hOZXR3b3JrU2Vzc2lv
bihbXShjb25zdCBhdXRvJiBzZXNzaW9uKSB7CisgICAgICAgIHN0YXRpY19jYXN0PGNvbnN0IE5l
dHdvcmtTZXNzaW9uU291cCY+KHNlc3Npb24pLnNvdXBOZXR3b3JrU2Vzc2lvbigpLnNldHVwQ3Vz
dG9tUHJvdG9jb2xzKCk7CiAgICAgfSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwIGIvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHAK
aW5kZXggMmQ1MGUyZjQzZGIuLmFlNGRmOTc4MDc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNz
LmNwcApAQCAtNjg5LDEzICs2ODksMTMgQEAgdm9pZCBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJv
Y2Vzczo6bG9nU3VicmVzb3VyY2VSZWRpcmVjdChQQUw6OlNlc3Npb25JRCBzZXNzaW8KIAogdm9p
ZCBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6cmVzb3VyY2VMb2FkU3RhdGlzdGljc1Vw
ZGF0ZWQoVmVjdG9yPFdlYkNvcmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3M+JiYgc3RhdGlzdGlj
cykKIHsKLSAgICBmb3IgKGF1dG8mIG5ldHdvcmtTZXNzaW9uIDogbmV0d29ya1Byb2Nlc3MoKS5u
ZXR3b3JrU2Vzc2lvbnMoKS52YWx1ZXMoKSkgewotICAgICAgICBpZiAobmV0d29ya1Nlc3Npb24t
PnNlc3Npb25JRCgpLmlzRXBoZW1lcmFsKCkpCisgICAgbmV0d29ya1Byb2Nlc3MoKS5mb3JFYWNo
TmV0d29ya1Nlc3Npb24oW3N0YXRpc3RpY3MgPSBXVEZNb3ZlKHN0YXRpc3RpY3MpIF0oTmV0d29y
a1Nlc3Npb24mIG5ldHdvcmtTZXNzaW9uKSBtdXRhYmxlIHsKKyAgICAgICAgaWYgKG5ldHdvcmtT
ZXNzaW9uLnNlc3Npb25JRCgpLmlzRXBoZW1lcmFsKCkpCiAgICAgICAgICAgICBjb250aW51ZTsK
IAotICAgICAgICBpZiAoYXV0byogcmVzb3VyY2VMb2FkU3RhdGlzdGljcyA9IG5ldHdvcmtTZXNz
aW9uLT5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzKCkpCisgICAgICAgIGlmIChhdXRvKiByZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzID0gbmV0d29ya1Nlc3Npb24ucmVzb3VyY2VMb2FkU3RhdGlzdGljcygp
KQogICAgICAgICAgICAgcmVzb3VyY2VMb2FkU3RhdGlzdGljcy0+cmVzb3VyY2VMb2FkU3RhdGlz
dGljc1VwZGF0ZWQoV1RGTW92ZShzdGF0aXN0aWNzKSk7Ci0gICAgfQorICAgIH0pOwogfQogCiB2
b2lkIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpoYXNTdG9yYWdlQWNjZXNzKFBBTDo6
U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgUmVnaXN0cmFibGVEb21haW4mIHN1YkZyYW1lRG9t
YWluLCBjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgdG9wRnJhbWVEb21haW4sIHVpbnQ2NF90IGZy
YW1lSUQsIFBhZ2VJZGVudGlmaWVyIHBhZ2VJRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29s
KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9OZXR3b3JrUHJvY2Vzcy5jcHAKaW5kZXggMjRiZDcxNjk5YWEuLmU1NDgwYzUzZDYyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcApAQCAt
OTksNiArOTksNyBAQAogI2VuZGlmCiAKICNpZiBVU0UoU09VUCkKKyNpbmNsdWRlICJOZXR3b3Jr
U2Vzc2lvblNvdXAuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0ROU1Jlc29sdmVRdWV1ZVNvdXAuaD4K
ICNpbmNsdWRlIDxXZWJDb3JlL1NvdXBOZXR3b3JrU2Vzc2lvbi5oPgogI2VuZGlmCkBAIC0xNTAs
OCArMTUxLDggQEAgTmV0d29ya1Byb2Nlc3M6Ok5ldHdvcmtQcm9jZXNzKEF1eGlsaWFyeVByb2Nl
c3NJbml0aWFsaXphdGlvblBhcmFtZXRlcnMmJiBwYXJhbWUKICNlbmRpZgogCiAjaWYgVVNFKFNP
VVApCi0gICAgRE5TUmVzb2x2ZVF1ZXVlU291cDo6c2V0R2xvYmFsRGVmYXVsdE5ldHdvcmtTdG9y
YWdlU2Vzc2lvbkFjY2Vzc29yKFt0aGlzXSgpIC0+IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgewot
ICAgICAgICByZXR1cm4gZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCk7CisgICAgRE5TUmVzb2x2ZVF1
ZXVlU291cDo6c2V0R2xvYmFsRGVmYXVsdFNvdXBTZXNzaW9uQWNjZXNzb3IoW3RoaXNdKCkgLT4g
U291cFNlc3Npb24qIHsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PE5ldHdvcmtTZXNzaW9u
U291cCY+KCpuZXR3b3JrU2Vzc2lvbihQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgp
KSkuc291cFNlc3Npb24oKTsKICAgICB9KTsKICNlbmRpZgogCkBAIC0yNzMsOCArMjc0LDkgQEAg
dm9pZCBOZXR3b3JrUHJvY2Vzczo6bG93TWVtb3J5SGFuZGxlcihDcml0aWNhbCBjcml0aWNhbCkK
IAogICAgIFdURjo6cmVsZWFzZUZhc3RNYWxsb2NGcmVlTWVtb3J5KCk7CiAKLSAgICBmb3IgKGF1
dG8mIG5ldHdvcmtTZXNzaW9uIDogbV9uZXR3b3JrU2Vzc2lvbnMudmFsdWVzKCkpCi0gICAgICAg
IG5ldHdvcmtTZXNzaW9uLmdldCgpLmNsZWFyUHJlZmV0Y2hDYWNoZSgpOworICAgIGZvckVhY2hO
ZXR3b3JrU2Vzc2lvbihbXShOZXR3b3JrU2Vzc2lvbiYgbmV0d29ya1Nlc3Npb24pIHsKKyAgICAg
ICAgbmV0d29ya1Nlc3Npb24uY2xlYXJQcmVmZXRjaENhY2hlKCk7CisgICAgfSk7CiB9CiAKIHZv
aWQgTmV0d29ya1Byb2Nlc3M6OmluaXRpYWxpemVOZXR3b3JrUHJvY2VzcyhOZXR3b3JrUHJvY2Vz
c0NyZWF0aW9uUGFyYW1ldGVycyYmIHBhcmFtZXRlcnMpCkBAIC00ODUsNiArNDg3LDEyIEBAIHZv
aWQgTmV0d29ya1Byb2Nlc3M6OmluaXRpYWxpemVTdG9yYWdlUXVvdGEoY29uc3QgV2Vic2l0ZURh
dGFTdG9yZVBhcmFtZXRlcnMmIHBhCiAgICAgbWFuYWdlcnMuc2V0RGVmYXVsdFF1b3RhcyhwYXJh
bWV0ZXJzLnBlck9yaWdpblN0b3JhZ2VRdW90YSwgcGFyYW1ldGVycy5wZXJUaGlyZFBhcnR5T3Jp
Z2luU3RvcmFnZVF1b3RhKTsKIH0KIAordm9pZCBOZXR3b3JrUHJvY2Vzczo6Zm9yRWFjaE5ldHdv
cmtTZXNzaW9uKGNvbnN0IEZ1bmN0aW9uPHZvaWQoTmV0d29ya1Nlc3Npb24mKT4mIGZ1bmN0b3Ip
Cit7CisgICAgZm9yIChhdXRvJiBzZXNzaW9uIDogbV9uZXR3b3JrU2Vzc2lvbnMudmFsdWVzKCkp
CisgICAgICAgIGZ1bmN0b3IoKnNlc3Npb24ucHRyKCkpOworfQorCiB2b2lkIE5ldHdvcmtQcm9j
ZXNzOjpzd2l0Y2hUb05ld1Rlc3RpbmdTZXNzaW9uKCkKIHsKICNpZiBQTEFURk9STShDT0NPQSkK
QEAgLTUwMSw5ICs1MDksNyBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpzd2l0Y2hUb05ld1Rlc3Rp
bmdTZXNzaW9uKCkKICAgICB9CiAKICAgICBtX2RlZmF1bHROZXR3b3JrU3RvcmFnZVNlc3Npb24g
PSBzdGQ6Om1ha2VfdW5pcXVlPFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4oUEFMOjpT
ZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSwgV1RGTW92ZShzZXNzaW9uKSwgV1RGTW92ZShj
b29raWVTdG9yYWdlKSk7Ci0jZWxpZiBVU0UoU09VUCkKLSAgICBtX2RlZmF1bHROZXR3b3JrU3Rv
cmFnZVNlc3Npb24gPSBzdGQ6Om1ha2VfdW5pcXVlPFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vz
c2lvbj4oUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSwgc3RkOjptYWtlX3VuaXF1
ZTxXZWJDb3JlOjpTb3VwTmV0d29ya1Nlc3Npb24+KCkpOwotI2VsaWYgVVNFKENVUkwpCisjZWxp
ZiBVU0UoQ1VSTCkgfHwgVVNFKFNPVVApCiAgICAgbV9kZWZhdWx0TmV0d29ya1N0b3JhZ2VTZXNz
aW9uID0gc3RkOjptYWtlX3VuaXF1ZTxXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24+KFBB
TDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpOwogI2VuZGlmCiB9CkBAIC01MzUsOSAr
NTQxLDcgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6ZW5zdXJlU2Vzc2lvbihjb25zdCBQQUw6OlNl
c3Npb25JRCYgc2Vzc2lvbklELCBjb25zdCBTdHJpbmcKICAgICB9CiAKICAgICBhZGRSZXN1bHQu
aXRlcmF0b3ItPnZhbHVlID0gc3RkOjptYWtlX3VuaXF1ZTxOZXR3b3JrU3RvcmFnZVNlc3Npb24+
KHNlc3Npb25JRCwgV1RGTW92ZShzdG9yYWdlU2Vzc2lvbiksIFdURk1vdmUoY29va2llU3RvcmFn
ZSkpOwotI2VsaWYgVVNFKFNPVVApCi0gICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IHN0
ZDo6bWFrZV91bmlxdWU8TmV0d29ya1N0b3JhZ2VTZXNzaW9uPihzZXNzaW9uSUQsIHN0ZDo6bWFr
ZV91bmlxdWU8U291cE5ldHdvcmtTZXNzaW9uPihzZXNzaW9uSUQpKTsKLSNlbGlmIFVTRShDVVJM
KQorI2VsaWYgVVNFKENVUkwpIHx8IFVTRShTT1VQKQogICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+
dmFsdWUgPSBzdGQ6Om1ha2VfdW5pcXVlPE5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4oc2Vzc2lvbklE
KTsKICNlbmRpZgogfQpAQCAtNTkzLDcgKzU5Nyw5IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmRl
c3Ryb3lTZXNzaW9uKGNvbnN0IFBBTDo6U2Vzc2lvbklEJiBzZXNzaW9uSUQpCiAgICAgaWYgKCFz
ZXNzaW9uSUQuaXNWYWxpZCgpKQogICAgICAgICByZXR1cm47CiAKKyNpZiAhVVNFKFNPVVApCiAg
ICAgQVNTRVJUKHNlc3Npb25JRCAhPSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgp
KTsKKyNlbmRpZgogCiAgICAgaWYgKGF1dG8gc2Vzc2lvbiA9IG1fbmV0d29ya1Nlc3Npb25zLnRh
a2Uoc2Vzc2lvbklEKSkKICAgICAgICAgc2Vzc2lvbi0+Z2V0KCkuaW52YWxpZGF0ZUFuZENhbmNl
bCgpOwpAQCAtMTE0NSw4ICsxMTUxLDkgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6c2V0U2hvdWxk
Q2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwoUEFMOjpTZXMKIAogdm9p
ZCBOZXR3b3JrUHJvY2Vzczo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoYm9vbCBl
bmFibGVkKQogewotICAgIGZvciAoYXV0byYgbmV0d29ya1Nlc3Npb24gOiBtX25ldHdvcmtTZXNz
aW9ucy52YWx1ZXMoKSkKLSAgICAgICAgbmV0d29ya1Nlc3Npb24uZ2V0KCkuc2V0UmVzb3VyY2VM
b2FkU3RhdGlzdGljc0VuYWJsZWQoZW5hYmxlZCk7CisgICAgZm9yRWFjaE5ldHdvcmtTZXNzaW9u
KFtlbmFibGVkXShOZXR3b3JrU2Vzc2lvbiYgbmV0d29ya1Nlc3Npb24pIHsKKyAgICAgICAgbmV0
d29ya1Nlc3Npb24uc2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoZW5hYmxlZCk7Cisg
ICAgfSk7CiB9CiAKIHZvaWQgTmV0d29ya1Byb2Nlc3M6OnNldFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEZWJ1Z01vZGUoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBib29sIGRlYnVnTW9kZSwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTM1OCwxMSAr
MTM2NSwxMSBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpmZXRjaFdlYnNpdGVEYXRhKFBBTDo6U2Vz
c2lvbklEIHNlc3Npb25JRCwgT3B0aW9uU2V0PFdlYnNpdAogICAgIH0KICNlbmRpZgogICAgIGlm
ICh3ZWJzaXRlRGF0YVR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6RGlza0NhY2hlKSkg
ewotICAgICAgICBmb3IgKGF1dG8mIHNlc3Npb24gOiBuZXR3b3JrU2Vzc2lvbnMoKS52YWx1ZXMo
KSkgewotICAgICAgICAgICAgZmV0Y2hEaXNrQ2FjaGVFbnRyaWVzKHNlc3Npb24tPmNhY2hlKCks
IHNlc3Npb25JRCwgZmV0Y2hPcHRpb25zLCBbY2FsbGJhY2tBZ2dyZWdhdG9yID0gV1RGTW92ZShj
YWxsYmFja0FnZ3JlZ2F0b3IpXShhdXRvIGVudHJpZXMpIG11dGFibGUgeworICAgICAgICBmb3JF
YWNoTmV0d29ya1Nlc3Npb24oW3Nlc3Npb25JRCwgZmV0Y2hPcHRpb25zLCBjYWxsYmFja0FnZ3Jl
Z2F0b3IgPSBXVEZNb3ZlKGNhbGxiYWNrQWdncmVnYXRvcildKE5ldHdvcmtTZXNzaW9uJiBzZXNz
aW9uKSBtdXRhYmxlIHsKKyAgICAgICAgICAgIGZldGNoRGlza0NhY2hlRW50cmllcyhzZXNzaW9u
LmNhY2hlKCksIHNlc3Npb25JRCwgZmV0Y2hPcHRpb25zLCBbY2FsbGJhY2tBZ2dyZWdhdG9yID0g
V1RGTW92ZShjYWxsYmFja0FnZ3JlZ2F0b3IpXShhdXRvIGVudHJpZXMpIG11dGFibGUgewogICAg
ICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+bV93ZWJzaXRlRGF0YS5lbnRyaWVzLmFw
cGVuZFZlY3RvcihlbnRyaWVzKTsKICAgICAgICAgICAgIH0pOwotICAgICAgICB9CisgICAgICAg
IH0pOwogICAgIH0KIH0KIApAQCAtMTUxOCw4ICsxNTI1LDkgQEAgdm9pZCBOZXR3b3JrUHJvY2Vz
czo6ZGVsZXRlV2Vic2l0ZURhdGFGb3JPcmlnaW5zKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwg
T3B0aW8KICNlbmRpZgogCiAgICAgaWYgKHdlYnNpdGVEYXRhVHlwZXMuY29udGFpbnMoV2Vic2l0
ZURhdGFUeXBlOjpEaXNrQ2FjaGUpICYmICFzZXNzaW9uSUQuaXNFcGhlbWVyYWwoKSkgewotICAg
ICAgICBmb3IgKGF1dG8mIHNlc3Npb24gOiBuZXR3b3JrU2Vzc2lvbnMoKS52YWx1ZXMoKSkKLSAg
ICAgICAgICAgIGNsZWFyRGlza0NhY2hlRW50cmllcyhzZXNzaW9uLT5jYWNoZSgpLCBvcmlnaW5E
YXRhcywgW2NsZWFyVGFza3NIYW5kbGVyID0gV1RGTW92ZShjbGVhclRhc2tzSGFuZGxlcildIHsg
fSk7CisgICAgICAgIGZvckVhY2hOZXR3b3JrU2Vzc2lvbihbb3JpZ2luRGF0YXMsIGNsZWFyVGFz
a3NIYW5kbGVyID0gV1RGTW92ZShjbGVhclRhc2tzSGFuZGxlcildKE5ldHdvcmtTZXNzaW9uJiBz
ZXNzaW9uKSBtdXRhYmxlIHsKKyAgICAgICAgICAgIGNsZWFyRGlza0NhY2hlRW50cmllcyhzZXNz
aW9uLmNhY2hlKCksIG9yaWdpbkRhdGFzLCBbY2xlYXJUYXNrc0hhbmRsZXIgPSBXVEZNb3ZlKGNs
ZWFyVGFza3NIYW5kbGVyKV0geyB9KTsKKyAgICAgICAgfSk7CiAgICAgfQogCiAgICAgaWYgKHdl
YnNpdGVEYXRhVHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpDcmVkZW50aWFscykpIHsK
QEAgLTE3NTMsOCArMTc2MSw4IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmRlbGV0ZVdlYnNpdGVE
YXRhRm9yUmVnaXN0cmFibGVEb21haW5zKFBBTDo6U2Vzc2lvbklEIHNlc3NpCiAjZW5kaWYKIAog
ICAgIGlmICh3ZWJzaXRlRGF0YVR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6RGlza0Nh
Y2hlKSkgewotICAgICAgICBmb3IgKGF1dG8mIHNlc3Npb24gOiBuZXR3b3JrU2Vzc2lvbnMoKS52
YWx1ZXMoKSkgewotICAgICAgICAgICAgZmV0Y2hEaXNrQ2FjaGVFbnRyaWVzKHNlc3Npb24tPmNh
Y2hlKCksIHNlc3Npb25JRCwgZmV0Y2hPcHRpb25zLCBbZG9tYWluc1RvRGVsZXRlQWxsQnV0Q29v
a2llc0ZvciwgY2FsbGJhY2tBZ2dyZWdhdG9yID0gY2FsbGJhY2tBZ2dyZWdhdG9yLmNvcHlSZWYo
KSwgc2Vzc2lvbiA9IHNlc3Npb24uY29weVJlZigpXShhdXRvIGVudHJpZXMpIG11dGFibGUgewor
ICAgICAgICBmb3JFYWNoTmV0d29ya1Nlc3Npb24oW3Nlc3Npb25JRCwgZmV0Y2hPcHRpb25zLCAm
ZG9tYWluc1RvRGVsZXRlQWxsQnV0Q29va2llc0ZvciwgJmNhbGxiYWNrQWdncmVnYXRvcl0oTmV0
d29ya1Nlc3Npb24mIHNlc3Npb24pIHsKKyAgICAgICAgICAgIGZldGNoRGlza0NhY2hlRW50cmll
cyhzZXNzaW9uLmNhY2hlKCksIHNlc3Npb25JRCwgZmV0Y2hPcHRpb25zLCBbZG9tYWluc1RvRGVs
ZXRlQWxsQnV0Q29va2llc0ZvciwgY2FsbGJhY2tBZ2dyZWdhdG9yID0gY2FsbGJhY2tBZ2dyZWdh
dG9yLmNvcHlSZWYoKSwgc2Vzc2lvbiA9IHNlc3Npb24uY29weVJlZigpXShhdXRvIGVudHJpZXMp
IG11dGFibGUgewogCiAgICAgICAgICAgICAgICAgVmVjdG9yPFNlY3VyaXR5T3JpZ2luRGF0YT4g
ZW50cmllc1RvRGVsZXRlOwogICAgICAgICAgICAgICAgIGZvciAoYXV0byYgZW50cnkgOiBlbnRy
aWVzKSB7CkBAIC0xNzY1LDcgKzE3NzMsNyBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpkZWxldGVX
ZWJzaXRlRGF0YUZvclJlZ2lzdHJhYmxlRG9tYWlucyhQQUw6OlNlc3Npb25JRCBzZXNzaQogICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBjbGVhckRpc2tDYWNoZUVudHJpZXMoc2Vz
c2lvbi0+Y2FjaGUoKSwgZW50cmllc1RvRGVsZXRlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yID0gY2Fs
bGJhY2tBZ2dyZWdhdG9yLmNvcHlSZWYoKV0geyB9KTsKICAgICAgICAgICAgIH0pOwotICAgICAg
ICB9CisgICAgICAgIH0pOwogICAgIH0KIAogICAgIGF1dG8gZGF0YVR5cGVzRm9yVUlQcm9jZXNz
ID0gV2Vic2l0ZURhdGE6OmZpbHRlcih3ZWJzaXRlRGF0YVR5cGVzLCBXZWJzaXRlRGF0YVByb2Nl
c3NUeXBlOjpVSSk7CkBAIC0xODg3LDExICsxODk1LDExIEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6
OnJlZ2lzdHJhYmxlRG9tYWluc1dpdGhXZWJzaXRlRGF0YShQQUw6OlNlc3Npb25JRCBzZXNzaW9u
SUQsCiAjZW5kaWYKICAgICAKICAgICBpZiAod2Vic2l0ZURhdGFUeXBlcy5jb250YWlucyhXZWJz
aXRlRGF0YVR5cGU6OkRpc2tDYWNoZSkpIHsKLSAgICAgICAgZm9yIChhdXRvJiBzZXNzaW9uIDog
bmV0d29ya1Nlc3Npb25zKCkudmFsdWVzKCkpIHsKLSAgICAgICAgICAgIGZldGNoRGlza0NhY2hl
RW50cmllcyhzZXNzaW9uLT5jYWNoZSgpLCBzZXNzaW9uSUQsIGZldGNoT3B0aW9ucywgW2NhbGxi
YWNrQWdncmVnYXRvciA9IGNhbGxiYWNrQWdncmVnYXRvci5jb3B5UmVmKCldKGF1dG8gZW50cmll
cykgbXV0YWJsZSB7CisgICAgICAgIGZvckVhY2hOZXR3b3JrU2Vzc2lvbihbc2Vzc2lvbklELCBm
ZXRjaE9wdGlvbnMsICZjYWxsYmFja0FnZ3JlZ2F0b3JdKE5ldHdvcmtTZXNzaW9uJiBzZXNzaW9u
KSB7CisgICAgICAgICAgICBmZXRjaERpc2tDYWNoZUVudHJpZXMoc2Vzc2lvbi5jYWNoZSgpLCBz
ZXNzaW9uSUQsIGZldGNoT3B0aW9ucywgW2NhbGxiYWNrQWdncmVnYXRvciA9IGNhbGxiYWNrQWdn
cmVnYXRvci5jb3B5UmVmKCldKGF1dG8gZW50cmllcykgbXV0YWJsZSB7CiAgICAgICAgICAgICAg
ICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5tX3dlYnNpdGVEYXRhLmVudHJpZXMuYXBwZW5kVmVjdG9y
KGVudHJpZXMpOwogICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0KKyAgICAgICAgfSk7CiAgICAg
fQogfQogI2VuZGlmIC8vIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCkBAIC0xOTgz
LDExICsxOTkxLDExIEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OnNldENhY2hlTW9kZWwoQ2FjaGVN
b2RlbCBjYWNoZU1vZGVsKQogICAgICAgICBkaXNrRnJlZVNpemUgLz0gS0IgKiAxMDAwOwogICAg
ICAgICBjYWxjdWxhdGVVUkxDYWNoZVNpemVzKGNhY2hlTW9kZWwsIGRpc2tGcmVlU2l6ZSwgdXJs
Q2FjaGVNZW1vcnlDYXBhY2l0eSwgdXJsQ2FjaGVEaXNrQ2FwYWNpdHkpOwogICAgIH0KLSAgICAK
LSAgICBmb3IgKGF1dG8mIHNlc3Npb24gOiBuZXR3b3JrU2Vzc2lvbnMoKS52YWx1ZXMoKSkgewot
ICAgICAgICBpZiAoYXV0byogY2FjaGUgPSBzZXNzaW9uLT5jYWNoZSgpKQorCisgICAgZm9yRWFj
aE5ldHdvcmtTZXNzaW9uKFt1cmxDYWNoZURpc2tDYXBhY2l0eV0oTmV0d29ya1Nlc3Npb24mIHNl
c3Npb24pIHsKKyAgICAgICAgaWYgKGF1dG8qIGNhY2hlID0gc2Vzc2lvbi5jYWNoZSgpKQogICAg
ICAgICAgICAgY2FjaGUtPnNldENhcGFjaXR5KHVybENhY2hlRGlza0NhcGFjaXR5KTsKLSAgICB9
CisgICAgfSk7CiB9CiAKIHZvaWQgTmV0d29ya1Byb2Nlc3M6OnNldENhbkhhbmRsZUhUVFBTU2Vy
dmVyVHJ1c3RFdmFsdWF0aW9uKGJvb2wgdmFsdWUpCkBAIC0yMDgxLDggKzIwODksOSBAQCB2b2lk
IE5ldHdvcmtQcm9jZXNzOjphY3R1YWxQcmVwYXJlVG9TdXNwZW5kKFNob3VsZEFja25vd2xlZGdl
V2hlblJlYWR5VG9TdXNwZW5kCiAgICAgfQogI2VuZGlmCiAKLSAgICBmb3IgKGF1dG8mIHNlc3Np
b24gOiBtX25ldHdvcmtTZXNzaW9ucykKLSAgICAgICAgc2Vzc2lvbi52YWx1ZS0+c3RvcmFnZU1h
bmFnZXIoKS5zdXNwZW5kKFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgZm9yRWFjaE5l
dHdvcmtTZXNzaW9uKFsmY2FsbGJhY2tBZ2dyZWdhdG9yXShOZXR3b3JrU2Vzc2lvbiYgc2Vzc2lv
bikgeworICAgICAgICBzZXNzaW9uLnN0b3JhZ2VNYW5hZ2VyKCkuc3VzcGVuZChbY2FsbGJhY2tB
Z2dyZWdhdG9yXSB7IH0pOworICAgIH0pOwogfQogCiB2b2lkIE5ldHdvcmtQcm9jZXNzOjpwcm9j
ZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5KCkKQEAgLTIxNTIsOCArMjE2MSw5IEBAIHZvaWQgTmV0
d29ya1Byb2Nlc3M6OnJlc3VtZSgpCiAgICAgICAgIHNlcnZlci0+cmVzdW1lKCk7CiAjZW5kaWYK
IAotICAgIGZvciAoYXV0byYgc2Vzc2lvbiA6IG1fbmV0d29ya1Nlc3Npb25zKQotICAgICAgICBz
ZXNzaW9uLnZhbHVlLT5zdG9yYWdlTWFuYWdlcigpLnJlc3VtZSgpOworICAgIGZvckVhY2hOZXR3
b3JrU2Vzc2lvbihbXShOZXR3b3JrU2Vzc2lvbiYgc2Vzc2lvbikgeworICAgICAgICBzZXNzaW9u
LnN0b3JhZ2VNYW5hZ2VyKCkucmVzdW1lKCk7CisgICAgfSk7CiB9CiAKIHZvaWQgTmV0d29ya1By
b2Nlc3M6OnByZWZldGNoRE5TKGNvbnN0IFN0cmluZyYgaG9zdG5hbWUpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmggYi9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmgKaW5kZXggNjlmM2Q0ZjY3OTIuLjA2
MjZiNTZmZWUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdv
cmtQcm9jZXNzLmgKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJv
Y2Vzcy5oCkBAIC0xNjYsOCArMTY2LDcgQEAgcHVibGljOgogICAgIE5ldHdvcmtTZXNzaW9uKiBu
ZXR3b3JrU2Vzc2lvbkJ5Q29ubmVjdGlvbihJUEM6OkNvbm5lY3Rpb24mKSBjb25zdDsKICAgICB2
b2lkIGRlc3Ryb3lTZXNzaW9uKGNvbnN0IFBBTDo6U2Vzc2lvbklEJik7CiAKLSAgICAvLyBOZWVk
ZWQgZm9yIHRlc3QgaW5mcmFzdHJ1Y3R1cmUKLSAgICBIYXNoTWFwPFBBTDo6U2Vzc2lvbklELCBS
ZWY8TmV0d29ya1Nlc3Npb24+PiYgbmV0d29ya1Nlc3Npb25zKCkgeyByZXR1cm4gbV9uZXR3b3Jr
U2Vzc2lvbnM7IH0KKyAgICB2b2lkIGZvckVhY2hOZXR3b3JrU2Vzc2lvbihjb25zdCBGdW5jdGlv
bjx2b2lkKE5ldHdvcmtTZXNzaW9uJik+Jik7CiAKICAgICB2b2lkIGZvckVhY2hOZXR3b3JrU3Rv
cmFnZVNlc3Npb24oY29uc3QgRnVuY3Rpb248dm9pZChXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNl
c3Npb24mKT4mKTsKICAgICBXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24qIHN0b3JhZ2VT
ZXNzaW9uKGNvbnN0IFBBTDo6U2Vzc2lvbklEJikgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtTdG9yYWdlU2Vzc2lvblByb3ZpZGVyLmggYi9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtTdG9yYWdlU2Vzc2lvblByb3ZpZGVy
LmgKaW5kZXggOGFhOTIwNDRiMjAuLjk1YmIxZDRkMzhiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtTdG9yYWdlU2Vzc2lvblByb3ZpZGVyLmgKKysrIGIv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrU3RvcmFnZVNlc3Npb25Qcm92aWRl
ci5oCkBAIC0zMSw2ICszMSwxMCBAQAogI2luY2x1ZGUgPHBhbC9TZXNzaW9uSUQuaD4KICNpbmNs
dWRlIDx3dGYvV2Vha1B0ci5oPgogCisjaWYgVVNFKFNPVVApCisjaW5jbHVkZSAiTmV0d29ya1Nl
c3Npb25Tb3VwLmgiCisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIE5ldHdv
cmtTdG9yYWdlU2Vzc2lvblByb3ZpZGVyIGZpbmFsIDogcHVibGljIFdlYkNvcmU6OlN0b3JhZ2VT
ZXNzaW9uUHJvdmlkZXIgewpAQCAtNDksNiArNTMsMTkgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAgICAgfQogCisjaWYgVVNFKFNPVVApCisgICAgU291cFNlc3Npb24qIHNv
dXBTZXNzaW9uKCkgY29uc3QgZmluYWwKKyAgICB7CisgICAgICAgIGlmICghbV9uZXR3b3JrUHJv
Y2VzcykKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgICAgIGlmIChhdXRvKiBz
ZXNzaW9uID0gbV9uZXR3b3JrUHJvY2Vzcy0+bmV0d29ya1Nlc3Npb24obV9zZXNzaW9uSUQpKQor
ICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PE5ldHdvcmtTZXNzaW9uU291cCY+KCpzZXNz
aW9uKS5zb3VwU2Vzc2lvbigpOworCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKyNl
bmRpZgorCiAgICAgV2Vha1B0cjxOZXR3b3JrUHJvY2Vzcz4gbV9uZXR3b3JrUHJvY2VzczsKICAg
ICBQQUw6OlNlc3Npb25JRCBtX3Nlc3Npb25JRDsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtQcm9jZXNzQ29jb2EubW0gYi9Tb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtQcm9jZXNzQ29jb2EubW0KaW5kZXgg
MDdiOTYzM2JkNDguLjIyZDcxMGJjYjAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL2NvY29hL05ldHdvcmtQcm9jZXNzQ29jb2EubW0KKysrIGIvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrUHJvY2Vzc0NvY29hLm1tCkBAIC0xOTksMTAg
KzE5OSwxMCBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpjbGVhckRpc2tDYWNoZShXYWxsVGltZSBt
b2RpZmllZFNpbmNlLCBDb21wbGV0aW9uSGFuZGxlcjx2bwogICAgIGF1dG8gZ3JvdXAgPSBtX2Ns
ZWFyQ2FjaGVEaXNwYXRjaEdyb3VwOwogICAgIGRpc3BhdGNoX2dyb3VwX2FzeW5jKGdyb3VwLCBk
aXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBtYWtlQmxvY2tQdHIoW3RoaXMsIHByb3RlY3RlZFRo
aXMgPSBtYWtlUmVmKCp0aGlzKSwgbW9kaWZpZWRTaW5jZSwgY29tcGxldGlvbkhhbmRsZXIgPSBX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKCkgbXV0YWJsZSB7CiAgICAgICAgIGF1dG8gYWdn
cmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKLSAgICAgICAgZm9yIChhdXRvJiBzZXNzaW9uIDogbmV0d29ya1Nlc3Npb25zKCku
dmFsdWVzKCkpIHsKLSAgICAgICAgICAgIGlmIChhdXRvKiBjYWNoZSA9IHNlc3Npb24tPmNhY2hl
KCkpCisgICAgICAgIGZvckVhY2hOZXR3b3JrU2Vzc2lvbihbJmFnZ3JlZ2F0b3JdKE5ldHdvcmtT
ZXNzaW9uJiBzZXNzaW9uKSB7CisgICAgICAgICAgICBpZiAoYXV0byogY2FjaGUgPSBzZXNzaW9u
LmNhY2hlKCkpCiAgICAgICAgICAgICAgICAgY2FjaGUtPmNsZWFyKG1vZGlmaWVkU2luY2UsIFth
Z2dyZWdhdG9yID0gYWdncmVnYXRvci5jb3B5UmVmKCldICgpIHsgfSk7Ci0gICAgICAgIH0KKyAg
ICAgICAgfSk7CiAgICAgfSkuZ2V0KCkpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL2lvcy9OZXR3b3JrUHJvY2Vzc0lPUy5tbSBiL1NvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvaW9zL05ldHdvcmtQcm9jZXNzSU9TLm1tCmluZGV4IDI5ZGQwODc3YmQ0
Li5mZWFkZGJjZDFkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9p
b3MvTmV0d29ya1Byb2Nlc3NJT1MubW0KKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9pb3MvTmV0d29ya1Byb2Nlc3NJT1MubW0KQEAgLTc4LDEwICs3OCwxMCBAQCB2b2lkIE5ldHdv
cmtQcm9jZXNzOjpjbGVhckNhY2hlRm9yQWxsT3JpZ2lucyh1aW50MzJfdCBjYWNoZXNUb0NsZWFy
KQogICAgIFJlc291cmNlQ2FjaGVzVG9DbGVhciByZXNvdXJjZUNhY2hlc1RvQ2xlYXIgPSBzdGF0
aWNfY2FzdDxSZXNvdXJjZUNhY2hlc1RvQ2xlYXI+KGNhY2hlc1RvQ2xlYXIpOwogICAgIGlmIChy
ZXNvdXJjZUNhY2hlc1RvQ2xlYXIgPT0gSW5NZW1vcnlSZXNvdXJjZUNhY2hlc09ubHkpCiAgICAg
ICAgIHJldHVybjsKLSAgICBmb3IgKGF1dG8mIHNlc3Npb24gOiBuZXR3b3JrU2Vzc2lvbnMoKS52
YWx1ZXMoKSkgewotICAgICAgICBpZiAoYXV0byogY2FjaGUgPSBzZXNzaW9uLT5jYWNoZSgpKQor
ICAgIGZvckVhY2hOZXR3b3JrU2Vzc2lvbihbXShOZXR3b3JrU2Vzc2lvbiYgc2Vzc2lvbikgewor
ICAgICAgICBpZiAoYXV0byogY2FjaGUgPSBzZXNzaW9uLmNhY2hlKCkpCiAgICAgICAgICAgICBj
YWNoZS0+Y2xlYXIoKTsKLSAgICB9CisgICAgfSk7CiB9CiAKIHZvaWQgTmV0d29ya1Byb2Nlc3M6
OnBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKGNvbnN0IE5ldHdvcmtQcm9jZXNzQ3Jl
YXRpb25QYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtQcm9jZXNzTWFpblNvdXAuY3BwIGIvU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtQcm9jZXNzTWFpblNvdXAuY3BwCmluZGV4
IGY3ZDE0NTEwNGNlLi5hZDBiZGFkNWRjMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtQcm9jZXNzTWFpblNvdXAuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrUHJvY2Vzc01haW5Tb3VwLmNwcApAQCAt
NDEsNyArNDEsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICAvLyBOZWVkZWQgdG8gZGVzdHJv
eSB0aGUgU291cFNlc3Npb24gYW5kIFNvdXBDb29raWVKYXIsIGUuZy4gdG8gYXZvaWQKICAgICAg
ICAgLy8gbGVha2luZyBTUUxpdGUgdGVtcG9yYXJ5IGpvdXJuYWxpbmcgZmlsZXMuCi0gICAgICAg
IGdsb2JhbE5ldHdvcmtQcm9jZXNzLT5kZWZhdWx0U3RvcmFnZVNlc3Npb24oKS5jbGVhclNvdXBO
ZXR3b3JrU2Vzc2lvbigpOworICAgICAgICBnbG9iYWxOZXR3b3JrUHJvY2Vzcy0+ZGVzdHJveVNl
c3Npb24oUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSk7CiAgICAgfQogfTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtQcm9j
ZXNzU291cC5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1By
b2Nlc3NTb3VwLmNwcAppbmRleCA3Yzc4YjBiMzBjMi4uODNjMmYyOGVhNWMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrUHJvY2Vzc1NvdXAuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrUHJvY2Vzc1Nv
dXAuY3BwCkBAIC0yOSw3ICsyOSw3IEBACiAKICNpbmNsdWRlICJOZXR3b3JrQ2FjaGUuaCIKICNp
bmNsdWRlICJOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oIgotI2luY2x1ZGUgIk5l
dHdvcmtTZXNzaW9uLmgiCisjaW5jbHVkZSAiTmV0d29ya1Nlc3Npb25Tb3VwLmgiCiAjaW5jbHVk
ZSAiUmVzb3VyY2VDYWNoZXNUb0NsZWFyLmgiCiAjaW5jbHVkZSAiV2ViQ29va2llTWFuYWdlci5o
IgogI2luY2x1ZGUgIldlYktpdENhY2hlZFJlc29sdmVyLmgiCkBAIC05OSw4ICs5OSw4IEBAIHZv
aWQgTmV0d29ya1Byb2Nlc3M6OnVzZXJQcmVmZXJyZWRMYW5ndWFnZXNDaGFuZ2VkKGNvbnN0IFZl
Y3RvcjxTdHJpbmc+JiBsYW5ndWFnCiB7CiAgICAgYXV0byBhY2NlcHRMYW5ndWFnZXMgPSBidWls
ZEFjY2VwdExhbmd1YWdlcyhsYW5ndWFnZXMpOwogICAgIFNvdXBOZXR3b3JrU2Vzc2lvbjo6c2V0
SW5pdGlhbEFjY2VwdExhbmd1YWdlcyhhY2NlcHRMYW5ndWFnZXMpOwotICAgIGZvckVhY2hOZXR3
b3JrU3RvcmFnZVNlc3Npb24oWyZhY2NlcHRMYW5ndWFnZXNdKGNvbnN0IGF1dG8mIHNlc3Npb24p
IHsKLSAgICAgICAgc2Vzc2lvbi5zb3VwTmV0d29ya1Nlc3Npb24oKS5zZXRBY2NlcHRMYW5ndWFn
ZXMoYWNjZXB0TGFuZ3VhZ2VzKTsKKyAgICBmb3JFYWNoTmV0d29ya1Nlc3Npb24oWyZhY2NlcHRM
YW5ndWFnZXNdKGNvbnN0IGF1dG8mIHNlc3Npb24pIHsKKyAgICAgICAgc3RhdGljX2Nhc3Q8Y29u
c3QgTmV0d29ya1Nlc3Npb25Tb3VwJj4oc2Vzc2lvbikuc291cE5ldHdvcmtTZXNzaW9uKCkuc2V0
QWNjZXB0TGFuZ3VhZ2VzKGFjY2VwdExhbmd1YWdlcyk7CiAgICAgfSk7CiB9CiAKQEAgLTEzMyw3
ICsxMzMsNyBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3Jr
UHJvY2Vzcyhjb25zdCBOZXR3b3JrUHJvY2Vzc0NyZWF0aQogCiBzdGQ6OnVuaXF1ZV9wdHI8V2Vi
Q29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uPiBOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1DcmVh
dGVEZWZhdWx0U3RvcmFnZVNlc3Npb24oKSBjb25zdAogewotICAgIHJldHVybiBzdGQ6Om1ha2Vf
dW5pcXVlPFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4oUEFMOjpTZXNzaW9uSUQ6OmRl
ZmF1bHRTZXNzaW9uSUQoKSwgc3RkOjptYWtlX3VuaXF1ZTxTb3VwTmV0d29ya1Nlc3Npb24+KFBB
TDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpKTsKKyAgICByZXR1cm4gc3RkOjptYWtl
X3VuaXF1ZTxXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24+KFBBTDo6U2Vzc2lvbklEOjpk
ZWZhdWx0U2Vzc2lvbklEKCkpOwogfQogCiB2b2lkIE5ldHdvcmtQcm9jZXNzOjpzZXRJZ25vcmVU
TFNFcnJvcnMoYm9vbCBpZ25vcmVUTFNFcnJvcnMpCkBAIC0xNTcsMTAgKzE1NywxMCBAQCB2b2lk
IE5ldHdvcmtQcm9jZXNzOjpjbGVhckNhY2hlRm9yQWxsT3JpZ2lucyh1aW50MzJfdCBjYWNoZXNU
b0NsZWFyKQogdm9pZCBOZXR3b3JrUHJvY2Vzczo6Y2xlYXJEaXNrQ2FjaGUoV2FsbFRpbWUgbW9k
aWZpZWRTaW5jZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVy
KQogewogICAgIGF1dG8gYWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICBmb3IgKGF1dG8mIHNlc3Npb24gOiBuZXR3
b3JrU2Vzc2lvbnMoKS52YWx1ZXMoKSkgewotICAgICAgICBpZiAoYXV0byogY2FjaGUgPSBzZXNz
aW9uLT5jYWNoZSgpKQorICAgIGZvckVhY2hOZXR3b3JrU2Vzc2lvbihbbW9kaWZpZWRTaW5jZSwg
JmFnZ3JlZ2F0b3JdKE5ldHdvcmtTZXNzaW9uJiBzZXNzaW9uKSB7CisgICAgICAgIGlmIChhdXRv
KiBjYWNoZSA9IHNlc3Npb24uY2FjaGUoKSkKICAgICAgICAgICAgIGNhY2hlLT5jbGVhcihtb2Rp
ZmllZFNpbmNlLCBbYWdncmVnYXRvciA9IGFnZ3JlZ2F0b3IuY29weVJlZigpXSAoKSB7IH0pOwot
ICAgIH0KKyAgICB9KTsKIH0KIAogdm9pZCBOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1UZXJtaW5h
dGUoKQpAQCAtMTcxLDggKzE3MSw4IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtVGVy
bWluYXRlKCkKIHZvaWQgTmV0d29ya1Byb2Nlc3M6OnNldE5ldHdvcmtQcm94eVNldHRpbmdzKGNv
bnN0IFNvdXBOZXR3b3JrUHJveHlTZXR0aW5ncyYgc2V0dGluZ3MpCiB7CiAgICAgU291cE5ldHdv
cmtTZXNzaW9uOjpzZXRQcm94eVNldHRpbmdzKHNldHRpbmdzKTsKLSAgICBmb3JFYWNoTmV0d29y
a1N0b3JhZ2VTZXNzaW9uKFtdKGNvbnN0IGF1dG8mIHNlc3Npb24pIHsKLSAgICAgICAgc2Vzc2lv
bi5zb3VwTmV0d29ya1Nlc3Npb24oKS5zZXR1cFByb3h5KCk7CisgICAgZm9yRWFjaE5ldHdvcmtT
ZXNzaW9uKFtdKGNvbnN0IGF1dG8mIHNlc3Npb24pIHsKKyAgICAgICAgc3RhdGljX2Nhc3Q8Y29u
c3QgTmV0d29ya1Nlc3Npb25Tb3VwJj4oc2Vzc2lvbikuc291cE5ldHdvcmtTZXNzaW9uKCkuc2V0
dXBQcm94eSgpOwogICAgIH0pOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL3NvdXAvTmV0d29ya1Nlc3Npb25Tb3VwLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrU2Vzc2lvblNvdXAuY3BwCmluZGV4IGY3ZGVjNzA0OGQx
Li43MzU1MjU3YmVkYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9z
b3VwL05ldHdvcmtTZXNzaW9uU291cC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9zb3VwL05ldHdvcmtTZXNzaW9uU291cC5jcHAKQEAgLTQxLDEzICs0MSwxOSBAQCB1c2lu
ZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogTmV0d29ya1Nlc3Npb25Tb3VwOjpOZXR3b3JrU2Vzc2lv
blNvdXAoTmV0d29ya1Byb2Nlc3MmIG5ldHdvcmtQcm9jZXNzLCBOZXR3b3JrU2Vzc2lvbkNyZWF0
aW9uUGFyYW1ldGVycyYmIHBhcmFtZXRlcnMpCiAgICAgOiBOZXR3b3JrU2Vzc2lvbihuZXR3b3Jr
UHJvY2VzcywgcGFyYW1ldGVycykKKyAgICAsIG1fbmV0d29ya1Nlc3Npb24oc3RkOjptYWtlX3Vu
aXF1ZTxTb3VwTmV0d29ya1Nlc3Npb24+KG1fc2Vzc2lvbklEKSkKIHsKLSAgICBuZXR3b3JrU3Rv
cmFnZVNlc3Npb24oKS0+c2V0Q29va2llT2JzZXJ2ZXJIYW5kbGVyKFt0aGlzXSB7Ci0gICAgICAg
IHRoaXMtPm5ldHdvcmtQcm9jZXNzKCkuc3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2VyPigpLT5u
b3RpZnlDb29raWVzRGlkQ2hhbmdlKG1fc2Vzc2lvbklEKTsKLSAgICB9KTsKKyAgICBhdXRvKiBz
dG9yYWdlU2Vzc2lvbiA9IG5ldHdvcmtTdG9yYWdlU2Vzc2lvbigpOworICAgIEFTU0VSVChzdG9y
YWdlU2Vzc2lvbik7CiAKICAgICBpZiAoIXBhcmFtZXRlcnMuY29va2llUGVyc2lzdGVudFN0b3Jh
Z2VQYXRoLmlzRW1wdHkoKSkKLSAgICAgICAgdGhpcy0+bmV0d29ya1Byb2Nlc3MoKS5zdXBwbGVt
ZW50PFdlYkNvb2tpZU1hbmFnZXI+KCktPnNldENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlKG1fc2Vz
c2lvbklELCBwYXJhbWV0ZXJzLmNvb2tpZVBlcnNpc3RlbnRTdG9yYWdlUGF0aCwgcGFyYW1ldGVy
cy5jb29raWVQZXJzaXN0ZW50U3RvcmFnZVR5cGUpOworICAgICAgICBzZXRDb29raWVQZXJzaXN0
ZW50U3RvcmFnZShwYXJhbWV0ZXJzLmNvb2tpZVBlcnNpc3RlbnRTdG9yYWdlUGF0aCwgcGFyYW1l
dGVycy5jb29raWVQZXJzaXN0ZW50U3RvcmFnZVR5cGUpOworICAgIGVsc2UKKyAgICAgICAgbV9u
ZXR3b3JrU2Vzc2lvbi0+c2V0Q29va2llSmFyKHN0b3JhZ2VTZXNzaW9uLT5jb29raWVTdG9yYWdl
KCkpOworCisgICAgc3RvcmFnZVNlc3Npb24tPnNldENvb2tpZU9ic2VydmVySGFuZGxlcihbdGhp
c10geworICAgICAgICB0aGlzLT5uZXR3b3JrUHJvY2VzcygpLnN1cHBsZW1lbnQ8V2ViQ29va2ll
TWFuYWdlcj4oKS0+bm90aWZ5Q29va2llc0RpZENoYW5nZShtX3Nlc3Npb25JRCk7CisgICAgfSk7
CiB9CiAKIE5ldHdvcmtTZXNzaW9uU291cDo6fk5ldHdvcmtTZXNzaW9uU291cCgpCkBAIC01OCw3
ICs2NCwzMSBAQCBOZXR3b3JrU2Vzc2lvblNvdXA6On5OZXR3b3JrU2Vzc2lvblNvdXAoKQogCiBT
b3VwU2Vzc2lvbiogTmV0d29ya1Nlc3Npb25Tb3VwOjpzb3VwU2Vzc2lvbigpIGNvbnN0CiB7Ci0g
ICAgcmV0dXJuIG5ldHdvcmtTdG9yYWdlU2Vzc2lvbigpLT5zb3VwTmV0d29ya1Nlc3Npb24oKS5z
b3VwU2Vzc2lvbigpOworICAgIHJldHVybiBtX25ldHdvcmtTZXNzaW9uLT5zb3VwU2Vzc2lvbigp
OworfQorCit2b2lkIE5ldHdvcmtTZXNzaW9uU291cDo6c2V0Q29va2llUGVyc2lzdGVudFN0b3Jh
Z2UoY29uc3QgU3RyaW5nJiBzdG9yYWdlUGF0aCwgU291cENvb2tpZVBlcnNpc3RlbnRTdG9yYWdl
VHlwZSBzdG9yYWdlVHlwZSkKK3sKKyAgICBhdXRvKiBzdG9yYWdlU2Vzc2lvbiA9IG5ldHdvcmtT
dG9yYWdlU2Vzc2lvbigpOworICAgIGlmICghc3RvcmFnZVNlc3Npb24pCisgICAgICAgIHJldHVy
bjsKKworICAgIEdSZWZQdHI8U291cENvb2tpZUphcj4gamFyOworICAgIHN3aXRjaCAoc3RvcmFn
ZVR5cGUpIHsKKyAgICBjYXNlIFNvdXBDb29raWVQZXJzaXN0ZW50U3RvcmFnZVR5cGU6OlRleHQ6
CisgICAgICAgIGphciA9IGFkb3B0R1JlZihzb3VwX2Nvb2tpZV9qYXJfdGV4dF9uZXcoc3RvcmFn
ZVBhdGgudXRmOCgpLmRhdGEoKSwgRkFMU0UpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBT
b3VwQ29va2llUGVyc2lzdGVudFN0b3JhZ2VUeXBlOjpTUUxpdGU6CisgICAgICAgIGphciA9IGFk
b3B0R1JlZihzb3VwX2Nvb2tpZV9qYXJfZGJfbmV3KHN0b3JhZ2VQYXRoLnV0ZjgoKS5kYXRhKCks
IEZBTFNFKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIHNvdXBfY29va2llX2phcl9zZXRfYWNjZXB0X3Bv
bGljeShqYXIuZ2V0KCksIHNvdXBfY29va2llX2phcl9nZXRfYWNjZXB0X3BvbGljeShzdG9yYWdl
U2Vzc2lvbi0+Y29va2llU3RvcmFnZSgpKSk7CisgICAgc3RvcmFnZVNlc3Npb24tPnNldENvb2tp
ZVN0b3JhZ2UoV1RGTW92ZShqYXIpKTsKKworICAgIG1fbmV0d29ya1Nlc3Npb24tPnNldENvb2tp
ZUphcihzdG9yYWdlU2Vzc2lvbi0+Y29va2llU3RvcmFnZSgpKTsKIH0KIAogdm9pZCBOZXR3b3Jr
U2Vzc2lvblNvdXA6OmNsZWFyQ3JlZGVudGlhbHMoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtTZXNzaW9uU291cC5oIGIvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtTZXNzaW9uU291cC5oCmluZGV4IGMzMTMwNTY4
MjYyLi5kZjQzOTE4YzA3YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9zb3VwL05ldHdvcmtTZXNzaW9uU291cC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3Mvc291cC9OZXR3b3JrU2Vzc2lvblNvdXAuaApAQCAtMjYsOSArMjYsMTQgQEAKICNwcmFn
bWEgb25jZQogCiAjaW5jbHVkZSAiTmV0d29ya1Nlc3Npb24uaCIKKyNpbmNsdWRlICJTb3VwQ29v
a2llUGVyc2lzdGVudFN0b3JhZ2VUeXBlLmgiCiAKIHR5cGVkZWYgc3RydWN0IF9Tb3VwU2Vzc2lv
biBTb3VwU2Vzc2lvbjsKIAorbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgU291cE5ldHdvcmtT
ZXNzaW9uOworfQorCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgTmV0d29ya1NvY2tldENo
YW5uZWw7CkBAIC00MywxNCArNDgsMTkgQEAgcHVibGljOgogICAgIH0KICAgICB+TmV0d29ya1Nl
c3Npb25Tb3VwKCk7CiAKKyAgICBXZWJDb3JlOjpTb3VwTmV0d29ya1Nlc3Npb24mIHNvdXBOZXR3
b3JrU2Vzc2lvbigpIGNvbnN0IHsgcmV0dXJuICptX25ldHdvcmtTZXNzaW9uOyB9CiAgICAgU291
cFNlc3Npb24qIHNvdXBTZXNzaW9uKCkgY29uc3Q7CiAKKyAgICB2b2lkIHNldENvb2tpZVBlcnNp
c3RlbnRTdG9yYWdlKGNvbnN0IFN0cmluZyYgc3RvcmFnZVBhdGgsIFNvdXBDb29raWVQZXJzaXN0
ZW50U3RvcmFnZVR5cGUpOworCiBwcml2YXRlOgogICAgIE5ldHdvcmtTZXNzaW9uU291cChOZXR3
b3JrUHJvY2VzcyYsIE5ldHdvcmtTZXNzaW9uQ3JlYXRpb25QYXJhbWV0ZXJzJiYpOwogCiAgICAg
c3RkOjp1bmlxdWVfcHRyPFdlYlNvY2tldFRhc2s+IGNyZWF0ZVdlYlNvY2tldFRhc2soTmV0d29y
a1NvY2tldENoYW5uZWwmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBT
dHJpbmcmIHByb3RvY29sKSBvdmVycmlkZTsKIAogICAgIHZvaWQgY2xlYXJDcmVkZW50aWFscygp
IG92ZXJyaWRlOworCisgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlNvdXBOZXR3b3JrU2Vz
c2lvbj4gbV9uZXR3b3JrU2Vzc2lvbjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>374774</attachid>
            <date>2019-07-24 07:33:52 -0700</date>
            <delta_ts>2019-07-24 07:47:51 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>wk2-soup-session-rework.diff</filename>
            <type>text/plain</type>
            <size>45440</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBlN2M1OGE3Yzc2Ni4uMmVlM2EzMTI0YzUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzNSBAQAorMjAxOS0wNy0yNCAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGln
YWxpYS5jb20+CisKKyAgICAgICAgW1NPVVBdIE1vdmUgU291cE5ldHdvcmtTZXNzaW9uIG93bmVy
c2hpcCBmcm9tIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiB0byBOZXR3b3JrU2Vzc2lvbgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAwMDc2CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVtb3ZlIHRoZSBTb3Vw
TmV0d29ya1Nlc3Npb24gZnJvbSBOZXR3b3JrU3RvcmFnZVNlc3Npb24uCisKKyAgICAgICAgKiBw
bGF0Zm9ybS9uZXR3b3JrL05ldHdvcmtTdG9yYWdlU2Vzc2lvbi5oOgorICAgICAgICAoV2ViQ29y
ZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpjb29raWVTdG9yYWdlIGNvbnN0KTogUmV0dXJuIHRo
ZSBjb29raWUgamFyLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvU3RvcmFnZVNlc3Npb25Q
cm92aWRlci5oOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVNlc3Npb25Qcm92aWRlcjo6c291
cFNlc3Npb24gY29uc3QpOiBUZW1wb3JhcnkgYWRkIHRoaXMgdmlydHVhbCBtZXRob2QgdGhhdCBp
cyByZXF1aXJlZCBieQorICAgICAgICBTb2NrZXRTdHJlYW1IYW5kbGVJbXBsU291cC4gSXQgd2ls
bCBiZSByZW1vdmVkIG9uY2Ugd2Ugc3dpdGNoIHRvIGxpYnNvdXAgV2ViU29ja2V0cyBBUEkgc29v
bi4KKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvRE5TUmVzb2x2ZVF1ZXVlU291cC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpnbG9iYWxEZWZhdWx0U291cFNlc3Npb25BY2Nlc3Nvcik6
IFJld29yayB0aGUgYWNjZXNzb3IgdG8gcmV0dXJuIHRoZSBTb3VwU2Vzc2lvbiBkaXJlY3RseSBz
aW5jZQorICAgICAgICB0aGF0J3Mgd2hhdCB3ZSByZWFsbHkgd2FudC4KKyAgICAgICAgKFdlYkNv
cmU6OkROU1Jlc29sdmVRdWV1ZVNvdXA6OnNldEdsb2JhbERlZmF1bHRTb3VwU2Vzc2lvbkFjY2Vz
c29yKToKKyAgICAgICAgKFdlYkNvcmU6OkROU1Jlc29sdmVRdWV1ZVNvdXA6OnVwZGF0ZUlzVXNp
bmdQcm94eSk6CisgICAgICAgIChXZWJDb3JlOjpETlNSZXNvbHZlUXVldWVTb3VwOjpwbGF0Zm9y
bVJlc29sdmUpOgorICAgICAgICAoV2ViQ29yZTo6RE5TUmVzb2x2ZVF1ZXVlU291cDo6cmVzb2x2
ZSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9zb3VwL0ROU1Jlc29sdmVRdWV1ZVNvdXAu
aDoKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvTmV0d29ya1N0b3JhZ2VTZXNzaW9u
U291cC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb246Ok5ldHdv
cmtTdG9yYWdlU2Vzc2lvbik6IENyZWF0ZSBhbmQgc2V0dXAgdGhlIGRlZmF1bHQgY29va2llIGph
ci4KKyAgICAgICAgKFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6fk5ldHdvcmtTdG9y
YWdlU2Vzc2lvbik6IE9ubHkgZGlzY29ubmVjdCB0aGUgY29va2llIGphciBzaWduYWxzLgorICAg
ICAgICAoV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpzZXRDb29raWVTdG9yYWdlKTog
VXBkYXRlIHRoZSBjb29raWUgamFyLCBub3cgd2Uga25vdyBpdCdzIGFsd2F5cyBhIG5ldyBvbmUu
CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9zb3VwL1NvY2tldFN0cmVhbUhhbmRsZUltcGxT
b3VwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZUltcGw6OmNyZWF0
ZSk6IFVzZSB0aGUgbmV3IHZpcnR1YWwgbWV0aG9kIGZyb20gU3RvcmFnZVNlc3Npb25Qcm92aWRl
ciB0byBnZXQgdGhlIFNvdXBTZXNzaW9uLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvc291
cC9Tb3VwTmV0d29ya1Nlc3Npb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6U291cE5ldHdvcmtT
ZXNzaW9uOjpTb3VwTmV0d29ya1Nlc3Npb24pOiBSZW1vdmUgdGhlIFNvdXBDb29raWVKYXIgcGFy
YW1ldGVyLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvc291cC9Tb3VwTmV0d29ya1Nlc3Np
b24uaDoKKwogMjAxOS0wNy0yMyAgSnVzdGluIEZhbiAgPGp1c3Rpbl9mYW5AYXBwbGUuY29tPgog
CiAgICAgICAgIFtXZWJHUFVdIEltcGxlbWVudCBlcnJvcnMgZm9yIEdQVVJlbmRlclBpcGVsaW5l
IGNyZWF0aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL05l
dHdvcmtTdG9yYWdlU2Vzc2lvbi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9O
ZXR3b3JrU3RvcmFnZVNlc3Npb24uaAppbmRleCA1OGRhODc4OTA3Zi4uZjI4MWM1NGQ3OTYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvTmV0d29ya1N0b3JhZ2VT
ZXNzaW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9OZXR3b3JrU3Rv
cmFnZVNlc3Npb24uaApAQCAtNjUsNyArNjUsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFz
cyBDdXJsUHJveHlTZXR0aW5nczsKIGNsYXNzIE5ldHdvcmtpbmdDb250ZXh0OwogY2xhc3MgUmVz
b3VyY2VSZXF1ZXN0OwotY2xhc3MgU291cE5ldHdvcmtTZXNzaW9uOwogCiBzdHJ1Y3QgQ29va2ll
Owogc3RydWN0IENvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFByb3h5OwpAQCAtOTcsMTMgKzk2LDEx
IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCBSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3Rv
cmFnZVJlZj4gY29va2llU3RvcmFnZSgpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRp
YyB2b2lkIHNldFN0b3JhZ2VBY2Nlc3NBUElFbmFibGVkKGJvb2wpOwogI2VsaWYgVVNFKFNPVVAp
Ci0gICAgV0VCQ09SRV9FWFBPUlQgTmV0d29ya1N0b3JhZ2VTZXNzaW9uKFBBTDo6U2Vzc2lvbklE
LCBzdGQ6OnVuaXF1ZV9wdHI8U291cE5ldHdvcmtTZXNzaW9uPiYmKTsKKyAgICBXRUJDT1JFX0VY
UE9SVCBOZXR3b3JrU3RvcmFnZVNlc3Npb24oUEFMOjpTZXNzaW9uSUQpOwogICAgIH5OZXR3b3Jr
U3RvcmFnZVNlc3Npb24oKTsKIAotICAgIFNvdXBOZXR3b3JrU2Vzc2lvbiYgc291cE5ldHdvcmtT
ZXNzaW9uKCkgY29uc3Q7Ci0gICAgdm9pZCBjbGVhclNvdXBOZXR3b3JrU2Vzc2lvbigpOwotICAg
IFNvdXBDb29raWVKYXIqIGNvb2tpZVN0b3JhZ2UoKSBjb25zdDsKLSAgICB2b2lkIHNldENvb2tp
ZVN0b3JhZ2UoU291cENvb2tpZUphciopOworICAgIFNvdXBDb29raWVKYXIqIGNvb2tpZVN0b3Jh
Z2UoKSBjb25zdCB7IHJldHVybiBtX2Nvb2tpZVN0b3JhZ2UuZ2V0KCk7IH0KKyAgICB2b2lkIHNl
dENvb2tpZVN0b3JhZ2UoR1JlZlB0cjxTb3VwQ29va2llSmFyPiYmKTsKICAgICB2b2lkIHNldENv
b2tpZU9ic2VydmVySGFuZGxlcihGdW5jdGlvbjx2b2lkICgpPiYmKTsKICAgICB2b2lkIGdldENy
ZWRlbnRpYWxGcm9tUGVyc2lzdGVudFN0b3JhZ2UoY29uc3QgUHJvdGVjdGlvblNwYWNlJiwgR0Nh
bmNlbGxhYmxlKiwgRnVuY3Rpb248dm9pZCAoQ3JlZGVudGlhbCYmKT4mJiBjb21wbGV0aW9uSGFu
ZGxlcik7CiAgICAgdm9pZCBzYXZlQ3JlZGVudGlhbFRvUGVyc2lzdGVudFN0b3JhZ2UoY29uc3Qg
UHJvdGVjdGlvblNwYWNlJiwgY29uc3QgQ3JlZGVudGlhbCYpOwpAQCAtMTcxLDcgKzE2OCw3IEBA
IHByaXZhdGU6CiAjZWxpZiBVU0UoU09VUCkKICAgICBzdGF0aWMgdm9pZCBjb29raWVzRGlkQ2hh
bmdlKE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiopOwogCi0gICAgbXV0YWJsZSBzdGQ6OnVuaXF1ZV9w
dHI8U291cE5ldHdvcmtTZXNzaW9uPiBtX3Nlc3Npb247CisgICAgR1JlZlB0cjxTb3VwQ29va2ll
SmFyPiBtX2Nvb2tpZVN0b3JhZ2U7CiAgICAgRnVuY3Rpb248dm9pZCAoKT4gbV9jb29raWVPYnNl
cnZlckhhbmRsZXI7CiAjZWxpZiBVU0UoQ1VSTCkKICAgICBVbmlxdWVSZWY8Q29va2llSmFyQ3Vy
bD4gbV9jb29raWVTdG9yYWdlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9TdG9yYWdlU2Vzc2lvblByb3ZpZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL1N0b3JhZ2VTZXNzaW9uUHJvdmlkZXIuaAppbmRleCAwYzE1NTViNjZhMC4uMzgw
MTA1MDExYjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvU3Rv
cmFnZVNlc3Npb25Qcm92aWRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvU3RvcmFnZVNlc3Npb25Qcm92aWRlci5oCkBAIC0yNyw2ICsyNywxMCBAQAogCiAjaW5jbHVk
ZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CiAKKyNpZiBVU0UoU09VUCkKK3R5cGVkZWYg
c3RydWN0IF9Tb3VwU2Vzc2lvbiBTb3VwU2Vzc2lvbjsKKyNlbmRpZgorCiBuYW1lc3BhY2UgUEFM
IHsKIGNsYXNzIFNlc3Npb25JRDsKIH0KQEAgLTM5LDYgKzQzLDExIEBAIGNsYXNzIFN0b3JhZ2VT
ZXNzaW9uUHJvdmlkZXIgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8U3RvcmFnZVNlc3Np
b25Qcm92aWRlCiBwdWJsaWM6CiAgICAgdmlydHVhbCBOZXR3b3JrU3RvcmFnZVNlc3Npb24qIHN0
b3JhZ2VTZXNzaW9uKCkgY29uc3QgPSAwOwogCisjaWYgVVNFKFNPVVApCisgICAgLy8gRklYTUU6
IFRoaXMgaXMgb25seSByZXF1aXJlZCBieSBTb2NrZXRTdHJlYW1IYW5kbGVJbXBsU291cCwgcmVt
b3ZlIGl0IHdoZW4gd2Ugc3dpdGNoIHRvIGxpYnNvdXAgV2ViU29ja2V0cyBBUEkuCisgICAgdmly
dHVhbCBTb3VwU2Vzc2lvbiogc291cFNlc3Npb24oKSBjb25zdCB7IHJldHVybiBudWxscHRyOyB9
CisjZW5kaWYKKwogICAgIHZpcnR1YWwgflN0b3JhZ2VTZXNzaW9uUHJvdmlkZXIoKSB7IH0KIH07
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9ETlNS
ZXNvbHZlUXVldWVTb3VwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291
cC9ETlNSZXNvbHZlUXVldWVTb3VwLmNwcAppbmRleCBkMjM5Nzc1NDFhZi4uNGJiMzBhODcxZGUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9ETlNSZXNv
bHZlUXVldWVTb3VwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3Nv
dXAvRE5TUmVzb2x2ZVF1ZXVlU291cC5jcHAKQEAgLTI5LDggKzI5LDYgQEAKIAogI2lmIFVTRShT
T1VQKQogCi0jaW5jbHVkZSAiTmV0d29ya1N0b3JhZ2VTZXNzaW9uLmgiCi0jaW5jbHVkZSAiU291
cE5ldHdvcmtTZXNzaW9uLmgiCiAjaW5jbHVkZSA8bGlic291cC9zb3VwLmg+CiAjaW5jbHVkZSA8
d3RmL0NvbXBsZXRpb25IYW5kbGVyLmg+CiAjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uLmg+CkBAIC03
OCwyMSArNzYsMjEgQEAgc3RhdGljIHZvaWQgcHJveHlSZXNvbHZlZEZvckh0dHBzVXJpQ2FsbGJh
Y2soR09iamVjdCogc291cmNlLCBHQXN5bmNSZXN1bHQqIHJlc3UKICAgICBkaWRSZXNvbHZlUHJv
eHkoR19QUk9YWV9SRVNPTFZFUihzb3VyY2UpLCByZXN1bHQsICZpc1VzaW5nSHR0cHNQcm94eSwg
c3RhdGljX2Nhc3Q8Ym9vbCo+KHVzZXJEYXRhKSk7CiB9CiAKLUZ1bmN0aW9uPE5ldHdvcmtTdG9y
YWdlU2Vzc2lvbiYoKT4mIGdsb2JhbERlZmF1bHROZXR3b3JrU3RvcmFnZVNlc3Npb25BY2Nlc3Nv
cigpCitGdW5jdGlvbjxTb3VwU2Vzc2lvbiooKT4mIGdsb2JhbERlZmF1bHRTb3VwU2Vzc2lvbkFj
Y2Vzc29yKCkKIHsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8RnVuY3Rpb248TmV0d29ya1N0
b3JhZ2VTZXNzaW9uJigpPj4gYWNjZXNzb3I7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEZ1
bmN0aW9uPFNvdXBTZXNzaW9uKigpPj4gYWNjZXNzb3I7CiAgICAgcmV0dXJuIGFjY2Vzc29yLmdl
dCgpOwogfQogCi12b2lkIEROU1Jlc29sdmVRdWV1ZVNvdXA6OnNldEdsb2JhbERlZmF1bHROZXR3
b3JrU3RvcmFnZVNlc3Npb25BY2Nlc3NvcihGdW5jdGlvbjxOZXR3b3JrU3RvcmFnZVNlc3Npb24m
KCk+JiYgYWNjZXNzb3IpCit2b2lkIEROU1Jlc29sdmVRdWV1ZVNvdXA6OnNldEdsb2JhbERlZmF1
bHRTb3VwU2Vzc2lvbkFjY2Vzc29yKEZ1bmN0aW9uPFNvdXBTZXNzaW9uKigpPiYmIGFjY2Vzc29y
KQogewotICAgIGdsb2JhbERlZmF1bHROZXR3b3JrU3RvcmFnZVNlc3Npb25BY2Nlc3NvcigpID0g
V1RGTW92ZShhY2Nlc3Nvcik7CisgICAgZ2xvYmFsRGVmYXVsdFNvdXBTZXNzaW9uQWNjZXNzb3Io
KSA9IFdURk1vdmUoYWNjZXNzb3IpOwogfQogCiB2b2lkIEROU1Jlc29sdmVRdWV1ZVNvdXA6OnVw
ZGF0ZUlzVXNpbmdQcm94eSgpCiB7CiAgICAgR1JlZlB0cjxHUHJveHlSZXNvbHZlcj4gcmVzb2x2
ZXI7Ci0gICAgZ19vYmplY3RfZ2V0KGdsb2JhbERlZmF1bHROZXR3b3JrU3RvcmFnZVNlc3Npb25B
Y2Nlc3NvcigpKCkuc291cE5ldHdvcmtTZXNzaW9uKCkuc291cFNlc3Npb24oKSwgInByb3h5LXJl
c29sdmVyIiwgJnJlc29sdmVyLm91dFB0cigpLCBudWxscHRyKTsKKyAgICBnX29iamVjdF9nZXQo
Z2xvYmFsRGVmYXVsdFNvdXBTZXNzaW9uQWNjZXNzb3IoKSgpLCAicHJveHktcmVzb2x2ZXIiLCAm
cmVzb2x2ZXIub3V0UHRyKCksIG51bGxwdHIpOwogICAgIEFTU0VSVChyZXNvbHZlcik7CiAKICAg
ICBnX3Byb3h5X3Jlc29sdmVyX2xvb2t1cF9hc3luYyhyZXNvbHZlci5nZXQoKSwgImh0dHA6Ly9l
eGFtcGxlLmNvbS8iLCBudWxscHRyLCBwcm94eVJlc29sdmVkRm9ySHR0cFVyaUNhbGxiYWNrLCAm
bV9pc1VzaW5nUHJveHkpOwpAQCAtMTc1LDcgKzE3Myw3IEBAIHZvaWQgRE5TUmVzb2x2ZVF1ZXVl
U291cDo6cGxhdGZvcm1SZXNvbHZlKGNvbnN0IFN0cmluZyYgaG9zdG5hbWUpCiB7CiAgICAgQVNT
RVJUKGlzTWFpblRocmVhZCgpKTsKIAotICAgIHNvdXBfc2Vzc2lvbl9wcmVmZXRjaF9kbnMoZ2xv
YmFsRGVmYXVsdE5ldHdvcmtTdG9yYWdlU2Vzc2lvbkFjY2Vzc29yKCkoKS5zb3VwTmV0d29ya1Nl
c3Npb24oKS5zb3VwU2Vzc2lvbigpLCBob3N0bmFtZS51dGY4KCkuZGF0YSgpLCBudWxscHRyLCBy
ZXNvbHZlZENhbGxiYWNrLCBudWxscHRyKTsKKyAgICBzb3VwX3Nlc3Npb25fcHJlZmV0Y2hfZG5z
KGdsb2JhbERlZmF1bHRTb3VwU2Vzc2lvbkFjY2Vzc29yKCkoKSwgaG9zdG5hbWUudXRmOCgpLmRh
dGEoKSwgbnVsbHB0ciwgcmVzb2x2ZWRDYWxsYmFjaywgbnVsbHB0cik7CiB9CiAKIHZvaWQgRE5T
UmVzb2x2ZVF1ZXVlU291cDo6cmVzb2x2ZShjb25zdCBTdHJpbmcmIGhvc3RuYW1lLCB1aW50NjRf
dCBpZGVudGlmaWVyLCBETlNDb21wbGV0aW9uSGFuZGxlciYmIGNvbXBsZXRpb25IYW5kbGVyKQpA
QCAtMTg0LDcgKzE4Miw3IEBAIHZvaWQgRE5TUmVzb2x2ZVF1ZXVlU291cDo6cmVzb2x2ZShjb25z
dCBTdHJpbmcmIGhvc3RuYW1lLCB1aW50NjRfdCBpZGVudGlmaWVyLCBECiAKICAgICBhdXRvIGFk
ZHJlc3MgPSBhZG9wdEdSZWYoc291cF9hZGRyZXNzX25ldyhob3N0bmFtZS51dGY4KCkuZGF0YSgp
LCAwKSk7CiAgICAgYXV0byBjYW5jZWxsYWJsZSA9IGFkb3B0R1JlZihnX2NhbmNlbGxhYmxlX25l
dygpKTsKLSAgICBzb3VwX2FkZHJlc3NfcmVzb2x2ZV9hc3luYyhhZGRyZXNzLmdldCgpLCBzb3Vw
X3Nlc3Npb25fZ2V0X2FzeW5jX2NvbnRleHQoV2ViQ29yZTo6Z2xvYmFsRGVmYXVsdE5ldHdvcmtT
dG9yYWdlU2Vzc2lvbkFjY2Vzc29yKCkoKS5zb3VwTmV0d29ya1Nlc3Npb24oKS5zb3VwU2Vzc2lv
bigpKSwgY2FuY2VsbGFibGUuZ2V0KCksIHJlc29sdmVkV2l0aE9ic2VydmVyQ2FsbGJhY2ssIHRo
aXMpOworICAgIHNvdXBfYWRkcmVzc19yZXNvbHZlX2FzeW5jKGFkZHJlc3MuZ2V0KCksIHNvdXBf
c2Vzc2lvbl9nZXRfYXN5bmNfY29udGV4dChnbG9iYWxEZWZhdWx0U291cFNlc3Npb25BY2Nlc3Nv
cigpKCkpLCBjYW5jZWxsYWJsZS5nZXQoKSwgcmVzb2x2ZWRXaXRoT2JzZXJ2ZXJDYWxsYmFjaywg
dGhpcyk7CiAKICAgICBnX29iamVjdF9zZXRfZGF0YShHX09CSkVDVChhZGRyZXNzLmdldCgpKSwg
ImlkZW50aWZpZXIiLCBHVUlOVF9UT19QT0lOVEVSKGlkZW50aWZpZXIpKTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL0ROU1Jlc29sdmVRdWV1ZVNv
dXAuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9ETlNSZXNvbHZlUXVl
dWVTb3VwLmgKaW5kZXggNTcyMDM0ZjU0YWMuLmNlZTc5ZjkzMzMxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvRE5TUmVzb2x2ZVF1ZXVlU291cC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9ETlNSZXNvbHZlUXVldWVT
b3VwLmgKQEAgLTMwLDYgKzMwLDggQEAKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1
ZGUgPHd0Zi9nbGliL0dSZWZQdHIuaD4KIAordHlwZWRlZiBzdHJ1Y3QgX1NvdXBTZXNzaW9uIFNv
dXBTZXNzaW9uOworCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIE5ldHdvcmtTdG9yYWdl
U2Vzc2lvbjsKQEAgLTM5LDcgKzQxLDcgQEAgcHVibGljOgogICAgIHVzaW5nIENvbXBsZXRpb25B
bmRDYW5jZWxIYW5kbGVycyA9IHN0ZDo6cGFpcjxXZWJDb3JlOjpETlNDb21wbGV0aW9uSGFuZGxl
ciwgR1JlZlB0cjxHQ2FuY2VsbGFibGU+PjsKIAogICAgIEROU1Jlc29sdmVRdWV1ZVNvdXAoKSA9
IGRlZmF1bHQ7Ci0gICAgc3RhdGljIHZvaWQgc2V0R2xvYmFsRGVmYXVsdE5ldHdvcmtTdG9yYWdl
U2Vzc2lvbkFjY2Vzc29yKEZ1bmN0aW9uPE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYoKT4mJik7Cisg
ICAgc3RhdGljIHZvaWQgc2V0R2xvYmFsRGVmYXVsdFNvdXBTZXNzaW9uQWNjZXNzb3IoRnVuY3Rp
b248U291cFNlc3Npb24qKCk+JiYpOwogICAgIHZvaWQgcmVzb2x2ZShjb25zdCBTdHJpbmcmIGhv
c3RuYW1lLCB1aW50NjRfdCBpZGVudGlmaWVyLCBETlNDb21wbGV0aW9uSGFuZGxlciYmKSBmaW5h
bDsKICAgICB2b2lkIHN0b3BSZXNvbHZlKHVpbnQ2NF90IGlkZW50aWZpZXIpIGZpbmFsOwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvTmV0d29ya1N0
b3JhZ2VTZXNzaW9uU291cC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3Nv
dXAvTmV0d29ya1N0b3JhZ2VTZXNzaW9uU291cC5jcHAKaW5kZXggMDUzZjZiOTFhNjQuLmU0Yzhi
MGYxM2U2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAv
TmV0d29ya1N0b3JhZ2VTZXNzaW9uU291cC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9zb3VwL05ldHdvcmtTdG9yYWdlU2Vzc2lvblNvdXAuY3BwCkBAIC01MywzNCAr
NTMsMTcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1OZXR3b3JrU3RvcmFnZVNlc3Npb246
Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbihQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIHN0ZDo6dW5p
cXVlX3B0cjxTb3VwTmV0d29ya1Nlc3Npb24+JiYgc2Vzc2lvbikKK05ldHdvcmtTdG9yYWdlU2Vz
c2lvbjo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKICAg
ICA6IG1fc2Vzc2lvbklEKHNlc3Npb25JRCkKLSAgICAsIG1fc2Vzc2lvbihXVEZNb3ZlKHNlc3Np
b24pKQorICAgICwgbV9jb29raWVTdG9yYWdlKGFkb3B0R1JlZihzb3VwX2Nvb2tpZV9qYXJfbmV3
KCkpKQogewotICAgIEFTU0VSVChtX3Nlc3Npb24tPmNvb2tpZUphcigpKTsKLSAgICBnX3NpZ25h
bF9jb25uZWN0X3N3YXBwZWQobV9zZXNzaW9uLT5jb29raWVKYXIoKSwgImNoYW5nZWQiLCBHX0NB
TExCQUNLKGNvb2tpZXNEaWRDaGFuZ2UpLCB0aGlzKTsKKyAgICBzb3VwX2Nvb2tpZV9qYXJfc2V0
X2FjY2VwdF9wb2xpY3kobV9jb29raWVTdG9yYWdlLmdldCgpLCBTT1VQX0NPT0tJRV9KQVJfQUND
RVBUX05PX1RISVJEX1BBUlRZKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0X3N3YXBwZWQobV9jb29r
aWVTdG9yYWdlLmdldCgpLCAiY2hhbmdlZCIsIEdfQ0FMTEJBQ0soY29va2llc0RpZENoYW5nZSks
IHRoaXMpOwogfQogCiBOZXR3b3JrU3RvcmFnZVNlc3Npb246On5OZXR3b3JrU3RvcmFnZVNlc3Np
b24oKQogewotICAgIGNsZWFyU291cE5ldHdvcmtTZXNzaW9uKCk7Ci19Ci0KLVNvdXBOZXR3b3Jr
U2Vzc2lvbiYgTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpzb3VwTmV0d29ya1Nlc3Npb24oKSBjb25z
dAotewotICAgIEFTU0VSVChtX3Nlc3Npb24pOwotICAgIHJldHVybiAqbV9zZXNzaW9uLmdldCgp
OwotfTsKLQotdm9pZCBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmNsZWFyU291cE5ldHdvcmtTZXNz
aW9uKCkKLXsKLSAgICBpZiAobV9zZXNzaW9uKSB7Ci0gICAgICAgIEFTU0VSVChtX3Nlc3Npb24t
PmNvb2tpZUphcigpKTsKLSAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9tYXRj
aGVkKG1fc2Vzc2lvbi0+Y29va2llSmFyKCksIEdfU0lHTkFMX01BVENIX0RBVEEsIDAsIDAsIG51
bGxwdHIsIG51bGxwdHIsIHRoaXMpOwotICAgIH0KLQotICAgIG1fc2Vzc2lvbiA9IG51bGxwdHI7
Ci0gICAgbV9jb29raWVPYnNlcnZlckhhbmRsZXIgPSBudWxscHRyOworICAgIGdfc2lnbmFsX2hh
bmRsZXJzX2Rpc2Nvbm5lY3RfbWF0Y2hlZChtX2Nvb2tpZVN0b3JhZ2UuZ2V0KCksIEdfU0lHTkFM
X01BVENIX0RBVEEsIDAsIDAsIG51bGxwdHIsIG51bGxwdHIsIHRoaXMpOwogfQogCiB2b2lkIE5l
dHdvcmtTdG9yYWdlU2Vzc2lvbjo6Y29va2llc0RpZENoYW5nZShOZXR3b3JrU3RvcmFnZVNlc3Np
b24qIHNlc3Npb24pCkBAIC04OSwyNSArNzIsMTEgQEAgdm9pZCBOZXR3b3JrU3RvcmFnZVNlc3Np
b246OmNvb2tpZXNEaWRDaGFuZ2UoTmV0d29ya1N0b3JhZ2VTZXNzaW9uKiBzZXNzaW9uKQogICAg
ICAgICBzZXNzaW9uLT5tX2Nvb2tpZU9ic2VydmVySGFuZGxlcigpOwogfQogCi1Tb3VwQ29va2ll
SmFyKiBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmNvb2tpZVN0b3JhZ2UoKSBjb25zdAotewotICAg
IEFTU0VSVChtX3Nlc3Npb24pOwotICAgIEFTU0VSVChtX3Nlc3Npb24tPmNvb2tpZUphcigpKTsK
LSAgICByZXR1cm4gbV9zZXNzaW9uLT5jb29raWVKYXIoKTsKLX0KLQotdm9pZCBOZXR3b3JrU3Rv
cmFnZVNlc3Npb246OnNldENvb2tpZVN0b3JhZ2UoU291cENvb2tpZUphciogamFyKQordm9pZCBO
ZXR3b3JrU3RvcmFnZVNlc3Npb246OnNldENvb2tpZVN0b3JhZ2UoR1JlZlB0cjxTb3VwQ29va2ll
SmFyPiYmIGphcikKIHsKLSAgICBBU1NFUlQoamFyKTsKLSAgICBBU1NFUlQobV9zZXNzaW9uKTsK
LSAgICBBU1NFUlQobV9zZXNzaW9uLT5jb29raWVKYXIoKSk7Ci0KLSAgICBpZiAobV9zZXNzaW9u
LT5jb29raWVKYXIoKSA9PSBqYXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIGdfc2lnbmFsX2hh
bmRsZXJzX2Rpc2Nvbm5lY3RfbWF0Y2hlZChtX3Nlc3Npb24tPmNvb2tpZUphcigpLCBHX1NJR05B
TF9NQVRDSF9EQVRBLCAwLCAwLCBudWxscHRyLCBudWxscHRyLCB0aGlzKTsKLSAgICBtX3Nlc3Np
b24tPnNldENvb2tpZUphcihqYXIpOwotICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChtX3Nl
c3Npb24tPmNvb2tpZUphcigpLCAiY2hhbmdlZCIsIEdfQ0FMTEJBQ0soY29va2llc0RpZENoYW5n
ZSksIHRoaXMpOworICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfbWF0Y2hlZChtX2Nv
b2tpZVN0b3JhZ2UuZ2V0KCksIEdfU0lHTkFMX01BVENIX0RBVEEsIDAsIDAsIG51bGxwdHIsIG51
bGxwdHIsIHRoaXMpOworICAgIG1fY29va2llU3RvcmFnZSA9IFdURk1vdmUoamFyKTsKKyAgICBn
X3NpZ25hbF9jb25uZWN0X3N3YXBwZWQobV9jb29raWVTdG9yYWdlLmdldCgpLCAiY2hhbmdlZCIs
IEdfQ0FMTEJBQ0soY29va2llc0RpZENoYW5nZSksIHRoaXMpOwogfQogCiB2b2lkIE5ldHdvcmtT
dG9yYWdlU2Vzc2lvbjo6c2V0Q29va2llT2JzZXJ2ZXJIYW5kbGVyKEZ1bmN0aW9uPHZvaWQgKCk+
JiYgaGFuZGxlcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
c291cC9Tb2NrZXRTdHJlYW1IYW5kbGVJbXBsU291cC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL3NvdXAvU29ja2V0U3RyZWFtSGFuZGxlSW1wbFNvdXAuY3BwCmluZGV4IGVk
NzhlNGRkZDU5Li5mYmRjYmIxNWU0ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9zb3VwL1NvY2tldFN0cmVhbUhhbmRsZUltcGxTb3VwLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvU29ja2V0U3RyZWFtSGFuZGxlSW1wbFNv
dXAuY3BwCkBAIC0zNiwxMSArMzYsOSBAQAogCiAjaW5jbHVkZSAiRGVwcmVjYXRlZEdsb2JhbFNl
dHRpbmdzLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgotI2luY2x1ZGUgIk5ldHdvcmtTdG9yYWdl
U2Vzc2lvbi5oIgogI2luY2x1ZGUgIlJlc291cmNlRXJyb3IuaCIKICNpbmNsdWRlICJTb2NrZXRT
dHJlYW1FcnJvci5oIgogI2luY2x1ZGUgIlNvY2tldFN0cmVhbUhhbmRsZUNsaWVudC5oIgotI2lu
Y2x1ZGUgIlNvdXBOZXR3b3JrU2Vzc2lvbi5oIgogI2luY2x1ZGUgIlN0b3JhZ2VTZXNzaW9uUHJv
dmlkZXIuaCIKICNpbmNsdWRlICJVUkxTb3VwLmgiCiAjaW5jbHVkZSA8Z2lvL2dpby5oPgpAQCAt
ODcsMTMgKzg1LDEzIEBAIFJlZjxTb2NrZXRTdHJlYW1IYW5kbGVJbXBsPiBTb2NrZXRTdHJlYW1I
YW5kbGVJbXBsOjpjcmVhdGUoY29uc3QgVVJMJiB1cmwsIFNvY2tlCiAgICAgUmVmPFNvY2tldFN0
cmVhbUhhbmRsZUltcGw+IHNvY2tldCA9IGFkb3B0UmVmKCpuZXcgU29ja2V0U3RyZWFtSGFuZGxl
SW1wbCh1cmwsIGNsaWVudCwgc3RvcmFnZVNlc3Npb25Qcm92aWRlcikpOwogCiAjaWYgU09VUF9D
SEVDS19WRVJTSU9OKDIsIDYxLCA5MCkKLSAgICBhdXRvKiBuZXR3b3JrU3RvcmFnZVNlc3Npb24g
PSBzdG9yYWdlU2Vzc2lvblByb3ZpZGVyID8gc3RvcmFnZVNlc3Npb25Qcm92aWRlci0+c3RvcmFn
ZVNlc3Npb24oKSA6IG51bGxwdHI7Ci0gICAgaWYgKCFuZXR3b3JrU3RvcmFnZVNlc3Npb24pCisg
ICAgYXV0byogc291cFNlc3Npb24gPSBzdG9yYWdlU2Vzc2lvblByb3ZpZGVyID8gc3RvcmFnZVNl
c3Npb25Qcm92aWRlci0+c291cFNlc3Npb24oKSA6IG51bGxwdHI7CisgICAgaWYgKCFzb3VwU2Vz
c2lvbikKICAgICAgICAgcmV0dXJuIHNvY2tldDsKIAogICAgIGF1dG8gdXJpID0gdXJsVG9Tb3Vw
VVJJKHVybCk7CiAgICAgUmVmPFNvY2tldFN0cmVhbUhhbmRsZT4gcHJvdGVjdGVkU29ja2V0U3Ry
ZWFtSGFuZGxlID0gc29ja2V0LmNvcHlSZWYoKTsKLSAgICBzb3VwX3Nlc3Npb25fY29ubmVjdF9h
c3luYyhuZXR3b3JrU3RvcmFnZVNlc3Npb24tPnNvdXBOZXR3b3JrU2Vzc2lvbigpLnNvdXBTZXNz
aW9uKCksIHVyaS5nZXQoKSwgc29ja2V0LT5tX2NhbmNlbGxhYmxlLmdldCgpLAorICAgIHNvdXBf
c2Vzc2lvbl9jb25uZWN0X2FzeW5jKHNvdXBTZXNzaW9uLCB1cmkuZ2V0KCksIHNvY2tldC0+bV9j
YW5jZWxsYWJsZS5nZXQoKSwKICAgICAgICAgdXJsLnByb3RvY29sSXMoIndzcyIpID8gcmVpbnRl
cnByZXRfY2FzdDxTb3VwU2Vzc2lvbkNvbm5lY3RQcm9ncmVzc0NhbGxiYWNrPihjb25uZWN0UHJv
Z3Jlc3NDYWxsYmFjaykgOiBudWxscHRyLAogICAgICAgICByZWludGVycHJldF9jYXN0PEdBc3lu
Y1JlYWR5Q2FsbGJhY2s+KGNvbm5lY3RlZENhbGxiYWNrKSwgJnByb3RlY3RlZFNvY2tldFN0cmVh
bUhhbmRsZS5sZWFrUmVmKCkpOwogI2Vsc2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvc291cC9Tb3VwTmV0d29ya1Nlc3Npb24uY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1NvdXBOZXR3b3JrU2Vzc2lvbi5jcHAKaW5kZXggNjEy
NGY0NmMyNGQuLjYxODk5OGYyNTFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL3NvdXAvU291cE5ldHdvcmtTZXNzaW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvU291cE5ldHdvcmtTZXNzaW9uLmNwcApAQCAtMTA2LDcg
KzEwNiw3IEBAIHN0YXRpYyBBbGxvd2VkQ2VydGlmaWNhdGVzTWFwJiBhbGxvd2VkQ2VydGlmaWNh
dGVzKCkKICAgICByZXR1cm4gY2VydGlmaWNhdGVzOwogfQogCi1Tb3VwTmV0d29ya1Nlc3Npb246
OlNvdXBOZXR3b3JrU2Vzc2lvbihQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIFNvdXBDb29raWVK
YXIqIGNvb2tpZUphcikKK1NvdXBOZXR3b3JrU2Vzc2lvbjo6U291cE5ldHdvcmtTZXNzaW9uKFBB
TDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKICAgICA6IG1fc291cFNlc3Npb24oYWRvcHRHUmVmKHNv
dXBfc2Vzc2lvbl9uZXcoKSkpCiB7CiAgICAgLy8gVmFsdWVzIHRha2VuIGZyb20gaHR0cDovL3d3
dy5icm93c2Vyc2NvcGUub3JnLyBmb2xsb3dpbmcKQEAgLTExNiwxOSArMTE2LDEyIEBAIFNvdXBO
ZXR3b3JrU2Vzc2lvbjo6U291cE5ldHdvcmtTZXNzaW9uKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25J
RCwgU291cENvb2tpZUphcioKICAgICBzdGF0aWMgY29uc3QgaW50IG1heENvbm5lY3Rpb25zID0g
MTc7CiAgICAgc3RhdGljIGNvbnN0IGludCBtYXhDb25uZWN0aW9uc1Blckhvc3QgPSA2OwogCi0g
ICAgR1JlZlB0cjxTb3VwQ29va2llSmFyPiBqYXIgPSBjb29raWVKYXI7Ci0gICAgaWYgKCFqYXIp
IHsKLSAgICAgICAgamFyID0gYWRvcHRHUmVmKHNvdXBfY29va2llX2phcl9uZXcoKSk7Ci0gICAg
ICAgIHNvdXBfY29va2llX2phcl9zZXRfYWNjZXB0X3BvbGljeShqYXIuZ2V0KCksIFNPVVBfQ09P
S0lFX0pBUl9BQ0NFUFRfTk9fVEhJUkRfUEFSVFkpOwotICAgIH0KLQogICAgIGdfb2JqZWN0X3Nl
dChtX3NvdXBTZXNzaW9uLmdldCgpLAogICAgICAgICBTT1VQX1NFU1NJT05fTUFYX0NPTk5TLCBt
YXhDb25uZWN0aW9ucywKICAgICAgICAgU09VUF9TRVNTSU9OX01BWF9DT05OU19QRVJfSE9TVCwg
bWF4Q29ubmVjdGlvbnNQZXJIb3N0LAogICAgICAgICBTT1VQX1NFU1NJT05fVElNRU9VVCwgMCwK
ICAgICAgICAgU09VUF9TRVNTSU9OX0lETEVfVElNRU9VVCwgMCwKICAgICAgICAgU09VUF9TRVNT
SU9OX0FERF9GRUFUVVJFX0JZX1RZUEUsIFNPVVBfVFlQRV9DT05URU5UX1NOSUZGRVIsCi0gICAg
ICAgIFNPVVBfU0VTU0lPTl9BRERfRkVBVFVSRSwgamFyLmdldCgpLAogICAgICAgICBudWxscHRy
KTsKIAogICAgIHNldHVwQ3VzdG9tUHJvdG9jb2xzKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvU291cE5ldHdvcmtTZXNzaW9uLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvU291cE5ldHdvcmtTZXNzaW9uLmgKaW5kZXgg
ZmZiZDQ5YTc2MmEuLjVlMzJkMzFhZDRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL3NvdXAvU291cE5ldHdvcmtTZXNzaW9uLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1NvdXBOZXR3b3JrU2Vzc2lvbi5oCkBAIC00OSw3ICs0
OSw3IEBAIHN0cnVjdCBTb3VwTmV0d29ya1Byb3h5U2V0dGluZ3M7CiBjbGFzcyBTb3VwTmV0d29y
a1Nlc3Npb24gewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFNvdXBOZXR3b3JrU2Vzc2lvbik7
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIGV4cGxpY2l0IFNvdXBOZXR3
b3JrU2Vzc2lvbihQQUw6OlNlc3Npb25JRCA9IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lv
bklEKCksIFNvdXBDb29raWVKYXIqID0gbnVsbHB0cik7CisgICAgZXhwbGljaXQgU291cE5ldHdv
cmtTZXNzaW9uKFBBTDo6U2Vzc2lvbklEKTsKICAgICB+U291cE5ldHdvcmtTZXNzaW9uKCk7CiAK
ICAgICBTb3VwU2Vzc2lvbiogc291cFNlc3Npb24oKSBjb25zdCB7IHJldHVybiBtX3NvdXBTZXNz
aW9uLmdldCgpOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDdiN2M4ZDk2YTdlLi41YTY2OGUxNWVhMyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VM
b2cKQEAgLTEsMyArMSw1OCBAQAorMjAxOS0wNy0yNCAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxj
Z2FyY2lhQGlnYWxpYS5jb20+CisKKyAgICAgICAgW1NPVVBdIE1vdmUgU291cE5ldHdvcmtTZXNz
aW9uIG93bmVyc2hpcCBmcm9tIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiB0byBOZXR3b3JrU2Vzc2lv
bgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAwMDc2
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTmV0d29y
a1N0b3JhZ2VTZXNzaW9uIHNob3VsZCBvbmx5IG93biB0aGUgY29va2llIGphciwgc2luY2UgaXQn
cyB0aGUgb25seSB0aGluZyBpdCBoYW5kbGVzIGZyb20gdGhlIHNlc3Npb24uCisKKyAgICAgICAg
KiBOZXR3b3JrUHJvY2Vzcy9Db29raWVzL3NvdXAvV2ViQ29va2llTWFuYWdlclNvdXAuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyOjpzZXRDb29raWVQZXJzaXN0ZW50U3Rv
cmFnZSk6IFVzZSB0aGUgbmV0d29yayBzZXNzaW9uIGluc3RlYWQgb2YgdGhlIHN0b3JhZ2Ugc2Vz
c2lvbgorICAgICAgICB0byBzZXQgdGhlIHBlcmlzdGVudCBjb29raWUgc3RvcmFnZS4KKyAgICAg
ICAgKiBOZXR3b3JrUHJvY2Vzcy9DdXN0b21Qcm90b2NvbHMvc291cC9MZWdhY3lDdXN0b21Qcm90
b2NvbE1hbmFnZXJTb3VwLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TGVnYWN5Q3VzdG9tUHJvdG9j
b2xNYW5hZ2VyOjpyZWdpc3RlclNjaGVtZSk6IEl0ZXJhdGUgbmV0d29yayBzZXNzaW9ucyBpbnN0
ZWFkIG9mIHN0b3JhZ2Ugc2Vzc2lvbnMgdG8KKyAgICAgICAgYWNjZXNzIHRoZSBTb3VwTmV0d29y
a1Nlc3Npb24uCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dl
YlByb2Nlc3MuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJv
Y2Vzczo6cmVzb3VyY2VMb2FkU3RhdGlzdGljc1VwZGF0ZWQpOiBVc2UKKyAgICAgICAgTmV0d29y
a1Byb2Nlc3M6OmZvckVhY2hOZXR3b3JrU2Vzc2lvbigpIHRvIGl0ZXJhdGUgbmV0d29yayBzZXNz
aW9ucy4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHA6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpsb3dNZW1vcnlIYW5kbGVyKTogRGl0dG8uCisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpmb3JFYWNoTmV0d29ya1Nlc3Npb24pOiBB
ZGRlZCB0byBpdGVyYXRlIG5ldHdvcmsgc2Vzc2lvbnMgaW50ZWFkIG9mIGV4cG9zaW5nIHRoZSBt
YXAKKyAgICAgICAgdGhhdCBpcyBhbHdheXMgdXNlZCB0byBpdGVyYXRlIHRoZSBzZXNzaW9ucy4K
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OnN3aXRjaFRvTmV3VGVzdGluZ1Nlc3Np
b24pOiBVc2UgdGhlIG5ldyBOZXR3b3JrU3RvcmFnZVNlc3Npb24gY29uc3RydWN0b3IgQVBJLgor
ICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6ZW5zdXJlU2Vzc2lvbik6IERpdHRvLgor
ICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6ZGVzdHJveVNlc3Npb24pOiBBbGxvdyB0
byBkZXN0cm95IHRoZSBkZWZhdWx0IHNlc3Npb24gZm9yIHNvdXAgYmFzZWQgcG9ydHMuIFRoaXMg
aXMKKyAgICAgICAgb25seSBjYWxsZWQgcmlnaHQgYmVmb3JlIHByb2Nlc3MgZXhpdCB0byBlbnN1
cmUgd2UgZG9uJ3QgbGVhayBuZXR3b3JrIHJlc291cmNlcyBsaWtlIHRoZSBjb29raWVzIGRhdGFi
YXNlLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6c2V0UmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0VuYWJsZWQpOiBVc2UgTmV0d29ya1Byb2Nlc3M6OmZvckVhY2hOZXR3b3JrU2Vzc2lv
bigpIHRvCisgICAgICAgIGl0ZXJhdGUgbmV0d29yayBzZXNzaW9ucy4KKyAgICAgICAgKFdlYktp
dDo6TmV0d29ya1Byb2Nlc3M6OmZldGNoV2Vic2l0ZURhdGEpOiBEaXR0by4KKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya1Byb2Nlc3M6OmRlbGV0ZVdlYnNpdGVEYXRhRm9yT3JpZ2lucyk6IERpdHRv
LgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6ZGVsZXRlV2Vic2l0ZURhdGFGb3JS
ZWdpc3RyYWJsZURvbWFpbnMpOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nl
c3M6OnJlZ2lzdHJhYmxlRG9tYWluc1dpdGhXZWJzaXRlRGF0YSk6IERpdHRvLgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6c2V0Q2FjaGVNb2RlbCk6IERpdHRvLgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6YWN0dWFsUHJlcGFyZVRvU3VzcGVuZCk6IERpdHRvLgor
ICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6cmVzdW1lKTogRGl0dG8uCisgICAgICAg
ICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaDoKKyAgICAgICAgKiBOZXR3b3JrUHJv
Y2Vzcy9OZXR3b3JrU3RvcmFnZVNlc3Npb25Qcm92aWRlci5oOgorICAgICAgICAqIE5ldHdvcmtQ
cm9jZXNzL2NvY29hL05ldHdvcmtQcm9jZXNzQ29jb2EubW06CisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtQcm9jZXNzOjpjbGVhckRpc2tDYWNoZSk6IERpdHRvLgorICAgICAgICAqIE5ldHdvcmtQ
cm9jZXNzL2lvcy9OZXR3b3JrUHJvY2Vzc0lPUy5tbToKKyAgICAgICAgKFdlYktpdDo6TmV0d29y
a1Byb2Nlc3M6OmNsZWFyQ2FjaGVGb3JBbGxPcmlnaW5zKTogRGl0dG8uCisgICAgICAgICogTmV0
d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrUHJvY2Vzc01haW5Tb3VwLmNwcDogRGVzdHJveSB0aGUg
ZGVmYXVsdCBzZXNzaW9uIGJlZm9yZSBwcm9jZXNzIGV4aXN0cy4KKyAgICAgICAgKiBOZXR3b3Jr
UHJvY2Vzcy9zb3VwL05ldHdvcmtQcm9jZXNzU291cC5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtQcm9jZXNzOjp1c2VyUHJlZmVycmVkTGFuZ3VhZ2VzQ2hhbmdlZCk6IEl0ZXJhdGUgbmV0
d29yayBzZXNzaW9ucyBpbnN0ZWFkIG9mIHN0b3JhZ2Ugc2Vzc2lvbnMgdG8KKyAgICAgICAgYWNj
ZXNzIHRoZSBTb3VwTmV0d29ya1Nlc3Npb24uCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9j
ZXNzOjpwbGF0Zm9ybUNyZWF0ZURlZmF1bHRTdG9yYWdlU2Vzc2lvbiBjb25zdCk6IFVzZSB0aGUg
bmV3IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiBjb25zdHJ1Y3RvciBBUEkuCisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtQcm9jZXNzOjpjbGVhckRpc2tDYWNoZSk6IFVzZSBOZXR3b3JrUHJvY2Vzczo6
Zm9yRWFjaE5ldHdvcmtTZXNzaW9uKCkgdG8gaXRlcmF0ZSBuZXR3b3JrIHNlc3Npb25zLgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6c2V0TmV0d29ya1Byb3h5U2V0dGluZ3MpOiBJ
dGVyYXRlIG5ldHdvcmsgc2Vzc2lvbnMgaW5zdGVhZCBvZiBzdG9yYWdlIHNlc3Npb25zIHRvCisg
ICAgICAgIGFjY2VzcyB0aGUgU291cE5ldHdvcmtTZXNzaW9uLgorICAgICAgICAqIE5ldHdvcmtQ
cm9jZXNzL3NvdXAvTmV0d29ya1Nlc3Npb25Tb3VwLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0
d29ya1Nlc3Npb25Tb3VwOjpOZXR3b3JrU2Vzc2lvblNvdXApOiBDcmVhdGUgdGhlIFNvdXBOZXR3
b3JrU2Vzc2lvbiBhbmQgc2V0dXAgY29va2llcy4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Nl
c3Npb25Tb3VwOjpzb3VwU2Vzc2lvbiBjb25zdCk6IFJldHVybiB0aGUgU291cFNlc3Npb24gb2Yg
U291cE5ldHdvcmtTZXNzaW9uLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrU2Vzc2lvblNvdXA6
OnNldENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlKTogU2V0dXAgYSBuZXcgY29va2llIGphci4KKyAg
ICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtTZXNzaW9uU291cC5oOgorCiAyMDE5
LTA3LTIzICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgQ3Jhc2gg
dW5kZXIgV2ViS2l0OldURjo6RGV0YWlsOjpDYWxsYWJsZVdyYXBwZXI8V2ViS2l0OjpSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnVwZGF0ZUNvb2tpZUJsb2NraW5nKFdURjo6Q29t
cGxldGlvbkhhbmRsZXI8dm9pZCAoKT4mJik6OiRfMzI6Om9wZXJhdG9yKCkoKTo6J2xhbWJkYSco
KSwgdm9pZD46OmNhbGwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
Q29va2llcy9zb3VwL1dlYkNvb2tpZU1hbmFnZXJTb3VwLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvQ29va2llcy9zb3VwL1dlYkNvb2tpZU1hbmFnZXJTb3VwLmNwcAppbmRleCAy
OGNhYjIwODk0YS4uNGQ5N2RhN2I2OWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvQ29va2llcy9zb3VwL1dlYkNvb2tpZU1hbmFnZXJTb3VwLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvc291cC9XZWJDb29raWVNYW5hZ2VyU291
cC5jcHAKQEAgLTI3LDEyICsyNywxMSBAQAogI2luY2x1ZGUgIldlYkNvb2tpZU1hbmFnZXIuaCIK
IAogI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzLmgiCisjaW5jbHVkZSAiTmV0d29ya1Nlc3Npb25T
b3VwLmgiCiAjaW5jbHVkZSAiU291cENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlVHlwZS5oIgogI2lu
Y2x1ZGUgPFdlYkNvcmUvTmV0d29ya1N0b3JhZ2VTZXNzaW9uLmg+CiAjaW5jbHVkZSA8V2ViQ29y
ZS9Tb3VwTmV0d29ya1Nlc3Npb24uaD4KICNpbmNsdWRlIDxsaWJzb3VwL3NvdXAuaD4KLSNpbmNs
dWRlIDx3dGYvZ2xpYi9HUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgog
CiBuYW1lc3BhY2UgV2ViS2l0IHsKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwpAQCAtNzcsMjIg
Kzc2LDggQEAgSFRUUENvb2tpZUFjY2VwdFBvbGljeSBXZWJDb29raWVNYW5hZ2VyOjpwbGF0Zm9y
bUdldEhUVFBDb29raWVBY2NlcHRQb2xpY3koKQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXI6OnNl
dENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3Qg
U3RyaW5nJiBzdG9yYWdlUGF0aCwgU291cENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlVHlwZSBzdG9y
YWdlVHlwZSkKIHsKLSAgICBHUmVmUHRyPFNvdXBDb29raWVKYXI+IGphcjsKLSAgICBzd2l0Y2gg
KHN0b3JhZ2VUeXBlKSB7Ci0gICAgY2FzZSBTb3VwQ29va2llUGVyc2lzdGVudFN0b3JhZ2VUeXBl
OjpUZXh0OgotICAgICAgICBqYXIgPSBhZG9wdEdSZWYoc291cF9jb29raWVfamFyX3RleHRfbmV3
KHN0b3JhZ2VQYXRoLnV0ZjgoKS5kYXRhKCksIEZBTFNFKSk7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgU291cENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlVHlwZTo6U1FMaXRlOgotICAgICAgICBq
YXIgPSBhZG9wdEdSZWYoc291cF9jb29raWVfamFyX2RiX25ldyhzdG9yYWdlUGF0aC51dGY4KCku
ZGF0YSgpLCBGQUxTRSkpOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci0KLSAgICBpZiAoYXV0byogc3RvcmFnZVNlc3Np
b24gPSBtX3Byb2Nlc3Muc3RvcmFnZVNlc3Npb24oc2Vzc2lvbklEKSkgewotICAgICAgICBzb3Vw
X2Nvb2tpZV9qYXJfc2V0X2FjY2VwdF9wb2xpY3koamFyLmdldCgpLCBzb3VwX2Nvb2tpZV9qYXJf
Z2V0X2FjY2VwdF9wb2xpY3koc3RvcmFnZVNlc3Npb24tPmNvb2tpZVN0b3JhZ2UoKSkpOwotICAg
ICAgICBzdG9yYWdlU2Vzc2lvbi0+c2V0Q29va2llU3RvcmFnZShqYXIuZ2V0KCkpOwotICAgIH0K
KyAgICBpZiAoYXV0byogbmV0d29ya1Nlc3Npb24gPSBtX3Byb2Nlc3MubmV0d29ya1Nlc3Npb24o
c2Vzc2lvbklEKSkKKyAgICAgICAgc3RhdGljX2Nhc3Q8TmV0d29ya1Nlc3Npb25Tb3VwJj4oKm5l
dHdvcmtTZXNzaW9uKS5zZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShzdG9yYWdlUGF0aCwgc3Rv
cmFnZVR5cGUpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ3VzdG9tUHJvdG9jb2xzL3NvdXAvTGVnYWN5Q3VzdG9t
UHJvdG9jb2xNYW5hZ2VyU291cC5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0N1
c3RvbVByb3RvY29scy9zb3VwL0xlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclNvdXAuY3BwCmlu
ZGV4IDUxMWRkMDRkNjY3Li4yYzRkMmZmOTQ4MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9DdXN0b21Qcm90b2NvbHMvc291cC9MZWdhY3lDdXN0b21Qcm90b2NvbE1h
bmFnZXJTb3VwLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0N1c3RvbVBy
b3RvY29scy9zb3VwL0xlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclNvdXAuY3BwCkBAIC0yMyw4
ICsyMyw4IEBACiAjaW5jbHVkZSAiRGF0YVJlZmVyZW5jZS5oIgogI2luY2x1ZGUgIkxlZ2FjeUN1
c3RvbVByb3RvY29sTWFuYWdlck1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3Mu
aCIKKyNpbmNsdWRlICJOZXR3b3JrU2Vzc2lvblNvdXAuaCIKICNpbmNsdWRlICJXZWJLaXRTb3Vw
UmVxdWVzdElucHV0U3RyZWFtLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9OZXR3b3JrU3RvcmFnZVNl
c3Npb24uaD4KICNpbmNsdWRlIDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+CiAjaW5jbHVkZSA8
V2ViQ29yZS9SZXNvdXJjZUVycm9yLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZVJlcXVl
c3QuaD4KQEAgLTEwMiw4ICsxMDIsOCBAQCB2b2lkIExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdl
cjo6cmVnaXN0ZXJTY2hlbWUoY29uc3QgU3RyaW5nJiBzY2hlbWUpCiAgICAgYXV0byogZ2VuZXJp
Y1JlcXVlc3RDbGFzcyA9IHN0YXRpY19jYXN0PFNvdXBSZXF1ZXN0Q2xhc3MqPihnX3R5cGVfY2xh
c3NfcGVlayhXRUJLSVRfVFlQRV9TT1VQX1JFUVVFU1RfR0VORVJJQykpOwogICAgIEFTU0VSVChn
ZW5lcmljUmVxdWVzdENsYXNzKTsKICAgICBnZW5lcmljUmVxdWVzdENsYXNzLT5zY2hlbWVzID0g
Y29uc3RfY2FzdDxjb25zdCBjaGFyKio+KHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcioqPihtX3JlZ2lz
dGVyZWRTY2hlbWVzLT5wZGF0YSkpOwotICAgIGxhc3RDcmVhdGVkTmV0d29ya1Byb2Nlc3MoKS0+
Zm9yRWFjaE5ldHdvcmtTdG9yYWdlU2Vzc2lvbihbXShjb25zdCBhdXRvJiBzZXNzaW9uKSB7Ci0g
ICAgICAgIHNlc3Npb24uc291cE5ldHdvcmtTZXNzaW9uKCkuc2V0dXBDdXN0b21Qcm90b2NvbHMo
KTsKKyAgICBsYXN0Q3JlYXRlZE5ldHdvcmtQcm9jZXNzKCktPmZvckVhY2hOZXR3b3JrU2Vzc2lv
bihbXShjb25zdCBhdXRvJiBzZXNzaW9uKSB7CisgICAgICAgIHN0YXRpY19jYXN0PGNvbnN0IE5l
dHdvcmtTZXNzaW9uU291cCY+KHNlc3Npb24pLnNvdXBOZXR3b3JrU2Vzc2lvbigpLnNldHVwQ3Vz
dG9tUHJvdG9jb2xzKCk7CiAgICAgfSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwIGIvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHAK
aW5kZXggMmQ1MGUyZjQzZGIuLmFlNGRmOTc4MDc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNz
LmNwcApAQCAtNjg5LDEzICs2ODksMTMgQEAgdm9pZCBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJv
Y2Vzczo6bG9nU3VicmVzb3VyY2VSZWRpcmVjdChQQUw6OlNlc3Npb25JRCBzZXNzaW8KIAogdm9p
ZCBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6cmVzb3VyY2VMb2FkU3RhdGlzdGljc1Vw
ZGF0ZWQoVmVjdG9yPFdlYkNvcmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3M+JiYgc3RhdGlzdGlj
cykKIHsKLSAgICBmb3IgKGF1dG8mIG5ldHdvcmtTZXNzaW9uIDogbmV0d29ya1Byb2Nlc3MoKS5u
ZXR3b3JrU2Vzc2lvbnMoKS52YWx1ZXMoKSkgewotICAgICAgICBpZiAobmV0d29ya1Nlc3Npb24t
PnNlc3Npb25JRCgpLmlzRXBoZW1lcmFsKCkpCisgICAgbmV0d29ya1Byb2Nlc3MoKS5mb3JFYWNo
TmV0d29ya1Nlc3Npb24oW3N0YXRpc3RpY3MgPSBXVEZNb3ZlKHN0YXRpc3RpY3MpIF0oTmV0d29y
a1Nlc3Npb24mIG5ldHdvcmtTZXNzaW9uKSBtdXRhYmxlIHsKKyAgICAgICAgaWYgKG5ldHdvcmtT
ZXNzaW9uLnNlc3Npb25JRCgpLmlzRXBoZW1lcmFsKCkpCiAgICAgICAgICAgICBjb250aW51ZTsK
IAotICAgICAgICBpZiAoYXV0byogcmVzb3VyY2VMb2FkU3RhdGlzdGljcyA9IG5ldHdvcmtTZXNz
aW9uLT5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzKCkpCisgICAgICAgIGlmIChhdXRvKiByZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzID0gbmV0d29ya1Nlc3Npb24ucmVzb3VyY2VMb2FkU3RhdGlzdGljcygp
KQogICAgICAgICAgICAgcmVzb3VyY2VMb2FkU3RhdGlzdGljcy0+cmVzb3VyY2VMb2FkU3RhdGlz
dGljc1VwZGF0ZWQoV1RGTW92ZShzdGF0aXN0aWNzKSk7Ci0gICAgfQorICAgIH0pOwogfQogCiB2
b2lkIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpoYXNTdG9yYWdlQWNjZXNzKFBBTDo6
U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgUmVnaXN0cmFibGVEb21haW4mIHN1YkZyYW1lRG9t
YWluLCBjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgdG9wRnJhbWVEb21haW4sIHVpbnQ2NF90IGZy
YW1lSUQsIFBhZ2VJZGVudGlmaWVyIHBhZ2VJRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29s
KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9OZXR3b3JrUHJvY2Vzcy5jcHAKaW5kZXggMjRiZDcxNjk5YWEuLmU1NDgwYzUzZDYyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcApAQCAt
OTksNiArOTksNyBAQAogI2VuZGlmCiAKICNpZiBVU0UoU09VUCkKKyNpbmNsdWRlICJOZXR3b3Jr
U2Vzc2lvblNvdXAuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0ROU1Jlc29sdmVRdWV1ZVNvdXAuaD4K
ICNpbmNsdWRlIDxXZWJDb3JlL1NvdXBOZXR3b3JrU2Vzc2lvbi5oPgogI2VuZGlmCkBAIC0xNTAs
OCArMTUxLDggQEAgTmV0d29ya1Byb2Nlc3M6Ok5ldHdvcmtQcm9jZXNzKEF1eGlsaWFyeVByb2Nl
c3NJbml0aWFsaXphdGlvblBhcmFtZXRlcnMmJiBwYXJhbWUKICNlbmRpZgogCiAjaWYgVVNFKFNP
VVApCi0gICAgRE5TUmVzb2x2ZVF1ZXVlU291cDo6c2V0R2xvYmFsRGVmYXVsdE5ldHdvcmtTdG9y
YWdlU2Vzc2lvbkFjY2Vzc29yKFt0aGlzXSgpIC0+IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgewot
ICAgICAgICByZXR1cm4gZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCk7CisgICAgRE5TUmVzb2x2ZVF1
ZXVlU291cDo6c2V0R2xvYmFsRGVmYXVsdFNvdXBTZXNzaW9uQWNjZXNzb3IoW3RoaXNdKCkgLT4g
U291cFNlc3Npb24qIHsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PE5ldHdvcmtTZXNzaW9u
U291cCY+KCpuZXR3b3JrU2Vzc2lvbihQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgp
KSkuc291cFNlc3Npb24oKTsKICAgICB9KTsKICNlbmRpZgogCkBAIC0yNzMsOCArMjc0LDkgQEAg
dm9pZCBOZXR3b3JrUHJvY2Vzczo6bG93TWVtb3J5SGFuZGxlcihDcml0aWNhbCBjcml0aWNhbCkK
IAogICAgIFdURjo6cmVsZWFzZUZhc3RNYWxsb2NGcmVlTWVtb3J5KCk7CiAKLSAgICBmb3IgKGF1
dG8mIG5ldHdvcmtTZXNzaW9uIDogbV9uZXR3b3JrU2Vzc2lvbnMudmFsdWVzKCkpCi0gICAgICAg
IG5ldHdvcmtTZXNzaW9uLmdldCgpLmNsZWFyUHJlZmV0Y2hDYWNoZSgpOworICAgIGZvckVhY2hO
ZXR3b3JrU2Vzc2lvbihbXShOZXR3b3JrU2Vzc2lvbiYgbmV0d29ya1Nlc3Npb24pIHsKKyAgICAg
ICAgbmV0d29ya1Nlc3Npb24uY2xlYXJQcmVmZXRjaENhY2hlKCk7CisgICAgfSk7CiB9CiAKIHZv
aWQgTmV0d29ya1Byb2Nlc3M6OmluaXRpYWxpemVOZXR3b3JrUHJvY2VzcyhOZXR3b3JrUHJvY2Vz
c0NyZWF0aW9uUGFyYW1ldGVycyYmIHBhcmFtZXRlcnMpCkBAIC00ODUsNiArNDg3LDEyIEBAIHZv
aWQgTmV0d29ya1Byb2Nlc3M6OmluaXRpYWxpemVTdG9yYWdlUXVvdGEoY29uc3QgV2Vic2l0ZURh
dGFTdG9yZVBhcmFtZXRlcnMmIHBhCiAgICAgbWFuYWdlcnMuc2V0RGVmYXVsdFF1b3RhcyhwYXJh
bWV0ZXJzLnBlck9yaWdpblN0b3JhZ2VRdW90YSwgcGFyYW1ldGVycy5wZXJUaGlyZFBhcnR5T3Jp
Z2luU3RvcmFnZVF1b3RhKTsKIH0KIAordm9pZCBOZXR3b3JrUHJvY2Vzczo6Zm9yRWFjaE5ldHdv
cmtTZXNzaW9uKGNvbnN0IEZ1bmN0aW9uPHZvaWQoTmV0d29ya1Nlc3Npb24mKT4mIGZ1bmN0b3Ip
Cit7CisgICAgZm9yIChhdXRvJiBzZXNzaW9uIDogbV9uZXR3b3JrU2Vzc2lvbnMudmFsdWVzKCkp
CisgICAgICAgIGZ1bmN0b3IoKnNlc3Npb24ucHRyKCkpOworfQorCiB2b2lkIE5ldHdvcmtQcm9j
ZXNzOjpzd2l0Y2hUb05ld1Rlc3RpbmdTZXNzaW9uKCkKIHsKICNpZiBQTEFURk9STShDT0NPQSkK
QEAgLTUwMSw5ICs1MDksNyBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpzd2l0Y2hUb05ld1Rlc3Rp
bmdTZXNzaW9uKCkKICAgICB9CiAKICAgICBtX2RlZmF1bHROZXR3b3JrU3RvcmFnZVNlc3Npb24g
PSBzdGQ6Om1ha2VfdW5pcXVlPFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4oUEFMOjpT
ZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSwgV1RGTW92ZShzZXNzaW9uKSwgV1RGTW92ZShj
b29raWVTdG9yYWdlKSk7Ci0jZWxpZiBVU0UoU09VUCkKLSAgICBtX2RlZmF1bHROZXR3b3JrU3Rv
cmFnZVNlc3Npb24gPSBzdGQ6Om1ha2VfdW5pcXVlPFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vz
c2lvbj4oUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSwgc3RkOjptYWtlX3VuaXF1
ZTxXZWJDb3JlOjpTb3VwTmV0d29ya1Nlc3Npb24+KCkpOwotI2VsaWYgVVNFKENVUkwpCisjZWxp
ZiBVU0UoQ1VSTCkgfHwgVVNFKFNPVVApCiAgICAgbV9kZWZhdWx0TmV0d29ya1N0b3JhZ2VTZXNz
aW9uID0gc3RkOjptYWtlX3VuaXF1ZTxXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24+KFBB
TDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpOwogI2VuZGlmCiB9CkBAIC01MzUsOSAr
NTQxLDcgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6ZW5zdXJlU2Vzc2lvbihjb25zdCBQQUw6OlNl
c3Npb25JRCYgc2Vzc2lvbklELCBjb25zdCBTdHJpbmcKICAgICB9CiAKICAgICBhZGRSZXN1bHQu
aXRlcmF0b3ItPnZhbHVlID0gc3RkOjptYWtlX3VuaXF1ZTxOZXR3b3JrU3RvcmFnZVNlc3Npb24+
KHNlc3Npb25JRCwgV1RGTW92ZShzdG9yYWdlU2Vzc2lvbiksIFdURk1vdmUoY29va2llU3RvcmFn
ZSkpOwotI2VsaWYgVVNFKFNPVVApCi0gICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IHN0
ZDo6bWFrZV91bmlxdWU8TmV0d29ya1N0b3JhZ2VTZXNzaW9uPihzZXNzaW9uSUQsIHN0ZDo6bWFr
ZV91bmlxdWU8U291cE5ldHdvcmtTZXNzaW9uPihzZXNzaW9uSUQpKTsKLSNlbGlmIFVTRShDVVJM
KQorI2VsaWYgVVNFKENVUkwpIHx8IFVTRShTT1VQKQogICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+
dmFsdWUgPSBzdGQ6Om1ha2VfdW5pcXVlPE5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4oc2Vzc2lvbklE
KTsKICNlbmRpZgogfQpAQCAtNTkzLDcgKzU5Nyw5IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmRl
c3Ryb3lTZXNzaW9uKGNvbnN0IFBBTDo6U2Vzc2lvbklEJiBzZXNzaW9uSUQpCiAgICAgaWYgKCFz
ZXNzaW9uSUQuaXNWYWxpZCgpKQogICAgICAgICByZXR1cm47CiAKKyNpZiAhVVNFKFNPVVApCiAg
ICAgQVNTRVJUKHNlc3Npb25JRCAhPSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgp
KTsKKyNlbmRpZgogCiAgICAgaWYgKGF1dG8gc2Vzc2lvbiA9IG1fbmV0d29ya1Nlc3Npb25zLnRh
a2Uoc2Vzc2lvbklEKSkKICAgICAgICAgc2Vzc2lvbi0+Z2V0KCkuaW52YWxpZGF0ZUFuZENhbmNl
bCgpOwpAQCAtMTE0NSw4ICsxMTUxLDkgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6c2V0U2hvdWxk
Q2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwoUEFMOjpTZXMKIAogdm9p
ZCBOZXR3b3JrUHJvY2Vzczo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoYm9vbCBl
bmFibGVkKQogewotICAgIGZvciAoYXV0byYgbmV0d29ya1Nlc3Npb24gOiBtX25ldHdvcmtTZXNz
aW9ucy52YWx1ZXMoKSkKLSAgICAgICAgbmV0d29ya1Nlc3Npb24uZ2V0KCkuc2V0UmVzb3VyY2VM
b2FkU3RhdGlzdGljc0VuYWJsZWQoZW5hYmxlZCk7CisgICAgZm9yRWFjaE5ldHdvcmtTZXNzaW9u
KFtlbmFibGVkXShOZXR3b3JrU2Vzc2lvbiYgbmV0d29ya1Nlc3Npb24pIHsKKyAgICAgICAgbmV0
d29ya1Nlc3Npb24uc2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoZW5hYmxlZCk7Cisg
ICAgfSk7CiB9CiAKIHZvaWQgTmV0d29ya1Byb2Nlc3M6OnNldFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEZWJ1Z01vZGUoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBib29sIGRlYnVnTW9kZSwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTM1OCwxMSAr
MTM2NSwxMSBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpmZXRjaFdlYnNpdGVEYXRhKFBBTDo6U2Vz
c2lvbklEIHNlc3Npb25JRCwgT3B0aW9uU2V0PFdlYnNpdAogICAgIH0KICNlbmRpZgogICAgIGlm
ICh3ZWJzaXRlRGF0YVR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6RGlza0NhY2hlKSkg
ewotICAgICAgICBmb3IgKGF1dG8mIHNlc3Npb24gOiBuZXR3b3JrU2Vzc2lvbnMoKS52YWx1ZXMo
KSkgewotICAgICAgICAgICAgZmV0Y2hEaXNrQ2FjaGVFbnRyaWVzKHNlc3Npb24tPmNhY2hlKCks
IHNlc3Npb25JRCwgZmV0Y2hPcHRpb25zLCBbY2FsbGJhY2tBZ2dyZWdhdG9yID0gV1RGTW92ZShj
YWxsYmFja0FnZ3JlZ2F0b3IpXShhdXRvIGVudHJpZXMpIG11dGFibGUgeworICAgICAgICBmb3JF
YWNoTmV0d29ya1Nlc3Npb24oW3Nlc3Npb25JRCwgZmV0Y2hPcHRpb25zLCBjYWxsYmFja0FnZ3Jl
Z2F0b3IgPSBXVEZNb3ZlKGNhbGxiYWNrQWdncmVnYXRvcildKE5ldHdvcmtTZXNzaW9uJiBzZXNz
aW9uKSBtdXRhYmxlIHsKKyAgICAgICAgICAgIGZldGNoRGlza0NhY2hlRW50cmllcyhzZXNzaW9u
LmNhY2hlKCksIHNlc3Npb25JRCwgZmV0Y2hPcHRpb25zLCBbY2FsbGJhY2tBZ2dyZWdhdG9yID0g
V1RGTW92ZShjYWxsYmFja0FnZ3JlZ2F0b3IpXShhdXRvIGVudHJpZXMpIG11dGFibGUgewogICAg
ICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+bV93ZWJzaXRlRGF0YS5lbnRyaWVzLmFw
cGVuZFZlY3RvcihlbnRyaWVzKTsKICAgICAgICAgICAgIH0pOwotICAgICAgICB9CisgICAgICAg
IH0pOwogICAgIH0KIH0KIApAQCAtMTUxOCw4ICsxNTI1LDkgQEAgdm9pZCBOZXR3b3JrUHJvY2Vz
czo6ZGVsZXRlV2Vic2l0ZURhdGFGb3JPcmlnaW5zKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwg
T3B0aW8KICNlbmRpZgogCiAgICAgaWYgKHdlYnNpdGVEYXRhVHlwZXMuY29udGFpbnMoV2Vic2l0
ZURhdGFUeXBlOjpEaXNrQ2FjaGUpICYmICFzZXNzaW9uSUQuaXNFcGhlbWVyYWwoKSkgewotICAg
ICAgICBmb3IgKGF1dG8mIHNlc3Npb24gOiBuZXR3b3JrU2Vzc2lvbnMoKS52YWx1ZXMoKSkKLSAg
ICAgICAgICAgIGNsZWFyRGlza0NhY2hlRW50cmllcyhzZXNzaW9uLT5jYWNoZSgpLCBvcmlnaW5E
YXRhcywgW2NsZWFyVGFza3NIYW5kbGVyID0gV1RGTW92ZShjbGVhclRhc2tzSGFuZGxlcildIHsg
fSk7CisgICAgICAgIGZvckVhY2hOZXR3b3JrU2Vzc2lvbihbb3JpZ2luRGF0YXMsIGNsZWFyVGFz
a3NIYW5kbGVyID0gV1RGTW92ZShjbGVhclRhc2tzSGFuZGxlcildKE5ldHdvcmtTZXNzaW9uJiBz
ZXNzaW9uKSBtdXRhYmxlIHsKKyAgICAgICAgICAgIGNsZWFyRGlza0NhY2hlRW50cmllcyhzZXNz
aW9uLmNhY2hlKCksIG9yaWdpbkRhdGFzLCBbY2xlYXJUYXNrc0hhbmRsZXIgPSBXVEZNb3ZlKGNs
ZWFyVGFza3NIYW5kbGVyKV0geyB9KTsKKyAgICAgICAgfSk7CiAgICAgfQogCiAgICAgaWYgKHdl
YnNpdGVEYXRhVHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpDcmVkZW50aWFscykpIHsK
QEAgLTE3NTMsOCArMTc2MSw4IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmRlbGV0ZVdlYnNpdGVE
YXRhRm9yUmVnaXN0cmFibGVEb21haW5zKFBBTDo6U2Vzc2lvbklEIHNlc3NpCiAjZW5kaWYKIAog
ICAgIGlmICh3ZWJzaXRlRGF0YVR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6RGlza0Nh
Y2hlKSkgewotICAgICAgICBmb3IgKGF1dG8mIHNlc3Npb24gOiBuZXR3b3JrU2Vzc2lvbnMoKS52
YWx1ZXMoKSkgewotICAgICAgICAgICAgZmV0Y2hEaXNrQ2FjaGVFbnRyaWVzKHNlc3Npb24tPmNh
Y2hlKCksIHNlc3Npb25JRCwgZmV0Y2hPcHRpb25zLCBbZG9tYWluc1RvRGVsZXRlQWxsQnV0Q29v
a2llc0ZvciwgY2FsbGJhY2tBZ2dyZWdhdG9yID0gY2FsbGJhY2tBZ2dyZWdhdG9yLmNvcHlSZWYo
KSwgc2Vzc2lvbiA9IHNlc3Npb24uY29weVJlZigpXShhdXRvIGVudHJpZXMpIG11dGFibGUgewor
ICAgICAgICBmb3JFYWNoTmV0d29ya1Nlc3Npb24oW3Nlc3Npb25JRCwgZmV0Y2hPcHRpb25zLCAm
ZG9tYWluc1RvRGVsZXRlQWxsQnV0Q29va2llc0ZvciwgJmNhbGxiYWNrQWdncmVnYXRvcl0oTmV0
d29ya1Nlc3Npb24mIHNlc3Npb24pIHsKKyAgICAgICAgICAgIGZldGNoRGlza0NhY2hlRW50cmll
cyhzZXNzaW9uLmNhY2hlKCksIHNlc3Npb25JRCwgZmV0Y2hPcHRpb25zLCBbZG9tYWluc1RvRGVs
ZXRlQWxsQnV0Q29va2llc0ZvciwgY2FsbGJhY2tBZ2dyZWdhdG9yID0gY2FsbGJhY2tBZ2dyZWdh
dG9yLmNvcHlSZWYoKSwgc2Vzc2lvbiA9IHNlc3Npb24uY29weVJlZigpXShhdXRvIGVudHJpZXMp
IG11dGFibGUgewogCiAgICAgICAgICAgICAgICAgVmVjdG9yPFNlY3VyaXR5T3JpZ2luRGF0YT4g
ZW50cmllc1RvRGVsZXRlOwogICAgICAgICAgICAgICAgIGZvciAoYXV0byYgZW50cnkgOiBlbnRy
aWVzKSB7CkBAIC0xNzY1LDcgKzE3NzMsNyBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpkZWxldGVX
ZWJzaXRlRGF0YUZvclJlZ2lzdHJhYmxlRG9tYWlucyhQQUw6OlNlc3Npb25JRCBzZXNzaQogICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBjbGVhckRpc2tDYWNoZUVudHJpZXMoc2Vz
c2lvbi0+Y2FjaGUoKSwgZW50cmllc1RvRGVsZXRlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yID0gY2Fs
bGJhY2tBZ2dyZWdhdG9yLmNvcHlSZWYoKV0geyB9KTsKICAgICAgICAgICAgIH0pOwotICAgICAg
ICB9CisgICAgICAgIH0pOwogICAgIH0KIAogICAgIGF1dG8gZGF0YVR5cGVzRm9yVUlQcm9jZXNz
ID0gV2Vic2l0ZURhdGE6OmZpbHRlcih3ZWJzaXRlRGF0YVR5cGVzLCBXZWJzaXRlRGF0YVByb2Nl
c3NUeXBlOjpVSSk7CkBAIC0xODg3LDExICsxODk1LDExIEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6
OnJlZ2lzdHJhYmxlRG9tYWluc1dpdGhXZWJzaXRlRGF0YShQQUw6OlNlc3Npb25JRCBzZXNzaW9u
SUQsCiAjZW5kaWYKICAgICAKICAgICBpZiAod2Vic2l0ZURhdGFUeXBlcy5jb250YWlucyhXZWJz
aXRlRGF0YVR5cGU6OkRpc2tDYWNoZSkpIHsKLSAgICAgICAgZm9yIChhdXRvJiBzZXNzaW9uIDog
bmV0d29ya1Nlc3Npb25zKCkudmFsdWVzKCkpIHsKLSAgICAgICAgICAgIGZldGNoRGlza0NhY2hl
RW50cmllcyhzZXNzaW9uLT5jYWNoZSgpLCBzZXNzaW9uSUQsIGZldGNoT3B0aW9ucywgW2NhbGxi
YWNrQWdncmVnYXRvciA9IGNhbGxiYWNrQWdncmVnYXRvci5jb3B5UmVmKCldKGF1dG8gZW50cmll
cykgbXV0YWJsZSB7CisgICAgICAgIGZvckVhY2hOZXR3b3JrU2Vzc2lvbihbc2Vzc2lvbklELCBm
ZXRjaE9wdGlvbnMsICZjYWxsYmFja0FnZ3JlZ2F0b3JdKE5ldHdvcmtTZXNzaW9uJiBzZXNzaW9u
KSB7CisgICAgICAgICAgICBmZXRjaERpc2tDYWNoZUVudHJpZXMoc2Vzc2lvbi5jYWNoZSgpLCBz
ZXNzaW9uSUQsIGZldGNoT3B0aW9ucywgW2NhbGxiYWNrQWdncmVnYXRvciA9IGNhbGxiYWNrQWdn
cmVnYXRvci5jb3B5UmVmKCldKGF1dG8gZW50cmllcykgbXV0YWJsZSB7CiAgICAgICAgICAgICAg
ICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5tX3dlYnNpdGVEYXRhLmVudHJpZXMuYXBwZW5kVmVjdG9y
KGVudHJpZXMpOwogICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0KKyAgICAgICAgfSk7CiAgICAg
fQogfQogI2VuZGlmIC8vIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCkBAIC0xOTgz
LDExICsxOTkxLDExIEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OnNldENhY2hlTW9kZWwoQ2FjaGVN
b2RlbCBjYWNoZU1vZGVsKQogICAgICAgICBkaXNrRnJlZVNpemUgLz0gS0IgKiAxMDAwOwogICAg
ICAgICBjYWxjdWxhdGVVUkxDYWNoZVNpemVzKGNhY2hlTW9kZWwsIGRpc2tGcmVlU2l6ZSwgdXJs
Q2FjaGVNZW1vcnlDYXBhY2l0eSwgdXJsQ2FjaGVEaXNrQ2FwYWNpdHkpOwogICAgIH0KLSAgICAK
LSAgICBmb3IgKGF1dG8mIHNlc3Npb24gOiBuZXR3b3JrU2Vzc2lvbnMoKS52YWx1ZXMoKSkgewot
ICAgICAgICBpZiAoYXV0byogY2FjaGUgPSBzZXNzaW9uLT5jYWNoZSgpKQorCisgICAgZm9yRWFj
aE5ldHdvcmtTZXNzaW9uKFt1cmxDYWNoZURpc2tDYXBhY2l0eV0oTmV0d29ya1Nlc3Npb24mIHNl
c3Npb24pIHsKKyAgICAgICAgaWYgKGF1dG8qIGNhY2hlID0gc2Vzc2lvbi5jYWNoZSgpKQogICAg
ICAgICAgICAgY2FjaGUtPnNldENhcGFjaXR5KHVybENhY2hlRGlza0NhcGFjaXR5KTsKLSAgICB9
CisgICAgfSk7CiB9CiAKIHZvaWQgTmV0d29ya1Byb2Nlc3M6OnNldENhbkhhbmRsZUhUVFBTU2Vy
dmVyVHJ1c3RFdmFsdWF0aW9uKGJvb2wgdmFsdWUpCkBAIC0yMDgxLDggKzIwODksOSBAQCB2b2lk
IE5ldHdvcmtQcm9jZXNzOjphY3R1YWxQcmVwYXJlVG9TdXNwZW5kKFNob3VsZEFja25vd2xlZGdl
V2hlblJlYWR5VG9TdXNwZW5kCiAgICAgfQogI2VuZGlmCiAKLSAgICBmb3IgKGF1dG8mIHNlc3Np
b24gOiBtX25ldHdvcmtTZXNzaW9ucykKLSAgICAgICAgc2Vzc2lvbi52YWx1ZS0+c3RvcmFnZU1h
bmFnZXIoKS5zdXNwZW5kKFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgZm9yRWFjaE5l
dHdvcmtTZXNzaW9uKFsmY2FsbGJhY2tBZ2dyZWdhdG9yXShOZXR3b3JrU2Vzc2lvbiYgc2Vzc2lv
bikgeworICAgICAgICBzZXNzaW9uLnN0b3JhZ2VNYW5hZ2VyKCkuc3VzcGVuZChbY2FsbGJhY2tB
Z2dyZWdhdG9yXSB7IH0pOworICAgIH0pOwogfQogCiB2b2lkIE5ldHdvcmtQcm9jZXNzOjpwcm9j
ZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5KCkKQEAgLTIxNTIsOCArMjE2MSw5IEBAIHZvaWQgTmV0
d29ya1Byb2Nlc3M6OnJlc3VtZSgpCiAgICAgICAgIHNlcnZlci0+cmVzdW1lKCk7CiAjZW5kaWYK
IAotICAgIGZvciAoYXV0byYgc2Vzc2lvbiA6IG1fbmV0d29ya1Nlc3Npb25zKQotICAgICAgICBz
ZXNzaW9uLnZhbHVlLT5zdG9yYWdlTWFuYWdlcigpLnJlc3VtZSgpOworICAgIGZvckVhY2hOZXR3
b3JrU2Vzc2lvbihbXShOZXR3b3JrU2Vzc2lvbiYgc2Vzc2lvbikgeworICAgICAgICBzZXNzaW9u
LnN0b3JhZ2VNYW5hZ2VyKCkucmVzdW1lKCk7CisgICAgfSk7CiB9CiAKIHZvaWQgTmV0d29ya1By
b2Nlc3M6OnByZWZldGNoRE5TKGNvbnN0IFN0cmluZyYgaG9zdG5hbWUpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmggYi9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmgKaW5kZXggNjlmM2Q0ZjY3OTIuLjA2
MjZiNTZmZWUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdv
cmtQcm9jZXNzLmgKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJv
Y2Vzcy5oCkBAIC0xNjYsOCArMTY2LDcgQEAgcHVibGljOgogICAgIE5ldHdvcmtTZXNzaW9uKiBu
ZXR3b3JrU2Vzc2lvbkJ5Q29ubmVjdGlvbihJUEM6OkNvbm5lY3Rpb24mKSBjb25zdDsKICAgICB2
b2lkIGRlc3Ryb3lTZXNzaW9uKGNvbnN0IFBBTDo6U2Vzc2lvbklEJik7CiAKLSAgICAvLyBOZWVk
ZWQgZm9yIHRlc3QgaW5mcmFzdHJ1Y3R1cmUKLSAgICBIYXNoTWFwPFBBTDo6U2Vzc2lvbklELCBS
ZWY8TmV0d29ya1Nlc3Npb24+PiYgbmV0d29ya1Nlc3Npb25zKCkgeyByZXR1cm4gbV9uZXR3b3Jr
U2Vzc2lvbnM7IH0KKyAgICB2b2lkIGZvckVhY2hOZXR3b3JrU2Vzc2lvbihjb25zdCBGdW5jdGlv
bjx2b2lkKE5ldHdvcmtTZXNzaW9uJik+Jik7CiAKICAgICB2b2lkIGZvckVhY2hOZXR3b3JrU3Rv
cmFnZVNlc3Npb24oY29uc3QgRnVuY3Rpb248dm9pZChXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNl
c3Npb24mKT4mKTsKICAgICBXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24qIHN0b3JhZ2VT
ZXNzaW9uKGNvbnN0IFBBTDo6U2Vzc2lvbklEJikgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtTdG9yYWdlU2Vzc2lvblByb3ZpZGVyLmggYi9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtTdG9yYWdlU2Vzc2lvblByb3ZpZGVy
LmgKaW5kZXggOGFhOTIwNDRiMjAuLjk1YmIxZDRkMzhiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtTdG9yYWdlU2Vzc2lvblByb3ZpZGVyLmgKKysrIGIv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrU3RvcmFnZVNlc3Npb25Qcm92aWRl
ci5oCkBAIC0zMSw2ICszMSwxMCBAQAogI2luY2x1ZGUgPHBhbC9TZXNzaW9uSUQuaD4KICNpbmNs
dWRlIDx3dGYvV2Vha1B0ci5oPgogCisjaWYgVVNFKFNPVVApCisjaW5jbHVkZSAiTmV0d29ya1Nl
c3Npb25Tb3VwLmgiCisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIE5ldHdv
cmtTdG9yYWdlU2Vzc2lvblByb3ZpZGVyIGZpbmFsIDogcHVibGljIFdlYkNvcmU6OlN0b3JhZ2VT
ZXNzaW9uUHJvdmlkZXIgewpAQCAtNDksNiArNTMsMTkgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAgICAgfQogCisjaWYgVVNFKFNPVVApCisgICAgU291cFNlc3Npb24qIHNv
dXBTZXNzaW9uKCkgY29uc3QgZmluYWwKKyAgICB7CisgICAgICAgIGlmICghbV9uZXR3b3JrUHJv
Y2VzcykKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgICAgIGlmIChhdXRvKiBz
ZXNzaW9uID0gbV9uZXR3b3JrUHJvY2Vzcy0+bmV0d29ya1Nlc3Npb24obV9zZXNzaW9uSUQpKQor
ICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PE5ldHdvcmtTZXNzaW9uU291cCY+KCpzZXNz
aW9uKS5zb3VwU2Vzc2lvbigpOworCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKyNl
bmRpZgorCiAgICAgV2Vha1B0cjxOZXR3b3JrUHJvY2Vzcz4gbV9uZXR3b3JrUHJvY2VzczsKICAg
ICBQQUw6OlNlc3Npb25JRCBtX3Nlc3Npb25JRDsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtQcm9jZXNzQ29jb2EubW0gYi9Tb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtQcm9jZXNzQ29jb2EubW0KaW5kZXgg
MDdiOTYzM2JkNDguLjA3N2YxNmZhNjUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL2NvY29hL05ldHdvcmtQcm9jZXNzQ29jb2EubW0KKysrIGIvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrUHJvY2Vzc0NvY29hLm1tCkBAIC0xOTksMTAg
KzE5OSwxMCBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpjbGVhckRpc2tDYWNoZShXYWxsVGltZSBt
b2RpZmllZFNpbmNlLCBDb21wbGV0aW9uSGFuZGxlcjx2bwogICAgIGF1dG8gZ3JvdXAgPSBtX2Ns
ZWFyQ2FjaGVEaXNwYXRjaEdyb3VwOwogICAgIGRpc3BhdGNoX2dyb3VwX2FzeW5jKGdyb3VwLCBk
aXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBtYWtlQmxvY2tQdHIoW3RoaXMsIHByb3RlY3RlZFRo
aXMgPSBtYWtlUmVmKCp0aGlzKSwgbW9kaWZpZWRTaW5jZSwgY29tcGxldGlvbkhhbmRsZXIgPSBX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKCkgbXV0YWJsZSB7CiAgICAgICAgIGF1dG8gYWdn
cmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKLSAgICAgICAgZm9yIChhdXRvJiBzZXNzaW9uIDogbmV0d29ya1Nlc3Npb25zKCku
dmFsdWVzKCkpIHsKLSAgICAgICAgICAgIGlmIChhdXRvKiBjYWNoZSA9IHNlc3Npb24tPmNhY2hl
KCkpCisgICAgICAgIGZvckVhY2hOZXR3b3JrU2Vzc2lvbihbbW9kaWZpZWRTaW5jZSwgJmFnZ3Jl
Z2F0b3JdKE5ldHdvcmtTZXNzaW9uJiBzZXNzaW9uKSB7CisgICAgICAgICAgICBpZiAoYXV0byog
Y2FjaGUgPSBzZXNzaW9uLmNhY2hlKCkpCiAgICAgICAgICAgICAgICAgY2FjaGUtPmNsZWFyKG1v
ZGlmaWVkU2luY2UsIFthZ2dyZWdhdG9yID0gYWdncmVnYXRvci5jb3B5UmVmKCldICgpIHsgfSk7
Ci0gICAgICAgIH0KKyAgICAgICAgfSk7CiAgICAgfSkuZ2V0KCkpOwogfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2lvcy9OZXR3b3JrUHJvY2Vzc0lPUy5tbSBi
L1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvaW9zL05ldHdvcmtQcm9jZXNzSU9TLm1tCmlu
ZGV4IDI5ZGQwODc3YmQ0Li5mZWFkZGJjZDFkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9pb3MvTmV0d29ya1Byb2Nlc3NJT1MubW0KKysrIGIvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9pb3MvTmV0d29ya1Byb2Nlc3NJT1MubW0KQEAgLTc4LDEwICs3OCwx
MCBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpjbGVhckNhY2hlRm9yQWxsT3JpZ2lucyh1aW50MzJf
dCBjYWNoZXNUb0NsZWFyKQogICAgIFJlc291cmNlQ2FjaGVzVG9DbGVhciByZXNvdXJjZUNhY2hl
c1RvQ2xlYXIgPSBzdGF0aWNfY2FzdDxSZXNvdXJjZUNhY2hlc1RvQ2xlYXI+KGNhY2hlc1RvQ2xl
YXIpOwogICAgIGlmIChyZXNvdXJjZUNhY2hlc1RvQ2xlYXIgPT0gSW5NZW1vcnlSZXNvdXJjZUNh
Y2hlc09ubHkpCiAgICAgICAgIHJldHVybjsKLSAgICBmb3IgKGF1dG8mIHNlc3Npb24gOiBuZXR3
b3JrU2Vzc2lvbnMoKS52YWx1ZXMoKSkgewotICAgICAgICBpZiAoYXV0byogY2FjaGUgPSBzZXNz
aW9uLT5jYWNoZSgpKQorICAgIGZvckVhY2hOZXR3b3JrU2Vzc2lvbihbXShOZXR3b3JrU2Vzc2lv
biYgc2Vzc2lvbikgeworICAgICAgICBpZiAoYXV0byogY2FjaGUgPSBzZXNzaW9uLmNhY2hlKCkp
CiAgICAgICAgICAgICBjYWNoZS0+Y2xlYXIoKTsKLSAgICB9CisgICAgfSk7CiB9CiAKIHZvaWQg
TmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKGNvbnN0IE5l
dHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtQcm9jZXNzTWFpblNvdXAu
Y3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtQcm9jZXNzTWFp
blNvdXAuY3BwCmluZGV4IGY3ZDE0NTEwNGNlLi5hZDBiZGFkNWRjMCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtQcm9jZXNzTWFpblNvdXAuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrUHJvY2Vzc01h
aW5Tb3VwLmNwcApAQCAtNDEsNyArNDEsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICAvLyBO
ZWVkZWQgdG8gZGVzdHJveSB0aGUgU291cFNlc3Npb24gYW5kIFNvdXBDb29raWVKYXIsIGUuZy4g
dG8gYXZvaWQKICAgICAgICAgLy8gbGVha2luZyBTUUxpdGUgdGVtcG9yYXJ5IGpvdXJuYWxpbmcg
ZmlsZXMuCi0gICAgICAgIGdsb2JhbE5ldHdvcmtQcm9jZXNzLT5kZWZhdWx0U3RvcmFnZVNlc3Np
b24oKS5jbGVhclNvdXBOZXR3b3JrU2Vzc2lvbigpOworICAgICAgICBnbG9iYWxOZXR3b3JrUHJv
Y2Vzcy0+ZGVzdHJveVNlc3Npb24oUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSk7
CiAgICAgfQogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9z
b3VwL05ldHdvcmtQcm9jZXNzU291cC5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L3NvdXAvTmV0d29ya1Byb2Nlc3NTb3VwLmNwcAppbmRleCA3Yzc4YjBiMzBjMi4uODNjMmYyOGVh
NWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3Jr
UHJvY2Vzc1NvdXAuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc291cC9O
ZXR3b3JrUHJvY2Vzc1NvdXAuY3BwCkBAIC0yOSw3ICsyOSw3IEBACiAKICNpbmNsdWRlICJOZXR3
b3JrQ2FjaGUuaCIKICNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5o
IgotI2luY2x1ZGUgIk5ldHdvcmtTZXNzaW9uLmgiCisjaW5jbHVkZSAiTmV0d29ya1Nlc3Npb25T
b3VwLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VDYWNoZXNUb0NsZWFyLmgiCiAjaW5jbHVkZSAiV2Vi
Q29va2llTWFuYWdlci5oIgogI2luY2x1ZGUgIldlYktpdENhY2hlZFJlc29sdmVyLmgiCkBAIC05
OSw4ICs5OSw4IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OnVzZXJQcmVmZXJyZWRMYW5ndWFnZXND
aGFuZ2VkKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBsYW5ndWFnCiB7CiAgICAgYXV0byBhY2NlcHRM
YW5ndWFnZXMgPSBidWlsZEFjY2VwdExhbmd1YWdlcyhsYW5ndWFnZXMpOwogICAgIFNvdXBOZXR3
b3JrU2Vzc2lvbjo6c2V0SW5pdGlhbEFjY2VwdExhbmd1YWdlcyhhY2NlcHRMYW5ndWFnZXMpOwot
ICAgIGZvckVhY2hOZXR3b3JrU3RvcmFnZVNlc3Npb24oWyZhY2NlcHRMYW5ndWFnZXNdKGNvbnN0
IGF1dG8mIHNlc3Npb24pIHsKLSAgICAgICAgc2Vzc2lvbi5zb3VwTmV0d29ya1Nlc3Npb24oKS5z
ZXRBY2NlcHRMYW5ndWFnZXMoYWNjZXB0TGFuZ3VhZ2VzKTsKKyAgICBmb3JFYWNoTmV0d29ya1Nl
c3Npb24oWyZhY2NlcHRMYW5ndWFnZXNdKGNvbnN0IGF1dG8mIHNlc3Npb24pIHsKKyAgICAgICAg
c3RhdGljX2Nhc3Q8Y29uc3QgTmV0d29ya1Nlc3Npb25Tb3VwJj4oc2Vzc2lvbikuc291cE5ldHdv
cmtTZXNzaW9uKCkuc2V0QWNjZXB0TGFuZ3VhZ2VzKGFjY2VwdExhbmd1YWdlcyk7CiAgICAgfSk7
CiB9CiAKQEAgLTEzMyw3ICsxMzMsNyBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUlu
aXRpYWxpemVOZXR3b3JrUHJvY2Vzcyhjb25zdCBOZXR3b3JrUHJvY2Vzc0NyZWF0aQogCiBzdGQ6
OnVuaXF1ZV9wdHI8V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uPiBOZXR3b3JrUHJvY2Vz
czo6cGxhdGZvcm1DcmVhdGVEZWZhdWx0U3RvcmFnZVNlc3Npb24oKSBjb25zdAogewotICAgIHJl
dHVybiBzdGQ6Om1ha2VfdW5pcXVlPFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4oUEFM
OjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSwgc3RkOjptYWtlX3VuaXF1ZTxTb3VwTmV0
d29ya1Nlc3Npb24+KFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpKTsKKyAgICBy
ZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24+KFBB
TDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpOwogfQogCiB2b2lkIE5ldHdvcmtQcm9j
ZXNzOjpzZXRJZ25vcmVUTFNFcnJvcnMoYm9vbCBpZ25vcmVUTFNFcnJvcnMpCkBAIC0xNTcsMTAg
KzE1NywxMCBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpjbGVhckNhY2hlRm9yQWxsT3JpZ2lucyh1
aW50MzJfdCBjYWNoZXNUb0NsZWFyKQogdm9pZCBOZXR3b3JrUHJvY2Vzczo6Y2xlYXJEaXNrQ2Fj
aGUoV2FsbFRpbWUgbW9kaWZpZWRTaW5jZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNv
bXBsZXRpb25IYW5kbGVyKQogewogICAgIGF1dG8gYWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVn
YXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICBmb3IgKGF1dG8m
IHNlc3Npb24gOiBuZXR3b3JrU2Vzc2lvbnMoKS52YWx1ZXMoKSkgewotICAgICAgICBpZiAoYXV0
byogY2FjaGUgPSBzZXNzaW9uLT5jYWNoZSgpKQorICAgIGZvckVhY2hOZXR3b3JrU2Vzc2lvbihb
bW9kaWZpZWRTaW5jZSwgJmFnZ3JlZ2F0b3JdKE5ldHdvcmtTZXNzaW9uJiBzZXNzaW9uKSB7Cisg
ICAgICAgIGlmIChhdXRvKiBjYWNoZSA9IHNlc3Npb24uY2FjaGUoKSkKICAgICAgICAgICAgIGNh
Y2hlLT5jbGVhcihtb2RpZmllZFNpbmNlLCBbYWdncmVnYXRvciA9IGFnZ3JlZ2F0b3IuY29weVJl
ZigpXSAoKSB7IH0pOwotICAgIH0KKyAgICB9KTsKIH0KIAogdm9pZCBOZXR3b3JrUHJvY2Vzczo6
cGxhdGZvcm1UZXJtaW5hdGUoKQpAQCAtMTcxLDggKzE3MSw4IEBAIHZvaWQgTmV0d29ya1Byb2Nl
c3M6OnBsYXRmb3JtVGVybWluYXRlKCkKIHZvaWQgTmV0d29ya1Byb2Nlc3M6OnNldE5ldHdvcmtQ
cm94eVNldHRpbmdzKGNvbnN0IFNvdXBOZXR3b3JrUHJveHlTZXR0aW5ncyYgc2V0dGluZ3MpCiB7
CiAgICAgU291cE5ldHdvcmtTZXNzaW9uOjpzZXRQcm94eVNldHRpbmdzKHNldHRpbmdzKTsKLSAg
ICBmb3JFYWNoTmV0d29ya1N0b3JhZ2VTZXNzaW9uKFtdKGNvbnN0IGF1dG8mIHNlc3Npb24pIHsK
LSAgICAgICAgc2Vzc2lvbi5zb3VwTmV0d29ya1Nlc3Npb24oKS5zZXR1cFByb3h5KCk7CisgICAg
Zm9yRWFjaE5ldHdvcmtTZXNzaW9uKFtdKGNvbnN0IGF1dG8mIHNlc3Npb24pIHsKKyAgICAgICAg
c3RhdGljX2Nhc3Q8Y29uc3QgTmV0d29ya1Nlc3Npb25Tb3VwJj4oc2Vzc2lvbikuc291cE5ldHdv
cmtTZXNzaW9uKCkuc2V0dXBQcm94eSgpOwogICAgIH0pOwogfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Nlc3Npb25Tb3VwLmNwcCBiL1Nv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrU2Vzc2lvblNvdXAuY3BwCmlu
ZGV4IGY3ZGVjNzA0OGQxLi43MzU1MjU3YmVkYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtTZXNzaW9uU291cC5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtTZXNzaW9uU291cC5jcHAKQEAgLTQxLDEz
ICs0MSwxOSBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogTmV0d29ya1Nlc3Npb25Tb3Vw
OjpOZXR3b3JrU2Vzc2lvblNvdXAoTmV0d29ya1Byb2Nlc3MmIG5ldHdvcmtQcm9jZXNzLCBOZXR3
b3JrU2Vzc2lvbkNyZWF0aW9uUGFyYW1ldGVycyYmIHBhcmFtZXRlcnMpCiAgICAgOiBOZXR3b3Jr
U2Vzc2lvbihuZXR3b3JrUHJvY2VzcywgcGFyYW1ldGVycykKKyAgICAsIG1fbmV0d29ya1Nlc3Np
b24oc3RkOjptYWtlX3VuaXF1ZTxTb3VwTmV0d29ya1Nlc3Npb24+KG1fc2Vzc2lvbklEKSkKIHsK
LSAgICBuZXR3b3JrU3RvcmFnZVNlc3Npb24oKS0+c2V0Q29va2llT2JzZXJ2ZXJIYW5kbGVyKFt0
aGlzXSB7Ci0gICAgICAgIHRoaXMtPm5ldHdvcmtQcm9jZXNzKCkuc3VwcGxlbWVudDxXZWJDb29r
aWVNYW5hZ2VyPigpLT5ub3RpZnlDb29raWVzRGlkQ2hhbmdlKG1fc2Vzc2lvbklEKTsKLSAgICB9
KTsKKyAgICBhdXRvKiBzdG9yYWdlU2Vzc2lvbiA9IG5ldHdvcmtTdG9yYWdlU2Vzc2lvbigpOwor
ICAgIEFTU0VSVChzdG9yYWdlU2Vzc2lvbik7CiAKICAgICBpZiAoIXBhcmFtZXRlcnMuY29va2ll
UGVyc2lzdGVudFN0b3JhZ2VQYXRoLmlzRW1wdHkoKSkKLSAgICAgICAgdGhpcy0+bmV0d29ya1By
b2Nlc3MoKS5zdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXI+KCktPnNldENvb2tpZVBlcnNpc3Rl
bnRTdG9yYWdlKG1fc2Vzc2lvbklELCBwYXJhbWV0ZXJzLmNvb2tpZVBlcnNpc3RlbnRTdG9yYWdl
UGF0aCwgcGFyYW1ldGVycy5jb29raWVQZXJzaXN0ZW50U3RvcmFnZVR5cGUpOworICAgICAgICBz
ZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShwYXJhbWV0ZXJzLmNvb2tpZVBlcnNpc3RlbnRTdG9y
YWdlUGF0aCwgcGFyYW1ldGVycy5jb29raWVQZXJzaXN0ZW50U3RvcmFnZVR5cGUpOworICAgIGVs
c2UKKyAgICAgICAgbV9uZXR3b3JrU2Vzc2lvbi0+c2V0Q29va2llSmFyKHN0b3JhZ2VTZXNzaW9u
LT5jb29raWVTdG9yYWdlKCkpOworCisgICAgc3RvcmFnZVNlc3Npb24tPnNldENvb2tpZU9ic2Vy
dmVySGFuZGxlcihbdGhpc10geworICAgICAgICB0aGlzLT5uZXR3b3JrUHJvY2VzcygpLnN1cHBs
ZW1lbnQ8V2ViQ29va2llTWFuYWdlcj4oKS0+bm90aWZ5Q29va2llc0RpZENoYW5nZShtX3Nlc3Np
b25JRCk7CisgICAgfSk7CiB9CiAKIE5ldHdvcmtTZXNzaW9uU291cDo6fk5ldHdvcmtTZXNzaW9u
U291cCgpCkBAIC01OCw3ICs2NCwzMSBAQCBOZXR3b3JrU2Vzc2lvblNvdXA6On5OZXR3b3JrU2Vz
c2lvblNvdXAoKQogCiBTb3VwU2Vzc2lvbiogTmV0d29ya1Nlc3Npb25Tb3VwOjpzb3VwU2Vzc2lv
bigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG5ldHdvcmtTdG9yYWdlU2Vzc2lvbigpLT5zb3VwTmV0
d29ya1Nlc3Npb24oKS5zb3VwU2Vzc2lvbigpOworICAgIHJldHVybiBtX25ldHdvcmtTZXNzaW9u
LT5zb3VwU2Vzc2lvbigpOworfQorCit2b2lkIE5ldHdvcmtTZXNzaW9uU291cDo6c2V0Q29va2ll
UGVyc2lzdGVudFN0b3JhZ2UoY29uc3QgU3RyaW5nJiBzdG9yYWdlUGF0aCwgU291cENvb2tpZVBl
cnNpc3RlbnRTdG9yYWdlVHlwZSBzdG9yYWdlVHlwZSkKK3sKKyAgICBhdXRvKiBzdG9yYWdlU2Vz
c2lvbiA9IG5ldHdvcmtTdG9yYWdlU2Vzc2lvbigpOworICAgIGlmICghc3RvcmFnZVNlc3Npb24p
CisgICAgICAgIHJldHVybjsKKworICAgIEdSZWZQdHI8U291cENvb2tpZUphcj4gamFyOworICAg
IHN3aXRjaCAoc3RvcmFnZVR5cGUpIHsKKyAgICBjYXNlIFNvdXBDb29raWVQZXJzaXN0ZW50U3Rv
cmFnZVR5cGU6OlRleHQ6CisgICAgICAgIGphciA9IGFkb3B0R1JlZihzb3VwX2Nvb2tpZV9qYXJf
dGV4dF9uZXcoc3RvcmFnZVBhdGgudXRmOCgpLmRhdGEoKSwgRkFMU0UpKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBTb3VwQ29va2llUGVyc2lzdGVudFN0b3JhZ2VUeXBlOjpTUUxpdGU6Cisg
ICAgICAgIGphciA9IGFkb3B0R1JlZihzb3VwX2Nvb2tpZV9qYXJfZGJfbmV3KHN0b3JhZ2VQYXRo
LnV0ZjgoKS5kYXRhKCksIEZBTFNFKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6Cisg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIHNvdXBfY29va2llX2ph
cl9zZXRfYWNjZXB0X3BvbGljeShqYXIuZ2V0KCksIHNvdXBfY29va2llX2phcl9nZXRfYWNjZXB0
X3BvbGljeShzdG9yYWdlU2Vzc2lvbi0+Y29va2llU3RvcmFnZSgpKSk7CisgICAgc3RvcmFnZVNl
c3Npb24tPnNldENvb2tpZVN0b3JhZ2UoV1RGTW92ZShqYXIpKTsKKworICAgIG1fbmV0d29ya1Nl
c3Npb24tPnNldENvb2tpZUphcihzdG9yYWdlU2Vzc2lvbi0+Y29va2llU3RvcmFnZSgpKTsKIH0K
IAogdm9pZCBOZXR3b3JrU2Vzc2lvblNvdXA6OmNsZWFyQ3JlZGVudGlhbHMoKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtTZXNzaW9uU291cC5o
IGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtTZXNzaW9uU291cC5o
CmluZGV4IGMzMTMwNTY4MjYyLi5kZjQzOTE4YzA3YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtTZXNzaW9uU291cC5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrU2Vzc2lvblNvdXAuaApAQCAtMjYsOSAr
MjYsMTQgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiTmV0d29ya1Nlc3Npb24uaCIKKyNp
bmNsdWRlICJTb3VwQ29va2llUGVyc2lzdGVudFN0b3JhZ2VUeXBlLmgiCiAKIHR5cGVkZWYgc3Ry
dWN0IF9Tb3VwU2Vzc2lvbiBTb3VwU2Vzc2lvbjsKIAorbmFtZXNwYWNlIFdlYkNvcmUgeworY2xh
c3MgU291cE5ldHdvcmtTZXNzaW9uOworfQorCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3Mg
TmV0d29ya1NvY2tldENoYW5uZWw7CkBAIC00MywxNCArNDgsMTkgQEAgcHVibGljOgogICAgIH0K
ICAgICB+TmV0d29ya1Nlc3Npb25Tb3VwKCk7CiAKKyAgICBXZWJDb3JlOjpTb3VwTmV0d29ya1Nl
c3Npb24mIHNvdXBOZXR3b3JrU2Vzc2lvbigpIGNvbnN0IHsgcmV0dXJuICptX25ldHdvcmtTZXNz
aW9uOyB9CiAgICAgU291cFNlc3Npb24qIHNvdXBTZXNzaW9uKCkgY29uc3Q7CiAKKyAgICB2b2lk
IHNldENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlKGNvbnN0IFN0cmluZyYgc3RvcmFnZVBhdGgsIFNv
dXBDb29raWVQZXJzaXN0ZW50U3RvcmFnZVR5cGUpOworCiBwcml2YXRlOgogICAgIE5ldHdvcmtT
ZXNzaW9uU291cChOZXR3b3JrUHJvY2VzcyYsIE5ldHdvcmtTZXNzaW9uQ3JlYXRpb25QYXJhbWV0
ZXJzJiYpOwogCiAgICAgc3RkOjp1bmlxdWVfcHRyPFdlYlNvY2tldFRhc2s+IGNyZWF0ZVdlYlNv
Y2tldFRhc2soTmV0d29ya1NvY2tldENoYW5uZWwmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJl
cXVlc3QmLCBjb25zdCBTdHJpbmcmIHByb3RvY29sKSBvdmVycmlkZTsKIAogICAgIHZvaWQgY2xl
YXJDcmVkZW50aWFscygpIG92ZXJyaWRlOworCisgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6
OlNvdXBOZXR3b3JrU2Vzc2lvbj4gbV9uZXR3b3JrU2Vzc2lvbjsKIH07CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYktpdAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>374775</attachid>
            <date>2019-07-24 07:47:51 -0700</date>
            <delta_ts>2019-07-24 07:59:45 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>wk2-soup-session-rework.diff</filename>
            <type>text/plain</type>
            <size>45461</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBlN2M1OGE3Yzc2Ni4uMmVlM2EzMTI0YzUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzNSBAQAorMjAxOS0wNy0yNCAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGln
YWxpYS5jb20+CisKKyAgICAgICAgW1NPVVBdIE1vdmUgU291cE5ldHdvcmtTZXNzaW9uIG93bmVy
c2hpcCBmcm9tIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiB0byBOZXR3b3JrU2Vzc2lvbgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAwMDc2CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVtb3ZlIHRoZSBTb3Vw
TmV0d29ya1Nlc3Npb24gZnJvbSBOZXR3b3JrU3RvcmFnZVNlc3Npb24uCisKKyAgICAgICAgKiBw
bGF0Zm9ybS9uZXR3b3JrL05ldHdvcmtTdG9yYWdlU2Vzc2lvbi5oOgorICAgICAgICAoV2ViQ29y
ZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpjb29raWVTdG9yYWdlIGNvbnN0KTogUmV0dXJuIHRo
ZSBjb29raWUgamFyLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvU3RvcmFnZVNlc3Npb25Q
cm92aWRlci5oOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVNlc3Npb25Qcm92aWRlcjo6c291
cFNlc3Npb24gY29uc3QpOiBUZW1wb3JhcnkgYWRkIHRoaXMgdmlydHVhbCBtZXRob2QgdGhhdCBp
cyByZXF1aXJlZCBieQorICAgICAgICBTb2NrZXRTdHJlYW1IYW5kbGVJbXBsU291cC4gSXQgd2ls
bCBiZSByZW1vdmVkIG9uY2Ugd2Ugc3dpdGNoIHRvIGxpYnNvdXAgV2ViU29ja2V0cyBBUEkgc29v
bi4KKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvRE5TUmVzb2x2ZVF1ZXVlU291cC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpnbG9iYWxEZWZhdWx0U291cFNlc3Npb25BY2Nlc3Nvcik6
IFJld29yayB0aGUgYWNjZXNzb3IgdG8gcmV0dXJuIHRoZSBTb3VwU2Vzc2lvbiBkaXJlY3RseSBz
aW5jZQorICAgICAgICB0aGF0J3Mgd2hhdCB3ZSByZWFsbHkgd2FudC4KKyAgICAgICAgKFdlYkNv
cmU6OkROU1Jlc29sdmVRdWV1ZVNvdXA6OnNldEdsb2JhbERlZmF1bHRTb3VwU2Vzc2lvbkFjY2Vz
c29yKToKKyAgICAgICAgKFdlYkNvcmU6OkROU1Jlc29sdmVRdWV1ZVNvdXA6OnVwZGF0ZUlzVXNp
bmdQcm94eSk6CisgICAgICAgIChXZWJDb3JlOjpETlNSZXNvbHZlUXVldWVTb3VwOjpwbGF0Zm9y
bVJlc29sdmUpOgorICAgICAgICAoV2ViQ29yZTo6RE5TUmVzb2x2ZVF1ZXVlU291cDo6cmVzb2x2
ZSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9zb3VwL0ROU1Jlc29sdmVRdWV1ZVNvdXAu
aDoKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvTmV0d29ya1N0b3JhZ2VTZXNzaW9u
U291cC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb246Ok5ldHdv
cmtTdG9yYWdlU2Vzc2lvbik6IENyZWF0ZSBhbmQgc2V0dXAgdGhlIGRlZmF1bHQgY29va2llIGph
ci4KKyAgICAgICAgKFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6fk5ldHdvcmtTdG9y
YWdlU2Vzc2lvbik6IE9ubHkgZGlzY29ubmVjdCB0aGUgY29va2llIGphciBzaWduYWxzLgorICAg
ICAgICAoV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpzZXRDb29raWVTdG9yYWdlKTog
VXBkYXRlIHRoZSBjb29raWUgamFyLCBub3cgd2Uga25vdyBpdCdzIGFsd2F5cyBhIG5ldyBvbmUu
CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9zb3VwL1NvY2tldFN0cmVhbUhhbmRsZUltcGxT
b3VwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZUltcGw6OmNyZWF0
ZSk6IFVzZSB0aGUgbmV3IHZpcnR1YWwgbWV0aG9kIGZyb20gU3RvcmFnZVNlc3Npb25Qcm92aWRl
ciB0byBnZXQgdGhlIFNvdXBTZXNzaW9uLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvc291
cC9Tb3VwTmV0d29ya1Nlc3Npb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6U291cE5ldHdvcmtT
ZXNzaW9uOjpTb3VwTmV0d29ya1Nlc3Npb24pOiBSZW1vdmUgdGhlIFNvdXBDb29raWVKYXIgcGFy
YW1ldGVyLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvc291cC9Tb3VwTmV0d29ya1Nlc3Np
b24uaDoKKwogMjAxOS0wNy0yMyAgSnVzdGluIEZhbiAgPGp1c3Rpbl9mYW5AYXBwbGUuY29tPgog
CiAgICAgICAgIFtXZWJHUFVdIEltcGxlbWVudCBlcnJvcnMgZm9yIEdQVVJlbmRlclBpcGVsaW5l
IGNyZWF0aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL05l
dHdvcmtTdG9yYWdlU2Vzc2lvbi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9O
ZXR3b3JrU3RvcmFnZVNlc3Npb24uaAppbmRleCA1OGRhODc4OTA3Zi4uZjI4MWM1NGQ3OTYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvTmV0d29ya1N0b3JhZ2VT
ZXNzaW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9OZXR3b3JrU3Rv
cmFnZVNlc3Npb24uaApAQCAtNjUsNyArNjUsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFz
cyBDdXJsUHJveHlTZXR0aW5nczsKIGNsYXNzIE5ldHdvcmtpbmdDb250ZXh0OwogY2xhc3MgUmVz
b3VyY2VSZXF1ZXN0OwotY2xhc3MgU291cE5ldHdvcmtTZXNzaW9uOwogCiBzdHJ1Y3QgQ29va2ll
Owogc3RydWN0IENvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFByb3h5OwpAQCAtOTcsMTMgKzk2LDEx
IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCBSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3Rv
cmFnZVJlZj4gY29va2llU3RvcmFnZSgpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRp
YyB2b2lkIHNldFN0b3JhZ2VBY2Nlc3NBUElFbmFibGVkKGJvb2wpOwogI2VsaWYgVVNFKFNPVVAp
Ci0gICAgV0VCQ09SRV9FWFBPUlQgTmV0d29ya1N0b3JhZ2VTZXNzaW9uKFBBTDo6U2Vzc2lvbklE
LCBzdGQ6OnVuaXF1ZV9wdHI8U291cE5ldHdvcmtTZXNzaW9uPiYmKTsKKyAgICBXRUJDT1JFX0VY
UE9SVCBOZXR3b3JrU3RvcmFnZVNlc3Npb24oUEFMOjpTZXNzaW9uSUQpOwogICAgIH5OZXR3b3Jr
U3RvcmFnZVNlc3Npb24oKTsKIAotICAgIFNvdXBOZXR3b3JrU2Vzc2lvbiYgc291cE5ldHdvcmtT
ZXNzaW9uKCkgY29uc3Q7Ci0gICAgdm9pZCBjbGVhclNvdXBOZXR3b3JrU2Vzc2lvbigpOwotICAg
IFNvdXBDb29raWVKYXIqIGNvb2tpZVN0b3JhZ2UoKSBjb25zdDsKLSAgICB2b2lkIHNldENvb2tp
ZVN0b3JhZ2UoU291cENvb2tpZUphciopOworICAgIFNvdXBDb29raWVKYXIqIGNvb2tpZVN0b3Jh
Z2UoKSBjb25zdCB7IHJldHVybiBtX2Nvb2tpZVN0b3JhZ2UuZ2V0KCk7IH0KKyAgICB2b2lkIHNl
dENvb2tpZVN0b3JhZ2UoR1JlZlB0cjxTb3VwQ29va2llSmFyPiYmKTsKICAgICB2b2lkIHNldENv
b2tpZU9ic2VydmVySGFuZGxlcihGdW5jdGlvbjx2b2lkICgpPiYmKTsKICAgICB2b2lkIGdldENy
ZWRlbnRpYWxGcm9tUGVyc2lzdGVudFN0b3JhZ2UoY29uc3QgUHJvdGVjdGlvblNwYWNlJiwgR0Nh
bmNlbGxhYmxlKiwgRnVuY3Rpb248dm9pZCAoQ3JlZGVudGlhbCYmKT4mJiBjb21wbGV0aW9uSGFu
ZGxlcik7CiAgICAgdm9pZCBzYXZlQ3JlZGVudGlhbFRvUGVyc2lzdGVudFN0b3JhZ2UoY29uc3Qg
UHJvdGVjdGlvblNwYWNlJiwgY29uc3QgQ3JlZGVudGlhbCYpOwpAQCAtMTcxLDcgKzE2OCw3IEBA
IHByaXZhdGU6CiAjZWxpZiBVU0UoU09VUCkKICAgICBzdGF0aWMgdm9pZCBjb29raWVzRGlkQ2hh
bmdlKE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiopOwogCi0gICAgbXV0YWJsZSBzdGQ6OnVuaXF1ZV9w
dHI8U291cE5ldHdvcmtTZXNzaW9uPiBtX3Nlc3Npb247CisgICAgR1JlZlB0cjxTb3VwQ29va2ll
SmFyPiBtX2Nvb2tpZVN0b3JhZ2U7CiAgICAgRnVuY3Rpb248dm9pZCAoKT4gbV9jb29raWVPYnNl
cnZlckhhbmRsZXI7CiAjZWxpZiBVU0UoQ1VSTCkKICAgICBVbmlxdWVSZWY8Q29va2llSmFyQ3Vy
bD4gbV9jb29raWVTdG9yYWdlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9TdG9yYWdlU2Vzc2lvblByb3ZpZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL1N0b3JhZ2VTZXNzaW9uUHJvdmlkZXIuaAppbmRleCAwYzE1NTViNjZhMC4uMzgw
MTA1MDExYjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvU3Rv
cmFnZVNlc3Npb25Qcm92aWRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvU3RvcmFnZVNlc3Npb25Qcm92aWRlci5oCkBAIC0yNyw2ICsyNywxMCBAQAogCiAjaW5jbHVk
ZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CiAKKyNpZiBVU0UoU09VUCkKK3R5cGVkZWYg
c3RydWN0IF9Tb3VwU2Vzc2lvbiBTb3VwU2Vzc2lvbjsKKyNlbmRpZgorCiBuYW1lc3BhY2UgUEFM
IHsKIGNsYXNzIFNlc3Npb25JRDsKIH0KQEAgLTM5LDYgKzQzLDExIEBAIGNsYXNzIFN0b3JhZ2VT
ZXNzaW9uUHJvdmlkZXIgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8U3RvcmFnZVNlc3Np
b25Qcm92aWRlCiBwdWJsaWM6CiAgICAgdmlydHVhbCBOZXR3b3JrU3RvcmFnZVNlc3Npb24qIHN0
b3JhZ2VTZXNzaW9uKCkgY29uc3QgPSAwOwogCisjaWYgVVNFKFNPVVApCisgICAgLy8gRklYTUU6
IFRoaXMgaXMgb25seSByZXF1aXJlZCBieSBTb2NrZXRTdHJlYW1IYW5kbGVJbXBsU291cCwgcmVt
b3ZlIGl0IHdoZW4gd2Ugc3dpdGNoIHRvIGxpYnNvdXAgV2ViU29ja2V0cyBBUEkuCisgICAgdmly
dHVhbCBTb3VwU2Vzc2lvbiogc291cFNlc3Npb24oKSBjb25zdCB7IHJldHVybiBudWxscHRyOyB9
CisjZW5kaWYKKwogICAgIHZpcnR1YWwgflN0b3JhZ2VTZXNzaW9uUHJvdmlkZXIoKSB7IH0KIH07
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9ETlNS
ZXNvbHZlUXVldWVTb3VwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291
cC9ETlNSZXNvbHZlUXVldWVTb3VwLmNwcAppbmRleCBkMjM5Nzc1NDFhZi4uNGJiMzBhODcxZGUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9ETlNSZXNv
bHZlUXVldWVTb3VwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3Nv
dXAvRE5TUmVzb2x2ZVF1ZXVlU291cC5jcHAKQEAgLTI5LDggKzI5LDYgQEAKIAogI2lmIFVTRShT
T1VQKQogCi0jaW5jbHVkZSAiTmV0d29ya1N0b3JhZ2VTZXNzaW9uLmgiCi0jaW5jbHVkZSAiU291
cE5ldHdvcmtTZXNzaW9uLmgiCiAjaW5jbHVkZSA8bGlic291cC9zb3VwLmg+CiAjaW5jbHVkZSA8
d3RmL0NvbXBsZXRpb25IYW5kbGVyLmg+CiAjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uLmg+CkBAIC03
OCwyMSArNzYsMjEgQEAgc3RhdGljIHZvaWQgcHJveHlSZXNvbHZlZEZvckh0dHBzVXJpQ2FsbGJh
Y2soR09iamVjdCogc291cmNlLCBHQXN5bmNSZXN1bHQqIHJlc3UKICAgICBkaWRSZXNvbHZlUHJv
eHkoR19QUk9YWV9SRVNPTFZFUihzb3VyY2UpLCByZXN1bHQsICZpc1VzaW5nSHR0cHNQcm94eSwg
c3RhdGljX2Nhc3Q8Ym9vbCo+KHVzZXJEYXRhKSk7CiB9CiAKLUZ1bmN0aW9uPE5ldHdvcmtTdG9y
YWdlU2Vzc2lvbiYoKT4mIGdsb2JhbERlZmF1bHROZXR3b3JrU3RvcmFnZVNlc3Npb25BY2Nlc3Nv
cigpCitGdW5jdGlvbjxTb3VwU2Vzc2lvbiooKT4mIGdsb2JhbERlZmF1bHRTb3VwU2Vzc2lvbkFj
Y2Vzc29yKCkKIHsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8RnVuY3Rpb248TmV0d29ya1N0
b3JhZ2VTZXNzaW9uJigpPj4gYWNjZXNzb3I7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEZ1
bmN0aW9uPFNvdXBTZXNzaW9uKigpPj4gYWNjZXNzb3I7CiAgICAgcmV0dXJuIGFjY2Vzc29yLmdl
dCgpOwogfQogCi12b2lkIEROU1Jlc29sdmVRdWV1ZVNvdXA6OnNldEdsb2JhbERlZmF1bHROZXR3
b3JrU3RvcmFnZVNlc3Npb25BY2Nlc3NvcihGdW5jdGlvbjxOZXR3b3JrU3RvcmFnZVNlc3Npb24m
KCk+JiYgYWNjZXNzb3IpCit2b2lkIEROU1Jlc29sdmVRdWV1ZVNvdXA6OnNldEdsb2JhbERlZmF1
bHRTb3VwU2Vzc2lvbkFjY2Vzc29yKEZ1bmN0aW9uPFNvdXBTZXNzaW9uKigpPiYmIGFjY2Vzc29y
KQogewotICAgIGdsb2JhbERlZmF1bHROZXR3b3JrU3RvcmFnZVNlc3Npb25BY2Nlc3NvcigpID0g
V1RGTW92ZShhY2Nlc3Nvcik7CisgICAgZ2xvYmFsRGVmYXVsdFNvdXBTZXNzaW9uQWNjZXNzb3Io
KSA9IFdURk1vdmUoYWNjZXNzb3IpOwogfQogCiB2b2lkIEROU1Jlc29sdmVRdWV1ZVNvdXA6OnVw
ZGF0ZUlzVXNpbmdQcm94eSgpCiB7CiAgICAgR1JlZlB0cjxHUHJveHlSZXNvbHZlcj4gcmVzb2x2
ZXI7Ci0gICAgZ19vYmplY3RfZ2V0KGdsb2JhbERlZmF1bHROZXR3b3JrU3RvcmFnZVNlc3Npb25B
Y2Nlc3NvcigpKCkuc291cE5ldHdvcmtTZXNzaW9uKCkuc291cFNlc3Npb24oKSwgInByb3h5LXJl
c29sdmVyIiwgJnJlc29sdmVyLm91dFB0cigpLCBudWxscHRyKTsKKyAgICBnX29iamVjdF9nZXQo
Z2xvYmFsRGVmYXVsdFNvdXBTZXNzaW9uQWNjZXNzb3IoKSgpLCAicHJveHktcmVzb2x2ZXIiLCAm
cmVzb2x2ZXIub3V0UHRyKCksIG51bGxwdHIpOwogICAgIEFTU0VSVChyZXNvbHZlcik7CiAKICAg
ICBnX3Byb3h5X3Jlc29sdmVyX2xvb2t1cF9hc3luYyhyZXNvbHZlci5nZXQoKSwgImh0dHA6Ly9l
eGFtcGxlLmNvbS8iLCBudWxscHRyLCBwcm94eVJlc29sdmVkRm9ySHR0cFVyaUNhbGxiYWNrLCAm
bV9pc1VzaW5nUHJveHkpOwpAQCAtMTc1LDcgKzE3Myw3IEBAIHZvaWQgRE5TUmVzb2x2ZVF1ZXVl
U291cDo6cGxhdGZvcm1SZXNvbHZlKGNvbnN0IFN0cmluZyYgaG9zdG5hbWUpCiB7CiAgICAgQVNT
RVJUKGlzTWFpblRocmVhZCgpKTsKIAotICAgIHNvdXBfc2Vzc2lvbl9wcmVmZXRjaF9kbnMoZ2xv
YmFsRGVmYXVsdE5ldHdvcmtTdG9yYWdlU2Vzc2lvbkFjY2Vzc29yKCkoKS5zb3VwTmV0d29ya1Nl
c3Npb24oKS5zb3VwU2Vzc2lvbigpLCBob3N0bmFtZS51dGY4KCkuZGF0YSgpLCBudWxscHRyLCBy
ZXNvbHZlZENhbGxiYWNrLCBudWxscHRyKTsKKyAgICBzb3VwX3Nlc3Npb25fcHJlZmV0Y2hfZG5z
KGdsb2JhbERlZmF1bHRTb3VwU2Vzc2lvbkFjY2Vzc29yKCkoKSwgaG9zdG5hbWUudXRmOCgpLmRh
dGEoKSwgbnVsbHB0ciwgcmVzb2x2ZWRDYWxsYmFjaywgbnVsbHB0cik7CiB9CiAKIHZvaWQgRE5T
UmVzb2x2ZVF1ZXVlU291cDo6cmVzb2x2ZShjb25zdCBTdHJpbmcmIGhvc3RuYW1lLCB1aW50NjRf
dCBpZGVudGlmaWVyLCBETlNDb21wbGV0aW9uSGFuZGxlciYmIGNvbXBsZXRpb25IYW5kbGVyKQpA
QCAtMTg0LDcgKzE4Miw3IEBAIHZvaWQgRE5TUmVzb2x2ZVF1ZXVlU291cDo6cmVzb2x2ZShjb25z
dCBTdHJpbmcmIGhvc3RuYW1lLCB1aW50NjRfdCBpZGVudGlmaWVyLCBECiAKICAgICBhdXRvIGFk
ZHJlc3MgPSBhZG9wdEdSZWYoc291cF9hZGRyZXNzX25ldyhob3N0bmFtZS51dGY4KCkuZGF0YSgp
LCAwKSk7CiAgICAgYXV0byBjYW5jZWxsYWJsZSA9IGFkb3B0R1JlZihnX2NhbmNlbGxhYmxlX25l
dygpKTsKLSAgICBzb3VwX2FkZHJlc3NfcmVzb2x2ZV9hc3luYyhhZGRyZXNzLmdldCgpLCBzb3Vw
X3Nlc3Npb25fZ2V0X2FzeW5jX2NvbnRleHQoV2ViQ29yZTo6Z2xvYmFsRGVmYXVsdE5ldHdvcmtT
dG9yYWdlU2Vzc2lvbkFjY2Vzc29yKCkoKS5zb3VwTmV0d29ya1Nlc3Npb24oKS5zb3VwU2Vzc2lv
bigpKSwgY2FuY2VsbGFibGUuZ2V0KCksIHJlc29sdmVkV2l0aE9ic2VydmVyQ2FsbGJhY2ssIHRo
aXMpOworICAgIHNvdXBfYWRkcmVzc19yZXNvbHZlX2FzeW5jKGFkZHJlc3MuZ2V0KCksIHNvdXBf
c2Vzc2lvbl9nZXRfYXN5bmNfY29udGV4dChnbG9iYWxEZWZhdWx0U291cFNlc3Npb25BY2Nlc3Nv
cigpKCkpLCBjYW5jZWxsYWJsZS5nZXQoKSwgcmVzb2x2ZWRXaXRoT2JzZXJ2ZXJDYWxsYmFjaywg
dGhpcyk7CiAKICAgICBnX29iamVjdF9zZXRfZGF0YShHX09CSkVDVChhZGRyZXNzLmdldCgpKSwg
ImlkZW50aWZpZXIiLCBHVUlOVF9UT19QT0lOVEVSKGlkZW50aWZpZXIpKTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL0ROU1Jlc29sdmVRdWV1ZVNv
dXAuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9ETlNSZXNvbHZlUXVl
dWVTb3VwLmgKaW5kZXggNTcyMDM0ZjU0YWMuLmNlZTc5ZjkzMzMxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvRE5TUmVzb2x2ZVF1ZXVlU291cC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9ETlNSZXNvbHZlUXVldWVT
b3VwLmgKQEAgLTMwLDYgKzMwLDggQEAKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1
ZGUgPHd0Zi9nbGliL0dSZWZQdHIuaD4KIAordHlwZWRlZiBzdHJ1Y3QgX1NvdXBTZXNzaW9uIFNv
dXBTZXNzaW9uOworCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIE5ldHdvcmtTdG9yYWdl
U2Vzc2lvbjsKQEAgLTM5LDcgKzQxLDcgQEAgcHVibGljOgogICAgIHVzaW5nIENvbXBsZXRpb25B
bmRDYW5jZWxIYW5kbGVycyA9IHN0ZDo6cGFpcjxXZWJDb3JlOjpETlNDb21wbGV0aW9uSGFuZGxl
ciwgR1JlZlB0cjxHQ2FuY2VsbGFibGU+PjsKIAogICAgIEROU1Jlc29sdmVRdWV1ZVNvdXAoKSA9
IGRlZmF1bHQ7Ci0gICAgc3RhdGljIHZvaWQgc2V0R2xvYmFsRGVmYXVsdE5ldHdvcmtTdG9yYWdl
U2Vzc2lvbkFjY2Vzc29yKEZ1bmN0aW9uPE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYoKT4mJik7Cisg
ICAgc3RhdGljIHZvaWQgc2V0R2xvYmFsRGVmYXVsdFNvdXBTZXNzaW9uQWNjZXNzb3IoRnVuY3Rp
b248U291cFNlc3Npb24qKCk+JiYpOwogICAgIHZvaWQgcmVzb2x2ZShjb25zdCBTdHJpbmcmIGhv
c3RuYW1lLCB1aW50NjRfdCBpZGVudGlmaWVyLCBETlNDb21wbGV0aW9uSGFuZGxlciYmKSBmaW5h
bDsKICAgICB2b2lkIHN0b3BSZXNvbHZlKHVpbnQ2NF90IGlkZW50aWZpZXIpIGZpbmFsOwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvTmV0d29ya1N0
b3JhZ2VTZXNzaW9uU291cC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3Nv
dXAvTmV0d29ya1N0b3JhZ2VTZXNzaW9uU291cC5jcHAKaW5kZXggMDUzZjZiOTFhNjQuLmU0Yzhi
MGYxM2U2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAv
TmV0d29ya1N0b3JhZ2VTZXNzaW9uU291cC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9zb3VwL05ldHdvcmtTdG9yYWdlU2Vzc2lvblNvdXAuY3BwCkBAIC01MywzNCAr
NTMsMTcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1OZXR3b3JrU3RvcmFnZVNlc3Npb246
Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbihQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIHN0ZDo6dW5p
cXVlX3B0cjxTb3VwTmV0d29ya1Nlc3Npb24+JiYgc2Vzc2lvbikKK05ldHdvcmtTdG9yYWdlU2Vz
c2lvbjo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKICAg
ICA6IG1fc2Vzc2lvbklEKHNlc3Npb25JRCkKLSAgICAsIG1fc2Vzc2lvbihXVEZNb3ZlKHNlc3Np
b24pKQorICAgICwgbV9jb29raWVTdG9yYWdlKGFkb3B0R1JlZihzb3VwX2Nvb2tpZV9qYXJfbmV3
KCkpKQogewotICAgIEFTU0VSVChtX3Nlc3Npb24tPmNvb2tpZUphcigpKTsKLSAgICBnX3NpZ25h
bF9jb25uZWN0X3N3YXBwZWQobV9zZXNzaW9uLT5jb29raWVKYXIoKSwgImNoYW5nZWQiLCBHX0NB
TExCQUNLKGNvb2tpZXNEaWRDaGFuZ2UpLCB0aGlzKTsKKyAgICBzb3VwX2Nvb2tpZV9qYXJfc2V0
X2FjY2VwdF9wb2xpY3kobV9jb29raWVTdG9yYWdlLmdldCgpLCBTT1VQX0NPT0tJRV9KQVJfQUND
RVBUX05PX1RISVJEX1BBUlRZKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0X3N3YXBwZWQobV9jb29r
aWVTdG9yYWdlLmdldCgpLCAiY2hhbmdlZCIsIEdfQ0FMTEJBQ0soY29va2llc0RpZENoYW5nZSks
IHRoaXMpOwogfQogCiBOZXR3b3JrU3RvcmFnZVNlc3Npb246On5OZXR3b3JrU3RvcmFnZVNlc3Np
b24oKQogewotICAgIGNsZWFyU291cE5ldHdvcmtTZXNzaW9uKCk7Ci19Ci0KLVNvdXBOZXR3b3Jr
U2Vzc2lvbiYgTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpzb3VwTmV0d29ya1Nlc3Npb24oKSBjb25z
dAotewotICAgIEFTU0VSVChtX3Nlc3Npb24pOwotICAgIHJldHVybiAqbV9zZXNzaW9uLmdldCgp
OwotfTsKLQotdm9pZCBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmNsZWFyU291cE5ldHdvcmtTZXNz
aW9uKCkKLXsKLSAgICBpZiAobV9zZXNzaW9uKSB7Ci0gICAgICAgIEFTU0VSVChtX3Nlc3Npb24t
PmNvb2tpZUphcigpKTsKLSAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9tYXRj
aGVkKG1fc2Vzc2lvbi0+Y29va2llSmFyKCksIEdfU0lHTkFMX01BVENIX0RBVEEsIDAsIDAsIG51
bGxwdHIsIG51bGxwdHIsIHRoaXMpOwotICAgIH0KLQotICAgIG1fc2Vzc2lvbiA9IG51bGxwdHI7
Ci0gICAgbV9jb29raWVPYnNlcnZlckhhbmRsZXIgPSBudWxscHRyOworICAgIGdfc2lnbmFsX2hh
bmRsZXJzX2Rpc2Nvbm5lY3RfbWF0Y2hlZChtX2Nvb2tpZVN0b3JhZ2UuZ2V0KCksIEdfU0lHTkFM
X01BVENIX0RBVEEsIDAsIDAsIG51bGxwdHIsIG51bGxwdHIsIHRoaXMpOwogfQogCiB2b2lkIE5l
dHdvcmtTdG9yYWdlU2Vzc2lvbjo6Y29va2llc0RpZENoYW5nZShOZXR3b3JrU3RvcmFnZVNlc3Np
b24qIHNlc3Npb24pCkBAIC04OSwyNSArNzIsMTEgQEAgdm9pZCBOZXR3b3JrU3RvcmFnZVNlc3Np
b246OmNvb2tpZXNEaWRDaGFuZ2UoTmV0d29ya1N0b3JhZ2VTZXNzaW9uKiBzZXNzaW9uKQogICAg
ICAgICBzZXNzaW9uLT5tX2Nvb2tpZU9ic2VydmVySGFuZGxlcigpOwogfQogCi1Tb3VwQ29va2ll
SmFyKiBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmNvb2tpZVN0b3JhZ2UoKSBjb25zdAotewotICAg
IEFTU0VSVChtX3Nlc3Npb24pOwotICAgIEFTU0VSVChtX3Nlc3Npb24tPmNvb2tpZUphcigpKTsK
LSAgICByZXR1cm4gbV9zZXNzaW9uLT5jb29raWVKYXIoKTsKLX0KLQotdm9pZCBOZXR3b3JrU3Rv
cmFnZVNlc3Npb246OnNldENvb2tpZVN0b3JhZ2UoU291cENvb2tpZUphciogamFyKQordm9pZCBO
ZXR3b3JrU3RvcmFnZVNlc3Npb246OnNldENvb2tpZVN0b3JhZ2UoR1JlZlB0cjxTb3VwQ29va2ll
SmFyPiYmIGphcikKIHsKLSAgICBBU1NFUlQoamFyKTsKLSAgICBBU1NFUlQobV9zZXNzaW9uKTsK
LSAgICBBU1NFUlQobV9zZXNzaW9uLT5jb29raWVKYXIoKSk7Ci0KLSAgICBpZiAobV9zZXNzaW9u
LT5jb29raWVKYXIoKSA9PSBqYXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIGdfc2lnbmFsX2hh
bmRsZXJzX2Rpc2Nvbm5lY3RfbWF0Y2hlZChtX3Nlc3Npb24tPmNvb2tpZUphcigpLCBHX1NJR05B
TF9NQVRDSF9EQVRBLCAwLCAwLCBudWxscHRyLCBudWxscHRyLCB0aGlzKTsKLSAgICBtX3Nlc3Np
b24tPnNldENvb2tpZUphcihqYXIpOwotICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChtX3Nl
c3Npb24tPmNvb2tpZUphcigpLCAiY2hhbmdlZCIsIEdfQ0FMTEJBQ0soY29va2llc0RpZENoYW5n
ZSksIHRoaXMpOworICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfbWF0Y2hlZChtX2Nv
b2tpZVN0b3JhZ2UuZ2V0KCksIEdfU0lHTkFMX01BVENIX0RBVEEsIDAsIDAsIG51bGxwdHIsIG51
bGxwdHIsIHRoaXMpOworICAgIG1fY29va2llU3RvcmFnZSA9IFdURk1vdmUoamFyKTsKKyAgICBn
X3NpZ25hbF9jb25uZWN0X3N3YXBwZWQobV9jb29raWVTdG9yYWdlLmdldCgpLCAiY2hhbmdlZCIs
IEdfQ0FMTEJBQ0soY29va2llc0RpZENoYW5nZSksIHRoaXMpOwogfQogCiB2b2lkIE5ldHdvcmtT
dG9yYWdlU2Vzc2lvbjo6c2V0Q29va2llT2JzZXJ2ZXJIYW5kbGVyKEZ1bmN0aW9uPHZvaWQgKCk+
JiYgaGFuZGxlcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
c291cC9Tb2NrZXRTdHJlYW1IYW5kbGVJbXBsU291cC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL3NvdXAvU29ja2V0U3RyZWFtSGFuZGxlSW1wbFNvdXAuY3BwCmluZGV4IGVk
NzhlNGRkZDU5Li5mYmRjYmIxNWU0ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9zb3VwL1NvY2tldFN0cmVhbUhhbmRsZUltcGxTb3VwLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvU29ja2V0U3RyZWFtSGFuZGxlSW1wbFNv
dXAuY3BwCkBAIC0zNiwxMSArMzYsOSBAQAogCiAjaW5jbHVkZSAiRGVwcmVjYXRlZEdsb2JhbFNl
dHRpbmdzLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgotI2luY2x1ZGUgIk5ldHdvcmtTdG9yYWdl
U2Vzc2lvbi5oIgogI2luY2x1ZGUgIlJlc291cmNlRXJyb3IuaCIKICNpbmNsdWRlICJTb2NrZXRT
dHJlYW1FcnJvci5oIgogI2luY2x1ZGUgIlNvY2tldFN0cmVhbUhhbmRsZUNsaWVudC5oIgotI2lu
Y2x1ZGUgIlNvdXBOZXR3b3JrU2Vzc2lvbi5oIgogI2luY2x1ZGUgIlN0b3JhZ2VTZXNzaW9uUHJv
dmlkZXIuaCIKICNpbmNsdWRlICJVUkxTb3VwLmgiCiAjaW5jbHVkZSA8Z2lvL2dpby5oPgpAQCAt
ODcsMTMgKzg1LDEzIEBAIFJlZjxTb2NrZXRTdHJlYW1IYW5kbGVJbXBsPiBTb2NrZXRTdHJlYW1I
YW5kbGVJbXBsOjpjcmVhdGUoY29uc3QgVVJMJiB1cmwsIFNvY2tlCiAgICAgUmVmPFNvY2tldFN0
cmVhbUhhbmRsZUltcGw+IHNvY2tldCA9IGFkb3B0UmVmKCpuZXcgU29ja2V0U3RyZWFtSGFuZGxl
SW1wbCh1cmwsIGNsaWVudCwgc3RvcmFnZVNlc3Npb25Qcm92aWRlcikpOwogCiAjaWYgU09VUF9D
SEVDS19WRVJTSU9OKDIsIDYxLCA5MCkKLSAgICBhdXRvKiBuZXR3b3JrU3RvcmFnZVNlc3Npb24g
PSBzdG9yYWdlU2Vzc2lvblByb3ZpZGVyID8gc3RvcmFnZVNlc3Npb25Qcm92aWRlci0+c3RvcmFn
ZVNlc3Npb24oKSA6IG51bGxwdHI7Ci0gICAgaWYgKCFuZXR3b3JrU3RvcmFnZVNlc3Npb24pCisg
ICAgYXV0byogc291cFNlc3Npb24gPSBzdG9yYWdlU2Vzc2lvblByb3ZpZGVyID8gc3RvcmFnZVNl
c3Npb25Qcm92aWRlci0+c291cFNlc3Npb24oKSA6IG51bGxwdHI7CisgICAgaWYgKCFzb3VwU2Vz
c2lvbikKICAgICAgICAgcmV0dXJuIHNvY2tldDsKIAogICAgIGF1dG8gdXJpID0gdXJsVG9Tb3Vw
VVJJKHVybCk7CiAgICAgUmVmPFNvY2tldFN0cmVhbUhhbmRsZT4gcHJvdGVjdGVkU29ja2V0U3Ry
ZWFtSGFuZGxlID0gc29ja2V0LmNvcHlSZWYoKTsKLSAgICBzb3VwX3Nlc3Npb25fY29ubmVjdF9h
c3luYyhuZXR3b3JrU3RvcmFnZVNlc3Npb24tPnNvdXBOZXR3b3JrU2Vzc2lvbigpLnNvdXBTZXNz
aW9uKCksIHVyaS5nZXQoKSwgc29ja2V0LT5tX2NhbmNlbGxhYmxlLmdldCgpLAorICAgIHNvdXBf
c2Vzc2lvbl9jb25uZWN0X2FzeW5jKHNvdXBTZXNzaW9uLCB1cmkuZ2V0KCksIHNvY2tldC0+bV9j
YW5jZWxsYWJsZS5nZXQoKSwKICAgICAgICAgdXJsLnByb3RvY29sSXMoIndzcyIpID8gcmVpbnRl
cnByZXRfY2FzdDxTb3VwU2Vzc2lvbkNvbm5lY3RQcm9ncmVzc0NhbGxiYWNrPihjb25uZWN0UHJv
Z3Jlc3NDYWxsYmFjaykgOiBudWxscHRyLAogICAgICAgICByZWludGVycHJldF9jYXN0PEdBc3lu
Y1JlYWR5Q2FsbGJhY2s+KGNvbm5lY3RlZENhbGxiYWNrKSwgJnByb3RlY3RlZFNvY2tldFN0cmVh
bUhhbmRsZS5sZWFrUmVmKCkpOwogI2Vsc2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvc291cC9Tb3VwTmV0d29ya1Nlc3Npb24uY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1NvdXBOZXR3b3JrU2Vzc2lvbi5jcHAKaW5kZXggNjEy
NGY0NmMyNGQuLjYxODk5OGYyNTFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL3NvdXAvU291cE5ldHdvcmtTZXNzaW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvU291cE5ldHdvcmtTZXNzaW9uLmNwcApAQCAtMTA2LDcg
KzEwNiw3IEBAIHN0YXRpYyBBbGxvd2VkQ2VydGlmaWNhdGVzTWFwJiBhbGxvd2VkQ2VydGlmaWNh
dGVzKCkKICAgICByZXR1cm4gY2VydGlmaWNhdGVzOwogfQogCi1Tb3VwTmV0d29ya1Nlc3Npb246
OlNvdXBOZXR3b3JrU2Vzc2lvbihQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIFNvdXBDb29raWVK
YXIqIGNvb2tpZUphcikKK1NvdXBOZXR3b3JrU2Vzc2lvbjo6U291cE5ldHdvcmtTZXNzaW9uKFBB
TDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKICAgICA6IG1fc291cFNlc3Npb24oYWRvcHRHUmVmKHNv
dXBfc2Vzc2lvbl9uZXcoKSkpCiB7CiAgICAgLy8gVmFsdWVzIHRha2VuIGZyb20gaHR0cDovL3d3
dy5icm93c2Vyc2NvcGUub3JnLyBmb2xsb3dpbmcKQEAgLTExNiwxOSArMTE2LDEyIEBAIFNvdXBO
ZXR3b3JrU2Vzc2lvbjo6U291cE5ldHdvcmtTZXNzaW9uKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25J
RCwgU291cENvb2tpZUphcioKICAgICBzdGF0aWMgY29uc3QgaW50IG1heENvbm5lY3Rpb25zID0g
MTc7CiAgICAgc3RhdGljIGNvbnN0IGludCBtYXhDb25uZWN0aW9uc1Blckhvc3QgPSA2OwogCi0g
ICAgR1JlZlB0cjxTb3VwQ29va2llSmFyPiBqYXIgPSBjb29raWVKYXI7Ci0gICAgaWYgKCFqYXIp
IHsKLSAgICAgICAgamFyID0gYWRvcHRHUmVmKHNvdXBfY29va2llX2phcl9uZXcoKSk7Ci0gICAg
ICAgIHNvdXBfY29va2llX2phcl9zZXRfYWNjZXB0X3BvbGljeShqYXIuZ2V0KCksIFNPVVBfQ09P
S0lFX0pBUl9BQ0NFUFRfTk9fVEhJUkRfUEFSVFkpOwotICAgIH0KLQogICAgIGdfb2JqZWN0X3Nl
dChtX3NvdXBTZXNzaW9uLmdldCgpLAogICAgICAgICBTT1VQX1NFU1NJT05fTUFYX0NPTk5TLCBt
YXhDb25uZWN0aW9ucywKICAgICAgICAgU09VUF9TRVNTSU9OX01BWF9DT05OU19QRVJfSE9TVCwg
bWF4Q29ubmVjdGlvbnNQZXJIb3N0LAogICAgICAgICBTT1VQX1NFU1NJT05fVElNRU9VVCwgMCwK
ICAgICAgICAgU09VUF9TRVNTSU9OX0lETEVfVElNRU9VVCwgMCwKICAgICAgICAgU09VUF9TRVNT
SU9OX0FERF9GRUFUVVJFX0JZX1RZUEUsIFNPVVBfVFlQRV9DT05URU5UX1NOSUZGRVIsCi0gICAg
ICAgIFNPVVBfU0VTU0lPTl9BRERfRkVBVFVSRSwgamFyLmdldCgpLAogICAgICAgICBudWxscHRy
KTsKIAogICAgIHNldHVwQ3VzdG9tUHJvdG9jb2xzKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvU291cE5ldHdvcmtTZXNzaW9uLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvU291cE5ldHdvcmtTZXNzaW9uLmgKaW5kZXgg
ZmZiZDQ5YTc2MmEuLjVlMzJkMzFhZDRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL3NvdXAvU291cE5ldHdvcmtTZXNzaW9uLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1NvdXBOZXR3b3JrU2Vzc2lvbi5oCkBAIC00OSw3ICs0
OSw3IEBAIHN0cnVjdCBTb3VwTmV0d29ya1Byb3h5U2V0dGluZ3M7CiBjbGFzcyBTb3VwTmV0d29y
a1Nlc3Npb24gewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFNvdXBOZXR3b3JrU2Vzc2lvbik7
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIGV4cGxpY2l0IFNvdXBOZXR3
b3JrU2Vzc2lvbihQQUw6OlNlc3Npb25JRCA9IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lv
bklEKCksIFNvdXBDb29raWVKYXIqID0gbnVsbHB0cik7CisgICAgZXhwbGljaXQgU291cE5ldHdv
cmtTZXNzaW9uKFBBTDo6U2Vzc2lvbklEKTsKICAgICB+U291cE5ldHdvcmtTZXNzaW9uKCk7CiAK
ICAgICBTb3VwU2Vzc2lvbiogc291cFNlc3Npb24oKSBjb25zdCB7IHJldHVybiBtX3NvdXBTZXNz
aW9uLmdldCgpOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDdiN2M4ZDk2YTdlLi41YTY2OGUxNWVhMyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VM
b2cKQEAgLTEsMyArMSw1OCBAQAorMjAxOS0wNy0yNCAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxj
Z2FyY2lhQGlnYWxpYS5jb20+CisKKyAgICAgICAgW1NPVVBdIE1vdmUgU291cE5ldHdvcmtTZXNz
aW9uIG93bmVyc2hpcCBmcm9tIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiB0byBOZXR3b3JrU2Vzc2lv
bgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAwMDc2
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTmV0d29y
a1N0b3JhZ2VTZXNzaW9uIHNob3VsZCBvbmx5IG93biB0aGUgY29va2llIGphciwgc2luY2UgaXQn
cyB0aGUgb25seSB0aGluZyBpdCBoYW5kbGVzIGZyb20gdGhlIHNlc3Npb24uCisKKyAgICAgICAg
KiBOZXR3b3JrUHJvY2Vzcy9Db29raWVzL3NvdXAvV2ViQ29va2llTWFuYWdlclNvdXAuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyOjpzZXRDb29raWVQZXJzaXN0ZW50U3Rv
cmFnZSk6IFVzZSB0aGUgbmV0d29yayBzZXNzaW9uIGluc3RlYWQgb2YgdGhlIHN0b3JhZ2Ugc2Vz
c2lvbgorICAgICAgICB0byBzZXQgdGhlIHBlcmlzdGVudCBjb29raWUgc3RvcmFnZS4KKyAgICAg
ICAgKiBOZXR3b3JrUHJvY2Vzcy9DdXN0b21Qcm90b2NvbHMvc291cC9MZWdhY3lDdXN0b21Qcm90
b2NvbE1hbmFnZXJTb3VwLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TGVnYWN5Q3VzdG9tUHJvdG9j
b2xNYW5hZ2VyOjpyZWdpc3RlclNjaGVtZSk6IEl0ZXJhdGUgbmV0d29yayBzZXNzaW9ucyBpbnN0
ZWFkIG9mIHN0b3JhZ2Ugc2Vzc2lvbnMgdG8KKyAgICAgICAgYWNjZXNzIHRoZSBTb3VwTmV0d29y
a1Nlc3Npb24uCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dl
YlByb2Nlc3MuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJv
Y2Vzczo6cmVzb3VyY2VMb2FkU3RhdGlzdGljc1VwZGF0ZWQpOiBVc2UKKyAgICAgICAgTmV0d29y
a1Byb2Nlc3M6OmZvckVhY2hOZXR3b3JrU2Vzc2lvbigpIHRvIGl0ZXJhdGUgbmV0d29yayBzZXNz
aW9ucy4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHA6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpsb3dNZW1vcnlIYW5kbGVyKTogRGl0dG8uCisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpmb3JFYWNoTmV0d29ya1Nlc3Npb24pOiBB
ZGRlZCB0byBpdGVyYXRlIG5ldHdvcmsgc2Vzc2lvbnMgaW50ZWFkIG9mIGV4cG9zaW5nIHRoZSBt
YXAKKyAgICAgICAgdGhhdCBpcyBhbHdheXMgdXNlZCB0byBpdGVyYXRlIHRoZSBzZXNzaW9ucy4K
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OnN3aXRjaFRvTmV3VGVzdGluZ1Nlc3Np
b24pOiBVc2UgdGhlIG5ldyBOZXR3b3JrU3RvcmFnZVNlc3Npb24gY29uc3RydWN0b3IgQVBJLgor
ICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6ZW5zdXJlU2Vzc2lvbik6IERpdHRvLgor
ICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6ZGVzdHJveVNlc3Npb24pOiBBbGxvdyB0
byBkZXN0cm95IHRoZSBkZWZhdWx0IHNlc3Npb24gZm9yIHNvdXAgYmFzZWQgcG9ydHMuIFRoaXMg
aXMKKyAgICAgICAgb25seSBjYWxsZWQgcmlnaHQgYmVmb3JlIHByb2Nlc3MgZXhpdCB0byBlbnN1
cmUgd2UgZG9uJ3QgbGVhayBuZXR3b3JrIHJlc291cmNlcyBsaWtlIHRoZSBjb29raWVzIGRhdGFi
YXNlLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6c2V0UmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0VuYWJsZWQpOiBVc2UgTmV0d29ya1Byb2Nlc3M6OmZvckVhY2hOZXR3b3JrU2Vzc2lv
bigpIHRvCisgICAgICAgIGl0ZXJhdGUgbmV0d29yayBzZXNzaW9ucy4KKyAgICAgICAgKFdlYktp
dDo6TmV0d29ya1Byb2Nlc3M6OmZldGNoV2Vic2l0ZURhdGEpOiBEaXR0by4KKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya1Byb2Nlc3M6OmRlbGV0ZVdlYnNpdGVEYXRhRm9yT3JpZ2lucyk6IERpdHRv
LgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6ZGVsZXRlV2Vic2l0ZURhdGFGb3JS
ZWdpc3RyYWJsZURvbWFpbnMpOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nl
c3M6OnJlZ2lzdHJhYmxlRG9tYWluc1dpdGhXZWJzaXRlRGF0YSk6IERpdHRvLgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6c2V0Q2FjaGVNb2RlbCk6IERpdHRvLgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6YWN0dWFsUHJlcGFyZVRvU3VzcGVuZCk6IERpdHRvLgor
ICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6cmVzdW1lKTogRGl0dG8uCisgICAgICAg
ICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaDoKKyAgICAgICAgKiBOZXR3b3JrUHJv
Y2Vzcy9OZXR3b3JrU3RvcmFnZVNlc3Npb25Qcm92aWRlci5oOgorICAgICAgICAqIE5ldHdvcmtQ
cm9jZXNzL2NvY29hL05ldHdvcmtQcm9jZXNzQ29jb2EubW06CisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtQcm9jZXNzOjpjbGVhckRpc2tDYWNoZSk6IERpdHRvLgorICAgICAgICAqIE5ldHdvcmtQ
cm9jZXNzL2lvcy9OZXR3b3JrUHJvY2Vzc0lPUy5tbToKKyAgICAgICAgKFdlYktpdDo6TmV0d29y
a1Byb2Nlc3M6OmNsZWFyQ2FjaGVGb3JBbGxPcmlnaW5zKTogRGl0dG8uCisgICAgICAgICogTmV0
d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrUHJvY2Vzc01haW5Tb3VwLmNwcDogRGVzdHJveSB0aGUg
ZGVmYXVsdCBzZXNzaW9uIGJlZm9yZSBwcm9jZXNzIGV4aXN0cy4KKyAgICAgICAgKiBOZXR3b3Jr
UHJvY2Vzcy9zb3VwL05ldHdvcmtQcm9jZXNzU291cC5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtQcm9jZXNzOjp1c2VyUHJlZmVycmVkTGFuZ3VhZ2VzQ2hhbmdlZCk6IEl0ZXJhdGUgbmV0
d29yayBzZXNzaW9ucyBpbnN0ZWFkIG9mIHN0b3JhZ2Ugc2Vzc2lvbnMgdG8KKyAgICAgICAgYWNj
ZXNzIHRoZSBTb3VwTmV0d29ya1Nlc3Npb24uCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9j
ZXNzOjpwbGF0Zm9ybUNyZWF0ZURlZmF1bHRTdG9yYWdlU2Vzc2lvbiBjb25zdCk6IFVzZSB0aGUg
bmV3IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiBjb25zdHJ1Y3RvciBBUEkuCisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtQcm9jZXNzOjpjbGVhckRpc2tDYWNoZSk6IFVzZSBOZXR3b3JrUHJvY2Vzczo6
Zm9yRWFjaE5ldHdvcmtTZXNzaW9uKCkgdG8gaXRlcmF0ZSBuZXR3b3JrIHNlc3Npb25zLgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6c2V0TmV0d29ya1Byb3h5U2V0dGluZ3MpOiBJ
dGVyYXRlIG5ldHdvcmsgc2Vzc2lvbnMgaW5zdGVhZCBvZiBzdG9yYWdlIHNlc3Npb25zIHRvCisg
ICAgICAgIGFjY2VzcyB0aGUgU291cE5ldHdvcmtTZXNzaW9uLgorICAgICAgICAqIE5ldHdvcmtQ
cm9jZXNzL3NvdXAvTmV0d29ya1Nlc3Npb25Tb3VwLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0
d29ya1Nlc3Npb25Tb3VwOjpOZXR3b3JrU2Vzc2lvblNvdXApOiBDcmVhdGUgdGhlIFNvdXBOZXR3
b3JrU2Vzc2lvbiBhbmQgc2V0dXAgY29va2llcy4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Nl
c3Npb25Tb3VwOjpzb3VwU2Vzc2lvbiBjb25zdCk6IFJldHVybiB0aGUgU291cFNlc3Npb24gb2Yg
U291cE5ldHdvcmtTZXNzaW9uLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrU2Vzc2lvblNvdXA6
OnNldENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlKTogU2V0dXAgYSBuZXcgY29va2llIGphci4KKyAg
ICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtTZXNzaW9uU291cC5oOgorCiAyMDE5
LTA3LTIzICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgQ3Jhc2gg
dW5kZXIgV2ViS2l0OldURjo6RGV0YWlsOjpDYWxsYWJsZVdyYXBwZXI8V2ViS2l0OjpSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnVwZGF0ZUNvb2tpZUJsb2NraW5nKFdURjo6Q29t
cGxldGlvbkhhbmRsZXI8dm9pZCAoKT4mJik6OiRfMzI6Om9wZXJhdG9yKCkoKTo6J2xhbWJkYSco
KSwgdm9pZD46OmNhbGwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
Q29va2llcy9zb3VwL1dlYkNvb2tpZU1hbmFnZXJTb3VwLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvQ29va2llcy9zb3VwL1dlYkNvb2tpZU1hbmFnZXJTb3VwLmNwcAppbmRleCAy
OGNhYjIwODk0YS4uNGQ5N2RhN2I2OWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvQ29va2llcy9zb3VwL1dlYkNvb2tpZU1hbmFnZXJTb3VwLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvc291cC9XZWJDb29raWVNYW5hZ2VyU291
cC5jcHAKQEAgLTI3LDEyICsyNywxMSBAQAogI2luY2x1ZGUgIldlYkNvb2tpZU1hbmFnZXIuaCIK
IAogI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzLmgiCisjaW5jbHVkZSAiTmV0d29ya1Nlc3Npb25T
b3VwLmgiCiAjaW5jbHVkZSAiU291cENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlVHlwZS5oIgogI2lu
Y2x1ZGUgPFdlYkNvcmUvTmV0d29ya1N0b3JhZ2VTZXNzaW9uLmg+CiAjaW5jbHVkZSA8V2ViQ29y
ZS9Tb3VwTmV0d29ya1Nlc3Npb24uaD4KICNpbmNsdWRlIDxsaWJzb3VwL3NvdXAuaD4KLSNpbmNs
dWRlIDx3dGYvZ2xpYi9HUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgog
CiBuYW1lc3BhY2UgV2ViS2l0IHsKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwpAQCAtNzcsMjIg
Kzc2LDggQEAgSFRUUENvb2tpZUFjY2VwdFBvbGljeSBXZWJDb29raWVNYW5hZ2VyOjpwbGF0Zm9y
bUdldEhUVFBDb29raWVBY2NlcHRQb2xpY3koKQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXI6OnNl
dENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3Qg
U3RyaW5nJiBzdG9yYWdlUGF0aCwgU291cENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlVHlwZSBzdG9y
YWdlVHlwZSkKIHsKLSAgICBHUmVmUHRyPFNvdXBDb29raWVKYXI+IGphcjsKLSAgICBzd2l0Y2gg
KHN0b3JhZ2VUeXBlKSB7Ci0gICAgY2FzZSBTb3VwQ29va2llUGVyc2lzdGVudFN0b3JhZ2VUeXBl
OjpUZXh0OgotICAgICAgICBqYXIgPSBhZG9wdEdSZWYoc291cF9jb29raWVfamFyX3RleHRfbmV3
KHN0b3JhZ2VQYXRoLnV0ZjgoKS5kYXRhKCksIEZBTFNFKSk7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgU291cENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlVHlwZTo6U1FMaXRlOgotICAgICAgICBq
YXIgPSBhZG9wdEdSZWYoc291cF9jb29raWVfamFyX2RiX25ldyhzdG9yYWdlUGF0aC51dGY4KCku
ZGF0YSgpLCBGQUxTRSkpOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci0KLSAgICBpZiAoYXV0byogc3RvcmFnZVNlc3Np
b24gPSBtX3Byb2Nlc3Muc3RvcmFnZVNlc3Npb24oc2Vzc2lvbklEKSkgewotICAgICAgICBzb3Vw
X2Nvb2tpZV9qYXJfc2V0X2FjY2VwdF9wb2xpY3koamFyLmdldCgpLCBzb3VwX2Nvb2tpZV9qYXJf
Z2V0X2FjY2VwdF9wb2xpY3koc3RvcmFnZVNlc3Npb24tPmNvb2tpZVN0b3JhZ2UoKSkpOwotICAg
ICAgICBzdG9yYWdlU2Vzc2lvbi0+c2V0Q29va2llU3RvcmFnZShqYXIuZ2V0KCkpOwotICAgIH0K
KyAgICBpZiAoYXV0byogbmV0d29ya1Nlc3Npb24gPSBtX3Byb2Nlc3MubmV0d29ya1Nlc3Npb24o
c2Vzc2lvbklEKSkKKyAgICAgICAgc3RhdGljX2Nhc3Q8TmV0d29ya1Nlc3Npb25Tb3VwJj4oKm5l
dHdvcmtTZXNzaW9uKS5zZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShzdG9yYWdlUGF0aCwgc3Rv
cmFnZVR5cGUpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ3VzdG9tUHJvdG9jb2xzL3NvdXAvTGVnYWN5Q3VzdG9t
UHJvdG9jb2xNYW5hZ2VyU291cC5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0N1
c3RvbVByb3RvY29scy9zb3VwL0xlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclNvdXAuY3BwCmlu
ZGV4IDUxMWRkMDRkNjY3Li4yYzRkMmZmOTQ4MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9DdXN0b21Qcm90b2NvbHMvc291cC9MZWdhY3lDdXN0b21Qcm90b2NvbE1h
bmFnZXJTb3VwLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0N1c3RvbVBy
b3RvY29scy9zb3VwL0xlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclNvdXAuY3BwCkBAIC0yMyw4
ICsyMyw4IEBACiAjaW5jbHVkZSAiRGF0YVJlZmVyZW5jZS5oIgogI2luY2x1ZGUgIkxlZ2FjeUN1
c3RvbVByb3RvY29sTWFuYWdlck1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3Mu
aCIKKyNpbmNsdWRlICJOZXR3b3JrU2Vzc2lvblNvdXAuaCIKICNpbmNsdWRlICJXZWJLaXRTb3Vw
UmVxdWVzdElucHV0U3RyZWFtLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9OZXR3b3JrU3RvcmFnZVNl
c3Npb24uaD4KICNpbmNsdWRlIDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+CiAjaW5jbHVkZSA8
V2ViQ29yZS9SZXNvdXJjZUVycm9yLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZVJlcXVl
c3QuaD4KQEAgLTEwMiw4ICsxMDIsOCBAQCB2b2lkIExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdl
cjo6cmVnaXN0ZXJTY2hlbWUoY29uc3QgU3RyaW5nJiBzY2hlbWUpCiAgICAgYXV0byogZ2VuZXJp
Y1JlcXVlc3RDbGFzcyA9IHN0YXRpY19jYXN0PFNvdXBSZXF1ZXN0Q2xhc3MqPihnX3R5cGVfY2xh
c3NfcGVlayhXRUJLSVRfVFlQRV9TT1VQX1JFUVVFU1RfR0VORVJJQykpOwogICAgIEFTU0VSVChn
ZW5lcmljUmVxdWVzdENsYXNzKTsKICAgICBnZW5lcmljUmVxdWVzdENsYXNzLT5zY2hlbWVzID0g
Y29uc3RfY2FzdDxjb25zdCBjaGFyKio+KHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcioqPihtX3JlZ2lz
dGVyZWRTY2hlbWVzLT5wZGF0YSkpOwotICAgIGxhc3RDcmVhdGVkTmV0d29ya1Byb2Nlc3MoKS0+
Zm9yRWFjaE5ldHdvcmtTdG9yYWdlU2Vzc2lvbihbXShjb25zdCBhdXRvJiBzZXNzaW9uKSB7Ci0g
ICAgICAgIHNlc3Npb24uc291cE5ldHdvcmtTZXNzaW9uKCkuc2V0dXBDdXN0b21Qcm90b2NvbHMo
KTsKKyAgICBsYXN0Q3JlYXRlZE5ldHdvcmtQcm9jZXNzKCktPmZvckVhY2hOZXR3b3JrU2Vzc2lv
bihbXShjb25zdCBhdXRvJiBzZXNzaW9uKSB7CisgICAgICAgIHN0YXRpY19jYXN0PGNvbnN0IE5l
dHdvcmtTZXNzaW9uU291cCY+KHNlc3Npb24pLnNvdXBOZXR3b3JrU2Vzc2lvbigpLnNldHVwQ3Vz
dG9tUHJvdG9jb2xzKCk7CiAgICAgfSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwIGIvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHAK
aW5kZXggMmQ1MGUyZjQzZGIuLjgyNGNiZDFjOTdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNz
LmNwcApAQCAtNjg5LDEzICs2ODksMTMgQEAgdm9pZCBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJv
Y2Vzczo6bG9nU3VicmVzb3VyY2VSZWRpcmVjdChQQUw6OlNlc3Npb25JRCBzZXNzaW8KIAogdm9p
ZCBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6cmVzb3VyY2VMb2FkU3RhdGlzdGljc1Vw
ZGF0ZWQoVmVjdG9yPFdlYkNvcmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3M+JiYgc3RhdGlzdGlj
cykKIHsKLSAgICBmb3IgKGF1dG8mIG5ldHdvcmtTZXNzaW9uIDogbmV0d29ya1Byb2Nlc3MoKS5u
ZXR3b3JrU2Vzc2lvbnMoKS52YWx1ZXMoKSkgewotICAgICAgICBpZiAobmV0d29ya1Nlc3Npb24t
PnNlc3Npb25JRCgpLmlzRXBoZW1lcmFsKCkpCi0gICAgICAgICAgICBjb250aW51ZTsKKyAgICBu
ZXR3b3JrUHJvY2VzcygpLmZvckVhY2hOZXR3b3JrU2Vzc2lvbihbc3RhdGlzdGljcyA9IFdURk1v
dmUoc3RhdGlzdGljcykgXShOZXR3b3JrU2Vzc2lvbiYgbmV0d29ya1Nlc3Npb24pIG11dGFibGUg
eworICAgICAgICBpZiAobmV0d29ya1Nlc3Npb24uc2Vzc2lvbklEKCkuaXNFcGhlbWVyYWwoKSkK
KyAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBpZiAoYXV0byogcmVzb3VyY2VMb2FkU3Rh
dGlzdGljcyA9IG5ldHdvcmtTZXNzaW9uLT5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzKCkpCisgICAg
ICAgIGlmIChhdXRvKiByZXNvdXJjZUxvYWRTdGF0aXN0aWNzID0gbmV0d29ya1Nlc3Npb24ucmVz
b3VyY2VMb2FkU3RhdGlzdGljcygpKQogICAgICAgICAgICAgcmVzb3VyY2VMb2FkU3RhdGlzdGlj
cy0+cmVzb3VyY2VMb2FkU3RhdGlzdGljc1VwZGF0ZWQoV1RGTW92ZShzdGF0aXN0aWNzKSk7Ci0g
ICAgfQorICAgIH0pOwogfQogCiB2b2lkIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpo
YXNTdG9yYWdlQWNjZXNzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgUmVnaXN0cmFi
bGVEb21haW4mIHN1YkZyYW1lRG9tYWluLCBjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgdG9wRnJh
bWVEb21haW4sIHVpbnQ2NF90IGZyYW1lSUQsIFBhZ2VJZGVudGlmaWVyIHBhZ2VJRCwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwIGIvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKaW5kZXggMjRiZDcxNjk5
YWEuLmU1NDgwYzUzZDYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L05ldHdvcmtQcm9jZXNzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05l
dHdvcmtQcm9jZXNzLmNwcApAQCAtOTksNiArOTksNyBAQAogI2VuZGlmCiAKICNpZiBVU0UoU09V
UCkKKyNpbmNsdWRlICJOZXR3b3JrU2Vzc2lvblNvdXAuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0RO
U1Jlc29sdmVRdWV1ZVNvdXAuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1NvdXBOZXR3b3JrU2Vzc2lv
bi5oPgogI2VuZGlmCkBAIC0xNTAsOCArMTUxLDggQEAgTmV0d29ya1Byb2Nlc3M6Ok5ldHdvcmtQ
cm9jZXNzKEF1eGlsaWFyeVByb2Nlc3NJbml0aWFsaXphdGlvblBhcmFtZXRlcnMmJiBwYXJhbWUK
ICNlbmRpZgogCiAjaWYgVVNFKFNPVVApCi0gICAgRE5TUmVzb2x2ZVF1ZXVlU291cDo6c2V0R2xv
YmFsRGVmYXVsdE5ldHdvcmtTdG9yYWdlU2Vzc2lvbkFjY2Vzc29yKFt0aGlzXSgpIC0+IE5ldHdv
cmtTdG9yYWdlU2Vzc2lvbiYgewotICAgICAgICByZXR1cm4gZGVmYXVsdFN0b3JhZ2VTZXNzaW9u
KCk7CisgICAgRE5TUmVzb2x2ZVF1ZXVlU291cDo6c2V0R2xvYmFsRGVmYXVsdFNvdXBTZXNzaW9u
QWNjZXNzb3IoW3RoaXNdKCkgLT4gU291cFNlc3Npb24qIHsKKyAgICAgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PE5ldHdvcmtTZXNzaW9uU291cCY+KCpuZXR3b3JrU2Vzc2lvbihQQUw6OlNlc3Npb25J
RDo6ZGVmYXVsdFNlc3Npb25JRCgpKSkuc291cFNlc3Npb24oKTsKICAgICB9KTsKICNlbmRpZgog
CkBAIC0yNzMsOCArMjc0LDkgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6bG93TWVtb3J5SGFuZGxl
cihDcml0aWNhbCBjcml0aWNhbCkKIAogICAgIFdURjo6cmVsZWFzZUZhc3RNYWxsb2NGcmVlTWVt
b3J5KCk7CiAKLSAgICBmb3IgKGF1dG8mIG5ldHdvcmtTZXNzaW9uIDogbV9uZXR3b3JrU2Vzc2lv
bnMudmFsdWVzKCkpCi0gICAgICAgIG5ldHdvcmtTZXNzaW9uLmdldCgpLmNsZWFyUHJlZmV0Y2hD
YWNoZSgpOworICAgIGZvckVhY2hOZXR3b3JrU2Vzc2lvbihbXShOZXR3b3JrU2Vzc2lvbiYgbmV0
d29ya1Nlc3Npb24pIHsKKyAgICAgICAgbmV0d29ya1Nlc3Npb24uY2xlYXJQcmVmZXRjaENhY2hl
KCk7CisgICAgfSk7CiB9CiAKIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmluaXRpYWxpemVOZXR3b3Jr
UHJvY2VzcyhOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyYmIHBhcmFtZXRlcnMpCkBA
IC00ODUsNiArNDg3LDEyIEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmluaXRpYWxpemVTdG9yYWdl
UXVvdGEoY29uc3QgV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMmIHBhCiAgICAgbWFuYWdlcnMu
c2V0RGVmYXVsdFF1b3RhcyhwYXJhbWV0ZXJzLnBlck9yaWdpblN0b3JhZ2VRdW90YSwgcGFyYW1l
dGVycy5wZXJUaGlyZFBhcnR5T3JpZ2luU3RvcmFnZVF1b3RhKTsKIH0KIAordm9pZCBOZXR3b3Jr
UHJvY2Vzczo6Zm9yRWFjaE5ldHdvcmtTZXNzaW9uKGNvbnN0IEZ1bmN0aW9uPHZvaWQoTmV0d29y
a1Nlc3Npb24mKT4mIGZ1bmN0b3IpCit7CisgICAgZm9yIChhdXRvJiBzZXNzaW9uIDogbV9uZXR3
b3JrU2Vzc2lvbnMudmFsdWVzKCkpCisgICAgICAgIGZ1bmN0b3IoKnNlc3Npb24ucHRyKCkpOwor
fQorCiB2b2lkIE5ldHdvcmtQcm9jZXNzOjpzd2l0Y2hUb05ld1Rlc3RpbmdTZXNzaW9uKCkKIHsK
ICNpZiBQTEFURk9STShDT0NPQSkKQEAgLTUwMSw5ICs1MDksNyBAQCB2b2lkIE5ldHdvcmtQcm9j
ZXNzOjpzd2l0Y2hUb05ld1Rlc3RpbmdTZXNzaW9uKCkKICAgICB9CiAKICAgICBtX2RlZmF1bHRO
ZXR3b3JrU3RvcmFnZVNlc3Npb24gPSBzdGQ6Om1ha2VfdW5pcXVlPFdlYkNvcmU6Ok5ldHdvcmtT
dG9yYWdlU2Vzc2lvbj4oUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSwgV1RGTW92
ZShzZXNzaW9uKSwgV1RGTW92ZShjb29raWVTdG9yYWdlKSk7Ci0jZWxpZiBVU0UoU09VUCkKLSAg
ICBtX2RlZmF1bHROZXR3b3JrU3RvcmFnZVNlc3Npb24gPSBzdGQ6Om1ha2VfdW5pcXVlPFdlYkNv
cmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4oUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9u
SUQoKSwgc3RkOjptYWtlX3VuaXF1ZTxXZWJDb3JlOjpTb3VwTmV0d29ya1Nlc3Npb24+KCkpOwot
I2VsaWYgVVNFKENVUkwpCisjZWxpZiBVU0UoQ1VSTCkgfHwgVVNFKFNPVVApCiAgICAgbV9kZWZh
dWx0TmV0d29ya1N0b3JhZ2VTZXNzaW9uID0gc3RkOjptYWtlX3VuaXF1ZTxXZWJDb3JlOjpOZXR3
b3JrU3RvcmFnZVNlc3Npb24+KFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpOwog
I2VuZGlmCiB9CkBAIC01MzUsOSArNTQxLDcgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6ZW5zdXJl
U2Vzc2lvbihjb25zdCBQQUw6OlNlc3Npb25JRCYgc2Vzc2lvbklELCBjb25zdCBTdHJpbmcKICAg
ICB9CiAKICAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gc3RkOjptYWtlX3VuaXF1ZTxO
ZXR3b3JrU3RvcmFnZVNlc3Npb24+KHNlc3Npb25JRCwgV1RGTW92ZShzdG9yYWdlU2Vzc2lvbiks
IFdURk1vdmUoY29va2llU3RvcmFnZSkpOwotI2VsaWYgVVNFKFNPVVApCi0gICAgYWRkUmVzdWx0
Lml0ZXJhdG9yLT52YWx1ZSA9IHN0ZDo6bWFrZV91bmlxdWU8TmV0d29ya1N0b3JhZ2VTZXNzaW9u
PihzZXNzaW9uSUQsIHN0ZDo6bWFrZV91bmlxdWU8U291cE5ldHdvcmtTZXNzaW9uPihzZXNzaW9u
SUQpKTsKLSNlbGlmIFVTRShDVVJMKQorI2VsaWYgVVNFKENVUkwpIHx8IFVTRShTT1VQKQogICAg
IGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBzdGQ6Om1ha2VfdW5pcXVlPE5ldHdvcmtTdG9y
YWdlU2Vzc2lvbj4oc2Vzc2lvbklEKTsKICNlbmRpZgogfQpAQCAtNTkzLDcgKzU5Nyw5IEBAIHZv
aWQgTmV0d29ya1Byb2Nlc3M6OmRlc3Ryb3lTZXNzaW9uKGNvbnN0IFBBTDo6U2Vzc2lvbklEJiBz
ZXNzaW9uSUQpCiAgICAgaWYgKCFzZXNzaW9uSUQuaXNWYWxpZCgpKQogICAgICAgICByZXR1cm47
CiAKKyNpZiAhVVNFKFNPVVApCiAgICAgQVNTRVJUKHNlc3Npb25JRCAhPSBQQUw6OlNlc3Npb25J
RDo6ZGVmYXVsdFNlc3Npb25JRCgpKTsKKyNlbmRpZgogCiAgICAgaWYgKGF1dG8gc2Vzc2lvbiA9
IG1fbmV0d29ya1Nlc3Npb25zLnRha2Uoc2Vzc2lvbklEKSkKICAgICAgICAgc2Vzc2lvbi0+Z2V0
KCkuaW52YWxpZGF0ZUFuZENhbmNlbCgpOwpAQCAtMTE0NSw4ICsxMTUxLDkgQEAgdm9pZCBOZXR3
b3JrUHJvY2Vzczo6c2V0U2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1Jl
bW92YWwoUEFMOjpTZXMKIAogdm9pZCBOZXR3b3JrUHJvY2Vzczo6c2V0UmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0VuYWJsZWQoYm9vbCBlbmFibGVkKQogewotICAgIGZvciAoYXV0byYgbmV0d29ya1Nl
c3Npb24gOiBtX25ldHdvcmtTZXNzaW9ucy52YWx1ZXMoKSkKLSAgICAgICAgbmV0d29ya1Nlc3Np
b24uZ2V0KCkuc2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoZW5hYmxlZCk7CisgICAg
Zm9yRWFjaE5ldHdvcmtTZXNzaW9uKFtlbmFibGVkXShOZXR3b3JrU2Vzc2lvbiYgbmV0d29ya1Nl
c3Npb24pIHsKKyAgICAgICAgbmV0d29ya1Nlc3Npb24uc2V0UmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0VuYWJsZWQoZW5hYmxlZCk7CisgICAgfSk7CiB9CiAKIHZvaWQgTmV0d29ya1Byb2Nlc3M6OnNl
dFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklE
LCBib29sIGRlYnVnTW9kZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25I
YW5kbGVyKQpAQCAtMTM1OCwxMSArMTM2NSwxMSBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpmZXRj
aFdlYnNpdGVEYXRhKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgT3B0aW9uU2V0PFdlYnNpdAog
ICAgIH0KICNlbmRpZgogICAgIGlmICh3ZWJzaXRlRGF0YVR5cGVzLmNvbnRhaW5zKFdlYnNpdGVE
YXRhVHlwZTo6RGlza0NhY2hlKSkgewotICAgICAgICBmb3IgKGF1dG8mIHNlc3Npb24gOiBuZXR3
b3JrU2Vzc2lvbnMoKS52YWx1ZXMoKSkgewotICAgICAgICAgICAgZmV0Y2hEaXNrQ2FjaGVFbnRy
aWVzKHNlc3Npb24tPmNhY2hlKCksIHNlc3Npb25JRCwgZmV0Y2hPcHRpb25zLCBbY2FsbGJhY2tB
Z2dyZWdhdG9yID0gV1RGTW92ZShjYWxsYmFja0FnZ3JlZ2F0b3IpXShhdXRvIGVudHJpZXMpIG11
dGFibGUgeworICAgICAgICBmb3JFYWNoTmV0d29ya1Nlc3Npb24oW3Nlc3Npb25JRCwgZmV0Y2hP
cHRpb25zLCBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBXVEZNb3ZlKGNhbGxiYWNrQWdncmVnYXRvcild
KE5ldHdvcmtTZXNzaW9uJiBzZXNzaW9uKSBtdXRhYmxlIHsKKyAgICAgICAgICAgIGZldGNoRGlz
a0NhY2hlRW50cmllcyhzZXNzaW9uLmNhY2hlKCksIHNlc3Npb25JRCwgZmV0Y2hPcHRpb25zLCBb
Y2FsbGJhY2tBZ2dyZWdhdG9yID0gV1RGTW92ZShjYWxsYmFja0FnZ3JlZ2F0b3IpXShhdXRvIGVu
dHJpZXMpIG11dGFibGUgewogICAgICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+bV93
ZWJzaXRlRGF0YS5lbnRyaWVzLmFwcGVuZFZlY3RvcihlbnRyaWVzKTsKICAgICAgICAgICAgIH0p
OwotICAgICAgICB9CisgICAgICAgIH0pOwogICAgIH0KIH0KIApAQCAtMTUxOCw4ICsxNTI1LDkg
QEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6ZGVsZXRlV2Vic2l0ZURhdGFGb3JPcmlnaW5zKFBBTDo6
U2Vzc2lvbklEIHNlc3Npb25JRCwgT3B0aW8KICNlbmRpZgogCiAgICAgaWYgKHdlYnNpdGVEYXRh
VHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpEaXNrQ2FjaGUpICYmICFzZXNzaW9uSUQu
aXNFcGhlbWVyYWwoKSkgewotICAgICAgICBmb3IgKGF1dG8mIHNlc3Npb24gOiBuZXR3b3JrU2Vz
c2lvbnMoKS52YWx1ZXMoKSkKLSAgICAgICAgICAgIGNsZWFyRGlza0NhY2hlRW50cmllcyhzZXNz
aW9uLT5jYWNoZSgpLCBvcmlnaW5EYXRhcywgW2NsZWFyVGFza3NIYW5kbGVyID0gV1RGTW92ZShj
bGVhclRhc2tzSGFuZGxlcildIHsgfSk7CisgICAgICAgIGZvckVhY2hOZXR3b3JrU2Vzc2lvbihb
b3JpZ2luRGF0YXMsIGNsZWFyVGFza3NIYW5kbGVyID0gV1RGTW92ZShjbGVhclRhc2tzSGFuZGxl
cildKE5ldHdvcmtTZXNzaW9uJiBzZXNzaW9uKSBtdXRhYmxlIHsKKyAgICAgICAgICAgIGNsZWFy
RGlza0NhY2hlRW50cmllcyhzZXNzaW9uLmNhY2hlKCksIG9yaWdpbkRhdGFzLCBbY2xlYXJUYXNr
c0hhbmRsZXIgPSBXVEZNb3ZlKGNsZWFyVGFza3NIYW5kbGVyKV0geyB9KTsKKyAgICAgICAgfSk7
CiAgICAgfQogCiAgICAgaWYgKHdlYnNpdGVEYXRhVHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFU
eXBlOjpDcmVkZW50aWFscykpIHsKQEAgLTE3NTMsOCArMTc2MSw4IEBAIHZvaWQgTmV0d29ya1By
b2Nlc3M6OmRlbGV0ZVdlYnNpdGVEYXRhRm9yUmVnaXN0cmFibGVEb21haW5zKFBBTDo6U2Vzc2lv
bklEIHNlc3NpCiAjZW5kaWYKIAogICAgIGlmICh3ZWJzaXRlRGF0YVR5cGVzLmNvbnRhaW5zKFdl
YnNpdGVEYXRhVHlwZTo6RGlza0NhY2hlKSkgewotICAgICAgICBmb3IgKGF1dG8mIHNlc3Npb24g
OiBuZXR3b3JrU2Vzc2lvbnMoKS52YWx1ZXMoKSkgewotICAgICAgICAgICAgZmV0Y2hEaXNrQ2Fj
aGVFbnRyaWVzKHNlc3Npb24tPmNhY2hlKCksIHNlc3Npb25JRCwgZmV0Y2hPcHRpb25zLCBbZG9t
YWluc1RvRGVsZXRlQWxsQnV0Q29va2llc0ZvciwgY2FsbGJhY2tBZ2dyZWdhdG9yID0gY2FsbGJh
Y2tBZ2dyZWdhdG9yLmNvcHlSZWYoKSwgc2Vzc2lvbiA9IHNlc3Npb24uY29weVJlZigpXShhdXRv
IGVudHJpZXMpIG11dGFibGUgeworICAgICAgICBmb3JFYWNoTmV0d29ya1Nlc3Npb24oW3Nlc3Np
b25JRCwgZmV0Y2hPcHRpb25zLCAmZG9tYWluc1RvRGVsZXRlQWxsQnV0Q29va2llc0ZvciwgJmNh
bGxiYWNrQWdncmVnYXRvcl0oTmV0d29ya1Nlc3Npb24mIHNlc3Npb24pIHsKKyAgICAgICAgICAg
IGZldGNoRGlza0NhY2hlRW50cmllcyhzZXNzaW9uLmNhY2hlKCksIHNlc3Npb25JRCwgZmV0Y2hP
cHRpb25zLCBbZG9tYWluc1RvRGVsZXRlQWxsQnV0Q29va2llc0ZvciwgY2FsbGJhY2tBZ2dyZWdh
dG9yID0gY2FsbGJhY2tBZ2dyZWdhdG9yLmNvcHlSZWYoKSwgc2Vzc2lvbiA9IHNlc3Npb24uY29w
eVJlZigpXShhdXRvIGVudHJpZXMpIG11dGFibGUgewogCiAgICAgICAgICAgICAgICAgVmVjdG9y
PFNlY3VyaXR5T3JpZ2luRGF0YT4gZW50cmllc1RvRGVsZXRlOwogICAgICAgICAgICAgICAgIGZv
ciAoYXV0byYgZW50cnkgOiBlbnRyaWVzKSB7CkBAIC0xNzY1LDcgKzE3NzMsNyBAQCB2b2lkIE5l
dHdvcmtQcm9jZXNzOjpkZWxldGVXZWJzaXRlRGF0YUZvclJlZ2lzdHJhYmxlRG9tYWlucyhQQUw6
OlNlc3Npb25JRCBzZXNzaQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBjbGVh
ckRpc2tDYWNoZUVudHJpZXMoc2Vzc2lvbi0+Y2FjaGUoKSwgZW50cmllc1RvRGVsZXRlLCBbY2Fs
bGJhY2tBZ2dyZWdhdG9yID0gY2FsbGJhY2tBZ2dyZWdhdG9yLmNvcHlSZWYoKV0geyB9KTsKICAg
ICAgICAgICAgIH0pOwotICAgICAgICB9CisgICAgICAgIH0pOwogICAgIH0KIAogICAgIGF1dG8g
ZGF0YVR5cGVzRm9yVUlQcm9jZXNzID0gV2Vic2l0ZURhdGE6OmZpbHRlcih3ZWJzaXRlRGF0YVR5
cGVzLCBXZWJzaXRlRGF0YVByb2Nlc3NUeXBlOjpVSSk7CkBAIC0xODg3LDExICsxODk1LDExIEBA
IHZvaWQgTmV0d29ya1Byb2Nlc3M6OnJlZ2lzdHJhYmxlRG9tYWluc1dpdGhXZWJzaXRlRGF0YShQ
QUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsCiAjZW5kaWYKICAgICAKICAgICBpZiAod2Vic2l0ZURh
dGFUeXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6OkRpc2tDYWNoZSkpIHsKLSAgICAgICAg
Zm9yIChhdXRvJiBzZXNzaW9uIDogbmV0d29ya1Nlc3Npb25zKCkudmFsdWVzKCkpIHsKLSAgICAg
ICAgICAgIGZldGNoRGlza0NhY2hlRW50cmllcyhzZXNzaW9uLT5jYWNoZSgpLCBzZXNzaW9uSUQs
IGZldGNoT3B0aW9ucywgW2NhbGxiYWNrQWdncmVnYXRvciA9IGNhbGxiYWNrQWdncmVnYXRvci5j
b3B5UmVmKCldKGF1dG8gZW50cmllcykgbXV0YWJsZSB7CisgICAgICAgIGZvckVhY2hOZXR3b3Jr
U2Vzc2lvbihbc2Vzc2lvbklELCBmZXRjaE9wdGlvbnMsICZjYWxsYmFja0FnZ3JlZ2F0b3JdKE5l
dHdvcmtTZXNzaW9uJiBzZXNzaW9uKSB7CisgICAgICAgICAgICBmZXRjaERpc2tDYWNoZUVudHJp
ZXMoc2Vzc2lvbi5jYWNoZSgpLCBzZXNzaW9uSUQsIGZldGNoT3B0aW9ucywgW2NhbGxiYWNrQWdn
cmVnYXRvciA9IGNhbGxiYWNrQWdncmVnYXRvci5jb3B5UmVmKCldKGF1dG8gZW50cmllcykgbXV0
YWJsZSB7CiAgICAgICAgICAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5tX3dlYnNpdGVEYXRh
LmVudHJpZXMuYXBwZW5kVmVjdG9yKGVudHJpZXMpOwogICAgICAgICAgICAgfSk7Ci0gICAgICAg
IH0KKyAgICAgICAgfSk7CiAgICAgfQogfQogI2VuZGlmIC8vIEVOQUJMRShSRVNPVVJDRV9MT0FE
X1NUQVRJU1RJQ1MpCkBAIC0xOTgzLDExICsxOTkxLDExIEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6
OnNldENhY2hlTW9kZWwoQ2FjaGVNb2RlbCBjYWNoZU1vZGVsKQogICAgICAgICBkaXNrRnJlZVNp
emUgLz0gS0IgKiAxMDAwOwogICAgICAgICBjYWxjdWxhdGVVUkxDYWNoZVNpemVzKGNhY2hlTW9k
ZWwsIGRpc2tGcmVlU2l6ZSwgdXJsQ2FjaGVNZW1vcnlDYXBhY2l0eSwgdXJsQ2FjaGVEaXNrQ2Fw
YWNpdHkpOwogICAgIH0KLSAgICAKLSAgICBmb3IgKGF1dG8mIHNlc3Npb24gOiBuZXR3b3JrU2Vz
c2lvbnMoKS52YWx1ZXMoKSkgewotICAgICAgICBpZiAoYXV0byogY2FjaGUgPSBzZXNzaW9uLT5j
YWNoZSgpKQorCisgICAgZm9yRWFjaE5ldHdvcmtTZXNzaW9uKFt1cmxDYWNoZURpc2tDYXBhY2l0
eV0oTmV0d29ya1Nlc3Npb24mIHNlc3Npb24pIHsKKyAgICAgICAgaWYgKGF1dG8qIGNhY2hlID0g
c2Vzc2lvbi5jYWNoZSgpKQogICAgICAgICAgICAgY2FjaGUtPnNldENhcGFjaXR5KHVybENhY2hl
RGlza0NhcGFjaXR5KTsKLSAgICB9CisgICAgfSk7CiB9CiAKIHZvaWQgTmV0d29ya1Byb2Nlc3M6
OnNldENhbkhhbmRsZUhUVFBTU2VydmVyVHJ1c3RFdmFsdWF0aW9uKGJvb2wgdmFsdWUpCkBAIC0y
MDgxLDggKzIwODksOSBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjphY3R1YWxQcmVwYXJlVG9TdXNw
ZW5kKFNob3VsZEFja25vd2xlZGdlV2hlblJlYWR5VG9TdXNwZW5kCiAgICAgfQogI2VuZGlmCiAK
LSAgICBmb3IgKGF1dG8mIHNlc3Npb24gOiBtX25ldHdvcmtTZXNzaW9ucykKLSAgICAgICAgc2Vz
c2lvbi52YWx1ZS0+c3RvcmFnZU1hbmFnZXIoKS5zdXNwZW5kKFtjYWxsYmFja0FnZ3JlZ2F0b3Jd
IHsgfSk7CisgICAgZm9yRWFjaE5ldHdvcmtTZXNzaW9uKFsmY2FsbGJhY2tBZ2dyZWdhdG9yXShO
ZXR3b3JrU2Vzc2lvbiYgc2Vzc2lvbikgeworICAgICAgICBzZXNzaW9uLnN0b3JhZ2VNYW5hZ2Vy
KCkuc3VzcGVuZChbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOworICAgIH0pOwogfQogCiB2b2lk
IE5ldHdvcmtQcm9jZXNzOjpwcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5KCkKQEAgLTIxNTIs
OCArMjE2MSw5IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OnJlc3VtZSgpCiAgICAgICAgIHNlcnZl
ci0+cmVzdW1lKCk7CiAjZW5kaWYKIAotICAgIGZvciAoYXV0byYgc2Vzc2lvbiA6IG1fbmV0d29y
a1Nlc3Npb25zKQotICAgICAgICBzZXNzaW9uLnZhbHVlLT5zdG9yYWdlTWFuYWdlcigpLnJlc3Vt
ZSgpOworICAgIGZvckVhY2hOZXR3b3JrU2Vzc2lvbihbXShOZXR3b3JrU2Vzc2lvbiYgc2Vzc2lv
bikgeworICAgICAgICBzZXNzaW9uLnN0b3JhZ2VNYW5hZ2VyKCkucmVzdW1lKCk7CisgICAgfSk7
CiB9CiAKIHZvaWQgTmV0d29ya1Byb2Nlc3M6OnByZWZldGNoRE5TKGNvbnN0IFN0cmluZyYgaG9z
dG5hbWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQ
cm9jZXNzLmggYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmgK
aW5kZXggNjlmM2Q0ZjY3OTIuLjA2MjZiNTZmZWUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmgKKysrIGIvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5oCkBAIC0xNjYsOCArMTY2LDcgQEAgcHVibGljOgog
ICAgIE5ldHdvcmtTZXNzaW9uKiBuZXR3b3JrU2Vzc2lvbkJ5Q29ubmVjdGlvbihJUEM6OkNvbm5l
Y3Rpb24mKSBjb25zdDsKICAgICB2b2lkIGRlc3Ryb3lTZXNzaW9uKGNvbnN0IFBBTDo6U2Vzc2lv
bklEJik7CiAKLSAgICAvLyBOZWVkZWQgZm9yIHRlc3QgaW5mcmFzdHJ1Y3R1cmUKLSAgICBIYXNo
TWFwPFBBTDo6U2Vzc2lvbklELCBSZWY8TmV0d29ya1Nlc3Npb24+PiYgbmV0d29ya1Nlc3Npb25z
KCkgeyByZXR1cm4gbV9uZXR3b3JrU2Vzc2lvbnM7IH0KKyAgICB2b2lkIGZvckVhY2hOZXR3b3Jr
U2Vzc2lvbihjb25zdCBGdW5jdGlvbjx2b2lkKE5ldHdvcmtTZXNzaW9uJik+Jik7CiAKICAgICB2
b2lkIGZvckVhY2hOZXR3b3JrU3RvcmFnZVNlc3Npb24oY29uc3QgRnVuY3Rpb248dm9pZChXZWJD
b3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24mKT4mKTsKICAgICBXZWJDb3JlOjpOZXR3b3JrU3Rv
cmFnZVNlc3Npb24qIHN0b3JhZ2VTZXNzaW9uKGNvbnN0IFBBTDo6U2Vzc2lvbklEJikgY29uc3Q7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtTdG9yYWdl
U2Vzc2lvblByb3ZpZGVyLmggYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtT
dG9yYWdlU2Vzc2lvblByb3ZpZGVyLmgKaW5kZXggOGFhOTIwNDRiMjAuLjk1YmIxZDRkMzhiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtTdG9yYWdlU2Vz
c2lvblByb3ZpZGVyLmgKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3Jr
U3RvcmFnZVNlc3Npb25Qcm92aWRlci5oCkBAIC0zMSw2ICszMSwxMCBAQAogI2luY2x1ZGUgPHBh
bC9TZXNzaW9uSUQuaD4KICNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgogCisjaWYgVVNFKFNPVVAp
CisjaW5jbHVkZSAiTmV0d29ya1Nlc3Npb25Tb3VwLmgiCisjZW5kaWYKKwogbmFtZXNwYWNlIFdl
YktpdCB7CiAKIGNsYXNzIE5ldHdvcmtTdG9yYWdlU2Vzc2lvblByb3ZpZGVyIGZpbmFsIDogcHVi
bGljIFdlYkNvcmU6OlN0b3JhZ2VTZXNzaW9uUHJvdmlkZXIgewpAQCAtNDksNiArNTMsMTkgQEAg
cHJpdmF0ZToKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCisjaWYgVVNFKFNPVVAp
CisgICAgU291cFNlc3Npb24qIHNvdXBTZXNzaW9uKCkgY29uc3QgZmluYWwKKyAgICB7CisgICAg
ICAgIGlmICghbV9uZXR3b3JrUHJvY2VzcykKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOwor
CisgICAgICAgIGlmIChhdXRvKiBzZXNzaW9uID0gbV9uZXR3b3JrUHJvY2Vzcy0+bmV0d29ya1Nl
c3Npb24obV9zZXNzaW9uSUQpKQorICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PE5ldHdv
cmtTZXNzaW9uU291cCY+KCpzZXNzaW9uKS5zb3VwU2Vzc2lvbigpOworCisgICAgICAgIHJldHVy
biBudWxscHRyOworICAgIH0KKyNlbmRpZgorCiAgICAgV2Vha1B0cjxOZXR3b3JrUHJvY2Vzcz4g
bV9uZXR3b3JrUHJvY2VzczsKICAgICBQQUw6OlNlc3Npb25JRCBtX3Nlc3Npb25JRDsKIH07CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtQcm9j
ZXNzQ29jb2EubW0gYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtQ
cm9jZXNzQ29jb2EubW0KaW5kZXggMDdiOTYzM2JkNDguLjA3N2YxNmZhNjUwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtQcm9jZXNzQ29jb2Eu
bW0KKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrUHJvY2Vz
c0NvY29hLm1tCkBAIC0xOTksMTAgKzE5OSwxMCBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpjbGVh
ckRpc2tDYWNoZShXYWxsVGltZSBtb2RpZmllZFNpbmNlLCBDb21wbGV0aW9uSGFuZGxlcjx2bwog
ICAgIGF1dG8gZ3JvdXAgPSBtX2NsZWFyQ2FjaGVEaXNwYXRjaEdyb3VwOwogICAgIGRpc3BhdGNo
X2dyb3VwX2FzeW5jKGdyb3VwLCBkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBtYWtlQmxvY2tQ
dHIoW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgbW9kaWZpZWRTaW5jZSwg
Y29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKCkgbXV0YWJs
ZSB7CiAgICAgICAgIGF1dG8gYWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRl
KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgZm9yIChhdXRvJiBzZXNzaW9u
IDogbmV0d29ya1Nlc3Npb25zKCkudmFsdWVzKCkpIHsKLSAgICAgICAgICAgIGlmIChhdXRvKiBj
YWNoZSA9IHNlc3Npb24tPmNhY2hlKCkpCisgICAgICAgIGZvckVhY2hOZXR3b3JrU2Vzc2lvbihb
bW9kaWZpZWRTaW5jZSwgJmFnZ3JlZ2F0b3JdKE5ldHdvcmtTZXNzaW9uJiBzZXNzaW9uKSB7Cisg
ICAgICAgICAgICBpZiAoYXV0byogY2FjaGUgPSBzZXNzaW9uLmNhY2hlKCkpCiAgICAgICAgICAg
ICAgICAgY2FjaGUtPmNsZWFyKG1vZGlmaWVkU2luY2UsIFthZ2dyZWdhdG9yID0gYWdncmVnYXRv
ci5jb3B5UmVmKCldICgpIHsgfSk7Ci0gICAgICAgIH0KKyAgICAgICAgfSk7CiAgICAgfSkuZ2V0
KCkpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2lvcy9O
ZXR3b3JrUHJvY2Vzc0lPUy5tbSBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvaW9zL05l
dHdvcmtQcm9jZXNzSU9TLm1tCmluZGV4IDI5ZGQwODc3YmQ0Li5mZWFkZGJjZDFkMCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9pb3MvTmV0d29ya1Byb2Nlc3NJT1Mu
bW0KKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9pb3MvTmV0d29ya1Byb2Nlc3NJ
T1MubW0KQEAgLTc4LDEwICs3OCwxMCBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpjbGVhckNhY2hl
Rm9yQWxsT3JpZ2lucyh1aW50MzJfdCBjYWNoZXNUb0NsZWFyKQogICAgIFJlc291cmNlQ2FjaGVz
VG9DbGVhciByZXNvdXJjZUNhY2hlc1RvQ2xlYXIgPSBzdGF0aWNfY2FzdDxSZXNvdXJjZUNhY2hl
c1RvQ2xlYXI+KGNhY2hlc1RvQ2xlYXIpOwogICAgIGlmIChyZXNvdXJjZUNhY2hlc1RvQ2xlYXIg
PT0gSW5NZW1vcnlSZXNvdXJjZUNhY2hlc09ubHkpCiAgICAgICAgIHJldHVybjsKLSAgICBmb3Ig
KGF1dG8mIHNlc3Npb24gOiBuZXR3b3JrU2Vzc2lvbnMoKS52YWx1ZXMoKSkgewotICAgICAgICBp
ZiAoYXV0byogY2FjaGUgPSBzZXNzaW9uLT5jYWNoZSgpKQorICAgIGZvckVhY2hOZXR3b3JrU2Vz
c2lvbihbXShOZXR3b3JrU2Vzc2lvbiYgc2Vzc2lvbikgeworICAgICAgICBpZiAoYXV0byogY2Fj
aGUgPSBzZXNzaW9uLmNhY2hlKCkpCiAgICAgICAgICAgICBjYWNoZS0+Y2xlYXIoKTsKLSAgICB9
CisgICAgfSk7CiB9CiAKIHZvaWQgTmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtSW5pdGlhbGl6ZU5l
dHdvcmtQcm9jZXNzKGNvbnN0IE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJiBwYXJh
bWV0ZXJzKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zb3VwL05l
dHdvcmtQcm9jZXNzTWFpblNvdXAuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9z
b3VwL05ldHdvcmtQcm9jZXNzTWFpblNvdXAuY3BwCmluZGV4IGY3ZDE0NTEwNGNlLi5hZDBiZGFk
NWRjMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdv
cmtQcm9jZXNzTWFpblNvdXAuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
c291cC9OZXR3b3JrUHJvY2Vzc01haW5Tb3VwLmNwcApAQCAtNDEsNyArNDEsNyBAQCBwdWJsaWM6
CiAgICAgewogICAgICAgICAvLyBOZWVkZWQgdG8gZGVzdHJveSB0aGUgU291cFNlc3Npb24gYW5k
IFNvdXBDb29raWVKYXIsIGUuZy4gdG8gYXZvaWQKICAgICAgICAgLy8gbGVha2luZyBTUUxpdGUg
dGVtcG9yYXJ5IGpvdXJuYWxpbmcgZmlsZXMuCi0gICAgICAgIGdsb2JhbE5ldHdvcmtQcm9jZXNz
LT5kZWZhdWx0U3RvcmFnZVNlc3Npb24oKS5jbGVhclNvdXBOZXR3b3JrU2Vzc2lvbigpOworICAg
ICAgICBnbG9iYWxOZXR3b3JrUHJvY2Vzcy0+ZGVzdHJveVNlc3Npb24oUEFMOjpTZXNzaW9uSUQ6
OmRlZmF1bHRTZXNzaW9uSUQoKSk7CiAgICAgfQogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtQcm9jZXNzU291cC5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Byb2Nlc3NTb3VwLmNwcAppbmRleCA3
Yzc4YjBiMzBjMi4uODNjMmYyOGVhNWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3Mvc291cC9OZXR3b3JrUHJvY2Vzc1NvdXAuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrUHJvY2Vzc1NvdXAuY3BwCkBAIC0yOSw3ICsyOSw3
IEBACiAKICNpbmNsdWRlICJOZXR3b3JrQ2FjaGUuaCIKICNpbmNsdWRlICJOZXR3b3JrUHJvY2Vz
c0NyZWF0aW9uUGFyYW1ldGVycy5oIgotI2luY2x1ZGUgIk5ldHdvcmtTZXNzaW9uLmgiCisjaW5j
bHVkZSAiTmV0d29ya1Nlc3Npb25Tb3VwLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VDYWNoZXNUb0Ns
ZWFyLmgiCiAjaW5jbHVkZSAiV2ViQ29va2llTWFuYWdlci5oIgogI2luY2x1ZGUgIldlYktpdENh
Y2hlZFJlc29sdmVyLmgiCkBAIC05OSw4ICs5OSw4IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OnVz
ZXJQcmVmZXJyZWRMYW5ndWFnZXNDaGFuZ2VkKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBsYW5ndWFn
CiB7CiAgICAgYXV0byBhY2NlcHRMYW5ndWFnZXMgPSBidWlsZEFjY2VwdExhbmd1YWdlcyhsYW5n
dWFnZXMpOwogICAgIFNvdXBOZXR3b3JrU2Vzc2lvbjo6c2V0SW5pdGlhbEFjY2VwdExhbmd1YWdl
cyhhY2NlcHRMYW5ndWFnZXMpOwotICAgIGZvckVhY2hOZXR3b3JrU3RvcmFnZVNlc3Npb24oWyZh
Y2NlcHRMYW5ndWFnZXNdKGNvbnN0IGF1dG8mIHNlc3Npb24pIHsKLSAgICAgICAgc2Vzc2lvbi5z
b3VwTmV0d29ya1Nlc3Npb24oKS5zZXRBY2NlcHRMYW5ndWFnZXMoYWNjZXB0TGFuZ3VhZ2VzKTsK
KyAgICBmb3JFYWNoTmV0d29ya1Nlc3Npb24oWyZhY2NlcHRMYW5ndWFnZXNdKGNvbnN0IGF1dG8m
IHNlc3Npb24pIHsKKyAgICAgICAgc3RhdGljX2Nhc3Q8Y29uc3QgTmV0d29ya1Nlc3Npb25Tb3Vw
Jj4oc2Vzc2lvbikuc291cE5ldHdvcmtTZXNzaW9uKCkuc2V0QWNjZXB0TGFuZ3VhZ2VzKGFjY2Vw
dExhbmd1YWdlcyk7CiAgICAgfSk7CiB9CiAKQEAgLTEzMyw3ICsxMzMsNyBAQCB2b2lkIE5ldHdv
cmtQcm9jZXNzOjpwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2Vzcyhjb25zdCBOZXR3b3Jr
UHJvY2Vzc0NyZWF0aQogCiBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VT
ZXNzaW9uPiBOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1DcmVhdGVEZWZhdWx0U3RvcmFnZVNlc3Np
b24oKSBjb25zdAogewotICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPFdlYkNvcmU6Ok5ldHdv
cmtTdG9yYWdlU2Vzc2lvbj4oUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSwgc3Rk
OjptYWtlX3VuaXF1ZTxTb3VwTmV0d29ya1Nlc3Npb24+KFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0
U2Vzc2lvbklEKCkpKTsKKyAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxXZWJDb3JlOjpOZXR3
b3JrU3RvcmFnZVNlc3Npb24+KFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpOwog
fQogCiB2b2lkIE5ldHdvcmtQcm9jZXNzOjpzZXRJZ25vcmVUTFNFcnJvcnMoYm9vbCBpZ25vcmVU
TFNFcnJvcnMpCkBAIC0xNTcsMTAgKzE1NywxMCBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpjbGVh
ckNhY2hlRm9yQWxsT3JpZ2lucyh1aW50MzJfdCBjYWNoZXNUb0NsZWFyKQogdm9pZCBOZXR3b3Jr
UHJvY2Vzczo6Y2xlYXJEaXNrQ2FjaGUoV2FsbFRpbWUgbW9kaWZpZWRTaW5jZSwgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIGF1dG8gYWdncmVn
YXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpKTsKLSAgICBmb3IgKGF1dG8mIHNlc3Npb24gOiBuZXR3b3JrU2Vzc2lvbnMoKS52YWx1ZXMo
KSkgewotICAgICAgICBpZiAoYXV0byogY2FjaGUgPSBzZXNzaW9uLT5jYWNoZSgpKQorICAgIGZv
ckVhY2hOZXR3b3JrU2Vzc2lvbihbbW9kaWZpZWRTaW5jZSwgJmFnZ3JlZ2F0b3JdKE5ldHdvcmtT
ZXNzaW9uJiBzZXNzaW9uKSB7CisgICAgICAgIGlmIChhdXRvKiBjYWNoZSA9IHNlc3Npb24uY2Fj
aGUoKSkKICAgICAgICAgICAgIGNhY2hlLT5jbGVhcihtb2RpZmllZFNpbmNlLCBbYWdncmVnYXRv
ciA9IGFnZ3JlZ2F0b3IuY29weVJlZigpXSAoKSB7IH0pOwotICAgIH0KKyAgICB9KTsKIH0KIAog
dm9pZCBOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1UZXJtaW5hdGUoKQpAQCAtMTcxLDggKzE3MSw4
IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtVGVybWluYXRlKCkKIHZvaWQgTmV0d29y
a1Byb2Nlc3M6OnNldE5ldHdvcmtQcm94eVNldHRpbmdzKGNvbnN0IFNvdXBOZXR3b3JrUHJveHlT
ZXR0aW5ncyYgc2V0dGluZ3MpCiB7CiAgICAgU291cE5ldHdvcmtTZXNzaW9uOjpzZXRQcm94eVNl
dHRpbmdzKHNldHRpbmdzKTsKLSAgICBmb3JFYWNoTmV0d29ya1N0b3JhZ2VTZXNzaW9uKFtdKGNv
bnN0IGF1dG8mIHNlc3Npb24pIHsKLSAgICAgICAgc2Vzc2lvbi5zb3VwTmV0d29ya1Nlc3Npb24o
KS5zZXR1cFByb3h5KCk7CisgICAgZm9yRWFjaE5ldHdvcmtTZXNzaW9uKFtdKGNvbnN0IGF1dG8m
IHNlc3Npb24pIHsKKyAgICAgICAgc3RhdGljX2Nhc3Q8Y29uc3QgTmV0d29ya1Nlc3Npb25Tb3Vw
Jj4oc2Vzc2lvbikuc291cE5ldHdvcmtTZXNzaW9uKCkuc2V0dXBQcm94eSgpOwogICAgIH0pOwog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29y
a1Nlc3Npb25Tb3VwLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3
b3JrU2Vzc2lvblNvdXAuY3BwCmluZGV4IGY3ZGVjNzA0OGQxLi43MzU1MjU3YmVkYSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtTZXNzaW9uU291
cC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtTZXNz
aW9uU291cC5jcHAKQEAgLTQxLDEzICs0MSwxOSBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsK
IAogTmV0d29ya1Nlc3Npb25Tb3VwOjpOZXR3b3JrU2Vzc2lvblNvdXAoTmV0d29ya1Byb2Nlc3Mm
IG5ldHdvcmtQcm9jZXNzLCBOZXR3b3JrU2Vzc2lvbkNyZWF0aW9uUGFyYW1ldGVycyYmIHBhcmFt
ZXRlcnMpCiAgICAgOiBOZXR3b3JrU2Vzc2lvbihuZXR3b3JrUHJvY2VzcywgcGFyYW1ldGVycykK
KyAgICAsIG1fbmV0d29ya1Nlc3Npb24oc3RkOjptYWtlX3VuaXF1ZTxTb3VwTmV0d29ya1Nlc3Np
b24+KG1fc2Vzc2lvbklEKSkKIHsKLSAgICBuZXR3b3JrU3RvcmFnZVNlc3Npb24oKS0+c2V0Q29v
a2llT2JzZXJ2ZXJIYW5kbGVyKFt0aGlzXSB7Ci0gICAgICAgIHRoaXMtPm5ldHdvcmtQcm9jZXNz
KCkuc3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2VyPigpLT5ub3RpZnlDb29raWVzRGlkQ2hhbmdl
KG1fc2Vzc2lvbklEKTsKLSAgICB9KTsKKyAgICBhdXRvKiBzdG9yYWdlU2Vzc2lvbiA9IG5ldHdv
cmtTdG9yYWdlU2Vzc2lvbigpOworICAgIEFTU0VSVChzdG9yYWdlU2Vzc2lvbik7CiAKICAgICBp
ZiAoIXBhcmFtZXRlcnMuY29va2llUGVyc2lzdGVudFN0b3JhZ2VQYXRoLmlzRW1wdHkoKSkKLSAg
ICAgICAgdGhpcy0+bmV0d29ya1Byb2Nlc3MoKS5zdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXI+
KCktPnNldENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlKG1fc2Vzc2lvbklELCBwYXJhbWV0ZXJzLmNv
b2tpZVBlcnNpc3RlbnRTdG9yYWdlUGF0aCwgcGFyYW1ldGVycy5jb29raWVQZXJzaXN0ZW50U3Rv
cmFnZVR5cGUpOworICAgICAgICBzZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShwYXJhbWV0ZXJz
LmNvb2tpZVBlcnNpc3RlbnRTdG9yYWdlUGF0aCwgcGFyYW1ldGVycy5jb29raWVQZXJzaXN0ZW50
U3RvcmFnZVR5cGUpOworICAgIGVsc2UKKyAgICAgICAgbV9uZXR3b3JrU2Vzc2lvbi0+c2V0Q29v
a2llSmFyKHN0b3JhZ2VTZXNzaW9uLT5jb29raWVTdG9yYWdlKCkpOworCisgICAgc3RvcmFnZVNl
c3Npb24tPnNldENvb2tpZU9ic2VydmVySGFuZGxlcihbdGhpc10geworICAgICAgICB0aGlzLT5u
ZXR3b3JrUHJvY2VzcygpLnN1cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlcj4oKS0+bm90aWZ5Q29v
a2llc0RpZENoYW5nZShtX3Nlc3Npb25JRCk7CisgICAgfSk7CiB9CiAKIE5ldHdvcmtTZXNzaW9u
U291cDo6fk5ldHdvcmtTZXNzaW9uU291cCgpCkBAIC01OCw3ICs2NCwzMSBAQCBOZXR3b3JrU2Vz
c2lvblNvdXA6On5OZXR3b3JrU2Vzc2lvblNvdXAoKQogCiBTb3VwU2Vzc2lvbiogTmV0d29ya1Nl
c3Npb25Tb3VwOjpzb3VwU2Vzc2lvbigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG5ldHdvcmtTdG9y
YWdlU2Vzc2lvbigpLT5zb3VwTmV0d29ya1Nlc3Npb24oKS5zb3VwU2Vzc2lvbigpOworICAgIHJl
dHVybiBtX25ldHdvcmtTZXNzaW9uLT5zb3VwU2Vzc2lvbigpOworfQorCit2b2lkIE5ldHdvcmtT
ZXNzaW9uU291cDo6c2V0Q29va2llUGVyc2lzdGVudFN0b3JhZ2UoY29uc3QgU3RyaW5nJiBzdG9y
YWdlUGF0aCwgU291cENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlVHlwZSBzdG9yYWdlVHlwZSkKK3sK
KyAgICBhdXRvKiBzdG9yYWdlU2Vzc2lvbiA9IG5ldHdvcmtTdG9yYWdlU2Vzc2lvbigpOworICAg
IGlmICghc3RvcmFnZVNlc3Npb24pCisgICAgICAgIHJldHVybjsKKworICAgIEdSZWZQdHI8U291
cENvb2tpZUphcj4gamFyOworICAgIHN3aXRjaCAoc3RvcmFnZVR5cGUpIHsKKyAgICBjYXNlIFNv
dXBDb29raWVQZXJzaXN0ZW50U3RvcmFnZVR5cGU6OlRleHQ6CisgICAgICAgIGphciA9IGFkb3B0
R1JlZihzb3VwX2Nvb2tpZV9qYXJfdGV4dF9uZXcoc3RvcmFnZVBhdGgudXRmOCgpLmRhdGEoKSwg
RkFMU0UpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTb3VwQ29va2llUGVyc2lzdGVudFN0
b3JhZ2VUeXBlOjpTUUxpdGU6CisgICAgICAgIGphciA9IGFkb3B0R1JlZihzb3VwX2Nvb2tpZV9q
YXJfZGJfbmV3KHN0b3JhZ2VQYXRoLnV0ZjgoKS5kYXRhKCksIEZBTFNFKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0K
KworICAgIHNvdXBfY29va2llX2phcl9zZXRfYWNjZXB0X3BvbGljeShqYXIuZ2V0KCksIHNvdXBf
Y29va2llX2phcl9nZXRfYWNjZXB0X3BvbGljeShzdG9yYWdlU2Vzc2lvbi0+Y29va2llU3RvcmFn
ZSgpKSk7CisgICAgc3RvcmFnZVNlc3Npb24tPnNldENvb2tpZVN0b3JhZ2UoV1RGTW92ZShqYXIp
KTsKKworICAgIG1fbmV0d29ya1Nlc3Npb24tPnNldENvb2tpZUphcihzdG9yYWdlU2Vzc2lvbi0+
Y29va2llU3RvcmFnZSgpKTsKIH0KIAogdm9pZCBOZXR3b3JrU2Vzc2lvblNvdXA6OmNsZWFyQ3Jl
ZGVudGlhbHMoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zb3Vw
L05ldHdvcmtTZXNzaW9uU291cC5oIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zb3Vw
L05ldHdvcmtTZXNzaW9uU291cC5oCmluZGV4IGMzMTMwNTY4MjYyLi5kZjQzOTE4YzA3YiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtTZXNzaW9u
U291cC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrU2Vz
c2lvblNvdXAuaApAQCAtMjYsOSArMjYsMTQgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAi
TmV0d29ya1Nlc3Npb24uaCIKKyNpbmNsdWRlICJTb3VwQ29va2llUGVyc2lzdGVudFN0b3JhZ2VU
eXBlLmgiCiAKIHR5cGVkZWYgc3RydWN0IF9Tb3VwU2Vzc2lvbiBTb3VwU2Vzc2lvbjsKIAorbmFt
ZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgU291cE5ldHdvcmtTZXNzaW9uOworfQorCiBuYW1lc3Bh
Y2UgV2ViS2l0IHsKIAogY2xhc3MgTmV0d29ya1NvY2tldENoYW5uZWw7CkBAIC00MywxNCArNDgs
MTkgQEAgcHVibGljOgogICAgIH0KICAgICB+TmV0d29ya1Nlc3Npb25Tb3VwKCk7CiAKKyAgICBX
ZWJDb3JlOjpTb3VwTmV0d29ya1Nlc3Npb24mIHNvdXBOZXR3b3JrU2Vzc2lvbigpIGNvbnN0IHsg
cmV0dXJuICptX25ldHdvcmtTZXNzaW9uOyB9CiAgICAgU291cFNlc3Npb24qIHNvdXBTZXNzaW9u
KCkgY29uc3Q7CiAKKyAgICB2b2lkIHNldENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlKGNvbnN0IFN0
cmluZyYgc3RvcmFnZVBhdGgsIFNvdXBDb29raWVQZXJzaXN0ZW50U3RvcmFnZVR5cGUpOworCiBw
cml2YXRlOgogICAgIE5ldHdvcmtTZXNzaW9uU291cChOZXR3b3JrUHJvY2VzcyYsIE5ldHdvcmtT
ZXNzaW9uQ3JlYXRpb25QYXJhbWV0ZXJzJiYpOwogCiAgICAgc3RkOjp1bmlxdWVfcHRyPFdlYlNv
Y2tldFRhc2s+IGNyZWF0ZVdlYlNvY2tldFRhc2soTmV0d29ya1NvY2tldENoYW5uZWwmLCBjb25z
dCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBTdHJpbmcmIHByb3RvY29sKSBvdmVy
cmlkZTsKIAogICAgIHZvaWQgY2xlYXJDcmVkZW50aWFscygpIG92ZXJyaWRlOworCisgICAgc3Rk
Ojp1bmlxdWVfcHRyPFdlYkNvcmU6OlNvdXBOZXR3b3JrU2Vzc2lvbj4gbV9uZXR3b3JrU2Vzc2lv
bjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAo=
</data>
<flag name="review"
          id="390552"
          type_id="1"
          status="+"
          setter="mcatanzaro"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>374777</attachid>
            <date>2019-07-24 07:59:45 -0700</date>
            <delta_ts>2019-07-24 08:09:00 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>wk2-soup-session-rework.diff</filename>
            <type>text/plain</type>
            <size>45460</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBlN2M1OGE3Yzc2Ni4uMmVlM2EzMTI0YzUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzNSBAQAorMjAxOS0wNy0yNCAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGln
YWxpYS5jb20+CisKKyAgICAgICAgW1NPVVBdIE1vdmUgU291cE5ldHdvcmtTZXNzaW9uIG93bmVy
c2hpcCBmcm9tIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiB0byBOZXR3b3JrU2Vzc2lvbgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAwMDc2CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVtb3ZlIHRoZSBTb3Vw
TmV0d29ya1Nlc3Npb24gZnJvbSBOZXR3b3JrU3RvcmFnZVNlc3Npb24uCisKKyAgICAgICAgKiBw
bGF0Zm9ybS9uZXR3b3JrL05ldHdvcmtTdG9yYWdlU2Vzc2lvbi5oOgorICAgICAgICAoV2ViQ29y
ZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpjb29raWVTdG9yYWdlIGNvbnN0KTogUmV0dXJuIHRo
ZSBjb29raWUgamFyLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvU3RvcmFnZVNlc3Npb25Q
cm92aWRlci5oOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVNlc3Npb25Qcm92aWRlcjo6c291
cFNlc3Npb24gY29uc3QpOiBUZW1wb3JhcnkgYWRkIHRoaXMgdmlydHVhbCBtZXRob2QgdGhhdCBp
cyByZXF1aXJlZCBieQorICAgICAgICBTb2NrZXRTdHJlYW1IYW5kbGVJbXBsU291cC4gSXQgd2ls
bCBiZSByZW1vdmVkIG9uY2Ugd2Ugc3dpdGNoIHRvIGxpYnNvdXAgV2ViU29ja2V0cyBBUEkgc29v
bi4KKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvRE5TUmVzb2x2ZVF1ZXVlU291cC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpnbG9iYWxEZWZhdWx0U291cFNlc3Npb25BY2Nlc3Nvcik6
IFJld29yayB0aGUgYWNjZXNzb3IgdG8gcmV0dXJuIHRoZSBTb3VwU2Vzc2lvbiBkaXJlY3RseSBz
aW5jZQorICAgICAgICB0aGF0J3Mgd2hhdCB3ZSByZWFsbHkgd2FudC4KKyAgICAgICAgKFdlYkNv
cmU6OkROU1Jlc29sdmVRdWV1ZVNvdXA6OnNldEdsb2JhbERlZmF1bHRTb3VwU2Vzc2lvbkFjY2Vz
c29yKToKKyAgICAgICAgKFdlYkNvcmU6OkROU1Jlc29sdmVRdWV1ZVNvdXA6OnVwZGF0ZUlzVXNp
bmdQcm94eSk6CisgICAgICAgIChXZWJDb3JlOjpETlNSZXNvbHZlUXVldWVTb3VwOjpwbGF0Zm9y
bVJlc29sdmUpOgorICAgICAgICAoV2ViQ29yZTo6RE5TUmVzb2x2ZVF1ZXVlU291cDo6cmVzb2x2
ZSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9zb3VwL0ROU1Jlc29sdmVRdWV1ZVNvdXAu
aDoKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvTmV0d29ya1N0b3JhZ2VTZXNzaW9u
U291cC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb246Ok5ldHdv
cmtTdG9yYWdlU2Vzc2lvbik6IENyZWF0ZSBhbmQgc2V0dXAgdGhlIGRlZmF1bHQgY29va2llIGph
ci4KKyAgICAgICAgKFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6fk5ldHdvcmtTdG9y
YWdlU2Vzc2lvbik6IE9ubHkgZGlzY29ubmVjdCB0aGUgY29va2llIGphciBzaWduYWxzLgorICAg
ICAgICAoV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpzZXRDb29raWVTdG9yYWdlKTog
VXBkYXRlIHRoZSBjb29raWUgamFyLCBub3cgd2Uga25vdyBpdCdzIGFsd2F5cyBhIG5ldyBvbmUu
CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9zb3VwL1NvY2tldFN0cmVhbUhhbmRsZUltcGxT
b3VwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZUltcGw6OmNyZWF0
ZSk6IFVzZSB0aGUgbmV3IHZpcnR1YWwgbWV0aG9kIGZyb20gU3RvcmFnZVNlc3Npb25Qcm92aWRl
ciB0byBnZXQgdGhlIFNvdXBTZXNzaW9uLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvc291
cC9Tb3VwTmV0d29ya1Nlc3Npb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6U291cE5ldHdvcmtT
ZXNzaW9uOjpTb3VwTmV0d29ya1Nlc3Npb24pOiBSZW1vdmUgdGhlIFNvdXBDb29raWVKYXIgcGFy
YW1ldGVyLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvc291cC9Tb3VwTmV0d29ya1Nlc3Np
b24uaDoKKwogMjAxOS0wNy0yMyAgSnVzdGluIEZhbiAgPGp1c3Rpbl9mYW5AYXBwbGUuY29tPgog
CiAgICAgICAgIFtXZWJHUFVdIEltcGxlbWVudCBlcnJvcnMgZm9yIEdQVVJlbmRlclBpcGVsaW5l
IGNyZWF0aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL05l
dHdvcmtTdG9yYWdlU2Vzc2lvbi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9O
ZXR3b3JrU3RvcmFnZVNlc3Npb24uaAppbmRleCA1OGRhODc4OTA3Zi4uZjI4MWM1NGQ3OTYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvTmV0d29ya1N0b3JhZ2VT
ZXNzaW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9OZXR3b3JrU3Rv
cmFnZVNlc3Npb24uaApAQCAtNjUsNyArNjUsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFz
cyBDdXJsUHJveHlTZXR0aW5nczsKIGNsYXNzIE5ldHdvcmtpbmdDb250ZXh0OwogY2xhc3MgUmVz
b3VyY2VSZXF1ZXN0OwotY2xhc3MgU291cE5ldHdvcmtTZXNzaW9uOwogCiBzdHJ1Y3QgQ29va2ll
Owogc3RydWN0IENvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFByb3h5OwpAQCAtOTcsMTMgKzk2LDEx
IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCBSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3Rv
cmFnZVJlZj4gY29va2llU3RvcmFnZSgpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRp
YyB2b2lkIHNldFN0b3JhZ2VBY2Nlc3NBUElFbmFibGVkKGJvb2wpOwogI2VsaWYgVVNFKFNPVVAp
Ci0gICAgV0VCQ09SRV9FWFBPUlQgTmV0d29ya1N0b3JhZ2VTZXNzaW9uKFBBTDo6U2Vzc2lvbklE
LCBzdGQ6OnVuaXF1ZV9wdHI8U291cE5ldHdvcmtTZXNzaW9uPiYmKTsKKyAgICBXRUJDT1JFX0VY
UE9SVCBOZXR3b3JrU3RvcmFnZVNlc3Npb24oUEFMOjpTZXNzaW9uSUQpOwogICAgIH5OZXR3b3Jr
U3RvcmFnZVNlc3Npb24oKTsKIAotICAgIFNvdXBOZXR3b3JrU2Vzc2lvbiYgc291cE5ldHdvcmtT
ZXNzaW9uKCkgY29uc3Q7Ci0gICAgdm9pZCBjbGVhclNvdXBOZXR3b3JrU2Vzc2lvbigpOwotICAg
IFNvdXBDb29raWVKYXIqIGNvb2tpZVN0b3JhZ2UoKSBjb25zdDsKLSAgICB2b2lkIHNldENvb2tp
ZVN0b3JhZ2UoU291cENvb2tpZUphciopOworICAgIFNvdXBDb29raWVKYXIqIGNvb2tpZVN0b3Jh
Z2UoKSBjb25zdCB7IHJldHVybiBtX2Nvb2tpZVN0b3JhZ2UuZ2V0KCk7IH0KKyAgICB2b2lkIHNl
dENvb2tpZVN0b3JhZ2UoR1JlZlB0cjxTb3VwQ29va2llSmFyPiYmKTsKICAgICB2b2lkIHNldENv
b2tpZU9ic2VydmVySGFuZGxlcihGdW5jdGlvbjx2b2lkICgpPiYmKTsKICAgICB2b2lkIGdldENy
ZWRlbnRpYWxGcm9tUGVyc2lzdGVudFN0b3JhZ2UoY29uc3QgUHJvdGVjdGlvblNwYWNlJiwgR0Nh
bmNlbGxhYmxlKiwgRnVuY3Rpb248dm9pZCAoQ3JlZGVudGlhbCYmKT4mJiBjb21wbGV0aW9uSGFu
ZGxlcik7CiAgICAgdm9pZCBzYXZlQ3JlZGVudGlhbFRvUGVyc2lzdGVudFN0b3JhZ2UoY29uc3Qg
UHJvdGVjdGlvblNwYWNlJiwgY29uc3QgQ3JlZGVudGlhbCYpOwpAQCAtMTcxLDcgKzE2OCw3IEBA
IHByaXZhdGU6CiAjZWxpZiBVU0UoU09VUCkKICAgICBzdGF0aWMgdm9pZCBjb29raWVzRGlkQ2hh
bmdlKE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiopOwogCi0gICAgbXV0YWJsZSBzdGQ6OnVuaXF1ZV9w
dHI8U291cE5ldHdvcmtTZXNzaW9uPiBtX3Nlc3Npb247CisgICAgR1JlZlB0cjxTb3VwQ29va2ll
SmFyPiBtX2Nvb2tpZVN0b3JhZ2U7CiAgICAgRnVuY3Rpb248dm9pZCAoKT4gbV9jb29raWVPYnNl
cnZlckhhbmRsZXI7CiAjZWxpZiBVU0UoQ1VSTCkKICAgICBVbmlxdWVSZWY8Q29va2llSmFyQ3Vy
bD4gbV9jb29raWVTdG9yYWdlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9TdG9yYWdlU2Vzc2lvblByb3ZpZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL1N0b3JhZ2VTZXNzaW9uUHJvdmlkZXIuaAppbmRleCAwYzE1NTViNjZhMC4uMzgw
MTA1MDExYjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvU3Rv
cmFnZVNlc3Npb25Qcm92aWRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvU3RvcmFnZVNlc3Npb25Qcm92aWRlci5oCkBAIC0yNyw2ICsyNywxMCBAQAogCiAjaW5jbHVk
ZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CiAKKyNpZiBVU0UoU09VUCkKK3R5cGVkZWYg
c3RydWN0IF9Tb3VwU2Vzc2lvbiBTb3VwU2Vzc2lvbjsKKyNlbmRpZgorCiBuYW1lc3BhY2UgUEFM
IHsKIGNsYXNzIFNlc3Npb25JRDsKIH0KQEAgLTM5LDYgKzQzLDExIEBAIGNsYXNzIFN0b3JhZ2VT
ZXNzaW9uUHJvdmlkZXIgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8U3RvcmFnZVNlc3Np
b25Qcm92aWRlCiBwdWJsaWM6CiAgICAgdmlydHVhbCBOZXR3b3JrU3RvcmFnZVNlc3Npb24qIHN0
b3JhZ2VTZXNzaW9uKCkgY29uc3QgPSAwOwogCisjaWYgVVNFKFNPVVApCisgICAgLy8gRklYTUU6
IFRoaXMgaXMgb25seSByZXF1aXJlZCBieSBTb2NrZXRTdHJlYW1IYW5kbGVJbXBsU291cCwgcmVt
b3ZlIGl0IHdoZW4gd2Ugc3dpdGNoIHRvIGxpYnNvdXAgV2ViU29ja2V0cyBBUEkuCisgICAgdmly
dHVhbCBTb3VwU2Vzc2lvbiogc291cFNlc3Npb24oKSBjb25zdCB7IHJldHVybiBudWxscHRyOyB9
CisjZW5kaWYKKwogICAgIHZpcnR1YWwgflN0b3JhZ2VTZXNzaW9uUHJvdmlkZXIoKSB7IH0KIH07
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9ETlNS
ZXNvbHZlUXVldWVTb3VwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291
cC9ETlNSZXNvbHZlUXVldWVTb3VwLmNwcAppbmRleCBkMjM5Nzc1NDFhZi4uNGJiMzBhODcxZGUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9ETlNSZXNv
bHZlUXVldWVTb3VwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3Nv
dXAvRE5TUmVzb2x2ZVF1ZXVlU291cC5jcHAKQEAgLTI5LDggKzI5LDYgQEAKIAogI2lmIFVTRShT
T1VQKQogCi0jaW5jbHVkZSAiTmV0d29ya1N0b3JhZ2VTZXNzaW9uLmgiCi0jaW5jbHVkZSAiU291
cE5ldHdvcmtTZXNzaW9uLmgiCiAjaW5jbHVkZSA8bGlic291cC9zb3VwLmg+CiAjaW5jbHVkZSA8
d3RmL0NvbXBsZXRpb25IYW5kbGVyLmg+CiAjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uLmg+CkBAIC03
OCwyMSArNzYsMjEgQEAgc3RhdGljIHZvaWQgcHJveHlSZXNvbHZlZEZvckh0dHBzVXJpQ2FsbGJh
Y2soR09iamVjdCogc291cmNlLCBHQXN5bmNSZXN1bHQqIHJlc3UKICAgICBkaWRSZXNvbHZlUHJv
eHkoR19QUk9YWV9SRVNPTFZFUihzb3VyY2UpLCByZXN1bHQsICZpc1VzaW5nSHR0cHNQcm94eSwg
c3RhdGljX2Nhc3Q8Ym9vbCo+KHVzZXJEYXRhKSk7CiB9CiAKLUZ1bmN0aW9uPE5ldHdvcmtTdG9y
YWdlU2Vzc2lvbiYoKT4mIGdsb2JhbERlZmF1bHROZXR3b3JrU3RvcmFnZVNlc3Npb25BY2Nlc3Nv
cigpCitGdW5jdGlvbjxTb3VwU2Vzc2lvbiooKT4mIGdsb2JhbERlZmF1bHRTb3VwU2Vzc2lvbkFj
Y2Vzc29yKCkKIHsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8RnVuY3Rpb248TmV0d29ya1N0
b3JhZ2VTZXNzaW9uJigpPj4gYWNjZXNzb3I7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEZ1
bmN0aW9uPFNvdXBTZXNzaW9uKigpPj4gYWNjZXNzb3I7CiAgICAgcmV0dXJuIGFjY2Vzc29yLmdl
dCgpOwogfQogCi12b2lkIEROU1Jlc29sdmVRdWV1ZVNvdXA6OnNldEdsb2JhbERlZmF1bHROZXR3
b3JrU3RvcmFnZVNlc3Npb25BY2Nlc3NvcihGdW5jdGlvbjxOZXR3b3JrU3RvcmFnZVNlc3Npb24m
KCk+JiYgYWNjZXNzb3IpCit2b2lkIEROU1Jlc29sdmVRdWV1ZVNvdXA6OnNldEdsb2JhbERlZmF1
bHRTb3VwU2Vzc2lvbkFjY2Vzc29yKEZ1bmN0aW9uPFNvdXBTZXNzaW9uKigpPiYmIGFjY2Vzc29y
KQogewotICAgIGdsb2JhbERlZmF1bHROZXR3b3JrU3RvcmFnZVNlc3Npb25BY2Nlc3NvcigpID0g
V1RGTW92ZShhY2Nlc3Nvcik7CisgICAgZ2xvYmFsRGVmYXVsdFNvdXBTZXNzaW9uQWNjZXNzb3Io
KSA9IFdURk1vdmUoYWNjZXNzb3IpOwogfQogCiB2b2lkIEROU1Jlc29sdmVRdWV1ZVNvdXA6OnVw
ZGF0ZUlzVXNpbmdQcm94eSgpCiB7CiAgICAgR1JlZlB0cjxHUHJveHlSZXNvbHZlcj4gcmVzb2x2
ZXI7Ci0gICAgZ19vYmplY3RfZ2V0KGdsb2JhbERlZmF1bHROZXR3b3JrU3RvcmFnZVNlc3Npb25B
Y2Nlc3NvcigpKCkuc291cE5ldHdvcmtTZXNzaW9uKCkuc291cFNlc3Npb24oKSwgInByb3h5LXJl
c29sdmVyIiwgJnJlc29sdmVyLm91dFB0cigpLCBudWxscHRyKTsKKyAgICBnX29iamVjdF9nZXQo
Z2xvYmFsRGVmYXVsdFNvdXBTZXNzaW9uQWNjZXNzb3IoKSgpLCAicHJveHktcmVzb2x2ZXIiLCAm
cmVzb2x2ZXIub3V0UHRyKCksIG51bGxwdHIpOwogICAgIEFTU0VSVChyZXNvbHZlcik7CiAKICAg
ICBnX3Byb3h5X3Jlc29sdmVyX2xvb2t1cF9hc3luYyhyZXNvbHZlci5nZXQoKSwgImh0dHA6Ly9l
eGFtcGxlLmNvbS8iLCBudWxscHRyLCBwcm94eVJlc29sdmVkRm9ySHR0cFVyaUNhbGxiYWNrLCAm
bV9pc1VzaW5nUHJveHkpOwpAQCAtMTc1LDcgKzE3Myw3IEBAIHZvaWQgRE5TUmVzb2x2ZVF1ZXVl
U291cDo6cGxhdGZvcm1SZXNvbHZlKGNvbnN0IFN0cmluZyYgaG9zdG5hbWUpCiB7CiAgICAgQVNT
RVJUKGlzTWFpblRocmVhZCgpKTsKIAotICAgIHNvdXBfc2Vzc2lvbl9wcmVmZXRjaF9kbnMoZ2xv
YmFsRGVmYXVsdE5ldHdvcmtTdG9yYWdlU2Vzc2lvbkFjY2Vzc29yKCkoKS5zb3VwTmV0d29ya1Nl
c3Npb24oKS5zb3VwU2Vzc2lvbigpLCBob3N0bmFtZS51dGY4KCkuZGF0YSgpLCBudWxscHRyLCBy
ZXNvbHZlZENhbGxiYWNrLCBudWxscHRyKTsKKyAgICBzb3VwX3Nlc3Npb25fcHJlZmV0Y2hfZG5z
KGdsb2JhbERlZmF1bHRTb3VwU2Vzc2lvbkFjY2Vzc29yKCkoKSwgaG9zdG5hbWUudXRmOCgpLmRh
dGEoKSwgbnVsbHB0ciwgcmVzb2x2ZWRDYWxsYmFjaywgbnVsbHB0cik7CiB9CiAKIHZvaWQgRE5T
UmVzb2x2ZVF1ZXVlU291cDo6cmVzb2x2ZShjb25zdCBTdHJpbmcmIGhvc3RuYW1lLCB1aW50NjRf
dCBpZGVudGlmaWVyLCBETlNDb21wbGV0aW9uSGFuZGxlciYmIGNvbXBsZXRpb25IYW5kbGVyKQpA
QCAtMTg0LDcgKzE4Miw3IEBAIHZvaWQgRE5TUmVzb2x2ZVF1ZXVlU291cDo6cmVzb2x2ZShjb25z
dCBTdHJpbmcmIGhvc3RuYW1lLCB1aW50NjRfdCBpZGVudGlmaWVyLCBECiAKICAgICBhdXRvIGFk
ZHJlc3MgPSBhZG9wdEdSZWYoc291cF9hZGRyZXNzX25ldyhob3N0bmFtZS51dGY4KCkuZGF0YSgp
LCAwKSk7CiAgICAgYXV0byBjYW5jZWxsYWJsZSA9IGFkb3B0R1JlZihnX2NhbmNlbGxhYmxlX25l
dygpKTsKLSAgICBzb3VwX2FkZHJlc3NfcmVzb2x2ZV9hc3luYyhhZGRyZXNzLmdldCgpLCBzb3Vw
X3Nlc3Npb25fZ2V0X2FzeW5jX2NvbnRleHQoV2ViQ29yZTo6Z2xvYmFsRGVmYXVsdE5ldHdvcmtT
dG9yYWdlU2Vzc2lvbkFjY2Vzc29yKCkoKS5zb3VwTmV0d29ya1Nlc3Npb24oKS5zb3VwU2Vzc2lv
bigpKSwgY2FuY2VsbGFibGUuZ2V0KCksIHJlc29sdmVkV2l0aE9ic2VydmVyQ2FsbGJhY2ssIHRo
aXMpOworICAgIHNvdXBfYWRkcmVzc19yZXNvbHZlX2FzeW5jKGFkZHJlc3MuZ2V0KCksIHNvdXBf
c2Vzc2lvbl9nZXRfYXN5bmNfY29udGV4dChnbG9iYWxEZWZhdWx0U291cFNlc3Npb25BY2Nlc3Nv
cigpKCkpLCBjYW5jZWxsYWJsZS5nZXQoKSwgcmVzb2x2ZWRXaXRoT2JzZXJ2ZXJDYWxsYmFjaywg
dGhpcyk7CiAKICAgICBnX29iamVjdF9zZXRfZGF0YShHX09CSkVDVChhZGRyZXNzLmdldCgpKSwg
ImlkZW50aWZpZXIiLCBHVUlOVF9UT19QT0lOVEVSKGlkZW50aWZpZXIpKTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL0ROU1Jlc29sdmVRdWV1ZVNv
dXAuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9ETlNSZXNvbHZlUXVl
dWVTb3VwLmgKaW5kZXggNTcyMDM0ZjU0YWMuLmNlZTc5ZjkzMzMxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvRE5TUmVzb2x2ZVF1ZXVlU291cC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9ETlNSZXNvbHZlUXVldWVT
b3VwLmgKQEAgLTMwLDYgKzMwLDggQEAKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1
ZGUgPHd0Zi9nbGliL0dSZWZQdHIuaD4KIAordHlwZWRlZiBzdHJ1Y3QgX1NvdXBTZXNzaW9uIFNv
dXBTZXNzaW9uOworCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIE5ldHdvcmtTdG9yYWdl
U2Vzc2lvbjsKQEAgLTM5LDcgKzQxLDcgQEAgcHVibGljOgogICAgIHVzaW5nIENvbXBsZXRpb25B
bmRDYW5jZWxIYW5kbGVycyA9IHN0ZDo6cGFpcjxXZWJDb3JlOjpETlNDb21wbGV0aW9uSGFuZGxl
ciwgR1JlZlB0cjxHQ2FuY2VsbGFibGU+PjsKIAogICAgIEROU1Jlc29sdmVRdWV1ZVNvdXAoKSA9
IGRlZmF1bHQ7Ci0gICAgc3RhdGljIHZvaWQgc2V0R2xvYmFsRGVmYXVsdE5ldHdvcmtTdG9yYWdl
U2Vzc2lvbkFjY2Vzc29yKEZ1bmN0aW9uPE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYoKT4mJik7Cisg
ICAgc3RhdGljIHZvaWQgc2V0R2xvYmFsRGVmYXVsdFNvdXBTZXNzaW9uQWNjZXNzb3IoRnVuY3Rp
b248U291cFNlc3Npb24qKCk+JiYpOwogICAgIHZvaWQgcmVzb2x2ZShjb25zdCBTdHJpbmcmIGhv
c3RuYW1lLCB1aW50NjRfdCBpZGVudGlmaWVyLCBETlNDb21wbGV0aW9uSGFuZGxlciYmKSBmaW5h
bDsKICAgICB2b2lkIHN0b3BSZXNvbHZlKHVpbnQ2NF90IGlkZW50aWZpZXIpIGZpbmFsOwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvTmV0d29ya1N0
b3JhZ2VTZXNzaW9uU291cC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3Nv
dXAvTmV0d29ya1N0b3JhZ2VTZXNzaW9uU291cC5jcHAKaW5kZXggMDUzZjZiOTFhNjQuLmU0Yzhi
MGYxM2U2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAv
TmV0d29ya1N0b3JhZ2VTZXNzaW9uU291cC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9zb3VwL05ldHdvcmtTdG9yYWdlU2Vzc2lvblNvdXAuY3BwCkBAIC01MywzNCAr
NTMsMTcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1OZXR3b3JrU3RvcmFnZVNlc3Npb246
Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbihQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIHN0ZDo6dW5p
cXVlX3B0cjxTb3VwTmV0d29ya1Nlc3Npb24+JiYgc2Vzc2lvbikKK05ldHdvcmtTdG9yYWdlU2Vz
c2lvbjo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKICAg
ICA6IG1fc2Vzc2lvbklEKHNlc3Npb25JRCkKLSAgICAsIG1fc2Vzc2lvbihXVEZNb3ZlKHNlc3Np
b24pKQorICAgICwgbV9jb29raWVTdG9yYWdlKGFkb3B0R1JlZihzb3VwX2Nvb2tpZV9qYXJfbmV3
KCkpKQogewotICAgIEFTU0VSVChtX3Nlc3Npb24tPmNvb2tpZUphcigpKTsKLSAgICBnX3NpZ25h
bF9jb25uZWN0X3N3YXBwZWQobV9zZXNzaW9uLT5jb29raWVKYXIoKSwgImNoYW5nZWQiLCBHX0NB
TExCQUNLKGNvb2tpZXNEaWRDaGFuZ2UpLCB0aGlzKTsKKyAgICBzb3VwX2Nvb2tpZV9qYXJfc2V0
X2FjY2VwdF9wb2xpY3kobV9jb29raWVTdG9yYWdlLmdldCgpLCBTT1VQX0NPT0tJRV9KQVJfQUND
RVBUX05PX1RISVJEX1BBUlRZKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0X3N3YXBwZWQobV9jb29r
aWVTdG9yYWdlLmdldCgpLCAiY2hhbmdlZCIsIEdfQ0FMTEJBQ0soY29va2llc0RpZENoYW5nZSks
IHRoaXMpOwogfQogCiBOZXR3b3JrU3RvcmFnZVNlc3Npb246On5OZXR3b3JrU3RvcmFnZVNlc3Np
b24oKQogewotICAgIGNsZWFyU291cE5ldHdvcmtTZXNzaW9uKCk7Ci19Ci0KLVNvdXBOZXR3b3Jr
U2Vzc2lvbiYgTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpzb3VwTmV0d29ya1Nlc3Npb24oKSBjb25z
dAotewotICAgIEFTU0VSVChtX3Nlc3Npb24pOwotICAgIHJldHVybiAqbV9zZXNzaW9uLmdldCgp
OwotfTsKLQotdm9pZCBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmNsZWFyU291cE5ldHdvcmtTZXNz
aW9uKCkKLXsKLSAgICBpZiAobV9zZXNzaW9uKSB7Ci0gICAgICAgIEFTU0VSVChtX3Nlc3Npb24t
PmNvb2tpZUphcigpKTsKLSAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9tYXRj
aGVkKG1fc2Vzc2lvbi0+Y29va2llSmFyKCksIEdfU0lHTkFMX01BVENIX0RBVEEsIDAsIDAsIG51
bGxwdHIsIG51bGxwdHIsIHRoaXMpOwotICAgIH0KLQotICAgIG1fc2Vzc2lvbiA9IG51bGxwdHI7
Ci0gICAgbV9jb29raWVPYnNlcnZlckhhbmRsZXIgPSBudWxscHRyOworICAgIGdfc2lnbmFsX2hh
bmRsZXJzX2Rpc2Nvbm5lY3RfbWF0Y2hlZChtX2Nvb2tpZVN0b3JhZ2UuZ2V0KCksIEdfU0lHTkFM
X01BVENIX0RBVEEsIDAsIDAsIG51bGxwdHIsIG51bGxwdHIsIHRoaXMpOwogfQogCiB2b2lkIE5l
dHdvcmtTdG9yYWdlU2Vzc2lvbjo6Y29va2llc0RpZENoYW5nZShOZXR3b3JrU3RvcmFnZVNlc3Np
b24qIHNlc3Npb24pCkBAIC04OSwyNSArNzIsMTEgQEAgdm9pZCBOZXR3b3JrU3RvcmFnZVNlc3Np
b246OmNvb2tpZXNEaWRDaGFuZ2UoTmV0d29ya1N0b3JhZ2VTZXNzaW9uKiBzZXNzaW9uKQogICAg
ICAgICBzZXNzaW9uLT5tX2Nvb2tpZU9ic2VydmVySGFuZGxlcigpOwogfQogCi1Tb3VwQ29va2ll
SmFyKiBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmNvb2tpZVN0b3JhZ2UoKSBjb25zdAotewotICAg
IEFTU0VSVChtX3Nlc3Npb24pOwotICAgIEFTU0VSVChtX3Nlc3Npb24tPmNvb2tpZUphcigpKTsK
LSAgICByZXR1cm4gbV9zZXNzaW9uLT5jb29raWVKYXIoKTsKLX0KLQotdm9pZCBOZXR3b3JrU3Rv
cmFnZVNlc3Npb246OnNldENvb2tpZVN0b3JhZ2UoU291cENvb2tpZUphciogamFyKQordm9pZCBO
ZXR3b3JrU3RvcmFnZVNlc3Npb246OnNldENvb2tpZVN0b3JhZ2UoR1JlZlB0cjxTb3VwQ29va2ll
SmFyPiYmIGphcikKIHsKLSAgICBBU1NFUlQoamFyKTsKLSAgICBBU1NFUlQobV9zZXNzaW9uKTsK
LSAgICBBU1NFUlQobV9zZXNzaW9uLT5jb29raWVKYXIoKSk7Ci0KLSAgICBpZiAobV9zZXNzaW9u
LT5jb29raWVKYXIoKSA9PSBqYXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIGdfc2lnbmFsX2hh
bmRsZXJzX2Rpc2Nvbm5lY3RfbWF0Y2hlZChtX3Nlc3Npb24tPmNvb2tpZUphcigpLCBHX1NJR05B
TF9NQVRDSF9EQVRBLCAwLCAwLCBudWxscHRyLCBudWxscHRyLCB0aGlzKTsKLSAgICBtX3Nlc3Np
b24tPnNldENvb2tpZUphcihqYXIpOwotICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChtX3Nl
c3Npb24tPmNvb2tpZUphcigpLCAiY2hhbmdlZCIsIEdfQ0FMTEJBQ0soY29va2llc0RpZENoYW5n
ZSksIHRoaXMpOworICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfbWF0Y2hlZChtX2Nv
b2tpZVN0b3JhZ2UuZ2V0KCksIEdfU0lHTkFMX01BVENIX0RBVEEsIDAsIDAsIG51bGxwdHIsIG51
bGxwdHIsIHRoaXMpOworICAgIG1fY29va2llU3RvcmFnZSA9IFdURk1vdmUoamFyKTsKKyAgICBn
X3NpZ25hbF9jb25uZWN0X3N3YXBwZWQobV9jb29raWVTdG9yYWdlLmdldCgpLCAiY2hhbmdlZCIs
IEdfQ0FMTEJBQ0soY29va2llc0RpZENoYW5nZSksIHRoaXMpOwogfQogCiB2b2lkIE5ldHdvcmtT
dG9yYWdlU2Vzc2lvbjo6c2V0Q29va2llT2JzZXJ2ZXJIYW5kbGVyKEZ1bmN0aW9uPHZvaWQgKCk+
JiYgaGFuZGxlcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
c291cC9Tb2NrZXRTdHJlYW1IYW5kbGVJbXBsU291cC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL3NvdXAvU29ja2V0U3RyZWFtSGFuZGxlSW1wbFNvdXAuY3BwCmluZGV4IGVk
NzhlNGRkZDU5Li5mYmRjYmIxNWU0ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9zb3VwL1NvY2tldFN0cmVhbUhhbmRsZUltcGxTb3VwLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvU29ja2V0U3RyZWFtSGFuZGxlSW1wbFNv
dXAuY3BwCkBAIC0zNiwxMSArMzYsOSBAQAogCiAjaW5jbHVkZSAiRGVwcmVjYXRlZEdsb2JhbFNl
dHRpbmdzLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgotI2luY2x1ZGUgIk5ldHdvcmtTdG9yYWdl
U2Vzc2lvbi5oIgogI2luY2x1ZGUgIlJlc291cmNlRXJyb3IuaCIKICNpbmNsdWRlICJTb2NrZXRT
dHJlYW1FcnJvci5oIgogI2luY2x1ZGUgIlNvY2tldFN0cmVhbUhhbmRsZUNsaWVudC5oIgotI2lu
Y2x1ZGUgIlNvdXBOZXR3b3JrU2Vzc2lvbi5oIgogI2luY2x1ZGUgIlN0b3JhZ2VTZXNzaW9uUHJv
dmlkZXIuaCIKICNpbmNsdWRlICJVUkxTb3VwLmgiCiAjaW5jbHVkZSA8Z2lvL2dpby5oPgpAQCAt
ODcsMTMgKzg1LDEzIEBAIFJlZjxTb2NrZXRTdHJlYW1IYW5kbGVJbXBsPiBTb2NrZXRTdHJlYW1I
YW5kbGVJbXBsOjpjcmVhdGUoY29uc3QgVVJMJiB1cmwsIFNvY2tlCiAgICAgUmVmPFNvY2tldFN0
cmVhbUhhbmRsZUltcGw+IHNvY2tldCA9IGFkb3B0UmVmKCpuZXcgU29ja2V0U3RyZWFtSGFuZGxl
SW1wbCh1cmwsIGNsaWVudCwgc3RvcmFnZVNlc3Npb25Qcm92aWRlcikpOwogCiAjaWYgU09VUF9D
SEVDS19WRVJTSU9OKDIsIDYxLCA5MCkKLSAgICBhdXRvKiBuZXR3b3JrU3RvcmFnZVNlc3Npb24g
PSBzdG9yYWdlU2Vzc2lvblByb3ZpZGVyID8gc3RvcmFnZVNlc3Npb25Qcm92aWRlci0+c3RvcmFn
ZVNlc3Npb24oKSA6IG51bGxwdHI7Ci0gICAgaWYgKCFuZXR3b3JrU3RvcmFnZVNlc3Npb24pCisg
ICAgYXV0byogc291cFNlc3Npb24gPSBzdG9yYWdlU2Vzc2lvblByb3ZpZGVyID8gc3RvcmFnZVNl
c3Npb25Qcm92aWRlci0+c291cFNlc3Npb24oKSA6IG51bGxwdHI7CisgICAgaWYgKCFzb3VwU2Vz
c2lvbikKICAgICAgICAgcmV0dXJuIHNvY2tldDsKIAogICAgIGF1dG8gdXJpID0gdXJsVG9Tb3Vw
VVJJKHVybCk7CiAgICAgUmVmPFNvY2tldFN0cmVhbUhhbmRsZT4gcHJvdGVjdGVkU29ja2V0U3Ry
ZWFtSGFuZGxlID0gc29ja2V0LmNvcHlSZWYoKTsKLSAgICBzb3VwX3Nlc3Npb25fY29ubmVjdF9h
c3luYyhuZXR3b3JrU3RvcmFnZVNlc3Npb24tPnNvdXBOZXR3b3JrU2Vzc2lvbigpLnNvdXBTZXNz
aW9uKCksIHVyaS5nZXQoKSwgc29ja2V0LT5tX2NhbmNlbGxhYmxlLmdldCgpLAorICAgIHNvdXBf
c2Vzc2lvbl9jb25uZWN0X2FzeW5jKHNvdXBTZXNzaW9uLCB1cmkuZ2V0KCksIHNvY2tldC0+bV9j
YW5jZWxsYWJsZS5nZXQoKSwKICAgICAgICAgdXJsLnByb3RvY29sSXMoIndzcyIpID8gcmVpbnRl
cnByZXRfY2FzdDxTb3VwU2Vzc2lvbkNvbm5lY3RQcm9ncmVzc0NhbGxiYWNrPihjb25uZWN0UHJv
Z3Jlc3NDYWxsYmFjaykgOiBudWxscHRyLAogICAgICAgICByZWludGVycHJldF9jYXN0PEdBc3lu
Y1JlYWR5Q2FsbGJhY2s+KGNvbm5lY3RlZENhbGxiYWNrKSwgJnByb3RlY3RlZFNvY2tldFN0cmVh
bUhhbmRsZS5sZWFrUmVmKCkpOwogI2Vsc2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvc291cC9Tb3VwTmV0d29ya1Nlc3Npb24uY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1NvdXBOZXR3b3JrU2Vzc2lvbi5jcHAKaW5kZXggNjEy
NGY0NmMyNGQuLjYxODk5OGYyNTFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL3NvdXAvU291cE5ldHdvcmtTZXNzaW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvU291cE5ldHdvcmtTZXNzaW9uLmNwcApAQCAtMTA2LDcg
KzEwNiw3IEBAIHN0YXRpYyBBbGxvd2VkQ2VydGlmaWNhdGVzTWFwJiBhbGxvd2VkQ2VydGlmaWNh
dGVzKCkKICAgICByZXR1cm4gY2VydGlmaWNhdGVzOwogfQogCi1Tb3VwTmV0d29ya1Nlc3Npb246
OlNvdXBOZXR3b3JrU2Vzc2lvbihQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIFNvdXBDb29raWVK
YXIqIGNvb2tpZUphcikKK1NvdXBOZXR3b3JrU2Vzc2lvbjo6U291cE5ldHdvcmtTZXNzaW9uKFBB
TDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKICAgICA6IG1fc291cFNlc3Npb24oYWRvcHRHUmVmKHNv
dXBfc2Vzc2lvbl9uZXcoKSkpCiB7CiAgICAgLy8gVmFsdWVzIHRha2VuIGZyb20gaHR0cDovL3d3
dy5icm93c2Vyc2NvcGUub3JnLyBmb2xsb3dpbmcKQEAgLTExNiwxOSArMTE2LDEyIEBAIFNvdXBO
ZXR3b3JrU2Vzc2lvbjo6U291cE5ldHdvcmtTZXNzaW9uKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25J
RCwgU291cENvb2tpZUphcioKICAgICBzdGF0aWMgY29uc3QgaW50IG1heENvbm5lY3Rpb25zID0g
MTc7CiAgICAgc3RhdGljIGNvbnN0IGludCBtYXhDb25uZWN0aW9uc1Blckhvc3QgPSA2OwogCi0g
ICAgR1JlZlB0cjxTb3VwQ29va2llSmFyPiBqYXIgPSBjb29raWVKYXI7Ci0gICAgaWYgKCFqYXIp
IHsKLSAgICAgICAgamFyID0gYWRvcHRHUmVmKHNvdXBfY29va2llX2phcl9uZXcoKSk7Ci0gICAg
ICAgIHNvdXBfY29va2llX2phcl9zZXRfYWNjZXB0X3BvbGljeShqYXIuZ2V0KCksIFNPVVBfQ09P
S0lFX0pBUl9BQ0NFUFRfTk9fVEhJUkRfUEFSVFkpOwotICAgIH0KLQogICAgIGdfb2JqZWN0X3Nl
dChtX3NvdXBTZXNzaW9uLmdldCgpLAogICAgICAgICBTT1VQX1NFU1NJT05fTUFYX0NPTk5TLCBt
YXhDb25uZWN0aW9ucywKICAgICAgICAgU09VUF9TRVNTSU9OX01BWF9DT05OU19QRVJfSE9TVCwg
bWF4Q29ubmVjdGlvbnNQZXJIb3N0LAogICAgICAgICBTT1VQX1NFU1NJT05fVElNRU9VVCwgMCwK
ICAgICAgICAgU09VUF9TRVNTSU9OX0lETEVfVElNRU9VVCwgMCwKICAgICAgICAgU09VUF9TRVNT
SU9OX0FERF9GRUFUVVJFX0JZX1RZUEUsIFNPVVBfVFlQRV9DT05URU5UX1NOSUZGRVIsCi0gICAg
ICAgIFNPVVBfU0VTU0lPTl9BRERfRkVBVFVSRSwgamFyLmdldCgpLAogICAgICAgICBudWxscHRy
KTsKIAogICAgIHNldHVwQ3VzdG9tUHJvdG9jb2xzKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvU291cE5ldHdvcmtTZXNzaW9uLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvU291cE5ldHdvcmtTZXNzaW9uLmgKaW5kZXgg
ZmZiZDQ5YTc2MmEuLjVlMzJkMzFhZDRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL3NvdXAvU291cE5ldHdvcmtTZXNzaW9uLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1NvdXBOZXR3b3JrU2Vzc2lvbi5oCkBAIC00OSw3ICs0
OSw3IEBAIHN0cnVjdCBTb3VwTmV0d29ya1Byb3h5U2V0dGluZ3M7CiBjbGFzcyBTb3VwTmV0d29y
a1Nlc3Npb24gewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFNvdXBOZXR3b3JrU2Vzc2lvbik7
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIGV4cGxpY2l0IFNvdXBOZXR3
b3JrU2Vzc2lvbihQQUw6OlNlc3Npb25JRCA9IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lv
bklEKCksIFNvdXBDb29raWVKYXIqID0gbnVsbHB0cik7CisgICAgZXhwbGljaXQgU291cE5ldHdv
cmtTZXNzaW9uKFBBTDo6U2Vzc2lvbklEKTsKICAgICB+U291cE5ldHdvcmtTZXNzaW9uKCk7CiAK
ICAgICBTb3VwU2Vzc2lvbiogc291cFNlc3Npb24oKSBjb25zdCB7IHJldHVybiBtX3NvdXBTZXNz
aW9uLmdldCgpOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDdiN2M4ZDk2YTdlLi41YTY2OGUxNWVhMyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VM
b2cKQEAgLTEsMyArMSw1OCBAQAorMjAxOS0wNy0yNCAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxj
Z2FyY2lhQGlnYWxpYS5jb20+CisKKyAgICAgICAgW1NPVVBdIE1vdmUgU291cE5ldHdvcmtTZXNz
aW9uIG93bmVyc2hpcCBmcm9tIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiB0byBOZXR3b3JrU2Vzc2lv
bgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAwMDc2
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTmV0d29y
a1N0b3JhZ2VTZXNzaW9uIHNob3VsZCBvbmx5IG93biB0aGUgY29va2llIGphciwgc2luY2UgaXQn
cyB0aGUgb25seSB0aGluZyBpdCBoYW5kbGVzIGZyb20gdGhlIHNlc3Npb24uCisKKyAgICAgICAg
KiBOZXR3b3JrUHJvY2Vzcy9Db29raWVzL3NvdXAvV2ViQ29va2llTWFuYWdlclNvdXAuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyOjpzZXRDb29raWVQZXJzaXN0ZW50U3Rv
cmFnZSk6IFVzZSB0aGUgbmV0d29yayBzZXNzaW9uIGluc3RlYWQgb2YgdGhlIHN0b3JhZ2Ugc2Vz
c2lvbgorICAgICAgICB0byBzZXQgdGhlIHBlcmlzdGVudCBjb29raWUgc3RvcmFnZS4KKyAgICAg
ICAgKiBOZXR3b3JrUHJvY2Vzcy9DdXN0b21Qcm90b2NvbHMvc291cC9MZWdhY3lDdXN0b21Qcm90
b2NvbE1hbmFnZXJTb3VwLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TGVnYWN5Q3VzdG9tUHJvdG9j
b2xNYW5hZ2VyOjpyZWdpc3RlclNjaGVtZSk6IEl0ZXJhdGUgbmV0d29yayBzZXNzaW9ucyBpbnN0
ZWFkIG9mIHN0b3JhZ2Ugc2Vzc2lvbnMgdG8KKyAgICAgICAgYWNjZXNzIHRoZSBTb3VwTmV0d29y
a1Nlc3Npb24uCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dl
YlByb2Nlc3MuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJv
Y2Vzczo6cmVzb3VyY2VMb2FkU3RhdGlzdGljc1VwZGF0ZWQpOiBVc2UKKyAgICAgICAgTmV0d29y
a1Byb2Nlc3M6OmZvckVhY2hOZXR3b3JrU2Vzc2lvbigpIHRvIGl0ZXJhdGUgbmV0d29yayBzZXNz
aW9ucy4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHA6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpsb3dNZW1vcnlIYW5kbGVyKTogRGl0dG8uCisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpmb3JFYWNoTmV0d29ya1Nlc3Npb24pOiBB
ZGRlZCB0byBpdGVyYXRlIG5ldHdvcmsgc2Vzc2lvbnMgaW50ZWFkIG9mIGV4cG9zaW5nIHRoZSBt
YXAKKyAgICAgICAgdGhhdCBpcyBhbHdheXMgdXNlZCB0byBpdGVyYXRlIHRoZSBzZXNzaW9ucy4K
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OnN3aXRjaFRvTmV3VGVzdGluZ1Nlc3Np
b24pOiBVc2UgdGhlIG5ldyBOZXR3b3JrU3RvcmFnZVNlc3Npb24gY29uc3RydWN0b3IgQVBJLgor
ICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6ZW5zdXJlU2Vzc2lvbik6IERpdHRvLgor
ICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6ZGVzdHJveVNlc3Npb24pOiBBbGxvdyB0
byBkZXN0cm95IHRoZSBkZWZhdWx0IHNlc3Npb24gZm9yIHNvdXAgYmFzZWQgcG9ydHMuIFRoaXMg
aXMKKyAgICAgICAgb25seSBjYWxsZWQgcmlnaHQgYmVmb3JlIHByb2Nlc3MgZXhpdCB0byBlbnN1
cmUgd2UgZG9uJ3QgbGVhayBuZXR3b3JrIHJlc291cmNlcyBsaWtlIHRoZSBjb29raWVzIGRhdGFi
YXNlLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6c2V0UmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0VuYWJsZWQpOiBVc2UgTmV0d29ya1Byb2Nlc3M6OmZvckVhY2hOZXR3b3JrU2Vzc2lv
bigpIHRvCisgICAgICAgIGl0ZXJhdGUgbmV0d29yayBzZXNzaW9ucy4KKyAgICAgICAgKFdlYktp
dDo6TmV0d29ya1Byb2Nlc3M6OmZldGNoV2Vic2l0ZURhdGEpOiBEaXR0by4KKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya1Byb2Nlc3M6OmRlbGV0ZVdlYnNpdGVEYXRhRm9yT3JpZ2lucyk6IERpdHRv
LgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6ZGVsZXRlV2Vic2l0ZURhdGFGb3JS
ZWdpc3RyYWJsZURvbWFpbnMpOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nl
c3M6OnJlZ2lzdHJhYmxlRG9tYWluc1dpdGhXZWJzaXRlRGF0YSk6IERpdHRvLgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6c2V0Q2FjaGVNb2RlbCk6IERpdHRvLgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6YWN0dWFsUHJlcGFyZVRvU3VzcGVuZCk6IERpdHRvLgor
ICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6cmVzdW1lKTogRGl0dG8uCisgICAgICAg
ICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaDoKKyAgICAgICAgKiBOZXR3b3JrUHJv
Y2Vzcy9OZXR3b3JrU3RvcmFnZVNlc3Npb25Qcm92aWRlci5oOgorICAgICAgICAqIE5ldHdvcmtQ
cm9jZXNzL2NvY29hL05ldHdvcmtQcm9jZXNzQ29jb2EubW06CisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtQcm9jZXNzOjpjbGVhckRpc2tDYWNoZSk6IERpdHRvLgorICAgICAgICAqIE5ldHdvcmtQ
cm9jZXNzL2lvcy9OZXR3b3JrUHJvY2Vzc0lPUy5tbToKKyAgICAgICAgKFdlYktpdDo6TmV0d29y
a1Byb2Nlc3M6OmNsZWFyQ2FjaGVGb3JBbGxPcmlnaW5zKTogRGl0dG8uCisgICAgICAgICogTmV0
d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrUHJvY2Vzc01haW5Tb3VwLmNwcDogRGVzdHJveSB0aGUg
ZGVmYXVsdCBzZXNzaW9uIGJlZm9yZSBwcm9jZXNzIGV4aXN0cy4KKyAgICAgICAgKiBOZXR3b3Jr
UHJvY2Vzcy9zb3VwL05ldHdvcmtQcm9jZXNzU291cC5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtQcm9jZXNzOjp1c2VyUHJlZmVycmVkTGFuZ3VhZ2VzQ2hhbmdlZCk6IEl0ZXJhdGUgbmV0
d29yayBzZXNzaW9ucyBpbnN0ZWFkIG9mIHN0b3JhZ2Ugc2Vzc2lvbnMgdG8KKyAgICAgICAgYWNj
ZXNzIHRoZSBTb3VwTmV0d29ya1Nlc3Npb24uCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9j
ZXNzOjpwbGF0Zm9ybUNyZWF0ZURlZmF1bHRTdG9yYWdlU2Vzc2lvbiBjb25zdCk6IFVzZSB0aGUg
bmV3IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiBjb25zdHJ1Y3RvciBBUEkuCisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtQcm9jZXNzOjpjbGVhckRpc2tDYWNoZSk6IFVzZSBOZXR3b3JrUHJvY2Vzczo6
Zm9yRWFjaE5ldHdvcmtTZXNzaW9uKCkgdG8gaXRlcmF0ZSBuZXR3b3JrIHNlc3Npb25zLgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6c2V0TmV0d29ya1Byb3h5U2V0dGluZ3MpOiBJ
dGVyYXRlIG5ldHdvcmsgc2Vzc2lvbnMgaW5zdGVhZCBvZiBzdG9yYWdlIHNlc3Npb25zIHRvCisg
ICAgICAgIGFjY2VzcyB0aGUgU291cE5ldHdvcmtTZXNzaW9uLgorICAgICAgICAqIE5ldHdvcmtQ
cm9jZXNzL3NvdXAvTmV0d29ya1Nlc3Npb25Tb3VwLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0
d29ya1Nlc3Npb25Tb3VwOjpOZXR3b3JrU2Vzc2lvblNvdXApOiBDcmVhdGUgdGhlIFNvdXBOZXR3
b3JrU2Vzc2lvbiBhbmQgc2V0dXAgY29va2llcy4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Nl
c3Npb25Tb3VwOjpzb3VwU2Vzc2lvbiBjb25zdCk6IFJldHVybiB0aGUgU291cFNlc3Npb24gb2Yg
U291cE5ldHdvcmtTZXNzaW9uLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrU2Vzc2lvblNvdXA6
OnNldENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlKTogU2V0dXAgYSBuZXcgY29va2llIGphci4KKyAg
ICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtTZXNzaW9uU291cC5oOgorCiAyMDE5
LTA3LTIzICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgQ3Jhc2gg
dW5kZXIgV2ViS2l0OldURjo6RGV0YWlsOjpDYWxsYWJsZVdyYXBwZXI8V2ViS2l0OjpSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnVwZGF0ZUNvb2tpZUJsb2NraW5nKFdURjo6Q29t
cGxldGlvbkhhbmRsZXI8dm9pZCAoKT4mJik6OiRfMzI6Om9wZXJhdG9yKCkoKTo6J2xhbWJkYSco
KSwgdm9pZD46OmNhbGwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
Q29va2llcy9zb3VwL1dlYkNvb2tpZU1hbmFnZXJTb3VwLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvQ29va2llcy9zb3VwL1dlYkNvb2tpZU1hbmFnZXJTb3VwLmNwcAppbmRleCAy
OGNhYjIwODk0YS4uNGQ5N2RhN2I2OWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvQ29va2llcy9zb3VwL1dlYkNvb2tpZU1hbmFnZXJTb3VwLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvc291cC9XZWJDb29raWVNYW5hZ2VyU291
cC5jcHAKQEAgLTI3LDEyICsyNywxMSBAQAogI2luY2x1ZGUgIldlYkNvb2tpZU1hbmFnZXIuaCIK
IAogI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzLmgiCisjaW5jbHVkZSAiTmV0d29ya1Nlc3Npb25T
b3VwLmgiCiAjaW5jbHVkZSAiU291cENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlVHlwZS5oIgogI2lu
Y2x1ZGUgPFdlYkNvcmUvTmV0d29ya1N0b3JhZ2VTZXNzaW9uLmg+CiAjaW5jbHVkZSA8V2ViQ29y
ZS9Tb3VwTmV0d29ya1Nlc3Npb24uaD4KICNpbmNsdWRlIDxsaWJzb3VwL3NvdXAuaD4KLSNpbmNs
dWRlIDx3dGYvZ2xpYi9HUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgog
CiBuYW1lc3BhY2UgV2ViS2l0IHsKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwpAQCAtNzcsMjIg
Kzc2LDggQEAgSFRUUENvb2tpZUFjY2VwdFBvbGljeSBXZWJDb29raWVNYW5hZ2VyOjpwbGF0Zm9y
bUdldEhUVFBDb29raWVBY2NlcHRQb2xpY3koKQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXI6OnNl
dENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3Qg
U3RyaW5nJiBzdG9yYWdlUGF0aCwgU291cENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlVHlwZSBzdG9y
YWdlVHlwZSkKIHsKLSAgICBHUmVmUHRyPFNvdXBDb29raWVKYXI+IGphcjsKLSAgICBzd2l0Y2gg
KHN0b3JhZ2VUeXBlKSB7Ci0gICAgY2FzZSBTb3VwQ29va2llUGVyc2lzdGVudFN0b3JhZ2VUeXBl
OjpUZXh0OgotICAgICAgICBqYXIgPSBhZG9wdEdSZWYoc291cF9jb29raWVfamFyX3RleHRfbmV3
KHN0b3JhZ2VQYXRoLnV0ZjgoKS5kYXRhKCksIEZBTFNFKSk7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgU291cENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlVHlwZTo6U1FMaXRlOgotICAgICAgICBq
YXIgPSBhZG9wdEdSZWYoc291cF9jb29raWVfamFyX2RiX25ldyhzdG9yYWdlUGF0aC51dGY4KCku
ZGF0YSgpLCBGQUxTRSkpOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci0KLSAgICBpZiAoYXV0byogc3RvcmFnZVNlc3Np
b24gPSBtX3Byb2Nlc3Muc3RvcmFnZVNlc3Npb24oc2Vzc2lvbklEKSkgewotICAgICAgICBzb3Vw
X2Nvb2tpZV9qYXJfc2V0X2FjY2VwdF9wb2xpY3koamFyLmdldCgpLCBzb3VwX2Nvb2tpZV9qYXJf
Z2V0X2FjY2VwdF9wb2xpY3koc3RvcmFnZVNlc3Npb24tPmNvb2tpZVN0b3JhZ2UoKSkpOwotICAg
ICAgICBzdG9yYWdlU2Vzc2lvbi0+c2V0Q29va2llU3RvcmFnZShqYXIuZ2V0KCkpOwotICAgIH0K
KyAgICBpZiAoYXV0byogbmV0d29ya1Nlc3Npb24gPSBtX3Byb2Nlc3MubmV0d29ya1Nlc3Npb24o
c2Vzc2lvbklEKSkKKyAgICAgICAgc3RhdGljX2Nhc3Q8TmV0d29ya1Nlc3Npb25Tb3VwJj4oKm5l
dHdvcmtTZXNzaW9uKS5zZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShzdG9yYWdlUGF0aCwgc3Rv
cmFnZVR5cGUpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ3VzdG9tUHJvdG9jb2xzL3NvdXAvTGVnYWN5Q3VzdG9t
UHJvdG9jb2xNYW5hZ2VyU291cC5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0N1
c3RvbVByb3RvY29scy9zb3VwL0xlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclNvdXAuY3BwCmlu
ZGV4IDUxMWRkMDRkNjY3Li4yYzRkMmZmOTQ4MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9DdXN0b21Qcm90b2NvbHMvc291cC9MZWdhY3lDdXN0b21Qcm90b2NvbE1h
bmFnZXJTb3VwLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0N1c3RvbVBy
b3RvY29scy9zb3VwL0xlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclNvdXAuY3BwCkBAIC0yMyw4
ICsyMyw4IEBACiAjaW5jbHVkZSAiRGF0YVJlZmVyZW5jZS5oIgogI2luY2x1ZGUgIkxlZ2FjeUN1
c3RvbVByb3RvY29sTWFuYWdlck1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3Mu
aCIKKyNpbmNsdWRlICJOZXR3b3JrU2Vzc2lvblNvdXAuaCIKICNpbmNsdWRlICJXZWJLaXRTb3Vw
UmVxdWVzdElucHV0U3RyZWFtLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9OZXR3b3JrU3RvcmFnZVNl
c3Npb24uaD4KICNpbmNsdWRlIDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+CiAjaW5jbHVkZSA8
V2ViQ29yZS9SZXNvdXJjZUVycm9yLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZVJlcXVl
c3QuaD4KQEAgLTEwMiw4ICsxMDIsOCBAQCB2b2lkIExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdl
cjo6cmVnaXN0ZXJTY2hlbWUoY29uc3QgU3RyaW5nJiBzY2hlbWUpCiAgICAgYXV0byogZ2VuZXJp
Y1JlcXVlc3RDbGFzcyA9IHN0YXRpY19jYXN0PFNvdXBSZXF1ZXN0Q2xhc3MqPihnX3R5cGVfY2xh
c3NfcGVlayhXRUJLSVRfVFlQRV9TT1VQX1JFUVVFU1RfR0VORVJJQykpOwogICAgIEFTU0VSVChn
ZW5lcmljUmVxdWVzdENsYXNzKTsKICAgICBnZW5lcmljUmVxdWVzdENsYXNzLT5zY2hlbWVzID0g
Y29uc3RfY2FzdDxjb25zdCBjaGFyKio+KHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcioqPihtX3JlZ2lz
dGVyZWRTY2hlbWVzLT5wZGF0YSkpOwotICAgIGxhc3RDcmVhdGVkTmV0d29ya1Byb2Nlc3MoKS0+
Zm9yRWFjaE5ldHdvcmtTdG9yYWdlU2Vzc2lvbihbXShjb25zdCBhdXRvJiBzZXNzaW9uKSB7Ci0g
ICAgICAgIHNlc3Npb24uc291cE5ldHdvcmtTZXNzaW9uKCkuc2V0dXBDdXN0b21Qcm90b2NvbHMo
KTsKKyAgICBsYXN0Q3JlYXRlZE5ldHdvcmtQcm9jZXNzKCktPmZvckVhY2hOZXR3b3JrU2Vzc2lv
bihbXShjb25zdCBhdXRvJiBzZXNzaW9uKSB7CisgICAgICAgIHN0YXRpY19jYXN0PGNvbnN0IE5l
dHdvcmtTZXNzaW9uU291cCY+KHNlc3Npb24pLnNvdXBOZXR3b3JrU2Vzc2lvbigpLnNldHVwQ3Vz
dG9tUHJvdG9jb2xzKCk7CiAgICAgfSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwIGIvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHAK
aW5kZXggMmQ1MGUyZjQzZGIuLjgyNGNiZDFjOTdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNz
LmNwcApAQCAtNjg5LDEzICs2ODksMTMgQEAgdm9pZCBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJv
Y2Vzczo6bG9nU3VicmVzb3VyY2VSZWRpcmVjdChQQUw6OlNlc3Npb25JRCBzZXNzaW8KIAogdm9p
ZCBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6cmVzb3VyY2VMb2FkU3RhdGlzdGljc1Vw
ZGF0ZWQoVmVjdG9yPFdlYkNvcmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3M+JiYgc3RhdGlzdGlj
cykKIHsKLSAgICBmb3IgKGF1dG8mIG5ldHdvcmtTZXNzaW9uIDogbmV0d29ya1Byb2Nlc3MoKS5u
ZXR3b3JrU2Vzc2lvbnMoKS52YWx1ZXMoKSkgewotICAgICAgICBpZiAobmV0d29ya1Nlc3Npb24t
PnNlc3Npb25JRCgpLmlzRXBoZW1lcmFsKCkpCi0gICAgICAgICAgICBjb250aW51ZTsKKyAgICBu
ZXR3b3JrUHJvY2VzcygpLmZvckVhY2hOZXR3b3JrU2Vzc2lvbihbc3RhdGlzdGljcyA9IFdURk1v
dmUoc3RhdGlzdGljcykgXShOZXR3b3JrU2Vzc2lvbiYgbmV0d29ya1Nlc3Npb24pIG11dGFibGUg
eworICAgICAgICBpZiAobmV0d29ya1Nlc3Npb24uc2Vzc2lvbklEKCkuaXNFcGhlbWVyYWwoKSkK
KyAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBpZiAoYXV0byogcmVzb3VyY2VMb2FkU3Rh
dGlzdGljcyA9IG5ldHdvcmtTZXNzaW9uLT5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzKCkpCisgICAg
ICAgIGlmIChhdXRvKiByZXNvdXJjZUxvYWRTdGF0aXN0aWNzID0gbmV0d29ya1Nlc3Npb24ucmVz
b3VyY2VMb2FkU3RhdGlzdGljcygpKQogICAgICAgICAgICAgcmVzb3VyY2VMb2FkU3RhdGlzdGlj
cy0+cmVzb3VyY2VMb2FkU3RhdGlzdGljc1VwZGF0ZWQoV1RGTW92ZShzdGF0aXN0aWNzKSk7Ci0g
ICAgfQorICAgIH0pOwogfQogCiB2b2lkIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpo
YXNTdG9yYWdlQWNjZXNzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgUmVnaXN0cmFi
bGVEb21haW4mIHN1YkZyYW1lRG9tYWluLCBjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgdG9wRnJh
bWVEb21haW4sIHVpbnQ2NF90IGZyYW1lSUQsIFBhZ2VJZGVudGlmaWVyIHBhZ2VJRCwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwIGIvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKaW5kZXggMjRiZDcxNjk5
YWEuLmVmOGIxZjdhMzYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L05ldHdvcmtQcm9jZXNzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05l
dHdvcmtQcm9jZXNzLmNwcApAQCAtOTksNiArOTksNyBAQAogI2VuZGlmCiAKICNpZiBVU0UoU09V
UCkKKyNpbmNsdWRlICJOZXR3b3JrU2Vzc2lvblNvdXAuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0RO
U1Jlc29sdmVRdWV1ZVNvdXAuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1NvdXBOZXR3b3JrU2Vzc2lv
bi5oPgogI2VuZGlmCkBAIC0xNTAsOCArMTUxLDggQEAgTmV0d29ya1Byb2Nlc3M6Ok5ldHdvcmtQ
cm9jZXNzKEF1eGlsaWFyeVByb2Nlc3NJbml0aWFsaXphdGlvblBhcmFtZXRlcnMmJiBwYXJhbWUK
ICNlbmRpZgogCiAjaWYgVVNFKFNPVVApCi0gICAgRE5TUmVzb2x2ZVF1ZXVlU291cDo6c2V0R2xv
YmFsRGVmYXVsdE5ldHdvcmtTdG9yYWdlU2Vzc2lvbkFjY2Vzc29yKFt0aGlzXSgpIC0+IE5ldHdv
cmtTdG9yYWdlU2Vzc2lvbiYgewotICAgICAgICByZXR1cm4gZGVmYXVsdFN0b3JhZ2VTZXNzaW9u
KCk7CisgICAgRE5TUmVzb2x2ZVF1ZXVlU291cDo6c2V0R2xvYmFsRGVmYXVsdFNvdXBTZXNzaW9u
QWNjZXNzb3IoW3RoaXNdKCkgLT4gU291cFNlc3Npb24qIHsKKyAgICAgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PE5ldHdvcmtTZXNzaW9uU291cCY+KCpuZXR3b3JrU2Vzc2lvbihQQUw6OlNlc3Npb25J
RDo6ZGVmYXVsdFNlc3Npb25JRCgpKSkuc291cFNlc3Npb24oKTsKICAgICB9KTsKICNlbmRpZgog
CkBAIC0yNzMsOCArMjc0LDkgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6bG93TWVtb3J5SGFuZGxl
cihDcml0aWNhbCBjcml0aWNhbCkKIAogICAgIFdURjo6cmVsZWFzZUZhc3RNYWxsb2NGcmVlTWVt
b3J5KCk7CiAKLSAgICBmb3IgKGF1dG8mIG5ldHdvcmtTZXNzaW9uIDogbV9uZXR3b3JrU2Vzc2lv
bnMudmFsdWVzKCkpCi0gICAgICAgIG5ldHdvcmtTZXNzaW9uLmdldCgpLmNsZWFyUHJlZmV0Y2hD
YWNoZSgpOworICAgIGZvckVhY2hOZXR3b3JrU2Vzc2lvbihbXShOZXR3b3JrU2Vzc2lvbiYgbmV0
d29ya1Nlc3Npb24pIHsKKyAgICAgICAgbmV0d29ya1Nlc3Npb24uY2xlYXJQcmVmZXRjaENhY2hl
KCk7CisgICAgfSk7CiB9CiAKIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmluaXRpYWxpemVOZXR3b3Jr
UHJvY2VzcyhOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyYmIHBhcmFtZXRlcnMpCkBA
IC00ODUsNiArNDg3LDEyIEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmluaXRpYWxpemVTdG9yYWdl
UXVvdGEoY29uc3QgV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMmIHBhCiAgICAgbWFuYWdlcnMu
c2V0RGVmYXVsdFF1b3RhcyhwYXJhbWV0ZXJzLnBlck9yaWdpblN0b3JhZ2VRdW90YSwgcGFyYW1l
dGVycy5wZXJUaGlyZFBhcnR5T3JpZ2luU3RvcmFnZVF1b3RhKTsKIH0KIAordm9pZCBOZXR3b3Jr
UHJvY2Vzczo6Zm9yRWFjaE5ldHdvcmtTZXNzaW9uKGNvbnN0IEZ1bmN0aW9uPHZvaWQoTmV0d29y
a1Nlc3Npb24mKT4mIGZ1bmN0b3IpCit7CisgICAgZm9yIChhdXRvJiBzZXNzaW9uIDogbV9uZXR3
b3JrU2Vzc2lvbnMudmFsdWVzKCkpCisgICAgICAgIGZ1bmN0b3IoKnNlc3Npb24ucHRyKCkpOwor
fQorCiB2b2lkIE5ldHdvcmtQcm9jZXNzOjpzd2l0Y2hUb05ld1Rlc3RpbmdTZXNzaW9uKCkKIHsK
ICNpZiBQTEFURk9STShDT0NPQSkKQEAgLTUwMSw5ICs1MDksNyBAQCB2b2lkIE5ldHdvcmtQcm9j
ZXNzOjpzd2l0Y2hUb05ld1Rlc3RpbmdTZXNzaW9uKCkKICAgICB9CiAKICAgICBtX2RlZmF1bHRO
ZXR3b3JrU3RvcmFnZVNlc3Npb24gPSBzdGQ6Om1ha2VfdW5pcXVlPFdlYkNvcmU6Ok5ldHdvcmtT
dG9yYWdlU2Vzc2lvbj4oUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSwgV1RGTW92
ZShzZXNzaW9uKSwgV1RGTW92ZShjb29raWVTdG9yYWdlKSk7Ci0jZWxpZiBVU0UoU09VUCkKLSAg
ICBtX2RlZmF1bHROZXR3b3JrU3RvcmFnZVNlc3Npb24gPSBzdGQ6Om1ha2VfdW5pcXVlPFdlYkNv
cmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4oUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9u
SUQoKSwgc3RkOjptYWtlX3VuaXF1ZTxXZWJDb3JlOjpTb3VwTmV0d29ya1Nlc3Npb24+KCkpOwot
I2VsaWYgVVNFKENVUkwpCisjZWxpZiBVU0UoQ1VSTCkgfHwgVVNFKFNPVVApCiAgICAgbV9kZWZh
dWx0TmV0d29ya1N0b3JhZ2VTZXNzaW9uID0gc3RkOjptYWtlX3VuaXF1ZTxXZWJDb3JlOjpOZXR3
b3JrU3RvcmFnZVNlc3Npb24+KFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpOwog
I2VuZGlmCiB9CkBAIC01MzUsOSArNTQxLDcgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6ZW5zdXJl
U2Vzc2lvbihjb25zdCBQQUw6OlNlc3Npb25JRCYgc2Vzc2lvbklELCBjb25zdCBTdHJpbmcKICAg
ICB9CiAKICAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gc3RkOjptYWtlX3VuaXF1ZTxO
ZXR3b3JrU3RvcmFnZVNlc3Npb24+KHNlc3Npb25JRCwgV1RGTW92ZShzdG9yYWdlU2Vzc2lvbiks
IFdURk1vdmUoY29va2llU3RvcmFnZSkpOwotI2VsaWYgVVNFKFNPVVApCi0gICAgYWRkUmVzdWx0
Lml0ZXJhdG9yLT52YWx1ZSA9IHN0ZDo6bWFrZV91bmlxdWU8TmV0d29ya1N0b3JhZ2VTZXNzaW9u
PihzZXNzaW9uSUQsIHN0ZDo6bWFrZV91bmlxdWU8U291cE5ldHdvcmtTZXNzaW9uPihzZXNzaW9u
SUQpKTsKLSNlbGlmIFVTRShDVVJMKQorI2VsaWYgVVNFKENVUkwpIHx8IFVTRShTT1VQKQogICAg
IGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBzdGQ6Om1ha2VfdW5pcXVlPE5ldHdvcmtTdG9y
YWdlU2Vzc2lvbj4oc2Vzc2lvbklEKTsKICNlbmRpZgogfQpAQCAtNTkzLDcgKzU5Nyw5IEBAIHZv
aWQgTmV0d29ya1Byb2Nlc3M6OmRlc3Ryb3lTZXNzaW9uKGNvbnN0IFBBTDo6U2Vzc2lvbklEJiBz
ZXNzaW9uSUQpCiAgICAgaWYgKCFzZXNzaW9uSUQuaXNWYWxpZCgpKQogICAgICAgICByZXR1cm47
CiAKKyNpZiAhVVNFKFNPVVApCiAgICAgQVNTRVJUKHNlc3Npb25JRCAhPSBQQUw6OlNlc3Npb25J
RDo6ZGVmYXVsdFNlc3Npb25JRCgpKTsKKyNlbmRpZgogCiAgICAgaWYgKGF1dG8gc2Vzc2lvbiA9
IG1fbmV0d29ya1Nlc3Npb25zLnRha2Uoc2Vzc2lvbklEKSkKICAgICAgICAgc2Vzc2lvbi0+Z2V0
KCkuaW52YWxpZGF0ZUFuZENhbmNlbCgpOwpAQCAtMTE0NSw4ICsxMTUxLDkgQEAgdm9pZCBOZXR3
b3JrUHJvY2Vzczo6c2V0U2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1Jl
bW92YWwoUEFMOjpTZXMKIAogdm9pZCBOZXR3b3JrUHJvY2Vzczo6c2V0UmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0VuYWJsZWQoYm9vbCBlbmFibGVkKQogewotICAgIGZvciAoYXV0byYgbmV0d29ya1Nl
c3Npb24gOiBtX25ldHdvcmtTZXNzaW9ucy52YWx1ZXMoKSkKLSAgICAgICAgbmV0d29ya1Nlc3Np
b24uZ2V0KCkuc2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoZW5hYmxlZCk7CisgICAg
Zm9yRWFjaE5ldHdvcmtTZXNzaW9uKFtlbmFibGVkXShOZXR3b3JrU2Vzc2lvbiYgbmV0d29ya1Nl
c3Npb24pIHsKKyAgICAgICAgbmV0d29ya1Nlc3Npb24uc2V0UmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0VuYWJsZWQoZW5hYmxlZCk7CisgICAgfSk7CiB9CiAKIHZvaWQgTmV0d29ya1Byb2Nlc3M6OnNl
dFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklE
LCBib29sIGRlYnVnTW9kZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25I
YW5kbGVyKQpAQCAtMTM1OCwxMSArMTM2NSwxMSBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpmZXRj
aFdlYnNpdGVEYXRhKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgT3B0aW9uU2V0PFdlYnNpdAog
ICAgIH0KICNlbmRpZgogICAgIGlmICh3ZWJzaXRlRGF0YVR5cGVzLmNvbnRhaW5zKFdlYnNpdGVE
YXRhVHlwZTo6RGlza0NhY2hlKSkgewotICAgICAgICBmb3IgKGF1dG8mIHNlc3Npb24gOiBuZXR3
b3JrU2Vzc2lvbnMoKS52YWx1ZXMoKSkgewotICAgICAgICAgICAgZmV0Y2hEaXNrQ2FjaGVFbnRy
aWVzKHNlc3Npb24tPmNhY2hlKCksIHNlc3Npb25JRCwgZmV0Y2hPcHRpb25zLCBbY2FsbGJhY2tB
Z2dyZWdhdG9yID0gV1RGTW92ZShjYWxsYmFja0FnZ3JlZ2F0b3IpXShhdXRvIGVudHJpZXMpIG11
dGFibGUgeworICAgICAgICBmb3JFYWNoTmV0d29ya1Nlc3Npb24oW3Nlc3Npb25JRCwgZmV0Y2hP
cHRpb25zLCBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBXVEZNb3ZlKGNhbGxiYWNrQWdncmVnYXRvcild
KE5ldHdvcmtTZXNzaW9uJiBzZXNzaW9uKSBtdXRhYmxlIHsKKyAgICAgICAgICAgIGZldGNoRGlz
a0NhY2hlRW50cmllcyhzZXNzaW9uLmNhY2hlKCksIHNlc3Npb25JRCwgZmV0Y2hPcHRpb25zLCBb
Y2FsbGJhY2tBZ2dyZWdhdG9yID0gV1RGTW92ZShjYWxsYmFja0FnZ3JlZ2F0b3IpXShhdXRvIGVu
dHJpZXMpIG11dGFibGUgewogICAgICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+bV93
ZWJzaXRlRGF0YS5lbnRyaWVzLmFwcGVuZFZlY3RvcihlbnRyaWVzKTsKICAgICAgICAgICAgIH0p
OwotICAgICAgICB9CisgICAgICAgIH0pOwogICAgIH0KIH0KIApAQCAtMTUxOCw4ICsxNTI1LDkg
QEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6ZGVsZXRlV2Vic2l0ZURhdGFGb3JPcmlnaW5zKFBBTDo6
U2Vzc2lvbklEIHNlc3Npb25JRCwgT3B0aW8KICNlbmRpZgogCiAgICAgaWYgKHdlYnNpdGVEYXRh
VHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpEaXNrQ2FjaGUpICYmICFzZXNzaW9uSUQu
aXNFcGhlbWVyYWwoKSkgewotICAgICAgICBmb3IgKGF1dG8mIHNlc3Npb24gOiBuZXR3b3JrU2Vz
c2lvbnMoKS52YWx1ZXMoKSkKLSAgICAgICAgICAgIGNsZWFyRGlza0NhY2hlRW50cmllcyhzZXNz
aW9uLT5jYWNoZSgpLCBvcmlnaW5EYXRhcywgW2NsZWFyVGFza3NIYW5kbGVyID0gV1RGTW92ZShj
bGVhclRhc2tzSGFuZGxlcildIHsgfSk7CisgICAgICAgIGZvckVhY2hOZXR3b3JrU2Vzc2lvbihb
b3JpZ2luRGF0YXMsIGNsZWFyVGFza3NIYW5kbGVyID0gV1RGTW92ZShjbGVhclRhc2tzSGFuZGxl
cildKE5ldHdvcmtTZXNzaW9uJiBzZXNzaW9uKSBtdXRhYmxlIHsKKyAgICAgICAgICAgIGNsZWFy
RGlza0NhY2hlRW50cmllcyhzZXNzaW9uLmNhY2hlKCksIG9yaWdpbkRhdGFzLCBbY2xlYXJUYXNr
c0hhbmRsZXIgPSBXVEZNb3ZlKGNsZWFyVGFza3NIYW5kbGVyKV0geyB9KTsKKyAgICAgICAgfSk7
CiAgICAgfQogCiAgICAgaWYgKHdlYnNpdGVEYXRhVHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFU
eXBlOjpDcmVkZW50aWFscykpIHsKQEAgLTE3NTMsOCArMTc2MSw4IEBAIHZvaWQgTmV0d29ya1By
b2Nlc3M6OmRlbGV0ZVdlYnNpdGVEYXRhRm9yUmVnaXN0cmFibGVEb21haW5zKFBBTDo6U2Vzc2lv
bklEIHNlc3NpCiAjZW5kaWYKIAogICAgIGlmICh3ZWJzaXRlRGF0YVR5cGVzLmNvbnRhaW5zKFdl
YnNpdGVEYXRhVHlwZTo6RGlza0NhY2hlKSkgewotICAgICAgICBmb3IgKGF1dG8mIHNlc3Npb24g
OiBuZXR3b3JrU2Vzc2lvbnMoKS52YWx1ZXMoKSkgewotICAgICAgICAgICAgZmV0Y2hEaXNrQ2Fj
aGVFbnRyaWVzKHNlc3Npb24tPmNhY2hlKCksIHNlc3Npb25JRCwgZmV0Y2hPcHRpb25zLCBbZG9t
YWluc1RvRGVsZXRlQWxsQnV0Q29va2llc0ZvciwgY2FsbGJhY2tBZ2dyZWdhdG9yID0gY2FsbGJh
Y2tBZ2dyZWdhdG9yLmNvcHlSZWYoKSwgc2Vzc2lvbiA9IHNlc3Npb24uY29weVJlZigpXShhdXRv
IGVudHJpZXMpIG11dGFibGUgeworICAgICAgICBmb3JFYWNoTmV0d29ya1Nlc3Npb24oW3Nlc3Np
b25JRCwgZmV0Y2hPcHRpb25zLCAmZG9tYWluc1RvRGVsZXRlQWxsQnV0Q29va2llc0ZvciwgJmNh
bGxiYWNrQWdncmVnYXRvcl0oTmV0d29ya1Nlc3Npb24mIHNlc3Npb24pIHsKKyAgICAgICAgICAg
IGZldGNoRGlza0NhY2hlRW50cmllcyhzZXNzaW9uLmNhY2hlKCksIHNlc3Npb25JRCwgZmV0Y2hP
cHRpb25zLCBbZG9tYWluc1RvRGVsZXRlQWxsQnV0Q29va2llc0ZvciwgY2FsbGJhY2tBZ2dyZWdh
dG9yID0gY2FsbGJhY2tBZ2dyZWdhdG9yLmNvcHlSZWYoKSwgc2Vzc2lvbiA9IG1ha2VSZWYoc2Vz
c2lvbildKGF1dG8gZW50cmllcykgbXV0YWJsZSB7CiAKICAgICAgICAgICAgICAgICBWZWN0b3I8
U2VjdXJpdHlPcmlnaW5EYXRhPiBlbnRyaWVzVG9EZWxldGU7CiAgICAgICAgICAgICAgICAgZm9y
IChhdXRvJiBlbnRyeSA6IGVudHJpZXMpIHsKQEAgLTE3NjUsNyArMTc3Myw3IEBAIHZvaWQgTmV0
d29ya1Byb2Nlc3M6OmRlbGV0ZVdlYnNpdGVEYXRhRm9yUmVnaXN0cmFibGVEb21haW5zKFBBTDo6
U2Vzc2lvbklEIHNlc3NpCiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGNsZWFy
RGlza0NhY2hlRW50cmllcyhzZXNzaW9uLT5jYWNoZSgpLCBlbnRyaWVzVG9EZWxldGUsIFtjYWxs
YmFja0FnZ3JlZ2F0b3IgPSBjYWxsYmFja0FnZ3JlZ2F0b3IuY29weVJlZigpXSB7IH0pOwogICAg
ICAgICAgICAgfSk7Ci0gICAgICAgIH0KKyAgICAgICAgfSk7CiAgICAgfQogCiAgICAgYXV0byBk
YXRhVHlwZXNGb3JVSVByb2Nlc3MgPSBXZWJzaXRlRGF0YTo6ZmlsdGVyKHdlYnNpdGVEYXRhVHlw
ZXMsIFdlYnNpdGVEYXRhUHJvY2Vzc1R5cGU6OlVJKTsKQEAgLTE4ODcsMTEgKzE4OTUsMTEgQEAg
dm9pZCBOZXR3b3JrUHJvY2Vzczo6cmVnaXN0cmFibGVEb21haW5zV2l0aFdlYnNpdGVEYXRhKFBB
TDo6U2Vzc2lvbklEIHNlc3Npb25JRCwKICNlbmRpZgogICAgIAogICAgIGlmICh3ZWJzaXRlRGF0
YVR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6RGlza0NhY2hlKSkgewotICAgICAgICBm
b3IgKGF1dG8mIHNlc3Npb24gOiBuZXR3b3JrU2Vzc2lvbnMoKS52YWx1ZXMoKSkgewotICAgICAg
ICAgICAgZmV0Y2hEaXNrQ2FjaGVFbnRyaWVzKHNlc3Npb24tPmNhY2hlKCksIHNlc3Npb25JRCwg
ZmV0Y2hPcHRpb25zLCBbY2FsbGJhY2tBZ2dyZWdhdG9yID0gY2FsbGJhY2tBZ2dyZWdhdG9yLmNv
cHlSZWYoKV0oYXV0byBlbnRyaWVzKSBtdXRhYmxlIHsKKyAgICAgICAgZm9yRWFjaE5ldHdvcmtT
ZXNzaW9uKFtzZXNzaW9uSUQsIGZldGNoT3B0aW9ucywgJmNhbGxiYWNrQWdncmVnYXRvcl0oTmV0
d29ya1Nlc3Npb24mIHNlc3Npb24pIHsKKyAgICAgICAgICAgIGZldGNoRGlza0NhY2hlRW50cmll
cyhzZXNzaW9uLmNhY2hlKCksIHNlc3Npb25JRCwgZmV0Y2hPcHRpb25zLCBbY2FsbGJhY2tBZ2dy
ZWdhdG9yID0gY2FsbGJhY2tBZ2dyZWdhdG9yLmNvcHlSZWYoKV0oYXV0byBlbnRyaWVzKSBtdXRh
YmxlIHsKICAgICAgICAgICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3ItPm1fd2Vic2l0ZURhdGEu
ZW50cmllcy5hcHBlbmRWZWN0b3IoZW50cmllcyk7CiAgICAgICAgICAgICB9KTsKLSAgICAgICAg
fQorICAgICAgICB9KTsKICAgICB9CiB9CiAjZW5kaWYgLy8gRU5BQkxFKFJFU09VUkNFX0xPQURf
U1RBVElTVElDUykKQEAgLTE5ODMsMTEgKzE5OTEsMTEgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6
c2V0Q2FjaGVNb2RlbChDYWNoZU1vZGVsIGNhY2hlTW9kZWwpCiAgICAgICAgIGRpc2tGcmVlU2l6
ZSAvPSBLQiAqIDEwMDA7CiAgICAgICAgIGNhbGN1bGF0ZVVSTENhY2hlU2l6ZXMoY2FjaGVNb2Rl
bCwgZGlza0ZyZWVTaXplLCB1cmxDYWNoZU1lbW9yeUNhcGFjaXR5LCB1cmxDYWNoZURpc2tDYXBh
Y2l0eSk7CiAgICAgfQotICAgIAotICAgIGZvciAoYXV0byYgc2Vzc2lvbiA6IG5ldHdvcmtTZXNz
aW9ucygpLnZhbHVlcygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBjYWNoZSA9IHNlc3Npb24tPmNh
Y2hlKCkpCisKKyAgICBmb3JFYWNoTmV0d29ya1Nlc3Npb24oW3VybENhY2hlRGlza0NhcGFjaXR5
XShOZXR3b3JrU2Vzc2lvbiYgc2Vzc2lvbikgeworICAgICAgICBpZiAoYXV0byogY2FjaGUgPSBz
ZXNzaW9uLmNhY2hlKCkpCiAgICAgICAgICAgICBjYWNoZS0+c2V0Q2FwYWNpdHkodXJsQ2FjaGVE
aXNrQ2FwYWNpdHkpOwotICAgIH0KKyAgICB9KTsKIH0KIAogdm9pZCBOZXR3b3JrUHJvY2Vzczo6
c2V0Q2FuSGFuZGxlSFRUUFNTZXJ2ZXJUcnVzdEV2YWx1YXRpb24oYm9vbCB2YWx1ZSkKQEAgLTIw
ODEsOCArMjA4OSw5IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmFjdHVhbFByZXBhcmVUb1N1c3Bl
bmQoU2hvdWxkQWNrbm93bGVkZ2VXaGVuUmVhZHlUb1N1c3BlbmQKICAgICB9CiAjZW5kaWYKIAot
ICAgIGZvciAoYXV0byYgc2Vzc2lvbiA6IG1fbmV0d29ya1Nlc3Npb25zKQotICAgICAgICBzZXNz
aW9uLnZhbHVlLT5zdG9yYWdlTWFuYWdlcigpLnN1c3BlbmQoW2NhbGxiYWNrQWdncmVnYXRvcl0g
eyB9KTsKKyAgICBmb3JFYWNoTmV0d29ya1Nlc3Npb24oWyZjYWxsYmFja0FnZ3JlZ2F0b3JdKE5l
dHdvcmtTZXNzaW9uJiBzZXNzaW9uKSB7CisgICAgICAgIHNlc3Npb24uc3RvcmFnZU1hbmFnZXIo
KS5zdXNwZW5kKFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgfSk7CiB9CiAKIHZvaWQg
TmV0d29ya1Byb2Nlc3M6OnByb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHkoKQpAQCAtMjE1Miw4
ICsyMTYxLDkgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6cmVzdW1lKCkKICAgICAgICAgc2VydmVy
LT5yZXN1bWUoKTsKICNlbmRpZgogCi0gICAgZm9yIChhdXRvJiBzZXNzaW9uIDogbV9uZXR3b3Jr
U2Vzc2lvbnMpCi0gICAgICAgIHNlc3Npb24udmFsdWUtPnN0b3JhZ2VNYW5hZ2VyKCkucmVzdW1l
KCk7CisgICAgZm9yRWFjaE5ldHdvcmtTZXNzaW9uKFtdKE5ldHdvcmtTZXNzaW9uJiBzZXNzaW9u
KSB7CisgICAgICAgIHNlc3Npb24uc3RvcmFnZU1hbmFnZXIoKS5yZXN1bWUoKTsKKyAgICB9KTsK
IH0KIAogdm9pZCBOZXR3b3JrUHJvY2Vzczo6cHJlZmV0Y2hETlMoY29uc3QgU3RyaW5nJiBob3N0
bmFtZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1By
b2Nlc3MuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaApp
bmRleCA2OWYzZDRmNjc5Mi4uMDYyNmI1NmZlZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmgKQEAgLTE2Niw4ICsxNjYsNyBAQCBwdWJsaWM6CiAg
ICAgTmV0d29ya1Nlc3Npb24qIG5ldHdvcmtTZXNzaW9uQnlDb25uZWN0aW9uKElQQzo6Q29ubmVj
dGlvbiYpIGNvbnN0OwogICAgIHZvaWQgZGVzdHJveVNlc3Npb24oY29uc3QgUEFMOjpTZXNzaW9u
SUQmKTsKIAotICAgIC8vIE5lZWRlZCBmb3IgdGVzdCBpbmZyYXN0cnVjdHVyZQotICAgIEhhc2hN
YXA8UEFMOjpTZXNzaW9uSUQsIFJlZjxOZXR3b3JrU2Vzc2lvbj4+JiBuZXR3b3JrU2Vzc2lvbnMo
KSB7IHJldHVybiBtX25ldHdvcmtTZXNzaW9uczsgfQorICAgIHZvaWQgZm9yRWFjaE5ldHdvcmtT
ZXNzaW9uKGNvbnN0IEZ1bmN0aW9uPHZvaWQoTmV0d29ya1Nlc3Npb24mKT4mKTsKIAogICAgIHZv
aWQgZm9yRWFjaE5ldHdvcmtTdG9yYWdlU2Vzc2lvbihjb25zdCBGdW5jdGlvbjx2b2lkKFdlYkNv
cmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYpPiYpOwogICAgIFdlYkNvcmU6Ok5ldHdvcmtTdG9y
YWdlU2Vzc2lvbiogc3RvcmFnZVNlc3Npb24oY29uc3QgUEFMOjpTZXNzaW9uSUQmKSBjb25zdDsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1N0b3JhZ2VT
ZXNzaW9uUHJvdmlkZXIuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1N0
b3JhZ2VTZXNzaW9uUHJvdmlkZXIuaAppbmRleCA4YWE5MjA0NGIyMC4uOTViYjFkNGQzOGIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1N0b3JhZ2VTZXNz
aW9uUHJvdmlkZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtT
dG9yYWdlU2Vzc2lvblByb3ZpZGVyLmgKQEAgLTMxLDYgKzMxLDEwIEBACiAjaW5jbHVkZSA8cGFs
L1Nlc3Npb25JRC5oPgogI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CiAKKyNpZiBVU0UoU09VUCkK
KyNpbmNsdWRlICJOZXR3b3JrU2Vzc2lvblNvdXAuaCIKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2Vi
S2l0IHsKIAogY2xhc3MgTmV0d29ya1N0b3JhZ2VTZXNzaW9uUHJvdmlkZXIgZmluYWwgOiBwdWJs
aWMgV2ViQ29yZTo6U3RvcmFnZVNlc3Npb25Qcm92aWRlciB7CkBAIC00OSw2ICs1MywxOSBAQCBw
cml2YXRlOgogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKKyNpZiBVU0UoU09VUCkK
KyAgICBTb3VwU2Vzc2lvbiogc291cFNlc3Npb24oKSBjb25zdCBmaW5hbAorICAgIHsKKyAgICAg
ICAgaWYgKCFtX25ldHdvcmtQcm9jZXNzKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisK
KyAgICAgICAgaWYgKGF1dG8qIHNlc3Npb24gPSBtX25ldHdvcmtQcm9jZXNzLT5uZXR3b3JrU2Vz
c2lvbihtX3Nlc3Npb25JRCkpCisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8TmV0d29y
a1Nlc3Npb25Tb3VwJj4oKnNlc3Npb24pLnNvdXBTZXNzaW9uKCk7CisKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgfQorI2VuZGlmCisKICAgICBXZWFrUHRyPE5ldHdvcmtQcm9jZXNzPiBt
X25ldHdvcmtQcm9jZXNzOwogICAgIFBBTDo6U2Vzc2lvbklEIG1fc2Vzc2lvbklEOwogfTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya1Byb2Nl
c3NDb2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya1By
b2Nlc3NDb2NvYS5tbQppbmRleCAwN2I5NjMzYmQ0OC4uMDc3ZjE2ZmE2NTAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya1Byb2Nlc3NDb2NvYS5t
bQorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtQcm9jZXNz
Q29jb2EubW0KQEAgLTE5OSwxMCArMTk5LDEwIEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmNsZWFy
RGlza0NhY2hlKFdhbGxUaW1lIG1vZGlmaWVkU2luY2UsIENvbXBsZXRpb25IYW5kbGVyPHZvCiAg
ICAgYXV0byBncm91cCA9IG1fY2xlYXJDYWNoZURpc3BhdGNoR3JvdXA7CiAgICAgZGlzcGF0Y2hf
Z3JvdXBfYXN5bmMoZ3JvdXAsIGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIG1ha2VCbG9ja1B0
cihbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBtb2RpZmllZFNpbmNlLCBj
b21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoKSBtdXRhYmxl
IHsKICAgICAgICAgYXV0byBhZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUo
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICBmb3IgKGF1dG8mIHNlc3Npb24g
OiBuZXR3b3JrU2Vzc2lvbnMoKS52YWx1ZXMoKSkgewotICAgICAgICAgICAgaWYgKGF1dG8qIGNh
Y2hlID0gc2Vzc2lvbi0+Y2FjaGUoKSkKKyAgICAgICAgZm9yRWFjaE5ldHdvcmtTZXNzaW9uKFtt
b2RpZmllZFNpbmNlLCAmYWdncmVnYXRvcl0oTmV0d29ya1Nlc3Npb24mIHNlc3Npb24pIHsKKyAg
ICAgICAgICAgIGlmIChhdXRvKiBjYWNoZSA9IHNlc3Npb24uY2FjaGUoKSkKICAgICAgICAgICAg
ICAgICBjYWNoZS0+Y2xlYXIobW9kaWZpZWRTaW5jZSwgW2FnZ3JlZ2F0b3IgPSBhZ2dyZWdhdG9y
LmNvcHlSZWYoKV0gKCkgeyB9KTsKLSAgICAgICAgfQorICAgICAgICB9KTsKICAgICB9KS5nZXQo
KSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvaW9zL05l
dHdvcmtQcm9jZXNzSU9TLm1tIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9pb3MvTmV0
d29ya1Byb2Nlc3NJT1MubW0KaW5kZXggMjlkZDA4NzdiZDQuLmZlYWRkYmNkMWQwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2lvcy9OZXR3b3JrUHJvY2Vzc0lPUy5t
bQorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2lvcy9OZXR3b3JrUHJvY2Vzc0lP
Uy5tbQpAQCAtNzgsMTAgKzc4LDEwIEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmNsZWFyQ2FjaGVG
b3JBbGxPcmlnaW5zKHVpbnQzMl90IGNhY2hlc1RvQ2xlYXIpCiAgICAgUmVzb3VyY2VDYWNoZXNU
b0NsZWFyIHJlc291cmNlQ2FjaGVzVG9DbGVhciA9IHN0YXRpY19jYXN0PFJlc291cmNlQ2FjaGVz
VG9DbGVhcj4oY2FjaGVzVG9DbGVhcik7CiAgICAgaWYgKHJlc291cmNlQ2FjaGVzVG9DbGVhciA9
PSBJbk1lbW9yeVJlc291cmNlQ2FjaGVzT25seSkKICAgICAgICAgcmV0dXJuOwotICAgIGZvciAo
YXV0byYgc2Vzc2lvbiA6IG5ldHdvcmtTZXNzaW9ucygpLnZhbHVlcygpKSB7Ci0gICAgICAgIGlm
IChhdXRvKiBjYWNoZSA9IHNlc3Npb24tPmNhY2hlKCkpCisgICAgZm9yRWFjaE5ldHdvcmtTZXNz
aW9uKFtdKE5ldHdvcmtTZXNzaW9uJiBzZXNzaW9uKSB7CisgICAgICAgIGlmIChhdXRvKiBjYWNo
ZSA9IHNlc3Npb24uY2FjaGUoKSkKICAgICAgICAgICAgIGNhY2hlLT5jbGVhcigpOwotICAgIH0K
KyAgICB9KTsKIH0KIAogdm9pZCBOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1Jbml0aWFsaXplTmV0
d29ya1Byb2Nlc3MoY29uc3QgTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmIHBhcmFt
ZXRlcnMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0
d29ya1Byb2Nlc3NNYWluU291cC5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3Nv
dXAvTmV0d29ya1Byb2Nlc3NNYWluU291cC5jcHAKaW5kZXggZjdkMTQ1MTA0Y2UuLmFkMGJkYWQ1
ZGMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29y
a1Byb2Nlc3NNYWluU291cC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9z
b3VwL05ldHdvcmtQcm9jZXNzTWFpblNvdXAuY3BwCkBAIC00MSw3ICs0MSw3IEBAIHB1YmxpYzoK
ICAgICB7CiAgICAgICAgIC8vIE5lZWRlZCB0byBkZXN0cm95IHRoZSBTb3VwU2Vzc2lvbiBhbmQg
U291cENvb2tpZUphciwgZS5nLiB0byBhdm9pZAogICAgICAgICAvLyBsZWFraW5nIFNRTGl0ZSB0
ZW1wb3Jhcnkgam91cm5hbGluZyBmaWxlcy4KLSAgICAgICAgZ2xvYmFsTmV0d29ya1Byb2Nlc3Mt
PmRlZmF1bHRTdG9yYWdlU2Vzc2lvbigpLmNsZWFyU291cE5ldHdvcmtTZXNzaW9uKCk7CisgICAg
ICAgIGdsb2JhbE5ldHdvcmtQcm9jZXNzLT5kZXN0cm95U2Vzc2lvbihQQUw6OlNlc3Npb25JRDo6
ZGVmYXVsdFNlc3Npb25JRCgpKTsKICAgICB9CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Byb2Nlc3NTb3VwLmNwcCBiL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrUHJvY2Vzc1NvdXAuY3BwCmluZGV4IDdj
NzhiMGIzMGMyLi44M2MyZjI4ZWE1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9zb3VwL05ldHdvcmtQcm9jZXNzU291cC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtQcm9jZXNzU291cC5jcHAKQEAgLTI5LDcgKzI5LDcg
QEAKIAogI2luY2x1ZGUgIk5ldHdvcmtDYWNoZS5oIgogI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNz
Q3JlYXRpb25QYXJhbWV0ZXJzLmgiCi0jaW5jbHVkZSAiTmV0d29ya1Nlc3Npb24uaCIKKyNpbmNs
dWRlICJOZXR3b3JrU2Vzc2lvblNvdXAuaCIKICNpbmNsdWRlICJSZXNvdXJjZUNhY2hlc1RvQ2xl
YXIuaCIKICNpbmNsdWRlICJXZWJDb29raWVNYW5hZ2VyLmgiCiAjaW5jbHVkZSAiV2ViS2l0Q2Fj
aGVkUmVzb2x2ZXIuaCIKQEAgLTk5LDggKzk5LDggQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6dXNl
clByZWZlcnJlZExhbmd1YWdlc0NoYW5nZWQoY29uc3QgVmVjdG9yPFN0cmluZz4mIGxhbmd1YWcK
IHsKICAgICBhdXRvIGFjY2VwdExhbmd1YWdlcyA9IGJ1aWxkQWNjZXB0TGFuZ3VhZ2VzKGxhbmd1
YWdlcyk7CiAgICAgU291cE5ldHdvcmtTZXNzaW9uOjpzZXRJbml0aWFsQWNjZXB0TGFuZ3VhZ2Vz
KGFjY2VwdExhbmd1YWdlcyk7Ci0gICAgZm9yRWFjaE5ldHdvcmtTdG9yYWdlU2Vzc2lvbihbJmFj
Y2VwdExhbmd1YWdlc10oY29uc3QgYXV0byYgc2Vzc2lvbikgewotICAgICAgICBzZXNzaW9uLnNv
dXBOZXR3b3JrU2Vzc2lvbigpLnNldEFjY2VwdExhbmd1YWdlcyhhY2NlcHRMYW5ndWFnZXMpOwor
ICAgIGZvckVhY2hOZXR3b3JrU2Vzc2lvbihbJmFjY2VwdExhbmd1YWdlc10oY29uc3QgYXV0byYg
c2Vzc2lvbikgeworICAgICAgICBzdGF0aWNfY2FzdDxjb25zdCBOZXR3b3JrU2Vzc2lvblNvdXAm
PihzZXNzaW9uKS5zb3VwTmV0d29ya1Nlc3Npb24oKS5zZXRBY2NlcHRMYW5ndWFnZXMoYWNjZXB0
TGFuZ3VhZ2VzKTsKICAgICB9KTsKIH0KIApAQCAtMTMzLDcgKzEzMyw3IEBAIHZvaWQgTmV0d29y
a1Byb2Nlc3M6OnBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKGNvbnN0IE5ldHdvcmtQ
cm9jZXNzQ3JlYXRpCiAKIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNl
c3Npb24+IE5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUNyZWF0ZURlZmF1bHRTdG9yYWdlU2Vzc2lv
bigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8V2ViQ29yZTo6TmV0d29y
a1N0b3JhZ2VTZXNzaW9uPihQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpLCBzdGQ6
Om1ha2VfdW5pcXVlPFNvdXBOZXR3b3JrU2Vzc2lvbj4oUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRT
ZXNzaW9uSUQoKSkpOworICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPFdlYkNvcmU6Ok5ldHdv
cmtTdG9yYWdlU2Vzc2lvbj4oUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSk7CiB9
CiAKIHZvaWQgTmV0d29ya1Byb2Nlc3M6OnNldElnbm9yZVRMU0Vycm9ycyhib29sIGlnbm9yZVRM
U0Vycm9ycykKQEAgLTE1NywxMCArMTU3LDEwIEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmNsZWFy
Q2FjaGVGb3JBbGxPcmlnaW5zKHVpbnQzMl90IGNhY2hlc1RvQ2xlYXIpCiB2b2lkIE5ldHdvcmtQ
cm9jZXNzOjpjbGVhckRpc2tDYWNoZShXYWxsVGltZSBtb2RpZmllZFNpbmNlLCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgYXV0byBhZ2dyZWdh
dG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpOwotICAgIGZvciAoYXV0byYgc2Vzc2lvbiA6IG5ldHdvcmtTZXNzaW9ucygpLnZhbHVlcygp
KSB7Ci0gICAgICAgIGlmIChhdXRvKiBjYWNoZSA9IHNlc3Npb24tPmNhY2hlKCkpCisgICAgZm9y
RWFjaE5ldHdvcmtTZXNzaW9uKFttb2RpZmllZFNpbmNlLCAmYWdncmVnYXRvcl0oTmV0d29ya1Nl
c3Npb24mIHNlc3Npb24pIHsKKyAgICAgICAgaWYgKGF1dG8qIGNhY2hlID0gc2Vzc2lvbi5jYWNo
ZSgpKQogICAgICAgICAgICAgY2FjaGUtPmNsZWFyKG1vZGlmaWVkU2luY2UsIFthZ2dyZWdhdG9y
ID0gYWdncmVnYXRvci5jb3B5UmVmKCldICgpIHsgfSk7Ci0gICAgfQorICAgIH0pOwogfQogCiB2
b2lkIE5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybVRlcm1pbmF0ZSgpCkBAIC0xNzEsOCArMTcxLDgg
QEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1UZXJtaW5hdGUoKQogdm9pZCBOZXR3b3Jr
UHJvY2Vzczo6c2V0TmV0d29ya1Byb3h5U2V0dGluZ3MoY29uc3QgU291cE5ldHdvcmtQcm94eVNl
dHRpbmdzJiBzZXR0aW5ncykKIHsKICAgICBTb3VwTmV0d29ya1Nlc3Npb246OnNldFByb3h5U2V0
dGluZ3Moc2V0dGluZ3MpOwotICAgIGZvckVhY2hOZXR3b3JrU3RvcmFnZVNlc3Npb24oW10oY29u
c3QgYXV0byYgc2Vzc2lvbikgewotICAgICAgICBzZXNzaW9uLnNvdXBOZXR3b3JrU2Vzc2lvbigp
LnNldHVwUHJveHkoKTsKKyAgICBmb3JFYWNoTmV0d29ya1Nlc3Npb24oW10oY29uc3QgYXV0byYg
c2Vzc2lvbikgeworICAgICAgICBzdGF0aWNfY2FzdDxjb25zdCBOZXR3b3JrU2Vzc2lvblNvdXAm
PihzZXNzaW9uKS5zb3VwTmV0d29ya1Nlc3Npb24oKS5zZXR1cFByb3h5KCk7CiAgICAgfSk7CiB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3Jr
U2Vzc2lvblNvdXAuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdv
cmtTZXNzaW9uU291cC5jcHAKaW5kZXggZjdkZWM3MDQ4ZDEuLjczNTUyNTdiZWRhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Nlc3Npb25Tb3Vw
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Nlc3Np
b25Tb3VwLmNwcApAQCAtNDEsMTMgKzQxLDE5IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwog
CiBOZXR3b3JrU2Vzc2lvblNvdXA6Ok5ldHdvcmtTZXNzaW9uU291cChOZXR3b3JrUHJvY2VzcyYg
bmV0d29ya1Byb2Nlc3MsIE5ldHdvcmtTZXNzaW9uQ3JlYXRpb25QYXJhbWV0ZXJzJiYgcGFyYW1l
dGVycykKICAgICA6IE5ldHdvcmtTZXNzaW9uKG5ldHdvcmtQcm9jZXNzLCBwYXJhbWV0ZXJzKQor
ICAgICwgbV9uZXR3b3JrU2Vzc2lvbihzdGQ6Om1ha2VfdW5pcXVlPFNvdXBOZXR3b3JrU2Vzc2lv
bj4obV9zZXNzaW9uSUQpKQogewotICAgIG5ldHdvcmtTdG9yYWdlU2Vzc2lvbigpLT5zZXRDb29r
aWVPYnNlcnZlckhhbmRsZXIoW3RoaXNdIHsKLSAgICAgICAgdGhpcy0+bmV0d29ya1Byb2Nlc3Mo
KS5zdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXI+KCktPm5vdGlmeUNvb2tpZXNEaWRDaGFuZ2Uo
bV9zZXNzaW9uSUQpOwotICAgIH0pOworICAgIGF1dG8qIHN0b3JhZ2VTZXNzaW9uID0gbmV0d29y
a1N0b3JhZ2VTZXNzaW9uKCk7CisgICAgQVNTRVJUKHN0b3JhZ2VTZXNzaW9uKTsKIAogICAgIGlm
ICghcGFyYW1ldGVycy5jb29raWVQZXJzaXN0ZW50U3RvcmFnZVBhdGguaXNFbXB0eSgpKQotICAg
ICAgICB0aGlzLT5uZXR3b3JrUHJvY2VzcygpLnN1cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlcj4o
KS0+c2V0Q29va2llUGVyc2lzdGVudFN0b3JhZ2UobV9zZXNzaW9uSUQsIHBhcmFtZXRlcnMuY29v
a2llUGVyc2lzdGVudFN0b3JhZ2VQYXRoLCBwYXJhbWV0ZXJzLmNvb2tpZVBlcnNpc3RlbnRTdG9y
YWdlVHlwZSk7CisgICAgICAgIHNldENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlKHBhcmFtZXRlcnMu
Y29va2llUGVyc2lzdGVudFN0b3JhZ2VQYXRoLCBwYXJhbWV0ZXJzLmNvb2tpZVBlcnNpc3RlbnRT
dG9yYWdlVHlwZSk7CisgICAgZWxzZQorICAgICAgICBtX25ldHdvcmtTZXNzaW9uLT5zZXRDb29r
aWVKYXIoc3RvcmFnZVNlc3Npb24tPmNvb2tpZVN0b3JhZ2UoKSk7CisKKyAgICBzdG9yYWdlU2Vz
c2lvbi0+c2V0Q29va2llT2JzZXJ2ZXJIYW5kbGVyKFt0aGlzXSB7CisgICAgICAgIHRoaXMtPm5l
dHdvcmtQcm9jZXNzKCkuc3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2VyPigpLT5ub3RpZnlDb29r
aWVzRGlkQ2hhbmdlKG1fc2Vzc2lvbklEKTsKKyAgICB9KTsKIH0KIAogTmV0d29ya1Nlc3Npb25T
b3VwOjp+TmV0d29ya1Nlc3Npb25Tb3VwKCkKQEAgLTU4LDcgKzY0LDMxIEBAIE5ldHdvcmtTZXNz
aW9uU291cDo6fk5ldHdvcmtTZXNzaW9uU291cCgpCiAKIFNvdXBTZXNzaW9uKiBOZXR3b3JrU2Vz
c2lvblNvdXA6OnNvdXBTZXNzaW9uKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbmV0d29ya1N0b3Jh
Z2VTZXNzaW9uKCktPnNvdXBOZXR3b3JrU2Vzc2lvbigpLnNvdXBTZXNzaW9uKCk7CisgICAgcmV0
dXJuIG1fbmV0d29ya1Nlc3Npb24tPnNvdXBTZXNzaW9uKCk7Cit9CisKK3ZvaWQgTmV0d29ya1Nl
c3Npb25Tb3VwOjpzZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShjb25zdCBTdHJpbmcmIHN0b3Jh
Z2VQYXRoLCBTb3VwQ29va2llUGVyc2lzdGVudFN0b3JhZ2VUeXBlIHN0b3JhZ2VUeXBlKQorewor
ICAgIGF1dG8qIHN0b3JhZ2VTZXNzaW9uID0gbmV0d29ya1N0b3JhZ2VTZXNzaW9uKCk7CisgICAg
aWYgKCFzdG9yYWdlU2Vzc2lvbikKKyAgICAgICAgcmV0dXJuOworCisgICAgR1JlZlB0cjxTb3Vw
Q29va2llSmFyPiBqYXI7CisgICAgc3dpdGNoIChzdG9yYWdlVHlwZSkgeworICAgIGNhc2UgU291
cENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlVHlwZTo6VGV4dDoKKyAgICAgICAgamFyID0gYWRvcHRH
UmVmKHNvdXBfY29va2llX2phcl90ZXh0X25ldyhzdG9yYWdlUGF0aC51dGY4KCkuZGF0YSgpLCBG
QUxTRSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFNvdXBDb29raWVQZXJzaXN0ZW50U3Rv
cmFnZVR5cGU6OlNRTGl0ZToKKyAgICAgICAgamFyID0gYWRvcHRHUmVmKHNvdXBfY29va2llX2ph
cl9kYl9uZXcoc3RvcmFnZVBhdGgudXRmOCgpLmRhdGEoKSwgRkFMU0UpKTsKKyAgICAgICAgYnJl
YWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQor
CisgICAgc291cF9jb29raWVfamFyX3NldF9hY2NlcHRfcG9saWN5KGphci5nZXQoKSwgc291cF9j
b29raWVfamFyX2dldF9hY2NlcHRfcG9saWN5KHN0b3JhZ2VTZXNzaW9uLT5jb29raWVTdG9yYWdl
KCkpKTsKKyAgICBzdG9yYWdlU2Vzc2lvbi0+c2V0Q29va2llU3RvcmFnZShXVEZNb3ZlKGphcikp
OworCisgICAgbV9uZXR3b3JrU2Vzc2lvbi0+c2V0Q29va2llSmFyKHN0b3JhZ2VTZXNzaW9uLT5j
b29raWVTdG9yYWdlKCkpOwogfQogCiB2b2lkIE5ldHdvcmtTZXNzaW9uU291cDo6Y2xlYXJDcmVk
ZW50aWFscygpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3NvdXAv
TmV0d29ya1Nlc3Npb25Tb3VwLmggYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3NvdXAv
TmV0d29ya1Nlc3Npb25Tb3VwLmgKaW5kZXggYzMxMzA1NjgyNjIuLmRmNDM5MThjMDdiIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Nlc3Npb25T
b3VwLmgKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtTZXNz
aW9uU291cC5oCkBAIC0yNiw5ICsyNiwxNCBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJO
ZXR3b3JrU2Vzc2lvbi5oIgorI2luY2x1ZGUgIlNvdXBDb29raWVQZXJzaXN0ZW50U3RvcmFnZVR5
cGUuaCIKIAogdHlwZWRlZiBzdHJ1Y3QgX1NvdXBTZXNzaW9uIFNvdXBTZXNzaW9uOwogCituYW1l
c3BhY2UgV2ViQ29yZSB7CitjbGFzcyBTb3VwTmV0d29ya1Nlc3Npb247Cit9CisKIG5hbWVzcGFj
ZSBXZWJLaXQgewogCiBjbGFzcyBOZXR3b3JrU29ja2V0Q2hhbm5lbDsKQEAgLTQzLDE0ICs0OCwx
OSBAQCBwdWJsaWM6CiAgICAgfQogICAgIH5OZXR3b3JrU2Vzc2lvblNvdXAoKTsKIAorICAgIFdl
YkNvcmU6OlNvdXBOZXR3b3JrU2Vzc2lvbiYgc291cE5ldHdvcmtTZXNzaW9uKCkgY29uc3QgeyBy
ZXR1cm4gKm1fbmV0d29ya1Nlc3Npb247IH0KICAgICBTb3VwU2Vzc2lvbiogc291cFNlc3Npb24o
KSBjb25zdDsKIAorICAgIHZvaWQgc2V0Q29va2llUGVyc2lzdGVudFN0b3JhZ2UoY29uc3QgU3Ry
aW5nJiBzdG9yYWdlUGF0aCwgU291cENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlVHlwZSk7CisKIHBy
aXZhdGU6CiAgICAgTmV0d29ya1Nlc3Npb25Tb3VwKE5ldHdvcmtQcm9jZXNzJiwgTmV0d29ya1Nl
c3Npb25DcmVhdGlvblBhcmFtZXRlcnMmJik7CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViU29j
a2V0VGFzaz4gY3JlYXRlV2ViU29ja2V0VGFzayhOZXR3b3JrU29ja2V0Q2hhbm5lbCYsIGNvbnN0
IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFN0cmluZyYgcHJvdG9jb2wpIG92ZXJy
aWRlOwogCiAgICAgdm9pZCBjbGVhckNyZWRlbnRpYWxzKCkgb3ZlcnJpZGU7CisKKyAgICBzdGQ6
OnVuaXF1ZV9wdHI8V2ViQ29yZTo6U291cE5ldHdvcmtTZXNzaW9uPiBtX25ldHdvcmtTZXNzaW9u
OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>374778</attachid>
            <date>2019-07-24 08:09:00 -0700</date>
            <delta_ts>2019-07-26 01:25:02 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>wk2-soup-session-rework.diff</filename>
            <type>text/plain</type>
            <size>45629</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBlN2M1OGE3Yzc2Ni4uMmIxYWQ2N2M0YzcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzNSBAQAorMjAxOS0wNy0yNCAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGln
YWxpYS5jb20+CisKKyAgICAgICAgW1NPVVBdIE1vdmUgU291cE5ldHdvcmtTZXNzaW9uIG93bmVy
c2hpcCBmcm9tIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiB0byBOZXR3b3JrU2Vzc2lvbgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAwMDc2CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTWljaGFlbCBDYXRhbnphcm8uCisKKyAgICAgICAgUmVtb3ZlIHRoZSBT
b3VwTmV0d29ya1Nlc3Npb24gZnJvbSBOZXR3b3JrU3RvcmFnZVNlc3Npb24uCisKKyAgICAgICAg
KiBwbGF0Zm9ybS9uZXR3b3JrL05ldHdvcmtTdG9yYWdlU2Vzc2lvbi5oOgorICAgICAgICAoV2Vi
Q29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpjb29raWVTdG9yYWdlIGNvbnN0KTogUmV0dXJu
IHRoZSBjb29raWUgamFyLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvU3RvcmFnZVNlc3Np
b25Qcm92aWRlci5oOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVNlc3Npb25Qcm92aWRlcjo6
c291cFNlc3Npb24gY29uc3QpOiBUZW1wb3JhcnkgYWRkIHRoaXMgdmlydHVhbCBtZXRob2QgdGhh
dCBpcyByZXF1aXJlZCBieQorICAgICAgICBTb2NrZXRTdHJlYW1IYW5kbGVJbXBsU291cC4gSXQg
d2lsbCBiZSByZW1vdmVkIG9uY2Ugd2Ugc3dpdGNoIHRvIGxpYnNvdXAgV2ViU29ja2V0cyBBUEkg
c29vbi4KKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvRE5TUmVzb2x2ZVF1ZXVlU291
cC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpnbG9iYWxEZWZhdWx0U291cFNlc3Npb25BY2Nlc3Nv
cik6IFJld29yayB0aGUgYWNjZXNzb3IgdG8gcmV0dXJuIHRoZSBTb3VwU2Vzc2lvbiBkaXJlY3Rs
eSBzaW5jZQorICAgICAgICB0aGF0J3Mgd2hhdCB3ZSByZWFsbHkgd2FudC4KKyAgICAgICAgKFdl
YkNvcmU6OkROU1Jlc29sdmVRdWV1ZVNvdXA6OnNldEdsb2JhbERlZmF1bHRTb3VwU2Vzc2lvbkFj
Y2Vzc29yKToKKyAgICAgICAgKFdlYkNvcmU6OkROU1Jlc29sdmVRdWV1ZVNvdXA6OnVwZGF0ZUlz
VXNpbmdQcm94eSk6CisgICAgICAgIChXZWJDb3JlOjpETlNSZXNvbHZlUXVldWVTb3VwOjpwbGF0
Zm9ybVJlc29sdmUpOgorICAgICAgICAoV2ViQ29yZTo6RE5TUmVzb2x2ZVF1ZXVlU291cDo6cmVz
b2x2ZSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9zb3VwL0ROU1Jlc29sdmVRdWV1ZVNv
dXAuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvTmV0d29ya1N0b3JhZ2VTZXNz
aW9uU291cC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb246Ok5l
dHdvcmtTdG9yYWdlU2Vzc2lvbik6IENyZWF0ZSBhbmQgc2V0dXAgdGhlIGRlZmF1bHQgY29va2ll
IGphci4KKyAgICAgICAgKFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6fk5ldHdvcmtT
dG9yYWdlU2Vzc2lvbik6IE9ubHkgZGlzY29ubmVjdCB0aGUgY29va2llIGphciBzaWduYWxzLgor
ICAgICAgICAoV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpzZXRDb29raWVTdG9yYWdl
KTogVXBkYXRlIHRoZSBjb29raWUgamFyLCBub3cgd2Uga25vdyBpdCdzIGFsd2F5cyBhIG5ldyBv
bmUuCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9zb3VwL1NvY2tldFN0cmVhbUhhbmRsZUlt
cGxTb3VwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZUltcGw6OmNy
ZWF0ZSk6IFVzZSB0aGUgbmV3IHZpcnR1YWwgbWV0aG9kIGZyb20gU3RvcmFnZVNlc3Npb25Qcm92
aWRlciB0byBnZXQgdGhlIFNvdXBTZXNzaW9uLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsv
c291cC9Tb3VwTmV0d29ya1Nlc3Npb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6U291cE5ldHdv
cmtTZXNzaW9uOjpTb3VwTmV0d29ya1Nlc3Npb24pOiBSZW1vdmUgdGhlIFNvdXBDb29raWVKYXIg
cGFyYW1ldGVyLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvc291cC9Tb3VwTmV0d29ya1Nl
c3Npb24uaDoKKwogMjAxOS0wNy0yMyAgSnVzdGluIEZhbiAgPGp1c3Rpbl9mYW5AYXBwbGUuY29t
PgogCiAgICAgICAgIFtXZWJHUFVdIEltcGxlbWVudCBlcnJvcnMgZm9yIEdQVVJlbmRlclBpcGVs
aW5lIGNyZWF0aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L05ldHdvcmtTdG9yYWdlU2Vzc2lvbi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9OZXR3b3JrU3RvcmFnZVNlc3Npb24uaAppbmRleCA1OGRhODc4OTA3Zi4uZTJlMTA2YTkxZTYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvTmV0d29ya1N0b3Jh
Z2VTZXNzaW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9OZXR3b3Jr
U3RvcmFnZVNlc3Npb24uaApAQCAtNjUsNyArNjUsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBj
bGFzcyBDdXJsUHJveHlTZXR0aW5nczsKIGNsYXNzIE5ldHdvcmtpbmdDb250ZXh0OwogY2xhc3Mg
UmVzb3VyY2VSZXF1ZXN0OwotY2xhc3MgU291cE5ldHdvcmtTZXNzaW9uOwogCiBzdHJ1Y3QgQ29v
a2llOwogc3RydWN0IENvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFByb3h5OwpAQCAtOTcsMTMgKzk2
LDExIEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCBSZXRhaW5QdHI8Q0ZIVFRQQ29va2ll
U3RvcmFnZVJlZj4gY29va2llU3RvcmFnZSgpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIHN0
YXRpYyB2b2lkIHNldFN0b3JhZ2VBY2Nlc3NBUElFbmFibGVkKGJvb2wpOwogI2VsaWYgVVNFKFNP
VVApCi0gICAgV0VCQ09SRV9FWFBPUlQgTmV0d29ya1N0b3JhZ2VTZXNzaW9uKFBBTDo6U2Vzc2lv
bklELCBzdGQ6OnVuaXF1ZV9wdHI8U291cE5ldHdvcmtTZXNzaW9uPiYmKTsKKyAgICBXRUJDT1JF
X0VYUE9SVCBleHBsaWNpdCBOZXR3b3JrU3RvcmFnZVNlc3Npb24oUEFMOjpTZXNzaW9uSUQpOwog
ICAgIH5OZXR3b3JrU3RvcmFnZVNlc3Npb24oKTsKIAotICAgIFNvdXBOZXR3b3JrU2Vzc2lvbiYg
c291cE5ldHdvcmtTZXNzaW9uKCkgY29uc3Q7Ci0gICAgdm9pZCBjbGVhclNvdXBOZXR3b3JrU2Vz
c2lvbigpOwotICAgIFNvdXBDb29raWVKYXIqIGNvb2tpZVN0b3JhZ2UoKSBjb25zdDsKLSAgICB2
b2lkIHNldENvb2tpZVN0b3JhZ2UoU291cENvb2tpZUphciopOworICAgIFNvdXBDb29raWVKYXIq
IGNvb2tpZVN0b3JhZ2UoKSBjb25zdCB7IHJldHVybiBtX2Nvb2tpZVN0b3JhZ2UuZ2V0KCk7IH0K
KyAgICB2b2lkIHNldENvb2tpZVN0b3JhZ2UoR1JlZlB0cjxTb3VwQ29va2llSmFyPiYmKTsKICAg
ICB2b2lkIHNldENvb2tpZU9ic2VydmVySGFuZGxlcihGdW5jdGlvbjx2b2lkICgpPiYmKTsKICAg
ICB2b2lkIGdldENyZWRlbnRpYWxGcm9tUGVyc2lzdGVudFN0b3JhZ2UoY29uc3QgUHJvdGVjdGlv
blNwYWNlJiwgR0NhbmNlbGxhYmxlKiwgRnVuY3Rpb248dm9pZCAoQ3JlZGVudGlhbCYmKT4mJiBj
b21wbGV0aW9uSGFuZGxlcik7CiAgICAgdm9pZCBzYXZlQ3JlZGVudGlhbFRvUGVyc2lzdGVudFN0
b3JhZ2UoY29uc3QgUHJvdGVjdGlvblNwYWNlJiwgY29uc3QgQ3JlZGVudGlhbCYpOwpAQCAtMTcx
LDcgKzE2OCw3IEBAIHByaXZhdGU6CiAjZWxpZiBVU0UoU09VUCkKICAgICBzdGF0aWMgdm9pZCBj
b29raWVzRGlkQ2hhbmdlKE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiopOwogCi0gICAgbXV0YWJsZSBz
dGQ6OnVuaXF1ZV9wdHI8U291cE5ldHdvcmtTZXNzaW9uPiBtX3Nlc3Npb247CisgICAgR1JlZlB0
cjxTb3VwQ29va2llSmFyPiBtX2Nvb2tpZVN0b3JhZ2U7CiAgICAgRnVuY3Rpb248dm9pZCAoKT4g
bV9jb29raWVPYnNlcnZlckhhbmRsZXI7CiAjZWxpZiBVU0UoQ1VSTCkKICAgICBVbmlxdWVSZWY8
Q29va2llSmFyQ3VybD4gbV9jb29raWVTdG9yYWdlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9TdG9yYWdlU2Vzc2lvblByb3ZpZGVyLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL1N0b3JhZ2VTZXNzaW9uUHJvdmlkZXIuaAppbmRleCAwYzE1
NTViNjZhMC4uMzgwMTA1MDExYjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvU3RvcmFnZVNlc3Npb25Qcm92aWRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvU3RvcmFnZVNlc3Npb25Qcm92aWRlci5oCkBAIC0yNyw2ICsyNywxMCBA
QAogCiAjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CiAKKyNpZiBVU0UoU09V
UCkKK3R5cGVkZWYgc3RydWN0IF9Tb3VwU2Vzc2lvbiBTb3VwU2Vzc2lvbjsKKyNlbmRpZgorCiBu
YW1lc3BhY2UgUEFMIHsKIGNsYXNzIFNlc3Npb25JRDsKIH0KQEAgLTM5LDYgKzQzLDExIEBAIGNs
YXNzIFN0b3JhZ2VTZXNzaW9uUHJvdmlkZXIgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8
U3RvcmFnZVNlc3Npb25Qcm92aWRlCiBwdWJsaWM6CiAgICAgdmlydHVhbCBOZXR3b3JrU3RvcmFn
ZVNlc3Npb24qIHN0b3JhZ2VTZXNzaW9uKCkgY29uc3QgPSAwOwogCisjaWYgVVNFKFNPVVApCisg
ICAgLy8gRklYTUU6IFRoaXMgaXMgb25seSByZXF1aXJlZCBieSBTb2NrZXRTdHJlYW1IYW5kbGVJ
bXBsU291cCwgcmVtb3ZlIGl0IHdoZW4gd2Ugc3dpdGNoIHRvIGxpYnNvdXAgV2ViU29ja2V0cyBB
UEkuCisgICAgdmlydHVhbCBTb3VwU2Vzc2lvbiogc291cFNlc3Npb24oKSBjb25zdCB7IHJldHVy
biBudWxscHRyOyB9CisjZW5kaWYKKwogICAgIHZpcnR1YWwgflN0b3JhZ2VTZXNzaW9uUHJvdmlk
ZXIoKSB7IH0KIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvc291cC9ETlNSZXNvbHZlUXVldWVTb3VwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvc291cC9ETlNSZXNvbHZlUXVldWVTb3VwLmNwcAppbmRleCBkMjM5Nzc1NDFhZi4u
NGJiMzBhODcxZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
c291cC9ETlNSZXNvbHZlUXVldWVTb3VwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL3NvdXAvRE5TUmVzb2x2ZVF1ZXVlU291cC5jcHAKQEAgLTI5LDggKzI5LDYgQEAK
IAogI2lmIFVTRShTT1VQKQogCi0jaW5jbHVkZSAiTmV0d29ya1N0b3JhZ2VTZXNzaW9uLmgiCi0j
aW5jbHVkZSAiU291cE5ldHdvcmtTZXNzaW9uLmgiCiAjaW5jbHVkZSA8bGlic291cC9zb3VwLmg+
CiAjaW5jbHVkZSA8d3RmL0NvbXBsZXRpb25IYW5kbGVyLmg+CiAjaW5jbHVkZSA8d3RmL0Z1bmN0
aW9uLmg+CkBAIC03OCwyMSArNzYsMjEgQEAgc3RhdGljIHZvaWQgcHJveHlSZXNvbHZlZEZvckh0
dHBzVXJpQ2FsbGJhY2soR09iamVjdCogc291cmNlLCBHQXN5bmNSZXN1bHQqIHJlc3UKICAgICBk
aWRSZXNvbHZlUHJveHkoR19QUk9YWV9SRVNPTFZFUihzb3VyY2UpLCByZXN1bHQsICZpc1VzaW5n
SHR0cHNQcm94eSwgc3RhdGljX2Nhc3Q8Ym9vbCo+KHVzZXJEYXRhKSk7CiB9CiAKLUZ1bmN0aW9u
PE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYoKT4mIGdsb2JhbERlZmF1bHROZXR3b3JrU3RvcmFnZVNl
c3Npb25BY2Nlc3NvcigpCitGdW5jdGlvbjxTb3VwU2Vzc2lvbiooKT4mIGdsb2JhbERlZmF1bHRT
b3VwU2Vzc2lvbkFjY2Vzc29yKCkKIHsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8RnVuY3Rp
b248TmV0d29ya1N0b3JhZ2VTZXNzaW9uJigpPj4gYWNjZXNzb3I7CisgICAgc3RhdGljIE5ldmVy
RGVzdHJveWVkPEZ1bmN0aW9uPFNvdXBTZXNzaW9uKigpPj4gYWNjZXNzb3I7CiAgICAgcmV0dXJu
IGFjY2Vzc29yLmdldCgpOwogfQogCi12b2lkIEROU1Jlc29sdmVRdWV1ZVNvdXA6OnNldEdsb2Jh
bERlZmF1bHROZXR3b3JrU3RvcmFnZVNlc3Npb25BY2Nlc3NvcihGdW5jdGlvbjxOZXR3b3JrU3Rv
cmFnZVNlc3Npb24mKCk+JiYgYWNjZXNzb3IpCit2b2lkIEROU1Jlc29sdmVRdWV1ZVNvdXA6OnNl
dEdsb2JhbERlZmF1bHRTb3VwU2Vzc2lvbkFjY2Vzc29yKEZ1bmN0aW9uPFNvdXBTZXNzaW9uKigp
PiYmIGFjY2Vzc29yKQogewotICAgIGdsb2JhbERlZmF1bHROZXR3b3JrU3RvcmFnZVNlc3Npb25B
Y2Nlc3NvcigpID0gV1RGTW92ZShhY2Nlc3Nvcik7CisgICAgZ2xvYmFsRGVmYXVsdFNvdXBTZXNz
aW9uQWNjZXNzb3IoKSA9IFdURk1vdmUoYWNjZXNzb3IpOwogfQogCiB2b2lkIEROU1Jlc29sdmVR
dWV1ZVNvdXA6OnVwZGF0ZUlzVXNpbmdQcm94eSgpCiB7CiAgICAgR1JlZlB0cjxHUHJveHlSZXNv
bHZlcj4gcmVzb2x2ZXI7Ci0gICAgZ19vYmplY3RfZ2V0KGdsb2JhbERlZmF1bHROZXR3b3JrU3Rv
cmFnZVNlc3Npb25BY2Nlc3NvcigpKCkuc291cE5ldHdvcmtTZXNzaW9uKCkuc291cFNlc3Npb24o
KSwgInByb3h5LXJlc29sdmVyIiwgJnJlc29sdmVyLm91dFB0cigpLCBudWxscHRyKTsKKyAgICBn
X29iamVjdF9nZXQoZ2xvYmFsRGVmYXVsdFNvdXBTZXNzaW9uQWNjZXNzb3IoKSgpLCAicHJveHkt
cmVzb2x2ZXIiLCAmcmVzb2x2ZXIub3V0UHRyKCksIG51bGxwdHIpOwogICAgIEFTU0VSVChyZXNv
bHZlcik7CiAKICAgICBnX3Byb3h5X3Jlc29sdmVyX2xvb2t1cF9hc3luYyhyZXNvbHZlci5nZXQo
KSwgImh0dHA6Ly9leGFtcGxlLmNvbS8iLCBudWxscHRyLCBwcm94eVJlc29sdmVkRm9ySHR0cFVy
aUNhbGxiYWNrLCAmbV9pc1VzaW5nUHJveHkpOwpAQCAtMTc1LDcgKzE3Myw3IEBAIHZvaWQgRE5T
UmVzb2x2ZVF1ZXVlU291cDo6cGxhdGZvcm1SZXNvbHZlKGNvbnN0IFN0cmluZyYgaG9zdG5hbWUp
CiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKIAotICAgIHNvdXBfc2Vzc2lvbl9wcmVm
ZXRjaF9kbnMoZ2xvYmFsRGVmYXVsdE5ldHdvcmtTdG9yYWdlU2Vzc2lvbkFjY2Vzc29yKCkoKS5z
b3VwTmV0d29ya1Nlc3Npb24oKS5zb3VwU2Vzc2lvbigpLCBob3N0bmFtZS51dGY4KCkuZGF0YSgp
LCBudWxscHRyLCByZXNvbHZlZENhbGxiYWNrLCBudWxscHRyKTsKKyAgICBzb3VwX3Nlc3Npb25f
cHJlZmV0Y2hfZG5zKGdsb2JhbERlZmF1bHRTb3VwU2Vzc2lvbkFjY2Vzc29yKCkoKSwgaG9zdG5h
bWUudXRmOCgpLmRhdGEoKSwgbnVsbHB0ciwgcmVzb2x2ZWRDYWxsYmFjaywgbnVsbHB0cik7CiB9
CiAKIHZvaWQgRE5TUmVzb2x2ZVF1ZXVlU291cDo6cmVzb2x2ZShjb25zdCBTdHJpbmcmIGhvc3Ru
YW1lLCB1aW50NjRfdCBpZGVudGlmaWVyLCBETlNDb21wbGV0aW9uSGFuZGxlciYmIGNvbXBsZXRp
b25IYW5kbGVyKQpAQCAtMTg0LDcgKzE4Miw3IEBAIHZvaWQgRE5TUmVzb2x2ZVF1ZXVlU291cDo6
cmVzb2x2ZShjb25zdCBTdHJpbmcmIGhvc3RuYW1lLCB1aW50NjRfdCBpZGVudGlmaWVyLCBECiAK
ICAgICBhdXRvIGFkZHJlc3MgPSBhZG9wdEdSZWYoc291cF9hZGRyZXNzX25ldyhob3N0bmFtZS51
dGY4KCkuZGF0YSgpLCAwKSk7CiAgICAgYXV0byBjYW5jZWxsYWJsZSA9IGFkb3B0R1JlZihnX2Nh
bmNlbGxhYmxlX25ldygpKTsKLSAgICBzb3VwX2FkZHJlc3NfcmVzb2x2ZV9hc3luYyhhZGRyZXNz
LmdldCgpLCBzb3VwX3Nlc3Npb25fZ2V0X2FzeW5jX2NvbnRleHQoV2ViQ29yZTo6Z2xvYmFsRGVm
YXVsdE5ldHdvcmtTdG9yYWdlU2Vzc2lvbkFjY2Vzc29yKCkoKS5zb3VwTmV0d29ya1Nlc3Npb24o
KS5zb3VwU2Vzc2lvbigpKSwgY2FuY2VsbGFibGUuZ2V0KCksIHJlc29sdmVkV2l0aE9ic2VydmVy
Q2FsbGJhY2ssIHRoaXMpOworICAgIHNvdXBfYWRkcmVzc19yZXNvbHZlX2FzeW5jKGFkZHJlc3Mu
Z2V0KCksIHNvdXBfc2Vzc2lvbl9nZXRfYXN5bmNfY29udGV4dChnbG9iYWxEZWZhdWx0U291cFNl
c3Npb25BY2Nlc3NvcigpKCkpLCBjYW5jZWxsYWJsZS5nZXQoKSwgcmVzb2x2ZWRXaXRoT2JzZXJ2
ZXJDYWxsYmFjaywgdGhpcyk7CiAKICAgICBnX29iamVjdF9zZXRfZGF0YShHX09CSkVDVChhZGRy
ZXNzLmdldCgpKSwgImlkZW50aWZpZXIiLCBHVUlOVF9UT19QT0lOVEVSKGlkZW50aWZpZXIpKTsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL0ROU1Jl
c29sdmVRdWV1ZVNvdXAuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9E
TlNSZXNvbHZlUXVldWVTb3VwLmgKaW5kZXggNTcyMDM0ZjU0YWMuLmNlZTc5ZjkzMzMxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvRE5TUmVzb2x2ZVF1
ZXVlU291cC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9ETlNS
ZXNvbHZlUXVldWVTb3VwLmgKQEAgLTMwLDYgKzMwLDggQEAKICNpbmNsdWRlIDx3dGYvSGFzaE1h
cC5oPgogI2luY2x1ZGUgPHd0Zi9nbGliL0dSZWZQdHIuaD4KIAordHlwZWRlZiBzdHJ1Y3QgX1Nv
dXBTZXNzaW9uIFNvdXBTZXNzaW9uOworCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIE5l
dHdvcmtTdG9yYWdlU2Vzc2lvbjsKQEAgLTM5LDcgKzQxLDcgQEAgcHVibGljOgogICAgIHVzaW5n
IENvbXBsZXRpb25BbmRDYW5jZWxIYW5kbGVycyA9IHN0ZDo6cGFpcjxXZWJDb3JlOjpETlNDb21w
bGV0aW9uSGFuZGxlciwgR1JlZlB0cjxHQ2FuY2VsbGFibGU+PjsKIAogICAgIEROU1Jlc29sdmVR
dWV1ZVNvdXAoKSA9IGRlZmF1bHQ7Ci0gICAgc3RhdGljIHZvaWQgc2V0R2xvYmFsRGVmYXVsdE5l
dHdvcmtTdG9yYWdlU2Vzc2lvbkFjY2Vzc29yKEZ1bmN0aW9uPE5ldHdvcmtTdG9yYWdlU2Vzc2lv
biYoKT4mJik7CisgICAgc3RhdGljIHZvaWQgc2V0R2xvYmFsRGVmYXVsdFNvdXBTZXNzaW9uQWNj
ZXNzb3IoRnVuY3Rpb248U291cFNlc3Npb24qKCk+JiYpOwogICAgIHZvaWQgcmVzb2x2ZShjb25z
dCBTdHJpbmcmIGhvc3RuYW1lLCB1aW50NjRfdCBpZGVudGlmaWVyLCBETlNDb21wbGV0aW9uSGFu
ZGxlciYmKSBmaW5hbDsKICAgICB2b2lkIHN0b3BSZXNvbHZlKHVpbnQ2NF90IGlkZW50aWZpZXIp
IGZpbmFsOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3Nv
dXAvTmV0d29ya1N0b3JhZ2VTZXNzaW9uU291cC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL3NvdXAvTmV0d29ya1N0b3JhZ2VTZXNzaW9uU291cC5jcHAKaW5kZXggMDUzZjZi
OTFhNjQuLmU0YzhiMGYxM2U2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL3NvdXAvTmV0d29ya1N0b3JhZ2VTZXNzaW9uU291cC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL05ldHdvcmtTdG9yYWdlU2Vzc2lvblNvdXAuY3Bw
CkBAIC01MywzNCArNTMsMTcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1OZXR3b3JrU3Rv
cmFnZVNlc3Npb246Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbihQQUw6OlNlc3Npb25JRCBzZXNzaW9u
SUQsIHN0ZDo6dW5pcXVlX3B0cjxTb3VwTmV0d29ya1Nlc3Npb24+JiYgc2Vzc2lvbikKK05ldHdv
cmtTdG9yYWdlU2Vzc2lvbjo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uKFBBTDo6U2Vzc2lvbklEIHNl
c3Npb25JRCkKICAgICA6IG1fc2Vzc2lvbklEKHNlc3Npb25JRCkKLSAgICAsIG1fc2Vzc2lvbihX
VEZNb3ZlKHNlc3Npb24pKQorICAgICwgbV9jb29raWVTdG9yYWdlKGFkb3B0R1JlZihzb3VwX2Nv
b2tpZV9qYXJfbmV3KCkpKQogewotICAgIEFTU0VSVChtX3Nlc3Npb24tPmNvb2tpZUphcigpKTsK
LSAgICBnX3NpZ25hbF9jb25uZWN0X3N3YXBwZWQobV9zZXNzaW9uLT5jb29raWVKYXIoKSwgImNo
YW5nZWQiLCBHX0NBTExCQUNLKGNvb2tpZXNEaWRDaGFuZ2UpLCB0aGlzKTsKKyAgICBzb3VwX2Nv
b2tpZV9qYXJfc2V0X2FjY2VwdF9wb2xpY3kobV9jb29raWVTdG9yYWdlLmdldCgpLCBTT1VQX0NP
T0tJRV9KQVJfQUNDRVBUX05PX1RISVJEX1BBUlRZKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0X3N3
YXBwZWQobV9jb29raWVTdG9yYWdlLmdldCgpLCAiY2hhbmdlZCIsIEdfQ0FMTEJBQ0soY29va2ll
c0RpZENoYW5nZSksIHRoaXMpOwogfQogCiBOZXR3b3JrU3RvcmFnZVNlc3Npb246On5OZXR3b3Jr
U3RvcmFnZVNlc3Npb24oKQogewotICAgIGNsZWFyU291cE5ldHdvcmtTZXNzaW9uKCk7Ci19Ci0K
LVNvdXBOZXR3b3JrU2Vzc2lvbiYgTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpzb3VwTmV0d29ya1Nl
c3Npb24oKSBjb25zdAotewotICAgIEFTU0VSVChtX3Nlc3Npb24pOwotICAgIHJldHVybiAqbV9z
ZXNzaW9uLmdldCgpOwotfTsKLQotdm9pZCBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmNsZWFyU291
cE5ldHdvcmtTZXNzaW9uKCkKLXsKLSAgICBpZiAobV9zZXNzaW9uKSB7Ci0gICAgICAgIEFTU0VS
VChtX3Nlc3Npb24tPmNvb2tpZUphcigpKTsKLSAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlz
Y29ubmVjdF9tYXRjaGVkKG1fc2Vzc2lvbi0+Y29va2llSmFyKCksIEdfU0lHTkFMX01BVENIX0RB
VEEsIDAsIDAsIG51bGxwdHIsIG51bGxwdHIsIHRoaXMpOwotICAgIH0KLQotICAgIG1fc2Vzc2lv
biA9IG51bGxwdHI7Ci0gICAgbV9jb29raWVPYnNlcnZlckhhbmRsZXIgPSBudWxscHRyOworICAg
IGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfbWF0Y2hlZChtX2Nvb2tpZVN0b3JhZ2UuZ2V0
KCksIEdfU0lHTkFMX01BVENIX0RBVEEsIDAsIDAsIG51bGxwdHIsIG51bGxwdHIsIHRoaXMpOwog
fQogCiB2b2lkIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6Y29va2llc0RpZENoYW5nZShOZXR3b3Jr
U3RvcmFnZVNlc3Npb24qIHNlc3Npb24pCkBAIC04OSwyNSArNzIsMTEgQEAgdm9pZCBOZXR3b3Jr
U3RvcmFnZVNlc3Npb246OmNvb2tpZXNEaWRDaGFuZ2UoTmV0d29ya1N0b3JhZ2VTZXNzaW9uKiBz
ZXNzaW9uKQogICAgICAgICBzZXNzaW9uLT5tX2Nvb2tpZU9ic2VydmVySGFuZGxlcigpOwogfQog
Ci1Tb3VwQ29va2llSmFyKiBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmNvb2tpZVN0b3JhZ2UoKSBj
b25zdAotewotICAgIEFTU0VSVChtX3Nlc3Npb24pOwotICAgIEFTU0VSVChtX3Nlc3Npb24tPmNv
b2tpZUphcigpKTsKLSAgICByZXR1cm4gbV9zZXNzaW9uLT5jb29raWVKYXIoKTsKLX0KLQotdm9p
ZCBOZXR3b3JrU3RvcmFnZVNlc3Npb246OnNldENvb2tpZVN0b3JhZ2UoU291cENvb2tpZUphciog
amFyKQordm9pZCBOZXR3b3JrU3RvcmFnZVNlc3Npb246OnNldENvb2tpZVN0b3JhZ2UoR1JlZlB0
cjxTb3VwQ29va2llSmFyPiYmIGphcikKIHsKLSAgICBBU1NFUlQoamFyKTsKLSAgICBBU1NFUlQo
bV9zZXNzaW9uKTsKLSAgICBBU1NFUlQobV9zZXNzaW9uLT5jb29raWVKYXIoKSk7Ci0KLSAgICBp
ZiAobV9zZXNzaW9uLT5jb29raWVKYXIoKSA9PSBqYXIpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfbWF0Y2hlZChtX3Nlc3Npb24tPmNvb2tpZUph
cigpLCBHX1NJR05BTF9NQVRDSF9EQVRBLCAwLCAwLCBudWxscHRyLCBudWxscHRyLCB0aGlzKTsK
LSAgICBtX3Nlc3Npb24tPnNldENvb2tpZUphcihqYXIpOwotICAgIGdfc2lnbmFsX2Nvbm5lY3Rf
c3dhcHBlZChtX3Nlc3Npb24tPmNvb2tpZUphcigpLCAiY2hhbmdlZCIsIEdfQ0FMTEJBQ0soY29v
a2llc0RpZENoYW5nZSksIHRoaXMpOworICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3Rf
bWF0Y2hlZChtX2Nvb2tpZVN0b3JhZ2UuZ2V0KCksIEdfU0lHTkFMX01BVENIX0RBVEEsIDAsIDAs
IG51bGxwdHIsIG51bGxwdHIsIHRoaXMpOworICAgIG1fY29va2llU3RvcmFnZSA9IFdURk1vdmUo
amFyKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0X3N3YXBwZWQobV9jb29raWVTdG9yYWdlLmdldCgp
LCAiY2hhbmdlZCIsIEdfQ0FMTEJBQ0soY29va2llc0RpZENoYW5nZSksIHRoaXMpOwogfQogCiB2
b2lkIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6c2V0Q29va2llT2JzZXJ2ZXJIYW5kbGVyKEZ1bmN0
aW9uPHZvaWQgKCk+JiYgaGFuZGxlcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvc291cC9Tb2NrZXRTdHJlYW1IYW5kbGVJbXBsU291cC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvU29ja2V0U3RyZWFtSGFuZGxlSW1wbFNvdXAu
Y3BwCmluZGV4IGVkNzhlNGRkZDU5Li5mYmRjYmIxNWU0ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1NvY2tldFN0cmVhbUhhbmRsZUltcGxTb3VwLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvU29ja2V0U3RyZWFt
SGFuZGxlSW1wbFNvdXAuY3BwCkBAIC0zNiwxMSArMzYsOSBAQAogCiAjaW5jbHVkZSAiRGVwcmVj
YXRlZEdsb2JhbFNldHRpbmdzLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgotI2luY2x1ZGUgIk5l
dHdvcmtTdG9yYWdlU2Vzc2lvbi5oIgogI2luY2x1ZGUgIlJlc291cmNlRXJyb3IuaCIKICNpbmNs
dWRlICJTb2NrZXRTdHJlYW1FcnJvci5oIgogI2luY2x1ZGUgIlNvY2tldFN0cmVhbUhhbmRsZUNs
aWVudC5oIgotI2luY2x1ZGUgIlNvdXBOZXR3b3JrU2Vzc2lvbi5oIgogI2luY2x1ZGUgIlN0b3Jh
Z2VTZXNzaW9uUHJvdmlkZXIuaCIKICNpbmNsdWRlICJVUkxTb3VwLmgiCiAjaW5jbHVkZSA8Z2lv
L2dpby5oPgpAQCAtODcsMTMgKzg1LDEzIEBAIFJlZjxTb2NrZXRTdHJlYW1IYW5kbGVJbXBsPiBT
b2NrZXRTdHJlYW1IYW5kbGVJbXBsOjpjcmVhdGUoY29uc3QgVVJMJiB1cmwsIFNvY2tlCiAgICAg
UmVmPFNvY2tldFN0cmVhbUhhbmRsZUltcGw+IHNvY2tldCA9IGFkb3B0UmVmKCpuZXcgU29ja2V0
U3RyZWFtSGFuZGxlSW1wbCh1cmwsIGNsaWVudCwgc3RvcmFnZVNlc3Npb25Qcm92aWRlcikpOwog
CiAjaWYgU09VUF9DSEVDS19WRVJTSU9OKDIsIDYxLCA5MCkKLSAgICBhdXRvKiBuZXR3b3JrU3Rv
cmFnZVNlc3Npb24gPSBzdG9yYWdlU2Vzc2lvblByb3ZpZGVyID8gc3RvcmFnZVNlc3Npb25Qcm92
aWRlci0+c3RvcmFnZVNlc3Npb24oKSA6IG51bGxwdHI7Ci0gICAgaWYgKCFuZXR3b3JrU3RvcmFn
ZVNlc3Npb24pCisgICAgYXV0byogc291cFNlc3Npb24gPSBzdG9yYWdlU2Vzc2lvblByb3ZpZGVy
ID8gc3RvcmFnZVNlc3Npb25Qcm92aWRlci0+c291cFNlc3Npb24oKSA6IG51bGxwdHI7CisgICAg
aWYgKCFzb3VwU2Vzc2lvbikKICAgICAgICAgcmV0dXJuIHNvY2tldDsKIAogICAgIGF1dG8gdXJp
ID0gdXJsVG9Tb3VwVVJJKHVybCk7CiAgICAgUmVmPFNvY2tldFN0cmVhbUhhbmRsZT4gcHJvdGVj
dGVkU29ja2V0U3RyZWFtSGFuZGxlID0gc29ja2V0LmNvcHlSZWYoKTsKLSAgICBzb3VwX3Nlc3Np
b25fY29ubmVjdF9hc3luYyhuZXR3b3JrU3RvcmFnZVNlc3Npb24tPnNvdXBOZXR3b3JrU2Vzc2lv
bigpLnNvdXBTZXNzaW9uKCksIHVyaS5nZXQoKSwgc29ja2V0LT5tX2NhbmNlbGxhYmxlLmdldCgp
LAorICAgIHNvdXBfc2Vzc2lvbl9jb25uZWN0X2FzeW5jKHNvdXBTZXNzaW9uLCB1cmkuZ2V0KCks
IHNvY2tldC0+bV9jYW5jZWxsYWJsZS5nZXQoKSwKICAgICAgICAgdXJsLnByb3RvY29sSXMoIndz
cyIpID8gcmVpbnRlcnByZXRfY2FzdDxTb3VwU2Vzc2lvbkNvbm5lY3RQcm9ncmVzc0NhbGxiYWNr
Pihjb25uZWN0UHJvZ3Jlc3NDYWxsYmFjaykgOiBudWxscHRyLAogICAgICAgICByZWludGVycHJl
dF9jYXN0PEdBc3luY1JlYWR5Q2FsbGJhY2s+KGNvbm5lY3RlZENhbGxiYWNrKSwgJnByb3RlY3Rl
ZFNvY2tldFN0cmVhbUhhbmRsZS5sZWFrUmVmKCkpOwogI2Vsc2UKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9Tb3VwTmV0d29ya1Nlc3Npb24uY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1NvdXBOZXR3b3JrU2Vzc2lvbi5j
cHAKaW5kZXggNjEyNGY0NmMyNGQuLjYxODk5OGYyNTFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvU291cE5ldHdvcmtTZXNzaW9uLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvU291cE5ldHdvcmtTZXNzaW9uLmNw
cApAQCAtMTA2LDcgKzEwNiw3IEBAIHN0YXRpYyBBbGxvd2VkQ2VydGlmaWNhdGVzTWFwJiBhbGxv
d2VkQ2VydGlmaWNhdGVzKCkKICAgICByZXR1cm4gY2VydGlmaWNhdGVzOwogfQogCi1Tb3VwTmV0
d29ya1Nlc3Npb246OlNvdXBOZXR3b3JrU2Vzc2lvbihQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQs
IFNvdXBDb29raWVKYXIqIGNvb2tpZUphcikKK1NvdXBOZXR3b3JrU2Vzc2lvbjo6U291cE5ldHdv
cmtTZXNzaW9uKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKICAgICA6IG1fc291cFNlc3Npb24o
YWRvcHRHUmVmKHNvdXBfc2Vzc2lvbl9uZXcoKSkpCiB7CiAgICAgLy8gVmFsdWVzIHRha2VuIGZy
b20gaHR0cDovL3d3dy5icm93c2Vyc2NvcGUub3JnLyBmb2xsb3dpbmcKQEAgLTExNiwxOSArMTE2
LDEyIEBAIFNvdXBOZXR3b3JrU2Vzc2lvbjo6U291cE5ldHdvcmtTZXNzaW9uKFBBTDo6U2Vzc2lv
bklEIHNlc3Npb25JRCwgU291cENvb2tpZUphcioKICAgICBzdGF0aWMgY29uc3QgaW50IG1heENv
bm5lY3Rpb25zID0gMTc7CiAgICAgc3RhdGljIGNvbnN0IGludCBtYXhDb25uZWN0aW9uc1Blckhv
c3QgPSA2OwogCi0gICAgR1JlZlB0cjxTb3VwQ29va2llSmFyPiBqYXIgPSBjb29raWVKYXI7Ci0g
ICAgaWYgKCFqYXIpIHsKLSAgICAgICAgamFyID0gYWRvcHRHUmVmKHNvdXBfY29va2llX2phcl9u
ZXcoKSk7Ci0gICAgICAgIHNvdXBfY29va2llX2phcl9zZXRfYWNjZXB0X3BvbGljeShqYXIuZ2V0
KCksIFNPVVBfQ09PS0lFX0pBUl9BQ0NFUFRfTk9fVEhJUkRfUEFSVFkpOwotICAgIH0KLQogICAg
IGdfb2JqZWN0X3NldChtX3NvdXBTZXNzaW9uLmdldCgpLAogICAgICAgICBTT1VQX1NFU1NJT05f
TUFYX0NPTk5TLCBtYXhDb25uZWN0aW9ucywKICAgICAgICAgU09VUF9TRVNTSU9OX01BWF9DT05O
U19QRVJfSE9TVCwgbWF4Q29ubmVjdGlvbnNQZXJIb3N0LAogICAgICAgICBTT1VQX1NFU1NJT05f
VElNRU9VVCwgMCwKICAgICAgICAgU09VUF9TRVNTSU9OX0lETEVfVElNRU9VVCwgMCwKICAgICAg
ICAgU09VUF9TRVNTSU9OX0FERF9GRUFUVVJFX0JZX1RZUEUsIFNPVVBfVFlQRV9DT05URU5UX1NO
SUZGRVIsCi0gICAgICAgIFNPVVBfU0VTU0lPTl9BRERfRkVBVFVSRSwgamFyLmdldCgpLAogICAg
ICAgICBudWxscHRyKTsKIAogICAgIHNldHVwQ3VzdG9tUHJvdG9jb2xzKCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvU291cE5ldHdvcmtTZXNzaW9u
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvU291cE5ldHdvcmtTZXNz
aW9uLmgKaW5kZXggZmZiZDQ5YTc2MmEuLjVlMzJkMzFhZDRmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvU291cE5ldHdvcmtTZXNzaW9uLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1NvdXBOZXR3b3JrU2Vzc2lvbi5o
CkBAIC00OSw3ICs0OSw3IEBAIHN0cnVjdCBTb3VwTmV0d29ya1Byb3h5U2V0dGluZ3M7CiBjbGFz
cyBTb3VwTmV0d29ya1Nlc3Npb24gewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFNvdXBOZXR3
b3JrU2Vzc2lvbik7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIGV4cGxp
Y2l0IFNvdXBOZXR3b3JrU2Vzc2lvbihQQUw6OlNlc3Npb25JRCA9IFBBTDo6U2Vzc2lvbklEOjpk
ZWZhdWx0U2Vzc2lvbklEKCksIFNvdXBDb29raWVKYXIqID0gbnVsbHB0cik7CisgICAgZXhwbGlj
aXQgU291cE5ldHdvcmtTZXNzaW9uKFBBTDo6U2Vzc2lvbklEKTsKICAgICB+U291cE5ldHdvcmtT
ZXNzaW9uKCk7CiAKICAgICBTb3VwU2Vzc2lvbiogc291cFNlc3Npb24oKSBjb25zdCB7IHJldHVy
biBtX3NvdXBTZXNzaW9uLmdldCgpOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5n
ZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDdiN2M4ZDk2YTdlLi41YjIyYmEx
YTkwOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dl
YktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1OCBAQAorMjAxOS0wNy0yNCAgQ2FybG9zIEdhcmNp
YSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CisKKyAgICAgICAgW1NPVVBdIE1vdmUgU291
cE5ldHdvcmtTZXNzaW9uIG93bmVyc2hpcCBmcm9tIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiB0byBO
ZXR3b3JrU2Vzc2lvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjAwMDc2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTWljaGFlbCBDYXRhbnphcm8uCisK
KyAgICAgICAgTmV0d29ya1N0b3JhZ2VTZXNzaW9uIHNob3VsZCBvbmx5IG93biB0aGUgY29va2ll
IGphciwgc2luY2UgaXQncyB0aGUgb25seSB0aGluZyBpdCBoYW5kbGVzIGZyb20gdGhlIHNlc3Np
b24uCisKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9Db29raWVzL3NvdXAvV2ViQ29va2llTWFu
YWdlclNvdXAuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyOjpzZXRDb29r
aWVQZXJzaXN0ZW50U3RvcmFnZSk6IFVzZSB0aGUgbmV0d29yayBzZXNzaW9uIGluc3RlYWQgb2Yg
dGhlIHN0b3JhZ2Ugc2Vzc2lvbgorICAgICAgICB0byBzZXQgdGhlIHBlcmlzdGVudCBjb29raWUg
c3RvcmFnZS4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9DdXN0b21Qcm90b2NvbHMvc291cC9M
ZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJTb3VwLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TGVn
YWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyOjpyZWdpc3RlclNjaGVtZSk6IEl0ZXJhdGUgbmV0d29y
ayBzZXNzaW9ucyBpbnN0ZWFkIG9mIHN0b3JhZ2Ugc2Vzc2lvbnMgdG8KKyAgICAgICAgYWNjZXNz
IHRoZSBTb3VwTmV0d29ya1Nlc3Npb24uCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29y
a0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ29u
bmVjdGlvblRvV2ViUHJvY2Vzczo6cmVzb3VyY2VMb2FkU3RhdGlzdGljc1VwZGF0ZWQpOiBVc2UK
KyAgICAgICAgTmV0d29ya1Byb2Nlc3M6OmZvckVhY2hOZXR3b3JrU2Vzc2lvbigpIHRvIGl0ZXJh
dGUgbmV0d29yayBzZXNzaW9ucy4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJv
Y2Vzcy5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpsb3dNZW1vcnlIYW5k
bGVyKTogRGl0dG8uCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpmb3JFYWNoTmV0
d29ya1Nlc3Npb24pOiBBZGRlZCB0byBpdGVyYXRlIG5ldHdvcmsgc2Vzc2lvbnMgaW50ZWFkIG9m
IGV4cG9zaW5nIHRoZSBtYXAKKyAgICAgICAgdGhhdCBpcyBhbHdheXMgdXNlZCB0byBpdGVyYXRl
IHRoZSBzZXNzaW9ucy4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OnN3aXRjaFRv
TmV3VGVzdGluZ1Nlc3Npb24pOiBVc2UgdGhlIG5ldyBOZXR3b3JrU3RvcmFnZVNlc3Npb24gY29u
c3RydWN0b3IgQVBJLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6ZW5zdXJlU2Vz
c2lvbik6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6ZGVzdHJveVNl
c3Npb24pOiBBbGxvdyB0byBkZXN0cm95IHRoZSBkZWZhdWx0IHNlc3Npb24gZm9yIHNvdXAgYmFz
ZWQgcG9ydHMuIFRoaXMgaXMKKyAgICAgICAgb25seSBjYWxsZWQgcmlnaHQgYmVmb3JlIHByb2Nl
c3MgZXhpdCB0byBlbnN1cmUgd2UgZG9uJ3QgbGVhayBuZXR3b3JrIHJlc291cmNlcyBsaWtlIHRo
ZSBjb29raWVzIGRhdGFiYXNlLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6c2V0
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQpOiBVc2UgTmV0d29ya1Byb2Nlc3M6OmZvckVh
Y2hOZXR3b3JrU2Vzc2lvbigpIHRvCisgICAgICAgIGl0ZXJhdGUgbmV0d29yayBzZXNzaW9ucy4K
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmZldGNoV2Vic2l0ZURhdGEpOiBEaXR0
by4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmRlbGV0ZVdlYnNpdGVEYXRhRm9y
T3JpZ2lucyk6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6ZGVsZXRl
V2Vic2l0ZURhdGFGb3JSZWdpc3RyYWJsZURvbWFpbnMpOiBEaXR0by4KKyAgICAgICAgKFdlYktp
dDo6TmV0d29ya1Byb2Nlc3M6OnJlZ2lzdHJhYmxlRG9tYWluc1dpdGhXZWJzaXRlRGF0YSk6IERp
dHRvLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6c2V0Q2FjaGVNb2RlbCk6IERp
dHRvLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6YWN0dWFsUHJlcGFyZVRvU3Vz
cGVuZCk6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6cmVzdW1lKTog
RGl0dG8uCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaDoKKyAgICAg
ICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrU3RvcmFnZVNlc3Npb25Qcm92aWRlci5oOgorICAg
ICAgICAqIE5ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtQcm9jZXNzQ29jb2EubW06CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpjbGVhckRpc2tDYWNoZSk6IERpdHRvLgorICAg
ICAgICAqIE5ldHdvcmtQcm9jZXNzL2lvcy9OZXR3b3JrUHJvY2Vzc0lPUy5tbToKKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmNsZWFyQ2FjaGVGb3JBbGxPcmlnaW5zKTogRGl0dG8u
CisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrUHJvY2Vzc01haW5Tb3VwLmNw
cDogRGVzdHJveSB0aGUgZGVmYXVsdCBzZXNzaW9uIGJlZm9yZSBwcm9jZXNzIGV4aXN0cy4KKyAg
ICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtQcm9jZXNzU291cC5jcHA6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjp1c2VyUHJlZmVycmVkTGFuZ3VhZ2VzQ2hhbmdl
ZCk6IEl0ZXJhdGUgbmV0d29yayBzZXNzaW9ucyBpbnN0ZWFkIG9mIHN0b3JhZ2Ugc2Vzc2lvbnMg
dG8KKyAgICAgICAgYWNjZXNzIHRoZSBTb3VwTmV0d29ya1Nlc3Npb24uCisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUNyZWF0ZURlZmF1bHRTdG9yYWdlU2Vzc2lvbiBj
b25zdCk6IFVzZSB0aGUgbmV3IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiBjb25zdHJ1Y3RvciBBUEku
CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpjbGVhckRpc2tDYWNoZSk6IFVzZSBO
ZXR3b3JrUHJvY2Vzczo6Zm9yRWFjaE5ldHdvcmtTZXNzaW9uKCkgdG8gaXRlcmF0ZSBuZXR3b3Jr
IHNlc3Npb25zLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6c2V0TmV0d29ya1By
b3h5U2V0dGluZ3MpOiBJdGVyYXRlIG5ldHdvcmsgc2Vzc2lvbnMgaW5zdGVhZCBvZiBzdG9yYWdl
IHNlc3Npb25zIHRvCisgICAgICAgIGFjY2VzcyB0aGUgU291cE5ldHdvcmtTZXNzaW9uLgorICAg
ICAgICAqIE5ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Nlc3Npb25Tb3VwLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya1Nlc3Npb25Tb3VwOjpOZXR3b3JrU2Vzc2lvblNvdXApOiBDcmVh
dGUgdGhlIFNvdXBOZXR3b3JrU2Vzc2lvbiBhbmQgc2V0dXAgY29va2llcy4KKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya1Nlc3Npb25Tb3VwOjpzb3VwU2Vzc2lvbiBjb25zdCk6IFJldHVybiB0aGUg
U291cFNlc3Npb24gb2YgU291cE5ldHdvcmtTZXNzaW9uLgorICAgICAgICAoV2ViS2l0OjpOZXR3
b3JrU2Vzc2lvblNvdXA6OnNldENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlKTogU2V0dXAgYSBuZXcg
Y29va2llIGphci4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtTZXNzaW9u
U291cC5oOgorCiAyMDE5LTA3LTIzICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAK
ICAgICAgICAgQ3Jhc2ggdW5kZXIgV2ViS2l0OldURjo6RGV0YWlsOjpDYWxsYWJsZVdyYXBwZXI8
V2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnVwZGF0ZUNvb2tpZUJs
b2NraW5nKFdURjo6Q29tcGxldGlvbkhhbmRsZXI8dm9pZCAoKT4mJik6OiRfMzI6Om9wZXJhdG9y
KCkoKTo6J2xhbWJkYScoKSwgdm9pZD46OmNhbGwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvQ29va2llcy9zb3VwL1dlYkNvb2tpZU1hbmFnZXJTb3VwLmNwcCBiL1Nv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ29va2llcy9zb3VwL1dlYkNvb2tpZU1hbmFnZXJT
b3VwLmNwcAppbmRleCAyOGNhYjIwODk0YS4uNGQ5N2RhN2I2OWQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ29va2llcy9zb3VwL1dlYkNvb2tpZU1hbmFnZXJTb3Vw
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvc291cC9XZWJD
b29raWVNYW5hZ2VyU291cC5jcHAKQEAgLTI3LDEyICsyNywxMSBAQAogI2luY2x1ZGUgIldlYkNv
b2tpZU1hbmFnZXIuaCIKIAogI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzLmgiCisjaW5jbHVkZSAi
TmV0d29ya1Nlc3Npb25Tb3VwLmgiCiAjaW5jbHVkZSAiU291cENvb2tpZVBlcnNpc3RlbnRTdG9y
YWdlVHlwZS5oIgogI2luY2x1ZGUgPFdlYkNvcmUvTmV0d29ya1N0b3JhZ2VTZXNzaW9uLmg+CiAj
aW5jbHVkZSA8V2ViQ29yZS9Tb3VwTmV0d29ya1Nlc3Npb24uaD4KICNpbmNsdWRlIDxsaWJzb3Vw
L3NvdXAuaD4KLSNpbmNsdWRlIDx3dGYvZ2xpYi9HUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL3Rl
eHQvQ1N0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIHVzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOwpAQCAtNzcsMjIgKzc2LDggQEAgSFRUUENvb2tpZUFjY2VwdFBvbGljeSBXZWJDb29raWVN
YW5hZ2VyOjpwbGF0Zm9ybUdldEhUVFBDb29raWVBY2NlcHRQb2xpY3koKQogCiB2b2lkIFdlYkNv
b2tpZU1hbmFnZXI6OnNldENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlKFBBTDo6U2Vzc2lvbklEIHNl
c3Npb25JRCwgY29uc3QgU3RyaW5nJiBzdG9yYWdlUGF0aCwgU291cENvb2tpZVBlcnNpc3RlbnRT
dG9yYWdlVHlwZSBzdG9yYWdlVHlwZSkKIHsKLSAgICBHUmVmUHRyPFNvdXBDb29raWVKYXI+IGph
cjsKLSAgICBzd2l0Y2ggKHN0b3JhZ2VUeXBlKSB7Ci0gICAgY2FzZSBTb3VwQ29va2llUGVyc2lz
dGVudFN0b3JhZ2VUeXBlOjpUZXh0OgotICAgICAgICBqYXIgPSBhZG9wdEdSZWYoc291cF9jb29r
aWVfamFyX3RleHRfbmV3KHN0b3JhZ2VQYXRoLnV0ZjgoKS5kYXRhKCksIEZBTFNFKSk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgU291cENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlVHlwZTo6U1FM
aXRlOgotICAgICAgICBqYXIgPSBhZG9wdEdSZWYoc291cF9jb29raWVfamFyX2RiX25ldyhzdG9y
YWdlUGF0aC51dGY4KCkuZGF0YSgpLCBGQUxTRSkpOwotICAgICAgICBicmVhazsKLSAgICBkZWZh
dWx0OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci0KLSAgICBpZiAoYXV0
byogc3RvcmFnZVNlc3Npb24gPSBtX3Byb2Nlc3Muc3RvcmFnZVNlc3Npb24oc2Vzc2lvbklEKSkg
ewotICAgICAgICBzb3VwX2Nvb2tpZV9qYXJfc2V0X2FjY2VwdF9wb2xpY3koamFyLmdldCgpLCBz
b3VwX2Nvb2tpZV9qYXJfZ2V0X2FjY2VwdF9wb2xpY3koc3RvcmFnZVNlc3Npb24tPmNvb2tpZVN0
b3JhZ2UoKSkpOwotICAgICAgICBzdG9yYWdlU2Vzc2lvbi0+c2V0Q29va2llU3RvcmFnZShqYXIu
Z2V0KCkpOwotICAgIH0KKyAgICBpZiAoYXV0byogbmV0d29ya1Nlc3Npb24gPSBtX3Byb2Nlc3Mu
bmV0d29ya1Nlc3Npb24oc2Vzc2lvbklEKSkKKyAgICAgICAgc3RhdGljX2Nhc3Q8TmV0d29ya1Nl
c3Npb25Tb3VwJj4oKm5ldHdvcmtTZXNzaW9uKS5zZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShz
dG9yYWdlUGF0aCwgc3RvcmFnZVR5cGUpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ3VzdG9tUHJvdG9jb2xzL3Nv
dXAvTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyU291cC5jcHAgYi9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL0N1c3RvbVByb3RvY29scy9zb3VwL0xlZ2FjeUN1c3RvbVByb3RvY29sTWFu
YWdlclNvdXAuY3BwCmluZGV4IDUxMWRkMDRkNjY3Li4yYzRkMmZmOTQ4MCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DdXN0b21Qcm90b2NvbHMvc291cC9MZWdhY3lD
dXN0b21Qcm90b2NvbE1hbmFnZXJTb3VwLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL0N1c3RvbVByb3RvY29scy9zb3VwL0xlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclNv
dXAuY3BwCkBAIC0yMyw4ICsyMyw4IEBACiAjaW5jbHVkZSAiRGF0YVJlZmVyZW5jZS5oIgogI2lu
Y2x1ZGUgIkxlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlck1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAi
TmV0d29ya1Byb2Nlc3MuaCIKKyNpbmNsdWRlICJOZXR3b3JrU2Vzc2lvblNvdXAuaCIKICNpbmNs
dWRlICJXZWJLaXRTb3VwUmVxdWVzdElucHV0U3RyZWFtLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9O
ZXR3b3JrU3RvcmFnZVNlc3Npb24uaD4KICNpbmNsdWRlIDxXZWJDb3JlL05vdEltcGxlbWVudGVk
Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZUVycm9yLmg+CiAjaW5jbHVkZSA8V2ViQ29y
ZS9SZXNvdXJjZVJlcXVlc3QuaD4KQEAgLTEwMiw4ICsxMDIsOCBAQCB2b2lkIExlZ2FjeUN1c3Rv
bVByb3RvY29sTWFuYWdlcjo6cmVnaXN0ZXJTY2hlbWUoY29uc3QgU3RyaW5nJiBzY2hlbWUpCiAg
ICAgYXV0byogZ2VuZXJpY1JlcXVlc3RDbGFzcyA9IHN0YXRpY19jYXN0PFNvdXBSZXF1ZXN0Q2xh
c3MqPihnX3R5cGVfY2xhc3NfcGVlayhXRUJLSVRfVFlQRV9TT1VQX1JFUVVFU1RfR0VORVJJQykp
OwogICAgIEFTU0VSVChnZW5lcmljUmVxdWVzdENsYXNzKTsKICAgICBnZW5lcmljUmVxdWVzdENs
YXNzLT5zY2hlbWVzID0gY29uc3RfY2FzdDxjb25zdCBjaGFyKio+KHJlaW50ZXJwcmV0X2Nhc3Q8
Y2hhcioqPihtX3JlZ2lzdGVyZWRTY2hlbWVzLT5wZGF0YSkpOwotICAgIGxhc3RDcmVhdGVkTmV0
d29ya1Byb2Nlc3MoKS0+Zm9yRWFjaE5ldHdvcmtTdG9yYWdlU2Vzc2lvbihbXShjb25zdCBhdXRv
JiBzZXNzaW9uKSB7Ci0gICAgICAgIHNlc3Npb24uc291cE5ldHdvcmtTZXNzaW9uKCkuc2V0dXBD
dXN0b21Qcm90b2NvbHMoKTsKKyAgICBsYXN0Q3JlYXRlZE5ldHdvcmtQcm9jZXNzKCktPmZvckVh
Y2hOZXR3b3JrU2Vzc2lvbihbXShjb25zdCBhdXRvJiBzZXNzaW9uKSB7CisgICAgICAgIHN0YXRp
Y19jYXN0PGNvbnN0IE5ldHdvcmtTZXNzaW9uU291cCY+KHNlc3Npb24pLnNvdXBOZXR3b3JrU2Vz
c2lvbigpLnNldHVwQ3VzdG9tUHJvdG9jb2xzKCk7CiAgICAgfSk7CiB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nl
c3MuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRv
V2ViUHJvY2Vzcy5jcHAKaW5kZXggMmQ1MGUyZjQzZGIuLmQwNWQyOTg3MTdjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9j
ZXNzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0
aW9uVG9XZWJQcm9jZXNzLmNwcApAQCAtNjg5LDEzICs2ODksMTMgQEAgdm9pZCBOZXR3b3JrQ29u
bmVjdGlvblRvV2ViUHJvY2Vzczo6bG9nU3VicmVzb3VyY2VSZWRpcmVjdChQQUw6OlNlc3Npb25J
RCBzZXNzaW8KIAogdm9pZCBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6cmVzb3VyY2VM
b2FkU3RhdGlzdGljc1VwZGF0ZWQoVmVjdG9yPFdlYkNvcmU6OlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3M+JiYgc3RhdGlzdGljcykKIHsKLSAgICBmb3IgKGF1dG8mIG5ldHdvcmtTZXNzaW9uIDogbmV0
d29ya1Byb2Nlc3MoKS5uZXR3b3JrU2Vzc2lvbnMoKS52YWx1ZXMoKSkgewotICAgICAgICBpZiAo
bmV0d29ya1Nlc3Npb24tPnNlc3Npb25JRCgpLmlzRXBoZW1lcmFsKCkpCi0gICAgICAgICAgICBj
b250aW51ZTsKKyAgICBuZXR3b3JrUHJvY2VzcygpLmZvckVhY2hOZXR3b3JrU2Vzc2lvbihbc3Rh
dGlzdGljcyA9IFdURk1vdmUoc3RhdGlzdGljcyldKE5ldHdvcmtTZXNzaW9uJiBuZXR3b3JrU2Vz
c2lvbikgbXV0YWJsZSB7CisgICAgICAgIGlmIChuZXR3b3JrU2Vzc2lvbi5zZXNzaW9uSUQoKS5p
c0VwaGVtZXJhbCgpKQorICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIGlmIChhdXRvKiBy
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzID0gbmV0d29ya1Nlc3Npb24tPnJlc291cmNlTG9hZFN0YXRp
c3RpY3MoKSkKKyAgICAgICAgaWYgKGF1dG8qIHJlc291cmNlTG9hZFN0YXRpc3RpY3MgPSBuZXR3
b3JrU2Vzc2lvbi5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzKCkpCiAgICAgICAgICAgICByZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzLT5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzVXBkYXRlZChXVEZNb3ZlKHN0
YXRpc3RpY3MpKTsKLSAgICB9CisgICAgfSk7CiB9CiAKIHZvaWQgTmV0d29ya0Nvbm5lY3Rpb25U
b1dlYlByb2Nlc3M6Omhhc1N0b3JhZ2VBY2Nlc3MoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBj
b25zdCBSZWdpc3RyYWJsZURvbWFpbiYgc3ViRnJhbWVEb21haW4sIGNvbnN0IFJlZ2lzdHJhYmxl
RG9tYWluJiB0b3BGcmFtZURvbWFpbiwgdWludDY0X3QgZnJhbWVJRCwgUGFnZUlkZW50aWZpZXIg
cGFnZUlELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVy
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vz
cy5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcApp
bmRleCAyNGJkNzE2OTlhYS4uODNmNjM1NjRjYzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCkBAIC05OSw2ICs5OSw3IEBACiAjZW5kaWYK
IAogI2lmIFVTRShTT1VQKQorI2luY2x1ZGUgIk5ldHdvcmtTZXNzaW9uU291cC5oIgogI2luY2x1
ZGUgPFdlYkNvcmUvRE5TUmVzb2x2ZVF1ZXVlU291cC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU291
cE5ldHdvcmtTZXNzaW9uLmg+CiAjZW5kaWYKQEAgLTE1MCw4ICsxNTEsOCBAQCBOZXR3b3JrUHJv
Y2Vzczo6TmV0d29ya1Byb2Nlc3MoQXV4aWxpYXJ5UHJvY2Vzc0luaXRpYWxpemF0aW9uUGFyYW1l
dGVycyYmIHBhcmFtZQogI2VuZGlmCiAKICNpZiBVU0UoU09VUCkKLSAgICBETlNSZXNvbHZlUXVl
dWVTb3VwOjpzZXRHbG9iYWxEZWZhdWx0TmV0d29ya1N0b3JhZ2VTZXNzaW9uQWNjZXNzb3IoW3Ro
aXNdKCkgLT4gTmV0d29ya1N0b3JhZ2VTZXNzaW9uJiB7Ci0gICAgICAgIHJldHVybiBkZWZhdWx0
U3RvcmFnZVNlc3Npb24oKTsKKyAgICBETlNSZXNvbHZlUXVldWVTb3VwOjpzZXRHbG9iYWxEZWZh
dWx0U291cFNlc3Npb25BY2Nlc3NvcihbdGhpc10oKSAtPiBTb3VwU2Vzc2lvbiogeworICAgICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8TmV0d29ya1Nlc3Npb25Tb3VwJj4oKm5ldHdvcmtTZXNzaW9u
KFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpKS5zb3VwU2Vzc2lvbigpOwogICAg
IH0pOwogI2VuZGlmCiAKQEAgLTI3Myw4ICsyNzQsOSBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjps
b3dNZW1vcnlIYW5kbGVyKENyaXRpY2FsIGNyaXRpY2FsKQogCiAgICAgV1RGOjpyZWxlYXNlRmFz
dE1hbGxvY0ZyZWVNZW1vcnkoKTsKIAotICAgIGZvciAoYXV0byYgbmV0d29ya1Nlc3Npb24gOiBt
X25ldHdvcmtTZXNzaW9ucy52YWx1ZXMoKSkKLSAgICAgICAgbmV0d29ya1Nlc3Npb24uZ2V0KCku
Y2xlYXJQcmVmZXRjaENhY2hlKCk7CisgICAgZm9yRWFjaE5ldHdvcmtTZXNzaW9uKFtdKE5ldHdv
cmtTZXNzaW9uJiBuZXR3b3JrU2Vzc2lvbikgeworICAgICAgICBuZXR3b3JrU2Vzc2lvbi5jbGVh
clByZWZldGNoQ2FjaGUoKTsKKyAgICB9KTsKIH0KIAogdm9pZCBOZXR3b3JrUHJvY2Vzczo6aW5p
dGlhbGl6ZU5ldHdvcmtQcm9jZXNzKE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJiYg
cGFyYW1ldGVycykKQEAgLTQ4NSw2ICs0ODcsMTIgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6aW5p
dGlhbGl6ZVN0b3JhZ2VRdW90YShjb25zdCBXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycyYgcGEK
ICAgICBtYW5hZ2Vycy5zZXREZWZhdWx0UXVvdGFzKHBhcmFtZXRlcnMucGVyT3JpZ2luU3RvcmFn
ZVF1b3RhLCBwYXJhbWV0ZXJzLnBlclRoaXJkUGFydHlPcmlnaW5TdG9yYWdlUXVvdGEpOwogfQog
Cit2b2lkIE5ldHdvcmtQcm9jZXNzOjpmb3JFYWNoTmV0d29ya1Nlc3Npb24oY29uc3QgRnVuY3Rp
b248dm9pZChOZXR3b3JrU2Vzc2lvbiYpPiYgZnVuY3RvcikKK3sKKyAgICBmb3IgKGF1dG8mIHNl
c3Npb24gOiBtX25ldHdvcmtTZXNzaW9ucy52YWx1ZXMoKSkKKyAgICAgICAgZnVuY3Rvcigqc2Vz
c2lvbi5wdHIoKSk7Cit9CisKIHZvaWQgTmV0d29ya1Byb2Nlc3M6OnN3aXRjaFRvTmV3VGVzdGlu
Z1Nlc3Npb24oKQogewogI2lmIFBMQVRGT1JNKENPQ09BKQpAQCAtNTAxLDkgKzUwOSw3IEBAIHZv
aWQgTmV0d29ya1Byb2Nlc3M6OnN3aXRjaFRvTmV3VGVzdGluZ1Nlc3Npb24oKQogICAgIH0KIAog
ICAgIG1fZGVmYXVsdE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiA9IHN0ZDo6bWFrZV91bmlxdWU8V2Vi
Q29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uPihQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Np
b25JRCgpLCBXVEZNb3ZlKHNlc3Npb24pLCBXVEZNb3ZlKGNvb2tpZVN0b3JhZ2UpKTsKLSNlbGlm
IFVTRShTT1VQKQotICAgIG1fZGVmYXVsdE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiA9IHN0ZDo6bWFr
ZV91bmlxdWU8V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uPihQQUw6OlNlc3Npb25JRDo6
ZGVmYXVsdFNlc3Npb25JRCgpLCBzdGQ6Om1ha2VfdW5pcXVlPFdlYkNvcmU6OlNvdXBOZXR3b3Jr
U2Vzc2lvbj4oKSk7Ci0jZWxpZiBVU0UoQ1VSTCkKKyNlbGlmIFVTRShDVVJMKSB8fCBVU0UoU09V
UCkKICAgICBtX2RlZmF1bHROZXR3b3JrU3RvcmFnZVNlc3Npb24gPSBzdGQ6Om1ha2VfdW5pcXVl
PFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4oUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRT
ZXNzaW9uSUQoKSk7CiAjZW5kaWYKIH0KQEAgLTUzNSw5ICs1NDEsNyBAQCB2b2lkIE5ldHdvcmtQ
cm9jZXNzOjplbnN1cmVTZXNzaW9uKGNvbnN0IFBBTDo6U2Vzc2lvbklEJiBzZXNzaW9uSUQsIGNv
bnN0IFN0cmluZwogICAgIH0KIAogICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBzdGQ6
Om1ha2VfdW5pcXVlPE5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4oc2Vzc2lvbklELCBXVEZNb3ZlKHN0
b3JhZ2VTZXNzaW9uKSwgV1RGTW92ZShjb29raWVTdG9yYWdlKSk7Ci0jZWxpZiBVU0UoU09VUCkK
LSAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gc3RkOjptYWtlX3VuaXF1ZTxOZXR3b3Jr
U3RvcmFnZVNlc3Npb24+KHNlc3Npb25JRCwgc3RkOjptYWtlX3VuaXF1ZTxTb3VwTmV0d29ya1Nl
c3Npb24+KHNlc3Npb25JRCkpOwotI2VsaWYgVVNFKENVUkwpCisjZWxpZiBVU0UoQ1VSTCkgfHwg
VVNFKFNPVVApCiAgICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IHN0ZDo6bWFrZV91bmlx
dWU8TmV0d29ya1N0b3JhZ2VTZXNzaW9uPihzZXNzaW9uSUQpOwogI2VuZGlmCiB9CkBAIC01OTMs
NyArNTk3LDExIEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmRlc3Ryb3lTZXNzaW9uKGNvbnN0IFBB
TDo6U2Vzc2lvbklEJiBzZXNzaW9uSUQpCiAgICAgaWYgKCFzZXNzaW9uSUQuaXNWYWxpZCgpKQog
ICAgICAgICByZXR1cm47CiAKKyNpZiAhVVNFKFNPVVApCisgICAgLy8gU291cCBiYXNlZCBwb3J0
cyBkZXN0cm95IHRoZSBkZWZhdWx0IHNlc3Npb24gcmlnaHQgYmVmb3JlIHRoZSBwcm9jZXNzIGV4
aXRzIHRvIGF2b2lkIGxlYWtpbmcKKyAgICAvLyBuZXR3b3JrIHJlc291cmNlcyBsaWtlIHRoZSBj
b29raWVzIGRhdGFiYXNlLgogICAgIEFTU0VSVChzZXNzaW9uSUQgIT0gUEFMOjpTZXNzaW9uSUQ6
OmRlZmF1bHRTZXNzaW9uSUQoKSk7CisjZW5kaWYKIAogICAgIGlmIChhdXRvIHNlc3Npb24gPSBt
X25ldHdvcmtTZXNzaW9ucy50YWtlKHNlc3Npb25JRCkpCiAgICAgICAgIHNlc3Npb24tPmdldCgp
LmludmFsaWRhdGVBbmRDYW5jZWwoKTsKQEAgLTExNDUsOCArMTE1Myw5IEBAIHZvaWQgTmV0d29y
a1Byb2Nlc3M6OnNldFNob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1v
dmFsKFBBTDo6U2VzCiAKIHZvaWQgTmV0d29ya1Byb2Nlc3M6OnNldFJlc291cmNlTG9hZFN0YXRp
c3RpY3NFbmFibGVkKGJvb2wgZW5hYmxlZCkKIHsKLSAgICBmb3IgKGF1dG8mIG5ldHdvcmtTZXNz
aW9uIDogbV9uZXR3b3JrU2Vzc2lvbnMudmFsdWVzKCkpCi0gICAgICAgIG5ldHdvcmtTZXNzaW9u
LmdldCgpLnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKGVuYWJsZWQpOworICAgIGZv
ckVhY2hOZXR3b3JrU2Vzc2lvbihbZW5hYmxlZF0oTmV0d29ya1Nlc3Npb24mIG5ldHdvcmtTZXNz
aW9uKSB7CisgICAgICAgIG5ldHdvcmtTZXNzaW9uLnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NF
bmFibGVkKGVuYWJsZWQpOworICAgIH0pOwogfQogCiB2b2lkIE5ldHdvcmtQcm9jZXNzOjpzZXRS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwg
Ym9vbCBkZWJ1Z01vZGUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFu
ZGxlcikKQEAgLTEzNTgsMTEgKzEzNjcsMTEgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6ZmV0Y2hX
ZWJzaXRlRGF0YShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIE9wdGlvblNldDxXZWJzaXQKICAg
ICB9CiAjZW5kaWYKICAgICBpZiAod2Vic2l0ZURhdGFUeXBlcy5jb250YWlucyhXZWJzaXRlRGF0
YVR5cGU6OkRpc2tDYWNoZSkpIHsKLSAgICAgICAgZm9yIChhdXRvJiBzZXNzaW9uIDogbmV0d29y
a1Nlc3Npb25zKCkudmFsdWVzKCkpIHsKLSAgICAgICAgICAgIGZldGNoRGlza0NhY2hlRW50cmll
cyhzZXNzaW9uLT5jYWNoZSgpLCBzZXNzaW9uSUQsIGZldGNoT3B0aW9ucywgW2NhbGxiYWNrQWdn
cmVnYXRvciA9IFdURk1vdmUoY2FsbGJhY2tBZ2dyZWdhdG9yKV0oYXV0byBlbnRyaWVzKSBtdXRh
YmxlIHsKKyAgICAgICAgZm9yRWFjaE5ldHdvcmtTZXNzaW9uKFtzZXNzaW9uSUQsIGZldGNoT3B0
aW9ucywgY2FsbGJhY2tBZ2dyZWdhdG9yID0gV1RGTW92ZShjYWxsYmFja0FnZ3JlZ2F0b3IpXShO
ZXR3b3JrU2Vzc2lvbiYgc2Vzc2lvbikgbXV0YWJsZSB7CisgICAgICAgICAgICBmZXRjaERpc2tD
YWNoZUVudHJpZXMoc2Vzc2lvbi5jYWNoZSgpLCBzZXNzaW9uSUQsIGZldGNoT3B0aW9ucywgW2Nh
bGxiYWNrQWdncmVnYXRvciA9IFdURk1vdmUoY2FsbGJhY2tBZ2dyZWdhdG9yKV0oYXV0byBlbnRy
aWVzKSBtdXRhYmxlIHsKICAgICAgICAgICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3ItPm1fd2Vi
c2l0ZURhdGEuZW50cmllcy5hcHBlbmRWZWN0b3IoZW50cmllcyk7CiAgICAgICAgICAgICB9KTsK
LSAgICAgICAgfQorICAgICAgICB9KTsKICAgICB9CiB9CiAKQEAgLTE1MTgsOCArMTUyNyw5IEBA
IHZvaWQgTmV0d29ya1Byb2Nlc3M6OmRlbGV0ZVdlYnNpdGVEYXRhRm9yT3JpZ2lucyhQQUw6OlNl
c3Npb25JRCBzZXNzaW9uSUQsIE9wdGlvCiAjZW5kaWYKIAogICAgIGlmICh3ZWJzaXRlRGF0YVR5
cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6RGlza0NhY2hlKSAmJiAhc2Vzc2lvbklELmlz
RXBoZW1lcmFsKCkpIHsKLSAgICAgICAgZm9yIChhdXRvJiBzZXNzaW9uIDogbmV0d29ya1Nlc3Np
b25zKCkudmFsdWVzKCkpCi0gICAgICAgICAgICBjbGVhckRpc2tDYWNoZUVudHJpZXMoc2Vzc2lv
bi0+Y2FjaGUoKSwgb3JpZ2luRGF0YXMsIFtjbGVhclRhc2tzSGFuZGxlciA9IFdURk1vdmUoY2xl
YXJUYXNrc0hhbmRsZXIpXSB7IH0pOworICAgICAgICBmb3JFYWNoTmV0d29ya1Nlc3Npb24oW29y
aWdpbkRhdGFzLCBjbGVhclRhc2tzSGFuZGxlciA9IFdURk1vdmUoY2xlYXJUYXNrc0hhbmRsZXIp
XShOZXR3b3JrU2Vzc2lvbiYgc2Vzc2lvbikgbXV0YWJsZSB7CisgICAgICAgICAgICBjbGVhckRp
c2tDYWNoZUVudHJpZXMoc2Vzc2lvbi5jYWNoZSgpLCBvcmlnaW5EYXRhcywgW2NsZWFyVGFza3NI
YW5kbGVyID0gV1RGTW92ZShjbGVhclRhc2tzSGFuZGxlcildIHsgfSk7CisgICAgICAgIH0pOwog
ICAgIH0KIAogICAgIGlmICh3ZWJzaXRlRGF0YVR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlw
ZTo6Q3JlZGVudGlhbHMpKSB7CkBAIC0xNzUzLDggKzE3NjMsOCBAQCB2b2lkIE5ldHdvcmtQcm9j
ZXNzOjpkZWxldGVXZWJzaXRlRGF0YUZvclJlZ2lzdHJhYmxlRG9tYWlucyhQQUw6OlNlc3Npb25J
RCBzZXNzaQogI2VuZGlmCiAKICAgICBpZiAod2Vic2l0ZURhdGFUeXBlcy5jb250YWlucyhXZWJz
aXRlRGF0YVR5cGU6OkRpc2tDYWNoZSkpIHsKLSAgICAgICAgZm9yIChhdXRvJiBzZXNzaW9uIDog
bmV0d29ya1Nlc3Npb25zKCkudmFsdWVzKCkpIHsKLSAgICAgICAgICAgIGZldGNoRGlza0NhY2hl
RW50cmllcyhzZXNzaW9uLT5jYWNoZSgpLCBzZXNzaW9uSUQsIGZldGNoT3B0aW9ucywgW2RvbWFp
bnNUb0RlbGV0ZUFsbEJ1dENvb2tpZXNGb3IsIGNhbGxiYWNrQWdncmVnYXRvciA9IGNhbGxiYWNr
QWdncmVnYXRvci5jb3B5UmVmKCksIHNlc3Npb24gPSBzZXNzaW9uLmNvcHlSZWYoKV0oYXV0byBl
bnRyaWVzKSBtdXRhYmxlIHsKKyAgICAgICAgZm9yRWFjaE5ldHdvcmtTZXNzaW9uKFtzZXNzaW9u
SUQsIGZldGNoT3B0aW9ucywgJmRvbWFpbnNUb0RlbGV0ZUFsbEJ1dENvb2tpZXNGb3IsICZjYWxs
YmFja0FnZ3JlZ2F0b3JdKE5ldHdvcmtTZXNzaW9uJiBzZXNzaW9uKSB7CisgICAgICAgICAgICBm
ZXRjaERpc2tDYWNoZUVudHJpZXMoc2Vzc2lvbi5jYWNoZSgpLCBzZXNzaW9uSUQsIGZldGNoT3B0
aW9ucywgW2RvbWFpbnNUb0RlbGV0ZUFsbEJ1dENvb2tpZXNGb3IsIGNhbGxiYWNrQWdncmVnYXRv
ciA9IGNhbGxiYWNrQWdncmVnYXRvci5jb3B5UmVmKCksIHNlc3Npb24gPSBtYWtlUmVmKHNlc3Np
b24pXShhdXRvIGVudHJpZXMpIG11dGFibGUgewogCiAgICAgICAgICAgICAgICAgVmVjdG9yPFNl
Y3VyaXR5T3JpZ2luRGF0YT4gZW50cmllc1RvRGVsZXRlOwogICAgICAgICAgICAgICAgIGZvciAo
YXV0byYgZW50cnkgOiBlbnRyaWVzKSB7CkBAIC0xNzY1LDcgKzE3NzUsNyBAQCB2b2lkIE5ldHdv
cmtQcm9jZXNzOjpkZWxldGVXZWJzaXRlRGF0YUZvclJlZ2lzdHJhYmxlRG9tYWlucyhQQUw6OlNl
c3Npb25JRCBzZXNzaQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBjbGVhckRp
c2tDYWNoZUVudHJpZXMoc2Vzc2lvbi0+Y2FjaGUoKSwgZW50cmllc1RvRGVsZXRlLCBbY2FsbGJh
Y2tBZ2dyZWdhdG9yID0gY2FsbGJhY2tBZ2dyZWdhdG9yLmNvcHlSZWYoKV0geyB9KTsKICAgICAg
ICAgICAgIH0pOwotICAgICAgICB9CisgICAgICAgIH0pOwogICAgIH0KIAogICAgIGF1dG8gZGF0
YVR5cGVzRm9yVUlQcm9jZXNzID0gV2Vic2l0ZURhdGE6OmZpbHRlcih3ZWJzaXRlRGF0YVR5cGVz
LCBXZWJzaXRlRGF0YVByb2Nlc3NUeXBlOjpVSSk7CkBAIC0xODg3LDExICsxODk3LDExIEBAIHZv
aWQgTmV0d29ya1Byb2Nlc3M6OnJlZ2lzdHJhYmxlRG9tYWluc1dpdGhXZWJzaXRlRGF0YShQQUw6
OlNlc3Npb25JRCBzZXNzaW9uSUQsCiAjZW5kaWYKICAgICAKICAgICBpZiAod2Vic2l0ZURhdGFU
eXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6OkRpc2tDYWNoZSkpIHsKLSAgICAgICAgZm9y
IChhdXRvJiBzZXNzaW9uIDogbmV0d29ya1Nlc3Npb25zKCkudmFsdWVzKCkpIHsKLSAgICAgICAg
ICAgIGZldGNoRGlza0NhY2hlRW50cmllcyhzZXNzaW9uLT5jYWNoZSgpLCBzZXNzaW9uSUQsIGZl
dGNoT3B0aW9ucywgW2NhbGxiYWNrQWdncmVnYXRvciA9IGNhbGxiYWNrQWdncmVnYXRvci5jb3B5
UmVmKCldKGF1dG8gZW50cmllcykgbXV0YWJsZSB7CisgICAgICAgIGZvckVhY2hOZXR3b3JrU2Vz
c2lvbihbc2Vzc2lvbklELCBmZXRjaE9wdGlvbnMsICZjYWxsYmFja0FnZ3JlZ2F0b3JdKE5ldHdv
cmtTZXNzaW9uJiBzZXNzaW9uKSB7CisgICAgICAgICAgICBmZXRjaERpc2tDYWNoZUVudHJpZXMo
c2Vzc2lvbi5jYWNoZSgpLCBzZXNzaW9uSUQsIGZldGNoT3B0aW9ucywgW2NhbGxiYWNrQWdncmVn
YXRvciA9IGNhbGxiYWNrQWdncmVnYXRvci5jb3B5UmVmKCldKGF1dG8gZW50cmllcykgbXV0YWJs
ZSB7CiAgICAgICAgICAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5tX3dlYnNpdGVEYXRhLmVu
dHJpZXMuYXBwZW5kVmVjdG9yKGVudHJpZXMpOwogICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0K
KyAgICAgICAgfSk7CiAgICAgfQogfQogI2VuZGlmIC8vIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NU
QVRJU1RJQ1MpCkBAIC0xOTgzLDExICsxOTkzLDExIEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OnNl
dENhY2hlTW9kZWwoQ2FjaGVNb2RlbCBjYWNoZU1vZGVsKQogICAgICAgICBkaXNrRnJlZVNpemUg
Lz0gS0IgKiAxMDAwOwogICAgICAgICBjYWxjdWxhdGVVUkxDYWNoZVNpemVzKGNhY2hlTW9kZWws
IGRpc2tGcmVlU2l6ZSwgdXJsQ2FjaGVNZW1vcnlDYXBhY2l0eSwgdXJsQ2FjaGVEaXNrQ2FwYWNp
dHkpOwogICAgIH0KLSAgICAKLSAgICBmb3IgKGF1dG8mIHNlc3Npb24gOiBuZXR3b3JrU2Vzc2lv
bnMoKS52YWx1ZXMoKSkgewotICAgICAgICBpZiAoYXV0byogY2FjaGUgPSBzZXNzaW9uLT5jYWNo
ZSgpKQorCisgICAgZm9yRWFjaE5ldHdvcmtTZXNzaW9uKFt1cmxDYWNoZURpc2tDYXBhY2l0eV0o
TmV0d29ya1Nlc3Npb24mIHNlc3Npb24pIHsKKyAgICAgICAgaWYgKGF1dG8qIGNhY2hlID0gc2Vz
c2lvbi5jYWNoZSgpKQogICAgICAgICAgICAgY2FjaGUtPnNldENhcGFjaXR5KHVybENhY2hlRGlz
a0NhcGFjaXR5KTsKLSAgICB9CisgICAgfSk7CiB9CiAKIHZvaWQgTmV0d29ya1Byb2Nlc3M6OnNl
dENhbkhhbmRsZUhUVFBTU2VydmVyVHJ1c3RFdmFsdWF0aW9uKGJvb2wgdmFsdWUpCkBAIC0yMDgx
LDggKzIwOTEsOSBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjphY3R1YWxQcmVwYXJlVG9TdXNwZW5k
KFNob3VsZEFja25vd2xlZGdlV2hlblJlYWR5VG9TdXNwZW5kCiAgICAgfQogI2VuZGlmCiAKLSAg
ICBmb3IgKGF1dG8mIHNlc3Npb24gOiBtX25ldHdvcmtTZXNzaW9ucykKLSAgICAgICAgc2Vzc2lv
bi52YWx1ZS0+c3RvcmFnZU1hbmFnZXIoKS5zdXNwZW5kKFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsg
fSk7CisgICAgZm9yRWFjaE5ldHdvcmtTZXNzaW9uKFsmY2FsbGJhY2tBZ2dyZWdhdG9yXShOZXR3
b3JrU2Vzc2lvbiYgc2Vzc2lvbikgeworICAgICAgICBzZXNzaW9uLnN0b3JhZ2VNYW5hZ2VyKCku
c3VzcGVuZChbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOworICAgIH0pOwogfQogCiB2b2lkIE5l
dHdvcmtQcm9jZXNzOjpwcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5KCkKQEAgLTIxNTIsOCAr
MjE2Myw5IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OnJlc3VtZSgpCiAgICAgICAgIHNlcnZlci0+
cmVzdW1lKCk7CiAjZW5kaWYKIAotICAgIGZvciAoYXV0byYgc2Vzc2lvbiA6IG1fbmV0d29ya1Nl
c3Npb25zKQotICAgICAgICBzZXNzaW9uLnZhbHVlLT5zdG9yYWdlTWFuYWdlcigpLnJlc3VtZSgp
OworICAgIGZvckVhY2hOZXR3b3JrU2Vzc2lvbihbXShOZXR3b3JrU2Vzc2lvbiYgc2Vzc2lvbikg
eworICAgICAgICBzZXNzaW9uLnN0b3JhZ2VNYW5hZ2VyKCkucmVzdW1lKCk7CisgICAgfSk7CiB9
CiAKIHZvaWQgTmV0d29ya1Byb2Nlc3M6OnByZWZldGNoRE5TKGNvbnN0IFN0cmluZyYgaG9zdG5h
bWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9j
ZXNzLmggYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmgKaW5k
ZXggNjlmM2Q0ZjY3OTIuLjA2MjZiNTZmZWUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmgKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5oCkBAIC0xNjYsOCArMTY2LDcgQEAgcHVibGljOgogICAg
IE5ldHdvcmtTZXNzaW9uKiBuZXR3b3JrU2Vzc2lvbkJ5Q29ubmVjdGlvbihJUEM6OkNvbm5lY3Rp
b24mKSBjb25zdDsKICAgICB2b2lkIGRlc3Ryb3lTZXNzaW9uKGNvbnN0IFBBTDo6U2Vzc2lvbklE
Jik7CiAKLSAgICAvLyBOZWVkZWQgZm9yIHRlc3QgaW5mcmFzdHJ1Y3R1cmUKLSAgICBIYXNoTWFw
PFBBTDo6U2Vzc2lvbklELCBSZWY8TmV0d29ya1Nlc3Npb24+PiYgbmV0d29ya1Nlc3Npb25zKCkg
eyByZXR1cm4gbV9uZXR3b3JrU2Vzc2lvbnM7IH0KKyAgICB2b2lkIGZvckVhY2hOZXR3b3JrU2Vz
c2lvbihjb25zdCBGdW5jdGlvbjx2b2lkKE5ldHdvcmtTZXNzaW9uJik+Jik7CiAKICAgICB2b2lk
IGZvckVhY2hOZXR3b3JrU3RvcmFnZVNlc3Npb24oY29uc3QgRnVuY3Rpb248dm9pZChXZWJDb3Jl
OjpOZXR3b3JrU3RvcmFnZVNlc3Npb24mKT4mKTsKICAgICBXZWJDb3JlOjpOZXR3b3JrU3RvcmFn
ZVNlc3Npb24qIHN0b3JhZ2VTZXNzaW9uKGNvbnN0IFBBTDo6U2Vzc2lvbklEJikgY29uc3Q7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtTdG9yYWdlU2Vz
c2lvblByb3ZpZGVyLmggYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtTdG9y
YWdlU2Vzc2lvblByb3ZpZGVyLmgKaW5kZXggOGFhOTIwNDRiMjAuLjk1YmIxZDRkMzhiIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtTdG9yYWdlU2Vzc2lv
blByb3ZpZGVyLmgKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrU3Rv
cmFnZVNlc3Npb25Qcm92aWRlci5oCkBAIC0zMSw2ICszMSwxMCBAQAogI2luY2x1ZGUgPHBhbC9T
ZXNzaW9uSUQuaD4KICNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgogCisjaWYgVVNFKFNPVVApCisj
aW5jbHVkZSAiTmV0d29ya1Nlc3Npb25Tb3VwLmgiCisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYktp
dCB7CiAKIGNsYXNzIE5ldHdvcmtTdG9yYWdlU2Vzc2lvblByb3ZpZGVyIGZpbmFsIDogcHVibGlj
IFdlYkNvcmU6OlN0b3JhZ2VTZXNzaW9uUHJvdmlkZXIgewpAQCAtNDksNiArNTMsMTkgQEAgcHJp
dmF0ZToKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCisjaWYgVVNFKFNPVVApCisg
ICAgU291cFNlc3Npb24qIHNvdXBTZXNzaW9uKCkgY29uc3QgZmluYWwKKyAgICB7CisgICAgICAg
IGlmICghbV9uZXR3b3JrUHJvY2VzcykKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCisg
ICAgICAgIGlmIChhdXRvKiBzZXNzaW9uID0gbV9uZXR3b3JrUHJvY2Vzcy0+bmV0d29ya1Nlc3Np
b24obV9zZXNzaW9uSUQpKQorICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PE5ldHdvcmtT
ZXNzaW9uU291cCY+KCpzZXNzaW9uKS5zb3VwU2Vzc2lvbigpOworCisgICAgICAgIHJldHVybiBu
dWxscHRyOworICAgIH0KKyNlbmRpZgorCiAgICAgV2Vha1B0cjxOZXR3b3JrUHJvY2Vzcz4gbV9u
ZXR3b3JrUHJvY2VzczsKICAgICBQQUw6OlNlc3Npb25JRCBtX3Nlc3Npb25JRDsKIH07CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtQcm9jZXNz
Q29jb2EubW0gYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtQcm9j
ZXNzQ29jb2EubW0KaW5kZXggMDdiOTYzM2JkNDguLjA3N2YxNmZhNjUwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtQcm9jZXNzQ29jb2EubW0K
KysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrUHJvY2Vzc0Nv
Y29hLm1tCkBAIC0xOTksMTAgKzE5OSwxMCBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpjbGVhckRp
c2tDYWNoZShXYWxsVGltZSBtb2RpZmllZFNpbmNlLCBDb21wbGV0aW9uSGFuZGxlcjx2bwogICAg
IGF1dG8gZ3JvdXAgPSBtX2NsZWFyQ2FjaGVEaXNwYXRjaEdyb3VwOwogICAgIGRpc3BhdGNoX2dy
b3VwX2FzeW5jKGdyb3VwLCBkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBtYWtlQmxvY2tQdHIo
W3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgbW9kaWZpZWRTaW5jZSwgY29t
cGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKCkgbXV0YWJsZSB7
CiAgICAgICAgIGF1dG8gYWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgZm9yIChhdXRvJiBzZXNzaW9uIDog
bmV0d29ya1Nlc3Npb25zKCkudmFsdWVzKCkpIHsKLSAgICAgICAgICAgIGlmIChhdXRvKiBjYWNo
ZSA9IHNlc3Npb24tPmNhY2hlKCkpCisgICAgICAgIGZvckVhY2hOZXR3b3JrU2Vzc2lvbihbbW9k
aWZpZWRTaW5jZSwgJmFnZ3JlZ2F0b3JdKE5ldHdvcmtTZXNzaW9uJiBzZXNzaW9uKSB7CisgICAg
ICAgICAgICBpZiAoYXV0byogY2FjaGUgPSBzZXNzaW9uLmNhY2hlKCkpCiAgICAgICAgICAgICAg
ICAgY2FjaGUtPmNsZWFyKG1vZGlmaWVkU2luY2UsIFthZ2dyZWdhdG9yID0gYWdncmVnYXRvci5j
b3B5UmVmKCldICgpIHsgfSk7Ci0gICAgICAgIH0KKyAgICAgICAgfSk7CiAgICAgfSkuZ2V0KCkp
OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2lvcy9OZXR3
b3JrUHJvY2Vzc0lPUy5tbSBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvaW9zL05ldHdv
cmtQcm9jZXNzSU9TLm1tCmluZGV4IDI5ZGQwODc3YmQ0Li5mZWFkZGJjZDFkMCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9pb3MvTmV0d29ya1Byb2Nlc3NJT1MubW0K
KysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9pb3MvTmV0d29ya1Byb2Nlc3NJT1Mu
bW0KQEAgLTc4LDEwICs3OCwxMCBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpjbGVhckNhY2hlRm9y
QWxsT3JpZ2lucyh1aW50MzJfdCBjYWNoZXNUb0NsZWFyKQogICAgIFJlc291cmNlQ2FjaGVzVG9D
bGVhciByZXNvdXJjZUNhY2hlc1RvQ2xlYXIgPSBzdGF0aWNfY2FzdDxSZXNvdXJjZUNhY2hlc1Rv
Q2xlYXI+KGNhY2hlc1RvQ2xlYXIpOwogICAgIGlmIChyZXNvdXJjZUNhY2hlc1RvQ2xlYXIgPT0g
SW5NZW1vcnlSZXNvdXJjZUNhY2hlc09ubHkpCiAgICAgICAgIHJldHVybjsKLSAgICBmb3IgKGF1
dG8mIHNlc3Npb24gOiBuZXR3b3JrU2Vzc2lvbnMoKS52YWx1ZXMoKSkgewotICAgICAgICBpZiAo
YXV0byogY2FjaGUgPSBzZXNzaW9uLT5jYWNoZSgpKQorICAgIGZvckVhY2hOZXR3b3JrU2Vzc2lv
bihbXShOZXR3b3JrU2Vzc2lvbiYgc2Vzc2lvbikgeworICAgICAgICBpZiAoYXV0byogY2FjaGUg
PSBzZXNzaW9uLmNhY2hlKCkpCiAgICAgICAgICAgICBjYWNoZS0+Y2xlYXIoKTsKLSAgICB9Cisg
ICAgfSk7CiB9CiAKIHZvaWQgTmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdv
cmtQcm9jZXNzKGNvbnN0IE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJiBwYXJhbWV0
ZXJzKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdv
cmtQcm9jZXNzTWFpblNvdXAuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zb3Vw
L05ldHdvcmtQcm9jZXNzTWFpblNvdXAuY3BwCmluZGV4IGY3ZDE0NTEwNGNlLi5hZDBiZGFkNWRj
MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtQ
cm9jZXNzTWFpblNvdXAuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc291
cC9OZXR3b3JrUHJvY2Vzc01haW5Tb3VwLmNwcApAQCAtNDEsNyArNDEsNyBAQCBwdWJsaWM6CiAg
ICAgewogICAgICAgICAvLyBOZWVkZWQgdG8gZGVzdHJveSB0aGUgU291cFNlc3Npb24gYW5kIFNv
dXBDb29raWVKYXIsIGUuZy4gdG8gYXZvaWQKICAgICAgICAgLy8gbGVha2luZyBTUUxpdGUgdGVt
cG9yYXJ5IGpvdXJuYWxpbmcgZmlsZXMuCi0gICAgICAgIGdsb2JhbE5ldHdvcmtQcm9jZXNzLT5k
ZWZhdWx0U3RvcmFnZVNlc3Npb24oKS5jbGVhclNvdXBOZXR3b3JrU2Vzc2lvbigpOworICAgICAg
ICBnbG9iYWxOZXR3b3JrUHJvY2Vzcy0+ZGVzdHJveVNlc3Npb24oUEFMOjpTZXNzaW9uSUQ6OmRl
ZmF1bHRTZXNzaW9uSUQoKSk7CiAgICAgfQogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtQcm9jZXNzU291cC5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Byb2Nlc3NTb3VwLmNwcAppbmRleCA3Yzc4
YjBiMzBjMi4uODNjMmYyOGVhNWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3Mvc291cC9OZXR3b3JrUHJvY2Vzc1NvdXAuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrUHJvY2Vzc1NvdXAuY3BwCkBAIC0yOSw3ICsyOSw3IEBA
CiAKICNpbmNsdWRlICJOZXR3b3JrQ2FjaGUuaCIKICNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzc0Ny
ZWF0aW9uUGFyYW1ldGVycy5oIgotI2luY2x1ZGUgIk5ldHdvcmtTZXNzaW9uLmgiCisjaW5jbHVk
ZSAiTmV0d29ya1Nlc3Npb25Tb3VwLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VDYWNoZXNUb0NsZWFy
LmgiCiAjaW5jbHVkZSAiV2ViQ29va2llTWFuYWdlci5oIgogI2luY2x1ZGUgIldlYktpdENhY2hl
ZFJlc29sdmVyLmgiCkBAIC05OSw4ICs5OSw4IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OnVzZXJQ
cmVmZXJyZWRMYW5ndWFnZXNDaGFuZ2VkKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBsYW5ndWFnCiB7
CiAgICAgYXV0byBhY2NlcHRMYW5ndWFnZXMgPSBidWlsZEFjY2VwdExhbmd1YWdlcyhsYW5ndWFn
ZXMpOwogICAgIFNvdXBOZXR3b3JrU2Vzc2lvbjo6c2V0SW5pdGlhbEFjY2VwdExhbmd1YWdlcyhh
Y2NlcHRMYW5ndWFnZXMpOwotICAgIGZvckVhY2hOZXR3b3JrU3RvcmFnZVNlc3Npb24oWyZhY2Nl
cHRMYW5ndWFnZXNdKGNvbnN0IGF1dG8mIHNlc3Npb24pIHsKLSAgICAgICAgc2Vzc2lvbi5zb3Vw
TmV0d29ya1Nlc3Npb24oKS5zZXRBY2NlcHRMYW5ndWFnZXMoYWNjZXB0TGFuZ3VhZ2VzKTsKKyAg
ICBmb3JFYWNoTmV0d29ya1Nlc3Npb24oWyZhY2NlcHRMYW5ndWFnZXNdKGNvbnN0IGF1dG8mIHNl
c3Npb24pIHsKKyAgICAgICAgc3RhdGljX2Nhc3Q8Y29uc3QgTmV0d29ya1Nlc3Npb25Tb3VwJj4o
c2Vzc2lvbikuc291cE5ldHdvcmtTZXNzaW9uKCkuc2V0QWNjZXB0TGFuZ3VhZ2VzKGFjY2VwdExh
bmd1YWdlcyk7CiAgICAgfSk7CiB9CiAKQEAgLTEzMyw3ICsxMzMsNyBAQCB2b2lkIE5ldHdvcmtQ
cm9jZXNzOjpwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2Vzcyhjb25zdCBOZXR3b3JrUHJv
Y2Vzc0NyZWF0aQogCiBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNz
aW9uPiBOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1DcmVhdGVEZWZhdWx0U3RvcmFnZVNlc3Npb24o
KSBjb25zdAogewotICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPFdlYkNvcmU6Ok5ldHdvcmtT
dG9yYWdlU2Vzc2lvbj4oUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSwgc3RkOjpt
YWtlX3VuaXF1ZTxTb3VwTmV0d29ya1Nlc3Npb24+KFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vz
c2lvbklEKCkpKTsKKyAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxXZWJDb3JlOjpOZXR3b3Jr
U3RvcmFnZVNlc3Npb24+KFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpOwogfQog
CiB2b2lkIE5ldHdvcmtQcm9jZXNzOjpzZXRJZ25vcmVUTFNFcnJvcnMoYm9vbCBpZ25vcmVUTFNF
cnJvcnMpCkBAIC0xNTcsMTAgKzE1NywxMCBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpjbGVhckNh
Y2hlRm9yQWxsT3JpZ2lucyh1aW50MzJfdCBjYWNoZXNUb0NsZWFyKQogdm9pZCBOZXR3b3JrUHJv
Y2Vzczo6Y2xlYXJEaXNrQ2FjaGUoV2FsbFRpbWUgbW9kaWZpZWRTaW5jZSwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIGF1dG8gYWdncmVnYXRv
ciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKLSAgICBmb3IgKGF1dG8mIHNlc3Npb24gOiBuZXR3b3JrU2Vzc2lvbnMoKS52YWx1ZXMoKSkg
ewotICAgICAgICBpZiAoYXV0byogY2FjaGUgPSBzZXNzaW9uLT5jYWNoZSgpKQorICAgIGZvckVh
Y2hOZXR3b3JrU2Vzc2lvbihbbW9kaWZpZWRTaW5jZSwgJmFnZ3JlZ2F0b3JdKE5ldHdvcmtTZXNz
aW9uJiBzZXNzaW9uKSB7CisgICAgICAgIGlmIChhdXRvKiBjYWNoZSA9IHNlc3Npb24uY2FjaGUo
KSkKICAgICAgICAgICAgIGNhY2hlLT5jbGVhcihtb2RpZmllZFNpbmNlLCBbYWdncmVnYXRvciA9
IGFnZ3JlZ2F0b3IuY29weVJlZigpXSAoKSB7IH0pOwotICAgIH0KKyAgICB9KTsKIH0KIAogdm9p
ZCBOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1UZXJtaW5hdGUoKQpAQCAtMTcxLDggKzE3MSw4IEBA
IHZvaWQgTmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtVGVybWluYXRlKCkKIHZvaWQgTmV0d29ya1By
b2Nlc3M6OnNldE5ldHdvcmtQcm94eVNldHRpbmdzKGNvbnN0IFNvdXBOZXR3b3JrUHJveHlTZXR0
aW5ncyYgc2V0dGluZ3MpCiB7CiAgICAgU291cE5ldHdvcmtTZXNzaW9uOjpzZXRQcm94eVNldHRp
bmdzKHNldHRpbmdzKTsKLSAgICBmb3JFYWNoTmV0d29ya1N0b3JhZ2VTZXNzaW9uKFtdKGNvbnN0
IGF1dG8mIHNlc3Npb24pIHsKLSAgICAgICAgc2Vzc2lvbi5zb3VwTmV0d29ya1Nlc3Npb24oKS5z
ZXR1cFByb3h5KCk7CisgICAgZm9yRWFjaE5ldHdvcmtTZXNzaW9uKFtdKGNvbnN0IGF1dG8mIHNl
c3Npb24pIHsKKyAgICAgICAgc3RhdGljX2Nhc3Q8Y29uc3QgTmV0d29ya1Nlc3Npb25Tb3VwJj4o
c2Vzc2lvbikuc291cE5ldHdvcmtTZXNzaW9uKCkuc2V0dXBQcm94eSgpOwogICAgIH0pOwogfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Nl
c3Npb25Tb3VwLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3Jr
U2Vzc2lvblNvdXAuY3BwCmluZGV4IGY3ZGVjNzA0OGQxLi43MzU1MjU3YmVkYSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtTZXNzaW9uU291cC5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtTZXNzaW9u
U291cC5jcHAKQEAgLTQxLDEzICs0MSwxOSBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAog
TmV0d29ya1Nlc3Npb25Tb3VwOjpOZXR3b3JrU2Vzc2lvblNvdXAoTmV0d29ya1Byb2Nlc3MmIG5l
dHdvcmtQcm9jZXNzLCBOZXR3b3JrU2Vzc2lvbkNyZWF0aW9uUGFyYW1ldGVycyYmIHBhcmFtZXRl
cnMpCiAgICAgOiBOZXR3b3JrU2Vzc2lvbihuZXR3b3JrUHJvY2VzcywgcGFyYW1ldGVycykKKyAg
ICAsIG1fbmV0d29ya1Nlc3Npb24oc3RkOjptYWtlX3VuaXF1ZTxTb3VwTmV0d29ya1Nlc3Npb24+
KG1fc2Vzc2lvbklEKSkKIHsKLSAgICBuZXR3b3JrU3RvcmFnZVNlc3Npb24oKS0+c2V0Q29va2ll
T2JzZXJ2ZXJIYW5kbGVyKFt0aGlzXSB7Ci0gICAgICAgIHRoaXMtPm5ldHdvcmtQcm9jZXNzKCku
c3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2VyPigpLT5ub3RpZnlDb29raWVzRGlkQ2hhbmdlKG1f
c2Vzc2lvbklEKTsKLSAgICB9KTsKKyAgICBhdXRvKiBzdG9yYWdlU2Vzc2lvbiA9IG5ldHdvcmtT
dG9yYWdlU2Vzc2lvbigpOworICAgIEFTU0VSVChzdG9yYWdlU2Vzc2lvbik7CiAKICAgICBpZiAo
IXBhcmFtZXRlcnMuY29va2llUGVyc2lzdGVudFN0b3JhZ2VQYXRoLmlzRW1wdHkoKSkKLSAgICAg
ICAgdGhpcy0+bmV0d29ya1Byb2Nlc3MoKS5zdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXI+KCkt
PnNldENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlKG1fc2Vzc2lvbklELCBwYXJhbWV0ZXJzLmNvb2tp
ZVBlcnNpc3RlbnRTdG9yYWdlUGF0aCwgcGFyYW1ldGVycy5jb29raWVQZXJzaXN0ZW50U3RvcmFn
ZVR5cGUpOworICAgICAgICBzZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShwYXJhbWV0ZXJzLmNv
b2tpZVBlcnNpc3RlbnRTdG9yYWdlUGF0aCwgcGFyYW1ldGVycy5jb29raWVQZXJzaXN0ZW50U3Rv
cmFnZVR5cGUpOworICAgIGVsc2UKKyAgICAgICAgbV9uZXR3b3JrU2Vzc2lvbi0+c2V0Q29va2ll
SmFyKHN0b3JhZ2VTZXNzaW9uLT5jb29raWVTdG9yYWdlKCkpOworCisgICAgc3RvcmFnZVNlc3Np
b24tPnNldENvb2tpZU9ic2VydmVySGFuZGxlcihbdGhpc10geworICAgICAgICB0aGlzLT5uZXR3
b3JrUHJvY2VzcygpLnN1cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlcj4oKS0+bm90aWZ5Q29va2ll
c0RpZENoYW5nZShtX3Nlc3Npb25JRCk7CisgICAgfSk7CiB9CiAKIE5ldHdvcmtTZXNzaW9uU291
cDo6fk5ldHdvcmtTZXNzaW9uU291cCgpCkBAIC01OCw3ICs2NCwzMSBAQCBOZXR3b3JrU2Vzc2lv
blNvdXA6On5OZXR3b3JrU2Vzc2lvblNvdXAoKQogCiBTb3VwU2Vzc2lvbiogTmV0d29ya1Nlc3Np
b25Tb3VwOjpzb3VwU2Vzc2lvbigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG5ldHdvcmtTdG9yYWdl
U2Vzc2lvbigpLT5zb3VwTmV0d29ya1Nlc3Npb24oKS5zb3VwU2Vzc2lvbigpOworICAgIHJldHVy
biBtX25ldHdvcmtTZXNzaW9uLT5zb3VwU2Vzc2lvbigpOworfQorCit2b2lkIE5ldHdvcmtTZXNz
aW9uU291cDo6c2V0Q29va2llUGVyc2lzdGVudFN0b3JhZ2UoY29uc3QgU3RyaW5nJiBzdG9yYWdl
UGF0aCwgU291cENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlVHlwZSBzdG9yYWdlVHlwZSkKK3sKKyAg
ICBhdXRvKiBzdG9yYWdlU2Vzc2lvbiA9IG5ldHdvcmtTdG9yYWdlU2Vzc2lvbigpOworICAgIGlm
ICghc3RvcmFnZVNlc3Npb24pCisgICAgICAgIHJldHVybjsKKworICAgIEdSZWZQdHI8U291cENv
b2tpZUphcj4gamFyOworICAgIHN3aXRjaCAoc3RvcmFnZVR5cGUpIHsKKyAgICBjYXNlIFNvdXBD
b29raWVQZXJzaXN0ZW50U3RvcmFnZVR5cGU6OlRleHQ6CisgICAgICAgIGphciA9IGFkb3B0R1Jl
Zihzb3VwX2Nvb2tpZV9qYXJfdGV4dF9uZXcoc3RvcmFnZVBhdGgudXRmOCgpLmRhdGEoKSwgRkFM
U0UpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTb3VwQ29va2llUGVyc2lzdGVudFN0b3Jh
Z2VUeXBlOjpTUUxpdGU6CisgICAgICAgIGphciA9IGFkb3B0R1JlZihzb3VwX2Nvb2tpZV9qYXJf
ZGJfbmV3KHN0b3JhZ2VQYXRoLnV0ZjgoKS5kYXRhKCksIEZBTFNFKSk7CisgICAgICAgIGJyZWFr
OworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKwor
ICAgIHNvdXBfY29va2llX2phcl9zZXRfYWNjZXB0X3BvbGljeShqYXIuZ2V0KCksIHNvdXBfY29v
a2llX2phcl9nZXRfYWNjZXB0X3BvbGljeShzdG9yYWdlU2Vzc2lvbi0+Y29va2llU3RvcmFnZSgp
KSk7CisgICAgc3RvcmFnZVNlc3Npb24tPnNldENvb2tpZVN0b3JhZ2UoV1RGTW92ZShqYXIpKTsK
KworICAgIG1fbmV0d29ya1Nlc3Npb24tPnNldENvb2tpZUphcihzdG9yYWdlU2Vzc2lvbi0+Y29v
a2llU3RvcmFnZSgpKTsKIH0KIAogdm9pZCBOZXR3b3JrU2Vzc2lvblNvdXA6OmNsZWFyQ3JlZGVu
dGlhbHMoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zb3VwL05l
dHdvcmtTZXNzaW9uU291cC5oIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zb3VwL05l
dHdvcmtTZXNzaW9uU291cC5oCmluZGV4IGMzMTMwNTY4MjYyLi5kZjQzOTE4YzA3YiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtTZXNzaW9uU291
cC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrU2Vzc2lv
blNvdXAuaApAQCAtMjYsOSArMjYsMTQgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiTmV0
d29ya1Nlc3Npb24uaCIKKyNpbmNsdWRlICJTb3VwQ29va2llUGVyc2lzdGVudFN0b3JhZ2VUeXBl
LmgiCiAKIHR5cGVkZWYgc3RydWN0IF9Tb3VwU2Vzc2lvbiBTb3VwU2Vzc2lvbjsKIAorbmFtZXNw
YWNlIFdlYkNvcmUgeworY2xhc3MgU291cE5ldHdvcmtTZXNzaW9uOworfQorCiBuYW1lc3BhY2Ug
V2ViS2l0IHsKIAogY2xhc3MgTmV0d29ya1NvY2tldENoYW5uZWw7CkBAIC00MywxNCArNDgsMTkg
QEAgcHVibGljOgogICAgIH0KICAgICB+TmV0d29ya1Nlc3Npb25Tb3VwKCk7CiAKKyAgICBXZWJD
b3JlOjpTb3VwTmV0d29ya1Nlc3Npb24mIHNvdXBOZXR3b3JrU2Vzc2lvbigpIGNvbnN0IHsgcmV0
dXJuICptX25ldHdvcmtTZXNzaW9uOyB9CiAgICAgU291cFNlc3Npb24qIHNvdXBTZXNzaW9uKCkg
Y29uc3Q7CiAKKyAgICB2b2lkIHNldENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlKGNvbnN0IFN0cmlu
ZyYgc3RvcmFnZVBhdGgsIFNvdXBDb29raWVQZXJzaXN0ZW50U3RvcmFnZVR5cGUpOworCiBwcml2
YXRlOgogICAgIE5ldHdvcmtTZXNzaW9uU291cChOZXR3b3JrUHJvY2VzcyYsIE5ldHdvcmtTZXNz
aW9uQ3JlYXRpb25QYXJhbWV0ZXJzJiYpOwogCiAgICAgc3RkOjp1bmlxdWVfcHRyPFdlYlNvY2tl
dFRhc2s+IGNyZWF0ZVdlYlNvY2tldFRhc2soTmV0d29ya1NvY2tldENoYW5uZWwmLCBjb25zdCBX
ZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBTdHJpbmcmIHByb3RvY29sKSBvdmVycmlk
ZTsKIAogICAgIHZvaWQgY2xlYXJDcmVkZW50aWFscygpIG92ZXJyaWRlOworCisgICAgc3RkOjp1
bmlxdWVfcHRyPFdlYkNvcmU6OlNvdXBOZXR3b3JrU2Vzc2lvbj4gbV9uZXR3b3JrU2Vzc2lvbjsK
IH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>374954</attachid>
            <date>2019-07-26 01:25:02 -0700</date>
            <delta_ts>2019-07-26 01:42:34 -0700</delta_ts>
            <desc>Rebased patch for landing</desc>
            <filename>wk2-soup-network-session.diff</filename>
            <type>text/plain</type>
            <size>45556</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBiNTMxYmVlNzI2Zi4uNDE5MWE1OGQ1ODUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzNSBAQAorMjAxOS0wNy0yNCAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGln
YWxpYS5jb20+CisKKyAgICAgICAgW1NPVVBdIE1vdmUgU291cE5ldHdvcmtTZXNzaW9uIG93bmVy
c2hpcCBmcm9tIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiB0byBOZXR3b3JrU2Vzc2lvbgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAwMDc2CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTWljaGFlbCBDYXRhbnphcm8uCisKKyAgICAgICAgUmVtb3ZlIHRoZSBT
b3VwTmV0d29ya1Nlc3Npb24gZnJvbSBOZXR3b3JrU3RvcmFnZVNlc3Npb24uCisKKyAgICAgICAg
KiBwbGF0Zm9ybS9uZXR3b3JrL05ldHdvcmtTdG9yYWdlU2Vzc2lvbi5oOgorICAgICAgICAoV2Vi
Q29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpjb29raWVTdG9yYWdlIGNvbnN0KTogUmV0dXJu
IHRoZSBjb29raWUgamFyLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvU3RvcmFnZVNlc3Np
b25Qcm92aWRlci5oOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVNlc3Npb25Qcm92aWRlcjo6
c291cFNlc3Npb24gY29uc3QpOiBUZW1wb3JhcnkgYWRkIHRoaXMgdmlydHVhbCBtZXRob2QgdGhh
dCBpcyByZXF1aXJlZCBieQorICAgICAgICBTb2NrZXRTdHJlYW1IYW5kbGVJbXBsU291cC4gSXQg
d2lsbCBiZSByZW1vdmVkIG9uY2Ugd2Ugc3dpdGNoIHRvIGxpYnNvdXAgV2ViU29ja2V0cyBBUEkg
c29vbi4KKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvRE5TUmVzb2x2ZVF1ZXVlU291
cC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpnbG9iYWxEZWZhdWx0U291cFNlc3Npb25BY2Nlc3Nv
cik6IFJld29yayB0aGUgYWNjZXNzb3IgdG8gcmV0dXJuIHRoZSBTb3VwU2Vzc2lvbiBkaXJlY3Rs
eSBzaW5jZQorICAgICAgICB0aGF0J3Mgd2hhdCB3ZSByZWFsbHkgd2FudC4KKyAgICAgICAgKFdl
YkNvcmU6OkROU1Jlc29sdmVRdWV1ZVNvdXA6OnNldEdsb2JhbERlZmF1bHRTb3VwU2Vzc2lvbkFj
Y2Vzc29yKToKKyAgICAgICAgKFdlYkNvcmU6OkROU1Jlc29sdmVRdWV1ZVNvdXA6OnVwZGF0ZUlz
VXNpbmdQcm94eSk6CisgICAgICAgIChXZWJDb3JlOjpETlNSZXNvbHZlUXVldWVTb3VwOjpwbGF0
Zm9ybVJlc29sdmUpOgorICAgICAgICAoV2ViQ29yZTo6RE5TUmVzb2x2ZVF1ZXVlU291cDo6cmVz
b2x2ZSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9zb3VwL0ROU1Jlc29sdmVRdWV1ZVNv
dXAuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvTmV0d29ya1N0b3JhZ2VTZXNz
aW9uU291cC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb246Ok5l
dHdvcmtTdG9yYWdlU2Vzc2lvbik6IENyZWF0ZSBhbmQgc2V0dXAgdGhlIGRlZmF1bHQgY29va2ll
IGphci4KKyAgICAgICAgKFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6fk5ldHdvcmtT
dG9yYWdlU2Vzc2lvbik6IE9ubHkgZGlzY29ubmVjdCB0aGUgY29va2llIGphciBzaWduYWxzLgor
ICAgICAgICAoV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpzZXRDb29raWVTdG9yYWdl
KTogVXBkYXRlIHRoZSBjb29raWUgamFyLCBub3cgd2Uga25vdyBpdCdzIGFsd2F5cyBhIG5ldyBv
bmUuCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9zb3VwL1NvY2tldFN0cmVhbUhhbmRsZUlt
cGxTb3VwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZUltcGw6OmNy
ZWF0ZSk6IFVzZSB0aGUgbmV3IHZpcnR1YWwgbWV0aG9kIGZyb20gU3RvcmFnZVNlc3Npb25Qcm92
aWRlciB0byBnZXQgdGhlIFNvdXBTZXNzaW9uLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsv
c291cC9Tb3VwTmV0d29ya1Nlc3Npb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6U291cE5ldHdv
cmtTZXNzaW9uOjpTb3VwTmV0d29ya1Nlc3Npb24pOiBSZW1vdmUgdGhlIFNvdXBDb29raWVKYXIg
cGFyYW1ldGVyLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvc291cC9Tb3VwTmV0d29ya1Nl
c3Npb24uaDoKKwogMjAxOS0wNy0yNiAgUm9iIEJ1aXMgIDxyYnVpc0BpZ2FsaWEuY29tPgogCiAg
ICAgICAgIE1ha2Ugc3RvcmluZyBjcm9zcy1vcmlnaW4gdG9wLWxldmVsIHByZWZldGNoZXMgaW4g
SFRUUCBjYWNoZSBvcHRpb25hbApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9OZXR3b3JrU3RvcmFnZVNlc3Npb24uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvTmV0d29ya1N0b3JhZ2VTZXNzaW9uLmgKaW5kZXggNThkYTg3ODkwN2YuLmUyZTEw
NmE5MWU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL05ldHdv
cmtTdG9yYWdlU2Vzc2lvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
TmV0d29ya1N0b3JhZ2VTZXNzaW9uLmgKQEAgLTY1LDcgKzY1LDYgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogY2xhc3MgQ3VybFByb3h5U2V0dGluZ3M7CiBjbGFzcyBOZXR3b3JraW5nQ29udGV4dDsK
IGNsYXNzIFJlc291cmNlUmVxdWVzdDsKLWNsYXNzIFNvdXBOZXR3b3JrU2Vzc2lvbjsKIAogc3Ry
dWN0IENvb2tpZTsKIHN0cnVjdCBDb29raWVSZXF1ZXN0SGVhZGVyRmllbGRQcm94eTsKQEAgLTk3
LDEzICs5NiwxMSBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgUmV0YWluUHRyPENGSFRU
UENvb2tpZVN0b3JhZ2VSZWY+IGNvb2tpZVN0b3JhZ2UoKSBjb25zdDsKICAgICBXRUJDT1JFX0VY
UE9SVCBzdGF0aWMgdm9pZCBzZXRTdG9yYWdlQWNjZXNzQVBJRW5hYmxlZChib29sKTsKICNlbGlm
IFVTRShTT1VQKQotICAgIFdFQkNPUkVfRVhQT1JUIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbihQQUw6
OlNlc3Npb25JRCwgc3RkOjp1bmlxdWVfcHRyPFNvdXBOZXR3b3JrU2Vzc2lvbj4mJik7CisgICAg
V0VCQ09SRV9FWFBPUlQgZXhwbGljaXQgTmV0d29ya1N0b3JhZ2VTZXNzaW9uKFBBTDo6U2Vzc2lv
bklEKTsKICAgICB+TmV0d29ya1N0b3JhZ2VTZXNzaW9uKCk7CiAKLSAgICBTb3VwTmV0d29ya1Nl
c3Npb24mIHNvdXBOZXR3b3JrU2Vzc2lvbigpIGNvbnN0OwotICAgIHZvaWQgY2xlYXJTb3VwTmV0
d29ya1Nlc3Npb24oKTsKLSAgICBTb3VwQ29va2llSmFyKiBjb29raWVTdG9yYWdlKCkgY29uc3Q7
Ci0gICAgdm9pZCBzZXRDb29raWVTdG9yYWdlKFNvdXBDb29raWVKYXIqKTsKKyAgICBTb3VwQ29v
a2llSmFyKiBjb29raWVTdG9yYWdlKCkgY29uc3QgeyByZXR1cm4gbV9jb29raWVTdG9yYWdlLmdl
dCgpOyB9CisgICAgdm9pZCBzZXRDb29raWVTdG9yYWdlKEdSZWZQdHI8U291cENvb2tpZUphcj4m
Jik7CiAgICAgdm9pZCBzZXRDb29raWVPYnNlcnZlckhhbmRsZXIoRnVuY3Rpb248dm9pZCAoKT4m
Jik7CiAgICAgdm9pZCBnZXRDcmVkZW50aWFsRnJvbVBlcnNpc3RlbnRTdG9yYWdlKGNvbnN0IFBy
b3RlY3Rpb25TcGFjZSYsIEdDYW5jZWxsYWJsZSosIEZ1bmN0aW9uPHZvaWQgKENyZWRlbnRpYWwm
Jik+JiYgY29tcGxldGlvbkhhbmRsZXIpOwogICAgIHZvaWQgc2F2ZUNyZWRlbnRpYWxUb1BlcnNp
c3RlbnRTdG9yYWdlKGNvbnN0IFByb3RlY3Rpb25TcGFjZSYsIGNvbnN0IENyZWRlbnRpYWwmKTsK
QEAgLTE3MSw3ICsxNjgsNyBAQCBwcml2YXRlOgogI2VsaWYgVVNFKFNPVVApCiAgICAgc3RhdGlj
IHZvaWQgY29va2llc0RpZENoYW5nZShOZXR3b3JrU3RvcmFnZVNlc3Npb24qKTsKIAotICAgIG11
dGFibGUgc3RkOjp1bmlxdWVfcHRyPFNvdXBOZXR3b3JrU2Vzc2lvbj4gbV9zZXNzaW9uOworICAg
IEdSZWZQdHI8U291cENvb2tpZUphcj4gbV9jb29raWVTdG9yYWdlOwogICAgIEZ1bmN0aW9uPHZv
aWQgKCk+IG1fY29va2llT2JzZXJ2ZXJIYW5kbGVyOwogI2VsaWYgVVNFKENVUkwpCiAgICAgVW5p
cXVlUmVmPENvb2tpZUphckN1cmw+IG1fY29va2llU3RvcmFnZTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvU3RvcmFnZVNlc3Npb25Qcm92aWRlci5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9TdG9yYWdlU2Vzc2lvblByb3ZpZGVyLmgKaW5k
ZXggMGMxNTU1YjY2YTAuLjM4MDEwNTAxMWIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL1N0b3JhZ2VTZXNzaW9uUHJvdmlkZXIuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL1N0b3JhZ2VTZXNzaW9uUHJvdmlkZXIuaApAQCAtMjcsNiAr
MjcsMTAgQEAKIAogI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgogCisjaWYg
VVNFKFNPVVApCit0eXBlZGVmIHN0cnVjdCBfU291cFNlc3Npb24gU291cFNlc3Npb247CisjZW5k
aWYKKwogbmFtZXNwYWNlIFBBTCB7CiBjbGFzcyBTZXNzaW9uSUQ7CiB9CkBAIC0zOSw2ICs0Mywx
MSBAQCBjbGFzcyBTdG9yYWdlU2Vzc2lvblByb3ZpZGVyIDogcHVibGljIFRocmVhZFNhZmVSZWZD
b3VudGVkPFN0b3JhZ2VTZXNzaW9uUHJvdmlkZQogcHVibGljOgogICAgIHZpcnR1YWwgTmV0d29y
a1N0b3JhZ2VTZXNzaW9uKiBzdG9yYWdlU2Vzc2lvbigpIGNvbnN0ID0gMDsKIAorI2lmIFVTRShT
T1VQKQorICAgIC8vIEZJWE1FOiBUaGlzIGlzIG9ubHkgcmVxdWlyZWQgYnkgU29ja2V0U3RyZWFt
SGFuZGxlSW1wbFNvdXAsIHJlbW92ZSBpdCB3aGVuIHdlIHN3aXRjaCB0byBsaWJzb3VwIFdlYlNv
Y2tldHMgQVBJLgorICAgIHZpcnR1YWwgU291cFNlc3Npb24qIHNvdXBTZXNzaW9uKCkgY29uc3Qg
eyByZXR1cm4gbnVsbHB0cjsgfQorI2VuZGlmCisKICAgICB2aXJ0dWFsIH5TdG9yYWdlU2Vzc2lv
blByb3ZpZGVyKCkgeyB9CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL3NvdXAvRE5TUmVzb2x2ZVF1ZXVlU291cC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL3NvdXAvRE5TUmVzb2x2ZVF1ZXVlU291cC5jcHAKaW5kZXggZDIzOTc3
NTQxYWYuLjRiYjMwYTg3MWRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL3NvdXAvRE5TUmVzb2x2ZVF1ZXVlU291cC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9zb3VwL0ROU1Jlc29sdmVRdWV1ZVNvdXAuY3BwCkBAIC0yOSw4ICsy
OSw2IEBACiAKICNpZiBVU0UoU09VUCkKIAotI2luY2x1ZGUgIk5ldHdvcmtTdG9yYWdlU2Vzc2lv
bi5oIgotI2luY2x1ZGUgIlNvdXBOZXR3b3JrU2Vzc2lvbi5oIgogI2luY2x1ZGUgPGxpYnNvdXAv
c291cC5oPgogI2luY2x1ZGUgPHd0Zi9Db21wbGV0aW9uSGFuZGxlci5oPgogI2luY2x1ZGUgPHd0
Zi9GdW5jdGlvbi5oPgpAQCAtNzgsMjEgKzc2LDIxIEBAIHN0YXRpYyB2b2lkIHByb3h5UmVzb2x2
ZWRGb3JIdHRwc1VyaUNhbGxiYWNrKEdPYmplY3QqIHNvdXJjZSwgR0FzeW5jUmVzdWx0KiByZXN1
CiAgICAgZGlkUmVzb2x2ZVByb3h5KEdfUFJPWFlfUkVTT0xWRVIoc291cmNlKSwgcmVzdWx0LCAm
aXNVc2luZ0h0dHBzUHJveHksIHN0YXRpY19jYXN0PGJvb2wqPih1c2VyRGF0YSkpOwogfQogCi1G
dW5jdGlvbjxOZXR3b3JrU3RvcmFnZVNlc3Npb24mKCk+JiBnbG9iYWxEZWZhdWx0TmV0d29ya1N0
b3JhZ2VTZXNzaW9uQWNjZXNzb3IoKQorRnVuY3Rpb248U291cFNlc3Npb24qKCk+JiBnbG9iYWxE
ZWZhdWx0U291cFNlc3Npb25BY2Nlc3NvcigpCiB7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVk
PEZ1bmN0aW9uPE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYoKT4+IGFjY2Vzc29yOworICAgIHN0YXRp
YyBOZXZlckRlc3Ryb3llZDxGdW5jdGlvbjxTb3VwU2Vzc2lvbiooKT4+IGFjY2Vzc29yOwogICAg
IHJldHVybiBhY2Nlc3Nvci5nZXQoKTsKIH0KIAotdm9pZCBETlNSZXNvbHZlUXVldWVTb3VwOjpz
ZXRHbG9iYWxEZWZhdWx0TmV0d29ya1N0b3JhZ2VTZXNzaW9uQWNjZXNzb3IoRnVuY3Rpb248TmV0
d29ya1N0b3JhZ2VTZXNzaW9uJigpPiYmIGFjY2Vzc29yKQordm9pZCBETlNSZXNvbHZlUXVldWVT
b3VwOjpzZXRHbG9iYWxEZWZhdWx0U291cFNlc3Npb25BY2Nlc3NvcihGdW5jdGlvbjxTb3VwU2Vz
c2lvbiooKT4mJiBhY2Nlc3NvcikKIHsKLSAgICBnbG9iYWxEZWZhdWx0TmV0d29ya1N0b3JhZ2VT
ZXNzaW9uQWNjZXNzb3IoKSA9IFdURk1vdmUoYWNjZXNzb3IpOworICAgIGdsb2JhbERlZmF1bHRT
b3VwU2Vzc2lvbkFjY2Vzc29yKCkgPSBXVEZNb3ZlKGFjY2Vzc29yKTsKIH0KIAogdm9pZCBETlNS
ZXNvbHZlUXVldWVTb3VwOjp1cGRhdGVJc1VzaW5nUHJveHkoKQogewogICAgIEdSZWZQdHI8R1By
b3h5UmVzb2x2ZXI+IHJlc29sdmVyOwotICAgIGdfb2JqZWN0X2dldChnbG9iYWxEZWZhdWx0TmV0
d29ya1N0b3JhZ2VTZXNzaW9uQWNjZXNzb3IoKSgpLnNvdXBOZXR3b3JrU2Vzc2lvbigpLnNvdXBT
ZXNzaW9uKCksICJwcm94eS1yZXNvbHZlciIsICZyZXNvbHZlci5vdXRQdHIoKSwgbnVsbHB0cik7
CisgICAgZ19vYmplY3RfZ2V0KGdsb2JhbERlZmF1bHRTb3VwU2Vzc2lvbkFjY2Vzc29yKCkoKSwg
InByb3h5LXJlc29sdmVyIiwgJnJlc29sdmVyLm91dFB0cigpLCBudWxscHRyKTsKICAgICBBU1NF
UlQocmVzb2x2ZXIpOwogCiAgICAgZ19wcm94eV9yZXNvbHZlcl9sb29rdXBfYXN5bmMocmVzb2x2
ZXIuZ2V0KCksICJodHRwOi8vZXhhbXBsZS5jb20vIiwgbnVsbHB0ciwgcHJveHlSZXNvbHZlZEZv
ckh0dHBVcmlDYWxsYmFjaywgJm1faXNVc2luZ1Byb3h5KTsKQEAgLTE3NSw3ICsxNzMsNyBAQCB2
b2lkIEROU1Jlc29sdmVRdWV1ZVNvdXA6OnBsYXRmb3JtUmVzb2x2ZShjb25zdCBTdHJpbmcmIGhv
c3RuYW1lKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAKLSAgICBzb3VwX3Nlc3Np
b25fcHJlZmV0Y2hfZG5zKGdsb2JhbERlZmF1bHROZXR3b3JrU3RvcmFnZVNlc3Npb25BY2Nlc3Nv
cigpKCkuc291cE5ldHdvcmtTZXNzaW9uKCkuc291cFNlc3Npb24oKSwgaG9zdG5hbWUudXRmOCgp
LmRhdGEoKSwgbnVsbHB0ciwgcmVzb2x2ZWRDYWxsYmFjaywgbnVsbHB0cik7CisgICAgc291cF9z
ZXNzaW9uX3ByZWZldGNoX2RucyhnbG9iYWxEZWZhdWx0U291cFNlc3Npb25BY2Nlc3NvcigpKCks
IGhvc3RuYW1lLnV0ZjgoKS5kYXRhKCksIG51bGxwdHIsIHJlc29sdmVkQ2FsbGJhY2ssIG51bGxw
dHIpOwogfQogCiB2b2lkIEROU1Jlc29sdmVRdWV1ZVNvdXA6OnJlc29sdmUoY29uc3QgU3RyaW5n
JiBob3N0bmFtZSwgdWludDY0X3QgaWRlbnRpZmllciwgRE5TQ29tcGxldGlvbkhhbmRsZXImJiBj
b21wbGV0aW9uSGFuZGxlcikKQEAgLTE4NCw3ICsxODIsNyBAQCB2b2lkIEROU1Jlc29sdmVRdWV1
ZVNvdXA6OnJlc29sdmUoY29uc3QgU3RyaW5nJiBob3N0bmFtZSwgdWludDY0X3QgaWRlbnRpZmll
ciwgRAogCiAgICAgYXV0byBhZGRyZXNzID0gYWRvcHRHUmVmKHNvdXBfYWRkcmVzc19uZXcoaG9z
dG5hbWUudXRmOCgpLmRhdGEoKSwgMCkpOwogICAgIGF1dG8gY2FuY2VsbGFibGUgPSBhZG9wdEdS
ZWYoZ19jYW5jZWxsYWJsZV9uZXcoKSk7Ci0gICAgc291cF9hZGRyZXNzX3Jlc29sdmVfYXN5bmMo
YWRkcmVzcy5nZXQoKSwgc291cF9zZXNzaW9uX2dldF9hc3luY19jb250ZXh0KFdlYkNvcmU6Omds
b2JhbERlZmF1bHROZXR3b3JrU3RvcmFnZVNlc3Npb25BY2Nlc3NvcigpKCkuc291cE5ldHdvcmtT
ZXNzaW9uKCkuc291cFNlc3Npb24oKSksIGNhbmNlbGxhYmxlLmdldCgpLCByZXNvbHZlZFdpdGhP
YnNlcnZlckNhbGxiYWNrLCB0aGlzKTsKKyAgICBzb3VwX2FkZHJlc3NfcmVzb2x2ZV9hc3luYyhh
ZGRyZXNzLmdldCgpLCBzb3VwX3Nlc3Npb25fZ2V0X2FzeW5jX2NvbnRleHQoZ2xvYmFsRGVmYXVs
dFNvdXBTZXNzaW9uQWNjZXNzb3IoKSgpKSwgY2FuY2VsbGFibGUuZ2V0KCksIHJlc29sdmVkV2l0
aE9ic2VydmVyQ2FsbGJhY2ssIHRoaXMpOwogCiAgICAgZ19vYmplY3Rfc2V0X2RhdGEoR19PQkpF
Q1QoYWRkcmVzcy5nZXQoKSksICJpZGVudGlmaWVyIiwgR1VJTlRfVE9fUE9JTlRFUihpZGVudGlm
aWVyKSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291
cC9ETlNSZXNvbHZlUXVldWVTb3VwLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L3NvdXAvRE5TUmVzb2x2ZVF1ZXVlU291cC5oCmluZGV4IDU3MjAzNGY1NGFjLi5jZWU3OWY5MzMz
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL0ROU1Jl
c29sdmVRdWV1ZVNvdXAuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3Nv
dXAvRE5TUmVzb2x2ZVF1ZXVlU291cC5oCkBAIC0zMCw2ICszMCw4IEBACiAjaW5jbHVkZSA8d3Rm
L0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvZ2xpYi9HUmVmUHRyLmg+CiAKK3R5cGVkZWYgc3Ry
dWN0IF9Tb3VwU2Vzc2lvbiBTb3VwU2Vzc2lvbjsKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBj
bGFzcyBOZXR3b3JrU3RvcmFnZVNlc3Npb247CkBAIC0zOSw3ICs0MSw3IEBAIHB1YmxpYzoKICAg
ICB1c2luZyBDb21wbGV0aW9uQW5kQ2FuY2VsSGFuZGxlcnMgPSBzdGQ6OnBhaXI8V2ViQ29yZTo6
RE5TQ29tcGxldGlvbkhhbmRsZXIsIEdSZWZQdHI8R0NhbmNlbGxhYmxlPj47CiAKICAgICBETlNS
ZXNvbHZlUXVldWVTb3VwKCkgPSBkZWZhdWx0OwotICAgIHN0YXRpYyB2b2lkIHNldEdsb2JhbERl
ZmF1bHROZXR3b3JrU3RvcmFnZVNlc3Npb25BY2Nlc3NvcihGdW5jdGlvbjxOZXR3b3JrU3RvcmFn
ZVNlc3Npb24mKCk+JiYpOworICAgIHN0YXRpYyB2b2lkIHNldEdsb2JhbERlZmF1bHRTb3VwU2Vz
c2lvbkFjY2Vzc29yKEZ1bmN0aW9uPFNvdXBTZXNzaW9uKigpPiYmKTsKICAgICB2b2lkIHJlc29s
dmUoY29uc3QgU3RyaW5nJiBob3N0bmFtZSwgdWludDY0X3QgaWRlbnRpZmllciwgRE5TQ29tcGxl
dGlvbkhhbmRsZXImJikgZmluYWw7CiAgICAgdm9pZCBzdG9wUmVzb2x2ZSh1aW50NjRfdCBpZGVu
dGlmaWVyKSBmaW5hbDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9zb3VwL05ldHdvcmtTdG9yYWdlU2Vzc2lvblNvdXAuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9zb3VwL05ldHdvcmtTdG9yYWdlU2Vzc2lvblNvdXAuY3BwCmluZGV4
IDA1M2Y2YjkxYTY0Li5lNGM4YjBmMTNlNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9zb3VwL05ldHdvcmtTdG9yYWdlU2Vzc2lvblNvdXAuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9OZXR3b3JrU3RvcmFnZVNlc3Npb25T
b3VwLmNwcApAQCAtNTMsMzQgKzUzLDE3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotTmV0
d29ya1N0b3JhZ2VTZXNzaW9uOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24oUEFMOjpTZXNzaW9uSUQg
c2Vzc2lvbklELCBzdGQ6OnVuaXF1ZV9wdHI8U291cE5ldHdvcmtTZXNzaW9uPiYmIHNlc3Npb24p
CitOZXR3b3JrU3RvcmFnZVNlc3Npb246Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbihQQUw6OlNlc3Np
b25JRCBzZXNzaW9uSUQpCiAgICAgOiBtX3Nlc3Npb25JRChzZXNzaW9uSUQpCi0gICAgLCBtX3Nl
c3Npb24oV1RGTW92ZShzZXNzaW9uKSkKKyAgICAsIG1fY29va2llU3RvcmFnZShhZG9wdEdSZWYo
c291cF9jb29raWVfamFyX25ldygpKSkKIHsKLSAgICBBU1NFUlQobV9zZXNzaW9uLT5jb29raWVK
YXIoKSk7Ci0gICAgZ19zaWduYWxfY29ubmVjdF9zd2FwcGVkKG1fc2Vzc2lvbi0+Y29va2llSmFy
KCksICJjaGFuZ2VkIiwgR19DQUxMQkFDSyhjb29raWVzRGlkQ2hhbmdlKSwgdGhpcyk7CisgICAg
c291cF9jb29raWVfamFyX3NldF9hY2NlcHRfcG9saWN5KG1fY29va2llU3RvcmFnZS5nZXQoKSwg
U09VUF9DT09LSUVfSkFSX0FDQ0VQVF9OT19USElSRF9QQVJUWSk7CisgICAgZ19zaWduYWxfY29u
bmVjdF9zd2FwcGVkKG1fY29va2llU3RvcmFnZS5nZXQoKSwgImNoYW5nZWQiLCBHX0NBTExCQUNL
KGNvb2tpZXNEaWRDaGFuZ2UpLCB0aGlzKTsKIH0KIAogTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjp+
TmV0d29ya1N0b3JhZ2VTZXNzaW9uKCkKIHsKLSAgICBjbGVhclNvdXBOZXR3b3JrU2Vzc2lvbigp
OwotfQotCi1Tb3VwTmV0d29ya1Nlc3Npb24mIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6c291cE5l
dHdvcmtTZXNzaW9uKCkgY29uc3QKLXsKLSAgICBBU1NFUlQobV9zZXNzaW9uKTsKLSAgICByZXR1
cm4gKm1fc2Vzc2lvbi5nZXQoKTsKLX07Ci0KLXZvaWQgTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpj
bGVhclNvdXBOZXR3b3JrU2Vzc2lvbigpCi17Ci0gICAgaWYgKG1fc2Vzc2lvbikgewotICAgICAg
ICBBU1NFUlQobV9zZXNzaW9uLT5jb29raWVKYXIoKSk7Ci0gICAgICAgIGdfc2lnbmFsX2hhbmRs
ZXJzX2Rpc2Nvbm5lY3RfbWF0Y2hlZChtX3Nlc3Npb24tPmNvb2tpZUphcigpLCBHX1NJR05BTF9N
QVRDSF9EQVRBLCAwLCAwLCBudWxscHRyLCBudWxscHRyLCB0aGlzKTsKLSAgICB9Ci0KLSAgICBt
X3Nlc3Npb24gPSBudWxscHRyOwotICAgIG1fY29va2llT2JzZXJ2ZXJIYW5kbGVyID0gbnVsbHB0
cjsKKyAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X21hdGNoZWQobV9jb29raWVTdG9y
YWdlLmdldCgpLCBHX1NJR05BTF9NQVRDSF9EQVRBLCAwLCAwLCBudWxscHRyLCBudWxscHRyLCB0
aGlzKTsKIH0KIAogdm9pZCBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmNvb2tpZXNEaWRDaGFuZ2Uo
TmV0d29ya1N0b3JhZ2VTZXNzaW9uKiBzZXNzaW9uKQpAQCAtODksMjUgKzcyLDExIEBAIHZvaWQg
TmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpjb29raWVzRGlkQ2hhbmdlKE5ldHdvcmtTdG9yYWdlU2Vz
c2lvbiogc2Vzc2lvbikKICAgICAgICAgc2Vzc2lvbi0+bV9jb29raWVPYnNlcnZlckhhbmRsZXIo
KTsKIH0KIAotU291cENvb2tpZUphciogTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpjb29raWVTdG9y
YWdlKCkgY29uc3QKLXsKLSAgICBBU1NFUlQobV9zZXNzaW9uKTsKLSAgICBBU1NFUlQobV9zZXNz
aW9uLT5jb29raWVKYXIoKSk7Ci0gICAgcmV0dXJuIG1fc2Vzc2lvbi0+Y29va2llSmFyKCk7Ci19
Ci0KLXZvaWQgTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpzZXRDb29raWVTdG9yYWdlKFNvdXBDb29r
aWVKYXIqIGphcikKK3ZvaWQgTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpzZXRDb29raWVTdG9yYWdl
KEdSZWZQdHI8U291cENvb2tpZUphcj4mJiBqYXIpCiB7Ci0gICAgQVNTRVJUKGphcik7Ci0gICAg
QVNTRVJUKG1fc2Vzc2lvbik7Ci0gICAgQVNTRVJUKG1fc2Vzc2lvbi0+Y29va2llSmFyKCkpOwot
Ci0gICAgaWYgKG1fc2Vzc2lvbi0+Y29va2llSmFyKCkgPT0gamFyKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X21hdGNoZWQobV9zZXNzaW9uLT5j
b29raWVKYXIoKSwgR19TSUdOQUxfTUFUQ0hfREFUQSwgMCwgMCwgbnVsbHB0ciwgbnVsbHB0ciwg
dGhpcyk7Ci0gICAgbV9zZXNzaW9uLT5zZXRDb29raWVKYXIoamFyKTsKLSAgICBnX3NpZ25hbF9j
b25uZWN0X3N3YXBwZWQobV9zZXNzaW9uLT5jb29raWVKYXIoKSwgImNoYW5nZWQiLCBHX0NBTExC
QUNLKGNvb2tpZXNEaWRDaGFuZ2UpLCB0aGlzKTsKKyAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNj
b25uZWN0X21hdGNoZWQobV9jb29raWVTdG9yYWdlLmdldCgpLCBHX1NJR05BTF9NQVRDSF9EQVRB
LCAwLCAwLCBudWxscHRyLCBudWxscHRyLCB0aGlzKTsKKyAgICBtX2Nvb2tpZVN0b3JhZ2UgPSBX
VEZNb3ZlKGphcik7CisgICAgZ19zaWduYWxfY29ubmVjdF9zd2FwcGVkKG1fY29va2llU3RvcmFn
ZS5nZXQoKSwgImNoYW5nZWQiLCBHX0NBTExCQUNLKGNvb2tpZXNEaWRDaGFuZ2UpLCB0aGlzKTsK
IH0KIAogdm9pZCBOZXR3b3JrU3RvcmFnZVNlc3Npb246OnNldENvb2tpZU9ic2VydmVySGFuZGxl
cihGdW5jdGlvbjx2b2lkICgpPiYmIGhhbmRsZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvU29ja2V0U3RyZWFtSGFuZGxlSW1wbFNvdXAuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1NvY2tldFN0cmVhbUhhbmRsZUlt
cGxTb3VwLmNwcAppbmRleCBlZDc4ZTRkZGQ1OS4uZmJkY2JiMTVlNGQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9Tb2NrZXRTdHJlYW1IYW5kbGVJbXBs
U291cC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1NvY2tl
dFN0cmVhbUhhbmRsZUltcGxTb3VwLmNwcApAQCAtMzYsMTEgKzM2LDkgQEAKIAogI2luY2x1ZGUg
IkRlcHJlY2F0ZWRHbG9iYWxTZXR0aW5ncy5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNs
dWRlICJOZXR3b3JrU3RvcmFnZVNlc3Npb24uaCIKICNpbmNsdWRlICJSZXNvdXJjZUVycm9yLmgi
CiAjaW5jbHVkZSAiU29ja2V0U3RyZWFtRXJyb3IuaCIKICNpbmNsdWRlICJTb2NrZXRTdHJlYW1I
YW5kbGVDbGllbnQuaCIKLSNpbmNsdWRlICJTb3VwTmV0d29ya1Nlc3Npb24uaCIKICNpbmNsdWRl
ICJTdG9yYWdlU2Vzc2lvblByb3ZpZGVyLmgiCiAjaW5jbHVkZSAiVVJMU291cC5oIgogI2luY2x1
ZGUgPGdpby9naW8uaD4KQEAgLTg3LDEzICs4NSwxMyBAQCBSZWY8U29ja2V0U3RyZWFtSGFuZGxl
SW1wbD4gU29ja2V0U3RyZWFtSGFuZGxlSW1wbDo6Y3JlYXRlKGNvbnN0IFVSTCYgdXJsLCBTb2Nr
ZQogICAgIFJlZjxTb2NrZXRTdHJlYW1IYW5kbGVJbXBsPiBzb2NrZXQgPSBhZG9wdFJlZigqbmV3
IFNvY2tldFN0cmVhbUhhbmRsZUltcGwodXJsLCBjbGllbnQsIHN0b3JhZ2VTZXNzaW9uUHJvdmlk
ZXIpKTsKIAogI2lmIFNPVVBfQ0hFQ0tfVkVSU0lPTigyLCA2MSwgOTApCi0gICAgYXV0byogbmV0
d29ya1N0b3JhZ2VTZXNzaW9uID0gc3RvcmFnZVNlc3Npb25Qcm92aWRlciA/IHN0b3JhZ2VTZXNz
aW9uUHJvdmlkZXItPnN0b3JhZ2VTZXNzaW9uKCkgOiBudWxscHRyOwotICAgIGlmICghbmV0d29y
a1N0b3JhZ2VTZXNzaW9uKQorICAgIGF1dG8qIHNvdXBTZXNzaW9uID0gc3RvcmFnZVNlc3Npb25Q
cm92aWRlciA/IHN0b3JhZ2VTZXNzaW9uUHJvdmlkZXItPnNvdXBTZXNzaW9uKCkgOiBudWxscHRy
OworICAgIGlmICghc291cFNlc3Npb24pCiAgICAgICAgIHJldHVybiBzb2NrZXQ7CiAKICAgICBh
dXRvIHVyaSA9IHVybFRvU291cFVSSSh1cmwpOwogICAgIFJlZjxTb2NrZXRTdHJlYW1IYW5kbGU+
IHByb3RlY3RlZFNvY2tldFN0cmVhbUhhbmRsZSA9IHNvY2tldC5jb3B5UmVmKCk7Ci0gICAgc291
cF9zZXNzaW9uX2Nvbm5lY3RfYXN5bmMobmV0d29ya1N0b3JhZ2VTZXNzaW9uLT5zb3VwTmV0d29y
a1Nlc3Npb24oKS5zb3VwU2Vzc2lvbigpLCB1cmkuZ2V0KCksIHNvY2tldC0+bV9jYW5jZWxsYWJs
ZS5nZXQoKSwKKyAgICBzb3VwX3Nlc3Npb25fY29ubmVjdF9hc3luYyhzb3VwU2Vzc2lvbiwgdXJp
LmdldCgpLCBzb2NrZXQtPm1fY2FuY2VsbGFibGUuZ2V0KCksCiAgICAgICAgIHVybC5wcm90b2Nv
bElzKCJ3c3MiKSA/IHJlaW50ZXJwcmV0X2Nhc3Q8U291cFNlc3Npb25Db25uZWN0UHJvZ3Jlc3ND
YWxsYmFjaz4oY29ubmVjdFByb2dyZXNzQ2FsbGJhY2spIDogbnVsbHB0ciwKICAgICAgICAgcmVp
bnRlcnByZXRfY2FzdDxHQXN5bmNSZWFkeUNhbGxiYWNrPihjb25uZWN0ZWRDYWxsYmFjayksICZw
cm90ZWN0ZWRTb2NrZXRTdHJlYW1IYW5kbGUubGVha1JlZigpKTsKICNlbHNlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvU291cE5ldHdvcmtTZXNzaW9u
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9Tb3VwTmV0d29ya1Nl
c3Npb24uY3BwCmluZGV4IDYxMjRmNDZjMjRkLi42MTg5OThmMjUxYiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1NvdXBOZXR3b3JrU2Vzc2lvbi5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1NvdXBOZXR3b3JrU2Vz
c2lvbi5jcHAKQEAgLTEwNiw3ICsxMDYsNyBAQCBzdGF0aWMgQWxsb3dlZENlcnRpZmljYXRlc01h
cCYgYWxsb3dlZENlcnRpZmljYXRlcygpCiAgICAgcmV0dXJuIGNlcnRpZmljYXRlczsKIH0KIAot
U291cE5ldHdvcmtTZXNzaW9uOjpTb3VwTmV0d29ya1Nlc3Npb24oUEFMOjpTZXNzaW9uSUQgc2Vz
c2lvbklELCBTb3VwQ29va2llSmFyKiBjb29raWVKYXIpCitTb3VwTmV0d29ya1Nlc3Npb246OlNv
dXBOZXR3b3JrU2Vzc2lvbihQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCiAgICAgOiBtX3NvdXBT
ZXNzaW9uKGFkb3B0R1JlZihzb3VwX3Nlc3Npb25fbmV3KCkpKQogewogICAgIC8vIFZhbHVlcyB0
YWtlbiBmcm9tIGh0dHA6Ly93d3cuYnJvd3NlcnNjb3BlLm9yZy8gZm9sbG93aW5nCkBAIC0xMTYs
MTkgKzExNiwxMiBAQCBTb3VwTmV0d29ya1Nlc3Npb246OlNvdXBOZXR3b3JrU2Vzc2lvbihQQUw6
OlNlc3Npb25JRCBzZXNzaW9uSUQsIFNvdXBDb29raWVKYXIqCiAgICAgc3RhdGljIGNvbnN0IGlu
dCBtYXhDb25uZWN0aW9ucyA9IDE3OwogICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4Q29ubmVjdGlv
bnNQZXJIb3N0ID0gNjsKIAotICAgIEdSZWZQdHI8U291cENvb2tpZUphcj4gamFyID0gY29va2ll
SmFyOwotICAgIGlmICghamFyKSB7Ci0gICAgICAgIGphciA9IGFkb3B0R1JlZihzb3VwX2Nvb2tp
ZV9qYXJfbmV3KCkpOwotICAgICAgICBzb3VwX2Nvb2tpZV9qYXJfc2V0X2FjY2VwdF9wb2xpY3ko
amFyLmdldCgpLCBTT1VQX0NPT0tJRV9KQVJfQUNDRVBUX05PX1RISVJEX1BBUlRZKTsKLSAgICB9
Ci0KICAgICBnX29iamVjdF9zZXQobV9zb3VwU2Vzc2lvbi5nZXQoKSwKICAgICAgICAgU09VUF9T
RVNTSU9OX01BWF9DT05OUywgbWF4Q29ubmVjdGlvbnMsCiAgICAgICAgIFNPVVBfU0VTU0lPTl9N
QVhfQ09OTlNfUEVSX0hPU1QsIG1heENvbm5lY3Rpb25zUGVySG9zdCwKICAgICAgICAgU09VUF9T
RVNTSU9OX1RJTUVPVVQsIDAsCiAgICAgICAgIFNPVVBfU0VTU0lPTl9JRExFX1RJTUVPVVQsIDAs
CiAgICAgICAgIFNPVVBfU0VTU0lPTl9BRERfRkVBVFVSRV9CWV9UWVBFLCBTT1VQX1RZUEVfQ09O
VEVOVF9TTklGRkVSLAotICAgICAgICBTT1VQX1NFU1NJT05fQUREX0ZFQVRVUkUsIGphci5nZXQo
KSwKICAgICAgICAgbnVsbHB0cik7CiAKICAgICBzZXR1cEN1c3RvbVByb3RvY29scygpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1NvdXBOZXR3b3Jr
U2Vzc2lvbi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1NvdXBOZXR3
b3JrU2Vzc2lvbi5oCmluZGV4IGZmYmQ0OWE3NjJhLi41ZTMyZDMxYWQ0ZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1NvdXBOZXR3b3JrU2Vzc2lvbi5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9Tb3VwTmV0d29ya1Nl
c3Npb24uaApAQCAtNDksNyArNDksNyBAQCBzdHJ1Y3QgU291cE5ldHdvcmtQcm94eVNldHRpbmdz
OwogY2xhc3MgU291cE5ldHdvcmtTZXNzaW9uIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShT
b3VwTmV0d29ya1Nlc3Npb24pOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAg
ICBleHBsaWNpdCBTb3VwTmV0d29ya1Nlc3Npb24oUEFMOjpTZXNzaW9uSUQgPSBQQUw6OlNlc3Np
b25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpLCBTb3VwQ29va2llSmFyKiA9IG51bGxwdHIpOworICAg
IGV4cGxpY2l0IFNvdXBOZXR3b3JrU2Vzc2lvbihQQUw6OlNlc3Npb25JRCk7CiAgICAgflNvdXBO
ZXR3b3JrU2Vzc2lvbigpOwogCiAgICAgU291cFNlc3Npb24qIHNvdXBTZXNzaW9uKCkgY29uc3Qg
eyByZXR1cm4gbV9zb3VwU2Vzc2lvbi5nZXQoKTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCBmODM3ZjI0OWQ4Zi4u
NDBlNzVkNTlmMGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTggQEAKKzIwMTktMDctMjQgIENhcmxv
cyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgorCisgICAgICAgIFtTT1VQXSBN
b3ZlIFNvdXBOZXR3b3JrU2Vzc2lvbiBvd25lcnNoaXAgZnJvbSBOZXR3b3JrU3RvcmFnZVNlc3Np
b24gdG8gTmV0d29ya1Nlc3Npb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIwMDA3NgorCisgICAgICAgIFJldmlld2VkIGJ5IE1pY2hhZWwgQ2F0YW56
YXJvLgorCisgICAgICAgIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiBzaG91bGQgb25seSBvd24gdGhl
IGNvb2tpZSBqYXIsIHNpbmNlIGl0J3MgdGhlIG9ubHkgdGhpbmcgaXQgaGFuZGxlcyBmcm9tIHRo
ZSBzZXNzaW9uLgorCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvQ29va2llcy9zb3VwL1dlYkNv
b2tpZU1hbmFnZXJTb3VwLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlcjo6
c2V0Q29va2llUGVyc2lzdGVudFN0b3JhZ2UpOiBVc2UgdGhlIG5ldHdvcmsgc2Vzc2lvbiBpbnN0
ZWFkIG9mIHRoZSBzdG9yYWdlIHNlc3Npb24KKyAgICAgICAgdG8gc2V0IHRoZSBwZXJpc3RlbnQg
Y29va2llIHN0b3JhZ2UuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvQ3VzdG9tUHJvdG9jb2xz
L3NvdXAvTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyU291cC5jcHA6CisgICAgICAgIChXZWJL
aXQ6OkxlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlcjo6cmVnaXN0ZXJTY2hlbWUpOiBJdGVyYXRl
IG5ldHdvcmsgc2Vzc2lvbnMgaW5zdGVhZCBvZiBzdG9yYWdlIHNlc3Npb25zIHRvCisgICAgICAg
IGFjY2VzcyB0aGUgU291cE5ldHdvcmtTZXNzaW9uLgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNz
L05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0
d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OnJlc291cmNlTG9hZFN0YXRpc3RpY3NVcGRhdGVk
KTogVXNlCisgICAgICAgIE5ldHdvcmtQcm9jZXNzOjpmb3JFYWNoTmV0d29ya1Nlc3Npb24oKSB0
byBpdGVyYXRlIG5ldHdvcmsgc2Vzc2lvbnMuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0
d29ya1Byb2Nlc3MuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6bG93TWVt
b3J5SGFuZGxlcik6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6Zm9y
RWFjaE5ldHdvcmtTZXNzaW9uKTogQWRkZWQgdG8gaXRlcmF0ZSBuZXR3b3JrIHNlc3Npb25zIGlu
dGVhZCBvZiBleHBvc2luZyB0aGUgbWFwCisgICAgICAgIHRoYXQgaXMgYWx3YXlzIHVzZWQgdG8g
aXRlcmF0ZSB0aGUgc2Vzc2lvbnMuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpz
d2l0Y2hUb05ld1Rlc3RpbmdTZXNzaW9uKTogVXNlIHRoZSBuZXcgTmV0d29ya1N0b3JhZ2VTZXNz
aW9uIGNvbnN0cnVjdG9yIEFQSS4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmVu
c3VyZVNlc3Npb24pOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmRl
c3Ryb3lTZXNzaW9uKTogQWxsb3cgdG8gZGVzdHJveSB0aGUgZGVmYXVsdCBzZXNzaW9uIGZvciBz
b3VwIGJhc2VkIHBvcnRzLiBUaGlzIGlzCisgICAgICAgIG9ubHkgY2FsbGVkIHJpZ2h0IGJlZm9y
ZSBwcm9jZXNzIGV4aXQgdG8gZW5zdXJlIHdlIGRvbid0IGxlYWsgbmV0d29yayByZXNvdXJjZXMg
bGlrZSB0aGUgY29va2llcyBkYXRhYmFzZS4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nl
c3M6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKTogVXNlIE5ldHdvcmtQcm9jZXNz
Ojpmb3JFYWNoTmV0d29ya1Nlc3Npb24oKSB0bworICAgICAgICBpdGVyYXRlIG5ldHdvcmsgc2Vz
c2lvbnMuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpmZXRjaFdlYnNpdGVEYXRh
KTogRGl0dG8uCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpkZWxldGVXZWJzaXRl
RGF0YUZvck9yaWdpbnMpOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6
OmRlbGV0ZVdlYnNpdGVEYXRhRm9yUmVnaXN0cmFibGVEb21haW5zKTogRGl0dG8uCisgICAgICAg
IChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpyZWdpc3RyYWJsZURvbWFpbnNXaXRoV2Vic2l0ZURh
dGEpOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OnNldENhY2hlTW9k
ZWwpOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmFjdHVhbFByZXBh
cmVUb1N1c3BlbmQpOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OnJl
c3VtZSk6IERpdHRvLgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmg6
CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1N0b3JhZ2VTZXNzaW9uUHJvdmlkZXIu
aDoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrUHJvY2Vzc0NvY29hLm1t
OgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6Y2xlYXJEaXNrQ2FjaGUpOiBEaXR0
by4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9pb3MvTmV0d29ya1Byb2Nlc3NJT1MubW06Cisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpjbGVhckNhY2hlRm9yQWxsT3JpZ2lucyk6
IERpdHRvLgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Byb2Nlc3NNYWlu
U291cC5jcHA6IERlc3Ryb3kgdGhlIGRlZmF1bHQgc2Vzc2lvbiBiZWZvcmUgcHJvY2VzcyBleGlz
dHMuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrUHJvY2Vzc1NvdXAuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6dXNlclByZWZlcnJlZExhbmd1YWdl
c0NoYW5nZWQpOiBJdGVyYXRlIG5ldHdvcmsgc2Vzc2lvbnMgaW5zdGVhZCBvZiBzdG9yYWdlIHNl
c3Npb25zIHRvCisgICAgICAgIGFjY2VzcyB0aGUgU291cE5ldHdvcmtTZXNzaW9uLgorICAgICAg
ICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1DcmVhdGVEZWZhdWx0U3RvcmFnZVNl
c3Npb24gY29uc3QpOiBVc2UgdGhlIG5ldyBOZXR3b3JrU3RvcmFnZVNlc3Npb24gY29uc3RydWN0
b3IgQVBJLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6Y2xlYXJEaXNrQ2FjaGUp
OiBVc2UgTmV0d29ya1Byb2Nlc3M6OmZvckVhY2hOZXR3b3JrU2Vzc2lvbigpIHRvIGl0ZXJhdGUg
bmV0d29yayBzZXNzaW9ucy4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OnNldE5l
dHdvcmtQcm94eVNldHRpbmdzKTogSXRlcmF0ZSBuZXR3b3JrIHNlc3Npb25zIGluc3RlYWQgb2Yg
c3RvcmFnZSBzZXNzaW9ucyB0bworICAgICAgICBhY2Nlc3MgdGhlIFNvdXBOZXR3b3JrU2Vzc2lv
bi4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtTZXNzaW9uU291cC5jcHA6
CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtTZXNzaW9uU291cDo6TmV0d29ya1Nlc3Npb25Tb3Vw
KTogQ3JlYXRlIHRoZSBTb3VwTmV0d29ya1Nlc3Npb24gYW5kIHNldHVwIGNvb2tpZXMuCisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtTZXNzaW9uU291cDo6c291cFNlc3Npb24gY29uc3QpOiBSZXR1
cm4gdGhlIFNvdXBTZXNzaW9uIG9mIFNvdXBOZXR3b3JrU2Vzc2lvbi4KKyAgICAgICAgKFdlYktp
dDo6TmV0d29ya1Nlc3Npb25Tb3VwOjpzZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZSk6IFNldHVw
IGEgbmV3IGNvb2tpZSBqYXIuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3Jr
U2Vzc2lvblNvdXAuaDoKKwogMjAxOS0wNy0yNiAgUm9iIEJ1aXMgIDxyYnVpc0BpZ2FsaWEuY29t
PgogCiAgICAgICAgIE1ha2Ugc3RvcmluZyBjcm9zcy1vcmlnaW4gdG9wLWxldmVsIHByZWZldGNo
ZXMgaW4gSFRUUCBjYWNoZSBvcHRpb25hbApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9Db29raWVzL3NvdXAvV2ViQ29va2llTWFuYWdlclNvdXAuY3BwIGIvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Db29raWVzL3NvdXAvV2ViQ29va2llTWFuYWdlclNvdXAu
Y3BwCmluZGV4IDI4Y2FiMjA4OTRhLi40ZDk3ZGE3YjY5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9Db29raWVzL3NvdXAvV2ViQ29va2llTWFuYWdlclNvdXAuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ29va2llcy9zb3VwL1dlYkNvb2tp
ZU1hbmFnZXJTb3VwLmNwcApAQCAtMjcsMTIgKzI3LDExIEBACiAjaW5jbHVkZSAiV2ViQ29va2ll
TWFuYWdlci5oIgogCiAjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3MuaCIKKyNpbmNsdWRlICJOZXR3
b3JrU2Vzc2lvblNvdXAuaCIKICNpbmNsdWRlICJTb3VwQ29va2llUGVyc2lzdGVudFN0b3JhZ2VU
eXBlLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9OZXR3b3JrU3RvcmFnZVNlc3Npb24uaD4KICNpbmNs
dWRlIDxXZWJDb3JlL1NvdXBOZXR3b3JrU2Vzc2lvbi5oPgogI2luY2x1ZGUgPGxpYnNvdXAvc291
cC5oPgotI2luY2x1ZGUgPHd0Zi9nbGliL0dSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9D
U3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7
CkBAIC03NywyMiArNzYsOCBAQCBIVFRQQ29va2llQWNjZXB0UG9saWN5IFdlYkNvb2tpZU1hbmFn
ZXI6OnBsYXRmb3JtR2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeSgpCiAKIHZvaWQgV2ViQ29va2ll
TWFuYWdlcjo6c2V0Q29va2llUGVyc2lzdGVudFN0b3JhZ2UoUEFMOjpTZXNzaW9uSUQgc2Vzc2lv
bklELCBjb25zdCBTdHJpbmcmIHN0b3JhZ2VQYXRoLCBTb3VwQ29va2llUGVyc2lzdGVudFN0b3Jh
Z2VUeXBlIHN0b3JhZ2VUeXBlKQogewotICAgIEdSZWZQdHI8U291cENvb2tpZUphcj4gamFyOwot
ICAgIHN3aXRjaCAoc3RvcmFnZVR5cGUpIHsKLSAgICBjYXNlIFNvdXBDb29raWVQZXJzaXN0ZW50
U3RvcmFnZVR5cGU6OlRleHQ6Ci0gICAgICAgIGphciA9IGFkb3B0R1JlZihzb3VwX2Nvb2tpZV9q
YXJfdGV4dF9uZXcoc3RvcmFnZVBhdGgudXRmOCgpLmRhdGEoKSwgRkFMU0UpKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBTb3VwQ29va2llUGVyc2lzdGVudFN0b3JhZ2VUeXBlOjpTUUxpdGU6
Ci0gICAgICAgIGphciA9IGFkb3B0R1JlZihzb3VwX2Nvb2tpZV9qYXJfZGJfbmV3KHN0b3JhZ2VQ
YXRoLnV0ZjgoKS5kYXRhKCksIEZBTFNFKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6
Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KLQotICAgIGlmIChhdXRvKiBz
dG9yYWdlU2Vzc2lvbiA9IG1fcHJvY2Vzcy5zdG9yYWdlU2Vzc2lvbihzZXNzaW9uSUQpKSB7Ci0g
ICAgICAgIHNvdXBfY29va2llX2phcl9zZXRfYWNjZXB0X3BvbGljeShqYXIuZ2V0KCksIHNvdXBf
Y29va2llX2phcl9nZXRfYWNjZXB0X3BvbGljeShzdG9yYWdlU2Vzc2lvbi0+Y29va2llU3RvcmFn
ZSgpKSk7Ci0gICAgICAgIHN0b3JhZ2VTZXNzaW9uLT5zZXRDb29raWVTdG9yYWdlKGphci5nZXQo
KSk7Ci0gICAgfQorICAgIGlmIChhdXRvKiBuZXR3b3JrU2Vzc2lvbiA9IG1fcHJvY2Vzcy5uZXR3
b3JrU2Vzc2lvbihzZXNzaW9uSUQpKQorICAgICAgICBzdGF0aWNfY2FzdDxOZXR3b3JrU2Vzc2lv
blNvdXAmPigqbmV0d29ya1Nlc3Npb24pLnNldENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlKHN0b3Jh
Z2VQYXRoLCBzdG9yYWdlVHlwZSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DdXN0b21Qcm90b2NvbHMvc291cC9M
ZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJTb3VwLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvQ3VzdG9tUHJvdG9jb2xzL3NvdXAvTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2Vy
U291cC5jcHAKaW5kZXggNTExZGQwNGQ2NjcuLjJjNGQyZmY5NDgwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0N1c3RvbVByb3RvY29scy9zb3VwL0xlZ2FjeUN1c3Rv
bVByb3RvY29sTWFuYWdlclNvdXAuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvQ3VzdG9tUHJvdG9jb2xzL3NvdXAvTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyU291cC5j
cHAKQEAgLTIzLDggKzIzLDggQEAKICNpbmNsdWRlICJEYXRhUmVmZXJlbmNlLmgiCiAjaW5jbHVk
ZSAiTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyTWVzc2FnZXMuaCIKICNpbmNsdWRlICJOZXR3
b3JrUHJvY2Vzcy5oIgorI2luY2x1ZGUgIk5ldHdvcmtTZXNzaW9uU291cC5oIgogI2luY2x1ZGUg
IldlYktpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW0uaCIKLSNpbmNsdWRlIDxXZWJDb3JlL05ldHdv
cmtTdG9yYWdlU2Vzc2lvbi5oPgogI2luY2x1ZGUgPFdlYkNvcmUvTm90SW1wbGVtZW50ZWQuaD4K
ICNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlRXJyb3IuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Jl
c291cmNlUmVxdWVzdC5oPgpAQCAtMTAyLDggKzEwMiw4IEBAIHZvaWQgTGVnYWN5Q3VzdG9tUHJv
dG9jb2xNYW5hZ2VyOjpyZWdpc3RlclNjaGVtZShjb25zdCBTdHJpbmcmIHNjaGVtZSkKICAgICBh
dXRvKiBnZW5lcmljUmVxdWVzdENsYXNzID0gc3RhdGljX2Nhc3Q8U291cFJlcXVlc3RDbGFzcyo+
KGdfdHlwZV9jbGFzc19wZWVrKFdFQktJVF9UWVBFX1NPVVBfUkVRVUVTVF9HRU5FUklDKSk7CiAg
ICAgQVNTRVJUKGdlbmVyaWNSZXF1ZXN0Q2xhc3MpOwogICAgIGdlbmVyaWNSZXF1ZXN0Q2xhc3Mt
PnNjaGVtZXMgPSBjb25zdF9jYXN0PGNvbnN0IGNoYXIqKj4ocmVpbnRlcnByZXRfY2FzdDxjaGFy
Kio+KG1fcmVnaXN0ZXJlZFNjaGVtZXMtPnBkYXRhKSk7Ci0gICAgbGFzdENyZWF0ZWROZXR3b3Jr
UHJvY2VzcygpLT5mb3JFYWNoTmV0d29ya1N0b3JhZ2VTZXNzaW9uKFtdKGNvbnN0IGF1dG8mIHNl
c3Npb24pIHsKLSAgICAgICAgc2Vzc2lvbi5zb3VwTmV0d29ya1Nlc3Npb24oKS5zZXR1cEN1c3Rv
bVByb3RvY29scygpOworICAgIGxhc3RDcmVhdGVkTmV0d29ya1Byb2Nlc3MoKS0+Zm9yRWFjaE5l
dHdvcmtTZXNzaW9uKFtdKGNvbnN0IGF1dG8mIHNlc3Npb24pIHsKKyAgICAgICAgc3RhdGljX2Nh
c3Q8Y29uc3QgTmV0d29ya1Nlc3Npb25Tb3VwJj4oc2Vzc2lvbikuc291cE5ldHdvcmtTZXNzaW9u
KCkuc2V0dXBDdXN0b21Qcm90b2NvbHMoKTsKICAgICB9KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5j
cHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzLmNwcAppbmRleCA5MzNjM2FlYjJlMi4uNDk1ZGY3YjBmNGUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3Mu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25U
b1dlYlByb2Nlc3MuY3BwCkBAIC02OTYsMTMgKzY5NiwxMyBAQCB2b2lkIE5ldHdvcmtDb25uZWN0
aW9uVG9XZWJQcm9jZXNzOjpsb2dTdWJyZXNvdXJjZVJlZGlyZWN0KFBBTDo6U2Vzc2lvbklEIHNl
c3NpbwogCiB2b2lkIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpyZXNvdXJjZUxvYWRT
dGF0aXN0aWNzVXBkYXRlZChWZWN0b3I8V2ViQ29yZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljcz4m
JiBzdGF0aXN0aWNzKQogewotICAgIGZvciAoYXV0byYgbmV0d29ya1Nlc3Npb24gOiBuZXR3b3Jr
UHJvY2VzcygpLm5ldHdvcmtTZXNzaW9ucygpLnZhbHVlcygpKSB7Ci0gICAgICAgIGlmIChuZXR3
b3JrU2Vzc2lvbi0+c2Vzc2lvbklEKCkuaXNFcGhlbWVyYWwoKSkKLSAgICAgICAgICAgIGNvbnRp
bnVlOworICAgIG5ldHdvcmtQcm9jZXNzKCkuZm9yRWFjaE5ldHdvcmtTZXNzaW9uKFtzdGF0aXN0
aWNzID0gV1RGTW92ZShzdGF0aXN0aWNzKV0oTmV0d29ya1Nlc3Npb24mIG5ldHdvcmtTZXNzaW9u
KSBtdXRhYmxlIHsKKyAgICAgICAgaWYgKG5ldHdvcmtTZXNzaW9uLnNlc3Npb25JRCgpLmlzRXBo
ZW1lcmFsKCkpCisgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgaWYgKGF1dG8qIHJlc291
cmNlTG9hZFN0YXRpc3RpY3MgPSBuZXR3b3JrU2Vzc2lvbi0+cmVzb3VyY2VMb2FkU3RhdGlzdGlj
cygpKQorICAgICAgICBpZiAoYXV0byogcmVzb3VyY2VMb2FkU3RhdGlzdGljcyA9IG5ldHdvcmtT
ZXNzaW9uLnJlc291cmNlTG9hZFN0YXRpc3RpY3MoKSkKICAgICAgICAgICAgIHJlc291cmNlTG9h
ZFN0YXRpc3RpY3MtPnJlc291cmNlTG9hZFN0YXRpc3RpY3NVcGRhdGVkKFdURk1vdmUoc3RhdGlz
dGljcykpOwotICAgIH0KKyAgICB9KTsKIH0KIAogdm9pZCBOZXR3b3JrQ29ubmVjdGlvblRvV2Vi
UHJvY2Vzczo6aGFzU3RvcmFnZUFjY2VzcyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0
IFJlZ2lzdHJhYmxlRG9tYWluJiBzdWJGcmFtZURvbWFpbiwgY29uc3QgUmVnaXN0cmFibGVEb21h
aW4mIHRvcEZyYW1lRG9tYWluLCB1aW50NjRfdCBmcmFtZUlELCBQYWdlSWRlbnRpZmllciBwYWdl
SUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNw
cCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCmluZGV4
IGZmMGY4MzhiNGE5Li5hYWIzNDRjMTY4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKQEAgLTEwMCw2ICsxMDAsNyBAQAogI2VuZGlmCiAK
ICNpZiBVU0UoU09VUCkKKyNpbmNsdWRlICJOZXR3b3JrU2Vzc2lvblNvdXAuaCIKICNpbmNsdWRl
IDxXZWJDb3JlL0ROU1Jlc29sdmVRdWV1ZVNvdXAuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1NvdXBO
ZXR3b3JrU2Vzc2lvbi5oPgogI2VuZGlmCkBAIC0xNTEsOCArMTUyLDggQEAgTmV0d29ya1Byb2Nl
c3M6Ok5ldHdvcmtQcm9jZXNzKEF1eGlsaWFyeVByb2Nlc3NJbml0aWFsaXphdGlvblBhcmFtZXRl
cnMmJiBwYXJhbWUKICNlbmRpZgogCiAjaWYgVVNFKFNPVVApCi0gICAgRE5TUmVzb2x2ZVF1ZXVl
U291cDo6c2V0R2xvYmFsRGVmYXVsdE5ldHdvcmtTdG9yYWdlU2Vzc2lvbkFjY2Vzc29yKFt0aGlz
XSgpIC0+IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgewotICAgICAgICByZXR1cm4gZGVmYXVsdFN0
b3JhZ2VTZXNzaW9uKCk7CisgICAgRE5TUmVzb2x2ZVF1ZXVlU291cDo6c2V0R2xvYmFsRGVmYXVs
dFNvdXBTZXNzaW9uQWNjZXNzb3IoW3RoaXNdKCkgLT4gU291cFNlc3Npb24qIHsKKyAgICAgICAg
cmV0dXJuIHN0YXRpY19jYXN0PE5ldHdvcmtTZXNzaW9uU291cCY+KCpuZXR3b3JrU2Vzc2lvbihQ
QUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKSkuc291cFNlc3Npb24oKTsKICAgICB9
KTsKICNlbmRpZgogCkBAIC0yNzQsOCArMjc1LDkgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6bG93
TWVtb3J5SGFuZGxlcihDcml0aWNhbCBjcml0aWNhbCkKIAogICAgIFdURjo6cmVsZWFzZUZhc3RN
YWxsb2NGcmVlTWVtb3J5KCk7CiAKLSAgICBmb3IgKGF1dG8mIG5ldHdvcmtTZXNzaW9uIDogbV9u
ZXR3b3JrU2Vzc2lvbnMudmFsdWVzKCkpCi0gICAgICAgIG5ldHdvcmtTZXNzaW9uLT5jbGVhclBy
ZWZldGNoQ2FjaGUoKTsKKyAgICBmb3JFYWNoTmV0d29ya1Nlc3Npb24oW10oTmV0d29ya1Nlc3Np
b24mIG5ldHdvcmtTZXNzaW9uKSB7CisgICAgICAgIG5ldHdvcmtTZXNzaW9uLmNsZWFyUHJlZmV0
Y2hDYWNoZSgpOworICAgIH0pOwogfQogCiB2b2lkIE5ldHdvcmtQcm9jZXNzOjppbml0aWFsaXpl
TmV0d29ya1Byb2Nlc3MoTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmJiBwYXJhbWV0
ZXJzKQpAQCAtNDg2LDYgKzQ4OCwxMiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjppbml0aWFsaXpl
U3RvcmFnZVF1b3RhKGNvbnN0IFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzJiBwYQogICAgIG1h
bmFnZXJzLnNldERlZmF1bHRRdW90YXMocGFyYW1ldGVycy5wZXJPcmlnaW5TdG9yYWdlUXVvdGEs
IHBhcmFtZXRlcnMucGVyVGhpcmRQYXJ0eU9yaWdpblN0b3JhZ2VRdW90YSk7CiB9CiAKK3ZvaWQg
TmV0d29ya1Byb2Nlc3M6OmZvckVhY2hOZXR3b3JrU2Vzc2lvbihjb25zdCBGdW5jdGlvbjx2b2lk
KE5ldHdvcmtTZXNzaW9uJik+JiBmdW5jdG9yKQoreworICAgIGZvciAoYXV0byYgc2Vzc2lvbiA6
IG1fbmV0d29ya1Nlc3Npb25zLnZhbHVlcygpKQorICAgICAgICBmdW5jdG9yKCpzZXNzaW9uKTsK
K30KKwogdm9pZCBOZXR3b3JrUHJvY2Vzczo6c3dpdGNoVG9OZXdUZXN0aW5nU2Vzc2lvbigpCiB7
CiAjaWYgUExBVEZPUk0oQ09DT0EpCkBAIC01MDIsOSArNTEwLDcgQEAgdm9pZCBOZXR3b3JrUHJv
Y2Vzczo6c3dpdGNoVG9OZXdUZXN0aW5nU2Vzc2lvbigpCiAgICAgfQogCiAgICAgbV9kZWZhdWx0
TmV0d29ya1N0b3JhZ2VTZXNzaW9uID0gc3RkOjptYWtlX3VuaXF1ZTxXZWJDb3JlOjpOZXR3b3Jr
U3RvcmFnZVNlc3Npb24+KFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCksIFdURk1v
dmUoc2Vzc2lvbiksIFdURk1vdmUoY29va2llU3RvcmFnZSkpOwotI2VsaWYgVVNFKFNPVVApCi0g
ICAgbV9kZWZhdWx0TmV0d29ya1N0b3JhZ2VTZXNzaW9uID0gc3RkOjptYWtlX3VuaXF1ZTxXZWJD
b3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24+KFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lv
bklEKCksIHN0ZDo6bWFrZV91bmlxdWU8V2ViQ29yZTo6U291cE5ldHdvcmtTZXNzaW9uPigpKTsK
LSNlbGlmIFVTRShDVVJMKQorI2VsaWYgVVNFKENVUkwpIHx8IFVTRShTT1VQKQogICAgIG1fZGVm
YXVsdE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiA9IHN0ZDo6bWFrZV91bmlxdWU8V2ViQ29yZTo6TmV0
d29ya1N0b3JhZ2VTZXNzaW9uPihQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKTsK
ICNlbmRpZgogfQpAQCAtNTM2LDkgKzU0Miw3IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmVuc3Vy
ZVNlc3Npb24oY29uc3QgUEFMOjpTZXNzaW9uSUQmIHNlc3Npb25JRCwgY29uc3QgU3RyaW5nCiAg
ICAgfQogCiAgICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IHN0ZDo6bWFrZV91bmlxdWU8
TmV0d29ya1N0b3JhZ2VTZXNzaW9uPihzZXNzaW9uSUQsIFdURk1vdmUoc3RvcmFnZVNlc3Npb24p
LCBXVEZNb3ZlKGNvb2tpZVN0b3JhZ2UpKTsKLSNlbGlmIFVTRShTT1VQKQotICAgIGFkZFJlc3Vs
dC5pdGVyYXRvci0+dmFsdWUgPSBzdGQ6Om1ha2VfdW5pcXVlPE5ldHdvcmtTdG9yYWdlU2Vzc2lv
bj4oc2Vzc2lvbklELCBzdGQ6Om1ha2VfdW5pcXVlPFNvdXBOZXR3b3JrU2Vzc2lvbj4oc2Vzc2lv
bklEKSk7Ci0jZWxpZiBVU0UoQ1VSTCkKKyNlbGlmIFVTRShDVVJMKSB8fCBVU0UoU09VUCkKICAg
ICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gc3RkOjptYWtlX3VuaXF1ZTxOZXR3b3JrU3Rv
cmFnZVNlc3Npb24+KHNlc3Npb25JRCk7CiAjZW5kaWYKIH0KQEAgLTU5NCw3ICs1OTgsMTEgQEAg
dm9pZCBOZXR3b3JrUHJvY2Vzczo6ZGVzdHJveVNlc3Npb24oY29uc3QgUEFMOjpTZXNzaW9uSUQm
IHNlc3Npb25JRCkKICAgICBpZiAoIXNlc3Npb25JRC5pc1ZhbGlkKCkpCiAgICAgICAgIHJldHVy
bjsKIAorI2lmICFVU0UoU09VUCkKKyAgICAvLyBTb3VwIGJhc2VkIHBvcnRzIGRlc3Ryb3kgdGhl
IGRlZmF1bHQgc2Vzc2lvbiByaWdodCBiZWZvcmUgdGhlIHByb2Nlc3MgZXhpdHMgdG8gYXZvaWQg
bGVha2luZworICAgIC8vIG5ldHdvcmsgcmVzb3VyY2VzIGxpa2UgdGhlIGNvb2tpZXMgZGF0YWJh
c2UuCiAgICAgQVNTRVJUKHNlc3Npb25JRCAhPSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Np
b25JRCgpKTsKKyNlbmRpZgogCiAgICAgaWYgKGF1dG8gc2Vzc2lvbiA9IG1fbmV0d29ya1Nlc3Np
b25zLnRha2Uoc2Vzc2lvbklEKSkKICAgICAgICAgc2Vzc2lvbi0+aW52YWxpZGF0ZUFuZENhbmNl
bCgpOwpAQCAtMTE0Niw4ICsxMTU0LDkgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6c2V0U2hvdWxk
Q2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwoUEFMOjpTZXMKIAogdm9p
ZCBOZXR3b3JrUHJvY2Vzczo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoYm9vbCBl
bmFibGVkKQogewotICAgIGZvciAoYXV0byYgbmV0d29ya1Nlc3Npb24gOiBtX25ldHdvcmtTZXNz
aW9ucy52YWx1ZXMoKSkKLSAgICAgICAgbmV0d29ya1Nlc3Npb24tPnNldFJlc291cmNlTG9hZFN0
YXRpc3RpY3NFbmFibGVkKGVuYWJsZWQpOworICAgIGZvckVhY2hOZXR3b3JrU2Vzc2lvbihbZW5h
YmxlZF0oTmV0d29ya1Nlc3Npb24mIG5ldHdvcmtTZXNzaW9uKSB7CisgICAgICAgIG5ldHdvcmtT
ZXNzaW9uLnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKGVuYWJsZWQpOworICAgIH0p
OwogfQogCiB2b2lkIE5ldHdvcmtQcm9jZXNzOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVi
dWdNb2RlKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgYm9vbCBkZWJ1Z01vZGUsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTEzNTksMTEgKzEzNjgs
MTEgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6ZmV0Y2hXZWJzaXRlRGF0YShQQUw6OlNlc3Npb25J
RCBzZXNzaW9uSUQsIE9wdGlvblNldDxXZWJzaXQKICAgICB9CiAjZW5kaWYKICAgICBpZiAod2Vi
c2l0ZURhdGFUeXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6OkRpc2tDYWNoZSkpIHsKLSAg
ICAgICAgZm9yIChhdXRvJiBzZXNzaW9uIDogbmV0d29ya1Nlc3Npb25zKCkudmFsdWVzKCkpIHsK
LSAgICAgICAgICAgIGZldGNoRGlza0NhY2hlRW50cmllcyhzZXNzaW9uLT5jYWNoZSgpLCBzZXNz
aW9uSUQsIGZldGNoT3B0aW9ucywgW2NhbGxiYWNrQWdncmVnYXRvciA9IFdURk1vdmUoY2FsbGJh
Y2tBZ2dyZWdhdG9yKV0oYXV0byBlbnRyaWVzKSBtdXRhYmxlIHsKKyAgICAgICAgZm9yRWFjaE5l
dHdvcmtTZXNzaW9uKFtzZXNzaW9uSUQsIGZldGNoT3B0aW9ucywgY2FsbGJhY2tBZ2dyZWdhdG9y
ID0gV1RGTW92ZShjYWxsYmFja0FnZ3JlZ2F0b3IpXShOZXR3b3JrU2Vzc2lvbiYgc2Vzc2lvbikg
bXV0YWJsZSB7CisgICAgICAgICAgICBmZXRjaERpc2tDYWNoZUVudHJpZXMoc2Vzc2lvbi5jYWNo
ZSgpLCBzZXNzaW9uSUQsIGZldGNoT3B0aW9ucywgW2NhbGxiYWNrQWdncmVnYXRvciA9IFdURk1v
dmUoY2FsbGJhY2tBZ2dyZWdhdG9yKV0oYXV0byBlbnRyaWVzKSBtdXRhYmxlIHsKICAgICAgICAg
ICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3ItPm1fd2Vic2l0ZURhdGEuZW50cmllcy5hcHBlbmRW
ZWN0b3IoZW50cmllcyk7CiAgICAgICAgICAgICB9KTsKLSAgICAgICAgfQorICAgICAgICB9KTsK
ICAgICB9CiB9CiAKQEAgLTE1MTksOCArMTUyOCw5IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmRl
bGV0ZVdlYnNpdGVEYXRhRm9yT3JpZ2lucyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIE9wdGlv
CiAjZW5kaWYKIAogICAgIGlmICh3ZWJzaXRlRGF0YVR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRh
VHlwZTo6RGlza0NhY2hlKSAmJiAhc2Vzc2lvbklELmlzRXBoZW1lcmFsKCkpIHsKLSAgICAgICAg
Zm9yIChhdXRvJiBzZXNzaW9uIDogbmV0d29ya1Nlc3Npb25zKCkudmFsdWVzKCkpCi0gICAgICAg
ICAgICBjbGVhckRpc2tDYWNoZUVudHJpZXMoc2Vzc2lvbi0+Y2FjaGUoKSwgb3JpZ2luRGF0YXMs
IFtjbGVhclRhc2tzSGFuZGxlciA9IFdURk1vdmUoY2xlYXJUYXNrc0hhbmRsZXIpXSB7IH0pOwor
ICAgICAgICBmb3JFYWNoTmV0d29ya1Nlc3Npb24oW29yaWdpbkRhdGFzLCBjbGVhclRhc2tzSGFu
ZGxlciA9IFdURk1vdmUoY2xlYXJUYXNrc0hhbmRsZXIpXShOZXR3b3JrU2Vzc2lvbiYgc2Vzc2lv
bikgbXV0YWJsZSB7CisgICAgICAgICAgICBjbGVhckRpc2tDYWNoZUVudHJpZXMoc2Vzc2lvbi5j
YWNoZSgpLCBvcmlnaW5EYXRhcywgW2NsZWFyVGFza3NIYW5kbGVyID0gV1RGTW92ZShjbGVhclRh
c2tzSGFuZGxlcildIHsgfSk7CisgICAgICAgIH0pOwogICAgIH0KIAogICAgIGlmICh3ZWJzaXRl
RGF0YVR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6Q3JlZGVudGlhbHMpKSB7CkBAIC0x
NzU0LDEwICsxNzY0LDggQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6ZGVsZXRlV2Vic2l0ZURhdGFG
b3JSZWdpc3RyYWJsZURvbWFpbnMoUEFMOjpTZXNzaW9uSUQgc2Vzc2kKICNlbmRpZgogCiAgICAg
aWYgKHdlYnNpdGVEYXRhVHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpEaXNrQ2FjaGUp
KSB7Ci0gICAgICAgIGZvciAoYXV0byYgc2Vzc2lvbiA6IG5ldHdvcmtTZXNzaW9ucygpLnZhbHVl
cygpKSB7Ci0gICAgICAgICAgICBmZXRjaERpc2tDYWNoZUVudHJpZXMoc2Vzc2lvbi0+Y2FjaGUo
KSwgc2Vzc2lvbklELCBmZXRjaE9wdGlvbnMsIFtkb21haW5zVG9EZWxldGVBbGxCdXRDb29raWVz
Rm9yLCBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBjYWxsYmFja0FnZ3JlZ2F0b3IuY29weVJlZigpLCBz
ZXNzaW9uID0gbWFrZVdlYWtQdHIoc2Vzc2lvbi5nZXQoKSldKGF1dG8gZW50cmllcykgbXV0YWJs
ZSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFzZXNzaW9uKQotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIGZvckVhY2hOZXR3b3JrU2Vzc2lvbihbc2Vzc2lvbklELCBmZXRjaE9w
dGlvbnMsICZkb21haW5zVG9EZWxldGVBbGxCdXRDb29raWVzRm9yLCAmY2FsbGJhY2tBZ2dyZWdh
dG9yXShOZXR3b3JrU2Vzc2lvbiYgc2Vzc2lvbikgeworICAgICAgICAgICAgZmV0Y2hEaXNrQ2Fj
aGVFbnRyaWVzKHNlc3Npb24uY2FjaGUoKSwgc2Vzc2lvbklELCBmZXRjaE9wdGlvbnMsIFtkb21h
aW5zVG9EZWxldGVBbGxCdXRDb29raWVzRm9yLCBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBjYWxsYmFj
a0FnZ3JlZ2F0b3IuY29weVJlZigpLCBzZXNzaW9uID0gbWFrZVJlZihzZXNzaW9uKV0oYXV0byBl
bnRyaWVzKSBtdXRhYmxlIHsKIAogICAgICAgICAgICAgICAgIFZlY3RvcjxTZWN1cml0eU9yaWdp
bkRhdGE+IGVudHJpZXNUb0RlbGV0ZTsKICAgICAgICAgICAgICAgICBmb3IgKGF1dG8mIGVudHJ5
IDogZW50cmllcykgewpAQCAtMTc2OCw3ICsxNzc2LDcgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6
ZGVsZXRlV2Vic2l0ZURhdGFGb3JSZWdpc3RyYWJsZURvbWFpbnMoUEFMOjpTZXNzaW9uSUQgc2Vz
c2kKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgY2xlYXJEaXNrQ2FjaGVFbnRy
aWVzKHNlc3Npb24tPmNhY2hlKCksIGVudHJpZXNUb0RlbGV0ZSwgW2NhbGxiYWNrQWdncmVnYXRv
ciA9IGNhbGxiYWNrQWdncmVnYXRvci5jb3B5UmVmKCldIHsgfSk7CiAgICAgICAgICAgICB9KTsK
LSAgICAgICAgfQorICAgICAgICB9KTsKICAgICB9CiAKICAgICBhdXRvIGRhdGFUeXBlc0ZvclVJ
UHJvY2VzcyA9IFdlYnNpdGVEYXRhOjpmaWx0ZXIod2Vic2l0ZURhdGFUeXBlcywgV2Vic2l0ZURh
dGFQcm9jZXNzVHlwZTo6VUkpOwpAQCAtMTg5MCwxMSArMTg5OCwxMSBAQCB2b2lkIE5ldHdvcmtQ
cm9jZXNzOjpyZWdpc3RyYWJsZURvbWFpbnNXaXRoV2Vic2l0ZURhdGEoUEFMOjpTZXNzaW9uSUQg
c2Vzc2lvbklELAogI2VuZGlmCiAgICAgCiAgICAgaWYgKHdlYnNpdGVEYXRhVHlwZXMuY29udGFp
bnMoV2Vic2l0ZURhdGFUeXBlOjpEaXNrQ2FjaGUpKSB7Ci0gICAgICAgIGZvciAoYXV0byYgc2Vz
c2lvbiA6IG5ldHdvcmtTZXNzaW9ucygpLnZhbHVlcygpKSB7Ci0gICAgICAgICAgICBmZXRjaERp
c2tDYWNoZUVudHJpZXMoc2Vzc2lvbi0+Y2FjaGUoKSwgc2Vzc2lvbklELCBmZXRjaE9wdGlvbnMs
IFtjYWxsYmFja0FnZ3JlZ2F0b3IgPSBjYWxsYmFja0FnZ3JlZ2F0b3IuY29weVJlZigpXShhdXRv
IGVudHJpZXMpIG11dGFibGUgeworICAgICAgICBmb3JFYWNoTmV0d29ya1Nlc3Npb24oW3Nlc3Np
b25JRCwgZmV0Y2hPcHRpb25zLCAmY2FsbGJhY2tBZ2dyZWdhdG9yXShOZXR3b3JrU2Vzc2lvbiYg
c2Vzc2lvbikgeworICAgICAgICAgICAgZmV0Y2hEaXNrQ2FjaGVFbnRyaWVzKHNlc3Npb24uY2Fj
aGUoKSwgc2Vzc2lvbklELCBmZXRjaE9wdGlvbnMsIFtjYWxsYmFja0FnZ3JlZ2F0b3IgPSBjYWxs
YmFja0FnZ3JlZ2F0b3IuY29weVJlZigpXShhdXRvIGVudHJpZXMpIG11dGFibGUgewogICAgICAg
ICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+bV93ZWJzaXRlRGF0YS5lbnRyaWVzLmFwcGVu
ZFZlY3RvcihlbnRyaWVzKTsKICAgICAgICAgICAgIH0pOwotICAgICAgICB9CisgICAgICAgIH0p
OwogICAgIH0KIH0KICNlbmRpZiAvLyBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQpA
QCAtMTk4NiwxMSArMTk5NCwxMSBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpzZXRDYWNoZU1vZGVs
KENhY2hlTW9kZWwgY2FjaGVNb2RlbCkKICAgICAgICAgZGlza0ZyZWVTaXplIC89IEtCICogMTAw
MDsKICAgICAgICAgY2FsY3VsYXRlVVJMQ2FjaGVTaXplcyhjYWNoZU1vZGVsLCBkaXNrRnJlZVNp
emUsIHVybENhY2hlTWVtb3J5Q2FwYWNpdHksIHVybENhY2hlRGlza0NhcGFjaXR5KTsKICAgICB9
Ci0gICAgCi0gICAgZm9yIChhdXRvJiBzZXNzaW9uIDogbmV0d29ya1Nlc3Npb25zKCkudmFsdWVz
KCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIGNhY2hlID0gc2Vzc2lvbi0+Y2FjaGUoKSkKKworICAg
IGZvckVhY2hOZXR3b3JrU2Vzc2lvbihbdXJsQ2FjaGVEaXNrQ2FwYWNpdHldKE5ldHdvcmtTZXNz
aW9uJiBzZXNzaW9uKSB7CisgICAgICAgIGlmIChhdXRvKiBjYWNoZSA9IHNlc3Npb24uY2FjaGUo
KSkKICAgICAgICAgICAgIGNhY2hlLT5zZXRDYXBhY2l0eSh1cmxDYWNoZURpc2tDYXBhY2l0eSk7
Ci0gICAgfQorICAgIH0pOwogfQogCiB2b2lkIE5ldHdvcmtQcm9jZXNzOjpzZXRDYW5IYW5kbGVI
VFRQU1NlcnZlclRydXN0RXZhbHVhdGlvbihib29sIHZhbHVlKQpAQCAtMjA4NCw4ICsyMDkyLDkg
QEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6YWN0dWFsUHJlcGFyZVRvU3VzcGVuZChTaG91bGRBY2tu
b3dsZWRnZVdoZW5SZWFkeVRvU3VzcGVuZAogICAgIH0KICNlbmRpZgogCi0gICAgZm9yIChhdXRv
JiBzZXNzaW9uIDogbV9uZXR3b3JrU2Vzc2lvbnMpCi0gICAgICAgIHNlc3Npb24udmFsdWUtPnN0
b3JhZ2VNYW5hZ2VyKCkuc3VzcGVuZChbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOworICAgIGZv
ckVhY2hOZXR3b3JrU2Vzc2lvbihbJmNhbGxiYWNrQWdncmVnYXRvcl0oTmV0d29ya1Nlc3Npb24m
IHNlc3Npb24pIHsKKyAgICAgICAgc2Vzc2lvbi5zdG9yYWdlTWFuYWdlcigpLnN1c3BlbmQoW2Nh
bGxiYWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICB9KTsKIH0KIAogdm9pZCBOZXR3b3JrUHJvY2Vz
czo6cHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseSgpCkBAIC0yMTU1LDggKzIxNjQsOSBAQCB2
b2lkIE5ldHdvcmtQcm9jZXNzOjpyZXN1bWUoKQogICAgICAgICBzZXJ2ZXItPnJlc3VtZSgpOwog
I2VuZGlmCiAKLSAgICBmb3IgKGF1dG8mIHNlc3Npb24gOiBtX25ldHdvcmtTZXNzaW9ucykKLSAg
ICAgICAgc2Vzc2lvbi52YWx1ZS0+c3RvcmFnZU1hbmFnZXIoKS5yZXN1bWUoKTsKKyAgICBmb3JF
YWNoTmV0d29ya1Nlc3Npb24oW10oTmV0d29ya1Nlc3Npb24mIHNlc3Npb24pIHsKKyAgICAgICAg
c2Vzc2lvbi5zdG9yYWdlTWFuYWdlcigpLnJlc3VtZSgpOworICAgIH0pOwogfQogCiB2b2lkIE5l
dHdvcmtQcm9jZXNzOjpwcmVmZXRjaEROUyhjb25zdCBTdHJpbmcmIGhvc3RuYW1lKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5oIGIvU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5oCmluZGV4IDRhMWMzZjQ5
YzdhLi4yODY2ODU3MGQzNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9OZXR3b3JrUHJvY2Vzcy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0
d29ya1Byb2Nlc3MuaApAQCAtMTY2LDggKzE2Niw3IEBAIHB1YmxpYzoKICAgICBOZXR3b3JrU2Vz
c2lvbiogbmV0d29ya1Nlc3Npb25CeUNvbm5lY3Rpb24oSVBDOjpDb25uZWN0aW9uJikgY29uc3Q7
CiAgICAgdm9pZCBkZXN0cm95U2Vzc2lvbihjb25zdCBQQUw6OlNlc3Npb25JRCYpOwogCi0gICAg
Ly8gTmVlZGVkIGZvciB0ZXN0IGluZnJhc3RydWN0dXJlCi0gICAgSGFzaE1hcDxQQUw6OlNlc3Np
b25JRCwgc3RkOjp1bmlxdWVfcHRyPE5ldHdvcmtTZXNzaW9uPj4mIG5ldHdvcmtTZXNzaW9ucygp
IHsgcmV0dXJuIG1fbmV0d29ya1Nlc3Npb25zOyB9CisgICAgdm9pZCBmb3JFYWNoTmV0d29ya1Nl
c3Npb24oY29uc3QgRnVuY3Rpb248dm9pZChOZXR3b3JrU2Vzc2lvbiYpPiYpOwogCiAgICAgdm9p
ZCBmb3JFYWNoTmV0d29ya1N0b3JhZ2VTZXNzaW9uKGNvbnN0IEZ1bmN0aW9uPHZvaWQoV2ViQ29y
ZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uJik+Jik7CiAgICAgV2ViQ29yZTo6TmV0d29ya1N0b3Jh
Z2VTZXNzaW9uKiBzdG9yYWdlU2Vzc2lvbihjb25zdCBQQUw6OlNlc3Npb25JRCYpIGNvbnN0Owpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrU3RvcmFnZVNl
c3Npb25Qcm92aWRlci5oIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrU3Rv
cmFnZVNlc3Npb25Qcm92aWRlci5oCmluZGV4IDhhYTkyMDQ0YjIwLi45NWJiMWQ0ZDM4YiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrU3RvcmFnZVNlc3Np
b25Qcm92aWRlci5oCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1N0
b3JhZ2VTZXNzaW9uUHJvdmlkZXIuaApAQCAtMzEsNiArMzEsMTAgQEAKICNpbmNsdWRlIDxwYWwv
U2Vzc2lvbklELmg+CiAjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KIAorI2lmIFVTRShTT1VQKQor
I2luY2x1ZGUgIk5ldHdvcmtTZXNzaW9uU291cC5oIgorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJL
aXQgewogCiBjbGFzcyBOZXR3b3JrU3RvcmFnZVNlc3Npb25Qcm92aWRlciBmaW5hbCA6IHB1Ymxp
YyBXZWJDb3JlOjpTdG9yYWdlU2Vzc2lvblByb3ZpZGVyIHsKQEAgLTQ5LDYgKzUzLDE5IEBAIHBy
aXZhdGU6CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAorI2lmIFVTRShTT1VQKQor
ICAgIFNvdXBTZXNzaW9uKiBzb3VwU2Vzc2lvbigpIGNvbnN0IGZpbmFsCisgICAgeworICAgICAg
ICBpZiAoIW1fbmV0d29ya1Byb2Nlc3MpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKwor
ICAgICAgICBpZiAoYXV0byogc2Vzc2lvbiA9IG1fbmV0d29ya1Byb2Nlc3MtPm5ldHdvcmtTZXNz
aW9uKG1fc2Vzc2lvbklEKSkKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxOZXR3b3Jr
U2Vzc2lvblNvdXAmPigqc2Vzc2lvbikuc291cFNlc3Npb24oKTsKKworICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICB9CisjZW5kaWYKKwogICAgIFdlYWtQdHI8TmV0d29ya1Byb2Nlc3M+IG1f
bmV0d29ya1Byb2Nlc3M7CiAgICAgUEFMOjpTZXNzaW9uSUQgbV9zZXNzaW9uSUQ7CiB9OwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrUHJvY2Vz
c0NvY29hLm1tIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrUHJv
Y2Vzc0NvY29hLm1tCmluZGV4IDA3Yjk2MzNiZDQ4Li4wNzdmMTZmYTY1MCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrUHJvY2Vzc0NvY29hLm1t
CisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya1Byb2Nlc3ND
b2NvYS5tbQpAQCAtMTk5LDEwICsxOTksMTAgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6Y2xlYXJE
aXNrQ2FjaGUoV2FsbFRpbWUgbW9kaWZpZWRTaW5jZSwgQ29tcGxldGlvbkhhbmRsZXI8dm8KICAg
ICBhdXRvIGdyb3VwID0gbV9jbGVhckNhY2hlRGlzcGF0Y2hHcm91cDsKICAgICBkaXNwYXRjaF9n
cm91cF9hc3luYyhncm91cCwgZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgbWFrZUJsb2NrUHRy
KFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIG1vZGlmaWVkU2luY2UsIGNv
bXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildICgpIG11dGFibGUg
ewogICAgICAgICBhdXRvIGFnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgIGZvciAoYXV0byYgc2Vzc2lvbiA6
IG5ldHdvcmtTZXNzaW9ucygpLnZhbHVlcygpKSB7Ci0gICAgICAgICAgICBpZiAoYXV0byogY2Fj
aGUgPSBzZXNzaW9uLT5jYWNoZSgpKQorICAgICAgICBmb3JFYWNoTmV0d29ya1Nlc3Npb24oW21v
ZGlmaWVkU2luY2UsICZhZ2dyZWdhdG9yXShOZXR3b3JrU2Vzc2lvbiYgc2Vzc2lvbikgeworICAg
ICAgICAgICAgaWYgKGF1dG8qIGNhY2hlID0gc2Vzc2lvbi5jYWNoZSgpKQogICAgICAgICAgICAg
ICAgIGNhY2hlLT5jbGVhcihtb2RpZmllZFNpbmNlLCBbYWdncmVnYXRvciA9IGFnZ3JlZ2F0b3Iu
Y29weVJlZigpXSAoKSB7IH0pOwotICAgICAgICB9CisgICAgICAgIH0pOwogICAgIH0pLmdldCgp
KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9pb3MvTmV0
d29ya1Byb2Nlc3NJT1MubW0gYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2lvcy9OZXR3
b3JrUHJvY2Vzc0lPUy5tbQppbmRleCAyOWRkMDg3N2JkNC4uZmVhZGRiY2QxZDAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvaW9zL05ldHdvcmtQcm9jZXNzSU9TLm1t
CisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvaW9zL05ldHdvcmtQcm9jZXNzSU9T
Lm1tCkBAIC03OCwxMCArNzgsMTAgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6Y2xlYXJDYWNoZUZv
ckFsbE9yaWdpbnModWludDMyX3QgY2FjaGVzVG9DbGVhcikKICAgICBSZXNvdXJjZUNhY2hlc1Rv
Q2xlYXIgcmVzb3VyY2VDYWNoZXNUb0NsZWFyID0gc3RhdGljX2Nhc3Q8UmVzb3VyY2VDYWNoZXNU
b0NsZWFyPihjYWNoZXNUb0NsZWFyKTsKICAgICBpZiAocmVzb3VyY2VDYWNoZXNUb0NsZWFyID09
IEluTWVtb3J5UmVzb3VyY2VDYWNoZXNPbmx5KQogICAgICAgICByZXR1cm47Ci0gICAgZm9yIChh
dXRvJiBzZXNzaW9uIDogbmV0d29ya1Nlc3Npb25zKCkudmFsdWVzKCkpIHsKLSAgICAgICAgaWYg
KGF1dG8qIGNhY2hlID0gc2Vzc2lvbi0+Y2FjaGUoKSkKKyAgICBmb3JFYWNoTmV0d29ya1Nlc3Np
b24oW10oTmV0d29ya1Nlc3Npb24mIHNlc3Npb24pIHsKKyAgICAgICAgaWYgKGF1dG8qIGNhY2hl
ID0gc2Vzc2lvbi5jYWNoZSgpKQogICAgICAgICAgICAgY2FjaGUtPmNsZWFyKCk7Ci0gICAgfQor
ICAgIH0pOwogfQogCiB2b2lkIE5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUluaXRpYWxpemVOZXR3
b3JrUHJvY2Vzcyhjb25zdCBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyYgcGFyYW1l
dGVycykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3
b3JrUHJvY2Vzc01haW5Tb3VwLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc291
cC9OZXR3b3JrUHJvY2Vzc01haW5Tb3VwLmNwcAppbmRleCBmN2QxNDUxMDRjZS4uYWQwYmRhZDVk
YzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3Jr
UHJvY2Vzc01haW5Tb3VwLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3Nv
dXAvTmV0d29ya1Byb2Nlc3NNYWluU291cC5jcHAKQEAgLTQxLDcgKzQxLDcgQEAgcHVibGljOgog
ICAgIHsKICAgICAgICAgLy8gTmVlZGVkIHRvIGRlc3Ryb3kgdGhlIFNvdXBTZXNzaW9uIGFuZCBT
b3VwQ29va2llSmFyLCBlLmcuIHRvIGF2b2lkCiAgICAgICAgIC8vIGxlYWtpbmcgU1FMaXRlIHRl
bXBvcmFyeSBqb3VybmFsaW5nIGZpbGVzLgotICAgICAgICBnbG9iYWxOZXR3b3JrUHJvY2Vzcy0+
ZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkuY2xlYXJTb3VwTmV0d29ya1Nlc3Npb24oKTsKKyAgICAg
ICAgZ2xvYmFsTmV0d29ya1Byb2Nlc3MtPmRlc3Ryb3lTZXNzaW9uKFBBTDo6U2Vzc2lvbklEOjpk
ZWZhdWx0U2Vzc2lvbklEKCkpOwogICAgIH0KIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrUHJvY2Vzc1NvdXAuY3BwIGIvU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtQcm9jZXNzU291cC5jcHAKaW5kZXggN2M3
OGIwYjMwYzIuLjgzYzJmMjhlYTVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL3NvdXAvTmV0d29ya1Byb2Nlc3NTb3VwLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Byb2Nlc3NTb3VwLmNwcApAQCAtMjksNyArMjksNyBA
QAogCiAjaW5jbHVkZSAiTmV0d29ya0NhY2hlLmgiCiAjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3ND
cmVhdGlvblBhcmFtZXRlcnMuaCIKLSNpbmNsdWRlICJOZXR3b3JrU2Vzc2lvbi5oIgorI2luY2x1
ZGUgIk5ldHdvcmtTZXNzaW9uU291cC5oIgogI2luY2x1ZGUgIlJlc291cmNlQ2FjaGVzVG9DbGVh
ci5oIgogI2luY2x1ZGUgIldlYkNvb2tpZU1hbmFnZXIuaCIKICNpbmNsdWRlICJXZWJLaXRDYWNo
ZWRSZXNvbHZlci5oIgpAQCAtOTksOCArOTksOCBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjp1c2Vy
UHJlZmVycmVkTGFuZ3VhZ2VzQ2hhbmdlZChjb25zdCBWZWN0b3I8U3RyaW5nPiYgbGFuZ3VhZwog
ewogICAgIGF1dG8gYWNjZXB0TGFuZ3VhZ2VzID0gYnVpbGRBY2NlcHRMYW5ndWFnZXMobGFuZ3Vh
Z2VzKTsKICAgICBTb3VwTmV0d29ya1Nlc3Npb246OnNldEluaXRpYWxBY2NlcHRMYW5ndWFnZXMo
YWNjZXB0TGFuZ3VhZ2VzKTsKLSAgICBmb3JFYWNoTmV0d29ya1N0b3JhZ2VTZXNzaW9uKFsmYWNj
ZXB0TGFuZ3VhZ2VzXShjb25zdCBhdXRvJiBzZXNzaW9uKSB7Ci0gICAgICAgIHNlc3Npb24uc291
cE5ldHdvcmtTZXNzaW9uKCkuc2V0QWNjZXB0TGFuZ3VhZ2VzKGFjY2VwdExhbmd1YWdlcyk7Cisg
ICAgZm9yRWFjaE5ldHdvcmtTZXNzaW9uKFsmYWNjZXB0TGFuZ3VhZ2VzXShjb25zdCBhdXRvJiBz
ZXNzaW9uKSB7CisgICAgICAgIHN0YXRpY19jYXN0PGNvbnN0IE5ldHdvcmtTZXNzaW9uU291cCY+
KHNlc3Npb24pLnNvdXBOZXR3b3JrU2Vzc2lvbigpLnNldEFjY2VwdExhbmd1YWdlcyhhY2NlcHRM
YW5ndWFnZXMpOwogICAgIH0pOwogfQogCkBAIC0xMzMsNyArMTMzLDcgQEAgdm9pZCBOZXR3b3Jr
UHJvY2Vzczo6cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MoY29uc3QgTmV0d29ya1By
b2Nlc3NDcmVhdGkKIAogc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vz
c2lvbj4gTmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtQ3JlYXRlRGVmYXVsdFN0b3JhZ2VTZXNzaW9u
KCkgY29uc3QKIHsKLSAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxXZWJDb3JlOjpOZXR3b3Jr
U3RvcmFnZVNlc3Npb24+KFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCksIHN0ZDo6
bWFrZV91bmlxdWU8U291cE5ldHdvcmtTZXNzaW9uPihQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNl
c3Npb25JRCgpKSk7CisgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8V2ViQ29yZTo6TmV0d29y
a1N0b3JhZ2VTZXNzaW9uPihQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKTsKIH0K
IAogdm9pZCBOZXR3b3JrUHJvY2Vzczo6c2V0SWdub3JlVExTRXJyb3JzKGJvb2wgaWdub3JlVExT
RXJyb3JzKQpAQCAtMTU3LDEwICsxNTcsMTAgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6Y2xlYXJD
YWNoZUZvckFsbE9yaWdpbnModWludDMyX3QgY2FjaGVzVG9DbGVhcikKIHZvaWQgTmV0d29ya1By
b2Nlc3M6OmNsZWFyRGlza0NhY2hlKFdhbGxUaW1lIG1vZGlmaWVkU2luY2UsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBhdXRvIGFnZ3JlZ2F0
b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KSk7Ci0gICAgZm9yIChhdXRvJiBzZXNzaW9uIDogbmV0d29ya1Nlc3Npb25zKCkudmFsdWVzKCkp
IHsKLSAgICAgICAgaWYgKGF1dG8qIGNhY2hlID0gc2Vzc2lvbi0+Y2FjaGUoKSkKKyAgICBmb3JF
YWNoTmV0d29ya1Nlc3Npb24oW21vZGlmaWVkU2luY2UsICZhZ2dyZWdhdG9yXShOZXR3b3JrU2Vz
c2lvbiYgc2Vzc2lvbikgeworICAgICAgICBpZiAoYXV0byogY2FjaGUgPSBzZXNzaW9uLmNhY2hl
KCkpCiAgICAgICAgICAgICBjYWNoZS0+Y2xlYXIobW9kaWZpZWRTaW5jZSwgW2FnZ3JlZ2F0b3Ig
PSBhZ2dyZWdhdG9yLmNvcHlSZWYoKV0gKCkgeyB9KTsKLSAgICB9CisgICAgfSk7CiB9CiAKIHZv
aWQgTmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtVGVybWluYXRlKCkKQEAgLTE3MSw4ICsxNzEsOCBA
QCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybVRlcm1pbmF0ZSgpCiB2b2lkIE5ldHdvcmtQ
cm9jZXNzOjpzZXROZXR3b3JrUHJveHlTZXR0aW5ncyhjb25zdCBTb3VwTmV0d29ya1Byb3h5U2V0
dGluZ3MmIHNldHRpbmdzKQogewogICAgIFNvdXBOZXR3b3JrU2Vzc2lvbjo6c2V0UHJveHlTZXR0
aW5ncyhzZXR0aW5ncyk7Ci0gICAgZm9yRWFjaE5ldHdvcmtTdG9yYWdlU2Vzc2lvbihbXShjb25z
dCBhdXRvJiBzZXNzaW9uKSB7Ci0gICAgICAgIHNlc3Npb24uc291cE5ldHdvcmtTZXNzaW9uKCku
c2V0dXBQcm94eSgpOworICAgIGZvckVhY2hOZXR3b3JrU2Vzc2lvbihbXShjb25zdCBhdXRvJiBz
ZXNzaW9uKSB7CisgICAgICAgIHN0YXRpY19jYXN0PGNvbnN0IE5ldHdvcmtTZXNzaW9uU291cCY+
KHNlc3Npb24pLnNvdXBOZXR3b3JrU2Vzc2lvbigpLnNldHVwUHJveHkoKTsKICAgICB9KTsKIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtT
ZXNzaW9uU291cC5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29y
a1Nlc3Npb25Tb3VwLmNwcAppbmRleCBmN2RlYzcwNDhkMS4uNzM1NTI1N2JlZGEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrU2Vzc2lvblNvdXAu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrU2Vzc2lv
blNvdXAuY3BwCkBAIC00MSwxMyArNDEsMTkgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAK
IE5ldHdvcmtTZXNzaW9uU291cDo6TmV0d29ya1Nlc3Npb25Tb3VwKE5ldHdvcmtQcm9jZXNzJiBu
ZXR3b3JrUHJvY2VzcywgTmV0d29ya1Nlc3Npb25DcmVhdGlvblBhcmFtZXRlcnMmJiBwYXJhbWV0
ZXJzKQogICAgIDogTmV0d29ya1Nlc3Npb24obmV0d29ya1Byb2Nlc3MsIHBhcmFtZXRlcnMpCisg
ICAgLCBtX25ldHdvcmtTZXNzaW9uKHN0ZDo6bWFrZV91bmlxdWU8U291cE5ldHdvcmtTZXNzaW9u
PihtX3Nlc3Npb25JRCkpCiB7Ci0gICAgbmV0d29ya1N0b3JhZ2VTZXNzaW9uKCktPnNldENvb2tp
ZU9ic2VydmVySGFuZGxlcihbdGhpc10gewotICAgICAgICB0aGlzLT5uZXR3b3JrUHJvY2Vzcygp
LnN1cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlcj4oKS0+bm90aWZ5Q29va2llc0RpZENoYW5nZSht
X3Nlc3Npb25JRCk7Ci0gICAgfSk7CisgICAgYXV0byogc3RvcmFnZVNlc3Npb24gPSBuZXR3b3Jr
U3RvcmFnZVNlc3Npb24oKTsKKyAgICBBU1NFUlQoc3RvcmFnZVNlc3Npb24pOwogCiAgICAgaWYg
KCFwYXJhbWV0ZXJzLmNvb2tpZVBlcnNpc3RlbnRTdG9yYWdlUGF0aC5pc0VtcHR5KCkpCi0gICAg
ICAgIHRoaXMtPm5ldHdvcmtQcm9jZXNzKCkuc3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2VyPigp
LT5zZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShtX3Nlc3Npb25JRCwgcGFyYW1ldGVycy5jb29r
aWVQZXJzaXN0ZW50U3RvcmFnZVBhdGgsIHBhcmFtZXRlcnMuY29va2llUGVyc2lzdGVudFN0b3Jh
Z2VUeXBlKTsKKyAgICAgICAgc2V0Q29va2llUGVyc2lzdGVudFN0b3JhZ2UocGFyYW1ldGVycy5j
b29raWVQZXJzaXN0ZW50U3RvcmFnZVBhdGgsIHBhcmFtZXRlcnMuY29va2llUGVyc2lzdGVudFN0
b3JhZ2VUeXBlKTsKKyAgICBlbHNlCisgICAgICAgIG1fbmV0d29ya1Nlc3Npb24tPnNldENvb2tp
ZUphcihzdG9yYWdlU2Vzc2lvbi0+Y29va2llU3RvcmFnZSgpKTsKKworICAgIHN0b3JhZ2VTZXNz
aW9uLT5zZXRDb29raWVPYnNlcnZlckhhbmRsZXIoW3RoaXNdIHsKKyAgICAgICAgdGhpcy0+bmV0
d29ya1Byb2Nlc3MoKS5zdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXI+KCktPm5vdGlmeUNvb2tp
ZXNEaWRDaGFuZ2UobV9zZXNzaW9uSUQpOworICAgIH0pOwogfQogCiBOZXR3b3JrU2Vzc2lvblNv
dXA6On5OZXR3b3JrU2Vzc2lvblNvdXAoKQpAQCAtNTgsNyArNjQsMzEgQEAgTmV0d29ya1Nlc3Np
b25Tb3VwOjp+TmV0d29ya1Nlc3Npb25Tb3VwKCkKIAogU291cFNlc3Npb24qIE5ldHdvcmtTZXNz
aW9uU291cDo6c291cFNlc3Npb24oKSBjb25zdAogewotICAgIHJldHVybiBuZXR3b3JrU3RvcmFn
ZVNlc3Npb24oKS0+c291cE5ldHdvcmtTZXNzaW9uKCkuc291cFNlc3Npb24oKTsKKyAgICByZXR1
cm4gbV9uZXR3b3JrU2Vzc2lvbi0+c291cFNlc3Npb24oKTsKK30KKwordm9pZCBOZXR3b3JrU2Vz
c2lvblNvdXA6OnNldENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlKGNvbnN0IFN0cmluZyYgc3RvcmFn
ZVBhdGgsIFNvdXBDb29raWVQZXJzaXN0ZW50U3RvcmFnZVR5cGUgc3RvcmFnZVR5cGUpCit7Cisg
ICAgYXV0byogc3RvcmFnZVNlc3Npb24gPSBuZXR3b3JrU3RvcmFnZVNlc3Npb24oKTsKKyAgICBp
ZiAoIXN0b3JhZ2VTZXNzaW9uKQorICAgICAgICByZXR1cm47CisKKyAgICBHUmVmUHRyPFNvdXBD
b29raWVKYXI+IGphcjsKKyAgICBzd2l0Y2ggKHN0b3JhZ2VUeXBlKSB7CisgICAgY2FzZSBTb3Vw
Q29va2llUGVyc2lzdGVudFN0b3JhZ2VUeXBlOjpUZXh0OgorICAgICAgICBqYXIgPSBhZG9wdEdS
ZWYoc291cF9jb29raWVfamFyX3RleHRfbmV3KHN0b3JhZ2VQYXRoLnV0ZjgoKS5kYXRhKCksIEZB
TFNFKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgU291cENvb2tpZVBlcnNpc3RlbnRTdG9y
YWdlVHlwZTo6U1FMaXRlOgorICAgICAgICBqYXIgPSBhZG9wdEdSZWYoc291cF9jb29raWVfamFy
X2RiX25ldyhzdG9yYWdlUGF0aC51dGY4KCkuZGF0YSgpLCBGQUxTRSkpOworICAgICAgICBicmVh
azsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisK
KyAgICBzb3VwX2Nvb2tpZV9qYXJfc2V0X2FjY2VwdF9wb2xpY3koamFyLmdldCgpLCBzb3VwX2Nv
b2tpZV9qYXJfZ2V0X2FjY2VwdF9wb2xpY3koc3RvcmFnZVNlc3Npb24tPmNvb2tpZVN0b3JhZ2Uo
KSkpOworICAgIHN0b3JhZ2VTZXNzaW9uLT5zZXRDb29raWVTdG9yYWdlKFdURk1vdmUoamFyKSk7
CisKKyAgICBtX25ldHdvcmtTZXNzaW9uLT5zZXRDb29raWVKYXIoc3RvcmFnZVNlc3Npb24tPmNv
b2tpZVN0b3JhZ2UoKSk7CiB9CiAKIHZvaWQgTmV0d29ya1Nlc3Npb25Tb3VwOjpjbGVhckNyZWRl
bnRpYWxzKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc291cC9O
ZXR3b3JrU2Vzc2lvblNvdXAuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc291cC9O
ZXR3b3JrU2Vzc2lvblNvdXAuaAppbmRleCA5MTVkMDJkNTI0ZS4uZjllZjRiYjU0MzAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrU2Vzc2lvblNv
dXAuaAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Nlc3Np
b25Tb3VwLmgKQEAgLTI2LDkgKzI2LDE0IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIk5l
dHdvcmtTZXNzaW9uLmgiCisjaW5jbHVkZSAiU291cENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlVHlw
ZS5oIgogCiB0eXBlZGVmIHN0cnVjdCBfU291cFNlc3Npb24gU291cFNlc3Npb247CiAKK25hbWVz
cGFjZSBXZWJDb3JlIHsKK2NsYXNzIFNvdXBOZXR3b3JrU2Vzc2lvbjsKK30KKwogbmFtZXNwYWNl
IFdlYktpdCB7CiAKIGNsYXNzIE5ldHdvcmtTb2NrZXRDaGFubmVsOwpAQCAtNDQsMTEgKzQ5LDE2
IEBAIHB1YmxpYzoKICAgICBOZXR3b3JrU2Vzc2lvblNvdXAoTmV0d29ya1Byb2Nlc3MmLCBOZXR3
b3JrU2Vzc2lvbkNyZWF0aW9uUGFyYW1ldGVycyYmKTsKICAgICB+TmV0d29ya1Nlc3Npb25Tb3Vw
KCk7CiAKKyAgICBXZWJDb3JlOjpTb3VwTmV0d29ya1Nlc3Npb24mIHNvdXBOZXR3b3JrU2Vzc2lv
bigpIGNvbnN0IHsgcmV0dXJuICptX25ldHdvcmtTZXNzaW9uOyB9CiAgICAgU291cFNlc3Npb24q
IHNvdXBTZXNzaW9uKCkgY29uc3Q7CiAKKyAgICB2b2lkIHNldENvb2tpZVBlcnNpc3RlbnRTdG9y
YWdlKGNvbnN0IFN0cmluZyYgc3RvcmFnZVBhdGgsIFNvdXBDb29raWVQZXJzaXN0ZW50U3RvcmFn
ZVR5cGUpOworCiBwcml2YXRlOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJTb2NrZXRUYXNrPiBj
cmVhdGVXZWJTb2NrZXRUYXNrKE5ldHdvcmtTb2NrZXRDaGFubmVsJiwgY29uc3QgV2ViQ29yZTo6
UmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgU3RyaW5nJiBwcm90b2NvbCkgZmluYWw7CiAgICAgdm9p
ZCBjbGVhckNyZWRlbnRpYWxzKCkgZmluYWw7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29y
ZTo6U291cE5ldHdvcmtTZXNzaW9uPiBtX25ldHdvcmtTZXNzaW9uOwogfTsKIAogfSAvLyBuYW1l
c3BhY2UgV2ViS2l0Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>374955</attachid>
            <date>2019-07-26 01:42:34 -0700</date>
            <delta_ts>2019-07-30 07:41:10 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>wk2-soup-network-session.diff</filename>
            <type>text/plain</type>
            <size>45452</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBiNTMxYmVlNzI2Zi4uNDE5MWE1OGQ1ODUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzNSBAQAorMjAxOS0wNy0yNCAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGln
YWxpYS5jb20+CisKKyAgICAgICAgW1NPVVBdIE1vdmUgU291cE5ldHdvcmtTZXNzaW9uIG93bmVy
c2hpcCBmcm9tIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiB0byBOZXR3b3JrU2Vzc2lvbgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAwMDc2CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTWljaGFlbCBDYXRhbnphcm8uCisKKyAgICAgICAgUmVtb3ZlIHRoZSBT
b3VwTmV0d29ya1Nlc3Npb24gZnJvbSBOZXR3b3JrU3RvcmFnZVNlc3Npb24uCisKKyAgICAgICAg
KiBwbGF0Zm9ybS9uZXR3b3JrL05ldHdvcmtTdG9yYWdlU2Vzc2lvbi5oOgorICAgICAgICAoV2Vi
Q29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpjb29raWVTdG9yYWdlIGNvbnN0KTogUmV0dXJu
IHRoZSBjb29raWUgamFyLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvU3RvcmFnZVNlc3Np
b25Qcm92aWRlci5oOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVNlc3Npb25Qcm92aWRlcjo6
c291cFNlc3Npb24gY29uc3QpOiBUZW1wb3JhcnkgYWRkIHRoaXMgdmlydHVhbCBtZXRob2QgdGhh
dCBpcyByZXF1aXJlZCBieQorICAgICAgICBTb2NrZXRTdHJlYW1IYW5kbGVJbXBsU291cC4gSXQg
d2lsbCBiZSByZW1vdmVkIG9uY2Ugd2Ugc3dpdGNoIHRvIGxpYnNvdXAgV2ViU29ja2V0cyBBUEkg
c29vbi4KKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvRE5TUmVzb2x2ZVF1ZXVlU291
cC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpnbG9iYWxEZWZhdWx0U291cFNlc3Npb25BY2Nlc3Nv
cik6IFJld29yayB0aGUgYWNjZXNzb3IgdG8gcmV0dXJuIHRoZSBTb3VwU2Vzc2lvbiBkaXJlY3Rs
eSBzaW5jZQorICAgICAgICB0aGF0J3Mgd2hhdCB3ZSByZWFsbHkgd2FudC4KKyAgICAgICAgKFdl
YkNvcmU6OkROU1Jlc29sdmVRdWV1ZVNvdXA6OnNldEdsb2JhbERlZmF1bHRTb3VwU2Vzc2lvbkFj
Y2Vzc29yKToKKyAgICAgICAgKFdlYkNvcmU6OkROU1Jlc29sdmVRdWV1ZVNvdXA6OnVwZGF0ZUlz
VXNpbmdQcm94eSk6CisgICAgICAgIChXZWJDb3JlOjpETlNSZXNvbHZlUXVldWVTb3VwOjpwbGF0
Zm9ybVJlc29sdmUpOgorICAgICAgICAoV2ViQ29yZTo6RE5TUmVzb2x2ZVF1ZXVlU291cDo6cmVz
b2x2ZSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9zb3VwL0ROU1Jlc29sdmVRdWV1ZVNv
dXAuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvTmV0d29ya1N0b3JhZ2VTZXNz
aW9uU291cC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb246Ok5l
dHdvcmtTdG9yYWdlU2Vzc2lvbik6IENyZWF0ZSBhbmQgc2V0dXAgdGhlIGRlZmF1bHQgY29va2ll
IGphci4KKyAgICAgICAgKFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6fk5ldHdvcmtT
dG9yYWdlU2Vzc2lvbik6IE9ubHkgZGlzY29ubmVjdCB0aGUgY29va2llIGphciBzaWduYWxzLgor
ICAgICAgICAoV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpzZXRDb29raWVTdG9yYWdl
KTogVXBkYXRlIHRoZSBjb29raWUgamFyLCBub3cgd2Uga25vdyBpdCdzIGFsd2F5cyBhIG5ldyBv
bmUuCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9zb3VwL1NvY2tldFN0cmVhbUhhbmRsZUlt
cGxTb3VwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZUltcGw6OmNy
ZWF0ZSk6IFVzZSB0aGUgbmV3IHZpcnR1YWwgbWV0aG9kIGZyb20gU3RvcmFnZVNlc3Npb25Qcm92
aWRlciB0byBnZXQgdGhlIFNvdXBTZXNzaW9uLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsv
c291cC9Tb3VwTmV0d29ya1Nlc3Npb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6U291cE5ldHdv
cmtTZXNzaW9uOjpTb3VwTmV0d29ya1Nlc3Npb24pOiBSZW1vdmUgdGhlIFNvdXBDb29raWVKYXIg
cGFyYW1ldGVyLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvc291cC9Tb3VwTmV0d29ya1Nl
c3Npb24uaDoKKwogMjAxOS0wNy0yNiAgUm9iIEJ1aXMgIDxyYnVpc0BpZ2FsaWEuY29tPgogCiAg
ICAgICAgIE1ha2Ugc3RvcmluZyBjcm9zcy1vcmlnaW4gdG9wLWxldmVsIHByZWZldGNoZXMgaW4g
SFRUUCBjYWNoZSBvcHRpb25hbApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9OZXR3b3JrU3RvcmFnZVNlc3Npb24uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvTmV0d29ya1N0b3JhZ2VTZXNzaW9uLmgKaW5kZXggNThkYTg3ODkwN2YuLmUyZTEw
NmE5MWU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL05ldHdv
cmtTdG9yYWdlU2Vzc2lvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
TmV0d29ya1N0b3JhZ2VTZXNzaW9uLmgKQEAgLTY1LDcgKzY1LDYgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogY2xhc3MgQ3VybFByb3h5U2V0dGluZ3M7CiBjbGFzcyBOZXR3b3JraW5nQ29udGV4dDsK
IGNsYXNzIFJlc291cmNlUmVxdWVzdDsKLWNsYXNzIFNvdXBOZXR3b3JrU2Vzc2lvbjsKIAogc3Ry
dWN0IENvb2tpZTsKIHN0cnVjdCBDb29raWVSZXF1ZXN0SGVhZGVyRmllbGRQcm94eTsKQEAgLTk3
LDEzICs5NiwxMSBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgUmV0YWluUHRyPENGSFRU
UENvb2tpZVN0b3JhZ2VSZWY+IGNvb2tpZVN0b3JhZ2UoKSBjb25zdDsKICAgICBXRUJDT1JFX0VY
UE9SVCBzdGF0aWMgdm9pZCBzZXRTdG9yYWdlQWNjZXNzQVBJRW5hYmxlZChib29sKTsKICNlbGlm
IFVTRShTT1VQKQotICAgIFdFQkNPUkVfRVhQT1JUIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbihQQUw6
OlNlc3Npb25JRCwgc3RkOjp1bmlxdWVfcHRyPFNvdXBOZXR3b3JrU2Vzc2lvbj4mJik7CisgICAg
V0VCQ09SRV9FWFBPUlQgZXhwbGljaXQgTmV0d29ya1N0b3JhZ2VTZXNzaW9uKFBBTDo6U2Vzc2lv
bklEKTsKICAgICB+TmV0d29ya1N0b3JhZ2VTZXNzaW9uKCk7CiAKLSAgICBTb3VwTmV0d29ya1Nl
c3Npb24mIHNvdXBOZXR3b3JrU2Vzc2lvbigpIGNvbnN0OwotICAgIHZvaWQgY2xlYXJTb3VwTmV0
d29ya1Nlc3Npb24oKTsKLSAgICBTb3VwQ29va2llSmFyKiBjb29raWVTdG9yYWdlKCkgY29uc3Q7
Ci0gICAgdm9pZCBzZXRDb29raWVTdG9yYWdlKFNvdXBDb29raWVKYXIqKTsKKyAgICBTb3VwQ29v
a2llSmFyKiBjb29raWVTdG9yYWdlKCkgY29uc3QgeyByZXR1cm4gbV9jb29raWVTdG9yYWdlLmdl
dCgpOyB9CisgICAgdm9pZCBzZXRDb29raWVTdG9yYWdlKEdSZWZQdHI8U291cENvb2tpZUphcj4m
Jik7CiAgICAgdm9pZCBzZXRDb29raWVPYnNlcnZlckhhbmRsZXIoRnVuY3Rpb248dm9pZCAoKT4m
Jik7CiAgICAgdm9pZCBnZXRDcmVkZW50aWFsRnJvbVBlcnNpc3RlbnRTdG9yYWdlKGNvbnN0IFBy
b3RlY3Rpb25TcGFjZSYsIEdDYW5jZWxsYWJsZSosIEZ1bmN0aW9uPHZvaWQgKENyZWRlbnRpYWwm
Jik+JiYgY29tcGxldGlvbkhhbmRsZXIpOwogICAgIHZvaWQgc2F2ZUNyZWRlbnRpYWxUb1BlcnNp
c3RlbnRTdG9yYWdlKGNvbnN0IFByb3RlY3Rpb25TcGFjZSYsIGNvbnN0IENyZWRlbnRpYWwmKTsK
QEAgLTE3MSw3ICsxNjgsNyBAQCBwcml2YXRlOgogI2VsaWYgVVNFKFNPVVApCiAgICAgc3RhdGlj
IHZvaWQgY29va2llc0RpZENoYW5nZShOZXR3b3JrU3RvcmFnZVNlc3Npb24qKTsKIAotICAgIG11
dGFibGUgc3RkOjp1bmlxdWVfcHRyPFNvdXBOZXR3b3JrU2Vzc2lvbj4gbV9zZXNzaW9uOworICAg
IEdSZWZQdHI8U291cENvb2tpZUphcj4gbV9jb29raWVTdG9yYWdlOwogICAgIEZ1bmN0aW9uPHZv
aWQgKCk+IG1fY29va2llT2JzZXJ2ZXJIYW5kbGVyOwogI2VsaWYgVVNFKENVUkwpCiAgICAgVW5p
cXVlUmVmPENvb2tpZUphckN1cmw+IG1fY29va2llU3RvcmFnZTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvU3RvcmFnZVNlc3Npb25Qcm92aWRlci5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9TdG9yYWdlU2Vzc2lvblByb3ZpZGVyLmgKaW5k
ZXggMGMxNTU1YjY2YTAuLjM4MDEwNTAxMWIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL1N0b3JhZ2VTZXNzaW9uUHJvdmlkZXIuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL1N0b3JhZ2VTZXNzaW9uUHJvdmlkZXIuaApAQCAtMjcsNiAr
MjcsMTAgQEAKIAogI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgogCisjaWYg
VVNFKFNPVVApCit0eXBlZGVmIHN0cnVjdCBfU291cFNlc3Npb24gU291cFNlc3Npb247CisjZW5k
aWYKKwogbmFtZXNwYWNlIFBBTCB7CiBjbGFzcyBTZXNzaW9uSUQ7CiB9CkBAIC0zOSw2ICs0Mywx
MSBAQCBjbGFzcyBTdG9yYWdlU2Vzc2lvblByb3ZpZGVyIDogcHVibGljIFRocmVhZFNhZmVSZWZD
b3VudGVkPFN0b3JhZ2VTZXNzaW9uUHJvdmlkZQogcHVibGljOgogICAgIHZpcnR1YWwgTmV0d29y
a1N0b3JhZ2VTZXNzaW9uKiBzdG9yYWdlU2Vzc2lvbigpIGNvbnN0ID0gMDsKIAorI2lmIFVTRShT
T1VQKQorICAgIC8vIEZJWE1FOiBUaGlzIGlzIG9ubHkgcmVxdWlyZWQgYnkgU29ja2V0U3RyZWFt
SGFuZGxlSW1wbFNvdXAsIHJlbW92ZSBpdCB3aGVuIHdlIHN3aXRjaCB0byBsaWJzb3VwIFdlYlNv
Y2tldHMgQVBJLgorICAgIHZpcnR1YWwgU291cFNlc3Npb24qIHNvdXBTZXNzaW9uKCkgY29uc3Qg
eyByZXR1cm4gbnVsbHB0cjsgfQorI2VuZGlmCisKICAgICB2aXJ0dWFsIH5TdG9yYWdlU2Vzc2lv
blByb3ZpZGVyKCkgeyB9CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL3NvdXAvRE5TUmVzb2x2ZVF1ZXVlU291cC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL3NvdXAvRE5TUmVzb2x2ZVF1ZXVlU291cC5jcHAKaW5kZXggZDIzOTc3
NTQxYWYuLjRiYjMwYTg3MWRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL3NvdXAvRE5TUmVzb2x2ZVF1ZXVlU291cC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9zb3VwL0ROU1Jlc29sdmVRdWV1ZVNvdXAuY3BwCkBAIC0yOSw4ICsy
OSw2IEBACiAKICNpZiBVU0UoU09VUCkKIAotI2luY2x1ZGUgIk5ldHdvcmtTdG9yYWdlU2Vzc2lv
bi5oIgotI2luY2x1ZGUgIlNvdXBOZXR3b3JrU2Vzc2lvbi5oIgogI2luY2x1ZGUgPGxpYnNvdXAv
c291cC5oPgogI2luY2x1ZGUgPHd0Zi9Db21wbGV0aW9uSGFuZGxlci5oPgogI2luY2x1ZGUgPHd0
Zi9GdW5jdGlvbi5oPgpAQCAtNzgsMjEgKzc2LDIxIEBAIHN0YXRpYyB2b2lkIHByb3h5UmVzb2x2
ZWRGb3JIdHRwc1VyaUNhbGxiYWNrKEdPYmplY3QqIHNvdXJjZSwgR0FzeW5jUmVzdWx0KiByZXN1
CiAgICAgZGlkUmVzb2x2ZVByb3h5KEdfUFJPWFlfUkVTT0xWRVIoc291cmNlKSwgcmVzdWx0LCAm
aXNVc2luZ0h0dHBzUHJveHksIHN0YXRpY19jYXN0PGJvb2wqPih1c2VyRGF0YSkpOwogfQogCi1G
dW5jdGlvbjxOZXR3b3JrU3RvcmFnZVNlc3Npb24mKCk+JiBnbG9iYWxEZWZhdWx0TmV0d29ya1N0
b3JhZ2VTZXNzaW9uQWNjZXNzb3IoKQorRnVuY3Rpb248U291cFNlc3Npb24qKCk+JiBnbG9iYWxE
ZWZhdWx0U291cFNlc3Npb25BY2Nlc3NvcigpCiB7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVk
PEZ1bmN0aW9uPE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYoKT4+IGFjY2Vzc29yOworICAgIHN0YXRp
YyBOZXZlckRlc3Ryb3llZDxGdW5jdGlvbjxTb3VwU2Vzc2lvbiooKT4+IGFjY2Vzc29yOwogICAg
IHJldHVybiBhY2Nlc3Nvci5nZXQoKTsKIH0KIAotdm9pZCBETlNSZXNvbHZlUXVldWVTb3VwOjpz
ZXRHbG9iYWxEZWZhdWx0TmV0d29ya1N0b3JhZ2VTZXNzaW9uQWNjZXNzb3IoRnVuY3Rpb248TmV0
d29ya1N0b3JhZ2VTZXNzaW9uJigpPiYmIGFjY2Vzc29yKQordm9pZCBETlNSZXNvbHZlUXVldWVT
b3VwOjpzZXRHbG9iYWxEZWZhdWx0U291cFNlc3Npb25BY2Nlc3NvcihGdW5jdGlvbjxTb3VwU2Vz
c2lvbiooKT4mJiBhY2Nlc3NvcikKIHsKLSAgICBnbG9iYWxEZWZhdWx0TmV0d29ya1N0b3JhZ2VT
ZXNzaW9uQWNjZXNzb3IoKSA9IFdURk1vdmUoYWNjZXNzb3IpOworICAgIGdsb2JhbERlZmF1bHRT
b3VwU2Vzc2lvbkFjY2Vzc29yKCkgPSBXVEZNb3ZlKGFjY2Vzc29yKTsKIH0KIAogdm9pZCBETlNS
ZXNvbHZlUXVldWVTb3VwOjp1cGRhdGVJc1VzaW5nUHJveHkoKQogewogICAgIEdSZWZQdHI8R1By
b3h5UmVzb2x2ZXI+IHJlc29sdmVyOwotICAgIGdfb2JqZWN0X2dldChnbG9iYWxEZWZhdWx0TmV0
d29ya1N0b3JhZ2VTZXNzaW9uQWNjZXNzb3IoKSgpLnNvdXBOZXR3b3JrU2Vzc2lvbigpLnNvdXBT
ZXNzaW9uKCksICJwcm94eS1yZXNvbHZlciIsICZyZXNvbHZlci5vdXRQdHIoKSwgbnVsbHB0cik7
CisgICAgZ19vYmplY3RfZ2V0KGdsb2JhbERlZmF1bHRTb3VwU2Vzc2lvbkFjY2Vzc29yKCkoKSwg
InByb3h5LXJlc29sdmVyIiwgJnJlc29sdmVyLm91dFB0cigpLCBudWxscHRyKTsKICAgICBBU1NF
UlQocmVzb2x2ZXIpOwogCiAgICAgZ19wcm94eV9yZXNvbHZlcl9sb29rdXBfYXN5bmMocmVzb2x2
ZXIuZ2V0KCksICJodHRwOi8vZXhhbXBsZS5jb20vIiwgbnVsbHB0ciwgcHJveHlSZXNvbHZlZEZv
ckh0dHBVcmlDYWxsYmFjaywgJm1faXNVc2luZ1Byb3h5KTsKQEAgLTE3NSw3ICsxNzMsNyBAQCB2
b2lkIEROU1Jlc29sdmVRdWV1ZVNvdXA6OnBsYXRmb3JtUmVzb2x2ZShjb25zdCBTdHJpbmcmIGhv
c3RuYW1lKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAKLSAgICBzb3VwX3Nlc3Np
b25fcHJlZmV0Y2hfZG5zKGdsb2JhbERlZmF1bHROZXR3b3JrU3RvcmFnZVNlc3Npb25BY2Nlc3Nv
cigpKCkuc291cE5ldHdvcmtTZXNzaW9uKCkuc291cFNlc3Npb24oKSwgaG9zdG5hbWUudXRmOCgp
LmRhdGEoKSwgbnVsbHB0ciwgcmVzb2x2ZWRDYWxsYmFjaywgbnVsbHB0cik7CisgICAgc291cF9z
ZXNzaW9uX3ByZWZldGNoX2RucyhnbG9iYWxEZWZhdWx0U291cFNlc3Npb25BY2Nlc3NvcigpKCks
IGhvc3RuYW1lLnV0ZjgoKS5kYXRhKCksIG51bGxwdHIsIHJlc29sdmVkQ2FsbGJhY2ssIG51bGxw
dHIpOwogfQogCiB2b2lkIEROU1Jlc29sdmVRdWV1ZVNvdXA6OnJlc29sdmUoY29uc3QgU3RyaW5n
JiBob3N0bmFtZSwgdWludDY0X3QgaWRlbnRpZmllciwgRE5TQ29tcGxldGlvbkhhbmRsZXImJiBj
b21wbGV0aW9uSGFuZGxlcikKQEAgLTE4NCw3ICsxODIsNyBAQCB2b2lkIEROU1Jlc29sdmVRdWV1
ZVNvdXA6OnJlc29sdmUoY29uc3QgU3RyaW5nJiBob3N0bmFtZSwgdWludDY0X3QgaWRlbnRpZmll
ciwgRAogCiAgICAgYXV0byBhZGRyZXNzID0gYWRvcHRHUmVmKHNvdXBfYWRkcmVzc19uZXcoaG9z
dG5hbWUudXRmOCgpLmRhdGEoKSwgMCkpOwogICAgIGF1dG8gY2FuY2VsbGFibGUgPSBhZG9wdEdS
ZWYoZ19jYW5jZWxsYWJsZV9uZXcoKSk7Ci0gICAgc291cF9hZGRyZXNzX3Jlc29sdmVfYXN5bmMo
YWRkcmVzcy5nZXQoKSwgc291cF9zZXNzaW9uX2dldF9hc3luY19jb250ZXh0KFdlYkNvcmU6Omds
b2JhbERlZmF1bHROZXR3b3JrU3RvcmFnZVNlc3Npb25BY2Nlc3NvcigpKCkuc291cE5ldHdvcmtT
ZXNzaW9uKCkuc291cFNlc3Npb24oKSksIGNhbmNlbGxhYmxlLmdldCgpLCByZXNvbHZlZFdpdGhP
YnNlcnZlckNhbGxiYWNrLCB0aGlzKTsKKyAgICBzb3VwX2FkZHJlc3NfcmVzb2x2ZV9hc3luYyhh
ZGRyZXNzLmdldCgpLCBzb3VwX3Nlc3Npb25fZ2V0X2FzeW5jX2NvbnRleHQoZ2xvYmFsRGVmYXVs
dFNvdXBTZXNzaW9uQWNjZXNzb3IoKSgpKSwgY2FuY2VsbGFibGUuZ2V0KCksIHJlc29sdmVkV2l0
aE9ic2VydmVyQ2FsbGJhY2ssIHRoaXMpOwogCiAgICAgZ19vYmplY3Rfc2V0X2RhdGEoR19PQkpF
Q1QoYWRkcmVzcy5nZXQoKSksICJpZGVudGlmaWVyIiwgR1VJTlRfVE9fUE9JTlRFUihpZGVudGlm
aWVyKSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291
cC9ETlNSZXNvbHZlUXVldWVTb3VwLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L3NvdXAvRE5TUmVzb2x2ZVF1ZXVlU291cC5oCmluZGV4IDU3MjAzNGY1NGFjLi5jZWU3OWY5MzMz
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL0ROU1Jl
c29sdmVRdWV1ZVNvdXAuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3Nv
dXAvRE5TUmVzb2x2ZVF1ZXVlU291cC5oCkBAIC0zMCw2ICszMCw4IEBACiAjaW5jbHVkZSA8d3Rm
L0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvZ2xpYi9HUmVmUHRyLmg+CiAKK3R5cGVkZWYgc3Ry
dWN0IF9Tb3VwU2Vzc2lvbiBTb3VwU2Vzc2lvbjsKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBj
bGFzcyBOZXR3b3JrU3RvcmFnZVNlc3Npb247CkBAIC0zOSw3ICs0MSw3IEBAIHB1YmxpYzoKICAg
ICB1c2luZyBDb21wbGV0aW9uQW5kQ2FuY2VsSGFuZGxlcnMgPSBzdGQ6OnBhaXI8V2ViQ29yZTo6
RE5TQ29tcGxldGlvbkhhbmRsZXIsIEdSZWZQdHI8R0NhbmNlbGxhYmxlPj47CiAKICAgICBETlNS
ZXNvbHZlUXVldWVTb3VwKCkgPSBkZWZhdWx0OwotICAgIHN0YXRpYyB2b2lkIHNldEdsb2JhbERl
ZmF1bHROZXR3b3JrU3RvcmFnZVNlc3Npb25BY2Nlc3NvcihGdW5jdGlvbjxOZXR3b3JrU3RvcmFn
ZVNlc3Npb24mKCk+JiYpOworICAgIHN0YXRpYyB2b2lkIHNldEdsb2JhbERlZmF1bHRTb3VwU2Vz
c2lvbkFjY2Vzc29yKEZ1bmN0aW9uPFNvdXBTZXNzaW9uKigpPiYmKTsKICAgICB2b2lkIHJlc29s
dmUoY29uc3QgU3RyaW5nJiBob3N0bmFtZSwgdWludDY0X3QgaWRlbnRpZmllciwgRE5TQ29tcGxl
dGlvbkhhbmRsZXImJikgZmluYWw7CiAgICAgdm9pZCBzdG9wUmVzb2x2ZSh1aW50NjRfdCBpZGVu
dGlmaWVyKSBmaW5hbDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9zb3VwL05ldHdvcmtTdG9yYWdlU2Vzc2lvblNvdXAuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9zb3VwL05ldHdvcmtTdG9yYWdlU2Vzc2lvblNvdXAuY3BwCmluZGV4
IDA1M2Y2YjkxYTY0Li5lNGM4YjBmMTNlNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9zb3VwL05ldHdvcmtTdG9yYWdlU2Vzc2lvblNvdXAuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9OZXR3b3JrU3RvcmFnZVNlc3Npb25T
b3VwLmNwcApAQCAtNTMsMzQgKzUzLDE3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotTmV0
d29ya1N0b3JhZ2VTZXNzaW9uOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24oUEFMOjpTZXNzaW9uSUQg
c2Vzc2lvbklELCBzdGQ6OnVuaXF1ZV9wdHI8U291cE5ldHdvcmtTZXNzaW9uPiYmIHNlc3Npb24p
CitOZXR3b3JrU3RvcmFnZVNlc3Npb246Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbihQQUw6OlNlc3Np
b25JRCBzZXNzaW9uSUQpCiAgICAgOiBtX3Nlc3Npb25JRChzZXNzaW9uSUQpCi0gICAgLCBtX3Nl
c3Npb24oV1RGTW92ZShzZXNzaW9uKSkKKyAgICAsIG1fY29va2llU3RvcmFnZShhZG9wdEdSZWYo
c291cF9jb29raWVfamFyX25ldygpKSkKIHsKLSAgICBBU1NFUlQobV9zZXNzaW9uLT5jb29raWVK
YXIoKSk7Ci0gICAgZ19zaWduYWxfY29ubmVjdF9zd2FwcGVkKG1fc2Vzc2lvbi0+Y29va2llSmFy
KCksICJjaGFuZ2VkIiwgR19DQUxMQkFDSyhjb29raWVzRGlkQ2hhbmdlKSwgdGhpcyk7CisgICAg
c291cF9jb29raWVfamFyX3NldF9hY2NlcHRfcG9saWN5KG1fY29va2llU3RvcmFnZS5nZXQoKSwg
U09VUF9DT09LSUVfSkFSX0FDQ0VQVF9OT19USElSRF9QQVJUWSk7CisgICAgZ19zaWduYWxfY29u
bmVjdF9zd2FwcGVkKG1fY29va2llU3RvcmFnZS5nZXQoKSwgImNoYW5nZWQiLCBHX0NBTExCQUNL
KGNvb2tpZXNEaWRDaGFuZ2UpLCB0aGlzKTsKIH0KIAogTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjp+
TmV0d29ya1N0b3JhZ2VTZXNzaW9uKCkKIHsKLSAgICBjbGVhclNvdXBOZXR3b3JrU2Vzc2lvbigp
OwotfQotCi1Tb3VwTmV0d29ya1Nlc3Npb24mIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6c291cE5l
dHdvcmtTZXNzaW9uKCkgY29uc3QKLXsKLSAgICBBU1NFUlQobV9zZXNzaW9uKTsKLSAgICByZXR1
cm4gKm1fc2Vzc2lvbi5nZXQoKTsKLX07Ci0KLXZvaWQgTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpj
bGVhclNvdXBOZXR3b3JrU2Vzc2lvbigpCi17Ci0gICAgaWYgKG1fc2Vzc2lvbikgewotICAgICAg
ICBBU1NFUlQobV9zZXNzaW9uLT5jb29raWVKYXIoKSk7Ci0gICAgICAgIGdfc2lnbmFsX2hhbmRs
ZXJzX2Rpc2Nvbm5lY3RfbWF0Y2hlZChtX3Nlc3Npb24tPmNvb2tpZUphcigpLCBHX1NJR05BTF9N
QVRDSF9EQVRBLCAwLCAwLCBudWxscHRyLCBudWxscHRyLCB0aGlzKTsKLSAgICB9Ci0KLSAgICBt
X3Nlc3Npb24gPSBudWxscHRyOwotICAgIG1fY29va2llT2JzZXJ2ZXJIYW5kbGVyID0gbnVsbHB0
cjsKKyAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X21hdGNoZWQobV9jb29raWVTdG9y
YWdlLmdldCgpLCBHX1NJR05BTF9NQVRDSF9EQVRBLCAwLCAwLCBudWxscHRyLCBudWxscHRyLCB0
aGlzKTsKIH0KIAogdm9pZCBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmNvb2tpZXNEaWRDaGFuZ2Uo
TmV0d29ya1N0b3JhZ2VTZXNzaW9uKiBzZXNzaW9uKQpAQCAtODksMjUgKzcyLDExIEBAIHZvaWQg
TmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpjb29raWVzRGlkQ2hhbmdlKE5ldHdvcmtTdG9yYWdlU2Vz
c2lvbiogc2Vzc2lvbikKICAgICAgICAgc2Vzc2lvbi0+bV9jb29raWVPYnNlcnZlckhhbmRsZXIo
KTsKIH0KIAotU291cENvb2tpZUphciogTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpjb29raWVTdG9y
YWdlKCkgY29uc3QKLXsKLSAgICBBU1NFUlQobV9zZXNzaW9uKTsKLSAgICBBU1NFUlQobV9zZXNz
aW9uLT5jb29raWVKYXIoKSk7Ci0gICAgcmV0dXJuIG1fc2Vzc2lvbi0+Y29va2llSmFyKCk7Ci19
Ci0KLXZvaWQgTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpzZXRDb29raWVTdG9yYWdlKFNvdXBDb29r
aWVKYXIqIGphcikKK3ZvaWQgTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpzZXRDb29raWVTdG9yYWdl
KEdSZWZQdHI8U291cENvb2tpZUphcj4mJiBqYXIpCiB7Ci0gICAgQVNTRVJUKGphcik7Ci0gICAg
QVNTRVJUKG1fc2Vzc2lvbik7Ci0gICAgQVNTRVJUKG1fc2Vzc2lvbi0+Y29va2llSmFyKCkpOwot
Ci0gICAgaWYgKG1fc2Vzc2lvbi0+Y29va2llSmFyKCkgPT0gamFyKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X21hdGNoZWQobV9zZXNzaW9uLT5j
b29raWVKYXIoKSwgR19TSUdOQUxfTUFUQ0hfREFUQSwgMCwgMCwgbnVsbHB0ciwgbnVsbHB0ciwg
dGhpcyk7Ci0gICAgbV9zZXNzaW9uLT5zZXRDb29raWVKYXIoamFyKTsKLSAgICBnX3NpZ25hbF9j
b25uZWN0X3N3YXBwZWQobV9zZXNzaW9uLT5jb29raWVKYXIoKSwgImNoYW5nZWQiLCBHX0NBTExC
QUNLKGNvb2tpZXNEaWRDaGFuZ2UpLCB0aGlzKTsKKyAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNj
b25uZWN0X21hdGNoZWQobV9jb29raWVTdG9yYWdlLmdldCgpLCBHX1NJR05BTF9NQVRDSF9EQVRB
LCAwLCAwLCBudWxscHRyLCBudWxscHRyLCB0aGlzKTsKKyAgICBtX2Nvb2tpZVN0b3JhZ2UgPSBX
VEZNb3ZlKGphcik7CisgICAgZ19zaWduYWxfY29ubmVjdF9zd2FwcGVkKG1fY29va2llU3RvcmFn
ZS5nZXQoKSwgImNoYW5nZWQiLCBHX0NBTExCQUNLKGNvb2tpZXNEaWRDaGFuZ2UpLCB0aGlzKTsK
IH0KIAogdm9pZCBOZXR3b3JrU3RvcmFnZVNlc3Npb246OnNldENvb2tpZU9ic2VydmVySGFuZGxl
cihGdW5jdGlvbjx2b2lkICgpPiYmIGhhbmRsZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvU29ja2V0U3RyZWFtSGFuZGxlSW1wbFNvdXAuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1NvY2tldFN0cmVhbUhhbmRsZUlt
cGxTb3VwLmNwcAppbmRleCBlZDc4ZTRkZGQ1OS4uZmJkY2JiMTVlNGQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9Tb2NrZXRTdHJlYW1IYW5kbGVJbXBs
U291cC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1NvY2tl
dFN0cmVhbUhhbmRsZUltcGxTb3VwLmNwcApAQCAtMzYsMTEgKzM2LDkgQEAKIAogI2luY2x1ZGUg
IkRlcHJlY2F0ZWRHbG9iYWxTZXR0aW5ncy5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNs
dWRlICJOZXR3b3JrU3RvcmFnZVNlc3Npb24uaCIKICNpbmNsdWRlICJSZXNvdXJjZUVycm9yLmgi
CiAjaW5jbHVkZSAiU29ja2V0U3RyZWFtRXJyb3IuaCIKICNpbmNsdWRlICJTb2NrZXRTdHJlYW1I
YW5kbGVDbGllbnQuaCIKLSNpbmNsdWRlICJTb3VwTmV0d29ya1Nlc3Npb24uaCIKICNpbmNsdWRl
ICJTdG9yYWdlU2Vzc2lvblByb3ZpZGVyLmgiCiAjaW5jbHVkZSAiVVJMU291cC5oIgogI2luY2x1
ZGUgPGdpby9naW8uaD4KQEAgLTg3LDEzICs4NSwxMyBAQCBSZWY8U29ja2V0U3RyZWFtSGFuZGxl
SW1wbD4gU29ja2V0U3RyZWFtSGFuZGxlSW1wbDo6Y3JlYXRlKGNvbnN0IFVSTCYgdXJsLCBTb2Nr
ZQogICAgIFJlZjxTb2NrZXRTdHJlYW1IYW5kbGVJbXBsPiBzb2NrZXQgPSBhZG9wdFJlZigqbmV3
IFNvY2tldFN0cmVhbUhhbmRsZUltcGwodXJsLCBjbGllbnQsIHN0b3JhZ2VTZXNzaW9uUHJvdmlk
ZXIpKTsKIAogI2lmIFNPVVBfQ0hFQ0tfVkVSU0lPTigyLCA2MSwgOTApCi0gICAgYXV0byogbmV0
d29ya1N0b3JhZ2VTZXNzaW9uID0gc3RvcmFnZVNlc3Npb25Qcm92aWRlciA/IHN0b3JhZ2VTZXNz
aW9uUHJvdmlkZXItPnN0b3JhZ2VTZXNzaW9uKCkgOiBudWxscHRyOwotICAgIGlmICghbmV0d29y
a1N0b3JhZ2VTZXNzaW9uKQorICAgIGF1dG8qIHNvdXBTZXNzaW9uID0gc3RvcmFnZVNlc3Npb25Q
cm92aWRlciA/IHN0b3JhZ2VTZXNzaW9uUHJvdmlkZXItPnNvdXBTZXNzaW9uKCkgOiBudWxscHRy
OworICAgIGlmICghc291cFNlc3Npb24pCiAgICAgICAgIHJldHVybiBzb2NrZXQ7CiAKICAgICBh
dXRvIHVyaSA9IHVybFRvU291cFVSSSh1cmwpOwogICAgIFJlZjxTb2NrZXRTdHJlYW1IYW5kbGU+
IHByb3RlY3RlZFNvY2tldFN0cmVhbUhhbmRsZSA9IHNvY2tldC5jb3B5UmVmKCk7Ci0gICAgc291
cF9zZXNzaW9uX2Nvbm5lY3RfYXN5bmMobmV0d29ya1N0b3JhZ2VTZXNzaW9uLT5zb3VwTmV0d29y
a1Nlc3Npb24oKS5zb3VwU2Vzc2lvbigpLCB1cmkuZ2V0KCksIHNvY2tldC0+bV9jYW5jZWxsYWJs
ZS5nZXQoKSwKKyAgICBzb3VwX3Nlc3Npb25fY29ubmVjdF9hc3luYyhzb3VwU2Vzc2lvbiwgdXJp
LmdldCgpLCBzb2NrZXQtPm1fY2FuY2VsbGFibGUuZ2V0KCksCiAgICAgICAgIHVybC5wcm90b2Nv
bElzKCJ3c3MiKSA/IHJlaW50ZXJwcmV0X2Nhc3Q8U291cFNlc3Npb25Db25uZWN0UHJvZ3Jlc3ND
YWxsYmFjaz4oY29ubmVjdFByb2dyZXNzQ2FsbGJhY2spIDogbnVsbHB0ciwKICAgICAgICAgcmVp
bnRlcnByZXRfY2FzdDxHQXN5bmNSZWFkeUNhbGxiYWNrPihjb25uZWN0ZWRDYWxsYmFjayksICZw
cm90ZWN0ZWRTb2NrZXRTdHJlYW1IYW5kbGUubGVha1JlZigpKTsKICNlbHNlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvU291cE5ldHdvcmtTZXNzaW9u
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9Tb3VwTmV0d29ya1Nl
c3Npb24uY3BwCmluZGV4IDYxMjRmNDZjMjRkLi42MTg5OThmMjUxYiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1NvdXBOZXR3b3JrU2Vzc2lvbi5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1NvdXBOZXR3b3JrU2Vz
c2lvbi5jcHAKQEAgLTEwNiw3ICsxMDYsNyBAQCBzdGF0aWMgQWxsb3dlZENlcnRpZmljYXRlc01h
cCYgYWxsb3dlZENlcnRpZmljYXRlcygpCiAgICAgcmV0dXJuIGNlcnRpZmljYXRlczsKIH0KIAot
U291cE5ldHdvcmtTZXNzaW9uOjpTb3VwTmV0d29ya1Nlc3Npb24oUEFMOjpTZXNzaW9uSUQgc2Vz
c2lvbklELCBTb3VwQ29va2llSmFyKiBjb29raWVKYXIpCitTb3VwTmV0d29ya1Nlc3Npb246OlNv
dXBOZXR3b3JrU2Vzc2lvbihQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCiAgICAgOiBtX3NvdXBT
ZXNzaW9uKGFkb3B0R1JlZihzb3VwX3Nlc3Npb25fbmV3KCkpKQogewogICAgIC8vIFZhbHVlcyB0
YWtlbiBmcm9tIGh0dHA6Ly93d3cuYnJvd3NlcnNjb3BlLm9yZy8gZm9sbG93aW5nCkBAIC0xMTYs
MTkgKzExNiwxMiBAQCBTb3VwTmV0d29ya1Nlc3Npb246OlNvdXBOZXR3b3JrU2Vzc2lvbihQQUw6
OlNlc3Npb25JRCBzZXNzaW9uSUQsIFNvdXBDb29raWVKYXIqCiAgICAgc3RhdGljIGNvbnN0IGlu
dCBtYXhDb25uZWN0aW9ucyA9IDE3OwogICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4Q29ubmVjdGlv
bnNQZXJIb3N0ID0gNjsKIAotICAgIEdSZWZQdHI8U291cENvb2tpZUphcj4gamFyID0gY29va2ll
SmFyOwotICAgIGlmICghamFyKSB7Ci0gICAgICAgIGphciA9IGFkb3B0R1JlZihzb3VwX2Nvb2tp
ZV9qYXJfbmV3KCkpOwotICAgICAgICBzb3VwX2Nvb2tpZV9qYXJfc2V0X2FjY2VwdF9wb2xpY3ko
amFyLmdldCgpLCBTT1VQX0NPT0tJRV9KQVJfQUNDRVBUX05PX1RISVJEX1BBUlRZKTsKLSAgICB9
Ci0KICAgICBnX29iamVjdF9zZXQobV9zb3VwU2Vzc2lvbi5nZXQoKSwKICAgICAgICAgU09VUF9T
RVNTSU9OX01BWF9DT05OUywgbWF4Q29ubmVjdGlvbnMsCiAgICAgICAgIFNPVVBfU0VTU0lPTl9N
QVhfQ09OTlNfUEVSX0hPU1QsIG1heENvbm5lY3Rpb25zUGVySG9zdCwKICAgICAgICAgU09VUF9T
RVNTSU9OX1RJTUVPVVQsIDAsCiAgICAgICAgIFNPVVBfU0VTU0lPTl9JRExFX1RJTUVPVVQsIDAs
CiAgICAgICAgIFNPVVBfU0VTU0lPTl9BRERfRkVBVFVSRV9CWV9UWVBFLCBTT1VQX1RZUEVfQ09O
VEVOVF9TTklGRkVSLAotICAgICAgICBTT1VQX1NFU1NJT05fQUREX0ZFQVRVUkUsIGphci5nZXQo
KSwKICAgICAgICAgbnVsbHB0cik7CiAKICAgICBzZXR1cEN1c3RvbVByb3RvY29scygpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1NvdXBOZXR3b3Jr
U2Vzc2lvbi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1NvdXBOZXR3
b3JrU2Vzc2lvbi5oCmluZGV4IGZmYmQ0OWE3NjJhLi41ZTMyZDMxYWQ0ZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1NvdXBOZXR3b3JrU2Vzc2lvbi5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9Tb3VwTmV0d29ya1Nl
c3Npb24uaApAQCAtNDksNyArNDksNyBAQCBzdHJ1Y3QgU291cE5ldHdvcmtQcm94eVNldHRpbmdz
OwogY2xhc3MgU291cE5ldHdvcmtTZXNzaW9uIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShT
b3VwTmV0d29ya1Nlc3Npb24pOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAg
ICBleHBsaWNpdCBTb3VwTmV0d29ya1Nlc3Npb24oUEFMOjpTZXNzaW9uSUQgPSBQQUw6OlNlc3Np
b25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpLCBTb3VwQ29va2llSmFyKiA9IG51bGxwdHIpOworICAg
IGV4cGxpY2l0IFNvdXBOZXR3b3JrU2Vzc2lvbihQQUw6OlNlc3Npb25JRCk7CiAgICAgflNvdXBO
ZXR3b3JrU2Vzc2lvbigpOwogCiAgICAgU291cFNlc3Npb24qIHNvdXBTZXNzaW9uKCkgY29uc3Qg
eyByZXR1cm4gbV9zb3VwU2Vzc2lvbi5nZXQoKTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCBmODM3ZjI0OWQ4Zi4u
NDBlNzVkNTlmMGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTggQEAKKzIwMTktMDctMjQgIENhcmxv
cyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgorCisgICAgICAgIFtTT1VQXSBN
b3ZlIFNvdXBOZXR3b3JrU2Vzc2lvbiBvd25lcnNoaXAgZnJvbSBOZXR3b3JrU3RvcmFnZVNlc3Np
b24gdG8gTmV0d29ya1Nlc3Npb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIwMDA3NgorCisgICAgICAgIFJldmlld2VkIGJ5IE1pY2hhZWwgQ2F0YW56
YXJvLgorCisgICAgICAgIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiBzaG91bGQgb25seSBvd24gdGhl
IGNvb2tpZSBqYXIsIHNpbmNlIGl0J3MgdGhlIG9ubHkgdGhpbmcgaXQgaGFuZGxlcyBmcm9tIHRo
ZSBzZXNzaW9uLgorCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvQ29va2llcy9zb3VwL1dlYkNv
b2tpZU1hbmFnZXJTb3VwLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlcjo6
c2V0Q29va2llUGVyc2lzdGVudFN0b3JhZ2UpOiBVc2UgdGhlIG5ldHdvcmsgc2Vzc2lvbiBpbnN0
ZWFkIG9mIHRoZSBzdG9yYWdlIHNlc3Npb24KKyAgICAgICAgdG8gc2V0IHRoZSBwZXJpc3RlbnQg
Y29va2llIHN0b3JhZ2UuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvQ3VzdG9tUHJvdG9jb2xz
L3NvdXAvTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyU291cC5jcHA6CisgICAgICAgIChXZWJL
aXQ6OkxlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlcjo6cmVnaXN0ZXJTY2hlbWUpOiBJdGVyYXRl
IG5ldHdvcmsgc2Vzc2lvbnMgaW5zdGVhZCBvZiBzdG9yYWdlIHNlc3Npb25zIHRvCisgICAgICAg
IGFjY2VzcyB0aGUgU291cE5ldHdvcmtTZXNzaW9uLgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNz
L05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0
d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OnJlc291cmNlTG9hZFN0YXRpc3RpY3NVcGRhdGVk
KTogVXNlCisgICAgICAgIE5ldHdvcmtQcm9jZXNzOjpmb3JFYWNoTmV0d29ya1Nlc3Npb24oKSB0
byBpdGVyYXRlIG5ldHdvcmsgc2Vzc2lvbnMuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0
d29ya1Byb2Nlc3MuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6bG93TWVt
b3J5SGFuZGxlcik6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6Zm9y
RWFjaE5ldHdvcmtTZXNzaW9uKTogQWRkZWQgdG8gaXRlcmF0ZSBuZXR3b3JrIHNlc3Npb25zIGlu
dGVhZCBvZiBleHBvc2luZyB0aGUgbWFwCisgICAgICAgIHRoYXQgaXMgYWx3YXlzIHVzZWQgdG8g
aXRlcmF0ZSB0aGUgc2Vzc2lvbnMuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpz
d2l0Y2hUb05ld1Rlc3RpbmdTZXNzaW9uKTogVXNlIHRoZSBuZXcgTmV0d29ya1N0b3JhZ2VTZXNz
aW9uIGNvbnN0cnVjdG9yIEFQSS4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmVu
c3VyZVNlc3Npb24pOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmRl
c3Ryb3lTZXNzaW9uKTogQWxsb3cgdG8gZGVzdHJveSB0aGUgZGVmYXVsdCBzZXNzaW9uIGZvciBz
b3VwIGJhc2VkIHBvcnRzLiBUaGlzIGlzCisgICAgICAgIG9ubHkgY2FsbGVkIHJpZ2h0IGJlZm9y
ZSBwcm9jZXNzIGV4aXQgdG8gZW5zdXJlIHdlIGRvbid0IGxlYWsgbmV0d29yayByZXNvdXJjZXMg
bGlrZSB0aGUgY29va2llcyBkYXRhYmFzZS4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nl
c3M6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKTogVXNlIE5ldHdvcmtQcm9jZXNz
Ojpmb3JFYWNoTmV0d29ya1Nlc3Npb24oKSB0bworICAgICAgICBpdGVyYXRlIG5ldHdvcmsgc2Vz
c2lvbnMuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpmZXRjaFdlYnNpdGVEYXRh
KTogRGl0dG8uCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpkZWxldGVXZWJzaXRl
RGF0YUZvck9yaWdpbnMpOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6
OmRlbGV0ZVdlYnNpdGVEYXRhRm9yUmVnaXN0cmFibGVEb21haW5zKTogRGl0dG8uCisgICAgICAg
IChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpyZWdpc3RyYWJsZURvbWFpbnNXaXRoV2Vic2l0ZURh
dGEpOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OnNldENhY2hlTW9k
ZWwpOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmFjdHVhbFByZXBh
cmVUb1N1c3BlbmQpOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OnJl
c3VtZSk6IERpdHRvLgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmg6
CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1N0b3JhZ2VTZXNzaW9uUHJvdmlkZXIu
aDoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrUHJvY2Vzc0NvY29hLm1t
OgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6Y2xlYXJEaXNrQ2FjaGUpOiBEaXR0
by4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9pb3MvTmV0d29ya1Byb2Nlc3NJT1MubW06Cisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpjbGVhckNhY2hlRm9yQWxsT3JpZ2lucyk6
IERpdHRvLgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Byb2Nlc3NNYWlu
U291cC5jcHA6IERlc3Ryb3kgdGhlIGRlZmF1bHQgc2Vzc2lvbiBiZWZvcmUgcHJvY2VzcyBleGlz
dHMuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrUHJvY2Vzc1NvdXAuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6dXNlclByZWZlcnJlZExhbmd1YWdl
c0NoYW5nZWQpOiBJdGVyYXRlIG5ldHdvcmsgc2Vzc2lvbnMgaW5zdGVhZCBvZiBzdG9yYWdlIHNl
c3Npb25zIHRvCisgICAgICAgIGFjY2VzcyB0aGUgU291cE5ldHdvcmtTZXNzaW9uLgorICAgICAg
ICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1DcmVhdGVEZWZhdWx0U3RvcmFnZVNl
c3Npb24gY29uc3QpOiBVc2UgdGhlIG5ldyBOZXR3b3JrU3RvcmFnZVNlc3Npb24gY29uc3RydWN0
b3IgQVBJLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6Y2xlYXJEaXNrQ2FjaGUp
OiBVc2UgTmV0d29ya1Byb2Nlc3M6OmZvckVhY2hOZXR3b3JrU2Vzc2lvbigpIHRvIGl0ZXJhdGUg
bmV0d29yayBzZXNzaW9ucy4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OnNldE5l
dHdvcmtQcm94eVNldHRpbmdzKTogSXRlcmF0ZSBuZXR3b3JrIHNlc3Npb25zIGluc3RlYWQgb2Yg
c3RvcmFnZSBzZXNzaW9ucyB0bworICAgICAgICBhY2Nlc3MgdGhlIFNvdXBOZXR3b3JrU2Vzc2lv
bi4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtTZXNzaW9uU291cC5jcHA6
CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtTZXNzaW9uU291cDo6TmV0d29ya1Nlc3Npb25Tb3Vw
KTogQ3JlYXRlIHRoZSBTb3VwTmV0d29ya1Nlc3Npb24gYW5kIHNldHVwIGNvb2tpZXMuCisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtTZXNzaW9uU291cDo6c291cFNlc3Npb24gY29uc3QpOiBSZXR1
cm4gdGhlIFNvdXBTZXNzaW9uIG9mIFNvdXBOZXR3b3JrU2Vzc2lvbi4KKyAgICAgICAgKFdlYktp
dDo6TmV0d29ya1Nlc3Npb25Tb3VwOjpzZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZSk6IFNldHVw
IGEgbmV3IGNvb2tpZSBqYXIuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3Jr
U2Vzc2lvblNvdXAuaDoKKwogMjAxOS0wNy0yNiAgUm9iIEJ1aXMgIDxyYnVpc0BpZ2FsaWEuY29t
PgogCiAgICAgICAgIE1ha2Ugc3RvcmluZyBjcm9zcy1vcmlnaW4gdG9wLWxldmVsIHByZWZldGNo
ZXMgaW4gSFRUUCBjYWNoZSBvcHRpb25hbApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9Db29raWVzL3NvdXAvV2ViQ29va2llTWFuYWdlclNvdXAuY3BwIGIvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Db29raWVzL3NvdXAvV2ViQ29va2llTWFuYWdlclNvdXAu
Y3BwCmluZGV4IDI4Y2FiMjA4OTRhLi40ZDk3ZGE3YjY5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9Db29raWVzL3NvdXAvV2ViQ29va2llTWFuYWdlclNvdXAuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ29va2llcy9zb3VwL1dlYkNvb2tp
ZU1hbmFnZXJTb3VwLmNwcApAQCAtMjcsMTIgKzI3LDExIEBACiAjaW5jbHVkZSAiV2ViQ29va2ll
TWFuYWdlci5oIgogCiAjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3MuaCIKKyNpbmNsdWRlICJOZXR3
b3JrU2Vzc2lvblNvdXAuaCIKICNpbmNsdWRlICJTb3VwQ29va2llUGVyc2lzdGVudFN0b3JhZ2VU
eXBlLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9OZXR3b3JrU3RvcmFnZVNlc3Npb24uaD4KICNpbmNs
dWRlIDxXZWJDb3JlL1NvdXBOZXR3b3JrU2Vzc2lvbi5oPgogI2luY2x1ZGUgPGxpYnNvdXAvc291
cC5oPgotI2luY2x1ZGUgPHd0Zi9nbGliL0dSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9D
U3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7
CkBAIC03NywyMiArNzYsOCBAQCBIVFRQQ29va2llQWNjZXB0UG9saWN5IFdlYkNvb2tpZU1hbmFn
ZXI6OnBsYXRmb3JtR2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeSgpCiAKIHZvaWQgV2ViQ29va2ll
TWFuYWdlcjo6c2V0Q29va2llUGVyc2lzdGVudFN0b3JhZ2UoUEFMOjpTZXNzaW9uSUQgc2Vzc2lv
bklELCBjb25zdCBTdHJpbmcmIHN0b3JhZ2VQYXRoLCBTb3VwQ29va2llUGVyc2lzdGVudFN0b3Jh
Z2VUeXBlIHN0b3JhZ2VUeXBlKQogewotICAgIEdSZWZQdHI8U291cENvb2tpZUphcj4gamFyOwot
ICAgIHN3aXRjaCAoc3RvcmFnZVR5cGUpIHsKLSAgICBjYXNlIFNvdXBDb29raWVQZXJzaXN0ZW50
U3RvcmFnZVR5cGU6OlRleHQ6Ci0gICAgICAgIGphciA9IGFkb3B0R1JlZihzb3VwX2Nvb2tpZV9q
YXJfdGV4dF9uZXcoc3RvcmFnZVBhdGgudXRmOCgpLmRhdGEoKSwgRkFMU0UpKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBTb3VwQ29va2llUGVyc2lzdGVudFN0b3JhZ2VUeXBlOjpTUUxpdGU6
Ci0gICAgICAgIGphciA9IGFkb3B0R1JlZihzb3VwX2Nvb2tpZV9qYXJfZGJfbmV3KHN0b3JhZ2VQ
YXRoLnV0ZjgoKS5kYXRhKCksIEZBTFNFKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6
Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KLQotICAgIGlmIChhdXRvKiBz
dG9yYWdlU2Vzc2lvbiA9IG1fcHJvY2Vzcy5zdG9yYWdlU2Vzc2lvbihzZXNzaW9uSUQpKSB7Ci0g
ICAgICAgIHNvdXBfY29va2llX2phcl9zZXRfYWNjZXB0X3BvbGljeShqYXIuZ2V0KCksIHNvdXBf
Y29va2llX2phcl9nZXRfYWNjZXB0X3BvbGljeShzdG9yYWdlU2Vzc2lvbi0+Y29va2llU3RvcmFn
ZSgpKSk7Ci0gICAgICAgIHN0b3JhZ2VTZXNzaW9uLT5zZXRDb29raWVTdG9yYWdlKGphci5nZXQo
KSk7Ci0gICAgfQorICAgIGlmIChhdXRvKiBuZXR3b3JrU2Vzc2lvbiA9IG1fcHJvY2Vzcy5uZXR3
b3JrU2Vzc2lvbihzZXNzaW9uSUQpKQorICAgICAgICBzdGF0aWNfY2FzdDxOZXR3b3JrU2Vzc2lv
blNvdXAmPigqbmV0d29ya1Nlc3Npb24pLnNldENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlKHN0b3Jh
Z2VQYXRoLCBzdG9yYWdlVHlwZSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DdXN0b21Qcm90b2NvbHMvc291cC9M
ZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJTb3VwLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvQ3VzdG9tUHJvdG9jb2xzL3NvdXAvTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2Vy
U291cC5jcHAKaW5kZXggNTExZGQwNGQ2NjcuLjJjNGQyZmY5NDgwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0N1c3RvbVByb3RvY29scy9zb3VwL0xlZ2FjeUN1c3Rv
bVByb3RvY29sTWFuYWdlclNvdXAuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvQ3VzdG9tUHJvdG9jb2xzL3NvdXAvTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyU291cC5j
cHAKQEAgLTIzLDggKzIzLDggQEAKICNpbmNsdWRlICJEYXRhUmVmZXJlbmNlLmgiCiAjaW5jbHVk
ZSAiTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyTWVzc2FnZXMuaCIKICNpbmNsdWRlICJOZXR3
b3JrUHJvY2Vzcy5oIgorI2luY2x1ZGUgIk5ldHdvcmtTZXNzaW9uU291cC5oIgogI2luY2x1ZGUg
IldlYktpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW0uaCIKLSNpbmNsdWRlIDxXZWJDb3JlL05ldHdv
cmtTdG9yYWdlU2Vzc2lvbi5oPgogI2luY2x1ZGUgPFdlYkNvcmUvTm90SW1wbGVtZW50ZWQuaD4K
ICNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlRXJyb3IuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Jl
c291cmNlUmVxdWVzdC5oPgpAQCAtMTAyLDggKzEwMiw4IEBAIHZvaWQgTGVnYWN5Q3VzdG9tUHJv
dG9jb2xNYW5hZ2VyOjpyZWdpc3RlclNjaGVtZShjb25zdCBTdHJpbmcmIHNjaGVtZSkKICAgICBh
dXRvKiBnZW5lcmljUmVxdWVzdENsYXNzID0gc3RhdGljX2Nhc3Q8U291cFJlcXVlc3RDbGFzcyo+
KGdfdHlwZV9jbGFzc19wZWVrKFdFQktJVF9UWVBFX1NPVVBfUkVRVUVTVF9HRU5FUklDKSk7CiAg
ICAgQVNTRVJUKGdlbmVyaWNSZXF1ZXN0Q2xhc3MpOwogICAgIGdlbmVyaWNSZXF1ZXN0Q2xhc3Mt
PnNjaGVtZXMgPSBjb25zdF9jYXN0PGNvbnN0IGNoYXIqKj4ocmVpbnRlcnByZXRfY2FzdDxjaGFy
Kio+KG1fcmVnaXN0ZXJlZFNjaGVtZXMtPnBkYXRhKSk7Ci0gICAgbGFzdENyZWF0ZWROZXR3b3Jr
UHJvY2VzcygpLT5mb3JFYWNoTmV0d29ya1N0b3JhZ2VTZXNzaW9uKFtdKGNvbnN0IGF1dG8mIHNl
c3Npb24pIHsKLSAgICAgICAgc2Vzc2lvbi5zb3VwTmV0d29ya1Nlc3Npb24oKS5zZXR1cEN1c3Rv
bVByb3RvY29scygpOworICAgIGxhc3RDcmVhdGVkTmV0d29ya1Byb2Nlc3MoKS0+Zm9yRWFjaE5l
dHdvcmtTZXNzaW9uKFtdKGNvbnN0IGF1dG8mIHNlc3Npb24pIHsKKyAgICAgICAgc3RhdGljX2Nh
c3Q8Y29uc3QgTmV0d29ya1Nlc3Npb25Tb3VwJj4oc2Vzc2lvbikuc291cE5ldHdvcmtTZXNzaW9u
KCkuc2V0dXBDdXN0b21Qcm90b2NvbHMoKTsKICAgICB9KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5j
cHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzLmNwcAppbmRleCA5MzNjM2FlYjJlMi4uNDk1ZGY3YjBmNGUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3Mu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25U
b1dlYlByb2Nlc3MuY3BwCkBAIC02OTYsMTMgKzY5NiwxMyBAQCB2b2lkIE5ldHdvcmtDb25uZWN0
aW9uVG9XZWJQcm9jZXNzOjpsb2dTdWJyZXNvdXJjZVJlZGlyZWN0KFBBTDo6U2Vzc2lvbklEIHNl
c3NpbwogCiB2b2lkIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpyZXNvdXJjZUxvYWRT
dGF0aXN0aWNzVXBkYXRlZChWZWN0b3I8V2ViQ29yZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljcz4m
JiBzdGF0aXN0aWNzKQogewotICAgIGZvciAoYXV0byYgbmV0d29ya1Nlc3Npb24gOiBuZXR3b3Jr
UHJvY2VzcygpLm5ldHdvcmtTZXNzaW9ucygpLnZhbHVlcygpKSB7Ci0gICAgICAgIGlmIChuZXR3
b3JrU2Vzc2lvbi0+c2Vzc2lvbklEKCkuaXNFcGhlbWVyYWwoKSkKLSAgICAgICAgICAgIGNvbnRp
bnVlOworICAgIG5ldHdvcmtQcm9jZXNzKCkuZm9yRWFjaE5ldHdvcmtTZXNzaW9uKFtzdGF0aXN0
aWNzID0gV1RGTW92ZShzdGF0aXN0aWNzKV0oTmV0d29ya1Nlc3Npb24mIG5ldHdvcmtTZXNzaW9u
KSBtdXRhYmxlIHsKKyAgICAgICAgaWYgKG5ldHdvcmtTZXNzaW9uLnNlc3Npb25JRCgpLmlzRXBo
ZW1lcmFsKCkpCisgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgaWYgKGF1dG8qIHJlc291
cmNlTG9hZFN0YXRpc3RpY3MgPSBuZXR3b3JrU2Vzc2lvbi0+cmVzb3VyY2VMb2FkU3RhdGlzdGlj
cygpKQorICAgICAgICBpZiAoYXV0byogcmVzb3VyY2VMb2FkU3RhdGlzdGljcyA9IG5ldHdvcmtT
ZXNzaW9uLnJlc291cmNlTG9hZFN0YXRpc3RpY3MoKSkKICAgICAgICAgICAgIHJlc291cmNlTG9h
ZFN0YXRpc3RpY3MtPnJlc291cmNlTG9hZFN0YXRpc3RpY3NVcGRhdGVkKFdURk1vdmUoc3RhdGlz
dGljcykpOwotICAgIH0KKyAgICB9KTsKIH0KIAogdm9pZCBOZXR3b3JrQ29ubmVjdGlvblRvV2Vi
UHJvY2Vzczo6aGFzU3RvcmFnZUFjY2VzcyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0
IFJlZ2lzdHJhYmxlRG9tYWluJiBzdWJGcmFtZURvbWFpbiwgY29uc3QgUmVnaXN0cmFibGVEb21h
aW4mIHRvcEZyYW1lRG9tYWluLCB1aW50NjRfdCBmcmFtZUlELCBQYWdlSWRlbnRpZmllciBwYWdl
SUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNw
cCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCmluZGV4
IGZmMGY4MzhiNGE5Li45YWQwNWFkMDI3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKQEAgLTEwMCw2ICsxMDAsNyBAQAogI2VuZGlmCiAK
ICNpZiBVU0UoU09VUCkKKyNpbmNsdWRlICJOZXR3b3JrU2Vzc2lvblNvdXAuaCIKICNpbmNsdWRl
IDxXZWJDb3JlL0ROU1Jlc29sdmVRdWV1ZVNvdXAuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1NvdXBO
ZXR3b3JrU2Vzc2lvbi5oPgogI2VuZGlmCkBAIC0xNTEsOCArMTUyLDggQEAgTmV0d29ya1Byb2Nl
c3M6Ok5ldHdvcmtQcm9jZXNzKEF1eGlsaWFyeVByb2Nlc3NJbml0aWFsaXphdGlvblBhcmFtZXRl
cnMmJiBwYXJhbWUKICNlbmRpZgogCiAjaWYgVVNFKFNPVVApCi0gICAgRE5TUmVzb2x2ZVF1ZXVl
U291cDo6c2V0R2xvYmFsRGVmYXVsdE5ldHdvcmtTdG9yYWdlU2Vzc2lvbkFjY2Vzc29yKFt0aGlz
XSgpIC0+IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgewotICAgICAgICByZXR1cm4gZGVmYXVsdFN0
b3JhZ2VTZXNzaW9uKCk7CisgICAgRE5TUmVzb2x2ZVF1ZXVlU291cDo6c2V0R2xvYmFsRGVmYXVs
dFNvdXBTZXNzaW9uQWNjZXNzb3IoW3RoaXNdKCkgLT4gU291cFNlc3Npb24qIHsKKyAgICAgICAg
cmV0dXJuIHN0YXRpY19jYXN0PE5ldHdvcmtTZXNzaW9uU291cCY+KCpuZXR3b3JrU2Vzc2lvbihQ
QUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKSkuc291cFNlc3Npb24oKTsKICAgICB9
KTsKICNlbmRpZgogCkBAIC0yNzQsOCArMjc1LDkgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6bG93
TWVtb3J5SGFuZGxlcihDcml0aWNhbCBjcml0aWNhbCkKIAogICAgIFdURjo6cmVsZWFzZUZhc3RN
YWxsb2NGcmVlTWVtb3J5KCk7CiAKLSAgICBmb3IgKGF1dG8mIG5ldHdvcmtTZXNzaW9uIDogbV9u
ZXR3b3JrU2Vzc2lvbnMudmFsdWVzKCkpCi0gICAgICAgIG5ldHdvcmtTZXNzaW9uLT5jbGVhclBy
ZWZldGNoQ2FjaGUoKTsKKyAgICBmb3JFYWNoTmV0d29ya1Nlc3Npb24oW10oTmV0d29ya1Nlc3Np
b24mIG5ldHdvcmtTZXNzaW9uKSB7CisgICAgICAgIG5ldHdvcmtTZXNzaW9uLmNsZWFyUHJlZmV0
Y2hDYWNoZSgpOworICAgIH0pOwogfQogCiB2b2lkIE5ldHdvcmtQcm9jZXNzOjppbml0aWFsaXpl
TmV0d29ya1Byb2Nlc3MoTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmJiBwYXJhbWV0
ZXJzKQpAQCAtNDg2LDYgKzQ4OCwxMiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjppbml0aWFsaXpl
U3RvcmFnZVF1b3RhKGNvbnN0IFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzJiBwYQogICAgIG1h
bmFnZXJzLnNldERlZmF1bHRRdW90YXMocGFyYW1ldGVycy5wZXJPcmlnaW5TdG9yYWdlUXVvdGEs
IHBhcmFtZXRlcnMucGVyVGhpcmRQYXJ0eU9yaWdpblN0b3JhZ2VRdW90YSk7CiB9CiAKK3ZvaWQg
TmV0d29ya1Byb2Nlc3M6OmZvckVhY2hOZXR3b3JrU2Vzc2lvbihjb25zdCBGdW5jdGlvbjx2b2lk
KE5ldHdvcmtTZXNzaW9uJik+JiBmdW5jdG9yKQoreworICAgIGZvciAoYXV0byYgc2Vzc2lvbiA6
IG1fbmV0d29ya1Nlc3Npb25zLnZhbHVlcygpKQorICAgICAgICBmdW5jdG9yKCpzZXNzaW9uKTsK
K30KKwogdm9pZCBOZXR3b3JrUHJvY2Vzczo6c3dpdGNoVG9OZXdUZXN0aW5nU2Vzc2lvbigpCiB7
CiAjaWYgUExBVEZPUk0oQ09DT0EpCkBAIC01MDIsOSArNTEwLDcgQEAgdm9pZCBOZXR3b3JrUHJv
Y2Vzczo6c3dpdGNoVG9OZXdUZXN0aW5nU2Vzc2lvbigpCiAgICAgfQogCiAgICAgbV9kZWZhdWx0
TmV0d29ya1N0b3JhZ2VTZXNzaW9uID0gc3RkOjptYWtlX3VuaXF1ZTxXZWJDb3JlOjpOZXR3b3Jr
U3RvcmFnZVNlc3Npb24+KFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCksIFdURk1v
dmUoc2Vzc2lvbiksIFdURk1vdmUoY29va2llU3RvcmFnZSkpOwotI2VsaWYgVVNFKFNPVVApCi0g
ICAgbV9kZWZhdWx0TmV0d29ya1N0b3JhZ2VTZXNzaW9uID0gc3RkOjptYWtlX3VuaXF1ZTxXZWJD
b3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24+KFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lv
bklEKCksIHN0ZDo6bWFrZV91bmlxdWU8V2ViQ29yZTo6U291cE5ldHdvcmtTZXNzaW9uPigpKTsK
LSNlbGlmIFVTRShDVVJMKQorI2VsaWYgVVNFKENVUkwpIHx8IFVTRShTT1VQKQogICAgIG1fZGVm
YXVsdE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiA9IHN0ZDo6bWFrZV91bmlxdWU8V2ViQ29yZTo6TmV0
d29ya1N0b3JhZ2VTZXNzaW9uPihQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKTsK
ICNlbmRpZgogfQpAQCAtNTM2LDkgKzU0Miw3IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmVuc3Vy
ZVNlc3Npb24oY29uc3QgUEFMOjpTZXNzaW9uSUQmIHNlc3Npb25JRCwgY29uc3QgU3RyaW5nCiAg
ICAgfQogCiAgICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IHN0ZDo6bWFrZV91bmlxdWU8
TmV0d29ya1N0b3JhZ2VTZXNzaW9uPihzZXNzaW9uSUQsIFdURk1vdmUoc3RvcmFnZVNlc3Npb24p
LCBXVEZNb3ZlKGNvb2tpZVN0b3JhZ2UpKTsKLSNlbGlmIFVTRShTT1VQKQotICAgIGFkZFJlc3Vs
dC5pdGVyYXRvci0+dmFsdWUgPSBzdGQ6Om1ha2VfdW5pcXVlPE5ldHdvcmtTdG9yYWdlU2Vzc2lv
bj4oc2Vzc2lvbklELCBzdGQ6Om1ha2VfdW5pcXVlPFNvdXBOZXR3b3JrU2Vzc2lvbj4oc2Vzc2lv
bklEKSk7Ci0jZWxpZiBVU0UoQ1VSTCkKKyNlbGlmIFVTRShDVVJMKSB8fCBVU0UoU09VUCkKICAg
ICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gc3RkOjptYWtlX3VuaXF1ZTxOZXR3b3JrU3Rv
cmFnZVNlc3Npb24+KHNlc3Npb25JRCk7CiAjZW5kaWYKIH0KQEAgLTU5NCw3ICs1OTgsMTEgQEAg
dm9pZCBOZXR3b3JrUHJvY2Vzczo6ZGVzdHJveVNlc3Npb24oY29uc3QgUEFMOjpTZXNzaW9uSUQm
IHNlc3Npb25JRCkKICAgICBpZiAoIXNlc3Npb25JRC5pc1ZhbGlkKCkpCiAgICAgICAgIHJldHVy
bjsKIAorI2lmICFVU0UoU09VUCkKKyAgICAvLyBTb3VwIGJhc2VkIHBvcnRzIGRlc3Ryb3kgdGhl
IGRlZmF1bHQgc2Vzc2lvbiByaWdodCBiZWZvcmUgdGhlIHByb2Nlc3MgZXhpdHMgdG8gYXZvaWQg
bGVha2luZworICAgIC8vIG5ldHdvcmsgcmVzb3VyY2VzIGxpa2UgdGhlIGNvb2tpZXMgZGF0YWJh
c2UuCiAgICAgQVNTRVJUKHNlc3Npb25JRCAhPSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Np
b25JRCgpKTsKKyNlbmRpZgogCiAgICAgaWYgKGF1dG8gc2Vzc2lvbiA9IG1fbmV0d29ya1Nlc3Np
b25zLnRha2Uoc2Vzc2lvbklEKSkKICAgICAgICAgc2Vzc2lvbi0+aW52YWxpZGF0ZUFuZENhbmNl
bCgpOwpAQCAtMTE0Niw4ICsxMTU0LDkgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6c2V0U2hvdWxk
Q2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwoUEFMOjpTZXMKIAogdm9p
ZCBOZXR3b3JrUHJvY2Vzczo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoYm9vbCBl
bmFibGVkKQogewotICAgIGZvciAoYXV0byYgbmV0d29ya1Nlc3Npb24gOiBtX25ldHdvcmtTZXNz
aW9ucy52YWx1ZXMoKSkKLSAgICAgICAgbmV0d29ya1Nlc3Npb24tPnNldFJlc291cmNlTG9hZFN0
YXRpc3RpY3NFbmFibGVkKGVuYWJsZWQpOworICAgIGZvckVhY2hOZXR3b3JrU2Vzc2lvbihbZW5h
YmxlZF0oTmV0d29ya1Nlc3Npb24mIG5ldHdvcmtTZXNzaW9uKSB7CisgICAgICAgIG5ldHdvcmtT
ZXNzaW9uLnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKGVuYWJsZWQpOworICAgIH0p
OwogfQogCiB2b2lkIE5ldHdvcmtQcm9jZXNzOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVi
dWdNb2RlKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgYm9vbCBkZWJ1Z01vZGUsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTEzNTksMTEgKzEzNjgs
MTEgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6ZmV0Y2hXZWJzaXRlRGF0YShQQUw6OlNlc3Npb25J
RCBzZXNzaW9uSUQsIE9wdGlvblNldDxXZWJzaXQKICAgICB9CiAjZW5kaWYKICAgICBpZiAod2Vi
c2l0ZURhdGFUeXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6OkRpc2tDYWNoZSkpIHsKLSAg
ICAgICAgZm9yIChhdXRvJiBzZXNzaW9uIDogbmV0d29ya1Nlc3Npb25zKCkudmFsdWVzKCkpIHsK
LSAgICAgICAgICAgIGZldGNoRGlza0NhY2hlRW50cmllcyhzZXNzaW9uLT5jYWNoZSgpLCBzZXNz
aW9uSUQsIGZldGNoT3B0aW9ucywgW2NhbGxiYWNrQWdncmVnYXRvciA9IFdURk1vdmUoY2FsbGJh
Y2tBZ2dyZWdhdG9yKV0oYXV0byBlbnRyaWVzKSBtdXRhYmxlIHsKKyAgICAgICAgZm9yRWFjaE5l
dHdvcmtTZXNzaW9uKFtzZXNzaW9uSUQsIGZldGNoT3B0aW9ucywgY2FsbGJhY2tBZ2dyZWdhdG9y
ID0gV1RGTW92ZShjYWxsYmFja0FnZ3JlZ2F0b3IpXShOZXR3b3JrU2Vzc2lvbiYgc2Vzc2lvbikg
bXV0YWJsZSB7CisgICAgICAgICAgICBmZXRjaERpc2tDYWNoZUVudHJpZXMoc2Vzc2lvbi5jYWNo
ZSgpLCBzZXNzaW9uSUQsIGZldGNoT3B0aW9ucywgW2NhbGxiYWNrQWdncmVnYXRvciA9IFdURk1v
dmUoY2FsbGJhY2tBZ2dyZWdhdG9yKV0oYXV0byBlbnRyaWVzKSBtdXRhYmxlIHsKICAgICAgICAg
ICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3ItPm1fd2Vic2l0ZURhdGEuZW50cmllcy5hcHBlbmRW
ZWN0b3IoZW50cmllcyk7CiAgICAgICAgICAgICB9KTsKLSAgICAgICAgfQorICAgICAgICB9KTsK
ICAgICB9CiB9CiAKQEAgLTE1MTksOCArMTUyOCw5IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmRl
bGV0ZVdlYnNpdGVEYXRhRm9yT3JpZ2lucyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIE9wdGlv
CiAjZW5kaWYKIAogICAgIGlmICh3ZWJzaXRlRGF0YVR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRh
VHlwZTo6RGlza0NhY2hlKSAmJiAhc2Vzc2lvbklELmlzRXBoZW1lcmFsKCkpIHsKLSAgICAgICAg
Zm9yIChhdXRvJiBzZXNzaW9uIDogbmV0d29ya1Nlc3Npb25zKCkudmFsdWVzKCkpCi0gICAgICAg
ICAgICBjbGVhckRpc2tDYWNoZUVudHJpZXMoc2Vzc2lvbi0+Y2FjaGUoKSwgb3JpZ2luRGF0YXMs
IFtjbGVhclRhc2tzSGFuZGxlciA9IFdURk1vdmUoY2xlYXJUYXNrc0hhbmRsZXIpXSB7IH0pOwor
ICAgICAgICBmb3JFYWNoTmV0d29ya1Nlc3Npb24oW29yaWdpbkRhdGFzLCBjbGVhclRhc2tzSGFu
ZGxlciA9IFdURk1vdmUoY2xlYXJUYXNrc0hhbmRsZXIpXShOZXR3b3JrU2Vzc2lvbiYgc2Vzc2lv
bikgbXV0YWJsZSB7CisgICAgICAgICAgICBjbGVhckRpc2tDYWNoZUVudHJpZXMoc2Vzc2lvbi5j
YWNoZSgpLCBvcmlnaW5EYXRhcywgW2NsZWFyVGFza3NIYW5kbGVyID0gV1RGTW92ZShjbGVhclRh
c2tzSGFuZGxlcildIHsgfSk7CisgICAgICAgIH0pOwogICAgIH0KIAogICAgIGlmICh3ZWJzaXRl
RGF0YVR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6Q3JlZGVudGlhbHMpKSB7CkBAIC0x
NzU0LDggKzE3NjQsOCBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpkZWxldGVXZWJzaXRlRGF0YUZv
clJlZ2lzdHJhYmxlRG9tYWlucyhQQUw6OlNlc3Npb25JRCBzZXNzaQogI2VuZGlmCiAKICAgICBp
ZiAod2Vic2l0ZURhdGFUeXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6OkRpc2tDYWNoZSkp
IHsKLSAgICAgICAgZm9yIChhdXRvJiBzZXNzaW9uIDogbmV0d29ya1Nlc3Npb25zKCkudmFsdWVz
KCkpIHsKLSAgICAgICAgICAgIGZldGNoRGlza0NhY2hlRW50cmllcyhzZXNzaW9uLT5jYWNoZSgp
LCBzZXNzaW9uSUQsIGZldGNoT3B0aW9ucywgW2RvbWFpbnNUb0RlbGV0ZUFsbEJ1dENvb2tpZXNG
b3IsIGNhbGxiYWNrQWdncmVnYXRvciA9IGNhbGxiYWNrQWdncmVnYXRvci5jb3B5UmVmKCksIHNl
c3Npb24gPSBtYWtlV2Vha1B0cihzZXNzaW9uLmdldCgpKV0oYXV0byBlbnRyaWVzKSBtdXRhYmxl
IHsKKyAgICAgICAgZm9yRWFjaE5ldHdvcmtTZXNzaW9uKFtzZXNzaW9uSUQsIGZldGNoT3B0aW9u
cywgJmRvbWFpbnNUb0RlbGV0ZUFsbEJ1dENvb2tpZXNGb3IsICZjYWxsYmFja0FnZ3JlZ2F0b3Jd
KE5ldHdvcmtTZXNzaW9uJiBzZXNzaW9uKSB7CisgICAgICAgICAgICBmZXRjaERpc2tDYWNoZUVu
dHJpZXMoc2Vzc2lvbi5jYWNoZSgpLCBzZXNzaW9uSUQsIGZldGNoT3B0aW9ucywgW2RvbWFpbnNU
b0RlbGV0ZUFsbEJ1dENvb2tpZXNGb3IsIGNhbGxiYWNrQWdncmVnYXRvciA9IGNhbGxiYWNrQWdn
cmVnYXRvci5jb3B5UmVmKCksIHNlc3Npb24gPSBtYWtlV2Vha1B0cigmc2Vzc2lvbildKGF1dG8g
ZW50cmllcykgbXV0YWJsZSB7CiAgICAgICAgICAgICAgICAgaWYgKCFzZXNzaW9uKQogICAgICAg
ICAgICAgICAgICAgICByZXR1cm47CiAKQEAgLTE3NjgsNyArMTc3OCw3IEBAIHZvaWQgTmV0d29y
a1Byb2Nlc3M6OmRlbGV0ZVdlYnNpdGVEYXRhRm9yUmVnaXN0cmFibGVEb21haW5zKFBBTDo6U2Vz
c2lvbklEIHNlc3NpCiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGNsZWFyRGlz
a0NhY2hlRW50cmllcyhzZXNzaW9uLT5jYWNoZSgpLCBlbnRyaWVzVG9EZWxldGUsIFtjYWxsYmFj
a0FnZ3JlZ2F0b3IgPSBjYWxsYmFja0FnZ3JlZ2F0b3IuY29weVJlZigpXSB7IH0pOwogICAgICAg
ICAgICAgfSk7Ci0gICAgICAgIH0KKyAgICAgICAgfSk7CiAgICAgfQogCiAgICAgYXV0byBkYXRh
VHlwZXNGb3JVSVByb2Nlc3MgPSBXZWJzaXRlRGF0YTo6ZmlsdGVyKHdlYnNpdGVEYXRhVHlwZXMs
IFdlYnNpdGVEYXRhUHJvY2Vzc1R5cGU6OlVJKTsKQEAgLTE4OTAsMTEgKzE5MDAsMTEgQEAgdm9p
ZCBOZXR3b3JrUHJvY2Vzczo6cmVnaXN0cmFibGVEb21haW5zV2l0aFdlYnNpdGVEYXRhKFBBTDo6
U2Vzc2lvbklEIHNlc3Npb25JRCwKICNlbmRpZgogICAgIAogICAgIGlmICh3ZWJzaXRlRGF0YVR5
cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6RGlza0NhY2hlKSkgewotICAgICAgICBmb3Ig
KGF1dG8mIHNlc3Npb24gOiBuZXR3b3JrU2Vzc2lvbnMoKS52YWx1ZXMoKSkgewotICAgICAgICAg
ICAgZmV0Y2hEaXNrQ2FjaGVFbnRyaWVzKHNlc3Npb24tPmNhY2hlKCksIHNlc3Npb25JRCwgZmV0
Y2hPcHRpb25zLCBbY2FsbGJhY2tBZ2dyZWdhdG9yID0gY2FsbGJhY2tBZ2dyZWdhdG9yLmNvcHlS
ZWYoKV0oYXV0byBlbnRyaWVzKSBtdXRhYmxlIHsKKyAgICAgICAgZm9yRWFjaE5ldHdvcmtTZXNz
aW9uKFtzZXNzaW9uSUQsIGZldGNoT3B0aW9ucywgJmNhbGxiYWNrQWdncmVnYXRvcl0oTmV0d29y
a1Nlc3Npb24mIHNlc3Npb24pIHsKKyAgICAgICAgICAgIGZldGNoRGlza0NhY2hlRW50cmllcyhz
ZXNzaW9uLmNhY2hlKCksIHNlc3Npb25JRCwgZmV0Y2hPcHRpb25zLCBbY2FsbGJhY2tBZ2dyZWdh
dG9yID0gY2FsbGJhY2tBZ2dyZWdhdG9yLmNvcHlSZWYoKV0oYXV0byBlbnRyaWVzKSBtdXRhYmxl
IHsKICAgICAgICAgICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3ItPm1fd2Vic2l0ZURhdGEuZW50
cmllcy5hcHBlbmRWZWN0b3IoZW50cmllcyk7CiAgICAgICAgICAgICB9KTsKLSAgICAgICAgfQor
ICAgICAgICB9KTsKICAgICB9CiB9CiAjZW5kaWYgLy8gRU5BQkxFKFJFU09VUkNFX0xPQURfU1RB
VElTVElDUykKQEAgLTE5ODYsMTEgKzE5OTYsMTEgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6c2V0
Q2FjaGVNb2RlbChDYWNoZU1vZGVsIGNhY2hlTW9kZWwpCiAgICAgICAgIGRpc2tGcmVlU2l6ZSAv
PSBLQiAqIDEwMDA7CiAgICAgICAgIGNhbGN1bGF0ZVVSTENhY2hlU2l6ZXMoY2FjaGVNb2RlbCwg
ZGlza0ZyZWVTaXplLCB1cmxDYWNoZU1lbW9yeUNhcGFjaXR5LCB1cmxDYWNoZURpc2tDYXBhY2l0
eSk7CiAgICAgfQotICAgIAotICAgIGZvciAoYXV0byYgc2Vzc2lvbiA6IG5ldHdvcmtTZXNzaW9u
cygpLnZhbHVlcygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBjYWNoZSA9IHNlc3Npb24tPmNhY2hl
KCkpCisKKyAgICBmb3JFYWNoTmV0d29ya1Nlc3Npb24oW3VybENhY2hlRGlza0NhcGFjaXR5XShO
ZXR3b3JrU2Vzc2lvbiYgc2Vzc2lvbikgeworICAgICAgICBpZiAoYXV0byogY2FjaGUgPSBzZXNz
aW9uLmNhY2hlKCkpCiAgICAgICAgICAgICBjYWNoZS0+c2V0Q2FwYWNpdHkodXJsQ2FjaGVEaXNr
Q2FwYWNpdHkpOwotICAgIH0KKyAgICB9KTsKIH0KIAogdm9pZCBOZXR3b3JrUHJvY2Vzczo6c2V0
Q2FuSGFuZGxlSFRUUFNTZXJ2ZXJUcnVzdEV2YWx1YXRpb24oYm9vbCB2YWx1ZSkKQEAgLTIwODQs
OCArMjA5NCw5IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmFjdHVhbFByZXBhcmVUb1N1c3BlbmQo
U2hvdWxkQWNrbm93bGVkZ2VXaGVuUmVhZHlUb1N1c3BlbmQKICAgICB9CiAjZW5kaWYKIAotICAg
IGZvciAoYXV0byYgc2Vzc2lvbiA6IG1fbmV0d29ya1Nlc3Npb25zKQotICAgICAgICBzZXNzaW9u
LnZhbHVlLT5zdG9yYWdlTWFuYWdlcigpLnN1c3BlbmQoW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9
KTsKKyAgICBmb3JFYWNoTmV0d29ya1Nlc3Npb24oWyZjYWxsYmFja0FnZ3JlZ2F0b3JdKE5ldHdv
cmtTZXNzaW9uJiBzZXNzaW9uKSB7CisgICAgICAgIHNlc3Npb24uc3RvcmFnZU1hbmFnZXIoKS5z
dXNwZW5kKFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgfSk7CiB9CiAKIHZvaWQgTmV0
d29ya1Byb2Nlc3M6OnByb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHkoKQpAQCAtMjE1NSw4ICsy
MTY2LDkgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6cmVzdW1lKCkKICAgICAgICAgc2VydmVyLT5y
ZXN1bWUoKTsKICNlbmRpZgogCi0gICAgZm9yIChhdXRvJiBzZXNzaW9uIDogbV9uZXR3b3JrU2Vz
c2lvbnMpCi0gICAgICAgIHNlc3Npb24udmFsdWUtPnN0b3JhZ2VNYW5hZ2VyKCkucmVzdW1lKCk7
CisgICAgZm9yRWFjaE5ldHdvcmtTZXNzaW9uKFtdKE5ldHdvcmtTZXNzaW9uJiBzZXNzaW9uKSB7
CisgICAgICAgIHNlc3Npb24uc3RvcmFnZU1hbmFnZXIoKS5yZXN1bWUoKTsKKyAgICB9KTsKIH0K
IAogdm9pZCBOZXR3b3JrUHJvY2Vzczo6cHJlZmV0Y2hETlMoY29uc3QgU3RyaW5nJiBob3N0bmFt
ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nl
c3MuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaAppbmRl
eCA0YTFjM2Y0OWM3YS4uMjg2Njg1NzBkMzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL05ldHdvcmtQcm9jZXNzLmgKQEAgLTE2Niw4ICsxNjYsNyBAQCBwdWJsaWM6CiAgICAg
TmV0d29ya1Nlc3Npb24qIG5ldHdvcmtTZXNzaW9uQnlDb25uZWN0aW9uKElQQzo6Q29ubmVjdGlv
biYpIGNvbnN0OwogICAgIHZvaWQgZGVzdHJveVNlc3Npb24oY29uc3QgUEFMOjpTZXNzaW9uSUQm
KTsKIAotICAgIC8vIE5lZWRlZCBmb3IgdGVzdCBpbmZyYXN0cnVjdHVyZQotICAgIEhhc2hNYXA8
UEFMOjpTZXNzaW9uSUQsIHN0ZDo6dW5pcXVlX3B0cjxOZXR3b3JrU2Vzc2lvbj4+JiBuZXR3b3Jr
U2Vzc2lvbnMoKSB7IHJldHVybiBtX25ldHdvcmtTZXNzaW9uczsgfQorICAgIHZvaWQgZm9yRWFj
aE5ldHdvcmtTZXNzaW9uKGNvbnN0IEZ1bmN0aW9uPHZvaWQoTmV0d29ya1Nlc3Npb24mKT4mKTsK
IAogICAgIHZvaWQgZm9yRWFjaE5ldHdvcmtTdG9yYWdlU2Vzc2lvbihjb25zdCBGdW5jdGlvbjx2
b2lkKFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYpPiYpOwogICAgIFdlYkNvcmU6Ok5l
dHdvcmtTdG9yYWdlU2Vzc2lvbiogc3RvcmFnZVNlc3Npb24oY29uc3QgUEFMOjpTZXNzaW9uSUQm
KSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29y
a1N0b3JhZ2VTZXNzaW9uUHJvdmlkZXIuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
TmV0d29ya1N0b3JhZ2VTZXNzaW9uUHJvdmlkZXIuaAppbmRleCA4YWE5MjA0NGIyMC4uOTViYjFk
NGQzOGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1N0
b3JhZ2VTZXNzaW9uUHJvdmlkZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L05ldHdvcmtTdG9yYWdlU2Vzc2lvblByb3ZpZGVyLmgKQEAgLTMxLDYgKzMxLDEwIEBACiAjaW5j
bHVkZSA8cGFsL1Nlc3Npb25JRC5oPgogI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CiAKKyNpZiBV
U0UoU09VUCkKKyNpbmNsdWRlICJOZXR3b3JrU2Vzc2lvblNvdXAuaCIKKyNlbmRpZgorCiBuYW1l
c3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgTmV0d29ya1N0b3JhZ2VTZXNzaW9uUHJvdmlkZXIgZmlu
YWwgOiBwdWJsaWMgV2ViQ29yZTo6U3RvcmFnZVNlc3Npb25Qcm92aWRlciB7CkBAIC00OSw2ICs1
MywxOSBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKKyNpZiBV
U0UoU09VUCkKKyAgICBTb3VwU2Vzc2lvbiogc291cFNlc3Npb24oKSBjb25zdCBmaW5hbAorICAg
IHsKKyAgICAgICAgaWYgKCFtX25ldHdvcmtQcm9jZXNzKQorICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisKKyAgICAgICAgaWYgKGF1dG8qIHNlc3Npb24gPSBtX25ldHdvcmtQcm9jZXNzLT5u
ZXR3b3JrU2Vzc2lvbihtX3Nlc3Npb25JRCkpCisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8TmV0d29ya1Nlc3Npb25Tb3VwJj4oKnNlc3Npb24pLnNvdXBTZXNzaW9uKCk7CisKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorI2VuZGlmCisKICAgICBXZWFrUHRyPE5ldHdvcmtQ
cm9jZXNzPiBtX25ldHdvcmtQcm9jZXNzOwogICAgIFBBTDo6U2Vzc2lvbklEIG1fc2Vzc2lvbklE
OwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0
d29ya1Byb2Nlc3NDb2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY29jb2Ev
TmV0d29ya1Byb2Nlc3NDb2NvYS5tbQppbmRleCAwN2I5NjMzYmQ0OC4uMDc3ZjE2ZmE2NTAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya1Byb2Nl
c3NDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdv
cmtQcm9jZXNzQ29jb2EubW0KQEAgLTE5OSwxMCArMTk5LDEwIEBAIHZvaWQgTmV0d29ya1Byb2Nl
c3M6OmNsZWFyRGlza0NhY2hlKFdhbGxUaW1lIG1vZGlmaWVkU2luY2UsIENvbXBsZXRpb25IYW5k
bGVyPHZvCiAgICAgYXV0byBncm91cCA9IG1fY2xlYXJDYWNoZURpc3BhdGNoR3JvdXA7CiAgICAg
ZGlzcGF0Y2hfZ3JvdXBfYXN5bmMoZ3JvdXAsIGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIG1h
a2VCbG9ja1B0cihbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBtb2RpZmll
ZFNpbmNlLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAo
KSBtdXRhYmxlIHsKICAgICAgICAgYXV0byBhZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9y
OjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICBmb3IgKGF1dG8m
IHNlc3Npb24gOiBuZXR3b3JrU2Vzc2lvbnMoKS52YWx1ZXMoKSkgewotICAgICAgICAgICAgaWYg
KGF1dG8qIGNhY2hlID0gc2Vzc2lvbi0+Y2FjaGUoKSkKKyAgICAgICAgZm9yRWFjaE5ldHdvcmtT
ZXNzaW9uKFttb2RpZmllZFNpbmNlLCAmYWdncmVnYXRvcl0oTmV0d29ya1Nlc3Npb24mIHNlc3Np
b24pIHsKKyAgICAgICAgICAgIGlmIChhdXRvKiBjYWNoZSA9IHNlc3Npb24uY2FjaGUoKSkKICAg
ICAgICAgICAgICAgICBjYWNoZS0+Y2xlYXIobW9kaWZpZWRTaW5jZSwgW2FnZ3JlZ2F0b3IgPSBh
Z2dyZWdhdG9yLmNvcHlSZWYoKV0gKCkgeyB9KTsKLSAgICAgICAgfQorICAgICAgICB9KTsKICAg
ICB9KS5nZXQoKSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvaW9zL05ldHdvcmtQcm9jZXNzSU9TLm1tIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9pb3MvTmV0d29ya1Byb2Nlc3NJT1MubW0KaW5kZXggMjlkZDA4NzdiZDQuLmZlYWRkYmNkMWQw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2lvcy9OZXR3b3JrUHJv
Y2Vzc0lPUy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2lvcy9OZXR3b3Jr
UHJvY2Vzc0lPUy5tbQpAQCAtNzgsMTAgKzc4LDEwIEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmNs
ZWFyQ2FjaGVGb3JBbGxPcmlnaW5zKHVpbnQzMl90IGNhY2hlc1RvQ2xlYXIpCiAgICAgUmVzb3Vy
Y2VDYWNoZXNUb0NsZWFyIHJlc291cmNlQ2FjaGVzVG9DbGVhciA9IHN0YXRpY19jYXN0PFJlc291
cmNlQ2FjaGVzVG9DbGVhcj4oY2FjaGVzVG9DbGVhcik7CiAgICAgaWYgKHJlc291cmNlQ2FjaGVz
VG9DbGVhciA9PSBJbk1lbW9yeVJlc291cmNlQ2FjaGVzT25seSkKICAgICAgICAgcmV0dXJuOwot
ICAgIGZvciAoYXV0byYgc2Vzc2lvbiA6IG5ldHdvcmtTZXNzaW9ucygpLnZhbHVlcygpKSB7Ci0g
ICAgICAgIGlmIChhdXRvKiBjYWNoZSA9IHNlc3Npb24tPmNhY2hlKCkpCisgICAgZm9yRWFjaE5l
dHdvcmtTZXNzaW9uKFtdKE5ldHdvcmtTZXNzaW9uJiBzZXNzaW9uKSB7CisgICAgICAgIGlmIChh
dXRvKiBjYWNoZSA9IHNlc3Npb24uY2FjaGUoKSkKICAgICAgICAgICAgIGNhY2hlLT5jbGVhcigp
OwotICAgIH0KKyAgICB9KTsKIH0KIAogdm9pZCBOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1Jbml0
aWFsaXplTmV0d29ya1Byb2Nlc3MoY29uc3QgTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRl
cnMmIHBhcmFtZXRlcnMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L3NvdXAvTmV0d29ya1Byb2Nlc3NNYWluU291cC5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL3NvdXAvTmV0d29ya1Byb2Nlc3NNYWluU291cC5jcHAKaW5kZXggZjdkMTQ1MTA0Y2Uu
LmFkMGJkYWQ1ZGMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3Nv
dXAvTmV0d29ya1Byb2Nlc3NNYWluU291cC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9zb3VwL05ldHdvcmtQcm9jZXNzTWFpblNvdXAuY3BwCkBAIC00MSw3ICs0MSw3IEBA
IHB1YmxpYzoKICAgICB7CiAgICAgICAgIC8vIE5lZWRlZCB0byBkZXN0cm95IHRoZSBTb3VwU2Vz
c2lvbiBhbmQgU291cENvb2tpZUphciwgZS5nLiB0byBhdm9pZAogICAgICAgICAvLyBsZWFraW5n
IFNRTGl0ZSB0ZW1wb3Jhcnkgam91cm5hbGluZyBmaWxlcy4KLSAgICAgICAgZ2xvYmFsTmV0d29y
a1Byb2Nlc3MtPmRlZmF1bHRTdG9yYWdlU2Vzc2lvbigpLmNsZWFyU291cE5ldHdvcmtTZXNzaW9u
KCk7CisgICAgICAgIGdsb2JhbE5ldHdvcmtQcm9jZXNzLT5kZXN0cm95U2Vzc2lvbihQQUw6OlNl
c3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKTsKICAgICB9CiB9OwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Byb2Nlc3NTb3VwLmNwcCBi
L1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrUHJvY2Vzc1NvdXAuY3Bw
CmluZGV4IDdjNzhiMGIzMGMyLi44M2MyZjI4ZWE1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtQcm9jZXNzU291cC5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtQcm9jZXNzU291cC5jcHAKQEAgLTI5
LDcgKzI5LDcgQEAKIAogI2luY2x1ZGUgIk5ldHdvcmtDYWNoZS5oIgogI2luY2x1ZGUgIk5ldHdv
cmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmgiCi0jaW5jbHVkZSAiTmV0d29ya1Nlc3Npb24u
aCIKKyNpbmNsdWRlICJOZXR3b3JrU2Vzc2lvblNvdXAuaCIKICNpbmNsdWRlICJSZXNvdXJjZUNh
Y2hlc1RvQ2xlYXIuaCIKICNpbmNsdWRlICJXZWJDb29raWVNYW5hZ2VyLmgiCiAjaW5jbHVkZSAi
V2ViS2l0Q2FjaGVkUmVzb2x2ZXIuaCIKQEAgLTk5LDggKzk5LDggQEAgdm9pZCBOZXR3b3JrUHJv
Y2Vzczo6dXNlclByZWZlcnJlZExhbmd1YWdlc0NoYW5nZWQoY29uc3QgVmVjdG9yPFN0cmluZz4m
IGxhbmd1YWcKIHsKICAgICBhdXRvIGFjY2VwdExhbmd1YWdlcyA9IGJ1aWxkQWNjZXB0TGFuZ3Vh
Z2VzKGxhbmd1YWdlcyk7CiAgICAgU291cE5ldHdvcmtTZXNzaW9uOjpzZXRJbml0aWFsQWNjZXB0
TGFuZ3VhZ2VzKGFjY2VwdExhbmd1YWdlcyk7Ci0gICAgZm9yRWFjaE5ldHdvcmtTdG9yYWdlU2Vz
c2lvbihbJmFjY2VwdExhbmd1YWdlc10oY29uc3QgYXV0byYgc2Vzc2lvbikgewotICAgICAgICBz
ZXNzaW9uLnNvdXBOZXR3b3JrU2Vzc2lvbigpLnNldEFjY2VwdExhbmd1YWdlcyhhY2NlcHRMYW5n
dWFnZXMpOworICAgIGZvckVhY2hOZXR3b3JrU2Vzc2lvbihbJmFjY2VwdExhbmd1YWdlc10oY29u
c3QgYXV0byYgc2Vzc2lvbikgeworICAgICAgICBzdGF0aWNfY2FzdDxjb25zdCBOZXR3b3JrU2Vz
c2lvblNvdXAmPihzZXNzaW9uKS5zb3VwTmV0d29ya1Nlc3Npb24oKS5zZXRBY2NlcHRMYW5ndWFn
ZXMoYWNjZXB0TGFuZ3VhZ2VzKTsKICAgICB9KTsKIH0KIApAQCAtMTMzLDcgKzEzMyw3IEBAIHZv
aWQgTmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKGNvbnN0
IE5ldHdvcmtQcm9jZXNzQ3JlYXRpCiAKIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpOZXR3b3Jr
U3RvcmFnZVNlc3Npb24+IE5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUNyZWF0ZURlZmF1bHRTdG9y
YWdlU2Vzc2lvbigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8V2ViQ29y
ZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uPihQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25J
RCgpLCBzdGQ6Om1ha2VfdW5pcXVlPFNvdXBOZXR3b3JrU2Vzc2lvbj4oUEFMOjpTZXNzaW9uSUQ6
OmRlZmF1bHRTZXNzaW9uSUQoKSkpOworICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPFdlYkNv
cmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4oUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9u
SUQoKSk7CiB9CiAKIHZvaWQgTmV0d29ya1Byb2Nlc3M6OnNldElnbm9yZVRMU0Vycm9ycyhib29s
IGlnbm9yZVRMU0Vycm9ycykKQEAgLTE1NywxMCArMTU3LDEwIEBAIHZvaWQgTmV0d29ya1Byb2Nl
c3M6OmNsZWFyQ2FjaGVGb3JBbGxPcmlnaW5zKHVpbnQzMl90IGNhY2hlc1RvQ2xlYXIpCiB2b2lk
IE5ldHdvcmtQcm9jZXNzOjpjbGVhckRpc2tDYWNoZShXYWxsVGltZSBtb2RpZmllZFNpbmNlLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgYXV0
byBhZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOwotICAgIGZvciAoYXV0byYgc2Vzc2lvbiA6IG5ldHdvcmtTZXNzaW9ucygp
LnZhbHVlcygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBjYWNoZSA9IHNlc3Npb24tPmNhY2hlKCkp
CisgICAgZm9yRWFjaE5ldHdvcmtTZXNzaW9uKFttb2RpZmllZFNpbmNlLCAmYWdncmVnYXRvcl0o
TmV0d29ya1Nlc3Npb24mIHNlc3Npb24pIHsKKyAgICAgICAgaWYgKGF1dG8qIGNhY2hlID0gc2Vz
c2lvbi5jYWNoZSgpKQogICAgICAgICAgICAgY2FjaGUtPmNsZWFyKG1vZGlmaWVkU2luY2UsIFth
Z2dyZWdhdG9yID0gYWdncmVnYXRvci5jb3B5UmVmKCldICgpIHsgfSk7Ci0gICAgfQorICAgIH0p
OwogfQogCiB2b2lkIE5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybVRlcm1pbmF0ZSgpCkBAIC0xNzEs
OCArMTcxLDggQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1UZXJtaW5hdGUoKQogdm9p
ZCBOZXR3b3JrUHJvY2Vzczo6c2V0TmV0d29ya1Byb3h5U2V0dGluZ3MoY29uc3QgU291cE5ldHdv
cmtQcm94eVNldHRpbmdzJiBzZXR0aW5ncykKIHsKICAgICBTb3VwTmV0d29ya1Nlc3Npb246OnNl
dFByb3h5U2V0dGluZ3Moc2V0dGluZ3MpOwotICAgIGZvckVhY2hOZXR3b3JrU3RvcmFnZVNlc3Np
b24oW10oY29uc3QgYXV0byYgc2Vzc2lvbikgewotICAgICAgICBzZXNzaW9uLnNvdXBOZXR3b3Jr
U2Vzc2lvbigpLnNldHVwUHJveHkoKTsKKyAgICBmb3JFYWNoTmV0d29ya1Nlc3Npb24oW10oY29u
c3QgYXV0byYgc2Vzc2lvbikgeworICAgICAgICBzdGF0aWNfY2FzdDxjb25zdCBOZXR3b3JrU2Vz
c2lvblNvdXAmPihzZXNzaW9uKS5zb3VwTmV0d29ya1Nlc3Npb24oKS5zZXR1cFByb3h5KCk7CiAg
ICAgfSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc291
cC9OZXR3b3JrU2Vzc2lvblNvdXAuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9z
b3VwL05ldHdvcmtTZXNzaW9uU291cC5jcHAKaW5kZXggZjdkZWM3MDQ4ZDEuLjczNTUyNTdiZWRh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Nl
c3Npb25Tb3VwLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0
d29ya1Nlc3Npb25Tb3VwLmNwcApAQCAtNDEsMTMgKzQxLDE5IEBAIHVzaW5nIG5hbWVzcGFjZSBX
ZWJDb3JlOwogCiBOZXR3b3JrU2Vzc2lvblNvdXA6Ok5ldHdvcmtTZXNzaW9uU291cChOZXR3b3Jr
UHJvY2VzcyYgbmV0d29ya1Byb2Nlc3MsIE5ldHdvcmtTZXNzaW9uQ3JlYXRpb25QYXJhbWV0ZXJz
JiYgcGFyYW1ldGVycykKICAgICA6IE5ldHdvcmtTZXNzaW9uKG5ldHdvcmtQcm9jZXNzLCBwYXJh
bWV0ZXJzKQorICAgICwgbV9uZXR3b3JrU2Vzc2lvbihzdGQ6Om1ha2VfdW5pcXVlPFNvdXBOZXR3
b3JrU2Vzc2lvbj4obV9zZXNzaW9uSUQpKQogewotICAgIG5ldHdvcmtTdG9yYWdlU2Vzc2lvbigp
LT5zZXRDb29raWVPYnNlcnZlckhhbmRsZXIoW3RoaXNdIHsKLSAgICAgICAgdGhpcy0+bmV0d29y
a1Byb2Nlc3MoKS5zdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXI+KCktPm5vdGlmeUNvb2tpZXNE
aWRDaGFuZ2UobV9zZXNzaW9uSUQpOwotICAgIH0pOworICAgIGF1dG8qIHN0b3JhZ2VTZXNzaW9u
ID0gbmV0d29ya1N0b3JhZ2VTZXNzaW9uKCk7CisgICAgQVNTRVJUKHN0b3JhZ2VTZXNzaW9uKTsK
IAogICAgIGlmICghcGFyYW1ldGVycy5jb29raWVQZXJzaXN0ZW50U3RvcmFnZVBhdGguaXNFbXB0
eSgpKQotICAgICAgICB0aGlzLT5uZXR3b3JrUHJvY2VzcygpLnN1cHBsZW1lbnQ8V2ViQ29va2ll
TWFuYWdlcj4oKS0+c2V0Q29va2llUGVyc2lzdGVudFN0b3JhZ2UobV9zZXNzaW9uSUQsIHBhcmFt
ZXRlcnMuY29va2llUGVyc2lzdGVudFN0b3JhZ2VQYXRoLCBwYXJhbWV0ZXJzLmNvb2tpZVBlcnNp
c3RlbnRTdG9yYWdlVHlwZSk7CisgICAgICAgIHNldENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlKHBh
cmFtZXRlcnMuY29va2llUGVyc2lzdGVudFN0b3JhZ2VQYXRoLCBwYXJhbWV0ZXJzLmNvb2tpZVBl
cnNpc3RlbnRTdG9yYWdlVHlwZSk7CisgICAgZWxzZQorICAgICAgICBtX25ldHdvcmtTZXNzaW9u
LT5zZXRDb29raWVKYXIoc3RvcmFnZVNlc3Npb24tPmNvb2tpZVN0b3JhZ2UoKSk7CisKKyAgICBz
dG9yYWdlU2Vzc2lvbi0+c2V0Q29va2llT2JzZXJ2ZXJIYW5kbGVyKFt0aGlzXSB7CisgICAgICAg
IHRoaXMtPm5ldHdvcmtQcm9jZXNzKCkuc3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2VyPigpLT5u
b3RpZnlDb29raWVzRGlkQ2hhbmdlKG1fc2Vzc2lvbklEKTsKKyAgICB9KTsKIH0KIAogTmV0d29y
a1Nlc3Npb25Tb3VwOjp+TmV0d29ya1Nlc3Npb25Tb3VwKCkKQEAgLTU4LDcgKzY0LDMxIEBAIE5l
dHdvcmtTZXNzaW9uU291cDo6fk5ldHdvcmtTZXNzaW9uU291cCgpCiAKIFNvdXBTZXNzaW9uKiBO
ZXR3b3JrU2Vzc2lvblNvdXA6OnNvdXBTZXNzaW9uKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbmV0
d29ya1N0b3JhZ2VTZXNzaW9uKCktPnNvdXBOZXR3b3JrU2Vzc2lvbigpLnNvdXBTZXNzaW9uKCk7
CisgICAgcmV0dXJuIG1fbmV0d29ya1Nlc3Npb24tPnNvdXBTZXNzaW9uKCk7Cit9CisKK3ZvaWQg
TmV0d29ya1Nlc3Npb25Tb3VwOjpzZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShjb25zdCBTdHJp
bmcmIHN0b3JhZ2VQYXRoLCBTb3VwQ29va2llUGVyc2lzdGVudFN0b3JhZ2VUeXBlIHN0b3JhZ2VU
eXBlKQoreworICAgIGF1dG8qIHN0b3JhZ2VTZXNzaW9uID0gbmV0d29ya1N0b3JhZ2VTZXNzaW9u
KCk7CisgICAgaWYgKCFzdG9yYWdlU2Vzc2lvbikKKyAgICAgICAgcmV0dXJuOworCisgICAgR1Jl
ZlB0cjxTb3VwQ29va2llSmFyPiBqYXI7CisgICAgc3dpdGNoIChzdG9yYWdlVHlwZSkgeworICAg
IGNhc2UgU291cENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlVHlwZTo6VGV4dDoKKyAgICAgICAgamFy
ID0gYWRvcHRHUmVmKHNvdXBfY29va2llX2phcl90ZXh0X25ldyhzdG9yYWdlUGF0aC51dGY4KCku
ZGF0YSgpLCBGQUxTRSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFNvdXBDb29raWVQZXJz
aXN0ZW50U3RvcmFnZVR5cGU6OlNRTGl0ZToKKyAgICAgICAgamFyID0gYWRvcHRHUmVmKHNvdXBf
Y29va2llX2phcl9kYl9uZXcoc3RvcmFnZVBhdGgudXRmOCgpLmRhdGEoKSwgRkFMU0UpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgfQorCisgICAgc291cF9jb29raWVfamFyX3NldF9hY2NlcHRfcG9saWN5KGphci5nZXQo
KSwgc291cF9jb29raWVfamFyX2dldF9hY2NlcHRfcG9saWN5KHN0b3JhZ2VTZXNzaW9uLT5jb29r
aWVTdG9yYWdlKCkpKTsKKyAgICBzdG9yYWdlU2Vzc2lvbi0+c2V0Q29va2llU3RvcmFnZShXVEZN
b3ZlKGphcikpOworCisgICAgbV9uZXR3b3JrU2Vzc2lvbi0+c2V0Q29va2llSmFyKHN0b3JhZ2VT
ZXNzaW9uLT5jb29raWVTdG9yYWdlKCkpOwogfQogCiB2b2lkIE5ldHdvcmtTZXNzaW9uU291cDo6
Y2xlYXJDcmVkZW50aWFscygpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL3NvdXAvTmV0d29ya1Nlc3Npb25Tb3VwLmggYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL3NvdXAvTmV0d29ya1Nlc3Npb25Tb3VwLmgKaW5kZXggOTE1ZDAyZDUyNGUuLmY5ZWY0YmI1
NDMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29y
a1Nlc3Npb25Tb3VwLmgKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zb3VwL05l
dHdvcmtTZXNzaW9uU291cC5oCkBAIC0yNiw5ICsyNiwxNCBAQAogI3ByYWdtYSBvbmNlCiAKICNp
bmNsdWRlICJOZXR3b3JrU2Vzc2lvbi5oIgorI2luY2x1ZGUgIlNvdXBDb29raWVQZXJzaXN0ZW50
U3RvcmFnZVR5cGUuaCIKIAogdHlwZWRlZiBzdHJ1Y3QgX1NvdXBTZXNzaW9uIFNvdXBTZXNzaW9u
OwogCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBTb3VwTmV0d29ya1Nlc3Npb247Cit9CisK
IG5hbWVzcGFjZSBXZWJLaXQgewogCiBjbGFzcyBOZXR3b3JrU29ja2V0Q2hhbm5lbDsKQEAgLTQ0
LDExICs0OSwxNiBAQCBwdWJsaWM6CiAgICAgTmV0d29ya1Nlc3Npb25Tb3VwKE5ldHdvcmtQcm9j
ZXNzJiwgTmV0d29ya1Nlc3Npb25DcmVhdGlvblBhcmFtZXRlcnMmJik7CiAgICAgfk5ldHdvcmtT
ZXNzaW9uU291cCgpOwogCisgICAgV2ViQ29yZTo6U291cE5ldHdvcmtTZXNzaW9uJiBzb3VwTmV0
d29ya1Nlc3Npb24oKSBjb25zdCB7IHJldHVybiAqbV9uZXR3b3JrU2Vzc2lvbjsgfQogICAgIFNv
dXBTZXNzaW9uKiBzb3VwU2Vzc2lvbigpIGNvbnN0OwogCisgICAgdm9pZCBzZXRDb29raWVQZXJz
aXN0ZW50U3RvcmFnZShjb25zdCBTdHJpbmcmIHN0b3JhZ2VQYXRoLCBTb3VwQ29va2llUGVyc2lz
dGVudFN0b3JhZ2VUeXBlKTsKKwogcHJpdmF0ZToKICAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViU29j
a2V0VGFzaz4gY3JlYXRlV2ViU29ja2V0VGFzayhOZXR3b3JrU29ja2V0Q2hhbm5lbCYsIGNvbnN0
IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFN0cmluZyYgcHJvdG9jb2wpIGZpbmFs
OwogICAgIHZvaWQgY2xlYXJDcmVkZW50aWFscygpIGZpbmFsOworCisgICAgc3RkOjp1bmlxdWVf
cHRyPFdlYkNvcmU6OlNvdXBOZXR3b3JrU2Vzc2lvbj4gbV9uZXR3b3JrU2Vzc2lvbjsKIH07CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYktpdAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>375157</attachid>
            <date>2019-07-30 07:41:10 -0700</date>
            <delta_ts>2019-07-30 07:41:10 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>wk2-network-session.diff</filename>
            <type>text/plain</type>
            <size>43890</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAzNzgyMDBmNmM0MC4uN2QyNjBjOWVhNzkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzNSBAQAorMjAxOS0wNy0yNCAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGln
YWxpYS5jb20+CisKKyAgICAgICAgW1NPVVBdIE1vdmUgU291cE5ldHdvcmtTZXNzaW9uIG93bmVy
c2hpcCBmcm9tIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiB0byBOZXR3b3JrU2Vzc2lvbgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAwMDc2CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTWljaGFlbCBDYXRhbnphcm8uCisKKyAgICAgICAgUmVtb3ZlIHRoZSBT
b3VwTmV0d29ya1Nlc3Npb24gZnJvbSBOZXR3b3JrU3RvcmFnZVNlc3Npb24uCisKKyAgICAgICAg
KiBwbGF0Zm9ybS9uZXR3b3JrL05ldHdvcmtTdG9yYWdlU2Vzc2lvbi5oOgorICAgICAgICAoV2Vi
Q29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpjb29raWVTdG9yYWdlIGNvbnN0KTogUmV0dXJu
IHRoZSBjb29raWUgamFyLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvU3RvcmFnZVNlc3Np
b25Qcm92aWRlci5oOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVNlc3Npb25Qcm92aWRlcjo6
c291cFNlc3Npb24gY29uc3QpOiBUZW1wb3JhcnkgYWRkIHRoaXMgdmlydHVhbCBtZXRob2QgdGhh
dCBpcyByZXF1aXJlZCBieQorICAgICAgICBTb2NrZXRTdHJlYW1IYW5kbGVJbXBsU291cC4gSXQg
d2lsbCBiZSByZW1vdmVkIG9uY2Ugd2Ugc3dpdGNoIHRvIGxpYnNvdXAgV2ViU29ja2V0cyBBUEkg
c29vbi4KKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvRE5TUmVzb2x2ZVF1ZXVlU291
cC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpnbG9iYWxEZWZhdWx0U291cFNlc3Npb25BY2Nlc3Nv
cik6IFJld29yayB0aGUgYWNjZXNzb3IgdG8gcmV0dXJuIHRoZSBTb3VwU2Vzc2lvbiBkaXJlY3Rs
eSBzaW5jZQorICAgICAgICB0aGF0J3Mgd2hhdCB3ZSByZWFsbHkgd2FudC4KKyAgICAgICAgKFdl
YkNvcmU6OkROU1Jlc29sdmVRdWV1ZVNvdXA6OnNldEdsb2JhbERlZmF1bHRTb3VwU2Vzc2lvbkFj
Y2Vzc29yKToKKyAgICAgICAgKFdlYkNvcmU6OkROU1Jlc29sdmVRdWV1ZVNvdXA6OnVwZGF0ZUlz
VXNpbmdQcm94eSk6CisgICAgICAgIChXZWJDb3JlOjpETlNSZXNvbHZlUXVldWVTb3VwOjpwbGF0
Zm9ybVJlc29sdmUpOgorICAgICAgICAoV2ViQ29yZTo6RE5TUmVzb2x2ZVF1ZXVlU291cDo6cmVz
b2x2ZSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9zb3VwL0ROU1Jlc29sdmVRdWV1ZVNv
dXAuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvTmV0d29ya1N0b3JhZ2VTZXNz
aW9uU291cC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb246Ok5l
dHdvcmtTdG9yYWdlU2Vzc2lvbik6IENyZWF0ZSBhbmQgc2V0dXAgdGhlIGRlZmF1bHQgY29va2ll
IGphci4KKyAgICAgICAgKFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6fk5ldHdvcmtT
dG9yYWdlU2Vzc2lvbik6IE9ubHkgZGlzY29ubmVjdCB0aGUgY29va2llIGphciBzaWduYWxzLgor
ICAgICAgICAoV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpzZXRDb29raWVTdG9yYWdl
KTogVXBkYXRlIHRoZSBjb29raWUgamFyLCBub3cgd2Uga25vdyBpdCdzIGFsd2F5cyBhIG5ldyBv
bmUuCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9zb3VwL1NvY2tldFN0cmVhbUhhbmRsZUlt
cGxTb3VwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZUltcGw6OmNy
ZWF0ZSk6IFVzZSB0aGUgbmV3IHZpcnR1YWwgbWV0aG9kIGZyb20gU3RvcmFnZVNlc3Npb25Qcm92
aWRlciB0byBnZXQgdGhlIFNvdXBTZXNzaW9uLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsv
c291cC9Tb3VwTmV0d29ya1Nlc3Npb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6U291cE5ldHdv
cmtTZXNzaW9uOjpTb3VwTmV0d29ya1Nlc3Npb24pOiBSZW1vdmUgdGhlIFNvdXBDb29raWVKYXIg
cGFyYW1ldGVyLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvc291cC9Tb3VwTmV0d29ya1Nl
c3Npb24uaDoKKwogMjAxOS0wNy0yOSAgRXJpYyBDYXJsc29uICA8ZXJpYy5jYXJsc29uQGFwcGxl
LmNvbT4KIAogICAgICAgICBNZWRpYVNvdXJjZS5pc1R5cGVTdXBwb3J0ZWQgY2xhaW1zIEZMQUMt
aW4tTVA0IHN1cHBvcnQgb24gaU9TIGFuZCBtYWNPUywgYnV0IHBsYXlzIHNpbGVuY2UKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvTmV0d29ya1N0b3JhZ2VTZXNz
aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL05ldHdvcmtTdG9yYWdlU2Vz
c2lvbi5oCmluZGV4IDU4ZGE4Nzg5MDdmLi5lMmUxMDZhOTFlNiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9OZXR3b3JrU3RvcmFnZVNlc3Npb24uaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL05ldHdvcmtTdG9yYWdlU2Vzc2lvbi5oCkBA
IC02NSw3ICs2NSw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEN1cmxQcm94eVNldHRp
bmdzOwogY2xhc3MgTmV0d29ya2luZ0NvbnRleHQ7CiBjbGFzcyBSZXNvdXJjZVJlcXVlc3Q7Ci1j
bGFzcyBTb3VwTmV0d29ya1Nlc3Npb247CiAKIHN0cnVjdCBDb29raWU7CiBzdHJ1Y3QgQ29va2ll
UmVxdWVzdEhlYWRlckZpZWxkUHJveHk7CkBAIC05NywxMyArOTYsMTEgQEAgcHVibGljOgogICAg
IFdFQkNPUkVfRVhQT1JUIFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBjb29raWVT
dG9yYWdlKCkgY29uc3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHZvaWQgc2V0U3RvcmFn
ZUFjY2Vzc0FQSUVuYWJsZWQoYm9vbCk7CiAjZWxpZiBVU0UoU09VUCkKLSAgICBXRUJDT1JFX0VY
UE9SVCBOZXR3b3JrU3RvcmFnZVNlc3Npb24oUEFMOjpTZXNzaW9uSUQsIHN0ZDo6dW5pcXVlX3B0
cjxTb3VwTmV0d29ya1Nlc3Npb24+JiYpOworICAgIFdFQkNPUkVfRVhQT1JUIGV4cGxpY2l0IE5l
dHdvcmtTdG9yYWdlU2Vzc2lvbihQQUw6OlNlc3Npb25JRCk7CiAgICAgfk5ldHdvcmtTdG9yYWdl
U2Vzc2lvbigpOwogCi0gICAgU291cE5ldHdvcmtTZXNzaW9uJiBzb3VwTmV0d29ya1Nlc3Npb24o
KSBjb25zdDsKLSAgICB2b2lkIGNsZWFyU291cE5ldHdvcmtTZXNzaW9uKCk7Ci0gICAgU291cENv
b2tpZUphciogY29va2llU3RvcmFnZSgpIGNvbnN0OwotICAgIHZvaWQgc2V0Q29va2llU3RvcmFn
ZShTb3VwQ29va2llSmFyKik7CisgICAgU291cENvb2tpZUphciogY29va2llU3RvcmFnZSgpIGNv
bnN0IHsgcmV0dXJuIG1fY29va2llU3RvcmFnZS5nZXQoKTsgfQorICAgIHZvaWQgc2V0Q29va2ll
U3RvcmFnZShHUmVmUHRyPFNvdXBDb29raWVKYXI+JiYpOwogICAgIHZvaWQgc2V0Q29va2llT2Jz
ZXJ2ZXJIYW5kbGVyKEZ1bmN0aW9uPHZvaWQgKCk+JiYpOwogICAgIHZvaWQgZ2V0Q3JlZGVudGlh
bEZyb21QZXJzaXN0ZW50U3RvcmFnZShjb25zdCBQcm90ZWN0aW9uU3BhY2UmLCBHQ2FuY2VsbGFi
bGUqLCBGdW5jdGlvbjx2b2lkIChDcmVkZW50aWFsJiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKTsK
ICAgICB2b2lkIHNhdmVDcmVkZW50aWFsVG9QZXJzaXN0ZW50U3RvcmFnZShjb25zdCBQcm90ZWN0
aW9uU3BhY2UmLCBjb25zdCBDcmVkZW50aWFsJik7CkBAIC0xNzEsNyArMTY4LDcgQEAgcHJpdmF0
ZToKICNlbGlmIFVTRShTT1VQKQogICAgIHN0YXRpYyB2b2lkIGNvb2tpZXNEaWRDaGFuZ2UoTmV0
d29ya1N0b3JhZ2VTZXNzaW9uKik7CiAKLSAgICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxTb3Vw
TmV0d29ya1Nlc3Npb24+IG1fc2Vzc2lvbjsKKyAgICBHUmVmUHRyPFNvdXBDb29raWVKYXI+IG1f
Y29va2llU3RvcmFnZTsKICAgICBGdW5jdGlvbjx2b2lkICgpPiBtX2Nvb2tpZU9ic2VydmVySGFu
ZGxlcjsKICNlbGlmIFVTRShDVVJMKQogICAgIFVuaXF1ZVJlZjxDb29raWVKYXJDdXJsPiBtX2Nv
b2tpZVN0b3JhZ2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L1N0b3JhZ2VTZXNzaW9uUHJvdmlkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvU3RvcmFnZVNlc3Npb25Qcm92aWRlci5oCmluZGV4IDBjMTU1NWI2NmEwLi4zODAxMDUwMTFi
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9TdG9yYWdlU2Vz
c2lvblByb3ZpZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9TdG9y
YWdlU2Vzc2lvblByb3ZpZGVyLmgKQEAgLTI3LDYgKzI3LDEwIEBACiAKICNpbmNsdWRlIDx3dGYv
VGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KIAorI2lmIFVTRShTT1VQKQordHlwZWRlZiBzdHJ1Y3Qg
X1NvdXBTZXNzaW9uIFNvdXBTZXNzaW9uOworI2VuZGlmCisKIG5hbWVzcGFjZSBQQUwgewogY2xh
c3MgU2Vzc2lvbklEOwogfQpAQCAtMzksNiArNDMsMTEgQEAgY2xhc3MgU3RvcmFnZVNlc3Npb25Q
cm92aWRlciA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxTdG9yYWdlU2Vzc2lvblByb3Zp
ZGUKIHB1YmxpYzoKICAgICB2aXJ0dWFsIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiogc3RvcmFnZVNl
c3Npb24oKSBjb25zdCA9IDA7CiAKKyNpZiBVU0UoU09VUCkKKyAgICAvLyBGSVhNRTogVGhpcyBp
cyBvbmx5IHJlcXVpcmVkIGJ5IFNvY2tldFN0cmVhbUhhbmRsZUltcGxTb3VwLCByZW1vdmUgaXQg
d2hlbiB3ZSBzd2l0Y2ggdG8gbGlic291cCBXZWJTb2NrZXRzIEFQSS4KKyAgICB2aXJ0dWFsIFNv
dXBTZXNzaW9uKiBzb3VwU2Vzc2lvbigpIGNvbnN0IHsgcmV0dXJuIG51bGxwdHI7IH0KKyNlbmRp
ZgorCiAgICAgdmlydHVhbCB+U3RvcmFnZVNlc3Npb25Qcm92aWRlcigpIHsgfQogfTsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL0ROU1Jlc29sdmVR
dWV1ZVNvdXAuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL0ROU1Jl
c29sdmVRdWV1ZVNvdXAuY3BwCmluZGV4IGQyMzk3NzU0MWFmLi40YmIzMGE4NzFkZSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL0ROU1Jlc29sdmVRdWV1
ZVNvdXAuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9ETlNS
ZXNvbHZlUXVldWVTb3VwLmNwcApAQCAtMjksOCArMjksNiBAQAogCiAjaWYgVVNFKFNPVVApCiAK
LSNpbmNsdWRlICJOZXR3b3JrU3RvcmFnZVNlc3Npb24uaCIKLSNpbmNsdWRlICJTb3VwTmV0d29y
a1Nlc3Npb24uaCIKICNpbmNsdWRlIDxsaWJzb3VwL3NvdXAuaD4KICNpbmNsdWRlIDx3dGYvQ29t
cGxldGlvbkhhbmRsZXIuaD4KICNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KQEAgLTc4LDIxICs3
NiwyMSBAQCBzdGF0aWMgdm9pZCBwcm94eVJlc29sdmVkRm9ySHR0cHNVcmlDYWxsYmFjayhHT2Jq
ZWN0KiBzb3VyY2UsIEdBc3luY1Jlc3VsdCogcmVzdQogICAgIGRpZFJlc29sdmVQcm94eShHX1BS
T1hZX1JFU09MVkVSKHNvdXJjZSksIHJlc3VsdCwgJmlzVXNpbmdIdHRwc1Byb3h5LCBzdGF0aWNf
Y2FzdDxib29sKj4odXNlckRhdGEpKTsKIH0KIAotRnVuY3Rpb248TmV0d29ya1N0b3JhZ2VTZXNz
aW9uJigpPiYgZ2xvYmFsRGVmYXVsdE5ldHdvcmtTdG9yYWdlU2Vzc2lvbkFjY2Vzc29yKCkKK0Z1
bmN0aW9uPFNvdXBTZXNzaW9uKigpPiYgZ2xvYmFsRGVmYXVsdFNvdXBTZXNzaW9uQWNjZXNzb3Io
KQogewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxGdW5jdGlvbjxOZXR3b3JrU3RvcmFnZVNl
c3Npb24mKCk+PiBhY2Nlc3NvcjsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8RnVuY3Rpb248
U291cFNlc3Npb24qKCk+PiBhY2Nlc3NvcjsKICAgICByZXR1cm4gYWNjZXNzb3IuZ2V0KCk7CiB9
CiAKLXZvaWQgRE5TUmVzb2x2ZVF1ZXVlU291cDo6c2V0R2xvYmFsRGVmYXVsdE5ldHdvcmtTdG9y
YWdlU2Vzc2lvbkFjY2Vzc29yKEZ1bmN0aW9uPE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYoKT4mJiBh
Y2Nlc3NvcikKK3ZvaWQgRE5TUmVzb2x2ZVF1ZXVlU291cDo6c2V0R2xvYmFsRGVmYXVsdFNvdXBT
ZXNzaW9uQWNjZXNzb3IoRnVuY3Rpb248U291cFNlc3Npb24qKCk+JiYgYWNjZXNzb3IpCiB7Ci0g
ICAgZ2xvYmFsRGVmYXVsdE5ldHdvcmtTdG9yYWdlU2Vzc2lvbkFjY2Vzc29yKCkgPSBXVEZNb3Zl
KGFjY2Vzc29yKTsKKyAgICBnbG9iYWxEZWZhdWx0U291cFNlc3Npb25BY2Nlc3NvcigpID0gV1RG
TW92ZShhY2Nlc3Nvcik7CiB9CiAKIHZvaWQgRE5TUmVzb2x2ZVF1ZXVlU291cDo6dXBkYXRlSXNV
c2luZ1Byb3h5KCkKIHsKICAgICBHUmVmUHRyPEdQcm94eVJlc29sdmVyPiByZXNvbHZlcjsKLSAg
ICBnX29iamVjdF9nZXQoZ2xvYmFsRGVmYXVsdE5ldHdvcmtTdG9yYWdlU2Vzc2lvbkFjY2Vzc29y
KCkoKS5zb3VwTmV0d29ya1Nlc3Npb24oKS5zb3VwU2Vzc2lvbigpLCAicHJveHktcmVzb2x2ZXIi
LCAmcmVzb2x2ZXIub3V0UHRyKCksIG51bGxwdHIpOworICAgIGdfb2JqZWN0X2dldChnbG9iYWxE
ZWZhdWx0U291cFNlc3Npb25BY2Nlc3NvcigpKCksICJwcm94eS1yZXNvbHZlciIsICZyZXNvbHZl
ci5vdXRQdHIoKSwgbnVsbHB0cik7CiAgICAgQVNTRVJUKHJlc29sdmVyKTsKIAogICAgIGdfcHJv
eHlfcmVzb2x2ZXJfbG9va3VwX2FzeW5jKHJlc29sdmVyLmdldCgpLCAiaHR0cDovL2V4YW1wbGUu
Y29tLyIsIG51bGxwdHIsIHByb3h5UmVzb2x2ZWRGb3JIdHRwVXJpQ2FsbGJhY2ssICZtX2lzVXNp
bmdQcm94eSk7CkBAIC0xNzUsNyArMTczLDcgQEAgdm9pZCBETlNSZXNvbHZlUXVldWVTb3VwOjpw
bGF0Zm9ybVJlc29sdmUoY29uc3QgU3RyaW5nJiBob3N0bmFtZSkKIHsKICAgICBBU1NFUlQoaXNN
YWluVGhyZWFkKCkpOwogCi0gICAgc291cF9zZXNzaW9uX3ByZWZldGNoX2RucyhnbG9iYWxEZWZh
dWx0TmV0d29ya1N0b3JhZ2VTZXNzaW9uQWNjZXNzb3IoKSgpLnNvdXBOZXR3b3JrU2Vzc2lvbigp
LnNvdXBTZXNzaW9uKCksIGhvc3RuYW1lLnV0ZjgoKS5kYXRhKCksIG51bGxwdHIsIHJlc29sdmVk
Q2FsbGJhY2ssIG51bGxwdHIpOworICAgIHNvdXBfc2Vzc2lvbl9wcmVmZXRjaF9kbnMoZ2xvYmFs
RGVmYXVsdFNvdXBTZXNzaW9uQWNjZXNzb3IoKSgpLCBob3N0bmFtZS51dGY4KCkuZGF0YSgpLCBu
dWxscHRyLCByZXNvbHZlZENhbGxiYWNrLCBudWxscHRyKTsKIH0KIAogdm9pZCBETlNSZXNvbHZl
UXVldWVTb3VwOjpyZXNvbHZlKGNvbnN0IFN0cmluZyYgaG9zdG5hbWUsIHVpbnQ2NF90IGlkZW50
aWZpZXIsIEROU0NvbXBsZXRpb25IYW5kbGVyJiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xODQs
NyArMTgyLDcgQEAgdm9pZCBETlNSZXNvbHZlUXVldWVTb3VwOjpyZXNvbHZlKGNvbnN0IFN0cmlu
ZyYgaG9zdG5hbWUsIHVpbnQ2NF90IGlkZW50aWZpZXIsIEQKIAogICAgIGF1dG8gYWRkcmVzcyA9
IGFkb3B0R1JlZihzb3VwX2FkZHJlc3NfbmV3KGhvc3RuYW1lLnV0ZjgoKS5kYXRhKCksIDApKTsK
ICAgICBhdXRvIGNhbmNlbGxhYmxlID0gYWRvcHRHUmVmKGdfY2FuY2VsbGFibGVfbmV3KCkpOwot
ICAgIHNvdXBfYWRkcmVzc19yZXNvbHZlX2FzeW5jKGFkZHJlc3MuZ2V0KCksIHNvdXBfc2Vzc2lv
bl9nZXRfYXN5bmNfY29udGV4dChXZWJDb3JlOjpnbG9iYWxEZWZhdWx0TmV0d29ya1N0b3JhZ2VT
ZXNzaW9uQWNjZXNzb3IoKSgpLnNvdXBOZXR3b3JrU2Vzc2lvbigpLnNvdXBTZXNzaW9uKCkpLCBj
YW5jZWxsYWJsZS5nZXQoKSwgcmVzb2x2ZWRXaXRoT2JzZXJ2ZXJDYWxsYmFjaywgdGhpcyk7Cisg
ICAgc291cF9hZGRyZXNzX3Jlc29sdmVfYXN5bmMoYWRkcmVzcy5nZXQoKSwgc291cF9zZXNzaW9u
X2dldF9hc3luY19jb250ZXh0KGdsb2JhbERlZmF1bHRTb3VwU2Vzc2lvbkFjY2Vzc29yKCkoKSks
IGNhbmNlbGxhYmxlLmdldCgpLCByZXNvbHZlZFdpdGhPYnNlcnZlckNhbGxiYWNrLCB0aGlzKTsK
IAogICAgIGdfb2JqZWN0X3NldF9kYXRhKEdfT0JKRUNUKGFkZHJlc3MuZ2V0KCkpLCAiaWRlbnRp
ZmllciIsIEdVSU5UX1RPX1BPSU5URVIoaWRlbnRpZmllcikpOwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvRE5TUmVzb2x2ZVF1ZXVlU291cC5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL0ROU1Jlc29sdmVRdWV1ZVNvdXAu
aAppbmRleCA1NzIwMzRmNTRhYy4uY2VlNzlmOTMzMzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9ETlNSZXNvbHZlUXVldWVTb3VwLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL0ROU1Jlc29sdmVRdWV1ZVNvdXAuaApA
QCAtMzAsNiArMzAsOCBAQAogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3Rm
L2dsaWIvR1JlZlB0ci5oPgogCit0eXBlZGVmIHN0cnVjdCBfU291cFNlc3Npb24gU291cFNlc3Np
b247CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgTmV0d29ya1N0b3JhZ2VTZXNzaW9u
OwpAQCAtMzksNyArNDEsNyBAQCBwdWJsaWM6CiAgICAgdXNpbmcgQ29tcGxldGlvbkFuZENhbmNl
bEhhbmRsZXJzID0gc3RkOjpwYWlyPFdlYkNvcmU6OkROU0NvbXBsZXRpb25IYW5kbGVyLCBHUmVm
UHRyPEdDYW5jZWxsYWJsZT4+OwogCiAgICAgRE5TUmVzb2x2ZVF1ZXVlU291cCgpID0gZGVmYXVs
dDsKLSAgICBzdGF0aWMgdm9pZCBzZXRHbG9iYWxEZWZhdWx0TmV0d29ya1N0b3JhZ2VTZXNzaW9u
QWNjZXNzb3IoRnVuY3Rpb248TmV0d29ya1N0b3JhZ2VTZXNzaW9uJigpPiYmKTsKKyAgICBzdGF0
aWMgdm9pZCBzZXRHbG9iYWxEZWZhdWx0U291cFNlc3Npb25BY2Nlc3NvcihGdW5jdGlvbjxTb3Vw
U2Vzc2lvbiooKT4mJik7CiAgICAgdm9pZCByZXNvbHZlKGNvbnN0IFN0cmluZyYgaG9zdG5hbWUs
IHVpbnQ2NF90IGlkZW50aWZpZXIsIEROU0NvbXBsZXRpb25IYW5kbGVyJiYpIGZpbmFsOwogICAg
IHZvaWQgc3RvcFJlc29sdmUodWludDY0X3QgaWRlbnRpZmllcikgZmluYWw7CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9OZXR3b3JrU3RvcmFnZVNl
c3Npb25Tb3VwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9OZXR3
b3JrU3RvcmFnZVNlc3Npb25Tb3VwLmNwcAppbmRleCAwNTNmNmI5MWE2NC4uZTRjOGIwZjEzZTYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9OZXR3b3Jr
U3RvcmFnZVNlc3Npb25Tb3VwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL3NvdXAvTmV0d29ya1N0b3JhZ2VTZXNzaW9uU291cC5jcHAKQEAgLTUzLDM0ICs1MywxNyBA
QAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLU5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6TmV0d29y
a1N0b3JhZ2VTZXNzaW9uKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgc3RkOjp1bmlxdWVfcHRy
PFNvdXBOZXR3b3JrU2Vzc2lvbj4mJiBzZXNzaW9uKQorTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpO
ZXR3b3JrU3RvcmFnZVNlc3Npb24oUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQogICAgIDogbV9z
ZXNzaW9uSUQoc2Vzc2lvbklEKQotICAgICwgbV9zZXNzaW9uKFdURk1vdmUoc2Vzc2lvbikpCisg
ICAgLCBtX2Nvb2tpZVN0b3JhZ2UoYWRvcHRHUmVmKHNvdXBfY29va2llX2phcl9uZXcoKSkpCiB7
Ci0gICAgQVNTRVJUKG1fc2Vzc2lvbi0+Y29va2llSmFyKCkpOwotICAgIGdfc2lnbmFsX2Nvbm5l
Y3Rfc3dhcHBlZChtX3Nlc3Npb24tPmNvb2tpZUphcigpLCAiY2hhbmdlZCIsIEdfQ0FMTEJBQ0so
Y29va2llc0RpZENoYW5nZSksIHRoaXMpOworICAgIHNvdXBfY29va2llX2phcl9zZXRfYWNjZXB0
X3BvbGljeShtX2Nvb2tpZVN0b3JhZ2UuZ2V0KCksIFNPVVBfQ09PS0lFX0pBUl9BQ0NFUFRfTk9f
VEhJUkRfUEFSVFkpOworICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChtX2Nvb2tpZVN0b3Jh
Z2UuZ2V0KCksICJjaGFuZ2VkIiwgR19DQUxMQkFDSyhjb29raWVzRGlkQ2hhbmdlKSwgdGhpcyk7
CiB9CiAKIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6fk5ldHdvcmtTdG9yYWdlU2Vzc2lvbigpCiB7
Ci0gICAgY2xlYXJTb3VwTmV0d29ya1Nlc3Npb24oKTsKLX0KLQotU291cE5ldHdvcmtTZXNzaW9u
JiBOZXR3b3JrU3RvcmFnZVNlc3Npb246OnNvdXBOZXR3b3JrU2Vzc2lvbigpIGNvbnN0Ci17Ci0g
ICAgQVNTRVJUKG1fc2Vzc2lvbik7Ci0gICAgcmV0dXJuICptX3Nlc3Npb24uZ2V0KCk7Ci19Owot
Ci12b2lkIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6Y2xlYXJTb3VwTmV0d29ya1Nlc3Npb24oKQot
ewotICAgIGlmIChtX3Nlc3Npb24pIHsKLSAgICAgICAgQVNTRVJUKG1fc2Vzc2lvbi0+Y29va2ll
SmFyKCkpOwotICAgICAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X21hdGNoZWQobV9z
ZXNzaW9uLT5jb29raWVKYXIoKSwgR19TSUdOQUxfTUFUQ0hfREFUQSwgMCwgMCwgbnVsbHB0ciwg
bnVsbHB0ciwgdGhpcyk7Ci0gICAgfQotCi0gICAgbV9zZXNzaW9uID0gbnVsbHB0cjsKLSAgICBt
X2Nvb2tpZU9ic2VydmVySGFuZGxlciA9IG51bGxwdHI7CisgICAgZ19zaWduYWxfaGFuZGxlcnNf
ZGlzY29ubmVjdF9tYXRjaGVkKG1fY29va2llU3RvcmFnZS5nZXQoKSwgR19TSUdOQUxfTUFUQ0hf
REFUQSwgMCwgMCwgbnVsbHB0ciwgbnVsbHB0ciwgdGhpcyk7CiB9CiAKIHZvaWQgTmV0d29ya1N0
b3JhZ2VTZXNzaW9uOjpjb29raWVzRGlkQ2hhbmdlKE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiogc2Vz
c2lvbikKQEAgLTg5LDI1ICs3MiwxMSBAQCB2b2lkIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6Y29v
a2llc0RpZENoYW5nZShOZXR3b3JrU3RvcmFnZVNlc3Npb24qIHNlc3Npb24pCiAgICAgICAgIHNl
c3Npb24tPm1fY29va2llT2JzZXJ2ZXJIYW5kbGVyKCk7CiB9CiAKLVNvdXBDb29raWVKYXIqIE5l
dHdvcmtTdG9yYWdlU2Vzc2lvbjo6Y29va2llU3RvcmFnZSgpIGNvbnN0Ci17Ci0gICAgQVNTRVJU
KG1fc2Vzc2lvbik7Ci0gICAgQVNTRVJUKG1fc2Vzc2lvbi0+Y29va2llSmFyKCkpOwotICAgIHJl
dHVybiBtX3Nlc3Npb24tPmNvb2tpZUphcigpOwotfQotCi12b2lkIE5ldHdvcmtTdG9yYWdlU2Vz
c2lvbjo6c2V0Q29va2llU3RvcmFnZShTb3VwQ29va2llSmFyKiBqYXIpCit2b2lkIE5ldHdvcmtT
dG9yYWdlU2Vzc2lvbjo6c2V0Q29va2llU3RvcmFnZShHUmVmUHRyPFNvdXBDb29raWVKYXI+JiYg
amFyKQogewotICAgIEFTU0VSVChqYXIpOwotICAgIEFTU0VSVChtX3Nlc3Npb24pOwotICAgIEFT
U0VSVChtX3Nlc3Npb24tPmNvb2tpZUphcigpKTsKLQotICAgIGlmIChtX3Nlc3Npb24tPmNvb2tp
ZUphcigpID09IGphcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZ19zaWduYWxfaGFuZGxlcnNf
ZGlzY29ubmVjdF9tYXRjaGVkKG1fc2Vzc2lvbi0+Y29va2llSmFyKCksIEdfU0lHTkFMX01BVENI
X0RBVEEsIDAsIDAsIG51bGxwdHIsIG51bGxwdHIsIHRoaXMpOwotICAgIG1fc2Vzc2lvbi0+c2V0
Q29va2llSmFyKGphcik7Ci0gICAgZ19zaWduYWxfY29ubmVjdF9zd2FwcGVkKG1fc2Vzc2lvbi0+
Y29va2llSmFyKCksICJjaGFuZ2VkIiwgR19DQUxMQkFDSyhjb29raWVzRGlkQ2hhbmdlKSwgdGhp
cyk7CisgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9tYXRjaGVkKG1fY29va2llU3Rv
cmFnZS5nZXQoKSwgR19TSUdOQUxfTUFUQ0hfREFUQSwgMCwgMCwgbnVsbHB0ciwgbnVsbHB0ciwg
dGhpcyk7CisgICAgbV9jb29raWVTdG9yYWdlID0gV1RGTW92ZShqYXIpOworICAgIGdfc2lnbmFs
X2Nvbm5lY3Rfc3dhcHBlZChtX2Nvb2tpZVN0b3JhZ2UuZ2V0KCksICJjaGFuZ2VkIiwgR19DQUxM
QkFDSyhjb29raWVzRGlkQ2hhbmdlKSwgdGhpcyk7CiB9CiAKIHZvaWQgTmV0d29ya1N0b3JhZ2VT
ZXNzaW9uOjpzZXRDb29raWVPYnNlcnZlckhhbmRsZXIoRnVuY3Rpb248dm9pZCAoKT4mJiBoYW5k
bGVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Nv
Y2tldFN0cmVhbUhhbmRsZUltcGxTb3VwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvc291cC9Tb2NrZXRTdHJlYW1IYW5kbGVJbXBsU291cC5jcHAKaW5kZXggZWQ3OGU0ZGRk
NTkuLmZiZGNiYjE1ZTRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL3NvdXAvU29ja2V0U3RyZWFtSGFuZGxlSW1wbFNvdXAuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9Tb2NrZXRTdHJlYW1IYW5kbGVJbXBsU291cC5jcHAK
QEAgLTM2LDExICszNiw5IEBACiAKICNpbmNsdWRlICJEZXByZWNhdGVkR2xvYmFsU2V0dGluZ3Mu
aCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCi0jaW5jbHVkZSAiTmV0d29ya1N0b3JhZ2VTZXNzaW9u
LmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VFcnJvci5oIgogI2luY2x1ZGUgIlNvY2tldFN0cmVhbUVy
cm9yLmgiCiAjaW5jbHVkZSAiU29ja2V0U3RyZWFtSGFuZGxlQ2xpZW50LmgiCi0jaW5jbHVkZSAi
U291cE5ldHdvcmtTZXNzaW9uLmgiCiAjaW5jbHVkZSAiU3RvcmFnZVNlc3Npb25Qcm92aWRlci5o
IgogI2luY2x1ZGUgIlVSTFNvdXAuaCIKICNpbmNsdWRlIDxnaW8vZ2lvLmg+CkBAIC04NywxMyAr
ODUsMTMgQEAgUmVmPFNvY2tldFN0cmVhbUhhbmRsZUltcGw+IFNvY2tldFN0cmVhbUhhbmRsZUlt
cGw6OmNyZWF0ZShjb25zdCBVUkwmIHVybCwgU29ja2UKICAgICBSZWY8U29ja2V0U3RyZWFtSGFu
ZGxlSW1wbD4gc29ja2V0ID0gYWRvcHRSZWYoKm5ldyBTb2NrZXRTdHJlYW1IYW5kbGVJbXBsKHVy
bCwgY2xpZW50LCBzdG9yYWdlU2Vzc2lvblByb3ZpZGVyKSk7CiAKICNpZiBTT1VQX0NIRUNLX1ZF
UlNJT04oMiwgNjEsIDkwKQotICAgIGF1dG8qIG5ldHdvcmtTdG9yYWdlU2Vzc2lvbiA9IHN0b3Jh
Z2VTZXNzaW9uUHJvdmlkZXIgPyBzdG9yYWdlU2Vzc2lvblByb3ZpZGVyLT5zdG9yYWdlU2Vzc2lv
bigpIDogbnVsbHB0cjsKLSAgICBpZiAoIW5ldHdvcmtTdG9yYWdlU2Vzc2lvbikKKyAgICBhdXRv
KiBzb3VwU2Vzc2lvbiA9IHN0b3JhZ2VTZXNzaW9uUHJvdmlkZXIgPyBzdG9yYWdlU2Vzc2lvblBy
b3ZpZGVyLT5zb3VwU2Vzc2lvbigpIDogbnVsbHB0cjsKKyAgICBpZiAoIXNvdXBTZXNzaW9uKQog
ICAgICAgICByZXR1cm4gc29ja2V0OwogCiAgICAgYXV0byB1cmkgPSB1cmxUb1NvdXBVUkkodXJs
KTsKICAgICBSZWY8U29ja2V0U3RyZWFtSGFuZGxlPiBwcm90ZWN0ZWRTb2NrZXRTdHJlYW1IYW5k
bGUgPSBzb2NrZXQuY29weVJlZigpOwotICAgIHNvdXBfc2Vzc2lvbl9jb25uZWN0X2FzeW5jKG5l
dHdvcmtTdG9yYWdlU2Vzc2lvbi0+c291cE5ldHdvcmtTZXNzaW9uKCkuc291cFNlc3Npb24oKSwg
dXJpLmdldCgpLCBzb2NrZXQtPm1fY2FuY2VsbGFibGUuZ2V0KCksCisgICAgc291cF9zZXNzaW9u
X2Nvbm5lY3RfYXN5bmMoc291cFNlc3Npb24sIHVyaS5nZXQoKSwgc29ja2V0LT5tX2NhbmNlbGxh
YmxlLmdldCgpLAogICAgICAgICB1cmwucHJvdG9jb2xJcygid3NzIikgPyByZWludGVycHJldF9j
YXN0PFNvdXBTZXNzaW9uQ29ubmVjdFByb2dyZXNzQ2FsbGJhY2s+KGNvbm5lY3RQcm9ncmVzc0Nh
bGxiYWNrKSA6IG51bGxwdHIsCiAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8R0FzeW5jUmVhZHlD
YWxsYmFjaz4oY29ubmVjdGVkQ2FsbGJhY2spLCAmcHJvdGVjdGVkU29ja2V0U3RyZWFtSGFuZGxl
LmxlYWtSZWYoKSk7CiAjZWxzZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9zb3VwL1NvdXBOZXR3b3JrU2Vzc2lvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL3NvdXAvU291cE5ldHdvcmtTZXNzaW9uLmNwcAppbmRleCA2MTI0ZjQ2YzI0
ZC4uNjE4OTk4ZjI1MWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvc291cC9Tb3VwTmV0d29ya1Nlc3Npb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvc291cC9Tb3VwTmV0d29ya1Nlc3Npb24uY3BwCkBAIC0xMDYsNyArMTA2LDcg
QEAgc3RhdGljIEFsbG93ZWRDZXJ0aWZpY2F0ZXNNYXAmIGFsbG93ZWRDZXJ0aWZpY2F0ZXMoKQog
ICAgIHJldHVybiBjZXJ0aWZpY2F0ZXM7CiB9CiAKLVNvdXBOZXR3b3JrU2Vzc2lvbjo6U291cE5l
dHdvcmtTZXNzaW9uKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgU291cENvb2tpZUphciogY29v
a2llSmFyKQorU291cE5ldHdvcmtTZXNzaW9uOjpTb3VwTmV0d29ya1Nlc3Npb24oUEFMOjpTZXNz
aW9uSUQgc2Vzc2lvbklEKQogICAgIDogbV9zb3VwU2Vzc2lvbihhZG9wdEdSZWYoc291cF9zZXNz
aW9uX25ldygpKSkKIHsKICAgICAvLyBWYWx1ZXMgdGFrZW4gZnJvbSBodHRwOi8vd3d3LmJyb3dz
ZXJzY29wZS5vcmcvIGZvbGxvd2luZwpAQCAtMTE2LDE5ICsxMTYsMTIgQEAgU291cE5ldHdvcmtT
ZXNzaW9uOjpTb3VwTmV0d29ya1Nlc3Npb24oUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBTb3Vw
Q29va2llSmFyKgogICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4Q29ubmVjdGlvbnMgPSAxNzsKICAg
ICBzdGF0aWMgY29uc3QgaW50IG1heENvbm5lY3Rpb25zUGVySG9zdCA9IDY7CiAKLSAgICBHUmVm
UHRyPFNvdXBDb29raWVKYXI+IGphciA9IGNvb2tpZUphcjsKLSAgICBpZiAoIWphcikgewotICAg
ICAgICBqYXIgPSBhZG9wdEdSZWYoc291cF9jb29raWVfamFyX25ldygpKTsKLSAgICAgICAgc291
cF9jb29raWVfamFyX3NldF9hY2NlcHRfcG9saWN5KGphci5nZXQoKSwgU09VUF9DT09LSUVfSkFS
X0FDQ0VQVF9OT19USElSRF9QQVJUWSk7Ci0gICAgfQotCiAgICAgZ19vYmplY3Rfc2V0KG1fc291
cFNlc3Npb24uZ2V0KCksCiAgICAgICAgIFNPVVBfU0VTU0lPTl9NQVhfQ09OTlMsIG1heENvbm5l
Y3Rpb25zLAogICAgICAgICBTT1VQX1NFU1NJT05fTUFYX0NPTk5TX1BFUl9IT1NULCBtYXhDb25u
ZWN0aW9uc1Blckhvc3QsCiAgICAgICAgIFNPVVBfU0VTU0lPTl9USU1FT1VULCAwLAogICAgICAg
ICBTT1VQX1NFU1NJT05fSURMRV9USU1FT1VULCAwLAogICAgICAgICBTT1VQX1NFU1NJT05fQURE
X0ZFQVRVUkVfQllfVFlQRSwgU09VUF9UWVBFX0NPTlRFTlRfU05JRkZFUiwKLSAgICAgICAgU09V
UF9TRVNTSU9OX0FERF9GRUFUVVJFLCBqYXIuZ2V0KCksCiAgICAgICAgIG51bGxwdHIpOwogCiAg
ICAgc2V0dXBDdXN0b21Qcm90b2NvbHMoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvc291cC9Tb3VwTmV0d29ya1Nlc3Npb24uaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvc291cC9Tb3VwTmV0d29ya1Nlc3Npb24uaAppbmRleCBmZmJkNDlh
NzYyYS4uNWUzMmQzMWFkNGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvc291cC9Tb3VwTmV0d29ya1Nlc3Npb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL3NvdXAvU291cE5ldHdvcmtTZXNzaW9uLmgKQEAgLTQ5LDcgKzQ5LDcgQEAg
c3RydWN0IFNvdXBOZXR3b3JrUHJveHlTZXR0aW5nczsKIGNsYXNzIFNvdXBOZXR3b3JrU2Vzc2lv
biB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU291cE5ldHdvcmtTZXNzaW9uKTsgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQgU291cE5ldHdvcmtTZXNz
aW9uKFBBTDo6U2Vzc2lvbklEID0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSwg
U291cENvb2tpZUphciogPSBudWxscHRyKTsKKyAgICBleHBsaWNpdCBTb3VwTmV0d29ya1Nlc3Np
b24oUEFMOjpTZXNzaW9uSUQpOwogICAgIH5Tb3VwTmV0d29ya1Nlc3Npb24oKTsKIAogICAgIFNv
dXBTZXNzaW9uKiBzb3VwU2Vzc2lvbigpIGNvbnN0IHsgcmV0dXJuIG1fc291cFNlc3Npb24uZ2V0
KCk7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktp
dC9DaGFuZ2VMb2cKaW5kZXggMTBhYmJhN2ZkZDYuLmFjMzIxOGVmMmIzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAt
MSwzICsxLDU4IEBACisyMDE5LTA3LTI0ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFA
aWdhbGlhLmNvbT4KKworICAgICAgICBbU09VUF0gTW92ZSBTb3VwTmV0d29ya1Nlc3Npb24gb3du
ZXJzaGlwIGZyb20gTmV0d29ya1N0b3JhZ2VTZXNzaW9uIHRvIE5ldHdvcmtTZXNzaW9uCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDAwNzYKKworICAg
ICAgICBSZXZpZXdlZCBieSBNaWNoYWVsIENhdGFuemFyby4KKworICAgICAgICBOZXR3b3JrU3Rv
cmFnZVNlc3Npb24gc2hvdWxkIG9ubHkgb3duIHRoZSBjb29raWUgamFyLCBzaW5jZSBpdCdzIHRo
ZSBvbmx5IHRoaW5nIGl0IGhhbmRsZXMgZnJvbSB0aGUgc2Vzc2lvbi4KKworICAgICAgICAqIE5l
dHdvcmtQcm9jZXNzL0Nvb2tpZXMvc291cC9XZWJDb29raWVNYW5hZ2VyU291cC5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXI6OnNldENvb2tpZVBlcnNpc3RlbnRTdG9yYWdl
KTogVXNlIHRoZSBuZXR3b3JrIHNlc3Npb24gaW5zdGVhZCBvZiB0aGUgc3RvcmFnZSBzZXNzaW9u
CisgICAgICAgIHRvIHNldCB0aGUgcGVyaXN0ZW50IGNvb2tpZSBzdG9yYWdlLgorICAgICAgICAq
IE5ldHdvcmtQcm9jZXNzL0N1c3RvbVByb3RvY29scy9zb3VwL0xlZ2FjeUN1c3RvbVByb3RvY29s
TWFuYWdlclNvdXAuY3BwOgorICAgICAgICAoV2ViS2l0OjpMZWdhY3lDdXN0b21Qcm90b2NvbE1h
bmFnZXI6OnJlZ2lzdGVyU2NoZW1lKTogSXRlcmF0ZSBuZXR3b3JrIHNlc3Npb25zIGluc3RlYWQg
b2Ygc3RvcmFnZSBzZXNzaW9ucyB0bworICAgICAgICBhY2Nlc3MgdGhlIFNvdXBOZXR3b3JrU2Vz
c2lvbi4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJv
Y2Vzcy5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNz
OjpyZXNvdXJjZUxvYWRTdGF0aXN0aWNzVXBkYXRlZCk6IFVzZQorICAgICAgICBOZXR3b3JrUHJv
Y2Vzczo6Zm9yRWFjaE5ldHdvcmtTZXNzaW9uKCkgdG8gaXRlcmF0ZSBuZXR3b3JrIHNlc3Npb25z
LgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6Omxvd01lbW9yeUhhbmRsZXIpOiBEaXR0by4KKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmZvckVhY2hOZXR3b3JrU2Vzc2lvbik6IEFkZGVk
IHRvIGl0ZXJhdGUgbmV0d29yayBzZXNzaW9ucyBpbnRlYWQgb2YgZXhwb3NpbmcgdGhlIG1hcAor
ICAgICAgICB0aGF0IGlzIGFsd2F5cyB1c2VkIHRvIGl0ZXJhdGUgdGhlIHNlc3Npb25zLgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6c3dpdGNoVG9OZXdUZXN0aW5nU2Vzc2lvbik6
IFVzZSB0aGUgbmV3IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiBjb25zdHJ1Y3RvciBBUEkuCisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjplbnN1cmVTZXNzaW9uKTogRGl0dG8uCisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpkZXN0cm95U2Vzc2lvbik6IEFsbG93IHRvIGRl
c3Ryb3kgdGhlIGRlZmF1bHQgc2Vzc2lvbiBmb3Igc291cCBiYXNlZCBwb3J0cy4gVGhpcyBpcwor
ICAgICAgICBvbmx5IGNhbGxlZCByaWdodCBiZWZvcmUgcHJvY2VzcyBleGl0IHRvIGVuc3VyZSB3
ZSBkb24ndCBsZWFrIG5ldHdvcmsgcmVzb3VyY2VzIGxpa2UgdGhlIGNvb2tpZXMgZGF0YWJhc2Uu
CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRW5hYmxlZCk6IFVzZSBOZXR3b3JrUHJvY2Vzczo6Zm9yRWFjaE5ldHdvcmtTZXNzaW9uKCkg
dG8KKyAgICAgICAgaXRlcmF0ZSBuZXR3b3JrIHNlc3Npb25zLgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrUHJvY2Vzczo6ZmV0Y2hXZWJzaXRlRGF0YSk6IERpdHRvLgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrUHJvY2Vzczo6ZGVsZXRlV2Vic2l0ZURhdGFGb3JPcmlnaW5zKTogRGl0dG8uCisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpkZWxldGVXZWJzaXRlRGF0YUZvclJlZ2lz
dHJhYmxlRG9tYWlucyk6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6
cmVnaXN0cmFibGVEb21haW5zV2l0aFdlYnNpdGVEYXRhKTogRGl0dG8uCisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtQcm9jZXNzOjpzZXRDYWNoZU1vZGVsKTogRGl0dG8uCisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtQcm9jZXNzOjphY3R1YWxQcmVwYXJlVG9TdXNwZW5kKTogRGl0dG8uCisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpyZXN1bWUpOiBEaXR0by4KKyAgICAgICAgKiBO
ZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5oOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNz
L05ldHdvcmtTdG9yYWdlU2Vzc2lvblByb3ZpZGVyLmg6CisgICAgICAgICogTmV0d29ya1Byb2Nl
c3MvY29jb2EvTmV0d29ya1Byb2Nlc3NDb2NvYS5tbToKKyAgICAgICAgKFdlYktpdDo6TmV0d29y
a1Byb2Nlc3M6OmNsZWFyRGlza0NhY2hlKTogRGl0dG8uCisgICAgICAgICogTmV0d29ya1Byb2Nl
c3MvaW9zL05ldHdvcmtQcm9jZXNzSU9TLm1tOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJv
Y2Vzczo6Y2xlYXJDYWNoZUZvckFsbE9yaWdpbnMpOiBEaXR0by4KKyAgICAgICAgKiBOZXR3b3Jr
UHJvY2Vzcy9zb3VwL05ldHdvcmtQcm9jZXNzTWFpblNvdXAuY3BwOiBEZXN0cm95IHRoZSBkZWZh
dWx0IHNlc3Npb24gYmVmb3JlIHByb2Nlc3MgZXhpc3RzLgorICAgICAgICAqIE5ldHdvcmtQcm9j
ZXNzL3NvdXAvTmV0d29ya1Byb2Nlc3NTb3VwLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29y
a1Byb2Nlc3M6OnVzZXJQcmVmZXJyZWRMYW5ndWFnZXNDaGFuZ2VkKTogSXRlcmF0ZSBuZXR3b3Jr
IHNlc3Npb25zIGluc3RlYWQgb2Ygc3RvcmFnZSBzZXNzaW9ucyB0bworICAgICAgICBhY2Nlc3Mg
dGhlIFNvdXBOZXR3b3JrU2Vzc2lvbi4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6
OnBsYXRmb3JtQ3JlYXRlRGVmYXVsdFN0b3JhZ2VTZXNzaW9uIGNvbnN0KTogVXNlIHRoZSBuZXcg
TmV0d29ya1N0b3JhZ2VTZXNzaW9uIGNvbnN0cnVjdG9yIEFQSS4KKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya1Byb2Nlc3M6OmNsZWFyRGlza0NhY2hlKTogVXNlIE5ldHdvcmtQcm9jZXNzOjpmb3JF
YWNoTmV0d29ya1Nlc3Npb24oKSB0byBpdGVyYXRlIG5ldHdvcmsgc2Vzc2lvbnMuCisgICAgICAg
IChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpzZXROZXR3b3JrUHJveHlTZXR0aW5ncyk6IEl0ZXJh
dGUgbmV0d29yayBzZXNzaW9ucyBpbnN0ZWFkIG9mIHN0b3JhZ2Ugc2Vzc2lvbnMgdG8KKyAgICAg
ICAgYWNjZXNzIHRoZSBTb3VwTmV0d29ya1Nlc3Npb24uCisgICAgICAgICogTmV0d29ya1Byb2Nl
c3Mvc291cC9OZXR3b3JrU2Vzc2lvblNvdXAuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
U2Vzc2lvblNvdXA6Ok5ldHdvcmtTZXNzaW9uU291cCk6IENyZWF0ZSB0aGUgU291cE5ldHdvcmtT
ZXNzaW9uIGFuZCBzZXR1cCBjb29raWVzLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrU2Vzc2lv
blNvdXA6OnNvdXBTZXNzaW9uIGNvbnN0KTogUmV0dXJuIHRoZSBTb3VwU2Vzc2lvbiBvZiBTb3Vw
TmV0d29ya1Nlc3Npb24uCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtTZXNzaW9uU291cDo6c2V0
Q29va2llUGVyc2lzdGVudFN0b3JhZ2UpOiBTZXR1cCBhIG5ldyBjb29raWUgamFyLgorICAgICAg
ICAqIE5ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Nlc3Npb25Tb3VwLmg6CisKIDIwMTktMDct
MjkgIFdlbnNvbiBIc2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CiAKICAgICAgICAgWW91
VHViZSBzZWFyY2ggZmllbGQgc2hvd3MgUlRMIHRleHQgb3V0c2lkZSBpdHMgYm9yZGVyIG9uIGlQ
YWRPUwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Db29raWVzL3Nv
dXAvV2ViQ29va2llTWFuYWdlclNvdXAuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9Db29raWVzL3NvdXAvV2ViQ29va2llTWFuYWdlclNvdXAuY3BwCmluZGV4IDI4Y2FiMjA4OTRh
Li40ZDk3ZGE3YjY5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9D
b29raWVzL3NvdXAvV2ViQ29va2llTWFuYWdlclNvdXAuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvQ29va2llcy9zb3VwL1dlYkNvb2tpZU1hbmFnZXJTb3VwLmNwcApAQCAt
MjcsMTIgKzI3LDExIEBACiAjaW5jbHVkZSAiV2ViQ29va2llTWFuYWdlci5oIgogCiAjaW5jbHVk
ZSAiTmV0d29ya1Byb2Nlc3MuaCIKKyNpbmNsdWRlICJOZXR3b3JrU2Vzc2lvblNvdXAuaCIKICNp
bmNsdWRlICJTb3VwQ29va2llUGVyc2lzdGVudFN0b3JhZ2VUeXBlLmgiCiAjaW5jbHVkZSA8V2Vi
Q29yZS9OZXR3b3JrU3RvcmFnZVNlc3Npb24uaD4KICNpbmNsdWRlIDxXZWJDb3JlL1NvdXBOZXR3
b3JrU2Vzc2lvbi5oPgogI2luY2x1ZGUgPGxpYnNvdXAvc291cC5oPgotI2luY2x1ZGUgPHd0Zi9n
bGliL0dSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKIG5hbWVzcGFj
ZSBXZWJLaXQgewogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CkBAIC03NywyMiArNzYsOCBAQCBI
VFRQQ29va2llQWNjZXB0UG9saWN5IFdlYkNvb2tpZU1hbmFnZXI6OnBsYXRmb3JtR2V0SFRUUENv
b2tpZUFjY2VwdFBvbGljeSgpCiAKIHZvaWQgV2ViQ29va2llTWFuYWdlcjo6c2V0Q29va2llUGVy
c2lzdGVudFN0b3JhZ2UoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBTdHJpbmcmIHN0
b3JhZ2VQYXRoLCBTb3VwQ29va2llUGVyc2lzdGVudFN0b3JhZ2VUeXBlIHN0b3JhZ2VUeXBlKQog
ewotICAgIEdSZWZQdHI8U291cENvb2tpZUphcj4gamFyOwotICAgIHN3aXRjaCAoc3RvcmFnZVR5
cGUpIHsKLSAgICBjYXNlIFNvdXBDb29raWVQZXJzaXN0ZW50U3RvcmFnZVR5cGU6OlRleHQ6Ci0g
ICAgICAgIGphciA9IGFkb3B0R1JlZihzb3VwX2Nvb2tpZV9qYXJfdGV4dF9uZXcoc3RvcmFnZVBh
dGgudXRmOCgpLmRhdGEoKSwgRkFMU0UpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTb3Vw
Q29va2llUGVyc2lzdGVudFN0b3JhZ2VUeXBlOjpTUUxpdGU6Ci0gICAgICAgIGphciA9IGFkb3B0
R1JlZihzb3VwX2Nvb2tpZV9qYXJfZGJfbmV3KHN0b3JhZ2VQYXRoLnV0ZjgoKS5kYXRhKCksIEZB
TFNFKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgIH0KLQotICAgIGlmIChhdXRvKiBzdG9yYWdlU2Vzc2lvbiA9IG1fcHJv
Y2Vzcy5zdG9yYWdlU2Vzc2lvbihzZXNzaW9uSUQpKSB7Ci0gICAgICAgIHNvdXBfY29va2llX2ph
cl9zZXRfYWNjZXB0X3BvbGljeShqYXIuZ2V0KCksIHNvdXBfY29va2llX2phcl9nZXRfYWNjZXB0
X3BvbGljeShzdG9yYWdlU2Vzc2lvbi0+Y29va2llU3RvcmFnZSgpKSk7Ci0gICAgICAgIHN0b3Jh
Z2VTZXNzaW9uLT5zZXRDb29raWVTdG9yYWdlKGphci5nZXQoKSk7Ci0gICAgfQorICAgIGlmIChh
dXRvKiBuZXR3b3JrU2Vzc2lvbiA9IG1fcHJvY2Vzcy5uZXR3b3JrU2Vzc2lvbihzZXNzaW9uSUQp
KQorICAgICAgICBzdGF0aWNfY2FzdDxOZXR3b3JrU2Vzc2lvblNvdXAmPigqbmV0d29ya1Nlc3Np
b24pLnNldENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlKHN0b3JhZ2VQYXRoLCBzdG9yYWdlVHlwZSk7
CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9DdXN0b21Qcm90b2NvbHMvc291cC9MZWdhY3lDdXN0b21Qcm90b2NvbE1h
bmFnZXJTb3VwLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ3VzdG9tUHJvdG9j
b2xzL3NvdXAvTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyU291cC5jcHAKaW5kZXggNTExZGQw
NGQ2NjcuLjJjNGQyZmY5NDgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL0N1c3RvbVByb3RvY29scy9zb3VwL0xlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclNvdXAu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ3VzdG9tUHJvdG9jb2xzL3Nv
dXAvTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyU291cC5jcHAKQEAgLTIzLDggKzIzLDggQEAK
ICNpbmNsdWRlICJEYXRhUmVmZXJlbmNlLmgiCiAjaW5jbHVkZSAiTGVnYWN5Q3VzdG9tUHJvdG9j
b2xNYW5hZ2VyTWVzc2FnZXMuaCIKICNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzcy5oIgorI2luY2x1
ZGUgIk5ldHdvcmtTZXNzaW9uU291cC5oIgogI2luY2x1ZGUgIldlYktpdFNvdXBSZXF1ZXN0SW5w
dXRTdHJlYW0uaCIKLSNpbmNsdWRlIDxXZWJDb3JlL05ldHdvcmtTdG9yYWdlU2Vzc2lvbi5oPgog
I2luY2x1ZGUgPFdlYkNvcmUvTm90SW1wbGVtZW50ZWQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Jl
c291cmNlRXJyb3IuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlUmVxdWVzdC5oPgpAQCAt
MTAyLDggKzEwMiw4IEBAIHZvaWQgTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyOjpyZWdpc3Rl
clNjaGVtZShjb25zdCBTdHJpbmcmIHNjaGVtZSkKICAgICBhdXRvKiBnZW5lcmljUmVxdWVzdENs
YXNzID0gc3RhdGljX2Nhc3Q8U291cFJlcXVlc3RDbGFzcyo+KGdfdHlwZV9jbGFzc19wZWVrKFdF
QktJVF9UWVBFX1NPVVBfUkVRVUVTVF9HRU5FUklDKSk7CiAgICAgQVNTRVJUKGdlbmVyaWNSZXF1
ZXN0Q2xhc3MpOwogICAgIGdlbmVyaWNSZXF1ZXN0Q2xhc3MtPnNjaGVtZXMgPSBjb25zdF9jYXN0
PGNvbnN0IGNoYXIqKj4ocmVpbnRlcnByZXRfY2FzdDxjaGFyKio+KG1fcmVnaXN0ZXJlZFNjaGVt
ZXMtPnBkYXRhKSk7Ci0gICAgbGFzdENyZWF0ZWROZXR3b3JrUHJvY2VzcygpLT5mb3JFYWNoTmV0
d29ya1N0b3JhZ2VTZXNzaW9uKFtdKGNvbnN0IGF1dG8mIHNlc3Npb24pIHsKLSAgICAgICAgc2Vz
c2lvbi5zb3VwTmV0d29ya1Nlc3Npb24oKS5zZXR1cEN1c3RvbVByb3RvY29scygpOworICAgIGxh
c3RDcmVhdGVkTmV0d29ya1Byb2Nlc3MoKS0+Zm9yRWFjaE5ldHdvcmtTZXNzaW9uKFtdKGNvbnN0
IGF1dG8mIHNlc3Npb24pIHsKKyAgICAgICAgc3RhdGljX2Nhc3Q8Y29uc3QgTmV0d29ya1Nlc3Np
b25Tb3VwJj4oc2Vzc2lvbikuc291cE5ldHdvcmtTZXNzaW9uKCkuc2V0dXBDdXN0b21Qcm90b2Nv
bHMoKTsKICAgICB9KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05l
dHdvcmtQcm9jZXNzLmNwcAppbmRleCBkZjY3NzViY2Y0MC4uMDgwMzNkNmMzZjUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCkBAIC0xMDAs
NiArMTAwLDcgQEAKICNlbmRpZgogCiAjaWYgVVNFKFNPVVApCisjaW5jbHVkZSAiTmV0d29ya1Nl
c3Npb25Tb3VwLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9ETlNSZXNvbHZlUXVldWVTb3VwLmg+CiAj
aW5jbHVkZSA8V2ViQ29yZS9Tb3VwTmV0d29ya1Nlc3Npb24uaD4KICNlbmRpZgpAQCAtMTUxLDgg
KzE1Miw4IEBAIE5ldHdvcmtQcm9jZXNzOjpOZXR3b3JrUHJvY2VzcyhBdXhpbGlhcnlQcm9jZXNz
SW5pdGlhbGl6YXRpb25QYXJhbWV0ZXJzJiYgcGFyYW1lCiAjZW5kaWYKIAogI2lmIFVTRShTT1VQ
KQotICAgIEROU1Jlc29sdmVRdWV1ZVNvdXA6OnNldEdsb2JhbERlZmF1bHROZXR3b3JrU3RvcmFn
ZVNlc3Npb25BY2Nlc3NvcihbdGhpc10oKSAtPiBOZXR3b3JrU3RvcmFnZVNlc3Npb24mIHsKLSAg
ICAgICAgcmV0dXJuIGRlZmF1bHRTdG9yYWdlU2Vzc2lvbigpOworICAgIEROU1Jlc29sdmVRdWV1
ZVNvdXA6OnNldEdsb2JhbERlZmF1bHRTb3VwU2Vzc2lvbkFjY2Vzc29yKFt0aGlzXSgpIC0+IFNv
dXBTZXNzaW9uKiB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxOZXR3b3JrU2Vzc2lvblNv
dXAmPigqbmV0d29ya1Nlc3Npb24oUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSkp
LnNvdXBTZXNzaW9uKCk7CiAgICAgfSk7CiAjZW5kaWYKIApAQCAtMjc0LDggKzI3NSw5IEBAIHZv
aWQgTmV0d29ya1Byb2Nlc3M6Omxvd01lbW9yeUhhbmRsZXIoQ3JpdGljYWwgY3JpdGljYWwpCiAK
ICAgICBXVEY6OnJlbGVhc2VGYXN0TWFsbG9jRnJlZU1lbW9yeSgpOwogCi0gICAgZm9yIChhdXRv
JiBuZXR3b3JrU2Vzc2lvbiA6IG1fbmV0d29ya1Nlc3Npb25zLnZhbHVlcygpKQotICAgICAgICBu
ZXR3b3JrU2Vzc2lvbi0+Y2xlYXJQcmVmZXRjaENhY2hlKCk7CisgICAgZm9yRWFjaE5ldHdvcmtT
ZXNzaW9uKFtdKGF1dG8mIG5ldHdvcmtTZXNzaW9uKSB7CisgICAgICAgIG5ldHdvcmtTZXNzaW9u
LmNsZWFyUHJlZmV0Y2hDYWNoZSgpOworICAgIH0pOwogfQogCiB2b2lkIE5ldHdvcmtQcm9jZXNz
Ojppbml0aWFsaXplTmV0d29ya1Byb2Nlc3MoTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRl
cnMmJiBwYXJhbWV0ZXJzKQpAQCAtNDg2LDYgKzQ4OCwxMiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNz
Ojppbml0aWFsaXplU3RvcmFnZVF1b3RhKGNvbnN0IFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJz
JiBwYQogICAgIG1hbmFnZXJzLnNldERlZmF1bHRRdW90YXMocGFyYW1ldGVycy5wZXJPcmlnaW5T
dG9yYWdlUXVvdGEsIHBhcmFtZXRlcnMucGVyVGhpcmRQYXJ0eU9yaWdpblN0b3JhZ2VRdW90YSk7
CiB9CiAKK3ZvaWQgTmV0d29ya1Byb2Nlc3M6OmZvckVhY2hOZXR3b3JrU2Vzc2lvbihjb25zdCBG
dW5jdGlvbjx2b2lkKE5ldHdvcmtTZXNzaW9uJik+JiBmdW5jdG9yKQoreworICAgIGZvciAoYXV0
byYgc2Vzc2lvbiA6IG1fbmV0d29ya1Nlc3Npb25zLnZhbHVlcygpKQorICAgICAgICBmdW5jdG9y
KCpzZXNzaW9uKTsKK30KKwogdm9pZCBOZXR3b3JrUHJvY2Vzczo6c3dpdGNoVG9OZXdUZXN0aW5n
U2Vzc2lvbigpCiB7CiAjaWYgUExBVEZPUk0oQ09DT0EpCkBAIC01MDIsOSArNTEwLDcgQEAgdm9p
ZCBOZXR3b3JrUHJvY2Vzczo6c3dpdGNoVG9OZXdUZXN0aW5nU2Vzc2lvbigpCiAgICAgfQogCiAg
ICAgbV9kZWZhdWx0TmV0d29ya1N0b3JhZ2VTZXNzaW9uID0gc3RkOjptYWtlX3VuaXF1ZTxXZWJD
b3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24+KFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lv
bklEKCksIFdURk1vdmUoc2Vzc2lvbiksIFdURk1vdmUoY29va2llU3RvcmFnZSkpOwotI2VsaWYg
VVNFKFNPVVApCi0gICAgbV9kZWZhdWx0TmV0d29ya1N0b3JhZ2VTZXNzaW9uID0gc3RkOjptYWtl
X3VuaXF1ZTxXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24+KFBBTDo6U2Vzc2lvbklEOjpk
ZWZhdWx0U2Vzc2lvbklEKCksIHN0ZDo6bWFrZV91bmlxdWU8V2ViQ29yZTo6U291cE5ldHdvcmtT
ZXNzaW9uPigpKTsKLSNlbGlmIFVTRShDVVJMKQorI2VsaWYgVVNFKENVUkwpIHx8IFVTRShTT1VQ
KQogICAgIG1fZGVmYXVsdE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiA9IHN0ZDo6bWFrZV91bmlxdWU8
V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uPihQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNl
c3Npb25JRCgpKTsKICNlbmRpZgogfQpAQCAtNTM2LDkgKzU0Miw3IEBAIHZvaWQgTmV0d29ya1By
b2Nlc3M6OmVuc3VyZVNlc3Npb24oY29uc3QgUEFMOjpTZXNzaW9uSUQmIHNlc3Npb25JRCwgY29u
c3QgU3RyaW5nCiAgICAgfQogCiAgICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IHN0ZDo6
bWFrZV91bmlxdWU8TmV0d29ya1N0b3JhZ2VTZXNzaW9uPihzZXNzaW9uSUQsIFdURk1vdmUoc3Rv
cmFnZVNlc3Npb24pLCBXVEZNb3ZlKGNvb2tpZVN0b3JhZ2UpKTsKLSNlbGlmIFVTRShTT1VQKQot
ICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBzdGQ6Om1ha2VfdW5pcXVlPE5ldHdvcmtT
dG9yYWdlU2Vzc2lvbj4oc2Vzc2lvbklELCBzdGQ6Om1ha2VfdW5pcXVlPFNvdXBOZXR3b3JrU2Vz
c2lvbj4oc2Vzc2lvbklEKSk7Ci0jZWxpZiBVU0UoQ1VSTCkKKyNlbGlmIFVTRShDVVJMKSB8fCBV
U0UoU09VUCkKICAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gc3RkOjptYWtlX3VuaXF1
ZTxOZXR3b3JrU3RvcmFnZVNlc3Npb24+KHNlc3Npb25JRCk7CiAjZW5kaWYKIH0KQEAgLTU5NCw3
ICs1OTgsMTEgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6ZGVzdHJveVNlc3Npb24oY29uc3QgUEFM
OjpTZXNzaW9uSUQmIHNlc3Npb25JRCkKICAgICBpZiAoIXNlc3Npb25JRC5pc1ZhbGlkKCkpCiAg
ICAgICAgIHJldHVybjsKIAorI2lmICFVU0UoU09VUCkKKyAgICAvLyBTb3VwIGJhc2VkIHBvcnRz
IGRlc3Ryb3kgdGhlIGRlZmF1bHQgc2Vzc2lvbiByaWdodCBiZWZvcmUgdGhlIHByb2Nlc3MgZXhp
dHMgdG8gYXZvaWQgbGVha2luZworICAgIC8vIG5ldHdvcmsgcmVzb3VyY2VzIGxpa2UgdGhlIGNv
b2tpZXMgZGF0YWJhc2UuCiAgICAgQVNTRVJUKHNlc3Npb25JRCAhPSBQQUw6OlNlc3Npb25JRDo6
ZGVmYXVsdFNlc3Npb25JRCgpKTsKKyNlbmRpZgogCiAgICAgaWYgKGF1dG8gc2Vzc2lvbiA9IG1f
bmV0d29ya1Nlc3Npb25zLnRha2Uoc2Vzc2lvbklEKSkKICAgICAgICAgc2Vzc2lvbi0+aW52YWxp
ZGF0ZUFuZENhbmNlbCgpOwpAQCAtMTE0Niw4ICsxMTU0LDkgQEAgdm9pZCBOZXR3b3JrUHJvY2Vz
czo6c2V0U2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwoUEFM
OjpTZXMKIAogdm9pZCBOZXR3b3JrUHJvY2Vzczo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0Vu
YWJsZWQoYm9vbCBlbmFibGVkKQogewotICAgIGZvciAoYXV0byYgbmV0d29ya1Nlc3Npb24gOiBt
X25ldHdvcmtTZXNzaW9ucy52YWx1ZXMoKSkKLSAgICAgICAgbmV0d29ya1Nlc3Npb24tPnNldFJl
c291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKGVuYWJsZWQpOworICAgIGZvckVhY2hOZXR3b3Jr
U2Vzc2lvbihbZW5hYmxlZF0oYXV0byYgbmV0d29ya1Nlc3Npb24pIHsKKyAgICAgICAgbmV0d29y
a1Nlc3Npb24uc2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoZW5hYmxlZCk7CisgICAg
fSk7CiB9CiAKIHZvaWQgTmV0d29ya1Byb2Nlc3M6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NE
ZWJ1Z01vZGUoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBib29sIGRlYnVnTW9kZSwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTM1OSwxMSArMTM2
OCwxMSBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpmZXRjaFdlYnNpdGVEYXRhKFBBTDo6U2Vzc2lv
bklEIHNlc3Npb25JRCwgT3B0aW9uU2V0PFdlYnNpdAogICAgIH0KICNlbmRpZgogICAgIGlmICh3
ZWJzaXRlRGF0YVR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6RGlza0NhY2hlKSkgewot
ICAgICAgICBmb3IgKGF1dG8mIHNlc3Npb24gOiBuZXR3b3JrU2Vzc2lvbnMoKS52YWx1ZXMoKSkg
ewotICAgICAgICAgICAgZmV0Y2hEaXNrQ2FjaGVFbnRyaWVzKHNlc3Npb24tPmNhY2hlKCksIHNl
c3Npb25JRCwgZmV0Y2hPcHRpb25zLCBbY2FsbGJhY2tBZ2dyZWdhdG9yID0gY2FsbGJhY2tBZ2dy
ZWdhdG9yLmNvcHlSZWYoKV0oYXV0byBlbnRyaWVzKSBtdXRhYmxlIHsKKyAgICAgICAgZm9yRWFj
aE5ldHdvcmtTZXNzaW9uKFtzZXNzaW9uSUQsIGZldGNoT3B0aW9ucywgJmNhbGxiYWNrQWdncmVn
YXRvcl0oYXV0byYgc2Vzc2lvbikgeworICAgICAgICAgICAgZmV0Y2hEaXNrQ2FjaGVFbnRyaWVz
KHNlc3Npb24uY2FjaGUoKSwgc2Vzc2lvbklELCBmZXRjaE9wdGlvbnMsIFtjYWxsYmFja0FnZ3Jl
Z2F0b3IgPSBjYWxsYmFja0FnZ3JlZ2F0b3IuY29weVJlZigpXShhdXRvIGVudHJpZXMpIG11dGFi
bGUgewogICAgICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+bV93ZWJzaXRlRGF0YS5l
bnRyaWVzLmFwcGVuZFZlY3RvcihlbnRyaWVzKTsKICAgICAgICAgICAgIH0pOwotICAgICAgICB9
CisgICAgICAgIH0pOwogICAgIH0KIH0KIApAQCAtMTUxOSw4ICsxNTI4LDkgQEAgdm9pZCBOZXR3
b3JrUHJvY2Vzczo6ZGVsZXRlV2Vic2l0ZURhdGFGb3JPcmlnaW5zKFBBTDo6U2Vzc2lvbklEIHNl
c3Npb25JRCwgT3B0aW8KICNlbmRpZgogCiAgICAgaWYgKHdlYnNpdGVEYXRhVHlwZXMuY29udGFp
bnMoV2Vic2l0ZURhdGFUeXBlOjpEaXNrQ2FjaGUpICYmICFzZXNzaW9uSUQuaXNFcGhlbWVyYWwo
KSkgewotICAgICAgICBmb3IgKGF1dG8mIHNlc3Npb24gOiBuZXR3b3JrU2Vzc2lvbnMoKS52YWx1
ZXMoKSkKLSAgICAgICAgICAgIGNsZWFyRGlza0NhY2hlRW50cmllcyhzZXNzaW9uLT5jYWNoZSgp
LCBvcmlnaW5EYXRhcywgW2NsZWFyVGFza3NIYW5kbGVyID0gY2xlYXJUYXNrc0hhbmRsZXIuY29w
eVJlZigpXSB7IH0pOworICAgICAgICBmb3JFYWNoTmV0d29ya1Nlc3Npb24oW29yaWdpbkRhdGFz
LCAmY2xlYXJUYXNrc0hhbmRsZXJdKGF1dG8mIHNlc3Npb24pIHsKKyAgICAgICAgICAgIGNsZWFy
RGlza0NhY2hlRW50cmllcyhzZXNzaW9uLmNhY2hlKCksIG9yaWdpbkRhdGFzLCBbY2xlYXJUYXNr
c0hhbmRsZXIgPSBjbGVhclRhc2tzSGFuZGxlci5jb3B5UmVmKCldIHsgfSk7CisgICAgICAgIH0p
OwogICAgIH0KIAogICAgIGlmICh3ZWJzaXRlRGF0YVR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRh
VHlwZTo6Q3JlZGVudGlhbHMpKSB7CkBAIC0xNzU0LDggKzE3NjQsOCBAQCB2b2lkIE5ldHdvcmtQ
cm9jZXNzOjpkZWxldGVXZWJzaXRlRGF0YUZvclJlZ2lzdHJhYmxlRG9tYWlucyhQQUw6OlNlc3Np
b25JRCBzZXNzaQogI2VuZGlmCiAKICAgICBpZiAod2Vic2l0ZURhdGFUeXBlcy5jb250YWlucyhX
ZWJzaXRlRGF0YVR5cGU6OkRpc2tDYWNoZSkpIHsKLSAgICAgICAgZm9yIChhdXRvJiBzZXNzaW9u
IDogbmV0d29ya1Nlc3Npb25zKCkudmFsdWVzKCkpIHsKLSAgICAgICAgICAgIGZldGNoRGlza0Nh
Y2hlRW50cmllcyhzZXNzaW9uLT5jYWNoZSgpLCBzZXNzaW9uSUQsIGZldGNoT3B0aW9ucywgW2Rv
bWFpbnNUb0RlbGV0ZUFsbEJ1dENvb2tpZXNGb3IsIGNhbGxiYWNrQWdncmVnYXRvciA9IGNhbGxi
YWNrQWdncmVnYXRvci5jb3B5UmVmKCksIHNlc3Npb24gPSBtYWtlV2Vha1B0cihzZXNzaW9uLmdl
dCgpKV0oYXV0byBlbnRyaWVzKSBtdXRhYmxlIHsKKyAgICAgICAgZm9yRWFjaE5ldHdvcmtTZXNz
aW9uKFtzZXNzaW9uSUQsIGZldGNoT3B0aW9ucywgJmRvbWFpbnNUb0RlbGV0ZUFsbEJ1dENvb2tp
ZXNGb3IsICZjYWxsYmFja0FnZ3JlZ2F0b3JdKGF1dG8mIHNlc3Npb24pIHsKKyAgICAgICAgICAg
IGZldGNoRGlza0NhY2hlRW50cmllcyhzZXNzaW9uLmNhY2hlKCksIHNlc3Npb25JRCwgZmV0Y2hP
cHRpb25zLCBbZG9tYWluc1RvRGVsZXRlQWxsQnV0Q29va2llc0ZvciwgY2FsbGJhY2tBZ2dyZWdh
dG9yID0gY2FsbGJhY2tBZ2dyZWdhdG9yLmNvcHlSZWYoKSwgc2Vzc2lvbiA9IG1ha2VXZWFrUHRy
KCZzZXNzaW9uKV0oYXV0byBlbnRyaWVzKSBtdXRhYmxlIHsKICAgICAgICAgICAgICAgICBpZiAo
IXNlc3Npb24pCiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKIApAQCAtMTc2OCw3ICsxNzc4
LDcgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6ZGVsZXRlV2Vic2l0ZURhdGFGb3JSZWdpc3RyYWJs
ZURvbWFpbnMoUEFMOjpTZXNzaW9uSUQgc2Vzc2kKICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgY2xlYXJEaXNrQ2FjaGVFbnRyaWVzKHNlc3Npb24tPmNhY2hlKCksIGVudHJpZXNU
b0RlbGV0ZSwgW2NhbGxiYWNrQWdncmVnYXRvciA9IGNhbGxiYWNrQWdncmVnYXRvci5jb3B5UmVm
KCldIHsgfSk7CiAgICAgICAgICAgICB9KTsKLSAgICAgICAgfQorICAgICAgICB9KTsKICAgICB9
CiAKICAgICBhdXRvIGRhdGFUeXBlc0ZvclVJUHJvY2VzcyA9IFdlYnNpdGVEYXRhOjpmaWx0ZXIo
d2Vic2l0ZURhdGFUeXBlcywgV2Vic2l0ZURhdGFQcm9jZXNzVHlwZTo6VUkpOwpAQCAtMTg5MCwx
MSArMTkwMCwxMSBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpyZWdpc3RyYWJsZURvbWFpbnNXaXRo
V2Vic2l0ZURhdGEoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELAogI2VuZGlmCiAgICAgCiAgICAg
aWYgKHdlYnNpdGVEYXRhVHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpEaXNrQ2FjaGUp
KSB7Ci0gICAgICAgIGZvciAoYXV0byYgc2Vzc2lvbiA6IG5ldHdvcmtTZXNzaW9ucygpLnZhbHVl
cygpKSB7Ci0gICAgICAgICAgICBmZXRjaERpc2tDYWNoZUVudHJpZXMoc2Vzc2lvbi0+Y2FjaGUo
KSwgc2Vzc2lvbklELCBmZXRjaE9wdGlvbnMsIFtjYWxsYmFja0FnZ3JlZ2F0b3IgPSBjYWxsYmFj
a0FnZ3JlZ2F0b3IuY29weVJlZigpXShhdXRvIGVudHJpZXMpIG11dGFibGUgeworICAgICAgICBm
b3JFYWNoTmV0d29ya1Nlc3Npb24oW3Nlc3Npb25JRCwgZmV0Y2hPcHRpb25zLCAmY2FsbGJhY2tB
Z2dyZWdhdG9yXShhdXRvJiBzZXNzaW9uKSB7CisgICAgICAgICAgICBmZXRjaERpc2tDYWNoZUVu
dHJpZXMoc2Vzc2lvbi5jYWNoZSgpLCBzZXNzaW9uSUQsIGZldGNoT3B0aW9ucywgW2NhbGxiYWNr
QWdncmVnYXRvciA9IGNhbGxiYWNrQWdncmVnYXRvci5jb3B5UmVmKCldKGF1dG8gZW50cmllcykg
bXV0YWJsZSB7CiAgICAgICAgICAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5tX3dlYnNpdGVE
YXRhLmVudHJpZXMuYXBwZW5kVmVjdG9yKGVudHJpZXMpOwogICAgICAgICAgICAgfSk7Ci0gICAg
ICAgIH0KKyAgICAgICAgfSk7CiAgICAgfQogfQogI2VuZGlmIC8vIEVOQUJMRShSRVNPVVJDRV9M
T0FEX1NUQVRJU1RJQ1MpCkBAIC0xOTg2LDExICsxOTk2LDExIEBAIHZvaWQgTmV0d29ya1Byb2Nl
c3M6OnNldENhY2hlTW9kZWwoQ2FjaGVNb2RlbCBjYWNoZU1vZGVsKQogICAgICAgICBkaXNrRnJl
ZVNpemUgLz0gS0IgKiAxMDAwOwogICAgICAgICBjYWxjdWxhdGVVUkxDYWNoZVNpemVzKGNhY2hl
TW9kZWwsIGRpc2tGcmVlU2l6ZSwgdXJsQ2FjaGVNZW1vcnlDYXBhY2l0eSwgdXJsQ2FjaGVEaXNr
Q2FwYWNpdHkpOwogICAgIH0KLSAgICAKLSAgICBmb3IgKGF1dG8mIHNlc3Npb24gOiBuZXR3b3Jr
U2Vzc2lvbnMoKS52YWx1ZXMoKSkgewotICAgICAgICBpZiAoYXV0byogY2FjaGUgPSBzZXNzaW9u
LT5jYWNoZSgpKQorCisgICAgZm9yRWFjaE5ldHdvcmtTZXNzaW9uKFt1cmxDYWNoZURpc2tDYXBh
Y2l0eV0oYXV0byYgc2Vzc2lvbikgeworICAgICAgICBpZiAoYXV0byogY2FjaGUgPSBzZXNzaW9u
LmNhY2hlKCkpCiAgICAgICAgICAgICBjYWNoZS0+c2V0Q2FwYWNpdHkodXJsQ2FjaGVEaXNrQ2Fw
YWNpdHkpOwotICAgIH0KKyAgICB9KTsKIH0KIAogdm9pZCBOZXR3b3JrUHJvY2Vzczo6c2V0Q2Fu
SGFuZGxlSFRUUFNTZXJ2ZXJUcnVzdEV2YWx1YXRpb24oYm9vbCB2YWx1ZSkKQEAgLTIwODQsOCAr
MjA5NCw5IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmFjdHVhbFByZXBhcmVUb1N1c3BlbmQoU2hv
dWxkQWNrbm93bGVkZ2VXaGVuUmVhZHlUb1N1c3BlbmQKICAgICB9CiAjZW5kaWYKIAotICAgIGZv
ciAoYXV0byYgc2Vzc2lvbiA6IG1fbmV0d29ya1Nlc3Npb25zKQotICAgICAgICBzZXNzaW9uLnZh
bHVlLT5zdG9yYWdlTWFuYWdlcigpLnN1c3BlbmQoW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsK
KyAgICBmb3JFYWNoTmV0d29ya1Nlc3Npb24oWyZjYWxsYmFja0FnZ3JlZ2F0b3JdKGF1dG8mIHNl
c3Npb24pIHsKKyAgICAgICAgc2Vzc2lvbi5zdG9yYWdlTWFuYWdlcigpLnN1c3BlbmQoW2NhbGxi
YWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICB9KTsKIH0KIAogdm9pZCBOZXR3b3JrUHJvY2Vzczo6
cHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseSgpCkBAIC0yMTU1LDggKzIxNjYsOSBAQCB2b2lk
IE5ldHdvcmtQcm9jZXNzOjpyZXN1bWUoKQogICAgICAgICBzZXJ2ZXItPnJlc3VtZSgpOwogI2Vu
ZGlmCiAKLSAgICBmb3IgKGF1dG8mIHNlc3Npb24gOiBtX25ldHdvcmtTZXNzaW9ucykKLSAgICAg
ICAgc2Vzc2lvbi52YWx1ZS0+c3RvcmFnZU1hbmFnZXIoKS5yZXN1bWUoKTsKKyAgICBmb3JFYWNo
TmV0d29ya1Nlc3Npb24oW10oYXV0byYgc2Vzc2lvbikgeworICAgICAgICBzZXNzaW9uLnN0b3Jh
Z2VNYW5hZ2VyKCkucmVzdW1lKCk7CisgICAgfSk7CiB9CiAKIHZvaWQgTmV0d29ya1Byb2Nlc3M6
OnByZWZldGNoRE5TKGNvbnN0IFN0cmluZyYgaG9zdG5hbWUpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmggYi9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmgKaW5kZXggNGExYzNmNDljN2EuLjI4NjY4NTcw
ZDM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9j
ZXNzLmgKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5o
CkBAIC0xNjYsOCArMTY2LDcgQEAgcHVibGljOgogICAgIE5ldHdvcmtTZXNzaW9uKiBuZXR3b3Jr
U2Vzc2lvbkJ5Q29ubmVjdGlvbihJUEM6OkNvbm5lY3Rpb24mKSBjb25zdDsKICAgICB2b2lkIGRl
c3Ryb3lTZXNzaW9uKGNvbnN0IFBBTDo6U2Vzc2lvbklEJik7CiAKLSAgICAvLyBOZWVkZWQgZm9y
IHRlc3QgaW5mcmFzdHJ1Y3R1cmUKLSAgICBIYXNoTWFwPFBBTDo6U2Vzc2lvbklELCBzdGQ6OnVu
aXF1ZV9wdHI8TmV0d29ya1Nlc3Npb24+PiYgbmV0d29ya1Nlc3Npb25zKCkgeyByZXR1cm4gbV9u
ZXR3b3JrU2Vzc2lvbnM7IH0KKyAgICB2b2lkIGZvckVhY2hOZXR3b3JrU2Vzc2lvbihjb25zdCBG
dW5jdGlvbjx2b2lkKE5ldHdvcmtTZXNzaW9uJik+Jik7CiAKICAgICB2b2lkIGZvckVhY2hOZXR3
b3JrU3RvcmFnZVNlc3Npb24oY29uc3QgRnVuY3Rpb248dm9pZChXZWJDb3JlOjpOZXR3b3JrU3Rv
cmFnZVNlc3Npb24mKT4mKTsKICAgICBXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24qIHN0
b3JhZ2VTZXNzaW9uKGNvbnN0IFBBTDo6U2Vzc2lvbklEJikgY29uc3Q7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtTdG9yYWdlU2Vzc2lvblByb3ZpZGVy
LmggYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtTdG9yYWdlU2Vzc2lvblBy
b3ZpZGVyLmgKaW5kZXggOGFhOTIwNDRiMjAuLjk1YmIxZDRkMzhiIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtTdG9yYWdlU2Vzc2lvblByb3ZpZGVyLmgK
KysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrU3RvcmFnZVNlc3Npb25Q
cm92aWRlci5oCkBAIC0zMSw2ICszMSwxMCBAQAogI2luY2x1ZGUgPHBhbC9TZXNzaW9uSUQuaD4K
ICNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgogCisjaWYgVVNFKFNPVVApCisjaW5jbHVkZSAiTmV0
d29ya1Nlc3Npb25Tb3VwLmgiCisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNz
IE5ldHdvcmtTdG9yYWdlU2Vzc2lvblByb3ZpZGVyIGZpbmFsIDogcHVibGljIFdlYkNvcmU6OlN0
b3JhZ2VTZXNzaW9uUHJvdmlkZXIgewpAQCAtNDksNiArNTMsMTkgQEAgcHJpdmF0ZToKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCisjaWYgVVNFKFNPVVApCisgICAgU291cFNlc3Np
b24qIHNvdXBTZXNzaW9uKCkgY29uc3QgZmluYWwKKyAgICB7CisgICAgICAgIGlmICghbV9uZXR3
b3JrUHJvY2VzcykKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgICAgIGlmIChh
dXRvKiBzZXNzaW9uID0gbV9uZXR3b3JrUHJvY2Vzcy0+bmV0d29ya1Nlc3Npb24obV9zZXNzaW9u
SUQpKQorICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PE5ldHdvcmtTZXNzaW9uU291cCY+
KCpzZXNzaW9uKS5zb3VwU2Vzc2lvbigpOworCisgICAgICAgIHJldHVybiBudWxscHRyOworICAg
IH0KKyNlbmRpZgorCiAgICAgV2Vha1B0cjxOZXR3b3JrUHJvY2Vzcz4gbV9uZXR3b3JrUHJvY2Vz
czsKICAgICBQQUw6OlNlc3Npb25JRCBtX3Nlc3Npb25JRDsKIH07CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtQcm9jZXNzQ29jb2EubW0gYi9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtQcm9jZXNzQ29jb2EubW0K
aW5kZXggMDdiOTYzM2JkNDguLjA3N2YxNmZhNjUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtQcm9jZXNzQ29jb2EubW0KKysrIGIvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrUHJvY2Vzc0NvY29hLm1tCkBAIC0x
OTksMTAgKzE5OSwxMCBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpjbGVhckRpc2tDYWNoZShXYWxs
VGltZSBtb2RpZmllZFNpbmNlLCBDb21wbGV0aW9uSGFuZGxlcjx2bwogICAgIGF1dG8gZ3JvdXAg
PSBtX2NsZWFyQ2FjaGVEaXNwYXRjaEdyb3VwOwogICAgIGRpc3BhdGNoX2dyb3VwX2FzeW5jKGdy
b3VwLCBkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBtYWtlQmxvY2tQdHIoW3RoaXMsIHByb3Rl
Y3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgbW9kaWZpZWRTaW5jZSwgY29tcGxldGlvbkhhbmRs
ZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKCkgbXV0YWJsZSB7CiAgICAgICAgIGF1
dG8gYWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKTsKLSAgICAgICAgZm9yIChhdXRvJiBzZXNzaW9uIDogbmV0d29ya1Nlc3Np
b25zKCkudmFsdWVzKCkpIHsKLSAgICAgICAgICAgIGlmIChhdXRvKiBjYWNoZSA9IHNlc3Npb24t
PmNhY2hlKCkpCisgICAgICAgIGZvckVhY2hOZXR3b3JrU2Vzc2lvbihbbW9kaWZpZWRTaW5jZSwg
JmFnZ3JlZ2F0b3JdKE5ldHdvcmtTZXNzaW9uJiBzZXNzaW9uKSB7CisgICAgICAgICAgICBpZiAo
YXV0byogY2FjaGUgPSBzZXNzaW9uLmNhY2hlKCkpCiAgICAgICAgICAgICAgICAgY2FjaGUtPmNs
ZWFyKG1vZGlmaWVkU2luY2UsIFthZ2dyZWdhdG9yID0gYWdncmVnYXRvci5jb3B5UmVmKCldICgp
IHsgfSk7Ci0gICAgICAgIH0KKyAgICAgICAgfSk7CiAgICAgfSkuZ2V0KCkpOwogfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2lvcy9OZXR3b3JrUHJvY2Vzc0lP
Uy5tbSBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvaW9zL05ldHdvcmtQcm9jZXNzSU9T
Lm1tCmluZGV4IDI5ZGQwODc3YmQ0Li5mZWFkZGJjZDFkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9pb3MvTmV0d29ya1Byb2Nlc3NJT1MubW0KKysrIGIvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9pb3MvTmV0d29ya1Byb2Nlc3NJT1MubW0KQEAgLTc4LDEw
ICs3OCwxMCBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpjbGVhckNhY2hlRm9yQWxsT3JpZ2lucyh1
aW50MzJfdCBjYWNoZXNUb0NsZWFyKQogICAgIFJlc291cmNlQ2FjaGVzVG9DbGVhciByZXNvdXJj
ZUNhY2hlc1RvQ2xlYXIgPSBzdGF0aWNfY2FzdDxSZXNvdXJjZUNhY2hlc1RvQ2xlYXI+KGNhY2hl
c1RvQ2xlYXIpOwogICAgIGlmIChyZXNvdXJjZUNhY2hlc1RvQ2xlYXIgPT0gSW5NZW1vcnlSZXNv
dXJjZUNhY2hlc09ubHkpCiAgICAgICAgIHJldHVybjsKLSAgICBmb3IgKGF1dG8mIHNlc3Npb24g
OiBuZXR3b3JrU2Vzc2lvbnMoKS52YWx1ZXMoKSkgewotICAgICAgICBpZiAoYXV0byogY2FjaGUg
PSBzZXNzaW9uLT5jYWNoZSgpKQorICAgIGZvckVhY2hOZXR3b3JrU2Vzc2lvbihbXShOZXR3b3Jr
U2Vzc2lvbiYgc2Vzc2lvbikgeworICAgICAgICBpZiAoYXV0byogY2FjaGUgPSBzZXNzaW9uLmNh
Y2hlKCkpCiAgICAgICAgICAgICBjYWNoZS0+Y2xlYXIoKTsKLSAgICB9CisgICAgfSk7CiB9CiAK
IHZvaWQgTmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKGNv
bnN0IE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtQcm9jZXNzTWFp
blNvdXAuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtQcm9j
ZXNzTWFpblNvdXAuY3BwCmluZGV4IGY3ZDE0NTEwNGNlLi5hZDBiZGFkNWRjMCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtQcm9jZXNzTWFpblNv
dXAuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrUHJv
Y2Vzc01haW5Tb3VwLmNwcApAQCAtNDEsNyArNDEsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAg
ICAvLyBOZWVkZWQgdG8gZGVzdHJveSB0aGUgU291cFNlc3Npb24gYW5kIFNvdXBDb29raWVKYXIs
IGUuZy4gdG8gYXZvaWQKICAgICAgICAgLy8gbGVha2luZyBTUUxpdGUgdGVtcG9yYXJ5IGpvdXJu
YWxpbmcgZmlsZXMuCi0gICAgICAgIGdsb2JhbE5ldHdvcmtQcm9jZXNzLT5kZWZhdWx0U3RvcmFn
ZVNlc3Npb24oKS5jbGVhclNvdXBOZXR3b3JrU2Vzc2lvbigpOworICAgICAgICBnbG9iYWxOZXR3
b3JrUHJvY2Vzcy0+ZGVzdHJveVNlc3Npb24oUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9u
SUQoKSk7CiAgICAgfQogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9zb3VwL05ldHdvcmtQcm9jZXNzU291cC5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL3NvdXAvTmV0d29ya1Byb2Nlc3NTb3VwLmNwcAppbmRleCA3Yzc4YjBiMzBjMi4uODNj
MmYyOGVhNWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc291cC9O
ZXR3b3JrUHJvY2Vzc1NvdXAuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
c291cC9OZXR3b3JrUHJvY2Vzc1NvdXAuY3BwCkBAIC0yOSw3ICsyOSw3IEBACiAKICNpbmNsdWRl
ICJOZXR3b3JrQ2FjaGUuaCIKICNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1l
dGVycy5oIgotI2luY2x1ZGUgIk5ldHdvcmtTZXNzaW9uLmgiCisjaW5jbHVkZSAiTmV0d29ya1Nl
c3Npb25Tb3VwLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VDYWNoZXNUb0NsZWFyLmgiCiAjaW5jbHVk
ZSAiV2ViQ29va2llTWFuYWdlci5oIgogI2luY2x1ZGUgIldlYktpdENhY2hlZFJlc29sdmVyLmgi
CkBAIC05OSw4ICs5OSw4IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OnVzZXJQcmVmZXJyZWRMYW5n
dWFnZXNDaGFuZ2VkKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBsYW5ndWFnCiB7CiAgICAgYXV0byBh
Y2NlcHRMYW5ndWFnZXMgPSBidWlsZEFjY2VwdExhbmd1YWdlcyhsYW5ndWFnZXMpOwogICAgIFNv
dXBOZXR3b3JrU2Vzc2lvbjo6c2V0SW5pdGlhbEFjY2VwdExhbmd1YWdlcyhhY2NlcHRMYW5ndWFn
ZXMpOwotICAgIGZvckVhY2hOZXR3b3JrU3RvcmFnZVNlc3Npb24oWyZhY2NlcHRMYW5ndWFnZXNd
KGNvbnN0IGF1dG8mIHNlc3Npb24pIHsKLSAgICAgICAgc2Vzc2lvbi5zb3VwTmV0d29ya1Nlc3Np
b24oKS5zZXRBY2NlcHRMYW5ndWFnZXMoYWNjZXB0TGFuZ3VhZ2VzKTsKKyAgICBmb3JFYWNoTmV0
d29ya1Nlc3Npb24oWyZhY2NlcHRMYW5ndWFnZXNdKGNvbnN0IGF1dG8mIHNlc3Npb24pIHsKKyAg
ICAgICAgc3RhdGljX2Nhc3Q8Y29uc3QgTmV0d29ya1Nlc3Npb25Tb3VwJj4oc2Vzc2lvbikuc291
cE5ldHdvcmtTZXNzaW9uKCkuc2V0QWNjZXB0TGFuZ3VhZ2VzKGFjY2VwdExhbmd1YWdlcyk7CiAg
ICAgfSk7CiB9CiAKQEAgLTEzMyw3ICsxMzMsNyBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpwbGF0
Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2Vzcyhjb25zdCBOZXR3b3JrUHJvY2Vzc0NyZWF0aQog
CiBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uPiBOZXR3b3Jr
UHJvY2Vzczo6cGxhdGZvcm1DcmVhdGVEZWZhdWx0U3RvcmFnZVNlc3Npb24oKSBjb25zdAogewot
ICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lv
bj4oUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSwgc3RkOjptYWtlX3VuaXF1ZTxT
b3VwTmV0d29ya1Nlc3Npb24+KFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpKTsK
KyAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Np
b24+KFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpOwogfQogCiB2b2lkIE5ldHdv
cmtQcm9jZXNzOjpzZXRJZ25vcmVUTFNFcnJvcnMoYm9vbCBpZ25vcmVUTFNFcnJvcnMpCkBAIC0x
NTcsMTAgKzE1NywxMCBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpjbGVhckNhY2hlRm9yQWxsT3Jp
Z2lucyh1aW50MzJfdCBjYWNoZXNUb0NsZWFyKQogdm9pZCBOZXR3b3JrUHJvY2Vzczo6Y2xlYXJE
aXNrQ2FjaGUoV2FsbFRpbWUgbW9kaWZpZWRTaW5jZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgp
PiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIGF1dG8gYWdncmVnYXRvciA9IENhbGxiYWNr
QWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICBmb3Ig
KGF1dG8mIHNlc3Npb24gOiBuZXR3b3JrU2Vzc2lvbnMoKS52YWx1ZXMoKSkgewotICAgICAgICBp
ZiAoYXV0byogY2FjaGUgPSBzZXNzaW9uLT5jYWNoZSgpKQorICAgIGZvckVhY2hOZXR3b3JrU2Vz
c2lvbihbbW9kaWZpZWRTaW5jZSwgJmFnZ3JlZ2F0b3JdKE5ldHdvcmtTZXNzaW9uJiBzZXNzaW9u
KSB7CisgICAgICAgIGlmIChhdXRvKiBjYWNoZSA9IHNlc3Npb24uY2FjaGUoKSkKICAgICAgICAg
ICAgIGNhY2hlLT5jbGVhcihtb2RpZmllZFNpbmNlLCBbYWdncmVnYXRvciA9IGFnZ3JlZ2F0b3Iu
Y29weVJlZigpXSAoKSB7IH0pOwotICAgIH0KKyAgICB9KTsKIH0KIAogdm9pZCBOZXR3b3JrUHJv
Y2Vzczo6cGxhdGZvcm1UZXJtaW5hdGUoKQpAQCAtMTcxLDggKzE3MSw4IEBAIHZvaWQgTmV0d29y
a1Byb2Nlc3M6OnBsYXRmb3JtVGVybWluYXRlKCkKIHZvaWQgTmV0d29ya1Byb2Nlc3M6OnNldE5l
dHdvcmtQcm94eVNldHRpbmdzKGNvbnN0IFNvdXBOZXR3b3JrUHJveHlTZXR0aW5ncyYgc2V0dGlu
Z3MpCiB7CiAgICAgU291cE5ldHdvcmtTZXNzaW9uOjpzZXRQcm94eVNldHRpbmdzKHNldHRpbmdz
KTsKLSAgICBmb3JFYWNoTmV0d29ya1N0b3JhZ2VTZXNzaW9uKFtdKGNvbnN0IGF1dG8mIHNlc3Np
b24pIHsKLSAgICAgICAgc2Vzc2lvbi5zb3VwTmV0d29ya1Nlc3Npb24oKS5zZXR1cFByb3h5KCk7
CisgICAgZm9yRWFjaE5ldHdvcmtTZXNzaW9uKFtdKGNvbnN0IGF1dG8mIHNlc3Npb24pIHsKKyAg
ICAgICAgc3RhdGljX2Nhc3Q8Y29uc3QgTmV0d29ya1Nlc3Npb25Tb3VwJj4oc2Vzc2lvbikuc291
cE5ldHdvcmtTZXNzaW9uKCkuc2V0dXBQcm94eSgpOwogICAgIH0pOwogfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Nlc3Npb25Tb3VwLmNw
cCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrU2Vzc2lvblNvdXAu
Y3BwCmluZGV4IGY3ZGVjNzA0OGQxLi43MzU1MjU3YmVkYSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtTZXNzaW9uU291cC5jcHAKKysrIGIvU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtTZXNzaW9uU291cC5jcHAKQEAg
LTQxLDEzICs0MSwxOSBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogTmV0d29ya1Nlc3Np
b25Tb3VwOjpOZXR3b3JrU2Vzc2lvblNvdXAoTmV0d29ya1Byb2Nlc3MmIG5ldHdvcmtQcm9jZXNz
LCBOZXR3b3JrU2Vzc2lvbkNyZWF0aW9uUGFyYW1ldGVycyYmIHBhcmFtZXRlcnMpCiAgICAgOiBO
ZXR3b3JrU2Vzc2lvbihuZXR3b3JrUHJvY2VzcywgcGFyYW1ldGVycykKKyAgICAsIG1fbmV0d29y
a1Nlc3Npb24oc3RkOjptYWtlX3VuaXF1ZTxTb3VwTmV0d29ya1Nlc3Npb24+KG1fc2Vzc2lvbklE
KSkKIHsKLSAgICBuZXR3b3JrU3RvcmFnZVNlc3Npb24oKS0+c2V0Q29va2llT2JzZXJ2ZXJIYW5k
bGVyKFt0aGlzXSB7Ci0gICAgICAgIHRoaXMtPm5ldHdvcmtQcm9jZXNzKCkuc3VwcGxlbWVudDxX
ZWJDb29raWVNYW5hZ2VyPigpLT5ub3RpZnlDb29raWVzRGlkQ2hhbmdlKG1fc2Vzc2lvbklEKTsK
LSAgICB9KTsKKyAgICBhdXRvKiBzdG9yYWdlU2Vzc2lvbiA9IG5ldHdvcmtTdG9yYWdlU2Vzc2lv
bigpOworICAgIEFTU0VSVChzdG9yYWdlU2Vzc2lvbik7CiAKICAgICBpZiAoIXBhcmFtZXRlcnMu
Y29va2llUGVyc2lzdGVudFN0b3JhZ2VQYXRoLmlzRW1wdHkoKSkKLSAgICAgICAgdGhpcy0+bmV0
d29ya1Byb2Nlc3MoKS5zdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXI+KCktPnNldENvb2tpZVBl
cnNpc3RlbnRTdG9yYWdlKG1fc2Vzc2lvbklELCBwYXJhbWV0ZXJzLmNvb2tpZVBlcnNpc3RlbnRT
dG9yYWdlUGF0aCwgcGFyYW1ldGVycy5jb29raWVQZXJzaXN0ZW50U3RvcmFnZVR5cGUpOworICAg
ICAgICBzZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShwYXJhbWV0ZXJzLmNvb2tpZVBlcnNpc3Rl
bnRTdG9yYWdlUGF0aCwgcGFyYW1ldGVycy5jb29raWVQZXJzaXN0ZW50U3RvcmFnZVR5cGUpOwor
ICAgIGVsc2UKKyAgICAgICAgbV9uZXR3b3JrU2Vzc2lvbi0+c2V0Q29va2llSmFyKHN0b3JhZ2VT
ZXNzaW9uLT5jb29raWVTdG9yYWdlKCkpOworCisgICAgc3RvcmFnZVNlc3Npb24tPnNldENvb2tp
ZU9ic2VydmVySGFuZGxlcihbdGhpc10geworICAgICAgICB0aGlzLT5uZXR3b3JrUHJvY2Vzcygp
LnN1cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlcj4oKS0+bm90aWZ5Q29va2llc0RpZENoYW5nZSht
X3Nlc3Npb25JRCk7CisgICAgfSk7CiB9CiAKIE5ldHdvcmtTZXNzaW9uU291cDo6fk5ldHdvcmtT
ZXNzaW9uU291cCgpCkBAIC01OCw3ICs2NCwzMSBAQCBOZXR3b3JrU2Vzc2lvblNvdXA6On5OZXR3
b3JrU2Vzc2lvblNvdXAoKQogCiBTb3VwU2Vzc2lvbiogTmV0d29ya1Nlc3Npb25Tb3VwOjpzb3Vw
U2Vzc2lvbigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG5ldHdvcmtTdG9yYWdlU2Vzc2lvbigpLT5z
b3VwTmV0d29ya1Nlc3Npb24oKS5zb3VwU2Vzc2lvbigpOworICAgIHJldHVybiBtX25ldHdvcmtT
ZXNzaW9uLT5zb3VwU2Vzc2lvbigpOworfQorCit2b2lkIE5ldHdvcmtTZXNzaW9uU291cDo6c2V0
Q29va2llUGVyc2lzdGVudFN0b3JhZ2UoY29uc3QgU3RyaW5nJiBzdG9yYWdlUGF0aCwgU291cENv
b2tpZVBlcnNpc3RlbnRTdG9yYWdlVHlwZSBzdG9yYWdlVHlwZSkKK3sKKyAgICBhdXRvKiBzdG9y
YWdlU2Vzc2lvbiA9IG5ldHdvcmtTdG9yYWdlU2Vzc2lvbigpOworICAgIGlmICghc3RvcmFnZVNl
c3Npb24pCisgICAgICAgIHJldHVybjsKKworICAgIEdSZWZQdHI8U291cENvb2tpZUphcj4gamFy
OworICAgIHN3aXRjaCAoc3RvcmFnZVR5cGUpIHsKKyAgICBjYXNlIFNvdXBDb29raWVQZXJzaXN0
ZW50U3RvcmFnZVR5cGU6OlRleHQ6CisgICAgICAgIGphciA9IGFkb3B0R1JlZihzb3VwX2Nvb2tp
ZV9qYXJfdGV4dF9uZXcoc3RvcmFnZVBhdGgudXRmOCgpLmRhdGEoKSwgRkFMU0UpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBTb3VwQ29va2llUGVyc2lzdGVudFN0b3JhZ2VUeXBlOjpTUUxp
dGU6CisgICAgICAgIGphciA9IGFkb3B0R1JlZihzb3VwX2Nvb2tpZV9qYXJfZGJfbmV3KHN0b3Jh
Z2VQYXRoLnV0ZjgoKS5kYXRhKCksIEZBTFNFKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1
bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIHNvdXBfY29v
a2llX2phcl9zZXRfYWNjZXB0X3BvbGljeShqYXIuZ2V0KCksIHNvdXBfY29va2llX2phcl9nZXRf
YWNjZXB0X3BvbGljeShzdG9yYWdlU2Vzc2lvbi0+Y29va2llU3RvcmFnZSgpKSk7CisgICAgc3Rv
cmFnZVNlc3Npb24tPnNldENvb2tpZVN0b3JhZ2UoV1RGTW92ZShqYXIpKTsKKworICAgIG1fbmV0
d29ya1Nlc3Npb24tPnNldENvb2tpZUphcihzdG9yYWdlU2Vzc2lvbi0+Y29va2llU3RvcmFnZSgp
KTsKIH0KIAogdm9pZCBOZXR3b3JrU2Vzc2lvblNvdXA6OmNsZWFyQ3JlZGVudGlhbHMoKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtTZXNzaW9u
U291cC5oIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtTZXNzaW9u
U291cC5oCmluZGV4IDkxNWQwMmQ1MjRlLi5mOWVmNGJiNTQzMCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtTZXNzaW9uU291cC5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrU2Vzc2lvblNvdXAuaApAQCAt
MjYsOSArMjYsMTQgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiTmV0d29ya1Nlc3Npb24u
aCIKKyNpbmNsdWRlICJTb3VwQ29va2llUGVyc2lzdGVudFN0b3JhZ2VUeXBlLmgiCiAKIHR5cGVk
ZWYgc3RydWN0IF9Tb3VwU2Vzc2lvbiBTb3VwU2Vzc2lvbjsKIAorbmFtZXNwYWNlIFdlYkNvcmUg
eworY2xhc3MgU291cE5ldHdvcmtTZXNzaW9uOworfQorCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAog
Y2xhc3MgTmV0d29ya1NvY2tldENoYW5uZWw7CkBAIC00NCwxMSArNDksMTYgQEAgcHVibGljOgog
ICAgIE5ldHdvcmtTZXNzaW9uU291cChOZXR3b3JrUHJvY2VzcyYsIE5ldHdvcmtTZXNzaW9uQ3Jl
YXRpb25QYXJhbWV0ZXJzJiYpOwogICAgIH5OZXR3b3JrU2Vzc2lvblNvdXAoKTsKIAorICAgIFdl
YkNvcmU6OlNvdXBOZXR3b3JrU2Vzc2lvbiYgc291cE5ldHdvcmtTZXNzaW9uKCkgY29uc3QgeyBy
ZXR1cm4gKm1fbmV0d29ya1Nlc3Npb247IH0KICAgICBTb3VwU2Vzc2lvbiogc291cFNlc3Npb24o
KSBjb25zdDsKIAorICAgIHZvaWQgc2V0Q29va2llUGVyc2lzdGVudFN0b3JhZ2UoY29uc3QgU3Ry
aW5nJiBzdG9yYWdlUGF0aCwgU291cENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlVHlwZSk7CisKIHBy
aXZhdGU6CiAgICAgc3RkOjp1bmlxdWVfcHRyPFdlYlNvY2tldFRhc2s+IGNyZWF0ZVdlYlNvY2tl
dFRhc2soTmV0d29ya1NvY2tldENoYW5uZWwmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVl
c3QmLCBjb25zdCBTdHJpbmcmIHByb3RvY29sKSBmaW5hbDsKICAgICB2b2lkIGNsZWFyQ3JlZGVu
dGlhbHMoKSBmaW5hbDsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTb3VwTmV0d29y
a1Nlc3Npb24+IG1fbmV0d29ya1Nlc3Npb247CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
</data>

          </attachment>
      

    </bug>

</bugzilla>