<?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>151580</bug_id>
          
          <creation_ts>2015-11-23 21:33:27 -0800</creation_ts>
          <short_desc>Make usesNetworkProcess always true</short_desc>
          <delta_ts>2016-02-08 15:54:11 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>151418</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Alex Christensen">achristensen</reporter>
          <assigned_to name="Alex Christensen">achristensen</assigned_to>
          <cc>cgarcia</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>hs85.jeong</cc>
    
    <cc>jh718.park</cc>
    
    <cc>manian</cc>
    
    <cc>mcatanzaro</cc>
    
    <cc>ossy</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1144272</commentid>
    <comment_count>0</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-11-23 21:33:27 -0800</bug_when>
    <thetext>Make usesNetworkProcess always true</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1144273</commentid>
    <comment_count>1</comment_count>
      <attachid>266114</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-11-23 21:33:55 -0800</bug_when>
    <thetext>Created attachment 266114
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1144278</commentid>
    <comment_count>2</comment_count>
      <attachid>266116</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-11-23 21:47:42 -0800</bug_when>
    <thetext>Created attachment 266116
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1144279</commentid>
    <comment_count>3</comment_count>
      <attachid>266117</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-11-23 21:56:20 -0800</bug_when>
    <thetext>Created attachment 266117
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1144282</commentid>
    <comment_count>4</comment_count>
      <attachid>266119</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-11-23 22:13:01 -0800</bug_when>
    <thetext>Created attachment 266119
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1144309</commentid>
    <comment_count>5</comment_count>
      <attachid>266119</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2015-11-24 00:28:07 -0800</bug_when>
    <thetext>Comment on attachment 266119
Patch

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

&gt; Source/WebKit2/Shared/WebProcessCreationParameters.cpp:-100
&gt;      encoder &lt;&lt; cookiePersistentStoragePath;
&gt;      encoder &lt;&lt; cookiePersistentStorageType;
&gt;      encoder.encodeEnum(cookieAcceptPolicy);
&gt; -    encoder &lt;&lt; ignoreTLSErrors;

I think we can remove all other network parameters as well. At least diskCacheDirectory, cookiePersistentStoragePath, cookiePersistentStorageType, cookieAcceptPolicy and urlSchemesRegisteredForCustomProtocols

&gt; Source/WebKit2/Shared/Network/CustomProtocols/Cocoa/CustomProtocolManagerCocoa.mm:140
&gt;  void CustomProtocolManager::initialize(const WebProcessCreationParameters&amp; parameters)
&gt;  {
&gt; -    ASSERT(parameters.urlSchemesRegisteredForCustomProtocols.isEmpty() || !parameters.usesNetworkProcess);
&gt; -    if (parameters.usesNetworkProcess) {
&gt; -        m_childProcess-&gt;parentProcessConnection()-&gt;removeWorkQueueMessageReceiver(Messages::CustomProtocolManager::messageReceiverName());
&gt; -        m_messageQueue = nullptr;
&gt; -        return;
&gt; -    }
&gt; -
&gt; -    [NSURLProtocol registerClass:[WKCustomProtocol class]];
&gt; -
&gt; -    for (size_t i = 0; i &lt; parameters.urlSchemesRegisteredForCustomProtocols.size(); ++i)
&gt; -        registerScheme(parameters.urlSchemesRegisteredForCustomProtocols[i]);
&gt; +    ASSERT(parameters.urlSchemesRegisteredForCustomProtocols.isEmpty());
&gt; +    m_childProcess-&gt;parentProcessConnection()-&gt;removeWorkQueueMessageReceiver(Messages::CustomProtocolManager::messageReceiverName());
&gt; +    m_messageQueue = nullptr;
&gt;  }

I think we should remove this entirely and make CustomProtocolManager a NetworkProcessSupplement only.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1144348</commentid>
    <comment_count>6</comment_count>
      <attachid>266119</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-11-24 09:17:37 -0800</bug_when>
    <thetext>Comment on attachment 266119
Patch

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

&gt;&gt; Source/WebKit2/Shared/WebProcessCreationParameters.cpp:-100
&gt;&gt; -    encoder &lt;&lt; ignoreTLSErrors;
&gt; 
&gt; I think we can remove all other network parameters as well. At least diskCacheDirectory, cookiePersistentStoragePath, cookiePersistentStorageType, cookieAcceptPolicy and urlSchemesRegisteredForCustomProtocols

Should return and delete even more of this unused stuff.

&gt; Source/WebKit2/UIProcess/WebProcessPool.cpp:484
&gt; +    if (networkProcess()) {

I don&apos;t understand why this file mixes networkProcess() and m_networkProcess.

&gt; Source/WebKit2/UIProcess/WebProcessPool.cpp:1011
&gt; +    ASSERT(m_networkProcess);

Assertion seems like overkill with nearly no value.

&gt; Source/WebKit2/UIProcess/WebProcessPool.cpp:1012
&gt; +    return m_networkProcess-&gt;createDownloadProxy(request);

Should just use the return value of ensureNetworkProcess.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1144365</commentid>
    <comment_count>7</comment_count>
      <attachid>266141</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-11-24 11:49:50 -0800</bug_when>
    <thetext>Created attachment 266141
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1144366</commentid>
    <comment_count>8</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-11-24 11:54:36 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; Created attachment 266141 [details]
&gt; Patch

I addressed comments.  I plan to land this after Thanksgiving.  I&apos;ll be removing more code after that, too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1144393</commentid>
    <comment_count>9</comment_count>
      <attachid>266141</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2015-11-24 23:09:12 -0800</bug_when>
    <thetext>Comment on attachment 266141
Patch

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

&gt; Source/WebKit2/Shared/Network/CustomProtocols/soup/CustomProtocolManagerSoup.cpp:54
&gt;  void CustomProtocolManager::initialize(const WebProcessCreationParameters&amp; parameters)
&gt;  {
&gt; -    ASSERT(parameters.urlSchemesRegisteredForCustomProtocols.isEmpty() || !parameters.usesNetworkProcess);
&gt; -    if (parameters.usesNetworkProcess) {
&gt; -        m_childProcess-&gt;parentProcessConnection()-&gt;removeWorkQueueMessageReceiver(Messages::CustomProtocolManager::messageReceiverName());
&gt; -        m_messageQueue = nullptr;
&gt; -        return;
&gt; -    }
&gt; -    for (size_t i = 0; i &lt; parameters.urlSchemesRegisteredForCustomProtocols.size(); ++i)
&gt; -        registerScheme(parameters.urlSchemesRegisteredForCustomProtocols[i]);
&gt; +    ASSERT(parameters.urlSchemesRegisteredForCustomProtocols.isEmpty());
&gt; +    m_childProcess-&gt;parentProcessConnection()-&gt;removeWorkQueueMessageReceiver(Messages::CustomProtocolManager::messageReceiverName());
&gt; +    m_messageQueue = nullptr;
&gt;  }

This should be removed entirely as well, please do it before landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1144754</commentid>
    <comment_count>10</comment_count>
      <attachid>266141</attachid>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2015-11-30 07:33:19 -0800</bug_when>
    <thetext>Comment on attachment 266141
Patch

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

&gt; Source/WebKit2/UIProcess/efl/WebProcessPoolEfl.cpp:97
&gt;      parameters.urlSchemesRegisteredForCustomProtocols = supplement&lt;WebSoupCustomProtocolRequestManager&gt;()-&gt;registeredSchemesForCustomProtocols();
&gt;      supplement&lt;WebCookieManagerProxy&gt;()-&gt;getCookiePersistentStorage(parameters.cookiePersistentStoragePath, parameters.cookiePersistentStorageType);
&gt;      parameters.cookieAcceptPolicy = m_initialHTTPCookieAcceptPolicy;
&gt; -    parameters.ignoreTLSErrors = m_ignoreTLSErrors;
&gt;      parameters.diskCacheDirectory = m_configuration-&gt;diskCacheDirectory();
&gt;  }

I think these lines should be removed too to fix the EFL build.

../../Source/WebKit2/UIProcess/efl/WebProcessPoolEfl.cpp:93:16: error: &apos;struct WebKit::WebProcessCreationParameters&apos; has no member named &apos;urlSchemesRegisteredForCustomProtocols&apos;
../../Source/WebKit2/UIProcess/efl/WebProcessPoolEfl.cpp:94:80: error: &apos;struct WebKit::WebProcessCreationParameters&apos; has no member named &apos;cookiePersistentStoragePath&apos;
../../Source/WebKit2/UIProcess/efl/WebProcessPoolEfl.cpp:94:120: error: &apos;struct WebKit::WebProcessCreationParameters&apos; has no member named &apos;cookiePersistentStorageType&apos;
../../Source/WebKit2/UIProcess/efl/WebProcessPoolEfl.cpp:95:16: error: &apos;struct WebKit::WebProcessCreationParameters&apos; has no member named &apos;cookieAcceptPolicy&apos;
../../Source/WebKit2/UIProcess/efl/WebProcessPoolEfl.cpp:96:16: error: &apos;struct WebKit::WebProcessCreationParameters&apos; has no member named &apos;diskCacheDirectory&apos;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1144755</commentid>
    <comment_count>11</comment_count>
      <attachid>266244</attachid>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2015-11-30 07:38:58 -0800</bug_when>
    <thetext>Created attachment 266244
EFL buildfix

This small patch fixed the EFL build for me, feel free to pick it up.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1144756</commentid>
    <comment_count>12</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2015-11-30 07:40:21 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; Created attachment 266244 [details]
&gt; EFL buildfix
&gt; 
&gt; This small patch fixed the EFL build for me, feel free to pick it up.

But unfortunately tests are still failing with timeout as I mentioned 
it previously: https://bugs.webkit.org/show_bug.cgi?id=151418#c18</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1144757</commentid>
    <comment_count>13</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2015-11-30 07:48:00 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; (In reply to comment #11)
&gt; &gt; Created attachment 266244 [details]
&gt; &gt; EFL buildfix
&gt; &gt; 
&gt; &gt; This small patch fixed the EFL build for me, feel free to pick it up.
&gt; 
&gt; But unfortunately tests are still failing with timeout as I mentioned 
&gt; it previously: https://bugs.webkit.org/show_bug.cgi?id=151418#c18

It is a 15 months old regression, see bug137692 for details. It means that EFL
port didn&apos;t test enabled NetworkProcess at all nowadays. It&apos;s not so good. :-/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1144760</commentid>
    <comment_count>14</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2015-11-30 08:12:27 -0800</bug_when>
    <thetext>(In reply to comment #13)
&gt; (In reply to comment #12)
&gt; &gt; (In reply to comment #11)
&gt; &gt; &gt; Created attachment 266244 [details]
&gt; &gt; &gt; EFL buildfix
&gt; &gt; &gt; 
&gt; &gt; &gt; This small patch fixed the EFL build for me, feel free to pick it up.
&gt; &gt; 
&gt; &gt; But unfortunately tests are still failing with timeout as I mentioned 
&gt; &gt; it previously: https://bugs.webkit.org/show_bug.cgi?id=151418#c18
&gt; 
&gt; It is a 15 months old regression, see bug137692 for details. It means that
&gt; EFL
&gt; port didn&apos;t test enabled NetworkProcess at all nowadays. It&apos;s not so good.
&gt; :-/

Looking at the patch proposed, it seems to me that it could be an integer overflow in a timer delay due to the std::chrono::milliseconds::max(). We had similar issues with std::chrono::microseconds::max(). The proposed patch seems to be more a workaround than a real fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1144790</commentid>
    <comment_count>15</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-11-30 09:50:40 -0800</bug_when>
    <thetext>Carlos and Ossy, thanks for looking into the build failures.
http://trac.webkit.org/changeset/192796</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1144847</commentid>
    <comment_count>16</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2015-11-30 11:20:03 -0800</bug_when>
    <thetext>(In reply to comment #15)
&gt; Carlos and Ossy, thanks for looking into the build failures.
&gt; http://trac.webkit.org/changeset/192796

It made Networking completely broken on EFL - bug137692 .
And it made many http tests timeout on GTK too:
- before: https://build.webkit.org/builders/GTK%20Linux%2064-bit%20Release%20%28Tests%29/builds/12445
- after: https://build.webkit.org/builders/GTK%20Linux%2064-bit%20Release%20%28Tests%29/builds/12446</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1144856</commentid>
    <comment_count>17</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2015-11-30 11:42:01 -0800</bug_when>
    <thetext>We never tested the network process until now, so the GTK tests are probably only now catching bugs that have always existed. Let&apos;s not block on those.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1145165</commentid>
    <comment_count>18</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2015-12-01 00:10:01 -0800</bug_when>
    <thetext>(In reply to comment #17)
&gt; We never tested the network process until now, so the GTK tests are probably
&gt; only now catching bugs that have always existed. Let&apos;s not block on those.

This is not true, we have run the layout tests with the network process enabled for long time, since r175776, see bug #138428</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1145245</commentid>
    <comment_count>19</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2015-12-01 09:39:06 -0800</bug_when>
    <thetext>(In reply to comment #16)
&gt; (In reply to comment #15)
&gt; &gt; Carlos and Ossy, thanks for looking into the build failures.
&gt; &gt; http://trac.webkit.org/changeset/192796
&gt; 
&gt; It made Networking completely broken on EFL - bug137692 .
&gt; And it made many http tests timeout on GTK too:
&gt; - before:
&gt; https://build.webkit.org/builders/GTK%20Linux%2064-
&gt; bit%20Release%20%28Tests%29/builds/12445
&gt; - after:
&gt; https://build.webkit.org/builders/GTK%20Linux%2064-
&gt; bit%20Release%20%28Tests%29/builds/12446

GTK+ failures were because r192796 removed the m_ignoreTLSErrors initialization from WebProcessPool by mistake. Those tests use HTTPS and loads failed due to invalid certificate issues. It should be fixed now in r192885</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1163045</commentid>
    <comment_count>20</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2016-02-08 15:54:11 -0800</bug_when>
    <thetext>&lt;rdar://problem/24558287&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>266114</attachid>
            <date>2015-11-23 21:33:55 -0800</date>
            <delta_ts>2015-11-23 21:47:39 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-151580-20151123213339.patch</filename>
            <type>text/plain</type>
            <size>74525</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5Mjc1MykKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0MSBAQAorMjAxNS0xMS0yMyAgQWxleCBD
aHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgorCisgICAgICAgIE1ha2UgdXNl
c05ldHdvcmtQcm9jZXNzIGFsd2F5cyB0cnVlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNTE1ODAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL21hYy9SZW1vdGVOZXR3b3JraW5n
Q29udGV4dC5tbToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlTmV0d29ya2luZ0NvbnRleHQ6OmVu
c3VyZVByaXZhdGVCcm93c2luZ1Nlc3Npb24pOgorICAgICAgICAqIFNoYXJlZC9BUEkvYy9XS0Rl
cHJlY2F0ZWRGdW5jdGlvbnMuY3BwOgorICAgICAgICAoV0tJbnNwZWN0b3JUb2dnbGVKYXZhU2Ny
aXB0UHJvZmlsaW5nKToKKyAgICAgICAgKFdLQ29udGV4dFNldFVzZXNOZXR3b3JrUHJvY2Vzcyk6
CisgICAgICAgIChXS0dyYXBoaWNzQ29udGV4dEdldENHQ29udGV4dCk6CisgICAgICAgICogU2hh
cmVkL05ldHdvcmsvQ3VzdG9tUHJvdG9jb2xzL0NvY29hL0N1c3RvbVByb3RvY29sTWFuYWdlckNv
Y29hLm1tOgorICAgICAgICAoV2ViS2l0OjpDdXN0b21Qcm90b2NvbE1hbmFnZXI6OmluaXRpYWxp
emUpOgorICAgICAgICAqIFNoYXJlZC9OZXR3b3JrL0N1c3RvbVByb3RvY29scy9zb3VwL0N1c3Rv
bVByb3RvY29sTWFuYWdlclNvdXAuY3BwOgorICAgICAgICAoV2ViS2l0OjpDdXN0b21Qcm90b2Nv
bE1hbmFnZXI6OmluaXRpYWxpemUpOgorICAgICAgICAqIFNoYXJlZC9XZWJQcm9jZXNzQ3JlYXRp
b25QYXJhbWV0ZXJzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc0NyZWF0aW9uUGFy
YW1ldGVyczo6V2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyk6CisgICAgICAgIChXZWJLaXQ6
OldlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM6OmVuY29kZSk6CisgICAgICAgIChXZWJLaXQ6
OldlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM6OmRlY29kZSk6CisgICAgICAgICogU2hhcmVk
L1dlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L0FQSVByb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5jcHA6CisgICAgICAgIChBUEk6OlByb2Nlc3NQ
b29sQ29uZmlndXJhdGlvbjo6Y3JlYXRlV2l0aExlZ2FjeU9wdGlvbnMpOgorICAgICAgICAoQVBJ
OjpQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb246OmNvcHkpOgorICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvQVBJUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQ
SS9DL1dLQ29udGV4dC5jcHA6CisgICAgICAgIChXS0NvbnRleHRTZXRKYXZhU2NyaXB0R2FyYmFn
ZUNvbGxlY3RvclRpbWVyRW5hYmxlZCk6CisgICAgICAgIChXS0NvbnRleHRVc2VUZXN0aW5nTmV0
d29ya1Nlc3Npb24pOgorICAgICAgICAoV0tDb250ZXh0U2V0VXNlc05ldHdvcmtQcm9jZXNzKTog
RGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0UHJpdmF0ZS5oOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcm9jZXNzR3JvdXAubW06CisgICAgICAg
ICgtW1dLUHJvY2Vzc0dyb3VwIGluaXRXaXRoSW5qZWN0ZWRCdW5kbGVVUkw6XSk6CisgICAgICAg
ICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQuY3BwOgorICAgICAgICAoRXdrQ29udGV4
dDo6c2V0UHJvY2Vzc01vZGVsKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRX
ZWJDb250ZXh0LmNwcDoKKyAgICAgICAgKHdlYmtpdFdlYkNvbnRleHRDb25zdHJ1Y3RlZCk6Cisg
ICAgICAgICh3ZWJraXRfd2ViX2NvbnRleHRfc2V0X3Byb2Nlc3NfbW9kZWwpOgorICAgICAgICAq
IFVJUHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNzUG9vbENvY29hLm1tOgorICAgICAgICAoV2ViS2l0
OjpXZWJQcm9jZXNzUG9vbDo6dXBkYXRlUHJvY2Vzc1N1cHByZXNzaW9uU3RhdGUpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6cGxhdGZvcm1Jbml0aWFsaXplV2ViUHJvY2Vzcyk6
CisgICAgICAgICogVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5LmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6RG93bmxvYWRQcm94eTo6Y2FuY2VsKToKKyAgICAgICAgKFdlYktpdDo6RG93
bmxvYWRQcm94eTo6aW52YWxpZGF0ZSk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYkNvb2tpZU1h
bmFnZXJQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6
c2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeSk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1h
bmFnZXJQcm94eTo6Z2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeSk6CisgICAgICAgICogVUlQcm9j
ZXNzL1dlYlByb2Nlc3NQb29sLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6
OldlYlByb2Nlc3NQb29sKToKKyAgICAgICAgKFdlYktpdDo6bV9wcm9jZXNzU3VwcHJlc3Npb25E
aXNhYmxlZEZvclBhZ2VDb3VudGVyKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6
Om5ldHdvcmtpbmdQcm9jZXNzQ29ubmVjdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nl
c3NQb29sOjpsYW5ndWFnZUNoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9v
bDo6dGV4dENoZWNrZXJTdGF0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNz
UG9vbDo6ZW5zdXJlTmV0d29ya1Byb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNz
UG9vbDo6c2V0QW55UGFnZUdyb3VwTWlnaHRIYXZlUHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpjcmVhdGVOZXdXZWJQcm9jZXNzKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmRvd25sb2FkKToKKyAgICAgICAgKFdlYktp
dDo6V2ViUHJvY2Vzc1Bvb2w6OnJlc3VtZURvd25sb2FkKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UHJvY2Vzc1Bvb2w6OnNldENhbkhhbmRsZUhUVFBTU2VydmVyVHJ1c3RFdmFsdWF0aW9uKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNldENhY2hlTW9kZWwpOgorICAgICAgICAo
V2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6Y3JlYXRlRG93bmxvYWRQcm94eSk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlByb2Nlc3NQb29sOjphZGRNZXNzYWdlUmVjZWl2ZXIpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQcm9jZXNzUG9vbDo6YWxsb3dTcGVjaWZpY0hUVFBTQ2VydGlmaWNhdGVGb3JIb3N0
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNldEhUVFBQaXBlbGluaW5nRW5h
YmxlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpyZXF1ZXN0TmV0d29ya2lu
Z1N0YXRpc3RpY3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2V0VXNlc05l
dHdvcmtQcm9jZXNzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6
OnVzZXNOZXR3b3JrUHJvY2Vzcyk6IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL1dlYlBy
b2Nlc3NQb29sLmg6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZW5kVG9OZXR3
b3JraW5nUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZW5kVG9O
ZXR3b3JraW5nUHJvY2Vzc1JlbGF1bmNoaW5nSWZOZWNlc3NhcnkpOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUHJv
eHk6OnNodXREb3duKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Byb3h5OjpyZW1vdmVX
ZWJQYWdlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Byb3h5OjpjYW5UZXJtaW5hdGVD
aGlsZFByb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUHJveHk6OnVwZGF0ZVRl
eHRDaGVja2VyU3RhdGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUHJveHk6OmRpZFNh
dmVUb1BhZ2VDYWNoZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQcm94eTo6ZGlkU2V0
QXNzZXJ0aW9uU3RhdGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUHJveHk6OmNyZWF0
ZURvd25sb2FkUHJveHkpOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQcm9jZXNz
UHJveHkuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvZ3RrL1dlYlByb2Nlc3NQb29sR3RrLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnBsYXRmb3JtSW5pdGlhbGl6ZVdlYlBy
b2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2V0SWdub3JlVExTRXJy
b3JzKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL0ZpbGVBUEkvQmxvYlJlZ2lzdHJ5UHJveHkuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpCbG9iUmVnaXN0cnlQcm94eTo6cmVnaXN0ZXJGaWxlQmxvYlVS
TCk6CisgICAgICAgIChXZWJLaXQ6OkJsb2JSZWdpc3RyeVByb3h5OjpyZWdpc3RlckJsb2JVUkwp
OgorICAgICAgICAoV2ViS2l0OjpCbG9iUmVnaXN0cnlQcm94eTo6dW5yZWdpc3RlckJsb2JVUkwp
OgorICAgICAgICAoV2ViS2l0OjpCbG9iUmVnaXN0cnlQcm94eTo6cmVnaXN0ZXJCbG9iVVJMRm9y
U2xpY2UpOgorICAgICAgICAoV2ViS2l0OjpCbG9iUmVnaXN0cnlQcm94eTo6YmxvYlNpemUpOgor
ICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVz
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpjb29raWVzRm9y
RE9NKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpzZXRDb29raWVz
RnJvbURPTSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBsYXRmb3JtU3RyYXRlZ2llczo6Y29va2ll
c0VuYWJsZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmNvb2tp
ZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGxhdGZvcm1T
dHJhdGVnaWVzOjpnZXRSYXdDb29raWVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGxhdGZvcm1T
dHJhdGVnaWVzOjpkZWxldGVDb29raWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQbGF0Zm9ybVN0
cmF0ZWdpZXM6OnJlc291cmNlTG9hZFNjaGVkdWxlcik6CisgICAgICAgIChXZWJLaXQ6OldlYlBs
YXRmb3JtU3RyYXRlZ2llczo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseSk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlBsYXRmb3JtU3RyYXRlZ2llczo6Y3JlYXRlUGluZ0hhbmRsZSk6CisgICAgICAg
IChXZWJLaXQ6OldlYlBsYXRmb3JtU3RyYXRlZ2llczo6Y3JlYXRlQmxvYlJlZ2lzdHJ5KToKKyAg
ICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3BwOgorICAgICAgICAoV2ViS2l0
OjpXZWJGcmFtZTo6c3RhcnREb3dubG9hZCk6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lOjpj
b252ZXJ0TWFpblJlc291cmNlTG9hZFRvRG93bmxvYWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJG
cmFtZTo6c291cmNlKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzOjpXZWJQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6
V2ViUHJvY2Vzczo6aW5pdGlhbGl6ZUNvbm5lY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
cm9jZXNzOjppbml0aWFsaXplV2ViUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nl
c3M6OmVuc3VyZU5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbik6CisgICAgICAgIChXZWJLaXQ6Oldl
YlByb2Nlc3M6OmRlc3Ryb3lQcml2YXRlQnJvd3NpbmdTZXNzaW9uKToKKyAgICAgICAgKFdlYktp
dDo6V2ViUHJvY2Vzczo6cGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb25NYW5hZ2VyKToKKyAgICAgICAg
KFdlYktpdDo6V2ViUHJvY2Vzczo6c2hvdWxkVGVybWluYXRlKToKKyAgICAgICAgKFdlYktpdDo6
V2ViUHJvY2Vzczo6c2V0SW5qZWN0ZWRCdW5kbGVQYXJhbWV0ZXJzKToKKyAgICAgICAgKFdlYktp
dDo6V2ViUHJvY2Vzczo6bmV0d29ya0Nvbm5lY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
cm9jZXNzOjpzZXRFbmhhbmNlZEFjY2Vzc2liaWxpdHkpOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
cm9jZXNzOjpwcmVmZXRjaEROUyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3M6OmRpZENy
ZWF0ZURvd25sb2FkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzczo6ZGlk
RGVzdHJveURvd25sb2FkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzczo6
ZG93bmxvYWRQcm94eUNvbm5lY3Rpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJQ
cm9jZXNzOjpkb3dubG9hZHNBdXRoZW50aWNhdGlvbk1hbmFnZXIpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViS2l0OjpXZWJQcm9jZXNzOjpkb3dubG9hZE1hbmFnZXIpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViS2l0OjpXZWJQcm9jZXNzOjp1c2VzTmV0d29ya1Byb2Nlc3MpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzOjpkb3dubG9hZFJlcXVlc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzOjpyZXN1bWVEb3dubG9hZCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJLaXQ6OldlYlByb2Nlc3M6OmNhbmNlbERvd25sb2FkKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBXZWJQcm9jZXNzL1dlYlByb2Nlc3MuaDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vz
czo6dGV4dENoZWNrZXJTdGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3M6OmV2ZW50
RGlzcGF0Y2hlcik6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLm1lc3NhZ2VzLmlu
OgorICAgICAgICAqIFdlYlByb2Nlc3Mvc291cC9XZWJQcm9jZXNzU291cC5jcHA6CisgICAgICAg
IChXZWJLaXQ6OldlYlByb2Nlc3M6OnBsYXRmb3JtU2V0Q2FjaGVNb2RlbCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlByb2Nlc3M6OnBsYXRmb3JtQ2xlYXJSZXNvdXJjZUNhY2hlcyk6CisgICAgICAg
IChXZWJLaXQ6OnNldFNvdXBTZXNzaW9uQWNjZXB0TGFuZ3VhZ2UpOgorICAgICAgICAoV2ViS2l0
OjpXZWJQcm9jZXNzOjpwbGF0Zm9ybUluaXRpYWxpemVXZWJQcm9jZXNzKToKKyAgICAgICAgKFdl
YktpdDo6V2ViUHJvY2Vzczo6cGxhdGZvcm1UZXJtaW5hdGUpOgorICAgICAgICAoV2ViS2l0Ojpn
ZXRDYWNoZURpc2tGcmVlU2l6ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nl
c3M6OnNldElnbm9yZVRMU0Vycm9ycyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlBy
b2Nlc3M6OmFsbG93U3BlY2lmaWNIVFRQU0NlcnRpZmljYXRlRm9ySG9zdCk6IERlbGV0ZWQuCisK
IDIwMTUtMTEtMjMgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4K
IAogICAgICAgICBGaXggY3Jhc2ggaW4gfldlYlByb2Nlc3NQb29sIHdoZW4gdXNpbmcgR2VvbG9j
YXRpb24gd2l0aCB1c2VOZXR3b3JrUHJvY2Vzcz10cnVlCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9O
ZXR3b3JrUHJvY2Vzcy9tYWMvUmVtb3RlTmV0d29ya2luZ0NvbnRleHQubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvbWFjL1JlbW90ZU5ldHdvcmtpbmdDb250
ZXh0Lm1tCShyZXZpc2lvbiAxOTI3NTMpCisrKyBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vz
cy9tYWMvUmVtb3RlTmV0d29ya2luZ0NvbnRleHQubW0JKHdvcmtpbmcgY29weSkKQEAgLTkzLDgg
KzkzLDEzIEBAIHZvaWQgUmVtb3RlTmV0d29ya2luZ0NvbnRleHQ6OmVuc3VyZVByaXYKICAgICBp
ZiAoU2Vzc2lvblRyYWNrZXI6OnN0b3JhZ2VTZXNzaW9uKHNlc3Npb25JRCkpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIEFTU0VSVCghU2Vzc2lvblRyYWNrZXI6OmdldElkZW50aWZpZXJCYXNlKCku
aXNOdWxsKCkpOwotICAgIFNlc3Npb25UcmFja2VyOjpzZXRTZXNzaW9uKHNlc3Npb25JRCwgTmV0
d29ya1N0b3JhZ2VTZXNzaW9uOjpjcmVhdGVQcml2YXRlQnJvd3NpbmdTZXNzaW9uKFNlc3Npb25U
cmFja2VyOjpnZXRJZGVudGlmaWVyQmFzZSgpICsgJy4nICsgU3RyaW5nOjpudW1iZXIoc2Vzc2lv
bklELnNlc3Npb25JRCgpKSkKKyAgICBTdHJpbmcgYmFzZTsKKyAgICBpZiAoU2Vzc2lvblRyYWNr
ZXI6OmdldElkZW50aWZpZXJCYXNlKCkuaXNOdWxsKCkpCisgICAgICAgIGJhc2UgPSBbW05TQnVu
ZGxlIG1haW5CdW5kbGVdIGJ1bmRsZUlkZW50aWZpZXJdOworICAgIGVsc2UKKyAgICAgICAgYmFz
ZSA9IFNlc3Npb25UcmFja2VyOjpnZXRJZGVudGlmaWVyQmFzZSgpOworCisgICAgU2Vzc2lvblRy
YWNrZXI6OnNldFNlc3Npb24oc2Vzc2lvbklELCBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmNyZWF0
ZVByaXZhdGVCcm93c2luZ1Nlc3Npb24oYmFzZSArICcuJyArIFN0cmluZzo6bnVtYmVyKHNlc3Np
b25JRC5zZXNzaW9uSUQoKSkpCiAjaWYgVVNFKE5FVFdPUktfU0VTU0lPTikKICAgICAgICAgLCBz
dGQ6Om1ha2VfdW5pcXVlPE5ldHdvcmtTZXNzaW9uPihOZXR3b3JrU2Vzc2lvbjo6VHlwZTo6RXBo
ZW1lcmFsLCBzZXNzaW9uSUQpCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9X
ZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAJKHJldmlzaW9uIDE5
Mjc1MykKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0
ZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsNyArNDMsNiBAQCBXZWJQcm9jZXNzQ3JlYXRp
b25QYXJhbWV0ZXJzOjpXZWJQcm9jZXNzCiAgICAgLCBzaG91bGRFbmFibGVKSVQoZmFsc2UpCiAg
ICAgLCBzaG91bGRFbmFibGVGVExKSVQoZmFsc2UpCiAjZW5kaWYKLSAgICAsIHVzZXNOZXR3b3Jr
UHJvY2VzcyhmYWxzZSkKICAgICAsIG1lbW9yeUNhY2hlRGlzYWJsZWQoZmFsc2UpCiAjaWYgRU5B
QkxFKFNFUlZJQ0VfQ09OVFJPTFMpCiAgICAgLCBoYXNJbWFnZVNlcnZpY2VzKGZhbHNlKQpAQCAt
OTcsNyArOTYsNiBAQCB2b2lkIFdlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM6OmVuY29kCiAg
ICAgZW5jb2RlciA8PCBjb29raWVQZXJzaXN0ZW50U3RvcmFnZVBhdGg7CiAgICAgZW5jb2RlciA8
PCBjb29raWVQZXJzaXN0ZW50U3RvcmFnZVR5cGU7CiAgICAgZW5jb2Rlci5lbmNvZGVFbnVtKGNv
b2tpZUFjY2VwdFBvbGljeSk7Ci0gICAgZW5jb2RlciA8PCBpZ25vcmVUTFNFcnJvcnM7CiAjZW5k
aWYKICAgICBlbmNvZGVyLmVuY29kZUVudW0oY2FjaGVNb2RlbCk7CiAgICAgZW5jb2RlciA8PCBz
aG91bGRBbHdheXNVc2VDb21wbGV4VGV4dENvZGVQYXRoOwpAQCAtMTMxLDggKzEyOSw2IEBAIHZv
aWQgV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyczo6ZW5jb2QKICAgICBlbmNvZGVyIDw8IG5v
dGlmaWNhdGlvblBlcm1pc3Npb25zOwogI2VuZGlmCiAKLSAgICBlbmNvZGVyIDw8IHVzZXNOZXR3
b3JrUHJvY2VzczsKLQogICAgIGVuY29kZXIgPDwgcGx1Z0luQXV0b1N0YXJ0T3JpZ2luSGFzaGVz
OwogICAgIGVuY29kZXIgPDwgcGx1Z0luQXV0b1N0YXJ0T3JpZ2luczsKICAgICBlbmNvZGVyIDw8
IG1lbW9yeUNhY2hlRGlzYWJsZWQ7CkBAIC0yMjEsOCArMjE3LDYgQEAgYm9vbCBXZWJQcm9jZXNz
Q3JlYXRpb25QYXJhbWV0ZXJzOjpkZWNvZAogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYg
KCFkZWNvZGVyLmRlY29kZUVudW0ocGFyYW1ldGVycy5jb29raWVBY2NlcHRQb2xpY3kpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShwYXJhbWV0ZXJzLmln
bm9yZVRMU0Vycm9ycykpCi0gICAgICAgIHJldHVybiBmYWxzZTsKICNlbmRpZgogICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGVFbnVtKHBhcmFtZXRlcnMuY2FjaGVNb2RlbCkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKQEAgLTI4Nyw5ICsyODEsNiBAQCBib29sIFdlYlByb2Nlc3NDcmVhdGlvblBhcmFt
ZXRlcnM6OmRlY29kCiAgICAgICAgIHJldHVybiBmYWxzZTsKICNlbmRpZgogCi0gICAgaWYgKCFk
ZWNvZGVyLmRlY29kZShwYXJhbWV0ZXJzLnVzZXNOZXR3b3JrUHJvY2VzcykpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQogICAgIGlmICghZGVjb2Rlci5kZWNvZGUocGFyYW1ldGVycy5wbHVnSW5B
dXRvU3RhcnRPcmlnaW5IYXNoZXMpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKCFk
ZWNvZGVyLmRlY29kZShwYXJhbWV0ZXJzLnBsdWdJbkF1dG9TdGFydE9yaWdpbnMpKQpJbmRleDog
U291cmNlL1dlYktpdDIvU2hhcmVkL1dlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1l
dGVycy5oCShyZXZpc2lvbiAxOTI3NTMpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViUHJv
Y2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDUsNyArMTA1LDYg
QEAgc3RydWN0IFdlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMgewogICAgIFN0cmluZyBjb29r
aWVQZXJzaXN0ZW50U3RvcmFnZVBhdGg7CiAgICAgdWludDMyX3QgY29va2llUGVyc2lzdGVudFN0
b3JhZ2VUeXBlOwogICAgIEhUVFBDb29raWVBY2NlcHRQb2xpY3kgY29va2llQWNjZXB0UG9saWN5
OwotICAgIGJvb2wgaWdub3JlVExTRXJyb3JzOwogI2VuZGlmCiAKICAgICBDYWNoZU1vZGVsIGNh
Y2hlTW9kZWw7CkBAIC0xNTQsOCArMTUzLDYgQEAgc3RydWN0IFdlYlByb2Nlc3NDcmVhdGlvblBh
cmFtZXRlcnMgewogICAgIEhhc2hNYXA8U3RyaW5nLCBib29sPiBub3RpZmljYXRpb25QZXJtaXNz
aW9uczsKICNlbmRpZgogCi0gICAgYm9vbCB1c2VzTmV0d29ya1Byb2Nlc3M7Ci0KICAgICBIYXNo
TWFwPFdlYkNvcmU6OlNlc3Npb25JRCwgSGFzaE1hcDx1bnNpZ25lZCwgZG91YmxlPj4gcGx1Z0lu
QXV0b1N0YXJ0T3JpZ2luSGFzaGVzOwogICAgIFZlY3RvcjxTdHJpbmc+IHBsdWdJbkF1dG9TdGFy
dE9yaWdpbnM7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9BUEkvYy9XS0RlcHJlY2F0
ZWRGdW5jdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9BUEkv
Yy9XS0RlcHJlY2F0ZWRGdW5jdGlvbnMuY3BwCShyZXZpc2lvbiAxOTI3NTMpCisrKyBTb3VyY2Uv
V2ViS2l0Mi9TaGFyZWQvQVBJL2MvV0tEZXByZWNhdGVkRnVuY3Rpb25zLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjcsNiArMjcsNyBAQAogCiAjaW5jbHVkZSAiQVBJRGljdGlvbmFyeS5oIgogI2lu
Y2x1ZGUgIldLQXJyYXkuaCIKKyNpbmNsdWRlICJXS0NvbnRleHRQcml2YXRlLmgiCiAjaW5jbHVk
ZSAiV0tNdXRhYmxlRGljdGlvbmFyeS5oIgogI2luY2x1ZGUgIldLUHJlZmVyZW5jZXNSZWZQcml2
YXRlLmgiCiAjaW5jbHVkZSAiV0tTaGFyZWRBUElDYXN0LmgiCkBAIC0xMzQsNiArMTM1LDEwIEBA
IHZvaWQgV0tJbnNwZWN0b3JUb2dnbGVKYXZhU2NyaXB0UHJvZmlsaW4KIHsKIH0KIAordm9pZCBX
S0NvbnRleHRTZXRVc2VzTmV0d29ya1Byb2Nlc3MoV0tDb250ZXh0UmVmLCBib29sKQoreworfQor
CiAjaWYgUExBVEZPUk0oTUFDKQogQ0dDb250ZXh0UmVmIFdLR3JhcGhpY3NDb250ZXh0R2V0Q0dD
b250ZXh0KFdLR3JhcGhpY3NDb250ZXh0UmVmIGdyYXBoaWNzQ29udGV4dCkKIHsKSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL1NoYXJlZC9OZXR3b3JrL0N1c3RvbVByb3RvY29scy9Db2NvYS9DdXN0b21Q
cm90b2NvbE1hbmFnZXJDb2NvYS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvTmV0d29yay9DdXN0b21Qcm90b2NvbHMvQ29jb2EvQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ29j
b2EubW0JKHJldmlzaW9uIDE5Mjc1MykKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9OZXR3b3Jr
L0N1c3RvbVByb3RvY29scy9Db2NvYS9DdXN0b21Qcm90b2NvbE1hbmFnZXJDb2NvYS5tbQkod29y
a2luZyBjb3B5KQpAQCAtMTM0LDE3ICsxMzQsOSBAQCB2b2lkIEN1c3RvbVByb3RvY29sTWFuYWdl
cjo6aW5pdGlhbGl6ZUNvCiAKIHZvaWQgQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyOjppbml0aWFsaXpl
KGNvbnN0IFdlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmIHBhcmFtZXRlcnMpCiB7Ci0gICAg
QVNTRVJUKHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRGb3JDdXN0b21Qcm90b2NvbHMu
aXNFbXB0eSgpIHx8ICFwYXJhbWV0ZXJzLnVzZXNOZXR3b3JrUHJvY2Vzcyk7Ci0gICAgaWYgKHBh
cmFtZXRlcnMudXNlc05ldHdvcmtQcm9jZXNzKSB7Ci0gICAgICAgIG1fY2hpbGRQcm9jZXNzLT5w
YXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5yZW1vdmVXb3JrUXVldWVNZXNzYWdlUmVjZWl2ZXIo
TWVzc2FnZXM6OkN1c3RvbVByb3RvY29sTWFuYWdlcjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpKTsK
LSAgICAgICAgbV9tZXNzYWdlUXVldWUgPSBudWxscHRyOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgW05TVVJMUHJvdG9jb2wgcmVnaXN0ZXJDbGFzczpbV0tDdXN0b21Qcm90b2NvbCBj
bGFzc11dOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwYXJhbWV0ZXJzLnVybFNjaGVt
ZXNSZWdpc3RlcmVkRm9yQ3VzdG9tUHJvdG9jb2xzLnNpemUoKTsgKytpKQotICAgICAgICByZWdp
c3RlclNjaGVtZShwYXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkRm9yQ3VzdG9tUHJvdG9j
b2xzW2ldKTsKKyAgICBBU1NFUlQocGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEZvckN1
c3RvbVByb3RvY29scy5pc0VtcHR5KCkpOworICAgIG1fY2hpbGRQcm9jZXNzLT5wYXJlbnRQcm9j
ZXNzQ29ubmVjdGlvbigpLT5yZW1vdmVXb3JrUXVldWVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6
OkN1c3RvbVByb3RvY29sTWFuYWdlcjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpKTsKKyAgICBtX21l
c3NhZ2VRdWV1ZSA9IG51bGxwdHI7CiB9CiAKIHZvaWQgQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyOjpp
bml0aWFsaXplKGNvbnN0IE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJiBwYXJhbWV0
ZXJzKQpJbmRleDogU291cmNlL1dlYktpdDIvU2hhcmVkL05ldHdvcmsvQ3VzdG9tUHJvdG9jb2xz
L3NvdXAvQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyU291cC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdDIvU2hhcmVkL05ldHdvcmsvQ3VzdG9tUHJvdG9jb2xzL3NvdXAvQ3VzdG9tUHJvdG9j
b2xNYW5hZ2VyU291cC5jcHAJKHJldmlzaW9uIDE5Mjc1MykKKysrIFNvdXJjZS9XZWJLaXQyL1No
YXJlZC9OZXR3b3JrL0N1c3RvbVByb3RvY29scy9zb3VwL0N1c3RvbVByb3RvY29sTWFuYWdlclNv
dXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OCwxNCArNDgsOSBAQCB2b2lkIEN1c3RvbVByb3Rv
Y29sTWFuYWdlcjo6aW5pdGlhbGl6ZUNvCiAKIHZvaWQgQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyOjpp
bml0aWFsaXplKGNvbnN0IFdlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmIHBhcmFtZXRlcnMp
CiB7Ci0gICAgQVNTRVJUKHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRGb3JDdXN0b21Q
cm90b2NvbHMuaXNFbXB0eSgpIHx8ICFwYXJhbWV0ZXJzLnVzZXNOZXR3b3JrUHJvY2Vzcyk7Ci0g
ICAgaWYgKHBhcmFtZXRlcnMudXNlc05ldHdvcmtQcm9jZXNzKSB7Ci0gICAgICAgIG1fY2hpbGRQ
cm9jZXNzLT5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5yZW1vdmVXb3JrUXVldWVNZXNzYWdl
UmVjZWl2ZXIoTWVzc2FnZXM6OkN1c3RvbVByb3RvY29sTWFuYWdlcjo6bWVzc2FnZVJlY2VpdmVy
TmFtZSgpKTsKLSAgICAgICAgbV9tZXNzYWdlUXVldWUgPSBudWxscHRyOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcGFyYW1ldGVycy51cmxTY2hl
bWVzUmVnaXN0ZXJlZEZvckN1c3RvbVByb3RvY29scy5zaXplKCk7ICsraSkKLSAgICAgICAgcmVn
aXN0ZXJTY2hlbWUocGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEZvckN1c3RvbVByb3Rv
Y29sc1tpXSk7CisgICAgQVNTRVJUKHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRGb3JD
dXN0b21Qcm90b2NvbHMuaXNFbXB0eSgpKTsKKyAgICBtX2NoaWxkUHJvY2Vzcy0+cGFyZW50UHJv
Y2Vzc0Nvbm5lY3Rpb24oKS0+cmVtb3ZlV29ya1F1ZXVlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2Vz
OjpDdXN0b21Qcm90b2NvbE1hbmFnZXI6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSk7CisgICAgbV9t
ZXNzYWdlUXVldWUgPSBudWxscHRyOwogfQogCiB2b2lkIEN1c3RvbVByb3RvY29sTWFuYWdlcjo6
aW5pdGlhbGl6ZShjb25zdCBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyYgcGFyYW1l
dGVycykKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJDb29raWVNYW5hZ2VyUHJv
eHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJDb29raWVN
YW5hZ2VyUHJveHkuY3BwCShyZXZpc2lvbiAxOTI3NTMpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvV2ViQ29va2llTWFuYWdlclByb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTYzLDgg
KzE2Myw3IEBAIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpzZXRIVFRQQ29va2kKICAgICAv
LyAtIFdoZW4gdGVzdGluZywgd2Ugb25seSBoYXZlIG9uZSBXZWJQcm9jZXNzIGFuZCBvbmUgTmV0
d29ya1Byb2Nlc3MsIGFuZCBXZWJLaXRUZXN0UnVubmVyIG5ldmVyIHJlc3RhcnRzIHRoZW07CiAg
ICAgLy8gLSBXaGVuIG5vdCB0ZXN0aW5nLCBDb2NvYSBoYXMgdGhlIHBvbGljeSBwZXJzaXN0ZWQs
IGFuZCB0aHVzIG5ldyBwcm9jZXNzZXMgdXNlIGl0IChldmVuIGZvciBlcGhlbWVyYWwgc2Vzc2lv
bnMpLgogICAgIHByb2Nlc3NQb29sKCktPnNlbmRUb0FsbFByb2Nlc3NlcyhNZXNzYWdlczo6V2Vi
Q29va2llTWFuYWdlcjo6U2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShwb2xpY3kpKTsKLSAgICBp
ZiAocHJvY2Vzc1Bvb2woKS0+dXNlc05ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgIHByb2Nlc3NQ
b29sKCktPnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2Vy
OjpTZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KHBvbGljeSkpOworICAgIHByb2Nlc3NQb29sKCkt
PnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpTZXRI
VFRQQ29va2llQWNjZXB0UG9saWN5KHBvbGljeSkpOwogfQogCiB2b2lkIFdlYkNvb2tpZU1hbmFn
ZXJQcm94eTo6Z2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShzdGQ6OmZ1bmN0aW9uPHZvaWQgKEhU
VFBDb29raWVBY2NlcHRQb2xpY3ksIENhbGxiYWNrQmFzZTo6RXJyb3IpPiBjYWxsYmFja0Z1bmN0
aW9uKQpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3Bw
CShyZXZpc2lvbiAxOTI3NTMpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vz
c1Bvb2wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTgsOSArMTU4LDYgQEAgV2ViUHJvY2Vzc1Bv
b2w6OldlYlByb2Nlc3NQb29sKEFQSTo6UHJvYwogICAgICwgbV9wcm9jZXNzVGVybWluYXRpb25F
bmFibGVkKHRydWUpCiAgICAgLCBtX2NhbkhhbmRsZUhUVFBTU2VydmVyVHJ1c3RFdmFsdWF0aW9u
KHRydWUpCiAgICAgLCBtX2RpZE5ldHdvcmtQcm9jZXNzQ3Jhc2goZmFsc2UpCi0jaWYgVVNFKFNP
VVApCi0gICAgLCBtX2lnbm9yZVRMU0Vycm9ycyh0cnVlKQotI2VuZGlmCiAgICAgLCBtX21lbW9y
eUNhY2hlRGlzYWJsZWQoZmFsc2UpCiAgICAgLCBtX3VzZXJPYnNlcnZhYmxlUGFnZUNvdW50ZXIo
W3RoaXNdKGJvb2wpIHsgdXBkYXRlUHJvY2Vzc1N1cHByZXNzaW9uU3RhdGUoKTsgfSkKICAgICAs
IG1fcHJvY2Vzc1N1cHByZXNzaW9uRGlzYWJsZWRGb3JQYWdlQ291bnRlcihbdGhpc10oYm9vbCkg
eyB1cGRhdGVQcm9jZXNzU3VwcHJlc3Npb25TdGF0ZSgpOyB9KQpAQCAtMzA2LDE3ICszMDMsNyBA
QCB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXRNYXhpbXVtTnVtYmVyT2ZQCiAKIElQQzo6Q29ubmVj
dGlvbiogV2ViUHJvY2Vzc1Bvb2w6Om5ldHdvcmtpbmdQcm9jZXNzQ29ubmVjdGlvbigpCiB7Ci0g
ICAgc3dpdGNoIChwcm9jZXNzTW9kZWwoKSkgewotICAgIGNhc2UgUHJvY2Vzc01vZGVsU2hhcmVk
U2Vjb25kYXJ5UHJvY2VzczoKLSAgICAgICAgaWYgKHVzZXNOZXR3b3JrUHJvY2VzcygpKQotICAg
ICAgICAgICAgcmV0dXJuIG1fbmV0d29ya1Byb2Nlc3MtPmNvbm5lY3Rpb24oKTsKLSAgICAgICAg
cmV0dXJuIG1fcHJvY2Vzc2VzWzBdLT5jb25uZWN0aW9uKCk7Ci0gICAgY2FzZSBQcm9jZXNzTW9k
ZWxNdWx0aXBsZVNlY29uZGFyeVByb2Nlc3NlczoKLSAgICAgICAgQVNTRVJUKHVzZXNOZXR3b3Jr
UHJvY2VzcygpKTsKLSAgICAgICAgcmV0dXJuIG1fbmV0d29ya1Byb2Nlc3MtPmNvbm5lY3Rpb24o
KTsKLSAgICB9Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIDA7CisgICAg
cmV0dXJuIG1fbmV0d29ya1Byb2Nlc3MtPmNvbm5lY3Rpb24oKTsKIH0KIAogdm9pZCBXZWJQcm9j
ZXNzUG9vbDo6bGFuZ3VhZ2VDaGFuZ2VkKHZvaWQqIGNvbnRleHQpCkBAIC0zMjgsNyArMzE1LDcg
QEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6bGFuZ3VhZ2VDaGFuZ2VkKCkKIHsKICAgICBzZW5kVG9B
bGxQcm9jZXNzZXMoTWVzc2FnZXM6OldlYlByb2Nlc3M6OlVzZXJQcmVmZXJyZWRMYW5ndWFnZXND
aGFuZ2VkKHVzZXJQcmVmZXJyZWRMYW5ndWFnZXMoKSkpOwogI2lmIFVTRShTT1VQKQotICAgIGlm
ICh1c2VzTmV0d29ya1Byb2Nlc3MoKSAmJiBtX25ldHdvcmtQcm9jZXNzKQorICAgIGlmIChtX25l
dHdvcmtQcm9jZXNzKQogICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpO
ZXR3b3JrUHJvY2Vzczo6VXNlclByZWZlcnJlZExhbmd1YWdlc0NoYW5nZWQodXNlclByZWZlcnJl
ZExhbmd1YWdlcygpKSwgMCk7CiAjZW5kaWYKIH0KQEAgLTM0MywxNiArMzMwLDYgQEAgdm9pZCBX
ZWJQcm9jZXNzUG9vbDo6dGV4dENoZWNrZXJTdGF0ZUNoYQogICAgIHNlbmRUb0FsbFByb2Nlc3Nl
cyhNZXNzYWdlczo6V2ViUHJvY2Vzczo6U2V0VGV4dENoZWNrZXJTdGF0ZShUZXh0Q2hlY2tlcjo6
c3RhdGUoKSkpOwogfQogCi12b2lkIFdlYlByb2Nlc3NQb29sOjpzZXRVc2VzTmV0d29ya1Byb2Nl
c3MoYm9vbCB1c2VzTmV0d29ya1Byb2Nlc3MpCi17Ci0gICAgbV9jb25maWd1cmF0aW9uLT5zZXRV
c2VOZXR3b3JrUHJvY2Vzcyh1c2VzTmV0d29ya1Byb2Nlc3MpOwotfQotCi1ib29sIFdlYlByb2Nl
c3NQb29sOjp1c2VzTmV0d29ya1Byb2Nlc3MoKSBjb25zdAotewotICAgIHJldHVybiBtX2NvbmZp
Z3VyYXRpb24tPnVzZU5ldHdvcmtQcm9jZXNzKCk7Ci19Ci0KIE5ldHdvcmtQcm9jZXNzUHJveHkm
IFdlYlByb2Nlc3NQb29sOjplbnN1cmVOZXR3b3JrUHJvY2VzcygpCiB7CiAgICAgaWYgKG1fbmV0
d29ya1Byb2Nlc3MpCkBAIC01MDQsNyArNDgxLDcgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0
QW55UGFnZUdyb3VwTWlnaAogewogICAgIG1faWNvbkRhdGFiYXNlLT5zZXRQcml2YXRlQnJvd3Np
bmdFbmFibGVkKHByaXZhdGVCcm93c2luZ0VuYWJsZWQpOwogCi0gICAgaWYgKHVzZXNOZXR3b3Jr
UHJvY2VzcygpICYmIG5ldHdvcmtQcm9jZXNzKCkpIHsKKyAgICBpZiAobmV0d29ya1Byb2Nlc3Mo
KSkgewogICAgICAgICBpZiAocHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCkKICAgICAgICAgICAgIG5l
dHdvcmtQcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpFbnN1cmVQcml2
YXRlQnJvd3NpbmdTZXNzaW9uKFNlc3Npb25JRDo6bGVnYWN5UHJpdmF0ZVNlc3Npb25JRCgpKSwg
MCk7CiAgICAgICAgIGVsc2UKQEAgLTU1NCw4ICs1MzEsNyBAQCBXZWJQcm9jZXNzUHJveHkmIFdl
YlByb2Nlc3NQb29sOjplbnN1cmVTCiAKIFdlYlByb2Nlc3NQcm94eSYgV2ViUHJvY2Vzc1Bvb2w6
OmNyZWF0ZU5ld1dlYlByb2Nlc3MoKQogewotICAgIGlmICh1c2VzTmV0d29ya1Byb2Nlc3MoKSkK
LSAgICAgICAgZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKKyAgICBlbnN1cmVOZXR3b3JrUHJvY2Vz
cygpOwogCiAgICAgUmVmPFdlYlByb2Nlc3NQcm94eT4gcHJvY2VzcyA9IFdlYlByb2Nlc3NQcm94
eTo6Y3JlYXRlKCp0aGlzKTsKIApAQCAtNjMyLDggKzYwOCw2IEBAIFdlYlByb2Nlc3NQcm94eSYg
V2ViUHJvY2Vzc1Bvb2w6OmNyZWF0ZU4KICAgICBzdXBwbGVtZW50PFdlYk5vdGlmaWNhdGlvbk1h
bmFnZXJQcm94eT4oKS0+cG9wdWxhdGVDb3B5T2ZOb3RpZmljYXRpb25QZXJtaXNzaW9ucyhwYXJh
bWV0ZXJzLm5vdGlmaWNhdGlvblBlcm1pc3Npb25zKTsKICNlbmRpZgogCi0gICAgcGFyYW1ldGVy
cy51c2VzTmV0d29ya1Byb2Nlc3MgPSB1c2VzTmV0d29ya1Byb2Nlc3MoKTsKLQogICAgIHBhcmFt
ZXRlcnMucGx1Z0luQXV0b1N0YXJ0T3JpZ2luSGFzaGVzID0gbV9wbHVnSW5BdXRvU3RhcnRQcm92
aWRlci5hdXRvU3RhcnRPcmlnaW5IYXNoZXNDb3B5KCk7CiAgICAgY29weVRvVmVjdG9yKG1fcGx1
Z0luQXV0b1N0YXJ0UHJvdmlkZXIuYXV0b1N0YXJ0T3JpZ2lucygpLCBwYXJhbWV0ZXJzLnBsdWdJ
bkF1dG9TdGFydE9yaWdpbnMpOwogCkBAIC04NDEsMTYgKzgxNSwxNCBAQCBSZWY8V2ViUGFnZVBy
b3h5PiBXZWJQcm9jZXNzUG9vbDo6Y3JlYXRlCiBEb3dubG9hZFByb3h5KiBXZWJQcm9jZXNzUG9v
bDo6ZG93bmxvYWQoV2ViUGFnZVByb3h5KiBpbml0aWF0aW5nUGFnZSwgY29uc3QgUmVzb3VyY2VS
ZXF1ZXN0JiByZXF1ZXN0KQogewogICAgIERvd25sb2FkUHJveHkqIGRvd25sb2FkUHJveHkgPSBj
cmVhdGVEb3dubG9hZFByb3h5KHJlcXVlc3QpOwotICAgIHVpbnQ2NF90IGluaXRpYXRpbmdQYWdl
SUQgPSBpbml0aWF0aW5nUGFnZSA/IGluaXRpYXRpbmdQYWdlLT5wYWdlSUQoKSA6IDA7CiAgICAg
U2Vzc2lvbklEIHNlc3Npb25JRCA9IGluaXRpYXRpbmdQYWdlID8gaW5pdGlhdGluZ1BhZ2UtPnNl
c3Npb25JRCgpIDogU2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCk7CiAKLSAgICBpZiAodXNl
c05ldHdvcmtQcm9jZXNzKCkgJiYgbmV0d29ya1Byb2Nlc3MoKSkgeworICAgIGlmIChuZXR3b3Jr
UHJvY2VzcygpKSB7CiAgICAgICAgIC8vIEZJWE1FIChOZXR3b3JrUHJvY2Vzcyk6IFJlcGxpY2F0
ZSB3aGF0ZXZlciBGcmFtZUxvYWRlcjo6c2V0T3JpZ2luYWxVUkxGb3JEb3dubG9hZFJlcXVlc3Qg
ZG9lcyB3aXRoIHRoZSByZXF1ZXN0IGhlcmUuCiAgICAgICAgIG5ldHdvcmtQcm9jZXNzKCktPnNl
bmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpEb3dubG9hZFJlcXVlc3Qoc2Vzc2lvbklELCBk
b3dubG9hZFByb3h5LT5kb3dubG9hZElEKCksIHJlcXVlc3QpLCAwKTsKICAgICAgICAgcmV0dXJu
IGRvd25sb2FkUHJveHk7CiAgICAgfQogCi0gICAgbV9wcm9jZXNzZXNbMF0tPnNlbmQoTWVzc2Fn
ZXM6OldlYlByb2Nlc3M6OkRvd25sb2FkUmVxdWVzdChzZXNzaW9uSUQsIGRvd25sb2FkUHJveHkt
PmRvd25sb2FkSUQoKSwgaW5pdGlhdGluZ1BhZ2VJRCwgcmVxdWVzdCksIDApOwogICAgIHJldHVy
biBkb3dubG9hZFByb3h5OwogfQogCkBAIC04NjIsMTIgKzgzNCwxMSBAQCBEb3dubG9hZFByb3h5
KiBXZWJQcm9jZXNzUG9vbDo6cmVzdW1lRG93CiAgICAgaWYgKCFwYXRoLmlzRW1wdHkoKSkKICAg
ICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKHBhdGgsIFNhbmRib3hFeHRlbnNp
b246OlJlYWRXcml0ZSwgc2FuZGJveEV4dGVuc2lvbkhhbmRsZSk7CiAKLSAgICBpZiAodXNlc05l
dHdvcmtQcm9jZXNzKCkgJiYgbmV0d29ya1Byb2Nlc3MoKSkgeworICAgIGlmIChuZXR3b3JrUHJv
Y2VzcygpKSB7CiAgICAgICAgIG5ldHdvcmtQcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6Ok5ldHdv
cmtQcm9jZXNzOjpSZXN1bWVEb3dubG9hZChkb3dubG9hZFByb3h5LT5kb3dubG9hZElEKCksIHJl
c3VtZURhdGEtPmRhdGFSZWZlcmVuY2UoKSwgcGF0aCwgc2FuZGJveEV4dGVuc2lvbkhhbmRsZSks
IDApOwogICAgICAgICByZXR1cm4gZG93bmxvYWRQcm94eTsKICAgICB9CiAKLSAgICBtX3Byb2Nl
c3Nlc1swXS0+c2VuZChNZXNzYWdlczo6V2ViUHJvY2Vzczo6UmVzdW1lRG93bmxvYWQoZG93bmxv
YWRQcm94eS0+ZG93bmxvYWRJRCgpLCByZXN1bWVEYXRhLT5kYXRhUmVmZXJlbmNlKCksIHBhdGgs
IHNhbmRib3hFeHRlbnNpb25IYW5kbGUpLCAwKTsKICAgICByZXR1cm4gZG93bmxvYWRQcm94eTsK
IH0KIApAQCAtOTU0LDcgKzkyNSw3IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldERvbWFpblJl
bGF4YXRpb24KIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldENhbkhhbmRsZUhUVFBTU2VydmVyVHJ1
c3RFdmFsdWF0aW9uKGJvb2wgdmFsdWUpCiB7CiAgICAgbV9jYW5IYW5kbGVIVFRQU1NlcnZlclRy
dXN0RXZhbHVhdGlvbiA9IHZhbHVlOwotICAgIGlmICh1c2VzTmV0d29ya1Byb2Nlc3MoKSAmJiBt
X25ldHdvcmtQcm9jZXNzKSB7CisgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpIHsKICAgICAgICAg
bV9uZXR3b3JrUHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldENhbkhh
bmRsZUhUVFBTU2VydmVyVHJ1c3RFdmFsdWF0aW9uKHZhbHVlKSwgMCk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CkBAIC0xMDI1LDcgKzk5Niw3IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldENh
Y2hlTW9kZWwoQ2FjaGUKICAgICBtX2NvbmZpZ3VyYXRpb24tPnNldENhY2hlTW9kZWwoY2FjaGVN
b2RlbCk7CiAgICAgc2VuZFRvQWxsUHJvY2Vzc2VzKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpTZXRD
YWNoZU1vZGVsKGNhY2hlTW9kZWwpKTsKIAotICAgIGlmICh1c2VzTmV0d29ya1Byb2Nlc3MoKSAm
JiBtX25ldHdvcmtQcm9jZXNzKQorICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQogICAgICAgICBt
X25ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0Q2FjaGVN
b2RlbChjYWNoZU1vZGVsKSwgMCk7CiB9CiAKQEAgLTEwMzYsMTMgKzEwMDcsOSBAQCB2b2lkIFdl
YlByb2Nlc3NQb29sOjpzZXREZWZhdWx0UmVxdWVzdFRpCiAKIERvd25sb2FkUHJveHkqIFdlYlBy
b2Nlc3NQb29sOjpjcmVhdGVEb3dubG9hZFByb3h5KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVx
dWVzdCkKIHsKLSAgICBpZiAodXNlc05ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgZW5zdXJl
TmV0d29ya1Byb2Nlc3MoKTsKLSAgICAgICAgQVNTRVJUKG1fbmV0d29ya1Byb2Nlc3MpOwotICAg
ICAgICByZXR1cm4gbV9uZXR3b3JrUHJvY2Vzcy0+Y3JlYXRlRG93bmxvYWRQcm94eShyZXF1ZXN0
KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZW5zdXJlU2hhcmVkV2ViUHJvY2VzcygpLmNyZWF0ZURv
d25sb2FkUHJveHkocmVxdWVzdCk7CisgICAgZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKKyAgICBB
U1NFUlQobV9uZXR3b3JrUHJvY2Vzcyk7CisgICAgcmV0dXJuIG1fbmV0d29ya1Byb2Nlc3MtPmNy
ZWF0ZURvd25sb2FkUHJveHkocmVxdWVzdCk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmFk
ZE1lc3NhZ2VSZWNlaXZlcihJUEM6OlN0cmluZ1JlZmVyZW5jZSBtZXNzYWdlUmVjZWl2ZXJOYW1l
LCBJUEM6Ok1lc3NhZ2VSZWNlaXZlciYgbWVzc2FnZVJlY2VpdmVyKQpAQCAtMTE1MiwyMiArMTEx
OSw4IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnVzZVRlc3RpbmdOZXR3b3JrU2UKIAogdm9pZCBX
ZWJQcm9jZXNzUG9vbDo6YWxsb3dTcGVjaWZpY0hUVFBTQ2VydGlmaWNhdGVGb3JIb3N0KGNvbnN0
IFdlYkNlcnRpZmljYXRlSW5mbyogY2VydGlmaWNhdGUsIGNvbnN0IFN0cmluZyYgaG9zdCkKIHsK
LSAgICBpZiAodXNlc05ldHdvcmtQcm9jZXNzKCkgJiYgbV9uZXR3b3JrUHJvY2VzcykgeworICAg
IGlmIChtX25ldHdvcmtQcm9jZXNzKQogICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kKE1l
c3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6QWxsb3dTcGVjaWZpY0hUVFBTQ2VydGlmaWNhdGVGb3JI
b3N0KGNlcnRpZmljYXRlLT5jZXJ0aWZpY2F0ZUluZm8oKSwgaG9zdCksIDApOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0jaWYgVVNFKFNPVVApCi0gICAgbV9wcm9jZXNzZXNbMF0tPnNlbmQo
TWVzc2FnZXM6OldlYlByb2Nlc3M6OkFsbG93U3BlY2lmaWNIVFRQU0NlcnRpZmljYXRlRm9ySG9z
dChjZXJ0aWZpY2F0ZS0+Y2VydGlmaWNhdGVJbmZvKCksIGhvc3QpLCAwKTsKLSAgICByZXR1cm47
Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShjZXJ0aWZpY2F0ZSk7Ci0gICAgVU5VU0VEX1BBUkFN
KGhvc3QpOwotI2VuZGlmCi0KLSNpZiAhUExBVEZPUk0oSU9TKQotICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotI2VuZGlmCiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldEhUVFBQaXBlbGlu
aW5nRW5hYmxlZChib29sIGVuYWJsZWQpCkBAIC0xMjIxLDcgKzExNzQsNyBAQCB2b2lkIFdlYlBy
b2Nlc3NQb29sOjpyZXF1ZXN0V2ViQ29udGVudFN0CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnJl
cXVlc3ROZXR3b3JraW5nU3RhdGlzdGljcyhTdGF0aXN0aWNzUmVxdWVzdCogcmVxdWVzdCkKIHsK
LSAgICBpZiAoIXVzZXNOZXR3b3JrUHJvY2VzcygpIHx8ICFtX25ldHdvcmtQcm9jZXNzKSB7Cisg
ICAgaWYgKCFtX25ldHdvcmtQcm9jZXNzKSB7CiAgICAgICAgIExPR19FUlJPUigiQXR0ZW1wdCB0
byBnZXQgTmV0d29ya1Byb2Nlc3Mgc3RhdGlzdGljcyBidXQgdGhlIE5ldHdvcmtQcm9jZXNzIGlz
IHVuYXZhaWxhYmxlIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CkluZGV4OiBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuaAkocmV2aXNpb24gMTkyNzUzKQorKysgU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmgJKHdvcmtpbmcgY29weSkKQEAg
LTI3NywxMCArMjc3LDYgQEAgcHVibGljOgogICAgIHZvaWQgc2V0UGx1Z0luQXV0b1N0YXJ0T3Jp
Z2luc0ZpbHRlcmluZ091dEVudHJpZXNBZGRlZEFmdGVyVGltZShBUEk6OkRpY3Rpb25hcnkmLCBk
b3VibGUgdGltZSk7CiAKICAgICAvLyBOZXR3b3JrIFByb2Nlc3MgTWFuYWdlbWVudAotCi0gICAg
dm9pZCBzZXRVc2VzTmV0d29ya1Byb2Nlc3MoYm9vbCk7Ci0gICAgYm9vbCB1c2VzTmV0d29ya1By
b2Nlc3MoKSBjb25zdDsKLQogICAgIE5ldHdvcmtQcm9jZXNzUHJveHkmIGVuc3VyZU5ldHdvcmtQ
cm9jZXNzKCk7CiAgICAgTmV0d29ya1Byb2Nlc3NQcm94eSogbmV0d29ya1Byb2Nlc3MoKSB7IHJl
dHVybiBtX25ldHdvcmtQcm9jZXNzLmdldCgpOyB9CiAgICAgdm9pZCBuZXR3b3JrUHJvY2Vzc0Ny
YXNoZWQoTmV0d29ya1Byb2Nlc3NQcm94eSopOwpAQCAtMzA1LDExICszMDEsNiBAQCBwdWJsaWM6
CiAKICAgICBzdGF0aWMgYm9vbCBpc0VwaGVtZXJhbFNlc3Npb24oV2ViQ29yZTo6U2Vzc2lvbklE
KTsKIAotI2lmIFVTRShTT1VQKQotICAgIHZvaWQgc2V0SWdub3JlVExTRXJyb3JzKGJvb2wpOwot
ICAgIGJvb2wgaWdub3JlVExTRXJyb3JzKCkgY29uc3QgeyByZXR1cm4gbV9pZ25vcmVUTFNFcnJv
cnM7IH0KLSNlbmRpZgotCiAgICAgc3RhdGljIHZvaWQgc2V0SW52YWxpZE1lc3NhZ2VDYWxsYmFj
ayh2b2lkICgqKShXS1N0cmluZ1JlZikpOwogICAgIHN0YXRpYyB2b2lkIGRpZFJlY2VpdmVJbnZh
bGlkTWVzc2FnZShjb25zdCBJUEM6OlN0cmluZ1JlZmVyZW5jZSYgbWVzc2FnZVJlY2VpdmVyTmFt
ZSwgY29uc3QgSVBDOjpTdHJpbmdSZWZlcmVuY2UmIG1lc3NhZ2VOYW1lKTsKIApAQCAtNDk5LDEw
ICs0OTAsNiBAQCBwcml2YXRlOgogICAgIEhhc2hNYXA8dWludDY0X3QsIFJlZlB0cjxEaWN0aW9u
YXJ5Q2FsbGJhY2s+PiBtX2RpY3Rpb25hcnlDYWxsYmFja3M7CiAgICAgSGFzaE1hcDx1aW50NjRf
dCwgUmVmUHRyPFN0YXRpc3RpY3NSZXF1ZXN0Pj4gbV9zdGF0aXN0aWNzUmVxdWVzdHM7CiAKLSNp
ZiBVU0UoU09VUCkKLSAgICBib29sIG1faWdub3JlVExTRXJyb3JzOwotI2VuZGlmCi0KICAgICBi
b29sIG1fbWVtb3J5Q2FjaGVEaXNhYmxlZDsKIAogICAgIFJlZkNvdW50ZXIgbV91c2VyT2JzZXJ2
YWJsZVBhZ2VDb3VudGVyOwpAQCAtNTI1LDQzICs1MTIsMTUgQEAgcHJpdmF0ZToKIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+CiB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZW5kVG9OZXR3b3JraW5nUHJvY2Vz
cyhUJiYgbWVzc2FnZSkKIHsKLSAgICBzd2l0Y2ggKHByb2Nlc3NNb2RlbCgpKSB7Ci0gICAgY2Fz
ZSBQcm9jZXNzTW9kZWxTaGFyZWRTZWNvbmRhcnlQcm9jZXNzOgotICAgICAgICBpZiAodXNlc05l
dHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAgIGlmIChtX25ldHdvcmtQcm9jZXNzICYmIG1f
bmV0d29ya1Byb2Nlc3MtPmNhblNlbmRNZXNzYWdlKCkpCi0gICAgICAgICAgICAgICAgbV9uZXR3
b3JrUHJvY2Vzcy0+c2VuZChzdGQ6OmZvcndhcmQ8VD4obWVzc2FnZSksIDApOwotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGlmICghbV9wcm9jZXNzZXMuaXNFbXB0eSgp
ICYmIG1fcHJvY2Vzc2VzWzBdLT5jYW5TZW5kTWVzc2FnZSgpKQotICAgICAgICAgICAgbV9wcm9j
ZXNzZXNbMF0tPnNlbmQoc3RkOjpmb3J3YXJkPFQ+KG1lc3NhZ2UpLCAwKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIGNhc2UgUHJvY2Vzc01vZGVsTXVsdGlwbGVTZWNvbmRhcnlQcm9jZXNzZXM6Ci0g
ICAgICAgIGlmIChtX25ldHdvcmtQcm9jZXNzICYmIG1fbmV0d29ya1Byb2Nlc3MtPmNhblNlbmRN
ZXNzYWdlKCkpCi0gICAgICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kKHN0ZDo6Zm9yd2Fy
ZDxUPihtZXNzYWdlKSwgMCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MgJiYgbV9uZXR3b3JrUHJvY2Vz
cy0+Y2FuU2VuZE1lc3NhZ2UoKSkKKyAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZChzdGQ6
OmZvcndhcmQ8VD4obWVzc2FnZSksIDApOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogdm9p
ZCBXZWJQcm9jZXNzUG9vbDo6c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3NSZWxhdW5jaGluZ0lmTmVj
ZXNzYXJ5KFQmJiBtZXNzYWdlKQogewotICAgIHN3aXRjaCAocHJvY2Vzc01vZGVsKCkpIHsKLSAg
ICBjYXNlIFByb2Nlc3NNb2RlbFNoYXJlZFNlY29uZGFyeVByb2Nlc3M6Ci0gICAgICAgIGlmICh1
c2VzTmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICAgICAgZW5zdXJlTmV0d29ya1Byb2Nlc3Mo
KTsKLSAgICAgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmQoc3RkOjpmb3J3YXJkPFQ+KG1l
c3NhZ2UpLCAwKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBlbnN1
cmVTaGFyZWRXZWJQcm9jZXNzKCk7Ci0gICAgICAgIG1fcHJvY2Vzc2VzWzBdLT5zZW5kKHN0ZDo6
Zm9yd2FyZDxUPihtZXNzYWdlKSwgMCk7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIFByb2Nl
c3NNb2RlbE11bHRpcGxlU2Vjb25kYXJ5UHJvY2Vzc2VzOgotICAgICAgICBlbnN1cmVOZXR3b3Jr
UHJvY2VzcygpOwotICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kKHN0ZDo6Zm9yd2FyZDxU
PihtZXNzYWdlKSwgMCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKKyAgICBtX25ldHdvcmtQcm9j
ZXNzLT5zZW5kKHN0ZDo6Zm9yd2FyZDxUPihtZXNzYWdlKSwgMCk7CiB9CiAKIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1By
b3h5LmNwcAkocmV2aXNpb24gMTkyNzUzKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dl
YlByb2Nlc3NQcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwMiw5ICsyMDIsNiBAQCB2b2lk
IFdlYlByb2Nlc3NQcm94eTo6c2h1dERvd24oKQogICAgICAgICBmcmFtZXNbaV0tPndlYlByb2Nl
c3NXaWxsU2h1dERvd24oKTsKICAgICBtX2ZyYW1lTWFwLmNsZWFyKCk7CiAKLSAgICBpZiAobV9k
b3dubG9hZFByb3h5TWFwKQotICAgICAgICBtX2Rvd25sb2FkUHJveHlNYXAtPnByb2Nlc3NEaWRD
bG9zZSgpOwotCiAgICAgZm9yIChWaXNpdGVkTGlua1N0b3JlKiB2aXNpdGVkTGlua1N0b3JlIDog
bV92aXNpdGVkTGlua1N0b3JlcykKICAgICAgICAgdmlzaXRlZExpbmtTdG9yZS0+cmVtb3ZlUHJv
Y2VzcygqdGhpcyk7CiAgICAgbV92aXNpdGVkTGlua1N0b3Jlcy5jbGVhcigpOwpAQCAtMjU2LDcg
KzI1Myw3IEBAIHZvaWQgV2ViUHJvY2Vzc1Byb3h5OjpyZW1vdmVXZWJQYWdlKHVpbnQKIAogICAg
IC8vIElmIHRoaXMgd2FzIHRoZSBsYXN0IFdlYlBhZ2Ugb3BlbiBpbiB0aGF0IHdlYiBwcm9jZXNz
LCBhbmQgd2UgaGF2ZSBubyBvdGhlciByZWFzb24gdG8ga2VlcCBpdCBhbGl2ZSwgbGV0IGl0IGdv
LgogICAgIC8vIFdlIG9ubHkgYWxsb3cgdGhpcyB3aGVuIHVzaW5nIGEgbmV0d29yayBwcm9jZXNz
LCBhcyBvdGhlcndpc2UgdGhlIFdlYlByb2Nlc3MgbmVlZHMgdG8gcHJlc2VydmUgaXRzIHNlc3Np
b24gc3RhdGUuCi0gICAgaWYgKCFtX3Byb2Nlc3NQb29sLT51c2VzTmV0d29ya1Byb2Nlc3MoKSB8
fCBzdGF0ZSgpID09IFN0YXRlOjpUZXJtaW5hdGVkIHx8ICFjYW5UZXJtaW5hdGVDaGlsZFByb2Nl
c3MoKSkKKyAgICBpZiAoc3RhdGUoKSA9PSBTdGF0ZTo6VGVybWluYXRlZCB8fCAhY2FuVGVybWlu
YXRlQ2hpbGRQcm9jZXNzKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIHNodXREb3duKCk7CkBA
IC02NTUsOSArNjUyLDYgQEAgYm9vbCBXZWJQcm9jZXNzUHJveHk6OmNhblRlcm1pbmF0ZUNoaWxk
UAogICAgIGlmICghbV9wYWdlTWFwLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
Ci0gICAgaWYgKG1fZG93bmxvYWRQcm94eU1hcCAmJiAhbV9kb3dubG9hZFByb3h5TWFwLT5pc0Vt
cHR5KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQogICAgIGlmICghbV9wZW5kaW5nRGVsZXRl
V2Vic2l0ZURhdGFDYWxsYmFja3MuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
QEAgLTcwMCwxNiArNjk0LDYgQEAgdm9pZCBXZWJQcm9jZXNzUHJveHk6OnVwZGF0ZVRleHRDaGVj
a2VyUwogICAgICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpTZXRUZXh0Q2hlY2tlclN0
YXRlKFRleHRDaGVja2VyOjpzdGF0ZSgpKSwgMCk7CiB9CiAKLURvd25sb2FkUHJveHkqIFdlYlBy
b2Nlc3NQcm94eTo6Y3JlYXRlRG93bmxvYWRQcm94eShjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJl
cXVlc3QpCi17Ci0gICAgQVNTRVJUKCFtX3Byb2Nlc3NQb29sLT51c2VzTmV0d29ya1Byb2Nlc3Mo
KSk7Ci0KLSAgICBpZiAoIW1fZG93bmxvYWRQcm94eU1hcCkKLSAgICAgICAgbV9kb3dubG9hZFBy
b3h5TWFwID0gc3RkOjptYWtlX3VuaXF1ZTxEb3dubG9hZFByb3h5TWFwPih0aGlzKTsKLQotICAg
IHJldHVybiBtX2Rvd25sb2FkUHJveHlNYXAtPmNyZWF0ZURvd25sb2FkUHJveHkobV9wcm9jZXNz
UG9vbCwgcmVxdWVzdCk7Ci19Ci0KIHZvaWQgV2ViUHJvY2Vzc1Byb3h5OjpkaWRTYXZlVG9QYWdl
Q2FjaGUoKQogewogICAgIG1fcHJvY2Vzc1Bvb2wtPnByb2Nlc3NEaWRDYWNoZVBhZ2UodGhpcyk7
CkBAIC05NzIsMTQgKzk1NiwxMiBAQCB2b2lkIFdlYlByb2Nlc3NQcm94eTo6ZGlkU2V0QXNzZXJ0
aW9uU3RhCiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBBc3NlcnRpb25TdGF0ZTo6QmFja2dy
b3VuZDoKLSAgICAgICAgaWYgKHByb2Nlc3NQb29sKCkudXNlc05ldHdvcmtQcm9jZXNzKCkpCi0g
ICAgICAgICAgICBtX2JhY2tncm91bmRUb2tlbkZvck5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bv
b2woKS5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnRocm90dGxlcigpLmJhY2tncm91bmRBY3Rpdml0
eVRva2VuKCk7CisgICAgICAgIG1fYmFja2dyb3VuZFRva2VuRm9yTmV0d29ya1Byb2Nlc3MgPSBw
cm9jZXNzUG9vbCgpLmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkudGhyb3R0bGVyKCkuYmFja2dyb3Vu
ZEFjdGl2aXR5VG9rZW4oKTsKICAgICAgICAgbV9mb3JlZ3JvdW5kVG9rZW5Gb3JOZXR3b3JrUHJv
Y2VzcyA9IG51bGxwdHI7CiAgICAgICAgIGJyZWFrOwogICAgIAogICAgIGNhc2UgQXNzZXJ0aW9u
U3RhdGU6OkZvcmVncm91bmQ6Ci0gICAgICAgIGlmIChwcm9jZXNzUG9vbCgpLnVzZXNOZXR3b3Jr
UHJvY2VzcygpKQotICAgICAgICAgICAgbV9mb3JlZ3JvdW5kVG9rZW5Gb3JOZXR3b3JrUHJvY2Vz
cyA9IHByb2Nlc3NQb29sKCkuZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS50aHJvdHRsZXIoKS5mb3Jl
Z3JvdW5kQWN0aXZpdHlUb2tlbigpOworICAgICAgICBtX2ZvcmVncm91bmRUb2tlbkZvck5ldHdv
cmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2woKS5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnRocm90dGxl
cigpLmZvcmVncm91bmRBY3Rpdml0eVRva2VuKCk7CiAgICAgICAgIG1fYmFja2dyb3VuZFRva2Vu
Rm9yTmV0d29ya1Byb2Nlc3MgPSBudWxscHRyOwogICAgICAgICBmb3IgKGF1dG8mIHBhZ2UgOiBt
X3BhZ2VNYXAudmFsdWVzKCkpCiAgICAgICAgICAgICBwYWdlLT5wcm9jZXNzV2lsbEJlY29tZUZv
cmVncm91bmQoKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJv
eHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1By
b3h5LmgJKHJldmlzaW9uIDE5Mjc1MykKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQ
cm9jZXNzUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtNTgsNyArNTgsNiBAQCBzdHJ1Y3QgUGx1
Z2luSW5mbzsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLWNsYXNzIERvd25sb2FkUHJveHlNYXA7
CiBjbGFzcyBOZXR3b3JrUHJvY2Vzc1Byb3h5OwogY2xhc3MgV2ViQmFja0ZvcndhcmRMaXN0SXRl
bTsKIGNsYXNzIFdlYlBhZ2VHcm91cDsKQEAgLTEyMCw4ICsxMTksNiBAQCBwdWJsaWM6CiAKICAg
ICBzdGF0aWMgYm9vbCBmdWxsS2V5Ym9hcmRBY2Nlc3NFbmFibGVkKCk7CiAKLSAgICBEb3dubG9h
ZFByb3h5KiBjcmVhdGVEb3dubG9hZFByb3h5KGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVz
dCYpOwotCiAgICAgdm9pZCBkaWRTYXZlVG9QYWdlQ2FjaGUoKTsKICAgICB2b2lkIHJlbGVhc2VQ
YWdlQ2FjaGUoKTsKIApAQCAtMjQyLDcgKzIzOSw2IEBAIHByaXZhdGU6CiAgICAgSGFzaFNldDxW
aXNpdGVkTGlua1N0b3JlKj4gbV92aXNpdGVkTGlua1N0b3JlczsKICAgICBIYXNoU2V0PFdlYlVz
ZXJDb250ZW50Q29udHJvbGxlclByb3h5Kj4gbV93ZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94
aWVzOwogCi0gICAgc3RkOjp1bmlxdWVfcHRyPERvd25sb2FkUHJveHlNYXA+IG1fZG93bmxvYWRQ
cm94eU1hcDsKICAgICBDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eSBtX2N1c3RvbVByb3RvY29s
TWFuYWdlclByb3h5OwogCiAgICAgSGFzaE1hcDx1aW50NjRfdCwgc3RkOjpmdW5jdGlvbjx2b2lk
IChXZWJzaXRlRGF0YSk+PiBtX3BlbmRpbmdGZXRjaFdlYnNpdGVEYXRhQ2FsbGJhY2tzOwpJbmRl
eDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9BUElQcm9jZXNzUG9vbENvbmZpZ3VyYXRp
b24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQVBJUHJv
Y2Vzc1Bvb2xDb25maWd1cmF0aW9uLmNwcAkocmV2aXNpb24gMTkyNzUzKQorKysgU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9BUElQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00Miw3ICs0Miw2IEBAIFJlZjxQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24+
IFByb2Nlc3NQb28KIAogICAgIGNvbmZpZ3VyYXRpb24tPm1fc2hvdWxkSGF2ZUxlZ2FjeURhdGFT
dG9yZSA9IHRydWU7CiAgICAgY29uZmlndXJhdGlvbi0+bV9wcm9jZXNzTW9kZWwgPSBXZWJLaXQ6
OlByb2Nlc3NNb2RlbFNoYXJlZFNlY29uZGFyeVByb2Nlc3M7Ci0gICAgY29uZmlndXJhdGlvbi0+
bV91c2VOZXR3b3JrUHJvY2VzcyA9IGZhbHNlOwogICAgIGNvbmZpZ3VyYXRpb24tPm1fY2FjaGVN
b2RlbCA9IFdlYktpdDo6Q2FjaGVNb2RlbERvY3VtZW50Vmlld2VyOwogCiAgICAgY29uZmlndXJh
dGlvbi0+bV9hcHBsaWNhdGlvbkNhY2hlRGlyZWN0b3J5ID0gV2ViS2l0OjpXZWJQcm9jZXNzUG9v
bDo6bGVnYWN5UGxhdGZvcm1EZWZhdWx0QXBwbGljYXRpb25DYWNoZURpcmVjdG9yeSgpOwpAQCAt
NzUsNyArNzQsNiBAQCBSZWY8UHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uPiBQcm9jZXNzUG9vCiAK
ICAgICBjb3B5LT5tX3Nob3VsZEhhdmVMZWdhY3lEYXRhU3RvcmUgPSB0aGlzLT5tX3Nob3VsZEhh
dmVMZWdhY3lEYXRhU3RvcmU7CiAgICAgY29weS0+bV9wcm9jZXNzTW9kZWwgPSB0aGlzLT5tX3By
b2Nlc3NNb2RlbDsKLSAgICBjb3B5LT5tX3VzZU5ldHdvcmtQcm9jZXNzID0gdGhpcy0+bV91c2VO
ZXR3b3JrUHJvY2VzczsKICAgICBjb3B5LT5tX21heGltdW1Qcm9jZXNzQ291bnQgPSB0aGlzLT5t
X21heGltdW1Qcm9jZXNzQ291bnQ7CiAgICAgY29weS0+bV9jYWNoZU1vZGVsID0gdGhpcy0+bV9j
YWNoZU1vZGVsOwogICAgIGNvcHktPm1fZGlza0NhY2hlU2l6ZU92ZXJyaWRlID0gdGhpcy0+bV9k
aXNrQ2FjaGVTaXplT3ZlcnJpZGU7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L0FQSVByb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvQVBJUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmgJKHJldmlzaW9u
IDE5Mjc1MykKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQVBJUHJvY2Vzc1Bvb2xD
b25maWd1cmF0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDkgKzUxLDYgQEAgcHVibGljOgog
ICAgIFdlYktpdDo6UHJvY2Vzc01vZGVsIHByb2Nlc3NNb2RlbCgpIGNvbnN0IHsgcmV0dXJuIG1f
cHJvY2Vzc01vZGVsOyB9CiAgICAgdm9pZCBzZXRQcm9jZXNzTW9kZWwoV2ViS2l0OjpQcm9jZXNz
TW9kZWwgcHJvY2Vzc01vZGVsKSB7IG1fcHJvY2Vzc01vZGVsID0gcHJvY2Vzc01vZGVsOyB9IAog
Ci0gICAgYm9vbCB1c2VOZXR3b3JrUHJvY2VzcygpIGNvbnN0IHsgcmV0dXJuIG1fdXNlTmV0d29y
a1Byb2Nlc3M7IH0KLSAgICB2b2lkIHNldFVzZU5ldHdvcmtQcm9jZXNzKGJvb2wgdXNlTmV0d29y
a1Byb2Nlc3MpIHsgbV91c2VOZXR3b3JrUHJvY2VzcyA9IHVzZU5ldHdvcmtQcm9jZXNzOyB9IAot
CiAgICAgdW5zaWduZWQgbWF4aW11bVByb2Nlc3NDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fbWF4
aW11bVByb2Nlc3NDb3VudDsgfQogICAgIHZvaWQgc2V0TWF4aW11bVByb2Nlc3NDb3VudCh1bnNp
Z25lZCBtYXhpbXVtUHJvY2Vzc0NvdW50KSB7IG1fbWF4aW11bVByb2Nlc3NDb3VudCA9IG1heGlt
dW1Qcm9jZXNzQ291bnQ7IH0gCiAKQEAgLTk3LDcgKzk0LDYgQEAgcHJpdmF0ZToKICAgICBib29s
IG1fc2hvdWxkSGF2ZUxlZ2FjeURhdGFTdG9yZSB7IGZhbHNlIH07CiAKICAgICBXZWJLaXQ6OlBy
b2Nlc3NNb2RlbCBtX3Byb2Nlc3NNb2RlbCB7IFdlYktpdDo6UHJvY2Vzc01vZGVsTXVsdGlwbGVT
ZWNvbmRhcnlQcm9jZXNzZXMgfTsKLSAgICBib29sIG1fdXNlTmV0d29ya1Byb2Nlc3MgeyB0cnVl
IH07CiAgICAgdW5zaWduZWQgbV9tYXhpbXVtUHJvY2Vzc0NvdW50IHsgMCB9OwogICAgIFdlYktp
dDo6Q2FjaGVNb2RlbCBtX2NhY2hlTW9kZWwgeyBXZWJLaXQ6OkNhY2hlTW9kZWxQcmltYXJ5V2Vi
QnJvd3NlciB9OwogICAgIGludDY0X3QgbV9kaXNrQ2FjaGVTaXplT3ZlcnJpZGUgeyAtMSB9OwpJ
bmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dC5jcHAJKHJl
dmlzaW9uIDE5Mjc1MykKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRl
eHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NTQsMTEgKzU1NCw2IEBAIHZvaWQgV0tDb250ZXh0
U2V0SmF2YVNjcmlwdEdhcmJhZ2VDb2xsZWMKICAgICB0b0ltcGwoY29udGV4dFJlZiktPnNldEph
dmFTY3JpcHRHYXJiYWdlQ29sbGVjdG9yVGltZXJFbmFibGVkKGVuYWJsZSk7CiB9CiAKLXZvaWQg
V0tDb250ZXh0U2V0VXNlc05ldHdvcmtQcm9jZXNzKFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLCBi
b29sIHVzZXNOZXR3b3JrUHJvY2VzcykKLXsKLSAgICB0b0ltcGwoY29udGV4dFJlZiktPnNldFVz
ZXNOZXR3b3JrUHJvY2Vzcyh1c2VzTmV0d29ya1Byb2Nlc3MpOwotfQotCiB2b2lkIFdLQ29udGV4
dFVzZVRlc3RpbmdOZXR3b3JrU2Vzc2lvbihXS0NvbnRleHRSZWYgY29udGV4dCkKIHsKICAgICB0
b0ltcGwoY29udGV4dCktPnVzZVRlc3RpbmdOZXR3b3JrU2Vzc2lvbigpOwpJbmRleDogU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dFByaXZhdGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0UHJpdmF0ZS5oCShyZXZp
c2lvbiAxOTI3NTMpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0
UHJpdmF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03Nyw3ICs3Nyw3IEBAIFdLX0VYUE9SVCB2b2lk
IFdLQ29udGV4dFdhcm1Jbml0aWFsUHJvY2UKIAogLy8gRklYTUU6IFRoaXMgZnVuY3Rpb24gaXMg
dGVtcG9yYXJ5IGFuZCB1c2VmdWwgZHVyaW5nIHRoZSBkZXZlbG9wbWVudCBvZiB0aGUgTmV0d29y
a1Byb2Nlc3MgZmVhdHVyZS4KIC8vIEF0IHNvbWUgcG9pbnQgaXQgc2hvdWxkIGJlIHJlbW92ZWQu
Ci1XS19FWFBPUlQgdm9pZCBXS0NvbnRleHRTZXRVc2VzTmV0d29ya1Byb2Nlc3MoV0tDb250ZXh0
UmVmIGNvbnRleHQsIGJvb2wgdXNlc05ldHdvcmtQcm9jZXNzKTsKK1dLX0VYUE9SVCB2b2lkIFdL
Q29udGV4dFNldFVzZXNOZXR3b3JrUHJvY2VzcyhXS0NvbnRleHRSZWYsIGJvb2wpOwogCiAvLyBU
ZXN0IG9ubHkuIFNob3VsZCBiZSBjYWxsZWQgYmVmb3JlIGFueSBzZWNvbmRhcnkgcHJvY2Vzc2Vz
IGFyZSBzdGFydGVkLgogV0tfRVhQT1JUIHZvaWQgV0tDb250ZXh0VXNlVGVzdGluZ05ldHdvcmtT
ZXNzaW9uKFdLQ29udGV4dFJlZiBjb250ZXh0KTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvQ29jb2EvV0tQcm9jZXNzR3JvdXAubW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1Byb2Nlc3NHcm91cC5tbQkocmV2aXNpb24gMTky
NzUzKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1Byb2Nlc3NHcm91
cC5tbQkod29ya2luZyBjb3B5KQpAQCAtMTkzLDcgKzE5Myw2IEBAIC0gKGlkKWluaXRXaXRoSW5q
ZWN0ZWRCdW5kbGVVUkw6KE5TVVJMICoKICAgICBhdXRvIGNvbmZpZ3VyYXRpb24gPSBBUEk6OlBy
b2Nlc3NQb29sQ29uZmlndXJhdGlvbjo6Y3JlYXRlV2l0aExlZ2FjeU9wdGlvbnMoKTsKICAgICBj
b25maWd1cmF0aW9uLT5zZXRJbmplY3RlZEJ1bmRsZVBhdGgoYnVuZGxlVVJMID8gU3RyaW5nKGJ1
bmRsZVVSTC5wYXRoKSA6IFN0cmluZygpKTsKICNpZiBQTEFURk9STShJT1MpCi0gICAgY29uZmln
dXJhdGlvbi0+c2V0VXNlTmV0d29ya1Byb2Nlc3ModHJ1ZSk7CiAgICAgY29uZmlndXJhdGlvbi0+
c2V0UHJvY2Vzc01vZGVsKFByb2Nlc3NNb2RlbE11bHRpcGxlU2Vjb25kYXJ5UHJvY2Vzc2VzKTsK
ICNlbmRpZgogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29u
dGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwv
ZXdrX2NvbnRleHQuY3BwCShyZXZpc2lvbiAxOTI3NTMpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3Nyw3ICsy
NzcsNiBAQCB2b2lkIEV3a0NvbnRleHQ6OnNldFByb2Nlc3NNb2RlbChFd2tfUHJvCiAgICAgaWYg
KFdLQ29udGV4dEdldFByb2Nlc3NNb2RlbChtX2NvbnRleHQuZ2V0KCkpID09IG5ld1dLUHJvY2Vz
c01vZGVsKQogICAgICAgICByZXR1cm47CiAKLSAgICBXS0NvbnRleHRTZXRVc2VzTmV0d29ya1By
b2Nlc3MobV9jb250ZXh0LmdldCgpLCBuZXdXS1Byb2Nlc3NNb2RlbCA9PSBrV0tQcm9jZXNzTW9k
ZWxNdWx0aXBsZVNlY29uZGFyeVByb2Nlc3Nlcyk7CiAgICAgV0tDb250ZXh0U2V0UHJvY2Vzc01v
ZGVsKG1fY29udGV4dC5nZXQoKSwgbmV3V0tQcm9jZXNzTW9kZWwpOwogfQogCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJDb250ZXh0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJDb250ZXh0
LmNwcAkocmV2aXNpb24gMTkyNzUzKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0V2ViQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4Niw3ICsyODYsNiBA
QCBzdGF0aWMgdm9pZCB3ZWJraXRXZWJDb250ZXh0Q29uc3RydWN0ZWQoCiAgICAgQVBJOjpQcm9j
ZXNzUG9vbENvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbjsKICAgICBjb25maWd1cmF0aW9uLnNl
dEluamVjdGVkQnVuZGxlUGF0aChXZWJDb3JlOjpmaWxlbmFtZVRvU3RyaW5nKGJ1bmRsZUZpbGVu
YW1lLmdldCgpKSk7CiAgICAgY29uZmlndXJhdGlvbi5zZXRQcm9jZXNzTW9kZWwoUHJvY2Vzc01v
ZGVsU2hhcmVkU2Vjb25kYXJ5UHJvY2Vzcyk7Ci0gICAgY29uZmlndXJhdGlvbi5zZXRVc2VOZXR3
b3JrUHJvY2VzcyhmYWxzZSk7CiAKICAgICBXZWJLaXRXZWJDb250ZXh0KiB3ZWJDb250ZXh0ID0g
V0VCS0lUX1dFQl9DT05URVhUKG9iamVjdCk7CiAgICAgV2ViS2l0V2ViQ29udGV4dFByaXZhdGUq
IHByaXYgPSB3ZWJDb250ZXh0LT5wcml2OwpAQCAtMTE3NCw3ICsxMTczLDYgQEAgdm9pZCB3ZWJr
aXRfd2ViX2NvbnRleHRfc2V0X3Byb2Nlc3NfbW9kZQogICAgIGlmIChuZXdQcm9jZXNzTW9kZWwg
PT0gY29udGV4dC0+cHJpdi0+Y29udGV4dC0+cHJvY2Vzc01vZGVsKCkpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIGNvbnRleHQtPnByaXYtPmNvbnRleHQtPnNldFVzZXNOZXR3b3JrUHJvY2Vzcyhu
ZXdQcm9jZXNzTW9kZWwgPT0gUHJvY2Vzc01vZGVsTXVsdGlwbGVTZWNvbmRhcnlQcm9jZXNzZXMp
OwogICAgIGNvbnRleHQtPnByaXYtPmNvbnRleHQtPnNldFByb2Nlc3NNb2RlbChuZXdQcm9jZXNz
TW9kZWwpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2EvV2ViUHJv
Y2Vzc1Bvb2xDb2NvYS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
Q29jb2EvV2ViUHJvY2Vzc1Bvb2xDb2NvYS5tbQkocmV2aXNpb24gMTkyNzUzKQorKysgU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQb29sQ29jb2EubW0JKHdvcmtpbmcg
Y29weSkKQEAgLTExNCw3ICsxMTQsNyBAQCBzdGF0aWMgdm9pZCByZWdpc3RlclVzZXJEZWZhdWx0
c0lmTmVlZGVkCiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnVwZGF0ZVByb2Nlc3NTdXBwcmVzc2lv
blN0YXRlKCkKIHsKLSAgICBpZiAodXNlc05ldHdvcmtQcm9jZXNzKCkgJiYgbV9uZXR3b3JrUHJv
Y2VzcykKKyAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKICAgICAgICAgbV9uZXR3b3JrUHJvY2Vz
cy0+c2V0UHJvY2Vzc1N1cHByZXNzaW9uRW5hYmxlZChwcm9jZXNzU3VwcHJlc3Npb25FbmFibGVk
KCkpOwogCiAjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCkBAIC0xOTAsMTEgKzE5MCw2
IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnBsYXRmb3JtSW5pdGlhbGl6ZVcKIAogICAgIHBhcmFt
ZXRlcnMudWlQcm9jZXNzQnVuZGxlSWRlbnRpZmllciA9IFN0cmluZyhbW05TQnVuZGxlIG1haW5C
dW5kbGVdIGJ1bmRsZUlkZW50aWZpZXJdKTsKIAotICAgIGlmICghdXNlc05ldHdvcmtQcm9jZXNz
KCkpIHsKLSAgICAgICAgZm9yIChjb25zdCBhdXRvJiBzY2hlbWUgOiBnbG9iYWxVUkxTY2hlbWVz
V2l0aEN1c3RvbVByb3RvY29sSGFuZGxlcnMoKSkKLSAgICAgICAgICAgIHBhcmFtZXRlcnMudXJs
U2NoZW1lc1JlZ2lzdGVyZWRGb3JDdXN0b21Qcm90b2NvbHMuYXBwZW5kKHNjaGVtZSk7Ci0gICAg
fQotCiAgICAgcGFyYW1ldGVycy5mb250V2hpdGVsaXN0ID0gbV9mb250V2hpdGVsaXN0OwogCiAg
ICAgaWYgKG1fYnVuZGxlUGFyYW1ldGVycykgewpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHkuY3BwCShyZXZpc2lvbiAxOTI3
NTMpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHku
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MSwxMyArNzEsOCBAQCB2b2lkIERvd25sb2FkUHJveHk6
OmNhbmNlbCgpCiAgICAgaWYgKCFtX3Byb2Nlc3NQb29sKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBpZiAobV9wcm9jZXNzUG9vbC0+dXNlc05ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgaWYg
KE5ldHdvcmtQcm9jZXNzUHJveHkqIG5ldHdvcmtQcm9jZXNzID0gbV9wcm9jZXNzUG9vbC0+bmV0
d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5jb25uZWN0aW9uKCkt
PnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpDYW5jZWxEb3dubG9hZChtX2Rvd25sb2Fk
SUQpLCAwKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1fcHJvY2Vzc1Bvb2wtPnNl
bmRUb0FsbFByb2Nlc3NlcyhNZXNzYWdlczo6V2ViUHJvY2Vzczo6Q2FuY2VsRG93bmxvYWQobV9k
b3dubG9hZElEKSk7CisgICAgaWYgKE5ldHdvcmtQcm9jZXNzUHJveHkqIG5ldHdvcmtQcm9jZXNz
ID0gbV9wcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKKyAgICAgICAgbmV0d29ya1Byb2Nl
c3MtPmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkNhbmNlbERv
d25sb2FkKG1fZG93bmxvYWRJRCksIDApOwogfQogCiB2b2lkIERvd25sb2FkUHJveHk6OmludmFs
aWRhdGUoKQpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJQcm9jZXNzUG9v
bEd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJQ
cm9jZXNzUG9vbEd0ay5jcHAJKHJldmlzaW9uIDE5Mjc1MykKKysrIFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9ndGsvV2ViUHJvY2Vzc1Bvb2xHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NSwx
NiArOTUsNiBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpwbGF0Zm9ybUluaXRpYWxpemVXCiAgICAg
ICAgIHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRBc0xvY2FsLmFwcGVuZCgicmVzb3Vy
Y2UiKTsKICAgICB9CiAKLSAgICBpZiAoIXVzZXNOZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAg
IHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRGb3JDdXN0b21Qcm90b2NvbHMgPSBzdXBw
bGVtZW50PFdlYlNvdXBDdXN0b21Qcm90b2NvbFJlcXVlc3RNYW5hZ2VyPigpLT5yZWdpc3RlcmVk
U2NoZW1lc0ZvckN1c3RvbVByb3RvY29scygpOwotCi0gICAgICAgIHN1cHBsZW1lbnQ8V2ViQ29v
a2llTWFuYWdlclByb3h5PigpLT5nZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShwYXJhbWV0ZXJz
LmNvb2tpZVBlcnNpc3RlbnRTdG9yYWdlUGF0aCwgcGFyYW1ldGVycy5jb29raWVQZXJzaXN0ZW50
U3RvcmFnZVR5cGUpOwotICAgICAgICBwYXJhbWV0ZXJzLmNvb2tpZUFjY2VwdFBvbGljeSA9IG1f
aW5pdGlhbEhUVFBDb29raWVBY2NlcHRQb2xpY3k7Ci0KLSAgICAgICAgcGFyYW1ldGVycy5pZ25v
cmVUTFNFcnJvcnMgPSBtX2lnbm9yZVRMU0Vycm9yczsKLSAgICAgICAgcGFyYW1ldGVycy5kaXNr
Q2FjaGVEaXJlY3RvcnkgPSBtX2NvbmZpZ3VyYXRpb24tPmRpc2tDYWNoZURpcmVjdG9yeSgpOwot
ICAgIH0KLQogICAgIHBhcmFtZXRlcnMubWVtb3J5Q2FjaGVEaXNhYmxlZCA9IG1fbWVtb3J5Q2Fj
aGVEaXNhYmxlZCB8fCBjYWNoZU1vZGVsKCkgPT0gQ2FjaGVNb2RlbERvY3VtZW50Vmlld2VyOwog
fQogCkBAIC0xNDYsNyArMTM2LDcgQEAgU3RyaW5nIFdlYlByb2Nlc3NQb29sOjpsZWdhY3lQbGF0
Zm9ybURlZgogdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0SWdub3JlVExTRXJyb3JzKGJvb2wgaWdu
b3JlVExTRXJyb3JzKQogewogICAgIG1faWdub3JlVExTRXJyb3JzID0gaWdub3JlVExTRXJyb3Jz
OwotICAgIGlmICh1c2VzTmV0d29ya1Byb2Nlc3MoKSAmJiBuZXR3b3JrUHJvY2VzcygpKSB7Cisg
ICAgaWYgKG5ldHdvcmtQcm9jZXNzKCkpIHsKICAgICAgICAgbmV0d29ya1Byb2Nlc3MoKS0+c2Vu
ZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldElnbm9yZVRMU0Vycm9ycyhtX2lnbm9yZVRM
U0Vycm9ycyksIDApOwogICAgICAgICByZXR1cm47CiAgICAgfQpJbmRleDogU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwCShyZXZpc2lvbiAxOTI3NTMpCisrKyBTb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTYs
NyArMTU2LDYgQEAgV2ViUHJvY2Vzczo6V2ViUHJvY2VzcygpCiAgICAgLCBtX2Z1bGxLZXlib2Fy
ZEFjY2Vzc0VuYWJsZWQoZmFsc2UpCiAgICAgLCBtX3RleHRDaGVja2VyU3RhdGUoKQogICAgICwg
bV9pY29uRGF0YWJhc2VQcm94eShuZXcgV2ViSWNvbkRhdGFiYXNlUHJveHkodGhpcykpCi0gICAg
LCBtX3VzZXNOZXR3b3JrUHJvY2VzcyhmYWxzZSkKICAgICAsIG1fd2ViUmVzb3VyY2VMb2FkU2No
ZWR1bGVyKG5ldyBXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIpCiAgICAgLCBtX2Ruc1ByZWZldGNo
SHlzdGVyZXJpcyhbdGhpc10oSHlzdGVyZXNpc1N0YXRlIHN0YXRlKSB7IGlmIChzdGF0ZSA9PSBI
eXN0ZXJlc2lzU3RhdGU6OlN0b3BwZWQpIG1fZG5zUHJlZmV0Y2hlZEhvc3RzLmNsZWFyKCk7IH0p
CiAjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCkBAIC0yNDUsMzIgKzI0NCwxMCBAQCB2
b2lkIFdlYlByb2Nlc3M6OmluaXRpYWxpemVDb25uZWN0aW9uKElQCiAgICAgY29ubmVjdGlvbi0+
c2V0T25seVNlbmRNZXNzYWdlc0FzRGlzcGF0Y2hXaGVuV2FpdGluZ0ZvclN5bmNSZXBseVdoZW5Q
cm9jZXNzaW5nU3VjaEFNZXNzYWdlKHRydWUpOwogfQogCi12b2lkIFdlYlByb2Nlc3M6OmRpZENy
ZWF0ZURvd25sb2FkKCkKLXsKLSAgICBkaXNhYmxlVGVybWluYXRpb24oKTsKLX0KLQotdm9pZCBX
ZWJQcm9jZXNzOjpkaWREZXN0cm95RG93bmxvYWQoKQotewotICAgIGVuYWJsZVRlcm1pbmF0aW9u
KCk7Ci19Ci0KLUlQQzo6Q29ubmVjdGlvbiogV2ViUHJvY2Vzczo6ZG93bmxvYWRQcm94eUNvbm5l
Y3Rpb24oKQotewotICAgIHJldHVybiBwYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpOwotfQotCi1B
dXRoZW50aWNhdGlvbk1hbmFnZXImIFdlYlByb2Nlc3M6OmRvd25sb2Fkc0F1dGhlbnRpY2F0aW9u
TWFuYWdlcigpCi17Ci0gICAgcmV0dXJuICpzdXBwbGVtZW50PEF1dGhlbnRpY2F0aW9uTWFuYWdl
cj4oKTsKLX0KLQogdm9pZCBXZWJQcm9jZXNzOjppbml0aWFsaXplV2ViUHJvY2VzcyhXZWJQcm9j
ZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJiYgcGFyYW1ldGVycykKIHsKICAgICBBU1NFUlQobV9wYWdl
TWFwLmlzRW1wdHkoKSk7CiAKLSAgICBtX3VzZXNOZXR3b3JrUHJvY2VzcyA9IHBhcmFtZXRlcnMu
dXNlc05ldHdvcmtQcm9jZXNzOwotCiAjaWYgT1MoTElOVVgpCiAgICAgV2ViQ29yZTo6TWVtb3J5
UHJlc3N1cmVIYW5kbGVyOjpSZWxpZWZMb2dnZXI6OnNldExvZ2dpbmdFbmFibGVkKHBhcmFtZXRl
cnMuc2hvdWxkRW5hYmxlTWVtb3J5UHJlc3N1cmVSZWxpZWZMb2dnaW5nKTsKICNlbmRpZgpAQCAt
MzUyLDggKzMyOSw3IEBAIHZvaWQgV2ViUHJvY2Vzczo6aW5pdGlhbGl6ZVdlYlByb2Nlc3MoV2UK
ICAgICBlbnN1cmVOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oKTsKIAogI2lmIFBMQVRGT1JNKENP
Q09BKQotICAgIGlmICh1c2VzTmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgQ29va2llU3RvcmFn
ZVNoaW06OnNpbmdsZXRvbigpLmluaXRpYWxpemUoKTsKKyAgICBDb29raWVTdG9yYWdlU2hpbTo6
c2luZ2xldG9uKCkuaW5pdGlhbGl6ZSgpOwogI2VuZGlmCiAgICAgc2V0VGVybWluYXRpb25UaW1l
b3V0KHBhcmFtZXRlcnMudGVybWluYXRpb25UaW1lb3V0KTsKIApAQCAtMzg3LDkgKzM2Myw2IEBA
IHZvaWQgV2ViUHJvY2Vzczo6aW5pdGlhbGl6ZVdlYlByb2Nlc3MoV2UKIAogdm9pZCBXZWJQcm9j
ZXNzOjplbnN1cmVOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oKQogewotICAgIGlmICghbV91c2Vz
TmV0d29ya1Byb2Nlc3MpCi0gICAgICAgIHJldHVybjsKLQogICAgIGlmIChtX25ldHdvcmtQcm9j
ZXNzQ29ubmVjdGlvbikKICAgICAgICAgcmV0dXJuOwogCkBAIC00OTgsMTQgKzQ3MSw2IEBAIHZv
aWQgV2ViUHJvY2Vzczo6ZGVzdHJveVByaXZhdGVCcm93c2luZ1MKICNlbmRpZgogfQogCi1Eb3du
bG9hZE1hbmFnZXImIFdlYlByb2Nlc3M6OmRvd25sb2FkTWFuYWdlcigpCi17Ci0gICAgQVNTRVJU
KCF1c2VzTmV0d29ya1Byb2Nlc3MoKSk7Ci0KLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8RG93
bmxvYWRNYW5hZ2VyPiBkb3dubG9hZE1hbmFnZXIodGhpcyk7Ci0gICAgcmV0dXJuIGRvd25sb2Fk
TWFuYWdlcjsKLX0KLQogI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQogUGx1Z2luUHJv
Y2Vzc0Nvbm5lY3Rpb25NYW5hZ2VyJiBXZWJQcm9jZXNzOjpwbHVnaW5Qcm9jZXNzQ29ubmVjdGlv
bk1hbmFnZXIoKQogewpAQCAtNTY4LDcgKzUzMyw2IEBAIHZvaWQgV2ViUHJvY2Vzczo6cmVtb3Zl
V2ViUGFnZSh1aW50NjRfdCAKIGJvb2wgV2ViUHJvY2Vzczo6c2hvdWxkVGVybWluYXRlKCkKIHsK
ICAgICBBU1NFUlQobV9wYWdlTWFwLmlzRW1wdHkoKSk7Ci0gICAgQVNTRVJUKHVzZXNOZXR3b3Jr
UHJvY2VzcygpIHx8ICFkb3dubG9hZE1hbmFnZXIoKS5pc0Rvd25sb2FkaW5nKCkpOwogCiAgICAg
Ly8gRklYTUU6IHRoZSBTaG91bGRUZXJtaW5hdGUgbWVzc2FnZSBzaG91bGQgYWxzbyBzZW5kIHRl
cm1pbmF0aW9uIHBhcmFtZXRlcnMsIHN1Y2ggYXMgYW55IHNlc3Npb24gY29va2llcyB0aGF0IG5l
ZWQgdG8gYmUgcHJlc2VydmVkLgogICAgIGJvb2wgc2hvdWxkVGVybWluYXRlID0gZmFsc2U7CkBA
IC0xMDE3LDE1ICs5ODEsOCBAQCB2b2lkIFdlYlByb2Nlc3M6OnNldEluamVjdGVkQnVuZGxlUGFy
YW1lCiAgICAgaW5qZWN0ZWRCdW5kbGUtPnNldEJ1bmRsZVBhcmFtZXRlcnModmFsdWUpOwogfQog
Ci1ib29sIFdlYlByb2Nlc3M6OnVzZXNOZXR3b3JrUHJvY2VzcygpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIG1fdXNlc05ldHdvcmtQcm9jZXNzOwotfQotCiBOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24q
IFdlYlByb2Nlc3M6Om5ldHdvcmtDb25uZWN0aW9uKCkKIHsKLSAgICBBU1NFUlQobV91c2VzTmV0
d29ya1Byb2Nlc3MpOwotCiAgICAgLy8gSWYgd2UndmUgbG9zdCBvdXIgY29ubmVjdGlvbiB0byB0
aGUgbmV0d29yayBwcm9jZXNzIChlLmcuIGl0IGNyYXNoZWQpIHRyeSB0byByZS1lc3RhYmxpc2gg
aXQuCiAgICAgaWYgKCFtX25ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbikKICAgICAgICAgZW5zdXJl
TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKCk7CkBAIC0xMDk0LDI3ICsxMDUxLDYgQEAgdm9pZCBX
ZWJQcm9jZXNzOjplbnN1cmVXZWJUb0RhdGFiYXNlUHJvYwogCiAjZW5kaWYgLy8gRU5BQkxFRChE
QVRBQkFTRV9QUk9DRVNTKQogCi12b2lkIFdlYlByb2Nlc3M6OmRvd25sb2FkUmVxdWVzdChTZXNz
aW9uSUQgc2Vzc2lvbklELCB1aW50NjRfdCBkb3dubG9hZElELCB1aW50NjRfdCBpbml0aWF0aW5n
UGFnZUlELCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCi17Ci0gICAgV2ViUGFnZSog
aW5pdGlhdGluZ1BhZ2UgPSBpbml0aWF0aW5nUGFnZUlEID8gd2ViUGFnZShpbml0aWF0aW5nUGFn
ZUlEKSA6IDA7Ci0KLSAgICBSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdFdpdGhPcmlnaW5hbFVSTCA9
IHJlcXVlc3Q7Ci0gICAgaWYgKGluaXRpYXRpbmdQYWdlKQotICAgICAgICBpbml0aWF0aW5nUGFn
ZS0+bWFpbkZyYW1lKCktPmxvYWRlcigpLnNldE9yaWdpbmFsVVJMRm9yRG93bmxvYWRSZXF1ZXN0
KHJlcXVlc3RXaXRoT3JpZ2luYWxVUkwpOwotCi0gICAgZG93bmxvYWRNYW5hZ2VyKCkuc3RhcnRE
b3dubG9hZChzZXNzaW9uSUQsIGRvd25sb2FkSUQsIHJlcXVlc3RXaXRoT3JpZ2luYWxVUkwpOwot
fQotCi12b2lkIFdlYlByb2Nlc3M6OnJlc3VtZURvd25sb2FkKHVpbnQ2NF90IGRvd25sb2FkSUQs
IGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYgcmVzdW1lRGF0YSwgY29uc3QgU3RyaW5nJiBwYXRo
LCBjb25zdCBXZWJLaXQ6OlNhbmRib3hFeHRlbnNpb246OkhhbmRsZSYgc2FuZGJveEV4dGVuc2lv
bkhhbmRsZSkKLXsKLSAgICBkb3dubG9hZE1hbmFnZXIoKS5yZXN1bWVEb3dubG9hZChkb3dubG9h
ZElELCByZXN1bWVEYXRhLCBwYXRoLCBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlKTsKLX0KLQotdm9p
ZCBXZWJQcm9jZXNzOjpjYW5jZWxEb3dubG9hZCh1aW50NjRfdCBkb3dubG9hZElEKQotewotICAg
IGRvd25sb2FkTWFuYWdlcigpLmNhbmNlbERvd25sb2FkKGRvd25sb2FkSUQpOwotfQotCiB2b2lk
IFdlYlByb2Nlc3M6OnNldEVuaGFuY2VkQWNjZXNzaWJpbGl0eShib29sIGZsYWcpCiB7CiAgICAg
V2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6c2V0RW5oYW5jZWRVc2VySW50ZXJmYWNlQWNjZXNzaWJp
bGl0eShmbGFnKTsKQEAgLTE0NTYsMTYgKzEzOTIsMTIgQEAgdm9pZCBXZWJQcm9jZXNzOjpwcmVm
ZXRjaEROUyhjb25zdCBTdHJpbgogICAgIGlmIChob3N0bmFtZS5pc0VtcHR5KCkpCiAgICAgICAg
IHJldHVybjsKIAotICAgIGlmICh1c2VzTmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICBpZiAo
bV9kbnNQcmVmZXRjaGVkSG9zdHMuYWRkKGhvc3RuYW1lKS5pc05ld0VudHJ5KQotICAgICAgICAg
ICAgbmV0d29ya0Nvbm5lY3Rpb24oKS0+Y29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpOZXR3
b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6UHJlZmV0Y2hETlMoaG9zdG5hbWUpLCAwKTsKLSAg
ICAgICAgLy8gVGhlIEROUyBwcmVmZXRjaGVkIGhvc3RzIGNhY2hlIGlzIG9ubHkgdG8gYXZvaWQg
YXNraW5nIGZvciB0aGUgc2FtZSBob3N0cyB0b28gbWFueSB0aW1lcwotICAgICAgICAvLyBpbiBh
IHZlcnkgc2hvcnQgcGVyaW9kIG9mIHRpbWUsIHByb2R1Y2luZyBhIGxvdCBvZiBJUEMgdHJhZmZp
Yy4gU28gd2UgY2xlYXIgdGhpcyBjYWNoZSBhZnRlcgotICAgICAgICAvLyBzb21lIHRpbWUgb2Yg
bm8gRE5TIHJlcXVlc3RzLgotICAgICAgICBtX2Ruc1ByZWZldGNoSHlzdGVyZXJpcy5pbXB1bHNl
KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgV2ViQ29yZTo6cHJlZmV0Y2hETlMoaG9z
dG5hbWUpOworICAgIGlmIChtX2Ruc1ByZWZldGNoZWRIb3N0cy5hZGQoaG9zdG5hbWUpLmlzTmV3
RW50cnkpCisgICAgICAgIG5ldHdvcmtDb25uZWN0aW9uKCktPmNvbm5lY3Rpb24oKS0+c2VuZChN
ZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OlByZWZldGNoRE5TKGhvc3Ru
YW1lKSwgMCk7CisgICAgLy8gVGhlIEROUyBwcmVmZXRjaGVkIGhvc3RzIGNhY2hlIGlzIG9ubHkg
dG8gYXZvaWQgYXNraW5nIGZvciB0aGUgc2FtZSBob3N0cyB0b28gbWFueSB0aW1lcworICAgIC8v
IGluIGEgdmVyeSBzaG9ydCBwZXJpb2Qgb2YgdGltZSwgcHJvZHVjaW5nIGEgbG90IG9mIElQQyB0
cmFmZmljLiBTbyB3ZSBjbGVhciB0aGlzIGNhY2hlIGFmdGVyCisgICAgLy8gc29tZSB0aW1lIG9m
IG5vIEROUyByZXF1ZXN0cy4KKyAgICBtX2Ruc1ByZWZldGNoSHlzdGVyZXJpcy5pbXB1bHNlKCk7
CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQcm9jZXNzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQcm9jZXNzLmgJKHJldmlzaW9uIDE5Mjc1MykKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUHJvY2Vzcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw2IEBACiAKICNp
bmNsdWRlICJDYWNoZU1vZGVsLmgiCiAjaW5jbHVkZSAiQ2hpbGRQcm9jZXNzLmgiCi0jaW5jbHVk
ZSAiRG93bmxvYWRNYW5hZ2VyLmgiCiAjaW5jbHVkZSAiRHJhd2luZ0FyZWEuaCIKICNpbmNsdWRl
ICJQbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbk1hbmFnZXIuaCIKICNpbmNsdWRlICJSZXNvdXJjZUNh
Y2hlc1RvQ2xlYXIuaCIKQEAgLTcxLDcgKzcwLDYgQEAgc3RydWN0IFNlY3VyaXR5T3JpZ2luRGF0
YTsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLWNsYXNzIERvd25sb2FkTWFuYWdlcjsKIGNsYXNz
IEV2ZW50RGlzcGF0Y2hlcjsKIGNsYXNzIEluamVjdGVkQnVuZGxlOwogY2xhc3MgTmV0d29ya1By
b2Nlc3NDb25uZWN0aW9uOwpAQCAtOTMsOCArOTEsNyBAQCBzdHJ1Y3QgV2ViUHJvY2Vzc0NyZWF0
aW9uUGFyYW1ldGVyczsKIGNsYXNzIFdlYlRvRGF0YWJhc2VQcm9jZXNzQ29ubmVjdGlvbjsKICNl
bmRpZgogCi1jbGFzcyBXZWJQcm9jZXNzIDogcHVibGljIENoaWxkUHJvY2VzcywgcHJpdmF0ZSBE
b3dubG9hZE1hbmFnZXI6OkNsaWVudCB7Ci0gICAgZnJpZW5kIGNsYXNzIE5ldmVyRGVzdHJveWVk
PERvd25sb2FkTWFuYWdlcj47CitjbGFzcyBXZWJQcm9jZXNzIDogcHVibGljIENoaWxkUHJvY2Vz
cyB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFdlYlByb2Nlc3MmIHNpbmdsZXRvbigpOwogCkBAIC0x
NDQsNyArMTQxLDYgQEAgcHVibGljOgogI2VuZGlmCiAgICAgCiAgICAgY29uc3QgVGV4dENoZWNr
ZXJTdGF0ZSYgdGV4dENoZWNrZXJTdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dENoZWNrZXJT
dGF0ZTsgfQotICAgIERvd25sb2FkTWFuYWdlciYgZG93bmxvYWRNYW5hZ2VyKCk7CiAKICAgICB2
b2lkIGNsZWFyUmVzb3VyY2VDYWNoZXMoUmVzb3VyY2VDYWNoZXNUb0NsZWFyID0gQWxsUmVzb3Vy
Y2VDYWNoZXMpOwogICAgIApAQCAtMTU0LDggKzE1MCw2IEBAIHB1YmxpYzoKIAogICAgIEV2ZW50
RGlzcGF0Y2hlciYgZXZlbnREaXNwYXRjaGVyKCkgeyByZXR1cm4gKm1fZXZlbnREaXNwYXRjaGVy
OyB9CiAKLSAgICBib29sIHVzZXNOZXR3b3JrUHJvY2VzcygpIGNvbnN0OwotCiAgICAgTmV0d29y
a1Byb2Nlc3NDb25uZWN0aW9uKiBuZXR3b3JrQ29ubmVjdGlvbigpOwogICAgIHZvaWQgbmV0d29y
a1Byb2Nlc3NDb25uZWN0aW9uQ2xvc2VkKE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbiopOwogICAg
IFdlYlJlc291cmNlTG9hZFNjaGVkdWxlciYgd2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyKCk7CkBA
IC0xODEsMTAgKzE3NSw2IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgdXBkYXRlQWN0aXZlUGFnZXMo
KTsKIAotI2lmIFVTRShTT1VQKQotICAgIHZvaWQgYWxsb3dTcGVjaWZpY0hUVFBTQ2VydGlmaWNh
dGVGb3JIb3N0KGNvbnN0IFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbyYsIGNvbnN0IFN0cmluZyYg
aG9zdCk7Ci0jZW5kaWYKLQogICAgIHZvaWQgcHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseShi
b29sJiBoYW5kbGVkKTsKICAgICB2b2lkIHByZXBhcmVUb1N1c3BlbmQoKTsKICAgICB2b2lkIGNh
bmNlbFByZXBhcmVUb1N1c3BlbmQoKTsKQEAgLTIxNywxMiArMjA3LDYgQEAgcHJpdmF0ZToKICAg
ICBXZWJQcm9jZXNzKCk7CiAgICAgfldlYlByb2Nlc3MoKTsKIAotICAgIC8vIERvd25sb2FkTWFu
YWdlcjo6Q2xpZW50LgotICAgIHZpcnR1YWwgdm9pZCBkaWRDcmVhdGVEb3dubG9hZCgpIG92ZXJy
aWRlOwotICAgIHZpcnR1YWwgdm9pZCBkaWREZXN0cm95RG93bmxvYWQoKSBvdmVycmlkZTsKLSAg
ICB2aXJ0dWFsIElQQzo6Q29ubmVjdGlvbiogZG93bmxvYWRQcm94eUNvbm5lY3Rpb24oKSBvdmVy
cmlkZTsKLSAgICB2aXJ0dWFsIEF1dGhlbnRpY2F0aW9uTWFuYWdlciYgZG93bmxvYWRzQXV0aGVu
dGljYXRpb25NYW5hZ2VyKCkgb3ZlcnJpZGU7Ci0KICAgICB2b2lkIGluaXRpYWxpemVXZWJQcm9j
ZXNzKFdlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmJik7CiAgICAgdm9pZCBwbGF0Zm9ybUlu
aXRpYWxpemVXZWJQcm9jZXNzKFdlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmJik7CiAKQEAg
LTI1OCwxMCArMjQyLDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIHN0YXJ0TWVtb3J5U2FtcGxlcihj
b25zdCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUmLCBjb25zdCBTdHJpbmcmLCBjb25zdCBkb3Vi
bGUpOwogICAgIHZvaWQgc3RvcE1lbW9yeVNhbXBsZXIoKTsKIAotICAgIHZvaWQgZG93bmxvYWRS
ZXF1ZXN0KFdlYkNvcmU6OlNlc3Npb25JRCwgdWludDY0X3QgZG93bmxvYWRJRCwgdWludDY0X3Qg
aW5pdGlhdGluZ1BhZ2VJRCwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Jik7Ci0gICAg
dm9pZCByZXN1bWVEb3dubG9hZCh1aW50NjRfdCBkb3dubG9hZElELCBjb25zdCBJUEM6OkRhdGFS
ZWZlcmVuY2UmIHJlc3VtZURhdGEsIGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgU2FuZGJveEV4
dGVuc2lvbjo6SGFuZGxlJik7Ci0gICAgdm9pZCBjYW5jZWxEb3dubG9hZCh1aW50NjRfdCBkb3du
bG9hZElEKTsKLQogICAgIHZvaWQgc2V0VGV4dENoZWNrZXJTdGF0ZShjb25zdCBUZXh0Q2hlY2tl
clN0YXRlJik7CiAgICAgCiAgICAgdm9pZCBnZXRXZWJDb3JlU3RhdGlzdGljcyh1aW50NjRfdCBj
YWxsYmFja0lEKTsKQEAgLTI3NiwxMCArMjU2LDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIGRlbGV0
ZVdlYnNpdGVEYXRhKFdlYkNvcmU6OlNlc3Npb25JRCwgdWludDY0X3Qgd2Vic2l0ZURhdGFUeXBl
cywgc3RkOjpjaHJvbm86OnN5c3RlbV9jbG9jazo6dGltZV9wb2ludCBtb2RpZmllZFNpbmNlLCB1
aW50NjRfdCBjYWxsYmFja0lEKTsKICAgICB2b2lkIGRlbGV0ZVdlYnNpdGVEYXRhRm9yT3JpZ2lu
cyhXZWJDb3JlOjpTZXNzaW9uSUQsIHVpbnQ2NF90IHdlYnNpdGVEYXRhVHlwZXMsIGNvbnN0IFZl
Y3RvcjxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGE+JiBvcmlnaW5zLCB1aW50NjRfdCBjYWxs
YmFja0lEKTsKIAotI2lmIFVTRShTT1VQKQotICAgIHZvaWQgc2V0SWdub3JlVExTRXJyb3JzKGJv
b2wpOwotI2VuZGlmCi0KICAgICB2b2lkIHNldE1lbW9yeUNhY2hlRGlzYWJsZWQoYm9vbCk7CiAK
ICNpZiBFTkFCTEUoU0VSVklDRV9DT05UUk9MUykKQEAgLTM1OCw3ICszMzQsNiBAQCBwcml2YXRl
OgogCiAgICAgdm9pZCBlbnN1cmVOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oKTsKICAgICBSZWZQ
dHI8TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uPiBtX25ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbjsK
LSAgICBib29sIG1fdXNlc05ldHdvcmtQcm9jZXNzOwogICAgIFdlYlJlc291cmNlTG9hZFNjaGVk
dWxlciogbV93ZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI7CiAgICAgSGFzaFNldDxTdHJpbmc+IG1f
ZG5zUHJlZmV0Y2hlZEhvc3RzOwogICAgIFdlYkNvcmU6Okh5c3RlcmVzaXNBY3Rpdml0eSBtX2Ru
c1ByZWZldGNoSHlzdGVyZXJpczsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UHJvY2Vzcy5tZXNzYWdlcy5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlByb2Nlc3MubWVzc2FnZXMuaW4JKHJldmlzaW9uIDE5Mjc1MykKKysrIFNvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbgkod29ya2luZyBjb3B5KQpA
QCAtNDQsOSArNDQsNiBAQCBtZXNzYWdlcyAtPiBXZWJQcm9jZXNzIExlZ2FjeVJlY2VpdmVyIHsK
ICAgICBTZXRTaG91bGRVc2VGb250U21vb3RoaW5nKGJvb2wgdXNlRm9udFNtb290aGluZykKICAg
ICBVc2VyUHJlZmVycmVkTGFuZ3VhZ2VzQ2hhbmdlZChWZWN0b3I8U3RyaW5nPiBsYW5ndWFnZXMp
CiAgICAgRnVsbEtleWJvYXJkQWNjZXNzTW9kZUNoYW5nZWQoYm9vbCBmdWxsS2V5Ym9hcmRBY2Nl
c3NFbmFibGVkKQotI2lmIFVTRShTT1VQKQotICAgIFNldElnbm9yZVRMU0Vycm9ycyhib29sIGln
bm9yZVRMU0Vycm9ycykKLSNlbmRpZgogCiAgICAgLy8gTGVnYWN5IHByaXZhdGUgYnJvd3Npbmcg
c2Vzc2lvbiBpcyBwZXIgcHJvY2Vzcy4gSW5kaXZpZHVhbCBwYWdlcyBvciBwYWdlIGdyb3VwcyBt
YXkgdXNlIHRoZSBwcml2YXRlIHNlc3Npb24gb3IgdGhlIGRlZmF1bHQgb25lIGFzIGFwcHJvcHJp
YXRlLgogICAgIEVuc3VyZVByaXZhdGVCcm93c2luZ1Nlc3Npb24oV2ViQ29yZTo6U2Vzc2lvbklE
IHNlc3Npb25JRCkKQEAgLTYyLDEyICs1OSw2IEBAIG1lc3NhZ2VzIC0+IFdlYlByb2Nlc3MgTGVn
YWN5UmVjZWl2ZXIgewogICAgIHZvaWQgU3RhcnRNZW1vcnlTYW1wbGVyKFdlYktpdDo6U2FuZGJv
eEV4dGVuc2lvbjo6SGFuZGxlIHNhbXBsZUxvZ0ZpbGVIYW5kbGUsIFN0cmluZyBzYW1wbGVMb2dG
aWxlUGF0aCwgZG91YmxlIGludGVydmFsKTsKICAgICB2b2lkIFN0b3BNZW1vcnlTYW1wbGVyKCk7
CiAKLSAgICAjIERvd25sb2Fkcy4gVGhpcyBzaG91bGQgcmVhbGx5IGJlIGluIGEgRG93bmxvYWQu
bWVzc2FnZXMuaW4sIGJ1dCBpdCBzZWVtZWQgdW5uZWNlc3NhcnkgdG8gY3JlYXRlIGEgbmV3IGZp
bGUganVzdCBmb3IKLSAgICAjIHRocmVlIG1lc3NhZ2VzLgotICAgIERvd25sb2FkUmVxdWVzdChX
ZWJDb3JlOjpTZXNzaW9uSUQgc2Vzc2lvbklELCB1aW50NjRfdCBkb3dubG9hZElELCB1aW50NjRf
dCBpbml0aWF0aW5nUGFnZUlELCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdCkKLSAg
ICBSZXN1bWVEb3dubG9hZCh1aW50NjRfdCBkb3dubG9hZElELCBJUEM6OkRhdGFSZWZlcmVuY2Ug
cmVzdW1lRGF0YSwgU3RyaW5nIHBhdGgsIFdlYktpdDo6U2FuZGJveEV4dGVuc2lvbjo6SGFuZGxl
IHNhbmRib3hFeHRlbnNpb25IYW5kbGUpCi0gICAgQ2FuY2VsRG93bmxvYWQodWludDY0X3QgZG93
bmxvYWRJRCkKLQogICAgIFNldFRleHRDaGVja2VyU3RhdGUoc3RydWN0IFdlYktpdDo6VGV4dENo
ZWNrZXJTdGF0ZSB0ZXh0Q2hlY2tlclN0YXRlKQogCiAgICAgU2V0RW5oYW5jZWRBY2Nlc3NpYmls
aXR5KGJvb2wgZmxhZykKQEAgLTkxLDEwICs4Miw2IEBAIG1lc3NhZ2VzIC0+IFdlYlByb2Nlc3Mg
TGVnYWN5UmVjZWl2ZXIgewogICAgIFNldFFPUyhpbnQgbGF0ZW5jeVFPUywgaW50IHRocm91Z2hw
dXRRT1MpCiAjZW5kaWYKIAotI2lmIFVTRShTT1VQKQotICAgIEFsbG93U3BlY2lmaWNIVFRQU0Nl
cnRpZmljYXRlRm9ySG9zdChXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8gY2VydGlmaWNhdGUsIFN0
cmluZyBob3N0KQotI2VuZGlmCi0KICAgICBTZXRNZW1vcnlDYWNoZURpc2FibGVkKGJvb2wgZGlz
YWJsZWQpOwogCiAjaWYgRU5BQkxFKFNFUlZJQ0VfQ09OVFJPTFMpCkluZGV4OiBTb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL0ZpbGVBUEkvQmxvYlJlZ2lzdHJ5UHJveHkuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvRmlsZUFQSS9CbG9iUmVnaXN0cnlQcm94eS5j
cHAJKHJldmlzaW9uIDE5Mjc1MykKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvRmlsZUFQ
SS9CbG9iUmVnaXN0cnlQcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDggKzM4LDYgQEAg
bmFtZXNwYWNlIFdlYktpdCB7CiAKIHZvaWQgQmxvYlJlZ2lzdHJ5UHJveHk6OnJlZ2lzdGVyRmls
ZUJsb2JVUkwoY29uc3QgV2ViQ29yZTo6VVJMJiB1cmwsIFBhc3NSZWZQdHI8QmxvYkRhdGFGaWxl
UmVmZXJlbmNlPiBmaWxlLCBjb25zdCBTdHJpbmcmIGNvbnRlbnRUeXBlKQogewotICAgIEFTU0VS
VChXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS51c2VzTmV0d29ya1Byb2Nlc3MoKSk7Ci0KICAgICBT
YW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgZXh0ZW5zaW9uSGFuZGxlOwogCiAgICAgLy8gRmlsZSBw
YXRoIGNhbiBiZSBlbXB0eSB3aGVuIHN1Ym1pdHRpbmcgYSBmb3JtIGZpbGUgaW5wdXQgd2l0aG91
dCBhIGZpbGUsIHNlZSBidWcgMTExNzc4LgpAQCAtNTEsMzYgKzQ5LDI2IEBAIHZvaWQgQmxvYlJl
Z2lzdHJ5UHJveHk6OnJlZ2lzdGVyRmlsZUJsb2IKIAogdm9pZCBCbG9iUmVnaXN0cnlQcm94eTo6
cmVnaXN0ZXJCbG9iVVJMKGNvbnN0IFVSTCYgdXJsLCBWZWN0b3I8QmxvYlBhcnQ+IGJsb2JQYXJ0
cywgY29uc3QgU3RyaW5nJiBjb250ZW50VHlwZSkKIHsKLSAgICBBU1NFUlQoV2ViUHJvY2Vzczo6
c2luZ2xldG9uKCkudXNlc05ldHdvcmtQcm9jZXNzKCkpOwotCiAgICAgV2ViUHJvY2Vzczo6c2lu
Z2xldG9uKCkubmV0d29ya0Nvbm5lY3Rpb24oKS0+Y29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2Vz
OjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6UmVnaXN0ZXJCbG9iVVJMKHVybCwgYmxv
YlBhcnRzLCBjb250ZW50VHlwZSksIDApOwogfQogCiB2b2lkIEJsb2JSZWdpc3RyeVByb3h5Ojpy
ZWdpc3RlckJsb2JVUkwoY29uc3QgVVJMJiB1cmwsIGNvbnN0IFVSTCYgc3JjVVJMKQogewotICAg
IEFTU0VSVChXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS51c2VzTmV0d29ya1Byb2Nlc3MoKSk7Ci0K
ICAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5uZXR3b3JrQ29ubmVjdGlvbigpLT5jb25uZWN0
aW9uKCktPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpSZWdp
c3RlckJsb2JVUkxGcm9tVVJMKHVybCwgc3JjVVJMKSwgMCk7CiB9CiAKIHZvaWQgQmxvYlJlZ2lz
dHJ5UHJveHk6OnVucmVnaXN0ZXJCbG9iVVJMKGNvbnN0IFVSTCYgdXJsKQogewotICAgIEFTU0VS
VChXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS51c2VzTmV0d29ya1Byb2Nlc3MoKSk7Ci0KICAgICBX
ZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5uZXR3b3JrQ29ubmVjdGlvbigpLT5jb25uZWN0aW9uKCkt
PnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpVbnJlZ2lzdGVy
QmxvYlVSTCh1cmwpLCAwKTsKIH0KIAogdm9pZCBCbG9iUmVnaXN0cnlQcm94eTo6cmVnaXN0ZXJC
bG9iVVJMRm9yU2xpY2UoY29uc3QgVVJMJiB1cmwsIGNvbnN0IFVSTCYgc3JjVVJMLCBsb25nIGxv
bmcgc3RhcnQsIGxvbmcgbG9uZyBlbmQpCiB7Ci0gICAgQVNTRVJUKFdlYlByb2Nlc3M6OnNpbmds
ZXRvbigpLnVzZXNOZXR3b3JrUHJvY2VzcygpKTsKLQogICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRv
bigpLm5ldHdvcmtDb25uZWN0aW9uKCktPmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6TmV0
d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OlJlZ2lzdGVyQmxvYlVSTEZvclNsaWNlKHVybCwg
c3JjVVJMLCBzdGFydCwgZW5kKSwgMCk7CiB9CiAKIHVuc2lnbmVkIGxvbmcgbG9uZyBCbG9iUmVn
aXN0cnlQcm94eTo6YmxvYlNpemUoY29uc3QgVVJMJiB1cmwpCiB7Ci0gICAgQVNTRVJUKFdlYlBy
b2Nlc3M6OnNpbmdsZXRvbigpLnVzZXNOZXR3b3JrUHJvY2VzcygpKTsKLQogICAgIHVpbnQ2NF90
IHJlc3VsdFNpemU7CiAgICAgaWYgKCFXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5uZXR3b3JrQ29u
bmVjdGlvbigpLT5jb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpOZXR3b3JrQ29ubmVj
dGlvblRvV2ViUHJvY2Vzczo6QmxvYlNpemUodXJsKSwgTWVzc2FnZXM6Ok5ldHdvcmtDb25uZWN0
aW9uVG9XZWJQcm9jZXNzOjpCbG9iU2l6ZTo6UmVwbHkocmVzdWx0U2l6ZSksIDApKQogICAgICAg
ICByZXR1cm4gMDsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBv
cnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5jcHAJKHJl
dmlzaW9uIDE5Mjc1MykKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBv
cnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA5LDEwMSAr
MTA5LDU0IEBAIFBsdWdpblN0cmF0ZWd5KiBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmMKIAogU3Ry
aW5nIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6Y29va2llc0ZvckRPTShjb25zdCBOZXR3b3JrU3Rv
cmFnZVNlc3Npb24mIHNlc3Npb24sIGNvbnN0IFVSTCYgZmlyc3RQYXJ0eSwgY29uc3QgVVJMJiB1
cmwpCiB7Ci0gICAgYXV0byYgd2ViUHJvY2VzcyA9IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpOwot
ICAgIGlmICh3ZWJQcm9jZXNzLnVzZXNOZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgIFN0cmlu
ZyByZXN1bHQ7Ci0gICAgICAgIGlmICghd2ViUHJvY2Vzcy5uZXR3b3JrQ29ubmVjdGlvbigpLT5j
b25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJv
Y2Vzczo6Q29va2llc0ZvckRPTShTZXNzaW9uVHJhY2tlcjo6c2Vzc2lvbklEKHNlc3Npb24pLCBm
aXJzdFBhcnR5LCB1cmwpLCBNZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6
OkNvb2tpZXNGb3JET006OlJlcGx5KHJlc3VsdCksIDApKQotICAgICAgICAgICAgcmV0dXJuIFN0
cmluZygpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIHJldHVybiBXZWJD
b3JlOjpjb29raWVzRm9yRE9NKHNlc3Npb24sIGZpcnN0UGFydHksIHVybCk7CisgICAgU3RyaW5n
IHJlc3VsdDsKKyAgICBpZiAoIVdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLm5ldHdvcmtDb25uZWN0
aW9uKCktPmNvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6Ok5ldHdvcmtDb25uZWN0aW9u
VG9XZWJQcm9jZXNzOjpDb29raWVzRm9yRE9NKFNlc3Npb25UcmFja2VyOjpzZXNzaW9uSUQoc2Vz
c2lvbiksIGZpcnN0UGFydHksIHVybCksIE1lc3NhZ2VzOjpOZXR3b3JrQ29ubmVjdGlvblRvV2Vi
UHJvY2Vzczo6Q29va2llc0ZvckRPTTo6UmVwbHkocmVzdWx0KSwgMCkpCisgICAgICAgIHJldHVy
biBTdHJpbmcoKTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiB2b2lkIFdlYlBsYXRmb3JtU3Ry
YXRlZ2llczo6c2V0Q29va2llc0Zyb21ET00oY29uc3QgTmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBz
ZXNzaW9uLCBjb25zdCBVUkwmIGZpcnN0UGFydHksIGNvbnN0IFVSTCYgdXJsLCBjb25zdCBTdHJp
bmcmIGNvb2tpZVN0cmluZykKIHsKLSAgICBhdXRvJiB3ZWJQcm9jZXNzID0gV2ViUHJvY2Vzczo6
c2luZ2xldG9uKCk7Ci0gICAgaWYgKHdlYlByb2Nlc3MudXNlc05ldHdvcmtQcm9jZXNzKCkpIHsK
LSAgICAgICAgd2ViUHJvY2Vzcy5uZXR3b3JrQ29ubmVjdGlvbigpLT5jb25uZWN0aW9uKCktPnNl
bmQoTWVzc2FnZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpTZXRDb29raWVzRnJv
bURPTShTZXNzaW9uVHJhY2tlcjo6c2Vzc2lvbklEKHNlc3Npb24pLCBmaXJzdFBhcnR5LCB1cmws
IGNvb2tpZVN0cmluZyksIDApOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgV2ViQ29y
ZTo6c2V0Q29va2llc0Zyb21ET00oc2Vzc2lvbiwgZmlyc3RQYXJ0eSwgdXJsLCBjb29raWVTdHJp
bmcpOworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLm5ldHdvcmtDb25uZWN0aW9uKCktPmNv
bm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6
OlNldENvb2tpZXNGcm9tRE9NKFNlc3Npb25UcmFja2VyOjpzZXNzaW9uSUQoc2Vzc2lvbiksIGZp
cnN0UGFydHksIHVybCwgY29va2llU3RyaW5nKSwgMCk7CiB9CiAKIGJvb2wgV2ViUGxhdGZvcm1T
dHJhdGVnaWVzOjpjb29raWVzRW5hYmxlZChjb25zdCBOZXR3b3JrU3RvcmFnZVNlc3Npb24mIHNl
c3Npb24sIGNvbnN0IFVSTCYgZmlyc3RQYXJ0eSwgY29uc3QgVVJMJiB1cmwpCiB7Ci0gICAgYXV0
byYgd2ViUHJvY2VzcyA9IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpOwotICAgIGlmICh3ZWJQcm9j
ZXNzLnVzZXNOZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgIGJvb2wgcmVzdWx0OwotICAgICAg
ICBpZiAoIXdlYlByb2Nlc3MubmV0d29ya0Nvbm5lY3Rpb24oKS0+Y29ubmVjdGlvbigpLT5zZW5k
U3luYyhNZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OkNvb2tpZXNFbmFi
bGVkKFNlc3Npb25UcmFja2VyOjpzZXNzaW9uSUQoc2Vzc2lvbiksIGZpcnN0UGFydHksIHVybCks
IE1lc3NhZ2VzOjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6Q29va2llc0VuYWJsZWQ6
OlJlcGx5KHJlc3VsdCksIDApKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBy
ZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIHJldHVybiBXZWJDb3JlOjpjb29raWVzRW5hYmxl
ZChzZXNzaW9uLCBmaXJzdFBhcnR5LCB1cmwpOworICAgIGJvb2wgcmVzdWx0OworICAgIGlmICgh
V2ViUHJvY2Vzczo6c2luZ2xldG9uKCkubmV0d29ya0Nvbm5lY3Rpb24oKS0+Y29ubmVjdGlvbigp
LT5zZW5kU3luYyhNZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OkNvb2tp
ZXNFbmFibGVkKFNlc3Npb25UcmFja2VyOjpzZXNzaW9uSUQoc2Vzc2lvbiksIGZpcnN0UGFydHks
IHVybCksIE1lc3NhZ2VzOjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6Q29va2llc0Vu
YWJsZWQ6OlJlcGx5KHJlc3VsdCksIDApKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0
dXJuIHJlc3VsdDsKIH0KIAogU3RyaW5nIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6Y29va2llUmVx
dWVzdEhlYWRlckZpZWxkVmFsdWUoY29uc3QgTmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBzZXNzaW9u
LCBjb25zdCBVUkwmIGZpcnN0UGFydHksIGNvbnN0IFVSTCYgdXJsKQogewotICAgIGF1dG8mIHdl
YlByb2Nlc3MgPSBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKTsKLSAgICBpZiAod2ViUHJvY2Vzcy51
c2VzTmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICBTdHJpbmcgcmVzdWx0OwotICAgICAgICBp
ZiAoIXdlYlByb2Nlc3MubmV0d29ya0Nvbm5lY3Rpb24oKS0+Y29ubmVjdGlvbigpLT5zZW5kU3lu
YyhNZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OkNvb2tpZVJlcXVlc3RI
ZWFkZXJGaWVsZFZhbHVlKFNlc3Npb25UcmFja2VyOjpzZXNzaW9uSUQoc2Vzc2lvbiksIGZpcnN0
UGFydHksIHVybCksIE1lc3NhZ2VzOjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6Q29v
a2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWU6OlJlcGx5KHJlc3VsdCksIDApKQotICAgICAgICAg
ICAgcmV0dXJuIFN0cmluZygpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAg
IHJldHVybiBXZWJDb3JlOjpjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShzZXNzaW9uLCBm
aXJzdFBhcnR5LCB1cmwpOworICAgIFN0cmluZyByZXN1bHQ7CisgICAgaWYgKCFXZWJQcm9jZXNz
OjpzaW5nbGV0b24oKS5uZXR3b3JrQ29ubmVjdGlvbigpLT5jb25uZWN0aW9uKCktPnNlbmRTeW5j
KE1lc3NhZ2VzOjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6Q29va2llUmVxdWVzdEhl
YWRlckZpZWxkVmFsdWUoU2Vzc2lvblRyYWNrZXI6OnNlc3Npb25JRChzZXNzaW9uKSwgZmlyc3RQ
YXJ0eSwgdXJsKSwgTWVzc2FnZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpDb29r
aWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZTo6UmVwbHkocmVzdWx0KSwgMCkpCisgICAgICAgIHJl
dHVybiBTdHJpbmcoKTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiBib29sIFdlYlBsYXRmb3Jt
U3RyYXRlZ2llczo6Z2V0UmF3Q29va2llcyhjb25zdCBOZXR3b3JrU3RvcmFnZVNlc3Npb24mIHNl
c3Npb24sIGNvbnN0IFVSTCYgZmlyc3RQYXJ0eSwgY29uc3QgVVJMJiB1cmwsIFZlY3RvcjxDb29r
aWU+JiByYXdDb29raWVzKQogewotICAgIGF1dG8mIHdlYlByb2Nlc3MgPSBXZWJQcm9jZXNzOjpz
aW5nbGV0b24oKTsKLSAgICBpZiAod2ViUHJvY2Vzcy51c2VzTmV0d29ya1Byb2Nlc3MoKSkgewot
ICAgICAgICBpZiAoIXdlYlByb2Nlc3MubmV0d29ya0Nvbm5lY3Rpb24oKS0+Y29ubmVjdGlvbigp
LT5zZW5kU3luYyhNZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OkdldFJh
d0Nvb2tpZXMoU2Vzc2lvblRyYWNrZXI6OnNlc3Npb25JRChzZXNzaW9uKSwgZmlyc3RQYXJ0eSwg
dXJsKSwgTWVzc2FnZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpHZXRSYXdDb29r
aWVzOjpSZXBseShyYXdDb29raWVzKSwgMCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiBXZWJDb3JlOjpnZXRSYXdD
b29raWVzKHNlc3Npb24sIGZpcnN0UGFydHksIHVybCwgcmF3Q29va2llcyk7CisgICAgaWYgKCFX
ZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5uZXR3b3JrQ29ubmVjdGlvbigpLT5jb25uZWN0aW9uKCkt
PnNlbmRTeW5jKE1lc3NhZ2VzOjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6R2V0UmF3
Q29va2llcyhTZXNzaW9uVHJhY2tlcjo6c2Vzc2lvbklEKHNlc3Npb24pLCBmaXJzdFBhcnR5LCB1
cmwpLCBNZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OkdldFJhd0Nvb2tp
ZXM6OlJlcGx5KHJhd0Nvb2tpZXMpLCAwKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJl
dHVybiB0cnVlOwogfQogCiB2b2lkIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6ZGVsZXRlQ29va2ll
KGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgc2Vzc2lvbiwgY29uc3QgVVJMJiB1cmwsIGNv
bnN0IFN0cmluZyYgY29va2llTmFtZSkKIHsKLSAgICBhdXRvJiB3ZWJQcm9jZXNzID0gV2ViUHJv
Y2Vzczo6c2luZ2xldG9uKCk7Ci0gICAgaWYgKHdlYlByb2Nlc3MudXNlc05ldHdvcmtQcm9jZXNz
KCkpIHsKLSAgICAgICAgd2ViUHJvY2Vzcy5uZXR3b3JrQ29ubmVjdGlvbigpLT5jb25uZWN0aW9u
KCktPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpEZWxldGVD
b29raWUoU2Vzc2lvblRyYWNrZXI6OnNlc3Npb25JRChzZXNzaW9uKSwgdXJsLCBjb29raWVOYW1l
KSwgMCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBXZWJDb3JlOjpkZWxldGVDb29r
aWUoc2Vzc2lvbiwgdXJsLCBjb29raWVOYW1lKTsKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24o
KS5uZXR3b3JrQ29ubmVjdGlvbigpLT5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6Ok5ldHdv
cmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpEZWxldGVDb29raWUoU2Vzc2lvblRyYWNrZXI6OnNl
c3Npb25JRChzZXNzaW9uKSwgdXJsLCBjb29raWVOYW1lKSwgMCk7CiB9CiAKIC8vIExvYWRlclN0
cmF0ZWd5CiAKIFJlc291cmNlTG9hZFNjaGVkdWxlciogV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpy
ZXNvdXJjZUxvYWRTY2hlZHVsZXIoKQogewotICAgIHN0YXRpYyBSZXNvdXJjZUxvYWRTY2hlZHVs
ZXIqIHNjaGVkdWxlcjsKLSAgICBpZiAoIXNjaGVkdWxlcikgewotICAgICAgICBhdXRvJiB3ZWJQ
cm9jZXNzID0gV2ViUHJvY2Vzczo6c2luZ2xldG9uKCk7Ci0gICAgICAgIGlmICh3ZWJQcm9jZXNz
LnVzZXNOZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgc2NoZWR1bGVyID0gJndlYlByb2Nl
c3Mud2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyKCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAg
IHNjaGVkdWxlciA9IFdlYkNvcmU6OnJlc291cmNlTG9hZFNjaGVkdWxlcigpOwotICAgIH0KLSAg
ICAKLSAgICByZXR1cm4gc2NoZWR1bGVyOworICAgIHJldHVybiAmV2ViUHJvY2Vzczo6c2luZ2xl
dG9uKCkud2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyKCk7CiB9CiAKIHZvaWQgV2ViUGxhdGZvcm1T
dHJhdGVnaWVzOjpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KE5ldHdvcmtpbmdDb250ZXh0KiBj
b250ZXh0LCB1bnNpZ25lZCBsb25nIHJlc291cmNlTG9hZElkZW50aWZpZXIsIGNvbnN0IFJlc291
cmNlUmVxdWVzdCYgcmVxdWVzdCwgU3RvcmVkQ3JlZGVudGlhbHMgc3RvcmVkQ3JlZGVudGlhbHMs
IENsaWVudENyZWRlbnRpYWxQb2xpY3kgY2xpZW50Q3JlZGVudGlhbFBvbGljeSwgUmVzb3VyY2VF
cnJvciYgZXJyb3IsIFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBWZWN0b3I8Y2hhcj4mIGRh
dGEpCiB7Ci0gICAgYXV0byYgd2ViUHJvY2VzcyA9IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpOwot
ICAgIGlmICghd2ViUHJvY2Vzcy51c2VzTmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICBMb2Fk
ZXJTdHJhdGVneTo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseShjb250ZXh0LCByZXNvdXJjZUxv
YWRJZGVudGlmaWVyLCByZXF1ZXN0LCBzdG9yZWRDcmVkZW50aWFscywgY2xpZW50Q3JlZGVudGlh
bFBvbGljeSwgZXJyb3IsIHJlc3BvbnNlLCBkYXRhKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQogICAgIFdlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQqIHdlYkNvbnRleHQgPSBzdGF0aWNfY2Fz
dDxXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0Kj4oY29udGV4dCk7CiAgICAgLy8gRklYTUU6IFNv
bWUgZW50aXRpZXMgaW4gV2ViQ29yZSB1c2UgV2ViQ29yZSdzICJFbXB0eUZyYW1lTG9hZGVyQ2xp
ZW50IiBpbnN0ZWFkIG9mIGhhdmluZyBhIHByb3BlciBXZWJGcmFtZUxvYWRlckNsaWVudC4KICAg
ICAvLyBFbXB0eUZyYW1lTG9hZGVyQ2xpZW50IHNob3VsZG4ndCBleGlzdCBhbmQgZXZlcnl0aGlu
ZyBzaG91bGQgYmUgdXNpbmcgYSBXZWJGcmFtZUxvYWRlckNsaWVudCwKQEAgLTIyNyw3ICsxODAs
NyBAQCB2b2lkIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6bG9hZFJlc291cmNlCiAKICAgICBIYW5n
RGV0ZWN0aW9uRGlzYWJsZXIgaGFuZ0RldGVjdGlvbkRpc2FibGVyOwogCi0gICAgaWYgKCF3ZWJQ
cm9jZXNzLm5ldHdvcmtDb25uZWN0aW9uKCktPmNvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2Fn
ZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpQZXJmb3JtU3luY2hyb25vdXNMb2Fk
KGxvYWRQYXJhbWV0ZXJzKSwgTWVzc2FnZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNz
OjpQZXJmb3JtU3luY2hyb25vdXNMb2FkOjpSZXBseShlcnJvciwgcmVzcG9uc2UsIGRhdGEpLCAw
KSkgeworICAgIGlmICghV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkubmV0d29ya0Nvbm5lY3Rpb24o
KS0+Y29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dl
YlByb2Nlc3M6OlBlcmZvcm1TeW5jaHJvbm91c0xvYWQobG9hZFBhcmFtZXRlcnMpLCBNZXNzYWdl
czo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OlBlcmZvcm1TeW5jaHJvbm91c0xvYWQ6
OlJlcGx5KGVycm9yLCByZXNwb25zZSwgZGF0YSksIDApKSB7CiAgICAgICAgIHJlc3BvbnNlID0g
UmVzb3VyY2VSZXNwb25zZSgpOwogICAgICAgICBlcnJvciA9IGludGVybmFsRXJyb3IocmVxdWVz
dC51cmwoKSk7CiAgICAgfQpAQCAtMjQwLDEyICsxOTMsNiBAQCB2b2lkIFdlYlBsYXRmb3JtU3Ry
YXRlZ2llczo6Y3JlYXRlUGluZ0hhCiAgICAgaWYgKCFuZXR3b3JraW5nQ29udGV4dCkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgYXV0byYgd2ViUHJvY2VzcyA9IFdlYlByb2Nlc3M6OnNpbmdsZXRv
bigpOwotICAgIGlmICghd2ViUHJvY2Vzcy51c2VzTmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAg
ICBMb2FkZXJTdHJhdGVneTo6Y3JlYXRlUGluZ0hhbmRsZShuZXR3b3JraW5nQ29udGV4dCwgcmVx
dWVzdCwgc2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCiAgICAgV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dCogd2ViQ29udGV4dCA9IHN0YXRpY19j
YXN0PFdlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQqPihuZXR3b3JraW5nQ29udGV4dCk7CiAgICAg
V2ViRnJhbWVMb2FkZXJDbGllbnQqIHdlYkZyYW1lTG9hZGVyQ2xpZW50ID0gd2ViQ29udGV4dC0+
d2ViRnJhbWVMb2FkZXJDbGllbnQoKTsKICAgICBXZWJGcmFtZSogd2ViRnJhbWUgPSB3ZWJGcmFt
ZUxvYWRlckNsaWVudCA/IHdlYkZyYW1lTG9hZGVyQ2xpZW50LT53ZWJGcmFtZSgpIDogbnVsbHB0
cjsKQEAgLTI1NywxNCArMjA0LDEyIEBAIHZvaWQgV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpjcmVh
dGVQaW5nSGEKICAgICBsb2FkUGFyYW1ldGVycy5hbGxvd1N0b3JlZENyZWRlbnRpYWxzID0gc2hv
dWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UgPyBBbGxvd1N0b3JlZENyZWRlbnRpYWxzIDogRG9Ob3RB
bGxvd1N0b3JlZENyZWRlbnRpYWxzOwogICAgIGxvYWRQYXJhbWV0ZXJzLnNob3VsZENsZWFyUmVm
ZXJyZXJPbkhUVFBTVG9IVFRQUmVkaXJlY3QgPSBuZXR3b3JraW5nQ29udGV4dC0+c2hvdWxkQ2xl
YXJSZWZlcnJlck9uSFRUUFNUb0hUVFBSZWRpcmVjdCgpOwogCi0gICAgd2ViUHJvY2Vzcy5uZXR3
b3JrQ29ubmVjdGlvbigpLT5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzOjpMb2FkUGluZyhsb2FkUGFyYW1ldGVycyksIDApOworICAgIFdl
YlByb2Nlc3M6OnNpbmdsZXRvbigpLm5ldHdvcmtDb25uZWN0aW9uKCktPmNvbm5lY3Rpb24oKS0+
c2VuZChNZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OkxvYWRQaW5nKGxv
YWRQYXJhbWV0ZXJzKSwgMCk7CiB9CiAKIEJsb2JSZWdpc3RyeSogV2ViUGxhdGZvcm1TdHJhdGVn
aWVzOjpjcmVhdGVCbG9iUmVnaXN0cnkoKQogewotICAgIGlmICghV2ViUHJvY2Vzczo6c2luZ2xl
dG9uKCkudXNlc05ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgIHJldHVybiBMb2FkZXJTdHJhdGVn
eTo6Y3JlYXRlQmxvYlJlZ2lzdHJ5KCk7Ci0gICAgcmV0dXJuIG5ldyBCbG9iUmVnaXN0cnlQcm94
eTsgICAgCisgICAgcmV0dXJuIG5ldyBCbG9iUmVnaXN0cnlQcm94eTsKIH0KIAogLy8gUGx1Z2lu
U3RyYXRlZ3kKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJGcmFt
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dl
YkZyYW1lLmNwcAkocmV2aXNpb24gMTkyNzUzKQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL1dlYkZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjU0LDIxICsyNTQsOCBA
QCB2b2lkIFdlYkZyYW1lOjpzdGFydERvd25sb2FkKGNvbnN0IFdlYkNvCiAgICAgbV9wb2xpY3lE
b3dubG9hZElEID0gMDsKIAogICAgIGF1dG8mIHdlYlByb2Nlc3MgPSBXZWJQcm9jZXNzOjpzaW5n
bGV0b24oKTsKLSNpZiBVU0UoTkVUV09SS19TRVNTSU9OKQotICAgIEFTU0VSVCh3ZWJQcm9jZXNz
LnVzZXNOZXR3b3JrUHJvY2VzcygpKTsKLSNlbmRpZgogICAgIFNlc3Npb25JRCBzZXNzaW9uSUQg
PSBwYWdlKCkgPyBwYWdlKCktPnNlc3Npb25JRCgpIDogU2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lv
bklEKCk7Ci0gICAgaWYgKHdlYlByb2Nlc3MudXNlc05ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAg
ICAgd2ViUHJvY2Vzcy5uZXR3b3JrQ29ubmVjdGlvbigpLT5jb25uZWN0aW9uKCktPnNlbmQoTWVz
c2FnZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpTdGFydERvd25sb2FkKHNlc3Np
b25JRCwgcG9saWN5RG93bmxvYWRJRCwgcmVxdWVzdCksIDApOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0jaWYgVVNFKE5FVFdPUktfU0VTU0lPTikKLSAgICAvLyBVc2luZyBORVRXT1JLX1NF
U1NJT04gcmVxdWlyZXMgdGhlIHVzZSBvZiBhIG5ldHdvcmsgcHJvY2Vzcy4KLSAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotI2Vsc2UKLSAgICB3ZWJQcm9jZXNzLmRvd25sb2FkTWFu
YWdlcigpLnN0YXJ0RG93bmxvYWQoc2Vzc2lvbklELCBwb2xpY3lEb3dubG9hZElELCByZXF1ZXN0
KTsKLSNlbmRpZgorICAgIHdlYlByb2Nlc3MubmV0d29ya0Nvbm5lY3Rpb24oKS0+Y29ubmVjdGlv
bigpLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6U3RhcnRE
b3dubG9hZChzZXNzaW9uSUQsIHBvbGljeURvd25sb2FkSUQsIHJlcXVlc3QpLCAwKTsKIH0KIAog
dm9pZCBXZWJGcmFtZTo6Y29udmVydE1haW5SZXNvdXJjZUxvYWRUb0Rvd25sb2FkKERvY3VtZW50
TG9hZGVyKiBkb2N1bWVudExvYWRlciwgU2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgUmVzb3Vy
Y2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKQEAg
LTI4MSwzNyArMjY4LDE2IEBAIHZvaWQgV2ViRnJhbWU6OmNvbnZlcnRNYWluUmVzb3VyY2VMb2Fk
VG8KICAgICBTdWJyZXNvdXJjZUxvYWRlciogbWFpblJlc291cmNlTG9hZGVyID0gZG9jdW1lbnRM
b2FkZXItPm1haW5SZXNvdXJjZUxvYWRlcigpOwogCiAgICAgYXV0byYgd2ViUHJvY2VzcyA9IFdl
YlByb2Nlc3M6OnNpbmdsZXRvbigpOwotI2lmIFVTRShORVRXT1JLX1NFU1NJT04pCi0gICAgQVNT
RVJUKHdlYlByb2Nlc3MudXNlc05ldHdvcmtQcm9jZXNzKCkpOwotI2VuZGlmCi0gICAgaWYgKHdl
YlByb2Nlc3MudXNlc05ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgLy8gVXNlIDAgdG8gaW5k
aWNhdGUgdGhhdCB0aGUgcmVzb3VyY2UgbG9hZCBjYW4ndCBiZSBjb252ZXJ0ZWQgYW5kIGEgbmV3
IGRvd25sb2FkIG11c3QgYmUgc3RhcnRlZC4KLSAgICAgICAgLy8gVGhpcyBjYW4gaGFwcGVuIGlm
IHRoZXJlIGlzIG5vIGxvYWRlciBiZWNhdXNlIHRoZSBtYWluIHJlc291cmNlIGlzIGluIHRoZSBX
ZWJDb3JlIG1lbW9yeSBjYWNoZSwKLSAgICAgICAgLy8gb3IgYmVjYXVzZSB0aGUgY29udmVyc2lv
biB3YXMgYXR0ZW1wdGVkIHdoZW4gbm90IGNhbGxpbmcgU3VicmVzb3VyY2VMb2FkZXI6OmRpZFJl
Y2VpdmVSZXNwb25zZSgpLgotICAgICAgICB1aW50NjRfdCBtYWluUmVzb3VyY2VMb2FkSWRlbnRp
ZmllcjsKLSAgICAgICAgaWYgKG1haW5SZXNvdXJjZUxvYWRlcikKLSAgICAgICAgICAgIG1haW5S
ZXNvdXJjZUxvYWRJZGVudGlmaWVyID0gbWFpblJlc291cmNlTG9hZGVyLT5pZGVudGlmaWVyKCk7
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1haW5SZXNvdXJjZUxvYWRJZGVudGlmaWVyID0g
MDsKLQotICAgICAgICB3ZWJQcm9jZXNzLm5ldHdvcmtDb25uZWN0aW9uKCktPmNvbm5lY3Rpb24o
KS0+c2VuZChNZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OkNvbnZlcnRN
YWluUmVzb3VyY2VMb2FkVG9Eb3dubG9hZChzZXNzaW9uSUQsIG1haW5SZXNvdXJjZUxvYWRJZGVu
dGlmaWVyLCBwb2xpY3lEb3dubG9hZElELCByZXF1ZXN0LCByZXNwb25zZSksIDApOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQorICAgIC8vIFVzZSAwIHRvIGluZGljYXRlIHRoYXQgdGhlIHJlc291
cmNlIGxvYWQgY2FuJ3QgYmUgY29udmVydGVkIGFuZCBhIG5ldyBkb3dubG9hZCBtdXN0IGJlIHN0
YXJ0ZWQuCisgICAgLy8gVGhpcyBjYW4gaGFwcGVuIGlmIHRoZXJlIGlzIG5vIGxvYWRlciBiZWNh
dXNlIHRoZSBtYWluIHJlc291cmNlIGlzIGluIHRoZSBXZWJDb3JlIG1lbW9yeSBjYWNoZSwKKyAg
ICAvLyBvciBiZWNhdXNlIHRoZSBjb252ZXJzaW9uIHdhcyBhdHRlbXB0ZWQgd2hlbiBub3QgY2Fs
bGluZyBTdWJyZXNvdXJjZUxvYWRlcjo6ZGlkUmVjZWl2ZVJlc3BvbnNlKCkuCisgICAgdWludDY0
X3QgbWFpblJlc291cmNlTG9hZElkZW50aWZpZXI7CisgICAgaWYgKG1haW5SZXNvdXJjZUxvYWRl
cikKKyAgICAgICAgbWFpblJlc291cmNlTG9hZElkZW50aWZpZXIgPSBtYWluUmVzb3VyY2VMb2Fk
ZXItPmlkZW50aWZpZXIoKTsKKyAgICBlbHNlCisgICAgICAgIG1haW5SZXNvdXJjZUxvYWRJZGVu
dGlmaWVyID0gMDsKIAotICAgIGlmICghbWFpblJlc291cmNlTG9hZGVyKSB7Ci0gICAgICAgIC8v
IFRoZSBtYWluIHJlc291cmNlIGhhcyBhbHJlYWR5IGJlZW4gbG9hZGVkLiBTdGFydCBhIG5ldyBk
b3dubG9hZCBpbnN0ZWFkLgotI2lmICFVU0UoTkVUV09SS19TRVNTSU9OKQotICAgICAgICB3ZWJQ
cm9jZXNzLmRvd25sb2FkTWFuYWdlcigpLnN0YXJ0RG93bmxvYWQoc2Vzc2lvbklELCBwb2xpY3lE
b3dubG9hZElELCByZXF1ZXN0KTsKLSNlbmRpZgotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0j
aWYgVVNFKE5FVFdPUktfU0VTU0lPTikKLSAgICAvLyBVc2luZyBORVRXT1JLX1NFU1NJT04gcmVx
dWlyZXMgdGhlIHVzZSBvZiBhIG5ldHdvcmsgcHJvY2Vzcy4KLSAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOwotI2Vsc2UKLSAgICB3ZWJQcm9jZXNzLmRvd25sb2FkTWFuYWdlcigpLmNv
bnZlcnRIYW5kbGVUb0Rvd25sb2FkKHBvbGljeURvd25sb2FkSUQsIGRvY3VtZW50TG9hZGVyLT5t
YWluUmVzb3VyY2VMb2FkZXIoKS0+aGFuZGxlKCksIHJlcXVlc3QsIHJlc3BvbnNlKTsKLSNlbmRp
ZgorICAgIHdlYlByb2Nlc3MubmV0d29ya0Nvbm5lY3Rpb24oKS0+Y29ubmVjdGlvbigpLT5zZW5k
KE1lc3NhZ2VzOjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6Q29udmVydE1haW5SZXNv
dXJjZUxvYWRUb0Rvd25sb2FkKHNlc3Npb25JRCwgbWFpblJlc291cmNlTG9hZElkZW50aWZpZXIs
IHBvbGljeURvd25sb2FkSUQsIHJlcXVlc3QsIHJlc3BvbnNlKSwgMCk7CiB9CiAKIFN0cmluZyBX
ZWJGcmFtZTo6c291cmNlKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
c291cC9XZWJQcm9jZXNzU291cC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9zb3VwL1dlYlByb2Nlc3NTb3VwLmNwcAkocmV2aXNpb24gMTkyNzUzKQorKysgU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9zb3VwL1dlYlByb2Nlc3NTb3VwLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDksMTggKzQ5LDYgQEAKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLXN0YXRpYyB1
aW50NjRfdCBnZXRDYWNoZURpc2tGcmVlU2l6ZShTb3VwQ2FjaGUqIGNhY2hlKQotewotICAgIEFT
U0VSVChjYWNoZSk7Ci0KLSAgICBHVW5pcXVlT3V0UHRyPGNoYXI+IGNhY2hlRGlyOwotICAgIGdf
b2JqZWN0X2dldChHX09CSkVDVChjYWNoZSksICJjYWNoZS1kaXIiLCAmY2FjaGVEaXIub3V0UHRy
KCksIE5VTEwpOwotICAgIGlmICghY2FjaGVEaXIpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAg
cmV0dXJuIFdlYkNvcmU6OmdldFZvbHVtZUZyZWVTaXplRm9yUGF0aChjYWNoZURpci5nZXQoKSk7
Ci19Ci0KIHZvaWQgV2ViUHJvY2Vzczo6cGxhdGZvcm1TZXRDYWNoZU1vZGVsKENhY2hlTW9kZWwg
Y2FjaGVNb2RlbCkKIHsKICAgICB1bnNpZ25lZCBjYWNoZVRvdGFsQ2FwYWNpdHkgPSAwOwpAQCAt
NzUsMTEgKzYzLDYgQEAgdm9pZCBXZWJQcm9jZXNzOjpwbGF0Zm9ybVNldENhY2hlTW9kZWwoQwog
ICAgIHVpbnQ2NF90IGRpc2tGcmVlU2l6ZSA9IDA7CiAgICAgU291cENhY2hlKiBjYWNoZSA9IG51
bGxwdHI7CiAKLSAgICBpZiAoIXVzZXNOZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgIGNhY2hl
ID0gV2ViQ29yZTo6U291cE5ldHdvcmtTZXNzaW9uOjpkZWZhdWx0U2Vzc2lvbigpLmNhY2hlKCk7
Ci0gICAgICAgIGRpc2tGcmVlU2l6ZSA9IGdldENhY2hlRGlza0ZyZWVTaXplKGNhY2hlKSAvIFdU
Rjo6TUI7Ci0gICAgfQotCiAgICAgdWludDY0X3QgbWVtU2l6ZSA9IFdURjo6cmFtU2l6ZSgpIC8g
V1RGOjpNQjsKICAgICBjYWxjdWxhdGVDYWNoZVNpemVzKGNhY2hlTW9kZWwsIG1lbVNpemUsIGRp
c2tGcmVlU2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlVG90YWxDYXBhY2l0eSwg
Y2FjaGVNaW5EZWFkQ2FwYWNpdHksIGNhY2hlTWF4RGVhZENhcGFjaXR5LCBkZWFkRGVjb2RlZERh
dGFEZWxldGlvbkludGVydmFsLApAQCAtOTQsMjMgKzc3LDEwIEBAIHZvaWQgV2ViUHJvY2Vzczo6
cGxhdGZvcm1TZXRDYWNoZU1vZGVsKEMKICNpZiBQTEFURk9STShHVEspCiAgICAgV2ViQ29yZTo6
UGFnZUNhY2hlOjpzaW5nbGV0b24oKS5zZXRTaG91bGRDbGVhckJhY2tpbmdTdG9yZXModHJ1ZSk7
CiAjZW5kaWYKLQotICAgIGlmICghdXNlc05ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgaWYg
KHVybENhY2hlRGlza0NhcGFjaXR5ID4gc291cF9jYWNoZV9nZXRfbWF4X3NpemUoY2FjaGUpKQot
ICAgICAgICAgICAgc291cF9jYWNoZV9zZXRfbWF4X3NpemUoY2FjaGUsIHVybENhY2hlRGlza0Nh
cGFjaXR5KTsKLSAgICB9CiB9CiAKIHZvaWQgV2ViUHJvY2Vzczo6cGxhdGZvcm1DbGVhclJlc291
cmNlQ2FjaGVzKFJlc291cmNlQ2FjaGVzVG9DbGVhciBjYWNoZXNUb0NsZWFyKQogewotICAgIGlm
IChjYWNoZXNUb0NsZWFyID09IEluTWVtb3J5UmVzb3VyY2VDYWNoZXNPbmx5KQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICAvLyBJZiB3ZSdyZSB1c2luZyB0aGUgbmV0d29yayBwcm9jZXNzIHRoZW4g
aXQgaXMgdGhlIG9ubHkgb25lIHRoYXQgbmVlZHMgdG8gY2xlYXIgdGhlIGRpc2sgY2FjaGUuCi0g
ICAgaWYgKHVzZXNOZXR3b3JrUHJvY2VzcygpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBzb3Vw
X2NhY2hlX2NsZWFyKFdlYkNvcmU6OlNvdXBOZXR3b3JrU2Vzc2lvbjo6ZGVmYXVsdFNlc3Npb24o
KS5jYWNoZSgpKTsKIH0KIAogc3RhdGljIHZvaWQgc2V0U291cFNlc3Npb25BY2NlcHRMYW5ndWFn
ZShjb25zdCBWZWN0b3I8U3RyaW5nPiYgbGFuZ3VhZ2VzKQpAQCAtMTM1LDYyICsxMDUsMTAgQEAg
dm9pZCBXZWJQcm9jZXNzOjpwbGF0Zm9ybUluaXRpYWxpemVXZWJQcgogICAgICAgICBzZWNjb21w
RmlsdGVycy5pbml0aWFsaXplKCk7CiAgICAgfQogI2VuZGlmCi0KLSAgICBpZiAodXNlc05ldHdv
cmtQcm9jZXNzKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVCghcGFyYW1ldGVycy5k
aXNrQ2FjaGVEaXJlY3RvcnkuaXNFbXB0eSgpKTsKLQotICAgIC8vIFdlIHVzZWQgdG8gdXNlIHRo
ZSBnaXZlbiBjYWNoZSBkaXJlY3RvcnkgZm9yIHRoZSBzb3VwIGNhY2hlLCBidXQgbm93IHdlIHVz
ZSBhIHN1YmRpcmVjdG9yeSB0byBhdm9pZAotICAgIC8vIGNvbmZsaWN0cyB3aXRoIG90aGVyIGNh
Y2hlIGZpbGVzIGluIHRoZSBzYW1lIGRpcmVjdG9yeS4gUmVtb3ZlIHRoZSBvbGQgY2FjaGUgZmls
ZXMgaWYgdGhleSBzdGlsbCBleGlzdC4KLSAgICBXZWJDb3JlOjpTb3VwTmV0d29ya1Nlc3Npb246
OmRlZmF1bHRTZXNzaW9uKCkuY2xlYXJDYWNoZShXZWJDb3JlOjpkaXJlY3RvcnlOYW1lKHBhcmFt
ZXRlcnMuZGlza0NhY2hlRGlyZWN0b3J5KSk7Ci0KLSNpZiBFTkFCTEUoTkVUV09SS19DQUNIRSkK
LSAgICAvLyBXaGVuIG5ldHdvcmsgY2FjaGUgaXMgZW5hYmxlZCwgdGhlIGRpc2sgY2FjaGUgZGly
ZWN0b3J5IGlzIHRoZSBuZXR3b3JrIHByb2Nlc3Mgb25lLgotICAgIENTdHJpbmcgZGlza0NhY2hl
UGF0aCA9IFdlYkNvcmU6OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChXZWJDb3JlOjpkaXJlY3Rv
cnlOYW1lKHBhcmFtZXRlcnMuZGlza0NhY2hlRGlyZWN0b3J5KSwgIndlYmtpdCIpLnV0ZjgoKTsK
LSNlbHNlCi0gICAgQ1N0cmluZyBkaXNrQ2FjaGVQYXRoID0gcGFyYW1ldGVycy5kaXNrQ2FjaGVE
aXJlY3RvcnkudXRmOCgpOwotI2VuZGlmCi0KLSAgICBHUmVmUHRyPFNvdXBDYWNoZT4gc291cENh
Y2hlID0gYWRvcHRHUmVmKHNvdXBfY2FjaGVfbmV3KGRpc2tDYWNoZVBhdGguZGF0YSgpLCBTT1VQ
X0NBQ0hFX1NJTkdMRV9VU0VSKSk7Ci0gICAgV2ViQ29yZTo6U291cE5ldHdvcmtTZXNzaW9uOjpk
ZWZhdWx0U2Vzc2lvbigpLnNldENhY2hlKHNvdXBDYWNoZS5nZXQoKSk7Ci0gICAgLy8gU2V0IGFu
IGluaXRpYWwgaHVnZSBtYXhfc2l6ZSBmb3IgdGhlIFNvdXBDYWNoZSBzbyB0aGUgY2FsbCB0byBz
b3VwX2NhY2hlX2xvYWQoKSB3b24ndCBldmljdCBhbnkgY2FjaGVkCi0gICAgLy8gcmVzb3VyY2Uu
IFRoZSBmaW5hbCBzaXplIG9mIHRoZSBjYWNoZSB3aWxsIGJlIHNldCBieSBOZXR3b3JrUHJvY2Vz
czo6cGxhdGZvcm1TZXRDYWNoZU1vZGVsKCkuCi0gICAgdW5zaWduZWQgaW5pdGlhbE1heFNpemUg
PSBzb3VwX2NhY2hlX2dldF9tYXhfc2l6ZShzb3VwQ2FjaGUuZ2V0KCkpOwotICAgIHNvdXBfY2Fj
aGVfc2V0X21heF9zaXplKHNvdXBDYWNoZS5nZXQoKSwgR19NQVhVSU5UKTsKLSAgICBzb3VwX2Nh
Y2hlX2xvYWQoc291cENhY2hlLmdldCgpKTsKLSAgICBzb3VwX2NhY2hlX3NldF9tYXhfc2l6ZShz
b3VwQ2FjaGUuZ2V0KCksIGluaXRpYWxNYXhTaXplKTsKLQotICAgIGlmICghcGFyYW1ldGVycy5j
b29raWVQZXJzaXN0ZW50U3RvcmFnZVBhdGguaXNFbXB0eSgpKSB7Ci0gICAgICAgIHN1cHBsZW1l
bnQ8V2ViQ29va2llTWFuYWdlcj4oKS0+c2V0Q29va2llUGVyc2lzdGVudFN0b3JhZ2UocGFyYW1l
dGVycy5jb29raWVQZXJzaXN0ZW50U3RvcmFnZVBhdGgsCi0gICAgICAgICAgICBwYXJhbWV0ZXJz
LmNvb2tpZVBlcnNpc3RlbnRTdG9yYWdlVHlwZSk7Ci0gICAgfQotICAgIHN1cHBsZW1lbnQ8V2Vi
Q29va2llTWFuYWdlcj4oKS0+c2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShwYXJhbWV0ZXJzLmNv
b2tpZUFjY2VwdFBvbGljeSk7Ci0KLSAgICBpZiAoIXBhcmFtZXRlcnMubGFuZ3VhZ2VzLmlzRW1w
dHkoKSkKLSAgICAgICAgc2V0U291cFNlc3Npb25BY2NlcHRMYW5ndWFnZShwYXJhbWV0ZXJzLmxh
bmd1YWdlcyk7Ci0KLSAgICBzZXRJZ25vcmVUTFNFcnJvcnMocGFyYW1ldGVycy5pZ25vcmVUTFNF
cnJvcnMpOwotCi0gICAgV2ViQ29yZTo6YWRkTGFuZ3VhZ2VDaGFuZ2VPYnNlcnZlcih0aGlzLCBs
YW5ndWFnZUNoYW5nZWQpOwogfQogCiB2b2lkIFdlYlByb2Nlc3M6OnBsYXRmb3JtVGVybWluYXRl
KCkKIHsKLSAgICBpZiAoIXVzZXNOZXR3b3JrUHJvY2VzcygpKQotICAgICAgICBXZWJDb3JlOjpy
ZW1vdmVMYW5ndWFnZUNoYW5nZU9ic2VydmVyKHRoaXMpOwotfQotCi12b2lkIFdlYlByb2Nlc3M6
OnNldElnbm9yZVRMU0Vycm9ycyhib29sIGlnbm9yZVRMU0Vycm9ycykKLXsKLSAgICBBU1NFUlQo
IXVzZXNOZXR3b3JrUHJvY2VzcygpKTsKLSAgICBXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6c2V0
SWdub3JlU1NMRXJyb3JzKGlnbm9yZVRMU0Vycm9ycyk7Ci19Ci0KLXZvaWQgV2ViUHJvY2Vzczo6
YWxsb3dTcGVjaWZpY0hUVFBTQ2VydGlmaWNhdGVGb3JIb3N0KGNvbnN0IFdlYkNvcmU6OkNlcnRp
ZmljYXRlSW5mbyYgY2VydGlmaWNhdGVJbmZvLCBjb25zdCBTdHJpbmcmIGhvc3QpCi17Ci0gICAg
QVNTRVJUKCF1c2VzTmV0d29ya1Byb2Nlc3MoKSk7Ci0gICAgV2ViQ29yZTo6UmVzb3VyY2VIYW5k
bGU6OnNldENsaWVudENlcnRpZmljYXRlKGhvc3QsIGNlcnRpZmljYXRlSW5mby5jZXJ0aWZpY2F0
ZSgpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBUb29scy9DaGFuZ2VMb2cK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxOTI3NTgpCisrKyBUb29s
cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNyBAQAorMjAxNS0xMS0yMyAg
QWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgorCisgICAgICAgIE1h
a2UgdXNlc05ldHdvcmtQcm9jZXNzIGFsd2F5cyB0cnVlCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTE1ODAKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mi9H
ZW9sb2NhdGlvbi5jcHA6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKyAgICAgICAg
KiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDIvbWFjL0dldFBJREFmdGVyQWJvcnRlZFByb2Nl
c3NMYXVuY2guY3BwOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6CisgICAgICAgICog
V2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXVFI6OlRlc3RD
b250cm9sbGVyOjpnZW5lcmF0ZVBhZ2VDb25maWd1cmF0aW9uKToKKwogMjAxNS0xMS0yMyAgQWxl
eCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgogCiAgICAgICAgIEZpeCBj
cmFzaCBpbiB+V2ViUHJvY2Vzc1Bvb2wgd2hlbiB1c2luZyBHZW9sb2NhdGlvbiB3aXRoIHVzZU5l
dHdvcmtQcm9jZXNzPXRydWUKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
Mi9HZW9sb2NhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXQyL0dlb2xvY2F0aW9uLmNwcAkocmV2aXNpb24gMTkyNzUzKQorKysgVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyL0dlb2xvY2F0aW9uLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjUwLDcgKzI1MCw2IEBAIHN0cnVjdCBHZW9sb2NhdGlvblRyYW5zaXRpb25Ub0hpZ2hBY2N1
cmEKIFRFU1QoV2ViS2l0MiwgR2VvbG9jYXRpb25UcmFuc2l0aW9uVG9IaWdoQWNjdXJhY3kpCiB7
CiAgICAgV0tSZXRhaW5QdHI8V0tDb250ZXh0UmVmPiBjb250ZXh0KEFkb3B0V0ssIFdLQ29udGV4
dENyZWF0ZSgpKTsKLSAgICBXS0NvbnRleHRTZXRVc2VzTmV0d29ya1Byb2Nlc3MoY29udGV4dC5n
ZXQoKSwgdHJ1ZSk7CiAKICAgICBHZW9sb2NhdGlvblRyYW5zaXRpb25Ub0hpZ2hBY2N1cmFjeVN0
YXRlVHJhY2tlciBzdGF0ZVRyYWNrZXI7CiAgICAgc2V0dXBHZW9sb2NhdGlvblByb3ZpZGVyKGNv
bnRleHQuZ2V0KCksICZzdGF0ZVRyYWNrZXIpOwpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXQyL21hYy9HZXRQSURBZnRlckFib3J0ZWRQcm9jZXNzTGF1bmNoLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDIvbWFjL0dldFBJREFm
dGVyQWJvcnRlZFByb2Nlc3NMYXVuY2guY3BwCShyZXZpc2lvbiAxOTI3NTMpCisrKyBUb29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDIvbWFjL0dldFBJREFmdGVyQWJvcnRlZFByb2Nlc3NM
YXVuY2guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0Miw2IEBAIHN0YXRpYyB2b2lkIGRp
ZEZpbmlzaExvYWRGb3JGcmFtZShXS1BhZ2UKIFRFU1QoV2ViS2l0MiwgR2V0UElEQWZ0ZXJBYm9y
dGVkUHJvY2Vzc0xhdW5jaCkKIHsKICAgICBXS1JldGFpblB0cjxXS0NvbnRleHRSZWY+IGNvbnRl
eHQoQWRvcHRXSywgV0tDb250ZXh0Q3JlYXRlKCkpOwotICAgIFdLQ29udGV4dFNldFVzZXNOZXR3
b3JrUHJvY2Vzcyhjb250ZXh0LmdldCgpLCB0cnVlKTsKIAogICAgIFBsYXRmb3JtV2ViVmlldyB3
ZWJWaWV3KGNvbnRleHQuZ2V0KCkpOwogCkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rl
c3RDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rl
c3RDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMTkyNzUzKQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9UZXN0Q29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwMSw3ICs0MDEsNiBA
QCBXS1JldGFpblB0cjxXS1BhZ2VDb25maWd1cmF0aW9uUmVmPiBUZXN0CiAgICAgbV9nZW9sb2Nh
dGlvblByb3ZpZGVyID0gc3RkOjptYWtlX3VuaXF1ZTxHZW9sb2NhdGlvblByb3ZpZGVyTW9jaz4o
bV9jb250ZXh0LmdldCgpKTsKIAogI2lmIFBMQVRGT1JNKEVGTCkKLSAgICBXS0NvbnRleHRTZXRV
c2VzTmV0d29ya1Byb2Nlc3MobV9jb250ZXh0LmdldCgpLCBmYWxzZSk7CiAgICAgV0tDb250ZXh0
U2V0UHJvY2Vzc01vZGVsKG1fY29udGV4dC5nZXQoKSwga1dLUHJvY2Vzc01vZGVsU2hhcmVkU2Vj
b25kYXJ5UHJvY2Vzcyk7CiAjZW5kaWYKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>266116</attachid>
            <date>2015-11-23 21:47:42 -0800</date>
            <delta_ts>2015-11-23 21:56:17 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-151580-20151123214726.patch</filename>
            <type>text/plain</type>
            <size>73912</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5Mjc1MykKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0MSBAQAorMjAxNS0xMS0yMyAgQWxleCBD
aHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgorCisgICAgICAgIE1ha2UgdXNl
c05ldHdvcmtQcm9jZXNzIGFsd2F5cyB0cnVlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNTE1ODAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL21hYy9SZW1vdGVOZXR3b3JraW5n
Q29udGV4dC5tbToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlTmV0d29ya2luZ0NvbnRleHQ6OmVu
c3VyZVByaXZhdGVCcm93c2luZ1Nlc3Npb24pOgorICAgICAgICAqIFNoYXJlZC9BUEkvYy9XS0Rl
cHJlY2F0ZWRGdW5jdGlvbnMuY3BwOgorICAgICAgICAoV0tJbnNwZWN0b3JUb2dnbGVKYXZhU2Ny
aXB0UHJvZmlsaW5nKToKKyAgICAgICAgKFdLQ29udGV4dFNldFVzZXNOZXR3b3JrUHJvY2Vzcyk6
CisgICAgICAgIChXS0dyYXBoaWNzQ29udGV4dEdldENHQ29udGV4dCk6CisgICAgICAgICogU2hh
cmVkL05ldHdvcmsvQ3VzdG9tUHJvdG9jb2xzL0NvY29hL0N1c3RvbVByb3RvY29sTWFuYWdlckNv
Y29hLm1tOgorICAgICAgICAoV2ViS2l0OjpDdXN0b21Qcm90b2NvbE1hbmFnZXI6OmluaXRpYWxp
emUpOgorICAgICAgICAqIFNoYXJlZC9OZXR3b3JrL0N1c3RvbVByb3RvY29scy9zb3VwL0N1c3Rv
bVByb3RvY29sTWFuYWdlclNvdXAuY3BwOgorICAgICAgICAoV2ViS2l0OjpDdXN0b21Qcm90b2Nv
bE1hbmFnZXI6OmluaXRpYWxpemUpOgorICAgICAgICAqIFNoYXJlZC9XZWJQcm9jZXNzQ3JlYXRp
b25QYXJhbWV0ZXJzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc0NyZWF0aW9uUGFy
YW1ldGVyczo6V2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyk6CisgICAgICAgIChXZWJLaXQ6
OldlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM6OmVuY29kZSk6CisgICAgICAgIChXZWJLaXQ6
OldlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM6OmRlY29kZSk6CisgICAgICAgICogU2hhcmVk
L1dlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L0FQSVByb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5jcHA6CisgICAgICAgIChBUEk6OlByb2Nlc3NQ
b29sQ29uZmlndXJhdGlvbjo6Y3JlYXRlV2l0aExlZ2FjeU9wdGlvbnMpOgorICAgICAgICAoQVBJ
OjpQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb246OmNvcHkpOgorICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvQVBJUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQ
SS9DL1dLQ29udGV4dC5jcHA6CisgICAgICAgIChXS0NvbnRleHRTZXRKYXZhU2NyaXB0R2FyYmFn
ZUNvbGxlY3RvclRpbWVyRW5hYmxlZCk6CisgICAgICAgIChXS0NvbnRleHRVc2VUZXN0aW5nTmV0
d29ya1Nlc3Npb24pOgorICAgICAgICAoV0tDb250ZXh0U2V0VXNlc05ldHdvcmtQcm9jZXNzKTog
RGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0UHJpdmF0ZS5oOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcm9jZXNzR3JvdXAubW06CisgICAgICAg
ICgtW1dLUHJvY2Vzc0dyb3VwIGluaXRXaXRoSW5qZWN0ZWRCdW5kbGVVUkw6XSk6CisgICAgICAg
ICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQuY3BwOgorICAgICAgICAoRXdrQ29udGV4
dDo6c2V0UHJvY2Vzc01vZGVsKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRX
ZWJDb250ZXh0LmNwcDoKKyAgICAgICAgKHdlYmtpdFdlYkNvbnRleHRDb25zdHJ1Y3RlZCk6Cisg
ICAgICAgICh3ZWJraXRfd2ViX2NvbnRleHRfc2V0X3Byb2Nlc3NfbW9kZWwpOgorICAgICAgICAq
IFVJUHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNzUG9vbENvY29hLm1tOgorICAgICAgICAoV2ViS2l0
OjpXZWJQcm9jZXNzUG9vbDo6dXBkYXRlUHJvY2Vzc1N1cHByZXNzaW9uU3RhdGUpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6cGxhdGZvcm1Jbml0aWFsaXplV2ViUHJvY2Vzcyk6
CisgICAgICAgICogVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5LmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6RG93bmxvYWRQcm94eTo6Y2FuY2VsKToKKyAgICAgICAgKFdlYktpdDo6RG93
bmxvYWRQcm94eTo6aW52YWxpZGF0ZSk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYkNvb2tpZU1h
bmFnZXJQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6
c2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeSk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1h
bmFnZXJQcm94eTo6Z2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeSk6CisgICAgICAgICogVUlQcm9j
ZXNzL1dlYlByb2Nlc3NQb29sLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6
OldlYlByb2Nlc3NQb29sKToKKyAgICAgICAgKFdlYktpdDo6bV9wcm9jZXNzU3VwcHJlc3Npb25E
aXNhYmxlZEZvclBhZ2VDb3VudGVyKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6
Om5ldHdvcmtpbmdQcm9jZXNzQ29ubmVjdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nl
c3NQb29sOjpsYW5ndWFnZUNoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9v
bDo6dGV4dENoZWNrZXJTdGF0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNz
UG9vbDo6ZW5zdXJlTmV0d29ya1Byb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNz
UG9vbDo6c2V0QW55UGFnZUdyb3VwTWlnaHRIYXZlUHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpjcmVhdGVOZXdXZWJQcm9jZXNzKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmRvd25sb2FkKToKKyAgICAgICAgKFdlYktp
dDo6V2ViUHJvY2Vzc1Bvb2w6OnJlc3VtZURvd25sb2FkKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UHJvY2Vzc1Bvb2w6OnNldENhbkhhbmRsZUhUVFBTU2VydmVyVHJ1c3RFdmFsdWF0aW9uKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNldENhY2hlTW9kZWwpOgorICAgICAgICAo
V2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6Y3JlYXRlRG93bmxvYWRQcm94eSk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlByb2Nlc3NQb29sOjphZGRNZXNzYWdlUmVjZWl2ZXIpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQcm9jZXNzUG9vbDo6YWxsb3dTcGVjaWZpY0hUVFBTQ2VydGlmaWNhdGVGb3JIb3N0
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNldEhUVFBQaXBlbGluaW5nRW5h
YmxlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpyZXF1ZXN0TmV0d29ya2lu
Z1N0YXRpc3RpY3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2V0VXNlc05l
dHdvcmtQcm9jZXNzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6
OnVzZXNOZXR3b3JrUHJvY2Vzcyk6IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL1dlYlBy
b2Nlc3NQb29sLmg6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZW5kVG9OZXR3
b3JraW5nUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZW5kVG9O
ZXR3b3JraW5nUHJvY2Vzc1JlbGF1bmNoaW5nSWZOZWNlc3NhcnkpOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUHJv
eHk6OnNodXREb3duKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Byb3h5OjpyZW1vdmVX
ZWJQYWdlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Byb3h5OjpjYW5UZXJtaW5hdGVD
aGlsZFByb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUHJveHk6OnVwZGF0ZVRl
eHRDaGVja2VyU3RhdGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUHJveHk6OmRpZFNh
dmVUb1BhZ2VDYWNoZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQcm94eTo6ZGlkU2V0
QXNzZXJ0aW9uU3RhdGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUHJveHk6OmNyZWF0
ZURvd25sb2FkUHJveHkpOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQcm9jZXNz
UHJveHkuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvZ3RrL1dlYlByb2Nlc3NQb29sR3RrLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnBsYXRmb3JtSW5pdGlhbGl6ZVdlYlBy
b2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2V0SWdub3JlVExTRXJy
b3JzKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL0ZpbGVBUEkvQmxvYlJlZ2lzdHJ5UHJveHkuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpCbG9iUmVnaXN0cnlQcm94eTo6cmVnaXN0ZXJGaWxlQmxvYlVS
TCk6CisgICAgICAgIChXZWJLaXQ6OkJsb2JSZWdpc3RyeVByb3h5OjpyZWdpc3RlckJsb2JVUkwp
OgorICAgICAgICAoV2ViS2l0OjpCbG9iUmVnaXN0cnlQcm94eTo6dW5yZWdpc3RlckJsb2JVUkwp
OgorICAgICAgICAoV2ViS2l0OjpCbG9iUmVnaXN0cnlQcm94eTo6cmVnaXN0ZXJCbG9iVVJMRm9y
U2xpY2UpOgorICAgICAgICAoV2ViS2l0OjpCbG9iUmVnaXN0cnlQcm94eTo6YmxvYlNpemUpOgor
ICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVz
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpjb29raWVzRm9y
RE9NKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpzZXRDb29raWVz
RnJvbURPTSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBsYXRmb3JtU3RyYXRlZ2llczo6Y29va2ll
c0VuYWJsZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmNvb2tp
ZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGxhdGZvcm1T
dHJhdGVnaWVzOjpnZXRSYXdDb29raWVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGxhdGZvcm1T
dHJhdGVnaWVzOjpkZWxldGVDb29raWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQbGF0Zm9ybVN0
cmF0ZWdpZXM6OnJlc291cmNlTG9hZFNjaGVkdWxlcik6CisgICAgICAgIChXZWJLaXQ6OldlYlBs
YXRmb3JtU3RyYXRlZ2llczo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseSk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlBsYXRmb3JtU3RyYXRlZ2llczo6Y3JlYXRlUGluZ0hhbmRsZSk6CisgICAgICAg
IChXZWJLaXQ6OldlYlBsYXRmb3JtU3RyYXRlZ2llczo6Y3JlYXRlQmxvYlJlZ2lzdHJ5KToKKyAg
ICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3BwOgorICAgICAgICAoV2ViS2l0
OjpXZWJGcmFtZTo6c3RhcnREb3dubG9hZCk6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lOjpj
b252ZXJ0TWFpblJlc291cmNlTG9hZFRvRG93bmxvYWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJG
cmFtZTo6c291cmNlKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzOjpXZWJQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6
V2ViUHJvY2Vzczo6aW5pdGlhbGl6ZUNvbm5lY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
cm9jZXNzOjppbml0aWFsaXplV2ViUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nl
c3M6OmVuc3VyZU5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbik6CisgICAgICAgIChXZWJLaXQ6Oldl
YlByb2Nlc3M6OmRlc3Ryb3lQcml2YXRlQnJvd3NpbmdTZXNzaW9uKToKKyAgICAgICAgKFdlYktp
dDo6V2ViUHJvY2Vzczo6cGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb25NYW5hZ2VyKToKKyAgICAgICAg
KFdlYktpdDo6V2ViUHJvY2Vzczo6c2hvdWxkVGVybWluYXRlKToKKyAgICAgICAgKFdlYktpdDo6
V2ViUHJvY2Vzczo6c2V0SW5qZWN0ZWRCdW5kbGVQYXJhbWV0ZXJzKToKKyAgICAgICAgKFdlYktp
dDo6V2ViUHJvY2Vzczo6bmV0d29ya0Nvbm5lY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
cm9jZXNzOjpzZXRFbmhhbmNlZEFjY2Vzc2liaWxpdHkpOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
cm9jZXNzOjpwcmVmZXRjaEROUyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3M6OmRpZENy
ZWF0ZURvd25sb2FkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzczo6ZGlk
RGVzdHJveURvd25sb2FkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzczo6
ZG93bmxvYWRQcm94eUNvbm5lY3Rpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJQ
cm9jZXNzOjpkb3dubG9hZHNBdXRoZW50aWNhdGlvbk1hbmFnZXIpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViS2l0OjpXZWJQcm9jZXNzOjpkb3dubG9hZE1hbmFnZXIpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViS2l0OjpXZWJQcm9jZXNzOjp1c2VzTmV0d29ya1Byb2Nlc3MpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzOjpkb3dubG9hZFJlcXVlc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzOjpyZXN1bWVEb3dubG9hZCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJLaXQ6OldlYlByb2Nlc3M6OmNhbmNlbERvd25sb2FkKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBXZWJQcm9jZXNzL1dlYlByb2Nlc3MuaDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vz
czo6dGV4dENoZWNrZXJTdGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3M6OmV2ZW50
RGlzcGF0Y2hlcik6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLm1lc3NhZ2VzLmlu
OgorICAgICAgICAqIFdlYlByb2Nlc3Mvc291cC9XZWJQcm9jZXNzU291cC5jcHA6CisgICAgICAg
IChXZWJLaXQ6OldlYlByb2Nlc3M6OnBsYXRmb3JtU2V0Q2FjaGVNb2RlbCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlByb2Nlc3M6OnBsYXRmb3JtQ2xlYXJSZXNvdXJjZUNhY2hlcyk6CisgICAgICAg
IChXZWJLaXQ6OnNldFNvdXBTZXNzaW9uQWNjZXB0TGFuZ3VhZ2UpOgorICAgICAgICAoV2ViS2l0
OjpXZWJQcm9jZXNzOjpwbGF0Zm9ybUluaXRpYWxpemVXZWJQcm9jZXNzKToKKyAgICAgICAgKFdl
YktpdDo6V2ViUHJvY2Vzczo6cGxhdGZvcm1UZXJtaW5hdGUpOgorICAgICAgICAoV2ViS2l0Ojpn
ZXRDYWNoZURpc2tGcmVlU2l6ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nl
c3M6OnNldElnbm9yZVRMU0Vycm9ycyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlBy
b2Nlc3M6OmFsbG93U3BlY2lmaWNIVFRQU0NlcnRpZmljYXRlRm9ySG9zdCk6IERlbGV0ZWQuCisK
IDIwMTUtMTEtMjMgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4K
IAogICAgICAgICBGaXggY3Jhc2ggaW4gfldlYlByb2Nlc3NQb29sIHdoZW4gdXNpbmcgR2VvbG9j
YXRpb24gd2l0aCB1c2VOZXR3b3JrUHJvY2Vzcz10cnVlCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9O
ZXR3b3JrUHJvY2Vzcy9tYWMvUmVtb3RlTmV0d29ya2luZ0NvbnRleHQubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvbWFjL1JlbW90ZU5ldHdvcmtpbmdDb250
ZXh0Lm1tCShyZXZpc2lvbiAxOTI3NTMpCisrKyBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vz
cy9tYWMvUmVtb3RlTmV0d29ya2luZ0NvbnRleHQubW0JKHdvcmtpbmcgY29weSkKQEAgLTkzLDgg
KzkzLDEzIEBAIHZvaWQgUmVtb3RlTmV0d29ya2luZ0NvbnRleHQ6OmVuc3VyZVByaXYKICAgICBp
ZiAoU2Vzc2lvblRyYWNrZXI6OnN0b3JhZ2VTZXNzaW9uKHNlc3Npb25JRCkpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIEFTU0VSVCghU2Vzc2lvblRyYWNrZXI6OmdldElkZW50aWZpZXJCYXNlKCku
aXNOdWxsKCkpOwotICAgIFNlc3Npb25UcmFja2VyOjpzZXRTZXNzaW9uKHNlc3Npb25JRCwgTmV0
d29ya1N0b3JhZ2VTZXNzaW9uOjpjcmVhdGVQcml2YXRlQnJvd3NpbmdTZXNzaW9uKFNlc3Npb25U
cmFja2VyOjpnZXRJZGVudGlmaWVyQmFzZSgpICsgJy4nICsgU3RyaW5nOjpudW1iZXIoc2Vzc2lv
bklELnNlc3Npb25JRCgpKSkKKyAgICBTdHJpbmcgYmFzZTsKKyAgICBpZiAoU2Vzc2lvblRyYWNr
ZXI6OmdldElkZW50aWZpZXJCYXNlKCkuaXNOdWxsKCkpCisgICAgICAgIGJhc2UgPSBbW05TQnVu
ZGxlIG1haW5CdW5kbGVdIGJ1bmRsZUlkZW50aWZpZXJdOworICAgIGVsc2UKKyAgICAgICAgYmFz
ZSA9IFNlc3Npb25UcmFja2VyOjpnZXRJZGVudGlmaWVyQmFzZSgpOworCisgICAgU2Vzc2lvblRy
YWNrZXI6OnNldFNlc3Npb24oc2Vzc2lvbklELCBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmNyZWF0
ZVByaXZhdGVCcm93c2luZ1Nlc3Npb24oYmFzZSArICcuJyArIFN0cmluZzo6bnVtYmVyKHNlc3Np
b25JRC5zZXNzaW9uSUQoKSkpCiAjaWYgVVNFKE5FVFdPUktfU0VTU0lPTikKICAgICAgICAgLCBz
dGQ6Om1ha2VfdW5pcXVlPE5ldHdvcmtTZXNzaW9uPihOZXR3b3JrU2Vzc2lvbjo6VHlwZTo6RXBo
ZW1lcmFsLCBzZXNzaW9uSUQpCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9X
ZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAJKHJldmlzaW9uIDE5
Mjc1MykKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0
ZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsNyArNDMsNiBAQCBXZWJQcm9jZXNzQ3JlYXRp
b25QYXJhbWV0ZXJzOjpXZWJQcm9jZXNzCiAgICAgLCBzaG91bGRFbmFibGVKSVQoZmFsc2UpCiAg
ICAgLCBzaG91bGRFbmFibGVGVExKSVQoZmFsc2UpCiAjZW5kaWYKLSAgICAsIHVzZXNOZXR3b3Jr
UHJvY2VzcyhmYWxzZSkKICAgICAsIG1lbW9yeUNhY2hlRGlzYWJsZWQoZmFsc2UpCiAjaWYgRU5B
QkxFKFNFUlZJQ0VfQ09OVFJPTFMpCiAgICAgLCBoYXNJbWFnZVNlcnZpY2VzKGZhbHNlKQpAQCAt
OTcsNyArOTYsNiBAQCB2b2lkIFdlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM6OmVuY29kCiAg
ICAgZW5jb2RlciA8PCBjb29raWVQZXJzaXN0ZW50U3RvcmFnZVBhdGg7CiAgICAgZW5jb2RlciA8
PCBjb29raWVQZXJzaXN0ZW50U3RvcmFnZVR5cGU7CiAgICAgZW5jb2Rlci5lbmNvZGVFbnVtKGNv
b2tpZUFjY2VwdFBvbGljeSk7Ci0gICAgZW5jb2RlciA8PCBpZ25vcmVUTFNFcnJvcnM7CiAjZW5k
aWYKICAgICBlbmNvZGVyLmVuY29kZUVudW0oY2FjaGVNb2RlbCk7CiAgICAgZW5jb2RlciA8PCBz
aG91bGRBbHdheXNVc2VDb21wbGV4VGV4dENvZGVQYXRoOwpAQCAtMTMxLDggKzEyOSw2IEBAIHZv
aWQgV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyczo6ZW5jb2QKICAgICBlbmNvZGVyIDw8IG5v
dGlmaWNhdGlvblBlcm1pc3Npb25zOwogI2VuZGlmCiAKLSAgICBlbmNvZGVyIDw8IHVzZXNOZXR3
b3JrUHJvY2VzczsKLQogICAgIGVuY29kZXIgPDwgcGx1Z0luQXV0b1N0YXJ0T3JpZ2luSGFzaGVz
OwogICAgIGVuY29kZXIgPDwgcGx1Z0luQXV0b1N0YXJ0T3JpZ2luczsKICAgICBlbmNvZGVyIDw8
IG1lbW9yeUNhY2hlRGlzYWJsZWQ7CkBAIC0yMjEsOCArMjE3LDYgQEAgYm9vbCBXZWJQcm9jZXNz
Q3JlYXRpb25QYXJhbWV0ZXJzOjpkZWNvZAogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYg
KCFkZWNvZGVyLmRlY29kZUVudW0ocGFyYW1ldGVycy5jb29raWVBY2NlcHRQb2xpY3kpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShwYXJhbWV0ZXJzLmln
bm9yZVRMU0Vycm9ycykpCi0gICAgICAgIHJldHVybiBmYWxzZTsKICNlbmRpZgogICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGVFbnVtKHBhcmFtZXRlcnMuY2FjaGVNb2RlbCkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKQEAgLTI4Nyw5ICsyODEsNiBAQCBib29sIFdlYlByb2Nlc3NDcmVhdGlvblBhcmFt
ZXRlcnM6OmRlY29kCiAgICAgICAgIHJldHVybiBmYWxzZTsKICNlbmRpZgogCi0gICAgaWYgKCFk
ZWNvZGVyLmRlY29kZShwYXJhbWV0ZXJzLnVzZXNOZXR3b3JrUHJvY2VzcykpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQogICAgIGlmICghZGVjb2Rlci5kZWNvZGUocGFyYW1ldGVycy5wbHVnSW5B
dXRvU3RhcnRPcmlnaW5IYXNoZXMpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKCFk
ZWNvZGVyLmRlY29kZShwYXJhbWV0ZXJzLnBsdWdJbkF1dG9TdGFydE9yaWdpbnMpKQpJbmRleDog
U291cmNlL1dlYktpdDIvU2hhcmVkL1dlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1l
dGVycy5oCShyZXZpc2lvbiAxOTI3NTMpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViUHJv
Y2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDUsNyArMTA1LDYg
QEAgc3RydWN0IFdlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMgewogICAgIFN0cmluZyBjb29r
aWVQZXJzaXN0ZW50U3RvcmFnZVBhdGg7CiAgICAgdWludDMyX3QgY29va2llUGVyc2lzdGVudFN0
b3JhZ2VUeXBlOwogICAgIEhUVFBDb29raWVBY2NlcHRQb2xpY3kgY29va2llQWNjZXB0UG9saWN5
OwotICAgIGJvb2wgaWdub3JlVExTRXJyb3JzOwogI2VuZGlmCiAKICAgICBDYWNoZU1vZGVsIGNh
Y2hlTW9kZWw7CkBAIC0xNTQsOCArMTUzLDYgQEAgc3RydWN0IFdlYlByb2Nlc3NDcmVhdGlvblBh
cmFtZXRlcnMgewogICAgIEhhc2hNYXA8U3RyaW5nLCBib29sPiBub3RpZmljYXRpb25QZXJtaXNz
aW9uczsKICNlbmRpZgogCi0gICAgYm9vbCB1c2VzTmV0d29ya1Byb2Nlc3M7Ci0KICAgICBIYXNo
TWFwPFdlYkNvcmU6OlNlc3Npb25JRCwgSGFzaE1hcDx1bnNpZ25lZCwgZG91YmxlPj4gcGx1Z0lu
QXV0b1N0YXJ0T3JpZ2luSGFzaGVzOwogICAgIFZlY3RvcjxTdHJpbmc+IHBsdWdJbkF1dG9TdGFy
dE9yaWdpbnM7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9BUEkvYy9XS0RlcHJlY2F0
ZWRGdW5jdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9BUEkv
Yy9XS0RlcHJlY2F0ZWRGdW5jdGlvbnMuY3BwCShyZXZpc2lvbiAxOTI3NTMpCisrKyBTb3VyY2Uv
V2ViS2l0Mi9TaGFyZWQvQVBJL2MvV0tEZXByZWNhdGVkRnVuY3Rpb25zLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjcsNiArMjcsNyBAQAogCiAjaW5jbHVkZSAiQVBJRGljdGlvbmFyeS5oIgogI2lu
Y2x1ZGUgIldLQXJyYXkuaCIKKyNpbmNsdWRlICJXS0NvbnRleHRQcml2YXRlLmgiCiAjaW5jbHVk
ZSAiV0tNdXRhYmxlRGljdGlvbmFyeS5oIgogI2luY2x1ZGUgIldLUHJlZmVyZW5jZXNSZWZQcml2
YXRlLmgiCiAjaW5jbHVkZSAiV0tTaGFyZWRBUElDYXN0LmgiCkBAIC0xMzQsNiArMTM1LDEwIEBA
IHZvaWQgV0tJbnNwZWN0b3JUb2dnbGVKYXZhU2NyaXB0UHJvZmlsaW4KIHsKIH0KIAordm9pZCBX
S0NvbnRleHRTZXRVc2VzTmV0d29ya1Byb2Nlc3MoV0tDb250ZXh0UmVmLCBib29sKQoreworfQor
CiAjaWYgUExBVEZPUk0oTUFDKQogQ0dDb250ZXh0UmVmIFdLR3JhcGhpY3NDb250ZXh0R2V0Q0dD
b250ZXh0KFdLR3JhcGhpY3NDb250ZXh0UmVmIGdyYXBoaWNzQ29udGV4dCkKIHsKSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL1NoYXJlZC9OZXR3b3JrL0N1c3RvbVByb3RvY29scy9Db2NvYS9DdXN0b21Q
cm90b2NvbE1hbmFnZXJDb2NvYS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvTmV0d29yay9DdXN0b21Qcm90b2NvbHMvQ29jb2EvQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ29j
b2EubW0JKHJldmlzaW9uIDE5Mjc1MykKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9OZXR3b3Jr
L0N1c3RvbVByb3RvY29scy9Db2NvYS9DdXN0b21Qcm90b2NvbE1hbmFnZXJDb2NvYS5tbQkod29y
a2luZyBjb3B5KQpAQCAtMTM0LDE3ICsxMzQsOSBAQCB2b2lkIEN1c3RvbVByb3RvY29sTWFuYWdl
cjo6aW5pdGlhbGl6ZUNvCiAKIHZvaWQgQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyOjppbml0aWFsaXpl
KGNvbnN0IFdlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmIHBhcmFtZXRlcnMpCiB7Ci0gICAg
QVNTRVJUKHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRGb3JDdXN0b21Qcm90b2NvbHMu
aXNFbXB0eSgpIHx8ICFwYXJhbWV0ZXJzLnVzZXNOZXR3b3JrUHJvY2Vzcyk7Ci0gICAgaWYgKHBh
cmFtZXRlcnMudXNlc05ldHdvcmtQcm9jZXNzKSB7Ci0gICAgICAgIG1fY2hpbGRQcm9jZXNzLT5w
YXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5yZW1vdmVXb3JrUXVldWVNZXNzYWdlUmVjZWl2ZXIo
TWVzc2FnZXM6OkN1c3RvbVByb3RvY29sTWFuYWdlcjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpKTsK
LSAgICAgICAgbV9tZXNzYWdlUXVldWUgPSBudWxscHRyOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgW05TVVJMUHJvdG9jb2wgcmVnaXN0ZXJDbGFzczpbV0tDdXN0b21Qcm90b2NvbCBj
bGFzc11dOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwYXJhbWV0ZXJzLnVybFNjaGVt
ZXNSZWdpc3RlcmVkRm9yQ3VzdG9tUHJvdG9jb2xzLnNpemUoKTsgKytpKQotICAgICAgICByZWdp
c3RlclNjaGVtZShwYXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkRm9yQ3VzdG9tUHJvdG9j
b2xzW2ldKTsKKyAgICBBU1NFUlQocGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEZvckN1
c3RvbVByb3RvY29scy5pc0VtcHR5KCkpOworICAgIG1fY2hpbGRQcm9jZXNzLT5wYXJlbnRQcm9j
ZXNzQ29ubmVjdGlvbigpLT5yZW1vdmVXb3JrUXVldWVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6
OkN1c3RvbVByb3RvY29sTWFuYWdlcjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpKTsKKyAgICBtX21l
c3NhZ2VRdWV1ZSA9IG51bGxwdHI7CiB9CiAKIHZvaWQgQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyOjpp
bml0aWFsaXplKGNvbnN0IE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJiBwYXJhbWV0
ZXJzKQpJbmRleDogU291cmNlL1dlYktpdDIvU2hhcmVkL05ldHdvcmsvQ3VzdG9tUHJvdG9jb2xz
L3NvdXAvQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyU291cC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdDIvU2hhcmVkL05ldHdvcmsvQ3VzdG9tUHJvdG9jb2xzL3NvdXAvQ3VzdG9tUHJvdG9j
b2xNYW5hZ2VyU291cC5jcHAJKHJldmlzaW9uIDE5Mjc1MykKKysrIFNvdXJjZS9XZWJLaXQyL1No
YXJlZC9OZXR3b3JrL0N1c3RvbVByb3RvY29scy9zb3VwL0N1c3RvbVByb3RvY29sTWFuYWdlclNv
dXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OCwxNCArNDgsOSBAQCB2b2lkIEN1c3RvbVByb3Rv
Y29sTWFuYWdlcjo6aW5pdGlhbGl6ZUNvCiAKIHZvaWQgQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyOjpp
bml0aWFsaXplKGNvbnN0IFdlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmIHBhcmFtZXRlcnMp
CiB7Ci0gICAgQVNTRVJUKHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRGb3JDdXN0b21Q
cm90b2NvbHMuaXNFbXB0eSgpIHx8ICFwYXJhbWV0ZXJzLnVzZXNOZXR3b3JrUHJvY2Vzcyk7Ci0g
ICAgaWYgKHBhcmFtZXRlcnMudXNlc05ldHdvcmtQcm9jZXNzKSB7Ci0gICAgICAgIG1fY2hpbGRQ
cm9jZXNzLT5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5yZW1vdmVXb3JrUXVldWVNZXNzYWdl
UmVjZWl2ZXIoTWVzc2FnZXM6OkN1c3RvbVByb3RvY29sTWFuYWdlcjo6bWVzc2FnZVJlY2VpdmVy
TmFtZSgpKTsKLSAgICAgICAgbV9tZXNzYWdlUXVldWUgPSBudWxscHRyOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcGFyYW1ldGVycy51cmxTY2hl
bWVzUmVnaXN0ZXJlZEZvckN1c3RvbVByb3RvY29scy5zaXplKCk7ICsraSkKLSAgICAgICAgcmVn
aXN0ZXJTY2hlbWUocGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEZvckN1c3RvbVByb3Rv
Y29sc1tpXSk7CisgICAgQVNTRVJUKHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRGb3JD
dXN0b21Qcm90b2NvbHMuaXNFbXB0eSgpKTsKKyAgICBtX2NoaWxkUHJvY2Vzcy0+cGFyZW50UHJv
Y2Vzc0Nvbm5lY3Rpb24oKS0+cmVtb3ZlV29ya1F1ZXVlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2Vz
OjpDdXN0b21Qcm90b2NvbE1hbmFnZXI6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSk7CisgICAgbV9t
ZXNzYWdlUXVldWUgPSBudWxscHRyOwogfQogCiB2b2lkIEN1c3RvbVByb3RvY29sTWFuYWdlcjo6
aW5pdGlhbGl6ZShjb25zdCBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyYgcGFyYW1l
dGVycykKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJDb29raWVNYW5hZ2VyUHJv
eHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJDb29raWVN
YW5hZ2VyUHJveHkuY3BwCShyZXZpc2lvbiAxOTI3NTMpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvV2ViQ29va2llTWFuYWdlclByb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTYzLDgg
KzE2Myw3IEBAIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpzZXRIVFRQQ29va2kKICAgICAv
LyAtIFdoZW4gdGVzdGluZywgd2Ugb25seSBoYXZlIG9uZSBXZWJQcm9jZXNzIGFuZCBvbmUgTmV0
d29ya1Byb2Nlc3MsIGFuZCBXZWJLaXRUZXN0UnVubmVyIG5ldmVyIHJlc3RhcnRzIHRoZW07CiAg
ICAgLy8gLSBXaGVuIG5vdCB0ZXN0aW5nLCBDb2NvYSBoYXMgdGhlIHBvbGljeSBwZXJzaXN0ZWQs
IGFuZCB0aHVzIG5ldyBwcm9jZXNzZXMgdXNlIGl0IChldmVuIGZvciBlcGhlbWVyYWwgc2Vzc2lv
bnMpLgogICAgIHByb2Nlc3NQb29sKCktPnNlbmRUb0FsbFByb2Nlc3NlcyhNZXNzYWdlczo6V2Vi
Q29va2llTWFuYWdlcjo6U2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShwb2xpY3kpKTsKLSAgICBp
ZiAocHJvY2Vzc1Bvb2woKS0+dXNlc05ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgIHByb2Nlc3NQ
b29sKCktPnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2Vy
OjpTZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KHBvbGljeSkpOworICAgIHByb2Nlc3NQb29sKCkt
PnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpTZXRI
VFRQQ29va2llQWNjZXB0UG9saWN5KHBvbGljeSkpOwogfQogCiB2b2lkIFdlYkNvb2tpZU1hbmFn
ZXJQcm94eTo6Z2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShzdGQ6OmZ1bmN0aW9uPHZvaWQgKEhU
VFBDb29raWVBY2NlcHRQb2xpY3ksIENhbGxiYWNrQmFzZTo6RXJyb3IpPiBjYWxsYmFja0Z1bmN0
aW9uKQpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3Bw
CShyZXZpc2lvbiAxOTI3NTMpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vz
c1Bvb2wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTgsOSArMTU4LDYgQEAgV2ViUHJvY2Vzc1Bv
b2w6OldlYlByb2Nlc3NQb29sKEFQSTo6UHJvYwogICAgICwgbV9wcm9jZXNzVGVybWluYXRpb25F
bmFibGVkKHRydWUpCiAgICAgLCBtX2NhbkhhbmRsZUhUVFBTU2VydmVyVHJ1c3RFdmFsdWF0aW9u
KHRydWUpCiAgICAgLCBtX2RpZE5ldHdvcmtQcm9jZXNzQ3Jhc2goZmFsc2UpCi0jaWYgVVNFKFNP
VVApCi0gICAgLCBtX2lnbm9yZVRMU0Vycm9ycyh0cnVlKQotI2VuZGlmCiAgICAgLCBtX21lbW9y
eUNhY2hlRGlzYWJsZWQoZmFsc2UpCiAgICAgLCBtX3VzZXJPYnNlcnZhYmxlUGFnZUNvdW50ZXIo
W3RoaXNdKGJvb2wpIHsgdXBkYXRlUHJvY2Vzc1N1cHByZXNzaW9uU3RhdGUoKTsgfSkKICAgICAs
IG1fcHJvY2Vzc1N1cHByZXNzaW9uRGlzYWJsZWRGb3JQYWdlQ291bnRlcihbdGhpc10oYm9vbCkg
eyB1cGRhdGVQcm9jZXNzU3VwcHJlc3Npb25TdGF0ZSgpOyB9KQpAQCAtMzA2LDE3ICszMDMsNyBA
QCB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXRNYXhpbXVtTnVtYmVyT2ZQCiAKIElQQzo6Q29ubmVj
dGlvbiogV2ViUHJvY2Vzc1Bvb2w6Om5ldHdvcmtpbmdQcm9jZXNzQ29ubmVjdGlvbigpCiB7Ci0g
ICAgc3dpdGNoIChwcm9jZXNzTW9kZWwoKSkgewotICAgIGNhc2UgUHJvY2Vzc01vZGVsU2hhcmVk
U2Vjb25kYXJ5UHJvY2VzczoKLSAgICAgICAgaWYgKHVzZXNOZXR3b3JrUHJvY2VzcygpKQotICAg
ICAgICAgICAgcmV0dXJuIG1fbmV0d29ya1Byb2Nlc3MtPmNvbm5lY3Rpb24oKTsKLSAgICAgICAg
cmV0dXJuIG1fcHJvY2Vzc2VzWzBdLT5jb25uZWN0aW9uKCk7Ci0gICAgY2FzZSBQcm9jZXNzTW9k
ZWxNdWx0aXBsZVNlY29uZGFyeVByb2Nlc3NlczoKLSAgICAgICAgQVNTRVJUKHVzZXNOZXR3b3Jr
UHJvY2VzcygpKTsKLSAgICAgICAgcmV0dXJuIG1fbmV0d29ya1Byb2Nlc3MtPmNvbm5lY3Rpb24o
KTsKLSAgICB9Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIDA7CisgICAg
cmV0dXJuIG1fbmV0d29ya1Byb2Nlc3MtPmNvbm5lY3Rpb24oKTsKIH0KIAogdm9pZCBXZWJQcm9j
ZXNzUG9vbDo6bGFuZ3VhZ2VDaGFuZ2VkKHZvaWQqIGNvbnRleHQpCkBAIC0zMjgsNyArMzE1LDcg
QEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6bGFuZ3VhZ2VDaGFuZ2VkKCkKIHsKICAgICBzZW5kVG9B
bGxQcm9jZXNzZXMoTWVzc2FnZXM6OldlYlByb2Nlc3M6OlVzZXJQcmVmZXJyZWRMYW5ndWFnZXND
aGFuZ2VkKHVzZXJQcmVmZXJyZWRMYW5ndWFnZXMoKSkpOwogI2lmIFVTRShTT1VQKQotICAgIGlm
ICh1c2VzTmV0d29ya1Byb2Nlc3MoKSAmJiBtX25ldHdvcmtQcm9jZXNzKQorICAgIGlmIChtX25l
dHdvcmtQcm9jZXNzKQogICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpO
ZXR3b3JrUHJvY2Vzczo6VXNlclByZWZlcnJlZExhbmd1YWdlc0NoYW5nZWQodXNlclByZWZlcnJl
ZExhbmd1YWdlcygpKSwgMCk7CiAjZW5kaWYKIH0KQEAgLTM0MywxNiArMzMwLDYgQEAgdm9pZCBX
ZWJQcm9jZXNzUG9vbDo6dGV4dENoZWNrZXJTdGF0ZUNoYQogICAgIHNlbmRUb0FsbFByb2Nlc3Nl
cyhNZXNzYWdlczo6V2ViUHJvY2Vzczo6U2V0VGV4dENoZWNrZXJTdGF0ZShUZXh0Q2hlY2tlcjo6
c3RhdGUoKSkpOwogfQogCi12b2lkIFdlYlByb2Nlc3NQb29sOjpzZXRVc2VzTmV0d29ya1Byb2Nl
c3MoYm9vbCB1c2VzTmV0d29ya1Byb2Nlc3MpCi17Ci0gICAgbV9jb25maWd1cmF0aW9uLT5zZXRV
c2VOZXR3b3JrUHJvY2Vzcyh1c2VzTmV0d29ya1Byb2Nlc3MpOwotfQotCi1ib29sIFdlYlByb2Nl
c3NQb29sOjp1c2VzTmV0d29ya1Byb2Nlc3MoKSBjb25zdAotewotICAgIHJldHVybiBtX2NvbmZp
Z3VyYXRpb24tPnVzZU5ldHdvcmtQcm9jZXNzKCk7Ci19Ci0KIE5ldHdvcmtQcm9jZXNzUHJveHkm
IFdlYlByb2Nlc3NQb29sOjplbnN1cmVOZXR3b3JrUHJvY2VzcygpCiB7CiAgICAgaWYgKG1fbmV0
d29ya1Byb2Nlc3MpCkBAIC01MDQsNyArNDgxLDcgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0
QW55UGFnZUdyb3VwTWlnaAogewogICAgIG1faWNvbkRhdGFiYXNlLT5zZXRQcml2YXRlQnJvd3Np
bmdFbmFibGVkKHByaXZhdGVCcm93c2luZ0VuYWJsZWQpOwogCi0gICAgaWYgKHVzZXNOZXR3b3Jr
UHJvY2VzcygpICYmIG5ldHdvcmtQcm9jZXNzKCkpIHsKKyAgICBpZiAobmV0d29ya1Byb2Nlc3Mo
KSkgewogICAgICAgICBpZiAocHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCkKICAgICAgICAgICAgIG5l
dHdvcmtQcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpFbnN1cmVQcml2
YXRlQnJvd3NpbmdTZXNzaW9uKFNlc3Npb25JRDo6bGVnYWN5UHJpdmF0ZVNlc3Npb25JRCgpKSwg
MCk7CiAgICAgICAgIGVsc2UKQEAgLTU1NCw4ICs1MzEsNyBAQCBXZWJQcm9jZXNzUHJveHkmIFdl
YlByb2Nlc3NQb29sOjplbnN1cmVTCiAKIFdlYlByb2Nlc3NQcm94eSYgV2ViUHJvY2Vzc1Bvb2w6
OmNyZWF0ZU5ld1dlYlByb2Nlc3MoKQogewotICAgIGlmICh1c2VzTmV0d29ya1Byb2Nlc3MoKSkK
LSAgICAgICAgZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKKyAgICBlbnN1cmVOZXR3b3JrUHJvY2Vz
cygpOwogCiAgICAgUmVmPFdlYlByb2Nlc3NQcm94eT4gcHJvY2VzcyA9IFdlYlByb2Nlc3NQcm94
eTo6Y3JlYXRlKCp0aGlzKTsKIApAQCAtNjMyLDggKzYwOCw2IEBAIFdlYlByb2Nlc3NQcm94eSYg
V2ViUHJvY2Vzc1Bvb2w6OmNyZWF0ZU4KICAgICBzdXBwbGVtZW50PFdlYk5vdGlmaWNhdGlvbk1h
bmFnZXJQcm94eT4oKS0+cG9wdWxhdGVDb3B5T2ZOb3RpZmljYXRpb25QZXJtaXNzaW9ucyhwYXJh
bWV0ZXJzLm5vdGlmaWNhdGlvblBlcm1pc3Npb25zKTsKICNlbmRpZgogCi0gICAgcGFyYW1ldGVy
cy51c2VzTmV0d29ya1Byb2Nlc3MgPSB1c2VzTmV0d29ya1Byb2Nlc3MoKTsKLQogICAgIHBhcmFt
ZXRlcnMucGx1Z0luQXV0b1N0YXJ0T3JpZ2luSGFzaGVzID0gbV9wbHVnSW5BdXRvU3RhcnRQcm92
aWRlci5hdXRvU3RhcnRPcmlnaW5IYXNoZXNDb3B5KCk7CiAgICAgY29weVRvVmVjdG9yKG1fcGx1
Z0luQXV0b1N0YXJ0UHJvdmlkZXIuYXV0b1N0YXJ0T3JpZ2lucygpLCBwYXJhbWV0ZXJzLnBsdWdJ
bkF1dG9TdGFydE9yaWdpbnMpOwogCkBAIC04NDEsMTYgKzgxNSwxNCBAQCBSZWY8V2ViUGFnZVBy
b3h5PiBXZWJQcm9jZXNzUG9vbDo6Y3JlYXRlCiBEb3dubG9hZFByb3h5KiBXZWJQcm9jZXNzUG9v
bDo6ZG93bmxvYWQoV2ViUGFnZVByb3h5KiBpbml0aWF0aW5nUGFnZSwgY29uc3QgUmVzb3VyY2VS
ZXF1ZXN0JiByZXF1ZXN0KQogewogICAgIERvd25sb2FkUHJveHkqIGRvd25sb2FkUHJveHkgPSBj
cmVhdGVEb3dubG9hZFByb3h5KHJlcXVlc3QpOwotICAgIHVpbnQ2NF90IGluaXRpYXRpbmdQYWdl
SUQgPSBpbml0aWF0aW5nUGFnZSA/IGluaXRpYXRpbmdQYWdlLT5wYWdlSUQoKSA6IDA7CiAgICAg
U2Vzc2lvbklEIHNlc3Npb25JRCA9IGluaXRpYXRpbmdQYWdlID8gaW5pdGlhdGluZ1BhZ2UtPnNl
c3Npb25JRCgpIDogU2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCk7CiAKLSAgICBpZiAodXNl
c05ldHdvcmtQcm9jZXNzKCkgJiYgbmV0d29ya1Byb2Nlc3MoKSkgeworICAgIGlmIChuZXR3b3Jr
UHJvY2VzcygpKSB7CiAgICAgICAgIC8vIEZJWE1FIChOZXR3b3JrUHJvY2Vzcyk6IFJlcGxpY2F0
ZSB3aGF0ZXZlciBGcmFtZUxvYWRlcjo6c2V0T3JpZ2luYWxVUkxGb3JEb3dubG9hZFJlcXVlc3Qg
ZG9lcyB3aXRoIHRoZSByZXF1ZXN0IGhlcmUuCiAgICAgICAgIG5ldHdvcmtQcm9jZXNzKCktPnNl
bmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpEb3dubG9hZFJlcXVlc3Qoc2Vzc2lvbklELCBk
b3dubG9hZFByb3h5LT5kb3dubG9hZElEKCksIHJlcXVlc3QpLCAwKTsKICAgICAgICAgcmV0dXJu
IGRvd25sb2FkUHJveHk7CiAgICAgfQogCi0gICAgbV9wcm9jZXNzZXNbMF0tPnNlbmQoTWVzc2Fn
ZXM6OldlYlByb2Nlc3M6OkRvd25sb2FkUmVxdWVzdChzZXNzaW9uSUQsIGRvd25sb2FkUHJveHkt
PmRvd25sb2FkSUQoKSwgaW5pdGlhdGluZ1BhZ2VJRCwgcmVxdWVzdCksIDApOwogICAgIHJldHVy
biBkb3dubG9hZFByb3h5OwogfQogCkBAIC04NjIsMTIgKzgzNCwxMSBAQCBEb3dubG9hZFByb3h5
KiBXZWJQcm9jZXNzUG9vbDo6cmVzdW1lRG93CiAgICAgaWYgKCFwYXRoLmlzRW1wdHkoKSkKICAg
ICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKHBhdGgsIFNhbmRib3hFeHRlbnNp
b246OlJlYWRXcml0ZSwgc2FuZGJveEV4dGVuc2lvbkhhbmRsZSk7CiAKLSAgICBpZiAodXNlc05l
dHdvcmtQcm9jZXNzKCkgJiYgbmV0d29ya1Byb2Nlc3MoKSkgeworICAgIGlmIChuZXR3b3JrUHJv
Y2VzcygpKSB7CiAgICAgICAgIG5ldHdvcmtQcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6Ok5ldHdv
cmtQcm9jZXNzOjpSZXN1bWVEb3dubG9hZChkb3dubG9hZFByb3h5LT5kb3dubG9hZElEKCksIHJl
c3VtZURhdGEtPmRhdGFSZWZlcmVuY2UoKSwgcGF0aCwgc2FuZGJveEV4dGVuc2lvbkhhbmRsZSks
IDApOwogICAgICAgICByZXR1cm4gZG93bmxvYWRQcm94eTsKICAgICB9CiAKLSAgICBtX3Byb2Nl
c3Nlc1swXS0+c2VuZChNZXNzYWdlczo6V2ViUHJvY2Vzczo6UmVzdW1lRG93bmxvYWQoZG93bmxv
YWRQcm94eS0+ZG93bmxvYWRJRCgpLCByZXN1bWVEYXRhLT5kYXRhUmVmZXJlbmNlKCksIHBhdGgs
IHNhbmRib3hFeHRlbnNpb25IYW5kbGUpLCAwKTsKICAgICByZXR1cm4gZG93bmxvYWRQcm94eTsK
IH0KIApAQCAtOTU0LDcgKzkyNSw3IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldERvbWFpblJl
bGF4YXRpb24KIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldENhbkhhbmRsZUhUVFBTU2VydmVyVHJ1
c3RFdmFsdWF0aW9uKGJvb2wgdmFsdWUpCiB7CiAgICAgbV9jYW5IYW5kbGVIVFRQU1NlcnZlclRy
dXN0RXZhbHVhdGlvbiA9IHZhbHVlOwotICAgIGlmICh1c2VzTmV0d29ya1Byb2Nlc3MoKSAmJiBt
X25ldHdvcmtQcm9jZXNzKSB7CisgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpIHsKICAgICAgICAg
bV9uZXR3b3JrUHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldENhbkhh
bmRsZUhUVFBTU2VydmVyVHJ1c3RFdmFsdWF0aW9uKHZhbHVlKSwgMCk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CkBAIC0xMDI1LDcgKzk5Niw3IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldENh
Y2hlTW9kZWwoQ2FjaGUKICAgICBtX2NvbmZpZ3VyYXRpb24tPnNldENhY2hlTW9kZWwoY2FjaGVN
b2RlbCk7CiAgICAgc2VuZFRvQWxsUHJvY2Vzc2VzKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpTZXRD
YWNoZU1vZGVsKGNhY2hlTW9kZWwpKTsKIAotICAgIGlmICh1c2VzTmV0d29ya1Byb2Nlc3MoKSAm
JiBtX25ldHdvcmtQcm9jZXNzKQorICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQogICAgICAgICBt
X25ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0Q2FjaGVN
b2RlbChjYWNoZU1vZGVsKSwgMCk7CiB9CiAKQEAgLTEwMzYsMTMgKzEwMDcsOSBAQCB2b2lkIFdl
YlByb2Nlc3NQb29sOjpzZXREZWZhdWx0UmVxdWVzdFRpCiAKIERvd25sb2FkUHJveHkqIFdlYlBy
b2Nlc3NQb29sOjpjcmVhdGVEb3dubG9hZFByb3h5KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVx
dWVzdCkKIHsKLSAgICBpZiAodXNlc05ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgZW5zdXJl
TmV0d29ya1Byb2Nlc3MoKTsKLSAgICAgICAgQVNTRVJUKG1fbmV0d29ya1Byb2Nlc3MpOwotICAg
ICAgICByZXR1cm4gbV9uZXR3b3JrUHJvY2Vzcy0+Y3JlYXRlRG93bmxvYWRQcm94eShyZXF1ZXN0
KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZW5zdXJlU2hhcmVkV2ViUHJvY2VzcygpLmNyZWF0ZURv
d25sb2FkUHJveHkocmVxdWVzdCk7CisgICAgZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKKyAgICBB
U1NFUlQobV9uZXR3b3JrUHJvY2Vzcyk7CisgICAgcmV0dXJuIG1fbmV0d29ya1Byb2Nlc3MtPmNy
ZWF0ZURvd25sb2FkUHJveHkocmVxdWVzdCk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmFk
ZE1lc3NhZ2VSZWNlaXZlcihJUEM6OlN0cmluZ1JlZmVyZW5jZSBtZXNzYWdlUmVjZWl2ZXJOYW1l
LCBJUEM6Ok1lc3NhZ2VSZWNlaXZlciYgbWVzc2FnZVJlY2VpdmVyKQpAQCAtMTE1MiwyMiArMTEx
OSw4IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnVzZVRlc3RpbmdOZXR3b3JrU2UKIAogdm9pZCBX
ZWJQcm9jZXNzUG9vbDo6YWxsb3dTcGVjaWZpY0hUVFBTQ2VydGlmaWNhdGVGb3JIb3N0KGNvbnN0
IFdlYkNlcnRpZmljYXRlSW5mbyogY2VydGlmaWNhdGUsIGNvbnN0IFN0cmluZyYgaG9zdCkKIHsK
LSAgICBpZiAodXNlc05ldHdvcmtQcm9jZXNzKCkgJiYgbV9uZXR3b3JrUHJvY2VzcykgeworICAg
IGlmIChtX25ldHdvcmtQcm9jZXNzKQogICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kKE1l
c3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6QWxsb3dTcGVjaWZpY0hUVFBTQ2VydGlmaWNhdGVGb3JI
b3N0KGNlcnRpZmljYXRlLT5jZXJ0aWZpY2F0ZUluZm8oKSwgaG9zdCksIDApOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0jaWYgVVNFKFNPVVApCi0gICAgbV9wcm9jZXNzZXNbMF0tPnNlbmQo
TWVzc2FnZXM6OldlYlByb2Nlc3M6OkFsbG93U3BlY2lmaWNIVFRQU0NlcnRpZmljYXRlRm9ySG9z
dChjZXJ0aWZpY2F0ZS0+Y2VydGlmaWNhdGVJbmZvKCksIGhvc3QpLCAwKTsKLSAgICByZXR1cm47
Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShjZXJ0aWZpY2F0ZSk7Ci0gICAgVU5VU0VEX1BBUkFN
KGhvc3QpOwotI2VuZGlmCi0KLSNpZiAhUExBVEZPUk0oSU9TKQotICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotI2VuZGlmCiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldEhUVFBQaXBlbGlu
aW5nRW5hYmxlZChib29sIGVuYWJsZWQpCkBAIC0xMjIxLDcgKzExNzQsNyBAQCB2b2lkIFdlYlBy
b2Nlc3NQb29sOjpyZXF1ZXN0V2ViQ29udGVudFN0CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnJl
cXVlc3ROZXR3b3JraW5nU3RhdGlzdGljcyhTdGF0aXN0aWNzUmVxdWVzdCogcmVxdWVzdCkKIHsK
LSAgICBpZiAoIXVzZXNOZXR3b3JrUHJvY2VzcygpIHx8ICFtX25ldHdvcmtQcm9jZXNzKSB7Cisg
ICAgaWYgKCFtX25ldHdvcmtQcm9jZXNzKSB7CiAgICAgICAgIExPR19FUlJPUigiQXR0ZW1wdCB0
byBnZXQgTmV0d29ya1Byb2Nlc3Mgc3RhdGlzdGljcyBidXQgdGhlIE5ldHdvcmtQcm9jZXNzIGlz
IHVuYXZhaWxhYmxlIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CkluZGV4OiBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuaAkocmV2aXNpb24gMTkyNzUzKQorKysgU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmgJKHdvcmtpbmcgY29weSkKQEAg
LTI3NywxMCArMjc3LDYgQEAgcHVibGljOgogICAgIHZvaWQgc2V0UGx1Z0luQXV0b1N0YXJ0T3Jp
Z2luc0ZpbHRlcmluZ091dEVudHJpZXNBZGRlZEFmdGVyVGltZShBUEk6OkRpY3Rpb25hcnkmLCBk
b3VibGUgdGltZSk7CiAKICAgICAvLyBOZXR3b3JrIFByb2Nlc3MgTWFuYWdlbWVudAotCi0gICAg
dm9pZCBzZXRVc2VzTmV0d29ya1Byb2Nlc3MoYm9vbCk7Ci0gICAgYm9vbCB1c2VzTmV0d29ya1By
b2Nlc3MoKSBjb25zdDsKLQogICAgIE5ldHdvcmtQcm9jZXNzUHJveHkmIGVuc3VyZU5ldHdvcmtQ
cm9jZXNzKCk7CiAgICAgTmV0d29ya1Byb2Nlc3NQcm94eSogbmV0d29ya1Byb2Nlc3MoKSB7IHJl
dHVybiBtX25ldHdvcmtQcm9jZXNzLmdldCgpOyB9CiAgICAgdm9pZCBuZXR3b3JrUHJvY2Vzc0Ny
YXNoZWQoTmV0d29ya1Byb2Nlc3NQcm94eSopOwpAQCAtNTI1LDQzICs1MjEsMTUgQEAgcHJpdmF0
ZToKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZW5kVG9OZXR3
b3JraW5nUHJvY2VzcyhUJiYgbWVzc2FnZSkKIHsKLSAgICBzd2l0Y2ggKHByb2Nlc3NNb2RlbCgp
KSB7Ci0gICAgY2FzZSBQcm9jZXNzTW9kZWxTaGFyZWRTZWNvbmRhcnlQcm9jZXNzOgotICAgICAg
ICBpZiAodXNlc05ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAgIGlmIChtX25ldHdvcmtQ
cm9jZXNzICYmIG1fbmV0d29ya1Byb2Nlc3MtPmNhblNlbmRNZXNzYWdlKCkpCi0gICAgICAgICAg
ICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZChzdGQ6OmZvcndhcmQ8VD4obWVzc2FnZSksIDAp
OwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGlmICghbV9wcm9jZXNz
ZXMuaXNFbXB0eSgpICYmIG1fcHJvY2Vzc2VzWzBdLT5jYW5TZW5kTWVzc2FnZSgpKQotICAgICAg
ICAgICAgbV9wcm9jZXNzZXNbMF0tPnNlbmQoc3RkOjpmb3J3YXJkPFQ+KG1lc3NhZ2UpLCAwKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgUHJvY2Vzc01vZGVsTXVsdGlwbGVTZWNvbmRhcnlQ
cm9jZXNzZXM6Ci0gICAgICAgIGlmIChtX25ldHdvcmtQcm9jZXNzICYmIG1fbmV0d29ya1Byb2Nl
c3MtPmNhblNlbmRNZXNzYWdlKCkpCi0gICAgICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5k
KHN0ZDo6Zm9yd2FyZDxUPihtZXNzYWdlKSwgMCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0g
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MgJiYgbV9u
ZXR3b3JrUHJvY2Vzcy0+Y2FuU2VuZE1lc3NhZ2UoKSkKKyAgICAgICAgbV9uZXR3b3JrUHJvY2Vz
cy0+c2VuZChzdGQ6OmZvcndhcmQ8VD4obWVzc2FnZSksIDApOwogfQogCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPgogdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3NSZWxh
dW5jaGluZ0lmTmVjZXNzYXJ5KFQmJiBtZXNzYWdlKQogewotICAgIHN3aXRjaCAocHJvY2Vzc01v
ZGVsKCkpIHsKLSAgICBjYXNlIFByb2Nlc3NNb2RlbFNoYXJlZFNlY29uZGFyeVByb2Nlc3M6Ci0g
ICAgICAgIGlmICh1c2VzTmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICAgICAgZW5zdXJlTmV0
d29ya1Byb2Nlc3MoKTsKLSAgICAgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmQoc3RkOjpm
b3J3YXJkPFQ+KG1lc3NhZ2UpLCAwKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQot
ICAgICAgICBlbnN1cmVTaGFyZWRXZWJQcm9jZXNzKCk7Ci0gICAgICAgIG1fcHJvY2Vzc2VzWzBd
LT5zZW5kKHN0ZDo6Zm9yd2FyZDxUPihtZXNzYWdlKSwgMCk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICBjYXNlIFByb2Nlc3NNb2RlbE11bHRpcGxlU2Vjb25kYXJ5UHJvY2Vzc2VzOgotICAgICAgICBl
bnN1cmVOZXR3b3JrUHJvY2VzcygpOwotICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kKHN0
ZDo6Zm9yd2FyZDxUPihtZXNzYWdlKSwgMCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKKyAgICBt
X25ldHdvcmtQcm9jZXNzLT5zZW5kKHN0ZDo6Zm9yd2FyZDxUPihtZXNzYWdlKSwgMCk7CiB9CiAK
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2Vi
UHJvY2Vzc1Byb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
V2ViUHJvY2Vzc1Byb3h5LmNwcAkocmV2aXNpb24gMTkyNzUzKQorKysgU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwMiw5ICsy
MDIsNiBAQCB2b2lkIFdlYlByb2Nlc3NQcm94eTo6c2h1dERvd24oKQogICAgICAgICBmcmFtZXNb
aV0tPndlYlByb2Nlc3NXaWxsU2h1dERvd24oKTsKICAgICBtX2ZyYW1lTWFwLmNsZWFyKCk7CiAK
LSAgICBpZiAobV9kb3dubG9hZFByb3h5TWFwKQotICAgICAgICBtX2Rvd25sb2FkUHJveHlNYXAt
PnByb2Nlc3NEaWRDbG9zZSgpOwotCiAgICAgZm9yIChWaXNpdGVkTGlua1N0b3JlKiB2aXNpdGVk
TGlua1N0b3JlIDogbV92aXNpdGVkTGlua1N0b3JlcykKICAgICAgICAgdmlzaXRlZExpbmtTdG9y
ZS0+cmVtb3ZlUHJvY2VzcygqdGhpcyk7CiAgICAgbV92aXNpdGVkTGlua1N0b3Jlcy5jbGVhcigp
OwpAQCAtMjU2LDcgKzI1Myw3IEBAIHZvaWQgV2ViUHJvY2Vzc1Byb3h5OjpyZW1vdmVXZWJQYWdl
KHVpbnQKIAogICAgIC8vIElmIHRoaXMgd2FzIHRoZSBsYXN0IFdlYlBhZ2Ugb3BlbiBpbiB0aGF0
IHdlYiBwcm9jZXNzLCBhbmQgd2UgaGF2ZSBubyBvdGhlciByZWFzb24gdG8ga2VlcCBpdCBhbGl2
ZSwgbGV0IGl0IGdvLgogICAgIC8vIFdlIG9ubHkgYWxsb3cgdGhpcyB3aGVuIHVzaW5nIGEgbmV0
d29yayBwcm9jZXNzLCBhcyBvdGhlcndpc2UgdGhlIFdlYlByb2Nlc3MgbmVlZHMgdG8gcHJlc2Vy
dmUgaXRzIHNlc3Npb24gc3RhdGUuCi0gICAgaWYgKCFtX3Byb2Nlc3NQb29sLT51c2VzTmV0d29y
a1Byb2Nlc3MoKSB8fCBzdGF0ZSgpID09IFN0YXRlOjpUZXJtaW5hdGVkIHx8ICFjYW5UZXJtaW5h
dGVDaGlsZFByb2Nlc3MoKSkKKyAgICBpZiAoc3RhdGUoKSA9PSBTdGF0ZTo6VGVybWluYXRlZCB8
fCAhY2FuVGVybWluYXRlQ2hpbGRQcm9jZXNzKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIHNo
dXREb3duKCk7CkBAIC02NTUsOSArNjUyLDYgQEAgYm9vbCBXZWJQcm9jZXNzUHJveHk6OmNhblRl
cm1pbmF0ZUNoaWxkUAogICAgIGlmICghbV9wYWdlTWFwLmlzRW1wdHkoKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgaWYgKG1fZG93bmxvYWRQcm94eU1hcCAmJiAhbV9kb3dubG9hZFBy
b3h5TWFwLT5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQogICAgIGlmICghbV9w
ZW5kaW5nRGVsZXRlV2Vic2l0ZURhdGFDYWxsYmFja3MuaXNFbXB0eSgpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKQEAgLTcwMCwxNiArNjk0LDYgQEAgdm9pZCBXZWJQcm9jZXNzUHJveHk6OnVw
ZGF0ZVRleHRDaGVja2VyUwogICAgICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpTZXRU
ZXh0Q2hlY2tlclN0YXRlKFRleHRDaGVja2VyOjpzdGF0ZSgpKSwgMCk7CiB9CiAKLURvd25sb2Fk
UHJveHkqIFdlYlByb2Nlc3NQcm94eTo6Y3JlYXRlRG93bmxvYWRQcm94eShjb25zdCBSZXNvdXJj
ZVJlcXVlc3QmIHJlcXVlc3QpCi17Ci0gICAgQVNTRVJUKCFtX3Byb2Nlc3NQb29sLT51c2VzTmV0
d29ya1Byb2Nlc3MoKSk7Ci0KLSAgICBpZiAoIW1fZG93bmxvYWRQcm94eU1hcCkKLSAgICAgICAg
bV9kb3dubG9hZFByb3h5TWFwID0gc3RkOjptYWtlX3VuaXF1ZTxEb3dubG9hZFByb3h5TWFwPih0
aGlzKTsKLQotICAgIHJldHVybiBtX2Rvd25sb2FkUHJveHlNYXAtPmNyZWF0ZURvd25sb2FkUHJv
eHkobV9wcm9jZXNzUG9vbCwgcmVxdWVzdCk7Ci19Ci0KIHZvaWQgV2ViUHJvY2Vzc1Byb3h5Ojpk
aWRTYXZlVG9QYWdlQ2FjaGUoKQogewogICAgIG1fcHJvY2Vzc1Bvb2wtPnByb2Nlc3NEaWRDYWNo
ZVBhZ2UodGhpcyk7CkBAIC05NzIsMTQgKzk1NiwxMiBAQCB2b2lkIFdlYlByb2Nlc3NQcm94eTo6
ZGlkU2V0QXNzZXJ0aW9uU3RhCiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBBc3NlcnRpb25T
dGF0ZTo6QmFja2dyb3VuZDoKLSAgICAgICAgaWYgKHByb2Nlc3NQb29sKCkudXNlc05ldHdvcmtQ
cm9jZXNzKCkpCi0gICAgICAgICAgICBtX2JhY2tncm91bmRUb2tlbkZvck5ldHdvcmtQcm9jZXNz
ID0gcHJvY2Vzc1Bvb2woKS5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnRocm90dGxlcigpLmJhY2tn
cm91bmRBY3Rpdml0eVRva2VuKCk7CisgICAgICAgIG1fYmFja2dyb3VuZFRva2VuRm9yTmV0d29y
a1Byb2Nlc3MgPSBwcm9jZXNzUG9vbCgpLmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkudGhyb3R0bGVy
KCkuYmFja2dyb3VuZEFjdGl2aXR5VG9rZW4oKTsKICAgICAgICAgbV9mb3JlZ3JvdW5kVG9rZW5G
b3JOZXR3b3JrUHJvY2VzcyA9IG51bGxwdHI7CiAgICAgICAgIGJyZWFrOwogICAgIAogICAgIGNh
c2UgQXNzZXJ0aW9uU3RhdGU6OkZvcmVncm91bmQ6Ci0gICAgICAgIGlmIChwcm9jZXNzUG9vbCgp
LnVzZXNOZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgbV9mb3JlZ3JvdW5kVG9rZW5Gb3JO
ZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sKCkuZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS50aHJv
dHRsZXIoKS5mb3JlZ3JvdW5kQWN0aXZpdHlUb2tlbigpOworICAgICAgICBtX2ZvcmVncm91bmRU
b2tlbkZvck5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2woKS5lbnN1cmVOZXR3b3JrUHJvY2Vz
cygpLnRocm90dGxlcigpLmZvcmVncm91bmRBY3Rpdml0eVRva2VuKCk7CiAgICAgICAgIG1fYmFj
a2dyb3VuZFRva2VuRm9yTmV0d29ya1Byb2Nlc3MgPSBudWxscHRyOwogICAgICAgICBmb3IgKGF1
dG8mIHBhZ2UgOiBtX3BhZ2VNYXAudmFsdWVzKCkpCiAgICAgICAgICAgICBwYWdlLT5wcm9jZXNz
V2lsbEJlY29tZUZvcmVncm91bmQoKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9X
ZWJQcm9jZXNzUHJveHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
V2ViUHJvY2Vzc1Byb3h5LmgJKHJldmlzaW9uIDE5Mjc1MykKKysrIFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtNTgsNyArNTgsNiBA
QCBzdHJ1Y3QgUGx1Z2luSW5mbzsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLWNsYXNzIERvd25s
b2FkUHJveHlNYXA7CiBjbGFzcyBOZXR3b3JrUHJvY2Vzc1Byb3h5OwogY2xhc3MgV2ViQmFja0Zv
cndhcmRMaXN0SXRlbTsKIGNsYXNzIFdlYlBhZ2VHcm91cDsKQEAgLTEyMCw4ICsxMTksNiBAQCBw
dWJsaWM6CiAKICAgICBzdGF0aWMgYm9vbCBmdWxsS2V5Ym9hcmRBY2Nlc3NFbmFibGVkKCk7CiAK
LSAgICBEb3dubG9hZFByb3h5KiBjcmVhdGVEb3dubG9hZFByb3h5KGNvbnN0IFdlYkNvcmU6OlJl
c291cmNlUmVxdWVzdCYpOwotCiAgICAgdm9pZCBkaWRTYXZlVG9QYWdlQ2FjaGUoKTsKICAgICB2
b2lkIHJlbGVhc2VQYWdlQ2FjaGUoKTsKIApAQCAtMjQyLDcgKzIzOSw2IEBAIHByaXZhdGU6CiAg
ICAgSGFzaFNldDxWaXNpdGVkTGlua1N0b3JlKj4gbV92aXNpdGVkTGlua1N0b3JlczsKICAgICBI
YXNoU2V0PFdlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5Kj4gbV93ZWJVc2VyQ29udGVudENv
bnRyb2xsZXJQcm94aWVzOwogCi0gICAgc3RkOjp1bmlxdWVfcHRyPERvd25sb2FkUHJveHlNYXA+
IG1fZG93bmxvYWRQcm94eU1hcDsKICAgICBDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eSBtX2N1
c3RvbVByb3RvY29sTWFuYWdlclByb3h5OwogCiAgICAgSGFzaE1hcDx1aW50NjRfdCwgc3RkOjpm
dW5jdGlvbjx2b2lkIChXZWJzaXRlRGF0YSk+PiBtX3BlbmRpbmdGZXRjaFdlYnNpdGVEYXRhQ2Fs
bGJhY2tzOwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9BUElQcm9jZXNzUG9v
bENvbmZpZ3VyYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvQVBJUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmNwcAkocmV2aXNpb24gMTkyNzUzKQor
KysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9BUElQcm9jZXNzUG9vbENvbmZpZ3VyYXRp
b24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0Miw2IEBAIFJlZjxQcm9jZXNzUG9vbENv
bmZpZ3VyYXRpb24+IFByb2Nlc3NQb28KIAogICAgIGNvbmZpZ3VyYXRpb24tPm1fc2hvdWxkSGF2
ZUxlZ2FjeURhdGFTdG9yZSA9IHRydWU7CiAgICAgY29uZmlndXJhdGlvbi0+bV9wcm9jZXNzTW9k
ZWwgPSBXZWJLaXQ6OlByb2Nlc3NNb2RlbFNoYXJlZFNlY29uZGFyeVByb2Nlc3M7Ci0gICAgY29u
ZmlndXJhdGlvbi0+bV91c2VOZXR3b3JrUHJvY2VzcyA9IGZhbHNlOwogICAgIGNvbmZpZ3VyYXRp
b24tPm1fY2FjaGVNb2RlbCA9IFdlYktpdDo6Q2FjaGVNb2RlbERvY3VtZW50Vmlld2VyOwogCiAg
ICAgY29uZmlndXJhdGlvbi0+bV9hcHBsaWNhdGlvbkNhY2hlRGlyZWN0b3J5ID0gV2ViS2l0OjpX
ZWJQcm9jZXNzUG9vbDo6bGVnYWN5UGxhdGZvcm1EZWZhdWx0QXBwbGljYXRpb25DYWNoZURpcmVj
dG9yeSgpOwpAQCAtNzUsNyArNzQsNiBAQCBSZWY8UHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uPiBQ
cm9jZXNzUG9vCiAKICAgICBjb3B5LT5tX3Nob3VsZEhhdmVMZWdhY3lEYXRhU3RvcmUgPSB0aGlz
LT5tX3Nob3VsZEhhdmVMZWdhY3lEYXRhU3RvcmU7CiAgICAgY29weS0+bV9wcm9jZXNzTW9kZWwg
PSB0aGlzLT5tX3Byb2Nlc3NNb2RlbDsKLSAgICBjb3B5LT5tX3VzZU5ldHdvcmtQcm9jZXNzID0g
dGhpcy0+bV91c2VOZXR3b3JrUHJvY2VzczsKICAgICBjb3B5LT5tX21heGltdW1Qcm9jZXNzQ291
bnQgPSB0aGlzLT5tX21heGltdW1Qcm9jZXNzQ291bnQ7CiAgICAgY29weS0+bV9jYWNoZU1vZGVs
ID0gdGhpcy0+bV9jYWNoZU1vZGVsOwogICAgIGNvcHktPm1fZGlza0NhY2hlU2l6ZU92ZXJyaWRl
ID0gdGhpcy0+bV9kaXNrQ2FjaGVTaXplT3ZlcnJpZGU7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL0FQSVByb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQVBJUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9u
LmgJKHJldmlzaW9uIDE5Mjc1MykKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQVBJ
UHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDkgKzUxLDYg
QEAgcHVibGljOgogICAgIFdlYktpdDo6UHJvY2Vzc01vZGVsIHByb2Nlc3NNb2RlbCgpIGNvbnN0
IHsgcmV0dXJuIG1fcHJvY2Vzc01vZGVsOyB9CiAgICAgdm9pZCBzZXRQcm9jZXNzTW9kZWwoV2Vi
S2l0OjpQcm9jZXNzTW9kZWwgcHJvY2Vzc01vZGVsKSB7IG1fcHJvY2Vzc01vZGVsID0gcHJvY2Vz
c01vZGVsOyB9IAogCi0gICAgYm9vbCB1c2VOZXR3b3JrUHJvY2VzcygpIGNvbnN0IHsgcmV0dXJu
IG1fdXNlTmV0d29ya1Byb2Nlc3M7IH0KLSAgICB2b2lkIHNldFVzZU5ldHdvcmtQcm9jZXNzKGJv
b2wgdXNlTmV0d29ya1Byb2Nlc3MpIHsgbV91c2VOZXR3b3JrUHJvY2VzcyA9IHVzZU5ldHdvcmtQ
cm9jZXNzOyB9IAotCiAgICAgdW5zaWduZWQgbWF4aW11bVByb2Nlc3NDb3VudCgpIGNvbnN0IHsg
cmV0dXJuIG1fbWF4aW11bVByb2Nlc3NDb3VudDsgfQogICAgIHZvaWQgc2V0TWF4aW11bVByb2Nl
c3NDb3VudCh1bnNpZ25lZCBtYXhpbXVtUHJvY2Vzc0NvdW50KSB7IG1fbWF4aW11bVByb2Nlc3ND
b3VudCA9IG1heGltdW1Qcm9jZXNzQ291bnQ7IH0gCiAKQEAgLTk3LDcgKzk0LDYgQEAgcHJpdmF0
ZToKICAgICBib29sIG1fc2hvdWxkSGF2ZUxlZ2FjeURhdGFTdG9yZSB7IGZhbHNlIH07CiAKICAg
ICBXZWJLaXQ6OlByb2Nlc3NNb2RlbCBtX3Byb2Nlc3NNb2RlbCB7IFdlYktpdDo6UHJvY2Vzc01v
ZGVsTXVsdGlwbGVTZWNvbmRhcnlQcm9jZXNzZXMgfTsKLSAgICBib29sIG1fdXNlTmV0d29ya1By
b2Nlc3MgeyB0cnVlIH07CiAgICAgdW5zaWduZWQgbV9tYXhpbXVtUHJvY2Vzc0NvdW50IHsgMCB9
OwogICAgIFdlYktpdDo6Q2FjaGVNb2RlbCBtX2NhY2hlTW9kZWwgeyBXZWJLaXQ6OkNhY2hlTW9k
ZWxQcmltYXJ5V2ViQnJvd3NlciB9OwogICAgIGludDY0X3QgbV9kaXNrQ2FjaGVTaXplT3ZlcnJp
ZGUgeyAtMSB9OwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLQ29u
dGV4dC5jcHAJKHJldmlzaW9uIDE5Mjc1MykKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvQy9XS0NvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NTQsMTEgKzU1NCw2IEBAIHZv
aWQgV0tDb250ZXh0U2V0SmF2YVNjcmlwdEdhcmJhZ2VDb2xsZWMKICAgICB0b0ltcGwoY29udGV4
dFJlZiktPnNldEphdmFTY3JpcHRHYXJiYWdlQ29sbGVjdG9yVGltZXJFbmFibGVkKGVuYWJsZSk7
CiB9CiAKLXZvaWQgV0tDb250ZXh0U2V0VXNlc05ldHdvcmtQcm9jZXNzKFdLQ29udGV4dFJlZiBj
b250ZXh0UmVmLCBib29sIHVzZXNOZXR3b3JrUHJvY2VzcykKLXsKLSAgICB0b0ltcGwoY29udGV4
dFJlZiktPnNldFVzZXNOZXR3b3JrUHJvY2Vzcyh1c2VzTmV0d29ya1Byb2Nlc3MpOwotfQotCiB2
b2lkIFdLQ29udGV4dFVzZVRlc3RpbmdOZXR3b3JrU2Vzc2lvbihXS0NvbnRleHRSZWYgY29udGV4
dCkKIHsKICAgICB0b0ltcGwoY29udGV4dCktPnVzZVRlc3RpbmdOZXR3b3JrU2Vzc2lvbigpOwpJ
bmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dFByaXZhdGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0UHJp
dmF0ZS5oCShyZXZpc2lvbiAxOTI3NTMpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L0MvV0tDb250ZXh0UHJpdmF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03Nyw3ICs3Nyw3IEBAIFdL
X0VYUE9SVCB2b2lkIFdLQ29udGV4dFdhcm1Jbml0aWFsUHJvY2UKIAogLy8gRklYTUU6IFRoaXMg
ZnVuY3Rpb24gaXMgdGVtcG9yYXJ5IGFuZCB1c2VmdWwgZHVyaW5nIHRoZSBkZXZlbG9wbWVudCBv
ZiB0aGUgTmV0d29ya1Byb2Nlc3MgZmVhdHVyZS4KIC8vIEF0IHNvbWUgcG9pbnQgaXQgc2hvdWxk
IGJlIHJlbW92ZWQuCi1XS19FWFBPUlQgdm9pZCBXS0NvbnRleHRTZXRVc2VzTmV0d29ya1Byb2Nl
c3MoV0tDb250ZXh0UmVmIGNvbnRleHQsIGJvb2wgdXNlc05ldHdvcmtQcm9jZXNzKTsKK1dLX0VY
UE9SVCB2b2lkIFdLQ29udGV4dFNldFVzZXNOZXR3b3JrUHJvY2VzcyhXS0NvbnRleHRSZWYsIGJv
b2wpOwogCiAvLyBUZXN0IG9ubHkuIFNob3VsZCBiZSBjYWxsZWQgYmVmb3JlIGFueSBzZWNvbmRh
cnkgcHJvY2Vzc2VzIGFyZSBzdGFydGVkLgogV0tfRVhQT1JUIHZvaWQgV0tDb250ZXh0VXNlVGVz
dGluZ05ldHdvcmtTZXNzaW9uKFdLQ29udGV4dFJlZiBjb250ZXh0KTsKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcm9jZXNzR3JvdXAubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1Byb2Nlc3NHcm91cC5tbQko
cmV2aXNpb24gMTkyNzUzKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9X
S1Byb2Nlc3NHcm91cC5tbQkod29ya2luZyBjb3B5KQpAQCAtMTkzLDcgKzE5Myw2IEBAIC0gKGlk
KWluaXRXaXRoSW5qZWN0ZWRCdW5kbGVVUkw6KE5TVVJMICoKICAgICBhdXRvIGNvbmZpZ3VyYXRp
b24gPSBBUEk6OlByb2Nlc3NQb29sQ29uZmlndXJhdGlvbjo6Y3JlYXRlV2l0aExlZ2FjeU9wdGlv
bnMoKTsKICAgICBjb25maWd1cmF0aW9uLT5zZXRJbmplY3RlZEJ1bmRsZVBhdGgoYnVuZGxlVVJM
ID8gU3RyaW5nKGJ1bmRsZVVSTC5wYXRoKSA6IFN0cmluZygpKTsKICNpZiBQTEFURk9STShJT1Mp
Ci0gICAgY29uZmlndXJhdGlvbi0+c2V0VXNlTmV0d29ya1Byb2Nlc3ModHJ1ZSk7CiAgICAgY29u
ZmlndXJhdGlvbi0+c2V0UHJvY2Vzc01vZGVsKFByb2Nlc3NNb2RlbE11bHRpcGxlU2Vjb25kYXJ5
UHJvY2Vzc2VzKTsKICNlbmRpZgogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2VmbC9ld2tfY29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQuY3BwCShyZXZpc2lvbiAxOTI3NTMpCisrKyBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI3Nyw3ICsyNzcsNiBAQCB2b2lkIEV3a0NvbnRleHQ6OnNldFByb2Nlc3NNb2RlbChFd2tf
UHJvCiAgICAgaWYgKFdLQ29udGV4dEdldFByb2Nlc3NNb2RlbChtX2NvbnRleHQuZ2V0KCkpID09
IG5ld1dLUHJvY2Vzc01vZGVsKQogICAgICAgICByZXR1cm47CiAKLSAgICBXS0NvbnRleHRTZXRV
c2VzTmV0d29ya1Byb2Nlc3MobV9jb250ZXh0LmdldCgpLCBuZXdXS1Byb2Nlc3NNb2RlbCA9PSBr
V0tQcm9jZXNzTW9kZWxNdWx0aXBsZVNlY29uZGFyeVByb2Nlc3Nlcyk7CiAgICAgV0tDb250ZXh0
U2V0UHJvY2Vzc01vZGVsKG1fY29udGV4dC5nZXQoKSwgbmV3V0tQcm9jZXNzTW9kZWwpOwogfQog
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJDb250ZXh0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJL
aXRXZWJDb250ZXh0LmNwcAkocmV2aXNpb24gMTkyNzUzKQorKysgU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4
Niw3ICsyODYsNiBAQCBzdGF0aWMgdm9pZCB3ZWJraXRXZWJDb250ZXh0Q29uc3RydWN0ZWQoCiAg
ICAgQVBJOjpQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbjsKICAgICBjb25m
aWd1cmF0aW9uLnNldEluamVjdGVkQnVuZGxlUGF0aChXZWJDb3JlOjpmaWxlbmFtZVRvU3RyaW5n
KGJ1bmRsZUZpbGVuYW1lLmdldCgpKSk7CiAgICAgY29uZmlndXJhdGlvbi5zZXRQcm9jZXNzTW9k
ZWwoUHJvY2Vzc01vZGVsU2hhcmVkU2Vjb25kYXJ5UHJvY2Vzcyk7Ci0gICAgY29uZmlndXJhdGlv
bi5zZXRVc2VOZXR3b3JrUHJvY2VzcyhmYWxzZSk7CiAKICAgICBXZWJLaXRXZWJDb250ZXh0KiB3
ZWJDb250ZXh0ID0gV0VCS0lUX1dFQl9DT05URVhUKG9iamVjdCk7CiAgICAgV2ViS2l0V2ViQ29u
dGV4dFByaXZhdGUqIHByaXYgPSB3ZWJDb250ZXh0LT5wcml2OwpAQCAtMTE3NCw3ICsxMTczLDYg
QEAgdm9pZCB3ZWJraXRfd2ViX2NvbnRleHRfc2V0X3Byb2Nlc3NfbW9kZQogICAgIGlmIChuZXdQ
cm9jZXNzTW9kZWwgPT0gY29udGV4dC0+cHJpdi0+Y29udGV4dC0+cHJvY2Vzc01vZGVsKCkpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIGNvbnRleHQtPnByaXYtPmNvbnRleHQtPnNldFVzZXNOZXR3
b3JrUHJvY2VzcyhuZXdQcm9jZXNzTW9kZWwgPT0gUHJvY2Vzc01vZGVsTXVsdGlwbGVTZWNvbmRh
cnlQcm9jZXNzZXMpOwogICAgIGNvbnRleHQtPnByaXYtPmNvbnRleHQtPnNldFByb2Nlc3NNb2Rl
bChuZXdQcm9jZXNzTW9kZWwpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
Q29jb2EvV2ViUHJvY2Vzc1Bvb2xDb2NvYS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Bvb2xDb2NvYS5tbQkocmV2aXNpb24gMTkyNzUz
KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQb29sQ29jb2Eu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTExNCw3ICsxMTQsNyBAQCBzdGF0aWMgdm9pZCByZWdpc3Rl
clVzZXJEZWZhdWx0c0lmTmVlZGVkCiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnVwZGF0ZVByb2Nl
c3NTdXBwcmVzc2lvblN0YXRlKCkKIHsKLSAgICBpZiAodXNlc05ldHdvcmtQcm9jZXNzKCkgJiYg
bV9uZXR3b3JrUHJvY2VzcykKKyAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKICAgICAgICAgbV9u
ZXR3b3JrUHJvY2Vzcy0+c2V0UHJvY2Vzc1N1cHByZXNzaW9uRW5hYmxlZChwcm9jZXNzU3VwcHJl
c3Npb25FbmFibGVkKCkpOwogCiAjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCkBAIC0x
OTAsMTEgKzE5MCw2IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnBsYXRmb3JtSW5pdGlhbGl6ZVcK
IAogICAgIHBhcmFtZXRlcnMudWlQcm9jZXNzQnVuZGxlSWRlbnRpZmllciA9IFN0cmluZyhbW05T
QnVuZGxlIG1haW5CdW5kbGVdIGJ1bmRsZUlkZW50aWZpZXJdKTsKIAotICAgIGlmICghdXNlc05l
dHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgZm9yIChjb25zdCBhdXRvJiBzY2hlbWUgOiBnbG9i
YWxVUkxTY2hlbWVzV2l0aEN1c3RvbVByb3RvY29sSGFuZGxlcnMoKSkKLSAgICAgICAgICAgIHBh
cmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRGb3JDdXN0b21Qcm90b2NvbHMuYXBwZW5kKHNj
aGVtZSk7Ci0gICAgfQotCiAgICAgcGFyYW1ldGVycy5mb250V2hpdGVsaXN0ID0gbV9mb250V2hp
dGVsaXN0OwogCiAgICAgaWYgKG1fYnVuZGxlUGFyYW1ldGVycykgewpJbmRleDogU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHkuY3BwCShy
ZXZpc2lvbiAxOTI3NTMpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRG93bmxvYWRzL0Rv
d25sb2FkUHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MSwxMyArNzEsOCBAQCB2b2lkIERv
d25sb2FkUHJveHk6OmNhbmNlbCgpCiAgICAgaWYgKCFtX3Byb2Nlc3NQb29sKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBpZiAobV9wcm9jZXNzUG9vbC0+dXNlc05ldHdvcmtQcm9jZXNzKCkpIHsK
LSAgICAgICAgaWYgKE5ldHdvcmtQcm9jZXNzUHJveHkqIG5ldHdvcmtQcm9jZXNzID0gbV9wcm9j
ZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5j
b25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpDYW5jZWxEb3dubG9h
ZChtX2Rvd25sb2FkSUQpLCAwKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1fcHJv
Y2Vzc1Bvb2wtPnNlbmRUb0FsbFByb2Nlc3NlcyhNZXNzYWdlczo6V2ViUHJvY2Vzczo6Q2FuY2Vs
RG93bmxvYWQobV9kb3dubG9hZElEKSk7CisgICAgaWYgKE5ldHdvcmtQcm9jZXNzUHJveHkqIG5l
dHdvcmtQcm9jZXNzID0gbV9wcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKKyAgICAgICAg
bmV0d29ya1Byb2Nlc3MtPmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nl
c3M6OkNhbmNlbERvd25sb2FkKG1fZG93bmxvYWRJRCksIDApOwogfQogCiB2b2lkIERvd25sb2Fk
UHJveHk6OmludmFsaWRhdGUoKQpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9X
ZWJQcm9jZXNzUG9vbEd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL2d0ay9XZWJQcm9jZXNzUG9vbEd0ay5jcHAJKHJldmlzaW9uIDE5Mjc1MykKKysrIFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2ViUHJvY2Vzc1Bvb2xHdGsuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC05NSwxNiArOTUsNiBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpwbGF0Zm9ybUluaXRp
YWxpemVXCiAgICAgICAgIHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRBc0xvY2FsLmFw
cGVuZCgicmVzb3VyY2UiKTsKICAgICB9CiAKLSAgICBpZiAoIXVzZXNOZXR3b3JrUHJvY2Vzcygp
KSB7Ci0gICAgICAgIHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRGb3JDdXN0b21Qcm90
b2NvbHMgPSBzdXBwbGVtZW50PFdlYlNvdXBDdXN0b21Qcm90b2NvbFJlcXVlc3RNYW5hZ2VyPigp
LT5yZWdpc3RlcmVkU2NoZW1lc0ZvckN1c3RvbVByb3RvY29scygpOwotCi0gICAgICAgIHN1cHBs
ZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5PigpLT5nZXRDb29raWVQZXJzaXN0ZW50U3RvcmFn
ZShwYXJhbWV0ZXJzLmNvb2tpZVBlcnNpc3RlbnRTdG9yYWdlUGF0aCwgcGFyYW1ldGVycy5jb29r
aWVQZXJzaXN0ZW50U3RvcmFnZVR5cGUpOwotICAgICAgICBwYXJhbWV0ZXJzLmNvb2tpZUFjY2Vw
dFBvbGljeSA9IG1faW5pdGlhbEhUVFBDb29raWVBY2NlcHRQb2xpY3k7Ci0KLSAgICAgICAgcGFy
YW1ldGVycy5pZ25vcmVUTFNFcnJvcnMgPSBtX2lnbm9yZVRMU0Vycm9yczsKLSAgICAgICAgcGFy
YW1ldGVycy5kaXNrQ2FjaGVEaXJlY3RvcnkgPSBtX2NvbmZpZ3VyYXRpb24tPmRpc2tDYWNoZURp
cmVjdG9yeSgpOwotICAgIH0KLQogICAgIHBhcmFtZXRlcnMubWVtb3J5Q2FjaGVEaXNhYmxlZCA9
IG1fbWVtb3J5Q2FjaGVEaXNhYmxlZCB8fCBjYWNoZU1vZGVsKCkgPT0gQ2FjaGVNb2RlbERvY3Vt
ZW50Vmlld2VyOwogfQogCkBAIC0xNDYsMTEgKzEzNiwxMCBAQCBTdHJpbmcgV2ViUHJvY2Vzc1Bv
b2w6OmxlZ2FjeVBsYXRmb3JtRGVmCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXRJZ25vcmVUTFNF
cnJvcnMoYm9vbCBpZ25vcmVUTFNFcnJvcnMpCiB7CiAgICAgbV9pZ25vcmVUTFNFcnJvcnMgPSBp
Z25vcmVUTFNFcnJvcnM7Ci0gICAgaWYgKHVzZXNOZXR3b3JrUHJvY2VzcygpICYmIG5ldHdvcmtQ
cm9jZXNzKCkpIHsKKyAgICBpZiAobmV0d29ya1Byb2Nlc3MoKSkgewogICAgICAgICBuZXR3b3Jr
UHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0SWdub3JlVExTRXJy
b3JzKG1faWdub3JlVExTRXJyb3JzKSwgMCk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAg
c2VuZFRvQWxsUHJvY2Vzc2VzKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpTZXRJZ25vcmVUTFNFcnJv
cnMobV9pZ25vcmVUTFNFcnJvcnMpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4
OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAJKHJldmlzaW9uIDE5Mjc1
MykKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE1Niw3ICsxNTYsNiBAQCBXZWJQcm9jZXNzOjpXZWJQcm9jZXNzKCkKICAgICAs
IG1fZnVsbEtleWJvYXJkQWNjZXNzRW5hYmxlZChmYWxzZSkKICAgICAsIG1fdGV4dENoZWNrZXJT
dGF0ZSgpCiAgICAgLCBtX2ljb25EYXRhYmFzZVByb3h5KG5ldyBXZWJJY29uRGF0YWJhc2VQcm94
eSh0aGlzKSkKLSAgICAsIG1fdXNlc05ldHdvcmtQcm9jZXNzKGZhbHNlKQogICAgICwgbV93ZWJS
ZXNvdXJjZUxvYWRTY2hlZHVsZXIobmV3IFdlYlJlc291cmNlTG9hZFNjaGVkdWxlcikKICAgICAs
IG1fZG5zUHJlZmV0Y2hIeXN0ZXJlcmlzKFt0aGlzXShIeXN0ZXJlc2lzU3RhdGUgc3RhdGUpIHsg
aWYgKHN0YXRlID09IEh5c3RlcmVzaXNTdGF0ZTo6U3RvcHBlZCkgbV9kbnNQcmVmZXRjaGVkSG9z
dHMuY2xlYXIoKTsgfSkKICNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKQEAgLTI0NSwz
MiArMjQ0LDEwIEBAIHZvaWQgV2ViUHJvY2Vzczo6aW5pdGlhbGl6ZUNvbm5lY3Rpb24oSVAKICAg
ICBjb25uZWN0aW9uLT5zZXRPbmx5U2VuZE1lc3NhZ2VzQXNEaXNwYXRjaFdoZW5XYWl0aW5nRm9y
U3luY1JlcGx5V2hlblByb2Nlc3NpbmdTdWNoQU1lc3NhZ2UodHJ1ZSk7CiB9CiAKLXZvaWQgV2Vi
UHJvY2Vzczo6ZGlkQ3JlYXRlRG93bmxvYWQoKQotewotICAgIGRpc2FibGVUZXJtaW5hdGlvbigp
OwotfQotCi12b2lkIFdlYlByb2Nlc3M6OmRpZERlc3Ryb3lEb3dubG9hZCgpCi17Ci0gICAgZW5h
YmxlVGVybWluYXRpb24oKTsKLX0KLQotSVBDOjpDb25uZWN0aW9uKiBXZWJQcm9jZXNzOjpkb3du
bG9hZFByb3h5Q29ubmVjdGlvbigpCi17Ci0gICAgcmV0dXJuIHBhcmVudFByb2Nlc3NDb25uZWN0
aW9uKCk7Ci19Ci0KLUF1dGhlbnRpY2F0aW9uTWFuYWdlciYgV2ViUHJvY2Vzczo6ZG93bmxvYWRz
QXV0aGVudGljYXRpb25NYW5hZ2VyKCkKLXsKLSAgICByZXR1cm4gKnN1cHBsZW1lbnQ8QXV0aGVu
dGljYXRpb25NYW5hZ2VyPigpOwotfQotCiB2b2lkIFdlYlByb2Nlc3M6OmluaXRpYWxpemVXZWJQ
cm9jZXNzKFdlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmJiBwYXJhbWV0ZXJzKQogewogICAg
IEFTU0VSVChtX3BhZ2VNYXAuaXNFbXB0eSgpKTsKIAotICAgIG1fdXNlc05ldHdvcmtQcm9jZXNz
ID0gcGFyYW1ldGVycy51c2VzTmV0d29ya1Byb2Nlc3M7Ci0KICNpZiBPUyhMSU5VWCkKICAgICBX
ZWJDb3JlOjpNZW1vcnlQcmVzc3VyZUhhbmRsZXI6OlJlbGllZkxvZ2dlcjo6c2V0TG9nZ2luZ0Vu
YWJsZWQocGFyYW1ldGVycy5zaG91bGRFbmFibGVNZW1vcnlQcmVzc3VyZVJlbGllZkxvZ2dpbmcp
OwogI2VuZGlmCkBAIC0zNTIsOCArMzI5LDcgQEAgdm9pZCBXZWJQcm9jZXNzOjppbml0aWFsaXpl
V2ViUHJvY2VzcyhXZQogICAgIGVuc3VyZU5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbigpOwogCiAj
aWYgUExBVEZPUk0oQ09DT0EpCi0gICAgaWYgKHVzZXNOZXR3b3JrUHJvY2VzcygpKQotICAgICAg
ICBDb29raWVTdG9yYWdlU2hpbTo6c2luZ2xldG9uKCkuaW5pdGlhbGl6ZSgpOworICAgIENvb2tp
ZVN0b3JhZ2VTaGltOjpzaW5nbGV0b24oKS5pbml0aWFsaXplKCk7CiAjZW5kaWYKICAgICBzZXRU
ZXJtaW5hdGlvblRpbWVvdXQocGFyYW1ldGVycy50ZXJtaW5hdGlvblRpbWVvdXQpOwogCkBAIC0z
ODcsOSArMzYzLDYgQEAgdm9pZCBXZWJQcm9jZXNzOjppbml0aWFsaXplV2ViUHJvY2VzcyhXZQog
CiB2b2lkIFdlYlByb2Nlc3M6OmVuc3VyZU5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbigpCiB7Ci0g
ICAgaWYgKCFtX3VzZXNOZXR3b3JrUHJvY2VzcykKLSAgICAgICAgcmV0dXJuOwotCiAgICAgaWYg
KG1fbmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKQogICAgICAgICByZXR1cm47CiAKQEAgLTQ5OCwx
NCArNDcxLDYgQEAgdm9pZCBXZWJQcm9jZXNzOjpkZXN0cm95UHJpdmF0ZUJyb3dzaW5nUwogI2Vu
ZGlmCiB9CiAKLURvd25sb2FkTWFuYWdlciYgV2ViUHJvY2Vzczo6ZG93bmxvYWRNYW5hZ2VyKCkK
LXsKLSAgICBBU1NFUlQoIXVzZXNOZXR3b3JrUHJvY2VzcygpKTsKLQotICAgIHN0YXRpYyBOZXZl
ckRlc3Ryb3llZDxEb3dubG9hZE1hbmFnZXI+IGRvd25sb2FkTWFuYWdlcih0aGlzKTsKLSAgICBy
ZXR1cm4gZG93bmxvYWRNYW5hZ2VyOwotfQotCiAjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9B
UEkpCiBQbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbk1hbmFnZXImIFdlYlByb2Nlc3M6OnBsdWdpblBy
b2Nlc3NDb25uZWN0aW9uTWFuYWdlcigpCiB7CkBAIC01NjgsNyArNTMzLDYgQEAgdm9pZCBXZWJQ
cm9jZXNzOjpyZW1vdmVXZWJQYWdlKHVpbnQ2NF90IAogYm9vbCBXZWJQcm9jZXNzOjpzaG91bGRU
ZXJtaW5hdGUoKQogewogICAgIEFTU0VSVChtX3BhZ2VNYXAuaXNFbXB0eSgpKTsKLSAgICBBU1NF
UlQodXNlc05ldHdvcmtQcm9jZXNzKCkgfHwgIWRvd25sb2FkTWFuYWdlcigpLmlzRG93bmxvYWRp
bmcoKSk7CiAKICAgICAvLyBGSVhNRTogdGhlIFNob3VsZFRlcm1pbmF0ZSBtZXNzYWdlIHNob3Vs
ZCBhbHNvIHNlbmQgdGVybWluYXRpb24gcGFyYW1ldGVycywgc3VjaCBhcyBhbnkgc2Vzc2lvbiBj
b29raWVzIHRoYXQgbmVlZCB0byBiZSBwcmVzZXJ2ZWQuCiAgICAgYm9vbCBzaG91bGRUZXJtaW5h
dGUgPSBmYWxzZTsKQEAgLTEwMTcsMTUgKzk4MSw4IEBAIHZvaWQgV2ViUHJvY2Vzczo6c2V0SW5q
ZWN0ZWRCdW5kbGVQYXJhbWUKICAgICBpbmplY3RlZEJ1bmRsZS0+c2V0QnVuZGxlUGFyYW1ldGVy
cyh2YWx1ZSk7CiB9CiAKLWJvb2wgV2ViUHJvY2Vzczo6dXNlc05ldHdvcmtQcm9jZXNzKCkgY29u
c3QKLXsKLSAgICByZXR1cm4gbV91c2VzTmV0d29ya1Byb2Nlc3M7Ci19Ci0KIE5ldHdvcmtQcm9j
ZXNzQ29ubmVjdGlvbiogV2ViUHJvY2Vzczo6bmV0d29ya0Nvbm5lY3Rpb24oKQogewotICAgIEFT
U0VSVChtX3VzZXNOZXR3b3JrUHJvY2Vzcyk7Ci0KICAgICAvLyBJZiB3ZSd2ZSBsb3N0IG91ciBj
b25uZWN0aW9uIHRvIHRoZSBuZXR3b3JrIHByb2Nlc3MgKGUuZy4gaXQgY3Jhc2hlZCkgdHJ5IHRv
IHJlLWVzdGFibGlzaCBpdC4KICAgICBpZiAoIW1fbmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKQog
ICAgICAgICBlbnN1cmVOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oKTsKQEAgLTEwOTQsMjcgKzEw
NTEsNiBAQCB2b2lkIFdlYlByb2Nlc3M6OmVuc3VyZVdlYlRvRGF0YWJhc2VQcm9jCiAKICNlbmRp
ZiAvLyBFTkFCTEVEKERBVEFCQVNFX1BST0NFU1MpCiAKLXZvaWQgV2ViUHJvY2Vzczo6ZG93bmxv
YWRSZXF1ZXN0KFNlc3Npb25JRCBzZXNzaW9uSUQsIHVpbnQ2NF90IGRvd25sb2FkSUQsIHVpbnQ2
NF90IGluaXRpYXRpbmdQYWdlSUQsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKLXsK
LSAgICBXZWJQYWdlKiBpbml0aWF0aW5nUGFnZSA9IGluaXRpYXRpbmdQYWdlSUQgPyB3ZWJQYWdl
KGluaXRpYXRpbmdQYWdlSUQpIDogMDsKLQotICAgIFJlc291cmNlUmVxdWVzdCByZXF1ZXN0V2l0
aE9yaWdpbmFsVVJMID0gcmVxdWVzdDsKLSAgICBpZiAoaW5pdGlhdGluZ1BhZ2UpCi0gICAgICAg
IGluaXRpYXRpbmdQYWdlLT5tYWluRnJhbWUoKS0+bG9hZGVyKCkuc2V0T3JpZ2luYWxVUkxGb3JE
b3dubG9hZFJlcXVlc3QocmVxdWVzdFdpdGhPcmlnaW5hbFVSTCk7Ci0KLSAgICBkb3dubG9hZE1h
bmFnZXIoKS5zdGFydERvd25sb2FkKHNlc3Npb25JRCwgZG93bmxvYWRJRCwgcmVxdWVzdFdpdGhP
cmlnaW5hbFVSTCk7Ci19Ci0KLXZvaWQgV2ViUHJvY2Vzczo6cmVzdW1lRG93bmxvYWQodWludDY0
X3QgZG93bmxvYWRJRCwgY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJiByZXN1bWVEYXRhLCBjb25z
dCBTdHJpbmcmIHBhdGgsIGNvbnN0IFdlYktpdDo6U2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlJiBz
YW5kYm94RXh0ZW5zaW9uSGFuZGxlKQotewotICAgIGRvd25sb2FkTWFuYWdlcigpLnJlc3VtZURv
d25sb2FkKGRvd25sb2FkSUQsIHJlc3VtZURhdGEsIHBhdGgsIHNhbmRib3hFeHRlbnNpb25IYW5k
bGUpOwotfQotCi12b2lkIFdlYlByb2Nlc3M6OmNhbmNlbERvd25sb2FkKHVpbnQ2NF90IGRvd25s
b2FkSUQpCi17Ci0gICAgZG93bmxvYWRNYW5hZ2VyKCkuY2FuY2VsRG93bmxvYWQoZG93bmxvYWRJ
RCk7Ci19Ci0KIHZvaWQgV2ViUHJvY2Vzczo6c2V0RW5oYW5jZWRBY2Nlc3NpYmlsaXR5KGJvb2wg
ZmxhZykKIHsKICAgICBXZWJDb3JlOjpBWE9iamVjdENhY2hlOjpzZXRFbmhhbmNlZFVzZXJJbnRl
cmZhY2VBY2Nlc3NpYmlsaXR5KGZsYWcpOwpAQCAtMTQ1NiwxNiArMTM5MiwxMiBAQCB2b2lkIFdl
YlByb2Nlc3M6OnByZWZldGNoRE5TKGNvbnN0IFN0cmluCiAgICAgaWYgKGhvc3RuYW1lLmlzRW1w
dHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKHVzZXNOZXR3b3JrUHJvY2VzcygpKSB7
Ci0gICAgICAgIGlmIChtX2Ruc1ByZWZldGNoZWRIb3N0cy5hZGQoaG9zdG5hbWUpLmlzTmV3RW50
cnkpCi0gICAgICAgICAgICBuZXR3b3JrQ29ubmVjdGlvbigpLT5jb25uZWN0aW9uKCktPnNlbmQo
TWVzc2FnZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpQcmVmZXRjaEROUyhob3N0
bmFtZSksIDApOwotICAgICAgICAvLyBUaGUgRE5TIHByZWZldGNoZWQgaG9zdHMgY2FjaGUgaXMg
b25seSB0byBhdm9pZCBhc2tpbmcgZm9yIHRoZSBzYW1lIGhvc3RzIHRvbyBtYW55IHRpbWVzCi0g
ICAgICAgIC8vIGluIGEgdmVyeSBzaG9ydCBwZXJpb2Qgb2YgdGltZSwgcHJvZHVjaW5nIGEgbG90
IG9mIElQQyB0cmFmZmljLiBTbyB3ZSBjbGVhciB0aGlzIGNhY2hlIGFmdGVyCi0gICAgICAgIC8v
IHNvbWUgdGltZSBvZiBubyBETlMgcmVxdWVzdHMuCi0gICAgICAgIG1fZG5zUHJlZmV0Y2hIeXN0
ZXJlcmlzLmltcHVsc2UoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBXZWJDb3JlOjpw
cmVmZXRjaEROUyhob3N0bmFtZSk7CisgICAgaWYgKG1fZG5zUHJlZmV0Y2hlZEhvc3RzLmFkZCho
b3N0bmFtZSkuaXNOZXdFbnRyeSkKKyAgICAgICAgbmV0d29ya0Nvbm5lY3Rpb24oKS0+Y29ubmVj
dGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6UHJl
ZmV0Y2hETlMoaG9zdG5hbWUpLCAwKTsKKyAgICAvLyBUaGUgRE5TIHByZWZldGNoZWQgaG9zdHMg
Y2FjaGUgaXMgb25seSB0byBhdm9pZCBhc2tpbmcgZm9yIHRoZSBzYW1lIGhvc3RzIHRvbyBtYW55
IHRpbWVzCisgICAgLy8gaW4gYSB2ZXJ5IHNob3J0IHBlcmlvZCBvZiB0aW1lLCBwcm9kdWNpbmcg
YSBsb3Qgb2YgSVBDIHRyYWZmaWMuIFNvIHdlIGNsZWFyIHRoaXMgY2FjaGUgYWZ0ZXIKKyAgICAv
LyBzb21lIHRpbWUgb2Ygbm8gRE5TIHJlcXVlc3RzLgorICAgIG1fZG5zUHJlZmV0Y2hIeXN0ZXJl
cmlzLmltcHVsc2UoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuaAkocmV2aXNpb24gMTkyNzUzKQorKysgU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcg
KzI4LDYgQEAKIAogI2luY2x1ZGUgIkNhY2hlTW9kZWwuaCIKICNpbmNsdWRlICJDaGlsZFByb2Nl
c3MuaCIKLSNpbmNsdWRlICJEb3dubG9hZE1hbmFnZXIuaCIKICNpbmNsdWRlICJEcmF3aW5nQXJl
YS5oIgogI2luY2x1ZGUgIlBsdWdpblByb2Nlc3NDb25uZWN0aW9uTWFuYWdlci5oIgogI2luY2x1
ZGUgIlJlc291cmNlQ2FjaGVzVG9DbGVhci5oIgpAQCAtNzEsNyArNzAsNiBAQCBzdHJ1Y3QgU2Vj
dXJpdHlPcmlnaW5EYXRhOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotY2xhc3MgRG93bmxvYWRN
YW5hZ2VyOwogY2xhc3MgRXZlbnREaXNwYXRjaGVyOwogY2xhc3MgSW5qZWN0ZWRCdW5kbGU7CiBj
bGFzcyBOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb247CkBAIC05Myw4ICs5MSw3IEBAIHN0cnVjdCBX
ZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOwogY2xhc3MgV2ViVG9EYXRhYmFzZVByb2Nlc3ND
b25uZWN0aW9uOwogI2VuZGlmCiAKLWNsYXNzIFdlYlByb2Nlc3MgOiBwdWJsaWMgQ2hpbGRQcm9j
ZXNzLCBwcml2YXRlIERvd25sb2FkTWFuYWdlcjo6Q2xpZW50IHsKLSAgICBmcmllbmQgY2xhc3Mg
TmV2ZXJEZXN0cm95ZWQ8RG93bmxvYWRNYW5hZ2VyPjsKK2NsYXNzIFdlYlByb2Nlc3MgOiBwdWJs
aWMgQ2hpbGRQcm9jZXNzIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgV2ViUHJvY2VzcyYgc2luZ2xl
dG9uKCk7CiAKQEAgLTE0NCw3ICsxNDEsNiBAQCBwdWJsaWM6CiAjZW5kaWYKICAgICAKICAgICBj
b25zdCBUZXh0Q2hlY2tlclN0YXRlJiB0ZXh0Q2hlY2tlclN0YXRlKCkgY29uc3QgeyByZXR1cm4g
bV90ZXh0Q2hlY2tlclN0YXRlOyB9Ci0gICAgRG93bmxvYWRNYW5hZ2VyJiBkb3dubG9hZE1hbmFn
ZXIoKTsKIAogICAgIHZvaWQgY2xlYXJSZXNvdXJjZUNhY2hlcyhSZXNvdXJjZUNhY2hlc1RvQ2xl
YXIgPSBBbGxSZXNvdXJjZUNhY2hlcyk7CiAgICAgCkBAIC0xNTQsOCArMTUwLDYgQEAgcHVibGlj
OgogCiAgICAgRXZlbnREaXNwYXRjaGVyJiBldmVudERpc3BhdGNoZXIoKSB7IHJldHVybiAqbV9l
dmVudERpc3BhdGNoZXI7IH0KIAotICAgIGJvb2wgdXNlc05ldHdvcmtQcm9jZXNzKCkgY29uc3Q7
Ci0KICAgICBOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24qIG5ldHdvcmtDb25uZWN0aW9uKCk7CiAg
ICAgdm9pZCBuZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb25DbG9zZWQoTmV0d29ya1Byb2Nlc3NDb25u
ZWN0aW9uKik7CiAgICAgV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyJiB3ZWJSZXNvdXJjZUxvYWRT
Y2hlZHVsZXIoKTsKQEAgLTE4MSwxMCArMTc1LDYgQEAgcHVibGljOgogCiAgICAgdm9pZCB1cGRh
dGVBY3RpdmVQYWdlcygpOwogCi0jaWYgVVNFKFNPVVApCi0gICAgdm9pZCBhbGxvd1NwZWNpZmlj
SFRUUFNDZXJ0aWZpY2F0ZUZvckhvc3QoY29uc3QgV2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvJiwg
Y29uc3QgU3RyaW5nJiBob3N0KTsKLSNlbmRpZgotCiAgICAgdm9pZCBwcm9jZXNzV2lsbFN1c3Bl
bmRJbW1pbmVudGx5KGJvb2wmIGhhbmRsZWQpOwogICAgIHZvaWQgcHJlcGFyZVRvU3VzcGVuZCgp
OwogICAgIHZvaWQgY2FuY2VsUHJlcGFyZVRvU3VzcGVuZCgpOwpAQCAtMjE3LDEyICsyMDcsNiBA
QCBwcml2YXRlOgogICAgIFdlYlByb2Nlc3MoKTsKICAgICB+V2ViUHJvY2VzcygpOwogCi0gICAg
Ly8gRG93bmxvYWRNYW5hZ2VyOjpDbGllbnQuCi0gICAgdmlydHVhbCB2b2lkIGRpZENyZWF0ZURv
d25sb2FkKCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGRpZERlc3Ryb3lEb3dubG9hZCgp
IG92ZXJyaWRlOwotICAgIHZpcnR1YWwgSVBDOjpDb25uZWN0aW9uKiBkb3dubG9hZFByb3h5Q29u
bmVjdGlvbigpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgQXV0aGVudGljYXRpb25NYW5hZ2VyJiBk
b3dubG9hZHNBdXRoZW50aWNhdGlvbk1hbmFnZXIoKSBvdmVycmlkZTsKLQogICAgIHZvaWQgaW5p
dGlhbGl6ZVdlYlByb2Nlc3MoV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyYmKTsKICAgICB2
b2lkIHBsYXRmb3JtSW5pdGlhbGl6ZVdlYlByb2Nlc3MoV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1l
dGVycyYmKTsKIApAQCAtMjU4LDEwICsyNDIsNiBAQCBwcml2YXRlOgogICAgIHZvaWQgc3RhcnRN
ZW1vcnlTYW1wbGVyKGNvbnN0IFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSYsIGNvbnN0IFN0cmlu
ZyYsIGNvbnN0IGRvdWJsZSk7CiAgICAgdm9pZCBzdG9wTWVtb3J5U2FtcGxlcigpOwogCi0gICAg
dm9pZCBkb3dubG9hZFJlcXVlc3QoV2ViQ29yZTo6U2Vzc2lvbklELCB1aW50NjRfdCBkb3dubG9h
ZElELCB1aW50NjRfdCBpbml0aWF0aW5nUGFnZUlELCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJl
cXVlc3QmKTsKLSAgICB2b2lkIHJlc3VtZURvd25sb2FkKHVpbnQ2NF90IGRvd25sb2FkSUQsIGNv
bnN0IElQQzo6RGF0YVJlZmVyZW5jZSYgcmVzdW1lRGF0YSwgY29uc3QgU3RyaW5nJiBwYXRoLCBj
b25zdCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUmKTsKLSAgICB2b2lkIGNhbmNlbERvd25sb2Fk
KHVpbnQ2NF90IGRvd25sb2FkSUQpOwotCiAgICAgdm9pZCBzZXRUZXh0Q2hlY2tlclN0YXRlKGNv
bnN0IFRleHRDaGVja2VyU3RhdGUmKTsKICAgICAKICAgICB2b2lkIGdldFdlYkNvcmVTdGF0aXN0
aWNzKHVpbnQ2NF90IGNhbGxiYWNrSUQpOwpAQCAtMjc2LDEwICsyNTYsNiBAQCBwcml2YXRlOgog
ICAgIHZvaWQgZGVsZXRlV2Vic2l0ZURhdGEoV2ViQ29yZTo6U2Vzc2lvbklELCB1aW50NjRfdCB3
ZWJzaXRlRGF0YVR5cGVzLCBzdGQ6OmNocm9ubzo6c3lzdGVtX2Nsb2NrOjp0aW1lX3BvaW50IG1v
ZGlmaWVkU2luY2UsIHVpbnQ2NF90IGNhbGxiYWNrSUQpOwogICAgIHZvaWQgZGVsZXRlV2Vic2l0
ZURhdGFGb3JPcmlnaW5zKFdlYkNvcmU6OlNlc3Npb25JRCwgdWludDY0X3Qgd2Vic2l0ZURhdGFU
eXBlcywgY29uc3QgVmVjdG9yPFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YT4mIG9yaWdpbnMs
IHVpbnQ2NF90IGNhbGxiYWNrSUQpOwogCi0jaWYgVVNFKFNPVVApCi0gICAgdm9pZCBzZXRJZ25v
cmVUTFNFcnJvcnMoYm9vbCk7Ci0jZW5kaWYKLQogICAgIHZvaWQgc2V0TWVtb3J5Q2FjaGVEaXNh
YmxlZChib29sKTsKIAogI2lmIEVOQUJMRShTRVJWSUNFX0NPTlRST0xTKQpAQCAtMzU4LDcgKzMz
NCw2IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGVuc3VyZU5ldHdvcmtQcm9jZXNzQ29ubmVjdGlv
bigpOwogICAgIFJlZlB0cjxOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24+IG1fbmV0d29ya1Byb2Nl
c3NDb25uZWN0aW9uOwotICAgIGJvb2wgbV91c2VzTmV0d29ya1Byb2Nlc3M7CiAgICAgV2ViUmVz
b3VyY2VMb2FkU2NoZWR1bGVyKiBtX3dlYlJlc291cmNlTG9hZFNjaGVkdWxlcjsKICAgICBIYXNo
U2V0PFN0cmluZz4gbV9kbnNQcmVmZXRjaGVkSG9zdHM7CiAgICAgV2ViQ29yZTo6SHlzdGVyZXNp
c0FjdGl2aXR5IG1fZG5zUHJlZmV0Y2hIeXN0ZXJlcmlzOwpJbmRleDogU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQcm9jZXNzLm1lc3NhZ2VzLmluCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbgkocmV2aXNpb24gMTkyNzUz
KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLm1lc3NhZ2VzLmluCSh3
b3JraW5nIGNvcHkpCkBAIC00NCw5ICs0NCw2IEBAIG1lc3NhZ2VzIC0+IFdlYlByb2Nlc3MgTGVn
YWN5UmVjZWl2ZXIgewogICAgIFNldFNob3VsZFVzZUZvbnRTbW9vdGhpbmcoYm9vbCB1c2VGb250
U21vb3RoaW5nKQogICAgIFVzZXJQcmVmZXJyZWRMYW5ndWFnZXNDaGFuZ2VkKFZlY3RvcjxTdHJp
bmc+IGxhbmd1YWdlcykKICAgICBGdWxsS2V5Ym9hcmRBY2Nlc3NNb2RlQ2hhbmdlZChib29sIGZ1
bGxLZXlib2FyZEFjY2Vzc0VuYWJsZWQpCi0jaWYgVVNFKFNPVVApCi0gICAgU2V0SWdub3JlVExT
RXJyb3JzKGJvb2wgaWdub3JlVExTRXJyb3JzKQotI2VuZGlmCiAKICAgICAvLyBMZWdhY3kgcHJp
dmF0ZSBicm93c2luZyBzZXNzaW9uIGlzIHBlciBwcm9jZXNzLiBJbmRpdmlkdWFsIHBhZ2VzIG9y
IHBhZ2UgZ3JvdXBzIG1heSB1c2UgdGhlIHByaXZhdGUgc2Vzc2lvbiBvciB0aGUgZGVmYXVsdCBv
bmUgYXMgYXBwcm9wcmlhdGUuCiAgICAgRW5zdXJlUHJpdmF0ZUJyb3dzaW5nU2Vzc2lvbihXZWJD
b3JlOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQpAQCAtNjIsMTIgKzU5LDYgQEAgbWVzc2FnZXMgLT4g
V2ViUHJvY2VzcyBMZWdhY3lSZWNlaXZlciB7CiAgICAgdm9pZCBTdGFydE1lbW9yeVNhbXBsZXIo
V2ViS2l0OjpTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgc2FtcGxlTG9nRmlsZUhhbmRsZSwgU3Ry
aW5nIHNhbXBsZUxvZ0ZpbGVQYXRoLCBkb3VibGUgaW50ZXJ2YWwpOwogICAgIHZvaWQgU3RvcE1l
bW9yeVNhbXBsZXIoKTsKIAotICAgICMgRG93bmxvYWRzLiBUaGlzIHNob3VsZCByZWFsbHkgYmUg
aW4gYSBEb3dubG9hZC5tZXNzYWdlcy5pbiwgYnV0IGl0IHNlZW1lZCB1bm5lY2Vzc2FyeSB0byBj
cmVhdGUgYSBuZXcgZmlsZSBqdXN0IGZvcgotICAgICMgdGhyZWUgbWVzc2FnZXMuCi0gICAgRG93
bmxvYWRSZXF1ZXN0KFdlYkNvcmU6OlNlc3Npb25JRCBzZXNzaW9uSUQsIHVpbnQ2NF90IGRvd25s
b2FkSUQsIHVpbnQ2NF90IGluaXRpYXRpbmdQYWdlSUQsIFdlYkNvcmU6OlJlc291cmNlUmVxdWVz
dCByZXF1ZXN0KQotICAgIFJlc3VtZURvd25sb2FkKHVpbnQ2NF90IGRvd25sb2FkSUQsIElQQzo6
RGF0YVJlZmVyZW5jZSByZXN1bWVEYXRhLCBTdHJpbmcgcGF0aCwgV2ViS2l0OjpTYW5kYm94RXh0
ZW5zaW9uOjpIYW5kbGUgc2FuZGJveEV4dGVuc2lvbkhhbmRsZSkKLSAgICBDYW5jZWxEb3dubG9h
ZCh1aW50NjRfdCBkb3dubG9hZElEKQotCiAgICAgU2V0VGV4dENoZWNrZXJTdGF0ZShzdHJ1Y3Qg
V2ViS2l0OjpUZXh0Q2hlY2tlclN0YXRlIHRleHRDaGVja2VyU3RhdGUpCiAKICAgICBTZXRFbmhh
bmNlZEFjY2Vzc2liaWxpdHkoYm9vbCBmbGFnKQpAQCAtOTEsMTAgKzgyLDYgQEAgbWVzc2FnZXMg
LT4gV2ViUHJvY2VzcyBMZWdhY3lSZWNlaXZlciB7CiAgICAgU2V0UU9TKGludCBsYXRlbmN5UU9T
LCBpbnQgdGhyb3VnaHB1dFFPUykKICNlbmRpZgogCi0jaWYgVVNFKFNPVVApCi0gICAgQWxsb3dT
cGVjaWZpY0hUVFBTQ2VydGlmaWNhdGVGb3JIb3N0KFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbyBj
ZXJ0aWZpY2F0ZSwgU3RyaW5nIGhvc3QpCi0jZW5kaWYKLQogICAgIFNldE1lbW9yeUNhY2hlRGlz
YWJsZWQoYm9vbCBkaXNhYmxlZCk7CiAKICNpZiBFTkFCTEUoU0VSVklDRV9DT05UUk9MUykKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvRmlsZUFQSS9CbG9iUmVnaXN0cnlQcm94eS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9GaWxlQVBJL0Jsb2JS
ZWdpc3RyeVByb3h5LmNwcAkocmV2aXNpb24gMTkyNzUzKQorKysgU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9GaWxlQVBJL0Jsb2JSZWdpc3RyeVByb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzgsOCArMzgsNiBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogdm9pZCBCbG9iUmVnaXN0cnlQcm94
eTo6cmVnaXN0ZXJGaWxlQmxvYlVSTChjb25zdCBXZWJDb3JlOjpVUkwmIHVybCwgUGFzc1JlZlB0
cjxCbG9iRGF0YUZpbGVSZWZlcmVuY2U+IGZpbGUsIGNvbnN0IFN0cmluZyYgY29udGVudFR5cGUp
CiB7Ci0gICAgQVNTRVJUKFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnVzZXNOZXR3b3JrUHJvY2Vz
cygpKTsKLQogICAgIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSBleHRlbnNpb25IYW5kbGU7CiAK
ICAgICAvLyBGaWxlIHBhdGggY2FuIGJlIGVtcHR5IHdoZW4gc3VibWl0dGluZyBhIGZvcm0gZmls
ZSBpbnB1dCB3aXRob3V0IGEgZmlsZSwgc2VlIGJ1ZyAxMTE3NzguCkBAIC01MSwzNiArNDksMjYg
QEAgdm9pZCBCbG9iUmVnaXN0cnlQcm94eTo6cmVnaXN0ZXJGaWxlQmxvYgogCiB2b2lkIEJsb2JS
ZWdpc3RyeVByb3h5OjpyZWdpc3RlckJsb2JVUkwoY29uc3QgVVJMJiB1cmwsIFZlY3RvcjxCbG9i
UGFydD4gYmxvYlBhcnRzLCBjb25zdCBTdHJpbmcmIGNvbnRlbnRUeXBlKQogewotICAgIEFTU0VS
VChXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS51c2VzTmV0d29ya1Byb2Nlc3MoKSk7Ci0KICAgICBX
ZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5uZXR3b3JrQ29ubmVjdGlvbigpLT5jb25uZWN0aW9uKCkt
PnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpSZWdpc3RlckJs
b2JVUkwodXJsLCBibG9iUGFydHMsIGNvbnRlbnRUeXBlKSwgMCk7CiB9CiAKIHZvaWQgQmxvYlJl
Z2lzdHJ5UHJveHk6OnJlZ2lzdGVyQmxvYlVSTChjb25zdCBVUkwmIHVybCwgY29uc3QgVVJMJiBz
cmNVUkwpCiB7Ci0gICAgQVNTRVJUKFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnVzZXNOZXR3b3Jr
UHJvY2VzcygpKTsKLQogICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLm5ldHdvcmtDb25uZWN0
aW9uKCktPmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dl
YlByb2Nlc3M6OlJlZ2lzdGVyQmxvYlVSTEZyb21VUkwodXJsLCBzcmNVUkwpLCAwKTsKIH0KIAog
dm9pZCBCbG9iUmVnaXN0cnlQcm94eTo6dW5yZWdpc3RlckJsb2JVUkwoY29uc3QgVVJMJiB1cmwp
CiB7Ci0gICAgQVNTRVJUKFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnVzZXNOZXR3b3JrUHJvY2Vz
cygpKTsKLQogICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLm5ldHdvcmtDb25uZWN0aW9uKCkt
PmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nl
c3M6OlVucmVnaXN0ZXJCbG9iVVJMKHVybCksIDApOwogfQogCiB2b2lkIEJsb2JSZWdpc3RyeVBy
b3h5OjpyZWdpc3RlckJsb2JVUkxGb3JTbGljZShjb25zdCBVUkwmIHVybCwgY29uc3QgVVJMJiBz
cmNVUkwsIGxvbmcgbG9uZyBzdGFydCwgbG9uZyBsb25nIGVuZCkKIHsKLSAgICBBU1NFUlQoV2Vi
UHJvY2Vzczo6c2luZ2xldG9uKCkudXNlc05ldHdvcmtQcm9jZXNzKCkpOwotCiAgICAgV2ViUHJv
Y2Vzczo6c2luZ2xldG9uKCkubmV0d29ya0Nvbm5lY3Rpb24oKS0+Y29ubmVjdGlvbigpLT5zZW5k
KE1lc3NhZ2VzOjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6UmVnaXN0ZXJCbG9iVVJM
Rm9yU2xpY2UodXJsLCBzcmNVUkwsIHN0YXJ0LCBlbmQpLCAwKTsKIH0KIAogdW5zaWduZWQgbG9u
ZyBsb25nIEJsb2JSZWdpc3RyeVByb3h5OjpibG9iU2l6ZShjb25zdCBVUkwmIHVybCkKIHsKLSAg
ICBBU1NFUlQoV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkudXNlc05ldHdvcmtQcm9jZXNzKCkpOwot
CiAgICAgdWludDY0X3QgcmVzdWx0U2l6ZTsKICAgICBpZiAoIVdlYlByb2Nlc3M6OnNpbmdsZXRv
bigpLm5ldHdvcmtDb25uZWN0aW9uKCktPmNvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6
Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpCbG9iU2l6ZSh1cmwpLCBNZXNzYWdlczo6
TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OkJsb2JTaXplOjpSZXBseShyZXN1bHRTaXpl
KSwgMCkpCiAgICAgICAgIHJldHVybiAwOwpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJh
dGVnaWVzLmNwcAkocmV2aXNpb24gMTkyNzUzKQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMDksMTAxICsxMDksNTQgQEAgUGx1Z2luU3RyYXRlZ3kqIFdlYlBsYXRmb3JtU3RyYXRl
Z2llczo6YwogCiBTdHJpbmcgV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpjb29raWVzRm9yRE9NKGNv
bnN0IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgc2Vzc2lvbiwgY29uc3QgVVJMJiBmaXJzdFBhcnR5
LCBjb25zdCBVUkwmIHVybCkKIHsKLSAgICBhdXRvJiB3ZWJQcm9jZXNzID0gV2ViUHJvY2Vzczo6
c2luZ2xldG9uKCk7Ci0gICAgaWYgKHdlYlByb2Nlc3MudXNlc05ldHdvcmtQcm9jZXNzKCkpIHsK
LSAgICAgICAgU3RyaW5nIHJlc3VsdDsKLSAgICAgICAgaWYgKCF3ZWJQcm9jZXNzLm5ldHdvcmtD
b25uZWN0aW9uKCktPmNvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6Ok5ldHdvcmtDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzOjpDb29raWVzRm9yRE9NKFNlc3Npb25UcmFja2VyOjpzZXNzaW9u
SUQoc2Vzc2lvbiksIGZpcnN0UGFydHksIHVybCksIE1lc3NhZ2VzOjpOZXR3b3JrQ29ubmVjdGlv
blRvV2ViUHJvY2Vzczo6Q29va2llc0ZvckRPTTo6UmVwbHkocmVzdWx0KSwgMCkpCi0gICAgICAg
ICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIFdlYkNvcmU6OmNvb2tpZXNGb3JET00oc2Vzc2lvbiwgZmlyc3RQYXJ0eSwgdXJs
KTsKKyAgICBTdHJpbmcgcmVzdWx0OworICAgIGlmICghV2ViUHJvY2Vzczo6c2luZ2xldG9uKCku
bmV0d29ya0Nvbm5lY3Rpb24oKS0+Y29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6TmV0
d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OkNvb2tpZXNGb3JET00oU2Vzc2lvblRyYWNrZXI6
OnNlc3Npb25JRChzZXNzaW9uKSwgZmlyc3RQYXJ0eSwgdXJsKSwgTWVzc2FnZXM6Ok5ldHdvcmtD
b25uZWN0aW9uVG9XZWJQcm9jZXNzOjpDb29raWVzRm9yRE9NOjpSZXBseShyZXN1bHQpLCAwKSkK
KyAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIHZvaWQg
V2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpzZXRDb29raWVzRnJvbURPTShjb25zdCBOZXR3b3JrU3Rv
cmFnZVNlc3Npb24mIHNlc3Npb24sIGNvbnN0IFVSTCYgZmlyc3RQYXJ0eSwgY29uc3QgVVJMJiB1
cmwsIGNvbnN0IFN0cmluZyYgY29va2llU3RyaW5nKQogewotICAgIGF1dG8mIHdlYlByb2Nlc3Mg
PSBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKTsKLSAgICBpZiAod2ViUHJvY2Vzcy51c2VzTmV0d29y
a1Byb2Nlc3MoKSkgewotICAgICAgICB3ZWJQcm9jZXNzLm5ldHdvcmtDb25uZWN0aW9uKCktPmNv
bm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6
OlNldENvb2tpZXNGcm9tRE9NKFNlc3Npb25UcmFja2VyOjpzZXNzaW9uSUQoc2Vzc2lvbiksIGZp
cnN0UGFydHksIHVybCwgY29va2llU3RyaW5nKSwgMCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBXZWJDb3JlOjpzZXRDb29raWVzRnJvbURPTShzZXNzaW9uLCBmaXJzdFBhcnR5LCB1
cmwsIGNvb2tpZVN0cmluZyk7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkubmV0d29ya0Nv
bm5lY3Rpb24oKS0+Y29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrQ29ubmVjdGlv
blRvV2ViUHJvY2Vzczo6U2V0Q29va2llc0Zyb21ET00oU2Vzc2lvblRyYWNrZXI6OnNlc3Npb25J
RChzZXNzaW9uKSwgZmlyc3RQYXJ0eSwgdXJsLCBjb29raWVTdHJpbmcpLCAwKTsKIH0KIAogYm9v
bCBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmNvb2tpZXNFbmFibGVkKGNvbnN0IE5ldHdvcmtTdG9y
YWdlU2Vzc2lvbiYgc2Vzc2lvbiwgY29uc3QgVVJMJiBmaXJzdFBhcnR5LCBjb25zdCBVUkwmIHVy
bCkKIHsKLSAgICBhdXRvJiB3ZWJQcm9jZXNzID0gV2ViUHJvY2Vzczo6c2luZ2xldG9uKCk7Ci0g
ICAgaWYgKHdlYlByb2Nlc3MudXNlc05ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgYm9vbCBy
ZXN1bHQ7Ci0gICAgICAgIGlmICghd2ViUHJvY2Vzcy5uZXR3b3JrQ29ubmVjdGlvbigpLT5jb25u
ZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vz
czo6Q29va2llc0VuYWJsZWQoU2Vzc2lvblRyYWNrZXI6OnNlc3Npb25JRChzZXNzaW9uKSwgZmly
c3RQYXJ0eSwgdXJsKSwgTWVzc2FnZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpD
b29raWVzRW5hYmxlZDo6UmVwbHkocmVzdWx0KSwgMCkpCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0gICAgcmV0dXJuIFdlYkNvcmU6
OmNvb2tpZXNFbmFibGVkKHNlc3Npb24sIGZpcnN0UGFydHksIHVybCk7CisgICAgYm9vbCByZXN1
bHQ7CisgICAgaWYgKCFXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5uZXR3b3JrQ29ubmVjdGlvbigp
LT5jb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpOZXR3b3JrQ29ubmVjdGlvblRvV2Vi
UHJvY2Vzczo6Q29va2llc0VuYWJsZWQoU2Vzc2lvblRyYWNrZXI6OnNlc3Npb25JRChzZXNzaW9u
KSwgZmlyc3RQYXJ0eSwgdXJsKSwgTWVzc2FnZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9j
ZXNzOjpDb29raWVzRW5hYmxlZDo6UmVwbHkocmVzdWx0KSwgMCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiBTdHJpbmcgV2ViUGxhdGZvcm1TdHJhdGVn
aWVzOjpjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25zdCBOZXR3b3JrU3RvcmFnZVNl
c3Npb24mIHNlc3Npb24sIGNvbnN0IFVSTCYgZmlyc3RQYXJ0eSwgY29uc3QgVVJMJiB1cmwpCiB7
Ci0gICAgYXV0byYgd2ViUHJvY2VzcyA9IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpOwotICAgIGlm
ICh3ZWJQcm9jZXNzLnVzZXNOZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgIFN0cmluZyByZXN1
bHQ7Ci0gICAgICAgIGlmICghd2ViUHJvY2Vzcy5uZXR3b3JrQ29ubmVjdGlvbigpLT5jb25uZWN0
aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6
Q29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoU2Vzc2lvblRyYWNrZXI6OnNlc3Npb25JRChz
ZXNzaW9uKSwgZmlyc3RQYXJ0eSwgdXJsKSwgTWVzc2FnZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzOjpDb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZTo6UmVwbHkocmVzdWx0KSwg
MCkpCi0gICAgICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7
Ci0gICAgfQotCi0gICAgcmV0dXJuIFdlYkNvcmU6OmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZh
bHVlKHNlc3Npb24sIGZpcnN0UGFydHksIHVybCk7CisgICAgU3RyaW5nIHJlc3VsdDsKKyAgICBp
ZiAoIVdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLm5ldHdvcmtDb25uZWN0aW9uKCktPmNvbm5lY3Rp
b24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpD
b29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShTZXNzaW9uVHJhY2tlcjo6c2Vzc2lvbklEKHNl
c3Npb24pLCBmaXJzdFBhcnR5LCB1cmwpLCBNZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dl
YlByb2Nlc3M6OkNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlOjpSZXBseShyZXN1bHQpLCAw
KSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIGJv
b2wgV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpnZXRSYXdDb29raWVzKGNvbnN0IE5ldHdvcmtTdG9y
YWdlU2Vzc2lvbiYgc2Vzc2lvbiwgY29uc3QgVVJMJiBmaXJzdFBhcnR5LCBjb25zdCBVUkwmIHVy
bCwgVmVjdG9yPENvb2tpZT4mIHJhd0Nvb2tpZXMpCiB7Ci0gICAgYXV0byYgd2ViUHJvY2VzcyA9
IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpOwotICAgIGlmICh3ZWJQcm9jZXNzLnVzZXNOZXR3b3Jr
UHJvY2VzcygpKSB7Ci0gICAgICAgIGlmICghd2ViUHJvY2Vzcy5uZXR3b3JrQ29ubmVjdGlvbigp
LT5jb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpOZXR3b3JrQ29ubmVjdGlvblRvV2Vi
UHJvY2Vzczo6R2V0UmF3Q29va2llcyhTZXNzaW9uVHJhY2tlcjo6c2Vzc2lvbklEKHNlc3Npb24p
LCBmaXJzdFBhcnR5LCB1cmwpLCBNZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nl
c3M6OkdldFJhd0Nvb2tpZXM6OlJlcGx5KHJhd0Nvb2tpZXMpLCAwKSkKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIFdl
YkNvcmU6OmdldFJhd0Nvb2tpZXMoc2Vzc2lvbiwgZmlyc3RQYXJ0eSwgdXJsLCByYXdDb29raWVz
KTsKKyAgICBpZiAoIVdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLm5ldHdvcmtDb25uZWN0aW9uKCkt
PmNvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzOjpHZXRSYXdDb29raWVzKFNlc3Npb25UcmFja2VyOjpzZXNzaW9uSUQoc2Vzc2lvbiks
IGZpcnN0UGFydHksIHVybCksIE1lc3NhZ2VzOjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vz
czo6R2V0UmF3Q29va2llczo6UmVwbHkocmF3Q29va2llcyksIDApKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIHZvaWQgV2ViUGxhdGZvcm1TdHJhdGVnaWVz
OjpkZWxldGVDb29raWUoY29uc3QgTmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBzZXNzaW9uLCBjb25z
dCBVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBjb29raWVOYW1lKQogewotICAgIGF1dG8mIHdlYlBy
b2Nlc3MgPSBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKTsKLSAgICBpZiAod2ViUHJvY2Vzcy51c2Vz
TmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICB3ZWJQcm9jZXNzLm5ldHdvcmtDb25uZWN0aW9u
KCktPmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlBy
b2Nlc3M6OkRlbGV0ZUNvb2tpZShTZXNzaW9uVHJhY2tlcjo6c2Vzc2lvbklEKHNlc3Npb24pLCB1
cmwsIGNvb2tpZU5hbWUpLCAwKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIFdlYkNv
cmU6OmRlbGV0ZUNvb2tpZShzZXNzaW9uLCB1cmwsIGNvb2tpZU5hbWUpOworICAgIFdlYlByb2Nl
c3M6OnNpbmdsZXRvbigpLm5ldHdvcmtDb25uZWN0aW9uKCktPmNvbm5lY3Rpb24oKS0+c2VuZChN
ZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OkRlbGV0ZUNvb2tpZShTZXNz
aW9uVHJhY2tlcjo6c2Vzc2lvbklEKHNlc3Npb24pLCB1cmwsIGNvb2tpZU5hbWUpLCAwKTsKIH0K
IAogLy8gTG9hZGVyU3RyYXRlZ3kKIAogUmVzb3VyY2VMb2FkU2NoZWR1bGVyKiBXZWJQbGF0Zm9y
bVN0cmF0ZWdpZXM6OnJlc291cmNlTG9hZFNjaGVkdWxlcigpCiB7Ci0gICAgc3RhdGljIFJlc291
cmNlTG9hZFNjaGVkdWxlciogc2NoZWR1bGVyOwotICAgIGlmICghc2NoZWR1bGVyKSB7Ci0gICAg
ICAgIGF1dG8mIHdlYlByb2Nlc3MgPSBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKTsKLSAgICAgICAg
aWYgKHdlYlByb2Nlc3MudXNlc05ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBzY2hlZHVs
ZXIgPSAmd2ViUHJvY2Vzcy53ZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIoKTsKLSAgICAgICAgZWxz
ZQotICAgICAgICAgICAgc2NoZWR1bGVyID0gV2ViQ29yZTo6cmVzb3VyY2VMb2FkU2NoZWR1bGVy
KCk7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBzY2hlZHVsZXI7CisgICAgcmV0dXJuICZXZWJQ
cm9jZXNzOjpzaW5nbGV0b24oKS53ZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIoKTsKIH0KIAogdm9p
ZCBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoTmV0d29y
a2luZ0NvbnRleHQqIGNvbnRleHQsIHVuc2lnbmVkIGxvbmcgcmVzb3VyY2VMb2FkSWRlbnRpZmll
ciwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBTdG9yZWRDcmVkZW50aWFscyBzdG9y
ZWRDcmVkZW50aWFscywgQ2xpZW50Q3JlZGVudGlhbFBvbGljeSBjbGllbnRDcmVkZW50aWFsUG9s
aWN5LCBSZXNvdXJjZUVycm9yJiBlcnJvciwgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIFZl
Y3RvcjxjaGFyPiYgZGF0YSkKIHsKLSAgICBhdXRvJiB3ZWJQcm9jZXNzID0gV2ViUHJvY2Vzczo6
c2luZ2xldG9uKCk7Ci0gICAgaWYgKCF3ZWJQcm9jZXNzLnVzZXNOZXR3b3JrUHJvY2VzcygpKSB7
Ci0gICAgICAgIExvYWRlclN0cmF0ZWd5Ojpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KGNvbnRl
eHQsIHJlc291cmNlTG9hZElkZW50aWZpZXIsIHJlcXVlc3QsIHN0b3JlZENyZWRlbnRpYWxzLCBj
bGllbnRDcmVkZW50aWFsUG9saWN5LCBlcnJvciwgcmVzcG9uc2UsIGRhdGEpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCiAgICAgV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dCogd2ViQ29udGV4
dCA9IHN0YXRpY19jYXN0PFdlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQqPihjb250ZXh0KTsKICAg
ICAvLyBGSVhNRTogU29tZSBlbnRpdGllcyBpbiBXZWJDb3JlIHVzZSBXZWJDb3JlJ3MgIkVtcHR5
RnJhbWVMb2FkZXJDbGllbnQiIGluc3RlYWQgb2YgaGF2aW5nIGEgcHJvcGVyIFdlYkZyYW1lTG9h
ZGVyQ2xpZW50LgogICAgIC8vIEVtcHR5RnJhbWVMb2FkZXJDbGllbnQgc2hvdWxkbid0IGV4aXN0
IGFuZCBldmVyeXRoaW5nIHNob3VsZCBiZSB1c2luZyBhIFdlYkZyYW1lTG9hZGVyQ2xpZW50LApA
QCAtMjI3LDcgKzE4MCw3IEBAIHZvaWQgV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpsb2FkUmVzb3Vy
Y2UKIAogICAgIEhhbmdEZXRlY3Rpb25EaXNhYmxlciBoYW5nRGV0ZWN0aW9uRGlzYWJsZXI7CiAK
LSAgICBpZiAoIXdlYlByb2Nlc3MubmV0d29ya0Nvbm5lY3Rpb24oKS0+Y29ubmVjdGlvbigpLT5z
ZW5kU3luYyhNZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OlBlcmZvcm1T
eW5jaHJvbm91c0xvYWQobG9hZFBhcmFtZXRlcnMpLCBNZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rp
b25Ub1dlYlByb2Nlc3M6OlBlcmZvcm1TeW5jaHJvbm91c0xvYWQ6OlJlcGx5KGVycm9yLCByZXNw
b25zZSwgZGF0YSksIDApKSB7CisgICAgaWYgKCFXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5uZXR3
b3JrQ29ubmVjdGlvbigpLT5jb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpOZXR3b3Jr
Q29ubmVjdGlvblRvV2ViUHJvY2Vzczo6UGVyZm9ybVN5bmNocm9ub3VzTG9hZChsb2FkUGFyYW1l
dGVycyksIE1lc3NhZ2VzOjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6UGVyZm9ybVN5
bmNocm9ub3VzTG9hZDo6UmVwbHkoZXJyb3IsIHJlc3BvbnNlLCBkYXRhKSwgMCkpIHsKICAgICAg
ICAgcmVzcG9uc2UgPSBSZXNvdXJjZVJlc3BvbnNlKCk7CiAgICAgICAgIGVycm9yID0gaW50ZXJu
YWxFcnJvcihyZXF1ZXN0LnVybCgpKTsKICAgICB9CkBAIC0yNDAsMTIgKzE5Myw2IEBAIHZvaWQg
V2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpjcmVhdGVQaW5nSGEKICAgICBpZiAoIW5ldHdvcmtpbmdD
b250ZXh0KQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvJiB3ZWJQcm9jZXNzID0gV2ViUHJv
Y2Vzczo6c2luZ2xldG9uKCk7Ci0gICAgaWYgKCF3ZWJQcm9jZXNzLnVzZXNOZXR3b3JrUHJvY2Vz
cygpKSB7Ci0gICAgICAgIExvYWRlclN0cmF0ZWd5OjpjcmVhdGVQaW5nSGFuZGxlKG5ldHdvcmtp
bmdDb250ZXh0LCByZXF1ZXN0LCBzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KICAgICBXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0KiB3ZWJDb250
ZXh0ID0gc3RhdGljX2Nhc3Q8V2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dCo+KG5ldHdvcmtpbmdD
b250ZXh0KTsKICAgICBXZWJGcmFtZUxvYWRlckNsaWVudCogd2ViRnJhbWVMb2FkZXJDbGllbnQg
PSB3ZWJDb250ZXh0LT53ZWJGcmFtZUxvYWRlckNsaWVudCgpOwogICAgIFdlYkZyYW1lKiB3ZWJG
cmFtZSA9IHdlYkZyYW1lTG9hZGVyQ2xpZW50ID8gd2ViRnJhbWVMb2FkZXJDbGllbnQtPndlYkZy
YW1lKCkgOiBudWxscHRyOwpAQCAtMjU3LDE0ICsyMDQsMTIgQEAgdm9pZCBXZWJQbGF0Zm9ybVN0
cmF0ZWdpZXM6OmNyZWF0ZVBpbmdIYQogICAgIGxvYWRQYXJhbWV0ZXJzLmFsbG93U3RvcmVkQ3Jl
ZGVudGlhbHMgPSBzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSA/IEFsbG93U3RvcmVkQ3JlZGVu
dGlhbHMgOiBEb05vdEFsbG93U3RvcmVkQ3JlZGVudGlhbHM7CiAgICAgbG9hZFBhcmFtZXRlcnMu
c2hvdWxkQ2xlYXJSZWZlcnJlck9uSFRUUFNUb0hUVFBSZWRpcmVjdCA9IG5ldHdvcmtpbmdDb250
ZXh0LT5zaG91bGRDbGVhclJlZmVycmVyT25IVFRQU1RvSFRUUFJlZGlyZWN0KCk7CiAKLSAgICB3
ZWJQcm9jZXNzLm5ldHdvcmtDb25uZWN0aW9uKCktPmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdl
czo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OkxvYWRQaW5nKGxvYWRQYXJhbWV0ZXJz
KSwgMCk7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkubmV0d29ya0Nvbm5lY3Rpb24oKS0+
Y29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vz
czo6TG9hZFBpbmcobG9hZFBhcmFtZXRlcnMpLCAwKTsKIH0KIAogQmxvYlJlZ2lzdHJ5KiBXZWJQ
bGF0Zm9ybVN0cmF0ZWdpZXM6OmNyZWF0ZUJsb2JSZWdpc3RyeSgpCiB7Ci0gICAgaWYgKCFXZWJQ
cm9jZXNzOjpzaW5nbGV0b24oKS51c2VzTmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgcmV0dXJu
IExvYWRlclN0cmF0ZWd5OjpjcmVhdGVCbG9iUmVnaXN0cnkoKTsKLSAgICByZXR1cm4gbmV3IEJs
b2JSZWdpc3RyeVByb3h5OyAgICAKKyAgICByZXR1cm4gbmV3IEJsb2JSZWdpc3RyeVByb3h5Owog
fQogCiAvLyBQbHVnaW5TdHJhdGVneQpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL1dlYkZyYW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3BwCShyZXZpc2lvbiAxOTI3NTMpCisrKyBTb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
NTQsMjEgKzI1NCw4IEBAIHZvaWQgV2ViRnJhbWU6OnN0YXJ0RG93bmxvYWQoY29uc3QgV2ViQ28K
ICAgICBtX3BvbGljeURvd25sb2FkSUQgPSAwOwogCiAgICAgYXV0byYgd2ViUHJvY2VzcyA9IFdl
YlByb2Nlc3M6OnNpbmdsZXRvbigpOwotI2lmIFVTRShORVRXT1JLX1NFU1NJT04pCi0gICAgQVNT
RVJUKHdlYlByb2Nlc3MudXNlc05ldHdvcmtQcm9jZXNzKCkpOwotI2VuZGlmCiAgICAgU2Vzc2lv
bklEIHNlc3Npb25JRCA9IHBhZ2UoKSA/IHBhZ2UoKS0+c2Vzc2lvbklEKCkgOiBTZXNzaW9uSUQ6
OmRlZmF1bHRTZXNzaW9uSUQoKTsKLSAgICBpZiAod2ViUHJvY2Vzcy51c2VzTmV0d29ya1Byb2Nl
c3MoKSkgewotICAgICAgICB3ZWJQcm9jZXNzLm5ldHdvcmtDb25uZWN0aW9uKCktPmNvbm5lY3Rp
b24oKS0+c2VuZChNZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OlN0YXJ0
RG93bmxvYWQoc2Vzc2lvbklELCBwb2xpY3lEb3dubG9hZElELCByZXF1ZXN0KSwgMCk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSNpZiBVU0UoTkVUV09SS19TRVNTSU9OKQotICAgIC8vIFVz
aW5nIE5FVFdPUktfU0VTU0lPTiByZXF1aXJlcyB0aGUgdXNlIG9mIGEgbmV0d29yayBwcm9jZXNz
LgotICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0jZWxzZQotICAgIHdlYlByb2Nl
c3MuZG93bmxvYWRNYW5hZ2VyKCkuc3RhcnREb3dubG9hZChzZXNzaW9uSUQsIHBvbGljeURvd25s
b2FkSUQsIHJlcXVlc3QpOwotI2VuZGlmCisgICAgd2ViUHJvY2Vzcy5uZXR3b3JrQ29ubmVjdGlv
bigpLT5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzOjpTdGFydERvd25sb2FkKHNlc3Npb25JRCwgcG9saWN5RG93bmxvYWRJRCwgcmVxdWVz
dCksIDApOwogfQogCiB2b2lkIFdlYkZyYW1lOjpjb252ZXJ0TWFpblJlc291cmNlTG9hZFRvRG93
bmxvYWQoRG9jdW1lbnRMb2FkZXIqIGRvY3VtZW50TG9hZGVyLCBTZXNzaW9uSUQgc2Vzc2lvbklE
LCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFJlc291cmNlUmVzcG9uc2Um
IHJlc3BvbnNlKQpAQCAtMjgxLDM3ICsyNjgsMTYgQEAgdm9pZCBXZWJGcmFtZTo6Y29udmVydE1h
aW5SZXNvdXJjZUxvYWRUbwogICAgIFN1YnJlc291cmNlTG9hZGVyKiBtYWluUmVzb3VyY2VMb2Fk
ZXIgPSBkb2N1bWVudExvYWRlci0+bWFpblJlc291cmNlTG9hZGVyKCk7CiAKICAgICBhdXRvJiB3
ZWJQcm9jZXNzID0gV2ViUHJvY2Vzczo6c2luZ2xldG9uKCk7Ci0jaWYgVVNFKE5FVFdPUktfU0VT
U0lPTikKLSAgICBBU1NFUlQod2ViUHJvY2Vzcy51c2VzTmV0d29ya1Byb2Nlc3MoKSk7Ci0jZW5k
aWYKLSAgICBpZiAod2ViUHJvY2Vzcy51c2VzTmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICAv
LyBVc2UgMCB0byBpbmRpY2F0ZSB0aGF0IHRoZSByZXNvdXJjZSBsb2FkIGNhbid0IGJlIGNvbnZl
cnRlZCBhbmQgYSBuZXcgZG93bmxvYWQgbXVzdCBiZSBzdGFydGVkLgotICAgICAgICAvLyBUaGlz
IGNhbiBoYXBwZW4gaWYgdGhlcmUgaXMgbm8gbG9hZGVyIGJlY2F1c2UgdGhlIG1haW4gcmVzb3Vy
Y2UgaXMgaW4gdGhlIFdlYkNvcmUgbWVtb3J5IGNhY2hlLAotICAgICAgICAvLyBvciBiZWNhdXNl
IHRoZSBjb252ZXJzaW9uIHdhcyBhdHRlbXB0ZWQgd2hlbiBub3QgY2FsbGluZyBTdWJyZXNvdXJj
ZUxvYWRlcjo6ZGlkUmVjZWl2ZVJlc3BvbnNlKCkuCi0gICAgICAgIHVpbnQ2NF90IG1haW5SZXNv
dXJjZUxvYWRJZGVudGlmaWVyOwotICAgICAgICBpZiAobWFpblJlc291cmNlTG9hZGVyKQotICAg
ICAgICAgICAgbWFpblJlc291cmNlTG9hZElkZW50aWZpZXIgPSBtYWluUmVzb3VyY2VMb2FkZXIt
PmlkZW50aWZpZXIoKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbWFpblJlc291cmNlTG9h
ZElkZW50aWZpZXIgPSAwOwotCi0gICAgICAgIHdlYlByb2Nlc3MubmV0d29ya0Nvbm5lY3Rpb24o
KS0+Y29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJv
Y2Vzczo6Q29udmVydE1haW5SZXNvdXJjZUxvYWRUb0Rvd25sb2FkKHNlc3Npb25JRCwgbWFpblJl
c291cmNlTG9hZElkZW50aWZpZXIsIHBvbGljeURvd25sb2FkSUQsIHJlcXVlc3QsIHJlc3BvbnNl
KSwgMCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgLy8gVXNlIDAgdG8gaW5kaWNhdGUg
dGhhdCB0aGUgcmVzb3VyY2UgbG9hZCBjYW4ndCBiZSBjb252ZXJ0ZWQgYW5kIGEgbmV3IGRvd25s
b2FkIG11c3QgYmUgc3RhcnRlZC4KKyAgICAvLyBUaGlzIGNhbiBoYXBwZW4gaWYgdGhlcmUgaXMg
bm8gbG9hZGVyIGJlY2F1c2UgdGhlIG1haW4gcmVzb3VyY2UgaXMgaW4gdGhlIFdlYkNvcmUgbWVt
b3J5IGNhY2hlLAorICAgIC8vIG9yIGJlY2F1c2UgdGhlIGNvbnZlcnNpb24gd2FzIGF0dGVtcHRl
ZCB3aGVuIG5vdCBjYWxsaW5nIFN1YnJlc291cmNlTG9hZGVyOjpkaWRSZWNlaXZlUmVzcG9uc2Uo
KS4KKyAgICB1aW50NjRfdCBtYWluUmVzb3VyY2VMb2FkSWRlbnRpZmllcjsKKyAgICBpZiAobWFp
blJlc291cmNlTG9hZGVyKQorICAgICAgICBtYWluUmVzb3VyY2VMb2FkSWRlbnRpZmllciA9IG1h
aW5SZXNvdXJjZUxvYWRlci0+aWRlbnRpZmllcigpOworICAgIGVsc2UKKyAgICAgICAgbWFpblJl
c291cmNlTG9hZElkZW50aWZpZXIgPSAwOwogCi0gICAgaWYgKCFtYWluUmVzb3VyY2VMb2FkZXIp
IHsKLSAgICAgICAgLy8gVGhlIG1haW4gcmVzb3VyY2UgaGFzIGFscmVhZHkgYmVlbiBsb2FkZWQu
IFN0YXJ0IGEgbmV3IGRvd25sb2FkIGluc3RlYWQuCi0jaWYgIVVTRShORVRXT1JLX1NFU1NJT04p
Ci0gICAgICAgIHdlYlByb2Nlc3MuZG93bmxvYWRNYW5hZ2VyKCkuc3RhcnREb3dubG9hZChzZXNz
aW9uSUQsIHBvbGljeURvd25sb2FkSUQsIHJlcXVlc3QpOwotI2VuZGlmCi0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSNpZiBVU0UoTkVUV09SS19TRVNTSU9OKQotICAgIC8vIFVzaW5nIE5FVFdP
UktfU0VTU0lPTiByZXF1aXJlcyB0aGUgdXNlIG9mIGEgbmV0d29yayBwcm9jZXNzLgotICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0jZWxzZQotICAgIHdlYlByb2Nlc3MuZG93bmxv
YWRNYW5hZ2VyKCkuY29udmVydEhhbmRsZVRvRG93bmxvYWQocG9saWN5RG93bmxvYWRJRCwgZG9j
dW1lbnRMb2FkZXItPm1haW5SZXNvdXJjZUxvYWRlcigpLT5oYW5kbGUoKSwgcmVxdWVzdCwgcmVz
cG9uc2UpOwotI2VuZGlmCisgICAgd2ViUHJvY2Vzcy5uZXR3b3JrQ29ubmVjdGlvbigpLT5jb25u
ZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpD
b252ZXJ0TWFpblJlc291cmNlTG9hZFRvRG93bmxvYWQoc2Vzc2lvbklELCBtYWluUmVzb3VyY2VM
b2FkSWRlbnRpZmllciwgcG9saWN5RG93bmxvYWRJRCwgcmVxdWVzdCwgcmVzcG9uc2UpLCAwKTsK
IH0KIAogU3RyaW5nIFdlYkZyYW1lOjpzb3VyY2UoKSBjb25zdApJbmRleDogU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9zb3VwL1dlYlByb2Nlc3NTb3VwLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL3NvdXAvV2ViUHJvY2Vzc1NvdXAuY3BwCShyZXZpc2lvbiAx
OTI3NTMpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL3NvdXAvV2ViUHJvY2Vzc1NvdXAu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSwxOCArNDksNiBAQAogCiBuYW1lc3BhY2UgV2ViS2l0
IHsKIAotc3RhdGljIHVpbnQ2NF90IGdldENhY2hlRGlza0ZyZWVTaXplKFNvdXBDYWNoZSogY2Fj
aGUpCi17Ci0gICAgQVNTRVJUKGNhY2hlKTsKLQotICAgIEdVbmlxdWVPdXRQdHI8Y2hhcj4gY2Fj
aGVEaXI7Ci0gICAgZ19vYmplY3RfZ2V0KEdfT0JKRUNUKGNhY2hlKSwgImNhY2hlLWRpciIsICZj
YWNoZURpci5vdXRQdHIoKSwgTlVMTCk7Ci0gICAgaWYgKCFjYWNoZURpcikKLSAgICAgICAgcmV0
dXJuIDA7Ci0KLSAgICByZXR1cm4gV2ViQ29yZTo6Z2V0Vm9sdW1lRnJlZVNpemVGb3JQYXRoKGNh
Y2hlRGlyLmdldCgpKTsKLX0KLQogdm9pZCBXZWJQcm9jZXNzOjpwbGF0Zm9ybVNldENhY2hlTW9k
ZWwoQ2FjaGVNb2RlbCBjYWNoZU1vZGVsKQogewogICAgIHVuc2lnbmVkIGNhY2hlVG90YWxDYXBh
Y2l0eSA9IDA7CkBAIC03NSwxMSArNjMsNiBAQCB2b2lkIFdlYlByb2Nlc3M6OnBsYXRmb3JtU2V0
Q2FjaGVNb2RlbChDCiAgICAgdWludDY0X3QgZGlza0ZyZWVTaXplID0gMDsKICAgICBTb3VwQ2Fj
aGUqIGNhY2hlID0gbnVsbHB0cjsKIAotICAgIGlmICghdXNlc05ldHdvcmtQcm9jZXNzKCkpIHsK
LSAgICAgICAgY2FjaGUgPSBXZWJDb3JlOjpTb3VwTmV0d29ya1Nlc3Npb246OmRlZmF1bHRTZXNz
aW9uKCkuY2FjaGUoKTsKLSAgICAgICAgZGlza0ZyZWVTaXplID0gZ2V0Q2FjaGVEaXNrRnJlZVNp
emUoY2FjaGUpIC8gV1RGOjpNQjsKLSAgICB9Ci0KICAgICB1aW50NjRfdCBtZW1TaXplID0gV1RG
OjpyYW1TaXplKCkgLyBXVEY6Ok1COwogICAgIGNhbGN1bGF0ZUNhY2hlU2l6ZXMoY2FjaGVNb2Rl
bCwgbWVtU2l6ZSwgZGlza0ZyZWVTaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGVU
b3RhbENhcGFjaXR5LCBjYWNoZU1pbkRlYWRDYXBhY2l0eSwgY2FjaGVNYXhEZWFkQ2FwYWNpdHks
IGRlYWREZWNvZGVkRGF0YURlbGV0aW9uSW50ZXJ2YWwsCkBAIC05NCwyMyArNzcsMTAgQEAgdm9p
ZCBXZWJQcm9jZXNzOjpwbGF0Zm9ybVNldENhY2hlTW9kZWwoQwogI2lmIFBMQVRGT1JNKEdUSykK
ICAgICBXZWJDb3JlOjpQYWdlQ2FjaGU6OnNpbmdsZXRvbigpLnNldFNob3VsZENsZWFyQmFja2lu
Z1N0b3Jlcyh0cnVlKTsKICNlbmRpZgotCi0gICAgaWYgKCF1c2VzTmV0d29ya1Byb2Nlc3MoKSkg
ewotICAgICAgICBpZiAodXJsQ2FjaGVEaXNrQ2FwYWNpdHkgPiBzb3VwX2NhY2hlX2dldF9tYXhf
c2l6ZShjYWNoZSkpCi0gICAgICAgICAgICBzb3VwX2NhY2hlX3NldF9tYXhfc2l6ZShjYWNoZSwg
dXJsQ2FjaGVEaXNrQ2FwYWNpdHkpOwotICAgIH0KIH0KIAogdm9pZCBXZWJQcm9jZXNzOjpwbGF0
Zm9ybUNsZWFyUmVzb3VyY2VDYWNoZXMoUmVzb3VyY2VDYWNoZXNUb0NsZWFyIGNhY2hlc1RvQ2xl
YXIpCiB7Ci0gICAgaWYgKGNhY2hlc1RvQ2xlYXIgPT0gSW5NZW1vcnlSZXNvdXJjZUNhY2hlc09u
bHkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIElmIHdlJ3JlIHVzaW5nIHRoZSBuZXR3b3Jr
IHByb2Nlc3MgdGhlbiBpdCBpcyB0aGUgb25seSBvbmUgdGhhdCBuZWVkcyB0byBjbGVhciB0aGUg
ZGlzayBjYWNoZS4KLSAgICBpZiAodXNlc05ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIHNvdXBfY2FjaGVfY2xlYXIoV2ViQ29yZTo6U291cE5ldHdvcmtTZXNzaW9uOjpk
ZWZhdWx0U2Vzc2lvbigpLmNhY2hlKCkpOwogfQogCiBzdGF0aWMgdm9pZCBzZXRTb3VwU2Vzc2lv
bkFjY2VwdExhbmd1YWdlKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBsYW5ndWFnZXMpCkBAIC0xMzUs
NjIgKzEwNSwxMCBAQCB2b2lkIFdlYlByb2Nlc3M6OnBsYXRmb3JtSW5pdGlhbGl6ZVdlYlByCiAg
ICAgICAgIHNlY2NvbXBGaWx0ZXJzLmluaXRpYWxpemUoKTsKICAgICB9CiAjZW5kaWYKLQotICAg
IGlmICh1c2VzTmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJU
KCFwYXJhbWV0ZXJzLmRpc2tDYWNoZURpcmVjdG9yeS5pc0VtcHR5KCkpOwotCi0gICAgLy8gV2Ug
dXNlZCB0byB1c2UgdGhlIGdpdmVuIGNhY2hlIGRpcmVjdG9yeSBmb3IgdGhlIHNvdXAgY2FjaGUs
IGJ1dCBub3cgd2UgdXNlIGEgc3ViZGlyZWN0b3J5IHRvIGF2b2lkCi0gICAgLy8gY29uZmxpY3Rz
IHdpdGggb3RoZXIgY2FjaGUgZmlsZXMgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LiBSZW1vdmUgdGhl
IG9sZCBjYWNoZSBmaWxlcyBpZiB0aGV5IHN0aWxsIGV4aXN0LgotICAgIFdlYkNvcmU6OlNvdXBO
ZXR3b3JrU2Vzc2lvbjo6ZGVmYXVsdFNlc3Npb24oKS5jbGVhckNhY2hlKFdlYkNvcmU6OmRpcmVj
dG9yeU5hbWUocGFyYW1ldGVycy5kaXNrQ2FjaGVEaXJlY3RvcnkpKTsKLQotI2lmIEVOQUJMRShO
RVRXT1JLX0NBQ0hFKQotICAgIC8vIFdoZW4gbmV0d29yayBjYWNoZSBpcyBlbmFibGVkLCB0aGUg
ZGlzayBjYWNoZSBkaXJlY3RvcnkgaXMgdGhlIG5ldHdvcmsgcHJvY2VzcyBvbmUuCi0gICAgQ1N0
cmluZyBkaXNrQ2FjaGVQYXRoID0gV2ViQ29yZTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KFdl
YkNvcmU6OmRpcmVjdG9yeU5hbWUocGFyYW1ldGVycy5kaXNrQ2FjaGVEaXJlY3RvcnkpLCAid2Vi
a2l0IikudXRmOCgpOwotI2Vsc2UKLSAgICBDU3RyaW5nIGRpc2tDYWNoZVBhdGggPSBwYXJhbWV0
ZXJzLmRpc2tDYWNoZURpcmVjdG9yeS51dGY4KCk7Ci0jZW5kaWYKLQotICAgIEdSZWZQdHI8U291
cENhY2hlPiBzb3VwQ2FjaGUgPSBhZG9wdEdSZWYoc291cF9jYWNoZV9uZXcoZGlza0NhY2hlUGF0
aC5kYXRhKCksIFNPVVBfQ0FDSEVfU0lOR0xFX1VTRVIpKTsKLSAgICBXZWJDb3JlOjpTb3VwTmV0
d29ya1Nlc3Npb246OmRlZmF1bHRTZXNzaW9uKCkuc2V0Q2FjaGUoc291cENhY2hlLmdldCgpKTsK
LSAgICAvLyBTZXQgYW4gaW5pdGlhbCBodWdlIG1heF9zaXplIGZvciB0aGUgU291cENhY2hlIHNv
IHRoZSBjYWxsIHRvIHNvdXBfY2FjaGVfbG9hZCgpIHdvbid0IGV2aWN0IGFueSBjYWNoZWQKLSAg
ICAvLyByZXNvdXJjZS4gVGhlIGZpbmFsIHNpemUgb2YgdGhlIGNhY2hlIHdpbGwgYmUgc2V0IGJ5
IE5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybVNldENhY2hlTW9kZWwoKS4KLSAgICB1bnNpZ25lZCBp
bml0aWFsTWF4U2l6ZSA9IHNvdXBfY2FjaGVfZ2V0X21heF9zaXplKHNvdXBDYWNoZS5nZXQoKSk7
Ci0gICAgc291cF9jYWNoZV9zZXRfbWF4X3NpemUoc291cENhY2hlLmdldCgpLCBHX01BWFVJTlQp
OwotICAgIHNvdXBfY2FjaGVfbG9hZChzb3VwQ2FjaGUuZ2V0KCkpOwotICAgIHNvdXBfY2FjaGVf
c2V0X21heF9zaXplKHNvdXBDYWNoZS5nZXQoKSwgaW5pdGlhbE1heFNpemUpOwotCi0gICAgaWYg
KCFwYXJhbWV0ZXJzLmNvb2tpZVBlcnNpc3RlbnRTdG9yYWdlUGF0aC5pc0VtcHR5KCkpIHsKLSAg
ICAgICAgc3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2VyPigpLT5zZXRDb29raWVQZXJzaXN0ZW50
U3RvcmFnZShwYXJhbWV0ZXJzLmNvb2tpZVBlcnNpc3RlbnRTdG9yYWdlUGF0aCwKLSAgICAgICAg
ICAgIHBhcmFtZXRlcnMuY29va2llUGVyc2lzdGVudFN0b3JhZ2VUeXBlKTsKLSAgICB9Ci0gICAg
c3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2VyPigpLT5zZXRIVFRQQ29va2llQWNjZXB0UG9saWN5
KHBhcmFtZXRlcnMuY29va2llQWNjZXB0UG9saWN5KTsKLQotICAgIGlmICghcGFyYW1ldGVycy5s
YW5ndWFnZXMuaXNFbXB0eSgpKQotICAgICAgICBzZXRTb3VwU2Vzc2lvbkFjY2VwdExhbmd1YWdl
KHBhcmFtZXRlcnMubGFuZ3VhZ2VzKTsKLQotICAgIHNldElnbm9yZVRMU0Vycm9ycyhwYXJhbWV0
ZXJzLmlnbm9yZVRMU0Vycm9ycyk7Ci0KLSAgICBXZWJDb3JlOjphZGRMYW5ndWFnZUNoYW5nZU9i
c2VydmVyKHRoaXMsIGxhbmd1YWdlQ2hhbmdlZCk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzczo6cGxh
dGZvcm1UZXJtaW5hdGUoKQogewotICAgIGlmICghdXNlc05ldHdvcmtQcm9jZXNzKCkpCi0gICAg
ICAgIFdlYkNvcmU6OnJlbW92ZUxhbmd1YWdlQ2hhbmdlT2JzZXJ2ZXIodGhpcyk7Ci19Ci0KLXZv
aWQgV2ViUHJvY2Vzczo6c2V0SWdub3JlVExTRXJyb3JzKGJvb2wgaWdub3JlVExTRXJyb3JzKQot
ewotICAgIEFTU0VSVCghdXNlc05ldHdvcmtQcm9jZXNzKCkpOwotICAgIFdlYkNvcmU6OlJlc291
cmNlSGFuZGxlOjpzZXRJZ25vcmVTU0xFcnJvcnMoaWdub3JlVExTRXJyb3JzKTsKLX0KLQotdm9p
ZCBXZWJQcm9jZXNzOjphbGxvd1NwZWNpZmljSFRUUFNDZXJ0aWZpY2F0ZUZvckhvc3QoY29uc3Qg
V2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvJiBjZXJ0aWZpY2F0ZUluZm8sIGNvbnN0IFN0cmluZyYg
aG9zdCkKLXsKLSAgICBBU1NFUlQoIXVzZXNOZXR3b3JrUHJvY2VzcygpKTsKLSAgICBXZWJDb3Jl
OjpSZXNvdXJjZUhhbmRsZTo6c2V0Q2xpZW50Q2VydGlmaWNhdGUoaG9zdCwgY2VydGlmaWNhdGVJ
bmZvLmNlcnRpZmljYXRlKCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFRv
b2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5
Mjc1OCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3IEBA
CisyMDE1LTExLTIzICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+
CisKKyAgICAgICAgTWFrZSB1c2VzTmV0d29ya1Byb2Nlc3MgYWx3YXlzIHRydWUKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MTU4MAorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXQyL0dlb2xvY2F0aW9uLmNwcDoKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRF
U1QpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mi9tYWMvR2V0UElEQWZ0
ZXJBYm9ydGVkUHJvY2Vzc0xhdW5jaC5jcHA6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNU
KToKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcDoKKyAgICAg
ICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OmdlbmVyYXRlUGFnZUNvbmZpZ3VyYXRpb24pOgorCiAy
MDE1LTExLTIzICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CiAK
ICAgICAgICAgRml4IGNyYXNoIGluIH5XZWJQcm9jZXNzUG9vbCB3aGVuIHVzaW5nIEdlb2xvY2F0
aW9uIHdpdGggdXNlTmV0d29ya1Byb2Nlc3M9dHJ1ZQpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXQyL0dlb2xvY2F0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDIvR2VvbG9jYXRpb24uY3BwCShyZXZpc2lvbiAxOTI3NTMp
CisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDIvR2VvbG9jYXRpb24uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yNTAsNyArMjUwLDYgQEAgc3RydWN0IEdlb2xvY2F0aW9uVHJhbnNp
dGlvblRvSGlnaEFjY3VyYQogVEVTVChXZWJLaXQyLCBHZW9sb2NhdGlvblRyYW5zaXRpb25Ub0hp
Z2hBY2N1cmFjeSkKIHsKICAgICBXS1JldGFpblB0cjxXS0NvbnRleHRSZWY+IGNvbnRleHQoQWRv
cHRXSywgV0tDb250ZXh0Q3JlYXRlKCkpOwotICAgIFdLQ29udGV4dFNldFVzZXNOZXR3b3JrUHJv
Y2Vzcyhjb250ZXh0LmdldCgpLCB0cnVlKTsKIAogICAgIEdlb2xvY2F0aW9uVHJhbnNpdGlvblRv
SGlnaEFjY3VyYWN5U3RhdGVUcmFja2VyIHN0YXRlVHJhY2tlcjsKICAgICBzZXR1cEdlb2xvY2F0
aW9uUHJvdmlkZXIoY29udGV4dC5nZXQoKSwgJnN0YXRlVHJhY2tlcik7CkluZGV4OiBUb29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDIvbWFjL0dldFBJREFmdGVyQWJvcnRlZFByb2Nlc3NM
YXVuY2guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
Mi9tYWMvR2V0UElEQWZ0ZXJBYm9ydGVkUHJvY2Vzc0xhdW5jaC5jcHAJKHJldmlzaW9uIDE5Mjc1
MykKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mi9tYWMvR2V0UElEQWZ0ZXJB
Ym9ydGVkUHJvY2Vzc0xhdW5jaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDYgQEAg
c3RhdGljIHZvaWQgZGlkRmluaXNoTG9hZEZvckZyYW1lKFdLUGFnZQogVEVTVChXZWJLaXQyLCBH
ZXRQSURBZnRlckFib3J0ZWRQcm9jZXNzTGF1bmNoKQogewogICAgIFdLUmV0YWluUHRyPFdLQ29u
dGV4dFJlZj4gY29udGV4dChBZG9wdFdLLCBXS0NvbnRleHRDcmVhdGUoKSk7Ci0gICAgV0tDb250
ZXh0U2V0VXNlc05ldHdvcmtQcm9jZXNzKGNvbnRleHQuZ2V0KCksIHRydWUpOwogCiAgICAgUGxh
dGZvcm1XZWJWaWV3IHdlYlZpZXcoY29udGV4dC5nZXQoKSk7CiAKSW5kZXg6IFRvb2xzL1dlYktp
dFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktp
dFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAxOTI3NTMpCisrKyBUb29s
cy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDAxLDcgKzQwMSw2IEBAIFdLUmV0YWluUHRyPFdLUGFnZUNvbmZpZ3VyYXRpb25SZWY+IFRlc3QK
ICAgICBtX2dlb2xvY2F0aW9uUHJvdmlkZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPEdlb2xvY2F0aW9u
UHJvdmlkZXJNb2NrPihtX2NvbnRleHQuZ2V0KCkpOwogCiAjaWYgUExBVEZPUk0oRUZMKQotICAg
IFdLQ29udGV4dFNldFVzZXNOZXR3b3JrUHJvY2VzcyhtX2NvbnRleHQuZ2V0KCksIGZhbHNlKTsK
ICAgICBXS0NvbnRleHRTZXRQcm9jZXNzTW9kZWwobV9jb250ZXh0LmdldCgpLCBrV0tQcm9jZXNz
TW9kZWxTaGFyZWRTZWNvbmRhcnlQcm9jZXNzKTsKICNlbmRpZgogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>266117</attachid>
            <date>2015-11-23 21:56:20 -0800</date>
            <delta_ts>2015-11-23 22:12:57 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-151580-20151123215603.patch</filename>
            <type>text/plain</type>
            <size>75024</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5Mjc1MykKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0MSBAQAorMjAxNS0xMS0yMyAgQWxleCBD
aHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgorCisgICAgICAgIE1ha2UgdXNl
c05ldHdvcmtQcm9jZXNzIGFsd2F5cyB0cnVlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNTE1ODAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL21hYy9SZW1vdGVOZXR3b3JraW5n
Q29udGV4dC5tbToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlTmV0d29ya2luZ0NvbnRleHQ6OmVu
c3VyZVByaXZhdGVCcm93c2luZ1Nlc3Npb24pOgorICAgICAgICAqIFNoYXJlZC9BUEkvYy9XS0Rl
cHJlY2F0ZWRGdW5jdGlvbnMuY3BwOgorICAgICAgICAoV0tJbnNwZWN0b3JUb2dnbGVKYXZhU2Ny
aXB0UHJvZmlsaW5nKToKKyAgICAgICAgKFdLQ29udGV4dFNldFVzZXNOZXR3b3JrUHJvY2Vzcyk6
CisgICAgICAgIChXS0dyYXBoaWNzQ29udGV4dEdldENHQ29udGV4dCk6CisgICAgICAgICogU2hh
cmVkL05ldHdvcmsvQ3VzdG9tUHJvdG9jb2xzL0NvY29hL0N1c3RvbVByb3RvY29sTWFuYWdlckNv
Y29hLm1tOgorICAgICAgICAoV2ViS2l0OjpDdXN0b21Qcm90b2NvbE1hbmFnZXI6OmluaXRpYWxp
emUpOgorICAgICAgICAqIFNoYXJlZC9OZXR3b3JrL0N1c3RvbVByb3RvY29scy9zb3VwL0N1c3Rv
bVByb3RvY29sTWFuYWdlclNvdXAuY3BwOgorICAgICAgICAoV2ViS2l0OjpDdXN0b21Qcm90b2Nv
bE1hbmFnZXI6OmluaXRpYWxpemUpOgorICAgICAgICAqIFNoYXJlZC9XZWJQcm9jZXNzQ3JlYXRp
b25QYXJhbWV0ZXJzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc0NyZWF0aW9uUGFy
YW1ldGVyczo6V2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyk6CisgICAgICAgIChXZWJLaXQ6
OldlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM6OmVuY29kZSk6CisgICAgICAgIChXZWJLaXQ6
OldlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM6OmRlY29kZSk6CisgICAgICAgICogU2hhcmVk
L1dlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L0FQSVByb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5jcHA6CisgICAgICAgIChBUEk6OlByb2Nlc3NQ
b29sQ29uZmlndXJhdGlvbjo6Y3JlYXRlV2l0aExlZ2FjeU9wdGlvbnMpOgorICAgICAgICAoQVBJ
OjpQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb246OmNvcHkpOgorICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvQVBJUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQ
SS9DL1dLQ29udGV4dC5jcHA6CisgICAgICAgIChXS0NvbnRleHRTZXRKYXZhU2NyaXB0R2FyYmFn
ZUNvbGxlY3RvclRpbWVyRW5hYmxlZCk6CisgICAgICAgIChXS0NvbnRleHRVc2VUZXN0aW5nTmV0
d29ya1Nlc3Npb24pOgorICAgICAgICAoV0tDb250ZXh0U2V0VXNlc05ldHdvcmtQcm9jZXNzKTog
RGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0UHJpdmF0ZS5oOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcm9jZXNzR3JvdXAubW06CisgICAgICAg
ICgtW1dLUHJvY2Vzc0dyb3VwIGluaXRXaXRoSW5qZWN0ZWRCdW5kbGVVUkw6XSk6CisgICAgICAg
ICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQuY3BwOgorICAgICAgICAoRXdrQ29udGV4
dDo6c2V0UHJvY2Vzc01vZGVsKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRX
ZWJDb250ZXh0LmNwcDoKKyAgICAgICAgKHdlYmtpdFdlYkNvbnRleHRDb25zdHJ1Y3RlZCk6Cisg
ICAgICAgICh3ZWJraXRfd2ViX2NvbnRleHRfc2V0X3Byb2Nlc3NfbW9kZWwpOgorICAgICAgICAq
IFVJUHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNzUG9vbENvY29hLm1tOgorICAgICAgICAoV2ViS2l0
OjpXZWJQcm9jZXNzUG9vbDo6dXBkYXRlUHJvY2Vzc1N1cHByZXNzaW9uU3RhdGUpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6cGxhdGZvcm1Jbml0aWFsaXplV2ViUHJvY2Vzcyk6
CisgICAgICAgICogVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5LmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6RG93bmxvYWRQcm94eTo6Y2FuY2VsKToKKyAgICAgICAgKFdlYktpdDo6RG93
bmxvYWRQcm94eTo6aW52YWxpZGF0ZSk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYkNvb2tpZU1h
bmFnZXJQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6
c2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeSk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1h
bmFnZXJQcm94eTo6Z2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeSk6CisgICAgICAgICogVUlQcm9j
ZXNzL1dlYlByb2Nlc3NQb29sLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6
OldlYlByb2Nlc3NQb29sKToKKyAgICAgICAgKFdlYktpdDo6bV9wcm9jZXNzU3VwcHJlc3Npb25E
aXNhYmxlZEZvclBhZ2VDb3VudGVyKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6
Om5ldHdvcmtpbmdQcm9jZXNzQ29ubmVjdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nl
c3NQb29sOjpsYW5ndWFnZUNoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9v
bDo6dGV4dENoZWNrZXJTdGF0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNz
UG9vbDo6ZW5zdXJlTmV0d29ya1Byb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNz
UG9vbDo6c2V0QW55UGFnZUdyb3VwTWlnaHRIYXZlUHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpjcmVhdGVOZXdXZWJQcm9jZXNzKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmRvd25sb2FkKToKKyAgICAgICAgKFdlYktp
dDo6V2ViUHJvY2Vzc1Bvb2w6OnJlc3VtZURvd25sb2FkKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UHJvY2Vzc1Bvb2w6OnNldENhbkhhbmRsZUhUVFBTU2VydmVyVHJ1c3RFdmFsdWF0aW9uKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNldENhY2hlTW9kZWwpOgorICAgICAgICAo
V2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6Y3JlYXRlRG93bmxvYWRQcm94eSk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlByb2Nlc3NQb29sOjphZGRNZXNzYWdlUmVjZWl2ZXIpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQcm9jZXNzUG9vbDo6YWxsb3dTcGVjaWZpY0hUVFBTQ2VydGlmaWNhdGVGb3JIb3N0
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNldEhUVFBQaXBlbGluaW5nRW5h
YmxlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpyZXF1ZXN0TmV0d29ya2lu
Z1N0YXRpc3RpY3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2V0VXNlc05l
dHdvcmtQcm9jZXNzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6
OnVzZXNOZXR3b3JrUHJvY2Vzcyk6IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL1dlYlBy
b2Nlc3NQb29sLmg6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZW5kVG9OZXR3
b3JraW5nUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZW5kVG9O
ZXR3b3JraW5nUHJvY2Vzc1JlbGF1bmNoaW5nSWZOZWNlc3NhcnkpOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUHJv
eHk6OnNodXREb3duKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Byb3h5OjpyZW1vdmVX
ZWJQYWdlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Byb3h5OjpjYW5UZXJtaW5hdGVD
aGlsZFByb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUHJveHk6OnVwZGF0ZVRl
eHRDaGVja2VyU3RhdGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUHJveHk6OmRpZFNh
dmVUb1BhZ2VDYWNoZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQcm94eTo6ZGlkU2V0
QXNzZXJ0aW9uU3RhdGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUHJveHk6OmNyZWF0
ZURvd25sb2FkUHJveHkpOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQcm9jZXNz
UHJveHkuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvZ3RrL1dlYlByb2Nlc3NQb29sR3RrLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnBsYXRmb3JtSW5pdGlhbGl6ZVdlYlBy
b2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2V0SWdub3JlVExTRXJy
b3JzKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL0ZpbGVBUEkvQmxvYlJlZ2lzdHJ5UHJveHkuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpCbG9iUmVnaXN0cnlQcm94eTo6cmVnaXN0ZXJGaWxlQmxvYlVS
TCk6CisgICAgICAgIChXZWJLaXQ6OkJsb2JSZWdpc3RyeVByb3h5OjpyZWdpc3RlckJsb2JVUkwp
OgorICAgICAgICAoV2ViS2l0OjpCbG9iUmVnaXN0cnlQcm94eTo6dW5yZWdpc3RlckJsb2JVUkwp
OgorICAgICAgICAoV2ViS2l0OjpCbG9iUmVnaXN0cnlQcm94eTo6cmVnaXN0ZXJCbG9iVVJMRm9y
U2xpY2UpOgorICAgICAgICAoV2ViS2l0OjpCbG9iUmVnaXN0cnlQcm94eTo6YmxvYlNpemUpOgor
ICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVz
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpjb29raWVzRm9y
RE9NKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpzZXRDb29raWVz
RnJvbURPTSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBsYXRmb3JtU3RyYXRlZ2llczo6Y29va2ll
c0VuYWJsZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmNvb2tp
ZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGxhdGZvcm1T
dHJhdGVnaWVzOjpnZXRSYXdDb29raWVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGxhdGZvcm1T
dHJhdGVnaWVzOjpkZWxldGVDb29raWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQbGF0Zm9ybVN0
cmF0ZWdpZXM6OnJlc291cmNlTG9hZFNjaGVkdWxlcik6CisgICAgICAgIChXZWJLaXQ6OldlYlBs
YXRmb3JtU3RyYXRlZ2llczo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseSk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlBsYXRmb3JtU3RyYXRlZ2llczo6Y3JlYXRlUGluZ0hhbmRsZSk6CisgICAgICAg
IChXZWJLaXQ6OldlYlBsYXRmb3JtU3RyYXRlZ2llczo6Y3JlYXRlQmxvYlJlZ2lzdHJ5KToKKyAg
ICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3BwOgorICAgICAgICAoV2ViS2l0
OjpXZWJGcmFtZTo6c3RhcnREb3dubG9hZCk6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lOjpj
b252ZXJ0TWFpblJlc291cmNlTG9hZFRvRG93bmxvYWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJG
cmFtZTo6c291cmNlKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzOjpXZWJQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6
V2ViUHJvY2Vzczo6aW5pdGlhbGl6ZUNvbm5lY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
cm9jZXNzOjppbml0aWFsaXplV2ViUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nl
c3M6OmVuc3VyZU5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbik6CisgICAgICAgIChXZWJLaXQ6Oldl
YlByb2Nlc3M6OmRlc3Ryb3lQcml2YXRlQnJvd3NpbmdTZXNzaW9uKToKKyAgICAgICAgKFdlYktp
dDo6V2ViUHJvY2Vzczo6cGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb25NYW5hZ2VyKToKKyAgICAgICAg
KFdlYktpdDo6V2ViUHJvY2Vzczo6c2hvdWxkVGVybWluYXRlKToKKyAgICAgICAgKFdlYktpdDo6
V2ViUHJvY2Vzczo6c2V0SW5qZWN0ZWRCdW5kbGVQYXJhbWV0ZXJzKToKKyAgICAgICAgKFdlYktp
dDo6V2ViUHJvY2Vzczo6bmV0d29ya0Nvbm5lY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
cm9jZXNzOjpzZXRFbmhhbmNlZEFjY2Vzc2liaWxpdHkpOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
cm9jZXNzOjpwcmVmZXRjaEROUyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3M6OmRpZENy
ZWF0ZURvd25sb2FkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzczo6ZGlk
RGVzdHJveURvd25sb2FkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzczo6
ZG93bmxvYWRQcm94eUNvbm5lY3Rpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJQ
cm9jZXNzOjpkb3dubG9hZHNBdXRoZW50aWNhdGlvbk1hbmFnZXIpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViS2l0OjpXZWJQcm9jZXNzOjpkb3dubG9hZE1hbmFnZXIpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViS2l0OjpXZWJQcm9jZXNzOjp1c2VzTmV0d29ya1Byb2Nlc3MpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzOjpkb3dubG9hZFJlcXVlc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzOjpyZXN1bWVEb3dubG9hZCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJLaXQ6OldlYlByb2Nlc3M6OmNhbmNlbERvd25sb2FkKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBXZWJQcm9jZXNzL1dlYlByb2Nlc3MuaDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vz
czo6dGV4dENoZWNrZXJTdGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3M6OmV2ZW50
RGlzcGF0Y2hlcik6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLm1lc3NhZ2VzLmlu
OgorICAgICAgICAqIFdlYlByb2Nlc3Mvc291cC9XZWJQcm9jZXNzU291cC5jcHA6CisgICAgICAg
IChXZWJLaXQ6OldlYlByb2Nlc3M6OnBsYXRmb3JtU2V0Q2FjaGVNb2RlbCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlByb2Nlc3M6OnBsYXRmb3JtQ2xlYXJSZXNvdXJjZUNhY2hlcyk6CisgICAgICAg
IChXZWJLaXQ6OnNldFNvdXBTZXNzaW9uQWNjZXB0TGFuZ3VhZ2UpOgorICAgICAgICAoV2ViS2l0
OjpXZWJQcm9jZXNzOjpwbGF0Zm9ybUluaXRpYWxpemVXZWJQcm9jZXNzKToKKyAgICAgICAgKFdl
YktpdDo6V2ViUHJvY2Vzczo6cGxhdGZvcm1UZXJtaW5hdGUpOgorICAgICAgICAoV2ViS2l0Ojpn
ZXRDYWNoZURpc2tGcmVlU2l6ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nl
c3M6OnNldElnbm9yZVRMU0Vycm9ycyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlBy
b2Nlc3M6OmFsbG93U3BlY2lmaWNIVFRQU0NlcnRpZmljYXRlRm9ySG9zdCk6IERlbGV0ZWQuCisK
IDIwMTUtMTEtMjMgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4K
IAogICAgICAgICBGaXggY3Jhc2ggaW4gfldlYlByb2Nlc3NQb29sIHdoZW4gdXNpbmcgR2VvbG9j
YXRpb24gd2l0aCB1c2VOZXR3b3JrUHJvY2Vzcz10cnVlCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9O
ZXR3b3JrUHJvY2Vzcy9tYWMvUmVtb3RlTmV0d29ya2luZ0NvbnRleHQubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvbWFjL1JlbW90ZU5ldHdvcmtpbmdDb250
ZXh0Lm1tCShyZXZpc2lvbiAxOTI3NTMpCisrKyBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vz
cy9tYWMvUmVtb3RlTmV0d29ya2luZ0NvbnRleHQubW0JKHdvcmtpbmcgY29weSkKQEAgLTkzLDgg
KzkzLDEzIEBAIHZvaWQgUmVtb3RlTmV0d29ya2luZ0NvbnRleHQ6OmVuc3VyZVByaXYKICAgICBp
ZiAoU2Vzc2lvblRyYWNrZXI6OnN0b3JhZ2VTZXNzaW9uKHNlc3Npb25JRCkpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIEFTU0VSVCghU2Vzc2lvblRyYWNrZXI6OmdldElkZW50aWZpZXJCYXNlKCku
aXNOdWxsKCkpOwotICAgIFNlc3Npb25UcmFja2VyOjpzZXRTZXNzaW9uKHNlc3Npb25JRCwgTmV0
d29ya1N0b3JhZ2VTZXNzaW9uOjpjcmVhdGVQcml2YXRlQnJvd3NpbmdTZXNzaW9uKFNlc3Npb25U
cmFja2VyOjpnZXRJZGVudGlmaWVyQmFzZSgpICsgJy4nICsgU3RyaW5nOjpudW1iZXIoc2Vzc2lv
bklELnNlc3Npb25JRCgpKSkKKyAgICBTdHJpbmcgYmFzZTsKKyAgICBpZiAoU2Vzc2lvblRyYWNr
ZXI6OmdldElkZW50aWZpZXJCYXNlKCkuaXNOdWxsKCkpCisgICAgICAgIGJhc2UgPSBbW05TQnVu
ZGxlIG1haW5CdW5kbGVdIGJ1bmRsZUlkZW50aWZpZXJdOworICAgIGVsc2UKKyAgICAgICAgYmFz
ZSA9IFNlc3Npb25UcmFja2VyOjpnZXRJZGVudGlmaWVyQmFzZSgpOworCisgICAgU2Vzc2lvblRy
YWNrZXI6OnNldFNlc3Npb24oc2Vzc2lvbklELCBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmNyZWF0
ZVByaXZhdGVCcm93c2luZ1Nlc3Npb24oYmFzZSArICcuJyArIFN0cmluZzo6bnVtYmVyKHNlc3Np
b25JRC5zZXNzaW9uSUQoKSkpCiAjaWYgVVNFKE5FVFdPUktfU0VTU0lPTikKICAgICAgICAgLCBz
dGQ6Om1ha2VfdW5pcXVlPE5ldHdvcmtTZXNzaW9uPihOZXR3b3JrU2Vzc2lvbjo6VHlwZTo6RXBo
ZW1lcmFsLCBzZXNzaW9uSUQpCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9X
ZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAJKHJldmlzaW9uIDE5
Mjc1MykKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0
ZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsNyArNDMsNiBAQCBXZWJQcm9jZXNzQ3JlYXRp
b25QYXJhbWV0ZXJzOjpXZWJQcm9jZXNzCiAgICAgLCBzaG91bGRFbmFibGVKSVQoZmFsc2UpCiAg
ICAgLCBzaG91bGRFbmFibGVGVExKSVQoZmFsc2UpCiAjZW5kaWYKLSAgICAsIHVzZXNOZXR3b3Jr
UHJvY2VzcyhmYWxzZSkKICAgICAsIG1lbW9yeUNhY2hlRGlzYWJsZWQoZmFsc2UpCiAjaWYgRU5B
QkxFKFNFUlZJQ0VfQ09OVFJPTFMpCiAgICAgLCBoYXNJbWFnZVNlcnZpY2VzKGZhbHNlKQpAQCAt
OTcsNyArOTYsNiBAQCB2b2lkIFdlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM6OmVuY29kCiAg
ICAgZW5jb2RlciA8PCBjb29raWVQZXJzaXN0ZW50U3RvcmFnZVBhdGg7CiAgICAgZW5jb2RlciA8
PCBjb29raWVQZXJzaXN0ZW50U3RvcmFnZVR5cGU7CiAgICAgZW5jb2Rlci5lbmNvZGVFbnVtKGNv
b2tpZUFjY2VwdFBvbGljeSk7Ci0gICAgZW5jb2RlciA8PCBpZ25vcmVUTFNFcnJvcnM7CiAjZW5k
aWYKICAgICBlbmNvZGVyLmVuY29kZUVudW0oY2FjaGVNb2RlbCk7CiAgICAgZW5jb2RlciA8PCBz
aG91bGRBbHdheXNVc2VDb21wbGV4VGV4dENvZGVQYXRoOwpAQCAtMTMxLDggKzEyOSw2IEBAIHZv
aWQgV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyczo6ZW5jb2QKICAgICBlbmNvZGVyIDw8IG5v
dGlmaWNhdGlvblBlcm1pc3Npb25zOwogI2VuZGlmCiAKLSAgICBlbmNvZGVyIDw8IHVzZXNOZXR3
b3JrUHJvY2VzczsKLQogICAgIGVuY29kZXIgPDwgcGx1Z0luQXV0b1N0YXJ0T3JpZ2luSGFzaGVz
OwogICAgIGVuY29kZXIgPDwgcGx1Z0luQXV0b1N0YXJ0T3JpZ2luczsKICAgICBlbmNvZGVyIDw8
IG1lbW9yeUNhY2hlRGlzYWJsZWQ7CkBAIC0yMjEsOCArMjE3LDYgQEAgYm9vbCBXZWJQcm9jZXNz
Q3JlYXRpb25QYXJhbWV0ZXJzOjpkZWNvZAogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYg
KCFkZWNvZGVyLmRlY29kZUVudW0ocGFyYW1ldGVycy5jb29raWVBY2NlcHRQb2xpY3kpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShwYXJhbWV0ZXJzLmln
bm9yZVRMU0Vycm9ycykpCi0gICAgICAgIHJldHVybiBmYWxzZTsKICNlbmRpZgogICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGVFbnVtKHBhcmFtZXRlcnMuY2FjaGVNb2RlbCkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKQEAgLTI4Nyw5ICsyODEsNiBAQCBib29sIFdlYlByb2Nlc3NDcmVhdGlvblBhcmFt
ZXRlcnM6OmRlY29kCiAgICAgICAgIHJldHVybiBmYWxzZTsKICNlbmRpZgogCi0gICAgaWYgKCFk
ZWNvZGVyLmRlY29kZShwYXJhbWV0ZXJzLnVzZXNOZXR3b3JrUHJvY2VzcykpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQogICAgIGlmICghZGVjb2Rlci5kZWNvZGUocGFyYW1ldGVycy5wbHVnSW5B
dXRvU3RhcnRPcmlnaW5IYXNoZXMpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKCFk
ZWNvZGVyLmRlY29kZShwYXJhbWV0ZXJzLnBsdWdJbkF1dG9TdGFydE9yaWdpbnMpKQpJbmRleDog
U291cmNlL1dlYktpdDIvU2hhcmVkL1dlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1l
dGVycy5oCShyZXZpc2lvbiAxOTI3NTMpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViUHJv
Y2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDUsNyArMTA1LDYg
QEAgc3RydWN0IFdlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMgewogICAgIFN0cmluZyBjb29r
aWVQZXJzaXN0ZW50U3RvcmFnZVBhdGg7CiAgICAgdWludDMyX3QgY29va2llUGVyc2lzdGVudFN0
b3JhZ2VUeXBlOwogICAgIEhUVFBDb29raWVBY2NlcHRQb2xpY3kgY29va2llQWNjZXB0UG9saWN5
OwotICAgIGJvb2wgaWdub3JlVExTRXJyb3JzOwogI2VuZGlmCiAKICAgICBDYWNoZU1vZGVsIGNh
Y2hlTW9kZWw7CkBAIC0xNTQsOCArMTUzLDYgQEAgc3RydWN0IFdlYlByb2Nlc3NDcmVhdGlvblBh
cmFtZXRlcnMgewogICAgIEhhc2hNYXA8U3RyaW5nLCBib29sPiBub3RpZmljYXRpb25QZXJtaXNz
aW9uczsKICNlbmRpZgogCi0gICAgYm9vbCB1c2VzTmV0d29ya1Byb2Nlc3M7Ci0KICAgICBIYXNo
TWFwPFdlYkNvcmU6OlNlc3Npb25JRCwgSGFzaE1hcDx1bnNpZ25lZCwgZG91YmxlPj4gcGx1Z0lu
QXV0b1N0YXJ0T3JpZ2luSGFzaGVzOwogICAgIFZlY3RvcjxTdHJpbmc+IHBsdWdJbkF1dG9TdGFy
dE9yaWdpbnM7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9BUEkvYy9XS0RlcHJlY2F0
ZWRGdW5jdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9BUEkv
Yy9XS0RlcHJlY2F0ZWRGdW5jdGlvbnMuY3BwCShyZXZpc2lvbiAxOTI3NTMpCisrKyBTb3VyY2Uv
V2ViS2l0Mi9TaGFyZWQvQVBJL2MvV0tEZXByZWNhdGVkRnVuY3Rpb25zLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjcsNiArMjcsNyBAQAogCiAjaW5jbHVkZSAiQVBJRGljdGlvbmFyeS5oIgogI2lu
Y2x1ZGUgIldLQXJyYXkuaCIKKyNpbmNsdWRlICJXS0NvbnRleHRQcml2YXRlLmgiCiAjaW5jbHVk
ZSAiV0tNdXRhYmxlRGljdGlvbmFyeS5oIgogI2luY2x1ZGUgIldLUHJlZmVyZW5jZXNSZWZQcml2
YXRlLmgiCiAjaW5jbHVkZSAiV0tTaGFyZWRBUElDYXN0LmgiCkBAIC0xMzQsNiArMTM1LDEwIEBA
IHZvaWQgV0tJbnNwZWN0b3JUb2dnbGVKYXZhU2NyaXB0UHJvZmlsaW4KIHsKIH0KIAordm9pZCBX
S0NvbnRleHRTZXRVc2VzTmV0d29ya1Byb2Nlc3MoV0tDb250ZXh0UmVmLCBib29sKQoreworfQor
CiAjaWYgUExBVEZPUk0oTUFDKQogQ0dDb250ZXh0UmVmIFdLR3JhcGhpY3NDb250ZXh0R2V0Q0dD
b250ZXh0KFdLR3JhcGhpY3NDb250ZXh0UmVmIGdyYXBoaWNzQ29udGV4dCkKIHsKSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL1NoYXJlZC9OZXR3b3JrL0N1c3RvbVByb3RvY29scy9Db2NvYS9DdXN0b21Q
cm90b2NvbE1hbmFnZXJDb2NvYS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvTmV0d29yay9DdXN0b21Qcm90b2NvbHMvQ29jb2EvQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ29j
b2EubW0JKHJldmlzaW9uIDE5Mjc1MykKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9OZXR3b3Jr
L0N1c3RvbVByb3RvY29scy9Db2NvYS9DdXN0b21Qcm90b2NvbE1hbmFnZXJDb2NvYS5tbQkod29y
a2luZyBjb3B5KQpAQCAtMTM0LDE3ICsxMzQsOSBAQCB2b2lkIEN1c3RvbVByb3RvY29sTWFuYWdl
cjo6aW5pdGlhbGl6ZUNvCiAKIHZvaWQgQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyOjppbml0aWFsaXpl
KGNvbnN0IFdlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmIHBhcmFtZXRlcnMpCiB7Ci0gICAg
QVNTRVJUKHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRGb3JDdXN0b21Qcm90b2NvbHMu
aXNFbXB0eSgpIHx8ICFwYXJhbWV0ZXJzLnVzZXNOZXR3b3JrUHJvY2Vzcyk7Ci0gICAgaWYgKHBh
cmFtZXRlcnMudXNlc05ldHdvcmtQcm9jZXNzKSB7Ci0gICAgICAgIG1fY2hpbGRQcm9jZXNzLT5w
YXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5yZW1vdmVXb3JrUXVldWVNZXNzYWdlUmVjZWl2ZXIo
TWVzc2FnZXM6OkN1c3RvbVByb3RvY29sTWFuYWdlcjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpKTsK
LSAgICAgICAgbV9tZXNzYWdlUXVldWUgPSBudWxscHRyOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgW05TVVJMUHJvdG9jb2wgcmVnaXN0ZXJDbGFzczpbV0tDdXN0b21Qcm90b2NvbCBj
bGFzc11dOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwYXJhbWV0ZXJzLnVybFNjaGVt
ZXNSZWdpc3RlcmVkRm9yQ3VzdG9tUHJvdG9jb2xzLnNpemUoKTsgKytpKQotICAgICAgICByZWdp
c3RlclNjaGVtZShwYXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkRm9yQ3VzdG9tUHJvdG9j
b2xzW2ldKTsKKyAgICBBU1NFUlQocGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEZvckN1
c3RvbVByb3RvY29scy5pc0VtcHR5KCkpOworICAgIG1fY2hpbGRQcm9jZXNzLT5wYXJlbnRQcm9j
ZXNzQ29ubmVjdGlvbigpLT5yZW1vdmVXb3JrUXVldWVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6
OkN1c3RvbVByb3RvY29sTWFuYWdlcjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpKTsKKyAgICBtX21l
c3NhZ2VRdWV1ZSA9IG51bGxwdHI7CiB9CiAKIHZvaWQgQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyOjpp
bml0aWFsaXplKGNvbnN0IE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJiBwYXJhbWV0
ZXJzKQpJbmRleDogU291cmNlL1dlYktpdDIvU2hhcmVkL05ldHdvcmsvQ3VzdG9tUHJvdG9jb2xz
L3NvdXAvQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyU291cC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdDIvU2hhcmVkL05ldHdvcmsvQ3VzdG9tUHJvdG9jb2xzL3NvdXAvQ3VzdG9tUHJvdG9j
b2xNYW5hZ2VyU291cC5jcHAJKHJldmlzaW9uIDE5Mjc1MykKKysrIFNvdXJjZS9XZWJLaXQyL1No
YXJlZC9OZXR3b3JrL0N1c3RvbVByb3RvY29scy9zb3VwL0N1c3RvbVByb3RvY29sTWFuYWdlclNv
dXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OCwxNCArNDgsOSBAQCB2b2lkIEN1c3RvbVByb3Rv
Y29sTWFuYWdlcjo6aW5pdGlhbGl6ZUNvCiAKIHZvaWQgQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyOjpp
bml0aWFsaXplKGNvbnN0IFdlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmIHBhcmFtZXRlcnMp
CiB7Ci0gICAgQVNTRVJUKHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRGb3JDdXN0b21Q
cm90b2NvbHMuaXNFbXB0eSgpIHx8ICFwYXJhbWV0ZXJzLnVzZXNOZXR3b3JrUHJvY2Vzcyk7Ci0g
ICAgaWYgKHBhcmFtZXRlcnMudXNlc05ldHdvcmtQcm9jZXNzKSB7Ci0gICAgICAgIG1fY2hpbGRQ
cm9jZXNzLT5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5yZW1vdmVXb3JrUXVldWVNZXNzYWdl
UmVjZWl2ZXIoTWVzc2FnZXM6OkN1c3RvbVByb3RvY29sTWFuYWdlcjo6bWVzc2FnZVJlY2VpdmVy
TmFtZSgpKTsKLSAgICAgICAgbV9tZXNzYWdlUXVldWUgPSBudWxscHRyOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcGFyYW1ldGVycy51cmxTY2hl
bWVzUmVnaXN0ZXJlZEZvckN1c3RvbVByb3RvY29scy5zaXplKCk7ICsraSkKLSAgICAgICAgcmVn
aXN0ZXJTY2hlbWUocGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEZvckN1c3RvbVByb3Rv
Y29sc1tpXSk7CisgICAgQVNTRVJUKHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRGb3JD
dXN0b21Qcm90b2NvbHMuaXNFbXB0eSgpKTsKKyAgICBtX2NoaWxkUHJvY2Vzcy0+cGFyZW50UHJv
Y2Vzc0Nvbm5lY3Rpb24oKS0+cmVtb3ZlV29ya1F1ZXVlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2Vz
OjpDdXN0b21Qcm90b2NvbE1hbmFnZXI6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSk7CisgICAgbV9t
ZXNzYWdlUXVldWUgPSBudWxscHRyOwogfQogCiB2b2lkIEN1c3RvbVByb3RvY29sTWFuYWdlcjo6
aW5pdGlhbGl6ZShjb25zdCBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyYgcGFyYW1l
dGVycykKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJDb29raWVNYW5hZ2VyUHJv
eHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJDb29raWVN
YW5hZ2VyUHJveHkuY3BwCShyZXZpc2lvbiAxOTI3NTMpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvV2ViQ29va2llTWFuYWdlclByb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTYzLDgg
KzE2Myw3IEBAIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpzZXRIVFRQQ29va2kKICAgICAv
LyAtIFdoZW4gdGVzdGluZywgd2Ugb25seSBoYXZlIG9uZSBXZWJQcm9jZXNzIGFuZCBvbmUgTmV0
d29ya1Byb2Nlc3MsIGFuZCBXZWJLaXRUZXN0UnVubmVyIG5ldmVyIHJlc3RhcnRzIHRoZW07CiAg
ICAgLy8gLSBXaGVuIG5vdCB0ZXN0aW5nLCBDb2NvYSBoYXMgdGhlIHBvbGljeSBwZXJzaXN0ZWQs
IGFuZCB0aHVzIG5ldyBwcm9jZXNzZXMgdXNlIGl0IChldmVuIGZvciBlcGhlbWVyYWwgc2Vzc2lv
bnMpLgogICAgIHByb2Nlc3NQb29sKCktPnNlbmRUb0FsbFByb2Nlc3NlcyhNZXNzYWdlczo6V2Vi
Q29va2llTWFuYWdlcjo6U2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShwb2xpY3kpKTsKLSAgICBp
ZiAocHJvY2Vzc1Bvb2woKS0+dXNlc05ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgIHByb2Nlc3NQ
b29sKCktPnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2Vy
OjpTZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KHBvbGljeSkpOworICAgIHByb2Nlc3NQb29sKCkt
PnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpTZXRI
VFRQQ29va2llQWNjZXB0UG9saWN5KHBvbGljeSkpOwogfQogCiB2b2lkIFdlYkNvb2tpZU1hbmFn
ZXJQcm94eTo6Z2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShzdGQ6OmZ1bmN0aW9uPHZvaWQgKEhU
VFBDb29raWVBY2NlcHRQb2xpY3ksIENhbGxiYWNrQmFzZTo6RXJyb3IpPiBjYWxsYmFja0Z1bmN0
aW9uKQpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3Bw
CShyZXZpc2lvbiAxOTI3NTMpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vz
c1Bvb2wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTgsOSArMTU4LDYgQEAgV2ViUHJvY2Vzc1Bv
b2w6OldlYlByb2Nlc3NQb29sKEFQSTo6UHJvYwogICAgICwgbV9wcm9jZXNzVGVybWluYXRpb25F
bmFibGVkKHRydWUpCiAgICAgLCBtX2NhbkhhbmRsZUhUVFBTU2VydmVyVHJ1c3RFdmFsdWF0aW9u
KHRydWUpCiAgICAgLCBtX2RpZE5ldHdvcmtQcm9jZXNzQ3Jhc2goZmFsc2UpCi0jaWYgVVNFKFNP
VVApCi0gICAgLCBtX2lnbm9yZVRMU0Vycm9ycyh0cnVlKQotI2VuZGlmCiAgICAgLCBtX21lbW9y
eUNhY2hlRGlzYWJsZWQoZmFsc2UpCiAgICAgLCBtX3VzZXJPYnNlcnZhYmxlUGFnZUNvdW50ZXIo
W3RoaXNdKGJvb2wpIHsgdXBkYXRlUHJvY2Vzc1N1cHByZXNzaW9uU3RhdGUoKTsgfSkKICAgICAs
IG1fcHJvY2Vzc1N1cHByZXNzaW9uRGlzYWJsZWRGb3JQYWdlQ291bnRlcihbdGhpc10oYm9vbCkg
eyB1cGRhdGVQcm9jZXNzU3VwcHJlc3Npb25TdGF0ZSgpOyB9KQpAQCAtMzA2LDE3ICszMDMsNyBA
QCB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXRNYXhpbXVtTnVtYmVyT2ZQCiAKIElQQzo6Q29ubmVj
dGlvbiogV2ViUHJvY2Vzc1Bvb2w6Om5ldHdvcmtpbmdQcm9jZXNzQ29ubmVjdGlvbigpCiB7Ci0g
ICAgc3dpdGNoIChwcm9jZXNzTW9kZWwoKSkgewotICAgIGNhc2UgUHJvY2Vzc01vZGVsU2hhcmVk
U2Vjb25kYXJ5UHJvY2VzczoKLSAgICAgICAgaWYgKHVzZXNOZXR3b3JrUHJvY2VzcygpKQotICAg
ICAgICAgICAgcmV0dXJuIG1fbmV0d29ya1Byb2Nlc3MtPmNvbm5lY3Rpb24oKTsKLSAgICAgICAg
cmV0dXJuIG1fcHJvY2Vzc2VzWzBdLT5jb25uZWN0aW9uKCk7Ci0gICAgY2FzZSBQcm9jZXNzTW9k
ZWxNdWx0aXBsZVNlY29uZGFyeVByb2Nlc3NlczoKLSAgICAgICAgQVNTRVJUKHVzZXNOZXR3b3Jr
UHJvY2VzcygpKTsKLSAgICAgICAgcmV0dXJuIG1fbmV0d29ya1Byb2Nlc3MtPmNvbm5lY3Rpb24o
KTsKLSAgICB9Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIDA7CisgICAg
cmV0dXJuIG1fbmV0d29ya1Byb2Nlc3MtPmNvbm5lY3Rpb24oKTsKIH0KIAogdm9pZCBXZWJQcm9j
ZXNzUG9vbDo6bGFuZ3VhZ2VDaGFuZ2VkKHZvaWQqIGNvbnRleHQpCkBAIC0zMjgsNyArMzE1LDcg
QEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6bGFuZ3VhZ2VDaGFuZ2VkKCkKIHsKICAgICBzZW5kVG9B
bGxQcm9jZXNzZXMoTWVzc2FnZXM6OldlYlByb2Nlc3M6OlVzZXJQcmVmZXJyZWRMYW5ndWFnZXND
aGFuZ2VkKHVzZXJQcmVmZXJyZWRMYW5ndWFnZXMoKSkpOwogI2lmIFVTRShTT1VQKQotICAgIGlm
ICh1c2VzTmV0d29ya1Byb2Nlc3MoKSAmJiBtX25ldHdvcmtQcm9jZXNzKQorICAgIGlmIChtX25l
dHdvcmtQcm9jZXNzKQogICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpO
ZXR3b3JrUHJvY2Vzczo6VXNlclByZWZlcnJlZExhbmd1YWdlc0NoYW5nZWQodXNlclByZWZlcnJl
ZExhbmd1YWdlcygpKSwgMCk7CiAjZW5kaWYKIH0KQEAgLTM0MywxNiArMzMwLDYgQEAgdm9pZCBX
ZWJQcm9jZXNzUG9vbDo6dGV4dENoZWNrZXJTdGF0ZUNoYQogICAgIHNlbmRUb0FsbFByb2Nlc3Nl
cyhNZXNzYWdlczo6V2ViUHJvY2Vzczo6U2V0VGV4dENoZWNrZXJTdGF0ZShUZXh0Q2hlY2tlcjo6
c3RhdGUoKSkpOwogfQogCi12b2lkIFdlYlByb2Nlc3NQb29sOjpzZXRVc2VzTmV0d29ya1Byb2Nl
c3MoYm9vbCB1c2VzTmV0d29ya1Byb2Nlc3MpCi17Ci0gICAgbV9jb25maWd1cmF0aW9uLT5zZXRV
c2VOZXR3b3JrUHJvY2Vzcyh1c2VzTmV0d29ya1Byb2Nlc3MpOwotfQotCi1ib29sIFdlYlByb2Nl
c3NQb29sOjp1c2VzTmV0d29ya1Byb2Nlc3MoKSBjb25zdAotewotICAgIHJldHVybiBtX2NvbmZp
Z3VyYXRpb24tPnVzZU5ldHdvcmtQcm9jZXNzKCk7Ci19Ci0KIE5ldHdvcmtQcm9jZXNzUHJveHkm
IFdlYlByb2Nlc3NQb29sOjplbnN1cmVOZXR3b3JrUHJvY2VzcygpCiB7CiAgICAgaWYgKG1fbmV0
d29ya1Byb2Nlc3MpCkBAIC01MDQsNyArNDgxLDcgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0
QW55UGFnZUdyb3VwTWlnaAogewogICAgIG1faWNvbkRhdGFiYXNlLT5zZXRQcml2YXRlQnJvd3Np
bmdFbmFibGVkKHByaXZhdGVCcm93c2luZ0VuYWJsZWQpOwogCi0gICAgaWYgKHVzZXNOZXR3b3Jr
UHJvY2VzcygpICYmIG5ldHdvcmtQcm9jZXNzKCkpIHsKKyAgICBpZiAobmV0d29ya1Byb2Nlc3Mo
KSkgewogICAgICAgICBpZiAocHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCkKICAgICAgICAgICAgIG5l
dHdvcmtQcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpFbnN1cmVQcml2
YXRlQnJvd3NpbmdTZXNzaW9uKFNlc3Npb25JRDo6bGVnYWN5UHJpdmF0ZVNlc3Npb25JRCgpKSwg
MCk7CiAgICAgICAgIGVsc2UKQEAgLTU1NCw4ICs1MzEsNyBAQCBXZWJQcm9jZXNzUHJveHkmIFdl
YlByb2Nlc3NQb29sOjplbnN1cmVTCiAKIFdlYlByb2Nlc3NQcm94eSYgV2ViUHJvY2Vzc1Bvb2w6
OmNyZWF0ZU5ld1dlYlByb2Nlc3MoKQogewotICAgIGlmICh1c2VzTmV0d29ya1Byb2Nlc3MoKSkK
LSAgICAgICAgZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKKyAgICBlbnN1cmVOZXR3b3JrUHJvY2Vz
cygpOwogCiAgICAgUmVmPFdlYlByb2Nlc3NQcm94eT4gcHJvY2VzcyA9IFdlYlByb2Nlc3NQcm94
eTo6Y3JlYXRlKCp0aGlzKTsKIApAQCAtNjMyLDggKzYwOCw2IEBAIFdlYlByb2Nlc3NQcm94eSYg
V2ViUHJvY2Vzc1Bvb2w6OmNyZWF0ZU4KICAgICBzdXBwbGVtZW50PFdlYk5vdGlmaWNhdGlvbk1h
bmFnZXJQcm94eT4oKS0+cG9wdWxhdGVDb3B5T2ZOb3RpZmljYXRpb25QZXJtaXNzaW9ucyhwYXJh
bWV0ZXJzLm5vdGlmaWNhdGlvblBlcm1pc3Npb25zKTsKICNlbmRpZgogCi0gICAgcGFyYW1ldGVy
cy51c2VzTmV0d29ya1Byb2Nlc3MgPSB1c2VzTmV0d29ya1Byb2Nlc3MoKTsKLQogICAgIHBhcmFt
ZXRlcnMucGx1Z0luQXV0b1N0YXJ0T3JpZ2luSGFzaGVzID0gbV9wbHVnSW5BdXRvU3RhcnRQcm92
aWRlci5hdXRvU3RhcnRPcmlnaW5IYXNoZXNDb3B5KCk7CiAgICAgY29weVRvVmVjdG9yKG1fcGx1
Z0luQXV0b1N0YXJ0UHJvdmlkZXIuYXV0b1N0YXJ0T3JpZ2lucygpLCBwYXJhbWV0ZXJzLnBsdWdJ
bkF1dG9TdGFydE9yaWdpbnMpOwogCkBAIC04NDEsMTYgKzgxNSwxNCBAQCBSZWY8V2ViUGFnZVBy
b3h5PiBXZWJQcm9jZXNzUG9vbDo6Y3JlYXRlCiBEb3dubG9hZFByb3h5KiBXZWJQcm9jZXNzUG9v
bDo6ZG93bmxvYWQoV2ViUGFnZVByb3h5KiBpbml0aWF0aW5nUGFnZSwgY29uc3QgUmVzb3VyY2VS
ZXF1ZXN0JiByZXF1ZXN0KQogewogICAgIERvd25sb2FkUHJveHkqIGRvd25sb2FkUHJveHkgPSBj
cmVhdGVEb3dubG9hZFByb3h5KHJlcXVlc3QpOwotICAgIHVpbnQ2NF90IGluaXRpYXRpbmdQYWdl
SUQgPSBpbml0aWF0aW5nUGFnZSA/IGluaXRpYXRpbmdQYWdlLT5wYWdlSUQoKSA6IDA7CiAgICAg
U2Vzc2lvbklEIHNlc3Npb25JRCA9IGluaXRpYXRpbmdQYWdlID8gaW5pdGlhdGluZ1BhZ2UtPnNl
c3Npb25JRCgpIDogU2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCk7CiAKLSAgICBpZiAodXNl
c05ldHdvcmtQcm9jZXNzKCkgJiYgbmV0d29ya1Byb2Nlc3MoKSkgeworICAgIGlmIChuZXR3b3Jr
UHJvY2VzcygpKSB7CiAgICAgICAgIC8vIEZJWE1FIChOZXR3b3JrUHJvY2Vzcyk6IFJlcGxpY2F0
ZSB3aGF0ZXZlciBGcmFtZUxvYWRlcjo6c2V0T3JpZ2luYWxVUkxGb3JEb3dubG9hZFJlcXVlc3Qg
ZG9lcyB3aXRoIHRoZSByZXF1ZXN0IGhlcmUuCiAgICAgICAgIG5ldHdvcmtQcm9jZXNzKCktPnNl
bmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpEb3dubG9hZFJlcXVlc3Qoc2Vzc2lvbklELCBk
b3dubG9hZFByb3h5LT5kb3dubG9hZElEKCksIHJlcXVlc3QpLCAwKTsKICAgICAgICAgcmV0dXJu
IGRvd25sb2FkUHJveHk7CiAgICAgfQogCi0gICAgbV9wcm9jZXNzZXNbMF0tPnNlbmQoTWVzc2Fn
ZXM6OldlYlByb2Nlc3M6OkRvd25sb2FkUmVxdWVzdChzZXNzaW9uSUQsIGRvd25sb2FkUHJveHkt
PmRvd25sb2FkSUQoKSwgaW5pdGlhdGluZ1BhZ2VJRCwgcmVxdWVzdCksIDApOwogICAgIHJldHVy
biBkb3dubG9hZFByb3h5OwogfQogCkBAIC04NjIsMTIgKzgzNCwxMSBAQCBEb3dubG9hZFByb3h5
KiBXZWJQcm9jZXNzUG9vbDo6cmVzdW1lRG93CiAgICAgaWYgKCFwYXRoLmlzRW1wdHkoKSkKICAg
ICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKHBhdGgsIFNhbmRib3hFeHRlbnNp
b246OlJlYWRXcml0ZSwgc2FuZGJveEV4dGVuc2lvbkhhbmRsZSk7CiAKLSAgICBpZiAodXNlc05l
dHdvcmtQcm9jZXNzKCkgJiYgbmV0d29ya1Byb2Nlc3MoKSkgeworICAgIGlmIChuZXR3b3JrUHJv
Y2VzcygpKSB7CiAgICAgICAgIG5ldHdvcmtQcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6Ok5ldHdv
cmtQcm9jZXNzOjpSZXN1bWVEb3dubG9hZChkb3dubG9hZFByb3h5LT5kb3dubG9hZElEKCksIHJl
c3VtZURhdGEtPmRhdGFSZWZlcmVuY2UoKSwgcGF0aCwgc2FuZGJveEV4dGVuc2lvbkhhbmRsZSks
IDApOwogICAgICAgICByZXR1cm4gZG93bmxvYWRQcm94eTsKICAgICB9CiAKLSAgICBtX3Byb2Nl
c3Nlc1swXS0+c2VuZChNZXNzYWdlczo6V2ViUHJvY2Vzczo6UmVzdW1lRG93bmxvYWQoZG93bmxv
YWRQcm94eS0+ZG93bmxvYWRJRCgpLCByZXN1bWVEYXRhLT5kYXRhUmVmZXJlbmNlKCksIHBhdGgs
IHNhbmRib3hFeHRlbnNpb25IYW5kbGUpLCAwKTsKICAgICByZXR1cm4gZG93bmxvYWRQcm94eTsK
IH0KIApAQCAtOTU0LDcgKzkyNSw3IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldERvbWFpblJl
bGF4YXRpb24KIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldENhbkhhbmRsZUhUVFBTU2VydmVyVHJ1
c3RFdmFsdWF0aW9uKGJvb2wgdmFsdWUpCiB7CiAgICAgbV9jYW5IYW5kbGVIVFRQU1NlcnZlclRy
dXN0RXZhbHVhdGlvbiA9IHZhbHVlOwotICAgIGlmICh1c2VzTmV0d29ya1Byb2Nlc3MoKSAmJiBt
X25ldHdvcmtQcm9jZXNzKSB7CisgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpIHsKICAgICAgICAg
bV9uZXR3b3JrUHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldENhbkhh
bmRsZUhUVFBTU2VydmVyVHJ1c3RFdmFsdWF0aW9uKHZhbHVlKSwgMCk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CkBAIC0xMDI1LDcgKzk5Niw3IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldENh
Y2hlTW9kZWwoQ2FjaGUKICAgICBtX2NvbmZpZ3VyYXRpb24tPnNldENhY2hlTW9kZWwoY2FjaGVN
b2RlbCk7CiAgICAgc2VuZFRvQWxsUHJvY2Vzc2VzKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpTZXRD
YWNoZU1vZGVsKGNhY2hlTW9kZWwpKTsKIAotICAgIGlmICh1c2VzTmV0d29ya1Byb2Nlc3MoKSAm
JiBtX25ldHdvcmtQcm9jZXNzKQorICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQogICAgICAgICBt
X25ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0Q2FjaGVN
b2RlbChjYWNoZU1vZGVsKSwgMCk7CiB9CiAKQEAgLTEwMzYsMTMgKzEwMDcsOSBAQCB2b2lkIFdl
YlByb2Nlc3NQb29sOjpzZXREZWZhdWx0UmVxdWVzdFRpCiAKIERvd25sb2FkUHJveHkqIFdlYlBy
b2Nlc3NQb29sOjpjcmVhdGVEb3dubG9hZFByb3h5KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVx
dWVzdCkKIHsKLSAgICBpZiAodXNlc05ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgZW5zdXJl
TmV0d29ya1Byb2Nlc3MoKTsKLSAgICAgICAgQVNTRVJUKG1fbmV0d29ya1Byb2Nlc3MpOwotICAg
ICAgICByZXR1cm4gbV9uZXR3b3JrUHJvY2Vzcy0+Y3JlYXRlRG93bmxvYWRQcm94eShyZXF1ZXN0
KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZW5zdXJlU2hhcmVkV2ViUHJvY2VzcygpLmNyZWF0ZURv
d25sb2FkUHJveHkocmVxdWVzdCk7CisgICAgZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKKyAgICBB
U1NFUlQobV9uZXR3b3JrUHJvY2Vzcyk7CisgICAgcmV0dXJuIG1fbmV0d29ya1Byb2Nlc3MtPmNy
ZWF0ZURvd25sb2FkUHJveHkocmVxdWVzdCk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmFk
ZE1lc3NhZ2VSZWNlaXZlcihJUEM6OlN0cmluZ1JlZmVyZW5jZSBtZXNzYWdlUmVjZWl2ZXJOYW1l
LCBJUEM6Ok1lc3NhZ2VSZWNlaXZlciYgbWVzc2FnZVJlY2VpdmVyKQpAQCAtMTE1MiwyMiArMTEx
OSw4IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnVzZVRlc3RpbmdOZXR3b3JrU2UKIAogdm9pZCBX
ZWJQcm9jZXNzUG9vbDo6YWxsb3dTcGVjaWZpY0hUVFBTQ2VydGlmaWNhdGVGb3JIb3N0KGNvbnN0
IFdlYkNlcnRpZmljYXRlSW5mbyogY2VydGlmaWNhdGUsIGNvbnN0IFN0cmluZyYgaG9zdCkKIHsK
LSAgICBpZiAodXNlc05ldHdvcmtQcm9jZXNzKCkgJiYgbV9uZXR3b3JrUHJvY2VzcykgeworICAg
IGlmIChtX25ldHdvcmtQcm9jZXNzKQogICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kKE1l
c3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6QWxsb3dTcGVjaWZpY0hUVFBTQ2VydGlmaWNhdGVGb3JI
b3N0KGNlcnRpZmljYXRlLT5jZXJ0aWZpY2F0ZUluZm8oKSwgaG9zdCksIDApOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0jaWYgVVNFKFNPVVApCi0gICAgbV9wcm9jZXNzZXNbMF0tPnNlbmQo
TWVzc2FnZXM6OldlYlByb2Nlc3M6OkFsbG93U3BlY2lmaWNIVFRQU0NlcnRpZmljYXRlRm9ySG9z
dChjZXJ0aWZpY2F0ZS0+Y2VydGlmaWNhdGVJbmZvKCksIGhvc3QpLCAwKTsKLSAgICByZXR1cm47
Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShjZXJ0aWZpY2F0ZSk7Ci0gICAgVU5VU0VEX1BBUkFN
KGhvc3QpOwotI2VuZGlmCi0KLSNpZiAhUExBVEZPUk0oSU9TKQotICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotI2VuZGlmCiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldEhUVFBQaXBlbGlu
aW5nRW5hYmxlZChib29sIGVuYWJsZWQpCkBAIC0xMjIxLDcgKzExNzQsNyBAQCB2b2lkIFdlYlBy
b2Nlc3NQb29sOjpyZXF1ZXN0V2ViQ29udGVudFN0CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnJl
cXVlc3ROZXR3b3JraW5nU3RhdGlzdGljcyhTdGF0aXN0aWNzUmVxdWVzdCogcmVxdWVzdCkKIHsK
LSAgICBpZiAoIXVzZXNOZXR3b3JrUHJvY2VzcygpIHx8ICFtX25ldHdvcmtQcm9jZXNzKSB7Cisg
ICAgaWYgKCFtX25ldHdvcmtQcm9jZXNzKSB7CiAgICAgICAgIExPR19FUlJPUigiQXR0ZW1wdCB0
byBnZXQgTmV0d29ya1Byb2Nlc3Mgc3RhdGlzdGljcyBidXQgdGhlIE5ldHdvcmtQcm9jZXNzIGlz
IHVuYXZhaWxhYmxlIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CkluZGV4OiBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuaAkocmV2aXNpb24gMTkyNzUzKQorKysgU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmgJKHdvcmtpbmcgY29weSkKQEAg
LTI3NywxMCArMjc3LDYgQEAgcHVibGljOgogICAgIHZvaWQgc2V0UGx1Z0luQXV0b1N0YXJ0T3Jp
Z2luc0ZpbHRlcmluZ091dEVudHJpZXNBZGRlZEFmdGVyVGltZShBUEk6OkRpY3Rpb25hcnkmLCBk
b3VibGUgdGltZSk7CiAKICAgICAvLyBOZXR3b3JrIFByb2Nlc3MgTWFuYWdlbWVudAotCi0gICAg
dm9pZCBzZXRVc2VzTmV0d29ya1Byb2Nlc3MoYm9vbCk7Ci0gICAgYm9vbCB1c2VzTmV0d29ya1By
b2Nlc3MoKSBjb25zdDsKLQogICAgIE5ldHdvcmtQcm9jZXNzUHJveHkmIGVuc3VyZU5ldHdvcmtQ
cm9jZXNzKCk7CiAgICAgTmV0d29ya1Byb2Nlc3NQcm94eSogbmV0d29ya1Byb2Nlc3MoKSB7IHJl
dHVybiBtX25ldHdvcmtQcm9jZXNzLmdldCgpOyB9CiAgICAgdm9pZCBuZXR3b3JrUHJvY2Vzc0Ny
YXNoZWQoTmV0d29ya1Byb2Nlc3NQcm94eSopOwpAQCAtNTI1LDQzICs1MjEsMTUgQEAgcHJpdmF0
ZToKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZW5kVG9OZXR3
b3JraW5nUHJvY2VzcyhUJiYgbWVzc2FnZSkKIHsKLSAgICBzd2l0Y2ggKHByb2Nlc3NNb2RlbCgp
KSB7Ci0gICAgY2FzZSBQcm9jZXNzTW9kZWxTaGFyZWRTZWNvbmRhcnlQcm9jZXNzOgotICAgICAg
ICBpZiAodXNlc05ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAgIGlmIChtX25ldHdvcmtQ
cm9jZXNzICYmIG1fbmV0d29ya1Byb2Nlc3MtPmNhblNlbmRNZXNzYWdlKCkpCi0gICAgICAgICAg
ICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZChzdGQ6OmZvcndhcmQ8VD4obWVzc2FnZSksIDAp
OwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGlmICghbV9wcm9jZXNz
ZXMuaXNFbXB0eSgpICYmIG1fcHJvY2Vzc2VzWzBdLT5jYW5TZW5kTWVzc2FnZSgpKQotICAgICAg
ICAgICAgbV9wcm9jZXNzZXNbMF0tPnNlbmQoc3RkOjpmb3J3YXJkPFQ+KG1lc3NhZ2UpLCAwKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgUHJvY2Vzc01vZGVsTXVsdGlwbGVTZWNvbmRhcnlQ
cm9jZXNzZXM6Ci0gICAgICAgIGlmIChtX25ldHdvcmtQcm9jZXNzICYmIG1fbmV0d29ya1Byb2Nl
c3MtPmNhblNlbmRNZXNzYWdlKCkpCi0gICAgICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5k
KHN0ZDo6Zm9yd2FyZDxUPihtZXNzYWdlKSwgMCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0g
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MgJiYgbV9u
ZXR3b3JrUHJvY2Vzcy0+Y2FuU2VuZE1lc3NhZ2UoKSkKKyAgICAgICAgbV9uZXR3b3JrUHJvY2Vz
cy0+c2VuZChzdGQ6OmZvcndhcmQ8VD4obWVzc2FnZSksIDApOwogfQogCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPgogdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3NSZWxh
dW5jaGluZ0lmTmVjZXNzYXJ5KFQmJiBtZXNzYWdlKQogewotICAgIHN3aXRjaCAocHJvY2Vzc01v
ZGVsKCkpIHsKLSAgICBjYXNlIFByb2Nlc3NNb2RlbFNoYXJlZFNlY29uZGFyeVByb2Nlc3M6Ci0g
ICAgICAgIGlmICh1c2VzTmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICAgICAgZW5zdXJlTmV0
d29ya1Byb2Nlc3MoKTsKLSAgICAgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmQoc3RkOjpm
b3J3YXJkPFQ+KG1lc3NhZ2UpLCAwKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQot
ICAgICAgICBlbnN1cmVTaGFyZWRXZWJQcm9jZXNzKCk7Ci0gICAgICAgIG1fcHJvY2Vzc2VzWzBd
LT5zZW5kKHN0ZDo6Zm9yd2FyZDxUPihtZXNzYWdlKSwgMCk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICBjYXNlIFByb2Nlc3NNb2RlbE11bHRpcGxlU2Vjb25kYXJ5UHJvY2Vzc2VzOgotICAgICAgICBl
bnN1cmVOZXR3b3JrUHJvY2VzcygpOwotICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kKHN0
ZDo6Zm9yd2FyZDxUPihtZXNzYWdlKSwgMCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKKyAgICBt
X25ldHdvcmtQcm9jZXNzLT5zZW5kKHN0ZDo6Zm9yd2FyZDxUPihtZXNzYWdlKSwgMCk7CiB9CiAK
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2Vi
UHJvY2Vzc1Byb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
V2ViUHJvY2Vzc1Byb3h5LmNwcAkocmV2aXNpb24gMTkyNzUzKQorKysgU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwMiw5ICsy
MDIsNiBAQCB2b2lkIFdlYlByb2Nlc3NQcm94eTo6c2h1dERvd24oKQogICAgICAgICBmcmFtZXNb
aV0tPndlYlByb2Nlc3NXaWxsU2h1dERvd24oKTsKICAgICBtX2ZyYW1lTWFwLmNsZWFyKCk7CiAK
LSAgICBpZiAobV9kb3dubG9hZFByb3h5TWFwKQotICAgICAgICBtX2Rvd25sb2FkUHJveHlNYXAt
PnByb2Nlc3NEaWRDbG9zZSgpOwotCiAgICAgZm9yIChWaXNpdGVkTGlua1N0b3JlKiB2aXNpdGVk
TGlua1N0b3JlIDogbV92aXNpdGVkTGlua1N0b3JlcykKICAgICAgICAgdmlzaXRlZExpbmtTdG9y
ZS0+cmVtb3ZlUHJvY2VzcygqdGhpcyk7CiAgICAgbV92aXNpdGVkTGlua1N0b3Jlcy5jbGVhcigp
OwpAQCAtMjU2LDcgKzI1Myw3IEBAIHZvaWQgV2ViUHJvY2Vzc1Byb3h5OjpyZW1vdmVXZWJQYWdl
KHVpbnQKIAogICAgIC8vIElmIHRoaXMgd2FzIHRoZSBsYXN0IFdlYlBhZ2Ugb3BlbiBpbiB0aGF0
IHdlYiBwcm9jZXNzLCBhbmQgd2UgaGF2ZSBubyBvdGhlciByZWFzb24gdG8ga2VlcCBpdCBhbGl2
ZSwgbGV0IGl0IGdvLgogICAgIC8vIFdlIG9ubHkgYWxsb3cgdGhpcyB3aGVuIHVzaW5nIGEgbmV0
d29yayBwcm9jZXNzLCBhcyBvdGhlcndpc2UgdGhlIFdlYlByb2Nlc3MgbmVlZHMgdG8gcHJlc2Vy
dmUgaXRzIHNlc3Npb24gc3RhdGUuCi0gICAgaWYgKCFtX3Byb2Nlc3NQb29sLT51c2VzTmV0d29y
a1Byb2Nlc3MoKSB8fCBzdGF0ZSgpID09IFN0YXRlOjpUZXJtaW5hdGVkIHx8ICFjYW5UZXJtaW5h
dGVDaGlsZFByb2Nlc3MoKSkKKyAgICBpZiAoc3RhdGUoKSA9PSBTdGF0ZTo6VGVybWluYXRlZCB8
fCAhY2FuVGVybWluYXRlQ2hpbGRQcm9jZXNzKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIHNo
dXREb3duKCk7CkBAIC02NTUsOSArNjUyLDYgQEAgYm9vbCBXZWJQcm9jZXNzUHJveHk6OmNhblRl
cm1pbmF0ZUNoaWxkUAogICAgIGlmICghbV9wYWdlTWFwLmlzRW1wdHkoKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgaWYgKG1fZG93bmxvYWRQcm94eU1hcCAmJiAhbV9kb3dubG9hZFBy
b3h5TWFwLT5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQogICAgIGlmICghbV9w
ZW5kaW5nRGVsZXRlV2Vic2l0ZURhdGFDYWxsYmFja3MuaXNFbXB0eSgpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKQEAgLTcwMCwxNiArNjk0LDYgQEAgdm9pZCBXZWJQcm9jZXNzUHJveHk6OnVw
ZGF0ZVRleHRDaGVja2VyUwogICAgICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpTZXRU
ZXh0Q2hlY2tlclN0YXRlKFRleHRDaGVja2VyOjpzdGF0ZSgpKSwgMCk7CiB9CiAKLURvd25sb2Fk
UHJveHkqIFdlYlByb2Nlc3NQcm94eTo6Y3JlYXRlRG93bmxvYWRQcm94eShjb25zdCBSZXNvdXJj
ZVJlcXVlc3QmIHJlcXVlc3QpCi17Ci0gICAgQVNTRVJUKCFtX3Byb2Nlc3NQb29sLT51c2VzTmV0
d29ya1Byb2Nlc3MoKSk7Ci0KLSAgICBpZiAoIW1fZG93bmxvYWRQcm94eU1hcCkKLSAgICAgICAg
bV9kb3dubG9hZFByb3h5TWFwID0gc3RkOjptYWtlX3VuaXF1ZTxEb3dubG9hZFByb3h5TWFwPih0
aGlzKTsKLQotICAgIHJldHVybiBtX2Rvd25sb2FkUHJveHlNYXAtPmNyZWF0ZURvd25sb2FkUHJv
eHkobV9wcm9jZXNzUG9vbCwgcmVxdWVzdCk7Ci19Ci0KIHZvaWQgV2ViUHJvY2Vzc1Byb3h5Ojpk
aWRTYXZlVG9QYWdlQ2FjaGUoKQogewogICAgIG1fcHJvY2Vzc1Bvb2wtPnByb2Nlc3NEaWRDYWNo
ZVBhZ2UodGhpcyk7CkBAIC05NzIsMTQgKzk1NiwxMiBAQCB2b2lkIFdlYlByb2Nlc3NQcm94eTo6
ZGlkU2V0QXNzZXJ0aW9uU3RhCiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBBc3NlcnRpb25T
dGF0ZTo6QmFja2dyb3VuZDoKLSAgICAgICAgaWYgKHByb2Nlc3NQb29sKCkudXNlc05ldHdvcmtQ
cm9jZXNzKCkpCi0gICAgICAgICAgICBtX2JhY2tncm91bmRUb2tlbkZvck5ldHdvcmtQcm9jZXNz
ID0gcHJvY2Vzc1Bvb2woKS5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnRocm90dGxlcigpLmJhY2tn
cm91bmRBY3Rpdml0eVRva2VuKCk7CisgICAgICAgIG1fYmFja2dyb3VuZFRva2VuRm9yTmV0d29y
a1Byb2Nlc3MgPSBwcm9jZXNzUG9vbCgpLmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkudGhyb3R0bGVy
KCkuYmFja2dyb3VuZEFjdGl2aXR5VG9rZW4oKTsKICAgICAgICAgbV9mb3JlZ3JvdW5kVG9rZW5G
b3JOZXR3b3JrUHJvY2VzcyA9IG51bGxwdHI7CiAgICAgICAgIGJyZWFrOwogICAgIAogICAgIGNh
c2UgQXNzZXJ0aW9uU3RhdGU6OkZvcmVncm91bmQ6Ci0gICAgICAgIGlmIChwcm9jZXNzUG9vbCgp
LnVzZXNOZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgbV9mb3JlZ3JvdW5kVG9rZW5Gb3JO
ZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sKCkuZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS50aHJv
dHRsZXIoKS5mb3JlZ3JvdW5kQWN0aXZpdHlUb2tlbigpOworICAgICAgICBtX2ZvcmVncm91bmRU
b2tlbkZvck5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2woKS5lbnN1cmVOZXR3b3JrUHJvY2Vz
cygpLnRocm90dGxlcigpLmZvcmVncm91bmRBY3Rpdml0eVRva2VuKCk7CiAgICAgICAgIG1fYmFj
a2dyb3VuZFRva2VuRm9yTmV0d29ya1Byb2Nlc3MgPSBudWxscHRyOwogICAgICAgICBmb3IgKGF1
dG8mIHBhZ2UgOiBtX3BhZ2VNYXAudmFsdWVzKCkpCiAgICAgICAgICAgICBwYWdlLT5wcm9jZXNz
V2lsbEJlY29tZUZvcmVncm91bmQoKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9X
ZWJQcm9jZXNzUHJveHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
V2ViUHJvY2Vzc1Byb3h5LmgJKHJldmlzaW9uIDE5Mjc1MykKKysrIFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtNTgsNyArNTgsNiBA
QCBzdHJ1Y3QgUGx1Z2luSW5mbzsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLWNsYXNzIERvd25s
b2FkUHJveHlNYXA7CiBjbGFzcyBOZXR3b3JrUHJvY2Vzc1Byb3h5OwogY2xhc3MgV2ViQmFja0Zv
cndhcmRMaXN0SXRlbTsKIGNsYXNzIFdlYlBhZ2VHcm91cDsKQEAgLTEyMCw4ICsxMTksNiBAQCBw
dWJsaWM6CiAKICAgICBzdGF0aWMgYm9vbCBmdWxsS2V5Ym9hcmRBY2Nlc3NFbmFibGVkKCk7CiAK
LSAgICBEb3dubG9hZFByb3h5KiBjcmVhdGVEb3dubG9hZFByb3h5KGNvbnN0IFdlYkNvcmU6OlJl
c291cmNlUmVxdWVzdCYpOwotCiAgICAgdm9pZCBkaWRTYXZlVG9QYWdlQ2FjaGUoKTsKICAgICB2
b2lkIHJlbGVhc2VQYWdlQ2FjaGUoKTsKIApAQCAtMjQyLDcgKzIzOSw2IEBAIHByaXZhdGU6CiAg
ICAgSGFzaFNldDxWaXNpdGVkTGlua1N0b3JlKj4gbV92aXNpdGVkTGlua1N0b3JlczsKICAgICBI
YXNoU2V0PFdlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5Kj4gbV93ZWJVc2VyQ29udGVudENv
bnRyb2xsZXJQcm94aWVzOwogCi0gICAgc3RkOjp1bmlxdWVfcHRyPERvd25sb2FkUHJveHlNYXA+
IG1fZG93bmxvYWRQcm94eU1hcDsKICAgICBDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eSBtX2N1
c3RvbVByb3RvY29sTWFuYWdlclByb3h5OwogCiAgICAgSGFzaE1hcDx1aW50NjRfdCwgc3RkOjpm
dW5jdGlvbjx2b2lkIChXZWJzaXRlRGF0YSk+PiBtX3BlbmRpbmdGZXRjaFdlYnNpdGVEYXRhQ2Fs
bGJhY2tzOwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9BUElQcm9jZXNzUG9v
bENvbmZpZ3VyYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvQVBJUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmNwcAkocmV2aXNpb24gMTkyNzUzKQor
KysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9BUElQcm9jZXNzUG9vbENvbmZpZ3VyYXRp
b24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0Miw2IEBAIFJlZjxQcm9jZXNzUG9vbENv
bmZpZ3VyYXRpb24+IFByb2Nlc3NQb28KIAogICAgIGNvbmZpZ3VyYXRpb24tPm1fc2hvdWxkSGF2
ZUxlZ2FjeURhdGFTdG9yZSA9IHRydWU7CiAgICAgY29uZmlndXJhdGlvbi0+bV9wcm9jZXNzTW9k
ZWwgPSBXZWJLaXQ6OlByb2Nlc3NNb2RlbFNoYXJlZFNlY29uZGFyeVByb2Nlc3M7Ci0gICAgY29u
ZmlndXJhdGlvbi0+bV91c2VOZXR3b3JrUHJvY2VzcyA9IGZhbHNlOwogICAgIGNvbmZpZ3VyYXRp
b24tPm1fY2FjaGVNb2RlbCA9IFdlYktpdDo6Q2FjaGVNb2RlbERvY3VtZW50Vmlld2VyOwogCiAg
ICAgY29uZmlndXJhdGlvbi0+bV9hcHBsaWNhdGlvbkNhY2hlRGlyZWN0b3J5ID0gV2ViS2l0OjpX
ZWJQcm9jZXNzUG9vbDo6bGVnYWN5UGxhdGZvcm1EZWZhdWx0QXBwbGljYXRpb25DYWNoZURpcmVj
dG9yeSgpOwpAQCAtNzUsNyArNzQsNiBAQCBSZWY8UHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uPiBQ
cm9jZXNzUG9vCiAKICAgICBjb3B5LT5tX3Nob3VsZEhhdmVMZWdhY3lEYXRhU3RvcmUgPSB0aGlz
LT5tX3Nob3VsZEhhdmVMZWdhY3lEYXRhU3RvcmU7CiAgICAgY29weS0+bV9wcm9jZXNzTW9kZWwg
PSB0aGlzLT5tX3Byb2Nlc3NNb2RlbDsKLSAgICBjb3B5LT5tX3VzZU5ldHdvcmtQcm9jZXNzID0g
dGhpcy0+bV91c2VOZXR3b3JrUHJvY2VzczsKICAgICBjb3B5LT5tX21heGltdW1Qcm9jZXNzQ291
bnQgPSB0aGlzLT5tX21heGltdW1Qcm9jZXNzQ291bnQ7CiAgICAgY29weS0+bV9jYWNoZU1vZGVs
ID0gdGhpcy0+bV9jYWNoZU1vZGVsOwogICAgIGNvcHktPm1fZGlza0NhY2hlU2l6ZU92ZXJyaWRl
ID0gdGhpcy0+bV9kaXNrQ2FjaGVTaXplT3ZlcnJpZGU7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL0FQSVByb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQVBJUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9u
LmgJKHJldmlzaW9uIDE5Mjc1MykKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQVBJ
UHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDkgKzUxLDYg
QEAgcHVibGljOgogICAgIFdlYktpdDo6UHJvY2Vzc01vZGVsIHByb2Nlc3NNb2RlbCgpIGNvbnN0
IHsgcmV0dXJuIG1fcHJvY2Vzc01vZGVsOyB9CiAgICAgdm9pZCBzZXRQcm9jZXNzTW9kZWwoV2Vi
S2l0OjpQcm9jZXNzTW9kZWwgcHJvY2Vzc01vZGVsKSB7IG1fcHJvY2Vzc01vZGVsID0gcHJvY2Vz
c01vZGVsOyB9IAogCi0gICAgYm9vbCB1c2VOZXR3b3JrUHJvY2VzcygpIGNvbnN0IHsgcmV0dXJu
IG1fdXNlTmV0d29ya1Byb2Nlc3M7IH0KLSAgICB2b2lkIHNldFVzZU5ldHdvcmtQcm9jZXNzKGJv
b2wgdXNlTmV0d29ya1Byb2Nlc3MpIHsgbV91c2VOZXR3b3JrUHJvY2VzcyA9IHVzZU5ldHdvcmtQ
cm9jZXNzOyB9IAotCiAgICAgdW5zaWduZWQgbWF4aW11bVByb2Nlc3NDb3VudCgpIGNvbnN0IHsg
cmV0dXJuIG1fbWF4aW11bVByb2Nlc3NDb3VudDsgfQogICAgIHZvaWQgc2V0TWF4aW11bVByb2Nl
c3NDb3VudCh1bnNpZ25lZCBtYXhpbXVtUHJvY2Vzc0NvdW50KSB7IG1fbWF4aW11bVByb2Nlc3ND
b3VudCA9IG1heGltdW1Qcm9jZXNzQ291bnQ7IH0gCiAKQEAgLTk3LDcgKzk0LDYgQEAgcHJpdmF0
ZToKICAgICBib29sIG1fc2hvdWxkSGF2ZUxlZ2FjeURhdGFTdG9yZSB7IGZhbHNlIH07CiAKICAg
ICBXZWJLaXQ6OlByb2Nlc3NNb2RlbCBtX3Byb2Nlc3NNb2RlbCB7IFdlYktpdDo6UHJvY2Vzc01v
ZGVsTXVsdGlwbGVTZWNvbmRhcnlQcm9jZXNzZXMgfTsKLSAgICBib29sIG1fdXNlTmV0d29ya1By
b2Nlc3MgeyB0cnVlIH07CiAgICAgdW5zaWduZWQgbV9tYXhpbXVtUHJvY2Vzc0NvdW50IHsgMCB9
OwogICAgIFdlYktpdDo6Q2FjaGVNb2RlbCBtX2NhY2hlTW9kZWwgeyBXZWJLaXQ6OkNhY2hlTW9k
ZWxQcmltYXJ5V2ViQnJvd3NlciB9OwogICAgIGludDY0X3QgbV9kaXNrQ2FjaGVTaXplT3ZlcnJp
ZGUgeyAtMSB9OwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLQ29u
dGV4dC5jcHAJKHJldmlzaW9uIDE5Mjc1MykKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvQy9XS0NvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NTQsMTEgKzU1NCw2IEBAIHZv
aWQgV0tDb250ZXh0U2V0SmF2YVNjcmlwdEdhcmJhZ2VDb2xsZWMKICAgICB0b0ltcGwoY29udGV4
dFJlZiktPnNldEphdmFTY3JpcHRHYXJiYWdlQ29sbGVjdG9yVGltZXJFbmFibGVkKGVuYWJsZSk7
CiB9CiAKLXZvaWQgV0tDb250ZXh0U2V0VXNlc05ldHdvcmtQcm9jZXNzKFdLQ29udGV4dFJlZiBj
b250ZXh0UmVmLCBib29sIHVzZXNOZXR3b3JrUHJvY2VzcykKLXsKLSAgICB0b0ltcGwoY29udGV4
dFJlZiktPnNldFVzZXNOZXR3b3JrUHJvY2Vzcyh1c2VzTmV0d29ya1Byb2Nlc3MpOwotfQotCiB2
b2lkIFdLQ29udGV4dFVzZVRlc3RpbmdOZXR3b3JrU2Vzc2lvbihXS0NvbnRleHRSZWYgY29udGV4
dCkKIHsKICAgICB0b0ltcGwoY29udGV4dCktPnVzZVRlc3RpbmdOZXR3b3JrU2Vzc2lvbigpOwpJ
bmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dFByaXZhdGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0UHJp
dmF0ZS5oCShyZXZpc2lvbiAxOTI3NTMpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L0MvV0tDb250ZXh0UHJpdmF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03Nyw3ICs3Nyw3IEBAIFdL
X0VYUE9SVCB2b2lkIFdLQ29udGV4dFdhcm1Jbml0aWFsUHJvY2UKIAogLy8gRklYTUU6IFRoaXMg
ZnVuY3Rpb24gaXMgdGVtcG9yYXJ5IGFuZCB1c2VmdWwgZHVyaW5nIHRoZSBkZXZlbG9wbWVudCBv
ZiB0aGUgTmV0d29ya1Byb2Nlc3MgZmVhdHVyZS4KIC8vIEF0IHNvbWUgcG9pbnQgaXQgc2hvdWxk
IGJlIHJlbW92ZWQuCi1XS19FWFBPUlQgdm9pZCBXS0NvbnRleHRTZXRVc2VzTmV0d29ya1Byb2Nl
c3MoV0tDb250ZXh0UmVmIGNvbnRleHQsIGJvb2wgdXNlc05ldHdvcmtQcm9jZXNzKTsKK1dLX0VY
UE9SVCB2b2lkIFdLQ29udGV4dFNldFVzZXNOZXR3b3JrUHJvY2VzcyhXS0NvbnRleHRSZWYsIGJv
b2wpOwogCiAvLyBUZXN0IG9ubHkuIFNob3VsZCBiZSBjYWxsZWQgYmVmb3JlIGFueSBzZWNvbmRh
cnkgcHJvY2Vzc2VzIGFyZSBzdGFydGVkLgogV0tfRVhQT1JUIHZvaWQgV0tDb250ZXh0VXNlVGVz
dGluZ05ldHdvcmtTZXNzaW9uKFdLQ29udGV4dFJlZiBjb250ZXh0KTsKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcm9jZXNzR3JvdXAubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1Byb2Nlc3NHcm91cC5tbQko
cmV2aXNpb24gMTkyNzUzKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9X
S1Byb2Nlc3NHcm91cC5tbQkod29ya2luZyBjb3B5KQpAQCAtMTkzLDcgKzE5Myw2IEBAIC0gKGlk
KWluaXRXaXRoSW5qZWN0ZWRCdW5kbGVVUkw6KE5TVVJMICoKICAgICBhdXRvIGNvbmZpZ3VyYXRp
b24gPSBBUEk6OlByb2Nlc3NQb29sQ29uZmlndXJhdGlvbjo6Y3JlYXRlV2l0aExlZ2FjeU9wdGlv
bnMoKTsKICAgICBjb25maWd1cmF0aW9uLT5zZXRJbmplY3RlZEJ1bmRsZVBhdGgoYnVuZGxlVVJM
ID8gU3RyaW5nKGJ1bmRsZVVSTC5wYXRoKSA6IFN0cmluZygpKTsKICNpZiBQTEFURk9STShJT1Mp
Ci0gICAgY29uZmlndXJhdGlvbi0+c2V0VXNlTmV0d29ya1Byb2Nlc3ModHJ1ZSk7CiAgICAgY29u
ZmlndXJhdGlvbi0+c2V0UHJvY2Vzc01vZGVsKFByb2Nlc3NNb2RlbE11bHRpcGxlU2Vjb25kYXJ5
UHJvY2Vzc2VzKTsKICNlbmRpZgogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2VmbC9ld2tfY29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQuY3BwCShyZXZpc2lvbiAxOTI3NTMpCisrKyBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI3Nyw3ICsyNzcsNiBAQCB2b2lkIEV3a0NvbnRleHQ6OnNldFByb2Nlc3NNb2RlbChFd2tf
UHJvCiAgICAgaWYgKFdLQ29udGV4dEdldFByb2Nlc3NNb2RlbChtX2NvbnRleHQuZ2V0KCkpID09
IG5ld1dLUHJvY2Vzc01vZGVsKQogICAgICAgICByZXR1cm47CiAKLSAgICBXS0NvbnRleHRTZXRV
c2VzTmV0d29ya1Byb2Nlc3MobV9jb250ZXh0LmdldCgpLCBuZXdXS1Byb2Nlc3NNb2RlbCA9PSBr
V0tQcm9jZXNzTW9kZWxNdWx0aXBsZVNlY29uZGFyeVByb2Nlc3Nlcyk7CiAgICAgV0tDb250ZXh0
U2V0UHJvY2Vzc01vZGVsKG1fY29udGV4dC5nZXQoKSwgbmV3V0tQcm9jZXNzTW9kZWwpOwogfQog
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJDb250ZXh0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJL
aXRXZWJDb250ZXh0LmNwcAkocmV2aXNpb24gMTkyNzUzKQorKysgU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4
Niw3ICsyODYsNiBAQCBzdGF0aWMgdm9pZCB3ZWJraXRXZWJDb250ZXh0Q29uc3RydWN0ZWQoCiAg
ICAgQVBJOjpQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbjsKICAgICBjb25m
aWd1cmF0aW9uLnNldEluamVjdGVkQnVuZGxlUGF0aChXZWJDb3JlOjpmaWxlbmFtZVRvU3RyaW5n
KGJ1bmRsZUZpbGVuYW1lLmdldCgpKSk7CiAgICAgY29uZmlndXJhdGlvbi5zZXRQcm9jZXNzTW9k
ZWwoUHJvY2Vzc01vZGVsU2hhcmVkU2Vjb25kYXJ5UHJvY2Vzcyk7Ci0gICAgY29uZmlndXJhdGlv
bi5zZXRVc2VOZXR3b3JrUHJvY2VzcyhmYWxzZSk7CiAKICAgICBXZWJLaXRXZWJDb250ZXh0KiB3
ZWJDb250ZXh0ID0gV0VCS0lUX1dFQl9DT05URVhUKG9iamVjdCk7CiAgICAgV2ViS2l0V2ViQ29u
dGV4dFByaXZhdGUqIHByaXYgPSB3ZWJDb250ZXh0LT5wcml2OwpAQCAtMTE3NCw3ICsxMTczLDYg
QEAgdm9pZCB3ZWJraXRfd2ViX2NvbnRleHRfc2V0X3Byb2Nlc3NfbW9kZQogICAgIGlmIChuZXdQ
cm9jZXNzTW9kZWwgPT0gY29udGV4dC0+cHJpdi0+Y29udGV4dC0+cHJvY2Vzc01vZGVsKCkpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIGNvbnRleHQtPnByaXYtPmNvbnRleHQtPnNldFVzZXNOZXR3
b3JrUHJvY2VzcyhuZXdQcm9jZXNzTW9kZWwgPT0gUHJvY2Vzc01vZGVsTXVsdGlwbGVTZWNvbmRh
cnlQcm9jZXNzZXMpOwogICAgIGNvbnRleHQtPnByaXYtPmNvbnRleHQtPnNldFByb2Nlc3NNb2Rl
bChuZXdQcm9jZXNzTW9kZWwpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
Q29jb2EvV2ViUHJvY2Vzc1Bvb2xDb2NvYS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Bvb2xDb2NvYS5tbQkocmV2aXNpb24gMTkyNzUz
KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQb29sQ29jb2Eu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTExNCw3ICsxMTQsNyBAQCBzdGF0aWMgdm9pZCByZWdpc3Rl
clVzZXJEZWZhdWx0c0lmTmVlZGVkCiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnVwZGF0ZVByb2Nl
c3NTdXBwcmVzc2lvblN0YXRlKCkKIHsKLSAgICBpZiAodXNlc05ldHdvcmtQcm9jZXNzKCkgJiYg
bV9uZXR3b3JrUHJvY2VzcykKKyAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKICAgICAgICAgbV9u
ZXR3b3JrUHJvY2Vzcy0+c2V0UHJvY2Vzc1N1cHByZXNzaW9uRW5hYmxlZChwcm9jZXNzU3VwcHJl
c3Npb25FbmFibGVkKCkpOwogCiAjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCkBAIC0x
OTAsMTEgKzE5MCw2IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnBsYXRmb3JtSW5pdGlhbGl6ZVcK
IAogICAgIHBhcmFtZXRlcnMudWlQcm9jZXNzQnVuZGxlSWRlbnRpZmllciA9IFN0cmluZyhbW05T
QnVuZGxlIG1haW5CdW5kbGVdIGJ1bmRsZUlkZW50aWZpZXJdKTsKIAotICAgIGlmICghdXNlc05l
dHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgZm9yIChjb25zdCBhdXRvJiBzY2hlbWUgOiBnbG9i
YWxVUkxTY2hlbWVzV2l0aEN1c3RvbVByb3RvY29sSGFuZGxlcnMoKSkKLSAgICAgICAgICAgIHBh
cmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRGb3JDdXN0b21Qcm90b2NvbHMuYXBwZW5kKHNj
aGVtZSk7Ci0gICAgfQotCiAgICAgcGFyYW1ldGVycy5mb250V2hpdGVsaXN0ID0gbV9mb250V2hp
dGVsaXN0OwogCiAgICAgaWYgKG1fYnVuZGxlUGFyYW1ldGVycykgewpJbmRleDogU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHkuY3BwCShy
ZXZpc2lvbiAxOTI3NTMpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRG93bmxvYWRzL0Rv
d25sb2FkUHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MSwxMyArNzEsOCBAQCB2b2lkIERv
d25sb2FkUHJveHk6OmNhbmNlbCgpCiAgICAgaWYgKCFtX3Byb2Nlc3NQb29sKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBpZiAobV9wcm9jZXNzUG9vbC0+dXNlc05ldHdvcmtQcm9jZXNzKCkpIHsK
LSAgICAgICAgaWYgKE5ldHdvcmtQcm9jZXNzUHJveHkqIG5ldHdvcmtQcm9jZXNzID0gbV9wcm9j
ZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5j
b25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpDYW5jZWxEb3dubG9h
ZChtX2Rvd25sb2FkSUQpLCAwKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1fcHJv
Y2Vzc1Bvb2wtPnNlbmRUb0FsbFByb2Nlc3NlcyhNZXNzYWdlczo6V2ViUHJvY2Vzczo6Q2FuY2Vs
RG93bmxvYWQobV9kb3dubG9hZElEKSk7CisgICAgaWYgKE5ldHdvcmtQcm9jZXNzUHJveHkqIG5l
dHdvcmtQcm9jZXNzID0gbV9wcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKKyAgICAgICAg
bmV0d29ya1Byb2Nlc3MtPmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nl
c3M6OkNhbmNlbERvd25sb2FkKG1fZG93bmxvYWRJRCksIDApOwogfQogCiB2b2lkIERvd25sb2Fk
UHJveHk6OmludmFsaWRhdGUoKQpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9X
ZWJQcm9jZXNzUG9vbEVmbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL2VmbC9XZWJQcm9jZXNzUG9vbEVmbC5jcHAJKHJldmlzaW9uIDE5Mjc1MykKKysrIFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2ViUHJvY2Vzc1Bvb2xFZmwuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC05Myw3ICs5Myw2IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnBsYXRmb3JtSW5pdGlh
bGl6ZVcKICAgICBwYXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkRm9yQ3VzdG9tUHJvdG9j
b2xzID0gc3VwcGxlbWVudDxXZWJTb3VwQ3VzdG9tUHJvdG9jb2xSZXF1ZXN0TWFuYWdlcj4oKS0+
cmVnaXN0ZXJlZFNjaGVtZXNGb3JDdXN0b21Qcm90b2NvbHMoKTsKICAgICBzdXBwbGVtZW50PFdl
YkNvb2tpZU1hbmFnZXJQcm94eT4oKS0+Z2V0Q29va2llUGVyc2lzdGVudFN0b3JhZ2UocGFyYW1l
dGVycy5jb29raWVQZXJzaXN0ZW50U3RvcmFnZVBhdGgsIHBhcmFtZXRlcnMuY29va2llUGVyc2lz
dGVudFN0b3JhZ2VUeXBlKTsKICAgICBwYXJhbWV0ZXJzLmNvb2tpZUFjY2VwdFBvbGljeSA9IG1f
aW5pdGlhbEhUVFBDb29raWVBY2NlcHRQb2xpY3k7Ci0gICAgcGFyYW1ldGVycy5pZ25vcmVUTFNF
cnJvcnMgPSBtX2lnbm9yZVRMU0Vycm9yczsKICAgICBwYXJhbWV0ZXJzLmRpc2tDYWNoZURpcmVj
dG9yeSA9IG1fY29uZmlndXJhdGlvbi0+ZGlza0NhY2hlRGlyZWN0b3J5KCk7CiB9CiAKQEAgLTE0
Niw3ICsxNDUsNiBAQCBTdHJpbmcgV2ViUHJvY2Vzc1Bvb2w6OmxlZ2FjeVBsYXRmb3JtRGVmCiB2
b2lkIFdlYlByb2Nlc3NQb29sOjpzZXRJZ25vcmVUTFNFcnJvcnMoYm9vbCBpZ25vcmVUTFNFcnJv
cnMpCiB7CiAgICAgbV9pZ25vcmVUTFNFcnJvcnMgPSBpZ25vcmVUTFNFcnJvcnM7Ci0gICAgc2Vu
ZFRvQWxsUHJvY2Vzc2VzKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpTZXRJZ25vcmVUTFNFcnJvcnMo
bV9pZ25vcmVUTFNFcnJvcnMpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYlByb2Nlc3NQb29sR3RrLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYlByb2Nlc3NQb29sR3RrLmNw
cAkocmV2aXNpb24gMTkyNzUzKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJQ
cm9jZXNzUG9vbEd0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk1LDE2ICs5NSw2IEBAIHZvaWQg
V2ViUHJvY2Vzc1Bvb2w6OnBsYXRmb3JtSW5pdGlhbGl6ZVcKICAgICAgICAgcGFyYW1ldGVycy51
cmxTY2hlbWVzUmVnaXN0ZXJlZEFzTG9jYWwuYXBwZW5kKCJyZXNvdXJjZSIpOwogICAgIH0KIAot
ICAgIGlmICghdXNlc05ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgcGFyYW1ldGVycy51cmxT
Y2hlbWVzUmVnaXN0ZXJlZEZvckN1c3RvbVByb3RvY29scyA9IHN1cHBsZW1lbnQ8V2ViU291cEN1
c3RvbVByb3RvY29sUmVxdWVzdE1hbmFnZXI+KCktPnJlZ2lzdGVyZWRTY2hlbWVzRm9yQ3VzdG9t
UHJvdG9jb2xzKCk7Ci0KLSAgICAgICAgc3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJveHk+
KCktPmdldENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlKHBhcmFtZXRlcnMuY29va2llUGVyc2lzdGVu
dFN0b3JhZ2VQYXRoLCBwYXJhbWV0ZXJzLmNvb2tpZVBlcnNpc3RlbnRTdG9yYWdlVHlwZSk7Ci0g
ICAgICAgIHBhcmFtZXRlcnMuY29va2llQWNjZXB0UG9saWN5ID0gbV9pbml0aWFsSFRUUENvb2tp
ZUFjY2VwdFBvbGljeTsKLQotICAgICAgICBwYXJhbWV0ZXJzLmlnbm9yZVRMU0Vycm9ycyA9IG1f
aWdub3JlVExTRXJyb3JzOwotICAgICAgICBwYXJhbWV0ZXJzLmRpc2tDYWNoZURpcmVjdG9yeSA9
IG1fY29uZmlndXJhdGlvbi0+ZGlza0NhY2hlRGlyZWN0b3J5KCk7Ci0gICAgfQotCiAgICAgcGFy
YW1ldGVycy5tZW1vcnlDYWNoZURpc2FibGVkID0gbV9tZW1vcnlDYWNoZURpc2FibGVkIHx8IGNh
Y2hlTW9kZWwoKSA9PSBDYWNoZU1vZGVsRG9jdW1lbnRWaWV3ZXI7CiB9CiAKQEAgLTE0NiwxMSAr
MTM2LDEwIEBAIFN0cmluZyBXZWJQcm9jZXNzUG9vbDo6bGVnYWN5UGxhdGZvcm1EZWYKIHZvaWQg
V2ViUHJvY2Vzc1Bvb2w6OnNldElnbm9yZVRMU0Vycm9ycyhib29sIGlnbm9yZVRMU0Vycm9ycykK
IHsKICAgICBtX2lnbm9yZVRMU0Vycm9ycyA9IGlnbm9yZVRMU0Vycm9yczsKLSAgICBpZiAodXNl
c05ldHdvcmtQcm9jZXNzKCkgJiYgbmV0d29ya1Byb2Nlc3MoKSkgeworICAgIGlmIChuZXR3b3Jr
UHJvY2VzcygpKSB7CiAgICAgICAgIG5ldHdvcmtQcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6Ok5l
dHdvcmtQcm9jZXNzOjpTZXRJZ25vcmVUTFNFcnJvcnMobV9pZ25vcmVUTFNFcnJvcnMpLCAwKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBzZW5kVG9BbGxQcm9jZXNzZXMoTWVzc2FnZXM6
OldlYlByb2Nlc3M6OlNldElnbm9yZVRMU0Vycm9ycyhtX2lnbm9yZVRMU0Vycm9ycykpOwogfQog
CiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUHJvY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQcm9jZXNzLmNwcAkocmV2aXNpb24gMTkyNzUzKQorKysgU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQcm9jZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU2LDcgKzE1Niw2IEBAIFdl
YlByb2Nlc3M6OldlYlByb2Nlc3MoKQogICAgICwgbV9mdWxsS2V5Ym9hcmRBY2Nlc3NFbmFibGVk
KGZhbHNlKQogICAgICwgbV90ZXh0Q2hlY2tlclN0YXRlKCkKICAgICAsIG1faWNvbkRhdGFiYXNl
UHJveHkobmV3IFdlYkljb25EYXRhYmFzZVByb3h5KHRoaXMpKQotICAgICwgbV91c2VzTmV0d29y
a1Byb2Nlc3MoZmFsc2UpCiAgICAgLCBtX3dlYlJlc291cmNlTG9hZFNjaGVkdWxlcihuZXcgV2Vi
UmVzb3VyY2VMb2FkU2NoZWR1bGVyKQogICAgICwgbV9kbnNQcmVmZXRjaEh5c3RlcmVyaXMoW3Ro
aXNdKEh5c3RlcmVzaXNTdGF0ZSBzdGF0ZSkgeyBpZiAoc3RhdGUgPT0gSHlzdGVyZXNpc1N0YXRl
OjpTdG9wcGVkKSBtX2Ruc1ByZWZldGNoZWRIb3N0cy5jbGVhcigpOyB9KQogI2lmIEVOQUJMRShO
RVRTQ0FQRV9QTFVHSU5fQVBJKQpAQCAtMjQ1LDMyICsyNDQsMTAgQEAgdm9pZCBXZWJQcm9jZXNz
Ojppbml0aWFsaXplQ29ubmVjdGlvbihJUAogICAgIGNvbm5lY3Rpb24tPnNldE9ubHlTZW5kTWVz
c2FnZXNBc0Rpc3BhdGNoV2hlbldhaXRpbmdGb3JTeW5jUmVwbHlXaGVuUHJvY2Vzc2luZ1N1Y2hB
TWVzc2FnZSh0cnVlKTsKIH0KIAotdm9pZCBXZWJQcm9jZXNzOjpkaWRDcmVhdGVEb3dubG9hZCgp
Ci17Ci0gICAgZGlzYWJsZVRlcm1pbmF0aW9uKCk7Ci19Ci0KLXZvaWQgV2ViUHJvY2Vzczo6ZGlk
RGVzdHJveURvd25sb2FkKCkKLXsKLSAgICBlbmFibGVUZXJtaW5hdGlvbigpOwotfQotCi1JUEM6
OkNvbm5lY3Rpb24qIFdlYlByb2Nlc3M6OmRvd25sb2FkUHJveHlDb25uZWN0aW9uKCkKLXsKLSAg
ICByZXR1cm4gcGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKTsKLX0KLQotQXV0aGVudGljYXRpb25N
YW5hZ2VyJiBXZWJQcm9jZXNzOjpkb3dubG9hZHNBdXRoZW50aWNhdGlvbk1hbmFnZXIoKQotewot
ICAgIHJldHVybiAqc3VwcGxlbWVudDxBdXRoZW50aWNhdGlvbk1hbmFnZXI+KCk7Ci19Ci0KIHZv
aWQgV2ViUHJvY2Vzczo6aW5pdGlhbGl6ZVdlYlByb2Nlc3MoV2ViUHJvY2Vzc0NyZWF0aW9uUGFy
YW1ldGVycyYmIHBhcmFtZXRlcnMpCiB7CiAgICAgQVNTRVJUKG1fcGFnZU1hcC5pc0VtcHR5KCkp
OwogCi0gICAgbV91c2VzTmV0d29ya1Byb2Nlc3MgPSBwYXJhbWV0ZXJzLnVzZXNOZXR3b3JrUHJv
Y2VzczsKLQogI2lmIE9TKExJTlVYKQogICAgIFdlYkNvcmU6Ok1lbW9yeVByZXNzdXJlSGFuZGxl
cjo6UmVsaWVmTG9nZ2VyOjpzZXRMb2dnaW5nRW5hYmxlZChwYXJhbWV0ZXJzLnNob3VsZEVuYWJs
ZU1lbW9yeVByZXNzdXJlUmVsaWVmTG9nZ2luZyk7CiAjZW5kaWYKQEAgLTM1Miw4ICszMjksNyBA
QCB2b2lkIFdlYlByb2Nlc3M6OmluaXRpYWxpemVXZWJQcm9jZXNzKFdlCiAgICAgZW5zdXJlTmV0
d29ya1Byb2Nlc3NDb25uZWN0aW9uKCk7CiAKICNpZiBQTEFURk9STShDT0NPQSkKLSAgICBpZiAo
dXNlc05ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgIENvb2tpZVN0b3JhZ2VTaGltOjpzaW5nbGV0
b24oKS5pbml0aWFsaXplKCk7CisgICAgQ29va2llU3RvcmFnZVNoaW06OnNpbmdsZXRvbigpLmlu
aXRpYWxpemUoKTsKICNlbmRpZgogICAgIHNldFRlcm1pbmF0aW9uVGltZW91dChwYXJhbWV0ZXJz
LnRlcm1pbmF0aW9uVGltZW91dCk7CiAKQEAgLTM4Nyw5ICszNjMsNiBAQCB2b2lkIFdlYlByb2Nl
c3M6OmluaXRpYWxpemVXZWJQcm9jZXNzKFdlCiAKIHZvaWQgV2ViUHJvY2Vzczo6ZW5zdXJlTmV0
d29ya1Byb2Nlc3NDb25uZWN0aW9uKCkKIHsKLSAgICBpZiAoIW1fdXNlc05ldHdvcmtQcm9jZXNz
KQotICAgICAgICByZXR1cm47Ci0KICAgICBpZiAobV9uZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24p
CiAgICAgICAgIHJldHVybjsKIApAQCAtNDk4LDE0ICs0NzEsNiBAQCB2b2lkIFdlYlByb2Nlc3M6
OmRlc3Ryb3lQcml2YXRlQnJvd3NpbmdTCiAjZW5kaWYKIH0KIAotRG93bmxvYWRNYW5hZ2VyJiBX
ZWJQcm9jZXNzOjpkb3dubG9hZE1hbmFnZXIoKQotewotICAgIEFTU0VSVCghdXNlc05ldHdvcmtQ
cm9jZXNzKCkpOwotCi0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPERvd25sb2FkTWFuYWdlcj4g
ZG93bmxvYWRNYW5hZ2VyKHRoaXMpOwotICAgIHJldHVybiBkb3dubG9hZE1hbmFnZXI7Ci19Ci0K
ICNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKIFBsdWdpblByb2Nlc3NDb25uZWN0aW9u
TWFuYWdlciYgV2ViUHJvY2Vzczo6cGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb25NYW5hZ2VyKCkKIHsK
QEAgLTU2OCw3ICs1MzMsNiBAQCB2b2lkIFdlYlByb2Nlc3M6OnJlbW92ZVdlYlBhZ2UodWludDY0
X3QgCiBib29sIFdlYlByb2Nlc3M6OnNob3VsZFRlcm1pbmF0ZSgpCiB7CiAgICAgQVNTRVJUKG1f
cGFnZU1hcC5pc0VtcHR5KCkpOwotICAgIEFTU0VSVCh1c2VzTmV0d29ya1Byb2Nlc3MoKSB8fCAh
ZG93bmxvYWRNYW5hZ2VyKCkuaXNEb3dubG9hZGluZygpKTsKIAogICAgIC8vIEZJWE1FOiB0aGUg
U2hvdWxkVGVybWluYXRlIG1lc3NhZ2Ugc2hvdWxkIGFsc28gc2VuZCB0ZXJtaW5hdGlvbiBwYXJh
bWV0ZXJzLCBzdWNoIGFzIGFueSBzZXNzaW9uIGNvb2tpZXMgdGhhdCBuZWVkIHRvIGJlIHByZXNl
cnZlZC4KICAgICBib29sIHNob3VsZFRlcm1pbmF0ZSA9IGZhbHNlOwpAQCAtMTAxNywxNSArOTgx
LDggQEAgdm9pZCBXZWJQcm9jZXNzOjpzZXRJbmplY3RlZEJ1bmRsZVBhcmFtZQogICAgIGluamVj
dGVkQnVuZGxlLT5zZXRCdW5kbGVQYXJhbWV0ZXJzKHZhbHVlKTsKIH0KIAotYm9vbCBXZWJQcm9j
ZXNzOjp1c2VzTmV0d29ya1Byb2Nlc3MoKSBjb25zdAotewotICAgIHJldHVybiBtX3VzZXNOZXR3
b3JrUHJvY2VzczsKLX0KLQogTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKiBXZWJQcm9jZXNzOjpu
ZXR3b3JrQ29ubmVjdGlvbigpCiB7Ci0gICAgQVNTRVJUKG1fdXNlc05ldHdvcmtQcm9jZXNzKTsK
LQogICAgIC8vIElmIHdlJ3ZlIGxvc3Qgb3VyIGNvbm5lY3Rpb24gdG8gdGhlIG5ldHdvcmsgcHJv
Y2VzcyAoZS5nLiBpdCBjcmFzaGVkKSB0cnkgdG8gcmUtZXN0YWJsaXNoIGl0LgogICAgIGlmICgh
bV9uZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24pCiAgICAgICAgIGVuc3VyZU5ldHdvcmtQcm9jZXNz
Q29ubmVjdGlvbigpOwpAQCAtMTA5NCwyNyArMTA1MSw2IEBAIHZvaWQgV2ViUHJvY2Vzczo6ZW5z
dXJlV2ViVG9EYXRhYmFzZVByb2MKIAogI2VuZGlmIC8vIEVOQUJMRUQoREFUQUJBU0VfUFJPQ0VT
UykKIAotdm9pZCBXZWJQcm9jZXNzOjpkb3dubG9hZFJlcXVlc3QoU2Vzc2lvbklEIHNlc3Npb25J
RCwgdWludDY0X3QgZG93bmxvYWRJRCwgdWludDY0X3QgaW5pdGlhdGluZ1BhZ2VJRCwgY29uc3Qg
UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQotewotICAgIFdlYlBhZ2UqIGluaXRpYXRpbmdQYWdl
ID0gaW5pdGlhdGluZ1BhZ2VJRCA/IHdlYlBhZ2UoaW5pdGlhdGluZ1BhZ2VJRCkgOiAwOwotCi0g
ICAgUmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3RXaXRoT3JpZ2luYWxVUkwgPSByZXF1ZXN0OwotICAg
IGlmIChpbml0aWF0aW5nUGFnZSkKLSAgICAgICAgaW5pdGlhdGluZ1BhZ2UtPm1haW5GcmFtZSgp
LT5sb2FkZXIoKS5zZXRPcmlnaW5hbFVSTEZvckRvd25sb2FkUmVxdWVzdChyZXF1ZXN0V2l0aE9y
aWdpbmFsVVJMKTsKLQotICAgIGRvd25sb2FkTWFuYWdlcigpLnN0YXJ0RG93bmxvYWQoc2Vzc2lv
bklELCBkb3dubG9hZElELCByZXF1ZXN0V2l0aE9yaWdpbmFsVVJMKTsKLX0KLQotdm9pZCBXZWJQ
cm9jZXNzOjpyZXN1bWVEb3dubG9hZCh1aW50NjRfdCBkb3dubG9hZElELCBjb25zdCBJUEM6OkRh
dGFSZWZlcmVuY2UmIHJlc3VtZURhdGEsIGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgV2ViS2l0
OjpTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUmIHNhbmRib3hFeHRlbnNpb25IYW5kbGUpCi17Ci0g
ICAgZG93bmxvYWRNYW5hZ2VyKCkucmVzdW1lRG93bmxvYWQoZG93bmxvYWRJRCwgcmVzdW1lRGF0
YSwgcGF0aCwgc2FuZGJveEV4dGVuc2lvbkhhbmRsZSk7Ci19Ci0KLXZvaWQgV2ViUHJvY2Vzczo6
Y2FuY2VsRG93bmxvYWQodWludDY0X3QgZG93bmxvYWRJRCkKLXsKLSAgICBkb3dubG9hZE1hbmFn
ZXIoKS5jYW5jZWxEb3dubG9hZChkb3dubG9hZElEKTsKLX0KLQogdm9pZCBXZWJQcm9jZXNzOjpz
ZXRFbmhhbmNlZEFjY2Vzc2liaWxpdHkoYm9vbCBmbGFnKQogewogICAgIFdlYkNvcmU6OkFYT2Jq
ZWN0Q2FjaGU6OnNldEVuaGFuY2VkVXNlckludGVyZmFjZUFjY2Vzc2liaWxpdHkoZmxhZyk7CkBA
IC0xNDU2LDE2ICsxMzkyLDEyIEBAIHZvaWQgV2ViUHJvY2Vzczo6cHJlZmV0Y2hETlMoY29uc3Qg
U3RyaW4KICAgICBpZiAoaG9zdG5hbWUuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBpZiAodXNlc05ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgaWYgKG1fZG5zUHJlZmV0Y2hl
ZEhvc3RzLmFkZChob3N0bmFtZSkuaXNOZXdFbnRyeSkKLSAgICAgICAgICAgIG5ldHdvcmtDb25u
ZWN0aW9uKCktPmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rpb25U
b1dlYlByb2Nlc3M6OlByZWZldGNoRE5TKGhvc3RuYW1lKSwgMCk7Ci0gICAgICAgIC8vIFRoZSBE
TlMgcHJlZmV0Y2hlZCBob3N0cyBjYWNoZSBpcyBvbmx5IHRvIGF2b2lkIGFza2luZyBmb3IgdGhl
IHNhbWUgaG9zdHMgdG9vIG1hbnkgdGltZXMKLSAgICAgICAgLy8gaW4gYSB2ZXJ5IHNob3J0IHBl
cmlvZCBvZiB0aW1lLCBwcm9kdWNpbmcgYSBsb3Qgb2YgSVBDIHRyYWZmaWMuIFNvIHdlIGNsZWFy
IHRoaXMgY2FjaGUgYWZ0ZXIKLSAgICAgICAgLy8gc29tZSB0aW1lIG9mIG5vIEROUyByZXF1ZXN0
cy4KLSAgICAgICAgbV9kbnNQcmVmZXRjaEh5c3RlcmVyaXMuaW1wdWxzZSgpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotICAgIFdlYkNvcmU6OnByZWZldGNoRE5TKGhvc3RuYW1lKTsKKyAgICBp
ZiAobV9kbnNQcmVmZXRjaGVkSG9zdHMuYWRkKGhvc3RuYW1lKS5pc05ld0VudHJ5KQorICAgICAg
ICBuZXR3b3JrQ29ubmVjdGlvbigpLT5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6Ok5ldHdv
cmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpQcmVmZXRjaEROUyhob3N0bmFtZSksIDApOworICAg
IC8vIFRoZSBETlMgcHJlZmV0Y2hlZCBob3N0cyBjYWNoZSBpcyBvbmx5IHRvIGF2b2lkIGFza2lu
ZyBmb3IgdGhlIHNhbWUgaG9zdHMgdG9vIG1hbnkgdGltZXMKKyAgICAvLyBpbiBhIHZlcnkgc2hv
cnQgcGVyaW9kIG9mIHRpbWUsIHByb2R1Y2luZyBhIGxvdCBvZiBJUEMgdHJhZmZpYy4gU28gd2Ug
Y2xlYXIgdGhpcyBjYWNoZSBhZnRlcgorICAgIC8vIHNvbWUgdGltZSBvZiBubyBETlMgcmVxdWVz
dHMuCisgICAgbV9kbnNQcmVmZXRjaEh5c3RlcmVyaXMuaW1wdWxzZSgpOwogfQogCiB9IC8vIG5h
bWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vz
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5o
CShyZXZpc2lvbiAxOTI3NTMpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nl
c3MuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgsNiBAQAogCiAjaW5jbHVkZSAiQ2FjaGVN
b2RlbC5oIgogI2luY2x1ZGUgIkNoaWxkUHJvY2Vzcy5oIgotI2luY2x1ZGUgIkRvd25sb2FkTWFu
YWdlci5oIgogI2luY2x1ZGUgIkRyYXdpbmdBcmVhLmgiCiAjaW5jbHVkZSAiUGx1Z2luUHJvY2Vz
c0Nvbm5lY3Rpb25NYW5hZ2VyLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VDYWNoZXNUb0NsZWFyLmgi
CkBAIC03MSw3ICs3MCw2IEBAIHN0cnVjdCBTZWN1cml0eU9yaWdpbkRhdGE7CiAKIG5hbWVzcGFj
ZSBXZWJLaXQgewogCi1jbGFzcyBEb3dubG9hZE1hbmFnZXI7CiBjbGFzcyBFdmVudERpc3BhdGNo
ZXI7CiBjbGFzcyBJbmplY3RlZEJ1bmRsZTsKIGNsYXNzIE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlv
bjsKQEAgLTkzLDggKzkxLDcgQEAgc3RydWN0IFdlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM7
CiBjbGFzcyBXZWJUb0RhdGFiYXNlUHJvY2Vzc0Nvbm5lY3Rpb247CiAjZW5kaWYKIAotY2xhc3Mg
V2ViUHJvY2VzcyA6IHB1YmxpYyBDaGlsZFByb2Nlc3MsIHByaXZhdGUgRG93bmxvYWRNYW5hZ2Vy
OjpDbGllbnQgewotICAgIGZyaWVuZCBjbGFzcyBOZXZlckRlc3Ryb3llZDxEb3dubG9hZE1hbmFn
ZXI+OworY2xhc3MgV2ViUHJvY2VzcyA6IHB1YmxpYyBDaGlsZFByb2Nlc3MgewogcHVibGljOgog
ICAgIHN0YXRpYyBXZWJQcm9jZXNzJiBzaW5nbGV0b24oKTsKIApAQCAtMTQ0LDcgKzE0MSw2IEBA
IHB1YmxpYzoKICNlbmRpZgogICAgIAogICAgIGNvbnN0IFRleHRDaGVja2VyU3RhdGUmIHRleHRD
aGVja2VyU3RhdGUoKSBjb25zdCB7IHJldHVybiBtX3RleHRDaGVja2VyU3RhdGU7IH0KLSAgICBE
b3dubG9hZE1hbmFnZXImIGRvd25sb2FkTWFuYWdlcigpOwogCiAgICAgdm9pZCBjbGVhclJlc291
cmNlQ2FjaGVzKFJlc291cmNlQ2FjaGVzVG9DbGVhciA9IEFsbFJlc291cmNlQ2FjaGVzKTsKICAg
ICAKQEAgLTE1NCw4ICsxNTAsNiBAQCBwdWJsaWM6CiAKICAgICBFdmVudERpc3BhdGNoZXImIGV2
ZW50RGlzcGF0Y2hlcigpIHsgcmV0dXJuICptX2V2ZW50RGlzcGF0Y2hlcjsgfQogCi0gICAgYm9v
bCB1c2VzTmV0d29ya1Byb2Nlc3MoKSBjb25zdDsKLQogICAgIE5ldHdvcmtQcm9jZXNzQ29ubmVj
dGlvbiogbmV0d29ya0Nvbm5lY3Rpb24oKTsKICAgICB2b2lkIG5ldHdvcmtQcm9jZXNzQ29ubmVj
dGlvbkNsb3NlZChOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24qKTsKICAgICBXZWJSZXNvdXJjZUxv
YWRTY2hlZHVsZXImIHdlYlJlc291cmNlTG9hZFNjaGVkdWxlcigpOwpAQCAtMTgxLDEwICsxNzUs
NiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHVwZGF0ZUFjdGl2ZVBhZ2VzKCk7CiAKLSNpZiBVU0Uo
U09VUCkKLSAgICB2b2lkIGFsbG93U3BlY2lmaWNIVFRQU0NlcnRpZmljYXRlRm9ySG9zdChjb25z
dCBXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8mLCBjb25zdCBTdHJpbmcmIGhvc3QpOwotI2VuZGlm
Ci0KICAgICB2b2lkIHByb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHkoYm9vbCYgaGFuZGxlZCk7
CiAgICAgdm9pZCBwcmVwYXJlVG9TdXNwZW5kKCk7CiAgICAgdm9pZCBjYW5jZWxQcmVwYXJlVG9T
dXNwZW5kKCk7CkBAIC0yMTcsMTIgKzIwNyw2IEBAIHByaXZhdGU6CiAgICAgV2ViUHJvY2Vzcygp
OwogICAgIH5XZWJQcm9jZXNzKCk7CiAKLSAgICAvLyBEb3dubG9hZE1hbmFnZXI6OkNsaWVudC4K
LSAgICB2aXJ0dWFsIHZvaWQgZGlkQ3JlYXRlRG93bmxvYWQoKSBvdmVycmlkZTsKLSAgICB2aXJ0
dWFsIHZvaWQgZGlkRGVzdHJveURvd25sb2FkKCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBJUEM6
OkNvbm5lY3Rpb24qIGRvd25sb2FkUHJveHlDb25uZWN0aW9uKCkgb3ZlcnJpZGU7Ci0gICAgdmly
dHVhbCBBdXRoZW50aWNhdGlvbk1hbmFnZXImIGRvd25sb2Fkc0F1dGhlbnRpY2F0aW9uTWFuYWdl
cigpIG92ZXJyaWRlOwotCiAgICAgdm9pZCBpbml0aWFsaXplV2ViUHJvY2VzcyhXZWJQcm9jZXNz
Q3JlYXRpb25QYXJhbWV0ZXJzJiYpOwogICAgIHZvaWQgcGxhdGZvcm1Jbml0aWFsaXplV2ViUHJv
Y2VzcyhXZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJiYpOwogCkBAIC0yNTgsMTAgKzI0Miw2
IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzdGFydE1lbW9yeVNhbXBsZXIoY29uc3QgU2FuZGJveEV4
dGVuc2lvbjo6SGFuZGxlJiwgY29uc3QgU3RyaW5nJiwgY29uc3QgZG91YmxlKTsKICAgICB2b2lk
IHN0b3BNZW1vcnlTYW1wbGVyKCk7CiAKLSAgICB2b2lkIGRvd25sb2FkUmVxdWVzdChXZWJDb3Jl
OjpTZXNzaW9uSUQsIHVpbnQ2NF90IGRvd25sb2FkSUQsIHVpbnQ2NF90IGluaXRpYXRpbmdQYWdl
SUQsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYpOwotICAgIHZvaWQgcmVzdW1lRG93
bmxvYWQodWludDY0X3QgZG93bmxvYWRJRCwgY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJiByZXN1
bWVEYXRhLCBjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFNhbmRib3hFeHRlbnNpb246OkhhbmRs
ZSYpOwotICAgIHZvaWQgY2FuY2VsRG93bmxvYWQodWludDY0X3QgZG93bmxvYWRJRCk7Ci0KICAg
ICB2b2lkIHNldFRleHRDaGVja2VyU3RhdGUoY29uc3QgVGV4dENoZWNrZXJTdGF0ZSYpOwogICAg
IAogICAgIHZvaWQgZ2V0V2ViQ29yZVN0YXRpc3RpY3ModWludDY0X3QgY2FsbGJhY2tJRCk7CkBA
IC0yNzYsMTAgKzI1Niw2IEBAIHByaXZhdGU6CiAgICAgdm9pZCBkZWxldGVXZWJzaXRlRGF0YShX
ZWJDb3JlOjpTZXNzaW9uSUQsIHVpbnQ2NF90IHdlYnNpdGVEYXRhVHlwZXMsIHN0ZDo6Y2hyb25v
OjpzeXN0ZW1fY2xvY2s6OnRpbWVfcG9pbnQgbW9kaWZpZWRTaW5jZSwgdWludDY0X3QgY2FsbGJh
Y2tJRCk7CiAgICAgdm9pZCBkZWxldGVXZWJzaXRlRGF0YUZvck9yaWdpbnMoV2ViQ29yZTo6U2Vz
c2lvbklELCB1aW50NjRfdCB3ZWJzaXRlRGF0YVR5cGVzLCBjb25zdCBWZWN0b3I8V2ViQ29yZTo6
U2VjdXJpdHlPcmlnaW5EYXRhPiYgb3JpZ2lucywgdWludDY0X3QgY2FsbGJhY2tJRCk7CiAKLSNp
ZiBVU0UoU09VUCkKLSAgICB2b2lkIHNldElnbm9yZVRMU0Vycm9ycyhib29sKTsKLSNlbmRpZgot
CiAgICAgdm9pZCBzZXRNZW1vcnlDYWNoZURpc2FibGVkKGJvb2wpOwogCiAjaWYgRU5BQkxFKFNF
UlZJQ0VfQ09OVFJPTFMpCkBAIC0zNTgsNyArMzM0LDYgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQg
ZW5zdXJlTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKCk7CiAgICAgUmVmUHRyPE5ldHdvcmtQcm9j
ZXNzQ29ubmVjdGlvbj4gbV9uZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb247Ci0gICAgYm9vbCBtX3Vz
ZXNOZXR3b3JrUHJvY2VzczsKICAgICBXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIqIG1fd2ViUmVz
b3VyY2VMb2FkU2NoZWR1bGVyOwogICAgIEhhc2hTZXQ8U3RyaW5nPiBtX2Ruc1ByZWZldGNoZWRI
b3N0czsKICAgICBXZWJDb3JlOjpIeXN0ZXJlc2lzQWN0aXZpdHkgbV9kbnNQcmVmZXRjaEh5c3Rl
cmVyaXM7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MubWVzc2Fn
ZXMuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNz
Lm1lc3NhZ2VzLmluCShyZXZpc2lvbiAxOTI3NTMpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlByb2Nlc3MubWVzc2FnZXMuaW4JKHdvcmtpbmcgY29weSkKQEAgLTQ0LDkgKzQ0LDYg
QEAgbWVzc2FnZXMgLT4gV2ViUHJvY2VzcyBMZWdhY3lSZWNlaXZlciB7CiAgICAgU2V0U2hvdWxk
VXNlRm9udFNtb290aGluZyhib29sIHVzZUZvbnRTbW9vdGhpbmcpCiAgICAgVXNlclByZWZlcnJl
ZExhbmd1YWdlc0NoYW5nZWQoVmVjdG9yPFN0cmluZz4gbGFuZ3VhZ2VzKQogICAgIEZ1bGxLZXli
b2FyZEFjY2Vzc01vZGVDaGFuZ2VkKGJvb2wgZnVsbEtleWJvYXJkQWNjZXNzRW5hYmxlZCkKLSNp
ZiBVU0UoU09VUCkKLSAgICBTZXRJZ25vcmVUTFNFcnJvcnMoYm9vbCBpZ25vcmVUTFNFcnJvcnMp
Ci0jZW5kaWYKIAogICAgIC8vIExlZ2FjeSBwcml2YXRlIGJyb3dzaW5nIHNlc3Npb24gaXMgcGVy
IHByb2Nlc3MuIEluZGl2aWR1YWwgcGFnZXMgb3IgcGFnZSBncm91cHMgbWF5IHVzZSB0aGUgcHJp
dmF0ZSBzZXNzaW9uIG9yIHRoZSBkZWZhdWx0IG9uZSBhcyBhcHByb3ByaWF0ZS4KICAgICBFbnN1
cmVQcml2YXRlQnJvd3NpbmdTZXNzaW9uKFdlYkNvcmU6OlNlc3Npb25JRCBzZXNzaW9uSUQpCkBA
IC02MiwxMiArNTksNiBAQCBtZXNzYWdlcyAtPiBXZWJQcm9jZXNzIExlZ2FjeVJlY2VpdmVyIHsK
ICAgICB2b2lkIFN0YXJ0TWVtb3J5U2FtcGxlcihXZWJLaXQ6OlNhbmRib3hFeHRlbnNpb246Okhh
bmRsZSBzYW1wbGVMb2dGaWxlSGFuZGxlLCBTdHJpbmcgc2FtcGxlTG9nRmlsZVBhdGgsIGRvdWJs
ZSBpbnRlcnZhbCk7CiAgICAgdm9pZCBTdG9wTWVtb3J5U2FtcGxlcigpOwogCi0gICAgIyBEb3du
bG9hZHMuIFRoaXMgc2hvdWxkIHJlYWxseSBiZSBpbiBhIERvd25sb2FkLm1lc3NhZ2VzLmluLCBi
dXQgaXQgc2VlbWVkIHVubmVjZXNzYXJ5IHRvIGNyZWF0ZSBhIG5ldyBmaWxlIGp1c3QgZm9yCi0g
ICAgIyB0aHJlZSBtZXNzYWdlcy4KLSAgICBEb3dubG9hZFJlcXVlc3QoV2ViQ29yZTo6U2Vzc2lv
bklEIHNlc3Npb25JRCwgdWludDY0X3QgZG93bmxvYWRJRCwgdWludDY0X3QgaW5pdGlhdGluZ1Bh
Z2VJRCwgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3QpCi0gICAgUmVzdW1lRG93bmxv
YWQodWludDY0X3QgZG93bmxvYWRJRCwgSVBDOjpEYXRhUmVmZXJlbmNlIHJlc3VtZURhdGEsIFN0
cmluZyBwYXRoLCBXZWJLaXQ6OlNhbmRib3hFeHRlbnNpb246OkhhbmRsZSBzYW5kYm94RXh0ZW5z
aW9uSGFuZGxlKQotICAgIENhbmNlbERvd25sb2FkKHVpbnQ2NF90IGRvd25sb2FkSUQpCi0KICAg
ICBTZXRUZXh0Q2hlY2tlclN0YXRlKHN0cnVjdCBXZWJLaXQ6OlRleHRDaGVja2VyU3RhdGUgdGV4
dENoZWNrZXJTdGF0ZSkKIAogICAgIFNldEVuaGFuY2VkQWNjZXNzaWJpbGl0eShib29sIGZsYWcp
CkBAIC05MSwxMCArODIsNiBAQCBtZXNzYWdlcyAtPiBXZWJQcm9jZXNzIExlZ2FjeVJlY2VpdmVy
IHsKICAgICBTZXRRT1MoaW50IGxhdGVuY3lRT1MsIGludCB0aHJvdWdocHV0UU9TKQogI2VuZGlm
CiAKLSNpZiBVU0UoU09VUCkKLSAgICBBbGxvd1NwZWNpZmljSFRUUFNDZXJ0aWZpY2F0ZUZvckhv
c3QoV2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvIGNlcnRpZmljYXRlLCBTdHJpbmcgaG9zdCkKLSNl
bmRpZgotCiAgICAgU2V0TWVtb3J5Q2FjaGVEaXNhYmxlZChib29sIGRpc2FibGVkKTsKIAogI2lm
IEVOQUJMRShTRVJWSUNFX0NPTlRST0xTKQpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9GaWxlQVBJL0Jsb2JSZWdpc3RyeVByb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL0ZpbGVBUEkvQmxvYlJlZ2lzdHJ5UHJveHkuY3BwCShyZXZpc2lvbiAx
OTI3NTMpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0ZpbGVBUEkvQmxvYlJlZ2lzdHJ5
UHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw4ICszOCw2IEBAIG5hbWVzcGFjZSBXZWJL
aXQgewogCiB2b2lkIEJsb2JSZWdpc3RyeVByb3h5OjpyZWdpc3RlckZpbGVCbG9iVVJMKGNvbnN0
IFdlYkNvcmU6OlVSTCYgdXJsLCBQYXNzUmVmUHRyPEJsb2JEYXRhRmlsZVJlZmVyZW5jZT4gZmls
ZSwgY29uc3QgU3RyaW5nJiBjb250ZW50VHlwZSkKIHsKLSAgICBBU1NFUlQoV2ViUHJvY2Vzczo6
c2luZ2xldG9uKCkudXNlc05ldHdvcmtQcm9jZXNzKCkpOwotCiAgICAgU2FuZGJveEV4dGVuc2lv
bjo6SGFuZGxlIGV4dGVuc2lvbkhhbmRsZTsKIAogICAgIC8vIEZpbGUgcGF0aCBjYW4gYmUgZW1w
dHkgd2hlbiBzdWJtaXR0aW5nIGEgZm9ybSBmaWxlIGlucHV0IHdpdGhvdXQgYSBmaWxlLCBzZWUg
YnVnIDExMTc3OC4KQEAgLTUxLDM2ICs0OSwyNiBAQCB2b2lkIEJsb2JSZWdpc3RyeVByb3h5Ojpy
ZWdpc3RlckZpbGVCbG9iCiAKIHZvaWQgQmxvYlJlZ2lzdHJ5UHJveHk6OnJlZ2lzdGVyQmxvYlVS
TChjb25zdCBVUkwmIHVybCwgVmVjdG9yPEJsb2JQYXJ0PiBibG9iUGFydHMsIGNvbnN0IFN0cmlu
ZyYgY29udGVudFR5cGUpCiB7Ci0gICAgQVNTRVJUKFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnVz
ZXNOZXR3b3JrUHJvY2VzcygpKTsKLQogICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLm5ldHdv
cmtDb25uZWN0aW9uKCktPmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6TmV0d29ya0Nvbm5l
Y3Rpb25Ub1dlYlByb2Nlc3M6OlJlZ2lzdGVyQmxvYlVSTCh1cmwsIGJsb2JQYXJ0cywgY29udGVu
dFR5cGUpLCAwKTsKIH0KIAogdm9pZCBCbG9iUmVnaXN0cnlQcm94eTo6cmVnaXN0ZXJCbG9iVVJM
KGNvbnN0IFVSTCYgdXJsLCBjb25zdCBVUkwmIHNyY1VSTCkKIHsKLSAgICBBU1NFUlQoV2ViUHJv
Y2Vzczo6c2luZ2xldG9uKCkudXNlc05ldHdvcmtQcm9jZXNzKCkpOwotCiAgICAgV2ViUHJvY2Vz
czo6c2luZ2xldG9uKCkubmV0d29ya0Nvbm5lY3Rpb24oKS0+Y29ubmVjdGlvbigpLT5zZW5kKE1l
c3NhZ2VzOjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6UmVnaXN0ZXJCbG9iVVJMRnJv
bVVSTCh1cmwsIHNyY1VSTCksIDApOwogfQogCiB2b2lkIEJsb2JSZWdpc3RyeVByb3h5Ojp1bnJl
Z2lzdGVyQmxvYlVSTChjb25zdCBVUkwmIHVybCkKIHsKLSAgICBBU1NFUlQoV2ViUHJvY2Vzczo6
c2luZ2xldG9uKCkudXNlc05ldHdvcmtQcm9jZXNzKCkpOwotCiAgICAgV2ViUHJvY2Vzczo6c2lu
Z2xldG9uKCkubmV0d29ya0Nvbm5lY3Rpb24oKS0+Y29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2Vz
OjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6VW5yZWdpc3RlckJsb2JVUkwodXJsKSwg
MCk7CiB9CiAKIHZvaWQgQmxvYlJlZ2lzdHJ5UHJveHk6OnJlZ2lzdGVyQmxvYlVSTEZvclNsaWNl
KGNvbnN0IFVSTCYgdXJsLCBjb25zdCBVUkwmIHNyY1VSTCwgbG9uZyBsb25nIHN0YXJ0LCBsb25n
IGxvbmcgZW5kKQogewotICAgIEFTU0VSVChXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS51c2VzTmV0
d29ya1Byb2Nlc3MoKSk7Ci0KICAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5uZXR3b3JrQ29u
bmVjdGlvbigpLT5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtDb25uZWN0aW9u
VG9XZWJQcm9jZXNzOjpSZWdpc3RlckJsb2JVUkxGb3JTbGljZSh1cmwsIHNyY1VSTCwgc3RhcnQs
IGVuZCksIDApOwogfQogCiB1bnNpZ25lZCBsb25nIGxvbmcgQmxvYlJlZ2lzdHJ5UHJveHk6OmJs
b2JTaXplKGNvbnN0IFVSTCYgdXJsKQogewotICAgIEFTU0VSVChXZWJQcm9jZXNzOjpzaW5nbGV0
b24oKS51c2VzTmV0d29ya1Byb2Nlc3MoKSk7Ci0KICAgICB1aW50NjRfdCByZXN1bHRTaXplOwog
ICAgIGlmICghV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkubmV0d29ya0Nvbm5lY3Rpb24oKS0+Y29u
bmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nl
c3M6OkJsb2JTaXplKHVybCksIE1lc3NhZ2VzOjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vz
czo6QmxvYlNpemU6OlJlcGx5KHJlc3VsdFNpemUpLCAwKSkKICAgICAgICAgcmV0dXJuIDA7Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3Jt
U3RyYXRlZ2llcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuY3BwCShyZXZpc2lvbiAxOTI3NTMp
CisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3Jt
U3RyYXRlZ2llcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwOSwxMDEgKzEwOSw1NCBAQCBQbHVn
aW5TdHJhdGVneSogV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpjCiAKIFN0cmluZyBXZWJQbGF0Zm9y
bVN0cmF0ZWdpZXM6OmNvb2tpZXNGb3JET00oY29uc3QgTmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBz
ZXNzaW9uLCBjb25zdCBVUkwmIGZpcnN0UGFydHksIGNvbnN0IFVSTCYgdXJsKQogewotICAgIGF1
dG8mIHdlYlByb2Nlc3MgPSBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKTsKLSAgICBpZiAod2ViUHJv
Y2Vzcy51c2VzTmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICBTdHJpbmcgcmVzdWx0OwotICAg
ICAgICBpZiAoIXdlYlByb2Nlc3MubmV0d29ya0Nvbm5lY3Rpb24oKS0+Y29ubmVjdGlvbigpLT5z
ZW5kU3luYyhNZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OkNvb2tpZXNG
b3JET00oU2Vzc2lvblRyYWNrZXI6OnNlc3Npb25JRChzZXNzaW9uKSwgZmlyc3RQYXJ0eSwgdXJs
KSwgTWVzc2FnZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpDb29raWVzRm9yRE9N
OjpSZXBseShyZXN1bHQpLCAwKSkKLSAgICAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAgICByZXR1cm4gV2ViQ29yZTo6Y29va2llc0Zv
ckRPTShzZXNzaW9uLCBmaXJzdFBhcnR5LCB1cmwpOworICAgIFN0cmluZyByZXN1bHQ7CisgICAg
aWYgKCFXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5uZXR3b3JrQ29ubmVjdGlvbigpLT5jb25uZWN0
aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6
Q29va2llc0ZvckRPTShTZXNzaW9uVHJhY2tlcjo6c2Vzc2lvbklEKHNlc3Npb24pLCBmaXJzdFBh
cnR5LCB1cmwpLCBNZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OkNvb2tp
ZXNGb3JET006OlJlcGx5KHJlc3VsdCksIDApKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogdm9pZCBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OnNldENv
b2tpZXNGcm9tRE9NKGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgc2Vzc2lvbiwgY29uc3Qg
VVJMJiBmaXJzdFBhcnR5LCBjb25zdCBVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBjb29raWVTdHJp
bmcpCiB7Ci0gICAgYXV0byYgd2ViUHJvY2VzcyA9IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpOwot
ICAgIGlmICh3ZWJQcm9jZXNzLnVzZXNOZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgIHdlYlBy
b2Nlc3MubmV0d29ya0Nvbm5lY3Rpb24oKS0+Y29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpO
ZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6U2V0Q29va2llc0Zyb21ET00oU2Vzc2lvblRy
YWNrZXI6OnNlc3Npb25JRChzZXNzaW9uKSwgZmlyc3RQYXJ0eSwgdXJsLCBjb29raWVTdHJpbmcp
LCAwKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIFdlYkNvcmU6OnNldENvb2tpZXNG
cm9tRE9NKHNlc3Npb24sIGZpcnN0UGFydHksIHVybCwgY29va2llU3RyaW5nKTsKKyAgICBXZWJQ
cm9jZXNzOjpzaW5nbGV0b24oKS5uZXR3b3JrQ29ubmVjdGlvbigpLT5jb25uZWN0aW9uKCktPnNl
bmQoTWVzc2FnZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpTZXRDb29raWVzRnJv
bURPTShTZXNzaW9uVHJhY2tlcjo6c2Vzc2lvbklEKHNlc3Npb24pLCBmaXJzdFBhcnR5LCB1cmws
IGNvb2tpZVN0cmluZyksIDApOwogfQogCiBib29sIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6Y29v
a2llc0VuYWJsZWQoY29uc3QgTmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBzZXNzaW9uLCBjb25zdCBV
UkwmIGZpcnN0UGFydHksIGNvbnN0IFVSTCYgdXJsKQogewotICAgIGF1dG8mIHdlYlByb2Nlc3Mg
PSBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKTsKLSAgICBpZiAod2ViUHJvY2Vzcy51c2VzTmV0d29y
a1Byb2Nlc3MoKSkgewotICAgICAgICBib29sIHJlc3VsdDsKLSAgICAgICAgaWYgKCF3ZWJQcm9j
ZXNzLm5ldHdvcmtDb25uZWN0aW9uKCktPmNvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6
Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpDb29raWVzRW5hYmxlZChTZXNzaW9uVHJh
Y2tlcjo6c2Vzc2lvbklEKHNlc3Npb24pLCBmaXJzdFBhcnR5LCB1cmwpLCBNZXNzYWdlczo6TmV0
d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OkNvb2tpZXNFbmFibGVkOjpSZXBseShyZXN1bHQp
LCAwKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsK
LSAgICB9Ci0KLSAgICByZXR1cm4gV2ViQ29yZTo6Y29va2llc0VuYWJsZWQoc2Vzc2lvbiwgZmly
c3RQYXJ0eSwgdXJsKTsKKyAgICBib29sIHJlc3VsdDsKKyAgICBpZiAoIVdlYlByb2Nlc3M6OnNp
bmdsZXRvbigpLm5ldHdvcmtDb25uZWN0aW9uKCktPmNvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVz
c2FnZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpDb29raWVzRW5hYmxlZChTZXNz
aW9uVHJhY2tlcjo6c2Vzc2lvbklEKHNlc3Npb24pLCBmaXJzdFBhcnR5LCB1cmwpLCBNZXNzYWdl
czo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OkNvb2tpZXNFbmFibGVkOjpSZXBseShy
ZXN1bHQpLCAwKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiByZXN1bHQ7CiB9
CiAKIFN0cmluZyBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVs
ZFZhbHVlKGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgc2Vzc2lvbiwgY29uc3QgVVJMJiBm
aXJzdFBhcnR5LCBjb25zdCBVUkwmIHVybCkKIHsKLSAgICBhdXRvJiB3ZWJQcm9jZXNzID0gV2Vi
UHJvY2Vzczo6c2luZ2xldG9uKCk7Ci0gICAgaWYgKHdlYlByb2Nlc3MudXNlc05ldHdvcmtQcm9j
ZXNzKCkpIHsKLSAgICAgICAgU3RyaW5nIHJlc3VsdDsKLSAgICAgICAgaWYgKCF3ZWJQcm9jZXNz
Lm5ldHdvcmtDb25uZWN0aW9uKCktPmNvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6Ok5l
dHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpDb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1
ZShTZXNzaW9uVHJhY2tlcjo6c2Vzc2lvbklEKHNlc3Npb24pLCBmaXJzdFBhcnR5LCB1cmwpLCBN
ZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OkNvb2tpZVJlcXVlc3RIZWFk
ZXJGaWVsZFZhbHVlOjpSZXBseShyZXN1bHQpLCAwKSkKLSAgICAgICAgICAgIHJldHVybiBTdHJp
bmcoKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAgICByZXR1cm4gV2ViQ29y
ZTo6Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoc2Vzc2lvbiwgZmlyc3RQYXJ0eSwgdXJs
KTsKKyAgICBTdHJpbmcgcmVzdWx0OworICAgIGlmICghV2ViUHJvY2Vzczo6c2luZ2xldG9uKCku
bmV0d29ya0Nvbm5lY3Rpb24oKS0+Y29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6TmV0
d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OkNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVl
KFNlc3Npb25UcmFja2VyOjpzZXNzaW9uSUQoc2Vzc2lvbiksIGZpcnN0UGFydHksIHVybCksIE1l
c3NhZ2VzOjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6Q29va2llUmVxdWVzdEhlYWRl
ckZpZWxkVmFsdWU6OlJlcGx5KHJlc3VsdCksIDApKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7
CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogYm9vbCBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6Omdl
dFJhd0Nvb2tpZXMoY29uc3QgTmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBzZXNzaW9uLCBjb25zdCBV
UkwmIGZpcnN0UGFydHksIGNvbnN0IFVSTCYgdXJsLCBWZWN0b3I8Q29va2llPiYgcmF3Q29va2ll
cykKIHsKLSAgICBhdXRvJiB3ZWJQcm9jZXNzID0gV2ViUHJvY2Vzczo6c2luZ2xldG9uKCk7Ci0g
ICAgaWYgKHdlYlByb2Nlc3MudXNlc05ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgaWYgKCF3
ZWJQcm9jZXNzLm5ldHdvcmtDb25uZWN0aW9uKCktPmNvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVz
c2FnZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpHZXRSYXdDb29raWVzKFNlc3Np
b25UcmFja2VyOjpzZXNzaW9uSUQoc2Vzc2lvbiksIGZpcnN0UGFydHksIHVybCksIE1lc3NhZ2Vz
OjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6R2V0UmF3Q29va2llczo6UmVwbHkocmF3
Q29va2llcyksIDApKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gV2ViQ29yZTo6Z2V0UmF3Q29va2llcyhzZXNzaW9u
LCBmaXJzdFBhcnR5LCB1cmwsIHJhd0Nvb2tpZXMpOworICAgIGlmICghV2ViUHJvY2Vzczo6c2lu
Z2xldG9uKCkubmV0d29ya0Nvbm5lY3Rpb24oKS0+Y29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNz
YWdlczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OkdldFJhd0Nvb2tpZXMoU2Vzc2lv
blRyYWNrZXI6OnNlc3Npb25JRChzZXNzaW9uKSwgZmlyc3RQYXJ0eSwgdXJsKSwgTWVzc2FnZXM6
Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpHZXRSYXdDb29raWVzOjpSZXBseShyYXdD
b29raWVzKSwgMCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0K
IAogdm9pZCBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmRlbGV0ZUNvb2tpZShjb25zdCBOZXR3b3Jr
U3RvcmFnZVNlc3Npb24mIHNlc3Npb24sIGNvbnN0IFVSTCYgdXJsLCBjb25zdCBTdHJpbmcmIGNv
b2tpZU5hbWUpCiB7Ci0gICAgYXV0byYgd2ViUHJvY2VzcyA9IFdlYlByb2Nlc3M6OnNpbmdsZXRv
bigpOwotICAgIGlmICh3ZWJQcm9jZXNzLnVzZXNOZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAg
IHdlYlByb2Nlc3MubmV0d29ya0Nvbm5lY3Rpb24oKS0+Y29ubmVjdGlvbigpLT5zZW5kKE1lc3Nh
Z2VzOjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6RGVsZXRlQ29va2llKFNlc3Npb25U
cmFja2VyOjpzZXNzaW9uSUQoc2Vzc2lvbiksIHVybCwgY29va2llTmFtZSksIDApOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgV2ViQ29yZTo6ZGVsZXRlQ29va2llKHNlc3Npb24sIHVy
bCwgY29va2llTmFtZSk7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkubmV0d29ya0Nvbm5l
Y3Rpb24oKS0+Y29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrQ29ubmVjdGlvblRv
V2ViUHJvY2Vzczo6RGVsZXRlQ29va2llKFNlc3Npb25UcmFja2VyOjpzZXNzaW9uSUQoc2Vzc2lv
biksIHVybCwgY29va2llTmFtZSksIDApOwogfQogCiAvLyBMb2FkZXJTdHJhdGVneQogCiBSZXNv
dXJjZUxvYWRTY2hlZHVsZXIqIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6cmVzb3VyY2VMb2FkU2No
ZWR1bGVyKCkKIHsKLSAgICBzdGF0aWMgUmVzb3VyY2VMb2FkU2NoZWR1bGVyKiBzY2hlZHVsZXI7
Ci0gICAgaWYgKCFzY2hlZHVsZXIpIHsKLSAgICAgICAgYXV0byYgd2ViUHJvY2VzcyA9IFdlYlBy
b2Nlc3M6OnNpbmdsZXRvbigpOwotICAgICAgICBpZiAod2ViUHJvY2Vzcy51c2VzTmV0d29ya1By
b2Nlc3MoKSkKLSAgICAgICAgICAgIHNjaGVkdWxlciA9ICZ3ZWJQcm9jZXNzLndlYlJlc291cmNl
TG9hZFNjaGVkdWxlcigpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzY2hlZHVsZXIgPSBX
ZWJDb3JlOjpyZXNvdXJjZUxvYWRTY2hlZHVsZXIoKTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJu
IHNjaGVkdWxlcjsKKyAgICByZXR1cm4gJldlYlByb2Nlc3M6OnNpbmdsZXRvbigpLndlYlJlc291
cmNlTG9hZFNjaGVkdWxlcigpOwogfQogCiB2b2lkIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6bG9h
ZFJlc291cmNlU3luY2hyb25vdXNseShOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCwgdW5zaWdu
ZWQgbG9uZyByZXNvdXJjZUxvYWRJZGVudGlmaWVyLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJl
cXVlc3QsIFN0b3JlZENyZWRlbnRpYWxzIHN0b3JlZENyZWRlbnRpYWxzLCBDbGllbnRDcmVkZW50
aWFsUG9saWN5IGNsaWVudENyZWRlbnRpYWxQb2xpY3ksIFJlc291cmNlRXJyb3ImIGVycm9yLCBS
ZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwgVmVjdG9yPGNoYXI+JiBkYXRhKQogewotICAgIGF1
dG8mIHdlYlByb2Nlc3MgPSBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKTsKLSAgICBpZiAoIXdlYlBy
b2Nlc3MudXNlc05ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgTG9hZGVyU3RyYXRlZ3k6Omxv
YWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoY29udGV4dCwgcmVzb3VyY2VMb2FkSWRlbnRpZmllciwg
cmVxdWVzdCwgc3RvcmVkQ3JlZGVudGlhbHMsIGNsaWVudENyZWRlbnRpYWxQb2xpY3ksIGVycm9y
LCByZXNwb25zZSwgZGF0YSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBXZWJGcmFt
ZU5ldHdvcmtpbmdDb250ZXh0KiB3ZWJDb250ZXh0ID0gc3RhdGljX2Nhc3Q8V2ViRnJhbWVOZXR3
b3JraW5nQ29udGV4dCo+KGNvbnRleHQpOwogICAgIC8vIEZJWE1FOiBTb21lIGVudGl0aWVzIGlu
IFdlYkNvcmUgdXNlIFdlYkNvcmUncyAiRW1wdHlGcmFtZUxvYWRlckNsaWVudCIgaW5zdGVhZCBv
ZiBoYXZpbmcgYSBwcm9wZXIgV2ViRnJhbWVMb2FkZXJDbGllbnQuCiAgICAgLy8gRW1wdHlGcmFt
ZUxvYWRlckNsaWVudCBzaG91bGRuJ3QgZXhpc3QgYW5kIGV2ZXJ5dGhpbmcgc2hvdWxkIGJlIHVz
aW5nIGEgV2ViRnJhbWVMb2FkZXJDbGllbnQsCkBAIC0yMjcsNyArMTgwLDcgQEAgdm9pZCBXZWJQ
bGF0Zm9ybVN0cmF0ZWdpZXM6OmxvYWRSZXNvdXJjZQogCiAgICAgSGFuZ0RldGVjdGlvbkRpc2Fi
bGVyIGhhbmdEZXRlY3Rpb25EaXNhYmxlcjsKIAotICAgIGlmICghd2ViUHJvY2Vzcy5uZXR3b3Jr
Q29ubmVjdGlvbigpLT5jb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpOZXR3b3JrQ29u
bmVjdGlvblRvV2ViUHJvY2Vzczo6UGVyZm9ybVN5bmNocm9ub3VzTG9hZChsb2FkUGFyYW1ldGVy
cyksIE1lc3NhZ2VzOjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6UGVyZm9ybVN5bmNo
cm9ub3VzTG9hZDo6UmVwbHkoZXJyb3IsIHJlc3BvbnNlLCBkYXRhKSwgMCkpIHsKKyAgICBpZiAo
IVdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLm5ldHdvcmtDb25uZWN0aW9uKCktPmNvbm5lY3Rpb24o
KS0+c2VuZFN5bmMoTWVzc2FnZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpQZXJm
b3JtU3luY2hyb25vdXNMb2FkKGxvYWRQYXJhbWV0ZXJzKSwgTWVzc2FnZXM6Ok5ldHdvcmtDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzOjpQZXJmb3JtU3luY2hyb25vdXNMb2FkOjpSZXBseShlcnJvciwg
cmVzcG9uc2UsIGRhdGEpLCAwKSkgewogICAgICAgICByZXNwb25zZSA9IFJlc291cmNlUmVzcG9u
c2UoKTsKICAgICAgICAgZXJyb3IgPSBpbnRlcm5hbEVycm9yKHJlcXVlc3QudXJsKCkpOwogICAg
IH0KQEAgLTI0MCwxMiArMTkzLDYgQEAgdm9pZCBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmNyZWF0
ZVBpbmdIYQogICAgIGlmICghbmV0d29ya2luZ0NvbnRleHQpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIGF1dG8mIHdlYlByb2Nlc3MgPSBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKTsKLSAgICBpZiAo
IXdlYlByb2Nlc3MudXNlc05ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgTG9hZGVyU3RyYXRl
Z3k6OmNyZWF0ZVBpbmdIYW5kbGUobmV0d29ya2luZ0NvbnRleHQsIHJlcXVlc3QsIHNob3VsZFVz
ZUNyZWRlbnRpYWxTdG9yYWdlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIFdlYkZy
YW1lTmV0d29ya2luZ0NvbnRleHQqIHdlYkNvbnRleHQgPSBzdGF0aWNfY2FzdDxXZWJGcmFtZU5l
dHdvcmtpbmdDb250ZXh0Kj4obmV0d29ya2luZ0NvbnRleHQpOwogICAgIFdlYkZyYW1lTG9hZGVy
Q2xpZW50KiB3ZWJGcmFtZUxvYWRlckNsaWVudCA9IHdlYkNvbnRleHQtPndlYkZyYW1lTG9hZGVy
Q2xpZW50KCk7CiAgICAgV2ViRnJhbWUqIHdlYkZyYW1lID0gd2ViRnJhbWVMb2FkZXJDbGllbnQg
PyB3ZWJGcmFtZUxvYWRlckNsaWVudC0+d2ViRnJhbWUoKSA6IG51bGxwdHI7CkBAIC0yNTcsMTQg
KzIwNCwxMiBAQCB2b2lkIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6Y3JlYXRlUGluZ0hhCiAgICAg
bG9hZFBhcmFtZXRlcnMuYWxsb3dTdG9yZWRDcmVkZW50aWFscyA9IHNob3VsZFVzZUNyZWRlbnRp
YWxTdG9yYWdlID8gQWxsb3dTdG9yZWRDcmVkZW50aWFscyA6IERvTm90QWxsb3dTdG9yZWRDcmVk
ZW50aWFsczsKICAgICBsb2FkUGFyYW1ldGVycy5zaG91bGRDbGVhclJlZmVycmVyT25IVFRQU1Rv
SFRUUFJlZGlyZWN0ID0gbmV0d29ya2luZ0NvbnRleHQtPnNob3VsZENsZWFyUmVmZXJyZXJPbkhU
VFBTVG9IVFRQUmVkaXJlY3QoKTsKIAotICAgIHdlYlByb2Nlc3MubmV0d29ya0Nvbm5lY3Rpb24o
KS0+Y29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJv
Y2Vzczo6TG9hZFBpbmcobG9hZFBhcmFtZXRlcnMpLCAwKTsKKyAgICBXZWJQcm9jZXNzOjpzaW5n
bGV0b24oKS5uZXR3b3JrQ29ubmVjdGlvbigpLT5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6
Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpMb2FkUGluZyhsb2FkUGFyYW1ldGVycyks
IDApOwogfQogCiBCbG9iUmVnaXN0cnkqIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6Y3JlYXRlQmxv
YlJlZ2lzdHJ5KCkKIHsKLSAgICBpZiAoIVdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnVzZXNOZXR3
b3JrUHJvY2VzcygpKQotICAgICAgICByZXR1cm4gTG9hZGVyU3RyYXRlZ3k6OmNyZWF0ZUJsb2JS
ZWdpc3RyeSgpOwotICAgIHJldHVybiBuZXcgQmxvYlJlZ2lzdHJ5UHJveHk7ICAgIAorICAgIHJl
dHVybiBuZXcgQmxvYlJlZ2lzdHJ5UHJveHk7CiB9CiAKIC8vIFBsdWdpblN0cmF0ZWd5CkluZGV4
OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJGcmFtZS5jcHAJKHJl
dmlzaW9uIDE5Mjc1MykKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJG
cmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1NCwyMSArMjU0LDggQEAgdm9pZCBXZWJGcmFt
ZTo6c3RhcnREb3dubG9hZChjb25zdCBXZWJDbwogICAgIG1fcG9saWN5RG93bmxvYWRJRCA9IDA7
CiAKICAgICBhdXRvJiB3ZWJQcm9jZXNzID0gV2ViUHJvY2Vzczo6c2luZ2xldG9uKCk7Ci0jaWYg
VVNFKE5FVFdPUktfU0VTU0lPTikKLSAgICBBU1NFUlQod2ViUHJvY2Vzcy51c2VzTmV0d29ya1By
b2Nlc3MoKSk7Ci0jZW5kaWYKICAgICBTZXNzaW9uSUQgc2Vzc2lvbklEID0gcGFnZSgpID8gcGFn
ZSgpLT5zZXNzaW9uSUQoKSA6IFNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpOwotICAgIGlm
ICh3ZWJQcm9jZXNzLnVzZXNOZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgIHdlYlByb2Nlc3Mu
bmV0d29ya0Nvbm5lY3Rpb24oKS0+Y29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3Jr
Q29ubmVjdGlvblRvV2ViUHJvY2Vzczo6U3RhcnREb3dubG9hZChzZXNzaW9uSUQsIHBvbGljeURv
d25sb2FkSUQsIHJlcXVlc3QpLCAwKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotI2lmIFVT
RShORVRXT1JLX1NFU1NJT04pCi0gICAgLy8gVXNpbmcgTkVUV09SS19TRVNTSU9OIHJlcXVpcmVz
IHRoZSB1c2Ugb2YgYSBuZXR3b3JrIHByb2Nlc3MuCi0gICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKLSNlbHNlCi0gICAgd2ViUHJvY2Vzcy5kb3dubG9hZE1hbmFnZXIoKS5zdGFydERv
d25sb2FkKHNlc3Npb25JRCwgcG9saWN5RG93bmxvYWRJRCwgcmVxdWVzdCk7Ci0jZW5kaWYKKyAg
ICB3ZWJQcm9jZXNzLm5ldHdvcmtDb25uZWN0aW9uKCktPmNvbm5lY3Rpb24oKS0+c2VuZChNZXNz
YWdlczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OlN0YXJ0RG93bmxvYWQoc2Vzc2lv
bklELCBwb2xpY3lEb3dubG9hZElELCByZXF1ZXN0KSwgMCk7CiB9CiAKIHZvaWQgV2ViRnJhbWU6
OmNvbnZlcnRNYWluUmVzb3VyY2VMb2FkVG9Eb3dubG9hZChEb2N1bWVudExvYWRlciogZG9jdW1l
bnRMb2FkZXIsIFNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVx
dWVzdCwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCkBAIC0yODEsMzcgKzI2OCwx
NiBAQCB2b2lkIFdlYkZyYW1lOjpjb252ZXJ0TWFpblJlc291cmNlTG9hZFRvCiAgICAgU3VicmVz
b3VyY2VMb2FkZXIqIG1haW5SZXNvdXJjZUxvYWRlciA9IGRvY3VtZW50TG9hZGVyLT5tYWluUmVz
b3VyY2VMb2FkZXIoKTsKIAogICAgIGF1dG8mIHdlYlByb2Nlc3MgPSBXZWJQcm9jZXNzOjpzaW5n
bGV0b24oKTsKLSNpZiBVU0UoTkVUV09SS19TRVNTSU9OKQotICAgIEFTU0VSVCh3ZWJQcm9jZXNz
LnVzZXNOZXR3b3JrUHJvY2VzcygpKTsKLSNlbmRpZgotICAgIGlmICh3ZWJQcm9jZXNzLnVzZXNO
ZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgIC8vIFVzZSAwIHRvIGluZGljYXRlIHRoYXQgdGhl
IHJlc291cmNlIGxvYWQgY2FuJ3QgYmUgY29udmVydGVkIGFuZCBhIG5ldyBkb3dubG9hZCBtdXN0
IGJlIHN0YXJ0ZWQuCi0gICAgICAgIC8vIFRoaXMgY2FuIGhhcHBlbiBpZiB0aGVyZSBpcyBubyBs
b2FkZXIgYmVjYXVzZSB0aGUgbWFpbiByZXNvdXJjZSBpcyBpbiB0aGUgV2ViQ29yZSBtZW1vcnkg
Y2FjaGUsCi0gICAgICAgIC8vIG9yIGJlY2F1c2UgdGhlIGNvbnZlcnNpb24gd2FzIGF0dGVtcHRl
ZCB3aGVuIG5vdCBjYWxsaW5nIFN1YnJlc291cmNlTG9hZGVyOjpkaWRSZWNlaXZlUmVzcG9uc2Uo
KS4KLSAgICAgICAgdWludDY0X3QgbWFpblJlc291cmNlTG9hZElkZW50aWZpZXI7Ci0gICAgICAg
IGlmIChtYWluUmVzb3VyY2VMb2FkZXIpCi0gICAgICAgICAgICBtYWluUmVzb3VyY2VMb2FkSWRl
bnRpZmllciA9IG1haW5SZXNvdXJjZUxvYWRlci0+aWRlbnRpZmllcigpOwotICAgICAgICBlbHNl
Ci0gICAgICAgICAgICBtYWluUmVzb3VyY2VMb2FkSWRlbnRpZmllciA9IDA7Ci0KLSAgICAgICAg
d2ViUHJvY2Vzcy5uZXR3b3JrQ29ubmVjdGlvbigpLT5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2Fn
ZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpDb252ZXJ0TWFpblJlc291cmNlTG9h
ZFRvRG93bmxvYWQoc2Vzc2lvbklELCBtYWluUmVzb3VyY2VMb2FkSWRlbnRpZmllciwgcG9saWN5
RG93bmxvYWRJRCwgcmVxdWVzdCwgcmVzcG9uc2UpLCAwKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KKyAgICAvLyBVc2UgMCB0byBpbmRpY2F0ZSB0aGF0IHRoZSByZXNvdXJjZSBsb2FkIGNhbid0
IGJlIGNvbnZlcnRlZCBhbmQgYSBuZXcgZG93bmxvYWQgbXVzdCBiZSBzdGFydGVkLgorICAgIC8v
IFRoaXMgY2FuIGhhcHBlbiBpZiB0aGVyZSBpcyBubyBsb2FkZXIgYmVjYXVzZSB0aGUgbWFpbiBy
ZXNvdXJjZSBpcyBpbiB0aGUgV2ViQ29yZSBtZW1vcnkgY2FjaGUsCisgICAgLy8gb3IgYmVjYXVz
ZSB0aGUgY29udmVyc2lvbiB3YXMgYXR0ZW1wdGVkIHdoZW4gbm90IGNhbGxpbmcgU3VicmVzb3Vy
Y2VMb2FkZXI6OmRpZFJlY2VpdmVSZXNwb25zZSgpLgorICAgIHVpbnQ2NF90IG1haW5SZXNvdXJj
ZUxvYWRJZGVudGlmaWVyOworICAgIGlmIChtYWluUmVzb3VyY2VMb2FkZXIpCisgICAgICAgIG1h
aW5SZXNvdXJjZUxvYWRJZGVudGlmaWVyID0gbWFpblJlc291cmNlTG9hZGVyLT5pZGVudGlmaWVy
KCk7CisgICAgZWxzZQorICAgICAgICBtYWluUmVzb3VyY2VMb2FkSWRlbnRpZmllciA9IDA7CiAK
LSAgICBpZiAoIW1haW5SZXNvdXJjZUxvYWRlcikgewotICAgICAgICAvLyBUaGUgbWFpbiByZXNv
dXJjZSBoYXMgYWxyZWFkeSBiZWVuIGxvYWRlZC4gU3RhcnQgYSBuZXcgZG93bmxvYWQgaW5zdGVh
ZC4KLSNpZiAhVVNFKE5FVFdPUktfU0VTU0lPTikKLSAgICAgICAgd2ViUHJvY2Vzcy5kb3dubG9h
ZE1hbmFnZXIoKS5zdGFydERvd25sb2FkKHNlc3Npb25JRCwgcG9saWN5RG93bmxvYWRJRCwgcmVx
dWVzdCk7Ci0jZW5kaWYKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotI2lmIFVTRShORVRXT1JL
X1NFU1NJT04pCi0gICAgLy8gVXNpbmcgTkVUV09SS19TRVNTSU9OIHJlcXVpcmVzIHRoZSB1c2Ug
b2YgYSBuZXR3b3JrIHByb2Nlc3MuCi0gICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
LSNlbHNlCi0gICAgd2ViUHJvY2Vzcy5kb3dubG9hZE1hbmFnZXIoKS5jb252ZXJ0SGFuZGxlVG9E
b3dubG9hZChwb2xpY3lEb3dubG9hZElELCBkb2N1bWVudExvYWRlci0+bWFpblJlc291cmNlTG9h
ZGVyKCktPmhhbmRsZSgpLCByZXF1ZXN0LCByZXNwb25zZSk7Ci0jZW5kaWYKKyAgICB3ZWJQcm9j
ZXNzLm5ldHdvcmtDb25uZWN0aW9uKCktPmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6TmV0
d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OkNvbnZlcnRNYWluUmVzb3VyY2VMb2FkVG9Eb3du
bG9hZChzZXNzaW9uSUQsIG1haW5SZXNvdXJjZUxvYWRJZGVudGlmaWVyLCBwb2xpY3lEb3dubG9h
ZElELCByZXF1ZXN0LCByZXNwb25zZSksIDApOwogfQogCiBTdHJpbmcgV2ViRnJhbWU6OnNvdXJj
ZSgpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL3NvdXAvV2ViUHJvY2Vz
c1NvdXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mvc291cC9X
ZWJQcm9jZXNzU291cC5jcHAJKHJldmlzaW9uIDE5Mjc1MykKKysrIFNvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3Mvc291cC9XZWJQcm9jZXNzU291cC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDE4
ICs0OSw2IEBACiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1zdGF0aWMgdWludDY0X3QgZ2V0Q2Fj
aGVEaXNrRnJlZVNpemUoU291cENhY2hlKiBjYWNoZSkKLXsKLSAgICBBU1NFUlQoY2FjaGUpOwot
Ci0gICAgR1VuaXF1ZU91dFB0cjxjaGFyPiBjYWNoZURpcjsKLSAgICBnX29iamVjdF9nZXQoR19P
QkpFQ1QoY2FjaGUpLCAiY2FjaGUtZGlyIiwgJmNhY2hlRGlyLm91dFB0cigpLCBOVUxMKTsKLSAg
ICBpZiAoIWNhY2hlRGlyKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiBXZWJDb3Jl
OjpnZXRWb2x1bWVGcmVlU2l6ZUZvclBhdGgoY2FjaGVEaXIuZ2V0KCkpOwotfQotCiB2b2lkIFdl
YlByb2Nlc3M6OnBsYXRmb3JtU2V0Q2FjaGVNb2RlbChDYWNoZU1vZGVsIGNhY2hlTW9kZWwpCiB7
CiAgICAgdW5zaWduZWQgY2FjaGVUb3RhbENhcGFjaXR5ID0gMDsKQEAgLTc1LDExICs2Myw2IEBA
IHZvaWQgV2ViUHJvY2Vzczo6cGxhdGZvcm1TZXRDYWNoZU1vZGVsKEMKICAgICB1aW50NjRfdCBk
aXNrRnJlZVNpemUgPSAwOwogICAgIFNvdXBDYWNoZSogY2FjaGUgPSBudWxscHRyOwogCi0gICAg
aWYgKCF1c2VzTmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICBjYWNoZSA9IFdlYkNvcmU6OlNv
dXBOZXR3b3JrU2Vzc2lvbjo6ZGVmYXVsdFNlc3Npb24oKS5jYWNoZSgpOwotICAgICAgICBkaXNr
RnJlZVNpemUgPSBnZXRDYWNoZURpc2tGcmVlU2l6ZShjYWNoZSkgLyBXVEY6Ok1COwotICAgIH0K
LQogICAgIHVpbnQ2NF90IG1lbVNpemUgPSBXVEY6OnJhbVNpemUoKSAvIFdURjo6TUI7CiAgICAg
Y2FsY3VsYXRlQ2FjaGVTaXplcyhjYWNoZU1vZGVsLCBtZW1TaXplLCBkaXNrRnJlZVNpemUsCiAg
ICAgICAgICAgICAgICAgICAgICAgICBjYWNoZVRvdGFsQ2FwYWNpdHksIGNhY2hlTWluRGVhZENh
cGFjaXR5LCBjYWNoZU1heERlYWRDYXBhY2l0eSwgZGVhZERlY29kZWREYXRhRGVsZXRpb25JbnRl
cnZhbCwKQEAgLTk0LDIzICs3NywxMCBAQCB2b2lkIFdlYlByb2Nlc3M6OnBsYXRmb3JtU2V0Q2Fj
aGVNb2RlbChDCiAjaWYgUExBVEZPUk0oR1RLKQogICAgIFdlYkNvcmU6OlBhZ2VDYWNoZTo6c2lu
Z2xldG9uKCkuc2V0U2hvdWxkQ2xlYXJCYWNraW5nU3RvcmVzKHRydWUpOwogI2VuZGlmCi0KLSAg
ICBpZiAoIXVzZXNOZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgIGlmICh1cmxDYWNoZURpc2tD
YXBhY2l0eSA+IHNvdXBfY2FjaGVfZ2V0X21heF9zaXplKGNhY2hlKSkKLSAgICAgICAgICAgIHNv
dXBfY2FjaGVfc2V0X21heF9zaXplKGNhY2hlLCB1cmxDYWNoZURpc2tDYXBhY2l0eSk7Ci0gICAg
fQogfQogCiB2b2lkIFdlYlByb2Nlc3M6OnBsYXRmb3JtQ2xlYXJSZXNvdXJjZUNhY2hlcyhSZXNv
dXJjZUNhY2hlc1RvQ2xlYXIgY2FjaGVzVG9DbGVhcikKIHsKLSAgICBpZiAoY2FjaGVzVG9DbGVh
ciA9PSBJbk1lbW9yeVJlc291cmNlQ2FjaGVzT25seSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
Ly8gSWYgd2UncmUgdXNpbmcgdGhlIG5ldHdvcmsgcHJvY2VzcyB0aGVuIGl0IGlzIHRoZSBvbmx5
IG9uZSB0aGF0IG5lZWRzIHRvIGNsZWFyIHRoZSBkaXNrIGNhY2hlLgotICAgIGlmICh1c2VzTmV0
d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgc291cF9jYWNoZV9jbGVhcihX
ZWJDb3JlOjpTb3VwTmV0d29ya1Nlc3Npb246OmRlZmF1bHRTZXNzaW9uKCkuY2FjaGUoKSk7CiB9
CiAKIHN0YXRpYyB2b2lkIHNldFNvdXBTZXNzaW9uQWNjZXB0TGFuZ3VhZ2UoY29uc3QgVmVjdG9y
PFN0cmluZz4mIGxhbmd1YWdlcykKQEAgLTEzNSw2MiArMTA1LDEwIEBAIHZvaWQgV2ViUHJvY2Vz
czo6cGxhdGZvcm1Jbml0aWFsaXplV2ViUHIKICAgICAgICAgc2VjY29tcEZpbHRlcnMuaW5pdGlh
bGl6ZSgpOwogICAgIH0KICNlbmRpZgotCi0gICAgaWYgKHVzZXNOZXR3b3JrUHJvY2VzcygpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQoIXBhcmFtZXRlcnMuZGlza0NhY2hlRGlyZWN0
b3J5LmlzRW1wdHkoKSk7Ci0KLSAgICAvLyBXZSB1c2VkIHRvIHVzZSB0aGUgZ2l2ZW4gY2FjaGUg
ZGlyZWN0b3J5IGZvciB0aGUgc291cCBjYWNoZSwgYnV0IG5vdyB3ZSB1c2UgYSBzdWJkaXJlY3Rv
cnkgdG8gYXZvaWQKLSAgICAvLyBjb25mbGljdHMgd2l0aCBvdGhlciBjYWNoZSBmaWxlcyBpbiB0
aGUgc2FtZSBkaXJlY3RvcnkuIFJlbW92ZSB0aGUgb2xkIGNhY2hlIGZpbGVzIGlmIHRoZXkgc3Rp
bGwgZXhpc3QuCi0gICAgV2ViQ29yZTo6U291cE5ldHdvcmtTZXNzaW9uOjpkZWZhdWx0U2Vzc2lv
bigpLmNsZWFyQ2FjaGUoV2ViQ29yZTo6ZGlyZWN0b3J5TmFtZShwYXJhbWV0ZXJzLmRpc2tDYWNo
ZURpcmVjdG9yeSkpOwotCi0jaWYgRU5BQkxFKE5FVFdPUktfQ0FDSEUpCi0gICAgLy8gV2hlbiBu
ZXR3b3JrIGNhY2hlIGlzIGVuYWJsZWQsIHRoZSBkaXNrIGNhY2hlIGRpcmVjdG9yeSBpcyB0aGUg
bmV0d29yayBwcm9jZXNzIG9uZS4KLSAgICBDU3RyaW5nIGRpc2tDYWNoZVBhdGggPSBXZWJDb3Jl
OjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQoV2ViQ29yZTo6ZGlyZWN0b3J5TmFtZShwYXJhbWV0
ZXJzLmRpc2tDYWNoZURpcmVjdG9yeSksICJ3ZWJraXQiKS51dGY4KCk7Ci0jZWxzZQotICAgIENT
dHJpbmcgZGlza0NhY2hlUGF0aCA9IHBhcmFtZXRlcnMuZGlza0NhY2hlRGlyZWN0b3J5LnV0Zjgo
KTsKLSNlbmRpZgotCi0gICAgR1JlZlB0cjxTb3VwQ2FjaGU+IHNvdXBDYWNoZSA9IGFkb3B0R1Jl
Zihzb3VwX2NhY2hlX25ldyhkaXNrQ2FjaGVQYXRoLmRhdGEoKSwgU09VUF9DQUNIRV9TSU5HTEVf
VVNFUikpOwotICAgIFdlYkNvcmU6OlNvdXBOZXR3b3JrU2Vzc2lvbjo6ZGVmYXVsdFNlc3Npb24o
KS5zZXRDYWNoZShzb3VwQ2FjaGUuZ2V0KCkpOwotICAgIC8vIFNldCBhbiBpbml0aWFsIGh1Z2Ug
bWF4X3NpemUgZm9yIHRoZSBTb3VwQ2FjaGUgc28gdGhlIGNhbGwgdG8gc291cF9jYWNoZV9sb2Fk
KCkgd29uJ3QgZXZpY3QgYW55IGNhY2hlZAotICAgIC8vIHJlc291cmNlLiBUaGUgZmluYWwgc2l6
ZSBvZiB0aGUgY2FjaGUgd2lsbCBiZSBzZXQgYnkgTmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtU2V0
Q2FjaGVNb2RlbCgpLgotICAgIHVuc2lnbmVkIGluaXRpYWxNYXhTaXplID0gc291cF9jYWNoZV9n
ZXRfbWF4X3NpemUoc291cENhY2hlLmdldCgpKTsKLSAgICBzb3VwX2NhY2hlX3NldF9tYXhfc2l6
ZShzb3VwQ2FjaGUuZ2V0KCksIEdfTUFYVUlOVCk7Ci0gICAgc291cF9jYWNoZV9sb2FkKHNvdXBD
YWNoZS5nZXQoKSk7Ci0gICAgc291cF9jYWNoZV9zZXRfbWF4X3NpemUoc291cENhY2hlLmdldCgp
LCBpbml0aWFsTWF4U2l6ZSk7Ci0KLSAgICBpZiAoIXBhcmFtZXRlcnMuY29va2llUGVyc2lzdGVu
dFN0b3JhZ2VQYXRoLmlzRW1wdHkoKSkgewotICAgICAgICBzdXBwbGVtZW50PFdlYkNvb2tpZU1h
bmFnZXI+KCktPnNldENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlKHBhcmFtZXRlcnMuY29va2llUGVy
c2lzdGVudFN0b3JhZ2VQYXRoLAotICAgICAgICAgICAgcGFyYW1ldGVycy5jb29raWVQZXJzaXN0
ZW50U3RvcmFnZVR5cGUpOwotICAgIH0KLSAgICBzdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXI+
KCktPnNldEhUVFBDb29raWVBY2NlcHRQb2xpY3kocGFyYW1ldGVycy5jb29raWVBY2NlcHRQb2xp
Y3kpOwotCi0gICAgaWYgKCFwYXJhbWV0ZXJzLmxhbmd1YWdlcy5pc0VtcHR5KCkpCi0gICAgICAg
IHNldFNvdXBTZXNzaW9uQWNjZXB0TGFuZ3VhZ2UocGFyYW1ldGVycy5sYW5ndWFnZXMpOwotCi0g
ICAgc2V0SWdub3JlVExTRXJyb3JzKHBhcmFtZXRlcnMuaWdub3JlVExTRXJyb3JzKTsKLQotICAg
IFdlYkNvcmU6OmFkZExhbmd1YWdlQ2hhbmdlT2JzZXJ2ZXIodGhpcywgbGFuZ3VhZ2VDaGFuZ2Vk
KTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzOjpwbGF0Zm9ybVRlcm1pbmF0ZSgpCiB7Ci0gICAgaWYg
KCF1c2VzTmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgV2ViQ29yZTo6cmVtb3ZlTGFuZ3VhZ2VD
aGFuZ2VPYnNlcnZlcih0aGlzKTsKLX0KLQotdm9pZCBXZWJQcm9jZXNzOjpzZXRJZ25vcmVUTFNF
cnJvcnMoYm9vbCBpZ25vcmVUTFNFcnJvcnMpCi17Ci0gICAgQVNTRVJUKCF1c2VzTmV0d29ya1By
b2Nlc3MoKSk7Ci0gICAgV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OnNldElnbm9yZVNTTEVycm9y
cyhpZ25vcmVUTFNFcnJvcnMpOwotfQotCi12b2lkIFdlYlByb2Nlc3M6OmFsbG93U3BlY2lmaWNI
VFRQU0NlcnRpZmljYXRlRm9ySG9zdChjb25zdCBXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8mIGNl
cnRpZmljYXRlSW5mbywgY29uc3QgU3RyaW5nJiBob3N0KQotewotICAgIEFTU0VSVCghdXNlc05l
dHdvcmtQcm9jZXNzKCkpOwotICAgIFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpzZXRDbGllbnRD
ZXJ0aWZpY2F0ZShob3N0LCBjZXJ0aWZpY2F0ZUluZm8uY2VydGlmaWNhdGUoKSk7CiB9CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gMTkyNzU4KQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTUtMTEtMjMgIEFsZXggQ2hyaXN0ZW5z
ZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KKworICAgICAgICBNYWtlIHVzZXNOZXR3b3Jr
UHJvY2VzcyBhbHdheXMgdHJ1ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTUxNTgwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDIvR2VvbG9jYXRpb24uY3Bw
OgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6CisgICAgICAgICogVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXQyL21hYy9HZXRQSURBZnRlckFib3J0ZWRQcm9jZXNzTGF1bmNoLmNwcDoK
KyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1QpOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5u
ZXIvVGVzdENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6Z2Vu
ZXJhdGVQYWdlQ29uZmlndXJhdGlvbik6CisKIDIwMTUtMTEtMjMgIEFsZXggQ2hyaXN0ZW5zZW4g
IDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBGaXggY3Jhc2ggaW4gfldlYlBy
b2Nlc3NQb29sIHdoZW4gdXNpbmcgR2VvbG9jYXRpb24gd2l0aCB1c2VOZXR3b3JrUHJvY2Vzcz10
cnVlCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDIvR2VvbG9jYXRpb24u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mi9HZW9s
b2NhdGlvbi5jcHAJKHJldmlzaW9uIDE5Mjc1MykKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0Mi9HZW9sb2NhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1MCw3ICsyNTAs
NiBAQCBzdHJ1Y3QgR2VvbG9jYXRpb25UcmFuc2l0aW9uVG9IaWdoQWNjdXJhCiBURVNUKFdlYktp
dDIsIEdlb2xvY2F0aW9uVHJhbnNpdGlvblRvSGlnaEFjY3VyYWN5KQogewogICAgIFdLUmV0YWlu
UHRyPFdLQ29udGV4dFJlZj4gY29udGV4dChBZG9wdFdLLCBXS0NvbnRleHRDcmVhdGUoKSk7Ci0g
ICAgV0tDb250ZXh0U2V0VXNlc05ldHdvcmtQcm9jZXNzKGNvbnRleHQuZ2V0KCksIHRydWUpOwog
CiAgICAgR2VvbG9jYXRpb25UcmFuc2l0aW9uVG9IaWdoQWNjdXJhY3lTdGF0ZVRyYWNrZXIgc3Rh
dGVUcmFja2VyOwogICAgIHNldHVwR2VvbG9jYXRpb25Qcm92aWRlcihjb250ZXh0LmdldCgpLCAm
c3RhdGVUcmFja2VyKTsKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mi9t
YWMvR2V0UElEQWZ0ZXJBYm9ydGVkUHJvY2Vzc0xhdW5jaC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyL21hYy9HZXRQSURBZnRlckFib3J0ZWRQcm9j
ZXNzTGF1bmNoLmNwcAkocmV2aXNpb24gMTkyNzUzKQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXQyL21hYy9HZXRQSURBZnRlckFib3J0ZWRQcm9jZXNzTGF1bmNoLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDIsNyArNDIsNiBAQCBzdGF0aWMgdm9pZCBkaWRGaW5pc2hMb2FkRm9y
RnJhbWUoV0tQYWdlCiBURVNUKFdlYktpdDIsIEdldFBJREFmdGVyQWJvcnRlZFByb2Nlc3NMYXVu
Y2gpCiB7CiAgICAgV0tSZXRhaW5QdHI8V0tDb250ZXh0UmVmPiBjb250ZXh0KEFkb3B0V0ssIFdL
Q29udGV4dENyZWF0ZSgpKTsKLSAgICBXS0NvbnRleHRTZXRVc2VzTmV0d29ya1Byb2Nlc3MoY29u
dGV4dC5nZXQoKSwgdHJ1ZSk7CiAKICAgICBQbGF0Zm9ybVdlYlZpZXcgd2ViVmlldyhjb250ZXh0
LmdldCgpKTsKIApJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5j
cHAJKHJldmlzaW9uIDE5Mjc1MykKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRy
b2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MDEsNyArNDAxLDYgQEAgV0tSZXRhaW5QdHI8
V0tQYWdlQ29uZmlndXJhdGlvblJlZj4gVGVzdAogICAgIG1fZ2VvbG9jYXRpb25Qcm92aWRlciA9
IHN0ZDo6bWFrZV91bmlxdWU8R2VvbG9jYXRpb25Qcm92aWRlck1vY2s+KG1fY29udGV4dC5nZXQo
KSk7CiAKICNpZiBQTEFURk9STShFRkwpCi0gICAgV0tDb250ZXh0U2V0VXNlc05ldHdvcmtQcm9j
ZXNzKG1fY29udGV4dC5nZXQoKSwgZmFsc2UpOwogICAgIFdLQ29udGV4dFNldFByb2Nlc3NNb2Rl
bChtX2NvbnRleHQuZ2V0KCksIGtXS1Byb2Nlc3NNb2RlbFNoYXJlZFNlY29uZGFyeVByb2Nlc3Mp
OwogI2VuZGlmCiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>266119</attachid>
            <date>2015-11-23 22:13:01 -0800</date>
            <delta_ts>2015-11-24 11:49:46 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-151580-20151123221245.patch</filename>
            <type>text/plain</type>
            <size>75242</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5Mjc1MykKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0MSBAQAorMjAxNS0xMS0yMyAgQWxleCBD
aHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgorCisgICAgICAgIE1ha2UgdXNl
c05ldHdvcmtQcm9jZXNzIGFsd2F5cyB0cnVlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNTE1ODAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL21hYy9SZW1vdGVOZXR3b3JraW5n
Q29udGV4dC5tbToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlTmV0d29ya2luZ0NvbnRleHQ6OmVu
c3VyZVByaXZhdGVCcm93c2luZ1Nlc3Npb24pOgorICAgICAgICAqIFNoYXJlZC9BUEkvYy9XS0Rl
cHJlY2F0ZWRGdW5jdGlvbnMuY3BwOgorICAgICAgICAoV0tJbnNwZWN0b3JUb2dnbGVKYXZhU2Ny
aXB0UHJvZmlsaW5nKToKKyAgICAgICAgKFdLQ29udGV4dFNldFVzZXNOZXR3b3JrUHJvY2Vzcyk6
CisgICAgICAgIChXS0dyYXBoaWNzQ29udGV4dEdldENHQ29udGV4dCk6CisgICAgICAgICogU2hh
cmVkL05ldHdvcmsvQ3VzdG9tUHJvdG9jb2xzL0NvY29hL0N1c3RvbVByb3RvY29sTWFuYWdlckNv
Y29hLm1tOgorICAgICAgICAoV2ViS2l0OjpDdXN0b21Qcm90b2NvbE1hbmFnZXI6OmluaXRpYWxp
emUpOgorICAgICAgICAqIFNoYXJlZC9OZXR3b3JrL0N1c3RvbVByb3RvY29scy9zb3VwL0N1c3Rv
bVByb3RvY29sTWFuYWdlclNvdXAuY3BwOgorICAgICAgICAoV2ViS2l0OjpDdXN0b21Qcm90b2Nv
bE1hbmFnZXI6OmluaXRpYWxpemUpOgorICAgICAgICAqIFNoYXJlZC9XZWJQcm9jZXNzQ3JlYXRp
b25QYXJhbWV0ZXJzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc0NyZWF0aW9uUGFy
YW1ldGVyczo6V2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyk6CisgICAgICAgIChXZWJLaXQ6
OldlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM6OmVuY29kZSk6CisgICAgICAgIChXZWJLaXQ6
OldlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM6OmRlY29kZSk6CisgICAgICAgICogU2hhcmVk
L1dlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L0FQSVByb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5jcHA6CisgICAgICAgIChBUEk6OlByb2Nlc3NQ
b29sQ29uZmlndXJhdGlvbjo6Y3JlYXRlV2l0aExlZ2FjeU9wdGlvbnMpOgorICAgICAgICAoQVBJ
OjpQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb246OmNvcHkpOgorICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvQVBJUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQ
SS9DL1dLQ29udGV4dC5jcHA6CisgICAgICAgIChXS0NvbnRleHRTZXRKYXZhU2NyaXB0R2FyYmFn
ZUNvbGxlY3RvclRpbWVyRW5hYmxlZCk6CisgICAgICAgIChXS0NvbnRleHRVc2VUZXN0aW5nTmV0
d29ya1Nlc3Npb24pOgorICAgICAgICAoV0tDb250ZXh0U2V0VXNlc05ldHdvcmtQcm9jZXNzKTog
RGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0UHJpdmF0ZS5oOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcm9jZXNzR3JvdXAubW06CisgICAgICAg
ICgtW1dLUHJvY2Vzc0dyb3VwIGluaXRXaXRoSW5qZWN0ZWRCdW5kbGVVUkw6XSk6CisgICAgICAg
ICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQuY3BwOgorICAgICAgICAoRXdrQ29udGV4
dDo6c2V0UHJvY2Vzc01vZGVsKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRX
ZWJDb250ZXh0LmNwcDoKKyAgICAgICAgKHdlYmtpdFdlYkNvbnRleHRDb25zdHJ1Y3RlZCk6Cisg
ICAgICAgICh3ZWJraXRfd2ViX2NvbnRleHRfc2V0X3Byb2Nlc3NfbW9kZWwpOgorICAgICAgICAq
IFVJUHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNzUG9vbENvY29hLm1tOgorICAgICAgICAoV2ViS2l0
OjpXZWJQcm9jZXNzUG9vbDo6dXBkYXRlUHJvY2Vzc1N1cHByZXNzaW9uU3RhdGUpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6cGxhdGZvcm1Jbml0aWFsaXplV2ViUHJvY2Vzcyk6
CisgICAgICAgICogVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5LmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6RG93bmxvYWRQcm94eTo6Y2FuY2VsKToKKyAgICAgICAgKFdlYktpdDo6RG93
bmxvYWRQcm94eTo6aW52YWxpZGF0ZSk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYkNvb2tpZU1h
bmFnZXJQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6
c2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeSk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1h
bmFnZXJQcm94eTo6Z2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeSk6CisgICAgICAgICogVUlQcm9j
ZXNzL1dlYlByb2Nlc3NQb29sLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6
OldlYlByb2Nlc3NQb29sKToKKyAgICAgICAgKFdlYktpdDo6bV9wcm9jZXNzU3VwcHJlc3Npb25E
aXNhYmxlZEZvclBhZ2VDb3VudGVyKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6
Om5ldHdvcmtpbmdQcm9jZXNzQ29ubmVjdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nl
c3NQb29sOjpsYW5ndWFnZUNoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9v
bDo6dGV4dENoZWNrZXJTdGF0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNz
UG9vbDo6ZW5zdXJlTmV0d29ya1Byb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNz
UG9vbDo6c2V0QW55UGFnZUdyb3VwTWlnaHRIYXZlUHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpjcmVhdGVOZXdXZWJQcm9jZXNzKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmRvd25sb2FkKToKKyAgICAgICAgKFdlYktp
dDo6V2ViUHJvY2Vzc1Bvb2w6OnJlc3VtZURvd25sb2FkKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UHJvY2Vzc1Bvb2w6OnNldENhbkhhbmRsZUhUVFBTU2VydmVyVHJ1c3RFdmFsdWF0aW9uKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNldENhY2hlTW9kZWwpOgorICAgICAgICAo
V2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6Y3JlYXRlRG93bmxvYWRQcm94eSk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlByb2Nlc3NQb29sOjphZGRNZXNzYWdlUmVjZWl2ZXIpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQcm9jZXNzUG9vbDo6YWxsb3dTcGVjaWZpY0hUVFBTQ2VydGlmaWNhdGVGb3JIb3N0
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNldEhUVFBQaXBlbGluaW5nRW5h
YmxlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpyZXF1ZXN0TmV0d29ya2lu
Z1N0YXRpc3RpY3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2V0VXNlc05l
dHdvcmtQcm9jZXNzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6
OnVzZXNOZXR3b3JrUHJvY2Vzcyk6IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL1dlYlBy
b2Nlc3NQb29sLmg6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZW5kVG9OZXR3
b3JraW5nUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZW5kVG9O
ZXR3b3JraW5nUHJvY2Vzc1JlbGF1bmNoaW5nSWZOZWNlc3NhcnkpOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUHJv
eHk6OnNodXREb3duKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Byb3h5OjpyZW1vdmVX
ZWJQYWdlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Byb3h5OjpjYW5UZXJtaW5hdGVD
aGlsZFByb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUHJveHk6OnVwZGF0ZVRl
eHRDaGVja2VyU3RhdGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUHJveHk6OmRpZFNh
dmVUb1BhZ2VDYWNoZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQcm94eTo6ZGlkU2V0
QXNzZXJ0aW9uU3RhdGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUHJveHk6OmNyZWF0
ZURvd25sb2FkUHJveHkpOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQcm9jZXNz
UHJveHkuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvZ3RrL1dlYlByb2Nlc3NQb29sR3RrLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnBsYXRmb3JtSW5pdGlhbGl6ZVdlYlBy
b2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2V0SWdub3JlVExTRXJy
b3JzKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL0ZpbGVBUEkvQmxvYlJlZ2lzdHJ5UHJveHkuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpCbG9iUmVnaXN0cnlQcm94eTo6cmVnaXN0ZXJGaWxlQmxvYlVS
TCk6CisgICAgICAgIChXZWJLaXQ6OkJsb2JSZWdpc3RyeVByb3h5OjpyZWdpc3RlckJsb2JVUkwp
OgorICAgICAgICAoV2ViS2l0OjpCbG9iUmVnaXN0cnlQcm94eTo6dW5yZWdpc3RlckJsb2JVUkwp
OgorICAgICAgICAoV2ViS2l0OjpCbG9iUmVnaXN0cnlQcm94eTo6cmVnaXN0ZXJCbG9iVVJMRm9y
U2xpY2UpOgorICAgICAgICAoV2ViS2l0OjpCbG9iUmVnaXN0cnlQcm94eTo6YmxvYlNpemUpOgor
ICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVz
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpjb29raWVzRm9y
RE9NKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpzZXRDb29raWVz
RnJvbURPTSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBsYXRmb3JtU3RyYXRlZ2llczo6Y29va2ll
c0VuYWJsZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmNvb2tp
ZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGxhdGZvcm1T
dHJhdGVnaWVzOjpnZXRSYXdDb29raWVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGxhdGZvcm1T
dHJhdGVnaWVzOjpkZWxldGVDb29raWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQbGF0Zm9ybVN0
cmF0ZWdpZXM6OnJlc291cmNlTG9hZFNjaGVkdWxlcik6CisgICAgICAgIChXZWJLaXQ6OldlYlBs
YXRmb3JtU3RyYXRlZ2llczo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseSk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlBsYXRmb3JtU3RyYXRlZ2llczo6Y3JlYXRlUGluZ0hhbmRsZSk6CisgICAgICAg
IChXZWJLaXQ6OldlYlBsYXRmb3JtU3RyYXRlZ2llczo6Y3JlYXRlQmxvYlJlZ2lzdHJ5KToKKyAg
ICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3BwOgorICAgICAgICAoV2ViS2l0
OjpXZWJGcmFtZTo6c3RhcnREb3dubG9hZCk6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lOjpj
b252ZXJ0TWFpblJlc291cmNlTG9hZFRvRG93bmxvYWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJG
cmFtZTo6c291cmNlKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzOjpXZWJQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6
V2ViUHJvY2Vzczo6aW5pdGlhbGl6ZUNvbm5lY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
cm9jZXNzOjppbml0aWFsaXplV2ViUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nl
c3M6OmVuc3VyZU5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbik6CisgICAgICAgIChXZWJLaXQ6Oldl
YlByb2Nlc3M6OmRlc3Ryb3lQcml2YXRlQnJvd3NpbmdTZXNzaW9uKToKKyAgICAgICAgKFdlYktp
dDo6V2ViUHJvY2Vzczo6cGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb25NYW5hZ2VyKToKKyAgICAgICAg
KFdlYktpdDo6V2ViUHJvY2Vzczo6c2hvdWxkVGVybWluYXRlKToKKyAgICAgICAgKFdlYktpdDo6
V2ViUHJvY2Vzczo6c2V0SW5qZWN0ZWRCdW5kbGVQYXJhbWV0ZXJzKToKKyAgICAgICAgKFdlYktp
dDo6V2ViUHJvY2Vzczo6bmV0d29ya0Nvbm5lY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
cm9jZXNzOjpzZXRFbmhhbmNlZEFjY2Vzc2liaWxpdHkpOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
cm9jZXNzOjpwcmVmZXRjaEROUyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3M6OmRpZENy
ZWF0ZURvd25sb2FkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzczo6ZGlk
RGVzdHJveURvd25sb2FkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzczo6
ZG93bmxvYWRQcm94eUNvbm5lY3Rpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJQ
cm9jZXNzOjpkb3dubG9hZHNBdXRoZW50aWNhdGlvbk1hbmFnZXIpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViS2l0OjpXZWJQcm9jZXNzOjpkb3dubG9hZE1hbmFnZXIpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViS2l0OjpXZWJQcm9jZXNzOjp1c2VzTmV0d29ya1Byb2Nlc3MpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzOjpkb3dubG9hZFJlcXVlc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzOjpyZXN1bWVEb3dubG9hZCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJLaXQ6OldlYlByb2Nlc3M6OmNhbmNlbERvd25sb2FkKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBXZWJQcm9jZXNzL1dlYlByb2Nlc3MuaDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vz
czo6dGV4dENoZWNrZXJTdGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3M6OmV2ZW50
RGlzcGF0Y2hlcik6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLm1lc3NhZ2VzLmlu
OgorICAgICAgICAqIFdlYlByb2Nlc3Mvc291cC9XZWJQcm9jZXNzU291cC5jcHA6CisgICAgICAg
IChXZWJLaXQ6OldlYlByb2Nlc3M6OnBsYXRmb3JtU2V0Q2FjaGVNb2RlbCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlByb2Nlc3M6OnBsYXRmb3JtQ2xlYXJSZXNvdXJjZUNhY2hlcyk6CisgICAgICAg
IChXZWJLaXQ6OnNldFNvdXBTZXNzaW9uQWNjZXB0TGFuZ3VhZ2UpOgorICAgICAgICAoV2ViS2l0
OjpXZWJQcm9jZXNzOjpwbGF0Zm9ybUluaXRpYWxpemVXZWJQcm9jZXNzKToKKyAgICAgICAgKFdl
YktpdDo6V2ViUHJvY2Vzczo6cGxhdGZvcm1UZXJtaW5hdGUpOgorICAgICAgICAoV2ViS2l0Ojpn
ZXRDYWNoZURpc2tGcmVlU2l6ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nl
c3M6OnNldElnbm9yZVRMU0Vycm9ycyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlBy
b2Nlc3M6OmFsbG93U3BlY2lmaWNIVFRQU0NlcnRpZmljYXRlRm9ySG9zdCk6IERlbGV0ZWQuCisK
IDIwMTUtMTEtMjMgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4K
IAogICAgICAgICBGaXggY3Jhc2ggaW4gfldlYlByb2Nlc3NQb29sIHdoZW4gdXNpbmcgR2VvbG9j
YXRpb24gd2l0aCB1c2VOZXR3b3JrUHJvY2Vzcz10cnVlCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9O
ZXR3b3JrUHJvY2Vzcy9tYWMvUmVtb3RlTmV0d29ya2luZ0NvbnRleHQubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvbWFjL1JlbW90ZU5ldHdvcmtpbmdDb250
ZXh0Lm1tCShyZXZpc2lvbiAxOTI3NTMpCisrKyBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vz
cy9tYWMvUmVtb3RlTmV0d29ya2luZ0NvbnRleHQubW0JKHdvcmtpbmcgY29weSkKQEAgLTkzLDgg
KzkzLDEzIEBAIHZvaWQgUmVtb3RlTmV0d29ya2luZ0NvbnRleHQ6OmVuc3VyZVByaXYKICAgICBp
ZiAoU2Vzc2lvblRyYWNrZXI6OnN0b3JhZ2VTZXNzaW9uKHNlc3Npb25JRCkpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIEFTU0VSVCghU2Vzc2lvblRyYWNrZXI6OmdldElkZW50aWZpZXJCYXNlKCku
aXNOdWxsKCkpOwotICAgIFNlc3Npb25UcmFja2VyOjpzZXRTZXNzaW9uKHNlc3Npb25JRCwgTmV0
d29ya1N0b3JhZ2VTZXNzaW9uOjpjcmVhdGVQcml2YXRlQnJvd3NpbmdTZXNzaW9uKFNlc3Npb25U
cmFja2VyOjpnZXRJZGVudGlmaWVyQmFzZSgpICsgJy4nICsgU3RyaW5nOjpudW1iZXIoc2Vzc2lv
bklELnNlc3Npb25JRCgpKSkKKyAgICBTdHJpbmcgYmFzZTsKKyAgICBpZiAoU2Vzc2lvblRyYWNr
ZXI6OmdldElkZW50aWZpZXJCYXNlKCkuaXNOdWxsKCkpCisgICAgICAgIGJhc2UgPSBbW05TQnVu
ZGxlIG1haW5CdW5kbGVdIGJ1bmRsZUlkZW50aWZpZXJdOworICAgIGVsc2UKKyAgICAgICAgYmFz
ZSA9IFNlc3Npb25UcmFja2VyOjpnZXRJZGVudGlmaWVyQmFzZSgpOworCisgICAgU2Vzc2lvblRy
YWNrZXI6OnNldFNlc3Npb24oc2Vzc2lvbklELCBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmNyZWF0
ZVByaXZhdGVCcm93c2luZ1Nlc3Npb24oYmFzZSArICcuJyArIFN0cmluZzo6bnVtYmVyKHNlc3Np
b25JRC5zZXNzaW9uSUQoKSkpCiAjaWYgVVNFKE5FVFdPUktfU0VTU0lPTikKICAgICAgICAgLCBz
dGQ6Om1ha2VfdW5pcXVlPE5ldHdvcmtTZXNzaW9uPihOZXR3b3JrU2Vzc2lvbjo6VHlwZTo6RXBo
ZW1lcmFsLCBzZXNzaW9uSUQpCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9X
ZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAJKHJldmlzaW9uIDE5
Mjc1MykKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0
ZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsNyArNDMsNiBAQCBXZWJQcm9jZXNzQ3JlYXRp
b25QYXJhbWV0ZXJzOjpXZWJQcm9jZXNzCiAgICAgLCBzaG91bGRFbmFibGVKSVQoZmFsc2UpCiAg
ICAgLCBzaG91bGRFbmFibGVGVExKSVQoZmFsc2UpCiAjZW5kaWYKLSAgICAsIHVzZXNOZXR3b3Jr
UHJvY2VzcyhmYWxzZSkKICAgICAsIG1lbW9yeUNhY2hlRGlzYWJsZWQoZmFsc2UpCiAjaWYgRU5B
QkxFKFNFUlZJQ0VfQ09OVFJPTFMpCiAgICAgLCBoYXNJbWFnZVNlcnZpY2VzKGZhbHNlKQpAQCAt
OTcsNyArOTYsNiBAQCB2b2lkIFdlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM6OmVuY29kCiAg
ICAgZW5jb2RlciA8PCBjb29raWVQZXJzaXN0ZW50U3RvcmFnZVBhdGg7CiAgICAgZW5jb2RlciA8
PCBjb29raWVQZXJzaXN0ZW50U3RvcmFnZVR5cGU7CiAgICAgZW5jb2Rlci5lbmNvZGVFbnVtKGNv
b2tpZUFjY2VwdFBvbGljeSk7Ci0gICAgZW5jb2RlciA8PCBpZ25vcmVUTFNFcnJvcnM7CiAjZW5k
aWYKICAgICBlbmNvZGVyLmVuY29kZUVudW0oY2FjaGVNb2RlbCk7CiAgICAgZW5jb2RlciA8PCBz
aG91bGRBbHdheXNVc2VDb21wbGV4VGV4dENvZGVQYXRoOwpAQCAtMTMxLDggKzEyOSw2IEBAIHZv
aWQgV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyczo6ZW5jb2QKICAgICBlbmNvZGVyIDw8IG5v
dGlmaWNhdGlvblBlcm1pc3Npb25zOwogI2VuZGlmCiAKLSAgICBlbmNvZGVyIDw8IHVzZXNOZXR3
b3JrUHJvY2VzczsKLQogICAgIGVuY29kZXIgPDwgcGx1Z0luQXV0b1N0YXJ0T3JpZ2luSGFzaGVz
OwogICAgIGVuY29kZXIgPDwgcGx1Z0luQXV0b1N0YXJ0T3JpZ2luczsKICAgICBlbmNvZGVyIDw8
IG1lbW9yeUNhY2hlRGlzYWJsZWQ7CkBAIC0yMjEsOCArMjE3LDYgQEAgYm9vbCBXZWJQcm9jZXNz
Q3JlYXRpb25QYXJhbWV0ZXJzOjpkZWNvZAogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYg
KCFkZWNvZGVyLmRlY29kZUVudW0ocGFyYW1ldGVycy5jb29raWVBY2NlcHRQb2xpY3kpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShwYXJhbWV0ZXJzLmln
bm9yZVRMU0Vycm9ycykpCi0gICAgICAgIHJldHVybiBmYWxzZTsKICNlbmRpZgogICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGVFbnVtKHBhcmFtZXRlcnMuY2FjaGVNb2RlbCkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKQEAgLTI4Nyw5ICsyODEsNiBAQCBib29sIFdlYlByb2Nlc3NDcmVhdGlvblBhcmFt
ZXRlcnM6OmRlY29kCiAgICAgICAgIHJldHVybiBmYWxzZTsKICNlbmRpZgogCi0gICAgaWYgKCFk
ZWNvZGVyLmRlY29kZShwYXJhbWV0ZXJzLnVzZXNOZXR3b3JrUHJvY2VzcykpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQogICAgIGlmICghZGVjb2Rlci5kZWNvZGUocGFyYW1ldGVycy5wbHVnSW5B
dXRvU3RhcnRPcmlnaW5IYXNoZXMpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKCFk
ZWNvZGVyLmRlY29kZShwYXJhbWV0ZXJzLnBsdWdJbkF1dG9TdGFydE9yaWdpbnMpKQpJbmRleDog
U291cmNlL1dlYktpdDIvU2hhcmVkL1dlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1l
dGVycy5oCShyZXZpc2lvbiAxOTI3NTMpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViUHJv
Y2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDUsNyArMTA1LDYg
QEAgc3RydWN0IFdlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMgewogICAgIFN0cmluZyBjb29r
aWVQZXJzaXN0ZW50U3RvcmFnZVBhdGg7CiAgICAgdWludDMyX3QgY29va2llUGVyc2lzdGVudFN0
b3JhZ2VUeXBlOwogICAgIEhUVFBDb29raWVBY2NlcHRQb2xpY3kgY29va2llQWNjZXB0UG9saWN5
OwotICAgIGJvb2wgaWdub3JlVExTRXJyb3JzOwogI2VuZGlmCiAKICAgICBDYWNoZU1vZGVsIGNh
Y2hlTW9kZWw7CkBAIC0xNTQsOCArMTUzLDYgQEAgc3RydWN0IFdlYlByb2Nlc3NDcmVhdGlvblBh
cmFtZXRlcnMgewogICAgIEhhc2hNYXA8U3RyaW5nLCBib29sPiBub3RpZmljYXRpb25QZXJtaXNz
aW9uczsKICNlbmRpZgogCi0gICAgYm9vbCB1c2VzTmV0d29ya1Byb2Nlc3M7Ci0KICAgICBIYXNo
TWFwPFdlYkNvcmU6OlNlc3Npb25JRCwgSGFzaE1hcDx1bnNpZ25lZCwgZG91YmxlPj4gcGx1Z0lu
QXV0b1N0YXJ0T3JpZ2luSGFzaGVzOwogICAgIFZlY3RvcjxTdHJpbmc+IHBsdWdJbkF1dG9TdGFy
dE9yaWdpbnM7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9BUEkvYy9XS0RlcHJlY2F0
ZWRGdW5jdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9BUEkv
Yy9XS0RlcHJlY2F0ZWRGdW5jdGlvbnMuY3BwCShyZXZpc2lvbiAxOTI3NTMpCisrKyBTb3VyY2Uv
V2ViS2l0Mi9TaGFyZWQvQVBJL2MvV0tEZXByZWNhdGVkRnVuY3Rpb25zLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjcsNiArMjcsNyBAQAogCiAjaW5jbHVkZSAiQVBJRGljdGlvbmFyeS5oIgogI2lu
Y2x1ZGUgIldLQXJyYXkuaCIKKyNpbmNsdWRlICJXS0NvbnRleHRQcml2YXRlLmgiCiAjaW5jbHVk
ZSAiV0tNdXRhYmxlRGljdGlvbmFyeS5oIgogI2luY2x1ZGUgIldLUHJlZmVyZW5jZXNSZWZQcml2
YXRlLmgiCiAjaW5jbHVkZSAiV0tTaGFyZWRBUElDYXN0LmgiCkBAIC0xMzQsNiArMTM1LDEwIEBA
IHZvaWQgV0tJbnNwZWN0b3JUb2dnbGVKYXZhU2NyaXB0UHJvZmlsaW4KIHsKIH0KIAordm9pZCBX
S0NvbnRleHRTZXRVc2VzTmV0d29ya1Byb2Nlc3MoV0tDb250ZXh0UmVmLCBib29sKQoreworfQor
CiAjaWYgUExBVEZPUk0oTUFDKQogQ0dDb250ZXh0UmVmIFdLR3JhcGhpY3NDb250ZXh0R2V0Q0dD
b250ZXh0KFdLR3JhcGhpY3NDb250ZXh0UmVmIGdyYXBoaWNzQ29udGV4dCkKIHsKSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL1NoYXJlZC9OZXR3b3JrL0N1c3RvbVByb3RvY29scy9Db2NvYS9DdXN0b21Q
cm90b2NvbE1hbmFnZXJDb2NvYS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvTmV0d29yay9DdXN0b21Qcm90b2NvbHMvQ29jb2EvQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ29j
b2EubW0JKHJldmlzaW9uIDE5Mjc1MykKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9OZXR3b3Jr
L0N1c3RvbVByb3RvY29scy9Db2NvYS9DdXN0b21Qcm90b2NvbE1hbmFnZXJDb2NvYS5tbQkod29y
a2luZyBjb3B5KQpAQCAtMTM0LDE3ICsxMzQsOSBAQCB2b2lkIEN1c3RvbVByb3RvY29sTWFuYWdl
cjo6aW5pdGlhbGl6ZUNvCiAKIHZvaWQgQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyOjppbml0aWFsaXpl
KGNvbnN0IFdlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmIHBhcmFtZXRlcnMpCiB7Ci0gICAg
QVNTRVJUKHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRGb3JDdXN0b21Qcm90b2NvbHMu
aXNFbXB0eSgpIHx8ICFwYXJhbWV0ZXJzLnVzZXNOZXR3b3JrUHJvY2Vzcyk7Ci0gICAgaWYgKHBh
cmFtZXRlcnMudXNlc05ldHdvcmtQcm9jZXNzKSB7Ci0gICAgICAgIG1fY2hpbGRQcm9jZXNzLT5w
YXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5yZW1vdmVXb3JrUXVldWVNZXNzYWdlUmVjZWl2ZXIo
TWVzc2FnZXM6OkN1c3RvbVByb3RvY29sTWFuYWdlcjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpKTsK
LSAgICAgICAgbV9tZXNzYWdlUXVldWUgPSBudWxscHRyOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgW05TVVJMUHJvdG9jb2wgcmVnaXN0ZXJDbGFzczpbV0tDdXN0b21Qcm90b2NvbCBj
bGFzc11dOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwYXJhbWV0ZXJzLnVybFNjaGVt
ZXNSZWdpc3RlcmVkRm9yQ3VzdG9tUHJvdG9jb2xzLnNpemUoKTsgKytpKQotICAgICAgICByZWdp
c3RlclNjaGVtZShwYXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkRm9yQ3VzdG9tUHJvdG9j
b2xzW2ldKTsKKyAgICBBU1NFUlQocGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEZvckN1
c3RvbVByb3RvY29scy5pc0VtcHR5KCkpOworICAgIG1fY2hpbGRQcm9jZXNzLT5wYXJlbnRQcm9j
ZXNzQ29ubmVjdGlvbigpLT5yZW1vdmVXb3JrUXVldWVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6
OkN1c3RvbVByb3RvY29sTWFuYWdlcjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpKTsKKyAgICBtX21l
c3NhZ2VRdWV1ZSA9IG51bGxwdHI7CiB9CiAKIHZvaWQgQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyOjpp
bml0aWFsaXplKGNvbnN0IE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJiBwYXJhbWV0
ZXJzKQpJbmRleDogU291cmNlL1dlYktpdDIvU2hhcmVkL05ldHdvcmsvQ3VzdG9tUHJvdG9jb2xz
L3NvdXAvQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyU291cC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdDIvU2hhcmVkL05ldHdvcmsvQ3VzdG9tUHJvdG9jb2xzL3NvdXAvQ3VzdG9tUHJvdG9j
b2xNYW5hZ2VyU291cC5jcHAJKHJldmlzaW9uIDE5Mjc1MykKKysrIFNvdXJjZS9XZWJLaXQyL1No
YXJlZC9OZXR3b3JrL0N1c3RvbVByb3RvY29scy9zb3VwL0N1c3RvbVByb3RvY29sTWFuYWdlclNv
dXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OCwxNCArNDgsOSBAQCB2b2lkIEN1c3RvbVByb3Rv
Y29sTWFuYWdlcjo6aW5pdGlhbGl6ZUNvCiAKIHZvaWQgQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyOjpp
bml0aWFsaXplKGNvbnN0IFdlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmIHBhcmFtZXRlcnMp
CiB7Ci0gICAgQVNTRVJUKHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRGb3JDdXN0b21Q
cm90b2NvbHMuaXNFbXB0eSgpIHx8ICFwYXJhbWV0ZXJzLnVzZXNOZXR3b3JrUHJvY2Vzcyk7Ci0g
ICAgaWYgKHBhcmFtZXRlcnMudXNlc05ldHdvcmtQcm9jZXNzKSB7Ci0gICAgICAgIG1fY2hpbGRQ
cm9jZXNzLT5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5yZW1vdmVXb3JrUXVldWVNZXNzYWdl
UmVjZWl2ZXIoTWVzc2FnZXM6OkN1c3RvbVByb3RvY29sTWFuYWdlcjo6bWVzc2FnZVJlY2VpdmVy
TmFtZSgpKTsKLSAgICAgICAgbV9tZXNzYWdlUXVldWUgPSBudWxscHRyOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcGFyYW1ldGVycy51cmxTY2hl
bWVzUmVnaXN0ZXJlZEZvckN1c3RvbVByb3RvY29scy5zaXplKCk7ICsraSkKLSAgICAgICAgcmVn
aXN0ZXJTY2hlbWUocGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEZvckN1c3RvbVByb3Rv
Y29sc1tpXSk7CisgICAgQVNTRVJUKHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRGb3JD
dXN0b21Qcm90b2NvbHMuaXNFbXB0eSgpKTsKKyAgICBtX2NoaWxkUHJvY2Vzcy0+cGFyZW50UHJv
Y2Vzc0Nvbm5lY3Rpb24oKS0+cmVtb3ZlV29ya1F1ZXVlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2Vz
OjpDdXN0b21Qcm90b2NvbE1hbmFnZXI6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSk7CisgICAgbV9t
ZXNzYWdlUXVldWUgPSBudWxscHRyOwogfQogCiB2b2lkIEN1c3RvbVByb3RvY29sTWFuYWdlcjo6
aW5pdGlhbGl6ZShjb25zdCBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyYgcGFyYW1l
dGVycykKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJDb29raWVNYW5hZ2VyUHJv
eHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJDb29raWVN
YW5hZ2VyUHJveHkuY3BwCShyZXZpc2lvbiAxOTI3NTMpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvV2ViQ29va2llTWFuYWdlclByb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTYzLDgg
KzE2Myw3IEBAIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpzZXRIVFRQQ29va2kKICAgICAv
LyAtIFdoZW4gdGVzdGluZywgd2Ugb25seSBoYXZlIG9uZSBXZWJQcm9jZXNzIGFuZCBvbmUgTmV0
d29ya1Byb2Nlc3MsIGFuZCBXZWJLaXRUZXN0UnVubmVyIG5ldmVyIHJlc3RhcnRzIHRoZW07CiAg
ICAgLy8gLSBXaGVuIG5vdCB0ZXN0aW5nLCBDb2NvYSBoYXMgdGhlIHBvbGljeSBwZXJzaXN0ZWQs
IGFuZCB0aHVzIG5ldyBwcm9jZXNzZXMgdXNlIGl0IChldmVuIGZvciBlcGhlbWVyYWwgc2Vzc2lv
bnMpLgogICAgIHByb2Nlc3NQb29sKCktPnNlbmRUb0FsbFByb2Nlc3NlcyhNZXNzYWdlczo6V2Vi
Q29va2llTWFuYWdlcjo6U2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShwb2xpY3kpKTsKLSAgICBp
ZiAocHJvY2Vzc1Bvb2woKS0+dXNlc05ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgIHByb2Nlc3NQ
b29sKCktPnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2Vy
OjpTZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KHBvbGljeSkpOworICAgIHByb2Nlc3NQb29sKCkt
PnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpTZXRI
VFRQQ29va2llQWNjZXB0UG9saWN5KHBvbGljeSkpOwogfQogCiB2b2lkIFdlYkNvb2tpZU1hbmFn
ZXJQcm94eTo6Z2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShzdGQ6OmZ1bmN0aW9uPHZvaWQgKEhU
VFBDb29raWVBY2NlcHRQb2xpY3ksIENhbGxiYWNrQmFzZTo6RXJyb3IpPiBjYWxsYmFja0Z1bmN0
aW9uKQpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3Bw
CShyZXZpc2lvbiAxOTI3NTMpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vz
c1Bvb2wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTgsOSArMTU4LDYgQEAgV2ViUHJvY2Vzc1Bv
b2w6OldlYlByb2Nlc3NQb29sKEFQSTo6UHJvYwogICAgICwgbV9wcm9jZXNzVGVybWluYXRpb25F
bmFibGVkKHRydWUpCiAgICAgLCBtX2NhbkhhbmRsZUhUVFBTU2VydmVyVHJ1c3RFdmFsdWF0aW9u
KHRydWUpCiAgICAgLCBtX2RpZE5ldHdvcmtQcm9jZXNzQ3Jhc2goZmFsc2UpCi0jaWYgVVNFKFNP
VVApCi0gICAgLCBtX2lnbm9yZVRMU0Vycm9ycyh0cnVlKQotI2VuZGlmCiAgICAgLCBtX21lbW9y
eUNhY2hlRGlzYWJsZWQoZmFsc2UpCiAgICAgLCBtX3VzZXJPYnNlcnZhYmxlUGFnZUNvdW50ZXIo
W3RoaXNdKGJvb2wpIHsgdXBkYXRlUHJvY2Vzc1N1cHByZXNzaW9uU3RhdGUoKTsgfSkKICAgICAs
IG1fcHJvY2Vzc1N1cHByZXNzaW9uRGlzYWJsZWRGb3JQYWdlQ291bnRlcihbdGhpc10oYm9vbCkg
eyB1cGRhdGVQcm9jZXNzU3VwcHJlc3Npb25TdGF0ZSgpOyB9KQpAQCAtMzA2LDE3ICszMDMsNyBA
QCB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXRNYXhpbXVtTnVtYmVyT2ZQCiAKIElQQzo6Q29ubmVj
dGlvbiogV2ViUHJvY2Vzc1Bvb2w6Om5ldHdvcmtpbmdQcm9jZXNzQ29ubmVjdGlvbigpCiB7Ci0g
ICAgc3dpdGNoIChwcm9jZXNzTW9kZWwoKSkgewotICAgIGNhc2UgUHJvY2Vzc01vZGVsU2hhcmVk
U2Vjb25kYXJ5UHJvY2VzczoKLSAgICAgICAgaWYgKHVzZXNOZXR3b3JrUHJvY2VzcygpKQotICAg
ICAgICAgICAgcmV0dXJuIG1fbmV0d29ya1Byb2Nlc3MtPmNvbm5lY3Rpb24oKTsKLSAgICAgICAg
cmV0dXJuIG1fcHJvY2Vzc2VzWzBdLT5jb25uZWN0aW9uKCk7Ci0gICAgY2FzZSBQcm9jZXNzTW9k
ZWxNdWx0aXBsZVNlY29uZGFyeVByb2Nlc3NlczoKLSAgICAgICAgQVNTRVJUKHVzZXNOZXR3b3Jr
UHJvY2VzcygpKTsKLSAgICAgICAgcmV0dXJuIG1fbmV0d29ya1Byb2Nlc3MtPmNvbm5lY3Rpb24o
KTsKLSAgICB9Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIDA7CisgICAg
cmV0dXJuIG1fbmV0d29ya1Byb2Nlc3MtPmNvbm5lY3Rpb24oKTsKIH0KIAogdm9pZCBXZWJQcm9j
ZXNzUG9vbDo6bGFuZ3VhZ2VDaGFuZ2VkKHZvaWQqIGNvbnRleHQpCkBAIC0zMjgsNyArMzE1LDcg
QEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6bGFuZ3VhZ2VDaGFuZ2VkKCkKIHsKICAgICBzZW5kVG9B
bGxQcm9jZXNzZXMoTWVzc2FnZXM6OldlYlByb2Nlc3M6OlVzZXJQcmVmZXJyZWRMYW5ndWFnZXND
aGFuZ2VkKHVzZXJQcmVmZXJyZWRMYW5ndWFnZXMoKSkpOwogI2lmIFVTRShTT1VQKQotICAgIGlm
ICh1c2VzTmV0d29ya1Byb2Nlc3MoKSAmJiBtX25ldHdvcmtQcm9jZXNzKQorICAgIGlmIChtX25l
dHdvcmtQcm9jZXNzKQogICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpO
ZXR3b3JrUHJvY2Vzczo6VXNlclByZWZlcnJlZExhbmd1YWdlc0NoYW5nZWQodXNlclByZWZlcnJl
ZExhbmd1YWdlcygpKSwgMCk7CiAjZW5kaWYKIH0KQEAgLTM0MywxNiArMzMwLDYgQEAgdm9pZCBX
ZWJQcm9jZXNzUG9vbDo6dGV4dENoZWNrZXJTdGF0ZUNoYQogICAgIHNlbmRUb0FsbFByb2Nlc3Nl
cyhNZXNzYWdlczo6V2ViUHJvY2Vzczo6U2V0VGV4dENoZWNrZXJTdGF0ZShUZXh0Q2hlY2tlcjo6
c3RhdGUoKSkpOwogfQogCi12b2lkIFdlYlByb2Nlc3NQb29sOjpzZXRVc2VzTmV0d29ya1Byb2Nl
c3MoYm9vbCB1c2VzTmV0d29ya1Byb2Nlc3MpCi17Ci0gICAgbV9jb25maWd1cmF0aW9uLT5zZXRV
c2VOZXR3b3JrUHJvY2Vzcyh1c2VzTmV0d29ya1Byb2Nlc3MpOwotfQotCi1ib29sIFdlYlByb2Nl
c3NQb29sOjp1c2VzTmV0d29ya1Byb2Nlc3MoKSBjb25zdAotewotICAgIHJldHVybiBtX2NvbmZp
Z3VyYXRpb24tPnVzZU5ldHdvcmtQcm9jZXNzKCk7Ci19Ci0KIE5ldHdvcmtQcm9jZXNzUHJveHkm
IFdlYlByb2Nlc3NQb29sOjplbnN1cmVOZXR3b3JrUHJvY2VzcygpCiB7CiAgICAgaWYgKG1fbmV0
d29ya1Byb2Nlc3MpCkBAIC01MDQsNyArNDgxLDcgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0
QW55UGFnZUdyb3VwTWlnaAogewogICAgIG1faWNvbkRhdGFiYXNlLT5zZXRQcml2YXRlQnJvd3Np
bmdFbmFibGVkKHByaXZhdGVCcm93c2luZ0VuYWJsZWQpOwogCi0gICAgaWYgKHVzZXNOZXR3b3Jr
UHJvY2VzcygpICYmIG5ldHdvcmtQcm9jZXNzKCkpIHsKKyAgICBpZiAobmV0d29ya1Byb2Nlc3Mo
KSkgewogICAgICAgICBpZiAocHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCkKICAgICAgICAgICAgIG5l
dHdvcmtQcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpFbnN1cmVQcml2
YXRlQnJvd3NpbmdTZXNzaW9uKFNlc3Npb25JRDo6bGVnYWN5UHJpdmF0ZVNlc3Npb25JRCgpKSwg
MCk7CiAgICAgICAgIGVsc2UKQEAgLTU1NCw4ICs1MzEsNyBAQCBXZWJQcm9jZXNzUHJveHkmIFdl
YlByb2Nlc3NQb29sOjplbnN1cmVTCiAKIFdlYlByb2Nlc3NQcm94eSYgV2ViUHJvY2Vzc1Bvb2w6
OmNyZWF0ZU5ld1dlYlByb2Nlc3MoKQogewotICAgIGlmICh1c2VzTmV0d29ya1Byb2Nlc3MoKSkK
LSAgICAgICAgZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKKyAgICBlbnN1cmVOZXR3b3JrUHJvY2Vz
cygpOwogCiAgICAgUmVmPFdlYlByb2Nlc3NQcm94eT4gcHJvY2VzcyA9IFdlYlByb2Nlc3NQcm94
eTo6Y3JlYXRlKCp0aGlzKTsKIApAQCAtNjMyLDggKzYwOCw2IEBAIFdlYlByb2Nlc3NQcm94eSYg
V2ViUHJvY2Vzc1Bvb2w6OmNyZWF0ZU4KICAgICBzdXBwbGVtZW50PFdlYk5vdGlmaWNhdGlvbk1h
bmFnZXJQcm94eT4oKS0+cG9wdWxhdGVDb3B5T2ZOb3RpZmljYXRpb25QZXJtaXNzaW9ucyhwYXJh
bWV0ZXJzLm5vdGlmaWNhdGlvblBlcm1pc3Npb25zKTsKICNlbmRpZgogCi0gICAgcGFyYW1ldGVy
cy51c2VzTmV0d29ya1Byb2Nlc3MgPSB1c2VzTmV0d29ya1Byb2Nlc3MoKTsKLQogICAgIHBhcmFt
ZXRlcnMucGx1Z0luQXV0b1N0YXJ0T3JpZ2luSGFzaGVzID0gbV9wbHVnSW5BdXRvU3RhcnRQcm92
aWRlci5hdXRvU3RhcnRPcmlnaW5IYXNoZXNDb3B5KCk7CiAgICAgY29weVRvVmVjdG9yKG1fcGx1
Z0luQXV0b1N0YXJ0UHJvdmlkZXIuYXV0b1N0YXJ0T3JpZ2lucygpLCBwYXJhbWV0ZXJzLnBsdWdJ
bkF1dG9TdGFydE9yaWdpbnMpOwogCkBAIC04NDEsMTYgKzgxNSwxNCBAQCBSZWY8V2ViUGFnZVBy
b3h5PiBXZWJQcm9jZXNzUG9vbDo6Y3JlYXRlCiBEb3dubG9hZFByb3h5KiBXZWJQcm9jZXNzUG9v
bDo6ZG93bmxvYWQoV2ViUGFnZVByb3h5KiBpbml0aWF0aW5nUGFnZSwgY29uc3QgUmVzb3VyY2VS
ZXF1ZXN0JiByZXF1ZXN0KQogewogICAgIERvd25sb2FkUHJveHkqIGRvd25sb2FkUHJveHkgPSBj
cmVhdGVEb3dubG9hZFByb3h5KHJlcXVlc3QpOwotICAgIHVpbnQ2NF90IGluaXRpYXRpbmdQYWdl
SUQgPSBpbml0aWF0aW5nUGFnZSA/IGluaXRpYXRpbmdQYWdlLT5wYWdlSUQoKSA6IDA7CiAgICAg
U2Vzc2lvbklEIHNlc3Npb25JRCA9IGluaXRpYXRpbmdQYWdlID8gaW5pdGlhdGluZ1BhZ2UtPnNl
c3Npb25JRCgpIDogU2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCk7CiAKLSAgICBpZiAodXNl
c05ldHdvcmtQcm9jZXNzKCkgJiYgbmV0d29ya1Byb2Nlc3MoKSkgeworICAgIGlmIChuZXR3b3Jr
UHJvY2VzcygpKSB7CiAgICAgICAgIC8vIEZJWE1FIChOZXR3b3JrUHJvY2Vzcyk6IFJlcGxpY2F0
ZSB3aGF0ZXZlciBGcmFtZUxvYWRlcjo6c2V0T3JpZ2luYWxVUkxGb3JEb3dubG9hZFJlcXVlc3Qg
ZG9lcyB3aXRoIHRoZSByZXF1ZXN0IGhlcmUuCiAgICAgICAgIG5ldHdvcmtQcm9jZXNzKCktPnNl
bmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpEb3dubG9hZFJlcXVlc3Qoc2Vzc2lvbklELCBk
b3dubG9hZFByb3h5LT5kb3dubG9hZElEKCksIHJlcXVlc3QpLCAwKTsKICAgICAgICAgcmV0dXJu
IGRvd25sb2FkUHJveHk7CiAgICAgfQogCi0gICAgbV9wcm9jZXNzZXNbMF0tPnNlbmQoTWVzc2Fn
ZXM6OldlYlByb2Nlc3M6OkRvd25sb2FkUmVxdWVzdChzZXNzaW9uSUQsIGRvd25sb2FkUHJveHkt
PmRvd25sb2FkSUQoKSwgaW5pdGlhdGluZ1BhZ2VJRCwgcmVxdWVzdCksIDApOwogICAgIHJldHVy
biBkb3dubG9hZFByb3h5OwogfQogCkBAIC04NjIsMTIgKzgzNCwxMSBAQCBEb3dubG9hZFByb3h5
KiBXZWJQcm9jZXNzUG9vbDo6cmVzdW1lRG93CiAgICAgaWYgKCFwYXRoLmlzRW1wdHkoKSkKICAg
ICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKHBhdGgsIFNhbmRib3hFeHRlbnNp
b246OlJlYWRXcml0ZSwgc2FuZGJveEV4dGVuc2lvbkhhbmRsZSk7CiAKLSAgICBpZiAodXNlc05l
dHdvcmtQcm9jZXNzKCkgJiYgbmV0d29ya1Byb2Nlc3MoKSkgeworICAgIGlmIChuZXR3b3JrUHJv
Y2VzcygpKSB7CiAgICAgICAgIG5ldHdvcmtQcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6Ok5ldHdv
cmtQcm9jZXNzOjpSZXN1bWVEb3dubG9hZChkb3dubG9hZFByb3h5LT5kb3dubG9hZElEKCksIHJl
c3VtZURhdGEtPmRhdGFSZWZlcmVuY2UoKSwgcGF0aCwgc2FuZGJveEV4dGVuc2lvbkhhbmRsZSks
IDApOwogICAgICAgICByZXR1cm4gZG93bmxvYWRQcm94eTsKICAgICB9CiAKLSAgICBtX3Byb2Nl
c3Nlc1swXS0+c2VuZChNZXNzYWdlczo6V2ViUHJvY2Vzczo6UmVzdW1lRG93bmxvYWQoZG93bmxv
YWRQcm94eS0+ZG93bmxvYWRJRCgpLCByZXN1bWVEYXRhLT5kYXRhUmVmZXJlbmNlKCksIHBhdGgs
IHNhbmRib3hFeHRlbnNpb25IYW5kbGUpLCAwKTsKICAgICByZXR1cm4gZG93bmxvYWRQcm94eTsK
IH0KIApAQCAtOTU0LDcgKzkyNSw3IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldERvbWFpblJl
bGF4YXRpb24KIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldENhbkhhbmRsZUhUVFBTU2VydmVyVHJ1
c3RFdmFsdWF0aW9uKGJvb2wgdmFsdWUpCiB7CiAgICAgbV9jYW5IYW5kbGVIVFRQU1NlcnZlclRy
dXN0RXZhbHVhdGlvbiA9IHZhbHVlOwotICAgIGlmICh1c2VzTmV0d29ya1Byb2Nlc3MoKSAmJiBt
X25ldHdvcmtQcm9jZXNzKSB7CisgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpIHsKICAgICAgICAg
bV9uZXR3b3JrUHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldENhbkhh
bmRsZUhUVFBTU2VydmVyVHJ1c3RFdmFsdWF0aW9uKHZhbHVlKSwgMCk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CkBAIC0xMDI1LDcgKzk5Niw3IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldENh
Y2hlTW9kZWwoQ2FjaGUKICAgICBtX2NvbmZpZ3VyYXRpb24tPnNldENhY2hlTW9kZWwoY2FjaGVN
b2RlbCk7CiAgICAgc2VuZFRvQWxsUHJvY2Vzc2VzKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpTZXRD
YWNoZU1vZGVsKGNhY2hlTW9kZWwpKTsKIAotICAgIGlmICh1c2VzTmV0d29ya1Byb2Nlc3MoKSAm
JiBtX25ldHdvcmtQcm9jZXNzKQorICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQogICAgICAgICBt
X25ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0Q2FjaGVN
b2RlbChjYWNoZU1vZGVsKSwgMCk7CiB9CiAKQEAgLTEwMzYsMTMgKzEwMDcsOSBAQCB2b2lkIFdl
YlByb2Nlc3NQb29sOjpzZXREZWZhdWx0UmVxdWVzdFRpCiAKIERvd25sb2FkUHJveHkqIFdlYlBy
b2Nlc3NQb29sOjpjcmVhdGVEb3dubG9hZFByb3h5KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVx
dWVzdCkKIHsKLSAgICBpZiAodXNlc05ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgZW5zdXJl
TmV0d29ya1Byb2Nlc3MoKTsKLSAgICAgICAgQVNTRVJUKG1fbmV0d29ya1Byb2Nlc3MpOwotICAg
ICAgICByZXR1cm4gbV9uZXR3b3JrUHJvY2Vzcy0+Y3JlYXRlRG93bmxvYWRQcm94eShyZXF1ZXN0
KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZW5zdXJlU2hhcmVkV2ViUHJvY2VzcygpLmNyZWF0ZURv
d25sb2FkUHJveHkocmVxdWVzdCk7CisgICAgZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKKyAgICBB
U1NFUlQobV9uZXR3b3JrUHJvY2Vzcyk7CisgICAgcmV0dXJuIG1fbmV0d29ya1Byb2Nlc3MtPmNy
ZWF0ZURvd25sb2FkUHJveHkocmVxdWVzdCk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmFk
ZE1lc3NhZ2VSZWNlaXZlcihJUEM6OlN0cmluZ1JlZmVyZW5jZSBtZXNzYWdlUmVjZWl2ZXJOYW1l
LCBJUEM6Ok1lc3NhZ2VSZWNlaXZlciYgbWVzc2FnZVJlY2VpdmVyKQpAQCAtMTE1MiwyMiArMTEx
OSw4IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnVzZVRlc3RpbmdOZXR3b3JrU2UKIAogdm9pZCBX
ZWJQcm9jZXNzUG9vbDo6YWxsb3dTcGVjaWZpY0hUVFBTQ2VydGlmaWNhdGVGb3JIb3N0KGNvbnN0
IFdlYkNlcnRpZmljYXRlSW5mbyogY2VydGlmaWNhdGUsIGNvbnN0IFN0cmluZyYgaG9zdCkKIHsK
LSAgICBpZiAodXNlc05ldHdvcmtQcm9jZXNzKCkgJiYgbV9uZXR3b3JrUHJvY2VzcykgeworICAg
IGlmIChtX25ldHdvcmtQcm9jZXNzKQogICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kKE1l
c3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6QWxsb3dTcGVjaWZpY0hUVFBTQ2VydGlmaWNhdGVGb3JI
b3N0KGNlcnRpZmljYXRlLT5jZXJ0aWZpY2F0ZUluZm8oKSwgaG9zdCksIDApOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0jaWYgVVNFKFNPVVApCi0gICAgbV9wcm9jZXNzZXNbMF0tPnNlbmQo
TWVzc2FnZXM6OldlYlByb2Nlc3M6OkFsbG93U3BlY2lmaWNIVFRQU0NlcnRpZmljYXRlRm9ySG9z
dChjZXJ0aWZpY2F0ZS0+Y2VydGlmaWNhdGVJbmZvKCksIGhvc3QpLCAwKTsKLSAgICByZXR1cm47
Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShjZXJ0aWZpY2F0ZSk7Ci0gICAgVU5VU0VEX1BBUkFN
KGhvc3QpOwotI2VuZGlmCi0KLSNpZiAhUExBVEZPUk0oSU9TKQotICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotI2VuZGlmCiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldEhUVFBQaXBlbGlu
aW5nRW5hYmxlZChib29sIGVuYWJsZWQpCkBAIC0xMjIxLDcgKzExNzQsNyBAQCB2b2lkIFdlYlBy
b2Nlc3NQb29sOjpyZXF1ZXN0V2ViQ29udGVudFN0CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnJl
cXVlc3ROZXR3b3JraW5nU3RhdGlzdGljcyhTdGF0aXN0aWNzUmVxdWVzdCogcmVxdWVzdCkKIHsK
LSAgICBpZiAoIXVzZXNOZXR3b3JrUHJvY2VzcygpIHx8ICFtX25ldHdvcmtQcm9jZXNzKSB7Cisg
ICAgaWYgKCFtX25ldHdvcmtQcm9jZXNzKSB7CiAgICAgICAgIExPR19FUlJPUigiQXR0ZW1wdCB0
byBnZXQgTmV0d29ya1Byb2Nlc3Mgc3RhdGlzdGljcyBidXQgdGhlIE5ldHdvcmtQcm9jZXNzIGlz
IHVuYXZhaWxhYmxlIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CkluZGV4OiBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuaAkocmV2aXNpb24gMTkyNzUzKQorKysgU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmgJKHdvcmtpbmcgY29weSkKQEAg
LTI3NywxMCArMjc3LDYgQEAgcHVibGljOgogICAgIHZvaWQgc2V0UGx1Z0luQXV0b1N0YXJ0T3Jp
Z2luc0ZpbHRlcmluZ091dEVudHJpZXNBZGRlZEFmdGVyVGltZShBUEk6OkRpY3Rpb25hcnkmLCBk
b3VibGUgdGltZSk7CiAKICAgICAvLyBOZXR3b3JrIFByb2Nlc3MgTWFuYWdlbWVudAotCi0gICAg
dm9pZCBzZXRVc2VzTmV0d29ya1Byb2Nlc3MoYm9vbCk7Ci0gICAgYm9vbCB1c2VzTmV0d29ya1By
b2Nlc3MoKSBjb25zdDsKLQogICAgIE5ldHdvcmtQcm9jZXNzUHJveHkmIGVuc3VyZU5ldHdvcmtQ
cm9jZXNzKCk7CiAgICAgTmV0d29ya1Byb2Nlc3NQcm94eSogbmV0d29ya1Byb2Nlc3MoKSB7IHJl
dHVybiBtX25ldHdvcmtQcm9jZXNzLmdldCgpOyB9CiAgICAgdm9pZCBuZXR3b3JrUHJvY2Vzc0Ny
YXNoZWQoTmV0d29ya1Byb2Nlc3NQcm94eSopOwpAQCAtNTI1LDQzICs1MjEsMTUgQEAgcHJpdmF0
ZToKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZW5kVG9OZXR3
b3JraW5nUHJvY2VzcyhUJiYgbWVzc2FnZSkKIHsKLSAgICBzd2l0Y2ggKHByb2Nlc3NNb2RlbCgp
KSB7Ci0gICAgY2FzZSBQcm9jZXNzTW9kZWxTaGFyZWRTZWNvbmRhcnlQcm9jZXNzOgotICAgICAg
ICBpZiAodXNlc05ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAgIGlmIChtX25ldHdvcmtQ
cm9jZXNzICYmIG1fbmV0d29ya1Byb2Nlc3MtPmNhblNlbmRNZXNzYWdlKCkpCi0gICAgICAgICAg
ICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZChzdGQ6OmZvcndhcmQ8VD4obWVzc2FnZSksIDAp
OwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGlmICghbV9wcm9jZXNz
ZXMuaXNFbXB0eSgpICYmIG1fcHJvY2Vzc2VzWzBdLT5jYW5TZW5kTWVzc2FnZSgpKQotICAgICAg
ICAgICAgbV9wcm9jZXNzZXNbMF0tPnNlbmQoc3RkOjpmb3J3YXJkPFQ+KG1lc3NhZ2UpLCAwKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgUHJvY2Vzc01vZGVsTXVsdGlwbGVTZWNvbmRhcnlQ
cm9jZXNzZXM6Ci0gICAgICAgIGlmIChtX25ldHdvcmtQcm9jZXNzICYmIG1fbmV0d29ya1Byb2Nl
c3MtPmNhblNlbmRNZXNzYWdlKCkpCi0gICAgICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5k
KHN0ZDo6Zm9yd2FyZDxUPihtZXNzYWdlKSwgMCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0g
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MgJiYgbV9u
ZXR3b3JrUHJvY2Vzcy0+Y2FuU2VuZE1lc3NhZ2UoKSkKKyAgICAgICAgbV9uZXR3b3JrUHJvY2Vz
cy0+c2VuZChzdGQ6OmZvcndhcmQ8VD4obWVzc2FnZSksIDApOwogfQogCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPgogdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3NSZWxh
dW5jaGluZ0lmTmVjZXNzYXJ5KFQmJiBtZXNzYWdlKQogewotICAgIHN3aXRjaCAocHJvY2Vzc01v
ZGVsKCkpIHsKLSAgICBjYXNlIFByb2Nlc3NNb2RlbFNoYXJlZFNlY29uZGFyeVByb2Nlc3M6Ci0g
ICAgICAgIGlmICh1c2VzTmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICAgICAgZW5zdXJlTmV0
d29ya1Byb2Nlc3MoKTsKLSAgICAgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmQoc3RkOjpm
b3J3YXJkPFQ+KG1lc3NhZ2UpLCAwKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQot
ICAgICAgICBlbnN1cmVTaGFyZWRXZWJQcm9jZXNzKCk7Ci0gICAgICAgIG1fcHJvY2Vzc2VzWzBd
LT5zZW5kKHN0ZDo6Zm9yd2FyZDxUPihtZXNzYWdlKSwgMCk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICBjYXNlIFByb2Nlc3NNb2RlbE11bHRpcGxlU2Vjb25kYXJ5UHJvY2Vzc2VzOgotICAgICAgICBl
bnN1cmVOZXR3b3JrUHJvY2VzcygpOwotICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kKHN0
ZDo6Zm9yd2FyZDxUPihtZXNzYWdlKSwgMCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKKyAgICBt
X25ldHdvcmtQcm9jZXNzLT5zZW5kKHN0ZDo6Zm9yd2FyZDxUPihtZXNzYWdlKSwgMCk7CiB9CiAK
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2Vi
UHJvY2Vzc1Byb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
V2ViUHJvY2Vzc1Byb3h5LmNwcAkocmV2aXNpb24gMTkyNzUzKQorKysgU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwMiw5ICsy
MDIsNiBAQCB2b2lkIFdlYlByb2Nlc3NQcm94eTo6c2h1dERvd24oKQogICAgICAgICBmcmFtZXNb
aV0tPndlYlByb2Nlc3NXaWxsU2h1dERvd24oKTsKICAgICBtX2ZyYW1lTWFwLmNsZWFyKCk7CiAK
LSAgICBpZiAobV9kb3dubG9hZFByb3h5TWFwKQotICAgICAgICBtX2Rvd25sb2FkUHJveHlNYXAt
PnByb2Nlc3NEaWRDbG9zZSgpOwotCiAgICAgZm9yIChWaXNpdGVkTGlua1N0b3JlKiB2aXNpdGVk
TGlua1N0b3JlIDogbV92aXNpdGVkTGlua1N0b3JlcykKICAgICAgICAgdmlzaXRlZExpbmtTdG9y
ZS0+cmVtb3ZlUHJvY2VzcygqdGhpcyk7CiAgICAgbV92aXNpdGVkTGlua1N0b3Jlcy5jbGVhcigp
OwpAQCAtMjU2LDcgKzI1Myw3IEBAIHZvaWQgV2ViUHJvY2Vzc1Byb3h5OjpyZW1vdmVXZWJQYWdl
KHVpbnQKIAogICAgIC8vIElmIHRoaXMgd2FzIHRoZSBsYXN0IFdlYlBhZ2Ugb3BlbiBpbiB0aGF0
IHdlYiBwcm9jZXNzLCBhbmQgd2UgaGF2ZSBubyBvdGhlciByZWFzb24gdG8ga2VlcCBpdCBhbGl2
ZSwgbGV0IGl0IGdvLgogICAgIC8vIFdlIG9ubHkgYWxsb3cgdGhpcyB3aGVuIHVzaW5nIGEgbmV0
d29yayBwcm9jZXNzLCBhcyBvdGhlcndpc2UgdGhlIFdlYlByb2Nlc3MgbmVlZHMgdG8gcHJlc2Vy
dmUgaXRzIHNlc3Npb24gc3RhdGUuCi0gICAgaWYgKCFtX3Byb2Nlc3NQb29sLT51c2VzTmV0d29y
a1Byb2Nlc3MoKSB8fCBzdGF0ZSgpID09IFN0YXRlOjpUZXJtaW5hdGVkIHx8ICFjYW5UZXJtaW5h
dGVDaGlsZFByb2Nlc3MoKSkKKyAgICBpZiAoc3RhdGUoKSA9PSBTdGF0ZTo6VGVybWluYXRlZCB8
fCAhY2FuVGVybWluYXRlQ2hpbGRQcm9jZXNzKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIHNo
dXREb3duKCk7CkBAIC02NTUsOSArNjUyLDYgQEAgYm9vbCBXZWJQcm9jZXNzUHJveHk6OmNhblRl
cm1pbmF0ZUNoaWxkUAogICAgIGlmICghbV9wYWdlTWFwLmlzRW1wdHkoKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgaWYgKG1fZG93bmxvYWRQcm94eU1hcCAmJiAhbV9kb3dubG9hZFBy
b3h5TWFwLT5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQogICAgIGlmICghbV9w
ZW5kaW5nRGVsZXRlV2Vic2l0ZURhdGFDYWxsYmFja3MuaXNFbXB0eSgpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKQEAgLTcwMCwxNiArNjk0LDYgQEAgdm9pZCBXZWJQcm9jZXNzUHJveHk6OnVw
ZGF0ZVRleHRDaGVja2VyUwogICAgICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpTZXRU
ZXh0Q2hlY2tlclN0YXRlKFRleHRDaGVja2VyOjpzdGF0ZSgpKSwgMCk7CiB9CiAKLURvd25sb2Fk
UHJveHkqIFdlYlByb2Nlc3NQcm94eTo6Y3JlYXRlRG93bmxvYWRQcm94eShjb25zdCBSZXNvdXJj
ZVJlcXVlc3QmIHJlcXVlc3QpCi17Ci0gICAgQVNTRVJUKCFtX3Byb2Nlc3NQb29sLT51c2VzTmV0
d29ya1Byb2Nlc3MoKSk7Ci0KLSAgICBpZiAoIW1fZG93bmxvYWRQcm94eU1hcCkKLSAgICAgICAg
bV9kb3dubG9hZFByb3h5TWFwID0gc3RkOjptYWtlX3VuaXF1ZTxEb3dubG9hZFByb3h5TWFwPih0
aGlzKTsKLQotICAgIHJldHVybiBtX2Rvd25sb2FkUHJveHlNYXAtPmNyZWF0ZURvd25sb2FkUHJv
eHkobV9wcm9jZXNzUG9vbCwgcmVxdWVzdCk7Ci19Ci0KIHZvaWQgV2ViUHJvY2Vzc1Byb3h5Ojpk
aWRTYXZlVG9QYWdlQ2FjaGUoKQogewogICAgIG1fcHJvY2Vzc1Bvb2wtPnByb2Nlc3NEaWRDYWNo
ZVBhZ2UodGhpcyk7CkBAIC05NzIsMTQgKzk1NiwxMiBAQCB2b2lkIFdlYlByb2Nlc3NQcm94eTo6
ZGlkU2V0QXNzZXJ0aW9uU3RhCiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBBc3NlcnRpb25T
dGF0ZTo6QmFja2dyb3VuZDoKLSAgICAgICAgaWYgKHByb2Nlc3NQb29sKCkudXNlc05ldHdvcmtQ
cm9jZXNzKCkpCi0gICAgICAgICAgICBtX2JhY2tncm91bmRUb2tlbkZvck5ldHdvcmtQcm9jZXNz
ID0gcHJvY2Vzc1Bvb2woKS5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnRocm90dGxlcigpLmJhY2tn
cm91bmRBY3Rpdml0eVRva2VuKCk7CisgICAgICAgIG1fYmFja2dyb3VuZFRva2VuRm9yTmV0d29y
a1Byb2Nlc3MgPSBwcm9jZXNzUG9vbCgpLmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkudGhyb3R0bGVy
KCkuYmFja2dyb3VuZEFjdGl2aXR5VG9rZW4oKTsKICAgICAgICAgbV9mb3JlZ3JvdW5kVG9rZW5G
b3JOZXR3b3JrUHJvY2VzcyA9IG51bGxwdHI7CiAgICAgICAgIGJyZWFrOwogICAgIAogICAgIGNh
c2UgQXNzZXJ0aW9uU3RhdGU6OkZvcmVncm91bmQ6Ci0gICAgICAgIGlmIChwcm9jZXNzUG9vbCgp
LnVzZXNOZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgbV9mb3JlZ3JvdW5kVG9rZW5Gb3JO
ZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sKCkuZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS50aHJv
dHRsZXIoKS5mb3JlZ3JvdW5kQWN0aXZpdHlUb2tlbigpOworICAgICAgICBtX2ZvcmVncm91bmRU
b2tlbkZvck5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2woKS5lbnN1cmVOZXR3b3JrUHJvY2Vz
cygpLnRocm90dGxlcigpLmZvcmVncm91bmRBY3Rpdml0eVRva2VuKCk7CiAgICAgICAgIG1fYmFj
a2dyb3VuZFRva2VuRm9yTmV0d29ya1Byb2Nlc3MgPSBudWxscHRyOwogICAgICAgICBmb3IgKGF1
dG8mIHBhZ2UgOiBtX3BhZ2VNYXAudmFsdWVzKCkpCiAgICAgICAgICAgICBwYWdlLT5wcm9jZXNz
V2lsbEJlY29tZUZvcmVncm91bmQoKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9X
ZWJQcm9jZXNzUHJveHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
V2ViUHJvY2Vzc1Byb3h5LmgJKHJldmlzaW9uIDE5Mjc1MykKKysrIFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtNTgsNyArNTgsNiBA
QCBzdHJ1Y3QgUGx1Z2luSW5mbzsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLWNsYXNzIERvd25s
b2FkUHJveHlNYXA7CiBjbGFzcyBOZXR3b3JrUHJvY2Vzc1Byb3h5OwogY2xhc3MgV2ViQmFja0Zv
cndhcmRMaXN0SXRlbTsKIGNsYXNzIFdlYlBhZ2VHcm91cDsKQEAgLTEyMCw4ICsxMTksNiBAQCBw
dWJsaWM6CiAKICAgICBzdGF0aWMgYm9vbCBmdWxsS2V5Ym9hcmRBY2Nlc3NFbmFibGVkKCk7CiAK
LSAgICBEb3dubG9hZFByb3h5KiBjcmVhdGVEb3dubG9hZFByb3h5KGNvbnN0IFdlYkNvcmU6OlJl
c291cmNlUmVxdWVzdCYpOwotCiAgICAgdm9pZCBkaWRTYXZlVG9QYWdlQ2FjaGUoKTsKICAgICB2
b2lkIHJlbGVhc2VQYWdlQ2FjaGUoKTsKIApAQCAtMjQyLDcgKzIzOSw2IEBAIHByaXZhdGU6CiAg
ICAgSGFzaFNldDxWaXNpdGVkTGlua1N0b3JlKj4gbV92aXNpdGVkTGlua1N0b3JlczsKICAgICBI
YXNoU2V0PFdlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5Kj4gbV93ZWJVc2VyQ29udGVudENv
bnRyb2xsZXJQcm94aWVzOwogCi0gICAgc3RkOjp1bmlxdWVfcHRyPERvd25sb2FkUHJveHlNYXA+
IG1fZG93bmxvYWRQcm94eU1hcDsKICAgICBDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eSBtX2N1
c3RvbVByb3RvY29sTWFuYWdlclByb3h5OwogCiAgICAgSGFzaE1hcDx1aW50NjRfdCwgc3RkOjpm
dW5jdGlvbjx2b2lkIChXZWJzaXRlRGF0YSk+PiBtX3BlbmRpbmdGZXRjaFdlYnNpdGVEYXRhQ2Fs
bGJhY2tzOwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9BUElQcm9jZXNzUG9v
bENvbmZpZ3VyYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvQVBJUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmNwcAkocmV2aXNpb24gMTkyNzUzKQor
KysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9BUElQcm9jZXNzUG9vbENvbmZpZ3VyYXRp
b24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0Miw2IEBAIFJlZjxQcm9jZXNzUG9vbENv
bmZpZ3VyYXRpb24+IFByb2Nlc3NQb28KIAogICAgIGNvbmZpZ3VyYXRpb24tPm1fc2hvdWxkSGF2
ZUxlZ2FjeURhdGFTdG9yZSA9IHRydWU7CiAgICAgY29uZmlndXJhdGlvbi0+bV9wcm9jZXNzTW9k
ZWwgPSBXZWJLaXQ6OlByb2Nlc3NNb2RlbFNoYXJlZFNlY29uZGFyeVByb2Nlc3M7Ci0gICAgY29u
ZmlndXJhdGlvbi0+bV91c2VOZXR3b3JrUHJvY2VzcyA9IGZhbHNlOwogICAgIGNvbmZpZ3VyYXRp
b24tPm1fY2FjaGVNb2RlbCA9IFdlYktpdDo6Q2FjaGVNb2RlbERvY3VtZW50Vmlld2VyOwogCiAg
ICAgY29uZmlndXJhdGlvbi0+bV9hcHBsaWNhdGlvbkNhY2hlRGlyZWN0b3J5ID0gV2ViS2l0OjpX
ZWJQcm9jZXNzUG9vbDo6bGVnYWN5UGxhdGZvcm1EZWZhdWx0QXBwbGljYXRpb25DYWNoZURpcmVj
dG9yeSgpOwpAQCAtNzUsNyArNzQsNiBAQCBSZWY8UHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uPiBQ
cm9jZXNzUG9vCiAKICAgICBjb3B5LT5tX3Nob3VsZEhhdmVMZWdhY3lEYXRhU3RvcmUgPSB0aGlz
LT5tX3Nob3VsZEhhdmVMZWdhY3lEYXRhU3RvcmU7CiAgICAgY29weS0+bV9wcm9jZXNzTW9kZWwg
PSB0aGlzLT5tX3Byb2Nlc3NNb2RlbDsKLSAgICBjb3B5LT5tX3VzZU5ldHdvcmtQcm9jZXNzID0g
dGhpcy0+bV91c2VOZXR3b3JrUHJvY2VzczsKICAgICBjb3B5LT5tX21heGltdW1Qcm9jZXNzQ291
bnQgPSB0aGlzLT5tX21heGltdW1Qcm9jZXNzQ291bnQ7CiAgICAgY29weS0+bV9jYWNoZU1vZGVs
ID0gdGhpcy0+bV9jYWNoZU1vZGVsOwogICAgIGNvcHktPm1fZGlza0NhY2hlU2l6ZU92ZXJyaWRl
ID0gdGhpcy0+bV9kaXNrQ2FjaGVTaXplT3ZlcnJpZGU7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL0FQSVByb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQVBJUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9u
LmgJKHJldmlzaW9uIDE5Mjc1MykKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQVBJ
UHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDkgKzUxLDYg
QEAgcHVibGljOgogICAgIFdlYktpdDo6UHJvY2Vzc01vZGVsIHByb2Nlc3NNb2RlbCgpIGNvbnN0
IHsgcmV0dXJuIG1fcHJvY2Vzc01vZGVsOyB9CiAgICAgdm9pZCBzZXRQcm9jZXNzTW9kZWwoV2Vi
S2l0OjpQcm9jZXNzTW9kZWwgcHJvY2Vzc01vZGVsKSB7IG1fcHJvY2Vzc01vZGVsID0gcHJvY2Vz
c01vZGVsOyB9IAogCi0gICAgYm9vbCB1c2VOZXR3b3JrUHJvY2VzcygpIGNvbnN0IHsgcmV0dXJu
IG1fdXNlTmV0d29ya1Byb2Nlc3M7IH0KLSAgICB2b2lkIHNldFVzZU5ldHdvcmtQcm9jZXNzKGJv
b2wgdXNlTmV0d29ya1Byb2Nlc3MpIHsgbV91c2VOZXR3b3JrUHJvY2VzcyA9IHVzZU5ldHdvcmtQ
cm9jZXNzOyB9IAotCiAgICAgdW5zaWduZWQgbWF4aW11bVByb2Nlc3NDb3VudCgpIGNvbnN0IHsg
cmV0dXJuIG1fbWF4aW11bVByb2Nlc3NDb3VudDsgfQogICAgIHZvaWQgc2V0TWF4aW11bVByb2Nl
c3NDb3VudCh1bnNpZ25lZCBtYXhpbXVtUHJvY2Vzc0NvdW50KSB7IG1fbWF4aW11bVByb2Nlc3ND
b3VudCA9IG1heGltdW1Qcm9jZXNzQ291bnQ7IH0gCiAKQEAgLTk3LDcgKzk0LDYgQEAgcHJpdmF0
ZToKICAgICBib29sIG1fc2hvdWxkSGF2ZUxlZ2FjeURhdGFTdG9yZSB7IGZhbHNlIH07CiAKICAg
ICBXZWJLaXQ6OlByb2Nlc3NNb2RlbCBtX3Byb2Nlc3NNb2RlbCB7IFdlYktpdDo6UHJvY2Vzc01v
ZGVsTXVsdGlwbGVTZWNvbmRhcnlQcm9jZXNzZXMgfTsKLSAgICBib29sIG1fdXNlTmV0d29ya1By
b2Nlc3MgeyB0cnVlIH07CiAgICAgdW5zaWduZWQgbV9tYXhpbXVtUHJvY2Vzc0NvdW50IHsgMCB9
OwogICAgIFdlYktpdDo6Q2FjaGVNb2RlbCBtX2NhY2hlTW9kZWwgeyBXZWJLaXQ6OkNhY2hlTW9k
ZWxQcmltYXJ5V2ViQnJvd3NlciB9OwogICAgIGludDY0X3QgbV9kaXNrQ2FjaGVTaXplT3ZlcnJp
ZGUgeyAtMSB9OwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLQ29u
dGV4dC5jcHAJKHJldmlzaW9uIDE5Mjc1MykKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvQy9XS0NvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NTQsMTEgKzU1NCw2IEBAIHZv
aWQgV0tDb250ZXh0U2V0SmF2YVNjcmlwdEdhcmJhZ2VDb2xsZWMKICAgICB0b0ltcGwoY29udGV4
dFJlZiktPnNldEphdmFTY3JpcHRHYXJiYWdlQ29sbGVjdG9yVGltZXJFbmFibGVkKGVuYWJsZSk7
CiB9CiAKLXZvaWQgV0tDb250ZXh0U2V0VXNlc05ldHdvcmtQcm9jZXNzKFdLQ29udGV4dFJlZiBj
b250ZXh0UmVmLCBib29sIHVzZXNOZXR3b3JrUHJvY2VzcykKLXsKLSAgICB0b0ltcGwoY29udGV4
dFJlZiktPnNldFVzZXNOZXR3b3JrUHJvY2Vzcyh1c2VzTmV0d29ya1Byb2Nlc3MpOwotfQotCiB2
b2lkIFdLQ29udGV4dFVzZVRlc3RpbmdOZXR3b3JrU2Vzc2lvbihXS0NvbnRleHRSZWYgY29udGV4
dCkKIHsKICAgICB0b0ltcGwoY29udGV4dCktPnVzZVRlc3RpbmdOZXR3b3JrU2Vzc2lvbigpOwpJ
bmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dFByaXZhdGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0UHJp
dmF0ZS5oCShyZXZpc2lvbiAxOTI3NTMpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L0MvV0tDb250ZXh0UHJpdmF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03Nyw3ICs3Nyw3IEBAIFdL
X0VYUE9SVCB2b2lkIFdLQ29udGV4dFdhcm1Jbml0aWFsUHJvY2UKIAogLy8gRklYTUU6IFRoaXMg
ZnVuY3Rpb24gaXMgdGVtcG9yYXJ5IGFuZCB1c2VmdWwgZHVyaW5nIHRoZSBkZXZlbG9wbWVudCBv
ZiB0aGUgTmV0d29ya1Byb2Nlc3MgZmVhdHVyZS4KIC8vIEF0IHNvbWUgcG9pbnQgaXQgc2hvdWxk
IGJlIHJlbW92ZWQuCi1XS19FWFBPUlQgdm9pZCBXS0NvbnRleHRTZXRVc2VzTmV0d29ya1Byb2Nl
c3MoV0tDb250ZXh0UmVmIGNvbnRleHQsIGJvb2wgdXNlc05ldHdvcmtQcm9jZXNzKTsKK1dLX0VY
UE9SVCB2b2lkIFdLQ29udGV4dFNldFVzZXNOZXR3b3JrUHJvY2VzcyhXS0NvbnRleHRSZWYsIGJv
b2wpOwogCiAvLyBUZXN0IG9ubHkuIFNob3VsZCBiZSBjYWxsZWQgYmVmb3JlIGFueSBzZWNvbmRh
cnkgcHJvY2Vzc2VzIGFyZSBzdGFydGVkLgogV0tfRVhQT1JUIHZvaWQgV0tDb250ZXh0VXNlVGVz
dGluZ05ldHdvcmtTZXNzaW9uKFdLQ29udGV4dFJlZiBjb250ZXh0KTsKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcm9jZXNzR3JvdXAubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1Byb2Nlc3NHcm91cC5tbQko
cmV2aXNpb24gMTkyNzUzKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9X
S1Byb2Nlc3NHcm91cC5tbQkod29ya2luZyBjb3B5KQpAQCAtMTkzLDcgKzE5Myw2IEBAIC0gKGlk
KWluaXRXaXRoSW5qZWN0ZWRCdW5kbGVVUkw6KE5TVVJMICoKICAgICBhdXRvIGNvbmZpZ3VyYXRp
b24gPSBBUEk6OlByb2Nlc3NQb29sQ29uZmlndXJhdGlvbjo6Y3JlYXRlV2l0aExlZ2FjeU9wdGlv
bnMoKTsKICAgICBjb25maWd1cmF0aW9uLT5zZXRJbmplY3RlZEJ1bmRsZVBhdGgoYnVuZGxlVVJM
ID8gU3RyaW5nKGJ1bmRsZVVSTC5wYXRoKSA6IFN0cmluZygpKTsKICNpZiBQTEFURk9STShJT1Mp
Ci0gICAgY29uZmlndXJhdGlvbi0+c2V0VXNlTmV0d29ya1Byb2Nlc3ModHJ1ZSk7CiAgICAgY29u
ZmlndXJhdGlvbi0+c2V0UHJvY2Vzc01vZGVsKFByb2Nlc3NNb2RlbE11bHRpcGxlU2Vjb25kYXJ5
UHJvY2Vzc2VzKTsKICNlbmRpZgogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2VmbC9ld2tfY29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQuY3BwCShyZXZpc2lvbiAxOTI3NTMpCisrKyBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI3Nyw3ICsyNzcsNiBAQCB2b2lkIEV3a0NvbnRleHQ6OnNldFByb2Nlc3NNb2RlbChFd2tf
UHJvCiAgICAgaWYgKFdLQ29udGV4dEdldFByb2Nlc3NNb2RlbChtX2NvbnRleHQuZ2V0KCkpID09
IG5ld1dLUHJvY2Vzc01vZGVsKQogICAgICAgICByZXR1cm47CiAKLSAgICBXS0NvbnRleHRTZXRV
c2VzTmV0d29ya1Byb2Nlc3MobV9jb250ZXh0LmdldCgpLCBuZXdXS1Byb2Nlc3NNb2RlbCA9PSBr
V0tQcm9jZXNzTW9kZWxNdWx0aXBsZVNlY29uZGFyeVByb2Nlc3Nlcyk7CiAgICAgV0tDb250ZXh0
U2V0UHJvY2Vzc01vZGVsKG1fY29udGV4dC5nZXQoKSwgbmV3V0tQcm9jZXNzTW9kZWwpOwogfQog
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJDb250ZXh0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJL
aXRXZWJDb250ZXh0LmNwcAkocmV2aXNpb24gMTkyNzUzKQorKysgU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4
Niw3ICsyODYsNiBAQCBzdGF0aWMgdm9pZCB3ZWJraXRXZWJDb250ZXh0Q29uc3RydWN0ZWQoCiAg
ICAgQVBJOjpQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbjsKICAgICBjb25m
aWd1cmF0aW9uLnNldEluamVjdGVkQnVuZGxlUGF0aChXZWJDb3JlOjpmaWxlbmFtZVRvU3RyaW5n
KGJ1bmRsZUZpbGVuYW1lLmdldCgpKSk7CiAgICAgY29uZmlndXJhdGlvbi5zZXRQcm9jZXNzTW9k
ZWwoUHJvY2Vzc01vZGVsU2hhcmVkU2Vjb25kYXJ5UHJvY2Vzcyk7Ci0gICAgY29uZmlndXJhdGlv
bi5zZXRVc2VOZXR3b3JrUHJvY2VzcyhmYWxzZSk7CiAKICAgICBXZWJLaXRXZWJDb250ZXh0KiB3
ZWJDb250ZXh0ID0gV0VCS0lUX1dFQl9DT05URVhUKG9iamVjdCk7CiAgICAgV2ViS2l0V2ViQ29u
dGV4dFByaXZhdGUqIHByaXYgPSB3ZWJDb250ZXh0LT5wcml2OwpAQCAtMTE3NCw3ICsxMTczLDYg
QEAgdm9pZCB3ZWJraXRfd2ViX2NvbnRleHRfc2V0X3Byb2Nlc3NfbW9kZQogICAgIGlmIChuZXdQ
cm9jZXNzTW9kZWwgPT0gY29udGV4dC0+cHJpdi0+Y29udGV4dC0+cHJvY2Vzc01vZGVsKCkpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIGNvbnRleHQtPnByaXYtPmNvbnRleHQtPnNldFVzZXNOZXR3
b3JrUHJvY2VzcyhuZXdQcm9jZXNzTW9kZWwgPT0gUHJvY2Vzc01vZGVsTXVsdGlwbGVTZWNvbmRh
cnlQcm9jZXNzZXMpOwogICAgIGNvbnRleHQtPnByaXYtPmNvbnRleHQtPnNldFByb2Nlc3NNb2Rl
bChuZXdQcm9jZXNzTW9kZWwpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
Q29jb2EvV2ViUHJvY2Vzc1Bvb2xDb2NvYS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Bvb2xDb2NvYS5tbQkocmV2aXNpb24gMTkyNzUz
KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQb29sQ29jb2Eu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTExNCw3ICsxMTQsNyBAQCBzdGF0aWMgdm9pZCByZWdpc3Rl
clVzZXJEZWZhdWx0c0lmTmVlZGVkCiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnVwZGF0ZVByb2Nl
c3NTdXBwcmVzc2lvblN0YXRlKCkKIHsKLSAgICBpZiAodXNlc05ldHdvcmtQcm9jZXNzKCkgJiYg
bV9uZXR3b3JrUHJvY2VzcykKKyAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKICAgICAgICAgbV9u
ZXR3b3JrUHJvY2Vzcy0+c2V0UHJvY2Vzc1N1cHByZXNzaW9uRW5hYmxlZChwcm9jZXNzU3VwcHJl
c3Npb25FbmFibGVkKCkpOwogCiAjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCkBAIC0x
OTAsMTEgKzE5MCw2IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnBsYXRmb3JtSW5pdGlhbGl6ZVcK
IAogICAgIHBhcmFtZXRlcnMudWlQcm9jZXNzQnVuZGxlSWRlbnRpZmllciA9IFN0cmluZyhbW05T
QnVuZGxlIG1haW5CdW5kbGVdIGJ1bmRsZUlkZW50aWZpZXJdKTsKIAotICAgIGlmICghdXNlc05l
dHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgZm9yIChjb25zdCBhdXRvJiBzY2hlbWUgOiBnbG9i
YWxVUkxTY2hlbWVzV2l0aEN1c3RvbVByb3RvY29sSGFuZGxlcnMoKSkKLSAgICAgICAgICAgIHBh
cmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRGb3JDdXN0b21Qcm90b2NvbHMuYXBwZW5kKHNj
aGVtZSk7Ci0gICAgfQotCiAgICAgcGFyYW1ldGVycy5mb250V2hpdGVsaXN0ID0gbV9mb250V2hp
dGVsaXN0OwogCiAgICAgaWYgKG1fYnVuZGxlUGFyYW1ldGVycykgewpJbmRleDogU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHkuY3BwCShy
ZXZpc2lvbiAxOTI3NTMpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRG93bmxvYWRzL0Rv
d25sb2FkUHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MSwxMyArNzEsOCBAQCB2b2lkIERv
d25sb2FkUHJveHk6OmNhbmNlbCgpCiAgICAgaWYgKCFtX3Byb2Nlc3NQb29sKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBpZiAobV9wcm9jZXNzUG9vbC0+dXNlc05ldHdvcmtQcm9jZXNzKCkpIHsK
LSAgICAgICAgaWYgKE5ldHdvcmtQcm9jZXNzUHJveHkqIG5ldHdvcmtQcm9jZXNzID0gbV9wcm9j
ZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5j
b25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpDYW5jZWxEb3dubG9h
ZChtX2Rvd25sb2FkSUQpLCAwKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1fcHJv
Y2Vzc1Bvb2wtPnNlbmRUb0FsbFByb2Nlc3NlcyhNZXNzYWdlczo6V2ViUHJvY2Vzczo6Q2FuY2Vs
RG93bmxvYWQobV9kb3dubG9hZElEKSk7CisgICAgaWYgKE5ldHdvcmtQcm9jZXNzUHJveHkqIG5l
dHdvcmtQcm9jZXNzID0gbV9wcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKKyAgICAgICAg
bmV0d29ya1Byb2Nlc3MtPmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nl
c3M6OkNhbmNlbERvd25sb2FkKG1fZG93bmxvYWRJRCksIDApOwogfQogCiB2b2lkIERvd25sb2Fk
UHJveHk6OmludmFsaWRhdGUoKQpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9X
ZWJQcm9jZXNzUG9vbEVmbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL2VmbC9XZWJQcm9jZXNzUG9vbEVmbC5jcHAJKHJldmlzaW9uIDE5Mjc1MykKKysrIFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2ViUHJvY2Vzc1Bvb2xFZmwuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC05Myw3ICs5Myw2IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnBsYXRmb3JtSW5pdGlh
bGl6ZVcKICAgICBwYXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkRm9yQ3VzdG9tUHJvdG9j
b2xzID0gc3VwcGxlbWVudDxXZWJTb3VwQ3VzdG9tUHJvdG9jb2xSZXF1ZXN0TWFuYWdlcj4oKS0+
cmVnaXN0ZXJlZFNjaGVtZXNGb3JDdXN0b21Qcm90b2NvbHMoKTsKICAgICBzdXBwbGVtZW50PFdl
YkNvb2tpZU1hbmFnZXJQcm94eT4oKS0+Z2V0Q29va2llUGVyc2lzdGVudFN0b3JhZ2UocGFyYW1l
dGVycy5jb29raWVQZXJzaXN0ZW50U3RvcmFnZVBhdGgsIHBhcmFtZXRlcnMuY29va2llUGVyc2lz
dGVudFN0b3JhZ2VUeXBlKTsKICAgICBwYXJhbWV0ZXJzLmNvb2tpZUFjY2VwdFBvbGljeSA9IG1f
aW5pdGlhbEhUVFBDb29raWVBY2NlcHRQb2xpY3k7Ci0gICAgcGFyYW1ldGVycy5pZ25vcmVUTFNF
cnJvcnMgPSBtX2lnbm9yZVRMU0Vycm9yczsKICAgICBwYXJhbWV0ZXJzLmRpc2tDYWNoZURpcmVj
dG9yeSA9IG1fY29uZmlndXJhdGlvbi0+ZGlza0NhY2hlRGlyZWN0b3J5KCk7CiB9CiAKQEAgLTE0
Niw3ICsxNDUsNiBAQCBTdHJpbmcgV2ViUHJvY2Vzc1Bvb2w6OmxlZ2FjeVBsYXRmb3JtRGVmCiB2
b2lkIFdlYlByb2Nlc3NQb29sOjpzZXRJZ25vcmVUTFNFcnJvcnMoYm9vbCBpZ25vcmVUTFNFcnJv
cnMpCiB7CiAgICAgbV9pZ25vcmVUTFNFcnJvcnMgPSBpZ25vcmVUTFNFcnJvcnM7Ci0gICAgc2Vu
ZFRvQWxsUHJvY2Vzc2VzKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpTZXRJZ25vcmVUTFNFcnJvcnMo
bV9pZ25vcmVUTFNFcnJvcnMpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYlByb2Nlc3NQb29sR3RrLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYlByb2Nlc3NQb29sR3RrLmNw
cAkocmV2aXNpb24gMTkyNzUzKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJQ
cm9jZXNzUG9vbEd0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk1LDE2ICs5NSw2IEBAIHZvaWQg
V2ViUHJvY2Vzc1Bvb2w6OnBsYXRmb3JtSW5pdGlhbGl6ZVcKICAgICAgICAgcGFyYW1ldGVycy51
cmxTY2hlbWVzUmVnaXN0ZXJlZEFzTG9jYWwuYXBwZW5kKCJyZXNvdXJjZSIpOwogICAgIH0KIAot
ICAgIGlmICghdXNlc05ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgcGFyYW1ldGVycy51cmxT
Y2hlbWVzUmVnaXN0ZXJlZEZvckN1c3RvbVByb3RvY29scyA9IHN1cHBsZW1lbnQ8V2ViU291cEN1
c3RvbVByb3RvY29sUmVxdWVzdE1hbmFnZXI+KCktPnJlZ2lzdGVyZWRTY2hlbWVzRm9yQ3VzdG9t
UHJvdG9jb2xzKCk7Ci0KLSAgICAgICAgc3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJveHk+
KCktPmdldENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlKHBhcmFtZXRlcnMuY29va2llUGVyc2lzdGVu
dFN0b3JhZ2VQYXRoLCBwYXJhbWV0ZXJzLmNvb2tpZVBlcnNpc3RlbnRTdG9yYWdlVHlwZSk7Ci0g
ICAgICAgIHBhcmFtZXRlcnMuY29va2llQWNjZXB0UG9saWN5ID0gbV9pbml0aWFsSFRUUENvb2tp
ZUFjY2VwdFBvbGljeTsKLQotICAgICAgICBwYXJhbWV0ZXJzLmlnbm9yZVRMU0Vycm9ycyA9IG1f
aWdub3JlVExTRXJyb3JzOwotICAgICAgICBwYXJhbWV0ZXJzLmRpc2tDYWNoZURpcmVjdG9yeSA9
IG1fY29uZmlndXJhdGlvbi0+ZGlza0NhY2hlRGlyZWN0b3J5KCk7Ci0gICAgfQotCiAgICAgcGFy
YW1ldGVycy5tZW1vcnlDYWNoZURpc2FibGVkID0gbV9tZW1vcnlDYWNoZURpc2FibGVkIHx8IGNh
Y2hlTW9kZWwoKSA9PSBDYWNoZU1vZGVsRG9jdW1lbnRWaWV3ZXI7CiB9CiAKQEAgLTE0NiwxMSAr
MTM2LDEwIEBAIFN0cmluZyBXZWJQcm9jZXNzUG9vbDo6bGVnYWN5UGxhdGZvcm1EZWYKIHZvaWQg
V2ViUHJvY2Vzc1Bvb2w6OnNldElnbm9yZVRMU0Vycm9ycyhib29sIGlnbm9yZVRMU0Vycm9ycykK
IHsKICAgICBtX2lnbm9yZVRMU0Vycm9ycyA9IGlnbm9yZVRMU0Vycm9yczsKLSAgICBpZiAodXNl
c05ldHdvcmtQcm9jZXNzKCkgJiYgbmV0d29ya1Byb2Nlc3MoKSkgeworICAgIGlmIChuZXR3b3Jr
UHJvY2VzcygpKSB7CiAgICAgICAgIG5ldHdvcmtQcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6Ok5l
dHdvcmtQcm9jZXNzOjpTZXRJZ25vcmVUTFNFcnJvcnMobV9pZ25vcmVUTFNFcnJvcnMpLCAwKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBzZW5kVG9BbGxQcm9jZXNzZXMoTWVzc2FnZXM6
OldlYlByb2Nlc3M6OlNldElnbm9yZVRMU0Vycm9ycyhtX2lnbm9yZVRMU0Vycm9ycykpOwogfQog
CiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUHJvY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQcm9jZXNzLmNwcAkocmV2aXNpb24gMTkyNzUzKQorKysgU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQcm9jZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU2LDcgKzE1Niw2IEBAIFdl
YlByb2Nlc3M6OldlYlByb2Nlc3MoKQogICAgICwgbV9mdWxsS2V5Ym9hcmRBY2Nlc3NFbmFibGVk
KGZhbHNlKQogICAgICwgbV90ZXh0Q2hlY2tlclN0YXRlKCkKICAgICAsIG1faWNvbkRhdGFiYXNl
UHJveHkobmV3IFdlYkljb25EYXRhYmFzZVByb3h5KHRoaXMpKQotICAgICwgbV91c2VzTmV0d29y
a1Byb2Nlc3MoZmFsc2UpCiAgICAgLCBtX3dlYlJlc291cmNlTG9hZFNjaGVkdWxlcihuZXcgV2Vi
UmVzb3VyY2VMb2FkU2NoZWR1bGVyKQogICAgICwgbV9kbnNQcmVmZXRjaEh5c3RlcmVyaXMoW3Ro
aXNdKEh5c3RlcmVzaXNTdGF0ZSBzdGF0ZSkgeyBpZiAoc3RhdGUgPT0gSHlzdGVyZXNpc1N0YXRl
OjpTdG9wcGVkKSBtX2Ruc1ByZWZldGNoZWRIb3N0cy5jbGVhcigpOyB9KQogI2lmIEVOQUJMRShO
RVRTQ0FQRV9QTFVHSU5fQVBJKQpAQCAtMjQ1LDMyICsyNDQsMTAgQEAgdm9pZCBXZWJQcm9jZXNz
Ojppbml0aWFsaXplQ29ubmVjdGlvbihJUAogICAgIGNvbm5lY3Rpb24tPnNldE9ubHlTZW5kTWVz
c2FnZXNBc0Rpc3BhdGNoV2hlbldhaXRpbmdGb3JTeW5jUmVwbHlXaGVuUHJvY2Vzc2luZ1N1Y2hB
TWVzc2FnZSh0cnVlKTsKIH0KIAotdm9pZCBXZWJQcm9jZXNzOjpkaWRDcmVhdGVEb3dubG9hZCgp
Ci17Ci0gICAgZGlzYWJsZVRlcm1pbmF0aW9uKCk7Ci19Ci0KLXZvaWQgV2ViUHJvY2Vzczo6ZGlk
RGVzdHJveURvd25sb2FkKCkKLXsKLSAgICBlbmFibGVUZXJtaW5hdGlvbigpOwotfQotCi1JUEM6
OkNvbm5lY3Rpb24qIFdlYlByb2Nlc3M6OmRvd25sb2FkUHJveHlDb25uZWN0aW9uKCkKLXsKLSAg
ICByZXR1cm4gcGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKTsKLX0KLQotQXV0aGVudGljYXRpb25N
YW5hZ2VyJiBXZWJQcm9jZXNzOjpkb3dubG9hZHNBdXRoZW50aWNhdGlvbk1hbmFnZXIoKQotewot
ICAgIHJldHVybiAqc3VwcGxlbWVudDxBdXRoZW50aWNhdGlvbk1hbmFnZXI+KCk7Ci19Ci0KIHZv
aWQgV2ViUHJvY2Vzczo6aW5pdGlhbGl6ZVdlYlByb2Nlc3MoV2ViUHJvY2Vzc0NyZWF0aW9uUGFy
YW1ldGVycyYmIHBhcmFtZXRlcnMpCiB7CiAgICAgQVNTRVJUKG1fcGFnZU1hcC5pc0VtcHR5KCkp
OwogCi0gICAgbV91c2VzTmV0d29ya1Byb2Nlc3MgPSBwYXJhbWV0ZXJzLnVzZXNOZXR3b3JrUHJv
Y2VzczsKLQogI2lmIE9TKExJTlVYKQogICAgIFdlYkNvcmU6Ok1lbW9yeVByZXNzdXJlSGFuZGxl
cjo6UmVsaWVmTG9nZ2VyOjpzZXRMb2dnaW5nRW5hYmxlZChwYXJhbWV0ZXJzLnNob3VsZEVuYWJs
ZU1lbW9yeVByZXNzdXJlUmVsaWVmTG9nZ2luZyk7CiAjZW5kaWYKQEAgLTM1Miw4ICszMjksNyBA
QCB2b2lkIFdlYlByb2Nlc3M6OmluaXRpYWxpemVXZWJQcm9jZXNzKFdlCiAgICAgZW5zdXJlTmV0
d29ya1Byb2Nlc3NDb25uZWN0aW9uKCk7CiAKICNpZiBQTEFURk9STShDT0NPQSkKLSAgICBpZiAo
dXNlc05ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgIENvb2tpZVN0b3JhZ2VTaGltOjpzaW5nbGV0
b24oKS5pbml0aWFsaXplKCk7CisgICAgQ29va2llU3RvcmFnZVNoaW06OnNpbmdsZXRvbigpLmlu
aXRpYWxpemUoKTsKICNlbmRpZgogICAgIHNldFRlcm1pbmF0aW9uVGltZW91dChwYXJhbWV0ZXJz
LnRlcm1pbmF0aW9uVGltZW91dCk7CiAKQEAgLTM4Nyw5ICszNjMsNiBAQCB2b2lkIFdlYlByb2Nl
c3M6OmluaXRpYWxpemVXZWJQcm9jZXNzKFdlCiAKIHZvaWQgV2ViUHJvY2Vzczo6ZW5zdXJlTmV0
d29ya1Byb2Nlc3NDb25uZWN0aW9uKCkKIHsKLSAgICBpZiAoIW1fdXNlc05ldHdvcmtQcm9jZXNz
KQotICAgICAgICByZXR1cm47Ci0KICAgICBpZiAobV9uZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24p
CiAgICAgICAgIHJldHVybjsKIApAQCAtNDk4LDE0ICs0NzEsNiBAQCB2b2lkIFdlYlByb2Nlc3M6
OmRlc3Ryb3lQcml2YXRlQnJvd3NpbmdTCiAjZW5kaWYKIH0KIAotRG93bmxvYWRNYW5hZ2VyJiBX
ZWJQcm9jZXNzOjpkb3dubG9hZE1hbmFnZXIoKQotewotICAgIEFTU0VSVCghdXNlc05ldHdvcmtQ
cm9jZXNzKCkpOwotCi0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPERvd25sb2FkTWFuYWdlcj4g
ZG93bmxvYWRNYW5hZ2VyKHRoaXMpOwotICAgIHJldHVybiBkb3dubG9hZE1hbmFnZXI7Ci19Ci0K
ICNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKIFBsdWdpblByb2Nlc3NDb25uZWN0aW9u
TWFuYWdlciYgV2ViUHJvY2Vzczo6cGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb25NYW5hZ2VyKCkKIHsK
QEAgLTU2OCw3ICs1MzMsNiBAQCB2b2lkIFdlYlByb2Nlc3M6OnJlbW92ZVdlYlBhZ2UodWludDY0
X3QgCiBib29sIFdlYlByb2Nlc3M6OnNob3VsZFRlcm1pbmF0ZSgpCiB7CiAgICAgQVNTRVJUKG1f
cGFnZU1hcC5pc0VtcHR5KCkpOwotICAgIEFTU0VSVCh1c2VzTmV0d29ya1Byb2Nlc3MoKSB8fCAh
ZG93bmxvYWRNYW5hZ2VyKCkuaXNEb3dubG9hZGluZygpKTsKIAogICAgIC8vIEZJWE1FOiB0aGUg
U2hvdWxkVGVybWluYXRlIG1lc3NhZ2Ugc2hvdWxkIGFsc28gc2VuZCB0ZXJtaW5hdGlvbiBwYXJh
bWV0ZXJzLCBzdWNoIGFzIGFueSBzZXNzaW9uIGNvb2tpZXMgdGhhdCBuZWVkIHRvIGJlIHByZXNl
cnZlZC4KICAgICBib29sIHNob3VsZFRlcm1pbmF0ZSA9IGZhbHNlOwpAQCAtMTAxNywxNSArOTgx
LDggQEAgdm9pZCBXZWJQcm9jZXNzOjpzZXRJbmplY3RlZEJ1bmRsZVBhcmFtZQogICAgIGluamVj
dGVkQnVuZGxlLT5zZXRCdW5kbGVQYXJhbWV0ZXJzKHZhbHVlKTsKIH0KIAotYm9vbCBXZWJQcm9j
ZXNzOjp1c2VzTmV0d29ya1Byb2Nlc3MoKSBjb25zdAotewotICAgIHJldHVybiBtX3VzZXNOZXR3
b3JrUHJvY2VzczsKLX0KLQogTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKiBXZWJQcm9jZXNzOjpu
ZXR3b3JrQ29ubmVjdGlvbigpCiB7Ci0gICAgQVNTRVJUKG1fdXNlc05ldHdvcmtQcm9jZXNzKTsK
LQogICAgIC8vIElmIHdlJ3ZlIGxvc3Qgb3VyIGNvbm5lY3Rpb24gdG8gdGhlIG5ldHdvcmsgcHJv
Y2VzcyAoZS5nLiBpdCBjcmFzaGVkKSB0cnkgdG8gcmUtZXN0YWJsaXNoIGl0LgogICAgIGlmICgh
bV9uZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24pCiAgICAgICAgIGVuc3VyZU5ldHdvcmtQcm9jZXNz
Q29ubmVjdGlvbigpOwpAQCAtMTA5NCwyNyArMTA1MSw2IEBAIHZvaWQgV2ViUHJvY2Vzczo6ZW5z
dXJlV2ViVG9EYXRhYmFzZVByb2MKIAogI2VuZGlmIC8vIEVOQUJMRUQoREFUQUJBU0VfUFJPQ0VT
UykKIAotdm9pZCBXZWJQcm9jZXNzOjpkb3dubG9hZFJlcXVlc3QoU2Vzc2lvbklEIHNlc3Npb25J
RCwgdWludDY0X3QgZG93bmxvYWRJRCwgdWludDY0X3QgaW5pdGlhdGluZ1BhZ2VJRCwgY29uc3Qg
UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQotewotICAgIFdlYlBhZ2UqIGluaXRpYXRpbmdQYWdl
ID0gaW5pdGlhdGluZ1BhZ2VJRCA/IHdlYlBhZ2UoaW5pdGlhdGluZ1BhZ2VJRCkgOiAwOwotCi0g
ICAgUmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3RXaXRoT3JpZ2luYWxVUkwgPSByZXF1ZXN0OwotICAg
IGlmIChpbml0aWF0aW5nUGFnZSkKLSAgICAgICAgaW5pdGlhdGluZ1BhZ2UtPm1haW5GcmFtZSgp
LT5sb2FkZXIoKS5zZXRPcmlnaW5hbFVSTEZvckRvd25sb2FkUmVxdWVzdChyZXF1ZXN0V2l0aE9y
aWdpbmFsVVJMKTsKLQotICAgIGRvd25sb2FkTWFuYWdlcigpLnN0YXJ0RG93bmxvYWQoc2Vzc2lv
bklELCBkb3dubG9hZElELCByZXF1ZXN0V2l0aE9yaWdpbmFsVVJMKTsKLX0KLQotdm9pZCBXZWJQ
cm9jZXNzOjpyZXN1bWVEb3dubG9hZCh1aW50NjRfdCBkb3dubG9hZElELCBjb25zdCBJUEM6OkRh
dGFSZWZlcmVuY2UmIHJlc3VtZURhdGEsIGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgV2ViS2l0
OjpTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUmIHNhbmRib3hFeHRlbnNpb25IYW5kbGUpCi17Ci0g
ICAgZG93bmxvYWRNYW5hZ2VyKCkucmVzdW1lRG93bmxvYWQoZG93bmxvYWRJRCwgcmVzdW1lRGF0
YSwgcGF0aCwgc2FuZGJveEV4dGVuc2lvbkhhbmRsZSk7Ci19Ci0KLXZvaWQgV2ViUHJvY2Vzczo6
Y2FuY2VsRG93bmxvYWQodWludDY0X3QgZG93bmxvYWRJRCkKLXsKLSAgICBkb3dubG9hZE1hbmFn
ZXIoKS5jYW5jZWxEb3dubG9hZChkb3dubG9hZElEKTsKLX0KLQogdm9pZCBXZWJQcm9jZXNzOjpz
ZXRFbmhhbmNlZEFjY2Vzc2liaWxpdHkoYm9vbCBmbGFnKQogewogICAgIFdlYkNvcmU6OkFYT2Jq
ZWN0Q2FjaGU6OnNldEVuaGFuY2VkVXNlckludGVyZmFjZUFjY2Vzc2liaWxpdHkoZmxhZyk7CkBA
IC0xNDU2LDE2ICsxMzkyLDEyIEBAIHZvaWQgV2ViUHJvY2Vzczo6cHJlZmV0Y2hETlMoY29uc3Qg
U3RyaW4KICAgICBpZiAoaG9zdG5hbWUuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBpZiAodXNlc05ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgaWYgKG1fZG5zUHJlZmV0Y2hl
ZEhvc3RzLmFkZChob3N0bmFtZSkuaXNOZXdFbnRyeSkKLSAgICAgICAgICAgIG5ldHdvcmtDb25u
ZWN0aW9uKCktPmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rpb25U
b1dlYlByb2Nlc3M6OlByZWZldGNoRE5TKGhvc3RuYW1lKSwgMCk7Ci0gICAgICAgIC8vIFRoZSBE
TlMgcHJlZmV0Y2hlZCBob3N0cyBjYWNoZSBpcyBvbmx5IHRvIGF2b2lkIGFza2luZyBmb3IgdGhl
IHNhbWUgaG9zdHMgdG9vIG1hbnkgdGltZXMKLSAgICAgICAgLy8gaW4gYSB2ZXJ5IHNob3J0IHBl
cmlvZCBvZiB0aW1lLCBwcm9kdWNpbmcgYSBsb3Qgb2YgSVBDIHRyYWZmaWMuIFNvIHdlIGNsZWFy
IHRoaXMgY2FjaGUgYWZ0ZXIKLSAgICAgICAgLy8gc29tZSB0aW1lIG9mIG5vIEROUyByZXF1ZXN0
cy4KLSAgICAgICAgbV9kbnNQcmVmZXRjaEh5c3RlcmVyaXMuaW1wdWxzZSgpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotICAgIFdlYkNvcmU6OnByZWZldGNoRE5TKGhvc3RuYW1lKTsKKyAgICBp
ZiAobV9kbnNQcmVmZXRjaGVkSG9zdHMuYWRkKGhvc3RuYW1lKS5pc05ld0VudHJ5KQorICAgICAg
ICBuZXR3b3JrQ29ubmVjdGlvbigpLT5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6Ok5ldHdv
cmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpQcmVmZXRjaEROUyhob3N0bmFtZSksIDApOworICAg
IC8vIFRoZSBETlMgcHJlZmV0Y2hlZCBob3N0cyBjYWNoZSBpcyBvbmx5IHRvIGF2b2lkIGFza2lu
ZyBmb3IgdGhlIHNhbWUgaG9zdHMgdG9vIG1hbnkgdGltZXMKKyAgICAvLyBpbiBhIHZlcnkgc2hv
cnQgcGVyaW9kIG9mIHRpbWUsIHByb2R1Y2luZyBhIGxvdCBvZiBJUEMgdHJhZmZpYy4gU28gd2Ug
Y2xlYXIgdGhpcyBjYWNoZSBhZnRlcgorICAgIC8vIHNvbWUgdGltZSBvZiBubyBETlMgcmVxdWVz
dHMuCisgICAgbV9kbnNQcmVmZXRjaEh5c3RlcmVyaXMuaW1wdWxzZSgpOwogfQogCiB9IC8vIG5h
bWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vz
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5o
CShyZXZpc2lvbiAxOTI3NTMpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nl
c3MuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgsNiBAQAogCiAjaW5jbHVkZSAiQ2FjaGVN
b2RlbC5oIgogI2luY2x1ZGUgIkNoaWxkUHJvY2Vzcy5oIgotI2luY2x1ZGUgIkRvd25sb2FkTWFu
YWdlci5oIgogI2luY2x1ZGUgIkRyYXdpbmdBcmVhLmgiCiAjaW5jbHVkZSAiUGx1Z2luUHJvY2Vz
c0Nvbm5lY3Rpb25NYW5hZ2VyLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VDYWNoZXNUb0NsZWFyLmgi
CkBAIC03MSw3ICs3MCw2IEBAIHN0cnVjdCBTZWN1cml0eU9yaWdpbkRhdGE7CiAKIG5hbWVzcGFj
ZSBXZWJLaXQgewogCi1jbGFzcyBEb3dubG9hZE1hbmFnZXI7CiBjbGFzcyBFdmVudERpc3BhdGNo
ZXI7CiBjbGFzcyBJbmplY3RlZEJ1bmRsZTsKIGNsYXNzIE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlv
bjsKQEAgLTkzLDggKzkxLDcgQEAgc3RydWN0IFdlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM7
CiBjbGFzcyBXZWJUb0RhdGFiYXNlUHJvY2Vzc0Nvbm5lY3Rpb247CiAjZW5kaWYKIAotY2xhc3Mg
V2ViUHJvY2VzcyA6IHB1YmxpYyBDaGlsZFByb2Nlc3MsIHByaXZhdGUgRG93bmxvYWRNYW5hZ2Vy
OjpDbGllbnQgewotICAgIGZyaWVuZCBjbGFzcyBOZXZlckRlc3Ryb3llZDxEb3dubG9hZE1hbmFn
ZXI+OworY2xhc3MgV2ViUHJvY2VzcyA6IHB1YmxpYyBDaGlsZFByb2Nlc3MgewogcHVibGljOgog
ICAgIHN0YXRpYyBXZWJQcm9jZXNzJiBzaW5nbGV0b24oKTsKIApAQCAtMTQ0LDcgKzE0MSw2IEBA
IHB1YmxpYzoKICNlbmRpZgogICAgIAogICAgIGNvbnN0IFRleHRDaGVja2VyU3RhdGUmIHRleHRD
aGVja2VyU3RhdGUoKSBjb25zdCB7IHJldHVybiBtX3RleHRDaGVja2VyU3RhdGU7IH0KLSAgICBE
b3dubG9hZE1hbmFnZXImIGRvd25sb2FkTWFuYWdlcigpOwogCiAgICAgdm9pZCBjbGVhclJlc291
cmNlQ2FjaGVzKFJlc291cmNlQ2FjaGVzVG9DbGVhciA9IEFsbFJlc291cmNlQ2FjaGVzKTsKICAg
ICAKQEAgLTE1NCw4ICsxNTAsNiBAQCBwdWJsaWM6CiAKICAgICBFdmVudERpc3BhdGNoZXImIGV2
ZW50RGlzcGF0Y2hlcigpIHsgcmV0dXJuICptX2V2ZW50RGlzcGF0Y2hlcjsgfQogCi0gICAgYm9v
bCB1c2VzTmV0d29ya1Byb2Nlc3MoKSBjb25zdDsKLQogICAgIE5ldHdvcmtQcm9jZXNzQ29ubmVj
dGlvbiogbmV0d29ya0Nvbm5lY3Rpb24oKTsKICAgICB2b2lkIG5ldHdvcmtQcm9jZXNzQ29ubmVj
dGlvbkNsb3NlZChOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24qKTsKICAgICBXZWJSZXNvdXJjZUxv
YWRTY2hlZHVsZXImIHdlYlJlc291cmNlTG9hZFNjaGVkdWxlcigpOwpAQCAtMTgxLDEwICsxNzUs
NiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHVwZGF0ZUFjdGl2ZVBhZ2VzKCk7CiAKLSNpZiBVU0Uo
U09VUCkKLSAgICB2b2lkIGFsbG93U3BlY2lmaWNIVFRQU0NlcnRpZmljYXRlRm9ySG9zdChjb25z
dCBXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8mLCBjb25zdCBTdHJpbmcmIGhvc3QpOwotI2VuZGlm
Ci0KICAgICB2b2lkIHByb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHkoYm9vbCYgaGFuZGxlZCk7
CiAgICAgdm9pZCBwcmVwYXJlVG9TdXNwZW5kKCk7CiAgICAgdm9pZCBjYW5jZWxQcmVwYXJlVG9T
dXNwZW5kKCk7CkBAIC0yMTcsMTIgKzIwNyw2IEBAIHByaXZhdGU6CiAgICAgV2ViUHJvY2Vzcygp
OwogICAgIH5XZWJQcm9jZXNzKCk7CiAKLSAgICAvLyBEb3dubG9hZE1hbmFnZXI6OkNsaWVudC4K
LSAgICB2aXJ0dWFsIHZvaWQgZGlkQ3JlYXRlRG93bmxvYWQoKSBvdmVycmlkZTsKLSAgICB2aXJ0
dWFsIHZvaWQgZGlkRGVzdHJveURvd25sb2FkKCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBJUEM6
OkNvbm5lY3Rpb24qIGRvd25sb2FkUHJveHlDb25uZWN0aW9uKCkgb3ZlcnJpZGU7Ci0gICAgdmly
dHVhbCBBdXRoZW50aWNhdGlvbk1hbmFnZXImIGRvd25sb2Fkc0F1dGhlbnRpY2F0aW9uTWFuYWdl
cigpIG92ZXJyaWRlOwotCiAgICAgdm9pZCBpbml0aWFsaXplV2ViUHJvY2VzcyhXZWJQcm9jZXNz
Q3JlYXRpb25QYXJhbWV0ZXJzJiYpOwogICAgIHZvaWQgcGxhdGZvcm1Jbml0aWFsaXplV2ViUHJv
Y2VzcyhXZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJiYpOwogCkBAIC0yNTgsMTAgKzI0Miw2
IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzdGFydE1lbW9yeVNhbXBsZXIoY29uc3QgU2FuZGJveEV4
dGVuc2lvbjo6SGFuZGxlJiwgY29uc3QgU3RyaW5nJiwgY29uc3QgZG91YmxlKTsKICAgICB2b2lk
IHN0b3BNZW1vcnlTYW1wbGVyKCk7CiAKLSAgICB2b2lkIGRvd25sb2FkUmVxdWVzdChXZWJDb3Jl
OjpTZXNzaW9uSUQsIHVpbnQ2NF90IGRvd25sb2FkSUQsIHVpbnQ2NF90IGluaXRpYXRpbmdQYWdl
SUQsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYpOwotICAgIHZvaWQgcmVzdW1lRG93
bmxvYWQodWludDY0X3QgZG93bmxvYWRJRCwgY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJiByZXN1
bWVEYXRhLCBjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFNhbmRib3hFeHRlbnNpb246OkhhbmRs
ZSYpOwotICAgIHZvaWQgY2FuY2VsRG93bmxvYWQodWludDY0X3QgZG93bmxvYWRJRCk7Ci0KICAg
ICB2b2lkIHNldFRleHRDaGVja2VyU3RhdGUoY29uc3QgVGV4dENoZWNrZXJTdGF0ZSYpOwogICAg
IAogICAgIHZvaWQgZ2V0V2ViQ29yZVN0YXRpc3RpY3ModWludDY0X3QgY2FsbGJhY2tJRCk7CkBA
IC0yNzYsMTAgKzI1Niw2IEBAIHByaXZhdGU6CiAgICAgdm9pZCBkZWxldGVXZWJzaXRlRGF0YShX
ZWJDb3JlOjpTZXNzaW9uSUQsIHVpbnQ2NF90IHdlYnNpdGVEYXRhVHlwZXMsIHN0ZDo6Y2hyb25v
OjpzeXN0ZW1fY2xvY2s6OnRpbWVfcG9pbnQgbW9kaWZpZWRTaW5jZSwgdWludDY0X3QgY2FsbGJh
Y2tJRCk7CiAgICAgdm9pZCBkZWxldGVXZWJzaXRlRGF0YUZvck9yaWdpbnMoV2ViQ29yZTo6U2Vz
c2lvbklELCB1aW50NjRfdCB3ZWJzaXRlRGF0YVR5cGVzLCBjb25zdCBWZWN0b3I8V2ViQ29yZTo6
U2VjdXJpdHlPcmlnaW5EYXRhPiYgb3JpZ2lucywgdWludDY0X3QgY2FsbGJhY2tJRCk7CiAKLSNp
ZiBVU0UoU09VUCkKLSAgICB2b2lkIHNldElnbm9yZVRMU0Vycm9ycyhib29sKTsKLSNlbmRpZgot
CiAgICAgdm9pZCBzZXRNZW1vcnlDYWNoZURpc2FibGVkKGJvb2wpOwogCiAjaWYgRU5BQkxFKFNF
UlZJQ0VfQ09OVFJPTFMpCkBAIC0zNTgsNyArMzM0LDYgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQg
ZW5zdXJlTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKCk7CiAgICAgUmVmUHRyPE5ldHdvcmtQcm9j
ZXNzQ29ubmVjdGlvbj4gbV9uZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb247Ci0gICAgYm9vbCBtX3Vz
ZXNOZXR3b3JrUHJvY2VzczsKICAgICBXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIqIG1fd2ViUmVz
b3VyY2VMb2FkU2NoZWR1bGVyOwogICAgIEhhc2hTZXQ8U3RyaW5nPiBtX2Ruc1ByZWZldGNoZWRI
b3N0czsKICAgICBXZWJDb3JlOjpIeXN0ZXJlc2lzQWN0aXZpdHkgbV9kbnNQcmVmZXRjaEh5c3Rl
cmVyaXM7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MubWVzc2Fn
ZXMuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNz
Lm1lc3NhZ2VzLmluCShyZXZpc2lvbiAxOTI3NTMpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlByb2Nlc3MubWVzc2FnZXMuaW4JKHdvcmtpbmcgY29weSkKQEAgLTQ0LDkgKzQ0LDYg
QEAgbWVzc2FnZXMgLT4gV2ViUHJvY2VzcyBMZWdhY3lSZWNlaXZlciB7CiAgICAgU2V0U2hvdWxk
VXNlRm9udFNtb290aGluZyhib29sIHVzZUZvbnRTbW9vdGhpbmcpCiAgICAgVXNlclByZWZlcnJl
ZExhbmd1YWdlc0NoYW5nZWQoVmVjdG9yPFN0cmluZz4gbGFuZ3VhZ2VzKQogICAgIEZ1bGxLZXli
b2FyZEFjY2Vzc01vZGVDaGFuZ2VkKGJvb2wgZnVsbEtleWJvYXJkQWNjZXNzRW5hYmxlZCkKLSNp
ZiBVU0UoU09VUCkKLSAgICBTZXRJZ25vcmVUTFNFcnJvcnMoYm9vbCBpZ25vcmVUTFNFcnJvcnMp
Ci0jZW5kaWYKIAogICAgIC8vIExlZ2FjeSBwcml2YXRlIGJyb3dzaW5nIHNlc3Npb24gaXMgcGVy
IHByb2Nlc3MuIEluZGl2aWR1YWwgcGFnZXMgb3IgcGFnZSBncm91cHMgbWF5IHVzZSB0aGUgcHJp
dmF0ZSBzZXNzaW9uIG9yIHRoZSBkZWZhdWx0IG9uZSBhcyBhcHByb3ByaWF0ZS4KICAgICBFbnN1
cmVQcml2YXRlQnJvd3NpbmdTZXNzaW9uKFdlYkNvcmU6OlNlc3Npb25JRCBzZXNzaW9uSUQpCkBA
IC02MiwxMiArNTksNiBAQCBtZXNzYWdlcyAtPiBXZWJQcm9jZXNzIExlZ2FjeVJlY2VpdmVyIHsK
ICAgICB2b2lkIFN0YXJ0TWVtb3J5U2FtcGxlcihXZWJLaXQ6OlNhbmRib3hFeHRlbnNpb246Okhh
bmRsZSBzYW1wbGVMb2dGaWxlSGFuZGxlLCBTdHJpbmcgc2FtcGxlTG9nRmlsZVBhdGgsIGRvdWJs
ZSBpbnRlcnZhbCk7CiAgICAgdm9pZCBTdG9wTWVtb3J5U2FtcGxlcigpOwogCi0gICAgIyBEb3du
bG9hZHMuIFRoaXMgc2hvdWxkIHJlYWxseSBiZSBpbiBhIERvd25sb2FkLm1lc3NhZ2VzLmluLCBi
dXQgaXQgc2VlbWVkIHVubmVjZXNzYXJ5IHRvIGNyZWF0ZSBhIG5ldyBmaWxlIGp1c3QgZm9yCi0g
ICAgIyB0aHJlZSBtZXNzYWdlcy4KLSAgICBEb3dubG9hZFJlcXVlc3QoV2ViQ29yZTo6U2Vzc2lv
bklEIHNlc3Npb25JRCwgdWludDY0X3QgZG93bmxvYWRJRCwgdWludDY0X3QgaW5pdGlhdGluZ1Bh
Z2VJRCwgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3QpCi0gICAgUmVzdW1lRG93bmxv
YWQodWludDY0X3QgZG93bmxvYWRJRCwgSVBDOjpEYXRhUmVmZXJlbmNlIHJlc3VtZURhdGEsIFN0
cmluZyBwYXRoLCBXZWJLaXQ6OlNhbmRib3hFeHRlbnNpb246OkhhbmRsZSBzYW5kYm94RXh0ZW5z
aW9uSGFuZGxlKQotICAgIENhbmNlbERvd25sb2FkKHVpbnQ2NF90IGRvd25sb2FkSUQpCi0KICAg
ICBTZXRUZXh0Q2hlY2tlclN0YXRlKHN0cnVjdCBXZWJLaXQ6OlRleHRDaGVja2VyU3RhdGUgdGV4
dENoZWNrZXJTdGF0ZSkKIAogICAgIFNldEVuaGFuY2VkQWNjZXNzaWJpbGl0eShib29sIGZsYWcp
CkBAIC05MSwxMCArODIsNiBAQCBtZXNzYWdlcyAtPiBXZWJQcm9jZXNzIExlZ2FjeVJlY2VpdmVy
IHsKICAgICBTZXRRT1MoaW50IGxhdGVuY3lRT1MsIGludCB0aHJvdWdocHV0UU9TKQogI2VuZGlm
CiAKLSNpZiBVU0UoU09VUCkKLSAgICBBbGxvd1NwZWNpZmljSFRUUFNDZXJ0aWZpY2F0ZUZvckhv
c3QoV2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvIGNlcnRpZmljYXRlLCBTdHJpbmcgaG9zdCkKLSNl
bmRpZgotCiAgICAgU2V0TWVtb3J5Q2FjaGVEaXNhYmxlZChib29sIGRpc2FibGVkKTsKIAogI2lm
IEVOQUJMRShTRVJWSUNFX0NPTlRST0xTKQpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9GaWxlQVBJL0Jsb2JSZWdpc3RyeVByb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL0ZpbGVBUEkvQmxvYlJlZ2lzdHJ5UHJveHkuY3BwCShyZXZpc2lvbiAx
OTI3NTMpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0ZpbGVBUEkvQmxvYlJlZ2lzdHJ5
UHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw4ICszOCw2IEBAIG5hbWVzcGFjZSBXZWJL
aXQgewogCiB2b2lkIEJsb2JSZWdpc3RyeVByb3h5OjpyZWdpc3RlckZpbGVCbG9iVVJMKGNvbnN0
IFdlYkNvcmU6OlVSTCYgdXJsLCBQYXNzUmVmUHRyPEJsb2JEYXRhRmlsZVJlZmVyZW5jZT4gZmls
ZSwgY29uc3QgU3RyaW5nJiBjb250ZW50VHlwZSkKIHsKLSAgICBBU1NFUlQoV2ViUHJvY2Vzczo6
c2luZ2xldG9uKCkudXNlc05ldHdvcmtQcm9jZXNzKCkpOwotCiAgICAgU2FuZGJveEV4dGVuc2lv
bjo6SGFuZGxlIGV4dGVuc2lvbkhhbmRsZTsKIAogICAgIC8vIEZpbGUgcGF0aCBjYW4gYmUgZW1w
dHkgd2hlbiBzdWJtaXR0aW5nIGEgZm9ybSBmaWxlIGlucHV0IHdpdGhvdXQgYSBmaWxlLCBzZWUg
YnVnIDExMTc3OC4KQEAgLTUxLDM2ICs0OSwyNiBAQCB2b2lkIEJsb2JSZWdpc3RyeVByb3h5Ojpy
ZWdpc3RlckZpbGVCbG9iCiAKIHZvaWQgQmxvYlJlZ2lzdHJ5UHJveHk6OnJlZ2lzdGVyQmxvYlVS
TChjb25zdCBVUkwmIHVybCwgVmVjdG9yPEJsb2JQYXJ0PiBibG9iUGFydHMsIGNvbnN0IFN0cmlu
ZyYgY29udGVudFR5cGUpCiB7Ci0gICAgQVNTRVJUKFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnVz
ZXNOZXR3b3JrUHJvY2VzcygpKTsKLQogICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLm5ldHdv
cmtDb25uZWN0aW9uKCktPmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6TmV0d29ya0Nvbm5l
Y3Rpb25Ub1dlYlByb2Nlc3M6OlJlZ2lzdGVyQmxvYlVSTCh1cmwsIGJsb2JQYXJ0cywgY29udGVu
dFR5cGUpLCAwKTsKIH0KIAogdm9pZCBCbG9iUmVnaXN0cnlQcm94eTo6cmVnaXN0ZXJCbG9iVVJM
KGNvbnN0IFVSTCYgdXJsLCBjb25zdCBVUkwmIHNyY1VSTCkKIHsKLSAgICBBU1NFUlQoV2ViUHJv
Y2Vzczo6c2luZ2xldG9uKCkudXNlc05ldHdvcmtQcm9jZXNzKCkpOwotCiAgICAgV2ViUHJvY2Vz
czo6c2luZ2xldG9uKCkubmV0d29ya0Nvbm5lY3Rpb24oKS0+Y29ubmVjdGlvbigpLT5zZW5kKE1l
c3NhZ2VzOjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6UmVnaXN0ZXJCbG9iVVJMRnJv
bVVSTCh1cmwsIHNyY1VSTCksIDApOwogfQogCiB2b2lkIEJsb2JSZWdpc3RyeVByb3h5Ojp1bnJl
Z2lzdGVyQmxvYlVSTChjb25zdCBVUkwmIHVybCkKIHsKLSAgICBBU1NFUlQoV2ViUHJvY2Vzczo6
c2luZ2xldG9uKCkudXNlc05ldHdvcmtQcm9jZXNzKCkpOwotCiAgICAgV2ViUHJvY2Vzczo6c2lu
Z2xldG9uKCkubmV0d29ya0Nvbm5lY3Rpb24oKS0+Y29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2Vz
OjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6VW5yZWdpc3RlckJsb2JVUkwodXJsKSwg
MCk7CiB9CiAKIHZvaWQgQmxvYlJlZ2lzdHJ5UHJveHk6OnJlZ2lzdGVyQmxvYlVSTEZvclNsaWNl
KGNvbnN0IFVSTCYgdXJsLCBjb25zdCBVUkwmIHNyY1VSTCwgbG9uZyBsb25nIHN0YXJ0LCBsb25n
IGxvbmcgZW5kKQogewotICAgIEFTU0VSVChXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS51c2VzTmV0
d29ya1Byb2Nlc3MoKSk7Ci0KICAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5uZXR3b3JrQ29u
bmVjdGlvbigpLT5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtDb25uZWN0aW9u
VG9XZWJQcm9jZXNzOjpSZWdpc3RlckJsb2JVUkxGb3JTbGljZSh1cmwsIHNyY1VSTCwgc3RhcnQs
IGVuZCksIDApOwogfQogCiB1bnNpZ25lZCBsb25nIGxvbmcgQmxvYlJlZ2lzdHJ5UHJveHk6OmJs
b2JTaXplKGNvbnN0IFVSTCYgdXJsKQogewotICAgIEFTU0VSVChXZWJQcm9jZXNzOjpzaW5nbGV0
b24oKS51c2VzTmV0d29ya1Byb2Nlc3MoKSk7Ci0KICAgICB1aW50NjRfdCByZXN1bHRTaXplOwog
ICAgIGlmICghV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkubmV0d29ya0Nvbm5lY3Rpb24oKS0+Y29u
bmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nl
c3M6OkJsb2JTaXplKHVybCksIE1lc3NhZ2VzOjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vz
czo6QmxvYlNpemU6OlJlcGx5KHJlc3VsdFNpemUpLCAwKSkKICAgICAgICAgcmV0dXJuIDA7Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3Jt
U3RyYXRlZ2llcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuY3BwCShyZXZpc2lvbiAxOTI3NTMp
CisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3Jt
U3RyYXRlZ2llcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwOSwxMDEgKzEwOSw1NCBAQCBQbHVn
aW5TdHJhdGVneSogV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpjCiAKIFN0cmluZyBXZWJQbGF0Zm9y
bVN0cmF0ZWdpZXM6OmNvb2tpZXNGb3JET00oY29uc3QgTmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBz
ZXNzaW9uLCBjb25zdCBVUkwmIGZpcnN0UGFydHksIGNvbnN0IFVSTCYgdXJsKQogewotICAgIGF1
dG8mIHdlYlByb2Nlc3MgPSBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKTsKLSAgICBpZiAod2ViUHJv
Y2Vzcy51c2VzTmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICBTdHJpbmcgcmVzdWx0OwotICAg
ICAgICBpZiAoIXdlYlByb2Nlc3MubmV0d29ya0Nvbm5lY3Rpb24oKS0+Y29ubmVjdGlvbigpLT5z
ZW5kU3luYyhNZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OkNvb2tpZXNG
b3JET00oU2Vzc2lvblRyYWNrZXI6OnNlc3Npb25JRChzZXNzaW9uKSwgZmlyc3RQYXJ0eSwgdXJs
KSwgTWVzc2FnZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpDb29raWVzRm9yRE9N
OjpSZXBseShyZXN1bHQpLCAwKSkKLSAgICAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAgICByZXR1cm4gV2ViQ29yZTo6Y29va2llc0Zv
ckRPTShzZXNzaW9uLCBmaXJzdFBhcnR5LCB1cmwpOworICAgIFN0cmluZyByZXN1bHQ7CisgICAg
aWYgKCFXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5uZXR3b3JrQ29ubmVjdGlvbigpLT5jb25uZWN0
aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6
Q29va2llc0ZvckRPTShTZXNzaW9uVHJhY2tlcjo6c2Vzc2lvbklEKHNlc3Npb24pLCBmaXJzdFBh
cnR5LCB1cmwpLCBNZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OkNvb2tp
ZXNGb3JET006OlJlcGx5KHJlc3VsdCksIDApKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogdm9pZCBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OnNldENv
b2tpZXNGcm9tRE9NKGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgc2Vzc2lvbiwgY29uc3Qg
VVJMJiBmaXJzdFBhcnR5LCBjb25zdCBVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBjb29raWVTdHJp
bmcpCiB7Ci0gICAgYXV0byYgd2ViUHJvY2VzcyA9IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpOwot
ICAgIGlmICh3ZWJQcm9jZXNzLnVzZXNOZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgIHdlYlBy
b2Nlc3MubmV0d29ya0Nvbm5lY3Rpb24oKS0+Y29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpO
ZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6U2V0Q29va2llc0Zyb21ET00oU2Vzc2lvblRy
YWNrZXI6OnNlc3Npb25JRChzZXNzaW9uKSwgZmlyc3RQYXJ0eSwgdXJsLCBjb29raWVTdHJpbmcp
LCAwKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIFdlYkNvcmU6OnNldENvb2tpZXNG
cm9tRE9NKHNlc3Npb24sIGZpcnN0UGFydHksIHVybCwgY29va2llU3RyaW5nKTsKKyAgICBXZWJQ
cm9jZXNzOjpzaW5nbGV0b24oKS5uZXR3b3JrQ29ubmVjdGlvbigpLT5jb25uZWN0aW9uKCktPnNl
bmQoTWVzc2FnZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpTZXRDb29raWVzRnJv
bURPTShTZXNzaW9uVHJhY2tlcjo6c2Vzc2lvbklEKHNlc3Npb24pLCBmaXJzdFBhcnR5LCB1cmws
IGNvb2tpZVN0cmluZyksIDApOwogfQogCiBib29sIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6Y29v
a2llc0VuYWJsZWQoY29uc3QgTmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBzZXNzaW9uLCBjb25zdCBV
UkwmIGZpcnN0UGFydHksIGNvbnN0IFVSTCYgdXJsKQogewotICAgIGF1dG8mIHdlYlByb2Nlc3Mg
PSBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKTsKLSAgICBpZiAod2ViUHJvY2Vzcy51c2VzTmV0d29y
a1Byb2Nlc3MoKSkgewotICAgICAgICBib29sIHJlc3VsdDsKLSAgICAgICAgaWYgKCF3ZWJQcm9j
ZXNzLm5ldHdvcmtDb25uZWN0aW9uKCktPmNvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6
Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpDb29raWVzRW5hYmxlZChTZXNzaW9uVHJh
Y2tlcjo6c2Vzc2lvbklEKHNlc3Npb24pLCBmaXJzdFBhcnR5LCB1cmwpLCBNZXNzYWdlczo6TmV0
d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OkNvb2tpZXNFbmFibGVkOjpSZXBseShyZXN1bHQp
LCAwKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsK
LSAgICB9Ci0KLSAgICByZXR1cm4gV2ViQ29yZTo6Y29va2llc0VuYWJsZWQoc2Vzc2lvbiwgZmly
c3RQYXJ0eSwgdXJsKTsKKyAgICBib29sIHJlc3VsdDsKKyAgICBpZiAoIVdlYlByb2Nlc3M6OnNp
bmdsZXRvbigpLm5ldHdvcmtDb25uZWN0aW9uKCktPmNvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVz
c2FnZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpDb29raWVzRW5hYmxlZChTZXNz
aW9uVHJhY2tlcjo6c2Vzc2lvbklEKHNlc3Npb24pLCBmaXJzdFBhcnR5LCB1cmwpLCBNZXNzYWdl
czo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OkNvb2tpZXNFbmFibGVkOjpSZXBseShy
ZXN1bHQpLCAwKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiByZXN1bHQ7CiB9
CiAKIFN0cmluZyBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVs
ZFZhbHVlKGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgc2Vzc2lvbiwgY29uc3QgVVJMJiBm
aXJzdFBhcnR5LCBjb25zdCBVUkwmIHVybCkKIHsKLSAgICBhdXRvJiB3ZWJQcm9jZXNzID0gV2Vi
UHJvY2Vzczo6c2luZ2xldG9uKCk7Ci0gICAgaWYgKHdlYlByb2Nlc3MudXNlc05ldHdvcmtQcm9j
ZXNzKCkpIHsKLSAgICAgICAgU3RyaW5nIHJlc3VsdDsKLSAgICAgICAgaWYgKCF3ZWJQcm9jZXNz
Lm5ldHdvcmtDb25uZWN0aW9uKCktPmNvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6Ok5l
dHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpDb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1
ZShTZXNzaW9uVHJhY2tlcjo6c2Vzc2lvbklEKHNlc3Npb24pLCBmaXJzdFBhcnR5LCB1cmwpLCBN
ZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OkNvb2tpZVJlcXVlc3RIZWFk
ZXJGaWVsZFZhbHVlOjpSZXBseShyZXN1bHQpLCAwKSkKLSAgICAgICAgICAgIHJldHVybiBTdHJp
bmcoKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAgICByZXR1cm4gV2ViQ29y
ZTo6Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoc2Vzc2lvbiwgZmlyc3RQYXJ0eSwgdXJs
KTsKKyAgICBTdHJpbmcgcmVzdWx0OworICAgIGlmICghV2ViUHJvY2Vzczo6c2luZ2xldG9uKCku
bmV0d29ya0Nvbm5lY3Rpb24oKS0+Y29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6TmV0
d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OkNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVl
KFNlc3Npb25UcmFja2VyOjpzZXNzaW9uSUQoc2Vzc2lvbiksIGZpcnN0UGFydHksIHVybCksIE1l
c3NhZ2VzOjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6Q29va2llUmVxdWVzdEhlYWRl
ckZpZWxkVmFsdWU6OlJlcGx5KHJlc3VsdCksIDApKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7
CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogYm9vbCBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6Omdl
dFJhd0Nvb2tpZXMoY29uc3QgTmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBzZXNzaW9uLCBjb25zdCBV
UkwmIGZpcnN0UGFydHksIGNvbnN0IFVSTCYgdXJsLCBWZWN0b3I8Q29va2llPiYgcmF3Q29va2ll
cykKIHsKLSAgICBhdXRvJiB3ZWJQcm9jZXNzID0gV2ViUHJvY2Vzczo6c2luZ2xldG9uKCk7Ci0g
ICAgaWYgKHdlYlByb2Nlc3MudXNlc05ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgaWYgKCF3
ZWJQcm9jZXNzLm5ldHdvcmtDb25uZWN0aW9uKCktPmNvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVz
c2FnZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpHZXRSYXdDb29raWVzKFNlc3Np
b25UcmFja2VyOjpzZXNzaW9uSUQoc2Vzc2lvbiksIGZpcnN0UGFydHksIHVybCksIE1lc3NhZ2Vz
OjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6R2V0UmF3Q29va2llczo6UmVwbHkocmF3
Q29va2llcyksIDApKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gV2ViQ29yZTo6Z2V0UmF3Q29va2llcyhzZXNzaW9u
LCBmaXJzdFBhcnR5LCB1cmwsIHJhd0Nvb2tpZXMpOworICAgIGlmICghV2ViUHJvY2Vzczo6c2lu
Z2xldG9uKCkubmV0d29ya0Nvbm5lY3Rpb24oKS0+Y29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNz
YWdlczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OkdldFJhd0Nvb2tpZXMoU2Vzc2lv
blRyYWNrZXI6OnNlc3Npb25JRChzZXNzaW9uKSwgZmlyc3RQYXJ0eSwgdXJsKSwgTWVzc2FnZXM6
Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpHZXRSYXdDb29raWVzOjpSZXBseShyYXdD
b29raWVzKSwgMCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0K
IAogdm9pZCBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmRlbGV0ZUNvb2tpZShjb25zdCBOZXR3b3Jr
U3RvcmFnZVNlc3Npb24mIHNlc3Npb24sIGNvbnN0IFVSTCYgdXJsLCBjb25zdCBTdHJpbmcmIGNv
b2tpZU5hbWUpCiB7Ci0gICAgYXV0byYgd2ViUHJvY2VzcyA9IFdlYlByb2Nlc3M6OnNpbmdsZXRv
bigpOwotICAgIGlmICh3ZWJQcm9jZXNzLnVzZXNOZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAg
IHdlYlByb2Nlc3MubmV0d29ya0Nvbm5lY3Rpb24oKS0+Y29ubmVjdGlvbigpLT5zZW5kKE1lc3Nh
Z2VzOjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6RGVsZXRlQ29va2llKFNlc3Npb25U
cmFja2VyOjpzZXNzaW9uSUQoc2Vzc2lvbiksIHVybCwgY29va2llTmFtZSksIDApOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgV2ViQ29yZTo6ZGVsZXRlQ29va2llKHNlc3Npb24sIHVy
bCwgY29va2llTmFtZSk7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkubmV0d29ya0Nvbm5l
Y3Rpb24oKS0+Y29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrQ29ubmVjdGlvblRv
V2ViUHJvY2Vzczo6RGVsZXRlQ29va2llKFNlc3Npb25UcmFja2VyOjpzZXNzaW9uSUQoc2Vzc2lv
biksIHVybCwgY29va2llTmFtZSksIDApOwogfQogCiAvLyBMb2FkZXJTdHJhdGVneQogCiBSZXNv
dXJjZUxvYWRTY2hlZHVsZXIqIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6cmVzb3VyY2VMb2FkU2No
ZWR1bGVyKCkKIHsKLSAgICBzdGF0aWMgUmVzb3VyY2VMb2FkU2NoZWR1bGVyKiBzY2hlZHVsZXI7
Ci0gICAgaWYgKCFzY2hlZHVsZXIpIHsKLSAgICAgICAgYXV0byYgd2ViUHJvY2VzcyA9IFdlYlBy
b2Nlc3M6OnNpbmdsZXRvbigpOwotICAgICAgICBpZiAod2ViUHJvY2Vzcy51c2VzTmV0d29ya1By
b2Nlc3MoKSkKLSAgICAgICAgICAgIHNjaGVkdWxlciA9ICZ3ZWJQcm9jZXNzLndlYlJlc291cmNl
TG9hZFNjaGVkdWxlcigpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzY2hlZHVsZXIgPSBX
ZWJDb3JlOjpyZXNvdXJjZUxvYWRTY2hlZHVsZXIoKTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJu
IHNjaGVkdWxlcjsKKyAgICByZXR1cm4gJldlYlByb2Nlc3M6OnNpbmdsZXRvbigpLndlYlJlc291
cmNlTG9hZFNjaGVkdWxlcigpOwogfQogCiB2b2lkIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6bG9h
ZFJlc291cmNlU3luY2hyb25vdXNseShOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCwgdW5zaWdu
ZWQgbG9uZyByZXNvdXJjZUxvYWRJZGVudGlmaWVyLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJl
cXVlc3QsIFN0b3JlZENyZWRlbnRpYWxzIHN0b3JlZENyZWRlbnRpYWxzLCBDbGllbnRDcmVkZW50
aWFsUG9saWN5IGNsaWVudENyZWRlbnRpYWxQb2xpY3ksIFJlc291cmNlRXJyb3ImIGVycm9yLCBS
ZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwgVmVjdG9yPGNoYXI+JiBkYXRhKQogewotICAgIGF1
dG8mIHdlYlByb2Nlc3MgPSBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKTsKLSAgICBpZiAoIXdlYlBy
b2Nlc3MudXNlc05ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgTG9hZGVyU3RyYXRlZ3k6Omxv
YWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoY29udGV4dCwgcmVzb3VyY2VMb2FkSWRlbnRpZmllciwg
cmVxdWVzdCwgc3RvcmVkQ3JlZGVudGlhbHMsIGNsaWVudENyZWRlbnRpYWxQb2xpY3ksIGVycm9y
LCByZXNwb25zZSwgZGF0YSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBXZWJGcmFt
ZU5ldHdvcmtpbmdDb250ZXh0KiB3ZWJDb250ZXh0ID0gc3RhdGljX2Nhc3Q8V2ViRnJhbWVOZXR3
b3JraW5nQ29udGV4dCo+KGNvbnRleHQpOwogICAgIC8vIEZJWE1FOiBTb21lIGVudGl0aWVzIGlu
IFdlYkNvcmUgdXNlIFdlYkNvcmUncyAiRW1wdHlGcmFtZUxvYWRlckNsaWVudCIgaW5zdGVhZCBv
ZiBoYXZpbmcgYSBwcm9wZXIgV2ViRnJhbWVMb2FkZXJDbGllbnQuCiAgICAgLy8gRW1wdHlGcmFt
ZUxvYWRlckNsaWVudCBzaG91bGRuJ3QgZXhpc3QgYW5kIGV2ZXJ5dGhpbmcgc2hvdWxkIGJlIHVz
aW5nIGEgV2ViRnJhbWVMb2FkZXJDbGllbnQsCkBAIC0yMjcsNyArMTgwLDcgQEAgdm9pZCBXZWJQ
bGF0Zm9ybVN0cmF0ZWdpZXM6OmxvYWRSZXNvdXJjZQogCiAgICAgSGFuZ0RldGVjdGlvbkRpc2Fi
bGVyIGhhbmdEZXRlY3Rpb25EaXNhYmxlcjsKIAotICAgIGlmICghd2ViUHJvY2Vzcy5uZXR3b3Jr
Q29ubmVjdGlvbigpLT5jb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpOZXR3b3JrQ29u
bmVjdGlvblRvV2ViUHJvY2Vzczo6UGVyZm9ybVN5bmNocm9ub3VzTG9hZChsb2FkUGFyYW1ldGVy
cyksIE1lc3NhZ2VzOjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6UGVyZm9ybVN5bmNo
cm9ub3VzTG9hZDo6UmVwbHkoZXJyb3IsIHJlc3BvbnNlLCBkYXRhKSwgMCkpIHsKKyAgICBpZiAo
IVdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLm5ldHdvcmtDb25uZWN0aW9uKCktPmNvbm5lY3Rpb24o
KS0+c2VuZFN5bmMoTWVzc2FnZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpQZXJm
b3JtU3luY2hyb25vdXNMb2FkKGxvYWRQYXJhbWV0ZXJzKSwgTWVzc2FnZXM6Ok5ldHdvcmtDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzOjpQZXJmb3JtU3luY2hyb25vdXNMb2FkOjpSZXBseShlcnJvciwg
cmVzcG9uc2UsIGRhdGEpLCAwKSkgewogICAgICAgICByZXNwb25zZSA9IFJlc291cmNlUmVzcG9u
c2UoKTsKICAgICAgICAgZXJyb3IgPSBpbnRlcm5hbEVycm9yKHJlcXVlc3QudXJsKCkpOwogICAg
IH0KQEAgLTI0MCwxMiArMTkzLDYgQEAgdm9pZCBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmNyZWF0
ZVBpbmdIYQogICAgIGlmICghbmV0d29ya2luZ0NvbnRleHQpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIGF1dG8mIHdlYlByb2Nlc3MgPSBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKTsKLSAgICBpZiAo
IXdlYlByb2Nlc3MudXNlc05ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgTG9hZGVyU3RyYXRl
Z3k6OmNyZWF0ZVBpbmdIYW5kbGUobmV0d29ya2luZ0NvbnRleHQsIHJlcXVlc3QsIHNob3VsZFVz
ZUNyZWRlbnRpYWxTdG9yYWdlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIFdlYkZy
YW1lTmV0d29ya2luZ0NvbnRleHQqIHdlYkNvbnRleHQgPSBzdGF0aWNfY2FzdDxXZWJGcmFtZU5l
dHdvcmtpbmdDb250ZXh0Kj4obmV0d29ya2luZ0NvbnRleHQpOwogICAgIFdlYkZyYW1lTG9hZGVy
Q2xpZW50KiB3ZWJGcmFtZUxvYWRlckNsaWVudCA9IHdlYkNvbnRleHQtPndlYkZyYW1lTG9hZGVy
Q2xpZW50KCk7CiAgICAgV2ViRnJhbWUqIHdlYkZyYW1lID0gd2ViRnJhbWVMb2FkZXJDbGllbnQg
PyB3ZWJGcmFtZUxvYWRlckNsaWVudC0+d2ViRnJhbWUoKSA6IG51bGxwdHI7CkBAIC0yNTcsMTQg
KzIwNCwxMiBAQCB2b2lkIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6Y3JlYXRlUGluZ0hhCiAgICAg
bG9hZFBhcmFtZXRlcnMuYWxsb3dTdG9yZWRDcmVkZW50aWFscyA9IHNob3VsZFVzZUNyZWRlbnRp
YWxTdG9yYWdlID8gQWxsb3dTdG9yZWRDcmVkZW50aWFscyA6IERvTm90QWxsb3dTdG9yZWRDcmVk
ZW50aWFsczsKICAgICBsb2FkUGFyYW1ldGVycy5zaG91bGRDbGVhclJlZmVycmVyT25IVFRQU1Rv
SFRUUFJlZGlyZWN0ID0gbmV0d29ya2luZ0NvbnRleHQtPnNob3VsZENsZWFyUmVmZXJyZXJPbkhU
VFBTVG9IVFRQUmVkaXJlY3QoKTsKIAotICAgIHdlYlByb2Nlc3MubmV0d29ya0Nvbm5lY3Rpb24o
KS0+Y29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJv
Y2Vzczo6TG9hZFBpbmcobG9hZFBhcmFtZXRlcnMpLCAwKTsKKyAgICBXZWJQcm9jZXNzOjpzaW5n
bGV0b24oKS5uZXR3b3JrQ29ubmVjdGlvbigpLT5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6
Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpMb2FkUGluZyhsb2FkUGFyYW1ldGVycyks
IDApOwogfQogCiBCbG9iUmVnaXN0cnkqIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6Y3JlYXRlQmxv
YlJlZ2lzdHJ5KCkKIHsKLSAgICBpZiAoIVdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnVzZXNOZXR3
b3JrUHJvY2VzcygpKQotICAgICAgICByZXR1cm4gTG9hZGVyU3RyYXRlZ3k6OmNyZWF0ZUJsb2JS
ZWdpc3RyeSgpOwotICAgIHJldHVybiBuZXcgQmxvYlJlZ2lzdHJ5UHJveHk7ICAgIAorICAgIHJl
dHVybiBuZXcgQmxvYlJlZ2lzdHJ5UHJveHk7CiB9CiAKIC8vIFBsdWdpblN0cmF0ZWd5CkluZGV4
OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJGcmFtZS5jcHAJKHJl
dmlzaW9uIDE5Mjc1MykKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJG
cmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1NCwyMSArMjU0LDggQEAgdm9pZCBXZWJGcmFt
ZTo6c3RhcnREb3dubG9hZChjb25zdCBXZWJDbwogICAgIG1fcG9saWN5RG93bmxvYWRJRCA9IDA7
CiAKICAgICBhdXRvJiB3ZWJQcm9jZXNzID0gV2ViUHJvY2Vzczo6c2luZ2xldG9uKCk7Ci0jaWYg
VVNFKE5FVFdPUktfU0VTU0lPTikKLSAgICBBU1NFUlQod2ViUHJvY2Vzcy51c2VzTmV0d29ya1By
b2Nlc3MoKSk7Ci0jZW5kaWYKICAgICBTZXNzaW9uSUQgc2Vzc2lvbklEID0gcGFnZSgpID8gcGFn
ZSgpLT5zZXNzaW9uSUQoKSA6IFNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpOwotICAgIGlm
ICh3ZWJQcm9jZXNzLnVzZXNOZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgIHdlYlByb2Nlc3Mu
bmV0d29ya0Nvbm5lY3Rpb24oKS0+Y29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3Jr
Q29ubmVjdGlvblRvV2ViUHJvY2Vzczo6U3RhcnREb3dubG9hZChzZXNzaW9uSUQsIHBvbGljeURv
d25sb2FkSUQsIHJlcXVlc3QpLCAwKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotI2lmIFVT
RShORVRXT1JLX1NFU1NJT04pCi0gICAgLy8gVXNpbmcgTkVUV09SS19TRVNTSU9OIHJlcXVpcmVz
IHRoZSB1c2Ugb2YgYSBuZXR3b3JrIHByb2Nlc3MuCi0gICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKLSNlbHNlCi0gICAgd2ViUHJvY2Vzcy5kb3dubG9hZE1hbmFnZXIoKS5zdGFydERv
d25sb2FkKHNlc3Npb25JRCwgcG9saWN5RG93bmxvYWRJRCwgcmVxdWVzdCk7Ci0jZW5kaWYKKyAg
ICB3ZWJQcm9jZXNzLm5ldHdvcmtDb25uZWN0aW9uKCktPmNvbm5lY3Rpb24oKS0+c2VuZChNZXNz
YWdlczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OlN0YXJ0RG93bmxvYWQoc2Vzc2lv
bklELCBwb2xpY3lEb3dubG9hZElELCByZXF1ZXN0KSwgMCk7CiB9CiAKIHZvaWQgV2ViRnJhbWU6
OmNvbnZlcnRNYWluUmVzb3VyY2VMb2FkVG9Eb3dubG9hZChEb2N1bWVudExvYWRlciogZG9jdW1l
bnRMb2FkZXIsIFNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVx
dWVzdCwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCkBAIC0yODEsMzcgKzI2OCwx
NiBAQCB2b2lkIFdlYkZyYW1lOjpjb252ZXJ0TWFpblJlc291cmNlTG9hZFRvCiAgICAgU3VicmVz
b3VyY2VMb2FkZXIqIG1haW5SZXNvdXJjZUxvYWRlciA9IGRvY3VtZW50TG9hZGVyLT5tYWluUmVz
b3VyY2VMb2FkZXIoKTsKIAogICAgIGF1dG8mIHdlYlByb2Nlc3MgPSBXZWJQcm9jZXNzOjpzaW5n
bGV0b24oKTsKLSNpZiBVU0UoTkVUV09SS19TRVNTSU9OKQotICAgIEFTU0VSVCh3ZWJQcm9jZXNz
LnVzZXNOZXR3b3JrUHJvY2VzcygpKTsKLSNlbmRpZgotICAgIGlmICh3ZWJQcm9jZXNzLnVzZXNO
ZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgIC8vIFVzZSAwIHRvIGluZGljYXRlIHRoYXQgdGhl
IHJlc291cmNlIGxvYWQgY2FuJ3QgYmUgY29udmVydGVkIGFuZCBhIG5ldyBkb3dubG9hZCBtdXN0
IGJlIHN0YXJ0ZWQuCi0gICAgICAgIC8vIFRoaXMgY2FuIGhhcHBlbiBpZiB0aGVyZSBpcyBubyBs
b2FkZXIgYmVjYXVzZSB0aGUgbWFpbiByZXNvdXJjZSBpcyBpbiB0aGUgV2ViQ29yZSBtZW1vcnkg
Y2FjaGUsCi0gICAgICAgIC8vIG9yIGJlY2F1c2UgdGhlIGNvbnZlcnNpb24gd2FzIGF0dGVtcHRl
ZCB3aGVuIG5vdCBjYWxsaW5nIFN1YnJlc291cmNlTG9hZGVyOjpkaWRSZWNlaXZlUmVzcG9uc2Uo
KS4KLSAgICAgICAgdWludDY0X3QgbWFpblJlc291cmNlTG9hZElkZW50aWZpZXI7Ci0gICAgICAg
IGlmIChtYWluUmVzb3VyY2VMb2FkZXIpCi0gICAgICAgICAgICBtYWluUmVzb3VyY2VMb2FkSWRl
bnRpZmllciA9IG1haW5SZXNvdXJjZUxvYWRlci0+aWRlbnRpZmllcigpOwotICAgICAgICBlbHNl
Ci0gICAgICAgICAgICBtYWluUmVzb3VyY2VMb2FkSWRlbnRpZmllciA9IDA7Ci0KLSAgICAgICAg
d2ViUHJvY2Vzcy5uZXR3b3JrQ29ubmVjdGlvbigpLT5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2Fn
ZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpDb252ZXJ0TWFpblJlc291cmNlTG9h
ZFRvRG93bmxvYWQoc2Vzc2lvbklELCBtYWluUmVzb3VyY2VMb2FkSWRlbnRpZmllciwgcG9saWN5
RG93bmxvYWRJRCwgcmVxdWVzdCwgcmVzcG9uc2UpLCAwKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KKyAgICAvLyBVc2UgMCB0byBpbmRpY2F0ZSB0aGF0IHRoZSByZXNvdXJjZSBsb2FkIGNhbid0
IGJlIGNvbnZlcnRlZCBhbmQgYSBuZXcgZG93bmxvYWQgbXVzdCBiZSBzdGFydGVkLgorICAgIC8v
IFRoaXMgY2FuIGhhcHBlbiBpZiB0aGVyZSBpcyBubyBsb2FkZXIgYmVjYXVzZSB0aGUgbWFpbiBy
ZXNvdXJjZSBpcyBpbiB0aGUgV2ViQ29yZSBtZW1vcnkgY2FjaGUsCisgICAgLy8gb3IgYmVjYXVz
ZSB0aGUgY29udmVyc2lvbiB3YXMgYXR0ZW1wdGVkIHdoZW4gbm90IGNhbGxpbmcgU3VicmVzb3Vy
Y2VMb2FkZXI6OmRpZFJlY2VpdmVSZXNwb25zZSgpLgorICAgIHVpbnQ2NF90IG1haW5SZXNvdXJj
ZUxvYWRJZGVudGlmaWVyOworICAgIGlmIChtYWluUmVzb3VyY2VMb2FkZXIpCisgICAgICAgIG1h
aW5SZXNvdXJjZUxvYWRJZGVudGlmaWVyID0gbWFpblJlc291cmNlTG9hZGVyLT5pZGVudGlmaWVy
KCk7CisgICAgZWxzZQorICAgICAgICBtYWluUmVzb3VyY2VMb2FkSWRlbnRpZmllciA9IDA7CiAK
LSAgICBpZiAoIW1haW5SZXNvdXJjZUxvYWRlcikgewotICAgICAgICAvLyBUaGUgbWFpbiByZXNv
dXJjZSBoYXMgYWxyZWFkeSBiZWVuIGxvYWRlZC4gU3RhcnQgYSBuZXcgZG93bmxvYWQgaW5zdGVh
ZC4KLSNpZiAhVVNFKE5FVFdPUktfU0VTU0lPTikKLSAgICAgICAgd2ViUHJvY2Vzcy5kb3dubG9h
ZE1hbmFnZXIoKS5zdGFydERvd25sb2FkKHNlc3Npb25JRCwgcG9saWN5RG93bmxvYWRJRCwgcmVx
dWVzdCk7Ci0jZW5kaWYKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotI2lmIFVTRShORVRXT1JL
X1NFU1NJT04pCi0gICAgLy8gVXNpbmcgTkVUV09SS19TRVNTSU9OIHJlcXVpcmVzIHRoZSB1c2Ug
b2YgYSBuZXR3b3JrIHByb2Nlc3MuCi0gICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
LSNlbHNlCi0gICAgd2ViUHJvY2Vzcy5kb3dubG9hZE1hbmFnZXIoKS5jb252ZXJ0SGFuZGxlVG9E
b3dubG9hZChwb2xpY3lEb3dubG9hZElELCBkb2N1bWVudExvYWRlci0+bWFpblJlc291cmNlTG9h
ZGVyKCktPmhhbmRsZSgpLCByZXF1ZXN0LCByZXNwb25zZSk7Ci0jZW5kaWYKKyAgICB3ZWJQcm9j
ZXNzLm5ldHdvcmtDb25uZWN0aW9uKCktPmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6TmV0
d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OkNvbnZlcnRNYWluUmVzb3VyY2VMb2FkVG9Eb3du
bG9hZChzZXNzaW9uSUQsIG1haW5SZXNvdXJjZUxvYWRJZGVudGlmaWVyLCBwb2xpY3lEb3dubG9h
ZElELCByZXF1ZXN0LCByZXNwb25zZSksIDApOwogfQogCiBTdHJpbmcgV2ViRnJhbWU6OnNvdXJj
ZSgpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL3NvdXAvV2ViUHJvY2Vz
c1NvdXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mvc291cC9X
ZWJQcm9jZXNzU291cC5jcHAJKHJldmlzaW9uIDE5Mjc1MykKKysrIFNvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3Mvc291cC9XZWJQcm9jZXNzU291cC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDE4
ICs0OSw2IEBACiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1zdGF0aWMgdWludDY0X3QgZ2V0Q2Fj
aGVEaXNrRnJlZVNpemUoU291cENhY2hlKiBjYWNoZSkKLXsKLSAgICBBU1NFUlQoY2FjaGUpOwot
Ci0gICAgR1VuaXF1ZU91dFB0cjxjaGFyPiBjYWNoZURpcjsKLSAgICBnX29iamVjdF9nZXQoR19P
QkpFQ1QoY2FjaGUpLCAiY2FjaGUtZGlyIiwgJmNhY2hlRGlyLm91dFB0cigpLCBOVUxMKTsKLSAg
ICBpZiAoIWNhY2hlRGlyKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiBXZWJDb3Jl
OjpnZXRWb2x1bWVGcmVlU2l6ZUZvclBhdGgoY2FjaGVEaXIuZ2V0KCkpOwotfQotCiB2b2lkIFdl
YlByb2Nlc3M6OnBsYXRmb3JtU2V0Q2FjaGVNb2RlbChDYWNoZU1vZGVsIGNhY2hlTW9kZWwpCiB7
CiAgICAgdW5zaWduZWQgY2FjaGVUb3RhbENhcGFjaXR5ID0gMDsKQEAgLTczLDEyICs2MSw2IEBA
IHZvaWQgV2ViUHJvY2Vzczo6cGxhdGZvcm1TZXRDYWNoZU1vZGVsKEMKICAgICB1bnNpZ25lZCBs
b25nIHVybENhY2hlRGlza0NhcGFjaXR5ID0gMDsKIAogICAgIHVpbnQ2NF90IGRpc2tGcmVlU2l6
ZSA9IDA7Ci0gICAgU291cENhY2hlKiBjYWNoZSA9IG51bGxwdHI7Ci0KLSAgICBpZiAoIXVzZXNO
ZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgIGNhY2hlID0gV2ViQ29yZTo6U291cE5ldHdvcmtT
ZXNzaW9uOjpkZWZhdWx0U2Vzc2lvbigpLmNhY2hlKCk7Ci0gICAgICAgIGRpc2tGcmVlU2l6ZSA9
IGdldENhY2hlRGlza0ZyZWVTaXplKGNhY2hlKSAvIFdURjo6TUI7Ci0gICAgfQogCiAgICAgdWlu
dDY0X3QgbWVtU2l6ZSA9IFdURjo6cmFtU2l6ZSgpIC8gV1RGOjpNQjsKICAgICBjYWxjdWxhdGVD
YWNoZVNpemVzKGNhY2hlTW9kZWwsIG1lbVNpemUsIGRpc2tGcmVlU2l6ZSwKQEAgLTk0LDMzICs3
NiwxMCBAQCB2b2lkIFdlYlByb2Nlc3M6OnBsYXRmb3JtU2V0Q2FjaGVNb2RlbChDCiAjaWYgUExB
VEZPUk0oR1RLKQogICAgIFdlYkNvcmU6OlBhZ2VDYWNoZTo6c2luZ2xldG9uKCkuc2V0U2hvdWxk
Q2xlYXJCYWNraW5nU3RvcmVzKHRydWUpOwogI2VuZGlmCi0KLSAgICBpZiAoIXVzZXNOZXR3b3Jr
UHJvY2VzcygpKSB7Ci0gICAgICAgIGlmICh1cmxDYWNoZURpc2tDYXBhY2l0eSA+IHNvdXBfY2Fj
aGVfZ2V0X21heF9zaXplKGNhY2hlKSkKLSAgICAgICAgICAgIHNvdXBfY2FjaGVfc2V0X21heF9z
aXplKGNhY2hlLCB1cmxDYWNoZURpc2tDYXBhY2l0eSk7Ci0gICAgfQogfQogCiB2b2lkIFdlYlBy
b2Nlc3M6OnBsYXRmb3JtQ2xlYXJSZXNvdXJjZUNhY2hlcyhSZXNvdXJjZUNhY2hlc1RvQ2xlYXIg
Y2FjaGVzVG9DbGVhcikKIHsKLSAgICBpZiAoY2FjaGVzVG9DbGVhciA9PSBJbk1lbW9yeVJlc291
cmNlQ2FjaGVzT25seSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gSWYgd2UncmUgdXNpbmcg
dGhlIG5ldHdvcmsgcHJvY2VzcyB0aGVuIGl0IGlzIHRoZSBvbmx5IG9uZSB0aGF0IG5lZWRzIHRv
IGNsZWFyIHRoZSBkaXNrIGNhY2hlLgotICAgIGlmICh1c2VzTmV0d29ya1Byb2Nlc3MoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgc291cF9jYWNoZV9jbGVhcihXZWJDb3JlOjpTb3VwTmV0d29y
a1Nlc3Npb246OmRlZmF1bHRTZXNzaW9uKCkuY2FjaGUoKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHNl
dFNvdXBTZXNzaW9uQWNjZXB0TGFuZ3VhZ2UoY29uc3QgVmVjdG9yPFN0cmluZz4mIGxhbmd1YWdl
cykKLXsKLSAgICBXZWJDb3JlOjpTb3VwTmV0d29ya1Nlc3Npb246OmRlZmF1bHRTZXNzaW9uKCku
c2V0QWNjZXB0TGFuZ3VhZ2VzKGxhbmd1YWdlcyk7Ci19Ci0KLXN0YXRpYyB2b2lkIGxhbmd1YWdl
Q2hhbmdlZCh2b2lkKikKLXsKLSAgICBzZXRTb3VwU2Vzc2lvbkFjY2VwdExhbmd1YWdlKFdlYkNv
cmU6OnVzZXJQcmVmZXJyZWRMYW5ndWFnZXMoKSk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzczo6cGxh
dGZvcm1Jbml0aWFsaXplV2ViUHJvY2VzcyhXZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJiYg
cGFyYW1ldGVycykKQEAgLTEzNSw2MiArOTQsMTAgQEAgdm9pZCBXZWJQcm9jZXNzOjpwbGF0Zm9y
bUluaXRpYWxpemVXZWJQcgogICAgICAgICBzZWNjb21wRmlsdGVycy5pbml0aWFsaXplKCk7CiAg
ICAgfQogI2VuZGlmCi0KLSAgICBpZiAodXNlc05ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIEFTU0VSVCghcGFyYW1ldGVycy5kaXNrQ2FjaGVEaXJlY3RvcnkuaXNFbXB0
eSgpKTsKLQotICAgIC8vIFdlIHVzZWQgdG8gdXNlIHRoZSBnaXZlbiBjYWNoZSBkaXJlY3Rvcnkg
Zm9yIHRoZSBzb3VwIGNhY2hlLCBidXQgbm93IHdlIHVzZSBhIHN1YmRpcmVjdG9yeSB0byBhdm9p
ZAotICAgIC8vIGNvbmZsaWN0cyB3aXRoIG90aGVyIGNhY2hlIGZpbGVzIGluIHRoZSBzYW1lIGRp
cmVjdG9yeS4gUmVtb3ZlIHRoZSBvbGQgY2FjaGUgZmlsZXMgaWYgdGhleSBzdGlsbCBleGlzdC4K
LSAgICBXZWJDb3JlOjpTb3VwTmV0d29ya1Nlc3Npb246OmRlZmF1bHRTZXNzaW9uKCkuY2xlYXJD
YWNoZShXZWJDb3JlOjpkaXJlY3RvcnlOYW1lKHBhcmFtZXRlcnMuZGlza0NhY2hlRGlyZWN0b3J5
KSk7Ci0KLSNpZiBFTkFCTEUoTkVUV09SS19DQUNIRSkKLSAgICAvLyBXaGVuIG5ldHdvcmsgY2Fj
aGUgaXMgZW5hYmxlZCwgdGhlIGRpc2sgY2FjaGUgZGlyZWN0b3J5IGlzIHRoZSBuZXR3b3JrIHBy
b2Nlc3Mgb25lLgotICAgIENTdHJpbmcgZGlza0NhY2hlUGF0aCA9IFdlYkNvcmU6OnBhdGhCeUFw
cGVuZGluZ0NvbXBvbmVudChXZWJDb3JlOjpkaXJlY3RvcnlOYW1lKHBhcmFtZXRlcnMuZGlza0Nh
Y2hlRGlyZWN0b3J5KSwgIndlYmtpdCIpLnV0ZjgoKTsKLSNlbHNlCi0gICAgQ1N0cmluZyBkaXNr
Q2FjaGVQYXRoID0gcGFyYW1ldGVycy5kaXNrQ2FjaGVEaXJlY3RvcnkudXRmOCgpOwotI2VuZGlm
Ci0KLSAgICBHUmVmUHRyPFNvdXBDYWNoZT4gc291cENhY2hlID0gYWRvcHRHUmVmKHNvdXBfY2Fj
aGVfbmV3KGRpc2tDYWNoZVBhdGguZGF0YSgpLCBTT1VQX0NBQ0hFX1NJTkdMRV9VU0VSKSk7Ci0g
ICAgV2ViQ29yZTo6U291cE5ldHdvcmtTZXNzaW9uOjpkZWZhdWx0U2Vzc2lvbigpLnNldENhY2hl
KHNvdXBDYWNoZS5nZXQoKSk7Ci0gICAgLy8gU2V0IGFuIGluaXRpYWwgaHVnZSBtYXhfc2l6ZSBm
b3IgdGhlIFNvdXBDYWNoZSBzbyB0aGUgY2FsbCB0byBzb3VwX2NhY2hlX2xvYWQoKSB3b24ndCBl
dmljdCBhbnkgY2FjaGVkCi0gICAgLy8gcmVzb3VyY2UuIFRoZSBmaW5hbCBzaXplIG9mIHRoZSBj
YWNoZSB3aWxsIGJlIHNldCBieSBOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1TZXRDYWNoZU1vZGVs
KCkuCi0gICAgdW5zaWduZWQgaW5pdGlhbE1heFNpemUgPSBzb3VwX2NhY2hlX2dldF9tYXhfc2l6
ZShzb3VwQ2FjaGUuZ2V0KCkpOwotICAgIHNvdXBfY2FjaGVfc2V0X21heF9zaXplKHNvdXBDYWNo
ZS5nZXQoKSwgR19NQVhVSU5UKTsKLSAgICBzb3VwX2NhY2hlX2xvYWQoc291cENhY2hlLmdldCgp
KTsKLSAgICBzb3VwX2NhY2hlX3NldF9tYXhfc2l6ZShzb3VwQ2FjaGUuZ2V0KCksIGluaXRpYWxN
YXhTaXplKTsKLQotICAgIGlmICghcGFyYW1ldGVycy5jb29raWVQZXJzaXN0ZW50U3RvcmFnZVBh
dGguaXNFbXB0eSgpKSB7Ci0gICAgICAgIHN1cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlcj4oKS0+
c2V0Q29va2llUGVyc2lzdGVudFN0b3JhZ2UocGFyYW1ldGVycy5jb29raWVQZXJzaXN0ZW50U3Rv
cmFnZVBhdGgsCi0gICAgICAgICAgICBwYXJhbWV0ZXJzLmNvb2tpZVBlcnNpc3RlbnRTdG9yYWdl
VHlwZSk7Ci0gICAgfQotICAgIHN1cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlcj4oKS0+c2V0SFRU
UENvb2tpZUFjY2VwdFBvbGljeShwYXJhbWV0ZXJzLmNvb2tpZUFjY2VwdFBvbGljeSk7Ci0KLSAg
ICBpZiAoIXBhcmFtZXRlcnMubGFuZ3VhZ2VzLmlzRW1wdHkoKSkKLSAgICAgICAgc2V0U291cFNl
c3Npb25BY2NlcHRMYW5ndWFnZShwYXJhbWV0ZXJzLmxhbmd1YWdlcyk7Ci0KLSAgICBzZXRJZ25v
cmVUTFNFcnJvcnMocGFyYW1ldGVycy5pZ25vcmVUTFNFcnJvcnMpOwotCi0gICAgV2ViQ29yZTo6
YWRkTGFuZ3VhZ2VDaGFuZ2VPYnNlcnZlcih0aGlzLCBsYW5ndWFnZUNoYW5nZWQpOwogfQogCiB2
b2lkIFdlYlByb2Nlc3M6OnBsYXRmb3JtVGVybWluYXRlKCkKIHsKLSAgICBpZiAoIXVzZXNOZXR3
b3JrUHJvY2VzcygpKQotICAgICAgICBXZWJDb3JlOjpyZW1vdmVMYW5ndWFnZUNoYW5nZU9ic2Vy
dmVyKHRoaXMpOwotfQotCi12b2lkIFdlYlByb2Nlc3M6OnNldElnbm9yZVRMU0Vycm9ycyhib29s
IGlnbm9yZVRMU0Vycm9ycykKLXsKLSAgICBBU1NFUlQoIXVzZXNOZXR3b3JrUHJvY2VzcygpKTsK
LSAgICBXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6c2V0SWdub3JlU1NMRXJyb3JzKGlnbm9yZVRM
U0Vycm9ycyk7Ci19Ci0KLXZvaWQgV2ViUHJvY2Vzczo6YWxsb3dTcGVjaWZpY0hUVFBTQ2VydGlm
aWNhdGVGb3JIb3N0KGNvbnN0IFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbyYgY2VydGlmaWNhdGVJ
bmZvLCBjb25zdCBTdHJpbmcmIGhvc3QpCi17Ci0gICAgQVNTRVJUKCF1c2VzTmV0d29ya1Byb2Nl
c3MoKSk7Ci0gICAgV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OnNldENsaWVudENlcnRpZmljYXRl
KGhvc3QsIGNlcnRpZmljYXRlSW5mby5jZXJ0aWZpY2F0ZSgpKTsKIH0KIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CkluZGV4OiBUb29scy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvQ2hh
bmdlTG9nCShyZXZpc2lvbiAxOTI3NTgpCisrKyBUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMyArMSwxNyBAQAorMjAxNS0xMS0yMyAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJp
c3RlbnNlbkB3ZWJraXQub3JnPgorCisgICAgICAgIE1ha2UgdXNlc05ldHdvcmtQcm9jZXNzIGFs
d2F5cyB0cnVlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNTE1ODAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mi9HZW9sb2NhdGlvbi5jcHA6CisgICAgICAg
IChUZXN0V2ViS2l0QVBJOjpURVNUKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdDIvbWFjL0dldFBJREFmdGVyQWJvcnRlZFByb2Nlc3NMYXVuY2guY3BwOgorICAgICAgICAo
VGVzdFdlYktpdEFQSTo6VEVTVCk6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29u
dHJvbGxlci5jcHA6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpnZW5lcmF0ZVBhZ2VD
b25maWd1cmF0aW9uKToKKwogMjAxNS0xMS0yMyAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3Rl
bnNlbkB3ZWJraXQub3JnPgogCiAgICAgICAgIEZpeCBjcmFzaCBpbiB+V2ViUHJvY2Vzc1Bvb2wg
d2hlbiB1c2luZyBHZW9sb2NhdGlvbiB3aXRoIHVzZU5ldHdvcmtQcm9jZXNzPXRydWUKSW5kZXg6
IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mi9HZW9sb2NhdGlvbi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyL0dlb2xvY2F0aW9uLmNw
cAkocmV2aXNpb24gMTkyNzUzKQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQy
L0dlb2xvY2F0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUwLDcgKzI1MCw2IEBAIHN0cnVj
dCBHZW9sb2NhdGlvblRyYW5zaXRpb25Ub0hpZ2hBY2N1cmEKIFRFU1QoV2ViS2l0MiwgR2VvbG9j
YXRpb25UcmFuc2l0aW9uVG9IaWdoQWNjdXJhY3kpCiB7CiAgICAgV0tSZXRhaW5QdHI8V0tDb250
ZXh0UmVmPiBjb250ZXh0KEFkb3B0V0ssIFdLQ29udGV4dENyZWF0ZSgpKTsKLSAgICBXS0NvbnRl
eHRTZXRVc2VzTmV0d29ya1Byb2Nlc3MoY29udGV4dC5nZXQoKSwgdHJ1ZSk7CiAKICAgICBHZW9s
b2NhdGlvblRyYW5zaXRpb25Ub0hpZ2hBY2N1cmFjeVN0YXRlVHJhY2tlciBzdGF0ZVRyYWNrZXI7
CiAgICAgc2V0dXBHZW9sb2NhdGlvblByb3ZpZGVyKGNvbnRleHQuZ2V0KCksICZzdGF0ZVRyYWNr
ZXIpOwpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyL21hYy9HZXRQSURB
ZnRlckFib3J0ZWRQcm9jZXNzTGF1bmNoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdDIvbWFjL0dldFBJREFmdGVyQWJvcnRlZFByb2Nlc3NMYXVuY2gu
Y3BwCShyZXZpc2lvbiAxOTI3NTMpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dDIvbWFjL0dldFBJREFmdGVyQWJvcnRlZFByb2Nlc3NMYXVuY2guY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00Miw3ICs0Miw2IEBAIHN0YXRpYyB2b2lkIGRpZEZpbmlzaExvYWRGb3JGcmFtZShXS1Bh
Z2UKIFRFU1QoV2ViS2l0MiwgR2V0UElEQWZ0ZXJBYm9ydGVkUHJvY2Vzc0xhdW5jaCkKIHsKICAg
ICBXS1JldGFpblB0cjxXS0NvbnRleHRSZWY+IGNvbnRleHQoQWRvcHRXSywgV0tDb250ZXh0Q3Jl
YXRlKCkpOwotICAgIFdLQ29udGV4dFNldFVzZXNOZXR3b3JrUHJvY2Vzcyhjb250ZXh0LmdldCgp
LCB0cnVlKTsKIAogICAgIFBsYXRmb3JtV2ViVmlldyB3ZWJWaWV3KGNvbnRleHQuZ2V0KCkpOwog
CkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcAkocmV2aXNp
b24gMTkyNzUzKQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQwMSw3ICs0MDEsNiBAQCBXS1JldGFpblB0cjxXS1BhZ2VDb25m
aWd1cmF0aW9uUmVmPiBUZXN0CiAgICAgbV9nZW9sb2NhdGlvblByb3ZpZGVyID0gc3RkOjptYWtl
X3VuaXF1ZTxHZW9sb2NhdGlvblByb3ZpZGVyTW9jaz4obV9jb250ZXh0LmdldCgpKTsKIAogI2lm
IFBMQVRGT1JNKEVGTCkKLSAgICBXS0NvbnRleHRTZXRVc2VzTmV0d29ya1Byb2Nlc3MobV9jb250
ZXh0LmdldCgpLCBmYWxzZSk7CiAgICAgV0tDb250ZXh0U2V0UHJvY2Vzc01vZGVsKG1fY29udGV4
dC5nZXQoKSwga1dLUHJvY2Vzc01vZGVsU2hhcmVkU2Vjb25kYXJ5UHJvY2Vzcyk7CiAjZW5kaWYK
IAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>266141</attachid>
            <date>2015-11-24 11:49:50 -0800</date>
            <delta_ts>2015-11-24 11:50:33 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-151580-20151124114934.patch</filename>
            <type>text/plain</type>
            <size>75436</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5Mjc2NSkKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0MiBAQAorMjAxNS0xMS0yNCAgQWxleCBD
aHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgorCisgICAgICAgIE1ha2UgdXNl
c05ldHdvcmtQcm9jZXNzIGFsd2F5cyB0cnVlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNTE1ODAKKworICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBB
ZGxlci4KKworICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL21hYy9SZW1vdGVOZXR3b3JraW5nQ29u
dGV4dC5tbToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlTmV0d29ya2luZ0NvbnRleHQ6OmVuc3Vy
ZVByaXZhdGVCcm93c2luZ1Nlc3Npb24pOgorICAgICAgICAqIFNoYXJlZC9BUEkvYy9XS0RlcHJl
Y2F0ZWRGdW5jdGlvbnMuY3BwOgorICAgICAgICAoV0tJbnNwZWN0b3JUb2dnbGVKYXZhU2NyaXB0
UHJvZmlsaW5nKToKKyAgICAgICAgKFdLQ29udGV4dFNldFVzZXNOZXR3b3JrUHJvY2Vzcyk6Cisg
ICAgICAgIChXS0dyYXBoaWNzQ29udGV4dEdldENHQ29udGV4dCk6CisgICAgICAgICogU2hhcmVk
L05ldHdvcmsvQ3VzdG9tUHJvdG9jb2xzL0NvY29hL0N1c3RvbVByb3RvY29sTWFuYWdlckNvY29h
Lm1tOgorICAgICAgICAoV2ViS2l0OjpDdXN0b21Qcm90b2NvbE1hbmFnZXI6OmluaXRpYWxpemVD
b25uZWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyOjppbml0
aWFsaXplKToKKyAgICAgICAgKiBTaGFyZWQvTmV0d29yay9DdXN0b21Qcm90b2NvbHMvQ3VzdG9t
UHJvdG9jb2xNYW5hZ2VyLmg6CisgICAgICAgICogU2hhcmVkL05ldHdvcmsvQ3VzdG9tUHJvdG9j
b2xzL3NvdXAvQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyU291cC5jcHA6CisgICAgICAgIChXZWJLaXQ6
OkN1c3RvbVByb3RvY29sTWFuYWdlcjo6aW5pdGlhbGl6ZSk6CisgICAgICAgICogU2hhcmVkL1dl
YlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9j
ZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOjpXZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyczo6ZW5jb2RlKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyczo6ZGVjb2RlKToKKyAg
ICAgICAgKiBTaGFyZWQvV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oOgorICAgICAgICAq
IFVJUHJvY2Vzcy9BUEkvQVBJUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmNwcDoKKyAgICAgICAg
KEFQSTo6UHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uOjpjcmVhdGVXaXRoTGVnYWN5T3B0aW9ucyk6
CisgICAgICAgIChBUEk6OlByb2Nlc3NQb29sQ29uZmlndXJhdGlvbjo6Y29weSk6CisgICAgICAg
ICogVUlQcm9jZXNzL0FQSS9BUElQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24uaDoKKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0LmNwcDoKKyAgICAgICAgKFdLQ29udGV4dFNldEph
dmFTY3JpcHRHYXJiYWdlQ29sbGVjdG9yVGltZXJFbmFibGVkKToKKyAgICAgICAgKFdLQ29udGV4
dFVzZVRlc3RpbmdOZXR3b3JrU2Vzc2lvbik6CisgICAgICAgIChXS0NvbnRleHRTZXRVc2VzTmV0
d29ya1Byb2Nlc3MpOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS0NvbnRl
eHRQcml2YXRlLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1Byb2Nlc3NHcm91
cC5tbToKKyAgICAgICAgKC1bV0tQcm9jZXNzR3JvdXAgaW5pdFdpdGhJbmplY3RlZEJ1bmRsZVVS
TDpdKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dC5jcHA6CisgICAg
ICAgIChFd2tDb250ZXh0OjpzZXRQcm9jZXNzTW9kZWwpOgorICAgICAgICAqIFVJUHJvY2Vzcy9D
b2NvYS9XZWJQcm9jZXNzUG9vbENvY29hLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNz
UG9vbDo6dXBkYXRlUHJvY2Vzc1N1cHByZXNzaW9uU3RhdGUpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJQcm9jZXNzUG9vbDo6cGxhdGZvcm1Jbml0aWFsaXplV2ViUHJvY2Vzcyk6CisgICAgICAgICog
VUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6
RG93bmxvYWRQcm94eTo6Y2FuY2VsKToKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWRQcm94eTo6
aW52YWxpZGF0ZSk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94eS5j
cHA6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2V0SFRUUENvb2tp
ZUFjY2VwdFBvbGljeSk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6
Z2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeSk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlByb2Nl
c3NQb29sLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OldlYlByb2Nlc3NQ
b29sKToKKyAgICAgICAgKFdlYktpdDo6bV9wcm9jZXNzU3VwcHJlc3Npb25EaXNhYmxlZEZvclBh
Z2VDb3VudGVyKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6Om5ldHdvcmtpbmdQ
cm9jZXNzQ29ubmVjdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpsYW5n
dWFnZUNoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6dGV4dENoZWNr
ZXJTdGF0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6ZW5zdXJl
TmV0d29ya1Byb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2V0QW55
UGFnZUdyb3VwTWlnaHRIYXZlUHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCk6CisgICAgICAgIChXZWJL
aXQ6OldlYlByb2Nlc3NQb29sOjpjcmVhdGVOZXdXZWJQcm9jZXNzKToKKyAgICAgICAgKFdlYktp
dDo6V2ViUHJvY2Vzc1Bvb2w6OmRvd25sb2FkKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vz
c1Bvb2w6OnJlc3VtZURvd25sb2FkKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6
OnNldENhbkhhbmRsZUhUVFBTU2VydmVyVHJ1c3RFdmFsdWF0aW9uKToKKyAgICAgICAgKFdlYktp
dDo6V2ViUHJvY2Vzc1Bvb2w6OnNldENhY2hlTW9kZWwpOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
cm9jZXNzUG9vbDo6Y3JlYXRlRG93bmxvYWRQcm94eSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBy
b2Nlc3NQb29sOjphZGRNZXNzYWdlUmVjZWl2ZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9j
ZXNzUG9vbDo6YWxsb3dTcGVjaWZpY0hUVFBTQ2VydGlmaWNhdGVGb3JIb3N0KToKKyAgICAgICAg
KFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNldEhUVFBQaXBlbGluaW5nRW5hYmxlZCk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpyZXF1ZXN0TmV0d29ya2luZ1N0YXRpc3RpY3Mp
OgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2V0VXNlc05ldHdvcmtQcm9jZXNz
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnVzZXNOZXR3b3Jr
UHJvY2Vzcyk6IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmg6
CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZW5kVG9OZXR3b3JraW5nUHJvY2Vz
cyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZW5kVG9OZXR3b3JraW5nUHJv
Y2Vzc1JlbGF1bmNoaW5nSWZOZWNlc3NhcnkpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQcm9j
ZXNzUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUHJveHk6OnNodXREb3du
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Byb3h5OjpyZW1vdmVXZWJQYWdlKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Byb3h5OjpjYW5UZXJtaW5hdGVDaGlsZFByb2Nlc3Mp
OgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUHJveHk6OnVwZGF0ZVRleHRDaGVja2VyU3Rh
dGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUHJveHk6OmRpZFNhdmVUb1BhZ2VDYWNo
ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQcm94eTo6ZGlkU2V0QXNzZXJ0aW9uU3Rh
dGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUHJveHk6OmNyZWF0ZURvd25sb2FkUHJv
eHkpOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuaDoKKyAg
ICAgICAgKiBVSVByb2Nlc3MvZWZsL1dlYlByb2Nlc3NQb29sRWZsLmNwcDoKKyAgICAgICAgKFdl
YktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnBsYXRmb3JtSW5pdGlhbGl6ZVdlYlByb2Nlc3MpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2V0SWdub3JlVExTRXJyb3JzKToKKyAgICAg
ICAgKiBXZWJQcm9jZXNzL0ZpbGVBUEkvQmxvYlJlZ2lzdHJ5UHJveHkuY3BwOgorICAgICAgICAo
V2ViS2l0OjpCbG9iUmVnaXN0cnlQcm94eTo6cmVnaXN0ZXJGaWxlQmxvYlVSTCk6CisgICAgICAg
IChXZWJLaXQ6OkJsb2JSZWdpc3RyeVByb3h5OjpyZWdpc3RlckJsb2JVUkwpOgorICAgICAgICAo
V2ViS2l0OjpCbG9iUmVnaXN0cnlQcm94eTo6dW5yZWdpc3RlckJsb2JVUkwpOgorICAgICAgICAo
V2ViS2l0OjpCbG9iUmVnaXN0cnlQcm94eTo6cmVnaXN0ZXJCbG9iVVJMRm9yU2xpY2UpOgorICAg
ICAgICAoV2ViS2l0OjpCbG9iUmVnaXN0cnlQcm94eTo6YmxvYlNpemUpOgorICAgICAgICAqIFdl
YlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6V2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpjb29raWVzRm9yRE9NKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpzZXRDb29raWVzRnJvbURPTSk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlBsYXRmb3JtU3RyYXRlZ2llczo6Y29va2llc0VuYWJsZWQpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmNvb2tpZVJlcXVlc3RIZWFk
ZXJGaWVsZFZhbHVlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpn
ZXRSYXdDb29raWVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpk
ZWxldGVDb29raWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OnJl
c291cmNlTG9hZFNjaGVkdWxlcik6CisgICAgICAgIChXZWJLaXQ6OldlYlBsYXRmb3JtU3RyYXRl
Z2llczo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBs
YXRmb3JtU3RyYXRlZ2llczo6Y3JlYXRlUGluZ0hhbmRsZSk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlBsYXRmb3JtU3RyYXRlZ2llczo6Y3JlYXRlQmxvYlJlZ2lzdHJ5KToKKyAgICAgICAgKiBXZWJQ
cm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZTo6
c3RhcnREb3dubG9hZCk6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lOjpjb252ZXJ0TWFpblJl
c291cmNlTG9hZFRvRG93bmxvYWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZTo6c291cmNl
KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwOgorICAgICAgICAoV2ViS2l0
OjpXZWJQcm9jZXNzOjpXZWJQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6bV93ZWJTUUxpdGVE
YXRhYmFzZVRyYWNrZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzOjppbml0aWFsaXpl
Q29ubmVjdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3M6OmluaXRpYWxpemVXZWJQ
cm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzczo6ZW5zdXJlTmV0d29ya1Byb2Nl
c3NDb25uZWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzczo6ZGVzdHJveVByaXZh
dGVCcm93c2luZ1Nlc3Npb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzOjpwbHVnaW5Q
cm9jZXNzQ29ubmVjdGlvbk1hbmFnZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzOjpz
aG91bGRUZXJtaW5hdGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzOjpzZXRJbmplY3Rl
ZEJ1bmRsZVBhcmFtZXRlcnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzOjpuZXR3b3Jr
Q29ubmVjdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3M6OnNldEVuaGFuY2VkQWNj
ZXNzaWJpbGl0eSk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3M6OnByZWZldGNoRE5TKToK
KyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzczo6ZGlkQ3JlYXRlRG93bmxvYWQpOiBEZWxldGVk
LgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzOjpkaWREZXN0cm95RG93bmxvYWQpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzOjpkb3dubG9hZFByb3h5Q29ubmVjdGlv
bik6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3M6OmRvd25sb2Fkc0F1dGhl
bnRpY2F0aW9uTWFuYWdlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3M6
OmRvd25sb2FkTWFuYWdlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3M6
OnVzZXNOZXR3b3JrUHJvY2Vzcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nl
c3M6OmRvd25sb2FkUmVxdWVzdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nl
c3M6OnJlc3VtZURvd25sb2FkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vz
czo6Y2FuY2VsRG93bmxvYWQpOiBEZWxldGVkLgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUHJv
Y2Vzcy5oOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzOjp0ZXh0Q2hlY2tlclN0YXRlKToK
KyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzczo6ZXZlbnREaXNwYXRjaGVyKToKKyAgICAgICAg
KiBXZWJQcm9jZXNzL1dlYlByb2Nlc3MubWVzc2FnZXMuaW46CisgICAgICAgICogV2ViUHJvY2Vz
cy9zb3VwL1dlYlByb2Nlc3NTb3VwLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzczo6
cGxhdGZvcm1TZXRDYWNoZU1vZGVsKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzczo6cGxh
dGZvcm1DbGVhclJlc291cmNlQ2FjaGVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzczo6
cGxhdGZvcm1Jbml0aWFsaXplV2ViUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nl
c3M6OnBsYXRmb3JtVGVybWluYXRlKToKKyAgICAgICAgKFdlYktpdDo6Z2V0Q2FjaGVEaXNrRnJl
ZVNpemUpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpzZXRTb3VwU2Vzc2lvbkFjY2VwdExh
bmd1YWdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6bGFuZ3VhZ2VDaGFuZ2VkKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzczo6c2V0SWdub3JlVExTRXJyb3JzKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzczo6YWxsb3dTcGVjaWZpY0hUVFBT
Q2VydGlmaWNhdGVGb3JIb3N0KTogRGVsZXRlZC4KKwogMjAxNS0xMS0yMyAgQ2FybG9zIEdhcmNp
YSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dUS10gVXNlIHRoZSBu
ZXR3b3JrIHByb2Nlc3MgdW5jb25kaXRpb25hbGx5CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9OZXR3
b3JrUHJvY2Vzcy9tYWMvUmVtb3RlTmV0d29ya2luZ0NvbnRleHQubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvbWFjL1JlbW90ZU5ldHdvcmtpbmdDb250ZXh0
Lm1tCShyZXZpc2lvbiAxOTI3NjUpCisrKyBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9t
YWMvUmVtb3RlTmV0d29ya2luZ0NvbnRleHQubW0JKHdvcmtpbmcgY29weSkKQEAgLTkzLDggKzkz
LDEzIEBAIHZvaWQgUmVtb3RlTmV0d29ya2luZ0NvbnRleHQ6OmVuc3VyZVByaXYKICAgICBpZiAo
U2Vzc2lvblRyYWNrZXI6OnN0b3JhZ2VTZXNzaW9uKHNlc3Npb25JRCkpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIEFTU0VSVCghU2Vzc2lvblRyYWNrZXI6OmdldElkZW50aWZpZXJCYXNlKCkuaXNO
dWxsKCkpOwotICAgIFNlc3Npb25UcmFja2VyOjpzZXRTZXNzaW9uKHNlc3Npb25JRCwgTmV0d29y
a1N0b3JhZ2VTZXNzaW9uOjpjcmVhdGVQcml2YXRlQnJvd3NpbmdTZXNzaW9uKFNlc3Npb25UcmFj
a2VyOjpnZXRJZGVudGlmaWVyQmFzZSgpICsgJy4nICsgU3RyaW5nOjpudW1iZXIoc2Vzc2lvbklE
LnNlc3Npb25JRCgpKSkKKyAgICBTdHJpbmcgYmFzZTsKKyAgICBpZiAoU2Vzc2lvblRyYWNrZXI6
OmdldElkZW50aWZpZXJCYXNlKCkuaXNOdWxsKCkpCisgICAgICAgIGJhc2UgPSBbW05TQnVuZGxl
IG1haW5CdW5kbGVdIGJ1bmRsZUlkZW50aWZpZXJdOworICAgIGVsc2UKKyAgICAgICAgYmFzZSA9
IFNlc3Npb25UcmFja2VyOjpnZXRJZGVudGlmaWVyQmFzZSgpOworCisgICAgU2Vzc2lvblRyYWNr
ZXI6OnNldFNlc3Npb24oc2Vzc2lvbklELCBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmNyZWF0ZVBy
aXZhdGVCcm93c2luZ1Nlc3Npb24oYmFzZSArICcuJyArIFN0cmluZzo6bnVtYmVyKHNlc3Npb25J
RC5zZXNzaW9uSUQoKSkpCiAjaWYgVVNFKE5FVFdPUktfU0VTU0lPTikKICAgICAgICAgLCBzdGQ6
Om1ha2VfdW5pcXVlPE5ldHdvcmtTZXNzaW9uPihOZXR3b3JrU2Vzc2lvbjo6VHlwZTo6RXBoZW1l
cmFsLCBzZXNzaW9uSUQpCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJQ
cm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAJKHJldmlzaW9uIDE5Mjc2
NSkKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsNyArNDMsNiBAQCBXZWJQcm9jZXNzQ3JlYXRpb25Q
YXJhbWV0ZXJzOjpXZWJQcm9jZXNzCiAgICAgLCBzaG91bGRFbmFibGVKSVQoZmFsc2UpCiAgICAg
LCBzaG91bGRFbmFibGVGVExKSVQoZmFsc2UpCiAjZW5kaWYKLSAgICAsIHVzZXNOZXR3b3JrUHJv
Y2VzcyhmYWxzZSkKICAgICAsIG1lbW9yeUNhY2hlRGlzYWJsZWQoZmFsc2UpCiAjaWYgRU5BQkxF
KFNFUlZJQ0VfQ09OVFJPTFMpCiAgICAgLCBoYXNJbWFnZVNlcnZpY2VzKGZhbHNlKQpAQCAtOTEs
MTQgKzkwLDYgQEAgdm9pZCBXZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOjplbmNvZAogI2lm
IEVOQUJMRShDQUNIRV9QQVJUSVRJT05JTkcpCiAgICAgZW5jb2RlciA8PCB1cmxTY2hlbWVzUmVn
aXN0ZXJlZEFzQ2FjaGVQYXJ0aXRpb25lZDsKICNlbmRpZgotICAgIGVuY29kZXIgPDwgdXJsU2No
ZW1lc1JlZ2lzdGVyZWRGb3JDdXN0b21Qcm90b2NvbHM7Ci0jaWYgVVNFKFNPVVApCi0gICAgZW5j
b2RlciA8PCBkaXNrQ2FjaGVEaXJlY3Rvcnk7Ci0gICAgZW5jb2RlciA8PCBjb29raWVQZXJzaXN0
ZW50U3RvcmFnZVBhdGg7Ci0gICAgZW5jb2RlciA8PCBjb29raWVQZXJzaXN0ZW50U3RvcmFnZVR5
cGU7Ci0gICAgZW5jb2Rlci5lbmNvZGVFbnVtKGNvb2tpZUFjY2VwdFBvbGljeSk7Ci0gICAgZW5j
b2RlciA8PCBpZ25vcmVUTFNFcnJvcnM7Ci0jZW5kaWYKICAgICBlbmNvZGVyLmVuY29kZUVudW0o
Y2FjaGVNb2RlbCk7CiAgICAgZW5jb2RlciA8PCBzaG91bGRBbHdheXNVc2VDb21wbGV4VGV4dENv
ZGVQYXRoOwogICAgIGVuY29kZXIgPDwgc2hvdWxkRW5hYmxlTWVtb3J5UHJlc3N1cmVSZWxpZWZM
b2dnaW5nOwpAQCAtMTMxLDggKzEyMiw2IEBAIHZvaWQgV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1l
dGVyczo6ZW5jb2QKICAgICBlbmNvZGVyIDw8IG5vdGlmaWNhdGlvblBlcm1pc3Npb25zOwogI2Vu
ZGlmCiAKLSAgICBlbmNvZGVyIDw8IHVzZXNOZXR3b3JrUHJvY2VzczsKLQogICAgIGVuY29kZXIg
PDwgcGx1Z0luQXV0b1N0YXJ0T3JpZ2luSGFzaGVzOwogICAgIGVuY29kZXIgPDwgcGx1Z0luQXV0
b1N0YXJ0T3JpZ2luczsKICAgICBlbmNvZGVyIDw8IG1lbW9yeUNhY2hlRGlzYWJsZWQ7CkBAIC0y
MTAsMjAgKzE5OSw2IEBAIGJvb2wgV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyczo6ZGVjb2QK
ICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRB
c0NhY2hlUGFydGl0aW9uZWQpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAjZW5kaWYKLSAgICBp
ZiAoIWRlY29kZXIuZGVjb2RlKHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRGb3JDdXN0
b21Qcm90b2NvbHMpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0jaWYgVVNFKFNPVVApCi0gICAg
aWYgKCFkZWNvZGVyLmRlY29kZShwYXJhbWV0ZXJzLmRpc2tDYWNoZURpcmVjdG9yeSkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHBhcmFtZXRlcnMuY29v
a2llUGVyc2lzdGVudFN0b3JhZ2VQYXRoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlm
ICghZGVjb2Rlci5kZWNvZGUocGFyYW1ldGVycy5jb29raWVQZXJzaXN0ZW50U3RvcmFnZVR5cGUp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZUVudW0ocGFy
YW1ldGVycy5jb29raWVBY2NlcHRQb2xpY3kpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
aWYgKCFkZWNvZGVyLmRlY29kZShwYXJhbWV0ZXJzLmlnbm9yZVRMU0Vycm9ycykpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSNlbmRpZgogICAgIGlmICghZGVjb2Rlci5kZWNvZGVFbnVtKHBhcmFt
ZXRlcnMuY2FjaGVNb2RlbCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAoIWRlY29k
ZXIuZGVjb2RlKHBhcmFtZXRlcnMuc2hvdWxkQWx3YXlzVXNlQ29tcGxleFRleHRDb2RlUGF0aCkp
CkBAIC0yODcsOSArMjYyLDYgQEAgYm9vbCBXZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOjpk
ZWNvZAogICAgICAgICByZXR1cm4gZmFsc2U7CiAjZW5kaWYKIAotICAgIGlmICghZGVjb2Rlci5k
ZWNvZGUocGFyYW1ldGVycy51c2VzTmV0d29ya1Byb2Nlc3MpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHBhcmFtZXRlcnMucGx1Z0luQXV0b1N0YXJ0
T3JpZ2luSGFzaGVzKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmICghZGVjb2Rlci5k
ZWNvZGUocGFyYW1ldGVycy5wbHVnSW5BdXRvU3RhcnRPcmlnaW5zKSkKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9XZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuaAko
cmV2aXNpb24gMTkyNzY1KQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYlByb2Nlc3NDcmVh
dGlvblBhcmFtZXRlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtOTksMTQgKzk5LDYgQEAgc3RydWN0
IFdlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMgewogI2lmIEVOQUJMRShDQUNIRV9QQVJUSVRJ
T05JTkcpCiAgICAgVmVjdG9yPFN0cmluZz4gdXJsU2NoZW1lc1JlZ2lzdGVyZWRBc0NhY2hlUGFy
dGl0aW9uZWQ7CiAjZW5kaWYKLSAgICBWZWN0b3I8U3RyaW5nPiB1cmxTY2hlbWVzUmVnaXN0ZXJl
ZEZvckN1c3RvbVByb3RvY29sczsKLSNpZiBVU0UoU09VUCkKLSAgICBTdHJpbmcgZGlza0NhY2hl
RGlyZWN0b3J5OwotICAgIFN0cmluZyBjb29raWVQZXJzaXN0ZW50U3RvcmFnZVBhdGg7Ci0gICAg
dWludDMyX3QgY29va2llUGVyc2lzdGVudFN0b3JhZ2VUeXBlOwotICAgIEhUVFBDb29raWVBY2Nl
cHRQb2xpY3kgY29va2llQWNjZXB0UG9saWN5OwotICAgIGJvb2wgaWdub3JlVExTRXJyb3JzOwot
I2VuZGlmCiAKICAgICBDYWNoZU1vZGVsIGNhY2hlTW9kZWw7CiAKQEAgLTE1NCw4ICsxNDYsNiBA
QCBzdHJ1Y3QgV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyB7CiAgICAgSGFzaE1hcDxTdHJp
bmcsIGJvb2w+IG5vdGlmaWNhdGlvblBlcm1pc3Npb25zOwogI2VuZGlmCiAKLSAgICBib29sIHVz
ZXNOZXR3b3JrUHJvY2VzczsKLQogICAgIEhhc2hNYXA8V2ViQ29yZTo6U2Vzc2lvbklELCBIYXNo
TWFwPHVuc2lnbmVkLCBkb3VibGU+PiBwbHVnSW5BdXRvU3RhcnRPcmlnaW5IYXNoZXM7CiAgICAg
VmVjdG9yPFN0cmluZz4gcGx1Z0luQXV0b1N0YXJ0T3JpZ2luczsKIApJbmRleDogU291cmNlL1dl
YktpdDIvU2hhcmVkL0FQSS9jL1dLRGVwcmVjYXRlZEZ1bmN0aW9ucy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdDIvU2hhcmVkL0FQSS9jL1dLRGVwcmVjYXRlZEZ1bmN0aW9ucy5jcHAJ
KHJldmlzaW9uIDE5Mjc2NSkKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9BUEkvYy9XS0RlcHJl
Y2F0ZWRGdW5jdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAKICNp
bmNsdWRlICJBUElEaWN0aW9uYXJ5LmgiCiAjaW5jbHVkZSAiV0tBcnJheS5oIgorI2luY2x1ZGUg
IldLQ29udGV4dFByaXZhdGUuaCIKICNpbmNsdWRlICJXS011dGFibGVEaWN0aW9uYXJ5LmgiCiAj
aW5jbHVkZSAiV0tQcmVmZXJlbmNlc1JlZlByaXZhdGUuaCIKICNpbmNsdWRlICJXS1NoYXJlZEFQ
SUNhc3QuaCIKQEAgLTEzNCw2ICsxMzUsMTAgQEAgdm9pZCBXS0luc3BlY3RvclRvZ2dsZUphdmFT
Y3JpcHRQcm9maWxpbgogewogfQogCit2b2lkIFdLQ29udGV4dFNldFVzZXNOZXR3b3JrUHJvY2Vz
cyhXS0NvbnRleHRSZWYsIGJvb2wpCit7Cit9CisKICNpZiBQTEFURk9STShNQUMpCiBDR0NvbnRl
eHRSZWYgV0tHcmFwaGljc0NvbnRleHRHZXRDR0NvbnRleHQoV0tHcmFwaGljc0NvbnRleHRSZWYg
Z3JhcGhpY3NDb250ZXh0KQogewpJbmRleDogU291cmNlL1dlYktpdDIvU2hhcmVkL05ldHdvcmsv
Q3VzdG9tUHJvdG9jb2xzL0N1c3RvbVByb3RvY29sTWFuYWdlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQyL1NoYXJlZC9OZXR3b3JrL0N1c3RvbVByb3RvY29scy9DdXN0b21Qcm90b2Nv
bE1hbmFnZXIuaAkocmV2aXNpb24gMTkyNzY1KQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL05l
dHdvcmsvQ3VzdG9tUHJvdG9jb2xzL0N1c3RvbVByb3RvY29sTWFuYWdlci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yOCw3ICsyOCw2IEBACiAKICNpbmNsdWRlICJDb25uZWN0aW9uLmgiCiAjaW5jbHVk
ZSAiTmV0d29ya1Byb2Nlc3NTdXBwbGVtZW50LmgiCi0jaW5jbHVkZSAiV2ViUHJvY2Vzc1N1cHBs
ZW1lbnQuaCIKICNpbmNsdWRlIDx3dGYvV29ya1F1ZXVlLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+CiAKQEAgLTU4LDcgKzU3LDcgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiBjbGFz
cyBDaGlsZFByb2Nlc3M7CiBzdHJ1Y3QgTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM7
CiAKLWNsYXNzIEN1c3RvbVByb3RvY29sTWFuYWdlciA6IHB1YmxpYyBXZWJQcm9jZXNzU3VwcGxl
bWVudCwgcHVibGljIE5ldHdvcmtQcm9jZXNzU3VwcGxlbWVudCwgcHVibGljIElQQzo6Q29ubmVj
dGlvbjo6V29ya1F1ZXVlTWVzc2FnZVJlY2VpdmVyIHsKK2NsYXNzIEN1c3RvbVByb3RvY29sTWFu
YWdlciA6IHB1YmxpYyBOZXR3b3JrUHJvY2Vzc1N1cHBsZW1lbnQsIHB1YmxpYyBJUEM6OkNvbm5l
Y3Rpb246OldvcmtRdWV1ZU1lc3NhZ2VSZWNlaXZlciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFC
TEUoQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyKTsKIHB1YmxpYzoKICAgICBleHBsaWNpdCBDdXN0b21Q
cm90b2NvbE1hbmFnZXIoQ2hpbGRQcm9jZXNzKik7CkBAIC04MCw5ICs3OSw2IEBAIHByaXZhdGU6
CiAgICAgLy8gQ2hpbGRQcm9jZXNzU3VwcGxlbWVudAogICAgIHZvaWQgaW5pdGlhbGl6ZUNvbm5l
Y3Rpb24oSVBDOjpDb25uZWN0aW9uKikgb3ZlcnJpZGU7CiAKLSAgICAvLyBXZWJQcm9jZXNzU3Vw
cGxlbWVudAotICAgIHZvaWQgaW5pdGlhbGl6ZShjb25zdCBXZWJQcm9jZXNzQ3JlYXRpb25QYXJh
bWV0ZXJzJikgb3ZlcnJpZGU7Ci0KICAgICAvLyBOZXR3b3JrUHJvY2Vzc1N1cHBsZW1lbnQKICAg
ICB2b2lkIGluaXRpYWxpemUoY29uc3QgTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMm
KSBvdmVycmlkZTsKIApJbmRleDogU291cmNlL1dlYktpdDIvU2hhcmVkL05ldHdvcmsvQ3VzdG9t
UHJvdG9jb2xzL0NvY29hL0N1c3RvbVByb3RvY29sTWFuYWdlckNvY29hLm1tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9OZXR3b3JrL0N1c3RvbVByb3RvY29scy9Db2NvYS9D
dXN0b21Qcm90b2NvbE1hbmFnZXJDb2NvYS5tbQkocmV2aXNpb24gMTkyNzY1KQorKysgU291cmNl
L1dlYktpdDIvU2hhcmVkL05ldHdvcmsvQ3VzdG9tUHJvdG9jb2xzL0NvY29hL0N1c3RvbVByb3Rv
Y29sTWFuYWdlckNvY29hLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMzIsMjEgKzEzMiw2IEBAIHZv
aWQgQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyOjppbml0aWFsaXplQ28KICAgICBjb25uZWN0aW9uLT5h
ZGRXb3JrUXVldWVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OkN1c3RvbVByb3RvY29sTWFuYWdl
cjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX21lc3NhZ2VRdWV1ZS5nZXQoKSwgdGhpcyk7CiB9
CiAKLXZvaWQgQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyOjppbml0aWFsaXplKGNvbnN0IFdlYlByb2Nl
c3NDcmVhdGlvblBhcmFtZXRlcnMmIHBhcmFtZXRlcnMpCi17Ci0gICAgQVNTRVJUKHBhcmFtZXRl
cnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRGb3JDdXN0b21Qcm90b2NvbHMuaXNFbXB0eSgpIHx8ICFw
YXJhbWV0ZXJzLnVzZXNOZXR3b3JrUHJvY2Vzcyk7Ci0gICAgaWYgKHBhcmFtZXRlcnMudXNlc05l
dHdvcmtQcm9jZXNzKSB7Ci0gICAgICAgIG1fY2hpbGRQcm9jZXNzLT5wYXJlbnRQcm9jZXNzQ29u
bmVjdGlvbigpLT5yZW1vdmVXb3JrUXVldWVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OkN1c3Rv
bVByb3RvY29sTWFuYWdlcjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpKTsKLSAgICAgICAgbV9tZXNz
YWdlUXVldWUgPSBudWxscHRyOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgW05TVVJM
UHJvdG9jb2wgcmVnaXN0ZXJDbGFzczpbV0tDdXN0b21Qcm90b2NvbCBjbGFzc11dOwotCi0gICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBwYXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkRm9y
Q3VzdG9tUHJvdG9jb2xzLnNpemUoKTsgKytpKQotICAgICAgICByZWdpc3RlclNjaGVtZShwYXJh
bWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkRm9yQ3VzdG9tUHJvdG9jb2xzW2ldKTsKLX0KLQog
dm9pZCBDdXN0b21Qcm90b2NvbE1hbmFnZXI6OmluaXRpYWxpemUoY29uc3QgTmV0d29ya1Byb2Nl
c3NDcmVhdGlvblBhcmFtZXRlcnMmIHBhcmFtZXRlcnMpCiB7CiAgICAgW05TVVJMUHJvdG9jb2wg
cmVnaXN0ZXJDbGFzczpbV0tDdXN0b21Qcm90b2NvbCBjbGFzc11dOwpJbmRleDogU291cmNlL1dl
YktpdDIvU2hhcmVkL05ldHdvcmsvQ3VzdG9tUHJvdG9jb2xzL3NvdXAvQ3VzdG9tUHJvdG9jb2xN
YW5hZ2VyU291cC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL05ldHdv
cmsvQ3VzdG9tUHJvdG9jb2xzL3NvdXAvQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyU291cC5jcHAJKHJl
dmlzaW9uIDE5Mjc2NSkKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9OZXR3b3JrL0N1c3RvbVBy
b3RvY29scy9zb3VwL0N1c3RvbVByb3RvY29sTWFuYWdlclNvdXAuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00OCwxNCArNDgsOSBAQCB2b2lkIEN1c3RvbVByb3RvY29sTWFuYWdlcjo6aW5pdGlhbGl6
ZUNvCiAKIHZvaWQgQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyOjppbml0aWFsaXplKGNvbnN0IFdlYlBy
b2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmIHBhcmFtZXRlcnMpCiB7Ci0gICAgQVNTRVJUKHBhcmFt
ZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRGb3JDdXN0b21Qcm90b2NvbHMuaXNFbXB0eSgpIHx8
ICFwYXJhbWV0ZXJzLnVzZXNOZXR3b3JrUHJvY2Vzcyk7Ci0gICAgaWYgKHBhcmFtZXRlcnMudXNl
c05ldHdvcmtQcm9jZXNzKSB7Ci0gICAgICAgIG1fY2hpbGRQcm9jZXNzLT5wYXJlbnRQcm9jZXNz
Q29ubmVjdGlvbigpLT5yZW1vdmVXb3JrUXVldWVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OkN1
c3RvbVByb3RvY29sTWFuYWdlcjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpKTsKLSAgICAgICAgbV9t
ZXNzYWdlUXVldWUgPSBudWxscHRyOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgcGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEZvckN1c3Rv
bVByb3RvY29scy5zaXplKCk7ICsraSkKLSAgICAgICAgcmVnaXN0ZXJTY2hlbWUocGFyYW1ldGVy
cy51cmxTY2hlbWVzUmVnaXN0ZXJlZEZvckN1c3RvbVByb3RvY29sc1tpXSk7CisgICAgQVNTRVJU
KHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRGb3JDdXN0b21Qcm90b2NvbHMuaXNFbXB0
eSgpKTsKKyAgICBtX2NoaWxkUHJvY2Vzcy0+cGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+cmVt
b3ZlV29ya1F1ZXVlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpDdXN0b21Qcm90b2NvbE1hbmFn
ZXI6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSk7CisgICAgbV9tZXNzYWdlUXVldWUgPSBudWxscHRy
OwogfQogCiB2b2lkIEN1c3RvbVByb3RvY29sTWFuYWdlcjo6aW5pdGlhbGl6ZShjb25zdCBOZXR3
b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyYgcGFyYW1ldGVycykKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9XZWJDb29raWVNYW5hZ2VyUHJveHkuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJDb29raWVNYW5hZ2VyUHJveHkuY3BwCShyZXZp
c2lvbiAxOTI3NjUpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViQ29va2llTWFuYWdl
clByb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTYzLDggKzE2Myw3IEBAIHZvaWQgV2ViQ29v
a2llTWFuYWdlclByb3h5OjpzZXRIVFRQQ29va2kKICAgICAvLyAtIFdoZW4gdGVzdGluZywgd2Ug
b25seSBoYXZlIG9uZSBXZWJQcm9jZXNzIGFuZCBvbmUgTmV0d29ya1Byb2Nlc3MsIGFuZCBXZWJL
aXRUZXN0UnVubmVyIG5ldmVyIHJlc3RhcnRzIHRoZW07CiAgICAgLy8gLSBXaGVuIG5vdCB0ZXN0
aW5nLCBDb2NvYSBoYXMgdGhlIHBvbGljeSBwZXJzaXN0ZWQsIGFuZCB0aHVzIG5ldyBwcm9jZXNz
ZXMgdXNlIGl0IChldmVuIGZvciBlcGhlbWVyYWwgc2Vzc2lvbnMpLgogICAgIHByb2Nlc3NQb29s
KCktPnNlbmRUb0FsbFByb2Nlc3NlcyhNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6U2V0SFRU
UENvb2tpZUFjY2VwdFBvbGljeShwb2xpY3kpKTsKLSAgICBpZiAocHJvY2Vzc1Bvb2woKS0+dXNl
c05ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sKCktPnNlbmRUb05ldHdvcmtp
bmdQcm9jZXNzKE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpTZXRIVFRQQ29va2llQWNjZXB0
UG9saWN5KHBvbGljeSkpOworICAgIHByb2Nlc3NQb29sKCktPnNlbmRUb05ldHdvcmtpbmdQcm9j
ZXNzKE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpTZXRIVFRQQ29va2llQWNjZXB0UG9saWN5
KHBvbGljeSkpOwogfQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6Z2V0SFRUUENvb2tp
ZUFjY2VwdFBvbGljeShzdGQ6OmZ1bmN0aW9uPHZvaWQgKEhUVFBDb29raWVBY2NlcHRQb2xpY3ks
IENhbGxiYWNrQmFzZTo6RXJyb3IpPiBjYWxsYmFja0Z1bmN0aW9uKQpJbmRleDogU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwCShyZXZpc2lvbiAxOTI3NjUpCisr
KyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xNTgsOSArMTU4LDYgQEAgV2ViUHJvY2Vzc1Bvb2w6OldlYlByb2Nlc3NQb29sKEFQ
STo6UHJvYwogICAgICwgbV9wcm9jZXNzVGVybWluYXRpb25FbmFibGVkKHRydWUpCiAgICAgLCBt
X2NhbkhhbmRsZUhUVFBTU2VydmVyVHJ1c3RFdmFsdWF0aW9uKHRydWUpCiAgICAgLCBtX2RpZE5l
dHdvcmtQcm9jZXNzQ3Jhc2goZmFsc2UpCi0jaWYgVVNFKFNPVVApCi0gICAgLCBtX2lnbm9yZVRM
U0Vycm9ycyh0cnVlKQotI2VuZGlmCiAgICAgLCBtX21lbW9yeUNhY2hlRGlzYWJsZWQoZmFsc2Up
CiAgICAgLCBtX3VzZXJPYnNlcnZhYmxlUGFnZUNvdW50ZXIoW3RoaXNdKGJvb2wpIHsgdXBkYXRl
UHJvY2Vzc1N1cHByZXNzaW9uU3RhdGUoKTsgfSkKICAgICAsIG1fcHJvY2Vzc1N1cHByZXNzaW9u
RGlzYWJsZWRGb3JQYWdlQ291bnRlcihbdGhpc10oYm9vbCkgeyB1cGRhdGVQcm9jZXNzU3VwcHJl
c3Npb25TdGF0ZSgpOyB9KQpAQCAtMzA2LDE3ICszMDMsNyBAQCB2b2lkIFdlYlByb2Nlc3NQb29s
OjpzZXRNYXhpbXVtTnVtYmVyT2ZQCiAKIElQQzo6Q29ubmVjdGlvbiogV2ViUHJvY2Vzc1Bvb2w6
Om5ldHdvcmtpbmdQcm9jZXNzQ29ubmVjdGlvbigpCiB7Ci0gICAgc3dpdGNoIChwcm9jZXNzTW9k
ZWwoKSkgewotICAgIGNhc2UgUHJvY2Vzc01vZGVsU2hhcmVkU2Vjb25kYXJ5UHJvY2VzczoKLSAg
ICAgICAgaWYgKHVzZXNOZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcmV0dXJuIG1fbmV0
d29ya1Byb2Nlc3MtPmNvbm5lY3Rpb24oKTsKLSAgICAgICAgcmV0dXJuIG1fcHJvY2Vzc2VzWzBd
LT5jb25uZWN0aW9uKCk7Ci0gICAgY2FzZSBQcm9jZXNzTW9kZWxNdWx0aXBsZVNlY29uZGFyeVBy
b2Nlc3NlczoKLSAgICAgICAgQVNTRVJUKHVzZXNOZXR3b3JrUHJvY2VzcygpKTsKLSAgICAgICAg
cmV0dXJuIG1fbmV0d29ya1Byb2Nlc3MtPmNvbm5lY3Rpb24oKTsKLSAgICB9Ci0gICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIG1fbmV0d29ya1Byb2Nl
c3MtPmNvbm5lY3Rpb24oKTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6bGFuZ3VhZ2VDaGFu
Z2VkKHZvaWQqIGNvbnRleHQpCkBAIC0zMjgsNyArMzE1LDcgQEAgdm9pZCBXZWJQcm9jZXNzUG9v
bDo6bGFuZ3VhZ2VDaGFuZ2VkKCkKIHsKICAgICBzZW5kVG9BbGxQcm9jZXNzZXMoTWVzc2FnZXM6
OldlYlByb2Nlc3M6OlVzZXJQcmVmZXJyZWRMYW5ndWFnZXNDaGFuZ2VkKHVzZXJQcmVmZXJyZWRM
YW5ndWFnZXMoKSkpOwogI2lmIFVTRShTT1VQKQotICAgIGlmICh1c2VzTmV0d29ya1Byb2Nlc3Mo
KSAmJiBtX25ldHdvcmtQcm9jZXNzKQorICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQogICAgICAg
ICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6VXNlclBy
ZWZlcnJlZExhbmd1YWdlc0NoYW5nZWQodXNlclByZWZlcnJlZExhbmd1YWdlcygpKSwgMCk7CiAj
ZW5kaWYKIH0KQEAgLTM0MywxNiArMzMwLDYgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6dGV4dENo
ZWNrZXJTdGF0ZUNoYQogICAgIHNlbmRUb0FsbFByb2Nlc3NlcyhNZXNzYWdlczo6V2ViUHJvY2Vz
czo6U2V0VGV4dENoZWNrZXJTdGF0ZShUZXh0Q2hlY2tlcjo6c3RhdGUoKSkpOwogfQogCi12b2lk
IFdlYlByb2Nlc3NQb29sOjpzZXRVc2VzTmV0d29ya1Byb2Nlc3MoYm9vbCB1c2VzTmV0d29ya1By
b2Nlc3MpCi17Ci0gICAgbV9jb25maWd1cmF0aW9uLT5zZXRVc2VOZXR3b3JrUHJvY2Vzcyh1c2Vz
TmV0d29ya1Byb2Nlc3MpOwotfQotCi1ib29sIFdlYlByb2Nlc3NQb29sOjp1c2VzTmV0d29ya1By
b2Nlc3MoKSBjb25zdAotewotICAgIHJldHVybiBtX2NvbmZpZ3VyYXRpb24tPnVzZU5ldHdvcmtQ
cm9jZXNzKCk7Ci19Ci0KIE5ldHdvcmtQcm9jZXNzUHJveHkmIFdlYlByb2Nlc3NQb29sOjplbnN1
cmVOZXR3b3JrUHJvY2VzcygpCiB7CiAgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCkBAIC01MDQs
NyArNDgxLDcgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0QW55UGFnZUdyb3VwTWlnaAogewog
ICAgIG1faWNvbkRhdGFiYXNlLT5zZXRQcml2YXRlQnJvd3NpbmdFbmFibGVkKHByaXZhdGVCcm93
c2luZ0VuYWJsZWQpOwogCi0gICAgaWYgKHVzZXNOZXR3b3JrUHJvY2VzcygpICYmIG5ldHdvcmtQ
cm9jZXNzKCkpIHsKKyAgICBpZiAobmV0d29ya1Byb2Nlc3MoKSkgewogICAgICAgICBpZiAocHJp
dmF0ZUJyb3dzaW5nRW5hYmxlZCkKICAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzKCktPnNlbmQo
TWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpFbnN1cmVQcml2YXRlQnJvd3NpbmdTZXNzaW9uKFNl
c3Npb25JRDo6bGVnYWN5UHJpdmF0ZVNlc3Npb25JRCgpKSwgMCk7CiAgICAgICAgIGVsc2UKQEAg
LTU1NCw4ICs1MzEsNyBAQCBXZWJQcm9jZXNzUHJveHkmIFdlYlByb2Nlc3NQb29sOjplbnN1cmVT
CiAKIFdlYlByb2Nlc3NQcm94eSYgV2ViUHJvY2Vzc1Bvb2w6OmNyZWF0ZU5ld1dlYlByb2Nlc3Mo
KQogewotICAgIGlmICh1c2VzTmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgZW5zdXJlTmV0d29y
a1Byb2Nlc3MoKTsKKyAgICBlbnN1cmVOZXR3b3JrUHJvY2VzcygpOwogCiAgICAgUmVmPFdlYlBy
b2Nlc3NQcm94eT4gcHJvY2VzcyA9IFdlYlByb2Nlc3NQcm94eTo6Y3JlYXRlKCp0aGlzKTsKIApA
QCAtNjMyLDggKzYwOCw2IEBAIFdlYlByb2Nlc3NQcm94eSYgV2ViUHJvY2Vzc1Bvb2w6OmNyZWF0
ZU4KICAgICBzdXBwbGVtZW50PFdlYk5vdGlmaWNhdGlvbk1hbmFnZXJQcm94eT4oKS0+cG9wdWxh
dGVDb3B5T2ZOb3RpZmljYXRpb25QZXJtaXNzaW9ucyhwYXJhbWV0ZXJzLm5vdGlmaWNhdGlvblBl
cm1pc3Npb25zKTsKICNlbmRpZgogCi0gICAgcGFyYW1ldGVycy51c2VzTmV0d29ya1Byb2Nlc3Mg
PSB1c2VzTmV0d29ya1Byb2Nlc3MoKTsKLQogICAgIHBhcmFtZXRlcnMucGx1Z0luQXV0b1N0YXJ0
T3JpZ2luSGFzaGVzID0gbV9wbHVnSW5BdXRvU3RhcnRQcm92aWRlci5hdXRvU3RhcnRPcmlnaW5I
YXNoZXNDb3B5KCk7CiAgICAgY29weVRvVmVjdG9yKG1fcGx1Z0luQXV0b1N0YXJ0UHJvdmlkZXIu
YXV0b1N0YXJ0T3JpZ2lucygpLCBwYXJhbWV0ZXJzLnBsdWdJbkF1dG9TdGFydE9yaWdpbnMpOwog
CkBAIC04NDEsMTYgKzgxNSwxNCBAQCBSZWY8V2ViUGFnZVByb3h5PiBXZWJQcm9jZXNzUG9vbDo6
Y3JlYXRlCiBEb3dubG9hZFByb3h5KiBXZWJQcm9jZXNzUG9vbDo6ZG93bmxvYWQoV2ViUGFnZVBy
b3h5KiBpbml0aWF0aW5nUGFnZSwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQogewog
ICAgIERvd25sb2FkUHJveHkqIGRvd25sb2FkUHJveHkgPSBjcmVhdGVEb3dubG9hZFByb3h5KHJl
cXVlc3QpOwotICAgIHVpbnQ2NF90IGluaXRpYXRpbmdQYWdlSUQgPSBpbml0aWF0aW5nUGFnZSA/
IGluaXRpYXRpbmdQYWdlLT5wYWdlSUQoKSA6IDA7CiAgICAgU2Vzc2lvbklEIHNlc3Npb25JRCA9
IGluaXRpYXRpbmdQYWdlID8gaW5pdGlhdGluZ1BhZ2UtPnNlc3Npb25JRCgpIDogU2Vzc2lvbklE
OjpkZWZhdWx0U2Vzc2lvbklEKCk7CiAKLSAgICBpZiAodXNlc05ldHdvcmtQcm9jZXNzKCkgJiYg
bmV0d29ya1Byb2Nlc3MoKSkgeworICAgIGlmIChuZXR3b3JrUHJvY2VzcygpKSB7CiAgICAgICAg
IC8vIEZJWE1FIChOZXR3b3JrUHJvY2Vzcyk6IFJlcGxpY2F0ZSB3aGF0ZXZlciBGcmFtZUxvYWRl
cjo6c2V0T3JpZ2luYWxVUkxGb3JEb3dubG9hZFJlcXVlc3QgZG9lcyB3aXRoIHRoZSByZXF1ZXN0
IGhlcmUuCiAgICAgICAgIG5ldHdvcmtQcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQ
cm9jZXNzOjpEb3dubG9hZFJlcXVlc3Qoc2Vzc2lvbklELCBkb3dubG9hZFByb3h5LT5kb3dubG9h
ZElEKCksIHJlcXVlc3QpLCAwKTsKICAgICAgICAgcmV0dXJuIGRvd25sb2FkUHJveHk7CiAgICAg
fQogCi0gICAgbV9wcm9jZXNzZXNbMF0tPnNlbmQoTWVzc2FnZXM6OldlYlByb2Nlc3M6OkRvd25s
b2FkUmVxdWVzdChzZXNzaW9uSUQsIGRvd25sb2FkUHJveHktPmRvd25sb2FkSUQoKSwgaW5pdGlh
dGluZ1BhZ2VJRCwgcmVxdWVzdCksIDApOwogICAgIHJldHVybiBkb3dubG9hZFByb3h5OwogfQog
CkBAIC04NjIsMTIgKzgzNCwxMSBAQCBEb3dubG9hZFByb3h5KiBXZWJQcm9jZXNzUG9vbDo6cmVz
dW1lRG93CiAgICAgaWYgKCFwYXRoLmlzRW1wdHkoKSkKICAgICAgICAgU2FuZGJveEV4dGVuc2lv
bjo6Y3JlYXRlSGFuZGxlKHBhdGgsIFNhbmRib3hFeHRlbnNpb246OlJlYWRXcml0ZSwgc2FuZGJv
eEV4dGVuc2lvbkhhbmRsZSk7CiAKLSAgICBpZiAodXNlc05ldHdvcmtQcm9jZXNzKCkgJiYgbmV0
d29ya1Byb2Nlc3MoKSkgeworICAgIGlmIChuZXR3b3JrUHJvY2VzcygpKSB7CiAgICAgICAgIG5l
dHdvcmtQcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpSZXN1bWVEb3du
bG9hZChkb3dubG9hZFByb3h5LT5kb3dubG9hZElEKCksIHJlc3VtZURhdGEtPmRhdGFSZWZlcmVu
Y2UoKSwgcGF0aCwgc2FuZGJveEV4dGVuc2lvbkhhbmRsZSksIDApOwogICAgICAgICByZXR1cm4g
ZG93bmxvYWRQcm94eTsKICAgICB9CiAKLSAgICBtX3Byb2Nlc3Nlc1swXS0+c2VuZChNZXNzYWdl
czo6V2ViUHJvY2Vzczo6UmVzdW1lRG93bmxvYWQoZG93bmxvYWRQcm94eS0+ZG93bmxvYWRJRCgp
LCByZXN1bWVEYXRhLT5kYXRhUmVmZXJlbmNlKCksIHBhdGgsIHNhbmRib3hFeHRlbnNpb25IYW5k
bGUpLCAwKTsKICAgICByZXR1cm4gZG93bmxvYWRQcm94eTsKIH0KIApAQCAtOTU0LDcgKzkyNSw3
IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldERvbWFpblJlbGF4YXRpb24KIHZvaWQgV2ViUHJv
Y2Vzc1Bvb2w6OnNldENhbkhhbmRsZUhUVFBTU2VydmVyVHJ1c3RFdmFsdWF0aW9uKGJvb2wgdmFs
dWUpCiB7CiAgICAgbV9jYW5IYW5kbGVIVFRQU1NlcnZlclRydXN0RXZhbHVhdGlvbiA9IHZhbHVl
OwotICAgIGlmICh1c2VzTmV0d29ya1Byb2Nlc3MoKSAmJiBtX25ldHdvcmtQcm9jZXNzKSB7Cisg
ICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpIHsKICAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2Vu
ZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldENhbkhhbmRsZUhUVFBTU2VydmVyVHJ1c3RF
dmFsdWF0aW9uKHZhbHVlKSwgMCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0xMDI1LDcg
Kzk5Niw3IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldENhY2hlTW9kZWwoQ2FjaGUKICAgICBt
X2NvbmZpZ3VyYXRpb24tPnNldENhY2hlTW9kZWwoY2FjaGVNb2RlbCk7CiAgICAgc2VuZFRvQWxs
UHJvY2Vzc2VzKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpTZXRDYWNoZU1vZGVsKGNhY2hlTW9kZWwp
KTsKIAotICAgIGlmICh1c2VzTmV0d29ya1Byb2Nlc3MoKSAmJiBtX25ldHdvcmtQcm9jZXNzKQor
ICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQogICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5k
KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0Q2FjaGVNb2RlbChjYWNoZU1vZGVsKSwgMCk7
CiB9CiAKQEAgLTEwMzYsMTMgKzEwMDcsNyBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXREZWZh
dWx0UmVxdWVzdFRpCiAKIERvd25sb2FkUHJveHkqIFdlYlByb2Nlc3NQb29sOjpjcmVhdGVEb3du
bG9hZFByb3h5KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKIHsKLSAgICBpZiAodXNl
c05ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKLSAg
ICAgICAgQVNTRVJUKG1fbmV0d29ya1Byb2Nlc3MpOwotICAgICAgICByZXR1cm4gbV9uZXR3b3Jr
UHJvY2Vzcy0+Y3JlYXRlRG93bmxvYWRQcm94eShyZXF1ZXN0KTsKLSAgICB9Ci0KLSAgICByZXR1
cm4gZW5zdXJlU2hhcmVkV2ViUHJvY2VzcygpLmNyZWF0ZURvd25sb2FkUHJveHkocmVxdWVzdCk7
CisgICAgcmV0dXJuIGVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuY3JlYXRlRG93bmxvYWRQcm94eShy
ZXF1ZXN0KTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6YWRkTWVzc2FnZVJlY2VpdmVyKElQ
Qzo6U3RyaW5nUmVmZXJlbmNlIG1lc3NhZ2VSZWNlaXZlck5hbWUsIElQQzo6TWVzc2FnZVJlY2Vp
dmVyJiBtZXNzYWdlUmVjZWl2ZXIpCkBAIC0xMTUyLDIyICsxMTE3LDggQEAgdm9pZCBXZWJQcm9j
ZXNzUG9vbDo6dXNlVGVzdGluZ05ldHdvcmtTZQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjphbGxv
d1NwZWNpZmljSFRUUFNDZXJ0aWZpY2F0ZUZvckhvc3QoY29uc3QgV2ViQ2VydGlmaWNhdGVJbmZv
KiBjZXJ0aWZpY2F0ZSwgY29uc3QgU3RyaW5nJiBob3N0KQogewotICAgIGlmICh1c2VzTmV0d29y
a1Byb2Nlc3MoKSAmJiBtX25ldHdvcmtQcm9jZXNzKSB7CisgICAgaWYgKG1fbmV0d29ya1Byb2Nl
c3MpCiAgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9j
ZXNzOjpBbGxvd1NwZWNpZmljSFRUUFNDZXJ0aWZpY2F0ZUZvckhvc3QoY2VydGlmaWNhdGUtPmNl
cnRpZmljYXRlSW5mbygpLCBob3N0KSwgMCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSNp
ZiBVU0UoU09VUCkKLSAgICBtX3Byb2Nlc3Nlc1swXS0+c2VuZChNZXNzYWdlczo6V2ViUHJvY2Vz
czo6QWxsb3dTcGVjaWZpY0hUVFBTQ2VydGlmaWNhdGVGb3JIb3N0KGNlcnRpZmljYXRlLT5jZXJ0
aWZpY2F0ZUluZm8oKSwgaG9zdCksIDApOwotICAgIHJldHVybjsKLSNlbHNlCi0gICAgVU5VU0VE
X1BBUkFNKGNlcnRpZmljYXRlKTsKLSAgICBVTlVTRURfUEFSQU0oaG9zdCk7Ci0jZW5kaWYKLQot
I2lmICFQTEFURk9STShJT1MpCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0jZW5kaWYKIH0K
IAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0SFRUUFBpcGVsaW5pbmdFbmFibGVkKGJvb2wgZW5h
YmxlZCkKQEAgLTEyMjEsNyArMTE3Miw3IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnJlcXVlc3RX
ZWJDb250ZW50U3QKIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6cmVxdWVzdE5ldHdvcmtpbmdTdGF0
aXN0aWNzKFN0YXRpc3RpY3NSZXF1ZXN0KiByZXF1ZXN0KQogewotICAgIGlmICghdXNlc05ldHdv
cmtQcm9jZXNzKCkgfHwgIW1fbmV0d29ya1Byb2Nlc3MpIHsKKyAgICBpZiAoIW1fbmV0d29ya1By
b2Nlc3MpIHsKICAgICAgICAgTE9HX0VSUk9SKCJBdHRlbXB0IHRvIGdldCBOZXR3b3JrUHJvY2Vz
cyBzdGF0aXN0aWNzIGJ1dCB0aGUgTmV0d29ya1Byb2Nlc3MgaXMgdW5hdmFpbGFibGUiKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQ
cm9jZXNzUG9vbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQ
cm9jZXNzUG9vbC5oCShyZXZpc2lvbiAxOTI3NjUpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvV2ViUHJvY2Vzc1Bvb2wuaAkod29ya2luZyBjb3B5KQpAQCAtMjc3LDEwICsyNzcsNiBAQCBw
dWJsaWM6CiAgICAgdm9pZCBzZXRQbHVnSW5BdXRvU3RhcnRPcmlnaW5zRmlsdGVyaW5nT3V0RW50
cmllc0FkZGVkQWZ0ZXJUaW1lKEFQSTo6RGljdGlvbmFyeSYsIGRvdWJsZSB0aW1lKTsKIAogICAg
IC8vIE5ldHdvcmsgUHJvY2VzcyBNYW5hZ2VtZW50Ci0KLSAgICB2b2lkIHNldFVzZXNOZXR3b3Jr
UHJvY2Vzcyhib29sKTsKLSAgICBib29sIHVzZXNOZXR3b3JrUHJvY2VzcygpIGNvbnN0OwotCiAg
ICAgTmV0d29ya1Byb2Nlc3NQcm94eSYgZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKICAgICBOZXR3
b3JrUHJvY2Vzc1Byb3h5KiBuZXR3b3JrUHJvY2VzcygpIHsgcmV0dXJuIG1fbmV0d29ya1Byb2Nl
c3MuZ2V0KCk7IH0KICAgICB2b2lkIG5ldHdvcmtQcm9jZXNzQ3Jhc2hlZChOZXR3b3JrUHJvY2Vz
c1Byb3h5Kik7CkBAIC01MjUsNDMgKzUyMSwxNSBAQCBwcml2YXRlOgogdGVtcGxhdGU8dHlwZW5h
bWUgVD4KIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKFQmJiBt
ZXNzYWdlKQogewotICAgIHN3aXRjaCAocHJvY2Vzc01vZGVsKCkpIHsKLSAgICBjYXNlIFByb2Nl
c3NNb2RlbFNoYXJlZFNlY29uZGFyeVByb2Nlc3M6Ci0gICAgICAgIGlmICh1c2VzTmV0d29ya1By
b2Nlc3MoKSkgewotICAgICAgICAgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MgJiYgbV9uZXR3b3Jr
UHJvY2Vzcy0+Y2FuU2VuZE1lc3NhZ2UoKSkKLSAgICAgICAgICAgICAgICBtX25ldHdvcmtQcm9j
ZXNzLT5zZW5kKHN0ZDo6Zm9yd2FyZDxUPihtZXNzYWdlKSwgMCk7Ci0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFtX3Byb2Nlc3Nlcy5pc0VtcHR5KCkgJiYgbV9w
cm9jZXNzZXNbMF0tPmNhblNlbmRNZXNzYWdlKCkpCi0gICAgICAgICAgICBtX3Byb2Nlc3Nlc1sw
XS0+c2VuZChzdGQ6OmZvcndhcmQ8VD4obWVzc2FnZSksIDApOwotICAgICAgICByZXR1cm47Ci0g
ICAgY2FzZSBQcm9jZXNzTW9kZWxNdWx0aXBsZVNlY29uZGFyeVByb2Nlc3NlczoKLSAgICAgICAg
aWYgKG1fbmV0d29ya1Byb2Nlc3MgJiYgbV9uZXR3b3JrUHJvY2Vzcy0+Y2FuU2VuZE1lc3NhZ2Uo
KSkKLSAgICAgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmQoc3RkOjpmb3J3YXJkPFQ+KG1l
c3NhZ2UpLCAwKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICBpZiAobV9uZXR3b3JrUHJvY2VzcyAmJiBtX25ldHdvcmtQcm9jZXNzLT5jYW5T
ZW5kTWVzc2FnZSgpKQorICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kKHN0ZDo6Zm9yd2Fy
ZDxUPihtZXNzYWdlKSwgMCk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiB2b2lkIFdlYlBy
b2Nlc3NQb29sOjpzZW5kVG9OZXR3b3JraW5nUHJvY2Vzc1JlbGF1bmNoaW5nSWZOZWNlc3Nhcnko
VCYmIG1lc3NhZ2UpCiB7Ci0gICAgc3dpdGNoIChwcm9jZXNzTW9kZWwoKSkgewotICAgIGNhc2Ug
UHJvY2Vzc01vZGVsU2hhcmVkU2Vjb25kYXJ5UHJvY2VzczoKLSAgICAgICAgaWYgKHVzZXNOZXR3
b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBlbnN1cmVOZXR3b3JrUHJvY2VzcygpOwotICAg
ICAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZChzdGQ6OmZvcndhcmQ8VD4obWVzc2FnZSks
IDApOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGVuc3VyZVNoYXJl
ZFdlYlByb2Nlc3MoKTsKLSAgICAgICAgbV9wcm9jZXNzZXNbMF0tPnNlbmQoc3RkOjpmb3J3YXJk
PFQ+KG1lc3NhZ2UpLCAwKTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgUHJvY2Vzc01vZGVs
TXVsdGlwbGVTZWNvbmRhcnlQcm9jZXNzZXM6Ci0gICAgICAgIGVuc3VyZU5ldHdvcmtQcm9jZXNz
KCk7Ci0gICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmQoc3RkOjpmb3J3YXJkPFQ+KG1lc3Nh
Z2UpLCAwKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICBlbnN1cmVOZXR3b3JrUHJvY2VzcygpOworICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNl
bmQoc3RkOjpmb3J3YXJkPFQ+KG1lc3NhZ2UpLCAwKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUg
VD4KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuY3Bw
CShyZXZpc2lvbiAxOTI3NjUpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vz
c1Byb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjAyLDkgKzIwMiw2IEBAIHZvaWQgV2ViUHJv
Y2Vzc1Byb3h5OjpzaHV0RG93bigpCiAgICAgICAgIGZyYW1lc1tpXS0+d2ViUHJvY2Vzc1dpbGxT
aHV0RG93bigpOwogICAgIG1fZnJhbWVNYXAuY2xlYXIoKTsKIAotICAgIGlmIChtX2Rvd25sb2Fk
UHJveHlNYXApCi0gICAgICAgIG1fZG93bmxvYWRQcm94eU1hcC0+cHJvY2Vzc0RpZENsb3NlKCk7
Ci0KICAgICBmb3IgKFZpc2l0ZWRMaW5rU3RvcmUqIHZpc2l0ZWRMaW5rU3RvcmUgOiBtX3Zpc2l0
ZWRMaW5rU3RvcmVzKQogICAgICAgICB2aXNpdGVkTGlua1N0b3JlLT5yZW1vdmVQcm9jZXNzKCp0
aGlzKTsKICAgICBtX3Zpc2l0ZWRMaW5rU3RvcmVzLmNsZWFyKCk7CkBAIC0yNTYsNyArMjUzLDcg
QEAgdm9pZCBXZWJQcm9jZXNzUHJveHk6OnJlbW92ZVdlYlBhZ2UodWludAogCiAgICAgLy8gSWYg
dGhpcyB3YXMgdGhlIGxhc3QgV2ViUGFnZSBvcGVuIGluIHRoYXQgd2ViIHByb2Nlc3MsIGFuZCB3
ZSBoYXZlIG5vIG90aGVyIHJlYXNvbiB0byBrZWVwIGl0IGFsaXZlLCBsZXQgaXQgZ28uCiAgICAg
Ly8gV2Ugb25seSBhbGxvdyB0aGlzIHdoZW4gdXNpbmcgYSBuZXR3b3JrIHByb2Nlc3MsIGFzIG90
aGVyd2lzZSB0aGUgV2ViUHJvY2VzcyBuZWVkcyB0byBwcmVzZXJ2ZSBpdHMgc2Vzc2lvbiBzdGF0
ZS4KLSAgICBpZiAoIW1fcHJvY2Vzc1Bvb2wtPnVzZXNOZXR3b3JrUHJvY2VzcygpIHx8IHN0YXRl
KCkgPT0gU3RhdGU6OlRlcm1pbmF0ZWQgfHwgIWNhblRlcm1pbmF0ZUNoaWxkUHJvY2VzcygpKQor
ICAgIGlmIChzdGF0ZSgpID09IFN0YXRlOjpUZXJtaW5hdGVkIHx8ICFjYW5UZXJtaW5hdGVDaGls
ZFByb2Nlc3MoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgc2h1dERvd24oKTsKQEAgLTY1NSw5
ICs2NTIsNiBAQCBib29sIFdlYlByb2Nlc3NQcm94eTo6Y2FuVGVybWluYXRlQ2hpbGRQCiAgICAg
aWYgKCFtX3BhZ2VNYXAuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBp
ZiAobV9kb3dubG9hZFByb3h5TWFwICYmICFtX2Rvd25sb2FkUHJveHlNYXAtPmlzRW1wdHkoKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCiAgICAgaWYgKCFtX3BlbmRpbmdEZWxldGVXZWJzaXRl
RGF0YUNhbGxiYWNrcy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtNzAw
LDE2ICs2OTQsNiBAQCB2b2lkIFdlYlByb2Nlc3NQcm94eTo6dXBkYXRlVGV4dENoZWNrZXJTCiAg
ICAgICAgIHNlbmQoTWVzc2FnZXM6OldlYlByb2Nlc3M6OlNldFRleHRDaGVja2VyU3RhdGUoVGV4
dENoZWNrZXI6OnN0YXRlKCkpLCAwKTsKIH0KIAotRG93bmxvYWRQcm94eSogV2ViUHJvY2Vzc1By
b3h5OjpjcmVhdGVEb3dubG9hZFByb3h5KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkK
LXsKLSAgICBBU1NFUlQoIW1fcHJvY2Vzc1Bvb2wtPnVzZXNOZXR3b3JrUHJvY2VzcygpKTsKLQot
ICAgIGlmICghbV9kb3dubG9hZFByb3h5TWFwKQotICAgICAgICBtX2Rvd25sb2FkUHJveHlNYXAg
PSBzdGQ6Om1ha2VfdW5pcXVlPERvd25sb2FkUHJveHlNYXA+KHRoaXMpOwotCi0gICAgcmV0dXJu
IG1fZG93bmxvYWRQcm94eU1hcC0+Y3JlYXRlRG93bmxvYWRQcm94eShtX3Byb2Nlc3NQb29sLCBy
ZXF1ZXN0KTsKLX0KLQogdm9pZCBXZWJQcm9jZXNzUHJveHk6OmRpZFNhdmVUb1BhZ2VDYWNoZSgp
CiB7CiAgICAgbV9wcm9jZXNzUG9vbC0+cHJvY2Vzc0RpZENhY2hlUGFnZSh0aGlzKTsKQEAgLTk3
MiwxNCArOTU2LDEyIEBAIHZvaWQgV2ViUHJvY2Vzc1Byb3h5OjpkaWRTZXRBc3NlcnRpb25TdGEK
ICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIEFzc2VydGlvblN0YXRlOjpCYWNrZ3JvdW5kOgot
ICAgICAgICBpZiAocHJvY2Vzc1Bvb2woKS51c2VzTmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAg
ICAgIG1fYmFja2dyb3VuZFRva2VuRm9yTmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbCgpLmVu
c3VyZU5ldHdvcmtQcm9jZXNzKCkudGhyb3R0bGVyKCkuYmFja2dyb3VuZEFjdGl2aXR5VG9rZW4o
KTsKKyAgICAgICAgbV9iYWNrZ3JvdW5kVG9rZW5Gb3JOZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQ
b29sKCkuZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS50aHJvdHRsZXIoKS5iYWNrZ3JvdW5kQWN0aXZp
dHlUb2tlbigpOwogICAgICAgICBtX2ZvcmVncm91bmRUb2tlbkZvck5ldHdvcmtQcm9jZXNzID0g
bnVsbHB0cjsKICAgICAgICAgYnJlYWs7CiAgICAgCiAgICAgY2FzZSBBc3NlcnRpb25TdGF0ZTo6
Rm9yZWdyb3VuZDoKLSAgICAgICAgaWYgKHByb2Nlc3NQb29sKCkudXNlc05ldHdvcmtQcm9jZXNz
KCkpCi0gICAgICAgICAgICBtX2ZvcmVncm91bmRUb2tlbkZvck5ldHdvcmtQcm9jZXNzID0gcHJv
Y2Vzc1Bvb2woKS5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnRocm90dGxlcigpLmZvcmVncm91bmRB
Y3Rpdml0eVRva2VuKCk7CisgICAgICAgIG1fZm9yZWdyb3VuZFRva2VuRm9yTmV0d29ya1Byb2Nl
c3MgPSBwcm9jZXNzUG9vbCgpLmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkudGhyb3R0bGVyKCkuZm9y
ZWdyb3VuZEFjdGl2aXR5VG9rZW4oKTsKICAgICAgICAgbV9iYWNrZ3JvdW5kVG9rZW5Gb3JOZXR3
b3JrUHJvY2VzcyA9IG51bGxwdHI7CiAgICAgICAgIGZvciAoYXV0byYgcGFnZSA6IG1fcGFnZU1h
cC52YWx1ZXMoKSkKICAgICAgICAgICAgIHBhZ2UtPnByb2Nlc3NXaWxsQmVjb21lRm9yZWdyb3Vu
ZCgpOwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuaAko
cmV2aXNpb24gMTkyNzY1KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlByb2Nlc3NQ
cm94eS5oCSh3b3JraW5nIGNvcHkpCkBAIC01OCw3ICs1OCw2IEBAIHN0cnVjdCBQbHVnaW5JbmZv
OwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotY2xhc3MgRG93bmxvYWRQcm94eU1hcDsKIGNsYXNz
IE5ldHdvcmtQcm9jZXNzUHJveHk7CiBjbGFzcyBXZWJCYWNrRm9yd2FyZExpc3RJdGVtOwogY2xh
c3MgV2ViUGFnZUdyb3VwOwpAQCAtMTIwLDggKzExOSw2IEBAIHB1YmxpYzoKIAogICAgIHN0YXRp
YyBib29sIGZ1bGxLZXlib2FyZEFjY2Vzc0VuYWJsZWQoKTsKIAotICAgIERvd25sb2FkUHJveHkq
IGNyZWF0ZURvd25sb2FkUHJveHkoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Jik7Ci0K
ICAgICB2b2lkIGRpZFNhdmVUb1BhZ2VDYWNoZSgpOwogICAgIHZvaWQgcmVsZWFzZVBhZ2VDYWNo
ZSgpOwogCkBAIC0yNDIsNyArMjM5LDYgQEAgcHJpdmF0ZToKICAgICBIYXNoU2V0PFZpc2l0ZWRM
aW5rU3RvcmUqPiBtX3Zpc2l0ZWRMaW5rU3RvcmVzOwogICAgIEhhc2hTZXQ8V2ViVXNlckNvbnRl
bnRDb250cm9sbGVyUHJveHkqPiBtX3dlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3hpZXM7CiAK
LSAgICBzdGQ6OnVuaXF1ZV9wdHI8RG93bmxvYWRQcm94eU1hcD4gbV9kb3dubG9hZFByb3h5TWFw
OwogICAgIEN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5IG1fY3VzdG9tUHJvdG9jb2xNYW5hZ2Vy
UHJveHk7CiAKICAgICBIYXNoTWFwPHVpbnQ2NF90LCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKFdlYnNp
dGVEYXRhKT4+IG1fcGVuZGluZ0ZldGNoV2Vic2l0ZURhdGFDYWxsYmFja3M7CkluZGV4OiBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0FQSVByb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9BUElQcm9jZXNzUG9v
bENvbmZpZ3VyYXRpb24uY3BwCShyZXZpc2lvbiAxOTI3NjUpCisrKyBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL0FQSVByb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQ2LDEwICs0Niw4IEBAIFJlZjxQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24+IFByb2Nl
c3NQb28KICAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE1MTQxOC4KICAgICBjb25maWd1cmF0aW9uLT5tX3Byb2Nlc3NNb2RlbCA9IFdlYktpdDo6UHJv
Y2Vzc01vZGVsTXVsdGlwbGVTZWNvbmRhcnlQcm9jZXNzZXM7CiAgICAgY29uZmlndXJhdGlvbi0+
bV9tYXhpbXVtUHJvY2Vzc0NvdW50ID0gMTsKLSAgICBjb25maWd1cmF0aW9uLT5tX3VzZU5ldHdv
cmtQcm9jZXNzID0gdHJ1ZTsKICNlbHNlCiAgICAgY29uZmlndXJhdGlvbi0+bV9wcm9jZXNzTW9k
ZWwgPSBXZWJLaXQ6OlByb2Nlc3NNb2RlbFNoYXJlZFNlY29uZGFyeVByb2Nlc3M7Ci0gICAgY29u
ZmlndXJhdGlvbi0+bV91c2VOZXR3b3JrUHJvY2VzcyA9IGZhbHNlOwogI2VuZGlmCiAgICAgY29u
ZmlndXJhdGlvbi0+bV9jYWNoZU1vZGVsID0gV2ViS2l0OjpDYWNoZU1vZGVsRG9jdW1lbnRWaWV3
ZXI7CiAKQEAgLTgzLDcgKzgxLDYgQEAgUmVmPFByb2Nlc3NQb29sQ29uZmlndXJhdGlvbj4gUHJv
Y2Vzc1BvbwogCiAgICAgY29weS0+bV9zaG91bGRIYXZlTGVnYWN5RGF0YVN0b3JlID0gdGhpcy0+
bV9zaG91bGRIYXZlTGVnYWN5RGF0YVN0b3JlOwogICAgIGNvcHktPm1fcHJvY2Vzc01vZGVsID0g
dGhpcy0+bV9wcm9jZXNzTW9kZWw7Ci0gICAgY29weS0+bV91c2VOZXR3b3JrUHJvY2VzcyA9IHRo
aXMtPm1fdXNlTmV0d29ya1Byb2Nlc3M7CiAgICAgY29weS0+bV9tYXhpbXVtUHJvY2Vzc0NvdW50
ID0gdGhpcy0+bV9tYXhpbXVtUHJvY2Vzc0NvdW50OwogICAgIGNvcHktPm1fY2FjaGVNb2RlbCA9
IHRoaXMtPm1fY2FjaGVNb2RlbDsKICAgICBjb3B5LT5tX2Rpc2tDYWNoZVNpemVPdmVycmlkZSA9
IHRoaXMtPm1fZGlza0NhY2hlU2l6ZU92ZXJyaWRlOwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9BUElQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0FQSVByb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5o
CShyZXZpc2lvbiAxOTI3NjUpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0FQSVBy
b2Nlc3NQb29sQ29uZmlndXJhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC01MSw5ICs1MSw2IEBA
IHB1YmxpYzoKICAgICBXZWJLaXQ6OlByb2Nlc3NNb2RlbCBwcm9jZXNzTW9kZWwoKSBjb25zdCB7
IHJldHVybiBtX3Byb2Nlc3NNb2RlbDsgfQogICAgIHZvaWQgc2V0UHJvY2Vzc01vZGVsKFdlYktp
dDo6UHJvY2Vzc01vZGVsIHByb2Nlc3NNb2RlbCkgeyBtX3Byb2Nlc3NNb2RlbCA9IHByb2Nlc3NN
b2RlbDsgfSAKIAotICAgIGJvb2wgdXNlTmV0d29ya1Byb2Nlc3MoKSBjb25zdCB7IHJldHVybiBt
X3VzZU5ldHdvcmtQcm9jZXNzOyB9Ci0gICAgdm9pZCBzZXRVc2VOZXR3b3JrUHJvY2Vzcyhib29s
IHVzZU5ldHdvcmtQcm9jZXNzKSB7IG1fdXNlTmV0d29ya1Byb2Nlc3MgPSB1c2VOZXR3b3JrUHJv
Y2VzczsgfSAKLQogICAgIHVuc2lnbmVkIG1heGltdW1Qcm9jZXNzQ291bnQoKSBjb25zdCB7IHJl
dHVybiBtX21heGltdW1Qcm9jZXNzQ291bnQ7IH0KICAgICB2b2lkIHNldE1heGltdW1Qcm9jZXNz
Q291bnQodW5zaWduZWQgbWF4aW11bVByb2Nlc3NDb3VudCkgeyBtX21heGltdW1Qcm9jZXNzQ291
bnQgPSBtYXhpbXVtUHJvY2Vzc0NvdW50OyB9IAogCkBAIC05Nyw3ICs5NCw2IEBAIHByaXZhdGU6
CiAgICAgYm9vbCBtX3Nob3VsZEhhdmVMZWdhY3lEYXRhU3RvcmUgeyBmYWxzZSB9OwogCiAgICAg
V2ViS2l0OjpQcm9jZXNzTW9kZWwgbV9wcm9jZXNzTW9kZWwgeyBXZWJLaXQ6OlByb2Nlc3NNb2Rl
bE11bHRpcGxlU2Vjb25kYXJ5UHJvY2Vzc2VzIH07Ci0gICAgYm9vbCBtX3VzZU5ldHdvcmtQcm9j
ZXNzIHsgdHJ1ZSB9OwogICAgIHVuc2lnbmVkIG1fbWF4aW11bVByb2Nlc3NDb3VudCB7IDAgfTsK
ICAgICBXZWJLaXQ6OkNhY2hlTW9kZWwgbV9jYWNoZU1vZGVsIHsgV2ViS2l0OjpDYWNoZU1vZGVs
UHJpbWFyeVdlYkJyb3dzZXIgfTsKICAgICBpbnQ2NF90IG1fZGlza0NhY2hlU2l6ZU92ZXJyaWRl
IHsgLTEgfTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRl
eHQuY3BwCShyZXZpc2lvbiAxOTI3NjUpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L0MvV0tDb250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTU0LDExICs1NTQsNiBAQCB2b2lk
IFdLQ29udGV4dFNldEphdmFTY3JpcHRHYXJiYWdlQ29sbGVjCiAgICAgdG9JbXBsKGNvbnRleHRS
ZWYpLT5zZXRKYXZhU2NyaXB0R2FyYmFnZUNvbGxlY3RvclRpbWVyRW5hYmxlZChlbmFibGUpOwog
fQogCi12b2lkIFdLQ29udGV4dFNldFVzZXNOZXR3b3JrUHJvY2VzcyhXS0NvbnRleHRSZWYgY29u
dGV4dFJlZiwgYm9vbCB1c2VzTmV0d29ya1Byb2Nlc3MpCi17Ci0gICAgdG9JbXBsKGNvbnRleHRS
ZWYpLT5zZXRVc2VzTmV0d29ya1Byb2Nlc3ModXNlc05ldHdvcmtQcm9jZXNzKTsKLX0KLQogdm9p
ZCBXS0NvbnRleHRVc2VUZXN0aW5nTmV0d29ya1Nlc3Npb24oV0tDb250ZXh0UmVmIGNvbnRleHQp
CiB7CiAgICAgdG9JbXBsKGNvbnRleHQpLT51c2VUZXN0aW5nTmV0d29ya1Nlc3Npb24oKTsKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHRQcml2YXRlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dFByaXZh
dGUuaAkocmV2aXNpb24gMTkyNzY1KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9D
L1dLQ29udGV4dFByaXZhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtNzcsNyArNzcsNyBAQCBXS19F
WFBPUlQgdm9pZCBXS0NvbnRleHRXYXJtSW5pdGlhbFByb2NlCiAKIC8vIEZJWE1FOiBUaGlzIGZ1
bmN0aW9uIGlzIHRlbXBvcmFyeSBhbmQgdXNlZnVsIGR1cmluZyB0aGUgZGV2ZWxvcG1lbnQgb2Yg
dGhlIE5ldHdvcmtQcm9jZXNzIGZlYXR1cmUuCiAvLyBBdCBzb21lIHBvaW50IGl0IHNob3VsZCBi
ZSByZW1vdmVkLgotV0tfRVhQT1JUIHZvaWQgV0tDb250ZXh0U2V0VXNlc05ldHdvcmtQcm9jZXNz
KFdLQ29udGV4dFJlZiBjb250ZXh0LCBib29sIHVzZXNOZXR3b3JrUHJvY2Vzcyk7CitXS19FWFBP
UlQgdm9pZCBXS0NvbnRleHRTZXRVc2VzTmV0d29ya1Byb2Nlc3MoV0tDb250ZXh0UmVmLCBib29s
KTsKIAogLy8gVGVzdCBvbmx5LiBTaG91bGQgYmUgY2FsbGVkIGJlZm9yZSBhbnkgc2Vjb25kYXJ5
IHByb2Nlc3NlcyBhcmUgc3RhcnRlZC4KIFdLX0VYUE9SVCB2b2lkIFdLQ29udGV4dFVzZVRlc3Rp
bmdOZXR3b3JrU2Vzc2lvbihXS0NvbnRleHRSZWYgY29udGV4dCk7CkluZGV4OiBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLUHJvY2Vzc0dyb3VwLm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcm9jZXNzR3JvdXAubW0JKHJl
dmlzaW9uIDE5Mjc2NSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQ
cm9jZXNzR3JvdXAubW0JKHdvcmtpbmcgY29weSkKQEAgLTE5Myw3ICsxOTMsNiBAQCAtIChpZClp
bml0V2l0aEluamVjdGVkQnVuZGxlVVJMOihOU1VSTCAqCiAgICAgYXV0byBjb25maWd1cmF0aW9u
ID0gQVBJOjpQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb246OmNyZWF0ZVdpdGhMZWdhY3lPcHRpb25z
KCk7CiAgICAgY29uZmlndXJhdGlvbi0+c2V0SW5qZWN0ZWRCdW5kbGVQYXRoKGJ1bmRsZVVSTCA/
IFN0cmluZyhidW5kbGVVUkwucGF0aCkgOiBTdHJpbmcoKSk7CiAjaWYgUExBVEZPUk0oSU9TKQot
ICAgIGNvbmZpZ3VyYXRpb24tPnNldFVzZU5ldHdvcmtQcm9jZXNzKHRydWUpOwogICAgIGNvbmZp
Z3VyYXRpb24tPnNldFByb2Nlc3NNb2RlbChQcm9jZXNzTW9kZWxNdWx0aXBsZVNlY29uZGFyeVBy
b2Nlc3Nlcyk7CiAjZW5kaWYKIApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9l
ZmwvZXdrX2NvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZWZsL2V3a19jb250ZXh0LmNwcAkocmV2aXNpb24gMTkyNzY1KQorKysgU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNzcsNyArMjc3LDYgQEAgdm9pZCBFd2tDb250ZXh0OjpzZXRQcm9jZXNzTW9kZWwoRXdrX1By
bwogICAgIGlmIChXS0NvbnRleHRHZXRQcm9jZXNzTW9kZWwobV9jb250ZXh0LmdldCgpKSA9PSBu
ZXdXS1Byb2Nlc3NNb2RlbCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgV0tDb250ZXh0U2V0VXNl
c05ldHdvcmtQcm9jZXNzKG1fY29udGV4dC5nZXQoKSwgbmV3V0tQcm9jZXNzTW9kZWwgPT0ga1dL
UHJvY2Vzc01vZGVsTXVsdGlwbGVTZWNvbmRhcnlQcm9jZXNzZXMpOwogICAgIFdLQ29udGV4dFNl
dFByb2Nlc3NNb2RlbChtX2NvbnRleHQuZ2V0KCksIG5ld1dLUHJvY2Vzc01vZGVsKTsKIH0KIApJ
bmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQb29sQ29jb2Eu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nl
c3NQb29sQ29jb2EubW0JKHJldmlzaW9uIDE5Mjc2NSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9Db2NvYS9XZWJQcm9jZXNzUG9vbENvY29hLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMTQs
NyArMTE0LDcgQEAgc3RhdGljIHZvaWQgcmVnaXN0ZXJVc2VyRGVmYXVsdHNJZk5lZWRlZAogCiB2
b2lkIFdlYlByb2Nlc3NQb29sOjp1cGRhdGVQcm9jZXNzU3VwcHJlc3Npb25TdGF0ZSgpCiB7Ci0g
ICAgaWYgKHVzZXNOZXR3b3JrUHJvY2VzcygpICYmIG1fbmV0d29ya1Byb2Nlc3MpCisgICAgaWYg
KG1fbmV0d29ya1Byb2Nlc3MpCiAgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNldFByb2Nlc3NT
dXBwcmVzc2lvbkVuYWJsZWQocHJvY2Vzc1N1cHByZXNzaW9uRW5hYmxlZCgpKTsKIAogI2lmIEVO
QUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQpAQCAtMTkwLDExICsxOTAsNiBAQCB2b2lkIFdlYlBy
b2Nlc3NQb29sOjpwbGF0Zm9ybUluaXRpYWxpemVXCiAKICAgICBwYXJhbWV0ZXJzLnVpUHJvY2Vz
c0J1bmRsZUlkZW50aWZpZXIgPSBTdHJpbmcoW1tOU0J1bmRsZSBtYWluQnVuZGxlXSBidW5kbGVJ
ZGVudGlmaWVyXSk7CiAKLSAgICBpZiAoIXVzZXNOZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAg
IGZvciAoY29uc3QgYXV0byYgc2NoZW1lIDogZ2xvYmFsVVJMU2NoZW1lc1dpdGhDdXN0b21Qcm90
b2NvbEhhbmRsZXJzKCkpCi0gICAgICAgICAgICBwYXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3Rl
cmVkRm9yQ3VzdG9tUHJvdG9jb2xzLmFwcGVuZChzY2hlbWUpOwotICAgIH0KLQogICAgIHBhcmFt
ZXRlcnMuZm9udFdoaXRlbGlzdCA9IG1fZm9udFdoaXRlbGlzdDsKIAogICAgIGlmIChtX2J1bmRs
ZVBhcmFtZXRlcnMpIHsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Eb3dubG9hZHMv
RG93bmxvYWRQcm94eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5LmNwcAkocmV2aXNpb24gMTkyNzY1KQorKysgU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNzEsMTMgKzcxLDggQEAgdm9pZCBEb3dubG9hZFByb3h5OjpjYW5jZWwoKQogICAg
IGlmICghbV9wcm9jZXNzUG9vbCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKG1fcHJvY2Vz
c1Bvb2wtPnVzZXNOZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgIGlmIChOZXR3b3JrUHJvY2Vz
c1Byb3h5KiBuZXR3b3JrUHJvY2VzcyA9IG1fcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkp
Ci0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+Y29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2Vz
OjpOZXR3b3JrUHJvY2Vzczo6Q2FuY2VsRG93bmxvYWQobV9kb3dubG9hZElEKSwgMCk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX3Byb2Nlc3NQb29sLT5zZW5kVG9BbGxQcm9jZXNz
ZXMoTWVzc2FnZXM6OldlYlByb2Nlc3M6OkNhbmNlbERvd25sb2FkKG1fZG93bmxvYWRJRCkpOwor
ICAgIGlmIChOZXR3b3JrUHJvY2Vzc1Byb3h5KiBuZXR3b3JrUHJvY2VzcyA9IG1fcHJvY2Vzc1Bv
b2wtPm5ldHdvcmtQcm9jZXNzKCkpCisgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5jb25uZWN0aW9u
KCktPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpDYW5jZWxEb3dubG9hZChtX2Rvd25s
b2FkSUQpLCAwKTsKIH0KIAogdm9pZCBEb3dubG9hZFByb3h5OjppbnZhbGlkYXRlKCkKSW5kZXg6
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2ViUHJvY2Vzc1Bvb2xFZmwuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2ViUHJvY2Vzc1Bvb2xFZmwu
Y3BwCShyZXZpc2lvbiAxOTI3NjUpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1dl
YlByb2Nlc3NQb29sRWZsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTMsNyArOTMsNiBAQCB2b2lk
IFdlYlByb2Nlc3NQb29sOjpwbGF0Zm9ybUluaXRpYWxpemVXCiAgICAgcGFyYW1ldGVycy51cmxT
Y2hlbWVzUmVnaXN0ZXJlZEZvckN1c3RvbVByb3RvY29scyA9IHN1cHBsZW1lbnQ8V2ViU291cEN1
c3RvbVByb3RvY29sUmVxdWVzdE1hbmFnZXI+KCktPnJlZ2lzdGVyZWRTY2hlbWVzRm9yQ3VzdG9t
UHJvdG9jb2xzKCk7CiAgICAgc3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCktPmdl
dENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlKHBhcmFtZXRlcnMuY29va2llUGVyc2lzdGVudFN0b3Jh
Z2VQYXRoLCBwYXJhbWV0ZXJzLmNvb2tpZVBlcnNpc3RlbnRTdG9yYWdlVHlwZSk7CiAgICAgcGFy
YW1ldGVycy5jb29raWVBY2NlcHRQb2xpY3kgPSBtX2luaXRpYWxIVFRQQ29va2llQWNjZXB0UG9s
aWN5OwotICAgIHBhcmFtZXRlcnMuaWdub3JlVExTRXJyb3JzID0gbV9pZ25vcmVUTFNFcnJvcnM7
CiAgICAgcGFyYW1ldGVycy5kaXNrQ2FjaGVEaXJlY3RvcnkgPSBtX2NvbmZpZ3VyYXRpb24tPmRp
c2tDYWNoZURpcmVjdG9yeSgpOwogfQogCkBAIC0xNDYsNyArMTQ1LDYgQEAgU3RyaW5nIFdlYlBy
b2Nlc3NQb29sOjpsZWdhY3lQbGF0Zm9ybURlZgogdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0SWdu
b3JlVExTRXJyb3JzKGJvb2wgaWdub3JlVExTRXJyb3JzKQogewogICAgIG1faWdub3JlVExTRXJy
b3JzID0gaWdub3JlVExTRXJyb3JzOwotICAgIHNlbmRUb0FsbFByb2Nlc3NlcyhNZXNzYWdlczo6
V2ViUHJvY2Vzczo6U2V0SWdub3JlVExTRXJyb3JzKG1faWdub3JlVExTRXJyb3JzKSk7CiB9CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQcm9jZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlByb2Nlc3MuY3BwCShyZXZpc2lvbiAxOTI3NjUpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlByb2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw2IEBACiAjaW5j
bHVkZSAiQVBJUGFnZUhhbmRsZS5oIgogI2luY2x1ZGUgIkF1dGhlbnRpY2F0aW9uTWFuYWdlci5o
IgogI2luY2x1ZGUgIkNoaWxkUHJvY2Vzc01lc3NhZ2VzLmgiCi0jaW5jbHVkZSAiQ3VzdG9tUHJv
dG9jb2xNYW5hZ2VyLmgiCiAjaW5jbHVkZSAiRHJhd2luZ0FyZWEuaCIKICNpbmNsdWRlICJFdmVu
dERpc3BhdGNoZXIuaCIKICNpbmNsdWRlICJJbmplY3RlZEJ1bmRsZS5oIgpAQCAtMTU2LDcgKzE1
NSw2IEBAIFdlYlByb2Nlc3M6OldlYlByb2Nlc3MoKQogICAgICwgbV9mdWxsS2V5Ym9hcmRBY2Nl
c3NFbmFibGVkKGZhbHNlKQogICAgICwgbV90ZXh0Q2hlY2tlclN0YXRlKCkKICAgICAsIG1faWNv
bkRhdGFiYXNlUHJveHkobmV3IFdlYkljb25EYXRhYmFzZVByb3h5KHRoaXMpKQotICAgICwgbV91
c2VzTmV0d29ya1Byb2Nlc3MoZmFsc2UpCiAgICAgLCBtX3dlYlJlc291cmNlTG9hZFNjaGVkdWxl
cihuZXcgV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyKQogICAgICwgbV9kbnNQcmVmZXRjaEh5c3Rl
cmVyaXMoW3RoaXNdKEh5c3RlcmVzaXNTdGF0ZSBzdGF0ZSkgeyBpZiAoc3RhdGUgPT0gSHlzdGVy
ZXNpc1N0YXRlOjpTdG9wcGVkKSBtX2Ruc1ByZWZldGNoZWRIb3N0cy5jbGVhcigpOyB9KQogI2lm
IEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQpAQCAtMTg3LDcgKzE4NSw2IEBAIFdlYlByb2Nl
c3M6OldlYlByb2Nlc3MoKQogI2lmIEVOQUJMRShOT1RJRklDQVRJT05TKSB8fCBFTkFCTEUoTEVH
QUNZX05PVElGSUNBVElPTlMpCiAgICAgYWRkU3VwcGxlbWVudDxXZWJOb3RpZmljYXRpb25NYW5h
Z2VyPigpOwogI2VuZGlmCi0gICAgYWRkU3VwcGxlbWVudDxDdXN0b21Qcm90b2NvbE1hbmFnZXI+
KCk7CiAjaWYgRU5BQkxFKEJBVFRFUllfU1RBVFVTKQogICAgIGFkZFN1cHBsZW1lbnQ8V2ViQmF0
dGVyeU1hbmFnZXI+KCk7CiAjZW5kaWYKQEAgLTI0NSwzMiArMjQyLDEwIEBAIHZvaWQgV2ViUHJv
Y2Vzczo6aW5pdGlhbGl6ZUNvbm5lY3Rpb24oSVAKICAgICBjb25uZWN0aW9uLT5zZXRPbmx5U2Vu
ZE1lc3NhZ2VzQXNEaXNwYXRjaFdoZW5XYWl0aW5nRm9yU3luY1JlcGx5V2hlblByb2Nlc3NpbmdT
dWNoQU1lc3NhZ2UodHJ1ZSk7CiB9CiAKLXZvaWQgV2ViUHJvY2Vzczo6ZGlkQ3JlYXRlRG93bmxv
YWQoKQotewotICAgIGRpc2FibGVUZXJtaW5hdGlvbigpOwotfQotCi12b2lkIFdlYlByb2Nlc3M6
OmRpZERlc3Ryb3lEb3dubG9hZCgpCi17Ci0gICAgZW5hYmxlVGVybWluYXRpb24oKTsKLX0KLQot
SVBDOjpDb25uZWN0aW9uKiBXZWJQcm9jZXNzOjpkb3dubG9hZFByb3h5Q29ubmVjdGlvbigpCi17
Ci0gICAgcmV0dXJuIHBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCk7Ci19Ci0KLUF1dGhlbnRpY2F0
aW9uTWFuYWdlciYgV2ViUHJvY2Vzczo6ZG93bmxvYWRzQXV0aGVudGljYXRpb25NYW5hZ2VyKCkK
LXsKLSAgICByZXR1cm4gKnN1cHBsZW1lbnQ8QXV0aGVudGljYXRpb25NYW5hZ2VyPigpOwotfQot
CiB2b2lkIFdlYlByb2Nlc3M6OmluaXRpYWxpemVXZWJQcm9jZXNzKFdlYlByb2Nlc3NDcmVhdGlv
blBhcmFtZXRlcnMmJiBwYXJhbWV0ZXJzKQogewogICAgIEFTU0VSVChtX3BhZ2VNYXAuaXNFbXB0
eSgpKTsKIAotICAgIG1fdXNlc05ldHdvcmtQcm9jZXNzID0gcGFyYW1ldGVycy51c2VzTmV0d29y
a1Byb2Nlc3M7Ci0KICNpZiBPUyhMSU5VWCkKICAgICBXZWJDb3JlOjpNZW1vcnlQcmVzc3VyZUhh
bmRsZXI6OlJlbGllZkxvZ2dlcjo6c2V0TG9nZ2luZ0VuYWJsZWQocGFyYW1ldGVycy5zaG91bGRF
bmFibGVNZW1vcnlQcmVzc3VyZVJlbGllZkxvZ2dpbmcpOwogI2VuZGlmCkBAIC0zNTIsOCArMzI3
LDcgQEAgdm9pZCBXZWJQcm9jZXNzOjppbml0aWFsaXplV2ViUHJvY2VzcyhXZQogICAgIGVuc3Vy
ZU5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbigpOwogCiAjaWYgUExBVEZPUk0oQ09DT0EpCi0gICAg
aWYgKHVzZXNOZXR3b3JrUHJvY2VzcygpKQotICAgICAgICBDb29raWVTdG9yYWdlU2hpbTo6c2lu
Z2xldG9uKCkuaW5pdGlhbGl6ZSgpOworICAgIENvb2tpZVN0b3JhZ2VTaGltOjpzaW5nbGV0b24o
KS5pbml0aWFsaXplKCk7CiAjZW5kaWYKICAgICBzZXRUZXJtaW5hdGlvblRpbWVvdXQocGFyYW1l
dGVycy50ZXJtaW5hdGlvblRpbWVvdXQpOwogCkBAIC0zODcsOSArMzYxLDYgQEAgdm9pZCBXZWJQ
cm9jZXNzOjppbml0aWFsaXplV2ViUHJvY2VzcyhXZQogCiB2b2lkIFdlYlByb2Nlc3M6OmVuc3Vy
ZU5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbigpCiB7Ci0gICAgaWYgKCFtX3VzZXNOZXR3b3JrUHJv
Y2VzcykKLSAgICAgICAgcmV0dXJuOwotCiAgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3NDb25uZWN0
aW9uKQogICAgICAgICByZXR1cm47CiAKQEAgLTQ5OCwxNCArNDY5LDYgQEAgdm9pZCBXZWJQcm9j
ZXNzOjpkZXN0cm95UHJpdmF0ZUJyb3dzaW5nUwogI2VuZGlmCiB9CiAKLURvd25sb2FkTWFuYWdl
ciYgV2ViUHJvY2Vzczo6ZG93bmxvYWRNYW5hZ2VyKCkKLXsKLSAgICBBU1NFUlQoIXVzZXNOZXR3
b3JrUHJvY2VzcygpKTsKLQotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxEb3dubG9hZE1hbmFn
ZXI+IGRvd25sb2FkTWFuYWdlcih0aGlzKTsKLSAgICByZXR1cm4gZG93bmxvYWRNYW5hZ2VyOwot
fQotCiAjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCiBQbHVnaW5Qcm9jZXNzQ29ubmVj
dGlvbk1hbmFnZXImIFdlYlByb2Nlc3M6OnBsdWdpblByb2Nlc3NDb25uZWN0aW9uTWFuYWdlcigp
CiB7CkBAIC01NjgsNyArNTMxLDYgQEAgdm9pZCBXZWJQcm9jZXNzOjpyZW1vdmVXZWJQYWdlKHVp
bnQ2NF90IAogYm9vbCBXZWJQcm9jZXNzOjpzaG91bGRUZXJtaW5hdGUoKQogewogICAgIEFTU0VS
VChtX3BhZ2VNYXAuaXNFbXB0eSgpKTsKLSAgICBBU1NFUlQodXNlc05ldHdvcmtQcm9jZXNzKCkg
fHwgIWRvd25sb2FkTWFuYWdlcigpLmlzRG93bmxvYWRpbmcoKSk7CiAKICAgICAvLyBGSVhNRTog
dGhlIFNob3VsZFRlcm1pbmF0ZSBtZXNzYWdlIHNob3VsZCBhbHNvIHNlbmQgdGVybWluYXRpb24g
cGFyYW1ldGVycywgc3VjaCBhcyBhbnkgc2Vzc2lvbiBjb29raWVzIHRoYXQgbmVlZCB0byBiZSBw
cmVzZXJ2ZWQuCiAgICAgYm9vbCBzaG91bGRUZXJtaW5hdGUgPSBmYWxzZTsKQEAgLTEwMTcsMTUg
Kzk3OSw4IEBAIHZvaWQgV2ViUHJvY2Vzczo6c2V0SW5qZWN0ZWRCdW5kbGVQYXJhbWUKICAgICBp
bmplY3RlZEJ1bmRsZS0+c2V0QnVuZGxlUGFyYW1ldGVycyh2YWx1ZSk7CiB9CiAKLWJvb2wgV2Vi
UHJvY2Vzczo6dXNlc05ldHdvcmtQcm9jZXNzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV91c2Vz
TmV0d29ya1Byb2Nlc3M7Ci19Ci0KIE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbiogV2ViUHJvY2Vz
czo6bmV0d29ya0Nvbm5lY3Rpb24oKQogewotICAgIEFTU0VSVChtX3VzZXNOZXR3b3JrUHJvY2Vz
cyk7Ci0KICAgICAvLyBJZiB3ZSd2ZSBsb3N0IG91ciBjb25uZWN0aW9uIHRvIHRoZSBuZXR3b3Jr
IHByb2Nlc3MgKGUuZy4gaXQgY3Jhc2hlZCkgdHJ5IHRvIHJlLWVzdGFibGlzaCBpdC4KICAgICBp
ZiAoIW1fbmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKQogICAgICAgICBlbnN1cmVOZXR3b3JrUHJv
Y2Vzc0Nvbm5lY3Rpb24oKTsKQEAgLTEwOTQsMjcgKzEwNDksNiBAQCB2b2lkIFdlYlByb2Nlc3M6
OmVuc3VyZVdlYlRvRGF0YWJhc2VQcm9jCiAKICNlbmRpZiAvLyBFTkFCTEVEKERBVEFCQVNFX1BS
T0NFU1MpCiAKLXZvaWQgV2ViUHJvY2Vzczo6ZG93bmxvYWRSZXF1ZXN0KFNlc3Npb25JRCBzZXNz
aW9uSUQsIHVpbnQ2NF90IGRvd25sb2FkSUQsIHVpbnQ2NF90IGluaXRpYXRpbmdQYWdlSUQsIGNv
bnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKLXsKLSAgICBXZWJQYWdlKiBpbml0aWF0aW5n
UGFnZSA9IGluaXRpYXRpbmdQYWdlSUQgPyB3ZWJQYWdlKGluaXRpYXRpbmdQYWdlSUQpIDogMDsK
LQotICAgIFJlc291cmNlUmVxdWVzdCByZXF1ZXN0V2l0aE9yaWdpbmFsVVJMID0gcmVxdWVzdDsK
LSAgICBpZiAoaW5pdGlhdGluZ1BhZ2UpCi0gICAgICAgIGluaXRpYXRpbmdQYWdlLT5tYWluRnJh
bWUoKS0+bG9hZGVyKCkuc2V0T3JpZ2luYWxVUkxGb3JEb3dubG9hZFJlcXVlc3QocmVxdWVzdFdp
dGhPcmlnaW5hbFVSTCk7Ci0KLSAgICBkb3dubG9hZE1hbmFnZXIoKS5zdGFydERvd25sb2FkKHNl
c3Npb25JRCwgZG93bmxvYWRJRCwgcmVxdWVzdFdpdGhPcmlnaW5hbFVSTCk7Ci19Ci0KLXZvaWQg
V2ViUHJvY2Vzczo6cmVzdW1lRG93bmxvYWQodWludDY0X3QgZG93bmxvYWRJRCwgY29uc3QgSVBD
OjpEYXRhUmVmZXJlbmNlJiByZXN1bWVEYXRhLCBjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFdl
YktpdDo6U2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlJiBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlKQot
ewotICAgIGRvd25sb2FkTWFuYWdlcigpLnJlc3VtZURvd25sb2FkKGRvd25sb2FkSUQsIHJlc3Vt
ZURhdGEsIHBhdGgsIHNhbmRib3hFeHRlbnNpb25IYW5kbGUpOwotfQotCi12b2lkIFdlYlByb2Nl
c3M6OmNhbmNlbERvd25sb2FkKHVpbnQ2NF90IGRvd25sb2FkSUQpCi17Ci0gICAgZG93bmxvYWRN
YW5hZ2VyKCkuY2FuY2VsRG93bmxvYWQoZG93bmxvYWRJRCk7Ci19Ci0KIHZvaWQgV2ViUHJvY2Vz
czo6c2V0RW5oYW5jZWRBY2Nlc3NpYmlsaXR5KGJvb2wgZmxhZykKIHsKICAgICBXZWJDb3JlOjpB
WE9iamVjdENhY2hlOjpzZXRFbmhhbmNlZFVzZXJJbnRlcmZhY2VBY2Nlc3NpYmlsaXR5KGZsYWcp
OwpAQCAtMTQ1NiwxNiArMTM5MCwxMiBAQCB2b2lkIFdlYlByb2Nlc3M6OnByZWZldGNoRE5TKGNv
bnN0IFN0cmluCiAgICAgaWYgKGhvc3RuYW1lLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgaWYgKHVzZXNOZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgIGlmIChtX2Ruc1ByZWZl
dGNoZWRIb3N0cy5hZGQoaG9zdG5hbWUpLmlzTmV3RW50cnkpCi0gICAgICAgICAgICBuZXR3b3Jr
Q29ubmVjdGlvbigpLT5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtDb25uZWN0
aW9uVG9XZWJQcm9jZXNzOjpQcmVmZXRjaEROUyhob3N0bmFtZSksIDApOwotICAgICAgICAvLyBU
aGUgRE5TIHByZWZldGNoZWQgaG9zdHMgY2FjaGUgaXMgb25seSB0byBhdm9pZCBhc2tpbmcgZm9y
IHRoZSBzYW1lIGhvc3RzIHRvbyBtYW55IHRpbWVzCi0gICAgICAgIC8vIGluIGEgdmVyeSBzaG9y
dCBwZXJpb2Qgb2YgdGltZSwgcHJvZHVjaW5nIGEgbG90IG9mIElQQyB0cmFmZmljLiBTbyB3ZSBj
bGVhciB0aGlzIGNhY2hlIGFmdGVyCi0gICAgICAgIC8vIHNvbWUgdGltZSBvZiBubyBETlMgcmVx
dWVzdHMuCi0gICAgICAgIG1fZG5zUHJlZmV0Y2hIeXN0ZXJlcmlzLmltcHVsc2UoKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLSAgICBXZWJDb3JlOjpwcmVmZXRjaEROUyhob3N0bmFtZSk7Cisg
ICAgaWYgKG1fZG5zUHJlZmV0Y2hlZEhvc3RzLmFkZChob3N0bmFtZSkuaXNOZXdFbnRyeSkKKyAg
ICAgICAgbmV0d29ya0Nvbm5lY3Rpb24oKS0+Y29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpO
ZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6UHJlZmV0Y2hETlMoaG9zdG5hbWUpLCAwKTsK
KyAgICAvLyBUaGUgRE5TIHByZWZldGNoZWQgaG9zdHMgY2FjaGUgaXMgb25seSB0byBhdm9pZCBh
c2tpbmcgZm9yIHRoZSBzYW1lIGhvc3RzIHRvbyBtYW55IHRpbWVzCisgICAgLy8gaW4gYSB2ZXJ5
IHNob3J0IHBlcmlvZCBvZiB0aW1lLCBwcm9kdWNpbmcgYSBsb3Qgb2YgSVBDIHRyYWZmaWMuIFNv
IHdlIGNsZWFyIHRoaXMgY2FjaGUgYWZ0ZXIKKyAgICAvLyBzb21lIHRpbWUgb2Ygbm8gRE5TIHJl
cXVlc3RzLgorICAgIG1fZG5zUHJlZmV0Y2hIeXN0ZXJlcmlzLmltcHVsc2UoKTsKIH0KIAogfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBy
b2Nlc3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nl
c3MuaAkocmV2aXNpb24gMTkyNzY1KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
cm9jZXNzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDYgQEAKIAogI2luY2x1ZGUgIkNh
Y2hlTW9kZWwuaCIKICNpbmNsdWRlICJDaGlsZFByb2Nlc3MuaCIKLSNpbmNsdWRlICJEb3dubG9h
ZE1hbmFnZXIuaCIKICNpbmNsdWRlICJEcmF3aW5nQXJlYS5oIgogI2luY2x1ZGUgIlBsdWdpblBy
b2Nlc3NDb25uZWN0aW9uTWFuYWdlci5oIgogI2luY2x1ZGUgIlJlc291cmNlQ2FjaGVzVG9DbGVh
ci5oIgpAQCAtNzEsNyArNzAsNiBAQCBzdHJ1Y3QgU2VjdXJpdHlPcmlnaW5EYXRhOwogCiBuYW1l
c3BhY2UgV2ViS2l0IHsKIAotY2xhc3MgRG93bmxvYWRNYW5hZ2VyOwogY2xhc3MgRXZlbnREaXNw
YXRjaGVyOwogY2xhc3MgSW5qZWN0ZWRCdW5kbGU7CiBjbGFzcyBOZXR3b3JrUHJvY2Vzc0Nvbm5l
Y3Rpb247CkBAIC05Myw4ICs5MSw3IEBAIHN0cnVjdCBXZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0
ZXJzOwogY2xhc3MgV2ViVG9EYXRhYmFzZVByb2Nlc3NDb25uZWN0aW9uOwogI2VuZGlmCiAKLWNs
YXNzIFdlYlByb2Nlc3MgOiBwdWJsaWMgQ2hpbGRQcm9jZXNzLCBwcml2YXRlIERvd25sb2FkTWFu
YWdlcjo6Q2xpZW50IHsKLSAgICBmcmllbmQgY2xhc3MgTmV2ZXJEZXN0cm95ZWQ8RG93bmxvYWRN
YW5hZ2VyPjsKK2NsYXNzIFdlYlByb2Nlc3MgOiBwdWJsaWMgQ2hpbGRQcm9jZXNzIHsKIHB1Ymxp
YzoKICAgICBzdGF0aWMgV2ViUHJvY2VzcyYgc2luZ2xldG9uKCk7CiAKQEAgLTE0NCw3ICsxNDEs
NiBAQCBwdWJsaWM6CiAjZW5kaWYKICAgICAKICAgICBjb25zdCBUZXh0Q2hlY2tlclN0YXRlJiB0
ZXh0Q2hlY2tlclN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV90ZXh0Q2hlY2tlclN0YXRlOyB9Ci0g
ICAgRG93bmxvYWRNYW5hZ2VyJiBkb3dubG9hZE1hbmFnZXIoKTsKIAogICAgIHZvaWQgY2xlYXJS
ZXNvdXJjZUNhY2hlcyhSZXNvdXJjZUNhY2hlc1RvQ2xlYXIgPSBBbGxSZXNvdXJjZUNhY2hlcyk7
CiAgICAgCkBAIC0xNTQsOCArMTUwLDYgQEAgcHVibGljOgogCiAgICAgRXZlbnREaXNwYXRjaGVy
JiBldmVudERpc3BhdGNoZXIoKSB7IHJldHVybiAqbV9ldmVudERpc3BhdGNoZXI7IH0KIAotICAg
IGJvb2wgdXNlc05ldHdvcmtQcm9jZXNzKCkgY29uc3Q7Ci0KICAgICBOZXR3b3JrUHJvY2Vzc0Nv
bm5lY3Rpb24qIG5ldHdvcmtDb25uZWN0aW9uKCk7CiAgICAgdm9pZCBuZXR3b3JrUHJvY2Vzc0Nv
bm5lY3Rpb25DbG9zZWQoTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKik7CiAgICAgV2ViUmVzb3Vy
Y2VMb2FkU2NoZWR1bGVyJiB3ZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIoKTsKQEAgLTE4MSwxMCAr
MTc1LDYgQEAgcHVibGljOgogCiAgICAgdm9pZCB1cGRhdGVBY3RpdmVQYWdlcygpOwogCi0jaWYg
VVNFKFNPVVApCi0gICAgdm9pZCBhbGxvd1NwZWNpZmljSFRUUFNDZXJ0aWZpY2F0ZUZvckhvc3Qo
Y29uc3QgV2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvJiwgY29uc3QgU3RyaW5nJiBob3N0KTsKLSNl
bmRpZgotCiAgICAgdm9pZCBwcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5KGJvb2wmIGhhbmRs
ZWQpOwogICAgIHZvaWQgcHJlcGFyZVRvU3VzcGVuZCgpOwogICAgIHZvaWQgY2FuY2VsUHJlcGFy
ZVRvU3VzcGVuZCgpOwpAQCAtMjE3LDEyICsyMDcsNiBAQCBwcml2YXRlOgogICAgIFdlYlByb2Nl
c3MoKTsKICAgICB+V2ViUHJvY2VzcygpOwogCi0gICAgLy8gRG93bmxvYWRNYW5hZ2VyOjpDbGll
bnQuCi0gICAgdmlydHVhbCB2b2lkIGRpZENyZWF0ZURvd25sb2FkKCkgb3ZlcnJpZGU7Ci0gICAg
dmlydHVhbCB2b2lkIGRpZERlc3Ryb3lEb3dubG9hZCgpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwg
SVBDOjpDb25uZWN0aW9uKiBkb3dubG9hZFByb3h5Q29ubmVjdGlvbigpIG92ZXJyaWRlOwotICAg
IHZpcnR1YWwgQXV0aGVudGljYXRpb25NYW5hZ2VyJiBkb3dubG9hZHNBdXRoZW50aWNhdGlvbk1h
bmFnZXIoKSBvdmVycmlkZTsKLQogICAgIHZvaWQgaW5pdGlhbGl6ZVdlYlByb2Nlc3MoV2ViUHJv
Y2Vzc0NyZWF0aW9uUGFyYW1ldGVycyYmKTsKICAgICB2b2lkIHBsYXRmb3JtSW5pdGlhbGl6ZVdl
YlByb2Nlc3MoV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyYmKTsKIApAQCAtMjU4LDEwICsy
NDIsNiBAQCBwcml2YXRlOgogICAgIHZvaWQgc3RhcnRNZW1vcnlTYW1wbGVyKGNvbnN0IFNhbmRi
b3hFeHRlbnNpb246OkhhbmRsZSYsIGNvbnN0IFN0cmluZyYsIGNvbnN0IGRvdWJsZSk7CiAgICAg
dm9pZCBzdG9wTWVtb3J5U2FtcGxlcigpOwogCi0gICAgdm9pZCBkb3dubG9hZFJlcXVlc3QoV2Vi
Q29yZTo6U2Vzc2lvbklELCB1aW50NjRfdCBkb3dubG9hZElELCB1aW50NjRfdCBpbml0aWF0aW5n
UGFnZUlELCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmKTsKLSAgICB2b2lkIHJlc3Vt
ZURvd25sb2FkKHVpbnQ2NF90IGRvd25sb2FkSUQsIGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYg
cmVzdW1lRGF0YSwgY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBTYW5kYm94RXh0ZW5zaW9uOjpI
YW5kbGUmKTsKLSAgICB2b2lkIGNhbmNlbERvd25sb2FkKHVpbnQ2NF90IGRvd25sb2FkSUQpOwot
CiAgICAgdm9pZCBzZXRUZXh0Q2hlY2tlclN0YXRlKGNvbnN0IFRleHRDaGVja2VyU3RhdGUmKTsK
ICAgICAKICAgICB2b2lkIGdldFdlYkNvcmVTdGF0aXN0aWNzKHVpbnQ2NF90IGNhbGxiYWNrSUQp
OwpAQCAtMjc2LDEwICsyNTYsNiBAQCBwcml2YXRlOgogICAgIHZvaWQgZGVsZXRlV2Vic2l0ZURh
dGEoV2ViQ29yZTo6U2Vzc2lvbklELCB1aW50NjRfdCB3ZWJzaXRlRGF0YVR5cGVzLCBzdGQ6OmNo
cm9ubzo6c3lzdGVtX2Nsb2NrOjp0aW1lX3BvaW50IG1vZGlmaWVkU2luY2UsIHVpbnQ2NF90IGNh
bGxiYWNrSUQpOwogICAgIHZvaWQgZGVsZXRlV2Vic2l0ZURhdGFGb3JPcmlnaW5zKFdlYkNvcmU6
OlNlc3Npb25JRCwgdWludDY0X3Qgd2Vic2l0ZURhdGFUeXBlcywgY29uc3QgVmVjdG9yPFdlYkNv
cmU6OlNlY3VyaXR5T3JpZ2luRGF0YT4mIG9yaWdpbnMsIHVpbnQ2NF90IGNhbGxiYWNrSUQpOwog
Ci0jaWYgVVNFKFNPVVApCi0gICAgdm9pZCBzZXRJZ25vcmVUTFNFcnJvcnMoYm9vbCk7Ci0jZW5k
aWYKLQogICAgIHZvaWQgc2V0TWVtb3J5Q2FjaGVEaXNhYmxlZChib29sKTsKIAogI2lmIEVOQUJM
RShTRVJWSUNFX0NPTlRST0xTKQpAQCAtMzU4LDcgKzMzNCw2IEBAIHByaXZhdGU6CiAKICAgICB2
b2lkIGVuc3VyZU5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbigpOwogICAgIFJlZlB0cjxOZXR3b3Jr
UHJvY2Vzc0Nvbm5lY3Rpb24+IG1fbmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uOwotICAgIGJvb2wg
bV91c2VzTmV0d29ya1Byb2Nlc3M7CiAgICAgV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyKiBtX3dl
YlJlc291cmNlTG9hZFNjaGVkdWxlcjsKICAgICBIYXNoU2V0PFN0cmluZz4gbV9kbnNQcmVmZXRj
aGVkSG9zdHM7CiAgICAgV2ViQ29yZTo6SHlzdGVyZXNpc0FjdGl2aXR5IG1fZG5zUHJlZmV0Y2hI
eXN0ZXJlcmlzOwpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLm1l
c3NhZ2VzLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJv
Y2Vzcy5tZXNzYWdlcy5pbgkocmV2aXNpb24gMTkyNzY1KQorKysgU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQcm9jZXNzLm1lc3NhZ2VzLmluCSh3b3JraW5nIGNvcHkpCkBAIC00NCw5ICs0
NCw2IEBAIG1lc3NhZ2VzIC0+IFdlYlByb2Nlc3MgTGVnYWN5UmVjZWl2ZXIgewogICAgIFNldFNo
b3VsZFVzZUZvbnRTbW9vdGhpbmcoYm9vbCB1c2VGb250U21vb3RoaW5nKQogICAgIFVzZXJQcmVm
ZXJyZWRMYW5ndWFnZXNDaGFuZ2VkKFZlY3RvcjxTdHJpbmc+IGxhbmd1YWdlcykKICAgICBGdWxs
S2V5Ym9hcmRBY2Nlc3NNb2RlQ2hhbmdlZChib29sIGZ1bGxLZXlib2FyZEFjY2Vzc0VuYWJsZWQp
Ci0jaWYgVVNFKFNPVVApCi0gICAgU2V0SWdub3JlVExTRXJyb3JzKGJvb2wgaWdub3JlVExTRXJy
b3JzKQotI2VuZGlmCiAKICAgICAvLyBMZWdhY3kgcHJpdmF0ZSBicm93c2luZyBzZXNzaW9uIGlz
IHBlciBwcm9jZXNzLiBJbmRpdmlkdWFsIHBhZ2VzIG9yIHBhZ2UgZ3JvdXBzIG1heSB1c2UgdGhl
IHByaXZhdGUgc2Vzc2lvbiBvciB0aGUgZGVmYXVsdCBvbmUgYXMgYXBwcm9wcmlhdGUuCiAgICAg
RW5zdXJlUHJpdmF0ZUJyb3dzaW5nU2Vzc2lvbihXZWJDb3JlOjpTZXNzaW9uSUQgc2Vzc2lvbklE
KQpAQCAtNjIsMTIgKzU5LDYgQEAgbWVzc2FnZXMgLT4gV2ViUHJvY2VzcyBMZWdhY3lSZWNlaXZl
ciB7CiAgICAgdm9pZCBTdGFydE1lbW9yeVNhbXBsZXIoV2ViS2l0OjpTYW5kYm94RXh0ZW5zaW9u
OjpIYW5kbGUgc2FtcGxlTG9nRmlsZUhhbmRsZSwgU3RyaW5nIHNhbXBsZUxvZ0ZpbGVQYXRoLCBk
b3VibGUgaW50ZXJ2YWwpOwogICAgIHZvaWQgU3RvcE1lbW9yeVNhbXBsZXIoKTsKIAotICAgICMg
RG93bmxvYWRzLiBUaGlzIHNob3VsZCByZWFsbHkgYmUgaW4gYSBEb3dubG9hZC5tZXNzYWdlcy5p
biwgYnV0IGl0IHNlZW1lZCB1bm5lY2Vzc2FyeSB0byBjcmVhdGUgYSBuZXcgZmlsZSBqdXN0IGZv
cgotICAgICMgdGhyZWUgbWVzc2FnZXMuCi0gICAgRG93bmxvYWRSZXF1ZXN0KFdlYkNvcmU6OlNl
c3Npb25JRCBzZXNzaW9uSUQsIHVpbnQ2NF90IGRvd25sb2FkSUQsIHVpbnQ2NF90IGluaXRpYXRp
bmdQYWdlSUQsIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCByZXF1ZXN0KQotICAgIFJlc3VtZURv
d25sb2FkKHVpbnQ2NF90IGRvd25sb2FkSUQsIElQQzo6RGF0YVJlZmVyZW5jZSByZXN1bWVEYXRh
LCBTdHJpbmcgcGF0aCwgV2ViS2l0OjpTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgc2FuZGJveEV4
dGVuc2lvbkhhbmRsZSkKLSAgICBDYW5jZWxEb3dubG9hZCh1aW50NjRfdCBkb3dubG9hZElEKQot
CiAgICAgU2V0VGV4dENoZWNrZXJTdGF0ZShzdHJ1Y3QgV2ViS2l0OjpUZXh0Q2hlY2tlclN0YXRl
IHRleHRDaGVja2VyU3RhdGUpCiAKICAgICBTZXRFbmhhbmNlZEFjY2Vzc2liaWxpdHkoYm9vbCBm
bGFnKQpAQCAtOTEsMTAgKzgyLDYgQEAgbWVzc2FnZXMgLT4gV2ViUHJvY2VzcyBMZWdhY3lSZWNl
aXZlciB7CiAgICAgU2V0UU9TKGludCBsYXRlbmN5UU9TLCBpbnQgdGhyb3VnaHB1dFFPUykKICNl
bmRpZgogCi0jaWYgVVNFKFNPVVApCi0gICAgQWxsb3dTcGVjaWZpY0hUVFBTQ2VydGlmaWNhdGVG
b3JIb3N0KFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbyBjZXJ0aWZpY2F0ZSwgU3RyaW5nIGhvc3Qp
Ci0jZW5kaWYKLQogICAgIFNldE1lbW9yeUNhY2hlRGlzYWJsZWQoYm9vbCBkaXNhYmxlZCk7CiAK
ICNpZiBFTkFCTEUoU0VSVklDRV9DT05UUk9MUykKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvRmlsZUFQSS9CbG9iUmVnaXN0cnlQcm94eS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9GaWxlQVBJL0Jsb2JSZWdpc3RyeVByb3h5LmNwcAkocmV2aXNp
b24gMTkyNzY1KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9GaWxlQVBJL0Jsb2JSZWdp
c3RyeVByb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsOCArMzgsNiBAQCBuYW1lc3BhY2Ug
V2ViS2l0IHsKIAogdm9pZCBCbG9iUmVnaXN0cnlQcm94eTo6cmVnaXN0ZXJGaWxlQmxvYlVSTChj
b25zdCBXZWJDb3JlOjpVUkwmIHVybCwgUGFzc1JlZlB0cjxCbG9iRGF0YUZpbGVSZWZlcmVuY2U+
IGZpbGUsIGNvbnN0IFN0cmluZyYgY29udGVudFR5cGUpCiB7Ci0gICAgQVNTRVJUKFdlYlByb2Nl
c3M6OnNpbmdsZXRvbigpLnVzZXNOZXR3b3JrUHJvY2VzcygpKTsKLQogICAgIFNhbmRib3hFeHRl
bnNpb246OkhhbmRsZSBleHRlbnNpb25IYW5kbGU7CiAKICAgICAvLyBGaWxlIHBhdGggY2FuIGJl
IGVtcHR5IHdoZW4gc3VibWl0dGluZyBhIGZvcm0gZmlsZSBpbnB1dCB3aXRob3V0IGEgZmlsZSwg
c2VlIGJ1ZyAxMTE3NzguCkBAIC01MSwzNiArNDksMjYgQEAgdm9pZCBCbG9iUmVnaXN0cnlQcm94
eTo6cmVnaXN0ZXJGaWxlQmxvYgogCiB2b2lkIEJsb2JSZWdpc3RyeVByb3h5OjpyZWdpc3RlckJs
b2JVUkwoY29uc3QgVVJMJiB1cmwsIFZlY3RvcjxCbG9iUGFydD4gYmxvYlBhcnRzLCBjb25zdCBT
dHJpbmcmIGNvbnRlbnRUeXBlKQogewotICAgIEFTU0VSVChXZWJQcm9jZXNzOjpzaW5nbGV0b24o
KS51c2VzTmV0d29ya1Byb2Nlc3MoKSk7Ci0KICAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5u
ZXR3b3JrQ29ubmVjdGlvbigpLT5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtD
b25uZWN0aW9uVG9XZWJQcm9jZXNzOjpSZWdpc3RlckJsb2JVUkwodXJsLCBibG9iUGFydHMsIGNv
bnRlbnRUeXBlKSwgMCk7CiB9CiAKIHZvaWQgQmxvYlJlZ2lzdHJ5UHJveHk6OnJlZ2lzdGVyQmxv
YlVSTChjb25zdCBVUkwmIHVybCwgY29uc3QgVVJMJiBzcmNVUkwpCiB7Ci0gICAgQVNTRVJUKFdl
YlByb2Nlc3M6OnNpbmdsZXRvbigpLnVzZXNOZXR3b3JrUHJvY2VzcygpKTsKLQogICAgIFdlYlBy
b2Nlc3M6OnNpbmdsZXRvbigpLm5ldHdvcmtDb25uZWN0aW9uKCktPmNvbm5lY3Rpb24oKS0+c2Vu
ZChNZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OlJlZ2lzdGVyQmxvYlVS
TEZyb21VUkwodXJsLCBzcmNVUkwpLCAwKTsKIH0KIAogdm9pZCBCbG9iUmVnaXN0cnlQcm94eTo6
dW5yZWdpc3RlckJsb2JVUkwoY29uc3QgVVJMJiB1cmwpCiB7Ci0gICAgQVNTRVJUKFdlYlByb2Nl
c3M6OnNpbmdsZXRvbigpLnVzZXNOZXR3b3JrUHJvY2VzcygpKTsKLQogICAgIFdlYlByb2Nlc3M6
OnNpbmdsZXRvbigpLm5ldHdvcmtDb25uZWN0aW9uKCktPmNvbm5lY3Rpb24oKS0+c2VuZChNZXNz
YWdlczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OlVucmVnaXN0ZXJCbG9iVVJMKHVy
bCksIDApOwogfQogCiB2b2lkIEJsb2JSZWdpc3RyeVByb3h5OjpyZWdpc3RlckJsb2JVUkxGb3JT
bGljZShjb25zdCBVUkwmIHVybCwgY29uc3QgVVJMJiBzcmNVUkwsIGxvbmcgbG9uZyBzdGFydCwg
bG9uZyBsb25nIGVuZCkKIHsKLSAgICBBU1NFUlQoV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkudXNl
c05ldHdvcmtQcm9jZXNzKCkpOwotCiAgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkubmV0d29y
a0Nvbm5lY3Rpb24oKS0+Y29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrQ29ubmVj
dGlvblRvV2ViUHJvY2Vzczo6UmVnaXN0ZXJCbG9iVVJMRm9yU2xpY2UodXJsLCBzcmNVUkwsIHN0
YXJ0LCBlbmQpLCAwKTsKIH0KIAogdW5zaWduZWQgbG9uZyBsb25nIEJsb2JSZWdpc3RyeVByb3h5
OjpibG9iU2l6ZShjb25zdCBVUkwmIHVybCkKIHsKLSAgICBBU1NFUlQoV2ViUHJvY2Vzczo6c2lu
Z2xldG9uKCkudXNlc05ldHdvcmtQcm9jZXNzKCkpOwotCiAgICAgdWludDY0X3QgcmVzdWx0U2l6
ZTsKICAgICBpZiAoIVdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLm5ldHdvcmtDb25uZWN0aW9uKCkt
PmNvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzOjpCbG9iU2l6ZSh1cmwpLCBNZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlBy
b2Nlc3M6OkJsb2JTaXplOjpSZXBseShyZXN1bHRTaXplKSwgMCkpCiAgICAgICAgIHJldHVybiAw
OwpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0
Zm9ybVN0cmF0ZWdpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmNwcAkocmV2aXNpb24gMTky
NzY1KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0
Zm9ybVN0cmF0ZWdpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDksMTAxICsxMDksNTQgQEAg
UGx1Z2luU3RyYXRlZ3kqIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6YwogCiBTdHJpbmcgV2ViUGxh
dGZvcm1TdHJhdGVnaWVzOjpjb29raWVzRm9yRE9NKGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vzc2lv
biYgc2Vzc2lvbiwgY29uc3QgVVJMJiBmaXJzdFBhcnR5LCBjb25zdCBVUkwmIHVybCkKIHsKLSAg
ICBhdXRvJiB3ZWJQcm9jZXNzID0gV2ViUHJvY2Vzczo6c2luZ2xldG9uKCk7Ci0gICAgaWYgKHdl
YlByb2Nlc3MudXNlc05ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgU3RyaW5nIHJlc3VsdDsK
LSAgICAgICAgaWYgKCF3ZWJQcm9jZXNzLm5ldHdvcmtDb25uZWN0aW9uKCktPmNvbm5lY3Rpb24o
KS0+c2VuZFN5bmMoTWVzc2FnZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpDb29r
aWVzRm9yRE9NKFNlc3Npb25UcmFja2VyOjpzZXNzaW9uSUQoc2Vzc2lvbiksIGZpcnN0UGFydHks
IHVybCksIE1lc3NhZ2VzOjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6Q29va2llc0Zv
ckRPTTo6UmVwbHkocmVzdWx0KSwgMCkpCi0gICAgICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0g
ICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0gICAgcmV0dXJuIFdlYkNvcmU6OmNvb2tp
ZXNGb3JET00oc2Vzc2lvbiwgZmlyc3RQYXJ0eSwgdXJsKTsKKyAgICBTdHJpbmcgcmVzdWx0Owor
ICAgIGlmICghV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkubmV0d29ya0Nvbm5lY3Rpb24oKS0+Y29u
bmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nl
c3M6OkNvb2tpZXNGb3JET00oU2Vzc2lvblRyYWNrZXI6OnNlc3Npb25JRChzZXNzaW9uKSwgZmly
c3RQYXJ0eSwgdXJsKSwgTWVzc2FnZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpD
b29raWVzRm9yRE9NOjpSZXBseShyZXN1bHQpLCAwKSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygp
OworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIHZvaWQgV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpz
ZXRDb29raWVzRnJvbURPTShjb25zdCBOZXR3b3JrU3RvcmFnZVNlc3Npb24mIHNlc3Npb24sIGNv
bnN0IFVSTCYgZmlyc3RQYXJ0eSwgY29uc3QgVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgY29va2ll
U3RyaW5nKQogewotICAgIGF1dG8mIHdlYlByb2Nlc3MgPSBXZWJQcm9jZXNzOjpzaW5nbGV0b24o
KTsKLSAgICBpZiAod2ViUHJvY2Vzcy51c2VzTmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICB3
ZWJQcm9jZXNzLm5ldHdvcmtDb25uZWN0aW9uKCktPmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdl
czo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OlNldENvb2tpZXNGcm9tRE9NKFNlc3Np
b25UcmFja2VyOjpzZXNzaW9uSUQoc2Vzc2lvbiksIGZpcnN0UGFydHksIHVybCwgY29va2llU3Ry
aW5nKSwgMCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBXZWJDb3JlOjpzZXRDb29r
aWVzRnJvbURPTShzZXNzaW9uLCBmaXJzdFBhcnR5LCB1cmwsIGNvb2tpZVN0cmluZyk7CisgICAg
V2ViUHJvY2Vzczo6c2luZ2xldG9uKCkubmV0d29ya0Nvbm5lY3Rpb24oKS0+Y29ubmVjdGlvbigp
LT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6U2V0Q29va2ll
c0Zyb21ET00oU2Vzc2lvblRyYWNrZXI6OnNlc3Npb25JRChzZXNzaW9uKSwgZmlyc3RQYXJ0eSwg
dXJsLCBjb29raWVTdHJpbmcpLCAwKTsKIH0KIAogYm9vbCBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6
OmNvb2tpZXNFbmFibGVkKGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgc2Vzc2lvbiwgY29u
c3QgVVJMJiBmaXJzdFBhcnR5LCBjb25zdCBVUkwmIHVybCkKIHsKLSAgICBhdXRvJiB3ZWJQcm9j
ZXNzID0gV2ViUHJvY2Vzczo6c2luZ2xldG9uKCk7Ci0gICAgaWYgKHdlYlByb2Nlc3MudXNlc05l
dHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgYm9vbCByZXN1bHQ7Ci0gICAgICAgIGlmICghd2Vi
UHJvY2Vzcy5uZXR3b3JrQ29ubmVjdGlvbigpLT5jb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3Nh
Z2VzOjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6Q29va2llc0VuYWJsZWQoU2Vzc2lv
blRyYWNrZXI6OnNlc3Npb25JRChzZXNzaW9uKSwgZmlyc3RQYXJ0eSwgdXJsKSwgTWVzc2FnZXM6
Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpDb29raWVzRW5hYmxlZDo6UmVwbHkocmVz
dWx0KSwgMCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHJldHVybiByZXN1
bHQ7Ci0gICAgfQotCi0gICAgcmV0dXJuIFdlYkNvcmU6OmNvb2tpZXNFbmFibGVkKHNlc3Npb24s
IGZpcnN0UGFydHksIHVybCk7CisgICAgYm9vbCByZXN1bHQ7CisgICAgaWYgKCFXZWJQcm9jZXNz
OjpzaW5nbGV0b24oKS5uZXR3b3JrQ29ubmVjdGlvbigpLT5jb25uZWN0aW9uKCktPnNlbmRTeW5j
KE1lc3NhZ2VzOjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6Q29va2llc0VuYWJsZWQo
U2Vzc2lvblRyYWNrZXI6OnNlc3Npb25JRChzZXNzaW9uKSwgZmlyc3RQYXJ0eSwgdXJsKSwgTWVz
c2FnZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpDb29raWVzRW5hYmxlZDo6UmVw
bHkocmVzdWx0KSwgMCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gcmVzdWx0
OwogfQogCiBTdHJpbmcgV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpjb29raWVSZXF1ZXN0SGVhZGVy
RmllbGRWYWx1ZShjb25zdCBOZXR3b3JrU3RvcmFnZVNlc3Npb24mIHNlc3Npb24sIGNvbnN0IFVS
TCYgZmlyc3RQYXJ0eSwgY29uc3QgVVJMJiB1cmwpCiB7Ci0gICAgYXV0byYgd2ViUHJvY2VzcyA9
IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpOwotICAgIGlmICh3ZWJQcm9jZXNzLnVzZXNOZXR3b3Jr
UHJvY2VzcygpKSB7Ci0gICAgICAgIFN0cmluZyByZXN1bHQ7Ci0gICAgICAgIGlmICghd2ViUHJv
Y2Vzcy5uZXR3b3JrQ29ubmVjdGlvbigpLT5jb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2Vz
OjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6Q29va2llUmVxdWVzdEhlYWRlckZpZWxk
VmFsdWUoU2Vzc2lvblRyYWNrZXI6OnNlc3Npb25JRChzZXNzaW9uKSwgZmlyc3RQYXJ0eSwgdXJs
KSwgTWVzc2FnZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpDb29raWVSZXF1ZXN0
SGVhZGVyRmllbGRWYWx1ZTo6UmVwbHkocmVzdWx0KSwgMCkpCi0gICAgICAgICAgICByZXR1cm4g
U3RyaW5nKCk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0gICAgcmV0dXJuIFdl
YkNvcmU6OmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKHNlc3Npb24sIGZpcnN0UGFydHks
IHVybCk7CisgICAgU3RyaW5nIHJlc3VsdDsKKyAgICBpZiAoIVdlYlByb2Nlc3M6OnNpbmdsZXRv
bigpLm5ldHdvcmtDb25uZWN0aW9uKCktPmNvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6
Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpDb29raWVSZXF1ZXN0SGVhZGVyRmllbGRW
YWx1ZShTZXNzaW9uVHJhY2tlcjo6c2Vzc2lvbklEKHNlc3Npb24pLCBmaXJzdFBhcnR5LCB1cmwp
LCBNZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OkNvb2tpZVJlcXVlc3RI
ZWFkZXJGaWVsZFZhbHVlOjpSZXBseShyZXN1bHQpLCAwKSkKKyAgICAgICAgcmV0dXJuIFN0cmlu
ZygpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIGJvb2wgV2ViUGxhdGZvcm1TdHJhdGVnaWVz
OjpnZXRSYXdDb29raWVzKGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgc2Vzc2lvbiwgY29u
c3QgVVJMJiBmaXJzdFBhcnR5LCBjb25zdCBVUkwmIHVybCwgVmVjdG9yPENvb2tpZT4mIHJhd0Nv
b2tpZXMpCiB7Ci0gICAgYXV0byYgd2ViUHJvY2VzcyA9IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigp
OwotICAgIGlmICh3ZWJQcm9jZXNzLnVzZXNOZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgIGlm
ICghd2ViUHJvY2Vzcy5uZXR3b3JrQ29ubmVjdGlvbigpLT5jb25uZWN0aW9uKCktPnNlbmRTeW5j
KE1lc3NhZ2VzOjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6R2V0UmF3Q29va2llcyhT
ZXNzaW9uVHJhY2tlcjo6c2Vzc2lvbklEKHNlc3Npb24pLCBmaXJzdFBhcnR5LCB1cmwpLCBNZXNz
YWdlczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OkdldFJhd0Nvb2tpZXM6OlJlcGx5
KHJhd0Nvb2tpZXMpLCAwKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIFdlYkNvcmU6OmdldFJhd0Nvb2tpZXMoc2Vz
c2lvbiwgZmlyc3RQYXJ0eSwgdXJsLCByYXdDb29raWVzKTsKKyAgICBpZiAoIVdlYlByb2Nlc3M6
OnNpbmdsZXRvbigpLm5ldHdvcmtDb25uZWN0aW9uKCktPmNvbm5lY3Rpb24oKS0+c2VuZFN5bmMo
TWVzc2FnZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpHZXRSYXdDb29raWVzKFNl
c3Npb25UcmFja2VyOjpzZXNzaW9uSUQoc2Vzc2lvbiksIGZpcnN0UGFydHksIHVybCksIE1lc3Nh
Z2VzOjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6R2V0UmF3Q29va2llczo6UmVwbHko
cmF3Q29va2llcyksIDApKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHRydWU7
CiB9CiAKIHZvaWQgV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpkZWxldGVDb29raWUoY29uc3QgTmV0
d29ya1N0b3JhZ2VTZXNzaW9uJiBzZXNzaW9uLCBjb25zdCBVUkwmIHVybCwgY29uc3QgU3RyaW5n
JiBjb29raWVOYW1lKQogewotICAgIGF1dG8mIHdlYlByb2Nlc3MgPSBXZWJQcm9jZXNzOjpzaW5n
bGV0b24oKTsKLSAgICBpZiAod2ViUHJvY2Vzcy51c2VzTmV0d29ya1Byb2Nlc3MoKSkgewotICAg
ICAgICB3ZWJQcm9jZXNzLm5ldHdvcmtDb25uZWN0aW9uKCktPmNvbm5lY3Rpb24oKS0+c2VuZChN
ZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OkRlbGV0ZUNvb2tpZShTZXNz
aW9uVHJhY2tlcjo6c2Vzc2lvbklEKHNlc3Npb24pLCB1cmwsIGNvb2tpZU5hbWUpLCAwKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIFdlYkNvcmU6OmRlbGV0ZUNvb2tpZShzZXNzaW9u
LCB1cmwsIGNvb2tpZU5hbWUpOworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLm5ldHdvcmtD
b25uZWN0aW9uKCktPmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rp
b25Ub1dlYlByb2Nlc3M6OkRlbGV0ZUNvb2tpZShTZXNzaW9uVHJhY2tlcjo6c2Vzc2lvbklEKHNl
c3Npb24pLCB1cmwsIGNvb2tpZU5hbWUpLCAwKTsKIH0KIAogLy8gTG9hZGVyU3RyYXRlZ3kKIAog
UmVzb3VyY2VMb2FkU2NoZWR1bGVyKiBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OnJlc291cmNlTG9h
ZFNjaGVkdWxlcigpCiB7Ci0gICAgc3RhdGljIFJlc291cmNlTG9hZFNjaGVkdWxlciogc2NoZWR1
bGVyOwotICAgIGlmICghc2NoZWR1bGVyKSB7Ci0gICAgICAgIGF1dG8mIHdlYlByb2Nlc3MgPSBX
ZWJQcm9jZXNzOjpzaW5nbGV0b24oKTsKLSAgICAgICAgaWYgKHdlYlByb2Nlc3MudXNlc05ldHdv
cmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBzY2hlZHVsZXIgPSAmd2ViUHJvY2Vzcy53ZWJSZXNv
dXJjZUxvYWRTY2hlZHVsZXIoKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgc2NoZWR1bGVy
ID0gV2ViQ29yZTo6cmVzb3VyY2VMb2FkU2NoZWR1bGVyKCk7Ci0gICAgfQotICAgIAotICAgIHJl
dHVybiBzY2hlZHVsZXI7CisgICAgcmV0dXJuICZXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS53ZWJS
ZXNvdXJjZUxvYWRTY2hlZHVsZXIoKTsKIH0KIAogdm9pZCBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6
OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQsIHVu
c2lnbmVkIGxvbmcgcmVzb3VyY2VMb2FkSWRlbnRpZmllciwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0
JiByZXF1ZXN0LCBTdG9yZWRDcmVkZW50aWFscyBzdG9yZWRDcmVkZW50aWFscywgQ2xpZW50Q3Jl
ZGVudGlhbFBvbGljeSBjbGllbnRDcmVkZW50aWFsUG9saWN5LCBSZXNvdXJjZUVycm9yJiBlcnJv
ciwgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIFZlY3RvcjxjaGFyPiYgZGF0YSkKIHsKLSAg
ICBhdXRvJiB3ZWJQcm9jZXNzID0gV2ViUHJvY2Vzczo6c2luZ2xldG9uKCk7Ci0gICAgaWYgKCF3
ZWJQcm9jZXNzLnVzZXNOZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgIExvYWRlclN0cmF0ZWd5
Ojpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KGNvbnRleHQsIHJlc291cmNlTG9hZElkZW50aWZp
ZXIsIHJlcXVlc3QsIHN0b3JlZENyZWRlbnRpYWxzLCBjbGllbnRDcmVkZW50aWFsUG9saWN5LCBl
cnJvciwgcmVzcG9uc2UsIGRhdGEpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgV2Vi
RnJhbWVOZXR3b3JraW5nQ29udGV4dCogd2ViQ29udGV4dCA9IHN0YXRpY19jYXN0PFdlYkZyYW1l
TmV0d29ya2luZ0NvbnRleHQqPihjb250ZXh0KTsKICAgICAvLyBGSVhNRTogU29tZSBlbnRpdGll
cyBpbiBXZWJDb3JlIHVzZSBXZWJDb3JlJ3MgIkVtcHR5RnJhbWVMb2FkZXJDbGllbnQiIGluc3Rl
YWQgb2YgaGF2aW5nIGEgcHJvcGVyIFdlYkZyYW1lTG9hZGVyQ2xpZW50LgogICAgIC8vIEVtcHR5
RnJhbWVMb2FkZXJDbGllbnQgc2hvdWxkbid0IGV4aXN0IGFuZCBldmVyeXRoaW5nIHNob3VsZCBi
ZSB1c2luZyBhIFdlYkZyYW1lTG9hZGVyQ2xpZW50LApAQCAtMjI3LDcgKzE4MCw3IEBAIHZvaWQg
V2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpsb2FkUmVzb3VyY2UKIAogICAgIEhhbmdEZXRlY3Rpb25E
aXNhYmxlciBoYW5nRGV0ZWN0aW9uRGlzYWJsZXI7CiAKLSAgICBpZiAoIXdlYlByb2Nlc3MubmV0
d29ya0Nvbm5lY3Rpb24oKS0+Y29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6TmV0d29y
a0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OlBlcmZvcm1TeW5jaHJvbm91c0xvYWQobG9hZFBhcmFt
ZXRlcnMpLCBNZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OlBlcmZvcm1T
eW5jaHJvbm91c0xvYWQ6OlJlcGx5KGVycm9yLCByZXNwb25zZSwgZGF0YSksIDApKSB7CisgICAg
aWYgKCFXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5uZXR3b3JrQ29ubmVjdGlvbigpLT5jb25uZWN0
aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6
UGVyZm9ybVN5bmNocm9ub3VzTG9hZChsb2FkUGFyYW1ldGVycyksIE1lc3NhZ2VzOjpOZXR3b3Jr
Q29ubmVjdGlvblRvV2ViUHJvY2Vzczo6UGVyZm9ybVN5bmNocm9ub3VzTG9hZDo6UmVwbHkoZXJy
b3IsIHJlc3BvbnNlLCBkYXRhKSwgMCkpIHsKICAgICAgICAgcmVzcG9uc2UgPSBSZXNvdXJjZVJl
c3BvbnNlKCk7CiAgICAgICAgIGVycm9yID0gaW50ZXJuYWxFcnJvcihyZXF1ZXN0LnVybCgpKTsK
ICAgICB9CkBAIC0yNDAsMTIgKzE5Myw2IEBAIHZvaWQgV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpj
cmVhdGVQaW5nSGEKICAgICBpZiAoIW5ldHdvcmtpbmdDb250ZXh0KQogICAgICAgICByZXR1cm47
CiAKLSAgICBhdXRvJiB3ZWJQcm9jZXNzID0gV2ViUHJvY2Vzczo6c2luZ2xldG9uKCk7Ci0gICAg
aWYgKCF3ZWJQcm9jZXNzLnVzZXNOZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgIExvYWRlclN0
cmF0ZWd5OjpjcmVhdGVQaW5nSGFuZGxlKG5ldHdvcmtpbmdDb250ZXh0LCByZXF1ZXN0LCBzaG91
bGRVc2VDcmVkZW50aWFsU3RvcmFnZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBX
ZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0KiB3ZWJDb250ZXh0ID0gc3RhdGljX2Nhc3Q8V2ViRnJh
bWVOZXR3b3JraW5nQ29udGV4dCo+KG5ldHdvcmtpbmdDb250ZXh0KTsKICAgICBXZWJGcmFtZUxv
YWRlckNsaWVudCogd2ViRnJhbWVMb2FkZXJDbGllbnQgPSB3ZWJDb250ZXh0LT53ZWJGcmFtZUxv
YWRlckNsaWVudCgpOwogICAgIFdlYkZyYW1lKiB3ZWJGcmFtZSA9IHdlYkZyYW1lTG9hZGVyQ2xp
ZW50ID8gd2ViRnJhbWVMb2FkZXJDbGllbnQtPndlYkZyYW1lKCkgOiBudWxscHRyOwpAQCAtMjU3
LDE0ICsyMDQsMTIgQEAgdm9pZCBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmNyZWF0ZVBpbmdIYQog
ICAgIGxvYWRQYXJhbWV0ZXJzLmFsbG93U3RvcmVkQ3JlZGVudGlhbHMgPSBzaG91bGRVc2VDcmVk
ZW50aWFsU3RvcmFnZSA/IEFsbG93U3RvcmVkQ3JlZGVudGlhbHMgOiBEb05vdEFsbG93U3RvcmVk
Q3JlZGVudGlhbHM7CiAgICAgbG9hZFBhcmFtZXRlcnMuc2hvdWxkQ2xlYXJSZWZlcnJlck9uSFRU
UFNUb0hUVFBSZWRpcmVjdCA9IG5ldHdvcmtpbmdDb250ZXh0LT5zaG91bGRDbGVhclJlZmVycmVy
T25IVFRQU1RvSFRUUFJlZGlyZWN0KCk7CiAKLSAgICB3ZWJQcm9jZXNzLm5ldHdvcmtDb25uZWN0
aW9uKCktPmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dl
YlByb2Nlc3M6OkxvYWRQaW5nKGxvYWRQYXJhbWV0ZXJzKSwgMCk7CisgICAgV2ViUHJvY2Vzczo6
c2luZ2xldG9uKCkubmV0d29ya0Nvbm5lY3Rpb24oKS0+Y29ubmVjdGlvbigpLT5zZW5kKE1lc3Nh
Z2VzOjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6TG9hZFBpbmcobG9hZFBhcmFtZXRl
cnMpLCAwKTsKIH0KIAogQmxvYlJlZ2lzdHJ5KiBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmNyZWF0
ZUJsb2JSZWdpc3RyeSgpCiB7Ci0gICAgaWYgKCFXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS51c2Vz
TmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgcmV0dXJuIExvYWRlclN0cmF0ZWd5OjpjcmVhdGVC
bG9iUmVnaXN0cnkoKTsKLSAgICByZXR1cm4gbmV3IEJsb2JSZWdpc3RyeVByb3h5OyAgICAKKyAg
ICByZXR1cm4gbmV3IEJsb2JSZWdpc3RyeVByb3h5OwogfQogCiAvLyBQbHVnaW5TdHJhdGVneQpJ
bmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZyYW1lLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3Bw
CShyZXZpc2lvbiAxOTI3NjUpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
V2ViRnJhbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTQsMjEgKzI1NCw4IEBAIHZvaWQgV2Vi
RnJhbWU6OnN0YXJ0RG93bmxvYWQoY29uc3QgV2ViQ28KICAgICBtX3BvbGljeURvd25sb2FkSUQg
PSAwOwogCiAgICAgYXV0byYgd2ViUHJvY2VzcyA9IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpOwot
I2lmIFVTRShORVRXT1JLX1NFU1NJT04pCi0gICAgQVNTRVJUKHdlYlByb2Nlc3MudXNlc05ldHdv
cmtQcm9jZXNzKCkpOwotI2VuZGlmCiAgICAgU2Vzc2lvbklEIHNlc3Npb25JRCA9IHBhZ2UoKSA/
IHBhZ2UoKS0+c2Vzc2lvbklEKCkgOiBTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKTsKLSAg
ICBpZiAod2ViUHJvY2Vzcy51c2VzTmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICB3ZWJQcm9j
ZXNzLm5ldHdvcmtDb25uZWN0aW9uKCktPmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6TmV0
d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OlN0YXJ0RG93bmxvYWQoc2Vzc2lvbklELCBwb2xp
Y3lEb3dubG9hZElELCByZXF1ZXN0KSwgMCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSNp
ZiBVU0UoTkVUV09SS19TRVNTSU9OKQotICAgIC8vIFVzaW5nIE5FVFdPUktfU0VTU0lPTiByZXF1
aXJlcyB0aGUgdXNlIG9mIGEgbmV0d29yayBwcm9jZXNzLgotICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci0jZWxzZQotICAgIHdlYlByb2Nlc3MuZG93bmxvYWRNYW5hZ2VyKCkuc3Rh
cnREb3dubG9hZChzZXNzaW9uSUQsIHBvbGljeURvd25sb2FkSUQsIHJlcXVlc3QpOwotI2VuZGlm
CisgICAgd2ViUHJvY2Vzcy5uZXR3b3JrQ29ubmVjdGlvbigpLT5jb25uZWN0aW9uKCktPnNlbmQo
TWVzc2FnZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpTdGFydERvd25sb2FkKHNl
c3Npb25JRCwgcG9saWN5RG93bmxvYWRJRCwgcmVxdWVzdCksIDApOwogfQogCiB2b2lkIFdlYkZy
YW1lOjpjb252ZXJ0TWFpblJlc291cmNlTG9hZFRvRG93bmxvYWQoRG9jdW1lbnRMb2FkZXIqIGRv
Y3VtZW50TG9hZGVyLCBTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBSZXNvdXJjZVJlcXVlc3Qm
IHJlcXVlc3QsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQpAQCAtMjgxLDM3ICsy
NjgsMTYgQEAgdm9pZCBXZWJGcmFtZTo6Y29udmVydE1haW5SZXNvdXJjZUxvYWRUbwogICAgIFN1
YnJlc291cmNlTG9hZGVyKiBtYWluUmVzb3VyY2VMb2FkZXIgPSBkb2N1bWVudExvYWRlci0+bWFp
blJlc291cmNlTG9hZGVyKCk7CiAKICAgICBhdXRvJiB3ZWJQcm9jZXNzID0gV2ViUHJvY2Vzczo6
c2luZ2xldG9uKCk7Ci0jaWYgVVNFKE5FVFdPUktfU0VTU0lPTikKLSAgICBBU1NFUlQod2ViUHJv
Y2Vzcy51c2VzTmV0d29ya1Byb2Nlc3MoKSk7Ci0jZW5kaWYKLSAgICBpZiAod2ViUHJvY2Vzcy51
c2VzTmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICAvLyBVc2UgMCB0byBpbmRpY2F0ZSB0aGF0
IHRoZSByZXNvdXJjZSBsb2FkIGNhbid0IGJlIGNvbnZlcnRlZCBhbmQgYSBuZXcgZG93bmxvYWQg
bXVzdCBiZSBzdGFydGVkLgotICAgICAgICAvLyBUaGlzIGNhbiBoYXBwZW4gaWYgdGhlcmUgaXMg
bm8gbG9hZGVyIGJlY2F1c2UgdGhlIG1haW4gcmVzb3VyY2UgaXMgaW4gdGhlIFdlYkNvcmUgbWVt
b3J5IGNhY2hlLAotICAgICAgICAvLyBvciBiZWNhdXNlIHRoZSBjb252ZXJzaW9uIHdhcyBhdHRl
bXB0ZWQgd2hlbiBub3QgY2FsbGluZyBTdWJyZXNvdXJjZUxvYWRlcjo6ZGlkUmVjZWl2ZVJlc3Bv
bnNlKCkuCi0gICAgICAgIHVpbnQ2NF90IG1haW5SZXNvdXJjZUxvYWRJZGVudGlmaWVyOwotICAg
ICAgICBpZiAobWFpblJlc291cmNlTG9hZGVyKQotICAgICAgICAgICAgbWFpblJlc291cmNlTG9h
ZElkZW50aWZpZXIgPSBtYWluUmVzb3VyY2VMb2FkZXItPmlkZW50aWZpZXIoKTsKLSAgICAgICAg
ZWxzZQotICAgICAgICAgICAgbWFpblJlc291cmNlTG9hZElkZW50aWZpZXIgPSAwOwotCi0gICAg
ICAgIHdlYlByb2Nlc3MubmV0d29ya0Nvbm5lY3Rpb24oKS0+Y29ubmVjdGlvbigpLT5zZW5kKE1l
c3NhZ2VzOjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6Q29udmVydE1haW5SZXNvdXJj
ZUxvYWRUb0Rvd25sb2FkKHNlc3Npb25JRCwgbWFpblJlc291cmNlTG9hZElkZW50aWZpZXIsIHBv
bGljeURvd25sb2FkSUQsIHJlcXVlc3QsIHJlc3BvbnNlKSwgMCk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9CisgICAgLy8gVXNlIDAgdG8gaW5kaWNhdGUgdGhhdCB0aGUgcmVzb3VyY2UgbG9hZCBj
YW4ndCBiZSBjb252ZXJ0ZWQgYW5kIGEgbmV3IGRvd25sb2FkIG11c3QgYmUgc3RhcnRlZC4KKyAg
ICAvLyBUaGlzIGNhbiBoYXBwZW4gaWYgdGhlcmUgaXMgbm8gbG9hZGVyIGJlY2F1c2UgdGhlIG1h
aW4gcmVzb3VyY2UgaXMgaW4gdGhlIFdlYkNvcmUgbWVtb3J5IGNhY2hlLAorICAgIC8vIG9yIGJl
Y2F1c2UgdGhlIGNvbnZlcnNpb24gd2FzIGF0dGVtcHRlZCB3aGVuIG5vdCBjYWxsaW5nIFN1YnJl
c291cmNlTG9hZGVyOjpkaWRSZWNlaXZlUmVzcG9uc2UoKS4KKyAgICB1aW50NjRfdCBtYWluUmVz
b3VyY2VMb2FkSWRlbnRpZmllcjsKKyAgICBpZiAobWFpblJlc291cmNlTG9hZGVyKQorICAgICAg
ICBtYWluUmVzb3VyY2VMb2FkSWRlbnRpZmllciA9IG1haW5SZXNvdXJjZUxvYWRlci0+aWRlbnRp
ZmllcigpOworICAgIGVsc2UKKyAgICAgICAgbWFpblJlc291cmNlTG9hZElkZW50aWZpZXIgPSAw
OwogCi0gICAgaWYgKCFtYWluUmVzb3VyY2VMb2FkZXIpIHsKLSAgICAgICAgLy8gVGhlIG1haW4g
cmVzb3VyY2UgaGFzIGFscmVhZHkgYmVlbiBsb2FkZWQuIFN0YXJ0IGEgbmV3IGRvd25sb2FkIGlu
c3RlYWQuCi0jaWYgIVVTRShORVRXT1JLX1NFU1NJT04pCi0gICAgICAgIHdlYlByb2Nlc3MuZG93
bmxvYWRNYW5hZ2VyKCkuc3RhcnREb3dubG9hZChzZXNzaW9uSUQsIHBvbGljeURvd25sb2FkSUQs
IHJlcXVlc3QpOwotI2VuZGlmCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSNpZiBVU0UoTkVU
V09SS19TRVNTSU9OKQotICAgIC8vIFVzaW5nIE5FVFdPUktfU0VTU0lPTiByZXF1aXJlcyB0aGUg
dXNlIG9mIGEgbmV0d29yayBwcm9jZXNzLgotICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7Ci0jZWxzZQotICAgIHdlYlByb2Nlc3MuZG93bmxvYWRNYW5hZ2VyKCkuY29udmVydEhhbmRs
ZVRvRG93bmxvYWQocG9saWN5RG93bmxvYWRJRCwgZG9jdW1lbnRMb2FkZXItPm1haW5SZXNvdXJj
ZUxvYWRlcigpLT5oYW5kbGUoKSwgcmVxdWVzdCwgcmVzcG9uc2UpOwotI2VuZGlmCisgICAgd2Vi
UHJvY2Vzcy5uZXR3b3JrQ29ubmVjdGlvbigpLT5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6
Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpDb252ZXJ0TWFpblJlc291cmNlTG9hZFRv
RG93bmxvYWQoc2Vzc2lvbklELCBtYWluUmVzb3VyY2VMb2FkSWRlbnRpZmllciwgcG9saWN5RG93
bmxvYWRJRCwgcmVxdWVzdCwgcmVzcG9uc2UpLCAwKTsKIH0KIAogU3RyaW5nIFdlYkZyYW1lOjpz
b3VyY2UoKSBjb25zdApJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9zb3VwL1dlYlBy
b2Nlc3NTb3VwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL3Nv
dXAvV2ViUHJvY2Vzc1NvdXAuY3BwCShyZXZpc2lvbiAxOTI3NjUpCisrKyBTb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL3NvdXAvV2ViUHJvY2Vzc1NvdXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
OSwxOCArNDksNiBAQAogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotc3RhdGljIHVpbnQ2NF90IGdl
dENhY2hlRGlza0ZyZWVTaXplKFNvdXBDYWNoZSogY2FjaGUpCi17Ci0gICAgQVNTRVJUKGNhY2hl
KTsKLQotICAgIEdVbmlxdWVPdXRQdHI8Y2hhcj4gY2FjaGVEaXI7Ci0gICAgZ19vYmplY3RfZ2V0
KEdfT0JKRUNUKGNhY2hlKSwgImNhY2hlLWRpciIsICZjYWNoZURpci5vdXRQdHIoKSwgTlVMTCk7
Ci0gICAgaWYgKCFjYWNoZURpcikKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gV2Vi
Q29yZTo6Z2V0Vm9sdW1lRnJlZVNpemVGb3JQYXRoKGNhY2hlRGlyLmdldCgpKTsKLX0KLQogdm9p
ZCBXZWJQcm9jZXNzOjpwbGF0Zm9ybVNldENhY2hlTW9kZWwoQ2FjaGVNb2RlbCBjYWNoZU1vZGVs
KQogewogICAgIHVuc2lnbmVkIGNhY2hlVG90YWxDYXBhY2l0eSA9IDA7CkBAIC03MywxMiArNjEs
NiBAQCB2b2lkIFdlYlByb2Nlc3M6OnBsYXRmb3JtU2V0Q2FjaGVNb2RlbChDCiAgICAgdW5zaWdu
ZWQgbG9uZyB1cmxDYWNoZURpc2tDYXBhY2l0eSA9IDA7CiAKICAgICB1aW50NjRfdCBkaXNrRnJl
ZVNpemUgPSAwOwotICAgIFNvdXBDYWNoZSogY2FjaGUgPSBudWxscHRyOwotCi0gICAgaWYgKCF1
c2VzTmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICBjYWNoZSA9IFdlYkNvcmU6OlNvdXBOZXR3
b3JrU2Vzc2lvbjo6ZGVmYXVsdFNlc3Npb24oKS5jYWNoZSgpOwotICAgICAgICBkaXNrRnJlZVNp
emUgPSBnZXRDYWNoZURpc2tGcmVlU2l6ZShjYWNoZSkgLyBXVEY6Ok1COwotICAgIH0KIAogICAg
IHVpbnQ2NF90IG1lbVNpemUgPSBXVEY6OnJhbVNpemUoKSAvIFdURjo6TUI7CiAgICAgY2FsY3Vs
YXRlQ2FjaGVTaXplcyhjYWNoZU1vZGVsLCBtZW1TaXplLCBkaXNrRnJlZVNpemUsCkBAIC05NCwz
MyArNzYsMTAgQEAgdm9pZCBXZWJQcm9jZXNzOjpwbGF0Zm9ybVNldENhY2hlTW9kZWwoQwogI2lm
IFBMQVRGT1JNKEdUSykKICAgICBXZWJDb3JlOjpQYWdlQ2FjaGU6OnNpbmdsZXRvbigpLnNldFNo
b3VsZENsZWFyQmFja2luZ1N0b3Jlcyh0cnVlKTsKICNlbmRpZgotCi0gICAgaWYgKCF1c2VzTmV0
d29ya1Byb2Nlc3MoKSkgewotICAgICAgICBpZiAodXJsQ2FjaGVEaXNrQ2FwYWNpdHkgPiBzb3Vw
X2NhY2hlX2dldF9tYXhfc2l6ZShjYWNoZSkpCi0gICAgICAgICAgICBzb3VwX2NhY2hlX3NldF9t
YXhfc2l6ZShjYWNoZSwgdXJsQ2FjaGVEaXNrQ2FwYWNpdHkpOwotICAgIH0KIH0KIAogdm9pZCBX
ZWJQcm9jZXNzOjpwbGF0Zm9ybUNsZWFyUmVzb3VyY2VDYWNoZXMoUmVzb3VyY2VDYWNoZXNUb0Ns
ZWFyIGNhY2hlc1RvQ2xlYXIpCiB7Ci0gICAgaWYgKGNhY2hlc1RvQ2xlYXIgPT0gSW5NZW1vcnlS
ZXNvdXJjZUNhY2hlc09ubHkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIElmIHdlJ3JlIHVz
aW5nIHRoZSBuZXR3b3JrIHByb2Nlc3MgdGhlbiBpdCBpcyB0aGUgb25seSBvbmUgdGhhdCBuZWVk
cyB0byBjbGVhciB0aGUgZGlzayBjYWNoZS4KLSAgICBpZiAodXNlc05ldHdvcmtQcm9jZXNzKCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIHNvdXBfY2FjaGVfY2xlYXIoV2ViQ29yZTo6U291cE5l
dHdvcmtTZXNzaW9uOjpkZWZhdWx0U2Vzc2lvbigpLmNhY2hlKCkpOwotfQotCi1zdGF0aWMgdm9p
ZCBzZXRTb3VwU2Vzc2lvbkFjY2VwdExhbmd1YWdlKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBsYW5n
dWFnZXMpCi17Ci0gICAgV2ViQ29yZTo6U291cE5ldHdvcmtTZXNzaW9uOjpkZWZhdWx0U2Vzc2lv
bigpLnNldEFjY2VwdExhbmd1YWdlcyhsYW5ndWFnZXMpOwotfQotCi1zdGF0aWMgdm9pZCBsYW5n
dWFnZUNoYW5nZWQodm9pZCopCi17Ci0gICAgc2V0U291cFNlc3Npb25BY2NlcHRMYW5ndWFnZShX
ZWJDb3JlOjp1c2VyUHJlZmVycmVkTGFuZ3VhZ2VzKCkpOwogfQogCiB2b2lkIFdlYlByb2Nlc3M6
OnBsYXRmb3JtSW5pdGlhbGl6ZVdlYlByb2Nlc3MoV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVy
cyYmIHBhcmFtZXRlcnMpCkBAIC0xMzUsNjIgKzk0LDEwIEBAIHZvaWQgV2ViUHJvY2Vzczo6cGxh
dGZvcm1Jbml0aWFsaXplV2ViUHIKICAgICAgICAgc2VjY29tcEZpbHRlcnMuaW5pdGlhbGl6ZSgp
OwogICAgIH0KICNlbmRpZgotCi0gICAgaWYgKHVzZXNOZXR3b3JrUHJvY2VzcygpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBBU1NFUlQoIXBhcmFtZXRlcnMuZGlza0NhY2hlRGlyZWN0b3J5Lmlz
RW1wdHkoKSk7Ci0KLSAgICAvLyBXZSB1c2VkIHRvIHVzZSB0aGUgZ2l2ZW4gY2FjaGUgZGlyZWN0
b3J5IGZvciB0aGUgc291cCBjYWNoZSwgYnV0IG5vdyB3ZSB1c2UgYSBzdWJkaXJlY3RvcnkgdG8g
YXZvaWQKLSAgICAvLyBjb25mbGljdHMgd2l0aCBvdGhlciBjYWNoZSBmaWxlcyBpbiB0aGUgc2Ft
ZSBkaXJlY3RvcnkuIFJlbW92ZSB0aGUgb2xkIGNhY2hlIGZpbGVzIGlmIHRoZXkgc3RpbGwgZXhp
c3QuCi0gICAgV2ViQ29yZTo6U291cE5ldHdvcmtTZXNzaW9uOjpkZWZhdWx0U2Vzc2lvbigpLmNs
ZWFyQ2FjaGUoV2ViQ29yZTo6ZGlyZWN0b3J5TmFtZShwYXJhbWV0ZXJzLmRpc2tDYWNoZURpcmVj
dG9yeSkpOwotCi0jaWYgRU5BQkxFKE5FVFdPUktfQ0FDSEUpCi0gICAgLy8gV2hlbiBuZXR3b3Jr
IGNhY2hlIGlzIGVuYWJsZWQsIHRoZSBkaXNrIGNhY2hlIGRpcmVjdG9yeSBpcyB0aGUgbmV0d29y
ayBwcm9jZXNzIG9uZS4KLSAgICBDU3RyaW5nIGRpc2tDYWNoZVBhdGggPSBXZWJDb3JlOjpwYXRo
QnlBcHBlbmRpbmdDb21wb25lbnQoV2ViQ29yZTo6ZGlyZWN0b3J5TmFtZShwYXJhbWV0ZXJzLmRp
c2tDYWNoZURpcmVjdG9yeSksICJ3ZWJraXQiKS51dGY4KCk7Ci0jZWxzZQotICAgIENTdHJpbmcg
ZGlza0NhY2hlUGF0aCA9IHBhcmFtZXRlcnMuZGlza0NhY2hlRGlyZWN0b3J5LnV0ZjgoKTsKLSNl
bmRpZgotCi0gICAgR1JlZlB0cjxTb3VwQ2FjaGU+IHNvdXBDYWNoZSA9IGFkb3B0R1JlZihzb3Vw
X2NhY2hlX25ldyhkaXNrQ2FjaGVQYXRoLmRhdGEoKSwgU09VUF9DQUNIRV9TSU5HTEVfVVNFUikp
OwotICAgIFdlYkNvcmU6OlNvdXBOZXR3b3JrU2Vzc2lvbjo6ZGVmYXVsdFNlc3Npb24oKS5zZXRD
YWNoZShzb3VwQ2FjaGUuZ2V0KCkpOwotICAgIC8vIFNldCBhbiBpbml0aWFsIGh1Z2UgbWF4X3Np
emUgZm9yIHRoZSBTb3VwQ2FjaGUgc28gdGhlIGNhbGwgdG8gc291cF9jYWNoZV9sb2FkKCkgd29u
J3QgZXZpY3QgYW55IGNhY2hlZAotICAgIC8vIHJlc291cmNlLiBUaGUgZmluYWwgc2l6ZSBvZiB0
aGUgY2FjaGUgd2lsbCBiZSBzZXQgYnkgTmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtU2V0Q2FjaGVN
b2RlbCgpLgotICAgIHVuc2lnbmVkIGluaXRpYWxNYXhTaXplID0gc291cF9jYWNoZV9nZXRfbWF4
X3NpemUoc291cENhY2hlLmdldCgpKTsKLSAgICBzb3VwX2NhY2hlX3NldF9tYXhfc2l6ZShzb3Vw
Q2FjaGUuZ2V0KCksIEdfTUFYVUlOVCk7Ci0gICAgc291cF9jYWNoZV9sb2FkKHNvdXBDYWNoZS5n
ZXQoKSk7Ci0gICAgc291cF9jYWNoZV9zZXRfbWF4X3NpemUoc291cENhY2hlLmdldCgpLCBpbml0
aWFsTWF4U2l6ZSk7Ci0KLSAgICBpZiAoIXBhcmFtZXRlcnMuY29va2llUGVyc2lzdGVudFN0b3Jh
Z2VQYXRoLmlzRW1wdHkoKSkgewotICAgICAgICBzdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXI+
KCktPnNldENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlKHBhcmFtZXRlcnMuY29va2llUGVyc2lzdGVu
dFN0b3JhZ2VQYXRoLAotICAgICAgICAgICAgcGFyYW1ldGVycy5jb29raWVQZXJzaXN0ZW50U3Rv
cmFnZVR5cGUpOwotICAgIH0KLSAgICBzdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXI+KCktPnNl
dEhUVFBDb29raWVBY2NlcHRQb2xpY3kocGFyYW1ldGVycy5jb29raWVBY2NlcHRQb2xpY3kpOwot
Ci0gICAgaWYgKCFwYXJhbWV0ZXJzLmxhbmd1YWdlcy5pc0VtcHR5KCkpCi0gICAgICAgIHNldFNv
dXBTZXNzaW9uQWNjZXB0TGFuZ3VhZ2UocGFyYW1ldGVycy5sYW5ndWFnZXMpOwotCi0gICAgc2V0
SWdub3JlVExTRXJyb3JzKHBhcmFtZXRlcnMuaWdub3JlVExTRXJyb3JzKTsKLQotICAgIFdlYkNv
cmU6OmFkZExhbmd1YWdlQ2hhbmdlT2JzZXJ2ZXIodGhpcywgbGFuZ3VhZ2VDaGFuZ2VkKTsKIH0K
IAogdm9pZCBXZWJQcm9jZXNzOjpwbGF0Zm9ybVRlcm1pbmF0ZSgpCiB7Ci0gICAgaWYgKCF1c2Vz
TmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgV2ViQ29yZTo6cmVtb3ZlTGFuZ3VhZ2VDaGFuZ2VP
YnNlcnZlcih0aGlzKTsKLX0KLQotdm9pZCBXZWJQcm9jZXNzOjpzZXRJZ25vcmVUTFNFcnJvcnMo
Ym9vbCBpZ25vcmVUTFNFcnJvcnMpCi17Ci0gICAgQVNTRVJUKCF1c2VzTmV0d29ya1Byb2Nlc3Mo
KSk7Ci0gICAgV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OnNldElnbm9yZVNTTEVycm9ycyhpZ25v
cmVUTFNFcnJvcnMpOwotfQotCi12b2lkIFdlYlByb2Nlc3M6OmFsbG93U3BlY2lmaWNIVFRQU0Nl
cnRpZmljYXRlRm9ySG9zdChjb25zdCBXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8mIGNlcnRpZmlj
YXRlSW5mbywgY29uc3QgU3RyaW5nJiBob3N0KQotewotICAgIEFTU0VSVCghdXNlc05ldHdvcmtQ
cm9jZXNzKCkpOwotICAgIFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpzZXRDbGllbnRDZXJ0aWZp
Y2F0ZShob3N0LCBjZXJ0aWZpY2F0ZUluZm8uY2VydGlmaWNhdGUoKSk7CiB9CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYktpdApJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L0NoYW5nZUxvZwkocmV2aXNpb24gMTkyNzY1KQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTUtMTEtMjQgIEFsZXggQ2hyaXN0ZW5zZW4gIDxh
Y2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KKworICAgICAgICBNYWtlIHVzZXNOZXR3b3JrUHJvY2Vz
cyBhbHdheXMgdHJ1ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTUxNTgwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCisKKyAgICAg
ICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDIvR2VvbG9jYXRpb24uY3BwOgorICAgICAg
ICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXQyL21hYy9HZXRQSURBZnRlckFib3J0ZWRQcm9jZXNzTGF1bmNoLmNwcDoKKyAgICAgICAg
KFRlc3RXZWJLaXRBUEk6OlRFU1QpOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvVGVzdENv
bnRyb2xsZXIuY3BwOgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6Z2VuZXJhdGVQYWdl
Q29uZmlndXJhdGlvbik6CisKIDIwMTUtMTEtMjMgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dh
cmNpYUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtHVEtdIFVzZSB0aGUgbmV0d29yayBwcm9jZXNz
IHVuY29uZGl0aW9uYWxseQpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQy
L0dlb2xvY2F0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdDIvR2VvbG9jYXRpb24uY3BwCShyZXZpc2lvbiAxOTI3NjUpCisrKyBUb29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDIvR2VvbG9jYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNTAsNyArMjUwLDYgQEAgc3RydWN0IEdlb2xvY2F0aW9uVHJhbnNpdGlvblRvSGlnaEFjY3Vy
YQogVEVTVChXZWJLaXQyLCBHZW9sb2NhdGlvblRyYW5zaXRpb25Ub0hpZ2hBY2N1cmFjeSkKIHsK
ICAgICBXS1JldGFpblB0cjxXS0NvbnRleHRSZWY+IGNvbnRleHQoQWRvcHRXSywgV0tDb250ZXh0
Q3JlYXRlKCkpOwotICAgIFdLQ29udGV4dFNldFVzZXNOZXR3b3JrUHJvY2Vzcyhjb250ZXh0Lmdl
dCgpLCB0cnVlKTsKIAogICAgIEdlb2xvY2F0aW9uVHJhbnNpdGlvblRvSGlnaEFjY3VyYWN5U3Rh
dGVUcmFja2VyIHN0YXRlVHJhY2tlcjsKICAgICBzZXR1cEdlb2xvY2F0aW9uUHJvdmlkZXIoY29u
dGV4dC5nZXQoKSwgJnN0YXRlVHJhY2tlcik7CkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdDIvbWFjL0dldFBJREFmdGVyQWJvcnRlZFByb2Nlc3NMYXVuY2guY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mi9tYWMvR2V0UElEQWZ0
ZXJBYm9ydGVkUHJvY2Vzc0xhdW5jaC5jcHAJKHJldmlzaW9uIDE5Mjc2NSkKKysrIFRvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mi9tYWMvR2V0UElEQWZ0ZXJBYm9ydGVkUHJvY2Vzc0xh
dW5jaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDYgQEAgc3RhdGljIHZvaWQgZGlk
RmluaXNoTG9hZEZvckZyYW1lKFdLUGFnZQogVEVTVChXZWJLaXQyLCBHZXRQSURBZnRlckFib3J0
ZWRQcm9jZXNzTGF1bmNoKQogewogICAgIFdLUmV0YWluUHRyPFdLQ29udGV4dFJlZj4gY29udGV4
dChBZG9wdFdLLCBXS0NvbnRleHRDcmVhdGUoKSk7Ci0gICAgV0tDb250ZXh0U2V0VXNlc05ldHdv
cmtQcm9jZXNzKGNvbnRleHQuZ2V0KCksIHRydWUpOwogCiAgICAgUGxhdGZvcm1XZWJWaWV3IHdl
YlZpZXcoY29udGV4dC5nZXQoKSk7CiAKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVz
dENvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVz
dENvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAxOTI3NjUpCisrKyBUb29scy9XZWJLaXRUZXN0UnVu
bmVyL1Rlc3RDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAxLDcgKzQwMSw2IEBA
IFdLUmV0YWluUHRyPFdLUGFnZUNvbmZpZ3VyYXRpb25SZWY+IFRlc3QKICAgICBtX2dlb2xvY2F0
aW9uUHJvdmlkZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPEdlb2xvY2F0aW9uUHJvdmlkZXJNb2NrPiht
X2NvbnRleHQuZ2V0KCkpOwogCiAjaWYgUExBVEZPUk0oRUZMKQotICAgIFdLQ29udGV4dFNldFVz
ZXNOZXR3b3JrUHJvY2VzcyhtX2NvbnRleHQuZ2V0KCksIGZhbHNlKTsKICAgICBXS0NvbnRleHRT
ZXRQcm9jZXNzTW9kZWwobV9jb250ZXh0LmdldCgpLCBrV0tQcm9jZXNzTW9kZWxTaGFyZWRTZWNv
bmRhcnlQcm9jZXNzKTsKICNlbmRpZgogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>266244</attachid>
            <date>2015-11-30 07:38:58 -0800</date>
            <delta_ts>2015-11-30 07:38:58 -0800</delta_ts>
            <desc>EFL buildfix</desc>
            <filename>1.patch</filename>
            <type>text/plain</type>
            <size>2118</size>
            <attacher name="Csaba Osztrogonác">ossy</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9OZXR3b3JrL0N1c3RvbVByb3RvY29s
cy9zb3VwL0N1c3RvbVByb3RvY29sTWFuYWdlclNvdXAuY3BwIGIvU291cmNlL1dlYktpdDIvU2hh
cmVkL05ldHdvcmsvQ3VzdG9tUHJvdG9jb2xzL3NvdXAvQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyU291
cC5jcHAKaW5kZXggYjMwZmU3My4uNzJmN2Y3MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
U2hhcmVkL05ldHdvcmsvQ3VzdG9tUHJvdG9jb2xzL3NvdXAvQ3VzdG9tUHJvdG9jb2xNYW5hZ2Vy
U291cC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL05ldHdvcmsvQ3VzdG9tUHJvdG9j
b2xzL3NvdXAvQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyU291cC5jcHAKQEAgLTQ2LDEzICs0Niw2IEBA
IHZvaWQgQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyOjppbml0aWFsaXplQ29ubmVjdGlvbihJUEM6OkNv
bm5lY3Rpb24qIGNvbm5lY3Rpb24pCiAgICAgY29ubmVjdGlvbi0+YWRkV29ya1F1ZXVlTWVzc2Fn
ZVJlY2VpdmVyKE1lc3NhZ2VzOjpDdXN0b21Qcm90b2NvbE1hbmFnZXI6Om1lc3NhZ2VSZWNlaXZl
ck5hbWUoKSwgbV9tZXNzYWdlUXVldWUuZ2V0KCksIHRoaXMpOwogfQogCi12b2lkIEN1c3RvbVBy
b3RvY29sTWFuYWdlcjo6aW5pdGlhbGl6ZShjb25zdCBXZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0
ZXJzJiBwYXJhbWV0ZXJzKQotewotICAgIEFTU0VSVChwYXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdp
c3RlcmVkRm9yQ3VzdG9tUHJvdG9jb2xzLmlzRW1wdHkoKSk7Ci0gICAgbV9jaGlsZFByb2Nlc3Mt
PnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnJlbW92ZVdvcmtRdWV1ZU1lc3NhZ2VSZWNlaXZl
cihNZXNzYWdlczo6Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCkp
OwotICAgIG1fbWVzc2FnZVF1ZXVlID0gbnVsbHB0cjsKLX0KLQogdm9pZCBDdXN0b21Qcm90b2Nv
bE1hbmFnZXI6OmluaXRpYWxpemUoY29uc3QgTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRl
cnMmIHBhcmFtZXRlcnMpCiB7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwYXJhbWV0ZXJz
LnVybFNjaGVtZXNSZWdpc3RlcmVkRm9yQ3VzdG9tUHJvdG9jb2xzLnNpemUoKTsgKytpKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9XZWJQcm9jZXNzUG9vbEVmbC5j
cHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1dlYlByb2Nlc3NQb29sRWZsLmNwcApp
bmRleCA1OTZiOTE3Li5iMGEzZGZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvZWZsL1dlYlByb2Nlc3NQb29sRWZsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvZWZsL1dlYlByb2Nlc3NQb29sRWZsLmNwcApAQCAtODksMTEgKzg5LDYgQEAgU3RyaW5nIFdl
YlByb2Nlc3NQb29sOjpsZWdhY3lQbGF0Zm9ybURlZmF1bHRBcHBsaWNhdGlvbkNhY2hlRGlyZWN0
b3J5KCkKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnBsYXRmb3JtSW5pdGlhbGl6ZVdlYlByb2Nlc3Mo
V2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyYgcGFyYW1ldGVycykKIHsKICAgICBpbml0aWFs
aXplSW5zcGVjdG9yU2VydmVyKCk7Ci0KLSAgICBwYXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3Rl
cmVkRm9yQ3VzdG9tUHJvdG9jb2xzID0gc3VwcGxlbWVudDxXZWJTb3VwQ3VzdG9tUHJvdG9jb2xS
ZXF1ZXN0TWFuYWdlcj4oKS0+cmVnaXN0ZXJlZFNjaGVtZXNGb3JDdXN0b21Qcm90b2NvbHMoKTsK
LSAgICBzdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4oKS0+Z2V0Q29va2llUGVyc2lz
dGVudFN0b3JhZ2UocGFyYW1ldGVycy5jb29raWVQZXJzaXN0ZW50U3RvcmFnZVBhdGgsIHBhcmFt
ZXRlcnMuY29va2llUGVyc2lzdGVudFN0b3JhZ2VUeXBlKTsKLSAgICBwYXJhbWV0ZXJzLmNvb2tp
ZUFjY2VwdFBvbGljeSA9IG1faW5pdGlhbEhUVFBDb29raWVBY2NlcHRQb2xpY3k7Ci0gICAgcGFy
YW1ldGVycy5kaXNrQ2FjaGVEaXJlY3RvcnkgPSBtX2NvbmZpZ3VyYXRpb24tPmRpc2tDYWNoZURp
cmVjdG9yeSgpOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpwbGF0Zm9ybUludmFsaWRhdGVD
b250ZXh0KCkK
</data>

          </attachment>
      

    </bug>

</bugzilla>