<?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>193401</bug_id>
          
          <creation_ts>2019-01-14 09:42:02 -0800</creation_ts>
          <short_desc>Add API to generate and consume cached bytecode</short_desc>
          <delta_ts>2019-01-28 10:18:12 -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>JavaScriptCore</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Tadeu Zagallo">tzagallo</reporter>
          <assigned_to name="Tadeu Zagallo">tzagallo</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1494177</commentid>
    <comment_count>0</comment_count>
    <who name="Tadeu Zagallo">tzagallo</who>
    <bug_when>2019-01-14 09:42:02 -0800</bug_when>
    <thetext>Follow up on https://bugs.webkit.org/show_bug.cgi?id=192782</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1494180</commentid>
    <comment_count>1</comment_count>
      <attachid>359045</attachid>
    <who name="Tadeu Zagallo">tzagallo</who>
    <bug_when>2019-01-14 09:45:45 -0800</bug_when>
    <thetext>Created attachment 359045
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1497395</commentid>
    <comment_count>2</comment_count>
      <attachid>359899</attachid>
    <who name="Tadeu Zagallo">tzagallo</who>
    <bug_when>2019-01-23 10:03:19 -0800</bug_when>
    <thetext>Created attachment 359899
WIP patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1497603</commentid>
    <comment_count>3</comment_count>
      <attachid>359954</attachid>
    <who name="Tadeu Zagallo">tzagallo</who>
    <bug_when>2019-01-23 15:27:58 -0800</bug_when>
    <thetext>Created attachment 359954
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1497791</commentid>
    <comment_count>4</comment_count>
      <attachid>360008</attachid>
    <who name="Tadeu Zagallo">tzagallo</who>
    <bug_when>2019-01-24 06:32:17 -0800</bug_when>
    <thetext>Created attachment 360008
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1497792</commentid>
    <comment_count>5</comment_count>
    <who name="Tadeu Zagallo">tzagallo</who>
    <bug_when>2019-01-24 06:33:53 -0800</bug_when>
    <thetext>&lt;rdar://problem/47514099&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1497814</commentid>
    <comment_count>6</comment_count>
      <attachid>360008</attachid>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2019-01-24 08:26:29 -0800</bug_when>
    <thetext>Comment on attachment 360008
Patch

Attachment 360008 did not pass jsc-ews (mac):
Output: https://webkit-queues.webkit.org/results/10873229

New failing tests:
stress/ftl-get-by-id-getter-exception-interesting-live-state.js.ftl-eager-no-cjit
apiTests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1497883</commentid>
    <comment_count>7</comment_count>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2019-01-24 10:45:02 -0800</bug_when>
    <thetext>Is the jsc EWS failure legit? Seems like it&apos;s not.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1497909</commentid>
    <comment_count>8</comment_count>
      <attachid>360008</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2019-01-24 12:43:41 -0800</bug_when>
    <thetext>Comment on attachment 360008
Patch

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

&gt; Source/JavaScriptCore/API/JSScript.h:32
&gt; +namespace JSC {
&gt; +class JSSourceCode;
&gt; +class Identifier;
&gt; +};
&gt; +

Please remove. This shouldn&apos;t use C++ features and shouldn&apos;t expose internal identifiers.

&gt; Source/JavaScriptCore/API/JSScript.h:70
&gt; -+ (nullable instancetype)scriptFromASCIIFile:(NSURL *)filePath inVirtualMachine:(JSVirtualMachine *)vm withCodeSigning:(nullable NSURL *)codeSigningPath andBytecodeCache:(nullable NSURL *)cachePath;
&gt; ++ (nullable instancetype)scriptFromASCIIFile:(NSURL *)filePath inContext:(JSContext *)context withCodeSigning:(nullable NSURL *)codeSigningPath andBytecodeCache:(nullable NSURL *)cachePath;
&gt;  
&gt;  
&gt;  /*!
&gt;   This is deprecated and is equivalent to scriptFromASCIIFile:inVirtualMachine:withCodeSigning:andBytecodeCache:.
&gt;   */
&gt; -+ (nullable instancetype)scriptFromUTF8File:(NSURL *)filePath inVirtualMachine:(JSVirtualMachine *)vm withCodeSigning:(nullable NSURL *)codeSigningPath andBytecodeCache:(nullable NSURL *)cachePath;
&gt; ++ (nullable instancetype)scriptFromUTF8File:(NSURL *)filePath inContext:(JSContext *)context withCodeSigning:(nullable NSURL *)codeSigningPath andBytecodeCache:(nullable NSURL *)cachePath;

We shouldn&apos;t make this change. If we have to make a context for now that&apos;s ok. Our API shouldn&apos;t reflect our current VM limitations if we can avoid it.

&gt; Source/JavaScriptCore/API/JSScript.mm:53
&gt; +    JSScript *result = [[[JSScript alloc] init] autorelease];

Aww man! That&apos;s my bad...

&gt; Source/JavaScriptCore/runtime/Completion.cpp:119
&gt; +    ModuleProgramExecutable* executable = ModuleProgramExecutable::create(exec, source);

Why isn&apos;t this the UnlinkedModuleProgramExecutable? Why do we need to have the linked module to cache?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1497937</commentid>
    <comment_count>9</comment_count>
      <attachid>360008</attachid>
    <who name="Tadeu Zagallo">tzagallo</who>
    <bug_when>2019-01-24 13:54:33 -0800</bug_when>
    <thetext>Comment on attachment 360008
Patch

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

&gt;&gt; Source/JavaScriptCore/API/JSScript.h:32
&gt;&gt; +
&gt; 
&gt; Please remove. This shouldn&apos;t use C++ features and shouldn&apos;t expose internal identifiers.

Oops

&gt;&gt; Source/JavaScriptCore/API/JSScript.h:70
&gt;&gt; ++ (nullable instancetype)scriptFromUTF8File:(NSURL *)filePath inContext:(JSContext *)context withCodeSigning:(nullable NSURL *)codeSigningPath andBytecodeCache:(nullable NSURL *)cachePath;
&gt; 
&gt; We shouldn&apos;t make this change. If we have to make a context for now that&apos;s ok. Our API shouldn&apos;t reflect our current VM limitations if we can avoid it.

Ok, I&apos;ll update it.

&gt;&gt; Source/JavaScriptCore/runtime/Completion.cpp:119
&gt;&gt; +    ModuleProgramExecutable* executable = ModuleProgramExecutable::create(exec, source);
&gt; 
&gt; Why isn&apos;t this the UnlinkedModuleProgramExecutable? Why do we need to have the linked module to cache?

There&apos;s no UnlinkedModuleProgramExecutable, only UnlinkedFunctionExecutable. The linked module is used for generating the bytecode in CodeCache.h, but it seems that it&apos;s mostly just used for getting the information in executableInfo(), so maybe we can remove it if you think it&apos;s worth it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1497938</commentid>
    <comment_count>10</comment_count>
      <attachid>360008</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2019-01-24 13:55:42 -0800</bug_when>
    <thetext>Comment on attachment 360008
Patch

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

&gt;&gt;&gt; Source/JavaScriptCore/runtime/Completion.cpp:119
&gt;&gt;&gt; +    ModuleProgramExecutable* executable = ModuleProgramExecutable::create(exec, source);
&gt;&gt; 
&gt;&gt; Why isn&apos;t this the UnlinkedModuleProgramExecutable? Why do we need to have the linked module to cache?
&gt; 
&gt; There&apos;s no UnlinkedModuleProgramExecutable, only UnlinkedFunctionExecutable. The linked module is used for generating the bytecode in CodeCache.h, but it seems that it&apos;s mostly just used for getting the information in executableInfo(), so maybe we can remove it if you think it&apos;s worth it.

I think it&apos;s worth it because then we no longer have a dependency on an ExecState.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1497966</commentid>
    <comment_count>11</comment_count>
      <attachid>360040</attachid>
    <who name="Tadeu Zagallo">tzagallo</who>
    <bug_when>2019-01-24 14:37:30 -0800</bug_when>
    <thetext>Created attachment 360040
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1498075</commentid>
    <comment_count>12</comment_count>
      <attachid>360040</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2019-01-24 18:14:08 -0800</bug_when>
    <thetext>Comment on attachment 360040
Patch

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

&gt; Source/JavaScriptCore/API/JSScriptInternal.h:39
&gt; -OBJC_CLASS JSScript;
&gt; +namespace JSC {
&gt; +class JSSourceCode;
&gt; +class Identifier;
&gt; +};
&gt;  
&gt; -const String&amp; getJSScriptSourceCode(JSScript *);
&gt; +@interface JSScript(Internal)
&gt; +
&gt; +- (JSC::JSSourceCode*)jsSourceCode:(JSC::Identifier)moduleKey;
&gt; +

I think you need to guard all this with #if OBJC_API_ENABLED

&gt; Source/JavaScriptCore/parser/SourceProvider.h:176
&gt; +        const CachedBytecode* m_cachedBytecode;

I think this is wrong. If the JSScript is deallocated before a CachedBytecodeSourceProvider then it will unmap the byteocde underneath this provider. I think you&apos;ll need something like JSScriptSourceProvider that has a RetainPtr to the JSScript.

Can you add a test for this?

&gt; Source/JavaScriptCore/runtime/CodeCache.cpp:180
&gt; +        generate(unlinkedCodeBlock-&gt;functionDecl(i), CodeForConstruct);

I think we should only do CodeForCall. This is exponential and constructors are rare in comparison. It seems like we should be hash-consing the nested unlinked code blocks, which would make this linear instead of exponential. We can do that later, however, if you add a FIXME.

&gt; Source/JavaScriptCore/runtime/CodeCache.cpp:184
&gt; +        generate(unlinkedCodeBlock-&gt;functionExpr(i), CodeForConstruct);

Ditto.

&gt; Source/JavaScriptCore/runtime/CodeCache.cpp:203
&gt; +    char filename[512];
&gt; +    int count = snprintf(filename, 512, &quot;%s/%u.cache&quot;, cachePath, hash);
&gt; +    if (count &lt; 0 || count &gt; 512)
&gt; +        return;

you should just use WTF::makeString for this

&gt; Source/JavaScriptCore/runtime/CodeCache.h:151
&gt; +        munmap(buffer, size);

Why are you unmapping the file here? It seems like we want to test closer to what the API is doing?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1498226</commentid>
    <comment_count>13</comment_count>
      <attachid>360040</attachid>
    <who name="Tadeu Zagallo">tzagallo</who>
    <bug_when>2019-01-25 06:52:31 -0800</bug_when>
    <thetext>Comment on attachment 360040
Patch

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

&gt;&gt; Source/JavaScriptCore/parser/SourceProvider.h:176
&gt;&gt; +        const CachedBytecode* m_cachedBytecode;
&gt; 
&gt; I think this is wrong. If the JSScript is deallocated before a CachedBytecodeSourceProvider then it will unmap the byteocde underneath this provider. I think you&apos;ll need something like JSScriptSourceProvider that has a RetainPtr to the JSScript.
&gt; 
&gt; Can you add a test for this?

Yeah, I think you&apos;re right, I&apos;ll fix this and update the test case

&gt;&gt; Source/JavaScriptCore/runtime/CodeCache.h:151
&gt;&gt; +        munmap(buffer, size);
&gt; 
&gt; Why are you unmapping the file here? It seems like we want to test closer to what the API is doing?

This is code path is not reached when testing the API. The CachedBytecode from the source provider is consumed above in line 110.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1498239</commentid>
    <comment_count>14</comment_count>
      <attachid>360114</attachid>
    <who name="Tadeu Zagallo">tzagallo</who>
    <bug_when>2019-01-25 07:58:26 -0800</bug_when>
    <thetext>Created attachment 360114
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1498245</commentid>
    <comment_count>15</comment_count>
      <attachid>360040</attachid>
    <who name="Tadeu Zagallo">tzagallo</who>
    <bug_when>2019-01-25 08:09:15 -0800</bug_when>
    <thetext>Comment on attachment 360040
Patch

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

&gt;&gt;&gt; Source/JavaScriptCore/parser/SourceProvider.h:176
&gt;&gt;&gt; +        const CachedBytecode* m_cachedBytecode;
&gt;&gt; 
&gt;&gt; I think this is wrong. If the JSScript is deallocated before a CachedBytecodeSourceProvider then it will unmap the byteocde underneath this provider. I think you&apos;ll need something like JSScriptSourceProvider that has a RetainPtr to the JSScript.
&gt;&gt; 
&gt;&gt; Can you add a test for this?
&gt; 
&gt; Yeah, I think you&apos;re right, I&apos;ll fix this and update the test case

I added the SourceProvider to retain the JSScript, but I&apos;m afraid I couldn&apos;t figure out a way to test it. Since the JSScript is passed to the promise resolution callback and the JSSourceCode is only extracted inside the JSAPIGlobalObject, I couldn&apos;t find a way to ensure that there&apos;s no other references to JSScript left before the accessing the cached bytecode.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1498267</commentid>
    <comment_count>16</comment_count>
      <attachid>360114</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2019-01-25 08:58:22 -0800</bug_when>
    <thetext>Comment on attachment 360114
Patch

r=me. I think you can test the unmapping by making a function inside one of the modules that you call after the JSScript is released. Also, can you add a test for a constructor too?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1498435</commentid>
    <comment_count>17</comment_count>
      <attachid>360158</attachid>
    <who name="Tadeu Zagallo">tzagallo</who>
    <bug_when>2019-01-25 13:49:37 -0800</bug_when>
    <thetext>Created attachment 360158
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1498474</commentid>
    <comment_count>18</comment_count>
      <attachid>360158</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-01-25 14:31:18 -0800</bug_when>
    <thetext>Comment on attachment 360158
Patch for landing

Clearing flags on attachment: 360158

Committed r240511: &lt;https://trac.webkit.org/changeset/240511&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1498475</commentid>
    <comment_count>19</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-01-25 14:31:19 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1499067</commentid>
    <comment_count>20</comment_count>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2019-01-28 10:18:12 -0800</bug_when>
    <thetext>This should probably actually be tracked with:

&lt;rdar://problem/46084932&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>359045</attachid>
            <date>2019-01-14 09:45:45 -0800</date>
            <delta_ts>2019-01-23 10:03:14 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-193401-20190114184537.patch</filename>
            <type>text/plain</type>
            <size>14743</size>
            <attacher name="Tadeu Zagallo">tzagallo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM5Njc1CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBl
ZWZmNTFjOTA0YmZjNzk0OTkxYTVlNWQ2YWM1MWM5ODdhYjQ0NzQxLi4wMDllY2IxYTA1MTgxNmYw
Y2ZiMTlmMGI2NmEyNTM1YjUyNzdiZDA2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzNCBAQAorMjAxOS0wMS0xNCAgVGFkZXUgWmFnYWxsbyAgPHR6YWdhbGxvQGFwcGxlLmNv
bT4KKworICAgICAgICBBZGQgZW50cnkgcG9pbnQgdG8gZWFnZXJseSBnZW5lcmF0ZSBieXRlY29k
ZSBmb3IgYSBnaXZlbiBTb3VyY2VDb2RlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xOTM0MDEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBBZGQgYSBuZXcgYGdlbmVyYXRlQnl0ZWNvZGVgIGZ1bmN0aW9uIHRo
YXQgZWFnZXJseSBnZW5lcmF0ZXMgYnl0ZWNvZGUKKyAgICAgICAgZm9yIGEgZ2l2ZW4gc291cmNl
IGZpbGUgYW5kIGFsbCBpdHMgZnVuY3Rpb25zLiBDdXJyZW50bHksIHRoaXMgZnVuY3Rpb24KKyAg
ICAgICAgcmVsaWVzIG9uIE9wdGlvbnM6OmRpc2tDYWNoZVBhdGgoKSB0byB3cml0ZSB0aGUgYnl0
ZWNvZGUgdG8gZGlzay4KKworICAgICAgICBUaGlzIGZ1bmN0aW9uIGlzIG5vdCBiZWluZyB1c2Vk
IGZvciBydW5uaW5nIHRoZSBieXRlY29kZS1jYWNoZSB0ZXN0cyB5ZXQsCisgICAgICAgIGJlY2F1
c2Ugd2UgY2FuJ3QgZ3VhcmFudGVlIHRoYXQgYWxsIHRoZSBuZWNlc3NhcnkgY29kZSBoYXMgYmVl
biBjYWNoZWQKKyAgICAgICAgc2luY2Ugc29tZSB0ZXN0cyBgbG9hZGAgYW5kIGBpbXBvcnRgIG90
aGVyIGZpbGVzLgorCisgICAgICAgICoganNjLmNwcDoKKyAgICAgICAgKHJ1bldpdGhPcHRpb25z
KToKKyAgICAgICAgKHByaW50VXNhZ2VTdGF0ZW1lbnQpOgorICAgICAgICAoQ29tbWFuZExpbmU6
OnBhcnNlQXJndW1lbnRzKToKKyAgICAgICAgKiBydW50aW1lL0NvZGVDYWNoZS5jcHA6CisgICAg
ICAgIChKU0M6OkNvZGVDYWNoZU1hcDo6cHJ1bmVTbG93Q2FzZSk6CisgICAgICAgIChKU0M6OkNv
ZGVDYWNoZTo6d3JpdGUpOgorICAgICAgICAoSlNDOjpnZW5lcmF0ZVVubGlua2VkQ29kZUJsb2Nr
Rm9yRnVuY3Rpb25zKToKKyAgICAgICAgKEpTQzo6d3JpdGVDb2RlQmxvY2spOgorICAgICAgICAo
SlNDOjp3cml0ZUdsb2JhbENvZGVCbG9ja1RvRGlzayk6CisgICAgICAgICogcnVudGltZS9Db2Rl
Q2FjaGUuaDoKKyAgICAgICAgKEpTQzo6cmVjdXJzaXZlbHlHZW5lcmF0ZVVubGlua2VkQ29kZUJs
b2NrKToKKyAgICAgICAgKiBydW50aW1lL0NvbXBsZXRpb24uY3BwOgorICAgICAgICAoSlNDOjpn
ZW5lcmF0ZUJ5dGVjb2RlKToKKyAgICAgICAgKiBydW50aW1lL0NvbXBsZXRpb24uaDoKKwogMjAx
OS0wMS0wOCAgVGFkZXUgWmFnYWxsbyAgPHR6YWdhbGxvQGFwcGxlLmNvbT4KIAogICAgICAgICBD
YWNoZSBieXRlY29kZSB0byBkaXNrCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
anNjLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCmluZGV4IGJlOTU3NTFmNzU5
NzU1MmZjMjQ1ODRiNmViNzg5YWNkYjdjZmYyZmMuLjFjNTBjYzdmMjdiZDE0MjIwZWMwMzc0OTQ1
ZmExZWIyMmE2OGEzNDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCkBAIC00MjIsNiArNDIyLDcgQEAg
cHVibGljOgogICAgIGJvb2wgbV90cmVhdFdhdGNoZG9nRXhjZXB0aW9uQXNTdWNjZXNzIHsgZmFs
c2UgfTsKICAgICBib29sIG1fYWx3YXlzRHVtcFVuY2F1Z2h0RXhjZXB0aW9uIHsgZmFsc2UgfTsK
ICAgICBib29sIG1fZHVtcFNhbXBsaW5nUHJvZmlsZXJEYXRhIHsgZmFsc2UgfTsKKyAgICBib29s
IG1fZ2VuZXJhdGVCeXRlY29kZSB7IGZhbHNlIH07CiAgICAgYm9vbCBtX2VuYWJsZVJlbW90ZURl
YnVnZ2luZyB7IGZhbHNlIH07CiAKICAgICB2b2lkIHBhcnNlQXJndW1lbnRzKGludCwgY2hhcioq
KTsKQEAgLTI0NjgsMTIgKzI0NjksMTcgQEAgc3RhdGljIHZvaWQgcnVuV2l0aE9wdGlvbnMoR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvbW1hbmRMaW5lJiBvcHRpb25zLCBib28KICAgICAg
ICAgICAgIHNjb3BlLnJlbGVhc2VBc3NlcnROb0V4Y2VwdGlvbigpOwogICAgICAgICAgICAgdm0u
ZHJhaW5NaWNyb3Rhc2tzKCk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBOYWtlZFB0
cjxFeGNlcHRpb24+IGV2YWx1YXRpb25FeGNlcHRpb247Ci0gICAgICAgICAgICBKU1ZhbHVlIHJl
dHVyblZhbHVlID0gZXZhbHVhdGUoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIGpzY1NvdXJj
ZShzY3JpcHRCdWZmZXIsIFNvdXJjZU9yaWdpbiB7IGFic29sdXRlUGF0aChmaWxlTmFtZSkgfSwg
ZmlsZU5hbWUpLCBKU1ZhbHVlKCksIGV2YWx1YXRpb25FeGNlcHRpb24pOwotICAgICAgICAgICAg
c2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKLSAgICAgICAgICAgIGlmIChldmFsdWF0aW9uRXhj
ZXB0aW9uKQotICAgICAgICAgICAgICAgIHJldHVyblZhbHVlID0gZXZhbHVhdGlvbkV4Y2VwdGlv
bi0+dmFsdWUoKTsKLSAgICAgICAgICAgIGNoZWNrRXhjZXB0aW9uKGdsb2JhbE9iamVjdC0+Z2xv
YmFsRXhlYygpLCBnbG9iYWxPYmplY3QsIGlzTGFzdEZpbGUsIGV2YWx1YXRpb25FeGNlcHRpb24s
IHJldHVyblZhbHVlLCBvcHRpb25zLCBzdWNjZXNzKTsKKyAgICAgICAgICAgIGlmIChvcHRpb25z
Lm1fZ2VuZXJhdGVCeXRlY29kZSkgeworICAgICAgICAgICAgICAgIFBhcnNlckVycm9yIGVycm9y
OworICAgICAgICAgICAgICAgIGdlbmVyYXRlQnl0ZWNvZGUoZ2xvYmFsT2JqZWN0LT5nbG9iYWxF
eGVjKCksIGpzY1NvdXJjZShzY3JpcHRCdWZmZXIsIFNvdXJjZU9yaWdpbiB7IGFic29sdXRlUGF0
aChmaWxlTmFtZSkgfSwgZmlsZU5hbWUpLCBlcnJvcik7CisgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAgIE5ha2VkUHRyPEV4Y2VwdGlvbj4gZXZhbHVhdGlvbkV4Y2VwdGlvbjsK
KyAgICAgICAgICAgICAgICBKU1ZhbHVlIHJldHVyblZhbHVlID0gZXZhbHVhdGUoZ2xvYmFsT2Jq
ZWN0LT5nbG9iYWxFeGVjKCksIGpzY1NvdXJjZShzY3JpcHRCdWZmZXIsIFNvdXJjZU9yaWdpbiB7
IGFic29sdXRlUGF0aChmaWxlTmFtZSkgfSwgZmlsZU5hbWUpLCBKU1ZhbHVlKCksIGV2YWx1YXRp
b25FeGNlcHRpb24pOworICAgICAgICAgICAgICAgIHNjb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7
CisgICAgICAgICAgICAgICAgaWYgKGV2YWx1YXRpb25FeGNlcHRpb24pCisgICAgICAgICAgICAg
ICAgICAgIHJldHVyblZhbHVlID0gZXZhbHVhdGlvbkV4Y2VwdGlvbi0+dmFsdWUoKTsKKyAgICAg
ICAgICAgICAgICBjaGVja0V4Y2VwdGlvbihnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwgZ2xv
YmFsT2JqZWN0LCBpc0xhc3RGaWxlLCBldmFsdWF0aW9uRXhjZXB0aW9uLCByZXR1cm5WYWx1ZSwg
b3B0aW9ucywgc3VjY2Vzcyk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KIAogICAgICAgICBz
Y3JpcHRCdWZmZXIuY2xlYXIoKTsKQEAgLTI1NzAsNiArMjU3Niw3IEBAIHN0YXRpYyBOT19SRVRV
Uk4gdm9pZCBwcmludFVzYWdlU3RhdGVtZW50KGJvb2wgaGVscCA9IGZhbHNlKQogICAgIGZwcmlu
dGYoc3RkZXJyLCAiICAteCAgICAgICAgIE91dHB1dCBleGl0IGNvZGUgYmVmb3JlIHRlcm1pbmF0
aW5nXG4iKTsKICAgICBmcHJpbnRmKHN0ZGVyciwgIlxuIik7CiAgICAgZnByaW50ZihzdGRlcnIs
ICIgIC0tc2FtcGxlICAgICAgICAgICAgICAgICAgIENvbGxlY3RzIGFuZCBvdXRwdXRzIHNhbXBs
aW5nIHByb2ZpbGVyIGRhdGFcbiIpOworICAgIGZwcmludGYoc3RkZXJyLCAiICAtLWdlbmVyYXRl
LWJ5dGVjb2RlICAgICAgICBQb3B1bGF0ZSBieXRlY29kZSBjYWNoZSBhbmQgZXhpdFxuIik7CiAg
ICAgZnByaW50ZihzdGRlcnIsICIgIC0tdGVzdDI2Mi1hc3luYyAgICAgICAgICAgIENoZWNrIHRo
YXQgc29tZSBzY3JpcHQgY2FsbHMgdGhlIHByaW50IGZ1bmN0aW9uIHdpdGggdGhlIHN0cmluZyAn
VGVzdDI2MjpBc3luY1Rlc3RDb21wbGV0ZSdcbiIpOwogICAgIGZwcmludGYoc3RkZXJyLCAiICAt
LXN0cmljdC1maWxlPTxmaWxlPiAgICAgICBQYXJzZSB0aGUgZ2l2ZW4gZmlsZSBhcyBpZiBpdCB3
ZXJlIGluIHN0cmljdCBtb2RlICh0aGlzIG9wdGlvbiBtYXkgYmUgcGFzc2VkIG1vcmUgdGhhbiBv
bmNlKVxuIik7CiAgICAgZnByaW50ZihzdGRlcnIsICIgIC0tbW9kdWxlLWZpbGU9PGZpbGU+ICAg
ICAgIFBhcnNlIGFuZCBldmFsdWF0ZSB0aGUgZ2l2ZW4gZmlsZSBhcyBtb2R1bGUgKHRoaXMgb3B0
aW9uIG1heSBiZSBwYXNzZWQgbW9yZSB0aGFuIG9uY2UpXG4iKTsKQEAgLTI2ODcsNiArMjY5NCwx
MCBAQCB2b2lkIENvbW1hbmRMaW5lOjpwYXJzZUFyZ3VtZW50cyhpbnQgYXJnYywgY2hhcioqIGFy
Z3YpCiAgICAgICAgICAgICBtX2R1bXBTYW1wbGluZ1Byb2ZpbGVyRGF0YSA9IHRydWU7CiAgICAg
ICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQorICAgICAgICBpZiAoIXN0cmNtcChhcmcsICIt
LWdlbmVyYXRlLWJ5dGVjb2RlIikpIHsKKyAgICAgICAgICAgIG1fZ2VuZXJhdGVCeXRlY29kZSA9
IHRydWU7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQogCiAgICAgICAgIHN0YXRp
YyBjb25zdCBjaGFyKiB0aW1lb3V0TXVsdGlwbGllck9wdFN0ciA9ICItLXRpbWVvdXRNdWx0aXBs
aWVyPSI7CiAgICAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCB0aW1lb3V0TXVsdGlwbGllck9w
dFN0ckxlbmd0aCA9IHN0cmxlbih0aW1lb3V0TXVsdGlwbGllck9wdFN0cik7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db2RlQ2FjaGUuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29kZUNhY2hlLmNwcAppbmRleCBjMzJkMjA0YjZjZDg5Njgx
ODFjYjBkMWRmMGVhYjgzZWMxMTgxOWQ0Li4xYjBlMmI4NDhmNzEyNzY1ODE2MWY1NjA2ZTg0MDdi
YjVhMjg0NGQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db2Rl
Q2FjaGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvZGVDYWNoZS5j
cHAKQEAgLTQ0LDcgKzQ0LDEwIEBAIHZvaWQgQ29kZUNhY2hlTWFwOjpwcnVuZVNsb3dDYXNlKCkK
ICAgICB3aGlsZSAobV9zaXplID4gbV9jYXBhY2l0eSB8fCAhY2FuUHJ1bmVRdWlja2x5KCkpIHsK
ICAgICAgICAgTWFwVHlwZTo6aXRlcmF0b3IgaXQgPSBtX21hcC5iZWdpbigpOwogCi0gICAgICAg
IHdyaXRlQ29kZUJsb2NrKCppdC0+dmFsdWUuY2VsbC0+dm0oKSwgaXQtPmtleSwgaXQtPnZhbHVl
KTsKKyAgICAgICAgVk0mIHZtID0gKml0LT52YWx1ZS5jZWxsLT52bSgpOworICAgICAgICBVbmxp
bmtlZENvZGVCbG9jayogY29kZUJsb2NrID0ganNEeW5hbWljQ2FzdDxVbmxpbmtlZENvZGVCbG9j
ayo+KHZtLCBpdC0+dmFsdWUuY2VsbC5nZXQoKSk7CisgICAgICAgIGlmIChjb2RlQmxvY2spCisg
ICAgICAgICAgICB3cml0ZUNvZGVCbG9jayh2bSwgaXQtPmtleSwgY29kZUJsb2NrKTsKIAogICAg
ICAgICBtX3NpemUgLT0gaXQtPmtleS5sZW5ndGgoKTsKICAgICAgICAgbV9tYXAucmVtb3ZlKGl0
KTsKQEAgLTE1OCw4ICsxNjEsNzQgQEAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIENvZGVD
YWNoZTo6Z2V0VW5saW5rZWRHbG9iYWxGdW5jdGlvbkV4ZWN1dGFibGUoVk0mIHYKIAogdm9pZCBD
b2RlQ2FjaGU6OndyaXRlKFZNJiB2bSkKIHsKLSAgICBmb3IgKGNvbnN0IGF1dG8mIGl0IDogbV9z
b3VyY2VDb2RlKQotICAgICAgICB3cml0ZUNvZGVCbG9jayh2bSwgaXQua2V5LCBpdC52YWx1ZSk7
CisgICAgZm9yIChjb25zdCBhdXRvJiBpdCA6IG1fc291cmNlQ29kZSkgeworICAgICAgICBVbmxp
bmtlZENvZGVCbG9jayogY29kZUJsb2NrID0ganNEeW5hbWljQ2FzdDxVbmxpbmtlZENvZGVCbG9j
ayo+KHZtLCBpdC52YWx1ZS5jZWxsLmdldCgpKTsKKyAgICAgICAgaWYgKCFjb2RlQmxvY2spCisg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgd3JpdGVDb2RlQmxvY2sodm0sIGl0LmtleSwg
Y29kZUJsb2NrKTsKKyAgICB9Cit9CisKK3ZvaWQgZ2VuZXJhdGVVbmxpbmtlZENvZGVCbG9ja0Zv
ckZ1bmN0aW9ucyhWTSYgdm0sIFVubGlua2VkQ29kZUJsb2NrKiB1bmxpbmtlZENvZGVCbG9jaywg
Y29uc3QgU291cmNlQ29kZSYgcGFyZW50U291cmNlLCBEZWJ1Z2dlck1vZGUgZGVidWdnZXJNb2Rl
LCBQYXJzZXJFcnJvciYgZXJyb3IpCit7CisgICAgYXV0byBnZW5lcmF0ZSA9IFsmXShVbmxpbmtl
ZEZ1bmN0aW9uRXhlY3V0YWJsZSogdW5saW5rZWRFeGVjdXRhYmxlLCBDb2RlU3BlY2lhbGl6YXRp
b25LaW5kIGNvbnN0cnVjdG9yS2luZCkgeworICAgICAgICBpZiAoY29uc3RydWN0b3JLaW5kID09
IENvZGVGb3JDb25zdHJ1Y3QgJiYgU291cmNlUGFyc2VNb2RlU2V0KFNvdXJjZVBhcnNlTW9kZTo6
QXN5bmNBcnJvd0Z1bmN0aW9uTW9kZSwgU291cmNlUGFyc2VNb2RlOjpBc3luY01ldGhvZE1vZGUs
IFNvdXJjZVBhcnNlTW9kZTo6QXN5bmNGdW5jdGlvbk1vZGUpLmNvbnRhaW5zKHVubGlua2VkRXhl
Y3V0YWJsZS0+cGFyc2VNb2RlKCkpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIEZ1
bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IHVubGlua2VkRXhlY3V0YWJsZS0+bGluayh2
bSwgcGFyZW50U291cmNlKTsKKyAgICAgICAgY29uc3QgU291cmNlQ29kZSYgc291cmNlID0gZXhl
Y3V0YWJsZS0+c291cmNlKCk7CisgICAgICAgIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2sqIHVu
bGlua2VkRnVuY3Rpb25Db2RlQmxvY2sgPSB1bmxpbmtlZEV4ZWN1dGFibGUtPnVubGlua2VkQ29k
ZUJsb2NrRm9yKHZtLCBzb3VyY2UsIGNvbnN0cnVjdG9yS2luZCwgZGVidWdnZXJNb2RlLCBlcnJv
ciwgdW5saW5rZWRFeGVjdXRhYmxlLT5wYXJzZU1vZGUoKSk7CisgICAgICAgIGlmICh1bmxpbmtl
ZEZ1bmN0aW9uQ29kZUJsb2NrKQorICAgICAgICAgICAgZ2VuZXJhdGVVbmxpbmtlZENvZGVCbG9j
a0ZvckZ1bmN0aW9ucyh2bSwgdW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jaywgc291cmNlLCBkZWJ1
Z2dlck1vZGUsIGVycm9yKTsKKyAgICB9OworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHVubGlua2VkQ29kZUJsb2NrLT5udW1iZXJPZkZ1bmN0aW9uRGVjbHMoKTsgaSsrKSB7CisgICAg
ICAgIGdlbmVyYXRlKHVubGlua2VkQ29kZUJsb2NrLT5mdW5jdGlvbkRlY2woaSksIENvZGVGb3JD
YWxsKTsKKyAgICAgICAgZ2VuZXJhdGUodW5saW5rZWRDb2RlQmxvY2stPmZ1bmN0aW9uRGVjbChp
KSwgQ29kZUZvckNvbnN0cnVjdCk7CisgICAgfQorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCB1bmxpbmtlZENvZGVCbG9jay0+bnVtYmVyT2ZGdW5jdGlvbkV4cHJzKCk7IGkrKykgeworICAg
ICAgICBnZW5lcmF0ZSh1bmxpbmtlZENvZGVCbG9jay0+ZnVuY3Rpb25FeHByKGkpLCBDb2RlRm9y
Q2FsbCk7CisgICAgICAgIGdlbmVyYXRlKHVubGlua2VkQ29kZUJsb2NrLT5mdW5jdGlvbkV4cHIo
aSksIENvZGVGb3JDb25zdHJ1Y3QpOworICAgIH0KK30KKwordm9pZCB3cml0ZUNvZGVCbG9jayhW
TSYgdm0sIGNvbnN0IFNvdXJjZUNvZGVLZXkmIGtleSwgVW5saW5rZWRDb2RlQmxvY2sqIGNvZGVC
bG9jaykKK3sKKyNpZiBPUyhEQVJXSU4pCisgICAgY29uc3QgY2hhciogY2FjaGVQYXRoID0gT3B0
aW9uczo6ZGlza0NhY2hlUGF0aCgpOworICAgIGlmIChMSUtFTFkoIWNhY2hlUGF0aCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIHVuc2lnbmVkIGhhc2ggPSBrZXkuaGFzaCgpOworICAgIGNoYXIg
ZmlsZW5hbWVbNTEyXTsKKyAgICBpbnQgY291bnQgPSBzbnByaW50ZihmaWxlbmFtZSwgNTEyLCAi
JXMvJXUuY2FjaGUiLCBjYWNoZVBhdGgsIGhhc2gpOworICAgIGlmIChjb3VudCA8IDAgfHwgY291
bnQgPiA1MTIpCisgICAgICAgIHJldHVybjsKKworICAgIHN0ZDo6cGFpcjxNYWxsb2NQdHI8dWlu
dDhfdD4sIHNpemVfdD4gcmVzdWx0ID0gZW5jb2RlQ29kZUJsb2NrKHZtLCBrZXksIGNvZGVCbG9j
ayk7CisKKyAgICBpbnQgZmQgPSBvcGVuKGZpbGVuYW1lLCBPX0NSRUFUIHwgT19XUk9OTFksIDA2
NjYpOworICAgIGludCByYyA9IGZsb2NrKGZkLCBMT0NLX0VYIHwgTE9DS19OQik7CisgICAgaWYg
KCFyYykKKyAgICAgICAgOjp3cml0ZShmZCwgcmVzdWx0LmZpcnN0LmdldCgpLCByZXN1bHQuc2Vj
b25kKTsKKyAgICBjbG9zZShmZCk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTSh2bSk7CisgICAg
VU5VU0VEX1BBUkFNKGtleSk7CisgICAgVU5VU0VEX1BBUkFNKHZhbHVlKTsKKyNlbmRpZgorfQor
CisKK3ZvaWQgd3JpdGVHbG9iYWxDb2RlQmxvY2tUb0Rpc2soVk0mIHZtLCBVbmxpbmtlZENvZGVC
bG9jayogY29kZUJsb2NrLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIFNvdXJjZUNvZGVUeXBl
IGNvZGVUeXBlLCBKU1BhcnNlclN0cmljdE1vZGUgc3RyaWN0TW9kZSwgSlNQYXJzZXJTY3JpcHRN
b2RlIHNjcmlwdE1vZGUsIERlYnVnZ2VyTW9kZSBkZWJ1Z2dlck1vZGUpCit7CisgICAgU291cmNl
Q29kZUtleSBrZXkoCisgICAgICAgIHNvdXJjZSwgU3RyaW5nKCksIGNvZGVUeXBlLCBzdHJpY3RN
b2RlLCBzY3JpcHRNb2RlLAorICAgICAgICBEZXJpdmVkQ29udGV4dFR5cGU6Ok5vbmUsIEV2YWxD
b250ZXh0VHlwZTo6Tm9uZSwgZmFsc2UsIGRlYnVnZ2VyTW9kZSwKKyAgICAgICAgdm0udHlwZVBy
b2ZpbGVyKCkgPyBUeXBlUHJvZmlsZXJFbmFibGVkOjpZZXMgOiBUeXBlUHJvZmlsZXJFbmFibGVk
OjpObywKKyAgICAgICAgdm0uY29udHJvbEZsb3dQcm9maWxlcigpID8gQ29udHJvbEZsb3dQcm9m
aWxlckVuYWJsZWQ6OlllcyA6IENvbnRyb2xGbG93UHJvZmlsZXJFbmFibGVkOjpObywKKyAgICAg
ICAgV1RGOjpudWxsb3B0KTsKKyAgICB3cml0ZUNvZGVCbG9jayh2bSwga2V5LCBjb2RlQmxvY2sp
OwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db2Rl
Q2FjaGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvZGVDYWNoZS5oCmluZGV4
IDk5Mzk1ZjJjZDI4NDExMzlhMDM1YzhiMTU4OWJiOTM5YzY5YzU3MDIuLjhjODhhODU1Y2VhMjMw
Yzk4MDQ3N2FhMTY3YTM4YzZiNDg4NTc1YmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0NvZGVDYWNoZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0NvZGVDYWNoZS5oCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSAiU3Ryb25nSW5saW5l
cy5oIgogI2luY2x1ZGUgIlVubGlua2VkQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiVW5saW5rZWRF
dmFsQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jay5oIgog
I2luY2x1ZGUgIlVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jay5oIgogI2luY2x1ZGUgIlVu
bGlua2VkUHJvZ3JhbUNvZGVCbG9jay5oIgogI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CkBAIC0zMjIs
MzYgKzMyMywyMCBAQCBVbmxpbmtlZENvZGVCbG9ja1R5cGUqIGdlbmVyYXRlVW5saW5rZWRDb2Rl
QmxvY2soVk0mIHZtLCBFeGVjdXRhYmxlVHlwZSogZXhlY3V0YQogICAgIHJldHVybiB1bmxpbmtl
ZENvZGVCbG9jazsKIH0KIAotQUxXQVlTX0lOTElORSBzdGF0aWMgdm9pZCB3cml0ZUNvZGVCbG9j
ayhWTSYgdm0sIGNvbnN0IFNvdXJjZUNvZGVLZXkmIGtleSwgY29uc3QgU291cmNlQ29kZVZhbHVl
JiB2YWx1ZSkKK3ZvaWQgZ2VuZXJhdGVVbmxpbmtlZENvZGVCbG9ja0ZvckZ1bmN0aW9ucyhWTSYs
IFVubGlua2VkQ29kZUJsb2NrKiwgY29uc3QgU291cmNlQ29kZSYsIERlYnVnZ2VyTW9kZSwgUGFy
c2VyRXJyb3ImKTsKKwordGVtcGxhdGUgPGNsYXNzIFVubGlua2VkQ29kZUJsb2NrVHlwZSwgY2xh
c3MgRXhlY3V0YWJsZVR5cGU+CitVbmxpbmtlZENvZGVCbG9ja1R5cGUqIHJlY3Vyc2l2ZWx5R2Vu
ZXJhdGVVbmxpbmtlZENvZGVCbG9jayhWTSYgdm0sIEV4ZWN1dGFibGVUeXBlKiBleGVjdXRhYmxl
LCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIEpTUGFyc2VyU3RyaWN0TW9kZSBzdHJpY3RNb2Rl
LCBKU1BhcnNlclNjcmlwdE1vZGUgc2NyaXB0TW9kZSwgRGVidWdnZXJNb2RlIGRlYnVnZ2VyTW9k
ZSwgUGFyc2VyRXJyb3ImIGVycm9yLCBFdmFsQ29udGV4dFR5cGUgZXZhbENvbnRleHRUeXBlLCBj
b25zdCBWYXJpYWJsZUVudmlyb25tZW50KiB2YXJpYWJsZXNVbmRlclREWikKIHsKLSNpZiBPUyhE
QVJXSU4pCi0gICAgY29uc3QgY2hhciogY2FjaGVQYXRoID0gT3B0aW9uczo6ZGlza0NhY2hlUGF0
aCgpOwotICAgIGlmIChMSUtFTFkoIWNhY2hlUGF0aCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IFVubGlua2VkQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBqc0R5bmFtaWNDYXN0PFVubGlua2VkQ29k
ZUJsb2NrKj4odm0sIHZhbHVlLmNlbGwuZ2V0KCkpOwotICAgIGlmICghY29kZUJsb2NrKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICB1bnNpZ25lZCBoYXNoID0ga2V5Lmhhc2goKTsKLSAgICBjaGFy
IGZpbGVuYW1lWzUxMl07Ci0gICAgaW50IGNvdW50ID0gc25wcmludGYoZmlsZW5hbWUsIDUxMiwg
IiVzLyV1LmNhY2hlIiwgY2FjaGVQYXRoLCBoYXNoKTsKLSAgICBpZiAoY291bnQgPCAwIHx8IGNv
dW50ID4gNTEyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBzdGQ6OnBhaXI8TWFsbG9jUHRyPHVp
bnQ4X3Q+LCBzaXplX3Q+IHJlc3VsdCA9IGVuY29kZUNvZGVCbG9jayh2bSwga2V5LCBjb2RlQmxv
Y2spOwotCi0gICAgaW50IGZkID0gb3BlbihmaWxlbmFtZSwgT19DUkVBVCB8IE9fV1JPTkxZLCAw
NjY2KTsKLSAgICBpbnQgcmMgPSBmbG9jayhmZCwgTE9DS19FWCB8IExPQ0tfTkIpOwotICAgIGlm
ICghcmMpCi0gICAgICAgIDo6d3JpdGUoZmQsIHJlc3VsdC5maXJzdC5nZXQoKSwgcmVzdWx0LnNl
Y29uZCk7Ci0gICAgY2xvc2UoZmQpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0odm0pOwotICAg
IFVOVVNFRF9QQVJBTShrZXkpOwotICAgIFVOVVNFRF9QQVJBTSh2YWx1ZSk7Ci0jZW5kaWYKKyAg
ICBVbmxpbmtlZENvZGVCbG9ja1R5cGUqIHVubGlua2VkQ29kZUJsb2NrID0gZ2VuZXJhdGVVbmxp
bmtlZENvZGVCbG9jazxVbmxpbmtlZENvZGVCbG9ja1R5cGUsIEV4ZWN1dGFibGVUeXBlPih2bSwg
ZXhlY3V0YWJsZSwgc291cmNlLCBzdHJpY3RNb2RlLCBzY3JpcHRNb2RlLCBkZWJ1Z2dlck1vZGUs
IGVycm9yLCBldmFsQ29udGV4dFR5cGUsIHZhcmlhYmxlc1VuZGVyVERaKTsKKyAgICBpZiAoIXVu
bGlua2VkQ29kZUJsb2NrKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGdlbmVyYXRl
VW5saW5rZWRDb2RlQmxvY2tGb3JGdW5jdGlvbnModm0sIHVubGlua2VkQ29kZUJsb2NrLCBzb3Vy
Y2UsIGRlYnVnZ2VyTW9kZSwgZXJyb3IpOworICAgIHJldHVybiB1bmxpbmtlZENvZGVCbG9jazsK
IH0KIAordm9pZCB3cml0ZUNvZGVCbG9jayhWTSYsIGNvbnN0IFNvdXJjZUNvZGVLZXkmLCBVbmxp
bmtlZENvZGVCbG9jayopOwordm9pZCB3cml0ZUdsb2JhbENvZGVCbG9ja1RvRGlzayhWTSYsIFVu
bGlua2VkQ29kZUJsb2NrKiwgY29uc3QgU291cmNlQ29kZSYsIFNvdXJjZUNvZGVUeXBlLCBKU1Bh
cnNlclN0cmljdE1vZGUsIEpTUGFyc2VyU2NyaXB0TW9kZSwgRGVidWdnZXJNb2RlKTsKIAogfSAv
LyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Db21wbGV0aW9uLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbXBsZXRp
b24uY3BwCmluZGV4IDExMDJmNjZjMzIyNmQ3NDVjYWU4Y2ZiYTIwZjZhZjQzMzc5YWJlZDkuLjdl
OWVjMzVhNzk3OWE0MGRjNWJjMjc2ZjhiNGI5YmQwMDlmNjQzMTggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbXBsZXRpb24uY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0NvbXBsZXRpb24uY3BwCkBAIC0yNSw2ICsyNSw3IEBACiAKICNp
bmNsdWRlICJDYWxsRnJhbWUuaCIKICNpbmNsdWRlICJDYXRjaFNjb3BlLmgiCisjaW5jbHVkZSAi
Q29kZUNhY2hlLmgiCiAjaW5jbHVkZSAiQ29kZVByb2ZpbGluZy5oIgogI2luY2x1ZGUgIkV4Y2Vw
dGlvbi5oIgogI2luY2x1ZGUgIklkZW50aWZpZXJJbmxpbmVzLmgiCkBAIC05MCw2ICs5MSwzMCBA
QCBib29sIGNoZWNrTW9kdWxlU3ludGF4KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU291cmNlQ29k
ZSYgc291cmNlLCBQYXJzZXJFcnJvciYgZQogICAgIHJldHVybiB0cnVlOwogfQogCitib29sIGdl
bmVyYXRlQnl0ZWNvZGUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2Us
IFBhcnNlckVycm9yJiBlcnJvcikKK3sKKyAgICBpZiAoIU9wdGlvbnM6OmRpc2tDYWNoZVBhdGgo
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAg
ICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7CisgICAgUkVMRUFTRV9BU1NFUlQodm0uYXRvbWljU3Ry
aW5nVGFibGUoKSA9PSBUaHJlYWQ6OmN1cnJlbnQoKS5hdG9taWNTdHJpbmdUYWJsZSgpKTsKKwor
ICAgIFByb2dyYW1FeGVjdXRhYmxlKiBleGVjdXRhYmxlID0gUHJvZ3JhbUV4ZWN1dGFibGU6OmNy
ZWF0ZShleGVjLCBzb3VyY2UpOworICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSB2
bS52bUVudHJ5R2xvYmFsT2JqZWN0KGV4ZWMpOworCisgICAgVmFyaWFibGVFbnZpcm9ubWVudCB2
YXJpYWJsZXNVbmRlclREWjsKKyAgICBKU1BhcnNlclN0cmljdE1vZGUgc3RyaWN0TW9kZSA9IEpT
UGFyc2VyU3RyaWN0TW9kZTo6Tm90U3RyaWN0OworICAgIEpTUGFyc2VyU2NyaXB0TW9kZSBzY3Jp
cHRNb2RlID0gSlNQYXJzZXJTY3JpcHRNb2RlOjpDbGFzc2ljOworICAgIERlYnVnZ2VyTW9kZSBk
ZWJ1Z2dlck1vZGUgPSBnbG9iYWxPYmplY3QtPmhhc0ludGVyYWN0aXZlRGVidWdnZXIoKSA/IERl
YnVnZ2VyT24gOiBEZWJ1Z2dlck9mZjsKKyAgICBFdmFsQ29udGV4dFR5cGUgZXZhbENvbnRleHRU
eXBlID0gRXZhbENvbnRleHRUeXBlOjpOb25lOworCisgICAgVW5saW5rZWRDb2RlQmxvY2sqIHVu
bGlua2VkQ29kZUJsb2NrID0gcmVjdXJzaXZlbHlHZW5lcmF0ZVVubGlua2VkQ29kZUJsb2NrPFVu
bGlua2VkUHJvZ3JhbUNvZGVCbG9jaz4odm0sIGV4ZWN1dGFibGUsIHNvdXJjZSwgc3RyaWN0TW9k
ZSwgc2NyaXB0TW9kZSwgZGVidWdnZXJNb2RlLCBlcnJvciwgZXZhbENvbnRleHRUeXBlLCAmdmFy
aWFibGVzVW5kZXJURFopOworICAgIHdyaXRlR2xvYmFsQ29kZUJsb2NrVG9EaXNrKHZtLCB1bmxp
bmtlZENvZGVCbG9jaywgc291cmNlLCBTb3VyY2VDb2RlVHlwZTo6UHJvZ3JhbVR5cGUsIHN0cmlj
dE1vZGUsIHNjcmlwdE1vZGUsIGRlYnVnZ2VyTW9kZSk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KwogSlNWYWx1ZSBldmFsdWF0ZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFNvdXJjZUNvZGUmIHNv
dXJjZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIE5ha2VkUHRyPEV4Y2VwdGlvbj4mIHJldHVybmVkRXhj
ZXB0aW9uKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21wbGV0aW9uLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Db21wbGV0aW9uLmgKaW5kZXggZGU0NDhhNDA4NDcxYzc0MmU2ZjIyODhmMWFh
NzI0ZTMzZjg5NzQ5Ny4uODgwMjY2NTNhNThkMDdiNGRiOWIxOGNlYTg4ZTVmNWM5ZDg4ZGE4YSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tcGxldGlvbi5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbXBsZXRpb24uaApAQCAtMzksNiAr
MzksNyBAQCBjbGFzcyBKU0ludGVybmFsUHJvbWlzZTsKIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wg
Y2hlY2tTeW50YXgoVk0mLCBjb25zdCBTb3VyY2VDb2RlJiwgUGFyc2VyRXJyb3ImKTsKIEpTX0VY
UE9SVF9QUklWQVRFIGJvb2wgY2hlY2tTeW50YXgoRXhlY1N0YXRlKiwgY29uc3QgU291cmNlQ29k
ZSYsIEpTVmFsdWUqIGV4Y2VwdGlvbiA9IDApOwogSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBjaGVj
a01vZHVsZVN5bnRheChFeGVjU3RhdGUqLCBjb25zdCBTb3VyY2VDb2RlJiwgUGFyc2VyRXJyb3Im
KTsKK0pTX0VYUE9SVF9QUklWQVRFIGJvb2wgZ2VuZXJhdGVCeXRlY29kZShFeGVjU3RhdGUqLCBj
b25zdCBTb3VyY2VDb2RlJiwgUGFyc2VyRXJyb3ImKTsKIAogSlNfRVhQT1JUX1BSSVZBVEUgSlNW
YWx1ZSBldmFsdWF0ZShFeGVjU3RhdGUqLCBjb25zdCBTb3VyY2VDb2RlJiwgSlNWYWx1ZSB0aGlz
VmFsdWUsIE5ha2VkUHRyPEV4Y2VwdGlvbj4mIHJldHVybmVkRXhjZXB0aW9uKTsKIGlubGluZSBK
U1ZhbHVlIGV2YWx1YXRlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU291cmNlQ29kZSYgc291cmNl
Q29kZSwgSlNWYWx1ZSB0aGlzVmFsdWUgPSBKU1ZhbHVlKCkpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>359899</attachid>
            <date>2019-01-23 10:03:19 -0800</date>
            <delta_ts>2019-01-23 15:27:53 -0800</delta_ts>
            <desc>WIP patch</desc>
            <filename>bug-193401-20190123190304.patch</filename>
            <type>text/plain</type>
            <size>35802</size>
            <attacher name="Tadeu Zagallo">tzagallo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQwMzQzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBh
NTE0YzhmZGRkMzRmNWNhNGE3MjlmZDQyODE0YTYyN2UxNDEwOWEzLi5mMjYzY2RjZTA1NWFlODE3
NmNiYjZlM2ZmYjA2NTg5MDZlYzUzOWY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzNCBAQAorMjAxOS0wMS0xNCAgVGFkZXUgWmFnYWxsbyAgPHR6YWdhbGxvQGFwcGxlLmNv
bT4KKworICAgICAgICBBZGQgZW50cnkgcG9pbnQgdG8gZWFnZXJseSBnZW5lcmF0ZSBieXRlY29k
ZSBmb3IgYSBnaXZlbiBTb3VyY2VDb2RlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xOTM0MDEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBBZGQgYSBuZXcgYGdlbmVyYXRlQnl0ZWNvZGVgIGZ1bmN0aW9uIHRo
YXQgZWFnZXJseSBnZW5lcmF0ZXMgYnl0ZWNvZGUKKyAgICAgICAgZm9yIGEgZ2l2ZW4gc291cmNl
IGZpbGUgYW5kIGFsbCBpdHMgZnVuY3Rpb25zLiBDdXJyZW50bHksIHRoaXMgZnVuY3Rpb24KKyAg
ICAgICAgcmVsaWVzIG9uIE9wdGlvbnM6OmRpc2tDYWNoZVBhdGgoKSB0byB3cml0ZSB0aGUgYnl0
ZWNvZGUgdG8gZGlzay4KKworICAgICAgICBUaGlzIGZ1bmN0aW9uIGlzIG5vdCBiZWluZyB1c2Vk
IGZvciBydW5uaW5nIHRoZSBieXRlY29kZS1jYWNoZSB0ZXN0cyB5ZXQsCisgICAgICAgIGJlY2F1
c2Ugd2UgY2FuJ3QgZ3VhcmFudGVlIHRoYXQgYWxsIHRoZSBuZWNlc3NhcnkgY29kZSBoYXMgYmVl
biBjYWNoZWQKKyAgICAgICAgc2luY2Ugc29tZSB0ZXN0cyBgbG9hZGAgYW5kIGBpbXBvcnRgIG90
aGVyIGZpbGVzLgorCisgICAgICAgICoganNjLmNwcDoKKyAgICAgICAgKHJ1bldpdGhPcHRpb25z
KToKKyAgICAgICAgKHByaW50VXNhZ2VTdGF0ZW1lbnQpOgorICAgICAgICAoQ29tbWFuZExpbmU6
OnBhcnNlQXJndW1lbnRzKToKKyAgICAgICAgKiBydW50aW1lL0NvZGVDYWNoZS5jcHA6CisgICAg
ICAgIChKU0M6OkNvZGVDYWNoZU1hcDo6cHJ1bmVTbG93Q2FzZSk6CisgICAgICAgIChKU0M6OkNv
ZGVDYWNoZTo6d3JpdGUpOgorICAgICAgICAoSlNDOjpnZW5lcmF0ZVVubGlua2VkQ29kZUJsb2Nr
Rm9yRnVuY3Rpb25zKToKKyAgICAgICAgKEpTQzo6d3JpdGVDb2RlQmxvY2spOgorICAgICAgICAo
SlNDOjp3cml0ZUdsb2JhbENvZGVCbG9ja1RvRGlzayk6CisgICAgICAgICogcnVudGltZS9Db2Rl
Q2FjaGUuaDoKKyAgICAgICAgKEpTQzo6cmVjdXJzaXZlbHlHZW5lcmF0ZVVubGlua2VkQ29kZUJs
b2NrKToKKyAgICAgICAgKiBydW50aW1lL0NvbXBsZXRpb24uY3BwOgorICAgICAgICAoSlNDOjpn
ZW5lcmF0ZUJ5dGVjb2RlKToKKyAgICAgICAgKiBydW50aW1lL0NvbXBsZXRpb24uaDoKKwogMjAx
OS0wMS0yMyAgRGF2aWQgS2lsemVyICA8ZGRraWx6ZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFtK
U0NdIER1cGxpY2F0ZSBnbG9iYWwgdmFyaWFibGVzOiBKU0M6Om9wY29kZUxlbmd0aHMKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElHbG9iYWxPYmplY3QubW0gYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQVBJR2xvYmFsT2JqZWN0Lm1tCmluZGV4IDNjYTRh
YjkyNTFmNzFhNTVlZDI0ODRhYzExNzZjMzkwNmU5OTJjYzUuLjhmNzc1ZmFmYmEwMzY4N2QyOWYx
NjI2NzM1OWIwMzZkMzA4ZTJmNmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9B
UEkvSlNBUElHbG9iYWxPYmplY3QubW0KKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9K
U0FQSUdsb2JhbE9iamVjdC5tbQpAQCAtMzYsNyArMzYsNyBAQAogI2ltcG9ydCAiSlNDb250ZXh0
SW50ZXJuYWwuaCIKICNpbXBvcnQgIkpTSW50ZXJuYWxQcm9taXNlRGVmZXJyZWQuaCIKICNpbXBv
cnQgIkpTTmF0aXZlU3RkRnVuY3Rpb24uaCIKLSNpbXBvcnQgIkpTU2NyaXB0SW50ZXJuYWwuaCIK
KyNpbXBvcnQgIkpTU2NyaXB0LmgiCiAjaW1wb3J0ICJKU1NvdXJjZUNvZGUuaCIKICNpbXBvcnQg
IkpTVmFsdWVJbnRlcm5hbC5oIgogI2ltcG9ydCAiSlNWaXJ0dWFsTWFjaGluZUludGVybmFsLmgi
CkBAIC0xNjQsNyArMTY0LDYgQEAgSlNJbnRlcm5hbFByb21pc2UqIEpTQVBJR2xvYmFsT2JqZWN0
Ojptb2R1bGVMb2FkZXJGZXRjaChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2IKICAgICBhdXRvIGRl
ZmVycmVkUHJvbWlzZSA9IFN0cm9uZzxKU0ludGVybmFsUHJvbWlzZURlZmVycmVkPih2bSwgZGVm
ZXJyZWQpOwogICAgIGF1dG8gc3Ryb25nS2V5ID0gU3Ryb25nPEpTU3RyaW5nPih2bSwganNTZWN1
cmVDYXN0PEpTU3RyaW5nKj4odm0sIGtleSkpOwogICAgIGF1dG8qIHJlc29sdmUgPSBKU05hdGl2
ZVN0ZEZ1bmN0aW9uOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgMSwgInJlc29sdmUiLCBbPV0g
KEV4ZWNTdGF0ZSogZXhlYykgewotICAgICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgICAg
ICAvLyBUaGlzIGNhcHR1cmVzIHRoZSBnbG9iYWxPYmplY3QgYnV0IHRoYXQncyBvayBiZWNhdXNl
IG91ciBzdHJ1Y3R1cmUga2VlcHMgaXQgYWxpdmUgYW55d2F5LgogICAgICAgICBKU0NvbnRleHQg
KmNvbnRleHQgPSBbSlNDb250ZXh0IGNvbnRleHRXaXRoSlNHbG9iYWxDb250ZXh0UmVmOnRvR2xv
YmFsUmVmKGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpKV07CiAgICAgICAgIGlkIHNjcmlwdCA9
IHZhbHVlVG9PYmplY3QoY29udGV4dCwgdG9SZWYoZXhlYywgZXhlYy0+YXJndW1lbnQoMCkpKTsK
QEAgLTE3Niw4ICsxNzUsNyBAQCBKU0ludGVybmFsUHJvbWlzZSogSlNBUElHbG9iYWxPYmplY3Q6
Om1vZHVsZUxvYWRlckZldGNoKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYgogICAgICAgICAgICAg
cmV0dXJuIGVuY29kZWRKU1VuZGVmaW5lZCgpOwogICAgICAgICB9CiAKLSAgICAgICAgY29uc3Qg
U3RyaW5nJiBzb3VyY2UgPSBnZXRKU1NjcmlwdFNvdXJjZUNvZGUoc3RhdGljX2Nhc3Q8SlNTY3Jp
cHQgKj4oc2NyaXB0KSk7Ci0gICAgICAgIGFyZ3MuYXBwZW5kKEpTU291cmNlQ29kZTo6Y3JlYXRl
KHZtLCBtYWtlU291cmNlKHNvdXJjZSwgU291cmNlT3JpZ2luKG1vZHVsZUtleS5zdHJpbmcoKSks
IFVSTCh7IH0sIG1vZHVsZUtleS5zdHJpbmcoKSksIFRleHRQb3NpdGlvbigpLCBKU0M6OlNvdXJj
ZVByb3ZpZGVyU291cmNlVHlwZTo6TW9kdWxlKSkpOworICAgICAgICBhcmdzLmFwcGVuZChbc3Rh
dGljX2Nhc3Q8SlNTY3JpcHQgKj4oc2NyaXB0KSBqc1NvdXJjZUNvZGU6bW9kdWxlS2V5XSk7CiAg
ICAgICAgIGNhbGwoZXhlYywgZGVmZXJyZWRQcm9taXNlLT5KU1Byb21pc2VEZWZlcnJlZDo6cmVz
b2x2ZSgpLCBhcmdzLCAiVGhpcyBzaG91bGQgbmV2ZXIgYmUgc2Vlbi4uLiIpOwogICAgICAgICBy
ZXR1cm4gZW5jb2RlZEpTVW5kZWZpbmVkKCk7CiAgICAgfSk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dC5tbSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9B
UEkvSlNDb250ZXh0Lm1tCmluZGV4IDNjNzc2ZDRkOTAwZWUxNzMzMzYyYWMyOWY2MjRmNDQ0ZDU0
NWU3YjQuLjcyM2IxYmJkYjY4ODQyNjVhNjI2YjZjYWRhOWFjZmIyN2I5ZjBiNGYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0Lm1tCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0Lm1tCkBAIC0zNCw3ICszNCw2IEBACiAjaW1wb3J0
ICJKU0dsb2JhbE9iamVjdC5oIgogI2ltcG9ydCAiSlNJbnRlcm5hbFByb21pc2UuaCIKICNpbXBv
cnQgIkpTTW9kdWxlTG9hZGVyLmgiCi0jaW1wb3J0ICJKU1NjcmlwdEludGVybmFsLmgiCiAjaW1w
b3J0ICJKU1ZhbHVlSW50ZXJuYWwuaCIKICNpbXBvcnQgIkpTVmlydHVhbE1hY2hpbmVJbnRlcm5h
bC5oIgogI2ltcG9ydCAiSlNXcmFwcGVyTWFwLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvQVBJL0pTU2NyaXB0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTU2Ny
aXB0LmgKaW5kZXggOGRlZDdjYTc3MGVmYzFiODcxZGIwNGYyNDVkYjU1MzFjNjE3ZDRlMS4uNzU0
Njg3MjI0ZDE0MGRiMDFmNjk1MDI3YWVjNzRiYmU0YjU5YTllOCAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL0FQSS9KU1NjcmlwdC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9BUEkvSlNTY3JpcHQuaApAQCAtMjUsNiArMjUsMTEgQEAKIAogI2ltcG9ydCA8SmF2YVNjcmlw
dENvcmUvSlNWYWx1ZS5oPgogCituYW1lc3BhY2UgSlNDIHsKK2NsYXNzIEpTU291cmNlQ29kZTsK
K2NsYXNzIElkZW50aWZpZXI7Cit9OworCiAjaWYgSlNDX09CSkNfQVBJX0VOQUJMRUQKIAogTlNf
QVNTVU1FX05PTk5VTExfQkVHSU4KQEAgLTYzLDYgKzY4LDggQEAgSlNDX0NMQVNTX0FWQUlMQUJM
RShtYWNvc3goSlNDX01BQ19UQkEpLCBpb3MoSlNDX0lPU19UQkEpKQogICovCiArIChudWxsYWJs
ZSBpbnN0YW5jZXR5cGUpc2NyaXB0RnJvbVVURjhGaWxlOihOU1VSTCAqKWZpbGVQYXRoIGluVmly
dHVhbE1hY2hpbmU6KEpTVmlydHVhbE1hY2hpbmUgKil2bSB3aXRoQ29kZVNpZ25pbmc6KG51bGxh
YmxlIE5TVVJMICopY29kZVNpZ25pbmdQYXRoIGFuZEJ5dGVjb2RlQ2FjaGU6KG51bGxhYmxlIE5T
VVJMICopY2FjaGVQYXRoOwogCistIChKU0M6OkpTU291cmNlQ29kZSopanNTb3VyY2VDb2RlOihK
U0M6OklkZW50aWZpZXIpbW9kdWxlS2V5OworCiBAZW5kCiAKIE5TX0FTU1VNRV9OT05OVUxMX0VO
RApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1NjcmlwdC5tbSBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNTY3JpcHQubW0KaW5kZXggZjdlOTM5YWYwOThiZjVk
MGY1M2VkMWU4YjMyZDc1YTRkODIzZmQ3Zi4uNDEyNjA0ZGI0Y2E1ZmU0Nzk4ZTliNWE2YzU5N2M3
OGViYTIwMDFiMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1Njcmlw
dC5tbQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTU2NyaXB0Lm1tCkBAIC0yNCwy
NCArMjQsMzMgQEAKICAqLwogCiAjaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIkpTU2NyaXB0
SW50ZXJuYWwuaCIKKyNpbXBvcnQgIkpTU2NyaXB0LmgiCiAKICNpbXBvcnQgIkFQSUNhc3QuaCIK
KyNpbXBvcnQgIklkZW50aWZpZXIuaCIKICNpbXBvcnQgIkpTQ29udGV4dEludGVybmFsLmgiCisj
aW1wb3J0ICJKU1NvdXJjZUNvZGUuaCIKICNpbXBvcnQgIkpTVmFsdWVQcml2YXRlLmgiCisjaW1w
b3J0ICJKU1ZpcnR1YWxNYWNoaW5lSW50ZXJuYWwuaCIKICNpbXBvcnQgIlN5bWJvbC5oIgorI2lu
Y2x1ZGUgPHN5cy9zdGF0Lmg+CiAKICNpZiBKU0NfT0JKQ19BUElfRU5BQkxFRAogCiBAaW1wbGVt
ZW50YXRpb24gSlNTY3JpcHQgeworICAgIF9fdW5zYWZlX3VucmV0YWluZWQgSlNWaXJ0dWFsTWFj
aGluZSogbV92aXJ0dWFsTWFjaGluZTsKICAgICBTdHJpbmcgbV9zb3VyY2U7CisgICAgTlNVUkwq
IG1fY2FjaGVQYXRoOworICAgIEpTQzo6Q2FjaGVkQnl0ZWNvZGUgbV9jYWNoZWRCeXRlY29kZTsK
KyAgICBIYXNoTWFwPFVuaXF1ZWRTdHJpbmdJbXBsKiwgSlNDOjpTdHJvbmc8SlNDOjpKU1NvdXJj
ZUNvZGU+PiBtX2pzU291cmNlQ29kZU1hcDsKIH0KIAogKyAoaW5zdGFuY2V0eXBlKXNjcmlwdFdp
dGhTb3VyY2U6KE5TU3RyaW5nICopc291cmNlIGluVmlydHVhbE1hY2hpbmU6KEpTVmlydHVhbE1h
Y2hpbmUgKil2bQogewogICAgIFVOVVNFRF9QQVJBTSh2bSk7Ci0gICAgSlNTY3JpcHQgKnJlc3Vs
dCA9IFtbSlNTY3JpcHQgYWxsb2NdIGluaXRdOworICAgIEpTU2NyaXB0ICpyZXN1bHQgPSBbW1tK
U1NjcmlwdCBhbGxvY10gaW5pdF0gYXV0b3JlbGVhc2VdOwogICAgIHJlc3VsdC0+bV9zb3VyY2Ug
PSBzb3VyY2U7CisgICAgcmVzdWx0LT5tX3ZpcnR1YWxNYWNoaW5lID0gdm07CiAgICAgcmV0dXJu
IHJlc3VsdDsKIH0KIApAQCAtODEsOSArOTAsNiBAQCArIChpbnN0YW5jZXR5cGUpc2NyaXB0RnJv
bUFTQ0lJRmlsZTooTlNVUkwgKilmaWxlUGF0aCBpblZpcnR1YWxNYWNoaW5lOihKU1ZpcnR1YQog
ewogICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBjaGVjayBjb2RlU2lnbmluZy4KICAgICBVTlVT
RURfUEFSQU0oY29kZVNpZ25pbmdQYXRoKTsKLSAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYWN0
dWFsbHkgY2FjaGUgYnl0ZWNvZGUuCi0gICAgVU5VU0VEX1BBUkFNKGNhY2hlUGF0aCk7Ci0gICAg
VU5VU0VEX1BBUkFNKHZtKTsKICAgICBVUkwgZmlsZVBhdGhVUkwoW2ZpbGVQYXRoIGFic29sdXRl
VVJMXSk7CiAgICAgaWYgKCFmaWxlUGF0aFVSTC5pc0xvY2FsRmlsZSgpKQogICAgICAgICByZXR1
cm4gbmlsOwpAQCAtOTUsOCArMTAxLDExIEBAICsgKGluc3RhbmNldHlwZSlzY3JpcHRGcm9tQVND
SUlGaWxlOihOU1VSTCAqKWZpbGVQYXRoIGluVmlydHVhbE1hY2hpbmU6KEpTVmlydHVhCiAgICAg
aWYgKCFjaGFyYWN0ZXJzQXJlQWxsQVNDSUkoYnVmZmVyLmRhdGEoKSwgYnVmZmVyLnNpemUoKSkp
CiAgICAgICAgIHJldHVybiBuaWw7CiAKLSAgICBKU1NjcmlwdCAqcmVzdWx0ID0gW1tKU1Njcmlw
dCBhbGxvY10gaW5pdF07CisgICAgSlNTY3JpcHQgKnJlc3VsdCA9IFtbW0pTU2NyaXB0IGFsbG9j
XSBpbml0XSBhdXRvcmVsZWFzZV07CisgICAgcmVzdWx0LT5tX3ZpcnR1YWxNYWNoaW5lID0gdm07
CiAgICAgcmVzdWx0LT5tX3NvdXJjZSA9IFN0cmluZzo6ZnJvbVVURjhXaXRoTGF0aW4xRmFsbGJh
Y2soYnVmZmVyLmRhdGEoKSwgYnVmZmVyLnNpemUoKSk7CisgICAgcmVzdWx0LT5tX2NhY2hlUGF0
aCA9IGNhY2hlUGF0aDsKKyAgICBbcmVzdWx0IHJlYWRDYWNoZV07CiAgICAgcmV0dXJuIHJlc3Vs
dDsKIH0KIApAQCAtMTA1LDcgKzExNCw3NCBAQCArIChpbnN0YW5jZXR5cGUpc2NyaXB0RnJvbVVU
RjhGaWxlOihOU1VSTCAqKWZpbGVQYXRoIGluVmlydHVhbE1hY2hpbmU6KEpTVmlydHVhbAogICAg
IHJldHVybiBbSlNTY3JpcHQgc2NyaXB0RnJvbUFTQ0lJRmlsZTpmaWxlUGF0aCBpblZpcnR1YWxN
YWNoaW5lOnZtIHdpdGhDb2RlU2lnbmluZzpjb2RlU2lnbmluZ1BhdGggYW5kQnl0ZWNvZGVDYWNo
ZTpjYWNoZVBhdGhdOwogfQogCi1jb25zdCBTdHJpbmcmIGdldEpTU2NyaXB0U291cmNlQ29kZShK
U1NjcmlwdCAqbW9kdWxlKSB7IHJldHVybiBtb2R1bGUtPm1fc291cmNlOyB9CistICh2b2lkKWRl
YWxsb2MKK3sKKyAgICBpZiAobV9jYWNoZWRCeXRlY29kZS5zaXplKCkpCisgICAgICAgIG11bm1h
cChjb25zdF9jYXN0PHZvaWQqPihtX2NhY2hlZEJ5dGVjb2RlLmRhdGEoKSksIG1fY2FjaGVkQnl0
ZWNvZGUuc2l6ZSgpKTsKKyAgICBbc2VsZiB3cml0ZUNhY2hlXTsKKyAgICBbc3VwZXIgZGVhbGxv
Y107Cit9CisKKy0gKHZvaWQpcmVhZENhY2hlCit7CisgICAgaWYgKCFtX2NhY2hlUGF0aCkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgaW50IGZkID0gb3BlbihtX2NhY2hlUGF0aC5hYnNvbHV0ZVN0
cmluZy5VVEY4U3RyaW5nLCBPX1JET05MWSk7CisgICAgaWYgKGZkID09IC0xKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBpbnQgcmMgPSBmbG9jayhmZCwgTE9DS19TSCB8IExPQ0tfTkIpOworICAg
IGlmIChyYykgeworICAgICAgICBjbG9zZShmZCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBzdHJ1Y3Qgc3RhdCBzYjsKKyAgICBpbnQgcmVzID0gZnN0YXQoZmQsICZzYik7CisgICAg
c2l6ZV90IHNpemUgPSBzdGF0aWNfY2FzdDxzaXplX3Q+KHNiLnN0X3NpemUpOworICAgIGlmIChy
ZXMgfHwgIXNpemUpIHsKKyAgICAgICAgY2xvc2UoZmQpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgdm9pZCogYnVmZmVyID0gbW1hcChudWxscHRyLCBzaXplLCBQUk9UX1JFQUQsIE1B
UF9QUklWQVRFLCBmZCwgMCk7CisgICAgY2xvc2UoZmQpOworCisgICAgbV9jYWNoZWRCeXRlY29k
ZSA9IEpTQzo6Q2FjaGVkQnl0ZWNvZGUgeyBidWZmZXIsIHNpemUgfTsKK30KKworLSAodm9pZCl3
cml0ZUNhY2hlCit7CisgICAgSlNDOjpWTSYgdm0gPSBtX3ZpcnR1YWxNYWNoaW5lLnZtOworICAg
IGRhdGFMb2dMbigidm0uZW50cnlTY29wZTogIiwgUmF3UG9pbnRlcih2bS5lbnRyeVNjb3BlKSk7
CisgICAgaWYgKCFtX2NhY2hlUGF0aCB8fCBtX2NhY2hlZEJ5dGVjb2RlLnNpemUoKSkKKyAgICAg
ICAgcmV0dXJuOworICAgIC8vUGFyc2VyRXJyb3IgZXJyb3I7CisgICAgLy9DYWNoZWRCeXRlY29k
ZSBjYWNoZWRCeXRlY29kZSA9IGdlbmVyYXRlTW9kdWxlQnl0ZWNvZGUoZXhlYywgbV9zb3VyY2Us
IGVycm9yKTsKKyAgICAvL2ludCBmZCA9IG9wZW4obV9jYWNoZVBhdGguYWJzb2x1dGVTdHJpbmcu
VVRGOFN0cmluZywgT19DUkVBVCB8IE9fV1JPTkxZLCAwNjY2KTsKKyAgICAvL2lmIChmZCA9PSAt
MSkKKyAgICAgICAgLy9yZXR1cm47CisgICAgLy9pbnQgcmMgPSBmbG9jayhmZCwgTE9DS19FWCB8
IExPQ0tfTkIpOworICAgIC8vaWYgKCFyYykKKyAgICAgICAgLy93cml0ZShmZCwgY2FjaGVkQnl0
ZWNvZGUuZGF0YSgpLCBjYWNoZWRCeXRlY29kZS5zaXplKCkpOworICAgIC8vY2xvc2UoZmQpOwor
fQorCistIChKU0M6OkpTU291cmNlQ29kZSopanNTb3VyY2VDb2RlOihKU0M6OklkZW50aWZpZXIp
bW9kdWxlS2V5Cit7CisgICAgYXV0byBpdCA9IG1fanNTb3VyY2VDb2RlTWFwLmZpbmQobW9kdWxl
S2V5LmltcGwoKSk7CisgICAgaWYgKGl0ICE9IG1fanNTb3VyY2VDb2RlTWFwLmVuZCgpKQorICAg
ICAgICByZXR1cm4gaXQtPnZhbHVlLmdldCgpOworCisgICAgSlNDOjpWTSYgdm0gPSBtX3ZpcnR1
YWxNYWNoaW5lLnZtOworICAgIFRleHRQb3NpdGlvbiBzdGFydFBvc2l0aW9uIHt9OworICAgIFJl
ZjxKU0M6OkNhY2hlZEJ5dGVjb2RlU291cmNlUHJvdmlkZXI+IHNvdXJjZVByb3ZpZGVyID0gSlND
OjpDYWNoZWRCeXRlY29kZVNvdXJjZVByb3ZpZGVyOjpjcmVhdGUobV9zb3VyY2UsICZtX2NhY2hl
ZEJ5dGVjb2RlLCBKU0M6OlNvdXJjZU9yaWdpbihtb2R1bGVLZXkuc3RyaW5nKCkpLCBVUkwoeyB9
LCBtb2R1bGVLZXkuc3RyaW5nKCkpLCBUZXh0UG9zaXRpb24oKSwgSlNDOjpTb3VyY2VQcm92aWRl
clNvdXJjZVR5cGU6Ok1vZHVsZSk7CisgICAgSlNDOjpTb3VyY2VDb2RlIHNvdXJjZUNvZGUgKFdU
Rk1vdmUoc291cmNlUHJvdmlkZXIpLCBzdGFydFBvc2l0aW9uLm1fbGluZS5vbmVCYXNlZEludCgp
LCBzdGFydFBvc2l0aW9uLm1fY29sdW1uLm9uZUJhc2VkSW50KCkpOworICAgIEpTQzo6SlNTb3Vy
Y2VDb2RlKiBqc1NvdXJjZUNvZGUgPSBKU0M6OkpTU291cmNlQ29kZTo6Y3JlYXRlKHZtLCBXVEZN
b3ZlKHNvdXJjZUNvZGUpKTsKKyAgICBtX2pzU291cmNlQ29kZU1hcC5zZXQobW9kdWxlS2V5Lmlt
cGwoKSwgSlNDOjpTdHJvbmc8SlNDOjpKU1NvdXJjZUNvZGU+IHsgbV92aXJ0dWFsTWFjaGluZS52
bSwganNTb3VyY2VDb2RlIH0pOworICAgIHJldHVybiBqc1NvdXJjZUNvZGU7Cit9CiAKIEBlbmQK
IApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1NjcmlwdEludGVybmFs
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTU2NyaXB0SW50ZXJuYWwuaApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTk3M2VkMWFkNGExZmM1ZmRmMzVjZjk0ODIzMDE3OTVh
ZTFmMmViMy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTU2NyaXB0SW50ZXJuYWwuaAorKysgL2Rldi9udWxs
CkBAIC0xLDMzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
Ci0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2ltcG9ydCAiSlNTY3JpcHQuaCIKLSNpbXBvcnQgIlNv
dXJjZUNvZGUuaCIKLQotT0JKQ19DTEFTUyBKU1NjcmlwdDsKLQotY29uc3QgU3RyaW5nJiBnZXRK
U1NjcmlwdFNvdXJjZUNvZGUoSlNTY3JpcHQgKik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvQVBJL0pTVmlydHVhbE1hY2hpbmUubW0gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
QVBJL0pTVmlydHVhbE1hY2hpbmUubW0KaW5kZXggNWU3OTVmMDE2ZjA1YTM4MWJkY2YxMDQwZjMz
NWQwODk1Mzk1ZGVhYS4uNTA0ZDMzY2Y1ZjdjYjUzZjE2ZGQzNzc5M2ZjNjFjOTE1ZTIzYmZlNiAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZpcnR1YWxNYWNoaW5lLm1t
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWaXJ0dWFsTWFjaGluZS5tbQpAQCAt
Mjk3LDYgKzI5NywxMSBAQCArIChOU1VJbnRlZ2VyKXNldE51bWJlck9mRlRMQ29tcGlsZXJUaHJl
YWRzOihOU1VJbnRlZ2VyKW51bWJlck9mVGhyZWFkcwogCiAjZW5kaWYgLy8gRU5BQkxFKERGR19K
SVQpCiAKKy0gKEpTQzo6Vk0mKXZtCit7CisgICAgcmV0dXJuICp0b0pTKG1fZ3JvdXApOworfQor
CiBAZW5kCiAKIHN0YXRpYyB2b2lkIHNjYW5FeHRlcm5hbE9iamVjdEdyYXBoKEpTQzo6Vk0mIHZt
LCBKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yLCB2b2lkKiByb290LCBib29sIGxvY2tBY3F1aXJl
ZCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWaXJ0dWFsTWFjaGlu
ZUludGVybmFsLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmlydHVhbE1hY2hpbmVJ
bnRlcm5hbC5oCmluZGV4IDkxMjJlZDQ5YTRlYTFhYTQ5ZWM2NjdmZWY2NjI3ZmM0M2I3NzcxNmQu
LjliMGJmNmJlZWIwN2FkZDA5YzYzZThiMTQwMzRhODhjZTgzZDZlZDcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWaXJ0dWFsTWFjaGluZUludGVybmFsLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZpcnR1YWxNYWNoaW5lSW50ZXJuYWwuaApAQCAt
NDYsNiArNDYsOCBAQCBKU0NvbnRleHRHcm91cFJlZiBnZXRHcm91cEZyb21WaXJ0dWFsTWFjaGlu
ZShKU1ZpcnR1YWxNYWNoaW5lICopOwogCiAtIChKU0NvbnRleHQgKiljb250ZXh0Rm9yR2xvYmFs
Q29udGV4dFJlZjooSlNHbG9iYWxDb250ZXh0UmVmKWdsb2JhbENvbnRleHQ7CiAtICh2b2lkKWFk
ZENvbnRleHQ6KEpTQ29udGV4dCAqKXdyYXBwZXIgZm9yR2xvYmFsQ29udGV4dFJlZjooSlNHbG9i
YWxDb250ZXh0UmVmKWdsb2JhbENvbnRleHQ7CistIChKU0M6OlZNJil2bTsKKwogQGVuZAogCiAj
ZW5kaWYgLy8gZGVmaW5lZChfX09CSkNfXykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvdGVzdHMvdGVzdGFwaS5tbSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVz
dHMvdGVzdGFwaS5tbQppbmRleCAxM2JlYjY5ZjJiY2Q3MjE5NGM3MGFmNTY4Zjk2MTJkNjFlZjZh
Y2MzLi44NWYwNjI0NTMzNmRjNTU3ZGFhOTU0NmQ5YWQzNjc4ZTE3NzcxOWU1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL3Rlc3RhcGkubW0KKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy90ZXN0YXBpLm1tCkBAIC0xOTgwLDYgKzE5ODAsNDMg
QEAgc3RhdGljIHZvaWQgdGVzdEltcG9ydE1vZHVsZVR3aWNlKCkKICAgICB9CiB9CiAKK3N0YXRp
YyB2b2lkIHRlc3RCeXRlY29kZUNhY2hlKCkKK3sKKyAgICBAYXV0b3JlbGVhc2Vwb29sIHsKKyAg
ICAgICAgTlNVUkwqIHRlbXBEaXJlY3RvcnkgPSBbTlNVUkwgZmlsZVVSTFdpdGhQYXRoOk5TVGVt
cG9yYXJ5RGlyZWN0b3J5KCkgaXNEaXJlY3Rvcnk6WUVTXTsKKworICAgICAgICBOU1N0cmluZyog
Zm9vU291cmNlID0gQCJpbXBvcnQgeyBuIH0gZnJvbSBcIi4uL2Zvby5qc1wiOyBleHBvcnQgbGV0
IGZvbyA9IG47IjsKKyAgICAgICAgTlNTdHJpbmcqIGJhclNvdXJjZSA9IEAiaW1wb3J0IFwib3Ro
ZXJEaXJlY3RvcnkvYmF6LmpzXCI7IGV4cG9ydCBsZXQgbiA9IG51bGw7IjsKKyAgICAgICAgTlNT
dHJpbmcqIGJhelNvdXJjZSA9IEAiaW1wb3J0IHsgZm9vIH0gZnJvbSBcIi4uL2RpcmVjdG9yeS9i
YXIuanNcIjsgZ2xvYmFsVGhpcy5yYW4gPSBudWxsOyBleHBvcnQgbGV0IGV4cCA9IGZvbzsiOwor
CisgICAgICAgIE5TVVJMKiBmb29QYXRoID0gW3RlbXBEaXJlY3RvcnkgVVJMQnlBcHBlbmRpbmdQ
YXRoQ29tcG9uZW50OkAiZm9vLmpzIl07CisgICAgICAgIE5TVVJMKiBiYXJQYXRoID0gW3RlbXBE
aXJlY3RvcnkgVVJMQnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50OkAiYmFyLmpzIl07CisgICAgICAg
IE5TVVJMKiBiYXpQYXRoID0gW3RlbXBEaXJlY3RvcnkgVVJMQnlBcHBlbmRpbmdQYXRoQ29tcG9u
ZW50OkAiYmF6LmpzIl07CisKKyAgICAgICAgTlNVUkwqIGZvb0NhY2hlUGF0aCA9IFt0ZW1wRGly
ZWN0b3J5IFVSTEJ5QXBwZW5kaW5nUGF0aENvbXBvbmVudDpAImZvby5qcy5jYWNoZSJdOworICAg
ICAgICBOU1VSTCogYmFyQ2FjaGVQYXRoID0gW3RlbXBEaXJlY3RvcnkgVVJMQnlBcHBlbmRpbmdQ
YXRoQ29tcG9uZW50OkAiYmFyLmpzLmNhY2hlIl07CisgICAgICAgIE5TVVJMKiBiYXpDYWNoZVBh
dGggPSBbdGVtcERpcmVjdG9yeSBVUkxCeUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6QCJiYXouanMu
Y2FjaGUiXTsKKworICAgICAgICBbZm9vU291cmNlIHdyaXRlVG9VUkw6Zm9vUGF0aCBhdG9taWNh
bGx5Ok5PIGVuY29kaW5nOk5TQVNDSUlTdHJpbmdFbmNvZGluZyBlcnJvcjpuaWxdOworICAgICAg
ICBbYmFyU291cmNlIHdyaXRlVG9VUkw6YmFyUGF0aCBhdG9taWNhbGx5Ok5PIGVuY29kaW5nOk5T
QVNDSUlTdHJpbmdFbmNvZGluZyBlcnJvcjpuaWxdOworICAgICAgICBbYmF6U291cmNlIHdyaXRl
VG9VUkw6YmF6UGF0aCBhdG9taWNhbGx5Ok5PIGVuY29kaW5nOk5TQVNDSUlTdHJpbmdFbmNvZGlu
ZyBlcnJvcjpuaWxdOworICAgICAgICBhdXRvICpjb250ZXh0ID0gW0pTQ29udGV4dEZldGNoRGVs
ZWdhdGUgY29udGV4dFdpdGhCbG9ja0ZvckZldGNoOl4oSlNDb250ZXh0ICpjb250ZXh0LCBKU1Zh
bHVlICppZGVudGlmaWVyLCBKU1ZhbHVlICpyZXNvbHZlLCBKU1ZhbHVlICpyZWplY3QpIHsKKyAg
ICAgICAgICAgIGlmIChbaWRlbnRpZmllciBpc0VxdWFsVG9PYmplY3Q6QCJmaWxlOi8vL2RpcmVj
dG9yeS9iYXIuanMiXSkKKyAgICAgICAgICAgICAgICBbcmVzb2x2ZSBjYWxsV2l0aEFyZ3VtZW50
czpAW1tKU1NjcmlwdCBzY3JpcHRGcm9tQVNDSUlGaWxlOmZvb1BhdGggaW5WaXJ0dWFsTWFjaGlu
ZTpbY29udGV4dCB2aXJ0dWFsTWFjaGluZV0gd2l0aENvZGVTaWduaW5nOm5pbCBhbmRCeXRlY29k
ZUNhY2hlOmZvb0NhY2hlUGF0aF1dXTsKKyAgICAgICAgICAgIGVsc2UgaWYgKFtpZGVudGlmaWVy
IGlzRXF1YWxUb09iamVjdDpAImZpbGU6Ly8vZm9vLmpzIl0pCisgICAgICAgICAgICAgICAgW3Jl
c29sdmUgY2FsbFdpdGhBcmd1bWVudHM6QFtbSlNTY3JpcHQgc2NyaXB0RnJvbUFTQ0lJRmlsZTpi
YXJQYXRoIGluVmlydHVhbE1hY2hpbmU6W2NvbnRleHQgdmlydHVhbE1hY2hpbmVdIHdpdGhDb2Rl
U2lnbmluZzpuaWwgYW5kQnl0ZWNvZGVDYWNoZTpiYXJDYWNoZVBhdGhdXV07CisgICAgICAgICAg
ICBlbHNlIGlmIChbaWRlbnRpZmllciBpc0VxdWFsVG9PYmplY3Q6QCJmaWxlOi8vL290aGVyRGly
ZWN0b3J5L2Jhei5qcyJdKQorICAgICAgICAgICAgICAgIFtyZXNvbHZlIGNhbGxXaXRoQXJndW1l
bnRzOkBbW0pTU2NyaXB0IHNjcmlwdEZyb21BU0NJSUZpbGU6YmF6UGF0aCBpblZpcnR1YWxNYWNo
aW5lOltjb250ZXh0IHZpcnR1YWxNYWNoaW5lXSB3aXRoQ29kZVNpZ25pbmc6bmlsIGFuZEJ5dGVj
b2RlQ2FjaGU6YmF6Q2FjaGVQYXRoXV1dOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgIFtyZWplY3QgY2FsbFdpdGhBcmd1bWVudHM6QFtbSlNWYWx1ZSB2YWx1ZVdpdGhOZXdFcnJv
ckZyb21NZXNzYWdlOkAiV2VpcmQgcGF0aCIgaW5Db250ZXh0OmNvbnRleHRdXV07CisgICAgICAg
IH1dOworICAgICAgICBjb250ZXh0Lm1vZHVsZUxvYWRlckRlbGVnYXRlID0gY29udGV4dDsKKyAg
ICAgICAgSlNWYWx1ZSAqcHJvbWlzZSA9IFtjb250ZXh0IGV2YWx1YXRlU2NyaXB0OkAiaW1wb3J0
KCcuLi9vdGhlckRpcmVjdG9yeS9iYXouanMnKTsiIHdpdGhTb3VyY2VVUkw6W05TVVJMIGZpbGVV
UkxXaXRoUGF0aDpAIi9kaXJlY3RvcnkiIGlzRGlyZWN0b3J5OllFU11dOworICAgICAgICBKU1Zh
bHVlICpudWxsID0gW0pTVmFsdWUgdmFsdWVXaXRoTnVsbEluQ29udGV4dDpjb250ZXh0XTsKKyAg
ICAgICAgY2hlY2tNb2R1bGVDb2RlUmFuKGNvbnRleHQsIHByb21pc2UsIG51bGwpOworICAgIH0K
K30KKwogQGludGVyZmFjZSBKU0NvbnRleHRGaWxlTG9hZGVyRGVsZWdhdGUgOiBKU0NvbnRleHQg
PEpTTW9kdWxlTG9hZGVyRGVsZWdhdGU+CiAKICsgKGluc3RhbmNldHlwZSluZXdDb250ZXh0OwpA
QCAtMjA0OSw2ICsyMDg2LDcgQEAgdm9pZCB0ZXN0T2JqZWN0aXZlQ0FQSSgpCiAgICAgdGVzdEZl
dGNoV2l0aFR3b0N5Y2xlKCk7CiAgICAgdGVzdEZldGNoV2l0aFRocmVlQ3ljbGUoKTsKICAgICB0
ZXN0SW1wb3J0TW9kdWxlVHdpY2UoKTsKKyAgICB0ZXN0Qnl0ZWNvZGVDYWNoZSgpOwogCiAgICAg
dGVzdExvYWRlclJlamVjdHNOaWxTY3JpcHRVUkwoKTsKICAgICB0ZXN0TG9hZGVyUmVqZWN0c0Zh
aWxlZEZldGNoKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmNwcAppbmRleCBiMTE0ZDM5ZTkwMjI2
YTUxMGIyNDU4NTIxZDk1YzYzZjc1MDMzZWViLi5lOGRjMTk4MWYwZTYzYzI2MDE2MDlkMjQwYjlh
Mzc5NzE5Y2FhNTg5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5jcHAKQEAgLTE5NCw2ICsxOTQs
MTYgQEAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIFVubGlua2VkRnVuY3Rpb25FeGVjdXRh
YmxlOjpmcm9tR2xvYmFsQ29kZSgKICAgICByZXR1cm4gZXhlY3V0YWJsZTsKIH0KIAorVW5saW5r
ZWRGdW5jdGlvbkNvZGVCbG9jayogVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6OnVubGlua2Vk
Q29kZUJsb2NrRm9yKENvZGVTcGVjaWFsaXphdGlvbktpbmQgc3BlY2lhbGl6YXRpb25LaW5kKQor
eworICAgIHN3aXRjaCAoc3BlY2lhbGl6YXRpb25LaW5kKSB7CisgICAgY2FzZSBDb2RlRm9yQ2Fs
bDoKKyAgICAgICAgcmV0dXJuIG1fdW5saW5rZWRDb2RlQmxvY2tGb3JDYWxsLmdldCgpOworICAg
IGNhc2UgQ29kZUZvckNvbnN0cnVjdDoKKyAgICAgICAgcmV0dXJuIG1fdW5saW5rZWRDb2RlQmxv
Y2tGb3JDb25zdHJ1Y3QuZ2V0KCk7CisgICAgfQorfQorCiBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJs
b2NrKiBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6dW5saW5rZWRDb2RlQmxvY2tGb3IoCiAg
ICAgVk0mIHZtLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIENvZGVTcGVjaWFsaXphdGlvbktp
bmQgc3BlY2lhbGl6YXRpb25LaW5kLCAKICAgICBEZWJ1Z2dlck1vZGUgZGVidWdnZXJNb2RlLCBQ
YXJzZXJFcnJvciYgZXJyb3IsIFNvdXJjZVBhcnNlTW9kZSBwYXJzZU1vZGUpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFi
bGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhl
Y3V0YWJsZS5oCmluZGV4IDY1MjZjZDkwY2JiYWE2OWUyNmNjMGExYzBhYzc3YjY4YzE5NWZiNTYu
LmQ2MzdkNjhhZjVhZDYzMTU1OGVhOTNiM2I4NmI5ZGEwNGNiODMxNzUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhl
Y3V0YWJsZS5oCkBAIC0xMDQsNiArMTA0LDggQEAgcHVibGljOgogICAgIHVuc2lnbmVkIHR5cGVQ
cm9maWxpbmdFbmRPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX3R5cGVQcm9maWxpbmdFbmRPZmZz
ZXQ7IH0KICAgICB2b2lkIHNldEludmFsaWRUeXBlUHJvZmlsaW5nT2Zmc2V0cygpOwogCisgICAg
VW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayogdW5saW5rZWRDb2RlQmxvY2tGb3IoQ29kZVNwZWNp
YWxpemF0aW9uS2luZCk7CisKICAgICBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKiB1bmxpbmtl
ZENvZGVCbG9ja0ZvcigKICAgICAgICAgVk0mLCBjb25zdCBTb3VyY2VDb2RlJiwgQ29kZVNwZWNp
YWxpemF0aW9uS2luZCwgRGVidWdnZXJNb2RlLAogICAgICAgICBQYXJzZXJFcnJvciYsIFNvdXJj
ZVBhcnNlTW9kZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1Nv
dXJjZUNvZGVLZXkuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU291cmNlQ29kZUtl
eS5oCmluZGV4IGNjM2FiZTIxZmFmNTcxNGJmOTk4MDFkZmI5ZWVkNDI4MzQ4MWYxODkuLmJjMDJm
MTI5YWJmMTg1YmU3NTU4ZmJkNjM1NGQ1OTNmODZjOGJiNzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9wYXJzZXIvU291cmNlQ29kZUtleS5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9wYXJzZXIvU291cmNlQ29kZUtleS5oCkBAIC0xMDAsNiArMTAwLDggQEAgcHVibGlj
OgogCiAgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0IHsgcmV0dXJuIG1faGFzaDsgfQogCisgICAg
Y29uc3QgVW5saW5rZWRTb3VyY2VDb2RlJiBzb3VyY2UoKSBjb25zdCB7IHJldHVybiBtX3NvdXJj
ZUNvZGU7IH0KKwogICAgIHNpemVfdCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZUNv
ZGUubGVuZ3RoKCk7IH0KIAogICAgIGJvb2wgaXNOdWxsKCkgY29uc3QgeyByZXR1cm4gbV9zb3Vy
Y2VDb2RlLmlzTnVsbCgpOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFy
c2VyL1NvdXJjZVByb3ZpZGVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1NvdXJj
ZVByb3ZpZGVyLmgKaW5kZXggMDlhZDE2ODM0YjBhZmI3YmU5ZjMxNGFmYzJmMjUwYWQ4MmVkYjVl
NS4uN2RiY2NlZTc2MTYxNTBiNzUwNTJlOTJlMTc5ZjgxNWI3NTA5OTBiYSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Tb3VyY2VQcm92aWRlci5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU291cmNlUHJvdmlkZXIuaApAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDksIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTkgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC00Miw2ICs0Miw0MyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgV2ViQXNzZW1ibHksCiAg
ICAgfTsKIAorICAgIGNsYXNzIENhY2hlZEJ5dGVjb2RlIHsKKyAgICBwdWJsaWM6CisgICAgICAg
IENhY2hlZEJ5dGVjb2RlKCkKKyAgICAgICAgICAgIDogQ2FjaGVkQnl0ZWNvZGUobnVsbHB0ciwg
MCkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgQ2FjaGVkQnl0ZWNvZGUoY29uc3Qg
dm9pZCogZGF0YSwgc2l6ZV90IHNpemUpCisgICAgICAgICAgICA6IG1fb3duZWQoZmFsc2UpCisg
ICAgICAgICAgICAsIG1fc2l6ZShzaXplKQorICAgICAgICAgICAgLCBtX2RhdGEoZGF0YSkKKyAg
ICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgQ2FjaGVkQnl0ZWNvZGUoTWFsbG9jUHRyPHVp
bnQ4X3Q+JiYgZGF0YSwgc2l6ZV90IHNpemUpCisgICAgICAgICAgICA6IG1fb3duZWQodHJ1ZSkK
KyAgICAgICAgICAgICwgbV9zaXplKHNpemUpCisgICAgICAgICAgICAsIG1fZGF0YShkYXRhLmxl
YWtQdHIoKSkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgY29uc3Qgdm9pZCogZGF0
YSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YTsgfQorICAgICAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fc2l6ZTsgfQorCisgICAgICAgIH5DYWNoZWRCeXRlY29kZSgpCisgICAgICAg
IHsKKyAgICAgICAgICAgIGlmIChtX2RhdGEgJiYgbV9vd25lZCkKKyAgICAgICAgICAgICAgICBm
YXN0RnJlZShjb25zdF9jYXN0PHZvaWQqPihtX2RhdGEpKTsKKyAgICAgICAgfQorCisgICAgcHJp
dmF0ZToKKyAgICAgICAgYm9vbCBtX293bmVkOworICAgICAgICBzaXplX3QgbV9zaXplOworICAg
ICAgICBjb25zdCB2b2lkKiBtX2RhdGE7CisgICAgfTsKKworCiAgICAgY2xhc3MgU291cmNlUHJv
dmlkZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxTb3VyY2VQcm92aWRlcj4gewogICAgIHB1YmxpYzoK
ICAgICAgICAgc3RhdGljIGNvbnN0IGludHB0cl90IG51bGxJRCA9IDE7CkBAIC01Miw2ICs4OSw4
IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHZpcnR1YWwgdW5zaWduZWQgaGFzaCgpIGNv
bnN0ID0gMDsKICAgICAgICAgdmlydHVhbCBTdHJpbmdWaWV3IHNvdXJjZSgpIGNvbnN0ID0gMDsK
KyAgICAgICAgdmlydHVhbCBjb25zdCBDYWNoZWRCeXRlY29kZSogY2FjaGVkQnl0ZWNvZGUoKSBj
b25zdCB7IHJldHVybiBudWxscHRyOyB9CisKICAgICAgICAgU3RyaW5nVmlldyBnZXRSYW5nZShp
bnQgc3RhcnQsIGludCBlbmQpIGNvbnN0CiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBz
b3VyY2UoKS5zdWJzdHJpbmcoc3RhcnQsIGVuZCAtIHN0YXJ0KTsKQEAgLTEwNCwxNSArMTQzLDM4
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgcmV0dXJuIG1fc291cmNlLmdldCgpOwog
ICAgICAgICB9CiAKLSAgICBwcml2YXRlOgorICAgIHByb3RlY3RlZDoKICAgICAgICAgU3RyaW5n
U291cmNlUHJvdmlkZXIoY29uc3QgU3RyaW5nJiBzb3VyY2UsIGNvbnN0IFNvdXJjZU9yaWdpbiYg
c291cmNlT3JpZ2luLCBVUkwmJiB1cmwsIGNvbnN0IFRleHRQb3NpdGlvbiYgc3RhcnRQb3NpdGlv
biwgU291cmNlUHJvdmlkZXJTb3VyY2VUeXBlIHNvdXJjZVR5cGUpCiAgICAgICAgICAgICA6IFNv
dXJjZVByb3ZpZGVyKHNvdXJjZU9yaWdpbiwgV1RGTW92ZSh1cmwpLCBzdGFydFBvc2l0aW9uLCBz
b3VyY2VUeXBlKQogICAgICAgICAgICAgLCBtX3NvdXJjZShzb3VyY2UuaXNOdWxsKCkgPyAqU3Ry
aW5nSW1wbDo6ZW1wdHkoKSA6ICpzb3VyY2UuaW1wbCgpKQogICAgICAgICB7CiAgICAgICAgIH0K
IAorICAgIHByaXZhdGU6CiAgICAgICAgIFJlZjxTdHJpbmdJbXBsPiBtX3NvdXJjZTsKICAgICB9
OworCisgICAgY2xhc3MgQ2FjaGVkQnl0ZWNvZGVTb3VyY2VQcm92aWRlciA6IHB1YmxpYyBTdHJp
bmdTb3VyY2VQcm92aWRlciB7CisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgUmVmPENhY2hl
ZEJ5dGVjb2RlU291cmNlUHJvdmlkZXI+IGNyZWF0ZShjb25zdCBTdHJpbmcmIHNvdXJjZSwgY29u
c3QgQ2FjaGVkQnl0ZWNvZGUqIGNhY2hlZEJ5dGVjb2RlLCBjb25zdCBTb3VyY2VPcmlnaW4mIHNv
dXJjZU9yaWdpbiwgVVJMJiYgdXJsLCBjb25zdCBUZXh0UG9zaXRpb24mIHN0YXJ0UG9zaXRpb24g
PSBUZXh0UG9zaXRpb24oKSwgU291cmNlUHJvdmlkZXJTb3VyY2VUeXBlIHNvdXJjZVR5cGUgPSBT
b3VyY2VQcm92aWRlclNvdXJjZVR5cGU6OlByb2dyYW0pCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IENhY2hlZEJ5dGVjb2RlU291cmNlUHJvdmlkZXIoc291cmNl
LCBjYWNoZWRCeXRlY29kZSwgc291cmNlT3JpZ2luLCBXVEZNb3ZlKHVybCksIHN0YXJ0UG9zaXRp
b24sIHNvdXJjZVR5cGUpKTsKKyAgICAgICAgfQorCisgICAgICAgIGNvbnN0IENhY2hlZEJ5dGVj
b2RlKiBjYWNoZWRCeXRlY29kZSgpIGNvbnN0IG92ZXJyaWRlCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiBtX2NhY2hlZEJ5dGVjb2RlOworICAgICAgICB9CisKKyAgICBwcml2YXRlOgor
ICAgICAgICBDYWNoZWRCeXRlY29kZVNvdXJjZVByb3ZpZGVyKGNvbnN0IFN0cmluZyYgc291cmNl
LCBjb25zdCBDYWNoZWRCeXRlY29kZSogY2FjaGVkQnl0ZWNvZGUsIGNvbnN0IFNvdXJjZU9yaWdp
biYgc291cmNlT3JpZ2luLCBVUkwmJiB1cmwsIGNvbnN0IFRleHRQb3NpdGlvbiYgc3RhcnRQb3Np
dGlvbiwgU291cmNlUHJvdmlkZXJTb3VyY2VUeXBlIHNvdXJjZVR5cGUpCisgICAgICAgICAgICA6
IFN0cmluZ1NvdXJjZVByb3ZpZGVyKHNvdXJjZSwgc291cmNlT3JpZ2luLCBXVEZNb3ZlKHVybCks
IHN0YXJ0UG9zaXRpb24sIHNvdXJjZVR5cGUpCisgICAgICAgICAgICAsIG1fY2FjaGVkQnl0ZWNv
ZGUoY2FjaGVkQnl0ZWNvZGUpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIGNvbnN0
IENhY2hlZEJ5dGVjb2RlKiBtX2NhY2hlZEJ5dGVjb2RlOworICAgIH07CiAgICAgCiAjaWYgRU5B
QkxFKFdFQkFTU0VNQkxZKQogICAgIGNsYXNzIFdlYkFzc2VtYmx5U291cmNlUHJvdmlkZXIgOiBw
dWJsaWMgU291cmNlUHJvdmlkZXIgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3BhcnNlci9VbmxpbmtlZFNvdXJjZUNvZGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJz
ZXIvVW5saW5rZWRTb3VyY2VDb2RlLmgKaW5kZXggYWFhYWQzZjQxMmY4ZjNmYTViYzFmMmZlYmZi
MTRjYzc0ZGUyMjQyNC4uZmFlMGUzNTFlYWJlNTBmYjhhNGM1MzkyODlmMzViODYyZDE3ZGI3NyAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9VbmxpbmtlZFNvdXJjZUNv
ZGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1VubGlua2VkU291cmNlQ29k
ZS5oCkBAIC04MSw2ICs4MSwxMSBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBib29sIGlz
SGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV9wcm92aWRlci5pc0hhc2hU
YWJsZURlbGV0ZWRWYWx1ZSgpOyB9CiAKKyAgICAgICAgY29uc3QgU291cmNlUHJvdmlkZXImIHBy
b3ZpZGVyKCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICptX3Byb3ZpZGVy
OworICAgICAgICB9CisKICAgICAgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CiAgICAgICAgIHsK
ICAgICAgICAgICAgIEFTU0VSVChtX3Byb3ZpZGVyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0NvZGVDYWNoZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Db2RlQ2FjaGUuY3BwCmluZGV4IGMzMmQyMDRiNmNkODk2ODE4MWNiMGQxZGYwZWFi
ODNlYzExODE5ZDQuLjg5NWE4NDBiOTE1NmNlYjkwMzk3MDUyY2EwY2Q3MTE2ZDMzODkxNTYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvZGVDYWNoZS5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29kZUNhY2hlLmNwcApAQCAtMTYyLDQg
KzE2Miw3MiBAQCB2b2lkIENvZGVDYWNoZTo6d3JpdGUoVk0mIHZtKQogICAgICAgICB3cml0ZUNv
ZGVCbG9jayh2bSwgaXQua2V5LCBpdC52YWx1ZSk7CiB9CiAKK3ZvaWQgZ2VuZXJhdGVVbmxpbmtl
ZENvZGVCbG9ja0ZvckZ1bmN0aW9ucyhWTSYgdm0sIFVubGlua2VkQ29kZUJsb2NrKiB1bmxpbmtl
ZENvZGVCbG9jaywgY29uc3QgU291cmNlQ29kZSYgcGFyZW50U291cmNlLCBEZWJ1Z2dlck1vZGUg
ZGVidWdnZXJNb2RlLCBQYXJzZXJFcnJvciYgZXJyb3IpCit7CisgICAgYXV0byBnZW5lcmF0ZSA9
IFsmXShVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogdW5saW5rZWRFeGVjdXRhYmxlLCBDb2Rl
U3BlY2lhbGl6YXRpb25LaW5kIGNvbnN0cnVjdG9yS2luZCkgeworICAgICAgICBpZiAoY29uc3Ry
dWN0b3JLaW5kID09IENvZGVGb3JDb25zdHJ1Y3QgJiYgU291cmNlUGFyc2VNb2RlU2V0KFNvdXJj
ZVBhcnNlTW9kZTo6QXN5bmNBcnJvd0Z1bmN0aW9uTW9kZSwgU291cmNlUGFyc2VNb2RlOjpBc3lu
Y01ldGhvZE1vZGUsIFNvdXJjZVBhcnNlTW9kZTo6QXN5bmNGdW5jdGlvbk1vZGUpLmNvbnRhaW5z
KHVubGlua2VkRXhlY3V0YWJsZS0+cGFyc2VNb2RlKCkpKQorICAgICAgICAgICAgcmV0dXJuOwor
CisgICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IHVubGlua2VkRXhlY3V0
YWJsZS0+bGluayh2bSwgcGFyZW50U291cmNlKTsKKyAgICAgICAgY29uc3QgU291cmNlQ29kZSYg
c291cmNlID0gZXhlY3V0YWJsZS0+c291cmNlKCk7CisgICAgICAgIFVubGlua2VkRnVuY3Rpb25D
b2RlQmxvY2sqIHVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2sgPSB1bmxpbmtlZEV4ZWN1dGFibGUt
PnVubGlua2VkQ29kZUJsb2NrRm9yKHZtLCBzb3VyY2UsIGNvbnN0cnVjdG9yS2luZCwgZGVidWdn
ZXJNb2RlLCBlcnJvciwgdW5saW5rZWRFeGVjdXRhYmxlLT5wYXJzZU1vZGUoKSk7CisgICAgICAg
IGlmICh1bmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKQorICAgICAgICAgICAgZ2VuZXJhdGVVbmxp
bmtlZENvZGVCbG9ja0ZvckZ1bmN0aW9ucyh2bSwgdW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jaywg
c291cmNlLCBkZWJ1Z2dlck1vZGUsIGVycm9yKTsKKyAgICB9OworCisgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHVubGlua2VkQ29kZUJsb2NrLT5udW1iZXJPZkZ1bmN0aW9uRGVjbHMoKTsg
aSsrKSB7CisgICAgICAgIGdlbmVyYXRlKHVubGlua2VkQ29kZUJsb2NrLT5mdW5jdGlvbkRlY2wo
aSksIENvZGVGb3JDYWxsKTsKKyAgICAgICAgZ2VuZXJhdGUodW5saW5rZWRDb2RlQmxvY2stPmZ1
bmN0aW9uRGVjbChpKSwgQ29kZUZvckNvbnN0cnVjdCk7CisgICAgfQorICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCB1bmxpbmtlZENvZGVCbG9jay0+bnVtYmVyT2ZGdW5jdGlvbkV4cHJzKCk7
IGkrKykgeworICAgICAgICBnZW5lcmF0ZSh1bmxpbmtlZENvZGVCbG9jay0+ZnVuY3Rpb25FeHBy
KGkpLCBDb2RlRm9yQ2FsbCk7CisgICAgICAgIGdlbmVyYXRlKHVubGlua2VkQ29kZUJsb2NrLT5m
dW5jdGlvbkV4cHIoaSksIENvZGVGb3JDb25zdHJ1Y3QpOworICAgIH0KK30KKwordm9pZCB3cml0
ZUNvZGVCbG9jayhWTSYgdm0sIGNvbnN0IFNvdXJjZUNvZGVLZXkmIGtleSwgY29uc3QgU291cmNl
Q29kZVZhbHVlJiB2YWx1ZSkKK3sKKyNpZiBPUyhEQVJXSU4pCisgICAgY29uc3QgY2hhciogY2Fj
aGVQYXRoID0gT3B0aW9uczo6ZGlza0NhY2hlUGF0aCgpOworICAgIGlmIChMSUtFTFkoIWNhY2hl
UGF0aCkpCisgICAgICAgIHJldHVybjsKKworICAgIFVubGlua2VkQ29kZUJsb2NrKiBjb2RlQmxv
Y2sgPSBqc0R5bmFtaWNDYXN0PFVubGlua2VkQ29kZUJsb2NrKj4odm0sIHZhbHVlLmNlbGwuZ2V0
KCkpOworICAgIGlmICghY29kZUJsb2NrKQorICAgICAgICByZXR1cm47CisKKyAgICB1bnNpZ25l
ZCBoYXNoID0ga2V5Lmhhc2goKTsKKyAgICBjaGFyIGZpbGVuYW1lWzUxMl07CisgICAgaW50IGNv
dW50ID0gc25wcmludGYoZmlsZW5hbWUsIDUxMiwgIiVzLyV1LmNhY2hlIiwgY2FjaGVQYXRoLCBo
YXNoKTsKKyAgICBpZiAoY291bnQgPCAwIHx8IGNvdW50ID4gNTEyKQorICAgICAgICByZXR1cm47
CisKKyAgICBzdGQ6OnBhaXI8TWFsbG9jUHRyPHVpbnQ4X3Q+LCBzaXplX3Q+IHJlc3VsdCA9IGVu
Y29kZUNvZGVCbG9jayh2bSwga2V5LCBjb2RlQmxvY2spOworCisgICAgaW50IGZkID0gb3Blbihm
aWxlbmFtZSwgT19DUkVBVCB8IE9fV1JPTkxZLCAwNjY2KTsKKyAgICBpZiAoZmQgPT0gLTEpCisg
ICAgICAgIHJldHVybjsKKyAgICBpbnQgcmMgPSBmbG9jayhmZCwgTE9DS19FWCB8IExPQ0tfTkIp
OworICAgIGlmICghcmMpCisgICAgICAgIDo6d3JpdGUoZmQsIHJlc3VsdC5maXJzdC5nZXQoKSwg
cmVzdWx0LnNlY29uZCk7CisgICAgY2xvc2UoZmQpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0o
dm0pOworICAgIFVOVVNFRF9QQVJBTShrZXkpOworICAgIFVOVVNFRF9QQVJBTSh2YWx1ZSk7Cisj
ZW5kaWYKK30KKworQ2FjaGVkQnl0ZWNvZGUgc2VyaWFsaXplQnl0ZWNvZGUoVk0mIHZtLCBVbmxp
bmtlZENvZGVCbG9jayogY29kZUJsb2NrLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIFNvdXJj
ZUNvZGVUeXBlIGNvZGVUeXBlLCBKU1BhcnNlclN0cmljdE1vZGUgc3RyaWN0TW9kZSwgSlNQYXJz
ZXJTY3JpcHRNb2RlIHNjcmlwdE1vZGUsIERlYnVnZ2VyTW9kZSBkZWJ1Z2dlck1vZGUpCit7Cisg
ICAgU291cmNlQ29kZUtleSBrZXkoCisgICAgICAgIHNvdXJjZSwgU3RyaW5nKCksIGNvZGVUeXBl
LCBzdHJpY3RNb2RlLCBzY3JpcHRNb2RlLAorICAgICAgICBEZXJpdmVkQ29udGV4dFR5cGU6Ok5v
bmUsIEV2YWxDb250ZXh0VHlwZTo6Tm9uZSwgZmFsc2UsIGRlYnVnZ2VyTW9kZSwKKyAgICAgICAg
dm0udHlwZVByb2ZpbGVyKCkgPyBUeXBlUHJvZmlsZXJFbmFibGVkOjpZZXMgOiBUeXBlUHJvZmls
ZXJFbmFibGVkOjpObywKKyAgICAgICAgdm0uY29udHJvbEZsb3dQcm9maWxlcigpID8gQ29udHJv
bEZsb3dQcm9maWxlckVuYWJsZWQ6OlllcyA6IENvbnRyb2xGbG93UHJvZmlsZXJFbmFibGVkOjpO
bywKKyAgICAgICAgV1RGOjpudWxsb3B0KTsKKyAgICBzdGQ6OnBhaXI8TWFsbG9jUHRyPHVpbnQ4
X3Q+LCBzaXplX3Q+IHJlc3VsdCA9IGVuY29kZUNvZGVCbG9jayh2bSwga2V5LCBjb2RlQmxvY2sp
OworICAgIHJldHVybiBDYWNoZWRCeXRlY29kZSB7IFdURk1vdmUocmVzdWx0LmZpcnN0KSwgcmVz
dWx0LnNlY29uZCB9OworfQorCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Db2RlQ2FjaGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvZGVD
YWNoZS5oCmluZGV4IDk5Mzk1ZjJjZDI4NDExMzlhMDM1YzhiMTU4OWJiOTM5YzY5YzU3MDIuLmY0
NTljMDI3MTc1NmZkY2RkYmE5MGNjYjM0ZWVkZWNmM2M4ZWFmZDYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvZGVDYWNoZS5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0NvZGVDYWNoZS5oCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSAi
U3Ryb25nSW5saW5lcy5oIgogI2luY2x1ZGUgIlVubGlua2VkQ29kZUJsb2NrLmgiCiAjaW5jbHVk
ZSAiVW5saW5rZWRFdmFsQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiVW5saW5rZWRGdW5jdGlvbkNv
ZGVCbG9jay5oIgogI2luY2x1ZGUgIlVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jay5oIgog
I2luY2x1ZGUgIlVubGlua2VkUHJvZ3JhbUNvZGVCbG9jay5oIgogI2luY2x1ZGUgPHN5cy9zdGF0
Lmg+CkBAIC02MCw2ICs2MSwxOSBAQCBjbGFzcyBVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2s7CiBj
bGFzcyBWTTsKIGNsYXNzIFZhcmlhYmxlRW52aXJvbm1lbnQ7CiAKK25hbWVzcGFjZSBDb2RlQ2Fj
aGVJbnRlcm5hbCB7CisjaWZkZWYgTkRFQlVHCitzdGF0aWMgY29uc3QgYm9vbCB2ZXJib3NlID0g
ZmFsc2U7CisjZWxzZQorc3RhdGljIGNvbnN0IGJvb2wgdmVyYm9zZSA9IHRydWU7CisjZW5kaWYK
K30gLy8gbmFtZXNwYWNlIENvZGVDYWNoZUludGVybmFsCisKKyNkZWZpbmUgVkVSQk9TRV9MT0co
Li4uKSBkbyB7IFwKKyAgICBpZiAoQ29kZUNhY2hlSW50ZXJuYWw6OnZlcmJvc2UpIFwKKyAgICAg
ICAgZGF0YUxvZ0xuKCIoSlNDOjpDb2RlQ2FjaGUpICIsIF9fVkFfQVJHU19fKTsgXAorfSB3aGls
ZSAoZmFsc2UpCisKIHN0cnVjdCBTb3VyY2VDb2RlVmFsdWUgewogICAgIFNvdXJjZUNvZGVWYWx1
ZSgpCiAgICAgewpAQCAtOTcsNiArMTExLDE2IEBAIHB1YmxpYzoKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBVbmxpbmtlZENvZGVCbG9ja1R5cGU+CiAgICAgVW5saW5rZWRDb2RlQmxvY2tUeXBlKiBm
ZXRjaEZyb21EaXNrSW1wbChWTSYgdm0sIGNvbnN0IFNvdXJjZUNvZGVLZXkmIGtleSkKICAgICB7
CisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0IGF1dG8qIGNhY2hlZEJ5dGVjb2RlID0ga2V5
LnNvdXJjZSgpLnByb3ZpZGVyKCkuY2FjaGVkQnl0ZWNvZGUoKTsKKyAgICAgICAgICAgIGlmIChj
YWNoZWRCeXRlY29kZSAmJiBjYWNoZWRCeXRlY29kZS0+c2l6ZSgpKSB7CisgICAgICAgICAgICAg
ICAgVkVSQk9TRV9MT0coIkZvdW5kIGNhY2hlZCBDb2RlQmxvY2sgaW4gdGhlIFNvdXJjZVByb3Zp
ZGVyIik7CisgICAgICAgICAgICAgICAgVW5saW5rZWRDb2RlQmxvY2tUeXBlKiB1bmxpbmtlZENv
ZGVCbG9jayA9IGRlY29kZUNvZGVCbG9jazxVbmxpbmtlZENvZGVCbG9ja1R5cGU+KHZtLCBrZXks
IGNhY2hlZEJ5dGVjb2RlLT5kYXRhKCksIGNhY2hlZEJ5dGVjb2RlLT5zaXplKCkpOworICAgICAg
ICAgICAgICAgIGlmICh1bmxpbmtlZENvZGVCbG9jaykKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHVubGlua2VkQ29kZUJsb2NrOworICAgICAgICAgICAgfQorICAgICAgICB9CisKICNpZiBP
UyhEQVJXSU4pCiAgICAgICAgIGNvbnN0IGNoYXIqIGNhY2hlUGF0aCA9IE9wdGlvbnM6OmRpc2tD
YWNoZVBhdGgoKTsKICAgICAgICAgaWYgKCFjYWNoZVBhdGgpCkBAIC0xMjEsMTUgKzE0NSwyMCBA
QCBwdWJsaWM6CiAgICAgICAgIHN0cnVjdCBzdGF0IHNiOwogICAgICAgICBpbnQgcmVzID0gZnN0
YXQoZmQsICZzYik7CiAgICAgICAgIHNpemVfdCBzaXplID0gc3RhdGljX2Nhc3Q8c2l6ZV90Pihz
Yi5zdF9zaXplKTsKLSAgICAgICAgaWYgKHJlcyB8fCAhc2l6ZSkKKyAgICAgICAgaWYgKHJlcyB8
fCAhc2l6ZSkgeworICAgICAgICAgICAgY2xvc2UoZmQpOwogICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisgICAgICAgIH0KIAotICAgICAgICBjb25zdCB2b2lkKiBidWZmZXIgPSBtbWFwKG51
bGxwdHIsIHNpemUsIFBST1RfUkVBRCwgTUFQX1BSSVZBVEUsIGZkLCAwKTsKKyAgICAgICAgdm9p
ZCogYnVmZmVyID0gbW1hcChudWxscHRyLCBzaXplLCBQUk9UX1JFQUQsIE1BUF9QUklWQVRFLCBm
ZCwgMCk7CiAgICAgICAgIFVubGlua2VkQ29kZUJsb2NrVHlwZSogdW5saW5rZWRDb2RlQmxvY2sg
PSBkZWNvZGVDb2RlQmxvY2s8VW5saW5rZWRDb2RlQmxvY2tUeXBlPih2bSwga2V5LCBidWZmZXIs
IHNpemUpOworICAgICAgICBtdW5tYXAoYnVmZmVyLCBzaXplKTsKIAogICAgICAgICBpZiAoIXVu
bGlua2VkQ29kZUJsb2NrKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKKworICAgICAg
ICBWRVJCT1NFX0xPRygiRm91bmQgY2FjaGVkIENvZGVCbG9jayBvbiBkaXNrIik7CiAgICAgICAg
IGFkZENhY2hlKGtleSwgU291cmNlQ29kZVZhbHVlKHZtLCB1bmxpbmtlZENvZGVCbG9jaywgbV9h
Z2UpKTsKICAgICAgICAgcmV0dXJuIHVubGlua2VkQ29kZUJsb2NrOwogI2Vsc2UKQEAgLTE1OCw2
ICsxODcsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBwcnVuZSgpOwogCisgICAgICAgIFZF
UkJPU0VfTE9HKCJUcnlpbmcgdG8gZmluZCBjYWNoZWQgQ29kZUJsb2NrIGZvciAiLCBrZXkuc291
cmNlKCkucHJvdmlkZXIoKS51cmwoKS5zdHJpbmcoKSk7CiAgICAgICAgIGl0ZXJhdG9yIGZpbmRS
ZXN1bHQgPSBtX21hcC5maW5kKGtleSk7CiAgICAgICAgIGlmIChmaW5kUmVzdWx0ID09IG1fbWFw
LmVuZCgpKQogICAgICAgICAgICAgcmV0dXJuIGZldGNoRnJvbURpc2s8VW5saW5rZWRDb2RlQmxv
Y2tUeXBlPih2bSwga2V5KTsKQEAgLTE4MCw2ICsyMTAsNyBAQCBwdWJsaWM6CiAgICAgICAgIGZp
bmRSZXN1bHQtPnZhbHVlLmFnZSA9IG1fYWdlOwogICAgICAgICBtX2FnZSArPSBrZXkubGVuZ3Ro
KCk7CiAKKyAgICAgICAgVkVSQk9TRV9MT0coIkZvdW5kIGNhY2hlZCBDb2RlQmxvY2sgaW4gbWVt
b3J5Iik7CiAgICAgICAgIHJldHVybiBqc0Nhc3Q8VW5saW5rZWRDb2RlQmxvY2tUeXBlKj4oZmlu
ZFJlc3VsdC0+dmFsdWUuY2VsbC5nZXQoKSk7CiAgICAgfQogCkBAIC0zMjIsMzYgKzM1MywyMCBA
QCBVbmxpbmtlZENvZGVCbG9ja1R5cGUqIGdlbmVyYXRlVW5saW5rZWRDb2RlQmxvY2soVk0mIHZt
LCBFeGVjdXRhYmxlVHlwZSogZXhlY3V0YQogICAgIHJldHVybiB1bmxpbmtlZENvZGVCbG9jazsK
IH0KIAotQUxXQVlTX0lOTElORSBzdGF0aWMgdm9pZCB3cml0ZUNvZGVCbG9jayhWTSYgdm0sIGNv
bnN0IFNvdXJjZUNvZGVLZXkmIGtleSwgY29uc3QgU291cmNlQ29kZVZhbHVlJiB2YWx1ZSkKK3Zv
aWQgZ2VuZXJhdGVVbmxpbmtlZENvZGVCbG9ja0ZvckZ1bmN0aW9ucyhWTSYsIFVubGlua2VkQ29k
ZUJsb2NrKiwgY29uc3QgU291cmNlQ29kZSYsIERlYnVnZ2VyTW9kZSwgUGFyc2VyRXJyb3ImKTsK
KwordGVtcGxhdGUgPGNsYXNzIFVubGlua2VkQ29kZUJsb2NrVHlwZSwgY2xhc3MgRXhlY3V0YWJs
ZVR5cGU+CitVbmxpbmtlZENvZGVCbG9ja1R5cGUqIHJlY3Vyc2l2ZWx5R2VuZXJhdGVVbmxpbmtl
ZENvZGVCbG9jayhWTSYgdm0sIEV4ZWN1dGFibGVUeXBlKiBleGVjdXRhYmxlLCBjb25zdCBTb3Vy
Y2VDb2RlJiBzb3VyY2UsIEpTUGFyc2VyU3RyaWN0TW9kZSBzdHJpY3RNb2RlLCBKU1BhcnNlclNj
cmlwdE1vZGUgc2NyaXB0TW9kZSwgRGVidWdnZXJNb2RlIGRlYnVnZ2VyTW9kZSwgUGFyc2VyRXJy
b3ImIGVycm9yLCBFdmFsQ29udGV4dFR5cGUgZXZhbENvbnRleHRUeXBlLCBjb25zdCBWYXJpYWJs
ZUVudmlyb25tZW50KiB2YXJpYWJsZXNVbmRlclREWikKIHsKLSNpZiBPUyhEQVJXSU4pCi0gICAg
Y29uc3QgY2hhciogY2FjaGVQYXRoID0gT3B0aW9uczo6ZGlza0NhY2hlUGF0aCgpOwotICAgIGlm
IChMSUtFTFkoIWNhY2hlUGF0aCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFVubGlua2VkQ29k
ZUJsb2NrKiBjb2RlQmxvY2sgPSBqc0R5bmFtaWNDYXN0PFVubGlua2VkQ29kZUJsb2NrKj4odm0s
IHZhbHVlLmNlbGwuZ2V0KCkpOwotICAgIGlmICghY29kZUJsb2NrKQotICAgICAgICByZXR1cm47
Ci0KLSAgICB1bnNpZ25lZCBoYXNoID0ga2V5Lmhhc2goKTsKLSAgICBjaGFyIGZpbGVuYW1lWzUx
Ml07Ci0gICAgaW50IGNvdW50ID0gc25wcmludGYoZmlsZW5hbWUsIDUxMiwgIiVzLyV1LmNhY2hl
IiwgY2FjaGVQYXRoLCBoYXNoKTsKLSAgICBpZiAoY291bnQgPCAwIHx8IGNvdW50ID4gNTEyKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBzdGQ6OnBhaXI8TWFsbG9jUHRyPHVpbnQ4X3Q+LCBzaXpl
X3Q+IHJlc3VsdCA9IGVuY29kZUNvZGVCbG9jayh2bSwga2V5LCBjb2RlQmxvY2spOwotCi0gICAg
aW50IGZkID0gb3BlbihmaWxlbmFtZSwgT19DUkVBVCB8IE9fV1JPTkxZLCAwNjY2KTsKLSAgICBp
bnQgcmMgPSBmbG9jayhmZCwgTE9DS19FWCB8IExPQ0tfTkIpOwotICAgIGlmICghcmMpCi0gICAg
ICAgIDo6d3JpdGUoZmQsIHJlc3VsdC5maXJzdC5nZXQoKSwgcmVzdWx0LnNlY29uZCk7Ci0gICAg
Y2xvc2UoZmQpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0odm0pOwotICAgIFVOVVNFRF9QQVJB
TShrZXkpOwotICAgIFVOVVNFRF9QQVJBTSh2YWx1ZSk7Ci0jZW5kaWYKKyAgICBVbmxpbmtlZENv
ZGVCbG9ja1R5cGUqIHVubGlua2VkQ29kZUJsb2NrID0gZ2VuZXJhdGVVbmxpbmtlZENvZGVCbG9j
azxVbmxpbmtlZENvZGVCbG9ja1R5cGUsIEV4ZWN1dGFibGVUeXBlPih2bSwgZXhlY3V0YWJsZSwg
c291cmNlLCBzdHJpY3RNb2RlLCBzY3JpcHRNb2RlLCBkZWJ1Z2dlck1vZGUsIGVycm9yLCBldmFs
Q29udGV4dFR5cGUsIHZhcmlhYmxlc1VuZGVyVERaKTsKKyAgICBpZiAoIXVubGlua2VkQ29kZUJs
b2NrKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGdlbmVyYXRlVW5saW5rZWRDb2Rl
QmxvY2tGb3JGdW5jdGlvbnModm0sIHVubGlua2VkQ29kZUJsb2NrLCBzb3VyY2UsIGRlYnVnZ2Vy
TW9kZSwgZXJyb3IpOworICAgIHJldHVybiB1bmxpbmtlZENvZGVCbG9jazsKIH0KIAordm9pZCB3
cml0ZUNvZGVCbG9jayhWTSYsIGNvbnN0IFNvdXJjZUNvZGVLZXkmLCBjb25zdCBTb3VyY2VDb2Rl
VmFsdWUmKTsKK0NhY2hlZEJ5dGVjb2RlIHNlcmlhbGl6ZUJ5dGVjb2RlKFZNJiwgVW5saW5rZWRD
b2RlQmxvY2sqLCBjb25zdCBTb3VyY2VDb2RlJiwgU291cmNlQ29kZVR5cGUsIEpTUGFyc2VyU3Ry
aWN0TW9kZSwgSlNQYXJzZXJTY3JpcHRNb2RlLCBEZWJ1Z2dlck1vZGUpOwogCiB9IC8vIG5hbWVz
cGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbXBs
ZXRpb24uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tcGxldGlvbi5jcHAK
aW5kZXggM2ZiNGFiOWQzYWEyZTM0YmJjZDlhZGZmYTczMDdlNzA3NmE0NjFhZi4uOWM0YTBlNGZj
OGYwN2Q0MWFhMzAxZDI3NzAzNjhlY2Y4MzVjODFmZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQ29tcGxldGlvbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQ29tcGxldGlvbi5jcHAKQEAgLTI1LDYgKzI1LDcgQEAKIAogI2luY2x1ZGUg
IkNhbGxGcmFtZS5oIgogI2luY2x1ZGUgIkNhdGNoU2NvcGUuaCIKKyNpbmNsdWRlICJDb2RlQ2Fj
aGUuaCIKICNpbmNsdWRlICJDb2RlUHJvZmlsaW5nLmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uLmgi
CiAjaW5jbHVkZSAiSWRlbnRpZmllcklubGluZXMuaCIKQEAgLTkwLDYgKzkxLDQ0IEBAIGJvb2wg
Y2hlY2tNb2R1bGVTeW50YXgoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTb3VyY2VDb2RlJiBzb3Vy
Y2UsIFBhcnNlckVycm9yJiBlCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK0NhY2hlZEJ5dGVjb2Rl
IGdlbmVyYXRlQnl0ZWNvZGUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTb3VyY2VDb2RlJiBzb3Vy
Y2UsIFBhcnNlckVycm9yJiBlcnJvcikKK3sKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAg
IEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKKyAgICBSRUxFQVNFX0FTU0VSVCh2bS5hdG9taWNTdHJp
bmdUYWJsZSgpID09IFRocmVhZDo6Y3VycmVudCgpLmF0b21pY1N0cmluZ1RhYmxlKCkpOworCisg
ICAgUHJvZ3JhbUV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBQcm9ncmFtRXhlY3V0YWJsZTo6Y3Jl
YXRlKGV4ZWMsIHNvdXJjZSk7CisgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHZt
LnZtRW50cnlHbG9iYWxPYmplY3QoZXhlYyk7CisKKyAgICBWYXJpYWJsZUVudmlyb25tZW50IHZh
cmlhYmxlc1VuZGVyVERaOworICAgIEpTUGFyc2VyU3RyaWN0TW9kZSBzdHJpY3RNb2RlID0gSlNQ
YXJzZXJTdHJpY3RNb2RlOjpOb3RTdHJpY3Q7CisgICAgSlNQYXJzZXJTY3JpcHRNb2RlIHNjcmlw
dE1vZGUgPSBKU1BhcnNlclNjcmlwdE1vZGU6OkNsYXNzaWM7CisgICAgRGVidWdnZXJNb2RlIGRl
YnVnZ2VyTW9kZSA9IGdsb2JhbE9iamVjdC0+aGFzSW50ZXJhY3RpdmVEZWJ1Z2dlcigpID8gRGVi
dWdnZXJPbiA6IERlYnVnZ2VyT2ZmOworICAgIEV2YWxDb250ZXh0VHlwZSBldmFsQ29udGV4dFR5
cGUgPSBFdmFsQ29udGV4dFR5cGU6Ok5vbmU7CisKKyAgICBVbmxpbmtlZENvZGVCbG9jayogdW5s
aW5rZWRDb2RlQmxvY2sgPSByZWN1cnNpdmVseUdlbmVyYXRlVW5saW5rZWRDb2RlQmxvY2s8VW5s
aW5rZWRQcm9ncmFtQ29kZUJsb2NrPih2bSwgZXhlY3V0YWJsZSwgc291cmNlLCBzdHJpY3RNb2Rl
LCBzY3JpcHRNb2RlLCBkZWJ1Z2dlck1vZGUsIGVycm9yLCBldmFsQ29udGV4dFR5cGUsICZ2YXJp
YWJsZXNVbmRlclREWik7CisgICAgcmV0dXJuIHNlcmlhbGl6ZUJ5dGVjb2RlKHZtLCB1bmxpbmtl
ZENvZGVCbG9jaywgc291cmNlLCBTb3VyY2VDb2RlVHlwZTo6UHJvZ3JhbVR5cGUsIHN0cmljdE1v
ZGUsIHNjcmlwdE1vZGUsIGRlYnVnZ2VyTW9kZSk7Cit9CisKK0NhY2hlZEJ5dGVjb2RlIGdlbmVy
YXRlTW9kdWxlQnl0ZWNvZGUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTb3VyY2VDb2RlJiBzb3Vy
Y2UsIFBhcnNlckVycm9yJiBlcnJvcikKK3sKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAg
IEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKKyAgICBSRUxFQVNFX0FTU0VSVCh2bS5hdG9taWNTdHJp
bmdUYWJsZSgpID09IFRocmVhZDo6Y3VycmVudCgpLmF0b21pY1N0cmluZ1RhYmxlKCkpOworCisg
ICAgTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBNb2R1bGVQcm9ncmFtRXhl
Y3V0YWJsZTo6Y3JlYXRlKGV4ZWMsIHNvdXJjZSk7CisgICAgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCA9IHZtLnZtRW50cnlHbG9iYWxPYmplY3QoZXhlYyk7CisKKyAgICBWYXJpYWJsZUVu
dmlyb25tZW50IHZhcmlhYmxlc1VuZGVyVERaOworICAgIEpTUGFyc2VyU3RyaWN0TW9kZSBzdHJp
Y3RNb2RlID0gSlNQYXJzZXJTdHJpY3RNb2RlOjpTdHJpY3Q7CisgICAgSlNQYXJzZXJTY3JpcHRN
b2RlIHNjcmlwdE1vZGUgPSBKU1BhcnNlclNjcmlwdE1vZGU6Ok1vZHVsZTsKKyAgICBEZWJ1Z2dl
ck1vZGUgZGVidWdnZXJNb2RlID0gZ2xvYmFsT2JqZWN0LT5oYXNJbnRlcmFjdGl2ZURlYnVnZ2Vy
KCkgPyBEZWJ1Z2dlck9uIDogRGVidWdnZXJPZmY7CisgICAgRXZhbENvbnRleHRUeXBlIGV2YWxD
b250ZXh0VHlwZSA9IEV2YWxDb250ZXh0VHlwZTo6Tm9uZTsKKworICAgIFVubGlua2VkQ29kZUJs
b2NrKiB1bmxpbmtlZENvZGVCbG9jayA9IHJlY3Vyc2l2ZWx5R2VuZXJhdGVVbmxpbmtlZENvZGVC
bG9jazxVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2s+KHZtLCBleGVjdXRhYmxlLCBzb3Vy
Y2UsIHN0cmljdE1vZGUsIHNjcmlwdE1vZGUsIGRlYnVnZ2VyTW9kZSwgZXJyb3IsIGV2YWxDb250
ZXh0VHlwZSwgJnZhcmlhYmxlc1VuZGVyVERaKTsKKyAgICByZXR1cm4gc2VyaWFsaXplQnl0ZWNv
ZGUodm0sIHVubGlua2VkQ29kZUJsb2NrLCBzb3VyY2UsIFNvdXJjZUNvZGVUeXBlOjpNb2R1bGVU
eXBlLCBzdHJpY3RNb2RlLCBzY3JpcHRNb2RlLCBkZWJ1Z2dlck1vZGUpOworfQorCiBKU1ZhbHVl
IGV2YWx1YXRlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBKU1Zh
bHVlIHRoaXNWYWx1ZSwgTmFrZWRQdHI8RXhjZXB0aW9uPiYgcmV0dXJuZWRFeGNlcHRpb24pCiB7
CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0NvbXBsZXRpb24uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0NvbXBsZXRpb24uaAppbmRleCA4MjdlNjFmM2M2MWQwY2I3YmJlNzVhNjEyNzcxMjRmYjBkYTcy
YWFlLi41Y2FjZDZkYTdlYjc1MjAzM2I1YzQ4MDZiZDhlODQ5ODZhZDBhNzAwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21wbGV0aW9uLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tcGxldGlvbi5oCkBAIC0yOCw2ICsyOCw3IEBACiAK
IG5hbWVzcGFjZSBKU0MgewogCitjbGFzcyBDYWNoZWRCeXRlY29kZTsKIGNsYXNzIEV4Y2VwdGlv
bjsKIGNsYXNzIEV4ZWNTdGF0ZTsKIGNsYXNzIEpTT2JqZWN0OwpAQCAtNDEsNiArNDIsOSBAQCBK
U19FWFBPUlRfUFJJVkFURSBib29sIGNoZWNrU3ludGF4KFZNJiwgY29uc3QgU291cmNlQ29kZSYs
IFBhcnNlckVycm9yJik7CiBKU19FWFBPUlRfUFJJVkFURSBib29sIGNoZWNrU3ludGF4KEV4ZWNT
dGF0ZSosIGNvbnN0IFNvdXJjZUNvZGUmLCBKU1ZhbHVlKiBleGNlcHRpb24gPSAwKTsKIEpTX0VY
UE9SVF9QUklWQVRFIGJvb2wgY2hlY2tNb2R1bGVTeW50YXgoRXhlY1N0YXRlKiwgY29uc3QgU291
cmNlQ29kZSYsIFBhcnNlckVycm9yJik7CiAKK0pTX0VYUE9SVF9QUklWQVRFIENhY2hlZEJ5dGVj
b2RlIGdlbmVyYXRlQnl0ZWNvZGUoRXhlY1N0YXRlKiwgY29uc3QgU291cmNlQ29kZSYsIFBhcnNl
ckVycm9yJik7CitKU19FWFBPUlRfUFJJVkFURSBDYWNoZWRCeXRlY29kZSBnZW5lcmF0ZU1vZHVs
ZUJ5dGVjb2RlKEV4ZWNTdGF0ZSosIGNvbnN0IFNvdXJjZUNvZGUmLCBQYXJzZXJFcnJvciYpOwor
CiBKU19FWFBPUlRfUFJJVkFURSBKU1ZhbHVlIGV2YWx1YXRlKEV4ZWNTdGF0ZSosIGNvbnN0IFNv
dXJjZUNvZGUmLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgTmFrZWRQdHI8RXhjZXB0aW9uPiYgcmV0dXJu
ZWRFeGNlcHRpb24pOwogaW5saW5lIEpTVmFsdWUgZXZhbHVhdGUoRXhlY1N0YXRlKiBleGVjLCBj
b25zdCBTb3VyY2VDb2RlJiBzb3VyY2VDb2RlLCBKU1ZhbHVlIHRoaXNWYWx1ZSA9IEpTVmFsdWUo
KSkKIHsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>359954</attachid>
            <date>2019-01-23 15:27:58 -0800</date>
            <delta_ts>2019-01-24 06:32:09 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-193401-20190124002742.patch</filename>
            <type>text/plain</type>
            <size>38674</size>
            <attacher name="Tadeu Zagallo">tzagallo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQwMzQzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBh
NTE0YzhmZGRkMzRmNWNhNGE3MjlmZDQyODE0YTYyN2UxNDEwOWEzLi5mMjYzY2RjZTA1NWFlODE3
NmNiYjZlM2ZmYjA2NTg5MDZlYzUzOWY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzNCBAQAorMjAxOS0wMS0xNCAgVGFkZXUgWmFnYWxsbyAgPHR6YWdhbGxvQGFwcGxlLmNv
bT4KKworICAgICAgICBBZGQgZW50cnkgcG9pbnQgdG8gZWFnZXJseSBnZW5lcmF0ZSBieXRlY29k
ZSBmb3IgYSBnaXZlbiBTb3VyY2VDb2RlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xOTM0MDEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBBZGQgYSBuZXcgYGdlbmVyYXRlQnl0ZWNvZGVgIGZ1bmN0aW9uIHRo
YXQgZWFnZXJseSBnZW5lcmF0ZXMgYnl0ZWNvZGUKKyAgICAgICAgZm9yIGEgZ2l2ZW4gc291cmNl
IGZpbGUgYW5kIGFsbCBpdHMgZnVuY3Rpb25zLiBDdXJyZW50bHksIHRoaXMgZnVuY3Rpb24KKyAg
ICAgICAgcmVsaWVzIG9uIE9wdGlvbnM6OmRpc2tDYWNoZVBhdGgoKSB0byB3cml0ZSB0aGUgYnl0
ZWNvZGUgdG8gZGlzay4KKworICAgICAgICBUaGlzIGZ1bmN0aW9uIGlzIG5vdCBiZWluZyB1c2Vk
IGZvciBydW5uaW5nIHRoZSBieXRlY29kZS1jYWNoZSB0ZXN0cyB5ZXQsCisgICAgICAgIGJlY2F1
c2Ugd2UgY2FuJ3QgZ3VhcmFudGVlIHRoYXQgYWxsIHRoZSBuZWNlc3NhcnkgY29kZSBoYXMgYmVl
biBjYWNoZWQKKyAgICAgICAgc2luY2Ugc29tZSB0ZXN0cyBgbG9hZGAgYW5kIGBpbXBvcnRgIG90
aGVyIGZpbGVzLgorCisgICAgICAgICoganNjLmNwcDoKKyAgICAgICAgKHJ1bldpdGhPcHRpb25z
KToKKyAgICAgICAgKHByaW50VXNhZ2VTdGF0ZW1lbnQpOgorICAgICAgICAoQ29tbWFuZExpbmU6
OnBhcnNlQXJndW1lbnRzKToKKyAgICAgICAgKiBydW50aW1lL0NvZGVDYWNoZS5jcHA6CisgICAg
ICAgIChKU0M6OkNvZGVDYWNoZU1hcDo6cHJ1bmVTbG93Q2FzZSk6CisgICAgICAgIChKU0M6OkNv
ZGVDYWNoZTo6d3JpdGUpOgorICAgICAgICAoSlNDOjpnZW5lcmF0ZVVubGlua2VkQ29kZUJsb2Nr
Rm9yRnVuY3Rpb25zKToKKyAgICAgICAgKEpTQzo6d3JpdGVDb2RlQmxvY2spOgorICAgICAgICAo
SlNDOjp3cml0ZUdsb2JhbENvZGVCbG9ja1RvRGlzayk6CisgICAgICAgICogcnVudGltZS9Db2Rl
Q2FjaGUuaDoKKyAgICAgICAgKEpTQzo6cmVjdXJzaXZlbHlHZW5lcmF0ZVVubGlua2VkQ29kZUJs
b2NrKToKKyAgICAgICAgKiBydW50aW1lL0NvbXBsZXRpb24uY3BwOgorICAgICAgICAoSlNDOjpn
ZW5lcmF0ZUJ5dGVjb2RlKToKKyAgICAgICAgKiBydW50aW1lL0NvbXBsZXRpb24uaDoKKwogMjAx
OS0wMS0yMyAgRGF2aWQgS2lsemVyICA8ZGRraWx6ZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFtK
U0NdIER1cGxpY2F0ZSBnbG9iYWwgdmFyaWFibGVzOiBKU0M6Om9wY29kZUxlbmd0aHMKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElHbG9iYWxPYmplY3QubW0gYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQVBJR2xvYmFsT2JqZWN0Lm1tCmluZGV4IDNjYTRh
YjkyNTFmNzFhNTVlZDI0ODRhYzExNzZjMzkwNmU5OTJjYzUuLmQ1YzIzNjVkMDg0NzE0OGM4MGY4
OTkyYmMwNDQzNTJmMzFiY2JmMGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9B
UEkvSlNBUElHbG9iYWxPYmplY3QubW0KKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9K
U0FQSUdsb2JhbE9iamVjdC5tbQpAQCAtMTY0LDcgKzE2NCw2IEBAIEpTSW50ZXJuYWxQcm9taXNl
KiBKU0FQSUdsb2JhbE9iamVjdDo6bW9kdWxlTG9hZGVyRmV0Y2goSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iCiAgICAgYXV0byBkZWZlcnJlZFByb21pc2UgPSBTdHJvbmc8SlNJbnRlcm5hbFByb21p
c2VEZWZlcnJlZD4odm0sIGRlZmVycmVkKTsKICAgICBhdXRvIHN0cm9uZ0tleSA9IFN0cm9uZzxK
U1N0cmluZz4odm0sIGpzU2VjdXJlQ2FzdDxKU1N0cmluZyo+KHZtLCBrZXkpKTsKICAgICBhdXRv
KiByZXNvbHZlID0gSlNOYXRpdmVTdGRGdW5jdGlvbjo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3Qs
IDEsICJyZXNvbHZlIiwgWz1dIChFeGVjU3RhdGUqIGV4ZWMpIHsKLSAgICAgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKICAgICAgICAgLy8gVGhpcyBjYXB0dXJlcyB0aGUgZ2xvYmFsT2JqZWN0IGJ1
dCB0aGF0J3Mgb2sgYmVjYXVzZSBvdXIgc3RydWN0dXJlIGtlZXBzIGl0IGFsaXZlIGFueXdheS4K
ICAgICAgICAgSlNDb250ZXh0ICpjb250ZXh0ID0gW0pTQ29udGV4dCBjb250ZXh0V2l0aEpTR2xv
YmFsQ29udGV4dFJlZjp0b0dsb2JhbFJlZihnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSldOwog
ICAgICAgICBpZCBzY3JpcHQgPSB2YWx1ZVRvT2JqZWN0KGNvbnRleHQsIHRvUmVmKGV4ZWMsIGV4
ZWMtPmFyZ3VtZW50KDApKSk7CkBAIC0xNzYsOCArMTc1LDcgQEAgSlNJbnRlcm5hbFByb21pc2Uq
IEpTQVBJR2xvYmFsT2JqZWN0Ojptb2R1bGVMb2FkZXJGZXRjaChKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2IKICAgICAgICAgICAgIHJldHVybiBlbmNvZGVkSlNVbmRlZmluZWQoKTsKICAgICAgICAg
fQogCi0gICAgICAgIGNvbnN0IFN0cmluZyYgc291cmNlID0gZ2V0SlNTY3JpcHRTb3VyY2VDb2Rl
KHN0YXRpY19jYXN0PEpTU2NyaXB0ICo+KHNjcmlwdCkpOwotICAgICAgICBhcmdzLmFwcGVuZChK
U1NvdXJjZUNvZGU6OmNyZWF0ZSh2bSwgbWFrZVNvdXJjZShzb3VyY2UsIFNvdXJjZU9yaWdpbiht
b2R1bGVLZXkuc3RyaW5nKCkpLCBVUkwoeyB9LCBtb2R1bGVLZXkuc3RyaW5nKCkpLCBUZXh0UG9z
aXRpb24oKSwgSlNDOjpTb3VyY2VQcm92aWRlclNvdXJjZVR5cGU6Ok1vZHVsZSkpKTsKKyAgICAg
ICAgYXJncy5hcHBlbmQoW3N0YXRpY19jYXN0PEpTU2NyaXB0ICo+KHNjcmlwdCkganNTb3VyY2VD
b2RlOm1vZHVsZUtleV0pOwogICAgICAgICBjYWxsKGV4ZWMsIGRlZmVycmVkUHJvbWlzZS0+SlNQ
cm9taXNlRGVmZXJyZWQ6OnJlc29sdmUoKSwgYXJncywgIlRoaXMgc2hvdWxkIG5ldmVyIGJlIHNl
ZW4uLi4iKTsKICAgICAgICAgcmV0dXJuIGVuY29kZWRKU1VuZGVmaW5lZCgpOwogICAgIH0pOwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHQubW0gYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dC5tbQppbmRleCAzYzc3NmQ0ZDkwMGVlMTcz
MzM2MmFjMjlmNjI0ZjQ0NGQ1NDVlN2I0Li43MjNiMWJiZGI2ODg0MjY1YTYyNmI2Y2FkYTlhY2Zi
MjdiOWYwYjRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4
dC5tbQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dC5tbQpAQCAtMzQs
NyArMzQsNiBAQAogI2ltcG9ydCAiSlNHbG9iYWxPYmplY3QuaCIKICNpbXBvcnQgIkpTSW50ZXJu
YWxQcm9taXNlLmgiCiAjaW1wb3J0ICJKU01vZHVsZUxvYWRlci5oIgotI2ltcG9ydCAiSlNTY3Jp
cHRJbnRlcm5hbC5oIgogI2ltcG9ydCAiSlNWYWx1ZUludGVybmFsLmgiCiAjaW1wb3J0ICJKU1Zp
cnR1YWxNYWNoaW5lSW50ZXJuYWwuaCIKICNpbXBvcnQgIkpTV3JhcHBlck1hcC5oIgpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1NjcmlwdC5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL0FQSS9KU1NjcmlwdC5oCmluZGV4IDhkZWQ3Y2E3NzBlZmMxYjg3MWRiMDRmMjQ1
ZGI1NTMxYzYxN2Q0ZTEuLjBmYzUwNWMzYWNjMDM1ZDhkZWUzNzkzZGNmYTdlMTM0OWVhNDI2YzQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNTY3JpcHQuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTU2NyaXB0LmgKQEAgLTI1LDEwICsyNSwxNiBAQAog
CiAjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9KU1ZhbHVlLmg+CiAKK25hbWVzcGFjZSBKU0Mgewor
Y2xhc3MgSlNTb3VyY2VDb2RlOworY2xhc3MgSWRlbnRpZmllcjsKK307CisKICNpZiBKU0NfT0JK
Q19BUElfRU5BQkxFRAogCiBOU19BU1NVTUVfTk9OTlVMTF9CRUdJTgogCitPQkpDX0NMQVNTIEpT
Q29udGV4dDsKIE9CSkNfQ0xBU1MgSlNWaXJ0dWFsTWFjaGluZTsKIAogSlNDX0NMQVNTX0FWQUlM
QUJMRShtYWNvc3goSlNDX01BQ19UQkEpLCBpb3MoSlNDX0lPU19UQkEpKQpAQCAtNDcsNyArNTMs
NyBAQCBKU0NfQ0xBU1NfQVZBSUxBQkxFKG1hY29zeChKU0NfTUFDX1RCQSksIGlvcyhKU0NfSU9T
X1RCQSkpCiAgQG1ldGhvZAogIEBhYnN0cmFjdCBDcmVhdGUgYSBKU1NjcmlwdCBmb3IgdGhlIHNw
ZWNpZmllZCB2aXJ0dWFsIG1hY2hpbmUgd2l0aCBhIHBhdGggdG8gYSBjb2Rlc2lnbmluZyBhbmQg
Ynl0ZWNvZGUgY2FjaGluZy4KICBAcGFyYW0gZmlsZVBhdGggQSBVUkwgY29udGFpbmluZyB0aGUg
cGF0aCB0byBhIEpTIHNvdXJjZSBjb2RlIGZpbGUgb24gZGlzay4KLSBAcGFyYW0gdm0gVGhlIEpT
VmlydHVhbE1hY2hpbmUgdGhlIHNjcmlwdCBjYW4gYmUgZXZhbHVhdGVkIGluLgorIEBwYXJhbSBj
b250ZXh0IFRoZSBKU0NvbnRleHQgdGhlIHNjcmlwdCBjYW4gYmUgZXZhbHVhdGVkIGluLgogIEBw
YXJhbSBjb2RlU2lnbmluZ1BhdGggQSBVUkwgY29udGFpbmluZyB0aGUgcGF0aCB0byB0aGUgY29k
ZVNpZ25pbmcgZmlsZSBmb3IgZmlsZVBhdGggb24gZGlzay4KICBAcGFyYW0gY2FjaGVQYXRoIEEg
VVJMIGNvbnRhaW5pbmcgdGhlIHBhdGggd2hlcmUgdGhlIFZNIHNob3VsZCBjYWNoZSBmb3IgZnV0
dXJlIGV4ZWN1dGlvbi4KICBAcmVzdWx0IFRoZSBuZXcgc2NyaXB0LgpAQCAtNTUsMTMgKzYxLDEz
IEBAIEpTQ19DTEFTU19BVkFJTEFCTEUobWFjb3N4KEpTQ19NQUNfVEJBKSwgaW9zKEpTQ19JT1Nf
VEJBKSkKIAogIElmIHRoZSBmaWxlIGF0IGZpbGVQYXRoIGlzIG5vdCBhc2NpaSB0aGlzIG1ldGhv
ZCB3aWxsIHJldHVybiBuaWwuCiAgKi8KLSsgKG51bGxhYmxlIGluc3RhbmNldHlwZSlzY3JpcHRG
cm9tQVNDSUlGaWxlOihOU1VSTCAqKWZpbGVQYXRoIGluVmlydHVhbE1hY2hpbmU6KEpTVmlydHVh
bE1hY2hpbmUgKil2bSB3aXRoQ29kZVNpZ25pbmc6KG51bGxhYmxlIE5TVVJMICopY29kZVNpZ25p
bmdQYXRoIGFuZEJ5dGVjb2RlQ2FjaGU6KG51bGxhYmxlIE5TVVJMICopY2FjaGVQYXRoOworKyAo
bnVsbGFibGUgaW5zdGFuY2V0eXBlKXNjcmlwdEZyb21BU0NJSUZpbGU6KE5TVVJMICopZmlsZVBh
dGggaW5Db250ZXh0OihKU0NvbnRleHQgKiljb250ZXh0IHdpdGhDb2RlU2lnbmluZzoobnVsbGFi
bGUgTlNVUkwgKiljb2RlU2lnbmluZ1BhdGggYW5kQnl0ZWNvZGVDYWNoZToobnVsbGFibGUgTlNV
UkwgKiljYWNoZVBhdGg7CiAKIAogLyohCiAgVGhpcyBpcyBkZXByZWNhdGVkIGFuZCBpcyBlcXVp
dmFsZW50IHRvIHNjcmlwdEZyb21BU0NJSUZpbGU6aW5WaXJ0dWFsTWFjaGluZTp3aXRoQ29kZVNp
Z25pbmc6YW5kQnl0ZWNvZGVDYWNoZTouCiAgKi8KLSsgKG51bGxhYmxlIGluc3RhbmNldHlwZSlz
Y3JpcHRGcm9tVVRGOEZpbGU6KE5TVVJMICopZmlsZVBhdGggaW5WaXJ0dWFsTWFjaGluZTooSlNW
aXJ0dWFsTWFjaGluZSAqKXZtIHdpdGhDb2RlU2lnbmluZzoobnVsbGFibGUgTlNVUkwgKiljb2Rl
U2lnbmluZ1BhdGggYW5kQnl0ZWNvZGVDYWNoZToobnVsbGFibGUgTlNVUkwgKiljYWNoZVBhdGg7
CisrIChudWxsYWJsZSBpbnN0YW5jZXR5cGUpc2NyaXB0RnJvbVVURjhGaWxlOihOU1VSTCAqKWZp
bGVQYXRoIGluQ29udGV4dDooSlNDb250ZXh0ICopY29udGV4dCB3aXRoQ29kZVNpZ25pbmc6KG51
bGxhYmxlIE5TVVJMICopY29kZVNpZ25pbmdQYXRoIGFuZEJ5dGVjb2RlQ2FjaGU6KG51bGxhYmxl
IE5TVVJMICopY2FjaGVQYXRoOwogCiBAZW5kCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvSlNTY3JpcHQubW0gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTU2Ny
aXB0Lm1tCmluZGV4IGY3ZTkzOWFmMDk4YmY1ZDBmNTNlZDFlOGIzMmQ3NWE0ZDgyM2ZkN2YuLjY4
MWQzOTVmNDVlZTA4YmI0NWJiMTkxMmI2ZjVhMTM5ODgzNjcyNjMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNTY3JpcHQubW0KKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL0FQSS9KU1NjcmlwdC5tbQpAQCAtMjcsMjEgKzI3LDMyIEBACiAjaW1wb3J0ICJKU1Njcmlw
dEludGVybmFsLmgiCiAKICNpbXBvcnQgIkFQSUNhc3QuaCIKKyNpbXBvcnQgIklkZW50aWZpZXIu
aCIKICNpbXBvcnQgIkpTQ29udGV4dEludGVybmFsLmgiCisjaW1wb3J0ICJKU1NvdXJjZUNvZGUu
aCIKICNpbXBvcnQgIkpTVmFsdWVQcml2YXRlLmgiCisjaW1wb3J0ICJKU1ZpcnR1YWxNYWNoaW5l
SW50ZXJuYWwuaCIKKyNpbXBvcnQgIlBhcnNlckVycm9yLmgiCiAjaW1wb3J0ICJTeW1ib2wuaCIK
KyNpbmNsdWRlIDxzeXMvc3RhdC5oPgogCiAjaWYgSlNDX09CSkNfQVBJX0VOQUJMRUQKIAogQGlt
cGxlbWVudGF0aW9uIEpTU2NyaXB0IHsKKyAgICBfX3dlYWsgSlNDb250ZXh0KiBtX2NvbnRleHQ7
CisgICAgX193ZWFrIEpTVmlydHVhbE1hY2hpbmUqIG1fdmlydHVhbE1hY2hpbmU7CiAgICAgU3Ry
aW5nIG1fc291cmNlOworICAgIE5TVVJMKiBtX2NhY2hlUGF0aDsKKyAgICBKU0M6OkNhY2hlZEJ5
dGVjb2RlIG1fY2FjaGVkQnl0ZWNvZGU7CisgICAgSlNDOjpTdHJvbmc8SlNDOjpKU1NvdXJjZUNv
ZGU+IG1fanNTb3VyY2VDb2RlOworICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiBtX21vZHVsZUtleTsK
IH0KIAogKyAoaW5zdGFuY2V0eXBlKXNjcmlwdFdpdGhTb3VyY2U6KE5TU3RyaW5nICopc291cmNl
IGluVmlydHVhbE1hY2hpbmU6KEpTVmlydHVhbE1hY2hpbmUgKil2bQogewotICAgIFVOVVNFRF9Q
QVJBTSh2bSk7Ci0gICAgSlNTY3JpcHQgKnJlc3VsdCA9IFtbSlNTY3JpcHQgYWxsb2NdIGluaXRd
OworICAgIEpTU2NyaXB0ICpyZXN1bHQgPSBbW1tKU1NjcmlwdCBhbGxvY10gaW5pdF0gYXV0b3Jl
bGVhc2VdOwogICAgIHJlc3VsdC0+bV9zb3VyY2UgPSBzb3VyY2U7CisgICAgcmVzdWx0LT5tX3Zp
cnR1YWxNYWNoaW5lID0gdm07CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtNzcsMTMgKzg4
LDEwIEBAIHN0YXRpYyBib29sIGZpbGxCdWZmZXJXaXRoQ29udGVudHNPZkZpbGUoY29uc3QgU3Ry
aW5nJiBmaWxlTmFtZSwgVmVjdG9yPExDaGFyPiYKIH0KIAogCi0rIChpbnN0YW5jZXR5cGUpc2Ny
aXB0RnJvbUFTQ0lJRmlsZTooTlNVUkwgKilmaWxlUGF0aCBpblZpcnR1YWxNYWNoaW5lOihKU1Zp
cnR1YWxNYWNoaW5lICopdm0gd2l0aENvZGVTaWduaW5nOihOU1VSTCAqKWNvZGVTaWduaW5nUGF0
aCBhbmRCeXRlY29kZUNhY2hlOihOU1VSTCAqKWNhY2hlUGF0aAorKyAoaW5zdGFuY2V0eXBlKXNj
cmlwdEZyb21BU0NJSUZpbGU6KE5TVVJMICopZmlsZVBhdGggaW5Db250ZXh0OihKU0NvbnRleHQg
Kiljb250ZXh0IHdpdGhDb2RlU2lnbmluZzooTlNVUkwgKiljb2RlU2lnbmluZ1BhdGggYW5kQnl0
ZWNvZGVDYWNoZTooTlNVUkwgKiljYWNoZVBhdGgKIHsKICAgICAvLyBGSVhNRTogVGhpcyBzaG91
bGQgY2hlY2sgY29kZVNpZ25pbmcuCiAgICAgVU5VU0VEX1BBUkFNKGNvZGVTaWduaW5nUGF0aCk7
Ci0gICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGFjdHVhbGx5IGNhY2hlIGJ5dGVjb2RlLgotICAg
IFVOVVNFRF9QQVJBTShjYWNoZVBhdGgpOwotICAgIFVOVVNFRF9QQVJBTSh2bSk7CiAgICAgVVJM
IGZpbGVQYXRoVVJMKFtmaWxlUGF0aCBhYnNvbHV0ZVVSTF0pOwogICAgIGlmICghZmlsZVBhdGhV
UkwuaXNMb2NhbEZpbGUoKSkKICAgICAgICAgcmV0dXJuIG5pbDsKQEAgLTk1LDE3ICsxMDMsOTUg
QEAgKyAoaW5zdGFuY2V0eXBlKXNjcmlwdEZyb21BU0NJSUZpbGU6KE5TVVJMICopZmlsZVBhdGgg
aW5WaXJ0dWFsTWFjaGluZTooSlNWaXJ0dWEKICAgICBpZiAoIWNoYXJhY3RlcnNBcmVBbGxBU0NJ
SShidWZmZXIuZGF0YSgpLCBidWZmZXIuc2l6ZSgpKSkKICAgICAgICAgcmV0dXJuIG5pbDsKIAot
ICAgIEpTU2NyaXB0ICpyZXN1bHQgPSBbW0pTU2NyaXB0IGFsbG9jXSBpbml0XTsKKyAgICBKU1Nj
cmlwdCAqcmVzdWx0ID0gW1tbSlNTY3JpcHQgYWxsb2NdIGluaXRdIGF1dG9yZWxlYXNlXTsKKyAg
ICByZXN1bHQtPm1fY29udGV4dCA9IGNvbnRleHQ7CisgICAgcmVzdWx0LT5tX3ZpcnR1YWxNYWNo
aW5lID0gY29udGV4dC52aXJ0dWFsTWFjaGluZTsKICAgICByZXN1bHQtPm1fc291cmNlID0gU3Ry
aW5nOjpmcm9tVVRGOFdpdGhMYXRpbjFGYWxsYmFjayhidWZmZXIuZGF0YSgpLCBidWZmZXIuc2l6
ZSgpKTsKKyAgICByZXN1bHQtPm1fY2FjaGVQYXRoID0gY2FjaGVQYXRoOworICAgIFtyZXN1bHQg
cmVhZENhY2hlXTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi0rIChpbnN0YW5jZXR5cGUpc2Ny
aXB0RnJvbVVURjhGaWxlOihOU1VSTCAqKWZpbGVQYXRoIGluVmlydHVhbE1hY2hpbmU6KEpTVmly
dHVhbE1hY2hpbmUgKil2bSB3aXRoQ29kZVNpZ25pbmc6KE5TVVJMICopY29kZVNpZ25pbmdQYXRo
IGFuZEJ5dGVjb2RlQ2FjaGU6KE5TVVJMICopY2FjaGVQYXRoCisrIChpbnN0YW5jZXR5cGUpc2Ny
aXB0RnJvbVVURjhGaWxlOihOU1VSTCAqKWZpbGVQYXRoIGluQ29udGV4dDooSlNDb250ZXh0ICop
Y29udGV4dCB3aXRoQ29kZVNpZ25pbmc6KE5TVVJMICopY29kZVNpZ25pbmdQYXRoIGFuZEJ5dGVj
b2RlQ2FjaGU6KE5TVVJMICopY2FjaGVQYXRoCiB7Ci0gICAgcmV0dXJuIFtKU1NjcmlwdCBzY3Jp
cHRGcm9tQVNDSUlGaWxlOmZpbGVQYXRoIGluVmlydHVhbE1hY2hpbmU6dm0gd2l0aENvZGVTaWdu
aW5nOmNvZGVTaWduaW5nUGF0aCBhbmRCeXRlY29kZUNhY2hlOmNhY2hlUGF0aF07CisgICAgcmV0
dXJuIFtKU1NjcmlwdCBzY3JpcHRGcm9tQVNDSUlGaWxlOmZpbGVQYXRoIGluQ29udGV4dDpjb250
ZXh0IHdpdGhDb2RlU2lnbmluZzpjb2RlU2lnbmluZ1BhdGggYW5kQnl0ZWNvZGVDYWNoZTpjYWNo
ZVBhdGhdOwogfQogCi1jb25zdCBTdHJpbmcmIGdldEpTU2NyaXB0U291cmNlQ29kZShKU1Njcmlw
dCAqbW9kdWxlKSB7IHJldHVybiBtb2R1bGUtPm1fc291cmNlOyB9CistICh2b2lkKWRlYWxsb2MK
K3sKKyAgICBpZiAobV9jYWNoZWRCeXRlY29kZS5zaXplKCkpCisgICAgICAgIG11bm1hcChjb25z
dF9jYXN0PHZvaWQqPihtX2NhY2hlZEJ5dGVjb2RlLmRhdGEoKSksIG1fY2FjaGVkQnl0ZWNvZGUu
c2l6ZSgpKTsKKyAgICBbc3VwZXIgZGVhbGxvY107Cit9CisKKy0gKHZvaWQpcmVhZENhY2hlCit7
CisgICAgaWYgKCFtX2NhY2hlUGF0aCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaW50IGZkID0g
b3BlbihtX2NhY2hlUGF0aC5wYXRoLlVURjhTdHJpbmcsIE9fUkRPTkxZKTsKKyAgICBpZiAoZmQg
PT0gLTEpCisgICAgICAgIHJldHVybjsKKworICAgIGludCByYyA9IGZsb2NrKGZkLCBMT0NLX1NI
IHwgTE9DS19OQik7CisgICAgaWYgKHJjKSB7CisgICAgICAgIGNsb3NlKGZkKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIHN0cnVjdCBzdGF0IHNiOworICAgIGludCByZXMgPSBmc3Rh
dChmZCwgJnNiKTsKKyAgICBzaXplX3Qgc2l6ZSA9IHN0YXRpY19jYXN0PHNpemVfdD4oc2Iuc3Rf
c2l6ZSk7CisgICAgaWYgKHJlcyB8fCAhc2l6ZSkgeworICAgICAgICBjbG9zZShmZCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICB2b2lkKiBidWZmZXIgPSBtbWFwKG51bGxwdHIsIHNp
emUsIFBST1RfUkVBRCwgTUFQX1BSSVZBVEUsIGZkLCAwKTsKKyAgICBjbG9zZShmZCk7CisKKyAg
ICBtX2NhY2hlZEJ5dGVjb2RlID0gSlNDOjpDYWNoZWRCeXRlY29kZSB7IGJ1ZmZlciwgc2l6ZSB9
OworfQorCistICh2b2lkKXdyaXRlQ2FjaGUKK3sKKyAgICBpZiAobV9jYWNoZWRCeXRlY29kZS5z
aXplKCkgfHwgIW1fY2FjaGVQYXRoKQorICAgICAgICByZXR1cm47CisKKyAgICBKU0M6OlBhcnNl
ckVycm9yIGVycm9yOworICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjID0gdG9KUyhtX2NvbnRleHQu
SlNHbG9iYWxDb250ZXh0UmVmKTsKKyAgICBtX2NhY2hlZEJ5dGVjb2RlID0gSlNDOjpnZW5lcmF0
ZU1vZHVsZUJ5dGVjb2RlKGV4ZWMsIG1fanNTb3VyY2VDb2RlLT5zb3VyY2VDb2RlKCksIGVycm9y
KTsKKyAgICBpZiAoZXJyb3IuaXNWYWxpZCgpKQorICAgICAgICByZXR1cm47CisgICAgaW50IGZk
ID0gb3BlbihtX2NhY2hlUGF0aC5wYXRoLlVURjhTdHJpbmcsIE9fQ1JFQVQgfCBPX1dST05MWSwg
MDY2Nik7CisgICAgaWYgKGZkID09IC0xKQorICAgICAgICByZXR1cm47CisgICAgaW50IHJjID0g
ZmxvY2soZmQsIExPQ0tfRVggfCBMT0NLX05CKTsKKyAgICBpZiAoIXJjKQorICAgICAgICB3cml0
ZShmZCwgbV9jYWNoZWRCeXRlY29kZS5kYXRhKCksIG1fY2FjaGVkQnl0ZWNvZGUuc2l6ZSgpKTsK
KyAgICBjbG9zZShmZCk7Cit9CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIEpTU2NyaXB0KElu
dGVybmFsKQorCistIChKU0M6OkpTU291cmNlQ29kZSopanNTb3VyY2VDb2RlOihKU0M6OklkZW50
aWZpZXIpbW9kdWxlS2V5Cit7CisgICAgaWYgKG1fanNTb3VyY2VDb2RlKSB7CisgICAgICAgIEFT
U0VSVChtb2R1bGVLZXkuaW1wbCgpID09IG1fbW9kdWxlS2V5KTsKKyAgICAgICAgcmV0dXJuIG1f
anNTb3VyY2VDb2RlLmdldCgpOworICAgIH0KKworICAgIEpTQzo6Vk0mIHZtID0gbV92aXJ0dWFs
TWFjaGluZS52bTsKKyAgICBUZXh0UG9zaXRpb24gc3RhcnRQb3NpdGlvbiB7IH07CisgICAgUmVm
PEpTQzo6Q2FjaGVkQnl0ZWNvZGVTb3VyY2VQcm92aWRlcj4gc291cmNlUHJvdmlkZXIgPSBKU0M6
OkNhY2hlZEJ5dGVjb2RlU291cmNlUHJvdmlkZXI6OmNyZWF0ZShtX3NvdXJjZSwgJm1fY2FjaGVk
Qnl0ZWNvZGUsIEpTQzo6U291cmNlT3JpZ2luKG1vZHVsZUtleS5zdHJpbmcoKSksIFVSTCh7IH0s
IG1vZHVsZUtleS5zdHJpbmcoKSksIFRleHRQb3NpdGlvbigpLCBKU0M6OlNvdXJjZVByb3ZpZGVy
U291cmNlVHlwZTo6TW9kdWxlKTsKKyAgICBKU0M6OlNvdXJjZUNvZGUgc291cmNlQ29kZShXVEZN
b3ZlKHNvdXJjZVByb3ZpZGVyKSwgc3RhcnRQb3NpdGlvbi5tX2xpbmUub25lQmFzZWRJbnQoKSwg
c3RhcnRQb3NpdGlvbi5tX2NvbHVtbi5vbmVCYXNlZEludCgpKTsKKyAgICBKU0M6OkpTU291cmNl
Q29kZSoganNTb3VyY2VDb2RlID0gSlNDOjpKU1NvdXJjZUNvZGU6OmNyZWF0ZSh2bSwgV1RGTW92
ZShzb3VyY2VDb2RlKSk7CisgICAgbV9qc1NvdXJjZUNvZGUuc2V0KHZtLCBqc1NvdXJjZUNvZGUp
OworICAgIFtzZWxmIHdyaXRlQ2FjaGVdOworICAgIHJldHVybiBqc1NvdXJjZUNvZGU7Cit9CiAK
IEBlbmQKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1NjcmlwdElu
dGVybmFsLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTU2NyaXB0SW50ZXJuYWwuaApp
bmRleCBhOTczZWQxYWQ0YTFmYzVmZGYzNWNmOTQ4MjMwMTc5NWFlMWYyZWIzLi5iZDQwMDUwMWMz
YWU1ZDA1NjNlZDYxY2VkNjRjNzlkNDg4NWE4NjI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvQVBJL0pTU2NyaXB0SW50ZXJuYWwuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL0pTU2NyaXB0SW50ZXJuYWwuaApAQCAtMjgsNiArMjgsOCBAQAogI2ltcG9ydCAiSlNT
Y3JpcHQuaCIKICNpbXBvcnQgIlNvdXJjZUNvZGUuaCIKIAotT0JKQ19DTEFTUyBKU1NjcmlwdDsK
K0BpbnRlcmZhY2UgSlNTY3JpcHQoSW50ZXJuYWwpCiAKLWNvbnN0IFN0cmluZyYgZ2V0SlNTY3Jp
cHRTb3VyY2VDb2RlKEpTU2NyaXB0ICopOworLSAoSlNDOjpKU1NvdXJjZUNvZGUqKWpzU291cmNl
Q29kZTooSlNDOjpJZGVudGlmaWVyKW1vZHVsZUtleTsKKworQGVuZApkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZpcnR1YWxNYWNoaW5lLm1tIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL0FQSS9KU1ZpcnR1YWxNYWNoaW5lLm1tCmluZGV4IDVlNzk1ZjAxNmYwNWEzODFi
ZGNmMTA0MGYzMzVkMDg5NTM5NWRlYWEuLjUwNGQzM2NmNWY3Y2I1M2YxNmRkMzc3OTNmYzYxYzkx
NWUyM2JmZTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWaXJ0dWFs
TWFjaGluZS5tbQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmlydHVhbE1hY2hp
bmUubW0KQEAgLTI5Nyw2ICsyOTcsMTEgQEAgKyAoTlNVSW50ZWdlcilzZXROdW1iZXJPZkZUTENv
bXBpbGVyVGhyZWFkczooTlNVSW50ZWdlciludW1iZXJPZlRocmVhZHMKIAogI2VuZGlmIC8vIEVO
QUJMRShERkdfSklUKQogCistIChKU0M6OlZNJil2bQoreworICAgIHJldHVybiAqdG9KUyhtX2dy
b3VwKTsKK30KKwogQGVuZAogCiBzdGF0aWMgdm9pZCBzY2FuRXh0ZXJuYWxPYmplY3RHcmFwaChK
U0M6OlZNJiB2bSwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvciwgdm9pZCogcm9vdCwgYm9vbCBs
b2NrQWNxdWlyZWQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmly
dHVhbE1hY2hpbmVJbnRlcm5hbC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZpcnR1
YWxNYWNoaW5lSW50ZXJuYWwuaAppbmRleCA5MTIyZWQ0OWE0ZWExYWE0OWVjNjY3ZmVmNjYyN2Zj
NDNiNzc3MTZkLi45YjBiZjZiZWViMDdhZGQwOWM2M2U4YjE0MDM0YTg4Y2U4M2Q2ZWQ3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmlydHVhbE1hY2hpbmVJbnRlcm5h
bC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWaXJ0dWFsTWFjaGluZUludGVy
bmFsLmgKQEAgLTQ2LDYgKzQ2LDggQEAgSlNDb250ZXh0R3JvdXBSZWYgZ2V0R3JvdXBGcm9tVmly
dHVhbE1hY2hpbmUoSlNWaXJ0dWFsTWFjaGluZSAqKTsKIAogLSAoSlNDb250ZXh0ICopY29udGV4
dEZvckdsb2JhbENvbnRleHRSZWY6KEpTR2xvYmFsQ29udGV4dFJlZilnbG9iYWxDb250ZXh0Owog
LSAodm9pZClhZGRDb250ZXh0OihKU0NvbnRleHQgKil3cmFwcGVyIGZvckdsb2JhbENvbnRleHRS
ZWY6KEpTR2xvYmFsQ29udGV4dFJlZilnbG9iYWxDb250ZXh0OworLSAoSlNDOjpWTSYpdm07CisK
IEBlbmQKIAogI2VuZGlmIC8vIGRlZmluZWQoX19PQkpDX18pCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL3Rlc3RhcGkubW0gYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL3Rlc3RzL3Rlc3RhcGkubW0KaW5kZXggMTNiZWI2OWYyYmNkNzIxOTRjNzBhZjU2OGY5
NjEyZDYxZWY2YWNjMy4uNmRiZTFkNWU5NGNlMjI1MDVhMDNjNjUxMDBlYmQ3ODBmZGYwNDA5YiAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy90ZXN0YXBpLm1tCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVzdGFwaS5tbQpAQCAtMTk4MCw2
ICsxOTgwLDY4IEBAIHN0YXRpYyB2b2lkIHRlc3RJbXBvcnRNb2R1bGVUd2ljZSgpCiAgICAgfQog
fQogCitzdGF0aWMgdm9pZCB0ZXN0Qnl0ZWNvZGVDYWNoZSgpCit7CisgICAgQGF1dG9yZWxlYXNl
cG9vbCB7CisgICAgICAgIE5TVVJMKiB0ZW1wRGlyZWN0b3J5ID0gW05TVVJMIGZpbGVVUkxXaXRo
UGF0aDpOU1RlbXBvcmFyeURpcmVjdG9yeSgpIGlzRGlyZWN0b3J5OllFU107CisKKyAgICAgICAg
TlNTdHJpbmcqIGZvb1NvdXJjZSA9IEAiaW1wb3J0IHsgbiB9IGZyb20gXCIuLi9mb28uanNcIjsg
ZXhwb3J0IGxldCBmb28gPSBuOyI7CisgICAgICAgIE5TU3RyaW5nKiBiYXJTb3VyY2UgPSBAImlt
cG9ydCBcIm90aGVyRGlyZWN0b3J5L2Jhei5qc1wiOyBleHBvcnQgbGV0IG4gPSBudWxsOyI7Cisg
ICAgICAgIE5TU3RyaW5nKiBiYXpTb3VyY2UgPSBAImltcG9ydCB7IGZvbyB9IGZyb20gXCIuLi9k
aXJlY3RvcnkvYmFyLmpzXCI7IGdsb2JhbFRoaXMucmFuID0gbnVsbDsgZXhwb3J0IGxldCBleHAg
PSBmb287IjsKKworICAgICAgICBOU1VSTCogZm9vUGF0aCA9IFt0ZW1wRGlyZWN0b3J5IFVSTEJ5
QXBwZW5kaW5nUGF0aENvbXBvbmVudDpAImZvby5qcyJdOworICAgICAgICBOU1VSTCogYmFyUGF0
aCA9IFt0ZW1wRGlyZWN0b3J5IFVSTEJ5QXBwZW5kaW5nUGF0aENvbXBvbmVudDpAImJhci5qcyJd
OworICAgICAgICBOU1VSTCogYmF6UGF0aCA9IFt0ZW1wRGlyZWN0b3J5IFVSTEJ5QXBwZW5kaW5n
UGF0aENvbXBvbmVudDpAImJhei5qcyJdOworCisgICAgICAgIE5TVVJMKiBmb29DYWNoZVBhdGgg
PSBbdGVtcERpcmVjdG9yeSBVUkxCeUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6QCJmb28uanMuY2Fj
aGUiXTsKKyAgICAgICAgTlNVUkwqIGJhckNhY2hlUGF0aCA9IFt0ZW1wRGlyZWN0b3J5IFVSTEJ5
QXBwZW5kaW5nUGF0aENvbXBvbmVudDpAImJhci5qcy5jYWNoZSJdOworICAgICAgICBOU1VSTCog
YmF6Q2FjaGVQYXRoID0gW3RlbXBEaXJlY3RvcnkgVVJMQnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50
OkAiYmF6LmpzLmNhY2hlIl07CisKKyAgICAgICAgW2Zvb1NvdXJjZSB3cml0ZVRvVVJMOmZvb1Bh
dGggYXRvbWljYWxseTpOTyBlbmNvZGluZzpOU0FTQ0lJU3RyaW5nRW5jb2RpbmcgZXJyb3I6bmls
XTsKKyAgICAgICAgW2JhclNvdXJjZSB3cml0ZVRvVVJMOmJhclBhdGggYXRvbWljYWxseTpOTyBl
bmNvZGluZzpOU0FTQ0lJU3RyaW5nRW5jb2RpbmcgZXJyb3I6bmlsXTsKKyAgICAgICAgW2JhelNv
dXJjZSB3cml0ZVRvVVJMOmJhelBhdGggYXRvbWljYWxseTpOTyBlbmNvZGluZzpOU0FTQ0lJU3Ry
aW5nRW5jb2RpbmcgZXJyb3I6bmlsXTsKKworICAgICAgICBfX2Jsb2NrIGJvb2wgZm9yY2VEaXNr
Q2FjaGUgPSBmYWxzZTsKKyAgICAgICAgYXV0byBibG9jayA9IF4oSlNDb250ZXh0ICpjb250ZXh0
LCBKU1ZhbHVlICppZGVudGlmaWVyLCBKU1ZhbHVlICpyZXNvbHZlLCBKU1ZhbHVlICpyZWplY3Qp
IHsKKyAgICAgICAgICAgIEpTQzo6T3B0aW9uczo6Zm9yY2VEaXNrQ2FjaGUoKSA9IGZvcmNlRGlz
a0NhY2hlOworICAgICAgICAgICAgaWYgKFtpZGVudGlmaWVyIGlzRXF1YWxUb09iamVjdDpAImZp
bGU6Ly8vZGlyZWN0b3J5L2Jhci5qcyJdKQorICAgICAgICAgICAgICAgIFtyZXNvbHZlIGNhbGxX
aXRoQXJndW1lbnRzOkBbW0pTU2NyaXB0IHNjcmlwdEZyb21BU0NJSUZpbGU6Zm9vUGF0aCBpbkNv
bnRleHQ6Y29udGV4dCB3aXRoQ29kZVNpZ25pbmc6bmlsIGFuZEJ5dGVjb2RlQ2FjaGU6Zm9vQ2Fj
aGVQYXRoXV1dOworICAgICAgICAgICAgZWxzZSBpZiAoW2lkZW50aWZpZXIgaXNFcXVhbFRvT2Jq
ZWN0OkAiZmlsZTovLy9mb28uanMiXSkKKyAgICAgICAgICAgICAgICBbcmVzb2x2ZSBjYWxsV2l0
aEFyZ3VtZW50czpAW1tKU1NjcmlwdCBzY3JpcHRGcm9tQVNDSUlGaWxlOmJhclBhdGggaW5Db250
ZXh0OmNvbnRleHQgd2l0aENvZGVTaWduaW5nOm5pbCBhbmRCeXRlY29kZUNhY2hlOmJhckNhY2hl
UGF0aF1dXTsKKyAgICAgICAgICAgIGVsc2UgaWYgKFtpZGVudGlmaWVyIGlzRXF1YWxUb09iamVj
dDpAImZpbGU6Ly8vb3RoZXJEaXJlY3RvcnkvYmF6LmpzIl0pCisgICAgICAgICAgICAgICAgW3Jl
c29sdmUgY2FsbFdpdGhBcmd1bWVudHM6QFtbSlNTY3JpcHQgc2NyaXB0RnJvbUFTQ0lJRmlsZTpi
YXpQYXRoIGluQ29udGV4dDpjb250ZXh0IHdpdGhDb2RlU2lnbmluZzpuaWwgYW5kQnl0ZWNvZGVD
YWNoZTpiYXpDYWNoZVBhdGhdXV07CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
W3JlamVjdCBjYWxsV2l0aEFyZ3VtZW50czpAW1tKU1ZhbHVlIHZhbHVlV2l0aE5ld0Vycm9yRnJv
bU1lc3NhZ2U6QCJXZWlyZCBwYXRoIiBpbkNvbnRleHQ6Y29udGV4dF1dXTsKKyAgICAgICAgfTsK
KworICAgICAgICBAYXV0b3JlbGVhc2Vwb29sIHsKKyAgICAgICAgICAgIGF1dG8gKmNvbnRleHQg
PSBbSlNDb250ZXh0RmV0Y2hEZWxlZ2F0ZSBjb250ZXh0V2l0aEJsb2NrRm9yRmV0Y2g6YmxvY2td
OworICAgICAgICAgICAgY29udGV4dC5tb2R1bGVMb2FkZXJEZWxlZ2F0ZSA9IGNvbnRleHQ7Cisg
ICAgICAgICAgICBKU1ZhbHVlICpwcm9taXNlID0gW2NvbnRleHQgZXZhbHVhdGVTY3JpcHQ6QCJp
bXBvcnQoJy4uL290aGVyRGlyZWN0b3J5L2Jhei5qcycpOyIgd2l0aFNvdXJjZVVSTDpbTlNVUkwg
ZmlsZVVSTFdpdGhQYXRoOkAiL2RpcmVjdG9yeSIgaXNEaXJlY3Rvcnk6WUVTXV07CisgICAgICAg
ICAgICBKU1ZhbHVlICpudWxsID0gW0pTVmFsdWUgdmFsdWVXaXRoTnVsbEluQ29udGV4dDpjb250
ZXh0XTsKKyAgICAgICAgICAgIGNoZWNrTW9kdWxlQ29kZVJhbihjb250ZXh0LCBwcm9taXNlLCBu
dWxsKTsKKyAgICAgICAgfQorCisgICAgICAgIEBhdXRvcmVsZWFzZXBvb2wgeworICAgICAgICAg
ICAgZm9yY2VEaXNrQ2FjaGUgPSB0cnVlOworICAgICAgICAgICAgYXV0byAqY29udGV4dCA9IFtK
U0NvbnRleHRGZXRjaERlbGVnYXRlIGNvbnRleHRXaXRoQmxvY2tGb3JGZXRjaDpibG9ja107Cisg
ICAgICAgICAgICBjb250ZXh0Lm1vZHVsZUxvYWRlckRlbGVnYXRlID0gY29udGV4dDsKKyAgICAg
ICAgICAgIEpTVmFsdWUgKnByb21pc2UgPSBbY29udGV4dCBldmFsdWF0ZVNjcmlwdDpAImltcG9y
dCgnLi4vb3RoZXJEaXJlY3RvcnkvYmF6LmpzJyk7IiB3aXRoU291cmNlVVJMOltOU1VSTCBmaWxl
VVJMV2l0aFBhdGg6QCIvZGlyZWN0b3J5IiBpc0RpcmVjdG9yeTpZRVNdXTsKKyAgICAgICAgICAg
IEpTVmFsdWUgKm51bGwgPSBbSlNWYWx1ZSB2YWx1ZVdpdGhOdWxsSW5Db250ZXh0OmNvbnRleHRd
OworICAgICAgICAgICAgY2hlY2tNb2R1bGVDb2RlUmFuKGNvbnRleHQsIHByb21pc2UsIG51bGwp
OworICAgICAgICAgICAgSlNDOjpPcHRpb25zOjpmb3JjZURpc2tDYWNoZSgpID0gZmFsc2U7Cisg
ICAgICAgIH0KKworICAgICAgICBOU0ZpbGVNYW5hZ2VyKiBmaWxlTWFuYWdlciA9IFtOU0ZpbGVN
YW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXTsKKyAgICAgICAgW2ZpbGVNYW5hZ2VyIHJlbW92ZUl0ZW1B
dFVSTDpmb29QYXRoIGVycm9yOm5pbF07CisgICAgICAgIFtmaWxlTWFuYWdlciByZW1vdmVJdGVt
QXRVUkw6YmFyUGF0aCBlcnJvcjpuaWxdOworICAgICAgICBbZmlsZU1hbmFnZXIgcmVtb3ZlSXRl
bUF0VVJMOmJhelBhdGggZXJyb3I6bmlsXTsKKyAgICAgICAgW2ZpbGVNYW5hZ2VyIHJlbW92ZUl0
ZW1BdFVSTDpmb29DYWNoZVBhdGggZXJyb3I6bmlsXTsKKyAgICAgICAgW2ZpbGVNYW5hZ2VyIHJl
bW92ZUl0ZW1BdFVSTDpiYXJDYWNoZVBhdGggZXJyb3I6bmlsXTsKKyAgICAgICAgW2ZpbGVNYW5h
Z2VyIHJlbW92ZUl0ZW1BdFVSTDpiYXpDYWNoZVBhdGggZXJyb3I6bmlsXTsKKyAgICB9Cit9CisK
IEBpbnRlcmZhY2UgSlNDb250ZXh0RmlsZUxvYWRlckRlbGVnYXRlIDogSlNDb250ZXh0IDxKU01v
ZHVsZUxvYWRlckRlbGVnYXRlPgogCiArIChpbnN0YW5jZXR5cGUpbmV3Q29udGV4dDsKQEAgLTIw
MTcsNyArMjA3OSw3IEBAIHN0YXRpYyBOU1VSTCAqcmVzb2x2ZVBhdGhUb1NjcmlwdHMoKQogLSAo
dm9pZCljb250ZXh0OihKU0NvbnRleHQgKiljb250ZXh0IGZldGNoTW9kdWxlRm9ySWRlbnRpZmll
cjooSlNWYWx1ZSAqKWlkZW50aWZpZXIgd2l0aFJlc29sdmVIYW5kbGVyOihKU1ZhbHVlICopcmVz
b2x2ZSBhbmRSZWplY3RIYW5kbGVyOihKU1ZhbHVlICopcmVqZWN0CiB7CiAgICAgTlNVUkwgKmZp
bGVQYXRoID0gW05TVVJMIFVSTFdpdGhTdHJpbmc6W2lkZW50aWZpZXIgdG9TdHJpbmddXTsKLSAg
ICBhdXRvICpzY3JpcHQgPSBbSlNTY3JpcHQgc2NyaXB0RnJvbUFTQ0lJRmlsZTpmaWxlUGF0aCBp
blZpcnR1YWxNYWNoaW5lOltjb250ZXh0IHZpcnR1YWxNYWNoaW5lXSB3aXRoQ29kZVNpZ25pbmc6
bmlsIGFuZEJ5dGVjb2RlQ2FjaGU6bmlsXTsKKyAgICBhdXRvICpzY3JpcHQgPSBbSlNTY3JpcHQg
c2NyaXB0RnJvbUFTQ0lJRmlsZTpmaWxlUGF0aCBpbkNvbnRleHQ6Y29udGV4dCB3aXRoQ29kZVNp
Z25pbmc6bmlsIGFuZEJ5dGVjb2RlQ2FjaGU6bmlsXTsKICAgICBpZiAoc2NyaXB0KQogICAgICAg
ICBbcmVzb2x2ZSBjYWxsV2l0aEFyZ3VtZW50czpAW3NjcmlwdF1dOwogICAgIGVsc2UKQEAgLTIw
NDksNiArMjExMSw3IEBAIHZvaWQgdGVzdE9iamVjdGl2ZUNBUEkoKQogICAgIHRlc3RGZXRjaFdp
dGhUd29DeWNsZSgpOwogICAgIHRlc3RGZXRjaFdpdGhUaHJlZUN5Y2xlKCk7CiAgICAgdGVzdElt
cG9ydE1vZHVsZVR3aWNlKCk7CisgICAgdGVzdEJ5dGVjb2RlQ2FjaGUoKTsKIAogICAgIHRlc3RM
b2FkZXJSZWplY3RzTmlsU2NyaXB0VVJMKCk7CiAgICAgdGVzdExvYWRlclJlamVjdHNGYWlsZWRG
ZXRjaCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlu
a2VkRnVuY3Rpb25FeGVjdXRhYmxlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5jcHAKaW5kZXggYjExNGQzOWU5MDIyNmE1MTBi
MjQ1ODUyMWQ5NWM2M2Y3NTAzM2VlYi4uZThkYzE5ODFmMGU2M2MyNjAxNjA5ZDI0MGI5YTM3OTcx
OWNhYTU4OSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlu
a2VkRnVuY3Rpb25FeGVjdXRhYmxlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuY3BwCkBAIC0xOTQsNiArMTk0LDE2IEBA
IFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6
ZnJvbUdsb2JhbENvZGUoCiAgICAgcmV0dXJuIGV4ZWN1dGFibGU7CiB9CiAKK1VubGlua2VkRnVu
Y3Rpb25Db2RlQmxvY2sqIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOjp1bmxpbmtlZENvZGVC
bG9ja0ZvcihDb2RlU3BlY2lhbGl6YXRpb25LaW5kIHNwZWNpYWxpemF0aW9uS2luZCkKK3sKKyAg
ICBzd2l0Y2ggKHNwZWNpYWxpemF0aW9uS2luZCkgeworICAgIGNhc2UgQ29kZUZvckNhbGw6Cisg
ICAgICAgIHJldHVybiBtX3VubGlua2VkQ29kZUJsb2NrRm9yQ2FsbC5nZXQoKTsKKyAgICBjYXNl
IENvZGVGb3JDb25zdHJ1Y3Q6CisgICAgICAgIHJldHVybiBtX3VubGlua2VkQ29kZUJsb2NrRm9y
Q29uc3RydWN0LmdldCgpOworICAgIH0KK30KKwogVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayog
VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6OnVubGlua2VkQ29kZUJsb2NrRm9yKAogICAgIFZN
JiB2bSwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIHNw
ZWNpYWxpemF0aW9uS2luZCwgCiAgICAgRGVidWdnZXJNb2RlIGRlYnVnZ2VyTW9kZSwgUGFyc2Vy
RXJyb3ImIGVycm9yLCBTb3VyY2VQYXJzZU1vZGUgcGFyc2VNb2RlKQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFi
bGUuaAppbmRleCA2NTI2Y2Q5MGNiYmFhNjllMjZjYzBhMWMwYWM3N2I2OGMxOTVmYjU2Li5kNjM3
ZDY4YWY1YWQ2MzE1NThlYTkzYjNiODZiOWRhMDRjYjgzMTc1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFi
bGUuaApAQCAtMTA0LDYgKzEwNCw4IEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCB0eXBlUHJvZmls
aW5nRW5kT2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV90eXBlUHJvZmlsaW5nRW5kT2Zmc2V0OyB9
CiAgICAgdm9pZCBzZXRJbnZhbGlkVHlwZVByb2ZpbGluZ09mZnNldHMoKTsKIAorICAgIFVubGlu
a2VkRnVuY3Rpb25Db2RlQmxvY2sqIHVubGlua2VkQ29kZUJsb2NrRm9yKENvZGVTcGVjaWFsaXph
dGlvbktpbmQpOworCiAgICAgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayogdW5saW5rZWRDb2Rl
QmxvY2tGb3IoCiAgICAgICAgIFZNJiwgY29uc3QgU291cmNlQ29kZSYsIENvZGVTcGVjaWFsaXph
dGlvbktpbmQsIERlYnVnZ2VyTW9kZSwKICAgICAgICAgUGFyc2VyRXJyb3ImLCBTb3VyY2VQYXJz
ZU1vZGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Tb3VyY2VD
b2RlS2V5LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1NvdXJjZUNvZGVLZXkuaApp
bmRleCBjYzNhYmUyMWZhZjU3MTRiZjk5ODAxZGZiOWVlZDQyODM0ODFmMTg5Li5iYzAyZjEyOWFi
ZjE4NWJlNzU1OGZiZDYzNTRkNTkzZjg2YzhiYjcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcGFyc2VyL1NvdXJjZUNvZGVLZXkuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcGFyc2VyL1NvdXJjZUNvZGVLZXkuaApAQCAtMTAwLDYgKzEwMCw4IEBAIHB1YmxpYzoKIAog
ICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdCB7IHJldHVybiBtX2hhc2g7IH0KIAorICAgIGNvbnN0
IFVubGlua2VkU291cmNlQ29kZSYgc291cmNlKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2VDb2Rl
OyB9CisKICAgICBzaXplX3QgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2VDb2RlLmxl
bmd0aCgpOyB9CiAKICAgICBib29sIGlzTnVsbCgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlQ29k
ZS5pc051bGwoKTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9T
b3VyY2VQcm92aWRlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Tb3VyY2VQcm92
aWRlci5oCmluZGV4IDA5YWQxNjgzNGIwYWZiN2JlOWYzMTRhZmMyZjI1MGFkODJlZGI1ZTUuLjdk
YmNjZWU3NjE2MTUwYjc1MDUyZTkyZTE3OWY4MTViNzUwOTkwYmEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU291cmNlUHJvdmlkZXIuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcGFyc2VyL1NvdXJjZVByb3ZpZGVyLmgKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5LCAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDE5IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDIs
NiArNDIsNDMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFdlYkFzc2VtYmx5LAogICAgIH07
CiAKKyAgICBjbGFzcyBDYWNoZWRCeXRlY29kZSB7CisgICAgcHVibGljOgorICAgICAgICBDYWNo
ZWRCeXRlY29kZSgpCisgICAgICAgICAgICA6IENhY2hlZEJ5dGVjb2RlKG51bGxwdHIsIDApCisg
ICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIENhY2hlZEJ5dGVjb2RlKGNvbnN0IHZvaWQq
IGRhdGEsIHNpemVfdCBzaXplKQorICAgICAgICAgICAgOiBtX293bmVkKGZhbHNlKQorICAgICAg
ICAgICAgLCBtX3NpemUoc2l6ZSkKKyAgICAgICAgICAgICwgbV9kYXRhKGRhdGEpCisgICAgICAg
IHsKKyAgICAgICAgfQorCisgICAgICAgIENhY2hlZEJ5dGVjb2RlKE1hbGxvY1B0cjx1aW50OF90
PiYmIGRhdGEsIHNpemVfdCBzaXplKQorICAgICAgICAgICAgOiBtX293bmVkKHRydWUpCisgICAg
ICAgICAgICAsIG1fc2l6ZShzaXplKQorICAgICAgICAgICAgLCBtX2RhdGEoZGF0YS5sZWFrUHRy
KCkpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIGNvbnN0IHZvaWQqIGRhdGEoKSBj
b25zdCB7IHJldHVybiBtX2RhdGE7IH0KKyAgICAgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJl
dHVybiBtX3NpemU7IH0KKworICAgICAgICB+Q2FjaGVkQnl0ZWNvZGUoKQorICAgICAgICB7Cisg
ICAgICAgICAgICBpZiAobV9kYXRhICYmIG1fb3duZWQpCisgICAgICAgICAgICAgICAgZmFzdEZy
ZWUoY29uc3RfY2FzdDx2b2lkKj4obV9kYXRhKSk7CisgICAgICAgIH0KKworICAgIHByaXZhdGU6
CisgICAgICAgIGJvb2wgbV9vd25lZDsKKyAgICAgICAgc2l6ZV90IG1fc2l6ZTsKKyAgICAgICAg
Y29uc3Qgdm9pZCogbV9kYXRhOworICAgIH07CisKKwogICAgIGNsYXNzIFNvdXJjZVByb3ZpZGVy
IDogcHVibGljIFJlZkNvdW50ZWQ8U291cmNlUHJvdmlkZXI+IHsKICAgICBwdWJsaWM6CiAgICAg
ICAgIHN0YXRpYyBjb25zdCBpbnRwdHJfdCBudWxsSUQgPSAxOwpAQCAtNTIsNiArODksOCBAQCBu
YW1lc3BhY2UgSlNDIHsKIAogICAgICAgICB2aXJ0dWFsIHVuc2lnbmVkIGhhc2goKSBjb25zdCA9
IDA7CiAgICAgICAgIHZpcnR1YWwgU3RyaW5nVmlldyBzb3VyY2UoKSBjb25zdCA9IDA7CisgICAg
ICAgIHZpcnR1YWwgY29uc3QgQ2FjaGVkQnl0ZWNvZGUqIGNhY2hlZEJ5dGVjb2RlKCkgY29uc3Qg
eyByZXR1cm4gbnVsbHB0cjsgfQorCiAgICAgICAgIFN0cmluZ1ZpZXcgZ2V0UmFuZ2UoaW50IHN0
YXJ0LCBpbnQgZW5kKSBjb25zdAogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gc291cmNl
KCkuc3Vic3RyaW5nKHN0YXJ0LCBlbmQgLSBzdGFydCk7CkBAIC0xMDQsMTUgKzE0MywzOCBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJldHVybiBtX3NvdXJjZS5nZXQoKTsKICAgICAg
ICAgfQogCi0gICAgcHJpdmF0ZToKKyAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIFN0cmluZ1NvdXJj
ZVByb3ZpZGVyKGNvbnN0IFN0cmluZyYgc291cmNlLCBjb25zdCBTb3VyY2VPcmlnaW4mIHNvdXJj
ZU9yaWdpbiwgVVJMJiYgdXJsLCBjb25zdCBUZXh0UG9zaXRpb24mIHN0YXJ0UG9zaXRpb24sIFNv
dXJjZVByb3ZpZGVyU291cmNlVHlwZSBzb3VyY2VUeXBlKQogICAgICAgICAgICAgOiBTb3VyY2VQ
cm92aWRlcihzb3VyY2VPcmlnaW4sIFdURk1vdmUodXJsKSwgc3RhcnRQb3NpdGlvbiwgc291cmNl
VHlwZSkKICAgICAgICAgICAgICwgbV9zb3VyY2Uoc291cmNlLmlzTnVsbCgpID8gKlN0cmluZ0lt
cGw6OmVtcHR5KCkgOiAqc291cmNlLmltcGwoKSkKICAgICAgICAgewogICAgICAgICB9CiAKKyAg
ICBwcml2YXRlOgogICAgICAgICBSZWY8U3RyaW5nSW1wbD4gbV9zb3VyY2U7CiAgICAgfTsKKwor
ICAgIGNsYXNzIENhY2hlZEJ5dGVjb2RlU291cmNlUHJvdmlkZXIgOiBwdWJsaWMgU3RyaW5nU291
cmNlUHJvdmlkZXIgeworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIFJlZjxDYWNoZWRCeXRl
Y29kZVNvdXJjZVByb3ZpZGVyPiBjcmVhdGUoY29uc3QgU3RyaW5nJiBzb3VyY2UsIGNvbnN0IENh
Y2hlZEJ5dGVjb2RlKiBjYWNoZWRCeXRlY29kZSwgY29uc3QgU291cmNlT3JpZ2luJiBzb3VyY2VP
cmlnaW4sIFVSTCYmIHVybCwgY29uc3QgVGV4dFBvc2l0aW9uJiBzdGFydFBvc2l0aW9uID0gVGV4
dFBvc2l0aW9uKCksIFNvdXJjZVByb3ZpZGVyU291cmNlVHlwZSBzb3VyY2VUeXBlID0gU291cmNl
UHJvdmlkZXJTb3VyY2VUeXBlOjpQcm9ncmFtKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gYWRvcHRSZWYoKm5ldyBDYWNoZWRCeXRlY29kZVNvdXJjZVByb3ZpZGVyKHNvdXJjZSwgY2Fj
aGVkQnl0ZWNvZGUsIHNvdXJjZU9yaWdpbiwgV1RGTW92ZSh1cmwpLCBzdGFydFBvc2l0aW9uLCBz
b3VyY2VUeXBlKSk7CisgICAgICAgIH0KKworICAgICAgICBjb25zdCBDYWNoZWRCeXRlY29kZSog
Y2FjaGVkQnl0ZWNvZGUoKSBjb25zdCBvdmVycmlkZQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gbV9jYWNoZWRCeXRlY29kZTsKKyAgICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAg
ICAgQ2FjaGVkQnl0ZWNvZGVTb3VyY2VQcm92aWRlcihjb25zdCBTdHJpbmcmIHNvdXJjZSwgY29u
c3QgQ2FjaGVkQnl0ZWNvZGUqIGNhY2hlZEJ5dGVjb2RlLCBjb25zdCBTb3VyY2VPcmlnaW4mIHNv
dXJjZU9yaWdpbiwgVVJMJiYgdXJsLCBjb25zdCBUZXh0UG9zaXRpb24mIHN0YXJ0UG9zaXRpb24s
IFNvdXJjZVByb3ZpZGVyU291cmNlVHlwZSBzb3VyY2VUeXBlKQorICAgICAgICAgICAgOiBTdHJp
bmdTb3VyY2VQcm92aWRlcihzb3VyY2UsIHNvdXJjZU9yaWdpbiwgV1RGTW92ZSh1cmwpLCBzdGFy
dFBvc2l0aW9uLCBzb3VyY2VUeXBlKQorICAgICAgICAgICAgLCBtX2NhY2hlZEJ5dGVjb2RlKGNh
Y2hlZEJ5dGVjb2RlKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBjb25zdCBDYWNo
ZWRCeXRlY29kZSogbV9jYWNoZWRCeXRlY29kZTsKKyAgICB9OwogICAgIAogI2lmIEVOQUJMRShX
RUJBU1NFTUJMWSkKICAgICBjbGFzcyBXZWJBc3NlbWJseVNvdXJjZVByb3ZpZGVyIDogcHVibGlj
IFNvdXJjZVByb3ZpZGVyIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJz
ZXIvVW5saW5rZWRTb3VyY2VDb2RlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1Vu
bGlua2VkU291cmNlQ29kZS5oCmluZGV4IGFhYWFkM2Y0MTJmOGYzZmE1YmMxZjJmZWJmYjE0Y2M3
NGRlMjI0MjQuLmZhZTBlMzUxZWFiZTUwZmI4YTRjNTM5Mjg5ZjM1Yjg2MmQxN2RiNzcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvVW5saW5rZWRTb3VyY2VDb2RlLmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9VbmxpbmtlZFNvdXJjZUNvZGUuaApA
QCAtODEsNiArODEsMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgYm9vbCBpc0hhc2hU
YWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJvdmlkZXIuaXNIYXNoVGFibGVE
ZWxldGVkVmFsdWUoKTsgfQogCisgICAgICAgIGNvbnN0IFNvdXJjZVByb3ZpZGVyJiBwcm92aWRl
cigpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAqbV9wcm92aWRlcjsKKyAg
ICAgICAgfQorCiAgICAgICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdAogICAgICAgICB7CiAgICAg
ICAgICAgICBBU1NFUlQobV9wcm92aWRlcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9Db2RlQ2FjaGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQ29kZUNhY2hlLmNwcAppbmRleCBjMzJkMjA0YjZjZDg5NjgxODFjYjBkMWRmMGVhYjgzZWMx
MTgxOWQ0Li44OTVhODQwYjkxNTZjZWI5MDM5NzA1MmNhMGNkNzExNmQzMzg5MTU2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db2RlQ2FjaGUuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvZGVDYWNoZS5jcHAKQEAgLTE2Miw0ICsxNjIs
NzIgQEAgdm9pZCBDb2RlQ2FjaGU6OndyaXRlKFZNJiB2bSkKICAgICAgICAgd3JpdGVDb2RlQmxv
Y2sodm0sIGl0LmtleSwgaXQudmFsdWUpOwogfQogCit2b2lkIGdlbmVyYXRlVW5saW5rZWRDb2Rl
QmxvY2tGb3JGdW5jdGlvbnMoVk0mIHZtLCBVbmxpbmtlZENvZGVCbG9jayogdW5saW5rZWRDb2Rl
QmxvY2ssIGNvbnN0IFNvdXJjZUNvZGUmIHBhcmVudFNvdXJjZSwgRGVidWdnZXJNb2RlIGRlYnVn
Z2VyTW9kZSwgUGFyc2VyRXJyb3ImIGVycm9yKQoreworICAgIGF1dG8gZ2VuZXJhdGUgPSBbJl0o
VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIHVubGlua2VkRXhlY3V0YWJsZSwgQ29kZVNwZWNp
YWxpemF0aW9uS2luZCBjb25zdHJ1Y3RvcktpbmQpIHsKKyAgICAgICAgaWYgKGNvbnN0cnVjdG9y
S2luZCA9PSBDb2RlRm9yQ29uc3RydWN0ICYmIFNvdXJjZVBhcnNlTW9kZVNldChTb3VyY2VQYXJz
ZU1vZGU6OkFzeW5jQXJyb3dGdW5jdGlvbk1vZGUsIFNvdXJjZVBhcnNlTW9kZTo6QXN5bmNNZXRo
b2RNb2RlLCBTb3VyY2VQYXJzZU1vZGU6OkFzeW5jRnVuY3Rpb25Nb2RlKS5jb250YWlucyh1bmxp
bmtlZEV4ZWN1dGFibGUtPnBhcnNlTW9kZSgpKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAg
ICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSB1bmxpbmtlZEV4ZWN1dGFibGUt
Pmxpbmsodm0sIHBhcmVudFNvdXJjZSk7CisgICAgICAgIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJj
ZSA9IGV4ZWN1dGFibGUtPnNvdXJjZSgpOworICAgICAgICBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJs
b2NrKiB1bmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrID0gdW5saW5rZWRFeGVjdXRhYmxlLT51bmxp
bmtlZENvZGVCbG9ja0Zvcih2bSwgc291cmNlLCBjb25zdHJ1Y3RvcktpbmQsIGRlYnVnZ2VyTW9k
ZSwgZXJyb3IsIHVubGlua2VkRXhlY3V0YWJsZS0+cGFyc2VNb2RlKCkpOworICAgICAgICBpZiAo
dW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jaykKKyAgICAgICAgICAgIGdlbmVyYXRlVW5saW5rZWRD
b2RlQmxvY2tGb3JGdW5jdGlvbnModm0sIHVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2ssIHNvdXJj
ZSwgZGVidWdnZXJNb2RlLCBlcnJvcik7CisgICAgfTsKKworICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCB1bmxpbmtlZENvZGVCbG9jay0+bnVtYmVyT2ZGdW5jdGlvbkRlY2xzKCk7IGkrKykg
eworICAgICAgICBnZW5lcmF0ZSh1bmxpbmtlZENvZGVCbG9jay0+ZnVuY3Rpb25EZWNsKGkpLCBD
b2RlRm9yQ2FsbCk7CisgICAgICAgIGdlbmVyYXRlKHVubGlua2VkQ29kZUJsb2NrLT5mdW5jdGlv
bkRlY2woaSksIENvZGVGb3JDb25zdHJ1Y3QpOworICAgIH0KKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgdW5saW5rZWRDb2RlQmxvY2stPm51bWJlck9mRnVuY3Rpb25FeHBycygpOyBpKysp
IHsKKyAgICAgICAgZ2VuZXJhdGUodW5saW5rZWRDb2RlQmxvY2stPmZ1bmN0aW9uRXhwcihpKSwg
Q29kZUZvckNhbGwpOworICAgICAgICBnZW5lcmF0ZSh1bmxpbmtlZENvZGVCbG9jay0+ZnVuY3Rp
b25FeHByKGkpLCBDb2RlRm9yQ29uc3RydWN0KTsKKyAgICB9Cit9CisKK3ZvaWQgd3JpdGVDb2Rl
QmxvY2soVk0mIHZtLCBjb25zdCBTb3VyY2VDb2RlS2V5JiBrZXksIGNvbnN0IFNvdXJjZUNvZGVW
YWx1ZSYgdmFsdWUpCit7CisjaWYgT1MoREFSV0lOKQorICAgIGNvbnN0IGNoYXIqIGNhY2hlUGF0
aCA9IE9wdGlvbnM6OmRpc2tDYWNoZVBhdGgoKTsKKyAgICBpZiAoTElLRUxZKCFjYWNoZVBhdGgp
KQorICAgICAgICByZXR1cm47CisKKyAgICBVbmxpbmtlZENvZGVCbG9jayogY29kZUJsb2NrID0g
anNEeW5hbWljQ2FzdDxVbmxpbmtlZENvZGVCbG9jayo+KHZtLCB2YWx1ZS5jZWxsLmdldCgpKTsK
KyAgICBpZiAoIWNvZGVCbG9jaykKKyAgICAgICAgcmV0dXJuOworCisgICAgdW5zaWduZWQgaGFz
aCA9IGtleS5oYXNoKCk7CisgICAgY2hhciBmaWxlbmFtZVs1MTJdOworICAgIGludCBjb3VudCA9
IHNucHJpbnRmKGZpbGVuYW1lLCA1MTIsICIlcy8ldS5jYWNoZSIsIGNhY2hlUGF0aCwgaGFzaCk7
CisgICAgaWYgKGNvdW50IDwgMCB8fCBjb3VudCA+IDUxMikKKyAgICAgICAgcmV0dXJuOworCisg
ICAgc3RkOjpwYWlyPE1hbGxvY1B0cjx1aW50OF90Piwgc2l6ZV90PiByZXN1bHQgPSBlbmNvZGVD
b2RlQmxvY2sodm0sIGtleSwgY29kZUJsb2NrKTsKKworICAgIGludCBmZCA9IG9wZW4oZmlsZW5h
bWUsIE9fQ1JFQVQgfCBPX1dST05MWSwgMDY2Nik7CisgICAgaWYgKGZkID09IC0xKQorICAgICAg
ICByZXR1cm47CisgICAgaW50IHJjID0gZmxvY2soZmQsIExPQ0tfRVggfCBMT0NLX05CKTsKKyAg
ICBpZiAoIXJjKQorICAgICAgICA6OndyaXRlKGZkLCByZXN1bHQuZmlyc3QuZ2V0KCksIHJlc3Vs
dC5zZWNvbmQpOworICAgIGNsb3NlKGZkKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHZtKTsK
KyAgICBVTlVTRURfUEFSQU0oa2V5KTsKKyAgICBVTlVTRURfUEFSQU0odmFsdWUpOworI2VuZGlm
Cit9CisKK0NhY2hlZEJ5dGVjb2RlIHNlcmlhbGl6ZUJ5dGVjb2RlKFZNJiB2bSwgVW5saW5rZWRD
b2RlQmxvY2sqIGNvZGVCbG9jaywgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBTb3VyY2VDb2Rl
VHlwZSBjb2RlVHlwZSwgSlNQYXJzZXJTdHJpY3RNb2RlIHN0cmljdE1vZGUsIEpTUGFyc2VyU2Ny
aXB0TW9kZSBzY3JpcHRNb2RlLCBEZWJ1Z2dlck1vZGUgZGVidWdnZXJNb2RlKQoreworICAgIFNv
dXJjZUNvZGVLZXkga2V5KAorICAgICAgICBzb3VyY2UsIFN0cmluZygpLCBjb2RlVHlwZSwgc3Ry
aWN0TW9kZSwgc2NyaXB0TW9kZSwKKyAgICAgICAgRGVyaXZlZENvbnRleHRUeXBlOjpOb25lLCBF
dmFsQ29udGV4dFR5cGU6Ok5vbmUsIGZhbHNlLCBkZWJ1Z2dlck1vZGUsCisgICAgICAgIHZtLnR5
cGVQcm9maWxlcigpID8gVHlwZVByb2ZpbGVyRW5hYmxlZDo6WWVzIDogVHlwZVByb2ZpbGVyRW5h
YmxlZDo6Tm8sCisgICAgICAgIHZtLmNvbnRyb2xGbG93UHJvZmlsZXIoKSA/IENvbnRyb2xGbG93
UHJvZmlsZXJFbmFibGVkOjpZZXMgOiBDb250cm9sRmxvd1Byb2ZpbGVyRW5hYmxlZDo6Tm8sCisg
ICAgICAgIFdURjo6bnVsbG9wdCk7CisgICAgc3RkOjpwYWlyPE1hbGxvY1B0cjx1aW50OF90Piwg
c2l6ZV90PiByZXN1bHQgPSBlbmNvZGVDb2RlQmxvY2sodm0sIGtleSwgY29kZUJsb2NrKTsKKyAg
ICByZXR1cm4gQ2FjaGVkQnl0ZWNvZGUgeyBXVEZNb3ZlKHJlc3VsdC5maXJzdCksIHJlc3VsdC5z
ZWNvbmQgfTsKK30KKwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQ29kZUNhY2hlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db2RlQ2FjaGUu
aAppbmRleCA5OTM5NWYyY2QyODQxMTM5YTAzNWM4YjE1ODliYjkzOWM2OWM1NzAyLi4wZjI0ZDNm
ODk0ODJiNzhhNjg2M2ZkZjhiMzE5M2ExY2ZhZDMxNjk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Db2RlQ2FjaGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Db2RlQ2FjaGUuaApAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgIlN0cm9u
Z0lubGluZXMuaCIKICNpbmNsdWRlICJVbmxpbmtlZENvZGVCbG9jay5oIgogI2luY2x1ZGUgIlVu
bGlua2VkRXZhbENvZGVCbG9jay5oIgorI2luY2x1ZGUgIlVubGlua2VkRnVuY3Rpb25Db2RlQmxv
Y2suaCIKICNpbmNsdWRlICJVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2suaCIKICNpbmNs
dWRlICJVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2suaCIKICNpbmNsdWRlIDxzeXMvc3RhdC5oPgpA
QCAtNjAsNiArNjEsMTUgQEAgY2xhc3MgVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrOwogY2xhc3Mg
Vk07CiBjbGFzcyBWYXJpYWJsZUVudmlyb25tZW50OwogCituYW1lc3BhY2UgQ29kZUNhY2hlSW50
ZXJuYWwgeworc3RhdGljIGNvbnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNlOworfSAvLyBuYW1lc3Bh
Y2UgQ29kZUNhY2hlSW50ZXJuYWwKKworI2RlZmluZSBWRVJCT1NFX0xPRyguLi4pIGRvIHsgXAor
ICAgIGlmIChDb2RlQ2FjaGVJbnRlcm5hbDo6dmVyYm9zZSkgXAorICAgICAgICBkYXRhTG9nTG4o
IihKU0M6OkNvZGVDYWNoZSkgIiwgX19WQV9BUkdTX18pOyBcCit9IHdoaWxlIChmYWxzZSkKKwog
c3RydWN0IFNvdXJjZUNvZGVWYWx1ZSB7CiAgICAgU291cmNlQ29kZVZhbHVlKCkKICAgICB7CkBA
IC05Nyw2ICsxMDcsMTYgQEAgcHVibGljOgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFVubGlua2Vk
Q29kZUJsb2NrVHlwZT4KICAgICBVbmxpbmtlZENvZGVCbG9ja1R5cGUqIGZldGNoRnJvbURpc2tJ
bXBsKFZNJiB2bSwgY29uc3QgU291cmNlQ29kZUtleSYga2V5KQogICAgIHsKKyAgICAgICAgewor
ICAgICAgICAgICAgY29uc3QgYXV0byogY2FjaGVkQnl0ZWNvZGUgPSBrZXkuc291cmNlKCkucHJv
dmlkZXIoKS5jYWNoZWRCeXRlY29kZSgpOworICAgICAgICAgICAgaWYgKGNhY2hlZEJ5dGVjb2Rl
ICYmIGNhY2hlZEJ5dGVjb2RlLT5zaXplKCkpIHsKKyAgICAgICAgICAgICAgICBWRVJCT1NFX0xP
RygiRm91bmQgY2FjaGVkIENvZGVCbG9jayBpbiB0aGUgU291cmNlUHJvdmlkZXIiKTsKKyAgICAg
ICAgICAgICAgICBVbmxpbmtlZENvZGVCbG9ja1R5cGUqIHVubGlua2VkQ29kZUJsb2NrID0gZGVj
b2RlQ29kZUJsb2NrPFVubGlua2VkQ29kZUJsb2NrVHlwZT4odm0sIGtleSwgY2FjaGVkQnl0ZWNv
ZGUtPmRhdGEoKSwgY2FjaGVkQnl0ZWNvZGUtPnNpemUoKSk7CisgICAgICAgICAgICAgICAgaWYg
KHVubGlua2VkQ29kZUJsb2NrKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5saW5rZWRD
b2RlQmxvY2s7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKwogI2lmIE9TKERBUldJTikKICAg
ICAgICAgY29uc3QgY2hhciogY2FjaGVQYXRoID0gT3B0aW9uczo6ZGlza0NhY2hlUGF0aCgpOwog
ICAgICAgICBpZiAoIWNhY2hlUGF0aCkKQEAgLTEyMSwxNSArMTQxLDIwIEBAIHB1YmxpYzoKICAg
ICAgICAgc3RydWN0IHN0YXQgc2I7CiAgICAgICAgIGludCByZXMgPSBmc3RhdChmZCwgJnNiKTsK
ICAgICAgICAgc2l6ZV90IHNpemUgPSBzdGF0aWNfY2FzdDxzaXplX3Q+KHNiLnN0X3NpemUpOwot
ICAgICAgICBpZiAocmVzIHx8ICFzaXplKQorICAgICAgICBpZiAocmVzIHx8ICFzaXplKSB7Cisg
ICAgICAgICAgICBjbG9zZShmZCk7CiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAg
ICAgfQogCi0gICAgICAgIGNvbnN0IHZvaWQqIGJ1ZmZlciA9IG1tYXAobnVsbHB0ciwgc2l6ZSwg
UFJPVF9SRUFELCBNQVBfUFJJVkFURSwgZmQsIDApOworICAgICAgICB2b2lkKiBidWZmZXIgPSBt
bWFwKG51bGxwdHIsIHNpemUsIFBST1RfUkVBRCwgTUFQX1BSSVZBVEUsIGZkLCAwKTsKICAgICAg
ICAgVW5saW5rZWRDb2RlQmxvY2tUeXBlKiB1bmxpbmtlZENvZGVCbG9jayA9IGRlY29kZUNvZGVC
bG9jazxVbmxpbmtlZENvZGVCbG9ja1R5cGU+KHZtLCBrZXksIGJ1ZmZlciwgc2l6ZSk7CisgICAg
ICAgIG11bm1hcChidWZmZXIsIHNpemUpOwogCiAgICAgICAgIGlmICghdW5saW5rZWRDb2RlQmxv
Y2spCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAorCisgICAgICAgIFZFUkJPU0VfTE9H
KCJGb3VuZCBjYWNoZWQgQ29kZUJsb2NrIG9uIGRpc2siKTsKICAgICAgICAgYWRkQ2FjaGUoa2V5
LCBTb3VyY2VDb2RlVmFsdWUodm0sIHVubGlua2VkQ29kZUJsb2NrLCBtX2FnZSkpOwogICAgICAg
ICByZXR1cm4gdW5saW5rZWRDb2RlQmxvY2s7CiAjZWxzZQpAQCAtMTU4LDYgKzE4Myw3IEBAIHB1
YmxpYzoKICAgICB7CiAgICAgICAgIHBydW5lKCk7CiAKKyAgICAgICAgVkVSQk9TRV9MT0coIlRy
eWluZyB0byBmaW5kIGNhY2hlZCBDb2RlQmxvY2sgZm9yICIsIGtleS5zb3VyY2UoKS5wcm92aWRl
cigpLnVybCgpLnN0cmluZygpKTsKICAgICAgICAgaXRlcmF0b3IgZmluZFJlc3VsdCA9IG1fbWFw
LmZpbmQoa2V5KTsKICAgICAgICAgaWYgKGZpbmRSZXN1bHQgPT0gbV9tYXAuZW5kKCkpCiAgICAg
ICAgICAgICByZXR1cm4gZmV0Y2hGcm9tRGlzazxVbmxpbmtlZENvZGVCbG9ja1R5cGU+KHZtLCBr
ZXkpOwpAQCAtMTgwLDYgKzIwNiw3IEBAIHB1YmxpYzoKICAgICAgICAgZmluZFJlc3VsdC0+dmFs
dWUuYWdlID0gbV9hZ2U7CiAgICAgICAgIG1fYWdlICs9IGtleS5sZW5ndGgoKTsKIAorICAgICAg
ICBWRVJCT1NFX0xPRygiRm91bmQgY2FjaGVkIENvZGVCbG9jayBpbiBtZW1vcnkiKTsKICAgICAg
ICAgcmV0dXJuIGpzQ2FzdDxVbmxpbmtlZENvZGVCbG9ja1R5cGUqPihmaW5kUmVzdWx0LT52YWx1
ZS5jZWxsLmdldCgpKTsKICAgICB9CiAKQEAgLTMyMiwzNiArMzQ5LDIwIEBAIFVubGlua2VkQ29k
ZUJsb2NrVHlwZSogZ2VuZXJhdGVVbmxpbmtlZENvZGVCbG9jayhWTSYgdm0sIEV4ZWN1dGFibGVU
eXBlKiBleGVjdXRhCiAgICAgcmV0dXJuIHVubGlua2VkQ29kZUJsb2NrOwogfQogCi1BTFdBWVNf
SU5MSU5FIHN0YXRpYyB2b2lkIHdyaXRlQ29kZUJsb2NrKFZNJiB2bSwgY29uc3QgU291cmNlQ29k
ZUtleSYga2V5LCBjb25zdCBTb3VyY2VDb2RlVmFsdWUmIHZhbHVlKQordm9pZCBnZW5lcmF0ZVVu
bGlua2VkQ29kZUJsb2NrRm9yRnVuY3Rpb25zKFZNJiwgVW5saW5rZWRDb2RlQmxvY2sqLCBjb25z
dCBTb3VyY2VDb2RlJiwgRGVidWdnZXJNb2RlLCBQYXJzZXJFcnJvciYpOworCit0ZW1wbGF0ZSA8
Y2xhc3MgVW5saW5rZWRDb2RlQmxvY2tUeXBlLCBjbGFzcyBFeGVjdXRhYmxlVHlwZT4KK1VubGlu
a2VkQ29kZUJsb2NrVHlwZSogcmVjdXJzaXZlbHlHZW5lcmF0ZVVubGlua2VkQ29kZUJsb2NrKFZN
JiB2bSwgRXhlY3V0YWJsZVR5cGUqIGV4ZWN1dGFibGUsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJj
ZSwgSlNQYXJzZXJTdHJpY3RNb2RlIHN0cmljdE1vZGUsIEpTUGFyc2VyU2NyaXB0TW9kZSBzY3Jp
cHRNb2RlLCBEZWJ1Z2dlck1vZGUgZGVidWdnZXJNb2RlLCBQYXJzZXJFcnJvciYgZXJyb3IsIEV2
YWxDb250ZXh0VHlwZSBldmFsQ29udGV4dFR5cGUsIGNvbnN0IFZhcmlhYmxlRW52aXJvbm1lbnQq
IHZhcmlhYmxlc1VuZGVyVERaKQogewotI2lmIE9TKERBUldJTikKLSAgICBjb25zdCBjaGFyKiBj
YWNoZVBhdGggPSBPcHRpb25zOjpkaXNrQ2FjaGVQYXRoKCk7Ci0gICAgaWYgKExJS0VMWSghY2Fj
aGVQYXRoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgVW5saW5rZWRDb2RlQmxvY2sqIGNvZGVC
bG9jayA9IGpzRHluYW1pY0Nhc3Q8VW5saW5rZWRDb2RlQmxvY2sqPih2bSwgdmFsdWUuY2VsbC5n
ZXQoKSk7Ci0gICAgaWYgKCFjb2RlQmxvY2spCi0gICAgICAgIHJldHVybjsKLQotICAgIHVuc2ln
bmVkIGhhc2ggPSBrZXkuaGFzaCgpOwotICAgIGNoYXIgZmlsZW5hbWVbNTEyXTsKLSAgICBpbnQg
Y291bnQgPSBzbnByaW50ZihmaWxlbmFtZSwgNTEyLCAiJXMvJXUuY2FjaGUiLCBjYWNoZVBhdGgs
IGhhc2gpOwotICAgIGlmIChjb3VudCA8IDAgfHwgY291bnQgPiA1MTIpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIHN0ZDo6cGFpcjxNYWxsb2NQdHI8dWludDhfdD4sIHNpemVfdD4gcmVzdWx0ID0g
ZW5jb2RlQ29kZUJsb2NrKHZtLCBrZXksIGNvZGVCbG9jayk7Ci0KLSAgICBpbnQgZmQgPSBvcGVu
KGZpbGVuYW1lLCBPX0NSRUFUIHwgT19XUk9OTFksIDA2NjYpOwotICAgIGludCByYyA9IGZsb2Nr
KGZkLCBMT0NLX0VYIHwgTE9DS19OQik7Ci0gICAgaWYgKCFyYykKLSAgICAgICAgOjp3cml0ZShm
ZCwgcmVzdWx0LmZpcnN0LmdldCgpLCByZXN1bHQuc2Vjb25kKTsKLSAgICBjbG9zZShmZCk7Ci0j
ZWxzZQotICAgIFVOVVNFRF9QQVJBTSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKGtleSk7Ci0gICAg
VU5VU0VEX1BBUkFNKHZhbHVlKTsKLSNlbmRpZgorICAgIFVubGlua2VkQ29kZUJsb2NrVHlwZSog
dW5saW5rZWRDb2RlQmxvY2sgPSBnZW5lcmF0ZVVubGlua2VkQ29kZUJsb2NrPFVubGlua2VkQ29k
ZUJsb2NrVHlwZSwgRXhlY3V0YWJsZVR5cGU+KHZtLCBleGVjdXRhYmxlLCBzb3VyY2UsIHN0cmlj
dE1vZGUsIHNjcmlwdE1vZGUsIGRlYnVnZ2VyTW9kZSwgZXJyb3IsIGV2YWxDb250ZXh0VHlwZSwg
dmFyaWFibGVzVW5kZXJURFopOworICAgIGlmICghdW5saW5rZWRDb2RlQmxvY2spCisgICAgICAg
IHJldHVybiBudWxscHRyOworCisgICAgZ2VuZXJhdGVVbmxpbmtlZENvZGVCbG9ja0ZvckZ1bmN0
aW9ucyh2bSwgdW5saW5rZWRDb2RlQmxvY2ssIHNvdXJjZSwgZGVidWdnZXJNb2RlLCBlcnJvcik7
CisgICAgcmV0dXJuIHVubGlua2VkQ29kZUJsb2NrOwogfQogCit2b2lkIHdyaXRlQ29kZUJsb2Nr
KFZNJiwgY29uc3QgU291cmNlQ29kZUtleSYsIGNvbnN0IFNvdXJjZUNvZGVWYWx1ZSYpOworQ2Fj
aGVkQnl0ZWNvZGUgc2VyaWFsaXplQnl0ZWNvZGUoVk0mLCBVbmxpbmtlZENvZGVCbG9jayosIGNv
bnN0IFNvdXJjZUNvZGUmLCBTb3VyY2VDb2RlVHlwZSwgSlNQYXJzZXJTdHJpY3RNb2RlLCBKU1Bh
cnNlclNjcmlwdE1vZGUsIERlYnVnZ2VyTW9kZSk7CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tcGxldGlvbi5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21wbGV0aW9uLmNwcAppbmRleCAzZmI0YWI5
ZDNhYTJlMzRiYmNkOWFkZmZhNzMwN2U3MDc2YTQ2MWFmLi45YzRhMGU0ZmM4ZjA3ZDQxYWEzMDFk
Mjc3MDM2OGVjZjgzNWM4MWZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Db21wbGV0aW9uLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9D
b21wbGV0aW9uLmNwcApAQCAtMjUsNiArMjUsNyBAQAogCiAjaW5jbHVkZSAiQ2FsbEZyYW1lLmgi
CiAjaW5jbHVkZSAiQ2F0Y2hTY29wZS5oIgorI2luY2x1ZGUgIkNvZGVDYWNoZS5oIgogI2luY2x1
ZGUgIkNvZGVQcm9maWxpbmcuaCIKICNpbmNsdWRlICJFeGNlcHRpb24uaCIKICNpbmNsdWRlICJJ
ZGVudGlmaWVySW5saW5lcy5oIgpAQCAtOTAsNiArOTEsNDQgQEAgYm9vbCBjaGVja01vZHVsZVN5
bnRheChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgUGFyc2VyRXJy
b3ImIGUKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorQ2FjaGVkQnl0ZWNvZGUgZ2VuZXJhdGVCeXRl
Y29kZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgUGFyc2VyRXJy
b3ImIGVycm9yKQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgSlNMb2NrSG9sZGVy
IGxvY2sodm0pOworICAgIFJFTEVBU0VfQVNTRVJUKHZtLmF0b21pY1N0cmluZ1RhYmxlKCkgPT0g
VGhyZWFkOjpjdXJyZW50KCkuYXRvbWljU3RyaW5nVGFibGUoKSk7CisKKyAgICBQcm9ncmFtRXhl
Y3V0YWJsZSogZXhlY3V0YWJsZSA9IFByb2dyYW1FeGVjdXRhYmxlOjpjcmVhdGUoZXhlYywgc291
cmNlKTsKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gdm0udm1FbnRyeUdsb2Jh
bE9iamVjdChleGVjKTsKKworICAgIFZhcmlhYmxlRW52aXJvbm1lbnQgdmFyaWFibGVzVW5kZXJU
RFo7CisgICAgSlNQYXJzZXJTdHJpY3RNb2RlIHN0cmljdE1vZGUgPSBKU1BhcnNlclN0cmljdE1v
ZGU6Ok5vdFN0cmljdDsKKyAgICBKU1BhcnNlclNjcmlwdE1vZGUgc2NyaXB0TW9kZSA9IEpTUGFy
c2VyU2NyaXB0TW9kZTo6Q2xhc3NpYzsKKyAgICBEZWJ1Z2dlck1vZGUgZGVidWdnZXJNb2RlID0g
Z2xvYmFsT2JqZWN0LT5oYXNJbnRlcmFjdGl2ZURlYnVnZ2VyKCkgPyBEZWJ1Z2dlck9uIDogRGVi
dWdnZXJPZmY7CisgICAgRXZhbENvbnRleHRUeXBlIGV2YWxDb250ZXh0VHlwZSA9IEV2YWxDb250
ZXh0VHlwZTo6Tm9uZTsKKworICAgIFVubGlua2VkQ29kZUJsb2NrKiB1bmxpbmtlZENvZGVCbG9j
ayA9IHJlY3Vyc2l2ZWx5R2VuZXJhdGVVbmxpbmtlZENvZGVCbG9jazxVbmxpbmtlZFByb2dyYW1D
b2RlQmxvY2s+KHZtLCBleGVjdXRhYmxlLCBzb3VyY2UsIHN0cmljdE1vZGUsIHNjcmlwdE1vZGUs
IGRlYnVnZ2VyTW9kZSwgZXJyb3IsIGV2YWxDb250ZXh0VHlwZSwgJnZhcmlhYmxlc1VuZGVyVERa
KTsKKyAgICByZXR1cm4gc2VyaWFsaXplQnl0ZWNvZGUodm0sIHVubGlua2VkQ29kZUJsb2NrLCBz
b3VyY2UsIFNvdXJjZUNvZGVUeXBlOjpQcm9ncmFtVHlwZSwgc3RyaWN0TW9kZSwgc2NyaXB0TW9k
ZSwgZGVidWdnZXJNb2RlKTsKK30KKworQ2FjaGVkQnl0ZWNvZGUgZ2VuZXJhdGVNb2R1bGVCeXRl
Y29kZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgUGFyc2VyRXJy
b3ImIGVycm9yKQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgSlNMb2NrSG9sZGVy
IGxvY2sodm0pOworICAgIFJFTEVBU0VfQVNTRVJUKHZtLmF0b21pY1N0cmluZ1RhYmxlKCkgPT0g
VGhyZWFkOjpjdXJyZW50KCkuYXRvbWljU3RyaW5nVGFibGUoKSk7CisKKyAgICBNb2R1bGVQcm9n
cmFtRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlOjpjcmVh
dGUoZXhlYywgc291cmNlKTsKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gdm0u
dm1FbnRyeUdsb2JhbE9iamVjdChleGVjKTsKKworICAgIFZhcmlhYmxlRW52aXJvbm1lbnQgdmFy
aWFibGVzVW5kZXJURFo7CisgICAgSlNQYXJzZXJTdHJpY3RNb2RlIHN0cmljdE1vZGUgPSBKU1Bh
cnNlclN0cmljdE1vZGU6OlN0cmljdDsKKyAgICBKU1BhcnNlclNjcmlwdE1vZGUgc2NyaXB0TW9k
ZSA9IEpTUGFyc2VyU2NyaXB0TW9kZTo6TW9kdWxlOworICAgIERlYnVnZ2VyTW9kZSBkZWJ1Z2dl
ck1vZGUgPSBnbG9iYWxPYmplY3QtPmhhc0ludGVyYWN0aXZlRGVidWdnZXIoKSA/IERlYnVnZ2Vy
T24gOiBEZWJ1Z2dlck9mZjsKKyAgICBFdmFsQ29udGV4dFR5cGUgZXZhbENvbnRleHRUeXBlID0g
RXZhbENvbnRleHRUeXBlOjpOb25lOworCisgICAgVW5saW5rZWRDb2RlQmxvY2sqIHVubGlua2Vk
Q29kZUJsb2NrID0gcmVjdXJzaXZlbHlHZW5lcmF0ZVVubGlua2VkQ29kZUJsb2NrPFVubGlua2Vk
TW9kdWxlUHJvZ3JhbUNvZGVCbG9jaz4odm0sIGV4ZWN1dGFibGUsIHNvdXJjZSwgc3RyaWN0TW9k
ZSwgc2NyaXB0TW9kZSwgZGVidWdnZXJNb2RlLCBlcnJvciwgZXZhbENvbnRleHRUeXBlLCAmdmFy
aWFibGVzVW5kZXJURFopOworICAgIHJldHVybiBzZXJpYWxpemVCeXRlY29kZSh2bSwgdW5saW5r
ZWRDb2RlQmxvY2ssIHNvdXJjZSwgU291cmNlQ29kZVR5cGU6Ok1vZHVsZVR5cGUsIHN0cmljdE1v
ZGUsIHNjcmlwdE1vZGUsIGRlYnVnZ2VyTW9kZSk7Cit9CisKIEpTVmFsdWUgZXZhbHVhdGUoRXhl
Y1N0YXRlKiBleGVjLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIEpTVmFsdWUgdGhpc1ZhbHVl
LCBOYWtlZFB0cjxFeGNlcHRpb24+JiByZXR1cm5lZEV4Y2VwdGlvbikKIHsKICAgICBWTSYgdm0g
PSBleGVjLT52bSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Q29tcGxldGlvbi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tcGxldGlvbi5o
CmluZGV4IDgyN2U2MWYzYzYxZDBjYjdiYmU3NWE2MTI3NzEyNGZiMGRhNzJhYWUuLjVjYWNkNmRh
N2ViNzUyMDMzYjVjNDgwNmJkOGU4NDk4NmFkMGE3MDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0NvbXBsZXRpb24uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Db21wbGV0aW9uLmgKQEAgLTI4LDYgKzI4LDcgQEAKIAogbmFtZXNwYWNlIEpT
QyB7CiAKK2NsYXNzIENhY2hlZEJ5dGVjb2RlOwogY2xhc3MgRXhjZXB0aW9uOwogY2xhc3MgRXhl
Y1N0YXRlOwogY2xhc3MgSlNPYmplY3Q7CkBAIC00MSw2ICs0Miw5IEBAIEpTX0VYUE9SVF9QUklW
QVRFIGJvb2wgY2hlY2tTeW50YXgoVk0mLCBjb25zdCBTb3VyY2VDb2RlJiwgUGFyc2VyRXJyb3Im
KTsKIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgY2hlY2tTeW50YXgoRXhlY1N0YXRlKiwgY29uc3Qg
U291cmNlQ29kZSYsIEpTVmFsdWUqIGV4Y2VwdGlvbiA9IDApOwogSlNfRVhQT1JUX1BSSVZBVEUg
Ym9vbCBjaGVja01vZHVsZVN5bnRheChFeGVjU3RhdGUqLCBjb25zdCBTb3VyY2VDb2RlJiwgUGFy
c2VyRXJyb3ImKTsKIAorSlNfRVhQT1JUX1BSSVZBVEUgQ2FjaGVkQnl0ZWNvZGUgZ2VuZXJhdGVC
eXRlY29kZShFeGVjU3RhdGUqLCBjb25zdCBTb3VyY2VDb2RlJiwgUGFyc2VyRXJyb3ImKTsKK0pT
X0VYUE9SVF9QUklWQVRFIENhY2hlZEJ5dGVjb2RlIGdlbmVyYXRlTW9kdWxlQnl0ZWNvZGUoRXhl
Y1N0YXRlKiwgY29uc3QgU291cmNlQ29kZSYsIFBhcnNlckVycm9yJik7CisKIEpTX0VYUE9SVF9Q
UklWQVRFIEpTVmFsdWUgZXZhbHVhdGUoRXhlY1N0YXRlKiwgY29uc3QgU291cmNlQ29kZSYsIEpT
VmFsdWUgdGhpc1ZhbHVlLCBOYWtlZFB0cjxFeGNlcHRpb24+JiByZXR1cm5lZEV4Y2VwdGlvbik7
CiBpbmxpbmUgSlNWYWx1ZSBldmFsdWF0ZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFNvdXJjZUNv
ZGUmIHNvdXJjZUNvZGUsIEpTVmFsdWUgdGhpc1ZhbHVlID0gSlNWYWx1ZSgpKQogewpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAppbmRleCA4YjA1Y2E4MjMwMGJjNzlh
MjI5YWM2MGY4NmJiNDU2NjdlZWZkYTVlLi44NGQ3MzI2YTI0ZmJlNWE1ZGUwM2M1YzM4ZGJmMmJk
ZWRmMjM2MGNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRp
b25zLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcApA
QCAtNTI3LDkgKzUyNyw2IEBAIHN0YXRpYyB2b2lkIHJlY29tcHV0ZURlcGVuZGVudE9wdGlvbnMo
KQogCiAgICAgaWYgKCFPcHRpb25zOjp1c2VDb2RlQ2FjaGUoKSkKICAgICAgICAgT3B0aW9uczo6
ZGlza0NhY2hlUGF0aCgpID0gbnVsbHB0cjsKLQotICAgIGlmICghT3B0aW9uczo6ZGlza0NhY2hl
UGF0aCgpKQotICAgICAgICBPcHRpb25zOjpmb3JjZURpc2tDYWNoZSgpID0gZmFsc2U7CiB9CiAK
IHZvaWQgT3B0aW9uczo6aW5pdGlhbGl6ZSgpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>360008</attachid>
            <date>2019-01-24 06:32:17 -0800</date>
            <delta_ts>2019-01-24 14:37:24 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-193401-20190124153159.patch</filename>
            <type>text/plain</type>
            <size>40546</size>
            <attacher name="Tadeu Zagallo">tzagallo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQwMzQzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBh
NTE0YzhmZGRkMzRmNWNhNGE3MjlmZDQyODE0YTYyN2UxNDEwOWEzLi5hZDQ3ZmY4NThiMDQ5NDBi
NTYyMjhiMTFiMDc3NmNjZjg4YWYyNzQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw3MiBAQAorMjAxOS0wMS0yNCAgVGFkZXUgWmFnYWxsbyAgPHR6YWdhbGxvQGFwcGxlLmNv
bT4KKworICAgICAgICBBZGQgQVBJIHRvIGdlbmVyYXRlIGFuZCBjb25zdW1lIGNhY2hlZCBieXRl
Y29kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkz
NDAxCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS80NzUxNDA5OT4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgdGhlIGBnZW5lcmF0ZUJ5dGVjb2Rl
YCBhbmQgYGdlbmVyYXRlTW9kdWxlQnl0ZWNvZGVgIGZ1bmN0aW9ucyB0bworICAgICAgICBnZW5l
cmF0ZSBzZXJpYWxpemVkIGJ5dGVjb2RlIGZvciBhIGdpdmVuIGBTb3VyY2VDb2RlYC4gVGhlc2Ug
ZnVuY3Rpb25zCisgICAgICAgIHdpbGwgZWFnZXJseSBnZW5lcmF0ZSBjb2RlIGZvciBhbGwgdGhl
IG5lc3RlZCBmdW5jdGlvbnMuCisKKyAgICAgICAgQWRkaXRpb25hbGx5LCB1cGRhdGUgdGhlIEFQ
SSBtZXRob2RzIGluIEpTU2NyaXB0IHRvIGdlbmVyYXRlIGFuZCB1c2UgdGhlCisgICAgICAgIGJ5
dGVjb2RlIHdoZW4gdGhlIGJ5dGVjb2RlQ2FjaGUgcGF0aCBpcyBwcm92aWRlZC4KKworICAgICAg
ICAqIEFQSS9KU0FQSUdsb2JhbE9iamVjdC5tbToKKyAgICAgICAgKEpTQzo6SlNBUElHbG9iYWxP
YmplY3Q6Om1vZHVsZUxvYWRlckZldGNoKToKKyAgICAgICAgKiBBUEkvSlNDb250ZXh0Lm1tOgor
ICAgICAgICAqIEFQSS9KU1NjcmlwdC5oOgorICAgICAgICAqIEFQSS9KU1NjcmlwdC5tbToKKyAg
ICAgICAgKCtbSlNTY3JpcHQgc2NyaXB0V2l0aFNvdXJjZTppblZpcnR1YWxNYWNoaW5lOl0pOgor
ICAgICAgICAoK1tKU1NjcmlwdCBzY3JpcHRGcm9tQVNDSUlGaWxlOmluQ29udGV4dDp3aXRoQ29k
ZVNpZ25pbmc6YW5kQnl0ZWNvZGVDYWNoZTpdKToKKyAgICAgICAgKCtbSlNTY3JpcHQgc2NyaXB0
RnJvbVVURjhGaWxlOmluQ29udGV4dDp3aXRoQ29kZVNpZ25pbmc6YW5kQnl0ZWNvZGVDYWNoZTpd
KToKKyAgICAgICAgKC1bSlNTY3JpcHQgZGVhbGxvY10pOgorICAgICAgICAoLVtKU1NjcmlwdCBy
ZWFkQ2FjaGVdKToKKyAgICAgICAgKC1bSlNTY3JpcHQgd3JpdGVDYWNoZV0pOgorICAgICAgICAo
LVtKU1NjcmlwdCBqc1NvdXJjZUNvZGU6XSk6CisgICAgICAgICgrW0pTU2NyaXB0IHNjcmlwdEZy
b21BU0NJSUZpbGU6aW5WaXJ0dWFsTWFjaGluZTp3aXRoQ29kZVNpZ25pbmc6YW5kQnl0ZWNvZGVD
YWNoZTpdKTogRGVsZXRlZC4KKyAgICAgICAgKCtbSlNTY3JpcHQgc2NyaXB0RnJvbVVURjhGaWxl
OmluVmlydHVhbE1hY2hpbmU6d2l0aENvZGVTaWduaW5nOmFuZEJ5dGVjb2RlQ2FjaGU6XSk6IERl
bGV0ZWQuCisgICAgICAgIChnZXRKU1NjcmlwdFNvdXJjZUNvZGUpOiBEZWxldGVkLgorICAgICAg
ICAqIEFQSS9KU1NjcmlwdEludGVybmFsLmg6CisgICAgICAgICogQVBJL0pTVmlydHVhbE1hY2hp
bmUubW06CisgICAgICAgICgtW0pTVmlydHVhbE1hY2hpbmUgdm1dKToKKyAgICAgICAgKiBBUEkv
SlNWaXJ0dWFsTWFjaGluZUludGVybmFsLmg6CisgICAgICAgICogQVBJL3Rlc3RzL3Rlc3RhcGku
bW06CisgICAgICAgICh0ZXN0Qnl0ZWNvZGVDYWNoZSk6CisgICAgICAgICgtW0pTQ29udGV4dEZp
bGVMb2FkZXJEZWxlZ2F0ZSBjb250ZXh0OmZldGNoTW9kdWxlRm9ySWRlbnRpZmllcjp3aXRoUmVz
b2x2ZUhhbmRsZXI6YW5kUmVqZWN0SGFuZGxlcjpdKToKKyAgICAgICAgKHRlc3RPYmplY3RpdmVD
QVBJKToKKyAgICAgICAgKiBieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5jcHA6
CisgICAgICAgIChKU0M6OlVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOjp1bmxpbmtlZENvZGVC
bG9ja0Zvcik6CisgICAgICAgICogYnl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUu
aDoKKyAgICAgICAgKiBwYXJzZXIvU291cmNlQ29kZUtleS5oOgorICAgICAgICAoSlNDOjpTb3Vy
Y2VDb2RlS2V5Ojpzb3VyY2UgY29uc3QpOgorICAgICAgICAqIHBhcnNlci9Tb3VyY2VQcm92aWRl
ci5oOgorICAgICAgICAoSlNDOjpDYWNoZWRCeXRlY29kZTo6Q2FjaGVkQnl0ZWNvZGUpOgorICAg
ICAgICAoSlNDOjpDYWNoZWRCeXRlY29kZTo6ZGF0YSBjb25zdCk6CisgICAgICAgIChKU0M6OkNh
Y2hlZEJ5dGVjb2RlOjpzaXplIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkQnl0ZWNvZGU6
On5DYWNoZWRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OlNvdXJjZVByb3ZpZGVyOjpjYWNoZWRC
eXRlY29kZSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZEJ5dGVjb2RlU291cmNlUHJvdmlk
ZXI6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OkNhY2hlZEJ5dGVjb2RlU291cmNlUHJvdmlkZXI6
OkNhY2hlZEJ5dGVjb2RlU291cmNlUHJvdmlkZXIpOgorICAgICAgICAqIHBhcnNlci9Vbmxpbmtl
ZFNvdXJjZUNvZGUuaDoKKyAgICAgICAgKEpTQzo6VW5saW5rZWRTb3VyY2VDb2RlOjpwcm92aWRl
ciBjb25zdCk6CisgICAgICAgICogcnVudGltZS9Db2RlQ2FjaGUuY3BwOgorICAgICAgICAoSlND
OjpnZW5lcmF0ZVVubGlua2VkQ29kZUJsb2NrRm9yRnVuY3Rpb25zKToKKyAgICAgICAgKEpTQzo6
d3JpdGVDb2RlQmxvY2spOgorICAgICAgICAoSlNDOjpzZXJpYWxpemVCeXRlY29kZSk6CisgICAg
ICAgICogcnVudGltZS9Db2RlQ2FjaGUuaDoKKyAgICAgICAgKEpTQzo6Q29kZUNhY2hlTWFwOjpm
ZXRjaEZyb21EaXNrSW1wbCk6CisgICAgICAgIChKU0M6OkNvZGVDYWNoZU1hcDo6ZmluZENhY2hl
QW5kVXBkYXRlQWdlKToKKyAgICAgICAgKEpTQzo6cmVjdXJzaXZlbHlHZW5lcmF0ZVVubGlua2Vk
Q29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6d3JpdGVDb2RlQmxvY2spOiBEZWxldGVkLgorICAg
ICAgICAqIHJ1bnRpbWUvQ29tcGxldGlvbi5jcHA6CisgICAgICAgIChKU0M6OmdlbmVyYXRlQnl0
ZWNvZGUpOgorICAgICAgICAoSlNDOjpnZW5lcmF0ZU1vZHVsZUJ5dGVjb2RlKToKKyAgICAgICAg
KiBydW50aW1lL0NvbXBsZXRpb24uaDoKKyAgICAgICAgKiBydW50aW1lL09wdGlvbnMuY3BwOgor
ICAgICAgICAoSlNDOjpyZWNvbXB1dGVEZXBlbmRlbnRPcHRpb25zKToKKwogMjAxOS0wMS0yMyAg
RGF2aWQgS2lsemVyICA8ZGRraWx6ZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFtKU0NdIER1cGxp
Y2F0ZSBnbG9iYWwgdmFyaWFibGVzOiBKU0M6Om9wY29kZUxlbmd0aHMKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElHbG9iYWxPYmplY3QubW0gYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQVBJL0pTQVBJR2xvYmFsT2JqZWN0Lm1tCmluZGV4IDNjYTRhYjkyNTFmNzFh
NTVlZDI0ODRhYzExNzZjMzkwNmU5OTJjYzUuLmQ1YzIzNjVkMDg0NzE0OGM4MGY4OTkyYmMwNDQz
NTJmMzFiY2JmMGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElH
bG9iYWxPYmplY3QubW0KKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0FQSUdsb2Jh
bE9iamVjdC5tbQpAQCAtMTY0LDcgKzE2NCw2IEBAIEpTSW50ZXJuYWxQcm9taXNlKiBKU0FQSUds
b2JhbE9iamVjdDo6bW9kdWxlTG9hZGVyRmV0Y2goSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iCiAg
ICAgYXV0byBkZWZlcnJlZFByb21pc2UgPSBTdHJvbmc8SlNJbnRlcm5hbFByb21pc2VEZWZlcnJl
ZD4odm0sIGRlZmVycmVkKTsKICAgICBhdXRvIHN0cm9uZ0tleSA9IFN0cm9uZzxKU1N0cmluZz4o
dm0sIGpzU2VjdXJlQ2FzdDxKU1N0cmluZyo+KHZtLCBrZXkpKTsKICAgICBhdXRvKiByZXNvbHZl
ID0gSlNOYXRpdmVTdGRGdW5jdGlvbjo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIDEsICJyZXNv
bHZlIiwgWz1dIChFeGVjU3RhdGUqIGV4ZWMpIHsKLSAgICAgICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKICAgICAgICAgLy8gVGhpcyBjYXB0dXJlcyB0aGUgZ2xvYmFsT2JqZWN0IGJ1dCB0aGF0J3Mg
b2sgYmVjYXVzZSBvdXIgc3RydWN0dXJlIGtlZXBzIGl0IGFsaXZlIGFueXdheS4KICAgICAgICAg
SlNDb250ZXh0ICpjb250ZXh0ID0gW0pTQ29udGV4dCBjb250ZXh0V2l0aEpTR2xvYmFsQ29udGV4
dFJlZjp0b0dsb2JhbFJlZihnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSldOwogICAgICAgICBp
ZCBzY3JpcHQgPSB2YWx1ZVRvT2JqZWN0KGNvbnRleHQsIHRvUmVmKGV4ZWMsIGV4ZWMtPmFyZ3Vt
ZW50KDApKSk7CkBAIC0xNzYsOCArMTc1LDcgQEAgSlNJbnRlcm5hbFByb21pc2UqIEpTQVBJR2xv
YmFsT2JqZWN0Ojptb2R1bGVMb2FkZXJGZXRjaChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2IKICAg
ICAgICAgICAgIHJldHVybiBlbmNvZGVkSlNVbmRlZmluZWQoKTsKICAgICAgICAgfQogCi0gICAg
ICAgIGNvbnN0IFN0cmluZyYgc291cmNlID0gZ2V0SlNTY3JpcHRTb3VyY2VDb2RlKHN0YXRpY19j
YXN0PEpTU2NyaXB0ICo+KHNjcmlwdCkpOwotICAgICAgICBhcmdzLmFwcGVuZChKU1NvdXJjZUNv
ZGU6OmNyZWF0ZSh2bSwgbWFrZVNvdXJjZShzb3VyY2UsIFNvdXJjZU9yaWdpbihtb2R1bGVLZXku
c3RyaW5nKCkpLCBVUkwoeyB9LCBtb2R1bGVLZXkuc3RyaW5nKCkpLCBUZXh0UG9zaXRpb24oKSwg
SlNDOjpTb3VyY2VQcm92aWRlclNvdXJjZVR5cGU6Ok1vZHVsZSkpKTsKKyAgICAgICAgYXJncy5h
cHBlbmQoW3N0YXRpY19jYXN0PEpTU2NyaXB0ICo+KHNjcmlwdCkganNTb3VyY2VDb2RlOm1vZHVs
ZUtleV0pOwogICAgICAgICBjYWxsKGV4ZWMsIGRlZmVycmVkUHJvbWlzZS0+SlNQcm9taXNlRGVm
ZXJyZWQ6OnJlc29sdmUoKSwgYXJncywgIlRoaXMgc2hvdWxkIG5ldmVyIGJlIHNlZW4uLi4iKTsK
ICAgICAgICAgcmV0dXJuIGVuY29kZWRKU1VuZGVmaW5lZCgpOwogICAgIH0pOwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHQubW0gYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvQVBJL0pTQ29udGV4dC5tbQppbmRleCAzYzc3NmQ0ZDkwMGVlMTczMzM2MmFjMjlm
NjI0ZjQ0NGQ1NDVlN2I0Li43MjNiMWJiZGI2ODg0MjY1YTYyNmI2Y2FkYTlhY2ZiMjdiOWYwYjRm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dC5tbQorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dC5tbQpAQCAtMzQsNyArMzQsNiBA
QAogI2ltcG9ydCAiSlNHbG9iYWxPYmplY3QuaCIKICNpbXBvcnQgIkpTSW50ZXJuYWxQcm9taXNl
LmgiCiAjaW1wb3J0ICJKU01vZHVsZUxvYWRlci5oIgotI2ltcG9ydCAiSlNTY3JpcHRJbnRlcm5h
bC5oIgogI2ltcG9ydCAiSlNWYWx1ZUludGVybmFsLmgiCiAjaW1wb3J0ICJKU1ZpcnR1YWxNYWNo
aW5lSW50ZXJuYWwuaCIKICNpbXBvcnQgIkpTV3JhcHBlck1hcC5oIgpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1NjcmlwdC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS9KU1NjcmlwdC5oCmluZGV4IDhkZWQ3Y2E3NzBlZmMxYjg3MWRiMDRmMjQ1ZGI1NTMxYzYx
N2Q0ZTEuLjBmYzUwNWMzYWNjMDM1ZDhkZWUzNzkzZGNmYTdlMTM0OWVhNDI2YzQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNTY3JpcHQuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQVBJL0pTU2NyaXB0LmgKQEAgLTI1LDEwICsyNSwxNiBAQAogCiAjaW1wb3J0
IDxKYXZhU2NyaXB0Q29yZS9KU1ZhbHVlLmg+CiAKK25hbWVzcGFjZSBKU0MgeworY2xhc3MgSlNT
b3VyY2VDb2RlOworY2xhc3MgSWRlbnRpZmllcjsKK307CisKICNpZiBKU0NfT0JKQ19BUElfRU5B
QkxFRAogCiBOU19BU1NVTUVfTk9OTlVMTF9CRUdJTgogCitPQkpDX0NMQVNTIEpTQ29udGV4dDsK
IE9CSkNfQ0xBU1MgSlNWaXJ0dWFsTWFjaGluZTsKIAogSlNDX0NMQVNTX0FWQUlMQUJMRShtYWNv
c3goSlNDX01BQ19UQkEpLCBpb3MoSlNDX0lPU19UQkEpKQpAQCAtNDcsNyArNTMsNyBAQCBKU0Nf
Q0xBU1NfQVZBSUxBQkxFKG1hY29zeChKU0NfTUFDX1RCQSksIGlvcyhKU0NfSU9TX1RCQSkpCiAg
QG1ldGhvZAogIEBhYnN0cmFjdCBDcmVhdGUgYSBKU1NjcmlwdCBmb3IgdGhlIHNwZWNpZmllZCB2
aXJ0dWFsIG1hY2hpbmUgd2l0aCBhIHBhdGggdG8gYSBjb2Rlc2lnbmluZyBhbmQgYnl0ZWNvZGUg
Y2FjaGluZy4KICBAcGFyYW0gZmlsZVBhdGggQSBVUkwgY29udGFpbmluZyB0aGUgcGF0aCB0byBh
IEpTIHNvdXJjZSBjb2RlIGZpbGUgb24gZGlzay4KLSBAcGFyYW0gdm0gVGhlIEpTVmlydHVhbE1h
Y2hpbmUgdGhlIHNjcmlwdCBjYW4gYmUgZXZhbHVhdGVkIGluLgorIEBwYXJhbSBjb250ZXh0IFRo
ZSBKU0NvbnRleHQgdGhlIHNjcmlwdCBjYW4gYmUgZXZhbHVhdGVkIGluLgogIEBwYXJhbSBjb2Rl
U2lnbmluZ1BhdGggQSBVUkwgY29udGFpbmluZyB0aGUgcGF0aCB0byB0aGUgY29kZVNpZ25pbmcg
ZmlsZSBmb3IgZmlsZVBhdGggb24gZGlzay4KICBAcGFyYW0gY2FjaGVQYXRoIEEgVVJMIGNvbnRh
aW5pbmcgdGhlIHBhdGggd2hlcmUgdGhlIFZNIHNob3VsZCBjYWNoZSBmb3IgZnV0dXJlIGV4ZWN1
dGlvbi4KICBAcmVzdWx0IFRoZSBuZXcgc2NyaXB0LgpAQCAtNTUsMTMgKzYxLDEzIEBAIEpTQ19D
TEFTU19BVkFJTEFCTEUobWFjb3N4KEpTQ19NQUNfVEJBKSwgaW9zKEpTQ19JT1NfVEJBKSkKIAog
IElmIHRoZSBmaWxlIGF0IGZpbGVQYXRoIGlzIG5vdCBhc2NpaSB0aGlzIG1ldGhvZCB3aWxsIHJl
dHVybiBuaWwuCiAgKi8KLSsgKG51bGxhYmxlIGluc3RhbmNldHlwZSlzY3JpcHRGcm9tQVNDSUlG
aWxlOihOU1VSTCAqKWZpbGVQYXRoIGluVmlydHVhbE1hY2hpbmU6KEpTVmlydHVhbE1hY2hpbmUg
Kil2bSB3aXRoQ29kZVNpZ25pbmc6KG51bGxhYmxlIE5TVVJMICopY29kZVNpZ25pbmdQYXRoIGFu
ZEJ5dGVjb2RlQ2FjaGU6KG51bGxhYmxlIE5TVVJMICopY2FjaGVQYXRoOworKyAobnVsbGFibGUg
aW5zdGFuY2V0eXBlKXNjcmlwdEZyb21BU0NJSUZpbGU6KE5TVVJMICopZmlsZVBhdGggaW5Db250
ZXh0OihKU0NvbnRleHQgKiljb250ZXh0IHdpdGhDb2RlU2lnbmluZzoobnVsbGFibGUgTlNVUkwg
Kiljb2RlU2lnbmluZ1BhdGggYW5kQnl0ZWNvZGVDYWNoZToobnVsbGFibGUgTlNVUkwgKiljYWNo
ZVBhdGg7CiAKIAogLyohCiAgVGhpcyBpcyBkZXByZWNhdGVkIGFuZCBpcyBlcXVpdmFsZW50IHRv
IHNjcmlwdEZyb21BU0NJSUZpbGU6aW5WaXJ0dWFsTWFjaGluZTp3aXRoQ29kZVNpZ25pbmc6YW5k
Qnl0ZWNvZGVDYWNoZTouCiAgKi8KLSsgKG51bGxhYmxlIGluc3RhbmNldHlwZSlzY3JpcHRGcm9t
VVRGOEZpbGU6KE5TVVJMICopZmlsZVBhdGggaW5WaXJ0dWFsTWFjaGluZTooSlNWaXJ0dWFsTWFj
aGluZSAqKXZtIHdpdGhDb2RlU2lnbmluZzoobnVsbGFibGUgTlNVUkwgKiljb2RlU2lnbmluZ1Bh
dGggYW5kQnl0ZWNvZGVDYWNoZToobnVsbGFibGUgTlNVUkwgKiljYWNoZVBhdGg7CisrIChudWxs
YWJsZSBpbnN0YW5jZXR5cGUpc2NyaXB0RnJvbVVURjhGaWxlOihOU1VSTCAqKWZpbGVQYXRoIGlu
Q29udGV4dDooSlNDb250ZXh0ICopY29udGV4dCB3aXRoQ29kZVNpZ25pbmc6KG51bGxhYmxlIE5T
VVJMICopY29kZVNpZ25pbmdQYXRoIGFuZEJ5dGVjb2RlQ2FjaGU6KG51bGxhYmxlIE5TVVJMICop
Y2FjaGVQYXRoOwogCiBAZW5kCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9B
UEkvSlNTY3JpcHQubW0gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTU2NyaXB0Lm1tCmlu
ZGV4IGY3ZTkzOWFmMDk4YmY1ZDBmNTNlZDFlOGIzMmQ3NWE0ZDgyM2ZkN2YuLjY4MWQzOTVmNDVl
ZTA4YmI0NWJiMTkxMmI2ZjVhMTM5ODgzNjcyNjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvSlNTY3JpcHQubW0KKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9K
U1NjcmlwdC5tbQpAQCAtMjcsMjEgKzI3LDMyIEBACiAjaW1wb3J0ICJKU1NjcmlwdEludGVybmFs
LmgiCiAKICNpbXBvcnQgIkFQSUNhc3QuaCIKKyNpbXBvcnQgIklkZW50aWZpZXIuaCIKICNpbXBv
cnQgIkpTQ29udGV4dEludGVybmFsLmgiCisjaW1wb3J0ICJKU1NvdXJjZUNvZGUuaCIKICNpbXBv
cnQgIkpTVmFsdWVQcml2YXRlLmgiCisjaW1wb3J0ICJKU1ZpcnR1YWxNYWNoaW5lSW50ZXJuYWwu
aCIKKyNpbXBvcnQgIlBhcnNlckVycm9yLmgiCiAjaW1wb3J0ICJTeW1ib2wuaCIKKyNpbmNsdWRl
IDxzeXMvc3RhdC5oPgogCiAjaWYgSlNDX09CSkNfQVBJX0VOQUJMRUQKIAogQGltcGxlbWVudGF0
aW9uIEpTU2NyaXB0IHsKKyAgICBfX3dlYWsgSlNDb250ZXh0KiBtX2NvbnRleHQ7CisgICAgX193
ZWFrIEpTVmlydHVhbE1hY2hpbmUqIG1fdmlydHVhbE1hY2hpbmU7CiAgICAgU3RyaW5nIG1fc291
cmNlOworICAgIE5TVVJMKiBtX2NhY2hlUGF0aDsKKyAgICBKU0M6OkNhY2hlZEJ5dGVjb2RlIG1f
Y2FjaGVkQnl0ZWNvZGU7CisgICAgSlNDOjpTdHJvbmc8SlNDOjpKU1NvdXJjZUNvZGU+IG1fanNT
b3VyY2VDb2RlOworICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiBtX21vZHVsZUtleTsKIH0KIAogKyAo
aW5zdGFuY2V0eXBlKXNjcmlwdFdpdGhTb3VyY2U6KE5TU3RyaW5nICopc291cmNlIGluVmlydHVh
bE1hY2hpbmU6KEpTVmlydHVhbE1hY2hpbmUgKil2bQogewotICAgIFVOVVNFRF9QQVJBTSh2bSk7
Ci0gICAgSlNTY3JpcHQgKnJlc3VsdCA9IFtbSlNTY3JpcHQgYWxsb2NdIGluaXRdOworICAgIEpT
U2NyaXB0ICpyZXN1bHQgPSBbW1tKU1NjcmlwdCBhbGxvY10gaW5pdF0gYXV0b3JlbGVhc2VdOwog
ICAgIHJlc3VsdC0+bV9zb3VyY2UgPSBzb3VyY2U7CisgICAgcmVzdWx0LT5tX3ZpcnR1YWxNYWNo
aW5lID0gdm07CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtNzcsMTMgKzg4LDEwIEBAIHN0
YXRpYyBib29sIGZpbGxCdWZmZXJXaXRoQ29udGVudHNPZkZpbGUoY29uc3QgU3RyaW5nJiBmaWxl
TmFtZSwgVmVjdG9yPExDaGFyPiYKIH0KIAogCi0rIChpbnN0YW5jZXR5cGUpc2NyaXB0RnJvbUFT
Q0lJRmlsZTooTlNVUkwgKilmaWxlUGF0aCBpblZpcnR1YWxNYWNoaW5lOihKU1ZpcnR1YWxNYWNo
aW5lICopdm0gd2l0aENvZGVTaWduaW5nOihOU1VSTCAqKWNvZGVTaWduaW5nUGF0aCBhbmRCeXRl
Y29kZUNhY2hlOihOU1VSTCAqKWNhY2hlUGF0aAorKyAoaW5zdGFuY2V0eXBlKXNjcmlwdEZyb21B
U0NJSUZpbGU6KE5TVVJMICopZmlsZVBhdGggaW5Db250ZXh0OihKU0NvbnRleHQgKiljb250ZXh0
IHdpdGhDb2RlU2lnbmluZzooTlNVUkwgKiljb2RlU2lnbmluZ1BhdGggYW5kQnl0ZWNvZGVDYWNo
ZTooTlNVUkwgKiljYWNoZVBhdGgKIHsKICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgY2hlY2sg
Y29kZVNpZ25pbmcuCiAgICAgVU5VU0VEX1BBUkFNKGNvZGVTaWduaW5nUGF0aCk7Ci0gICAgLy8g
RklYTUU6IFRoaXMgc2hvdWxkIGFjdHVhbGx5IGNhY2hlIGJ5dGVjb2RlLgotICAgIFVOVVNFRF9Q
QVJBTShjYWNoZVBhdGgpOwotICAgIFVOVVNFRF9QQVJBTSh2bSk7CiAgICAgVVJMIGZpbGVQYXRo
VVJMKFtmaWxlUGF0aCBhYnNvbHV0ZVVSTF0pOwogICAgIGlmICghZmlsZVBhdGhVUkwuaXNMb2Nh
bEZpbGUoKSkKICAgICAgICAgcmV0dXJuIG5pbDsKQEAgLTk1LDE3ICsxMDMsOTUgQEAgKyAoaW5z
dGFuY2V0eXBlKXNjcmlwdEZyb21BU0NJSUZpbGU6KE5TVVJMICopZmlsZVBhdGggaW5WaXJ0dWFs
TWFjaGluZTooSlNWaXJ0dWEKICAgICBpZiAoIWNoYXJhY3RlcnNBcmVBbGxBU0NJSShidWZmZXIu
ZGF0YSgpLCBidWZmZXIuc2l6ZSgpKSkKICAgICAgICAgcmV0dXJuIG5pbDsKIAotICAgIEpTU2Ny
aXB0ICpyZXN1bHQgPSBbW0pTU2NyaXB0IGFsbG9jXSBpbml0XTsKKyAgICBKU1NjcmlwdCAqcmVz
dWx0ID0gW1tbSlNTY3JpcHQgYWxsb2NdIGluaXRdIGF1dG9yZWxlYXNlXTsKKyAgICByZXN1bHQt
Pm1fY29udGV4dCA9IGNvbnRleHQ7CisgICAgcmVzdWx0LT5tX3ZpcnR1YWxNYWNoaW5lID0gY29u
dGV4dC52aXJ0dWFsTWFjaGluZTsKICAgICByZXN1bHQtPm1fc291cmNlID0gU3RyaW5nOjpmcm9t
VVRGOFdpdGhMYXRpbjFGYWxsYmFjayhidWZmZXIuZGF0YSgpLCBidWZmZXIuc2l6ZSgpKTsKKyAg
ICByZXN1bHQtPm1fY2FjaGVQYXRoID0gY2FjaGVQYXRoOworICAgIFtyZXN1bHQgcmVhZENhY2hl
XTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi0rIChpbnN0YW5jZXR5cGUpc2NyaXB0RnJvbVVU
RjhGaWxlOihOU1VSTCAqKWZpbGVQYXRoIGluVmlydHVhbE1hY2hpbmU6KEpTVmlydHVhbE1hY2hp
bmUgKil2bSB3aXRoQ29kZVNpZ25pbmc6KE5TVVJMICopY29kZVNpZ25pbmdQYXRoIGFuZEJ5dGVj
b2RlQ2FjaGU6KE5TVVJMICopY2FjaGVQYXRoCisrIChpbnN0YW5jZXR5cGUpc2NyaXB0RnJvbVVU
RjhGaWxlOihOU1VSTCAqKWZpbGVQYXRoIGluQ29udGV4dDooSlNDb250ZXh0ICopY29udGV4dCB3
aXRoQ29kZVNpZ25pbmc6KE5TVVJMICopY29kZVNpZ25pbmdQYXRoIGFuZEJ5dGVjb2RlQ2FjaGU6
KE5TVVJMICopY2FjaGVQYXRoCiB7Ci0gICAgcmV0dXJuIFtKU1NjcmlwdCBzY3JpcHRGcm9tQVND
SUlGaWxlOmZpbGVQYXRoIGluVmlydHVhbE1hY2hpbmU6dm0gd2l0aENvZGVTaWduaW5nOmNvZGVT
aWduaW5nUGF0aCBhbmRCeXRlY29kZUNhY2hlOmNhY2hlUGF0aF07CisgICAgcmV0dXJuIFtKU1Nj
cmlwdCBzY3JpcHRGcm9tQVNDSUlGaWxlOmZpbGVQYXRoIGluQ29udGV4dDpjb250ZXh0IHdpdGhD
b2RlU2lnbmluZzpjb2RlU2lnbmluZ1BhdGggYW5kQnl0ZWNvZGVDYWNoZTpjYWNoZVBhdGhdOwog
fQogCi1jb25zdCBTdHJpbmcmIGdldEpTU2NyaXB0U291cmNlQ29kZShKU1NjcmlwdCAqbW9kdWxl
KSB7IHJldHVybiBtb2R1bGUtPm1fc291cmNlOyB9CistICh2b2lkKWRlYWxsb2MKK3sKKyAgICBp
ZiAobV9jYWNoZWRCeXRlY29kZS5zaXplKCkpCisgICAgICAgIG11bm1hcChjb25zdF9jYXN0PHZv
aWQqPihtX2NhY2hlZEJ5dGVjb2RlLmRhdGEoKSksIG1fY2FjaGVkQnl0ZWNvZGUuc2l6ZSgpKTsK
KyAgICBbc3VwZXIgZGVhbGxvY107Cit9CisKKy0gKHZvaWQpcmVhZENhY2hlCit7CisgICAgaWYg
KCFtX2NhY2hlUGF0aCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaW50IGZkID0gb3BlbihtX2Nh
Y2hlUGF0aC5wYXRoLlVURjhTdHJpbmcsIE9fUkRPTkxZKTsKKyAgICBpZiAoZmQgPT0gLTEpCisg
ICAgICAgIHJldHVybjsKKworICAgIGludCByYyA9IGZsb2NrKGZkLCBMT0NLX1NIIHwgTE9DS19O
Qik7CisgICAgaWYgKHJjKSB7CisgICAgICAgIGNsb3NlKGZkKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIHN0cnVjdCBzdGF0IHNiOworICAgIGludCByZXMgPSBmc3RhdChmZCwgJnNi
KTsKKyAgICBzaXplX3Qgc2l6ZSA9IHN0YXRpY19jYXN0PHNpemVfdD4oc2Iuc3Rfc2l6ZSk7Cisg
ICAgaWYgKHJlcyB8fCAhc2l6ZSkgeworICAgICAgICBjbG9zZShmZCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICB2b2lkKiBidWZmZXIgPSBtbWFwKG51bGxwdHIsIHNpemUsIFBST1Rf
UkVBRCwgTUFQX1BSSVZBVEUsIGZkLCAwKTsKKyAgICBjbG9zZShmZCk7CisKKyAgICBtX2NhY2hl
ZEJ5dGVjb2RlID0gSlNDOjpDYWNoZWRCeXRlY29kZSB7IGJ1ZmZlciwgc2l6ZSB9OworfQorCist
ICh2b2lkKXdyaXRlQ2FjaGUKK3sKKyAgICBpZiAobV9jYWNoZWRCeXRlY29kZS5zaXplKCkgfHwg
IW1fY2FjaGVQYXRoKQorICAgICAgICByZXR1cm47CisKKyAgICBKU0M6OlBhcnNlckVycm9yIGVy
cm9yOworICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjID0gdG9KUyhtX2NvbnRleHQuSlNHbG9iYWxD
b250ZXh0UmVmKTsKKyAgICBtX2NhY2hlZEJ5dGVjb2RlID0gSlNDOjpnZW5lcmF0ZU1vZHVsZUJ5
dGVjb2RlKGV4ZWMsIG1fanNTb3VyY2VDb2RlLT5zb3VyY2VDb2RlKCksIGVycm9yKTsKKyAgICBp
ZiAoZXJyb3IuaXNWYWxpZCgpKQorICAgICAgICByZXR1cm47CisgICAgaW50IGZkID0gb3Blbiht
X2NhY2hlUGF0aC5wYXRoLlVURjhTdHJpbmcsIE9fQ1JFQVQgfCBPX1dST05MWSwgMDY2Nik7Cisg
ICAgaWYgKGZkID09IC0xKQorICAgICAgICByZXR1cm47CisgICAgaW50IHJjID0gZmxvY2soZmQs
IExPQ0tfRVggfCBMT0NLX05CKTsKKyAgICBpZiAoIXJjKQorICAgICAgICB3cml0ZShmZCwgbV9j
YWNoZWRCeXRlY29kZS5kYXRhKCksIG1fY2FjaGVkQnl0ZWNvZGUuc2l6ZSgpKTsKKyAgICBjbG9z
ZShmZCk7Cit9CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIEpTU2NyaXB0KEludGVybmFsKQor
CistIChKU0M6OkpTU291cmNlQ29kZSopanNTb3VyY2VDb2RlOihKU0M6OklkZW50aWZpZXIpbW9k
dWxlS2V5Cit7CisgICAgaWYgKG1fanNTb3VyY2VDb2RlKSB7CisgICAgICAgIEFTU0VSVChtb2R1
bGVLZXkuaW1wbCgpID09IG1fbW9kdWxlS2V5KTsKKyAgICAgICAgcmV0dXJuIG1fanNTb3VyY2VD
b2RlLmdldCgpOworICAgIH0KKworICAgIEpTQzo6Vk0mIHZtID0gbV92aXJ0dWFsTWFjaGluZS52
bTsKKyAgICBUZXh0UG9zaXRpb24gc3RhcnRQb3NpdGlvbiB7IH07CisgICAgUmVmPEpTQzo6Q2Fj
aGVkQnl0ZWNvZGVTb3VyY2VQcm92aWRlcj4gc291cmNlUHJvdmlkZXIgPSBKU0M6OkNhY2hlZEJ5
dGVjb2RlU291cmNlUHJvdmlkZXI6OmNyZWF0ZShtX3NvdXJjZSwgJm1fY2FjaGVkQnl0ZWNvZGUs
IEpTQzo6U291cmNlT3JpZ2luKG1vZHVsZUtleS5zdHJpbmcoKSksIFVSTCh7IH0sIG1vZHVsZUtl
eS5zdHJpbmcoKSksIFRleHRQb3NpdGlvbigpLCBKU0M6OlNvdXJjZVByb3ZpZGVyU291cmNlVHlw
ZTo6TW9kdWxlKTsKKyAgICBKU0M6OlNvdXJjZUNvZGUgc291cmNlQ29kZShXVEZNb3ZlKHNvdXJj
ZVByb3ZpZGVyKSwgc3RhcnRQb3NpdGlvbi5tX2xpbmUub25lQmFzZWRJbnQoKSwgc3RhcnRQb3Np
dGlvbi5tX2NvbHVtbi5vbmVCYXNlZEludCgpKTsKKyAgICBKU0M6OkpTU291cmNlQ29kZSoganNT
b3VyY2VDb2RlID0gSlNDOjpKU1NvdXJjZUNvZGU6OmNyZWF0ZSh2bSwgV1RGTW92ZShzb3VyY2VD
b2RlKSk7CisgICAgbV9qc1NvdXJjZUNvZGUuc2V0KHZtLCBqc1NvdXJjZUNvZGUpOworICAgIFtz
ZWxmIHdyaXRlQ2FjaGVdOworICAgIHJldHVybiBqc1NvdXJjZUNvZGU7Cit9CiAKIEBlbmQKIApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1NjcmlwdEludGVybmFsLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTU2NyaXB0SW50ZXJuYWwuaAppbmRleCBhOTcz
ZWQxYWQ0YTFmYzVmZGYzNWNmOTQ4MjMwMTc5NWFlMWYyZWIzLi5iZDQwMDUwMWMzYWU1ZDA1NjNl
ZDYxY2VkNjRjNzlkNDg4NWE4NjI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
QVBJL0pTU2NyaXB0SW50ZXJuYWwuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pT
U2NyaXB0SW50ZXJuYWwuaApAQCAtMjgsNiArMjgsOCBAQAogI2ltcG9ydCAiSlNTY3JpcHQuaCIK
ICNpbXBvcnQgIlNvdXJjZUNvZGUuaCIKIAotT0JKQ19DTEFTUyBKU1NjcmlwdDsKK0BpbnRlcmZh
Y2UgSlNTY3JpcHQoSW50ZXJuYWwpCiAKLWNvbnN0IFN0cmluZyYgZ2V0SlNTY3JpcHRTb3VyY2VD
b2RlKEpTU2NyaXB0ICopOworLSAoSlNDOjpKU1NvdXJjZUNvZGUqKWpzU291cmNlQ29kZTooSlND
OjpJZGVudGlmaWVyKW1vZHVsZUtleTsKKworQGVuZApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL0FQSS9KU1ZpcnR1YWxNYWNoaW5lLm1tIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS9KU1ZpcnR1YWxNYWNoaW5lLm1tCmluZGV4IDVlNzk1ZjAxNmYwNWEzODFiZGNmMTA0MGYz
MzVkMDg5NTM5NWRlYWEuLjUwNGQzM2NmNWY3Y2I1M2YxNmRkMzc3OTNmYzYxYzkxNWUyM2JmZTYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWaXJ0dWFsTWFjaGluZS5t
bQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmlydHVhbE1hY2hpbmUubW0KQEAg
LTI5Nyw2ICsyOTcsMTEgQEAgKyAoTlNVSW50ZWdlcilzZXROdW1iZXJPZkZUTENvbXBpbGVyVGhy
ZWFkczooTlNVSW50ZWdlciludW1iZXJPZlRocmVhZHMKIAogI2VuZGlmIC8vIEVOQUJMRShERkdf
SklUKQogCistIChKU0M6OlZNJil2bQoreworICAgIHJldHVybiAqdG9KUyhtX2dyb3VwKTsKK30K
KwogQGVuZAogCiBzdGF0aWMgdm9pZCBzY2FuRXh0ZXJuYWxPYmplY3RHcmFwaChKU0M6OlZNJiB2
bSwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvciwgdm9pZCogcm9vdCwgYm9vbCBsb2NrQWNxdWly
ZWQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmlydHVhbE1hY2hp
bmVJbnRlcm5hbC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZpcnR1YWxNYWNoaW5l
SW50ZXJuYWwuaAppbmRleCA5MTIyZWQ0OWE0ZWExYWE0OWVjNjY3ZmVmNjYyN2ZjNDNiNzc3MTZk
Li45YjBiZjZiZWViMDdhZGQwOWM2M2U4YjE0MDM0YTg4Y2U4M2Q2ZWQ3IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmlydHVhbE1hY2hpbmVJbnRlcm5hbC5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWaXJ0dWFsTWFjaGluZUludGVybmFsLmgKQEAg
LTQ2LDYgKzQ2LDggQEAgSlNDb250ZXh0R3JvdXBSZWYgZ2V0R3JvdXBGcm9tVmlydHVhbE1hY2hp
bmUoSlNWaXJ0dWFsTWFjaGluZSAqKTsKIAogLSAoSlNDb250ZXh0ICopY29udGV4dEZvckdsb2Jh
bENvbnRleHRSZWY6KEpTR2xvYmFsQ29udGV4dFJlZilnbG9iYWxDb250ZXh0OwogLSAodm9pZClh
ZGRDb250ZXh0OihKU0NvbnRleHQgKil3cmFwcGVyIGZvckdsb2JhbENvbnRleHRSZWY6KEpTR2xv
YmFsQ29udGV4dFJlZilnbG9iYWxDb250ZXh0OworLSAoSlNDOjpWTSYpdm07CisKIEBlbmQKIAog
I2VuZGlmIC8vIGRlZmluZWQoX19PQkpDX18pCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQVBJL3Rlc3RzL3Rlc3RhcGkubW0gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rl
c3RzL3Rlc3RhcGkubW0KaW5kZXggMTNiZWI2OWYyYmNkNzIxOTRjNzBhZjU2OGY5NjEyZDYxZWY2
YWNjMy4uNmRiZTFkNWU5NGNlMjI1MDVhMDNjNjUxMDBlYmQ3ODBmZGYwNDA5YiAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy90ZXN0YXBpLm1tCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVzdGFwaS5tbQpAQCAtMTk4MCw2ICsxOTgwLDY4
IEBAIHN0YXRpYyB2b2lkIHRlc3RJbXBvcnRNb2R1bGVUd2ljZSgpCiAgICAgfQogfQogCitzdGF0
aWMgdm9pZCB0ZXN0Qnl0ZWNvZGVDYWNoZSgpCit7CisgICAgQGF1dG9yZWxlYXNlcG9vbCB7Cisg
ICAgICAgIE5TVVJMKiB0ZW1wRGlyZWN0b3J5ID0gW05TVVJMIGZpbGVVUkxXaXRoUGF0aDpOU1Rl
bXBvcmFyeURpcmVjdG9yeSgpIGlzRGlyZWN0b3J5OllFU107CisKKyAgICAgICAgTlNTdHJpbmcq
IGZvb1NvdXJjZSA9IEAiaW1wb3J0IHsgbiB9IGZyb20gXCIuLi9mb28uanNcIjsgZXhwb3J0IGxl
dCBmb28gPSBuOyI7CisgICAgICAgIE5TU3RyaW5nKiBiYXJTb3VyY2UgPSBAImltcG9ydCBcIm90
aGVyRGlyZWN0b3J5L2Jhei5qc1wiOyBleHBvcnQgbGV0IG4gPSBudWxsOyI7CisgICAgICAgIE5T
U3RyaW5nKiBiYXpTb3VyY2UgPSBAImltcG9ydCB7IGZvbyB9IGZyb20gXCIuLi9kaXJlY3Rvcnkv
YmFyLmpzXCI7IGdsb2JhbFRoaXMucmFuID0gbnVsbDsgZXhwb3J0IGxldCBleHAgPSBmb287IjsK
KworICAgICAgICBOU1VSTCogZm9vUGF0aCA9IFt0ZW1wRGlyZWN0b3J5IFVSTEJ5QXBwZW5kaW5n
UGF0aENvbXBvbmVudDpAImZvby5qcyJdOworICAgICAgICBOU1VSTCogYmFyUGF0aCA9IFt0ZW1w
RGlyZWN0b3J5IFVSTEJ5QXBwZW5kaW5nUGF0aENvbXBvbmVudDpAImJhci5qcyJdOworICAgICAg
ICBOU1VSTCogYmF6UGF0aCA9IFt0ZW1wRGlyZWN0b3J5IFVSTEJ5QXBwZW5kaW5nUGF0aENvbXBv
bmVudDpAImJhei5qcyJdOworCisgICAgICAgIE5TVVJMKiBmb29DYWNoZVBhdGggPSBbdGVtcERp
cmVjdG9yeSBVUkxCeUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6QCJmb28uanMuY2FjaGUiXTsKKyAg
ICAgICAgTlNVUkwqIGJhckNhY2hlUGF0aCA9IFt0ZW1wRGlyZWN0b3J5IFVSTEJ5QXBwZW5kaW5n
UGF0aENvbXBvbmVudDpAImJhci5qcy5jYWNoZSJdOworICAgICAgICBOU1VSTCogYmF6Q2FjaGVQ
YXRoID0gW3RlbXBEaXJlY3RvcnkgVVJMQnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50OkAiYmF6Lmpz
LmNhY2hlIl07CisKKyAgICAgICAgW2Zvb1NvdXJjZSB3cml0ZVRvVVJMOmZvb1BhdGggYXRvbWlj
YWxseTpOTyBlbmNvZGluZzpOU0FTQ0lJU3RyaW5nRW5jb2RpbmcgZXJyb3I6bmlsXTsKKyAgICAg
ICAgW2JhclNvdXJjZSB3cml0ZVRvVVJMOmJhclBhdGggYXRvbWljYWxseTpOTyBlbmNvZGluZzpO
U0FTQ0lJU3RyaW5nRW5jb2RpbmcgZXJyb3I6bmlsXTsKKyAgICAgICAgW2JhelNvdXJjZSB3cml0
ZVRvVVJMOmJhelBhdGggYXRvbWljYWxseTpOTyBlbmNvZGluZzpOU0FTQ0lJU3RyaW5nRW5jb2Rp
bmcgZXJyb3I6bmlsXTsKKworICAgICAgICBfX2Jsb2NrIGJvb2wgZm9yY2VEaXNrQ2FjaGUgPSBm
YWxzZTsKKyAgICAgICAgYXV0byBibG9jayA9IF4oSlNDb250ZXh0ICpjb250ZXh0LCBKU1ZhbHVl
ICppZGVudGlmaWVyLCBKU1ZhbHVlICpyZXNvbHZlLCBKU1ZhbHVlICpyZWplY3QpIHsKKyAgICAg
ICAgICAgIEpTQzo6T3B0aW9uczo6Zm9yY2VEaXNrQ2FjaGUoKSA9IGZvcmNlRGlza0NhY2hlOwor
ICAgICAgICAgICAgaWYgKFtpZGVudGlmaWVyIGlzRXF1YWxUb09iamVjdDpAImZpbGU6Ly8vZGly
ZWN0b3J5L2Jhci5qcyJdKQorICAgICAgICAgICAgICAgIFtyZXNvbHZlIGNhbGxXaXRoQXJndW1l
bnRzOkBbW0pTU2NyaXB0IHNjcmlwdEZyb21BU0NJSUZpbGU6Zm9vUGF0aCBpbkNvbnRleHQ6Y29u
dGV4dCB3aXRoQ29kZVNpZ25pbmc6bmlsIGFuZEJ5dGVjb2RlQ2FjaGU6Zm9vQ2FjaGVQYXRoXV1d
OworICAgICAgICAgICAgZWxzZSBpZiAoW2lkZW50aWZpZXIgaXNFcXVhbFRvT2JqZWN0OkAiZmls
ZTovLy9mb28uanMiXSkKKyAgICAgICAgICAgICAgICBbcmVzb2x2ZSBjYWxsV2l0aEFyZ3VtZW50
czpAW1tKU1NjcmlwdCBzY3JpcHRGcm9tQVNDSUlGaWxlOmJhclBhdGggaW5Db250ZXh0OmNvbnRl
eHQgd2l0aENvZGVTaWduaW5nOm5pbCBhbmRCeXRlY29kZUNhY2hlOmJhckNhY2hlUGF0aF1dXTsK
KyAgICAgICAgICAgIGVsc2UgaWYgKFtpZGVudGlmaWVyIGlzRXF1YWxUb09iamVjdDpAImZpbGU6
Ly8vb3RoZXJEaXJlY3RvcnkvYmF6LmpzIl0pCisgICAgICAgICAgICAgICAgW3Jlc29sdmUgY2Fs
bFdpdGhBcmd1bWVudHM6QFtbSlNTY3JpcHQgc2NyaXB0RnJvbUFTQ0lJRmlsZTpiYXpQYXRoIGlu
Q29udGV4dDpjb250ZXh0IHdpdGhDb2RlU2lnbmluZzpuaWwgYW5kQnl0ZWNvZGVDYWNoZTpiYXpD
YWNoZVBhdGhdXV07CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgW3JlamVjdCBj
YWxsV2l0aEFyZ3VtZW50czpAW1tKU1ZhbHVlIHZhbHVlV2l0aE5ld0Vycm9yRnJvbU1lc3NhZ2U6
QCJXZWlyZCBwYXRoIiBpbkNvbnRleHQ6Y29udGV4dF1dXTsKKyAgICAgICAgfTsKKworICAgICAg
ICBAYXV0b3JlbGVhc2Vwb29sIHsKKyAgICAgICAgICAgIGF1dG8gKmNvbnRleHQgPSBbSlNDb250
ZXh0RmV0Y2hEZWxlZ2F0ZSBjb250ZXh0V2l0aEJsb2NrRm9yRmV0Y2g6YmxvY2tdOworICAgICAg
ICAgICAgY29udGV4dC5tb2R1bGVMb2FkZXJEZWxlZ2F0ZSA9IGNvbnRleHQ7CisgICAgICAgICAg
ICBKU1ZhbHVlICpwcm9taXNlID0gW2NvbnRleHQgZXZhbHVhdGVTY3JpcHQ6QCJpbXBvcnQoJy4u
L290aGVyRGlyZWN0b3J5L2Jhei5qcycpOyIgd2l0aFNvdXJjZVVSTDpbTlNVUkwgZmlsZVVSTFdp
dGhQYXRoOkAiL2RpcmVjdG9yeSIgaXNEaXJlY3Rvcnk6WUVTXV07CisgICAgICAgICAgICBKU1Zh
bHVlICpudWxsID0gW0pTVmFsdWUgdmFsdWVXaXRoTnVsbEluQ29udGV4dDpjb250ZXh0XTsKKyAg
ICAgICAgICAgIGNoZWNrTW9kdWxlQ29kZVJhbihjb250ZXh0LCBwcm9taXNlLCBudWxsKTsKKyAg
ICAgICAgfQorCisgICAgICAgIEBhdXRvcmVsZWFzZXBvb2wgeworICAgICAgICAgICAgZm9yY2VE
aXNrQ2FjaGUgPSB0cnVlOworICAgICAgICAgICAgYXV0byAqY29udGV4dCA9IFtKU0NvbnRleHRG
ZXRjaERlbGVnYXRlIGNvbnRleHRXaXRoQmxvY2tGb3JGZXRjaDpibG9ja107CisgICAgICAgICAg
ICBjb250ZXh0Lm1vZHVsZUxvYWRlckRlbGVnYXRlID0gY29udGV4dDsKKyAgICAgICAgICAgIEpT
VmFsdWUgKnByb21pc2UgPSBbY29udGV4dCBldmFsdWF0ZVNjcmlwdDpAImltcG9ydCgnLi4vb3Ro
ZXJEaXJlY3RvcnkvYmF6LmpzJyk7IiB3aXRoU291cmNlVVJMOltOU1VSTCBmaWxlVVJMV2l0aFBh
dGg6QCIvZGlyZWN0b3J5IiBpc0RpcmVjdG9yeTpZRVNdXTsKKyAgICAgICAgICAgIEpTVmFsdWUg
Km51bGwgPSBbSlNWYWx1ZSB2YWx1ZVdpdGhOdWxsSW5Db250ZXh0OmNvbnRleHRdOworICAgICAg
ICAgICAgY2hlY2tNb2R1bGVDb2RlUmFuKGNvbnRleHQsIHByb21pc2UsIG51bGwpOworICAgICAg
ICAgICAgSlNDOjpPcHRpb25zOjpmb3JjZURpc2tDYWNoZSgpID0gZmFsc2U7CisgICAgICAgIH0K
KworICAgICAgICBOU0ZpbGVNYW5hZ2VyKiBmaWxlTWFuYWdlciA9IFtOU0ZpbGVNYW5hZ2VyIGRl
ZmF1bHRNYW5hZ2VyXTsKKyAgICAgICAgW2ZpbGVNYW5hZ2VyIHJlbW92ZUl0ZW1BdFVSTDpmb29Q
YXRoIGVycm9yOm5pbF07CisgICAgICAgIFtmaWxlTWFuYWdlciByZW1vdmVJdGVtQXRVUkw6YmFy
UGF0aCBlcnJvcjpuaWxdOworICAgICAgICBbZmlsZU1hbmFnZXIgcmVtb3ZlSXRlbUF0VVJMOmJh
elBhdGggZXJyb3I6bmlsXTsKKyAgICAgICAgW2ZpbGVNYW5hZ2VyIHJlbW92ZUl0ZW1BdFVSTDpm
b29DYWNoZVBhdGggZXJyb3I6bmlsXTsKKyAgICAgICAgW2ZpbGVNYW5hZ2VyIHJlbW92ZUl0ZW1B
dFVSTDpiYXJDYWNoZVBhdGggZXJyb3I6bmlsXTsKKyAgICAgICAgW2ZpbGVNYW5hZ2VyIHJlbW92
ZUl0ZW1BdFVSTDpiYXpDYWNoZVBhdGggZXJyb3I6bmlsXTsKKyAgICB9Cit9CisKIEBpbnRlcmZh
Y2UgSlNDb250ZXh0RmlsZUxvYWRlckRlbGVnYXRlIDogSlNDb250ZXh0IDxKU01vZHVsZUxvYWRl
ckRlbGVnYXRlPgogCiArIChpbnN0YW5jZXR5cGUpbmV3Q29udGV4dDsKQEAgLTIwMTcsNyArMjA3
OSw3IEBAIHN0YXRpYyBOU1VSTCAqcmVzb2x2ZVBhdGhUb1NjcmlwdHMoKQogLSAodm9pZCljb250
ZXh0OihKU0NvbnRleHQgKiljb250ZXh0IGZldGNoTW9kdWxlRm9ySWRlbnRpZmllcjooSlNWYWx1
ZSAqKWlkZW50aWZpZXIgd2l0aFJlc29sdmVIYW5kbGVyOihKU1ZhbHVlICopcmVzb2x2ZSBhbmRS
ZWplY3RIYW5kbGVyOihKU1ZhbHVlICopcmVqZWN0CiB7CiAgICAgTlNVUkwgKmZpbGVQYXRoID0g
W05TVVJMIFVSTFdpdGhTdHJpbmc6W2lkZW50aWZpZXIgdG9TdHJpbmddXTsKLSAgICBhdXRvICpz
Y3JpcHQgPSBbSlNTY3JpcHQgc2NyaXB0RnJvbUFTQ0lJRmlsZTpmaWxlUGF0aCBpblZpcnR1YWxN
YWNoaW5lOltjb250ZXh0IHZpcnR1YWxNYWNoaW5lXSB3aXRoQ29kZVNpZ25pbmc6bmlsIGFuZEJ5
dGVjb2RlQ2FjaGU6bmlsXTsKKyAgICBhdXRvICpzY3JpcHQgPSBbSlNTY3JpcHQgc2NyaXB0RnJv
bUFTQ0lJRmlsZTpmaWxlUGF0aCBpbkNvbnRleHQ6Y29udGV4dCB3aXRoQ29kZVNpZ25pbmc6bmls
IGFuZEJ5dGVjb2RlQ2FjaGU6bmlsXTsKICAgICBpZiAoc2NyaXB0KQogICAgICAgICBbcmVzb2x2
ZSBjYWxsV2l0aEFyZ3VtZW50czpAW3NjcmlwdF1dOwogICAgIGVsc2UKQEAgLTIwNDksNiArMjEx
MSw3IEBAIHZvaWQgdGVzdE9iamVjdGl2ZUNBUEkoKQogICAgIHRlc3RGZXRjaFdpdGhUd29DeWNs
ZSgpOwogICAgIHRlc3RGZXRjaFdpdGhUaHJlZUN5Y2xlKCk7CiAgICAgdGVzdEltcG9ydE1vZHVs
ZVR3aWNlKCk7CisgICAgdGVzdEJ5dGVjb2RlQ2FjaGUoKTsKIAogICAgIHRlc3RMb2FkZXJSZWpl
Y3RzTmlsU2NyaXB0VVJMKCk7CiAgICAgdGVzdExvYWRlclJlamVjdHNGYWlsZWRGZXRjaCgpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkRnVuY3Rp
b25FeGVjdXRhYmxlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Vbmxpbmtl
ZEZ1bmN0aW9uRXhlY3V0YWJsZS5jcHAKaW5kZXggYjExNGQzOWU5MDIyNmE1MTBiMjQ1ODUyMWQ5
NWM2M2Y3NTAzM2VlYi4uZThkYzE5ODFmMGU2M2MyNjAxNjA5ZDI0MGI5YTM3OTcxOWNhYTU4OSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkRnVuY3Rp
b25FeGVjdXRhYmxlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5s
aW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuY3BwCkBAIC0xOTQsNiArMTk0LDE2IEBAIFVubGlua2Vk
RnVuY3Rpb25FeGVjdXRhYmxlKiBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6ZnJvbUdsb2Jh
bENvZGUoCiAgICAgcmV0dXJuIGV4ZWN1dGFibGU7CiB9CiAKK1VubGlua2VkRnVuY3Rpb25Db2Rl
QmxvY2sqIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOjp1bmxpbmtlZENvZGVCbG9ja0ZvcihD
b2RlU3BlY2lhbGl6YXRpb25LaW5kIHNwZWNpYWxpemF0aW9uS2luZCkKK3sKKyAgICBzd2l0Y2gg
KHNwZWNpYWxpemF0aW9uS2luZCkgeworICAgIGNhc2UgQ29kZUZvckNhbGw6CisgICAgICAgIHJl
dHVybiBtX3VubGlua2VkQ29kZUJsb2NrRm9yQ2FsbC5nZXQoKTsKKyAgICBjYXNlIENvZGVGb3JD
b25zdHJ1Y3Q6CisgICAgICAgIHJldHVybiBtX3VubGlua2VkQ29kZUJsb2NrRm9yQ29uc3RydWN0
LmdldCgpOworICAgIH0KK30KKwogVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayogVW5saW5rZWRG
dW5jdGlvbkV4ZWN1dGFibGU6OnVubGlua2VkQ29kZUJsb2NrRm9yKAogICAgIFZNJiB2bSwgY29u
c3QgU291cmNlQ29kZSYgc291cmNlLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIHNwZWNpYWxpemF0
aW9uS2luZCwgCiAgICAgRGVidWdnZXJNb2RlIGRlYnVnZ2VyTW9kZSwgUGFyc2VyRXJyb3ImIGVy
cm9yLCBTb3VyY2VQYXJzZU1vZGUgcGFyc2VNb2RlKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuaAppbmRl
eCA2NTI2Y2Q5MGNiYmFhNjllMjZjYzBhMWMwYWM3N2I2OGMxOTVmYjU2Li5kNjM3ZDY4YWY1YWQ2
MzE1NThlYTkzYjNiODZiOWRhMDRjYjgzMTc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuaApAQCAt
MTA0LDYgKzEwNCw4IEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCB0eXBlUHJvZmlsaW5nRW5kT2Zm
c2V0KCkgY29uc3QgeyByZXR1cm4gbV90eXBlUHJvZmlsaW5nRW5kT2Zmc2V0OyB9CiAgICAgdm9p
ZCBzZXRJbnZhbGlkVHlwZVByb2ZpbGluZ09mZnNldHMoKTsKIAorICAgIFVubGlua2VkRnVuY3Rp
b25Db2RlQmxvY2sqIHVubGlua2VkQ29kZUJsb2NrRm9yKENvZGVTcGVjaWFsaXphdGlvbktpbmQp
OworCiAgICAgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayogdW5saW5rZWRDb2RlQmxvY2tGb3Io
CiAgICAgICAgIFZNJiwgY29uc3QgU291cmNlQ29kZSYsIENvZGVTcGVjaWFsaXphdGlvbktpbmQs
IERlYnVnZ2VyTW9kZSwKICAgICAgICAgUGFyc2VyRXJyb3ImLCBTb3VyY2VQYXJzZU1vZGUpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Tb3VyY2VDb2RlS2V5Lmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1NvdXJjZUNvZGVLZXkuaAppbmRleCBjYzNh
YmUyMWZhZjU3MTRiZjk5ODAxZGZiOWVlZDQyODM0ODFmMTg5Li5iYzAyZjEyOWFiZjE4NWJlNzU1
OGZiZDYzNTRkNTkzZjg2YzhiYjcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cGFyc2VyL1NvdXJjZUNvZGVLZXkuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2Vy
L1NvdXJjZUNvZGVLZXkuaApAQCAtMTAwLDYgKzEwMCw4IEBAIHB1YmxpYzoKIAogICAgIHVuc2ln
bmVkIGhhc2goKSBjb25zdCB7IHJldHVybiBtX2hhc2g7IH0KIAorICAgIGNvbnN0IFVubGlua2Vk
U291cmNlQ29kZSYgc291cmNlKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2VDb2RlOyB9CisKICAg
ICBzaXplX3QgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2VDb2RlLmxlbmd0aCgpOyB9
CiAKICAgICBib29sIGlzTnVsbCgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlQ29kZS5pc051bGwo
KTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Tb3VyY2VQcm92
aWRlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Tb3VyY2VQcm92aWRlci5oCmlu
ZGV4IDA5YWQxNjgzNGIwYWZiN2JlOWYzMTRhZmMyZjI1MGFkODJlZGI1ZTUuLjdkYmNjZWU3NjE2
MTUwYjc1MDUyZTkyZTE3OWY4MTViNzUwOTkwYmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9wYXJzZXIvU291cmNlUHJvdmlkZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcGFyc2VyL1NvdXJjZVByb3ZpZGVyLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDA4LCAyMDA5LCAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDIsNiArNDIsNDMg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFdlYkFzc2VtYmx5LAogICAgIH07CiAKKyAgICBj
bGFzcyBDYWNoZWRCeXRlY29kZSB7CisgICAgcHVibGljOgorICAgICAgICBDYWNoZWRCeXRlY29k
ZSgpCisgICAgICAgICAgICA6IENhY2hlZEJ5dGVjb2RlKG51bGxwdHIsIDApCisgICAgICAgIHsK
KyAgICAgICAgfQorCisgICAgICAgIENhY2hlZEJ5dGVjb2RlKGNvbnN0IHZvaWQqIGRhdGEsIHNp
emVfdCBzaXplKQorICAgICAgICAgICAgOiBtX293bmVkKGZhbHNlKQorICAgICAgICAgICAgLCBt
X3NpemUoc2l6ZSkKKyAgICAgICAgICAgICwgbV9kYXRhKGRhdGEpCisgICAgICAgIHsKKyAgICAg
ICAgfQorCisgICAgICAgIENhY2hlZEJ5dGVjb2RlKE1hbGxvY1B0cjx1aW50OF90PiYmIGRhdGEs
IHNpemVfdCBzaXplKQorICAgICAgICAgICAgOiBtX293bmVkKHRydWUpCisgICAgICAgICAgICAs
IG1fc2l6ZShzaXplKQorICAgICAgICAgICAgLCBtX2RhdGEoZGF0YS5sZWFrUHRyKCkpCisgICAg
ICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIGNvbnN0IHZvaWQqIGRhdGEoKSBjb25zdCB7IHJl
dHVybiBtX2RhdGE7IH0KKyAgICAgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3Np
emU7IH0KKworICAgICAgICB+Q2FjaGVkQnl0ZWNvZGUoKQorICAgICAgICB7CisgICAgICAgICAg
ICBpZiAobV9kYXRhICYmIG1fb3duZWQpCisgICAgICAgICAgICAgICAgZmFzdEZyZWUoY29uc3Rf
Y2FzdDx2b2lkKj4obV9kYXRhKSk7CisgICAgICAgIH0KKworICAgIHByaXZhdGU6CisgICAgICAg
IGJvb2wgbV9vd25lZDsKKyAgICAgICAgc2l6ZV90IG1fc2l6ZTsKKyAgICAgICAgY29uc3Qgdm9p
ZCogbV9kYXRhOworICAgIH07CisKKwogICAgIGNsYXNzIFNvdXJjZVByb3ZpZGVyIDogcHVibGlj
IFJlZkNvdW50ZWQ8U291cmNlUHJvdmlkZXI+IHsKICAgICBwdWJsaWM6CiAgICAgICAgIHN0YXRp
YyBjb25zdCBpbnRwdHJfdCBudWxsSUQgPSAxOwpAQCAtNTIsNiArODksOCBAQCBuYW1lc3BhY2Ug
SlNDIHsKIAogICAgICAgICB2aXJ0dWFsIHVuc2lnbmVkIGhhc2goKSBjb25zdCA9IDA7CiAgICAg
ICAgIHZpcnR1YWwgU3RyaW5nVmlldyBzb3VyY2UoKSBjb25zdCA9IDA7CisgICAgICAgIHZpcnR1
YWwgY29uc3QgQ2FjaGVkQnl0ZWNvZGUqIGNhY2hlZEJ5dGVjb2RlKCkgY29uc3QgeyByZXR1cm4g
bnVsbHB0cjsgfQorCiAgICAgICAgIFN0cmluZ1ZpZXcgZ2V0UmFuZ2UoaW50IHN0YXJ0LCBpbnQg
ZW5kKSBjb25zdAogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gc291cmNlKCkuc3Vic3Ry
aW5nKHN0YXJ0LCBlbmQgLSBzdGFydCk7CkBAIC0xMDQsMTUgKzE0MywzOCBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgICAgIHJldHVybiBtX3NvdXJjZS5nZXQoKTsKICAgICAgICAgfQogCi0g
ICAgcHJpdmF0ZToKKyAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIFN0cmluZ1NvdXJjZVByb3ZpZGVy
KGNvbnN0IFN0cmluZyYgc291cmNlLCBjb25zdCBTb3VyY2VPcmlnaW4mIHNvdXJjZU9yaWdpbiwg
VVJMJiYgdXJsLCBjb25zdCBUZXh0UG9zaXRpb24mIHN0YXJ0UG9zaXRpb24sIFNvdXJjZVByb3Zp
ZGVyU291cmNlVHlwZSBzb3VyY2VUeXBlKQogICAgICAgICAgICAgOiBTb3VyY2VQcm92aWRlcihz
b3VyY2VPcmlnaW4sIFdURk1vdmUodXJsKSwgc3RhcnRQb3NpdGlvbiwgc291cmNlVHlwZSkKICAg
ICAgICAgICAgICwgbV9zb3VyY2Uoc291cmNlLmlzTnVsbCgpID8gKlN0cmluZ0ltcGw6OmVtcHR5
KCkgOiAqc291cmNlLmltcGwoKSkKICAgICAgICAgewogICAgICAgICB9CiAKKyAgICBwcml2YXRl
OgogICAgICAgICBSZWY8U3RyaW5nSW1wbD4gbV9zb3VyY2U7CiAgICAgfTsKKworICAgIGNsYXNz
IENhY2hlZEJ5dGVjb2RlU291cmNlUHJvdmlkZXIgOiBwdWJsaWMgU3RyaW5nU291cmNlUHJvdmlk
ZXIgeworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIFJlZjxDYWNoZWRCeXRlY29kZVNvdXJj
ZVByb3ZpZGVyPiBjcmVhdGUoY29uc3QgU3RyaW5nJiBzb3VyY2UsIGNvbnN0IENhY2hlZEJ5dGVj
b2RlKiBjYWNoZWRCeXRlY29kZSwgY29uc3QgU291cmNlT3JpZ2luJiBzb3VyY2VPcmlnaW4sIFVS
TCYmIHVybCwgY29uc3QgVGV4dFBvc2l0aW9uJiBzdGFydFBvc2l0aW9uID0gVGV4dFBvc2l0aW9u
KCksIFNvdXJjZVByb3ZpZGVyU291cmNlVHlwZSBzb3VyY2VUeXBlID0gU291cmNlUHJvdmlkZXJT
b3VyY2VUeXBlOjpQcm9ncmFtKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBDYWNoZWRCeXRlY29kZVNvdXJjZVByb3ZpZGVyKHNvdXJjZSwgY2FjaGVkQnl0ZWNv
ZGUsIHNvdXJjZU9yaWdpbiwgV1RGTW92ZSh1cmwpLCBzdGFydFBvc2l0aW9uLCBzb3VyY2VUeXBl
KSk7CisgICAgICAgIH0KKworICAgICAgICBjb25zdCBDYWNoZWRCeXRlY29kZSogY2FjaGVkQnl0
ZWNvZGUoKSBjb25zdCBvdmVycmlkZQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9j
YWNoZWRCeXRlY29kZTsKKyAgICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgQ2FjaGVk
Qnl0ZWNvZGVTb3VyY2VQcm92aWRlcihjb25zdCBTdHJpbmcmIHNvdXJjZSwgY29uc3QgQ2FjaGVk
Qnl0ZWNvZGUqIGNhY2hlZEJ5dGVjb2RlLCBjb25zdCBTb3VyY2VPcmlnaW4mIHNvdXJjZU9yaWdp
biwgVVJMJiYgdXJsLCBjb25zdCBUZXh0UG9zaXRpb24mIHN0YXJ0UG9zaXRpb24sIFNvdXJjZVBy
b3ZpZGVyU291cmNlVHlwZSBzb3VyY2VUeXBlKQorICAgICAgICAgICAgOiBTdHJpbmdTb3VyY2VQ
cm92aWRlcihzb3VyY2UsIHNvdXJjZU9yaWdpbiwgV1RGTW92ZSh1cmwpLCBzdGFydFBvc2l0aW9u
LCBzb3VyY2VUeXBlKQorICAgICAgICAgICAgLCBtX2NhY2hlZEJ5dGVjb2RlKGNhY2hlZEJ5dGVj
b2RlKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBjb25zdCBDYWNoZWRCeXRlY29k
ZSogbV9jYWNoZWRCeXRlY29kZTsKKyAgICB9OwogICAgIAogI2lmIEVOQUJMRShXRUJBU1NFTUJM
WSkKICAgICBjbGFzcyBXZWJBc3NlbWJseVNvdXJjZVByb3ZpZGVyIDogcHVibGljIFNvdXJjZVBy
b3ZpZGVyIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvVW5saW5r
ZWRTb3VyY2VDb2RlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1VubGlua2VkU291
cmNlQ29kZS5oCmluZGV4IGFhYWFkM2Y0MTJmOGYzZmE1YmMxZjJmZWJmYjE0Y2M3NGRlMjI0MjQu
LmZhZTBlMzUxZWFiZTUwZmI4YTRjNTM5Mjg5ZjM1Yjg2MmQxN2RiNzcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvVW5saW5rZWRTb3VyY2VDb2RlLmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9VbmxpbmtlZFNvdXJjZUNvZGUuaApAQCAtODEsNiAr
ODEsMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0
ZWRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJvdmlkZXIuaXNIYXNoVGFibGVEZWxldGVkVmFs
dWUoKTsgfQogCisgICAgICAgIGNvbnN0IFNvdXJjZVByb3ZpZGVyJiBwcm92aWRlcigpIGNvbnN0
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAqbV9wcm92aWRlcjsKKyAgICAgICAgfQor
CiAgICAgICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdAogICAgICAgICB7CiAgICAgICAgICAgICBB
U1NFUlQobV9wcm92aWRlcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Db2RlQ2FjaGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29kZUNh
Y2hlLmNwcAppbmRleCBjMzJkMjA0YjZjZDg5NjgxODFjYjBkMWRmMGVhYjgzZWMxMTgxOWQ0Li44
OTVhODQwYjkxNTZjZWI5MDM5NzA1MmNhMGNkNzExNmQzMzg5MTU2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db2RlQ2FjaGUuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0NvZGVDYWNoZS5jcHAKQEAgLTE2Miw0ICsxNjIsNzIgQEAgdm9p
ZCBDb2RlQ2FjaGU6OndyaXRlKFZNJiB2bSkKICAgICAgICAgd3JpdGVDb2RlQmxvY2sodm0sIGl0
LmtleSwgaXQudmFsdWUpOwogfQogCit2b2lkIGdlbmVyYXRlVW5saW5rZWRDb2RlQmxvY2tGb3JG
dW5jdGlvbnMoVk0mIHZtLCBVbmxpbmtlZENvZGVCbG9jayogdW5saW5rZWRDb2RlQmxvY2ssIGNv
bnN0IFNvdXJjZUNvZGUmIHBhcmVudFNvdXJjZSwgRGVidWdnZXJNb2RlIGRlYnVnZ2VyTW9kZSwg
UGFyc2VyRXJyb3ImIGVycm9yKQoreworICAgIGF1dG8gZ2VuZXJhdGUgPSBbJl0oVW5saW5rZWRG
dW5jdGlvbkV4ZWN1dGFibGUqIHVubGlua2VkRXhlY3V0YWJsZSwgQ29kZVNwZWNpYWxpemF0aW9u
S2luZCBjb25zdHJ1Y3RvcktpbmQpIHsKKyAgICAgICAgaWYgKGNvbnN0cnVjdG9yS2luZCA9PSBD
b2RlRm9yQ29uc3RydWN0ICYmIFNvdXJjZVBhcnNlTW9kZVNldChTb3VyY2VQYXJzZU1vZGU6OkFz
eW5jQXJyb3dGdW5jdGlvbk1vZGUsIFNvdXJjZVBhcnNlTW9kZTo6QXN5bmNNZXRob2RNb2RlLCBT
b3VyY2VQYXJzZU1vZGU6OkFzeW5jRnVuY3Rpb25Nb2RlKS5jb250YWlucyh1bmxpbmtlZEV4ZWN1
dGFibGUtPnBhcnNlTW9kZSgpKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBGdW5j
dGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSB1bmxpbmtlZEV4ZWN1dGFibGUtPmxpbmsodm0s
IHBhcmVudFNvdXJjZSk7CisgICAgICAgIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSA9IGV4ZWN1
dGFibGUtPnNvdXJjZSgpOworICAgICAgICBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKiB1bmxp
bmtlZEZ1bmN0aW9uQ29kZUJsb2NrID0gdW5saW5rZWRFeGVjdXRhYmxlLT51bmxpbmtlZENvZGVC
bG9ja0Zvcih2bSwgc291cmNlLCBjb25zdHJ1Y3RvcktpbmQsIGRlYnVnZ2VyTW9kZSwgZXJyb3Is
IHVubGlua2VkRXhlY3V0YWJsZS0+cGFyc2VNb2RlKCkpOworICAgICAgICBpZiAodW5saW5rZWRG
dW5jdGlvbkNvZGVCbG9jaykKKyAgICAgICAgICAgIGdlbmVyYXRlVW5saW5rZWRDb2RlQmxvY2tG
b3JGdW5jdGlvbnModm0sIHVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2ssIHNvdXJjZSwgZGVidWdn
ZXJNb2RlLCBlcnJvcik7CisgICAgfTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB1
bmxpbmtlZENvZGVCbG9jay0+bnVtYmVyT2ZGdW5jdGlvbkRlY2xzKCk7IGkrKykgeworICAgICAg
ICBnZW5lcmF0ZSh1bmxpbmtlZENvZGVCbG9jay0+ZnVuY3Rpb25EZWNsKGkpLCBDb2RlRm9yQ2Fs
bCk7CisgICAgICAgIGdlbmVyYXRlKHVubGlua2VkQ29kZUJsb2NrLT5mdW5jdGlvbkRlY2woaSks
IENvZGVGb3JDb25zdHJ1Y3QpOworICAgIH0KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
dW5saW5rZWRDb2RlQmxvY2stPm51bWJlck9mRnVuY3Rpb25FeHBycygpOyBpKyspIHsKKyAgICAg
ICAgZ2VuZXJhdGUodW5saW5rZWRDb2RlQmxvY2stPmZ1bmN0aW9uRXhwcihpKSwgQ29kZUZvckNh
bGwpOworICAgICAgICBnZW5lcmF0ZSh1bmxpbmtlZENvZGVCbG9jay0+ZnVuY3Rpb25FeHByKGkp
LCBDb2RlRm9yQ29uc3RydWN0KTsKKyAgICB9Cit9CisKK3ZvaWQgd3JpdGVDb2RlQmxvY2soVk0m
IHZtLCBjb25zdCBTb3VyY2VDb2RlS2V5JiBrZXksIGNvbnN0IFNvdXJjZUNvZGVWYWx1ZSYgdmFs
dWUpCit7CisjaWYgT1MoREFSV0lOKQorICAgIGNvbnN0IGNoYXIqIGNhY2hlUGF0aCA9IE9wdGlv
bnM6OmRpc2tDYWNoZVBhdGgoKTsKKyAgICBpZiAoTElLRUxZKCFjYWNoZVBhdGgpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBVbmxpbmtlZENvZGVCbG9jayogY29kZUJsb2NrID0ganNEeW5hbWlj
Q2FzdDxVbmxpbmtlZENvZGVCbG9jayo+KHZtLCB2YWx1ZS5jZWxsLmdldCgpKTsKKyAgICBpZiAo
IWNvZGVCbG9jaykKKyAgICAgICAgcmV0dXJuOworCisgICAgdW5zaWduZWQgaGFzaCA9IGtleS5o
YXNoKCk7CisgICAgY2hhciBmaWxlbmFtZVs1MTJdOworICAgIGludCBjb3VudCA9IHNucHJpbnRm
KGZpbGVuYW1lLCA1MTIsICIlcy8ldS5jYWNoZSIsIGNhY2hlUGF0aCwgaGFzaCk7CisgICAgaWYg
KGNvdW50IDwgMCB8fCBjb3VudCA+IDUxMikKKyAgICAgICAgcmV0dXJuOworCisgICAgc3RkOjpw
YWlyPE1hbGxvY1B0cjx1aW50OF90Piwgc2l6ZV90PiByZXN1bHQgPSBlbmNvZGVDb2RlQmxvY2so
dm0sIGtleSwgY29kZUJsb2NrKTsKKworICAgIGludCBmZCA9IG9wZW4oZmlsZW5hbWUsIE9fQ1JF
QVQgfCBPX1dST05MWSwgMDY2Nik7CisgICAgaWYgKGZkID09IC0xKQorICAgICAgICByZXR1cm47
CisgICAgaW50IHJjID0gZmxvY2soZmQsIExPQ0tfRVggfCBMT0NLX05CKTsKKyAgICBpZiAoIXJj
KQorICAgICAgICA6OndyaXRlKGZkLCByZXN1bHQuZmlyc3QuZ2V0KCksIHJlc3VsdC5zZWNvbmQp
OworICAgIGNsb3NlKGZkKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHZtKTsKKyAgICBVTlVT
RURfUEFSQU0oa2V5KTsKKyAgICBVTlVTRURfUEFSQU0odmFsdWUpOworI2VuZGlmCit9CisKK0Nh
Y2hlZEJ5dGVjb2RlIHNlcmlhbGl6ZUJ5dGVjb2RlKFZNJiB2bSwgVW5saW5rZWRDb2RlQmxvY2sq
IGNvZGVCbG9jaywgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBTb3VyY2VDb2RlVHlwZSBjb2Rl
VHlwZSwgSlNQYXJzZXJTdHJpY3RNb2RlIHN0cmljdE1vZGUsIEpTUGFyc2VyU2NyaXB0TW9kZSBz
Y3JpcHRNb2RlLCBEZWJ1Z2dlck1vZGUgZGVidWdnZXJNb2RlKQoreworICAgIFNvdXJjZUNvZGVL
ZXkga2V5KAorICAgICAgICBzb3VyY2UsIFN0cmluZygpLCBjb2RlVHlwZSwgc3RyaWN0TW9kZSwg
c2NyaXB0TW9kZSwKKyAgICAgICAgRGVyaXZlZENvbnRleHRUeXBlOjpOb25lLCBFdmFsQ29udGV4
dFR5cGU6Ok5vbmUsIGZhbHNlLCBkZWJ1Z2dlck1vZGUsCisgICAgICAgIHZtLnR5cGVQcm9maWxl
cigpID8gVHlwZVByb2ZpbGVyRW5hYmxlZDo6WWVzIDogVHlwZVByb2ZpbGVyRW5hYmxlZDo6Tm8s
CisgICAgICAgIHZtLmNvbnRyb2xGbG93UHJvZmlsZXIoKSA/IENvbnRyb2xGbG93UHJvZmlsZXJF
bmFibGVkOjpZZXMgOiBDb250cm9sRmxvd1Byb2ZpbGVyRW5hYmxlZDo6Tm8sCisgICAgICAgIFdU
Rjo6bnVsbG9wdCk7CisgICAgc3RkOjpwYWlyPE1hbGxvY1B0cjx1aW50OF90Piwgc2l6ZV90PiBy
ZXN1bHQgPSBlbmNvZGVDb2RlQmxvY2sodm0sIGtleSwgY29kZUJsb2NrKTsKKyAgICByZXR1cm4g
Q2FjaGVkQnl0ZWNvZGUgeyBXVEZNb3ZlKHJlc3VsdC5maXJzdCksIHJlc3VsdC5zZWNvbmQgfTsK
K30KKwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29kZUNh
Y2hlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db2RlQ2FjaGUuaAppbmRleCA5
OTM5NWYyY2QyODQxMTM5YTAzNWM4YjE1ODliYjkzOWM2OWM1NzAyLi4wZjI0ZDNmODk0ODJiNzhh
Njg2M2ZkZjhiMzE5M2ExY2ZhZDMxNjk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Db2RlQ2FjaGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Db2RlQ2FjaGUuaApAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgIlN0cm9uZ0lubGluZXMu
aCIKICNpbmNsdWRlICJVbmxpbmtlZENvZGVCbG9jay5oIgogI2luY2x1ZGUgIlVubGlua2VkRXZh
bENvZGVCbG9jay5oIgorI2luY2x1ZGUgIlVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2suaCIKICNp
bmNsdWRlICJVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2suaCIKICNpbmNsdWRlICJVbmxp
bmtlZFByb2dyYW1Db2RlQmxvY2suaCIKICNpbmNsdWRlIDxzeXMvc3RhdC5oPgpAQCAtNjAsNiAr
NjEsMTUgQEAgY2xhc3MgVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrOwogY2xhc3MgVk07CiBjbGFz
cyBWYXJpYWJsZUVudmlyb25tZW50OwogCituYW1lc3BhY2UgQ29kZUNhY2hlSW50ZXJuYWwgewor
c3RhdGljIGNvbnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNlOworfSAvLyBuYW1lc3BhY2UgQ29kZUNh
Y2hlSW50ZXJuYWwKKworI2RlZmluZSBWRVJCT1NFX0xPRyguLi4pIGRvIHsgXAorICAgIGlmIChD
b2RlQ2FjaGVJbnRlcm5hbDo6dmVyYm9zZSkgXAorICAgICAgICBkYXRhTG9nTG4oIihKU0M6OkNv
ZGVDYWNoZSkgIiwgX19WQV9BUkdTX18pOyBcCit9IHdoaWxlIChmYWxzZSkKKwogc3RydWN0IFNv
dXJjZUNvZGVWYWx1ZSB7CiAgICAgU291cmNlQ29kZVZhbHVlKCkKICAgICB7CkBAIC05Nyw2ICsx
MDcsMTYgQEAgcHVibGljOgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFVubGlua2VkQ29kZUJsb2Nr
VHlwZT4KICAgICBVbmxpbmtlZENvZGVCbG9ja1R5cGUqIGZldGNoRnJvbURpc2tJbXBsKFZNJiB2
bSwgY29uc3QgU291cmNlQ29kZUtleSYga2V5KQogICAgIHsKKyAgICAgICAgeworICAgICAgICAg
ICAgY29uc3QgYXV0byogY2FjaGVkQnl0ZWNvZGUgPSBrZXkuc291cmNlKCkucHJvdmlkZXIoKS5j
YWNoZWRCeXRlY29kZSgpOworICAgICAgICAgICAgaWYgKGNhY2hlZEJ5dGVjb2RlICYmIGNhY2hl
ZEJ5dGVjb2RlLT5zaXplKCkpIHsKKyAgICAgICAgICAgICAgICBWRVJCT1NFX0xPRygiRm91bmQg
Y2FjaGVkIENvZGVCbG9jayBpbiB0aGUgU291cmNlUHJvdmlkZXIiKTsKKyAgICAgICAgICAgICAg
ICBVbmxpbmtlZENvZGVCbG9ja1R5cGUqIHVubGlua2VkQ29kZUJsb2NrID0gZGVjb2RlQ29kZUJs
b2NrPFVubGlua2VkQ29kZUJsb2NrVHlwZT4odm0sIGtleSwgY2FjaGVkQnl0ZWNvZGUtPmRhdGEo
KSwgY2FjaGVkQnl0ZWNvZGUtPnNpemUoKSk7CisgICAgICAgICAgICAgICAgaWYgKHVubGlua2Vk
Q29kZUJsb2NrKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5saW5rZWRDb2RlQmxvY2s7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKwogI2lmIE9TKERBUldJTikKICAgICAgICAgY29u
c3QgY2hhciogY2FjaGVQYXRoID0gT3B0aW9uczo6ZGlza0NhY2hlUGF0aCgpOwogICAgICAgICBp
ZiAoIWNhY2hlUGF0aCkKQEAgLTEyMSwxNSArMTQxLDIwIEBAIHB1YmxpYzoKICAgICAgICAgc3Ry
dWN0IHN0YXQgc2I7CiAgICAgICAgIGludCByZXMgPSBmc3RhdChmZCwgJnNiKTsKICAgICAgICAg
c2l6ZV90IHNpemUgPSBzdGF0aWNfY2FzdDxzaXplX3Q+KHNiLnN0X3NpemUpOwotICAgICAgICBp
ZiAocmVzIHx8ICFzaXplKQorICAgICAgICBpZiAocmVzIHx8ICFzaXplKSB7CisgICAgICAgICAg
ICBjbG9zZShmZCk7CiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQogCi0g
ICAgICAgIGNvbnN0IHZvaWQqIGJ1ZmZlciA9IG1tYXAobnVsbHB0ciwgc2l6ZSwgUFJPVF9SRUFE
LCBNQVBfUFJJVkFURSwgZmQsIDApOworICAgICAgICB2b2lkKiBidWZmZXIgPSBtbWFwKG51bGxw
dHIsIHNpemUsIFBST1RfUkVBRCwgTUFQX1BSSVZBVEUsIGZkLCAwKTsKICAgICAgICAgVW5saW5r
ZWRDb2RlQmxvY2tUeXBlKiB1bmxpbmtlZENvZGVCbG9jayA9IGRlY29kZUNvZGVCbG9jazxVbmxp
bmtlZENvZGVCbG9ja1R5cGU+KHZtLCBrZXksIGJ1ZmZlciwgc2l6ZSk7CisgICAgICAgIG11bm1h
cChidWZmZXIsIHNpemUpOwogCiAgICAgICAgIGlmICghdW5saW5rZWRDb2RlQmxvY2spCiAgICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAorCisgICAgICAgIFZFUkJPU0VfTE9HKCJGb3VuZCBj
YWNoZWQgQ29kZUJsb2NrIG9uIGRpc2siKTsKICAgICAgICAgYWRkQ2FjaGUoa2V5LCBTb3VyY2VD
b2RlVmFsdWUodm0sIHVubGlua2VkQ29kZUJsb2NrLCBtX2FnZSkpOwogICAgICAgICByZXR1cm4g
dW5saW5rZWRDb2RlQmxvY2s7CiAjZWxzZQpAQCAtMTU4LDYgKzE4Myw3IEBAIHB1YmxpYzoKICAg
ICB7CiAgICAgICAgIHBydW5lKCk7CiAKKyAgICAgICAgVkVSQk9TRV9MT0coIlRyeWluZyB0byBm
aW5kIGNhY2hlZCBDb2RlQmxvY2sgZm9yICIsIGtleS5zb3VyY2UoKS5wcm92aWRlcigpLnVybCgp
LnN0cmluZygpKTsKICAgICAgICAgaXRlcmF0b3IgZmluZFJlc3VsdCA9IG1fbWFwLmZpbmQoa2V5
KTsKICAgICAgICAgaWYgKGZpbmRSZXN1bHQgPT0gbV9tYXAuZW5kKCkpCiAgICAgICAgICAgICBy
ZXR1cm4gZmV0Y2hGcm9tRGlzazxVbmxpbmtlZENvZGVCbG9ja1R5cGU+KHZtLCBrZXkpOwpAQCAt
MTgwLDYgKzIwNiw3IEBAIHB1YmxpYzoKICAgICAgICAgZmluZFJlc3VsdC0+dmFsdWUuYWdlID0g
bV9hZ2U7CiAgICAgICAgIG1fYWdlICs9IGtleS5sZW5ndGgoKTsKIAorICAgICAgICBWRVJCT1NF
X0xPRygiRm91bmQgY2FjaGVkIENvZGVCbG9jayBpbiBtZW1vcnkiKTsKICAgICAgICAgcmV0dXJu
IGpzQ2FzdDxVbmxpbmtlZENvZGVCbG9ja1R5cGUqPihmaW5kUmVzdWx0LT52YWx1ZS5jZWxsLmdl
dCgpKTsKICAgICB9CiAKQEAgLTMyMiwzNiArMzQ5LDIwIEBAIFVubGlua2VkQ29kZUJsb2NrVHlw
ZSogZ2VuZXJhdGVVbmxpbmtlZENvZGVCbG9jayhWTSYgdm0sIEV4ZWN1dGFibGVUeXBlKiBleGVj
dXRhCiAgICAgcmV0dXJuIHVubGlua2VkQ29kZUJsb2NrOwogfQogCi1BTFdBWVNfSU5MSU5FIHN0
YXRpYyB2b2lkIHdyaXRlQ29kZUJsb2NrKFZNJiB2bSwgY29uc3QgU291cmNlQ29kZUtleSYga2V5
LCBjb25zdCBTb3VyY2VDb2RlVmFsdWUmIHZhbHVlKQordm9pZCBnZW5lcmF0ZVVubGlua2VkQ29k
ZUJsb2NrRm9yRnVuY3Rpb25zKFZNJiwgVW5saW5rZWRDb2RlQmxvY2sqLCBjb25zdCBTb3VyY2VD
b2RlJiwgRGVidWdnZXJNb2RlLCBQYXJzZXJFcnJvciYpOworCit0ZW1wbGF0ZSA8Y2xhc3MgVW5s
aW5rZWRDb2RlQmxvY2tUeXBlLCBjbGFzcyBFeGVjdXRhYmxlVHlwZT4KK1VubGlua2VkQ29kZUJs
b2NrVHlwZSogcmVjdXJzaXZlbHlHZW5lcmF0ZVVubGlua2VkQ29kZUJsb2NrKFZNJiB2bSwgRXhl
Y3V0YWJsZVR5cGUqIGV4ZWN1dGFibGUsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgSlNQYXJz
ZXJTdHJpY3RNb2RlIHN0cmljdE1vZGUsIEpTUGFyc2VyU2NyaXB0TW9kZSBzY3JpcHRNb2RlLCBE
ZWJ1Z2dlck1vZGUgZGVidWdnZXJNb2RlLCBQYXJzZXJFcnJvciYgZXJyb3IsIEV2YWxDb250ZXh0
VHlwZSBldmFsQ29udGV4dFR5cGUsIGNvbnN0IFZhcmlhYmxlRW52aXJvbm1lbnQqIHZhcmlhYmxl
c1VuZGVyVERaKQogewotI2lmIE9TKERBUldJTikKLSAgICBjb25zdCBjaGFyKiBjYWNoZVBhdGgg
PSBPcHRpb25zOjpkaXNrQ2FjaGVQYXRoKCk7Ci0gICAgaWYgKExJS0VMWSghY2FjaGVQYXRoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgVW5saW5rZWRDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGpz
RHluYW1pY0Nhc3Q8VW5saW5rZWRDb2RlQmxvY2sqPih2bSwgdmFsdWUuY2VsbC5nZXQoKSk7Ci0g
ICAgaWYgKCFjb2RlQmxvY2spCi0gICAgICAgIHJldHVybjsKLQotICAgIHVuc2lnbmVkIGhhc2gg
PSBrZXkuaGFzaCgpOwotICAgIGNoYXIgZmlsZW5hbWVbNTEyXTsKLSAgICBpbnQgY291bnQgPSBz
bnByaW50ZihmaWxlbmFtZSwgNTEyLCAiJXMvJXUuY2FjaGUiLCBjYWNoZVBhdGgsIGhhc2gpOwot
ICAgIGlmIChjb3VudCA8IDAgfHwgY291bnQgPiA1MTIpCi0gICAgICAgIHJldHVybjsKLQotICAg
IHN0ZDo6cGFpcjxNYWxsb2NQdHI8dWludDhfdD4sIHNpemVfdD4gcmVzdWx0ID0gZW5jb2RlQ29k
ZUJsb2NrKHZtLCBrZXksIGNvZGVCbG9jayk7Ci0KLSAgICBpbnQgZmQgPSBvcGVuKGZpbGVuYW1l
LCBPX0NSRUFUIHwgT19XUk9OTFksIDA2NjYpOwotICAgIGludCByYyA9IGZsb2NrKGZkLCBMT0NL
X0VYIHwgTE9DS19OQik7Ci0gICAgaWYgKCFyYykKLSAgICAgICAgOjp3cml0ZShmZCwgcmVzdWx0
LmZpcnN0LmdldCgpLCByZXN1bHQuc2Vjb25kKTsKLSAgICBjbG9zZShmZCk7Ci0jZWxzZQotICAg
IFVOVVNFRF9QQVJBTSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKGtleSk7Ci0gICAgVU5VU0VEX1BB
UkFNKHZhbHVlKTsKLSNlbmRpZgorICAgIFVubGlua2VkQ29kZUJsb2NrVHlwZSogdW5saW5rZWRD
b2RlQmxvY2sgPSBnZW5lcmF0ZVVubGlua2VkQ29kZUJsb2NrPFVubGlua2VkQ29kZUJsb2NrVHlw
ZSwgRXhlY3V0YWJsZVR5cGU+KHZtLCBleGVjdXRhYmxlLCBzb3VyY2UsIHN0cmljdE1vZGUsIHNj
cmlwdE1vZGUsIGRlYnVnZ2VyTW9kZSwgZXJyb3IsIGV2YWxDb250ZXh0VHlwZSwgdmFyaWFibGVz
VW5kZXJURFopOworICAgIGlmICghdW5saW5rZWRDb2RlQmxvY2spCisgICAgICAgIHJldHVybiBu
dWxscHRyOworCisgICAgZ2VuZXJhdGVVbmxpbmtlZENvZGVCbG9ja0ZvckZ1bmN0aW9ucyh2bSwg
dW5saW5rZWRDb2RlQmxvY2ssIHNvdXJjZSwgZGVidWdnZXJNb2RlLCBlcnJvcik7CisgICAgcmV0
dXJuIHVubGlua2VkQ29kZUJsb2NrOwogfQogCit2b2lkIHdyaXRlQ29kZUJsb2NrKFZNJiwgY29u
c3QgU291cmNlQ29kZUtleSYsIGNvbnN0IFNvdXJjZUNvZGVWYWx1ZSYpOworQ2FjaGVkQnl0ZWNv
ZGUgc2VyaWFsaXplQnl0ZWNvZGUoVk0mLCBVbmxpbmtlZENvZGVCbG9jayosIGNvbnN0IFNvdXJj
ZUNvZGUmLCBTb3VyY2VDb2RlVHlwZSwgSlNQYXJzZXJTdHJpY3RNb2RlLCBKU1BhcnNlclNjcmlw
dE1vZGUsIERlYnVnZ2VyTW9kZSk7CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tcGxldGlvbi5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Db21wbGV0aW9uLmNwcAppbmRleCAzZmI0YWI5ZDNhYTJlMzRi
YmNkOWFkZmZhNzMwN2U3MDc2YTQ2MWFmLi45YzRhMGU0ZmM4ZjA3ZDQxYWEzMDFkMjc3MDM2OGVj
ZjgzNWM4MWZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21w
bGV0aW9uLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21wbGV0aW9u
LmNwcApAQCAtMjUsNiArMjUsNyBAQAogCiAjaW5jbHVkZSAiQ2FsbEZyYW1lLmgiCiAjaW5jbHVk
ZSAiQ2F0Y2hTY29wZS5oIgorI2luY2x1ZGUgIkNvZGVDYWNoZS5oIgogI2luY2x1ZGUgIkNvZGVQ
cm9maWxpbmcuaCIKICNpbmNsdWRlICJFeGNlcHRpb24uaCIKICNpbmNsdWRlICJJZGVudGlmaWVy
SW5saW5lcy5oIgpAQCAtOTAsNiArOTEsNDQgQEAgYm9vbCBjaGVja01vZHVsZVN5bnRheChFeGVj
U3RhdGUqIGV4ZWMsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgUGFyc2VyRXJyb3ImIGUKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAorQ2FjaGVkQnl0ZWNvZGUgZ2VuZXJhdGVCeXRlY29kZShFeGVj
U3RhdGUqIGV4ZWMsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgUGFyc2VyRXJyb3ImIGVycm9y
KQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0p
OworICAgIFJFTEVBU0VfQVNTRVJUKHZtLmF0b21pY1N0cmluZ1RhYmxlKCkgPT0gVGhyZWFkOjpj
dXJyZW50KCkuYXRvbWljU3RyaW5nVGFibGUoKSk7CisKKyAgICBQcm9ncmFtRXhlY3V0YWJsZSog
ZXhlY3V0YWJsZSA9IFByb2dyYW1FeGVjdXRhYmxlOjpjcmVhdGUoZXhlYywgc291cmNlKTsKKyAg
ICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gdm0udm1FbnRyeUdsb2JhbE9iamVjdChl
eGVjKTsKKworICAgIFZhcmlhYmxlRW52aXJvbm1lbnQgdmFyaWFibGVzVW5kZXJURFo7CisgICAg
SlNQYXJzZXJTdHJpY3RNb2RlIHN0cmljdE1vZGUgPSBKU1BhcnNlclN0cmljdE1vZGU6Ok5vdFN0
cmljdDsKKyAgICBKU1BhcnNlclNjcmlwdE1vZGUgc2NyaXB0TW9kZSA9IEpTUGFyc2VyU2NyaXB0
TW9kZTo6Q2xhc3NpYzsKKyAgICBEZWJ1Z2dlck1vZGUgZGVidWdnZXJNb2RlID0gZ2xvYmFsT2Jq
ZWN0LT5oYXNJbnRlcmFjdGl2ZURlYnVnZ2VyKCkgPyBEZWJ1Z2dlck9uIDogRGVidWdnZXJPZmY7
CisgICAgRXZhbENvbnRleHRUeXBlIGV2YWxDb250ZXh0VHlwZSA9IEV2YWxDb250ZXh0VHlwZTo6
Tm9uZTsKKworICAgIFVubGlua2VkQ29kZUJsb2NrKiB1bmxpbmtlZENvZGVCbG9jayA9IHJlY3Vy
c2l2ZWx5R2VuZXJhdGVVbmxpbmtlZENvZGVCbG9jazxVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2s+
KHZtLCBleGVjdXRhYmxlLCBzb3VyY2UsIHN0cmljdE1vZGUsIHNjcmlwdE1vZGUsIGRlYnVnZ2Vy
TW9kZSwgZXJyb3IsIGV2YWxDb250ZXh0VHlwZSwgJnZhcmlhYmxlc1VuZGVyVERaKTsKKyAgICBy
ZXR1cm4gc2VyaWFsaXplQnl0ZWNvZGUodm0sIHVubGlua2VkQ29kZUJsb2NrLCBzb3VyY2UsIFNv
dXJjZUNvZGVUeXBlOjpQcm9ncmFtVHlwZSwgc3RyaWN0TW9kZSwgc2NyaXB0TW9kZSwgZGVidWdn
ZXJNb2RlKTsKK30KKworQ2FjaGVkQnl0ZWNvZGUgZ2VuZXJhdGVNb2R1bGVCeXRlY29kZShFeGVj
U3RhdGUqIGV4ZWMsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgUGFyc2VyRXJyb3ImIGVycm9y
KQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0p
OworICAgIFJFTEVBU0VfQVNTRVJUKHZtLmF0b21pY1N0cmluZ1RhYmxlKCkgPT0gVGhyZWFkOjpj
dXJyZW50KCkuYXRvbWljU3RyaW5nVGFibGUoKSk7CisKKyAgICBNb2R1bGVQcm9ncmFtRXhlY3V0
YWJsZSogZXhlY3V0YWJsZSA9IE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlOjpjcmVhdGUoZXhlYywg
c291cmNlKTsKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gdm0udm1FbnRyeUds
b2JhbE9iamVjdChleGVjKTsKKworICAgIFZhcmlhYmxlRW52aXJvbm1lbnQgdmFyaWFibGVzVW5k
ZXJURFo7CisgICAgSlNQYXJzZXJTdHJpY3RNb2RlIHN0cmljdE1vZGUgPSBKU1BhcnNlclN0cmlj
dE1vZGU6OlN0cmljdDsKKyAgICBKU1BhcnNlclNjcmlwdE1vZGUgc2NyaXB0TW9kZSA9IEpTUGFy
c2VyU2NyaXB0TW9kZTo6TW9kdWxlOworICAgIERlYnVnZ2VyTW9kZSBkZWJ1Z2dlck1vZGUgPSBn
bG9iYWxPYmplY3QtPmhhc0ludGVyYWN0aXZlRGVidWdnZXIoKSA/IERlYnVnZ2VyT24gOiBEZWJ1
Z2dlck9mZjsKKyAgICBFdmFsQ29udGV4dFR5cGUgZXZhbENvbnRleHRUeXBlID0gRXZhbENvbnRl
eHRUeXBlOjpOb25lOworCisgICAgVW5saW5rZWRDb2RlQmxvY2sqIHVubGlua2VkQ29kZUJsb2Nr
ID0gcmVjdXJzaXZlbHlHZW5lcmF0ZVVubGlua2VkQ29kZUJsb2NrPFVubGlua2VkTW9kdWxlUHJv
Z3JhbUNvZGVCbG9jaz4odm0sIGV4ZWN1dGFibGUsIHNvdXJjZSwgc3RyaWN0TW9kZSwgc2NyaXB0
TW9kZSwgZGVidWdnZXJNb2RlLCBlcnJvciwgZXZhbENvbnRleHRUeXBlLCAmdmFyaWFibGVzVW5k
ZXJURFopOworICAgIHJldHVybiBzZXJpYWxpemVCeXRlY29kZSh2bSwgdW5saW5rZWRDb2RlQmxv
Y2ssIHNvdXJjZSwgU291cmNlQ29kZVR5cGU6Ok1vZHVsZVR5cGUsIHN0cmljdE1vZGUsIHNjcmlw
dE1vZGUsIGRlYnVnZ2VyTW9kZSk7Cit9CisKIEpTVmFsdWUgZXZhbHVhdGUoRXhlY1N0YXRlKiBl
eGVjLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIEpTVmFsdWUgdGhpc1ZhbHVlLCBOYWtlZFB0
cjxFeGNlcHRpb24+JiByZXR1cm5lZEV4Y2VwdGlvbikKIHsKICAgICBWTSYgdm0gPSBleGVjLT52
bSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tcGxldGlv
bi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tcGxldGlvbi5oCmluZGV4IDgy
N2U2MWYzYzYxZDBjYjdiYmU3NWE2MTI3NzEyNGZiMGRhNzJhYWUuLjVjYWNkNmRhN2ViNzUyMDMz
YjVjNDgwNmJkOGU4NDk4NmFkMGE3MDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0NvbXBsZXRpb24uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Db21wbGV0aW9uLmgKQEAgLTI4LDYgKzI4LDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKK2Ns
YXNzIENhY2hlZEJ5dGVjb2RlOwogY2xhc3MgRXhjZXB0aW9uOwogY2xhc3MgRXhlY1N0YXRlOwog
Y2xhc3MgSlNPYmplY3Q7CkBAIC00MSw2ICs0Miw5IEBAIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wg
Y2hlY2tTeW50YXgoVk0mLCBjb25zdCBTb3VyY2VDb2RlJiwgUGFyc2VyRXJyb3ImKTsKIEpTX0VY
UE9SVF9QUklWQVRFIGJvb2wgY2hlY2tTeW50YXgoRXhlY1N0YXRlKiwgY29uc3QgU291cmNlQ29k
ZSYsIEpTVmFsdWUqIGV4Y2VwdGlvbiA9IDApOwogSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBjaGVj
a01vZHVsZVN5bnRheChFeGVjU3RhdGUqLCBjb25zdCBTb3VyY2VDb2RlJiwgUGFyc2VyRXJyb3Im
KTsKIAorSlNfRVhQT1JUX1BSSVZBVEUgQ2FjaGVkQnl0ZWNvZGUgZ2VuZXJhdGVCeXRlY29kZShF
eGVjU3RhdGUqLCBjb25zdCBTb3VyY2VDb2RlJiwgUGFyc2VyRXJyb3ImKTsKK0pTX0VYUE9SVF9Q
UklWQVRFIENhY2hlZEJ5dGVjb2RlIGdlbmVyYXRlTW9kdWxlQnl0ZWNvZGUoRXhlY1N0YXRlKiwg
Y29uc3QgU291cmNlQ29kZSYsIFBhcnNlckVycm9yJik7CisKIEpTX0VYUE9SVF9QUklWQVRFIEpT
VmFsdWUgZXZhbHVhdGUoRXhlY1N0YXRlKiwgY29uc3QgU291cmNlQ29kZSYsIEpTVmFsdWUgdGhp
c1ZhbHVlLCBOYWtlZFB0cjxFeGNlcHRpb24+JiByZXR1cm5lZEV4Y2VwdGlvbik7CiBpbmxpbmUg
SlNWYWx1ZSBldmFsdWF0ZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJj
ZUNvZGUsIEpTVmFsdWUgdGhpc1ZhbHVlID0gSlNWYWx1ZSgpKQogewpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9PcHRpb25zLmNwcAppbmRleCA4YjA1Y2E4MjMwMGJjNzlhMjI5YWM2MGY4
NmJiNDU2NjdlZWZkYTVlLi44NGQ3MzI2YTI0ZmJlNWE1ZGUwM2M1YzM4ZGJmMmJkZWRmMjM2MGNi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcApAQCAtNTI3LDkg
KzUyNyw2IEBAIHN0YXRpYyB2b2lkIHJlY29tcHV0ZURlcGVuZGVudE9wdGlvbnMoKQogCiAgICAg
aWYgKCFPcHRpb25zOjp1c2VDb2RlQ2FjaGUoKSkKICAgICAgICAgT3B0aW9uczo6ZGlza0NhY2hl
UGF0aCgpID0gbnVsbHB0cjsKLQotICAgIGlmICghT3B0aW9uczo6ZGlza0NhY2hlUGF0aCgpKQot
ICAgICAgICBPcHRpb25zOjpmb3JjZURpc2tDYWNoZSgpID0gZmFsc2U7CiB9CiAKIHZvaWQgT3B0
aW9uczo6aW5pdGlhbGl6ZSgpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>360040</attachid>
            <date>2019-01-24 14:37:30 -0800</date>
            <delta_ts>2019-01-25 07:58:21 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-193401-20190124233712.patch</filename>
            <type>text/plain</type>
            <size>40642</size>
            <attacher name="Tadeu Zagallo">tzagallo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQwMzQzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBh
NTE0YzhmZGRkMzRmNWNhNGE3MjlmZDQyODE0YTYyN2UxNDEwOWEzLi5kMjZjOTk5MTkwZTAzN2Q2
ODUxNWI5Yzg1MjM2ZWZmNDg2MTVhNzgzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw2NyBAQAorMjAxOS0wMS0yNCAgVGFkZXUgWmFnYWxsbyAgPHR6YWdhbGxvQGFwcGxlLmNv
bT4KKworICAgICAgICBBZGQgQVBJIHRvIGdlbmVyYXRlIGFuZCBjb25zdW1lIGNhY2hlZCBieXRl
Y29kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkz
NDAxCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS80NzUxNDA5OT4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgdGhlIGBnZW5lcmF0ZUJ5dGVjb2Rl
YCBhbmQgYGdlbmVyYXRlTW9kdWxlQnl0ZWNvZGVgIGZ1bmN0aW9ucyB0bworICAgICAgICBnZW5l
cmF0ZSBzZXJpYWxpemVkIGJ5dGVjb2RlIGZvciBhIGdpdmVuIGBTb3VyY2VDb2RlYC4gVGhlc2Ug
ZnVuY3Rpb25zCisgICAgICAgIHdpbGwgZWFnZXJseSBnZW5lcmF0ZSBjb2RlIGZvciBhbGwgdGhl
IG5lc3RlZCBmdW5jdGlvbnMuCisKKyAgICAgICAgQWRkaXRpb25hbGx5LCB1cGRhdGUgdGhlIEFQ
SSBtZXRob2RzIGluIEpTU2NyaXB0IHRvIGdlbmVyYXRlIGFuZCB1c2UgdGhlCisgICAgICAgIGJ5
dGVjb2RlIHdoZW4gdGhlIGJ5dGVjb2RlQ2FjaGUgcGF0aCBpcyBwcm92aWRlZC4KKworICAgICAg
ICAqIEFQSS9KU0FQSUdsb2JhbE9iamVjdC5tbToKKyAgICAgICAgKEpTQzo6SlNBUElHbG9iYWxP
YmplY3Q6Om1vZHVsZUxvYWRlckZldGNoKToKKyAgICAgICAgKiBBUEkvSlNDb250ZXh0Lm1tOgor
ICAgICAgICAqIEFQSS9KU1NjcmlwdC5tbToKKyAgICAgICAgKCtbSlNTY3JpcHQgc2NyaXB0V2l0
aFNvdXJjZTppblZpcnR1YWxNYWNoaW5lOl0pOgorICAgICAgICAoK1tKU1NjcmlwdCBzY3JpcHRG
cm9tQVNDSUlGaWxlOmluVmlydHVhbE1hY2hpbmU6d2l0aENvZGVTaWduaW5nOmFuZEJ5dGVjb2Rl
Q2FjaGU6XSk6CisgICAgICAgICgtW0pTU2NyaXB0IGRlYWxsb2NdKToKKyAgICAgICAgKC1bSlNT
Y3JpcHQgcmVhZENhY2hlXSk6CisgICAgICAgICgtW0pTU2NyaXB0IHdyaXRlQ2FjaGVdKToKKyAg
ICAgICAgKC1bSlNTY3JpcHQganNTb3VyY2VDb2RlOl0pOgorICAgICAgICAqIEFQSS9KU1Njcmlw
dEludGVybmFsLmg6CisgICAgICAgICogQVBJL0pTVmlydHVhbE1hY2hpbmUubW06CisgICAgICAg
ICgtW0pTVmlydHVhbE1hY2hpbmUgdm1dKToKKyAgICAgICAgKiBBUEkvSlNWaXJ0dWFsTWFjaGlu
ZUludGVybmFsLmg6CisgICAgICAgICogQVBJL3Rlc3RzL3Rlc3RhcGkubW06CisgICAgICAgICh0
ZXN0Qnl0ZWNvZGVDYWNoZSk6CisgICAgICAgICgtW0pTQ29udGV4dEZpbGVMb2FkZXJEZWxlZ2F0
ZSBjb250ZXh0OmZldGNoTW9kdWxlRm9ySWRlbnRpZmllcjp3aXRoUmVzb2x2ZUhhbmRsZXI6YW5k
UmVqZWN0SGFuZGxlcjpdKToKKyAgICAgICAgKHRlc3RPYmplY3RpdmVDQVBJKToKKyAgICAgICAg
KiBieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5jcHA6CisgICAgICAgIChKU0M6
OlVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOjp1bmxpbmtlZENvZGVCbG9ja0Zvcik6CisgICAg
ICAgICogYnl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuaDoKKyAgICAgICAgKiBw
YXJzZXIvU291cmNlQ29kZUtleS5oOgorICAgICAgICAoSlNDOjpTb3VyY2VDb2RlS2V5Ojpzb3Vy
Y2UgY29uc3QpOgorICAgICAgICAqIHBhcnNlci9Tb3VyY2VQcm92aWRlci5oOgorICAgICAgICAo
SlNDOjpDYWNoZWRCeXRlY29kZTo6Q2FjaGVkQnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpDYWNo
ZWRCeXRlY29kZTo6ZGF0YSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZEJ5dGVjb2RlOjpz
aXplIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkQnl0ZWNvZGU6On5DYWNoZWRCeXRlY29k
ZSk6CisgICAgICAgIChKU0M6OlNvdXJjZVByb3ZpZGVyOjpjYWNoZWRCeXRlY29kZSBjb25zdCk6
CisgICAgICAgIChKU0M6OkNhY2hlZEJ5dGVjb2RlU291cmNlUHJvdmlkZXI6OmNyZWF0ZSk6Cisg
ICAgICAgIChKU0M6OkNhY2hlZEJ5dGVjb2RlU291cmNlUHJvdmlkZXI6OkNhY2hlZEJ5dGVjb2Rl
U291cmNlUHJvdmlkZXIpOgorICAgICAgICAqIHBhcnNlci9VbmxpbmtlZFNvdXJjZUNvZGUuaDoK
KyAgICAgICAgKEpTQzo6VW5saW5rZWRTb3VyY2VDb2RlOjpwcm92aWRlciBjb25zdCk6CisgICAg
ICAgICogcnVudGltZS9Db2RlQ2FjaGUuY3BwOgorICAgICAgICAoSlNDOjpnZW5lcmF0ZVVubGlu
a2VkQ29kZUJsb2NrRm9yRnVuY3Rpb25zKToKKyAgICAgICAgKEpTQzo6d3JpdGVDb2RlQmxvY2sp
OgorICAgICAgICAoSlNDOjpzZXJpYWxpemVCeXRlY29kZSk6CisgICAgICAgICogcnVudGltZS9D
b2RlQ2FjaGUuaDoKKyAgICAgICAgKEpTQzo6Q29kZUNhY2hlTWFwOjpmZXRjaEZyb21EaXNrSW1w
bCk6CisgICAgICAgIChKU0M6OkNvZGVDYWNoZU1hcDo6ZmluZENhY2hlQW5kVXBkYXRlQWdlKToK
KyAgICAgICAgKEpTQzo6Z2VuZXJhdGVVbmxpbmtlZENvZGVCbG9ja0ltcGwpOgorICAgICAgICAo
SlNDOjpnZW5lcmF0ZVVubGlua2VkQ29kZUJsb2NrKToKKyAgICAgICAgKiBydW50aW1lL0NvbXBs
ZXRpb24uY3BwOgorICAgICAgICAoSlNDOjpnZW5lcmF0ZUJ5dGVjb2RlKToKKyAgICAgICAgKEpT
Qzo6Z2VuZXJhdGVNb2R1bGVCeXRlY29kZSk6CisgICAgICAgICogcnVudGltZS9Db21wbGV0aW9u
Lmg6CisgICAgICAgICogcnVudGltZS9PcHRpb25zLmNwcDoKKyAgICAgICAgKEpTQzo6cmVjb21w
dXRlRGVwZW5kZW50T3B0aW9ucyk6CisKIDIwMTktMDEtMjMgIERhdmlkIEtpbHplciAgPGRka2ls
emVyQGFwcGxlLmNvbT4KIAogICAgICAgICBbSlNDXSBEdXBsaWNhdGUgZ2xvYmFsIHZhcmlhYmxl
czogSlNDOjpvcGNvZGVMZW5ndGhzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
QVBJL0pTQVBJR2xvYmFsT2JqZWN0Lm1tIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0FQ
SUdsb2JhbE9iamVjdC5tbQppbmRleCAzY2E0YWI5MjUxZjcxYTU1ZWQyNDg0YWMxMTc2YzM5MDZl
OTkyY2M1Li5kNWMyMzY1ZDA4NDcxNDhjODBmODk5MmJjMDQ0MzUyZjMxYmNiZjBlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQVBJR2xvYmFsT2JqZWN0Lm1tCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElHbG9iYWxPYmplY3QubW0KQEAgLTE2NCw3
ICsxNjQsNiBAQCBKU0ludGVybmFsUHJvbWlzZSogSlNBUElHbG9iYWxPYmplY3Q6Om1vZHVsZUxv
YWRlckZldGNoKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYgogICAgIGF1dG8gZGVmZXJyZWRQcm9t
aXNlID0gU3Ryb25nPEpTSW50ZXJuYWxQcm9taXNlRGVmZXJyZWQ+KHZtLCBkZWZlcnJlZCk7CiAg
ICAgYXV0byBzdHJvbmdLZXkgPSBTdHJvbmc8SlNTdHJpbmc+KHZtLCBqc1NlY3VyZUNhc3Q8SlNT
dHJpbmcqPih2bSwga2V5KSk7CiAgICAgYXV0byogcmVzb2x2ZSA9IEpTTmF0aXZlU3RkRnVuY3Rp
b246OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCAxLCAicmVzb2x2ZSIsIFs9XSAoRXhlY1N0YXRl
KiBleGVjKSB7Ci0gICAgICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgICAgIC8vIFRoaXMg
Y2FwdHVyZXMgdGhlIGdsb2JhbE9iamVjdCBidXQgdGhhdCdzIG9rIGJlY2F1c2Ugb3VyIHN0cnVj
dHVyZSBrZWVwcyBpdCBhbGl2ZSBhbnl3YXkuCiAgICAgICAgIEpTQ29udGV4dCAqY29udGV4dCA9
IFtKU0NvbnRleHQgY29udGV4dFdpdGhKU0dsb2JhbENvbnRleHRSZWY6dG9HbG9iYWxSZWYoZ2xv
YmFsT2JqZWN0LT5nbG9iYWxFeGVjKCkpXTsKICAgICAgICAgaWQgc2NyaXB0ID0gdmFsdWVUb09i
amVjdChjb250ZXh0LCB0b1JlZihleGVjLCBleGVjLT5hcmd1bWVudCgwKSkpOwpAQCAtMTc2LDgg
KzE3NSw3IEBAIEpTSW50ZXJuYWxQcm9taXNlKiBKU0FQSUdsb2JhbE9iamVjdDo6bW9kdWxlTG9h
ZGVyRmV0Y2goSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iCiAgICAgICAgICAgICByZXR1cm4gZW5j
b2RlZEpTVW5kZWZpbmVkKCk7CiAgICAgICAgIH0KIAotICAgICAgICBjb25zdCBTdHJpbmcmIHNv
dXJjZSA9IGdldEpTU2NyaXB0U291cmNlQ29kZShzdGF0aWNfY2FzdDxKU1NjcmlwdCAqPihzY3Jp
cHQpKTsKLSAgICAgICAgYXJncy5hcHBlbmQoSlNTb3VyY2VDb2RlOjpjcmVhdGUodm0sIG1ha2VT
b3VyY2Uoc291cmNlLCBTb3VyY2VPcmlnaW4obW9kdWxlS2V5LnN0cmluZygpKSwgVVJMKHsgfSwg
bW9kdWxlS2V5LnN0cmluZygpKSwgVGV4dFBvc2l0aW9uKCksIEpTQzo6U291cmNlUHJvdmlkZXJT
b3VyY2VUeXBlOjpNb2R1bGUpKSk7CisgICAgICAgIGFyZ3MuYXBwZW5kKFtzdGF0aWNfY2FzdDxK
U1NjcmlwdCAqPihzY3JpcHQpIGpzU291cmNlQ29kZTptb2R1bGVLZXldKTsKICAgICAgICAgY2Fs
bChleGVjLCBkZWZlcnJlZFByb21pc2UtPkpTUHJvbWlzZURlZmVycmVkOjpyZXNvbHZlKCksIGFy
Z3MsICJUaGlzIHNob3VsZCBuZXZlciBiZSBzZWVuLi4uIik7CiAgICAgICAgIHJldHVybiBlbmNv
ZGVkSlNVbmRlZmluZWQoKTsKICAgICB9KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvSlNDb250ZXh0Lm1tIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRl
eHQubW0KaW5kZXggM2M3NzZkNGQ5MDBlZTE3MzMzNjJhYzI5ZjYyNGY0NDRkNTQ1ZTdiNC4uNzIz
YjFiYmRiNjg4NDI2NWE2MjZiNmNhZGE5YWNmYjI3YjlmMGI0ZiAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHQubW0KKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL0FQSS9KU0NvbnRleHQubW0KQEAgLTM0LDcgKzM0LDYgQEAKICNpbXBvcnQgIkpTR2xvYmFs
T2JqZWN0LmgiCiAjaW1wb3J0ICJKU0ludGVybmFsUHJvbWlzZS5oIgogI2ltcG9ydCAiSlNNb2R1
bGVMb2FkZXIuaCIKLSNpbXBvcnQgIkpTU2NyaXB0SW50ZXJuYWwuaCIKICNpbXBvcnQgIkpTVmFs
dWVJbnRlcm5hbC5oIgogI2ltcG9ydCAiSlNWaXJ0dWFsTWFjaGluZUludGVybmFsLmgiCiAjaW1w
b3J0ICJKU1dyYXBwZXJNYXAuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9B
UEkvSlNTY3JpcHQubW0gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTU2NyaXB0Lm1tCmlu
ZGV4IGY3ZTkzOWFmMDk4YmY1ZDBmNTNlZDFlOGIzMmQ3NWE0ZDgyM2ZkN2YuLjhiNWVmMmU2ZDNm
M2MyNTRiOGI1OGQxYTk0OGIwNGRiNzg2Y2Q4OGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvSlNTY3JpcHQubW0KKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9K
U1NjcmlwdC5tbQpAQCAtMjcsMjEgKzI3LDMxIEBACiAjaW1wb3J0ICJKU1NjcmlwdEludGVybmFs
LmgiCiAKICNpbXBvcnQgIkFQSUNhc3QuaCIKKyNpbXBvcnQgIklkZW50aWZpZXIuaCIKICNpbXBv
cnQgIkpTQ29udGV4dEludGVybmFsLmgiCisjaW1wb3J0ICJKU1NvdXJjZUNvZGUuaCIKICNpbXBv
cnQgIkpTVmFsdWVQcml2YXRlLmgiCisjaW1wb3J0ICJKU1ZpcnR1YWxNYWNoaW5lSW50ZXJuYWwu
aCIKKyNpbXBvcnQgIlBhcnNlckVycm9yLmgiCiAjaW1wb3J0ICJTeW1ib2wuaCIKKyNpbmNsdWRl
IDxzeXMvc3RhdC5oPgogCiAjaWYgSlNDX09CSkNfQVBJX0VOQUJMRUQKIAogQGltcGxlbWVudGF0
aW9uIEpTU2NyaXB0IHsKKyAgICBfX3dlYWsgSlNWaXJ0dWFsTWFjaGluZSogbV92aXJ0dWFsTWFj
aGluZTsKICAgICBTdHJpbmcgbV9zb3VyY2U7CisgICAgTlNVUkwqIG1fY2FjaGVQYXRoOworICAg
IEpTQzo6Q2FjaGVkQnl0ZWNvZGUgbV9jYWNoZWRCeXRlY29kZTsKKyAgICBKU0M6OlN0cm9uZzxK
U0M6OkpTU291cmNlQ29kZT4gbV9qc1NvdXJjZUNvZGU7CisgICAgVW5pcXVlZFN0cmluZ0ltcGwq
IG1fbW9kdWxlS2V5OwogfQogCiArIChpbnN0YW5jZXR5cGUpc2NyaXB0V2l0aFNvdXJjZTooTlNT
dHJpbmcgKilzb3VyY2UgaW5WaXJ0dWFsTWFjaGluZTooSlNWaXJ0dWFsTWFjaGluZSAqKXZtCiB7
Ci0gICAgVU5VU0VEX1BBUkFNKHZtKTsKLSAgICBKU1NjcmlwdCAqcmVzdWx0ID0gW1tKU1Njcmlw
dCBhbGxvY10gaW5pdF07CisgICAgSlNTY3JpcHQgKnJlc3VsdCA9IFtbW0pTU2NyaXB0IGFsbG9j
XSBpbml0XSBhdXRvcmVsZWFzZV07CiAgICAgcmVzdWx0LT5tX3NvdXJjZSA9IHNvdXJjZTsKKyAg
ICByZXN1bHQtPm1fdmlydHVhbE1hY2hpbmUgPSB2bTsKICAgICByZXR1cm4gcmVzdWx0OwogfQog
CkBAIC04MSw5ICs5MSw2IEBAICsgKGluc3RhbmNldHlwZSlzY3JpcHRGcm9tQVNDSUlGaWxlOihO
U1VSTCAqKWZpbGVQYXRoIGluVmlydHVhbE1hY2hpbmU6KEpTVmlydHVhCiB7CiAgICAgLy8gRklY
TUU6IFRoaXMgc2hvdWxkIGNoZWNrIGNvZGVTaWduaW5nLgogICAgIFVOVVNFRF9QQVJBTShjb2Rl
U2lnbmluZ1BhdGgpOwotICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBhY3R1YWxseSBjYWNoZSBi
eXRlY29kZS4KLSAgICBVTlVTRURfUEFSQU0oY2FjaGVQYXRoKTsKLSAgICBVTlVTRURfUEFSQU0o
dm0pOwogICAgIFVSTCBmaWxlUGF0aFVSTChbZmlsZVBhdGggYWJzb2x1dGVVUkxdKTsKICAgICBp
ZiAoIWZpbGVQYXRoVVJMLmlzTG9jYWxGaWxlKCkpCiAgICAgICAgIHJldHVybiBuaWw7CkBAIC05
NSw4ICsxMDIsMTEgQEAgKyAoaW5zdGFuY2V0eXBlKXNjcmlwdEZyb21BU0NJSUZpbGU6KE5TVVJM
ICopZmlsZVBhdGggaW5WaXJ0dWFsTWFjaGluZTooSlNWaXJ0dWEKICAgICBpZiAoIWNoYXJhY3Rl
cnNBcmVBbGxBU0NJSShidWZmZXIuZGF0YSgpLCBidWZmZXIuc2l6ZSgpKSkKICAgICAgICAgcmV0
dXJuIG5pbDsKIAotICAgIEpTU2NyaXB0ICpyZXN1bHQgPSBbW0pTU2NyaXB0IGFsbG9jXSBpbml0
XTsKKyAgICBKU1NjcmlwdCAqcmVzdWx0ID0gW1tbSlNTY3JpcHQgYWxsb2NdIGluaXRdIGF1dG9y
ZWxlYXNlXTsKKyAgICByZXN1bHQtPm1fdmlydHVhbE1hY2hpbmUgPSB2bTsKICAgICByZXN1bHQt
Pm1fc291cmNlID0gU3RyaW5nOjpmcm9tVVRGOFdpdGhMYXRpbjFGYWxsYmFjayhidWZmZXIuZGF0
YSgpLCBidWZmZXIuc2l6ZSgpKTsKKyAgICByZXN1bHQtPm1fY2FjaGVQYXRoID0gY2FjaGVQYXRo
OworICAgIFtyZXN1bHQgcmVhZENhY2hlXTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC0x
MDUsNyArMTE1LDgwIEBAICsgKGluc3RhbmNldHlwZSlzY3JpcHRGcm9tVVRGOEZpbGU6KE5TVVJM
ICopZmlsZVBhdGggaW5WaXJ0dWFsTWFjaGluZTooSlNWaXJ0dWFsCiAgICAgcmV0dXJuIFtKU1Nj
cmlwdCBzY3JpcHRGcm9tQVNDSUlGaWxlOmZpbGVQYXRoIGluVmlydHVhbE1hY2hpbmU6dm0gd2l0
aENvZGVTaWduaW5nOmNvZGVTaWduaW5nUGF0aCBhbmRCeXRlY29kZUNhY2hlOmNhY2hlUGF0aF07
CiB9CiAKLWNvbnN0IFN0cmluZyYgZ2V0SlNTY3JpcHRTb3VyY2VDb2RlKEpTU2NyaXB0ICptb2R1
bGUpIHsgcmV0dXJuIG1vZHVsZS0+bV9zb3VyY2U7IH0KKy0gKHZvaWQpZGVhbGxvYworeworICAg
IGlmIChtX2NhY2hlZEJ5dGVjb2RlLnNpemUoKSkKKyAgICAgICAgbXVubWFwKGNvbnN0X2Nhc3Q8
dm9pZCo+KG1fY2FjaGVkQnl0ZWNvZGUuZGF0YSgpKSwgbV9jYWNoZWRCeXRlY29kZS5zaXplKCkp
OworICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKworLSAodm9pZClyZWFkQ2FjaGUKK3sKKyAgICBp
ZiAoIW1fY2FjaGVQYXRoKQorICAgICAgICByZXR1cm47CisKKyAgICBpbnQgZmQgPSBvcGVuKG1f
Y2FjaGVQYXRoLnBhdGguVVRGOFN0cmluZywgT19SRE9OTFkpOworICAgIGlmIChmZCA9PSAtMSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgaW50IHJjID0gZmxvY2soZmQsIExPQ0tfU0ggfCBMT0NL
X05CKTsKKyAgICBpZiAocmMpIHsKKyAgICAgICAgY2xvc2UoZmQpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgc3RydWN0IHN0YXQgc2I7CisgICAgaW50IHJlcyA9IGZzdGF0KGZkLCAm
c2IpOworICAgIHNpemVfdCBzaXplID0gc3RhdGljX2Nhc3Q8c2l6ZV90PihzYi5zdF9zaXplKTsK
KyAgICBpZiAocmVzIHx8ICFzaXplKSB7CisgICAgICAgIGNsb3NlKGZkKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIHZvaWQqIGJ1ZmZlciA9IG1tYXAobnVsbHB0ciwgc2l6ZSwgUFJP
VF9SRUFELCBNQVBfUFJJVkFURSwgZmQsIDApOworICAgIGNsb3NlKGZkKTsKKworICAgIG1fY2Fj
aGVkQnl0ZWNvZGUgPSBKU0M6OkNhY2hlZEJ5dGVjb2RlIHsgYnVmZmVyLCBzaXplIH07Cit9CisK
Ky0gKHZvaWQpd3JpdGVDYWNoZQoreworICAgIGlmIChtX2NhY2hlZEJ5dGVjb2RlLnNpemUoKSB8
fCAhbV9jYWNoZVBhdGgpCisgICAgICAgIHJldHVybjsKKworICAgIEpTQzo6UGFyc2VyRXJyb3Ig
ZXJyb3I7CisgICAgbV9jYWNoZWRCeXRlY29kZSA9IEpTQzo6Z2VuZXJhdGVNb2R1bGVCeXRlY29k
ZShtX3ZpcnR1YWxNYWNoaW5lLnZtLCBtX2pzU291cmNlQ29kZS0+c291cmNlQ29kZSgpLCBlcnJv
cik7CisgICAgaWYgKGVycm9yLmlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGludCBm
ZCA9IG9wZW4obV9jYWNoZVBhdGgucGF0aC5VVEY4U3RyaW5nLCBPX0NSRUFUIHwgT19XUk9OTFks
IDA2NjYpOworICAgIGlmIChmZCA9PSAtMSkKKyAgICAgICAgcmV0dXJuOworICAgIGludCByYyA9
IGZsb2NrKGZkLCBMT0NLX0VYIHwgTE9DS19OQik7CisgICAgaWYgKCFyYykKKyAgICAgICAgd3Jp
dGUoZmQsIG1fY2FjaGVkQnl0ZWNvZGUuZGF0YSgpLCBtX2NhY2hlZEJ5dGVjb2RlLnNpemUoKSk7
CisgICAgY2xvc2UoZmQpOworfQorCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBKU1NjcmlwdChJ
bnRlcm5hbCkKKworLSAoSlNDOjpKU1NvdXJjZUNvZGUqKWpzU291cmNlQ29kZTooSlNDOjpJZGVu
dGlmaWVyKW1vZHVsZUtleQoreworICAgIGlmIChtX2pzU291cmNlQ29kZSkgeworICAgICAgICBB
U1NFUlQobW9kdWxlS2V5LmltcGwoKSA9PSBtX21vZHVsZUtleSk7CisgICAgICAgIHJldHVybiBt
X2pzU291cmNlQ29kZS5nZXQoKTsKKyAgICB9CisKKyAgICBKU0M6OlZNJiB2bSA9IG1fdmlydHVh
bE1hY2hpbmUudm07CisgICAgVGV4dFBvc2l0aW9uIHN0YXJ0UG9zaXRpb24geyB9OworICAgIFJl
ZjxKU0M6OkNhY2hlZEJ5dGVjb2RlU291cmNlUHJvdmlkZXI+IHNvdXJjZVByb3ZpZGVyID0gSlND
OjpDYWNoZWRCeXRlY29kZVNvdXJjZVByb3ZpZGVyOjpjcmVhdGUobV9zb3VyY2UsICZtX2NhY2hl
ZEJ5dGVjb2RlLCBKU0M6OlNvdXJjZU9yaWdpbihtb2R1bGVLZXkuc3RyaW5nKCkpLCBVUkwoeyB9
LCBtb2R1bGVLZXkuc3RyaW5nKCkpLCBUZXh0UG9zaXRpb24oKSwgSlNDOjpTb3VyY2VQcm92aWRl
clNvdXJjZVR5cGU6Ok1vZHVsZSk7CisgICAgSlNDOjpTb3VyY2VDb2RlIHNvdXJjZUNvZGUoV1RG
TW92ZShzb3VyY2VQcm92aWRlciksIHN0YXJ0UG9zaXRpb24ubV9saW5lLm9uZUJhc2VkSW50KCks
IHN0YXJ0UG9zaXRpb24ubV9jb2x1bW4ub25lQmFzZWRJbnQoKSk7CisgICAgSlNDOjpKU1NvdXJj
ZUNvZGUqIGpzU291cmNlQ29kZSA9IEpTQzo6SlNTb3VyY2VDb2RlOjpjcmVhdGUodm0sIFdURk1v
dmUoc291cmNlQ29kZSkpOworICAgIG1fanNTb3VyY2VDb2RlLnNldCh2bSwganNTb3VyY2VDb2Rl
KTsKKyAgICBbc2VsZiB3cml0ZUNhY2hlXTsKKyAgICByZXR1cm4ganNTb3VyY2VDb2RlOworfQog
CiBAZW5kCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNTY3JpcHRJ
bnRlcm5hbC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1NjcmlwdEludGVybmFsLmgK
aW5kZXggYTk3M2VkMWFkNGExZmM1ZmRmMzVjZjk0ODIzMDE3OTVhZTFmMmViMy4uZjMzMDMyNTFi
NzRkODI5NzkyOTIwN2ViOGY5ZjI2YmVmY2NlZmE5NyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL0FQSS9KU1NjcmlwdEludGVybmFsLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL0FQSS9KU1NjcmlwdEludGVybmFsLmgKQEAgLTI4LDYgKzI4LDEzIEBACiAjaW1wb3J0ICJK
U1NjcmlwdC5oIgogI2ltcG9ydCAiU291cmNlQ29kZS5oIgogCi1PQkpDX0NMQVNTIEpTU2NyaXB0
OworbmFtZXNwYWNlIEpTQyB7CitjbGFzcyBKU1NvdXJjZUNvZGU7CitjbGFzcyBJZGVudGlmaWVy
OworfTsKIAotY29uc3QgU3RyaW5nJiBnZXRKU1NjcmlwdFNvdXJjZUNvZGUoSlNTY3JpcHQgKik7
CitAaW50ZXJmYWNlIEpTU2NyaXB0KEludGVybmFsKQorCistIChKU0M6OkpTU291cmNlQ29kZSop
anNTb3VyY2VDb2RlOihKU0M6OklkZW50aWZpZXIpbW9kdWxlS2V5OworCitAZW5kCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmlydHVhbE1hY2hpbmUubW0gYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmlydHVhbE1hY2hpbmUubW0KaW5kZXggNWU3OTVmMDE2
ZjA1YTM4MWJkY2YxMDQwZjMzNWQwODk1Mzk1ZGVhYS4uNTA0ZDMzY2Y1ZjdjYjUzZjE2ZGQzNzc5
M2ZjNjFjOTE1ZTIzYmZlNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9K
U1ZpcnR1YWxNYWNoaW5lLm1tCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWaXJ0
dWFsTWFjaGluZS5tbQpAQCAtMjk3LDYgKzI5NywxMSBAQCArIChOU1VJbnRlZ2VyKXNldE51bWJl
ck9mRlRMQ29tcGlsZXJUaHJlYWRzOihOU1VJbnRlZ2VyKW51bWJlck9mVGhyZWFkcwogCiAjZW5k
aWYgLy8gRU5BQkxFKERGR19KSVQpCiAKKy0gKEpTQzo6Vk0mKXZtCit7CisgICAgcmV0dXJuICp0
b0pTKG1fZ3JvdXApOworfQorCiBAZW5kCiAKIHN0YXRpYyB2b2lkIHNjYW5FeHRlcm5hbE9iamVj
dEdyYXBoKEpTQzo6Vk0mIHZtLCBKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yLCB2b2lkKiByb290
LCBib29sIGxvY2tBY3F1aXJlZCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9B
UEkvSlNWaXJ0dWFsTWFjaGluZUludGVybmFsLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L0pTVmlydHVhbE1hY2hpbmVJbnRlcm5hbC5oCmluZGV4IDkxMjJlZDQ5YTRlYTFhYTQ5ZWM2Njdm
ZWY2NjI3ZmM0M2I3NzcxNmQuLjliMGJmNmJlZWIwN2FkZDA5YzYzZThiMTQwMzRhODhjZTgzZDZl
ZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWaXJ0dWFsTWFjaGlu
ZUludGVybmFsLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZpcnR1YWxNYWNo
aW5lSW50ZXJuYWwuaApAQCAtNDYsNiArNDYsOCBAQCBKU0NvbnRleHRHcm91cFJlZiBnZXRHcm91
cEZyb21WaXJ0dWFsTWFjaGluZShKU1ZpcnR1YWxNYWNoaW5lICopOwogCiAtIChKU0NvbnRleHQg
Kiljb250ZXh0Rm9yR2xvYmFsQ29udGV4dFJlZjooSlNHbG9iYWxDb250ZXh0UmVmKWdsb2JhbENv
bnRleHQ7CiAtICh2b2lkKWFkZENvbnRleHQ6KEpTQ29udGV4dCAqKXdyYXBwZXIgZm9yR2xvYmFs
Q29udGV4dFJlZjooSlNHbG9iYWxDb250ZXh0UmVmKWdsb2JhbENvbnRleHQ7CistIChKU0M6OlZN
Jil2bTsKKwogQGVuZAogCiAjZW5kaWYgLy8gZGVmaW5lZChfX09CSkNfXykKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVzdGFwaS5tbSBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVzdGFwaS5tbQppbmRleCAxM2JlYjY5ZjJiY2Q3MjE5NGM3
MGFmNTY4Zjk2MTJkNjFlZjZhY2MzLi4yMjg5ZTZlMzQ4OWFlMmY2Y2RjZWJmNTY1NjJhMzExM2Q2
OTY4NTViIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL3Rlc3Rh
cGkubW0KKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy90ZXN0YXBpLm1tCkBA
IC0xOTgwLDYgKzE5ODAsNjggQEAgc3RhdGljIHZvaWQgdGVzdEltcG9ydE1vZHVsZVR3aWNlKCkK
ICAgICB9CiB9CiAKK3N0YXRpYyB2b2lkIHRlc3RCeXRlY29kZUNhY2hlKCkKK3sKKyAgICBAYXV0
b3JlbGVhc2Vwb29sIHsKKyAgICAgICAgTlNVUkwqIHRlbXBEaXJlY3RvcnkgPSBbTlNVUkwgZmls
ZVVSTFdpdGhQYXRoOk5TVGVtcG9yYXJ5RGlyZWN0b3J5KCkgaXNEaXJlY3Rvcnk6WUVTXTsKKwor
ICAgICAgICBOU1N0cmluZyogZm9vU291cmNlID0gQCJpbXBvcnQgeyBuIH0gZnJvbSBcIi4uL2Zv
by5qc1wiOyBleHBvcnQgbGV0IGZvbyA9IG47IjsKKyAgICAgICAgTlNTdHJpbmcqIGJhclNvdXJj
ZSA9IEAiaW1wb3J0IFwib3RoZXJEaXJlY3RvcnkvYmF6LmpzXCI7IGV4cG9ydCBsZXQgbiA9IG51
bGw7IjsKKyAgICAgICAgTlNTdHJpbmcqIGJhelNvdXJjZSA9IEAiaW1wb3J0IHsgZm9vIH0gZnJv
bSBcIi4uL2RpcmVjdG9yeS9iYXIuanNcIjsgZ2xvYmFsVGhpcy5yYW4gPSBudWxsOyBleHBvcnQg
bGV0IGV4cCA9IGZvbzsiOworCisgICAgICAgIE5TVVJMKiBmb29QYXRoID0gW3RlbXBEaXJlY3Rv
cnkgVVJMQnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50OkAiZm9vLmpzIl07CisgICAgICAgIE5TVVJM
KiBiYXJQYXRoID0gW3RlbXBEaXJlY3RvcnkgVVJMQnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50OkAi
YmFyLmpzIl07CisgICAgICAgIE5TVVJMKiBiYXpQYXRoID0gW3RlbXBEaXJlY3RvcnkgVVJMQnlB
cHBlbmRpbmdQYXRoQ29tcG9uZW50OkAiYmF6LmpzIl07CisKKyAgICAgICAgTlNVUkwqIGZvb0Nh
Y2hlUGF0aCA9IFt0ZW1wRGlyZWN0b3J5IFVSTEJ5QXBwZW5kaW5nUGF0aENvbXBvbmVudDpAImZv
by5qcy5jYWNoZSJdOworICAgICAgICBOU1VSTCogYmFyQ2FjaGVQYXRoID0gW3RlbXBEaXJlY3Rv
cnkgVVJMQnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50OkAiYmFyLmpzLmNhY2hlIl07CisgICAgICAg
IE5TVVJMKiBiYXpDYWNoZVBhdGggPSBbdGVtcERpcmVjdG9yeSBVUkxCeUFwcGVuZGluZ1BhdGhD
b21wb25lbnQ6QCJiYXouanMuY2FjaGUiXTsKKworICAgICAgICBbZm9vU291cmNlIHdyaXRlVG9V
Ukw6Zm9vUGF0aCBhdG9taWNhbGx5Ok5PIGVuY29kaW5nOk5TQVNDSUlTdHJpbmdFbmNvZGluZyBl
cnJvcjpuaWxdOworICAgICAgICBbYmFyU291cmNlIHdyaXRlVG9VUkw6YmFyUGF0aCBhdG9taWNh
bGx5Ok5PIGVuY29kaW5nOk5TQVNDSUlTdHJpbmdFbmNvZGluZyBlcnJvcjpuaWxdOworICAgICAg
ICBbYmF6U291cmNlIHdyaXRlVG9VUkw6YmF6UGF0aCBhdG9taWNhbGx5Ok5PIGVuY29kaW5nOk5T
QVNDSUlTdHJpbmdFbmNvZGluZyBlcnJvcjpuaWxdOworCisgICAgICAgIF9fYmxvY2sgYm9vbCBm
b3JjZURpc2tDYWNoZSA9IGZhbHNlOworICAgICAgICBhdXRvIGJsb2NrID0gXihKU0NvbnRleHQg
KmNvbnRleHQsIEpTVmFsdWUgKmlkZW50aWZpZXIsIEpTVmFsdWUgKnJlc29sdmUsIEpTVmFsdWUg
KnJlamVjdCkgeworICAgICAgICAgICAgSlNDOjpPcHRpb25zOjpmb3JjZURpc2tDYWNoZSgpID0g
Zm9yY2VEaXNrQ2FjaGU7CisgICAgICAgICAgICBpZiAoW2lkZW50aWZpZXIgaXNFcXVhbFRvT2Jq
ZWN0OkAiZmlsZTovLy9kaXJlY3RvcnkvYmFyLmpzIl0pCisgICAgICAgICAgICAgICAgW3Jlc29s
dmUgY2FsbFdpdGhBcmd1bWVudHM6QFtbSlNTY3JpcHQgc2NyaXB0RnJvbUFTQ0lJRmlsZTpmb29Q
YXRoIGluVmlydHVhbE1hY2hpbmU6Y29udGV4dC52aXJ0dWFsTWFjaGluZSB3aXRoQ29kZVNpZ25p
bmc6bmlsIGFuZEJ5dGVjb2RlQ2FjaGU6Zm9vQ2FjaGVQYXRoXV1dOworICAgICAgICAgICAgZWxz
ZSBpZiAoW2lkZW50aWZpZXIgaXNFcXVhbFRvT2JqZWN0OkAiZmlsZTovLy9mb28uanMiXSkKKyAg
ICAgICAgICAgICAgICBbcmVzb2x2ZSBjYWxsV2l0aEFyZ3VtZW50czpAW1tKU1NjcmlwdCBzY3Jp
cHRGcm9tQVNDSUlGaWxlOmJhclBhdGggaW5WaXJ0dWFsTWFjaGluZTpjb250ZXh0LnZpcnR1YWxN
YWNoaW5lIHdpdGhDb2RlU2lnbmluZzpuaWwgYW5kQnl0ZWNvZGVDYWNoZTpiYXJDYWNoZVBhdGhd
XV07CisgICAgICAgICAgICBlbHNlIGlmIChbaWRlbnRpZmllciBpc0VxdWFsVG9PYmplY3Q6QCJm
aWxlOi8vL290aGVyRGlyZWN0b3J5L2Jhei5qcyJdKQorICAgICAgICAgICAgICAgIFtyZXNvbHZl
IGNhbGxXaXRoQXJndW1lbnRzOkBbW0pTU2NyaXB0IHNjcmlwdEZyb21BU0NJSUZpbGU6YmF6UGF0
aCBpblZpcnR1YWxNYWNoaW5lOmNvbnRleHQudmlydHVhbE1hY2hpbmUgd2l0aENvZGVTaWduaW5n
Om5pbCBhbmRCeXRlY29kZUNhY2hlOmJhekNhY2hlUGF0aF1dXTsKKyAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICBbcmVqZWN0IGNhbGxXaXRoQXJndW1lbnRzOkBbW0pTVmFsdWUgdmFs
dWVXaXRoTmV3RXJyb3JGcm9tTWVzc2FnZTpAIldlaXJkIHBhdGgiIGluQ29udGV4dDpjb250ZXh0
XV1dOworICAgICAgICB9OworCisgICAgICAgIEBhdXRvcmVsZWFzZXBvb2wgeworICAgICAgICAg
ICAgYXV0byAqY29udGV4dCA9IFtKU0NvbnRleHRGZXRjaERlbGVnYXRlIGNvbnRleHRXaXRoQmxv
Y2tGb3JGZXRjaDpibG9ja107CisgICAgICAgICAgICBjb250ZXh0Lm1vZHVsZUxvYWRlckRlbGVn
YXRlID0gY29udGV4dDsKKyAgICAgICAgICAgIEpTVmFsdWUgKnByb21pc2UgPSBbY29udGV4dCBl
dmFsdWF0ZVNjcmlwdDpAImltcG9ydCgnLi4vb3RoZXJEaXJlY3RvcnkvYmF6LmpzJyk7IiB3aXRo
U291cmNlVVJMOltOU1VSTCBmaWxlVVJMV2l0aFBhdGg6QCIvZGlyZWN0b3J5IiBpc0RpcmVjdG9y
eTpZRVNdXTsKKyAgICAgICAgICAgIEpTVmFsdWUgKm51bGwgPSBbSlNWYWx1ZSB2YWx1ZVdpdGhO
dWxsSW5Db250ZXh0OmNvbnRleHRdOworICAgICAgICAgICAgY2hlY2tNb2R1bGVDb2RlUmFuKGNv
bnRleHQsIHByb21pc2UsIG51bGwpOworICAgICAgICB9CisKKyAgICAgICAgQGF1dG9yZWxlYXNl
cG9vbCB7CisgICAgICAgICAgICBmb3JjZURpc2tDYWNoZSA9IHRydWU7CisgICAgICAgICAgICBh
dXRvICpjb250ZXh0ID0gW0pTQ29udGV4dEZldGNoRGVsZWdhdGUgY29udGV4dFdpdGhCbG9ja0Zv
ckZldGNoOmJsb2NrXTsKKyAgICAgICAgICAgIGNvbnRleHQubW9kdWxlTG9hZGVyRGVsZWdhdGUg
PSBjb250ZXh0OworICAgICAgICAgICAgSlNWYWx1ZSAqcHJvbWlzZSA9IFtjb250ZXh0IGV2YWx1
YXRlU2NyaXB0OkAiaW1wb3J0KCcuLi9vdGhlckRpcmVjdG9yeS9iYXouanMnKTsiIHdpdGhTb3Vy
Y2VVUkw6W05TVVJMIGZpbGVVUkxXaXRoUGF0aDpAIi9kaXJlY3RvcnkiIGlzRGlyZWN0b3J5OllF
U11dOworICAgICAgICAgICAgSlNWYWx1ZSAqbnVsbCA9IFtKU1ZhbHVlIHZhbHVlV2l0aE51bGxJ
bkNvbnRleHQ6Y29udGV4dF07CisgICAgICAgICAgICBjaGVja01vZHVsZUNvZGVSYW4oY29udGV4
dCwgcHJvbWlzZSwgbnVsbCk7CisgICAgICAgICAgICBKU0M6Ok9wdGlvbnM6OmZvcmNlRGlza0Nh
Y2hlKCkgPSBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIE5TRmlsZU1hbmFnZXIqIGZpbGVN
YW5hZ2VyID0gW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdOworICAgICAgICBbZmlsZU1h
bmFnZXIgcmVtb3ZlSXRlbUF0VVJMOmZvb1BhdGggZXJyb3I6bmlsXTsKKyAgICAgICAgW2ZpbGVN
YW5hZ2VyIHJlbW92ZUl0ZW1BdFVSTDpiYXJQYXRoIGVycm9yOm5pbF07CisgICAgICAgIFtmaWxl
TWFuYWdlciByZW1vdmVJdGVtQXRVUkw6YmF6UGF0aCBlcnJvcjpuaWxdOworICAgICAgICBbZmls
ZU1hbmFnZXIgcmVtb3ZlSXRlbUF0VVJMOmZvb0NhY2hlUGF0aCBlcnJvcjpuaWxdOworICAgICAg
ICBbZmlsZU1hbmFnZXIgcmVtb3ZlSXRlbUF0VVJMOmJhckNhY2hlUGF0aCBlcnJvcjpuaWxdOwor
ICAgICAgICBbZmlsZU1hbmFnZXIgcmVtb3ZlSXRlbUF0VVJMOmJhekNhY2hlUGF0aCBlcnJvcjpu
aWxdOworICAgIH0KK30KKwogQGludGVyZmFjZSBKU0NvbnRleHRGaWxlTG9hZGVyRGVsZWdhdGUg
OiBKU0NvbnRleHQgPEpTTW9kdWxlTG9hZGVyRGVsZWdhdGU+CiAKICsgKGluc3RhbmNldHlwZSlu
ZXdDb250ZXh0OwpAQCAtMjAxNyw3ICsyMDc5LDcgQEAgc3RhdGljIE5TVVJMICpyZXNvbHZlUGF0
aFRvU2NyaXB0cygpCiAtICh2b2lkKWNvbnRleHQ6KEpTQ29udGV4dCAqKWNvbnRleHQgZmV0Y2hN
b2R1bGVGb3JJZGVudGlmaWVyOihKU1ZhbHVlICopaWRlbnRpZmllciB3aXRoUmVzb2x2ZUhhbmRs
ZXI6KEpTVmFsdWUgKilyZXNvbHZlIGFuZFJlamVjdEhhbmRsZXI6KEpTVmFsdWUgKilyZWplY3QK
IHsKICAgICBOU1VSTCAqZmlsZVBhdGggPSBbTlNVUkwgVVJMV2l0aFN0cmluZzpbaWRlbnRpZmll
ciB0b1N0cmluZ11dOwotICAgIGF1dG8gKnNjcmlwdCA9IFtKU1NjcmlwdCBzY3JpcHRGcm9tQVND
SUlGaWxlOmZpbGVQYXRoIGluVmlydHVhbE1hY2hpbmU6W2NvbnRleHQgdmlydHVhbE1hY2hpbmVd
IHdpdGhDb2RlU2lnbmluZzpuaWwgYW5kQnl0ZWNvZGVDYWNoZTpuaWxdOworICAgIGF1dG8gKnNj
cmlwdCA9IFtKU1NjcmlwdCBzY3JpcHRGcm9tQVNDSUlGaWxlOmZpbGVQYXRoIGluVmlydHVhbE1h
Y2hpbmU6Y29udGV4dC52aXJ0dWFsTWFjaGluZSB3aXRoQ29kZVNpZ25pbmc6bmlsIGFuZEJ5dGVj
b2RlQ2FjaGU6bmlsXTsKICAgICBpZiAoc2NyaXB0KQogICAgICAgICBbcmVzb2x2ZSBjYWxsV2l0
aEFyZ3VtZW50czpAW3NjcmlwdF1dOwogICAgIGVsc2UKQEAgLTIwNDksNiArMjExMSw3IEBAIHZv
aWQgdGVzdE9iamVjdGl2ZUNBUEkoKQogICAgIHRlc3RGZXRjaFdpdGhUd29DeWNsZSgpOwogICAg
IHRlc3RGZXRjaFdpdGhUaHJlZUN5Y2xlKCk7CiAgICAgdGVzdEltcG9ydE1vZHVsZVR3aWNlKCk7
CisgICAgdGVzdEJ5dGVjb2RlQ2FjaGUoKTsKIAogICAgIHRlc3RMb2FkZXJSZWplY3RzTmlsU2Ny
aXB0VVJMKCk7CiAgICAgdGVzdExvYWRlclJlamVjdHNGYWlsZWRGZXRjaCgpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25FeGVjdXRh
YmxlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9u
RXhlY3V0YWJsZS5jcHAKaW5kZXggYjExNGQzOWU5MDIyNmE1MTBiMjQ1ODUyMWQ5NWM2M2Y3NTAz
M2VlYi4uZThkYzE5ODFmMGU2M2MyNjAxNjA5ZDI0MGI5YTM3OTcxOWNhYTU4OSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25FeGVjdXRh
YmxlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRGdW5j
dGlvbkV4ZWN1dGFibGUuY3BwCkBAIC0xOTQsNiArMTk0LDE2IEBAIFVubGlua2VkRnVuY3Rpb25F
eGVjdXRhYmxlKiBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6ZnJvbUdsb2JhbENvZGUoCiAg
ICAgcmV0dXJuIGV4ZWN1dGFibGU7CiB9CiAKK1VubGlua2VkRnVuY3Rpb25Db2RlQmxvY2sqIFVu
bGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOjp1bmxpbmtlZENvZGVCbG9ja0ZvcihDb2RlU3BlY2lh
bGl6YXRpb25LaW5kIHNwZWNpYWxpemF0aW9uS2luZCkKK3sKKyAgICBzd2l0Y2ggKHNwZWNpYWxp
emF0aW9uS2luZCkgeworICAgIGNhc2UgQ29kZUZvckNhbGw6CisgICAgICAgIHJldHVybiBtX3Vu
bGlua2VkQ29kZUJsb2NrRm9yQ2FsbC5nZXQoKTsKKyAgICBjYXNlIENvZGVGb3JDb25zdHJ1Y3Q6
CisgICAgICAgIHJldHVybiBtX3VubGlua2VkQ29kZUJsb2NrRm9yQ29uc3RydWN0LmdldCgpOwor
ICAgIH0KK30KKwogVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayogVW5saW5rZWRGdW5jdGlvbkV4
ZWN1dGFibGU6OnVubGlua2VkQ29kZUJsb2NrRm9yKAogICAgIFZNJiB2bSwgY29uc3QgU291cmNl
Q29kZSYgc291cmNlLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIHNwZWNpYWxpemF0aW9uS2luZCwg
CiAgICAgRGVidWdnZXJNb2RlIGRlYnVnZ2VyTW9kZSwgUGFyc2VyRXJyb3ImIGVycm9yLCBTb3Vy
Y2VQYXJzZU1vZGUgcGFyc2VNb2RlKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuaAppbmRleCA2NTI2Y2Q5
MGNiYmFhNjllMjZjYzBhMWMwYWM3N2I2OGMxOTVmYjU2Li5kNjM3ZDY4YWY1YWQ2MzE1NThlYTkz
YjNiODZiOWRhMDRjYjgzMTc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuaApAQCAtMTA0LDYgKzEw
NCw4IEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCB0eXBlUHJvZmlsaW5nRW5kT2Zmc2V0KCkgY29u
c3QgeyByZXR1cm4gbV90eXBlUHJvZmlsaW5nRW5kT2Zmc2V0OyB9CiAgICAgdm9pZCBzZXRJbnZh
bGlkVHlwZVByb2ZpbGluZ09mZnNldHMoKTsKIAorICAgIFVubGlua2VkRnVuY3Rpb25Db2RlQmxv
Y2sqIHVubGlua2VkQ29kZUJsb2NrRm9yKENvZGVTcGVjaWFsaXphdGlvbktpbmQpOworCiAgICAg
VW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayogdW5saW5rZWRDb2RlQmxvY2tGb3IoCiAgICAgICAg
IFZNJiwgY29uc3QgU291cmNlQ29kZSYsIENvZGVTcGVjaWFsaXphdGlvbktpbmQsIERlYnVnZ2Vy
TW9kZSwKICAgICAgICAgUGFyc2VyRXJyb3ImLCBTb3VyY2VQYXJzZU1vZGUpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Tb3VyY2VDb2RlS2V5LmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcGFyc2VyL1NvdXJjZUNvZGVLZXkuaAppbmRleCBjYzNhYmUyMWZhZjU3
MTRiZjk5ODAxZGZiOWVlZDQyODM0ODFmMTg5Li5iYzAyZjEyOWFiZjE4NWJlNzU1OGZiZDYzNTRk
NTkzZjg2YzhiYjcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1Nv
dXJjZUNvZGVLZXkuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1NvdXJjZUNv
ZGVLZXkuaApAQCAtMTAwLDYgKzEwMCw4IEBAIHB1YmxpYzoKIAogICAgIHVuc2lnbmVkIGhhc2go
KSBjb25zdCB7IHJldHVybiBtX2hhc2g7IH0KIAorICAgIGNvbnN0IFVubGlua2VkU291cmNlQ29k
ZSYgc291cmNlKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2VDb2RlOyB9CisKICAgICBzaXplX3Qg
bGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2VDb2RlLmxlbmd0aCgpOyB9CiAKICAgICBi
b29sIGlzTnVsbCgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlQ29kZS5pc051bGwoKTsgfQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Tb3VyY2VQcm92aWRlci5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Tb3VyY2VQcm92aWRlci5oCmluZGV4IDA5YWQx
NjgzNGIwYWZiN2JlOWYzMTRhZmMyZjI1MGFkODJlZGI1ZTUuLjdkYmNjZWU3NjE2MTUwYjc1MDUy
ZTkyZTE3OWY4MTViNzUwOTkwYmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9w
YXJzZXIvU291cmNlUHJvdmlkZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2Vy
L1NvdXJjZVByb3ZpZGVyLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDA4LCAyMDA5LCAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAwOC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDIsNiArNDIsNDMgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIFdlYkFzc2VtYmx5LAogICAgIH07CiAKKyAgICBjbGFzcyBDYWNo
ZWRCeXRlY29kZSB7CisgICAgcHVibGljOgorICAgICAgICBDYWNoZWRCeXRlY29kZSgpCisgICAg
ICAgICAgICA6IENhY2hlZEJ5dGVjb2RlKG51bGxwdHIsIDApCisgICAgICAgIHsKKyAgICAgICAg
fQorCisgICAgICAgIENhY2hlZEJ5dGVjb2RlKGNvbnN0IHZvaWQqIGRhdGEsIHNpemVfdCBzaXpl
KQorICAgICAgICAgICAgOiBtX293bmVkKGZhbHNlKQorICAgICAgICAgICAgLCBtX3NpemUoc2l6
ZSkKKyAgICAgICAgICAgICwgbV9kYXRhKGRhdGEpCisgICAgICAgIHsKKyAgICAgICAgfQorCisg
ICAgICAgIENhY2hlZEJ5dGVjb2RlKE1hbGxvY1B0cjx1aW50OF90PiYmIGRhdGEsIHNpemVfdCBz
aXplKQorICAgICAgICAgICAgOiBtX293bmVkKHRydWUpCisgICAgICAgICAgICAsIG1fc2l6ZShz
aXplKQorICAgICAgICAgICAgLCBtX2RhdGEoZGF0YS5sZWFrUHRyKCkpCisgICAgICAgIHsKKyAg
ICAgICAgfQorCisgICAgICAgIGNvbnN0IHZvaWQqIGRhdGEoKSBjb25zdCB7IHJldHVybiBtX2Rh
dGE7IH0KKyAgICAgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KKwor
ICAgICAgICB+Q2FjaGVkQnl0ZWNvZGUoKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobV9k
YXRhICYmIG1fb3duZWQpCisgICAgICAgICAgICAgICAgZmFzdEZyZWUoY29uc3RfY2FzdDx2b2lk
Kj4obV9kYXRhKSk7CisgICAgICAgIH0KKworICAgIHByaXZhdGU6CisgICAgICAgIGJvb2wgbV9v
d25lZDsKKyAgICAgICAgc2l6ZV90IG1fc2l6ZTsKKyAgICAgICAgY29uc3Qgdm9pZCogbV9kYXRh
OworICAgIH07CisKKwogICAgIGNsYXNzIFNvdXJjZVByb3ZpZGVyIDogcHVibGljIFJlZkNvdW50
ZWQ8U291cmNlUHJvdmlkZXI+IHsKICAgICBwdWJsaWM6CiAgICAgICAgIHN0YXRpYyBjb25zdCBp
bnRwdHJfdCBudWxsSUQgPSAxOwpAQCAtNTIsNiArODksOCBAQCBuYW1lc3BhY2UgSlNDIHsKIAog
ICAgICAgICB2aXJ0dWFsIHVuc2lnbmVkIGhhc2goKSBjb25zdCA9IDA7CiAgICAgICAgIHZpcnR1
YWwgU3RyaW5nVmlldyBzb3VyY2UoKSBjb25zdCA9IDA7CisgICAgICAgIHZpcnR1YWwgY29uc3Qg
Q2FjaGVkQnl0ZWNvZGUqIGNhY2hlZEJ5dGVjb2RlKCkgY29uc3QgeyByZXR1cm4gbnVsbHB0cjsg
fQorCiAgICAgICAgIFN0cmluZ1ZpZXcgZ2V0UmFuZ2UoaW50IHN0YXJ0LCBpbnQgZW5kKSBjb25z
dAogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gc291cmNlKCkuc3Vic3RyaW5nKHN0YXJ0
LCBlbmQgLSBzdGFydCk7CkBAIC0xMDQsMTUgKzE0MywzOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgICAgIHJldHVybiBtX3NvdXJjZS5nZXQoKTsKICAgICAgICAgfQogCi0gICAgcHJpdmF0
ZToKKyAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIFN0cmluZ1NvdXJjZVByb3ZpZGVyKGNvbnN0IFN0
cmluZyYgc291cmNlLCBjb25zdCBTb3VyY2VPcmlnaW4mIHNvdXJjZU9yaWdpbiwgVVJMJiYgdXJs
LCBjb25zdCBUZXh0UG9zaXRpb24mIHN0YXJ0UG9zaXRpb24sIFNvdXJjZVByb3ZpZGVyU291cmNl
VHlwZSBzb3VyY2VUeXBlKQogICAgICAgICAgICAgOiBTb3VyY2VQcm92aWRlcihzb3VyY2VPcmln
aW4sIFdURk1vdmUodXJsKSwgc3RhcnRQb3NpdGlvbiwgc291cmNlVHlwZSkKICAgICAgICAgICAg
ICwgbV9zb3VyY2Uoc291cmNlLmlzTnVsbCgpID8gKlN0cmluZ0ltcGw6OmVtcHR5KCkgOiAqc291
cmNlLmltcGwoKSkKICAgICAgICAgewogICAgICAgICB9CiAKKyAgICBwcml2YXRlOgogICAgICAg
ICBSZWY8U3RyaW5nSW1wbD4gbV9zb3VyY2U7CiAgICAgfTsKKworICAgIGNsYXNzIENhY2hlZEJ5
dGVjb2RlU291cmNlUHJvdmlkZXIgOiBwdWJsaWMgU3RyaW5nU291cmNlUHJvdmlkZXIgeworICAg
IHB1YmxpYzoKKyAgICAgICAgc3RhdGljIFJlZjxDYWNoZWRCeXRlY29kZVNvdXJjZVByb3ZpZGVy
PiBjcmVhdGUoY29uc3QgU3RyaW5nJiBzb3VyY2UsIGNvbnN0IENhY2hlZEJ5dGVjb2RlKiBjYWNo
ZWRCeXRlY29kZSwgY29uc3QgU291cmNlT3JpZ2luJiBzb3VyY2VPcmlnaW4sIFVSTCYmIHVybCwg
Y29uc3QgVGV4dFBvc2l0aW9uJiBzdGFydFBvc2l0aW9uID0gVGV4dFBvc2l0aW9uKCksIFNvdXJj
ZVByb3ZpZGVyU291cmNlVHlwZSBzb3VyY2VUeXBlID0gU291cmNlUHJvdmlkZXJTb3VyY2VUeXBl
OjpQcm9ncmFtKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBD
YWNoZWRCeXRlY29kZVNvdXJjZVByb3ZpZGVyKHNvdXJjZSwgY2FjaGVkQnl0ZWNvZGUsIHNvdXJj
ZU9yaWdpbiwgV1RGTW92ZSh1cmwpLCBzdGFydFBvc2l0aW9uLCBzb3VyY2VUeXBlKSk7CisgICAg
ICAgIH0KKworICAgICAgICBjb25zdCBDYWNoZWRCeXRlY29kZSogY2FjaGVkQnl0ZWNvZGUoKSBj
b25zdCBvdmVycmlkZQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9jYWNoZWRCeXRl
Y29kZTsKKyAgICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgQ2FjaGVkQnl0ZWNvZGVT
b3VyY2VQcm92aWRlcihjb25zdCBTdHJpbmcmIHNvdXJjZSwgY29uc3QgQ2FjaGVkQnl0ZWNvZGUq
IGNhY2hlZEJ5dGVjb2RlLCBjb25zdCBTb3VyY2VPcmlnaW4mIHNvdXJjZU9yaWdpbiwgVVJMJiYg
dXJsLCBjb25zdCBUZXh0UG9zaXRpb24mIHN0YXJ0UG9zaXRpb24sIFNvdXJjZVByb3ZpZGVyU291
cmNlVHlwZSBzb3VyY2VUeXBlKQorICAgICAgICAgICAgOiBTdHJpbmdTb3VyY2VQcm92aWRlcihz
b3VyY2UsIHNvdXJjZU9yaWdpbiwgV1RGTW92ZSh1cmwpLCBzdGFydFBvc2l0aW9uLCBzb3VyY2VU
eXBlKQorICAgICAgICAgICAgLCBtX2NhY2hlZEJ5dGVjb2RlKGNhY2hlZEJ5dGVjb2RlKQorICAg
ICAgICB7CisgICAgICAgIH0KKworICAgICAgICBjb25zdCBDYWNoZWRCeXRlY29kZSogbV9jYWNo
ZWRCeXRlY29kZTsKKyAgICB9OwogICAgIAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKICAgICBj
bGFzcyBXZWJBc3NlbWJseVNvdXJjZVByb3ZpZGVyIDogcHVibGljIFNvdXJjZVByb3ZpZGVyIHsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvVW5saW5rZWRTb3VyY2VD
b2RlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1VubGlua2VkU291cmNlQ29kZS5o
CmluZGV4IGFhYWFkM2Y0MTJmOGYzZmE1YmMxZjJmZWJmYjE0Y2M3NGRlMjI0MjQuLmZhZTBlMzUx
ZWFiZTUwZmI4YTRjNTM5Mjg5ZjM1Yjg2MmQxN2RiNzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9wYXJzZXIvVW5saW5rZWRTb3VyY2VDb2RlLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3BhcnNlci9VbmxpbmtlZFNvdXJjZUNvZGUuaApAQCAtODEsNiArODEsMTEgQEAg
bmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgp
IGNvbnN0IHsgcmV0dXJuIG1fcHJvdmlkZXIuaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKTsgfQog
CisgICAgICAgIGNvbnN0IFNvdXJjZVByb3ZpZGVyJiBwcm92aWRlcigpIGNvbnN0CisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiAqbV9wcm92aWRlcjsKKyAgICAgICAgfQorCiAgICAgICAg
IHVuc2lnbmVkIGhhc2goKSBjb25zdAogICAgICAgICB7CiAgICAgICAgICAgICBBU1NFUlQobV9w
cm92aWRlcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db2Rl
Q2FjaGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29kZUNhY2hlLmNwcApp
bmRleCBjMzJkMjA0YjZjZDg5NjgxODFjYjBkMWRmMGVhYjgzZWMxMTgxOWQ0Li44OTVhODQwYjkx
NTZjZWI5MDM5NzA1MmNhMGNkNzExNmQzMzg5MTU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Db2RlQ2FjaGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0NvZGVDYWNoZS5jcHAKQEAgLTE2Miw0ICsxNjIsNzIgQEAgdm9pZCBDb2RlQ2Fj
aGU6OndyaXRlKFZNJiB2bSkKICAgICAgICAgd3JpdGVDb2RlQmxvY2sodm0sIGl0LmtleSwgaXQu
dmFsdWUpOwogfQogCit2b2lkIGdlbmVyYXRlVW5saW5rZWRDb2RlQmxvY2tGb3JGdW5jdGlvbnMo
Vk0mIHZtLCBVbmxpbmtlZENvZGVCbG9jayogdW5saW5rZWRDb2RlQmxvY2ssIGNvbnN0IFNvdXJj
ZUNvZGUmIHBhcmVudFNvdXJjZSwgRGVidWdnZXJNb2RlIGRlYnVnZ2VyTW9kZSwgUGFyc2VyRXJy
b3ImIGVycm9yKQoreworICAgIGF1dG8gZ2VuZXJhdGUgPSBbJl0oVW5saW5rZWRGdW5jdGlvbkV4
ZWN1dGFibGUqIHVubGlua2VkRXhlY3V0YWJsZSwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBjb25z
dHJ1Y3RvcktpbmQpIHsKKyAgICAgICAgaWYgKGNvbnN0cnVjdG9yS2luZCA9PSBDb2RlRm9yQ29u
c3RydWN0ICYmIFNvdXJjZVBhcnNlTW9kZVNldChTb3VyY2VQYXJzZU1vZGU6OkFzeW5jQXJyb3dG
dW5jdGlvbk1vZGUsIFNvdXJjZVBhcnNlTW9kZTo6QXN5bmNNZXRob2RNb2RlLCBTb3VyY2VQYXJz
ZU1vZGU6OkFzeW5jRnVuY3Rpb25Nb2RlKS5jb250YWlucyh1bmxpbmtlZEV4ZWN1dGFibGUtPnBh
cnNlTW9kZSgpKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBGdW5jdGlvbkV4ZWN1
dGFibGUqIGV4ZWN1dGFibGUgPSB1bmxpbmtlZEV4ZWN1dGFibGUtPmxpbmsodm0sIHBhcmVudFNv
dXJjZSk7CisgICAgICAgIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSA9IGV4ZWN1dGFibGUtPnNv
dXJjZSgpOworICAgICAgICBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKiB1bmxpbmtlZEZ1bmN0
aW9uQ29kZUJsb2NrID0gdW5saW5rZWRFeGVjdXRhYmxlLT51bmxpbmtlZENvZGVCbG9ja0Zvcih2
bSwgc291cmNlLCBjb25zdHJ1Y3RvcktpbmQsIGRlYnVnZ2VyTW9kZSwgZXJyb3IsIHVubGlua2Vk
RXhlY3V0YWJsZS0+cGFyc2VNb2RlKCkpOworICAgICAgICBpZiAodW5saW5rZWRGdW5jdGlvbkNv
ZGVCbG9jaykKKyAgICAgICAgICAgIGdlbmVyYXRlVW5saW5rZWRDb2RlQmxvY2tGb3JGdW5jdGlv
bnModm0sIHVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2ssIHNvdXJjZSwgZGVidWdnZXJNb2RlLCBl
cnJvcik7CisgICAgfTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB1bmxpbmtlZENv
ZGVCbG9jay0+bnVtYmVyT2ZGdW5jdGlvbkRlY2xzKCk7IGkrKykgeworICAgICAgICBnZW5lcmF0
ZSh1bmxpbmtlZENvZGVCbG9jay0+ZnVuY3Rpb25EZWNsKGkpLCBDb2RlRm9yQ2FsbCk7CisgICAg
ICAgIGdlbmVyYXRlKHVubGlua2VkQ29kZUJsb2NrLT5mdW5jdGlvbkRlY2woaSksIENvZGVGb3JD
b25zdHJ1Y3QpOworICAgIH0KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdW5saW5rZWRD
b2RlQmxvY2stPm51bWJlck9mRnVuY3Rpb25FeHBycygpOyBpKyspIHsKKyAgICAgICAgZ2VuZXJh
dGUodW5saW5rZWRDb2RlQmxvY2stPmZ1bmN0aW9uRXhwcihpKSwgQ29kZUZvckNhbGwpOworICAg
ICAgICBnZW5lcmF0ZSh1bmxpbmtlZENvZGVCbG9jay0+ZnVuY3Rpb25FeHByKGkpLCBDb2RlRm9y
Q29uc3RydWN0KTsKKyAgICB9Cit9CisKK3ZvaWQgd3JpdGVDb2RlQmxvY2soVk0mIHZtLCBjb25z
dCBTb3VyY2VDb2RlS2V5JiBrZXksIGNvbnN0IFNvdXJjZUNvZGVWYWx1ZSYgdmFsdWUpCit7Cisj
aWYgT1MoREFSV0lOKQorICAgIGNvbnN0IGNoYXIqIGNhY2hlUGF0aCA9IE9wdGlvbnM6OmRpc2tD
YWNoZVBhdGgoKTsKKyAgICBpZiAoTElLRUxZKCFjYWNoZVBhdGgpKQorICAgICAgICByZXR1cm47
CisKKyAgICBVbmxpbmtlZENvZGVCbG9jayogY29kZUJsb2NrID0ganNEeW5hbWljQ2FzdDxVbmxp
bmtlZENvZGVCbG9jayo+KHZtLCB2YWx1ZS5jZWxsLmdldCgpKTsKKyAgICBpZiAoIWNvZGVCbG9j
aykKKyAgICAgICAgcmV0dXJuOworCisgICAgdW5zaWduZWQgaGFzaCA9IGtleS5oYXNoKCk7Cisg
ICAgY2hhciBmaWxlbmFtZVs1MTJdOworICAgIGludCBjb3VudCA9IHNucHJpbnRmKGZpbGVuYW1l
LCA1MTIsICIlcy8ldS5jYWNoZSIsIGNhY2hlUGF0aCwgaGFzaCk7CisgICAgaWYgKGNvdW50IDwg
MCB8fCBjb3VudCA+IDUxMikKKyAgICAgICAgcmV0dXJuOworCisgICAgc3RkOjpwYWlyPE1hbGxv
Y1B0cjx1aW50OF90Piwgc2l6ZV90PiByZXN1bHQgPSBlbmNvZGVDb2RlQmxvY2sodm0sIGtleSwg
Y29kZUJsb2NrKTsKKworICAgIGludCBmZCA9IG9wZW4oZmlsZW5hbWUsIE9fQ1JFQVQgfCBPX1dS
T05MWSwgMDY2Nik7CisgICAgaWYgKGZkID09IC0xKQorICAgICAgICByZXR1cm47CisgICAgaW50
IHJjID0gZmxvY2soZmQsIExPQ0tfRVggfCBMT0NLX05CKTsKKyAgICBpZiAoIXJjKQorICAgICAg
ICA6OndyaXRlKGZkLCByZXN1bHQuZmlyc3QuZ2V0KCksIHJlc3VsdC5zZWNvbmQpOworICAgIGNs
b3NlKGZkKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHZtKTsKKyAgICBVTlVTRURfUEFSQU0o
a2V5KTsKKyAgICBVTlVTRURfUEFSQU0odmFsdWUpOworI2VuZGlmCit9CisKK0NhY2hlZEJ5dGVj
b2RlIHNlcmlhbGl6ZUJ5dGVjb2RlKFZNJiB2bSwgVW5saW5rZWRDb2RlQmxvY2sqIGNvZGVCbG9j
aywgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBTb3VyY2VDb2RlVHlwZSBjb2RlVHlwZSwgSlNQ
YXJzZXJTdHJpY3RNb2RlIHN0cmljdE1vZGUsIEpTUGFyc2VyU2NyaXB0TW9kZSBzY3JpcHRNb2Rl
LCBEZWJ1Z2dlck1vZGUgZGVidWdnZXJNb2RlKQoreworICAgIFNvdXJjZUNvZGVLZXkga2V5KAor
ICAgICAgICBzb3VyY2UsIFN0cmluZygpLCBjb2RlVHlwZSwgc3RyaWN0TW9kZSwgc2NyaXB0TW9k
ZSwKKyAgICAgICAgRGVyaXZlZENvbnRleHRUeXBlOjpOb25lLCBFdmFsQ29udGV4dFR5cGU6Ok5v
bmUsIGZhbHNlLCBkZWJ1Z2dlck1vZGUsCisgICAgICAgIHZtLnR5cGVQcm9maWxlcigpID8gVHlw
ZVByb2ZpbGVyRW5hYmxlZDo6WWVzIDogVHlwZVByb2ZpbGVyRW5hYmxlZDo6Tm8sCisgICAgICAg
IHZtLmNvbnRyb2xGbG93UHJvZmlsZXIoKSA/IENvbnRyb2xGbG93UHJvZmlsZXJFbmFibGVkOjpZ
ZXMgOiBDb250cm9sRmxvd1Byb2ZpbGVyRW5hYmxlZDo6Tm8sCisgICAgICAgIFdURjo6bnVsbG9w
dCk7CisgICAgc3RkOjpwYWlyPE1hbGxvY1B0cjx1aW50OF90Piwgc2l6ZV90PiByZXN1bHQgPSBl
bmNvZGVDb2RlQmxvY2sodm0sIGtleSwgY29kZUJsb2NrKTsKKyAgICByZXR1cm4gQ2FjaGVkQnl0
ZWNvZGUgeyBXVEZNb3ZlKHJlc3VsdC5maXJzdCksIHJlc3VsdC5zZWNvbmQgfTsKK30KKwogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29kZUNhY2hlLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db2RlQ2FjaGUuaAppbmRleCA5OTM5NWYyY2Qy
ODQxMTM5YTAzNWM4YjE1ODliYjkzOWM2OWM1NzAyLi45ODZkYTA1MzE0Mzk5NzIyOWI1NTIyMDQy
YTY1MjYwZWQ2NjE0YWNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Db2RlQ2FjaGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db2RlQ2Fj
aGUuaApAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgIlN0cm9uZ0lubGluZXMuaCIKICNpbmNs
dWRlICJVbmxpbmtlZENvZGVCbG9jay5oIgogI2luY2x1ZGUgIlVubGlua2VkRXZhbENvZGVCbG9j
ay5oIgorI2luY2x1ZGUgIlVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2suaCIKICNpbmNsdWRlICJV
bmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2suaCIKICNpbmNsdWRlICJVbmxpbmtlZFByb2dy
YW1Db2RlQmxvY2suaCIKICNpbmNsdWRlIDxzeXMvc3RhdC5oPgpAQCAtNjAsNiArNjEsMTUgQEAg
Y2xhc3MgVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrOwogY2xhc3MgVk07CiBjbGFzcyBWYXJpYWJs
ZUVudmlyb25tZW50OwogCituYW1lc3BhY2UgQ29kZUNhY2hlSW50ZXJuYWwgeworc3RhdGljIGNv
bnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNlOworfSAvLyBuYW1lc3BhY2UgQ29kZUNhY2hlSW50ZXJu
YWwKKworI2RlZmluZSBWRVJCT1NFX0xPRyguLi4pIGRvIHsgXAorICAgIGlmIChDb2RlQ2FjaGVJ
bnRlcm5hbDo6dmVyYm9zZSkgXAorICAgICAgICBkYXRhTG9nTG4oIihKU0M6OkNvZGVDYWNoZSkg
IiwgX19WQV9BUkdTX18pOyBcCit9IHdoaWxlIChmYWxzZSkKKwogc3RydWN0IFNvdXJjZUNvZGVW
YWx1ZSB7CiAgICAgU291cmNlQ29kZVZhbHVlKCkKICAgICB7CkBAIC05Nyw2ICsxMDcsMTYgQEAg
cHVibGljOgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFVubGlua2VkQ29kZUJsb2NrVHlwZT4KICAg
ICBVbmxpbmtlZENvZGVCbG9ja1R5cGUqIGZldGNoRnJvbURpc2tJbXBsKFZNJiB2bSwgY29uc3Qg
U291cmNlQ29kZUtleSYga2V5KQogICAgIHsKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3Qg
YXV0byogY2FjaGVkQnl0ZWNvZGUgPSBrZXkuc291cmNlKCkucHJvdmlkZXIoKS5jYWNoZWRCeXRl
Y29kZSgpOworICAgICAgICAgICAgaWYgKGNhY2hlZEJ5dGVjb2RlICYmIGNhY2hlZEJ5dGVjb2Rl
LT5zaXplKCkpIHsKKyAgICAgICAgICAgICAgICBWRVJCT1NFX0xPRygiRm91bmQgY2FjaGVkIENv
ZGVCbG9jayBpbiB0aGUgU291cmNlUHJvdmlkZXIiKTsKKyAgICAgICAgICAgICAgICBVbmxpbmtl
ZENvZGVCbG9ja1R5cGUqIHVubGlua2VkQ29kZUJsb2NrID0gZGVjb2RlQ29kZUJsb2NrPFVubGlu
a2VkQ29kZUJsb2NrVHlwZT4odm0sIGtleSwgY2FjaGVkQnl0ZWNvZGUtPmRhdGEoKSwgY2FjaGVk
Qnl0ZWNvZGUtPnNpemUoKSk7CisgICAgICAgICAgICAgICAgaWYgKHVubGlua2VkQ29kZUJsb2Nr
KQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5saW5rZWRDb2RlQmxvY2s7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKwogI2lmIE9TKERBUldJTikKICAgICAgICAgY29uc3QgY2hhciog
Y2FjaGVQYXRoID0gT3B0aW9uczo6ZGlza0NhY2hlUGF0aCgpOwogICAgICAgICBpZiAoIWNhY2hl
UGF0aCkKQEAgLTEyMSwxNSArMTQxLDIwIEBAIHB1YmxpYzoKICAgICAgICAgc3RydWN0IHN0YXQg
c2I7CiAgICAgICAgIGludCByZXMgPSBmc3RhdChmZCwgJnNiKTsKICAgICAgICAgc2l6ZV90IHNp
emUgPSBzdGF0aWNfY2FzdDxzaXplX3Q+KHNiLnN0X3NpemUpOwotICAgICAgICBpZiAocmVzIHx8
ICFzaXplKQorICAgICAgICBpZiAocmVzIHx8ICFzaXplKSB7CisgICAgICAgICAgICBjbG9zZShm
ZCk7CiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQogCi0gICAgICAgIGNv
bnN0IHZvaWQqIGJ1ZmZlciA9IG1tYXAobnVsbHB0ciwgc2l6ZSwgUFJPVF9SRUFELCBNQVBfUFJJ
VkFURSwgZmQsIDApOworICAgICAgICB2b2lkKiBidWZmZXIgPSBtbWFwKG51bGxwdHIsIHNpemUs
IFBST1RfUkVBRCwgTUFQX1BSSVZBVEUsIGZkLCAwKTsKICAgICAgICAgVW5saW5rZWRDb2RlQmxv
Y2tUeXBlKiB1bmxpbmtlZENvZGVCbG9jayA9IGRlY29kZUNvZGVCbG9jazxVbmxpbmtlZENvZGVC
bG9ja1R5cGU+KHZtLCBrZXksIGJ1ZmZlciwgc2l6ZSk7CisgICAgICAgIG11bm1hcChidWZmZXIs
IHNpemUpOwogCiAgICAgICAgIGlmICghdW5saW5rZWRDb2RlQmxvY2spCiAgICAgICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKIAorCisgICAgICAgIFZFUkJPU0VfTE9HKCJGb3VuZCBjYWNoZWQgQ29k
ZUJsb2NrIG9uIGRpc2siKTsKICAgICAgICAgYWRkQ2FjaGUoa2V5LCBTb3VyY2VDb2RlVmFsdWUo
dm0sIHVubGlua2VkQ29kZUJsb2NrLCBtX2FnZSkpOwogICAgICAgICByZXR1cm4gdW5saW5rZWRD
b2RlQmxvY2s7CiAjZWxzZQpAQCAtMTU4LDYgKzE4Myw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAg
ICAgIHBydW5lKCk7CiAKKyAgICAgICAgVkVSQk9TRV9MT0coIlRyeWluZyB0byBmaW5kIGNhY2hl
ZCBDb2RlQmxvY2sgZm9yICIsIGtleS5zb3VyY2UoKS5wcm92aWRlcigpLnVybCgpLnN0cmluZygp
KTsKICAgICAgICAgaXRlcmF0b3IgZmluZFJlc3VsdCA9IG1fbWFwLmZpbmQoa2V5KTsKICAgICAg
ICAgaWYgKGZpbmRSZXN1bHQgPT0gbV9tYXAuZW5kKCkpCiAgICAgICAgICAgICByZXR1cm4gZmV0
Y2hGcm9tRGlzazxVbmxpbmtlZENvZGVCbG9ja1R5cGU+KHZtLCBrZXkpOwpAQCAtMTgwLDYgKzIw
Niw3IEBAIHB1YmxpYzoKICAgICAgICAgZmluZFJlc3VsdC0+dmFsdWUuYWdlID0gbV9hZ2U7CiAg
ICAgICAgIG1fYWdlICs9IGtleS5sZW5ndGgoKTsKIAorICAgICAgICBWRVJCT1NFX0xPRygiRm91
bmQgY2FjaGVkIENvZGVCbG9jayBpbiBtZW1vcnkiKTsKICAgICAgICAgcmV0dXJuIGpzQ2FzdDxV
bmxpbmtlZENvZGVCbG9ja1R5cGUqPihmaW5kUmVzdWx0LT52YWx1ZS5jZWxsLmdldCgpKTsKICAg
ICB9CiAKQEAgLTI5MSwxMSArMzE4LDEwIEBAIHRlbXBsYXRlIDw+IHN0cnVjdCBDYWNoZVR5cGVz
PFVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jaz4gewogICAgIHN0YXRpYyBjb25zdCBTb3Vy
Y2VQYXJzZU1vZGUgcGFyc2VNb2RlID0gU291cmNlUGFyc2VNb2RlOjpNb2R1bGVFdmFsdWF0ZU1v
ZGU7CiB9OwogCi10ZW1wbGF0ZSA8Y2xhc3MgVW5saW5rZWRDb2RlQmxvY2tUeXBlLCBjbGFzcyBF
eGVjdXRhYmxlVHlwZT4KLVVubGlua2VkQ29kZUJsb2NrVHlwZSogZ2VuZXJhdGVVbmxpbmtlZENv
ZGVCbG9jayhWTSYgdm0sIEV4ZWN1dGFibGVUeXBlKiBleGVjdXRhYmxlLCBjb25zdCBTb3VyY2VD
b2RlJiBzb3VyY2UsIEpTUGFyc2VyU3RyaWN0TW9kZSBzdHJpY3RNb2RlLCBKU1BhcnNlclNjcmlw
dE1vZGUgc2NyaXB0TW9kZSwgRGVidWdnZXJNb2RlIGRlYnVnZ2VyTW9kZSwgUGFyc2VyRXJyb3Im
IGVycm9yLCBFdmFsQ29udGV4dFR5cGUgZXZhbENvbnRleHRUeXBlLCBjb25zdCBWYXJpYWJsZUVu
dmlyb25tZW50KiB2YXJpYWJsZXNVbmRlclREWikKK3RlbXBsYXRlIDxjbGFzcyBVbmxpbmtlZENv
ZGVCbG9ja1R5cGUsIGNsYXNzIEV4ZWN1dGFibGVUeXBlID0gU2NyaXB0RXhlY3V0YWJsZT4KK1Vu
bGlua2VkQ29kZUJsb2NrVHlwZSogZ2VuZXJhdGVVbmxpbmtlZENvZGVCbG9ja0ltcGwoVk0mIHZt
LCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIEpTUGFyc2VyU3RyaWN0TW9kZSBzdHJpY3RNb2Rl
LCBKU1BhcnNlclNjcmlwdE1vZGUgc2NyaXB0TW9kZSwgRGVidWdnZXJNb2RlIGRlYnVnZ2VyTW9k
ZSwgUGFyc2VyRXJyb3ImIGVycm9yLCBFdmFsQ29udGV4dFR5cGUgZXZhbENvbnRleHRUeXBlLCBE
ZXJpdmVkQ29udGV4dFR5cGUgZGVyaXZlZENvbnRleHRUeXBlLCBib29sIGlzQXJyb3dGdW5jdGlv
bkNvbnRleHQsIGNvbnN0IFZhcmlhYmxlRW52aXJvbm1lbnQqIHZhcmlhYmxlc1VuZGVyVERaLCBF
eGVjdXRhYmxlVHlwZSogZXhlY3V0YWJsZSA9IG51bGxwdHIpCiB7CiAgICAgdHlwZWRlZiB0eXBl
bmFtZSBDYWNoZVR5cGVzPFVubGlua2VkQ29kZUJsb2NrVHlwZT46OlJvb3ROb2RlIFJvb3ROb2Rl
OwotICAgIERlcml2ZWRDb250ZXh0VHlwZSBkZXJpdmVkQ29udGV4dFR5cGUgPSBleGVjdXRhYmxl
LT5kZXJpdmVkQ29udGV4dFR5cGUoKTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Um9vdE5vZGU+IHJv
b3ROb2RlID0gcGFyc2U8Um9vdE5vZGU+KAogICAgICAgICAmdm0sIHNvdXJjZSwgSWRlbnRpZmll
cigpLCBKU1BhcnNlckJ1aWx0aW5Nb2RlOjpOb3RCdWlsdGluLCBzdHJpY3RNb2RlLCBzY3JpcHRN
b2RlLCBDYWNoZVR5cGVzPFVubGlua2VkQ29kZUJsb2NrVHlwZT46OnBhcnNlTW9kZSwgU3VwZXJC
aW5kaW5nOjpOb3ROZWVkZWQsIGVycm9yLCBudWxscHRyLCBDb25zdHJ1Y3RvcktpbmQ6Ok5vbmUs
IGRlcml2ZWRDb250ZXh0VHlwZSwgZXZhbENvbnRleHRUeXBlKTsKICAgICBpZiAoIXJvb3ROb2Rl
KQpAQCAtMzA2LDEwICszMzIsMTUgQEAgVW5saW5rZWRDb2RlQmxvY2tUeXBlKiBnZW5lcmF0ZVVu
bGlua2VkQ29kZUJsb2NrKFZNJiB2bSwgRXhlY3V0YWJsZVR5cGUqIGV4ZWN1dGEKICAgICBib29s
IGVuZENvbHVtbklzT25TdGFydExpbmUgPSAhbGluZUNvdW50OwogICAgIHVuc2lnbmVkIHVubGlu
a2VkRW5kQ29sdW1uID0gcm9vdE5vZGUtPmVuZENvbHVtbigpOwogICAgIHVuc2lnbmVkIGVuZENv
bHVtbiA9IHVubGlua2VkRW5kQ29sdW1uICsgKGVuZENvbHVtbklzT25TdGFydExpbmUgPyBzdGFy
dENvbHVtbiA6IDEpOwotICAgIHVuc2lnbmVkIGFycm93Q29udGV4dEZlYXR1cmUgPSBleGVjdXRh
YmxlLT5pc0Fycm93RnVuY3Rpb25Db250ZXh0KCkgPyBBcnJvd0Z1bmN0aW9uQ29udGV4dEZlYXR1
cmUgOiAwOwotICAgIGV4ZWN1dGFibGUtPnJlY29yZFBhcnNlKHJvb3ROb2RlLT5mZWF0dXJlcygp
IHwgYXJyb3dDb250ZXh0RmVhdHVyZSwgcm9vdE5vZGUtPmhhc0NhcHR1cmVkVmFyaWFibGVzKCks
IHJvb3ROb2RlLT5sYXN0TGluZSgpLCBlbmRDb2x1bW4pOworICAgIHVuc2lnbmVkIGFycm93Q29u
dGV4dEZlYXR1cmUgPSBpc0Fycm93RnVuY3Rpb25Db250ZXh0ID8gQXJyb3dGdW5jdGlvbkNvbnRl
eHRGZWF0dXJlIDogMDsKKyAgICBpZiAoZXhlY3V0YWJsZSkKKyAgICAgICAgZXhlY3V0YWJsZS0+
cmVjb3JkUGFyc2Uocm9vdE5vZGUtPmZlYXR1cmVzKCkgfCBhcnJvd0NvbnRleHRGZWF0dXJlLCBy
b290Tm9kZS0+aGFzQ2FwdHVyZWRWYXJpYWJsZXMoKSwgcm9vdE5vZGUtPmxhc3RMaW5lKCksIGVu
ZENvbHVtbik7CiAKLSAgICBVbmxpbmtlZENvZGVCbG9ja1R5cGUqIHVubGlua2VkQ29kZUJsb2Nr
ID0gVW5saW5rZWRDb2RlQmxvY2tUeXBlOjpjcmVhdGUoJnZtLCBleGVjdXRhYmxlLT5leGVjdXRh
YmxlSW5mbygpLCBkZWJ1Z2dlck1vZGUpOworICAgIGJvb2wgdXNlc0V2YWwgPSByb290Tm9kZS0+
ZmVhdHVyZXMoKSAmIEV2YWxGZWF0dXJlOworICAgIGJvb2wgaXNTdHJpY3RNb2RlID0gcm9vdE5v
ZGUtPmZlYXR1cmVzKCkgJiBTdHJpY3RNb2RlRmVhdHVyZTsKKyAgICBFeGVjdXRhYmxlSW5mbyBl
eGVjdXRhYmxlSW5mbyh1c2VzRXZhbCwgaXNTdHJpY3RNb2RlLCBmYWxzZSwgZmFsc2UsIENvbnN0
cnVjdG9yS2luZDo6Tm9uZSwgc2NyaXB0TW9kZSwgU3VwZXJCaW5kaW5nOjpOb3ROZWVkZWQsIENh
Y2hlVHlwZXM8VW5saW5rZWRDb2RlQmxvY2tUeXBlPjo6cGFyc2VNb2RlLCBkZXJpdmVkQ29udGV4
dFR5cGUsIGlzQXJyb3dGdW5jdGlvbkNvbnRleHQsIGZhbHNlLCBldmFsQ29udGV4dFR5cGUpOwor
CisgICAgVW5saW5rZWRDb2RlQmxvY2tUeXBlKiB1bmxpbmtlZENvZGVCbG9jayA9IFVubGlua2Vk
Q29kZUJsb2NrVHlwZTo6Y3JlYXRlKCZ2bSwgZXhlY3V0YWJsZUluZm8sIGRlYnVnZ2VyTW9kZSk7
CiAgICAgdW5saW5rZWRDb2RlQmxvY2stPnJlY29yZFBhcnNlKHJvb3ROb2RlLT5mZWF0dXJlcygp
LCByb290Tm9kZS0+aGFzQ2FwdHVyZWRWYXJpYWJsZXMoKSwgbGluZUNvdW50LCB1bmxpbmtlZEVu
ZENvbHVtbik7CiAgICAgdW5saW5rZWRDb2RlQmxvY2stPnNldFNvdXJjZVVSTERpcmVjdGl2ZShz
b3VyY2UucHJvdmlkZXIoKS0+c291cmNlVVJMKCkpOwogICAgIHVubGlua2VkQ29kZUJsb2NrLT5z
ZXRTb3VyY2VNYXBwaW5nVVJMRGlyZWN0aXZlKHNvdXJjZS5wcm92aWRlcigpLT5zb3VyY2VNYXBw
aW5nVVJMKCkpOwpAQCAtMzIyLDM2ICszNTMsMjggQEAgVW5saW5rZWRDb2RlQmxvY2tUeXBlKiBn
ZW5lcmF0ZVVubGlua2VkQ29kZUJsb2NrKFZNJiB2bSwgRXhlY3V0YWJsZVR5cGUqIGV4ZWN1dGEK
ICAgICByZXR1cm4gdW5saW5rZWRDb2RlQmxvY2s7CiB9CiAKLUFMV0FZU19JTkxJTkUgc3RhdGlj
IHZvaWQgd3JpdGVDb2RlQmxvY2soVk0mIHZtLCBjb25zdCBTb3VyY2VDb2RlS2V5JiBrZXksIGNv
bnN0IFNvdXJjZUNvZGVWYWx1ZSYgdmFsdWUpCit0ZW1wbGF0ZSA8Y2xhc3MgVW5saW5rZWRDb2Rl
QmxvY2tUeXBlLCBjbGFzcyBFeGVjdXRhYmxlVHlwZT4KK1VubGlua2VkQ29kZUJsb2NrVHlwZSog
Z2VuZXJhdGVVbmxpbmtlZENvZGVCbG9jayhWTSYgdm0sIEV4ZWN1dGFibGVUeXBlKiBleGVjdXRh
YmxlLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIEpTUGFyc2VyU3RyaWN0TW9kZSBzdHJpY3RN
b2RlLCBKU1BhcnNlclNjcmlwdE1vZGUgc2NyaXB0TW9kZSwgRGVidWdnZXJNb2RlIGRlYnVnZ2Vy
TW9kZSwgUGFyc2VyRXJyb3ImIGVycm9yLCBFdmFsQ29udGV4dFR5cGUgZXZhbENvbnRleHRUeXBl
LCBjb25zdCBWYXJpYWJsZUVudmlyb25tZW50KiB2YXJpYWJsZXNVbmRlclREWikKK3sKKyAgICBy
ZXR1cm4gZ2VuZXJhdGVVbmxpbmtlZENvZGVCbG9ja0ltcGw8VW5saW5rZWRDb2RlQmxvY2tUeXBl
LCBFeGVjdXRhYmxlVHlwZT4odm0sIHNvdXJjZSwgc3RyaWN0TW9kZSwgc2NyaXB0TW9kZSwgZGVi
dWdnZXJNb2RlLCBlcnJvciwgZXZhbENvbnRleHRUeXBlLCBleGVjdXRhYmxlLT5kZXJpdmVkQ29u
dGV4dFR5cGUoKSwgZXhlY3V0YWJsZS0+aXNBcnJvd0Z1bmN0aW9uQ29udGV4dCgpLCB2YXJpYWJs
ZXNVbmRlclREWiwgZXhlY3V0YWJsZSk7Cit9CisKK3ZvaWQgZ2VuZXJhdGVVbmxpbmtlZENvZGVC
bG9ja0ZvckZ1bmN0aW9ucyhWTSYsIFVubGlua2VkQ29kZUJsb2NrKiwgY29uc3QgU291cmNlQ29k
ZSYsIERlYnVnZ2VyTW9kZSwgUGFyc2VyRXJyb3ImKTsKKwordGVtcGxhdGUgPGNsYXNzIFVubGlu
a2VkQ29kZUJsb2NrVHlwZT4KK3N0ZDo6ZW5hYmxlX2lmX3Q8IXN0ZDo6aXNfc2FtZTxVbmxpbmtl
ZENvZGVCbG9ja1R5cGUsIFVubGlua2VkRXZhbENvZGVCbG9jaz46OnZhbHVlLCBVbmxpbmtlZENv
ZGVCbG9ja1R5cGUqPgorcmVjdXJzaXZlbHlHZW5lcmF0ZVVubGlua2VkQ29kZUJsb2NrKFZNJiB2
bSwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBKU1BhcnNlclN0cmljdE1vZGUgc3RyaWN0TW9k
ZSwgSlNQYXJzZXJTY3JpcHRNb2RlIHNjcmlwdE1vZGUsIERlYnVnZ2VyTW9kZSBkZWJ1Z2dlck1v
ZGUsIFBhcnNlckVycm9yJiBlcnJvciwgRXZhbENvbnRleHRUeXBlIGV2YWxDb250ZXh0VHlwZSwg
Y29uc3QgVmFyaWFibGVFbnZpcm9ubWVudCogdmFyaWFibGVzVW5kZXJURFopCiB7Ci0jaWYgT1Mo
REFSV0lOKQotICAgIGNvbnN0IGNoYXIqIGNhY2hlUGF0aCA9IE9wdGlvbnM6OmRpc2tDYWNoZVBh
dGgoKTsKLSAgICBpZiAoTElLRUxZKCFjYWNoZVBhdGgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBVbmxpbmtlZENvZGVCbG9jayogY29kZUJsb2NrID0ganNEeW5hbWljQ2FzdDxVbmxpbmtlZENv
ZGVCbG9jayo+KHZtLCB2YWx1ZS5jZWxsLmdldCgpKTsKLSAgICBpZiAoIWNvZGVCbG9jaykKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgdW5zaWduZWQgaGFzaCA9IGtleS5oYXNoKCk7Ci0gICAgY2hh
ciBmaWxlbmFtZVs1MTJdOwotICAgIGludCBjb3VudCA9IHNucHJpbnRmKGZpbGVuYW1lLCA1MTIs
ICIlcy8ldS5jYWNoZSIsIGNhY2hlUGF0aCwgaGFzaCk7Ci0gICAgaWYgKGNvdW50IDwgMCB8fCBj
b3VudCA+IDUxMikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgc3RkOjpwYWlyPE1hbGxvY1B0cjx1
aW50OF90Piwgc2l6ZV90PiByZXN1bHQgPSBlbmNvZGVDb2RlQmxvY2sodm0sIGtleSwgY29kZUJs
b2NrKTsKLQotICAgIGludCBmZCA9IG9wZW4oZmlsZW5hbWUsIE9fQ1JFQVQgfCBPX1dST05MWSwg
MDY2Nik7Ci0gICAgaW50IHJjID0gZmxvY2soZmQsIExPQ0tfRVggfCBMT0NLX05CKTsKLSAgICBp
ZiAoIXJjKQotICAgICAgICA6OndyaXRlKGZkLCByZXN1bHQuZmlyc3QuZ2V0KCksIHJlc3VsdC5z
ZWNvbmQpOwotICAgIGNsb3NlKGZkKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHZtKTsKLSAg
ICBVTlVTRURfUEFSQU0oa2V5KTsKLSAgICBVTlVTRURfUEFSQU0odmFsdWUpOwotI2VuZGlmCisg
ICAgYm9vbCBpc0Fycm93RnVuY3Rpb25Db250ZXh0ID0gZmFsc2U7CisgICAgVW5saW5rZWRDb2Rl
QmxvY2tUeXBlKiB1bmxpbmtlZENvZGVCbG9jayA9IGdlbmVyYXRlVW5saW5rZWRDb2RlQmxvY2tJ
bXBsPFVubGlua2VkQ29kZUJsb2NrVHlwZT4odm0sIHNvdXJjZSwgc3RyaWN0TW9kZSwgc2NyaXB0
TW9kZSwgZGVidWdnZXJNb2RlLCBlcnJvciwgZXZhbENvbnRleHRUeXBlLCBEZXJpdmVkQ29udGV4
dFR5cGU6Ok5vbmUsIGlzQXJyb3dGdW5jdGlvbkNvbnRleHQsIHZhcmlhYmxlc1VuZGVyVERaKTsK
KyAgICBpZiAoIXVubGlua2VkQ29kZUJsb2NrKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKwor
ICAgIGdlbmVyYXRlVW5saW5rZWRDb2RlQmxvY2tGb3JGdW5jdGlvbnModm0sIHVubGlua2VkQ29k
ZUJsb2NrLCBzb3VyY2UsIGRlYnVnZ2VyTW9kZSwgZXJyb3IpOworICAgIHJldHVybiB1bmxpbmtl
ZENvZGVCbG9jazsKIH0KIAordm9pZCB3cml0ZUNvZGVCbG9jayhWTSYsIGNvbnN0IFNvdXJjZUNv
ZGVLZXkmLCBjb25zdCBTb3VyY2VDb2RlVmFsdWUmKTsKK0NhY2hlZEJ5dGVjb2RlIHNlcmlhbGl6
ZUJ5dGVjb2RlKFZNJiwgVW5saW5rZWRDb2RlQmxvY2sqLCBjb25zdCBTb3VyY2VDb2RlJiwgU291
cmNlQ29kZVR5cGUsIEpTUGFyc2VyU3RyaWN0TW9kZSwgSlNQYXJzZXJTY3JpcHRNb2RlLCBEZWJ1
Z2dlck1vZGUpOwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0NvbXBsZXRpb24uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQ29tcGxldGlvbi5jcHAKaW5kZXggM2ZiNGFiOWQzYWEyZTM0YmJjZDlhZGZmYTcz
MDdlNzA3NmE0NjFhZi4uOGE4NzVjZDdlM2IwNWRjNDM2NTlmMDFiNzAwNTJiYzEzY2MxYWUxOSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tcGxldGlvbi5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tcGxldGlvbi5jcHAKQEAgLTI1
LDYgKzI1LDcgQEAKIAogI2luY2x1ZGUgIkNhbGxGcmFtZS5oIgogI2luY2x1ZGUgIkNhdGNoU2Nv
cGUuaCIKKyNpbmNsdWRlICJDb2RlQ2FjaGUuaCIKICNpbmNsdWRlICJDb2RlUHJvZmlsaW5nLmgi
CiAjaW5jbHVkZSAiRXhjZXB0aW9uLmgiCiAjaW5jbHVkZSAiSWRlbnRpZmllcklubGluZXMuaCIK
QEAgLTkwLDYgKzkxLDM2IEBAIGJvb2wgY2hlY2tNb2R1bGVTeW50YXgoRXhlY1N0YXRlKiBleGVj
LCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIFBhcnNlckVycm9yJiBlCiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKK0NhY2hlZEJ5dGVjb2RlIGdlbmVyYXRlQnl0ZWNvZGUoVk0mIHZtLCBjb25zdCBT
b3VyY2VDb2RlJiBzb3VyY2UsIFBhcnNlckVycm9yJiBlcnJvcikKK3sKKyAgICBKU0xvY2tIb2xk
ZXIgbG9jayh2bSk7CisgICAgUkVMRUFTRV9BU1NFUlQodm0uYXRvbWljU3RyaW5nVGFibGUoKSA9
PSBUaHJlYWQ6OmN1cnJlbnQoKS5hdG9taWNTdHJpbmdUYWJsZSgpKTsKKworICAgIFZhcmlhYmxl
RW52aXJvbm1lbnQgdmFyaWFibGVzVW5kZXJURFo7CisgICAgSlNQYXJzZXJTdHJpY3RNb2RlIHN0
cmljdE1vZGUgPSBKU1BhcnNlclN0cmljdE1vZGU6Ok5vdFN0cmljdDsKKyAgICBKU1BhcnNlclNj
cmlwdE1vZGUgc2NyaXB0TW9kZSA9IEpTUGFyc2VyU2NyaXB0TW9kZTo6Q2xhc3NpYzsKKyAgICBE
ZWJ1Z2dlck1vZGUgZGVidWdnZXJNb2RlID0gRGVidWdnZXJPZmY7CisgICAgRXZhbENvbnRleHRU
eXBlIGV2YWxDb250ZXh0VHlwZSA9IEV2YWxDb250ZXh0VHlwZTo6Tm9uZTsKKworICAgIFVubGlu
a2VkQ29kZUJsb2NrKiB1bmxpbmtlZENvZGVCbG9jayA9IHJlY3Vyc2l2ZWx5R2VuZXJhdGVVbmxp
bmtlZENvZGVCbG9jazxVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2s+KHZtLCBzb3VyY2UsIHN0cmlj
dE1vZGUsIHNjcmlwdE1vZGUsIGRlYnVnZ2VyTW9kZSwgZXJyb3IsIGV2YWxDb250ZXh0VHlwZSwg
JnZhcmlhYmxlc1VuZGVyVERaKTsKKyAgICByZXR1cm4gc2VyaWFsaXplQnl0ZWNvZGUodm0sIHVu
bGlua2VkQ29kZUJsb2NrLCBzb3VyY2UsIFNvdXJjZUNvZGVUeXBlOjpQcm9ncmFtVHlwZSwgc3Ry
aWN0TW9kZSwgc2NyaXB0TW9kZSwgZGVidWdnZXJNb2RlKTsKK30KKworQ2FjaGVkQnl0ZWNvZGUg
Z2VuZXJhdGVNb2R1bGVCeXRlY29kZShWTSYgdm0sIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwg
UGFyc2VyRXJyb3ImIGVycm9yKQoreworICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKKyAgICBS
RUxFQVNFX0FTU0VSVCh2bS5hdG9taWNTdHJpbmdUYWJsZSgpID09IFRocmVhZDo6Y3VycmVudCgp
LmF0b21pY1N0cmluZ1RhYmxlKCkpOworCisgICAgVmFyaWFibGVFbnZpcm9ubWVudCB2YXJpYWJs
ZXNVbmRlclREWjsKKyAgICBKU1BhcnNlclN0cmljdE1vZGUgc3RyaWN0TW9kZSA9IEpTUGFyc2Vy
U3RyaWN0TW9kZTo6U3RyaWN0OworICAgIEpTUGFyc2VyU2NyaXB0TW9kZSBzY3JpcHRNb2RlID0g
SlNQYXJzZXJTY3JpcHRNb2RlOjpNb2R1bGU7CisgICAgRGVidWdnZXJNb2RlIGRlYnVnZ2VyTW9k
ZSA9IERlYnVnZ2VyT2ZmOworICAgIEV2YWxDb250ZXh0VHlwZSBldmFsQ29udGV4dFR5cGUgPSBF
dmFsQ29udGV4dFR5cGU6Ok5vbmU7CisKKyAgICBVbmxpbmtlZENvZGVCbG9jayogdW5saW5rZWRD
b2RlQmxvY2sgPSByZWN1cnNpdmVseUdlbmVyYXRlVW5saW5rZWRDb2RlQmxvY2s8VW5saW5rZWRN
b2R1bGVQcm9ncmFtQ29kZUJsb2NrPih2bSwgc291cmNlLCBzdHJpY3RNb2RlLCBzY3JpcHRNb2Rl
LCBkZWJ1Z2dlck1vZGUsIGVycm9yLCBldmFsQ29udGV4dFR5cGUsICZ2YXJpYWJsZXNVbmRlclRE
Wik7CisgICAgcmV0dXJuIHNlcmlhbGl6ZUJ5dGVjb2RlKHZtLCB1bmxpbmtlZENvZGVCbG9jaywg
c291cmNlLCBTb3VyY2VDb2RlVHlwZTo6TW9kdWxlVHlwZSwgc3RyaWN0TW9kZSwgc2NyaXB0TW9k
ZSwgZGVidWdnZXJNb2RlKTsKK30KKwogSlNWYWx1ZSBldmFsdWF0ZShFeGVjU3RhdGUqIGV4ZWMs
IGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIE5ha2VkUHRyPEV4
Y2VwdGlvbj4mIHJldHVybmVkRXhjZXB0aW9uKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21wbGV0aW9uLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21wbGV0aW9uLmgKaW5kZXggODI3ZTYx
ZjNjNjFkMGNiN2JiZTc1YTYxMjc3MTI0ZmIwZGE3MmFhZS4uMzA3Mjg4OWJiNGNhYTM2YjU1ZDQz
ZjFjNjZhNjMyZDY0MTM4MTk2YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQ29tcGxldGlvbi5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nv
bXBsZXRpb24uaApAQCAtMjgsNiArMjgsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorY2xhc3Mg
Q2FjaGVkQnl0ZWNvZGU7CiBjbGFzcyBFeGNlcHRpb247CiBjbGFzcyBFeGVjU3RhdGU7CiBjbGFz
cyBKU09iamVjdDsKQEAgLTQxLDYgKzQyLDkgQEAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBjaGVj
a1N5bnRheChWTSYsIGNvbnN0IFNvdXJjZUNvZGUmLCBQYXJzZXJFcnJvciYpOwogSlNfRVhQT1JU
X1BSSVZBVEUgYm9vbCBjaGVja1N5bnRheChFeGVjU3RhdGUqLCBjb25zdCBTb3VyY2VDb2RlJiwg
SlNWYWx1ZSogZXhjZXB0aW9uID0gMCk7CiBKU19FWFBPUlRfUFJJVkFURSBib29sIGNoZWNrTW9k
dWxlU3ludGF4KEV4ZWNTdGF0ZSosIGNvbnN0IFNvdXJjZUNvZGUmLCBQYXJzZXJFcnJvciYpOwog
CitKU19FWFBPUlRfUFJJVkFURSBDYWNoZWRCeXRlY29kZSBnZW5lcmF0ZUJ5dGVjb2RlKFZNJiwg
Y29uc3QgU291cmNlQ29kZSYsIFBhcnNlckVycm9yJik7CitKU19FWFBPUlRfUFJJVkFURSBDYWNo
ZWRCeXRlY29kZSBnZW5lcmF0ZU1vZHVsZUJ5dGVjb2RlKFZNJiwgY29uc3QgU291cmNlQ29kZSYs
IFBhcnNlckVycm9yJik7CisKIEpTX0VYUE9SVF9QUklWQVRFIEpTVmFsdWUgZXZhbHVhdGUoRXhl
Y1N0YXRlKiwgY29uc3QgU291cmNlQ29kZSYsIEpTVmFsdWUgdGhpc1ZhbHVlLCBOYWtlZFB0cjxF
eGNlcHRpb24+JiByZXR1cm5lZEV4Y2VwdGlvbik7CiBpbmxpbmUgSlNWYWx1ZSBldmFsdWF0ZShF
eGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZUNvZGUsIEpTVmFsdWUgdGhp
c1ZhbHVlID0gSlNWYWx1ZSgpKQogewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvT3B0aW9ucy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRp
b25zLmNwcAppbmRleCA4YjA1Y2E4MjMwMGJjNzlhMjI5YWM2MGY4NmJiNDU2NjdlZWZkYTVlLi44
NGQ3MzI2YTI0ZmJlNWE1ZGUwM2M1YzM4ZGJmMmJkZWRmMjM2MGNiIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcApAQCAtNTI3LDkgKzUyNyw2IEBAIHN0YXRpYyB2
b2lkIHJlY29tcHV0ZURlcGVuZGVudE9wdGlvbnMoKQogCiAgICAgaWYgKCFPcHRpb25zOjp1c2VD
b2RlQ2FjaGUoKSkKICAgICAgICAgT3B0aW9uczo6ZGlza0NhY2hlUGF0aCgpID0gbnVsbHB0cjsK
LQotICAgIGlmICghT3B0aW9uczo6ZGlza0NhY2hlUGF0aCgpKQotICAgICAgICBPcHRpb25zOjpm
b3JjZURpc2tDYWNoZSgpID0gZmFsc2U7CiB9CiAKIHZvaWQgT3B0aW9uczo6aW5pdGlhbGl6ZSgp
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>360114</attachid>
            <date>2019-01-25 07:58:26 -0800</date>
            <delta_ts>2019-01-25 13:49:32 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-193401-20190125165809.patch</filename>
            <type>text/plain</type>
            <size>52761</size>
            <attacher name="Tadeu Zagallo">tzagallo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQwNDcyCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAw
NTUxYTI2Zjg2NjhhZDRhODVhYjZjYWRlNjA3Y2IxZDNjMmFiMjE5Li4yNmJiOWNhM2ZiOThjYjgz
M2RlNTBhZjVlODNjYjdmNjQ2MjZhMGJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw4MiBAQAorMjAxOS0wMS0yNSAgVGFkZXUgWmFnYWxsbyAgPHR6YWdhbGxvQGFwcGxlLmNv
bT4KKworICAgICAgICBBZGQgQVBJIHRvIGdlbmVyYXRlIGFuZCBjb25zdW1lIGNhY2hlZCBieXRl
Y29kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkz
NDAxCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS80NzUxNDA5OT4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgdGhlIGBnZW5lcmF0ZUJ5dGVjb2Rl
YCBhbmQgYGdlbmVyYXRlTW9kdWxlQnl0ZWNvZGVgIGZ1bmN0aW9ucyB0bworICAgICAgICBnZW5l
cmF0ZSBzZXJpYWxpemVkIGJ5dGVjb2RlIGZvciBhIGdpdmVuIGBTb3VyY2VDb2RlYC4gVGhlc2Ug
ZnVuY3Rpb25zCisgICAgICAgIHdpbGwgZWFnZXJseSBnZW5lcmF0ZSBjb2RlIGZvciBhbGwgdGhl
IG5lc3RlZCBmdW5jdGlvbnMuCisKKyAgICAgICAgQWRkaXRpb25hbGx5LCB1cGRhdGUgdGhlIEFQ
SSBtZXRob2RzIGluIEpTU2NyaXB0IHRvIGdlbmVyYXRlIGFuZCB1c2UgdGhlCisgICAgICAgIGJ5
dGVjb2RlIHdoZW4gdGhlIGJ5dGVjb2RlQ2FjaGUgcGF0aCBpcyBwcm92aWRlZC4KKworICAgICAg
ICAqIEFQSS9KU0FQSUdsb2JhbE9iamVjdC5tbToKKyAgICAgICAgKEpTQzo6SlNBUElHbG9iYWxP
YmplY3Q6Om1vZHVsZUxvYWRlckZldGNoKToKKyAgICAgICAgKiBBUEkvSlNDb250ZXh0Lm1tOgor
ICAgICAgICAoLVtKU0NvbnRleHQgd3JhcHBlck1hcF0pOgorICAgICAgICAqIEFQSS9KU0NvbnRl
eHRJbnRlcm5hbC5oOgorICAgICAgICAqIEFQSS9KU1NjcmlwdC5tbToKKyAgICAgICAgKCtbSlNT
Y3JpcHQgc2NyaXB0V2l0aFNvdXJjZTppblZpcnR1YWxNYWNoaW5lOl0pOgorICAgICAgICAoK1tK
U1NjcmlwdCBzY3JpcHRGcm9tQVNDSUlGaWxlOmluVmlydHVhbE1hY2hpbmU6d2l0aENvZGVTaWdu
aW5nOmFuZEJ5dGVjb2RlQ2FjaGU6XSk6CisgICAgICAgICgtW0pTU2NyaXB0IGRlYWxsb2NdKToK
KyAgICAgICAgKC1bSlNTY3JpcHQgcmVhZENhY2hlXSk6CisgICAgICAgICgtW0pTU2NyaXB0IHdy
aXRlQ2FjaGVdKToKKyAgICAgICAgKC1bSlNTY3JpcHQgaGFzaF0pOgorICAgICAgICAoLVtKU1Nj
cmlwdCBzb3VyY2VdKToKKyAgICAgICAgKC1bSlNTY3JpcHQgY2FjaGVkQnl0ZWNvZGVdKToKKyAg
ICAgICAgKC1bSlNTY3JpcHQganNTb3VyY2VDb2RlOl0pOgorICAgICAgICAqIEFQSS9KU1Njcmlw
dEludGVybmFsLmg6CisgICAgICAgICogQVBJL0pTU2NyaXB0U291cmNlUHJvdmlkZXIuaDogQ29w
aWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1NjcmlwdEludGVybmFsLmguCisg
ICAgICAgIChKU1NjcmlwdFNvdXJjZVByb3ZpZGVyOjpjcmVhdGUpOgorICAgICAgICAoSlNTY3Jp
cHRTb3VyY2VQcm92aWRlcjo6SlNTY3JpcHRTb3VyY2VQcm92aWRlcik6CisgICAgICAgICogQVBJ
L0pTU2NyaXB0U291cmNlUHJvdmlkZXIubW06IENvcGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvSlNTY3JpcHRJbnRlcm5hbC5oLgorICAgICAgICAoSlNTY3JpcHRTb3VyY2VQcm92
aWRlcjo6aGFzaCBjb25zdCk6CisgICAgICAgIChKU1NjcmlwdFNvdXJjZVByb3ZpZGVyOjpzb3Vy
Y2UgY29uc3QpOgorICAgICAgICAoSlNTY3JpcHRTb3VyY2VQcm92aWRlcjo6Y2FjaGVkQnl0ZWNv
ZGUgY29uc3QpOgorICAgICAgICAqIEFQSS9KU1ZpcnR1YWxNYWNoaW5lLm1tOgorICAgICAgICAo
LVtKU1ZpcnR1YWxNYWNoaW5lIHZtXSk6CisgICAgICAgICogQVBJL0pTVmlydHVhbE1hY2hpbmVJ
bnRlcm5hbC5oOgorICAgICAgICAqIEFQSS90ZXN0cy90ZXN0YXBpLm1tOgorICAgICAgICAodGVz
dEJ5dGVjb2RlQ2FjaGUpOgorICAgICAgICAoLVtKU0NvbnRleHRGaWxlTG9hZGVyRGVsZWdhdGUg
Y29udGV4dDpmZXRjaE1vZHVsZUZvcklkZW50aWZpZXI6d2l0aFJlc29sdmVIYW5kbGVyOmFuZFJl
amVjdEhhbmRsZXI6XSk6CisgICAgICAgICh0ZXN0T2JqZWN0aXZlQ0FQSSk6CisgICAgICAgICog
SmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBTb3Vy
Y2VzQ29jb2EudHh0OgorICAgICAgICAqIGJ5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25FeGVjdXRh
YmxlLmNwcDoKKyAgICAgICAgKEpTQzo6VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6OnVubGlu
a2VkQ29kZUJsb2NrRm9yKToKKyAgICAgICAgKiBieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhl
Y3V0YWJsZS5oOgorICAgICAgICAqIHBhcnNlci9Tb3VyY2VDb2RlS2V5Lmg6CisgICAgICAgIChK
U0M6OlNvdXJjZUNvZGVLZXk6OnNvdXJjZSBjb25zdCk6CisgICAgICAgICogcGFyc2VyL1NvdXJj
ZVByb3ZpZGVyLmg6CisgICAgICAgIChKU0M6OkNhY2hlZEJ5dGVjb2RlOjpDYWNoZWRCeXRlY29k
ZSk6CisgICAgICAgIChKU0M6OkNhY2hlZEJ5dGVjb2RlOjpvcGVyYXRvcj0pOgorICAgICAgICAo
SlNDOjpDYWNoZWRCeXRlY29kZTo6ZGF0YSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZEJ5
dGVjb2RlOjpzaXplIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkQnl0ZWNvZGU6Om93bmVk
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkQnl0ZWNvZGU6On5DYWNoZWRCeXRlY29kZSk6
CisgICAgICAgIChKU0M6OkNhY2hlZEJ5dGVjb2RlOjpmcmVlRGF0YUlmT3duZWQpOgorICAgICAg
ICAoSlNDOjpTb3VyY2VQcm92aWRlcjo6Y2FjaGVkQnl0ZWNvZGUgY29uc3QpOgorICAgICAgICAq
IHBhcnNlci9VbmxpbmtlZFNvdXJjZUNvZGUuaDoKKyAgICAgICAgKEpTQzo6VW5saW5rZWRTb3Vy
Y2VDb2RlOjpwcm92aWRlciBjb25zdCk6CisgICAgICAgICogcnVudGltZS9Db2RlQ2FjaGUuY3Bw
OgorICAgICAgICAoSlNDOjpnZW5lcmF0ZVVubGlua2VkQ29kZUJsb2NrRm9yRnVuY3Rpb25zKToK
KyAgICAgICAgKEpTQzo6d3JpdGVDb2RlQmxvY2spOgorICAgICAgICAoSlNDOjpzZXJpYWxpemVC
eXRlY29kZSk6CisgICAgICAgICogcnVudGltZS9Db2RlQ2FjaGUuaDoKKyAgICAgICAgKEpTQzo6
Q29kZUNhY2hlTWFwOjpmZXRjaEZyb21EaXNrSW1wbCk6CisgICAgICAgIChKU0M6OkNvZGVDYWNo
ZU1hcDo6ZmluZENhY2hlQW5kVXBkYXRlQWdlKToKKyAgICAgICAgKEpTQzo6Z2VuZXJhdGVVbmxp
bmtlZENvZGVCbG9ja0ltcGwpOgorICAgICAgICAoSlNDOjpnZW5lcmF0ZVVubGlua2VkQ29kZUJs
b2NrKToKKyAgICAgICAgKiBydW50aW1lL0NvbXBsZXRpb24uY3BwOgorICAgICAgICAoSlNDOjpn
ZW5lcmF0ZUJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6Z2VuZXJhdGVNb2R1bGVCeXRlY29kZSk6
CisgICAgICAgICogcnVudGltZS9Db21wbGV0aW9uLmg6CisgICAgICAgICogcnVudGltZS9PcHRp
b25zLmNwcDoKKyAgICAgICAgKEpTQzo6cmVjb21wdXRlRGVwZW5kZW50T3B0aW9ucyk6CisKIDIw
MTktMDEtMjQgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBsZS5jb20+CiAKICAgICAg
ICAgUmVtb3ZlIHVzYWdlIG9mIGludGVybmFsIG1hY3JvIGZyb20gcHJpdmF0ZSBoZWFkZXIKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElHbG9iYWxPYmplY3QubW0g
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQVBJR2xvYmFsT2JqZWN0Lm1tCmluZGV4IDNj
YTRhYjkyNTFmNzFhNTVlZDI0ODRhYzExNzZjMzkwNmU5OTJjYzUuLmQ1YzIzNjVkMDg0NzE0OGM4
MGY4OTkyYmMwNDQzNTJmMzFiY2JmMGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9BUEkvSlNBUElHbG9iYWxPYmplY3QubW0KKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS9KU0FQSUdsb2JhbE9iamVjdC5tbQpAQCAtMTY0LDcgKzE2NCw2IEBAIEpTSW50ZXJuYWxQcm9t
aXNlKiBKU0FQSUdsb2JhbE9iamVjdDo6bW9kdWxlTG9hZGVyRmV0Y2goSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iCiAgICAgYXV0byBkZWZlcnJlZFByb21pc2UgPSBTdHJvbmc8SlNJbnRlcm5hbFBy
b21pc2VEZWZlcnJlZD4odm0sIGRlZmVycmVkKTsKICAgICBhdXRvIHN0cm9uZ0tleSA9IFN0cm9u
ZzxKU1N0cmluZz4odm0sIGpzU2VjdXJlQ2FzdDxKU1N0cmluZyo+KHZtLCBrZXkpKTsKICAgICBh
dXRvKiByZXNvbHZlID0gSlNOYXRpdmVTdGRGdW5jdGlvbjo6Y3JlYXRlKHZtLCBnbG9iYWxPYmpl
Y3QsIDEsICJyZXNvbHZlIiwgWz1dIChFeGVjU3RhdGUqIGV4ZWMpIHsKLSAgICAgICAgVk0mIHZt
ID0gZXhlYy0+dm0oKTsKICAgICAgICAgLy8gVGhpcyBjYXB0dXJlcyB0aGUgZ2xvYmFsT2JqZWN0
IGJ1dCB0aGF0J3Mgb2sgYmVjYXVzZSBvdXIgc3RydWN0dXJlIGtlZXBzIGl0IGFsaXZlIGFueXdh
eS4KICAgICAgICAgSlNDb250ZXh0ICpjb250ZXh0ID0gW0pTQ29udGV4dCBjb250ZXh0V2l0aEpT
R2xvYmFsQ29udGV4dFJlZjp0b0dsb2JhbFJlZihnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSld
OwogICAgICAgICBpZCBzY3JpcHQgPSB2YWx1ZVRvT2JqZWN0KGNvbnRleHQsIHRvUmVmKGV4ZWMs
IGV4ZWMtPmFyZ3VtZW50KDApKSk7CkBAIC0xNzYsOCArMTc1LDcgQEAgSlNJbnRlcm5hbFByb21p
c2UqIEpTQVBJR2xvYmFsT2JqZWN0Ojptb2R1bGVMb2FkZXJGZXRjaChKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2IKICAgICAgICAgICAgIHJldHVybiBlbmNvZGVkSlNVbmRlZmluZWQoKTsKICAgICAg
ICAgfQogCi0gICAgICAgIGNvbnN0IFN0cmluZyYgc291cmNlID0gZ2V0SlNTY3JpcHRTb3VyY2VD
b2RlKHN0YXRpY19jYXN0PEpTU2NyaXB0ICo+KHNjcmlwdCkpOwotICAgICAgICBhcmdzLmFwcGVu
ZChKU1NvdXJjZUNvZGU6OmNyZWF0ZSh2bSwgbWFrZVNvdXJjZShzb3VyY2UsIFNvdXJjZU9yaWdp
bihtb2R1bGVLZXkuc3RyaW5nKCkpLCBVUkwoeyB9LCBtb2R1bGVLZXkuc3RyaW5nKCkpLCBUZXh0
UG9zaXRpb24oKSwgSlNDOjpTb3VyY2VQcm92aWRlclNvdXJjZVR5cGU6Ok1vZHVsZSkpKTsKKyAg
ICAgICAgYXJncy5hcHBlbmQoW3N0YXRpY19jYXN0PEpTU2NyaXB0ICo+KHNjcmlwdCkganNTb3Vy
Y2VDb2RlOm1vZHVsZUtleV0pOwogICAgICAgICBjYWxsKGV4ZWMsIGRlZmVycmVkUHJvbWlzZS0+
SlNQcm9taXNlRGVmZXJyZWQ6OnJlc29sdmUoKSwgYXJncywgIlRoaXMgc2hvdWxkIG5ldmVyIGJl
IHNlZW4uLi4iKTsKICAgICAgICAgcmV0dXJuIGVuY29kZWRKU1VuZGVmaW5lZCgpOwogICAgIH0p
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHQubW0gYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dC5tbQppbmRleCAzYzc3NmQ0ZDkwMGVl
MTczMzM2MmFjMjlmNjI0ZjQ0NGQ1NDVlN2I0Li41MThmYjg3MjM5ODQ4MzQxMmZmYTFmYmRkY2Zk
OWZmYWUxNjhhZmYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29u
dGV4dC5tbQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dC5tbQpAQCAt
MzQsNyArMzQsNiBAQAogI2ltcG9ydCAiSlNHbG9iYWxPYmplY3QuaCIKICNpbXBvcnQgIkpTSW50
ZXJuYWxQcm9taXNlLmgiCiAjaW1wb3J0ICJKU01vZHVsZUxvYWRlci5oIgotI2ltcG9ydCAiSlNT
Y3JpcHRJbnRlcm5hbC5oIgogI2ltcG9ydCAiSlNWYWx1ZUludGVybmFsLmgiCiAjaW1wb3J0ICJK
U1ZpcnR1YWxNYWNoaW5lSW50ZXJuYWwuaCIKICNpbXBvcnQgIkpTV3JhcHBlck1hcC5oIgpAQCAt
MTM1LDExICsxMzQsNiBAQCAtIChKU1ZhbHVlICopZXhjZXB0aW9uCiAgICAgcmV0dXJuIFtKU1Zh
bHVlIHZhbHVlV2l0aEpTVmFsdWVSZWY6dG9SZWYobV9leGNlcHRpb24uZ2V0KCkpIGluQ29udGV4
dDpzZWxmXTsKIH0KIAotLSAoSlNXcmFwcGVyTWFwICopd3JhcHBlck1hcAotewotICAgIHJldHVy
biB0b0pTKG1fY29udGV4dCktPmxleGljYWxHbG9iYWxPYmplY3QoKS0+d3JhcHBlck1hcCgpOwot
fQotCiAtIChKU1ZhbHVlICopZ2xvYmFsT2JqZWN0CiB7CiAgICAgcmV0dXJuIFtKU1ZhbHVlIHZh
bHVlV2l0aEpTVmFsdWVSZWY6SlNDb250ZXh0R2V0R2xvYmFsT2JqZWN0KG1fY29udGV4dCkgaW5D
b250ZXh0OnNlbGZdOwpAQCAtMzMyLDYgKzMyNiwxMSBAQCAtIChKU1ZhbHVlICopd3JhcHBlckZv
ck9iakNPYmplY3Q6KGlkKW9iamVjdAogICAgIHJldHVybiBbW3NlbGYgd3JhcHBlck1hcF0ganNX
cmFwcGVyRm9yT2JqZWN0Om9iamVjdCBpbkNvbnRleHQ6c2VsZl07CiB9CiAKKy0gKEpTV3JhcHBl
ck1hcCAqKXdyYXBwZXJNYXAKK3sKKyAgICByZXR1cm4gdG9KUyhtX2NvbnRleHQpLT5sZXhpY2Fs
R2xvYmFsT2JqZWN0KCktPndyYXBwZXJNYXAoKTsKK30KKwogLSAoSlNWYWx1ZSAqKXdyYXBwZXJG
b3JKU09iamVjdDooSlNWYWx1ZVJlZil2YWx1ZQogewogICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxv
Y2tlcih0b0pTKG1fY29udGV4dCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS9KU0NvbnRleHRJbnRlcm5hbC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0Nv
bnRleHRJbnRlcm5hbC5oCmluZGV4IGFiNDU4MjlmMDAyN2U0ZmFkNmJmYmQxYWZjNDAyYjNhMWJl
ODViNTguLjk1OGM0NzlmNDFjZTg0MTNmYzY5NGFjMTIzZDc5NGViM2Q3ZjRkNGQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0SW50ZXJuYWwuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dEludGVybmFsLmgKQEAgLTUxLDYgKzUx
LDcgQEAgc3RydWN0IENhbGxiYWNrRGF0YSB7CiAtICh2b2lkKWJlZ2luQ2FsbGJhY2tXaXRoRGF0
YTooQ2FsbGJhY2tEYXRhICopY2FsbGJhY2tEYXRhIGNhbGxlZVZhbHVlOihKU1ZhbHVlUmVmKWNh
bGxlZVZhbHVlIHRoaXNWYWx1ZTooSlNWYWx1ZVJlZil0aGlzVmFsdWUgYXJndW1lbnRDb3VudDoo
c2l6ZV90KWFyZ3VtZW50Q291bnQgYXJndW1lbnRzOihjb25zdCBKU1ZhbHVlUmVmICopYXJndW1l
bnRzOwogLSAodm9pZCllbmRDYWxsYmFja1dpdGhEYXRhOihDYWxsYmFja0RhdGEgKiljYWxsYmFj
a0RhdGE7CiAKKy0gKEpTV3JhcHBlck1hcCAqKXdyYXBwZXJNYXA7CiAtIChKU1ZhbHVlICopd3Jh
cHBlckZvck9iakNPYmplY3Q6KGlkKW9iamVjdDsKIC0gKEpTVmFsdWUgKil3cmFwcGVyRm9ySlNP
YmplY3Q6KEpTVmFsdWVSZWYpdmFsdWU7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvSlNTY3JpcHQubW0gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTU2NyaXB0
Lm1tCmluZGV4IGY3ZTkzOWFmMDk4YmY1ZDBmNTNlZDFlOGIzMmQ3NWE0ZDgyM2ZkN2YuLmZlZjQ0
NmRlZGY4NmIyNDUwYWE3ZjgzZjJiYTNlZTcwYTg4NTJmZTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvSlNTY3JpcHQubW0KKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS9KU1NjcmlwdC5tbQpAQCAtMjcsMjEgKzI3LDMyIEBACiAjaW1wb3J0ICJKU1NjcmlwdElu
dGVybmFsLmgiCiAKICNpbXBvcnQgIkFQSUNhc3QuaCIKKyNpbXBvcnQgIklkZW50aWZpZXIuaCIK
ICNpbXBvcnQgIkpTQ29udGV4dEludGVybmFsLmgiCisjaW1wb3J0ICJKU1NjcmlwdFNvdXJjZVBy
b3ZpZGVyLmgiCisjaW1wb3J0ICJKU1NvdXJjZUNvZGUuaCIKICNpbXBvcnQgIkpTVmFsdWVQcml2
YXRlLmgiCisjaW1wb3J0ICJKU1ZpcnR1YWxNYWNoaW5lSW50ZXJuYWwuaCIKKyNpbXBvcnQgIlBh
cnNlckVycm9yLmgiCiAjaW1wb3J0ICJTeW1ib2wuaCIKKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgog
CiAjaWYgSlNDX09CSkNfQVBJX0VOQUJMRUQKIAogQGltcGxlbWVudGF0aW9uIEpTU2NyaXB0IHsK
KyAgICBfX3dlYWsgSlNWaXJ0dWFsTWFjaGluZSogbV92aXJ0dWFsTWFjaGluZTsKICAgICBTdHJp
bmcgbV9zb3VyY2U7CisgICAgTlNVUkwqIG1fY2FjaGVQYXRoOworICAgIEpTQzo6Q2FjaGVkQnl0
ZWNvZGUgbV9jYWNoZWRCeXRlY29kZTsKKyAgICBKU0M6OlN0cm9uZzxKU0M6OkpTU291cmNlQ29k
ZT4gbV9qc1NvdXJjZUNvZGU7CisgICAgVW5pcXVlZFN0cmluZ0ltcGwqIG1fbW9kdWxlS2V5Owog
fQogCiArIChpbnN0YW5jZXR5cGUpc2NyaXB0V2l0aFNvdXJjZTooTlNTdHJpbmcgKilzb3VyY2Ug
aW5WaXJ0dWFsTWFjaGluZTooSlNWaXJ0dWFsTWFjaGluZSAqKXZtCiB7Ci0gICAgVU5VU0VEX1BB
UkFNKHZtKTsKLSAgICBKU1NjcmlwdCAqcmVzdWx0ID0gW1tKU1NjcmlwdCBhbGxvY10gaW5pdF07
CisgICAgSlNTY3JpcHQgKnJlc3VsdCA9IFtbW0pTU2NyaXB0IGFsbG9jXSBpbml0XSBhdXRvcmVs
ZWFzZV07CiAgICAgcmVzdWx0LT5tX3NvdXJjZSA9IHNvdXJjZTsKKyAgICByZXN1bHQtPm1fdmly
dHVhbE1hY2hpbmUgPSB2bTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC04MSw5ICs5Miw2
IEBAICsgKGluc3RhbmNldHlwZSlzY3JpcHRGcm9tQVNDSUlGaWxlOihOU1VSTCAqKWZpbGVQYXRo
IGluVmlydHVhbE1hY2hpbmU6KEpTVmlydHVhCiB7CiAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxk
IGNoZWNrIGNvZGVTaWduaW5nLgogICAgIFVOVVNFRF9QQVJBTShjb2RlU2lnbmluZ1BhdGgpOwot
ICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBhY3R1YWxseSBjYWNoZSBieXRlY29kZS4KLSAgICBV
TlVTRURfUEFSQU0oY2FjaGVQYXRoKTsKLSAgICBVTlVTRURfUEFSQU0odm0pOwogICAgIFVSTCBm
aWxlUGF0aFVSTChbZmlsZVBhdGggYWJzb2x1dGVVUkxdKTsKICAgICBpZiAoIWZpbGVQYXRoVVJM
LmlzTG9jYWxGaWxlKCkpCiAgICAgICAgIHJldHVybiBuaWw7CkBAIC05NSw4ICsxMDMsMTEgQEAg
KyAoaW5zdGFuY2V0eXBlKXNjcmlwdEZyb21BU0NJSUZpbGU6KE5TVVJMICopZmlsZVBhdGggaW5W
aXJ0dWFsTWFjaGluZTooSlNWaXJ0dWEKICAgICBpZiAoIWNoYXJhY3RlcnNBcmVBbGxBU0NJSShi
dWZmZXIuZGF0YSgpLCBidWZmZXIuc2l6ZSgpKSkKICAgICAgICAgcmV0dXJuIG5pbDsKIAotICAg
IEpTU2NyaXB0ICpyZXN1bHQgPSBbW0pTU2NyaXB0IGFsbG9jXSBpbml0XTsKKyAgICBKU1Njcmlw
dCAqcmVzdWx0ID0gW1tbSlNTY3JpcHQgYWxsb2NdIGluaXRdIGF1dG9yZWxlYXNlXTsKKyAgICBy
ZXN1bHQtPm1fdmlydHVhbE1hY2hpbmUgPSB2bTsKICAgICByZXN1bHQtPm1fc291cmNlID0gU3Ry
aW5nOjpmcm9tVVRGOFdpdGhMYXRpbjFGYWxsYmFjayhidWZmZXIuZGF0YSgpLCBidWZmZXIuc2l6
ZSgpKTsKKyAgICByZXN1bHQtPm1fY2FjaGVQYXRoID0gY2FjaGVQYXRoOworICAgIFtyZXN1bHQg
cmVhZENhY2hlXTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC0xMDUsNyArMTE2LDk1IEBA
ICsgKGluc3RhbmNldHlwZSlzY3JpcHRGcm9tVVRGOEZpbGU6KE5TVVJMICopZmlsZVBhdGggaW5W
aXJ0dWFsTWFjaGluZTooSlNWaXJ0dWFsCiAgICAgcmV0dXJuIFtKU1NjcmlwdCBzY3JpcHRGcm9t
QVNDSUlGaWxlOmZpbGVQYXRoIGluVmlydHVhbE1hY2hpbmU6dm0gd2l0aENvZGVTaWduaW5nOmNv
ZGVTaWduaW5nUGF0aCBhbmRCeXRlY29kZUNhY2hlOmNhY2hlUGF0aF07CiB9CiAKLWNvbnN0IFN0
cmluZyYgZ2V0SlNTY3JpcHRTb3VyY2VDb2RlKEpTU2NyaXB0ICptb2R1bGUpIHsgcmV0dXJuIG1v
ZHVsZS0+bV9zb3VyY2U7IH0KKy0gKHZvaWQpZGVhbGxvYworeworICAgIGlmIChtX2NhY2hlZEJ5
dGVjb2RlLnNpemUoKSAmJiAhbV9jYWNoZWRCeXRlY29kZS5vd25lZCgpKQorICAgICAgICBtdW5t
YXAoY29uc3RfY2FzdDx2b2lkKj4obV9jYWNoZWRCeXRlY29kZS5kYXRhKCkpLCBtX2NhY2hlZEJ5
dGVjb2RlLnNpemUoKSk7CisgICAgW3N1cGVyIGRlYWxsb2NdOworfQorCistICh2b2lkKXJlYWRD
YWNoZQoreworICAgIGlmICghbV9jYWNoZVBhdGgpCisgICAgICAgIHJldHVybjsKKworICAgIGlu
dCBmZCA9IG9wZW4obV9jYWNoZVBhdGgucGF0aC5VVEY4U3RyaW5nLCBPX1JET05MWSk7CisgICAg
aWYgKGZkID09IC0xKQorICAgICAgICByZXR1cm47CisKKyAgICBpbnQgcmMgPSBmbG9jayhmZCwg
TE9DS19TSCB8IExPQ0tfTkIpOworICAgIGlmIChyYykgeworICAgICAgICBjbG9zZShmZCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBzdHJ1Y3Qgc3RhdCBzYjsKKyAgICBpbnQgcmVz
ID0gZnN0YXQoZmQsICZzYik7CisgICAgc2l6ZV90IHNpemUgPSBzdGF0aWNfY2FzdDxzaXplX3Q+
KHNiLnN0X3NpemUpOworICAgIGlmIChyZXMgfHwgIXNpemUpIHsKKyAgICAgICAgY2xvc2UoZmQp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgdm9pZCogYnVmZmVyID0gbW1hcChudWxs
cHRyLCBzaXplLCBQUk9UX1JFQUQsIE1BUF9QUklWQVRFLCBmZCwgMCk7CisgICAgY2xvc2UoZmQp
OworCisgICAgbV9jYWNoZWRCeXRlY29kZSA9IEpTQzo6Q2FjaGVkQnl0ZWNvZGUgeyBidWZmZXIs
IHNpemUgfTsKK30KKworLSAodm9pZCl3cml0ZUNhY2hlCit7CisgICAgaWYgKG1fY2FjaGVkQnl0
ZWNvZGUuc2l6ZSgpIHx8ICFtX2NhY2hlUGF0aCkKKyAgICAgICAgcmV0dXJuOworCisgICAgSlND
OjpQYXJzZXJFcnJvciBlcnJvcjsKKyAgICBtX2NhY2hlZEJ5dGVjb2RlID0gSlNDOjpnZW5lcmF0
ZU1vZHVsZUJ5dGVjb2RlKG1fdmlydHVhbE1hY2hpbmUudm0sIG1fanNTb3VyY2VDb2RlLT5zb3Vy
Y2VDb2RlKCksIGVycm9yKTsKKyAgICBpZiAoZXJyb3IuaXNWYWxpZCgpKQorICAgICAgICByZXR1
cm47CisgICAgaW50IGZkID0gb3BlbihtX2NhY2hlUGF0aC5wYXRoLlVURjhTdHJpbmcsIE9fQ1JF
QVQgfCBPX1dST05MWSwgMDY2Nik7CisgICAgaWYgKGZkID09IC0xKQorICAgICAgICByZXR1cm47
CisgICAgaW50IHJjID0gZmxvY2soZmQsIExPQ0tfRVggfCBMT0NLX05CKTsKKyAgICBpZiAoIXJj
KQorICAgICAgICB3cml0ZShmZCwgbV9jYWNoZWRCeXRlY29kZS5kYXRhKCksIG1fY2FjaGVkQnl0
ZWNvZGUuc2l6ZSgpKTsKKyAgICBjbG9zZShmZCk7Cit9CisKK0BlbmQKKworQGltcGxlbWVudGF0
aW9uIEpTU2NyaXB0KEludGVybmFsKQorCistICh1bnNpZ25lZCloYXNoCit7CisgICAgcmV0dXJu
IG1fc291cmNlLmhhc2goKTsKK30KKworLSAoY29uc3QgU3RyaW5nJilzb3VyY2UKK3sKKyAgICBy
ZXR1cm4gbV9zb3VyY2U7Cit9CisKKy0gKGNvbnN0IEpTQzo6Q2FjaGVkQnl0ZWNvZGUqKWNhY2hl
ZEJ5dGVjb2RlCit7CisgICAgcmV0dXJuICZtX2NhY2hlZEJ5dGVjb2RlOworfQorCistIChKU0M6
OkpTU291cmNlQ29kZSopanNTb3VyY2VDb2RlOihjb25zdCBKU0M6OklkZW50aWZpZXImKW1vZHVs
ZUtleQoreworICAgIGlmIChtX2pzU291cmNlQ29kZSkgeworICAgICAgICBBU1NFUlQobW9kdWxl
S2V5LmltcGwoKSA9PSBtX21vZHVsZUtleSk7CisgICAgICAgIHJldHVybiBtX2pzU291cmNlQ29k
ZS5nZXQoKTsKKyAgICB9CisKKyAgICBKU0M6OlZNJiB2bSA9IG1fdmlydHVhbE1hY2hpbmUudm07
CisgICAgVGV4dFBvc2l0aW9uIHN0YXJ0UG9zaXRpb24geyB9OworICAgIFJlZjxKU1NjcmlwdFNv
dXJjZVByb3ZpZGVyPiBzb3VyY2VQcm92aWRlciA9IEpTU2NyaXB0U291cmNlUHJvdmlkZXI6OmNy
ZWF0ZShzZWxmLCBKU0M6OlNvdXJjZU9yaWdpbihtb2R1bGVLZXkuc3RyaW5nKCkpLCBVUkwoeyB9
LCBtb2R1bGVLZXkuc3RyaW5nKCkpLCBUZXh0UG9zaXRpb24oKSwgSlNDOjpTb3VyY2VQcm92aWRl
clNvdXJjZVR5cGU6Ok1vZHVsZSk7CisgICAgSlNDOjpTb3VyY2VDb2RlIHNvdXJjZUNvZGUoV1RG
TW92ZShzb3VyY2VQcm92aWRlciksIHN0YXJ0UG9zaXRpb24ubV9saW5lLm9uZUJhc2VkSW50KCks
IHN0YXJ0UG9zaXRpb24ubV9jb2x1bW4ub25lQmFzZWRJbnQoKSk7CisgICAgSlNDOjpKU1NvdXJj
ZUNvZGUqIGpzU291cmNlQ29kZSA9IEpTQzo6SlNTb3VyY2VDb2RlOjpjcmVhdGUodm0sIFdURk1v
dmUoc291cmNlQ29kZSkpOworICAgIG1fanNTb3VyY2VDb2RlLnNldCh2bSwganNTb3VyY2VDb2Rl
KTsKKyAgICBbc2VsZiB3cml0ZUNhY2hlXTsKKyAgICByZXR1cm4ganNTb3VyY2VDb2RlOworfQog
CiBAZW5kCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNTY3JpcHRJ
bnRlcm5hbC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1NjcmlwdEludGVybmFsLmgK
aW5kZXggYTk3M2VkMWFkNGExZmM1ZmRmMzVjZjk0ODIzMDE3OTVhZTFmMmViMy4uNjZhNzVlMjZl
NTJhNzZiZDJkMDg4OTgxZmNhMGI4YzFjOTQ1NTQwMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL0FQSS9KU1NjcmlwdEludGVybmFsLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL0FQSS9KU1NjcmlwdEludGVybmFsLmgKQEAgLTI4LDYgKzI4LDI5IEBACiAjaW1wb3J0ICJK
U1NjcmlwdC5oIgogI2ltcG9ydCAiU291cmNlQ29kZS5oIgogCi1PQkpDX0NMQVNTIEpTU2NyaXB0
OworI2lmIEpTQ19PQkpDX0FQSV9FTkFCTEVECiAKLWNvbnN0IFN0cmluZyYgZ2V0SlNTY3JpcHRT
b3VyY2VDb2RlKEpTU2NyaXB0ICopOworTlNfQVNTVU1FX05PTk5VTExfQkVHSU4KKworbmFtZXNw
YWNlIEpTQyB7CitjbGFzcyBDYWNoZWRCeXRlY29kZTsKK2NsYXNzIElkZW50aWZpZXI7CitjbGFz
cyBKU1NvdXJjZUNvZGU7Cit9OworCituYW1lc3BhY2UgV1RGIHsKK2NsYXNzIFN0cmluZzsKK307
CisKK0BpbnRlcmZhY2UgSlNTY3JpcHQoSW50ZXJuYWwpCisKKy0gKHVuc2lnbmVkKWhhc2g7Cist
IChjb25zdCBXVEY6OlN0cmluZyYpc291cmNlOworLSAoY29uc3QgSlNDOjpDYWNoZWRCeXRlY29k
ZSopY2FjaGVkQnl0ZWNvZGU7CistIChKU0M6OkpTU291cmNlQ29kZSopanNTb3VyY2VDb2RlOihj
b25zdCBKU0M6OklkZW50aWZpZXImKW1vZHVsZUtleTsKKworQGVuZAorCitOU19BU1NVTUVfTk9O
TlVMTF9FTkQKKworI2VuZGlmIC8vIEpTQ19PQkpDX0FQSV9FTkFCTEVECmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTU2NyaXB0U291cmNlUHJvdmlkZXIuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNTY3JpcHRTb3VyY2VQcm92aWRlci5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjNlODQzMWRlNmYyOTU4MjllMjhmYzU4YWE3NTU5NmFiNWU3ODc3OWIKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTU2NyaXB0U291cmNlUHJvdmlkZXIuaApA
QCAtMCwwICsxLDU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2lmIEpTQ19PQkpDX0FQSV9FTkFCTEVECisKKyNpbXBvcnQgIlNvdXJjZVByb3ZpZGVy
LmgiCisKK0BjbGFzcyBKU1NjcmlwdDsKKworY2xhc3MgSlNTY3JpcHRTb3VyY2VQcm92aWRlciA6
IHB1YmxpYyBKU0M6OlNvdXJjZVByb3ZpZGVyIHsKK3B1YmxpYzoKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZS4uLiBBcmdzPgorICAgIHN0YXRpYyBSZWY8SlNTY3JpcHRTb3VyY2VQcm92aWRlcj4gY3Jl
YXRlKEpTU2NyaXB0ICpzY3JpcHQsIEFyZ3MmJi4uLiBhcmdzKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgSlNTY3JpcHRTb3VyY2VQcm92aWRlcihzY3JpcHQsIHN0ZDo6Zm9y
d2FyZDxBcmdzPihhcmdzKS4uLikpOworICAgIH0KKworICAgIHVuc2lnbmVkIGhhc2goKSBjb25z
dCBvdmVycmlkZTsKKyAgICBTdHJpbmdWaWV3IHNvdXJjZSgpIGNvbnN0IG92ZXJyaWRlOworICAg
IGNvbnN0IEpTQzo6Q2FjaGVkQnl0ZWNvZGUqIGNhY2hlZEJ5dGVjb2RlKCkgY29uc3Qgb3ZlcnJp
ZGU7CisKK3ByaXZhdGU6CisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJncz4KKyAgICBKU1Nj
cmlwdFNvdXJjZVByb3ZpZGVyKEpTU2NyaXB0ICpzY3JpcHQsIEFyZ3MmJi4uLiBhcmdzKQorICAg
ICAgICA6IFNvdXJjZVByb3ZpZGVyKHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLikKKyAgICAg
ICAgLCBtX3NjcmlwdChzY3JpcHQpCisgICAgeyB9CisKKyAgICBSZXRhaW5QdHI8SlNTY3JpcHQ+
IG1fc2NyaXB0OworfTsKKworI2VuZGlmIC8vIEpTQ19PQkpDX0FQSV9FTkFCTEVECmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTU2NyaXB0U291cmNlUHJvdmlkZXIubW0g
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTU2NyaXB0U291cmNlUHJvdmlkZXIubW0KbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uNTUzNmE4YjkzYTk3ZGJlZjRiZGE3ZTkwYzA3ODk4MjcxMDg1NGU0YQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNTY3JpcHRTb3VyY2VQcm92
aWRlci5tbQpAQCAtMCwwICsxLDQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJKU1NjcmlwdFNvdXJj
ZVByb3ZpZGVyLmgiCisKKyNpZiBKU0NfT0JKQ19BUElfRU5BQkxFRAorCisjaW1wb3J0ICJKU1Nj
cmlwdEludGVybmFsLmgiCisKK3Vuc2lnbmVkIEpTU2NyaXB0U291cmNlUHJvdmlkZXI6Omhhc2go
KSBjb25zdAoreworICAgIHJldHVybiBbbV9zY3JpcHQuZ2V0KCkgaGFzaF07Cit9CisKK1N0cmlu
Z1ZpZXcgSlNTY3JpcHRTb3VyY2VQcm92aWRlcjo6c291cmNlKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gW21fc2NyaXB0LmdldCgpIHNvdXJjZV07Cit9CisKK2NvbnN0IEpTQzo6Q2FjaGVkQnl0ZWNv
ZGUqIEpTU2NyaXB0U291cmNlUHJvdmlkZXI6OmNhY2hlZEJ5dGVjb2RlKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gW21fc2NyaXB0LmdldCgpIGNhY2hlZEJ5dGVjb2RlXTsKK30KKworI2VuZGlmIC8v
IEpTQ19PQkpDX0FQSV9FTkFCTEVECmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
QVBJL0pTVmlydHVhbE1hY2hpbmUubW0gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmly
dHVhbE1hY2hpbmUubW0KaW5kZXggNWU3OTVmMDE2ZjA1YTM4MWJkY2YxMDQwZjMzNWQwODk1Mzk1
ZGVhYS4uNTA0ZDMzY2Y1ZjdjYjUzZjE2ZGQzNzc5M2ZjNjFjOTE1ZTIzYmZlNiAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZpcnR1YWxNYWNoaW5lLm1tCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWaXJ0dWFsTWFjaGluZS5tbQpAQCAtMjk3LDYgKzI5
NywxMSBAQCArIChOU1VJbnRlZ2VyKXNldE51bWJlck9mRlRMQ29tcGlsZXJUaHJlYWRzOihOU1VJ
bnRlZ2VyKW51bWJlck9mVGhyZWFkcwogCiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCiAKKy0g
KEpTQzo6Vk0mKXZtCit7CisgICAgcmV0dXJuICp0b0pTKG1fZ3JvdXApOworfQorCiBAZW5kCiAK
IHN0YXRpYyB2b2lkIHNjYW5FeHRlcm5hbE9iamVjdEdyYXBoKEpTQzo6Vk0mIHZtLCBKU0M6OlNs
b3RWaXNpdG9yJiB2aXNpdG9yLCB2b2lkKiByb290LCBib29sIGxvY2tBY3F1aXJlZCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWaXJ0dWFsTWFjaGluZUludGVybmFs
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmlydHVhbE1hY2hpbmVJbnRlcm5hbC5o
CmluZGV4IDkxMjJlZDQ5YTRlYTFhYTQ5ZWM2NjdmZWY2NjI3ZmM0M2I3NzcxNmQuLjliMGJmNmJl
ZWIwN2FkZDA5YzYzZThiMTQwMzRhODhjZTgzZDZlZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9BUEkvSlNWaXJ0dWFsTWFjaGluZUludGVybmFsLmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL0FQSS9KU1ZpcnR1YWxNYWNoaW5lSW50ZXJuYWwuaApAQCAtNDYsNiArNDYs
OCBAQCBKU0NvbnRleHRHcm91cFJlZiBnZXRHcm91cEZyb21WaXJ0dWFsTWFjaGluZShKU1ZpcnR1
YWxNYWNoaW5lICopOwogCiAtIChKU0NvbnRleHQgKiljb250ZXh0Rm9yR2xvYmFsQ29udGV4dFJl
ZjooSlNHbG9iYWxDb250ZXh0UmVmKWdsb2JhbENvbnRleHQ7CiAtICh2b2lkKWFkZENvbnRleHQ6
KEpTQ29udGV4dCAqKXdyYXBwZXIgZm9yR2xvYmFsQ29udGV4dFJlZjooSlNHbG9iYWxDb250ZXh0
UmVmKWdsb2JhbENvbnRleHQ7CistIChKU0M6OlZNJil2bTsKKwogQGVuZAogCiAjZW5kaWYgLy8g
ZGVmaW5lZChfX09CSkNfXykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkv
dGVzdHMvdGVzdGFwaS5tbSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVzdGFw
aS5tbQppbmRleCAxM2JlYjY5ZjJiY2Q3MjE5NGM3MGFmNTY4Zjk2MTJkNjFlZjZhY2MzLi42NjJi
ZWViMTRjYjA4OWQxM2YyYzQ1MWNkODFhNTA2ZmM5YjI3MDVjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL3Rlc3RhcGkubW0KKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL0FQSS90ZXN0cy90ZXN0YXBpLm1tCkBAIC0yNCwyMyArMjQsMjggQEAKICAqLwogCiAj
aW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIkpTRXhwb3J0TWFjcm9zLmgiCi0jaW1wb3J0IDxK
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5oPgogCisjaW1wb3J0ICJBUElDYXN0LmgiCisj
aW1wb3J0ICJDb21wbGV0aW9uLmgiCiAjaW1wb3J0ICJDdXJyZW50VGhpc0luc2lkZUJsb2NrR2V0
dGVyVGVzdC5oIgogI2ltcG9ydCAiREZHV29ya2xpc3QuaCIKICNpbXBvcnQgIkRhdGVUZXN0cy5o
IgorI2ltcG9ydCAiSWRlbnRpZmllcklubGluZXMuaCIKICNpbXBvcnQgIkpTQ2FzdC5oIgogI2lt
cG9ydCAiSlNDb250ZXh0UHJpdmF0ZS5oIgorI2ltcG9ydCAiSlNFeHBvcnRNYWNyb3MuaCIKICNp
bXBvcnQgIkpTRXhwb3J0VGVzdHMuaCIKLSNpbXBvcnQgIkpTU2NyaXB0LmgiCisjaW1wb3J0ICJK
U1NjcmlwdEludGVybmFsLmgiCisjaW1wb3J0ICJKU1NvdXJjZUNvZGUuaCIKICNpbXBvcnQgIkpT
VmFsdWVQcml2YXRlLmgiCiAjaW1wb3J0ICJKU1ZpcnR1YWxNYWNoaW5lSW50ZXJuYWwuaCIKICNp
bXBvcnQgIkpTVmlydHVhbE1hY2hpbmVQcml2YXRlLmgiCiAjaW1wb3J0ICJKU1dyYXBwZXJNYXBU
ZXN0cy5oIgogI2ltcG9ydCAiUmVncmVzczE0MTI3NS5oIgogI2ltcG9ydCAiUmVncmVzczE0MTgw
OS5oIgorI2ltcG9ydCAiU3Ryb25nSW5saW5lcy5oIgogCisjaW1wb3J0IDxKYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS5oPgogI2ltcG9ydCA8cHRocmVhZC5oPgogI2ltcG9ydCA8dmVjdG9y
PgogI2ltcG9ydCA8d3RmL01lbW9yeUZvb3RwcmludC5oPgpAQCAtMTk4MCw2ICsxOTg1LDY4IEBA
IHN0YXRpYyB2b2lkIHRlc3RJbXBvcnRNb2R1bGVUd2ljZSgpCiAgICAgfQogfQogCitzdGF0aWMg
dm9pZCB0ZXN0Qnl0ZWNvZGVDYWNoZSgpCit7CisgICAgQGF1dG9yZWxlYXNlcG9vbCB7CisgICAg
ICAgIE5TVVJMKiB0ZW1wRGlyZWN0b3J5ID0gW05TVVJMIGZpbGVVUkxXaXRoUGF0aDpOU1RlbXBv
cmFyeURpcmVjdG9yeSgpIGlzRGlyZWN0b3J5OllFU107CisKKyAgICAgICAgTlNTdHJpbmcqIGZv
b1NvdXJjZSA9IEAiaW1wb3J0IHsgbiB9IGZyb20gXCIuLi9mb28uanNcIjsgZXhwb3J0IGxldCBm
b28gPSBuOyI7CisgICAgICAgIE5TU3RyaW5nKiBiYXJTb3VyY2UgPSBAImltcG9ydCBcIm90aGVy
RGlyZWN0b3J5L2Jhei5qc1wiOyBleHBvcnQgbGV0IG4gPSBudWxsOyI7CisgICAgICAgIE5TU3Ry
aW5nKiBiYXpTb3VyY2UgPSBAImltcG9ydCB7IGZvbyB9IGZyb20gXCIuLi9kaXJlY3RvcnkvYmFy
LmpzXCI7IGdsb2JhbFRoaXMucmFuID0gbnVsbDsgZXhwb3J0IGxldCBleHAgPSBmb287IjsKKwor
ICAgICAgICBOU1VSTCogZm9vUGF0aCA9IFt0ZW1wRGlyZWN0b3J5IFVSTEJ5QXBwZW5kaW5nUGF0
aENvbXBvbmVudDpAImZvby5qcyJdOworICAgICAgICBOU1VSTCogYmFyUGF0aCA9IFt0ZW1wRGly
ZWN0b3J5IFVSTEJ5QXBwZW5kaW5nUGF0aENvbXBvbmVudDpAImJhci5qcyJdOworICAgICAgICBO
U1VSTCogYmF6UGF0aCA9IFt0ZW1wRGlyZWN0b3J5IFVSTEJ5QXBwZW5kaW5nUGF0aENvbXBvbmVu
dDpAImJhei5qcyJdOworCisgICAgICAgIE5TVVJMKiBmb29DYWNoZVBhdGggPSBbdGVtcERpcmVj
dG9yeSBVUkxCeUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6QCJmb28uanMuY2FjaGUiXTsKKyAgICAg
ICAgTlNVUkwqIGJhckNhY2hlUGF0aCA9IFt0ZW1wRGlyZWN0b3J5IFVSTEJ5QXBwZW5kaW5nUGF0
aENvbXBvbmVudDpAImJhci5qcy5jYWNoZSJdOworICAgICAgICBOU1VSTCogYmF6Q2FjaGVQYXRo
ID0gW3RlbXBEaXJlY3RvcnkgVVJMQnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50OkAiYmF6LmpzLmNh
Y2hlIl07CisKKyAgICAgICAgW2Zvb1NvdXJjZSB3cml0ZVRvVVJMOmZvb1BhdGggYXRvbWljYWxs
eTpOTyBlbmNvZGluZzpOU0FTQ0lJU3RyaW5nRW5jb2RpbmcgZXJyb3I6bmlsXTsKKyAgICAgICAg
W2JhclNvdXJjZSB3cml0ZVRvVVJMOmJhclBhdGggYXRvbWljYWxseTpOTyBlbmNvZGluZzpOU0FT
Q0lJU3RyaW5nRW5jb2RpbmcgZXJyb3I6bmlsXTsKKyAgICAgICAgW2JhelNvdXJjZSB3cml0ZVRv
VVJMOmJhelBhdGggYXRvbWljYWxseTpOTyBlbmNvZGluZzpOU0FTQ0lJU3RyaW5nRW5jb2Rpbmcg
ZXJyb3I6bmlsXTsKKworICAgICAgICBfX2Jsb2NrIGJvb2wgZm9yY2VEaXNrQ2FjaGUgPSBmYWxz
ZTsKKyAgICAgICAgYXV0byBibG9jayA9IF4oSlNDb250ZXh0ICpjb250ZXh0LCBKU1ZhbHVlICpp
ZGVudGlmaWVyLCBKU1ZhbHVlICpyZXNvbHZlLCBKU1ZhbHVlICpyZWplY3QpIHsKKyAgICAgICAg
ICAgIEpTQzo6T3B0aW9uczo6Zm9yY2VEaXNrQ2FjaGUoKSA9IGZvcmNlRGlza0NhY2hlOworICAg
ICAgICAgICAgaWYgKFtpZGVudGlmaWVyIGlzRXF1YWxUb09iamVjdDpAImZpbGU6Ly8vZGlyZWN0
b3J5L2Jhci5qcyJdKQorICAgICAgICAgICAgICAgIFtyZXNvbHZlIGNhbGxXaXRoQXJndW1lbnRz
OkBbW0pTU2NyaXB0IHNjcmlwdEZyb21BU0NJSUZpbGU6Zm9vUGF0aCBpblZpcnR1YWxNYWNoaW5l
OmNvbnRleHQudmlydHVhbE1hY2hpbmUgd2l0aENvZGVTaWduaW5nOm5pbCBhbmRCeXRlY29kZUNh
Y2hlOmZvb0NhY2hlUGF0aF1dXTsKKyAgICAgICAgICAgIGVsc2UgaWYgKFtpZGVudGlmaWVyIGlz
RXF1YWxUb09iamVjdDpAImZpbGU6Ly8vZm9vLmpzIl0pCisgICAgICAgICAgICAgICAgW3Jlc29s
dmUgY2FsbFdpdGhBcmd1bWVudHM6QFtbSlNTY3JpcHQgc2NyaXB0RnJvbUFTQ0lJRmlsZTpiYXJQ
YXRoIGluVmlydHVhbE1hY2hpbmU6Y29udGV4dC52aXJ0dWFsTWFjaGluZSB3aXRoQ29kZVNpZ25p
bmc6bmlsIGFuZEJ5dGVjb2RlQ2FjaGU6YmFyQ2FjaGVQYXRoXV1dOworICAgICAgICAgICAgZWxz
ZSBpZiAoW2lkZW50aWZpZXIgaXNFcXVhbFRvT2JqZWN0OkAiZmlsZTovLy9vdGhlckRpcmVjdG9y
eS9iYXouanMiXSkKKyAgICAgICAgICAgICAgICBbcmVzb2x2ZSBjYWxsV2l0aEFyZ3VtZW50czpA
W1tKU1NjcmlwdCBzY3JpcHRGcm9tQVNDSUlGaWxlOmJhelBhdGggaW5WaXJ0dWFsTWFjaGluZTpj
b250ZXh0LnZpcnR1YWxNYWNoaW5lIHdpdGhDb2RlU2lnbmluZzpuaWwgYW5kQnl0ZWNvZGVDYWNo
ZTpiYXpDYWNoZVBhdGhdXV07CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgW3Jl
amVjdCBjYWxsV2l0aEFyZ3VtZW50czpAW1tKU1ZhbHVlIHZhbHVlV2l0aE5ld0Vycm9yRnJvbU1l
c3NhZ2U6QCJXZWlyZCBwYXRoIiBpbkNvbnRleHQ6Y29udGV4dF1dXTsKKyAgICAgICAgfTsKKwor
ICAgICAgICBAYXV0b3JlbGVhc2Vwb29sIHsKKyAgICAgICAgICAgIGF1dG8gKmNvbnRleHQgPSBb
SlNDb250ZXh0RmV0Y2hEZWxlZ2F0ZSBjb250ZXh0V2l0aEJsb2NrRm9yRmV0Y2g6YmxvY2tdOwor
ICAgICAgICAgICAgY29udGV4dC5tb2R1bGVMb2FkZXJEZWxlZ2F0ZSA9IGNvbnRleHQ7CisgICAg
ICAgICAgICBKU1ZhbHVlICpwcm9taXNlID0gW2NvbnRleHQgZXZhbHVhdGVTY3JpcHQ6QCJpbXBv
cnQoJy4uL290aGVyRGlyZWN0b3J5L2Jhei5qcycpOyIgd2l0aFNvdXJjZVVSTDpbTlNVUkwgZmls
ZVVSTFdpdGhQYXRoOkAiL2RpcmVjdG9yeSIgaXNEaXJlY3Rvcnk6WUVTXV07CisgICAgICAgICAg
ICBKU1ZhbHVlICpudWxsID0gW0pTVmFsdWUgdmFsdWVXaXRoTnVsbEluQ29udGV4dDpjb250ZXh0
XTsKKyAgICAgICAgICAgIGNoZWNrTW9kdWxlQ29kZVJhbihjb250ZXh0LCBwcm9taXNlLCBudWxs
KTsKKyAgICAgICAgfQorCisgICAgICAgIEBhdXRvcmVsZWFzZXBvb2wgeworICAgICAgICAgICAg
Zm9yY2VEaXNrQ2FjaGUgPSB0cnVlOworICAgICAgICAgICAgYXV0byAqY29udGV4dCA9IFtKU0Nv
bnRleHRGZXRjaERlbGVnYXRlIGNvbnRleHRXaXRoQmxvY2tGb3JGZXRjaDpibG9ja107CisgICAg
ICAgICAgICBjb250ZXh0Lm1vZHVsZUxvYWRlckRlbGVnYXRlID0gY29udGV4dDsKKyAgICAgICAg
ICAgIEpTVmFsdWUgKnByb21pc2UgPSBbY29udGV4dCBldmFsdWF0ZVNjcmlwdDpAImltcG9ydCgn
Li4vb3RoZXJEaXJlY3RvcnkvYmF6LmpzJyk7IiB3aXRoU291cmNlVVJMOltOU1VSTCBmaWxlVVJM
V2l0aFBhdGg6QCIvZGlyZWN0b3J5IiBpc0RpcmVjdG9yeTpZRVNdXTsKKyAgICAgICAgICAgIEpT
VmFsdWUgKm51bGwgPSBbSlNWYWx1ZSB2YWx1ZVdpdGhOdWxsSW5Db250ZXh0OmNvbnRleHRdOwor
ICAgICAgICAgICAgY2hlY2tNb2R1bGVDb2RlUmFuKGNvbnRleHQsIHByb21pc2UsIG51bGwpOwor
ICAgICAgICAgICAgSlNDOjpPcHRpb25zOjpmb3JjZURpc2tDYWNoZSgpID0gZmFsc2U7CisgICAg
ICAgIH0KKworICAgICAgICBOU0ZpbGVNYW5hZ2VyKiBmaWxlTWFuYWdlciA9IFtOU0ZpbGVNYW5h
Z2VyIGRlZmF1bHRNYW5hZ2VyXTsKKyAgICAgICAgW2ZpbGVNYW5hZ2VyIHJlbW92ZUl0ZW1BdFVS
TDpmb29QYXRoIGVycm9yOm5pbF07CisgICAgICAgIFtmaWxlTWFuYWdlciByZW1vdmVJdGVtQXRV
Ukw6YmFyUGF0aCBlcnJvcjpuaWxdOworICAgICAgICBbZmlsZU1hbmFnZXIgcmVtb3ZlSXRlbUF0
VVJMOmJhelBhdGggZXJyb3I6bmlsXTsKKyAgICAgICAgW2ZpbGVNYW5hZ2VyIHJlbW92ZUl0ZW1B
dFVSTDpmb29DYWNoZVBhdGggZXJyb3I6bmlsXTsKKyAgICAgICAgW2ZpbGVNYW5hZ2VyIHJlbW92
ZUl0ZW1BdFVSTDpiYXJDYWNoZVBhdGggZXJyb3I6bmlsXTsKKyAgICAgICAgW2ZpbGVNYW5hZ2Vy
IHJlbW92ZUl0ZW1BdFVSTDpiYXpDYWNoZVBhdGggZXJyb3I6bmlsXTsKKyAgICB9Cit9CisKIEBp
bnRlcmZhY2UgSlNDb250ZXh0RmlsZUxvYWRlckRlbGVnYXRlIDogSlNDb250ZXh0IDxKU01vZHVs
ZUxvYWRlckRlbGVnYXRlPgogCiArIChpbnN0YW5jZXR5cGUpbmV3Q29udGV4dDsKQEAgLTIwMTcs
NyArMjA4NCw3IEBAIHN0YXRpYyBOU1VSTCAqcmVzb2x2ZVBhdGhUb1NjcmlwdHMoKQogLSAodm9p
ZCljb250ZXh0OihKU0NvbnRleHQgKiljb250ZXh0IGZldGNoTW9kdWxlRm9ySWRlbnRpZmllcjoo
SlNWYWx1ZSAqKWlkZW50aWZpZXIgd2l0aFJlc29sdmVIYW5kbGVyOihKU1ZhbHVlICopcmVzb2x2
ZSBhbmRSZWplY3RIYW5kbGVyOihKU1ZhbHVlICopcmVqZWN0CiB7CiAgICAgTlNVUkwgKmZpbGVQ
YXRoID0gW05TVVJMIFVSTFdpdGhTdHJpbmc6W2lkZW50aWZpZXIgdG9TdHJpbmddXTsKLSAgICBh
dXRvICpzY3JpcHQgPSBbSlNTY3JpcHQgc2NyaXB0RnJvbUFTQ0lJRmlsZTpmaWxlUGF0aCBpblZp
cnR1YWxNYWNoaW5lOltjb250ZXh0IHZpcnR1YWxNYWNoaW5lXSB3aXRoQ29kZVNpZ25pbmc6bmls
IGFuZEJ5dGVjb2RlQ2FjaGU6bmlsXTsKKyAgICBhdXRvICpzY3JpcHQgPSBbSlNTY3JpcHQgc2Ny
aXB0RnJvbUFTQ0lJRmlsZTpmaWxlUGF0aCBpblZpcnR1YWxNYWNoaW5lOmNvbnRleHQudmlydHVh
bE1hY2hpbmUgd2l0aENvZGVTaWduaW5nOm5pbCBhbmRCeXRlY29kZUNhY2hlOm5pbF07CiAgICAg
aWYgKHNjcmlwdCkKICAgICAgICAgW3Jlc29sdmUgY2FsbFdpdGhBcmd1bWVudHM6QFtzY3JpcHRd
XTsKICAgICBlbHNlCkBAIC0yMDQ5LDYgKzIxMTYsNyBAQCB2b2lkIHRlc3RPYmplY3RpdmVDQVBJ
KCkKICAgICB0ZXN0RmV0Y2hXaXRoVHdvQ3ljbGUoKTsKICAgICB0ZXN0RmV0Y2hXaXRoVGhyZWVD
eWNsZSgpOwogICAgIHRlc3RJbXBvcnRNb2R1bGVUd2ljZSgpOworICAgIHRlc3RCeXRlY29kZUNh
Y2hlKCk7CiAKICAgICB0ZXN0TG9hZGVyUmVqZWN0c05pbFNjcmlwdFVSTCgpOwogICAgIHRlc3RM
b2FkZXJSZWplY3RzRmFpbGVkRmV0Y2goKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5k
ZXggNDdhN2M3M2MwYjFhYTg1NTU0YmNlZDM0MzM5ZDU4ZjkzOTc5ZjVhYi4uNGViNTlhYzU2MGE2
ODc4YmU0ZjUyYzQ0Mzc2MTRkZjZmMTJkMTNmMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKQEAgLTgxNCw2ICs4MTQsNyBAQAogCQkxNEMyNUI5RTIxNkVBMzZBMDAxMzc3NjQgLyogSW5z
dHJ1Y3Rpb25TdHJlYW0uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDE0Q0MzQkEyMjEzOEEyMzgwMDJENThCNiAvKiBJbnN0cnVjdGlvblN0cmVhbS5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTE0Q0E5NThC
MTZBQjUwREUwMDkzOEEwNiAvKiBTdGF0aWNQcm9wZXJ0eUFuYWx5emVyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNENBOTU4QTE2QUI1MERFMDA5MzhB
MDYgLyogU3RhdGljUHJvcGVydHlBbmFseXplci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTE0Q0E5NThEMTZBQjUwRkEwMDkzOEEwNiAvKiBPYmpl
Y3RBbGxvY2F0aW9uUHJvZmlsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMTRDQTk1OEMxNkFCNTBGQTAwOTM4QTA2IC8qIE9iamVjdEFsbG9jYXRpb25Q
cm9maWxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
KwkJMTREMDFBNzcyMUZCMzUxRjAwQkM1NEU5IC8qIEpTU2NyaXB0U291cmNlUHJvdmlkZXIuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0RDAxQTc2MjFG
QjM1MDMwMEJDNTRFOSAvKiBKU1NjcmlwdFNvdXJjZVByb3ZpZGVyLmggKi87IH07CiAJCTE0RDJG
M0RCMTM5RjRCRTIwMDQ5MTAzMSAvKiBNYXJrZWRTcGFjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTREMkYzRDkxMzlGNEJFMjAwNDkxMDMxIC8qIE1h
cmtlZFNwYWNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJMTRERjA0REExNkIzOTk2RDAwMTZBNTEzIC8qIFN0YXRpY1Byb3BlcnR5QW5hbHlzaXMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0REYwNEQ5
MTZCMzk5NkQwMDE2QTUxMyAvKiBTdGF0aWNQcm9wZXJ0eUFuYWx5c2lzLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTRFODRGOUYxNEVFMUFDQzAw
RDZENUQ0IC8qIFdlYWtCbG9jay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMTRFODRGOUExNEVFMUFDQzAwRDZENUQ0IC8qIFdlYWtCbG9jay5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0zMjM4LDYgKzMy
MzksOCBAQAogCQkxNENBOTU4QzE2QUI1MEZBMDA5MzhBMDYgLyogT2JqZWN0QWxsb2NhdGlvblBy
b2ZpbGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT2JqZWN0QWxsb2NhdGlv
blByb2ZpbGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTRDQzNCQTEyMTM4QTIz
ODAwMkQ1OEI2IC8qIEluc3RydWN0aW9uU3RyZWFtLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEluc3RydWN0aW9uU3RyZWFtLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMTRDQzNCQTIyMTM4QTIzODAwMkQ1OEI2IC8qIEluc3RydWN0aW9uU3RyZWFt
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluc3RydWN0aW9uU3RyZWFtLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTE0RDAxQTc1MjFGQjM1MDMwMEJDNTRFOSAv
KiBKU1NjcmlwdFNvdXJjZVByb3ZpZGVyLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gSlNTY3Jp
cHRTb3VyY2VQcm92aWRlci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMTREMDFB
NzYyMUZCMzUwMzAwQkM1NEU5IC8qIEpTU2NyaXB0U291cmNlUHJvdmlkZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gSlNTY3JpcHRTb3VyY2VQcm92aWRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkxNEQyRjNEOTEzOUY0QkUyMDA0OTEwMzEgLyogTWFya2VkU3BhY2UuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFya2VkU3BhY2UuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMTRENzkyNjQwREFBMDNGQjAwMUE5RjA1IC8qIENMb29wU3RhY2suaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ0xvb3BTdGFjay5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkxNEQ4NTc3NDBBNDY5NkM4MDAzMjE0NkMgLyogdGVzdGFwaS5qcyAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuamF2YXNjcmlwdDsgbmFtZSA9IHRlc3RhcGkuanM7IHBhdGgg
PSBBUEkvdGVzdHMvdGVzdGFwaS5qczsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTU5
OTMsNiArNTk5Niw4IEBACiAJCQkJNTNFRTAxQjcyMThGN0VGRjAwQUQxRjhEIC8qIEpTU2NyaXB0
SW50ZXJuYWwuaCAqLywKIAkJCQlBN0MwQzRBQTE2N0MwOENEMDAxNzAxMUQgLyogSlNTY3JpcHRS
ZWYuY3BwICovLAogCQkJCUE3QzBDNEFCMTY3QzA4Q0QwMDE3MDExRCAvKiBKU1NjcmlwdFJlZlBy
aXZhdGUuaCAqLywKKwkJCQkxNEQwMUE3NjIxRkIzNTAzMDBCQzU0RTkgLyogSlNTY3JpcHRTb3Vy
Y2VQcm92aWRlci5oICovLAorCQkJCTE0RDAxQTc1MjFGQjM1MDMwMEJDNTRFOSAvKiBKU1Njcmlw
dFNvdXJjZVByb3ZpZGVyLm1tICovLAogCQkJCTE0ODJCNzRDMEE0MzAzMjgwMDUxN0NGQyAvKiBK
U1N0cmluZ1JlZi5jcHAgKi8sCiAJCQkJMTQ4MkI3NEIwQTQzMDMyODAwNTE3Q0ZDIC8qIEpTU3Ry
aW5nUmVmLmggKi8sCiAJCQkJMTQ2QUFCMzcwQjY2QTk0NDAwRTU1RjE2IC8qIEpTU3RyaW5nUmVm
Q0YuY3BwICovLApAQCAtOTc3NSw2ICs5NzgwLDcgQEAKIAkJCQkxNEY3MjU2NjE0RUUyNjVFMDBC
MTY1MkIgLyogV2Vha0hhbmRsZU93bmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNEU4NEZBMjE0
RUUxQUNDMDBENkQ1RDQgLyogV2Vha0ltcGwuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0QkU3RDMz
MTcxMzVDRjQwMEQxODA3QSAvKiBXZWFrSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMTRE
MDFBNzcyMUZCMzUxRjAwQkM1NEU5IC8qIEpTU2NyaXB0U291cmNlUHJvdmlkZXIuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUE3Q0EzQUU0MTdEQTQxQUUwMDY1MzhBRiAvKiBXZWFrTWFwQ29uc3RydWN0
b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUUzQTMyQkM3MUZDODMxNDcwMDdEN0U3NiAvKiBXZWFr
TWFwSW1wbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTM5M0FERDgxRkU3MDJEMDAwMjJENjgxIC8q
IFdlYWtNYXBJbXBsSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvU291cmNlc0NvY29hLnR4dCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9T
b3VyY2VzQ29jb2EudHh0CmluZGV4IGFmNmY5ZWY1ZmMzM2UwMWYxZGVmNjczZjEyNjc5YjFkNzc3
NzZiNGQuLjc2MGFhMGM0MjViZGVhYzExOGVkMGM1ZTVhNmM3OTgzOGNjMWZlOTggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzQ29jb2EudHh0CisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9Tb3VyY2VzQ29jb2EudHh0CkBAIC0yNCw2ICsyNCw3IEBACiBBUEkvSlNB
UElHbG9iYWxPYmplY3QubW0KIEFQSS9KU0FQSVdyYXBwZXJPYmplY3QubW0KIEFQSS9KU1Njcmlw
dC5tbQorQVBJL0pTU2NyaXB0U291cmNlUHJvdmlkZXIubW0KIEFQSS9KU0NvbnRleHQubW0KIEFQ
SS9KU01hbmFnZWRWYWx1ZS5tbQogQVBJL0pTUmVtb3RlSW5zcGVjdG9yLmNwcApkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25FeGVjdXRh
YmxlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9u
RXhlY3V0YWJsZS5jcHAKaW5kZXggYjExNGQzOWU5MDIyNmE1MTBiMjQ1ODUyMWQ5NWM2M2Y3NTAz
M2VlYi4uZThkYzE5ODFmMGU2M2MyNjAxNjA5ZDI0MGI5YTM3OTcxOWNhYTU4OSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25FeGVjdXRh
YmxlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRGdW5j
dGlvbkV4ZWN1dGFibGUuY3BwCkBAIC0xOTQsNiArMTk0LDE2IEBAIFVubGlua2VkRnVuY3Rpb25F
eGVjdXRhYmxlKiBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6ZnJvbUdsb2JhbENvZGUoCiAg
ICAgcmV0dXJuIGV4ZWN1dGFibGU7CiB9CiAKK1VubGlua2VkRnVuY3Rpb25Db2RlQmxvY2sqIFVu
bGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOjp1bmxpbmtlZENvZGVCbG9ja0ZvcihDb2RlU3BlY2lh
bGl6YXRpb25LaW5kIHNwZWNpYWxpemF0aW9uS2luZCkKK3sKKyAgICBzd2l0Y2ggKHNwZWNpYWxp
emF0aW9uS2luZCkgeworICAgIGNhc2UgQ29kZUZvckNhbGw6CisgICAgICAgIHJldHVybiBtX3Vu
bGlua2VkQ29kZUJsb2NrRm9yQ2FsbC5nZXQoKTsKKyAgICBjYXNlIENvZGVGb3JDb25zdHJ1Y3Q6
CisgICAgICAgIHJldHVybiBtX3VubGlua2VkQ29kZUJsb2NrRm9yQ29uc3RydWN0LmdldCgpOwor
ICAgIH0KK30KKwogVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayogVW5saW5rZWRGdW5jdGlvbkV4
ZWN1dGFibGU6OnVubGlua2VkQ29kZUJsb2NrRm9yKAogICAgIFZNJiB2bSwgY29uc3QgU291cmNl
Q29kZSYgc291cmNlLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIHNwZWNpYWxpemF0aW9uS2luZCwg
CiAgICAgRGVidWdnZXJNb2RlIGRlYnVnZ2VyTW9kZSwgUGFyc2VyRXJyb3ImIGVycm9yLCBTb3Vy
Y2VQYXJzZU1vZGUgcGFyc2VNb2RlKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuaAppbmRleCA2NTI2Y2Q5
MGNiYmFhNjllMjZjYzBhMWMwYWM3N2I2OGMxOTVmYjU2Li5kNjM3ZDY4YWY1YWQ2MzE1NThlYTkz
YjNiODZiOWRhMDRjYjgzMTc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuaApAQCAtMTA0LDYgKzEw
NCw4IEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCB0eXBlUHJvZmlsaW5nRW5kT2Zmc2V0KCkgY29u
c3QgeyByZXR1cm4gbV90eXBlUHJvZmlsaW5nRW5kT2Zmc2V0OyB9CiAgICAgdm9pZCBzZXRJbnZh
bGlkVHlwZVByb2ZpbGluZ09mZnNldHMoKTsKIAorICAgIFVubGlua2VkRnVuY3Rpb25Db2RlQmxv
Y2sqIHVubGlua2VkQ29kZUJsb2NrRm9yKENvZGVTcGVjaWFsaXphdGlvbktpbmQpOworCiAgICAg
VW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayogdW5saW5rZWRDb2RlQmxvY2tGb3IoCiAgICAgICAg
IFZNJiwgY29uc3QgU291cmNlQ29kZSYsIENvZGVTcGVjaWFsaXphdGlvbktpbmQsIERlYnVnZ2Vy
TW9kZSwKICAgICAgICAgUGFyc2VyRXJyb3ImLCBTb3VyY2VQYXJzZU1vZGUpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Tb3VyY2VDb2RlS2V5LmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcGFyc2VyL1NvdXJjZUNvZGVLZXkuaAppbmRleCBjYzNhYmUyMWZhZjU3
MTRiZjk5ODAxZGZiOWVlZDQyODM0ODFmMTg5Li5iYzAyZjEyOWFiZjE4NWJlNzU1OGZiZDYzNTRk
NTkzZjg2YzhiYjcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1Nv
dXJjZUNvZGVLZXkuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1NvdXJjZUNv
ZGVLZXkuaApAQCAtMTAwLDYgKzEwMCw4IEBAIHB1YmxpYzoKIAogICAgIHVuc2lnbmVkIGhhc2go
KSBjb25zdCB7IHJldHVybiBtX2hhc2g7IH0KIAorICAgIGNvbnN0IFVubGlua2VkU291cmNlQ29k
ZSYgc291cmNlKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2VDb2RlOyB9CisKICAgICBzaXplX3Qg
bGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2VDb2RlLmxlbmd0aCgpOyB9CiAKICAgICBi
b29sIGlzTnVsbCgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlQ29kZS5pc051bGwoKTsgfQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Tb3VyY2VQcm92aWRlci5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Tb3VyY2VQcm92aWRlci5oCmluZGV4IDA5YWQx
NjgzNGIwYWZiN2JlOWYzMTRhZmMyZjI1MGFkODJlZGI1ZTUuLmE1ZTgyNWI3NzI3MTE1NDI5ZjBh
NzRkMmU1MTkwYjJhZGRiM2Y1OWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9w
YXJzZXIvU291cmNlUHJvdmlkZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2Vy
L1NvdXJjZVByb3ZpZGVyLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDA4LCAyMDA5LCAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAwOC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDIsNiArNDIsNjYgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIFdlYkFzc2VtYmx5LAogICAgIH07CiAKKyAgICBjbGFzcyBDYWNo
ZWRCeXRlY29kZSB7CisgICAgICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENhY2hlZEJ5dGVjb2Rl
KTsKKworICAgIHB1YmxpYzoKKyAgICAgICAgQ2FjaGVkQnl0ZWNvZGUoKQorICAgICAgICAgICAg
OiBDYWNoZWRCeXRlY29kZShudWxscHRyLCAwKQorICAgICAgICB7CisgICAgICAgIH0KKworICAg
ICAgICBDYWNoZWRCeXRlY29kZShjb25zdCB2b2lkKiBkYXRhLCBzaXplX3Qgc2l6ZSkKKyAgICAg
ICAgICAgIDogbV9vd25lZChmYWxzZSkKKyAgICAgICAgICAgICwgbV9zaXplKHNpemUpCisgICAg
ICAgICAgICAsIG1fZGF0YShkYXRhKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBD
YWNoZWRCeXRlY29kZShNYWxsb2NQdHI8dWludDhfdD4mJiBkYXRhLCBzaXplX3Qgc2l6ZSkKKyAg
ICAgICAgICAgIDogbV9vd25lZCh0cnVlKQorICAgICAgICAgICAgLCBtX3NpemUoc2l6ZSkKKyAg
ICAgICAgICAgICwgbV9kYXRhKGRhdGEubGVha1B0cigpKQorICAgICAgICB7CisgICAgICAgIH0K
KworICAgICAgICBDYWNoZWRCeXRlY29kZShDYWNoZWRCeXRlY29kZSYmIG90aGVyKQorICAgICAg
ICB7CisgICAgICAgICAgICAqdGhpcyA9IFdURk1vdmUob3RoZXIpOworICAgICAgICB9CisKKyAg
ICAgICAgQ2FjaGVkQnl0ZWNvZGUmIG9wZXJhdG9yPShDYWNoZWRCeXRlY29kZSYmIG90aGVyKQor
ICAgICAgICB7CisgICAgICAgICAgICBmcmVlRGF0YUlmT3duZWQoKTsKKyAgICAgICAgICAgIG1f
b3duZWQgPSBvdGhlci5tX293bmVkOworICAgICAgICAgICAgbV9zaXplID0gb3RoZXIubV9zaXpl
OworICAgICAgICAgICAgbV9kYXRhID0gb3RoZXIubV9kYXRhOworICAgICAgICAgICAgb3RoZXIu
bV9vd25lZCA9IGZhbHNlOworICAgICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICB9CisK
KyAgICAgICAgY29uc3Qgdm9pZCogZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YTsgfQorICAg
ICAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQorICAgICAgICBib29s
IG93bmVkKCkgY29uc3QgeyByZXR1cm4gbV9vd25lZDsgfQorCisgICAgICAgIH5DYWNoZWRCeXRl
Y29kZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZyZWVEYXRhSWZPd25lZCgpOworICAgICAg
ICB9CisKKyAgICBwcml2YXRlOgorICAgICAgICB2b2lkIGZyZWVEYXRhSWZPd25lZCgpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGlmIChtX2RhdGEgJiYgbV9vd25lZCkKKyAgICAgICAgICAgICAg
ICBmYXN0RnJlZShjb25zdF9jYXN0PHZvaWQqPihtX2RhdGEpKTsKKyAgICAgICAgfQorCisgICAg
ICAgIGJvb2wgbV9vd25lZDsKKyAgICAgICAgc2l6ZV90IG1fc2l6ZTsKKyAgICAgICAgY29uc3Qg
dm9pZCogbV9kYXRhOworICAgIH07CisKKwogICAgIGNsYXNzIFNvdXJjZVByb3ZpZGVyIDogcHVi
bGljIFJlZkNvdW50ZWQ8U291cmNlUHJvdmlkZXI+IHsKICAgICBwdWJsaWM6CiAgICAgICAgIHN0
YXRpYyBjb25zdCBpbnRwdHJfdCBudWxsSUQgPSAxOwpAQCAtNTIsNiArMTEyLDggQEAgbmFtZXNw
YWNlIEpTQyB7CiAKICAgICAgICAgdmlydHVhbCB1bnNpZ25lZCBoYXNoKCkgY29uc3QgPSAwOwog
ICAgICAgICB2aXJ0dWFsIFN0cmluZ1ZpZXcgc291cmNlKCkgY29uc3QgPSAwOworICAgICAgICB2
aXJ0dWFsIGNvbnN0IENhY2hlZEJ5dGVjb2RlKiBjYWNoZWRCeXRlY29kZSgpIGNvbnN0IHsgcmV0
dXJuIG51bGxwdHI7IH0KKwogICAgICAgICBTdHJpbmdWaWV3IGdldFJhbmdlKGludCBzdGFydCwg
aW50IGVuZCkgY29uc3QKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIHNvdXJjZSgpLnN1
YnN0cmluZyhzdGFydCwgZW5kIC0gc3RhcnQpOwpAQCAtMTA0LDE2ICsxNjYsMTcgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgICAgICByZXR1cm4gbV9zb3VyY2UuZ2V0KCk7CiAgICAgICAgIH0K
IAotICAgIHByaXZhdGU6CisgICAgcHJvdGVjdGVkOgogICAgICAgICBTdHJpbmdTb3VyY2VQcm92
aWRlcihjb25zdCBTdHJpbmcmIHNvdXJjZSwgY29uc3QgU291cmNlT3JpZ2luJiBzb3VyY2VPcmln
aW4sIFVSTCYmIHVybCwgY29uc3QgVGV4dFBvc2l0aW9uJiBzdGFydFBvc2l0aW9uLCBTb3VyY2VQ
cm92aWRlclNvdXJjZVR5cGUgc291cmNlVHlwZSkKICAgICAgICAgICAgIDogU291cmNlUHJvdmlk
ZXIoc291cmNlT3JpZ2luLCBXVEZNb3ZlKHVybCksIHN0YXJ0UG9zaXRpb24sIHNvdXJjZVR5cGUp
CiAgICAgICAgICAgICAsIG1fc291cmNlKHNvdXJjZS5pc051bGwoKSA/ICpTdHJpbmdJbXBsOjpl
bXB0eSgpIDogKnNvdXJjZS5pbXBsKCkpCiAgICAgICAgIHsKICAgICAgICAgfQogCisgICAgcHJp
dmF0ZToKICAgICAgICAgUmVmPFN0cmluZ0ltcGw+IG1fc291cmNlOwogICAgIH07Ci0gICAgCisK
ICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAgICAgY2xhc3MgV2ViQXNzZW1ibHlTb3VyY2VQcm92
aWRlciA6IHB1YmxpYyBTb3VyY2VQcm92aWRlciB7CiAgICAgcHVibGljOgpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9VbmxpbmtlZFNvdXJjZUNvZGUuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvVW5saW5rZWRTb3VyY2VDb2RlLmgKaW5kZXggYWFhYWQz
ZjQxMmY4ZjNmYTViYzFmMmZlYmZiMTRjYzc0ZGUyMjQyNC4uZmFlMGUzNTFlYWJlNTBmYjhhNGM1
MzkyODlmMzViODYyZDE3ZGI3NyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Bh
cnNlci9VbmxpbmtlZFNvdXJjZUNvZGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFy
c2VyL1VubGlua2VkU291cmNlQ29kZS5oCkBAIC04MSw2ICs4MSwxMSBAQCBuYW1lc3BhY2UgSlND
IHsKIAogICAgICAgICBib29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QgeyByZXR1
cm4gbV9wcm92aWRlci5pc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpOyB9CiAKKyAgICAgICAgY29u
c3QgU291cmNlUHJvdmlkZXImIHByb3ZpZGVyKCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuICptX3Byb3ZpZGVyOworICAgICAgICB9CisKICAgICAgICAgdW5zaWduZWQgaGFz
aCgpIGNvbnN0CiAgICAgICAgIHsKICAgICAgICAgICAgIEFTU0VSVChtX3Byb3ZpZGVyKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvZGVDYWNoZS5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db2RlQ2FjaGUuY3BwCmluZGV4IGMzMmQyMDRi
NmNkODk2ODE4MWNiMGQxZGYwZWFiODNlYzExODE5ZDQuLjI2ZTA5MzFkNDY4OWQyZDljYjQwMWEx
YzczZDE2NjM4YWUwZDlkNTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0NvZGVDYWNoZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29k
ZUNhY2hlLmNwcApAQCAtMTYyLDQgKzE2Miw2NSBAQCB2b2lkIENvZGVDYWNoZTo6d3JpdGUoVk0m
IHZtKQogICAgICAgICB3cml0ZUNvZGVCbG9jayh2bSwgaXQua2V5LCBpdC52YWx1ZSk7CiB9CiAK
K3ZvaWQgZ2VuZXJhdGVVbmxpbmtlZENvZGVCbG9ja0ZvckZ1bmN0aW9ucyhWTSYgdm0sIFVubGlu
a2VkQ29kZUJsb2NrKiB1bmxpbmtlZENvZGVCbG9jaywgY29uc3QgU291cmNlQ29kZSYgcGFyZW50
U291cmNlLCBEZWJ1Z2dlck1vZGUgZGVidWdnZXJNb2RlLCBQYXJzZXJFcnJvciYgZXJyb3IpCit7
CisgICAgYXV0byBnZW5lcmF0ZSA9IFsmXShVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogdW5s
aW5rZWRFeGVjdXRhYmxlLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGNvbnN0cnVjdG9yS2luZCkg
eworICAgICAgICBpZiAoY29uc3RydWN0b3JLaW5kID09IENvZGVGb3JDb25zdHJ1Y3QgJiYgU291
cmNlUGFyc2VNb2RlU2V0KFNvdXJjZVBhcnNlTW9kZTo6QXN5bmNBcnJvd0Z1bmN0aW9uTW9kZSwg
U291cmNlUGFyc2VNb2RlOjpBc3luY01ldGhvZE1vZGUsIFNvdXJjZVBhcnNlTW9kZTo6QXN5bmNG
dW5jdGlvbk1vZGUpLmNvbnRhaW5zKHVubGlua2VkRXhlY3V0YWJsZS0+cGFyc2VNb2RlKCkpKQor
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0
YWJsZSA9IHVubGlua2VkRXhlY3V0YWJsZS0+bGluayh2bSwgcGFyZW50U291cmNlKTsKKyAgICAg
ICAgY29uc3QgU291cmNlQ29kZSYgc291cmNlID0gZXhlY3V0YWJsZS0+c291cmNlKCk7CisgICAg
ICAgIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2sqIHVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2sg
PSB1bmxpbmtlZEV4ZWN1dGFibGUtPnVubGlua2VkQ29kZUJsb2NrRm9yKHZtLCBzb3VyY2UsIGNv
bnN0cnVjdG9yS2luZCwgZGVidWdnZXJNb2RlLCBlcnJvciwgdW5saW5rZWRFeGVjdXRhYmxlLT5w
YXJzZU1vZGUoKSk7CisgICAgICAgIGlmICh1bmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKQorICAg
ICAgICAgICAgZ2VuZXJhdGVVbmxpbmtlZENvZGVCbG9ja0ZvckZ1bmN0aW9ucyh2bSwgdW5saW5r
ZWRGdW5jdGlvbkNvZGVCbG9jaywgc291cmNlLCBkZWJ1Z2dlck1vZGUsIGVycm9yKTsKKyAgICB9
OworCisgICAgLy8gRklYTUU6IFdlIHNob3VsZCBhbHNvIGdlbmVyYXRlIENvZGVCbG9ja3MgZm9y
IENvZGVGb3JDb25zdHJ1Y3QKKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTkzODIzCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHVubGlua2VkQ29k
ZUJsb2NrLT5udW1iZXJPZkZ1bmN0aW9uRGVjbHMoKTsgaSsrKQorICAgICAgICBnZW5lcmF0ZSh1
bmxpbmtlZENvZGVCbG9jay0+ZnVuY3Rpb25EZWNsKGkpLCBDb2RlRm9yQ2FsbCk7CisgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHVubGlua2VkQ29kZUJsb2NrLT5udW1iZXJPZkZ1bmN0aW9u
RXhwcnMoKTsgaSsrKQorICAgICAgICBnZW5lcmF0ZSh1bmxpbmtlZENvZGVCbG9jay0+ZnVuY3Rp
b25FeHByKGkpLCBDb2RlRm9yQ2FsbCk7Cit9CisKK3ZvaWQgd3JpdGVDb2RlQmxvY2soVk0mIHZt
LCBjb25zdCBTb3VyY2VDb2RlS2V5JiBrZXksIGNvbnN0IFNvdXJjZUNvZGVWYWx1ZSYgdmFsdWUp
Cit7CisjaWYgT1MoREFSV0lOKQorICAgIGNvbnN0IGNoYXIqIGNhY2hlUGF0aCA9IE9wdGlvbnM6
OmRpc2tDYWNoZVBhdGgoKTsKKyAgICBpZiAoTElLRUxZKCFjYWNoZVBhdGgpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBVbmxpbmtlZENvZGVCbG9jayogY29kZUJsb2NrID0ganNEeW5hbWljQ2Fz
dDxVbmxpbmtlZENvZGVCbG9jayo+KHZtLCB2YWx1ZS5jZWxsLmdldCgpKTsKKyAgICBpZiAoIWNv
ZGVCbG9jaykKKyAgICAgICAgcmV0dXJuOworCisgICAgc3RkOjpwYWlyPE1hbGxvY1B0cjx1aW50
OF90Piwgc2l6ZV90PiByZXN1bHQgPSBlbmNvZGVDb2RlQmxvY2sodm0sIGtleSwgY29kZUJsb2Nr
KTsKKworICAgIFN0cmluZyBmaWxlbmFtZSA9IG1ha2VTdHJpbmcoY2FjaGVQYXRoLCAnLycsIFN0
cmluZzo6bnVtYmVyKGtleS5oYXNoKCkpLCAiLmNhY2hlIik7CisgICAgaW50IGZkID0gb3Blbihm
aWxlbmFtZS51dGY4KCkuZGF0YSgpLCBPX0NSRUFUIHwgT19XUk9OTFksIDA2NjYpOworICAgIGlm
IChmZCA9PSAtMSkKKyAgICAgICAgcmV0dXJuOworICAgIGludCByYyA9IGZsb2NrKGZkLCBMT0NL
X0VYIHwgTE9DS19OQik7CisgICAgaWYgKCFyYykKKyAgICAgICAgOjp3cml0ZShmZCwgcmVzdWx0
LmZpcnN0LmdldCgpLCByZXN1bHQuc2Vjb25kKTsKKyAgICBjbG9zZShmZCk7CisjZWxzZQorICAg
IFVOVVNFRF9QQVJBTSh2bSk7CisgICAgVU5VU0VEX1BBUkFNKGtleSk7CisgICAgVU5VU0VEX1BB
UkFNKHZhbHVlKTsKKyNlbmRpZgorfQorCitDYWNoZWRCeXRlY29kZSBzZXJpYWxpemVCeXRlY29k
ZShWTSYgdm0sIFVubGlua2VkQ29kZUJsb2NrKiBjb2RlQmxvY2ssIGNvbnN0IFNvdXJjZUNvZGUm
IHNvdXJjZSwgU291cmNlQ29kZVR5cGUgY29kZVR5cGUsIEpTUGFyc2VyU3RyaWN0TW9kZSBzdHJp
Y3RNb2RlLCBKU1BhcnNlclNjcmlwdE1vZGUgc2NyaXB0TW9kZSwgRGVidWdnZXJNb2RlIGRlYnVn
Z2VyTW9kZSkKK3sKKyAgICBTb3VyY2VDb2RlS2V5IGtleSgKKyAgICAgICAgc291cmNlLCBTdHJp
bmcoKSwgY29kZVR5cGUsIHN0cmljdE1vZGUsIHNjcmlwdE1vZGUsCisgICAgICAgIERlcml2ZWRD
b250ZXh0VHlwZTo6Tm9uZSwgRXZhbENvbnRleHRUeXBlOjpOb25lLCBmYWxzZSwgZGVidWdnZXJN
b2RlLAorICAgICAgICB2bS50eXBlUHJvZmlsZXIoKSA/IFR5cGVQcm9maWxlckVuYWJsZWQ6Olll
cyA6IFR5cGVQcm9maWxlckVuYWJsZWQ6Ok5vLAorICAgICAgICB2bS5jb250cm9sRmxvd1Byb2Zp
bGVyKCkgPyBDb250cm9sRmxvd1Byb2ZpbGVyRW5hYmxlZDo6WWVzIDogQ29udHJvbEZsb3dQcm9m
aWxlckVuYWJsZWQ6Ok5vLAorICAgICAgICBXVEY6Om51bGxvcHQpOworICAgIHN0ZDo6cGFpcjxN
YWxsb2NQdHI8dWludDhfdD4sIHNpemVfdD4gcmVzdWx0ID0gZW5jb2RlQ29kZUJsb2NrKHZtLCBr
ZXksIGNvZGVCbG9jayk7CisgICAgcmV0dXJuIENhY2hlZEJ5dGVjb2RlIHsgV1RGTW92ZShyZXN1
bHQuZmlyc3QpLCByZXN1bHQuc2Vjb25kIH07Cit9CisKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvZGVDYWNoZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQ29kZUNhY2hlLmgKaW5kZXggOTkzOTVmMmNkMjg0MTEzOWEwMzVjOGIxNTg5YmI5
MzljNjljNTcwMi4uODBjMGQ5NWY5ZWY3OTQ5NTJlNWZiYzY4M2VlNTY2NTBlMGEwMjFhZiAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29kZUNhY2hlLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29kZUNhY2hlLmgKQEAgLTM2LDYgKzM2LDcg
QEAKICNpbmNsdWRlICJTdHJvbmdJbmxpbmVzLmgiCiAjaW5jbHVkZSAiVW5saW5rZWRDb2RlQmxv
Y2suaCIKICNpbmNsdWRlICJVbmxpbmtlZEV2YWxDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJVbmxp
bmtlZEZ1bmN0aW9uQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiVW5saW5rZWRNb2R1bGVQcm9ncmFt
Q29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrLmgiCiAjaW5j
bHVkZSA8c3lzL3N0YXQuaD4KQEAgLTYwLDYgKzYxLDE1IEBAIGNsYXNzIFVubGlua2VkUHJvZ3Jh
bUNvZGVCbG9jazsKIGNsYXNzIFZNOwogY2xhc3MgVmFyaWFibGVFbnZpcm9ubWVudDsKIAorbmFt
ZXNwYWNlIENvZGVDYWNoZUludGVybmFsIHsKK3N0YXRpYyBjb25zdCBib29sIHZlcmJvc2UgPSBm
YWxzZTsKK30gLy8gbmFtZXNwYWNlIENvZGVDYWNoZUludGVybmFsCisKKyNkZWZpbmUgVkVSQk9T
RV9MT0coLi4uKSBkbyB7IFwKKyAgICBpZiAoQ29kZUNhY2hlSW50ZXJuYWw6OnZlcmJvc2UpIFwK
KyAgICAgICAgZGF0YUxvZ0xuKCIoSlNDOjpDb2RlQ2FjaGUpICIsIF9fVkFfQVJHU19fKTsgXAor
fSB3aGlsZSAoZmFsc2UpCisKIHN0cnVjdCBTb3VyY2VDb2RlVmFsdWUgewogICAgIFNvdXJjZUNv
ZGVWYWx1ZSgpCiAgICAgewpAQCAtOTcsNiArMTA3LDE2IEBAIHB1YmxpYzoKICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBVbmxpbmtlZENvZGVCbG9ja1R5cGU+CiAgICAgVW5saW5rZWRDb2RlQmxvY2tU
eXBlKiBmZXRjaEZyb21EaXNrSW1wbChWTSYgdm0sIGNvbnN0IFNvdXJjZUNvZGVLZXkmIGtleSkK
ICAgICB7CisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0IGF1dG8qIGNhY2hlZEJ5dGVjb2Rl
ID0ga2V5LnNvdXJjZSgpLnByb3ZpZGVyKCkuY2FjaGVkQnl0ZWNvZGUoKTsKKyAgICAgICAgICAg
IGlmIChjYWNoZWRCeXRlY29kZSAmJiBjYWNoZWRCeXRlY29kZS0+c2l6ZSgpKSB7CisgICAgICAg
ICAgICAgICAgVkVSQk9TRV9MT0coIkZvdW5kIGNhY2hlZCBDb2RlQmxvY2sgaW4gdGhlIFNvdXJj
ZVByb3ZpZGVyIik7CisgICAgICAgICAgICAgICAgVW5saW5rZWRDb2RlQmxvY2tUeXBlKiB1bmxp
bmtlZENvZGVCbG9jayA9IGRlY29kZUNvZGVCbG9jazxVbmxpbmtlZENvZGVCbG9ja1R5cGU+KHZt
LCBrZXksIGNhY2hlZEJ5dGVjb2RlLT5kYXRhKCksIGNhY2hlZEJ5dGVjb2RlLT5zaXplKCkpOwor
ICAgICAgICAgICAgICAgIGlmICh1bmxpbmtlZENvZGVCbG9jaykKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHVubGlua2VkQ29kZUJsb2NrOworICAgICAgICAgICAgfQorICAgICAgICB9CisK
ICNpZiBPUyhEQVJXSU4pCiAgICAgICAgIGNvbnN0IGNoYXIqIGNhY2hlUGF0aCA9IE9wdGlvbnM6
OmRpc2tDYWNoZVBhdGgoKTsKICAgICAgICAgaWYgKCFjYWNoZVBhdGgpCkBAIC0xMjEsMTUgKzE0
MSwxOSBAQCBwdWJsaWM6CiAgICAgICAgIHN0cnVjdCBzdGF0IHNiOwogICAgICAgICBpbnQgcmVz
ID0gZnN0YXQoZmQsICZzYik7CiAgICAgICAgIHNpemVfdCBzaXplID0gc3RhdGljX2Nhc3Q8c2l6
ZV90PihzYi5zdF9zaXplKTsKLSAgICAgICAgaWYgKHJlcyB8fCAhc2l6ZSkKKyAgICAgICAgaWYg
KHJlcyB8fCAhc2l6ZSkgeworICAgICAgICAgICAgY2xvc2UoZmQpOwogICAgICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgICAgIH0KIAotICAgICAgICBjb25zdCB2b2lkKiBidWZmZXIgPSBt
bWFwKG51bGxwdHIsIHNpemUsIFBST1RfUkVBRCwgTUFQX1BSSVZBVEUsIGZkLCAwKTsKKyAgICAg
ICAgdm9pZCogYnVmZmVyID0gbW1hcChudWxscHRyLCBzaXplLCBQUk9UX1JFQUQsIE1BUF9QUklW
QVRFLCBmZCwgMCk7CiAgICAgICAgIFVubGlua2VkQ29kZUJsb2NrVHlwZSogdW5saW5rZWRDb2Rl
QmxvY2sgPSBkZWNvZGVDb2RlQmxvY2s8VW5saW5rZWRDb2RlQmxvY2tUeXBlPih2bSwga2V5LCBi
dWZmZXIsIHNpemUpOworICAgICAgICBtdW5tYXAoYnVmZmVyLCBzaXplKTsKIAogICAgICAgICBp
ZiAoIXVubGlua2VkQ29kZUJsb2NrKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKKyAg
ICAgICAgVkVSQk9TRV9MT0coIkZvdW5kIGNhY2hlZCBDb2RlQmxvY2sgb24gZGlzayIpOwogICAg
ICAgICBhZGRDYWNoZShrZXksIFNvdXJjZUNvZGVWYWx1ZSh2bSwgdW5saW5rZWRDb2RlQmxvY2ss
IG1fYWdlKSk7CiAgICAgICAgIHJldHVybiB1bmxpbmtlZENvZGVCbG9jazsKICNlbHNlCkBAIC0x
NTgsNiArMTgyLDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgcHJ1bmUoKTsKIAorICAgICAg
ICBWRVJCT1NFX0xPRygiVHJ5aW5nIHRvIGZpbmQgY2FjaGVkIENvZGVCbG9jayBmb3IgIiwga2V5
LnNvdXJjZSgpLnByb3ZpZGVyKCkudXJsKCkuc3RyaW5nKCkpOwogICAgICAgICBpdGVyYXRvciBm
aW5kUmVzdWx0ID0gbV9tYXAuZmluZChrZXkpOwogICAgICAgICBpZiAoZmluZFJlc3VsdCA9PSBt
X21hcC5lbmQoKSkKICAgICAgICAgICAgIHJldHVybiBmZXRjaEZyb21EaXNrPFVubGlua2VkQ29k
ZUJsb2NrVHlwZT4odm0sIGtleSk7CkBAIC0xODAsNiArMjA1LDcgQEAgcHVibGljOgogICAgICAg
ICBmaW5kUmVzdWx0LT52YWx1ZS5hZ2UgPSBtX2FnZTsKICAgICAgICAgbV9hZ2UgKz0ga2V5Lmxl
bmd0aCgpOwogCisgICAgICAgIFZFUkJPU0VfTE9HKCJGb3VuZCBjYWNoZWQgQ29kZUJsb2NrIGlu
IG1lbW9yeSIpOwogICAgICAgICByZXR1cm4ganNDYXN0PFVubGlua2VkQ29kZUJsb2NrVHlwZSo+
KGZpbmRSZXN1bHQtPnZhbHVlLmNlbGwuZ2V0KCkpOwogICAgIH0KIApAQCAtMjkxLDExICszMTcs
MTAgQEAgdGVtcGxhdGUgPD4gc3RydWN0IENhY2hlVHlwZXM8VW5saW5rZWRNb2R1bGVQcm9ncmFt
Q29kZUJsb2NrPiB7CiAgICAgc3RhdGljIGNvbnN0IFNvdXJjZVBhcnNlTW9kZSBwYXJzZU1vZGUg
PSBTb3VyY2VQYXJzZU1vZGU6Ok1vZHVsZUV2YWx1YXRlTW9kZTsKIH07CiAKLXRlbXBsYXRlIDxj
bGFzcyBVbmxpbmtlZENvZGVCbG9ja1R5cGUsIGNsYXNzIEV4ZWN1dGFibGVUeXBlPgotVW5saW5r
ZWRDb2RlQmxvY2tUeXBlKiBnZW5lcmF0ZVVubGlua2VkQ29kZUJsb2NrKFZNJiB2bSwgRXhlY3V0
YWJsZVR5cGUqIGV4ZWN1dGFibGUsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgSlNQYXJzZXJT
dHJpY3RNb2RlIHN0cmljdE1vZGUsIEpTUGFyc2VyU2NyaXB0TW9kZSBzY3JpcHRNb2RlLCBEZWJ1
Z2dlck1vZGUgZGVidWdnZXJNb2RlLCBQYXJzZXJFcnJvciYgZXJyb3IsIEV2YWxDb250ZXh0VHlw
ZSBldmFsQ29udGV4dFR5cGUsIGNvbnN0IFZhcmlhYmxlRW52aXJvbm1lbnQqIHZhcmlhYmxlc1Vu
ZGVyVERaKQordGVtcGxhdGUgPGNsYXNzIFVubGlua2VkQ29kZUJsb2NrVHlwZSwgY2xhc3MgRXhl
Y3V0YWJsZVR5cGUgPSBTY3JpcHRFeGVjdXRhYmxlPgorVW5saW5rZWRDb2RlQmxvY2tUeXBlKiBn
ZW5lcmF0ZVVubGlua2VkQ29kZUJsb2NrSW1wbChWTSYgdm0sIGNvbnN0IFNvdXJjZUNvZGUmIHNv
dXJjZSwgSlNQYXJzZXJTdHJpY3RNb2RlIHN0cmljdE1vZGUsIEpTUGFyc2VyU2NyaXB0TW9kZSBz
Y3JpcHRNb2RlLCBEZWJ1Z2dlck1vZGUgZGVidWdnZXJNb2RlLCBQYXJzZXJFcnJvciYgZXJyb3Is
IEV2YWxDb250ZXh0VHlwZSBldmFsQ29udGV4dFR5cGUsIERlcml2ZWRDb250ZXh0VHlwZSBkZXJp
dmVkQ29udGV4dFR5cGUsIGJvb2wgaXNBcnJvd0Z1bmN0aW9uQ29udGV4dCwgY29uc3QgVmFyaWFi
bGVFbnZpcm9ubWVudCogdmFyaWFibGVzVW5kZXJURFosIEV4ZWN1dGFibGVUeXBlKiBleGVjdXRh
YmxlID0gbnVsbHB0cikKIHsKICAgICB0eXBlZGVmIHR5cGVuYW1lIENhY2hlVHlwZXM8VW5saW5r
ZWRDb2RlQmxvY2tUeXBlPjo6Um9vdE5vZGUgUm9vdE5vZGU7Ci0gICAgRGVyaXZlZENvbnRleHRU
eXBlIGRlcml2ZWRDb250ZXh0VHlwZSA9IGV4ZWN1dGFibGUtPmRlcml2ZWRDb250ZXh0VHlwZSgp
OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxSb290Tm9kZT4gcm9vdE5vZGUgPSBwYXJzZTxSb290Tm9k
ZT4oCiAgICAgICAgICZ2bSwgc291cmNlLCBJZGVudGlmaWVyKCksIEpTUGFyc2VyQnVpbHRpbk1v
ZGU6Ok5vdEJ1aWx0aW4sIHN0cmljdE1vZGUsIHNjcmlwdE1vZGUsIENhY2hlVHlwZXM8VW5saW5r
ZWRDb2RlQmxvY2tUeXBlPjo6cGFyc2VNb2RlLCBTdXBlckJpbmRpbmc6Ok5vdE5lZWRlZCwgZXJy
b3IsIG51bGxwdHIsIENvbnN0cnVjdG9yS2luZDo6Tm9uZSwgZGVyaXZlZENvbnRleHRUeXBlLCBl
dmFsQ29udGV4dFR5cGUpOwogICAgIGlmICghcm9vdE5vZGUpCkBAIC0zMDYsMTAgKzMzMSwxNSBA
QCBVbmxpbmtlZENvZGVCbG9ja1R5cGUqIGdlbmVyYXRlVW5saW5rZWRDb2RlQmxvY2soVk0mIHZt
LCBFeGVjdXRhYmxlVHlwZSogZXhlY3V0YQogICAgIGJvb2wgZW5kQ29sdW1uSXNPblN0YXJ0TGlu
ZSA9ICFsaW5lQ291bnQ7CiAgICAgdW5zaWduZWQgdW5saW5rZWRFbmRDb2x1bW4gPSByb290Tm9k
ZS0+ZW5kQ29sdW1uKCk7CiAgICAgdW5zaWduZWQgZW5kQ29sdW1uID0gdW5saW5rZWRFbmRDb2x1
bW4gKyAoZW5kQ29sdW1uSXNPblN0YXJ0TGluZSA/IHN0YXJ0Q29sdW1uIDogMSk7Ci0gICAgdW5z
aWduZWQgYXJyb3dDb250ZXh0RmVhdHVyZSA9IGV4ZWN1dGFibGUtPmlzQXJyb3dGdW5jdGlvbkNv
bnRleHQoKSA/IEFycm93RnVuY3Rpb25Db250ZXh0RmVhdHVyZSA6IDA7Ci0gICAgZXhlY3V0YWJs
ZS0+cmVjb3JkUGFyc2Uocm9vdE5vZGUtPmZlYXR1cmVzKCkgfCBhcnJvd0NvbnRleHRGZWF0dXJl
LCByb290Tm9kZS0+aGFzQ2FwdHVyZWRWYXJpYWJsZXMoKSwgcm9vdE5vZGUtPmxhc3RMaW5lKCks
IGVuZENvbHVtbik7CisgICAgdW5zaWduZWQgYXJyb3dDb250ZXh0RmVhdHVyZSA9IGlzQXJyb3dG
dW5jdGlvbkNvbnRleHQgPyBBcnJvd0Z1bmN0aW9uQ29udGV4dEZlYXR1cmUgOiAwOworICAgIGlm
IChleGVjdXRhYmxlKQorICAgICAgICBleGVjdXRhYmxlLT5yZWNvcmRQYXJzZShyb290Tm9kZS0+
ZmVhdHVyZXMoKSB8IGFycm93Q29udGV4dEZlYXR1cmUsIHJvb3ROb2RlLT5oYXNDYXB0dXJlZFZh
cmlhYmxlcygpLCByb290Tm9kZS0+bGFzdExpbmUoKSwgZW5kQ29sdW1uKTsKKworICAgIGJvb2wg
dXNlc0V2YWwgPSByb290Tm9kZS0+ZmVhdHVyZXMoKSAmIEV2YWxGZWF0dXJlOworICAgIGJvb2wg
aXNTdHJpY3RNb2RlID0gcm9vdE5vZGUtPmZlYXR1cmVzKCkgJiBTdHJpY3RNb2RlRmVhdHVyZTsK
KyAgICBFeGVjdXRhYmxlSW5mbyBleGVjdXRhYmxlSW5mbyh1c2VzRXZhbCwgaXNTdHJpY3RNb2Rl
LCBmYWxzZSwgZmFsc2UsIENvbnN0cnVjdG9yS2luZDo6Tm9uZSwgc2NyaXB0TW9kZSwgU3VwZXJC
aW5kaW5nOjpOb3ROZWVkZWQsIENhY2hlVHlwZXM8VW5saW5rZWRDb2RlQmxvY2tUeXBlPjo6cGFy
c2VNb2RlLCBkZXJpdmVkQ29udGV4dFR5cGUsIGlzQXJyb3dGdW5jdGlvbkNvbnRleHQsIGZhbHNl
LCBldmFsQ29udGV4dFR5cGUpOwogCi0gICAgVW5saW5rZWRDb2RlQmxvY2tUeXBlKiB1bmxpbmtl
ZENvZGVCbG9jayA9IFVubGlua2VkQ29kZUJsb2NrVHlwZTo6Y3JlYXRlKCZ2bSwgZXhlY3V0YWJs
ZS0+ZXhlY3V0YWJsZUluZm8oKSwgZGVidWdnZXJNb2RlKTsKKyAgICBVbmxpbmtlZENvZGVCbG9j
a1R5cGUqIHVubGlua2VkQ29kZUJsb2NrID0gVW5saW5rZWRDb2RlQmxvY2tUeXBlOjpjcmVhdGUo
JnZtLCBleGVjdXRhYmxlSW5mbywgZGVidWdnZXJNb2RlKTsKICAgICB1bmxpbmtlZENvZGVCbG9j
ay0+cmVjb3JkUGFyc2Uocm9vdE5vZGUtPmZlYXR1cmVzKCksIHJvb3ROb2RlLT5oYXNDYXB0dXJl
ZFZhcmlhYmxlcygpLCBsaW5lQ291bnQsIHVubGlua2VkRW5kQ29sdW1uKTsKICAgICB1bmxpbmtl
ZENvZGVCbG9jay0+c2V0U291cmNlVVJMRGlyZWN0aXZlKHNvdXJjZS5wcm92aWRlcigpLT5zb3Vy
Y2VVUkwoKSk7CiAgICAgdW5saW5rZWRDb2RlQmxvY2stPnNldFNvdXJjZU1hcHBpbmdVUkxEaXJl
Y3RpdmUoc291cmNlLnByb3ZpZGVyKCktPnNvdXJjZU1hcHBpbmdVUkwoKSk7CkBAIC0zMjIsMzYg
KzM1MiwyOCBAQCBVbmxpbmtlZENvZGVCbG9ja1R5cGUqIGdlbmVyYXRlVW5saW5rZWRDb2RlQmxv
Y2soVk0mIHZtLCBFeGVjdXRhYmxlVHlwZSogZXhlY3V0YQogICAgIHJldHVybiB1bmxpbmtlZENv
ZGVCbG9jazsKIH0KIAotQUxXQVlTX0lOTElORSBzdGF0aWMgdm9pZCB3cml0ZUNvZGVCbG9jayhW
TSYgdm0sIGNvbnN0IFNvdXJjZUNvZGVLZXkmIGtleSwgY29uc3QgU291cmNlQ29kZVZhbHVlJiB2
YWx1ZSkKK3RlbXBsYXRlIDxjbGFzcyBVbmxpbmtlZENvZGVCbG9ja1R5cGUsIGNsYXNzIEV4ZWN1
dGFibGVUeXBlPgorVW5saW5rZWRDb2RlQmxvY2tUeXBlKiBnZW5lcmF0ZVVubGlua2VkQ29kZUJs
b2NrKFZNJiB2bSwgRXhlY3V0YWJsZVR5cGUqIGV4ZWN1dGFibGUsIGNvbnN0IFNvdXJjZUNvZGUm
IHNvdXJjZSwgSlNQYXJzZXJTdHJpY3RNb2RlIHN0cmljdE1vZGUsIEpTUGFyc2VyU2NyaXB0TW9k
ZSBzY3JpcHRNb2RlLCBEZWJ1Z2dlck1vZGUgZGVidWdnZXJNb2RlLCBQYXJzZXJFcnJvciYgZXJy
b3IsIEV2YWxDb250ZXh0VHlwZSBldmFsQ29udGV4dFR5cGUsIGNvbnN0IFZhcmlhYmxlRW52aXJv
bm1lbnQqIHZhcmlhYmxlc1VuZGVyVERaKQogewotI2lmIE9TKERBUldJTikKLSAgICBjb25zdCBj
aGFyKiBjYWNoZVBhdGggPSBPcHRpb25zOjpkaXNrQ2FjaGVQYXRoKCk7Ci0gICAgaWYgKExJS0VM
WSghY2FjaGVQYXRoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgVW5saW5rZWRDb2RlQmxvY2sq
IGNvZGVCbG9jayA9IGpzRHluYW1pY0Nhc3Q8VW5saW5rZWRDb2RlQmxvY2sqPih2bSwgdmFsdWUu
Y2VsbC5nZXQoKSk7Ci0gICAgaWYgKCFjb2RlQmxvY2spCi0gICAgICAgIHJldHVybjsKLQotICAg
IHVuc2lnbmVkIGhhc2ggPSBrZXkuaGFzaCgpOwotICAgIGNoYXIgZmlsZW5hbWVbNTEyXTsKLSAg
ICBpbnQgY291bnQgPSBzbnByaW50ZihmaWxlbmFtZSwgNTEyLCAiJXMvJXUuY2FjaGUiLCBjYWNo
ZVBhdGgsIGhhc2gpOwotICAgIGlmIChjb3VudCA8IDAgfHwgY291bnQgPiA1MTIpCi0gICAgICAg
IHJldHVybjsKLQotICAgIHN0ZDo6cGFpcjxNYWxsb2NQdHI8dWludDhfdD4sIHNpemVfdD4gcmVz
dWx0ID0gZW5jb2RlQ29kZUJsb2NrKHZtLCBrZXksIGNvZGVCbG9jayk7Ci0KLSAgICBpbnQgZmQg
PSBvcGVuKGZpbGVuYW1lLCBPX0NSRUFUIHwgT19XUk9OTFksIDA2NjYpOwotICAgIGludCByYyA9
IGZsb2NrKGZkLCBMT0NLX0VYIHwgTE9DS19OQik7Ci0gICAgaWYgKCFyYykKLSAgICAgICAgOjp3
cml0ZShmZCwgcmVzdWx0LmZpcnN0LmdldCgpLCByZXN1bHQuc2Vjb25kKTsKLSAgICBjbG9zZShm
ZCk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKGtleSk7
Ci0gICAgVU5VU0VEX1BBUkFNKHZhbHVlKTsKLSNlbmRpZgorICAgIHJldHVybiBnZW5lcmF0ZVVu
bGlua2VkQ29kZUJsb2NrSW1wbDxVbmxpbmtlZENvZGVCbG9ja1R5cGUsIEV4ZWN1dGFibGVUeXBl
Pih2bSwgc291cmNlLCBzdHJpY3RNb2RlLCBzY3JpcHRNb2RlLCBkZWJ1Z2dlck1vZGUsIGVycm9y
LCBldmFsQ29udGV4dFR5cGUsIGV4ZWN1dGFibGUtPmRlcml2ZWRDb250ZXh0VHlwZSgpLCBleGVj
dXRhYmxlLT5pc0Fycm93RnVuY3Rpb25Db250ZXh0KCksIHZhcmlhYmxlc1VuZGVyVERaLCBleGVj
dXRhYmxlKTsKK30KKwordm9pZCBnZW5lcmF0ZVVubGlua2VkQ29kZUJsb2NrRm9yRnVuY3Rpb25z
KFZNJiwgVW5saW5rZWRDb2RlQmxvY2sqLCBjb25zdCBTb3VyY2VDb2RlJiwgRGVidWdnZXJNb2Rl
LCBQYXJzZXJFcnJvciYpOworCit0ZW1wbGF0ZSA8Y2xhc3MgVW5saW5rZWRDb2RlQmxvY2tUeXBl
Pgorc3RkOjplbmFibGVfaWZfdDwhc3RkOjppc19zYW1lPFVubGlua2VkQ29kZUJsb2NrVHlwZSwg
VW5saW5rZWRFdmFsQ29kZUJsb2NrPjo6dmFsdWUsIFVubGlua2VkQ29kZUJsb2NrVHlwZSo+City
ZWN1cnNpdmVseUdlbmVyYXRlVW5saW5rZWRDb2RlQmxvY2soVk0mIHZtLCBjb25zdCBTb3VyY2VD
b2RlJiBzb3VyY2UsIEpTUGFyc2VyU3RyaWN0TW9kZSBzdHJpY3RNb2RlLCBKU1BhcnNlclNjcmlw
dE1vZGUgc2NyaXB0TW9kZSwgRGVidWdnZXJNb2RlIGRlYnVnZ2VyTW9kZSwgUGFyc2VyRXJyb3Im
IGVycm9yLCBFdmFsQ29udGV4dFR5cGUgZXZhbENvbnRleHRUeXBlLCBjb25zdCBWYXJpYWJsZUVu
dmlyb25tZW50KiB2YXJpYWJsZXNVbmRlclREWikKK3sKKyAgICBib29sIGlzQXJyb3dGdW5jdGlv
bkNvbnRleHQgPSBmYWxzZTsKKyAgICBVbmxpbmtlZENvZGVCbG9ja1R5cGUqIHVubGlua2VkQ29k
ZUJsb2NrID0gZ2VuZXJhdGVVbmxpbmtlZENvZGVCbG9ja0ltcGw8VW5saW5rZWRDb2RlQmxvY2tU
eXBlPih2bSwgc291cmNlLCBzdHJpY3RNb2RlLCBzY3JpcHRNb2RlLCBkZWJ1Z2dlck1vZGUsIGVy
cm9yLCBldmFsQ29udGV4dFR5cGUsIERlcml2ZWRDb250ZXh0VHlwZTo6Tm9uZSwgaXNBcnJvd0Z1
bmN0aW9uQ29udGV4dCwgdmFyaWFibGVzVW5kZXJURFopOworICAgIGlmICghdW5saW5rZWRDb2Rl
QmxvY2spCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgZ2VuZXJhdGVVbmxpbmtlZENv
ZGVCbG9ja0ZvckZ1bmN0aW9ucyh2bSwgdW5saW5rZWRDb2RlQmxvY2ssIHNvdXJjZSwgZGVidWdn
ZXJNb2RlLCBlcnJvcik7CisgICAgcmV0dXJuIHVubGlua2VkQ29kZUJsb2NrOwogfQogCit2b2lk
IHdyaXRlQ29kZUJsb2NrKFZNJiwgY29uc3QgU291cmNlQ29kZUtleSYsIGNvbnN0IFNvdXJjZUNv
ZGVWYWx1ZSYpOworQ2FjaGVkQnl0ZWNvZGUgc2VyaWFsaXplQnl0ZWNvZGUoVk0mLCBVbmxpbmtl
ZENvZGVCbG9jayosIGNvbnN0IFNvdXJjZUNvZGUmLCBTb3VyY2VDb2RlVHlwZSwgSlNQYXJzZXJT
dHJpY3RNb2RlLCBKU1BhcnNlclNjcmlwdE1vZGUsIERlYnVnZ2VyTW9kZSk7CiAKIH0gLy8gbmFt
ZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29t
cGxldGlvbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21wbGV0aW9uLmNw
cAppbmRleCAzZmI0YWI5ZDNhYTJlMzRiYmNkOWFkZmZhNzMwN2U3MDc2YTQ2MWFmLi44YTg3NWNk
N2UzYjA1ZGM0MzY1OWYwMWI3MDA1MmJjMTNjYzFhZTE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Db21wbGV0aW9uLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9Db21wbGV0aW9uLmNwcApAQCAtMjUsNiArMjUsNyBAQAogCiAjaW5jbHVk
ZSAiQ2FsbEZyYW1lLmgiCiAjaW5jbHVkZSAiQ2F0Y2hTY29wZS5oIgorI2luY2x1ZGUgIkNvZGVD
YWNoZS5oIgogI2luY2x1ZGUgIkNvZGVQcm9maWxpbmcuaCIKICNpbmNsdWRlICJFeGNlcHRpb24u
aCIKICNpbmNsdWRlICJJZGVudGlmaWVySW5saW5lcy5oIgpAQCAtOTAsNiArOTEsMzYgQEAgYm9v
bCBjaGVja01vZHVsZVN5bnRheChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFNvdXJjZUNvZGUmIHNv
dXJjZSwgUGFyc2VyRXJyb3ImIGUKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorQ2FjaGVkQnl0ZWNv
ZGUgZ2VuZXJhdGVCeXRlY29kZShWTSYgdm0sIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgUGFy
c2VyRXJyb3ImIGVycm9yKQoreworICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKKyAgICBSRUxF
QVNFX0FTU0VSVCh2bS5hdG9taWNTdHJpbmdUYWJsZSgpID09IFRocmVhZDo6Y3VycmVudCgpLmF0
b21pY1N0cmluZ1RhYmxlKCkpOworCisgICAgVmFyaWFibGVFbnZpcm9ubWVudCB2YXJpYWJsZXNV
bmRlclREWjsKKyAgICBKU1BhcnNlclN0cmljdE1vZGUgc3RyaWN0TW9kZSA9IEpTUGFyc2VyU3Ry
aWN0TW9kZTo6Tm90U3RyaWN0OworICAgIEpTUGFyc2VyU2NyaXB0TW9kZSBzY3JpcHRNb2RlID0g
SlNQYXJzZXJTY3JpcHRNb2RlOjpDbGFzc2ljOworICAgIERlYnVnZ2VyTW9kZSBkZWJ1Z2dlck1v
ZGUgPSBEZWJ1Z2dlck9mZjsKKyAgICBFdmFsQ29udGV4dFR5cGUgZXZhbENvbnRleHRUeXBlID0g
RXZhbENvbnRleHRUeXBlOjpOb25lOworCisgICAgVW5saW5rZWRDb2RlQmxvY2sqIHVubGlua2Vk
Q29kZUJsb2NrID0gcmVjdXJzaXZlbHlHZW5lcmF0ZVVubGlua2VkQ29kZUJsb2NrPFVubGlua2Vk
UHJvZ3JhbUNvZGVCbG9jaz4odm0sIHNvdXJjZSwgc3RyaWN0TW9kZSwgc2NyaXB0TW9kZSwgZGVi
dWdnZXJNb2RlLCBlcnJvciwgZXZhbENvbnRleHRUeXBlLCAmdmFyaWFibGVzVW5kZXJURFopOwor
ICAgIHJldHVybiBzZXJpYWxpemVCeXRlY29kZSh2bSwgdW5saW5rZWRDb2RlQmxvY2ssIHNvdXJj
ZSwgU291cmNlQ29kZVR5cGU6OlByb2dyYW1UeXBlLCBzdHJpY3RNb2RlLCBzY3JpcHRNb2RlLCBk
ZWJ1Z2dlck1vZGUpOworfQorCitDYWNoZWRCeXRlY29kZSBnZW5lcmF0ZU1vZHVsZUJ5dGVjb2Rl
KFZNJiB2bSwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBQYXJzZXJFcnJvciYgZXJyb3IpCit7
CisgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOworICAgIFJFTEVBU0VfQVNTRVJUKHZtLmF0b21p
Y1N0cmluZ1RhYmxlKCkgPT0gVGhyZWFkOjpjdXJyZW50KCkuYXRvbWljU3RyaW5nVGFibGUoKSk7
CisKKyAgICBWYXJpYWJsZUVudmlyb25tZW50IHZhcmlhYmxlc1VuZGVyVERaOworICAgIEpTUGFy
c2VyU3RyaWN0TW9kZSBzdHJpY3RNb2RlID0gSlNQYXJzZXJTdHJpY3RNb2RlOjpTdHJpY3Q7Cisg
ICAgSlNQYXJzZXJTY3JpcHRNb2RlIHNjcmlwdE1vZGUgPSBKU1BhcnNlclNjcmlwdE1vZGU6Ok1v
ZHVsZTsKKyAgICBEZWJ1Z2dlck1vZGUgZGVidWdnZXJNb2RlID0gRGVidWdnZXJPZmY7CisgICAg
RXZhbENvbnRleHRUeXBlIGV2YWxDb250ZXh0VHlwZSA9IEV2YWxDb250ZXh0VHlwZTo6Tm9uZTsK
KworICAgIFVubGlua2VkQ29kZUJsb2NrKiB1bmxpbmtlZENvZGVCbG9jayA9IHJlY3Vyc2l2ZWx5
R2VuZXJhdGVVbmxpbmtlZENvZGVCbG9jazxVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2s+
KHZtLCBzb3VyY2UsIHN0cmljdE1vZGUsIHNjcmlwdE1vZGUsIGRlYnVnZ2VyTW9kZSwgZXJyb3Is
IGV2YWxDb250ZXh0VHlwZSwgJnZhcmlhYmxlc1VuZGVyVERaKTsKKyAgICByZXR1cm4gc2VyaWFs
aXplQnl0ZWNvZGUodm0sIHVubGlua2VkQ29kZUJsb2NrLCBzb3VyY2UsIFNvdXJjZUNvZGVUeXBl
OjpNb2R1bGVUeXBlLCBzdHJpY3RNb2RlLCBzY3JpcHRNb2RlLCBkZWJ1Z2dlck1vZGUpOworfQor
CiBKU1ZhbHVlIGV2YWx1YXRlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU291cmNlQ29kZSYgc291
cmNlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgTmFrZWRQdHI8RXhjZXB0aW9uPiYgcmV0dXJuZWRFeGNl
cHRpb24pCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbXBsZXRpb24uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0NvbXBsZXRpb24uaAppbmRleCA4MjdlNjFmM2M2MWQwY2I3YmJlNzVhNjEyNzcx
MjRmYjBkYTcyYWFlLi4zMDcyODg5YmI0Y2FhMzZiNTVkNDNmMWM2NmE2MzJkNjQxMzgxOTZjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21wbGV0aW9uLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tcGxldGlvbi5oCkBAIC0yOCw2ICsy
OCw3IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCitjbGFzcyBDYWNoZWRCeXRlY29kZTsKIGNsYXNz
IEV4Y2VwdGlvbjsKIGNsYXNzIEV4ZWNTdGF0ZTsKIGNsYXNzIEpTT2JqZWN0OwpAQCAtNDEsNiAr
NDIsOSBAQCBKU19FWFBPUlRfUFJJVkFURSBib29sIGNoZWNrU3ludGF4KFZNJiwgY29uc3QgU291
cmNlQ29kZSYsIFBhcnNlckVycm9yJik7CiBKU19FWFBPUlRfUFJJVkFURSBib29sIGNoZWNrU3lu
dGF4KEV4ZWNTdGF0ZSosIGNvbnN0IFNvdXJjZUNvZGUmLCBKU1ZhbHVlKiBleGNlcHRpb24gPSAw
KTsKIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgY2hlY2tNb2R1bGVTeW50YXgoRXhlY1N0YXRlKiwg
Y29uc3QgU291cmNlQ29kZSYsIFBhcnNlckVycm9yJik7CiAKK0pTX0VYUE9SVF9QUklWQVRFIENh
Y2hlZEJ5dGVjb2RlIGdlbmVyYXRlQnl0ZWNvZGUoVk0mLCBjb25zdCBTb3VyY2VDb2RlJiwgUGFy
c2VyRXJyb3ImKTsKK0pTX0VYUE9SVF9QUklWQVRFIENhY2hlZEJ5dGVjb2RlIGdlbmVyYXRlTW9k
dWxlQnl0ZWNvZGUoVk0mLCBjb25zdCBTb3VyY2VDb2RlJiwgUGFyc2VyRXJyb3ImKTsKKwogSlNf
RVhQT1JUX1BSSVZBVEUgSlNWYWx1ZSBldmFsdWF0ZShFeGVjU3RhdGUqLCBjb25zdCBTb3VyY2VD
b2RlJiwgSlNWYWx1ZSB0aGlzVmFsdWUsIE5ha2VkUHRyPEV4Y2VwdGlvbj4mIHJldHVybmVkRXhj
ZXB0aW9uKTsKIGlubGluZSBKU1ZhbHVlIGV2YWx1YXRlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3Qg
U291cmNlQ29kZSYgc291cmNlQ29kZSwgSlNWYWx1ZSB0aGlzVmFsdWUgPSBKU1ZhbHVlKCkpCiB7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwCmluZGV4IDhiMDVjYTgy
MzAwYmM3OWEyMjlhYzYwZjg2YmI0NTY2N2VlZmRhNWUuLjg0ZDczMjZhMjRmYmU1YTVkZTAzYzVj
MzhkYmYyYmRlZGYyMzYwY2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL09wdGlvbnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlv
bnMuY3BwCkBAIC01MjcsOSArNTI3LDYgQEAgc3RhdGljIHZvaWQgcmVjb21wdXRlRGVwZW5kZW50
T3B0aW9ucygpCiAKICAgICBpZiAoIU9wdGlvbnM6OnVzZUNvZGVDYWNoZSgpKQogICAgICAgICBP
cHRpb25zOjpkaXNrQ2FjaGVQYXRoKCkgPSBudWxscHRyOwotCi0gICAgaWYgKCFPcHRpb25zOjpk
aXNrQ2FjaGVQYXRoKCkpCi0gICAgICAgIE9wdGlvbnM6OmZvcmNlRGlza0NhY2hlKCkgPSBmYWxz
ZTsKIH0KIAogdm9pZCBPcHRpb25zOjppbml0aWFsaXplKCkK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>360158</attachid>
            <date>2019-01-25 13:49:37 -0800</date>
            <delta_ts>2019-01-25 14:31:18 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-193401-20190125224920.patch</filename>
            <type>text/plain</type>
            <size>51938</size>
            <attacher name="Tadeu Zagallo">tzagallo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQwNDk5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBm
ZWU5MjQ4NDFmZDFlODY2OTQ1NDcwZDUxMDgzNDM4YmM2YzRlNWM3Li42NjMxYzNiMTQ2OWY0ZjI4
MTFiZjZhYzIzNDE5MDY2MTE3YjEzMzhjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw4MiBAQAorMjAxOS0wMS0yNSAgVGFkZXUgWmFnYWxsbyAgPHR6YWdhbGxvQGFwcGxlLmNv
bT4KKworICAgICAgICBBZGQgQVBJIHRvIGdlbmVyYXRlIGFuZCBjb25zdW1lIGNhY2hlZCBieXRl
Y29kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkz
NDAxCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS80NzUxNDA5OT4KKworICAgICAgICBSZXZpZXdl
ZCBieSBLZWl0aCBNaWxsZXIuCisKKyAgICAgICAgQWRkIHRoZSBgZ2VuZXJhdGVCeXRlY29kZWAg
YW5kIGBnZW5lcmF0ZU1vZHVsZUJ5dGVjb2RlYCBmdW5jdGlvbnMgdG8KKyAgICAgICAgZ2VuZXJh
dGUgc2VyaWFsaXplZCBieXRlY29kZSBmb3IgYSBnaXZlbiBgU291cmNlQ29kZWAuIFRoZXNlIGZ1
bmN0aW9ucworICAgICAgICB3aWxsIGVhZ2VybHkgZ2VuZXJhdGUgY29kZSBmb3IgYWxsIHRoZSBu
ZXN0ZWQgZnVuY3Rpb25zLgorCisgICAgICAgIEFkZGl0aW9uYWxseSwgdXBkYXRlIHRoZSBBUEkg
bWV0aG9kcyBpbiBKU1NjcmlwdCB0byBnZW5lcmF0ZSBhbmQgdXNlIHRoZQorICAgICAgICBieXRl
Y29kZSB3aGVuIHRoZSBieXRlY29kZUNhY2hlIHBhdGggaXMgcHJvdmlkZWQuCisKKyAgICAgICAg
KiBBUEkvSlNBUElHbG9iYWxPYmplY3QubW06CisgICAgICAgIChKU0M6OkpTQVBJR2xvYmFsT2Jq
ZWN0Ojptb2R1bGVMb2FkZXJGZXRjaCk6CisgICAgICAgICogQVBJL0pTQ29udGV4dC5tbToKKyAg
ICAgICAgKC1bSlNDb250ZXh0IHdyYXBwZXJNYXBdKToKKyAgICAgICAgKiBBUEkvSlNDb250ZXh0
SW50ZXJuYWwuaDoKKyAgICAgICAgKiBBUEkvSlNTY3JpcHQubW06CisgICAgICAgICgrW0pTU2Ny
aXB0IHNjcmlwdFdpdGhTb3VyY2U6aW5WaXJ0dWFsTWFjaGluZTpdKToKKyAgICAgICAgKCtbSlNT
Y3JpcHQgc2NyaXB0RnJvbUFTQ0lJRmlsZTppblZpcnR1YWxNYWNoaW5lOndpdGhDb2RlU2lnbmlu
ZzphbmRCeXRlY29kZUNhY2hlOl0pOgorICAgICAgICAoLVtKU1NjcmlwdCBkZWFsbG9jXSk6Cisg
ICAgICAgICgtW0pTU2NyaXB0IHJlYWRDYWNoZV0pOgorICAgICAgICAoLVtKU1NjcmlwdCB3cml0
ZUNhY2hlXSk6CisgICAgICAgICgtW0pTU2NyaXB0IGhhc2hdKToKKyAgICAgICAgKC1bSlNTY3Jp
cHQgc291cmNlXSk6CisgICAgICAgICgtW0pTU2NyaXB0IGNhY2hlZEJ5dGVjb2RlXSk6CisgICAg
ICAgICgtW0pTU2NyaXB0IGpzU291cmNlQ29kZTpdKToKKyAgICAgICAgKiBBUEkvSlNTY3JpcHRJ
bnRlcm5hbC5oOgorICAgICAgICAqIEFQSS9KU1NjcmlwdFNvdXJjZVByb3ZpZGVyLmg6IENvcGll
ZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNTY3JpcHRJbnRlcm5hbC5oLgorICAg
ICAgICAoSlNTY3JpcHRTb3VyY2VQcm92aWRlcjo6Y3JlYXRlKToKKyAgICAgICAgKEpTU2NyaXB0
U291cmNlUHJvdmlkZXI6OkpTU2NyaXB0U291cmNlUHJvdmlkZXIpOgorICAgICAgICAqIEFQSS9K
U1NjcmlwdFNvdXJjZVByb3ZpZGVyLm1tOiBDb3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL0pTU2NyaXB0SW50ZXJuYWwuaC4KKyAgICAgICAgKEpTU2NyaXB0U291cmNlUHJvdmlk
ZXI6Omhhc2ggY29uc3QpOgorICAgICAgICAoSlNTY3JpcHRTb3VyY2VQcm92aWRlcjo6c291cmNl
IGNvbnN0KToKKyAgICAgICAgKEpTU2NyaXB0U291cmNlUHJvdmlkZXI6OmNhY2hlZEJ5dGVjb2Rl
IGNvbnN0KToKKyAgICAgICAgKiBBUEkvSlNWaXJ0dWFsTWFjaGluZS5tbToKKyAgICAgICAgKC1b
SlNWaXJ0dWFsTWFjaGluZSB2bV0pOgorICAgICAgICAqIEFQSS9KU1ZpcnR1YWxNYWNoaW5lSW50
ZXJuYWwuaDoKKyAgICAgICAgKiBBUEkvdGVzdHMvdGVzdGFwaS5tbToKKyAgICAgICAgKHRlc3RC
eXRlY29kZUNhY2hlKToKKyAgICAgICAgKC1bSlNDb250ZXh0RmlsZUxvYWRlckRlbGVnYXRlIGNv
bnRleHQ6ZmV0Y2hNb2R1bGVGb3JJZGVudGlmaWVyOndpdGhSZXNvbHZlSGFuZGxlcjphbmRSZWpl
Y3RIYW5kbGVyOl0pOgorICAgICAgICAodGVzdE9iamVjdGl2ZUNBUEkpOgorICAgICAgICAqIEph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogU291cmNl
c0NvY29hLnR4dDoKKyAgICAgICAgKiBieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJs
ZS5jcHA6CisgICAgICAgIChKU0M6OlVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOjp1bmxpbmtl
ZENvZGVCbG9ja0Zvcik6CisgICAgICAgICogYnl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkV4ZWN1
dGFibGUuaDoKKyAgICAgICAgKiBwYXJzZXIvU291cmNlQ29kZUtleS5oOgorICAgICAgICAoSlND
OjpTb3VyY2VDb2RlS2V5Ojpzb3VyY2UgY29uc3QpOgorICAgICAgICAqIHBhcnNlci9Tb3VyY2VQ
cm92aWRlci5oOgorICAgICAgICAoSlNDOjpDYWNoZWRCeXRlY29kZTo6Q2FjaGVkQnl0ZWNvZGUp
OgorICAgICAgICAoSlNDOjpDYWNoZWRCeXRlY29kZTo6b3BlcmF0b3I9KToKKyAgICAgICAgKEpT
Qzo6Q2FjaGVkQnl0ZWNvZGU6OmRhdGEgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWNoZWRCeXRl
Y29kZTo6c2l6ZSBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZEJ5dGVjb2RlOjpvd25lZCBj
b25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZEJ5dGVjb2RlOjp+Q2FjaGVkQnl0ZWNvZGUpOgor
ICAgICAgICAoSlNDOjpDYWNoZWRCeXRlY29kZTo6ZnJlZURhdGFJZk93bmVkKToKKyAgICAgICAg
KEpTQzo6U291cmNlUHJvdmlkZXI6OmNhY2hlZEJ5dGVjb2RlIGNvbnN0KToKKyAgICAgICAgKiBw
YXJzZXIvVW5saW5rZWRTb3VyY2VDb2RlLmg6CisgICAgICAgIChKU0M6OlVubGlua2VkU291cmNl
Q29kZTo6cHJvdmlkZXIgY29uc3QpOgorICAgICAgICAqIHJ1bnRpbWUvQ29kZUNhY2hlLmNwcDoK
KyAgICAgICAgKEpTQzo6Z2VuZXJhdGVVbmxpbmtlZENvZGVCbG9ja0ZvckZ1bmN0aW9ucyk6Cisg
ICAgICAgIChKU0M6OndyaXRlQ29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6c2VyaWFsaXplQnl0
ZWNvZGUpOgorICAgICAgICAqIHJ1bnRpbWUvQ29kZUNhY2hlLmg6CisgICAgICAgIChKU0M6OkNv
ZGVDYWNoZU1hcDo6ZmV0Y2hGcm9tRGlza0ltcGwpOgorICAgICAgICAoSlNDOjpDb2RlQ2FjaGVN
YXA6OmZpbmRDYWNoZUFuZFVwZGF0ZUFnZSk6CisgICAgICAgIChKU0M6OmdlbmVyYXRlVW5saW5r
ZWRDb2RlQmxvY2tJbXBsKToKKyAgICAgICAgKEpTQzo6Z2VuZXJhdGVVbmxpbmtlZENvZGVCbG9j
ayk6CisgICAgICAgICogcnVudGltZS9Db21wbGV0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6Z2Vu
ZXJhdGVCeXRlY29kZSk6CisgICAgICAgIChKU0M6OmdlbmVyYXRlTW9kdWxlQnl0ZWNvZGUpOgor
ICAgICAgICAqIHJ1bnRpbWUvQ29tcGxldGlvbi5oOgorICAgICAgICAqIHJ1bnRpbWUvT3B0aW9u
cy5jcHA6CisgICAgICAgIChKU0M6OnJlY29tcHV0ZURlcGVuZGVudE9wdGlvbnMpOgorCiAyMDE5
LTAxLTI1ICBKb24gRGF2aXMgIDxqb25kQGFwcGxlLmNvbT4KIAogICAgICAgICBVcGRhdGUgSmF2
YVNjcmlwdENvcmUgZmVhdHVyZSBzdGF0dXMgZW50cmllcy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvSlNBUElHbG9iYWxPYmplY3QubW0gYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQVBJL0pTQVBJR2xvYmFsT2JqZWN0Lm1tCmluZGV4IDNjYTRhYjkyNTFmNzFhNTVlZDI0
ODRhYzExNzZjMzkwNmU5OTJjYzUuLmQ1YzIzNjVkMDg0NzE0OGM4MGY4OTkyYmMwNDQzNTJmMzFi
Y2JmMGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElHbG9iYWxP
YmplY3QubW0KKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0FQSUdsb2JhbE9iamVj
dC5tbQpAQCAtMTY0LDcgKzE2NCw2IEBAIEpTSW50ZXJuYWxQcm9taXNlKiBKU0FQSUdsb2JhbE9i
amVjdDo6bW9kdWxlTG9hZGVyRmV0Y2goSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iCiAgICAgYXV0
byBkZWZlcnJlZFByb21pc2UgPSBTdHJvbmc8SlNJbnRlcm5hbFByb21pc2VEZWZlcnJlZD4odm0s
IGRlZmVycmVkKTsKICAgICBhdXRvIHN0cm9uZ0tleSA9IFN0cm9uZzxKU1N0cmluZz4odm0sIGpz
U2VjdXJlQ2FzdDxKU1N0cmluZyo+KHZtLCBrZXkpKTsKICAgICBhdXRvKiByZXNvbHZlID0gSlNO
YXRpdmVTdGRGdW5jdGlvbjo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIDEsICJyZXNvbHZlIiwg
Wz1dIChFeGVjU3RhdGUqIGV4ZWMpIHsKLSAgICAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAg
ICAgICAgLy8gVGhpcyBjYXB0dXJlcyB0aGUgZ2xvYmFsT2JqZWN0IGJ1dCB0aGF0J3Mgb2sgYmVj
YXVzZSBvdXIgc3RydWN0dXJlIGtlZXBzIGl0IGFsaXZlIGFueXdheS4KICAgICAgICAgSlNDb250
ZXh0ICpjb250ZXh0ID0gW0pTQ29udGV4dCBjb250ZXh0V2l0aEpTR2xvYmFsQ29udGV4dFJlZjp0
b0dsb2JhbFJlZihnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSldOwogICAgICAgICBpZCBzY3Jp
cHQgPSB2YWx1ZVRvT2JqZWN0KGNvbnRleHQsIHRvUmVmKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDAp
KSk7CkBAIC0xNzYsOCArMTc1LDcgQEAgSlNJbnRlcm5hbFByb21pc2UqIEpTQVBJR2xvYmFsT2Jq
ZWN0Ojptb2R1bGVMb2FkZXJGZXRjaChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2IKICAgICAgICAg
ICAgIHJldHVybiBlbmNvZGVkSlNVbmRlZmluZWQoKTsKICAgICAgICAgfQogCi0gICAgICAgIGNv
bnN0IFN0cmluZyYgc291cmNlID0gZ2V0SlNTY3JpcHRTb3VyY2VDb2RlKHN0YXRpY19jYXN0PEpT
U2NyaXB0ICo+KHNjcmlwdCkpOwotICAgICAgICBhcmdzLmFwcGVuZChKU1NvdXJjZUNvZGU6OmNy
ZWF0ZSh2bSwgbWFrZVNvdXJjZShzb3VyY2UsIFNvdXJjZU9yaWdpbihtb2R1bGVLZXkuc3RyaW5n
KCkpLCBVUkwoeyB9LCBtb2R1bGVLZXkuc3RyaW5nKCkpLCBUZXh0UG9zaXRpb24oKSwgSlNDOjpT
b3VyY2VQcm92aWRlclNvdXJjZVR5cGU6Ok1vZHVsZSkpKTsKKyAgICAgICAgYXJncy5hcHBlbmQo
W3N0YXRpY19jYXN0PEpTU2NyaXB0ICo+KHNjcmlwdCkganNTb3VyY2VDb2RlOm1vZHVsZUtleV0p
OwogICAgICAgICBjYWxsKGV4ZWMsIGRlZmVycmVkUHJvbWlzZS0+SlNQcm9taXNlRGVmZXJyZWQ6
OnJlc29sdmUoKSwgYXJncywgIlRoaXMgc2hvdWxkIG5ldmVyIGJlIHNlZW4uLi4iKTsKICAgICAg
ICAgcmV0dXJuIGVuY29kZWRKU1VuZGVmaW5lZCgpOwogICAgIH0pOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHQubW0gYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL0pTQ29udGV4dC5tbQppbmRleCAzYzc3NmQ0ZDkwMGVlMTczMzM2MmFjMjlmNjI0ZjQ0
NGQ1NDVlN2I0Li41MThmYjg3MjM5ODQ4MzQxMmZmYTFmYmRkY2ZkOWZmYWUxNjhhZmYwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dC5tbQorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dC5tbQpAQCAtMzQsNyArMzQsNiBAQAogI2lt
cG9ydCAiSlNHbG9iYWxPYmplY3QuaCIKICNpbXBvcnQgIkpTSW50ZXJuYWxQcm9taXNlLmgiCiAj
aW1wb3J0ICJKU01vZHVsZUxvYWRlci5oIgotI2ltcG9ydCAiSlNTY3JpcHRJbnRlcm5hbC5oIgog
I2ltcG9ydCAiSlNWYWx1ZUludGVybmFsLmgiCiAjaW1wb3J0ICJKU1ZpcnR1YWxNYWNoaW5lSW50
ZXJuYWwuaCIKICNpbXBvcnQgIkpTV3JhcHBlck1hcC5oIgpAQCAtMTM1LDExICsxMzQsNiBAQCAt
IChKU1ZhbHVlICopZXhjZXB0aW9uCiAgICAgcmV0dXJuIFtKU1ZhbHVlIHZhbHVlV2l0aEpTVmFs
dWVSZWY6dG9SZWYobV9leGNlcHRpb24uZ2V0KCkpIGluQ29udGV4dDpzZWxmXTsKIH0KIAotLSAo
SlNXcmFwcGVyTWFwICopd3JhcHBlck1hcAotewotICAgIHJldHVybiB0b0pTKG1fY29udGV4dCkt
PmxleGljYWxHbG9iYWxPYmplY3QoKS0+d3JhcHBlck1hcCgpOwotfQotCiAtIChKU1ZhbHVlICop
Z2xvYmFsT2JqZWN0CiB7CiAgICAgcmV0dXJuIFtKU1ZhbHVlIHZhbHVlV2l0aEpTVmFsdWVSZWY6
SlNDb250ZXh0R2V0R2xvYmFsT2JqZWN0KG1fY29udGV4dCkgaW5Db250ZXh0OnNlbGZdOwpAQCAt
MzMyLDYgKzMyNiwxMSBAQCAtIChKU1ZhbHVlICopd3JhcHBlckZvck9iakNPYmplY3Q6KGlkKW9i
amVjdAogICAgIHJldHVybiBbW3NlbGYgd3JhcHBlck1hcF0ganNXcmFwcGVyRm9yT2JqZWN0Om9i
amVjdCBpbkNvbnRleHQ6c2VsZl07CiB9CiAKKy0gKEpTV3JhcHBlck1hcCAqKXdyYXBwZXJNYXAK
K3sKKyAgICByZXR1cm4gdG9KUyhtX2NvbnRleHQpLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPndy
YXBwZXJNYXAoKTsKK30KKwogLSAoSlNWYWx1ZSAqKXdyYXBwZXJGb3JKU09iamVjdDooSlNWYWx1
ZVJlZil2YWx1ZQogewogICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2tlcih0b0pTKG1fY29udGV4
dCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHRJbnRl
cm5hbC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHRJbnRlcm5hbC5oCmlu
ZGV4IGFiNDU4MjlmMDAyN2U0ZmFkNmJmYmQxYWZjNDAyYjNhMWJlODViNTguLjk1OGM0NzlmNDFj
ZTg0MTNmYzY5NGFjMTIzZDc5NGViM2Q3ZjRkNGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvSlNDb250ZXh0SW50ZXJuYWwuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL0pTQ29udGV4dEludGVybmFsLmgKQEAgLTUxLDYgKzUxLDcgQEAgc3RydWN0IENhbGxi
YWNrRGF0YSB7CiAtICh2b2lkKWJlZ2luQ2FsbGJhY2tXaXRoRGF0YTooQ2FsbGJhY2tEYXRhICop
Y2FsbGJhY2tEYXRhIGNhbGxlZVZhbHVlOihKU1ZhbHVlUmVmKWNhbGxlZVZhbHVlIHRoaXNWYWx1
ZTooSlNWYWx1ZVJlZil0aGlzVmFsdWUgYXJndW1lbnRDb3VudDooc2l6ZV90KWFyZ3VtZW50Q291
bnQgYXJndW1lbnRzOihjb25zdCBKU1ZhbHVlUmVmICopYXJndW1lbnRzOwogLSAodm9pZCllbmRD
YWxsYmFja1dpdGhEYXRhOihDYWxsYmFja0RhdGEgKiljYWxsYmFja0RhdGE7CiAKKy0gKEpTV3Jh
cHBlck1hcCAqKXdyYXBwZXJNYXA7CiAtIChKU1ZhbHVlICopd3JhcHBlckZvck9iakNPYmplY3Q6
KGlkKW9iamVjdDsKIC0gKEpTVmFsdWUgKil3cmFwcGVyRm9ySlNPYmplY3Q6KEpTVmFsdWVSZWYp
dmFsdWU7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNTY3JpcHQu
bW0gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTU2NyaXB0Lm1tCmluZGV4IGY3ZTkzOWFm
MDk4YmY1ZDBmNTNlZDFlOGIzMmQ3NWE0ZDgyM2ZkN2YuLmZlZjQ0NmRlZGY4NmIyNDUwYWE3Zjgz
ZjJiYTNlZTcwYTg4NTJmZTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkv
SlNTY3JpcHQubW0KKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1NjcmlwdC5tbQpA
QCAtMjcsMjEgKzI3LDMyIEBACiAjaW1wb3J0ICJKU1NjcmlwdEludGVybmFsLmgiCiAKICNpbXBv
cnQgIkFQSUNhc3QuaCIKKyNpbXBvcnQgIklkZW50aWZpZXIuaCIKICNpbXBvcnQgIkpTQ29udGV4
dEludGVybmFsLmgiCisjaW1wb3J0ICJKU1NjcmlwdFNvdXJjZVByb3ZpZGVyLmgiCisjaW1wb3J0
ICJKU1NvdXJjZUNvZGUuaCIKICNpbXBvcnQgIkpTVmFsdWVQcml2YXRlLmgiCisjaW1wb3J0ICJK
U1ZpcnR1YWxNYWNoaW5lSW50ZXJuYWwuaCIKKyNpbXBvcnQgIlBhcnNlckVycm9yLmgiCiAjaW1w
b3J0ICJTeW1ib2wuaCIKKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgogCiAjaWYgSlNDX09CSkNfQVBJ
X0VOQUJMRUQKIAogQGltcGxlbWVudGF0aW9uIEpTU2NyaXB0IHsKKyAgICBfX3dlYWsgSlNWaXJ0
dWFsTWFjaGluZSogbV92aXJ0dWFsTWFjaGluZTsKICAgICBTdHJpbmcgbV9zb3VyY2U7CisgICAg
TlNVUkwqIG1fY2FjaGVQYXRoOworICAgIEpTQzo6Q2FjaGVkQnl0ZWNvZGUgbV9jYWNoZWRCeXRl
Y29kZTsKKyAgICBKU0M6OlN0cm9uZzxKU0M6OkpTU291cmNlQ29kZT4gbV9qc1NvdXJjZUNvZGU7
CisgICAgVW5pcXVlZFN0cmluZ0ltcGwqIG1fbW9kdWxlS2V5OwogfQogCiArIChpbnN0YW5jZXR5
cGUpc2NyaXB0V2l0aFNvdXJjZTooTlNTdHJpbmcgKilzb3VyY2UgaW5WaXJ0dWFsTWFjaGluZToo
SlNWaXJ0dWFsTWFjaGluZSAqKXZtCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHZtKTsKLSAgICBKU1Nj
cmlwdCAqcmVzdWx0ID0gW1tKU1NjcmlwdCBhbGxvY10gaW5pdF07CisgICAgSlNTY3JpcHQgKnJl
c3VsdCA9IFtbW0pTU2NyaXB0IGFsbG9jXSBpbml0XSBhdXRvcmVsZWFzZV07CiAgICAgcmVzdWx0
LT5tX3NvdXJjZSA9IHNvdXJjZTsKKyAgICByZXN1bHQtPm1fdmlydHVhbE1hY2hpbmUgPSB2bTsK
ICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC04MSw5ICs5Miw2IEBAICsgKGluc3RhbmNldHlw
ZSlzY3JpcHRGcm9tQVNDSUlGaWxlOihOU1VSTCAqKWZpbGVQYXRoIGluVmlydHVhbE1hY2hpbmU6
KEpTVmlydHVhCiB7CiAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGNoZWNrIGNvZGVTaWduaW5n
LgogICAgIFVOVVNFRF9QQVJBTShjb2RlU2lnbmluZ1BhdGgpOwotICAgIC8vIEZJWE1FOiBUaGlz
IHNob3VsZCBhY3R1YWxseSBjYWNoZSBieXRlY29kZS4KLSAgICBVTlVTRURfUEFSQU0oY2FjaGVQ
YXRoKTsKLSAgICBVTlVTRURfUEFSQU0odm0pOwogICAgIFVSTCBmaWxlUGF0aFVSTChbZmlsZVBh
dGggYWJzb2x1dGVVUkxdKTsKICAgICBpZiAoIWZpbGVQYXRoVVJMLmlzTG9jYWxGaWxlKCkpCiAg
ICAgICAgIHJldHVybiBuaWw7CkBAIC05NSw4ICsxMDMsMTEgQEAgKyAoaW5zdGFuY2V0eXBlKXNj
cmlwdEZyb21BU0NJSUZpbGU6KE5TVVJMICopZmlsZVBhdGggaW5WaXJ0dWFsTWFjaGluZTooSlNW
aXJ0dWEKICAgICBpZiAoIWNoYXJhY3RlcnNBcmVBbGxBU0NJSShidWZmZXIuZGF0YSgpLCBidWZm
ZXIuc2l6ZSgpKSkKICAgICAgICAgcmV0dXJuIG5pbDsKIAotICAgIEpTU2NyaXB0ICpyZXN1bHQg
PSBbW0pTU2NyaXB0IGFsbG9jXSBpbml0XTsKKyAgICBKU1NjcmlwdCAqcmVzdWx0ID0gW1tbSlNT
Y3JpcHQgYWxsb2NdIGluaXRdIGF1dG9yZWxlYXNlXTsKKyAgICByZXN1bHQtPm1fdmlydHVhbE1h
Y2hpbmUgPSB2bTsKICAgICByZXN1bHQtPm1fc291cmNlID0gU3RyaW5nOjpmcm9tVVRGOFdpdGhM
YXRpbjFGYWxsYmFjayhidWZmZXIuZGF0YSgpLCBidWZmZXIuc2l6ZSgpKTsKKyAgICByZXN1bHQt
Pm1fY2FjaGVQYXRoID0gY2FjaGVQYXRoOworICAgIFtyZXN1bHQgcmVhZENhY2hlXTsKICAgICBy
ZXR1cm4gcmVzdWx0OwogfQogCkBAIC0xMDUsNyArMTE2LDk1IEBAICsgKGluc3RhbmNldHlwZSlz
Y3JpcHRGcm9tVVRGOEZpbGU6KE5TVVJMICopZmlsZVBhdGggaW5WaXJ0dWFsTWFjaGluZTooSlNW
aXJ0dWFsCiAgICAgcmV0dXJuIFtKU1NjcmlwdCBzY3JpcHRGcm9tQVNDSUlGaWxlOmZpbGVQYXRo
IGluVmlydHVhbE1hY2hpbmU6dm0gd2l0aENvZGVTaWduaW5nOmNvZGVTaWduaW5nUGF0aCBhbmRC
eXRlY29kZUNhY2hlOmNhY2hlUGF0aF07CiB9CiAKLWNvbnN0IFN0cmluZyYgZ2V0SlNTY3JpcHRT
b3VyY2VDb2RlKEpTU2NyaXB0ICptb2R1bGUpIHsgcmV0dXJuIG1vZHVsZS0+bV9zb3VyY2U7IH0K
Ky0gKHZvaWQpZGVhbGxvYworeworICAgIGlmIChtX2NhY2hlZEJ5dGVjb2RlLnNpemUoKSAmJiAh
bV9jYWNoZWRCeXRlY29kZS5vd25lZCgpKQorICAgICAgICBtdW5tYXAoY29uc3RfY2FzdDx2b2lk
Kj4obV9jYWNoZWRCeXRlY29kZS5kYXRhKCkpLCBtX2NhY2hlZEJ5dGVjb2RlLnNpemUoKSk7Cisg
ICAgW3N1cGVyIGRlYWxsb2NdOworfQorCistICh2b2lkKXJlYWRDYWNoZQoreworICAgIGlmICgh
bV9jYWNoZVBhdGgpCisgICAgICAgIHJldHVybjsKKworICAgIGludCBmZCA9IG9wZW4obV9jYWNo
ZVBhdGgucGF0aC5VVEY4U3RyaW5nLCBPX1JET05MWSk7CisgICAgaWYgKGZkID09IC0xKQorICAg
ICAgICByZXR1cm47CisKKyAgICBpbnQgcmMgPSBmbG9jayhmZCwgTE9DS19TSCB8IExPQ0tfTkIp
OworICAgIGlmIChyYykgeworICAgICAgICBjbG9zZShmZCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBzdHJ1Y3Qgc3RhdCBzYjsKKyAgICBpbnQgcmVzID0gZnN0YXQoZmQsICZzYik7
CisgICAgc2l6ZV90IHNpemUgPSBzdGF0aWNfY2FzdDxzaXplX3Q+KHNiLnN0X3NpemUpOworICAg
IGlmIChyZXMgfHwgIXNpemUpIHsKKyAgICAgICAgY2xvc2UoZmQpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgdm9pZCogYnVmZmVyID0gbW1hcChudWxscHRyLCBzaXplLCBQUk9UX1JF
QUQsIE1BUF9QUklWQVRFLCBmZCwgMCk7CisgICAgY2xvc2UoZmQpOworCisgICAgbV9jYWNoZWRC
eXRlY29kZSA9IEpTQzo6Q2FjaGVkQnl0ZWNvZGUgeyBidWZmZXIsIHNpemUgfTsKK30KKworLSAo
dm9pZCl3cml0ZUNhY2hlCit7CisgICAgaWYgKG1fY2FjaGVkQnl0ZWNvZGUuc2l6ZSgpIHx8ICFt
X2NhY2hlUGF0aCkKKyAgICAgICAgcmV0dXJuOworCisgICAgSlNDOjpQYXJzZXJFcnJvciBlcnJv
cjsKKyAgICBtX2NhY2hlZEJ5dGVjb2RlID0gSlNDOjpnZW5lcmF0ZU1vZHVsZUJ5dGVjb2RlKG1f
dmlydHVhbE1hY2hpbmUudm0sIG1fanNTb3VyY2VDb2RlLT5zb3VyY2VDb2RlKCksIGVycm9yKTsK
KyAgICBpZiAoZXJyb3IuaXNWYWxpZCgpKQorICAgICAgICByZXR1cm47CisgICAgaW50IGZkID0g
b3BlbihtX2NhY2hlUGF0aC5wYXRoLlVURjhTdHJpbmcsIE9fQ1JFQVQgfCBPX1dST05MWSwgMDY2
Nik7CisgICAgaWYgKGZkID09IC0xKQorICAgICAgICByZXR1cm47CisgICAgaW50IHJjID0gZmxv
Y2soZmQsIExPQ0tfRVggfCBMT0NLX05CKTsKKyAgICBpZiAoIXJjKQorICAgICAgICB3cml0ZShm
ZCwgbV9jYWNoZWRCeXRlY29kZS5kYXRhKCksIG1fY2FjaGVkQnl0ZWNvZGUuc2l6ZSgpKTsKKyAg
ICBjbG9zZShmZCk7Cit9CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIEpTU2NyaXB0KEludGVy
bmFsKQorCistICh1bnNpZ25lZCloYXNoCit7CisgICAgcmV0dXJuIG1fc291cmNlLmhhc2goKTsK
K30KKworLSAoY29uc3QgU3RyaW5nJilzb3VyY2UKK3sKKyAgICByZXR1cm4gbV9zb3VyY2U7Cit9
CisKKy0gKGNvbnN0IEpTQzo6Q2FjaGVkQnl0ZWNvZGUqKWNhY2hlZEJ5dGVjb2RlCit7CisgICAg
cmV0dXJuICZtX2NhY2hlZEJ5dGVjb2RlOworfQorCistIChKU0M6OkpTU291cmNlQ29kZSopanNT
b3VyY2VDb2RlOihjb25zdCBKU0M6OklkZW50aWZpZXImKW1vZHVsZUtleQoreworICAgIGlmICht
X2pzU291cmNlQ29kZSkgeworICAgICAgICBBU1NFUlQobW9kdWxlS2V5LmltcGwoKSA9PSBtX21v
ZHVsZUtleSk7CisgICAgICAgIHJldHVybiBtX2pzU291cmNlQ29kZS5nZXQoKTsKKyAgICB9CisK
KyAgICBKU0M6OlZNJiB2bSA9IG1fdmlydHVhbE1hY2hpbmUudm07CisgICAgVGV4dFBvc2l0aW9u
IHN0YXJ0UG9zaXRpb24geyB9OworICAgIFJlZjxKU1NjcmlwdFNvdXJjZVByb3ZpZGVyPiBzb3Vy
Y2VQcm92aWRlciA9IEpTU2NyaXB0U291cmNlUHJvdmlkZXI6OmNyZWF0ZShzZWxmLCBKU0M6OlNv
dXJjZU9yaWdpbihtb2R1bGVLZXkuc3RyaW5nKCkpLCBVUkwoeyB9LCBtb2R1bGVLZXkuc3RyaW5n
KCkpLCBUZXh0UG9zaXRpb24oKSwgSlNDOjpTb3VyY2VQcm92aWRlclNvdXJjZVR5cGU6Ok1vZHVs
ZSk7CisgICAgSlNDOjpTb3VyY2VDb2RlIHNvdXJjZUNvZGUoV1RGTW92ZShzb3VyY2VQcm92aWRl
ciksIHN0YXJ0UG9zaXRpb24ubV9saW5lLm9uZUJhc2VkSW50KCksIHN0YXJ0UG9zaXRpb24ubV9j
b2x1bW4ub25lQmFzZWRJbnQoKSk7CisgICAgSlNDOjpKU1NvdXJjZUNvZGUqIGpzU291cmNlQ29k
ZSA9IEpTQzo6SlNTb3VyY2VDb2RlOjpjcmVhdGUodm0sIFdURk1vdmUoc291cmNlQ29kZSkpOwor
ICAgIG1fanNTb3VyY2VDb2RlLnNldCh2bSwganNTb3VyY2VDb2RlKTsKKyAgICBbc2VsZiB3cml0
ZUNhY2hlXTsKKyAgICByZXR1cm4ganNTb3VyY2VDb2RlOworfQogCiBAZW5kCiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNTY3JpcHRJbnRlcm5hbC5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL0FQSS9KU1NjcmlwdEludGVybmFsLmgKaW5kZXggYTk3M2VkMWFkNGEx
ZmM1ZmRmMzVjZjk0ODIzMDE3OTVhZTFmMmViMy4uNjZhNzVlMjZlNTJhNzZiZDJkMDg4OTgxZmNh
MGI4YzFjOTQ1NTQwMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1Nj
cmlwdEludGVybmFsLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1NjcmlwdElu
dGVybmFsLmgKQEAgLTI4LDYgKzI4LDI5IEBACiAjaW1wb3J0ICJKU1NjcmlwdC5oIgogI2ltcG9y
dCAiU291cmNlQ29kZS5oIgogCi1PQkpDX0NMQVNTIEpTU2NyaXB0OworI2lmIEpTQ19PQkpDX0FQ
SV9FTkFCTEVECiAKLWNvbnN0IFN0cmluZyYgZ2V0SlNTY3JpcHRTb3VyY2VDb2RlKEpTU2NyaXB0
ICopOworTlNfQVNTVU1FX05PTk5VTExfQkVHSU4KKworbmFtZXNwYWNlIEpTQyB7CitjbGFzcyBD
YWNoZWRCeXRlY29kZTsKK2NsYXNzIElkZW50aWZpZXI7CitjbGFzcyBKU1NvdXJjZUNvZGU7Cit9
OworCituYW1lc3BhY2UgV1RGIHsKK2NsYXNzIFN0cmluZzsKK307CisKK0BpbnRlcmZhY2UgSlNT
Y3JpcHQoSW50ZXJuYWwpCisKKy0gKHVuc2lnbmVkKWhhc2g7CistIChjb25zdCBXVEY6OlN0cmlu
ZyYpc291cmNlOworLSAoY29uc3QgSlNDOjpDYWNoZWRCeXRlY29kZSopY2FjaGVkQnl0ZWNvZGU7
CistIChKU0M6OkpTU291cmNlQ29kZSopanNTb3VyY2VDb2RlOihjb25zdCBKU0M6OklkZW50aWZp
ZXImKW1vZHVsZUtleTsKKworQGVuZAorCitOU19BU1NVTUVfTk9OTlVMTF9FTkQKKworI2VuZGlm
IC8vIEpTQ19PQkpDX0FQSV9FTkFCTEVECmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL0pTU2NyaXB0U291cmNlUHJvdmlkZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9B
UEkvSlNTY3JpcHRTb3VyY2VQcm92aWRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNlODQzMWRlNmYyOTU4Mjll
MjhmYzU4YWE3NTU5NmFiNWU3ODc3OWIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvQVBJL0pTU2NyaXB0U291cmNlUHJvdmlkZXIuaApAQCAtMCwwICsxLDU0IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmIEpTQ19PQkpD
X0FQSV9FTkFCTEVECisKKyNpbXBvcnQgIlNvdXJjZVByb3ZpZGVyLmgiCisKK0BjbGFzcyBKU1Nj
cmlwdDsKKworY2xhc3MgSlNTY3JpcHRTb3VyY2VQcm92aWRlciA6IHB1YmxpYyBKU0M6OlNvdXJj
ZVByb3ZpZGVyIHsKK3B1YmxpYzoKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmdzPgorICAg
IHN0YXRpYyBSZWY8SlNTY3JpcHRTb3VyY2VQcm92aWRlcj4gY3JlYXRlKEpTU2NyaXB0ICpzY3Jp
cHQsIEFyZ3MmJi4uLiBhcmdzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
SlNTY3JpcHRTb3VyY2VQcm92aWRlcihzY3JpcHQsIHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4u
LikpOworICAgIH0KKworICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdCBvdmVycmlkZTsKKyAgICBT
dHJpbmdWaWV3IHNvdXJjZSgpIGNvbnN0IG92ZXJyaWRlOworICAgIGNvbnN0IEpTQzo6Q2FjaGVk
Qnl0ZWNvZGUqIGNhY2hlZEJ5dGVjb2RlKCkgY29uc3Qgb3ZlcnJpZGU7CisKK3ByaXZhdGU6Cisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJncz4KKyAgICBKU1NjcmlwdFNvdXJjZVByb3ZpZGVy
KEpTU2NyaXB0ICpzY3JpcHQsIEFyZ3MmJi4uLiBhcmdzKQorICAgICAgICA6IFNvdXJjZVByb3Zp
ZGVyKHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLikKKyAgICAgICAgLCBtX3NjcmlwdChzY3Jp
cHQpCisgICAgeyB9CisKKyAgICBSZXRhaW5QdHI8SlNTY3JpcHQ+IG1fc2NyaXB0OworfTsKKwor
I2VuZGlmIC8vIEpTQ19PQkpDX0FQSV9FTkFCTEVECmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvQVBJL0pTU2NyaXB0U291cmNlUHJvdmlkZXIubW0gYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQVBJL0pTU2NyaXB0U291cmNlUHJvdmlkZXIubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTUzNmE4Yjkz
YTk3ZGJlZjRiZGE3ZTkwYzA3ODk4MjcxMDg1NGU0YQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNTY3JpcHRTb3VyY2VQcm92aWRlci5tbQpAQCAtMCwwICsx
LDQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lt
cG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJKU1NjcmlwdFNvdXJjZVByb3ZpZGVyLmgiCisKKyNp
ZiBKU0NfT0JKQ19BUElfRU5BQkxFRAorCisjaW1wb3J0ICJKU1NjcmlwdEludGVybmFsLmgiCisK
K3Vuc2lnbmVkIEpTU2NyaXB0U291cmNlUHJvdmlkZXI6Omhhc2goKSBjb25zdAoreworICAgIHJl
dHVybiBbbV9zY3JpcHQuZ2V0KCkgaGFzaF07Cit9CisKK1N0cmluZ1ZpZXcgSlNTY3JpcHRTb3Vy
Y2VQcm92aWRlcjo6c291cmNlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gW21fc2NyaXB0LmdldCgp
IHNvdXJjZV07Cit9CisKK2NvbnN0IEpTQzo6Q2FjaGVkQnl0ZWNvZGUqIEpTU2NyaXB0U291cmNl
UHJvdmlkZXI6OmNhY2hlZEJ5dGVjb2RlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gW21fc2NyaXB0
LmdldCgpIGNhY2hlZEJ5dGVjb2RlXTsKK30KKworI2VuZGlmIC8vIEpTQ19PQkpDX0FQSV9FTkFC
TEVECmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmlydHVhbE1hY2hp
bmUubW0gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmlydHVhbE1hY2hpbmUubW0KaW5k
ZXggNWU3OTVmMDE2ZjA1YTM4MWJkY2YxMDQwZjMzNWQwODk1Mzk1ZGVhYS4uNTA0ZDMzY2Y1Zjdj
YjUzZjE2ZGQzNzc5M2ZjNjFjOTE1ZTIzYmZlNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL0FQSS9KU1ZpcnR1YWxNYWNoaW5lLm1tCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9BUEkvSlNWaXJ0dWFsTWFjaGluZS5tbQpAQCAtMjk3LDYgKzI5NywxMSBAQCArIChOU1VJbnRl
Z2VyKXNldE51bWJlck9mRlRMQ29tcGlsZXJUaHJlYWRzOihOU1VJbnRlZ2VyKW51bWJlck9mVGhy
ZWFkcwogCiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCiAKKy0gKEpTQzo6Vk0mKXZtCit7Cisg
ICAgcmV0dXJuICp0b0pTKG1fZ3JvdXApOworfQorCiBAZW5kCiAKIHN0YXRpYyB2b2lkIHNjYW5F
eHRlcm5hbE9iamVjdEdyYXBoKEpTQzo6Vk0mIHZtLCBKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9y
LCB2b2lkKiByb290LCBib29sIGxvY2tBY3F1aXJlZCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9BUEkvSlNWaXJ0dWFsTWFjaGluZUludGVybmFsLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvQVBJL0pTVmlydHVhbE1hY2hpbmVJbnRlcm5hbC5oCmluZGV4IDkxMjJlZDQ5YTRl
YTFhYTQ5ZWM2NjdmZWY2NjI3ZmM0M2I3NzcxNmQuLjliMGJmNmJlZWIwN2FkZDA5YzYzZThiMTQw
MzRhODhjZTgzZDZlZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNW
aXJ0dWFsTWFjaGluZUludGVybmFsLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9K
U1ZpcnR1YWxNYWNoaW5lSW50ZXJuYWwuaApAQCAtNDYsNiArNDYsOCBAQCBKU0NvbnRleHRHcm91
cFJlZiBnZXRHcm91cEZyb21WaXJ0dWFsTWFjaGluZShKU1ZpcnR1YWxNYWNoaW5lICopOwogCiAt
IChKU0NvbnRleHQgKiljb250ZXh0Rm9yR2xvYmFsQ29udGV4dFJlZjooSlNHbG9iYWxDb250ZXh0
UmVmKWdsb2JhbENvbnRleHQ7CiAtICh2b2lkKWFkZENvbnRleHQ6KEpTQ29udGV4dCAqKXdyYXBw
ZXIgZm9yR2xvYmFsQ29udGV4dFJlZjooSlNHbG9iYWxDb250ZXh0UmVmKWdsb2JhbENvbnRleHQ7
CistIChKU0M6OlZNJil2bTsKKwogQGVuZAogCiAjZW5kaWYgLy8gZGVmaW5lZChfX09CSkNfXykK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVzdGFwaS5tbSBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVzdGFwaS5tbQppbmRleCAxM2JlYjY5
ZjJiY2Q3MjE5NGM3MGFmNTY4Zjk2MTJkNjFlZjZhY2MzLi4yMjg5ZTZlMzQ4OWFlMmY2Y2RjZWJm
NTY1NjJhMzExM2Q2OTY4NTViIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L3Rlc3RzL3Rlc3RhcGkubW0KKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy90
ZXN0YXBpLm1tCkBAIC0xOTgwLDYgKzE5ODAsNjggQEAgc3RhdGljIHZvaWQgdGVzdEltcG9ydE1v
ZHVsZVR3aWNlKCkKICAgICB9CiB9CiAKK3N0YXRpYyB2b2lkIHRlc3RCeXRlY29kZUNhY2hlKCkK
K3sKKyAgICBAYXV0b3JlbGVhc2Vwb29sIHsKKyAgICAgICAgTlNVUkwqIHRlbXBEaXJlY3Rvcnkg
PSBbTlNVUkwgZmlsZVVSTFdpdGhQYXRoOk5TVGVtcG9yYXJ5RGlyZWN0b3J5KCkgaXNEaXJlY3Rv
cnk6WUVTXTsKKworICAgICAgICBOU1N0cmluZyogZm9vU291cmNlID0gQCJpbXBvcnQgeyBuIH0g
ZnJvbSBcIi4uL2Zvby5qc1wiOyBleHBvcnQgbGV0IGZvbyA9IG47IjsKKyAgICAgICAgTlNTdHJp
bmcqIGJhclNvdXJjZSA9IEAiaW1wb3J0IFwib3RoZXJEaXJlY3RvcnkvYmF6LmpzXCI7IGV4cG9y
dCBsZXQgbiA9IG51bGw7IjsKKyAgICAgICAgTlNTdHJpbmcqIGJhelNvdXJjZSA9IEAiaW1wb3J0
IHsgZm9vIH0gZnJvbSBcIi4uL2RpcmVjdG9yeS9iYXIuanNcIjsgZ2xvYmFsVGhpcy5yYW4gPSBu
dWxsOyBleHBvcnQgbGV0IGV4cCA9IGZvbzsiOworCisgICAgICAgIE5TVVJMKiBmb29QYXRoID0g
W3RlbXBEaXJlY3RvcnkgVVJMQnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50OkAiZm9vLmpzIl07Cisg
ICAgICAgIE5TVVJMKiBiYXJQYXRoID0gW3RlbXBEaXJlY3RvcnkgVVJMQnlBcHBlbmRpbmdQYXRo
Q29tcG9uZW50OkAiYmFyLmpzIl07CisgICAgICAgIE5TVVJMKiBiYXpQYXRoID0gW3RlbXBEaXJl
Y3RvcnkgVVJMQnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50OkAiYmF6LmpzIl07CisKKyAgICAgICAg
TlNVUkwqIGZvb0NhY2hlUGF0aCA9IFt0ZW1wRGlyZWN0b3J5IFVSTEJ5QXBwZW5kaW5nUGF0aENv
bXBvbmVudDpAImZvby5qcy5jYWNoZSJdOworICAgICAgICBOU1VSTCogYmFyQ2FjaGVQYXRoID0g
W3RlbXBEaXJlY3RvcnkgVVJMQnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50OkAiYmFyLmpzLmNhY2hl
Il07CisgICAgICAgIE5TVVJMKiBiYXpDYWNoZVBhdGggPSBbdGVtcERpcmVjdG9yeSBVUkxCeUFw
cGVuZGluZ1BhdGhDb21wb25lbnQ6QCJiYXouanMuY2FjaGUiXTsKKworICAgICAgICBbZm9vU291
cmNlIHdyaXRlVG9VUkw6Zm9vUGF0aCBhdG9taWNhbGx5Ok5PIGVuY29kaW5nOk5TQVNDSUlTdHJp
bmdFbmNvZGluZyBlcnJvcjpuaWxdOworICAgICAgICBbYmFyU291cmNlIHdyaXRlVG9VUkw6YmFy
UGF0aCBhdG9taWNhbGx5Ok5PIGVuY29kaW5nOk5TQVNDSUlTdHJpbmdFbmNvZGluZyBlcnJvcjpu
aWxdOworICAgICAgICBbYmF6U291cmNlIHdyaXRlVG9VUkw6YmF6UGF0aCBhdG9taWNhbGx5Ok5P
IGVuY29kaW5nOk5TQVNDSUlTdHJpbmdFbmNvZGluZyBlcnJvcjpuaWxdOworCisgICAgICAgIF9f
YmxvY2sgYm9vbCBmb3JjZURpc2tDYWNoZSA9IGZhbHNlOworICAgICAgICBhdXRvIGJsb2NrID0g
XihKU0NvbnRleHQgKmNvbnRleHQsIEpTVmFsdWUgKmlkZW50aWZpZXIsIEpTVmFsdWUgKnJlc29s
dmUsIEpTVmFsdWUgKnJlamVjdCkgeworICAgICAgICAgICAgSlNDOjpPcHRpb25zOjpmb3JjZURp
c2tDYWNoZSgpID0gZm9yY2VEaXNrQ2FjaGU7CisgICAgICAgICAgICBpZiAoW2lkZW50aWZpZXIg
aXNFcXVhbFRvT2JqZWN0OkAiZmlsZTovLy9kaXJlY3RvcnkvYmFyLmpzIl0pCisgICAgICAgICAg
ICAgICAgW3Jlc29sdmUgY2FsbFdpdGhBcmd1bWVudHM6QFtbSlNTY3JpcHQgc2NyaXB0RnJvbUFT
Q0lJRmlsZTpmb29QYXRoIGluVmlydHVhbE1hY2hpbmU6Y29udGV4dC52aXJ0dWFsTWFjaGluZSB3
aXRoQ29kZVNpZ25pbmc6bmlsIGFuZEJ5dGVjb2RlQ2FjaGU6Zm9vQ2FjaGVQYXRoXV1dOworICAg
ICAgICAgICAgZWxzZSBpZiAoW2lkZW50aWZpZXIgaXNFcXVhbFRvT2JqZWN0OkAiZmlsZTovLy9m
b28uanMiXSkKKyAgICAgICAgICAgICAgICBbcmVzb2x2ZSBjYWxsV2l0aEFyZ3VtZW50czpAW1tK
U1NjcmlwdCBzY3JpcHRGcm9tQVNDSUlGaWxlOmJhclBhdGggaW5WaXJ0dWFsTWFjaGluZTpjb250
ZXh0LnZpcnR1YWxNYWNoaW5lIHdpdGhDb2RlU2lnbmluZzpuaWwgYW5kQnl0ZWNvZGVDYWNoZTpi
YXJDYWNoZVBhdGhdXV07CisgICAgICAgICAgICBlbHNlIGlmIChbaWRlbnRpZmllciBpc0VxdWFs
VG9PYmplY3Q6QCJmaWxlOi8vL290aGVyRGlyZWN0b3J5L2Jhei5qcyJdKQorICAgICAgICAgICAg
ICAgIFtyZXNvbHZlIGNhbGxXaXRoQXJndW1lbnRzOkBbW0pTU2NyaXB0IHNjcmlwdEZyb21BU0NJ
SUZpbGU6YmF6UGF0aCBpblZpcnR1YWxNYWNoaW5lOmNvbnRleHQudmlydHVhbE1hY2hpbmUgd2l0
aENvZGVTaWduaW5nOm5pbCBhbmRCeXRlY29kZUNhY2hlOmJhekNhY2hlUGF0aF1dXTsKKyAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBbcmVqZWN0IGNhbGxXaXRoQXJndW1lbnRzOkBb
W0pTVmFsdWUgdmFsdWVXaXRoTmV3RXJyb3JGcm9tTWVzc2FnZTpAIldlaXJkIHBhdGgiIGluQ29u
dGV4dDpjb250ZXh0XV1dOworICAgICAgICB9OworCisgICAgICAgIEBhdXRvcmVsZWFzZXBvb2wg
eworICAgICAgICAgICAgYXV0byAqY29udGV4dCA9IFtKU0NvbnRleHRGZXRjaERlbGVnYXRlIGNv
bnRleHRXaXRoQmxvY2tGb3JGZXRjaDpibG9ja107CisgICAgICAgICAgICBjb250ZXh0Lm1vZHVs
ZUxvYWRlckRlbGVnYXRlID0gY29udGV4dDsKKyAgICAgICAgICAgIEpTVmFsdWUgKnByb21pc2Ug
PSBbY29udGV4dCBldmFsdWF0ZVNjcmlwdDpAImltcG9ydCgnLi4vb3RoZXJEaXJlY3RvcnkvYmF6
LmpzJyk7IiB3aXRoU291cmNlVVJMOltOU1VSTCBmaWxlVVJMV2l0aFBhdGg6QCIvZGlyZWN0b3J5
IiBpc0RpcmVjdG9yeTpZRVNdXTsKKyAgICAgICAgICAgIEpTVmFsdWUgKm51bGwgPSBbSlNWYWx1
ZSB2YWx1ZVdpdGhOdWxsSW5Db250ZXh0OmNvbnRleHRdOworICAgICAgICAgICAgY2hlY2tNb2R1
bGVDb2RlUmFuKGNvbnRleHQsIHByb21pc2UsIG51bGwpOworICAgICAgICB9CisKKyAgICAgICAg
QGF1dG9yZWxlYXNlcG9vbCB7CisgICAgICAgICAgICBmb3JjZURpc2tDYWNoZSA9IHRydWU7Cisg
ICAgICAgICAgICBhdXRvICpjb250ZXh0ID0gW0pTQ29udGV4dEZldGNoRGVsZWdhdGUgY29udGV4
dFdpdGhCbG9ja0ZvckZldGNoOmJsb2NrXTsKKyAgICAgICAgICAgIGNvbnRleHQubW9kdWxlTG9h
ZGVyRGVsZWdhdGUgPSBjb250ZXh0OworICAgICAgICAgICAgSlNWYWx1ZSAqcHJvbWlzZSA9IFtj
b250ZXh0IGV2YWx1YXRlU2NyaXB0OkAiaW1wb3J0KCcuLi9vdGhlckRpcmVjdG9yeS9iYXouanMn
KTsiIHdpdGhTb3VyY2VVUkw6W05TVVJMIGZpbGVVUkxXaXRoUGF0aDpAIi9kaXJlY3RvcnkiIGlz
RGlyZWN0b3J5OllFU11dOworICAgICAgICAgICAgSlNWYWx1ZSAqbnVsbCA9IFtKU1ZhbHVlIHZh
bHVlV2l0aE51bGxJbkNvbnRleHQ6Y29udGV4dF07CisgICAgICAgICAgICBjaGVja01vZHVsZUNv
ZGVSYW4oY29udGV4dCwgcHJvbWlzZSwgbnVsbCk7CisgICAgICAgICAgICBKU0M6Ok9wdGlvbnM6
OmZvcmNlRGlza0NhY2hlKCkgPSBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIE5TRmlsZU1h
bmFnZXIqIGZpbGVNYW5hZ2VyID0gW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdOworICAg
ICAgICBbZmlsZU1hbmFnZXIgcmVtb3ZlSXRlbUF0VVJMOmZvb1BhdGggZXJyb3I6bmlsXTsKKyAg
ICAgICAgW2ZpbGVNYW5hZ2VyIHJlbW92ZUl0ZW1BdFVSTDpiYXJQYXRoIGVycm9yOm5pbF07Cisg
ICAgICAgIFtmaWxlTWFuYWdlciByZW1vdmVJdGVtQXRVUkw6YmF6UGF0aCBlcnJvcjpuaWxdOwor
ICAgICAgICBbZmlsZU1hbmFnZXIgcmVtb3ZlSXRlbUF0VVJMOmZvb0NhY2hlUGF0aCBlcnJvcjpu
aWxdOworICAgICAgICBbZmlsZU1hbmFnZXIgcmVtb3ZlSXRlbUF0VVJMOmJhckNhY2hlUGF0aCBl
cnJvcjpuaWxdOworICAgICAgICBbZmlsZU1hbmFnZXIgcmVtb3ZlSXRlbUF0VVJMOmJhekNhY2hl
UGF0aCBlcnJvcjpuaWxdOworICAgIH0KK30KKwogQGludGVyZmFjZSBKU0NvbnRleHRGaWxlTG9h
ZGVyRGVsZWdhdGUgOiBKU0NvbnRleHQgPEpTTW9kdWxlTG9hZGVyRGVsZWdhdGU+CiAKICsgKGlu
c3RhbmNldHlwZSluZXdDb250ZXh0OwpAQCAtMjAxNyw3ICsyMDc5LDcgQEAgc3RhdGljIE5TVVJM
ICpyZXNvbHZlUGF0aFRvU2NyaXB0cygpCiAtICh2b2lkKWNvbnRleHQ6KEpTQ29udGV4dCAqKWNv
bnRleHQgZmV0Y2hNb2R1bGVGb3JJZGVudGlmaWVyOihKU1ZhbHVlICopaWRlbnRpZmllciB3aXRo
UmVzb2x2ZUhhbmRsZXI6KEpTVmFsdWUgKilyZXNvbHZlIGFuZFJlamVjdEhhbmRsZXI6KEpTVmFs
dWUgKilyZWplY3QKIHsKICAgICBOU1VSTCAqZmlsZVBhdGggPSBbTlNVUkwgVVJMV2l0aFN0cmlu
ZzpbaWRlbnRpZmllciB0b1N0cmluZ11dOwotICAgIGF1dG8gKnNjcmlwdCA9IFtKU1NjcmlwdCBz
Y3JpcHRGcm9tQVNDSUlGaWxlOmZpbGVQYXRoIGluVmlydHVhbE1hY2hpbmU6W2NvbnRleHQgdmly
dHVhbE1hY2hpbmVdIHdpdGhDb2RlU2lnbmluZzpuaWwgYW5kQnl0ZWNvZGVDYWNoZTpuaWxdOwor
ICAgIGF1dG8gKnNjcmlwdCA9IFtKU1NjcmlwdCBzY3JpcHRGcm9tQVNDSUlGaWxlOmZpbGVQYXRo
IGluVmlydHVhbE1hY2hpbmU6Y29udGV4dC52aXJ0dWFsTWFjaGluZSB3aXRoQ29kZVNpZ25pbmc6
bmlsIGFuZEJ5dGVjb2RlQ2FjaGU6bmlsXTsKICAgICBpZiAoc2NyaXB0KQogICAgICAgICBbcmVz
b2x2ZSBjYWxsV2l0aEFyZ3VtZW50czpAW3NjcmlwdF1dOwogICAgIGVsc2UKQEAgLTIwNDksNiAr
MjExMSw3IEBAIHZvaWQgdGVzdE9iamVjdGl2ZUNBUEkoKQogICAgIHRlc3RGZXRjaFdpdGhUd29D
eWNsZSgpOwogICAgIHRlc3RGZXRjaFdpdGhUaHJlZUN5Y2xlKCk7CiAgICAgdGVzdEltcG9ydE1v
ZHVsZVR3aWNlKCk7CisgICAgdGVzdEJ5dGVjb2RlQ2FjaGUoKTsKIAogICAgIHRlc3RMb2FkZXJS
ZWplY3RzTmlsU2NyaXB0VVJMKCk7CiAgICAgdGVzdExvYWRlclJlamVjdHNGYWlsZWRGZXRjaCgp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA0N2E3YzczYzBiMWFhODU1NTRiY2Vk
MzQzMzlkNThmOTM5NzlmNWFiLi40ZWI1OWFjNTYwYTY4NzhiZTRmNTJjNDQzNzYxNGRmNmYxMmQx
M2YyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtODE0LDYgKzgxNCw3IEBACiAJ
CTE0QzI1QjlFMjE2RUEzNkEwMDEzNzc2NCAvKiBJbnN0cnVjdGlvblN0cmVhbS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTRDQzNCQTIyMTM4QTIzODAw
MkQ1OEI2IC8qIEluc3RydWN0aW9uU3RyZWFtLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTRDQTk1OEIxNkFCNTBERTAwOTM4QTA2IC8qIFN0YXRp
Y1Byb3BlcnR5QW5hbHl6ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDE0Q0E5NThBMTZBQjUwREUwMDkzOEEwNiAvKiBTdGF0aWNQcm9wZXJ0eUFuYWx5
emVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
MTRDQTk1OEQxNkFCNTBGQTAwOTM4QTA2IC8qIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNENBOTU4QzE2QUI1
MEZBMDA5MzhBMDYgLyogT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkxNEQwMUE3NzIxRkIzNTFGMDBCQzU0
RTkgLyogSlNTY3JpcHRTb3VyY2VQcm92aWRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMTREMDFBNzYyMUZCMzUwMzAwQkM1NEU5IC8qIEpTU2NyaXB0
U291cmNlUHJvdmlkZXIuaCAqLzsgfTsKIAkJMTREMkYzREIxMzlGNEJFMjAwNDkxMDMxIC8qIE1h
cmtlZFNwYWNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAxNEQyRjNEOTEzOUY0QkUyMDA0OTEwMzEgLyogTWFya2VkU3BhY2UuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxNERGMDREQTE2QjM5OTZEMDAx
NkE1MTMgLyogU3RhdGljUHJvcGVydHlBbmFseXNpcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTRERjA0RDkxNkIzOTk2RDAwMTZBNTEzIC8qIFN0YXRp
Y1Byb3BlcnR5QW5hbHlzaXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQkxNEU4NEY5RjE0RUUxQUNDMDBENkQ1RDQgLyogV2Vha0Jsb2NrLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNEU4NEY5QTE0RUUx
QUNDMDBENkQ1RDQgLyogV2Vha0Jsb2NrLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTMyMzgsNiArMzIzOSw4IEBACiAJCTE0Q0E5NThDMTZBQjUw
RkEwMDkzOEEwNiAvKiBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkxNENDM0JBMTIxMzhBMjM4MDAyRDU4QjYgLyogSW5zdHJ1Y3Rpb25T
dHJlYW0uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5zdHJ1Y3Rp
b25TdHJlYW0uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNENDM0JBMjIxMzhB
MjM4MDAyRDU4QjYgLyogSW5zdHJ1Y3Rpb25TdHJlYW0uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSW5zdHJ1Y3Rpb25TdHJlYW0uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMTREMDFBNzUyMUZCMzUwMzAwQkM1NEU5IC8qIEpTU2NyaXB0U291cmNlUHJvdmlkZXIu
bW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBKU1NjcmlwdFNvdXJjZVByb3ZpZGVyLm1tOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxNEQwMUE3NjIxRkIzNTAzMDBCQzU0RTkgLyogSlNT
Y3JpcHRTb3VyY2VQcm92aWRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1NjcmlwdFNvdXJjZVByb3Zp
ZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0RDJGM0Q5MTM5RjRCRTIwMDQ5
MTAzMSAvKiBNYXJrZWRTcGFjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBN
YXJrZWRTcGFjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNEQ3OTI2NDBEQUEw
M0ZCMDAxQTlGMDUgLyogQ0xvb3BTdGFjay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBDTG9vcFN0YWNrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0RDg1Nzc0
MEE0Njk2QzgwMDMyMTQ2QyAvKiB0ZXN0YXBpLmpzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5qYXZh
c2NyaXB0OyBuYW1lID0gdGVzdGFwaS5qczsgcGF0aCA9IEFQSS90ZXN0cy90ZXN0YXBpLmpzOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTk5Myw2ICs1OTk2LDggQEAKIAkJCQk1M0VF
MDFCNzIxOEY3RUZGMDBBRDFGOEQgLyogSlNTY3JpcHRJbnRlcm5hbC5oICovLAogCQkJCUE3QzBD
NEFBMTY3QzA4Q0QwMDE3MDExRCAvKiBKU1NjcmlwdFJlZi5jcHAgKi8sCiAJCQkJQTdDMEM0QUIx
NjdDMDhDRDAwMTcwMTFEIC8qIEpTU2NyaXB0UmVmUHJpdmF0ZS5oICovLAorCQkJCTE0RDAxQTc2
MjFGQjM1MDMwMEJDNTRFOSAvKiBKU1NjcmlwdFNvdXJjZVByb3ZpZGVyLmggKi8sCisJCQkJMTRE
MDFBNzUyMUZCMzUwMzAwQkM1NEU5IC8qIEpTU2NyaXB0U291cmNlUHJvdmlkZXIubW0gKi8sCiAJ
CQkJMTQ4MkI3NEMwQTQzMDMyODAwNTE3Q0ZDIC8qIEpTU3RyaW5nUmVmLmNwcCAqLywKIAkJCQkx
NDgyQjc0QjBBNDMwMzI4MDA1MTdDRkMgLyogSlNTdHJpbmdSZWYuaCAqLywKIAkJCQkxNDZBQUIz
NzBCNjZBOTQ0MDBFNTVGMTYgLyogSlNTdHJpbmdSZWZDRi5jcHAgKi8sCkBAIC05Nzc1LDYgKzk3
ODAsNyBAQAogCQkJCTE0RjcyNTY2MTRFRTI2NUUwMEIxNjUyQiAvKiBXZWFrSGFuZGxlT3duZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCTE0RTg0RkEyMTRFRTFBQ0MwMEQ2RDVENCAvKiBXZWFrSW1w
bC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTRCRTdEMzMxNzEzNUNGNDAwRDE4MDdBIC8qIFdlYWtJ
bmxpbmVzLmggaW4gSGVhZGVycyAqLywKKwkJCQkxNEQwMUE3NzIxRkIzNTFGMDBCQzU0RTkgLyog
SlNTY3JpcHRTb3VyY2VQcm92aWRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdDQTNBRTQxN0RB
NDFBRTAwNjUzOEFGIC8qIFdlYWtNYXBDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
RTNBMzJCQzcxRkM4MzE0NzAwN0Q3RTc2IC8qIFdlYWtNYXBJbXBsLmggaW4gSGVhZGVycyAqLywK
IAkJCQlFMzkzQUREODFGRTcwMkQwMDAyMkQ2ODEgLyogV2Vha01hcEltcGxJbmxpbmVzLmggaW4g
SGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzQ29j
b2EudHh0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXNDb2NvYS50eHQKaW5kZXggYWY2
ZjllZjVmYzMzZTAxZjFkZWY2NzNmMTI2NzliMWQ3Nzc3NmI0ZC4uNzYwYWEwYzQyNWJkZWFjMTE4
ZWQwYzVlNWE2Yzc5ODM4Y2MxZmU5OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L1NvdXJjZXNDb2NvYS50eHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXNDb2Nv
YS50eHQKQEAgLTI0LDYgKzI0LDcgQEAKIEFQSS9KU0FQSUdsb2JhbE9iamVjdC5tbQogQVBJL0pT
QVBJV3JhcHBlck9iamVjdC5tbQogQVBJL0pTU2NyaXB0Lm1tCitBUEkvSlNTY3JpcHRTb3VyY2VQ
cm92aWRlci5tbQogQVBJL0pTQ29udGV4dC5tbQogQVBJL0pTTWFuYWdlZFZhbHVlLm1tCiBBUEkv
SlNSZW1vdGVJbnNwZWN0b3IuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmNwcAppbmRleCBiMTE0
ZDM5ZTkwMjI2YTUxMGIyNDU4NTIxZDk1YzYzZjc1MDMzZWViLi5lOGRjMTk4MWYwZTYzYzI2MDE2
MDlkMjQwYjlhMzc5NzE5Y2FhNTg5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5jcHAKQEAgLTE5
NCw2ICsxOTQsMTYgQEAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIFVubGlua2VkRnVuY3Rp
b25FeGVjdXRhYmxlOjpmcm9tR2xvYmFsQ29kZSgKICAgICByZXR1cm4gZXhlY3V0YWJsZTsKIH0K
IAorVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayogVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6
OnVubGlua2VkQ29kZUJsb2NrRm9yKENvZGVTcGVjaWFsaXphdGlvbktpbmQgc3BlY2lhbGl6YXRp
b25LaW5kKQoreworICAgIHN3aXRjaCAoc3BlY2lhbGl6YXRpb25LaW5kKSB7CisgICAgY2FzZSBD
b2RlRm9yQ2FsbDoKKyAgICAgICAgcmV0dXJuIG1fdW5saW5rZWRDb2RlQmxvY2tGb3JDYWxsLmdl
dCgpOworICAgIGNhc2UgQ29kZUZvckNvbnN0cnVjdDoKKyAgICAgICAgcmV0dXJuIG1fdW5saW5r
ZWRDb2RlQmxvY2tGb3JDb25zdHJ1Y3QuZ2V0KCk7CisgICAgfQorfQorCiBVbmxpbmtlZEZ1bmN0
aW9uQ29kZUJsb2NrKiBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6dW5saW5rZWRDb2RlQmxv
Y2tGb3IoCiAgICAgVk0mIHZtLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIENvZGVTcGVjaWFs
aXphdGlvbktpbmQgc3BlY2lhbGl6YXRpb25LaW5kLCAKICAgICBEZWJ1Z2dlck1vZGUgZGVidWdn
ZXJNb2RlLCBQYXJzZXJFcnJvciYgZXJyb3IsIFNvdXJjZVBhcnNlTW9kZSBwYXJzZU1vZGUpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRGdW5jdGlv
bkV4ZWN1dGFibGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEZ1
bmN0aW9uRXhlY3V0YWJsZS5oCmluZGV4IDY1MjZjZDkwY2JiYWE2OWUyNmNjMGExYzBhYzc3YjY4
YzE5NWZiNTYuLmQ2MzdkNjhhZjVhZDYzMTU1OGVhOTNiM2I4NmI5ZGEwNGNiODMxNzUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhl
Y3V0YWJsZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEZ1
bmN0aW9uRXhlY3V0YWJsZS5oCkBAIC0xMDQsNiArMTA0LDggQEAgcHVibGljOgogICAgIHVuc2ln
bmVkIHR5cGVQcm9maWxpbmdFbmRPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX3R5cGVQcm9maWxp
bmdFbmRPZmZzZXQ7IH0KICAgICB2b2lkIHNldEludmFsaWRUeXBlUHJvZmlsaW5nT2Zmc2V0cygp
OwogCisgICAgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayogdW5saW5rZWRDb2RlQmxvY2tGb3Io
Q29kZVNwZWNpYWxpemF0aW9uS2luZCk7CisKICAgICBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2Nr
KiB1bmxpbmtlZENvZGVCbG9ja0ZvcigKICAgICAgICAgVk0mLCBjb25zdCBTb3VyY2VDb2RlJiwg
Q29kZVNwZWNpYWxpemF0aW9uS2luZCwgRGVidWdnZXJNb2RlLAogICAgICAgICBQYXJzZXJFcnJv
ciYsIFNvdXJjZVBhcnNlTW9kZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cGFyc2VyL1NvdXJjZUNvZGVLZXkuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU291
cmNlQ29kZUtleS5oCmluZGV4IGNjM2FiZTIxZmFmNTcxNGJmOTk4MDFkZmI5ZWVkNDI4MzQ4MWYx
ODkuLmJjMDJmMTI5YWJmMTg1YmU3NTU4ZmJkNjM1NGQ1OTNmODZjOGJiNzAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU291cmNlQ29kZUtleS5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU291cmNlQ29kZUtleS5oCkBAIC0xMDAsNiArMTAwLDgg
QEAgcHVibGljOgogCiAgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0IHsgcmV0dXJuIG1faGFzaDsg
fQogCisgICAgY29uc3QgVW5saW5rZWRTb3VyY2VDb2RlJiBzb3VyY2UoKSBjb25zdCB7IHJldHVy
biBtX3NvdXJjZUNvZGU7IH0KKwogICAgIHNpemVfdCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBt
X3NvdXJjZUNvZGUubGVuZ3RoKCk7IH0KIAogICAgIGJvb2wgaXNOdWxsKCkgY29uc3QgeyByZXR1
cm4gbV9zb3VyY2VDb2RlLmlzTnVsbCgpOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcGFyc2VyL1NvdXJjZVByb3ZpZGVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFy
c2VyL1NvdXJjZVByb3ZpZGVyLmgKaW5kZXggMDlhZDE2ODM0YjBhZmI3YmU5ZjMxNGFmYzJmMjUw
YWQ4MmVkYjVlNS4uYTVlODI1Yjc3MjcxMTU0MjlmMGE3NGQyZTUxOTBiMmFkZGIzZjU5ZSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Tb3VyY2VQcm92aWRlci5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU291cmNlUHJvdmlkZXIuaApAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDksIDIwMTIsIDIwMTMgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTkg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC00Miw2ICs0Miw2NiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgV2ViQXNz
ZW1ibHksCiAgICAgfTsKIAorICAgIGNsYXNzIENhY2hlZEJ5dGVjb2RlIHsKKyAgICAgICAgV1RG
X01BS0VfTk9OQ09QWUFCTEUoQ2FjaGVkQnl0ZWNvZGUpOworCisgICAgcHVibGljOgorICAgICAg
ICBDYWNoZWRCeXRlY29kZSgpCisgICAgICAgICAgICA6IENhY2hlZEJ5dGVjb2RlKG51bGxwdHIs
IDApCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIENhY2hlZEJ5dGVjb2RlKGNvbnN0
IHZvaWQqIGRhdGEsIHNpemVfdCBzaXplKQorICAgICAgICAgICAgOiBtX293bmVkKGZhbHNlKQor
ICAgICAgICAgICAgLCBtX3NpemUoc2l6ZSkKKyAgICAgICAgICAgICwgbV9kYXRhKGRhdGEpCisg
ICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIENhY2hlZEJ5dGVjb2RlKE1hbGxvY1B0cjx1
aW50OF90PiYmIGRhdGEsIHNpemVfdCBzaXplKQorICAgICAgICAgICAgOiBtX293bmVkKHRydWUp
CisgICAgICAgICAgICAsIG1fc2l6ZShzaXplKQorICAgICAgICAgICAgLCBtX2RhdGEoZGF0YS5s
ZWFrUHRyKCkpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIENhY2hlZEJ5dGVjb2Rl
KENhY2hlZEJ5dGVjb2RlJiYgb3RoZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgICp0aGlzID0g
V1RGTW92ZShvdGhlcik7CisgICAgICAgIH0KKworICAgICAgICBDYWNoZWRCeXRlY29kZSYgb3Bl
cmF0b3I9KENhY2hlZEJ5dGVjb2RlJiYgb3RoZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZy
ZWVEYXRhSWZPd25lZCgpOworICAgICAgICAgICAgbV9vd25lZCA9IG90aGVyLm1fb3duZWQ7Cisg
ICAgICAgICAgICBtX3NpemUgPSBvdGhlci5tX3NpemU7CisgICAgICAgICAgICBtX2RhdGEgPSBv
dGhlci5tX2RhdGE7CisgICAgICAgICAgICBvdGhlci5tX293bmVkID0gZmFsc2U7CisgICAgICAg
ICAgICByZXR1cm4gKnRoaXM7CisgICAgICAgIH0KKworICAgICAgICBjb25zdCB2b2lkKiBkYXRh
KCkgY29uc3QgeyByZXR1cm4gbV9kYXRhOyB9CisgICAgICAgIHNpemVfdCBzaXplKCkgY29uc3Qg
eyByZXR1cm4gbV9zaXplOyB9CisgICAgICAgIGJvb2wgb3duZWQoKSBjb25zdCB7IHJldHVybiBt
X293bmVkOyB9CisKKyAgICAgICAgfkNhY2hlZEJ5dGVjb2RlKCkKKyAgICAgICAgeworICAgICAg
ICAgICAgZnJlZURhdGFJZk93bmVkKCk7CisgICAgICAgIH0KKworICAgIHByaXZhdGU6CisgICAg
ICAgIHZvaWQgZnJlZURhdGFJZk93bmVkKCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1f
ZGF0YSAmJiBtX293bmVkKQorICAgICAgICAgICAgICAgIGZhc3RGcmVlKGNvbnN0X2Nhc3Q8dm9p
ZCo+KG1fZGF0YSkpOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBtX293bmVkOworICAgICAg
ICBzaXplX3QgbV9zaXplOworICAgICAgICBjb25zdCB2b2lkKiBtX2RhdGE7CisgICAgfTsKKwor
CiAgICAgY2xhc3MgU291cmNlUHJvdmlkZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxTb3VyY2VQcm92
aWRlcj4gewogICAgIHB1YmxpYzoKICAgICAgICAgc3RhdGljIGNvbnN0IGludHB0cl90IG51bGxJ
RCA9IDE7CkBAIC01Miw2ICsxMTIsOCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICB2aXJ0
dWFsIHVuc2lnbmVkIGhhc2goKSBjb25zdCA9IDA7CiAgICAgICAgIHZpcnR1YWwgU3RyaW5nVmll
dyBzb3VyY2UoKSBjb25zdCA9IDA7CisgICAgICAgIHZpcnR1YWwgY29uc3QgQ2FjaGVkQnl0ZWNv
ZGUqIGNhY2hlZEJ5dGVjb2RlKCkgY29uc3QgeyByZXR1cm4gbnVsbHB0cjsgfQorCiAgICAgICAg
IFN0cmluZ1ZpZXcgZ2V0UmFuZ2UoaW50IHN0YXJ0LCBpbnQgZW5kKSBjb25zdAogICAgICAgICB7
CiAgICAgICAgICAgICByZXR1cm4gc291cmNlKCkuc3Vic3RyaW5nKHN0YXJ0LCBlbmQgLSBzdGFy
dCk7CkBAIC0xMDQsMTYgKzE2NiwxNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJl
dHVybiBtX3NvdXJjZS5nZXQoKTsKICAgICAgICAgfQogCi0gICAgcHJpdmF0ZToKKyAgICBwcm90
ZWN0ZWQ6CiAgICAgICAgIFN0cmluZ1NvdXJjZVByb3ZpZGVyKGNvbnN0IFN0cmluZyYgc291cmNl
LCBjb25zdCBTb3VyY2VPcmlnaW4mIHNvdXJjZU9yaWdpbiwgVVJMJiYgdXJsLCBjb25zdCBUZXh0
UG9zaXRpb24mIHN0YXJ0UG9zaXRpb24sIFNvdXJjZVByb3ZpZGVyU291cmNlVHlwZSBzb3VyY2VU
eXBlKQogICAgICAgICAgICAgOiBTb3VyY2VQcm92aWRlcihzb3VyY2VPcmlnaW4sIFdURk1vdmUo
dXJsKSwgc3RhcnRQb3NpdGlvbiwgc291cmNlVHlwZSkKICAgICAgICAgICAgICwgbV9zb3VyY2Uo
c291cmNlLmlzTnVsbCgpID8gKlN0cmluZ0ltcGw6OmVtcHR5KCkgOiAqc291cmNlLmltcGwoKSkK
ICAgICAgICAgewogICAgICAgICB9CiAKKyAgICBwcml2YXRlOgogICAgICAgICBSZWY8U3RyaW5n
SW1wbD4gbV9zb3VyY2U7CiAgICAgfTsKLSAgICAKKwogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkK
ICAgICBjbGFzcyBXZWJBc3NlbWJseVNvdXJjZVByb3ZpZGVyIDogcHVibGljIFNvdXJjZVByb3Zp
ZGVyIHsKICAgICBwdWJsaWM6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFy
c2VyL1VubGlua2VkU291cmNlQ29kZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9V
bmxpbmtlZFNvdXJjZUNvZGUuaAppbmRleCBhYWFhZDNmNDEyZjhmM2ZhNWJjMWYyZmViZmIxNGNj
NzRkZTIyNDI0Li5mYWUwZTM1MWVhYmU1MGZiOGE0YzUzOTI4OWYzNWI4NjJkMTdkYjc3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1VubGlua2VkU291cmNlQ29kZS5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvVW5saW5rZWRTb3VyY2VDb2RlLmgK
QEAgLTgxLDYgKzgxLDExIEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIGJvb2wgaXNIYXNo
VGFibGVEZWxldGVkVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3Byb3ZpZGVyLmlzSGFzaFRhYmxl
RGVsZXRlZFZhbHVlKCk7IH0KIAorICAgICAgICBjb25zdCBTb3VyY2VQcm92aWRlciYgcHJvdmlk
ZXIoKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gKm1fcHJvdmlkZXI7Cisg
ICAgICAgIH0KKwogICAgICAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3QKICAgICAgICAgewogICAg
ICAgICAgICAgQVNTRVJUKG1fcHJvdmlkZXIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQ29kZUNhY2hlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0NvZGVDYWNoZS5jcHAKaW5kZXggYzMyZDIwNGI2Y2Q4OTY4MTgxY2IwZDFkZjBlYWI4M2Vj
MTE4MTlkNC4uMjZlMDkzMWQ0Njg5ZDJkOWNiNDAxYTFjNzNkMTY2MzhhZTBkOWQ1OCAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29kZUNhY2hlLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db2RlQ2FjaGUuY3BwCkBAIC0xNjIsNCArMTYy
LDY1IEBAIHZvaWQgQ29kZUNhY2hlOjp3cml0ZShWTSYgdm0pCiAgICAgICAgIHdyaXRlQ29kZUJs
b2NrKHZtLCBpdC5rZXksIGl0LnZhbHVlKTsKIH0KIAordm9pZCBnZW5lcmF0ZVVubGlua2VkQ29k
ZUJsb2NrRm9yRnVuY3Rpb25zKFZNJiB2bSwgVW5saW5rZWRDb2RlQmxvY2sqIHVubGlua2VkQ29k
ZUJsb2NrLCBjb25zdCBTb3VyY2VDb2RlJiBwYXJlbnRTb3VyY2UsIERlYnVnZ2VyTW9kZSBkZWJ1
Z2dlck1vZGUsIFBhcnNlckVycm9yJiBlcnJvcikKK3sKKyAgICBhdXRvIGdlbmVyYXRlID0gWyZd
KFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiB1bmxpbmtlZEV4ZWN1dGFibGUsIENvZGVTcGVj
aWFsaXphdGlvbktpbmQgY29uc3RydWN0b3JLaW5kKSB7CisgICAgICAgIGlmIChjb25zdHJ1Y3Rv
cktpbmQgPT0gQ29kZUZvckNvbnN0cnVjdCAmJiBTb3VyY2VQYXJzZU1vZGVTZXQoU291cmNlUGFy
c2VNb2RlOjpBc3luY0Fycm93RnVuY3Rpb25Nb2RlLCBTb3VyY2VQYXJzZU1vZGU6OkFzeW5jTWV0
aG9kTW9kZSwgU291cmNlUGFyc2VNb2RlOjpBc3luY0Z1bmN0aW9uTW9kZSkuY29udGFpbnModW5s
aW5rZWRFeGVjdXRhYmxlLT5wYXJzZU1vZGUoKSkpCisgICAgICAgICAgICByZXR1cm47CisKKyAg
ICAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxlID0gdW5saW5rZWRFeGVjdXRhYmxl
LT5saW5rKHZtLCBwYXJlbnRTb3VyY2UpOworICAgICAgICBjb25zdCBTb3VyY2VDb2RlJiBzb3Vy
Y2UgPSBleGVjdXRhYmxlLT5zb3VyY2UoKTsKKyAgICAgICAgVW5saW5rZWRGdW5jdGlvbkNvZGVC
bG9jayogdW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayA9IHVubGlua2VkRXhlY3V0YWJsZS0+dW5s
aW5rZWRDb2RlQmxvY2tGb3Iodm0sIHNvdXJjZSwgY29uc3RydWN0b3JLaW5kLCBkZWJ1Z2dlck1v
ZGUsIGVycm9yLCB1bmxpbmtlZEV4ZWN1dGFibGUtPnBhcnNlTW9kZSgpKTsKKyAgICAgICAgaWYg
KHVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2spCisgICAgICAgICAgICBnZW5lcmF0ZVVubGlua2Vk
Q29kZUJsb2NrRm9yRnVuY3Rpb25zKHZtLCB1bmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrLCBzb3Vy
Y2UsIGRlYnVnZ2VyTW9kZSwgZXJyb3IpOworICAgIH07CisKKyAgICAvLyBGSVhNRTogV2Ugc2hv
dWxkIGFsc28gZ2VuZXJhdGUgQ29kZUJsb2NrcyBmb3IgQ29kZUZvckNvbnN0cnVjdAorICAgIC8v
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTM4MjMKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgdW5saW5rZWRDb2RlQmxvY2stPm51bWJlck9mRnVuY3Rpb25E
ZWNscygpOyBpKyspCisgICAgICAgIGdlbmVyYXRlKHVubGlua2VkQ29kZUJsb2NrLT5mdW5jdGlv
bkRlY2woaSksIENvZGVGb3JDYWxsKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdW5s
aW5rZWRDb2RlQmxvY2stPm51bWJlck9mRnVuY3Rpb25FeHBycygpOyBpKyspCisgICAgICAgIGdl
bmVyYXRlKHVubGlua2VkQ29kZUJsb2NrLT5mdW5jdGlvbkV4cHIoaSksIENvZGVGb3JDYWxsKTsK
K30KKwordm9pZCB3cml0ZUNvZGVCbG9jayhWTSYgdm0sIGNvbnN0IFNvdXJjZUNvZGVLZXkmIGtl
eSwgY29uc3QgU291cmNlQ29kZVZhbHVlJiB2YWx1ZSkKK3sKKyNpZiBPUyhEQVJXSU4pCisgICAg
Y29uc3QgY2hhciogY2FjaGVQYXRoID0gT3B0aW9uczo6ZGlza0NhY2hlUGF0aCgpOworICAgIGlm
IChMSUtFTFkoIWNhY2hlUGF0aCkpCisgICAgICAgIHJldHVybjsKKworICAgIFVubGlua2VkQ29k
ZUJsb2NrKiBjb2RlQmxvY2sgPSBqc0R5bmFtaWNDYXN0PFVubGlua2VkQ29kZUJsb2NrKj4odm0s
IHZhbHVlLmNlbGwuZ2V0KCkpOworICAgIGlmICghY29kZUJsb2NrKQorICAgICAgICByZXR1cm47
CisKKyAgICBzdGQ6OnBhaXI8TWFsbG9jUHRyPHVpbnQ4X3Q+LCBzaXplX3Q+IHJlc3VsdCA9IGVu
Y29kZUNvZGVCbG9jayh2bSwga2V5LCBjb2RlQmxvY2spOworCisgICAgU3RyaW5nIGZpbGVuYW1l
ID0gbWFrZVN0cmluZyhjYWNoZVBhdGgsICcvJywgU3RyaW5nOjpudW1iZXIoa2V5Lmhhc2goKSks
ICIuY2FjaGUiKTsKKyAgICBpbnQgZmQgPSBvcGVuKGZpbGVuYW1lLnV0ZjgoKS5kYXRhKCksIE9f
Q1JFQVQgfCBPX1dST05MWSwgMDY2Nik7CisgICAgaWYgKGZkID09IC0xKQorICAgICAgICByZXR1
cm47CisgICAgaW50IHJjID0gZmxvY2soZmQsIExPQ0tfRVggfCBMT0NLX05CKTsKKyAgICBpZiAo
IXJjKQorICAgICAgICA6OndyaXRlKGZkLCByZXN1bHQuZmlyc3QuZ2V0KCksIHJlc3VsdC5zZWNv
bmQpOworICAgIGNsb3NlKGZkKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHZtKTsKKyAgICBV
TlVTRURfUEFSQU0oa2V5KTsKKyAgICBVTlVTRURfUEFSQU0odmFsdWUpOworI2VuZGlmCit9CisK
K0NhY2hlZEJ5dGVjb2RlIHNlcmlhbGl6ZUJ5dGVjb2RlKFZNJiB2bSwgVW5saW5rZWRDb2RlQmxv
Y2sqIGNvZGVCbG9jaywgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBTb3VyY2VDb2RlVHlwZSBj
b2RlVHlwZSwgSlNQYXJzZXJTdHJpY3RNb2RlIHN0cmljdE1vZGUsIEpTUGFyc2VyU2NyaXB0TW9k
ZSBzY3JpcHRNb2RlLCBEZWJ1Z2dlck1vZGUgZGVidWdnZXJNb2RlKQoreworICAgIFNvdXJjZUNv
ZGVLZXkga2V5KAorICAgICAgICBzb3VyY2UsIFN0cmluZygpLCBjb2RlVHlwZSwgc3RyaWN0TW9k
ZSwgc2NyaXB0TW9kZSwKKyAgICAgICAgRGVyaXZlZENvbnRleHRUeXBlOjpOb25lLCBFdmFsQ29u
dGV4dFR5cGU6Ok5vbmUsIGZhbHNlLCBkZWJ1Z2dlck1vZGUsCisgICAgICAgIHZtLnR5cGVQcm9m
aWxlcigpID8gVHlwZVByb2ZpbGVyRW5hYmxlZDo6WWVzIDogVHlwZVByb2ZpbGVyRW5hYmxlZDo6
Tm8sCisgICAgICAgIHZtLmNvbnRyb2xGbG93UHJvZmlsZXIoKSA/IENvbnRyb2xGbG93UHJvZmls
ZXJFbmFibGVkOjpZZXMgOiBDb250cm9sRmxvd1Byb2ZpbGVyRW5hYmxlZDo6Tm8sCisgICAgICAg
IFdURjo6bnVsbG9wdCk7CisgICAgc3RkOjpwYWlyPE1hbGxvY1B0cjx1aW50OF90Piwgc2l6ZV90
PiByZXN1bHQgPSBlbmNvZGVDb2RlQmxvY2sodm0sIGtleSwgY29kZUJsb2NrKTsKKyAgICByZXR1
cm4gQ2FjaGVkQnl0ZWNvZGUgeyBXVEZNb3ZlKHJlc3VsdC5maXJzdCksIHJlc3VsdC5zZWNvbmQg
fTsKK30KKwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29k
ZUNhY2hlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db2RlQ2FjaGUuaAppbmRl
eCA5OTM5NWYyY2QyODQxMTM5YTAzNWM4YjE1ODliYjkzOWM2OWM1NzAyLi44MGMwZDk1ZjllZjc5
NDk1MmU1ZmJjNjgzZWU1NjY1MGUwYTAyMWFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9Db2RlQ2FjaGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Db2RlQ2FjaGUuaApAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgIlN0cm9uZ0lubGlu
ZXMuaCIKICNpbmNsdWRlICJVbmxpbmtlZENvZGVCbG9jay5oIgogI2luY2x1ZGUgIlVubGlua2Vk
RXZhbENvZGVCbG9jay5oIgorI2luY2x1ZGUgIlVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2suaCIK
ICNpbmNsdWRlICJVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2suaCIKICNpbmNsdWRlICJV
bmxpbmtlZFByb2dyYW1Db2RlQmxvY2suaCIKICNpbmNsdWRlIDxzeXMvc3RhdC5oPgpAQCAtNjAs
NiArNjEsMTUgQEAgY2xhc3MgVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrOwogY2xhc3MgVk07CiBj
bGFzcyBWYXJpYWJsZUVudmlyb25tZW50OwogCituYW1lc3BhY2UgQ29kZUNhY2hlSW50ZXJuYWwg
eworc3RhdGljIGNvbnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNlOworfSAvLyBuYW1lc3BhY2UgQ29k
ZUNhY2hlSW50ZXJuYWwKKworI2RlZmluZSBWRVJCT1NFX0xPRyguLi4pIGRvIHsgXAorICAgIGlm
IChDb2RlQ2FjaGVJbnRlcm5hbDo6dmVyYm9zZSkgXAorICAgICAgICBkYXRhTG9nTG4oIihKU0M6
OkNvZGVDYWNoZSkgIiwgX19WQV9BUkdTX18pOyBcCit9IHdoaWxlIChmYWxzZSkKKwogc3RydWN0
IFNvdXJjZUNvZGVWYWx1ZSB7CiAgICAgU291cmNlQ29kZVZhbHVlKCkKICAgICB7CkBAIC05Nyw2
ICsxMDcsMTYgQEAgcHVibGljOgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFVubGlua2VkQ29kZUJs
b2NrVHlwZT4KICAgICBVbmxpbmtlZENvZGVCbG9ja1R5cGUqIGZldGNoRnJvbURpc2tJbXBsKFZN
JiB2bSwgY29uc3QgU291cmNlQ29kZUtleSYga2V5KQogICAgIHsKKyAgICAgICAgeworICAgICAg
ICAgICAgY29uc3QgYXV0byogY2FjaGVkQnl0ZWNvZGUgPSBrZXkuc291cmNlKCkucHJvdmlkZXIo
KS5jYWNoZWRCeXRlY29kZSgpOworICAgICAgICAgICAgaWYgKGNhY2hlZEJ5dGVjb2RlICYmIGNh
Y2hlZEJ5dGVjb2RlLT5zaXplKCkpIHsKKyAgICAgICAgICAgICAgICBWRVJCT1NFX0xPRygiRm91
bmQgY2FjaGVkIENvZGVCbG9jayBpbiB0aGUgU291cmNlUHJvdmlkZXIiKTsKKyAgICAgICAgICAg
ICAgICBVbmxpbmtlZENvZGVCbG9ja1R5cGUqIHVubGlua2VkQ29kZUJsb2NrID0gZGVjb2RlQ29k
ZUJsb2NrPFVubGlua2VkQ29kZUJsb2NrVHlwZT4odm0sIGtleSwgY2FjaGVkQnl0ZWNvZGUtPmRh
dGEoKSwgY2FjaGVkQnl0ZWNvZGUtPnNpemUoKSk7CisgICAgICAgICAgICAgICAgaWYgKHVubGlu
a2VkQ29kZUJsb2NrKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5saW5rZWRDb2RlQmxv
Y2s7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKwogI2lmIE9TKERBUldJTikKICAgICAgICAg
Y29uc3QgY2hhciogY2FjaGVQYXRoID0gT3B0aW9uczo6ZGlza0NhY2hlUGF0aCgpOwogICAgICAg
ICBpZiAoIWNhY2hlUGF0aCkKQEAgLTEyMSwxNSArMTQxLDE5IEBAIHB1YmxpYzoKICAgICAgICAg
c3RydWN0IHN0YXQgc2I7CiAgICAgICAgIGludCByZXMgPSBmc3RhdChmZCwgJnNiKTsKICAgICAg
ICAgc2l6ZV90IHNpemUgPSBzdGF0aWNfY2FzdDxzaXplX3Q+KHNiLnN0X3NpemUpOwotICAgICAg
ICBpZiAocmVzIHx8ICFzaXplKQorICAgICAgICBpZiAocmVzIHx8ICFzaXplKSB7CisgICAgICAg
ICAgICBjbG9zZShmZCk7CiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQog
Ci0gICAgICAgIGNvbnN0IHZvaWQqIGJ1ZmZlciA9IG1tYXAobnVsbHB0ciwgc2l6ZSwgUFJPVF9S
RUFELCBNQVBfUFJJVkFURSwgZmQsIDApOworICAgICAgICB2b2lkKiBidWZmZXIgPSBtbWFwKG51
bGxwdHIsIHNpemUsIFBST1RfUkVBRCwgTUFQX1BSSVZBVEUsIGZkLCAwKTsKICAgICAgICAgVW5s
aW5rZWRDb2RlQmxvY2tUeXBlKiB1bmxpbmtlZENvZGVCbG9jayA9IGRlY29kZUNvZGVCbG9jazxV
bmxpbmtlZENvZGVCbG9ja1R5cGU+KHZtLCBrZXksIGJ1ZmZlciwgc2l6ZSk7CisgICAgICAgIG11
bm1hcChidWZmZXIsIHNpemUpOwogCiAgICAgICAgIGlmICghdW5saW5rZWRDb2RlQmxvY2spCiAg
ICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAorICAgICAgICBWRVJCT1NFX0xPRygiRm91bmQg
Y2FjaGVkIENvZGVCbG9jayBvbiBkaXNrIik7CiAgICAgICAgIGFkZENhY2hlKGtleSwgU291cmNl
Q29kZVZhbHVlKHZtLCB1bmxpbmtlZENvZGVCbG9jaywgbV9hZ2UpKTsKICAgICAgICAgcmV0dXJu
IHVubGlua2VkQ29kZUJsb2NrOwogI2Vsc2UKQEAgLTE1OCw2ICsxODIsNyBAQCBwdWJsaWM6CiAg
ICAgewogICAgICAgICBwcnVuZSgpOwogCisgICAgICAgIFZFUkJPU0VfTE9HKCJUcnlpbmcgdG8g
ZmluZCBjYWNoZWQgQ29kZUJsb2NrIGZvciAiLCBrZXkuc291cmNlKCkucHJvdmlkZXIoKS51cmwo
KS5zdHJpbmcoKSk7CiAgICAgICAgIGl0ZXJhdG9yIGZpbmRSZXN1bHQgPSBtX21hcC5maW5kKGtl
eSk7CiAgICAgICAgIGlmIChmaW5kUmVzdWx0ID09IG1fbWFwLmVuZCgpKQogICAgICAgICAgICAg
cmV0dXJuIGZldGNoRnJvbURpc2s8VW5saW5rZWRDb2RlQmxvY2tUeXBlPih2bSwga2V5KTsKQEAg
LTE4MCw2ICsyMDUsNyBAQCBwdWJsaWM6CiAgICAgICAgIGZpbmRSZXN1bHQtPnZhbHVlLmFnZSA9
IG1fYWdlOwogICAgICAgICBtX2FnZSArPSBrZXkubGVuZ3RoKCk7CiAKKyAgICAgICAgVkVSQk9T
RV9MT0coIkZvdW5kIGNhY2hlZCBDb2RlQmxvY2sgaW4gbWVtb3J5Iik7CiAgICAgICAgIHJldHVy
biBqc0Nhc3Q8VW5saW5rZWRDb2RlQmxvY2tUeXBlKj4oZmluZFJlc3VsdC0+dmFsdWUuY2VsbC5n
ZXQoKSk7CiAgICAgfQogCkBAIC0yOTEsMTEgKzMxNywxMCBAQCB0ZW1wbGF0ZSA8PiBzdHJ1Y3Qg
Q2FjaGVUeXBlczxVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2s+IHsKICAgICBzdGF0aWMg
Y29uc3QgU291cmNlUGFyc2VNb2RlIHBhcnNlTW9kZSA9IFNvdXJjZVBhcnNlTW9kZTo6TW9kdWxl
RXZhbHVhdGVNb2RlOwogfTsKIAotdGVtcGxhdGUgPGNsYXNzIFVubGlua2VkQ29kZUJsb2NrVHlw
ZSwgY2xhc3MgRXhlY3V0YWJsZVR5cGU+Ci1VbmxpbmtlZENvZGVCbG9ja1R5cGUqIGdlbmVyYXRl
VW5saW5rZWRDb2RlQmxvY2soVk0mIHZtLCBFeGVjdXRhYmxlVHlwZSogZXhlY3V0YWJsZSwgY29u
c3QgU291cmNlQ29kZSYgc291cmNlLCBKU1BhcnNlclN0cmljdE1vZGUgc3RyaWN0TW9kZSwgSlNQ
YXJzZXJTY3JpcHRNb2RlIHNjcmlwdE1vZGUsIERlYnVnZ2VyTW9kZSBkZWJ1Z2dlck1vZGUsIFBh
cnNlckVycm9yJiBlcnJvciwgRXZhbENvbnRleHRUeXBlIGV2YWxDb250ZXh0VHlwZSwgY29uc3Qg
VmFyaWFibGVFbnZpcm9ubWVudCogdmFyaWFibGVzVW5kZXJURFopCit0ZW1wbGF0ZSA8Y2xhc3Mg
VW5saW5rZWRDb2RlQmxvY2tUeXBlLCBjbGFzcyBFeGVjdXRhYmxlVHlwZSA9IFNjcmlwdEV4ZWN1
dGFibGU+CitVbmxpbmtlZENvZGVCbG9ja1R5cGUqIGdlbmVyYXRlVW5saW5rZWRDb2RlQmxvY2tJ
bXBsKFZNJiB2bSwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBKU1BhcnNlclN0cmljdE1vZGUg
c3RyaWN0TW9kZSwgSlNQYXJzZXJTY3JpcHRNb2RlIHNjcmlwdE1vZGUsIERlYnVnZ2VyTW9kZSBk
ZWJ1Z2dlck1vZGUsIFBhcnNlckVycm9yJiBlcnJvciwgRXZhbENvbnRleHRUeXBlIGV2YWxDb250
ZXh0VHlwZSwgRGVyaXZlZENvbnRleHRUeXBlIGRlcml2ZWRDb250ZXh0VHlwZSwgYm9vbCBpc0Fy
cm93RnVuY3Rpb25Db250ZXh0LCBjb25zdCBWYXJpYWJsZUVudmlyb25tZW50KiB2YXJpYWJsZXNV
bmRlclREWiwgRXhlY3V0YWJsZVR5cGUqIGV4ZWN1dGFibGUgPSBudWxscHRyKQogewogICAgIHR5
cGVkZWYgdHlwZW5hbWUgQ2FjaGVUeXBlczxVbmxpbmtlZENvZGVCbG9ja1R5cGU+OjpSb290Tm9k
ZSBSb290Tm9kZTsKLSAgICBEZXJpdmVkQ29udGV4dFR5cGUgZGVyaXZlZENvbnRleHRUeXBlID0g
ZXhlY3V0YWJsZS0+ZGVyaXZlZENvbnRleHRUeXBlKCk7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFJv
b3ROb2RlPiByb290Tm9kZSA9IHBhcnNlPFJvb3ROb2RlPigKICAgICAgICAgJnZtLCBzb3VyY2Us
IElkZW50aWZpZXIoKSwgSlNQYXJzZXJCdWlsdGluTW9kZTo6Tm90QnVpbHRpbiwgc3RyaWN0TW9k
ZSwgc2NyaXB0TW9kZSwgQ2FjaGVUeXBlczxVbmxpbmtlZENvZGVCbG9ja1R5cGU+OjpwYXJzZU1v
ZGUsIFN1cGVyQmluZGluZzo6Tm90TmVlZGVkLCBlcnJvciwgbnVsbHB0ciwgQ29uc3RydWN0b3JL
aW5kOjpOb25lLCBkZXJpdmVkQ29udGV4dFR5cGUsIGV2YWxDb250ZXh0VHlwZSk7CiAgICAgaWYg
KCFyb290Tm9kZSkKQEAgLTMwNiwxMCArMzMxLDE1IEBAIFVubGlua2VkQ29kZUJsb2NrVHlwZSog
Z2VuZXJhdGVVbmxpbmtlZENvZGVCbG9jayhWTSYgdm0sIEV4ZWN1dGFibGVUeXBlKiBleGVjdXRh
CiAgICAgYm9vbCBlbmRDb2x1bW5Jc09uU3RhcnRMaW5lID0gIWxpbmVDb3VudDsKICAgICB1bnNp
Z25lZCB1bmxpbmtlZEVuZENvbHVtbiA9IHJvb3ROb2RlLT5lbmRDb2x1bW4oKTsKICAgICB1bnNp
Z25lZCBlbmRDb2x1bW4gPSB1bmxpbmtlZEVuZENvbHVtbiArIChlbmRDb2x1bW5Jc09uU3RhcnRM
aW5lID8gc3RhcnRDb2x1bW4gOiAxKTsKLSAgICB1bnNpZ25lZCBhcnJvd0NvbnRleHRGZWF0dXJl
ID0gZXhlY3V0YWJsZS0+aXNBcnJvd0Z1bmN0aW9uQ29udGV4dCgpID8gQXJyb3dGdW5jdGlvbkNv
bnRleHRGZWF0dXJlIDogMDsKLSAgICBleGVjdXRhYmxlLT5yZWNvcmRQYXJzZShyb290Tm9kZS0+
ZmVhdHVyZXMoKSB8IGFycm93Q29udGV4dEZlYXR1cmUsIHJvb3ROb2RlLT5oYXNDYXB0dXJlZFZh
cmlhYmxlcygpLCByb290Tm9kZS0+bGFzdExpbmUoKSwgZW5kQ29sdW1uKTsKKyAgICB1bnNpZ25l
ZCBhcnJvd0NvbnRleHRGZWF0dXJlID0gaXNBcnJvd0Z1bmN0aW9uQ29udGV4dCA/IEFycm93RnVu
Y3Rpb25Db250ZXh0RmVhdHVyZSA6IDA7CisgICAgaWYgKGV4ZWN1dGFibGUpCisgICAgICAgIGV4
ZWN1dGFibGUtPnJlY29yZFBhcnNlKHJvb3ROb2RlLT5mZWF0dXJlcygpIHwgYXJyb3dDb250ZXh0
RmVhdHVyZSwgcm9vdE5vZGUtPmhhc0NhcHR1cmVkVmFyaWFibGVzKCksIHJvb3ROb2RlLT5sYXN0
TGluZSgpLCBlbmRDb2x1bW4pOworCisgICAgYm9vbCB1c2VzRXZhbCA9IHJvb3ROb2RlLT5mZWF0
dXJlcygpICYgRXZhbEZlYXR1cmU7CisgICAgYm9vbCBpc1N0cmljdE1vZGUgPSByb290Tm9kZS0+
ZmVhdHVyZXMoKSAmIFN0cmljdE1vZGVGZWF0dXJlOworICAgIEV4ZWN1dGFibGVJbmZvIGV4ZWN1
dGFibGVJbmZvKHVzZXNFdmFsLCBpc1N0cmljdE1vZGUsIGZhbHNlLCBmYWxzZSwgQ29uc3RydWN0
b3JLaW5kOjpOb25lLCBzY3JpcHRNb2RlLCBTdXBlckJpbmRpbmc6Ok5vdE5lZWRlZCwgQ2FjaGVU
eXBlczxVbmxpbmtlZENvZGVCbG9ja1R5cGU+OjpwYXJzZU1vZGUsIGRlcml2ZWRDb250ZXh0VHlw
ZSwgaXNBcnJvd0Z1bmN0aW9uQ29udGV4dCwgZmFsc2UsIGV2YWxDb250ZXh0VHlwZSk7CiAKLSAg
ICBVbmxpbmtlZENvZGVCbG9ja1R5cGUqIHVubGlua2VkQ29kZUJsb2NrID0gVW5saW5rZWRDb2Rl
QmxvY2tUeXBlOjpjcmVhdGUoJnZtLCBleGVjdXRhYmxlLT5leGVjdXRhYmxlSW5mbygpLCBkZWJ1
Z2dlck1vZGUpOworICAgIFVubGlua2VkQ29kZUJsb2NrVHlwZSogdW5saW5rZWRDb2RlQmxvY2sg
PSBVbmxpbmtlZENvZGVCbG9ja1R5cGU6OmNyZWF0ZSgmdm0sIGV4ZWN1dGFibGVJbmZvLCBkZWJ1
Z2dlck1vZGUpOwogICAgIHVubGlua2VkQ29kZUJsb2NrLT5yZWNvcmRQYXJzZShyb290Tm9kZS0+
ZmVhdHVyZXMoKSwgcm9vdE5vZGUtPmhhc0NhcHR1cmVkVmFyaWFibGVzKCksIGxpbmVDb3VudCwg
dW5saW5rZWRFbmRDb2x1bW4pOwogICAgIHVubGlua2VkQ29kZUJsb2NrLT5zZXRTb3VyY2VVUkxE
aXJlY3RpdmUoc291cmNlLnByb3ZpZGVyKCktPnNvdXJjZVVSTCgpKTsKICAgICB1bmxpbmtlZENv
ZGVCbG9jay0+c2V0U291cmNlTWFwcGluZ1VSTERpcmVjdGl2ZShzb3VyY2UucHJvdmlkZXIoKS0+
c291cmNlTWFwcGluZ1VSTCgpKTsKQEAgLTMyMiwzNiArMzUyLDI4IEBAIFVubGlua2VkQ29kZUJs
b2NrVHlwZSogZ2VuZXJhdGVVbmxpbmtlZENvZGVCbG9jayhWTSYgdm0sIEV4ZWN1dGFibGVUeXBl
KiBleGVjdXRhCiAgICAgcmV0dXJuIHVubGlua2VkQ29kZUJsb2NrOwogfQogCi1BTFdBWVNfSU5M
SU5FIHN0YXRpYyB2b2lkIHdyaXRlQ29kZUJsb2NrKFZNJiB2bSwgY29uc3QgU291cmNlQ29kZUtl
eSYga2V5LCBjb25zdCBTb3VyY2VDb2RlVmFsdWUmIHZhbHVlKQordGVtcGxhdGUgPGNsYXNzIFVu
bGlua2VkQ29kZUJsb2NrVHlwZSwgY2xhc3MgRXhlY3V0YWJsZVR5cGU+CitVbmxpbmtlZENvZGVC
bG9ja1R5cGUqIGdlbmVyYXRlVW5saW5rZWRDb2RlQmxvY2soVk0mIHZtLCBFeGVjdXRhYmxlVHlw
ZSogZXhlY3V0YWJsZSwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBKU1BhcnNlclN0cmljdE1v
ZGUgc3RyaWN0TW9kZSwgSlNQYXJzZXJTY3JpcHRNb2RlIHNjcmlwdE1vZGUsIERlYnVnZ2VyTW9k
ZSBkZWJ1Z2dlck1vZGUsIFBhcnNlckVycm9yJiBlcnJvciwgRXZhbENvbnRleHRUeXBlIGV2YWxD
b250ZXh0VHlwZSwgY29uc3QgVmFyaWFibGVFbnZpcm9ubWVudCogdmFyaWFibGVzVW5kZXJURFop
CiB7Ci0jaWYgT1MoREFSV0lOKQotICAgIGNvbnN0IGNoYXIqIGNhY2hlUGF0aCA9IE9wdGlvbnM6
OmRpc2tDYWNoZVBhdGgoKTsKLSAgICBpZiAoTElLRUxZKCFjYWNoZVBhdGgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBVbmxpbmtlZENvZGVCbG9jayogY29kZUJsb2NrID0ganNEeW5hbWljQ2Fz
dDxVbmxpbmtlZENvZGVCbG9jayo+KHZtLCB2YWx1ZS5jZWxsLmdldCgpKTsKLSAgICBpZiAoIWNv
ZGVCbG9jaykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgdW5zaWduZWQgaGFzaCA9IGtleS5oYXNo
KCk7Ci0gICAgY2hhciBmaWxlbmFtZVs1MTJdOwotICAgIGludCBjb3VudCA9IHNucHJpbnRmKGZp
bGVuYW1lLCA1MTIsICIlcy8ldS5jYWNoZSIsIGNhY2hlUGF0aCwgaGFzaCk7Ci0gICAgaWYgKGNv
dW50IDwgMCB8fCBjb3VudCA+IDUxMikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgc3RkOjpwYWly
PE1hbGxvY1B0cjx1aW50OF90Piwgc2l6ZV90PiByZXN1bHQgPSBlbmNvZGVDb2RlQmxvY2sodm0s
IGtleSwgY29kZUJsb2NrKTsKLQotICAgIGludCBmZCA9IG9wZW4oZmlsZW5hbWUsIE9fQ1JFQVQg
fCBPX1dST05MWSwgMDY2Nik7Ci0gICAgaW50IHJjID0gZmxvY2soZmQsIExPQ0tfRVggfCBMT0NL
X05CKTsKLSAgICBpZiAoIXJjKQotICAgICAgICA6OndyaXRlKGZkLCByZXN1bHQuZmlyc3QuZ2V0
KCksIHJlc3VsdC5zZWNvbmQpOwotICAgIGNsb3NlKGZkKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BB
UkFNKHZtKTsKLSAgICBVTlVTRURfUEFSQU0oa2V5KTsKLSAgICBVTlVTRURfUEFSQU0odmFsdWUp
OwotI2VuZGlmCisgICAgcmV0dXJuIGdlbmVyYXRlVW5saW5rZWRDb2RlQmxvY2tJbXBsPFVubGlu
a2VkQ29kZUJsb2NrVHlwZSwgRXhlY3V0YWJsZVR5cGU+KHZtLCBzb3VyY2UsIHN0cmljdE1vZGUs
IHNjcmlwdE1vZGUsIGRlYnVnZ2VyTW9kZSwgZXJyb3IsIGV2YWxDb250ZXh0VHlwZSwgZXhlY3V0
YWJsZS0+ZGVyaXZlZENvbnRleHRUeXBlKCksIGV4ZWN1dGFibGUtPmlzQXJyb3dGdW5jdGlvbkNv
bnRleHQoKSwgdmFyaWFibGVzVW5kZXJURFosIGV4ZWN1dGFibGUpOworfQorCit2b2lkIGdlbmVy
YXRlVW5saW5rZWRDb2RlQmxvY2tGb3JGdW5jdGlvbnMoVk0mLCBVbmxpbmtlZENvZGVCbG9jayos
IGNvbnN0IFNvdXJjZUNvZGUmLCBEZWJ1Z2dlck1vZGUsIFBhcnNlckVycm9yJik7CisKK3RlbXBs
YXRlIDxjbGFzcyBVbmxpbmtlZENvZGVCbG9ja1R5cGU+CitzdGQ6OmVuYWJsZV9pZl90PCFzdGQ6
OmlzX3NhbWU8VW5saW5rZWRDb2RlQmxvY2tUeXBlLCBVbmxpbmtlZEV2YWxDb2RlQmxvY2s+Ojp2
YWx1ZSwgVW5saW5rZWRDb2RlQmxvY2tUeXBlKj4KK3JlY3Vyc2l2ZWx5R2VuZXJhdGVVbmxpbmtl
ZENvZGVCbG9jayhWTSYgdm0sIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgSlNQYXJzZXJTdHJp
Y3RNb2RlIHN0cmljdE1vZGUsIEpTUGFyc2VyU2NyaXB0TW9kZSBzY3JpcHRNb2RlLCBEZWJ1Z2dl
ck1vZGUgZGVidWdnZXJNb2RlLCBQYXJzZXJFcnJvciYgZXJyb3IsIEV2YWxDb250ZXh0VHlwZSBl
dmFsQ29udGV4dFR5cGUsIGNvbnN0IFZhcmlhYmxlRW52aXJvbm1lbnQqIHZhcmlhYmxlc1VuZGVy
VERaKQoreworICAgIGJvb2wgaXNBcnJvd0Z1bmN0aW9uQ29udGV4dCA9IGZhbHNlOworICAgIFVu
bGlua2VkQ29kZUJsb2NrVHlwZSogdW5saW5rZWRDb2RlQmxvY2sgPSBnZW5lcmF0ZVVubGlua2Vk
Q29kZUJsb2NrSW1wbDxVbmxpbmtlZENvZGVCbG9ja1R5cGU+KHZtLCBzb3VyY2UsIHN0cmljdE1v
ZGUsIHNjcmlwdE1vZGUsIGRlYnVnZ2VyTW9kZSwgZXJyb3IsIGV2YWxDb250ZXh0VHlwZSwgRGVy
aXZlZENvbnRleHRUeXBlOjpOb25lLCBpc0Fycm93RnVuY3Rpb25Db250ZXh0LCB2YXJpYWJsZXNV
bmRlclREWik7CisgICAgaWYgKCF1bmxpbmtlZENvZGVCbG9jaykKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisKKyAgICBnZW5lcmF0ZVVubGlua2VkQ29kZUJsb2NrRm9yRnVuY3Rpb25zKHZtLCB1
bmxpbmtlZENvZGVCbG9jaywgc291cmNlLCBkZWJ1Z2dlck1vZGUsIGVycm9yKTsKKyAgICByZXR1
cm4gdW5saW5rZWRDb2RlQmxvY2s7CiB9CiAKK3ZvaWQgd3JpdGVDb2RlQmxvY2soVk0mLCBjb25z
dCBTb3VyY2VDb2RlS2V5JiwgY29uc3QgU291cmNlQ29kZVZhbHVlJik7CitDYWNoZWRCeXRlY29k
ZSBzZXJpYWxpemVCeXRlY29kZShWTSYsIFVubGlua2VkQ29kZUJsb2NrKiwgY29uc3QgU291cmNl
Q29kZSYsIFNvdXJjZUNvZGVUeXBlLCBKU1BhcnNlclN0cmljdE1vZGUsIEpTUGFyc2VyU2NyaXB0
TW9kZSwgRGVidWdnZXJNb2RlKTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21wbGV0aW9uLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0NvbXBsZXRpb24uY3BwCmluZGV4IDNmYjRhYjlkM2FhMmUzNGJi
Y2Q5YWRmZmE3MzA3ZTcwNzZhNDYxYWYuLjhhODc1Y2Q3ZTNiMDVkYzQzNjU5ZjAxYjcwMDUyYmMx
M2NjMWFlMTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbXBs
ZXRpb24uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbXBsZXRpb24u
Y3BwCkBAIC0yNSw2ICsyNSw3IEBACiAKICNpbmNsdWRlICJDYWxsRnJhbWUuaCIKICNpbmNsdWRl
ICJDYXRjaFNjb3BlLmgiCisjaW5jbHVkZSAiQ29kZUNhY2hlLmgiCiAjaW5jbHVkZSAiQ29kZVBy
b2ZpbGluZy5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIklkZW50aWZpZXJJ
bmxpbmVzLmgiCkBAIC05MCw2ICs5MSwzNiBAQCBib29sIGNoZWNrTW9kdWxlU3ludGF4KEV4ZWNT
dGF0ZSogZXhlYywgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBQYXJzZXJFcnJvciYgZQogICAg
IHJldHVybiB0cnVlOwogfQogCitDYWNoZWRCeXRlY29kZSBnZW5lcmF0ZUJ5dGVjb2RlKFZNJiB2
bSwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBQYXJzZXJFcnJvciYgZXJyb3IpCit7CisgICAg
SlNMb2NrSG9sZGVyIGxvY2sodm0pOworICAgIFJFTEVBU0VfQVNTRVJUKHZtLmF0b21pY1N0cmlu
Z1RhYmxlKCkgPT0gVGhyZWFkOjpjdXJyZW50KCkuYXRvbWljU3RyaW5nVGFibGUoKSk7CisKKyAg
ICBWYXJpYWJsZUVudmlyb25tZW50IHZhcmlhYmxlc1VuZGVyVERaOworICAgIEpTUGFyc2VyU3Ry
aWN0TW9kZSBzdHJpY3RNb2RlID0gSlNQYXJzZXJTdHJpY3RNb2RlOjpOb3RTdHJpY3Q7CisgICAg
SlNQYXJzZXJTY3JpcHRNb2RlIHNjcmlwdE1vZGUgPSBKU1BhcnNlclNjcmlwdE1vZGU6OkNsYXNz
aWM7CisgICAgRGVidWdnZXJNb2RlIGRlYnVnZ2VyTW9kZSA9IERlYnVnZ2VyT2ZmOworICAgIEV2
YWxDb250ZXh0VHlwZSBldmFsQ29udGV4dFR5cGUgPSBFdmFsQ29udGV4dFR5cGU6Ok5vbmU7CisK
KyAgICBVbmxpbmtlZENvZGVCbG9jayogdW5saW5rZWRDb2RlQmxvY2sgPSByZWN1cnNpdmVseUdl
bmVyYXRlVW5saW5rZWRDb2RlQmxvY2s8VW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrPih2bSwgc291
cmNlLCBzdHJpY3RNb2RlLCBzY3JpcHRNb2RlLCBkZWJ1Z2dlck1vZGUsIGVycm9yLCBldmFsQ29u
dGV4dFR5cGUsICZ2YXJpYWJsZXNVbmRlclREWik7CisgICAgcmV0dXJuIHNlcmlhbGl6ZUJ5dGVj
b2RlKHZtLCB1bmxpbmtlZENvZGVCbG9jaywgc291cmNlLCBTb3VyY2VDb2RlVHlwZTo6UHJvZ3Jh
bVR5cGUsIHN0cmljdE1vZGUsIHNjcmlwdE1vZGUsIGRlYnVnZ2VyTW9kZSk7Cit9CisKK0NhY2hl
ZEJ5dGVjb2RlIGdlbmVyYXRlTW9kdWxlQnl0ZWNvZGUoVk0mIHZtLCBjb25zdCBTb3VyY2VDb2Rl
JiBzb3VyY2UsIFBhcnNlckVycm9yJiBlcnJvcikKK3sKKyAgICBKU0xvY2tIb2xkZXIgbG9jayh2
bSk7CisgICAgUkVMRUFTRV9BU1NFUlQodm0uYXRvbWljU3RyaW5nVGFibGUoKSA9PSBUaHJlYWQ6
OmN1cnJlbnQoKS5hdG9taWNTdHJpbmdUYWJsZSgpKTsKKworICAgIFZhcmlhYmxlRW52aXJvbm1l
bnQgdmFyaWFibGVzVW5kZXJURFo7CisgICAgSlNQYXJzZXJTdHJpY3RNb2RlIHN0cmljdE1vZGUg
PSBKU1BhcnNlclN0cmljdE1vZGU6OlN0cmljdDsKKyAgICBKU1BhcnNlclNjcmlwdE1vZGUgc2Ny
aXB0TW9kZSA9IEpTUGFyc2VyU2NyaXB0TW9kZTo6TW9kdWxlOworICAgIERlYnVnZ2VyTW9kZSBk
ZWJ1Z2dlck1vZGUgPSBEZWJ1Z2dlck9mZjsKKyAgICBFdmFsQ29udGV4dFR5cGUgZXZhbENvbnRl
eHRUeXBlID0gRXZhbENvbnRleHRUeXBlOjpOb25lOworCisgICAgVW5saW5rZWRDb2RlQmxvY2sq
IHVubGlua2VkQ29kZUJsb2NrID0gcmVjdXJzaXZlbHlHZW5lcmF0ZVVubGlua2VkQ29kZUJsb2Nr
PFVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jaz4odm0sIHNvdXJjZSwgc3RyaWN0TW9kZSwg
c2NyaXB0TW9kZSwgZGVidWdnZXJNb2RlLCBlcnJvciwgZXZhbENvbnRleHRUeXBlLCAmdmFyaWFi
bGVzVW5kZXJURFopOworICAgIHJldHVybiBzZXJpYWxpemVCeXRlY29kZSh2bSwgdW5saW5rZWRD
b2RlQmxvY2ssIHNvdXJjZSwgU291cmNlQ29kZVR5cGU6Ok1vZHVsZVR5cGUsIHN0cmljdE1vZGUs
IHNjcmlwdE1vZGUsIGRlYnVnZ2VyTW9kZSk7Cit9CisKIEpTVmFsdWUgZXZhbHVhdGUoRXhlY1N0
YXRlKiBleGVjLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIEpTVmFsdWUgdGhpc1ZhbHVlLCBO
YWtlZFB0cjxFeGNlcHRpb24+JiByZXR1cm5lZEV4Y2VwdGlvbikKIHsKICAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29t
cGxldGlvbi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tcGxldGlvbi5oCmlu
ZGV4IDgyN2U2MWYzYzYxZDBjYjdiYmU3NWE2MTI3NzEyNGZiMGRhNzJhYWUuLjMwNzI4ODliYjRj
YWEzNmI1NWQ0M2YxYzY2YTYzMmQ2NDEzODE5NmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0NvbXBsZXRpb24uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Db21wbGV0aW9uLmgKQEAgLTI4LDYgKzI4LDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7
CiAKK2NsYXNzIENhY2hlZEJ5dGVjb2RlOwogY2xhc3MgRXhjZXB0aW9uOwogY2xhc3MgRXhlY1N0
YXRlOwogY2xhc3MgSlNPYmplY3Q7CkBAIC00MSw2ICs0Miw5IEBAIEpTX0VYUE9SVF9QUklWQVRF
IGJvb2wgY2hlY2tTeW50YXgoVk0mLCBjb25zdCBTb3VyY2VDb2RlJiwgUGFyc2VyRXJyb3ImKTsK
IEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgY2hlY2tTeW50YXgoRXhlY1N0YXRlKiwgY29uc3QgU291
cmNlQ29kZSYsIEpTVmFsdWUqIGV4Y2VwdGlvbiA9IDApOwogSlNfRVhQT1JUX1BSSVZBVEUgYm9v
bCBjaGVja01vZHVsZVN5bnRheChFeGVjU3RhdGUqLCBjb25zdCBTb3VyY2VDb2RlJiwgUGFyc2Vy
RXJyb3ImKTsKIAorSlNfRVhQT1JUX1BSSVZBVEUgQ2FjaGVkQnl0ZWNvZGUgZ2VuZXJhdGVCeXRl
Y29kZShWTSYsIGNvbnN0IFNvdXJjZUNvZGUmLCBQYXJzZXJFcnJvciYpOworSlNfRVhQT1JUX1BS
SVZBVEUgQ2FjaGVkQnl0ZWNvZGUgZ2VuZXJhdGVNb2R1bGVCeXRlY29kZShWTSYsIGNvbnN0IFNv
dXJjZUNvZGUmLCBQYXJzZXJFcnJvciYpOworCiBKU19FWFBPUlRfUFJJVkFURSBKU1ZhbHVlIGV2
YWx1YXRlKEV4ZWNTdGF0ZSosIGNvbnN0IFNvdXJjZUNvZGUmLCBKU1ZhbHVlIHRoaXNWYWx1ZSwg
TmFrZWRQdHI8RXhjZXB0aW9uPiYgcmV0dXJuZWRFeGNlcHRpb24pOwogaW5saW5lIEpTVmFsdWUg
ZXZhbHVhdGUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2VDb2RlLCBK
U1ZhbHVlIHRoaXNWYWx1ZSA9IEpTVmFsdWUoKSkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvT3B0aW9ucy5jcHAKaW5kZXggOGIwNWNhODIzMDBiYzc5YTIyOWFjNjBmODZiYjQ1NjY3
ZWVmZGE1ZS4uODRkNzMyNmEyNGZiZTVhNWRlMDNjNWMzOGRiZjJiZGVkZjIzNjBjYiAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAKQEAgLTUyNyw5ICs1MjcsNiBA
QCBzdGF0aWMgdm9pZCByZWNvbXB1dGVEZXBlbmRlbnRPcHRpb25zKCkKIAogICAgIGlmICghT3B0
aW9uczo6dXNlQ29kZUNhY2hlKCkpCiAgICAgICAgIE9wdGlvbnM6OmRpc2tDYWNoZVBhdGgoKSA9
IG51bGxwdHI7Ci0KLSAgICBpZiAoIU9wdGlvbnM6OmRpc2tDYWNoZVBhdGgoKSkKLSAgICAgICAg
T3B0aW9uczo6Zm9yY2VEaXNrQ2FjaGUoKSA9IGZhbHNlOwogfQogCiB2b2lkIE9wdGlvbnM6Omlu
aXRpYWxpemUoKQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>